diff --git a/cypress/fixtures/Git Gateway (GitHub) Backend Media Library - Large Media__can delete image from global media library.json b/cypress/fixtures/Git Gateway (GitHub) Backend Media Library - Large Media__can delete image from global media library.json index b21ef8b1..7f90fd03 100644 --- a/cypress/fixtures/Git Gateway (GitHub) Backend Media Library - Large Media__can delete image from global media library.json +++ b/cypress/fixtures/Git Gateway (GitHub) Backend Media Library - Large Media__can delete image from global media library.json @@ -10,7 +10,7 @@ "Content-Length": "383", "Content-Type": "application/json", "Via": "1.1 google", - "Age": "1", + "Age": "2", "Connection": "keep-alive", "Server": "Netlify", "Vary": "Origin" @@ -25,15 +25,15 @@ "Access-Control-Allow-Credentials": "true", "Access-Control-Allow-Origin": "*", "Alt-Svc": "clear", + "Content-Length": "262", "Content-Type": "application/json", "Via": "1.1 google", "Age": "0", "Connection": "keep-alive", "Server": "Netlify", - "Vary": "Origin,Accept-Encoding", - "content-length": "262" + "Vary": "Origin" }, - "response": "{\"id\":\"365ea835-aeb4-43c4-ad08-b6fad46a7e5a\",\"aud\":\"\",\"role\":\"\",\"email\":\"netlifyCMS@netlify.com\",\"confirmed_at\":\"2020-04-12T12:22:06Z\",\"app_metadata\":{\"provider\":\"email\"},\"user_metadata\":{},\"created_at\":\"2020-04-12T12:22:06Z\",\"updated_at\":\"2020-04-12T12:22:06Z\"}", + "response": "{\"id\":\"7095d206-f6a8-4c00-a711-fde907100dc0\",\"aud\":\"\",\"role\":\"\",\"email\":\"netlifyCMS@netlify.com\",\"confirmed_at\":\"2020-08-11T14:55:21Z\",\"app_metadata\":{\"provider\":\"email\"},\"user_metadata\":{},\"created_at\":\"2020-08-11T14:55:21Z\",\"updated_at\":\"2020-08-11T14:55:21Z\"}", "status": 200 }, { @@ -43,13 +43,13 @@ "Access-Control-Allow-Credentials": "true", "Access-Control-Allow-Origin": "http://localhost:8080", "Alt-Svc": "clear", + "Content-Length": "85", "Content-Type": "application/json", "Via": "1.1 google", "Age": "0", "Connection": "keep-alive", "Server": "Netlify", - "Vary": "Origin,Accept-Encoding", - "content-length": "85" + "Vary": "Origin" }, "response": "{\"github_enabled\":true,\"gitlab_enabled\":false,\"bitbucket_enabled\":false,\"roles\":null}", "status": 200 @@ -76,42 +76,12 @@ "X-Oauth-Scopes": "delete_repo, repo", "X-Ratelimit-Limit": "5000", "X-Xss-Protection": "1; mode=block", - "Age": "0", + "Age": "1", "Connection": "keep-alive", "Vary": "Origin,Accept,Authorization,Cookie,X-GitHub-OTP,Accept-Encoding,Accept,X-Requested-With", "content-length": "4757" }, - "response": "{\n \"name\": \"master\",\n \"commit\": {\n \"sha\": \"919b7ce0846f25371e0585e302d8fc7e63fb515c\",\n \"node_id\": \"MDY6Q29tbWl0MjU1MDc1OTQzOjkxOWI3Y2UwODQ2ZjI1MzcxZTA1ODVlMzAyZDhmYzdlNjNmYjUxNWM=\",\n \"commit\": {\n \"author\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2020-04-12T12:18:55Z\"\n },\n \"committer\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2020-04-12T12:18:55Z\"\n },\n \"message\": \"add .lfsconfig\",\n \"tree\": {\n \"sha\": \"491f2279cd0955712449776a54f8b58b3bc38d4d\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/491f2279cd0955712449776a54f8b58b3bc38d4d\"\n },\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/919b7ce0846f25371e0585e302d8fc7e63fb515c\",\n \"comment_count\": 0,\n \"verification\": {\n \"verified\": false,\n \"reason\": \"unsigned\",\n \"signature\": null,\n \"payload\": null\n }\n },\n \"url\": \"https://api.github.com/repos/owner/repo/commits/919b7ce0846f25371e0585e302d8fc7e63fb515c\",\n \"html_url\": \"https://github.com/owner/repo/commit/919b7ce0846f25371e0585e302d8fc7e63fb515c\",\n \"comments_url\": \"https://api.github.com/repos/owner/repo/commits/919b7ce0846f25371e0585e302d8fc7e63fb515c/comments\",\n \"author\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"committer\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"parents\": [\n {\n \"sha\": \"b33a2edece736f6f228c7ec28c385c57d5f890af\",\n \"url\": \"https://api.github.com/repos/owner/repo/commits/b33a2edece736f6f228c7ec28c385c57d5f890af\",\n \"html_url\": \"https://github.com/owner/repo/commit/b33a2edece736f6f228c7ec28c385c57d5f890af\"\n }\n ]\n },\n \"_links\": {\n \"self\": \"https://api.github.com/repos/owner/repo/branches/master\",\n \"html\": \"https://github.com/owner/repo/tree/master\"\n },\n \"protected\": false,\n \"protection\": {\n \"enabled\": false,\n \"required_status_checks\": {\n \"enforcement_level\": \"off\",\n \"contexts\": [\n\n ]\n }\n },\n \"protection_url\": \"https://api.github.com/repos/owner/repo/branches/master/protection\"\n}\n", - "status": 200 - }, - { - "method": "GET", - "url": "/.netlify/git/github/git/trees/master:content/posts", - "headers": { - "Access-Control-Allow-Credentials": "true", - "Access-Control-Allow-Origin": "http://localhost:8080", - "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", - "Alt-Svc": "clear", - "Cache-Control": "private, max-age=60, s-maxage=60", - "Content-Security-Policy": "default-src 'none'", - "Content-Type": "application/json; charset=utf-8", - "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", - "Server": "Netlify", - "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", - "Via": "1.1 google", - "X-Accepted-Oauth-Scopes": "", - "X-Content-Type-Options": "nosniff", - "X-Frame-Options": "deny", - "X-Github-Media-Type": "github.v3; format=json", - "X-Oauth-Scopes": "delete_repo, repo", - "X-Ratelimit-Limit": "5000", - "X-Xss-Protection": "1; mode=block", - "Age": "0", - "Connection": "keep-alive", - "Vary": "Origin,Accept,Authorization,Cookie,X-GitHub-OTP,Accept-Encoding,Accept,X-Requested-With", - "content-length": "2060" - }, - "response": "{\n \"sha\": \"34892575e216c06e757093f036bd8e057c78a52f\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/34892575e216c06e757093f036bd8e057c78a52f\",\n \"tree\": [\n {\n \"path\": \"2016-01-09---Perfecting-the-Art-of-Perfection.md\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"6d51a38aed7139d2117724b1e307657b6ff2d043\",\n \"size\": 1707,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/6d51a38aed7139d2117724b1e307657b6ff2d043\"\n },\n {\n \"path\": \"2016-01-12---The-Origins-of-Social-Stationery-Lettering.md\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"d0582dd245a3f408fb3fe2333bf01400007476e9\",\n \"size\": 2565,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/d0582dd245a3f408fb3fe2333bf01400007476e9\"\n },\n {\n \"path\": \"2016-02-02---A-Brief-History-of-Typography.md\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"0eea554365f002d0f1572af9a58522d335a794d5\",\n \"size\": 2786,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/0eea554365f002d0f1572af9a58522d335a794d5\"\n },\n {\n \"path\": \"2017-18-08---The-Birth-of-Movable-Type.md\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"44f78c474d04273185a95821426f75affc9b0044\",\n \"size\": 16071,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/44f78c474d04273185a95821426f75affc9b0044\"\n },\n {\n \"path\": \"2017-19-08---Humane-Typography-in-the-Digital-Age.md\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"a532f0a9445cdf90a19c6812cff89d1674991774\",\n \"size\": 7465,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/a532f0a9445cdf90a19c6812cff89d1674991774\"\n }\n ],\n \"truncated\": false\n}\n", + "response": "{\"name\":\"master\",\"commit\":{\"sha\":\"53145723604c528d6ce5f8d034b3e86234aa170a\",\"node_id\":\"MDY6Q29tbWl0Mjg2NzcxMTE2OjUzMTQ1NzIzNjA0YzUyOGQ2Y2U1ZjhkMDM0YjNlODYyMzRhYTE3MGE=\",\"commit\":{\"author\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2020-08-11T14:50:01Z\"},\"committer\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2020-08-11T14:50:01Z\"},\"message\":\"add .lfsconfig\",\"tree\":{\"sha\":\"9801bc49ad87a5f15cbe4e701e0a9899e7500038\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/9801bc49ad87a5f15cbe4e701e0a9899e7500038\"},\"url\":\"https://api.github.com/repos/owner/repo/git/commits/53145723604c528d6ce5f8d034b3e86234aa170a\",\"comment_count\":0,\"verification\":{\"verified\":false,\"reason\":\"unsigned\",\"signature\":null,\"payload\":null}},\"url\":\"https://api.github.com/repos/owner/repo/commits/53145723604c528d6ce5f8d034b3e86234aa170a\",\"html_url\":\"https://github.com/owner/repo/commit/53145723604c528d6ce5f8d034b3e86234aa170a\",\"comments_url\":\"https://api.github.com/repos/owner/repo/commits/53145723604c528d6ce5f8d034b3e86234aa170a/comments\",\"author\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"committer\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"parents\":[{\"sha\":\"cb2e8e6e165648920f696fe4c50113d15ee95937\",\"url\":\"https://api.github.com/repos/owner/repo/commits/cb2e8e6e165648920f696fe4c50113d15ee95937\",\"html_url\":\"https://github.com/owner/repo/commit/cb2e8e6e165648920f696fe4c50113d15ee95937\"}]},\"_links\":{\"self\":\"https://api.github.com/repos/owner/repo/branches/master\",\"html\":\"https://github.com/owner/repo/tree/master\"},\"protected\":false,\"protection\":{\"enabled\":false,\"required_status_checks\":{\"enforcement_level\":\"off\",\"contexts\":[]}},\"protection_url\":\"https://api.github.com/repos/owner/repo/branches/master/protection\"}", "status": 200 }, { @@ -140,12 +110,12 @@ "Vary": "Origin,Accept-Encoding,Accept,X-Requested-With", "content-length": "109" }, - "response": "{\n \"message\": \"Not Found\",\n \"documentation_url\": \"https://developer.github.com/v3/git/trees/#get-a-tree\"\n}\n", + "response": "{\"message\":\"Not Found\",\"documentation_url\":\"https://docs.github.com/rest/reference/git#get-a-tree\"}", "status": 404 }, { "method": "GET", - "url": "/.netlify/git/github/git/blobs/6d51a38aed7139d2117724b1e307657b6ff2d043", + "url": "/.netlify/git/github/git/trees/master:content/posts", "headers": { "Access-Control-Allow-Credentials": "true", "Access-Control-Allow-Origin": "http://localhost:8080", @@ -168,39 +138,9 @@ "Age": "0", "Connection": "keep-alive", "Vary": "Origin,Accept,Authorization,Cookie,X-GitHub-OTP,Accept-Encoding,Accept,X-Requested-With", - "content-length": "2714" + "content-length": "2060" }, - "response": "{\n \"sha\": \"6d51a38aed7139d2117724b1e307657b6ff2d043\",\n \"node_id\": \"MDQ6QmxvYjI1NTA3NTk0Mzo2ZDUxYTM4YWVkNzEzOWQyMTE3NzI0YjFlMzA3NjU3YjZmZjJkMDQz\",\n \"size\": 1707,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/6d51a38aed7139d2117724b1e307657b6ff2d043\",\n \"content\": \"LS0tCnRpdGxlOiBQZXJmZWN0aW5nIHRoZSBBcnQgb2YgUGVyZmVjdGlvbgpk\\nYXRlOiAiMjAxNi0wOS0wMVQyMzo0NjozNy4xMjFaIgp0ZW1wbGF0ZTogInBv\\nc3QiCmRyYWZ0OiBmYWxzZQpjYXRlZ29yeTogIkRlc2lnbiBJbnNwaXJhdGlv\\nbiIKdGFnczoKICAtICJIYW5kd3JpdGluZyIKICAtICJMZWFybmluZyB0byB3\\ncml0ZSIKZGVzY3JpcHRpb246ICJRdWlzcXVlIGN1cnN1cywgbWV0dXMgdml0\\nYWUgcGhhcmV0cmEgYXVjdG9yLCBzZW0gbWFzc2EgbWF0dGlzIHNlbSwgYXQg\\naW50ZXJkdW0gbWFnbmEgYXVndWUgZWdldCBkaWFtLiBWZXN0aWJ1bHVtIGFu\\ndGUgaXBzdW0gcHJpbWlzIGluIGZhdWNpYnVzIG9yY2kgbHVjdHVzIGV0IHVs\\ndHJpY2VzIHBvc3VlcmUgY3ViaWxpYSBDdXJhZTsgTW9yYmkgbGFjaW5pYSBt\\nb2xlc3RpZSBkdWkuIFByYWVzZW50IGJsYW5kaXQgZG9sb3IuIFNlZCBub24g\\ncXVhbS4gSW4gdmVsIG1pIHNpdCBhbWV0IGF1Z3VlIGNvbmd1ZSBlbGVtZW50\\ndW0uIgpjYW5vbmljYWw6ICcnCi0tLQoKUXVpc3F1ZSBjdXJzdXMsIG1ldHVz\\nIHZpdGFlIHBoYXJldHJhIGF1Y3Rvciwgc2VtIG1hc3NhIG1hdHRpcyBzZW0s\\nIGF0IGludGVyZHVtIG1hZ25hIGF1Z3VlIGVnZXQgZGlhbS4gVmVzdGlidWx1\\nbSBhbnRlIGlwc3VtIHByaW1pcyBpbiBmYXVjaWJ1cyBvcmNpIGx1Y3R1cyBl\\ndCB1bHRyaWNlcyBwb3N1ZXJlIGN1YmlsaWEgQ3VyYWU7IE1vcmJpIGxhY2lu\\naWEgbW9sZXN0aWUgZHVpLiBQcmFlc2VudCBibGFuZGl0IGRvbG9yLiBTZWQg\\nbm9uIHF1YW0uIEluIHZlbCBtaSBzaXQgYW1ldCBhdWd1ZSBjb25ndWUgZWxl\\nbWVudHVtLgoKIVtOdWxsYSBmYXVjaWJ1cyB2ZXN0aWJ1bHVtIGVyb3MgaW4g\\ndGVtcHVzLiBWZXN0aWJ1bHVtIHRlbXBvciBpbXBlcmRpZXQgdmVsaXQgbmVj\\nIGRhcGlidXNdKC9tZWRpYS9pbWFnZS0yLmpwZykKClBlbGxlbnRlc3F1ZSBo\\nYWJpdGFudCBtb3JiaSB0cmlzdGlxdWUgc2VuZWN0dXMgZXQgbmV0dXMgZXQg\\nbWFsZXN1YWRhIGZhbWVzIGFjIHR1cnBpcyBlZ2VzdGFzLiBWZXN0aWJ1bHVt\\nIHRvcnRvciBxdWFtLCBmZXVnaWF0IHZpdGFlLCB1bHRyaWNpZXMgZWdldCwg\\ndGVtcG9yIHNpdCBhbWV0LCBhbnRlLiBEb25lYyBldSBsaWJlcm8gc2l0IGFt\\nZXQgcXVhbSBlZ2VzdGFzIHNlbXBlci4gQWVuZWFuIHVsdHJpY2llcyBtaSB2\\naXRhZSBlc3QuIE1hdXJpcyBwbGFjZXJhdCBlbGVpZmVuZCBsZW8uIFF1aXNx\\ndWUgc2l0IGFtZXQgZXN0IGV0IHNhcGllbiB1bGxhbWNvcnBlciBwaGFyZXRy\\nYS4gVmVzdGlidWx1bSBlcmF0IHdpc2ksIGNvbmRpbWVudHVtIHNlZCwgY29t\\nbW9kbyB2aXRhZSwgb3JuYXJlIHNpdCBhbWV0LCB3aXNpLiBBZW5lYW4gZmVy\\nbWVudHVtLCBlbGl0IGVnZXQgdGluY2lkdW50IGNvbmRpbWVudHVtLCBlcm9z\\nIGlwc3VtIHJ1dHJ1bSBvcmNpLCBzYWdpdHRpcyB0ZW1wdXMgbGFjdXMgZW5p\\nbSBhYyBkdWkuIERvbmVjIG5vbiBlbmltIGluIHR1cnBpcyBwdWx2aW5hciBm\\nYWNpbGlzaXMuIFV0IGZlbGlzLiAKClByYWVzZW50IGRhcGlidXMsIG5lcXVl\\nIGlkIGN1cnN1cyBmYXVjaWJ1cywgdG9ydG9yIG5lcXVlIGVnZXN0YXMgYXVn\\ndWUsIGV1IHZ1bHB1dGF0ZSBtYWduYSBlcm9zIGV1IGVyYXQuIEFsaXF1YW0g\\nZXJhdCB2b2x1dHBhdC4gTmFtIGR1aSBtaSwgdGluY2lkdW50IHF1aXMsIGFj\\nY3Vtc2FuIHBvcnR0aXRvciwgZmFjaWxpc2lzIGx1Y3R1cywgbWV0dXMu\\n\",\n \"encoding\": \"base64\"\n}\n", - "status": 200 - }, - { - "method": "GET", - "url": "/.netlify/git/github/git/blobs/d0582dd245a3f408fb3fe2333bf01400007476e9", - "headers": { - "Access-Control-Allow-Credentials": "true", - "Access-Control-Allow-Origin": "http://localhost:8080", - "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", - "Alt-Svc": "clear", - "Cache-Control": "private, max-age=60, s-maxage=60", - "Content-Security-Policy": "default-src 'none'", - "Content-Type": "application/json; charset=utf-8", - "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", - "Server": "Netlify", - "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", - "Via": "1.1 google", - "X-Accepted-Oauth-Scopes": "", - "X-Content-Type-Options": "nosniff", - "X-Frame-Options": "deny", - "X-Github-Media-Type": "github.v3; format=json", - "X-Oauth-Scopes": "delete_repo, repo", - "X-Ratelimit-Limit": "5000", - "X-Xss-Protection": "1; mode=block", - "Age": "0", - "Connection": "keep-alive", - "Vary": "Origin,Accept,Authorization,Cookie,X-GitHub-OTP,Accept-Encoding,Accept,X-Requested-With", - "content-length": "3896" - }, - "response": "{\n \"sha\": \"d0582dd245a3f408fb3fe2333bf01400007476e9\",\n \"node_id\": \"MDQ6QmxvYjI1NTA3NTk0MzpkMDU4MmRkMjQ1YTNmNDA4ZmIzZmUyMzMzYmYwMTQwMDAwNzQ3NmU5\",\n \"size\": 2565,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/d0582dd245a3f408fb3fe2333bf01400007476e9\",\n \"content\": \"LS0tCnRpdGxlOiBUaGUgT3JpZ2lucyBvZiBTb2NpYWwgU3RhdGlvbmVyeSBM\\nZXR0ZXJpbmcKZGF0ZTogIjIwMTYtMTItMDFUMjI6NDA6MzIuMTY5WiIKdGVt\\ncGxhdGU6ICJwb3N0IgpkcmFmdDogZmFsc2UKY2F0ZWdvcnk6ICJEZXNpZ24g\\nQ3VsdHVyZSIKZGVzY3JpcHRpb246ICJQZWxsZW50ZXNxdWUgaGFiaXRhbnQg\\nbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzIGV0IG5ldHVzIGV0IG1hbGVzdWFk\\nYSBmYW1lcyBhYyB0dXJwaXMgZWdlc3Rhcy4gVmVzdGlidWx1bSB0b3J0b3Ig\\ncXVhbSwgZmV1Z2lhdCB2aXRhZSwgdWx0cmljaWVzIGVnZXQsIHRlbXBvciBz\\naXQgYW1ldCwgYW50ZS4iCmNhbm9uaWNhbDogJycKLS0tCgoqKlBlbGxlbnRl\\nc3F1ZSBoYWJpdGFudCBtb3JiaSB0cmlzdGlxdWUqKiBzZW5lY3R1cyBldCBu\\nZXR1cyBldCBtYWxlc3VhZGEgZmFtZXMgYWMgdHVycGlzIGVnZXN0YXMuIFZl\\nc3RpYnVsdW0gdG9ydG9yIHF1YW0sIGZldWdpYXQgdml0YWUsIHVsdHJpY2ll\\ncyBlZ2V0LCB0ZW1wb3Igc2l0IGFtZXQsIGFudGUuIERvbmVjIGV1IGxpYmVy\\nbyBzaXQgYW1ldCBxdWFtIGVnZXN0YXMgc2VtcGVyLiAqQWVuZWFuIHVsdHJp\\nY2llcyBtaSB2aXRhZSBlc3QuKiBNYXVyaXMgcGxhY2VyYXQgZWxlaWZlbmQg\\nbGVvLiBRdWlzcXVlIHNpdCBhbWV0IGVzdCBldCBzYXBpZW4gdWxsYW1jb3Jw\\nZXIgcGhhcmV0cmEuIAoKVmVzdGlidWx1bSBlcmF0IHdpc2ksIGNvbmRpbWVu\\ndHVtIHNlZCwgY29tbW9kbyB2aXRhZSwgb3JuYXJlIHNpdCBhbWV0LCB3aXNp\\nLiBBZW5lYW4gZmVybWVudHVtLCBlbGl0IGVnZXQgdGluY2lkdW50IGNvbmRp\\nbWVudHVtLCBlcm9zIGlwc3VtIHJ1dHJ1bSBvcmNpLCBzYWdpdHRpcyB0ZW1w\\ndXMgbGFjdXMgZW5pbSBhYyBkdWkuICBbRG9uZWMgbm9uIGVuaW1dKCMpIGlu\\nIHR1cnBpcyBwdWx2aW5hciBmYWNpbGlzaXMuCgohW051bGxhIGZhdWNpYnVz\\nIHZlc3RpYnVsdW0gZXJvcyBpbiB0ZW1wdXMuIFZlc3RpYnVsdW0gdGVtcG9y\\nIGltcGVyZGlldCB2ZWxpdCBuZWMgZGFwaWJ1c10oL21lZGlhL2ltYWdlLTMu\\nanBnKQoKIyMgSGVhZGVyIExldmVsIDIKCisgTG9yZW0gaXBzdW0gZG9sb3Ig\\nc2l0IGFtZXQsIGNvbnNlY3RldHVlciBhZGlwaXNjaW5nIGVsaXQuCisgQWxp\\ncXVhbSB0aW5jaWR1bnQgbWF1cmlzIGV1IHJpc3VzLgoKRG9uZWMgbm9uIGVu\\naW0gaW4gdHVycGlzIHB1bHZpbmFyIGZhY2lsaXNpcy4gVXQgZmVsaXMuIFBy\\nYWVzZW50IGRhcGlidXMsIG5lcXVlIGlkIGN1cnN1cyBmYXVjaWJ1cywgdG9y\\ndG9yIG5lcXVlIGVnZXN0YXMgYXVndWUsIGV1IHZ1bHB1dGF0ZSBtYWduYSBl\\ncm9zIGV1IGVyYXQuIEFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gCgo8ZmlndXJl\\nPgoJPGJsb2NrcXVvdGU+CgkJPHA+TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFt\\nZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gVml2YW11cyBtYWdu\\nYS4gQ3JhcyBpbiBtaSBhdCBmZWxpcyBhbGlxdWV0IGNvbmd1ZS4gVXQgYSBl\\nc3QgZWdldCBsaWd1bGEgbW9sZXN0aWUgZ3JhdmlkYS4gQ3VyYWJpdHVyIG1h\\nc3NhLiBEb25lYyBlbGVpZmVuZCwgbGliZXJvIGF0IHNhZ2l0dGlzIG1vbGxp\\ncywgdGVsbHVzIGVzdCBtYWxlc3VhZGEgdGVsbHVzLCBhdCBsdWN0dXMgdHVy\\ncGlzIGVsaXQgc2l0IGFtZXQgcXVhbS4gVml2YW11cyBwcmV0aXVtIG9ybmFy\\nZSBlc3QuPC9wPgoJCTxmb290ZXI+CgkJCTxjaXRlPuKAlCBBbGlxdWFtIHRp\\nbmNpZHVudCBtYXVyaXMgZXUgcmlzdXMuPC9jaXRlPgoJCTwvZm9vdGVyPgoJ\\nPC9ibG9ja3F1b3RlPgo8L2ZpZ3VyZT4KCiMjIyBIZWFkZXIgTGV2ZWwgMwoK\\nKyBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFk\\naXBpc2NpbmcgZWxpdC4KKyBBbGlxdWFtIHRpbmNpZHVudCBtYXVyaXMgZXUg\\ncmlzdXMuCgpQZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVl\\nIHNlbmVjdHVzIGV0IG5ldHVzIGV0IG1hbGVzdWFkYSBmYW1lcyBhYyB0dXJw\\naXMgZWdlc3Rhcy4gVmVzdGlidWx1bSB0b3J0b3IgcXVhbSwgZmV1Z2lhdCB2\\naXRhZSwgdWx0cmljaWVzIGVnZXQsIHRlbXBvciBzaXQgYW1ldCwgYW50ZS4g\\nRG9uZWMgZXUgbGliZXJvIHNpdCBhbWV0IHF1YW0gZWdlc3RhcyBzZW1wZXIu\\nIEFlbmVhbiB1bHRyaWNpZXMgbWkgdml0YWUgZXN0LiBNYXVyaXMgcGxhY2Vy\\nYXQgZWxlaWZlbmQgbGVvLiBRdWlzcXVlIHNpdCBhbWV0IGVzdCBldCBzYXBp\\nZW4gdWxsYW1jb3JwZXIgcGhhcmV0cmEuCgpgYGBjc3MKI2hlYWRlciBoMSBh\\nIHsKICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogMzAwcHg7CiAgaGVpZ2h0\\nOiA4MHB4Owp9CmBgYAoKRG9uZWMgbm9uIGVuaW0gaW4gdHVycGlzIHB1bHZp\\nbmFyIGZhY2lsaXNpcy4gVXQgZmVsaXMuIFByYWVzZW50IGRhcGlidXMsIG5l\\ncXVlIGlkIGN1cnN1cyBmYXVjaWJ1cywgdG9ydG9yIG5lcXVlIGVnZXN0YXMg\\nYXVndWUsIGV1IHZ1bHB1dGF0ZSBtYWduYSBlcm9zIGV1IGVyYXQuIEFsaXF1\\nYW0gZXJhdCB2b2x1dHBhdC4gTmFtIGR1aSBtaSwgdGluY2lkdW50IHF1aXMs\\nIGFjY3Vtc2FuIHBvcnR0aXRvciwgZmFjaWxpc2lzIGx1Y3R1cywgbWV0dXMu\\n\",\n \"encoding\": \"base64\"\n}\n", + "response": "{\"sha\":\"34892575e216c06e757093f036bd8e057c78a52f\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/34892575e216c06e757093f036bd8e057c78a52f\",\"tree\":[{\"path\":\"2016-01-09---Perfecting-the-Art-of-Perfection.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"6d51a38aed7139d2117724b1e307657b6ff2d043\",\"size\":1707,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/6d51a38aed7139d2117724b1e307657b6ff2d043\"},{\"path\":\"2016-01-12---The-Origins-of-Social-Stationery-Lettering.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"d0582dd245a3f408fb3fe2333bf01400007476e9\",\"size\":2565,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/d0582dd245a3f408fb3fe2333bf01400007476e9\"},{\"path\":\"2016-02-02---A-Brief-History-of-Typography.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"0eea554365f002d0f1572af9a58522d335a794d5\",\"size\":2786,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/0eea554365f002d0f1572af9a58522d335a794d5\"},{\"path\":\"2017-18-08---The-Birth-of-Movable-Type.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"44f78c474d04273185a95821426f75affc9b0044\",\"size\":16071,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/44f78c474d04273185a95821426f75affc9b0044\"},{\"path\":\"2017-19-08---Humane-Typography-in-the-Digital-Age.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"a532f0a9445cdf90a19c6812cff89d1674991774\",\"size\":7465,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/a532f0a9445cdf90a19c6812cff89d1674991774\"}],\"truncated\":false}", "status": 200 }, { @@ -230,7 +170,37 @@ "Vary": "Origin,Accept,Authorization,Cookie,X-GitHub-OTP,Accept-Encoding,Accept,X-Requested-With", "content-length": "10650" }, - "response": "{\n \"sha\": \"a532f0a9445cdf90a19c6812cff89d1674991774\",\n \"node_id\": \"MDQ6QmxvYjI1NTA3NTk0MzphNTMyZjBhOTQ0NWNkZjkwYTE5YzY4MTJjZmY4OWQxNjc0OTkxNzc0\",\n \"size\": 7465,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/a532f0a9445cdf90a19c6812cff89d1674991774\",\n \"content\": \"LS0tCnRpdGxlOiBIdW1hbmUgVHlwb2dyYXBoeSBpbiB0aGUgRGlnaXRhbCBB\\nZ2UKZGF0ZTogIjIwMTctMDgtMTlUMjI6NDA6MzIuMTY5WiIKdGVtcGxhdGU6\\nICJwb3N0IgpkcmFmdDogZmFsc2UKY2F0ZWdvcnk6ICJUeXBvZ3JhcGh5Igp0\\nYWdzOgogIC0gIkRlc2lnbiIKICAtICJUeXBvZ3JhcGh5IgogIC0gIldlYiBE\\nZXZlbG9wbWVudCIKZGVzY3JpcHRpb246ICJBbiBFc3NheSBvbiBUeXBvZ3Jh\\ncGh5IGJ5IEVyaWMgR2lsbCB0YWtlcyB0aGUgcmVhZGVyIGJhY2sgdG8gdGhl\\nIHllYXIgMTkzMC4gVGhlIHllYXIgd2hlbiBhIGNvbmZsaWN0IGJldHdlZW4g\\ndHdvIHdvcmxkcyBjYW1lIHRvIGl0cyB0ZXJtLiBUaGUgbWFjaGluZXMgb2Yg\\ndGhlIGluZHVzdHJpYWwgd29ybGQgZmluYWxseSB0b29rIG92ZXIgdGhlIGhh\\nbmRpY3JhZnRzLiIKY2Fub25pY2FsOiAnJwotLS0KCi0gW1RoZSBmaXJzdCB0\\ncmFuc2l0aW9uXSgjdGhlLWZpcnN0LXRyYW5zaXRpb24pCi0gW1RoZSBkaWdp\\ndGFsIGFnZV0oI3RoZS1kaWdpdGFsLWFnZSkKLSBbTG9zcyBvZiBodW1hbml0\\neSB0aHJvdWdoIHRyYW5zaXRpb25zXSgjbG9zcy1vZi1odW1hbml0eS10aHJv\\ndWdoLXRyYW5zaXRpb25zKQotIFtDaGFzaW5nIHBlcmZlY3Rpb25dKCNjaGFz\\naW5nLXBlcmZlY3Rpb24pCgpBbiBFc3NheSBvbiBUeXBvZ3JhcGh5IGJ5IEVy\\naWMgR2lsbCB0YWtlcyB0aGUgcmVhZGVyIGJhY2sgdG8gdGhlIHllYXIgMTkz\\nMC4gVGhlIHllYXIgd2hlbiBhIGNvbmZsaWN0IGJldHdlZW4gdHdvIHdvcmxk\\ncyBjYW1lIHRvIGl0cyB0ZXJtLiBUaGUgbWFjaGluZXMgb2YgdGhlIGluZHVz\\ndHJpYWwgd29ybGQgZmluYWxseSB0b29rIG92ZXIgdGhlIGhhbmRpY3JhZnRz\\nLgoKVGhlIHR5cG9ncmFwaHkgb2YgdGhpcyBpbmR1c3RyaWFsIGFnZSB3YXMg\\nbm8gbG9uZ2VyIGhhbmRjcmFmdGVkLiBNYXNzIHByb2R1Y3Rpb24gYW5kIHBy\\nb2ZpdCBiZWNhbWUgbW9yZSBpbXBvcnRhbnQuIFF1YW50aXR5IG1hdHRlcmVk\\nIG1vcmUgdGhhbiB0aGUgcXVhbGl0eS4gVGhlIGJvb2tzIGFuZCBwcmludGVk\\nIHdvcmtzIGluIGdlbmVyYWwgbG9zdCBhIHBhcnQgb2YgaXRzIGh1bWFuaXR5\\nLiBUaGUgdHlwZWZhY2VzIHdlcmUgbm90IHByb2R1Y2VkIGJ5IGNyYWZ0c21l\\nbiBhbnltb3JlLiBJdCB3YXMgdGhlIG1hY2hpbmVzIHByaW50aW5nIGFuZCB0\\neWluZyB0aGUgYm9va3MgdG9nZXRoZXIgbm93LiBUaGUgY3JhZnRzbWVuIGhh\\nZCB0byBsZXQgZ28gb2YgdGhlaXIgY3JhZnQgYW5kIGJlY2FtZSBhIGNvZyBp\\nbiB0aGUgcHJvY2Vzcy4gQW4gZXh0ZW5zaW9uIG9mIHRoZSBpbmR1c3RyaWFs\\nIG1hY2hpbmUuCgpCdXQgdGhlIHZpY3Rvcnkgb2YgdGhlIGluZHVzdHJpYWxp\\nc20gZGlkbuKAmXQgbWVhbiB0aGF0IHRoZSBjcmFmdHNtZW4gd2VyZSBjb21w\\nbGV0ZWx5IGV4dGluY3QuIFRoZSB0d28gd29ybGRzIGNvbnRpbnVlZCB0byBj\\nb2V4aXN0IGluZGVwZW5kZW50bHkuIEVhY2ggcmVjb2duaXNpbmcgdGhlIGdv\\nb2QgaW4gdGhlIG90aGVyIOKAlCB0aGUgcG93ZXIgb2YgaW5kdXN0cmlhbGlz\\nbSBhbmQgdGhlIGh1bWFuaXR5IG9mIGNyYWZ0c21hbnNoaXAuIFRoaXMgd2Fz\\nIHRoZSBzZWNvbmQgdHJhbnNpdGlvbiB0aGF0IHdvdWxkIHN0cmlwIHR5cG9n\\ncmFwaHkgb2YgYSBwYXJ0IG9mIGl0cyBodW1hbml0eS4gV2UgaGF2ZSB0byBn\\nbyA1MDAgeWVhcnMgYmFjayBpbiB0aW1lIHRvIG1lZXQgdGhlIGZpcnN0IG9u\\nZS4KCiMjIFRoZSBmaXJzdCB0cmFuc2l0aW9uCgpBIHNpbWlsYXIgY29uZmxp\\nY3QgZW1lcmdlZCBhZnRlciB0aGUgaW52ZW50aW9uIG9mIHRoZSBmaXJzdCBw\\ncmludGluZyBwcmVzcyBpbiBFdXJvcGUuIEpvaGFubmVzIEd1dGVuYmVyZyBp\\nbnZlbnRlZCBtb3ZhYmxlIHR5cGUgYW5kIHVzZWQgaXQgdG8gcHJvZHVjZSBk\\naWZmZXJlbnQgY29tcG9zaXRpb25zLiBIaXMgd29ya3Nob3AgY291bGQgcHJp\\nbnQgdXAgdG8gMjQwIGltcHJlc3Npb25zIHBlciBob3VyLiBVbnRpbCB0aGVu\\nLCB0aGUgYm9va3Mgd2VyZSBiZWluZyBjb3BpZWQgYnkgaGFuZC4gQWxsIHRo\\nZSBib29rcyB3ZXJlIGhhbmR3cml0dGVuIGFuZCBkZWNvcmF0ZWQgd2l0aCBo\\nYW5kIGRyYXduIG9ybmFtZW50cyBhbmQgZmlndXJlcy4gQSBwcm9jZXNzIG9m\\nIGNvcHlpbmcgYSBib29rIHdhcyBsb25nIGJ1dCBlYWNoIGJvb2ssIGV2ZW4g\\nYSBjb3B5LCB3YXMgYSB3b3JrIG9mIGFydC4KClRoZSBmaXJzdCBwcmludGVk\\nIGJvb2tzIHdlcmUsIGF0IGZpcnN0LCBwZXJjZWl2ZWQgYXMgaW5mZXJpb3Ig\\ndG8gdGhlIGhhbmR3cml0dGVuIG9uZXMuIFRoZXkgd2VyZSBzbWFsbGVyIGFu\\nZCBjaGVhcGVyIHRvIHByb2R1Y2UuIE1vdmFibGUgdHlwZSBwcm92aWRlZCB0\\naGUgcHJpbnRlcnMgd2l0aCBmbGV4aWJpbGl0eSB0aGF0IGFsbG93ZWQgdGhl\\nbSB0byBwcmludCBib29rcyBpbiBsYW5ndWFnZXMgb3RoZXIgdGhhbiBMYXRp\\nbi4gR2lsbCBkZXNjcmliZXMgdGhlIHRyYW5zaXRpb24gdG8gaW5kdXN0cmlh\\nbGlzbSBhcyBzb21ldGhpbmcgdGhhdCBwZW9wbGUgbmVlZGVkIGFuZCB3YW50\\nZWQuIFNvbWV0aGluZyBzaW1pbGFyIGhhcHBlbmVkIGFmdGVyIHRoZSBmaXJz\\ndCBwcmludGVkIGJvb2tzIGVtZXJnZWQuIFBlb3BsZSB3YW50ZWQgYm9va3Mg\\naW4gYSBsYW5ndWFnZSB0aGV5IHVuZGVyc3Rvb2QgYW5kIHRoZXkgd2FudGVk\\nIGJvb2tzIHRoZXkgY291bGQgdGFrZSB3aXRoIHRoZW0uIFRoZXkgd2VyZSBo\\ndW5ncnkgZm9yIGtub3dsZWRnZSBhbmQgcHJpbnRlZCBib29rcyBzYXRpc2Zp\\nZWQgdGhpcyBodW5nZXIuCgohWzQyLWxpbmUtYmlibGUuanBnXSgvbWVkaWEv\\nNDItbGluZS1iaWJsZS5qcGcpCgoqVGhlIDQy4oCTTGluZSBCaWJsZSwgcHJp\\nbnRlZCBieSBHdXRlbmJlcmcuKgoKQnV0LCB0aHJvdWdoIHRoaXMgdHJhbnNp\\ndGlvbiwgdGhlIGJvb2sgbG9zdCBhIGxhcmdlIHBhcnQgb2YgaXRzIGh1bWFu\\naXR5LiBUaGUgbWFjaGluZSB0b29rIG92ZXIgbW9zdCBvZiB0aGUgcHJvY2Vz\\ncyBidXQgY3JhZnRzbWFuc2hpcCB3YXMgc3RpbGwgYSBwYXJ0IG9mIGl0LiBU\\naGUgdHlwZWZhY2VzIHdlcmUgY3V0IG1hbnVhbGx5IGJ5IHRoZSBmaXJzdCBw\\ndW5jaCBjdXR0ZXJzLiBUaGUgcGFwZXIgd2FzIG1hZGUgYnkgaGFuZC4gVGhl\\nIGlsbHVzdHJhdGlvbnMgYW5kIG9ybmFtZW50cyB3ZXJlIHN0aWxsIGJlaW5n\\nIGhhbmQgZHJhd24uIFRoZXNlIHdlcmUgdGhlIHJlbWFpbnMgb2YgdGhlIGNy\\nYWZ0c21hbnNoaXAgdGhhdCB3ZW50IGFsbW9zdCBleHRpbmN0IGluIHRoZSB0\\naW1lcyBvZiBFcmljIEdpbGwuCgojIyBUaGUgZGlnaXRhbCBhZ2UKClRoZSBm\\naXJzdCB0cmFuc2l0aW9uIHRvb2sgYXdheSBhIGxhcmdlIHBhcnQgb2YgaHVt\\nYW5pdHkgZnJvbSB3cml0dGVuIGNvbW11bmljYXRpb24uIEluZHVzdHJpYWxp\\nc2F0aW9uLCB0aGUgc2Vjb25kIHRyYW5zaXRpb24gZGVzY3JpYmVkIGJ5IEVy\\naWMgR2lsbCwgdG9vayBhd2F5IG1vc3Qgb2Ygd2hhdCB3YXMgbGVmdC4gQnV0\\nIGl04oCZcyB0aGUgdGhpcmQgdHJhbnNpdGlvbiB0aGF0IHN0cmlwcGVkIGl0\\nIG5ha2VkLiBUeXBlZmFjZXMgYXJlIGZhY2VsZXNzIHRoZXNlIGRheXMuIFRo\\nZXnigJlyZSBqdXN0IGZvbnRzIG9uIG91ciBjb21wdXRlcnMuIEhhcmRseSBh\\nbnlvbmUga25vd3MgdGhlaXIgc3Rvcmllcy4gSGFyZGx5IGFueW9uZSBjYXJl\\ncy4gRmxpY2tpbmcgdGhyb3VnaCB0aG91c2FuZHMgb2YgdHlwZWZhY2VzIGFu\\nZCBmaW5kaW5nIHRoZSDigJxyaWdodCBvbmXigJ0gaXMgYSBtYXR0ZXIgb2Yg\\nbWludXRlcy4KCj4gSW4gdGhlIG5ldyBjb21wdXRlciBhZ2UgdGhlIHByb2xp\\nZmVyYXRpb24gb2YgdHlwZWZhY2VzIGFuZCB0eXBlIG1hbmlwdWxhdGlvbnMg\\ncmVwcmVzZW50cyBhIG5ldyBsZXZlbCBvZiB2aXN1YWwgcG9sbHV0aW9uIHRo\\ncmVhdGVuaW5nIG91ciBjdWx0dXJlLiBPdXQgb2YgdGhvdXNhbmRzIG9mIHR5\\ncGVmYWNlcywgYWxsIHdlIG5lZWQgYXJlIGEgZmV3IGJhc2ljIG9uZXMsIGFu\\nZCB0cmFzaCB0aGUgcmVzdC4KPgrigJQgTWFzc2ltbyBWaWduZWxsaQoKVHlw\\nb2dyYXBoeSBpcyBub3QgYWJvdXQgdHlwZWZhY2VzLiBJdOKAmXMgbm90IGFi\\nb3V0IHdoYXQgbG9va3MgYmVzdCwgaXTigJlzIGFib3V0IHdoYXQgZmVlbHMg\\ncmlnaHQuIFdoYXQgY29tbXVuaWNhdGVzIHRoZSBtZXNzYWdlIGJlc3QuIFR5\\ncG9ncmFwaHksIGluIGl0cyBlc3NlbmNlLCBpcyBhYm91dCB0aGUgbWVzc2Fn\\nZS4g4oCcVHlwb2dyYXBoaWNhbCBkZXNpZ24gc2hvdWxkIHBlcmZvcm0gb3B0\\naWNhbGx5IHdoYXQgdGhlIHNwZWFrZXIgY3JlYXRlcyB0aHJvdWdoIHZvaWNl\\nIGFuZCBnZXN0dXJlIG9mIGhpcyB0aG91Z2h0cy7igJ0sIGFzIEVsIExpc3Np\\ndHpreSwgYSBmYW1vdXMgUnVzc2lhbiB0eXBvZ3JhcGhlciwgcHV0IGl0LgoK\\nIyMgTG9zcyBvZiBodW1hbml0eSB0aHJvdWdoIHRyYW5zaXRpb25zCgpFYWNo\\nIHRyYW5zaXRpb24gdG9vayBhd2F5IGEgcGFydCBvZiBodW1hbml0eSBmcm9t\\nIHdyaXR0ZW4gbGFuZ3VhZ2UuIEhhbmR3cml0dGVuIGJvb2tzIGJlaW5nIHRo\\nZSBtb3N0IGh1bWFuZSBmb3JtIGFuZCB0aGUgZGlnaXRhbCB0eXBlZmFjZXMg\\nYmVpbmcgdGhlIGxlYXN0LiBPdmVydXNlIG9mIEhlbHZldGljYSBpcyBhIGdv\\nb2QgZXhhbXBsZS4gTWVzc2FnZXMgYXJlIGJlaW5nIHRvbGQgaW4gYSB0eXBl\\nZmFjZSBqdXN0IGJlY2F1c2UgaXTigJlzIGEgc2FmZSBvcHRpb24uIEl04oCZ\\ncyBhbHdheXMgdGhlcmUuIEV2ZXJ5b25lIGtub3dzIGl0IGJ1dCB5ZXQsIG5v\\nYm9keSBrbm93cyBpdC4gU3RvcCBzb21lb25lIG9uIHRoZSBzdHJlZXQgYW5k\\nIGFzayBoaW0gd2hhdCBIZWx2ZXRpY2EgaXM/IEFzayBhIGRlc2lnbmVyIHRo\\nZSBzYW1lIHF1ZXN0aW9uLiBBc2sgaGltIHdoZXJlIGl0IGNhbWUgZnJvbSwg\\nd2hlbiwgd2h5IGFuZCB3aG8gZGVzaWduZWQgaXQuIE1vc3Qgb2YgdGhlbSB3\\naWxsIGZhaWwgdG8gYW5zd2VyIHRoZXNlIHF1ZXN0aW9ucy4gTW9zdCBvZiB0\\naGVtIHVzZWQgaXQgaW4gdGhlaXIgcHJlY2lvdXMgcHJvamVjdHMgYnV0IHRo\\nZXkgc3RpbGwgZG9u4oCZdCBzcG90IGl0IGluIHRoZSBzdHJlZXQuCgo8Zmln\\ndXJlPgoJPGJsb2NrcXVvdGU+CgkJPHA+S25vd2xlZGdlIG9mIHRoZSBxdWFs\\naXR5IG9mIGEgdHlwZWZhY2UgaXMgb2YgdGhlIGdyZWF0ZXN0IGltcG9ydGFu\\nY2UgZm9yIHRoZSBmdW5jdGlvbmFsLCBhZXN0aGV0aWMgYW5kIHBzeWNob2xv\\nZ2ljYWwgZWZmZWN0LjwvcD4KCQk8Zm9vdGVyPgoJCQk8Y2l0ZT7igJQgSm9z\\nZWYgTXVlbGxlci1Ccm9ja21hbm48L2NpdGU+CgkJPC9mb290ZXI+Cgk8L2Js\\nb2NrcXVvdGU+CjwvZmlndXJlPgoKVHlwZWZhY2VzIGRvbuKAmXQgbG9vayBo\\nYW5kbWFkZSB0aGVzZSBkYXlzLiBBbmQgdGhhdOKAmXMgYWxsIHJpZ2h0LiBU\\naGV5IGRvbuKAmXQgaGF2ZSB0by4gSW5kdXN0cmlhbGlzbSB0b29rIHRoYXQg\\nYXdheSBmcm9tIHRoZW0gYW5kIHdl4oCZcmUgZmluZSB3aXRoIGl0LiBXZeKA\\nmXZlIHRyYWRlZCB0aGF0IHBhcnQgb2YgaHVtYW5pdHkgZm9yIGEgcHJvY2Vz\\ncyB0aGF0IHByb2R1Y2VzIG1vcmUgYm9va3MgdGhhdCBhcmUgZWFzaWVyIHRv\\nIHJlYWQuIFRoYXQgY2Fu4oCZdCBiZSBiYWQuIEFuZCBpdCBpc27igJl0LgoK\\nPiBIdW1hbmUgdHlwb2dyYXBoeSB3aWxsIG9mdGVuIGJlIGNvbXBhcmF0aXZl\\nbHkgcm91Z2ggYW5kIGV2ZW4gdW5jb3V0aDsgYnV0IHdoaWxlIGEgY2VydGFp\\nbiB1bmNvdXRobmVzcyBkb2VzIG5vdCBzZXJpb3VzbHkgbWF0dGVyIGluIGh1\\nbWFuZSB3b3JrcywgdW5jb3V0aG5lc3MgaGFzIG5vIGV4Y3VzZSB3aGF0ZXZl\\nciBpbiB0aGUgcHJvZHVjdGlvbnMgb2YgdGhlIG1hY2hpbmUuCj4KPiDigJQg\\nRXJpYyBHaWxsCgpXZeKAmXZlIGNvbWUgY2xvc2UgdG8g4oCccGVyZmVjdGlv\\nbuKAnSBpbiB0aGUgbGFzdCBmaXZlIGNlbnR1cmllcy4gVGhlIGxldHRlcnMg\\nYXJlIGNyaXNwIGFuZCB3aXRob3V0IHJvdWdoIGVkZ2VzLiBXZSBwcmludCBv\\ndXIgY29tcG9zaXRpb25zIHdpdGggaGlnaOKAk3ByZWNpc2lvbiBwcmludGVy\\ncyBvbiBhIGhpZ2ggcXVhbGl0eSwgbWFjaGluZSBtYWRlIHBhcGVyLgoKIVt0\\neXBlLXRocm91Z2gtdGltZS5qcGddKC9tZWRpYS90eXBlLXRocm91Z2gtdGlt\\nZS5qcGcpCgoqVHlwZSB0aHJvdWdoIDUgY2VudHVyaWVzLioKCldlIGxvc3Qg\\nYSBwYXJ0IG9mIG91cnNlbHZlcyBiZWNhdXNlIG9mIHRoaXMgY2hhc2UgYWZ0\\nZXIgcGVyZmVjdGlvbi4gV2UgZm9yZ290IGFib3V0IHRoZSBjcmFmdHNtYW5z\\naGlwIGFsb25nIHRoZSB3YXkuIEFuZCB0aGUgd29yc3QgcGFydCBpcyB0aGF0\\nIHdlIGRvbuKAmXQgY2FyZS4gVGhlIHRyYW5zaXRpb24gdG8gdGhlIGRpZ2l0\\nYWwgYWdlIG1hZGUgdGhhdCBjbGVhci4gV2UgY2hvb3NlIHR5cGVmYWNlcyBs\\naWtlIGNsdWVsZXNzIHpvbWJpZXMuIFRoZXJl4oCZcyBubyBtZWFuaW5nIGlu\\nIG91ciB3b3JrLiBUeXBlIHNpemVzLCBsZWFkaW5nLCBtYXJnaW5z4oCmIEl0\\n4oCZcyBhbGwganVzdCBhIGZldyBjbGlja3Mgb3IgbGluZXMgb2YgY29kZS4g\\nVGhlIG1lc3NhZ2UgaXNu4oCZdCBpbXBvcnRhbnQgYW55bW9yZS4gVGhlcmXi\\ngJlzIG5vIG1vcmUg4oCcd2h54oCdIGJlaGluZCB0aGUg4oCcd2hhdOKAnS4K\\nCiMjIENoYXNpbmcgcGVyZmVjdGlvbgoKSHVtYW4gYmVpbmdzIGFyZW7igJl0\\nIHBlcmZlY3QuIFBlcmZlY3Rpb24gaXMgc29tZXRoaW5nIHRoYXQgd2lsbCBh\\nbHdheXMgZWx1ZGUgdXMuIFRoZXJlIHdpbGwgYWx3YXlzIGJlIGEgc21hbGwg\\ncGFydCBvZiBodW1hbml0eSBpbiBldmVyeXRoaW5nIHdlIGRvLiBObyBtYXR0\\nZXIgaG93IHNtYWxsIHRoYXQgcGFydCwgd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0\\naGF0IGl0IHRyYW5zY2VuZHMgdGhlIGxpbWl0cyBvZiB0aGUgbWVkaXVtLiBX\\nZSBoYXZlIHRvIHRoaW5rIGFib3V0IHRoZSBtZXNzYWdlIGZpcnN0LiBXaGF0\\nIHR5cGVmYWNlIHNob3VsZCB3ZSB1c2UgYW5kIHdoeT8gRG9lcyB0aGUgdHlw\\nZWZhY2UgbWF0Y2ggdGhlIG1lc3NhZ2UgYW5kIHdoYXQgd2Ugd2FudCB0byBj\\nb21tdW5pY2F0ZSB3aXRoIGl0PyBXaGF0IHdpbGwgYmUgdGhlIGxlYWRpbmcg\\nYW5kIHdoeT8gV2lsbCB0aGVyZSBiZSBtb3JlIHR5cGVmYWNlcyBpbiBvdXIg\\nZGVzaWduPyBPbiB3aGF0IGdyb3VuZCB3aWxsIHRoZXkgYmUgY29tYmluZWQ/\\nIFdoYXQgbWFrZXMgb3VyIGRlc2lnbiB1bmlxdWUgYW5kIHdoeT8gVGhpcyBp\\ncyB0aGUgcGFydCBvZiBodW1hbml0eSB0aGF0IGlzIGxlZnQgaW4gdHlwb2dy\\nYXBoeS4gSXQgbWlnaHQgYmUgdGhlIGxhc3QgcGFydC4gQXJlIHdlIHJlYWxs\\neSBnb2luZyB0byBnaXZlIGl0IHVwPwoKKk9yaWdpbmFsbHkgcHVibGlzaGVk\\nIGJ5IFtNYXRlaiBMYXRpbl0oaHR0cDovL21hdGVqbGF0aW4uY28udWsvKSBv\\nbiBbTWVkaXVtXShodHRwczovL21lZGl1bS5jb20vZGVzaWduLW5vdGVzL2h1\\nbWFuZS10eXBvZ3JhcGh5LWluLXRoZS1kaWdpdGFsLWFnZS05YmQ1YzE2MTk5\\nYmQ/cmVmPXdlYmRlc2lnbmVybmV3cy5jb20jLmx5Z284MnoweCkuKg==\\n\",\n \"encoding\": \"base64\"\n}\n", + "response": "{\"sha\":\"a532f0a9445cdf90a19c6812cff89d1674991774\",\"node_id\":\"MDQ6QmxvYjI4Njc3MTExNjphNTMyZjBhOTQ0NWNkZjkwYTE5YzY4MTJjZmY4OWQxNjc0OTkxNzc0\",\"size\":7465,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/a532f0a9445cdf90a19c6812cff89d1674991774\",\"content\":\"LS0tCnRpdGxlOiBIdW1hbmUgVHlwb2dyYXBoeSBpbiB0aGUgRGlnaXRhbCBB\\nZ2UKZGF0ZTogIjIwMTctMDgtMTlUMjI6NDA6MzIuMTY5WiIKdGVtcGxhdGU6\\nICJwb3N0IgpkcmFmdDogZmFsc2UKY2F0ZWdvcnk6ICJUeXBvZ3JhcGh5Igp0\\nYWdzOgogIC0gIkRlc2lnbiIKICAtICJUeXBvZ3JhcGh5IgogIC0gIldlYiBE\\nZXZlbG9wbWVudCIKZGVzY3JpcHRpb246ICJBbiBFc3NheSBvbiBUeXBvZ3Jh\\ncGh5IGJ5IEVyaWMgR2lsbCB0YWtlcyB0aGUgcmVhZGVyIGJhY2sgdG8gdGhl\\nIHllYXIgMTkzMC4gVGhlIHllYXIgd2hlbiBhIGNvbmZsaWN0IGJldHdlZW4g\\ndHdvIHdvcmxkcyBjYW1lIHRvIGl0cyB0ZXJtLiBUaGUgbWFjaGluZXMgb2Yg\\ndGhlIGluZHVzdHJpYWwgd29ybGQgZmluYWxseSB0b29rIG92ZXIgdGhlIGhh\\nbmRpY3JhZnRzLiIKY2Fub25pY2FsOiAnJwotLS0KCi0gW1RoZSBmaXJzdCB0\\ncmFuc2l0aW9uXSgjdGhlLWZpcnN0LXRyYW5zaXRpb24pCi0gW1RoZSBkaWdp\\ndGFsIGFnZV0oI3RoZS1kaWdpdGFsLWFnZSkKLSBbTG9zcyBvZiBodW1hbml0\\neSB0aHJvdWdoIHRyYW5zaXRpb25zXSgjbG9zcy1vZi1odW1hbml0eS10aHJv\\ndWdoLXRyYW5zaXRpb25zKQotIFtDaGFzaW5nIHBlcmZlY3Rpb25dKCNjaGFz\\naW5nLXBlcmZlY3Rpb24pCgpBbiBFc3NheSBvbiBUeXBvZ3JhcGh5IGJ5IEVy\\naWMgR2lsbCB0YWtlcyB0aGUgcmVhZGVyIGJhY2sgdG8gdGhlIHllYXIgMTkz\\nMC4gVGhlIHllYXIgd2hlbiBhIGNvbmZsaWN0IGJldHdlZW4gdHdvIHdvcmxk\\ncyBjYW1lIHRvIGl0cyB0ZXJtLiBUaGUgbWFjaGluZXMgb2YgdGhlIGluZHVz\\ndHJpYWwgd29ybGQgZmluYWxseSB0b29rIG92ZXIgdGhlIGhhbmRpY3JhZnRz\\nLgoKVGhlIHR5cG9ncmFwaHkgb2YgdGhpcyBpbmR1c3RyaWFsIGFnZSB3YXMg\\nbm8gbG9uZ2VyIGhhbmRjcmFmdGVkLiBNYXNzIHByb2R1Y3Rpb24gYW5kIHBy\\nb2ZpdCBiZWNhbWUgbW9yZSBpbXBvcnRhbnQuIFF1YW50aXR5IG1hdHRlcmVk\\nIG1vcmUgdGhhbiB0aGUgcXVhbGl0eS4gVGhlIGJvb2tzIGFuZCBwcmludGVk\\nIHdvcmtzIGluIGdlbmVyYWwgbG9zdCBhIHBhcnQgb2YgaXRzIGh1bWFuaXR5\\nLiBUaGUgdHlwZWZhY2VzIHdlcmUgbm90IHByb2R1Y2VkIGJ5IGNyYWZ0c21l\\nbiBhbnltb3JlLiBJdCB3YXMgdGhlIG1hY2hpbmVzIHByaW50aW5nIGFuZCB0\\neWluZyB0aGUgYm9va3MgdG9nZXRoZXIgbm93LiBUaGUgY3JhZnRzbWVuIGhh\\nZCB0byBsZXQgZ28gb2YgdGhlaXIgY3JhZnQgYW5kIGJlY2FtZSBhIGNvZyBp\\nbiB0aGUgcHJvY2Vzcy4gQW4gZXh0ZW5zaW9uIG9mIHRoZSBpbmR1c3RyaWFs\\nIG1hY2hpbmUuCgpCdXQgdGhlIHZpY3Rvcnkgb2YgdGhlIGluZHVzdHJpYWxp\\nc20gZGlkbuKAmXQgbWVhbiB0aGF0IHRoZSBjcmFmdHNtZW4gd2VyZSBjb21w\\nbGV0ZWx5IGV4dGluY3QuIFRoZSB0d28gd29ybGRzIGNvbnRpbnVlZCB0byBj\\nb2V4aXN0IGluZGVwZW5kZW50bHkuIEVhY2ggcmVjb2duaXNpbmcgdGhlIGdv\\nb2QgaW4gdGhlIG90aGVyIOKAlCB0aGUgcG93ZXIgb2YgaW5kdXN0cmlhbGlz\\nbSBhbmQgdGhlIGh1bWFuaXR5IG9mIGNyYWZ0c21hbnNoaXAuIFRoaXMgd2Fz\\nIHRoZSBzZWNvbmQgdHJhbnNpdGlvbiB0aGF0IHdvdWxkIHN0cmlwIHR5cG9n\\ncmFwaHkgb2YgYSBwYXJ0IG9mIGl0cyBodW1hbml0eS4gV2UgaGF2ZSB0byBn\\nbyA1MDAgeWVhcnMgYmFjayBpbiB0aW1lIHRvIG1lZXQgdGhlIGZpcnN0IG9u\\nZS4KCiMjIFRoZSBmaXJzdCB0cmFuc2l0aW9uCgpBIHNpbWlsYXIgY29uZmxp\\nY3QgZW1lcmdlZCBhZnRlciB0aGUgaW52ZW50aW9uIG9mIHRoZSBmaXJzdCBw\\ncmludGluZyBwcmVzcyBpbiBFdXJvcGUuIEpvaGFubmVzIEd1dGVuYmVyZyBp\\nbnZlbnRlZCBtb3ZhYmxlIHR5cGUgYW5kIHVzZWQgaXQgdG8gcHJvZHVjZSBk\\naWZmZXJlbnQgY29tcG9zaXRpb25zLiBIaXMgd29ya3Nob3AgY291bGQgcHJp\\nbnQgdXAgdG8gMjQwIGltcHJlc3Npb25zIHBlciBob3VyLiBVbnRpbCB0aGVu\\nLCB0aGUgYm9va3Mgd2VyZSBiZWluZyBjb3BpZWQgYnkgaGFuZC4gQWxsIHRo\\nZSBib29rcyB3ZXJlIGhhbmR3cml0dGVuIGFuZCBkZWNvcmF0ZWQgd2l0aCBo\\nYW5kIGRyYXduIG9ybmFtZW50cyBhbmQgZmlndXJlcy4gQSBwcm9jZXNzIG9m\\nIGNvcHlpbmcgYSBib29rIHdhcyBsb25nIGJ1dCBlYWNoIGJvb2ssIGV2ZW4g\\nYSBjb3B5LCB3YXMgYSB3b3JrIG9mIGFydC4KClRoZSBmaXJzdCBwcmludGVk\\nIGJvb2tzIHdlcmUsIGF0IGZpcnN0LCBwZXJjZWl2ZWQgYXMgaW5mZXJpb3Ig\\ndG8gdGhlIGhhbmR3cml0dGVuIG9uZXMuIFRoZXkgd2VyZSBzbWFsbGVyIGFu\\nZCBjaGVhcGVyIHRvIHByb2R1Y2UuIE1vdmFibGUgdHlwZSBwcm92aWRlZCB0\\naGUgcHJpbnRlcnMgd2l0aCBmbGV4aWJpbGl0eSB0aGF0IGFsbG93ZWQgdGhl\\nbSB0byBwcmludCBib29rcyBpbiBsYW5ndWFnZXMgb3RoZXIgdGhhbiBMYXRp\\nbi4gR2lsbCBkZXNjcmliZXMgdGhlIHRyYW5zaXRpb24gdG8gaW5kdXN0cmlh\\nbGlzbSBhcyBzb21ldGhpbmcgdGhhdCBwZW9wbGUgbmVlZGVkIGFuZCB3YW50\\nZWQuIFNvbWV0aGluZyBzaW1pbGFyIGhhcHBlbmVkIGFmdGVyIHRoZSBmaXJz\\ndCBwcmludGVkIGJvb2tzIGVtZXJnZWQuIFBlb3BsZSB3YW50ZWQgYm9va3Mg\\naW4gYSBsYW5ndWFnZSB0aGV5IHVuZGVyc3Rvb2QgYW5kIHRoZXkgd2FudGVk\\nIGJvb2tzIHRoZXkgY291bGQgdGFrZSB3aXRoIHRoZW0uIFRoZXkgd2VyZSBo\\ndW5ncnkgZm9yIGtub3dsZWRnZSBhbmQgcHJpbnRlZCBib29rcyBzYXRpc2Zp\\nZWQgdGhpcyBodW5nZXIuCgohWzQyLWxpbmUtYmlibGUuanBnXSgvbWVkaWEv\\nNDItbGluZS1iaWJsZS5qcGcpCgoqVGhlIDQy4oCTTGluZSBCaWJsZSwgcHJp\\nbnRlZCBieSBHdXRlbmJlcmcuKgoKQnV0LCB0aHJvdWdoIHRoaXMgdHJhbnNp\\ndGlvbiwgdGhlIGJvb2sgbG9zdCBhIGxhcmdlIHBhcnQgb2YgaXRzIGh1bWFu\\naXR5LiBUaGUgbWFjaGluZSB0b29rIG92ZXIgbW9zdCBvZiB0aGUgcHJvY2Vz\\ncyBidXQgY3JhZnRzbWFuc2hpcCB3YXMgc3RpbGwgYSBwYXJ0IG9mIGl0LiBU\\naGUgdHlwZWZhY2VzIHdlcmUgY3V0IG1hbnVhbGx5IGJ5IHRoZSBmaXJzdCBw\\ndW5jaCBjdXR0ZXJzLiBUaGUgcGFwZXIgd2FzIG1hZGUgYnkgaGFuZC4gVGhl\\nIGlsbHVzdHJhdGlvbnMgYW5kIG9ybmFtZW50cyB3ZXJlIHN0aWxsIGJlaW5n\\nIGhhbmQgZHJhd24uIFRoZXNlIHdlcmUgdGhlIHJlbWFpbnMgb2YgdGhlIGNy\\nYWZ0c21hbnNoaXAgdGhhdCB3ZW50IGFsbW9zdCBleHRpbmN0IGluIHRoZSB0\\naW1lcyBvZiBFcmljIEdpbGwuCgojIyBUaGUgZGlnaXRhbCBhZ2UKClRoZSBm\\naXJzdCB0cmFuc2l0aW9uIHRvb2sgYXdheSBhIGxhcmdlIHBhcnQgb2YgaHVt\\nYW5pdHkgZnJvbSB3cml0dGVuIGNvbW11bmljYXRpb24uIEluZHVzdHJpYWxp\\nc2F0aW9uLCB0aGUgc2Vjb25kIHRyYW5zaXRpb24gZGVzY3JpYmVkIGJ5IEVy\\naWMgR2lsbCwgdG9vayBhd2F5IG1vc3Qgb2Ygd2hhdCB3YXMgbGVmdC4gQnV0\\nIGl04oCZcyB0aGUgdGhpcmQgdHJhbnNpdGlvbiB0aGF0IHN0cmlwcGVkIGl0\\nIG5ha2VkLiBUeXBlZmFjZXMgYXJlIGZhY2VsZXNzIHRoZXNlIGRheXMuIFRo\\nZXnigJlyZSBqdXN0IGZvbnRzIG9uIG91ciBjb21wdXRlcnMuIEhhcmRseSBh\\nbnlvbmUga25vd3MgdGhlaXIgc3Rvcmllcy4gSGFyZGx5IGFueW9uZSBjYXJl\\ncy4gRmxpY2tpbmcgdGhyb3VnaCB0aG91c2FuZHMgb2YgdHlwZWZhY2VzIGFu\\nZCBmaW5kaW5nIHRoZSDigJxyaWdodCBvbmXigJ0gaXMgYSBtYXR0ZXIgb2Yg\\nbWludXRlcy4KCj4gSW4gdGhlIG5ldyBjb21wdXRlciBhZ2UgdGhlIHByb2xp\\nZmVyYXRpb24gb2YgdHlwZWZhY2VzIGFuZCB0eXBlIG1hbmlwdWxhdGlvbnMg\\ncmVwcmVzZW50cyBhIG5ldyBsZXZlbCBvZiB2aXN1YWwgcG9sbHV0aW9uIHRo\\ncmVhdGVuaW5nIG91ciBjdWx0dXJlLiBPdXQgb2YgdGhvdXNhbmRzIG9mIHR5\\ncGVmYWNlcywgYWxsIHdlIG5lZWQgYXJlIGEgZmV3IGJhc2ljIG9uZXMsIGFu\\nZCB0cmFzaCB0aGUgcmVzdC4KPgrigJQgTWFzc2ltbyBWaWduZWxsaQoKVHlw\\nb2dyYXBoeSBpcyBub3QgYWJvdXQgdHlwZWZhY2VzLiBJdOKAmXMgbm90IGFi\\nb3V0IHdoYXQgbG9va3MgYmVzdCwgaXTigJlzIGFib3V0IHdoYXQgZmVlbHMg\\ncmlnaHQuIFdoYXQgY29tbXVuaWNhdGVzIHRoZSBtZXNzYWdlIGJlc3QuIFR5\\ncG9ncmFwaHksIGluIGl0cyBlc3NlbmNlLCBpcyBhYm91dCB0aGUgbWVzc2Fn\\nZS4g4oCcVHlwb2dyYXBoaWNhbCBkZXNpZ24gc2hvdWxkIHBlcmZvcm0gb3B0\\naWNhbGx5IHdoYXQgdGhlIHNwZWFrZXIgY3JlYXRlcyB0aHJvdWdoIHZvaWNl\\nIGFuZCBnZXN0dXJlIG9mIGhpcyB0aG91Z2h0cy7igJ0sIGFzIEVsIExpc3Np\\ndHpreSwgYSBmYW1vdXMgUnVzc2lhbiB0eXBvZ3JhcGhlciwgcHV0IGl0LgoK\\nIyMgTG9zcyBvZiBodW1hbml0eSB0aHJvdWdoIHRyYW5zaXRpb25zCgpFYWNo\\nIHRyYW5zaXRpb24gdG9vayBhd2F5IGEgcGFydCBvZiBodW1hbml0eSBmcm9t\\nIHdyaXR0ZW4gbGFuZ3VhZ2UuIEhhbmR3cml0dGVuIGJvb2tzIGJlaW5nIHRo\\nZSBtb3N0IGh1bWFuZSBmb3JtIGFuZCB0aGUgZGlnaXRhbCB0eXBlZmFjZXMg\\nYmVpbmcgdGhlIGxlYXN0LiBPdmVydXNlIG9mIEhlbHZldGljYSBpcyBhIGdv\\nb2QgZXhhbXBsZS4gTWVzc2FnZXMgYXJlIGJlaW5nIHRvbGQgaW4gYSB0eXBl\\nZmFjZSBqdXN0IGJlY2F1c2UgaXTigJlzIGEgc2FmZSBvcHRpb24uIEl04oCZ\\ncyBhbHdheXMgdGhlcmUuIEV2ZXJ5b25lIGtub3dzIGl0IGJ1dCB5ZXQsIG5v\\nYm9keSBrbm93cyBpdC4gU3RvcCBzb21lb25lIG9uIHRoZSBzdHJlZXQgYW5k\\nIGFzayBoaW0gd2hhdCBIZWx2ZXRpY2EgaXM/IEFzayBhIGRlc2lnbmVyIHRo\\nZSBzYW1lIHF1ZXN0aW9uLiBBc2sgaGltIHdoZXJlIGl0IGNhbWUgZnJvbSwg\\nd2hlbiwgd2h5IGFuZCB3aG8gZGVzaWduZWQgaXQuIE1vc3Qgb2YgdGhlbSB3\\naWxsIGZhaWwgdG8gYW5zd2VyIHRoZXNlIHF1ZXN0aW9ucy4gTW9zdCBvZiB0\\naGVtIHVzZWQgaXQgaW4gdGhlaXIgcHJlY2lvdXMgcHJvamVjdHMgYnV0IHRo\\nZXkgc3RpbGwgZG9u4oCZdCBzcG90IGl0IGluIHRoZSBzdHJlZXQuCgo8Zmln\\ndXJlPgoJPGJsb2NrcXVvdGU+CgkJPHA+S25vd2xlZGdlIG9mIHRoZSBxdWFs\\naXR5IG9mIGEgdHlwZWZhY2UgaXMgb2YgdGhlIGdyZWF0ZXN0IGltcG9ydGFu\\nY2UgZm9yIHRoZSBmdW5jdGlvbmFsLCBhZXN0aGV0aWMgYW5kIHBzeWNob2xv\\nZ2ljYWwgZWZmZWN0LjwvcD4KCQk8Zm9vdGVyPgoJCQk8Y2l0ZT7igJQgSm9z\\nZWYgTXVlbGxlci1Ccm9ja21hbm48L2NpdGU+CgkJPC9mb290ZXI+Cgk8L2Js\\nb2NrcXVvdGU+CjwvZmlndXJlPgoKVHlwZWZhY2VzIGRvbuKAmXQgbG9vayBo\\nYW5kbWFkZSB0aGVzZSBkYXlzLiBBbmQgdGhhdOKAmXMgYWxsIHJpZ2h0LiBU\\naGV5IGRvbuKAmXQgaGF2ZSB0by4gSW5kdXN0cmlhbGlzbSB0b29rIHRoYXQg\\nYXdheSBmcm9tIHRoZW0gYW5kIHdl4oCZcmUgZmluZSB3aXRoIGl0LiBXZeKA\\nmXZlIHRyYWRlZCB0aGF0IHBhcnQgb2YgaHVtYW5pdHkgZm9yIGEgcHJvY2Vz\\ncyB0aGF0IHByb2R1Y2VzIG1vcmUgYm9va3MgdGhhdCBhcmUgZWFzaWVyIHRv\\nIHJlYWQuIFRoYXQgY2Fu4oCZdCBiZSBiYWQuIEFuZCBpdCBpc27igJl0LgoK\\nPiBIdW1hbmUgdHlwb2dyYXBoeSB3aWxsIG9mdGVuIGJlIGNvbXBhcmF0aXZl\\nbHkgcm91Z2ggYW5kIGV2ZW4gdW5jb3V0aDsgYnV0IHdoaWxlIGEgY2VydGFp\\nbiB1bmNvdXRobmVzcyBkb2VzIG5vdCBzZXJpb3VzbHkgbWF0dGVyIGluIGh1\\nbWFuZSB3b3JrcywgdW5jb3V0aG5lc3MgaGFzIG5vIGV4Y3VzZSB3aGF0ZXZl\\nciBpbiB0aGUgcHJvZHVjdGlvbnMgb2YgdGhlIG1hY2hpbmUuCj4KPiDigJQg\\nRXJpYyBHaWxsCgpXZeKAmXZlIGNvbWUgY2xvc2UgdG8g4oCccGVyZmVjdGlv\\nbuKAnSBpbiB0aGUgbGFzdCBmaXZlIGNlbnR1cmllcy4gVGhlIGxldHRlcnMg\\nYXJlIGNyaXNwIGFuZCB3aXRob3V0IHJvdWdoIGVkZ2VzLiBXZSBwcmludCBv\\ndXIgY29tcG9zaXRpb25zIHdpdGggaGlnaOKAk3ByZWNpc2lvbiBwcmludGVy\\ncyBvbiBhIGhpZ2ggcXVhbGl0eSwgbWFjaGluZSBtYWRlIHBhcGVyLgoKIVt0\\neXBlLXRocm91Z2gtdGltZS5qcGddKC9tZWRpYS90eXBlLXRocm91Z2gtdGlt\\nZS5qcGcpCgoqVHlwZSB0aHJvdWdoIDUgY2VudHVyaWVzLioKCldlIGxvc3Qg\\nYSBwYXJ0IG9mIG91cnNlbHZlcyBiZWNhdXNlIG9mIHRoaXMgY2hhc2UgYWZ0\\nZXIgcGVyZmVjdGlvbi4gV2UgZm9yZ290IGFib3V0IHRoZSBjcmFmdHNtYW5z\\naGlwIGFsb25nIHRoZSB3YXkuIEFuZCB0aGUgd29yc3QgcGFydCBpcyB0aGF0\\nIHdlIGRvbuKAmXQgY2FyZS4gVGhlIHRyYW5zaXRpb24gdG8gdGhlIGRpZ2l0\\nYWwgYWdlIG1hZGUgdGhhdCBjbGVhci4gV2UgY2hvb3NlIHR5cGVmYWNlcyBs\\naWtlIGNsdWVsZXNzIHpvbWJpZXMuIFRoZXJl4oCZcyBubyBtZWFuaW5nIGlu\\nIG91ciB3b3JrLiBUeXBlIHNpemVzLCBsZWFkaW5nLCBtYXJnaW5z4oCmIEl0\\n4oCZcyBhbGwganVzdCBhIGZldyBjbGlja3Mgb3IgbGluZXMgb2YgY29kZS4g\\nVGhlIG1lc3NhZ2UgaXNu4oCZdCBpbXBvcnRhbnQgYW55bW9yZS4gVGhlcmXi\\ngJlzIG5vIG1vcmUg4oCcd2h54oCdIGJlaGluZCB0aGUg4oCcd2hhdOKAnS4K\\nCiMjIENoYXNpbmcgcGVyZmVjdGlvbgoKSHVtYW4gYmVpbmdzIGFyZW7igJl0\\nIHBlcmZlY3QuIFBlcmZlY3Rpb24gaXMgc29tZXRoaW5nIHRoYXQgd2lsbCBh\\nbHdheXMgZWx1ZGUgdXMuIFRoZXJlIHdpbGwgYWx3YXlzIGJlIGEgc21hbGwg\\ncGFydCBvZiBodW1hbml0eSBpbiBldmVyeXRoaW5nIHdlIGRvLiBObyBtYXR0\\nZXIgaG93IHNtYWxsIHRoYXQgcGFydCwgd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0\\naGF0IGl0IHRyYW5zY2VuZHMgdGhlIGxpbWl0cyBvZiB0aGUgbWVkaXVtLiBX\\nZSBoYXZlIHRvIHRoaW5rIGFib3V0IHRoZSBtZXNzYWdlIGZpcnN0LiBXaGF0\\nIHR5cGVmYWNlIHNob3VsZCB3ZSB1c2UgYW5kIHdoeT8gRG9lcyB0aGUgdHlw\\nZWZhY2UgbWF0Y2ggdGhlIG1lc3NhZ2UgYW5kIHdoYXQgd2Ugd2FudCB0byBj\\nb21tdW5pY2F0ZSB3aXRoIGl0PyBXaGF0IHdpbGwgYmUgdGhlIGxlYWRpbmcg\\nYW5kIHdoeT8gV2lsbCB0aGVyZSBiZSBtb3JlIHR5cGVmYWNlcyBpbiBvdXIg\\nZGVzaWduPyBPbiB3aGF0IGdyb3VuZCB3aWxsIHRoZXkgYmUgY29tYmluZWQ/\\nIFdoYXQgbWFrZXMgb3VyIGRlc2lnbiB1bmlxdWUgYW5kIHdoeT8gVGhpcyBp\\ncyB0aGUgcGFydCBvZiBodW1hbml0eSB0aGF0IGlzIGxlZnQgaW4gdHlwb2dy\\nYXBoeS4gSXQgbWlnaHQgYmUgdGhlIGxhc3QgcGFydC4gQXJlIHdlIHJlYWxs\\neSBnb2luZyB0byBnaXZlIGl0IHVwPwoKKk9yaWdpbmFsbHkgcHVibGlzaGVk\\nIGJ5IFtNYXRlaiBMYXRpbl0oaHR0cDovL21hdGVqbGF0aW4uY28udWsvKSBv\\nbiBbTWVkaXVtXShodHRwczovL21lZGl1bS5jb20vZGVzaWduLW5vdGVzL2h1\\nbWFuZS10eXBvZ3JhcGh5LWluLXRoZS1kaWdpdGFsLWFnZS05YmQ1YzE2MTk5\\nYmQ/cmVmPXdlYmRlc2lnbmVybmV3cy5jb20jLmx5Z284MnoweCkuKg==\\n\",\"encoding\":\"base64\"}", + "status": 200 + }, + { + "method": "GET", + "url": "/.netlify/git/github/git/blobs/d0582dd245a3f408fb3fe2333bf01400007476e9", + "headers": { + "Access-Control-Allow-Credentials": "true", + "Access-Control-Allow-Origin": "http://localhost:8080", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", + "Alt-Svc": "clear", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Content-Security-Policy": "default-src 'none'", + "Content-Type": "application/json; charset=utf-8", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Server": "Netlify", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "Via": "1.1 google", + "X-Accepted-Oauth-Scopes": "", + "X-Content-Type-Options": "nosniff", + "X-Frame-Options": "deny", + "X-Github-Media-Type": "github.v3; format=json", + "X-Oauth-Scopes": "delete_repo, repo", + "X-Ratelimit-Limit": "5000", + "X-Xss-Protection": "1; mode=block", + "Age": "0", + "Connection": "keep-alive", + "Vary": "Origin,Accept,Authorization,Cookie,X-GitHub-OTP,Accept-Encoding,Accept,X-Requested-With", + "content-length": "3896" + }, + "response": "{\"sha\":\"d0582dd245a3f408fb3fe2333bf01400007476e9\",\"node_id\":\"MDQ6QmxvYjI4Njc3MTExNjpkMDU4MmRkMjQ1YTNmNDA4ZmIzZmUyMzMzYmYwMTQwMDAwNzQ3NmU5\",\"size\":2565,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/d0582dd245a3f408fb3fe2333bf01400007476e9\",\"content\":\"LS0tCnRpdGxlOiBUaGUgT3JpZ2lucyBvZiBTb2NpYWwgU3RhdGlvbmVyeSBM\\nZXR0ZXJpbmcKZGF0ZTogIjIwMTYtMTItMDFUMjI6NDA6MzIuMTY5WiIKdGVt\\ncGxhdGU6ICJwb3N0IgpkcmFmdDogZmFsc2UKY2F0ZWdvcnk6ICJEZXNpZ24g\\nQ3VsdHVyZSIKZGVzY3JpcHRpb246ICJQZWxsZW50ZXNxdWUgaGFiaXRhbnQg\\nbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzIGV0IG5ldHVzIGV0IG1hbGVzdWFk\\nYSBmYW1lcyBhYyB0dXJwaXMgZWdlc3Rhcy4gVmVzdGlidWx1bSB0b3J0b3Ig\\ncXVhbSwgZmV1Z2lhdCB2aXRhZSwgdWx0cmljaWVzIGVnZXQsIHRlbXBvciBz\\naXQgYW1ldCwgYW50ZS4iCmNhbm9uaWNhbDogJycKLS0tCgoqKlBlbGxlbnRl\\nc3F1ZSBoYWJpdGFudCBtb3JiaSB0cmlzdGlxdWUqKiBzZW5lY3R1cyBldCBu\\nZXR1cyBldCBtYWxlc3VhZGEgZmFtZXMgYWMgdHVycGlzIGVnZXN0YXMuIFZl\\nc3RpYnVsdW0gdG9ydG9yIHF1YW0sIGZldWdpYXQgdml0YWUsIHVsdHJpY2ll\\ncyBlZ2V0LCB0ZW1wb3Igc2l0IGFtZXQsIGFudGUuIERvbmVjIGV1IGxpYmVy\\nbyBzaXQgYW1ldCBxdWFtIGVnZXN0YXMgc2VtcGVyLiAqQWVuZWFuIHVsdHJp\\nY2llcyBtaSB2aXRhZSBlc3QuKiBNYXVyaXMgcGxhY2VyYXQgZWxlaWZlbmQg\\nbGVvLiBRdWlzcXVlIHNpdCBhbWV0IGVzdCBldCBzYXBpZW4gdWxsYW1jb3Jw\\nZXIgcGhhcmV0cmEuIAoKVmVzdGlidWx1bSBlcmF0IHdpc2ksIGNvbmRpbWVu\\ndHVtIHNlZCwgY29tbW9kbyB2aXRhZSwgb3JuYXJlIHNpdCBhbWV0LCB3aXNp\\nLiBBZW5lYW4gZmVybWVudHVtLCBlbGl0IGVnZXQgdGluY2lkdW50IGNvbmRp\\nbWVudHVtLCBlcm9zIGlwc3VtIHJ1dHJ1bSBvcmNpLCBzYWdpdHRpcyB0ZW1w\\ndXMgbGFjdXMgZW5pbSBhYyBkdWkuICBbRG9uZWMgbm9uIGVuaW1dKCMpIGlu\\nIHR1cnBpcyBwdWx2aW5hciBmYWNpbGlzaXMuCgohW051bGxhIGZhdWNpYnVz\\nIHZlc3RpYnVsdW0gZXJvcyBpbiB0ZW1wdXMuIFZlc3RpYnVsdW0gdGVtcG9y\\nIGltcGVyZGlldCB2ZWxpdCBuZWMgZGFwaWJ1c10oL21lZGlhL2ltYWdlLTMu\\nanBnKQoKIyMgSGVhZGVyIExldmVsIDIKCisgTG9yZW0gaXBzdW0gZG9sb3Ig\\nc2l0IGFtZXQsIGNvbnNlY3RldHVlciBhZGlwaXNjaW5nIGVsaXQuCisgQWxp\\ncXVhbSB0aW5jaWR1bnQgbWF1cmlzIGV1IHJpc3VzLgoKRG9uZWMgbm9uIGVu\\naW0gaW4gdHVycGlzIHB1bHZpbmFyIGZhY2lsaXNpcy4gVXQgZmVsaXMuIFBy\\nYWVzZW50IGRhcGlidXMsIG5lcXVlIGlkIGN1cnN1cyBmYXVjaWJ1cywgdG9y\\ndG9yIG5lcXVlIGVnZXN0YXMgYXVndWUsIGV1IHZ1bHB1dGF0ZSBtYWduYSBl\\ncm9zIGV1IGVyYXQuIEFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gCgo8ZmlndXJl\\nPgoJPGJsb2NrcXVvdGU+CgkJPHA+TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFt\\nZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gVml2YW11cyBtYWdu\\nYS4gQ3JhcyBpbiBtaSBhdCBmZWxpcyBhbGlxdWV0IGNvbmd1ZS4gVXQgYSBl\\nc3QgZWdldCBsaWd1bGEgbW9sZXN0aWUgZ3JhdmlkYS4gQ3VyYWJpdHVyIG1h\\nc3NhLiBEb25lYyBlbGVpZmVuZCwgbGliZXJvIGF0IHNhZ2l0dGlzIG1vbGxp\\ncywgdGVsbHVzIGVzdCBtYWxlc3VhZGEgdGVsbHVzLCBhdCBsdWN0dXMgdHVy\\ncGlzIGVsaXQgc2l0IGFtZXQgcXVhbS4gVml2YW11cyBwcmV0aXVtIG9ybmFy\\nZSBlc3QuPC9wPgoJCTxmb290ZXI+CgkJCTxjaXRlPuKAlCBBbGlxdWFtIHRp\\nbmNpZHVudCBtYXVyaXMgZXUgcmlzdXMuPC9jaXRlPgoJCTwvZm9vdGVyPgoJ\\nPC9ibG9ja3F1b3RlPgo8L2ZpZ3VyZT4KCiMjIyBIZWFkZXIgTGV2ZWwgMwoK\\nKyBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFk\\naXBpc2NpbmcgZWxpdC4KKyBBbGlxdWFtIHRpbmNpZHVudCBtYXVyaXMgZXUg\\ncmlzdXMuCgpQZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVl\\nIHNlbmVjdHVzIGV0IG5ldHVzIGV0IG1hbGVzdWFkYSBmYW1lcyBhYyB0dXJw\\naXMgZWdlc3Rhcy4gVmVzdGlidWx1bSB0b3J0b3IgcXVhbSwgZmV1Z2lhdCB2\\naXRhZSwgdWx0cmljaWVzIGVnZXQsIHRlbXBvciBzaXQgYW1ldCwgYW50ZS4g\\nRG9uZWMgZXUgbGliZXJvIHNpdCBhbWV0IHF1YW0gZWdlc3RhcyBzZW1wZXIu\\nIEFlbmVhbiB1bHRyaWNpZXMgbWkgdml0YWUgZXN0LiBNYXVyaXMgcGxhY2Vy\\nYXQgZWxlaWZlbmQgbGVvLiBRdWlzcXVlIHNpdCBhbWV0IGVzdCBldCBzYXBp\\nZW4gdWxsYW1jb3JwZXIgcGhhcmV0cmEuCgpgYGBjc3MKI2hlYWRlciBoMSBh\\nIHsKICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogMzAwcHg7CiAgaGVpZ2h0\\nOiA4MHB4Owp9CmBgYAoKRG9uZWMgbm9uIGVuaW0gaW4gdHVycGlzIHB1bHZp\\nbmFyIGZhY2lsaXNpcy4gVXQgZmVsaXMuIFByYWVzZW50IGRhcGlidXMsIG5l\\ncXVlIGlkIGN1cnN1cyBmYXVjaWJ1cywgdG9ydG9yIG5lcXVlIGVnZXN0YXMg\\nYXVndWUsIGV1IHZ1bHB1dGF0ZSBtYWduYSBlcm9zIGV1IGVyYXQuIEFsaXF1\\nYW0gZXJhdCB2b2x1dHBhdC4gTmFtIGR1aSBtaSwgdGluY2lkdW50IHF1aXMs\\nIGFjY3Vtc2FuIHBvcnR0aXRvciwgZmFjaWxpc2lzIGx1Y3R1cywgbWV0dXMu\\n\",\"encoding\":\"base64\"}", "status": 200 }, { @@ -260,37 +230,7 @@ "Vary": "Origin,Accept,Authorization,Cookie,X-GitHub-OTP,Accept-Encoding,Accept,X-Requested-With", "content-length": "4202" }, - "response": "{\n \"sha\": \"0eea554365f002d0f1572af9a58522d335a794d5\",\n \"node_id\": \"MDQ6QmxvYjI1NTA3NTk0MzowZWVhNTU0MzY1ZjAwMmQwZjE1NzJhZjlhNTg1MjJkMzM1YTc5NGQ1\",\n \"size\": 2786,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/0eea554365f002d0f1572af9a58522d335a794d5\",\n \"content\": \"LS0tCnRpdGxlOiAiQSBCcmllZiBIaXN0b3J5IG9mIFR5cG9ncmFwaHkiCmRh\\ndGU6ICIyMDE2LTAyLTAyVDIyOjQwOjMyLjE2OVoiCnRlbXBsYXRlOiAicG9z\\ndCIKZHJhZnQ6IGZhbHNlCmNhdGVnb3J5OiAiRGVzaWduIEluc3BpcmF0aW9u\\nIgp0YWdzOgogIC0gIkxpbm90eXBlIgogIC0gIk1vbm90eXBlIgogIC0gIkhp\\nc3Rvcnkgb2YgdHlwb2dyYXBoeSIKICAtICJIZWx2ZXRpY2EiCmRlc2NyaXB0\\naW9uOiAiTW9yYmkgaW4gc2VtIHF1aXMgZHVpIHBsYWNlcmF0IG9ybmFyZS4g\\nUGVsbGVudGVzcXVlIG9kaW8gbmlzaSwgZXVpc21vZCBpbiwgcGhhcmV0cmEg\\nYSwgdWx0cmljaWVzIGluLCBkaWFtLiBTZWQgYXJjdS4gQ3JhcyBjb25zZXF1\\nYXQuIgpjYW5vbmljYWw6ICcnCi0tLQoKKipQZWxsZW50ZXNxdWUgaGFiaXRh\\nbnQgbW9yYmkgdHJpc3RpcXVlKiogc2VuZWN0dXMgZXQgbmV0dXMgZXQgbWFs\\nZXN1YWRhIGZhbWVzIGFjIHR1cnBpcyBlZ2VzdGFzLiBWZXN0aWJ1bHVtIHRv\\ncnRvciBxdWFtLCBmZXVnaWF0IHZpdGFlLCB1bHRyaWNpZXMgZWdldCwgdGVt\\ncG9yIHNpdCBhbWV0LCBhbnRlLiBEb25lYyBldSBsaWJlcm8gc2l0IGFtZXQg\\ncXVhbSBlZ2VzdGFzIHNlbXBlci4gKkFlbmVhbiB1bHRyaWNpZXMgbWkgdml0\\nYWUgZXN0LiogTWF1cmlzIHBsYWNlcmF0IGVsZWlmZW5kIGxlby4gUXVpc3F1\\nZSBzaXQgYW1ldCBlc3QgZXQgc2FwaWVuIHVsbGFtY29ycGVyIHBoYXJldHJh\\nLiAKClZlc3RpYnVsdW0gZXJhdCB3aXNpLCBjb25kaW1lbnR1bSBzZWQsIGNv\\nbW1vZG8gdml0YWUsIG9ybmFyZSBzaXQgYW1ldCwgd2lzaS4gQWVuZWFuIGZl\\ncm1lbnR1bSwgZWxpdCBlZ2V0IHRpbmNpZHVudCBjb25kaW1lbnR1bSwgZXJv\\ncyBpcHN1bSBydXRydW0gb3JjaSwgc2FnaXR0aXMgdGVtcHVzIGxhY3VzIGVu\\naW0gYWMgZHVpLiAgW0RvbmVjIG5vbiBlbmltXSgjKSBpbiB0dXJwaXMgcHVs\\ndmluYXIgZmFjaWxpc2lzLgoKIVtOdWxsYSBmYXVjaWJ1cyB2ZXN0aWJ1bHVt\\nIGVyb3MgaW4gdGVtcHVzLiBWZXN0aWJ1bHVtIHRlbXBvciBpbXBlcmRpZXQg\\ndmVsaXQgbmVjIGRhcGlidXNdKC9tZWRpYS9pbWFnZS0wLmpwZykKCiMjIEhl\\nYWRlciBMZXZlbCAyCgorIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBj\\nb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LgorIEFsaXF1YW0gdGluY2lk\\ndW50IG1hdXJpcyBldSByaXN1cy4KCkRvbmVjIG5vbiBlbmltIGluIHR1cnBp\\ncyBwdWx2aW5hciBmYWNpbGlzaXMuIFV0IGZlbGlzLiBQcmFlc2VudCBkYXBp\\nYnVzLCBuZXF1ZSBpZCBjdXJzdXMgZmF1Y2lidXMsIHRvcnRvciBuZXF1ZSBl\\nZ2VzdGFzIGF1Z3VlLCBldSB2dWxwdXRhdGUgbWFnbmEgZXJvcyBldSBlcmF0\\nLiBBbGlxdWFtIGVyYXQgdm9sdXRwYXQuIAoKPGZpZ3VyZT4KCTxibG9ja3F1\\nb3RlPgoJCTxwPkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0\\nZXR1ciBhZGlwaXNjaW5nIGVsaXQuIFZpdmFtdXMgbWFnbmEuIENyYXMgaW4g\\nbWkgYXQgZmVsaXMgYWxpcXVldCBjb25ndWUuIFV0IGEgZXN0IGVnZXQgbGln\\ndWxhIG1vbGVzdGllIGdyYXZpZGEuIEN1cmFiaXR1ciBtYXNzYS4gRG9uZWMg\\nZWxlaWZlbmQsIGxpYmVybyBhdCBzYWdpdHRpcyBtb2xsaXMsIHRlbGx1cyBl\\nc3QgbWFsZXN1YWRhIHRlbGx1cywgYXQgbHVjdHVzIHR1cnBpcyBlbGl0IHNp\\ndCBhbWV0IHF1YW0uIFZpdmFtdXMgcHJldGl1bSBvcm5hcmUgZXN0LjwvcD4K\\nCQk8Zm9vdGVyPgoJCQk8Y2l0ZT7igJQgQWxpcXVhbSB0aW5jaWR1bnQgbWF1\\ncmlzIGV1IHJpc3VzLjwvY2l0ZT4KCQk8L2Zvb3Rlcj4KCTwvYmxvY2txdW90\\nZT4KPC9maWd1cmU+CgojIyMgSGVhZGVyIExldmVsIDMKCisgTG9yZW0gaXBz\\ndW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBhZGlwaXNjaW5nIGVs\\naXQuCisgQWxpcXVhbSB0aW5jaWR1bnQgbWF1cmlzIGV1IHJpc3VzLgoKUGVs\\nbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cyBl\\ndCBuZXR1cyBldCBtYWxlc3VhZGEgZmFtZXMgYWMgdHVycGlzIGVnZXN0YXMu\\nIFZlc3RpYnVsdW0gdG9ydG9yIHF1YW0sIGZldWdpYXQgdml0YWUsIHVsdHJp\\nY2llcyBlZ2V0LCB0ZW1wb3Igc2l0IGFtZXQsIGFudGUuIERvbmVjIGV1IGxp\\nYmVybyBzaXQgYW1ldCBxdWFtIGVnZXN0YXMgc2VtcGVyLiBBZW5lYW4gdWx0\\ncmljaWVzIG1pIHZpdGFlIGVzdC4gTWF1cmlzIHBsYWNlcmF0IGVsZWlmZW5k\\nIGxlby4gUXVpc3F1ZSBzaXQgYW1ldCBlc3QgZXQgc2FwaWVuIHVsbGFtY29y\\ncGVyIHBoYXJldHJhLgoKYGBgY3NzCiNoZWFkZXIgaDEgYSB7CiAgZGlzcGxh\\neTogYmxvY2s7CiAgd2lkdGg6IDMwMHB4OwogIGhlaWdodDogODBweDsKfQpg\\nYGAKClZlc3RpYnVsdW0gZXJhdCB3aXNpLCBjb25kaW1lbnR1bSBzZWQsIGNv\\nbW1vZG8gdml0YWUsIG9ybmFyZSBzaXQgYW1ldCwgd2lzaS4gQWVuZWFuIGZl\\ncm1lbnR1bSwgZWxpdCBlZ2V0IHRpbmNpZHVudCBjb25kaW1lbnR1bSwgZXJv\\ncyBpcHN1bSBydXRydW0gb3JjaSwgc2FnaXR0aXMgdGVtcHVzIGxhY3VzIGVu\\naW0gYWMgZHVpLiBEb25lYyBub24gZW5pbSBpbiB0dXJwaXMgcHVsdmluYXIg\\nZmFjaWxpc2lzLiBVdCBmZWxpcy4gUHJhZXNlbnQgZGFwaWJ1cywgbmVxdWUg\\naWQgY3Vyc3VzIGZhdWNpYnVzLCB0b3J0b3IgbmVxdWUgZWdlc3RhcyBhdWd1\\nZSwgZXUgdnVscHV0YXRlIG1hZ25hIGVyb3MgZXUgZXJhdC4gQWxpcXVhbSBl\\ncmF0IHZvbHV0cGF0LiBOYW0gZHVpIG1pLCB0aW5jaWR1bnQgcXVpcywgYWNj\\ndW1zYW4gcG9ydHRpdG9yLCBmYWNpbGlzaXMgbHVjdHVzLCBtZXR1cy4=\\n\",\n \"encoding\": \"base64\"\n}\n", - "status": 200 - }, - { - "method": "GET", - "url": "/.netlify/git/github/commits?path=content/posts/2016-01-09---Perfecting-the-Art-of-Perfection.md&sha=master", - "headers": { - "Access-Control-Allow-Credentials": "true", - "Access-Control-Allow-Origin": "http://localhost:8080", - "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", - "Alt-Svc": "clear", - "Cache-Control": "private, max-age=60, s-maxage=60", - "Content-Security-Policy": "default-src 'none'", - "Content-Type": "application/json; charset=utf-8", - "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", - "Server": "Netlify", - "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", - "Via": "1.1 google", - "X-Accepted-Oauth-Scopes": "", - "X-Content-Type-Options": "nosniff", - "X-Frame-Options": "deny", - "X-Github-Media-Type": "github.v3; format=json", - "X-Oauth-Scopes": "delete_repo, repo", - "X-Ratelimit-Limit": "5000", - "X-Xss-Protection": "1; mode=block", - "Age": "0", - "Connection": "keep-alive", - "Vary": "Origin,Accept,Authorization,Cookie,X-GitHub-OTP,Accept-Encoding,Accept,X-Requested-With", - "content-length": "4828" - }, - "response": "[\n {\n \"sha\": \"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"node_id\": \"MDY6Q29tbWl0MjU1MDc1OTQzOjJiYzNmYTM5ZDhhZGI5ZTAwOGU1Mjc5Mzg1NDMzODM5OWZjNmU0YWQ=\",\n \"commit\": {\n \"author\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2019-07-24T07:45:32Z\"\n },\n \"committer\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2019-07-24T07:45:32Z\"\n },\n \"message\": \"initial commit\",\n \"tree\": {\n \"sha\": \"3d53c60def5d9f9ad79a534dd369f758763d9dc9\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/3d53c60def5d9f9ad79a534dd369f758763d9dc9\"\n },\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"comment_count\": 0,\n \"verification\": {\n \"verified\": true,\n \"reason\": \"valid\",\n \"signature\": \"-----BEGIN PGP SIGNATURE-----\\n\\niQIzBAABCgAdFiEE8DeG71n37ZpuxjiNA05FmC/LkwQFAl04DJwACgkQA05FmC/L\\nkwQ5kg//TB2c1HvsD/r7x3CgKmR+uaEFGrv9srfA4/i/dbDSAg3+kpPXfGg0FCUw\\nETlWDpZRhFvLZzoxy5w46P1cLvpbdEXK47LWpsFYWFtCFGKmvaY5dZ/ma1J3HF5R\\n7Yll5jz8BKrWOZ6bOswP7nNteAFYfLiZxJq4ONbhxOyRJA7bFmg6Ydo2Zc27Gg54\\n6umhONf9DxuzL0z0f8qtHiz47KJTRdFS+ZL/Mq3iCE11SGHvjK0cnPq0Z6TBtazt\\nqszoR0Frxes4MsjI82+ovCP+RtpqerWeN/ciYoLENsnUb8Xbp/qdhrLoMvuFExz2\\n0f0M7zVI1Z9d4cDTQlembVneSv5sSeNtnk2e7BXLwjUNFVxB67aslVUyL41V0BMu\\nUw8+j9pNhObpicJs9O1fIkL84mtCSMWIyuCwDpSMSj2b892laBOKu/E5D+YuaHi5\\nbAJJ1/Szig0CzeI1KbIBoWDI1orpkSUU+4Fvk7qJnxP9iLJLwiNCFKfNKA1KeXmP\\nIK6/95HmKNJ8MfTEkRcgIdTe4fx2ib2hHGiaIAD0r4FgWxfC2BWK/uTUp8HtIQre\\nDILGnF1laIcJbyP7asvc8iJ06Kk8C9PsH4v20fqoyNcei7v0IJG2m9AHVDnb0t6L\\nAa1yXEHQLSGHS9Y0mogLPW/tZnV69EHRI1dzvH/1gDVlBMwM1/A=\\n=hLDv\\n-----END PGP SIGNATURE-----\",\n \"payload\": \"tree 3d53c60def5d9f9ad79a534dd369f758763d9dc9\\nauthor owner 1563954332 +0300\\ncommitter owner 1563954332 +0300\\n\\ninitial commit\\n\"\n }\n },\n \"url\": \"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"html_url\": \"https://github.com/owner/repo/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"comments_url\": \"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad/comments\",\n \"author\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"committer\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"parents\": [\n\n ]\n }\n]\n", + "response": "{\"sha\":\"0eea554365f002d0f1572af9a58522d335a794d5\",\"node_id\":\"MDQ6QmxvYjI4Njc3MTExNjowZWVhNTU0MzY1ZjAwMmQwZjE1NzJhZjlhNTg1MjJkMzM1YTc5NGQ1\",\"size\":2786,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/0eea554365f002d0f1572af9a58522d335a794d5\",\"content\":\"LS0tCnRpdGxlOiAiQSBCcmllZiBIaXN0b3J5IG9mIFR5cG9ncmFwaHkiCmRh\\ndGU6ICIyMDE2LTAyLTAyVDIyOjQwOjMyLjE2OVoiCnRlbXBsYXRlOiAicG9z\\ndCIKZHJhZnQ6IGZhbHNlCmNhdGVnb3J5OiAiRGVzaWduIEluc3BpcmF0aW9u\\nIgp0YWdzOgogIC0gIkxpbm90eXBlIgogIC0gIk1vbm90eXBlIgogIC0gIkhp\\nc3Rvcnkgb2YgdHlwb2dyYXBoeSIKICAtICJIZWx2ZXRpY2EiCmRlc2NyaXB0\\naW9uOiAiTW9yYmkgaW4gc2VtIHF1aXMgZHVpIHBsYWNlcmF0IG9ybmFyZS4g\\nUGVsbGVudGVzcXVlIG9kaW8gbmlzaSwgZXVpc21vZCBpbiwgcGhhcmV0cmEg\\nYSwgdWx0cmljaWVzIGluLCBkaWFtLiBTZWQgYXJjdS4gQ3JhcyBjb25zZXF1\\nYXQuIgpjYW5vbmljYWw6ICcnCi0tLQoKKipQZWxsZW50ZXNxdWUgaGFiaXRh\\nbnQgbW9yYmkgdHJpc3RpcXVlKiogc2VuZWN0dXMgZXQgbmV0dXMgZXQgbWFs\\nZXN1YWRhIGZhbWVzIGFjIHR1cnBpcyBlZ2VzdGFzLiBWZXN0aWJ1bHVtIHRv\\ncnRvciBxdWFtLCBmZXVnaWF0IHZpdGFlLCB1bHRyaWNpZXMgZWdldCwgdGVt\\ncG9yIHNpdCBhbWV0LCBhbnRlLiBEb25lYyBldSBsaWJlcm8gc2l0IGFtZXQg\\ncXVhbSBlZ2VzdGFzIHNlbXBlci4gKkFlbmVhbiB1bHRyaWNpZXMgbWkgdml0\\nYWUgZXN0LiogTWF1cmlzIHBsYWNlcmF0IGVsZWlmZW5kIGxlby4gUXVpc3F1\\nZSBzaXQgYW1ldCBlc3QgZXQgc2FwaWVuIHVsbGFtY29ycGVyIHBoYXJldHJh\\nLiAKClZlc3RpYnVsdW0gZXJhdCB3aXNpLCBjb25kaW1lbnR1bSBzZWQsIGNv\\nbW1vZG8gdml0YWUsIG9ybmFyZSBzaXQgYW1ldCwgd2lzaS4gQWVuZWFuIGZl\\ncm1lbnR1bSwgZWxpdCBlZ2V0IHRpbmNpZHVudCBjb25kaW1lbnR1bSwgZXJv\\ncyBpcHN1bSBydXRydW0gb3JjaSwgc2FnaXR0aXMgdGVtcHVzIGxhY3VzIGVu\\naW0gYWMgZHVpLiAgW0RvbmVjIG5vbiBlbmltXSgjKSBpbiB0dXJwaXMgcHVs\\ndmluYXIgZmFjaWxpc2lzLgoKIVtOdWxsYSBmYXVjaWJ1cyB2ZXN0aWJ1bHVt\\nIGVyb3MgaW4gdGVtcHVzLiBWZXN0aWJ1bHVtIHRlbXBvciBpbXBlcmRpZXQg\\ndmVsaXQgbmVjIGRhcGlidXNdKC9tZWRpYS9pbWFnZS0wLmpwZykKCiMjIEhl\\nYWRlciBMZXZlbCAyCgorIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBj\\nb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LgorIEFsaXF1YW0gdGluY2lk\\ndW50IG1hdXJpcyBldSByaXN1cy4KCkRvbmVjIG5vbiBlbmltIGluIHR1cnBp\\ncyBwdWx2aW5hciBmYWNpbGlzaXMuIFV0IGZlbGlzLiBQcmFlc2VudCBkYXBp\\nYnVzLCBuZXF1ZSBpZCBjdXJzdXMgZmF1Y2lidXMsIHRvcnRvciBuZXF1ZSBl\\nZ2VzdGFzIGF1Z3VlLCBldSB2dWxwdXRhdGUgbWFnbmEgZXJvcyBldSBlcmF0\\nLiBBbGlxdWFtIGVyYXQgdm9sdXRwYXQuIAoKPGZpZ3VyZT4KCTxibG9ja3F1\\nb3RlPgoJCTxwPkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0\\nZXR1ciBhZGlwaXNjaW5nIGVsaXQuIFZpdmFtdXMgbWFnbmEuIENyYXMgaW4g\\nbWkgYXQgZmVsaXMgYWxpcXVldCBjb25ndWUuIFV0IGEgZXN0IGVnZXQgbGln\\ndWxhIG1vbGVzdGllIGdyYXZpZGEuIEN1cmFiaXR1ciBtYXNzYS4gRG9uZWMg\\nZWxlaWZlbmQsIGxpYmVybyBhdCBzYWdpdHRpcyBtb2xsaXMsIHRlbGx1cyBl\\nc3QgbWFsZXN1YWRhIHRlbGx1cywgYXQgbHVjdHVzIHR1cnBpcyBlbGl0IHNp\\ndCBhbWV0IHF1YW0uIFZpdmFtdXMgcHJldGl1bSBvcm5hcmUgZXN0LjwvcD4K\\nCQk8Zm9vdGVyPgoJCQk8Y2l0ZT7igJQgQWxpcXVhbSB0aW5jaWR1bnQgbWF1\\ncmlzIGV1IHJpc3VzLjwvY2l0ZT4KCQk8L2Zvb3Rlcj4KCTwvYmxvY2txdW90\\nZT4KPC9maWd1cmU+CgojIyMgSGVhZGVyIExldmVsIDMKCisgTG9yZW0gaXBz\\ndW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBhZGlwaXNjaW5nIGVs\\naXQuCisgQWxpcXVhbSB0aW5jaWR1bnQgbWF1cmlzIGV1IHJpc3VzLgoKUGVs\\nbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cyBl\\ndCBuZXR1cyBldCBtYWxlc3VhZGEgZmFtZXMgYWMgdHVycGlzIGVnZXN0YXMu\\nIFZlc3RpYnVsdW0gdG9ydG9yIHF1YW0sIGZldWdpYXQgdml0YWUsIHVsdHJp\\nY2llcyBlZ2V0LCB0ZW1wb3Igc2l0IGFtZXQsIGFudGUuIERvbmVjIGV1IGxp\\nYmVybyBzaXQgYW1ldCBxdWFtIGVnZXN0YXMgc2VtcGVyLiBBZW5lYW4gdWx0\\ncmljaWVzIG1pIHZpdGFlIGVzdC4gTWF1cmlzIHBsYWNlcmF0IGVsZWlmZW5k\\nIGxlby4gUXVpc3F1ZSBzaXQgYW1ldCBlc3QgZXQgc2FwaWVuIHVsbGFtY29y\\ncGVyIHBoYXJldHJhLgoKYGBgY3NzCiNoZWFkZXIgaDEgYSB7CiAgZGlzcGxh\\neTogYmxvY2s7CiAgd2lkdGg6IDMwMHB4OwogIGhlaWdodDogODBweDsKfQpg\\nYGAKClZlc3RpYnVsdW0gZXJhdCB3aXNpLCBjb25kaW1lbnR1bSBzZWQsIGNv\\nbW1vZG8gdml0YWUsIG9ybmFyZSBzaXQgYW1ldCwgd2lzaS4gQWVuZWFuIGZl\\ncm1lbnR1bSwgZWxpdCBlZ2V0IHRpbmNpZHVudCBjb25kaW1lbnR1bSwgZXJv\\ncyBpcHN1bSBydXRydW0gb3JjaSwgc2FnaXR0aXMgdGVtcHVzIGxhY3VzIGVu\\naW0gYWMgZHVpLiBEb25lYyBub24gZW5pbSBpbiB0dXJwaXMgcHVsdmluYXIg\\nZmFjaWxpc2lzLiBVdCBmZWxpcy4gUHJhZXNlbnQgZGFwaWJ1cywgbmVxdWUg\\naWQgY3Vyc3VzIGZhdWNpYnVzLCB0b3J0b3IgbmVxdWUgZWdlc3RhcyBhdWd1\\nZSwgZXUgdnVscHV0YXRlIG1hZ25hIGVyb3MgZXUgZXJhdC4gQWxpcXVhbSBl\\ncmF0IHZvbHV0cGF0LiBOYW0gZHVpIG1pLCB0aW5jaWR1bnQgcXVpcywgYWNj\\ndW1zYW4gcG9ydHRpdG9yLCBmYWNpbGlzaXMgbHVjdHVzLCBtZXR1cy4=\\n\",\"encoding\":\"base64\"}", "status": 200 }, { @@ -320,12 +260,42 @@ "Vary": "Origin,Accept,Authorization,Cookie,X-GitHub-OTP,Accept-Encoding,Accept,X-Requested-With", "content-length": "22507" }, - "response": "{\n \"sha\": \"44f78c474d04273185a95821426f75affc9b0044\",\n \"node_id\": \"MDQ6QmxvYjI1NTA3NTk0Mzo0NGY3OGM0NzRkMDQyNzMxODVhOTU4MjE0MjZmNzVhZmZjOWIwMDQ0\",\n \"size\": 16071,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/44f78c474d04273185a95821426f75affc9b0044\",\n \"content\": \"LS0tCnRpdGxlOiAiSm9oYW5uZXMgR3V0ZW5iZXJnOiBUaGUgQmlydGggb2Yg\\nTW92YWJsZSBUeXBlIgpkYXRlOiAiMjAxNy0wOC0xOFQyMjoxMjowMy4yODRa\\nIgp0ZW1wbGF0ZTogInBvc3QiCmRyYWZ0OiBmYWxzZQpjYXRlZ29yeTogIlR5\\ncG9ncmFwaHkiCnRhZ3M6CiAgLSAiT3BlbiBzb3VyY2UiCiAgLSAiR2F0c2J5\\nIgogIC0gIlR5cG9ncmFwaHkiCmRlc2NyaXB0aW9uOiAiR2VybWFuIGludmVu\\ndG9yIEpvaGFubmVzIEd1dGVuYmVyZyBkZXZlbG9wZWQgYSBtZXRob2Qgb2Yg\\nbW92YWJsZSB0eXBlIGFuZCB1c2VkIGl0IHRvIGNyZWF0ZSBvbmUgb2YgdGhl\\nIHdlc3Rlcm4gd29ybGTigJlzIGZpcnN0IG1ham9yIHByaW50ZWQgYm9va3Ms\\nIHRoZSDigJxGb3J0eeKAk1R3b+KAk0xpbmXigJ0gQmlibGUuIgpjYW5vbmlj\\nYWw6ICcnCi0tLQoKR2VybWFuIGludmVudG9yIEpvaGFubmVzIEd1dGVuYmVy\\nZyBkZXZlbG9wZWQgYSBtZXRob2Qgb2YgbW92YWJsZSB0eXBlIGFuZCB1c2Vk\\nIGl0IHRvIGNyZWF0ZSBvbmUgb2YgdGhlIHdlc3Rlcm4gd29ybGTigJlzIGZp\\ncnN0IG1ham9yIHByaW50ZWQgYm9va3MsIHRoZSDigJxGb3J0eeKAk1R3b+KA\\nk0xpbmXigJ0gQmlibGUuCgoqKkpvaGFubmVzIEdlbnNmbGVpc2NoIHp1ciBM\\nYWRlbiB6dW0gR3V0ZW5iZXJnKiogKGMuIDEzOTgg4oCTIDE0NjgpIHdhcyBh\\nIEdlcm1hbiBibGFja3NtaXRoLCBnb2xkc21pdGgsIHByaW50ZXIsIGFuZCBw\\ndWJsaXNoZXIgd2hvIGludHJvZHVjZWQgcHJpbnRpbmcgdG8gRXVyb3BlLiBI\\naXMgaW52ZW50aW9uIG9mIG1lY2hhbmljYWwgbW92YWJsZSB0eXBlIHByaW50\\naW5nIHN0YXJ0ZWQgdGhlIFByaW50aW5nIFJldm9sdXRpb24gYW5kIGlzIHdp\\nZGVseSByZWdhcmRlZCBhcyB0aGUgbW9zdCBpbXBvcnRhbnQgZXZlbnQgb2Yg\\ndGhlIG1vZGVybiBwZXJpb2QuIEl0IHBsYXllZCBhIGtleSByb2xlIGluIHRo\\nZSBkZXZlbG9wbWVudCBvZiB0aGUgUmVuYWlzc2FuY2UsIFJlZm9ybWF0aW9u\\nLCB0aGUgQWdlIG9mIEVubGlnaHRlbm1lbnQsIGFuZCB0aGUgU2NpZW50aWZp\\nYyByZXZvbHV0aW9uIGFuZCBsYWlkIHRoZSBtYXRlcmlhbCBiYXNpcyBmb3Ig\\ndGhlIG1vZGVybiBrbm93bGVkZ2UtYmFzZWQgZWNvbm9teSBhbmQgdGhlIHNw\\ncmVhZCBvZiBsZWFybmluZyB0byB0aGUgbWFzc2VzLgoKPGZpZ3VyZSBjbGFz\\ncz0iZmxvYXQtcmlnaHQiIHN0eWxlPSJ3aWR0aDogMjQwcHgiPgoJPGltZyBz\\ncmM9Ii9tZWRpYS9ndXRlbmJlcmcuanBnIiBhbHQ9Ikd1dGVuYmVyZyI+Cgk8\\nZmlnY2FwdGlvbj5Kb2hhbm5lcyBHdXRlbmJlcmc8L2ZpZ2NhcHRpb24+Cjwv\\nZmlndXJlPgoKV2l0aCBoaXMgaW52ZW50aW9uIG9mIHRoZSBwcmludGluZyBw\\ncmVzcywgR3V0ZW5iZXJnIHdhcyB0aGUgZmlyc3QgRXVyb3BlYW4gdG8gdXNl\\nIG1vdmFibGUgdHlwZSBwcmludGluZywgaW4gYXJvdW5kIDE0MzkuIEFtb25n\\nIGhpcyBtYW55IGNvbnRyaWJ1dGlvbnMgdG8gcHJpbnRpbmcgYXJlOiB0aGUg\\naW52ZW50aW9uIG9mIGEgcHJvY2VzcyBmb3IgbWFzcy1wcm9kdWNpbmcgbW92\\nYWJsZSB0eXBlOyB0aGUgdXNlIG9mIG9pbC1iYXNlZCBpbms7IGFuZCB0aGUg\\ndXNlIG9mIGEgd29vZGVuIHByaW50aW5nIHByZXNzIHNpbWlsYXIgdG8gdGhl\\nIGFncmljdWx0dXJhbCBzY3JldyBwcmVzc2VzIG9mIHRoZSBwZXJpb2QuIEhp\\ncyB0cnVseSBlcG9jaGFsIGludmVudGlvbiB3YXMgdGhlIGNvbWJpbmF0aW9u\\nIG9mIHRoZXNlIGVsZW1lbnRzIGludG8gYSBwcmFjdGljYWwgc3lzdGVtIHRo\\nYXQgYWxsb3dlZCB0aGUgbWFzcyBwcm9kdWN0aW9uIG9mIHByaW50ZWQgYm9v\\na3MgYW5kIHdhcyBlY29ub21pY2FsbHkgdmlhYmxlIGZvciBwcmludGVycyBh\\nbmQgcmVhZGVycyBhbGlrZS4gR3V0ZW5iZXJnJ3MgbWV0aG9kIGZvciBtYWtp\\nbmcgdHlwZSBpcyB0cmFkaXRpb25hbGx5IGNvbnNpZGVyZWQgdG8gaGF2ZSBp\\nbmNsdWRlZCBhIHR5cGUgbWV0YWwgYWxsb3kgYW5kIGEgaGFuZCBtb3VsZCBm\\nb3IgY2FzdGluZyB0eXBlLiBUaGUgYWxsb3kgd2FzIGEgbWl4dHVyZSBvZiBs\\nZWFkLCB0aW4sIGFuZCBhbnRpbW9ueSB0aGF0IG1lbHRlZCBhdCBhIHJlbGF0\\naXZlbHkgbG93IHRlbXBlcmF0dXJlIGZvciBmYXN0ZXIgYW5kIG1vcmUgZWNv\\nbm9taWNhbCBjYXN0aW5nLCBjYXN0IHdlbGwsIGFuZCBjcmVhdGVkIGEgZHVy\\nYWJsZSB0eXBlLgoKSW4gUmVuYWlzc2FuY2UgRXVyb3BlLCB0aGUgYXJyaXZh\\nbCBvZiBtZWNoYW5pY2FsIG1vdmFibGUgdHlwZSBwcmludGluZyBpbnRyb2R1\\nY2VkIHRoZSBlcmEgb2YgbWFzcyBjb21tdW5pY2F0aW9uIHdoaWNoIHBlcm1h\\nbmVudGx5IGFsdGVyZWQgdGhlIHN0cnVjdHVyZSBvZiBzb2NpZXR5LiBUaGUg\\ncmVsYXRpdmVseSB1bnJlc3RyaWN0ZWQgY2lyY3VsYXRpb24gb2YgaW5mb3Jt\\nYXRpb24g4oCUIGluY2x1ZGluZyByZXZvbHV0aW9uYXJ5IGlkZWFzIOKAlCB0\\ncmFuc2NlbmRlZCBib3JkZXJzLCBjYXB0dXJlZCB0aGUgbWFzc2VzIGluIHRo\\nZSBSZWZvcm1hdGlvbiBhbmQgdGhyZWF0ZW5lZCB0aGUgcG93ZXIgb2YgcG9s\\naXRpY2FsIGFuZCByZWxpZ2lvdXMgYXV0aG9yaXRpZXM7IHRoZSBzaGFycCBp\\nbmNyZWFzZSBpbiBsaXRlcmFjeSBicm9rZSB0aGUgbW9ub3BvbHkgb2YgdGhl\\nIGxpdGVyYXRlIGVsaXRlIG9uIGVkdWNhdGlvbiBhbmQgbGVhcm5pbmcgYW5k\\nIGJvbHN0ZXJlZCB0aGUgZW1lcmdpbmcgbWlkZGxlIGNsYXNzLiBBY3Jvc3Mg\\nRXVyb3BlLCB0aGUgaW5jcmVhc2luZyBjdWx0dXJhbCBzZWxmLWF3YXJlbmVz\\ncyBvZiBpdHMgcGVvcGxlIGxlZCB0byB0aGUgcmlzZSBvZiBwcm90by1uYXRp\\nb25hbGlzbSwgYWNjZWxlcmF0ZWQgYnkgdGhlIGZsb3dlcmluZyBvZiB0aGUg\\nRXVyb3BlYW4gdmVybmFjdWxhciBsYW5ndWFnZXMgdG8gdGhlIGRldHJpbWVu\\ndCBvZiBMYXRpbidzIHN0YXR1cyBhcyBsaW5ndWEgZnJhbmNhLiBJbiB0aGUg\\nMTl0aCBjZW50dXJ5LCB0aGUgcmVwbGFjZW1lbnQgb2YgdGhlIGhhbmQtb3Bl\\ncmF0ZWQgR3V0ZW5iZXJnLXN0eWxlIHByZXNzIGJ5IHN0ZWFtLXBvd2VyZWQg\\ncm90YXJ5IHByZXNzZXMgYWxsb3dlZCBwcmludGluZyBvbiBhbiBpbmR1c3Ry\\naWFsIHNjYWxlLCB3aGlsZSBXZXN0ZXJuLXN0eWxlIHByaW50aW5nIHdhcyBh\\nZG9wdGVkIGFsbCBvdmVyIHRoZSB3b3JsZCwgYmVjb21pbmcgcHJhY3RpY2Fs\\nbHkgdGhlIHNvbGUgbWVkaXVtIGZvciBtb2Rlcm4gYnVsayBwcmludGluZy4K\\nClRoZSB1c2Ugb2YgbW92YWJsZSB0eXBlIHdhcyBhIG1hcmtlZCBpbXByb3Zl\\nbWVudCBvbiB0aGUgaGFuZHdyaXR0ZW4gbWFudXNjcmlwdCwgd2hpY2ggd2Fz\\nIHRoZSBleGlzdGluZyBtZXRob2Qgb2YgYm9vayBwcm9kdWN0aW9uIGluIEV1\\ncm9wZSwgYW5kIHVwb24gd29vZGJsb2NrIHByaW50aW5nLCBhbmQgcmV2b2x1\\ndGlvbml6ZWQgRXVyb3BlYW4gYm9vay1tYWtpbmcuIEd1dGVuYmVyZydzIHBy\\naW50aW5nIHRlY2hub2xvZ3kgc3ByZWFkIHJhcGlkbHkgdGhyb3VnaG91dCBF\\ndXJvcGUgYW5kIGxhdGVyIHRoZSB3b3JsZC4KCkhpcyBtYWpvciB3b3JrLCB0\\naGUgR3V0ZW5iZXJnIEJpYmxlIChhbHNvIGtub3duIGFzIHRoZSA0Mi1saW5l\\nIEJpYmxlKSwgaGFzIGJlZW4gYWNjbGFpbWVkIGZvciBpdHMgaGlnaCBhZXN0\\naGV0aWMgYW5kIHRlY2huaWNhbCBxdWFsaXR5LgoKIyMgUHJpbnRpbmcgUHJl\\nc3MKCkFyb3VuZCAxNDM5LCBHdXRlbmJlcmcgd2FzIGludm9sdmVkIGluIGEg\\nZmluYW5jaWFsIG1pc2FkdmVudHVyZSBtYWtpbmcgcG9saXNoZWQgbWV0YWwg\\nbWlycm9ycyAod2hpY2ggd2VyZSBiZWxpZXZlZCB0byBjYXB0dXJlIGhvbHkg\\nbGlnaHQgZnJvbSByZWxpZ2lvdXMgcmVsaWNzKSBmb3Igc2FsZSB0byBwaWxn\\ncmltcyB0byBBYWNoZW46IGluIDE0MzkgdGhlIGNpdHkgd2FzIHBsYW5uaW5n\\nIHRvIGV4aGliaXQgaXRzIGNvbGxlY3Rpb24gb2YgcmVsaWNzIGZyb20gRW1w\\nZXJvciBDaGFybGVtYWduZSBidXQgdGhlIGV2ZW50IHdhcyBkZWxheWVkIGJ5\\nIG9uZSB5ZWFyIGR1ZSB0byBhIHNldmVyZSBmbG9vZCBhbmQgdGhlIGNhcGl0\\nYWwgYWxyZWFkeSBzcGVudCBjb3VsZCBub3QgYmUgcmVwYWlkLiBXaGVuIHRo\\nZSBxdWVzdGlvbiBvZiBzYXRpc2Z5aW5nIHRoZSBpbnZlc3RvcnMgY2FtZSB1\\ncCwgR3V0ZW5iZXJnIGlzIHNhaWQgdG8gaGF2ZSBwcm9taXNlZCB0byBzaGFy\\nZSBhIOKAnHNlY3JldOKAnS4gSXQgaGFzIGJlZW4gd2lkZWx5IHNwZWN1bGF0\\nZWQgdGhhdCB0aGlzIHNlY3JldCBtYXkgaGF2ZSBiZWVuIHRoZSBpZGVhIG9m\\nIHByaW50aW5nIHdpdGggbW92YWJsZSB0eXBlLiBBbHNvIGFyb3VuZCAxNDM5\\n4oCTMTQ0MCwgdGhlIER1dGNoIExhdXJlbnMgSmFuc3pvb24gQ29zdGVyIGNh\\nbWUgdXAgd2l0aCB0aGUgaWRlYSBvZiBwcmludGluZy4gTGVnZW5kIGhhcyBp\\ndCB0aGF0IHRoZSBpZGVhIGNhbWUgdG8gaGltIOKAnGxpa2UgYSByYXkgb2Yg\\nbGlnaHTigJ0uCgo8ZmlndXJlIGNsYXNzPSJmbG9hdC1sZWZ0IiBzdHlsZT0i\\nd2lkdGg6IDI0MHB4Ij4KCTxpbWcgc3JjPSIvbWVkaWEvcHJpbnRpbmctcHJl\\nc3MuanBnIiBhbHQ9IkVhcmx5IFByaW50aW5nIFByZXNzIj4KCTxmaWdjYXB0\\naW9uPkVhcmx5IHdvb2RlbiBwcmludGluZyBwcmVzcyBhcyBkZXBpY3RlZCBp\\nbiAxNTY4LjwvZmlnY2FwdGlvbj4KPC9maWd1cmU+CgpVbnRpbCBhdCBsZWFz\\ndCAxNDQ0IGhlIGxpdmVkIGluIFN0cmFzYm91cmcsIG1vc3QgbGlrZWx5IGlu\\nIHRoZSBTdC4gQXJib2dhc3QgcGFyaXNoLiBJdCB3YXMgaW4gU3RyYXNib3Vy\\nZyBpbiAxNDQwIHRoYXQgR3V0ZW5iZXJnIGlzIHNhaWQgdG8gaGF2ZSBwZXJm\\nZWN0ZWQgYW5kIHVudmVpbGVkIHRoZSBzZWNyZXQgb2YgcHJpbnRpbmcgYmFz\\nZWQgb24gaGlzIHJlc2VhcmNoLCBteXN0ZXJpb3VzbHkgZW50aXRsZWQgS3Vu\\nc3QgdW5kIEF2ZW50dXIgKGFydCBhbmQgZW50ZXJwcmlzZSkuIEl0IGlzIG5v\\ndCBjbGVhciB3aGF0IHdvcmsgaGUgd2FzIGVuZ2FnZWQgaW4sIG9yIHdoZXRo\\nZXIgc29tZSBlYXJseSB0cmlhbHMgd2l0aCBwcmludGluZyBmcm9tIG1vdmFi\\nbGUgdHlwZSBtYXkgaGF2ZSBiZWVuIGNvbmR1Y3RlZCB0aGVyZS4gQWZ0ZXIg\\ndGhpcywgdGhlcmUgaXMgYSBnYXAgb2YgZm91ciB5ZWFycyBpbiB0aGUgcmVj\\nb3JkLiBJbiAxNDQ4LCBoZSB3YXMgYmFjayBpbiBNYWlueiwgd2hlcmUgaGUg\\ndG9vayBvdXQgYSBsb2FuIGZyb20gaGlzIGJyb3RoZXItaW4tbGF3IEFybm9s\\nZCBHZWx0aHVzLCBxdWl0ZSBwb3NzaWJseSBmb3IgYSBwcmludGluZyBwcmVz\\ncyBvciByZWxhdGVkIHBhcmFwaGVybmFsaWEuIEJ5IHRoaXMgZGF0ZSwgR3V0\\nZW5iZXJnIG1heSBoYXZlIGJlZW4gZmFtaWxpYXIgd2l0aCBpbnRhZ2xpbyBw\\ncmludGluZzsgaXQgaXMgY2xhaW1lZCB0aGF0IGhlIGhhZCB3b3JrZWQgb24g\\nY29wcGVyIGVuZ3JhdmluZ3Mgd2l0aCBhbiBhcnRpc3Qga25vd24gYXMgdGhl\\nIE1hc3RlciBvZiBQbGF5aW5nIENhcmRzLgoKQnkgMTQ1MCwgdGhlIHByZXNz\\nIHdhcyBpbiBvcGVyYXRpb24sIGFuZCBhIEdlcm1hbiBwb2VtIGhhZCBiZWVu\\nIHByaW50ZWQsIHBvc3NpYmx5IHRoZSBmaXJzdCBpdGVtIHRvIGJlIHByaW50\\nZWQgdGhlcmUuIEd1dGVuYmVyZyB3YXMgYWJsZSB0byBjb252aW5jZSB0aGUg\\nd2VhbHRoeSBtb25leWxlbmRlciBKb2hhbm4gRnVzdCBmb3IgYSBsb2FuIG9m\\nIDgwMCBndWlsZGVycy4gUGV0ZXIgU2Now7ZmZmVyLCB3aG8gYmVjYW1lIEZ1\\nc3TigJlzIHNvbi1pbi1sYXcsIGFsc28gam9pbmVkIHRoZSBlbnRlcnByaXNl\\nLiBTY2jDtmZmZXIgaGFkIHdvcmtlZCBhcyBhIHNjcmliZSBpbiBQYXJpcyBh\\nbmQgaXMgYmVsaWV2ZWQgdG8gaGF2ZSBkZXNpZ25lZCBzb21lIG9mIHRoZSBm\\naXJzdCB0eXBlZmFjZXMuCgo8ZmlndXJlPgoJPGJsb2NrcXVvdGU+CgkJPHA+\\nQWxsIHRoYXQgaGFzIGJlZW4gd3JpdHRlbiB0byBtZSBhYm91dCB0aGF0IG1h\\ncnZlbG91cyBtYW4gc2VlbiBhdCBGcmFua2Z1cnQgaXMgdHJ1ZS4gSSBoYXZl\\nIG5vdCBzZWVuIGNvbXBsZXRlIEJpYmxlcyBidXQgb25seSBhIG51bWJlciBv\\nZiBxdWlyZXMgb2YgdmFyaW91cyBib29rcyBvZiB0aGUgQmlibGUuIFRoZSBz\\nY3JpcHQgd2FzIHZlcnkgbmVhdCBhbmQgbGVnaWJsZSwgbm90IGF0IGFsbCBk\\naWZmaWN1bHQgdG8gZm9sbG934oCUeW91ciBncmFjZSB3b3VsZCBiZSBhYmxl\\nIHRvIHJlYWQgaXQgd2l0aG91dCBlZmZvcnQsIGFuZCBpbmRlZWQgd2l0aG91\\ndCBnbGFzc2VzLjwvcD4KCQk8Zm9vdGVyPgoJCQk8Y2l0ZT7igJRGdXR1cmUg\\ncG9wZSBQaXVzIElJIGluIGEgbGV0dGVyIHRvIENhcmRpbmFsIENhcnZhamFs\\nLCBNYXJjaCAxNDU1PC9jaXRlPgoJCTwvZm9vdGVyPgoJPC9ibG9ja3F1b3Rl\\nPgo8L2ZpZ3VyZT4KCkd1dGVuYmVyZydzIHdvcmtzaG9wIHdhcyBzZXQgdXAg\\nYXQgSG9mIEh1bWJyZWNodCwgYSBwcm9wZXJ0eSBiZWxvbmdpbmcgdG8gYSBk\\naXN0YW50IHJlbGF0aXZlLiBJdCBpcyBub3QgY2xlYXIgd2hlbiBHdXRlbmJl\\ncmcgY29uY2VpdmVkIHRoZSBCaWJsZSBwcm9qZWN0LCBidXQgZm9yIHRoaXMg\\naGUgYm9ycm93ZWQgYW5vdGhlciA4MDAgZ3VpbGRlcnMgZnJvbSBGdXN0LCBh\\nbmQgd29yayBjb21tZW5jZWQgaW4gMTQ1Mi4gQXQgdGhlIHNhbWUgdGltZSwg\\ndGhlIHByZXNzIHdhcyBhbHNvIHByaW50aW5nIG90aGVyLCBtb3JlIGx1Y3Jh\\ndGl2ZSB0ZXh0cyAocG9zc2libHkgTGF0aW4gZ3JhbW1hcnMpLiBUaGVyZSBp\\ncyBhbHNvIHNvbWUgc3BlY3VsYXRpb24gdGhhdCB0aGVyZSBtYXkgaGF2ZSBi\\nZWVuIHR3byBwcmVzc2VzLCBvbmUgZm9yIHRoZSBwZWRlc3RyaWFuIHRleHRz\\nLCBhbmQgb25lIGZvciB0aGUgQmlibGUuIE9uZSBvZiB0aGUgcHJvZml0LW1h\\na2luZyBlbnRlcnByaXNlcyBvZiB0aGUgbmV3IHByZXNzIHdhcyB0aGUgcHJp\\nbnRpbmcgb2YgdGhvdXNhbmRzIG9mIGluZHVsZ2VuY2VzIGZvciB0aGUgY2h1\\ncmNoLCBkb2N1bWVudGVkIGZyb20gMTQ1NOKAkzU1LgoKSW4gMTQ1NSBHdXRl\\nbmJlcmcgY29tcGxldGVkIGhpcyA0Mi1saW5lIEJpYmxlLCBrbm93biBhcyB0\\naGUgR3V0ZW5iZXJnIEJpYmxlLiBBYm91dCAxODAgY29waWVzIHdlcmUgcHJp\\nbnRlZCwgbW9zdCBvbiBwYXBlciBhbmQgc29tZSBvbiB2ZWxsdW0uCgojIyBD\\nb3VydCBDYXNlCgpTb21lIHRpbWUgaW4gMTQ1NiwgdGhlcmUgd2FzIGEgZGlz\\ncHV0ZSBiZXR3ZWVuIEd1dGVuYmVyZyBhbmQgRnVzdCwgYW5kIEZ1c3QgZGVt\\nYW5kZWQgaGlzIG1vbmV5IGJhY2ssIGFjY3VzaW5nIEd1dGVuYmVyZyBvZiBt\\naXN1c2luZyB0aGUgZnVuZHMuIE1lYW53aGlsZSB0aGUgZXhwZW5zZXMgb2Yg\\ndGhlIEJpYmxlIHByb2plY3QgaGFkIHByb2xpZmVyYXRlZCwgYW5kIEd1dGVu\\nYmVyZydzIGRlYnQgbm93IGV4Y2VlZGVkIDIwLDAwMCBndWlsZGVycy4gRnVz\\ndCBzdWVkIGF0IHRoZSBhcmNoYmlzaG9wJ3MgY291cnQuIEEgTm92ZW1iZXIg\\nMTQ1NSBsZWdhbCBkb2N1bWVudCByZWNvcmRzIHRoYXQgdGhlcmUgd2FzIGEg\\ncGFydG5lcnNoaXAgZm9yIGEgInByb2plY3Qgb2YgdGhlIGJvb2tzLCIgdGhl\\nIGZ1bmRzIGZvciB3aGljaCBHdXRlbmJlcmcgaGFkIHVzZWQgZm9yIG90aGVy\\nIHB1cnBvc2VzLCBhY2NvcmRpbmcgdG8gRnVzdC4gVGhlIGNvdXJ0IGRlY2lk\\nZWQgaW4gZmF2b3Igb2YgRnVzdCwgZ2l2aW5nIGhpbSBjb250cm9sIG92ZXIg\\ndGhlIEJpYmxlIHByaW50aW5nIHdvcmtzaG9wIGFuZCBoYWxmIG9mIGFsbCBw\\ncmludGVkIEJpYmxlcy4KClRodXMgR3V0ZW5iZXJnIHdhcyBlZmZlY3RpdmVs\\neSBiYW5rcnVwdCwgYnV0IGl0IGFwcGVhcnMgaGUgcmV0YWluZWQgKG9yIHJl\\nLXN0YXJ0ZWQpIGEgc21hbGwgcHJpbnRpbmcgc2hvcCwgYW5kIHBhcnRpY2lw\\nYXRlZCBpbiB0aGUgcHJpbnRpbmcgb2YgYSBCaWJsZSBpbiB0aGUgdG93biBv\\nZiBCYW1iZXJnIGFyb3VuZCAxNDU5LCBmb3Igd2hpY2ggaGUgc2VlbXMgYXQg\\nbGVhc3QgdG8gaGF2ZSBzdXBwbGllZCB0aGUgdHlwZS4gQnV0IHNpbmNlIGhp\\ncyBwcmludGVkIGJvb2tzIG5ldmVyIGNhcnJ5IGhpcyBuYW1lIG9yIGEgZGF0\\nZSwgaXQgaXMgZGlmZmljdWx0IHRvIGJlIGNlcnRhaW4sIGFuZCB0aGVyZSBp\\ncyBjb25zZXF1ZW50bHkgYSBjb25zaWRlcmFibGUgc2Nob2xhcmx5IGRlYmF0\\nZSBvbiB0aGlzIHN1YmplY3QuIEl0IGlzIGFsc28gcG9zc2libGUgdGhhdCB0\\naGUgbGFyZ2UgQ2F0aG9saWNvbiBkaWN0aW9uYXJ5LCAzMDAgY29waWVzIG9m\\nIDc1NCBwYWdlcywgcHJpbnRlZCBpbiBNYWlueiBpbiAxNDYwLCBtYXkgaGF2\\nZSBiZWVuIGV4ZWN1dGVkIGluIGhpcyB3b3Jrc2hvcC4KCk1lYW53aGlsZSwg\\ndGhlIEZ1c3TigJNTY2jDtmZmZXIgc2hvcCB3YXMgdGhlIGZpcnN0IGluIEV1\\ncm9wZSB0byBicmluZyBvdXQgYSBib29rIHdpdGggdGhlIHByaW50ZXIncyBu\\nYW1lIGFuZCBkYXRlLCB0aGUgTWFpbnogUHNhbHRlciBvZiBBdWd1c3QgMTQ1\\nNywgYW5kIHdoaWxlIHByb3VkbHkgcHJvY2xhaW1pbmcgdGhlIG1lY2hhbmlj\\nYWwgcHJvY2VzcyBieSB3aGljaCBpdCBoYWQgYmVlbiBwcm9kdWNlZCwgaXQg\\nbWFkZSBubyBtZW50aW9uIG9mIEd1dGVuYmVyZy4KCiMjIExhdGVyIExpZmUK\\nCkluIDE0NjIsIGR1cmluZyBhIGNvbmZsaWN0IGJldHdlZW4gdHdvIGFyY2hi\\naXNob3BzLCBNYWlueiB3YXMgc2Fja2VkIGJ5IGFyY2hiaXNob3AgQWRvbHBo\\nIHZvbiBOYXNzYXUsIGFuZCBHdXRlbmJlcmcgd2FzIGV4aWxlZC4gQW4gb2xk\\nIG1hbiBieSBub3csIGhlIG1vdmVkIHRvIEVsdHZpbGxlIHdoZXJlIGhlIG1h\\neSBoYXZlIGluaXRpYXRlZCBhbmQgc3VwZXJ2aXNlZCBhIG5ldyBwcmludGlu\\nZyBwcmVzcyBiZWxvbmdpbmcgdG8gdGhlIGJyb3RoZXJzIEJlY2h0ZXJtw7xu\\nemUuCgpJbiBKYW51YXJ5IDE0NjUsIEd1dGVuYmVyZydzIGFjaGlldmVtZW50\\ncyB3ZXJlIHJlY29nbml6ZWQgYW5kIGhlIHdhcyBnaXZlbiB0aGUgdGl0bGUg\\nSG9mbWFubiAoZ2VudGxlbWFuIG9mIHRoZSBjb3VydCkgYnkgdm9uIE5hc3Nh\\ndS4gVGhpcyBob25vciBpbmNsdWRlZCBhIHN0aXBlbmQsIGFuIGFubnVhbCBj\\nb3VydCBvdXRmaXQsIGFzIHdlbGwgYXMgMiwxODAgbGl0cmVzIG9mIGdyYWlu\\nIGFuZCAyLDAwMCBsaXRyZXMgb2Ygd2luZSB0YXgtZnJlZS4gSXQgaXMgYmVs\\naWV2ZWQgaGUgbWF5IGhhdmUgbW92ZWQgYmFjayB0byBNYWlueiBhcm91bmQg\\ndGhpcyB0aW1lLCBidXQgdGhpcyBpcyBub3QgY2VydGFpbi4KCioqKgoKR3V0\\nZW5iZXJnIGRpZWQgaW4gMTQ2OCBhbmQgd2FzIGJ1cmllZCBpbiB0aGUgRnJh\\nbmNpc2NhbiBjaHVyY2ggYXQgTWFpbnosIGhpcyBjb250cmlidXRpb25zIGxh\\ncmdlbHkgdW5rbm93bi4gVGhpcyBjaHVyY2ggYW5kIHRoZSBjZW1ldGVyeSB3\\nZXJlIGxhdGVyIGRlc3Ryb3llZCwgYW5kIEd1dGVuYmVyZydzIGdyYXZlIGlz\\nIG5vdyBsb3N0LgoKSW4gMTUwNCwgaGUgd2FzIG1lbnRpb25lZCBhcyB0aGUg\\naW52ZW50b3Igb2YgdHlwb2dyYXBoeSBpbiBhIGJvb2sgYnkgUHJvZmVzc29y\\nIEl2byBXaXR0aWcuIEl0IHdhcyBub3QgdW50aWwgMTU2NyB0aGF0IHRoZSBm\\naXJzdCBwb3J0cmFpdCBvZiBHdXRlbmJlcmcsIGFsbW9zdCBjZXJ0YWlubHkg\\nYW4gaW1hZ2luYXJ5IHJlY29uc3RydWN0aW9uLCBhcHBlYXJlZCBpbiBIZWlu\\ncmljaCBQYW50YWxlb24ncyBiaW9ncmFwaHkgb2YgZmFtb3VzIEdlcm1hbnMu\\nCgojIyBQcmludGluZyBNZXRob2QgV2l0aCBNb3ZhYmxlIFR5cGUKCkd1dGVu\\nYmVyZydzIGVhcmx5IHByaW50aW5nIHByb2Nlc3MsIGFuZCB3aGF0IHRlc3Rz\\nIGhlIG1heSBoYXZlIG1hZGUgd2l0aCBtb3ZhYmxlIHR5cGUsIGFyZSBub3Qg\\na25vd24gaW4gZ3JlYXQgZGV0YWlsLiBIaXMgbGF0ZXIgQmlibGVzIHdlcmUg\\ncHJpbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIGhhdmUgcmVxdWlyZWQgbGFy\\nZ2UgcXVhbnRpdGllcyBvZiB0eXBlLCBzb21lIGVzdGltYXRlcyBzdWdnZXN0\\naW5nIGFzIG1hbnkgYXMgMTAwLDAwMCBpbmRpdmlkdWFsIHNvcnRzLiBTZXR0\\naW5nIGVhY2ggcGFnZSB3b3VsZCB0YWtlLCBwZXJoYXBzLCBoYWxmIGEgZGF5\\nLCBhbmQgY29uc2lkZXJpbmcgYWxsIHRoZSB3b3JrIGluIGxvYWRpbmcgdGhl\\nIHByZXNzLCBpbmtpbmcgdGhlIHR5cGUsIHB1bGxpbmcgdGhlIGltcHJlc3Np\\nb25zLCBoYW5naW5nIHVwIHRoZSBzaGVldHMsIGRpc3RyaWJ1dGluZyB0aGUg\\ndHlwZSwgZXRjLiwgaXQgaXMgdGhvdWdodCB0aGF0IHRoZSBHdXRlbmJlcmfi\\ngJNGdXN0IHNob3AgbWlnaHQgaGF2ZSBlbXBsb3llZCBhcyBtYW55IGFzIDI1\\nIGNyYWZ0c21lbi4KCiFbTW92YWJsZSBtZXRhbCB0eXBlLCBhbmQgY29tcG9z\\naW5nIHN0aWNrLCBkZXNjZW5kZWQgZnJvbSBHdXRlbmJlcmcncyBwcmVzcy4g\\nUGhvdG8gYnkgV2lsbGkgSGVpZGVsYmFjaC4gTGljZW5zZWQgdW5kZXIgQ0Mg\\nQlkgMi41XSgvbWVkaWEvbW92YWJsZS10eXBlLmpwZykKCipNb3ZhYmxlIG1l\\ndGFsIHR5cGUsIGFuZCBjb21wb3Npbmcgc3RpY2ssIGRlc2NlbmRlZCBmcm9t\\nIEd1dGVuYmVyZydzIHByZXNzLiBQaG90byBieSBXaWxsaSBIZWlkZWxiYWNo\\nLiBMaWNlbnNlZCB1bmRlciBDQyBCWSAyLjUqCgpHdXRlbmJlcmcncyB0ZWNo\\nbmlxdWUgb2YgbWFraW5nIG1vdmFibGUgdHlwZSByZW1haW5zIHVuY2xlYXIu\\nIEluIHRoZSBmb2xsb3dpbmcgZGVjYWRlcywgcHVuY2hlcyBhbmQgY29wcGVy\\nIG1hdHJpY2VzIGJlY2FtZSBzdGFuZGFyZGl6ZWQgaW4gdGhlIHJhcGlkbHkg\\nZGlzc2VtaW5hdGluZyBwcmludGluZyBwcmVzc2VzIGFjcm9zcyBFdXJvcGUu\\nIFdoZXRoZXIgR3V0ZW5iZXJnIHVzZWQgdGhpcyBzb3BoaXN0aWNhdGVkIHRl\\nY2huaXF1ZSBvciBhIHNvbWV3aGF0IHByaW1pdGl2ZSB2ZXJzaW9uIGhhcyBi\\nZWVuIHRoZSBzdWJqZWN0IG9mIGNvbnNpZGVyYWJsZSBkZWJhdGUuCgpJbiB0\\naGUgc3RhbmRhcmQgcHJvY2VzcyBvZiBtYWtpbmcgdHlwZSwgYSBoYXJkIG1l\\ndGFsIHB1bmNoIChtYWRlIGJ5IHB1bmNoY3V0dGluZywgd2l0aCB0aGUgbGV0\\ndGVyIGNhcnZlZCBiYWNrIHRvIGZyb250KSBpcyBoYW1tZXJlZCBpbnRvIGEg\\nc29mdGVyIGNvcHBlciBiYXIsIGNyZWF0aW5nIGEgbWF0cml4LiBUaGlzIGlz\\nIHRoZW4gcGxhY2VkIGludG8gYSBoYW5kLWhlbGQgbW91bGQgYW5kIGEgcGll\\nY2Ugb2YgdHlwZSwgb3IgInNvcnQiLCBpcyBjYXN0IGJ5IGZpbGxpbmcgdGhl\\nIG1vdWxkIHdpdGggbW9sdGVuIHR5cGUtbWV0YWw7IHRoaXMgY29vbHMgYWxt\\nb3N0IGF0IG9uY2UsIGFuZCB0aGUgcmVzdWx0aW5nIHBpZWNlIG9mIHR5cGUg\\nY2FuIGJlIHJlbW92ZWQgZnJvbSB0aGUgbW91bGQuIFRoZSBtYXRyaXggY2Fu\\nIGJlIHJldXNlZCB0byBjcmVhdGUgaHVuZHJlZHMsIG9yIHRob3VzYW5kcywg\\nb2YgaWRlbnRpY2FsIHNvcnRzIHNvIHRoYXQgdGhlIHNhbWUgY2hhcmFjdGVy\\nIGFwcGVhcmluZyBhbnl3aGVyZSB3aXRoaW4gdGhlIGJvb2sgd2lsbCBhcHBl\\nYXIgdmVyeSB1bmlmb3JtLCBnaXZpbmcgcmlzZSwgb3ZlciB0aW1lLCB0byB0\\naGUgZGV2ZWxvcG1lbnQgb2YgZGlzdGluY3Qgc3R5bGVzIG9mIHR5cGVmYWNl\\ncyBvciBmb250cy4gQWZ0ZXIgY2FzdGluZywgdGhlIHNvcnRzIGFyZSBhcnJh\\nbmdlZCBpbnRvIHR5cGUtY2FzZXMsIGFuZCB1c2VkIHRvIG1ha2UgdXAgcGFn\\nZXMgd2hpY2ggYXJlIGlua2VkIGFuZCBwcmludGVkLCBhIHByb2NlZHVyZSB3\\naGljaCBjYW4gYmUgcmVwZWF0ZWQgaHVuZHJlZHMsIG9yIHRob3VzYW5kcywg\\nb2YgdGltZXMuIFRoZSBzb3J0cyBjYW4gYmUgcmV1c2VkIGluIGFueSBjb21i\\naW5hdGlvbiwgZWFybmluZyB0aGUgcHJvY2VzcyB0aGUgbmFtZSBvZiDigJxt\\nb3ZhYmxlIHR5cGXigJ0uCgpUaGUgaW52ZW50aW9uIG9mIHRoZSBtYWtpbmcg\\nb2YgdHlwZXMgd2l0aCBwdW5jaCwgbWF0cml4IGFuZCBtb2xkIGhhcyBiZWVu\\nIHdpZGVseSBhdHRyaWJ1dGVkIHRvIEd1dGVuYmVyZy4gSG93ZXZlciwgcmVj\\nZW50IGV2aWRlbmNlIHN1Z2dlc3RzIHRoYXQgR3V0ZW5iZXJnJ3MgcHJvY2Vz\\ncyB3YXMgc29tZXdoYXQgZGlmZmVyZW50LiBJZiBoZSB1c2VkIHRoZSBwdW5j\\naCBhbmQgbWF0cml4IGFwcHJvYWNoLCBhbGwgaGlzIGxldHRlcnMgc2hvdWxk\\nIGhhdmUgYmVlbiBuZWFybHkgaWRlbnRpY2FsLCB3aXRoIHNvbWUgdmFyaWF0\\naW9ucyBkdWUgdG8gbWlzY2FzdGluZyBhbmQgaW5raW5nLiBIb3dldmVyLCB0\\naGUgdHlwZSB1c2VkIGluIEd1dGVuYmVyZydzIGVhcmxpZXN0IHdvcmsgc2hv\\nd3Mgb3RoZXIgdmFyaWF0aW9ucy4KCjxmaWd1cmU+Cgk8YmxvY2txdW90ZT4K\\nCQk8cD5JdCBpcyBhIHByZXNzLCBjZXJ0YWlubHksIGJ1dCBhIHByZXNzIGZy\\nb20gd2hpY2ggc2hhbGwgZmxvdyBpbiBpbmV4aGF1c3RpYmxlIHN0cmVhbXPi\\ngKYgVGhyb3VnaCBpdCwgZ29kIHdpbGwgc3ByZWFkIGhpcyB3b3JkLjwvcD4K\\nCQk8Zm9vdGVyPgoJCQk8Y2l0ZT7igJRKb2hhbm5lcyBHdXRlbmJlcmc8L2Np\\ndGU+CgkJPC9mb290ZXI+Cgk8L2Jsb2NrcXVvdGU+CjwvZmlndXJlPgoKSW4g\\nMjAwMSwgdGhlIHBoeXNpY2lzdCBCbGFpc2UgQWfDvGVyYSB5IEFyY2FzIGFu\\nZCBQcmluY2V0b24gbGlicmFyaWFuIFBhdWwgTmVlZGhhbSwgdXNlZCBkaWdp\\ndGFsIHNjYW5zIG9mIGEgUGFwYWwgYnVsbCBpbiB0aGUgU2NoZWlkZSBMaWJy\\nYXJ5LCBQcmluY2V0b24sIHRvIGNhcmVmdWxseSBjb21wYXJlIHRoZSBzYW1l\\nIGxldHRlcnMgKHR5cGVzKSBhcHBlYXJpbmcgaW4gZGlmZmVyZW50IHBhcnRz\\nIG9mIHRoZSBwcmludGVkIHRleHQuIFRoZSBpcnJlZ3VsYXJpdGllcyBpbiBH\\ndXRlbmJlcmcncyB0eXBlLCBwYXJ0aWN1bGFybHkgaW4gc2ltcGxlIGNoYXJh\\nY3RlcnMgc3VjaCBhcyB0aGUgaHlwaGVuLCBzdWdnZXN0ZWQgdGhhdCB0aGUg\\ndmFyaWF0aW9ucyBjb3VsZCBub3QgaGF2ZSBjb21lIGZyb20gZWl0aGVyIGlu\\nayBzbWVhciBvciBmcm9tIHdlYXIgYW5kIGRhbWFnZSBvbiB0aGUgcGllY2Vz\\nIG9mIG1ldGFsIG9uIHRoZSB0eXBlcyB0aGVtc2VsdmVzLiBXaGlsZSBzb21l\\nIGlkZW50aWNhbCB0eXBlcyBhcmUgY2xlYXJseSB1c2VkIG9uIG90aGVyIHBh\\nZ2VzLCBvdGhlciB2YXJpYXRpb25zLCBzdWJqZWN0ZWQgdG8gZGV0YWlsZWQg\\naW1hZ2UgYW5hbHlzaXMsIHN1Z2dlc3RlZCB0aGF0IHRoZXkgY291bGQgbm90\\nIGhhdmUgYmVlbiBwcm9kdWNlZCBmcm9tIHRoZSBzYW1lIG1hdHJpeC4gVHJh\\nbnNtaXR0ZWQgbGlnaHQgcGljdHVyZXMgb2YgdGhlIHBhZ2UgYWxzbyBhcHBl\\nYXJlZCB0byByZXZlYWwgc3Vic3RydWN0dXJlcyBpbiB0aGUgdHlwZSB0aGF0\\nIGNvdWxkIG5vdCBhcmlzZSBmcm9tIHRyYWRpdGlvbmFsIHB1bmNoY3V0dGlu\\nZyB0ZWNobmlxdWVzLiBUaGV5IGh5cG90aGVzaXplZCB0aGF0IHRoZSBtZXRo\\nb2QgbWF5IGhhdmUgaW52b2x2ZWQgaW1wcmVzc2luZyBzaW1wbGUgc2hhcGVz\\nIHRvIGNyZWF0ZSBhbHBoYWJldHMgaW4g4oCcY3VuZWlmb3Jt4oCdIHN0eWxl\\nIGluIGEgbWF0cml4IG1hZGUgb2Ygc29tZSBzb2Z0IG1hdGVyaWFsLCBwZXJo\\nYXBzIHNhbmQuIENhc3RpbmcgdGhlIHR5cGUgd291bGQgZGVzdHJveSB0aGUg\\nbW91bGQsIGFuZCB0aGUgbWF0cml4IHdvdWxkIG5lZWQgdG8gYmUgcmVjcmVh\\ndGVkIHRvIG1ha2UgZWFjaCBhZGRpdGlvbmFsIHNvcnQuIFRoaXMgY291bGQg\\nZXhwbGFpbiB0aGUgdmFyaWF0aW9ucyBpbiB0aGUgdHlwZSwgYXMgd2VsbCBh\\ncyB0aGUgc3Vic3RydWN0dXJlcyBvYnNlcnZlZCBpbiB0aGUgcHJpbnRlZCBp\\nbWFnZXMuCgpUaHVzLCB0aGV5IGZlZWwgdGhhdCDigJx0aGUgZGVjaXNpdmUg\\nZmFjdG9yIGZvciB0aGUgYmlydGggb2YgdHlwb2dyYXBoeeKAnSwgdGhlIHVz\\nZSBvZiByZXVzYWJsZSBtb3VsZHMgZm9yIGNhc3RpbmcgdHlwZSwgbWlnaHQg\\naGF2ZSBiZWVuIGEgbW9yZSBwcm9ncmVzc2l2ZSBwcm9jZXNzIHRoYW4gd2Fz\\nIHByZXZpb3VzbHkgdGhvdWdodC4gVGhleSBzdWdnZXN0IHRoYXQgdGhlIGFk\\nZGl0aW9uYWwgc3RlcCBvZiB1c2luZyB0aGUgcHVuY2ggdG8gY3JlYXRlIGEg\\nbW91bGQgdGhhdCBjb3VsZCBiZSByZXVzZWQgbWFueSB0aW1lcyB3YXMgbm90\\nIHRha2VuIHVudGlsIHR3ZW50eSB5ZWFycyBsYXRlciwgaW4gdGhlIDE0NzBz\\nLiBPdGhlcnMgaGF2ZSBub3QgYWNjZXB0ZWQgc29tZSBvciBhbGwgb2YgdGhl\\naXIgc3VnZ2VzdGlvbnMsIGFuZCBoYXZlIGludGVycHJldGVkIHRoZSBldmlk\\nZW5jZSBpbiBvdGhlciB3YXlzLCBhbmQgdGhlIHRydXRoIG9mIHRoZSBtYXR0\\nZXIgcmVtYWlucyB2ZXJ5IHVuY2VydGFpbi4KCkEgMTU2OCBoaXN0b3J5IGJ5\\nIEhhZHJpYW51cyBKdW5pdXMgb2YgSG9sbGFuZCBjbGFpbXMgdGhhdCB0aGUg\\nYmFzaWMgaWRlYSBvZiB0aGUgbW92YWJsZSB0eXBlIGNhbWUgdG8gR3V0ZW5i\\nZXJnIGZyb20gTGF1cmVucyBKYW5zem9vbiBDb3N0ZXIgdmlhIEZ1c3QsIHdo\\nbyB3YXMgYXBwcmVudGljZWQgdG8gQ29zdGVyIGluIHRoZSAxNDMwcyBhbmQg\\nbWF5IGhhdmUgYnJvdWdodCBzb21lIG9mIGhpcyBlcXVpcG1lbnQgZnJvbSBI\\nYWFybGVtIHRvIE1haW56LiBXaGlsZSBDb3N0ZXIgYXBwZWFycyB0byBoYXZl\\nIGV4cGVyaW1lbnRlZCB3aXRoIG1vdWxkcyBhbmQgY2FzdGFibGUgbWV0YWwg\\ndHlwZSwgdGhlcmUgaXMgbm8gZXZpZGVuY2UgdGhhdCBoZSBoYWQgYWN0dWFs\\nbHkgcHJpbnRlZCBhbnl0aGluZyB3aXRoIHRoaXMgdGVjaG5vbG9neS4gSGUg\\nd2FzIGFuIGludmVudG9yIGFuZCBhIGdvbGRzbWl0aC4gSG93ZXZlciwgdGhl\\ncmUgaXMgb25lIGluZGlyZWN0IHN1cHBvcnRlciBvZiB0aGUgY2xhaW0gdGhh\\ndCBDb3N0ZXIgbWlnaHQgYmUgdGhlIGludmVudG9yLiBUaGUgYXV0aG9yIG9m\\nIHRoZSBDb2xvZ25lIENocm9uaWNsZSBvZiAxNDk5IHF1b3RlcyBVbHJpY2gg\\nWmVsbCwgdGhlIGZpcnN0IHByaW50ZXIgb2YgQ29sb2duZSwgdGhhdCBwcmlu\\ndGluZyB3YXMgcGVyZm9ybWVkIGluIE1haW56IGluIDE0NTAsIGJ1dCB0aGF0\\nIHNvbWUgdHlwZSBvZiBwcmludGluZyBvZiBsb3dlciBxdWFsaXR5IGhhZCBw\\ncmV2aW91c2x5IG9jY3VycmVkIGluIHRoZSBOZXRoZXJsYW5kcy4gSG93ZXZl\\nciwgdGhlIGNocm9uaWNsZSBkb2VzIG5vdCBtZW50aW9uIHRoZSBuYW1lIG9m\\nIENvc3Rlciwgd2hpbGUgaXQgYWN0dWFsbHkgY3JlZGl0cyBHdXRlbmJlcmcg\\nYXMgdGhlICJmaXJzdCBpbnZlbnRvciBvZiBwcmludGluZyIgaW4gdGhlIHZl\\ncnkgc2FtZSBwYXNzYWdlIChmb2wuIDMxMikuIFRoZSBmaXJzdCBzZWN1cmVs\\neSBkYXRlZCBib29rIGJ5IER1dGNoIHByaW50ZXJzIGlzIGZyb20gMTQ3MSwg\\nYW5kIHRoZSBDb3N0ZXIgY29ubmVjdGlvbiBpcyB0b2RheSByZWdhcmRlZCBh\\ncyBhIG1lcmUgbGVnZW5kLgoKVGhlIDE5dGggY2VudHVyeSBwcmludGVyIGFu\\nZCB0eXBlZm91bmRlciBGb3VybmllciBMZSBKZXVuZSBzdWdnZXN0ZWQgdGhh\\ndCBHdXRlbmJlcmcgbWlnaHQgbm90IGhhdmUgYmVlbiB1c2luZyB0eXBlIGNh\\nc3Qgd2l0aCBhIHJldXNhYmxlIG1hdHJpeCwgYnV0IHBvc3NpYmx5IHdvb2Rl\\nbiB0eXBlcyB0aGF0IHdlcmUgY2FydmVkIGluZGl2aWR1YWxseS4gQSBzaW1p\\nbGFyIHN1Z2dlc3Rpb24gd2FzIG1hZGUgYnkgTmFzaCBpbiAyMDA0LiBUaGlz\\nIHJlbWFpbnMgcG9zc2libGUsIGFsYmVpdCBlbnRpcmVseSB1bnByb3Zlbi4K\\nCkl0IGhhcyBhbHNvIGJlZW4gcXVlc3Rpb25lZCB3aGV0aGVyIEd1dGVuYmVy\\nZyB1c2VkIG1vdmFibGUgdHlwZXMgYXQgYWxsLiBJbiAyMDA0LCBJdGFsaWFu\\nIHByb2Zlc3NvciBCcnVubyBGYWJiaWFuaSBjbGFpbWVkIHRoYXQgZXhhbWlu\\nYXRpb24gb2YgdGhlIDQyLWxpbmUgQmlibGUgcmV2ZWFsZWQgYW4gb3Zlcmxh\\ncHBpbmcgb2YgbGV0dGVycywgc3VnZ2VzdGluZyB0aGF0IEd1dGVuYmVyZyBk\\naWQgbm90IGluIGZhY3QgdXNlIG1vdmFibGUgdHlwZSAoaW5kaXZpZHVhbCBj\\nYXN0IGNoYXJhY3RlcnMpIGJ1dCByYXRoZXIgdXNlZCB3aG9sZSBwbGF0ZXMg\\nbWFkZSBmcm9tIGEgc3lzdGVtIHNvbWV3aGF0IGxpa2UgYSBtb2Rlcm4gdHlw\\nZXdyaXRlciwgd2hlcmVieSB0aGUgbGV0dGVycyB3ZXJlIHN0YW1wZWQgc3Vj\\nY2Vzc2l2ZWx5IGludG8gdGhlIHBsYXRlIGFuZCB0aGVuIHByaW50ZWQuIEhv\\nd2V2ZXIsIG1vc3Qgc3BlY2lhbGlzdHMgcmVnYXJkIHRoZSBvY2Nhc2lvbmFs\\nIG92ZXJsYXBwaW5nIG9mIHR5cGUgYXMgY2F1c2VkIGJ5IHBhcGVyIG1vdmVt\\nZW50IG92ZXIgcGllY2VzIG9mIHR5cGUgb2Ygc2xpZ2h0bHkgdW5lcXVhbCBo\\nZWlnaHQu\\n\",\n \"encoding\": \"base64\"\n}\n", + "response": "{\"sha\":\"44f78c474d04273185a95821426f75affc9b0044\",\"node_id\":\"MDQ6QmxvYjI4Njc3MTExNjo0NGY3OGM0NzRkMDQyNzMxODVhOTU4MjE0MjZmNzVhZmZjOWIwMDQ0\",\"size\":16071,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/44f78c474d04273185a95821426f75affc9b0044\",\"content\":\"LS0tCnRpdGxlOiAiSm9oYW5uZXMgR3V0ZW5iZXJnOiBUaGUgQmlydGggb2Yg\\nTW92YWJsZSBUeXBlIgpkYXRlOiAiMjAxNy0wOC0xOFQyMjoxMjowMy4yODRa\\nIgp0ZW1wbGF0ZTogInBvc3QiCmRyYWZ0OiBmYWxzZQpjYXRlZ29yeTogIlR5\\ncG9ncmFwaHkiCnRhZ3M6CiAgLSAiT3BlbiBzb3VyY2UiCiAgLSAiR2F0c2J5\\nIgogIC0gIlR5cG9ncmFwaHkiCmRlc2NyaXB0aW9uOiAiR2VybWFuIGludmVu\\ndG9yIEpvaGFubmVzIEd1dGVuYmVyZyBkZXZlbG9wZWQgYSBtZXRob2Qgb2Yg\\nbW92YWJsZSB0eXBlIGFuZCB1c2VkIGl0IHRvIGNyZWF0ZSBvbmUgb2YgdGhl\\nIHdlc3Rlcm4gd29ybGTigJlzIGZpcnN0IG1ham9yIHByaW50ZWQgYm9va3Ms\\nIHRoZSDigJxGb3J0eeKAk1R3b+KAk0xpbmXigJ0gQmlibGUuIgpjYW5vbmlj\\nYWw6ICcnCi0tLQoKR2VybWFuIGludmVudG9yIEpvaGFubmVzIEd1dGVuYmVy\\nZyBkZXZlbG9wZWQgYSBtZXRob2Qgb2YgbW92YWJsZSB0eXBlIGFuZCB1c2Vk\\nIGl0IHRvIGNyZWF0ZSBvbmUgb2YgdGhlIHdlc3Rlcm4gd29ybGTigJlzIGZp\\ncnN0IG1ham9yIHByaW50ZWQgYm9va3MsIHRoZSDigJxGb3J0eeKAk1R3b+KA\\nk0xpbmXigJ0gQmlibGUuCgoqKkpvaGFubmVzIEdlbnNmbGVpc2NoIHp1ciBM\\nYWRlbiB6dW0gR3V0ZW5iZXJnKiogKGMuIDEzOTgg4oCTIDE0NjgpIHdhcyBh\\nIEdlcm1hbiBibGFja3NtaXRoLCBnb2xkc21pdGgsIHByaW50ZXIsIGFuZCBw\\ndWJsaXNoZXIgd2hvIGludHJvZHVjZWQgcHJpbnRpbmcgdG8gRXVyb3BlLiBI\\naXMgaW52ZW50aW9uIG9mIG1lY2hhbmljYWwgbW92YWJsZSB0eXBlIHByaW50\\naW5nIHN0YXJ0ZWQgdGhlIFByaW50aW5nIFJldm9sdXRpb24gYW5kIGlzIHdp\\nZGVseSByZWdhcmRlZCBhcyB0aGUgbW9zdCBpbXBvcnRhbnQgZXZlbnQgb2Yg\\ndGhlIG1vZGVybiBwZXJpb2QuIEl0IHBsYXllZCBhIGtleSByb2xlIGluIHRo\\nZSBkZXZlbG9wbWVudCBvZiB0aGUgUmVuYWlzc2FuY2UsIFJlZm9ybWF0aW9u\\nLCB0aGUgQWdlIG9mIEVubGlnaHRlbm1lbnQsIGFuZCB0aGUgU2NpZW50aWZp\\nYyByZXZvbHV0aW9uIGFuZCBsYWlkIHRoZSBtYXRlcmlhbCBiYXNpcyBmb3Ig\\ndGhlIG1vZGVybiBrbm93bGVkZ2UtYmFzZWQgZWNvbm9teSBhbmQgdGhlIHNw\\ncmVhZCBvZiBsZWFybmluZyB0byB0aGUgbWFzc2VzLgoKPGZpZ3VyZSBjbGFz\\ncz0iZmxvYXQtcmlnaHQiIHN0eWxlPSJ3aWR0aDogMjQwcHgiPgoJPGltZyBz\\ncmM9Ii9tZWRpYS9ndXRlbmJlcmcuanBnIiBhbHQ9Ikd1dGVuYmVyZyI+Cgk8\\nZmlnY2FwdGlvbj5Kb2hhbm5lcyBHdXRlbmJlcmc8L2ZpZ2NhcHRpb24+Cjwv\\nZmlndXJlPgoKV2l0aCBoaXMgaW52ZW50aW9uIG9mIHRoZSBwcmludGluZyBw\\ncmVzcywgR3V0ZW5iZXJnIHdhcyB0aGUgZmlyc3QgRXVyb3BlYW4gdG8gdXNl\\nIG1vdmFibGUgdHlwZSBwcmludGluZywgaW4gYXJvdW5kIDE0MzkuIEFtb25n\\nIGhpcyBtYW55IGNvbnRyaWJ1dGlvbnMgdG8gcHJpbnRpbmcgYXJlOiB0aGUg\\naW52ZW50aW9uIG9mIGEgcHJvY2VzcyBmb3IgbWFzcy1wcm9kdWNpbmcgbW92\\nYWJsZSB0eXBlOyB0aGUgdXNlIG9mIG9pbC1iYXNlZCBpbms7IGFuZCB0aGUg\\ndXNlIG9mIGEgd29vZGVuIHByaW50aW5nIHByZXNzIHNpbWlsYXIgdG8gdGhl\\nIGFncmljdWx0dXJhbCBzY3JldyBwcmVzc2VzIG9mIHRoZSBwZXJpb2QuIEhp\\ncyB0cnVseSBlcG9jaGFsIGludmVudGlvbiB3YXMgdGhlIGNvbWJpbmF0aW9u\\nIG9mIHRoZXNlIGVsZW1lbnRzIGludG8gYSBwcmFjdGljYWwgc3lzdGVtIHRo\\nYXQgYWxsb3dlZCB0aGUgbWFzcyBwcm9kdWN0aW9uIG9mIHByaW50ZWQgYm9v\\na3MgYW5kIHdhcyBlY29ub21pY2FsbHkgdmlhYmxlIGZvciBwcmludGVycyBh\\nbmQgcmVhZGVycyBhbGlrZS4gR3V0ZW5iZXJnJ3MgbWV0aG9kIGZvciBtYWtp\\nbmcgdHlwZSBpcyB0cmFkaXRpb25hbGx5IGNvbnNpZGVyZWQgdG8gaGF2ZSBp\\nbmNsdWRlZCBhIHR5cGUgbWV0YWwgYWxsb3kgYW5kIGEgaGFuZCBtb3VsZCBm\\nb3IgY2FzdGluZyB0eXBlLiBUaGUgYWxsb3kgd2FzIGEgbWl4dHVyZSBvZiBs\\nZWFkLCB0aW4sIGFuZCBhbnRpbW9ueSB0aGF0IG1lbHRlZCBhdCBhIHJlbGF0\\naXZlbHkgbG93IHRlbXBlcmF0dXJlIGZvciBmYXN0ZXIgYW5kIG1vcmUgZWNv\\nbm9taWNhbCBjYXN0aW5nLCBjYXN0IHdlbGwsIGFuZCBjcmVhdGVkIGEgZHVy\\nYWJsZSB0eXBlLgoKSW4gUmVuYWlzc2FuY2UgRXVyb3BlLCB0aGUgYXJyaXZh\\nbCBvZiBtZWNoYW5pY2FsIG1vdmFibGUgdHlwZSBwcmludGluZyBpbnRyb2R1\\nY2VkIHRoZSBlcmEgb2YgbWFzcyBjb21tdW5pY2F0aW9uIHdoaWNoIHBlcm1h\\nbmVudGx5IGFsdGVyZWQgdGhlIHN0cnVjdHVyZSBvZiBzb2NpZXR5LiBUaGUg\\ncmVsYXRpdmVseSB1bnJlc3RyaWN0ZWQgY2lyY3VsYXRpb24gb2YgaW5mb3Jt\\nYXRpb24g4oCUIGluY2x1ZGluZyByZXZvbHV0aW9uYXJ5IGlkZWFzIOKAlCB0\\ncmFuc2NlbmRlZCBib3JkZXJzLCBjYXB0dXJlZCB0aGUgbWFzc2VzIGluIHRo\\nZSBSZWZvcm1hdGlvbiBhbmQgdGhyZWF0ZW5lZCB0aGUgcG93ZXIgb2YgcG9s\\naXRpY2FsIGFuZCByZWxpZ2lvdXMgYXV0aG9yaXRpZXM7IHRoZSBzaGFycCBp\\nbmNyZWFzZSBpbiBsaXRlcmFjeSBicm9rZSB0aGUgbW9ub3BvbHkgb2YgdGhl\\nIGxpdGVyYXRlIGVsaXRlIG9uIGVkdWNhdGlvbiBhbmQgbGVhcm5pbmcgYW5k\\nIGJvbHN0ZXJlZCB0aGUgZW1lcmdpbmcgbWlkZGxlIGNsYXNzLiBBY3Jvc3Mg\\nRXVyb3BlLCB0aGUgaW5jcmVhc2luZyBjdWx0dXJhbCBzZWxmLWF3YXJlbmVz\\ncyBvZiBpdHMgcGVvcGxlIGxlZCB0byB0aGUgcmlzZSBvZiBwcm90by1uYXRp\\nb25hbGlzbSwgYWNjZWxlcmF0ZWQgYnkgdGhlIGZsb3dlcmluZyBvZiB0aGUg\\nRXVyb3BlYW4gdmVybmFjdWxhciBsYW5ndWFnZXMgdG8gdGhlIGRldHJpbWVu\\ndCBvZiBMYXRpbidzIHN0YXR1cyBhcyBsaW5ndWEgZnJhbmNhLiBJbiB0aGUg\\nMTl0aCBjZW50dXJ5LCB0aGUgcmVwbGFjZW1lbnQgb2YgdGhlIGhhbmQtb3Bl\\ncmF0ZWQgR3V0ZW5iZXJnLXN0eWxlIHByZXNzIGJ5IHN0ZWFtLXBvd2VyZWQg\\ncm90YXJ5IHByZXNzZXMgYWxsb3dlZCBwcmludGluZyBvbiBhbiBpbmR1c3Ry\\naWFsIHNjYWxlLCB3aGlsZSBXZXN0ZXJuLXN0eWxlIHByaW50aW5nIHdhcyBh\\nZG9wdGVkIGFsbCBvdmVyIHRoZSB3b3JsZCwgYmVjb21pbmcgcHJhY3RpY2Fs\\nbHkgdGhlIHNvbGUgbWVkaXVtIGZvciBtb2Rlcm4gYnVsayBwcmludGluZy4K\\nClRoZSB1c2Ugb2YgbW92YWJsZSB0eXBlIHdhcyBhIG1hcmtlZCBpbXByb3Zl\\nbWVudCBvbiB0aGUgaGFuZHdyaXR0ZW4gbWFudXNjcmlwdCwgd2hpY2ggd2Fz\\nIHRoZSBleGlzdGluZyBtZXRob2Qgb2YgYm9vayBwcm9kdWN0aW9uIGluIEV1\\ncm9wZSwgYW5kIHVwb24gd29vZGJsb2NrIHByaW50aW5nLCBhbmQgcmV2b2x1\\ndGlvbml6ZWQgRXVyb3BlYW4gYm9vay1tYWtpbmcuIEd1dGVuYmVyZydzIHBy\\naW50aW5nIHRlY2hub2xvZ3kgc3ByZWFkIHJhcGlkbHkgdGhyb3VnaG91dCBF\\ndXJvcGUgYW5kIGxhdGVyIHRoZSB3b3JsZC4KCkhpcyBtYWpvciB3b3JrLCB0\\naGUgR3V0ZW5iZXJnIEJpYmxlIChhbHNvIGtub3duIGFzIHRoZSA0Mi1saW5l\\nIEJpYmxlKSwgaGFzIGJlZW4gYWNjbGFpbWVkIGZvciBpdHMgaGlnaCBhZXN0\\naGV0aWMgYW5kIHRlY2huaWNhbCBxdWFsaXR5LgoKIyMgUHJpbnRpbmcgUHJl\\nc3MKCkFyb3VuZCAxNDM5LCBHdXRlbmJlcmcgd2FzIGludm9sdmVkIGluIGEg\\nZmluYW5jaWFsIG1pc2FkdmVudHVyZSBtYWtpbmcgcG9saXNoZWQgbWV0YWwg\\nbWlycm9ycyAod2hpY2ggd2VyZSBiZWxpZXZlZCB0byBjYXB0dXJlIGhvbHkg\\nbGlnaHQgZnJvbSByZWxpZ2lvdXMgcmVsaWNzKSBmb3Igc2FsZSB0byBwaWxn\\ncmltcyB0byBBYWNoZW46IGluIDE0MzkgdGhlIGNpdHkgd2FzIHBsYW5uaW5n\\nIHRvIGV4aGliaXQgaXRzIGNvbGxlY3Rpb24gb2YgcmVsaWNzIGZyb20gRW1w\\nZXJvciBDaGFybGVtYWduZSBidXQgdGhlIGV2ZW50IHdhcyBkZWxheWVkIGJ5\\nIG9uZSB5ZWFyIGR1ZSB0byBhIHNldmVyZSBmbG9vZCBhbmQgdGhlIGNhcGl0\\nYWwgYWxyZWFkeSBzcGVudCBjb3VsZCBub3QgYmUgcmVwYWlkLiBXaGVuIHRo\\nZSBxdWVzdGlvbiBvZiBzYXRpc2Z5aW5nIHRoZSBpbnZlc3RvcnMgY2FtZSB1\\ncCwgR3V0ZW5iZXJnIGlzIHNhaWQgdG8gaGF2ZSBwcm9taXNlZCB0byBzaGFy\\nZSBhIOKAnHNlY3JldOKAnS4gSXQgaGFzIGJlZW4gd2lkZWx5IHNwZWN1bGF0\\nZWQgdGhhdCB0aGlzIHNlY3JldCBtYXkgaGF2ZSBiZWVuIHRoZSBpZGVhIG9m\\nIHByaW50aW5nIHdpdGggbW92YWJsZSB0eXBlLiBBbHNvIGFyb3VuZCAxNDM5\\n4oCTMTQ0MCwgdGhlIER1dGNoIExhdXJlbnMgSmFuc3pvb24gQ29zdGVyIGNh\\nbWUgdXAgd2l0aCB0aGUgaWRlYSBvZiBwcmludGluZy4gTGVnZW5kIGhhcyBp\\ndCB0aGF0IHRoZSBpZGVhIGNhbWUgdG8gaGltIOKAnGxpa2UgYSByYXkgb2Yg\\nbGlnaHTigJ0uCgo8ZmlndXJlIGNsYXNzPSJmbG9hdC1sZWZ0IiBzdHlsZT0i\\nd2lkdGg6IDI0MHB4Ij4KCTxpbWcgc3JjPSIvbWVkaWEvcHJpbnRpbmctcHJl\\nc3MuanBnIiBhbHQ9IkVhcmx5IFByaW50aW5nIFByZXNzIj4KCTxmaWdjYXB0\\naW9uPkVhcmx5IHdvb2RlbiBwcmludGluZyBwcmVzcyBhcyBkZXBpY3RlZCBp\\nbiAxNTY4LjwvZmlnY2FwdGlvbj4KPC9maWd1cmU+CgpVbnRpbCBhdCBsZWFz\\ndCAxNDQ0IGhlIGxpdmVkIGluIFN0cmFzYm91cmcsIG1vc3QgbGlrZWx5IGlu\\nIHRoZSBTdC4gQXJib2dhc3QgcGFyaXNoLiBJdCB3YXMgaW4gU3RyYXNib3Vy\\nZyBpbiAxNDQwIHRoYXQgR3V0ZW5iZXJnIGlzIHNhaWQgdG8gaGF2ZSBwZXJm\\nZWN0ZWQgYW5kIHVudmVpbGVkIHRoZSBzZWNyZXQgb2YgcHJpbnRpbmcgYmFz\\nZWQgb24gaGlzIHJlc2VhcmNoLCBteXN0ZXJpb3VzbHkgZW50aXRsZWQgS3Vu\\nc3QgdW5kIEF2ZW50dXIgKGFydCBhbmQgZW50ZXJwcmlzZSkuIEl0IGlzIG5v\\ndCBjbGVhciB3aGF0IHdvcmsgaGUgd2FzIGVuZ2FnZWQgaW4sIG9yIHdoZXRo\\nZXIgc29tZSBlYXJseSB0cmlhbHMgd2l0aCBwcmludGluZyBmcm9tIG1vdmFi\\nbGUgdHlwZSBtYXkgaGF2ZSBiZWVuIGNvbmR1Y3RlZCB0aGVyZS4gQWZ0ZXIg\\ndGhpcywgdGhlcmUgaXMgYSBnYXAgb2YgZm91ciB5ZWFycyBpbiB0aGUgcmVj\\nb3JkLiBJbiAxNDQ4LCBoZSB3YXMgYmFjayBpbiBNYWlueiwgd2hlcmUgaGUg\\ndG9vayBvdXQgYSBsb2FuIGZyb20gaGlzIGJyb3RoZXItaW4tbGF3IEFybm9s\\nZCBHZWx0aHVzLCBxdWl0ZSBwb3NzaWJseSBmb3IgYSBwcmludGluZyBwcmVz\\ncyBvciByZWxhdGVkIHBhcmFwaGVybmFsaWEuIEJ5IHRoaXMgZGF0ZSwgR3V0\\nZW5iZXJnIG1heSBoYXZlIGJlZW4gZmFtaWxpYXIgd2l0aCBpbnRhZ2xpbyBw\\ncmludGluZzsgaXQgaXMgY2xhaW1lZCB0aGF0IGhlIGhhZCB3b3JrZWQgb24g\\nY29wcGVyIGVuZ3JhdmluZ3Mgd2l0aCBhbiBhcnRpc3Qga25vd24gYXMgdGhl\\nIE1hc3RlciBvZiBQbGF5aW5nIENhcmRzLgoKQnkgMTQ1MCwgdGhlIHByZXNz\\nIHdhcyBpbiBvcGVyYXRpb24sIGFuZCBhIEdlcm1hbiBwb2VtIGhhZCBiZWVu\\nIHByaW50ZWQsIHBvc3NpYmx5IHRoZSBmaXJzdCBpdGVtIHRvIGJlIHByaW50\\nZWQgdGhlcmUuIEd1dGVuYmVyZyB3YXMgYWJsZSB0byBjb252aW5jZSB0aGUg\\nd2VhbHRoeSBtb25leWxlbmRlciBKb2hhbm4gRnVzdCBmb3IgYSBsb2FuIG9m\\nIDgwMCBndWlsZGVycy4gUGV0ZXIgU2Now7ZmZmVyLCB3aG8gYmVjYW1lIEZ1\\nc3TigJlzIHNvbi1pbi1sYXcsIGFsc28gam9pbmVkIHRoZSBlbnRlcnByaXNl\\nLiBTY2jDtmZmZXIgaGFkIHdvcmtlZCBhcyBhIHNjcmliZSBpbiBQYXJpcyBh\\nbmQgaXMgYmVsaWV2ZWQgdG8gaGF2ZSBkZXNpZ25lZCBzb21lIG9mIHRoZSBm\\naXJzdCB0eXBlZmFjZXMuCgo8ZmlndXJlPgoJPGJsb2NrcXVvdGU+CgkJPHA+\\nQWxsIHRoYXQgaGFzIGJlZW4gd3JpdHRlbiB0byBtZSBhYm91dCB0aGF0IG1h\\ncnZlbG91cyBtYW4gc2VlbiBhdCBGcmFua2Z1cnQgaXMgdHJ1ZS4gSSBoYXZl\\nIG5vdCBzZWVuIGNvbXBsZXRlIEJpYmxlcyBidXQgb25seSBhIG51bWJlciBv\\nZiBxdWlyZXMgb2YgdmFyaW91cyBib29rcyBvZiB0aGUgQmlibGUuIFRoZSBz\\nY3JpcHQgd2FzIHZlcnkgbmVhdCBhbmQgbGVnaWJsZSwgbm90IGF0IGFsbCBk\\naWZmaWN1bHQgdG8gZm9sbG934oCUeW91ciBncmFjZSB3b3VsZCBiZSBhYmxl\\nIHRvIHJlYWQgaXQgd2l0aG91dCBlZmZvcnQsIGFuZCBpbmRlZWQgd2l0aG91\\ndCBnbGFzc2VzLjwvcD4KCQk8Zm9vdGVyPgoJCQk8Y2l0ZT7igJRGdXR1cmUg\\ncG9wZSBQaXVzIElJIGluIGEgbGV0dGVyIHRvIENhcmRpbmFsIENhcnZhamFs\\nLCBNYXJjaCAxNDU1PC9jaXRlPgoJCTwvZm9vdGVyPgoJPC9ibG9ja3F1b3Rl\\nPgo8L2ZpZ3VyZT4KCkd1dGVuYmVyZydzIHdvcmtzaG9wIHdhcyBzZXQgdXAg\\nYXQgSG9mIEh1bWJyZWNodCwgYSBwcm9wZXJ0eSBiZWxvbmdpbmcgdG8gYSBk\\naXN0YW50IHJlbGF0aXZlLiBJdCBpcyBub3QgY2xlYXIgd2hlbiBHdXRlbmJl\\ncmcgY29uY2VpdmVkIHRoZSBCaWJsZSBwcm9qZWN0LCBidXQgZm9yIHRoaXMg\\naGUgYm9ycm93ZWQgYW5vdGhlciA4MDAgZ3VpbGRlcnMgZnJvbSBGdXN0LCBh\\nbmQgd29yayBjb21tZW5jZWQgaW4gMTQ1Mi4gQXQgdGhlIHNhbWUgdGltZSwg\\ndGhlIHByZXNzIHdhcyBhbHNvIHByaW50aW5nIG90aGVyLCBtb3JlIGx1Y3Jh\\ndGl2ZSB0ZXh0cyAocG9zc2libHkgTGF0aW4gZ3JhbW1hcnMpLiBUaGVyZSBp\\ncyBhbHNvIHNvbWUgc3BlY3VsYXRpb24gdGhhdCB0aGVyZSBtYXkgaGF2ZSBi\\nZWVuIHR3byBwcmVzc2VzLCBvbmUgZm9yIHRoZSBwZWRlc3RyaWFuIHRleHRz\\nLCBhbmQgb25lIGZvciB0aGUgQmlibGUuIE9uZSBvZiB0aGUgcHJvZml0LW1h\\na2luZyBlbnRlcnByaXNlcyBvZiB0aGUgbmV3IHByZXNzIHdhcyB0aGUgcHJp\\nbnRpbmcgb2YgdGhvdXNhbmRzIG9mIGluZHVsZ2VuY2VzIGZvciB0aGUgY2h1\\ncmNoLCBkb2N1bWVudGVkIGZyb20gMTQ1NOKAkzU1LgoKSW4gMTQ1NSBHdXRl\\nbmJlcmcgY29tcGxldGVkIGhpcyA0Mi1saW5lIEJpYmxlLCBrbm93biBhcyB0\\naGUgR3V0ZW5iZXJnIEJpYmxlLiBBYm91dCAxODAgY29waWVzIHdlcmUgcHJp\\nbnRlZCwgbW9zdCBvbiBwYXBlciBhbmQgc29tZSBvbiB2ZWxsdW0uCgojIyBD\\nb3VydCBDYXNlCgpTb21lIHRpbWUgaW4gMTQ1NiwgdGhlcmUgd2FzIGEgZGlz\\ncHV0ZSBiZXR3ZWVuIEd1dGVuYmVyZyBhbmQgRnVzdCwgYW5kIEZ1c3QgZGVt\\nYW5kZWQgaGlzIG1vbmV5IGJhY2ssIGFjY3VzaW5nIEd1dGVuYmVyZyBvZiBt\\naXN1c2luZyB0aGUgZnVuZHMuIE1lYW53aGlsZSB0aGUgZXhwZW5zZXMgb2Yg\\ndGhlIEJpYmxlIHByb2plY3QgaGFkIHByb2xpZmVyYXRlZCwgYW5kIEd1dGVu\\nYmVyZydzIGRlYnQgbm93IGV4Y2VlZGVkIDIwLDAwMCBndWlsZGVycy4gRnVz\\ndCBzdWVkIGF0IHRoZSBhcmNoYmlzaG9wJ3MgY291cnQuIEEgTm92ZW1iZXIg\\nMTQ1NSBsZWdhbCBkb2N1bWVudCByZWNvcmRzIHRoYXQgdGhlcmUgd2FzIGEg\\ncGFydG5lcnNoaXAgZm9yIGEgInByb2plY3Qgb2YgdGhlIGJvb2tzLCIgdGhl\\nIGZ1bmRzIGZvciB3aGljaCBHdXRlbmJlcmcgaGFkIHVzZWQgZm9yIG90aGVy\\nIHB1cnBvc2VzLCBhY2NvcmRpbmcgdG8gRnVzdC4gVGhlIGNvdXJ0IGRlY2lk\\nZWQgaW4gZmF2b3Igb2YgRnVzdCwgZ2l2aW5nIGhpbSBjb250cm9sIG92ZXIg\\ndGhlIEJpYmxlIHByaW50aW5nIHdvcmtzaG9wIGFuZCBoYWxmIG9mIGFsbCBw\\ncmludGVkIEJpYmxlcy4KClRodXMgR3V0ZW5iZXJnIHdhcyBlZmZlY3RpdmVs\\neSBiYW5rcnVwdCwgYnV0IGl0IGFwcGVhcnMgaGUgcmV0YWluZWQgKG9yIHJl\\nLXN0YXJ0ZWQpIGEgc21hbGwgcHJpbnRpbmcgc2hvcCwgYW5kIHBhcnRpY2lw\\nYXRlZCBpbiB0aGUgcHJpbnRpbmcgb2YgYSBCaWJsZSBpbiB0aGUgdG93biBv\\nZiBCYW1iZXJnIGFyb3VuZCAxNDU5LCBmb3Igd2hpY2ggaGUgc2VlbXMgYXQg\\nbGVhc3QgdG8gaGF2ZSBzdXBwbGllZCB0aGUgdHlwZS4gQnV0IHNpbmNlIGhp\\ncyBwcmludGVkIGJvb2tzIG5ldmVyIGNhcnJ5IGhpcyBuYW1lIG9yIGEgZGF0\\nZSwgaXQgaXMgZGlmZmljdWx0IHRvIGJlIGNlcnRhaW4sIGFuZCB0aGVyZSBp\\ncyBjb25zZXF1ZW50bHkgYSBjb25zaWRlcmFibGUgc2Nob2xhcmx5IGRlYmF0\\nZSBvbiB0aGlzIHN1YmplY3QuIEl0IGlzIGFsc28gcG9zc2libGUgdGhhdCB0\\naGUgbGFyZ2UgQ2F0aG9saWNvbiBkaWN0aW9uYXJ5LCAzMDAgY29waWVzIG9m\\nIDc1NCBwYWdlcywgcHJpbnRlZCBpbiBNYWlueiBpbiAxNDYwLCBtYXkgaGF2\\nZSBiZWVuIGV4ZWN1dGVkIGluIGhpcyB3b3Jrc2hvcC4KCk1lYW53aGlsZSwg\\ndGhlIEZ1c3TigJNTY2jDtmZmZXIgc2hvcCB3YXMgdGhlIGZpcnN0IGluIEV1\\ncm9wZSB0byBicmluZyBvdXQgYSBib29rIHdpdGggdGhlIHByaW50ZXIncyBu\\nYW1lIGFuZCBkYXRlLCB0aGUgTWFpbnogUHNhbHRlciBvZiBBdWd1c3QgMTQ1\\nNywgYW5kIHdoaWxlIHByb3VkbHkgcHJvY2xhaW1pbmcgdGhlIG1lY2hhbmlj\\nYWwgcHJvY2VzcyBieSB3aGljaCBpdCBoYWQgYmVlbiBwcm9kdWNlZCwgaXQg\\nbWFkZSBubyBtZW50aW9uIG9mIEd1dGVuYmVyZy4KCiMjIExhdGVyIExpZmUK\\nCkluIDE0NjIsIGR1cmluZyBhIGNvbmZsaWN0IGJldHdlZW4gdHdvIGFyY2hi\\naXNob3BzLCBNYWlueiB3YXMgc2Fja2VkIGJ5IGFyY2hiaXNob3AgQWRvbHBo\\nIHZvbiBOYXNzYXUsIGFuZCBHdXRlbmJlcmcgd2FzIGV4aWxlZC4gQW4gb2xk\\nIG1hbiBieSBub3csIGhlIG1vdmVkIHRvIEVsdHZpbGxlIHdoZXJlIGhlIG1h\\neSBoYXZlIGluaXRpYXRlZCBhbmQgc3VwZXJ2aXNlZCBhIG5ldyBwcmludGlu\\nZyBwcmVzcyBiZWxvbmdpbmcgdG8gdGhlIGJyb3RoZXJzIEJlY2h0ZXJtw7xu\\nemUuCgpJbiBKYW51YXJ5IDE0NjUsIEd1dGVuYmVyZydzIGFjaGlldmVtZW50\\ncyB3ZXJlIHJlY29nbml6ZWQgYW5kIGhlIHdhcyBnaXZlbiB0aGUgdGl0bGUg\\nSG9mbWFubiAoZ2VudGxlbWFuIG9mIHRoZSBjb3VydCkgYnkgdm9uIE5hc3Nh\\ndS4gVGhpcyBob25vciBpbmNsdWRlZCBhIHN0aXBlbmQsIGFuIGFubnVhbCBj\\nb3VydCBvdXRmaXQsIGFzIHdlbGwgYXMgMiwxODAgbGl0cmVzIG9mIGdyYWlu\\nIGFuZCAyLDAwMCBsaXRyZXMgb2Ygd2luZSB0YXgtZnJlZS4gSXQgaXMgYmVs\\naWV2ZWQgaGUgbWF5IGhhdmUgbW92ZWQgYmFjayB0byBNYWlueiBhcm91bmQg\\ndGhpcyB0aW1lLCBidXQgdGhpcyBpcyBub3QgY2VydGFpbi4KCioqKgoKR3V0\\nZW5iZXJnIGRpZWQgaW4gMTQ2OCBhbmQgd2FzIGJ1cmllZCBpbiB0aGUgRnJh\\nbmNpc2NhbiBjaHVyY2ggYXQgTWFpbnosIGhpcyBjb250cmlidXRpb25zIGxh\\ncmdlbHkgdW5rbm93bi4gVGhpcyBjaHVyY2ggYW5kIHRoZSBjZW1ldGVyeSB3\\nZXJlIGxhdGVyIGRlc3Ryb3llZCwgYW5kIEd1dGVuYmVyZydzIGdyYXZlIGlz\\nIG5vdyBsb3N0LgoKSW4gMTUwNCwgaGUgd2FzIG1lbnRpb25lZCBhcyB0aGUg\\naW52ZW50b3Igb2YgdHlwb2dyYXBoeSBpbiBhIGJvb2sgYnkgUHJvZmVzc29y\\nIEl2byBXaXR0aWcuIEl0IHdhcyBub3QgdW50aWwgMTU2NyB0aGF0IHRoZSBm\\naXJzdCBwb3J0cmFpdCBvZiBHdXRlbmJlcmcsIGFsbW9zdCBjZXJ0YWlubHkg\\nYW4gaW1hZ2luYXJ5IHJlY29uc3RydWN0aW9uLCBhcHBlYXJlZCBpbiBIZWlu\\ncmljaCBQYW50YWxlb24ncyBiaW9ncmFwaHkgb2YgZmFtb3VzIEdlcm1hbnMu\\nCgojIyBQcmludGluZyBNZXRob2QgV2l0aCBNb3ZhYmxlIFR5cGUKCkd1dGVu\\nYmVyZydzIGVhcmx5IHByaW50aW5nIHByb2Nlc3MsIGFuZCB3aGF0IHRlc3Rz\\nIGhlIG1heSBoYXZlIG1hZGUgd2l0aCBtb3ZhYmxlIHR5cGUsIGFyZSBub3Qg\\na25vd24gaW4gZ3JlYXQgZGV0YWlsLiBIaXMgbGF0ZXIgQmlibGVzIHdlcmUg\\ncHJpbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIGhhdmUgcmVxdWlyZWQgbGFy\\nZ2UgcXVhbnRpdGllcyBvZiB0eXBlLCBzb21lIGVzdGltYXRlcyBzdWdnZXN0\\naW5nIGFzIG1hbnkgYXMgMTAwLDAwMCBpbmRpdmlkdWFsIHNvcnRzLiBTZXR0\\naW5nIGVhY2ggcGFnZSB3b3VsZCB0YWtlLCBwZXJoYXBzLCBoYWxmIGEgZGF5\\nLCBhbmQgY29uc2lkZXJpbmcgYWxsIHRoZSB3b3JrIGluIGxvYWRpbmcgdGhl\\nIHByZXNzLCBpbmtpbmcgdGhlIHR5cGUsIHB1bGxpbmcgdGhlIGltcHJlc3Np\\nb25zLCBoYW5naW5nIHVwIHRoZSBzaGVldHMsIGRpc3RyaWJ1dGluZyB0aGUg\\ndHlwZSwgZXRjLiwgaXQgaXMgdGhvdWdodCB0aGF0IHRoZSBHdXRlbmJlcmfi\\ngJNGdXN0IHNob3AgbWlnaHQgaGF2ZSBlbXBsb3llZCBhcyBtYW55IGFzIDI1\\nIGNyYWZ0c21lbi4KCiFbTW92YWJsZSBtZXRhbCB0eXBlLCBhbmQgY29tcG9z\\naW5nIHN0aWNrLCBkZXNjZW5kZWQgZnJvbSBHdXRlbmJlcmcncyBwcmVzcy4g\\nUGhvdG8gYnkgV2lsbGkgSGVpZGVsYmFjaC4gTGljZW5zZWQgdW5kZXIgQ0Mg\\nQlkgMi41XSgvbWVkaWEvbW92YWJsZS10eXBlLmpwZykKCipNb3ZhYmxlIG1l\\ndGFsIHR5cGUsIGFuZCBjb21wb3Npbmcgc3RpY2ssIGRlc2NlbmRlZCBmcm9t\\nIEd1dGVuYmVyZydzIHByZXNzLiBQaG90byBieSBXaWxsaSBIZWlkZWxiYWNo\\nLiBMaWNlbnNlZCB1bmRlciBDQyBCWSAyLjUqCgpHdXRlbmJlcmcncyB0ZWNo\\nbmlxdWUgb2YgbWFraW5nIG1vdmFibGUgdHlwZSByZW1haW5zIHVuY2xlYXIu\\nIEluIHRoZSBmb2xsb3dpbmcgZGVjYWRlcywgcHVuY2hlcyBhbmQgY29wcGVy\\nIG1hdHJpY2VzIGJlY2FtZSBzdGFuZGFyZGl6ZWQgaW4gdGhlIHJhcGlkbHkg\\nZGlzc2VtaW5hdGluZyBwcmludGluZyBwcmVzc2VzIGFjcm9zcyBFdXJvcGUu\\nIFdoZXRoZXIgR3V0ZW5iZXJnIHVzZWQgdGhpcyBzb3BoaXN0aWNhdGVkIHRl\\nY2huaXF1ZSBvciBhIHNvbWV3aGF0IHByaW1pdGl2ZSB2ZXJzaW9uIGhhcyBi\\nZWVuIHRoZSBzdWJqZWN0IG9mIGNvbnNpZGVyYWJsZSBkZWJhdGUuCgpJbiB0\\naGUgc3RhbmRhcmQgcHJvY2VzcyBvZiBtYWtpbmcgdHlwZSwgYSBoYXJkIG1l\\ndGFsIHB1bmNoIChtYWRlIGJ5IHB1bmNoY3V0dGluZywgd2l0aCB0aGUgbGV0\\ndGVyIGNhcnZlZCBiYWNrIHRvIGZyb250KSBpcyBoYW1tZXJlZCBpbnRvIGEg\\nc29mdGVyIGNvcHBlciBiYXIsIGNyZWF0aW5nIGEgbWF0cml4LiBUaGlzIGlz\\nIHRoZW4gcGxhY2VkIGludG8gYSBoYW5kLWhlbGQgbW91bGQgYW5kIGEgcGll\\nY2Ugb2YgdHlwZSwgb3IgInNvcnQiLCBpcyBjYXN0IGJ5IGZpbGxpbmcgdGhl\\nIG1vdWxkIHdpdGggbW9sdGVuIHR5cGUtbWV0YWw7IHRoaXMgY29vbHMgYWxt\\nb3N0IGF0IG9uY2UsIGFuZCB0aGUgcmVzdWx0aW5nIHBpZWNlIG9mIHR5cGUg\\nY2FuIGJlIHJlbW92ZWQgZnJvbSB0aGUgbW91bGQuIFRoZSBtYXRyaXggY2Fu\\nIGJlIHJldXNlZCB0byBjcmVhdGUgaHVuZHJlZHMsIG9yIHRob3VzYW5kcywg\\nb2YgaWRlbnRpY2FsIHNvcnRzIHNvIHRoYXQgdGhlIHNhbWUgY2hhcmFjdGVy\\nIGFwcGVhcmluZyBhbnl3aGVyZSB3aXRoaW4gdGhlIGJvb2sgd2lsbCBhcHBl\\nYXIgdmVyeSB1bmlmb3JtLCBnaXZpbmcgcmlzZSwgb3ZlciB0aW1lLCB0byB0\\naGUgZGV2ZWxvcG1lbnQgb2YgZGlzdGluY3Qgc3R5bGVzIG9mIHR5cGVmYWNl\\ncyBvciBmb250cy4gQWZ0ZXIgY2FzdGluZywgdGhlIHNvcnRzIGFyZSBhcnJh\\nbmdlZCBpbnRvIHR5cGUtY2FzZXMsIGFuZCB1c2VkIHRvIG1ha2UgdXAgcGFn\\nZXMgd2hpY2ggYXJlIGlua2VkIGFuZCBwcmludGVkLCBhIHByb2NlZHVyZSB3\\naGljaCBjYW4gYmUgcmVwZWF0ZWQgaHVuZHJlZHMsIG9yIHRob3VzYW5kcywg\\nb2YgdGltZXMuIFRoZSBzb3J0cyBjYW4gYmUgcmV1c2VkIGluIGFueSBjb21i\\naW5hdGlvbiwgZWFybmluZyB0aGUgcHJvY2VzcyB0aGUgbmFtZSBvZiDigJxt\\nb3ZhYmxlIHR5cGXigJ0uCgpUaGUgaW52ZW50aW9uIG9mIHRoZSBtYWtpbmcg\\nb2YgdHlwZXMgd2l0aCBwdW5jaCwgbWF0cml4IGFuZCBtb2xkIGhhcyBiZWVu\\nIHdpZGVseSBhdHRyaWJ1dGVkIHRvIEd1dGVuYmVyZy4gSG93ZXZlciwgcmVj\\nZW50IGV2aWRlbmNlIHN1Z2dlc3RzIHRoYXQgR3V0ZW5iZXJnJ3MgcHJvY2Vz\\ncyB3YXMgc29tZXdoYXQgZGlmZmVyZW50LiBJZiBoZSB1c2VkIHRoZSBwdW5j\\naCBhbmQgbWF0cml4IGFwcHJvYWNoLCBhbGwgaGlzIGxldHRlcnMgc2hvdWxk\\nIGhhdmUgYmVlbiBuZWFybHkgaWRlbnRpY2FsLCB3aXRoIHNvbWUgdmFyaWF0\\naW9ucyBkdWUgdG8gbWlzY2FzdGluZyBhbmQgaW5raW5nLiBIb3dldmVyLCB0\\naGUgdHlwZSB1c2VkIGluIEd1dGVuYmVyZydzIGVhcmxpZXN0IHdvcmsgc2hv\\nd3Mgb3RoZXIgdmFyaWF0aW9ucy4KCjxmaWd1cmU+Cgk8YmxvY2txdW90ZT4K\\nCQk8cD5JdCBpcyBhIHByZXNzLCBjZXJ0YWlubHksIGJ1dCBhIHByZXNzIGZy\\nb20gd2hpY2ggc2hhbGwgZmxvdyBpbiBpbmV4aGF1c3RpYmxlIHN0cmVhbXPi\\ngKYgVGhyb3VnaCBpdCwgZ29kIHdpbGwgc3ByZWFkIGhpcyB3b3JkLjwvcD4K\\nCQk8Zm9vdGVyPgoJCQk8Y2l0ZT7igJRKb2hhbm5lcyBHdXRlbmJlcmc8L2Np\\ndGU+CgkJPC9mb290ZXI+Cgk8L2Jsb2NrcXVvdGU+CjwvZmlndXJlPgoKSW4g\\nMjAwMSwgdGhlIHBoeXNpY2lzdCBCbGFpc2UgQWfDvGVyYSB5IEFyY2FzIGFu\\nZCBQcmluY2V0b24gbGlicmFyaWFuIFBhdWwgTmVlZGhhbSwgdXNlZCBkaWdp\\ndGFsIHNjYW5zIG9mIGEgUGFwYWwgYnVsbCBpbiB0aGUgU2NoZWlkZSBMaWJy\\nYXJ5LCBQcmluY2V0b24sIHRvIGNhcmVmdWxseSBjb21wYXJlIHRoZSBzYW1l\\nIGxldHRlcnMgKHR5cGVzKSBhcHBlYXJpbmcgaW4gZGlmZmVyZW50IHBhcnRz\\nIG9mIHRoZSBwcmludGVkIHRleHQuIFRoZSBpcnJlZ3VsYXJpdGllcyBpbiBH\\ndXRlbmJlcmcncyB0eXBlLCBwYXJ0aWN1bGFybHkgaW4gc2ltcGxlIGNoYXJh\\nY3RlcnMgc3VjaCBhcyB0aGUgaHlwaGVuLCBzdWdnZXN0ZWQgdGhhdCB0aGUg\\ndmFyaWF0aW9ucyBjb3VsZCBub3QgaGF2ZSBjb21lIGZyb20gZWl0aGVyIGlu\\nayBzbWVhciBvciBmcm9tIHdlYXIgYW5kIGRhbWFnZSBvbiB0aGUgcGllY2Vz\\nIG9mIG1ldGFsIG9uIHRoZSB0eXBlcyB0aGVtc2VsdmVzLiBXaGlsZSBzb21l\\nIGlkZW50aWNhbCB0eXBlcyBhcmUgY2xlYXJseSB1c2VkIG9uIG90aGVyIHBh\\nZ2VzLCBvdGhlciB2YXJpYXRpb25zLCBzdWJqZWN0ZWQgdG8gZGV0YWlsZWQg\\naW1hZ2UgYW5hbHlzaXMsIHN1Z2dlc3RlZCB0aGF0IHRoZXkgY291bGQgbm90\\nIGhhdmUgYmVlbiBwcm9kdWNlZCBmcm9tIHRoZSBzYW1lIG1hdHJpeC4gVHJh\\nbnNtaXR0ZWQgbGlnaHQgcGljdHVyZXMgb2YgdGhlIHBhZ2UgYWxzbyBhcHBl\\nYXJlZCB0byByZXZlYWwgc3Vic3RydWN0dXJlcyBpbiB0aGUgdHlwZSB0aGF0\\nIGNvdWxkIG5vdCBhcmlzZSBmcm9tIHRyYWRpdGlvbmFsIHB1bmNoY3V0dGlu\\nZyB0ZWNobmlxdWVzLiBUaGV5IGh5cG90aGVzaXplZCB0aGF0IHRoZSBtZXRo\\nb2QgbWF5IGhhdmUgaW52b2x2ZWQgaW1wcmVzc2luZyBzaW1wbGUgc2hhcGVz\\nIHRvIGNyZWF0ZSBhbHBoYWJldHMgaW4g4oCcY3VuZWlmb3Jt4oCdIHN0eWxl\\nIGluIGEgbWF0cml4IG1hZGUgb2Ygc29tZSBzb2Z0IG1hdGVyaWFsLCBwZXJo\\nYXBzIHNhbmQuIENhc3RpbmcgdGhlIHR5cGUgd291bGQgZGVzdHJveSB0aGUg\\nbW91bGQsIGFuZCB0aGUgbWF0cml4IHdvdWxkIG5lZWQgdG8gYmUgcmVjcmVh\\ndGVkIHRvIG1ha2UgZWFjaCBhZGRpdGlvbmFsIHNvcnQuIFRoaXMgY291bGQg\\nZXhwbGFpbiB0aGUgdmFyaWF0aW9ucyBpbiB0aGUgdHlwZSwgYXMgd2VsbCBh\\ncyB0aGUgc3Vic3RydWN0dXJlcyBvYnNlcnZlZCBpbiB0aGUgcHJpbnRlZCBp\\nbWFnZXMuCgpUaHVzLCB0aGV5IGZlZWwgdGhhdCDigJx0aGUgZGVjaXNpdmUg\\nZmFjdG9yIGZvciB0aGUgYmlydGggb2YgdHlwb2dyYXBoeeKAnSwgdGhlIHVz\\nZSBvZiByZXVzYWJsZSBtb3VsZHMgZm9yIGNhc3RpbmcgdHlwZSwgbWlnaHQg\\naGF2ZSBiZWVuIGEgbW9yZSBwcm9ncmVzc2l2ZSBwcm9jZXNzIHRoYW4gd2Fz\\nIHByZXZpb3VzbHkgdGhvdWdodC4gVGhleSBzdWdnZXN0IHRoYXQgdGhlIGFk\\nZGl0aW9uYWwgc3RlcCBvZiB1c2luZyB0aGUgcHVuY2ggdG8gY3JlYXRlIGEg\\nbW91bGQgdGhhdCBjb3VsZCBiZSByZXVzZWQgbWFueSB0aW1lcyB3YXMgbm90\\nIHRha2VuIHVudGlsIHR3ZW50eSB5ZWFycyBsYXRlciwgaW4gdGhlIDE0NzBz\\nLiBPdGhlcnMgaGF2ZSBub3QgYWNjZXB0ZWQgc29tZSBvciBhbGwgb2YgdGhl\\naXIgc3VnZ2VzdGlvbnMsIGFuZCBoYXZlIGludGVycHJldGVkIHRoZSBldmlk\\nZW5jZSBpbiBvdGhlciB3YXlzLCBhbmQgdGhlIHRydXRoIG9mIHRoZSBtYXR0\\nZXIgcmVtYWlucyB2ZXJ5IHVuY2VydGFpbi4KCkEgMTU2OCBoaXN0b3J5IGJ5\\nIEhhZHJpYW51cyBKdW5pdXMgb2YgSG9sbGFuZCBjbGFpbXMgdGhhdCB0aGUg\\nYmFzaWMgaWRlYSBvZiB0aGUgbW92YWJsZSB0eXBlIGNhbWUgdG8gR3V0ZW5i\\nZXJnIGZyb20gTGF1cmVucyBKYW5zem9vbiBDb3N0ZXIgdmlhIEZ1c3QsIHdo\\nbyB3YXMgYXBwcmVudGljZWQgdG8gQ29zdGVyIGluIHRoZSAxNDMwcyBhbmQg\\nbWF5IGhhdmUgYnJvdWdodCBzb21lIG9mIGhpcyBlcXVpcG1lbnQgZnJvbSBI\\nYWFybGVtIHRvIE1haW56LiBXaGlsZSBDb3N0ZXIgYXBwZWFycyB0byBoYXZl\\nIGV4cGVyaW1lbnRlZCB3aXRoIG1vdWxkcyBhbmQgY2FzdGFibGUgbWV0YWwg\\ndHlwZSwgdGhlcmUgaXMgbm8gZXZpZGVuY2UgdGhhdCBoZSBoYWQgYWN0dWFs\\nbHkgcHJpbnRlZCBhbnl0aGluZyB3aXRoIHRoaXMgdGVjaG5vbG9neS4gSGUg\\nd2FzIGFuIGludmVudG9yIGFuZCBhIGdvbGRzbWl0aC4gSG93ZXZlciwgdGhl\\ncmUgaXMgb25lIGluZGlyZWN0IHN1cHBvcnRlciBvZiB0aGUgY2xhaW0gdGhh\\ndCBDb3N0ZXIgbWlnaHQgYmUgdGhlIGludmVudG9yLiBUaGUgYXV0aG9yIG9m\\nIHRoZSBDb2xvZ25lIENocm9uaWNsZSBvZiAxNDk5IHF1b3RlcyBVbHJpY2gg\\nWmVsbCwgdGhlIGZpcnN0IHByaW50ZXIgb2YgQ29sb2duZSwgdGhhdCBwcmlu\\ndGluZyB3YXMgcGVyZm9ybWVkIGluIE1haW56IGluIDE0NTAsIGJ1dCB0aGF0\\nIHNvbWUgdHlwZSBvZiBwcmludGluZyBvZiBsb3dlciBxdWFsaXR5IGhhZCBw\\ncmV2aW91c2x5IG9jY3VycmVkIGluIHRoZSBOZXRoZXJsYW5kcy4gSG93ZXZl\\nciwgdGhlIGNocm9uaWNsZSBkb2VzIG5vdCBtZW50aW9uIHRoZSBuYW1lIG9m\\nIENvc3Rlciwgd2hpbGUgaXQgYWN0dWFsbHkgY3JlZGl0cyBHdXRlbmJlcmcg\\nYXMgdGhlICJmaXJzdCBpbnZlbnRvciBvZiBwcmludGluZyIgaW4gdGhlIHZl\\ncnkgc2FtZSBwYXNzYWdlIChmb2wuIDMxMikuIFRoZSBmaXJzdCBzZWN1cmVs\\neSBkYXRlZCBib29rIGJ5IER1dGNoIHByaW50ZXJzIGlzIGZyb20gMTQ3MSwg\\nYW5kIHRoZSBDb3N0ZXIgY29ubmVjdGlvbiBpcyB0b2RheSByZWdhcmRlZCBh\\ncyBhIG1lcmUgbGVnZW5kLgoKVGhlIDE5dGggY2VudHVyeSBwcmludGVyIGFu\\nZCB0eXBlZm91bmRlciBGb3VybmllciBMZSBKZXVuZSBzdWdnZXN0ZWQgdGhh\\ndCBHdXRlbmJlcmcgbWlnaHQgbm90IGhhdmUgYmVlbiB1c2luZyB0eXBlIGNh\\nc3Qgd2l0aCBhIHJldXNhYmxlIG1hdHJpeCwgYnV0IHBvc3NpYmx5IHdvb2Rl\\nbiB0eXBlcyB0aGF0IHdlcmUgY2FydmVkIGluZGl2aWR1YWxseS4gQSBzaW1p\\nbGFyIHN1Z2dlc3Rpb24gd2FzIG1hZGUgYnkgTmFzaCBpbiAyMDA0LiBUaGlz\\nIHJlbWFpbnMgcG9zc2libGUsIGFsYmVpdCBlbnRpcmVseSB1bnByb3Zlbi4K\\nCkl0IGhhcyBhbHNvIGJlZW4gcXVlc3Rpb25lZCB3aGV0aGVyIEd1dGVuYmVy\\nZyB1c2VkIG1vdmFibGUgdHlwZXMgYXQgYWxsLiBJbiAyMDA0LCBJdGFsaWFu\\nIHByb2Zlc3NvciBCcnVubyBGYWJiaWFuaSBjbGFpbWVkIHRoYXQgZXhhbWlu\\nYXRpb24gb2YgdGhlIDQyLWxpbmUgQmlibGUgcmV2ZWFsZWQgYW4gb3Zlcmxh\\ncHBpbmcgb2YgbGV0dGVycywgc3VnZ2VzdGluZyB0aGF0IEd1dGVuYmVyZyBk\\naWQgbm90IGluIGZhY3QgdXNlIG1vdmFibGUgdHlwZSAoaW5kaXZpZHVhbCBj\\nYXN0IGNoYXJhY3RlcnMpIGJ1dCByYXRoZXIgdXNlZCB3aG9sZSBwbGF0ZXMg\\nbWFkZSBmcm9tIGEgc3lzdGVtIHNvbWV3aGF0IGxpa2UgYSBtb2Rlcm4gdHlw\\nZXdyaXRlciwgd2hlcmVieSB0aGUgbGV0dGVycyB3ZXJlIHN0YW1wZWQgc3Vj\\nY2Vzc2l2ZWx5IGludG8gdGhlIHBsYXRlIGFuZCB0aGVuIHByaW50ZWQuIEhv\\nd2V2ZXIsIG1vc3Qgc3BlY2lhbGlzdHMgcmVnYXJkIHRoZSBvY2Nhc2lvbmFs\\nIG92ZXJsYXBwaW5nIG9mIHR5cGUgYXMgY2F1c2VkIGJ5IHBhcGVyIG1vdmVt\\nZW50IG92ZXIgcGllY2VzIG9mIHR5cGUgb2Ygc2xpZ2h0bHkgdW5lcXVhbCBo\\nZWlnaHQu\\n\",\"encoding\":\"base64\"}", "status": 200 }, { "method": "GET", - "url": "/.netlify/git/github/commits?path=content/posts/2016-01-12---The-Origins-of-Social-Stationery-Lettering.md&sha=master", + "url": "/.netlify/git/github/git/blobs/6d51a38aed7139d2117724b1e307657b6ff2d043", + "headers": { + "Access-Control-Allow-Credentials": "true", + "Access-Control-Allow-Origin": "http://localhost:8080", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", + "Alt-Svc": "clear", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Content-Security-Policy": "default-src 'none'", + "Content-Type": "application/json; charset=utf-8", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Server": "Netlify", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "Via": "1.1 google", + "X-Accepted-Oauth-Scopes": "", + "X-Content-Type-Options": "nosniff", + "X-Frame-Options": "deny", + "X-Github-Media-Type": "github.v3; format=json", + "X-Oauth-Scopes": "delete_repo, repo", + "X-Ratelimit-Limit": "5000", + "X-Xss-Protection": "1; mode=block", + "Age": "0", + "Connection": "keep-alive", + "Vary": "Origin,Accept,Authorization,Cookie,X-GitHub-OTP,Accept-Encoding,Accept,X-Requested-With", + "content-length": "2714" + }, + "response": "{\"sha\":\"6d51a38aed7139d2117724b1e307657b6ff2d043\",\"node_id\":\"MDQ6QmxvYjI4Njc3MTExNjo2ZDUxYTM4YWVkNzEzOWQyMTE3NzI0YjFlMzA3NjU3YjZmZjJkMDQz\",\"size\":1707,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/6d51a38aed7139d2117724b1e307657b6ff2d043\",\"content\":\"LS0tCnRpdGxlOiBQZXJmZWN0aW5nIHRoZSBBcnQgb2YgUGVyZmVjdGlvbgpk\\nYXRlOiAiMjAxNi0wOS0wMVQyMzo0NjozNy4xMjFaIgp0ZW1wbGF0ZTogInBv\\nc3QiCmRyYWZ0OiBmYWxzZQpjYXRlZ29yeTogIkRlc2lnbiBJbnNwaXJhdGlv\\nbiIKdGFnczoKICAtICJIYW5kd3JpdGluZyIKICAtICJMZWFybmluZyB0byB3\\ncml0ZSIKZGVzY3JpcHRpb246ICJRdWlzcXVlIGN1cnN1cywgbWV0dXMgdml0\\nYWUgcGhhcmV0cmEgYXVjdG9yLCBzZW0gbWFzc2EgbWF0dGlzIHNlbSwgYXQg\\naW50ZXJkdW0gbWFnbmEgYXVndWUgZWdldCBkaWFtLiBWZXN0aWJ1bHVtIGFu\\ndGUgaXBzdW0gcHJpbWlzIGluIGZhdWNpYnVzIG9yY2kgbHVjdHVzIGV0IHVs\\ndHJpY2VzIHBvc3VlcmUgY3ViaWxpYSBDdXJhZTsgTW9yYmkgbGFjaW5pYSBt\\nb2xlc3RpZSBkdWkuIFByYWVzZW50IGJsYW5kaXQgZG9sb3IuIFNlZCBub24g\\ncXVhbS4gSW4gdmVsIG1pIHNpdCBhbWV0IGF1Z3VlIGNvbmd1ZSBlbGVtZW50\\ndW0uIgpjYW5vbmljYWw6ICcnCi0tLQoKUXVpc3F1ZSBjdXJzdXMsIG1ldHVz\\nIHZpdGFlIHBoYXJldHJhIGF1Y3Rvciwgc2VtIG1hc3NhIG1hdHRpcyBzZW0s\\nIGF0IGludGVyZHVtIG1hZ25hIGF1Z3VlIGVnZXQgZGlhbS4gVmVzdGlidWx1\\nbSBhbnRlIGlwc3VtIHByaW1pcyBpbiBmYXVjaWJ1cyBvcmNpIGx1Y3R1cyBl\\ndCB1bHRyaWNlcyBwb3N1ZXJlIGN1YmlsaWEgQ3VyYWU7IE1vcmJpIGxhY2lu\\naWEgbW9sZXN0aWUgZHVpLiBQcmFlc2VudCBibGFuZGl0IGRvbG9yLiBTZWQg\\nbm9uIHF1YW0uIEluIHZlbCBtaSBzaXQgYW1ldCBhdWd1ZSBjb25ndWUgZWxl\\nbWVudHVtLgoKIVtOdWxsYSBmYXVjaWJ1cyB2ZXN0aWJ1bHVtIGVyb3MgaW4g\\ndGVtcHVzLiBWZXN0aWJ1bHVtIHRlbXBvciBpbXBlcmRpZXQgdmVsaXQgbmVj\\nIGRhcGlidXNdKC9tZWRpYS9pbWFnZS0yLmpwZykKClBlbGxlbnRlc3F1ZSBo\\nYWJpdGFudCBtb3JiaSB0cmlzdGlxdWUgc2VuZWN0dXMgZXQgbmV0dXMgZXQg\\nbWFsZXN1YWRhIGZhbWVzIGFjIHR1cnBpcyBlZ2VzdGFzLiBWZXN0aWJ1bHVt\\nIHRvcnRvciBxdWFtLCBmZXVnaWF0IHZpdGFlLCB1bHRyaWNpZXMgZWdldCwg\\ndGVtcG9yIHNpdCBhbWV0LCBhbnRlLiBEb25lYyBldSBsaWJlcm8gc2l0IGFt\\nZXQgcXVhbSBlZ2VzdGFzIHNlbXBlci4gQWVuZWFuIHVsdHJpY2llcyBtaSB2\\naXRhZSBlc3QuIE1hdXJpcyBwbGFjZXJhdCBlbGVpZmVuZCBsZW8uIFF1aXNx\\ndWUgc2l0IGFtZXQgZXN0IGV0IHNhcGllbiB1bGxhbWNvcnBlciBwaGFyZXRy\\nYS4gVmVzdGlidWx1bSBlcmF0IHdpc2ksIGNvbmRpbWVudHVtIHNlZCwgY29t\\nbW9kbyB2aXRhZSwgb3JuYXJlIHNpdCBhbWV0LCB3aXNpLiBBZW5lYW4gZmVy\\nbWVudHVtLCBlbGl0IGVnZXQgdGluY2lkdW50IGNvbmRpbWVudHVtLCBlcm9z\\nIGlwc3VtIHJ1dHJ1bSBvcmNpLCBzYWdpdHRpcyB0ZW1wdXMgbGFjdXMgZW5p\\nbSBhYyBkdWkuIERvbmVjIG5vbiBlbmltIGluIHR1cnBpcyBwdWx2aW5hciBm\\nYWNpbGlzaXMuIFV0IGZlbGlzLiAKClByYWVzZW50IGRhcGlidXMsIG5lcXVl\\nIGlkIGN1cnN1cyBmYXVjaWJ1cywgdG9ydG9yIG5lcXVlIGVnZXN0YXMgYXVn\\ndWUsIGV1IHZ1bHB1dGF0ZSBtYWduYSBlcm9zIGV1IGVyYXQuIEFsaXF1YW0g\\nZXJhdCB2b2x1dHBhdC4gTmFtIGR1aSBtaSwgdGluY2lkdW50IHF1aXMsIGFj\\nY3Vtc2FuIHBvcnR0aXRvciwgZmFjaWxpc2lzIGx1Y3R1cywgbWV0dXMu\\n\",\"encoding\":\"base64\"}", + "status": 200 + }, + { + "method": "GET", + "url": "/.netlify/git/github/commits?path=content/posts/2016-01-09---Perfecting-the-Art-of-Perfection.md&sha=master", "headers": { "Access-Control-Allow-Credentials": "true", "Access-Control-Allow-Origin": "http://localhost:8080", @@ -350,7 +320,7 @@ "Vary": "Origin,Accept,Authorization,Cookie,X-GitHub-OTP,Accept-Encoding,Accept,X-Requested-With", "content-length": "4828" }, - "response": "[\n {\n \"sha\": \"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"node_id\": \"MDY6Q29tbWl0MjU1MDc1OTQzOjJiYzNmYTM5ZDhhZGI5ZTAwOGU1Mjc5Mzg1NDMzODM5OWZjNmU0YWQ=\",\n \"commit\": {\n \"author\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2019-07-24T07:45:32Z\"\n },\n \"committer\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2019-07-24T07:45:32Z\"\n },\n \"message\": \"initial commit\",\n \"tree\": {\n \"sha\": \"3d53c60def5d9f9ad79a534dd369f758763d9dc9\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/3d53c60def5d9f9ad79a534dd369f758763d9dc9\"\n },\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"comment_count\": 0,\n \"verification\": {\n \"verified\": true,\n \"reason\": \"valid\",\n \"signature\": \"-----BEGIN PGP SIGNATURE-----\\n\\niQIzBAABCgAdFiEE8DeG71n37ZpuxjiNA05FmC/LkwQFAl04DJwACgkQA05FmC/L\\nkwQ5kg//TB2c1HvsD/r7x3CgKmR+uaEFGrv9srfA4/i/dbDSAg3+kpPXfGg0FCUw\\nETlWDpZRhFvLZzoxy5w46P1cLvpbdEXK47LWpsFYWFtCFGKmvaY5dZ/ma1J3HF5R\\n7Yll5jz8BKrWOZ6bOswP7nNteAFYfLiZxJq4ONbhxOyRJA7bFmg6Ydo2Zc27Gg54\\n6umhONf9DxuzL0z0f8qtHiz47KJTRdFS+ZL/Mq3iCE11SGHvjK0cnPq0Z6TBtazt\\nqszoR0Frxes4MsjI82+ovCP+RtpqerWeN/ciYoLENsnUb8Xbp/qdhrLoMvuFExz2\\n0f0M7zVI1Z9d4cDTQlembVneSv5sSeNtnk2e7BXLwjUNFVxB67aslVUyL41V0BMu\\nUw8+j9pNhObpicJs9O1fIkL84mtCSMWIyuCwDpSMSj2b892laBOKu/E5D+YuaHi5\\nbAJJ1/Szig0CzeI1KbIBoWDI1orpkSUU+4Fvk7qJnxP9iLJLwiNCFKfNKA1KeXmP\\nIK6/95HmKNJ8MfTEkRcgIdTe4fx2ib2hHGiaIAD0r4FgWxfC2BWK/uTUp8HtIQre\\nDILGnF1laIcJbyP7asvc8iJ06Kk8C9PsH4v20fqoyNcei7v0IJG2m9AHVDnb0t6L\\nAa1yXEHQLSGHS9Y0mogLPW/tZnV69EHRI1dzvH/1gDVlBMwM1/A=\\n=hLDv\\n-----END PGP SIGNATURE-----\",\n \"payload\": \"tree 3d53c60def5d9f9ad79a534dd369f758763d9dc9\\nauthor owner 1563954332 +0300\\ncommitter owner 1563954332 +0300\\n\\ninitial commit\\n\"\n }\n },\n \"url\": \"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"html_url\": \"https://github.com/owner/repo/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"comments_url\": \"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad/comments\",\n \"author\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"committer\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"parents\": [\n\n ]\n }\n]\n", + "response": "[{\"sha\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"node_id\":\"MDY6Q29tbWl0Mjg2NzcxMTE2OjJiYzNmYTM5ZDhhZGI5ZTAwOGU1Mjc5Mzg1NDMzODM5OWZjNmU0YWQ=\",\"commit\":{\"author\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2019-07-24T07:45:32Z\"},\"committer\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2019-07-24T07:45:32Z\"},\"message\":\"initial commit\",\"tree\":{\"sha\":\"3d53c60def5d9f9ad79a534dd369f758763d9dc9\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/3d53c60def5d9f9ad79a534dd369f758763d9dc9\"},\"url\":\"https://api.github.com/repos/owner/repo/git/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\niQIzBAABCgAdFiEE8DeG71n37ZpuxjiNA05FmC/LkwQFAl04DJwACgkQA05FmC/L\\nkwQ5kg//TB2c1HvsD/r7x3CgKmR+uaEFGrv9srfA4/i/dbDSAg3+kpPXfGg0FCUw\\nETlWDpZRhFvLZzoxy5w46P1cLvpbdEXK47LWpsFYWFtCFGKmvaY5dZ/ma1J3HF5R\\n7Yll5jz8BKrWOZ6bOswP7nNteAFYfLiZxJq4ONbhxOyRJA7bFmg6Ydo2Zc27Gg54\\n6umhONf9DxuzL0z0f8qtHiz47KJTRdFS+ZL/Mq3iCE11SGHvjK0cnPq0Z6TBtazt\\nqszoR0Frxes4MsjI82+ovCP+RtpqerWeN/ciYoLENsnUb8Xbp/qdhrLoMvuFExz2\\n0f0M7zVI1Z9d4cDTQlembVneSv5sSeNtnk2e7BXLwjUNFVxB67aslVUyL41V0BMu\\nUw8+j9pNhObpicJs9O1fIkL84mtCSMWIyuCwDpSMSj2b892laBOKu/E5D+YuaHi5\\nbAJJ1/Szig0CzeI1KbIBoWDI1orpkSUU+4Fvk7qJnxP9iLJLwiNCFKfNKA1KeXmP\\nIK6/95HmKNJ8MfTEkRcgIdTe4fx2ib2hHGiaIAD0r4FgWxfC2BWK/uTUp8HtIQre\\nDILGnF1laIcJbyP7asvc8iJ06Kk8C9PsH4v20fqoyNcei7v0IJG2m9AHVDnb0t6L\\nAa1yXEHQLSGHS9Y0mogLPW/tZnV69EHRI1dzvH/1gDVlBMwM1/A=\\n=hLDv\\n-----END PGP SIGNATURE-----\",\"payload\":\"tree 3d53c60def5d9f9ad79a534dd369f758763d9dc9\\nauthor owner 1563954332 +0300\\ncommitter owner 1563954332 +0300\\n\\ninitial commit\\n\"}},\"url\":\"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"html_url\":\"https://github.com/owner/repo/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"comments_url\":\"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad/comments\",\"author\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"committer\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"parents\":[]}]", "status": 200 }, { @@ -380,7 +350,7 @@ "Vary": "Origin,Accept,Authorization,Cookie,X-GitHub-OTP,Accept-Encoding,Accept,X-Requested-With", "content-length": "12590" }, - "response": "{\n \"sha\": \"491f2279cd0955712449776a54f8b58b3bc38d4d\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/491f2279cd0955712449776a54f8b58b3bc38d4d\",\n \"tree\": [\n {\n \"path\": \".circleci\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"2dfd51ca0c35b04f9a6b68bc264ad1457e8f29ba\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/2dfd51ca0c35b04f9a6b68bc264ad1457e8f29ba\"\n },\n {\n \"path\": \".eslintignore\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"80b4531b026d19f8fa589efd122e76199d23f967\",\n \"size\": 39,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/80b4531b026d19f8fa589efd122e76199d23f967\"\n },\n {\n \"path\": \".eslintrc.js\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"370684994aaed5b858da3a006f48cfa57e88fd27\",\n \"size\": 414,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/370684994aaed5b858da3a006f48cfa57e88fd27\"\n },\n {\n \"path\": \".flowconfig\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"14aa2ac4cc0e15223ad98630a6f1325fc81f8043\",\n \"size\": 283,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/14aa2ac4cc0e15223ad98630a6f1325fc81f8043\"\n },\n {\n \"path\": \".gitattributes\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"406a244d1522a3c809efab0c9ce46bbd86aa9c1d\",\n \"size\": 188,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/406a244d1522a3c809efab0c9ce46bbd86aa9c1d\"\n },\n {\n \"path\": \".github\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"4ebeece548b52b20af59622354530a6d33b50b43\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/4ebeece548b52b20af59622354530a6d33b50b43\"\n },\n {\n \"path\": \".gitignore\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"c071ba35b0e49899bab6d610a68eef667dbbf157\",\n \"size\": 169,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/c071ba35b0e49899bab6d610a68eef667dbbf157\"\n },\n {\n \"path\": \".lfsconfig\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"9bb199dd631d549fd5615b07371e631e4f1b2122\",\n \"size\": 91,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/9bb199dd631d549fd5615b07371e631e4f1b2122\"\n },\n {\n \"path\": \".prettierignore\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"393f050e123d998cf8c8b362ff95cc8ac4d250e5\",\n \"size\": 45,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/393f050e123d998cf8c8b362ff95cc8ac4d250e5\"\n },\n {\n \"path\": \".prettierrc\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"e52ad05bb13b084d7949dd76e1b2517455162150\",\n \"size\": 223,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/e52ad05bb13b084d7949dd76e1b2517455162150\"\n },\n {\n \"path\": \".stylelintrc.json\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"4b4c9698d10d756f5faa025659b86375428ed0a7\",\n \"size\": 718,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/4b4c9698d10d756f5faa025659b86375428ed0a7\"\n },\n {\n \"path\": \".vscode\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"286e97ec0113ea8242b41ac222e2c3e8077e6f1e\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/286e97ec0113ea8242b41ac222e2c3e8077e6f1e\"\n },\n {\n \"path\": \"CHANGELOG.md\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"070a5d4f0eacd2dc0be81ae8996f8982de43046e\",\n \"size\": 2113,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/070a5d4f0eacd2dc0be81ae8996f8982de43046e\"\n },\n {\n \"path\": \"CODE_OF_CONDUCT.md\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"92bc7565ff0ee145a0041b5179a820f14f39ab22\",\n \"size\": 3355,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/92bc7565ff0ee145a0041b5179a820f14f39ab22\"\n },\n {\n \"path\": \"CONTRIBUTING.md\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"8552aa241254a61258e1ff9666ab36f32fb1e3b9\",\n \"size\": 3548,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/8552aa241254a61258e1ff9666ab36f32fb1e3b9\"\n },\n {\n \"path\": \"LICENSE\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"42d85938357b49977c126ca03b199129082d4fb8\",\n \"size\": 1091,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/42d85938357b49977c126ca03b199129082d4fb8\"\n },\n {\n \"path\": \"README.md\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"19df50a78654c8d757ca7f38447aa3d09c7abcce\",\n \"size\": 3698,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/19df50a78654c8d757ca7f38447aa3d09c7abcce\"\n },\n {\n \"path\": \"backend\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"b9f1cfbf4d901fe13c3af4e0d8f46bbe5a6addd6\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/b9f1cfbf4d901fe13c3af4e0d8f46bbe5a6addd6\"\n },\n {\n \"path\": \"config.js\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"58afd573bbb69fcca000efd0f5d90b93c93a98dd\",\n \"size\": 853,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/58afd573bbb69fcca000efd0f5d90b93c93a98dd\"\n },\n {\n \"path\": \"content\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"0294ef106c58743907a5c855da1eb0f87b0b6dfc\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/0294ef106c58743907a5c855da1eb0f87b0b6dfc\"\n },\n {\n \"path\": \"flow-typed\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"86c32fd6c3118be5e0dbbb231a834447357236c6\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/86c32fd6c3118be5e0dbbb231a834447357236c6\"\n },\n {\n \"path\": \"flow\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"0af45ad00d155c8d8c7407d913ff85278244c9ce\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/0af45ad00d155c8d8c7407d913ff85278244c9ce\"\n },\n {\n \"path\": \"gatsby-browser.js\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"9bd2c9dce175f04980e91cd9dc295a299e3cdb80\",\n \"size\": 90,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/9bd2c9dce175f04980e91cd9dc295a299e3cdb80\"\n },\n {\n \"path\": \"gatsby-config.js\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"3929038f9ab6451b2b256dfba5830676e6eecbee\",\n \"size\": 7256,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/3929038f9ab6451b2b256dfba5830676e6eecbee\"\n },\n {\n \"path\": \"gatsby-node.js\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"14a207883c2093d2cc071bc5a464e165bcc1fead\",\n \"size\": 409,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/14a207883c2093d2cc071bc5a464e165bcc1fead\"\n },\n {\n \"path\": \"gatsby\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"4f23c06cd1740bf78304d2c0b29bf6bfdf427981\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/4f23c06cd1740bf78304d2c0b29bf6bfdf427981\"\n },\n {\n \"path\": \"jest\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"5a6bc7be680ba053df0f8ffdc2aaa80e62c3e819\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/5a6bc7be680ba053df0f8ffdc2aaa80e62c3e819\"\n },\n {\n \"path\": \"netlify-functions\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"a96c1f09300fa4f9e4c786d69bcbe51eaff7f14a\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/a96c1f09300fa4f9e4c786d69bcbe51eaff7f14a\"\n },\n {\n \"path\": \"netlify.toml\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"2a9e36ada28c535fc074b408daa2a0cb97ecf47c\",\n \"size\": 223,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/2a9e36ada28c535fc074b408daa2a0cb97ecf47c\"\n },\n {\n \"path\": \"package.json\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"3a994b3aefb183931a30f4d75836d6f083aaaabb\",\n \"size\": 6947,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/3a994b3aefb183931a30f4d75836d6f083aaaabb\"\n },\n {\n \"path\": \"postcss-config.js\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"d216501e9b351a72e00ba0b7459a6500e27e7da2\",\n \"size\": 703,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/d216501e9b351a72e00ba0b7459a6500e27e7da2\"\n },\n {\n \"path\": \"renovate.json\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"9d78c55fe6566ea98907ef63d56a94d7b3cbe527\",\n \"size\": 536,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/9d78c55fe6566ea98907ef63d56a94d7b3cbe527\"\n },\n {\n \"path\": \"serverless-scripts\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"ee3701f2fbfc7196ba340f6481d1387d20527898\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/ee3701f2fbfc7196ba340f6481d1387d20527898\"\n },\n {\n \"path\": \"serverless-single-page-app-plugin\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"08763fcfba643a06a452398517019bea4a5850ba\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/08763fcfba643a06a452398517019bea4a5850ba\"\n },\n {\n \"path\": \"serverless.yml\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"20b22c5fad229f35d029bf6614d333d82fe8a987\",\n \"size\": 7803,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/20b22c5fad229f35d029bf6614d333d82fe8a987\"\n },\n {\n \"path\": \"src\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"8cdb35a88232c0f32f12f130c92c7cc55f97f471\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/8cdb35a88232c0f32f12f130c92c7cc55f97f471\"\n },\n {\n \"path\": \"static\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"139040296ae3796be0e107be98572f0e6bb28901\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/139040296ae3796be0e107be98572f0e6bb28901\"\n },\n {\n \"path\": \"utils\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"a592549c9f74db40b51efefcda2fd76810405f27\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/a592549c9f74db40b51efefcda2fd76810405f27\"\n },\n {\n \"path\": \"yarn.lock\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"0849d700e667c3114f154c31b3e70a080fe1629b\",\n \"size\": 859666,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/0849d700e667c3114f154c31b3e70a080fe1629b\"\n }\n ],\n \"truncated\": false\n}\n", + "response": "{\"sha\":\"9801bc49ad87a5f15cbe4e701e0a9899e7500038\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/9801bc49ad87a5f15cbe4e701e0a9899e7500038\",\"tree\":[{\"path\":\".circleci\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"2dfd51ca0c35b04f9a6b68bc264ad1457e8f29ba\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/2dfd51ca0c35b04f9a6b68bc264ad1457e8f29ba\"},{\"path\":\".eslintignore\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"80b4531b026d19f8fa589efd122e76199d23f967\",\"size\":39,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/80b4531b026d19f8fa589efd122e76199d23f967\"},{\"path\":\".eslintrc.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"370684994aaed5b858da3a006f48cfa57e88fd27\",\"size\":414,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/370684994aaed5b858da3a006f48cfa57e88fd27\"},{\"path\":\".flowconfig\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"14aa2ac4cc0e15223ad98630a6f1325fc81f8043\",\"size\":283,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/14aa2ac4cc0e15223ad98630a6f1325fc81f8043\"},{\"path\":\".gitattributes\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"406a244d1522a3c809efab0c9ce46bbd86aa9c1d\",\"size\":188,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/406a244d1522a3c809efab0c9ce46bbd86aa9c1d\"},{\"path\":\".github\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"4ebeece548b52b20af59622354530a6d33b50b43\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/4ebeece548b52b20af59622354530a6d33b50b43\"},{\"path\":\".gitignore\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"c071ba35b0e49899bab6d610a68eef667dbbf157\",\"size\":169,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/c071ba35b0e49899bab6d610a68eef667dbbf157\"},{\"path\":\".lfsconfig\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"e4872af721c959f181c81a83334e6553f8afd06b\",\"size\":91,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/e4872af721c959f181c81a83334e6553f8afd06b\"},{\"path\":\".prettierignore\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"393f050e123d998cf8c8b362ff95cc8ac4d250e5\",\"size\":45,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/393f050e123d998cf8c8b362ff95cc8ac4d250e5\"},{\"path\":\".prettierrc\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"e52ad05bb13b084d7949dd76e1b2517455162150\",\"size\":223,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/e52ad05bb13b084d7949dd76e1b2517455162150\"},{\"path\":\".stylelintrc.json\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"4b4c9698d10d756f5faa025659b86375428ed0a7\",\"size\":718,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/4b4c9698d10d756f5faa025659b86375428ed0a7\"},{\"path\":\".vscode\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"286e97ec0113ea8242b41ac222e2c3e8077e6f1e\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/286e97ec0113ea8242b41ac222e2c3e8077e6f1e\"},{\"path\":\"CHANGELOG.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"070a5d4f0eacd2dc0be81ae8996f8982de43046e\",\"size\":2113,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/070a5d4f0eacd2dc0be81ae8996f8982de43046e\"},{\"path\":\"CODE_OF_CONDUCT.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"92bc7565ff0ee145a0041b5179a820f14f39ab22\",\"size\":3355,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/92bc7565ff0ee145a0041b5179a820f14f39ab22\"},{\"path\":\"CONTRIBUTING.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"8552aa241254a61258e1ff9666ab36f32fb1e3b9\",\"size\":3548,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/8552aa241254a61258e1ff9666ab36f32fb1e3b9\"},{\"path\":\"LICENSE\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"42d85938357b49977c126ca03b199129082d4fb8\",\"size\":1091,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/42d85938357b49977c126ca03b199129082d4fb8\"},{\"path\":\"README.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"19df50a78654c8d757ca7f38447aa3d09c7abcce\",\"size\":3698,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/19df50a78654c8d757ca7f38447aa3d09c7abcce\"},{\"path\":\"backend\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"b9f1cfbf4d901fe13c3af4e0d8f46bbe5a6addd6\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/b9f1cfbf4d901fe13c3af4e0d8f46bbe5a6addd6\"},{\"path\":\"config.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"58afd573bbb69fcca000efd0f5d90b93c93a98dd\",\"size\":853,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/58afd573bbb69fcca000efd0f5d90b93c93a98dd\"},{\"path\":\"content\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"0294ef106c58743907a5c855da1eb0f87b0b6dfc\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/0294ef106c58743907a5c855da1eb0f87b0b6dfc\"},{\"path\":\"flow-typed\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"86c32fd6c3118be5e0dbbb231a834447357236c6\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/86c32fd6c3118be5e0dbbb231a834447357236c6\"},{\"path\":\"flow\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"0af45ad00d155c8d8c7407d913ff85278244c9ce\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/0af45ad00d155c8d8c7407d913ff85278244c9ce\"},{\"path\":\"gatsby-browser.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"9bd2c9dce175f04980e91cd9dc295a299e3cdb80\",\"size\":90,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/9bd2c9dce175f04980e91cd9dc295a299e3cdb80\"},{\"path\":\"gatsby-config.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"3929038f9ab6451b2b256dfba5830676e6eecbee\",\"size\":7256,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/3929038f9ab6451b2b256dfba5830676e6eecbee\"},{\"path\":\"gatsby-node.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"14a207883c2093d2cc071bc5a464e165bcc1fead\",\"size\":409,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/14a207883c2093d2cc071bc5a464e165bcc1fead\"},{\"path\":\"gatsby\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"4f23c06cd1740bf78304d2c0b29bf6bfdf427981\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/4f23c06cd1740bf78304d2c0b29bf6bfdf427981\"},{\"path\":\"jest\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"5a6bc7be680ba053df0f8ffdc2aaa80e62c3e819\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/5a6bc7be680ba053df0f8ffdc2aaa80e62c3e819\"},{\"path\":\"netlify-functions\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"a96c1f09300fa4f9e4c786d69bcbe51eaff7f14a\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/a96c1f09300fa4f9e4c786d69bcbe51eaff7f14a\"},{\"path\":\"netlify.toml\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"2a9e36ada28c535fc074b408daa2a0cb97ecf47c\",\"size\":223,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/2a9e36ada28c535fc074b408daa2a0cb97ecf47c\"},{\"path\":\"package.json\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"d8b6e6e922c8d166290f99228090139a3358bfd3\",\"size\":6951,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/d8b6e6e922c8d166290f99228090139a3358bfd3\"},{\"path\":\"postcss-config.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"d216501e9b351a72e00ba0b7459a6500e27e7da2\",\"size\":703,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/d216501e9b351a72e00ba0b7459a6500e27e7da2\"},{\"path\":\"renovate.json\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"9d78c55fe6566ea98907ef63d56a94d7b3cbe527\",\"size\":536,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/9d78c55fe6566ea98907ef63d56a94d7b3cbe527\"},{\"path\":\"serverless-scripts\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"ee3701f2fbfc7196ba340f6481d1387d20527898\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/ee3701f2fbfc7196ba340f6481d1387d20527898\"},{\"path\":\"serverless-single-page-app-plugin\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"08763fcfba643a06a452398517019bea4a5850ba\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/08763fcfba643a06a452398517019bea4a5850ba\"},{\"path\":\"serverless.yml\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"20b22c5fad229f35d029bf6614d333d82fe8a987\",\"size\":7803,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/20b22c5fad229f35d029bf6614d333d82fe8a987\"},{\"path\":\"src\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"8cdb35a88232c0f32f12f130c92c7cc55f97f471\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/8cdb35a88232c0f32f12f130c92c7cc55f97f471\"},{\"path\":\"static\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"139040296ae3796be0e107be98572f0e6bb28901\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/139040296ae3796be0e107be98572f0e6bb28901\"},{\"path\":\"utils\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"a592549c9f74db40b51efefcda2fd76810405f27\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/a592549c9f74db40b51efefcda2fd76810405f27\"},{\"path\":\"yarn.lock\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"eff9f6e3c4ee2cb7bd2685c8f93d6d68af8aad37\",\"size\":923955,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/eff9f6e3c4ee2cb7bd2685c8f93d6d68af8aad37\"}],\"truncated\":false}", "status": 200 }, { @@ -410,37 +380,7 @@ "Vary": "Origin,Accept,Authorization,Cookie,X-GitHub-OTP,Accept-Encoding,Accept,X-Requested-With", "content-length": "4828" }, - "response": "[\n {\n \"sha\": \"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"node_id\": \"MDY6Q29tbWl0MjU1MDc1OTQzOjJiYzNmYTM5ZDhhZGI5ZTAwOGU1Mjc5Mzg1NDMzODM5OWZjNmU0YWQ=\",\n \"commit\": {\n \"author\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2019-07-24T07:45:32Z\"\n },\n \"committer\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2019-07-24T07:45:32Z\"\n },\n \"message\": \"initial commit\",\n \"tree\": {\n \"sha\": \"3d53c60def5d9f9ad79a534dd369f758763d9dc9\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/3d53c60def5d9f9ad79a534dd369f758763d9dc9\"\n },\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"comment_count\": 0,\n \"verification\": {\n \"verified\": true,\n \"reason\": \"valid\",\n \"signature\": \"-----BEGIN PGP SIGNATURE-----\\n\\niQIzBAABCgAdFiEE8DeG71n37ZpuxjiNA05FmC/LkwQFAl04DJwACgkQA05FmC/L\\nkwQ5kg//TB2c1HvsD/r7x3CgKmR+uaEFGrv9srfA4/i/dbDSAg3+kpPXfGg0FCUw\\nETlWDpZRhFvLZzoxy5w46P1cLvpbdEXK47LWpsFYWFtCFGKmvaY5dZ/ma1J3HF5R\\n7Yll5jz8BKrWOZ6bOswP7nNteAFYfLiZxJq4ONbhxOyRJA7bFmg6Ydo2Zc27Gg54\\n6umhONf9DxuzL0z0f8qtHiz47KJTRdFS+ZL/Mq3iCE11SGHvjK0cnPq0Z6TBtazt\\nqszoR0Frxes4MsjI82+ovCP+RtpqerWeN/ciYoLENsnUb8Xbp/qdhrLoMvuFExz2\\n0f0M7zVI1Z9d4cDTQlembVneSv5sSeNtnk2e7BXLwjUNFVxB67aslVUyL41V0BMu\\nUw8+j9pNhObpicJs9O1fIkL84mtCSMWIyuCwDpSMSj2b892laBOKu/E5D+YuaHi5\\nbAJJ1/Szig0CzeI1KbIBoWDI1orpkSUU+4Fvk7qJnxP9iLJLwiNCFKfNKA1KeXmP\\nIK6/95HmKNJ8MfTEkRcgIdTe4fx2ib2hHGiaIAD0r4FgWxfC2BWK/uTUp8HtIQre\\nDILGnF1laIcJbyP7asvc8iJ06Kk8C9PsH4v20fqoyNcei7v0IJG2m9AHVDnb0t6L\\nAa1yXEHQLSGHS9Y0mogLPW/tZnV69EHRI1dzvH/1gDVlBMwM1/A=\\n=hLDv\\n-----END PGP SIGNATURE-----\",\n \"payload\": \"tree 3d53c60def5d9f9ad79a534dd369f758763d9dc9\\nauthor owner 1563954332 +0300\\ncommitter owner 1563954332 +0300\\n\\ninitial commit\\n\"\n }\n },\n \"url\": \"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"html_url\": \"https://github.com/owner/repo/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"comments_url\": \"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad/comments\",\n \"author\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"committer\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"parents\": [\n\n ]\n }\n]\n", - "status": 200 - }, - { - "method": "GET", - "url": "/.netlify/git/github/commits?path=content/posts/2017-18-08---The-Birth-of-Movable-Type.md&sha=master", - "headers": { - "Access-Control-Allow-Credentials": "true", - "Access-Control-Allow-Origin": "http://localhost:8080", - "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", - "Alt-Svc": "clear", - "Cache-Control": "private, max-age=60, s-maxage=60", - "Content-Security-Policy": "default-src 'none'", - "Content-Type": "application/json; charset=utf-8", - "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", - "Server": "Netlify", - "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", - "Via": "1.1 google", - "X-Accepted-Oauth-Scopes": "", - "X-Content-Type-Options": "nosniff", - "X-Frame-Options": "deny", - "X-Github-Media-Type": "github.v3; format=json", - "X-Oauth-Scopes": "delete_repo, repo", - "X-Ratelimit-Limit": "5000", - "X-Xss-Protection": "1; mode=block", - "Age": "1", - "Connection": "keep-alive", - "Vary": "Origin,Accept,Authorization,Cookie,X-GitHub-OTP,Accept-Encoding,Accept,X-Requested-With", - "content-length": "4828" - }, - "response": "[\n {\n \"sha\": \"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"node_id\": \"MDY6Q29tbWl0MjU1MDc1OTQzOjJiYzNmYTM5ZDhhZGI5ZTAwOGU1Mjc5Mzg1NDMzODM5OWZjNmU0YWQ=\",\n \"commit\": {\n \"author\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2019-07-24T07:45:32Z\"\n },\n \"committer\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2019-07-24T07:45:32Z\"\n },\n \"message\": \"initial commit\",\n \"tree\": {\n \"sha\": \"3d53c60def5d9f9ad79a534dd369f758763d9dc9\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/3d53c60def5d9f9ad79a534dd369f758763d9dc9\"\n },\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"comment_count\": 0,\n \"verification\": {\n \"verified\": true,\n \"reason\": \"valid\",\n \"signature\": \"-----BEGIN PGP SIGNATURE-----\\n\\niQIzBAABCgAdFiEE8DeG71n37ZpuxjiNA05FmC/LkwQFAl04DJwACgkQA05FmC/L\\nkwQ5kg//TB2c1HvsD/r7x3CgKmR+uaEFGrv9srfA4/i/dbDSAg3+kpPXfGg0FCUw\\nETlWDpZRhFvLZzoxy5w46P1cLvpbdEXK47LWpsFYWFtCFGKmvaY5dZ/ma1J3HF5R\\n7Yll5jz8BKrWOZ6bOswP7nNteAFYfLiZxJq4ONbhxOyRJA7bFmg6Ydo2Zc27Gg54\\n6umhONf9DxuzL0z0f8qtHiz47KJTRdFS+ZL/Mq3iCE11SGHvjK0cnPq0Z6TBtazt\\nqszoR0Frxes4MsjI82+ovCP+RtpqerWeN/ciYoLENsnUb8Xbp/qdhrLoMvuFExz2\\n0f0M7zVI1Z9d4cDTQlembVneSv5sSeNtnk2e7BXLwjUNFVxB67aslVUyL41V0BMu\\nUw8+j9pNhObpicJs9O1fIkL84mtCSMWIyuCwDpSMSj2b892laBOKu/E5D+YuaHi5\\nbAJJ1/Szig0CzeI1KbIBoWDI1orpkSUU+4Fvk7qJnxP9iLJLwiNCFKfNKA1KeXmP\\nIK6/95HmKNJ8MfTEkRcgIdTe4fx2ib2hHGiaIAD0r4FgWxfC2BWK/uTUp8HtIQre\\nDILGnF1laIcJbyP7asvc8iJ06Kk8C9PsH4v20fqoyNcei7v0IJG2m9AHVDnb0t6L\\nAa1yXEHQLSGHS9Y0mogLPW/tZnV69EHRI1dzvH/1gDVlBMwM1/A=\\n=hLDv\\n-----END PGP SIGNATURE-----\",\n \"payload\": \"tree 3d53c60def5d9f9ad79a534dd369f758763d9dc9\\nauthor owner 1563954332 +0300\\ncommitter owner 1563954332 +0300\\n\\ninitial commit\\n\"\n }\n },\n \"url\": \"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"html_url\": \"https://github.com/owner/repo/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"comments_url\": \"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad/comments\",\n \"author\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"committer\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"parents\": [\n\n ]\n }\n]\n", + "response": "[{\"sha\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"node_id\":\"MDY6Q29tbWl0Mjg2NzcxMTE2OjJiYzNmYTM5ZDhhZGI5ZTAwOGU1Mjc5Mzg1NDMzODM5OWZjNmU0YWQ=\",\"commit\":{\"author\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2019-07-24T07:45:32Z\"},\"committer\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2019-07-24T07:45:32Z\"},\"message\":\"initial commit\",\"tree\":{\"sha\":\"3d53c60def5d9f9ad79a534dd369f758763d9dc9\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/3d53c60def5d9f9ad79a534dd369f758763d9dc9\"},\"url\":\"https://api.github.com/repos/owner/repo/git/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\niQIzBAABCgAdFiEE8DeG71n37ZpuxjiNA05FmC/LkwQFAl04DJwACgkQA05FmC/L\\nkwQ5kg//TB2c1HvsD/r7x3CgKmR+uaEFGrv9srfA4/i/dbDSAg3+kpPXfGg0FCUw\\nETlWDpZRhFvLZzoxy5w46P1cLvpbdEXK47LWpsFYWFtCFGKmvaY5dZ/ma1J3HF5R\\n7Yll5jz8BKrWOZ6bOswP7nNteAFYfLiZxJq4ONbhxOyRJA7bFmg6Ydo2Zc27Gg54\\n6umhONf9DxuzL0z0f8qtHiz47KJTRdFS+ZL/Mq3iCE11SGHvjK0cnPq0Z6TBtazt\\nqszoR0Frxes4MsjI82+ovCP+RtpqerWeN/ciYoLENsnUb8Xbp/qdhrLoMvuFExz2\\n0f0M7zVI1Z9d4cDTQlembVneSv5sSeNtnk2e7BXLwjUNFVxB67aslVUyL41V0BMu\\nUw8+j9pNhObpicJs9O1fIkL84mtCSMWIyuCwDpSMSj2b892laBOKu/E5D+YuaHi5\\nbAJJ1/Szig0CzeI1KbIBoWDI1orpkSUU+4Fvk7qJnxP9iLJLwiNCFKfNKA1KeXmP\\nIK6/95HmKNJ8MfTEkRcgIdTe4fx2ib2hHGiaIAD0r4FgWxfC2BWK/uTUp8HtIQre\\nDILGnF1laIcJbyP7asvc8iJ06Kk8C9PsH4v20fqoyNcei7v0IJG2m9AHVDnb0t6L\\nAa1yXEHQLSGHS9Y0mogLPW/tZnV69EHRI1dzvH/1gDVlBMwM1/A=\\n=hLDv\\n-----END PGP SIGNATURE-----\",\"payload\":\"tree 3d53c60def5d9f9ad79a534dd369f758763d9dc9\\nauthor owner 1563954332 +0300\\ncommitter owner 1563954332 +0300\\n\\ninitial commit\\n\"}},\"url\":\"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"html_url\":\"https://github.com/owner/repo/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"comments_url\":\"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad/comments\",\"author\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"committer\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"parents\":[]}]", "status": 200 }, { @@ -465,17 +405,47 @@ "X-Oauth-Scopes": "delete_repo, repo", "X-Ratelimit-Limit": "5000", "X-Xss-Protection": "1; mode=block", - "Age": "1", + "Age": "0", "Connection": "keep-alive", "Vary": "Origin,Accept,Authorization,Cookie,X-GitHub-OTP,Accept-Encoding,Accept,X-Requested-With", "content-length": "4828" }, - "response": "[\n {\n \"sha\": \"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"node_id\": \"MDY6Q29tbWl0MjU1MDc1OTQzOjJiYzNmYTM5ZDhhZGI5ZTAwOGU1Mjc5Mzg1NDMzODM5OWZjNmU0YWQ=\",\n \"commit\": {\n \"author\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2019-07-24T07:45:32Z\"\n },\n \"committer\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2019-07-24T07:45:32Z\"\n },\n \"message\": \"initial commit\",\n \"tree\": {\n \"sha\": \"3d53c60def5d9f9ad79a534dd369f758763d9dc9\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/3d53c60def5d9f9ad79a534dd369f758763d9dc9\"\n },\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"comment_count\": 0,\n \"verification\": {\n \"verified\": true,\n \"reason\": \"valid\",\n \"signature\": \"-----BEGIN PGP SIGNATURE-----\\n\\niQIzBAABCgAdFiEE8DeG71n37ZpuxjiNA05FmC/LkwQFAl04DJwACgkQA05FmC/L\\nkwQ5kg//TB2c1HvsD/r7x3CgKmR+uaEFGrv9srfA4/i/dbDSAg3+kpPXfGg0FCUw\\nETlWDpZRhFvLZzoxy5w46P1cLvpbdEXK47LWpsFYWFtCFGKmvaY5dZ/ma1J3HF5R\\n7Yll5jz8BKrWOZ6bOswP7nNteAFYfLiZxJq4ONbhxOyRJA7bFmg6Ydo2Zc27Gg54\\n6umhONf9DxuzL0z0f8qtHiz47KJTRdFS+ZL/Mq3iCE11SGHvjK0cnPq0Z6TBtazt\\nqszoR0Frxes4MsjI82+ovCP+RtpqerWeN/ciYoLENsnUb8Xbp/qdhrLoMvuFExz2\\n0f0M7zVI1Z9d4cDTQlembVneSv5sSeNtnk2e7BXLwjUNFVxB67aslVUyL41V0BMu\\nUw8+j9pNhObpicJs9O1fIkL84mtCSMWIyuCwDpSMSj2b892laBOKu/E5D+YuaHi5\\nbAJJ1/Szig0CzeI1KbIBoWDI1orpkSUU+4Fvk7qJnxP9iLJLwiNCFKfNKA1KeXmP\\nIK6/95HmKNJ8MfTEkRcgIdTe4fx2ib2hHGiaIAD0r4FgWxfC2BWK/uTUp8HtIQre\\nDILGnF1laIcJbyP7asvc8iJ06Kk8C9PsH4v20fqoyNcei7v0IJG2m9AHVDnb0t6L\\nAa1yXEHQLSGHS9Y0mogLPW/tZnV69EHRI1dzvH/1gDVlBMwM1/A=\\n=hLDv\\n-----END PGP SIGNATURE-----\",\n \"payload\": \"tree 3d53c60def5d9f9ad79a534dd369f758763d9dc9\\nauthor owner 1563954332 +0300\\ncommitter owner 1563954332 +0300\\n\\ninitial commit\\n\"\n }\n },\n \"url\": \"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"html_url\": \"https://github.com/owner/repo/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"comments_url\": \"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad/comments\",\n \"author\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"committer\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"parents\": [\n\n ]\n }\n]\n", + "response": "[{\"sha\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"node_id\":\"MDY6Q29tbWl0Mjg2NzcxMTE2OjJiYzNmYTM5ZDhhZGI5ZTAwOGU1Mjc5Mzg1NDMzODM5OWZjNmU0YWQ=\",\"commit\":{\"author\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2019-07-24T07:45:32Z\"},\"committer\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2019-07-24T07:45:32Z\"},\"message\":\"initial commit\",\"tree\":{\"sha\":\"3d53c60def5d9f9ad79a534dd369f758763d9dc9\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/3d53c60def5d9f9ad79a534dd369f758763d9dc9\"},\"url\":\"https://api.github.com/repos/owner/repo/git/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\niQIzBAABCgAdFiEE8DeG71n37ZpuxjiNA05FmC/LkwQFAl04DJwACgkQA05FmC/L\\nkwQ5kg//TB2c1HvsD/r7x3CgKmR+uaEFGrv9srfA4/i/dbDSAg3+kpPXfGg0FCUw\\nETlWDpZRhFvLZzoxy5w46P1cLvpbdEXK47LWpsFYWFtCFGKmvaY5dZ/ma1J3HF5R\\n7Yll5jz8BKrWOZ6bOswP7nNteAFYfLiZxJq4ONbhxOyRJA7bFmg6Ydo2Zc27Gg54\\n6umhONf9DxuzL0z0f8qtHiz47KJTRdFS+ZL/Mq3iCE11SGHvjK0cnPq0Z6TBtazt\\nqszoR0Frxes4MsjI82+ovCP+RtpqerWeN/ciYoLENsnUb8Xbp/qdhrLoMvuFExz2\\n0f0M7zVI1Z9d4cDTQlembVneSv5sSeNtnk2e7BXLwjUNFVxB67aslVUyL41V0BMu\\nUw8+j9pNhObpicJs9O1fIkL84mtCSMWIyuCwDpSMSj2b892laBOKu/E5D+YuaHi5\\nbAJJ1/Szig0CzeI1KbIBoWDI1orpkSUU+4Fvk7qJnxP9iLJLwiNCFKfNKA1KeXmP\\nIK6/95HmKNJ8MfTEkRcgIdTe4fx2ib2hHGiaIAD0r4FgWxfC2BWK/uTUp8HtIQre\\nDILGnF1laIcJbyP7asvc8iJ06Kk8C9PsH4v20fqoyNcei7v0IJG2m9AHVDnb0t6L\\nAa1yXEHQLSGHS9Y0mogLPW/tZnV69EHRI1dzvH/1gDVlBMwM1/A=\\n=hLDv\\n-----END PGP SIGNATURE-----\",\"payload\":\"tree 3d53c60def5d9f9ad79a534dd369f758763d9dc9\\nauthor owner 1563954332 +0300\\ncommitter owner 1563954332 +0300\\n\\ninitial commit\\n\"}},\"url\":\"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"html_url\":\"https://github.com/owner/repo/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"comments_url\":\"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad/comments\",\"author\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"committer\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"parents\":[]}]", "status": 200 }, { "method": "GET", - "url": "/.netlify/git/github/git/blobs/9bb199dd631d549fd5615b07371e631e4f1b2122", + "url": "/.netlify/git/github/commits?path=content/posts/2016-01-12---The-Origins-of-Social-Stationery-Lettering.md&sha=master", + "headers": { + "Access-Control-Allow-Credentials": "true", + "Access-Control-Allow-Origin": "http://localhost:8080", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", + "Alt-Svc": "clear", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Content-Security-Policy": "default-src 'none'", + "Content-Type": "application/json; charset=utf-8", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Server": "Netlify", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "Via": "1.1 google", + "X-Accepted-Oauth-Scopes": "", + "X-Content-Type-Options": "nosniff", + "X-Frame-Options": "deny", + "X-Github-Media-Type": "github.v3; format=json", + "X-Oauth-Scopes": "delete_repo, repo", + "X-Ratelimit-Limit": "5000", + "X-Xss-Protection": "1; mode=block", + "Age": "0", + "Connection": "keep-alive", + "Vary": "Origin,Accept,Authorization,Cookie,X-GitHub-OTP,Accept-Encoding,Accept,X-Requested-With", + "content-length": "4828" + }, + "response": "[{\"sha\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"node_id\":\"MDY6Q29tbWl0Mjg2NzcxMTE2OjJiYzNmYTM5ZDhhZGI5ZTAwOGU1Mjc5Mzg1NDMzODM5OWZjNmU0YWQ=\",\"commit\":{\"author\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2019-07-24T07:45:32Z\"},\"committer\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2019-07-24T07:45:32Z\"},\"message\":\"initial commit\",\"tree\":{\"sha\":\"3d53c60def5d9f9ad79a534dd369f758763d9dc9\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/3d53c60def5d9f9ad79a534dd369f758763d9dc9\"},\"url\":\"https://api.github.com/repos/owner/repo/git/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\niQIzBAABCgAdFiEE8DeG71n37ZpuxjiNA05FmC/LkwQFAl04DJwACgkQA05FmC/L\\nkwQ5kg//TB2c1HvsD/r7x3CgKmR+uaEFGrv9srfA4/i/dbDSAg3+kpPXfGg0FCUw\\nETlWDpZRhFvLZzoxy5w46P1cLvpbdEXK47LWpsFYWFtCFGKmvaY5dZ/ma1J3HF5R\\n7Yll5jz8BKrWOZ6bOswP7nNteAFYfLiZxJq4ONbhxOyRJA7bFmg6Ydo2Zc27Gg54\\n6umhONf9DxuzL0z0f8qtHiz47KJTRdFS+ZL/Mq3iCE11SGHvjK0cnPq0Z6TBtazt\\nqszoR0Frxes4MsjI82+ovCP+RtpqerWeN/ciYoLENsnUb8Xbp/qdhrLoMvuFExz2\\n0f0M7zVI1Z9d4cDTQlembVneSv5sSeNtnk2e7BXLwjUNFVxB67aslVUyL41V0BMu\\nUw8+j9pNhObpicJs9O1fIkL84mtCSMWIyuCwDpSMSj2b892laBOKu/E5D+YuaHi5\\nbAJJ1/Szig0CzeI1KbIBoWDI1orpkSUU+4Fvk7qJnxP9iLJLwiNCFKfNKA1KeXmP\\nIK6/95HmKNJ8MfTEkRcgIdTe4fx2ib2hHGiaIAD0r4FgWxfC2BWK/uTUp8HtIQre\\nDILGnF1laIcJbyP7asvc8iJ06Kk8C9PsH4v20fqoyNcei7v0IJG2m9AHVDnb0t6L\\nAa1yXEHQLSGHS9Y0mogLPW/tZnV69EHRI1dzvH/1gDVlBMwM1/A=\\n=hLDv\\n-----END PGP SIGNATURE-----\",\"payload\":\"tree 3d53c60def5d9f9ad79a534dd369f758763d9dc9\\nauthor owner 1563954332 +0300\\ncommitter owner 1563954332 +0300\\n\\ninitial commit\\n\"}},\"url\":\"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"html_url\":\"https://github.com/owner/repo/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"comments_url\":\"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad/comments\",\"author\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"committer\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"parents\":[]}]", + "status": 200 + }, + { + "method": "GET", + "url": "/.netlify/git/github/git/blobs/e4872af721c959f181c81a83334e6553f8afd06b", "headers": { "Access-Control-Allow-Credentials": "true", "Access-Control-Allow-Origin": "http://localhost:8080", @@ -500,7 +470,37 @@ "Vary": "Origin,Accept,Authorization,Cookie,X-GitHub-OTP,Accept-Encoding,Accept,X-Requested-With", "content-length": "490" }, - "response": "{\n \"sha\": \"9bb199dd631d549fd5615b07371e631e4f1b2122\",\n \"node_id\": \"MDQ6QmxvYjI1NTA3NTk0Mzo5YmIxOTlkZDYzMWQ1NDlmZDU2MTViMDczNzFlNjMxZTRmMWIyMTIy\",\n \"size\": 91,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/9bb199dd631d549fd5615b07371e631e4f1b2122\",\n \"content\": \"W2xmc10KCXVybCA9IGh0dHBzOi8vODU5MWU5ZGMtMGE3OS00N2M4LWI1MTQt\\nOTBmNDIxMGY2ZjBkLm5ldGxpZnkuY29tLy5uZXRsaWZ5L2xhcmdlLW1lZGlh\\nCg==\\n\",\n \"encoding\": \"base64\"\n}\n", + "response": "{\"sha\":\"e4872af721c959f181c81a83334e6553f8afd06b\",\"node_id\":\"MDQ6QmxvYjI4Njc3MTExNjplNDg3MmFmNzIxYzk1OWYxODFjODFhODMzMzRlNjU1M2Y4YWZkMDZi\",\"size\":91,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/e4872af721c959f181c81a83334e6553f8afd06b\",\"content\":\"W2xmc10KCXVybCA9IGh0dHBzOi8vMGFjOGVjYmEtYWZiZC00NTk5LWIwZWYt\\nOWFhMmU4OTY5YTg5Lm5ldGxpZnkuY29tLy5uZXRsaWZ5L2xhcmdlLW1lZGlh\\nCg==\\n\",\"encoding\":\"base64\"}", + "status": 200 + }, + { + "method": "GET", + "url": "/.netlify/git/github/commits?path=content/posts/2017-18-08---The-Birth-of-Movable-Type.md&sha=master", + "headers": { + "Access-Control-Allow-Credentials": "true", + "Access-Control-Allow-Origin": "http://localhost:8080", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", + "Alt-Svc": "clear", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Content-Security-Policy": "default-src 'none'", + "Content-Type": "application/json; charset=utf-8", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Server": "Netlify", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "Via": "1.1 google", + "X-Accepted-Oauth-Scopes": "", + "X-Content-Type-Options": "nosniff", + "X-Frame-Options": "deny", + "X-Github-Media-Type": "github.v3; format=json", + "X-Oauth-Scopes": "delete_repo, repo", + "X-Ratelimit-Limit": "5000", + "X-Xss-Protection": "1; mode=block", + "Age": "0", + "Connection": "keep-alive", + "Vary": "Origin,Accept,Authorization,Cookie,X-GitHub-OTP,Accept-Encoding,Accept,X-Requested-With", + "content-length": "4828" + }, + "response": "[{\"sha\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"node_id\":\"MDY6Q29tbWl0Mjg2NzcxMTE2OjJiYzNmYTM5ZDhhZGI5ZTAwOGU1Mjc5Mzg1NDMzODM5OWZjNmU0YWQ=\",\"commit\":{\"author\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2019-07-24T07:45:32Z\"},\"committer\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2019-07-24T07:45:32Z\"},\"message\":\"initial commit\",\"tree\":{\"sha\":\"3d53c60def5d9f9ad79a534dd369f758763d9dc9\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/3d53c60def5d9f9ad79a534dd369f758763d9dc9\"},\"url\":\"https://api.github.com/repos/owner/repo/git/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\niQIzBAABCgAdFiEE8DeG71n37ZpuxjiNA05FmC/LkwQFAl04DJwACgkQA05FmC/L\\nkwQ5kg//TB2c1HvsD/r7x3CgKmR+uaEFGrv9srfA4/i/dbDSAg3+kpPXfGg0FCUw\\nETlWDpZRhFvLZzoxy5w46P1cLvpbdEXK47LWpsFYWFtCFGKmvaY5dZ/ma1J3HF5R\\n7Yll5jz8BKrWOZ6bOswP7nNteAFYfLiZxJq4ONbhxOyRJA7bFmg6Ydo2Zc27Gg54\\n6umhONf9DxuzL0z0f8qtHiz47KJTRdFS+ZL/Mq3iCE11SGHvjK0cnPq0Z6TBtazt\\nqszoR0Frxes4MsjI82+ovCP+RtpqerWeN/ciYoLENsnUb8Xbp/qdhrLoMvuFExz2\\n0f0M7zVI1Z9d4cDTQlembVneSv5sSeNtnk2e7BXLwjUNFVxB67aslVUyL41V0BMu\\nUw8+j9pNhObpicJs9O1fIkL84mtCSMWIyuCwDpSMSj2b892laBOKu/E5D+YuaHi5\\nbAJJ1/Szig0CzeI1KbIBoWDI1orpkSUU+4Fvk7qJnxP9iLJLwiNCFKfNKA1KeXmP\\nIK6/95HmKNJ8MfTEkRcgIdTe4fx2ib2hHGiaIAD0r4FgWxfC2BWK/uTUp8HtIQre\\nDILGnF1laIcJbyP7asvc8iJ06Kk8C9PsH4v20fqoyNcei7v0IJG2m9AHVDnb0t6L\\nAa1yXEHQLSGHS9Y0mogLPW/tZnV69EHRI1dzvH/1gDVlBMwM1/A=\\n=hLDv\\n-----END PGP SIGNATURE-----\",\"payload\":\"tree 3d53c60def5d9f9ad79a534dd369f758763d9dc9\\nauthor owner 1563954332 +0300\\ncommitter owner 1563954332 +0300\\n\\ninitial commit\\n\"}},\"url\":\"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"html_url\":\"https://github.com/owner/repo/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"comments_url\":\"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad/comments\",\"author\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"committer\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"parents\":[]}]", "status": 200 }, { @@ -530,7 +530,7 @@ "Vary": "Origin,Accept,Authorization,Cookie,X-GitHub-OTP,Accept-Encoding,Accept,X-Requested-With", "content-length": "12590" }, - "response": "{\n \"sha\": \"491f2279cd0955712449776a54f8b58b3bc38d4d\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/491f2279cd0955712449776a54f8b58b3bc38d4d\",\n \"tree\": [\n {\n \"path\": \".circleci\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"2dfd51ca0c35b04f9a6b68bc264ad1457e8f29ba\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/2dfd51ca0c35b04f9a6b68bc264ad1457e8f29ba\"\n },\n {\n \"path\": \".eslintignore\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"80b4531b026d19f8fa589efd122e76199d23f967\",\n \"size\": 39,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/80b4531b026d19f8fa589efd122e76199d23f967\"\n },\n {\n \"path\": \".eslintrc.js\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"370684994aaed5b858da3a006f48cfa57e88fd27\",\n \"size\": 414,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/370684994aaed5b858da3a006f48cfa57e88fd27\"\n },\n {\n \"path\": \".flowconfig\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"14aa2ac4cc0e15223ad98630a6f1325fc81f8043\",\n \"size\": 283,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/14aa2ac4cc0e15223ad98630a6f1325fc81f8043\"\n },\n {\n \"path\": \".gitattributes\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"406a244d1522a3c809efab0c9ce46bbd86aa9c1d\",\n \"size\": 188,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/406a244d1522a3c809efab0c9ce46bbd86aa9c1d\"\n },\n {\n \"path\": \".github\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"4ebeece548b52b20af59622354530a6d33b50b43\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/4ebeece548b52b20af59622354530a6d33b50b43\"\n },\n {\n \"path\": \".gitignore\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"c071ba35b0e49899bab6d610a68eef667dbbf157\",\n \"size\": 169,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/c071ba35b0e49899bab6d610a68eef667dbbf157\"\n },\n {\n \"path\": \".lfsconfig\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"9bb199dd631d549fd5615b07371e631e4f1b2122\",\n \"size\": 91,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/9bb199dd631d549fd5615b07371e631e4f1b2122\"\n },\n {\n \"path\": \".prettierignore\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"393f050e123d998cf8c8b362ff95cc8ac4d250e5\",\n \"size\": 45,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/393f050e123d998cf8c8b362ff95cc8ac4d250e5\"\n },\n {\n \"path\": \".prettierrc\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"e52ad05bb13b084d7949dd76e1b2517455162150\",\n \"size\": 223,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/e52ad05bb13b084d7949dd76e1b2517455162150\"\n },\n {\n \"path\": \".stylelintrc.json\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"4b4c9698d10d756f5faa025659b86375428ed0a7\",\n \"size\": 718,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/4b4c9698d10d756f5faa025659b86375428ed0a7\"\n },\n {\n \"path\": \".vscode\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"286e97ec0113ea8242b41ac222e2c3e8077e6f1e\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/286e97ec0113ea8242b41ac222e2c3e8077e6f1e\"\n },\n {\n \"path\": \"CHANGELOG.md\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"070a5d4f0eacd2dc0be81ae8996f8982de43046e\",\n \"size\": 2113,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/070a5d4f0eacd2dc0be81ae8996f8982de43046e\"\n },\n {\n \"path\": \"CODE_OF_CONDUCT.md\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"92bc7565ff0ee145a0041b5179a820f14f39ab22\",\n \"size\": 3355,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/92bc7565ff0ee145a0041b5179a820f14f39ab22\"\n },\n {\n \"path\": \"CONTRIBUTING.md\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"8552aa241254a61258e1ff9666ab36f32fb1e3b9\",\n \"size\": 3548,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/8552aa241254a61258e1ff9666ab36f32fb1e3b9\"\n },\n {\n \"path\": \"LICENSE\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"42d85938357b49977c126ca03b199129082d4fb8\",\n \"size\": 1091,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/42d85938357b49977c126ca03b199129082d4fb8\"\n },\n {\n \"path\": \"README.md\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"19df50a78654c8d757ca7f38447aa3d09c7abcce\",\n \"size\": 3698,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/19df50a78654c8d757ca7f38447aa3d09c7abcce\"\n },\n {\n \"path\": \"backend\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"b9f1cfbf4d901fe13c3af4e0d8f46bbe5a6addd6\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/b9f1cfbf4d901fe13c3af4e0d8f46bbe5a6addd6\"\n },\n {\n \"path\": \"config.js\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"58afd573bbb69fcca000efd0f5d90b93c93a98dd\",\n \"size\": 853,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/58afd573bbb69fcca000efd0f5d90b93c93a98dd\"\n },\n {\n \"path\": \"content\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"0294ef106c58743907a5c855da1eb0f87b0b6dfc\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/0294ef106c58743907a5c855da1eb0f87b0b6dfc\"\n },\n {\n \"path\": \"flow-typed\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"86c32fd6c3118be5e0dbbb231a834447357236c6\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/86c32fd6c3118be5e0dbbb231a834447357236c6\"\n },\n {\n \"path\": \"flow\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"0af45ad00d155c8d8c7407d913ff85278244c9ce\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/0af45ad00d155c8d8c7407d913ff85278244c9ce\"\n },\n {\n \"path\": \"gatsby-browser.js\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"9bd2c9dce175f04980e91cd9dc295a299e3cdb80\",\n \"size\": 90,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/9bd2c9dce175f04980e91cd9dc295a299e3cdb80\"\n },\n {\n \"path\": \"gatsby-config.js\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"3929038f9ab6451b2b256dfba5830676e6eecbee\",\n \"size\": 7256,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/3929038f9ab6451b2b256dfba5830676e6eecbee\"\n },\n {\n \"path\": \"gatsby-node.js\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"14a207883c2093d2cc071bc5a464e165bcc1fead\",\n \"size\": 409,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/14a207883c2093d2cc071bc5a464e165bcc1fead\"\n },\n {\n \"path\": \"gatsby\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"4f23c06cd1740bf78304d2c0b29bf6bfdf427981\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/4f23c06cd1740bf78304d2c0b29bf6bfdf427981\"\n },\n {\n \"path\": \"jest\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"5a6bc7be680ba053df0f8ffdc2aaa80e62c3e819\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/5a6bc7be680ba053df0f8ffdc2aaa80e62c3e819\"\n },\n {\n \"path\": \"netlify-functions\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"a96c1f09300fa4f9e4c786d69bcbe51eaff7f14a\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/a96c1f09300fa4f9e4c786d69bcbe51eaff7f14a\"\n },\n {\n \"path\": \"netlify.toml\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"2a9e36ada28c535fc074b408daa2a0cb97ecf47c\",\n \"size\": 223,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/2a9e36ada28c535fc074b408daa2a0cb97ecf47c\"\n },\n {\n \"path\": \"package.json\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"3a994b3aefb183931a30f4d75836d6f083aaaabb\",\n \"size\": 6947,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/3a994b3aefb183931a30f4d75836d6f083aaaabb\"\n },\n {\n \"path\": \"postcss-config.js\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"d216501e9b351a72e00ba0b7459a6500e27e7da2\",\n \"size\": 703,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/d216501e9b351a72e00ba0b7459a6500e27e7da2\"\n },\n {\n \"path\": \"renovate.json\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"9d78c55fe6566ea98907ef63d56a94d7b3cbe527\",\n \"size\": 536,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/9d78c55fe6566ea98907ef63d56a94d7b3cbe527\"\n },\n {\n \"path\": \"serverless-scripts\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"ee3701f2fbfc7196ba340f6481d1387d20527898\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/ee3701f2fbfc7196ba340f6481d1387d20527898\"\n },\n {\n \"path\": \"serverless-single-page-app-plugin\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"08763fcfba643a06a452398517019bea4a5850ba\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/08763fcfba643a06a452398517019bea4a5850ba\"\n },\n {\n \"path\": \"serverless.yml\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"20b22c5fad229f35d029bf6614d333d82fe8a987\",\n \"size\": 7803,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/20b22c5fad229f35d029bf6614d333d82fe8a987\"\n },\n {\n \"path\": \"src\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"8cdb35a88232c0f32f12f130c92c7cc55f97f471\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/8cdb35a88232c0f32f12f130c92c7cc55f97f471\"\n },\n {\n \"path\": \"static\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"139040296ae3796be0e107be98572f0e6bb28901\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/139040296ae3796be0e107be98572f0e6bb28901\"\n },\n {\n \"path\": \"utils\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"a592549c9f74db40b51efefcda2fd76810405f27\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/a592549c9f74db40b51efefcda2fd76810405f27\"\n },\n {\n \"path\": \"yarn.lock\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"0849d700e667c3114f154c31b3e70a080fe1629b\",\n \"size\": 859666,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/0849d700e667c3114f154c31b3e70a080fe1629b\"\n }\n ],\n \"truncated\": false\n}\n", + "response": "{\"sha\":\"9801bc49ad87a5f15cbe4e701e0a9899e7500038\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/9801bc49ad87a5f15cbe4e701e0a9899e7500038\",\"tree\":[{\"path\":\".circleci\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"2dfd51ca0c35b04f9a6b68bc264ad1457e8f29ba\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/2dfd51ca0c35b04f9a6b68bc264ad1457e8f29ba\"},{\"path\":\".eslintignore\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"80b4531b026d19f8fa589efd122e76199d23f967\",\"size\":39,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/80b4531b026d19f8fa589efd122e76199d23f967\"},{\"path\":\".eslintrc.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"370684994aaed5b858da3a006f48cfa57e88fd27\",\"size\":414,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/370684994aaed5b858da3a006f48cfa57e88fd27\"},{\"path\":\".flowconfig\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"14aa2ac4cc0e15223ad98630a6f1325fc81f8043\",\"size\":283,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/14aa2ac4cc0e15223ad98630a6f1325fc81f8043\"},{\"path\":\".gitattributes\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"406a244d1522a3c809efab0c9ce46bbd86aa9c1d\",\"size\":188,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/406a244d1522a3c809efab0c9ce46bbd86aa9c1d\"},{\"path\":\".github\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"4ebeece548b52b20af59622354530a6d33b50b43\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/4ebeece548b52b20af59622354530a6d33b50b43\"},{\"path\":\".gitignore\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"c071ba35b0e49899bab6d610a68eef667dbbf157\",\"size\":169,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/c071ba35b0e49899bab6d610a68eef667dbbf157\"},{\"path\":\".lfsconfig\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"e4872af721c959f181c81a83334e6553f8afd06b\",\"size\":91,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/e4872af721c959f181c81a83334e6553f8afd06b\"},{\"path\":\".prettierignore\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"393f050e123d998cf8c8b362ff95cc8ac4d250e5\",\"size\":45,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/393f050e123d998cf8c8b362ff95cc8ac4d250e5\"},{\"path\":\".prettierrc\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"e52ad05bb13b084d7949dd76e1b2517455162150\",\"size\":223,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/e52ad05bb13b084d7949dd76e1b2517455162150\"},{\"path\":\".stylelintrc.json\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"4b4c9698d10d756f5faa025659b86375428ed0a7\",\"size\":718,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/4b4c9698d10d756f5faa025659b86375428ed0a7\"},{\"path\":\".vscode\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"286e97ec0113ea8242b41ac222e2c3e8077e6f1e\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/286e97ec0113ea8242b41ac222e2c3e8077e6f1e\"},{\"path\":\"CHANGELOG.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"070a5d4f0eacd2dc0be81ae8996f8982de43046e\",\"size\":2113,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/070a5d4f0eacd2dc0be81ae8996f8982de43046e\"},{\"path\":\"CODE_OF_CONDUCT.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"92bc7565ff0ee145a0041b5179a820f14f39ab22\",\"size\":3355,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/92bc7565ff0ee145a0041b5179a820f14f39ab22\"},{\"path\":\"CONTRIBUTING.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"8552aa241254a61258e1ff9666ab36f32fb1e3b9\",\"size\":3548,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/8552aa241254a61258e1ff9666ab36f32fb1e3b9\"},{\"path\":\"LICENSE\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"42d85938357b49977c126ca03b199129082d4fb8\",\"size\":1091,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/42d85938357b49977c126ca03b199129082d4fb8\"},{\"path\":\"README.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"19df50a78654c8d757ca7f38447aa3d09c7abcce\",\"size\":3698,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/19df50a78654c8d757ca7f38447aa3d09c7abcce\"},{\"path\":\"backend\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"b9f1cfbf4d901fe13c3af4e0d8f46bbe5a6addd6\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/b9f1cfbf4d901fe13c3af4e0d8f46bbe5a6addd6\"},{\"path\":\"config.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"58afd573bbb69fcca000efd0f5d90b93c93a98dd\",\"size\":853,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/58afd573bbb69fcca000efd0f5d90b93c93a98dd\"},{\"path\":\"content\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"0294ef106c58743907a5c855da1eb0f87b0b6dfc\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/0294ef106c58743907a5c855da1eb0f87b0b6dfc\"},{\"path\":\"flow-typed\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"86c32fd6c3118be5e0dbbb231a834447357236c6\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/86c32fd6c3118be5e0dbbb231a834447357236c6\"},{\"path\":\"flow\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"0af45ad00d155c8d8c7407d913ff85278244c9ce\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/0af45ad00d155c8d8c7407d913ff85278244c9ce\"},{\"path\":\"gatsby-browser.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"9bd2c9dce175f04980e91cd9dc295a299e3cdb80\",\"size\":90,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/9bd2c9dce175f04980e91cd9dc295a299e3cdb80\"},{\"path\":\"gatsby-config.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"3929038f9ab6451b2b256dfba5830676e6eecbee\",\"size\":7256,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/3929038f9ab6451b2b256dfba5830676e6eecbee\"},{\"path\":\"gatsby-node.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"14a207883c2093d2cc071bc5a464e165bcc1fead\",\"size\":409,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/14a207883c2093d2cc071bc5a464e165bcc1fead\"},{\"path\":\"gatsby\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"4f23c06cd1740bf78304d2c0b29bf6bfdf427981\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/4f23c06cd1740bf78304d2c0b29bf6bfdf427981\"},{\"path\":\"jest\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"5a6bc7be680ba053df0f8ffdc2aaa80e62c3e819\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/5a6bc7be680ba053df0f8ffdc2aaa80e62c3e819\"},{\"path\":\"netlify-functions\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"a96c1f09300fa4f9e4c786d69bcbe51eaff7f14a\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/a96c1f09300fa4f9e4c786d69bcbe51eaff7f14a\"},{\"path\":\"netlify.toml\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"2a9e36ada28c535fc074b408daa2a0cb97ecf47c\",\"size\":223,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/2a9e36ada28c535fc074b408daa2a0cb97ecf47c\"},{\"path\":\"package.json\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"d8b6e6e922c8d166290f99228090139a3358bfd3\",\"size\":6951,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/d8b6e6e922c8d166290f99228090139a3358bfd3\"},{\"path\":\"postcss-config.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"d216501e9b351a72e00ba0b7459a6500e27e7da2\",\"size\":703,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/d216501e9b351a72e00ba0b7459a6500e27e7da2\"},{\"path\":\"renovate.json\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"9d78c55fe6566ea98907ef63d56a94d7b3cbe527\",\"size\":536,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/9d78c55fe6566ea98907ef63d56a94d7b3cbe527\"},{\"path\":\"serverless-scripts\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"ee3701f2fbfc7196ba340f6481d1387d20527898\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/ee3701f2fbfc7196ba340f6481d1387d20527898\"},{\"path\":\"serverless-single-page-app-plugin\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"08763fcfba643a06a452398517019bea4a5850ba\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/08763fcfba643a06a452398517019bea4a5850ba\"},{\"path\":\"serverless.yml\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"20b22c5fad229f35d029bf6614d333d82fe8a987\",\"size\":7803,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/20b22c5fad229f35d029bf6614d333d82fe8a987\"},{\"path\":\"src\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"8cdb35a88232c0f32f12f130c92c7cc55f97f471\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/8cdb35a88232c0f32f12f130c92c7cc55f97f471\"},{\"path\":\"static\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"139040296ae3796be0e107be98572f0e6bb28901\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/139040296ae3796be0e107be98572f0e6bb28901\"},{\"path\":\"utils\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"a592549c9f74db40b51efefcda2fd76810405f27\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/a592549c9f74db40b51efefcda2fd76810405f27\"},{\"path\":\"yarn.lock\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"eff9f6e3c4ee2cb7bd2685c8f93d6d68af8aad37\",\"size\":923955,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/eff9f6e3c4ee2cb7bd2685c8f93d6d68af8aad37\"}],\"truncated\":false}", "status": 200 }, { @@ -560,7 +560,7 @@ "Vary": "Origin,Accept,Authorization,Cookie,X-GitHub-OTP,Accept-Encoding,Accept,X-Requested-With", "content-length": "623" }, - "response": "{\n \"sha\": \"406a244d1522a3c809efab0c9ce46bbd86aa9c1d\",\n \"node_id\": \"MDQ6QmxvYjI1NTA3NTk0Mzo0MDZhMjQ0ZDE1MjJhM2M4MDllZmFiMGM5Y2U0NmJiZDg2YWE5YzFk\",\n \"size\": 188,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/406a244d1522a3c809efab0c9ce46bbd86aa9c1d\",\n \"content\": \"Ly5naXRodWIgZXhwb3J0LWlnbm9yZQovLmdpdGF0dHJpYnV0ZXMgZXhwb3J0\\nLWlnbm9yZQovLmVkaXRvcmNvbmZpZyBleHBvcnQtaWdub3JlCi8udHJhdmlz\\nLnltbCBleHBvcnQtaWdub3JlCioqLyouanMuc25hcCBleHBvcnQtaWdub3Jl\\nCnN0YXRpYy9tZWRpYS8qKiBmaWx0ZXI9bGZzIGRpZmY9bGZzIG1lcmdlPWxm\\ncyAtdGV4dAo=\\n\",\n \"encoding\": \"base64\"\n}\n", + "response": "{\"sha\":\"406a244d1522a3c809efab0c9ce46bbd86aa9c1d\",\"node_id\":\"MDQ6QmxvYjI4Njc3MTExNjo0MDZhMjQ0ZDE1MjJhM2M4MDllZmFiMGM5Y2U0NmJiZDg2YWE5YzFk\",\"size\":188,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/406a244d1522a3c809efab0c9ce46bbd86aa9c1d\",\"content\":\"Ly5naXRodWIgZXhwb3J0LWlnbm9yZQovLmdpdGF0dHJpYnV0ZXMgZXhwb3J0\\nLWlnbm9yZQovLmVkaXRvcmNvbmZpZyBleHBvcnQtaWdub3JlCi8udHJhdmlz\\nLnltbCBleHBvcnQtaWdub3JlCioqLyouanMuc25hcCBleHBvcnQtaWdub3Jl\\nCnN0YXRpYy9tZWRpYS8qKiBmaWx0ZXI9bGZzIGRpZmY9bGZzIG1lcmdlPWxm\\ncyAtdGV4dAo=\\n\",\"encoding\":\"base64\"}", "status": 200 }, { @@ -571,15 +571,50 @@ "Access-Control-Allow-Credentials": "true", "Access-Control-Allow-Origin": "*", "Alt-Svc": "clear", - "Content-Length": "4", - "Content-Type": "application/vnd.git-lfs+json", + "Content-Length": "139", + "Content-Type": "application/json", "Via": "1.1 google", - "Age": "2", + "Age": "0", "Connection": "keep-alive", "Server": "Netlify", "Vary": "Origin" }, - "response": "null", + "response": "{\"code\":404,\"msg\":\"object 0ac8ecba-afbd-4599-b0ef-9aa2e8969a89/b1d40c19b912d2130d1bed8ff1a62a55c7d932978502e1d8559eb77951c5e8d3 not found\"}", + "status": 404 + }, + { + "body": "{\"operation\":\"upload\",\"transfers\":[\"basic\"],\"objects\":[{\"size\":3470,\"oid\":\"b1d40c19b912d2130d1bed8ff1a62a55c7d932978502e1d8559eb77951c5e8d3\"}]}", + "method": "POST", + "url": "/.netlify/large-media/objects/batch", + "headers": { + "Access-Control-Allow-Credentials": "true", + "Access-Control-Allow-Origin": "*", + "Alt-Svc": "clear", + "Content-Length": "1058", + "Content-Type": "application/vnd.git-lfs+json", + "Via": "1.1 google", + "Age": "0", + "Connection": "keep-alive", + "Server": "Netlify", + "Vary": "Origin" + }, + "response": "{\"transfer\":\"basic\",\"objects\":[{\"oid\":\"b1d40c19b912d2130d1bed8ff1a62a55c7d932978502e1d8559eb77951c5e8d3\",\"size\":3470,\"authenticated\":true,\"actions\":{\"upload\":{\"href\":\"https://nf-git-lfs-jfk-production.s3.amazonaws.com/0ac8ecba-afbd-4599-b0ef-9aa2e8969a89/b1d40c19b912d2130d1bed8ff1a62a55c7d932978502e1d8559eb77951c5e8d3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAI45QHABMIC4EDVSA%2F20200811%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20200811T145531Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=dcbbcdd0133682dd9bc279e9c13284faf8db1fce23b2e1174c77b2ff1d4c7d86\",\"expires_in\":900},\"verify\":{\"href\":\"https://0ac8ecba-afbd-4599-b0ef-9aa2e8969a89.netlify.app/.netlify/large-media/verify\",\"header\":{\"Authorization\":\"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBfbWV0YWRhdGEiOnsicHJvdmlkZXIiOiJlbWFpbCJ9LCJlbWFpbCI6Im5ldGxpZnlDTVNAbmV0bGlmeS5jb20iLCJleHAiOjE1OTcxNjEzMjgsInN1YiI6IjcwOTVkMjA2LWY2YTgtNGMwMC1hNzExLWZkZTkwNzEwMGRjMCIsInVzZXJfbWV0YWRhdGEiOnt9fQ.h5RjzMBEqYN8-MsWUGdXzwmCsCIc_VjIbZu_hhVXoDw\"}}}}]}", + "status": 200 + }, + { + "body": "{\"type\":\"BINARY\",\"base64Bytes\":\"iVBORw0KGgoAAAANSUhEUgAAAJcAAACXCAMAAAAvQTlLAAAAwFBMVEX///85rbswtrpAp71DpL03sLs8q7xGob4tubkzs7o+qLwqvLknv7gkwrgpvbhIn75Mm7/x+vrs9fhktcfn9/bg8PMtp7lSr8IWw7U7yL3Y7vAAq7JSzMM+w75MwMGj2dxmv8iLx9O73ORcrMRorMeJ2tJr1MlTx8N8z8+45uWs4OBQu8HH5ulTuMMXqbaW0Ndxvsuq1t4jnrd6ss2TwNUwj7ii4tzP8Ox00syR19ZkxseByNCezdnP5Ox2tsyDv9FhQXEFAAAMiUlEQVR4nO2ci1biyBaGDTcBUaxAEjuoQLQHEQhJ2j7TCLTv/1anau8kdU3wwsW1zvlnVg9UKlVf/r1rVyFjn539X6cSOTWASf2f/9z+87N/agxF5OcN6uf3Mu32JtPtqVEE9X/ccP34NrEktzeibr9JKCW3vo9j1K1L+g/X5bdwrP/jkkqgYjq9Y/3bSxSz7PImfXN5e2Kw/qWoG+H1ScFyt3T9PCXWj0KsU/pV4tblf06HRX5cdoqw/kClOIlnZNKhKovi/O4EYKQDMlsGUezfdTpHL7D9SSeXhoX1/olemhzZMXLXESVRdS7/ZV3+hSt3R3VMdEsTli5yi++OmWOKW4omYNEqfXd1PMdK3ep0IIq+wHkkx8gVVeeqCOsJ+qToV6CjONaf4GQFYHdiFNOex3CM3F1dlIFNgV3Curg4fI71JxdUV1dFaH+g16tAdcVuOLRj5O4CpZPBqyuY/zlnSrEO7Ri6JYMBW4aHUdSoDu3Y08WVESzDm0CvPzkU731gx/zVnTCVxgaeTDWvmJrN1QG5aIY9TwrJnqHDHTNKhrpoUq75Qbmopk8XYoRyrFe4+qQ6hW41m4eJI3ld8cx1VtrMVxcdn12am6GoDoJl39ORX+f5M5PpHxUM8ofcFWHdA7WzXyxynw7+zMn8V2n69BhhhqKCffNpv9Hs3/PxVzx/+8MJi9pk9Tx9XmEUC7GasCgmzfs91jEiYLFwTvmV6eSCW0g7FlGly5FZvjfH+rNKpSLN0RzyPBGnWWVJ35SZmJifdpOONNuTY+S+UtHA7p98wwMwIBMTu4E9yZxxVfbjWB+xNLLm/VR78FcTURp8BvOMA+0jx0iOZSBbKU8+L+aC5bhKx/m6Y30RS+VqqsWSFHNBdXvKBvqqY5JbpjRT+j8VcrE1TF7zYb7mWL/V0rgoGYd71e5Y3etM7D6W9n0+TKvyBcfIfUsHkz0zPMuzTFYBrAHzxx9kVFSfd6w/a6FK0AzV4uzsXx7O/AbWHgw4FgX7pGMkwzKCpWRP5nudIUY77w0Bz5YjDjqofMqx/n1LkIkM2KbCLVPhwEHfNIWeS9b0yqFardnwc1iz1m4uKmFF+pTzdSgeOAZ5N8DnVIPZ/JPpZbcUVcxs+enCTot5RdihyHAmdLNTrMFs/YVj2FwFM3Jhfk3n09VMaBQPHGgaY/UHmFbCpu8sP27bcvAOMjwM6u3C3P5qNkTGUWvQGvHjG5mPBuFHThc23EtmGpfGBoc93xhgIZz51EMpxqNBnWr2bsf69boN8xm5RDKM4szIVRnM9ANHLn9No1FHvdMxsqiHa3i1DAvIMjYYcWjGYpqtzAk+X8MgKdfoXY7ZrGsIATobFXIBG6SNOYogluUj7eOsM2wNOBSbDMOz0y0QPINfL+OCo97ZazEUaCC74a+BSsCiWux0zF6Eqbnwdhi2CtEGEKNhixFkxQ1etipSN+W5hzOVijq22OFYjlWvx9AwqhdxDWBr0cqv0mmw0uJIy0NYV1UOZi8s3hWWtAMvTVPi+i7PwNnQPJ2zXihcVhmYPbKsek42grY4NIMN8HOsXnt5j9m8eC47ngmm0VmtUWFnYoHyoEOgWCRNZHDRMZdekGkPJGthu/ZH9RQN57UKkp8G0ZLJhEgCmgCHUVwX2DVoCfvQfJ1tgs4oDEfC8cZfWiHHKnCM5FgZmIXLdxpysIysPIojcd+e0U6sN5kv02HWwiE3GFlhNmvDVC7sRaPRsGS0NJJraflgkGBOUxTpChQ2xiWjas2YEc/5KNQ04TQ5X4cpWaOhJ7/dsGQuBINF3lcWT6u1gA1obcCaiefCpxarVC1cQUt5kCHfFe3lArEogwJmL9xGwwCGzs6VeoO4vrZ70k2HR2I+atXT+gm2r6UhaGKteWWzgwjnd5VQNrCZEUtk6QYuRxKfn56mlL1AWIH9ofgYQ+heV2TVFwGncCJgcBsiVpRhaZ6FATDIkYT5l5yV8oUzaQXWxQcBe526LFayrHCx5HfZsee6DTfiWGMRSw2mrUYyjDGKQktdPIXGai0P2RC+pbRm5SHaCrGnprnj3EIZSyHTIrmABh6W0FryFegvF9rmF7ILgdQsTuD2Yk62HbtJZuFY4xLB0B4hPQAizqdZxGKuq0z5g/CwW5Ig2xtjMZxxnl06mEjmiHFDTDt7JywqEhjOCfVs7YxMWFCcgMyN9A+U9nzjefSSSpfdjefc9IExiumiF7N2aWLiT2LpVlniZK7rxYZ9iGyDTdTW2DCSG4xkyJRFkRZtYRxlBcpcYGmoUVkNRTSc5u+QbCceq8bBCLiBL4P5BpONrUCfF3a6AgupaEFgdzthOVNmWi8wkkFU43FPYGOjKFV4bQkB9JclUBB5ZmvwHqw2lettisioAzTlIoaPA1i8poBx8goso4IDH+u33AkFVFSJMFccm75Q8mnKsajSgczu2rFerJBGTHJYjuOdVBmXUO/PSLvq9caBoy1VwlLOasRqO9g25gdJ+Q9Z7GYSlULlZrXbnvzkvSqLrRstA18/nBmOa2QehTqCSS78iGlRwiRi9dSDjoftLiWOqHPGuHGqeLEbKONiY/mNYq62IE8/GPaEy7TIRbHJuSyE76aiXOyGuWFH0bmqqlvoWFUggypG4QrYxg33PUywz7D+cQGX6BXNceMHD8kxhtZglcL11qbexI+XERYSM1EmPE9FZi55QpNbMFdbAWOuNZaFuUZsP1jT3YN2Kk5qF9ayEUrBahemDa5KMc+iwm2B09H9gTlXxAUj6FcVpqoxt3IwryqSjY3fZhid28ZQgtX5aQt8T6u2tzUsc24JjmVgvQ3vqdwT9JZzw4Kwg+XYk9jc9MkCtwyKUpW6BWNTxyha0gt4xyBS7tqwyRfRxvDdgO0EsOsjSHZs8d1iKEa1wy0YuFdNvA0PoBPTWhspAPhpk80exVt99zpzAlisfJS0fulQiLXLLQQTznvOG+wDap5t8+dnbL1oY0hE298K79hnCCMS6B1Y4siBl8D9eKQPfMfxA7ROSRhGNw62JbuX4xZT9T70nQfZZGsA7xu7bc9rZx/vetrKZykVjeMiNtc1Q70ntwSo7VuS3pZGcZ6kI2JByvZ5Vh4V57xx4OtTke3mrdd2E5XqQ1hnOVW1iudHwjcpF+yL9cDkHdw2TbnAuFg3vXaSCFTJh7DSciFEf5zwefFEGRVyZXQFIaWV5M2rpnQfyy0Klj8QhM1no7SzkgtNjrcDrF3yAYLurGNqXPLBlXjGAodcGEVuH2NLYLTtLi6hvGwDx0Cw3XziS1vbqzEMCEYsJir1DSMpxtYoLwPbVpOq97bZdQx+n8hDrVrDkCVVWQl+Ase1UC2g4v3G6f00cN5ma3LuQ7K9pAcvelVV+LOgbYL2wb9t/K8sMDaQFmBS7VHnvsRGcN/a1DSudB1tVCNVQXa+yW00CrUkqY3LZt4Fxv6w6TgaWRbJcqwkVrlqmT6+ElVFfCxxSvxZyg6urQBfE/Xw5f8DLBBGqwpoGMm4NJJQUByViWF92a2zB3XMWhXwkje4HJVysR5bbYA9uEXTSwcD52oQJFpD9FWB5LQX/LAhSA7g1hnUMbNwy02n1UJFhYtjo3Ltwy0ms2N0WozkWwE27QBVuXcQt5iKHMN5iVfIBZFWnNyXW0xFjj2IkTQIdgX56v7cYipy7C9cHRdgAYMjce3TLSb74dw0cxrJAi6gFt08369bMLcZDEPlm7lwOYpYB/hdCuoYU03Bw0huaibh7kh52G1U+3eLiSAYTlEDvvOsRhl2hXQ5ZncxrAP9BpHNp8hFIfEohoFK4wW2np/b0k2HcYuJ1HSwzIZNjZNmrwA4f3vA37cyOXZ+/gLX/urAItfh3CoEq+EGrrXDNhUfA6vIMSIQcMGKeDsKlrS+dkUSbESsI/yGrdEx/FmK3NZ1Mq7Du8VEDFw13MCltkc7Yz3Sb3Dbj10NDI9iL+KFvwwn6CLfUUS6GlgXI/mgor50j5FbmahjlAzokLDb7eLPUnhbF5fj8dwCsK6mdAPnDbAc/x4VCx1ThBs4b2fLkRz9L8YwOIYbePbu+thEGZjm2CO055E8EZfBMYzkLzHfTgKmOZZu4BDGkp+uHhwszSQeSfwyhDVcb3fdfUiwx2sBjf6BG/jLdff6uHVLA6Mw8M81haJ/oEs2fXFSLFqgHq8FdVOe7ePJ/8Y0u3stCSN5YrcAQXLs+vfub+qPJNWxb+AVSnHs5dQ8uezv6RfVr99Zev06NYqsFwT7/X2CmMp5+fXr18ue/3qJ/ejktfR/WP8FOoK2QLx2JrUAAAAASUVORK5CYII=\",\"contentType\":\"image/png\"}", + "method": "PUT", + "url": "/0ac8ecba-afbd-4599-b0ef-9aa2e8969a89/b1d40c19b912d2130d1bed8ff1a62a55c7d932978502e1d8559eb77951c5e8d3?X-Amz-Date=20200811T145531Z&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Signature=dcbbcdd0133682dd9bc279e9c13284faf8db1fce23b2e1174c77b2ff1d4c7d86&X-Amz-SignedHeaders=host&X-Amz-Credential=AKIAI45QHABMIC4EDVSA/20200811/us-east-1/s3/aws4_request&X-Amz-Expires=900", + "headers": { + "x-amz-id-2": "QPWWm5kx9Wsc9l1nNQXqC6SzZM6hOonpHpdNd8TvUitTco+ekpqdPqih9MuUfdARe9g069JT/+o=", + "x-amz-request-id": "505587D3C8618D25", + "Access-Control-Allow-Origin": "*", + "Access-Control-Allow-Methods": "PUT, GET", + "Access-Control-Max-Age": "3000", + "Vary": "Origin, Access-Control-Request-Headers, Access-Control-Request-Method", + "Content-Length": "0", + "Server": "AmazonS3" + }, "status": 200 }, { @@ -611,7 +646,7 @@ "Connection": "keep-alive", "Vary": "Origin,Accept,Authorization,Cookie,X-GitHub-OTP,Accept-Encoding,Accept,X-Requested-With" }, - "response": "{\n \"sha\": \"a137fb3458d391f2740ecc6ebbda52107d65d6ef\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/a137fb3458d391f2740ecc6ebbda52107d65d6ef\"\n}\n", + "response": "{\"sha\":\"a137fb3458d391f2740ecc6ebbda52107d65d6ef\",\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/a137fb3458d391f2740ecc6ebbda52107d65d6ef\"}", "status": 201 }, { @@ -641,11 +676,11 @@ "Vary": "Origin,Accept,Authorization,Cookie,X-GitHub-OTP,Accept-Encoding,Accept,X-Requested-With", "content-length": "4757" }, - "response": "{\n \"name\": \"master\",\n \"commit\": {\n \"sha\": \"919b7ce0846f25371e0585e302d8fc7e63fb515c\",\n \"node_id\": \"MDY6Q29tbWl0MjU1MDc1OTQzOjkxOWI3Y2UwODQ2ZjI1MzcxZTA1ODVlMzAyZDhmYzdlNjNmYjUxNWM=\",\n \"commit\": {\n \"author\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2020-04-12T12:18:55Z\"\n },\n \"committer\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2020-04-12T12:18:55Z\"\n },\n \"message\": \"add .lfsconfig\",\n \"tree\": {\n \"sha\": \"491f2279cd0955712449776a54f8b58b3bc38d4d\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/491f2279cd0955712449776a54f8b58b3bc38d4d\"\n },\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/919b7ce0846f25371e0585e302d8fc7e63fb515c\",\n \"comment_count\": 0,\n \"verification\": {\n \"verified\": false,\n \"reason\": \"unsigned\",\n \"signature\": null,\n \"payload\": null\n }\n },\n \"url\": \"https://api.github.com/repos/owner/repo/commits/919b7ce0846f25371e0585e302d8fc7e63fb515c\",\n \"html_url\": \"https://github.com/owner/repo/commit/919b7ce0846f25371e0585e302d8fc7e63fb515c\",\n \"comments_url\": \"https://api.github.com/repos/owner/repo/commits/919b7ce0846f25371e0585e302d8fc7e63fb515c/comments\",\n \"author\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"committer\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"parents\": [\n {\n \"sha\": \"b33a2edece736f6f228c7ec28c385c57d5f890af\",\n \"url\": \"https://api.github.com/repos/owner/repo/commits/b33a2edece736f6f228c7ec28c385c57d5f890af\",\n \"html_url\": \"https://github.com/owner/repo/commit/b33a2edece736f6f228c7ec28c385c57d5f890af\"\n }\n ]\n },\n \"_links\": {\n \"self\": \"https://api.github.com/repos/owner/repo/branches/master\",\n \"html\": \"https://github.com/owner/repo/tree/master\"\n },\n \"protected\": false,\n \"protection\": {\n \"enabled\": false,\n \"required_status_checks\": {\n \"enforcement_level\": \"off\",\n \"contexts\": [\n\n ]\n }\n },\n \"protection_url\": \"https://api.github.com/repos/owner/repo/branches/master/protection\"\n}\n", + "response": "{\"name\":\"master\",\"commit\":{\"sha\":\"53145723604c528d6ce5f8d034b3e86234aa170a\",\"node_id\":\"MDY6Q29tbWl0Mjg2NzcxMTE2OjUzMTQ1NzIzNjA0YzUyOGQ2Y2U1ZjhkMDM0YjNlODYyMzRhYTE3MGE=\",\"commit\":{\"author\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2020-08-11T14:50:01Z\"},\"committer\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2020-08-11T14:50:01Z\"},\"message\":\"add .lfsconfig\",\"tree\":{\"sha\":\"9801bc49ad87a5f15cbe4e701e0a9899e7500038\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/9801bc49ad87a5f15cbe4e701e0a9899e7500038\"},\"url\":\"https://api.github.com/repos/owner/repo/git/commits/53145723604c528d6ce5f8d034b3e86234aa170a\",\"comment_count\":0,\"verification\":{\"verified\":false,\"reason\":\"unsigned\",\"signature\":null,\"payload\":null}},\"url\":\"https://api.github.com/repos/owner/repo/commits/53145723604c528d6ce5f8d034b3e86234aa170a\",\"html_url\":\"https://github.com/owner/repo/commit/53145723604c528d6ce5f8d034b3e86234aa170a\",\"comments_url\":\"https://api.github.com/repos/owner/repo/commits/53145723604c528d6ce5f8d034b3e86234aa170a/comments\",\"author\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"committer\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"parents\":[{\"sha\":\"cb2e8e6e165648920f696fe4c50113d15ee95937\",\"url\":\"https://api.github.com/repos/owner/repo/commits/cb2e8e6e165648920f696fe4c50113d15ee95937\",\"html_url\":\"https://github.com/owner/repo/commit/cb2e8e6e165648920f696fe4c50113d15ee95937\"}]},\"_links\":{\"self\":\"https://api.github.com/repos/owner/repo/branches/master\",\"html\":\"https://github.com/owner/repo/tree/master\"},\"protected\":false,\"protection\":{\"enabled\":false,\"required_status_checks\":{\"enforcement_level\":\"off\",\"contexts\":[]}},\"protection_url\":\"https://api.github.com/repos/owner/repo/branches/master/protection\"}", "status": 200 }, { - "body": "{\"base_tree\":\"919b7ce0846f25371e0585e302d8fc7e63fb515c\",\"tree\":[{\"path\":\"static/media/netlify.png\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"a137fb3458d391f2740ecc6ebbda52107d65d6ef\"}]}", + "body": "{\"base_tree\":\"53145723604c528d6ce5f8d034b3e86234aa170a\",\"tree\":[{\"path\":\"static/media/netlify.png\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"a137fb3458d391f2740ecc6ebbda52107d65d6ef\"}]}", "method": "POST", "url": "/.netlify/git/github/git/trees", "headers": { @@ -657,7 +692,7 @@ "Content-Length": "12590", "Content-Security-Policy": "default-src 'none'", "Content-Type": "application/json; charset=utf-8", - "Location": "https://api.github.com/repos/owner/repo/git/trees/229c33adc8c6f556237c21d8cb19dc7425f058fb", + "Location": "https://api.github.com/repos/owner/repo/git/trees/4f7bf36ab5dcec18504ee0a215d39184cbcedd83", "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", "Server": "Netlify", "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", @@ -673,11 +708,11 @@ "Connection": "keep-alive", "Vary": "Origin,Accept,Authorization,Cookie,X-GitHub-OTP,Accept-Encoding,Accept,X-Requested-With" }, - "response": "{\n \"sha\": \"229c33adc8c6f556237c21d8cb19dc7425f058fb\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/229c33adc8c6f556237c21d8cb19dc7425f058fb\",\n \"tree\": [\n {\n \"path\": \".circleci\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"2dfd51ca0c35b04f9a6b68bc264ad1457e8f29ba\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/2dfd51ca0c35b04f9a6b68bc264ad1457e8f29ba\"\n },\n {\n \"path\": \".eslintignore\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"80b4531b026d19f8fa589efd122e76199d23f967\",\n \"size\": 39,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/80b4531b026d19f8fa589efd122e76199d23f967\"\n },\n {\n \"path\": \".eslintrc.js\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"370684994aaed5b858da3a006f48cfa57e88fd27\",\n \"size\": 414,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/370684994aaed5b858da3a006f48cfa57e88fd27\"\n },\n {\n \"path\": \".flowconfig\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"14aa2ac4cc0e15223ad98630a6f1325fc81f8043\",\n \"size\": 283,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/14aa2ac4cc0e15223ad98630a6f1325fc81f8043\"\n },\n {\n \"path\": \".gitattributes\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"406a244d1522a3c809efab0c9ce46bbd86aa9c1d\",\n \"size\": 188,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/406a244d1522a3c809efab0c9ce46bbd86aa9c1d\"\n },\n {\n \"path\": \".github\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"4ebeece548b52b20af59622354530a6d33b50b43\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/4ebeece548b52b20af59622354530a6d33b50b43\"\n },\n {\n \"path\": \".gitignore\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"c071ba35b0e49899bab6d610a68eef667dbbf157\",\n \"size\": 169,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/c071ba35b0e49899bab6d610a68eef667dbbf157\"\n },\n {\n \"path\": \".lfsconfig\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"9bb199dd631d549fd5615b07371e631e4f1b2122\",\n \"size\": 91,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/9bb199dd631d549fd5615b07371e631e4f1b2122\"\n },\n {\n \"path\": \".prettierignore\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"393f050e123d998cf8c8b362ff95cc8ac4d250e5\",\n \"size\": 45,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/393f050e123d998cf8c8b362ff95cc8ac4d250e5\"\n },\n {\n \"path\": \".prettierrc\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"e52ad05bb13b084d7949dd76e1b2517455162150\",\n \"size\": 223,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/e52ad05bb13b084d7949dd76e1b2517455162150\"\n },\n {\n \"path\": \".stylelintrc.json\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"4b4c9698d10d756f5faa025659b86375428ed0a7\",\n \"size\": 718,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/4b4c9698d10d756f5faa025659b86375428ed0a7\"\n },\n {\n \"path\": \".vscode\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"286e97ec0113ea8242b41ac222e2c3e8077e6f1e\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/286e97ec0113ea8242b41ac222e2c3e8077e6f1e\"\n },\n {\n \"path\": \"CHANGELOG.md\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"070a5d4f0eacd2dc0be81ae8996f8982de43046e\",\n \"size\": 2113,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/070a5d4f0eacd2dc0be81ae8996f8982de43046e\"\n },\n {\n \"path\": \"CODE_OF_CONDUCT.md\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"92bc7565ff0ee145a0041b5179a820f14f39ab22\",\n \"size\": 3355,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/92bc7565ff0ee145a0041b5179a820f14f39ab22\"\n },\n {\n \"path\": \"CONTRIBUTING.md\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"8552aa241254a61258e1ff9666ab36f32fb1e3b9\",\n \"size\": 3548,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/8552aa241254a61258e1ff9666ab36f32fb1e3b9\"\n },\n {\n \"path\": \"LICENSE\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"42d85938357b49977c126ca03b199129082d4fb8\",\n \"size\": 1091,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/42d85938357b49977c126ca03b199129082d4fb8\"\n },\n {\n \"path\": \"README.md\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"19df50a78654c8d757ca7f38447aa3d09c7abcce\",\n \"size\": 3698,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/19df50a78654c8d757ca7f38447aa3d09c7abcce\"\n },\n {\n \"path\": \"backend\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"b9f1cfbf4d901fe13c3af4e0d8f46bbe5a6addd6\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/b9f1cfbf4d901fe13c3af4e0d8f46bbe5a6addd6\"\n },\n {\n \"path\": \"config.js\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"58afd573bbb69fcca000efd0f5d90b93c93a98dd\",\n \"size\": 853,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/58afd573bbb69fcca000efd0f5d90b93c93a98dd\"\n },\n {\n \"path\": \"content\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"0294ef106c58743907a5c855da1eb0f87b0b6dfc\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/0294ef106c58743907a5c855da1eb0f87b0b6dfc\"\n },\n {\n \"path\": \"flow-typed\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"86c32fd6c3118be5e0dbbb231a834447357236c6\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/86c32fd6c3118be5e0dbbb231a834447357236c6\"\n },\n {\n \"path\": \"flow\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"0af45ad00d155c8d8c7407d913ff85278244c9ce\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/0af45ad00d155c8d8c7407d913ff85278244c9ce\"\n },\n {\n \"path\": \"gatsby-browser.js\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"9bd2c9dce175f04980e91cd9dc295a299e3cdb80\",\n \"size\": 90,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/9bd2c9dce175f04980e91cd9dc295a299e3cdb80\"\n },\n {\n \"path\": \"gatsby-config.js\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"3929038f9ab6451b2b256dfba5830676e6eecbee\",\n \"size\": 7256,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/3929038f9ab6451b2b256dfba5830676e6eecbee\"\n },\n {\n \"path\": \"gatsby-node.js\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"14a207883c2093d2cc071bc5a464e165bcc1fead\",\n \"size\": 409,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/14a207883c2093d2cc071bc5a464e165bcc1fead\"\n },\n {\n \"path\": \"gatsby\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"4f23c06cd1740bf78304d2c0b29bf6bfdf427981\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/4f23c06cd1740bf78304d2c0b29bf6bfdf427981\"\n },\n {\n \"path\": \"jest\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"5a6bc7be680ba053df0f8ffdc2aaa80e62c3e819\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/5a6bc7be680ba053df0f8ffdc2aaa80e62c3e819\"\n },\n {\n \"path\": \"netlify-functions\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"a96c1f09300fa4f9e4c786d69bcbe51eaff7f14a\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/a96c1f09300fa4f9e4c786d69bcbe51eaff7f14a\"\n },\n {\n \"path\": \"netlify.toml\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"2a9e36ada28c535fc074b408daa2a0cb97ecf47c\",\n \"size\": 223,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/2a9e36ada28c535fc074b408daa2a0cb97ecf47c\"\n },\n {\n \"path\": \"package.json\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"3a994b3aefb183931a30f4d75836d6f083aaaabb\",\n \"size\": 6947,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/3a994b3aefb183931a30f4d75836d6f083aaaabb\"\n },\n {\n \"path\": \"postcss-config.js\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"d216501e9b351a72e00ba0b7459a6500e27e7da2\",\n \"size\": 703,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/d216501e9b351a72e00ba0b7459a6500e27e7da2\"\n },\n {\n \"path\": \"renovate.json\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"9d78c55fe6566ea98907ef63d56a94d7b3cbe527\",\n \"size\": 536,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/9d78c55fe6566ea98907ef63d56a94d7b3cbe527\"\n },\n {\n \"path\": \"serverless-scripts\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"ee3701f2fbfc7196ba340f6481d1387d20527898\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/ee3701f2fbfc7196ba340f6481d1387d20527898\"\n },\n {\n \"path\": \"serverless-single-page-app-plugin\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"08763fcfba643a06a452398517019bea4a5850ba\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/08763fcfba643a06a452398517019bea4a5850ba\"\n },\n {\n \"path\": \"serverless.yml\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"20b22c5fad229f35d029bf6614d333d82fe8a987\",\n \"size\": 7803,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/20b22c5fad229f35d029bf6614d333d82fe8a987\"\n },\n {\n \"path\": \"src\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"8cdb35a88232c0f32f12f130c92c7cc55f97f471\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/8cdb35a88232c0f32f12f130c92c7cc55f97f471\"\n },\n {\n \"path\": \"static\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"18d19890ff94b8a99748bfbb80d10700c6d03775\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/18d19890ff94b8a99748bfbb80d10700c6d03775\"\n },\n {\n \"path\": \"utils\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"a592549c9f74db40b51efefcda2fd76810405f27\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/a592549c9f74db40b51efefcda2fd76810405f27\"\n },\n {\n \"path\": \"yarn.lock\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"0849d700e667c3114f154c31b3e70a080fe1629b\",\n \"size\": 859666,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/0849d700e667c3114f154c31b3e70a080fe1629b\"\n }\n ],\n \"truncated\": false\n}\n", + "response": "{\"sha\":\"4f7bf36ab5dcec18504ee0a215d39184cbcedd83\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/4f7bf36ab5dcec18504ee0a215d39184cbcedd83\",\"tree\":[{\"path\":\".circleci\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"2dfd51ca0c35b04f9a6b68bc264ad1457e8f29ba\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/2dfd51ca0c35b04f9a6b68bc264ad1457e8f29ba\"},{\"path\":\".eslintignore\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"80b4531b026d19f8fa589efd122e76199d23f967\",\"size\":39,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/80b4531b026d19f8fa589efd122e76199d23f967\"},{\"path\":\".eslintrc.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"370684994aaed5b858da3a006f48cfa57e88fd27\",\"size\":414,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/370684994aaed5b858da3a006f48cfa57e88fd27\"},{\"path\":\".flowconfig\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"14aa2ac4cc0e15223ad98630a6f1325fc81f8043\",\"size\":283,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/14aa2ac4cc0e15223ad98630a6f1325fc81f8043\"},{\"path\":\".gitattributes\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"406a244d1522a3c809efab0c9ce46bbd86aa9c1d\",\"size\":188,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/406a244d1522a3c809efab0c9ce46bbd86aa9c1d\"},{\"path\":\".github\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"4ebeece548b52b20af59622354530a6d33b50b43\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/4ebeece548b52b20af59622354530a6d33b50b43\"},{\"path\":\".gitignore\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"c071ba35b0e49899bab6d610a68eef667dbbf157\",\"size\":169,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/c071ba35b0e49899bab6d610a68eef667dbbf157\"},{\"path\":\".lfsconfig\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"e4872af721c959f181c81a83334e6553f8afd06b\",\"size\":91,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/e4872af721c959f181c81a83334e6553f8afd06b\"},{\"path\":\".prettierignore\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"393f050e123d998cf8c8b362ff95cc8ac4d250e5\",\"size\":45,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/393f050e123d998cf8c8b362ff95cc8ac4d250e5\"},{\"path\":\".prettierrc\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"e52ad05bb13b084d7949dd76e1b2517455162150\",\"size\":223,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/e52ad05bb13b084d7949dd76e1b2517455162150\"},{\"path\":\".stylelintrc.json\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"4b4c9698d10d756f5faa025659b86375428ed0a7\",\"size\":718,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/4b4c9698d10d756f5faa025659b86375428ed0a7\"},{\"path\":\".vscode\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"286e97ec0113ea8242b41ac222e2c3e8077e6f1e\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/286e97ec0113ea8242b41ac222e2c3e8077e6f1e\"},{\"path\":\"CHANGELOG.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"070a5d4f0eacd2dc0be81ae8996f8982de43046e\",\"size\":2113,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/070a5d4f0eacd2dc0be81ae8996f8982de43046e\"},{\"path\":\"CODE_OF_CONDUCT.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"92bc7565ff0ee145a0041b5179a820f14f39ab22\",\"size\":3355,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/92bc7565ff0ee145a0041b5179a820f14f39ab22\"},{\"path\":\"CONTRIBUTING.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"8552aa241254a61258e1ff9666ab36f32fb1e3b9\",\"size\":3548,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/8552aa241254a61258e1ff9666ab36f32fb1e3b9\"},{\"path\":\"LICENSE\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"42d85938357b49977c126ca03b199129082d4fb8\",\"size\":1091,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/42d85938357b49977c126ca03b199129082d4fb8\"},{\"path\":\"README.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"19df50a78654c8d757ca7f38447aa3d09c7abcce\",\"size\":3698,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/19df50a78654c8d757ca7f38447aa3d09c7abcce\"},{\"path\":\"backend\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"b9f1cfbf4d901fe13c3af4e0d8f46bbe5a6addd6\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/b9f1cfbf4d901fe13c3af4e0d8f46bbe5a6addd6\"},{\"path\":\"config.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"58afd573bbb69fcca000efd0f5d90b93c93a98dd\",\"size\":853,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/58afd573bbb69fcca000efd0f5d90b93c93a98dd\"},{\"path\":\"content\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"0294ef106c58743907a5c855da1eb0f87b0b6dfc\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/0294ef106c58743907a5c855da1eb0f87b0b6dfc\"},{\"path\":\"flow-typed\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"86c32fd6c3118be5e0dbbb231a834447357236c6\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/86c32fd6c3118be5e0dbbb231a834447357236c6\"},{\"path\":\"flow\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"0af45ad00d155c8d8c7407d913ff85278244c9ce\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/0af45ad00d155c8d8c7407d913ff85278244c9ce\"},{\"path\":\"gatsby-browser.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"9bd2c9dce175f04980e91cd9dc295a299e3cdb80\",\"size\":90,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/9bd2c9dce175f04980e91cd9dc295a299e3cdb80\"},{\"path\":\"gatsby-config.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"3929038f9ab6451b2b256dfba5830676e6eecbee\",\"size\":7256,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/3929038f9ab6451b2b256dfba5830676e6eecbee\"},{\"path\":\"gatsby-node.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"14a207883c2093d2cc071bc5a464e165bcc1fead\",\"size\":409,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/14a207883c2093d2cc071bc5a464e165bcc1fead\"},{\"path\":\"gatsby\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"4f23c06cd1740bf78304d2c0b29bf6bfdf427981\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/4f23c06cd1740bf78304d2c0b29bf6bfdf427981\"},{\"path\":\"jest\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"5a6bc7be680ba053df0f8ffdc2aaa80e62c3e819\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/5a6bc7be680ba053df0f8ffdc2aaa80e62c3e819\"},{\"path\":\"netlify-functions\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"a96c1f09300fa4f9e4c786d69bcbe51eaff7f14a\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/a96c1f09300fa4f9e4c786d69bcbe51eaff7f14a\"},{\"path\":\"netlify.toml\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"2a9e36ada28c535fc074b408daa2a0cb97ecf47c\",\"size\":223,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/2a9e36ada28c535fc074b408daa2a0cb97ecf47c\"},{\"path\":\"package.json\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"d8b6e6e922c8d166290f99228090139a3358bfd3\",\"size\":6951,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/d8b6e6e922c8d166290f99228090139a3358bfd3\"},{\"path\":\"postcss-config.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"d216501e9b351a72e00ba0b7459a6500e27e7da2\",\"size\":703,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/d216501e9b351a72e00ba0b7459a6500e27e7da2\"},{\"path\":\"renovate.json\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"9d78c55fe6566ea98907ef63d56a94d7b3cbe527\",\"size\":536,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/9d78c55fe6566ea98907ef63d56a94d7b3cbe527\"},{\"path\":\"serverless-scripts\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"ee3701f2fbfc7196ba340f6481d1387d20527898\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/ee3701f2fbfc7196ba340f6481d1387d20527898\"},{\"path\":\"serverless-single-page-app-plugin\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"08763fcfba643a06a452398517019bea4a5850ba\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/08763fcfba643a06a452398517019bea4a5850ba\"},{\"path\":\"serverless.yml\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"20b22c5fad229f35d029bf6614d333d82fe8a987\",\"size\":7803,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/20b22c5fad229f35d029bf6614d333d82fe8a987\"},{\"path\":\"src\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"8cdb35a88232c0f32f12f130c92c7cc55f97f471\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/8cdb35a88232c0f32f12f130c92c7cc55f97f471\"},{\"path\":\"static\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"18d19890ff94b8a99748bfbb80d10700c6d03775\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/18d19890ff94b8a99748bfbb80d10700c6d03775\"},{\"path\":\"utils\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"a592549c9f74db40b51efefcda2fd76810405f27\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/a592549c9f74db40b51efefcda2fd76810405f27\"},{\"path\":\"yarn.lock\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"eff9f6e3c4ee2cb7bd2685c8f93d6d68af8aad37\",\"size\":923955,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/eff9f6e3c4ee2cb7bd2685c8f93d6d68af8aad37\"}],\"truncated\":false}", "status": 201 }, { - "body": "{\"message\":\"Upload “static/media/netlify.png”\",\"tree\":\"229c33adc8c6f556237c21d8cb19dc7425f058fb\",\"parents\":[\"919b7ce0846f25371e0585e302d8fc7e63fb515c\"],\"author\":{\"name\":\"netlifyCMS\",\"email\":\"netlifyCMS@netlify.com\",\"date\":\"1970-01-01T00:00:00.000Z\"}}", + "body": "{\"message\":\"Upload “static/media/netlify.png”\",\"tree\":\"4f7bf36ab5dcec18504ee0a215d39184cbcedd83\",\"parents\":[\"53145723604c528d6ce5f8d034b3e86234aa170a\"],\"author\":{\"name\":\"netlifyCMS\",\"email\":\"netlifyCMS@netlify.com\",\"date\":\"1970-01-01T00:00:00.000Z\"}}", "method": "POST", "url": "/.netlify/git/github/git/commits", "headers": { @@ -689,7 +724,7 @@ "Content-Length": "1502", "Content-Security-Policy": "default-src 'none'", "Content-Type": "application/json; charset=utf-8", - "Location": "https://api.github.com/repos/owner/repo/git/commits/39ca767236e9c364d3931de4ad6f50042ab5537c", + "Location": "https://api.github.com/repos/owner/repo/git/commits/e52276c185e1e6a2145167ade78b09068b05bc20", "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", "Server": "Netlify", "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", @@ -701,15 +736,15 @@ "X-Oauth-Scopes": "delete_repo, repo", "X-Ratelimit-Limit": "5000", "X-Xss-Protection": "1; mode=block", - "Age": "0", + "Age": "2", "Connection": "keep-alive", "Vary": "Origin,Accept,Authorization,Cookie,X-GitHub-OTP,Accept-Encoding,Accept,X-Requested-With" }, - "response": "{\n \"sha\": \"39ca767236e9c364d3931de4ad6f50042ab5537c\",\n \"node_id\": \"MDY6Q29tbWl0MjU1MDc1OTQzOjM5Y2E3NjcyMzZlOWMzNjRkMzkzMWRlNGFkNmY1MDA0MmFiNTUzN2M=\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/39ca767236e9c364d3931de4ad6f50042ab5537c\",\n \"html_url\": \"https://github.com/owner/repo/commit/39ca767236e9c364d3931de4ad6f50042ab5537c\",\n \"author\": {\n \"name\": \"netlifyCMS\",\n \"email\": \"netlifyCMS@netlify.com\",\n \"date\": \"1970-01-01T00:00:00Z\"\n },\n \"committer\": {\n \"name\": \"netlifyCMS\",\n \"email\": \"netlifyCMS@netlify.com\",\n \"date\": \"1970-01-01T00:00:00Z\"\n },\n \"tree\": {\n \"sha\": \"229c33adc8c6f556237c21d8cb19dc7425f058fb\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/229c33adc8c6f556237c21d8cb19dc7425f058fb\"\n },\n \"message\": \"Upload “static/media/netlify.png”\",\n \"parents\": [\n {\n \"sha\": \"919b7ce0846f25371e0585e302d8fc7e63fb515c\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/919b7ce0846f25371e0585e302d8fc7e63fb515c\",\n \"html_url\": \"https://github.com/owner/repo/commit/919b7ce0846f25371e0585e302d8fc7e63fb515c\"\n }\n ],\n \"verification\": {\n \"verified\": false,\n \"reason\": \"unsigned\",\n \"signature\": null,\n \"payload\": null\n }\n}\n", + "response": "{\"sha\":\"e52276c185e1e6a2145167ade78b09068b05bc20\",\"node_id\":\"MDY6Q29tbWl0Mjg2NzcxMTE2OmU1MjI3NmMxODVlMWU2YTIxNDUxNjdhZGU3OGIwOTA2OGIwNWJjMjA=\",\"url\":\"https://api.github.com/repos/owner/repo/git/commits/e52276c185e1e6a2145167ade78b09068b05bc20\",\"html_url\":\"https://github.com/owner/repo/commit/e52276c185e1e6a2145167ade78b09068b05bc20\",\"author\":{\"name\":\"netlifyCMS\",\"email\":\"netlifyCMS@netlify.com\",\"date\":\"1970-01-01T00:00:00Z\"},\"committer\":{\"name\":\"netlifyCMS\",\"email\":\"netlifyCMS@netlify.com\",\"date\":\"1970-01-01T00:00:00Z\"},\"tree\":{\"sha\":\"4f7bf36ab5dcec18504ee0a215d39184cbcedd83\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/4f7bf36ab5dcec18504ee0a215d39184cbcedd83\"},\"message\":\"Upload “static/media/netlify.png”\",\"parents\":[{\"sha\":\"53145723604c528d6ce5f8d034b3e86234aa170a\",\"url\":\"https://api.github.com/repos/owner/repo/git/commits/53145723604c528d6ce5f8d034b3e86234aa170a\",\"html_url\":\"https://github.com/owner/repo/commit/53145723604c528d6ce5f8d034b3e86234aa170a\"}],\"verification\":{\"verified\":false,\"reason\":\"unsigned\",\"signature\":null,\"payload\":null}}", "status": 201 }, { - "body": "{\"sha\":\"39ca767236e9c364d3931de4ad6f50042ab5537c\",\"force\":false}", + "body": "{\"sha\":\"e52276c185e1e6a2145167ade78b09068b05bc20\",\"force\":false}", "method": "PATCH", "url": "/.netlify/git/github/git/refs/heads/master", "headers": { @@ -734,44 +769,14 @@ "Age": "0", "Connection": "keep-alive", "Vary": "Origin,Accept,Authorization,Cookie,X-GitHub-OTP,Accept-Encoding,Accept,X-Requested-With", - "content-length": "464" + "content-length": "476" }, - "response": "{\n \"ref\": \"refs/heads/master\",\n \"node_id\": \"MDM6UmVmMjU1MDc1OTQzOm1hc3Rlcg==\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/refs/heads/master\",\n \"object\": {\n \"sha\": \"39ca767236e9c364d3931de4ad6f50042ab5537c\",\n \"type\": \"commit\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/39ca767236e9c364d3931de4ad6f50042ab5537c\"\n }\n}\n", + "response": "{\"ref\":\"refs/heads/master\",\"node_id\":\"MDM6UmVmMjg2NzcxMTE2OnJlZnMvaGVhZHMvbWFzdGVy\",\"url\":\"https://api.github.com/repos/owner/repo/git/refs/heads/master\",\"object\":{\"sha\":\"e52276c185e1e6a2145167ade78b09068b05bc20\",\"type\":\"commit\",\"url\":\"https://api.github.com/repos/owner/repo/git/commits/e52276c185e1e6a2145167ade78b09068b05bc20\"}}", "status": 200 }, { "method": "GET", - "url": "/.netlify/git/github/git/trees/master:static%2Fmedia", - "headers": { - "Access-Control-Allow-Credentials": "true", - "Access-Control-Allow-Origin": "http://localhost:8080", - "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", - "Alt-Svc": "clear", - "Cache-Control": "private, max-age=60, s-maxage=60", - "Content-Security-Policy": "default-src 'none'", - "Content-Type": "application/json; charset=utf-8", - "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", - "Server": "Netlify", - "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", - "Via": "1.1 google", - "X-Accepted-Oauth-Scopes": "", - "X-Content-Type-Options": "nosniff", - "X-Frame-Options": "deny", - "X-Github-Media-Type": "github.v3; format=json", - "X-Oauth-Scopes": "delete_repo, repo", - "X-Ratelimit-Limit": "5000", - "X-Xss-Protection": "1; mode=block", - "Age": "0", - "Connection": "keep-alive", - "Vary": "Origin,Accept,Authorization,Cookie,X-GitHub-OTP,Accept-Encoding,Accept,X-Requested-With", - "content-length": "573" - }, - "response": "{\n \"sha\": \"d5006b79d357bf03b74dcff1798dbd9f24532eee\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/d5006b79d357bf03b74dcff1798dbd9f24532eee\",\n \"tree\": [\n {\n \"path\": \"netlify.png\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"a137fb3458d391f2740ecc6ebbda52107d65d6ef\",\n \"size\": 129,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/a137fb3458d391f2740ecc6ebbda52107d65d6ef\"\n }\n ],\n \"truncated\": false\n}\n", - "status": 200 - }, - { - "method": "DELETE", - "url": "/.netlify/git/github/contents/static/media/netlify.png?sha=a137fb3458d391f2740ecc6ebbda52107d65d6ef&message=Delete “static/media/netlify.png”&branch=master&author=[object Object]", + "url": "/.netlify/git/github/branches/master", "headers": { "Access-Control-Allow-Credentials": "true", "Access-Control-Allow-Origin": "http://localhost:8080", @@ -794,9 +799,104 @@ "Age": "1", "Connection": "keep-alive", "Vary": "Origin,Accept,Authorization,Cookie,X-GitHub-OTP,Accept-Encoding,Accept,X-Requested-With", - "content-length": "1627" + "content-length": "2628" }, - "response": "{\n \"content\": null,\n \"commit\": {\n \"sha\": \"901d32caaa91e3620b672d5b96f74c39386f7a9a\",\n \"node_id\": \"MDY6Q29tbWl0MjU1MDc1OTQzOjkwMWQzMmNhYWE5MWUzNjIwYjY3MmQ1Yjk2Zjc0YzM5Mzg2ZjdhOWE=\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/901d32caaa91e3620b672d5b96f74c39386f7a9a\",\n \"html_url\": \"https://github.com/owner/repo/commit/901d32caaa91e3620b672d5b96f74c39386f7a9a\",\n \"author\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2020-04-12T12:23:18Z\"\n },\n \"committer\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2020-04-12T12:23:18Z\"\n },\n \"tree\": {\n \"sha\": \"491f2279cd0955712449776a54f8b58b3bc38d4d\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/491f2279cd0955712449776a54f8b58b3bc38d4d\"\n },\n \"message\": \"Delete “static/media/netlify.png”\",\n \"parents\": [\n {\n \"sha\": \"39ca767236e9c364d3931de4ad6f50042ab5537c\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/39ca767236e9c364d3931de4ad6f50042ab5537c\",\n \"html_url\": \"https://github.com/owner/repo/commit/39ca767236e9c364d3931de4ad6f50042ab5537c\"\n }\n ],\n \"verification\": {\n \"verified\": false,\n \"reason\": \"unsigned\",\n \"signature\": null,\n \"payload\": null\n }\n }\n}\n", + "response": "{\"name\":\"master\",\"commit\":{\"sha\":\"e52276c185e1e6a2145167ade78b09068b05bc20\",\"node_id\":\"MDY6Q29tbWl0Mjg2NzcxMTE2OmU1MjI3NmMxODVlMWU2YTIxNDUxNjdhZGU3OGIwOTA2OGIwNWJjMjA=\",\"commit\":{\"author\":{\"name\":\"netlifyCMS\",\"email\":\"netlifyCMS@netlify.com\",\"date\":\"1970-01-01T00:00:00Z\"},\"committer\":{\"name\":\"netlifyCMS\",\"email\":\"netlifyCMS@netlify.com\",\"date\":\"1970-01-01T00:00:00Z\"},\"message\":\"Upload “static/media/netlify.png”\",\"tree\":{\"sha\":\"4f7bf36ab5dcec18504ee0a215d39184cbcedd83\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/4f7bf36ab5dcec18504ee0a215d39184cbcedd83\"},\"url\":\"https://api.github.com/repos/owner/repo/git/commits/e52276c185e1e6a2145167ade78b09068b05bc20\",\"comment_count\":0,\"verification\":{\"verified\":false,\"reason\":\"unsigned\",\"signature\":null,\"payload\":null}},\"url\":\"https://api.github.com/repos/owner/repo/commits/e52276c185e1e6a2145167ade78b09068b05bc20\",\"html_url\":\"https://github.com/owner/repo/commit/e52276c185e1e6a2145167ade78b09068b05bc20\",\"comments_url\":\"https://api.github.com/repos/owner/repo/commits/e52276c185e1e6a2145167ade78b09068b05bc20/comments\",\"author\":null,\"committer\":null,\"parents\":[{\"sha\":\"53145723604c528d6ce5f8d034b3e86234aa170a\",\"url\":\"https://api.github.com/repos/owner/repo/commits/53145723604c528d6ce5f8d034b3e86234aa170a\",\"html_url\":\"https://github.com/owner/repo/commit/53145723604c528d6ce5f8d034b3e86234aa170a\"}]},\"_links\":{\"self\":\"https://api.github.com/repos/owner/repo/branches/master\",\"html\":\"https://github.com/owner/repo/tree/master\"},\"protected\":false,\"protection\":{\"enabled\":false,\"required_status_checks\":{\"enforcement_level\":\"off\",\"contexts\":[]}},\"protection_url\":\"https://api.github.com/repos/owner/repo/branches/master/protection\"}", + "status": 200 + }, + { + "body": "{\"base_tree\":\"e52276c185e1e6a2145167ade78b09068b05bc20\",\"tree\":[{\"path\":\"static/media/netlify.png\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":null}]}", + "method": "POST", + "url": "/.netlify/git/github/git/trees", + "headers": { + "Access-Control-Allow-Credentials": "true", + "Access-Control-Allow-Origin": "http://localhost:8080", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", + "Alt-Svc": "clear", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Content-Length": "12590", + "Content-Security-Policy": "default-src 'none'", + "Content-Type": "application/json; charset=utf-8", + "Location": "https://api.github.com/repos/owner/repo/git/trees/9801bc49ad87a5f15cbe4e701e0a9899e7500038", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Server": "Netlify", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "Via": "1.1 google", + "X-Accepted-Oauth-Scopes": "", + "X-Content-Type-Options": "nosniff", + "X-Frame-Options": "deny", + "X-Github-Media-Type": "github.v3; format=json", + "X-Oauth-Scopes": "delete_repo, repo", + "X-Ratelimit-Limit": "5000", + "X-Xss-Protection": "1; mode=block", + "Age": "0", + "Connection": "keep-alive", + "Vary": "Origin,Accept,Authorization,Cookie,X-GitHub-OTP,Accept-Encoding,Accept,X-Requested-With" + }, + "response": "{\"sha\":\"9801bc49ad87a5f15cbe4e701e0a9899e7500038\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/9801bc49ad87a5f15cbe4e701e0a9899e7500038\",\"tree\":[{\"path\":\".circleci\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"2dfd51ca0c35b04f9a6b68bc264ad1457e8f29ba\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/2dfd51ca0c35b04f9a6b68bc264ad1457e8f29ba\"},{\"path\":\".eslintignore\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"80b4531b026d19f8fa589efd122e76199d23f967\",\"size\":39,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/80b4531b026d19f8fa589efd122e76199d23f967\"},{\"path\":\".eslintrc.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"370684994aaed5b858da3a006f48cfa57e88fd27\",\"size\":414,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/370684994aaed5b858da3a006f48cfa57e88fd27\"},{\"path\":\".flowconfig\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"14aa2ac4cc0e15223ad98630a6f1325fc81f8043\",\"size\":283,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/14aa2ac4cc0e15223ad98630a6f1325fc81f8043\"},{\"path\":\".gitattributes\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"406a244d1522a3c809efab0c9ce46bbd86aa9c1d\",\"size\":188,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/406a244d1522a3c809efab0c9ce46bbd86aa9c1d\"},{\"path\":\".github\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"4ebeece548b52b20af59622354530a6d33b50b43\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/4ebeece548b52b20af59622354530a6d33b50b43\"},{\"path\":\".gitignore\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"c071ba35b0e49899bab6d610a68eef667dbbf157\",\"size\":169,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/c071ba35b0e49899bab6d610a68eef667dbbf157\"},{\"path\":\".lfsconfig\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"e4872af721c959f181c81a83334e6553f8afd06b\",\"size\":91,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/e4872af721c959f181c81a83334e6553f8afd06b\"},{\"path\":\".prettierignore\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"393f050e123d998cf8c8b362ff95cc8ac4d250e5\",\"size\":45,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/393f050e123d998cf8c8b362ff95cc8ac4d250e5\"},{\"path\":\".prettierrc\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"e52ad05bb13b084d7949dd76e1b2517455162150\",\"size\":223,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/e52ad05bb13b084d7949dd76e1b2517455162150\"},{\"path\":\".stylelintrc.json\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"4b4c9698d10d756f5faa025659b86375428ed0a7\",\"size\":718,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/4b4c9698d10d756f5faa025659b86375428ed0a7\"},{\"path\":\".vscode\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"286e97ec0113ea8242b41ac222e2c3e8077e6f1e\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/286e97ec0113ea8242b41ac222e2c3e8077e6f1e\"},{\"path\":\"CHANGELOG.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"070a5d4f0eacd2dc0be81ae8996f8982de43046e\",\"size\":2113,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/070a5d4f0eacd2dc0be81ae8996f8982de43046e\"},{\"path\":\"CODE_OF_CONDUCT.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"92bc7565ff0ee145a0041b5179a820f14f39ab22\",\"size\":3355,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/92bc7565ff0ee145a0041b5179a820f14f39ab22\"},{\"path\":\"CONTRIBUTING.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"8552aa241254a61258e1ff9666ab36f32fb1e3b9\",\"size\":3548,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/8552aa241254a61258e1ff9666ab36f32fb1e3b9\"},{\"path\":\"LICENSE\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"42d85938357b49977c126ca03b199129082d4fb8\",\"size\":1091,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/42d85938357b49977c126ca03b199129082d4fb8\"},{\"path\":\"README.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"19df50a78654c8d757ca7f38447aa3d09c7abcce\",\"size\":3698,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/19df50a78654c8d757ca7f38447aa3d09c7abcce\"},{\"path\":\"backend\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"b9f1cfbf4d901fe13c3af4e0d8f46bbe5a6addd6\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/b9f1cfbf4d901fe13c3af4e0d8f46bbe5a6addd6\"},{\"path\":\"config.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"58afd573bbb69fcca000efd0f5d90b93c93a98dd\",\"size\":853,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/58afd573bbb69fcca000efd0f5d90b93c93a98dd\"},{\"path\":\"content\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"0294ef106c58743907a5c855da1eb0f87b0b6dfc\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/0294ef106c58743907a5c855da1eb0f87b0b6dfc\"},{\"path\":\"flow-typed\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"86c32fd6c3118be5e0dbbb231a834447357236c6\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/86c32fd6c3118be5e0dbbb231a834447357236c6\"},{\"path\":\"flow\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"0af45ad00d155c8d8c7407d913ff85278244c9ce\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/0af45ad00d155c8d8c7407d913ff85278244c9ce\"},{\"path\":\"gatsby-browser.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"9bd2c9dce175f04980e91cd9dc295a299e3cdb80\",\"size\":90,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/9bd2c9dce175f04980e91cd9dc295a299e3cdb80\"},{\"path\":\"gatsby-config.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"3929038f9ab6451b2b256dfba5830676e6eecbee\",\"size\":7256,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/3929038f9ab6451b2b256dfba5830676e6eecbee\"},{\"path\":\"gatsby-node.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"14a207883c2093d2cc071bc5a464e165bcc1fead\",\"size\":409,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/14a207883c2093d2cc071bc5a464e165bcc1fead\"},{\"path\":\"gatsby\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"4f23c06cd1740bf78304d2c0b29bf6bfdf427981\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/4f23c06cd1740bf78304d2c0b29bf6bfdf427981\"},{\"path\":\"jest\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"5a6bc7be680ba053df0f8ffdc2aaa80e62c3e819\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/5a6bc7be680ba053df0f8ffdc2aaa80e62c3e819\"},{\"path\":\"netlify-functions\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"a96c1f09300fa4f9e4c786d69bcbe51eaff7f14a\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/a96c1f09300fa4f9e4c786d69bcbe51eaff7f14a\"},{\"path\":\"netlify.toml\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"2a9e36ada28c535fc074b408daa2a0cb97ecf47c\",\"size\":223,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/2a9e36ada28c535fc074b408daa2a0cb97ecf47c\"},{\"path\":\"package.json\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"d8b6e6e922c8d166290f99228090139a3358bfd3\",\"size\":6951,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/d8b6e6e922c8d166290f99228090139a3358bfd3\"},{\"path\":\"postcss-config.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"d216501e9b351a72e00ba0b7459a6500e27e7da2\",\"size\":703,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/d216501e9b351a72e00ba0b7459a6500e27e7da2\"},{\"path\":\"renovate.json\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"9d78c55fe6566ea98907ef63d56a94d7b3cbe527\",\"size\":536,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/9d78c55fe6566ea98907ef63d56a94d7b3cbe527\"},{\"path\":\"serverless-scripts\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"ee3701f2fbfc7196ba340f6481d1387d20527898\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/ee3701f2fbfc7196ba340f6481d1387d20527898\"},{\"path\":\"serverless-single-page-app-plugin\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"08763fcfba643a06a452398517019bea4a5850ba\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/08763fcfba643a06a452398517019bea4a5850ba\"},{\"path\":\"serverless.yml\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"20b22c5fad229f35d029bf6614d333d82fe8a987\",\"size\":7803,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/20b22c5fad229f35d029bf6614d333d82fe8a987\"},{\"path\":\"src\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"8cdb35a88232c0f32f12f130c92c7cc55f97f471\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/8cdb35a88232c0f32f12f130c92c7cc55f97f471\"},{\"path\":\"static\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"139040296ae3796be0e107be98572f0e6bb28901\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/139040296ae3796be0e107be98572f0e6bb28901\"},{\"path\":\"utils\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"a592549c9f74db40b51efefcda2fd76810405f27\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/a592549c9f74db40b51efefcda2fd76810405f27\"},{\"path\":\"yarn.lock\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"eff9f6e3c4ee2cb7bd2685c8f93d6d68af8aad37\",\"size\":923955,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/eff9f6e3c4ee2cb7bd2685c8f93d6d68af8aad37\"}],\"truncated\":false}", + "status": 201 + }, + { + "body": "{\"message\":\"Delete “static/media/netlify.png”\",\"tree\":\"9801bc49ad87a5f15cbe4e701e0a9899e7500038\",\"parents\":[\"e52276c185e1e6a2145167ade78b09068b05bc20\"],\"author\":{\"name\":\"netlifyCMS\",\"email\":\"netlifyCMS@netlify.com\",\"date\":\"1970-01-01T00:00:00.000Z\"}}", + "method": "POST", + "url": "/.netlify/git/github/git/commits", + "headers": { + "Access-Control-Allow-Credentials": "true", + "Access-Control-Allow-Origin": "http://localhost:8080", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", + "Alt-Svc": "clear", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Content-Length": "1502", + "Content-Security-Policy": "default-src 'none'", + "Content-Type": "application/json; charset=utf-8", + "Location": "https://api.github.com/repos/owner/repo/git/commits/66200efd1d7c87d4fba2d7ed5385d3e81edd2bd6", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Server": "Netlify", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "Via": "1.1 google", + "X-Accepted-Oauth-Scopes": "", + "X-Content-Type-Options": "nosniff", + "X-Frame-Options": "deny", + "X-Github-Media-Type": "github.v3; format=json", + "X-Oauth-Scopes": "delete_repo, repo", + "X-Ratelimit-Limit": "5000", + "X-Xss-Protection": "1; mode=block", + "Age": "1", + "Connection": "keep-alive", + "Vary": "Origin,Accept,Authorization,Cookie,X-GitHub-OTP,Accept-Encoding,Accept,X-Requested-With" + }, + "response": "{\"sha\":\"66200efd1d7c87d4fba2d7ed5385d3e81edd2bd6\",\"node_id\":\"MDY6Q29tbWl0Mjg2NzcxMTE2OjY2MjAwZWZkMWQ3Yzg3ZDRmYmEyZDdlZDUzODVkM2U4MWVkZDJiZDY=\",\"url\":\"https://api.github.com/repos/owner/repo/git/commits/66200efd1d7c87d4fba2d7ed5385d3e81edd2bd6\",\"html_url\":\"https://github.com/owner/repo/commit/66200efd1d7c87d4fba2d7ed5385d3e81edd2bd6\",\"author\":{\"name\":\"netlifyCMS\",\"email\":\"netlifyCMS@netlify.com\",\"date\":\"1970-01-01T00:00:00Z\"},\"committer\":{\"name\":\"netlifyCMS\",\"email\":\"netlifyCMS@netlify.com\",\"date\":\"1970-01-01T00:00:00Z\"},\"tree\":{\"sha\":\"9801bc49ad87a5f15cbe4e701e0a9899e7500038\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/9801bc49ad87a5f15cbe4e701e0a9899e7500038\"},\"message\":\"Delete “static/media/netlify.png”\",\"parents\":[{\"sha\":\"e52276c185e1e6a2145167ade78b09068b05bc20\",\"url\":\"https://api.github.com/repos/owner/repo/git/commits/e52276c185e1e6a2145167ade78b09068b05bc20\",\"html_url\":\"https://github.com/owner/repo/commit/e52276c185e1e6a2145167ade78b09068b05bc20\"}],\"verification\":{\"verified\":false,\"reason\":\"unsigned\",\"signature\":null,\"payload\":null}}", + "status": 201 + }, + { + "body": "{\"sha\":\"66200efd1d7c87d4fba2d7ed5385d3e81edd2bd6\",\"force\":false}", + "method": "PATCH", + "url": "/.netlify/git/github/git/refs/heads/master", + "headers": { + "Access-Control-Allow-Credentials": "true", + "Access-Control-Allow-Origin": "http://localhost:8080", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", + "Alt-Svc": "clear", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Content-Security-Policy": "default-src 'none'", + "Content-Type": "application/json; charset=utf-8", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Server": "Netlify", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "Via": "1.1 google", + "X-Accepted-Oauth-Scopes": "repo", + "X-Content-Type-Options": "nosniff", + "X-Frame-Options": "deny", + "X-Github-Media-Type": "github.v3; format=json", + "X-Oauth-Scopes": "delete_repo, repo", + "X-Ratelimit-Limit": "5000", + "X-Xss-Protection": "1; mode=block", + "Age": "1", + "Connection": "keep-alive", + "Vary": "Origin,Accept,Authorization,Cookie,X-GitHub-OTP,Accept-Encoding,Accept,X-Requested-With", + "content-length": "476" + }, + "response": "{\"ref\":\"refs/heads/master\",\"node_id\":\"MDM6UmVmMjg2NzcxMTE2OnJlZnMvaGVhZHMvbWFzdGVy\",\"url\":\"https://api.github.com/repos/owner/repo/git/refs/heads/master\",\"object\":{\"sha\":\"66200efd1d7c87d4fba2d7ed5385d3e81edd2bd6\",\"type\":\"commit\",\"url\":\"https://api.github.com/repos/owner/repo/git/commits/66200efd1d7c87d4fba2d7ed5385d3e81edd2bd6\"}}", "status": 200 } ] \ No newline at end of file diff --git a/cypress/fixtures/Git Gateway (GitLab) Backend Media Library - Large Media__can delete image from global media library.json b/cypress/fixtures/Git Gateway (GitLab) Backend Media Library - Large Media__can delete image from global media library.json index f0b95b6c..e5be7844 100644 --- a/cypress/fixtures/Git Gateway (GitLab) Backend Media Library - Large Media__can delete image from global media library.json +++ b/cypress/fixtures/Git Gateway (GitLab) Backend Media Library - Large Media__can delete image from global media library.json @@ -25,15 +25,15 @@ "Access-Control-Allow-Credentials": "true", "Access-Control-Allow-Origin": "*", "Alt-Svc": "clear", + "Content-Length": "262", "Content-Type": "application/json", "Via": "1.1 google", "Age": "0", "Connection": "keep-alive", "Server": "Netlify", - "Vary": "Origin,Accept-Encoding", - "content-length": "262" + "Vary": "Origin" }, - "response": "{\"id\":\"29e34c54-a1dc-4bbc-a600-82c8c41f3537\",\"aud\":\"\",\"role\":\"\",\"email\":\"netlifyCMS@netlify.com\",\"confirmed_at\":\"2020-04-12T10:29:37Z\",\"app_metadata\":{\"provider\":\"email\"},\"user_metadata\":{},\"created_at\":\"2020-04-12T10:29:37Z\",\"updated_at\":\"2020-04-12T10:29:37Z\"}", + "response": "{\"id\":\"16caa6d5-eb17-4ff6-834b-9d217debe415\",\"aud\":\"\",\"role\":\"\",\"email\":\"netlifyCMS@netlify.com\",\"confirmed_at\":\"2020-08-11T15:18:28Z\",\"app_metadata\":{\"provider\":\"email\"},\"user_metadata\":{},\"created_at\":\"2020-08-11T15:18:28Z\",\"updated_at\":\"2020-08-11T15:18:28Z\"}", "status": 200 }, { @@ -43,17 +43,57 @@ "Access-Control-Allow-Credentials": "true", "Access-Control-Allow-Origin": "http://localhost:8080", "Alt-Svc": "clear", + "Content-Length": "85", "Content-Type": "application/json", "Via": "1.1 google", "Age": "0", "Connection": "keep-alive", "Server": "Netlify", - "Vary": "Origin,Accept-Encoding", - "content-length": "85" + "Vary": "Origin" }, "response": "{\"github_enabled\":false,\"gitlab_enabled\":true,\"bitbucket_enabled\":false,\"roles\":null}", "status": 200 }, + { + "method": "GET", + "url": "/.netlify/git/gitlab/repository/tree?path=static/media&per_page=100&ref=master&recursive=false", + "headers": { + "Accept-Ranges": "bytes", + "Access-Control-Allow-Credentials": "true", + "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", + "Access-Control-Allow-Origin": "http://localhost:8080", + "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", + "Access-Control-Max-Age": "7200", + "Alt-Svc": "clear", + "Cache-Control": "max-age=0, private, must-revalidate", + "Cf-Cache-Status": "DYNAMIC", + "Cf-Ray": "5c12ee107a51a31b-ORD", + "Cf-Request-Id": "047fb31e4d0000a31bdf8c3200000001", + "Content-Length": "2", + "Content-Type": "application/json", + "Expect-Ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", + "Gitlab-Sv": "localhost", + "Link": "; rel=\"first\",; rel=\"last\"", + "Referrer-Policy": "strict-origin-when-cross-origin", + "Server": "Netlify", + "Set-Cookie": "__cfduid=db3a3ce074ab9ec21a849888da21167051597159114; expires=Thu, 10-Sep-20 15:18:34 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Strict-Transport-Security": "max-age=31536000", + "Via": "1.1 google", + "X-Content-Type-Options": "nosniff", + "X-Frame-Options": "SAMEORIGIN", + "X-Next-Page": "", + "X-Page": "1", + "X-Per-Page": "100", + "X-Prev-Page": "", + "X-Total": "0", + "X-Total-Pages": "1", + "Age": "0", + "Connection": "keep-alive", + "Vary": "Origin,Origin" + }, + "response": "[]", + "status": 200 + }, { "method": "GET", "url": "/.netlify/git/gitlab/repository/tree?path=content/posts&ref=master&recursive=false", @@ -66,14 +106,15 @@ "Alt-Svc": "clear", "Cache-Control": "max-age=0, private, must-revalidate", "Cf-Cache-Status": "DYNAMIC", - "Cf-Ray": "582c4549cd76c520-ORD", + "Cf-Ray": "5c12ee127cbb7117-ORD", + "Cf-Request-Id": "047fb31f8900007117a11e8200000001", "Content-Type": "application/json", "Expect-Ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "Gitlab-Sv": "localhost", "Link": "; rel=\"first\",; rel=\"last\"", "Referrer-Policy": "strict-origin-when-cross-origin", "Server": "Netlify", - "Set-Cookie": "__cfduid=d218701deaf81cd48502293401c8cd7451586687412; expires=Tue, 12-May-20 10:30:12 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Set-Cookie": "__cfduid=d75d6e3caee25bea0d7a58b38322650661597159114; expires=Thu, 10-Sep-20 15:18:34 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", "Strict-Transport-Security": "max-age=31536000", "Via": "1.1 google", "X-Content-Type-Options": "nosniff", @@ -86,7 +127,7 @@ "X-Total-Pages": "1", "Age": "0", "Connection": "keep-alive", - "Vary": "Origin,Origin", + "Vary": "Origin,Accept-Encoding,Origin", "content-length": "1059" }, "response": "[{\"id\":\"6d51a38aed7139d2117724b1e307657b6ff2d043\",\"name\":\"2016-01-09---Perfecting-the-Art-of-Perfection.md\",\"type\":\"blob\",\"path\":\"content/posts/2016-01-09---Perfecting-the-Art-of-Perfection.md\",\"mode\":\"100644\"},{\"id\":\"d0582dd245a3f408fb3fe2333bf01400007476e9\",\"name\":\"2016-01-12---The-Origins-of-Social-Stationery-Lettering.md\",\"type\":\"blob\",\"path\":\"content/posts/2016-01-12---The-Origins-of-Social-Stationery-Lettering.md\",\"mode\":\"100644\"},{\"id\":\"0eea554365f002d0f1572af9a58522d335a794d5\",\"name\":\"2016-02-02---A-Brief-History-of-Typography.md\",\"type\":\"blob\",\"path\":\"content/posts/2016-02-02---A-Brief-History-of-Typography.md\",\"mode\":\"100644\"},{\"id\":\"44f78c474d04273185a95821426f75affc9b0044\",\"name\":\"2017-18-08---The-Birth-of-Movable-Type.md\",\"type\":\"blob\",\"path\":\"content/posts/2017-18-08---The-Birth-of-Movable-Type.md\",\"mode\":\"100644\"},{\"id\":\"a532f0a9445cdf90a19c6812cff89d1674991774\",\"name\":\"2017-19-08---Humane-Typography-in-the-Digital-Age.md\",\"type\":\"blob\",\"path\":\"content/posts/2017-19-08---Humane-Typography-in-the-Digital-Age.md\",\"mode\":\"100644\"}]", @@ -94,46 +135,95 @@ }, { "method": "GET", - "url": "/.netlify/git/gitlab/repository/tree?path=static/media&ref=master&per_page=100&recursive=false", + "url": "/.netlify/git/gitlab/repository/files/.lfsconfig/raw?ref=master", "headers": { - "Accept-Ranges": "bytes", "Access-Control-Allow-Credentials": "true", "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", "Access-Control-Allow-Origin": "http://localhost:8080", "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", "Access-Control-Max-Age": "7200", "Alt-Svc": "clear", - "Cache-Control": "max-age=0, private, must-revalidate", + "Cache-Control": "max-age=0, private, must-revalidate, no-store, no-cache", "Cf-Cache-Status": "DYNAMIC", - "Cf-Ray": "582c454bcd80c524-ORD", - "Content-Type": "application/json", + "Cf-Ray": "5c12ee13cd9e7117-ORD", + "Cf-Request-Id": "047fb3205f00007117a11ec200000001", + "Content-Disposition": "inline; filename=\".lfsconfig\"; filename*=UTF-8''.lfsconfig", + "Content-Type": "text/plain; charset=utf-8", "Expect-Ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", + "Expires": "Fri, 01 Jan 1990 00:00:00 GMT", "Gitlab-Sv": "localhost", - "Link": "; rel=\"first\",; rel=\"last\"", + "Pragma": "no-cache", "Referrer-Policy": "strict-origin-when-cross-origin", "Server": "Netlify", - "Set-Cookie": "__cfduid=dc5d345e79e51ea78848a3aac234683e21586687413; expires=Tue, 12-May-20 10:30:13 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Set-Cookie": "__cfduid=d75d6e3caee25bea0d7a58b38322650661597159114; expires=Thu, 10-Sep-20 15:18:34 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", "Strict-Transport-Security": "max-age=31536000", "Via": "1.1 google", "X-Content-Type-Options": "nosniff", "X-Frame-Options": "SAMEORIGIN", - "X-Next-Page": "", - "X-Page": "1", - "X-Per-Page": "100", - "X-Prev-Page": "", - "X-Total": "0", - "X-Total-Pages": "1", - "Age": "0", + "X-Gitlab-Blob-Id": "69bc1561ab9625a90255d21daf9ec2e5af72804c", + "X-Gitlab-Commit-Id": "f5023e69482c8cb7b440bb637be4647cda28ec42", + "X-Gitlab-Content-Sha256": "113d8a569919065988dd97797a9209e93d37b51c7ada7fab4dc06885886d5e69", + "X-Gitlab-Encoding": "base64", + "X-Gitlab-File-Name": ".lfsconfig", + "X-Gitlab-File-Path": ".lfsconfig", + "X-Gitlab-Last-Commit-Id": "f5023e69482c8cb7b440bb637be4647cda28ec42", + "X-Gitlab-Ref": "master", + "X-Gitlab-Size": "91", + "Age": "1", "Connection": "keep-alive", - "Vary": "Origin,Accept-Encoding,Origin", - "content-length": "2" + "Vary": "Origin,Origin", + "content-length": "91" }, - "response": "[]", + "response": "[lfs]\n\turl = https://8a3d7a31-a117-45a2-80a0-a371cc14261f.netlify.com/.netlify/large-media\n", "status": 200 }, { "method": "GET", - "url": "/.netlify/git/gitlab/repository/commits?path=content/posts/2016-01-12---The-Origins-of-Social-Stationery-Lettering.md&ref_name=master", + "url": "/.netlify/git/gitlab/repository/files/.gitattributes/raw?ref=master", + "headers": { + "Access-Control-Allow-Credentials": "true", + "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", + "Access-Control-Allow-Origin": "http://localhost:8080", + "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", + "Access-Control-Max-Age": "7200", + "Alt-Svc": "clear", + "Cache-Control": "max-age=0, private, must-revalidate, no-store, no-cache", + "Cf-Cache-Status": "DYNAMIC", + "Cf-Ray": "5c12ee13c80c037c-ORD", + "Cf-Request-Id": "047fb320600000037c63a97200000001", + "Content-Disposition": "inline; filename=\".gitattributes\"; filename*=UTF-8''.gitattributes", + "Content-Type": "text/plain; charset=utf-8", + "Expect-Ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", + "Expires": "Fri, 01 Jan 1990 00:00:00 GMT", + "Gitlab-Sv": "localhost", + "Pragma": "no-cache", + "Referrer-Policy": "strict-origin-when-cross-origin", + "Server": "Netlify", + "Set-Cookie": "__cfduid=d82f0f5ee7eea711e4d3d3fca677dc5fc1597159114; expires=Thu, 10-Sep-20 15:18:34 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Strict-Transport-Security": "max-age=31536000", + "Via": "1.1 google", + "X-Content-Type-Options": "nosniff", + "X-Frame-Options": "SAMEORIGIN", + "X-Gitlab-Blob-Id": "406a244d1522a3c809efab0c9ce46bbd86aa9c1d", + "X-Gitlab-Commit-Id": "f5023e69482c8cb7b440bb637be4647cda28ec42", + "X-Gitlab-Content-Sha256": "ad79367f544fd9f77f67925a43970c261e0ea1337dc29d8095fdc30113f83e04", + "X-Gitlab-Encoding": "base64", + "X-Gitlab-File-Name": ".gitattributes", + "X-Gitlab-File-Path": ".gitattributes", + "X-Gitlab-Last-Commit-Id": "cccedba45cd89df3190e24a5e173a89c097b65bb", + "X-Gitlab-Ref": "master", + "X-Gitlab-Size": "188", + "Age": "1", + "Connection": "keep-alive", + "Vary": "Origin,Origin", + "content-length": "188" + }, + "response": "/.github export-ignore\n/.gitattributes export-ignore\n/.editorconfig export-ignore\n/.travis.yml export-ignore\n**/*.js.snap export-ignore\nstatic/media/** filter=lfs diff=lfs merge=lfs -text\n", + "status": 200 + }, + { + "method": "GET", + "url": "/.netlify/git/gitlab/repository/commits?ref_name=master&path=content/posts/2016-01-09---Perfecting-the-Art-of-Perfection.md", "headers": { "Access-Control-Allow-Credentials": "true", "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", @@ -143,14 +233,15 @@ "Alt-Svc": "clear", "Cache-Control": "max-age=0, private, must-revalidate", "Cf-Cache-Status": "DYNAMIC", - "Cf-Ray": "582c454cebb9e1da-ORD", + "Cf-Ray": "5c12ee15def17117-ORD", + "Cf-Request-Id": "047fb321a500007117a11f9200000001", "Content-Type": "application/json", "Expect-Ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "Gitlab-Sv": "localhost", - "Link": "; rel=\"first\",; rel=\"last\"", + "Link": "; rel=\"first\",; rel=\"last\"", "Referrer-Policy": "strict-origin-when-cross-origin", "Server": "Netlify", - "Set-Cookie": "__cfduid=dde3d2f304238e51cfd5c9ca0b80286921586687413; expires=Tue, 12-May-20 10:30:13 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Set-Cookie": "__cfduid=df8a4e9960059e8d3cd663fdcec312a281597159115; expires=Thu, 10-Sep-20 15:18:35 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", "Strict-Transport-Security": "max-age=31536000", "Via": "1.1 google", "X-Content-Type-Options": "nosniff", @@ -163,55 +254,12 @@ "X-Total-Pages": "1", "Age": "0", "Connection": "keep-alive", - "Vary": "Origin,Origin", - "content-length": "591" + "Vary": "Origin,Accept-Encoding,Origin", + "content-length": "592" }, "response": "[{\"id\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"short_id\":\"2bc3fa39\",\"created_at\":\"2019-07-24T10:45:32.000+03:00\",\"parent_ids\":[],\"title\":\"initial commit\",\"message\":\"initial commit\\n\",\"author_name\":\"owner\",\"author_email\":\"owner@users.noreply.github.com\",\"authored_date\":\"2019-07-24T10:45:32.000+03:00\",\"committer_name\":\"owner\",\"committer_email\":\"owner@users.noreply.github.com\",\"committed_date\":\"2019-07-24T10:45:32.000+03:00\",\"web_url\":\"https://gitlab.com/owner/repo/-/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\"}]", "status": 200 }, - { - "method": "GET", - "url": "/.netlify/git/gitlab/repository/files/content%2Fposts%2F2016-01-09---Perfecting-the-Art-of-Perfection.md/raw?ref=master", - "headers": { - "Access-Control-Allow-Credentials": "true", - "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", - "Access-Control-Allow-Origin": "http://localhost:8080", - "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", - "Access-Control-Max-Age": "7200", - "Alt-Svc": "clear", - "Cache-Control": "max-age=0, private, must-revalidate, no-store, no-cache", - "Cf-Cache-Status": "DYNAMIC", - "Cf-Ray": "582c454cebb7e1da-ORD", - "Content-Disposition": "inline; filename=\"2016-01-09---Perfecting-the-Art-of-Perfection.md\"; filename*=UTF-8''2016-01-09---Perfecting-the-Art-of-Perfection.md", - "Content-Type": "text/plain; charset=utf-8", - "Expect-Ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", - "Expires": "Fri, 01 Jan 1990 00:00:00 GMT", - "Gitlab-Sv": "localhost", - "Pragma": "no-cache", - "Referrer-Policy": "strict-origin-when-cross-origin", - "Server": "Netlify", - "Set-Cookie": "__cfduid=dde3d2f304238e51cfd5c9ca0b80286921586687413; expires=Tue, 12-May-20 10:30:13 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", - "Strict-Transport-Security": "max-age=31536000", - "Via": "1.1 google", - "X-Content-Type-Options": "nosniff", - "X-Frame-Options": "SAMEORIGIN", - "X-Gitlab-Blob-Id": "6d51a38aed7139d2117724b1e307657b6ff2d043", - "X-Gitlab-Commit-Id": "b06f90b147afb70c4bb7f11c58be77a1d63c656e", - "X-Gitlab-Content-Sha256": "4e34b86a142e9130ff1a5fff0405bc83daa8552ed653ba203fd9e20d810833af", - "X-Gitlab-Encoding": "base64", - "X-Gitlab-File-Name": "2016-01-09---Perfecting-the-Art-of-Perfection.md", - "X-Gitlab-File-Path": "content/posts/2016-01-09---Perfecting-the-Art-of-Perfection.md", - "X-Gitlab-Last-Commit-Id": "2bc3fa39d8adb9e008e52793854338399fc6e4ad", - "X-Gitlab-Ref": "master", - "X-Gitlab-Size": "1707", - "Age": "0", - "Connection": "keep-alive", - "Vary": "Origin,Origin", - "content-length": "1707" - }, - "response": "---\ntitle: Perfecting the Art of Perfection\ndate: \"2016-09-01T23:46:37.121Z\"\ntemplate: \"post\"\ndraft: false\ncategory: \"Design Inspiration\"\ntags:\n - \"Handwriting\"\n - \"Learning to write\"\ndescription: \"Quisque cursus, metus vitae pharetra auctor, sem massa mattis sem, at interdum magna augue eget diam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Morbi lacinia molestie dui. Praesent blandit dolor. Sed non quam. In vel mi sit amet augue congue elementum.\"\ncanonical: ''\n---\n\nQuisque cursus, metus vitae pharetra auctor, sem massa mattis sem, at interdum magna augue eget diam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Morbi lacinia molestie dui. Praesent blandit dolor. Sed non quam. In vel mi sit amet augue congue elementum.\n\n![Nulla faucibus vestibulum eros in tempus. Vestibulum tempor imperdiet velit nec dapibus](/media/image-2.jpg)\n\nPellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis. \n\nPraesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus.", - "status": 200 - }, { "method": "GET", "url": "/.netlify/git/gitlab/repository/files/content%2Fposts%2F2016-01-12---The-Origins-of-Social-Stationery-Lettering.md/raw?ref=master", @@ -224,7 +272,8 @@ "Alt-Svc": "clear", "Cache-Control": "max-age=0, private, must-revalidate, no-store, no-cache", "Cf-Cache-Status": "DYNAMIC", - "Cf-Ray": "582c454ce96ac520-ORD", + "Cf-Ray": "5c12ee160f207117-ORD", + "Cf-Request-Id": "047fb321c800007117a11fa200000001", "Content-Disposition": "inline; filename=\"2016-01-12---The-Origins-of-Social-Stationery-Lettering.md\"; filename*=UTF-8''2016-01-12---The-Origins-of-Social-Stationery-Lettering.md", "Content-Type": "text/plain; charset=utf-8", "Expect-Ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", @@ -233,13 +282,13 @@ "Pragma": "no-cache", "Referrer-Policy": "strict-origin-when-cross-origin", "Server": "Netlify", - "Set-Cookie": "__cfduid=deb31c0caaabd9a247b031e2b9576c6b81586687413; expires=Tue, 12-May-20 10:30:13 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Set-Cookie": "__cfduid=df8a4e9960059e8d3cd663fdcec312a281597159115; expires=Thu, 10-Sep-20 15:18:35 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", "Strict-Transport-Security": "max-age=31536000", "Via": "1.1 google", "X-Content-Type-Options": "nosniff", "X-Frame-Options": "SAMEORIGIN", "X-Gitlab-Blob-Id": "d0582dd245a3f408fb3fe2333bf01400007476e9", - "X-Gitlab-Commit-Id": "b06f90b147afb70c4bb7f11c58be77a1d63c656e", + "X-Gitlab-Commit-Id": "f5023e69482c8cb7b440bb637be4647cda28ec42", "X-Gitlab-Content-Sha256": "add0804dc8baae2bf77e4823c6fe2e1515525bb3ed3b00dd7abd6962e6b2ae5d", "X-Gitlab-Encoding": "base64", "X-Gitlab-File-Name": "2016-01-12---The-Origins-of-Social-Stationery-Lettering.md", @@ -249,12 +298,56 @@ "X-Gitlab-Size": "2565", "Age": "0", "Connection": "keep-alive", - "Vary": "Origin,Origin", + "Vary": "Origin,Accept-Encoding,Origin", "content-length": "2565" }, "response": "---\ntitle: The Origins of Social Stationery Lettering\ndate: \"2016-12-01T22:40:32.169Z\"\ntemplate: \"post\"\ndraft: false\ncategory: \"Design Culture\"\ndescription: \"Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante.\"\ncanonical: ''\n---\n\n**Pellentesque habitant morbi tristique** senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. *Aenean ultricies mi vitae est.* Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. \n\nVestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. [Donec non enim](#) in turpis pulvinar facilisis.\n\n![Nulla faucibus vestibulum eros in tempus. Vestibulum tempor imperdiet velit nec dapibus](/media/image-3.jpg)\n\n## Header Level 2\n\n+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\n+ Aliquam tincidunt mauris eu risus.\n\nDonec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. \n\n
\n\t
\n\t\t

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.

\n\t\t
\n\t\t\t— Aliquam tincidunt mauris eu risus.\n\t\t
\n\t
\n
\n\n### Header Level 3\n\n+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\n+ Aliquam tincidunt mauris eu risus.\n\nPellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra.\n\n```css\n#header h1 a {\n display: block;\n width: 300px;\n height: 80px;\n}\n```\n\nDonec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus.", "status": 200 }, + { + "method": "GET", + "url": "/.netlify/git/gitlab/repository/files/content%2Fposts%2F2016-01-09---Perfecting-the-Art-of-Perfection.md/raw?ref=master", + "headers": { + "Access-Control-Allow-Credentials": "true", + "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", + "Access-Control-Allow-Origin": "http://localhost:8080", + "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", + "Access-Control-Max-Age": "7200", + "Alt-Svc": "clear", + "Cache-Control": "max-age=0, private, must-revalidate, no-store, no-cache", + "Cf-Cache-Status": "DYNAMIC", + "Cf-Ray": "5c12ee161f2a7117-ORD", + "Cf-Request-Id": "047fb321d300007117a11fb200000001", + "Content-Disposition": "inline; filename=\"2016-01-09---Perfecting-the-Art-of-Perfection.md\"; filename*=UTF-8''2016-01-09---Perfecting-the-Art-of-Perfection.md", + "Content-Type": "text/plain; charset=utf-8", + "Expect-Ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", + "Expires": "Fri, 01 Jan 1990 00:00:00 GMT", + "Gitlab-Sv": "localhost", + "Pragma": "no-cache", + "Referrer-Policy": "strict-origin-when-cross-origin", + "Server": "Netlify", + "Set-Cookie": "__cfduid=df8a4e9960059e8d3cd663fdcec312a281597159115; expires=Thu, 10-Sep-20 15:18:35 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Strict-Transport-Security": "max-age=31536000", + "Via": "1.1 google", + "X-Content-Type-Options": "nosniff", + "X-Frame-Options": "SAMEORIGIN", + "X-Gitlab-Blob-Id": "6d51a38aed7139d2117724b1e307657b6ff2d043", + "X-Gitlab-Commit-Id": "f5023e69482c8cb7b440bb637be4647cda28ec42", + "X-Gitlab-Content-Sha256": "4e34b86a142e9130ff1a5fff0405bc83daa8552ed653ba203fd9e20d810833af", + "X-Gitlab-Encoding": "base64", + "X-Gitlab-File-Name": "2016-01-09---Perfecting-the-Art-of-Perfection.md", + "X-Gitlab-File-Path": "content/posts/2016-01-09---Perfecting-the-Art-of-Perfection.md", + "X-Gitlab-Last-Commit-Id": "2bc3fa39d8adb9e008e52793854338399fc6e4ad", + "X-Gitlab-Ref": "master", + "X-Gitlab-Size": "1707", + "Age": "0", + "Connection": "keep-alive", + "Vary": "Origin,Accept-Encoding,Origin", + "content-length": "1707" + }, + "response": "---\ntitle: Perfecting the Art of Perfection\ndate: \"2016-09-01T23:46:37.121Z\"\ntemplate: \"post\"\ndraft: false\ncategory: \"Design Inspiration\"\ntags:\n - \"Handwriting\"\n - \"Learning to write\"\ndescription: \"Quisque cursus, metus vitae pharetra auctor, sem massa mattis sem, at interdum magna augue eget diam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Morbi lacinia molestie dui. Praesent blandit dolor. Sed non quam. In vel mi sit amet augue congue elementum.\"\ncanonical: ''\n---\n\nQuisque cursus, metus vitae pharetra auctor, sem massa mattis sem, at interdum magna augue eget diam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Morbi lacinia molestie dui. Praesent blandit dolor. Sed non quam. In vel mi sit amet augue congue elementum.\n\n![Nulla faucibus vestibulum eros in tempus. Vestibulum tempor imperdiet velit nec dapibus](/media/image-2.jpg)\n\nPellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis. \n\nPraesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus.", + "status": 200 + }, { "method": "GET", "url": "/.netlify/git/gitlab/repository/files/content%2Fposts%2F2016-02-02---A-Brief-History-of-Typography.md/raw?ref=master", @@ -267,7 +360,8 @@ "Alt-Svc": "clear", "Cache-Control": "max-age=0, private, must-revalidate, no-store, no-cache", "Cf-Cache-Status": "DYNAMIC", - "Cf-Ray": "582c454cfbc9e1da-ORD", + "Cf-Ray": "5c12ee167f537117-ORD", + "Cf-Request-Id": "047fb3220700007117a11fd200000001", "Content-Disposition": "inline; filename=\"2016-02-02---A-Brief-History-of-Typography.md\"; filename*=UTF-8''2016-02-02---A-Brief-History-of-Typography.md", "Content-Type": "text/plain; charset=utf-8", "Expect-Ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", @@ -276,13 +370,13 @@ "Pragma": "no-cache", "Referrer-Policy": "strict-origin-when-cross-origin", "Server": "Netlify", - "Set-Cookie": "__cfduid=dde3d2f304238e51cfd5c9ca0b80286921586687413; expires=Tue, 12-May-20 10:30:13 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Set-Cookie": "__cfduid=df8a4e9960059e8d3cd663fdcec312a281597159115; expires=Thu, 10-Sep-20 15:18:35 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", "Strict-Transport-Security": "max-age=31536000", "Via": "1.1 google", "X-Content-Type-Options": "nosniff", "X-Frame-Options": "SAMEORIGIN", "X-Gitlab-Blob-Id": "0eea554365f002d0f1572af9a58522d335a794d5", - "X-Gitlab-Commit-Id": "b06f90b147afb70c4bb7f11c58be77a1d63c656e", + "X-Gitlab-Commit-Id": "f5023e69482c8cb7b440bb637be4647cda28ec42", "X-Gitlab-Content-Sha256": "5ef3a4f55b0130f04866489f8304fd8db408351abe0bd10a9e8f17b167341591", "X-Gitlab-Encoding": "base64", "X-Gitlab-File-Name": "2016-02-02---A-Brief-History-of-Typography.md", @@ -292,7 +386,7 @@ "X-Gitlab-Size": "2786", "Age": "0", "Connection": "keep-alive", - "Vary": "Origin,Origin", + "Vary": "Origin,Accept-Encoding,Origin", "content-length": "2786" }, "response": "---\ntitle: \"A Brief History of Typography\"\ndate: \"2016-02-02T22:40:32.169Z\"\ntemplate: \"post\"\ndraft: false\ncategory: \"Design Inspiration\"\ntags:\n - \"Linotype\"\n - \"Monotype\"\n - \"History of typography\"\n - \"Helvetica\"\ndescription: \"Morbi in sem quis dui placerat ornare. Pellentesque odio nisi, euismod in, pharetra a, ultricies in, diam. Sed arcu. Cras consequat.\"\ncanonical: ''\n---\n\n**Pellentesque habitant morbi tristique** senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. *Aenean ultricies mi vitae est.* Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. \n\nVestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. [Donec non enim](#) in turpis pulvinar facilisis.\n\n![Nulla faucibus vestibulum eros in tempus. Vestibulum tempor imperdiet velit nec dapibus](/media/image-0.jpg)\n\n## Header Level 2\n\n+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\n+ Aliquam tincidunt mauris eu risus.\n\nDonec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. \n\n
\n\t
\n\t\t

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.

\n\t\t
\n\t\t\t— Aliquam tincidunt mauris eu risus.\n\t\t
\n\t
\n
\n\n### Header Level 3\n\n+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\n+ Aliquam tincidunt mauris eu risus.\n\nPellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra.\n\n```css\n#header h1 a {\n display: block;\n width: 300px;\n height: 80px;\n}\n```\n\nVestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus.", @@ -300,7 +394,7 @@ }, { "method": "GET", - "url": "/.netlify/git/gitlab/repository/commits?path=content/posts/2016-01-09---Perfecting-the-Art-of-Perfection.md&ref_name=master", + "url": "/.netlify/git/gitlab/repository/commits?ref_name=master&path=content/posts/2016-01-12---The-Origins-of-Social-Stationery-Lettering.md", "headers": { "Access-Control-Allow-Credentials": "true", "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", @@ -310,14 +404,15 @@ "Alt-Svc": "clear", "Cache-Control": "max-age=0, private, must-revalidate", "Cf-Cache-Status": "DYNAMIC", - "Cf-Ray": "582c454ecbd7c520-ORD", + "Cf-Ray": "5c12ee17db49037c-ORD", + "Cf-Request-Id": "047fb322e70000037c63acb200000001", "Content-Type": "application/json", "Expect-Ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "Gitlab-Sv": "localhost", - "Link": "; rel=\"first\",; rel=\"last\"", + "Link": "; rel=\"first\",; rel=\"last\"", "Referrer-Policy": "strict-origin-when-cross-origin", "Server": "Netlify", - "Set-Cookie": "__cfduid=deb31c0caaabd9a247b031e2b9576c6b81586687413; expires=Tue, 12-May-20 10:30:13 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Set-Cookie": "__cfduid=d255e04374c0e52d726898917b7bed0e51597159115; expires=Thu, 10-Sep-20 15:18:35 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", "Strict-Transport-Security": "max-age=31536000", "Via": "1.1 google", "X-Content-Type-Options": "nosniff", @@ -330,15 +425,15 @@ "X-Total-Pages": "1", "Age": "0", "Connection": "keep-alive", - "Vary": "Origin,Origin", - "content-length": "591" + "Vary": "Origin,Accept-Encoding,Origin", + "content-length": "592" }, "response": "[{\"id\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"short_id\":\"2bc3fa39\",\"created_at\":\"2019-07-24T10:45:32.000+03:00\",\"parent_ids\":[],\"title\":\"initial commit\",\"message\":\"initial commit\\n\",\"author_name\":\"owner\",\"author_email\":\"owner@users.noreply.github.com\",\"authored_date\":\"2019-07-24T10:45:32.000+03:00\",\"committer_name\":\"owner\",\"committer_email\":\"owner@users.noreply.github.com\",\"committed_date\":\"2019-07-24T10:45:32.000+03:00\",\"web_url\":\"https://gitlab.com/owner/repo/-/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\"}]", "status": 200 }, { "method": "GET", - "url": "/.netlify/git/gitlab/repository/commits?path=content/posts/2016-02-02---A-Brief-History-of-Typography.md&ref_name=master", + "url": "/.netlify/git/gitlab/repository/commits?ref_name=master&path=content/posts/2016-02-02---A-Brief-History-of-Typography.md", "headers": { "Access-Control-Allow-Credentials": "true", "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", @@ -348,14 +443,15 @@ "Alt-Svc": "clear", "Cache-Control": "max-age=0, private, must-revalidate", "Cf-Cache-Status": "DYNAMIC", - "Cf-Ray": "582c45538a1ac520-ORD", + "Cf-Ray": "5c12ee18ad6b037c-ORD", + "Cf-Request-Id": "047fb323680000037c63ad8200000001", "Content-Type": "application/json", "Expect-Ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "Gitlab-Sv": "localhost", "Link": "; rel=\"first\",; rel=\"last\"", "Referrer-Policy": "strict-origin-when-cross-origin", "Server": "Netlify", - "Set-Cookie": "__cfduid=d899563c77da2117dd1dd8117daa1c7581586687414; expires=Tue, 12-May-20 10:30:14 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Set-Cookie": "__cfduid=d255e04374c0e52d726898917b7bed0e51597159115; expires=Thu, 10-Sep-20 15:18:35 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", "Strict-Transport-Security": "max-age=31536000", "Via": "1.1 google", "X-Content-Type-Options": "nosniff", @@ -368,8 +464,47 @@ "X-Total-Pages": "1", "Age": "0", "Connection": "keep-alive", - "Vary": "Origin,Origin", - "content-length": "591" + "Vary": "Origin,Accept-Encoding,Origin", + "content-length": "592" + }, + "response": "[{\"id\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"short_id\":\"2bc3fa39\",\"created_at\":\"2019-07-24T10:45:32.000+03:00\",\"parent_ids\":[],\"title\":\"initial commit\",\"message\":\"initial commit\\n\",\"author_name\":\"owner\",\"author_email\":\"owner@users.noreply.github.com\",\"authored_date\":\"2019-07-24T10:45:32.000+03:00\",\"committer_name\":\"owner\",\"committer_email\":\"owner@users.noreply.github.com\",\"committed_date\":\"2019-07-24T10:45:32.000+03:00\",\"web_url\":\"https://gitlab.com/owner/repo/-/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\"}]", + "status": 200 + }, + { + "method": "GET", + "url": "/.netlify/git/gitlab/repository/commits?ref_name=master&path=content/posts/2017-19-08---Humane-Typography-in-the-Digital-Age.md", + "headers": { + "Access-Control-Allow-Credentials": "true", + "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", + "Access-Control-Allow-Origin": "http://localhost:8080", + "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", + "Access-Control-Max-Age": "7200", + "Alt-Svc": "clear", + "Cache-Control": "max-age=0, private, must-revalidate", + "Cf-Cache-Status": "DYNAMIC", + "Cf-Ray": "5c12ee1999d27117-ORD", + "Cf-Request-Id": "047fb3240300007117a120c200000001", + "Content-Type": "application/json", + "Expect-Ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", + "Gitlab-Sv": "localhost", + "Link": "; rel=\"first\",; rel=\"last\"", + "Referrer-Policy": "strict-origin-when-cross-origin", + "Server": "Netlify", + "Set-Cookie": "__cfduid=df8a4e9960059e8d3cd663fdcec312a281597159115; expires=Thu, 10-Sep-20 15:18:35 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Strict-Transport-Security": "max-age=31536000", + "Via": "1.1 google", + "X-Content-Type-Options": "nosniff", + "X-Frame-Options": "SAMEORIGIN", + "X-Next-Page": "", + "X-Page": "1", + "X-Per-Page": "20", + "X-Prev-Page": "", + "X-Total": "1", + "X-Total-Pages": "1", + "Age": "0", + "Connection": "keep-alive", + "Vary": "Origin,Accept-Encoding,Origin", + "content-length": "592" }, "response": "[{\"id\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"short_id\":\"2bc3fa39\",\"created_at\":\"2019-07-24T10:45:32.000+03:00\",\"parent_ids\":[],\"title\":\"initial commit\",\"message\":\"initial commit\\n\",\"author_name\":\"owner\",\"author_email\":\"owner@users.noreply.github.com\",\"authored_date\":\"2019-07-24T10:45:32.000+03:00\",\"committer_name\":\"owner\",\"committer_email\":\"owner@users.noreply.github.com\",\"committed_date\":\"2019-07-24T10:45:32.000+03:00\",\"web_url\":\"https://gitlab.com/owner/repo/-/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\"}]", "status": 200 @@ -386,7 +521,8 @@ "Alt-Svc": "clear", "Cache-Control": "max-age=0, private, must-revalidate, no-store, no-cache", "Cf-Cache-Status": "DYNAMIC", - "Cf-Ray": "582c45545df9c524-ORD", + "Cf-Ray": "5c12ee199f9c037c-ORD", + "Cf-Request-Id": "047fb324020000037c63ae5200000001", "Content-Disposition": "inline; filename=\"2017-19-08---Humane-Typography-in-the-Digital-Age.md\"; filename*=UTF-8''2017-19-08---Humane-Typography-in-the-Digital-Age.md", "Content-Type": "text/plain; charset=utf-8", "Expect-Ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", @@ -395,13 +531,13 @@ "Pragma": "no-cache", "Referrer-Policy": "strict-origin-when-cross-origin", "Server": "Netlify", - "Set-Cookie": "__cfduid=d2a777a766fa47c69ce054fe27fc923b81586687414; expires=Tue, 12-May-20 10:30:14 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Set-Cookie": "__cfduid=d255e04374c0e52d726898917b7bed0e51597159115; expires=Thu, 10-Sep-20 15:18:35 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", "Strict-Transport-Security": "max-age=31536000", "Via": "1.1 google", "X-Content-Type-Options": "nosniff", "X-Frame-Options": "SAMEORIGIN", "X-Gitlab-Blob-Id": "a532f0a9445cdf90a19c6812cff89d1674991774", - "X-Gitlab-Commit-Id": "b06f90b147afb70c4bb7f11c58be77a1d63c656e", + "X-Gitlab-Commit-Id": "f5023e69482c8cb7b440bb637be4647cda28ec42", "X-Gitlab-Content-Sha256": "063282f246651562d133ca628c0efda434026cf7a116a96f77c8be4b07810ed0", "X-Gitlab-Encoding": "base64", "X-Gitlab-File-Name": "2017-19-08---Humane-Typography-in-the-Digital-Age.md", @@ -411,7 +547,7 @@ "X-Gitlab-Size": "7465", "Age": "0", "Connection": "keep-alive", - "Vary": "Origin,Origin", + "Vary": "Origin,Accept-Encoding,Origin", "content-length": "7465" }, "response": "---\ntitle: Humane Typography in the Digital Age\ndate: \"2017-08-19T22:40:32.169Z\"\ntemplate: \"post\"\ndraft: false\ncategory: \"Typography\"\ntags:\n - \"Design\"\n - \"Typography\"\n - \"Web Development\"\ndescription: \"An Essay on Typography by Eric Gill takes the reader back to the year 1930. The year when a conflict between two worlds came to its term. The machines of the industrial world finally took over the handicrafts.\"\ncanonical: ''\n---\n\n- [The first transition](#the-first-transition)\n- [The digital age](#the-digital-age)\n- [Loss of humanity through transitions](#loss-of-humanity-through-transitions)\n- [Chasing perfection](#chasing-perfection)\n\nAn Essay on Typography by Eric Gill takes the reader back to the year 1930. The year when a conflict between two worlds came to its term. The machines of the industrial world finally took over the handicrafts.\n\nThe typography of this industrial age was no longer handcrafted. Mass production and profit became more important. Quantity mattered more than the quality. The books and printed works in general lost a part of its humanity. The typefaces were not produced by craftsmen anymore. It was the machines printing and tying the books together now. The craftsmen had to let go of their craft and became a cog in the process. An extension of the industrial machine.\n\nBut the victory of the industrialism didn’t mean that the craftsmen were completely extinct. The two worlds continued to coexist independently. Each recognising the good in the other — the power of industrialism and the humanity of craftsmanship. This was the second transition that would strip typography of a part of its humanity. We have to go 500 years back in time to meet the first one.\n\n## The first transition\n\nA similar conflict emerged after the invention of the first printing press in Europe. Johannes Gutenberg invented movable type and used it to produce different compositions. His workshop could print up to 240 impressions per hour. Until then, the books were being copied by hand. All the books were handwritten and decorated with hand drawn ornaments and figures. A process of copying a book was long but each book, even a copy, was a work of art.\n\nThe first printed books were, at first, perceived as inferior to the handwritten ones. They were smaller and cheaper to produce. Movable type provided the printers with flexibility that allowed them to print books in languages other than Latin. Gill describes the transition to industrialism as something that people needed and wanted. Something similar happened after the first printed books emerged. People wanted books in a language they understood and they wanted books they could take with them. They were hungry for knowledge and printed books satisfied this hunger.\n\n![42-line-bible.jpg](/media/42-line-bible.jpg)\n\n*The 42–Line Bible, printed by Gutenberg.*\n\nBut, through this transition, the book lost a large part of its humanity. The machine took over most of the process but craftsmanship was still a part of it. The typefaces were cut manually by the first punch cutters. The paper was made by hand. The illustrations and ornaments were still being hand drawn. These were the remains of the craftsmanship that went almost extinct in the times of Eric Gill.\n\n## The digital age\n\nThe first transition took away a large part of humanity from written communication. Industrialisation, the second transition described by Eric Gill, took away most of what was left. But it’s the third transition that stripped it naked. Typefaces are faceless these days. They’re just fonts on our computers. Hardly anyone knows their stories. Hardly anyone cares. Flicking through thousands of typefaces and finding the “right one” is a matter of minutes.\n\n> In the new computer age the proliferation of typefaces and type manipulations represents a new level of visual pollution threatening our culture. Out of thousands of typefaces, all we need are a few basic ones, and trash the rest.\n>\n— Massimo Vignelli\n\nTypography is not about typefaces. It’s not about what looks best, it’s about what feels right. What communicates the message best. Typography, in its essence, is about the message. “Typographical design should perform optically what the speaker creates through voice and gesture of his thoughts.”, as El Lissitzky, a famous Russian typographer, put it.\n\n## Loss of humanity through transitions\n\nEach transition took away a part of humanity from written language. Handwritten books being the most humane form and the digital typefaces being the least. Overuse of Helvetica is a good example. Messages are being told in a typeface just because it’s a safe option. It’s always there. Everyone knows it but yet, nobody knows it. Stop someone on the street and ask him what Helvetica is? Ask a designer the same question. Ask him where it came from, when, why and who designed it. Most of them will fail to answer these questions. Most of them used it in their precious projects but they still don’t spot it in the street.\n\n
\n\t
\n\t\t

Knowledge of the quality of a typeface is of the greatest importance for the functional, aesthetic and psychological effect.

\n\t\t
\n\t\t\t— Josef Mueller-Brockmann\n\t\t
\n\t
\n
\n\nTypefaces don’t look handmade these days. And that’s all right. They don’t have to. Industrialism took that away from them and we’re fine with it. We’ve traded that part of humanity for a process that produces more books that are easier to read. That can’t be bad. And it isn’t.\n\n> Humane typography will often be comparatively rough and even uncouth; but while a certain uncouthness does not seriously matter in humane works, uncouthness has no excuse whatever in the productions of the machine.\n>\n> — Eric Gill\n\nWe’ve come close to “perfection” in the last five centuries. The letters are crisp and without rough edges. We print our compositions with high–precision printers on a high quality, machine made paper.\n\n![type-through-time.jpg](/media/type-through-time.jpg)\n\n*Type through 5 centuries.*\n\nWe lost a part of ourselves because of this chase after perfection. We forgot about the craftsmanship along the way. And the worst part is that we don’t care. The transition to the digital age made that clear. We choose typefaces like clueless zombies. There’s no meaning in our work. Type sizes, leading, margins… It’s all just a few clicks or lines of code. The message isn’t important anymore. There’s no more “why” behind the “what”.\n\n## Chasing perfection\n\nHuman beings aren’t perfect. Perfection is something that will always elude us. There will always be a small part of humanity in everything we do. No matter how small that part, we should make sure that it transcends the limits of the medium. We have to think about the message first. What typeface should we use and why? Does the typeface match the message and what we want to communicate with it? What will be the leading and why? Will there be more typefaces in our design? On what ground will they be combined? What makes our design unique and why? This is the part of humanity that is left in typography. It might be the last part. Are we really going to give it up?\n\n*Originally published by [Matej Latin](http://matejlatin.co.uk/) on [Medium](https://medium.com/design-notes/humane-typography-in-the-digital-age-9bd5c16199bd?ref=webdesignernews.com#.lygo82z0x).*", @@ -429,7 +565,8 @@ "Alt-Svc": "clear", "Cache-Control": "max-age=0, private, must-revalidate, no-store, no-cache", "Cf-Cache-Status": "DYNAMIC", - "Cf-Ray": "582c45545c7ce1da-ORD", + "Cf-Ray": "5c12ee19bfef037c-ORD", + "Cf-Request-Id": "047fb324140000037c63ae8200000001", "Content-Disposition": "inline; filename=\"2017-18-08---The-Birth-of-Movable-Type.md\"; filename*=UTF-8''2017-18-08---The-Birth-of-Movable-Type.md", "Content-Type": "text/plain; charset=utf-8", "Expect-Ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", @@ -438,13 +575,13 @@ "Pragma": "no-cache", "Referrer-Policy": "strict-origin-when-cross-origin", "Server": "Netlify", - "Set-Cookie": "__cfduid=ddbc2e88f7fc7e9e3a2d87c2b41de577e1586687414; expires=Tue, 12-May-20 10:30:14 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Set-Cookie": "__cfduid=d255e04374c0e52d726898917b7bed0e51597159115; expires=Thu, 10-Sep-20 15:18:35 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", "Strict-Transport-Security": "max-age=31536000", "Via": "1.1 google", "X-Content-Type-Options": "nosniff", "X-Frame-Options": "SAMEORIGIN", "X-Gitlab-Blob-Id": "44f78c474d04273185a95821426f75affc9b0044", - "X-Gitlab-Commit-Id": "b06f90b147afb70c4bb7f11c58be77a1d63c656e", + "X-Gitlab-Commit-Id": "f5023e69482c8cb7b440bb637be4647cda28ec42", "X-Gitlab-Content-Sha256": "d76190173a1675a7aa9183c8e7a7a8c617924d5195999aa5f4daacd83090e548", "X-Gitlab-Encoding": "base64", "X-Gitlab-File-Name": "2017-18-08---The-Birth-of-Movable-Type.md", @@ -452,7 +589,7 @@ "X-Gitlab-Last-Commit-Id": "2bc3fa39d8adb9e008e52793854338399fc6e4ad", "X-Gitlab-Ref": "master", "X-Gitlab-Size": "16071", - "Age": "0", + "Age": "2", "Connection": "keep-alive", "Vary": "Origin,Accept-Encoding,Origin", "content-length": "16071" @@ -460,168 +597,6 @@ "response": "---\ntitle: \"Johannes Gutenberg: The Birth of Movable Type\"\ndate: \"2017-08-18T22:12:03.284Z\"\ntemplate: \"post\"\ndraft: false\ncategory: \"Typography\"\ntags:\n - \"Open source\"\n - \"Gatsby\"\n - \"Typography\"\ndescription: \"German inventor Johannes Gutenberg developed a method of movable type and used it to create one of the western world’s first major printed books, the “Forty–Two–Line” Bible.\"\ncanonical: ''\n---\n\nGerman inventor Johannes Gutenberg developed a method of movable type and used it to create one of the western world’s first major printed books, the “Forty–Two–Line” Bible.\n\n**Johannes Gensfleisch zur Laden zum Gutenberg** (c. 1398 – 1468) was a German blacksmith, goldsmith, printer, and publisher who introduced printing to Europe. His invention of mechanical movable type printing started the Printing Revolution and is widely regarded as the most important event of the modern period. It played a key role in the development of the Renaissance, Reformation, the Age of Enlightenment, and the Scientific revolution and laid the material basis for the modern knowledge-based economy and the spread of learning to the masses.\n\n
\n\t\"Gutenberg\"\n\t
Johannes Gutenberg
\n
\n\nWith his invention of the printing press, Gutenberg was the first European to use movable type printing, in around 1439. Among his many contributions to printing are: the invention of a process for mass-producing movable type; the use of oil-based ink; and the use of a wooden printing press similar to the agricultural screw presses of the period. His truly epochal invention was the combination of these elements into a practical system that allowed the mass production of printed books and was economically viable for printers and readers alike. Gutenberg's method for making type is traditionally considered to have included a type metal alloy and a hand mould for casting type. The alloy was a mixture of lead, tin, and antimony that melted at a relatively low temperature for faster and more economical casting, cast well, and created a durable type.\n\nIn Renaissance Europe, the arrival of mechanical movable type printing introduced the era of mass communication which permanently altered the structure of society. The relatively unrestricted circulation of information — including revolutionary ideas — transcended borders, captured the masses in the Reformation and threatened the power of political and religious authorities; the sharp increase in literacy broke the monopoly of the literate elite on education and learning and bolstered the emerging middle class. Across Europe, the increasing cultural self-awareness of its people led to the rise of proto-nationalism, accelerated by the flowering of the European vernacular languages to the detriment of Latin's status as lingua franca. In the 19th century, the replacement of the hand-operated Gutenberg-style press by steam-powered rotary presses allowed printing on an industrial scale, while Western-style printing was adopted all over the world, becoming practically the sole medium for modern bulk printing.\n\nThe use of movable type was a marked improvement on the handwritten manuscript, which was the existing method of book production in Europe, and upon woodblock printing, and revolutionized European book-making. Gutenberg's printing technology spread rapidly throughout Europe and later the world.\n\nHis major work, the Gutenberg Bible (also known as the 42-line Bible), has been acclaimed for its high aesthetic and technical quality.\n\n## Printing Press\n\nAround 1439, Gutenberg was involved in a financial misadventure making polished metal mirrors (which were believed to capture holy light from religious relics) for sale to pilgrims to Aachen: in 1439 the city was planning to exhibit its collection of relics from Emperor Charlemagne but the event was delayed by one year due to a severe flood and the capital already spent could not be repaid. When the question of satisfying the investors came up, Gutenberg is said to have promised to share a “secret”. It has been widely speculated that this secret may have been the idea of printing with movable type. Also around 1439–1440, the Dutch Laurens Janszoon Coster came up with the idea of printing. Legend has it that the idea came to him “like a ray of light”.\n\n
\n\t\"Early\n\t
Early wooden printing press as depicted in 1568.
\n
\n\nUntil at least 1444 he lived in Strasbourg, most likely in the St. Arbogast parish. It was in Strasbourg in 1440 that Gutenberg is said to have perfected and unveiled the secret of printing based on his research, mysteriously entitled Kunst und Aventur (art and enterprise). It is not clear what work he was engaged in, or whether some early trials with printing from movable type may have been conducted there. After this, there is a gap of four years in the record. In 1448, he was back in Mainz, where he took out a loan from his brother-in-law Arnold Gelthus, quite possibly for a printing press or related paraphernalia. By this date, Gutenberg may have been familiar with intaglio printing; it is claimed that he had worked on copper engravings with an artist known as the Master of Playing Cards.\n\nBy 1450, the press was in operation, and a German poem had been printed, possibly the first item to be printed there. Gutenberg was able to convince the wealthy moneylender Johann Fust for a loan of 800 guilders. Peter Schöffer, who became Fust’s son-in-law, also joined the enterprise. Schöffer had worked as a scribe in Paris and is believed to have designed some of the first typefaces.\n\n
\n\t
\n\t\t

All that has been written to me about that marvelous man seen at Frankfurt is true. I have not seen complete Bibles but only a number of quires of various books of the Bible. The script was very neat and legible, not at all difficult to follow—your grace would be able to read it without effort, and indeed without glasses.

\n\t\t
\n\t\t\t—Future pope Pius II in a letter to Cardinal Carvajal, March 1455\n\t\t
\n\t
\n
\n\nGutenberg's workshop was set up at Hof Humbrecht, a property belonging to a distant relative. It is not clear when Gutenberg conceived the Bible project, but for this he borrowed another 800 guilders from Fust, and work commenced in 1452. At the same time, the press was also printing other, more lucrative texts (possibly Latin grammars). There is also some speculation that there may have been two presses, one for the pedestrian texts, and one for the Bible. One of the profit-making enterprises of the new press was the printing of thousands of indulgences for the church, documented from 1454–55.\n\nIn 1455 Gutenberg completed his 42-line Bible, known as the Gutenberg Bible. About 180 copies were printed, most on paper and some on vellum.\n\n## Court Case\n\nSome time in 1456, there was a dispute between Gutenberg and Fust, and Fust demanded his money back, accusing Gutenberg of misusing the funds. Meanwhile the expenses of the Bible project had proliferated, and Gutenberg's debt now exceeded 20,000 guilders. Fust sued at the archbishop's court. A November 1455 legal document records that there was a partnership for a \"project of the books,\" the funds for which Gutenberg had used for other purposes, according to Fust. The court decided in favor of Fust, giving him control over the Bible printing workshop and half of all printed Bibles.\n\nThus Gutenberg was effectively bankrupt, but it appears he retained (or re-started) a small printing shop, and participated in the printing of a Bible in the town of Bamberg around 1459, for which he seems at least to have supplied the type. But since his printed books never carry his name or a date, it is difficult to be certain, and there is consequently a considerable scholarly debate on this subject. It is also possible that the large Catholicon dictionary, 300 copies of 754 pages, printed in Mainz in 1460, may have been executed in his workshop.\n\nMeanwhile, the Fust–Schöffer shop was the first in Europe to bring out a book with the printer's name and date, the Mainz Psalter of August 1457, and while proudly proclaiming the mechanical process by which it had been produced, it made no mention of Gutenberg.\n\n## Later Life\n\nIn 1462, during a conflict between two archbishops, Mainz was sacked by archbishop Adolph von Nassau, and Gutenberg was exiled. An old man by now, he moved to Eltville where he may have initiated and supervised a new printing press belonging to the brothers Bechtermünze.\n\nIn January 1465, Gutenberg's achievements were recognized and he was given the title Hofmann (gentleman of the court) by von Nassau. This honor included a stipend, an annual court outfit, as well as 2,180 litres of grain and 2,000 litres of wine tax-free. It is believed he may have moved back to Mainz around this time, but this is not certain.\n\n***\n\nGutenberg died in 1468 and was buried in the Franciscan church at Mainz, his contributions largely unknown. This church and the cemetery were later destroyed, and Gutenberg's grave is now lost.\n\nIn 1504, he was mentioned as the inventor of typography in a book by Professor Ivo Wittig. It was not until 1567 that the first portrait of Gutenberg, almost certainly an imaginary reconstruction, appeared in Heinrich Pantaleon's biography of famous Germans.\n\n## Printing Method With Movable Type\n\nGutenberg's early printing process, and what tests he may have made with movable type, are not known in great detail. His later Bibles were printed in such a way as to have required large quantities of type, some estimates suggesting as many as 100,000 individual sorts. Setting each page would take, perhaps, half a day, and considering all the work in loading the press, inking the type, pulling the impressions, hanging up the sheets, distributing the type, etc., it is thought that the Gutenberg–Fust shop might have employed as many as 25 craftsmen.\n\n![Movable metal type, and composing stick, descended from Gutenberg's press. Photo by Willi Heidelbach. Licensed under CC BY 2.5](/media/movable-type.jpg)\n\n*Movable metal type, and composing stick, descended from Gutenberg's press. Photo by Willi Heidelbach. Licensed under CC BY 2.5*\n\nGutenberg's technique of making movable type remains unclear. In the following decades, punches and copper matrices became standardized in the rapidly disseminating printing presses across Europe. Whether Gutenberg used this sophisticated technique or a somewhat primitive version has been the subject of considerable debate.\n\nIn the standard process of making type, a hard metal punch (made by punchcutting, with the letter carved back to front) is hammered into a softer copper bar, creating a matrix. This is then placed into a hand-held mould and a piece of type, or \"sort\", is cast by filling the mould with molten type-metal; this cools almost at once, and the resulting piece of type can be removed from the mould. The matrix can be reused to create hundreds, or thousands, of identical sorts so that the same character appearing anywhere within the book will appear very uniform, giving rise, over time, to the development of distinct styles of typefaces or fonts. After casting, the sorts are arranged into type-cases, and used to make up pages which are inked and printed, a procedure which can be repeated hundreds, or thousands, of times. The sorts can be reused in any combination, earning the process the name of “movable type”.\n\nThe invention of the making of types with punch, matrix and mold has been widely attributed to Gutenberg. However, recent evidence suggests that Gutenberg's process was somewhat different. If he used the punch and matrix approach, all his letters should have been nearly identical, with some variations due to miscasting and inking. However, the type used in Gutenberg's earliest work shows other variations.\n\n
\n\t
\n\t\t

It is a press, certainly, but a press from which shall flow in inexhaustible streams… Through it, god will spread his word.

\n\t\t
\n\t\t\t—Johannes Gutenberg\n\t\t
\n\t
\n
\n\nIn 2001, the physicist Blaise Agüera y Arcas and Princeton librarian Paul Needham, used digital scans of a Papal bull in the Scheide Library, Princeton, to carefully compare the same letters (types) appearing in different parts of the printed text. The irregularities in Gutenberg's type, particularly in simple characters such as the hyphen, suggested that the variations could not have come from either ink smear or from wear and damage on the pieces of metal on the types themselves. While some identical types are clearly used on other pages, other variations, subjected to detailed image analysis, suggested that they could not have been produced from the same matrix. Transmitted light pictures of the page also appeared to reveal substructures in the type that could not arise from traditional punchcutting techniques. They hypothesized that the method may have involved impressing simple shapes to create alphabets in “cuneiform” style in a matrix made of some soft material, perhaps sand. Casting the type would destroy the mould, and the matrix would need to be recreated to make each additional sort. This could explain the variations in the type, as well as the substructures observed in the printed images.\n\nThus, they feel that “the decisive factor for the birth of typography”, the use of reusable moulds for casting type, might have been a more progressive process than was previously thought. They suggest that the additional step of using the punch to create a mould that could be reused many times was not taken until twenty years later, in the 1470s. Others have not accepted some or all of their suggestions, and have interpreted the evidence in other ways, and the truth of the matter remains very uncertain.\n\nA 1568 history by Hadrianus Junius of Holland claims that the basic idea of the movable type came to Gutenberg from Laurens Janszoon Coster via Fust, who was apprenticed to Coster in the 1430s and may have brought some of his equipment from Haarlem to Mainz. While Coster appears to have experimented with moulds and castable metal type, there is no evidence that he had actually printed anything with this technology. He was an inventor and a goldsmith. However, there is one indirect supporter of the claim that Coster might be the inventor. The author of the Cologne Chronicle of 1499 quotes Ulrich Zell, the first printer of Cologne, that printing was performed in Mainz in 1450, but that some type of printing of lower quality had previously occurred in the Netherlands. However, the chronicle does not mention the name of Coster, while it actually credits Gutenberg as the \"first inventor of printing\" in the very same passage (fol. 312). The first securely dated book by Dutch printers is from 1471, and the Coster connection is today regarded as a mere legend.\n\nThe 19th century printer and typefounder Fournier Le Jeune suggested that Gutenberg might not have been using type cast with a reusable matrix, but possibly wooden types that were carved individually. A similar suggestion was made by Nash in 2004. This remains possible, albeit entirely unproven.\n\nIt has also been questioned whether Gutenberg used movable types at all. In 2004, Italian professor Bruno Fabbiani claimed that examination of the 42-line Bible revealed an overlapping of letters, suggesting that Gutenberg did not in fact use movable type (individual cast characters) but rather used whole plates made from a system somewhat like a modern typewriter, whereby the letters were stamped successively into the plate and then printed. However, most specialists regard the occasional overlapping of type as caused by paper movement over pieces of type of slightly unequal height.", "status": 200 }, - { - "method": "GET", - "url": "/.netlify/git/gitlab/repository/files/.lfsconfig/raw?ref=master", - "headers": { - "Access-Control-Allow-Credentials": "true", - "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", - "Access-Control-Allow-Origin": "http://localhost:8080", - "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", - "Access-Control-Max-Age": "7200", - "Alt-Svc": "clear", - "Cache-Control": "max-age=0, private, must-revalidate, no-store, no-cache", - "Cf-Cache-Status": "DYNAMIC", - "Cf-Ray": "582c4554ec3bc520-ORD", - "Content-Disposition": "inline; filename=\".lfsconfig\"; filename*=UTF-8''.lfsconfig", - "Content-Type": "text/plain; charset=utf-8", - "Expect-Ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", - "Expires": "Fri, 01 Jan 1990 00:00:00 GMT", - "Gitlab-Sv": "localhost", - "Pragma": "no-cache", - "Referrer-Policy": "strict-origin-when-cross-origin", - "Server": "Netlify", - "Set-Cookie": "__cfduid=d899563c77da2117dd1dd8117daa1c7581586687414; expires=Tue, 12-May-20 10:30:14 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", - "Strict-Transport-Security": "max-age=31536000", - "Via": "1.1 google", - "X-Content-Type-Options": "nosniff", - "X-Frame-Options": "SAMEORIGIN", - "X-Gitlab-Blob-Id": "9c66a7029ced5f8b074fac70886aa4410c608223", - "X-Gitlab-Commit-Id": "b06f90b147afb70c4bb7f11c58be77a1d63c656e", - "X-Gitlab-Content-Sha256": "3e22f2c96c2f664f3cbc42dfc658039a92fc0e339a27c6a00081a1b6df8a1b21", - "X-Gitlab-Encoding": "base64", - "X-Gitlab-File-Name": ".lfsconfig", - "X-Gitlab-File-Path": ".lfsconfig", - "X-Gitlab-Last-Commit-Id": "b06f90b147afb70c4bb7f11c58be77a1d63c656e", - "X-Gitlab-Ref": "master", - "X-Gitlab-Size": "91", - "Age": "0", - "Connection": "keep-alive", - "Vary": "Origin,Origin", - "content-length": "91" - }, - "response": "[lfs]\n\turl = https://79ce1332-2af4-460d-badd-762ca063a40a.netlify.com/.netlify/large-media\n", - "status": 200 - }, - { - "method": "GET", - "url": "/.netlify/git/gitlab/repository/commits?path=content/posts/2017-18-08---The-Birth-of-Movable-Type.md&ref_name=master", - "headers": { - "Access-Control-Allow-Credentials": "true", - "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", - "Access-Control-Allow-Origin": "http://localhost:8080", - "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", - "Access-Control-Max-Age": "7200", - "Alt-Svc": "clear", - "Cache-Control": "max-age=0, private, must-revalidate", - "Cf-Cache-Status": "DYNAMIC", - "Cf-Ray": "582c45551e98c524-ORD", - "Content-Type": "application/json", - "Expect-Ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", - "Gitlab-Sv": "localhost", - "Link": "; rel=\"first\",; rel=\"last\"", - "Referrer-Policy": "strict-origin-when-cross-origin", - "Server": "Netlify", - "Set-Cookie": "__cfduid=d2a777a766fa47c69ce054fe27fc923b81586687414; expires=Tue, 12-May-20 10:30:14 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", - "Strict-Transport-Security": "max-age=31536000", - "Via": "1.1 google", - "X-Content-Type-Options": "nosniff", - "X-Frame-Options": "SAMEORIGIN", - "X-Next-Page": "", - "X-Page": "1", - "X-Per-Page": "20", - "X-Prev-Page": "", - "X-Total": "1", - "X-Total-Pages": "1", - "Age": "0", - "Connection": "keep-alive", - "Vary": "Origin,Origin", - "content-length": "591" - }, - "response": "[{\"id\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"short_id\":\"2bc3fa39\",\"created_at\":\"2019-07-24T10:45:32.000+03:00\",\"parent_ids\":[],\"title\":\"initial commit\",\"message\":\"initial commit\\n\",\"author_name\":\"owner\",\"author_email\":\"owner@users.noreply.github.com\",\"authored_date\":\"2019-07-24T10:45:32.000+03:00\",\"committer_name\":\"owner\",\"committer_email\":\"owner@users.noreply.github.com\",\"committed_date\":\"2019-07-24T10:45:32.000+03:00\",\"web_url\":\"https://gitlab.com/owner/repo/-/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\"}]", - "status": 200 - }, - { - "method": "GET", - "url": "/.netlify/git/gitlab/repository/files/.gitattributes/raw?ref=master", - "headers": { - "Access-Control-Allow-Credentials": "true", - "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", - "Access-Control-Allow-Origin": "http://localhost:8080", - "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", - "Access-Control-Max-Age": "7200", - "Alt-Svc": "clear", - "Cache-Control": "max-age=0, private, must-revalidate, no-store, no-cache", - "Cf-Cache-Status": "DYNAMIC", - "Cf-Ray": "582c455a0bbec520-ORD", - "Content-Disposition": "inline; filename=\".gitattributes\"; filename*=UTF-8''.gitattributes", - "Content-Type": "text/plain; charset=utf-8", - "Expect-Ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", - "Expires": "Fri, 01 Jan 1990 00:00:00 GMT", - "Gitlab-Sv": "localhost", - "Pragma": "no-cache", - "Referrer-Policy": "strict-origin-when-cross-origin", - "Server": "Netlify", - "Set-Cookie": "__cfduid=dbb58122749fcecce80730c7a212e30ba1586687415; expires=Tue, 12-May-20 10:30:15 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", - "Strict-Transport-Security": "max-age=31536000", - "Via": "1.1 google", - "X-Content-Type-Options": "nosniff", - "X-Frame-Options": "SAMEORIGIN", - "X-Gitlab-Blob-Id": "406a244d1522a3c809efab0c9ce46bbd86aa9c1d", - "X-Gitlab-Commit-Id": "b06f90b147afb70c4bb7f11c58be77a1d63c656e", - "X-Gitlab-Content-Sha256": "ad79367f544fd9f77f67925a43970c261e0ea1337dc29d8095fdc30113f83e04", - "X-Gitlab-Encoding": "base64", - "X-Gitlab-File-Name": ".gitattributes", - "X-Gitlab-File-Path": ".gitattributes", - "X-Gitlab-Last-Commit-Id": "cccedba45cd89df3190e24a5e173a89c097b65bb", - "X-Gitlab-Ref": "master", - "X-Gitlab-Size": "188", - "Age": "0", - "Connection": "keep-alive", - "Vary": "Origin,Origin", - "content-length": "188" - }, - "response": "/.github export-ignore\n/.gitattributes export-ignore\n/.editorconfig export-ignore\n/.travis.yml export-ignore\n**/*.js.snap export-ignore\nstatic/media/** filter=lfs diff=lfs merge=lfs -text\n", - "status": 200 - }, - { - "method": "GET", - "url": "/.netlify/git/gitlab/repository/commits?path=content/posts/2017-19-08---Humane-Typography-in-the-Digital-Age.md&ref_name=master", - "headers": { - "Access-Control-Allow-Credentials": "true", - "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", - "Access-Control-Allow-Origin": "http://localhost:8080", - "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", - "Access-Control-Max-Age": "7200", - "Alt-Svc": "clear", - "Cache-Control": "max-age=0, private, must-revalidate", - "Cf-Cache-Status": "DYNAMIC", - "Cf-Ray": "582c4555be2ee1da-ORD", - "Content-Type": "application/json", - "Expect-Ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", - "Gitlab-Sv": "localhost", - "Link": "; rel=\"first\",; rel=\"last\"", - "Referrer-Policy": "strict-origin-when-cross-origin", - "Server": "Netlify", - "Set-Cookie": "__cfduid=ddbc2e88f7fc7e9e3a2d87c2b41de577e1586687414; expires=Tue, 12-May-20 10:30:14 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", - "Strict-Transport-Security": "max-age=31536000", - "Via": "1.1 google", - "X-Content-Type-Options": "nosniff", - "X-Frame-Options": "SAMEORIGIN", - "X-Next-Page": "", - "X-Page": "1", - "X-Per-Page": "20", - "X-Prev-Page": "", - "X-Total": "1", - "X-Total-Pages": "1", - "Age": "1", - "Connection": "keep-alive", - "Vary": "Origin,Origin", - "content-length": "591" - }, - "response": "[{\"id\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"short_id\":\"2bc3fa39\",\"created_at\":\"2019-07-24T10:45:32.000+03:00\",\"parent_ids\":[],\"title\":\"initial commit\",\"message\":\"initial commit\\n\",\"author_name\":\"owner\",\"author_email\":\"owner@users.noreply.github.com\",\"authored_date\":\"2019-07-24T10:45:32.000+03:00\",\"committer_name\":\"owner\",\"committer_email\":\"owner@users.noreply.github.com\",\"committed_date\":\"2019-07-24T10:45:32.000+03:00\",\"web_url\":\"https://gitlab.com/owner/repo/-/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\"}]", - "status": 200 - }, { "body": "{\"oid\":\"b1d40c19b912d2130d1bed8ff1a62a55c7d932978502e1d8559eb77951c5e8d3\",\"size\":3470}", "method": "POST", @@ -630,7 +605,65 @@ "Access-Control-Allow-Credentials": "true", "Access-Control-Allow-Origin": "*", "Alt-Svc": "clear", - "Content-Length": "4", + "Content-Length": "139", + "Content-Type": "application/json", + "Via": "1.1 google", + "Age": "2", + "Connection": "keep-alive", + "Server": "Netlify", + "Vary": "Origin" + }, + "response": "{\"code\":404,\"msg\":\"object 8a3d7a31-a117-45a2-80a0-a371cc14261f/b1d40c19b912d2130d1bed8ff1a62a55c7d932978502e1d8559eb77951c5e8d3 not found\"}", + "status": 404 + }, + { + "method": "GET", + "url": "/.netlify/git/gitlab/repository/commits?ref_name=master&path=content/posts/2017-18-08---The-Birth-of-Movable-Type.md", + "headers": { + "Access-Control-Allow-Credentials": "true", + "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", + "Access-Control-Allow-Origin": "http://localhost:8080", + "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", + "Access-Control-Max-Age": "7200", + "Alt-Svc": "clear", + "Cache-Control": "max-age=0, private, must-revalidate", + "Cf-Cache-Status": "DYNAMIC", + "Cf-Ray": "5c12ee1a394b037c-ORD", + "Cf-Request-Id": "047fb324670000037c63af5200000001", + "Content-Type": "application/json", + "Expect-Ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", + "Gitlab-Sv": "localhost", + "Link": "; rel=\"first\",; rel=\"last\"", + "Referrer-Policy": "strict-origin-when-cross-origin", + "Server": "Netlify", + "Set-Cookie": "__cfduid=d255e04374c0e52d726898917b7bed0e51597159115; expires=Thu, 10-Sep-20 15:18:35 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Strict-Transport-Security": "max-age=31536000", + "Via": "1.1 google", + "X-Content-Type-Options": "nosniff", + "X-Frame-Options": "SAMEORIGIN", + "X-Next-Page": "", + "X-Page": "1", + "X-Per-Page": "20", + "X-Prev-Page": "", + "X-Total": "1", + "X-Total-Pages": "1", + "Age": "2", + "Connection": "keep-alive", + "Vary": "Origin,Accept-Encoding,Origin", + "content-length": "592" + }, + "response": "[{\"id\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"short_id\":\"2bc3fa39\",\"created_at\":\"2019-07-24T10:45:32.000+03:00\",\"parent_ids\":[],\"title\":\"initial commit\",\"message\":\"initial commit\\n\",\"author_name\":\"owner\",\"author_email\":\"owner@users.noreply.github.com\",\"authored_date\":\"2019-07-24T10:45:32.000+03:00\",\"committer_name\":\"owner\",\"committer_email\":\"owner@users.noreply.github.com\",\"committed_date\":\"2019-07-24T10:45:32.000+03:00\",\"web_url\":\"https://gitlab.com/owner/repo/-/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\"}]", + "status": 200 + }, + { + "body": "{\"operation\":\"upload\",\"transfers\":[\"basic\"],\"objects\":[{\"size\":3470,\"oid\":\"b1d40c19b912d2130d1bed8ff1a62a55c7d932978502e1d8559eb77951c5e8d3\"}]}", + "method": "POST", + "url": "/.netlify/large-media/objects/batch", + "headers": { + "Access-Control-Allow-Credentials": "true", + "Access-Control-Allow-Origin": "*", + "Alt-Svc": "clear", + "Content-Length": "1058", "Content-Type": "application/vnd.git-lfs+json", "Via": "1.1 google", "Age": "0", @@ -638,7 +671,23 @@ "Server": "Netlify", "Vary": "Origin" }, - "response": "null", + "response": "{\"transfer\":\"basic\",\"objects\":[{\"oid\":\"b1d40c19b912d2130d1bed8ff1a62a55c7d932978502e1d8559eb77951c5e8d3\",\"size\":3470,\"authenticated\":true,\"actions\":{\"upload\":{\"href\":\"https://nf-git-lfs-jfk-production.s3.amazonaws.com/8a3d7a31-a117-45a2-80a0-a371cc14261f/b1d40c19b912d2130d1bed8ff1a62a55c7d932978502e1d8559eb77951c5e8d3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAI45QHABMIC4EDVSA%2F20200811%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20200811T151836Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=bf10edbb090623d9584a57ef0f6704fabfc85d02754ccc06a6433874665d1131\",\"expires_in\":900},\"verify\":{\"href\":\"https://8a3d7a31-a117-45a2-80a0-a371cc14261f.netlify.app/.netlify/large-media/verify\",\"header\":{\"Authorization\":\"Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBfbWV0YWRhdGEiOnsicHJvdmlkZXIiOiJlbWFpbCJ9LCJlbWFpbCI6Im5ldGxpZnlDTVNAbmV0bGlmeS5jb20iLCJleHAiOjE1OTcxNjI3MTMsInN1YiI6IjE2Y2FhNmQ1LWViMTctNGZmNi04MzRiLTlkMjE3ZGViZTQxNSIsInVzZXJfbWV0YWRhdGEiOnt9fQ.7Kl6bwERjEd7-aF7C3QUPaDHuOhb3KVZgyqbCHcQAbQ\"}}}}]}", + "status": 200 + }, + { + "body": "{\"type\":\"BINARY\",\"base64Bytes\":\"iVBORw0KGgoAAAANSUhEUgAAAJcAAACXCAMAAAAvQTlLAAAAwFBMVEX///85rbswtrpAp71DpL03sLs8q7xGob4tubkzs7o+qLwqvLknv7gkwrgpvbhIn75Mm7/x+vrs9fhktcfn9/bg8PMtp7lSr8IWw7U7yL3Y7vAAq7JSzMM+w75MwMGj2dxmv8iLx9O73ORcrMRorMeJ2tJr1MlTx8N8z8+45uWs4OBQu8HH5ulTuMMXqbaW0Ndxvsuq1t4jnrd6ss2TwNUwj7ii4tzP8Ox00syR19ZkxseByNCezdnP5Ox2tsyDv9FhQXEFAAAMiUlEQVR4nO2ci1biyBaGDTcBUaxAEjuoQLQHEQhJ2j7TCLTv/1anau8kdU3wwsW1zvlnVg9UKlVf/r1rVyFjn539X6cSOTWASf2f/9z+87N/agxF5OcN6uf3Mu32JtPtqVEE9X/ccP34NrEktzeibr9JKCW3vo9j1K1L+g/X5bdwrP/jkkqgYjq9Y/3bSxSz7PImfXN5e2Kw/qWoG+H1ScFyt3T9PCXWj0KsU/pV4tblf06HRX5cdoqw/kClOIlnZNKhKovi/O4EYKQDMlsGUezfdTpHL7D9SSeXhoX1/olemhzZMXLXESVRdS7/ZV3+hSt3R3VMdEsTli5yi++OmWOKW4omYNEqfXd1PMdK3ep0IIq+wHkkx8gVVeeqCOsJ+qToV6CjONaf4GQFYHdiFNOex3CM3F1dlIFNgV3Curg4fI71JxdUV1dFaH+g16tAdcVuOLRj5O4CpZPBqyuY/zlnSrEO7Ri6JYMBW4aHUdSoDu3Y08WVESzDm0CvPzkU731gx/zVnTCVxgaeTDWvmJrN1QG5aIY9TwrJnqHDHTNKhrpoUq75Qbmopk8XYoRyrFe4+qQ6hW41m4eJI3ld8cx1VtrMVxcdn12am6GoDoJl39ORX+f5M5PpHxUM8ofcFWHdA7WzXyxynw7+zMn8V2n69BhhhqKCffNpv9Hs3/PxVzx/+8MJi9pk9Tx9XmEUC7GasCgmzfs91jEiYLFwTvmV6eSCW0g7FlGly5FZvjfH+rNKpSLN0RzyPBGnWWVJ35SZmJifdpOONNuTY+S+UtHA7p98wwMwIBMTu4E9yZxxVfbjWB+xNLLm/VR78FcTURp8BvOMA+0jx0iOZSBbKU8+L+aC5bhKx/m6Y30RS+VqqsWSFHNBdXvKBvqqY5JbpjRT+j8VcrE1TF7zYb7mWL/V0rgoGYd71e5Y3etM7D6W9n0+TKvyBcfIfUsHkz0zPMuzTFYBrAHzxx9kVFSfd6w/a6FK0AzV4uzsXx7O/AbWHgw4FgX7pGMkwzKCpWRP5nudIUY77w0Bz5YjDjqofMqx/n1LkIkM2KbCLVPhwEHfNIWeS9b0yqFardnwc1iz1m4uKmFF+pTzdSgeOAZ5N8DnVIPZ/JPpZbcUVcxs+enCTot5RdihyHAmdLNTrMFs/YVj2FwFM3Jhfk3n09VMaBQPHGgaY/UHmFbCpu8sP27bcvAOMjwM6u3C3P5qNkTGUWvQGvHjG5mPBuFHThc23EtmGpfGBoc93xhgIZz51EMpxqNBnWr2bsf69boN8xm5RDKM4szIVRnM9ANHLn9No1FHvdMxsqiHa3i1DAvIMjYYcWjGYpqtzAk+X8MgKdfoXY7ZrGsIATobFXIBG6SNOYogluUj7eOsM2wNOBSbDMOz0y0QPINfL+OCo97ZazEUaCC74a+BSsCiWux0zF6Eqbnwdhi2CtEGEKNhixFkxQ1etipSN+W5hzOVijq22OFYjlWvx9AwqhdxDWBr0cqv0mmw0uJIy0NYV1UOZi8s3hWWtAMvTVPi+i7PwNnQPJ2zXihcVhmYPbKsek42grY4NIMN8HOsXnt5j9m8eC47ngmm0VmtUWFnYoHyoEOgWCRNZHDRMZdekGkPJGthu/ZH9RQN57UKkp8G0ZLJhEgCmgCHUVwX2DVoCfvQfJ1tgs4oDEfC8cZfWiHHKnCM5FgZmIXLdxpysIysPIojcd+e0U6sN5kv02HWwiE3GFlhNmvDVC7sRaPRsGS0NJJraflgkGBOUxTpChQ2xiWjas2YEc/5KNQ04TQ5X4cpWaOhJ7/dsGQuBINF3lcWT6u1gA1obcCaiefCpxarVC1cQUt5kCHfFe3lArEogwJmL9xGwwCGzs6VeoO4vrZ70k2HR2I+atXT+gm2r6UhaGKteWWzgwjnd5VQNrCZEUtk6QYuRxKfn56mlL1AWIH9ofgYQ+heV2TVFwGncCJgcBsiVpRhaZ6FATDIkYT5l5yV8oUzaQXWxQcBe526LFayrHCx5HfZsee6DTfiWGMRSw2mrUYyjDGKQktdPIXGai0P2RC+pbRm5SHaCrGnprnj3EIZSyHTIrmABh6W0FryFegvF9rmF7ILgdQsTuD2Yk62HbtJZuFY4xLB0B4hPQAizqdZxGKuq0z5g/CwW5Ig2xtjMZxxnl06mEjmiHFDTDt7JywqEhjOCfVs7YxMWFCcgMyN9A+U9nzjefSSSpfdjefc9IExiumiF7N2aWLiT2LpVlniZK7rxYZ9iGyDTdTW2DCSG4xkyJRFkRZtYRxlBcpcYGmoUVkNRTSc5u+QbCceq8bBCLiBL4P5BpONrUCfF3a6AgupaEFgdzthOVNmWi8wkkFU43FPYGOjKFV4bQkB9JclUBB5ZmvwHqw2lettisioAzTlIoaPA1i8poBx8goso4IDH+u33AkFVFSJMFccm75Q8mnKsajSgczu2rFerJBGTHJYjuOdVBmXUO/PSLvq9caBoy1VwlLOasRqO9g25gdJ+Q9Z7GYSlULlZrXbnvzkvSqLrRstA18/nBmOa2QehTqCSS78iGlRwiRi9dSDjoftLiWOqHPGuHGqeLEbKONiY/mNYq62IE8/GPaEy7TIRbHJuSyE76aiXOyGuWFH0bmqqlvoWFUggypG4QrYxg33PUywz7D+cQGX6BXNceMHD8kxhtZglcL11qbexI+XERYSM1EmPE9FZi55QpNbMFdbAWOuNZaFuUZsP1jT3YN2Kk5qF9ayEUrBahemDa5KMc+iwm2B09H9gTlXxAUj6FcVpqoxt3IwryqSjY3fZhid28ZQgtX5aQt8T6u2tzUsc24JjmVgvQ3vqdwT9JZzw4Kwg+XYk9jc9MkCtwyKUpW6BWNTxyha0gt4xyBS7tqwyRfRxvDdgO0EsOsjSHZs8d1iKEa1wy0YuFdNvA0PoBPTWhspAPhpk80exVt99zpzAlisfJS0fulQiLXLLQQTznvOG+wDap5t8+dnbL1oY0hE298K79hnCCMS6B1Y4siBl8D9eKQPfMfxA7ROSRhGNw62JbuX4xZT9T70nQfZZGsA7xu7bc9rZx/vetrKZykVjeMiNtc1Q70ntwSo7VuS3pZGcZ6kI2JByvZ5Vh4V57xx4OtTke3mrdd2E5XqQ1hnOVW1iudHwjcpF+yL9cDkHdw2TbnAuFg3vXaSCFTJh7DSciFEf5zwefFEGRVyZXQFIaWV5M2rpnQfyy0Klj8QhM1no7SzkgtNjrcDrF3yAYLurGNqXPLBlXjGAodcGEVuH2NLYLTtLi6hvGwDx0Cw3XziS1vbqzEMCEYsJir1DSMpxtYoLwPbVpOq97bZdQx+n8hDrVrDkCVVWQl+Ase1UC2g4v3G6f00cN5ma3LuQ7K9pAcvelVV+LOgbYL2wb9t/K8sMDaQFmBS7VHnvsRGcN/a1DSudB1tVCNVQXa+yW00CrUkqY3LZt4Fxv6w6TgaWRbJcqwkVrlqmT6+ElVFfCxxSvxZyg6urQBfE/Xw5f8DLBBGqwpoGMm4NJJQUByViWF92a2zB3XMWhXwkje4HJVysR5bbYA9uEXTSwcD52oQJFpD9FWB5LQX/LAhSA7g1hnUMbNwy02n1UJFhYtjo3Ltwy0ms2N0WozkWwE27QBVuXcQt5iKHMN5iVfIBZFWnNyXW0xFjj2IkTQIdgX56v7cYipy7C9cHRdgAYMjce3TLSb74dw0cxrJAi6gFt08369bMLcZDEPlm7lwOYpYB/hdCuoYU03Bw0huaibh7kh52G1U+3eLiSAYTlEDvvOsRhl2hXQ5ZncxrAP9BpHNp8hFIfEohoFK4wW2np/b0k2HcYuJ1HSwzIZNjZNmrwA4f3vA37cyOXZ+/gLX/urAItfh3CoEq+EGrrXDNhUfA6vIMSIQcMGKeDsKlrS+dkUSbESsI/yGrdEx/FmK3NZ1Mq7Du8VEDFw13MCltkc7Yz3Sb3Dbj10NDI9iL+KFvwwn6CLfUUS6GlgXI/mgor50j5FbmahjlAzokLDb7eLPUnhbF5fj8dwCsK6mdAPnDbAc/x4VCx1ThBs4b2fLkRz9L8YwOIYbePbu+thEGZjm2CO055E8EZfBMYzkLzHfTgKmOZZu4BDGkp+uHhwszSQeSfwyhDVcb3fdfUiwx2sBjf6BG/jLdff6uHVLA6Mw8M81haJ/oEs2fXFSLFqgHq8FdVOe7ePJ/8Y0u3stCSN5YrcAQXLs+vfub+qPJNWxb+AVSnHs5dQ8uezv6RfVr99Zev06NYqsFwT7/X2CmMp5+fXr18ue/3qJ/ejktfR/WP8FOoK2QLx2JrUAAAAASUVORK5CYII=\",\"contentType\":\"image/png\"}", + "method": "PUT", + "url": "/8a3d7a31-a117-45a2-80a0-a371cc14261f/b1d40c19b912d2130d1bed8ff1a62a55c7d932978502e1d8559eb77951c5e8d3?X-Amz-Date=20200811T151836Z&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Signature=bf10edbb090623d9584a57ef0f6704fabfc85d02754ccc06a6433874665d1131&X-Amz-SignedHeaders=host&X-Amz-Credential=AKIAI45QHABMIC4EDVSA/20200811/us-east-1/s3/aws4_request&X-Amz-Expires=900", + "headers": { + "x-amz-id-2": "def3pRDKlw/A72N46T4mcWj7pNAPJmjY0asAi4ZXnCHJUWj1NPzTHDWuWDWzwli7SgQCg6Ahd1g=", + "x-amz-request-id": "105A4CD5EBA9DB1E", + "Access-Control-Allow-Origin": "*", + "Access-Control-Allow-Methods": "PUT, GET", + "Access-Control-Max-Age": "3000", + "Vary": "Origin, Access-Control-Request-Headers, Access-Control-Request-Method", + "Content-Length": "0", + "Server": "AmazonS3" + }, "status": 200 }, { @@ -653,13 +702,14 @@ "Alt-Svc": "clear", "Cache-Control": "no-cache", "Cf-Cache-Status": "DYNAMIC", - "Cf-Ray": "582c4567cdc7e1da-ORD", + "Cf-Ray": "5c12ee24287f7117-ORD", + "Cf-Request-Id": "047fb32a9a00007117a124a200000001", "Content-Length": "32", "Content-Type": "application/json", "Expect-Ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "Gitlab-Sv": "localhost", "Server": "Netlify", - "Set-Cookie": "__cfduid=dcbdf2e3821438841ccb8adcf54435fa01586687417; expires=Tue, 12-May-20 10:30:17 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Set-Cookie": "__cfduid=de5c9b95ae158899bd4982323d02223af1597159117; expires=Thu, 10-Sep-20 15:18:37 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", "Via": "1.1 google", "X-Content-Type-Options": "nosniff", "X-Frame-Options": "SAMEORIGIN", @@ -667,7 +717,6 @@ "Connection": "keep-alive", "Vary": "Origin,Origin" }, - "response": null, "status": 404 }, { @@ -683,14 +732,15 @@ "Alt-Svc": "clear", "Cache-Control": "max-age=0, private, must-revalidate", "Cf-Cache-Status": "DYNAMIC", - "Cf-Ray": "582c456dee81c520-ORD", - "Content-Length": "755", + "Cf-Ray": "5c12ee276a7a7117-ORD", + "Cf-Request-Id": "047fb32ca300007117a1266200000001", + "Content-Length": "779", "Content-Type": "application/json", "Expect-Ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "Gitlab-Sv": "localhost", "Referrer-Policy": "strict-origin-when-cross-origin", "Server": "Netlify", - "Set-Cookie": "__cfduid=d3655fd436d9cf5bf2904ddfcc34927b91586687418; expires=Tue, 12-May-20 10:30:18 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Set-Cookie": "__cfduid=de5c9b95ae158899bd4982323d02223af1597159117; expires=Thu, 10-Sep-20 15:18:37 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", "Strict-Transport-Security": "max-age=31536000", "Via": "1.1 google", "X-Content-Type-Options": "nosniff", @@ -699,12 +749,13 @@ "Connection": "keep-alive", "Vary": "Origin,Origin" }, - "response": "{\"id\":\"dbabb29f420e0f2e6b909dcc6ef3de95b021bc66\",\"short_id\":\"dbabb29f\",\"created_at\":\"2020-04-12T10:30:18.000+00:00\",\"parent_ids\":[\"b06f90b147afb70c4bb7f11c58be77a1d63c656e\"],\"title\":\"Upload “static/media/netlify.png”\",\"message\":\"Upload “static/media/netlify.png”\",\"author_name\":\"netlifyCMS\",\"author_email\":\"netlifyCMS@netlify.com\",\"authored_date\":\"2020-04-12T10:30:18.000+00:00\",\"committer_name\":\"owner\",\"committer_email\":\"owner@gmail.com\",\"committed_date\":\"2020-04-12T10:30:18.000+00:00\",\"web_url\":\"https://gitlab.com/owner/repo/-/commit/dbabb29f420e0f2e6b909dcc6ef3de95b021bc66\",\"stats\":{\"additions\":3,\"deletions\":0,\"total\":3},\"status\":null,\"project_id\":18082407,\"last_pipeline\":null}", + "response": "{\"id\":\"ebd21650e9c5973c1eecbdabbaba0b15ab885ec4\",\"short_id\":\"ebd21650\",\"created_at\":\"2020-08-11T15:18:38.000+00:00\",\"parent_ids\":[\"f5023e69482c8cb7b440bb637be4647cda28ec42\"],\"title\":\"Upload “static/media/netlify.png”\",\"message\":\"Upload “static/media/netlify.png”\",\"author_name\":\"netlifyCMS\",\"author_email\":\"netlifyCMS@netlify.com\",\"authored_date\":\"2020-08-11T15:18:38.000+00:00\",\"committer_name\":\"owner\",\"committer_email\":\"4843565-owner@users.noreply.gitlab.com\",\"committed_date\":\"2020-08-11T15:18:38.000+00:00\",\"web_url\":\"https://gitlab.com/owner/repo/-/commit/ebd21650e9c5973c1eecbdabbaba0b15ab885ec4\",\"stats\":{\"additions\":3,\"deletions\":0,\"total\":3},\"status\":null,\"project_id\":20469934,\"last_pipeline\":null}", "status": 201 }, { - "method": "DELETE", - "url": "/.netlify/git/gitlab/repository/files/static%2Fmedia%2Fnetlify.png?commit_message=Delete “static/media/netlify.png”&branch=master&author_name=netlifyCMS&author_email=netlifyCMS@netlify.com", + "body": "{\"branch\":\"master\",\"commit_message\":\"Delete “static/media/netlify.png”\",\"actions\":[{\"action\":\"delete\",\"file_path\":\"static/media/netlify.png\"}],\"author_name\":\"netlifyCMS\",\"author_email\":\"netlifyCMS@netlify.com\"}", + "method": "POST", + "url": "/.netlify/git/gitlab/repository/commits", "headers": { "Access-Control-Allow-Credentials": "true", "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", @@ -712,24 +763,26 @@ "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", "Access-Control-Max-Age": "7200", "Alt-Svc": "clear", - "Cache-Control": "no-cache", + "Cache-Control": "max-age=0, private, must-revalidate", "Cf-Cache-Status": "DYNAMIC", - "Cf-Ray": "582c457e2b48e1da-ORD", + "Cf-Ray": "5c12ee346bd37117-ORD", + "Cf-Request-Id": "047fb334c100007117a1307200000001", + "Content-Length": "779", + "Content-Type": "application/json", "Expect-Ct": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "Gitlab-Sv": "localhost", "Referrer-Policy": "strict-origin-when-cross-origin", "Server": "Netlify", - "Set-Cookie": "__cfduid=d279289ddc2ca3206b851c3d1277ef85d1586687421; expires=Tue, 12-May-20 10:30:21 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Set-Cookie": "__cfduid=de1e0ad376f754b0a3339fd456d6f6f631597159120; expires=Thu, 10-Sep-20 15:18:40 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", "Strict-Transport-Security": "max-age=31536000", "Via": "1.1 google", "X-Content-Type-Options": "nosniff", "X-Frame-Options": "SAMEORIGIN", "Age": "1", "Connection": "keep-alive", - "Vary": "Origin,Origin", - "content-length": "0" + "Vary": "Origin,Origin" }, - "response": null, - "status": 204 + "response": "{\"id\":\"05f80ce4288d9a641f2600d885e65f388603a1c7\",\"short_id\":\"05f80ce4\",\"created_at\":\"2020-08-11T15:18:40.000+00:00\",\"parent_ids\":[\"ebd21650e9c5973c1eecbdabbaba0b15ab885ec4\"],\"title\":\"Delete “static/media/netlify.png”\",\"message\":\"Delete “static/media/netlify.png”\",\"author_name\":\"netlifyCMS\",\"author_email\":\"netlifyCMS@netlify.com\",\"authored_date\":\"2020-08-11T15:18:40.000+00:00\",\"committer_name\":\"owner\",\"committer_email\":\"4843565-owner@users.noreply.gitlab.com\",\"committed_date\":\"2020-08-11T15:18:40.000+00:00\",\"web_url\":\"https://gitlab.com/owner/repo/-/commit/05f80ce4288d9a641f2600d885e65f388603a1c7\",\"stats\":{\"additions\":0,\"deletions\":3,\"total\":3},\"status\":null,\"project_id\":20469934,\"last_pipeline\":null}", + "status": 201 } ] \ No newline at end of file diff --git a/cypress/fixtures/GitHub Backend Media Library - GraphQL API__can delete image from global media library.json b/cypress/fixtures/GitHub Backend Media Library - GraphQL API__can delete image from global media library.json index 23792fcc..ddd9df4b 100644 --- a/cypress/fixtures/GitHub Backend Media Library - GraphQL API__can delete image from global media library.json +++ b/cypress/fixtures/GitHub Backend Media Library - GraphQL API__can delete image from global media library.json @@ -4,8 +4,8 @@ "method": "POST", "url": "/graphql", "headers": { - "Server": "GitHub.com", "Content-Type": "application/json; charset=utf-8", + "Server": "GitHub.com", "Status": "200 OK", "Cache-Control": "no-cache", "X-OAuth-Scopes": "delete_repo, repo", @@ -23,7 +23,7 @@ "Vary": "Accept-Encoding, Accept, X-Requested-With", "content-length": "222" }, - "response": "{\"data\":{\"viewer\":{\"id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/26760571?u=70ed69fa4309f3e169a31a95a9f89032c00f96ae&v=4\",\"name\":\"owner\",\"login\":\"owner\",\"__typename\":\"User\"}}}\n", + "response": "{\"data\":{\"viewer\":{\"id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/26760571?u=70ed69fa4309f3e169a31a95a9f89032c00f96ae&v=4\",\"name\":\"owner\",\"login\":\"owner\",\"__typename\":\"User\"}}}", "status": 200 }, { @@ -50,7 +50,7 @@ "Vary": "Accept-Encoding, Accept, X-Requested-With", "content-length": "134" }, - "response": "{\"data\":{\"repository\":{\"id\":\"MDEwOlJlcG9zaXRvcnkyNTUxMDIwNDY=\",\"isFork\":false,\"__typename\":\"Repository\",\"viewerPermission\":\"ADMIN\"}}}\n", + "response": "{\"data\":{\"repository\":{\"id\":\"MDEwOlJlcG9zaXRvcnkyODY3NTc2MjE=\",\"isFork\":false,\"__typename\":\"Repository\",\"viewerPermission\":\"ADMIN\"}}}", "status": 200 }, { @@ -58,8 +58,8 @@ "method": "POST", "url": "/graphql", "headers": { - "Server": "GitHub.com", "Content-Type": "application/json; charset=utf-8", + "Server": "GitHub.com", "Status": "200 OK", "Cache-Control": "no-cache", "X-OAuth-Scopes": "delete_repo, repo", @@ -77,7 +77,7 @@ "Vary": "Accept-Encoding, Accept, X-Requested-With", "content-length": "121" }, - "response": "{\"data\":{\"repository\":{\"id\":\"MDEwOlJlcG9zaXRvcnkyNTUxMDIwNDY=\",\"isFork\":false,\"__typename\":\"Repository\",\"object\":null}}}\n", + "response": "{\"data\":{\"repository\":{\"id\":\"MDEwOlJlcG9zaXRvcnkyODY3NTc2MjE=\",\"isFork\":false,\"__typename\":\"Repository\",\"object\":null}}}", "status": 200 }, { @@ -85,8 +85,8 @@ "method": "POST", "url": "/graphql", "headers": { - "Server": "GitHub.com", "Content-Type": "application/json; charset=utf-8", + "Server": "GitHub.com", "Status": "200 OK", "Cache-Control": "no-cache", "X-OAuth-Scopes": "delete_repo, repo", @@ -104,34 +104,7 @@ "Vary": "Accept-Encoding, Accept, X-Requested-With", "content-length": "1233" }, - "response": "{\"data\":{\"repository\":{\"id\":\"MDEwOlJlcG9zaXRvcnkyNTUxMDIwNDY=\",\"isFork\":false,\"__typename\":\"Repository\",\"object\":{\"id\":\"MDQ6VHJlZTI1NTEwMjA0NjozNDg5MjU3NWUyMTZjMDZlNzU3MDkzZjAzNmJkOGUwNTdjNzhhNTJm\",\"sha\":\"34892575e216c06e757093f036bd8e057c78a52f\",\"__typename\":\"Tree\",\"entries\":[{\"name\":\"2016-01-09---Perfecting-the-Art-of-Perfection.md\",\"sha\":\"6d51a38aed7139d2117724b1e307657b6ff2d043\",\"type\":\"blob\",\"blob\":{\"size\":1707,\"__typename\":\"Blob\"},\"__typename\":\"TreeEntry\"},{\"name\":\"2016-01-12---The-Origins-of-Social-Stationery-Lettering.md\",\"sha\":\"d0582dd245a3f408fb3fe2333bf01400007476e9\",\"type\":\"blob\",\"blob\":{\"size\":2565,\"__typename\":\"Blob\"},\"__typename\":\"TreeEntry\"},{\"name\":\"2016-02-02---A-Brief-History-of-Typography.md\",\"sha\":\"0eea554365f002d0f1572af9a58522d335a794d5\",\"type\":\"blob\",\"blob\":{\"size\":2786,\"__typename\":\"Blob\"},\"__typename\":\"TreeEntry\"},{\"name\":\"2017-18-08---The-Birth-of-Movable-Type.md\",\"sha\":\"44f78c474d04273185a95821426f75affc9b0044\",\"type\":\"blob\",\"blob\":{\"size\":16071,\"__typename\":\"Blob\"},\"__typename\":\"TreeEntry\"},{\"name\":\"2017-19-08---Humane-Typography-in-the-Digital-Age.md\",\"sha\":\"a532f0a9445cdf90a19c6812cff89d1674991774\",\"type\":\"blob\",\"blob\":{\"size\":7465,\"__typename\":\"Blob\"},\"__typename\":\"TreeEntry\"}]}}}}\n", - "status": 200 - }, - { - "body": "{\"operationName\":\"blob\",\"variables\":{\"owner\":\"owner\",\"name\":\"repo\",\"expression\":\"a532f0a9445cdf90a19c6812cff89d1674991774\"},\"query\":\"query blob($owner: String!, $name: String!, $expression: String!) {\\n repository(owner: $owner, name: $name) {\\n ...RepositoryParts\\n object(expression: $expression) {\\n ... on Blob {\\n ...BlobWithTextParts\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n}\\n\\nfragment RepositoryParts on Repository {\\n id\\n isFork\\n __typename\\n}\\n\\nfragment BlobWithTextParts on Blob {\\n id\\n text\\n is_binary: isBinary\\n __typename\\n}\\n\"}", - "method": "POST", - "url": "/graphql", - "headers": { - "Server": "GitHub.com", - "Content-Type": "application/json; charset=utf-8", - "Status": "200 OK", - "Cache-Control": "no-cache", - "X-OAuth-Scopes": "delete_repo, repo", - "X-Accepted-OAuth-Scopes": "repo", - "X-GitHub-Media-Type": "github.v4; format=json", - "X-RateLimit-Limit": "5000", - "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", - "Access-Control-Allow-Origin": "*", - "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", - "X-Frame-Options": "deny", - "X-Content-Type-Options": "nosniff", - "X-XSS-Protection": "1; mode=block", - "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", - "Content-Security-Policy": "default-src 'none'", - "Vary": "Accept-Encoding, Accept, X-Requested-With", - "content-length": "7818" - }, - "response": "{\"data\":{\"repository\":{\"id\":\"MDEwOlJlcG9zaXRvcnkyNTUxMDIwNDY=\",\"isFork\":false,\"__typename\":\"Repository\",\"object\":{\"id\":\"MDQ6QmxvYjI1NTEwMjA0NjphNTMyZjBhOTQ0NWNkZjkwYTE5YzY4MTJjZmY4OWQxNjc0OTkxNzc0\",\"text\":\"---\\ntitle: Humane Typography in the Digital Age\\ndate: \\\"2017-08-19T22:40:32.169Z\\\"\\ntemplate: \\\"post\\\"\\ndraft: false\\ncategory: \\\"Typography\\\"\\ntags:\\n - \\\"Design\\\"\\n - \\\"Typography\\\"\\n - \\\"Web Development\\\"\\ndescription: \\\"An Essay on Typography by Eric Gill takes the reader back to the year 1930. The year when a conflict between two worlds came to its term. The machines of the industrial world finally took over the handicrafts.\\\"\\ncanonical: ''\\n---\\n\\n- [The first transition](#the-first-transition)\\n- [The digital age](#the-digital-age)\\n- [Loss of humanity through transitions](#loss-of-humanity-through-transitions)\\n- [Chasing perfection](#chasing-perfection)\\n\\nAn Essay on Typography by Eric Gill takes the reader back to the year 1930. The year when a conflict between two worlds came to its term. The machines of the industrial world finally took over the handicrafts.\\n\\nThe typography of this industrial age was no longer handcrafted. Mass production and profit became more important. Quantity mattered more than the quality. The books and printed works in general lost a part of its humanity. The typefaces were not produced by craftsmen anymore. It was the machines printing and tying the books together now. The craftsmen had to let go of their craft and became a cog in the process. An extension of the industrial machine.\\n\\nBut the victory of the industrialism didn’t mean that the craftsmen were completely extinct. The two worlds continued to coexist independently. Each recognising the good in the other — the power of industrialism and the humanity of craftsmanship. This was the second transition that would strip typography of a part of its humanity. We have to go 500 years back in time to meet the first one.\\n\\n## The first transition\\n\\nA similar conflict emerged after the invention of the first printing press in Europe. Johannes Gutenberg invented movable type and used it to produce different compositions. His workshop could print up to 240 impressions per hour. Until then, the books were being copied by hand. All the books were handwritten and decorated with hand drawn ornaments and figures. A process of copying a book was long but each book, even a copy, was a work of art.\\n\\nThe first printed books were, at first, perceived as inferior to the handwritten ones. They were smaller and cheaper to produce. Movable type provided the printers with flexibility that allowed them to print books in languages other than Latin. Gill describes the transition to industrialism as something that people needed and wanted. Something similar happened after the first printed books emerged. People wanted books in a language they understood and they wanted books they could take with them. They were hungry for knowledge and printed books satisfied this hunger.\\n\\n![42-line-bible.jpg](/media/42-line-bible.jpg)\\n\\n*The 42–Line Bible, printed by Gutenberg.*\\n\\nBut, through this transition, the book lost a large part of its humanity. The machine took over most of the process but craftsmanship was still a part of it. The typefaces were cut manually by the first punch cutters. The paper was made by hand. The illustrations and ornaments were still being hand drawn. These were the remains of the craftsmanship that went almost extinct in the times of Eric Gill.\\n\\n## The digital age\\n\\nThe first transition took away a large part of humanity from written communication. Industrialisation, the second transition described by Eric Gill, took away most of what was left. But it’s the third transition that stripped it naked. Typefaces are faceless these days. They’re just fonts on our computers. Hardly anyone knows their stories. Hardly anyone cares. Flicking through thousands of typefaces and finding the “right one” is a matter of minutes.\\n\\n> In the new computer age the proliferation of typefaces and type manipulations represents a new level of visual pollution threatening our culture. Out of thousands of typefaces, all we need are a few basic ones, and trash the rest.\\n>\\n— Massimo Vignelli\\n\\nTypography is not about typefaces. It’s not about what looks best, it’s about what feels right. What communicates the message best. Typography, in its essence, is about the message. “Typographical design should perform optically what the speaker creates through voice and gesture of his thoughts.”, as El Lissitzky, a famous Russian typographer, put it.\\n\\n## Loss of humanity through transitions\\n\\nEach transition took away a part of humanity from written language. Handwritten books being the most humane form and the digital typefaces being the least. Overuse of Helvetica is a good example. Messages are being told in a typeface just because it’s a safe option. It’s always there. Everyone knows it but yet, nobody knows it. Stop someone on the street and ask him what Helvetica is? Ask a designer the same question. Ask him where it came from, when, why and who designed it. Most of them will fail to answer these questions. Most of them used it in their precious projects but they still don’t spot it in the street.\\n\\n
\\n\\t
\\n\\t\\t

Knowledge of the quality of a typeface is of the greatest importance for the functional, aesthetic and psychological effect.

\\n\\t\\t
\\n\\t\\t\\t— Josef Mueller-Brockmann\\n\\t\\t
\\n\\t
\\n
\\n\\nTypefaces don’t look handmade these days. And that’s all right. They don’t have to. Industrialism took that away from them and we’re fine with it. We’ve traded that part of humanity for a process that produces more books that are easier to read. That can’t be bad. And it isn’t.\\n\\n> Humane typography will often be comparatively rough and even uncouth; but while a certain uncouthness does not seriously matter in humane works, uncouthness has no excuse whatever in the productions of the machine.\\n>\\n> — Eric Gill\\n\\nWe’ve come close to “perfection” in the last five centuries. The letters are crisp and without rough edges. We print our compositions with high–precision printers on a high quality, machine made paper.\\n\\n![type-through-time.jpg](/media/type-through-time.jpg)\\n\\n*Type through 5 centuries.*\\n\\nWe lost a part of ourselves because of this chase after perfection. We forgot about the craftsmanship along the way. And the worst part is that we don’t care. The transition to the digital age made that clear. We choose typefaces like clueless zombies. There’s no meaning in our work. Type sizes, leading, margins… It’s all just a few clicks or lines of code. The message isn’t important anymore. There’s no more “why” behind the “what”.\\n\\n## Chasing perfection\\n\\nHuman beings aren’t perfect. Perfection is something that will always elude us. There will always be a small part of humanity in everything we do. No matter how small that part, we should make sure that it transcends the limits of the medium. We have to think about the message first. What typeface should we use and why? Does the typeface match the message and what we want to communicate with it? What will be the leading and why? Will there be more typefaces in our design? On what ground will they be combined? What makes our design unique and why? This is the part of humanity that is left in typography. It might be the last part. Are we really going to give it up?\\n\\n*Originally published by [Matej Latin](http://matejlatin.co.uk/) on [Medium](https://medium.com/design-notes/humane-typography-in-the-digital-age-9bd5c16199bd?ref=webdesignernews.com#.lygo82z0x).*\",\"is_binary\":false,\"__typename\":\"Blob\"}}}}\n", + "response": "{\"data\":{\"repository\":{\"id\":\"MDEwOlJlcG9zaXRvcnkyODY3NTc2MjE=\",\"isFork\":false,\"__typename\":\"Repository\",\"object\":{\"id\":\"MDQ6VHJlZTI4Njc1NzYyMTozNDg5MjU3NWUyMTZjMDZlNzU3MDkzZjAzNmJkOGUwNTdjNzhhNTJm\",\"sha\":\"34892575e216c06e757093f036bd8e057c78a52f\",\"__typename\":\"Tree\",\"entries\":[{\"name\":\"2016-01-09---Perfecting-the-Art-of-Perfection.md\",\"sha\":\"6d51a38aed7139d2117724b1e307657b6ff2d043\",\"type\":\"blob\",\"blob\":{\"size\":1707,\"__typename\":\"Blob\"},\"__typename\":\"TreeEntry\"},{\"name\":\"2016-01-12---The-Origins-of-Social-Stationery-Lettering.md\",\"sha\":\"d0582dd245a3f408fb3fe2333bf01400007476e9\",\"type\":\"blob\",\"blob\":{\"size\":2565,\"__typename\":\"Blob\"},\"__typename\":\"TreeEntry\"},{\"name\":\"2016-02-02---A-Brief-History-of-Typography.md\",\"sha\":\"0eea554365f002d0f1572af9a58522d335a794d5\",\"type\":\"blob\",\"blob\":{\"size\":2786,\"__typename\":\"Blob\"},\"__typename\":\"TreeEntry\"},{\"name\":\"2017-18-08---The-Birth-of-Movable-Type.md\",\"sha\":\"44f78c474d04273185a95821426f75affc9b0044\",\"type\":\"blob\",\"blob\":{\"size\":16071,\"__typename\":\"Blob\"},\"__typename\":\"TreeEntry\"},{\"name\":\"2017-19-08---Humane-Typography-in-the-Digital-Age.md\",\"sha\":\"a532f0a9445cdf90a19c6812cff89d1674991774\",\"type\":\"blob\",\"blob\":{\"size\":7465,\"__typename\":\"Blob\"},\"__typename\":\"TreeEntry\"}]}}}}", "status": 200 }, { @@ -139,8 +112,8 @@ "method": "POST", "url": "/graphql", "headers": { - "Server": "GitHub.com", "Content-Type": "application/json; charset=utf-8", + "Server": "GitHub.com", "Status": "200 OK", "Cache-Control": "no-cache", "X-OAuth-Scopes": "delete_repo, repo", @@ -158,61 +131,7 @@ "Vary": "Accept-Encoding, Accept, X-Requested-With", "content-length": "1988" }, - "response": "{\"data\":{\"repository\":{\"id\":\"MDEwOlJlcG9zaXRvcnkyNTUxMDIwNDY=\",\"isFork\":false,\"__typename\":\"Repository\",\"object\":{\"id\":\"MDQ6QmxvYjI1NTEwMjA0Njo2ZDUxYTM4YWVkNzEzOWQyMTE3NzI0YjFlMzA3NjU3YjZmZjJkMDQz\",\"text\":\"---\\ntitle: Perfecting the Art of Perfection\\ndate: \\\"2016-09-01T23:46:37.121Z\\\"\\ntemplate: \\\"post\\\"\\ndraft: false\\ncategory: \\\"Design Inspiration\\\"\\ntags:\\n - \\\"Handwriting\\\"\\n - \\\"Learning to write\\\"\\ndescription: \\\"Quisque cursus, metus vitae pharetra auctor, sem massa mattis sem, at interdum magna augue eget diam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Morbi lacinia molestie dui. Praesent blandit dolor. Sed non quam. In vel mi sit amet augue congue elementum.\\\"\\ncanonical: ''\\n---\\n\\nQuisque cursus, metus vitae pharetra auctor, sem massa mattis sem, at interdum magna augue eget diam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Morbi lacinia molestie dui. Praesent blandit dolor. Sed non quam. In vel mi sit amet augue congue elementum.\\n\\n![Nulla faucibus vestibulum eros in tempus. Vestibulum tempor imperdiet velit nec dapibus](/media/image-2.jpg)\\n\\nPellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis. \\n\\nPraesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus.\",\"is_binary\":false,\"__typename\":\"Blob\"}}}}\n", - "status": 200 - }, - { - "body": "{\"operationName\":\"blob\",\"variables\":{\"owner\":\"owner\",\"name\":\"repo\",\"expression\":\"d0582dd245a3f408fb3fe2333bf01400007476e9\"},\"query\":\"query blob($owner: String!, $name: String!, $expression: String!) {\\n repository(owner: $owner, name: $name) {\\n ...RepositoryParts\\n object(expression: $expression) {\\n ... on Blob {\\n ...BlobWithTextParts\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n}\\n\\nfragment RepositoryParts on Repository {\\n id\\n isFork\\n __typename\\n}\\n\\nfragment BlobWithTextParts on Blob {\\n id\\n text\\n is_binary: isBinary\\n __typename\\n}\\n\"}", - "method": "POST", - "url": "/graphql", - "headers": { - "Content-Type": "application/json; charset=utf-8", - "Server": "GitHub.com", - "Status": "200 OK", - "Cache-Control": "no-cache", - "X-OAuth-Scopes": "delete_repo, repo", - "X-Accepted-OAuth-Scopes": "repo", - "X-GitHub-Media-Type": "github.v4; format=json", - "X-RateLimit-Limit": "5000", - "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", - "Access-Control-Allow-Origin": "*", - "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", - "X-Frame-Options": "deny", - "X-Content-Type-Options": "nosniff", - "X-XSS-Protection": "1; mode=block", - "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", - "Content-Security-Policy": "default-src 'none'", - "Vary": "Accept-Encoding, Accept, X-Requested-With", - "content-length": "2881" - }, - "response": "{\"data\":{\"repository\":{\"id\":\"MDEwOlJlcG9zaXRvcnkyNTUxMDIwNDY=\",\"isFork\":false,\"__typename\":\"Repository\",\"object\":{\"id\":\"MDQ6QmxvYjI1NTEwMjA0NjpkMDU4MmRkMjQ1YTNmNDA4ZmIzZmUyMzMzYmYwMTQwMDAwNzQ3NmU5\",\"text\":\"---\\ntitle: The Origins of Social Stationery Lettering\\ndate: \\\"2016-12-01T22:40:32.169Z\\\"\\ntemplate: \\\"post\\\"\\ndraft: false\\ncategory: \\\"Design Culture\\\"\\ndescription: \\\"Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante.\\\"\\ncanonical: ''\\n---\\n\\n**Pellentesque habitant morbi tristique** senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. *Aenean ultricies mi vitae est.* Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. \\n\\nVestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. [Donec non enim](#) in turpis pulvinar facilisis.\\n\\n![Nulla faucibus vestibulum eros in tempus. Vestibulum tempor imperdiet velit nec dapibus](/media/image-3.jpg)\\n\\n## Header Level 2\\n\\n+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\\n+ Aliquam tincidunt mauris eu risus.\\n\\nDonec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. \\n\\n
\\n\\t
\\n\\t\\t

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.

\\n\\t\\t
\\n\\t\\t\\t— Aliquam tincidunt mauris eu risus.\\n\\t\\t
\\n\\t
\\n
\\n\\n### Header Level 3\\n\\n+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\\n+ Aliquam tincidunt mauris eu risus.\\n\\nPellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra.\\n\\n```css\\n#header h1 a {\\n display: block;\\n width: 300px;\\n height: 80px;\\n}\\n```\\n\\nDonec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus.\",\"is_binary\":false,\"__typename\":\"Blob\"}}}}\n", - "status": 200 - }, - { - "body": "{\"operationName\":\"blob\",\"variables\":{\"owner\":\"owner\",\"name\":\"repo\",\"expression\":\"44f78c474d04273185a95821426f75affc9b0044\"},\"query\":\"query blob($owner: String!, $name: String!, $expression: String!) {\\n repository(owner: $owner, name: $name) {\\n ...RepositoryParts\\n object(expression: $expression) {\\n ... on Blob {\\n ...BlobWithTextParts\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n}\\n\\nfragment RepositoryParts on Repository {\\n id\\n isFork\\n __typename\\n}\\n\\nfragment BlobWithTextParts on Blob {\\n id\\n text\\n is_binary: isBinary\\n __typename\\n}\\n\"}", - "method": "POST", - "url": "/graphql", - "headers": { - "Content-Type": "application/json; charset=utf-8", - "Server": "GitHub.com", - "Status": "200 OK", - "Cache-Control": "no-cache", - "X-OAuth-Scopes": "delete_repo, repo", - "X-Accepted-OAuth-Scopes": "repo", - "X-GitHub-Media-Type": "github.v4; format=json", - "X-RateLimit-Limit": "5000", - "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", - "Access-Control-Allow-Origin": "*", - "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", - "X-Frame-Options": "deny", - "X-Content-Type-Options": "nosniff", - "X-XSS-Protection": "1; mode=block", - "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", - "Content-Security-Policy": "default-src 'none'", - "Vary": "Accept-Encoding, Accept, X-Requested-With", - "content-length": "16493" - }, - "response": "{\"data\":{\"repository\":{\"id\":\"MDEwOlJlcG9zaXRvcnkyNTUxMDIwNDY=\",\"isFork\":false,\"__typename\":\"Repository\",\"object\":{\"id\":\"MDQ6QmxvYjI1NTEwMjA0Njo0NGY3OGM0NzRkMDQyNzMxODVhOTU4MjE0MjZmNzVhZmZjOWIwMDQ0\",\"text\":\"---\\ntitle: \\\"Johannes Gutenberg: The Birth of Movable Type\\\"\\ndate: \\\"2017-08-18T22:12:03.284Z\\\"\\ntemplate: \\\"post\\\"\\ndraft: false\\ncategory: \\\"Typography\\\"\\ntags:\\n - \\\"Open source\\\"\\n - \\\"Gatsby\\\"\\n - \\\"Typography\\\"\\ndescription: \\\"German inventor Johannes Gutenberg developed a method of movable type and used it to create one of the western world’s first major printed books, the “Forty–Two–Line” Bible.\\\"\\ncanonical: ''\\n---\\n\\nGerman inventor Johannes Gutenberg developed a method of movable type and used it to create one of the western world’s first major printed books, the “Forty–Two–Line” Bible.\\n\\n**Johannes Gensfleisch zur Laden zum Gutenberg** (c. 1398 – 1468) was a German blacksmith, goldsmith, printer, and publisher who introduced printing to Europe. His invention of mechanical movable type printing started the Printing Revolution and is widely regarded as the most important event of the modern period. It played a key role in the development of the Renaissance, Reformation, the Age of Enlightenment, and the Scientific revolution and laid the material basis for the modern knowledge-based economy and the spread of learning to the masses.\\n\\n
\\n\\t\\\"Gutenberg\\\"\\n\\t
Johannes Gutenberg
\\n
\\n\\nWith his invention of the printing press, Gutenberg was the first European to use movable type printing, in around 1439. Among his many contributions to printing are: the invention of a process for mass-producing movable type; the use of oil-based ink; and the use of a wooden printing press similar to the agricultural screw presses of the period. His truly epochal invention was the combination of these elements into a practical system that allowed the mass production of printed books and was economically viable for printers and readers alike. Gutenberg's method for making type is traditionally considered to have included a type metal alloy and a hand mould for casting type. The alloy was a mixture of lead, tin, and antimony that melted at a relatively low temperature for faster and more economical casting, cast well, and created a durable type.\\n\\nIn Renaissance Europe, the arrival of mechanical movable type printing introduced the era of mass communication which permanently altered the structure of society. The relatively unrestricted circulation of information — including revolutionary ideas — transcended borders, captured the masses in the Reformation and threatened the power of political and religious authorities; the sharp increase in literacy broke the monopoly of the literate elite on education and learning and bolstered the emerging middle class. Across Europe, the increasing cultural self-awareness of its people led to the rise of proto-nationalism, accelerated by the flowering of the European vernacular languages to the detriment of Latin's status as lingua franca. In the 19th century, the replacement of the hand-operated Gutenberg-style press by steam-powered rotary presses allowed printing on an industrial scale, while Western-style printing was adopted all over the world, becoming practically the sole medium for modern bulk printing.\\n\\nThe use of movable type was a marked improvement on the handwritten manuscript, which was the existing method of book production in Europe, and upon woodblock printing, and revolutionized European book-making. Gutenberg's printing technology spread rapidly throughout Europe and later the world.\\n\\nHis major work, the Gutenberg Bible (also known as the 42-line Bible), has been acclaimed for its high aesthetic and technical quality.\\n\\n## Printing Press\\n\\nAround 1439, Gutenberg was involved in a financial misadventure making polished metal mirrors (which were believed to capture holy light from religious relics) for sale to pilgrims to Aachen: in 1439 the city was planning to exhibit its collection of relics from Emperor Charlemagne but the event was delayed by one year due to a severe flood and the capital already spent could not be repaid. When the question of satisfying the investors came up, Gutenberg is said to have promised to share a “secret”. It has been widely speculated that this secret may have been the idea of printing with movable type. Also around 1439–1440, the Dutch Laurens Janszoon Coster came up with the idea of printing. Legend has it that the idea came to him “like a ray of light”.\\n\\n
\\n\\t\\\"Early\\n\\t
Early wooden printing press as depicted in 1568.
\\n
\\n\\nUntil at least 1444 he lived in Strasbourg, most likely in the St. Arbogast parish. It was in Strasbourg in 1440 that Gutenberg is said to have perfected and unveiled the secret of printing based on his research, mysteriously entitled Kunst und Aventur (art and enterprise). It is not clear what work he was engaged in, or whether some early trials with printing from movable type may have been conducted there. After this, there is a gap of four years in the record. In 1448, he was back in Mainz, where he took out a loan from his brother-in-law Arnold Gelthus, quite possibly for a printing press or related paraphernalia. By this date, Gutenberg may have been familiar with intaglio printing; it is claimed that he had worked on copper engravings with an artist known as the Master of Playing Cards.\\n\\nBy 1450, the press was in operation, and a German poem had been printed, possibly the first item to be printed there. Gutenberg was able to convince the wealthy moneylender Johann Fust for a loan of 800 guilders. Peter Schöffer, who became Fust’s son-in-law, also joined the enterprise. Schöffer had worked as a scribe in Paris and is believed to have designed some of the first typefaces.\\n\\n
\\n\\t
\\n\\t\\t

All that has been written to me about that marvelous man seen at Frankfurt is true. I have not seen complete Bibles but only a number of quires of various books of the Bible. The script was very neat and legible, not at all difficult to follow—your grace would be able to read it without effort, and indeed without glasses.

\\n\\t\\t
\\n\\t\\t\\t—Future pope Pius II in a letter to Cardinal Carvajal, March 1455\\n\\t\\t
\\n\\t
\\n
\\n\\nGutenberg's workshop was set up at Hof Humbrecht, a property belonging to a distant relative. It is not clear when Gutenberg conceived the Bible project, but for this he borrowed another 800 guilders from Fust, and work commenced in 1452. At the same time, the press was also printing other, more lucrative texts (possibly Latin grammars). There is also some speculation that there may have been two presses, one for the pedestrian texts, and one for the Bible. One of the profit-making enterprises of the new press was the printing of thousands of indulgences for the church, documented from 1454–55.\\n\\nIn 1455 Gutenberg completed his 42-line Bible, known as the Gutenberg Bible. About 180 copies were printed, most on paper and some on vellum.\\n\\n## Court Case\\n\\nSome time in 1456, there was a dispute between Gutenberg and Fust, and Fust demanded his money back, accusing Gutenberg of misusing the funds. Meanwhile the expenses of the Bible project had proliferated, and Gutenberg's debt now exceeded 20,000 guilders. Fust sued at the archbishop's court. A November 1455 legal document records that there was a partnership for a \\\"project of the books,\\\" the funds for which Gutenberg had used for other purposes, according to Fust. The court decided in favor of Fust, giving him control over the Bible printing workshop and half of all printed Bibles.\\n\\nThus Gutenberg was effectively bankrupt, but it appears he retained (or re-started) a small printing shop, and participated in the printing of a Bible in the town of Bamberg around 1459, for which he seems at least to have supplied the type. But since his printed books never carry his name or a date, it is difficult to be certain, and there is consequently a considerable scholarly debate on this subject. It is also possible that the large Catholicon dictionary, 300 copies of 754 pages, printed in Mainz in 1460, may have been executed in his workshop.\\n\\nMeanwhile, the Fust–Schöffer shop was the first in Europe to bring out a book with the printer's name and date, the Mainz Psalter of August 1457, and while proudly proclaiming the mechanical process by which it had been produced, it made no mention of Gutenberg.\\n\\n## Later Life\\n\\nIn 1462, during a conflict between two archbishops, Mainz was sacked by archbishop Adolph von Nassau, and Gutenberg was exiled. An old man by now, he moved to Eltville where he may have initiated and supervised a new printing press belonging to the brothers Bechtermünze.\\n\\nIn January 1465, Gutenberg's achievements were recognized and he was given the title Hofmann (gentleman of the court) by von Nassau. This honor included a stipend, an annual court outfit, as well as 2,180 litres of grain and 2,000 litres of wine tax-free. It is believed he may have moved back to Mainz around this time, but this is not certain.\\n\\n***\\n\\nGutenberg died in 1468 and was buried in the Franciscan church at Mainz, his contributions largely unknown. This church and the cemetery were later destroyed, and Gutenberg's grave is now lost.\\n\\nIn 1504, he was mentioned as the inventor of typography in a book by Professor Ivo Wittig. It was not until 1567 that the first portrait of Gutenberg, almost certainly an imaginary reconstruction, appeared in Heinrich Pantaleon's biography of famous Germans.\\n\\n## Printing Method With Movable Type\\n\\nGutenberg's early printing process, and what tests he may have made with movable type, are not known in great detail. His later Bibles were printed in such a way as to have required large quantities of type, some estimates suggesting as many as 100,000 individual sorts. Setting each page would take, perhaps, half a day, and considering all the work in loading the press, inking the type, pulling the impressions, hanging up the sheets, distributing the type, etc., it is thought that the Gutenberg–Fust shop might have employed as many as 25 craftsmen.\\n\\n![Movable metal type, and composing stick, descended from Gutenberg's press. Photo by Willi Heidelbach. Licensed under CC BY 2.5](/media/movable-type.jpg)\\n\\n*Movable metal type, and composing stick, descended from Gutenberg's press. Photo by Willi Heidelbach. Licensed under CC BY 2.5*\\n\\nGutenberg's technique of making movable type remains unclear. In the following decades, punches and copper matrices became standardized in the rapidly disseminating printing presses across Europe. Whether Gutenberg used this sophisticated technique or a somewhat primitive version has been the subject of considerable debate.\\n\\nIn the standard process of making type, a hard metal punch (made by punchcutting, with the letter carved back to front) is hammered into a softer copper bar, creating a matrix. This is then placed into a hand-held mould and a piece of type, or \\\"sort\\\", is cast by filling the mould with molten type-metal; this cools almost at once, and the resulting piece of type can be removed from the mould. The matrix can be reused to create hundreds, or thousands, of identical sorts so that the same character appearing anywhere within the book will appear very uniform, giving rise, over time, to the development of distinct styles of typefaces or fonts. After casting, the sorts are arranged into type-cases, and used to make up pages which are inked and printed, a procedure which can be repeated hundreds, or thousands, of times. The sorts can be reused in any combination, earning the process the name of “movable type”.\\n\\nThe invention of the making of types with punch, matrix and mold has been widely attributed to Gutenberg. However, recent evidence suggests that Gutenberg's process was somewhat different. If he used the punch and matrix approach, all his letters should have been nearly identical, with some variations due to miscasting and inking. However, the type used in Gutenberg's earliest work shows other variations.\\n\\n
\\n\\t
\\n\\t\\t

It is a press, certainly, but a press from which shall flow in inexhaustible streams… Through it, god will spread his word.

\\n\\t\\t
\\n\\t\\t\\t—Johannes Gutenberg\\n\\t\\t
\\n\\t
\\n
\\n\\nIn 2001, the physicist Blaise Agüera y Arcas and Princeton librarian Paul Needham, used digital scans of a Papal bull in the Scheide Library, Princeton, to carefully compare the same letters (types) appearing in different parts of the printed text. The irregularities in Gutenberg's type, particularly in simple characters such as the hyphen, suggested that the variations could not have come from either ink smear or from wear and damage on the pieces of metal on the types themselves. While some identical types are clearly used on other pages, other variations, subjected to detailed image analysis, suggested that they could not have been produced from the same matrix. Transmitted light pictures of the page also appeared to reveal substructures in the type that could not arise from traditional punchcutting techniques. They hypothesized that the method may have involved impressing simple shapes to create alphabets in “cuneiform” style in a matrix made of some soft material, perhaps sand. Casting the type would destroy the mould, and the matrix would need to be recreated to make each additional sort. This could explain the variations in the type, as well as the substructures observed in the printed images.\\n\\nThus, they feel that “the decisive factor for the birth of typography”, the use of reusable moulds for casting type, might have been a more progressive process than was previously thought. They suggest that the additional step of using the punch to create a mould that could be reused many times was not taken until twenty years later, in the 1470s. Others have not accepted some or all of their suggestions, and have interpreted the evidence in other ways, and the truth of the matter remains very uncertain.\\n\\nA 1568 history by Hadrianus Junius of Holland claims that the basic idea of the movable type came to Gutenberg from Laurens Janszoon Coster via Fust, who was apprenticed to Coster in the 1430s and may have brought some of his equipment from Haarlem to Mainz. While Coster appears to have experimented with moulds and castable metal type, there is no evidence that he had actually printed anything with this technology. He was an inventor and a goldsmith. However, there is one indirect supporter of the claim that Coster might be the inventor. The author of the Cologne Chronicle of 1499 quotes Ulrich Zell, the first printer of Cologne, that printing was performed in Mainz in 1450, but that some type of printing of lower quality had previously occurred in the Netherlands. However, the chronicle does not mention the name of Coster, while it actually credits Gutenberg as the \\\"first inventor of printing\\\" in the very same passage (fol. 312). The first securely dated book by Dutch printers is from 1471, and the Coster connection is today regarded as a mere legend.\\n\\nThe 19th century printer and typefounder Fournier Le Jeune suggested that Gutenberg might not have been using type cast with a reusable matrix, but possibly wooden types that were carved individually. A similar suggestion was made by Nash in 2004. This remains possible, albeit entirely unproven.\\n\\nIt has also been questioned whether Gutenberg used movable types at all. In 2004, Italian professor Bruno Fabbiani claimed that examination of the 42-line Bible revealed an overlapping of letters, suggesting that Gutenberg did not in fact use movable type (individual cast characters) but rather used whole plates made from a system somewhat like a modern typewriter, whereby the letters were stamped successively into the plate and then printed. However, most specialists regard the occasional overlapping of type as caused by paper movement over pieces of type of slightly unequal height.\",\"is_binary\":false,\"__typename\":\"Blob\"}}}}\n", + "response": "{\"data\":{\"repository\":{\"id\":\"MDEwOlJlcG9zaXRvcnkyODY3NTc2MjE=\",\"isFork\":false,\"__typename\":\"Repository\",\"object\":{\"id\":\"MDQ6QmxvYjI4Njc1NzYyMTo2ZDUxYTM4YWVkNzEzOWQyMTE3NzI0YjFlMzA3NjU3YjZmZjJkMDQz\",\"text\":\"---\\ntitle: Perfecting the Art of Perfection\\ndate: \\\"2016-09-01T23:46:37.121Z\\\"\\ntemplate: \\\"post\\\"\\ndraft: false\\ncategory: \\\"Design Inspiration\\\"\\ntags:\\n - \\\"Handwriting\\\"\\n - \\\"Learning to write\\\"\\ndescription: \\\"Quisque cursus, metus vitae pharetra auctor, sem massa mattis sem, at interdum magna augue eget diam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Morbi lacinia molestie dui. Praesent blandit dolor. Sed non quam. In vel mi sit amet augue congue elementum.\\\"\\ncanonical: ''\\n---\\n\\nQuisque cursus, metus vitae pharetra auctor, sem massa mattis sem, at interdum magna augue eget diam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Morbi lacinia molestie dui. Praesent blandit dolor. Sed non quam. In vel mi sit amet augue congue elementum.\\n\\n![Nulla faucibus vestibulum eros in tempus. Vestibulum tempor imperdiet velit nec dapibus](/media/image-2.jpg)\\n\\nPellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis. \\n\\nPraesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus.\",\"is_binary\":false,\"__typename\":\"Blob\"}}}}", "status": 200 }, { @@ -239,7 +158,87 @@ "Vary": "Accept-Encoding, Accept, X-Requested-With", "content-length": "3117" }, - "response": "{\"data\":{\"repository\":{\"id\":\"MDEwOlJlcG9zaXRvcnkyNTUxMDIwNDY=\",\"isFork\":false,\"__typename\":\"Repository\",\"object\":{\"id\":\"MDQ6QmxvYjI1NTEwMjA0NjowZWVhNTU0MzY1ZjAwMmQwZjE1NzJhZjlhNTg1MjJkMzM1YTc5NGQ1\",\"text\":\"---\\ntitle: \\\"A Brief History of Typography\\\"\\ndate: \\\"2016-02-02T22:40:32.169Z\\\"\\ntemplate: \\\"post\\\"\\ndraft: false\\ncategory: \\\"Design Inspiration\\\"\\ntags:\\n - \\\"Linotype\\\"\\n - \\\"Monotype\\\"\\n - \\\"History of typography\\\"\\n - \\\"Helvetica\\\"\\ndescription: \\\"Morbi in sem quis dui placerat ornare. Pellentesque odio nisi, euismod in, pharetra a, ultricies in, diam. Sed arcu. Cras consequat.\\\"\\ncanonical: ''\\n---\\n\\n**Pellentesque habitant morbi tristique** senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. *Aenean ultricies mi vitae est.* Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. \\n\\nVestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. [Donec non enim](#) in turpis pulvinar facilisis.\\n\\n![Nulla faucibus vestibulum eros in tempus. Vestibulum tempor imperdiet velit nec dapibus](/media/image-0.jpg)\\n\\n## Header Level 2\\n\\n+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\\n+ Aliquam tincidunt mauris eu risus.\\n\\nDonec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. \\n\\n
\\n\\t
\\n\\t\\t

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.

\\n\\t\\t
\\n\\t\\t\\t— Aliquam tincidunt mauris eu risus.\\n\\t\\t
\\n\\t
\\n
\\n\\n### Header Level 3\\n\\n+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\\n+ Aliquam tincidunt mauris eu risus.\\n\\nPellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra.\\n\\n```css\\n#header h1 a {\\n display: block;\\n width: 300px;\\n height: 80px;\\n}\\n```\\n\\nVestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus.\",\"is_binary\":false,\"__typename\":\"Blob\"}}}}\n", + "response": "{\"data\":{\"repository\":{\"id\":\"MDEwOlJlcG9zaXRvcnkyODY3NTc2MjE=\",\"isFork\":false,\"__typename\":\"Repository\",\"object\":{\"id\":\"MDQ6QmxvYjI4Njc1NzYyMTowZWVhNTU0MzY1ZjAwMmQwZjE1NzJhZjlhNTg1MjJkMzM1YTc5NGQ1\",\"text\":\"---\\ntitle: \\\"A Brief History of Typography\\\"\\ndate: \\\"2016-02-02T22:40:32.169Z\\\"\\ntemplate: \\\"post\\\"\\ndraft: false\\ncategory: \\\"Design Inspiration\\\"\\ntags:\\n - \\\"Linotype\\\"\\n - \\\"Monotype\\\"\\n - \\\"History of typography\\\"\\n - \\\"Helvetica\\\"\\ndescription: \\\"Morbi in sem quis dui placerat ornare. Pellentesque odio nisi, euismod in, pharetra a, ultricies in, diam. Sed arcu. Cras consequat.\\\"\\ncanonical: ''\\n---\\n\\n**Pellentesque habitant morbi tristique** senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. *Aenean ultricies mi vitae est.* Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. \\n\\nVestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. [Donec non enim](#) in turpis pulvinar facilisis.\\n\\n![Nulla faucibus vestibulum eros in tempus. Vestibulum tempor imperdiet velit nec dapibus](/media/image-0.jpg)\\n\\n## Header Level 2\\n\\n+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\\n+ Aliquam tincidunt mauris eu risus.\\n\\nDonec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. \\n\\n
\\n\\t
\\n\\t\\t

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.

\\n\\t\\t
\\n\\t\\t\\t— Aliquam tincidunt mauris eu risus.\\n\\t\\t
\\n\\t
\\n
\\n\\n### Header Level 3\\n\\n+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\\n+ Aliquam tincidunt mauris eu risus.\\n\\nPellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra.\\n\\n```css\\n#header h1 a {\\n display: block;\\n width: 300px;\\n height: 80px;\\n}\\n```\\n\\nVestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus.\",\"is_binary\":false,\"__typename\":\"Blob\"}}}}", + "status": 200 + }, + { + "body": "{\"operationName\":\"blob\",\"variables\":{\"owner\":\"owner\",\"name\":\"repo\",\"expression\":\"d0582dd245a3f408fb3fe2333bf01400007476e9\"},\"query\":\"query blob($owner: String!, $name: String!, $expression: String!) {\\n repository(owner: $owner, name: $name) {\\n ...RepositoryParts\\n object(expression: $expression) {\\n ... on Blob {\\n ...BlobWithTextParts\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n}\\n\\nfragment RepositoryParts on Repository {\\n id\\n isFork\\n __typename\\n}\\n\\nfragment BlobWithTextParts on Blob {\\n id\\n text\\n is_binary: isBinary\\n __typename\\n}\\n\"}", + "method": "POST", + "url": "/graphql", + "headers": { + "Content-Type": "application/json; charset=utf-8", + "Server": "GitHub.com", + "Status": "200 OK", + "Cache-Control": "no-cache", + "X-OAuth-Scopes": "delete_repo, repo", + "X-Accepted-OAuth-Scopes": "repo", + "X-GitHub-Media-Type": "github.v4; format=json", + "X-RateLimit-Limit": "5000", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "1; mode=block", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "Vary": "Accept-Encoding, Accept, X-Requested-With", + "content-length": "2881" + }, + "response": "{\"data\":{\"repository\":{\"id\":\"MDEwOlJlcG9zaXRvcnkyODY3NTc2MjE=\",\"isFork\":false,\"__typename\":\"Repository\",\"object\":{\"id\":\"MDQ6QmxvYjI4Njc1NzYyMTpkMDU4MmRkMjQ1YTNmNDA4ZmIzZmUyMzMzYmYwMTQwMDAwNzQ3NmU5\",\"text\":\"---\\ntitle: The Origins of Social Stationery Lettering\\ndate: \\\"2016-12-01T22:40:32.169Z\\\"\\ntemplate: \\\"post\\\"\\ndraft: false\\ncategory: \\\"Design Culture\\\"\\ndescription: \\\"Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante.\\\"\\ncanonical: ''\\n---\\n\\n**Pellentesque habitant morbi tristique** senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. *Aenean ultricies mi vitae est.* Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. \\n\\nVestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. [Donec non enim](#) in turpis pulvinar facilisis.\\n\\n![Nulla faucibus vestibulum eros in tempus. Vestibulum tempor imperdiet velit nec dapibus](/media/image-3.jpg)\\n\\n## Header Level 2\\n\\n+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\\n+ Aliquam tincidunt mauris eu risus.\\n\\nDonec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. \\n\\n
\\n\\t
\\n\\t\\t

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.

\\n\\t\\t
\\n\\t\\t\\t— Aliquam tincidunt mauris eu risus.\\n\\t\\t
\\n\\t
\\n
\\n\\n### Header Level 3\\n\\n+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\\n+ Aliquam tincidunt mauris eu risus.\\n\\nPellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra.\\n\\n```css\\n#header h1 a {\\n display: block;\\n width: 300px;\\n height: 80px;\\n}\\n```\\n\\nDonec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus.\",\"is_binary\":false,\"__typename\":\"Blob\"}}}}", + "status": 200 + }, + { + "method": "GET", + "url": "/repos/owner/repo/commits?path=content/posts/2016-01-09---Perfecting-the-Art-of-Perfection.md&sha=master", + "headers": { + "Content-Type": "application/json; charset=utf-8", + "Server": "GitHub.com", + "Status": "200 OK", + "X-RateLimit-Limit": "5000", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP", + "X-OAuth-Scopes": "delete_repo, repo", + "X-Accepted-OAuth-Scopes": "", + "X-GitHub-Media-Type": "github.v3; format=json", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "1; mode=block", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "content-length": "4828" + }, + "response": "[{\"sha\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"node_id\":\"MDY6Q29tbWl0Mjg2NzU3NjIxOjJiYzNmYTM5ZDhhZGI5ZTAwOGU1Mjc5Mzg1NDMzODM5OWZjNmU0YWQ=\",\"commit\":{\"author\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2019-07-24T07:45:32Z\"},\"committer\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2019-07-24T07:45:32Z\"},\"message\":\"initial commit\",\"tree\":{\"sha\":\"3d53c60def5d9f9ad79a534dd369f758763d9dc9\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/3d53c60def5d9f9ad79a534dd369f758763d9dc9\"},\"url\":\"https://api.github.com/repos/owner/repo/git/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\niQIzBAABCgAdFiEE8DeG71n37ZpuxjiNA05FmC/LkwQFAl04DJwACgkQA05FmC/L\\nkwQ5kg//TB2c1HvsD/r7x3CgKmR+uaEFGrv9srfA4/i/dbDSAg3+kpPXfGg0FCUw\\nETlWDpZRhFvLZzoxy5w46P1cLvpbdEXK47LWpsFYWFtCFGKmvaY5dZ/ma1J3HF5R\\n7Yll5jz8BKrWOZ6bOswP7nNteAFYfLiZxJq4ONbhxOyRJA7bFmg6Ydo2Zc27Gg54\\n6umhONf9DxuzL0z0f8qtHiz47KJTRdFS+ZL/Mq3iCE11SGHvjK0cnPq0Z6TBtazt\\nqszoR0Frxes4MsjI82+ovCP+RtpqerWeN/ciYoLENsnUb8Xbp/qdhrLoMvuFExz2\\n0f0M7zVI1Z9d4cDTQlembVneSv5sSeNtnk2e7BXLwjUNFVxB67aslVUyL41V0BMu\\nUw8+j9pNhObpicJs9O1fIkL84mtCSMWIyuCwDpSMSj2b892laBOKu/E5D+YuaHi5\\nbAJJ1/Szig0CzeI1KbIBoWDI1orpkSUU+4Fvk7qJnxP9iLJLwiNCFKfNKA1KeXmP\\nIK6/95HmKNJ8MfTEkRcgIdTe4fx2ib2hHGiaIAD0r4FgWxfC2BWK/uTUp8HtIQre\\nDILGnF1laIcJbyP7asvc8iJ06Kk8C9PsH4v20fqoyNcei7v0IJG2m9AHVDnb0t6L\\nAa1yXEHQLSGHS9Y0mogLPW/tZnV69EHRI1dzvH/1gDVlBMwM1/A=\\n=hLDv\\n-----END PGP SIGNATURE-----\",\"payload\":\"tree 3d53c60def5d9f9ad79a534dd369f758763d9dc9\\nauthor owner 1563954332 +0300\\ncommitter owner 1563954332 +0300\\n\\ninitial commit\\n\"}},\"url\":\"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"html_url\":\"https://github.com/owner/repo/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"comments_url\":\"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad/comments\",\"author\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"committer\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"parents\":[]}]", + "status": 200 + }, + { + "body": "{\"operationName\":\"blob\",\"variables\":{\"owner\":\"owner\",\"name\":\"repo\",\"expression\":\"44f78c474d04273185a95821426f75affc9b0044\"},\"query\":\"query blob($owner: String!, $name: String!, $expression: String!) {\\n repository(owner: $owner, name: $name) {\\n ...RepositoryParts\\n object(expression: $expression) {\\n ... on Blob {\\n ...BlobWithTextParts\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n}\\n\\nfragment RepositoryParts on Repository {\\n id\\n isFork\\n __typename\\n}\\n\\nfragment BlobWithTextParts on Blob {\\n id\\n text\\n is_binary: isBinary\\n __typename\\n}\\n\"}", + "method": "POST", + "url": "/graphql", + "headers": { + "Content-Type": "application/json; charset=utf-8", + "Server": "GitHub.com", + "Status": "200 OK", + "Cache-Control": "no-cache", + "X-OAuth-Scopes": "delete_repo, repo", + "X-Accepted-OAuth-Scopes": "repo", + "X-GitHub-Media-Type": "github.v4; format=json", + "X-RateLimit-Limit": "5000", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "1; mode=block", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "Vary": "Accept-Encoding, Accept, X-Requested-With", + "content-length": "16493" + }, + "response": "{\"data\":{\"repository\":{\"id\":\"MDEwOlJlcG9zaXRvcnkyODY3NTc2MjE=\",\"isFork\":false,\"__typename\":\"Repository\",\"object\":{\"id\":\"MDQ6QmxvYjI4Njc1NzYyMTo0NGY3OGM0NzRkMDQyNzMxODVhOTU4MjE0MjZmNzVhZmZjOWIwMDQ0\",\"text\":\"---\\ntitle: \\\"Johannes Gutenberg: The Birth of Movable Type\\\"\\ndate: \\\"2017-08-18T22:12:03.284Z\\\"\\ntemplate: \\\"post\\\"\\ndraft: false\\ncategory: \\\"Typography\\\"\\ntags:\\n - \\\"Open source\\\"\\n - \\\"Gatsby\\\"\\n - \\\"Typography\\\"\\ndescription: \\\"German inventor Johannes Gutenberg developed a method of movable type and used it to create one of the western world’s first major printed books, the “Forty–Two–Line” Bible.\\\"\\ncanonical: ''\\n---\\n\\nGerman inventor Johannes Gutenberg developed a method of movable type and used it to create one of the western world’s first major printed books, the “Forty–Two–Line” Bible.\\n\\n**Johannes Gensfleisch zur Laden zum Gutenberg** (c. 1398 – 1468) was a German blacksmith, goldsmith, printer, and publisher who introduced printing to Europe. His invention of mechanical movable type printing started the Printing Revolution and is widely regarded as the most important event of the modern period. It played a key role in the development of the Renaissance, Reformation, the Age of Enlightenment, and the Scientific revolution and laid the material basis for the modern knowledge-based economy and the spread of learning to the masses.\\n\\n
\\n\\t\\\"Gutenberg\\\"\\n\\t
Johannes Gutenberg
\\n
\\n\\nWith his invention of the printing press, Gutenberg was the first European to use movable type printing, in around 1439. Among his many contributions to printing are: the invention of a process for mass-producing movable type; the use of oil-based ink; and the use of a wooden printing press similar to the agricultural screw presses of the period. His truly epochal invention was the combination of these elements into a practical system that allowed the mass production of printed books and was economically viable for printers and readers alike. Gutenberg's method for making type is traditionally considered to have included a type metal alloy and a hand mould for casting type. The alloy was a mixture of lead, tin, and antimony that melted at a relatively low temperature for faster and more economical casting, cast well, and created a durable type.\\n\\nIn Renaissance Europe, the arrival of mechanical movable type printing introduced the era of mass communication which permanently altered the structure of society. The relatively unrestricted circulation of information — including revolutionary ideas — transcended borders, captured the masses in the Reformation and threatened the power of political and religious authorities; the sharp increase in literacy broke the monopoly of the literate elite on education and learning and bolstered the emerging middle class. Across Europe, the increasing cultural self-awareness of its people led to the rise of proto-nationalism, accelerated by the flowering of the European vernacular languages to the detriment of Latin's status as lingua franca. In the 19th century, the replacement of the hand-operated Gutenberg-style press by steam-powered rotary presses allowed printing on an industrial scale, while Western-style printing was adopted all over the world, becoming practically the sole medium for modern bulk printing.\\n\\nThe use of movable type was a marked improvement on the handwritten manuscript, which was the existing method of book production in Europe, and upon woodblock printing, and revolutionized European book-making. Gutenberg's printing technology spread rapidly throughout Europe and later the world.\\n\\nHis major work, the Gutenberg Bible (also known as the 42-line Bible), has been acclaimed for its high aesthetic and technical quality.\\n\\n## Printing Press\\n\\nAround 1439, Gutenberg was involved in a financial misadventure making polished metal mirrors (which were believed to capture holy light from religious relics) for sale to pilgrims to Aachen: in 1439 the city was planning to exhibit its collection of relics from Emperor Charlemagne but the event was delayed by one year due to a severe flood and the capital already spent could not be repaid. When the question of satisfying the investors came up, Gutenberg is said to have promised to share a “secret”. It has been widely speculated that this secret may have been the idea of printing with movable type. Also around 1439–1440, the Dutch Laurens Janszoon Coster came up with the idea of printing. Legend has it that the idea came to him “like a ray of light”.\\n\\n
\\n\\t\\\"Early\\n\\t
Early wooden printing press as depicted in 1568.
\\n
\\n\\nUntil at least 1444 he lived in Strasbourg, most likely in the St. Arbogast parish. It was in Strasbourg in 1440 that Gutenberg is said to have perfected and unveiled the secret of printing based on his research, mysteriously entitled Kunst und Aventur (art and enterprise). It is not clear what work he was engaged in, or whether some early trials with printing from movable type may have been conducted there. After this, there is a gap of four years in the record. In 1448, he was back in Mainz, where he took out a loan from his brother-in-law Arnold Gelthus, quite possibly for a printing press or related paraphernalia. By this date, Gutenberg may have been familiar with intaglio printing; it is claimed that he had worked on copper engravings with an artist known as the Master of Playing Cards.\\n\\nBy 1450, the press was in operation, and a German poem had been printed, possibly the first item to be printed there. Gutenberg was able to convince the wealthy moneylender Johann Fust for a loan of 800 guilders. Peter Schöffer, who became Fust’s son-in-law, also joined the enterprise. Schöffer had worked as a scribe in Paris and is believed to have designed some of the first typefaces.\\n\\n
\\n\\t
\\n\\t\\t

All that has been written to me about that marvelous man seen at Frankfurt is true. I have not seen complete Bibles but only a number of quires of various books of the Bible. The script was very neat and legible, not at all difficult to follow—your grace would be able to read it without effort, and indeed without glasses.

\\n\\t\\t
\\n\\t\\t\\t—Future pope Pius II in a letter to Cardinal Carvajal, March 1455\\n\\t\\t
\\n\\t
\\n
\\n\\nGutenberg's workshop was set up at Hof Humbrecht, a property belonging to a distant relative. It is not clear when Gutenberg conceived the Bible project, but for this he borrowed another 800 guilders from Fust, and work commenced in 1452. At the same time, the press was also printing other, more lucrative texts (possibly Latin grammars). There is also some speculation that there may have been two presses, one for the pedestrian texts, and one for the Bible. One of the profit-making enterprises of the new press was the printing of thousands of indulgences for the church, documented from 1454–55.\\n\\nIn 1455 Gutenberg completed his 42-line Bible, known as the Gutenberg Bible. About 180 copies were printed, most on paper and some on vellum.\\n\\n## Court Case\\n\\nSome time in 1456, there was a dispute between Gutenberg and Fust, and Fust demanded his money back, accusing Gutenberg of misusing the funds. Meanwhile the expenses of the Bible project had proliferated, and Gutenberg's debt now exceeded 20,000 guilders. Fust sued at the archbishop's court. A November 1455 legal document records that there was a partnership for a \\\"project of the books,\\\" the funds for which Gutenberg had used for other purposes, according to Fust. The court decided in favor of Fust, giving him control over the Bible printing workshop and half of all printed Bibles.\\n\\nThus Gutenberg was effectively bankrupt, but it appears he retained (or re-started) a small printing shop, and participated in the printing of a Bible in the town of Bamberg around 1459, for which he seems at least to have supplied the type. But since his printed books never carry his name or a date, it is difficult to be certain, and there is consequently a considerable scholarly debate on this subject. It is also possible that the large Catholicon dictionary, 300 copies of 754 pages, printed in Mainz in 1460, may have been executed in his workshop.\\n\\nMeanwhile, the Fust–Schöffer shop was the first in Europe to bring out a book with the printer's name and date, the Mainz Psalter of August 1457, and while proudly proclaiming the mechanical process by which it had been produced, it made no mention of Gutenberg.\\n\\n## Later Life\\n\\nIn 1462, during a conflict between two archbishops, Mainz was sacked by archbishop Adolph von Nassau, and Gutenberg was exiled. An old man by now, he moved to Eltville where he may have initiated and supervised a new printing press belonging to the brothers Bechtermünze.\\n\\nIn January 1465, Gutenberg's achievements were recognized and he was given the title Hofmann (gentleman of the court) by von Nassau. This honor included a stipend, an annual court outfit, as well as 2,180 litres of grain and 2,000 litres of wine tax-free. It is believed he may have moved back to Mainz around this time, but this is not certain.\\n\\n***\\n\\nGutenberg died in 1468 and was buried in the Franciscan church at Mainz, his contributions largely unknown. This church and the cemetery were later destroyed, and Gutenberg's grave is now lost.\\n\\nIn 1504, he was mentioned as the inventor of typography in a book by Professor Ivo Wittig. It was not until 1567 that the first portrait of Gutenberg, almost certainly an imaginary reconstruction, appeared in Heinrich Pantaleon's biography of famous Germans.\\n\\n## Printing Method With Movable Type\\n\\nGutenberg's early printing process, and what tests he may have made with movable type, are not known in great detail. His later Bibles were printed in such a way as to have required large quantities of type, some estimates suggesting as many as 100,000 individual sorts. Setting each page would take, perhaps, half a day, and considering all the work in loading the press, inking the type, pulling the impressions, hanging up the sheets, distributing the type, etc., it is thought that the Gutenberg–Fust shop might have employed as many as 25 craftsmen.\\n\\n![Movable metal type, and composing stick, descended from Gutenberg's press. Photo by Willi Heidelbach. Licensed under CC BY 2.5](/media/movable-type.jpg)\\n\\n*Movable metal type, and composing stick, descended from Gutenberg's press. Photo by Willi Heidelbach. Licensed under CC BY 2.5*\\n\\nGutenberg's technique of making movable type remains unclear. In the following decades, punches and copper matrices became standardized in the rapidly disseminating printing presses across Europe. Whether Gutenberg used this sophisticated technique or a somewhat primitive version has been the subject of considerable debate.\\n\\nIn the standard process of making type, a hard metal punch (made by punchcutting, with the letter carved back to front) is hammered into a softer copper bar, creating a matrix. This is then placed into a hand-held mould and a piece of type, or \\\"sort\\\", is cast by filling the mould with molten type-metal; this cools almost at once, and the resulting piece of type can be removed from the mould. The matrix can be reused to create hundreds, or thousands, of identical sorts so that the same character appearing anywhere within the book will appear very uniform, giving rise, over time, to the development of distinct styles of typefaces or fonts. After casting, the sorts are arranged into type-cases, and used to make up pages which are inked and printed, a procedure which can be repeated hundreds, or thousands, of times. The sorts can be reused in any combination, earning the process the name of “movable type”.\\n\\nThe invention of the making of types with punch, matrix and mold has been widely attributed to Gutenberg. However, recent evidence suggests that Gutenberg's process was somewhat different. If he used the punch and matrix approach, all his letters should have been nearly identical, with some variations due to miscasting and inking. However, the type used in Gutenberg's earliest work shows other variations.\\n\\n
\\n\\t
\\n\\t\\t

It is a press, certainly, but a press from which shall flow in inexhaustible streams… Through it, god will spread his word.

\\n\\t\\t
\\n\\t\\t\\t—Johannes Gutenberg\\n\\t\\t
\\n\\t
\\n
\\n\\nIn 2001, the physicist Blaise Agüera y Arcas and Princeton librarian Paul Needham, used digital scans of a Papal bull in the Scheide Library, Princeton, to carefully compare the same letters (types) appearing in different parts of the printed text. The irregularities in Gutenberg's type, particularly in simple characters such as the hyphen, suggested that the variations could not have come from either ink smear or from wear and damage on the pieces of metal on the types themselves. While some identical types are clearly used on other pages, other variations, subjected to detailed image analysis, suggested that they could not have been produced from the same matrix. Transmitted light pictures of the page also appeared to reveal substructures in the type that could not arise from traditional punchcutting techniques. They hypothesized that the method may have involved impressing simple shapes to create alphabets in “cuneiform” style in a matrix made of some soft material, perhaps sand. Casting the type would destroy the mould, and the matrix would need to be recreated to make each additional sort. This could explain the variations in the type, as well as the substructures observed in the printed images.\\n\\nThus, they feel that “the decisive factor for the birth of typography”, the use of reusable moulds for casting type, might have been a more progressive process than was previously thought. They suggest that the additional step of using the punch to create a mould that could be reused many times was not taken until twenty years later, in the 1470s. Others have not accepted some or all of their suggestions, and have interpreted the evidence in other ways, and the truth of the matter remains very uncertain.\\n\\nA 1568 history by Hadrianus Junius of Holland claims that the basic idea of the movable type came to Gutenberg from Laurens Janszoon Coster via Fust, who was apprenticed to Coster in the 1430s and may have brought some of his equipment from Haarlem to Mainz. While Coster appears to have experimented with moulds and castable metal type, there is no evidence that he had actually printed anything with this technology. He was an inventor and a goldsmith. However, there is one indirect supporter of the claim that Coster might be the inventor. The author of the Cologne Chronicle of 1499 quotes Ulrich Zell, the first printer of Cologne, that printing was performed in Mainz in 1450, but that some type of printing of lower quality had previously occurred in the Netherlands. However, the chronicle does not mention the name of Coster, while it actually credits Gutenberg as the \\\"first inventor of printing\\\" in the very same passage (fol. 312). The first securely dated book by Dutch printers is from 1471, and the Coster connection is today regarded as a mere legend.\\n\\nThe 19th century printer and typefounder Fournier Le Jeune suggested that Gutenberg might not have been using type cast with a reusable matrix, but possibly wooden types that were carved individually. A similar suggestion was made by Nash in 2004. This remains possible, albeit entirely unproven.\\n\\nIt has also been questioned whether Gutenberg used movable types at all. In 2004, Italian professor Bruno Fabbiani claimed that examination of the 42-line Bible revealed an overlapping of letters, suggesting that Gutenberg did not in fact use movable type (individual cast characters) but rather used whole plates made from a system somewhat like a modern typewriter, whereby the letters were stamped successively into the plate and then printed. However, most specialists regard the occasional overlapping of type as caused by paper movement over pieces of type of slightly unequal height.\",\"is_binary\":false,\"__typename\":\"Blob\"}}}}", "status": 200 }, { @@ -247,9 +246,9 @@ "method": "POST", "url": "/repos/owner/repo/git/blobs", "headers": { - "Server": "GitHub.com", "Content-Type": "application/json; charset=utf-8", - "Content-Length": "211", + "Content-Length": "212", + "Server": "GitHub.com", "Status": "201 Created", "X-RateLimit-Limit": "5000", "Cache-Control": "private, max-age=60, s-maxage=60", @@ -267,9 +266,88 @@ "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", "Content-Security-Policy": "default-src 'none'" }, - "response": "{\n \"sha\": \"13692e6574cb4bf447aefcf7e0278e2f3fad6cf3\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/13692e6574cb4bf447aefcf7e0278e2f3fad6cf3\"\n}\n", + "response": "{\"sha\":\"13692e6574cb4bf447aefcf7e0278e2f3fad6cf3\",\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/13692e6574cb4bf447aefcf7e0278e2f3fad6cf3\"}", "status": 201 }, + { + "method": "GET", + "url": "/repos/owner/repo/commits?path=content/posts/2016-01-12---The-Origins-of-Social-Stationery-Lettering.md&sha=master", + "headers": { + "Content-Type": "application/json; charset=utf-8", + "Server": "GitHub.com", + "Status": "200 OK", + "X-RateLimit-Limit": "5000", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP", + "X-OAuth-Scopes": "delete_repo, repo", + "X-Accepted-OAuth-Scopes": "", + "X-GitHub-Media-Type": "github.v3; format=json", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "1; mode=block", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "content-length": "4828" + }, + "response": "[{\"sha\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"node_id\":\"MDY6Q29tbWl0Mjg2NzU3NjIxOjJiYzNmYTM5ZDhhZGI5ZTAwOGU1Mjc5Mzg1NDMzODM5OWZjNmU0YWQ=\",\"commit\":{\"author\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2019-07-24T07:45:32Z\"},\"committer\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2019-07-24T07:45:32Z\"},\"message\":\"initial commit\",\"tree\":{\"sha\":\"3d53c60def5d9f9ad79a534dd369f758763d9dc9\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/3d53c60def5d9f9ad79a534dd369f758763d9dc9\"},\"url\":\"https://api.github.com/repos/owner/repo/git/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\niQIzBAABCgAdFiEE8DeG71n37ZpuxjiNA05FmC/LkwQFAl04DJwACgkQA05FmC/L\\nkwQ5kg//TB2c1HvsD/r7x3CgKmR+uaEFGrv9srfA4/i/dbDSAg3+kpPXfGg0FCUw\\nETlWDpZRhFvLZzoxy5w46P1cLvpbdEXK47LWpsFYWFtCFGKmvaY5dZ/ma1J3HF5R\\n7Yll5jz8BKrWOZ6bOswP7nNteAFYfLiZxJq4ONbhxOyRJA7bFmg6Ydo2Zc27Gg54\\n6umhONf9DxuzL0z0f8qtHiz47KJTRdFS+ZL/Mq3iCE11SGHvjK0cnPq0Z6TBtazt\\nqszoR0Frxes4MsjI82+ovCP+RtpqerWeN/ciYoLENsnUb8Xbp/qdhrLoMvuFExz2\\n0f0M7zVI1Z9d4cDTQlembVneSv5sSeNtnk2e7BXLwjUNFVxB67aslVUyL41V0BMu\\nUw8+j9pNhObpicJs9O1fIkL84mtCSMWIyuCwDpSMSj2b892laBOKu/E5D+YuaHi5\\nbAJJ1/Szig0CzeI1KbIBoWDI1orpkSUU+4Fvk7qJnxP9iLJLwiNCFKfNKA1KeXmP\\nIK6/95HmKNJ8MfTEkRcgIdTe4fx2ib2hHGiaIAD0r4FgWxfC2BWK/uTUp8HtIQre\\nDILGnF1laIcJbyP7asvc8iJ06Kk8C9PsH4v20fqoyNcei7v0IJG2m9AHVDnb0t6L\\nAa1yXEHQLSGHS9Y0mogLPW/tZnV69EHRI1dzvH/1gDVlBMwM1/A=\\n=hLDv\\n-----END PGP SIGNATURE-----\",\"payload\":\"tree 3d53c60def5d9f9ad79a534dd369f758763d9dc9\\nauthor owner 1563954332 +0300\\ncommitter owner 1563954332 +0300\\n\\ninitial commit\\n\"}},\"url\":\"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"html_url\":\"https://github.com/owner/repo/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"comments_url\":\"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad/comments\",\"author\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"committer\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"parents\":[]}]", + "status": 200 + }, + { + "body": "{\"operationName\":\"blob\",\"variables\":{\"owner\":\"owner\",\"name\":\"repo\",\"expression\":\"a532f0a9445cdf90a19c6812cff89d1674991774\"},\"query\":\"query blob($owner: String!, $name: String!, $expression: String!) {\\n repository(owner: $owner, name: $name) {\\n ...RepositoryParts\\n object(expression: $expression) {\\n ... on Blob {\\n ...BlobWithTextParts\\n __typename\\n }\\n __typename\\n }\\n __typename\\n }\\n}\\n\\nfragment RepositoryParts on Repository {\\n id\\n isFork\\n __typename\\n}\\n\\nfragment BlobWithTextParts on Blob {\\n id\\n text\\n is_binary: isBinary\\n __typename\\n}\\n\"}", + "method": "POST", + "url": "/graphql", + "headers": { + "Content-Type": "application/json; charset=utf-8", + "Server": "GitHub.com", + "Status": "200 OK", + "Cache-Control": "no-cache", + "X-OAuth-Scopes": "delete_repo, repo", + "X-Accepted-OAuth-Scopes": "repo", + "X-GitHub-Media-Type": "github.v4; format=json", + "X-RateLimit-Limit": "5000", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "1; mode=block", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "Vary": "Accept-Encoding, Accept, X-Requested-With", + "content-length": "7818" + }, + "response": "{\"data\":{\"repository\":{\"id\":\"MDEwOlJlcG9zaXRvcnkyODY3NTc2MjE=\",\"isFork\":false,\"__typename\":\"Repository\",\"object\":{\"id\":\"MDQ6QmxvYjI4Njc1NzYyMTphNTMyZjBhOTQ0NWNkZjkwYTE5YzY4MTJjZmY4OWQxNjc0OTkxNzc0\",\"text\":\"---\\ntitle: Humane Typography in the Digital Age\\ndate: \\\"2017-08-19T22:40:32.169Z\\\"\\ntemplate: \\\"post\\\"\\ndraft: false\\ncategory: \\\"Typography\\\"\\ntags:\\n - \\\"Design\\\"\\n - \\\"Typography\\\"\\n - \\\"Web Development\\\"\\ndescription: \\\"An Essay on Typography by Eric Gill takes the reader back to the year 1930. The year when a conflict between two worlds came to its term. The machines of the industrial world finally took over the handicrafts.\\\"\\ncanonical: ''\\n---\\n\\n- [The first transition](#the-first-transition)\\n- [The digital age](#the-digital-age)\\n- [Loss of humanity through transitions](#loss-of-humanity-through-transitions)\\n- [Chasing perfection](#chasing-perfection)\\n\\nAn Essay on Typography by Eric Gill takes the reader back to the year 1930. The year when a conflict between two worlds came to its term. The machines of the industrial world finally took over the handicrafts.\\n\\nThe typography of this industrial age was no longer handcrafted. Mass production and profit became more important. Quantity mattered more than the quality. The books and printed works in general lost a part of its humanity. The typefaces were not produced by craftsmen anymore. It was the machines printing and tying the books together now. The craftsmen had to let go of their craft and became a cog in the process. An extension of the industrial machine.\\n\\nBut the victory of the industrialism didn’t mean that the craftsmen were completely extinct. The two worlds continued to coexist independently. Each recognising the good in the other — the power of industrialism and the humanity of craftsmanship. This was the second transition that would strip typography of a part of its humanity. We have to go 500 years back in time to meet the first one.\\n\\n## The first transition\\n\\nA similar conflict emerged after the invention of the first printing press in Europe. Johannes Gutenberg invented movable type and used it to produce different compositions. His workshop could print up to 240 impressions per hour. Until then, the books were being copied by hand. All the books were handwritten and decorated with hand drawn ornaments and figures. A process of copying a book was long but each book, even a copy, was a work of art.\\n\\nThe first printed books were, at first, perceived as inferior to the handwritten ones. They were smaller and cheaper to produce. Movable type provided the printers with flexibility that allowed them to print books in languages other than Latin. Gill describes the transition to industrialism as something that people needed and wanted. Something similar happened after the first printed books emerged. People wanted books in a language they understood and they wanted books they could take with them. They were hungry for knowledge and printed books satisfied this hunger.\\n\\n![42-line-bible.jpg](/media/42-line-bible.jpg)\\n\\n*The 42–Line Bible, printed by Gutenberg.*\\n\\nBut, through this transition, the book lost a large part of its humanity. The machine took over most of the process but craftsmanship was still a part of it. The typefaces were cut manually by the first punch cutters. The paper was made by hand. The illustrations and ornaments were still being hand drawn. These were the remains of the craftsmanship that went almost extinct in the times of Eric Gill.\\n\\n## The digital age\\n\\nThe first transition took away a large part of humanity from written communication. Industrialisation, the second transition described by Eric Gill, took away most of what was left. But it’s the third transition that stripped it naked. Typefaces are faceless these days. They’re just fonts on our computers. Hardly anyone knows their stories. Hardly anyone cares. Flicking through thousands of typefaces and finding the “right one” is a matter of minutes.\\n\\n> In the new computer age the proliferation of typefaces and type manipulations represents a new level of visual pollution threatening our culture. Out of thousands of typefaces, all we need are a few basic ones, and trash the rest.\\n>\\n— Massimo Vignelli\\n\\nTypography is not about typefaces. It’s not about what looks best, it’s about what feels right. What communicates the message best. Typography, in its essence, is about the message. “Typographical design should perform optically what the speaker creates through voice and gesture of his thoughts.”, as El Lissitzky, a famous Russian typographer, put it.\\n\\n## Loss of humanity through transitions\\n\\nEach transition took away a part of humanity from written language. Handwritten books being the most humane form and the digital typefaces being the least. Overuse of Helvetica is a good example. Messages are being told in a typeface just because it’s a safe option. It’s always there. Everyone knows it but yet, nobody knows it. Stop someone on the street and ask him what Helvetica is? Ask a designer the same question. Ask him where it came from, when, why and who designed it. Most of them will fail to answer these questions. Most of them used it in their precious projects but they still don’t spot it in the street.\\n\\n
\\n\\t
\\n\\t\\t

Knowledge of the quality of a typeface is of the greatest importance for the functional, aesthetic and psychological effect.

\\n\\t\\t
\\n\\t\\t\\t— Josef Mueller-Brockmann\\n\\t\\t
\\n\\t
\\n
\\n\\nTypefaces don’t look handmade these days. And that’s all right. They don’t have to. Industrialism took that away from them and we’re fine with it. We’ve traded that part of humanity for a process that produces more books that are easier to read. That can’t be bad. And it isn’t.\\n\\n> Humane typography will often be comparatively rough and even uncouth; but while a certain uncouthness does not seriously matter in humane works, uncouthness has no excuse whatever in the productions of the machine.\\n>\\n> — Eric Gill\\n\\nWe’ve come close to “perfection” in the last five centuries. The letters are crisp and without rough edges. We print our compositions with high–precision printers on a high quality, machine made paper.\\n\\n![type-through-time.jpg](/media/type-through-time.jpg)\\n\\n*Type through 5 centuries.*\\n\\nWe lost a part of ourselves because of this chase after perfection. We forgot about the craftsmanship along the way. And the worst part is that we don’t care. The transition to the digital age made that clear. We choose typefaces like clueless zombies. There’s no meaning in our work. Type sizes, leading, margins… It’s all just a few clicks or lines of code. The message isn’t important anymore. There’s no more “why” behind the “what”.\\n\\n## Chasing perfection\\n\\nHuman beings aren’t perfect. Perfection is something that will always elude us. There will always be a small part of humanity in everything we do. No matter how small that part, we should make sure that it transcends the limits of the medium. We have to think about the message first. What typeface should we use and why? Does the typeface match the message and what we want to communicate with it? What will be the leading and why? Will there be more typefaces in our design? On what ground will they be combined? What makes our design unique and why? This is the part of humanity that is left in typography. It might be the last part. Are we really going to give it up?\\n\\n*Originally published by [Matej Latin](http://matejlatin.co.uk/) on [Medium](https://medium.com/design-notes/humane-typography-in-the-digital-age-9bd5c16199bd?ref=webdesignernews.com#.lygo82z0x).*\",\"is_binary\":false,\"__typename\":\"Blob\"}}}}", + "status": 200 + }, + { + "method": "GET", + "url": "/repos/owner/repo/commits?path=content/posts/2017-18-08---The-Birth-of-Movable-Type.md&sha=master", + "headers": { + "Content-Type": "application/json; charset=utf-8", + "Server": "GitHub.com", + "Status": "200 OK", + "X-RateLimit-Limit": "5000", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP", + "X-OAuth-Scopes": "delete_repo, repo", + "X-Accepted-OAuth-Scopes": "", + "X-GitHub-Media-Type": "github.v3; format=json", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "1; mode=block", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "content-length": "4828" + }, + "response": "[{\"sha\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"node_id\":\"MDY6Q29tbWl0Mjg2NzU3NjIxOjJiYzNmYTM5ZDhhZGI5ZTAwOGU1Mjc5Mzg1NDMzODM5OWZjNmU0YWQ=\",\"commit\":{\"author\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2019-07-24T07:45:32Z\"},\"committer\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2019-07-24T07:45:32Z\"},\"message\":\"initial commit\",\"tree\":{\"sha\":\"3d53c60def5d9f9ad79a534dd369f758763d9dc9\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/3d53c60def5d9f9ad79a534dd369f758763d9dc9\"},\"url\":\"https://api.github.com/repos/owner/repo/git/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\niQIzBAABCgAdFiEE8DeG71n37ZpuxjiNA05FmC/LkwQFAl04DJwACgkQA05FmC/L\\nkwQ5kg//TB2c1HvsD/r7x3CgKmR+uaEFGrv9srfA4/i/dbDSAg3+kpPXfGg0FCUw\\nETlWDpZRhFvLZzoxy5w46P1cLvpbdEXK47LWpsFYWFtCFGKmvaY5dZ/ma1J3HF5R\\n7Yll5jz8BKrWOZ6bOswP7nNteAFYfLiZxJq4ONbhxOyRJA7bFmg6Ydo2Zc27Gg54\\n6umhONf9DxuzL0z0f8qtHiz47KJTRdFS+ZL/Mq3iCE11SGHvjK0cnPq0Z6TBtazt\\nqszoR0Frxes4MsjI82+ovCP+RtpqerWeN/ciYoLENsnUb8Xbp/qdhrLoMvuFExz2\\n0f0M7zVI1Z9d4cDTQlembVneSv5sSeNtnk2e7BXLwjUNFVxB67aslVUyL41V0BMu\\nUw8+j9pNhObpicJs9O1fIkL84mtCSMWIyuCwDpSMSj2b892laBOKu/E5D+YuaHi5\\nbAJJ1/Szig0CzeI1KbIBoWDI1orpkSUU+4Fvk7qJnxP9iLJLwiNCFKfNKA1KeXmP\\nIK6/95HmKNJ8MfTEkRcgIdTe4fx2ib2hHGiaIAD0r4FgWxfC2BWK/uTUp8HtIQre\\nDILGnF1laIcJbyP7asvc8iJ06Kk8C9PsH4v20fqoyNcei7v0IJG2m9AHVDnb0t6L\\nAa1yXEHQLSGHS9Y0mogLPW/tZnV69EHRI1dzvH/1gDVlBMwM1/A=\\n=hLDv\\n-----END PGP SIGNATURE-----\",\"payload\":\"tree 3d53c60def5d9f9ad79a534dd369f758763d9dc9\\nauthor owner 1563954332 +0300\\ncommitter owner 1563954332 +0300\\n\\ninitial commit\\n\"}},\"url\":\"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"html_url\":\"https://github.com/owner/repo/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"comments_url\":\"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad/comments\",\"author\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"committer\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"parents\":[]}]", + "status": 200 + }, { "method": "GET", "url": "/repos/owner/repo/commits?path=content/posts/2016-02-02---A-Brief-History-of-Typography.md&sha=master", @@ -291,95 +369,17 @@ "X-XSS-Protection": "1; mode=block", "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", "Content-Security-Policy": "default-src 'none'", - "content-length": "4823" + "content-length": "4828" }, - "response": "[\n {\n \"sha\": \"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"node_id\": \"MDY6Q29tbWl0MjU1MTAyMDQ2OjJiYzNmYTM5ZDhhZGI5ZTAwOGU1Mjc5Mzg1NDMzODM5OWZjNmU0YWQ=\",\n \"commit\": {\n \"author\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2019-07-24T07:45:32Z\"\n },\n \"committer\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2019-07-24T07:45:32Z\"\n },\n \"message\": \"initial commit\",\n \"tree\": {\n \"sha\": \"3d53c60def5d9f9ad79a534dd369f758763d9dc9\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/3d53c60def5d9f9ad79a534dd369f758763d9dc9\"\n },\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"comment_count\": 0,\n \"verification\": {\n \"verified\": true,\n \"reason\": \"valid\",\n \"signature\": \"-----BEGIN PGP SIGNATURE-----\\n\\niQIzBAABCgAdFiEE8DeG71n37ZpuxjiNA05FmC/LkwQFAl04DJwACgkQA05FmC/L\\nkwQ5kg//TB2c1HvsD/r7x3CgKmR+uaEFGrv9srfA4/i/dbDSAg3+kpPXfGg0FCUw\\nETlWDpZRhFvLZzoxy5w46P1cLvpbdEXK47LWpsFYWFtCFGKmvaY5dZ/ma1J3HF5R\\n7Yll5jz8BKrWOZ6bOswP7nNteAFYfLiZxJq4ONbhxOyRJA7bFmg6Ydo2Zc27Gg54\\n6umhONf9DxuzL0z0f8qtHiz47KJTRdFS+ZL/Mq3iCE11SGHvjK0cnPq0Z6TBtazt\\nqszoR0Frxes4MsjI82+ovCP+RtpqerWeN/ciYoLENsnUb8Xbp/qdhrLoMvuFExz2\\n0f0M7zVI1Z9d4cDTQlembVneSv5sSeNtnk2e7BXLwjUNFVxB67aslVUyL41V0BMu\\nUw8+j9pNhObpicJs9O1fIkL84mtCSMWIyuCwDpSMSj2b892laBOKu/E5D+YuaHi5\\nbAJJ1/Szig0CzeI1KbIBoWDI1orpkSUU+4Fvk7qJnxP9iLJLwiNCFKfNKA1KeXmP\\nIK6/95HmKNJ8MfTEkRcgIdTe4fx2ib2hHGiaIAD0r4FgWxfC2BWK/uTUp8HtIQre\\nDILGnF1laIcJbyP7asvc8iJ06Kk8C9PsH4v20fqoyNcei7v0IJG2m9AHVDnb0t6L\\nAa1yXEHQLSGHS9Y0mogLPW/tZnV69EHRI1dzvH/1gDVlBMwM1/A=\\n=hLDv\\n-----END PGP SIGNATURE-----\",\n \"payload\": \"tree 3d53c60def5d9f9ad79a534dd369f758763d9dc9\\nauthor owner 1563954332 +0300\\ncommitter owner 1563954332 +0300\\n\\ninitial commit\\n\"\n }\n },\n \"url\": \"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"html_url\": \"https://github.com/owner/repo/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"comments_url\": \"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad/comments\",\n \"author\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"committer\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"parents\": [\n\n ]\n }\n]\n", - "status": 200 - }, - { - "method": "GET", - "url": "/repos/owner/repo/commits?path=content/posts/2016-01-09---Perfecting-the-Art-of-Perfection.md&sha=master", - "headers": { - "Server": "GitHub.com", - "Content-Type": "application/json; charset=utf-8", - "Status": "200 OK", - "X-RateLimit-Limit": "5000", - "Cache-Control": "private, max-age=60, s-maxage=60", - "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP", - "X-OAuth-Scopes": "delete_repo, repo", - "X-Accepted-OAuth-Scopes": "", - "X-GitHub-Media-Type": "github.v3; format=json", - "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", - "Access-Control-Allow-Origin": "*", - "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", - "X-Frame-Options": "deny", - "X-Content-Type-Options": "nosniff", - "X-XSS-Protection": "1; mode=block", - "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", - "Content-Security-Policy": "default-src 'none'", - "content-length": "4823" - }, - "response": "[\n {\n \"sha\": \"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"node_id\": \"MDY6Q29tbWl0MjU1MTAyMDQ2OjJiYzNmYTM5ZDhhZGI5ZTAwOGU1Mjc5Mzg1NDMzODM5OWZjNmU0YWQ=\",\n \"commit\": {\n \"author\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2019-07-24T07:45:32Z\"\n },\n \"committer\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2019-07-24T07:45:32Z\"\n },\n \"message\": \"initial commit\",\n \"tree\": {\n \"sha\": \"3d53c60def5d9f9ad79a534dd369f758763d9dc9\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/3d53c60def5d9f9ad79a534dd369f758763d9dc9\"\n },\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"comment_count\": 0,\n \"verification\": {\n \"verified\": true,\n \"reason\": \"valid\",\n \"signature\": \"-----BEGIN PGP SIGNATURE-----\\n\\niQIzBAABCgAdFiEE8DeG71n37ZpuxjiNA05FmC/LkwQFAl04DJwACgkQA05FmC/L\\nkwQ5kg//TB2c1HvsD/r7x3CgKmR+uaEFGrv9srfA4/i/dbDSAg3+kpPXfGg0FCUw\\nETlWDpZRhFvLZzoxy5w46P1cLvpbdEXK47LWpsFYWFtCFGKmvaY5dZ/ma1J3HF5R\\n7Yll5jz8BKrWOZ6bOswP7nNteAFYfLiZxJq4ONbhxOyRJA7bFmg6Ydo2Zc27Gg54\\n6umhONf9DxuzL0z0f8qtHiz47KJTRdFS+ZL/Mq3iCE11SGHvjK0cnPq0Z6TBtazt\\nqszoR0Frxes4MsjI82+ovCP+RtpqerWeN/ciYoLENsnUb8Xbp/qdhrLoMvuFExz2\\n0f0M7zVI1Z9d4cDTQlembVneSv5sSeNtnk2e7BXLwjUNFVxB67aslVUyL41V0BMu\\nUw8+j9pNhObpicJs9O1fIkL84mtCSMWIyuCwDpSMSj2b892laBOKu/E5D+YuaHi5\\nbAJJ1/Szig0CzeI1KbIBoWDI1orpkSUU+4Fvk7qJnxP9iLJLwiNCFKfNKA1KeXmP\\nIK6/95HmKNJ8MfTEkRcgIdTe4fx2ib2hHGiaIAD0r4FgWxfC2BWK/uTUp8HtIQre\\nDILGnF1laIcJbyP7asvc8iJ06Kk8C9PsH4v20fqoyNcei7v0IJG2m9AHVDnb0t6L\\nAa1yXEHQLSGHS9Y0mogLPW/tZnV69EHRI1dzvH/1gDVlBMwM1/A=\\n=hLDv\\n-----END PGP SIGNATURE-----\",\n \"payload\": \"tree 3d53c60def5d9f9ad79a534dd369f758763d9dc9\\nauthor owner 1563954332 +0300\\ncommitter owner 1563954332 +0300\\n\\ninitial commit\\n\"\n }\n },\n \"url\": \"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"html_url\": \"https://github.com/owner/repo/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"comments_url\": \"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad/comments\",\n \"author\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"committer\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"parents\": [\n\n ]\n }\n]\n", - "status": 200 - }, - { - "method": "GET", - "url": "/repos/owner/repo/commits?path=content/posts/2016-01-12---The-Origins-of-Social-Stationery-Lettering.md&sha=master", - "headers": { - "Server": "GitHub.com", - "Content-Type": "application/json; charset=utf-8", - "Status": "200 OK", - "X-RateLimit-Limit": "5000", - "Cache-Control": "private, max-age=60, s-maxage=60", - "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP", - "X-OAuth-Scopes": "delete_repo, repo", - "X-Accepted-OAuth-Scopes": "", - "X-GitHub-Media-Type": "github.v3; format=json", - "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", - "Access-Control-Allow-Origin": "*", - "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", - "X-Frame-Options": "deny", - "X-Content-Type-Options": "nosniff", - "X-XSS-Protection": "1; mode=block", - "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", - "Content-Security-Policy": "default-src 'none'", - "content-length": "4823" - }, - "response": "[\n {\n \"sha\": \"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"node_id\": \"MDY6Q29tbWl0MjU1MTAyMDQ2OjJiYzNmYTM5ZDhhZGI5ZTAwOGU1Mjc5Mzg1NDMzODM5OWZjNmU0YWQ=\",\n \"commit\": {\n \"author\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2019-07-24T07:45:32Z\"\n },\n \"committer\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2019-07-24T07:45:32Z\"\n },\n \"message\": \"initial commit\",\n \"tree\": {\n \"sha\": \"3d53c60def5d9f9ad79a534dd369f758763d9dc9\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/3d53c60def5d9f9ad79a534dd369f758763d9dc9\"\n },\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"comment_count\": 0,\n \"verification\": {\n \"verified\": true,\n \"reason\": \"valid\",\n \"signature\": \"-----BEGIN PGP SIGNATURE-----\\n\\niQIzBAABCgAdFiEE8DeG71n37ZpuxjiNA05FmC/LkwQFAl04DJwACgkQA05FmC/L\\nkwQ5kg//TB2c1HvsD/r7x3CgKmR+uaEFGrv9srfA4/i/dbDSAg3+kpPXfGg0FCUw\\nETlWDpZRhFvLZzoxy5w46P1cLvpbdEXK47LWpsFYWFtCFGKmvaY5dZ/ma1J3HF5R\\n7Yll5jz8BKrWOZ6bOswP7nNteAFYfLiZxJq4ONbhxOyRJA7bFmg6Ydo2Zc27Gg54\\n6umhONf9DxuzL0z0f8qtHiz47KJTRdFS+ZL/Mq3iCE11SGHvjK0cnPq0Z6TBtazt\\nqszoR0Frxes4MsjI82+ovCP+RtpqerWeN/ciYoLENsnUb8Xbp/qdhrLoMvuFExz2\\n0f0M7zVI1Z9d4cDTQlembVneSv5sSeNtnk2e7BXLwjUNFVxB67aslVUyL41V0BMu\\nUw8+j9pNhObpicJs9O1fIkL84mtCSMWIyuCwDpSMSj2b892laBOKu/E5D+YuaHi5\\nbAJJ1/Szig0CzeI1KbIBoWDI1orpkSUU+4Fvk7qJnxP9iLJLwiNCFKfNKA1KeXmP\\nIK6/95HmKNJ8MfTEkRcgIdTe4fx2ib2hHGiaIAD0r4FgWxfC2BWK/uTUp8HtIQre\\nDILGnF1laIcJbyP7asvc8iJ06Kk8C9PsH4v20fqoyNcei7v0IJG2m9AHVDnb0t6L\\nAa1yXEHQLSGHS9Y0mogLPW/tZnV69EHRI1dzvH/1gDVlBMwM1/A=\\n=hLDv\\n-----END PGP SIGNATURE-----\",\n \"payload\": \"tree 3d53c60def5d9f9ad79a534dd369f758763d9dc9\\nauthor owner 1563954332 +0300\\ncommitter owner 1563954332 +0300\\n\\ninitial commit\\n\"\n }\n },\n \"url\": \"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"html_url\": \"https://github.com/owner/repo/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"comments_url\": \"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad/comments\",\n \"author\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"committer\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"parents\": [\n\n ]\n }\n]\n", - "status": 200 - }, - { - "method": "GET", - "url": "/repos/owner/repo/commits?path=content/posts/2017-18-08---The-Birth-of-Movable-Type.md&sha=master", - "headers": { - "Server": "GitHub.com", - "Content-Type": "application/json; charset=utf-8", - "Status": "200 OK", - "X-RateLimit-Limit": "5000", - "Cache-Control": "private, max-age=60, s-maxage=60", - "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP", - "X-OAuth-Scopes": "delete_repo, repo", - "X-Accepted-OAuth-Scopes": "", - "X-GitHub-Media-Type": "github.v3; format=json", - "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", - "Access-Control-Allow-Origin": "*", - "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", - "X-Frame-Options": "deny", - "X-Content-Type-Options": "nosniff", - "X-XSS-Protection": "1; mode=block", - "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", - "Content-Security-Policy": "default-src 'none'", - "content-length": "4823" - }, - "response": "[\n {\n \"sha\": \"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"node_id\": \"MDY6Q29tbWl0MjU1MTAyMDQ2OjJiYzNmYTM5ZDhhZGI5ZTAwOGU1Mjc5Mzg1NDMzODM5OWZjNmU0YWQ=\",\n \"commit\": {\n \"author\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2019-07-24T07:45:32Z\"\n },\n \"committer\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2019-07-24T07:45:32Z\"\n },\n \"message\": \"initial commit\",\n \"tree\": {\n \"sha\": \"3d53c60def5d9f9ad79a534dd369f758763d9dc9\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/3d53c60def5d9f9ad79a534dd369f758763d9dc9\"\n },\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"comment_count\": 0,\n \"verification\": {\n \"verified\": true,\n \"reason\": \"valid\",\n \"signature\": \"-----BEGIN PGP SIGNATURE-----\\n\\niQIzBAABCgAdFiEE8DeG71n37ZpuxjiNA05FmC/LkwQFAl04DJwACgkQA05FmC/L\\nkwQ5kg//TB2c1HvsD/r7x3CgKmR+uaEFGrv9srfA4/i/dbDSAg3+kpPXfGg0FCUw\\nETlWDpZRhFvLZzoxy5w46P1cLvpbdEXK47LWpsFYWFtCFGKmvaY5dZ/ma1J3HF5R\\n7Yll5jz8BKrWOZ6bOswP7nNteAFYfLiZxJq4ONbhxOyRJA7bFmg6Ydo2Zc27Gg54\\n6umhONf9DxuzL0z0f8qtHiz47KJTRdFS+ZL/Mq3iCE11SGHvjK0cnPq0Z6TBtazt\\nqszoR0Frxes4MsjI82+ovCP+RtpqerWeN/ciYoLENsnUb8Xbp/qdhrLoMvuFExz2\\n0f0M7zVI1Z9d4cDTQlembVneSv5sSeNtnk2e7BXLwjUNFVxB67aslVUyL41V0BMu\\nUw8+j9pNhObpicJs9O1fIkL84mtCSMWIyuCwDpSMSj2b892laBOKu/E5D+YuaHi5\\nbAJJ1/Szig0CzeI1KbIBoWDI1orpkSUU+4Fvk7qJnxP9iLJLwiNCFKfNKA1KeXmP\\nIK6/95HmKNJ8MfTEkRcgIdTe4fx2ib2hHGiaIAD0r4FgWxfC2BWK/uTUp8HtIQre\\nDILGnF1laIcJbyP7asvc8iJ06Kk8C9PsH4v20fqoyNcei7v0IJG2m9AHVDnb0t6L\\nAa1yXEHQLSGHS9Y0mogLPW/tZnV69EHRI1dzvH/1gDVlBMwM1/A=\\n=hLDv\\n-----END PGP SIGNATURE-----\",\n \"payload\": \"tree 3d53c60def5d9f9ad79a534dd369f758763d9dc9\\nauthor owner 1563954332 +0300\\ncommitter owner 1563954332 +0300\\n\\ninitial commit\\n\"\n }\n },\n \"url\": \"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"html_url\": \"https://github.com/owner/repo/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"comments_url\": \"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad/comments\",\n \"author\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"committer\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"parents\": [\n\n ]\n }\n]\n", + "response": "[{\"sha\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"node_id\":\"MDY6Q29tbWl0Mjg2NzU3NjIxOjJiYzNmYTM5ZDhhZGI5ZTAwOGU1Mjc5Mzg1NDMzODM5OWZjNmU0YWQ=\",\"commit\":{\"author\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2019-07-24T07:45:32Z\"},\"committer\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2019-07-24T07:45:32Z\"},\"message\":\"initial commit\",\"tree\":{\"sha\":\"3d53c60def5d9f9ad79a534dd369f758763d9dc9\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/3d53c60def5d9f9ad79a534dd369f758763d9dc9\"},\"url\":\"https://api.github.com/repos/owner/repo/git/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\niQIzBAABCgAdFiEE8DeG71n37ZpuxjiNA05FmC/LkwQFAl04DJwACgkQA05FmC/L\\nkwQ5kg//TB2c1HvsD/r7x3CgKmR+uaEFGrv9srfA4/i/dbDSAg3+kpPXfGg0FCUw\\nETlWDpZRhFvLZzoxy5w46P1cLvpbdEXK47LWpsFYWFtCFGKmvaY5dZ/ma1J3HF5R\\n7Yll5jz8BKrWOZ6bOswP7nNteAFYfLiZxJq4ONbhxOyRJA7bFmg6Ydo2Zc27Gg54\\n6umhONf9DxuzL0z0f8qtHiz47KJTRdFS+ZL/Mq3iCE11SGHvjK0cnPq0Z6TBtazt\\nqszoR0Frxes4MsjI82+ovCP+RtpqerWeN/ciYoLENsnUb8Xbp/qdhrLoMvuFExz2\\n0f0M7zVI1Z9d4cDTQlembVneSv5sSeNtnk2e7BXLwjUNFVxB67aslVUyL41V0BMu\\nUw8+j9pNhObpicJs9O1fIkL84mtCSMWIyuCwDpSMSj2b892laBOKu/E5D+YuaHi5\\nbAJJ1/Szig0CzeI1KbIBoWDI1orpkSUU+4Fvk7qJnxP9iLJLwiNCFKfNKA1KeXmP\\nIK6/95HmKNJ8MfTEkRcgIdTe4fx2ib2hHGiaIAD0r4FgWxfC2BWK/uTUp8HtIQre\\nDILGnF1laIcJbyP7asvc8iJ06Kk8C9PsH4v20fqoyNcei7v0IJG2m9AHVDnb0t6L\\nAa1yXEHQLSGHS9Y0mogLPW/tZnV69EHRI1dzvH/1gDVlBMwM1/A=\\n=hLDv\\n-----END PGP SIGNATURE-----\",\"payload\":\"tree 3d53c60def5d9f9ad79a534dd369f758763d9dc9\\nauthor owner 1563954332 +0300\\ncommitter owner 1563954332 +0300\\n\\ninitial commit\\n\"}},\"url\":\"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"html_url\":\"https://github.com/owner/repo/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"comments_url\":\"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad/comments\",\"author\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"committer\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"parents\":[]}]", "status": 200 }, { "method": "GET", "url": "/repos/owner/repo/commits?path=content/posts/2017-19-08---Humane-Typography-in-the-Digital-Age.md&sha=master", "headers": { - "Server": "GitHub.com", "Content-Type": "application/json; charset=utf-8", + "Server": "GitHub.com", "Status": "200 OK", "X-RateLimit-Limit": "5000", "Cache-Control": "private, max-age=60, s-maxage=60", @@ -395,9 +395,9 @@ "X-XSS-Protection": "1; mode=block", "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", "Content-Security-Policy": "default-src 'none'", - "content-length": "4823" + "content-length": "4828" }, - "response": "[\n {\n \"sha\": \"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"node_id\": \"MDY6Q29tbWl0MjU1MTAyMDQ2OjJiYzNmYTM5ZDhhZGI5ZTAwOGU1Mjc5Mzg1NDMzODM5OWZjNmU0YWQ=\",\n \"commit\": {\n \"author\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2019-07-24T07:45:32Z\"\n },\n \"committer\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2019-07-24T07:45:32Z\"\n },\n \"message\": \"initial commit\",\n \"tree\": {\n \"sha\": \"3d53c60def5d9f9ad79a534dd369f758763d9dc9\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/3d53c60def5d9f9ad79a534dd369f758763d9dc9\"\n },\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"comment_count\": 0,\n \"verification\": {\n \"verified\": true,\n \"reason\": \"valid\",\n \"signature\": \"-----BEGIN PGP SIGNATURE-----\\n\\niQIzBAABCgAdFiEE8DeG71n37ZpuxjiNA05FmC/LkwQFAl04DJwACgkQA05FmC/L\\nkwQ5kg//TB2c1HvsD/r7x3CgKmR+uaEFGrv9srfA4/i/dbDSAg3+kpPXfGg0FCUw\\nETlWDpZRhFvLZzoxy5w46P1cLvpbdEXK47LWpsFYWFtCFGKmvaY5dZ/ma1J3HF5R\\n7Yll5jz8BKrWOZ6bOswP7nNteAFYfLiZxJq4ONbhxOyRJA7bFmg6Ydo2Zc27Gg54\\n6umhONf9DxuzL0z0f8qtHiz47KJTRdFS+ZL/Mq3iCE11SGHvjK0cnPq0Z6TBtazt\\nqszoR0Frxes4MsjI82+ovCP+RtpqerWeN/ciYoLENsnUb8Xbp/qdhrLoMvuFExz2\\n0f0M7zVI1Z9d4cDTQlembVneSv5sSeNtnk2e7BXLwjUNFVxB67aslVUyL41V0BMu\\nUw8+j9pNhObpicJs9O1fIkL84mtCSMWIyuCwDpSMSj2b892laBOKu/E5D+YuaHi5\\nbAJJ1/Szig0CzeI1KbIBoWDI1orpkSUU+4Fvk7qJnxP9iLJLwiNCFKfNKA1KeXmP\\nIK6/95HmKNJ8MfTEkRcgIdTe4fx2ib2hHGiaIAD0r4FgWxfC2BWK/uTUp8HtIQre\\nDILGnF1laIcJbyP7asvc8iJ06Kk8C9PsH4v20fqoyNcei7v0IJG2m9AHVDnb0t6L\\nAa1yXEHQLSGHS9Y0mogLPW/tZnV69EHRI1dzvH/1gDVlBMwM1/A=\\n=hLDv\\n-----END PGP SIGNATURE-----\",\n \"payload\": \"tree 3d53c60def5d9f9ad79a534dd369f758763d9dc9\\nauthor owner 1563954332 +0300\\ncommitter owner 1563954332 +0300\\n\\ninitial commit\\n\"\n }\n },\n \"url\": \"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"html_url\": \"https://github.com/owner/repo/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"comments_url\": \"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad/comments\",\n \"author\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"committer\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"parents\": [\n\n ]\n }\n]\n", + "response": "[{\"sha\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"node_id\":\"MDY6Q29tbWl0Mjg2NzU3NjIxOjJiYzNmYTM5ZDhhZGI5ZTAwOGU1Mjc5Mzg1NDMzODM5OWZjNmU0YWQ=\",\"commit\":{\"author\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2019-07-24T07:45:32Z\"},\"committer\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2019-07-24T07:45:32Z\"},\"message\":\"initial commit\",\"tree\":{\"sha\":\"3d53c60def5d9f9ad79a534dd369f758763d9dc9\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/3d53c60def5d9f9ad79a534dd369f758763d9dc9\"},\"url\":\"https://api.github.com/repos/owner/repo/git/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\niQIzBAABCgAdFiEE8DeG71n37ZpuxjiNA05FmC/LkwQFAl04DJwACgkQA05FmC/L\\nkwQ5kg//TB2c1HvsD/r7x3CgKmR+uaEFGrv9srfA4/i/dbDSAg3+kpPXfGg0FCUw\\nETlWDpZRhFvLZzoxy5w46P1cLvpbdEXK47LWpsFYWFtCFGKmvaY5dZ/ma1J3HF5R\\n7Yll5jz8BKrWOZ6bOswP7nNteAFYfLiZxJq4ONbhxOyRJA7bFmg6Ydo2Zc27Gg54\\n6umhONf9DxuzL0z0f8qtHiz47KJTRdFS+ZL/Mq3iCE11SGHvjK0cnPq0Z6TBtazt\\nqszoR0Frxes4MsjI82+ovCP+RtpqerWeN/ciYoLENsnUb8Xbp/qdhrLoMvuFExz2\\n0f0M7zVI1Z9d4cDTQlembVneSv5sSeNtnk2e7BXLwjUNFVxB67aslVUyL41V0BMu\\nUw8+j9pNhObpicJs9O1fIkL84mtCSMWIyuCwDpSMSj2b892laBOKu/E5D+YuaHi5\\nbAJJ1/Szig0CzeI1KbIBoWDI1orpkSUU+4Fvk7qJnxP9iLJLwiNCFKfNKA1KeXmP\\nIK6/95HmKNJ8MfTEkRcgIdTe4fx2ib2hHGiaIAD0r4FgWxfC2BWK/uTUp8HtIQre\\nDILGnF1laIcJbyP7asvc8iJ06Kk8C9PsH4v20fqoyNcei7v0IJG2m9AHVDnb0t6L\\nAa1yXEHQLSGHS9Y0mogLPW/tZnV69EHRI1dzvH/1gDVlBMwM1/A=\\n=hLDv\\n-----END PGP SIGNATURE-----\",\"payload\":\"tree 3d53c60def5d9f9ad79a534dd369f758763d9dc9\\nauthor owner 1563954332 +0300\\ncommitter owner 1563954332 +0300\\n\\ninitial commit\\n\"}},\"url\":\"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"html_url\":\"https://github.com/owner/repo/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"comments_url\":\"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad/comments\",\"author\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"committer\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"parents\":[]}]", "status": 200 }, { @@ -405,8 +405,8 @@ "method": "POST", "url": "/graphql", "headers": { - "Server": "GitHub.com", "Content-Type": "application/json; charset=utf-8", + "Server": "GitHub.com", "Status": "200 OK", "Cache-Control": "no-cache", "X-OAuth-Scopes": "delete_repo, repo", @@ -422,18 +422,18 @@ "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", "Content-Security-Policy": "default-src 'none'", "Vary": "Accept-Encoding, Accept, X-Requested-With", - "content-length": "482" + "content-length": "494" }, - "response": "{\"data\":{\"repository\":{\"id\":\"MDEwOlJlcG9zaXRvcnkyNTUxMDIwNDY=\",\"isFork\":false,\"__typename\":\"Repository\",\"branch\":{\"commit\":{\"id\":\"MDY6Q29tbWl0MjU1MTAyMDQ2OmIzM2EyZWRlY2U3MzZmNmYyMjhjN2VjMjhjMzg1YzU3ZDVmODkwYWY=\",\"sha\":\"b33a2edece736f6f228c7ec28c385c57d5f890af\",\"__typename\":\"Commit\"},\"id\":\"MDM6UmVmMjU1MTAyMDQ2Om1hc3Rlcg==\",\"name\":\"master\",\"prefix\":\"refs/heads/\",\"repository\":{\"id\":\"MDEwOlJlcG9zaXRvcnkyNTUxMDIwNDY=\",\"isFork\":false,\"__typename\":\"Repository\"},\"__typename\":\"Ref\"}}}}\n", + "response": "{\"data\":{\"repository\":{\"id\":\"MDEwOlJlcG9zaXRvcnkyODY3NTc2MjE=\",\"isFork\":false,\"__typename\":\"Repository\",\"branch\":{\"commit\":{\"id\":\"MDY6Q29tbWl0Mjg2NzU3NjIxOmNiMmU4ZTZlMTY1NjQ4OTIwZjY5NmZlNGM1MDExM2QxNWVlOTU5Mzc=\",\"sha\":\"cb2e8e6e165648920f696fe4c50113d15ee95937\",\"__typename\":\"Commit\"},\"id\":\"MDM6UmVmMjg2NzU3NjIxOnJlZnMvaGVhZHMvbWFzdGVy\",\"name\":\"master\",\"prefix\":\"refs/heads/\",\"repository\":{\"id\":\"MDEwOlJlcG9zaXRvcnkyODY3NTc2MjE=\",\"isFork\":false,\"__typename\":\"Repository\"},\"__typename\":\"Ref\"}}}}", "status": 200 }, { - "body": "{\"base_tree\":\"b33a2edece736f6f228c7ec28c385c57d5f890af\",\"tree\":[{\"path\":\"static/media/netlify.png\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"13692e6574cb4bf447aefcf7e0278e2f3fad6cf3\"}]}", + "body": "{\"base_tree\":\"cb2e8e6e165648920f696fe4c50113d15ee95937\",\"tree\":[{\"path\":\"static/media/netlify.png\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"13692e6574cb4bf447aefcf7e0278e2f3fad6cf3\"}]}", "method": "POST", "url": "/repos/owner/repo/git/trees", "headers": { "Content-Type": "application/json; charset=utf-8", - "Content-Length": "12230", + "Content-Length": "12269", "Server": "GitHub.com", "Status": "201 Created", "X-RateLimit-Limit": "5000", @@ -441,7 +441,7 @@ "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP", "X-OAuth-Scopes": "delete_repo, repo", "X-Accepted-OAuth-Scopes": "", - "Location": "https://api.github.com/repos/owner/repo/git/trees/6ae16633f927d065891673ddeec2740f9f134129", + "Location": "https://api.github.com/repos/owner/repo/git/trees/10a22c7823ff4c83a6df2456ff3b41b15edc49f8", "X-GitHub-Media-Type": "github.v3; format=json", "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", "Access-Control-Allow-Origin": "*", @@ -452,24 +452,24 @@ "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", "Content-Security-Policy": "default-src 'none'" }, - "response": "{\n \"sha\": \"6ae16633f927d065891673ddeec2740f9f134129\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/6ae16633f927d065891673ddeec2740f9f134129\",\n \"tree\": [\n {\n \"path\": \".circleci\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"2dfd51ca0c35b04f9a6b68bc264ad1457e8f29ba\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/2dfd51ca0c35b04f9a6b68bc264ad1457e8f29ba\"\n },\n {\n \"path\": \".eslintignore\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"80b4531b026d19f8fa589efd122e76199d23f967\",\n \"size\": 39,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/80b4531b026d19f8fa589efd122e76199d23f967\"\n },\n {\n \"path\": \".eslintrc.js\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"370684994aaed5b858da3a006f48cfa57e88fd27\",\n \"size\": 414,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/370684994aaed5b858da3a006f48cfa57e88fd27\"\n },\n {\n \"path\": \".flowconfig\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"14aa2ac4cc0e15223ad98630a6f1325fc81f8043\",\n \"size\": 283,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/14aa2ac4cc0e15223ad98630a6f1325fc81f8043\"\n },\n {\n \"path\": \".gitattributes\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"406a244d1522a3c809efab0c9ce46bbd86aa9c1d\",\n \"size\": 188,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/406a244d1522a3c809efab0c9ce46bbd86aa9c1d\"\n },\n {\n \"path\": \".github\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"4ebeece548b52b20af59622354530a6d33b50b43\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/4ebeece548b52b20af59622354530a6d33b50b43\"\n },\n {\n \"path\": \".gitignore\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"c071ba35b0e49899bab6d610a68eef667dbbf157\",\n \"size\": 169,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/c071ba35b0e49899bab6d610a68eef667dbbf157\"\n },\n {\n \"path\": \".prettierignore\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"393f050e123d998cf8c8b362ff95cc8ac4d250e5\",\n \"size\": 45,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/393f050e123d998cf8c8b362ff95cc8ac4d250e5\"\n },\n {\n \"path\": \".prettierrc\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"e52ad05bb13b084d7949dd76e1b2517455162150\",\n \"size\": 223,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/e52ad05bb13b084d7949dd76e1b2517455162150\"\n },\n {\n \"path\": \".stylelintrc.json\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"4b4c9698d10d756f5faa025659b86375428ed0a7\",\n \"size\": 718,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/4b4c9698d10d756f5faa025659b86375428ed0a7\"\n },\n {\n \"path\": \".vscode\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"286e97ec0113ea8242b41ac222e2c3e8077e6f1e\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/286e97ec0113ea8242b41ac222e2c3e8077e6f1e\"\n },\n {\n \"path\": \"CHANGELOG.md\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"070a5d4f0eacd2dc0be81ae8996f8982de43046e\",\n \"size\": 2113,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/070a5d4f0eacd2dc0be81ae8996f8982de43046e\"\n },\n {\n \"path\": \"CODE_OF_CONDUCT.md\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"92bc7565ff0ee145a0041b5179a820f14f39ab22\",\n \"size\": 3355,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/92bc7565ff0ee145a0041b5179a820f14f39ab22\"\n },\n {\n \"path\": \"CONTRIBUTING.md\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"8552aa241254a61258e1ff9666ab36f32fb1e3b9\",\n \"size\": 3548,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/8552aa241254a61258e1ff9666ab36f32fb1e3b9\"\n },\n {\n \"path\": \"LICENSE\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"42d85938357b49977c126ca03b199129082d4fb8\",\n \"size\": 1091,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/42d85938357b49977c126ca03b199129082d4fb8\"\n },\n {\n \"path\": \"README.md\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"19df50a78654c8d757ca7f38447aa3d09c7abcce\",\n \"size\": 3698,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/19df50a78654c8d757ca7f38447aa3d09c7abcce\"\n },\n {\n \"path\": \"backend\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"b9f1cfbf4d901fe13c3af4e0d8f46bbe5a6addd6\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/b9f1cfbf4d901fe13c3af4e0d8f46bbe5a6addd6\"\n },\n {\n \"path\": \"config.js\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"58afd573bbb69fcca000efd0f5d90b93c93a98dd\",\n \"size\": 853,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/58afd573bbb69fcca000efd0f5d90b93c93a98dd\"\n },\n {\n \"path\": \"content\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"0294ef106c58743907a5c855da1eb0f87b0b6dfc\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/0294ef106c58743907a5c855da1eb0f87b0b6dfc\"\n },\n {\n \"path\": \"flow-typed\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"86c32fd6c3118be5e0dbbb231a834447357236c6\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/86c32fd6c3118be5e0dbbb231a834447357236c6\"\n },\n {\n \"path\": \"flow\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"0af45ad00d155c8d8c7407d913ff85278244c9ce\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/0af45ad00d155c8d8c7407d913ff85278244c9ce\"\n },\n {\n \"path\": \"gatsby-browser.js\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"9bd2c9dce175f04980e91cd9dc295a299e3cdb80\",\n \"size\": 90,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/9bd2c9dce175f04980e91cd9dc295a299e3cdb80\"\n },\n {\n \"path\": \"gatsby-config.js\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"3929038f9ab6451b2b256dfba5830676e6eecbee\",\n \"size\": 7256,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/3929038f9ab6451b2b256dfba5830676e6eecbee\"\n },\n {\n \"path\": \"gatsby-node.js\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"14a207883c2093d2cc071bc5a464e165bcc1fead\",\n \"size\": 409,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/14a207883c2093d2cc071bc5a464e165bcc1fead\"\n },\n {\n \"path\": \"gatsby\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"4f23c06cd1740bf78304d2c0b29bf6bfdf427981\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/4f23c06cd1740bf78304d2c0b29bf6bfdf427981\"\n },\n {\n \"path\": \"jest\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"5a6bc7be680ba053df0f8ffdc2aaa80e62c3e819\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/5a6bc7be680ba053df0f8ffdc2aaa80e62c3e819\"\n },\n {\n \"path\": \"netlify-functions\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"a96c1f09300fa4f9e4c786d69bcbe51eaff7f14a\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/a96c1f09300fa4f9e4c786d69bcbe51eaff7f14a\"\n },\n {\n \"path\": \"netlify.toml\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"2a9e36ada28c535fc074b408daa2a0cb97ecf47c\",\n \"size\": 223,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/2a9e36ada28c535fc074b408daa2a0cb97ecf47c\"\n },\n {\n \"path\": \"package.json\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"3a994b3aefb183931a30f4d75836d6f083aaaabb\",\n \"size\": 6947,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/3a994b3aefb183931a30f4d75836d6f083aaaabb\"\n },\n {\n \"path\": \"postcss-config.js\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"d216501e9b351a72e00ba0b7459a6500e27e7da2\",\n \"size\": 703,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/d216501e9b351a72e00ba0b7459a6500e27e7da2\"\n },\n {\n \"path\": \"renovate.json\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"9d78c55fe6566ea98907ef63d56a94d7b3cbe527\",\n \"size\": 536,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/9d78c55fe6566ea98907ef63d56a94d7b3cbe527\"\n },\n {\n \"path\": \"serverless-scripts\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"ee3701f2fbfc7196ba340f6481d1387d20527898\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/ee3701f2fbfc7196ba340f6481d1387d20527898\"\n },\n {\n \"path\": \"serverless-single-page-app-plugin\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"08763fcfba643a06a452398517019bea4a5850ba\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/08763fcfba643a06a452398517019bea4a5850ba\"\n },\n {\n \"path\": \"serverless.yml\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"20b22c5fad229f35d029bf6614d333d82fe8a987\",\n \"size\": 7803,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/20b22c5fad229f35d029bf6614d333d82fe8a987\"\n },\n {\n \"path\": \"src\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"8cdb35a88232c0f32f12f130c92c7cc55f97f471\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/8cdb35a88232c0f32f12f130c92c7cc55f97f471\"\n },\n {\n \"path\": \"static\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"5bd186c5d21f3a1d3390fe89416f9ae072b39b7b\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/5bd186c5d21f3a1d3390fe89416f9ae072b39b7b\"\n },\n {\n \"path\": \"utils\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"a592549c9f74db40b51efefcda2fd76810405f27\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/a592549c9f74db40b51efefcda2fd76810405f27\"\n },\n {\n \"path\": \"yarn.lock\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"0849d700e667c3114f154c31b3e70a080fe1629b\",\n \"size\": 859666,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/0849d700e667c3114f154c31b3e70a080fe1629b\"\n }\n ],\n \"truncated\": false\n}\n", + "response": "{\"sha\":\"10a22c7823ff4c83a6df2456ff3b41b15edc49f8\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/10a22c7823ff4c83a6df2456ff3b41b15edc49f8\",\"tree\":[{\"path\":\".circleci\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"2dfd51ca0c35b04f9a6b68bc264ad1457e8f29ba\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/2dfd51ca0c35b04f9a6b68bc264ad1457e8f29ba\"},{\"path\":\".eslintignore\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"80b4531b026d19f8fa589efd122e76199d23f967\",\"size\":39,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/80b4531b026d19f8fa589efd122e76199d23f967\"},{\"path\":\".eslintrc.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"370684994aaed5b858da3a006f48cfa57e88fd27\",\"size\":414,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/370684994aaed5b858da3a006f48cfa57e88fd27\"},{\"path\":\".flowconfig\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"14aa2ac4cc0e15223ad98630a6f1325fc81f8043\",\"size\":283,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/14aa2ac4cc0e15223ad98630a6f1325fc81f8043\"},{\"path\":\".gitattributes\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"406a244d1522a3c809efab0c9ce46bbd86aa9c1d\",\"size\":188,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/406a244d1522a3c809efab0c9ce46bbd86aa9c1d\"},{\"path\":\".github\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"4ebeece548b52b20af59622354530a6d33b50b43\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/4ebeece548b52b20af59622354530a6d33b50b43\"},{\"path\":\".gitignore\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"c071ba35b0e49899bab6d610a68eef667dbbf157\",\"size\":169,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/c071ba35b0e49899bab6d610a68eef667dbbf157\"},{\"path\":\".prettierignore\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"393f050e123d998cf8c8b362ff95cc8ac4d250e5\",\"size\":45,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/393f050e123d998cf8c8b362ff95cc8ac4d250e5\"},{\"path\":\".prettierrc\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"e52ad05bb13b084d7949dd76e1b2517455162150\",\"size\":223,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/e52ad05bb13b084d7949dd76e1b2517455162150\"},{\"path\":\".stylelintrc.json\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"4b4c9698d10d756f5faa025659b86375428ed0a7\",\"size\":718,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/4b4c9698d10d756f5faa025659b86375428ed0a7\"},{\"path\":\".vscode\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"286e97ec0113ea8242b41ac222e2c3e8077e6f1e\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/286e97ec0113ea8242b41ac222e2c3e8077e6f1e\"},{\"path\":\"CHANGELOG.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"070a5d4f0eacd2dc0be81ae8996f8982de43046e\",\"size\":2113,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/070a5d4f0eacd2dc0be81ae8996f8982de43046e\"},{\"path\":\"CODE_OF_CONDUCT.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"92bc7565ff0ee145a0041b5179a820f14f39ab22\",\"size\":3355,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/92bc7565ff0ee145a0041b5179a820f14f39ab22\"},{\"path\":\"CONTRIBUTING.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"8552aa241254a61258e1ff9666ab36f32fb1e3b9\",\"size\":3548,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/8552aa241254a61258e1ff9666ab36f32fb1e3b9\"},{\"path\":\"LICENSE\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"42d85938357b49977c126ca03b199129082d4fb8\",\"size\":1091,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/42d85938357b49977c126ca03b199129082d4fb8\"},{\"path\":\"README.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"19df50a78654c8d757ca7f38447aa3d09c7abcce\",\"size\":3698,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/19df50a78654c8d757ca7f38447aa3d09c7abcce\"},{\"path\":\"backend\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"b9f1cfbf4d901fe13c3af4e0d8f46bbe5a6addd6\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/b9f1cfbf4d901fe13c3af4e0d8f46bbe5a6addd6\"},{\"path\":\"config.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"58afd573bbb69fcca000efd0f5d90b93c93a98dd\",\"size\":853,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/58afd573bbb69fcca000efd0f5d90b93c93a98dd\"},{\"path\":\"content\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"0294ef106c58743907a5c855da1eb0f87b0b6dfc\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/0294ef106c58743907a5c855da1eb0f87b0b6dfc\"},{\"path\":\"flow-typed\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"86c32fd6c3118be5e0dbbb231a834447357236c6\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/86c32fd6c3118be5e0dbbb231a834447357236c6\"},{\"path\":\"flow\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"0af45ad00d155c8d8c7407d913ff85278244c9ce\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/0af45ad00d155c8d8c7407d913ff85278244c9ce\"},{\"path\":\"gatsby-browser.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"9bd2c9dce175f04980e91cd9dc295a299e3cdb80\",\"size\":90,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/9bd2c9dce175f04980e91cd9dc295a299e3cdb80\"},{\"path\":\"gatsby-config.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"3929038f9ab6451b2b256dfba5830676e6eecbee\",\"size\":7256,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/3929038f9ab6451b2b256dfba5830676e6eecbee\"},{\"path\":\"gatsby-node.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"14a207883c2093d2cc071bc5a464e165bcc1fead\",\"size\":409,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/14a207883c2093d2cc071bc5a464e165bcc1fead\"},{\"path\":\"gatsby\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"4f23c06cd1740bf78304d2c0b29bf6bfdf427981\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/4f23c06cd1740bf78304d2c0b29bf6bfdf427981\"},{\"path\":\"jest\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"5a6bc7be680ba053df0f8ffdc2aaa80e62c3e819\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/5a6bc7be680ba053df0f8ffdc2aaa80e62c3e819\"},{\"path\":\"netlify-functions\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"a96c1f09300fa4f9e4c786d69bcbe51eaff7f14a\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/a96c1f09300fa4f9e4c786d69bcbe51eaff7f14a\"},{\"path\":\"netlify.toml\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"2a9e36ada28c535fc074b408daa2a0cb97ecf47c\",\"size\":223,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/2a9e36ada28c535fc074b408daa2a0cb97ecf47c\"},{\"path\":\"package.json\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"d8b6e6e922c8d166290f99228090139a3358bfd3\",\"size\":6951,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/d8b6e6e922c8d166290f99228090139a3358bfd3\"},{\"path\":\"postcss-config.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"d216501e9b351a72e00ba0b7459a6500e27e7da2\",\"size\":703,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/d216501e9b351a72e00ba0b7459a6500e27e7da2\"},{\"path\":\"renovate.json\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"9d78c55fe6566ea98907ef63d56a94d7b3cbe527\",\"size\":536,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/9d78c55fe6566ea98907ef63d56a94d7b3cbe527\"},{\"path\":\"serverless-scripts\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"ee3701f2fbfc7196ba340f6481d1387d20527898\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/ee3701f2fbfc7196ba340f6481d1387d20527898\"},{\"path\":\"serverless-single-page-app-plugin\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"08763fcfba643a06a452398517019bea4a5850ba\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/08763fcfba643a06a452398517019bea4a5850ba\"},{\"path\":\"serverless.yml\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"20b22c5fad229f35d029bf6614d333d82fe8a987\",\"size\":7803,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/20b22c5fad229f35d029bf6614d333d82fe8a987\"},{\"path\":\"src\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"8cdb35a88232c0f32f12f130c92c7cc55f97f471\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/8cdb35a88232c0f32f12f130c92c7cc55f97f471\"},{\"path\":\"static\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"5bd186c5d21f3a1d3390fe89416f9ae072b39b7b\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/5bd186c5d21f3a1d3390fe89416f9ae072b39b7b\"},{\"path\":\"utils\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"a592549c9f74db40b51efefcda2fd76810405f27\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/a592549c9f74db40b51efefcda2fd76810405f27\"},{\"path\":\"yarn.lock\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"eff9f6e3c4ee2cb7bd2685c8f93d6d68af8aad37\",\"size\":923955,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/eff9f6e3c4ee2cb7bd2685c8f93d6d68af8aad37\"}],\"truncated\":false}", "status": 201 }, { - "body": "{\"message\":\"Upload “static/media/netlify.png”\",\"tree\":\"6ae16633f927d065891673ddeec2740f9f134129\",\"parents\":[\"b33a2edece736f6f228c7ec28c385c57d5f890af\"]}", + "body": "{\"message\":\"Upload “static/media/netlify.png”\",\"tree\":\"10a22c7823ff4c83a6df2456ff3b41b15edc49f8\",\"parents\":[\"cb2e8e6e165648920f696fe4c50113d15ee95937\"]}", "method": "POST", "url": "/repos/owner/repo/git/commits", "headers": { - "Server": "GitHub.com", "Content-Type": "application/json; charset=utf-8", - "Content-Length": "1521", + "Content-Length": "1526", + "Server": "GitHub.com", "Status": "201 Created", "X-RateLimit-Limit": "5000", "Cache-Control": "private, max-age=60, s-maxage=60", "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP", "X-OAuth-Scopes": "delete_repo, repo", "X-Accepted-OAuth-Scopes": "", - "Location": "https://api.github.com/repos/owner/repo/git/commits/9c3babb241f931add6d1ccd9d6e5a89adb6f862c", + "Location": "https://api.github.com/repos/owner/repo/git/commits/fca1caeb587569fa2847d8b853834af3feb8d830", "X-GitHub-Media-Type": "github.v3; format=json", "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", "Access-Control-Allow-Origin": "*", @@ -480,7 +480,7 @@ "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", "Content-Security-Policy": "default-src 'none'" }, - "response": "{\n \"sha\": \"9c3babb241f931add6d1ccd9d6e5a89adb6f862c\",\n \"node_id\": \"MDY6Q29tbWl0MjU1MTAyMDQ2OjljM2JhYmIyNDFmOTMxYWRkNmQxY2NkOWQ2ZTVhODlhZGI2Zjg2MmM=\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/9c3babb241f931add6d1ccd9d6e5a89adb6f862c\",\n \"html_url\": \"https://github.com/owner/repo/commit/9c3babb241f931add6d1ccd9d6e5a89adb6f862c\",\n \"author\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2020-04-12T14:39:22Z\"\n },\n \"committer\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2020-04-12T14:39:22Z\"\n },\n \"tree\": {\n \"sha\": \"6ae16633f927d065891673ddeec2740f9f134129\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/6ae16633f927d065891673ddeec2740f9f134129\"\n },\n \"message\": \"Upload “static/media/netlify.png”\",\n \"parents\": [\n {\n \"sha\": \"b33a2edece736f6f228c7ec28c385c57d5f890af\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/b33a2edece736f6f228c7ec28c385c57d5f890af\",\n \"html_url\": \"https://github.com/owner/repo/commit/b33a2edece736f6f228c7ec28c385c57d5f890af\"\n }\n ],\n \"verification\": {\n \"verified\": false,\n \"reason\": \"unsigned\",\n \"signature\": null,\n \"payload\": null\n }\n}\n", + "response": "{\"sha\":\"fca1caeb587569fa2847d8b853834af3feb8d830\",\"node_id\":\"MDY6Q29tbWl0Mjg2NzU3NjIxOmZjYTFjYWViNTg3NTY5ZmEyODQ3ZDhiODUzODM0YWYzZmViOGQ4MzA=\",\"url\":\"https://api.github.com/repos/owner/repo/git/commits/fca1caeb587569fa2847d8b853834af3feb8d830\",\"html_url\":\"https://github.com/owner/repo/commit/fca1caeb587569fa2847d8b853834af3feb8d830\",\"author\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2020-08-11T13:53:10Z\"},\"committer\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2020-08-11T13:53:10Z\"},\"tree\":{\"sha\":\"10a22c7823ff4c83a6df2456ff3b41b15edc49f8\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/10a22c7823ff4c83a6df2456ff3b41b15edc49f8\"},\"message\":\"Upload “static/media/netlify.png”\",\"parents\":[{\"sha\":\"cb2e8e6e165648920f696fe4c50113d15ee95937\",\"url\":\"https://api.github.com/repos/owner/repo/git/commits/cb2e8e6e165648920f696fe4c50113d15ee95937\",\"html_url\":\"https://github.com/owner/repo/commit/cb2e8e6e165648920f696fe4c50113d15ee95937\"}],\"verification\":{\"verified\":false,\"reason\":\"unsigned\",\"signature\":null,\"payload\":null}}", "status": 201 }, { @@ -488,8 +488,8 @@ "method": "POST", "url": "/graphql", "headers": { - "Server": "GitHub.com", "Content-Type": "application/json; charset=utf-8", + "Server": "GitHub.com", "Status": "200 OK", "Cache-Control": "no-cache", "X-OAuth-Scopes": "delete_repo, repo", @@ -505,40 +505,13 @@ "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", "Content-Security-Policy": "default-src 'none'", "Vary": "Accept-Encoding, Accept, X-Requested-With", - "content-length": "482" + "content-length": "494" }, - "response": "{\"data\":{\"repository\":{\"id\":\"MDEwOlJlcG9zaXRvcnkyNTUxMDIwNDY=\",\"isFork\":false,\"__typename\":\"Repository\",\"branch\":{\"commit\":{\"id\":\"MDY6Q29tbWl0MjU1MTAyMDQ2OmIzM2EyZWRlY2U3MzZmNmYyMjhjN2VjMjhjMzg1YzU3ZDVmODkwYWY=\",\"sha\":\"b33a2edece736f6f228c7ec28c385c57d5f890af\",\"__typename\":\"Commit\"},\"id\":\"MDM6UmVmMjU1MTAyMDQ2Om1hc3Rlcg==\",\"name\":\"master\",\"prefix\":\"refs/heads/\",\"repository\":{\"id\":\"MDEwOlJlcG9zaXRvcnkyNTUxMDIwNDY=\",\"isFork\":false,\"__typename\":\"Repository\"},\"__typename\":\"Ref\"}}}}\n", + "response": "{\"data\":{\"repository\":{\"id\":\"MDEwOlJlcG9zaXRvcnkyODY3NTc2MjE=\",\"isFork\":false,\"__typename\":\"Repository\",\"branch\":{\"commit\":{\"id\":\"MDY6Q29tbWl0Mjg2NzU3NjIxOmNiMmU4ZTZlMTY1NjQ4OTIwZjY5NmZlNGM1MDExM2QxNWVlOTU5Mzc=\",\"sha\":\"cb2e8e6e165648920f696fe4c50113d15ee95937\",\"__typename\":\"Commit\"},\"id\":\"MDM6UmVmMjg2NzU3NjIxOnJlZnMvaGVhZHMvbWFzdGVy\",\"name\":\"master\",\"prefix\":\"refs/heads/\",\"repository\":{\"id\":\"MDEwOlJlcG9zaXRvcnkyODY3NTc2MjE=\",\"isFork\":false,\"__typename\":\"Repository\"},\"__typename\":\"Ref\"}}}}", "status": 200 }, { - "body": "{\"operationName\":\"updateRef\",\"variables\":{\"input\":{\"oid\":\"9c3babb241f931add6d1ccd9d6e5a89adb6f862c\",\"refId\":\"MDM6UmVmMjU1MTAyMDQ2Om1hc3Rlcg==\",\"force\":false}},\"query\":\"mutation updateRef($input: UpdateRefInput!) {\\n updateRef(input: $input) {\\n branch: ref {\\n ...BranchParts\\n __typename\\n }\\n __typename\\n }\\n}\\n\\nfragment BranchParts on Ref {\\n commit: target {\\n ...ObjectParts\\n __typename\\n }\\n id\\n name\\n prefix\\n repository {\\n ...RepositoryParts\\n __typename\\n }\\n __typename\\n}\\n\\nfragment ObjectParts on GitObject {\\n id\\n sha: oid\\n __typename\\n}\\n\\nfragment RepositoryParts on Repository {\\n id\\n isFork\\n __typename\\n}\\n\"}", - "method": "POST", - "url": "/graphql", - "headers": { - "Server": "GitHub.com", - "Content-Type": "application/json; charset=utf-8", - "Status": "200 OK", - "Cache-Control": "no-cache", - "X-OAuth-Scopes": "delete_repo, repo", - "X-Accepted-OAuth-Scopes": "repo", - "X-GitHub-Media-Type": "github.v4; format=json", - "X-RateLimit-Limit": "5000", - "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", - "Access-Control-Allow-Origin": "*", - "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", - "X-Frame-Options": "deny", - "X-Content-Type-Options": "nosniff", - "X-XSS-Protection": "1; mode=block", - "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", - "Content-Security-Policy": "default-src 'none'", - "Vary": "Accept-Encoding, Accept, X-Requested-With", - "content-length": "432" - }, - "response": "{\"data\":{\"updateRef\":{\"branch\":{\"commit\":{\"id\":\"MDY6Q29tbWl0MjU1MTAyMDQ2OjljM2JhYmIyNDFmOTMxYWRkNmQxY2NkOWQ2ZTVhODlhZGI2Zjg2MmM=\",\"sha\":\"9c3babb241f931add6d1ccd9d6e5a89adb6f862c\",\"__typename\":\"Commit\"},\"id\":\"MDM6UmVmMjU1MTAyMDQ2Om1hc3Rlcg==\",\"name\":\"master\",\"prefix\":\"refs/heads/\",\"repository\":{\"id\":\"MDEwOlJlcG9zaXRvcnkyNTUxMDIwNDY=\",\"isFork\":false,\"__typename\":\"Repository\"},\"__typename\":\"Ref\"},\"__typename\":\"UpdateRefPayload\"}}}\n", - "status": 200 - }, - { - "body": "{\"operationName\":\"fileSha\",\"variables\":{\"owner\":\"owner\",\"name\":\"repo\",\"expression\":\"master:static/media/netlify.png\"},\"query\":\"query fileSha($owner: String!, $name: String!, $expression: String!) {\\n repository(owner: $owner, name: $name) {\\n ...RepositoryParts\\n file: object(expression: $expression) {\\n ...ObjectParts\\n __typename\\n }\\n __typename\\n }\\n}\\n\\nfragment RepositoryParts on Repository {\\n id\\n isFork\\n __typename\\n}\\n\\nfragment ObjectParts on GitObject {\\n id\\n sha: oid\\n __typename\\n}\\n\"}", + "body": "{\"operationName\":\"updateRef\",\"variables\":{\"input\":{\"oid\":\"fca1caeb587569fa2847d8b853834af3feb8d830\",\"refId\":\"MDM6UmVmMjg2NzU3NjIxOnJlZnMvaGVhZHMvbWFzdGVy\",\"force\":false}},\"query\":\"mutation updateRef($input: UpdateRefInput!) {\\n updateRef(input: $input) {\\n branch: ref {\\n ...BranchParts\\n __typename\\n }\\n __typename\\n }\\n}\\n\\nfragment BranchParts on Ref {\\n commit: target {\\n ...ObjectParts\\n __typename\\n }\\n id\\n name\\n prefix\\n repository {\\n ...RepositoryParts\\n __typename\\n }\\n __typename\\n}\\n\\nfragment ObjectParts on GitObject {\\n id\\n sha: oid\\n __typename\\n}\\n\\nfragment RepositoryParts on Repository {\\n id\\n isFork\\n __typename\\n}\\n\"}", "method": "POST", "url": "/graphql", "headers": { @@ -559,23 +532,53 @@ "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", "Content-Security-Policy": "default-src 'none'", "Vary": "Accept-Encoding, Accept, X-Requested-With", - "content-length": "269" + "content-length": "444" }, - "response": "{\"data\":{\"repository\":{\"id\":\"MDEwOlJlcG9zaXRvcnkyNTUxMDIwNDY=\",\"isFork\":false,\"__typename\":\"Repository\",\"file\":{\"id\":\"MDQ6QmxvYjI1NTEwMjA0NjoxMzY5MmU2NTc0Y2I0YmY0NDdhZWZjZjdlMDI3OGUyZjNmYWQ2Y2Yz\",\"sha\":\"13692e6574cb4bf447aefcf7e0278e2f3fad6cf3\",\"__typename\":\"Blob\"}}}}\n", + "response": "{\"data\":{\"updateRef\":{\"branch\":{\"commit\":{\"id\":\"MDY6Q29tbWl0Mjg2NzU3NjIxOmZjYTFjYWViNTg3NTY5ZmEyODQ3ZDhiODUzODM0YWYzZmViOGQ4MzA=\",\"sha\":\"fca1caeb587569fa2847d8b853834af3feb8d830\",\"__typename\":\"Commit\"},\"id\":\"MDM6UmVmMjg2NzU3NjIxOnJlZnMvaGVhZHMvbWFzdGVy\",\"name\":\"master\",\"prefix\":\"refs/heads/\",\"repository\":{\"id\":\"MDEwOlJlcG9zaXRvcnkyODY3NTc2MjE=\",\"isFork\":false,\"__typename\":\"Repository\"},\"__typename\":\"Ref\"},\"__typename\":\"UpdateRefPayload\"}}}", "status": 200 }, { - "method": "DELETE", - "url": "/repos/owner/repo/contents/static/media/netlify.png?sha=13692e6574cb4bf447aefcf7e0278e2f3fad6cf3&message=Delete “static/media/netlify.png”&branch=master", + "body": "{\"operationName\":\"branch\",\"variables\":{\"owner\":\"owner\",\"name\":\"repo\",\"qualifiedName\":\"refs/heads/master\"},\"query\":\"query branch($owner: String!, $name: String!, $qualifiedName: String!) {\\n repository(owner: $owner, name: $name) {\\n ...RepositoryParts\\n branch: ref(qualifiedName: $qualifiedName) {\\n ...BranchParts\\n __typename\\n }\\n __typename\\n }\\n}\\n\\nfragment RepositoryParts on Repository {\\n id\\n isFork\\n __typename\\n}\\n\\nfragment BranchParts on Ref {\\n commit: target {\\n ...ObjectParts\\n __typename\\n }\\n id\\n name\\n prefix\\n repository {\\n ...RepositoryParts\\n __typename\\n }\\n __typename\\n}\\n\\nfragment ObjectParts on GitObject {\\n id\\n sha: oid\\n __typename\\n}\\n\"}", + "method": "POST", + "url": "/graphql", "headers": { - "Server": "GitHub.com", "Content-Type": "application/json; charset=utf-8", + "Server": "GitHub.com", "Status": "200 OK", + "Cache-Control": "no-cache", + "X-OAuth-Scopes": "delete_repo, repo", + "X-Accepted-OAuth-Scopes": "repo", + "X-GitHub-Media-Type": "github.v4; format=json", + "X-RateLimit-Limit": "5000", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "1; mode=block", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "Vary": "Accept-Encoding, Accept, X-Requested-With", + "content-length": "494" + }, + "response": "{\"data\":{\"repository\":{\"id\":\"MDEwOlJlcG9zaXRvcnkyODY3NTc2MjE=\",\"isFork\":false,\"__typename\":\"Repository\",\"branch\":{\"commit\":{\"id\":\"MDY6Q29tbWl0Mjg2NzU3NjIxOmZjYTFjYWViNTg3NTY5ZmEyODQ3ZDhiODUzODM0YWYzZmViOGQ4MzA=\",\"sha\":\"fca1caeb587569fa2847d8b853834af3feb8d830\",\"__typename\":\"Commit\"},\"id\":\"MDM6UmVmMjg2NzU3NjIxOnJlZnMvaGVhZHMvbWFzdGVy\",\"name\":\"master\",\"prefix\":\"refs/heads/\",\"repository\":{\"id\":\"MDEwOlJlcG9zaXRvcnkyODY3NTc2MjE=\",\"isFork\":false,\"__typename\":\"Repository\"},\"__typename\":\"Ref\"}}}}", + "status": 200 + }, + { + "body": "{\"base_tree\":\"fca1caeb587569fa2847d8b853834af3feb8d830\",\"tree\":[{\"path\":\"static/media/netlify.png\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":null}]}", + "method": "POST", + "url": "/repos/owner/repo/git/trees", + "headers": { + "Content-Type": "application/json; charset=utf-8", + "Content-Length": "12269", + "Server": "GitHub.com", + "Status": "201 Created", "X-RateLimit-Limit": "5000", "Cache-Control": "private, max-age=60, s-maxage=60", "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP", "X-OAuth-Scopes": "delete_repo, repo", "X-Accepted-OAuth-Scopes": "", + "Location": "https://api.github.com/repos/owner/repo/git/trees/6dd5ba49336e5ff268561aa9d3ffad2d9496df0b", "X-GitHub-Media-Type": "github.v3; format=json", "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", "Access-Control-Allow-Origin": "*", @@ -584,10 +587,64 @@ "X-Content-Type-Options": "nosniff", "X-XSS-Protection": "1; mode=block", "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", - "Content-Security-Policy": "default-src 'none'", - "content-length": "1622" + "Content-Security-Policy": "default-src 'none'" }, - "response": "{\n \"content\": null,\n \"commit\": {\n \"sha\": \"5fa9b0a66e59fa00faf2c1363a4dd5d2c7a7640f\",\n \"node_id\": \"MDY6Q29tbWl0MjU1MTAyMDQ2OjVmYTliMGE2NmU1OWZhMDBmYWYyYzEzNjNhNGRkNWQyYzdhNzY0MGY=\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/5fa9b0a66e59fa00faf2c1363a4dd5d2c7a7640f\",\n \"html_url\": \"https://github.com/owner/repo/commit/5fa9b0a66e59fa00faf2c1363a4dd5d2c7a7640f\",\n \"author\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2020-04-12T14:39:27Z\"\n },\n \"committer\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2020-04-12T14:39:27Z\"\n },\n \"tree\": {\n \"sha\": \"248f8dc1745500d3f9fadea5d19e128333ae66f9\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/248f8dc1745500d3f9fadea5d19e128333ae66f9\"\n },\n \"message\": \"Delete “static/media/netlify.png”\",\n \"parents\": [\n {\n \"sha\": \"9c3babb241f931add6d1ccd9d6e5a89adb6f862c\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/9c3babb241f931add6d1ccd9d6e5a89adb6f862c\",\n \"html_url\": \"https://github.com/owner/repo/commit/9c3babb241f931add6d1ccd9d6e5a89adb6f862c\"\n }\n ],\n \"verification\": {\n \"verified\": false,\n \"reason\": \"unsigned\",\n \"signature\": null,\n \"payload\": null\n }\n }\n}\n", + "response": "{\"sha\":\"6dd5ba49336e5ff268561aa9d3ffad2d9496df0b\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/6dd5ba49336e5ff268561aa9d3ffad2d9496df0b\",\"tree\":[{\"path\":\".circleci\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"2dfd51ca0c35b04f9a6b68bc264ad1457e8f29ba\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/2dfd51ca0c35b04f9a6b68bc264ad1457e8f29ba\"},{\"path\":\".eslintignore\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"80b4531b026d19f8fa589efd122e76199d23f967\",\"size\":39,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/80b4531b026d19f8fa589efd122e76199d23f967\"},{\"path\":\".eslintrc.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"370684994aaed5b858da3a006f48cfa57e88fd27\",\"size\":414,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/370684994aaed5b858da3a006f48cfa57e88fd27\"},{\"path\":\".flowconfig\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"14aa2ac4cc0e15223ad98630a6f1325fc81f8043\",\"size\":283,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/14aa2ac4cc0e15223ad98630a6f1325fc81f8043\"},{\"path\":\".gitattributes\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"406a244d1522a3c809efab0c9ce46bbd86aa9c1d\",\"size\":188,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/406a244d1522a3c809efab0c9ce46bbd86aa9c1d\"},{\"path\":\".github\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"4ebeece548b52b20af59622354530a6d33b50b43\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/4ebeece548b52b20af59622354530a6d33b50b43\"},{\"path\":\".gitignore\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"c071ba35b0e49899bab6d610a68eef667dbbf157\",\"size\":169,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/c071ba35b0e49899bab6d610a68eef667dbbf157\"},{\"path\":\".prettierignore\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"393f050e123d998cf8c8b362ff95cc8ac4d250e5\",\"size\":45,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/393f050e123d998cf8c8b362ff95cc8ac4d250e5\"},{\"path\":\".prettierrc\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"e52ad05bb13b084d7949dd76e1b2517455162150\",\"size\":223,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/e52ad05bb13b084d7949dd76e1b2517455162150\"},{\"path\":\".stylelintrc.json\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"4b4c9698d10d756f5faa025659b86375428ed0a7\",\"size\":718,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/4b4c9698d10d756f5faa025659b86375428ed0a7\"},{\"path\":\".vscode\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"286e97ec0113ea8242b41ac222e2c3e8077e6f1e\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/286e97ec0113ea8242b41ac222e2c3e8077e6f1e\"},{\"path\":\"CHANGELOG.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"070a5d4f0eacd2dc0be81ae8996f8982de43046e\",\"size\":2113,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/070a5d4f0eacd2dc0be81ae8996f8982de43046e\"},{\"path\":\"CODE_OF_CONDUCT.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"92bc7565ff0ee145a0041b5179a820f14f39ab22\",\"size\":3355,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/92bc7565ff0ee145a0041b5179a820f14f39ab22\"},{\"path\":\"CONTRIBUTING.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"8552aa241254a61258e1ff9666ab36f32fb1e3b9\",\"size\":3548,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/8552aa241254a61258e1ff9666ab36f32fb1e3b9\"},{\"path\":\"LICENSE\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"42d85938357b49977c126ca03b199129082d4fb8\",\"size\":1091,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/42d85938357b49977c126ca03b199129082d4fb8\"},{\"path\":\"README.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"19df50a78654c8d757ca7f38447aa3d09c7abcce\",\"size\":3698,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/19df50a78654c8d757ca7f38447aa3d09c7abcce\"},{\"path\":\"backend\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"b9f1cfbf4d901fe13c3af4e0d8f46bbe5a6addd6\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/b9f1cfbf4d901fe13c3af4e0d8f46bbe5a6addd6\"},{\"path\":\"config.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"58afd573bbb69fcca000efd0f5d90b93c93a98dd\",\"size\":853,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/58afd573bbb69fcca000efd0f5d90b93c93a98dd\"},{\"path\":\"content\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"0294ef106c58743907a5c855da1eb0f87b0b6dfc\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/0294ef106c58743907a5c855da1eb0f87b0b6dfc\"},{\"path\":\"flow-typed\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"86c32fd6c3118be5e0dbbb231a834447357236c6\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/86c32fd6c3118be5e0dbbb231a834447357236c6\"},{\"path\":\"flow\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"0af45ad00d155c8d8c7407d913ff85278244c9ce\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/0af45ad00d155c8d8c7407d913ff85278244c9ce\"},{\"path\":\"gatsby-browser.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"9bd2c9dce175f04980e91cd9dc295a299e3cdb80\",\"size\":90,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/9bd2c9dce175f04980e91cd9dc295a299e3cdb80\"},{\"path\":\"gatsby-config.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"3929038f9ab6451b2b256dfba5830676e6eecbee\",\"size\":7256,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/3929038f9ab6451b2b256dfba5830676e6eecbee\"},{\"path\":\"gatsby-node.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"14a207883c2093d2cc071bc5a464e165bcc1fead\",\"size\":409,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/14a207883c2093d2cc071bc5a464e165bcc1fead\"},{\"path\":\"gatsby\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"4f23c06cd1740bf78304d2c0b29bf6bfdf427981\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/4f23c06cd1740bf78304d2c0b29bf6bfdf427981\"},{\"path\":\"jest\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"5a6bc7be680ba053df0f8ffdc2aaa80e62c3e819\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/5a6bc7be680ba053df0f8ffdc2aaa80e62c3e819\"},{\"path\":\"netlify-functions\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"a96c1f09300fa4f9e4c786d69bcbe51eaff7f14a\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/a96c1f09300fa4f9e4c786d69bcbe51eaff7f14a\"},{\"path\":\"netlify.toml\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"2a9e36ada28c535fc074b408daa2a0cb97ecf47c\",\"size\":223,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/2a9e36ada28c535fc074b408daa2a0cb97ecf47c\"},{\"path\":\"package.json\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"d8b6e6e922c8d166290f99228090139a3358bfd3\",\"size\":6951,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/d8b6e6e922c8d166290f99228090139a3358bfd3\"},{\"path\":\"postcss-config.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"d216501e9b351a72e00ba0b7459a6500e27e7da2\",\"size\":703,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/d216501e9b351a72e00ba0b7459a6500e27e7da2\"},{\"path\":\"renovate.json\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"9d78c55fe6566ea98907ef63d56a94d7b3cbe527\",\"size\":536,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/9d78c55fe6566ea98907ef63d56a94d7b3cbe527\"},{\"path\":\"serverless-scripts\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"ee3701f2fbfc7196ba340f6481d1387d20527898\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/ee3701f2fbfc7196ba340f6481d1387d20527898\"},{\"path\":\"serverless-single-page-app-plugin\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"08763fcfba643a06a452398517019bea4a5850ba\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/08763fcfba643a06a452398517019bea4a5850ba\"},{\"path\":\"serverless.yml\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"20b22c5fad229f35d029bf6614d333d82fe8a987\",\"size\":7803,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/20b22c5fad229f35d029bf6614d333d82fe8a987\"},{\"path\":\"src\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"8cdb35a88232c0f32f12f130c92c7cc55f97f471\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/8cdb35a88232c0f32f12f130c92c7cc55f97f471\"},{\"path\":\"static\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"139040296ae3796be0e107be98572f0e6bb28901\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/139040296ae3796be0e107be98572f0e6bb28901\"},{\"path\":\"utils\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"a592549c9f74db40b51efefcda2fd76810405f27\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/a592549c9f74db40b51efefcda2fd76810405f27\"},{\"path\":\"yarn.lock\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"eff9f6e3c4ee2cb7bd2685c8f93d6d68af8aad37\",\"size\":923955,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/eff9f6e3c4ee2cb7bd2685c8f93d6d68af8aad37\"}],\"truncated\":false}", + "status": 201 + }, + { + "body": "{\"message\":\"Delete “static/media/netlify.png”\",\"tree\":\"6dd5ba49336e5ff268561aa9d3ffad2d9496df0b\",\"parents\":[\"fca1caeb587569fa2847d8b853834af3feb8d830\"]}", + "method": "POST", + "url": "/repos/owner/repo/git/commits", + "headers": { + "Content-Type": "application/json; charset=utf-8", + "Content-Length": "1526", + "Server": "GitHub.com", + "Status": "201 Created", + "X-RateLimit-Limit": "5000", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP", + "X-OAuth-Scopes": "delete_repo, repo", + "X-Accepted-OAuth-Scopes": "", + "Location": "https://api.github.com/repos/owner/repo/git/commits/d69120fbe1545b7346496a7bb531e8f2ccfc44e7", + "X-GitHub-Media-Type": "github.v3; format=json", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "1; mode=block", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'" + }, + "response": "{\"sha\":\"d69120fbe1545b7346496a7bb531e8f2ccfc44e7\",\"node_id\":\"MDY6Q29tbWl0Mjg2NzU3NjIxOmQ2OTEyMGZiZTE1NDViNzM0NjQ5NmE3YmI1MzFlOGYyY2NmYzQ0ZTc=\",\"url\":\"https://api.github.com/repos/owner/repo/git/commits/d69120fbe1545b7346496a7bb531e8f2ccfc44e7\",\"html_url\":\"https://github.com/owner/repo/commit/d69120fbe1545b7346496a7bb531e8f2ccfc44e7\",\"author\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2020-08-11T13:53:14Z\"},\"committer\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2020-08-11T13:53:14Z\"},\"tree\":{\"sha\":\"6dd5ba49336e5ff268561aa9d3ffad2d9496df0b\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/6dd5ba49336e5ff268561aa9d3ffad2d9496df0b\"},\"message\":\"Delete “static/media/netlify.png”\",\"parents\":[{\"sha\":\"fca1caeb587569fa2847d8b853834af3feb8d830\",\"url\":\"https://api.github.com/repos/owner/repo/git/commits/fca1caeb587569fa2847d8b853834af3feb8d830\",\"html_url\":\"https://github.com/owner/repo/commit/fca1caeb587569fa2847d8b853834af3feb8d830\"}],\"verification\":{\"verified\":false,\"reason\":\"unsigned\",\"signature\":null,\"payload\":null}}", + "status": 201 + }, + { + "body": "{\"operationName\":\"updateRef\",\"variables\":{\"input\":{\"oid\":\"d69120fbe1545b7346496a7bb531e8f2ccfc44e7\",\"refId\":\"MDM6UmVmMjg2NzU3NjIxOnJlZnMvaGVhZHMvbWFzdGVy\",\"force\":false}},\"query\":\"mutation updateRef($input: UpdateRefInput!) {\\n updateRef(input: $input) {\\n branch: ref {\\n ...BranchParts\\n __typename\\n }\\n __typename\\n }\\n}\\n\\nfragment BranchParts on Ref {\\n commit: target {\\n ...ObjectParts\\n __typename\\n }\\n id\\n name\\n prefix\\n repository {\\n ...RepositoryParts\\n __typename\\n }\\n __typename\\n}\\n\\nfragment ObjectParts on GitObject {\\n id\\n sha: oid\\n __typename\\n}\\n\\nfragment RepositoryParts on Repository {\\n id\\n isFork\\n __typename\\n}\\n\"}", + "method": "POST", + "url": "/graphql", + "headers": { + "Content-Type": "application/json; charset=utf-8", + "Server": "GitHub.com", + "Status": "200 OK", + "Cache-Control": "no-cache", + "X-OAuth-Scopes": "delete_repo, repo", + "X-Accepted-OAuth-Scopes": "repo", + "X-GitHub-Media-Type": "github.v4; format=json", + "X-RateLimit-Limit": "5000", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "1; mode=block", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "Vary": "Accept-Encoding, Accept, X-Requested-With", + "content-length": "444" + }, + "response": "{\"data\":{\"updateRef\":{\"branch\":{\"commit\":{\"id\":\"MDY6Q29tbWl0Mjg2NzU3NjIxOmQ2OTEyMGZiZTE1NDViNzM0NjQ5NmE3YmI1MzFlOGYyY2NmYzQ0ZTc=\",\"sha\":\"d69120fbe1545b7346496a7bb531e8f2ccfc44e7\",\"__typename\":\"Commit\"},\"id\":\"MDM6UmVmMjg2NzU3NjIxOnJlZnMvaGVhZHMvbWFzdGVy\",\"name\":\"master\",\"prefix\":\"refs/heads/\",\"repository\":{\"id\":\"MDEwOlJlcG9zaXRvcnkyODY3NTc2MjE=\",\"isFork\":false,\"__typename\":\"Repository\"},\"__typename\":\"Ref\"},\"__typename\":\"UpdateRefPayload\"}}}", "status": 200 } ] \ No newline at end of file diff --git a/cypress/fixtures/GitHub Backend Media Library - REST API__can delete image from global media library.json b/cypress/fixtures/GitHub Backend Media Library - REST API__can delete image from global media library.json index 5d888813..98647935 100644 --- a/cypress/fixtures/GitHub Backend Media Library - REST API__can delete image from global media library.json +++ b/cypress/fixtures/GitHub Backend Media Library - REST API__can delete image from global media library.json @@ -20,7 +20,7 @@ "X-XSS-Protection": "1; mode=block", "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", "Content-Security-Policy": "default-src 'none'", - "content-length": "1321" + "content-length": "1349" }, "response": "{\"login\":\"owner\",\"id\":1,\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"name\":\"owner\"}", "status": 200 @@ -46,9 +46,9 @@ "X-XSS-Protection": "1; mode=block", "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", "Content-Security-Policy": "default-src 'none'", - "content-length": "7577" + "content-length": "7373" }, - "response": "{\n \"id\": 255077914,\n \"node_id\": \"MDEwOlJlcG9zaXRvcnkyNTUwNzc5MTQ=\",\n \"name\": \"repo\",\n \"full_name\": \"owner/repo\",\n \"private\": false,\n \"owner\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"html_url\": \"https://github.com/owner/repo\",\n \"description\": null,\n \"fork\": false,\n \"url\": \"https://api.github.com/repos/owner/repo\",\n \"forks_url\": \"https://api.github.com/repos/owner/repo/forks\",\n \"keys_url\": \"https://api.github.com/repos/owner/repo/keys{/key_id}\",\n \"collaborators_url\": \"https://api.github.com/repos/owner/repo/collaborators{/collaborator}\",\n \"teams_url\": \"https://api.github.com/repos/owner/repo/teams\",\n \"hooks_url\": \"https://api.github.com/repos/owner/repo/hooks\",\n \"issue_events_url\": \"https://api.github.com/repos/owner/repo/issues/events{/number}\",\n \"events_url\": \"https://api.github.com/repos/owner/repo/events\",\n \"assignees_url\": \"https://api.github.com/repos/owner/repo/assignees{/user}\",\n \"branches_url\": \"https://api.github.com/repos/owner/repo/branches{/branch}\",\n \"tags_url\": \"https://api.github.com/repos/owner/repo/tags\",\n \"blobs_url\": \"https://api.github.com/repos/owner/repo/git/blobs{/sha}\",\n \"git_tags_url\": \"https://api.github.com/repos/owner/repo/git/tags{/sha}\",\n \"git_refs_url\": \"https://api.github.com/repos/owner/repo/git/refs{/sha}\",\n \"trees_url\": \"https://api.github.com/repos/owner/repo/git/trees{/sha}\",\n \"statuses_url\": \"https://api.github.com/repos/owner/repo/statuses/{sha}\",\n \"languages_url\": \"https://api.github.com/repos/owner/repo/languages\",\n \"stargazers_url\": \"https://api.github.com/repos/owner/repo/stargazers\",\n \"contributors_url\": \"https://api.github.com/repos/owner/repo/contributors\",\n \"subscribers_url\": \"https://api.github.com/repos/owner/repo/subscribers\",\n \"subscription_url\": \"https://api.github.com/repos/owner/repo/subscription\",\n \"commits_url\": \"https://api.github.com/repos/owner/repo/commits{/sha}\",\n \"git_commits_url\": \"https://api.github.com/repos/owner/repo/git/commits{/sha}\",\n \"comments_url\": \"https://api.github.com/repos/owner/repo/comments{/number}\",\n \"issue_comment_url\": \"https://api.github.com/repos/owner/repo/issues/comments{/number}\",\n \"contents_url\": \"https://api.github.com/repos/owner/repo/contents/{+path}\",\n \"compare_url\": \"https://api.github.com/repos/owner/repo/compare/{base}...{head}\",\n \"merges_url\": \"https://api.github.com/repos/owner/repo/merges\",\n \"archive_url\": \"https://api.github.com/repos/owner/repo/{archive_format}{/ref}\",\n \"downloads_url\": \"https://api.github.com/repos/owner/repo/downloads\",\n \"issues_url\": \"https://api.github.com/repos/owner/repo/issues{/number}\",\n \"pulls_url\": \"https://api.github.com/repos/owner/repo/pulls{/number}\",\n \"milestones_url\": \"https://api.github.com/repos/owner/repo/milestones{/number}\",\n \"notifications_url\": \"https://api.github.com/repos/owner/repo/notifications{?since,all,participating}\",\n \"labels_url\": \"https://api.github.com/repos/owner/repo/labels{/name}\",\n \"releases_url\": \"https://api.github.com/repos/owner/repo/releases{/id}\",\n \"deployments_url\": \"https://api.github.com/repos/owner/repo/deployments\",\n \"created_at\": \"2020-04-12T12:29:51Z\",\n \"updated_at\": \"2020-04-12T12:30:45Z\",\n \"pushed_at\": \"2020-04-12T12:30:43Z\",\n \"git_url\": \"git://github.com/owner/repo.git\",\n \"ssh_url\": \"git@github.com:owner/repo.git\",\n \"clone_url\": \"https://github.com/owner/repo.git\",\n \"svn_url\": \"https://github.com/owner/repo\",\n \"homepage\": null,\n \"size\": 0,\n \"stargazers_count\": 0,\n \"watchers_count\": 0,\n \"language\": \"JavaScript\",\n \"has_issues\": true,\n \"has_projects\": true,\n \"has_downloads\": true,\n \"has_wiki\": true,\n \"has_pages\": false,\n \"forks_count\": 0,\n \"mirror_url\": null,\n \"archived\": false,\n \"disabled\": false,\n \"open_issues_count\": 0,\n \"license\": {\n \"key\": \"mit\",\n \"name\": \"MIT License\",\n \"spdx_id\": \"MIT\",\n \"url\": \"https://api.github.com/licenses/mit\",\n \"node_id\": \"MDc6TGljZW5zZTEz\"\n },\n \"forks\": 0,\n \"open_issues\": 0,\n \"watchers\": 0,\n \"default_branch\": \"master\",\n \"permissions\": {\n \"admin\": true,\n \"push\": true,\n \"pull\": true\n },\n \"temp_clone_token\": \"\",\n \"allow_squash_merge\": true,\n \"allow_merge_commit\": true,\n \"allow_rebase_merge\": true,\n \"delete_branch_on_merge\": false,\n \"network_count\": 0,\n \"subscribers_count\": 1\n}\n", + "response": "{\"id\":286756833,\"node_id\":\"MDEwOlJlcG9zaXRvcnkyODY3NTY4MzM=\",\"name\":\"repo\",\"full_name\":\"owner/repo\",\"private\":false,\"owner\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"html_url\":\"https://github.com/owner/repo\",\"description\":null,\"fork\":false,\"url\":\"https://api.github.com/repos/owner/repo\",\"forks_url\":\"https://api.github.com/repos/owner/repo/forks\",\"keys_url\":\"https://api.github.com/repos/owner/repo/keys{/key_id}\",\"collaborators_url\":\"https://api.github.com/repos/owner/repo/collaborators{/collaborator}\",\"teams_url\":\"https://api.github.com/repos/owner/repo/teams\",\"hooks_url\":\"https://api.github.com/repos/owner/repo/hooks\",\"issue_events_url\":\"https://api.github.com/repos/owner/repo/issues/events{/number}\",\"events_url\":\"https://api.github.com/repos/owner/repo/events\",\"assignees_url\":\"https://api.github.com/repos/owner/repo/assignees{/user}\",\"branches_url\":\"https://api.github.com/repos/owner/repo/branches{/branch}\",\"tags_url\":\"https://api.github.com/repos/owner/repo/tags\",\"blobs_url\":\"https://api.github.com/repos/owner/repo/git/blobs{/sha}\",\"git_tags_url\":\"https://api.github.com/repos/owner/repo/git/tags{/sha}\",\"git_refs_url\":\"https://api.github.com/repos/owner/repo/git/refs{/sha}\",\"trees_url\":\"https://api.github.com/repos/owner/repo/git/trees{/sha}\",\"statuses_url\":\"https://api.github.com/repos/owner/repo/statuses/{sha}\",\"languages_url\":\"https://api.github.com/repos/owner/repo/languages\",\"stargazers_url\":\"https://api.github.com/repos/owner/repo/stargazers\",\"contributors_url\":\"https://api.github.com/repos/owner/repo/contributors\",\"subscribers_url\":\"https://api.github.com/repos/owner/repo/subscribers\",\"subscription_url\":\"https://api.github.com/repos/owner/repo/subscription\",\"commits_url\":\"https://api.github.com/repos/owner/repo/commits{/sha}\",\"git_commits_url\":\"https://api.github.com/repos/owner/repo/git/commits{/sha}\",\"comments_url\":\"https://api.github.com/repos/owner/repo/comments{/number}\",\"issue_comment_url\":\"https://api.github.com/repos/owner/repo/issues/comments{/number}\",\"contents_url\":\"https://api.github.com/repos/owner/repo/contents/{+path}\",\"compare_url\":\"https://api.github.com/repos/owner/repo/compare/{base}...{head}\",\"merges_url\":\"https://api.github.com/repos/owner/repo/merges\",\"archive_url\":\"https://api.github.com/repos/owner/repo/{archive_format}{/ref}\",\"downloads_url\":\"https://api.github.com/repos/owner/repo/downloads\",\"issues_url\":\"https://api.github.com/repos/owner/repo/issues{/number}\",\"pulls_url\":\"https://api.github.com/repos/owner/repo/pulls{/number}\",\"milestones_url\":\"https://api.github.com/repos/owner/repo/milestones{/number}\",\"notifications_url\":\"https://api.github.com/repos/owner/repo/notifications{?since,all,participating}\",\"labels_url\":\"https://api.github.com/repos/owner/repo/labels{/name}\",\"releases_url\":\"https://api.github.com/repos/owner/repo/releases{/id}\",\"deployments_url\":\"https://api.github.com/repos/owner/repo/deployments\",\"created_at\":\"2020-08-11T13:49:30Z\",\"updated_at\":\"2020-08-11T13:49:30Z\",\"pushed_at\":\"2020-08-11T13:49:58Z\",\"git_url\":\"git://github.com/owner/repo.git\",\"ssh_url\":\"git@github.com:owner/repo.git\",\"clone_url\":\"https://github.com/owner/repo.git\",\"svn_url\":\"https://github.com/owner/repo\",\"homepage\":null,\"size\":0,\"stargazers_count\":0,\"watchers_count\":0,\"language\":null,\"has_issues\":true,\"has_projects\":true,\"has_downloads\":true,\"has_wiki\":true,\"has_pages\":false,\"forks_count\":0,\"mirror_url\":null,\"archived\":false,\"disabled\":false,\"open_issues_count\":0,\"license\":null,\"forks\":0,\"open_issues\":0,\"watchers\":0,\"default_branch\":\"master\",\"permissions\":{\"admin\":true,\"push\":true,\"pull\":true},\"temp_clone_token\":\"\",\"allow_squash_merge\":true,\"allow_merge_commit\":true,\"allow_rebase_merge\":true,\"delete_branch_on_merge\":false,\"network_count\":0,\"subscribers_count\":1}", "status": 200 }, { @@ -73,7 +73,7 @@ "Vary": "Accept-Encoding, Accept, X-Requested-With", "content-length": "109" }, - "response": "{\n \"message\": \"Not Found\",\n \"documentation_url\": \"https://developer.github.com/v3/git/trees/#get-a-tree\"\n}\n", + "response": "{\"message\":\"Not Found\",\"documentation_url\":\"https://docs.github.com/rest/reference/git#get-a-tree\"}", "status": 404 }, { @@ -97,61 +97,9 @@ "X-XSS-Protection": "1; mode=block", "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", "Content-Security-Policy": "default-src 'none'", - "content-length": "2060" + "content-length": "2054" }, - "response": "{\n \"sha\": \"34892575e216c06e757093f036bd8e057c78a52f\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/34892575e216c06e757093f036bd8e057c78a52f\",\n \"tree\": [\n {\n \"path\": \"2016-01-09---Perfecting-the-Art-of-Perfection.md\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"6d51a38aed7139d2117724b1e307657b6ff2d043\",\n \"size\": 1707,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/6d51a38aed7139d2117724b1e307657b6ff2d043\"\n },\n {\n \"path\": \"2016-01-12---The-Origins-of-Social-Stationery-Lettering.md\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"d0582dd245a3f408fb3fe2333bf01400007476e9\",\n \"size\": 2565,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/d0582dd245a3f408fb3fe2333bf01400007476e9\"\n },\n {\n \"path\": \"2016-02-02---A-Brief-History-of-Typography.md\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"0eea554365f002d0f1572af9a58522d335a794d5\",\n \"size\": 2786,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/0eea554365f002d0f1572af9a58522d335a794d5\"\n },\n {\n \"path\": \"2017-18-08---The-Birth-of-Movable-Type.md\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"44f78c474d04273185a95821426f75affc9b0044\",\n \"size\": 16071,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/44f78c474d04273185a95821426f75affc9b0044\"\n },\n {\n \"path\": \"2017-19-08---Humane-Typography-in-the-Digital-Age.md\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"a532f0a9445cdf90a19c6812cff89d1674991774\",\n \"size\": 7465,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/a532f0a9445cdf90a19c6812cff89d1674991774\"\n }\n ],\n \"truncated\": false\n}\n", - "status": 200 - }, - { - "method": "GET", - "url": "/repos/owner/repo/git/blobs/44f78c474d04273185a95821426f75affc9b0044", - "headers": { - "Content-Type": "application/json; charset=utf-8", - "Server": "GitHub.com", - "Status": "200 OK", - "X-RateLimit-Limit": "5000", - "Cache-Control": "private, max-age=60, s-maxage=60", - "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP", - "X-OAuth-Scopes": "delete_repo, repo", - "X-Accepted-OAuth-Scopes": "", - "X-GitHub-Media-Type": "github.v3; format=json", - "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", - "Access-Control-Allow-Origin": "*", - "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", - "X-Frame-Options": "deny", - "X-Content-Type-Options": "nosniff", - "X-XSS-Protection": "1; mode=block", - "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", - "Content-Security-Policy": "default-src 'none'", - "content-length": "22507" - }, - "response": "{\n \"sha\": \"44f78c474d04273185a95821426f75affc9b0044\",\n \"node_id\": \"MDQ6QmxvYjI1NTA3NzkxNDo0NGY3OGM0NzRkMDQyNzMxODVhOTU4MjE0MjZmNzVhZmZjOWIwMDQ0\",\n \"size\": 16071,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/44f78c474d04273185a95821426f75affc9b0044\",\n \"content\": \"LS0tCnRpdGxlOiAiSm9oYW5uZXMgR3V0ZW5iZXJnOiBUaGUgQmlydGggb2Yg\\nTW92YWJsZSBUeXBlIgpkYXRlOiAiMjAxNy0wOC0xOFQyMjoxMjowMy4yODRa\\nIgp0ZW1wbGF0ZTogInBvc3QiCmRyYWZ0OiBmYWxzZQpjYXRlZ29yeTogIlR5\\ncG9ncmFwaHkiCnRhZ3M6CiAgLSAiT3BlbiBzb3VyY2UiCiAgLSAiR2F0c2J5\\nIgogIC0gIlR5cG9ncmFwaHkiCmRlc2NyaXB0aW9uOiAiR2VybWFuIGludmVu\\ndG9yIEpvaGFubmVzIEd1dGVuYmVyZyBkZXZlbG9wZWQgYSBtZXRob2Qgb2Yg\\nbW92YWJsZSB0eXBlIGFuZCB1c2VkIGl0IHRvIGNyZWF0ZSBvbmUgb2YgdGhl\\nIHdlc3Rlcm4gd29ybGTigJlzIGZpcnN0IG1ham9yIHByaW50ZWQgYm9va3Ms\\nIHRoZSDigJxGb3J0eeKAk1R3b+KAk0xpbmXigJ0gQmlibGUuIgpjYW5vbmlj\\nYWw6ICcnCi0tLQoKR2VybWFuIGludmVudG9yIEpvaGFubmVzIEd1dGVuYmVy\\nZyBkZXZlbG9wZWQgYSBtZXRob2Qgb2YgbW92YWJsZSB0eXBlIGFuZCB1c2Vk\\nIGl0IHRvIGNyZWF0ZSBvbmUgb2YgdGhlIHdlc3Rlcm4gd29ybGTigJlzIGZp\\ncnN0IG1ham9yIHByaW50ZWQgYm9va3MsIHRoZSDigJxGb3J0eeKAk1R3b+KA\\nk0xpbmXigJ0gQmlibGUuCgoqKkpvaGFubmVzIEdlbnNmbGVpc2NoIHp1ciBM\\nYWRlbiB6dW0gR3V0ZW5iZXJnKiogKGMuIDEzOTgg4oCTIDE0NjgpIHdhcyBh\\nIEdlcm1hbiBibGFja3NtaXRoLCBnb2xkc21pdGgsIHByaW50ZXIsIGFuZCBw\\ndWJsaXNoZXIgd2hvIGludHJvZHVjZWQgcHJpbnRpbmcgdG8gRXVyb3BlLiBI\\naXMgaW52ZW50aW9uIG9mIG1lY2hhbmljYWwgbW92YWJsZSB0eXBlIHByaW50\\naW5nIHN0YXJ0ZWQgdGhlIFByaW50aW5nIFJldm9sdXRpb24gYW5kIGlzIHdp\\nZGVseSByZWdhcmRlZCBhcyB0aGUgbW9zdCBpbXBvcnRhbnQgZXZlbnQgb2Yg\\ndGhlIG1vZGVybiBwZXJpb2QuIEl0IHBsYXllZCBhIGtleSByb2xlIGluIHRo\\nZSBkZXZlbG9wbWVudCBvZiB0aGUgUmVuYWlzc2FuY2UsIFJlZm9ybWF0aW9u\\nLCB0aGUgQWdlIG9mIEVubGlnaHRlbm1lbnQsIGFuZCB0aGUgU2NpZW50aWZp\\nYyByZXZvbHV0aW9uIGFuZCBsYWlkIHRoZSBtYXRlcmlhbCBiYXNpcyBmb3Ig\\ndGhlIG1vZGVybiBrbm93bGVkZ2UtYmFzZWQgZWNvbm9teSBhbmQgdGhlIHNw\\ncmVhZCBvZiBsZWFybmluZyB0byB0aGUgbWFzc2VzLgoKPGZpZ3VyZSBjbGFz\\ncz0iZmxvYXQtcmlnaHQiIHN0eWxlPSJ3aWR0aDogMjQwcHgiPgoJPGltZyBz\\ncmM9Ii9tZWRpYS9ndXRlbmJlcmcuanBnIiBhbHQ9Ikd1dGVuYmVyZyI+Cgk8\\nZmlnY2FwdGlvbj5Kb2hhbm5lcyBHdXRlbmJlcmc8L2ZpZ2NhcHRpb24+Cjwv\\nZmlndXJlPgoKV2l0aCBoaXMgaW52ZW50aW9uIG9mIHRoZSBwcmludGluZyBw\\ncmVzcywgR3V0ZW5iZXJnIHdhcyB0aGUgZmlyc3QgRXVyb3BlYW4gdG8gdXNl\\nIG1vdmFibGUgdHlwZSBwcmludGluZywgaW4gYXJvdW5kIDE0MzkuIEFtb25n\\nIGhpcyBtYW55IGNvbnRyaWJ1dGlvbnMgdG8gcHJpbnRpbmcgYXJlOiB0aGUg\\naW52ZW50aW9uIG9mIGEgcHJvY2VzcyBmb3IgbWFzcy1wcm9kdWNpbmcgbW92\\nYWJsZSB0eXBlOyB0aGUgdXNlIG9mIG9pbC1iYXNlZCBpbms7IGFuZCB0aGUg\\ndXNlIG9mIGEgd29vZGVuIHByaW50aW5nIHByZXNzIHNpbWlsYXIgdG8gdGhl\\nIGFncmljdWx0dXJhbCBzY3JldyBwcmVzc2VzIG9mIHRoZSBwZXJpb2QuIEhp\\ncyB0cnVseSBlcG9jaGFsIGludmVudGlvbiB3YXMgdGhlIGNvbWJpbmF0aW9u\\nIG9mIHRoZXNlIGVsZW1lbnRzIGludG8gYSBwcmFjdGljYWwgc3lzdGVtIHRo\\nYXQgYWxsb3dlZCB0aGUgbWFzcyBwcm9kdWN0aW9uIG9mIHByaW50ZWQgYm9v\\na3MgYW5kIHdhcyBlY29ub21pY2FsbHkgdmlhYmxlIGZvciBwcmludGVycyBh\\nbmQgcmVhZGVycyBhbGlrZS4gR3V0ZW5iZXJnJ3MgbWV0aG9kIGZvciBtYWtp\\nbmcgdHlwZSBpcyB0cmFkaXRpb25hbGx5IGNvbnNpZGVyZWQgdG8gaGF2ZSBp\\nbmNsdWRlZCBhIHR5cGUgbWV0YWwgYWxsb3kgYW5kIGEgaGFuZCBtb3VsZCBm\\nb3IgY2FzdGluZyB0eXBlLiBUaGUgYWxsb3kgd2FzIGEgbWl4dHVyZSBvZiBs\\nZWFkLCB0aW4sIGFuZCBhbnRpbW9ueSB0aGF0IG1lbHRlZCBhdCBhIHJlbGF0\\naXZlbHkgbG93IHRlbXBlcmF0dXJlIGZvciBmYXN0ZXIgYW5kIG1vcmUgZWNv\\nbm9taWNhbCBjYXN0aW5nLCBjYXN0IHdlbGwsIGFuZCBjcmVhdGVkIGEgZHVy\\nYWJsZSB0eXBlLgoKSW4gUmVuYWlzc2FuY2UgRXVyb3BlLCB0aGUgYXJyaXZh\\nbCBvZiBtZWNoYW5pY2FsIG1vdmFibGUgdHlwZSBwcmludGluZyBpbnRyb2R1\\nY2VkIHRoZSBlcmEgb2YgbWFzcyBjb21tdW5pY2F0aW9uIHdoaWNoIHBlcm1h\\nbmVudGx5IGFsdGVyZWQgdGhlIHN0cnVjdHVyZSBvZiBzb2NpZXR5LiBUaGUg\\ncmVsYXRpdmVseSB1bnJlc3RyaWN0ZWQgY2lyY3VsYXRpb24gb2YgaW5mb3Jt\\nYXRpb24g4oCUIGluY2x1ZGluZyByZXZvbHV0aW9uYXJ5IGlkZWFzIOKAlCB0\\ncmFuc2NlbmRlZCBib3JkZXJzLCBjYXB0dXJlZCB0aGUgbWFzc2VzIGluIHRo\\nZSBSZWZvcm1hdGlvbiBhbmQgdGhyZWF0ZW5lZCB0aGUgcG93ZXIgb2YgcG9s\\naXRpY2FsIGFuZCByZWxpZ2lvdXMgYXV0aG9yaXRpZXM7IHRoZSBzaGFycCBp\\nbmNyZWFzZSBpbiBsaXRlcmFjeSBicm9rZSB0aGUgbW9ub3BvbHkgb2YgdGhl\\nIGxpdGVyYXRlIGVsaXRlIG9uIGVkdWNhdGlvbiBhbmQgbGVhcm5pbmcgYW5k\\nIGJvbHN0ZXJlZCB0aGUgZW1lcmdpbmcgbWlkZGxlIGNsYXNzLiBBY3Jvc3Mg\\nRXVyb3BlLCB0aGUgaW5jcmVhc2luZyBjdWx0dXJhbCBzZWxmLWF3YXJlbmVz\\ncyBvZiBpdHMgcGVvcGxlIGxlZCB0byB0aGUgcmlzZSBvZiBwcm90by1uYXRp\\nb25hbGlzbSwgYWNjZWxlcmF0ZWQgYnkgdGhlIGZsb3dlcmluZyBvZiB0aGUg\\nRXVyb3BlYW4gdmVybmFjdWxhciBsYW5ndWFnZXMgdG8gdGhlIGRldHJpbWVu\\ndCBvZiBMYXRpbidzIHN0YXR1cyBhcyBsaW5ndWEgZnJhbmNhLiBJbiB0aGUg\\nMTl0aCBjZW50dXJ5LCB0aGUgcmVwbGFjZW1lbnQgb2YgdGhlIGhhbmQtb3Bl\\ncmF0ZWQgR3V0ZW5iZXJnLXN0eWxlIHByZXNzIGJ5IHN0ZWFtLXBvd2VyZWQg\\ncm90YXJ5IHByZXNzZXMgYWxsb3dlZCBwcmludGluZyBvbiBhbiBpbmR1c3Ry\\naWFsIHNjYWxlLCB3aGlsZSBXZXN0ZXJuLXN0eWxlIHByaW50aW5nIHdhcyBh\\nZG9wdGVkIGFsbCBvdmVyIHRoZSB3b3JsZCwgYmVjb21pbmcgcHJhY3RpY2Fs\\nbHkgdGhlIHNvbGUgbWVkaXVtIGZvciBtb2Rlcm4gYnVsayBwcmludGluZy4K\\nClRoZSB1c2Ugb2YgbW92YWJsZSB0eXBlIHdhcyBhIG1hcmtlZCBpbXByb3Zl\\nbWVudCBvbiB0aGUgaGFuZHdyaXR0ZW4gbWFudXNjcmlwdCwgd2hpY2ggd2Fz\\nIHRoZSBleGlzdGluZyBtZXRob2Qgb2YgYm9vayBwcm9kdWN0aW9uIGluIEV1\\ncm9wZSwgYW5kIHVwb24gd29vZGJsb2NrIHByaW50aW5nLCBhbmQgcmV2b2x1\\ndGlvbml6ZWQgRXVyb3BlYW4gYm9vay1tYWtpbmcuIEd1dGVuYmVyZydzIHBy\\naW50aW5nIHRlY2hub2xvZ3kgc3ByZWFkIHJhcGlkbHkgdGhyb3VnaG91dCBF\\ndXJvcGUgYW5kIGxhdGVyIHRoZSB3b3JsZC4KCkhpcyBtYWpvciB3b3JrLCB0\\naGUgR3V0ZW5iZXJnIEJpYmxlIChhbHNvIGtub3duIGFzIHRoZSA0Mi1saW5l\\nIEJpYmxlKSwgaGFzIGJlZW4gYWNjbGFpbWVkIGZvciBpdHMgaGlnaCBhZXN0\\naGV0aWMgYW5kIHRlY2huaWNhbCBxdWFsaXR5LgoKIyMgUHJpbnRpbmcgUHJl\\nc3MKCkFyb3VuZCAxNDM5LCBHdXRlbmJlcmcgd2FzIGludm9sdmVkIGluIGEg\\nZmluYW5jaWFsIG1pc2FkdmVudHVyZSBtYWtpbmcgcG9saXNoZWQgbWV0YWwg\\nbWlycm9ycyAod2hpY2ggd2VyZSBiZWxpZXZlZCB0byBjYXB0dXJlIGhvbHkg\\nbGlnaHQgZnJvbSByZWxpZ2lvdXMgcmVsaWNzKSBmb3Igc2FsZSB0byBwaWxn\\ncmltcyB0byBBYWNoZW46IGluIDE0MzkgdGhlIGNpdHkgd2FzIHBsYW5uaW5n\\nIHRvIGV4aGliaXQgaXRzIGNvbGxlY3Rpb24gb2YgcmVsaWNzIGZyb20gRW1w\\nZXJvciBDaGFybGVtYWduZSBidXQgdGhlIGV2ZW50IHdhcyBkZWxheWVkIGJ5\\nIG9uZSB5ZWFyIGR1ZSB0byBhIHNldmVyZSBmbG9vZCBhbmQgdGhlIGNhcGl0\\nYWwgYWxyZWFkeSBzcGVudCBjb3VsZCBub3QgYmUgcmVwYWlkLiBXaGVuIHRo\\nZSBxdWVzdGlvbiBvZiBzYXRpc2Z5aW5nIHRoZSBpbnZlc3RvcnMgY2FtZSB1\\ncCwgR3V0ZW5iZXJnIGlzIHNhaWQgdG8gaGF2ZSBwcm9taXNlZCB0byBzaGFy\\nZSBhIOKAnHNlY3JldOKAnS4gSXQgaGFzIGJlZW4gd2lkZWx5IHNwZWN1bGF0\\nZWQgdGhhdCB0aGlzIHNlY3JldCBtYXkgaGF2ZSBiZWVuIHRoZSBpZGVhIG9m\\nIHByaW50aW5nIHdpdGggbW92YWJsZSB0eXBlLiBBbHNvIGFyb3VuZCAxNDM5\\n4oCTMTQ0MCwgdGhlIER1dGNoIExhdXJlbnMgSmFuc3pvb24gQ29zdGVyIGNh\\nbWUgdXAgd2l0aCB0aGUgaWRlYSBvZiBwcmludGluZy4gTGVnZW5kIGhhcyBp\\ndCB0aGF0IHRoZSBpZGVhIGNhbWUgdG8gaGltIOKAnGxpa2UgYSByYXkgb2Yg\\nbGlnaHTigJ0uCgo8ZmlndXJlIGNsYXNzPSJmbG9hdC1sZWZ0IiBzdHlsZT0i\\nd2lkdGg6IDI0MHB4Ij4KCTxpbWcgc3JjPSIvbWVkaWEvcHJpbnRpbmctcHJl\\nc3MuanBnIiBhbHQ9IkVhcmx5IFByaW50aW5nIFByZXNzIj4KCTxmaWdjYXB0\\naW9uPkVhcmx5IHdvb2RlbiBwcmludGluZyBwcmVzcyBhcyBkZXBpY3RlZCBp\\nbiAxNTY4LjwvZmlnY2FwdGlvbj4KPC9maWd1cmU+CgpVbnRpbCBhdCBsZWFz\\ndCAxNDQ0IGhlIGxpdmVkIGluIFN0cmFzYm91cmcsIG1vc3QgbGlrZWx5IGlu\\nIHRoZSBTdC4gQXJib2dhc3QgcGFyaXNoLiBJdCB3YXMgaW4gU3RyYXNib3Vy\\nZyBpbiAxNDQwIHRoYXQgR3V0ZW5iZXJnIGlzIHNhaWQgdG8gaGF2ZSBwZXJm\\nZWN0ZWQgYW5kIHVudmVpbGVkIHRoZSBzZWNyZXQgb2YgcHJpbnRpbmcgYmFz\\nZWQgb24gaGlzIHJlc2VhcmNoLCBteXN0ZXJpb3VzbHkgZW50aXRsZWQgS3Vu\\nc3QgdW5kIEF2ZW50dXIgKGFydCBhbmQgZW50ZXJwcmlzZSkuIEl0IGlzIG5v\\ndCBjbGVhciB3aGF0IHdvcmsgaGUgd2FzIGVuZ2FnZWQgaW4sIG9yIHdoZXRo\\nZXIgc29tZSBlYXJseSB0cmlhbHMgd2l0aCBwcmludGluZyBmcm9tIG1vdmFi\\nbGUgdHlwZSBtYXkgaGF2ZSBiZWVuIGNvbmR1Y3RlZCB0aGVyZS4gQWZ0ZXIg\\ndGhpcywgdGhlcmUgaXMgYSBnYXAgb2YgZm91ciB5ZWFycyBpbiB0aGUgcmVj\\nb3JkLiBJbiAxNDQ4LCBoZSB3YXMgYmFjayBpbiBNYWlueiwgd2hlcmUgaGUg\\ndG9vayBvdXQgYSBsb2FuIGZyb20gaGlzIGJyb3RoZXItaW4tbGF3IEFybm9s\\nZCBHZWx0aHVzLCBxdWl0ZSBwb3NzaWJseSBmb3IgYSBwcmludGluZyBwcmVz\\ncyBvciByZWxhdGVkIHBhcmFwaGVybmFsaWEuIEJ5IHRoaXMgZGF0ZSwgR3V0\\nZW5iZXJnIG1heSBoYXZlIGJlZW4gZmFtaWxpYXIgd2l0aCBpbnRhZ2xpbyBw\\ncmludGluZzsgaXQgaXMgY2xhaW1lZCB0aGF0IGhlIGhhZCB3b3JrZWQgb24g\\nY29wcGVyIGVuZ3JhdmluZ3Mgd2l0aCBhbiBhcnRpc3Qga25vd24gYXMgdGhl\\nIE1hc3RlciBvZiBQbGF5aW5nIENhcmRzLgoKQnkgMTQ1MCwgdGhlIHByZXNz\\nIHdhcyBpbiBvcGVyYXRpb24sIGFuZCBhIEdlcm1hbiBwb2VtIGhhZCBiZWVu\\nIHByaW50ZWQsIHBvc3NpYmx5IHRoZSBmaXJzdCBpdGVtIHRvIGJlIHByaW50\\nZWQgdGhlcmUuIEd1dGVuYmVyZyB3YXMgYWJsZSB0byBjb252aW5jZSB0aGUg\\nd2VhbHRoeSBtb25leWxlbmRlciBKb2hhbm4gRnVzdCBmb3IgYSBsb2FuIG9m\\nIDgwMCBndWlsZGVycy4gUGV0ZXIgU2Now7ZmZmVyLCB3aG8gYmVjYW1lIEZ1\\nc3TigJlzIHNvbi1pbi1sYXcsIGFsc28gam9pbmVkIHRoZSBlbnRlcnByaXNl\\nLiBTY2jDtmZmZXIgaGFkIHdvcmtlZCBhcyBhIHNjcmliZSBpbiBQYXJpcyBh\\nbmQgaXMgYmVsaWV2ZWQgdG8gaGF2ZSBkZXNpZ25lZCBzb21lIG9mIHRoZSBm\\naXJzdCB0eXBlZmFjZXMuCgo8ZmlndXJlPgoJPGJsb2NrcXVvdGU+CgkJPHA+\\nQWxsIHRoYXQgaGFzIGJlZW4gd3JpdHRlbiB0byBtZSBhYm91dCB0aGF0IG1h\\ncnZlbG91cyBtYW4gc2VlbiBhdCBGcmFua2Z1cnQgaXMgdHJ1ZS4gSSBoYXZl\\nIG5vdCBzZWVuIGNvbXBsZXRlIEJpYmxlcyBidXQgb25seSBhIG51bWJlciBv\\nZiBxdWlyZXMgb2YgdmFyaW91cyBib29rcyBvZiB0aGUgQmlibGUuIFRoZSBz\\nY3JpcHQgd2FzIHZlcnkgbmVhdCBhbmQgbGVnaWJsZSwgbm90IGF0IGFsbCBk\\naWZmaWN1bHQgdG8gZm9sbG934oCUeW91ciBncmFjZSB3b3VsZCBiZSBhYmxl\\nIHRvIHJlYWQgaXQgd2l0aG91dCBlZmZvcnQsIGFuZCBpbmRlZWQgd2l0aG91\\ndCBnbGFzc2VzLjwvcD4KCQk8Zm9vdGVyPgoJCQk8Y2l0ZT7igJRGdXR1cmUg\\ncG9wZSBQaXVzIElJIGluIGEgbGV0dGVyIHRvIENhcmRpbmFsIENhcnZhamFs\\nLCBNYXJjaCAxNDU1PC9jaXRlPgoJCTwvZm9vdGVyPgoJPC9ibG9ja3F1b3Rl\\nPgo8L2ZpZ3VyZT4KCkd1dGVuYmVyZydzIHdvcmtzaG9wIHdhcyBzZXQgdXAg\\nYXQgSG9mIEh1bWJyZWNodCwgYSBwcm9wZXJ0eSBiZWxvbmdpbmcgdG8gYSBk\\naXN0YW50IHJlbGF0aXZlLiBJdCBpcyBub3QgY2xlYXIgd2hlbiBHdXRlbmJl\\ncmcgY29uY2VpdmVkIHRoZSBCaWJsZSBwcm9qZWN0LCBidXQgZm9yIHRoaXMg\\naGUgYm9ycm93ZWQgYW5vdGhlciA4MDAgZ3VpbGRlcnMgZnJvbSBGdXN0LCBh\\nbmQgd29yayBjb21tZW5jZWQgaW4gMTQ1Mi4gQXQgdGhlIHNhbWUgdGltZSwg\\ndGhlIHByZXNzIHdhcyBhbHNvIHByaW50aW5nIG90aGVyLCBtb3JlIGx1Y3Jh\\ndGl2ZSB0ZXh0cyAocG9zc2libHkgTGF0aW4gZ3JhbW1hcnMpLiBUaGVyZSBp\\ncyBhbHNvIHNvbWUgc3BlY3VsYXRpb24gdGhhdCB0aGVyZSBtYXkgaGF2ZSBi\\nZWVuIHR3byBwcmVzc2VzLCBvbmUgZm9yIHRoZSBwZWRlc3RyaWFuIHRleHRz\\nLCBhbmQgb25lIGZvciB0aGUgQmlibGUuIE9uZSBvZiB0aGUgcHJvZml0LW1h\\na2luZyBlbnRlcnByaXNlcyBvZiB0aGUgbmV3IHByZXNzIHdhcyB0aGUgcHJp\\nbnRpbmcgb2YgdGhvdXNhbmRzIG9mIGluZHVsZ2VuY2VzIGZvciB0aGUgY2h1\\ncmNoLCBkb2N1bWVudGVkIGZyb20gMTQ1NOKAkzU1LgoKSW4gMTQ1NSBHdXRl\\nbmJlcmcgY29tcGxldGVkIGhpcyA0Mi1saW5lIEJpYmxlLCBrbm93biBhcyB0\\naGUgR3V0ZW5iZXJnIEJpYmxlLiBBYm91dCAxODAgY29waWVzIHdlcmUgcHJp\\nbnRlZCwgbW9zdCBvbiBwYXBlciBhbmQgc29tZSBvbiB2ZWxsdW0uCgojIyBD\\nb3VydCBDYXNlCgpTb21lIHRpbWUgaW4gMTQ1NiwgdGhlcmUgd2FzIGEgZGlz\\ncHV0ZSBiZXR3ZWVuIEd1dGVuYmVyZyBhbmQgRnVzdCwgYW5kIEZ1c3QgZGVt\\nYW5kZWQgaGlzIG1vbmV5IGJhY2ssIGFjY3VzaW5nIEd1dGVuYmVyZyBvZiBt\\naXN1c2luZyB0aGUgZnVuZHMuIE1lYW53aGlsZSB0aGUgZXhwZW5zZXMgb2Yg\\ndGhlIEJpYmxlIHByb2plY3QgaGFkIHByb2xpZmVyYXRlZCwgYW5kIEd1dGVu\\nYmVyZydzIGRlYnQgbm93IGV4Y2VlZGVkIDIwLDAwMCBndWlsZGVycy4gRnVz\\ndCBzdWVkIGF0IHRoZSBhcmNoYmlzaG9wJ3MgY291cnQuIEEgTm92ZW1iZXIg\\nMTQ1NSBsZWdhbCBkb2N1bWVudCByZWNvcmRzIHRoYXQgdGhlcmUgd2FzIGEg\\ncGFydG5lcnNoaXAgZm9yIGEgInByb2plY3Qgb2YgdGhlIGJvb2tzLCIgdGhl\\nIGZ1bmRzIGZvciB3aGljaCBHdXRlbmJlcmcgaGFkIHVzZWQgZm9yIG90aGVy\\nIHB1cnBvc2VzLCBhY2NvcmRpbmcgdG8gRnVzdC4gVGhlIGNvdXJ0IGRlY2lk\\nZWQgaW4gZmF2b3Igb2YgRnVzdCwgZ2l2aW5nIGhpbSBjb250cm9sIG92ZXIg\\ndGhlIEJpYmxlIHByaW50aW5nIHdvcmtzaG9wIGFuZCBoYWxmIG9mIGFsbCBw\\ncmludGVkIEJpYmxlcy4KClRodXMgR3V0ZW5iZXJnIHdhcyBlZmZlY3RpdmVs\\neSBiYW5rcnVwdCwgYnV0IGl0IGFwcGVhcnMgaGUgcmV0YWluZWQgKG9yIHJl\\nLXN0YXJ0ZWQpIGEgc21hbGwgcHJpbnRpbmcgc2hvcCwgYW5kIHBhcnRpY2lw\\nYXRlZCBpbiB0aGUgcHJpbnRpbmcgb2YgYSBCaWJsZSBpbiB0aGUgdG93biBv\\nZiBCYW1iZXJnIGFyb3VuZCAxNDU5LCBmb3Igd2hpY2ggaGUgc2VlbXMgYXQg\\nbGVhc3QgdG8gaGF2ZSBzdXBwbGllZCB0aGUgdHlwZS4gQnV0IHNpbmNlIGhp\\ncyBwcmludGVkIGJvb2tzIG5ldmVyIGNhcnJ5IGhpcyBuYW1lIG9yIGEgZGF0\\nZSwgaXQgaXMgZGlmZmljdWx0IHRvIGJlIGNlcnRhaW4sIGFuZCB0aGVyZSBp\\ncyBjb25zZXF1ZW50bHkgYSBjb25zaWRlcmFibGUgc2Nob2xhcmx5IGRlYmF0\\nZSBvbiB0aGlzIHN1YmplY3QuIEl0IGlzIGFsc28gcG9zc2libGUgdGhhdCB0\\naGUgbGFyZ2UgQ2F0aG9saWNvbiBkaWN0aW9uYXJ5LCAzMDAgY29waWVzIG9m\\nIDc1NCBwYWdlcywgcHJpbnRlZCBpbiBNYWlueiBpbiAxNDYwLCBtYXkgaGF2\\nZSBiZWVuIGV4ZWN1dGVkIGluIGhpcyB3b3Jrc2hvcC4KCk1lYW53aGlsZSwg\\ndGhlIEZ1c3TigJNTY2jDtmZmZXIgc2hvcCB3YXMgdGhlIGZpcnN0IGluIEV1\\ncm9wZSB0byBicmluZyBvdXQgYSBib29rIHdpdGggdGhlIHByaW50ZXIncyBu\\nYW1lIGFuZCBkYXRlLCB0aGUgTWFpbnogUHNhbHRlciBvZiBBdWd1c3QgMTQ1\\nNywgYW5kIHdoaWxlIHByb3VkbHkgcHJvY2xhaW1pbmcgdGhlIG1lY2hhbmlj\\nYWwgcHJvY2VzcyBieSB3aGljaCBpdCBoYWQgYmVlbiBwcm9kdWNlZCwgaXQg\\nbWFkZSBubyBtZW50aW9uIG9mIEd1dGVuYmVyZy4KCiMjIExhdGVyIExpZmUK\\nCkluIDE0NjIsIGR1cmluZyBhIGNvbmZsaWN0IGJldHdlZW4gdHdvIGFyY2hi\\naXNob3BzLCBNYWlueiB3YXMgc2Fja2VkIGJ5IGFyY2hiaXNob3AgQWRvbHBo\\nIHZvbiBOYXNzYXUsIGFuZCBHdXRlbmJlcmcgd2FzIGV4aWxlZC4gQW4gb2xk\\nIG1hbiBieSBub3csIGhlIG1vdmVkIHRvIEVsdHZpbGxlIHdoZXJlIGhlIG1h\\neSBoYXZlIGluaXRpYXRlZCBhbmQgc3VwZXJ2aXNlZCBhIG5ldyBwcmludGlu\\nZyBwcmVzcyBiZWxvbmdpbmcgdG8gdGhlIGJyb3RoZXJzIEJlY2h0ZXJtw7xu\\nemUuCgpJbiBKYW51YXJ5IDE0NjUsIEd1dGVuYmVyZydzIGFjaGlldmVtZW50\\ncyB3ZXJlIHJlY29nbml6ZWQgYW5kIGhlIHdhcyBnaXZlbiB0aGUgdGl0bGUg\\nSG9mbWFubiAoZ2VudGxlbWFuIG9mIHRoZSBjb3VydCkgYnkgdm9uIE5hc3Nh\\ndS4gVGhpcyBob25vciBpbmNsdWRlZCBhIHN0aXBlbmQsIGFuIGFubnVhbCBj\\nb3VydCBvdXRmaXQsIGFzIHdlbGwgYXMgMiwxODAgbGl0cmVzIG9mIGdyYWlu\\nIGFuZCAyLDAwMCBsaXRyZXMgb2Ygd2luZSB0YXgtZnJlZS4gSXQgaXMgYmVs\\naWV2ZWQgaGUgbWF5IGhhdmUgbW92ZWQgYmFjayB0byBNYWlueiBhcm91bmQg\\ndGhpcyB0aW1lLCBidXQgdGhpcyBpcyBub3QgY2VydGFpbi4KCioqKgoKR3V0\\nZW5iZXJnIGRpZWQgaW4gMTQ2OCBhbmQgd2FzIGJ1cmllZCBpbiB0aGUgRnJh\\nbmNpc2NhbiBjaHVyY2ggYXQgTWFpbnosIGhpcyBjb250cmlidXRpb25zIGxh\\ncmdlbHkgdW5rbm93bi4gVGhpcyBjaHVyY2ggYW5kIHRoZSBjZW1ldGVyeSB3\\nZXJlIGxhdGVyIGRlc3Ryb3llZCwgYW5kIEd1dGVuYmVyZydzIGdyYXZlIGlz\\nIG5vdyBsb3N0LgoKSW4gMTUwNCwgaGUgd2FzIG1lbnRpb25lZCBhcyB0aGUg\\naW52ZW50b3Igb2YgdHlwb2dyYXBoeSBpbiBhIGJvb2sgYnkgUHJvZmVzc29y\\nIEl2byBXaXR0aWcuIEl0IHdhcyBub3QgdW50aWwgMTU2NyB0aGF0IHRoZSBm\\naXJzdCBwb3J0cmFpdCBvZiBHdXRlbmJlcmcsIGFsbW9zdCBjZXJ0YWlubHkg\\nYW4gaW1hZ2luYXJ5IHJlY29uc3RydWN0aW9uLCBhcHBlYXJlZCBpbiBIZWlu\\ncmljaCBQYW50YWxlb24ncyBiaW9ncmFwaHkgb2YgZmFtb3VzIEdlcm1hbnMu\\nCgojIyBQcmludGluZyBNZXRob2QgV2l0aCBNb3ZhYmxlIFR5cGUKCkd1dGVu\\nYmVyZydzIGVhcmx5IHByaW50aW5nIHByb2Nlc3MsIGFuZCB3aGF0IHRlc3Rz\\nIGhlIG1heSBoYXZlIG1hZGUgd2l0aCBtb3ZhYmxlIHR5cGUsIGFyZSBub3Qg\\na25vd24gaW4gZ3JlYXQgZGV0YWlsLiBIaXMgbGF0ZXIgQmlibGVzIHdlcmUg\\ncHJpbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIGhhdmUgcmVxdWlyZWQgbGFy\\nZ2UgcXVhbnRpdGllcyBvZiB0eXBlLCBzb21lIGVzdGltYXRlcyBzdWdnZXN0\\naW5nIGFzIG1hbnkgYXMgMTAwLDAwMCBpbmRpdmlkdWFsIHNvcnRzLiBTZXR0\\naW5nIGVhY2ggcGFnZSB3b3VsZCB0YWtlLCBwZXJoYXBzLCBoYWxmIGEgZGF5\\nLCBhbmQgY29uc2lkZXJpbmcgYWxsIHRoZSB3b3JrIGluIGxvYWRpbmcgdGhl\\nIHByZXNzLCBpbmtpbmcgdGhlIHR5cGUsIHB1bGxpbmcgdGhlIGltcHJlc3Np\\nb25zLCBoYW5naW5nIHVwIHRoZSBzaGVldHMsIGRpc3RyaWJ1dGluZyB0aGUg\\ndHlwZSwgZXRjLiwgaXQgaXMgdGhvdWdodCB0aGF0IHRoZSBHdXRlbmJlcmfi\\ngJNGdXN0IHNob3AgbWlnaHQgaGF2ZSBlbXBsb3llZCBhcyBtYW55IGFzIDI1\\nIGNyYWZ0c21lbi4KCiFbTW92YWJsZSBtZXRhbCB0eXBlLCBhbmQgY29tcG9z\\naW5nIHN0aWNrLCBkZXNjZW5kZWQgZnJvbSBHdXRlbmJlcmcncyBwcmVzcy4g\\nUGhvdG8gYnkgV2lsbGkgSGVpZGVsYmFjaC4gTGljZW5zZWQgdW5kZXIgQ0Mg\\nQlkgMi41XSgvbWVkaWEvbW92YWJsZS10eXBlLmpwZykKCipNb3ZhYmxlIG1l\\ndGFsIHR5cGUsIGFuZCBjb21wb3Npbmcgc3RpY2ssIGRlc2NlbmRlZCBmcm9t\\nIEd1dGVuYmVyZydzIHByZXNzLiBQaG90byBieSBXaWxsaSBIZWlkZWxiYWNo\\nLiBMaWNlbnNlZCB1bmRlciBDQyBCWSAyLjUqCgpHdXRlbmJlcmcncyB0ZWNo\\nbmlxdWUgb2YgbWFraW5nIG1vdmFibGUgdHlwZSByZW1haW5zIHVuY2xlYXIu\\nIEluIHRoZSBmb2xsb3dpbmcgZGVjYWRlcywgcHVuY2hlcyBhbmQgY29wcGVy\\nIG1hdHJpY2VzIGJlY2FtZSBzdGFuZGFyZGl6ZWQgaW4gdGhlIHJhcGlkbHkg\\nZGlzc2VtaW5hdGluZyBwcmludGluZyBwcmVzc2VzIGFjcm9zcyBFdXJvcGUu\\nIFdoZXRoZXIgR3V0ZW5iZXJnIHVzZWQgdGhpcyBzb3BoaXN0aWNhdGVkIHRl\\nY2huaXF1ZSBvciBhIHNvbWV3aGF0IHByaW1pdGl2ZSB2ZXJzaW9uIGhhcyBi\\nZWVuIHRoZSBzdWJqZWN0IG9mIGNvbnNpZGVyYWJsZSBkZWJhdGUuCgpJbiB0\\naGUgc3RhbmRhcmQgcHJvY2VzcyBvZiBtYWtpbmcgdHlwZSwgYSBoYXJkIG1l\\ndGFsIHB1bmNoIChtYWRlIGJ5IHB1bmNoY3V0dGluZywgd2l0aCB0aGUgbGV0\\ndGVyIGNhcnZlZCBiYWNrIHRvIGZyb250KSBpcyBoYW1tZXJlZCBpbnRvIGEg\\nc29mdGVyIGNvcHBlciBiYXIsIGNyZWF0aW5nIGEgbWF0cml4LiBUaGlzIGlz\\nIHRoZW4gcGxhY2VkIGludG8gYSBoYW5kLWhlbGQgbW91bGQgYW5kIGEgcGll\\nY2Ugb2YgdHlwZSwgb3IgInNvcnQiLCBpcyBjYXN0IGJ5IGZpbGxpbmcgdGhl\\nIG1vdWxkIHdpdGggbW9sdGVuIHR5cGUtbWV0YWw7IHRoaXMgY29vbHMgYWxt\\nb3N0IGF0IG9uY2UsIGFuZCB0aGUgcmVzdWx0aW5nIHBpZWNlIG9mIHR5cGUg\\nY2FuIGJlIHJlbW92ZWQgZnJvbSB0aGUgbW91bGQuIFRoZSBtYXRyaXggY2Fu\\nIGJlIHJldXNlZCB0byBjcmVhdGUgaHVuZHJlZHMsIG9yIHRob3VzYW5kcywg\\nb2YgaWRlbnRpY2FsIHNvcnRzIHNvIHRoYXQgdGhlIHNhbWUgY2hhcmFjdGVy\\nIGFwcGVhcmluZyBhbnl3aGVyZSB3aXRoaW4gdGhlIGJvb2sgd2lsbCBhcHBl\\nYXIgdmVyeSB1bmlmb3JtLCBnaXZpbmcgcmlzZSwgb3ZlciB0aW1lLCB0byB0\\naGUgZGV2ZWxvcG1lbnQgb2YgZGlzdGluY3Qgc3R5bGVzIG9mIHR5cGVmYWNl\\ncyBvciBmb250cy4gQWZ0ZXIgY2FzdGluZywgdGhlIHNvcnRzIGFyZSBhcnJh\\nbmdlZCBpbnRvIHR5cGUtY2FzZXMsIGFuZCB1c2VkIHRvIG1ha2UgdXAgcGFn\\nZXMgd2hpY2ggYXJlIGlua2VkIGFuZCBwcmludGVkLCBhIHByb2NlZHVyZSB3\\naGljaCBjYW4gYmUgcmVwZWF0ZWQgaHVuZHJlZHMsIG9yIHRob3VzYW5kcywg\\nb2YgdGltZXMuIFRoZSBzb3J0cyBjYW4gYmUgcmV1c2VkIGluIGFueSBjb21i\\naW5hdGlvbiwgZWFybmluZyB0aGUgcHJvY2VzcyB0aGUgbmFtZSBvZiDigJxt\\nb3ZhYmxlIHR5cGXigJ0uCgpUaGUgaW52ZW50aW9uIG9mIHRoZSBtYWtpbmcg\\nb2YgdHlwZXMgd2l0aCBwdW5jaCwgbWF0cml4IGFuZCBtb2xkIGhhcyBiZWVu\\nIHdpZGVseSBhdHRyaWJ1dGVkIHRvIEd1dGVuYmVyZy4gSG93ZXZlciwgcmVj\\nZW50IGV2aWRlbmNlIHN1Z2dlc3RzIHRoYXQgR3V0ZW5iZXJnJ3MgcHJvY2Vz\\ncyB3YXMgc29tZXdoYXQgZGlmZmVyZW50LiBJZiBoZSB1c2VkIHRoZSBwdW5j\\naCBhbmQgbWF0cml4IGFwcHJvYWNoLCBhbGwgaGlzIGxldHRlcnMgc2hvdWxk\\nIGhhdmUgYmVlbiBuZWFybHkgaWRlbnRpY2FsLCB3aXRoIHNvbWUgdmFyaWF0\\naW9ucyBkdWUgdG8gbWlzY2FzdGluZyBhbmQgaW5raW5nLiBIb3dldmVyLCB0\\naGUgdHlwZSB1c2VkIGluIEd1dGVuYmVyZydzIGVhcmxpZXN0IHdvcmsgc2hv\\nd3Mgb3RoZXIgdmFyaWF0aW9ucy4KCjxmaWd1cmU+Cgk8YmxvY2txdW90ZT4K\\nCQk8cD5JdCBpcyBhIHByZXNzLCBjZXJ0YWlubHksIGJ1dCBhIHByZXNzIGZy\\nb20gd2hpY2ggc2hhbGwgZmxvdyBpbiBpbmV4aGF1c3RpYmxlIHN0cmVhbXPi\\ngKYgVGhyb3VnaCBpdCwgZ29kIHdpbGwgc3ByZWFkIGhpcyB3b3JkLjwvcD4K\\nCQk8Zm9vdGVyPgoJCQk8Y2l0ZT7igJRKb2hhbm5lcyBHdXRlbmJlcmc8L2Np\\ndGU+CgkJPC9mb290ZXI+Cgk8L2Jsb2NrcXVvdGU+CjwvZmlndXJlPgoKSW4g\\nMjAwMSwgdGhlIHBoeXNpY2lzdCBCbGFpc2UgQWfDvGVyYSB5IEFyY2FzIGFu\\nZCBQcmluY2V0b24gbGlicmFyaWFuIFBhdWwgTmVlZGhhbSwgdXNlZCBkaWdp\\ndGFsIHNjYW5zIG9mIGEgUGFwYWwgYnVsbCBpbiB0aGUgU2NoZWlkZSBMaWJy\\nYXJ5LCBQcmluY2V0b24sIHRvIGNhcmVmdWxseSBjb21wYXJlIHRoZSBzYW1l\\nIGxldHRlcnMgKHR5cGVzKSBhcHBlYXJpbmcgaW4gZGlmZmVyZW50IHBhcnRz\\nIG9mIHRoZSBwcmludGVkIHRleHQuIFRoZSBpcnJlZ3VsYXJpdGllcyBpbiBH\\ndXRlbmJlcmcncyB0eXBlLCBwYXJ0aWN1bGFybHkgaW4gc2ltcGxlIGNoYXJh\\nY3RlcnMgc3VjaCBhcyB0aGUgaHlwaGVuLCBzdWdnZXN0ZWQgdGhhdCB0aGUg\\ndmFyaWF0aW9ucyBjb3VsZCBub3QgaGF2ZSBjb21lIGZyb20gZWl0aGVyIGlu\\nayBzbWVhciBvciBmcm9tIHdlYXIgYW5kIGRhbWFnZSBvbiB0aGUgcGllY2Vz\\nIG9mIG1ldGFsIG9uIHRoZSB0eXBlcyB0aGVtc2VsdmVzLiBXaGlsZSBzb21l\\nIGlkZW50aWNhbCB0eXBlcyBhcmUgY2xlYXJseSB1c2VkIG9uIG90aGVyIHBh\\nZ2VzLCBvdGhlciB2YXJpYXRpb25zLCBzdWJqZWN0ZWQgdG8gZGV0YWlsZWQg\\naW1hZ2UgYW5hbHlzaXMsIHN1Z2dlc3RlZCB0aGF0IHRoZXkgY291bGQgbm90\\nIGhhdmUgYmVlbiBwcm9kdWNlZCBmcm9tIHRoZSBzYW1lIG1hdHJpeC4gVHJh\\nbnNtaXR0ZWQgbGlnaHQgcGljdHVyZXMgb2YgdGhlIHBhZ2UgYWxzbyBhcHBl\\nYXJlZCB0byByZXZlYWwgc3Vic3RydWN0dXJlcyBpbiB0aGUgdHlwZSB0aGF0\\nIGNvdWxkIG5vdCBhcmlzZSBmcm9tIHRyYWRpdGlvbmFsIHB1bmNoY3V0dGlu\\nZyB0ZWNobmlxdWVzLiBUaGV5IGh5cG90aGVzaXplZCB0aGF0IHRoZSBtZXRo\\nb2QgbWF5IGhhdmUgaW52b2x2ZWQgaW1wcmVzc2luZyBzaW1wbGUgc2hhcGVz\\nIHRvIGNyZWF0ZSBhbHBoYWJldHMgaW4g4oCcY3VuZWlmb3Jt4oCdIHN0eWxl\\nIGluIGEgbWF0cml4IG1hZGUgb2Ygc29tZSBzb2Z0IG1hdGVyaWFsLCBwZXJo\\nYXBzIHNhbmQuIENhc3RpbmcgdGhlIHR5cGUgd291bGQgZGVzdHJveSB0aGUg\\nbW91bGQsIGFuZCB0aGUgbWF0cml4IHdvdWxkIG5lZWQgdG8gYmUgcmVjcmVh\\ndGVkIHRvIG1ha2UgZWFjaCBhZGRpdGlvbmFsIHNvcnQuIFRoaXMgY291bGQg\\nZXhwbGFpbiB0aGUgdmFyaWF0aW9ucyBpbiB0aGUgdHlwZSwgYXMgd2VsbCBh\\ncyB0aGUgc3Vic3RydWN0dXJlcyBvYnNlcnZlZCBpbiB0aGUgcHJpbnRlZCBp\\nbWFnZXMuCgpUaHVzLCB0aGV5IGZlZWwgdGhhdCDigJx0aGUgZGVjaXNpdmUg\\nZmFjdG9yIGZvciB0aGUgYmlydGggb2YgdHlwb2dyYXBoeeKAnSwgdGhlIHVz\\nZSBvZiByZXVzYWJsZSBtb3VsZHMgZm9yIGNhc3RpbmcgdHlwZSwgbWlnaHQg\\naGF2ZSBiZWVuIGEgbW9yZSBwcm9ncmVzc2l2ZSBwcm9jZXNzIHRoYW4gd2Fz\\nIHByZXZpb3VzbHkgdGhvdWdodC4gVGhleSBzdWdnZXN0IHRoYXQgdGhlIGFk\\nZGl0aW9uYWwgc3RlcCBvZiB1c2luZyB0aGUgcHVuY2ggdG8gY3JlYXRlIGEg\\nbW91bGQgdGhhdCBjb3VsZCBiZSByZXVzZWQgbWFueSB0aW1lcyB3YXMgbm90\\nIHRha2VuIHVudGlsIHR3ZW50eSB5ZWFycyBsYXRlciwgaW4gdGhlIDE0NzBz\\nLiBPdGhlcnMgaGF2ZSBub3QgYWNjZXB0ZWQgc29tZSBvciBhbGwgb2YgdGhl\\naXIgc3VnZ2VzdGlvbnMsIGFuZCBoYXZlIGludGVycHJldGVkIHRoZSBldmlk\\nZW5jZSBpbiBvdGhlciB3YXlzLCBhbmQgdGhlIHRydXRoIG9mIHRoZSBtYXR0\\nZXIgcmVtYWlucyB2ZXJ5IHVuY2VydGFpbi4KCkEgMTU2OCBoaXN0b3J5IGJ5\\nIEhhZHJpYW51cyBKdW5pdXMgb2YgSG9sbGFuZCBjbGFpbXMgdGhhdCB0aGUg\\nYmFzaWMgaWRlYSBvZiB0aGUgbW92YWJsZSB0eXBlIGNhbWUgdG8gR3V0ZW5i\\nZXJnIGZyb20gTGF1cmVucyBKYW5zem9vbiBDb3N0ZXIgdmlhIEZ1c3QsIHdo\\nbyB3YXMgYXBwcmVudGljZWQgdG8gQ29zdGVyIGluIHRoZSAxNDMwcyBhbmQg\\nbWF5IGhhdmUgYnJvdWdodCBzb21lIG9mIGhpcyBlcXVpcG1lbnQgZnJvbSBI\\nYWFybGVtIHRvIE1haW56LiBXaGlsZSBDb3N0ZXIgYXBwZWFycyB0byBoYXZl\\nIGV4cGVyaW1lbnRlZCB3aXRoIG1vdWxkcyBhbmQgY2FzdGFibGUgbWV0YWwg\\ndHlwZSwgdGhlcmUgaXMgbm8gZXZpZGVuY2UgdGhhdCBoZSBoYWQgYWN0dWFs\\nbHkgcHJpbnRlZCBhbnl0aGluZyB3aXRoIHRoaXMgdGVjaG5vbG9neS4gSGUg\\nd2FzIGFuIGludmVudG9yIGFuZCBhIGdvbGRzbWl0aC4gSG93ZXZlciwgdGhl\\ncmUgaXMgb25lIGluZGlyZWN0IHN1cHBvcnRlciBvZiB0aGUgY2xhaW0gdGhh\\ndCBDb3N0ZXIgbWlnaHQgYmUgdGhlIGludmVudG9yLiBUaGUgYXV0aG9yIG9m\\nIHRoZSBDb2xvZ25lIENocm9uaWNsZSBvZiAxNDk5IHF1b3RlcyBVbHJpY2gg\\nWmVsbCwgdGhlIGZpcnN0IHByaW50ZXIgb2YgQ29sb2duZSwgdGhhdCBwcmlu\\ndGluZyB3YXMgcGVyZm9ybWVkIGluIE1haW56IGluIDE0NTAsIGJ1dCB0aGF0\\nIHNvbWUgdHlwZSBvZiBwcmludGluZyBvZiBsb3dlciBxdWFsaXR5IGhhZCBw\\ncmV2aW91c2x5IG9jY3VycmVkIGluIHRoZSBOZXRoZXJsYW5kcy4gSG93ZXZl\\nciwgdGhlIGNocm9uaWNsZSBkb2VzIG5vdCBtZW50aW9uIHRoZSBuYW1lIG9m\\nIENvc3Rlciwgd2hpbGUgaXQgYWN0dWFsbHkgY3JlZGl0cyBHdXRlbmJlcmcg\\nYXMgdGhlICJmaXJzdCBpbnZlbnRvciBvZiBwcmludGluZyIgaW4gdGhlIHZl\\ncnkgc2FtZSBwYXNzYWdlIChmb2wuIDMxMikuIFRoZSBmaXJzdCBzZWN1cmVs\\neSBkYXRlZCBib29rIGJ5IER1dGNoIHByaW50ZXJzIGlzIGZyb20gMTQ3MSwg\\nYW5kIHRoZSBDb3N0ZXIgY29ubmVjdGlvbiBpcyB0b2RheSByZWdhcmRlZCBh\\ncyBhIG1lcmUgbGVnZW5kLgoKVGhlIDE5dGggY2VudHVyeSBwcmludGVyIGFu\\nZCB0eXBlZm91bmRlciBGb3VybmllciBMZSBKZXVuZSBzdWdnZXN0ZWQgdGhh\\ndCBHdXRlbmJlcmcgbWlnaHQgbm90IGhhdmUgYmVlbiB1c2luZyB0eXBlIGNh\\nc3Qgd2l0aCBhIHJldXNhYmxlIG1hdHJpeCwgYnV0IHBvc3NpYmx5IHdvb2Rl\\nbiB0eXBlcyB0aGF0IHdlcmUgY2FydmVkIGluZGl2aWR1YWxseS4gQSBzaW1p\\nbGFyIHN1Z2dlc3Rpb24gd2FzIG1hZGUgYnkgTmFzaCBpbiAyMDA0LiBUaGlz\\nIHJlbWFpbnMgcG9zc2libGUsIGFsYmVpdCBlbnRpcmVseSB1bnByb3Zlbi4K\\nCkl0IGhhcyBhbHNvIGJlZW4gcXVlc3Rpb25lZCB3aGV0aGVyIEd1dGVuYmVy\\nZyB1c2VkIG1vdmFibGUgdHlwZXMgYXQgYWxsLiBJbiAyMDA0LCBJdGFsaWFu\\nIHByb2Zlc3NvciBCcnVubyBGYWJiaWFuaSBjbGFpbWVkIHRoYXQgZXhhbWlu\\nYXRpb24gb2YgdGhlIDQyLWxpbmUgQmlibGUgcmV2ZWFsZWQgYW4gb3Zlcmxh\\ncHBpbmcgb2YgbGV0dGVycywgc3VnZ2VzdGluZyB0aGF0IEd1dGVuYmVyZyBk\\naWQgbm90IGluIGZhY3QgdXNlIG1vdmFibGUgdHlwZSAoaW5kaXZpZHVhbCBj\\nYXN0IGNoYXJhY3RlcnMpIGJ1dCByYXRoZXIgdXNlZCB3aG9sZSBwbGF0ZXMg\\nbWFkZSBmcm9tIGEgc3lzdGVtIHNvbWV3aGF0IGxpa2UgYSBtb2Rlcm4gdHlw\\nZXdyaXRlciwgd2hlcmVieSB0aGUgbGV0dGVycyB3ZXJlIHN0YW1wZWQgc3Vj\\nY2Vzc2l2ZWx5IGludG8gdGhlIHBsYXRlIGFuZCB0aGVuIHByaW50ZWQuIEhv\\nd2V2ZXIsIG1vc3Qgc3BlY2lhbGlzdHMgcmVnYXJkIHRoZSBvY2Nhc2lvbmFs\\nIG92ZXJsYXBwaW5nIG9mIHR5cGUgYXMgY2F1c2VkIGJ5IHBhcGVyIG1vdmVt\\nZW50IG92ZXIgcGllY2VzIG9mIHR5cGUgb2Ygc2xpZ2h0bHkgdW5lcXVhbCBo\\nZWlnaHQu\\n\",\n \"encoding\": \"base64\"\n}\n", - "status": 200 - }, - { - "method": "GET", - "url": "/repos/owner/repo/git/blobs/a532f0a9445cdf90a19c6812cff89d1674991774", - "headers": { - "Content-Type": "application/json; charset=utf-8", - "Server": "GitHub.com", - "Status": "200 OK", - "X-RateLimit-Limit": "5000", - "Cache-Control": "private, max-age=60, s-maxage=60", - "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP", - "X-OAuth-Scopes": "delete_repo, repo", - "X-Accepted-OAuth-Scopes": "", - "X-GitHub-Media-Type": "github.v3; format=json", - "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", - "Access-Control-Allow-Origin": "*", - "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", - "X-Frame-Options": "deny", - "X-Content-Type-Options": "nosniff", - "X-XSS-Protection": "1; mode=block", - "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", - "Content-Security-Policy": "default-src 'none'", - "content-length": "10650" - }, - "response": "{\n \"sha\": \"a532f0a9445cdf90a19c6812cff89d1674991774\",\n \"node_id\": \"MDQ6QmxvYjI1NTA3NzkxNDphNTMyZjBhOTQ0NWNkZjkwYTE5YzY4MTJjZmY4OWQxNjc0OTkxNzc0\",\n \"size\": 7465,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/a532f0a9445cdf90a19c6812cff89d1674991774\",\n \"content\": \"LS0tCnRpdGxlOiBIdW1hbmUgVHlwb2dyYXBoeSBpbiB0aGUgRGlnaXRhbCBB\\nZ2UKZGF0ZTogIjIwMTctMDgtMTlUMjI6NDA6MzIuMTY5WiIKdGVtcGxhdGU6\\nICJwb3N0IgpkcmFmdDogZmFsc2UKY2F0ZWdvcnk6ICJUeXBvZ3JhcGh5Igp0\\nYWdzOgogIC0gIkRlc2lnbiIKICAtICJUeXBvZ3JhcGh5IgogIC0gIldlYiBE\\nZXZlbG9wbWVudCIKZGVzY3JpcHRpb246ICJBbiBFc3NheSBvbiBUeXBvZ3Jh\\ncGh5IGJ5IEVyaWMgR2lsbCB0YWtlcyB0aGUgcmVhZGVyIGJhY2sgdG8gdGhl\\nIHllYXIgMTkzMC4gVGhlIHllYXIgd2hlbiBhIGNvbmZsaWN0IGJldHdlZW4g\\ndHdvIHdvcmxkcyBjYW1lIHRvIGl0cyB0ZXJtLiBUaGUgbWFjaGluZXMgb2Yg\\ndGhlIGluZHVzdHJpYWwgd29ybGQgZmluYWxseSB0b29rIG92ZXIgdGhlIGhh\\nbmRpY3JhZnRzLiIKY2Fub25pY2FsOiAnJwotLS0KCi0gW1RoZSBmaXJzdCB0\\ncmFuc2l0aW9uXSgjdGhlLWZpcnN0LXRyYW5zaXRpb24pCi0gW1RoZSBkaWdp\\ndGFsIGFnZV0oI3RoZS1kaWdpdGFsLWFnZSkKLSBbTG9zcyBvZiBodW1hbml0\\neSB0aHJvdWdoIHRyYW5zaXRpb25zXSgjbG9zcy1vZi1odW1hbml0eS10aHJv\\ndWdoLXRyYW5zaXRpb25zKQotIFtDaGFzaW5nIHBlcmZlY3Rpb25dKCNjaGFz\\naW5nLXBlcmZlY3Rpb24pCgpBbiBFc3NheSBvbiBUeXBvZ3JhcGh5IGJ5IEVy\\naWMgR2lsbCB0YWtlcyB0aGUgcmVhZGVyIGJhY2sgdG8gdGhlIHllYXIgMTkz\\nMC4gVGhlIHllYXIgd2hlbiBhIGNvbmZsaWN0IGJldHdlZW4gdHdvIHdvcmxk\\ncyBjYW1lIHRvIGl0cyB0ZXJtLiBUaGUgbWFjaGluZXMgb2YgdGhlIGluZHVz\\ndHJpYWwgd29ybGQgZmluYWxseSB0b29rIG92ZXIgdGhlIGhhbmRpY3JhZnRz\\nLgoKVGhlIHR5cG9ncmFwaHkgb2YgdGhpcyBpbmR1c3RyaWFsIGFnZSB3YXMg\\nbm8gbG9uZ2VyIGhhbmRjcmFmdGVkLiBNYXNzIHByb2R1Y3Rpb24gYW5kIHBy\\nb2ZpdCBiZWNhbWUgbW9yZSBpbXBvcnRhbnQuIFF1YW50aXR5IG1hdHRlcmVk\\nIG1vcmUgdGhhbiB0aGUgcXVhbGl0eS4gVGhlIGJvb2tzIGFuZCBwcmludGVk\\nIHdvcmtzIGluIGdlbmVyYWwgbG9zdCBhIHBhcnQgb2YgaXRzIGh1bWFuaXR5\\nLiBUaGUgdHlwZWZhY2VzIHdlcmUgbm90IHByb2R1Y2VkIGJ5IGNyYWZ0c21l\\nbiBhbnltb3JlLiBJdCB3YXMgdGhlIG1hY2hpbmVzIHByaW50aW5nIGFuZCB0\\neWluZyB0aGUgYm9va3MgdG9nZXRoZXIgbm93LiBUaGUgY3JhZnRzbWVuIGhh\\nZCB0byBsZXQgZ28gb2YgdGhlaXIgY3JhZnQgYW5kIGJlY2FtZSBhIGNvZyBp\\nbiB0aGUgcHJvY2Vzcy4gQW4gZXh0ZW5zaW9uIG9mIHRoZSBpbmR1c3RyaWFs\\nIG1hY2hpbmUuCgpCdXQgdGhlIHZpY3Rvcnkgb2YgdGhlIGluZHVzdHJpYWxp\\nc20gZGlkbuKAmXQgbWVhbiB0aGF0IHRoZSBjcmFmdHNtZW4gd2VyZSBjb21w\\nbGV0ZWx5IGV4dGluY3QuIFRoZSB0d28gd29ybGRzIGNvbnRpbnVlZCB0byBj\\nb2V4aXN0IGluZGVwZW5kZW50bHkuIEVhY2ggcmVjb2duaXNpbmcgdGhlIGdv\\nb2QgaW4gdGhlIG90aGVyIOKAlCB0aGUgcG93ZXIgb2YgaW5kdXN0cmlhbGlz\\nbSBhbmQgdGhlIGh1bWFuaXR5IG9mIGNyYWZ0c21hbnNoaXAuIFRoaXMgd2Fz\\nIHRoZSBzZWNvbmQgdHJhbnNpdGlvbiB0aGF0IHdvdWxkIHN0cmlwIHR5cG9n\\ncmFwaHkgb2YgYSBwYXJ0IG9mIGl0cyBodW1hbml0eS4gV2UgaGF2ZSB0byBn\\nbyA1MDAgeWVhcnMgYmFjayBpbiB0aW1lIHRvIG1lZXQgdGhlIGZpcnN0IG9u\\nZS4KCiMjIFRoZSBmaXJzdCB0cmFuc2l0aW9uCgpBIHNpbWlsYXIgY29uZmxp\\nY3QgZW1lcmdlZCBhZnRlciB0aGUgaW52ZW50aW9uIG9mIHRoZSBmaXJzdCBw\\ncmludGluZyBwcmVzcyBpbiBFdXJvcGUuIEpvaGFubmVzIEd1dGVuYmVyZyBp\\nbnZlbnRlZCBtb3ZhYmxlIHR5cGUgYW5kIHVzZWQgaXQgdG8gcHJvZHVjZSBk\\naWZmZXJlbnQgY29tcG9zaXRpb25zLiBIaXMgd29ya3Nob3AgY291bGQgcHJp\\nbnQgdXAgdG8gMjQwIGltcHJlc3Npb25zIHBlciBob3VyLiBVbnRpbCB0aGVu\\nLCB0aGUgYm9va3Mgd2VyZSBiZWluZyBjb3BpZWQgYnkgaGFuZC4gQWxsIHRo\\nZSBib29rcyB3ZXJlIGhhbmR3cml0dGVuIGFuZCBkZWNvcmF0ZWQgd2l0aCBo\\nYW5kIGRyYXduIG9ybmFtZW50cyBhbmQgZmlndXJlcy4gQSBwcm9jZXNzIG9m\\nIGNvcHlpbmcgYSBib29rIHdhcyBsb25nIGJ1dCBlYWNoIGJvb2ssIGV2ZW4g\\nYSBjb3B5LCB3YXMgYSB3b3JrIG9mIGFydC4KClRoZSBmaXJzdCBwcmludGVk\\nIGJvb2tzIHdlcmUsIGF0IGZpcnN0LCBwZXJjZWl2ZWQgYXMgaW5mZXJpb3Ig\\ndG8gdGhlIGhhbmR3cml0dGVuIG9uZXMuIFRoZXkgd2VyZSBzbWFsbGVyIGFu\\nZCBjaGVhcGVyIHRvIHByb2R1Y2UuIE1vdmFibGUgdHlwZSBwcm92aWRlZCB0\\naGUgcHJpbnRlcnMgd2l0aCBmbGV4aWJpbGl0eSB0aGF0IGFsbG93ZWQgdGhl\\nbSB0byBwcmludCBib29rcyBpbiBsYW5ndWFnZXMgb3RoZXIgdGhhbiBMYXRp\\nbi4gR2lsbCBkZXNjcmliZXMgdGhlIHRyYW5zaXRpb24gdG8gaW5kdXN0cmlh\\nbGlzbSBhcyBzb21ldGhpbmcgdGhhdCBwZW9wbGUgbmVlZGVkIGFuZCB3YW50\\nZWQuIFNvbWV0aGluZyBzaW1pbGFyIGhhcHBlbmVkIGFmdGVyIHRoZSBmaXJz\\ndCBwcmludGVkIGJvb2tzIGVtZXJnZWQuIFBlb3BsZSB3YW50ZWQgYm9va3Mg\\naW4gYSBsYW5ndWFnZSB0aGV5IHVuZGVyc3Rvb2QgYW5kIHRoZXkgd2FudGVk\\nIGJvb2tzIHRoZXkgY291bGQgdGFrZSB3aXRoIHRoZW0uIFRoZXkgd2VyZSBo\\ndW5ncnkgZm9yIGtub3dsZWRnZSBhbmQgcHJpbnRlZCBib29rcyBzYXRpc2Zp\\nZWQgdGhpcyBodW5nZXIuCgohWzQyLWxpbmUtYmlibGUuanBnXSgvbWVkaWEv\\nNDItbGluZS1iaWJsZS5qcGcpCgoqVGhlIDQy4oCTTGluZSBCaWJsZSwgcHJp\\nbnRlZCBieSBHdXRlbmJlcmcuKgoKQnV0LCB0aHJvdWdoIHRoaXMgdHJhbnNp\\ndGlvbiwgdGhlIGJvb2sgbG9zdCBhIGxhcmdlIHBhcnQgb2YgaXRzIGh1bWFu\\naXR5LiBUaGUgbWFjaGluZSB0b29rIG92ZXIgbW9zdCBvZiB0aGUgcHJvY2Vz\\ncyBidXQgY3JhZnRzbWFuc2hpcCB3YXMgc3RpbGwgYSBwYXJ0IG9mIGl0LiBU\\naGUgdHlwZWZhY2VzIHdlcmUgY3V0IG1hbnVhbGx5IGJ5IHRoZSBmaXJzdCBw\\ndW5jaCBjdXR0ZXJzLiBUaGUgcGFwZXIgd2FzIG1hZGUgYnkgaGFuZC4gVGhl\\nIGlsbHVzdHJhdGlvbnMgYW5kIG9ybmFtZW50cyB3ZXJlIHN0aWxsIGJlaW5n\\nIGhhbmQgZHJhd24uIFRoZXNlIHdlcmUgdGhlIHJlbWFpbnMgb2YgdGhlIGNy\\nYWZ0c21hbnNoaXAgdGhhdCB3ZW50IGFsbW9zdCBleHRpbmN0IGluIHRoZSB0\\naW1lcyBvZiBFcmljIEdpbGwuCgojIyBUaGUgZGlnaXRhbCBhZ2UKClRoZSBm\\naXJzdCB0cmFuc2l0aW9uIHRvb2sgYXdheSBhIGxhcmdlIHBhcnQgb2YgaHVt\\nYW5pdHkgZnJvbSB3cml0dGVuIGNvbW11bmljYXRpb24uIEluZHVzdHJpYWxp\\nc2F0aW9uLCB0aGUgc2Vjb25kIHRyYW5zaXRpb24gZGVzY3JpYmVkIGJ5IEVy\\naWMgR2lsbCwgdG9vayBhd2F5IG1vc3Qgb2Ygd2hhdCB3YXMgbGVmdC4gQnV0\\nIGl04oCZcyB0aGUgdGhpcmQgdHJhbnNpdGlvbiB0aGF0IHN0cmlwcGVkIGl0\\nIG5ha2VkLiBUeXBlZmFjZXMgYXJlIGZhY2VsZXNzIHRoZXNlIGRheXMuIFRo\\nZXnigJlyZSBqdXN0IGZvbnRzIG9uIG91ciBjb21wdXRlcnMuIEhhcmRseSBh\\nbnlvbmUga25vd3MgdGhlaXIgc3Rvcmllcy4gSGFyZGx5IGFueW9uZSBjYXJl\\ncy4gRmxpY2tpbmcgdGhyb3VnaCB0aG91c2FuZHMgb2YgdHlwZWZhY2VzIGFu\\nZCBmaW5kaW5nIHRoZSDigJxyaWdodCBvbmXigJ0gaXMgYSBtYXR0ZXIgb2Yg\\nbWludXRlcy4KCj4gSW4gdGhlIG5ldyBjb21wdXRlciBhZ2UgdGhlIHByb2xp\\nZmVyYXRpb24gb2YgdHlwZWZhY2VzIGFuZCB0eXBlIG1hbmlwdWxhdGlvbnMg\\ncmVwcmVzZW50cyBhIG5ldyBsZXZlbCBvZiB2aXN1YWwgcG9sbHV0aW9uIHRo\\ncmVhdGVuaW5nIG91ciBjdWx0dXJlLiBPdXQgb2YgdGhvdXNhbmRzIG9mIHR5\\ncGVmYWNlcywgYWxsIHdlIG5lZWQgYXJlIGEgZmV3IGJhc2ljIG9uZXMsIGFu\\nZCB0cmFzaCB0aGUgcmVzdC4KPgrigJQgTWFzc2ltbyBWaWduZWxsaQoKVHlw\\nb2dyYXBoeSBpcyBub3QgYWJvdXQgdHlwZWZhY2VzLiBJdOKAmXMgbm90IGFi\\nb3V0IHdoYXQgbG9va3MgYmVzdCwgaXTigJlzIGFib3V0IHdoYXQgZmVlbHMg\\ncmlnaHQuIFdoYXQgY29tbXVuaWNhdGVzIHRoZSBtZXNzYWdlIGJlc3QuIFR5\\ncG9ncmFwaHksIGluIGl0cyBlc3NlbmNlLCBpcyBhYm91dCB0aGUgbWVzc2Fn\\nZS4g4oCcVHlwb2dyYXBoaWNhbCBkZXNpZ24gc2hvdWxkIHBlcmZvcm0gb3B0\\naWNhbGx5IHdoYXQgdGhlIHNwZWFrZXIgY3JlYXRlcyB0aHJvdWdoIHZvaWNl\\nIGFuZCBnZXN0dXJlIG9mIGhpcyB0aG91Z2h0cy7igJ0sIGFzIEVsIExpc3Np\\ndHpreSwgYSBmYW1vdXMgUnVzc2lhbiB0eXBvZ3JhcGhlciwgcHV0IGl0LgoK\\nIyMgTG9zcyBvZiBodW1hbml0eSB0aHJvdWdoIHRyYW5zaXRpb25zCgpFYWNo\\nIHRyYW5zaXRpb24gdG9vayBhd2F5IGEgcGFydCBvZiBodW1hbml0eSBmcm9t\\nIHdyaXR0ZW4gbGFuZ3VhZ2UuIEhhbmR3cml0dGVuIGJvb2tzIGJlaW5nIHRo\\nZSBtb3N0IGh1bWFuZSBmb3JtIGFuZCB0aGUgZGlnaXRhbCB0eXBlZmFjZXMg\\nYmVpbmcgdGhlIGxlYXN0LiBPdmVydXNlIG9mIEhlbHZldGljYSBpcyBhIGdv\\nb2QgZXhhbXBsZS4gTWVzc2FnZXMgYXJlIGJlaW5nIHRvbGQgaW4gYSB0eXBl\\nZmFjZSBqdXN0IGJlY2F1c2UgaXTigJlzIGEgc2FmZSBvcHRpb24uIEl04oCZ\\ncyBhbHdheXMgdGhlcmUuIEV2ZXJ5b25lIGtub3dzIGl0IGJ1dCB5ZXQsIG5v\\nYm9keSBrbm93cyBpdC4gU3RvcCBzb21lb25lIG9uIHRoZSBzdHJlZXQgYW5k\\nIGFzayBoaW0gd2hhdCBIZWx2ZXRpY2EgaXM/IEFzayBhIGRlc2lnbmVyIHRo\\nZSBzYW1lIHF1ZXN0aW9uLiBBc2sgaGltIHdoZXJlIGl0IGNhbWUgZnJvbSwg\\nd2hlbiwgd2h5IGFuZCB3aG8gZGVzaWduZWQgaXQuIE1vc3Qgb2YgdGhlbSB3\\naWxsIGZhaWwgdG8gYW5zd2VyIHRoZXNlIHF1ZXN0aW9ucy4gTW9zdCBvZiB0\\naGVtIHVzZWQgaXQgaW4gdGhlaXIgcHJlY2lvdXMgcHJvamVjdHMgYnV0IHRo\\nZXkgc3RpbGwgZG9u4oCZdCBzcG90IGl0IGluIHRoZSBzdHJlZXQuCgo8Zmln\\ndXJlPgoJPGJsb2NrcXVvdGU+CgkJPHA+S25vd2xlZGdlIG9mIHRoZSBxdWFs\\naXR5IG9mIGEgdHlwZWZhY2UgaXMgb2YgdGhlIGdyZWF0ZXN0IGltcG9ydGFu\\nY2UgZm9yIHRoZSBmdW5jdGlvbmFsLCBhZXN0aGV0aWMgYW5kIHBzeWNob2xv\\nZ2ljYWwgZWZmZWN0LjwvcD4KCQk8Zm9vdGVyPgoJCQk8Y2l0ZT7igJQgSm9z\\nZWYgTXVlbGxlci1Ccm9ja21hbm48L2NpdGU+CgkJPC9mb290ZXI+Cgk8L2Js\\nb2NrcXVvdGU+CjwvZmlndXJlPgoKVHlwZWZhY2VzIGRvbuKAmXQgbG9vayBo\\nYW5kbWFkZSB0aGVzZSBkYXlzLiBBbmQgdGhhdOKAmXMgYWxsIHJpZ2h0LiBU\\naGV5IGRvbuKAmXQgaGF2ZSB0by4gSW5kdXN0cmlhbGlzbSB0b29rIHRoYXQg\\nYXdheSBmcm9tIHRoZW0gYW5kIHdl4oCZcmUgZmluZSB3aXRoIGl0LiBXZeKA\\nmXZlIHRyYWRlZCB0aGF0IHBhcnQgb2YgaHVtYW5pdHkgZm9yIGEgcHJvY2Vz\\ncyB0aGF0IHByb2R1Y2VzIG1vcmUgYm9va3MgdGhhdCBhcmUgZWFzaWVyIHRv\\nIHJlYWQuIFRoYXQgY2Fu4oCZdCBiZSBiYWQuIEFuZCBpdCBpc27igJl0LgoK\\nPiBIdW1hbmUgdHlwb2dyYXBoeSB3aWxsIG9mdGVuIGJlIGNvbXBhcmF0aXZl\\nbHkgcm91Z2ggYW5kIGV2ZW4gdW5jb3V0aDsgYnV0IHdoaWxlIGEgY2VydGFp\\nbiB1bmNvdXRobmVzcyBkb2VzIG5vdCBzZXJpb3VzbHkgbWF0dGVyIGluIGh1\\nbWFuZSB3b3JrcywgdW5jb3V0aG5lc3MgaGFzIG5vIGV4Y3VzZSB3aGF0ZXZl\\nciBpbiB0aGUgcHJvZHVjdGlvbnMgb2YgdGhlIG1hY2hpbmUuCj4KPiDigJQg\\nRXJpYyBHaWxsCgpXZeKAmXZlIGNvbWUgY2xvc2UgdG8g4oCccGVyZmVjdGlv\\nbuKAnSBpbiB0aGUgbGFzdCBmaXZlIGNlbnR1cmllcy4gVGhlIGxldHRlcnMg\\nYXJlIGNyaXNwIGFuZCB3aXRob3V0IHJvdWdoIGVkZ2VzLiBXZSBwcmludCBv\\ndXIgY29tcG9zaXRpb25zIHdpdGggaGlnaOKAk3ByZWNpc2lvbiBwcmludGVy\\ncyBvbiBhIGhpZ2ggcXVhbGl0eSwgbWFjaGluZSBtYWRlIHBhcGVyLgoKIVt0\\neXBlLXRocm91Z2gtdGltZS5qcGddKC9tZWRpYS90eXBlLXRocm91Z2gtdGlt\\nZS5qcGcpCgoqVHlwZSB0aHJvdWdoIDUgY2VudHVyaWVzLioKCldlIGxvc3Qg\\nYSBwYXJ0IG9mIG91cnNlbHZlcyBiZWNhdXNlIG9mIHRoaXMgY2hhc2UgYWZ0\\nZXIgcGVyZmVjdGlvbi4gV2UgZm9yZ290IGFib3V0IHRoZSBjcmFmdHNtYW5z\\naGlwIGFsb25nIHRoZSB3YXkuIEFuZCB0aGUgd29yc3QgcGFydCBpcyB0aGF0\\nIHdlIGRvbuKAmXQgY2FyZS4gVGhlIHRyYW5zaXRpb24gdG8gdGhlIGRpZ2l0\\nYWwgYWdlIG1hZGUgdGhhdCBjbGVhci4gV2UgY2hvb3NlIHR5cGVmYWNlcyBs\\naWtlIGNsdWVsZXNzIHpvbWJpZXMuIFRoZXJl4oCZcyBubyBtZWFuaW5nIGlu\\nIG91ciB3b3JrLiBUeXBlIHNpemVzLCBsZWFkaW5nLCBtYXJnaW5z4oCmIEl0\\n4oCZcyBhbGwganVzdCBhIGZldyBjbGlja3Mgb3IgbGluZXMgb2YgY29kZS4g\\nVGhlIG1lc3NhZ2UgaXNu4oCZdCBpbXBvcnRhbnQgYW55bW9yZS4gVGhlcmXi\\ngJlzIG5vIG1vcmUg4oCcd2h54oCdIGJlaGluZCB0aGUg4oCcd2hhdOKAnS4K\\nCiMjIENoYXNpbmcgcGVyZmVjdGlvbgoKSHVtYW4gYmVpbmdzIGFyZW7igJl0\\nIHBlcmZlY3QuIFBlcmZlY3Rpb24gaXMgc29tZXRoaW5nIHRoYXQgd2lsbCBh\\nbHdheXMgZWx1ZGUgdXMuIFRoZXJlIHdpbGwgYWx3YXlzIGJlIGEgc21hbGwg\\ncGFydCBvZiBodW1hbml0eSBpbiBldmVyeXRoaW5nIHdlIGRvLiBObyBtYXR0\\nZXIgaG93IHNtYWxsIHRoYXQgcGFydCwgd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0\\naGF0IGl0IHRyYW5zY2VuZHMgdGhlIGxpbWl0cyBvZiB0aGUgbWVkaXVtLiBX\\nZSBoYXZlIHRvIHRoaW5rIGFib3V0IHRoZSBtZXNzYWdlIGZpcnN0LiBXaGF0\\nIHR5cGVmYWNlIHNob3VsZCB3ZSB1c2UgYW5kIHdoeT8gRG9lcyB0aGUgdHlw\\nZWZhY2UgbWF0Y2ggdGhlIG1lc3NhZ2UgYW5kIHdoYXQgd2Ugd2FudCB0byBj\\nb21tdW5pY2F0ZSB3aXRoIGl0PyBXaGF0IHdpbGwgYmUgdGhlIGxlYWRpbmcg\\nYW5kIHdoeT8gV2lsbCB0aGVyZSBiZSBtb3JlIHR5cGVmYWNlcyBpbiBvdXIg\\nZGVzaWduPyBPbiB3aGF0IGdyb3VuZCB3aWxsIHRoZXkgYmUgY29tYmluZWQ/\\nIFdoYXQgbWFrZXMgb3VyIGRlc2lnbiB1bmlxdWUgYW5kIHdoeT8gVGhpcyBp\\ncyB0aGUgcGFydCBvZiBodW1hbml0eSB0aGF0IGlzIGxlZnQgaW4gdHlwb2dy\\nYXBoeS4gSXQgbWlnaHQgYmUgdGhlIGxhc3QgcGFydC4gQXJlIHdlIHJlYWxs\\neSBnb2luZyB0byBnaXZlIGl0IHVwPwoKKk9yaWdpbmFsbHkgcHVibGlzaGVk\\nIGJ5IFtNYXRlaiBMYXRpbl0oaHR0cDovL21hdGVqbGF0aW4uY28udWsvKSBv\\nbiBbTWVkaXVtXShodHRwczovL21lZGl1bS5jb20vZGVzaWduLW5vdGVzL2h1\\nbWFuZS10eXBvZ3JhcGh5LWluLXRoZS1kaWdpdGFsLWFnZS05YmQ1YzE2MTk5\\nYmQ/cmVmPXdlYmRlc2lnbmVybmV3cy5jb20jLmx5Z284MnoweCkuKg==\\n\",\n \"encoding\": \"base64\"\n}\n", + "response": "{\"sha\":\"34892575e216c06e757093f036bd8e057c78a52f\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/34892575e216c06e757093f036bd8e057c78a52f\",\"tree\":[{\"path\":\"2016-01-09---Perfecting-the-Art-of-Perfection.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"6d51a38aed7139d2117724b1e307657b6ff2d043\",\"size\":1707,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/6d51a38aed7139d2117724b1e307657b6ff2d043\"},{\"path\":\"2016-01-12---The-Origins-of-Social-Stationery-Lettering.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"d0582dd245a3f408fb3fe2333bf01400007476e9\",\"size\":2565,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/d0582dd245a3f408fb3fe2333bf01400007476e9\"},{\"path\":\"2016-02-02---A-Brief-History-of-Typography.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"0eea554365f002d0f1572af9a58522d335a794d5\",\"size\":2786,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/0eea554365f002d0f1572af9a58522d335a794d5\"},{\"path\":\"2017-18-08---The-Birth-of-Movable-Type.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"44f78c474d04273185a95821426f75affc9b0044\",\"size\":16071,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/44f78c474d04273185a95821426f75affc9b0044\"},{\"path\":\"2017-19-08---Humane-Typography-in-the-Digital-Age.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"a532f0a9445cdf90a19c6812cff89d1674991774\",\"size\":7465,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/a532f0a9445cdf90a19c6812cff89d1674991774\"}],\"truncated\":false}", "status": 200 }, { @@ -175,35 +123,9 @@ "X-XSS-Protection": "1; mode=block", "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", "Content-Security-Policy": "default-src 'none'", - "content-length": "4202" + "content-length": "4201" }, - "response": "{\n \"sha\": \"0eea554365f002d0f1572af9a58522d335a794d5\",\n \"node_id\": \"MDQ6QmxvYjI1NTA3NzkxNDowZWVhNTU0MzY1ZjAwMmQwZjE1NzJhZjlhNTg1MjJkMzM1YTc5NGQ1\",\n \"size\": 2786,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/0eea554365f002d0f1572af9a58522d335a794d5\",\n \"content\": \"LS0tCnRpdGxlOiAiQSBCcmllZiBIaXN0b3J5IG9mIFR5cG9ncmFwaHkiCmRh\\ndGU6ICIyMDE2LTAyLTAyVDIyOjQwOjMyLjE2OVoiCnRlbXBsYXRlOiAicG9z\\ndCIKZHJhZnQ6IGZhbHNlCmNhdGVnb3J5OiAiRGVzaWduIEluc3BpcmF0aW9u\\nIgp0YWdzOgogIC0gIkxpbm90eXBlIgogIC0gIk1vbm90eXBlIgogIC0gIkhp\\nc3Rvcnkgb2YgdHlwb2dyYXBoeSIKICAtICJIZWx2ZXRpY2EiCmRlc2NyaXB0\\naW9uOiAiTW9yYmkgaW4gc2VtIHF1aXMgZHVpIHBsYWNlcmF0IG9ybmFyZS4g\\nUGVsbGVudGVzcXVlIG9kaW8gbmlzaSwgZXVpc21vZCBpbiwgcGhhcmV0cmEg\\nYSwgdWx0cmljaWVzIGluLCBkaWFtLiBTZWQgYXJjdS4gQ3JhcyBjb25zZXF1\\nYXQuIgpjYW5vbmljYWw6ICcnCi0tLQoKKipQZWxsZW50ZXNxdWUgaGFiaXRh\\nbnQgbW9yYmkgdHJpc3RpcXVlKiogc2VuZWN0dXMgZXQgbmV0dXMgZXQgbWFs\\nZXN1YWRhIGZhbWVzIGFjIHR1cnBpcyBlZ2VzdGFzLiBWZXN0aWJ1bHVtIHRv\\ncnRvciBxdWFtLCBmZXVnaWF0IHZpdGFlLCB1bHRyaWNpZXMgZWdldCwgdGVt\\ncG9yIHNpdCBhbWV0LCBhbnRlLiBEb25lYyBldSBsaWJlcm8gc2l0IGFtZXQg\\ncXVhbSBlZ2VzdGFzIHNlbXBlci4gKkFlbmVhbiB1bHRyaWNpZXMgbWkgdml0\\nYWUgZXN0LiogTWF1cmlzIHBsYWNlcmF0IGVsZWlmZW5kIGxlby4gUXVpc3F1\\nZSBzaXQgYW1ldCBlc3QgZXQgc2FwaWVuIHVsbGFtY29ycGVyIHBoYXJldHJh\\nLiAKClZlc3RpYnVsdW0gZXJhdCB3aXNpLCBjb25kaW1lbnR1bSBzZWQsIGNv\\nbW1vZG8gdml0YWUsIG9ybmFyZSBzaXQgYW1ldCwgd2lzaS4gQWVuZWFuIGZl\\ncm1lbnR1bSwgZWxpdCBlZ2V0IHRpbmNpZHVudCBjb25kaW1lbnR1bSwgZXJv\\ncyBpcHN1bSBydXRydW0gb3JjaSwgc2FnaXR0aXMgdGVtcHVzIGxhY3VzIGVu\\naW0gYWMgZHVpLiAgW0RvbmVjIG5vbiBlbmltXSgjKSBpbiB0dXJwaXMgcHVs\\ndmluYXIgZmFjaWxpc2lzLgoKIVtOdWxsYSBmYXVjaWJ1cyB2ZXN0aWJ1bHVt\\nIGVyb3MgaW4gdGVtcHVzLiBWZXN0aWJ1bHVtIHRlbXBvciBpbXBlcmRpZXQg\\ndmVsaXQgbmVjIGRhcGlidXNdKC9tZWRpYS9pbWFnZS0wLmpwZykKCiMjIEhl\\nYWRlciBMZXZlbCAyCgorIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBj\\nb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LgorIEFsaXF1YW0gdGluY2lk\\ndW50IG1hdXJpcyBldSByaXN1cy4KCkRvbmVjIG5vbiBlbmltIGluIHR1cnBp\\ncyBwdWx2aW5hciBmYWNpbGlzaXMuIFV0IGZlbGlzLiBQcmFlc2VudCBkYXBp\\nYnVzLCBuZXF1ZSBpZCBjdXJzdXMgZmF1Y2lidXMsIHRvcnRvciBuZXF1ZSBl\\nZ2VzdGFzIGF1Z3VlLCBldSB2dWxwdXRhdGUgbWFnbmEgZXJvcyBldSBlcmF0\\nLiBBbGlxdWFtIGVyYXQgdm9sdXRwYXQuIAoKPGZpZ3VyZT4KCTxibG9ja3F1\\nb3RlPgoJCTxwPkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0\\nZXR1ciBhZGlwaXNjaW5nIGVsaXQuIFZpdmFtdXMgbWFnbmEuIENyYXMgaW4g\\nbWkgYXQgZmVsaXMgYWxpcXVldCBjb25ndWUuIFV0IGEgZXN0IGVnZXQgbGln\\ndWxhIG1vbGVzdGllIGdyYXZpZGEuIEN1cmFiaXR1ciBtYXNzYS4gRG9uZWMg\\nZWxlaWZlbmQsIGxpYmVybyBhdCBzYWdpdHRpcyBtb2xsaXMsIHRlbGx1cyBl\\nc3QgbWFsZXN1YWRhIHRlbGx1cywgYXQgbHVjdHVzIHR1cnBpcyBlbGl0IHNp\\ndCBhbWV0IHF1YW0uIFZpdmFtdXMgcHJldGl1bSBvcm5hcmUgZXN0LjwvcD4K\\nCQk8Zm9vdGVyPgoJCQk8Y2l0ZT7igJQgQWxpcXVhbSB0aW5jaWR1bnQgbWF1\\ncmlzIGV1IHJpc3VzLjwvY2l0ZT4KCQk8L2Zvb3Rlcj4KCTwvYmxvY2txdW90\\nZT4KPC9maWd1cmU+CgojIyMgSGVhZGVyIExldmVsIDMKCisgTG9yZW0gaXBz\\ndW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBhZGlwaXNjaW5nIGVs\\naXQuCisgQWxpcXVhbSB0aW5jaWR1bnQgbWF1cmlzIGV1IHJpc3VzLgoKUGVs\\nbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cyBl\\ndCBuZXR1cyBldCBtYWxlc3VhZGEgZmFtZXMgYWMgdHVycGlzIGVnZXN0YXMu\\nIFZlc3RpYnVsdW0gdG9ydG9yIHF1YW0sIGZldWdpYXQgdml0YWUsIHVsdHJp\\nY2llcyBlZ2V0LCB0ZW1wb3Igc2l0IGFtZXQsIGFudGUuIERvbmVjIGV1IGxp\\nYmVybyBzaXQgYW1ldCBxdWFtIGVnZXN0YXMgc2VtcGVyLiBBZW5lYW4gdWx0\\ncmljaWVzIG1pIHZpdGFlIGVzdC4gTWF1cmlzIHBsYWNlcmF0IGVsZWlmZW5k\\nIGxlby4gUXVpc3F1ZSBzaXQgYW1ldCBlc3QgZXQgc2FwaWVuIHVsbGFtY29y\\ncGVyIHBoYXJldHJhLgoKYGBgY3NzCiNoZWFkZXIgaDEgYSB7CiAgZGlzcGxh\\neTogYmxvY2s7CiAgd2lkdGg6IDMwMHB4OwogIGhlaWdodDogODBweDsKfQpg\\nYGAKClZlc3RpYnVsdW0gZXJhdCB3aXNpLCBjb25kaW1lbnR1bSBzZWQsIGNv\\nbW1vZG8gdml0YWUsIG9ybmFyZSBzaXQgYW1ldCwgd2lzaS4gQWVuZWFuIGZl\\ncm1lbnR1bSwgZWxpdCBlZ2V0IHRpbmNpZHVudCBjb25kaW1lbnR1bSwgZXJv\\ncyBpcHN1bSBydXRydW0gb3JjaSwgc2FnaXR0aXMgdGVtcHVzIGxhY3VzIGVu\\naW0gYWMgZHVpLiBEb25lYyBub24gZW5pbSBpbiB0dXJwaXMgcHVsdmluYXIg\\nZmFjaWxpc2lzLiBVdCBmZWxpcy4gUHJhZXNlbnQgZGFwaWJ1cywgbmVxdWUg\\naWQgY3Vyc3VzIGZhdWNpYnVzLCB0b3J0b3IgbmVxdWUgZWdlc3RhcyBhdWd1\\nZSwgZXUgdnVscHV0YXRlIG1hZ25hIGVyb3MgZXUgZXJhdC4gQWxpcXVhbSBl\\ncmF0IHZvbHV0cGF0LiBOYW0gZHVpIG1pLCB0aW5jaWR1bnQgcXVpcywgYWNj\\ndW1zYW4gcG9ydHRpdG9yLCBmYWNpbGlzaXMgbHVjdHVzLCBtZXR1cy4=\\n\",\n \"encoding\": \"base64\"\n}\n", - "status": 200 - }, - { - "method": "GET", - "url": "/repos/owner/repo/git/blobs/6d51a38aed7139d2117724b1e307657b6ff2d043", - "headers": { - "Content-Type": "application/json; charset=utf-8", - "Server": "GitHub.com", - "Status": "200 OK", - "X-RateLimit-Limit": "5000", - "Cache-Control": "private, max-age=60, s-maxage=60", - "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP", - "X-OAuth-Scopes": "delete_repo, repo", - "X-Accepted-OAuth-Scopes": "", - "X-GitHub-Media-Type": "github.v3; format=json", - "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", - "Access-Control-Allow-Origin": "*", - "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", - "X-Frame-Options": "deny", - "X-Content-Type-Options": "nosniff", - "X-XSS-Protection": "1; mode=block", - "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", - "Content-Security-Policy": "default-src 'none'", - "content-length": "2714" - }, - "response": "{\n \"sha\": \"6d51a38aed7139d2117724b1e307657b6ff2d043\",\n \"node_id\": \"MDQ6QmxvYjI1NTA3NzkxNDo2ZDUxYTM4YWVkNzEzOWQyMTE3NzI0YjFlMzA3NjU3YjZmZjJkMDQz\",\n \"size\": 1707,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/6d51a38aed7139d2117724b1e307657b6ff2d043\",\n \"content\": \"LS0tCnRpdGxlOiBQZXJmZWN0aW5nIHRoZSBBcnQgb2YgUGVyZmVjdGlvbgpk\\nYXRlOiAiMjAxNi0wOS0wMVQyMzo0NjozNy4xMjFaIgp0ZW1wbGF0ZTogInBv\\nc3QiCmRyYWZ0OiBmYWxzZQpjYXRlZ29yeTogIkRlc2lnbiBJbnNwaXJhdGlv\\nbiIKdGFnczoKICAtICJIYW5kd3JpdGluZyIKICAtICJMZWFybmluZyB0byB3\\ncml0ZSIKZGVzY3JpcHRpb246ICJRdWlzcXVlIGN1cnN1cywgbWV0dXMgdml0\\nYWUgcGhhcmV0cmEgYXVjdG9yLCBzZW0gbWFzc2EgbWF0dGlzIHNlbSwgYXQg\\naW50ZXJkdW0gbWFnbmEgYXVndWUgZWdldCBkaWFtLiBWZXN0aWJ1bHVtIGFu\\ndGUgaXBzdW0gcHJpbWlzIGluIGZhdWNpYnVzIG9yY2kgbHVjdHVzIGV0IHVs\\ndHJpY2VzIHBvc3VlcmUgY3ViaWxpYSBDdXJhZTsgTW9yYmkgbGFjaW5pYSBt\\nb2xlc3RpZSBkdWkuIFByYWVzZW50IGJsYW5kaXQgZG9sb3IuIFNlZCBub24g\\ncXVhbS4gSW4gdmVsIG1pIHNpdCBhbWV0IGF1Z3VlIGNvbmd1ZSBlbGVtZW50\\ndW0uIgpjYW5vbmljYWw6ICcnCi0tLQoKUXVpc3F1ZSBjdXJzdXMsIG1ldHVz\\nIHZpdGFlIHBoYXJldHJhIGF1Y3Rvciwgc2VtIG1hc3NhIG1hdHRpcyBzZW0s\\nIGF0IGludGVyZHVtIG1hZ25hIGF1Z3VlIGVnZXQgZGlhbS4gVmVzdGlidWx1\\nbSBhbnRlIGlwc3VtIHByaW1pcyBpbiBmYXVjaWJ1cyBvcmNpIGx1Y3R1cyBl\\ndCB1bHRyaWNlcyBwb3N1ZXJlIGN1YmlsaWEgQ3VyYWU7IE1vcmJpIGxhY2lu\\naWEgbW9sZXN0aWUgZHVpLiBQcmFlc2VudCBibGFuZGl0IGRvbG9yLiBTZWQg\\nbm9uIHF1YW0uIEluIHZlbCBtaSBzaXQgYW1ldCBhdWd1ZSBjb25ndWUgZWxl\\nbWVudHVtLgoKIVtOdWxsYSBmYXVjaWJ1cyB2ZXN0aWJ1bHVtIGVyb3MgaW4g\\ndGVtcHVzLiBWZXN0aWJ1bHVtIHRlbXBvciBpbXBlcmRpZXQgdmVsaXQgbmVj\\nIGRhcGlidXNdKC9tZWRpYS9pbWFnZS0yLmpwZykKClBlbGxlbnRlc3F1ZSBo\\nYWJpdGFudCBtb3JiaSB0cmlzdGlxdWUgc2VuZWN0dXMgZXQgbmV0dXMgZXQg\\nbWFsZXN1YWRhIGZhbWVzIGFjIHR1cnBpcyBlZ2VzdGFzLiBWZXN0aWJ1bHVt\\nIHRvcnRvciBxdWFtLCBmZXVnaWF0IHZpdGFlLCB1bHRyaWNpZXMgZWdldCwg\\ndGVtcG9yIHNpdCBhbWV0LCBhbnRlLiBEb25lYyBldSBsaWJlcm8gc2l0IGFt\\nZXQgcXVhbSBlZ2VzdGFzIHNlbXBlci4gQWVuZWFuIHVsdHJpY2llcyBtaSB2\\naXRhZSBlc3QuIE1hdXJpcyBwbGFjZXJhdCBlbGVpZmVuZCBsZW8uIFF1aXNx\\ndWUgc2l0IGFtZXQgZXN0IGV0IHNhcGllbiB1bGxhbWNvcnBlciBwaGFyZXRy\\nYS4gVmVzdGlidWx1bSBlcmF0IHdpc2ksIGNvbmRpbWVudHVtIHNlZCwgY29t\\nbW9kbyB2aXRhZSwgb3JuYXJlIHNpdCBhbWV0LCB3aXNpLiBBZW5lYW4gZmVy\\nbWVudHVtLCBlbGl0IGVnZXQgdGluY2lkdW50IGNvbmRpbWVudHVtLCBlcm9z\\nIGlwc3VtIHJ1dHJ1bSBvcmNpLCBzYWdpdHRpcyB0ZW1wdXMgbGFjdXMgZW5p\\nbSBhYyBkdWkuIERvbmVjIG5vbiBlbmltIGluIHR1cnBpcyBwdWx2aW5hciBm\\nYWNpbGlzaXMuIFV0IGZlbGlzLiAKClByYWVzZW50IGRhcGlidXMsIG5lcXVl\\nIGlkIGN1cnN1cyBmYXVjaWJ1cywgdG9ydG9yIG5lcXVlIGVnZXN0YXMgYXVn\\ndWUsIGV1IHZ1bHB1dGF0ZSBtYWduYSBlcm9zIGV1IGVyYXQuIEFsaXF1YW0g\\nZXJhdCB2b2x1dHBhdC4gTmFtIGR1aSBtaSwgdGluY2lkdW50IHF1aXMsIGFj\\nY3Vtc2FuIHBvcnR0aXRvciwgZmFjaWxpc2lzIGx1Y3R1cywgbWV0dXMu\\n\",\n \"encoding\": \"base64\"\n}\n", + "response": "{\"sha\":\"0eea554365f002d0f1572af9a58522d335a794d5\",\"node_id\":\"MDQ6QmxvYjI4Njc1NjgzMzowZWVhNTU0MzY1ZjAwMmQwZjE1NzJhZjlhNTg1MjJkMzM1YTc5NGQ1\",\"size\":2786,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/0eea554365f002d0f1572af9a58522d335a794d5\",\"content\":\"LS0tCnRpdGxlOiAiQSBCcmllZiBIaXN0b3J5IG9mIFR5cG9ncmFwaHkiCmRh\\ndGU6ICIyMDE2LTAyLTAyVDIyOjQwOjMyLjE2OVoiCnRlbXBsYXRlOiAicG9z\\ndCIKZHJhZnQ6IGZhbHNlCmNhdGVnb3J5OiAiRGVzaWduIEluc3BpcmF0aW9u\\nIgp0YWdzOgogIC0gIkxpbm90eXBlIgogIC0gIk1vbm90eXBlIgogIC0gIkhp\\nc3Rvcnkgb2YgdHlwb2dyYXBoeSIKICAtICJIZWx2ZXRpY2EiCmRlc2NyaXB0\\naW9uOiAiTW9yYmkgaW4gc2VtIHF1aXMgZHVpIHBsYWNlcmF0IG9ybmFyZS4g\\nUGVsbGVudGVzcXVlIG9kaW8gbmlzaSwgZXVpc21vZCBpbiwgcGhhcmV0cmEg\\nYSwgdWx0cmljaWVzIGluLCBkaWFtLiBTZWQgYXJjdS4gQ3JhcyBjb25zZXF1\\nYXQuIgpjYW5vbmljYWw6ICcnCi0tLQoKKipQZWxsZW50ZXNxdWUgaGFiaXRh\\nbnQgbW9yYmkgdHJpc3RpcXVlKiogc2VuZWN0dXMgZXQgbmV0dXMgZXQgbWFs\\nZXN1YWRhIGZhbWVzIGFjIHR1cnBpcyBlZ2VzdGFzLiBWZXN0aWJ1bHVtIHRv\\ncnRvciBxdWFtLCBmZXVnaWF0IHZpdGFlLCB1bHRyaWNpZXMgZWdldCwgdGVt\\ncG9yIHNpdCBhbWV0LCBhbnRlLiBEb25lYyBldSBsaWJlcm8gc2l0IGFtZXQg\\ncXVhbSBlZ2VzdGFzIHNlbXBlci4gKkFlbmVhbiB1bHRyaWNpZXMgbWkgdml0\\nYWUgZXN0LiogTWF1cmlzIHBsYWNlcmF0IGVsZWlmZW5kIGxlby4gUXVpc3F1\\nZSBzaXQgYW1ldCBlc3QgZXQgc2FwaWVuIHVsbGFtY29ycGVyIHBoYXJldHJh\\nLiAKClZlc3RpYnVsdW0gZXJhdCB3aXNpLCBjb25kaW1lbnR1bSBzZWQsIGNv\\nbW1vZG8gdml0YWUsIG9ybmFyZSBzaXQgYW1ldCwgd2lzaS4gQWVuZWFuIGZl\\ncm1lbnR1bSwgZWxpdCBlZ2V0IHRpbmNpZHVudCBjb25kaW1lbnR1bSwgZXJv\\ncyBpcHN1bSBydXRydW0gb3JjaSwgc2FnaXR0aXMgdGVtcHVzIGxhY3VzIGVu\\naW0gYWMgZHVpLiAgW0RvbmVjIG5vbiBlbmltXSgjKSBpbiB0dXJwaXMgcHVs\\ndmluYXIgZmFjaWxpc2lzLgoKIVtOdWxsYSBmYXVjaWJ1cyB2ZXN0aWJ1bHVt\\nIGVyb3MgaW4gdGVtcHVzLiBWZXN0aWJ1bHVtIHRlbXBvciBpbXBlcmRpZXQg\\ndmVsaXQgbmVjIGRhcGlidXNdKC9tZWRpYS9pbWFnZS0wLmpwZykKCiMjIEhl\\nYWRlciBMZXZlbCAyCgorIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBj\\nb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LgorIEFsaXF1YW0gdGluY2lk\\ndW50IG1hdXJpcyBldSByaXN1cy4KCkRvbmVjIG5vbiBlbmltIGluIHR1cnBp\\ncyBwdWx2aW5hciBmYWNpbGlzaXMuIFV0IGZlbGlzLiBQcmFlc2VudCBkYXBp\\nYnVzLCBuZXF1ZSBpZCBjdXJzdXMgZmF1Y2lidXMsIHRvcnRvciBuZXF1ZSBl\\nZ2VzdGFzIGF1Z3VlLCBldSB2dWxwdXRhdGUgbWFnbmEgZXJvcyBldSBlcmF0\\nLiBBbGlxdWFtIGVyYXQgdm9sdXRwYXQuIAoKPGZpZ3VyZT4KCTxibG9ja3F1\\nb3RlPgoJCTxwPkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0\\nZXR1ciBhZGlwaXNjaW5nIGVsaXQuIFZpdmFtdXMgbWFnbmEuIENyYXMgaW4g\\nbWkgYXQgZmVsaXMgYWxpcXVldCBjb25ndWUuIFV0IGEgZXN0IGVnZXQgbGln\\ndWxhIG1vbGVzdGllIGdyYXZpZGEuIEN1cmFiaXR1ciBtYXNzYS4gRG9uZWMg\\nZWxlaWZlbmQsIGxpYmVybyBhdCBzYWdpdHRpcyBtb2xsaXMsIHRlbGx1cyBl\\nc3QgbWFsZXN1YWRhIHRlbGx1cywgYXQgbHVjdHVzIHR1cnBpcyBlbGl0IHNp\\ndCBhbWV0IHF1YW0uIFZpdmFtdXMgcHJldGl1bSBvcm5hcmUgZXN0LjwvcD4K\\nCQk8Zm9vdGVyPgoJCQk8Y2l0ZT7igJQgQWxpcXVhbSB0aW5jaWR1bnQgbWF1\\ncmlzIGV1IHJpc3VzLjwvY2l0ZT4KCQk8L2Zvb3Rlcj4KCTwvYmxvY2txdW90\\nZT4KPC9maWd1cmU+CgojIyMgSGVhZGVyIExldmVsIDMKCisgTG9yZW0gaXBz\\ndW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBhZGlwaXNjaW5nIGVs\\naXQuCisgQWxpcXVhbSB0aW5jaWR1bnQgbWF1cmlzIGV1IHJpc3VzLgoKUGVs\\nbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cyBl\\ndCBuZXR1cyBldCBtYWxlc3VhZGEgZmFtZXMgYWMgdHVycGlzIGVnZXN0YXMu\\nIFZlc3RpYnVsdW0gdG9ydG9yIHF1YW0sIGZldWdpYXQgdml0YWUsIHVsdHJp\\nY2llcyBlZ2V0LCB0ZW1wb3Igc2l0IGFtZXQsIGFudGUuIERvbmVjIGV1IGxp\\nYmVybyBzaXQgYW1ldCBxdWFtIGVnZXN0YXMgc2VtcGVyLiBBZW5lYW4gdWx0\\ncmljaWVzIG1pIHZpdGFlIGVzdC4gTWF1cmlzIHBsYWNlcmF0IGVsZWlmZW5k\\nIGxlby4gUXVpc3F1ZSBzaXQgYW1ldCBlc3QgZXQgc2FwaWVuIHVsbGFtY29y\\ncGVyIHBoYXJldHJhLgoKYGBgY3NzCiNoZWFkZXIgaDEgYSB7CiAgZGlzcGxh\\neTogYmxvY2s7CiAgd2lkdGg6IDMwMHB4OwogIGhlaWdodDogODBweDsKfQpg\\nYGAKClZlc3RpYnVsdW0gZXJhdCB3aXNpLCBjb25kaW1lbnR1bSBzZWQsIGNv\\nbW1vZG8gdml0YWUsIG9ybmFyZSBzaXQgYW1ldCwgd2lzaS4gQWVuZWFuIGZl\\ncm1lbnR1bSwgZWxpdCBlZ2V0IHRpbmNpZHVudCBjb25kaW1lbnR1bSwgZXJv\\ncyBpcHN1bSBydXRydW0gb3JjaSwgc2FnaXR0aXMgdGVtcHVzIGxhY3VzIGVu\\naW0gYWMgZHVpLiBEb25lYyBub24gZW5pbSBpbiB0dXJwaXMgcHVsdmluYXIg\\nZmFjaWxpc2lzLiBVdCBmZWxpcy4gUHJhZXNlbnQgZGFwaWJ1cywgbmVxdWUg\\naWQgY3Vyc3VzIGZhdWNpYnVzLCB0b3J0b3IgbmVxdWUgZWdlc3RhcyBhdWd1\\nZSwgZXUgdnVscHV0YXRlIG1hZ25hIGVyb3MgZXUgZXJhdC4gQWxpcXVhbSBl\\ncmF0IHZvbHV0cGF0LiBOYW0gZHVpIG1pLCB0aW5jaWR1bnQgcXVpcywgYWNj\\ndW1zYW4gcG9ydHRpdG9yLCBmYWNpbGlzaXMgbHVjdHVzLCBtZXR1cy4=\\n\",\"encoding\":\"base64\"}", "status": 200 }, { @@ -227,9 +149,87 @@ "X-XSS-Protection": "1; mode=block", "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", "Content-Security-Policy": "default-src 'none'", - "content-length": "3896" + "content-length": "3895" }, - "response": "{\n \"sha\": \"d0582dd245a3f408fb3fe2333bf01400007476e9\",\n \"node_id\": \"MDQ6QmxvYjI1NTA3NzkxNDpkMDU4MmRkMjQ1YTNmNDA4ZmIzZmUyMzMzYmYwMTQwMDAwNzQ3NmU5\",\n \"size\": 2565,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/d0582dd245a3f408fb3fe2333bf01400007476e9\",\n \"content\": \"LS0tCnRpdGxlOiBUaGUgT3JpZ2lucyBvZiBTb2NpYWwgU3RhdGlvbmVyeSBM\\nZXR0ZXJpbmcKZGF0ZTogIjIwMTYtMTItMDFUMjI6NDA6MzIuMTY5WiIKdGVt\\ncGxhdGU6ICJwb3N0IgpkcmFmdDogZmFsc2UKY2F0ZWdvcnk6ICJEZXNpZ24g\\nQ3VsdHVyZSIKZGVzY3JpcHRpb246ICJQZWxsZW50ZXNxdWUgaGFiaXRhbnQg\\nbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzIGV0IG5ldHVzIGV0IG1hbGVzdWFk\\nYSBmYW1lcyBhYyB0dXJwaXMgZWdlc3Rhcy4gVmVzdGlidWx1bSB0b3J0b3Ig\\ncXVhbSwgZmV1Z2lhdCB2aXRhZSwgdWx0cmljaWVzIGVnZXQsIHRlbXBvciBz\\naXQgYW1ldCwgYW50ZS4iCmNhbm9uaWNhbDogJycKLS0tCgoqKlBlbGxlbnRl\\nc3F1ZSBoYWJpdGFudCBtb3JiaSB0cmlzdGlxdWUqKiBzZW5lY3R1cyBldCBu\\nZXR1cyBldCBtYWxlc3VhZGEgZmFtZXMgYWMgdHVycGlzIGVnZXN0YXMuIFZl\\nc3RpYnVsdW0gdG9ydG9yIHF1YW0sIGZldWdpYXQgdml0YWUsIHVsdHJpY2ll\\ncyBlZ2V0LCB0ZW1wb3Igc2l0IGFtZXQsIGFudGUuIERvbmVjIGV1IGxpYmVy\\nbyBzaXQgYW1ldCBxdWFtIGVnZXN0YXMgc2VtcGVyLiAqQWVuZWFuIHVsdHJp\\nY2llcyBtaSB2aXRhZSBlc3QuKiBNYXVyaXMgcGxhY2VyYXQgZWxlaWZlbmQg\\nbGVvLiBRdWlzcXVlIHNpdCBhbWV0IGVzdCBldCBzYXBpZW4gdWxsYW1jb3Jw\\nZXIgcGhhcmV0cmEuIAoKVmVzdGlidWx1bSBlcmF0IHdpc2ksIGNvbmRpbWVu\\ndHVtIHNlZCwgY29tbW9kbyB2aXRhZSwgb3JuYXJlIHNpdCBhbWV0LCB3aXNp\\nLiBBZW5lYW4gZmVybWVudHVtLCBlbGl0IGVnZXQgdGluY2lkdW50IGNvbmRp\\nbWVudHVtLCBlcm9zIGlwc3VtIHJ1dHJ1bSBvcmNpLCBzYWdpdHRpcyB0ZW1w\\ndXMgbGFjdXMgZW5pbSBhYyBkdWkuICBbRG9uZWMgbm9uIGVuaW1dKCMpIGlu\\nIHR1cnBpcyBwdWx2aW5hciBmYWNpbGlzaXMuCgohW051bGxhIGZhdWNpYnVz\\nIHZlc3RpYnVsdW0gZXJvcyBpbiB0ZW1wdXMuIFZlc3RpYnVsdW0gdGVtcG9y\\nIGltcGVyZGlldCB2ZWxpdCBuZWMgZGFwaWJ1c10oL21lZGlhL2ltYWdlLTMu\\nanBnKQoKIyMgSGVhZGVyIExldmVsIDIKCisgTG9yZW0gaXBzdW0gZG9sb3Ig\\nc2l0IGFtZXQsIGNvbnNlY3RldHVlciBhZGlwaXNjaW5nIGVsaXQuCisgQWxp\\ncXVhbSB0aW5jaWR1bnQgbWF1cmlzIGV1IHJpc3VzLgoKRG9uZWMgbm9uIGVu\\naW0gaW4gdHVycGlzIHB1bHZpbmFyIGZhY2lsaXNpcy4gVXQgZmVsaXMuIFBy\\nYWVzZW50IGRhcGlidXMsIG5lcXVlIGlkIGN1cnN1cyBmYXVjaWJ1cywgdG9y\\ndG9yIG5lcXVlIGVnZXN0YXMgYXVndWUsIGV1IHZ1bHB1dGF0ZSBtYWduYSBl\\ncm9zIGV1IGVyYXQuIEFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gCgo8ZmlndXJl\\nPgoJPGJsb2NrcXVvdGU+CgkJPHA+TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFt\\nZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gVml2YW11cyBtYWdu\\nYS4gQ3JhcyBpbiBtaSBhdCBmZWxpcyBhbGlxdWV0IGNvbmd1ZS4gVXQgYSBl\\nc3QgZWdldCBsaWd1bGEgbW9sZXN0aWUgZ3JhdmlkYS4gQ3VyYWJpdHVyIG1h\\nc3NhLiBEb25lYyBlbGVpZmVuZCwgbGliZXJvIGF0IHNhZ2l0dGlzIG1vbGxp\\ncywgdGVsbHVzIGVzdCBtYWxlc3VhZGEgdGVsbHVzLCBhdCBsdWN0dXMgdHVy\\ncGlzIGVsaXQgc2l0IGFtZXQgcXVhbS4gVml2YW11cyBwcmV0aXVtIG9ybmFy\\nZSBlc3QuPC9wPgoJCTxmb290ZXI+CgkJCTxjaXRlPuKAlCBBbGlxdWFtIHRp\\nbmNpZHVudCBtYXVyaXMgZXUgcmlzdXMuPC9jaXRlPgoJCTwvZm9vdGVyPgoJ\\nPC9ibG9ja3F1b3RlPgo8L2ZpZ3VyZT4KCiMjIyBIZWFkZXIgTGV2ZWwgMwoK\\nKyBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFk\\naXBpc2NpbmcgZWxpdC4KKyBBbGlxdWFtIHRpbmNpZHVudCBtYXVyaXMgZXUg\\ncmlzdXMuCgpQZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVl\\nIHNlbmVjdHVzIGV0IG5ldHVzIGV0IG1hbGVzdWFkYSBmYW1lcyBhYyB0dXJw\\naXMgZWdlc3Rhcy4gVmVzdGlidWx1bSB0b3J0b3IgcXVhbSwgZmV1Z2lhdCB2\\naXRhZSwgdWx0cmljaWVzIGVnZXQsIHRlbXBvciBzaXQgYW1ldCwgYW50ZS4g\\nRG9uZWMgZXUgbGliZXJvIHNpdCBhbWV0IHF1YW0gZWdlc3RhcyBzZW1wZXIu\\nIEFlbmVhbiB1bHRyaWNpZXMgbWkgdml0YWUgZXN0LiBNYXVyaXMgcGxhY2Vy\\nYXQgZWxlaWZlbmQgbGVvLiBRdWlzcXVlIHNpdCBhbWV0IGVzdCBldCBzYXBp\\nZW4gdWxsYW1jb3JwZXIgcGhhcmV0cmEuCgpgYGBjc3MKI2hlYWRlciBoMSBh\\nIHsKICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogMzAwcHg7CiAgaGVpZ2h0\\nOiA4MHB4Owp9CmBgYAoKRG9uZWMgbm9uIGVuaW0gaW4gdHVycGlzIHB1bHZp\\nbmFyIGZhY2lsaXNpcy4gVXQgZmVsaXMuIFByYWVzZW50IGRhcGlidXMsIG5l\\ncXVlIGlkIGN1cnN1cyBmYXVjaWJ1cywgdG9ydG9yIG5lcXVlIGVnZXN0YXMg\\nYXVndWUsIGV1IHZ1bHB1dGF0ZSBtYWduYSBlcm9zIGV1IGVyYXQuIEFsaXF1\\nYW0gZXJhdCB2b2x1dHBhdC4gTmFtIGR1aSBtaSwgdGluY2lkdW50IHF1aXMs\\nIGFjY3Vtc2FuIHBvcnR0aXRvciwgZmFjaWxpc2lzIGx1Y3R1cywgbWV0dXMu\\n\",\n \"encoding\": \"base64\"\n}\n", + "response": "{\"sha\":\"d0582dd245a3f408fb3fe2333bf01400007476e9\",\"node_id\":\"MDQ6QmxvYjI4Njc1NjgzMzpkMDU4MmRkMjQ1YTNmNDA4ZmIzZmUyMzMzYmYwMTQwMDAwNzQ3NmU5\",\"size\":2565,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/d0582dd245a3f408fb3fe2333bf01400007476e9\",\"content\":\"LS0tCnRpdGxlOiBUaGUgT3JpZ2lucyBvZiBTb2NpYWwgU3RhdGlvbmVyeSBM\\nZXR0ZXJpbmcKZGF0ZTogIjIwMTYtMTItMDFUMjI6NDA6MzIuMTY5WiIKdGVt\\ncGxhdGU6ICJwb3N0IgpkcmFmdDogZmFsc2UKY2F0ZWdvcnk6ICJEZXNpZ24g\\nQ3VsdHVyZSIKZGVzY3JpcHRpb246ICJQZWxsZW50ZXNxdWUgaGFiaXRhbnQg\\nbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzIGV0IG5ldHVzIGV0IG1hbGVzdWFk\\nYSBmYW1lcyBhYyB0dXJwaXMgZWdlc3Rhcy4gVmVzdGlidWx1bSB0b3J0b3Ig\\ncXVhbSwgZmV1Z2lhdCB2aXRhZSwgdWx0cmljaWVzIGVnZXQsIHRlbXBvciBz\\naXQgYW1ldCwgYW50ZS4iCmNhbm9uaWNhbDogJycKLS0tCgoqKlBlbGxlbnRl\\nc3F1ZSBoYWJpdGFudCBtb3JiaSB0cmlzdGlxdWUqKiBzZW5lY3R1cyBldCBu\\nZXR1cyBldCBtYWxlc3VhZGEgZmFtZXMgYWMgdHVycGlzIGVnZXN0YXMuIFZl\\nc3RpYnVsdW0gdG9ydG9yIHF1YW0sIGZldWdpYXQgdml0YWUsIHVsdHJpY2ll\\ncyBlZ2V0LCB0ZW1wb3Igc2l0IGFtZXQsIGFudGUuIERvbmVjIGV1IGxpYmVy\\nbyBzaXQgYW1ldCBxdWFtIGVnZXN0YXMgc2VtcGVyLiAqQWVuZWFuIHVsdHJp\\nY2llcyBtaSB2aXRhZSBlc3QuKiBNYXVyaXMgcGxhY2VyYXQgZWxlaWZlbmQg\\nbGVvLiBRdWlzcXVlIHNpdCBhbWV0IGVzdCBldCBzYXBpZW4gdWxsYW1jb3Jw\\nZXIgcGhhcmV0cmEuIAoKVmVzdGlidWx1bSBlcmF0IHdpc2ksIGNvbmRpbWVu\\ndHVtIHNlZCwgY29tbW9kbyB2aXRhZSwgb3JuYXJlIHNpdCBhbWV0LCB3aXNp\\nLiBBZW5lYW4gZmVybWVudHVtLCBlbGl0IGVnZXQgdGluY2lkdW50IGNvbmRp\\nbWVudHVtLCBlcm9zIGlwc3VtIHJ1dHJ1bSBvcmNpLCBzYWdpdHRpcyB0ZW1w\\ndXMgbGFjdXMgZW5pbSBhYyBkdWkuICBbRG9uZWMgbm9uIGVuaW1dKCMpIGlu\\nIHR1cnBpcyBwdWx2aW5hciBmYWNpbGlzaXMuCgohW051bGxhIGZhdWNpYnVz\\nIHZlc3RpYnVsdW0gZXJvcyBpbiB0ZW1wdXMuIFZlc3RpYnVsdW0gdGVtcG9y\\nIGltcGVyZGlldCB2ZWxpdCBuZWMgZGFwaWJ1c10oL21lZGlhL2ltYWdlLTMu\\nanBnKQoKIyMgSGVhZGVyIExldmVsIDIKCisgTG9yZW0gaXBzdW0gZG9sb3Ig\\nc2l0IGFtZXQsIGNvbnNlY3RldHVlciBhZGlwaXNjaW5nIGVsaXQuCisgQWxp\\ncXVhbSB0aW5jaWR1bnQgbWF1cmlzIGV1IHJpc3VzLgoKRG9uZWMgbm9uIGVu\\naW0gaW4gdHVycGlzIHB1bHZpbmFyIGZhY2lsaXNpcy4gVXQgZmVsaXMuIFBy\\nYWVzZW50IGRhcGlidXMsIG5lcXVlIGlkIGN1cnN1cyBmYXVjaWJ1cywgdG9y\\ndG9yIG5lcXVlIGVnZXN0YXMgYXVndWUsIGV1IHZ1bHB1dGF0ZSBtYWduYSBl\\ncm9zIGV1IGVyYXQuIEFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gCgo8ZmlndXJl\\nPgoJPGJsb2NrcXVvdGU+CgkJPHA+TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFt\\nZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gVml2YW11cyBtYWdu\\nYS4gQ3JhcyBpbiBtaSBhdCBmZWxpcyBhbGlxdWV0IGNvbmd1ZS4gVXQgYSBl\\nc3QgZWdldCBsaWd1bGEgbW9sZXN0aWUgZ3JhdmlkYS4gQ3VyYWJpdHVyIG1h\\nc3NhLiBEb25lYyBlbGVpZmVuZCwgbGliZXJvIGF0IHNhZ2l0dGlzIG1vbGxp\\ncywgdGVsbHVzIGVzdCBtYWxlc3VhZGEgdGVsbHVzLCBhdCBsdWN0dXMgdHVy\\ncGlzIGVsaXQgc2l0IGFtZXQgcXVhbS4gVml2YW11cyBwcmV0aXVtIG9ybmFy\\nZSBlc3QuPC9wPgoJCTxmb290ZXI+CgkJCTxjaXRlPuKAlCBBbGlxdWFtIHRp\\nbmNpZHVudCBtYXVyaXMgZXUgcmlzdXMuPC9jaXRlPgoJCTwvZm9vdGVyPgoJ\\nPC9ibG9ja3F1b3RlPgo8L2ZpZ3VyZT4KCiMjIyBIZWFkZXIgTGV2ZWwgMwoK\\nKyBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFk\\naXBpc2NpbmcgZWxpdC4KKyBBbGlxdWFtIHRpbmNpZHVudCBtYXVyaXMgZXUg\\ncmlzdXMuCgpQZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVl\\nIHNlbmVjdHVzIGV0IG5ldHVzIGV0IG1hbGVzdWFkYSBmYW1lcyBhYyB0dXJw\\naXMgZWdlc3Rhcy4gVmVzdGlidWx1bSB0b3J0b3IgcXVhbSwgZmV1Z2lhdCB2\\naXRhZSwgdWx0cmljaWVzIGVnZXQsIHRlbXBvciBzaXQgYW1ldCwgYW50ZS4g\\nRG9uZWMgZXUgbGliZXJvIHNpdCBhbWV0IHF1YW0gZWdlc3RhcyBzZW1wZXIu\\nIEFlbmVhbiB1bHRyaWNpZXMgbWkgdml0YWUgZXN0LiBNYXVyaXMgcGxhY2Vy\\nYXQgZWxlaWZlbmQgbGVvLiBRdWlzcXVlIHNpdCBhbWV0IGVzdCBldCBzYXBp\\nZW4gdWxsYW1jb3JwZXIgcGhhcmV0cmEuCgpgYGBjc3MKI2hlYWRlciBoMSBh\\nIHsKICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogMzAwcHg7CiAgaGVpZ2h0\\nOiA4MHB4Owp9CmBgYAoKRG9uZWMgbm9uIGVuaW0gaW4gdHVycGlzIHB1bHZp\\nbmFyIGZhY2lsaXNpcy4gVXQgZmVsaXMuIFByYWVzZW50IGRhcGlidXMsIG5l\\ncXVlIGlkIGN1cnN1cyBmYXVjaWJ1cywgdG9ydG9yIG5lcXVlIGVnZXN0YXMg\\nYXVndWUsIGV1IHZ1bHB1dGF0ZSBtYWduYSBlcm9zIGV1IGVyYXQuIEFsaXF1\\nYW0gZXJhdCB2b2x1dHBhdC4gTmFtIGR1aSBtaSwgdGluY2lkdW50IHF1aXMs\\nIGFjY3Vtc2FuIHBvcnR0aXRvciwgZmFjaWxpc2lzIGx1Y3R1cywgbWV0dXMu\\n\",\"encoding\":\"base64\"}", + "status": 200 + }, + { + "method": "GET", + "url": "/repos/owner/repo/git/blobs/a532f0a9445cdf90a19c6812cff89d1674991774", + "headers": { + "Content-Type": "application/json; charset=utf-8", + "Server": "GitHub.com", + "Status": "200 OK", + "X-RateLimit-Limit": "5000", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP", + "X-OAuth-Scopes": "delete_repo, repo", + "X-Accepted-OAuth-Scopes": "", + "X-GitHub-Media-Type": "github.v3; format=json", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "1; mode=block", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "content-length": "10649" + }, + "response": "{\"sha\":\"a532f0a9445cdf90a19c6812cff89d1674991774\",\"node_id\":\"MDQ6QmxvYjI4Njc1NjgzMzphNTMyZjBhOTQ0NWNkZjkwYTE5YzY4MTJjZmY4OWQxNjc0OTkxNzc0\",\"size\":7465,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/a532f0a9445cdf90a19c6812cff89d1674991774\",\"content\":\"LS0tCnRpdGxlOiBIdW1hbmUgVHlwb2dyYXBoeSBpbiB0aGUgRGlnaXRhbCBB\\nZ2UKZGF0ZTogIjIwMTctMDgtMTlUMjI6NDA6MzIuMTY5WiIKdGVtcGxhdGU6\\nICJwb3N0IgpkcmFmdDogZmFsc2UKY2F0ZWdvcnk6ICJUeXBvZ3JhcGh5Igp0\\nYWdzOgogIC0gIkRlc2lnbiIKICAtICJUeXBvZ3JhcGh5IgogIC0gIldlYiBE\\nZXZlbG9wbWVudCIKZGVzY3JpcHRpb246ICJBbiBFc3NheSBvbiBUeXBvZ3Jh\\ncGh5IGJ5IEVyaWMgR2lsbCB0YWtlcyB0aGUgcmVhZGVyIGJhY2sgdG8gdGhl\\nIHllYXIgMTkzMC4gVGhlIHllYXIgd2hlbiBhIGNvbmZsaWN0IGJldHdlZW4g\\ndHdvIHdvcmxkcyBjYW1lIHRvIGl0cyB0ZXJtLiBUaGUgbWFjaGluZXMgb2Yg\\ndGhlIGluZHVzdHJpYWwgd29ybGQgZmluYWxseSB0b29rIG92ZXIgdGhlIGhh\\nbmRpY3JhZnRzLiIKY2Fub25pY2FsOiAnJwotLS0KCi0gW1RoZSBmaXJzdCB0\\ncmFuc2l0aW9uXSgjdGhlLWZpcnN0LXRyYW5zaXRpb24pCi0gW1RoZSBkaWdp\\ndGFsIGFnZV0oI3RoZS1kaWdpdGFsLWFnZSkKLSBbTG9zcyBvZiBodW1hbml0\\neSB0aHJvdWdoIHRyYW5zaXRpb25zXSgjbG9zcy1vZi1odW1hbml0eS10aHJv\\ndWdoLXRyYW5zaXRpb25zKQotIFtDaGFzaW5nIHBlcmZlY3Rpb25dKCNjaGFz\\naW5nLXBlcmZlY3Rpb24pCgpBbiBFc3NheSBvbiBUeXBvZ3JhcGh5IGJ5IEVy\\naWMgR2lsbCB0YWtlcyB0aGUgcmVhZGVyIGJhY2sgdG8gdGhlIHllYXIgMTkz\\nMC4gVGhlIHllYXIgd2hlbiBhIGNvbmZsaWN0IGJldHdlZW4gdHdvIHdvcmxk\\ncyBjYW1lIHRvIGl0cyB0ZXJtLiBUaGUgbWFjaGluZXMgb2YgdGhlIGluZHVz\\ndHJpYWwgd29ybGQgZmluYWxseSB0b29rIG92ZXIgdGhlIGhhbmRpY3JhZnRz\\nLgoKVGhlIHR5cG9ncmFwaHkgb2YgdGhpcyBpbmR1c3RyaWFsIGFnZSB3YXMg\\nbm8gbG9uZ2VyIGhhbmRjcmFmdGVkLiBNYXNzIHByb2R1Y3Rpb24gYW5kIHBy\\nb2ZpdCBiZWNhbWUgbW9yZSBpbXBvcnRhbnQuIFF1YW50aXR5IG1hdHRlcmVk\\nIG1vcmUgdGhhbiB0aGUgcXVhbGl0eS4gVGhlIGJvb2tzIGFuZCBwcmludGVk\\nIHdvcmtzIGluIGdlbmVyYWwgbG9zdCBhIHBhcnQgb2YgaXRzIGh1bWFuaXR5\\nLiBUaGUgdHlwZWZhY2VzIHdlcmUgbm90IHByb2R1Y2VkIGJ5IGNyYWZ0c21l\\nbiBhbnltb3JlLiBJdCB3YXMgdGhlIG1hY2hpbmVzIHByaW50aW5nIGFuZCB0\\neWluZyB0aGUgYm9va3MgdG9nZXRoZXIgbm93LiBUaGUgY3JhZnRzbWVuIGhh\\nZCB0byBsZXQgZ28gb2YgdGhlaXIgY3JhZnQgYW5kIGJlY2FtZSBhIGNvZyBp\\nbiB0aGUgcHJvY2Vzcy4gQW4gZXh0ZW5zaW9uIG9mIHRoZSBpbmR1c3RyaWFs\\nIG1hY2hpbmUuCgpCdXQgdGhlIHZpY3Rvcnkgb2YgdGhlIGluZHVzdHJpYWxp\\nc20gZGlkbuKAmXQgbWVhbiB0aGF0IHRoZSBjcmFmdHNtZW4gd2VyZSBjb21w\\nbGV0ZWx5IGV4dGluY3QuIFRoZSB0d28gd29ybGRzIGNvbnRpbnVlZCB0byBj\\nb2V4aXN0IGluZGVwZW5kZW50bHkuIEVhY2ggcmVjb2duaXNpbmcgdGhlIGdv\\nb2QgaW4gdGhlIG90aGVyIOKAlCB0aGUgcG93ZXIgb2YgaW5kdXN0cmlhbGlz\\nbSBhbmQgdGhlIGh1bWFuaXR5IG9mIGNyYWZ0c21hbnNoaXAuIFRoaXMgd2Fz\\nIHRoZSBzZWNvbmQgdHJhbnNpdGlvbiB0aGF0IHdvdWxkIHN0cmlwIHR5cG9n\\ncmFwaHkgb2YgYSBwYXJ0IG9mIGl0cyBodW1hbml0eS4gV2UgaGF2ZSB0byBn\\nbyA1MDAgeWVhcnMgYmFjayBpbiB0aW1lIHRvIG1lZXQgdGhlIGZpcnN0IG9u\\nZS4KCiMjIFRoZSBmaXJzdCB0cmFuc2l0aW9uCgpBIHNpbWlsYXIgY29uZmxp\\nY3QgZW1lcmdlZCBhZnRlciB0aGUgaW52ZW50aW9uIG9mIHRoZSBmaXJzdCBw\\ncmludGluZyBwcmVzcyBpbiBFdXJvcGUuIEpvaGFubmVzIEd1dGVuYmVyZyBp\\nbnZlbnRlZCBtb3ZhYmxlIHR5cGUgYW5kIHVzZWQgaXQgdG8gcHJvZHVjZSBk\\naWZmZXJlbnQgY29tcG9zaXRpb25zLiBIaXMgd29ya3Nob3AgY291bGQgcHJp\\nbnQgdXAgdG8gMjQwIGltcHJlc3Npb25zIHBlciBob3VyLiBVbnRpbCB0aGVu\\nLCB0aGUgYm9va3Mgd2VyZSBiZWluZyBjb3BpZWQgYnkgaGFuZC4gQWxsIHRo\\nZSBib29rcyB3ZXJlIGhhbmR3cml0dGVuIGFuZCBkZWNvcmF0ZWQgd2l0aCBo\\nYW5kIGRyYXduIG9ybmFtZW50cyBhbmQgZmlndXJlcy4gQSBwcm9jZXNzIG9m\\nIGNvcHlpbmcgYSBib29rIHdhcyBsb25nIGJ1dCBlYWNoIGJvb2ssIGV2ZW4g\\nYSBjb3B5LCB3YXMgYSB3b3JrIG9mIGFydC4KClRoZSBmaXJzdCBwcmludGVk\\nIGJvb2tzIHdlcmUsIGF0IGZpcnN0LCBwZXJjZWl2ZWQgYXMgaW5mZXJpb3Ig\\ndG8gdGhlIGhhbmR3cml0dGVuIG9uZXMuIFRoZXkgd2VyZSBzbWFsbGVyIGFu\\nZCBjaGVhcGVyIHRvIHByb2R1Y2UuIE1vdmFibGUgdHlwZSBwcm92aWRlZCB0\\naGUgcHJpbnRlcnMgd2l0aCBmbGV4aWJpbGl0eSB0aGF0IGFsbG93ZWQgdGhl\\nbSB0byBwcmludCBib29rcyBpbiBsYW5ndWFnZXMgb3RoZXIgdGhhbiBMYXRp\\nbi4gR2lsbCBkZXNjcmliZXMgdGhlIHRyYW5zaXRpb24gdG8gaW5kdXN0cmlh\\nbGlzbSBhcyBzb21ldGhpbmcgdGhhdCBwZW9wbGUgbmVlZGVkIGFuZCB3YW50\\nZWQuIFNvbWV0aGluZyBzaW1pbGFyIGhhcHBlbmVkIGFmdGVyIHRoZSBmaXJz\\ndCBwcmludGVkIGJvb2tzIGVtZXJnZWQuIFBlb3BsZSB3YW50ZWQgYm9va3Mg\\naW4gYSBsYW5ndWFnZSB0aGV5IHVuZGVyc3Rvb2QgYW5kIHRoZXkgd2FudGVk\\nIGJvb2tzIHRoZXkgY291bGQgdGFrZSB3aXRoIHRoZW0uIFRoZXkgd2VyZSBo\\ndW5ncnkgZm9yIGtub3dsZWRnZSBhbmQgcHJpbnRlZCBib29rcyBzYXRpc2Zp\\nZWQgdGhpcyBodW5nZXIuCgohWzQyLWxpbmUtYmlibGUuanBnXSgvbWVkaWEv\\nNDItbGluZS1iaWJsZS5qcGcpCgoqVGhlIDQy4oCTTGluZSBCaWJsZSwgcHJp\\nbnRlZCBieSBHdXRlbmJlcmcuKgoKQnV0LCB0aHJvdWdoIHRoaXMgdHJhbnNp\\ndGlvbiwgdGhlIGJvb2sgbG9zdCBhIGxhcmdlIHBhcnQgb2YgaXRzIGh1bWFu\\naXR5LiBUaGUgbWFjaGluZSB0b29rIG92ZXIgbW9zdCBvZiB0aGUgcHJvY2Vz\\ncyBidXQgY3JhZnRzbWFuc2hpcCB3YXMgc3RpbGwgYSBwYXJ0IG9mIGl0LiBU\\naGUgdHlwZWZhY2VzIHdlcmUgY3V0IG1hbnVhbGx5IGJ5IHRoZSBmaXJzdCBw\\ndW5jaCBjdXR0ZXJzLiBUaGUgcGFwZXIgd2FzIG1hZGUgYnkgaGFuZC4gVGhl\\nIGlsbHVzdHJhdGlvbnMgYW5kIG9ybmFtZW50cyB3ZXJlIHN0aWxsIGJlaW5n\\nIGhhbmQgZHJhd24uIFRoZXNlIHdlcmUgdGhlIHJlbWFpbnMgb2YgdGhlIGNy\\nYWZ0c21hbnNoaXAgdGhhdCB3ZW50IGFsbW9zdCBleHRpbmN0IGluIHRoZSB0\\naW1lcyBvZiBFcmljIEdpbGwuCgojIyBUaGUgZGlnaXRhbCBhZ2UKClRoZSBm\\naXJzdCB0cmFuc2l0aW9uIHRvb2sgYXdheSBhIGxhcmdlIHBhcnQgb2YgaHVt\\nYW5pdHkgZnJvbSB3cml0dGVuIGNvbW11bmljYXRpb24uIEluZHVzdHJpYWxp\\nc2F0aW9uLCB0aGUgc2Vjb25kIHRyYW5zaXRpb24gZGVzY3JpYmVkIGJ5IEVy\\naWMgR2lsbCwgdG9vayBhd2F5IG1vc3Qgb2Ygd2hhdCB3YXMgbGVmdC4gQnV0\\nIGl04oCZcyB0aGUgdGhpcmQgdHJhbnNpdGlvbiB0aGF0IHN0cmlwcGVkIGl0\\nIG5ha2VkLiBUeXBlZmFjZXMgYXJlIGZhY2VsZXNzIHRoZXNlIGRheXMuIFRo\\nZXnigJlyZSBqdXN0IGZvbnRzIG9uIG91ciBjb21wdXRlcnMuIEhhcmRseSBh\\nbnlvbmUga25vd3MgdGhlaXIgc3Rvcmllcy4gSGFyZGx5IGFueW9uZSBjYXJl\\ncy4gRmxpY2tpbmcgdGhyb3VnaCB0aG91c2FuZHMgb2YgdHlwZWZhY2VzIGFu\\nZCBmaW5kaW5nIHRoZSDigJxyaWdodCBvbmXigJ0gaXMgYSBtYXR0ZXIgb2Yg\\nbWludXRlcy4KCj4gSW4gdGhlIG5ldyBjb21wdXRlciBhZ2UgdGhlIHByb2xp\\nZmVyYXRpb24gb2YgdHlwZWZhY2VzIGFuZCB0eXBlIG1hbmlwdWxhdGlvbnMg\\ncmVwcmVzZW50cyBhIG5ldyBsZXZlbCBvZiB2aXN1YWwgcG9sbHV0aW9uIHRo\\ncmVhdGVuaW5nIG91ciBjdWx0dXJlLiBPdXQgb2YgdGhvdXNhbmRzIG9mIHR5\\ncGVmYWNlcywgYWxsIHdlIG5lZWQgYXJlIGEgZmV3IGJhc2ljIG9uZXMsIGFu\\nZCB0cmFzaCB0aGUgcmVzdC4KPgrigJQgTWFzc2ltbyBWaWduZWxsaQoKVHlw\\nb2dyYXBoeSBpcyBub3QgYWJvdXQgdHlwZWZhY2VzLiBJdOKAmXMgbm90IGFi\\nb3V0IHdoYXQgbG9va3MgYmVzdCwgaXTigJlzIGFib3V0IHdoYXQgZmVlbHMg\\ncmlnaHQuIFdoYXQgY29tbXVuaWNhdGVzIHRoZSBtZXNzYWdlIGJlc3QuIFR5\\ncG9ncmFwaHksIGluIGl0cyBlc3NlbmNlLCBpcyBhYm91dCB0aGUgbWVzc2Fn\\nZS4g4oCcVHlwb2dyYXBoaWNhbCBkZXNpZ24gc2hvdWxkIHBlcmZvcm0gb3B0\\naWNhbGx5IHdoYXQgdGhlIHNwZWFrZXIgY3JlYXRlcyB0aHJvdWdoIHZvaWNl\\nIGFuZCBnZXN0dXJlIG9mIGhpcyB0aG91Z2h0cy7igJ0sIGFzIEVsIExpc3Np\\ndHpreSwgYSBmYW1vdXMgUnVzc2lhbiB0eXBvZ3JhcGhlciwgcHV0IGl0LgoK\\nIyMgTG9zcyBvZiBodW1hbml0eSB0aHJvdWdoIHRyYW5zaXRpb25zCgpFYWNo\\nIHRyYW5zaXRpb24gdG9vayBhd2F5IGEgcGFydCBvZiBodW1hbml0eSBmcm9t\\nIHdyaXR0ZW4gbGFuZ3VhZ2UuIEhhbmR3cml0dGVuIGJvb2tzIGJlaW5nIHRo\\nZSBtb3N0IGh1bWFuZSBmb3JtIGFuZCB0aGUgZGlnaXRhbCB0eXBlZmFjZXMg\\nYmVpbmcgdGhlIGxlYXN0LiBPdmVydXNlIG9mIEhlbHZldGljYSBpcyBhIGdv\\nb2QgZXhhbXBsZS4gTWVzc2FnZXMgYXJlIGJlaW5nIHRvbGQgaW4gYSB0eXBl\\nZmFjZSBqdXN0IGJlY2F1c2UgaXTigJlzIGEgc2FmZSBvcHRpb24uIEl04oCZ\\ncyBhbHdheXMgdGhlcmUuIEV2ZXJ5b25lIGtub3dzIGl0IGJ1dCB5ZXQsIG5v\\nYm9keSBrbm93cyBpdC4gU3RvcCBzb21lb25lIG9uIHRoZSBzdHJlZXQgYW5k\\nIGFzayBoaW0gd2hhdCBIZWx2ZXRpY2EgaXM/IEFzayBhIGRlc2lnbmVyIHRo\\nZSBzYW1lIHF1ZXN0aW9uLiBBc2sgaGltIHdoZXJlIGl0IGNhbWUgZnJvbSwg\\nd2hlbiwgd2h5IGFuZCB3aG8gZGVzaWduZWQgaXQuIE1vc3Qgb2YgdGhlbSB3\\naWxsIGZhaWwgdG8gYW5zd2VyIHRoZXNlIHF1ZXN0aW9ucy4gTW9zdCBvZiB0\\naGVtIHVzZWQgaXQgaW4gdGhlaXIgcHJlY2lvdXMgcHJvamVjdHMgYnV0IHRo\\nZXkgc3RpbGwgZG9u4oCZdCBzcG90IGl0IGluIHRoZSBzdHJlZXQuCgo8Zmln\\ndXJlPgoJPGJsb2NrcXVvdGU+CgkJPHA+S25vd2xlZGdlIG9mIHRoZSBxdWFs\\naXR5IG9mIGEgdHlwZWZhY2UgaXMgb2YgdGhlIGdyZWF0ZXN0IGltcG9ydGFu\\nY2UgZm9yIHRoZSBmdW5jdGlvbmFsLCBhZXN0aGV0aWMgYW5kIHBzeWNob2xv\\nZ2ljYWwgZWZmZWN0LjwvcD4KCQk8Zm9vdGVyPgoJCQk8Y2l0ZT7igJQgSm9z\\nZWYgTXVlbGxlci1Ccm9ja21hbm48L2NpdGU+CgkJPC9mb290ZXI+Cgk8L2Js\\nb2NrcXVvdGU+CjwvZmlndXJlPgoKVHlwZWZhY2VzIGRvbuKAmXQgbG9vayBo\\nYW5kbWFkZSB0aGVzZSBkYXlzLiBBbmQgdGhhdOKAmXMgYWxsIHJpZ2h0LiBU\\naGV5IGRvbuKAmXQgaGF2ZSB0by4gSW5kdXN0cmlhbGlzbSB0b29rIHRoYXQg\\nYXdheSBmcm9tIHRoZW0gYW5kIHdl4oCZcmUgZmluZSB3aXRoIGl0LiBXZeKA\\nmXZlIHRyYWRlZCB0aGF0IHBhcnQgb2YgaHVtYW5pdHkgZm9yIGEgcHJvY2Vz\\ncyB0aGF0IHByb2R1Y2VzIG1vcmUgYm9va3MgdGhhdCBhcmUgZWFzaWVyIHRv\\nIHJlYWQuIFRoYXQgY2Fu4oCZdCBiZSBiYWQuIEFuZCBpdCBpc27igJl0LgoK\\nPiBIdW1hbmUgdHlwb2dyYXBoeSB3aWxsIG9mdGVuIGJlIGNvbXBhcmF0aXZl\\nbHkgcm91Z2ggYW5kIGV2ZW4gdW5jb3V0aDsgYnV0IHdoaWxlIGEgY2VydGFp\\nbiB1bmNvdXRobmVzcyBkb2VzIG5vdCBzZXJpb3VzbHkgbWF0dGVyIGluIGh1\\nbWFuZSB3b3JrcywgdW5jb3V0aG5lc3MgaGFzIG5vIGV4Y3VzZSB3aGF0ZXZl\\nciBpbiB0aGUgcHJvZHVjdGlvbnMgb2YgdGhlIG1hY2hpbmUuCj4KPiDigJQg\\nRXJpYyBHaWxsCgpXZeKAmXZlIGNvbWUgY2xvc2UgdG8g4oCccGVyZmVjdGlv\\nbuKAnSBpbiB0aGUgbGFzdCBmaXZlIGNlbnR1cmllcy4gVGhlIGxldHRlcnMg\\nYXJlIGNyaXNwIGFuZCB3aXRob3V0IHJvdWdoIGVkZ2VzLiBXZSBwcmludCBv\\ndXIgY29tcG9zaXRpb25zIHdpdGggaGlnaOKAk3ByZWNpc2lvbiBwcmludGVy\\ncyBvbiBhIGhpZ2ggcXVhbGl0eSwgbWFjaGluZSBtYWRlIHBhcGVyLgoKIVt0\\neXBlLXRocm91Z2gtdGltZS5qcGddKC9tZWRpYS90eXBlLXRocm91Z2gtdGlt\\nZS5qcGcpCgoqVHlwZSB0aHJvdWdoIDUgY2VudHVyaWVzLioKCldlIGxvc3Qg\\nYSBwYXJ0IG9mIG91cnNlbHZlcyBiZWNhdXNlIG9mIHRoaXMgY2hhc2UgYWZ0\\nZXIgcGVyZmVjdGlvbi4gV2UgZm9yZ290IGFib3V0IHRoZSBjcmFmdHNtYW5z\\naGlwIGFsb25nIHRoZSB3YXkuIEFuZCB0aGUgd29yc3QgcGFydCBpcyB0aGF0\\nIHdlIGRvbuKAmXQgY2FyZS4gVGhlIHRyYW5zaXRpb24gdG8gdGhlIGRpZ2l0\\nYWwgYWdlIG1hZGUgdGhhdCBjbGVhci4gV2UgY2hvb3NlIHR5cGVmYWNlcyBs\\naWtlIGNsdWVsZXNzIHpvbWJpZXMuIFRoZXJl4oCZcyBubyBtZWFuaW5nIGlu\\nIG91ciB3b3JrLiBUeXBlIHNpemVzLCBsZWFkaW5nLCBtYXJnaW5z4oCmIEl0\\n4oCZcyBhbGwganVzdCBhIGZldyBjbGlja3Mgb3IgbGluZXMgb2YgY29kZS4g\\nVGhlIG1lc3NhZ2UgaXNu4oCZdCBpbXBvcnRhbnQgYW55bW9yZS4gVGhlcmXi\\ngJlzIG5vIG1vcmUg4oCcd2h54oCdIGJlaGluZCB0aGUg4oCcd2hhdOKAnS4K\\nCiMjIENoYXNpbmcgcGVyZmVjdGlvbgoKSHVtYW4gYmVpbmdzIGFyZW7igJl0\\nIHBlcmZlY3QuIFBlcmZlY3Rpb24gaXMgc29tZXRoaW5nIHRoYXQgd2lsbCBh\\nbHdheXMgZWx1ZGUgdXMuIFRoZXJlIHdpbGwgYWx3YXlzIGJlIGEgc21hbGwg\\ncGFydCBvZiBodW1hbml0eSBpbiBldmVyeXRoaW5nIHdlIGRvLiBObyBtYXR0\\nZXIgaG93IHNtYWxsIHRoYXQgcGFydCwgd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0\\naGF0IGl0IHRyYW5zY2VuZHMgdGhlIGxpbWl0cyBvZiB0aGUgbWVkaXVtLiBX\\nZSBoYXZlIHRvIHRoaW5rIGFib3V0IHRoZSBtZXNzYWdlIGZpcnN0LiBXaGF0\\nIHR5cGVmYWNlIHNob3VsZCB3ZSB1c2UgYW5kIHdoeT8gRG9lcyB0aGUgdHlw\\nZWZhY2UgbWF0Y2ggdGhlIG1lc3NhZ2UgYW5kIHdoYXQgd2Ugd2FudCB0byBj\\nb21tdW5pY2F0ZSB3aXRoIGl0PyBXaGF0IHdpbGwgYmUgdGhlIGxlYWRpbmcg\\nYW5kIHdoeT8gV2lsbCB0aGVyZSBiZSBtb3JlIHR5cGVmYWNlcyBpbiBvdXIg\\nZGVzaWduPyBPbiB3aGF0IGdyb3VuZCB3aWxsIHRoZXkgYmUgY29tYmluZWQ/\\nIFdoYXQgbWFrZXMgb3VyIGRlc2lnbiB1bmlxdWUgYW5kIHdoeT8gVGhpcyBp\\ncyB0aGUgcGFydCBvZiBodW1hbml0eSB0aGF0IGlzIGxlZnQgaW4gdHlwb2dy\\nYXBoeS4gSXQgbWlnaHQgYmUgdGhlIGxhc3QgcGFydC4gQXJlIHdlIHJlYWxs\\neSBnb2luZyB0byBnaXZlIGl0IHVwPwoKKk9yaWdpbmFsbHkgcHVibGlzaGVk\\nIGJ5IFtNYXRlaiBMYXRpbl0oaHR0cDovL21hdGVqbGF0aW4uY28udWsvKSBv\\nbiBbTWVkaXVtXShodHRwczovL21lZGl1bS5jb20vZGVzaWduLW5vdGVzL2h1\\nbWFuZS10eXBvZ3JhcGh5LWluLXRoZS1kaWdpdGFsLWFnZS05YmQ1YzE2MTk5\\nYmQ/cmVmPXdlYmRlc2lnbmVybmV3cy5jb20jLmx5Z284MnoweCkuKg==\\n\",\"encoding\":\"base64\"}", + "status": 200 + }, + { + "method": "GET", + "url": "/repos/owner/repo/git/blobs/44f78c474d04273185a95821426f75affc9b0044", + "headers": { + "Content-Type": "application/json; charset=utf-8", + "Server": "GitHub.com", + "Status": "200 OK", + "X-RateLimit-Limit": "5000", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP", + "X-OAuth-Scopes": "delete_repo, repo", + "X-Accepted-OAuth-Scopes": "", + "X-GitHub-Media-Type": "github.v3; format=json", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "1; mode=block", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "content-length": "22506" + }, + "response": "{\"sha\":\"44f78c474d04273185a95821426f75affc9b0044\",\"node_id\":\"MDQ6QmxvYjI4Njc1NjgzMzo0NGY3OGM0NzRkMDQyNzMxODVhOTU4MjE0MjZmNzVhZmZjOWIwMDQ0\",\"size\":16071,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/44f78c474d04273185a95821426f75affc9b0044\",\"content\":\"LS0tCnRpdGxlOiAiSm9oYW5uZXMgR3V0ZW5iZXJnOiBUaGUgQmlydGggb2Yg\\nTW92YWJsZSBUeXBlIgpkYXRlOiAiMjAxNy0wOC0xOFQyMjoxMjowMy4yODRa\\nIgp0ZW1wbGF0ZTogInBvc3QiCmRyYWZ0OiBmYWxzZQpjYXRlZ29yeTogIlR5\\ncG9ncmFwaHkiCnRhZ3M6CiAgLSAiT3BlbiBzb3VyY2UiCiAgLSAiR2F0c2J5\\nIgogIC0gIlR5cG9ncmFwaHkiCmRlc2NyaXB0aW9uOiAiR2VybWFuIGludmVu\\ndG9yIEpvaGFubmVzIEd1dGVuYmVyZyBkZXZlbG9wZWQgYSBtZXRob2Qgb2Yg\\nbW92YWJsZSB0eXBlIGFuZCB1c2VkIGl0IHRvIGNyZWF0ZSBvbmUgb2YgdGhl\\nIHdlc3Rlcm4gd29ybGTigJlzIGZpcnN0IG1ham9yIHByaW50ZWQgYm9va3Ms\\nIHRoZSDigJxGb3J0eeKAk1R3b+KAk0xpbmXigJ0gQmlibGUuIgpjYW5vbmlj\\nYWw6ICcnCi0tLQoKR2VybWFuIGludmVudG9yIEpvaGFubmVzIEd1dGVuYmVy\\nZyBkZXZlbG9wZWQgYSBtZXRob2Qgb2YgbW92YWJsZSB0eXBlIGFuZCB1c2Vk\\nIGl0IHRvIGNyZWF0ZSBvbmUgb2YgdGhlIHdlc3Rlcm4gd29ybGTigJlzIGZp\\ncnN0IG1ham9yIHByaW50ZWQgYm9va3MsIHRoZSDigJxGb3J0eeKAk1R3b+KA\\nk0xpbmXigJ0gQmlibGUuCgoqKkpvaGFubmVzIEdlbnNmbGVpc2NoIHp1ciBM\\nYWRlbiB6dW0gR3V0ZW5iZXJnKiogKGMuIDEzOTgg4oCTIDE0NjgpIHdhcyBh\\nIEdlcm1hbiBibGFja3NtaXRoLCBnb2xkc21pdGgsIHByaW50ZXIsIGFuZCBw\\ndWJsaXNoZXIgd2hvIGludHJvZHVjZWQgcHJpbnRpbmcgdG8gRXVyb3BlLiBI\\naXMgaW52ZW50aW9uIG9mIG1lY2hhbmljYWwgbW92YWJsZSB0eXBlIHByaW50\\naW5nIHN0YXJ0ZWQgdGhlIFByaW50aW5nIFJldm9sdXRpb24gYW5kIGlzIHdp\\nZGVseSByZWdhcmRlZCBhcyB0aGUgbW9zdCBpbXBvcnRhbnQgZXZlbnQgb2Yg\\ndGhlIG1vZGVybiBwZXJpb2QuIEl0IHBsYXllZCBhIGtleSByb2xlIGluIHRo\\nZSBkZXZlbG9wbWVudCBvZiB0aGUgUmVuYWlzc2FuY2UsIFJlZm9ybWF0aW9u\\nLCB0aGUgQWdlIG9mIEVubGlnaHRlbm1lbnQsIGFuZCB0aGUgU2NpZW50aWZp\\nYyByZXZvbHV0aW9uIGFuZCBsYWlkIHRoZSBtYXRlcmlhbCBiYXNpcyBmb3Ig\\ndGhlIG1vZGVybiBrbm93bGVkZ2UtYmFzZWQgZWNvbm9teSBhbmQgdGhlIHNw\\ncmVhZCBvZiBsZWFybmluZyB0byB0aGUgbWFzc2VzLgoKPGZpZ3VyZSBjbGFz\\ncz0iZmxvYXQtcmlnaHQiIHN0eWxlPSJ3aWR0aDogMjQwcHgiPgoJPGltZyBz\\ncmM9Ii9tZWRpYS9ndXRlbmJlcmcuanBnIiBhbHQ9Ikd1dGVuYmVyZyI+Cgk8\\nZmlnY2FwdGlvbj5Kb2hhbm5lcyBHdXRlbmJlcmc8L2ZpZ2NhcHRpb24+Cjwv\\nZmlndXJlPgoKV2l0aCBoaXMgaW52ZW50aW9uIG9mIHRoZSBwcmludGluZyBw\\ncmVzcywgR3V0ZW5iZXJnIHdhcyB0aGUgZmlyc3QgRXVyb3BlYW4gdG8gdXNl\\nIG1vdmFibGUgdHlwZSBwcmludGluZywgaW4gYXJvdW5kIDE0MzkuIEFtb25n\\nIGhpcyBtYW55IGNvbnRyaWJ1dGlvbnMgdG8gcHJpbnRpbmcgYXJlOiB0aGUg\\naW52ZW50aW9uIG9mIGEgcHJvY2VzcyBmb3IgbWFzcy1wcm9kdWNpbmcgbW92\\nYWJsZSB0eXBlOyB0aGUgdXNlIG9mIG9pbC1iYXNlZCBpbms7IGFuZCB0aGUg\\ndXNlIG9mIGEgd29vZGVuIHByaW50aW5nIHByZXNzIHNpbWlsYXIgdG8gdGhl\\nIGFncmljdWx0dXJhbCBzY3JldyBwcmVzc2VzIG9mIHRoZSBwZXJpb2QuIEhp\\ncyB0cnVseSBlcG9jaGFsIGludmVudGlvbiB3YXMgdGhlIGNvbWJpbmF0aW9u\\nIG9mIHRoZXNlIGVsZW1lbnRzIGludG8gYSBwcmFjdGljYWwgc3lzdGVtIHRo\\nYXQgYWxsb3dlZCB0aGUgbWFzcyBwcm9kdWN0aW9uIG9mIHByaW50ZWQgYm9v\\na3MgYW5kIHdhcyBlY29ub21pY2FsbHkgdmlhYmxlIGZvciBwcmludGVycyBh\\nbmQgcmVhZGVycyBhbGlrZS4gR3V0ZW5iZXJnJ3MgbWV0aG9kIGZvciBtYWtp\\nbmcgdHlwZSBpcyB0cmFkaXRpb25hbGx5IGNvbnNpZGVyZWQgdG8gaGF2ZSBp\\nbmNsdWRlZCBhIHR5cGUgbWV0YWwgYWxsb3kgYW5kIGEgaGFuZCBtb3VsZCBm\\nb3IgY2FzdGluZyB0eXBlLiBUaGUgYWxsb3kgd2FzIGEgbWl4dHVyZSBvZiBs\\nZWFkLCB0aW4sIGFuZCBhbnRpbW9ueSB0aGF0IG1lbHRlZCBhdCBhIHJlbGF0\\naXZlbHkgbG93IHRlbXBlcmF0dXJlIGZvciBmYXN0ZXIgYW5kIG1vcmUgZWNv\\nbm9taWNhbCBjYXN0aW5nLCBjYXN0IHdlbGwsIGFuZCBjcmVhdGVkIGEgZHVy\\nYWJsZSB0eXBlLgoKSW4gUmVuYWlzc2FuY2UgRXVyb3BlLCB0aGUgYXJyaXZh\\nbCBvZiBtZWNoYW5pY2FsIG1vdmFibGUgdHlwZSBwcmludGluZyBpbnRyb2R1\\nY2VkIHRoZSBlcmEgb2YgbWFzcyBjb21tdW5pY2F0aW9uIHdoaWNoIHBlcm1h\\nbmVudGx5IGFsdGVyZWQgdGhlIHN0cnVjdHVyZSBvZiBzb2NpZXR5LiBUaGUg\\ncmVsYXRpdmVseSB1bnJlc3RyaWN0ZWQgY2lyY3VsYXRpb24gb2YgaW5mb3Jt\\nYXRpb24g4oCUIGluY2x1ZGluZyByZXZvbHV0aW9uYXJ5IGlkZWFzIOKAlCB0\\ncmFuc2NlbmRlZCBib3JkZXJzLCBjYXB0dXJlZCB0aGUgbWFzc2VzIGluIHRo\\nZSBSZWZvcm1hdGlvbiBhbmQgdGhyZWF0ZW5lZCB0aGUgcG93ZXIgb2YgcG9s\\naXRpY2FsIGFuZCByZWxpZ2lvdXMgYXV0aG9yaXRpZXM7IHRoZSBzaGFycCBp\\nbmNyZWFzZSBpbiBsaXRlcmFjeSBicm9rZSB0aGUgbW9ub3BvbHkgb2YgdGhl\\nIGxpdGVyYXRlIGVsaXRlIG9uIGVkdWNhdGlvbiBhbmQgbGVhcm5pbmcgYW5k\\nIGJvbHN0ZXJlZCB0aGUgZW1lcmdpbmcgbWlkZGxlIGNsYXNzLiBBY3Jvc3Mg\\nRXVyb3BlLCB0aGUgaW5jcmVhc2luZyBjdWx0dXJhbCBzZWxmLWF3YXJlbmVz\\ncyBvZiBpdHMgcGVvcGxlIGxlZCB0byB0aGUgcmlzZSBvZiBwcm90by1uYXRp\\nb25hbGlzbSwgYWNjZWxlcmF0ZWQgYnkgdGhlIGZsb3dlcmluZyBvZiB0aGUg\\nRXVyb3BlYW4gdmVybmFjdWxhciBsYW5ndWFnZXMgdG8gdGhlIGRldHJpbWVu\\ndCBvZiBMYXRpbidzIHN0YXR1cyBhcyBsaW5ndWEgZnJhbmNhLiBJbiB0aGUg\\nMTl0aCBjZW50dXJ5LCB0aGUgcmVwbGFjZW1lbnQgb2YgdGhlIGhhbmQtb3Bl\\ncmF0ZWQgR3V0ZW5iZXJnLXN0eWxlIHByZXNzIGJ5IHN0ZWFtLXBvd2VyZWQg\\ncm90YXJ5IHByZXNzZXMgYWxsb3dlZCBwcmludGluZyBvbiBhbiBpbmR1c3Ry\\naWFsIHNjYWxlLCB3aGlsZSBXZXN0ZXJuLXN0eWxlIHByaW50aW5nIHdhcyBh\\nZG9wdGVkIGFsbCBvdmVyIHRoZSB3b3JsZCwgYmVjb21pbmcgcHJhY3RpY2Fs\\nbHkgdGhlIHNvbGUgbWVkaXVtIGZvciBtb2Rlcm4gYnVsayBwcmludGluZy4K\\nClRoZSB1c2Ugb2YgbW92YWJsZSB0eXBlIHdhcyBhIG1hcmtlZCBpbXByb3Zl\\nbWVudCBvbiB0aGUgaGFuZHdyaXR0ZW4gbWFudXNjcmlwdCwgd2hpY2ggd2Fz\\nIHRoZSBleGlzdGluZyBtZXRob2Qgb2YgYm9vayBwcm9kdWN0aW9uIGluIEV1\\ncm9wZSwgYW5kIHVwb24gd29vZGJsb2NrIHByaW50aW5nLCBhbmQgcmV2b2x1\\ndGlvbml6ZWQgRXVyb3BlYW4gYm9vay1tYWtpbmcuIEd1dGVuYmVyZydzIHBy\\naW50aW5nIHRlY2hub2xvZ3kgc3ByZWFkIHJhcGlkbHkgdGhyb3VnaG91dCBF\\ndXJvcGUgYW5kIGxhdGVyIHRoZSB3b3JsZC4KCkhpcyBtYWpvciB3b3JrLCB0\\naGUgR3V0ZW5iZXJnIEJpYmxlIChhbHNvIGtub3duIGFzIHRoZSA0Mi1saW5l\\nIEJpYmxlKSwgaGFzIGJlZW4gYWNjbGFpbWVkIGZvciBpdHMgaGlnaCBhZXN0\\naGV0aWMgYW5kIHRlY2huaWNhbCBxdWFsaXR5LgoKIyMgUHJpbnRpbmcgUHJl\\nc3MKCkFyb3VuZCAxNDM5LCBHdXRlbmJlcmcgd2FzIGludm9sdmVkIGluIGEg\\nZmluYW5jaWFsIG1pc2FkdmVudHVyZSBtYWtpbmcgcG9saXNoZWQgbWV0YWwg\\nbWlycm9ycyAod2hpY2ggd2VyZSBiZWxpZXZlZCB0byBjYXB0dXJlIGhvbHkg\\nbGlnaHQgZnJvbSByZWxpZ2lvdXMgcmVsaWNzKSBmb3Igc2FsZSB0byBwaWxn\\ncmltcyB0byBBYWNoZW46IGluIDE0MzkgdGhlIGNpdHkgd2FzIHBsYW5uaW5n\\nIHRvIGV4aGliaXQgaXRzIGNvbGxlY3Rpb24gb2YgcmVsaWNzIGZyb20gRW1w\\nZXJvciBDaGFybGVtYWduZSBidXQgdGhlIGV2ZW50IHdhcyBkZWxheWVkIGJ5\\nIG9uZSB5ZWFyIGR1ZSB0byBhIHNldmVyZSBmbG9vZCBhbmQgdGhlIGNhcGl0\\nYWwgYWxyZWFkeSBzcGVudCBjb3VsZCBub3QgYmUgcmVwYWlkLiBXaGVuIHRo\\nZSBxdWVzdGlvbiBvZiBzYXRpc2Z5aW5nIHRoZSBpbnZlc3RvcnMgY2FtZSB1\\ncCwgR3V0ZW5iZXJnIGlzIHNhaWQgdG8gaGF2ZSBwcm9taXNlZCB0byBzaGFy\\nZSBhIOKAnHNlY3JldOKAnS4gSXQgaGFzIGJlZW4gd2lkZWx5IHNwZWN1bGF0\\nZWQgdGhhdCB0aGlzIHNlY3JldCBtYXkgaGF2ZSBiZWVuIHRoZSBpZGVhIG9m\\nIHByaW50aW5nIHdpdGggbW92YWJsZSB0eXBlLiBBbHNvIGFyb3VuZCAxNDM5\\n4oCTMTQ0MCwgdGhlIER1dGNoIExhdXJlbnMgSmFuc3pvb24gQ29zdGVyIGNh\\nbWUgdXAgd2l0aCB0aGUgaWRlYSBvZiBwcmludGluZy4gTGVnZW5kIGhhcyBp\\ndCB0aGF0IHRoZSBpZGVhIGNhbWUgdG8gaGltIOKAnGxpa2UgYSByYXkgb2Yg\\nbGlnaHTigJ0uCgo8ZmlndXJlIGNsYXNzPSJmbG9hdC1sZWZ0IiBzdHlsZT0i\\nd2lkdGg6IDI0MHB4Ij4KCTxpbWcgc3JjPSIvbWVkaWEvcHJpbnRpbmctcHJl\\nc3MuanBnIiBhbHQ9IkVhcmx5IFByaW50aW5nIFByZXNzIj4KCTxmaWdjYXB0\\naW9uPkVhcmx5IHdvb2RlbiBwcmludGluZyBwcmVzcyBhcyBkZXBpY3RlZCBp\\nbiAxNTY4LjwvZmlnY2FwdGlvbj4KPC9maWd1cmU+CgpVbnRpbCBhdCBsZWFz\\ndCAxNDQ0IGhlIGxpdmVkIGluIFN0cmFzYm91cmcsIG1vc3QgbGlrZWx5IGlu\\nIHRoZSBTdC4gQXJib2dhc3QgcGFyaXNoLiBJdCB3YXMgaW4gU3RyYXNib3Vy\\nZyBpbiAxNDQwIHRoYXQgR3V0ZW5iZXJnIGlzIHNhaWQgdG8gaGF2ZSBwZXJm\\nZWN0ZWQgYW5kIHVudmVpbGVkIHRoZSBzZWNyZXQgb2YgcHJpbnRpbmcgYmFz\\nZWQgb24gaGlzIHJlc2VhcmNoLCBteXN0ZXJpb3VzbHkgZW50aXRsZWQgS3Vu\\nc3QgdW5kIEF2ZW50dXIgKGFydCBhbmQgZW50ZXJwcmlzZSkuIEl0IGlzIG5v\\ndCBjbGVhciB3aGF0IHdvcmsgaGUgd2FzIGVuZ2FnZWQgaW4sIG9yIHdoZXRo\\nZXIgc29tZSBlYXJseSB0cmlhbHMgd2l0aCBwcmludGluZyBmcm9tIG1vdmFi\\nbGUgdHlwZSBtYXkgaGF2ZSBiZWVuIGNvbmR1Y3RlZCB0aGVyZS4gQWZ0ZXIg\\ndGhpcywgdGhlcmUgaXMgYSBnYXAgb2YgZm91ciB5ZWFycyBpbiB0aGUgcmVj\\nb3JkLiBJbiAxNDQ4LCBoZSB3YXMgYmFjayBpbiBNYWlueiwgd2hlcmUgaGUg\\ndG9vayBvdXQgYSBsb2FuIGZyb20gaGlzIGJyb3RoZXItaW4tbGF3IEFybm9s\\nZCBHZWx0aHVzLCBxdWl0ZSBwb3NzaWJseSBmb3IgYSBwcmludGluZyBwcmVz\\ncyBvciByZWxhdGVkIHBhcmFwaGVybmFsaWEuIEJ5IHRoaXMgZGF0ZSwgR3V0\\nZW5iZXJnIG1heSBoYXZlIGJlZW4gZmFtaWxpYXIgd2l0aCBpbnRhZ2xpbyBw\\ncmludGluZzsgaXQgaXMgY2xhaW1lZCB0aGF0IGhlIGhhZCB3b3JrZWQgb24g\\nY29wcGVyIGVuZ3JhdmluZ3Mgd2l0aCBhbiBhcnRpc3Qga25vd24gYXMgdGhl\\nIE1hc3RlciBvZiBQbGF5aW5nIENhcmRzLgoKQnkgMTQ1MCwgdGhlIHByZXNz\\nIHdhcyBpbiBvcGVyYXRpb24sIGFuZCBhIEdlcm1hbiBwb2VtIGhhZCBiZWVu\\nIHByaW50ZWQsIHBvc3NpYmx5IHRoZSBmaXJzdCBpdGVtIHRvIGJlIHByaW50\\nZWQgdGhlcmUuIEd1dGVuYmVyZyB3YXMgYWJsZSB0byBjb252aW5jZSB0aGUg\\nd2VhbHRoeSBtb25leWxlbmRlciBKb2hhbm4gRnVzdCBmb3IgYSBsb2FuIG9m\\nIDgwMCBndWlsZGVycy4gUGV0ZXIgU2Now7ZmZmVyLCB3aG8gYmVjYW1lIEZ1\\nc3TigJlzIHNvbi1pbi1sYXcsIGFsc28gam9pbmVkIHRoZSBlbnRlcnByaXNl\\nLiBTY2jDtmZmZXIgaGFkIHdvcmtlZCBhcyBhIHNjcmliZSBpbiBQYXJpcyBh\\nbmQgaXMgYmVsaWV2ZWQgdG8gaGF2ZSBkZXNpZ25lZCBzb21lIG9mIHRoZSBm\\naXJzdCB0eXBlZmFjZXMuCgo8ZmlndXJlPgoJPGJsb2NrcXVvdGU+CgkJPHA+\\nQWxsIHRoYXQgaGFzIGJlZW4gd3JpdHRlbiB0byBtZSBhYm91dCB0aGF0IG1h\\ncnZlbG91cyBtYW4gc2VlbiBhdCBGcmFua2Z1cnQgaXMgdHJ1ZS4gSSBoYXZl\\nIG5vdCBzZWVuIGNvbXBsZXRlIEJpYmxlcyBidXQgb25seSBhIG51bWJlciBv\\nZiBxdWlyZXMgb2YgdmFyaW91cyBib29rcyBvZiB0aGUgQmlibGUuIFRoZSBz\\nY3JpcHQgd2FzIHZlcnkgbmVhdCBhbmQgbGVnaWJsZSwgbm90IGF0IGFsbCBk\\naWZmaWN1bHQgdG8gZm9sbG934oCUeW91ciBncmFjZSB3b3VsZCBiZSBhYmxl\\nIHRvIHJlYWQgaXQgd2l0aG91dCBlZmZvcnQsIGFuZCBpbmRlZWQgd2l0aG91\\ndCBnbGFzc2VzLjwvcD4KCQk8Zm9vdGVyPgoJCQk8Y2l0ZT7igJRGdXR1cmUg\\ncG9wZSBQaXVzIElJIGluIGEgbGV0dGVyIHRvIENhcmRpbmFsIENhcnZhamFs\\nLCBNYXJjaCAxNDU1PC9jaXRlPgoJCTwvZm9vdGVyPgoJPC9ibG9ja3F1b3Rl\\nPgo8L2ZpZ3VyZT4KCkd1dGVuYmVyZydzIHdvcmtzaG9wIHdhcyBzZXQgdXAg\\nYXQgSG9mIEh1bWJyZWNodCwgYSBwcm9wZXJ0eSBiZWxvbmdpbmcgdG8gYSBk\\naXN0YW50IHJlbGF0aXZlLiBJdCBpcyBub3QgY2xlYXIgd2hlbiBHdXRlbmJl\\ncmcgY29uY2VpdmVkIHRoZSBCaWJsZSBwcm9qZWN0LCBidXQgZm9yIHRoaXMg\\naGUgYm9ycm93ZWQgYW5vdGhlciA4MDAgZ3VpbGRlcnMgZnJvbSBGdXN0LCBh\\nbmQgd29yayBjb21tZW5jZWQgaW4gMTQ1Mi4gQXQgdGhlIHNhbWUgdGltZSwg\\ndGhlIHByZXNzIHdhcyBhbHNvIHByaW50aW5nIG90aGVyLCBtb3JlIGx1Y3Jh\\ndGl2ZSB0ZXh0cyAocG9zc2libHkgTGF0aW4gZ3JhbW1hcnMpLiBUaGVyZSBp\\ncyBhbHNvIHNvbWUgc3BlY3VsYXRpb24gdGhhdCB0aGVyZSBtYXkgaGF2ZSBi\\nZWVuIHR3byBwcmVzc2VzLCBvbmUgZm9yIHRoZSBwZWRlc3RyaWFuIHRleHRz\\nLCBhbmQgb25lIGZvciB0aGUgQmlibGUuIE9uZSBvZiB0aGUgcHJvZml0LW1h\\na2luZyBlbnRlcnByaXNlcyBvZiB0aGUgbmV3IHByZXNzIHdhcyB0aGUgcHJp\\nbnRpbmcgb2YgdGhvdXNhbmRzIG9mIGluZHVsZ2VuY2VzIGZvciB0aGUgY2h1\\ncmNoLCBkb2N1bWVudGVkIGZyb20gMTQ1NOKAkzU1LgoKSW4gMTQ1NSBHdXRl\\nbmJlcmcgY29tcGxldGVkIGhpcyA0Mi1saW5lIEJpYmxlLCBrbm93biBhcyB0\\naGUgR3V0ZW5iZXJnIEJpYmxlLiBBYm91dCAxODAgY29waWVzIHdlcmUgcHJp\\nbnRlZCwgbW9zdCBvbiBwYXBlciBhbmQgc29tZSBvbiB2ZWxsdW0uCgojIyBD\\nb3VydCBDYXNlCgpTb21lIHRpbWUgaW4gMTQ1NiwgdGhlcmUgd2FzIGEgZGlz\\ncHV0ZSBiZXR3ZWVuIEd1dGVuYmVyZyBhbmQgRnVzdCwgYW5kIEZ1c3QgZGVt\\nYW5kZWQgaGlzIG1vbmV5IGJhY2ssIGFjY3VzaW5nIEd1dGVuYmVyZyBvZiBt\\naXN1c2luZyB0aGUgZnVuZHMuIE1lYW53aGlsZSB0aGUgZXhwZW5zZXMgb2Yg\\ndGhlIEJpYmxlIHByb2plY3QgaGFkIHByb2xpZmVyYXRlZCwgYW5kIEd1dGVu\\nYmVyZydzIGRlYnQgbm93IGV4Y2VlZGVkIDIwLDAwMCBndWlsZGVycy4gRnVz\\ndCBzdWVkIGF0IHRoZSBhcmNoYmlzaG9wJ3MgY291cnQuIEEgTm92ZW1iZXIg\\nMTQ1NSBsZWdhbCBkb2N1bWVudCByZWNvcmRzIHRoYXQgdGhlcmUgd2FzIGEg\\ncGFydG5lcnNoaXAgZm9yIGEgInByb2plY3Qgb2YgdGhlIGJvb2tzLCIgdGhl\\nIGZ1bmRzIGZvciB3aGljaCBHdXRlbmJlcmcgaGFkIHVzZWQgZm9yIG90aGVy\\nIHB1cnBvc2VzLCBhY2NvcmRpbmcgdG8gRnVzdC4gVGhlIGNvdXJ0IGRlY2lk\\nZWQgaW4gZmF2b3Igb2YgRnVzdCwgZ2l2aW5nIGhpbSBjb250cm9sIG92ZXIg\\ndGhlIEJpYmxlIHByaW50aW5nIHdvcmtzaG9wIGFuZCBoYWxmIG9mIGFsbCBw\\ncmludGVkIEJpYmxlcy4KClRodXMgR3V0ZW5iZXJnIHdhcyBlZmZlY3RpdmVs\\neSBiYW5rcnVwdCwgYnV0IGl0IGFwcGVhcnMgaGUgcmV0YWluZWQgKG9yIHJl\\nLXN0YXJ0ZWQpIGEgc21hbGwgcHJpbnRpbmcgc2hvcCwgYW5kIHBhcnRpY2lw\\nYXRlZCBpbiB0aGUgcHJpbnRpbmcgb2YgYSBCaWJsZSBpbiB0aGUgdG93biBv\\nZiBCYW1iZXJnIGFyb3VuZCAxNDU5LCBmb3Igd2hpY2ggaGUgc2VlbXMgYXQg\\nbGVhc3QgdG8gaGF2ZSBzdXBwbGllZCB0aGUgdHlwZS4gQnV0IHNpbmNlIGhp\\ncyBwcmludGVkIGJvb2tzIG5ldmVyIGNhcnJ5IGhpcyBuYW1lIG9yIGEgZGF0\\nZSwgaXQgaXMgZGlmZmljdWx0IHRvIGJlIGNlcnRhaW4sIGFuZCB0aGVyZSBp\\ncyBjb25zZXF1ZW50bHkgYSBjb25zaWRlcmFibGUgc2Nob2xhcmx5IGRlYmF0\\nZSBvbiB0aGlzIHN1YmplY3QuIEl0IGlzIGFsc28gcG9zc2libGUgdGhhdCB0\\naGUgbGFyZ2UgQ2F0aG9saWNvbiBkaWN0aW9uYXJ5LCAzMDAgY29waWVzIG9m\\nIDc1NCBwYWdlcywgcHJpbnRlZCBpbiBNYWlueiBpbiAxNDYwLCBtYXkgaGF2\\nZSBiZWVuIGV4ZWN1dGVkIGluIGhpcyB3b3Jrc2hvcC4KCk1lYW53aGlsZSwg\\ndGhlIEZ1c3TigJNTY2jDtmZmZXIgc2hvcCB3YXMgdGhlIGZpcnN0IGluIEV1\\ncm9wZSB0byBicmluZyBvdXQgYSBib29rIHdpdGggdGhlIHByaW50ZXIncyBu\\nYW1lIGFuZCBkYXRlLCB0aGUgTWFpbnogUHNhbHRlciBvZiBBdWd1c3QgMTQ1\\nNywgYW5kIHdoaWxlIHByb3VkbHkgcHJvY2xhaW1pbmcgdGhlIG1lY2hhbmlj\\nYWwgcHJvY2VzcyBieSB3aGljaCBpdCBoYWQgYmVlbiBwcm9kdWNlZCwgaXQg\\nbWFkZSBubyBtZW50aW9uIG9mIEd1dGVuYmVyZy4KCiMjIExhdGVyIExpZmUK\\nCkluIDE0NjIsIGR1cmluZyBhIGNvbmZsaWN0IGJldHdlZW4gdHdvIGFyY2hi\\naXNob3BzLCBNYWlueiB3YXMgc2Fja2VkIGJ5IGFyY2hiaXNob3AgQWRvbHBo\\nIHZvbiBOYXNzYXUsIGFuZCBHdXRlbmJlcmcgd2FzIGV4aWxlZC4gQW4gb2xk\\nIG1hbiBieSBub3csIGhlIG1vdmVkIHRvIEVsdHZpbGxlIHdoZXJlIGhlIG1h\\neSBoYXZlIGluaXRpYXRlZCBhbmQgc3VwZXJ2aXNlZCBhIG5ldyBwcmludGlu\\nZyBwcmVzcyBiZWxvbmdpbmcgdG8gdGhlIGJyb3RoZXJzIEJlY2h0ZXJtw7xu\\nemUuCgpJbiBKYW51YXJ5IDE0NjUsIEd1dGVuYmVyZydzIGFjaGlldmVtZW50\\ncyB3ZXJlIHJlY29nbml6ZWQgYW5kIGhlIHdhcyBnaXZlbiB0aGUgdGl0bGUg\\nSG9mbWFubiAoZ2VudGxlbWFuIG9mIHRoZSBjb3VydCkgYnkgdm9uIE5hc3Nh\\ndS4gVGhpcyBob25vciBpbmNsdWRlZCBhIHN0aXBlbmQsIGFuIGFubnVhbCBj\\nb3VydCBvdXRmaXQsIGFzIHdlbGwgYXMgMiwxODAgbGl0cmVzIG9mIGdyYWlu\\nIGFuZCAyLDAwMCBsaXRyZXMgb2Ygd2luZSB0YXgtZnJlZS4gSXQgaXMgYmVs\\naWV2ZWQgaGUgbWF5IGhhdmUgbW92ZWQgYmFjayB0byBNYWlueiBhcm91bmQg\\ndGhpcyB0aW1lLCBidXQgdGhpcyBpcyBub3QgY2VydGFpbi4KCioqKgoKR3V0\\nZW5iZXJnIGRpZWQgaW4gMTQ2OCBhbmQgd2FzIGJ1cmllZCBpbiB0aGUgRnJh\\nbmNpc2NhbiBjaHVyY2ggYXQgTWFpbnosIGhpcyBjb250cmlidXRpb25zIGxh\\ncmdlbHkgdW5rbm93bi4gVGhpcyBjaHVyY2ggYW5kIHRoZSBjZW1ldGVyeSB3\\nZXJlIGxhdGVyIGRlc3Ryb3llZCwgYW5kIEd1dGVuYmVyZydzIGdyYXZlIGlz\\nIG5vdyBsb3N0LgoKSW4gMTUwNCwgaGUgd2FzIG1lbnRpb25lZCBhcyB0aGUg\\naW52ZW50b3Igb2YgdHlwb2dyYXBoeSBpbiBhIGJvb2sgYnkgUHJvZmVzc29y\\nIEl2byBXaXR0aWcuIEl0IHdhcyBub3QgdW50aWwgMTU2NyB0aGF0IHRoZSBm\\naXJzdCBwb3J0cmFpdCBvZiBHdXRlbmJlcmcsIGFsbW9zdCBjZXJ0YWlubHkg\\nYW4gaW1hZ2luYXJ5IHJlY29uc3RydWN0aW9uLCBhcHBlYXJlZCBpbiBIZWlu\\ncmljaCBQYW50YWxlb24ncyBiaW9ncmFwaHkgb2YgZmFtb3VzIEdlcm1hbnMu\\nCgojIyBQcmludGluZyBNZXRob2QgV2l0aCBNb3ZhYmxlIFR5cGUKCkd1dGVu\\nYmVyZydzIGVhcmx5IHByaW50aW5nIHByb2Nlc3MsIGFuZCB3aGF0IHRlc3Rz\\nIGhlIG1heSBoYXZlIG1hZGUgd2l0aCBtb3ZhYmxlIHR5cGUsIGFyZSBub3Qg\\na25vd24gaW4gZ3JlYXQgZGV0YWlsLiBIaXMgbGF0ZXIgQmlibGVzIHdlcmUg\\ncHJpbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIGhhdmUgcmVxdWlyZWQgbGFy\\nZ2UgcXVhbnRpdGllcyBvZiB0eXBlLCBzb21lIGVzdGltYXRlcyBzdWdnZXN0\\naW5nIGFzIG1hbnkgYXMgMTAwLDAwMCBpbmRpdmlkdWFsIHNvcnRzLiBTZXR0\\naW5nIGVhY2ggcGFnZSB3b3VsZCB0YWtlLCBwZXJoYXBzLCBoYWxmIGEgZGF5\\nLCBhbmQgY29uc2lkZXJpbmcgYWxsIHRoZSB3b3JrIGluIGxvYWRpbmcgdGhl\\nIHByZXNzLCBpbmtpbmcgdGhlIHR5cGUsIHB1bGxpbmcgdGhlIGltcHJlc3Np\\nb25zLCBoYW5naW5nIHVwIHRoZSBzaGVldHMsIGRpc3RyaWJ1dGluZyB0aGUg\\ndHlwZSwgZXRjLiwgaXQgaXMgdGhvdWdodCB0aGF0IHRoZSBHdXRlbmJlcmfi\\ngJNGdXN0IHNob3AgbWlnaHQgaGF2ZSBlbXBsb3llZCBhcyBtYW55IGFzIDI1\\nIGNyYWZ0c21lbi4KCiFbTW92YWJsZSBtZXRhbCB0eXBlLCBhbmQgY29tcG9z\\naW5nIHN0aWNrLCBkZXNjZW5kZWQgZnJvbSBHdXRlbmJlcmcncyBwcmVzcy4g\\nUGhvdG8gYnkgV2lsbGkgSGVpZGVsYmFjaC4gTGljZW5zZWQgdW5kZXIgQ0Mg\\nQlkgMi41XSgvbWVkaWEvbW92YWJsZS10eXBlLmpwZykKCipNb3ZhYmxlIG1l\\ndGFsIHR5cGUsIGFuZCBjb21wb3Npbmcgc3RpY2ssIGRlc2NlbmRlZCBmcm9t\\nIEd1dGVuYmVyZydzIHByZXNzLiBQaG90byBieSBXaWxsaSBIZWlkZWxiYWNo\\nLiBMaWNlbnNlZCB1bmRlciBDQyBCWSAyLjUqCgpHdXRlbmJlcmcncyB0ZWNo\\nbmlxdWUgb2YgbWFraW5nIG1vdmFibGUgdHlwZSByZW1haW5zIHVuY2xlYXIu\\nIEluIHRoZSBmb2xsb3dpbmcgZGVjYWRlcywgcHVuY2hlcyBhbmQgY29wcGVy\\nIG1hdHJpY2VzIGJlY2FtZSBzdGFuZGFyZGl6ZWQgaW4gdGhlIHJhcGlkbHkg\\nZGlzc2VtaW5hdGluZyBwcmludGluZyBwcmVzc2VzIGFjcm9zcyBFdXJvcGUu\\nIFdoZXRoZXIgR3V0ZW5iZXJnIHVzZWQgdGhpcyBzb3BoaXN0aWNhdGVkIHRl\\nY2huaXF1ZSBvciBhIHNvbWV3aGF0IHByaW1pdGl2ZSB2ZXJzaW9uIGhhcyBi\\nZWVuIHRoZSBzdWJqZWN0IG9mIGNvbnNpZGVyYWJsZSBkZWJhdGUuCgpJbiB0\\naGUgc3RhbmRhcmQgcHJvY2VzcyBvZiBtYWtpbmcgdHlwZSwgYSBoYXJkIG1l\\ndGFsIHB1bmNoIChtYWRlIGJ5IHB1bmNoY3V0dGluZywgd2l0aCB0aGUgbGV0\\ndGVyIGNhcnZlZCBiYWNrIHRvIGZyb250KSBpcyBoYW1tZXJlZCBpbnRvIGEg\\nc29mdGVyIGNvcHBlciBiYXIsIGNyZWF0aW5nIGEgbWF0cml4LiBUaGlzIGlz\\nIHRoZW4gcGxhY2VkIGludG8gYSBoYW5kLWhlbGQgbW91bGQgYW5kIGEgcGll\\nY2Ugb2YgdHlwZSwgb3IgInNvcnQiLCBpcyBjYXN0IGJ5IGZpbGxpbmcgdGhl\\nIG1vdWxkIHdpdGggbW9sdGVuIHR5cGUtbWV0YWw7IHRoaXMgY29vbHMgYWxt\\nb3N0IGF0IG9uY2UsIGFuZCB0aGUgcmVzdWx0aW5nIHBpZWNlIG9mIHR5cGUg\\nY2FuIGJlIHJlbW92ZWQgZnJvbSB0aGUgbW91bGQuIFRoZSBtYXRyaXggY2Fu\\nIGJlIHJldXNlZCB0byBjcmVhdGUgaHVuZHJlZHMsIG9yIHRob3VzYW5kcywg\\nb2YgaWRlbnRpY2FsIHNvcnRzIHNvIHRoYXQgdGhlIHNhbWUgY2hhcmFjdGVy\\nIGFwcGVhcmluZyBhbnl3aGVyZSB3aXRoaW4gdGhlIGJvb2sgd2lsbCBhcHBl\\nYXIgdmVyeSB1bmlmb3JtLCBnaXZpbmcgcmlzZSwgb3ZlciB0aW1lLCB0byB0\\naGUgZGV2ZWxvcG1lbnQgb2YgZGlzdGluY3Qgc3R5bGVzIG9mIHR5cGVmYWNl\\ncyBvciBmb250cy4gQWZ0ZXIgY2FzdGluZywgdGhlIHNvcnRzIGFyZSBhcnJh\\nbmdlZCBpbnRvIHR5cGUtY2FzZXMsIGFuZCB1c2VkIHRvIG1ha2UgdXAgcGFn\\nZXMgd2hpY2ggYXJlIGlua2VkIGFuZCBwcmludGVkLCBhIHByb2NlZHVyZSB3\\naGljaCBjYW4gYmUgcmVwZWF0ZWQgaHVuZHJlZHMsIG9yIHRob3VzYW5kcywg\\nb2YgdGltZXMuIFRoZSBzb3J0cyBjYW4gYmUgcmV1c2VkIGluIGFueSBjb21i\\naW5hdGlvbiwgZWFybmluZyB0aGUgcHJvY2VzcyB0aGUgbmFtZSBvZiDigJxt\\nb3ZhYmxlIHR5cGXigJ0uCgpUaGUgaW52ZW50aW9uIG9mIHRoZSBtYWtpbmcg\\nb2YgdHlwZXMgd2l0aCBwdW5jaCwgbWF0cml4IGFuZCBtb2xkIGhhcyBiZWVu\\nIHdpZGVseSBhdHRyaWJ1dGVkIHRvIEd1dGVuYmVyZy4gSG93ZXZlciwgcmVj\\nZW50IGV2aWRlbmNlIHN1Z2dlc3RzIHRoYXQgR3V0ZW5iZXJnJ3MgcHJvY2Vz\\ncyB3YXMgc29tZXdoYXQgZGlmZmVyZW50LiBJZiBoZSB1c2VkIHRoZSBwdW5j\\naCBhbmQgbWF0cml4IGFwcHJvYWNoLCBhbGwgaGlzIGxldHRlcnMgc2hvdWxk\\nIGhhdmUgYmVlbiBuZWFybHkgaWRlbnRpY2FsLCB3aXRoIHNvbWUgdmFyaWF0\\naW9ucyBkdWUgdG8gbWlzY2FzdGluZyBhbmQgaW5raW5nLiBIb3dldmVyLCB0\\naGUgdHlwZSB1c2VkIGluIEd1dGVuYmVyZydzIGVhcmxpZXN0IHdvcmsgc2hv\\nd3Mgb3RoZXIgdmFyaWF0aW9ucy4KCjxmaWd1cmU+Cgk8YmxvY2txdW90ZT4K\\nCQk8cD5JdCBpcyBhIHByZXNzLCBjZXJ0YWlubHksIGJ1dCBhIHByZXNzIGZy\\nb20gd2hpY2ggc2hhbGwgZmxvdyBpbiBpbmV4aGF1c3RpYmxlIHN0cmVhbXPi\\ngKYgVGhyb3VnaCBpdCwgZ29kIHdpbGwgc3ByZWFkIGhpcyB3b3JkLjwvcD4K\\nCQk8Zm9vdGVyPgoJCQk8Y2l0ZT7igJRKb2hhbm5lcyBHdXRlbmJlcmc8L2Np\\ndGU+CgkJPC9mb290ZXI+Cgk8L2Jsb2NrcXVvdGU+CjwvZmlndXJlPgoKSW4g\\nMjAwMSwgdGhlIHBoeXNpY2lzdCBCbGFpc2UgQWfDvGVyYSB5IEFyY2FzIGFu\\nZCBQcmluY2V0b24gbGlicmFyaWFuIFBhdWwgTmVlZGhhbSwgdXNlZCBkaWdp\\ndGFsIHNjYW5zIG9mIGEgUGFwYWwgYnVsbCBpbiB0aGUgU2NoZWlkZSBMaWJy\\nYXJ5LCBQcmluY2V0b24sIHRvIGNhcmVmdWxseSBjb21wYXJlIHRoZSBzYW1l\\nIGxldHRlcnMgKHR5cGVzKSBhcHBlYXJpbmcgaW4gZGlmZmVyZW50IHBhcnRz\\nIG9mIHRoZSBwcmludGVkIHRleHQuIFRoZSBpcnJlZ3VsYXJpdGllcyBpbiBH\\ndXRlbmJlcmcncyB0eXBlLCBwYXJ0aWN1bGFybHkgaW4gc2ltcGxlIGNoYXJh\\nY3RlcnMgc3VjaCBhcyB0aGUgaHlwaGVuLCBzdWdnZXN0ZWQgdGhhdCB0aGUg\\ndmFyaWF0aW9ucyBjb3VsZCBub3QgaGF2ZSBjb21lIGZyb20gZWl0aGVyIGlu\\nayBzbWVhciBvciBmcm9tIHdlYXIgYW5kIGRhbWFnZSBvbiB0aGUgcGllY2Vz\\nIG9mIG1ldGFsIG9uIHRoZSB0eXBlcyB0aGVtc2VsdmVzLiBXaGlsZSBzb21l\\nIGlkZW50aWNhbCB0eXBlcyBhcmUgY2xlYXJseSB1c2VkIG9uIG90aGVyIHBh\\nZ2VzLCBvdGhlciB2YXJpYXRpb25zLCBzdWJqZWN0ZWQgdG8gZGV0YWlsZWQg\\naW1hZ2UgYW5hbHlzaXMsIHN1Z2dlc3RlZCB0aGF0IHRoZXkgY291bGQgbm90\\nIGhhdmUgYmVlbiBwcm9kdWNlZCBmcm9tIHRoZSBzYW1lIG1hdHJpeC4gVHJh\\nbnNtaXR0ZWQgbGlnaHQgcGljdHVyZXMgb2YgdGhlIHBhZ2UgYWxzbyBhcHBl\\nYXJlZCB0byByZXZlYWwgc3Vic3RydWN0dXJlcyBpbiB0aGUgdHlwZSB0aGF0\\nIGNvdWxkIG5vdCBhcmlzZSBmcm9tIHRyYWRpdGlvbmFsIHB1bmNoY3V0dGlu\\nZyB0ZWNobmlxdWVzLiBUaGV5IGh5cG90aGVzaXplZCB0aGF0IHRoZSBtZXRo\\nb2QgbWF5IGhhdmUgaW52b2x2ZWQgaW1wcmVzc2luZyBzaW1wbGUgc2hhcGVz\\nIHRvIGNyZWF0ZSBhbHBoYWJldHMgaW4g4oCcY3VuZWlmb3Jt4oCdIHN0eWxl\\nIGluIGEgbWF0cml4IG1hZGUgb2Ygc29tZSBzb2Z0IG1hdGVyaWFsLCBwZXJo\\nYXBzIHNhbmQuIENhc3RpbmcgdGhlIHR5cGUgd291bGQgZGVzdHJveSB0aGUg\\nbW91bGQsIGFuZCB0aGUgbWF0cml4IHdvdWxkIG5lZWQgdG8gYmUgcmVjcmVh\\ndGVkIHRvIG1ha2UgZWFjaCBhZGRpdGlvbmFsIHNvcnQuIFRoaXMgY291bGQg\\nZXhwbGFpbiB0aGUgdmFyaWF0aW9ucyBpbiB0aGUgdHlwZSwgYXMgd2VsbCBh\\ncyB0aGUgc3Vic3RydWN0dXJlcyBvYnNlcnZlZCBpbiB0aGUgcHJpbnRlZCBp\\nbWFnZXMuCgpUaHVzLCB0aGV5IGZlZWwgdGhhdCDigJx0aGUgZGVjaXNpdmUg\\nZmFjdG9yIGZvciB0aGUgYmlydGggb2YgdHlwb2dyYXBoeeKAnSwgdGhlIHVz\\nZSBvZiByZXVzYWJsZSBtb3VsZHMgZm9yIGNhc3RpbmcgdHlwZSwgbWlnaHQg\\naGF2ZSBiZWVuIGEgbW9yZSBwcm9ncmVzc2l2ZSBwcm9jZXNzIHRoYW4gd2Fz\\nIHByZXZpb3VzbHkgdGhvdWdodC4gVGhleSBzdWdnZXN0IHRoYXQgdGhlIGFk\\nZGl0aW9uYWwgc3RlcCBvZiB1c2luZyB0aGUgcHVuY2ggdG8gY3JlYXRlIGEg\\nbW91bGQgdGhhdCBjb3VsZCBiZSByZXVzZWQgbWFueSB0aW1lcyB3YXMgbm90\\nIHRha2VuIHVudGlsIHR3ZW50eSB5ZWFycyBsYXRlciwgaW4gdGhlIDE0NzBz\\nLiBPdGhlcnMgaGF2ZSBub3QgYWNjZXB0ZWQgc29tZSBvciBhbGwgb2YgdGhl\\naXIgc3VnZ2VzdGlvbnMsIGFuZCBoYXZlIGludGVycHJldGVkIHRoZSBldmlk\\nZW5jZSBpbiBvdGhlciB3YXlzLCBhbmQgdGhlIHRydXRoIG9mIHRoZSBtYXR0\\nZXIgcmVtYWlucyB2ZXJ5IHVuY2VydGFpbi4KCkEgMTU2OCBoaXN0b3J5IGJ5\\nIEhhZHJpYW51cyBKdW5pdXMgb2YgSG9sbGFuZCBjbGFpbXMgdGhhdCB0aGUg\\nYmFzaWMgaWRlYSBvZiB0aGUgbW92YWJsZSB0eXBlIGNhbWUgdG8gR3V0ZW5i\\nZXJnIGZyb20gTGF1cmVucyBKYW5zem9vbiBDb3N0ZXIgdmlhIEZ1c3QsIHdo\\nbyB3YXMgYXBwcmVudGljZWQgdG8gQ29zdGVyIGluIHRoZSAxNDMwcyBhbmQg\\nbWF5IGhhdmUgYnJvdWdodCBzb21lIG9mIGhpcyBlcXVpcG1lbnQgZnJvbSBI\\nYWFybGVtIHRvIE1haW56LiBXaGlsZSBDb3N0ZXIgYXBwZWFycyB0byBoYXZl\\nIGV4cGVyaW1lbnRlZCB3aXRoIG1vdWxkcyBhbmQgY2FzdGFibGUgbWV0YWwg\\ndHlwZSwgdGhlcmUgaXMgbm8gZXZpZGVuY2UgdGhhdCBoZSBoYWQgYWN0dWFs\\nbHkgcHJpbnRlZCBhbnl0aGluZyB3aXRoIHRoaXMgdGVjaG5vbG9neS4gSGUg\\nd2FzIGFuIGludmVudG9yIGFuZCBhIGdvbGRzbWl0aC4gSG93ZXZlciwgdGhl\\ncmUgaXMgb25lIGluZGlyZWN0IHN1cHBvcnRlciBvZiB0aGUgY2xhaW0gdGhh\\ndCBDb3N0ZXIgbWlnaHQgYmUgdGhlIGludmVudG9yLiBUaGUgYXV0aG9yIG9m\\nIHRoZSBDb2xvZ25lIENocm9uaWNsZSBvZiAxNDk5IHF1b3RlcyBVbHJpY2gg\\nWmVsbCwgdGhlIGZpcnN0IHByaW50ZXIgb2YgQ29sb2duZSwgdGhhdCBwcmlu\\ndGluZyB3YXMgcGVyZm9ybWVkIGluIE1haW56IGluIDE0NTAsIGJ1dCB0aGF0\\nIHNvbWUgdHlwZSBvZiBwcmludGluZyBvZiBsb3dlciBxdWFsaXR5IGhhZCBw\\ncmV2aW91c2x5IG9jY3VycmVkIGluIHRoZSBOZXRoZXJsYW5kcy4gSG93ZXZl\\nciwgdGhlIGNocm9uaWNsZSBkb2VzIG5vdCBtZW50aW9uIHRoZSBuYW1lIG9m\\nIENvc3Rlciwgd2hpbGUgaXQgYWN0dWFsbHkgY3JlZGl0cyBHdXRlbmJlcmcg\\nYXMgdGhlICJmaXJzdCBpbnZlbnRvciBvZiBwcmludGluZyIgaW4gdGhlIHZl\\ncnkgc2FtZSBwYXNzYWdlIChmb2wuIDMxMikuIFRoZSBmaXJzdCBzZWN1cmVs\\neSBkYXRlZCBib29rIGJ5IER1dGNoIHByaW50ZXJzIGlzIGZyb20gMTQ3MSwg\\nYW5kIHRoZSBDb3N0ZXIgY29ubmVjdGlvbiBpcyB0b2RheSByZWdhcmRlZCBh\\ncyBhIG1lcmUgbGVnZW5kLgoKVGhlIDE5dGggY2VudHVyeSBwcmludGVyIGFu\\nZCB0eXBlZm91bmRlciBGb3VybmllciBMZSBKZXVuZSBzdWdnZXN0ZWQgdGhh\\ndCBHdXRlbmJlcmcgbWlnaHQgbm90IGhhdmUgYmVlbiB1c2luZyB0eXBlIGNh\\nc3Qgd2l0aCBhIHJldXNhYmxlIG1hdHJpeCwgYnV0IHBvc3NpYmx5IHdvb2Rl\\nbiB0eXBlcyB0aGF0IHdlcmUgY2FydmVkIGluZGl2aWR1YWxseS4gQSBzaW1p\\nbGFyIHN1Z2dlc3Rpb24gd2FzIG1hZGUgYnkgTmFzaCBpbiAyMDA0LiBUaGlz\\nIHJlbWFpbnMgcG9zc2libGUsIGFsYmVpdCBlbnRpcmVseSB1bnByb3Zlbi4K\\nCkl0IGhhcyBhbHNvIGJlZW4gcXVlc3Rpb25lZCB3aGV0aGVyIEd1dGVuYmVy\\nZyB1c2VkIG1vdmFibGUgdHlwZXMgYXQgYWxsLiBJbiAyMDA0LCBJdGFsaWFu\\nIHByb2Zlc3NvciBCcnVubyBGYWJiaWFuaSBjbGFpbWVkIHRoYXQgZXhhbWlu\\nYXRpb24gb2YgdGhlIDQyLWxpbmUgQmlibGUgcmV2ZWFsZWQgYW4gb3Zlcmxh\\ncHBpbmcgb2YgbGV0dGVycywgc3VnZ2VzdGluZyB0aGF0IEd1dGVuYmVyZyBk\\naWQgbm90IGluIGZhY3QgdXNlIG1vdmFibGUgdHlwZSAoaW5kaXZpZHVhbCBj\\nYXN0IGNoYXJhY3RlcnMpIGJ1dCByYXRoZXIgdXNlZCB3aG9sZSBwbGF0ZXMg\\nbWFkZSBmcm9tIGEgc3lzdGVtIHNvbWV3aGF0IGxpa2UgYSBtb2Rlcm4gdHlw\\nZXdyaXRlciwgd2hlcmVieSB0aGUgbGV0dGVycyB3ZXJlIHN0YW1wZWQgc3Vj\\nY2Vzc2l2ZWx5IGludG8gdGhlIHBsYXRlIGFuZCB0aGVuIHByaW50ZWQuIEhv\\nd2V2ZXIsIG1vc3Qgc3BlY2lhbGlzdHMgcmVnYXJkIHRoZSBvY2Nhc2lvbmFs\\nIG92ZXJsYXBwaW5nIG9mIHR5cGUgYXMgY2F1c2VkIGJ5IHBhcGVyIG1vdmVt\\nZW50IG92ZXIgcGllY2VzIG9mIHR5cGUgb2Ygc2xpZ2h0bHkgdW5lcXVhbCBo\\nZWlnaHQu\\n\",\"encoding\":\"base64\"}", + "status": 200 + }, + { + "method": "GET", + "url": "/repos/owner/repo/git/blobs/6d51a38aed7139d2117724b1e307657b6ff2d043", + "headers": { + "Content-Type": "application/json; charset=utf-8", + "Server": "GitHub.com", + "Status": "200 OK", + "X-RateLimit-Limit": "5000", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP", + "X-OAuth-Scopes": "delete_repo, repo", + "X-Accepted-OAuth-Scopes": "", + "X-GitHub-Media-Type": "github.v3; format=json", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "1; mode=block", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "content-length": "2713" + }, + "response": "{\"sha\":\"6d51a38aed7139d2117724b1e307657b6ff2d043\",\"node_id\":\"MDQ6QmxvYjI4Njc1NjgzMzo2ZDUxYTM4YWVkNzEzOWQyMTE3NzI0YjFlMzA3NjU3YjZmZjJkMDQz\",\"size\":1707,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/6d51a38aed7139d2117724b1e307657b6ff2d043\",\"content\":\"LS0tCnRpdGxlOiBQZXJmZWN0aW5nIHRoZSBBcnQgb2YgUGVyZmVjdGlvbgpk\\nYXRlOiAiMjAxNi0wOS0wMVQyMzo0NjozNy4xMjFaIgp0ZW1wbGF0ZTogInBv\\nc3QiCmRyYWZ0OiBmYWxzZQpjYXRlZ29yeTogIkRlc2lnbiBJbnNwaXJhdGlv\\nbiIKdGFnczoKICAtICJIYW5kd3JpdGluZyIKICAtICJMZWFybmluZyB0byB3\\ncml0ZSIKZGVzY3JpcHRpb246ICJRdWlzcXVlIGN1cnN1cywgbWV0dXMgdml0\\nYWUgcGhhcmV0cmEgYXVjdG9yLCBzZW0gbWFzc2EgbWF0dGlzIHNlbSwgYXQg\\naW50ZXJkdW0gbWFnbmEgYXVndWUgZWdldCBkaWFtLiBWZXN0aWJ1bHVtIGFu\\ndGUgaXBzdW0gcHJpbWlzIGluIGZhdWNpYnVzIG9yY2kgbHVjdHVzIGV0IHVs\\ndHJpY2VzIHBvc3VlcmUgY3ViaWxpYSBDdXJhZTsgTW9yYmkgbGFjaW5pYSBt\\nb2xlc3RpZSBkdWkuIFByYWVzZW50IGJsYW5kaXQgZG9sb3IuIFNlZCBub24g\\ncXVhbS4gSW4gdmVsIG1pIHNpdCBhbWV0IGF1Z3VlIGNvbmd1ZSBlbGVtZW50\\ndW0uIgpjYW5vbmljYWw6ICcnCi0tLQoKUXVpc3F1ZSBjdXJzdXMsIG1ldHVz\\nIHZpdGFlIHBoYXJldHJhIGF1Y3Rvciwgc2VtIG1hc3NhIG1hdHRpcyBzZW0s\\nIGF0IGludGVyZHVtIG1hZ25hIGF1Z3VlIGVnZXQgZGlhbS4gVmVzdGlidWx1\\nbSBhbnRlIGlwc3VtIHByaW1pcyBpbiBmYXVjaWJ1cyBvcmNpIGx1Y3R1cyBl\\ndCB1bHRyaWNlcyBwb3N1ZXJlIGN1YmlsaWEgQ3VyYWU7IE1vcmJpIGxhY2lu\\naWEgbW9sZXN0aWUgZHVpLiBQcmFlc2VudCBibGFuZGl0IGRvbG9yLiBTZWQg\\nbm9uIHF1YW0uIEluIHZlbCBtaSBzaXQgYW1ldCBhdWd1ZSBjb25ndWUgZWxl\\nbWVudHVtLgoKIVtOdWxsYSBmYXVjaWJ1cyB2ZXN0aWJ1bHVtIGVyb3MgaW4g\\ndGVtcHVzLiBWZXN0aWJ1bHVtIHRlbXBvciBpbXBlcmRpZXQgdmVsaXQgbmVj\\nIGRhcGlidXNdKC9tZWRpYS9pbWFnZS0yLmpwZykKClBlbGxlbnRlc3F1ZSBo\\nYWJpdGFudCBtb3JiaSB0cmlzdGlxdWUgc2VuZWN0dXMgZXQgbmV0dXMgZXQg\\nbWFsZXN1YWRhIGZhbWVzIGFjIHR1cnBpcyBlZ2VzdGFzLiBWZXN0aWJ1bHVt\\nIHRvcnRvciBxdWFtLCBmZXVnaWF0IHZpdGFlLCB1bHRyaWNpZXMgZWdldCwg\\ndGVtcG9yIHNpdCBhbWV0LCBhbnRlLiBEb25lYyBldSBsaWJlcm8gc2l0IGFt\\nZXQgcXVhbSBlZ2VzdGFzIHNlbXBlci4gQWVuZWFuIHVsdHJpY2llcyBtaSB2\\naXRhZSBlc3QuIE1hdXJpcyBwbGFjZXJhdCBlbGVpZmVuZCBsZW8uIFF1aXNx\\ndWUgc2l0IGFtZXQgZXN0IGV0IHNhcGllbiB1bGxhbWNvcnBlciBwaGFyZXRy\\nYS4gVmVzdGlidWx1bSBlcmF0IHdpc2ksIGNvbmRpbWVudHVtIHNlZCwgY29t\\nbW9kbyB2aXRhZSwgb3JuYXJlIHNpdCBhbWV0LCB3aXNpLiBBZW5lYW4gZmVy\\nbWVudHVtLCBlbGl0IGVnZXQgdGluY2lkdW50IGNvbmRpbWVudHVtLCBlcm9z\\nIGlwc3VtIHJ1dHJ1bSBvcmNpLCBzYWdpdHRpcyB0ZW1wdXMgbGFjdXMgZW5p\\nbSBhYyBkdWkuIERvbmVjIG5vbiBlbmltIGluIHR1cnBpcyBwdWx2aW5hciBm\\nYWNpbGlzaXMuIFV0IGZlbGlzLiAKClByYWVzZW50IGRhcGlidXMsIG5lcXVl\\nIGlkIGN1cnN1cyBmYXVjaWJ1cywgdG9ydG9yIG5lcXVlIGVnZXN0YXMgYXVn\\ndWUsIGV1IHZ1bHB1dGF0ZSBtYWduYSBlcm9zIGV1IGVyYXQuIEFsaXF1YW0g\\nZXJhdCB2b2x1dHBhdC4gTmFtIGR1aSBtaSwgdGluY2lkdW50IHF1aXMsIGFj\\nY3Vtc2FuIHBvcnR0aXRvciwgZmFjaWxpc2lzIGx1Y3R1cywgbWV0dXMu\\n\",\"encoding\":\"base64\"}", "status": 200 }, { @@ -253,9 +253,9 @@ "X-XSS-Protection": "1; mode=block", "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", "Content-Security-Policy": "default-src 'none'", - "content-length": "4828" + "content-length": "4823" }, - "response": "[\n {\n \"sha\": \"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"node_id\": \"MDY6Q29tbWl0MjU1MDc3OTE0OjJiYzNmYTM5ZDhhZGI5ZTAwOGU1Mjc5Mzg1NDMzODM5OWZjNmU0YWQ=\",\n \"commit\": {\n \"author\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2019-07-24T07:45:32Z\"\n },\n \"committer\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2019-07-24T07:45:32Z\"\n },\n \"message\": \"initial commit\",\n \"tree\": {\n \"sha\": \"3d53c60def5d9f9ad79a534dd369f758763d9dc9\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/3d53c60def5d9f9ad79a534dd369f758763d9dc9\"\n },\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"comment_count\": 0,\n \"verification\": {\n \"verified\": true,\n \"reason\": \"valid\",\n \"signature\": \"-----BEGIN PGP SIGNATURE-----\\n\\niQIzBAABCgAdFiEE8DeG71n37ZpuxjiNA05FmC/LkwQFAl04DJwACgkQA05FmC/L\\nkwQ5kg//TB2c1HvsD/r7x3CgKmR+uaEFGrv9srfA4/i/dbDSAg3+kpPXfGg0FCUw\\nETlWDpZRhFvLZzoxy5w46P1cLvpbdEXK47LWpsFYWFtCFGKmvaY5dZ/ma1J3HF5R\\n7Yll5jz8BKrWOZ6bOswP7nNteAFYfLiZxJq4ONbhxOyRJA7bFmg6Ydo2Zc27Gg54\\n6umhONf9DxuzL0z0f8qtHiz47KJTRdFS+ZL/Mq3iCE11SGHvjK0cnPq0Z6TBtazt\\nqszoR0Frxes4MsjI82+ovCP+RtpqerWeN/ciYoLENsnUb8Xbp/qdhrLoMvuFExz2\\n0f0M7zVI1Z9d4cDTQlembVneSv5sSeNtnk2e7BXLwjUNFVxB67aslVUyL41V0BMu\\nUw8+j9pNhObpicJs9O1fIkL84mtCSMWIyuCwDpSMSj2b892laBOKu/E5D+YuaHi5\\nbAJJ1/Szig0CzeI1KbIBoWDI1orpkSUU+4Fvk7qJnxP9iLJLwiNCFKfNKA1KeXmP\\nIK6/95HmKNJ8MfTEkRcgIdTe4fx2ib2hHGiaIAD0r4FgWxfC2BWK/uTUp8HtIQre\\nDILGnF1laIcJbyP7asvc8iJ06Kk8C9PsH4v20fqoyNcei7v0IJG2m9AHVDnb0t6L\\nAa1yXEHQLSGHS9Y0mogLPW/tZnV69EHRI1dzvH/1gDVlBMwM1/A=\\n=hLDv\\n-----END PGP SIGNATURE-----\",\n \"payload\": \"tree 3d53c60def5d9f9ad79a534dd369f758763d9dc9\\nauthor owner 1563954332 +0300\\ncommitter owner 1563954332 +0300\\n\\ninitial commit\\n\"\n }\n },\n \"url\": \"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"html_url\": \"https://github.com/owner/repo/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"comments_url\": \"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad/comments\",\n \"author\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"committer\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"parents\": [\n\n ]\n }\n]\n", + "response": "[{\"sha\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"node_id\":\"MDY6Q29tbWl0Mjg2NzU2ODMzOjJiYzNmYTM5ZDhhZGI5ZTAwOGU1Mjc5Mzg1NDMzODM5OWZjNmU0YWQ=\",\"commit\":{\"author\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2019-07-24T07:45:32Z\"},\"committer\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2019-07-24T07:45:32Z\"},\"message\":\"initial commit\",\"tree\":{\"sha\":\"3d53c60def5d9f9ad79a534dd369f758763d9dc9\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/3d53c60def5d9f9ad79a534dd369f758763d9dc9\"},\"url\":\"https://api.github.com/repos/owner/repo/git/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\niQIzBAABCgAdFiEE8DeG71n37ZpuxjiNA05FmC/LkwQFAl04DJwACgkQA05FmC/L\\nkwQ5kg//TB2c1HvsD/r7x3CgKmR+uaEFGrv9srfA4/i/dbDSAg3+kpPXfGg0FCUw\\nETlWDpZRhFvLZzoxy5w46P1cLvpbdEXK47LWpsFYWFtCFGKmvaY5dZ/ma1J3HF5R\\n7Yll5jz8BKrWOZ6bOswP7nNteAFYfLiZxJq4ONbhxOyRJA7bFmg6Ydo2Zc27Gg54\\n6umhONf9DxuzL0z0f8qtHiz47KJTRdFS+ZL/Mq3iCE11SGHvjK0cnPq0Z6TBtazt\\nqszoR0Frxes4MsjI82+ovCP+RtpqerWeN/ciYoLENsnUb8Xbp/qdhrLoMvuFExz2\\n0f0M7zVI1Z9d4cDTQlembVneSv5sSeNtnk2e7BXLwjUNFVxB67aslVUyL41V0BMu\\nUw8+j9pNhObpicJs9O1fIkL84mtCSMWIyuCwDpSMSj2b892laBOKu/E5D+YuaHi5\\nbAJJ1/Szig0CzeI1KbIBoWDI1orpkSUU+4Fvk7qJnxP9iLJLwiNCFKfNKA1KeXmP\\nIK6/95HmKNJ8MfTEkRcgIdTe4fx2ib2hHGiaIAD0r4FgWxfC2BWK/uTUp8HtIQre\\nDILGnF1laIcJbyP7asvc8iJ06Kk8C9PsH4v20fqoyNcei7v0IJG2m9AHVDnb0t6L\\nAa1yXEHQLSGHS9Y0mogLPW/tZnV69EHRI1dzvH/1gDVlBMwM1/A=\\n=hLDv\\n-----END PGP SIGNATURE-----\",\"payload\":\"tree 3d53c60def5d9f9ad79a534dd369f758763d9dc9\\nauthor owner 1563954332 +0300\\ncommitter owner 1563954332 +0300\\n\\ninitial commit\\n\"}},\"url\":\"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"html_url\":\"https://github.com/owner/repo/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"comments_url\":\"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad/comments\",\"author\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"committer\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"parents\":[]}]", "status": 200 }, { @@ -279,35 +279,9 @@ "X-XSS-Protection": "1; mode=block", "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", "Content-Security-Policy": "default-src 'none'", - "content-length": "4828" + "content-length": "4823" }, - "response": "[\n {\n \"sha\": \"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"node_id\": \"MDY6Q29tbWl0MjU1MDc3OTE0OjJiYzNmYTM5ZDhhZGI5ZTAwOGU1Mjc5Mzg1NDMzODM5OWZjNmU0YWQ=\",\n \"commit\": {\n \"author\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2019-07-24T07:45:32Z\"\n },\n \"committer\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2019-07-24T07:45:32Z\"\n },\n \"message\": \"initial commit\",\n \"tree\": {\n \"sha\": \"3d53c60def5d9f9ad79a534dd369f758763d9dc9\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/3d53c60def5d9f9ad79a534dd369f758763d9dc9\"\n },\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"comment_count\": 0,\n \"verification\": {\n \"verified\": true,\n \"reason\": \"valid\",\n \"signature\": \"-----BEGIN PGP SIGNATURE-----\\n\\niQIzBAABCgAdFiEE8DeG71n37ZpuxjiNA05FmC/LkwQFAl04DJwACgkQA05FmC/L\\nkwQ5kg//TB2c1HvsD/r7x3CgKmR+uaEFGrv9srfA4/i/dbDSAg3+kpPXfGg0FCUw\\nETlWDpZRhFvLZzoxy5w46P1cLvpbdEXK47LWpsFYWFtCFGKmvaY5dZ/ma1J3HF5R\\n7Yll5jz8BKrWOZ6bOswP7nNteAFYfLiZxJq4ONbhxOyRJA7bFmg6Ydo2Zc27Gg54\\n6umhONf9DxuzL0z0f8qtHiz47KJTRdFS+ZL/Mq3iCE11SGHvjK0cnPq0Z6TBtazt\\nqszoR0Frxes4MsjI82+ovCP+RtpqerWeN/ciYoLENsnUb8Xbp/qdhrLoMvuFExz2\\n0f0M7zVI1Z9d4cDTQlembVneSv5sSeNtnk2e7BXLwjUNFVxB67aslVUyL41V0BMu\\nUw8+j9pNhObpicJs9O1fIkL84mtCSMWIyuCwDpSMSj2b892laBOKu/E5D+YuaHi5\\nbAJJ1/Szig0CzeI1KbIBoWDI1orpkSUU+4Fvk7qJnxP9iLJLwiNCFKfNKA1KeXmP\\nIK6/95HmKNJ8MfTEkRcgIdTe4fx2ib2hHGiaIAD0r4FgWxfC2BWK/uTUp8HtIQre\\nDILGnF1laIcJbyP7asvc8iJ06Kk8C9PsH4v20fqoyNcei7v0IJG2m9AHVDnb0t6L\\nAa1yXEHQLSGHS9Y0mogLPW/tZnV69EHRI1dzvH/1gDVlBMwM1/A=\\n=hLDv\\n-----END PGP SIGNATURE-----\",\n \"payload\": \"tree 3d53c60def5d9f9ad79a534dd369f758763d9dc9\\nauthor owner 1563954332 +0300\\ncommitter owner 1563954332 +0300\\n\\ninitial commit\\n\"\n }\n },\n \"url\": \"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"html_url\": \"https://github.com/owner/repo/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"comments_url\": \"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad/comments\",\n \"author\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"committer\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"parents\": [\n\n ]\n }\n]\n", - "status": 200 - }, - { - "method": "GET", - "url": "/repos/owner/repo/commits?path=content/posts/2016-01-12---The-Origins-of-Social-Stationery-Lettering.md&sha=master", - "headers": { - "Content-Type": "application/json; charset=utf-8", - "Server": "GitHub.com", - "Status": "200 OK", - "X-RateLimit-Limit": "5000", - "Cache-Control": "private, max-age=60, s-maxage=60", - "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP", - "X-OAuth-Scopes": "delete_repo, repo", - "X-Accepted-OAuth-Scopes": "", - "X-GitHub-Media-Type": "github.v3; format=json", - "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", - "Access-Control-Allow-Origin": "*", - "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", - "X-Frame-Options": "deny", - "X-Content-Type-Options": "nosniff", - "X-XSS-Protection": "1; mode=block", - "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", - "Content-Security-Policy": "default-src 'none'", - "content-length": "4828" - }, - "response": "[\n {\n \"sha\": \"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"node_id\": \"MDY6Q29tbWl0MjU1MDc3OTE0OjJiYzNmYTM5ZDhhZGI5ZTAwOGU1Mjc5Mzg1NDMzODM5OWZjNmU0YWQ=\",\n \"commit\": {\n \"author\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2019-07-24T07:45:32Z\"\n },\n \"committer\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2019-07-24T07:45:32Z\"\n },\n \"message\": \"initial commit\",\n \"tree\": {\n \"sha\": \"3d53c60def5d9f9ad79a534dd369f758763d9dc9\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/3d53c60def5d9f9ad79a534dd369f758763d9dc9\"\n },\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"comment_count\": 0,\n \"verification\": {\n \"verified\": true,\n \"reason\": \"valid\",\n \"signature\": \"-----BEGIN PGP SIGNATURE-----\\n\\niQIzBAABCgAdFiEE8DeG71n37ZpuxjiNA05FmC/LkwQFAl04DJwACgkQA05FmC/L\\nkwQ5kg//TB2c1HvsD/r7x3CgKmR+uaEFGrv9srfA4/i/dbDSAg3+kpPXfGg0FCUw\\nETlWDpZRhFvLZzoxy5w46P1cLvpbdEXK47LWpsFYWFtCFGKmvaY5dZ/ma1J3HF5R\\n7Yll5jz8BKrWOZ6bOswP7nNteAFYfLiZxJq4ONbhxOyRJA7bFmg6Ydo2Zc27Gg54\\n6umhONf9DxuzL0z0f8qtHiz47KJTRdFS+ZL/Mq3iCE11SGHvjK0cnPq0Z6TBtazt\\nqszoR0Frxes4MsjI82+ovCP+RtpqerWeN/ciYoLENsnUb8Xbp/qdhrLoMvuFExz2\\n0f0M7zVI1Z9d4cDTQlembVneSv5sSeNtnk2e7BXLwjUNFVxB67aslVUyL41V0BMu\\nUw8+j9pNhObpicJs9O1fIkL84mtCSMWIyuCwDpSMSj2b892laBOKu/E5D+YuaHi5\\nbAJJ1/Szig0CzeI1KbIBoWDI1orpkSUU+4Fvk7qJnxP9iLJLwiNCFKfNKA1KeXmP\\nIK6/95HmKNJ8MfTEkRcgIdTe4fx2ib2hHGiaIAD0r4FgWxfC2BWK/uTUp8HtIQre\\nDILGnF1laIcJbyP7asvc8iJ06Kk8C9PsH4v20fqoyNcei7v0IJG2m9AHVDnb0t6L\\nAa1yXEHQLSGHS9Y0mogLPW/tZnV69EHRI1dzvH/1gDVlBMwM1/A=\\n=hLDv\\n-----END PGP SIGNATURE-----\",\n \"payload\": \"tree 3d53c60def5d9f9ad79a534dd369f758763d9dc9\\nauthor owner 1563954332 +0300\\ncommitter owner 1563954332 +0300\\n\\ninitial commit\\n\"\n }\n },\n \"url\": \"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"html_url\": \"https://github.com/owner/repo/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"comments_url\": \"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad/comments\",\n \"author\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"committer\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"parents\": [\n\n ]\n }\n]\n", + "response": "[{\"sha\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"node_id\":\"MDY6Q29tbWl0Mjg2NzU2ODMzOjJiYzNmYTM5ZDhhZGI5ZTAwOGU1Mjc5Mzg1NDMzODM5OWZjNmU0YWQ=\",\"commit\":{\"author\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2019-07-24T07:45:32Z\"},\"committer\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2019-07-24T07:45:32Z\"},\"message\":\"initial commit\",\"tree\":{\"sha\":\"3d53c60def5d9f9ad79a534dd369f758763d9dc9\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/3d53c60def5d9f9ad79a534dd369f758763d9dc9\"},\"url\":\"https://api.github.com/repos/owner/repo/git/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\niQIzBAABCgAdFiEE8DeG71n37ZpuxjiNA05FmC/LkwQFAl04DJwACgkQA05FmC/L\\nkwQ5kg//TB2c1HvsD/r7x3CgKmR+uaEFGrv9srfA4/i/dbDSAg3+kpPXfGg0FCUw\\nETlWDpZRhFvLZzoxy5w46P1cLvpbdEXK47LWpsFYWFtCFGKmvaY5dZ/ma1J3HF5R\\n7Yll5jz8BKrWOZ6bOswP7nNteAFYfLiZxJq4ONbhxOyRJA7bFmg6Ydo2Zc27Gg54\\n6umhONf9DxuzL0z0f8qtHiz47KJTRdFS+ZL/Mq3iCE11SGHvjK0cnPq0Z6TBtazt\\nqszoR0Frxes4MsjI82+ovCP+RtpqerWeN/ciYoLENsnUb8Xbp/qdhrLoMvuFExz2\\n0f0M7zVI1Z9d4cDTQlembVneSv5sSeNtnk2e7BXLwjUNFVxB67aslVUyL41V0BMu\\nUw8+j9pNhObpicJs9O1fIkL84mtCSMWIyuCwDpSMSj2b892laBOKu/E5D+YuaHi5\\nbAJJ1/Szig0CzeI1KbIBoWDI1orpkSUU+4Fvk7qJnxP9iLJLwiNCFKfNKA1KeXmP\\nIK6/95HmKNJ8MfTEkRcgIdTe4fx2ib2hHGiaIAD0r4FgWxfC2BWK/uTUp8HtIQre\\nDILGnF1laIcJbyP7asvc8iJ06Kk8C9PsH4v20fqoyNcei7v0IJG2m9AHVDnb0t6L\\nAa1yXEHQLSGHS9Y0mogLPW/tZnV69EHRI1dzvH/1gDVlBMwM1/A=\\n=hLDv\\n-----END PGP SIGNATURE-----\",\"payload\":\"tree 3d53c60def5d9f9ad79a534dd369f758763d9dc9\\nauthor owner 1563954332 +0300\\ncommitter owner 1563954332 +0300\\n\\ninitial commit\\n\"}},\"url\":\"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"html_url\":\"https://github.com/owner/repo/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"comments_url\":\"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad/comments\",\"author\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"committer\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"parents\":[]}]", "status": 200 }, { @@ -331,9 +305,35 @@ "X-XSS-Protection": "1; mode=block", "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", "Content-Security-Policy": "default-src 'none'", - "content-length": "4828" + "content-length": "4823" }, - "response": "[\n {\n \"sha\": \"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"node_id\": \"MDY6Q29tbWl0MjU1MDc3OTE0OjJiYzNmYTM5ZDhhZGI5ZTAwOGU1Mjc5Mzg1NDMzODM5OWZjNmU0YWQ=\",\n \"commit\": {\n \"author\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2019-07-24T07:45:32Z\"\n },\n \"committer\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2019-07-24T07:45:32Z\"\n },\n \"message\": \"initial commit\",\n \"tree\": {\n \"sha\": \"3d53c60def5d9f9ad79a534dd369f758763d9dc9\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/3d53c60def5d9f9ad79a534dd369f758763d9dc9\"\n },\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"comment_count\": 0,\n \"verification\": {\n \"verified\": true,\n \"reason\": \"valid\",\n \"signature\": \"-----BEGIN PGP SIGNATURE-----\\n\\niQIzBAABCgAdFiEE8DeG71n37ZpuxjiNA05FmC/LkwQFAl04DJwACgkQA05FmC/L\\nkwQ5kg//TB2c1HvsD/r7x3CgKmR+uaEFGrv9srfA4/i/dbDSAg3+kpPXfGg0FCUw\\nETlWDpZRhFvLZzoxy5w46P1cLvpbdEXK47LWpsFYWFtCFGKmvaY5dZ/ma1J3HF5R\\n7Yll5jz8BKrWOZ6bOswP7nNteAFYfLiZxJq4ONbhxOyRJA7bFmg6Ydo2Zc27Gg54\\n6umhONf9DxuzL0z0f8qtHiz47KJTRdFS+ZL/Mq3iCE11SGHvjK0cnPq0Z6TBtazt\\nqszoR0Frxes4MsjI82+ovCP+RtpqerWeN/ciYoLENsnUb8Xbp/qdhrLoMvuFExz2\\n0f0M7zVI1Z9d4cDTQlembVneSv5sSeNtnk2e7BXLwjUNFVxB67aslVUyL41V0BMu\\nUw8+j9pNhObpicJs9O1fIkL84mtCSMWIyuCwDpSMSj2b892laBOKu/E5D+YuaHi5\\nbAJJ1/Szig0CzeI1KbIBoWDI1orpkSUU+4Fvk7qJnxP9iLJLwiNCFKfNKA1KeXmP\\nIK6/95HmKNJ8MfTEkRcgIdTe4fx2ib2hHGiaIAD0r4FgWxfC2BWK/uTUp8HtIQre\\nDILGnF1laIcJbyP7asvc8iJ06Kk8C9PsH4v20fqoyNcei7v0IJG2m9AHVDnb0t6L\\nAa1yXEHQLSGHS9Y0mogLPW/tZnV69EHRI1dzvH/1gDVlBMwM1/A=\\n=hLDv\\n-----END PGP SIGNATURE-----\",\n \"payload\": \"tree 3d53c60def5d9f9ad79a534dd369f758763d9dc9\\nauthor owner 1563954332 +0300\\ncommitter owner 1563954332 +0300\\n\\ninitial commit\\n\"\n }\n },\n \"url\": \"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"html_url\": \"https://github.com/owner/repo/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"comments_url\": \"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad/comments\",\n \"author\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"committer\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"parents\": [\n\n ]\n }\n]\n", + "response": "[{\"sha\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"node_id\":\"MDY6Q29tbWl0Mjg2NzU2ODMzOjJiYzNmYTM5ZDhhZGI5ZTAwOGU1Mjc5Mzg1NDMzODM5OWZjNmU0YWQ=\",\"commit\":{\"author\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2019-07-24T07:45:32Z\"},\"committer\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2019-07-24T07:45:32Z\"},\"message\":\"initial commit\",\"tree\":{\"sha\":\"3d53c60def5d9f9ad79a534dd369f758763d9dc9\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/3d53c60def5d9f9ad79a534dd369f758763d9dc9\"},\"url\":\"https://api.github.com/repos/owner/repo/git/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\niQIzBAABCgAdFiEE8DeG71n37ZpuxjiNA05FmC/LkwQFAl04DJwACgkQA05FmC/L\\nkwQ5kg//TB2c1HvsD/r7x3CgKmR+uaEFGrv9srfA4/i/dbDSAg3+kpPXfGg0FCUw\\nETlWDpZRhFvLZzoxy5w46P1cLvpbdEXK47LWpsFYWFtCFGKmvaY5dZ/ma1J3HF5R\\n7Yll5jz8BKrWOZ6bOswP7nNteAFYfLiZxJq4ONbhxOyRJA7bFmg6Ydo2Zc27Gg54\\n6umhONf9DxuzL0z0f8qtHiz47KJTRdFS+ZL/Mq3iCE11SGHvjK0cnPq0Z6TBtazt\\nqszoR0Frxes4MsjI82+ovCP+RtpqerWeN/ciYoLENsnUb8Xbp/qdhrLoMvuFExz2\\n0f0M7zVI1Z9d4cDTQlembVneSv5sSeNtnk2e7BXLwjUNFVxB67aslVUyL41V0BMu\\nUw8+j9pNhObpicJs9O1fIkL84mtCSMWIyuCwDpSMSj2b892laBOKu/E5D+YuaHi5\\nbAJJ1/Szig0CzeI1KbIBoWDI1orpkSUU+4Fvk7qJnxP9iLJLwiNCFKfNKA1KeXmP\\nIK6/95HmKNJ8MfTEkRcgIdTe4fx2ib2hHGiaIAD0r4FgWxfC2BWK/uTUp8HtIQre\\nDILGnF1laIcJbyP7asvc8iJ06Kk8C9PsH4v20fqoyNcei7v0IJG2m9AHVDnb0t6L\\nAa1yXEHQLSGHS9Y0mogLPW/tZnV69EHRI1dzvH/1gDVlBMwM1/A=\\n=hLDv\\n-----END PGP SIGNATURE-----\",\"payload\":\"tree 3d53c60def5d9f9ad79a534dd369f758763d9dc9\\nauthor owner 1563954332 +0300\\ncommitter owner 1563954332 +0300\\n\\ninitial commit\\n\"}},\"url\":\"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"html_url\":\"https://github.com/owner/repo/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"comments_url\":\"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad/comments\",\"author\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"committer\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"parents\":[]}]", + "status": 200 + }, + { + "method": "GET", + "url": "/repos/owner/repo/commits?path=content/posts/2016-01-12---The-Origins-of-Social-Stationery-Lettering.md&sha=master", + "headers": { + "Content-Type": "application/json; charset=utf-8", + "Server": "GitHub.com", + "Status": "200 OK", + "X-RateLimit-Limit": "5000", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP", + "X-OAuth-Scopes": "delete_repo, repo", + "X-Accepted-OAuth-Scopes": "", + "X-GitHub-Media-Type": "github.v3; format=json", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "1; mode=block", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'", + "content-length": "4823" + }, + "response": "[{\"sha\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"node_id\":\"MDY6Q29tbWl0Mjg2NzU2ODMzOjJiYzNmYTM5ZDhhZGI5ZTAwOGU1Mjc5Mzg1NDMzODM5OWZjNmU0YWQ=\",\"commit\":{\"author\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2019-07-24T07:45:32Z\"},\"committer\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2019-07-24T07:45:32Z\"},\"message\":\"initial commit\",\"tree\":{\"sha\":\"3d53c60def5d9f9ad79a534dd369f758763d9dc9\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/3d53c60def5d9f9ad79a534dd369f758763d9dc9\"},\"url\":\"https://api.github.com/repos/owner/repo/git/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\niQIzBAABCgAdFiEE8DeG71n37ZpuxjiNA05FmC/LkwQFAl04DJwACgkQA05FmC/L\\nkwQ5kg//TB2c1HvsD/r7x3CgKmR+uaEFGrv9srfA4/i/dbDSAg3+kpPXfGg0FCUw\\nETlWDpZRhFvLZzoxy5w46P1cLvpbdEXK47LWpsFYWFtCFGKmvaY5dZ/ma1J3HF5R\\n7Yll5jz8BKrWOZ6bOswP7nNteAFYfLiZxJq4ONbhxOyRJA7bFmg6Ydo2Zc27Gg54\\n6umhONf9DxuzL0z0f8qtHiz47KJTRdFS+ZL/Mq3iCE11SGHvjK0cnPq0Z6TBtazt\\nqszoR0Frxes4MsjI82+ovCP+RtpqerWeN/ciYoLENsnUb8Xbp/qdhrLoMvuFExz2\\n0f0M7zVI1Z9d4cDTQlembVneSv5sSeNtnk2e7BXLwjUNFVxB67aslVUyL41V0BMu\\nUw8+j9pNhObpicJs9O1fIkL84mtCSMWIyuCwDpSMSj2b892laBOKu/E5D+YuaHi5\\nbAJJ1/Szig0CzeI1KbIBoWDI1orpkSUU+4Fvk7qJnxP9iLJLwiNCFKfNKA1KeXmP\\nIK6/95HmKNJ8MfTEkRcgIdTe4fx2ib2hHGiaIAD0r4FgWxfC2BWK/uTUp8HtIQre\\nDILGnF1laIcJbyP7asvc8iJ06Kk8C9PsH4v20fqoyNcei7v0IJG2m9AHVDnb0t6L\\nAa1yXEHQLSGHS9Y0mogLPW/tZnV69EHRI1dzvH/1gDVlBMwM1/A=\\n=hLDv\\n-----END PGP SIGNATURE-----\",\"payload\":\"tree 3d53c60def5d9f9ad79a534dd369f758763d9dc9\\nauthor owner 1563954332 +0300\\ncommitter owner 1563954332 +0300\\n\\ninitial commit\\n\"}},\"url\":\"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"html_url\":\"https://github.com/owner/repo/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"comments_url\":\"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad/comments\",\"author\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"committer\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"parents\":[]}]", "status": 200 }, { @@ -357,9 +357,9 @@ "X-XSS-Protection": "1; mode=block", "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", "Content-Security-Policy": "default-src 'none'", - "content-length": "4828" + "content-length": "4823" }, - "response": "[\n {\n \"sha\": \"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"node_id\": \"MDY6Q29tbWl0MjU1MDc3OTE0OjJiYzNmYTM5ZDhhZGI5ZTAwOGU1Mjc5Mzg1NDMzODM5OWZjNmU0YWQ=\",\n \"commit\": {\n \"author\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2019-07-24T07:45:32Z\"\n },\n \"committer\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2019-07-24T07:45:32Z\"\n },\n \"message\": \"initial commit\",\n \"tree\": {\n \"sha\": \"3d53c60def5d9f9ad79a534dd369f758763d9dc9\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/3d53c60def5d9f9ad79a534dd369f758763d9dc9\"\n },\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"comment_count\": 0,\n \"verification\": {\n \"verified\": true,\n \"reason\": \"valid\",\n \"signature\": \"-----BEGIN PGP SIGNATURE-----\\n\\niQIzBAABCgAdFiEE8DeG71n37ZpuxjiNA05FmC/LkwQFAl04DJwACgkQA05FmC/L\\nkwQ5kg//TB2c1HvsD/r7x3CgKmR+uaEFGrv9srfA4/i/dbDSAg3+kpPXfGg0FCUw\\nETlWDpZRhFvLZzoxy5w46P1cLvpbdEXK47LWpsFYWFtCFGKmvaY5dZ/ma1J3HF5R\\n7Yll5jz8BKrWOZ6bOswP7nNteAFYfLiZxJq4ONbhxOyRJA7bFmg6Ydo2Zc27Gg54\\n6umhONf9DxuzL0z0f8qtHiz47KJTRdFS+ZL/Mq3iCE11SGHvjK0cnPq0Z6TBtazt\\nqszoR0Frxes4MsjI82+ovCP+RtpqerWeN/ciYoLENsnUb8Xbp/qdhrLoMvuFExz2\\n0f0M7zVI1Z9d4cDTQlembVneSv5sSeNtnk2e7BXLwjUNFVxB67aslVUyL41V0BMu\\nUw8+j9pNhObpicJs9O1fIkL84mtCSMWIyuCwDpSMSj2b892laBOKu/E5D+YuaHi5\\nbAJJ1/Szig0CzeI1KbIBoWDI1orpkSUU+4Fvk7qJnxP9iLJLwiNCFKfNKA1KeXmP\\nIK6/95HmKNJ8MfTEkRcgIdTe4fx2ib2hHGiaIAD0r4FgWxfC2BWK/uTUp8HtIQre\\nDILGnF1laIcJbyP7asvc8iJ06Kk8C9PsH4v20fqoyNcei7v0IJG2m9AHVDnb0t6L\\nAa1yXEHQLSGHS9Y0mogLPW/tZnV69EHRI1dzvH/1gDVlBMwM1/A=\\n=hLDv\\n-----END PGP SIGNATURE-----\",\n \"payload\": \"tree 3d53c60def5d9f9ad79a534dd369f758763d9dc9\\nauthor owner 1563954332 +0300\\ncommitter owner 1563954332 +0300\\n\\ninitial commit\\n\"\n }\n },\n \"url\": \"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"html_url\": \"https://github.com/owner/repo/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\n \"comments_url\": \"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad/comments\",\n \"author\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"committer\": {\n \"login\": \"owner\",\n \"id\": 26760571,\n \"node_id\": \"MDQ6VXNlcjI2NzYwNTcx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/owner\",\n \"html_url\": \"https://github.com/owner\",\n \"followers_url\": \"https://api.github.com/users/owner/followers\",\n \"following_url\": \"https://api.github.com/users/owner/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/owner/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/owner/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/owner/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/owner/orgs\",\n \"repos_url\": \"https://api.github.com/users/owner/repos\",\n \"events_url\": \"https://api.github.com/users/owner/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/owner/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"parents\": [\n\n ]\n }\n]\n", + "response": "[{\"sha\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"node_id\":\"MDY6Q29tbWl0Mjg2NzU2ODMzOjJiYzNmYTM5ZDhhZGI5ZTAwOGU1Mjc5Mzg1NDMzODM5OWZjNmU0YWQ=\",\"commit\":{\"author\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2019-07-24T07:45:32Z\"},\"committer\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2019-07-24T07:45:32Z\"},\"message\":\"initial commit\",\"tree\":{\"sha\":\"3d53c60def5d9f9ad79a534dd369f758763d9dc9\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/3d53c60def5d9f9ad79a534dd369f758763d9dc9\"},\"url\":\"https://api.github.com/repos/owner/repo/git/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"comment_count\":0,\"verification\":{\"verified\":true,\"reason\":\"valid\",\"signature\":\"-----BEGIN PGP SIGNATURE-----\\n\\niQIzBAABCgAdFiEE8DeG71n37ZpuxjiNA05FmC/LkwQFAl04DJwACgkQA05FmC/L\\nkwQ5kg//TB2c1HvsD/r7x3CgKmR+uaEFGrv9srfA4/i/dbDSAg3+kpPXfGg0FCUw\\nETlWDpZRhFvLZzoxy5w46P1cLvpbdEXK47LWpsFYWFtCFGKmvaY5dZ/ma1J3HF5R\\n7Yll5jz8BKrWOZ6bOswP7nNteAFYfLiZxJq4ONbhxOyRJA7bFmg6Ydo2Zc27Gg54\\n6umhONf9DxuzL0z0f8qtHiz47KJTRdFS+ZL/Mq3iCE11SGHvjK0cnPq0Z6TBtazt\\nqszoR0Frxes4MsjI82+ovCP+RtpqerWeN/ciYoLENsnUb8Xbp/qdhrLoMvuFExz2\\n0f0M7zVI1Z9d4cDTQlembVneSv5sSeNtnk2e7BXLwjUNFVxB67aslVUyL41V0BMu\\nUw8+j9pNhObpicJs9O1fIkL84mtCSMWIyuCwDpSMSj2b892laBOKu/E5D+YuaHi5\\nbAJJ1/Szig0CzeI1KbIBoWDI1orpkSUU+4Fvk7qJnxP9iLJLwiNCFKfNKA1KeXmP\\nIK6/95HmKNJ8MfTEkRcgIdTe4fx2ib2hHGiaIAD0r4FgWxfC2BWK/uTUp8HtIQre\\nDILGnF1laIcJbyP7asvc8iJ06Kk8C9PsH4v20fqoyNcei7v0IJG2m9AHVDnb0t6L\\nAa1yXEHQLSGHS9Y0mogLPW/tZnV69EHRI1dzvH/1gDVlBMwM1/A=\\n=hLDv\\n-----END PGP SIGNATURE-----\",\"payload\":\"tree 3d53c60def5d9f9ad79a534dd369f758763d9dc9\\nauthor owner 1563954332 +0300\\ncommitter owner 1563954332 +0300\\n\\ninitial commit\\n\"}},\"url\":\"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"html_url\":\"https://github.com/owner/repo/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"comments_url\":\"https://api.github.com/repos/owner/repo/commits/2bc3fa39d8adb9e008e52793854338399fc6e4ad/comments\",\"author\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"committer\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"parents\":[]}]", "status": 200 }, { @@ -368,7 +368,7 @@ "url": "/repos/owner/repo/git/blobs", "headers": { "Content-Type": "application/json; charset=utf-8", - "Content-Length": "212", + "Content-Length": "211", "Server": "GitHub.com", "Status": "201 Created", "X-RateLimit-Limit": "5000", @@ -387,7 +387,7 @@ "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", "Content-Security-Policy": "default-src 'none'" }, - "response": "{\n \"sha\": \"13692e6574cb4bf447aefcf7e0278e2f3fad6cf3\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/13692e6574cb4bf447aefcf7e0278e2f3fad6cf3\"\n}\n", + "response": "{\"sha\":\"13692e6574cb4bf447aefcf7e0278e2f3fad6cf3\",\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/13692e6574cb4bf447aefcf7e0278e2f3fad6cf3\"}", "status": 201 }, { @@ -411,18 +411,18 @@ "X-XSS-Protection": "1; mode=block", "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", "Content-Security-Policy": "default-src 'none'", - "content-length": "4902" + "content-length": "4892" }, - "response": "{\n \"name\": \"master\",\n \"commit\": {\n \"sha\": \"b33a2edece736f6f228c7ec28c385c57d5f890af\",\n \"node_id\": \"MDY6Q29tbWl0MjU1MDc3OTE0OmIzM2EyZWRlY2U3MzZmNmYyMjhjN2VjMjhjMzg1YzU3ZDVmODkwYWY=\",\n \"commit\": {\n \"author\": {\n \"name\": \"Renovate Bot\",\n \"email\": \"bot@renovateapp.com\",\n \"date\": \"2020-04-06T03:25:52Z\"\n },\n \"committer\": {\n \"name\": \"renovate[bot]\",\n \"email\": \"29139614+renovate[bot]@users.noreply.github.com\",\n \"date\": \"2020-04-06T04:43:18Z\"\n },\n \"message\": \"chore(deps): lock file maintenance\",\n \"tree\": {\n \"sha\": \"248f8dc1745500d3f9fadea5d19e128333ae66f9\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/248f8dc1745500d3f9fadea5d19e128333ae66f9\"\n },\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/b33a2edece736f6f228c7ec28c385c57d5f890af\",\n \"comment_count\": 0,\n \"verification\": {\n \"verified\": false,\n \"reason\": \"unsigned\",\n \"signature\": null,\n \"payload\": null\n }\n },\n \"url\": \"https://api.github.com/repos/owner/repo/commits/b33a2edece736f6f228c7ec28c385c57d5f890af\",\n \"html_url\": \"https://github.com/owner/repo/commit/b33a2edece736f6f228c7ec28c385c57d5f890af\",\n \"comments_url\": \"https://api.github.com/repos/owner/repo/commits/b33a2edece736f6f228c7ec28c385c57d5f890af/comments\",\n \"author\": {\n \"login\": \"renovate-bot\",\n \"id\": 25180681,\n \"node_id\": \"MDQ6VXNlcjI1MTgwNjgx\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/u/7892489?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/renovate-bot\",\n \"html_url\": \"https://github.com/renovate-bot\",\n \"followers_url\": \"https://api.github.com/users/renovate-bot/followers\",\n \"following_url\": \"https://api.github.com/users/renovate-bot/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/renovate-bot/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/renovate-bot/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/renovate-bot/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/renovate-bot/orgs\",\n \"repos_url\": \"https://api.github.com/users/renovate-bot/repos\",\n \"events_url\": \"https://api.github.com/users/renovate-bot/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/renovate-bot/received_events\",\n \"type\": \"User\",\n \"site_admin\": false\n },\n \"committer\": {\n \"login\": \"renovate[bot]\",\n \"id\": 29139614,\n \"node_id\": \"MDM6Qm90MjkxMzk2MTQ=\",\n \"avatar_url\": \"https://avatars1.githubusercontent.com/in/2740?v=4\",\n \"gravatar_id\": \"\",\n \"url\": \"https://api.github.com/users/renovate%5Bbot%5D\",\n \"html_url\": \"https://github.com/apps/renovate\",\n \"followers_url\": \"https://api.github.com/users/renovate%5Bbot%5D/followers\",\n \"following_url\": \"https://api.github.com/users/renovate%5Bbot%5D/following{/other_user}\",\n \"gists_url\": \"https://api.github.com/users/renovate%5Bbot%5D/gists{/gist_id}\",\n \"starred_url\": \"https://api.github.com/users/renovate%5Bbot%5D/starred{/owner}{/repo}\",\n \"subscriptions_url\": \"https://api.github.com/users/renovate%5Bbot%5D/subscriptions\",\n \"organizations_url\": \"https://api.github.com/users/renovate%5Bbot%5D/orgs\",\n \"repos_url\": \"https://api.github.com/users/renovate%5Bbot%5D/repos\",\n \"events_url\": \"https://api.github.com/users/renovate%5Bbot%5D/events{/privacy}\",\n \"received_events_url\": \"https://api.github.com/users/renovate%5Bbot%5D/received_events\",\n \"type\": \"Bot\",\n \"site_admin\": false\n },\n \"parents\": [\n {\n \"sha\": \"e17055e096e2ff4b05b1bb893af255d60886d941\",\n \"url\": \"https://api.github.com/repos/owner/repo/commits/e17055e096e2ff4b05b1bb893af255d60886d941\",\n \"html_url\": \"https://github.com/owner/repo/commit/e17055e096e2ff4b05b1bb893af255d60886d941\"\n }\n ]\n },\n \"_links\": {\n \"self\": \"https://api.github.com/repos/owner/repo/branches/master\",\n \"html\": \"https://github.com/owner/repo/tree/master\"\n },\n \"protected\": false,\n \"protection\": {\n \"enabled\": false,\n \"required_status_checks\": {\n \"enforcement_level\": \"off\",\n \"contexts\": [\n\n ]\n }\n },\n \"protection_url\": \"https://api.github.com/repos/owner/repo/branches/master/protection\"\n}\n", + "response": "{\"name\":\"master\",\"commit\":{\"sha\":\"cb2e8e6e165648920f696fe4c50113d15ee95937\",\"node_id\":\"MDY6Q29tbWl0Mjg2NzU2ODMzOmNiMmU4ZTZlMTY1NjQ4OTIwZjY5NmZlNGM1MDExM2QxNWVlOTU5Mzc=\",\"commit\":{\"author\":{\"name\":\"Renovate Bot\",\"email\":\"bot@renovateapp.com\",\"date\":\"2020-08-10T04:25:13Z\"},\"committer\":{\"name\":\"renovate[bot]\",\"email\":\"29139614+renovate[bot]@users.noreply.github.com\",\"date\":\"2020-08-10T05:54:36Z\"},\"message\":\"chore(deps): lock file maintenance\",\"tree\":{\"sha\":\"6dd5ba49336e5ff268561aa9d3ffad2d9496df0b\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/6dd5ba49336e5ff268561aa9d3ffad2d9496df0b\"},\"url\":\"https://api.github.com/repos/owner/repo/git/commits/cb2e8e6e165648920f696fe4c50113d15ee95937\",\"comment_count\":0,\"verification\":{\"verified\":false,\"reason\":\"unsigned\",\"signature\":null,\"payload\":null}},\"url\":\"https://api.github.com/repos/owner/repo/commits/cb2e8e6e165648920f696fe4c50113d15ee95937\",\"html_url\":\"https://github.com/owner/repo/commit/cb2e8e6e165648920f696fe4c50113d15ee95937\",\"comments_url\":\"https://api.github.com/repos/owner/repo/commits/cb2e8e6e165648920f696fe4c50113d15ee95937/comments\",\"author\":{\"login\":\"renovate-bot\",\"id\":25180681,\"node_id\":\"MDQ6VXNlcjI1MTgwNjgx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/renovate-bot\",\"html_url\":\"https://github.com/renovate-bot\",\"followers_url\":\"https://api.github.com/users/renovate-bot/followers\",\"following_url\":\"https://api.github.com/users/renovate-bot/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/renovate-bot/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/renovate-bot/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/renovate-bot/subscriptions\",\"organizations_url\":\"https://api.github.com/users/renovate-bot/orgs\",\"repos_url\":\"https://api.github.com/users/renovate-bot/repos\",\"events_url\":\"https://api.github.com/users/renovate-bot/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/renovate-bot/received_events\",\"type\":\"User\",\"site_admin\":false},\"committer\":{\"login\":\"renovate[bot]\",\"id\":29139614,\"node_id\":\"MDM6Qm90MjkxMzk2MTQ=\",\"avatar_url\":\"https://avatars1.githubusercontent.com/in/2740?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/renovate%5Bbot%5D\",\"html_url\":\"https://github.com/apps/renovate\",\"followers_url\":\"https://api.github.com/users/renovate%5Bbot%5D/followers\",\"following_url\":\"https://api.github.com/users/renovate%5Bbot%5D/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/renovate%5Bbot%5D/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/renovate%5Bbot%5D/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/renovate%5Bbot%5D/subscriptions\",\"organizations_url\":\"https://api.github.com/users/renovate%5Bbot%5D/orgs\",\"repos_url\":\"https://api.github.com/users/renovate%5Bbot%5D/repos\",\"events_url\":\"https://api.github.com/users/renovate%5Bbot%5D/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/renovate%5Bbot%5D/received_events\",\"type\":\"Bot\",\"site_admin\":false},\"parents\":[{\"sha\":\"37b60a9e453a48789dc3d5186411aafd6840f1d1\",\"url\":\"https://api.github.com/repos/owner/repo/commits/37b60a9e453a48789dc3d5186411aafd6840f1d1\",\"html_url\":\"https://github.com/owner/repo/commit/37b60a9e453a48789dc3d5186411aafd6840f1d1\"}]},\"_links\":{\"self\":\"https://api.github.com/repos/owner/repo/branches/master\",\"html\":\"https://github.com/owner/repo/tree/master\"},\"protected\":false,\"protection\":{\"enabled\":false,\"required_status_checks\":{\"enforcement_level\":\"off\",\"contexts\":[]}},\"protection_url\":\"https://api.github.com/repos/owner/repo/branches/master/protection\"}", "status": 200 }, { - "body": "{\"base_tree\":\"b33a2edece736f6f228c7ec28c385c57d5f890af\",\"tree\":[{\"path\":\"static/media/netlify.png\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"13692e6574cb4bf447aefcf7e0278e2f3fad6cf3\"}]}", + "body": "{\"base_tree\":\"cb2e8e6e165648920f696fe4c50113d15ee95937\",\"tree\":[{\"path\":\"static/media/netlify.png\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"13692e6574cb4bf447aefcf7e0278e2f3fad6cf3\"}]}", "method": "POST", "url": "/repos/owner/repo/git/trees", "headers": { "Content-Type": "application/json; charset=utf-8", - "Content-Length": "12269", + "Content-Length": "12230", "Server": "GitHub.com", "Status": "201 Created", "X-RateLimit-Limit": "5000", @@ -430,7 +430,7 @@ "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP", "X-OAuth-Scopes": "delete_repo, repo", "X-Accepted-OAuth-Scopes": "", - "Location": "https://api.github.com/repos/owner/repo/git/trees/6ae16633f927d065891673ddeec2740f9f134129", + "Location": "https://api.github.com/repos/owner/repo/git/trees/10a22c7823ff4c83a6df2456ff3b41b15edc49f8", "X-GitHub-Media-Type": "github.v3; format=json", "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", "Access-Control-Allow-Origin": "*", @@ -441,16 +441,16 @@ "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", "Content-Security-Policy": "default-src 'none'" }, - "response": "{\n \"sha\": \"6ae16633f927d065891673ddeec2740f9f134129\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/6ae16633f927d065891673ddeec2740f9f134129\",\n \"tree\": [\n {\n \"path\": \".circleci\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"2dfd51ca0c35b04f9a6b68bc264ad1457e8f29ba\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/2dfd51ca0c35b04f9a6b68bc264ad1457e8f29ba\"\n },\n {\n \"path\": \".eslintignore\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"80b4531b026d19f8fa589efd122e76199d23f967\",\n \"size\": 39,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/80b4531b026d19f8fa589efd122e76199d23f967\"\n },\n {\n \"path\": \".eslintrc.js\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"370684994aaed5b858da3a006f48cfa57e88fd27\",\n \"size\": 414,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/370684994aaed5b858da3a006f48cfa57e88fd27\"\n },\n {\n \"path\": \".flowconfig\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"14aa2ac4cc0e15223ad98630a6f1325fc81f8043\",\n \"size\": 283,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/14aa2ac4cc0e15223ad98630a6f1325fc81f8043\"\n },\n {\n \"path\": \".gitattributes\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"406a244d1522a3c809efab0c9ce46bbd86aa9c1d\",\n \"size\": 188,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/406a244d1522a3c809efab0c9ce46bbd86aa9c1d\"\n },\n {\n \"path\": \".github\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"4ebeece548b52b20af59622354530a6d33b50b43\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/4ebeece548b52b20af59622354530a6d33b50b43\"\n },\n {\n \"path\": \".gitignore\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"c071ba35b0e49899bab6d610a68eef667dbbf157\",\n \"size\": 169,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/c071ba35b0e49899bab6d610a68eef667dbbf157\"\n },\n {\n \"path\": \".prettierignore\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"393f050e123d998cf8c8b362ff95cc8ac4d250e5\",\n \"size\": 45,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/393f050e123d998cf8c8b362ff95cc8ac4d250e5\"\n },\n {\n \"path\": \".prettierrc\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"e52ad05bb13b084d7949dd76e1b2517455162150\",\n \"size\": 223,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/e52ad05bb13b084d7949dd76e1b2517455162150\"\n },\n {\n \"path\": \".stylelintrc.json\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"4b4c9698d10d756f5faa025659b86375428ed0a7\",\n \"size\": 718,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/4b4c9698d10d756f5faa025659b86375428ed0a7\"\n },\n {\n \"path\": \".vscode\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"286e97ec0113ea8242b41ac222e2c3e8077e6f1e\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/286e97ec0113ea8242b41ac222e2c3e8077e6f1e\"\n },\n {\n \"path\": \"CHANGELOG.md\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"070a5d4f0eacd2dc0be81ae8996f8982de43046e\",\n \"size\": 2113,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/070a5d4f0eacd2dc0be81ae8996f8982de43046e\"\n },\n {\n \"path\": \"CODE_OF_CONDUCT.md\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"92bc7565ff0ee145a0041b5179a820f14f39ab22\",\n \"size\": 3355,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/92bc7565ff0ee145a0041b5179a820f14f39ab22\"\n },\n {\n \"path\": \"CONTRIBUTING.md\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"8552aa241254a61258e1ff9666ab36f32fb1e3b9\",\n \"size\": 3548,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/8552aa241254a61258e1ff9666ab36f32fb1e3b9\"\n },\n {\n \"path\": \"LICENSE\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"42d85938357b49977c126ca03b199129082d4fb8\",\n \"size\": 1091,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/42d85938357b49977c126ca03b199129082d4fb8\"\n },\n {\n \"path\": \"README.md\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"19df50a78654c8d757ca7f38447aa3d09c7abcce\",\n \"size\": 3698,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/19df50a78654c8d757ca7f38447aa3d09c7abcce\"\n },\n {\n \"path\": \"backend\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"b9f1cfbf4d901fe13c3af4e0d8f46bbe5a6addd6\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/b9f1cfbf4d901fe13c3af4e0d8f46bbe5a6addd6\"\n },\n {\n \"path\": \"config.js\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"58afd573bbb69fcca000efd0f5d90b93c93a98dd\",\n \"size\": 853,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/58afd573bbb69fcca000efd0f5d90b93c93a98dd\"\n },\n {\n \"path\": \"content\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"0294ef106c58743907a5c855da1eb0f87b0b6dfc\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/0294ef106c58743907a5c855da1eb0f87b0b6dfc\"\n },\n {\n \"path\": \"flow-typed\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"86c32fd6c3118be5e0dbbb231a834447357236c6\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/86c32fd6c3118be5e0dbbb231a834447357236c6\"\n },\n {\n \"path\": \"flow\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"0af45ad00d155c8d8c7407d913ff85278244c9ce\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/0af45ad00d155c8d8c7407d913ff85278244c9ce\"\n },\n {\n \"path\": \"gatsby-browser.js\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"9bd2c9dce175f04980e91cd9dc295a299e3cdb80\",\n \"size\": 90,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/9bd2c9dce175f04980e91cd9dc295a299e3cdb80\"\n },\n {\n \"path\": \"gatsby-config.js\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"3929038f9ab6451b2b256dfba5830676e6eecbee\",\n \"size\": 7256,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/3929038f9ab6451b2b256dfba5830676e6eecbee\"\n },\n {\n \"path\": \"gatsby-node.js\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"14a207883c2093d2cc071bc5a464e165bcc1fead\",\n \"size\": 409,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/14a207883c2093d2cc071bc5a464e165bcc1fead\"\n },\n {\n \"path\": \"gatsby\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"4f23c06cd1740bf78304d2c0b29bf6bfdf427981\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/4f23c06cd1740bf78304d2c0b29bf6bfdf427981\"\n },\n {\n \"path\": \"jest\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"5a6bc7be680ba053df0f8ffdc2aaa80e62c3e819\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/5a6bc7be680ba053df0f8ffdc2aaa80e62c3e819\"\n },\n {\n \"path\": \"netlify-functions\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"a96c1f09300fa4f9e4c786d69bcbe51eaff7f14a\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/a96c1f09300fa4f9e4c786d69bcbe51eaff7f14a\"\n },\n {\n \"path\": \"netlify.toml\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"2a9e36ada28c535fc074b408daa2a0cb97ecf47c\",\n \"size\": 223,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/2a9e36ada28c535fc074b408daa2a0cb97ecf47c\"\n },\n {\n \"path\": \"package.json\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"3a994b3aefb183931a30f4d75836d6f083aaaabb\",\n \"size\": 6947,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/3a994b3aefb183931a30f4d75836d6f083aaaabb\"\n },\n {\n \"path\": \"postcss-config.js\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"d216501e9b351a72e00ba0b7459a6500e27e7da2\",\n \"size\": 703,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/d216501e9b351a72e00ba0b7459a6500e27e7da2\"\n },\n {\n \"path\": \"renovate.json\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"9d78c55fe6566ea98907ef63d56a94d7b3cbe527\",\n \"size\": 536,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/9d78c55fe6566ea98907ef63d56a94d7b3cbe527\"\n },\n {\n \"path\": \"serverless-scripts\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"ee3701f2fbfc7196ba340f6481d1387d20527898\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/ee3701f2fbfc7196ba340f6481d1387d20527898\"\n },\n {\n \"path\": \"serverless-single-page-app-plugin\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"08763fcfba643a06a452398517019bea4a5850ba\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/08763fcfba643a06a452398517019bea4a5850ba\"\n },\n {\n \"path\": \"serverless.yml\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"20b22c5fad229f35d029bf6614d333d82fe8a987\",\n \"size\": 7803,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/20b22c5fad229f35d029bf6614d333d82fe8a987\"\n },\n {\n \"path\": \"src\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"8cdb35a88232c0f32f12f130c92c7cc55f97f471\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/8cdb35a88232c0f32f12f130c92c7cc55f97f471\"\n },\n {\n \"path\": \"static\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"5bd186c5d21f3a1d3390fe89416f9ae072b39b7b\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/5bd186c5d21f3a1d3390fe89416f9ae072b39b7b\"\n },\n {\n \"path\": \"utils\",\n \"mode\": \"040000\",\n \"type\": \"tree\",\n \"sha\": \"a592549c9f74db40b51efefcda2fd76810405f27\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/a592549c9f74db40b51efefcda2fd76810405f27\"\n },\n {\n \"path\": \"yarn.lock\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"0849d700e667c3114f154c31b3e70a080fe1629b\",\n \"size\": 859666,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/0849d700e667c3114f154c31b3e70a080fe1629b\"\n }\n ],\n \"truncated\": false\n}\n", + "response": "{\"sha\":\"10a22c7823ff4c83a6df2456ff3b41b15edc49f8\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/10a22c7823ff4c83a6df2456ff3b41b15edc49f8\",\"tree\":[{\"path\":\".circleci\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"2dfd51ca0c35b04f9a6b68bc264ad1457e8f29ba\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/2dfd51ca0c35b04f9a6b68bc264ad1457e8f29ba\"},{\"path\":\".eslintignore\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"80b4531b026d19f8fa589efd122e76199d23f967\",\"size\":39,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/80b4531b026d19f8fa589efd122e76199d23f967\"},{\"path\":\".eslintrc.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"370684994aaed5b858da3a006f48cfa57e88fd27\",\"size\":414,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/370684994aaed5b858da3a006f48cfa57e88fd27\"},{\"path\":\".flowconfig\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"14aa2ac4cc0e15223ad98630a6f1325fc81f8043\",\"size\":283,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/14aa2ac4cc0e15223ad98630a6f1325fc81f8043\"},{\"path\":\".gitattributes\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"406a244d1522a3c809efab0c9ce46bbd86aa9c1d\",\"size\":188,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/406a244d1522a3c809efab0c9ce46bbd86aa9c1d\"},{\"path\":\".github\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"4ebeece548b52b20af59622354530a6d33b50b43\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/4ebeece548b52b20af59622354530a6d33b50b43\"},{\"path\":\".gitignore\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"c071ba35b0e49899bab6d610a68eef667dbbf157\",\"size\":169,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/c071ba35b0e49899bab6d610a68eef667dbbf157\"},{\"path\":\".prettierignore\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"393f050e123d998cf8c8b362ff95cc8ac4d250e5\",\"size\":45,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/393f050e123d998cf8c8b362ff95cc8ac4d250e5\"},{\"path\":\".prettierrc\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"e52ad05bb13b084d7949dd76e1b2517455162150\",\"size\":223,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/e52ad05bb13b084d7949dd76e1b2517455162150\"},{\"path\":\".stylelintrc.json\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"4b4c9698d10d756f5faa025659b86375428ed0a7\",\"size\":718,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/4b4c9698d10d756f5faa025659b86375428ed0a7\"},{\"path\":\".vscode\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"286e97ec0113ea8242b41ac222e2c3e8077e6f1e\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/286e97ec0113ea8242b41ac222e2c3e8077e6f1e\"},{\"path\":\"CHANGELOG.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"070a5d4f0eacd2dc0be81ae8996f8982de43046e\",\"size\":2113,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/070a5d4f0eacd2dc0be81ae8996f8982de43046e\"},{\"path\":\"CODE_OF_CONDUCT.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"92bc7565ff0ee145a0041b5179a820f14f39ab22\",\"size\":3355,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/92bc7565ff0ee145a0041b5179a820f14f39ab22\"},{\"path\":\"CONTRIBUTING.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"8552aa241254a61258e1ff9666ab36f32fb1e3b9\",\"size\":3548,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/8552aa241254a61258e1ff9666ab36f32fb1e3b9\"},{\"path\":\"LICENSE\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"42d85938357b49977c126ca03b199129082d4fb8\",\"size\":1091,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/42d85938357b49977c126ca03b199129082d4fb8\"},{\"path\":\"README.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"19df50a78654c8d757ca7f38447aa3d09c7abcce\",\"size\":3698,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/19df50a78654c8d757ca7f38447aa3d09c7abcce\"},{\"path\":\"backend\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"b9f1cfbf4d901fe13c3af4e0d8f46bbe5a6addd6\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/b9f1cfbf4d901fe13c3af4e0d8f46bbe5a6addd6\"},{\"path\":\"config.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"58afd573bbb69fcca000efd0f5d90b93c93a98dd\",\"size\":853,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/58afd573bbb69fcca000efd0f5d90b93c93a98dd\"},{\"path\":\"content\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"0294ef106c58743907a5c855da1eb0f87b0b6dfc\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/0294ef106c58743907a5c855da1eb0f87b0b6dfc\"},{\"path\":\"flow-typed\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"86c32fd6c3118be5e0dbbb231a834447357236c6\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/86c32fd6c3118be5e0dbbb231a834447357236c6\"},{\"path\":\"flow\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"0af45ad00d155c8d8c7407d913ff85278244c9ce\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/0af45ad00d155c8d8c7407d913ff85278244c9ce\"},{\"path\":\"gatsby-browser.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"9bd2c9dce175f04980e91cd9dc295a299e3cdb80\",\"size\":90,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/9bd2c9dce175f04980e91cd9dc295a299e3cdb80\"},{\"path\":\"gatsby-config.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"3929038f9ab6451b2b256dfba5830676e6eecbee\",\"size\":7256,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/3929038f9ab6451b2b256dfba5830676e6eecbee\"},{\"path\":\"gatsby-node.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"14a207883c2093d2cc071bc5a464e165bcc1fead\",\"size\":409,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/14a207883c2093d2cc071bc5a464e165bcc1fead\"},{\"path\":\"gatsby\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"4f23c06cd1740bf78304d2c0b29bf6bfdf427981\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/4f23c06cd1740bf78304d2c0b29bf6bfdf427981\"},{\"path\":\"jest\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"5a6bc7be680ba053df0f8ffdc2aaa80e62c3e819\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/5a6bc7be680ba053df0f8ffdc2aaa80e62c3e819\"},{\"path\":\"netlify-functions\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"a96c1f09300fa4f9e4c786d69bcbe51eaff7f14a\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/a96c1f09300fa4f9e4c786d69bcbe51eaff7f14a\"},{\"path\":\"netlify.toml\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"2a9e36ada28c535fc074b408daa2a0cb97ecf47c\",\"size\":223,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/2a9e36ada28c535fc074b408daa2a0cb97ecf47c\"},{\"path\":\"package.json\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"d8b6e6e922c8d166290f99228090139a3358bfd3\",\"size\":6951,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/d8b6e6e922c8d166290f99228090139a3358bfd3\"},{\"path\":\"postcss-config.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"d216501e9b351a72e00ba0b7459a6500e27e7da2\",\"size\":703,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/d216501e9b351a72e00ba0b7459a6500e27e7da2\"},{\"path\":\"renovate.json\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"9d78c55fe6566ea98907ef63d56a94d7b3cbe527\",\"size\":536,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/9d78c55fe6566ea98907ef63d56a94d7b3cbe527\"},{\"path\":\"serverless-scripts\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"ee3701f2fbfc7196ba340f6481d1387d20527898\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/ee3701f2fbfc7196ba340f6481d1387d20527898\"},{\"path\":\"serverless-single-page-app-plugin\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"08763fcfba643a06a452398517019bea4a5850ba\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/08763fcfba643a06a452398517019bea4a5850ba\"},{\"path\":\"serverless.yml\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"20b22c5fad229f35d029bf6614d333d82fe8a987\",\"size\":7803,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/20b22c5fad229f35d029bf6614d333d82fe8a987\"},{\"path\":\"src\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"8cdb35a88232c0f32f12f130c92c7cc55f97f471\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/8cdb35a88232c0f32f12f130c92c7cc55f97f471\"},{\"path\":\"static\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"5bd186c5d21f3a1d3390fe89416f9ae072b39b7b\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/5bd186c5d21f3a1d3390fe89416f9ae072b39b7b\"},{\"path\":\"utils\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"a592549c9f74db40b51efefcda2fd76810405f27\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/a592549c9f74db40b51efefcda2fd76810405f27\"},{\"path\":\"yarn.lock\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"eff9f6e3c4ee2cb7bd2685c8f93d6d68af8aad37\",\"size\":923955,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/eff9f6e3c4ee2cb7bd2685c8f93d6d68af8aad37\"}],\"truncated\":false}", "status": 201 }, { - "body": "{\"message\":\"Upload “static/media/netlify.png”\",\"tree\":\"6ae16633f927d065891673ddeec2740f9f134129\",\"parents\":[\"b33a2edece736f6f228c7ec28c385c57d5f890af\"]}", + "body": "{\"message\":\"Upload “static/media/netlify.png”\",\"tree\":\"10a22c7823ff4c83a6df2456ff3b41b15edc49f8\",\"parents\":[\"cb2e8e6e165648920f696fe4c50113d15ee95937\"]}", "method": "POST", "url": "/repos/owner/repo/git/commits", "headers": { "Content-Type": "application/json; charset=utf-8", - "Content-Length": "1526", + "Content-Length": "1521", "Server": "GitHub.com", "Status": "201 Created", "X-RateLimit-Limit": "5000", @@ -458,7 +458,7 @@ "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP", "X-OAuth-Scopes": "delete_repo, repo", "X-Accepted-OAuth-Scopes": "", - "Location": "https://api.github.com/repos/owner/repo/git/commits/d6b98dd2685e7a0acbb1eafa21bd8b6a259a8ede", + "Location": "https://api.github.com/repos/owner/repo/git/commits/45bb95bc12d07bbe03ea7e522434e489135bd1b2", "X-GitHub-Media-Type": "github.v3; format=json", "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", "Access-Control-Allow-Origin": "*", @@ -469,11 +469,11 @@ "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", "Content-Security-Policy": "default-src 'none'" }, - "response": "{\n \"sha\": \"d6b98dd2685e7a0acbb1eafa21bd8b6a259a8ede\",\n \"node_id\": \"MDY6Q29tbWl0MjU1MDc3OTE0OmQ2Yjk4ZGQyNjg1ZTdhMGFjYmIxZWFmYTIxYmQ4YjZhMjU5YThlZGU=\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/d6b98dd2685e7a0acbb1eafa21bd8b6a259a8ede\",\n \"html_url\": \"https://github.com/owner/repo/commit/d6b98dd2685e7a0acbb1eafa21bd8b6a259a8ede\",\n \"author\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2020-04-12T12:30:52Z\"\n },\n \"committer\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2020-04-12T12:30:52Z\"\n },\n \"tree\": {\n \"sha\": \"6ae16633f927d065891673ddeec2740f9f134129\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/6ae16633f927d065891673ddeec2740f9f134129\"\n },\n \"message\": \"Upload “static/media/netlify.png”\",\n \"parents\": [\n {\n \"sha\": \"b33a2edece736f6f228c7ec28c385c57d5f890af\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/b33a2edece736f6f228c7ec28c385c57d5f890af\",\n \"html_url\": \"https://github.com/owner/repo/commit/b33a2edece736f6f228c7ec28c385c57d5f890af\"\n }\n ],\n \"verification\": {\n \"verified\": false,\n \"reason\": \"unsigned\",\n \"signature\": null,\n \"payload\": null\n }\n}\n", + "response": "{\"sha\":\"45bb95bc12d07bbe03ea7e522434e489135bd1b2\",\"node_id\":\"MDY6Q29tbWl0Mjg2NzU2ODMzOjQ1YmI5NWJjMTJkMDdiYmUwM2VhN2U1MjI0MzRlNDg5MTM1YmQxYjI=\",\"url\":\"https://api.github.com/repos/owner/repo/git/commits/45bb95bc12d07bbe03ea7e522434e489135bd1b2\",\"html_url\":\"https://github.com/owner/repo/commit/45bb95bc12d07bbe03ea7e522434e489135bd1b2\",\"author\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2020-08-11T13:50:06Z\"},\"committer\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2020-08-11T13:50:06Z\"},\"tree\":{\"sha\":\"10a22c7823ff4c83a6df2456ff3b41b15edc49f8\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/10a22c7823ff4c83a6df2456ff3b41b15edc49f8\"},\"message\":\"Upload “static/media/netlify.png”\",\"parents\":[{\"sha\":\"cb2e8e6e165648920f696fe4c50113d15ee95937\",\"url\":\"https://api.github.com/repos/owner/repo/git/commits/cb2e8e6e165648920f696fe4c50113d15ee95937\",\"html_url\":\"https://github.com/owner/repo/commit/cb2e8e6e165648920f696fe4c50113d15ee95937\"}],\"verification\":{\"verified\":false,\"reason\":\"unsigned\",\"signature\":null,\"payload\":null}}", "status": 201 }, { - "body": "{\"sha\":\"d6b98dd2685e7a0acbb1eafa21bd8b6a259a8ede\",\"force\":false}", + "body": "{\"sha\":\"45bb95bc12d07bbe03ea7e522434e489135bd1b2\",\"force\":false}", "method": "PATCH", "url": "/repos/owner/repo/git/refs/heads/master", "headers": { @@ -494,14 +494,14 @@ "X-XSS-Protection": "1; mode=block", "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", "Content-Security-Policy": "default-src 'none'", - "content-length": "464" + "content-length": "474" }, - "response": "{\n \"ref\": \"refs/heads/master\",\n \"node_id\": \"MDM6UmVmMjU1MDc3OTE0Om1hc3Rlcg==\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/refs/heads/master\",\n \"object\": {\n \"sha\": \"d6b98dd2685e7a0acbb1eafa21bd8b6a259a8ede\",\n \"type\": \"commit\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/d6b98dd2685e7a0acbb1eafa21bd8b6a259a8ede\"\n }\n}\n", + "response": "{\"ref\":\"refs/heads/master\",\"node_id\":\"MDM6UmVmMjg2NzU2ODMzOnJlZnMvaGVhZHMvbWFzdGVy\",\"url\":\"https://api.github.com/repos/owner/repo/git/refs/heads/master\",\"object\":{\"sha\":\"45bb95bc12d07bbe03ea7e522434e489135bd1b2\",\"type\":\"commit\",\"url\":\"https://api.github.com/repos/owner/repo/git/commits/45bb95bc12d07bbe03ea7e522434e489135bd1b2\"}}", "status": 200 }, { "method": "GET", - "url": "/repos/owner/repo/git/trees/master:static%2Fmedia", + "url": "/repos/owner/repo/branches/master", "headers": { "Content-Type": "application/json; charset=utf-8", "Server": "GitHub.com", @@ -520,14 +520,71 @@ "X-XSS-Protection": "1; mode=block", "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", "Content-Security-Policy": "default-src 'none'", - "content-length": "574" + "content-length": "4772" }, - "response": "{\n \"sha\": \"c240f73ec047174f525b975157c1271fffdc2470\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/c240f73ec047174f525b975157c1271fffdc2470\",\n \"tree\": [\n {\n \"path\": \"netlify.png\",\n \"mode\": \"100644\",\n \"type\": \"blob\",\n \"sha\": \"13692e6574cb4bf447aefcf7e0278e2f3fad6cf3\",\n \"size\": 3470,\n \"url\": \"https://api.github.com/repos/owner/repo/git/blobs/13692e6574cb4bf447aefcf7e0278e2f3fad6cf3\"\n }\n ],\n \"truncated\": false\n}\n", + "response": "{\"name\":\"master\",\"commit\":{\"sha\":\"45bb95bc12d07bbe03ea7e522434e489135bd1b2\",\"node_id\":\"MDY6Q29tbWl0Mjg2NzU2ODMzOjQ1YmI5NWJjMTJkMDdiYmUwM2VhN2U1MjI0MzRlNDg5MTM1YmQxYjI=\",\"commit\":{\"author\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2020-08-11T13:50:06Z\"},\"committer\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2020-08-11T13:50:06Z\"},\"message\":\"Upload “static/media/netlify.png”\",\"tree\":{\"sha\":\"10a22c7823ff4c83a6df2456ff3b41b15edc49f8\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/10a22c7823ff4c83a6df2456ff3b41b15edc49f8\"},\"url\":\"https://api.github.com/repos/owner/repo/git/commits/45bb95bc12d07bbe03ea7e522434e489135bd1b2\",\"comment_count\":0,\"verification\":{\"verified\":false,\"reason\":\"unsigned\",\"signature\":null,\"payload\":null}},\"url\":\"https://api.github.com/repos/owner/repo/commits/45bb95bc12d07bbe03ea7e522434e489135bd1b2\",\"html_url\":\"https://github.com/owner/repo/commit/45bb95bc12d07bbe03ea7e522434e489135bd1b2\",\"comments_url\":\"https://api.github.com/repos/owner/repo/commits/45bb95bc12d07bbe03ea7e522434e489135bd1b2/comments\",\"author\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"committer\":{\"login\":\"owner\",\"id\":26760571,\"node_id\":\"MDQ6VXNlcjI2NzYwNTcx\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"gravatar_id\":\"\",\"url\":\"https://api.github.com/users/owner\",\"html_url\":\"https://github.com/owner\",\"followers_url\":\"https://api.github.com/users/owner/followers\",\"following_url\":\"https://api.github.com/users/owner/following{/other_user}\",\"gists_url\":\"https://api.github.com/users/owner/gists{/gist_id}\",\"starred_url\":\"https://api.github.com/users/owner/starred{/owner}{/repo}\",\"subscriptions_url\":\"https://api.github.com/users/owner/subscriptions\",\"organizations_url\":\"https://api.github.com/users/owner/orgs\",\"repos_url\":\"https://api.github.com/users/owner/repos\",\"events_url\":\"https://api.github.com/users/owner/events{/privacy}\",\"received_events_url\":\"https://api.github.com/users/owner/received_events\",\"type\":\"User\",\"site_admin\":false},\"parents\":[{\"sha\":\"cb2e8e6e165648920f696fe4c50113d15ee95937\",\"url\":\"https://api.github.com/repos/owner/repo/commits/cb2e8e6e165648920f696fe4c50113d15ee95937\",\"html_url\":\"https://github.com/owner/repo/commit/cb2e8e6e165648920f696fe4c50113d15ee95937\"}]},\"_links\":{\"self\":\"https://api.github.com/repos/owner/repo/branches/master\",\"html\":\"https://github.com/owner/repo/tree/master\"},\"protected\":false,\"protection\":{\"enabled\":false,\"required_status_checks\":{\"enforcement_level\":\"off\",\"contexts\":[]}},\"protection_url\":\"https://api.github.com/repos/owner/repo/branches/master/protection\"}", "status": 200 }, { - "method": "DELETE", - "url": "/repos/owner/repo/contents/static/media/netlify.png?sha=13692e6574cb4bf447aefcf7e0278e2f3fad6cf3&message=Delete “static/media/netlify.png”&branch=master", + "body": "{\"base_tree\":\"45bb95bc12d07bbe03ea7e522434e489135bd1b2\",\"tree\":[{\"path\":\"static/media/netlify.png\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":null}]}", + "method": "POST", + "url": "/repos/owner/repo/git/trees", + "headers": { + "Content-Type": "application/json; charset=utf-8", + "Content-Length": "12230", + "Server": "GitHub.com", + "Status": "201 Created", + "X-RateLimit-Limit": "5000", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP", + "X-OAuth-Scopes": "delete_repo, repo", + "X-Accepted-OAuth-Scopes": "", + "Location": "https://api.github.com/repos/owner/repo/git/trees/6dd5ba49336e5ff268561aa9d3ffad2d9496df0b", + "X-GitHub-Media-Type": "github.v3; format=json", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "1; mode=block", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'" + }, + "response": "{\"sha\":\"6dd5ba49336e5ff268561aa9d3ffad2d9496df0b\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/6dd5ba49336e5ff268561aa9d3ffad2d9496df0b\",\"tree\":[{\"path\":\".circleci\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"2dfd51ca0c35b04f9a6b68bc264ad1457e8f29ba\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/2dfd51ca0c35b04f9a6b68bc264ad1457e8f29ba\"},{\"path\":\".eslintignore\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"80b4531b026d19f8fa589efd122e76199d23f967\",\"size\":39,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/80b4531b026d19f8fa589efd122e76199d23f967\"},{\"path\":\".eslintrc.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"370684994aaed5b858da3a006f48cfa57e88fd27\",\"size\":414,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/370684994aaed5b858da3a006f48cfa57e88fd27\"},{\"path\":\".flowconfig\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"14aa2ac4cc0e15223ad98630a6f1325fc81f8043\",\"size\":283,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/14aa2ac4cc0e15223ad98630a6f1325fc81f8043\"},{\"path\":\".gitattributes\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"406a244d1522a3c809efab0c9ce46bbd86aa9c1d\",\"size\":188,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/406a244d1522a3c809efab0c9ce46bbd86aa9c1d\"},{\"path\":\".github\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"4ebeece548b52b20af59622354530a6d33b50b43\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/4ebeece548b52b20af59622354530a6d33b50b43\"},{\"path\":\".gitignore\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"c071ba35b0e49899bab6d610a68eef667dbbf157\",\"size\":169,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/c071ba35b0e49899bab6d610a68eef667dbbf157\"},{\"path\":\".prettierignore\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"393f050e123d998cf8c8b362ff95cc8ac4d250e5\",\"size\":45,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/393f050e123d998cf8c8b362ff95cc8ac4d250e5\"},{\"path\":\".prettierrc\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"e52ad05bb13b084d7949dd76e1b2517455162150\",\"size\":223,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/e52ad05bb13b084d7949dd76e1b2517455162150\"},{\"path\":\".stylelintrc.json\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"4b4c9698d10d756f5faa025659b86375428ed0a7\",\"size\":718,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/4b4c9698d10d756f5faa025659b86375428ed0a7\"},{\"path\":\".vscode\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"286e97ec0113ea8242b41ac222e2c3e8077e6f1e\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/286e97ec0113ea8242b41ac222e2c3e8077e6f1e\"},{\"path\":\"CHANGELOG.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"070a5d4f0eacd2dc0be81ae8996f8982de43046e\",\"size\":2113,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/070a5d4f0eacd2dc0be81ae8996f8982de43046e\"},{\"path\":\"CODE_OF_CONDUCT.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"92bc7565ff0ee145a0041b5179a820f14f39ab22\",\"size\":3355,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/92bc7565ff0ee145a0041b5179a820f14f39ab22\"},{\"path\":\"CONTRIBUTING.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"8552aa241254a61258e1ff9666ab36f32fb1e3b9\",\"size\":3548,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/8552aa241254a61258e1ff9666ab36f32fb1e3b9\"},{\"path\":\"LICENSE\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"42d85938357b49977c126ca03b199129082d4fb8\",\"size\":1091,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/42d85938357b49977c126ca03b199129082d4fb8\"},{\"path\":\"README.md\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"19df50a78654c8d757ca7f38447aa3d09c7abcce\",\"size\":3698,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/19df50a78654c8d757ca7f38447aa3d09c7abcce\"},{\"path\":\"backend\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"b9f1cfbf4d901fe13c3af4e0d8f46bbe5a6addd6\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/b9f1cfbf4d901fe13c3af4e0d8f46bbe5a6addd6\"},{\"path\":\"config.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"58afd573bbb69fcca000efd0f5d90b93c93a98dd\",\"size\":853,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/58afd573bbb69fcca000efd0f5d90b93c93a98dd\"},{\"path\":\"content\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"0294ef106c58743907a5c855da1eb0f87b0b6dfc\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/0294ef106c58743907a5c855da1eb0f87b0b6dfc\"},{\"path\":\"flow-typed\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"86c32fd6c3118be5e0dbbb231a834447357236c6\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/86c32fd6c3118be5e0dbbb231a834447357236c6\"},{\"path\":\"flow\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"0af45ad00d155c8d8c7407d913ff85278244c9ce\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/0af45ad00d155c8d8c7407d913ff85278244c9ce\"},{\"path\":\"gatsby-browser.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"9bd2c9dce175f04980e91cd9dc295a299e3cdb80\",\"size\":90,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/9bd2c9dce175f04980e91cd9dc295a299e3cdb80\"},{\"path\":\"gatsby-config.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"3929038f9ab6451b2b256dfba5830676e6eecbee\",\"size\":7256,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/3929038f9ab6451b2b256dfba5830676e6eecbee\"},{\"path\":\"gatsby-node.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"14a207883c2093d2cc071bc5a464e165bcc1fead\",\"size\":409,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/14a207883c2093d2cc071bc5a464e165bcc1fead\"},{\"path\":\"gatsby\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"4f23c06cd1740bf78304d2c0b29bf6bfdf427981\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/4f23c06cd1740bf78304d2c0b29bf6bfdf427981\"},{\"path\":\"jest\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"5a6bc7be680ba053df0f8ffdc2aaa80e62c3e819\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/5a6bc7be680ba053df0f8ffdc2aaa80e62c3e819\"},{\"path\":\"netlify-functions\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"a96c1f09300fa4f9e4c786d69bcbe51eaff7f14a\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/a96c1f09300fa4f9e4c786d69bcbe51eaff7f14a\"},{\"path\":\"netlify.toml\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"2a9e36ada28c535fc074b408daa2a0cb97ecf47c\",\"size\":223,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/2a9e36ada28c535fc074b408daa2a0cb97ecf47c\"},{\"path\":\"package.json\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"d8b6e6e922c8d166290f99228090139a3358bfd3\",\"size\":6951,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/d8b6e6e922c8d166290f99228090139a3358bfd3\"},{\"path\":\"postcss-config.js\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"d216501e9b351a72e00ba0b7459a6500e27e7da2\",\"size\":703,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/d216501e9b351a72e00ba0b7459a6500e27e7da2\"},{\"path\":\"renovate.json\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"9d78c55fe6566ea98907ef63d56a94d7b3cbe527\",\"size\":536,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/9d78c55fe6566ea98907ef63d56a94d7b3cbe527\"},{\"path\":\"serverless-scripts\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"ee3701f2fbfc7196ba340f6481d1387d20527898\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/ee3701f2fbfc7196ba340f6481d1387d20527898\"},{\"path\":\"serverless-single-page-app-plugin\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"08763fcfba643a06a452398517019bea4a5850ba\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/08763fcfba643a06a452398517019bea4a5850ba\"},{\"path\":\"serverless.yml\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"20b22c5fad229f35d029bf6614d333d82fe8a987\",\"size\":7803,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/20b22c5fad229f35d029bf6614d333d82fe8a987\"},{\"path\":\"src\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"8cdb35a88232c0f32f12f130c92c7cc55f97f471\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/8cdb35a88232c0f32f12f130c92c7cc55f97f471\"},{\"path\":\"static\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"139040296ae3796be0e107be98572f0e6bb28901\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/139040296ae3796be0e107be98572f0e6bb28901\"},{\"path\":\"utils\",\"mode\":\"040000\",\"type\":\"tree\",\"sha\":\"a592549c9f74db40b51efefcda2fd76810405f27\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/a592549c9f74db40b51efefcda2fd76810405f27\"},{\"path\":\"yarn.lock\",\"mode\":\"100644\",\"type\":\"blob\",\"sha\":\"eff9f6e3c4ee2cb7bd2685c8f93d6d68af8aad37\",\"size\":923955,\"url\":\"https://api.github.com/repos/owner/repo/git/blobs/eff9f6e3c4ee2cb7bd2685c8f93d6d68af8aad37\"}],\"truncated\":false}", + "status": 201 + }, + { + "body": "{\"message\":\"Delete “static/media/netlify.png”\",\"tree\":\"6dd5ba49336e5ff268561aa9d3ffad2d9496df0b\",\"parents\":[\"45bb95bc12d07bbe03ea7e522434e489135bd1b2\"]}", + "method": "POST", + "url": "/repos/owner/repo/git/commits", + "headers": { + "Content-Type": "application/json; charset=utf-8", + "Content-Length": "1521", + "Server": "GitHub.com", + "Status": "201 Created", + "X-RateLimit-Limit": "5000", + "Cache-Control": "private, max-age=60, s-maxage=60", + "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP", + "X-OAuth-Scopes": "delete_repo, repo", + "X-Accepted-OAuth-Scopes": "", + "Location": "https://api.github.com/repos/owner/repo/git/commits/dd76739dae8f1a5d4106f386074415412d8fd203", + "X-GitHub-Media-Type": "github.v3; format=json", + "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", + "Access-Control-Allow-Origin": "*", + "Strict-Transport-Security": "max-age=31536000; includeSubdomains; preload", + "X-Frame-Options": "deny", + "X-Content-Type-Options": "nosniff", + "X-XSS-Protection": "1; mode=block", + "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", + "Content-Security-Policy": "default-src 'none'" + }, + "response": "{\"sha\":\"dd76739dae8f1a5d4106f386074415412d8fd203\",\"node_id\":\"MDY6Q29tbWl0Mjg2NzU2ODMzOmRkNzY3MzlkYWU4ZjFhNWQ0MTA2ZjM4NjA3NDQxNTQxMmQ4ZmQyMDM=\",\"url\":\"https://api.github.com/repos/owner/repo/git/commits/dd76739dae8f1a5d4106f386074415412d8fd203\",\"html_url\":\"https://github.com/owner/repo/commit/dd76739dae8f1a5d4106f386074415412d8fd203\",\"author\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2020-08-11T13:50:10Z\"},\"committer\":{\"name\":\"owner\",\"email\":\"owner@users.noreply.github.com\",\"date\":\"2020-08-11T13:50:10Z\"},\"tree\":{\"sha\":\"6dd5ba49336e5ff268561aa9d3ffad2d9496df0b\",\"url\":\"https://api.github.com/repos/owner/repo/git/trees/6dd5ba49336e5ff268561aa9d3ffad2d9496df0b\"},\"message\":\"Delete “static/media/netlify.png”\",\"parents\":[{\"sha\":\"45bb95bc12d07bbe03ea7e522434e489135bd1b2\",\"url\":\"https://api.github.com/repos/owner/repo/git/commits/45bb95bc12d07bbe03ea7e522434e489135bd1b2\",\"html_url\":\"https://github.com/owner/repo/commit/45bb95bc12d07bbe03ea7e522434e489135bd1b2\"}],\"verification\":{\"verified\":false,\"reason\":\"unsigned\",\"signature\":null,\"payload\":null}}", + "status": 201 + }, + { + "body": "{\"sha\":\"dd76739dae8f1a5d4106f386074415412d8fd203\",\"force\":false}", + "method": "PATCH", + "url": "/repos/owner/repo/git/refs/heads/master", "headers": { "Content-Type": "application/json; charset=utf-8", "Server": "GitHub.com", @@ -536,7 +593,7 @@ "Cache-Control": "private, max-age=60, s-maxage=60", "Vary": "Accept, Authorization, Cookie, X-GitHub-OTP", "X-OAuth-Scopes": "delete_repo, repo", - "X-Accepted-OAuth-Scopes": "", + "X-Accepted-OAuth-Scopes": "repo", "X-GitHub-Media-Type": "github.v3; format=json", "Access-Control-Expose-Headers": "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, Deprecation, Sunset", "Access-Control-Allow-Origin": "*", @@ -546,9 +603,9 @@ "X-XSS-Protection": "1; mode=block", "Referrer-Policy": "origin-when-cross-origin, strict-origin-when-cross-origin", "Content-Security-Policy": "default-src 'none'", - "content-length": "1627" + "content-length": "474" }, - "response": "{\n \"content\": null,\n \"commit\": {\n \"sha\": \"9302256b5740499e7d3a56ed7fda3903fb64dfbf\",\n \"node_id\": \"MDY6Q29tbWl0MjU1MDc3OTE0OjkzMDIyNTZiNTc0MDQ5OWU3ZDNhNTZlZDdmZGEzOTAzZmI2NGRmYmY=\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/9302256b5740499e7d3a56ed7fda3903fb64dfbf\",\n \"html_url\": \"https://github.com/owner/repo/commit/9302256b5740499e7d3a56ed7fda3903fb64dfbf\",\n \"author\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2020-04-12T12:30:55Z\"\n },\n \"committer\": {\n \"name\": \"owner\",\n \"email\": \"owner@users.noreply.github.com\",\n \"date\": \"2020-04-12T12:30:55Z\"\n },\n \"tree\": {\n \"sha\": \"248f8dc1745500d3f9fadea5d19e128333ae66f9\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/trees/248f8dc1745500d3f9fadea5d19e128333ae66f9\"\n },\n \"message\": \"Delete “static/media/netlify.png”\",\n \"parents\": [\n {\n \"sha\": \"d6b98dd2685e7a0acbb1eafa21bd8b6a259a8ede\",\n \"url\": \"https://api.github.com/repos/owner/repo/git/commits/d6b98dd2685e7a0acbb1eafa21bd8b6a259a8ede\",\n \"html_url\": \"https://github.com/owner/repo/commit/d6b98dd2685e7a0acbb1eafa21bd8b6a259a8ede\"\n }\n ],\n \"verification\": {\n \"verified\": false,\n \"reason\": \"unsigned\",\n \"signature\": null,\n \"payload\": null\n }\n }\n}\n", + "response": "{\"ref\":\"refs/heads/master\",\"node_id\":\"MDM6UmVmMjg2NzU2ODMzOnJlZnMvaGVhZHMvbWFzdGVy\",\"url\":\"https://api.github.com/repos/owner/repo/git/refs/heads/master\",\"object\":{\"sha\":\"dd76739dae8f1a5d4106f386074415412d8fd203\",\"type\":\"commit\",\"url\":\"https://api.github.com/repos/owner/repo/git/commits/dd76739dae8f1a5d4106f386074415412d8fd203\"}}", "status": 200 } ] \ No newline at end of file diff --git a/cypress/fixtures/GitLab Backend Media Library - REST API__can delete image from global media library.json b/cypress/fixtures/GitLab Backend Media Library - REST API__can delete image from global media library.json index a2c1b952..c14ded0b 100644 --- a/cypress/fixtures/GitLab Backend Media Library - REST API__can delete image from global media library.json +++ b/cypress/fixtures/GitLab Backend Media Library - REST API__can delete image from global media library.json @@ -5,23 +5,24 @@ "headers": { "Content-Type": "application/json", "Connection": "keep-alive", - "Set-Cookie": "__cfduid=d29ff07e298b8eadeef9d5904edd62d9d1586687735; expires=Tue, 12-May-20 10:35:35 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Set-Cookie": "__cfduid=d78ede5e8e7858450fc7f8956860635491597153041; expires=Thu, 10-Sep-20 13:37:21 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Vary": "Accept-Encoding", "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", "Access-Control-Allow-Origin": "*", "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", "Access-Control-Max-Age": "7200", "Cache-Control": "max-age=0, private, must-revalidate", - "Vary": "Origin", "X-Content-Type-Options": "nosniff", "X-Frame-Options": "SAMEORIGIN", "Strict-Transport-Security": "max-age=31536000", "Referrer-Policy": "strict-origin-when-cross-origin", "GitLab-SV": "localhost", "CF-Cache-Status": "DYNAMIC", + "cf-request-id": "047f5673e90000fc71b8291200000001", "Expect-CT": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "Server": "cloudflare", - "CF-RAY": "582c4d29283e0081-LHR", - "content-length": "950" + "CF-RAY": "5c1259cca928fc71-ZAG", + "content-length": "1051" }, "response": "{\"id\":1,\"name\":\"owner\",\"username\":\"owner\",\"avatar_url\":\"https://avatars1.githubusercontent.com/u/7892489?v=4\",\"email\":\"owner@email.com\",\"login\":\"owner\"}", "status": 200 @@ -32,25 +33,26 @@ "headers": { "Content-Type": "application/json", "Connection": "keep-alive", - "Set-Cookie": "__cfduid=dbf9dec02fb623733dc7b9910ce1c7d9b1586687735; expires=Tue, 12-May-20 10:35:35 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Set-Cookie": "__cfduid=d78ede5e8e7858450fc7f8956860635491597153041; expires=Thu, 10-Sep-20 13:37:21 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Vary": "Accept-Encoding", "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", "Access-Control-Allow-Origin": "*", "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", "Access-Control-Max-Age": "7200", "Cache-Control": "max-age=0, private, must-revalidate", - "Vary": "Origin", "X-Content-Type-Options": "nosniff", "X-Frame-Options": "SAMEORIGIN", "Strict-Transport-Security": "max-age=31536000", "Referrer-Policy": "strict-origin-when-cross-origin", "GitLab-SV": "localhost", "CF-Cache-Status": "DYNAMIC", + "cf-request-id": "047f5675df0000fc71c0274200000001", "Expect-CT": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "Server": "cloudflare", - "CF-RAY": "582c4d2bdd24dc2b-LHR", - "content-length": "3543" + "CF-RAY": "5c1259cfc9a8fc71-ZAG", + "content-length": "3814" }, - "response": "{\"id\":18082511,\"description\":null,\"name\":\"repo\",\"name_with_namespace\":\"owner / repo\",\"path\":\"repo\",\"path_with_namespace\":\"owner/repo\",\"created_at\":\"2020-04-12T10:34:56.128Z\",\"default_branch\":\"master\",\"tag_list\":[],\"ssh_url_to_repo\":\"git@gitlab.com:owner/repo.git\",\"http_url_to_repo\":\"https://gitlab.com/owner/repo.git\",\"web_url\":\"https://gitlab.com/owner/repo\",\"readme_url\":\"https://gitlab.com/owner/repo/-/blob/master/README.md\",\"avatar_url\":null,\"star_count\":0,\"forks_count\":0,\"last_activity_at\":\"2020-04-12T10:34:56.128Z\",\"namespace\":{\"id\":6364123,\"name\":\"owner\",\"path\":\"owner\",\"kind\":\"user\",\"full_path\":\"owner\",\"parent_id\":null,\"avatar_url\":\"https://secure.gravatar.com/avatar/2c95a9ee2f890f6c9ccdbf2438c88ca7?s=80\\u0026d=identicon\",\"web_url\":\"https://gitlab.com/owner\"},\"_links\":{\"self\":\"https://gitlab.com/api/v4/projects/18082511\",\"issues\":\"https://gitlab.com/api/v4/projects/18082511/issues\",\"merge_requests\":\"https://gitlab.com/api/v4/projects/18082511/merge_requests\",\"repo_branches\":\"https://gitlab.com/api/v4/projects/18082511/repository/branches\",\"labels\":\"https://gitlab.com/api/v4/projects/18082511/labels\",\"events\":\"https://gitlab.com/api/v4/projects/18082511/events\",\"members\":\"https://gitlab.com/api/v4/projects/18082511/members\"},\"empty_repo\":false,\"archived\":false,\"visibility\":\"private\",\"owner\":{\"id\":4843565,\"name\":\"owner\",\"username\":\"owner\",\"state\":\"active\",\"avatar_url\":\"https://secure.gravatar.com/avatar/2c95a9ee2f890f6c9ccdbf2438c88ca7?s=80\\u0026d=identicon\",\"web_url\":\"https://gitlab.com/owner\"},\"resolve_outdated_diff_discussions\":false,\"container_registry_enabled\":true,\"container_expiration_policy\":{\"cadence\":\"7d\",\"enabled\":true,\"keep_n\":null,\"older_than\":null,\"name_regex\":null,\"next_run_at\":\"2020-04-19T10:34:56.148Z\"},\"issues_enabled\":true,\"merge_requests_enabled\":true,\"wiki_enabled\":true,\"jobs_enabled\":true,\"snippets_enabled\":true,\"can_create_merge_request_in\":true,\"issues_access_level\":\"enabled\",\"repository_access_level\":\"enabled\",\"merge_requests_access_level\":\"enabled\",\"forking_access_level\":\"enabled\",\"wiki_access_level\":\"enabled\",\"builds_access_level\":\"enabled\",\"snippets_access_level\":\"enabled\",\"pages_access_level\":\"private\",\"emails_disabled\":null,\"shared_runners_enabled\":true,\"lfs_enabled\":false,\"creator_id\":4843565,\"import_status\":\"none\",\"import_error\":null,\"open_issues_count\":0,\"runners_token\":\"ZohoyyvjGhdUrFaxomyu\",\"ci_default_git_depth\":50,\"public_jobs\":true,\"build_git_strategy\":\"fetch\",\"build_timeout\":3600,\"auto_cancel_pending_pipelines\":\"enabled\",\"build_coverage_regex\":null,\"ci_config_path\":null,\"shared_with_groups\":[],\"only_allow_merge_if_pipeline_succeeds\":false,\"request_access_enabled\":true,\"only_allow_merge_if_all_discussions_are_resolved\":false,\"remove_source_branch_after_merge\":true,\"printing_merge_request_link_enabled\":true,\"merge_method\":\"merge\",\"suggestion_commit_message\":null,\"auto_devops_enabled\":false,\"auto_devops_deploy_strategy\":\"continuous\",\"autoclose_referenced_issues\":true,\"external_authorization_classification_label\":\"\",\"permissions\":{\"project_access\":{\"access_level\":40,\"notification_level\":3},\"group_access\":null}}", + "response": "{\"id\":20467931,\"description\":null,\"name\":\"repo\",\"name_with_namespace\":\"owner / repo\",\"path\":\"repo\",\"path_with_namespace\":\"owner/repo\",\"created_at\":\"2020-08-11T13:37:06.936Z\",\"default_branch\":\"master\",\"tag_list\":[],\"ssh_url_to_repo\":\"git@gitlab.com:owner/repo.git\",\"http_url_to_repo\":\"https://gitlab.com/owner/repo.git\",\"web_url\":\"https://gitlab.com/owner/repo\",\"readme_url\":\"https://gitlab.com/owner/repo/-/blob/master/README.md\",\"avatar_url\":null,\"forks_count\":0,\"star_count\":0,\"last_activity_at\":\"2020-08-11T13:37:06.936Z\",\"namespace\":{\"id\":6364123,\"name\":\"owner\",\"path\":\"owner\",\"kind\":\"user\",\"full_path\":\"owner\",\"parent_id\":null,\"avatar_url\":\"https://secure.gravatar.com/avatar/2c95a9ee2f890f6c9ccdbf2438c88ca7?s=80&d=identicon\",\"web_url\":\"https://gitlab.com/owner\"},\"_links\":{\"self\":\"https://gitlab.com/api/v4/projects/20467931\",\"issues\":\"https://gitlab.com/api/v4/projects/20467931/issues\",\"merge_requests\":\"https://gitlab.com/api/v4/projects/20467931/merge_requests\",\"repo_branches\":\"https://gitlab.com/api/v4/projects/20467931/repository/branches\",\"labels\":\"https://gitlab.com/api/v4/projects/20467931/labels\",\"events\":\"https://gitlab.com/api/v4/projects/20467931/events\",\"members\":\"https://gitlab.com/api/v4/projects/20467931/members\"},\"packages_enabled\":true,\"empty_repo\":false,\"archived\":false,\"visibility\":\"private\",\"owner\":{\"id\":4843565,\"name\":\"owner\",\"username\":\"owner\",\"state\":\"active\",\"avatar_url\":\"https://secure.gravatar.com/avatar/2c95a9ee2f890f6c9ccdbf2438c88ca7?s=80&d=identicon\",\"web_url\":\"https://gitlab.com/owner\"},\"resolve_outdated_diff_discussions\":false,\"container_registry_enabled\":true,\"container_expiration_policy\":{\"cadence\":\"1d\",\"enabled\":true,\"keep_n\":10,\"older_than\":\"90d\",\"name_regex\":null,\"name_regex_keep\":null,\"next_run_at\":\"2020-08-12T13:37:06.952Z\"},\"issues_enabled\":true,\"merge_requests_enabled\":true,\"wiki_enabled\":true,\"jobs_enabled\":true,\"snippets_enabled\":true,\"service_desk_enabled\":true,\"service_desk_address\":\"incoming+owner-repo-20467931-issue-@incoming.gitlab.com\",\"can_create_merge_request_in\":true,\"issues_access_level\":\"enabled\",\"repository_access_level\":\"enabled\",\"merge_requests_access_level\":\"enabled\",\"forking_access_level\":\"enabled\",\"wiki_access_level\":\"enabled\",\"builds_access_level\":\"enabled\",\"snippets_access_level\":\"enabled\",\"pages_access_level\":\"private\",\"emails_disabled\":null,\"shared_runners_enabled\":true,\"lfs_enabled\":false,\"creator_id\":4843565,\"import_status\":\"none\",\"import_error\":null,\"open_issues_count\":0,\"runners_token\":\"rfH6LMgv7wf9pMNZQP86\",\"ci_default_git_depth\":50,\"public_jobs\":true,\"build_git_strategy\":\"fetch\",\"build_timeout\":3600,\"auto_cancel_pending_pipelines\":\"enabled\",\"build_coverage_regex\":null,\"ci_config_path\":\"\",\"shared_with_groups\":[],\"only_allow_merge_if_pipeline_succeeds\":false,\"allow_merge_on_skipped_pipeline\":null,\"request_access_enabled\":true,\"only_allow_merge_if_all_discussions_are_resolved\":false,\"remove_source_branch_after_merge\":true,\"printing_merge_request_link_enabled\":true,\"merge_method\":\"merge\",\"suggestion_commit_message\":null,\"auto_devops_enabled\":false,\"auto_devops_deploy_strategy\":\"continuous\",\"autoclose_referenced_issues\":true,\"external_authorization_classification_label\":\"\",\"compliance_frameworks\":[],\"permissions\":{\"project_access\":{\"access_level\":40,\"notification_level\":3},\"group_access\":null}}", "status": 200 }, { @@ -59,14 +61,14 @@ "headers": { "Content-Type": "application/json", "Connection": "keep-alive", - "Set-Cookie": "__cfduid=dc071ddc7dc8558c21679f9f2d7aed4231586687736; expires=Tue, 12-May-20 10:35:36 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Set-Cookie": "__cfduid=d38ecc21745d0639248fcd4b8d7bedbe51597153042; expires=Thu, 10-Sep-20 13:37:22 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Vary": "Accept-Encoding", "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", "Access-Control-Allow-Origin": "*", "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", "Access-Control-Max-Age": "7200", "Cache-Control": "max-age=0, private, must-revalidate", "Link": "; rel=\"first\", ; rel=\"last\"", - "Vary": "Origin", "X-Content-Type-Options": "nosniff", "X-Frame-Options": "SAMEORIGIN", "X-Next-Page": "", @@ -79,9 +81,10 @@ "Referrer-Policy": "strict-origin-when-cross-origin", "GitLab-SV": "localhost", "CF-Cache-Status": "DYNAMIC", + "cf-request-id": "047f5678590000fc6db98e9200000001", "Expect-CT": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "Server": "cloudflare", - "CF-RAY": "582c4d303d1fce6f-LHR", + "CF-RAY": "5c1259d3cfcdfc6d-ZAG", "content-length": "1059" }, "response": "[{\"id\":\"6d51a38aed7139d2117724b1e307657b6ff2d043\",\"name\":\"2016-01-09---Perfecting-the-Art-of-Perfection.md\",\"type\":\"blob\",\"path\":\"content/posts/2016-01-09---Perfecting-the-Art-of-Perfection.md\",\"mode\":\"100644\"},{\"id\":\"d0582dd245a3f408fb3fe2333bf01400007476e9\",\"name\":\"2016-01-12---The-Origins-of-Social-Stationery-Lettering.md\",\"type\":\"blob\",\"path\":\"content/posts/2016-01-12---The-Origins-of-Social-Stationery-Lettering.md\",\"mode\":\"100644\"},{\"id\":\"0eea554365f002d0f1572af9a58522d335a794d5\",\"name\":\"2016-02-02---A-Brief-History-of-Typography.md\",\"type\":\"blob\",\"path\":\"content/posts/2016-02-02---A-Brief-History-of-Typography.md\",\"mode\":\"100644\"},{\"id\":\"44f78c474d04273185a95821426f75affc9b0044\",\"name\":\"2017-18-08---The-Birth-of-Movable-Type.md\",\"type\":\"blob\",\"path\":\"content/posts/2017-18-08---The-Birth-of-Movable-Type.md\",\"mode\":\"100644\"},{\"id\":\"a532f0a9445cdf90a19c6812cff89d1674991774\",\"name\":\"2017-19-08---Humane-Typography-in-the-Digital-Age.md\",\"type\":\"blob\",\"path\":\"content/posts/2017-19-08---Humane-Typography-in-the-Digital-Age.md\",\"mode\":\"100644\"}]", @@ -89,12 +92,12 @@ }, { "method": "GET", - "url": "/api/v4/projects/owner%2Frepo/repository/tree?path=static/media&ref=master&per_page=100&recursive=false", + "url": "/api/v4/projects/owner%2Frepo/repository/tree?path=static/media&per_page=100&ref=master&recursive=false", "headers": { "Content-Type": "application/json", "Content-Length": "2", "Connection": "keep-alive", - "Set-Cookie": "__cfduid=d149a429a9e6079eccd768b32515212cb1586687736; expires=Tue, 12-May-20 10:35:36 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Set-Cookie": "__cfduid=d7e24c07cabe9b89e9d7093488b8a399d1597153042; expires=Thu, 10-Sep-20 13:37:22 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", "Access-Control-Allow-Origin": "*", "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", @@ -115,122 +118,22 @@ "GitLab-SV": "localhost", "Accept-Ranges": "bytes", "CF-Cache-Status": "DYNAMIC", + "cf-request-id": "047f56786f0000fc61261a5200000001", "Expect-CT": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "Server": "cloudflare", - "CF-RAY": "582c4d30387235a0-LHR" + "CF-RAY": "5c1259d3eda5fc61-ZAG" }, "response": "[]", "status": 200 }, - { - "method": "GET", - "url": "/api/v4/projects/owner%2Frepo/repository/commits?path=content/posts/2016-02-02---A-Brief-History-of-Typography.md&ref_name=master", - "headers": { - "Content-Type": "application/json", - "Connection": "keep-alive", - "Set-Cookie": "__cfduid=d31e4db3d0f4d32971b2dd040e27388db1586687736; expires=Tue, 12-May-20 10:35:36 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", - "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", - "Access-Control-Allow-Origin": "*", - "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", - "Access-Control-Max-Age": "7200", - "Cache-Control": "max-age=0, private, must-revalidate", - "Link": "; rel=\"first\", ; rel=\"last\"", - "Vary": "Origin", - "X-Content-Type-Options": "nosniff", - "X-Frame-Options": "SAMEORIGIN", - "X-Next-Page": "", - "X-Page": "1", - "X-Per-Page": "20", - "X-Prev-Page": "", - "X-Total": "1", - "X-Total-Pages": "1", - "Strict-Transport-Security": "max-age=31536000", - "Referrer-Policy": "strict-origin-when-cross-origin", - "GitLab-SV": "localhost", - "CF-Cache-Status": "DYNAMIC", - "Expect-CT": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", - "Server": "cloudflare", - "CF-RAY": "582c4d32a9f2f42f-LHR", - "content-length": "591" - }, - "response": "[{\"id\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"short_id\":\"2bc3fa39\",\"created_at\":\"2019-07-24T10:45:32.000+03:00\",\"parent_ids\":[],\"title\":\"initial commit\",\"message\":\"initial commit\\n\",\"author_name\":\"owner\",\"author_email\":\"owner@users.noreply.github.com\",\"authored_date\":\"2019-07-24T10:45:32.000+03:00\",\"committer_name\":\"owner\",\"committer_email\":\"owner@users.noreply.github.com\",\"committed_date\":\"2019-07-24T10:45:32.000+03:00\",\"web_url\":\"https://gitlab.com/owner/repo/-/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\"}]", - "status": 200 - }, - { - "method": "GET", - "url": "/api/v4/projects/owner%2Frepo/repository/commits?path=content/posts/2016-01-09---Perfecting-the-Art-of-Perfection.md&ref_name=master", - "headers": { - "Content-Type": "application/json", - "Connection": "keep-alive", - "Set-Cookie": "__cfduid=d38c1a8e952900e2e6154ab044fa54e531586687736; expires=Tue, 12-May-20 10:35:36 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", - "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", - "Access-Control-Allow-Origin": "*", - "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", - "Access-Control-Max-Age": "7200", - "Cache-Control": "max-age=0, private, must-revalidate", - "Link": "; rel=\"first\", ; rel=\"last\"", - "Vary": "Origin", - "X-Content-Type-Options": "nosniff", - "X-Frame-Options": "SAMEORIGIN", - "X-Next-Page": "", - "X-Page": "1", - "X-Per-Page": "20", - "X-Prev-Page": "", - "X-Total": "1", - "X-Total-Pages": "1", - "Strict-Transport-Security": "max-age=31536000", - "Referrer-Policy": "strict-origin-when-cross-origin", - "GitLab-SV": "localhost", - "CF-Cache-Status": "DYNAMIC", - "Expect-CT": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", - "Server": "cloudflare", - "CF-RAY": "582c4d32af8af40f-LHR", - "content-length": "591" - }, - "response": "[{\"id\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"short_id\":\"2bc3fa39\",\"created_at\":\"2019-07-24T10:45:32.000+03:00\",\"parent_ids\":[],\"title\":\"initial commit\",\"message\":\"initial commit\\n\",\"author_name\":\"owner\",\"author_email\":\"owner@users.noreply.github.com\",\"authored_date\":\"2019-07-24T10:45:32.000+03:00\",\"committer_name\":\"owner\",\"committer_email\":\"owner@users.noreply.github.com\",\"committed_date\":\"2019-07-24T10:45:32.000+03:00\",\"web_url\":\"https://gitlab.com/owner/repo/-/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\"}]", - "status": 200 - }, - { - "method": "GET", - "url": "/api/v4/projects/owner%2Frepo/repository/commits?path=content/posts/2016-01-12---The-Origins-of-Social-Stationery-Lettering.md&ref_name=master", - "headers": { - "Content-Type": "application/json", - "Connection": "keep-alive", - "Set-Cookie": "__cfduid=d32b40561f408809767e1ff684781939e1586687736; expires=Tue, 12-May-20 10:35:36 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", - "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", - "Access-Control-Allow-Origin": "*", - "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", - "Access-Control-Max-Age": "7200", - "Cache-Control": "max-age=0, private, must-revalidate", - "Link": "; rel=\"first\", ; rel=\"last\"", - "Vary": "Origin", - "X-Content-Type-Options": "nosniff", - "X-Frame-Options": "SAMEORIGIN", - "X-Next-Page": "", - "X-Page": "1", - "X-Per-Page": "20", - "X-Prev-Page": "", - "X-Total": "1", - "X-Total-Pages": "1", - "Strict-Transport-Security": "max-age=31536000", - "Referrer-Policy": "strict-origin-when-cross-origin", - "GitLab-SV": "localhost", - "CF-Cache-Status": "DYNAMIC", - "Expect-CT": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", - "Server": "cloudflare", - "CF-RAY": "582c4d32ab2edc33-LHR", - "content-length": "591" - }, - "response": "[{\"id\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"short_id\":\"2bc3fa39\",\"created_at\":\"2019-07-24T10:45:32.000+03:00\",\"parent_ids\":[],\"title\":\"initial commit\",\"message\":\"initial commit\\n\",\"author_name\":\"owner\",\"author_email\":\"owner@users.noreply.github.com\",\"authored_date\":\"2019-07-24T10:45:32.000+03:00\",\"committer_name\":\"owner\",\"committer_email\":\"owner@users.noreply.github.com\",\"committed_date\":\"2019-07-24T10:45:32.000+03:00\",\"web_url\":\"https://gitlab.com/owner/repo/-/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\"}]", - "status": 200 - }, { "method": "GET", "url": "/api/v4/projects/owner%2Frepo/repository/files/content%2Fposts%2F2016-01-12---The-Origins-of-Social-Stationery-Lettering.md/raw?ref=master", "headers": { "Content-Type": "text/plain; charset=utf-8", "Connection": "keep-alive", - "Set-Cookie": "__cfduid=d428793da90ea55046ed65393e4448f0e1586687736; expires=Tue, 12-May-20 10:35:36 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Set-Cookie": "__cfduid=def2314fa379aacd4d9cf5fd86613c2271597153042; expires=Thu, 10-Sep-20 13:37:22 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Vary": "Accept-Encoding", "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", "Access-Control-Allow-Origin": "*", "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", @@ -239,7 +142,6 @@ "Content-Disposition": "inline; filename=\"2016-01-12---The-Origins-of-Social-Stationery-Lettering.md\"; filename*=UTF-8''2016-01-12---The-Origins-of-Social-Stationery-Lettering.md", "Expires": "Fri, 01 Jan 1990 00:00:00 GMT", "Pragma": "no-cache", - "Vary": "Origin", "X-Content-Type-Options": "nosniff", "X-Frame-Options": "SAMEORIGIN", "X-Gitlab-Blob-Id": "d0582dd245a3f408fb3fe2333bf01400007476e9", @@ -255,60 +157,23 @@ "Referrer-Policy": "strict-origin-when-cross-origin", "GitLab-SV": "localhost", "CF-Cache-Status": "DYNAMIC", + "cf-request-id": "047f5679960000fc597b0ab200000001", "Expect-CT": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "Server": "cloudflare", - "CF-RAY": "582c4d32ab42e660-LHR", + "CF-RAY": "5c1259d5bfa7fc59-ZAG", "content-length": "2565" }, "response": "---\ntitle: The Origins of Social Stationery Lettering\ndate: \"2016-12-01T22:40:32.169Z\"\ntemplate: \"post\"\ndraft: false\ncategory: \"Design Culture\"\ndescription: \"Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante.\"\ncanonical: ''\n---\n\n**Pellentesque habitant morbi tristique** senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. *Aenean ultricies mi vitae est.* Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. \n\nVestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. [Donec non enim](#) in turpis pulvinar facilisis.\n\n![Nulla faucibus vestibulum eros in tempus. Vestibulum tempor imperdiet velit nec dapibus](/media/image-3.jpg)\n\n## Header Level 2\n\n+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\n+ Aliquam tincidunt mauris eu risus.\n\nDonec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. \n\n
\n\t
\n\t\t

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.

\n\t\t
\n\t\t\t— Aliquam tincidunt mauris eu risus.\n\t\t
\n\t
\n
\n\n### Header Level 3\n\n+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\n+ Aliquam tincidunt mauris eu risus.\n\nPellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra.\n\n```css\n#header h1 a {\n display: block;\n width: 300px;\n height: 80px;\n}\n```\n\nDonec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus.", "status": 200 }, - { - "method": "GET", - "url": "/api/v4/projects/owner%2Frepo/repository/files/content%2Fposts%2F2016-02-02---A-Brief-History-of-Typography.md/raw?ref=master", - "headers": { - "Content-Type": "text/plain; charset=utf-8", - "Connection": "keep-alive", - "Set-Cookie": "__cfduid=d001d8d4792ebb4dad111a979fa9f88051586687736; expires=Tue, 12-May-20 10:35:36 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", - "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", - "Access-Control-Allow-Origin": "*", - "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", - "Access-Control-Max-Age": "7200", - "Cache-Control": "max-age=0, private, must-revalidate, no-store, no-cache", - "Content-Disposition": "inline; filename=\"2016-02-02---A-Brief-History-of-Typography.md\"; filename*=UTF-8''2016-02-02---A-Brief-History-of-Typography.md", - "Expires": "Fri, 01 Jan 1990 00:00:00 GMT", - "Pragma": "no-cache", - "Vary": "Origin", - "X-Content-Type-Options": "nosniff", - "X-Frame-Options": "SAMEORIGIN", - "X-Gitlab-Blob-Id": "0eea554365f002d0f1572af9a58522d335a794d5", - "X-Gitlab-Commit-Id": "ac8bcd7244d386040a77a4bdec472138547cc38a", - "X-Gitlab-Content-Sha256": "5ef3a4f55b0130f04866489f8304fd8db408351abe0bd10a9e8f17b167341591", - "X-Gitlab-Encoding": "base64", - "X-Gitlab-File-Name": "2016-02-02---A-Brief-History-of-Typography.md", - "X-Gitlab-File-Path": "content/posts/2016-02-02---A-Brief-History-of-Typography.md", - "X-Gitlab-Last-Commit-Id": "2bc3fa39d8adb9e008e52793854338399fc6e4ad", - "X-Gitlab-Ref": "master", - "X-Gitlab-Size": "2786", - "Strict-Transport-Security": "max-age=31536000", - "Referrer-Policy": "strict-origin-when-cross-origin", - "GitLab-SV": "localhost", - "CF-Cache-Status": "DYNAMIC", - "Expect-CT": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", - "Server": "cloudflare", - "CF-RAY": "582c4d32ac4fdbef-LHR", - "content-length": "2786" - }, - "response": "---\ntitle: \"A Brief History of Typography\"\ndate: \"2016-02-02T22:40:32.169Z\"\ntemplate: \"post\"\ndraft: false\ncategory: \"Design Inspiration\"\ntags:\n - \"Linotype\"\n - \"Monotype\"\n - \"History of typography\"\n - \"Helvetica\"\ndescription: \"Morbi in sem quis dui placerat ornare. Pellentesque odio nisi, euismod in, pharetra a, ultricies in, diam. Sed arcu. Cras consequat.\"\ncanonical: ''\n---\n\n**Pellentesque habitant morbi tristique** senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. *Aenean ultricies mi vitae est.* Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. \n\nVestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. [Donec non enim](#) in turpis pulvinar facilisis.\n\n![Nulla faucibus vestibulum eros in tempus. Vestibulum tempor imperdiet velit nec dapibus](/media/image-0.jpg)\n\n## Header Level 2\n\n+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\n+ Aliquam tincidunt mauris eu risus.\n\nDonec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. \n\n
\n\t
\n\t\t

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.

\n\t\t
\n\t\t\t— Aliquam tincidunt mauris eu risus.\n\t\t
\n\t
\n
\n\n### Header Level 3\n\n+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\n+ Aliquam tincidunt mauris eu risus.\n\nPellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra.\n\n```css\n#header h1 a {\n display: block;\n width: 300px;\n height: 80px;\n}\n```\n\nVestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus.", - "status": 200 - }, { "method": "GET", "url": "/api/v4/projects/owner%2Frepo/repository/files/content%2Fposts%2F2016-01-09---Perfecting-the-Art-of-Perfection.md/raw?ref=master", "headers": { "Content-Type": "text/plain; charset=utf-8", "Connection": "keep-alive", - "Set-Cookie": "__cfduid=d9f1ce28562ecad4b9c2224bef037c1971586687736; expires=Tue, 12-May-20 10:35:36 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Set-Cookie": "__cfduid=d8b2ad0788b0a1a0e9ea00b163d8467a11597153042; expires=Thu, 10-Sep-20 13:37:22 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Vary": "Accept-Encoding", "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", "Access-Control-Allow-Origin": "*", "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", @@ -317,7 +182,6 @@ "Content-Disposition": "inline; filename=\"2016-01-09---Perfecting-the-Art-of-Perfection.md\"; filename*=UTF-8''2016-01-09---Perfecting-the-Art-of-Perfection.md", "Expires": "Fri, 01 Jan 1990 00:00:00 GMT", "Pragma": "no-cache", - "Vary": "Origin", "X-Content-Type-Options": "nosniff", "X-Frame-Options": "SAMEORIGIN", "X-Gitlab-Blob-Id": "6d51a38aed7139d2117724b1e307657b6ff2d043", @@ -333,53 +197,29 @@ "Referrer-Policy": "strict-origin-when-cross-origin", "GitLab-SV": "localhost", "CF-Cache-Status": "DYNAMIC", + "cf-request-id": "047f5679920000fc654825a200000001", "Expect-CT": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "Server": "cloudflare", - "CF-RAY": "582c4d32aecedbe7-LHR", + "CF-RAY": "5c1259d5ba0afc65-ZAG", "content-length": "1707" }, "response": "---\ntitle: Perfecting the Art of Perfection\ndate: \"2016-09-01T23:46:37.121Z\"\ntemplate: \"post\"\ndraft: false\ncategory: \"Design Inspiration\"\ntags:\n - \"Handwriting\"\n - \"Learning to write\"\ndescription: \"Quisque cursus, metus vitae pharetra auctor, sem massa mattis sem, at interdum magna augue eget diam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Morbi lacinia molestie dui. Praesent blandit dolor. Sed non quam. In vel mi sit amet augue congue elementum.\"\ncanonical: ''\n---\n\nQuisque cursus, metus vitae pharetra auctor, sem massa mattis sem, at interdum magna augue eget diam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Morbi lacinia molestie dui. Praesent blandit dolor. Sed non quam. In vel mi sit amet augue congue elementum.\n\n![Nulla faucibus vestibulum eros in tempus. Vestibulum tempor imperdiet velit nec dapibus](/media/image-2.jpg)\n\nPellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis. \n\nPraesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus.", "status": 200 }, - { - "method": "HEAD", - "url": "/api/v4/projects/owner%2Frepo/repository/files/static%2Fmedia%2Fnetlify.png?ref=master", - "headers": { - "Content-Type": "application/json", - "Content-Length": "32", - "Connection": "keep-alive", - "Set-Cookie": "__cfduid=d4d858086120850e05d4794ad2615d2e51586687737; expires=Tue, 12-May-20 10:35:37 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", - "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", - "Access-Control-Allow-Origin": "*", - "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", - "Access-Control-Max-Age": "7200", - "Cache-Control": "no-cache", - "Vary": "Origin", - "X-Content-Type-Options": "nosniff", - "X-Frame-Options": "SAMEORIGIN", - "GitLab-SV": "localhost", - "CF-Cache-Status": "DYNAMIC", - "Expect-CT": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", - "Server": "cloudflare", - "CF-RAY": "582c4d355b61dc1f-LHR" - }, - "response": null, - "status": 404 - }, { "method": "GET", - "url": "/api/v4/projects/owner%2Frepo/repository/commits?path=content/posts/2017-18-08---The-Birth-of-Movable-Type.md&ref_name=master", + "url": "/api/v4/projects/owner%2Frepo/repository/commits?ref_name=master&path=content/posts/2016-01-09---Perfecting-the-Art-of-Perfection.md", "headers": { "Content-Type": "application/json", "Connection": "keep-alive", - "Set-Cookie": "__cfduid=d4efb4e9d24e83626623c5a5364b3d3391586687737; expires=Tue, 12-May-20 10:35:37 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Set-Cookie": "__cfduid=dbeed2c784e1e44bb297b198140bf67981597153042; expires=Thu, 10-Sep-20 13:37:22 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Vary": "Accept-Encoding", "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", "Access-Control-Allow-Origin": "*", "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", "Access-Control-Max-Age": "7200", "Cache-Control": "max-age=0, private, must-revalidate", - "Link": "; rel=\"first\", ; rel=\"last\"", - "Vary": "Origin", + "Link": "; rel=\"first\", ; rel=\"last\"", "X-Content-Type-Options": "nosniff", "X-Frame-Options": "SAMEORIGIN", "X-Next-Page": "", @@ -392,43 +232,10 @@ "Referrer-Policy": "strict-origin-when-cross-origin", "GitLab-SV": "localhost", "CF-Cache-Status": "DYNAMIC", + "cf-request-id": "047f5679a6000090f12b190200000001", "Expect-CT": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "Server": "cloudflare", - "CF-RAY": "582c4d355a46e678-LHR", - "content-length": "591" - }, - "response": "[{\"id\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"short_id\":\"2bc3fa39\",\"created_at\":\"2019-07-24T10:45:32.000+03:00\",\"parent_ids\":[],\"title\":\"initial commit\",\"message\":\"initial commit\\n\",\"author_name\":\"owner\",\"author_email\":\"owner@users.noreply.github.com\",\"authored_date\":\"2019-07-24T10:45:32.000+03:00\",\"committer_name\":\"owner\",\"committer_email\":\"owner@users.noreply.github.com\",\"committed_date\":\"2019-07-24T10:45:32.000+03:00\",\"web_url\":\"https://gitlab.com/owner/repo/-/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\"}]", - "status": 200 - }, - { - "method": "GET", - "url": "/api/v4/projects/owner%2Frepo/repository/commits?path=content/posts/2017-19-08---Humane-Typography-in-the-Digital-Age.md&ref_name=master", - "headers": { - "Content-Type": "application/json", - "Connection": "keep-alive", - "Set-Cookie": "__cfduid=de46ae71f0b8fc037584175b4d1debb281586687737; expires=Tue, 12-May-20 10:35:37 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", - "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", - "Access-Control-Allow-Origin": "*", - "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", - "Access-Control-Max-Age": "7200", - "Cache-Control": "max-age=0, private, must-revalidate", - "Link": "; rel=\"first\", ; rel=\"last\"", - "Vary": "Origin", - "X-Content-Type-Options": "nosniff", - "X-Frame-Options": "SAMEORIGIN", - "X-Next-Page": "", - "X-Page": "1", - "X-Per-Page": "20", - "X-Prev-Page": "", - "X-Total": "1", - "X-Total-Pages": "1", - "Strict-Transport-Security": "max-age=31536000", - "Referrer-Policy": "strict-origin-when-cross-origin", - "GitLab-SV": "localhost", - "CF-Cache-Status": "DYNAMIC", - "Expect-CT": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", - "Server": "cloudflare", - "CF-RAY": "582c4d355f3ece8f-LHR", + "CF-RAY": "5c1259d5d9d090f1-ZAG", "content-length": "591" }, "response": "[{\"id\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"short_id\":\"2bc3fa39\",\"created_at\":\"2019-07-24T10:45:32.000+03:00\",\"parent_ids\":[],\"title\":\"initial commit\",\"message\":\"initial commit\\n\",\"author_name\":\"owner\",\"author_email\":\"owner@users.noreply.github.com\",\"authored_date\":\"2019-07-24T10:45:32.000+03:00\",\"committer_name\":\"owner\",\"committer_email\":\"owner@users.noreply.github.com\",\"committed_date\":\"2019-07-24T10:45:32.000+03:00\",\"web_url\":\"https://gitlab.com/owner/repo/-/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\"}]", @@ -440,7 +247,7 @@ "headers": { "Content-Type": "text/plain; charset=utf-8", "Connection": "keep-alive", - "Set-Cookie": "__cfduid=d68a1f88a82b23afd260f3dda6e2228a41586687737; expires=Tue, 12-May-20 10:35:37 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Set-Cookie": "__cfduid=d52f253216dd96202e79b6bb4b524d91f1597153042; expires=Thu, 10-Sep-20 13:37:22 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", "Vary": "Accept-Encoding", "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", "Access-Control-Allow-Origin": "*", @@ -465,21 +272,168 @@ "Referrer-Policy": "strict-origin-when-cross-origin", "GitLab-SV": "localhost", "CF-Cache-Status": "DYNAMIC", + "cf-request-id": "047f5679b00000fc71b72b8200000001", "Expect-CT": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "Server": "cloudflare", - "CF-RAY": "582c4d355e1cdbdf-LHR", + "CF-RAY": "5c1259d5ead4fc71-ZAG", "content-length": "16071" }, "response": "---\ntitle: \"Johannes Gutenberg: The Birth of Movable Type\"\ndate: \"2017-08-18T22:12:03.284Z\"\ntemplate: \"post\"\ndraft: false\ncategory: \"Typography\"\ntags:\n - \"Open source\"\n - \"Gatsby\"\n - \"Typography\"\ndescription: \"German inventor Johannes Gutenberg developed a method of movable type and used it to create one of the western world’s first major printed books, the “Forty–Two–Line” Bible.\"\ncanonical: ''\n---\n\nGerman inventor Johannes Gutenberg developed a method of movable type and used it to create one of the western world’s first major printed books, the “Forty–Two–Line” Bible.\n\n**Johannes Gensfleisch zur Laden zum Gutenberg** (c. 1398 – 1468) was a German blacksmith, goldsmith, printer, and publisher who introduced printing to Europe. His invention of mechanical movable type printing started the Printing Revolution and is widely regarded as the most important event of the modern period. It played a key role in the development of the Renaissance, Reformation, the Age of Enlightenment, and the Scientific revolution and laid the material basis for the modern knowledge-based economy and the spread of learning to the masses.\n\n
\n\t\"Gutenberg\"\n\t
Johannes Gutenberg
\n
\n\nWith his invention of the printing press, Gutenberg was the first European to use movable type printing, in around 1439. Among his many contributions to printing are: the invention of a process for mass-producing movable type; the use of oil-based ink; and the use of a wooden printing press similar to the agricultural screw presses of the period. His truly epochal invention was the combination of these elements into a practical system that allowed the mass production of printed books and was economically viable for printers and readers alike. Gutenberg's method for making type is traditionally considered to have included a type metal alloy and a hand mould for casting type. The alloy was a mixture of lead, tin, and antimony that melted at a relatively low temperature for faster and more economical casting, cast well, and created a durable type.\n\nIn Renaissance Europe, the arrival of mechanical movable type printing introduced the era of mass communication which permanently altered the structure of society. The relatively unrestricted circulation of information — including revolutionary ideas — transcended borders, captured the masses in the Reformation and threatened the power of political and religious authorities; the sharp increase in literacy broke the monopoly of the literate elite on education and learning and bolstered the emerging middle class. Across Europe, the increasing cultural self-awareness of its people led to the rise of proto-nationalism, accelerated by the flowering of the European vernacular languages to the detriment of Latin's status as lingua franca. In the 19th century, the replacement of the hand-operated Gutenberg-style press by steam-powered rotary presses allowed printing on an industrial scale, while Western-style printing was adopted all over the world, becoming practically the sole medium for modern bulk printing.\n\nThe use of movable type was a marked improvement on the handwritten manuscript, which was the existing method of book production in Europe, and upon woodblock printing, and revolutionized European book-making. Gutenberg's printing technology spread rapidly throughout Europe and later the world.\n\nHis major work, the Gutenberg Bible (also known as the 42-line Bible), has been acclaimed for its high aesthetic and technical quality.\n\n## Printing Press\n\nAround 1439, Gutenberg was involved in a financial misadventure making polished metal mirrors (which were believed to capture holy light from religious relics) for sale to pilgrims to Aachen: in 1439 the city was planning to exhibit its collection of relics from Emperor Charlemagne but the event was delayed by one year due to a severe flood and the capital already spent could not be repaid. When the question of satisfying the investors came up, Gutenberg is said to have promised to share a “secret”. It has been widely speculated that this secret may have been the idea of printing with movable type. Also around 1439–1440, the Dutch Laurens Janszoon Coster came up with the idea of printing. Legend has it that the idea came to him “like a ray of light”.\n\n
\n\t\"Early\n\t
Early wooden printing press as depicted in 1568.
\n
\n\nUntil at least 1444 he lived in Strasbourg, most likely in the St. Arbogast parish. It was in Strasbourg in 1440 that Gutenberg is said to have perfected and unveiled the secret of printing based on his research, mysteriously entitled Kunst und Aventur (art and enterprise). It is not clear what work he was engaged in, or whether some early trials with printing from movable type may have been conducted there. After this, there is a gap of four years in the record. In 1448, he was back in Mainz, where he took out a loan from his brother-in-law Arnold Gelthus, quite possibly for a printing press or related paraphernalia. By this date, Gutenberg may have been familiar with intaglio printing; it is claimed that he had worked on copper engravings with an artist known as the Master of Playing Cards.\n\nBy 1450, the press was in operation, and a German poem had been printed, possibly the first item to be printed there. Gutenberg was able to convince the wealthy moneylender Johann Fust for a loan of 800 guilders. Peter Schöffer, who became Fust’s son-in-law, also joined the enterprise. Schöffer had worked as a scribe in Paris and is believed to have designed some of the first typefaces.\n\n
\n\t
\n\t\t

All that has been written to me about that marvelous man seen at Frankfurt is true. I have not seen complete Bibles but only a number of quires of various books of the Bible. The script was very neat and legible, not at all difficult to follow—your grace would be able to read it without effort, and indeed without glasses.

\n\t\t
\n\t\t\t—Future pope Pius II in a letter to Cardinal Carvajal, March 1455\n\t\t
\n\t
\n
\n\nGutenberg's workshop was set up at Hof Humbrecht, a property belonging to a distant relative. It is not clear when Gutenberg conceived the Bible project, but for this he borrowed another 800 guilders from Fust, and work commenced in 1452. At the same time, the press was also printing other, more lucrative texts (possibly Latin grammars). There is also some speculation that there may have been two presses, one for the pedestrian texts, and one for the Bible. One of the profit-making enterprises of the new press was the printing of thousands of indulgences for the church, documented from 1454–55.\n\nIn 1455 Gutenberg completed his 42-line Bible, known as the Gutenberg Bible. About 180 copies were printed, most on paper and some on vellum.\n\n## Court Case\n\nSome time in 1456, there was a dispute between Gutenberg and Fust, and Fust demanded his money back, accusing Gutenberg of misusing the funds. Meanwhile the expenses of the Bible project had proliferated, and Gutenberg's debt now exceeded 20,000 guilders. Fust sued at the archbishop's court. A November 1455 legal document records that there was a partnership for a \"project of the books,\" the funds for which Gutenberg had used for other purposes, according to Fust. The court decided in favor of Fust, giving him control over the Bible printing workshop and half of all printed Bibles.\n\nThus Gutenberg was effectively bankrupt, but it appears he retained (or re-started) a small printing shop, and participated in the printing of a Bible in the town of Bamberg around 1459, for which he seems at least to have supplied the type. But since his printed books never carry his name or a date, it is difficult to be certain, and there is consequently a considerable scholarly debate on this subject. It is also possible that the large Catholicon dictionary, 300 copies of 754 pages, printed in Mainz in 1460, may have been executed in his workshop.\n\nMeanwhile, the Fust–Schöffer shop was the first in Europe to bring out a book with the printer's name and date, the Mainz Psalter of August 1457, and while proudly proclaiming the mechanical process by which it had been produced, it made no mention of Gutenberg.\n\n## Later Life\n\nIn 1462, during a conflict between two archbishops, Mainz was sacked by archbishop Adolph von Nassau, and Gutenberg was exiled. An old man by now, he moved to Eltville where he may have initiated and supervised a new printing press belonging to the brothers Bechtermünze.\n\nIn January 1465, Gutenberg's achievements were recognized and he was given the title Hofmann (gentleman of the court) by von Nassau. This honor included a stipend, an annual court outfit, as well as 2,180 litres of grain and 2,000 litres of wine tax-free. It is believed he may have moved back to Mainz around this time, but this is not certain.\n\n***\n\nGutenberg died in 1468 and was buried in the Franciscan church at Mainz, his contributions largely unknown. This church and the cemetery were later destroyed, and Gutenberg's grave is now lost.\n\nIn 1504, he was mentioned as the inventor of typography in a book by Professor Ivo Wittig. It was not until 1567 that the first portrait of Gutenberg, almost certainly an imaginary reconstruction, appeared in Heinrich Pantaleon's biography of famous Germans.\n\n## Printing Method With Movable Type\n\nGutenberg's early printing process, and what tests he may have made with movable type, are not known in great detail. His later Bibles were printed in such a way as to have required large quantities of type, some estimates suggesting as many as 100,000 individual sorts. Setting each page would take, perhaps, half a day, and considering all the work in loading the press, inking the type, pulling the impressions, hanging up the sheets, distributing the type, etc., it is thought that the Gutenberg–Fust shop might have employed as many as 25 craftsmen.\n\n![Movable metal type, and composing stick, descended from Gutenberg's press. Photo by Willi Heidelbach. Licensed under CC BY 2.5](/media/movable-type.jpg)\n\n*Movable metal type, and composing stick, descended from Gutenberg's press. Photo by Willi Heidelbach. Licensed under CC BY 2.5*\n\nGutenberg's technique of making movable type remains unclear. In the following decades, punches and copper matrices became standardized in the rapidly disseminating printing presses across Europe. Whether Gutenberg used this sophisticated technique or a somewhat primitive version has been the subject of considerable debate.\n\nIn the standard process of making type, a hard metal punch (made by punchcutting, with the letter carved back to front) is hammered into a softer copper bar, creating a matrix. This is then placed into a hand-held mould and a piece of type, or \"sort\", is cast by filling the mould with molten type-metal; this cools almost at once, and the resulting piece of type can be removed from the mould. The matrix can be reused to create hundreds, or thousands, of identical sorts so that the same character appearing anywhere within the book will appear very uniform, giving rise, over time, to the development of distinct styles of typefaces or fonts. After casting, the sorts are arranged into type-cases, and used to make up pages which are inked and printed, a procedure which can be repeated hundreds, or thousands, of times. The sorts can be reused in any combination, earning the process the name of “movable type”.\n\nThe invention of the making of types with punch, matrix and mold has been widely attributed to Gutenberg. However, recent evidence suggests that Gutenberg's process was somewhat different. If he used the punch and matrix approach, all his letters should have been nearly identical, with some variations due to miscasting and inking. However, the type used in Gutenberg's earliest work shows other variations.\n\n
\n\t
\n\t\t

It is a press, certainly, but a press from which shall flow in inexhaustible streams… Through it, god will spread his word.

\n\t\t
\n\t\t\t—Johannes Gutenberg\n\t\t
\n\t
\n
\n\nIn 2001, the physicist Blaise Agüera y Arcas and Princeton librarian Paul Needham, used digital scans of a Papal bull in the Scheide Library, Princeton, to carefully compare the same letters (types) appearing in different parts of the printed text. The irregularities in Gutenberg's type, particularly in simple characters such as the hyphen, suggested that the variations could not have come from either ink smear or from wear and damage on the pieces of metal on the types themselves. While some identical types are clearly used on other pages, other variations, subjected to detailed image analysis, suggested that they could not have been produced from the same matrix. Transmitted light pictures of the page also appeared to reveal substructures in the type that could not arise from traditional punchcutting techniques. They hypothesized that the method may have involved impressing simple shapes to create alphabets in “cuneiform” style in a matrix made of some soft material, perhaps sand. Casting the type would destroy the mould, and the matrix would need to be recreated to make each additional sort. This could explain the variations in the type, as well as the substructures observed in the printed images.\n\nThus, they feel that “the decisive factor for the birth of typography”, the use of reusable moulds for casting type, might have been a more progressive process than was previously thought. They suggest that the additional step of using the punch to create a mould that could be reused many times was not taken until twenty years later, in the 1470s. Others have not accepted some or all of their suggestions, and have interpreted the evidence in other ways, and the truth of the matter remains very uncertain.\n\nA 1568 history by Hadrianus Junius of Holland claims that the basic idea of the movable type came to Gutenberg from Laurens Janszoon Coster via Fust, who was apprenticed to Coster in the 1430s and may have brought some of his equipment from Haarlem to Mainz. While Coster appears to have experimented with moulds and castable metal type, there is no evidence that he had actually printed anything with this technology. He was an inventor and a goldsmith. However, there is one indirect supporter of the claim that Coster might be the inventor. The author of the Cologne Chronicle of 1499 quotes Ulrich Zell, the first printer of Cologne, that printing was performed in Mainz in 1450, but that some type of printing of lower quality had previously occurred in the Netherlands. However, the chronicle does not mention the name of Coster, while it actually credits Gutenberg as the \"first inventor of printing\" in the very same passage (fol. 312). The first securely dated book by Dutch printers is from 1471, and the Coster connection is today regarded as a mere legend.\n\nThe 19th century printer and typefounder Fournier Le Jeune suggested that Gutenberg might not have been using type cast with a reusable matrix, but possibly wooden types that were carved individually. A similar suggestion was made by Nash in 2004. This remains possible, albeit entirely unproven.\n\nIt has also been questioned whether Gutenberg used movable types at all. In 2004, Italian professor Bruno Fabbiani claimed that examination of the 42-line Bible revealed an overlapping of letters, suggesting that Gutenberg did not in fact use movable type (individual cast characters) but rather used whole plates made from a system somewhat like a modern typewriter, whereby the letters were stamped successively into the plate and then printed. However, most specialists regard the occasional overlapping of type as caused by paper movement over pieces of type of slightly unequal height.", "status": 200 }, + { + "method": "GET", + "url": "/api/v4/projects/owner%2Frepo/repository/commits?ref_name=master&path=content/posts/2016-01-12---The-Origins-of-Social-Stationery-Lettering.md", + "headers": { + "Content-Type": "application/json", + "Connection": "keep-alive", + "Set-Cookie": "__cfduid=def2314fa379aacd4d9cf5fd86613c2271597153042; expires=Thu, 10-Sep-20 13:37:22 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Vary": "Accept-Encoding", + "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", + "Access-Control-Allow-Origin": "*", + "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", + "Access-Control-Max-Age": "7200", + "Cache-Control": "max-age=0, private, must-revalidate", + "Link": "; rel=\"first\", ; rel=\"last\"", + "X-Content-Type-Options": "nosniff", + "X-Frame-Options": "SAMEORIGIN", + "X-Next-Page": "", + "X-Page": "1", + "X-Per-Page": "20", + "X-Prev-Page": "", + "X-Total": "1", + "X-Total-Pages": "1", + "Strict-Transport-Security": "max-age=31536000", + "Referrer-Policy": "strict-origin-when-cross-origin", + "GitLab-SV": "localhost", + "CF-Cache-Status": "DYNAMIC", + "cf-request-id": "047f5679a70000fc597d043200000001", + "Expect-CT": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", + "Server": "cloudflare", + "CF-RAY": "5c1259d5dfe3fc59-ZAG", + "content-length": "591" + }, + "response": "[{\"id\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"short_id\":\"2bc3fa39\",\"created_at\":\"2019-07-24T10:45:32.000+03:00\",\"parent_ids\":[],\"title\":\"initial commit\",\"message\":\"initial commit\\n\",\"author_name\":\"owner\",\"author_email\":\"owner@users.noreply.github.com\",\"authored_date\":\"2019-07-24T10:45:32.000+03:00\",\"committer_name\":\"owner\",\"committer_email\":\"owner@users.noreply.github.com\",\"committed_date\":\"2019-07-24T10:45:32.000+03:00\",\"web_url\":\"https://gitlab.com/owner/repo/-/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\"}]", + "status": 200 + }, + { + "method": "GET", + "url": "/api/v4/projects/owner%2Frepo/repository/files/content%2Fposts%2F2016-02-02---A-Brief-History-of-Typography.md/raw?ref=master", + "headers": { + "Content-Type": "text/plain; charset=utf-8", + "Connection": "keep-alive", + "Set-Cookie": "__cfduid=d9efc0dd36a3d89e0b331b540ebd475061597153042; expires=Thu, 10-Sep-20 13:37:22 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Vary": "Accept-Encoding", + "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", + "Access-Control-Allow-Origin": "*", + "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", + "Access-Control-Max-Age": "7200", + "Cache-Control": "max-age=0, private, must-revalidate, no-store, no-cache", + "Content-Disposition": "inline; filename=\"2016-02-02---A-Brief-History-of-Typography.md\"; filename*=UTF-8''2016-02-02---A-Brief-History-of-Typography.md", + "Expires": "Fri, 01 Jan 1990 00:00:00 GMT", + "Pragma": "no-cache", + "X-Content-Type-Options": "nosniff", + "X-Frame-Options": "SAMEORIGIN", + "X-Gitlab-Blob-Id": "0eea554365f002d0f1572af9a58522d335a794d5", + "X-Gitlab-Commit-Id": "ac8bcd7244d386040a77a4bdec472138547cc38a", + "X-Gitlab-Content-Sha256": "5ef3a4f55b0130f04866489f8304fd8db408351abe0bd10a9e8f17b167341591", + "X-Gitlab-Encoding": "base64", + "X-Gitlab-File-Name": "2016-02-02---A-Brief-History-of-Typography.md", + "X-Gitlab-File-Path": "content/posts/2016-02-02---A-Brief-History-of-Typography.md", + "X-Gitlab-Last-Commit-Id": "2bc3fa39d8adb9e008e52793854338399fc6e4ad", + "X-Gitlab-Ref": "master", + "X-Gitlab-Size": "2786", + "Strict-Transport-Security": "max-age=31536000", + "Referrer-Policy": "strict-origin-when-cross-origin", + "GitLab-SV": "localhost", + "CF-Cache-Status": "DYNAMIC", + "cf-request-id": "047f56799f0000911b0b8c7200000001", + "Expect-CT": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", + "Server": "cloudflare", + "CF-RAY": "5c1259d5cf95911b-ZAG", + "content-length": "2786" + }, + "response": "---\ntitle: \"A Brief History of Typography\"\ndate: \"2016-02-02T22:40:32.169Z\"\ntemplate: \"post\"\ndraft: false\ncategory: \"Design Inspiration\"\ntags:\n - \"Linotype\"\n - \"Monotype\"\n - \"History of typography\"\n - \"Helvetica\"\ndescription: \"Morbi in sem quis dui placerat ornare. Pellentesque odio nisi, euismod in, pharetra a, ultricies in, diam. Sed arcu. Cras consequat.\"\ncanonical: ''\n---\n\n**Pellentesque habitant morbi tristique** senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. *Aenean ultricies mi vitae est.* Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. \n\nVestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. [Donec non enim](#) in turpis pulvinar facilisis.\n\n![Nulla faucibus vestibulum eros in tempus. Vestibulum tempor imperdiet velit nec dapibus](/media/image-0.jpg)\n\n## Header Level 2\n\n+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\n+ Aliquam tincidunt mauris eu risus.\n\nDonec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. \n\n
\n\t
\n\t\t

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus magna. Cras in mi at felis aliquet congue. Ut a est eget ligula molestie gravida. Curabitur massa. Donec eleifend, libero at sagittis mollis, tellus est malesuada tellus, at luctus turpis elit sit amet quam. Vivamus pretium ornare est.

\n\t\t
\n\t\t\t— Aliquam tincidunt mauris eu risus.\n\t\t
\n\t
\n
\n\n### Header Level 3\n\n+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit.\n+ Aliquam tincidunt mauris eu risus.\n\nPellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra.\n\n```css\n#header h1 a {\n display: block;\n width: 300px;\n height: 80px;\n}\n```\n\nVestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus.", + "status": 200 + }, + { + "method": "GET", + "url": "/api/v4/projects/owner%2Frepo/repository/commits?ref_name=master&path=content/posts/2017-19-08---Humane-Typography-in-the-Digital-Age.md", + "headers": { + "Content-Type": "application/json", + "Connection": "keep-alive", + "Set-Cookie": "__cfduid=d94b063a5e8c39d8f75bc7ec52838218d1597153043; expires=Thu, 10-Sep-20 13:37:23 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Vary": "Accept-Encoding", + "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", + "Access-Control-Allow-Origin": "*", + "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", + "Access-Control-Max-Age": "7200", + "Cache-Control": "max-age=0, private, must-revalidate", + "Link": "; rel=\"first\", ; rel=\"last\"", + "X-Content-Type-Options": "nosniff", + "X-Frame-Options": "SAMEORIGIN", + "X-Next-Page": "", + "X-Page": "1", + "X-Per-Page": "20", + "X-Prev-Page": "", + "X-Total": "1", + "X-Total-Pages": "1", + "Strict-Transport-Security": "max-age=31536000", + "Referrer-Policy": "strict-origin-when-cross-origin", + "GitLab-SV": "localhost", + "CF-Cache-Status": "DYNAMIC", + "cf-request-id": "047f567ac90000913fec34d200000001", + "Expect-CT": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", + "Server": "cloudflare", + "CF-RAY": "5c1259d7a97a913f-ZAG", + "content-length": "591" + }, + "response": "[{\"id\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"short_id\":\"2bc3fa39\",\"created_at\":\"2019-07-24T10:45:32.000+03:00\",\"parent_ids\":[],\"title\":\"initial commit\",\"message\":\"initial commit\\n\",\"author_name\":\"owner\",\"author_email\":\"owner@users.noreply.github.com\",\"authored_date\":\"2019-07-24T10:45:32.000+03:00\",\"committer_name\":\"owner\",\"committer_email\":\"owner@users.noreply.github.com\",\"committed_date\":\"2019-07-24T10:45:32.000+03:00\",\"web_url\":\"https://gitlab.com/owner/repo/-/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\"}]", + "status": 200 + }, + { + "method": "GET", + "url": "/api/v4/projects/owner%2Frepo/repository/commits?ref_name=master&path=content/posts/2016-02-02---A-Brief-History-of-Typography.md", + "headers": { + "Content-Type": "application/json", + "Connection": "keep-alive", + "Set-Cookie": "__cfduid=d94b063a5e8c39d8f75bc7ec52838218d1597153043; expires=Thu, 10-Sep-20 13:37:23 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Vary": "Accept-Encoding", + "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", + "Access-Control-Allow-Origin": "*", + "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", + "Access-Control-Max-Age": "7200", + "Cache-Control": "max-age=0, private, must-revalidate", + "Link": "; rel=\"first\", ; rel=\"last\"", + "X-Content-Type-Options": "nosniff", + "X-Frame-Options": "SAMEORIGIN", + "X-Next-Page": "", + "X-Page": "1", + "X-Per-Page": "20", + "X-Prev-Page": "", + "X-Total": "1", + "X-Total-Pages": "1", + "Strict-Transport-Security": "max-age=31536000", + "Referrer-Policy": "strict-origin-when-cross-origin", + "GitLab-SV": "localhost", + "CF-Cache-Status": "DYNAMIC", + "cf-request-id": "047f567aca0000913fec34e200000001", + "Expect-CT": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", + "Server": "cloudflare", + "CF-RAY": "5c1259d7a97c913f-ZAG", + "content-length": "591" + }, + "response": "[{\"id\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"short_id\":\"2bc3fa39\",\"created_at\":\"2019-07-24T10:45:32.000+03:00\",\"parent_ids\":[],\"title\":\"initial commit\",\"message\":\"initial commit\\n\",\"author_name\":\"owner\",\"author_email\":\"owner@users.noreply.github.com\",\"authored_date\":\"2019-07-24T10:45:32.000+03:00\",\"committer_name\":\"owner\",\"committer_email\":\"owner@users.noreply.github.com\",\"committed_date\":\"2019-07-24T10:45:32.000+03:00\",\"web_url\":\"https://gitlab.com/owner/repo/-/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\"}]", + "status": 200 + }, { "method": "GET", "url": "/api/v4/projects/owner%2Frepo/repository/files/content%2Fposts%2F2017-19-08---Humane-Typography-in-the-Digital-Age.md/raw?ref=master", "headers": { "Content-Type": "text/plain; charset=utf-8", "Connection": "keep-alive", - "Set-Cookie": "__cfduid=dc4c4a6a9b8949741d789936936f51c681586687737; expires=Tue, 12-May-20 10:35:37 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Set-Cookie": "__cfduid=db92059246bc299700efab960941249c01597153043; expires=Thu, 10-Sep-20 13:37:23 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Vary": "Accept-Encoding", "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", "Access-Control-Allow-Origin": "*", "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", @@ -488,7 +442,6 @@ "Content-Disposition": "inline; filename=\"2017-19-08---Humane-Typography-in-the-Digital-Age.md\"; filename*=UTF-8''2017-19-08---Humane-Typography-in-the-Digital-Age.md", "Expires": "Fri, 01 Jan 1990 00:00:00 GMT", "Pragma": "no-cache", - "Vary": "Origin", "X-Content-Type-Options": "nosniff", "X-Frame-Options": "SAMEORIGIN", "X-Gitlab-Blob-Id": "a532f0a9445cdf90a19c6812cff89d1674991774", @@ -504,23 +457,84 @@ "Referrer-Policy": "strict-origin-when-cross-origin", "GitLab-SV": "localhost", "CF-Cache-Status": "DYNAMIC", + "cf-request-id": "047f567ac70000fc69dd1f7200000001", "Expect-CT": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "Server": "cloudflare", - "CF-RAY": "582c4d355d756a47-LHR", + "CF-RAY": "5c1259d7aee8fc69-ZAG", "content-length": "7465" }, "response": "---\ntitle: Humane Typography in the Digital Age\ndate: \"2017-08-19T22:40:32.169Z\"\ntemplate: \"post\"\ndraft: false\ncategory: \"Typography\"\ntags:\n - \"Design\"\n - \"Typography\"\n - \"Web Development\"\ndescription: \"An Essay on Typography by Eric Gill takes the reader back to the year 1930. The year when a conflict between two worlds came to its term. The machines of the industrial world finally took over the handicrafts.\"\ncanonical: ''\n---\n\n- [The first transition](#the-first-transition)\n- [The digital age](#the-digital-age)\n- [Loss of humanity through transitions](#loss-of-humanity-through-transitions)\n- [Chasing perfection](#chasing-perfection)\n\nAn Essay on Typography by Eric Gill takes the reader back to the year 1930. The year when a conflict between two worlds came to its term. The machines of the industrial world finally took over the handicrafts.\n\nThe typography of this industrial age was no longer handcrafted. Mass production and profit became more important. Quantity mattered more than the quality. The books and printed works in general lost a part of its humanity. The typefaces were not produced by craftsmen anymore. It was the machines printing and tying the books together now. The craftsmen had to let go of their craft and became a cog in the process. An extension of the industrial machine.\n\nBut the victory of the industrialism didn’t mean that the craftsmen were completely extinct. The two worlds continued to coexist independently. Each recognising the good in the other — the power of industrialism and the humanity of craftsmanship. This was the second transition that would strip typography of a part of its humanity. We have to go 500 years back in time to meet the first one.\n\n## The first transition\n\nA similar conflict emerged after the invention of the first printing press in Europe. Johannes Gutenberg invented movable type and used it to produce different compositions. His workshop could print up to 240 impressions per hour. Until then, the books were being copied by hand. All the books were handwritten and decorated with hand drawn ornaments and figures. A process of copying a book was long but each book, even a copy, was a work of art.\n\nThe first printed books were, at first, perceived as inferior to the handwritten ones. They were smaller and cheaper to produce. Movable type provided the printers with flexibility that allowed them to print books in languages other than Latin. Gill describes the transition to industrialism as something that people needed and wanted. Something similar happened after the first printed books emerged. People wanted books in a language they understood and they wanted books they could take with them. They were hungry for knowledge and printed books satisfied this hunger.\n\n![42-line-bible.jpg](/media/42-line-bible.jpg)\n\n*The 42–Line Bible, printed by Gutenberg.*\n\nBut, through this transition, the book lost a large part of its humanity. The machine took over most of the process but craftsmanship was still a part of it. The typefaces were cut manually by the first punch cutters. The paper was made by hand. The illustrations and ornaments were still being hand drawn. These were the remains of the craftsmanship that went almost extinct in the times of Eric Gill.\n\n## The digital age\n\nThe first transition took away a large part of humanity from written communication. Industrialisation, the second transition described by Eric Gill, took away most of what was left. But it’s the third transition that stripped it naked. Typefaces are faceless these days. They’re just fonts on our computers. Hardly anyone knows their stories. Hardly anyone cares. Flicking through thousands of typefaces and finding the “right one” is a matter of minutes.\n\n> In the new computer age the proliferation of typefaces and type manipulations represents a new level of visual pollution threatening our culture. Out of thousands of typefaces, all we need are a few basic ones, and trash the rest.\n>\n— Massimo Vignelli\n\nTypography is not about typefaces. It’s not about what looks best, it’s about what feels right. What communicates the message best. Typography, in its essence, is about the message. “Typographical design should perform optically what the speaker creates through voice and gesture of his thoughts.”, as El Lissitzky, a famous Russian typographer, put it.\n\n## Loss of humanity through transitions\n\nEach transition took away a part of humanity from written language. Handwritten books being the most humane form and the digital typefaces being the least. Overuse of Helvetica is a good example. Messages are being told in a typeface just because it’s a safe option. It’s always there. Everyone knows it but yet, nobody knows it. Stop someone on the street and ask him what Helvetica is? Ask a designer the same question. Ask him where it came from, when, why and who designed it. Most of them will fail to answer these questions. Most of them used it in their precious projects but they still don’t spot it in the street.\n\n
\n\t
\n\t\t

Knowledge of the quality of a typeface is of the greatest importance for the functional, aesthetic and psychological effect.

\n\t\t
\n\t\t\t— Josef Mueller-Brockmann\n\t\t
\n\t
\n
\n\nTypefaces don’t look handmade these days. And that’s all right. They don’t have to. Industrialism took that away from them and we’re fine with it. We’ve traded that part of humanity for a process that produces more books that are easier to read. That can’t be bad. And it isn’t.\n\n> Humane typography will often be comparatively rough and even uncouth; but while a certain uncouthness does not seriously matter in humane works, uncouthness has no excuse whatever in the productions of the machine.\n>\n> — Eric Gill\n\nWe’ve come close to “perfection” in the last five centuries. The letters are crisp and without rough edges. We print our compositions with high–precision printers on a high quality, machine made paper.\n\n![type-through-time.jpg](/media/type-through-time.jpg)\n\n*Type through 5 centuries.*\n\nWe lost a part of ourselves because of this chase after perfection. We forgot about the craftsmanship along the way. And the worst part is that we don’t care. The transition to the digital age made that clear. We choose typefaces like clueless zombies. There’s no meaning in our work. Type sizes, leading, margins… It’s all just a few clicks or lines of code. The message isn’t important anymore. There’s no more “why” behind the “what”.\n\n## Chasing perfection\n\nHuman beings aren’t perfect. Perfection is something that will always elude us. There will always be a small part of humanity in everything we do. No matter how small that part, we should make sure that it transcends the limits of the medium. We have to think about the message first. What typeface should we use and why? Does the typeface match the message and what we want to communicate with it? What will be the leading and why? Will there be more typefaces in our design? On what ground will they be combined? What makes our design unique and why? This is the part of humanity that is left in typography. It might be the last part. Are we really going to give it up?\n\n*Originally published by [Matej Latin](http://matejlatin.co.uk/) on [Medium](https://medium.com/design-notes/humane-typography-in-the-digital-age-9bd5c16199bd?ref=webdesignernews.com#.lygo82z0x).*", "status": 200 }, + { + "method": "GET", + "url": "/api/v4/projects/owner%2Frepo/repository/commits?ref_name=master&path=content/posts/2017-18-08---The-Birth-of-Movable-Type.md", + "headers": { + "Content-Type": "application/json", + "Connection": "keep-alive", + "Set-Cookie": "__cfduid=d1050a5aa1c7b2b34b17b66cb86405c9c1597153043; expires=Thu, 10-Sep-20 13:37:23 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Vary": "Accept-Encoding", + "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", + "Access-Control-Allow-Origin": "*", + "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", + "Access-Control-Max-Age": "7200", + "Cache-Control": "max-age=0, private, must-revalidate", + "Link": "; rel=\"first\", ; rel=\"last\"", + "X-Content-Type-Options": "nosniff", + "X-Frame-Options": "SAMEORIGIN", + "X-Next-Page": "", + "X-Page": "1", + "X-Per-Page": "20", + "X-Prev-Page": "", + "X-Total": "1", + "X-Total-Pages": "1", + "Strict-Transport-Security": "max-age=31536000", + "Referrer-Policy": "strict-origin-when-cross-origin", + "GitLab-SV": "localhost", + "CF-Cache-Status": "DYNAMIC", + "cf-request-id": "047f567b2a0000fc5980bff200000001", + "Expect-CT": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", + "Server": "cloudflare", + "CF-RAY": "5c1259d84de0fc59-ZAG", + "content-length": "591" + }, + "response": "[{\"id\":\"2bc3fa39d8adb9e008e52793854338399fc6e4ad\",\"short_id\":\"2bc3fa39\",\"created_at\":\"2019-07-24T10:45:32.000+03:00\",\"parent_ids\":[],\"title\":\"initial commit\",\"message\":\"initial commit\\n\",\"author_name\":\"owner\",\"author_email\":\"owner@users.noreply.github.com\",\"authored_date\":\"2019-07-24T10:45:32.000+03:00\",\"committer_name\":\"owner\",\"committer_email\":\"owner@users.noreply.github.com\",\"committed_date\":\"2019-07-24T10:45:32.000+03:00\",\"web_url\":\"https://gitlab.com/owner/repo/-/commit/2bc3fa39d8adb9e008e52793854338399fc6e4ad\"}]", + "status": 200 + }, + { + "method": "HEAD", + "url": "/api/v4/projects/owner%2Frepo/repository/files/static%2Fmedia%2Fnetlify.png?ref=master", + "headers": { + "Content-Type": "application/json", + "Content-Length": "32", + "Connection": "keep-alive", + "Set-Cookie": "__cfduid=de2d3d8cf856a914efbe81cff54fe59101597153043; expires=Thu, 10-Sep-20 13:37:23 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", + "Access-Control-Allow-Origin": "*", + "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", + "Access-Control-Max-Age": "7200", + "Cache-Control": "no-cache", + "Vary": "Origin", + "X-Content-Type-Options": "nosniff", + "X-Frame-Options": "SAMEORIGIN", + "GitLab-SV": "localhost", + "CF-Cache-Status": "DYNAMIC", + "cf-request-id": "047f567bb30000fc615a3df200000001", + "Expect-CT": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", + "Server": "cloudflare", + "CF-RAY": "5c1259d91b2cfc61-ZAG" + }, + "status": 404 + }, { "body": "{\"branch\":\"master\",\"commit_message\":\"Upload “static/media/netlify.png”\",\"actions\":[{\"action\":\"create\",\"file_path\":\"static/media/netlify.png\",\"content\":\"iVBORw0KGgoAAAANSUhEUgAAAJcAAACXCAMAAAAvQTlLAAAAwFBMVEX///85rbswtrpAp71DpL03sLs8q7xGob4tubkzs7o+qLwqvLknv7gkwrgpvbhIn75Mm7/x+vrs9fhktcfn9/bg8PMtp7lSr8IWw7U7yL3Y7vAAq7JSzMM+w75MwMGj2dxmv8iLx9O73ORcrMRorMeJ2tJr1MlTx8N8z8+45uWs4OBQu8HH5ulTuMMXqbaW0Ndxvsuq1t4jnrd6ss2TwNUwj7ii4tzP8Ox00syR19ZkxseByNCezdnP5Ox2tsyDv9FhQXEFAAAMiUlEQVR4nO2ci1biyBaGDTcBUaxAEjuoQLQHEQhJ2j7TCLTv/1anau8kdU3wwsW1zvlnVg9UKlVf/r1rVyFjn539X6cSOTWASf2f/9z+87N/agxF5OcN6uf3Mu32JtPtqVEE9X/ccP34NrEktzeibr9JKCW3vo9j1K1L+g/X5bdwrP/jkkqgYjq9Y/3bSxSz7PImfXN5e2Kw/qWoG+H1ScFyt3T9PCXWj0KsU/pV4tblf06HRX5cdoqw/kClOIlnZNKhKovi/O4EYKQDMlsGUezfdTpHL7D9SSeXhoX1/olemhzZMXLXESVRdS7/ZV3+hSt3R3VMdEsTli5yi++OmWOKW4omYNEqfXd1PMdK3ep0IIq+wHkkx8gVVeeqCOsJ+qToV6CjONaf4GQFYHdiFNOex3CM3F1dlIFNgV3Curg4fI71JxdUV1dFaH+g16tAdcVuOLRj5O4CpZPBqyuY/zlnSrEO7Ri6JYMBW4aHUdSoDu3Y08WVESzDm0CvPzkU731gx/zVnTCVxgaeTDWvmJrN1QG5aIY9TwrJnqHDHTNKhrpoUq75Qbmopk8XYoRyrFe4+qQ6hW41m4eJI3ld8cx1VtrMVxcdn12am6GoDoJl39ORX+f5M5PpHxUM8ofcFWHdA7WzXyxynw7+zMn8V2n69BhhhqKCffNpv9Hs3/PxVzx/+8MJi9pk9Tx9XmEUC7GasCgmzfs91jEiYLFwTvmV6eSCW0g7FlGly5FZvjfH+rNKpSLN0RzyPBGnWWVJ35SZmJifdpOONNuTY+S+UtHA7p98wwMwIBMTu4E9yZxxVfbjWB+xNLLm/VR78FcTURp8BvOMA+0jx0iOZSBbKU8+L+aC5bhKx/m6Y30RS+VqqsWSFHNBdXvKBvqqY5JbpjRT+j8VcrE1TF7zYb7mWL/V0rgoGYd71e5Y3etM7D6W9n0+TKvyBcfIfUsHkz0zPMuzTFYBrAHzxx9kVFSfd6w/a6FK0AzV4uzsXx7O/AbWHgw4FgX7pGMkwzKCpWRP5nudIUY77w0Bz5YjDjqofMqx/n1LkIkM2KbCLVPhwEHfNIWeS9b0yqFardnwc1iz1m4uKmFF+pTzdSgeOAZ5N8DnVIPZ/JPpZbcUVcxs+enCTot5RdihyHAmdLNTrMFs/YVj2FwFM3Jhfk3n09VMaBQPHGgaY/UHmFbCpu8sP27bcvAOMjwM6u3C3P5qNkTGUWvQGvHjG5mPBuFHThc23EtmGpfGBoc93xhgIZz51EMpxqNBnWr2bsf69boN8xm5RDKM4szIVRnM9ANHLn9No1FHvdMxsqiHa3i1DAvIMjYYcWjGYpqtzAk+X8MgKdfoXY7ZrGsIATobFXIBG6SNOYogluUj7eOsM2wNOBSbDMOz0y0QPINfL+OCo97ZazEUaCC74a+BSsCiWux0zF6Eqbnwdhi2CtEGEKNhixFkxQ1etipSN+W5hzOVijq22OFYjlWvx9AwqhdxDWBr0cqv0mmw0uJIy0NYV1UOZi8s3hWWtAMvTVPi+i7PwNnQPJ2zXihcVhmYPbKsek42grY4NIMN8HOsXnt5j9m8eC47ngmm0VmtUWFnYoHyoEOgWCRNZHDRMZdekGkPJGthu/ZH9RQN57UKkp8G0ZLJhEgCmgCHUVwX2DVoCfvQfJ1tgs4oDEfC8cZfWiHHKnCM5FgZmIXLdxpysIysPIojcd+e0U6sN5kv02HWwiE3GFlhNmvDVC7sRaPRsGS0NJJraflgkGBOUxTpChQ2xiWjas2YEc/5KNQ04TQ5X4cpWaOhJ7/dsGQuBINF3lcWT6u1gA1obcCaiefCpxarVC1cQUt5kCHfFe3lArEogwJmL9xGwwCGzs6VeoO4vrZ70k2HR2I+atXT+gm2r6UhaGKteWWzgwjnd5VQNrCZEUtk6QYuRxKfn56mlL1AWIH9ofgYQ+heV2TVFwGncCJgcBsiVpRhaZ6FATDIkYT5l5yV8oUzaQXWxQcBe526LFayrHCx5HfZsee6DTfiWGMRSw2mrUYyjDGKQktdPIXGai0P2RC+pbRm5SHaCrGnprnj3EIZSyHTIrmABh6W0FryFegvF9rmF7ILgdQsTuD2Yk62HbtJZuFY4xLB0B4hPQAizqdZxGKuq0z5g/CwW5Ig2xtjMZxxnl06mEjmiHFDTDt7JywqEhjOCfVs7YxMWFCcgMyN9A+U9nzjefSSSpfdjefc9IExiumiF7N2aWLiT2LpVlniZK7rxYZ9iGyDTdTW2DCSG4xkyJRFkRZtYRxlBcpcYGmoUVkNRTSc5u+QbCceq8bBCLiBL4P5BpONrUCfF3a6AgupaEFgdzthOVNmWi8wkkFU43FPYGOjKFV4bQkB9JclUBB5ZmvwHqw2lettisioAzTlIoaPA1i8poBx8goso4IDH+u33AkFVFSJMFccm75Q8mnKsajSgczu2rFerJBGTHJYjuOdVBmXUO/PSLvq9caBoy1VwlLOasRqO9g25gdJ+Q9Z7GYSlULlZrXbnvzkvSqLrRstA18/nBmOa2QehTqCSS78iGlRwiRi9dSDjoftLiWOqHPGuHGqeLEbKONiY/mNYq62IE8/GPaEy7TIRbHJuSyE76aiXOyGuWFH0bmqqlvoWFUggypG4QrYxg33PUywz7D+cQGX6BXNceMHD8kxhtZglcL11qbexI+XERYSM1EmPE9FZi55QpNbMFdbAWOuNZaFuUZsP1jT3YN2Kk5qF9ayEUrBahemDa5KMc+iwm2B09H9gTlXxAUj6FcVpqoxt3IwryqSjY3fZhid28ZQgtX5aQt8T6u2tzUsc24JjmVgvQ3vqdwT9JZzw4Kwg+XYk9jc9MkCtwyKUpW6BWNTxyha0gt4xyBS7tqwyRfRxvDdgO0EsOsjSHZs8d1iKEa1wy0YuFdNvA0PoBPTWhspAPhpk80exVt99zpzAlisfJS0fulQiLXLLQQTznvOG+wDap5t8+dnbL1oY0hE298K79hnCCMS6B1Y4siBl8D9eKQPfMfxA7ROSRhGNw62JbuX4xZT9T70nQfZZGsA7xu7bc9rZx/vetrKZykVjeMiNtc1Q70ntwSo7VuS3pZGcZ6kI2JByvZ5Vh4V57xx4OtTke3mrdd2E5XqQ1hnOVW1iudHwjcpF+yL9cDkHdw2TbnAuFg3vXaSCFTJh7DSciFEf5zwefFEGRVyZXQFIaWV5M2rpnQfyy0Klj8QhM1no7SzkgtNjrcDrF3yAYLurGNqXPLBlXjGAodcGEVuH2NLYLTtLi6hvGwDx0Cw3XziS1vbqzEMCEYsJir1DSMpxtYoLwPbVpOq97bZdQx+n8hDrVrDkCVVWQl+Ase1UC2g4v3G6f00cN5ma3LuQ7K9pAcvelVV+LOgbYL2wb9t/K8sMDaQFmBS7VHnvsRGcN/a1DSudB1tVCNVQXa+yW00CrUkqY3LZt4Fxv6w6TgaWRbJcqwkVrlqmT6+ElVFfCxxSvxZyg6urQBfE/Xw5f8DLBBGqwpoGMm4NJJQUByViWF92a2zB3XMWhXwkje4HJVysR5bbYA9uEXTSwcD52oQJFpD9FWB5LQX/LAhSA7g1hnUMbNwy02n1UJFhYtjo3Ltwy0ms2N0WozkWwE27QBVuXcQt5iKHMN5iVfIBZFWnNyXW0xFjj2IkTQIdgX56v7cYipy7C9cHRdgAYMjce3TLSb74dw0cxrJAi6gFt08369bMLcZDEPlm7lwOYpYB/hdCuoYU03Bw0huaibh7kh52G1U+3eLiSAYTlEDvvOsRhl2hXQ5ZncxrAP9BpHNp8hFIfEohoFK4wW2np/b0k2HcYuJ1HSwzIZNjZNmrwA4f3vA37cyOXZ+/gLX/urAItfh3CoEq+EGrrXDNhUfA6vIMSIQcMGKeDsKlrS+dkUSbESsI/yGrdEx/FmK3NZ1Mq7Du8VEDFw13MCltkc7Yz3Sb3Dbj10NDI9iL+KFvwwn6CLfUUS6GlgXI/mgor50j5FbmahjlAzokLDb7eLPUnhbF5fj8dwCsK6mdAPnDbAc/x4VCx1ThBs4b2fLkRz9L8YwOIYbePbu+thEGZjm2CO055E8EZfBMYzkLzHfTgKmOZZu4BDGkp+uHhwszSQeSfwyhDVcb3fdfUiwx2sBjf6BG/jLdff6uHVLA6Mw8M81haJ/oEs2fXFSLFqgHq8FdVOe7ePJ/8Y0u3stCSN5YrcAQXLs+vfub+qPJNWxb+AVSnHs5dQ8uezv6RfVr99Zev06NYqsFwT7/X2CmMp5+fXr18ue/3qJ/ejktfR/WP8FOoK2QLx2JrUAAAAASUVORK5CYII=\",\"encoding\":\"base64\"}]}", "method": "POST", "url": "/api/v4/projects/owner%2Frepo/repository/commits", "headers": { "Content-Type": "application/json", - "Content-Length": "752", + "Content-Length": "798", "Connection": "keep-alive", - "Set-Cookie": "__cfduid=d972841e3b78b50a27878f498ae6f8d921586687737; expires=Tue, 12-May-20 10:35:37 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Set-Cookie": "__cfduid=db92059246bc299700efab960941249c01597153043; expires=Thu, 10-Sep-20 13:37:23 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", "Access-Control-Allow-Origin": "*", "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", @@ -533,25 +547,28 @@ "Referrer-Policy": "strict-origin-when-cross-origin", "GitLab-SV": "localhost", "CF-Cache-Status": "DYNAMIC", + "cf-request-id": "047f567cd80000fc69da00b200000001", "Expect-CT": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "Server": "cloudflare", - "CF-RAY": "582c4d383b6134f8-LHR" + "CF-RAY": "5c1259daff11fc69-ZAG" }, - "response": "{\"id\":\"0a37e8bb5c63c5b09b8230e86afba34d3002071e\",\"short_id\":\"0a37e8bb\",\"created_at\":\"2020-04-12T10:35:37.000+00:00\",\"parent_ids\":[\"ac8bcd7244d386040a77a4bdec472138547cc38a\"],\"title\":\"Upload “static/media/netlify.png”\",\"message\":\"Upload “static/media/netlify.png”\",\"author_name\":\"owner\",\"author_email\":\"owner@gmail.com\",\"authored_date\":\"2020-04-12T10:35:37.000+00:00\",\"committer_name\":\"owner\",\"committer_email\":\"owner@gmail.com\",\"committed_date\":\"2020-04-12T10:35:37.000+00:00\",\"web_url\":\"https://gitlab.com/owner/repo/-/commit/0a37e8bb5c63c5b09b8230e86afba34d3002071e\",\"stats\":{\"additions\":0,\"deletions\":0,\"total\":0},\"status\":null,\"project_id\":18082511,\"last_pipeline\":null}", + "response": "{\"id\":\"48e1b3c5e18f82fdf873c2daad219de398f0d0ea\",\"short_id\":\"48e1b3c5\",\"created_at\":\"2020-08-11T13:37:23.000+00:00\",\"parent_ids\":[\"ac8bcd7244d386040a77a4bdec472138547cc38a\"],\"title\":\"Upload “static/media/netlify.png”\",\"message\":\"Upload “static/media/netlify.png”\",\"author_name\":\"owner\",\"author_email\":\"4843565-owner@users.noreply.gitlab.com\",\"authored_date\":\"2020-08-11T13:37:23.000+00:00\",\"committer_name\":\"owner\",\"committer_email\":\"4843565-owner@users.noreply.gitlab.com\",\"committed_date\":\"2020-08-11T13:37:23.000+00:00\",\"web_url\":\"https://gitlab.com/owner/repo/-/commit/48e1b3c5e18f82fdf873c2daad219de398f0d0ea\",\"stats\":{\"additions\":0,\"deletions\":0,\"total\":0},\"status\":null,\"project_id\":20467931,\"last_pipeline\":null}", "status": 201 }, { - "method": "DELETE", - "url": "/api/v4/projects/owner%2Frepo/repository/files/static%2Fmedia%2Fnetlify.png?commit_message=Delete “static/media/netlify.png”&branch=master", + "body": "{\"branch\":\"master\",\"commit_message\":\"Delete “static/media/netlify.png”\",\"actions\":[{\"action\":\"delete\",\"file_path\":\"static/media/netlify.png\"}]}", + "method": "POST", + "url": "/api/v4/projects/owner%2Frepo/repository/commits", "headers": { "Content-Type": "application/json", + "Content-Length": "798", "Connection": "keep-alive", - "Set-Cookie": "__cfduid=d74d83033634e68fe523e21710e1d3b4c1586687739; expires=Tue, 12-May-20 10:35:39 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", + "Set-Cookie": "__cfduid=d71d82065d6663a910955b250c63153fc1597153046; expires=Thu, 10-Sep-20 13:37:26 GMT; path=/; domain=.gitlab.com; HttpOnly; SameSite=Lax; Secure", "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS", "Access-Control-Allow-Origin": "*", "Access-Control-Expose-Headers": "Link, X-Total, X-Total-Pages, X-Per-Page, X-Page, X-Next-Page, X-Prev-Page, X-Gitlab-Blob-Id, X-Gitlab-Commit-Id, X-Gitlab-Content-Sha256, X-Gitlab-Encoding, X-Gitlab-File-Name, X-Gitlab-File-Path, X-Gitlab-Last-Commit-Id, X-Gitlab-Ref, X-Gitlab-Size", "Access-Control-Max-Age": "7200", - "Cache-Control": "no-cache", + "Cache-Control": "max-age=0, private, must-revalidate", "Vary": "Origin", "X-Content-Type-Options": "nosniff", "X-Frame-Options": "SAMEORIGIN", @@ -559,12 +576,12 @@ "Referrer-Policy": "strict-origin-when-cross-origin", "GitLab-SV": "localhost", "CF-Cache-Status": "DYNAMIC", + "cf-request-id": "047f5687020000fc6dcc9f5200000001", "Expect-CT": "max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\"", "Server": "cloudflare", - "CF-RAY": "582c4d43cab2dbef-LHR", - "content-length": "0" + "CF-RAY": "5c1259eb3bacfc6d-ZAG" }, - "response": null, - "status": 204 + "response": "{\"id\":\"b555bb867e93ad88dbfbfa67d23437aae3023a6a\",\"short_id\":\"b555bb86\",\"created_at\":\"2020-08-11T13:37:26.000+00:00\",\"parent_ids\":[\"48e1b3c5e18f82fdf873c2daad219de398f0d0ea\"],\"title\":\"Delete “static/media/netlify.png”\",\"message\":\"Delete “static/media/netlify.png”\",\"author_name\":\"owner\",\"author_email\":\"4843565-owner@users.noreply.gitlab.com\",\"authored_date\":\"2020-08-11T13:37:26.000+00:00\",\"committer_name\":\"owner\",\"committer_email\":\"4843565-owner@users.noreply.gitlab.com\",\"committed_date\":\"2020-08-11T13:37:26.000+00:00\",\"web_url\":\"https://gitlab.com/owner/repo/-/commit/b555bb867e93ad88dbfbfa67d23437aae3023a6a\",\"stats\":{\"additions\":0,\"deletions\":0,\"total\":0},\"status\":null,\"project_id\":20467931,\"last_pipeline\":null}", + "status": 201 } ] \ No newline at end of file diff --git a/cypress/integration/common/i18n.js b/cypress/integration/common/i18n.js new file mode 100644 index 00000000..39b4239e --- /dev/null +++ b/cypress/integration/common/i18n.js @@ -0,0 +1,59 @@ +import { newPost, populateEntry, publishEntry, flushClockAndSave } from '../../utils/steps'; + +const enterTranslation = str => { + cy.get(`[id^="title-field"]`) + .first() + .clear({ force: true }); + cy.get(`[id^="title-field"]`) + .first() + .type(str, { force: true }); +}; + +const createAndTranslate = entry => { + newPost(); + // fill the main entry + populateEntry(entry, () => undefined); + + // fill the translation + cy.get('.Pane2').within(() => { + enterTranslation('de'); + + cy.contains('span', 'Writing in DE').click(); + cy.contains('span', 'fr').click(); + + enterTranslation('fr'); + }); +}; + +export const updateTranslation = () => { + cy.get('.Pane2').within(() => { + enterTranslation('fr fr'); + + cy.contains('span', 'Writing in FR').click(); + cy.contains('span', 'de').click(); + + enterTranslation('de de'); + }); + flushClockAndSave(); +}; + +export const assertTranslation = () => { + cy.get('.Pane2').within(() => { + cy.get(`[id^="title-field"]`).should('have.value', 'de'); + + cy.contains('span', 'Writing in DE').click(); + cy.contains('span', 'fr').click(); + + cy.get(`[id^="title-field"]`).should('have.value', 'fr'); + }); +}; + +export const createEntryTranslateAndPublish = entry => { + createAndTranslate(entry); + publishEntry(); +}; + +export const createEntryTranslateAndSave = entry => { + createAndTranslate(entry); + flushClockAndSave(); +}; diff --git a/cypress/integration/common/i18n_editorial_workflow_spec.js b/cypress/integration/common/i18n_editorial_workflow_spec.js new file mode 100644 index 00000000..1d744f7b --- /dev/null +++ b/cypress/integration/common/i18n_editorial_workflow_spec.js @@ -0,0 +1,54 @@ +import '../../utils/dismiss-local-backup'; +import { + login, + goToWorkflow, + updateWorkflowStatus, + exitEditor, + publishWorkflowEntry, + goToEntry, + updateWorkflowStatusInEditor, + publishEntryInEditor, + assertPublishedEntryInEditor, + assertUnpublishedEntryInEditor, + assertUnpublishedChangesInEditor, +} from '../../utils/steps'; +import { createEntryTranslateAndSave, assertTranslation, updateTranslation } from './i18n'; +import { workflowStatus, editorStatus, publishTypes } from '../../utils/constants'; + +export default function({ entry, getUser }) { + const structures = ['multiple_folders', 'multiple_files', 'single_file']; + structures.forEach(structure => { + it(`can create and publish entry with translation in ${structure} mode`, () => { + cy.task('updateConfig', { i18n: { structure } }); + + login(getUser()); + + createEntryTranslateAndSave(entry); + assertUnpublishedEntryInEditor(); + exitEditor(); + goToWorkflow(); + updateWorkflowStatus(entry, workflowStatus.draft, workflowStatus.ready); + publishWorkflowEntry(entry); + goToEntry(entry); + assertTranslation(); + assertPublishedEntryInEditor(); + }); + + it(`can update translated entry in ${structure} mode`, () => { + cy.task('updateConfig', { i18n: { structure: 'multiple_folders' } }); + + login(getUser()); + + createEntryTranslateAndSave(entry); + assertUnpublishedEntryInEditor(); + updateWorkflowStatusInEditor(editorStatus.ready); + publishEntryInEditor(publishTypes.publishNow); + exitEditor(); + goToEntry(entry); + assertTranslation(); + assertPublishedEntryInEditor(); + updateTranslation(); + assertUnpublishedChangesInEditor(); + }); + }); +} diff --git a/cypress/integration/i18n_editorial_workflow_spec_test_backend.js b/cypress/integration/i18n_editorial_workflow_spec_test_backend.js new file mode 100644 index 00000000..83b04002 --- /dev/null +++ b/cypress/integration/i18n_editorial_workflow_spec_test_backend.js @@ -0,0 +1,38 @@ +import fixture from './common/i18n_editorial_workflow_spec'; + +const backend = 'test'; + +describe(`I18N Test Backend Editorial Workflow`, () => { + const taskResult = { data: {} }; + + before(() => { + Cypress.config('defaultCommandTimeout', 4000); + cy.task('setupBackend', { + backend, + options: { + publish_mode: 'editorial_workflow', + i18n: { + locales: ['en', 'de', 'fr'], + }, + collections: [ + { + folder: 'content/i18n', + i18n: true, + fields: [{ i18n: true }, {}, { i18n: 'duplicate' }], + }, + ], + }, + }); + }); + + after(() => { + cy.task('teardownBackend', { backend }); + }); + + const entry = { + title: 'first title', + body: 'first body', + }; + + fixture({ entry, getUser: () => taskResult.data.user }); +}); diff --git a/cypress/integration/i18n_simple_workflow_spec_proxy_fs_backend.js b/cypress/integration/i18n_simple_workflow_spec_proxy_fs_backend.js new file mode 100644 index 00000000..b4a3bbbf --- /dev/null +++ b/cypress/integration/i18n_simple_workflow_spec_proxy_fs_backend.js @@ -0,0 +1,148 @@ +import * as specUtils from './common/spec_utils'; +import { login } from '../utils/steps'; +import { createEntryTranslateAndPublish } from './common/i18n'; + +const backend = 'proxy'; +const mode = 'fs'; + +const expectedEnContent = `--- +template: post +title: first title +date: 1970-01-01T00:00:00.000Z +description: first description +category: first category +tags: + - tag1 +--- +`; + +const expectedDeContent = `--- +title: de +date: 1970-01-01T00:00:00.000Z +--- +`; + +const expectedFrContent = `--- +title: fr +date: 1970-01-01T00:00:00.000Z +--- +`; + +const contentSingleFile = `--- +en: + template: post + date: 1970-01-01T00:00:00.000Z + title: first title + description: first description + category: first category + tags: + - tag1 + body: first body +de: + date: 1970-01-01T00:00:00.000Z + title: de +fr: + date: 1970-01-01T00:00:00.000Z + title: fr +--- +`; + +describe(`I18N Proxy Backend Simple Workflow - '${mode}' mode`, () => { + const taskResult = { data: {} }; + + const entry = { + title: 'first title', + body: 'first body', + description: 'first description', + category: 'first category', + tags: 'tag1', + }; + + before(() => { + specUtils.before( + taskResult, + { + mode, + publish_mode: 'simple', + i18n: { + locales: ['en', 'de', 'fr'], + }, + collections: [{ i18n: true, fields: [{}, { i18n: true }, {}, { i18n: 'duplicate' }] }], + }, + backend, + ); + Cypress.config('taskTimeout', 15 * 1000); + Cypress.config('defaultCommandTimeout', 5 * 1000); + }); + + after(() => { + specUtils.after(taskResult, backend); + }); + + beforeEach(() => { + specUtils.beforeEach(taskResult, backend); + }); + + afterEach(() => { + specUtils.afterEach(taskResult, backend); + }); + + it('can create entry with translation in locale_folders mode', () => { + cy.task('updateConfig', { i18n: { structure: 'multiple_folders' } }); + + login(taskResult.data.user); + + createEntryTranslateAndPublish(entry); + + cy.readFile(`${taskResult.data.tempDir}/content/posts/en/1970-01-01-first-title.md`).should( + 'contain', + expectedEnContent, + ); + + cy.readFile(`${taskResult.data.tempDir}/content/posts/de/1970-01-01-first-title.md`).should( + 'eq', + expectedDeContent, + ); + + cy.readFile(`${taskResult.data.tempDir}/content/posts/fr/1970-01-01-first-title.md`).should( + 'eq', + expectedFrContent, + ); + }); + + it('can create entry with translation in single_file mode', () => { + cy.task('updateConfig', { i18n: { structure: 'multiple_files' } }); + + login(taskResult.data.user); + + createEntryTranslateAndPublish(entry); + + cy.readFile(`${taskResult.data.tempDir}/content/posts/1970-01-01-first-title.en.md`).should( + 'contain', + expectedEnContent, + ); + + cy.readFile(`${taskResult.data.tempDir}/content/posts/1970-01-01-first-title.de.md`).should( + 'eq', + expectedDeContent, + ); + + cy.readFile(`${taskResult.data.tempDir}/content/posts/1970-01-01-first-title.fr.md`).should( + 'eq', + expectedFrContent, + ); + }); + + it('can create entry with translation in locale_file_extensions mode', () => { + cy.task('updateConfig', { i18n: { structure: 'single_file' } }); + + login(taskResult.data.user); + + createEntryTranslateAndPublish(entry); + + cy.readFile(`${taskResult.data.tempDir}/content/posts/1970-01-01-first-title.md`).should( + 'eq', + contentSingleFile, + ); + }); +}); diff --git a/cypress/integration/markdown_widget_code_block_spec.js b/cypress/integration/markdown_widget_code_block_spec.js index 69c7d27c..f14cd988 100644 --- a/cypress/integration/markdown_widget_code_block_spec.js +++ b/cypress/integration/markdown_widget_code_block_spec.js @@ -67,7 +67,7 @@ function codeBlock(content) {
-
+
diff --git a/cypress/integration/simple_workflow_spec_proxy_fs_backend.js b/cypress/integration/simple_workflow_spec_proxy_fs_backend.js index 9901fdf7..8e8f2590 100644 --- a/cypress/integration/simple_workflow_spec_proxy_fs_backend.js +++ b/cypress/integration/simple_workflow_spec_proxy_fs_backend.js @@ -6,7 +6,7 @@ const backend = 'proxy'; const mode = 'fs'; describe(`Proxy Backend Simple Workflow - '${mode}' mode`, () => { - let taskResult = { data: {} }; + const taskResult = { data: {} }; before(() => { specUtils.before(taskResult, { publish_mode: 'simple', mode }, backend); diff --git a/cypress/plugins/gitGateway.js b/cypress/plugins/gitGateway.js index c884ca4c..eb2b83b0 100644 --- a/cypress/plugins/gitGateway.js +++ b/cypress/plugins/gitGateway.js @@ -302,14 +302,11 @@ async function teardownGitGatewayTest(taskData) { transformRecordedData: (expectation, toSanitize) => { const result = methods[taskData.provider].transformData(expectation, toSanitize); - const { httpRequest, httpResponse } = expectation; - - if (httpResponse.body && httpRequest.path === '/.netlify/identity/token') { - const parsed = JSON.parse(httpResponse.body); + if (result.response && result.url === '/.netlify/identity/token') { + const parsed = JSON.parse(result.response); parsed.access_token = 'access_token'; parsed.refresh_token = 'refresh_token'; - const responseBody = JSON.stringify(parsed); - return { ...result, response: responseBody }; + return { ...result, response: JSON.stringify(parsed) }; } else { return result; } diff --git a/cypress/plugins/github.js b/cypress/plugins/github.js index f229f24a..bed51ee9 100644 --- a/cypress/plugins/github.js +++ b/cypress/plugins/github.js @@ -310,7 +310,11 @@ const transformRecordedData = (expectation, toSanitize) => { const requestBodySanitizer = httpRequest => { let body; if (httpRequest.body && httpRequest.body.type === 'JSON' && httpRequest.body.json) { - const bodyObject = JSON.parse(httpRequest.body.json); + const bodyObject = + typeof httpRequest.body.json === 'string' + ? JSON.parse(httpRequest.body.json) + : httpRequest.body.json; + if (bodyObject.encoding === 'base64') { // sanitize encoded data const decodedBody = Buffer.from(bodyObject.content, 'base64').toString('binary'); @@ -319,10 +323,14 @@ const transformRecordedData = (expectation, toSanitize) => { bodyObject.content = sanitizedEncodedContent; body = JSON.stringify(bodyObject); } else { - body = httpRequest.body.json; + body = JSON.stringify(bodyObject); } } else if (httpRequest.body && httpRequest.body.type === 'STRING' && httpRequest.body.string) { body = httpRequest.body.string; + } else if (httpRequest.body) { + const str = + typeof httpRequest.body !== 'string' ? JSON.stringify(httpRequest.body) : httpRequest.body; + body = sanitizeString(str, toSanitize); } return body; }; @@ -340,8 +348,13 @@ const transformRecordedData = (expectation, toSanitize) => { encoding: 'base64', content: httpResponse.body.base64Bytes, }; - } else if (httpResponse.body) { - responseBody = httpResponse.body; + } else if (httpResponse.body && httpResponse.body.json) { + responseBody = JSON.stringify(httpResponse.body.json); + } else { + responseBody = + typeof httpResponse.body === 'string' + ? httpResponse.body + : httpResponse.body && JSON.stringify(httpResponse.body); } // replace recorded user with fake one diff --git a/cypress/plugins/gitlab.js b/cypress/plugins/gitlab.js index 4be4f821..dd02cf63 100644 --- a/cypress/plugins/gitlab.js +++ b/cypress/plugins/gitlab.js @@ -216,7 +216,11 @@ const transformRecordedData = (expectation, toSanitize) => { const requestBodySanitizer = httpRequest => { let body; if (httpRequest.body && httpRequest.body.type === 'JSON' && httpRequest.body.json) { - const bodyObject = JSON.parse(httpRequest.body.json); + const bodyObject = + typeof httpRequest.body.json === 'string' + ? JSON.parse(httpRequest.body.json) + : httpRequest.body.json; + if (bodyObject.encoding === 'base64') { // sanitize encoded data const decodedBody = Buffer.from(bodyObject.content, 'base64').toString('binary'); @@ -225,10 +229,14 @@ const transformRecordedData = (expectation, toSanitize) => { bodyObject.content = sanitizedEncodedContent; body = JSON.stringify(bodyObject); } else { - body = httpRequest.body.json; + body = JSON.stringify(bodyObject); } } else if (httpRequest.body && httpRequest.body.type === 'STRING' && httpRequest.body.string) { body = sanitizeString(httpRequest.body.string, toSanitize); + } else if (httpRequest.body) { + const str = + typeof httpRequest.body !== 'string' ? JSON.stringify(httpRequest.body) : httpRequest.body; + body = sanitizeString(str, toSanitize); } return body; }; @@ -246,8 +254,13 @@ const transformRecordedData = (expectation, toSanitize) => { encoding: 'base64', content: httpResponse.body.base64Bytes, }; - } else if (httpResponse.body) { - responseBody = httpResponse.body; + } else if (httpResponse.body && httpResponse.body.json) { + responseBody = JSON.stringify(httpResponse.body.json); + } else { + responseBody = + typeof httpResponse.body === 'string' + ? httpResponse.body + : httpResponse.body && JSON.stringify(httpResponse.body); } // replace recorded user with fake one diff --git a/cypress/utils/steps.js b/cypress/utils/steps.js index 649455d9..5778b5af 100644 --- a/cypress/utils/steps.js +++ b/cypress/utils/steps.js @@ -91,6 +91,18 @@ function goToMediaLibrary() { cy.contains('button', 'Media').click(); } +function assertUnpublishedEntryInEditor() { + cy.contains('button', 'Delete unpublished entry'); +} + +function assertPublishedEntryInEditor() { + cy.contains('button', 'Delete published entry'); +} + +function assertUnpublishedChangesInEditor() { + cy.contains('button', 'Delete unpublished changes'); +} + function goToEntry(entry) { goToCollections(); cy.get('a h2') @@ -252,12 +264,17 @@ function populateEntry(entry, onDone = flushClockAndSave) { const value = entry[key]; if (key === 'body') { cy.getMarkdownEditor() + .first() .click() .clear({ force: true }) .type(value, { force: true }); } else { - cy.get(`[id^="${key}-field"]`).clear({ force: true }); - cy.get(`[id^="${key}-field"]`).type(value, { force: true }); + cy.get(`[id^="${key}-field"]`) + .first() + .clear({ force: true }); + cy.get(`[id^="${key}-field"]`) + .first() + .type(value, { force: true }); } } @@ -305,7 +322,8 @@ function publishEntry({ createNew = false, duplicate = false } = {}) { selectDropdownItem('Publish', publishTypes.publishNow); } - assertNotification(notifications.saved); + // eslint-disable-next-line cypress/no-unnecessary-waiting + cy.wait(500); }); } @@ -686,4 +704,8 @@ module.exports = { publishAndDuplicateEntryInEditor, assertNotification, assertFieldValidationError, + flushClockAndSave, + assertPublishedEntryInEditor, + assertUnpublishedEntryInEditor, + assertUnpublishedChangesInEditor, }; diff --git a/packages/netlify-cms-backend-bitbucket/src/API.ts b/packages/netlify-cms-backend-bitbucket/src/API.ts index 02b0f070..0dc2e8c4 100644 --- a/packages/netlify-cms-backend-bitbucket/src/API.ts +++ b/packages/netlify-cms-backend-bitbucket/src/API.ts @@ -9,7 +9,6 @@ import { APIError, ApiRequest, AssetProxy, - Entry, PersistOptions, readFile, CMS_BRANCH_PREFIX, @@ -27,6 +26,7 @@ import { requestWithBackoff, readFileMetadata, throwOnConflictingBranches, + DataFile, } from 'netlify-cms-lib-util'; import { dirname } from 'path'; import { oneLine } from 'common-tags'; @@ -437,11 +437,11 @@ export default class API { // delete the file formData.append('files', file.path); } else if (file.newPath) { - const contentBlob = get(file, 'fileObj', new Blob([(file as Entry).raw])); + const contentBlob = get(file, 'fileObj', new Blob([(file as DataFile).raw])); toMove.push({ from: file.path, to: file.newPath, contentBlob }); } else { // add/modify the file - const contentBlob = get(file, 'fileObj', new Blob([(file as Entry).raw])); + const contentBlob = get(file, 'fileObj', new Blob([(file as DataFile).raw])); // Third param is filename header, in case path is `message`, `branch`, etc. formData.append(file.path, contentBlob, basename(file.path)); } @@ -502,10 +502,11 @@ export default class API { return files; } - async persistFiles(entry: Entry | null, mediaFiles: AssetProxy[], options: PersistOptions) { - const files = entry ? [entry, ...mediaFiles] : mediaFiles; + async persistFiles(dataFiles: DataFile[], mediaFiles: AssetProxy[], options: PersistOptions) { + const files = [...dataFiles, ...mediaFiles]; if (options.useWorkflow) { - return this.editorialWorkflowGit(files, entry as Entry, options); + const slug = dataFiles[0].slug; + return this.editorialWorkflowGit(files, slug, options); } else { return this.uploadFiles(files, { commitMessage: options.commitMessage, branch: this.branch }); } @@ -587,8 +588,12 @@ export default class API { return diffs; } - async editorialWorkflowGit(files: (Entry | AssetProxy)[], entry: Entry, options: PersistOptions) { - const contentKey = generateContentKey(options.collectionName as string, entry.slug); + async editorialWorkflowGit( + files: (DataFile | AssetProxy)[], + slug: string, + options: PersistOptions, + ) { + const contentKey = generateContentKey(options.collectionName as string, slug); const branch = branchFromContentKey(contentKey); const unpublished = options.unpublished || false; if (!unpublished) { @@ -620,9 +625,11 @@ export default class API { } } - deleteFile = (path: string, message: string) => { + deleteFiles = (paths: string[], message: string) => { const body = new FormData(); - body.append('files', path); + paths.forEach(path => { + body.append('files', path); + }); body.append('branch', this.branch); if (message) { body.append('message', message); diff --git a/packages/netlify-cms-backend-bitbucket/src/implementation.ts b/packages/netlify-cms-backend-bitbucket/src/implementation.ts index 5a91f438..1f4a0bd7 100644 --- a/packages/netlify-cms-backend-bitbucket/src/implementation.ts +++ b/packages/netlify-cms-backend-bitbucket/src/implementation.ts @@ -432,15 +432,17 @@ export default class BitbucketBackend implements Implementation { }; } - async persistEntry(entry: Entry, mediaFiles: AssetProxy[], options: PersistOptions) { + async persistEntry(entry: Entry, options: PersistOptions) { const client = await this.getLargeMediaClient(); // persistEntry is a transactional operation return runWithLock( this.lock, async () => this.api!.persistFiles( - entry, - client.enabled ? await getLargeMediaFilteredMediaFiles(client, mediaFiles) : mediaFiles, + entry.dataFiles, + client.enabled + ? await getLargeMediaFilteredMediaFiles(client, entry.assets) + : entry.assets, options, ), 'Failed to acquire persist entry lock', @@ -468,7 +470,7 @@ export default class BitbucketBackend implements Implementation { const [id] = await Promise.all([ getBlobSHA(fileObj), - this.api!.persistFiles(null, [mediaFile], options), + this.api!.persistFiles([], [mediaFile], options), ]); const url = URL.createObjectURL(fileObj); @@ -484,8 +486,8 @@ export default class BitbucketBackend implements Implementation { }; } - deleteFile(path: string, commitMessage: string) { - return this.api!.deleteFile(path, commitMessage); + deleteFiles(paths: string[], commitMessage: string) { + return this.api!.deleteFiles(paths, commitMessage); } traverseCursor(cursor: Cursor, action: string) { diff --git a/packages/netlify-cms-backend-git-gateway/src/implementation.ts b/packages/netlify-cms-backend-git-gateway/src/implementation.ts index 9a68ab33..1ec9c892 100644 --- a/packages/netlify-cms-backend-git-gateway/src/implementation.ts +++ b/packages/netlify-cms-backend-git-gateway/src/implementation.ts @@ -534,13 +534,14 @@ export default class GitGateway implements Implementation { return this.backend!.getMediaFile(path); } - async persistEntry(entry: Entry, mediaFiles: AssetProxy[], options: PersistOptions) { + async persistEntry(entry: Entry, options: PersistOptions) { const client = await this.getLargeMediaClient(); - return this.backend!.persistEntry( - entry, - client.enabled ? await getLargeMediaFilteredMediaFiles(client, mediaFiles) : mediaFiles, - options, - ); + if (client.enabled) { + const assets = await getLargeMediaFilteredMediaFiles(client, entry.assets); + return this.backend!.persistEntry({ ...entry, assets }, options); + } else { + return this.backend!.persistEntry(entry, options); + } } async persistMedia(mediaFile: AssetProxy, options: PersistOptions) { @@ -558,8 +559,8 @@ export default class GitGateway implements Implementation { displayURL, }; } - deleteFile(path: string, commitMessage: string) { - return this.backend!.deleteFile(path, commitMessage); + deleteFiles(paths: string[], commitMessage: string) { + return this.backend!.deleteFiles(paths, commitMessage); } async getDeployPreview(collection: string, slug: string) { let preview = await this.backend!.getDeployPreview(collection, slug); diff --git a/packages/netlify-cms-backend-github/src/API.ts b/packages/netlify-cms-backend-github/src/API.ts index fee5926b..d44b7615 100644 --- a/packages/netlify-cms-backend-github/src/API.ts +++ b/packages/netlify-cms-backend-github/src/API.ts @@ -9,7 +9,7 @@ import { localForage, basename, AssetProxy, - Entry as LibEntry, + DataFile, PersistOptions, readFileMetadata, CMS_BRANCH_PREFIX, @@ -62,10 +62,6 @@ interface TreeFile { raw?: string; } -export interface Entry extends LibEntry { - sha?: string; -} - type Override = Pick> & U; type TreeEntry = Override; @@ -877,8 +873,8 @@ export default class API { })); } - async persistFiles(entry: Entry | null, mediaFiles: AssetProxy[], options: PersistOptions) { - const files = entry ? mediaFiles.concat(entry) : mediaFiles; + async persistFiles(dataFiles: DataFile[], mediaFiles: AssetProxy[], options: PersistOptions) { + const files = mediaFiles.concat(dataFiles); const uploadPromises = files.map(file => this.uploadBlob(file)); await Promise.all(uploadPromises); @@ -896,12 +892,8 @@ export default class API { sha, }), ); - return this.editorialWorkflowGit( - files as TreeFile[], - entry as Entry, - mediaFilesList, - options, - ); + const slug = dataFiles[0].slug; + return this.editorialWorkflowGit(files as TreeFile[], slug, mediaFilesList, options); } } @@ -927,29 +919,16 @@ export default class API { } } - deleteFile(path: string, message: string) { + async deleteFiles(paths: string[], message: string) { if (this.useOpenAuthoring) { return Promise.reject('Cannot delete published entries as an Open Authoring user!'); } - const branch = this.branch; - - return this.getFileSha(path, { branch }).then(sha => { - const params: { sha: string; message: string; branch: string; author?: { date: string } } = { - sha, - message, - branch, - }; - const opts = { method: 'DELETE', params }; - if (this.commitAuthor) { - opts.params.author = { - ...this.commitAuthor, - date: new Date().toISOString(), - }; - } - const fileURL = `${this.repoURL}/contents/${path}`; - return this.request(fileURL, opts); - }); + const branchData = await this.getDefaultBranch(); + const files = paths.map(path => ({ path, sha: null })); + const changeTree = await this.updateTree(branchData.commit.sha, files); + const commit = await this.commit(message, changeTree); + await this.patchBranch(this.branch, commit.sha); } async createBranchAndPullRequest(branchName: string, sha: string, commitMessage: string) { @@ -966,11 +945,11 @@ export default class API { async editorialWorkflowGit( files: TreeFile[], - entry: Entry, + slug: string, mediaFilesList: MediaFile[], options: PersistOptions, ) { - const contentKey = this.generateContentKey(options.collectionName as string, entry.slug); + const contentKey = this.generateContentKey(options.collectionName as string, slug); const branch = branchFromContentKey(contentKey); const unpublished = options.unpublished || false; if (!unpublished) { diff --git a/packages/netlify-cms-backend-github/src/__tests__/API.spec.js b/packages/netlify-cms-backend-github/src/__tests__/API.spec.js index e6a59d56..37da94ff 100644 --- a/packages/netlify-cms-backend-github/src/__tests__/API.spec.js +++ b/packages/netlify-cms-backend-github/src/__tests__/API.spec.js @@ -229,12 +229,17 @@ describe('github API', () => { mockAPI(api, responses); const entry = { - slug: 'entry', - sha: 'abc', - path: 'content/posts/new-post.md', - raw: 'content', + dataFiles: [ + { + slug: 'entry', + sha: 'abc', + path: 'content/posts/new-post.md', + raw: 'content', + }, + ], + assets: [], }; - await api.persistFiles(entry, [], { commitMessage: 'commitMessage' }); + await api.persistFiles(entry.dataFiles, entry.assets, { commitMessage: 'commitMessage' }); expect(api.request).toHaveBeenCalledTimes(5); @@ -242,7 +247,10 @@ describe('github API', () => { '/repos/owner/repo/git/blobs', { method: 'POST', - body: JSON.stringify({ content: Base64.encode(entry.raw), encoding: 'base64' }), + body: JSON.stringify({ + content: Base64.encode(entry.dataFiles[0].raw), + encoding: 'base64', + }), }, ]); @@ -297,35 +305,38 @@ describe('github API', () => { api.editorialWorkflowGit = jest.fn(); const entry = { - slug: 'entry', - sha: 'abc', - path: 'content/posts/new-post.md', - raw: 'content', + dataFiles: [ + { + slug: 'entry', + sha: 'abc', + path: 'content/posts/new-post.md', + raw: 'content', + }, + ], + assets: [ + { + path: '/static/media/image-1.png', + sha: 'image-1.png', + }, + { + path: '/static/media/image-2.png', + sha: 'image-2.png', + }, + ], }; - const mediaFiles = [ - { - path: '/static/media/image-1.png', - sha: 'image-1.png', - }, - { - path: '/static/media/image-2.png', - sha: 'image-2.png', - }, - ]; - - await api.persistFiles(entry, mediaFiles, { useWorkflow: true }); + await api.persistFiles(entry.dataFiles, entry.assets, { useWorkflow: true }); expect(api.uploadBlob).toHaveBeenCalledTimes(3); - expect(api.uploadBlob).toHaveBeenCalledWith(entry); - expect(api.uploadBlob).toHaveBeenCalledWith(mediaFiles[0]); - expect(api.uploadBlob).toHaveBeenCalledWith(mediaFiles[1]); + expect(api.uploadBlob).toHaveBeenCalledWith(entry.dataFiles[0]); + expect(api.uploadBlob).toHaveBeenCalledWith(entry.assets[0]); + expect(api.uploadBlob).toHaveBeenCalledWith(entry.assets[1]); expect(api.editorialWorkflowGit).toHaveBeenCalledTimes(1); expect(api.editorialWorkflowGit).toHaveBeenCalledWith( - mediaFiles.concat(entry), - entry, + entry.assets.concat(entry.dataFiles), + entry.dataFiles[0].slug, [ { path: 'static/media/image-1.png', sha: 'image-1.png' }, { path: 'static/media/image-2.png', sha: 'image-2.png' }, diff --git a/packages/netlify-cms-backend-github/src/__tests__/implementation.spec.js b/packages/netlify-cms-backend-github/src/__tests__/implementation.spec.js index 15197a99..4fda0974 100644 --- a/packages/netlify-cms-backend-github/src/__tests__/implementation.spec.js +++ b/packages/netlify-cms-backend-github/src/__tests__/implementation.spec.js @@ -104,7 +104,7 @@ describe('github backend implementation', () => { }); expect(persistFiles).toHaveBeenCalledTimes(1); - expect(persistFiles).toHaveBeenCalledWith(null, [mediaFile], {}); + expect(persistFiles).toHaveBeenCalledWith([], [mediaFile], {}); expect(createObjectURL).toHaveBeenCalledTimes(1); expect(createObjectURL).toHaveBeenCalledWith(mediaFile.fileObj); }); diff --git a/packages/netlify-cms-backend-github/src/implementation.tsx b/packages/netlify-cms-backend-github/src/implementation.tsx index 0f1f23d1..1bc18492 100644 --- a/packages/netlify-cms-backend-github/src/implementation.tsx +++ b/packages/netlify-cms-backend-github/src/implementation.tsx @@ -30,10 +30,11 @@ import { contentKeyFromBranch, unsentRequest, branchFromContentKey, + Entry, } from 'netlify-cms-lib-util'; import AuthenticationPage from './AuthenticationPage'; import { Octokit } from '@octokit/rest'; -import API, { Entry, API_NAME } from './API'; +import API, { API_NAME } from './API'; import GraphQLAPI from './GraphQLAPI'; type GitHubUser = Octokit.UsersGetAuthenticatedResponse; @@ -473,18 +474,18 @@ export default class GitHub implements Implementation { ); } - persistEntry(entry: Entry, mediaFiles: AssetProxy[] = [], options: PersistOptions) { + persistEntry(entry: Entry, options: PersistOptions) { // persistEntry is a transactional operation return runWithLock( this.lock, - () => this.api!.persistFiles(entry, mediaFiles, options), + () => this.api!.persistFiles(entry.dataFiles, entry.assets, options), 'Failed to acquire persist entry lock', ); } async persistMedia(mediaFile: AssetProxy, options: PersistOptions) { try { - await this.api!.persistFiles(null, [mediaFile], options); + await this.api!.persistFiles([], [mediaFile], options); const { sha, path, fileObj } = mediaFile as AssetProxy & { sha: string }; const displayURL = URL.createObjectURL(fileObj); return { @@ -500,8 +501,8 @@ export default class GitHub implements Implementation { } } - deleteFile(path: string, commitMessage: string) { - return this.api!.deleteFile(path, commitMessage); + deleteFiles(paths: string[], commitMessage: string) { + return this.api!.deleteFiles(paths, commitMessage); } async traverseCursor(cursor: Cursor, action: string) { diff --git a/packages/netlify-cms-backend-gitlab/src/API.ts b/packages/netlify-cms-backend-gitlab/src/API.ts index 6d36350b..1c8861b0 100644 --- a/packages/netlify-cms-backend-gitlab/src/API.ts +++ b/packages/netlify-cms-backend-gitlab/src/API.ts @@ -6,7 +6,7 @@ import { APIError, Cursor, ApiRequest, - Entry, + DataFile, AssetProxy, PersistOptions, readFile, @@ -473,7 +473,7 @@ export default class API { const items: CommitItem[] = await Promise.all( files.map(async file => { const [base64Content, fileExists] = await Promise.all([ - result(file, 'toBase64', partial(this.toBase64, (file as Entry).raw)), + result(file, 'toBase64', partial(this.toBase64, (file as DataFile).raw)), this.isFileExists(file.path, branch), ]); @@ -515,10 +515,11 @@ export default class API { return items; } - async persistFiles(entry: Entry | null, mediaFiles: AssetProxy[], options: PersistOptions) { - const files = entry ? [entry, ...mediaFiles] : mediaFiles; + async persistFiles(dataFiles: DataFile[], mediaFiles: AssetProxy[], options: PersistOptions) { + const files = [...dataFiles, ...mediaFiles]; if (options.useWorkflow) { - return this.editorialWorkflowGit(files, entry as Entry, options); + const slug = dataFiles[0].slug; + return this.editorialWorkflowGit(files, slug, options); } else { const items = await this.getCommitItems(files, this.branch); return this.uploadAndCommit(items, { @@ -527,7 +528,7 @@ export default class API { } } - deleteFile = (path: string, commitMessage: string) => { + deleteFiles = (paths: string[], commitMessage: string) => { const branch = this.branch; // eslint-disable-next-line @typescript-eslint/camelcase const commitParams: CommitsParams = { commit_message: commitMessage, branch }; @@ -538,12 +539,11 @@ export default class API { // eslint-disable-next-line @typescript-eslint/camelcase commitParams.author_email = email; } - return flow([ - unsentRequest.withMethod('DELETE'), - // TODO: only send author params if they are defined. - unsentRequest.withParams(commitParams), - this.request, - ])(`${this.repoURL}/repository/files/${encodeURIComponent(path)}`); + + const items = paths.map(path => ({ path, action: CommitAction.DELETE })); + return this.uploadAndCommit(items, { + commitMessage, + }); }; async getMergeRequests(sourceBranch?: string) { @@ -723,8 +723,12 @@ export default class API { }); } - async editorialWorkflowGit(files: (Entry | AssetProxy)[], entry: Entry, options: PersistOptions) { - const contentKey = generateContentKey(options.collectionName as string, entry.slug); + async editorialWorkflowGit( + files: (DataFile | AssetProxy)[], + slug: string, + options: PersistOptions, + ) { + const contentKey = generateContentKey(options.collectionName as string, slug); const branch = branchFromContentKey(contentKey); const unpublished = options.unpublished || false; if (!unpublished) { diff --git a/packages/netlify-cms-backend-gitlab/src/implementation.ts b/packages/netlify-cms-backend-gitlab/src/implementation.ts index bc61a8af..c6288b57 100644 --- a/packages/netlify-cms-backend-gitlab/src/implementation.ts +++ b/packages/netlify-cms-backend-gitlab/src/implementation.ts @@ -263,11 +263,11 @@ export default class GitLab implements Implementation { }; } - async persistEntry(entry: Entry, mediaFiles: AssetProxy[], options: PersistOptions) { + async persistEntry(entry: Entry, options: PersistOptions) { // persistEntry is a transactional operation return runWithLock( this.lock, - () => this.api!.persistFiles(entry, mediaFiles, options), + () => this.api!.persistFiles(entry.dataFiles, entry.assets, options), 'Failed to acquire persist entry lock', ); } @@ -277,7 +277,7 @@ export default class GitLab implements Implementation { const [id] = await Promise.all([ getBlobSHA(fileObj), - this.api!.persistFiles(null, [mediaFile], options), + this.api!.persistFiles([], [mediaFile], options), ]); const { path } = mediaFile; @@ -294,8 +294,8 @@ export default class GitLab implements Implementation { }; } - deleteFile(path: string, commitMessage: string) { - return this.api!.deleteFile(path, commitMessage); + deleteFiles(paths: string[], commitMessage: string) { + return this.api!.deleteFiles(paths, commitMessage); } traverseCursor(cursor: Cursor, action: string) { diff --git a/packages/netlify-cms-backend-proxy/src/implementation.ts b/packages/netlify-cms-backend-proxy/src/implementation.ts index b0150427..c6298fb5 100644 --- a/packages/netlify-cms-backend-proxy/src/implementation.ts +++ b/packages/netlify-cms-backend-proxy/src/implementation.ts @@ -183,13 +183,13 @@ export default class ProxyBackend implements Implementation { }); } - async persistEntry(entry: Entry, assetProxies: AssetProxy[], options: PersistOptions) { - const assets = await Promise.all(assetProxies.map(serializeAsset)); + async persistEntry(entry: Entry, options: PersistOptions) { + const assets = await Promise.all(entry.assets.map(serializeAsset)); return this.request({ action: 'persistEntry', params: { branch: this.branch, - entry, + dataFiles: entry.dataFiles, assets, options: { ...options, status: options.status || this.options.initialWorkflowStatus }, cmsLabelPrefix: this.cmsLabelPrefix, @@ -244,10 +244,10 @@ export default class ProxyBackend implements Implementation { return deserializeMediaFile(file); } - deleteFile(path: string, commitMessage: string) { + deleteFiles(paths: string[], commitMessage: string) { return this.request({ - action: 'deleteFile', - params: { branch: this.branch, path, options: { commitMessage } }, + action: 'deleteFiles', + params: { branch: this.branch, paths, options: { commitMessage } }, }); } diff --git a/packages/netlify-cms-backend-test/src/__tests__/implementation.spec.js b/packages/netlify-cms-backend-test/src/__tests__/implementation.spec.js index 10e432be..b4b1a592 100644 --- a/packages/netlify-cms-backend-test/src/__tests__/implementation.spec.js +++ b/packages/netlify-cms-backend-test/src/__tests__/implementation.spec.js @@ -51,8 +51,11 @@ describe('test backend implementation', () => { const backend = new TestBackend({}); - const entry = { path: 'posts/some-post.md', raw: 'content', slug: 'some-post.md' }; - await backend.persistEntry(entry, [], { newEntry: true }); + const entry = { + dataFiles: [{ path: 'posts/some-post.md', raw: 'content', slug: 'some-post.md' }], + assets: [], + }; + await backend.persistEntry(entry, { newEntry: true }); expect(window.repoFiles).toEqual({ posts: { @@ -80,8 +83,11 @@ describe('test backend implementation', () => { const backend = new TestBackend({}); - const entry = { path: 'posts/new-post.md', raw: 'content', slug: 'new-post.md' }; - await backend.persistEntry(entry, [], { newEntry: true }); + const entry = { + dataFiles: [{ path: 'posts/new-post.md', raw: 'content', slug: 'new-post.md' }], + assets: [], + }; + await backend.persistEntry(entry, { newEntry: true }); expect(window.repoFiles).toEqual({ pages: { @@ -108,8 +114,8 @@ describe('test backend implementation', () => { const slug = 'dir1/dir2/some-post.md'; const path = `posts/${slug}`; - const entry = { path, raw: 'content', slug }; - await backend.persistEntry(entry, [], { newEntry: true }); + const entry = { dataFiles: [{ path, raw: 'content', slug }], assets: [] }; + await backend.persistEntry(entry, { newEntry: true }); expect(window.repoFiles).toEqual({ posts: { @@ -143,8 +149,8 @@ describe('test backend implementation', () => { const slug = 'dir1/dir2/some-post.md'; const path = `posts/${slug}`; - const entry = { path, raw: 'new content', slug }; - await backend.persistEntry(entry, [], { newEntry: false }); + const entry = { dataFiles: [{ path, raw: 'new content', slug }], assets: [] }; + await backend.persistEntry(entry, { newEntry: false }); expect(window.repoFiles).toEqual({ posts: { @@ -161,7 +167,7 @@ describe('test backend implementation', () => { }); }); - describe('deleteFile', () => { + describe('deleteFiles', () => { it('should delete entry by path', async () => { window.repoFiles = { posts: { @@ -173,7 +179,7 @@ describe('test backend implementation', () => { const backend = new TestBackend({}); - await backend.deleteFile('posts/some-post.md'); + await backend.deleteFiles(['posts/some-post.md']); expect(window.repoFiles).toEqual({ posts: {}, }); @@ -194,7 +200,7 @@ describe('test backend implementation', () => { const backend = new TestBackend({}); - await backend.deleteFile('posts/dir1/dir2/some-post.md'); + await backend.deleteFiles(['posts/dir1/dir2/some-post.md']); expect(window.repoFiles).toEqual({ posts: { dir1: { diff --git a/packages/netlify-cms-backend-test/src/implementation.ts b/packages/netlify-cms-backend-test/src/implementation.ts index c3127fb7..f05412dd 100644 --- a/packages/netlify-cms-backend-test/src/implementation.ts +++ b/packages/netlify-cms-backend-test/src/implementation.ts @@ -13,6 +13,7 @@ import { User, Config, ImplementationFile, + DataFile, } from 'netlify-cms-lib-util'; import { extname, dirname } from 'path'; import AuthenticationPage from './AuthenticationPage'; @@ -20,18 +21,20 @@ import AuthenticationPage from './AuthenticationPage'; type RepoFile = { path: string; content: string | AssetProxy }; type RepoTree = { [key: string]: RepoFile | RepoTree }; +type Diff = { + id: string; + originalPath?: string; + path: string; + newFile: boolean; + status: string; + content: string | AssetProxy; +}; + type UnpublishedRepoEntry = { slug: string; collection: string; status: string; - diffs: { - id: string; - originalPath?: string; - path: string; - newFile: boolean; - status: string; - content: string | AssetProxy; - }[]; + diffs: Diff[]; updatedAt: string; }; @@ -257,24 +260,25 @@ export default class TestBackend implements Implementation { async addOrUpdateUnpublishedEntry( key: string, - path: string, - newPath: string | undefined, - raw: string, + dataFiles: DataFile[], assetProxies: AssetProxy[], slug: string, collection: string, status: string, ) { - const currentDataFile = window.repoFilesUnpublished[key]?.diffs.find(d => d.path === path); - const originalPath = currentDataFile ? currentDataFile.originalPath : path; - const diffs = []; - diffs.push({ - originalPath, - id: newPath || path, - path: newPath || path, - newFile: isEmpty(getFile(originalPath as string, window.repoFiles)), - status: 'added', - content: raw, + const diffs: Diff[] = []; + dataFiles.forEach(dataFile => { + const { path, newPath, raw } = dataFile; + const currentDataFile = window.repoFilesUnpublished[key]?.diffs.find(d => d.path === path); + const originalPath = currentDataFile ? currentDataFile.originalPath : path; + diffs.push({ + originalPath, + id: newPath || path, + path: newPath || path, + newFile: isEmpty(getFile(originalPath as string, window.repoFiles)), + status: 'added', + content: raw, + }); }); assetProxies.forEach(a => { const asset = this.normalizeAsset(a); @@ -295,22 +299,18 @@ export default class TestBackend implements Implementation { }; } - async persistEntry( - { path, raw, slug, newPath }: Entry, - assetProxies: AssetProxy[], - options: PersistOptions, - ) { + async persistEntry(entry: Entry, options: PersistOptions) { if (options.useWorkflow) { + const slug = entry.dataFiles[0].slug; const key = `${options.collectionName}/${slug}`; const currentEntry = window.repoFilesUnpublished[key]; const status = currentEntry?.status || options.status || (this.options.initialWorkflowStatus as string); + this.addOrUpdateUnpublishedEntry( key, - path, - newPath, - raw, - assetProxies, + entry.dataFiles, + entry.assets, slug, options.collectionName as string, status, @@ -318,9 +318,12 @@ export default class TestBackend implements Implementation { return Promise.resolve(); } - writeFile(path, raw, window.repoFiles); - assetProxies.forEach(a => { - writeFile(a.path, raw, window.repoFiles); + entry.dataFiles.forEach(dataFile => { + const { path, raw } = dataFile; + writeFile(path, raw, window.repoFiles); + }); + entry.assets.forEach(a => { + writeFile(a.path, a, window.repoFiles); }); return Promise.resolve(); } @@ -409,8 +412,10 @@ export default class TestBackend implements Implementation { return Promise.resolve(normalizedAsset); } - deleteFile(path: string) { - deleteFile(path, window.repoFiles); + deleteFiles(paths: string[]) { + paths.forEach(path => { + deleteFile(path, window.repoFiles); + }); return Promise.resolve(); } diff --git a/packages/netlify-cms-core/src/actions/__tests__/config.spec.js b/packages/netlify-cms-core/src/actions/__tests__/config.spec.js index c04c05dc..10cacd69 100644 --- a/packages/netlify-cms-core/src/actions/__tests__/config.spec.js +++ b/packages/netlify-cms-core/src/actions/__tests__/config.spec.js @@ -533,6 +533,182 @@ describe('config', () => { ], }); }); + + describe('i18n', () => { + it('should set root i18n on collection when collection i18n is set to true', () => { + expect( + applyDefaults( + fromJS({ + i18n: { + structure: 'multiple_folders', + locales: ['en', 'de'], + }, + collections: [ + { folder: 'foo', i18n: true, fields: [{ name: 'title', widget: 'string' }] }, + ], + }), + ) + .getIn(['collections', 0, 'i18n']) + .toJS(), + ).toEqual({ structure: 'multiple_folders', locales: ['en', 'de'], default_locale: 'en' }); + }); + + it('should not set root i18n on collection when collection i18n is not set', () => { + expect( + applyDefaults( + fromJS({ + i18n: { + structure: 'multiple_folders', + locales: ['en', 'de'], + }, + collections: [{ folder: 'foo', fields: [{ name: 'title', widget: 'string' }] }], + }), + ).getIn(['collections', 0, 'i18n']), + ).toBeUndefined(); + }); + + it('should not set root i18n on collection when collection i18n is set to false', () => { + expect( + applyDefaults( + fromJS({ + i18n: { + structure: 'multiple_folders', + locales: ['en', 'de'], + }, + collections: [ + { folder: 'foo', i18n: false, fields: [{ name: 'title', widget: 'string' }] }, + ], + }), + ).getIn(['collections', 0, 'i18n']), + ).toBeUndefined(); + }); + + it('should merge root i18n on collection when collection i18n is set to an object', () => { + expect( + applyDefaults( + fromJS({ + i18n: { + structure: 'multiple_folders', + locales: ['en', 'de'], + default_locale: 'en', + }, + collections: [ + { + folder: 'foo', + i18n: { locales: ['en', 'fr'], default_locale: 'fr' }, + fields: [{ name: 'title', widget: 'string' }], + }, + ], + }), + ) + .getIn(['collections', 0, 'i18n']) + .toJS(), + ).toEqual({ structure: 'multiple_folders', locales: ['en', 'fr'], default_locale: 'fr' }); + }); + + it('should throw when i18n is set on files collection', () => { + expect(() => + applyDefaults( + fromJS({ + i18n: { + structure: 'multiple_folders', + locales: ['en', 'de'], + }, + collections: [ + { + files: [ + { name: 'file', file: 'file', fields: [{ name: 'title', widget: 'string' }] }, + ], + i18n: true, + }, + ], + }), + ), + ).toThrow('i18n configuration is not supported for files collection'); + }); + + it('should set i18n value to translate on field when i18n=true for field', () => { + expect( + applyDefaults( + fromJS({ + i18n: { + structure: 'multiple_folders', + locales: ['en', 'de'], + }, + collections: [ + { + folder: 'foo', + i18n: true, + fields: [{ name: 'title', widget: 'string', i18n: true }], + }, + ], + }), + ).getIn(['collections', 0, 'fields', 0, 'i18n']), + ).toEqual('translate'); + }); + + it('should set i18n value to none on field when i18n=false for field', () => { + expect( + applyDefaults( + fromJS({ + i18n: { + structure: 'multiple_folders', + locales: ['en', 'de'], + }, + collections: [ + { + folder: 'foo', + i18n: true, + fields: [{ name: 'title', widget: 'string', i18n: false }], + }, + ], + }), + ).getIn(['collections', 0, 'fields', 0, 'i18n']), + ).toEqual('none'); + }); + + it('should throw is default locale is missing from root i18n config', () => { + expect(() => + applyDefaults( + fromJS({ + i18n: { + structure: 'multiple_folders', + locales: ['en', 'de'], + default_locale: 'fr', + }, + collections: [ + { + folder: 'foo', + fields: [{ name: 'title', widget: 'string' }], + }, + ], + }), + ), + ).toThrow("i18n locales 'en, de' are missing the default locale fr"); + }); + + it('should throw is default locale is missing from collection i18n config', () => { + expect(() => + applyDefaults( + fromJS({ + i18n: { + structure: 'multiple_folders', + locales: ['en', 'de'], + }, + collections: [ + { + folder: 'foo', + i18n: { + default_locale: 'fr', + }, + fields: [{ name: 'title', widget: 'string' }], + }, + ], + }), + ), + ).toThrow("i18n locales 'en, de' are missing the default locale fr"); + }); + }); }); describe('detectProxyServer', () => { diff --git a/packages/netlify-cms-core/src/actions/config.js b/packages/netlify-cms-core/src/actions/config.js index b7cd7219..2ea70b60 100644 --- a/packages/netlify-cms-core/src/actions/config.js +++ b/packages/netlify-cms-core/src/actions/config.js @@ -6,6 +6,7 @@ import * as publishModes from 'Constants/publishModes'; import { validateConfig } from 'Constants/configSchema'; import { selectDefaultSortableFields, traverseFields } from '../reducers/collections'; import { resolveBackend } from 'coreSrc/backend'; +import { I18N, I18N_FIELD } from '../lib/i18n'; export const CONFIG_REQUEST = 'CONFIG_REQUEST'; export const CONFIG_SUCCESS = 'CONFIG_SUCCESS'; @@ -58,6 +59,59 @@ const setSnakeCaseConfig = field => { return field; }; +const setI18nField = field => { + if (field.get(I18N) === true) { + field = field.set(I18N, I18N_FIELD.TRANSLATE); + } else if (field.get(I18N) === false || !field.has(I18N)) { + field = field.set(I18N, I18N_FIELD.NONE); + } + return field; +}; + +const setI18nDefaults = (i18n, collection) => { + if (i18n && collection.has(I18N)) { + const collectionI18n = collection.get(I18N); + if (collectionI18n === true) { + collection = collection.set(I18N, i18n); + } else if (collectionI18n === false) { + collection = collection.delete(I18N); + } else { + const locales = collectionI18n.get('locales', i18n.get('locales')); + const defaultLocale = collectionI18n.get( + 'default_locale', + collectionI18n.has('locales') ? locales.first() : i18n.get('default_locale'), + ); + collection = collection.set(I18N, i18n.merge(collectionI18n)); + collection = collection.setIn([I18N, 'locales'], locales); + collection = collection.setIn([I18N, 'default_locale'], defaultLocale); + + throwOnMissingDefaultLocale(collection.get(I18N)); + } + + if (collectionI18n !== false) { + // set default values for i18n fields + collection = collection.set('fields', traverseFields(collection.get('fields'), setI18nField)); + } + } else { + collection = collection.delete(I18N); + collection = collection.set( + 'fields', + traverseFields(collection.get('fields'), field => field.delete(I18N)), + ); + } + return collection; +}; + +const throwOnMissingDefaultLocale = i18n => { + if (i18n && !i18n.get('locales').includes(i18n.get('default_locale'))) { + throw new Error( + `i18n locales '${i18n.get('locales').join(', ')}' are missing the default locale ${i18n.get( + 'default_locale', + )}`, + ); + } +}; + const defaults = { publish_mode: publishModes.SIMPLE, }; @@ -132,6 +186,10 @@ export function applyDefaults(config) { map.setIn(['slug', 'sanitize_replacement'], '-'); } + let i18n = config.get(I18N); + i18n = i18n?.set('default_locale', i18n.get('default_locale', i18n.get('locales').first())); + throwOnMissingDefaultLocale(i18n); + // Strip leading slash from collection folders and files map.set( 'collections', @@ -167,10 +225,15 @@ export function applyDefaults(config) { } else { collection = collection.set('meta', Map()); } + + collection = setI18nDefaults(i18n, collection); } const files = collection.get('files'); if (files) { + if (i18n && collection.has(I18N)) { + throw new Error('i18n configuration is not supported for files collection'); + } collection = collection.delete('nested'); collection = collection.delete('meta'); collection = collection.set( diff --git a/packages/netlify-cms-core/src/actions/editorialWorkflow.ts b/packages/netlify-cms-core/src/actions/editorialWorkflow.ts index f4c0571e..317e9735 100644 --- a/packages/netlify-cms-core/src/actions/editorialWorkflow.ts +++ b/packages/netlify-cms-core/src/actions/editorialWorkflow.ts @@ -4,7 +4,6 @@ import { actions as notifActions } from 'redux-notifications'; import { BEGIN, COMMIT, REVERT } from 'redux-optimist'; import { ThunkDispatch } from 'redux-thunk'; import { Map, List } from 'immutable'; -import { serializeValues } from '../lib/serializeEntryValues'; import { currentBackend, slugFromCustomPath } from '../backend'; import { selectPublishedSlugs, @@ -13,7 +12,6 @@ import { selectUnpublishedEntry, } from '../reducers'; import { selectEditingDraft } from '../reducers/entries'; -import { selectFields } from '../reducers/collections'; import { EDITORIAL_WORKFLOW, status, Status } from '../constants/publishModes'; import { EDITORIAL_WORKFLOW_ERROR } from 'netlify-cms-lib-util'; import { @@ -22,11 +20,11 @@ import { getMediaAssets, createDraftFromEntry, loadEntries, + getSerializedEntry, } from './entries'; import { createAssetProxy } from '../valueObjects/AssetProxy'; import { addAssets } from './media'; import { loadMedia } from './mediaLibrary'; - import ValidationErrorTypes from '../constants/validationErrorTypes'; import { Collection, EntryMap, State, Collections, EntryDraft, MediaFile } from '../types/redux'; import { AnyAction } from 'redux'; @@ -382,13 +380,7 @@ export function persistUnpublishedEntry(collection: Collection, existingUnpublis entry, }); - /** - * Serialize the values of any fields with registered serializers, and - * update the entry and entryDraft with the serialized values. - */ - const fields = selectFields(collection, entry.get('slug')); - const serializedData = serializeValues(entry.get('data'), fields); - const serializedEntry = entry.set('data', serializedData); + const serializedEntry = getSerializedEntry(collection, entry); const serializedEntryDraft = entryDraft.set('entry', serializedEntry); dispatch(unpublishedEntryPersisting(collection, serializedEntry, transactionID)); diff --git a/packages/netlify-cms-core/src/actions/entries.ts b/packages/netlify-cms-core/src/actions/entries.ts index 4f2029d5..7472af76 100644 --- a/packages/netlify-cms-core/src/actions/entries.ts +++ b/packages/netlify-cms-core/src/actions/entries.ts @@ -20,6 +20,7 @@ import { EntryField, SortDirection, ViewFilter, + Entry, } from '../types/redux'; import { ThunkDispatch } from 'redux-thunk'; @@ -30,6 +31,7 @@ import { selectIsFetching, selectEntriesSortFields, selectEntryByPath } from '.. import { selectCustomPath } from '../reducers/entryDraft'; import { navigateToEntry } from '../routing/history'; import { getProcessSegment } from '../lib/formatters'; +import { hasI18n, serializeI18n } from '../lib/i18n'; const { notifSend } = notifActions; @@ -349,15 +351,26 @@ export function discardDraft() { return { type: DRAFT_DISCARD }; } -export function changeDraftField( - field: EntryField, - value: string, - metadata: Record, - entries: EntryMap[], -) { +export function changeDraftField({ + field, + value, + metadata, + entries, + i18n, +}: { + field: EntryField; + value: string; + metadata: Record; + entries: EntryMap[]; + i18n?: { + currentLocale: string; + defaultLocale: string; + locales: string[]; + }; +}) { return { type: DRAFT_CHANGE_FIELD, - payload: { field, value, metadata, entries }, + payload: { field, value, metadata, entries, i18n }, }; } @@ -530,11 +543,13 @@ export function loadEntries(collection: Collection, page = 0) { dispatch(entriesLoading(collection)); try { + const loadAllEntries = collection.has('nested') || hasI18n(collection); + let response: { cursor: Cursor; pagination: number; entries: EntryValue[]; - } = await (collection.has('nested') + } = await (loadAllEntries ? // nested collections require all entries to construct the tree provider.listAllEntries(collection).then((entries: EntryValue[]) => ({ entries })) : provider.listEntries(collection, page)); @@ -760,6 +775,24 @@ export function getMediaAssets({ entry }: { entry: EntryMap }) { return assets; } +export const getSerializedEntry = (collection: Collection, entry: Entry) => { + /** + * Serialize the values of any fields with registered serializers, and + * update the entry and entryDraft with the serialized values. + */ + const fields = selectFields(collection, entry.get('slug')); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const serializeData = (data: any) => { + return serializeValues(data, fields); + }; + const serializedData = serializeData(entry.get('data')); + let serializedEntry = entry.set('data', serializedData); + if (hasI18n(collection)) { + serializedEntry = serializeI18n(collection, serializedEntry, serializeData); + } + return serializedEntry; +}; + export function persistEntry(collection: Collection) { return async (dispatch: ThunkDispatch, getState: () => State) => { const state = getState(); @@ -794,13 +827,7 @@ export function persistEntry(collection: Collection) { entry, }); - /** - * Serialize the values of any fields with registered serializers, and - * update the entry and entryDraft with the serialized values. - */ - const fields = selectFields(collection, entry.get('slug')); - const serializedData = serializeValues(entryDraft.getIn(['entry', 'data']), fields); - const serializedEntry = entry.set('data', serializedData); + const serializedEntry = getSerializedEntry(collection, entry); const serializedEntryDraft = entryDraft.set('entry', serializedEntry); dispatch(entryPersisting(collection, serializedEntry)); return backend @@ -811,7 +838,7 @@ export function persistEntry(collection: Collection) { assetProxies, usedSlugs, }) - .then((newSlug: string) => { + .then(async (newSlug: string) => { dispatch( notifSend({ message: { @@ -821,16 +848,17 @@ export function persistEntry(collection: Collection) { dismissAfter: 4000, }), ); + // re-load media library if entry had media files if (assetProxies.length > 0) { - dispatch(loadMedia()); + await dispatch(loadMedia()); } dispatch(entryPersisted(collection, serializedEntry, newSlug)); if (collection.has('nested')) { - dispatch(loadEntries(collection)); + await dispatch(loadEntries(collection)); } if (entry.get('slug') !== newSlug) { - dispatch(loadEntry(collection, newSlug)); + await dispatch(loadEntry(collection, newSlug)); navigateToEntry(collection.get('name'), newSlug); } }) diff --git a/packages/netlify-cms-core/src/backend.ts b/packages/netlify-cms-core/src/backend.ts index 00598c69..f3c1fc74 100644 --- a/packages/netlify-cms-core/src/backend.ts +++ b/packages/netlify-cms-core/src/backend.ts @@ -37,6 +37,8 @@ import { asyncLock, AsyncLock, UnpublishedEntry, + DataFile, + UnpublishedEntryDiff, } from 'netlify-cms-lib-util'; import { basename, join, extname, dirname } from 'path'; import { status } from './constants/publishModes'; @@ -55,9 +57,41 @@ import { import AssetProxy from './valueObjects/AssetProxy'; import { FOLDER, FILES } from './constants/collectionTypes'; import { selectCustomPath } from './reducers/entryDraft'; +import { + getI18nFilesDepth, + getI18nFiles, + hasI18n, + getFilePaths, + getI18nEntry, + groupEntries, + getI18nDataFiles, + getI18nBackup, + formatI18nBackup, +} from './lib/i18n'; const { extractTemplateVars, dateParsers, expandPath } = stringTemplate; +const updateAssetProxies = ( + assetProxies: AssetProxy[], + config: Config, + collection: Collection, + entryDraft: EntryDraft, + path: string, +) => { + assetProxies.map(asset => { + // update media files path based on entry path + const oldPath = asset.path; + const newPath = selectMediaFilePath( + config, + collection, + entryDraft.get('entry').set('path', path), + oldPath, + asset.field, + ); + asset.path = newPath; + }); +}; + export class LocalStorageAuthStore { storageKey = 'netlify-cms-user'; @@ -223,6 +257,7 @@ interface BackupEntry { raw: string; path: string; mediaFiles: MediaFile[]; + i18n?: Record; } interface PersistArgs { @@ -253,6 +288,18 @@ const prepareMetaPath = (path: string, collection: Collection) => { return dir.substr(collection.get('folder')!.length + 1) || '/'; }; +const collectionDepth = (collection: Collection) => { + let depth; + depth = + collection.get('nested')?.get('depth') || getPathDepth(collection.get('path', '') as string); + + if (hasI18n(collection)) { + depth = getI18nFilesDepth(collection, depth); + } + + return depth; +}; + export class Backend { implementation: Implementation; backendName: string; @@ -417,7 +464,6 @@ export class Backend { } processEntries(loadedEntries: ImplementationEntry[], collection: Collection) { - const collectionFilter = collection.get('filter'); const entries = loadedEntries.map(loadedEntry => createEntry( collection.get('name'), @@ -433,9 +479,17 @@ export class Backend { ); const formattedEntries = entries.map(this.entryWithFormat(collection)); // If this collection has a "filter" property, filter entries accordingly + const collectionFilter = collection.get('filter'); const filteredEntries = collectionFilter ? this.filterEntries({ entries: formattedEntries }, collectionFilter) : formattedEntries; + + if (hasI18n(collection)) { + const extension = selectFolderEntryExtension(collection); + const groupedEntries = groupEntries(collection, extension, entries); + return groupedEntries; + } + return filteredEntries; } @@ -445,10 +499,7 @@ export class Backend { const collectionType = collection.get('type'); if (collectionType === FOLDER) { listMethod = () => { - const depth = - collection.get('nested')?.get('depth') || - getPathDepth(collection.get('path', '') as string); - + const depth = collectionDepth(collection); return this.implementation.entriesByFolder( collection.get('folder') as string, extension, @@ -493,11 +544,8 @@ export class Backend { // for local searches and queries. async listAllEntries(collection: Collection) { if (collection.get('folder') && this.implementation.allEntriesByFolder) { + const depth = collectionDepth(collection); const extension = selectFolderEntryExtension(collection); - const depth = - collection.get('nested')?.get('depth') || - getPathDepth(collection.get('path', '') as string); - return this.implementation .allEntriesByFolder(collection.get('folder') as string, extension, depth) .then(entries => this.processEntries(entries, collection)); @@ -640,14 +688,23 @@ export class Backend { }); const label = selectFileEntryLabel(collection, slug); - const entry: EntryValue = this.entryWithFormat(collection)( - createEntry(collection.get('name'), slug, path, { - raw, - label, - mediaFiles, - meta: { path: prepareMetaPath(path, collection) }, - }), - ); + + const formatRawData = (raw: string) => { + return this.entryWithFormat(collection)( + createEntry(collection.get('name'), slug, path, { + raw, + label, + mediaFiles, + meta: { path: prepareMetaPath(path, collection) }, + }), + ); + }; + + const entry: EntryValue = formatRawData(raw); + if (hasI18n(collection) && backup.i18n) { + const i18n = formatI18nBackup(backup.i18n, formatRawData); + entry.i18n = i18n; + } return { entry }; } @@ -676,10 +733,16 @@ export class Backend { }), ); + let i18n; + if (hasI18n(collection)) { + i18n = getI18nBackup(collection, entry, entry => this.entryToRaw(collection, entry)); + } + await localForage.setItem(key, { raw, path: entry.get('path'), mediaFiles, + ...(i18n && { i18n }), }); const result = await localForage.setItem(getEntryBackupKey(), raw); return result; @@ -714,18 +777,31 @@ export class Backend { async getEntry(state: State, collection: Collection, slug: string) { const path = selectEntryPath(collection, slug) as string; const label = selectFileEntryLabel(collection, slug); + const extension = selectFolderEntryExtension(collection); - const loadedEntry = await this.implementation.getEntry(path); - let entry = createEntry(collection.get('name'), slug, loadedEntry.file.path, { - raw: loadedEntry.data, - label, - mediaFiles: [], - meta: { path: prepareMetaPath(loadedEntry.file.path, collection) }, - }); + const getEntryValue = async (path: string) => { + const loadedEntry = await this.implementation.getEntry(path); + let entry = createEntry(collection.get('name'), slug, loadedEntry.file.path, { + raw: loadedEntry.data, + label, + mediaFiles: [], + meta: { path: prepareMetaPath(loadedEntry.file.path, collection) }, + }); - entry = this.entryWithFormat(collection)(entry); - entry = await this.processEntry(state, collection, entry); - return entry; + entry = this.entryWithFormat(collection)(entry); + entry = await this.processEntry(state, collection, entry); + + return entry; + }; + + let entryValue: EntryValue; + if (hasI18n(collection)) { + entryValue = await getI18nEntry(collection, extension, path, slug, getEntryValue); + } else { + entryValue = await getEntryValue(path); + } + + return entryValue; } getMedia() { @@ -772,31 +848,6 @@ export class Backend { } else { extension = selectFolderEntryExtension(collection); } - const dataFiles = sortBy( - entryData.diffs.filter(d => d.path.endsWith(extension)), - f => f.path.length, - ); - // if the unpublished entry has no diffs, return the original - let data = ''; - let newFile = false; - let path = slug; - if (dataFiles.length <= 0) { - const loadedEntry = await this.implementation.getEntry( - selectEntryPath(collection, slug) as string, - ); - data = loadedEntry.data; - path = loadedEntry.file.path; - } else { - const entryFile = dataFiles[0]; - data = await this.implementation.unpublishedEntryDataFile( - collection.get('name'), - entryData.slug, - entryFile.path, - entryFile.id, - ); - newFile = entryFile.newFile; - path = entryFile.path; - } const mediaFiles: MediaFile[] = []; if (withMediaFiles) { @@ -813,18 +864,58 @@ export class Backend { ); mediaFiles.push(...files.map(f => ({ ...f, draft: true }))); } - const entry = createEntry(collection.get('name'), slug, path, { - raw: data, - isModification: !newFile, - label: collection && selectFileEntryLabel(collection, slug), - mediaFiles, - updatedOn: entryData.updatedAt, - status: entryData.status, - meta: { path: prepareMetaPath(path, collection) }, - }); - const entryWithFormat = this.entryWithFormat(collection)(entry); - return entryWithFormat; + const dataFiles = sortBy( + entryData.diffs.filter(d => d.path.endsWith(extension)), + f => f.path.length, + ); + + const formatData = (data: string, path: string, newFile: boolean) => { + const entry = createEntry(collection.get('name'), slug, path, { + raw: data, + isModification: !newFile, + label: collection && selectFileEntryLabel(collection, slug), + mediaFiles, + updatedOn: entryData.updatedAt, + status: entryData.status, + meta: { path: prepareMetaPath(path, collection) }, + }); + + const entryWithFormat = this.entryWithFormat(collection)(entry); + return entryWithFormat; + }; + + const readAndFormatDataFile = async (dataFile: UnpublishedEntryDiff) => { + const data = await this.implementation.unpublishedEntryDataFile( + collection.get('name'), + entryData.slug, + dataFile.path, + dataFile.id, + ); + const entryWithFormat = formatData(data, dataFile.path, dataFile.newFile); + return entryWithFormat; + }; + + // if the unpublished entry has no diffs, return the original + if (dataFiles.length <= 0) { + const loadedEntry = await this.implementation.getEntry( + selectEntryPath(collection, slug) as string, + ); + return formatData(loadedEntry.data, loadedEntry.file.path, false); + } else if (hasI18n(collection)) { + // we need to read all locales files and not just the changes + const path = selectEntryPath(collection, slug) as string; + const i18nFiles = getI18nDataFiles(collection, extension, path, slug, dataFiles); + let entries = await Promise.all( + i18nFiles.map(dataFile => readAndFormatDataFile(dataFile).catch(() => null)), + ); + entries = entries.filter(Boolean); + const grouped = await groupEntries(collection, extension, entries as EntryValue[]); + return grouped[0]; + } else { + const entryWithFormat = await readAndFormatDataFile(dataFiles[0]); + return entryWithFormat; + } } async unpublishedEntries(collections: Collections) { @@ -964,15 +1055,9 @@ export class Backend { const useWorkflow = selectUseWorkflow(config); - let entryObj: { - path: string; - slug: string; - raw: string; - newPath?: string; - }; - const customPath = selectCustomPath(collection, entryDraft); + let dataFile: DataFile; if (newEntry) { if (!selectAllowNewEntries(collection)) { throw new Error('Not allowed to create new entries in this collection'); @@ -985,27 +1070,16 @@ export class Backend { customPath, ); const path = customPath || (selectEntryPath(collection, slug) as string); - entryObj = { + dataFile = { path, slug, raw: this.entryToRaw(collection, entryDraft.get('entry')), }; - assetProxies.map(asset => { - // update media files path based on entry path - const oldPath = asset.path; - const newPath = selectMediaFilePath( - config, - collection, - entryDraft.get('entry').set('path', path), - oldPath, - asset.field, - ); - asset.path = newPath; - }); + updateAssetProxies(assetProxies, config, collection, entryDraft, path); } else { const slug = entryDraft.getIn(['entry', 'slug']); - entryObj = { + dataFile = { path: entryDraft.getIn(['entry', 'path']), // for workflow entries we refresh the slug on publish slug: customPath && !useWorkflow ? slugFromCustomPath(collection, customPath) : slug, @@ -1014,14 +1088,30 @@ export class Backend { }; } + const { slug, path, newPath } = dataFile; + + let dataFiles = [dataFile]; + if (hasI18n(collection)) { + const extension = selectFolderEntryExtension(collection); + dataFiles = getI18nFiles( + collection, + extension, + entryDraft.get('entry'), + (draftData: EntryMap) => this.entryToRaw(collection, draftData), + path, + slug, + newPath, + ); + } + const user = (await this.currentUser()) as User; const commitMessage = commitMessageFormatter( newEntry ? 'create' : 'update', config, { collection, - slug: entryObj.slug, - path: entryObj.path, + slug, + path, authorLogin: user.login, authorName: user.name, }, @@ -1043,7 +1133,13 @@ export class Backend { await this.invokePrePublishEvent(entryDraft.get('entry')); } - await this.implementation.persistEntry(entryObj, assetProxies, opts); + await this.implementation.persistEntry( + { + dataFiles, + assets: assetProxies, + }, + opts, + ); await this.invokePostSaveEvent(entryDraft.get('entry')); @@ -1051,7 +1147,7 @@ export class Backend { await this.invokePostPublishEvent(entryDraft.get('entry')); } - return entryObj.slug; + return slug; } async invokeEventWithEntry(event: string, entry: EntryMap) { @@ -1101,13 +1197,14 @@ export class Backend { } async deleteEntry(state: State, collection: Collection, slug: string) { + const config = state.config; const path = selectEntryPath(collection, slug) as string; + const extension = selectFolderEntryExtension(collection) as string; if (!selectAllowDeletion(collection)) { throw new Error('Not allowed to delete entries in this collection'); } - const config = state.config; const user = (await this.currentUser()) as User; const commitMessage = commitMessageFormatter( 'delete', @@ -1124,9 +1221,13 @@ export class Backend { const entry = selectEntry(state.entries, collection.get('name'), slug); await this.invokePreUnpublishEvent(entry); - const result = await this.implementation.deleteFile(path, commitMessage); + let paths = [path]; + if (hasI18n(collection)) { + paths = getFilePaths(collection, extension, path, slug); + } + await this.implementation.deleteFiles(paths, commitMessage); + await this.invokePostUnpublishEvent(entry); - return result; } async deleteMedia(config: Config, path: string) { @@ -1141,7 +1242,7 @@ export class Backend { }, user.useOpenAuthoring, ); - return this.implementation.deleteFile(path, commitMessage); + return this.implementation.deleteFiles([path], commitMessage); } persistUnpublishedEntry(args: PersistArgs) { diff --git a/packages/netlify-cms-core/src/components/Editor/Editor.js b/packages/netlify-cms-core/src/components/Editor/Editor.js index 6dc5e8c1..a5a1a709 100644 --- a/packages/netlify-cms-core/src/components/Editor/Editor.js +++ b/packages/netlify-cms-core/src/components/Editor/Editor.js @@ -196,9 +196,9 @@ export class Editor extends React.Component { this.props.persistLocalBackup(entry, collection); }, 2000); - handleChangeDraftField = (field, value, metadata) => { + handleChangeDraftField = (field, value, metadata, i18n) => { const entries = [this.props.unPublishedEntry, this.props.publishedEntry].filter(Boolean); - this.props.changeDraftField(field, value, metadata, entries); + this.props.changeDraftField({ field, value, metadata, entries, i18n }); }; handleChangeStatus = newStatusName => { @@ -418,6 +418,7 @@ export class Editor extends React.Component { deployPreview={deployPreview} loadDeployPreview={opts => loadDeployPreview(collection, slug, entry, isPublished, opts)} editorBackLink={editorBackLink} + t={t} /> ); } diff --git a/packages/netlify-cms-core/src/components/Editor/EditorControlPane/EditorControl.js b/packages/netlify-cms-core/src/components/Editor/EditorControlPane/EditorControl.js index 77257740..6634cec9 100644 --- a/packages/netlify-cms-core/src/components/Editor/EditorControlPane/EditorControl.js +++ b/packages/netlify-cms-core/src/components/Editor/EditorControlPane/EditorControl.js @@ -56,6 +56,14 @@ const styleStrings = { widgetError: ` border-color: ${colors.errorText}; `, + disabled: ` + pointer-events: none; + opacity: 0.5; + background: #ccc; + `, + hidden: ` + visibility: hidden; + `, }; const ControlContainer = styled.div` @@ -87,6 +95,17 @@ export const ControlHint = styled.p` transition: color ${transitions.main}; `; +const LabelComponent = ({ field, isActive, hasErrors, uniqueFieldId, isFieldOptional, t }) => { + const label = `${field.get('label', field.get('name'))}`; + const labelComponent = ( + + {label} {`${isFieldOptional ? ` (${t('editor.editorControl.field.optional')})` : ''}`} + + ); + + return labelComponent; +}; + class EditorControl extends React.Component { static propTypes = { value: PropTypes.oneOfType([ @@ -119,6 +138,10 @@ class EditorControl extends React.Component { parentIds: PropTypes.arrayOf(PropTypes.string), entry: ImmutablePropTypes.map.isRequired, collection: ImmutablePropTypes.map.isRequired, + isDisabled: PropTypes.bool, + isHidden: PropTypes.bool, + isFieldDuplicate: PropTypes.func, + isFieldHidden: PropTypes.func, }; static defaultProps = { @@ -175,6 +198,10 @@ class EditorControl extends React.Component { parentIds, t, validateMetaField, + isDisabled, + isHidden, + isFieldDuplicate, + isFieldHidden, } = this.props; const widgetName = field.get('widget'); @@ -191,7 +218,12 @@ class EditorControl extends React.Component { return ( {({ css, cx }) => ( - + {widget.globalStyles && } {errors && ( @@ -206,15 +238,14 @@ class EditorControl extends React.Component { )} )} - - {`${field.get('label', field.get('name'))}${ - isFieldOptional ? ` (${t('editor.editorControl.field.optional')})` : '' - }`} - + uniqueFieldId={this.uniqueFieldId} + isFieldOptional={isFieldOptional} + t={t} + /> {fieldHint && ( diff --git a/packages/netlify-cms-core/src/components/Editor/EditorControlPane/EditorControlPane.js b/packages/netlify-cms-core/src/components/Editor/EditorControlPane/EditorControlPane.js index acb41e46..8c54e522 100644 --- a/packages/netlify-cms-core/src/components/Editor/EditorControlPane/EditorControlPane.js +++ b/packages/netlify-cms-core/src/components/Editor/EditorControlPane/EditorControlPane.js @@ -1,8 +1,25 @@ import React from 'react'; import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; +import { css } from '@emotion/core'; import styled from '@emotion/styled'; import EditorControl from './EditorControl'; +import { + colors, + Dropdown, + DropdownItem, + StyledDropdownButton, + buttons, + text, +} from 'netlify-cms-ui-default'; +import { + getI18nInfo, + isFieldTranslatable, + isFieldDuplicate, + isFieldHidden, + getLocaleDataPath, + hasI18n, +} from '../../../lib/i18n'; const ControlPaneContainer = styled.div` max-width: 800px; @@ -11,7 +28,75 @@ const ControlPaneContainer = styled.div` font-size: 16px; `; +const LocaleButton = styled(StyledDropdownButton)` + ${buttons.button}; + ${buttons.medium}; + color: ${colors.controlLabel}; + background: ${colors.textFieldBorder}; + height: 100%; + + &:after { + top: 11px; + } +`; + +const LocaleButtonWrapper = styled.div` + display: flex; +`; + +const StyledDropdown = styled(Dropdown)` + width: max-content; + margin-top: 20px; + margin-bottom: 20px; +`; + +const LocaleDropdown = ({ locales, selectedLocale, onLocaleChange, t }) => { + return ( + { + return ( + + + {t('editor.editorControlPane.i18n.writingInLocale', { + locale: selectedLocale.toUpperCase(), + })} + + + ); + }} + > + {locales.map(l => ( + onLocaleChange(l)} + /> + ))} + + ); +}; + +const getFieldValue = ({ field, entry, isTranslatable, locale }) => { + if (field.get('meta')) { + return entry.getIn(['meta', field.get('name')]); + } + + if (isTranslatable) { + const dataPath = getLocaleDataPath(locale); + return entry.getIn([...dataPath, field.get('name')]); + } + + return entry.getIn(['data', field.get('name')]); +}; + export default class ControlPane extends React.Component { + state = { + selectedLocale: this.props.locale, + }; + componentValidate = {}; controlRef(field, wrappedControl) { @@ -22,23 +107,29 @@ export default class ControlPane extends React.Component { wrappedControl.innerWrappedControl?.validate || wrappedControl.validate; } - validate = () => { + handleLocaleChange = val => { + this.setState({ selectedLocale: val }); + }; + + validate = async () => { this.props.fields.forEach(field => { if (field.get('widget') === 'hidden') return; this.componentValidate[field.get('name')](); }); }; + switchToDefaultLocale = () => { + if (hasI18n(this.props.collection)) { + const { defaultLocale } = getI18nInfo(this.props.collection); + return new Promise(resolve => this.setState({ selectedLocale: defaultLocale }, resolve)); + } else { + return Promise.resolve(); + } + }; + render() { - const { - collection, - fields, - entry, - fieldsMetaData, - fieldsErrors, - onChange, - onValidate, - } = this.props; + const { collection, entry, fieldsMetaData, fieldsErrors, onChange, onValidate, t } = this.props; + const fields = this.props.fields; if (!collection || !fields) { return null; @@ -48,29 +139,59 @@ export default class ControlPane extends React.Component { return null; } + const { locales, defaultLocale } = getI18nInfo(collection); + const locale = this.state.selectedLocale; + const i18n = locales && { + currentLocale: locale, + locales, + defaultLocale, + }; + return ( - {fields.map((field, i) => { - return field.get('widget') === 'hidden' ? null : ( - - ); - })} + {locales && ( + + )} + {fields + .filter(f => f.get('widget') !== 'hidden') + .map((field, i) => { + const isTranslatable = isFieldTranslatable(field, locale, defaultLocale); + const isDuplicate = isFieldDuplicate(field, locale, defaultLocale); + const isHidden = isFieldHidden(field, locale, defaultLocale); + const key = i18n ? `${locale}_${i}` : i; + + return ( + + onChange(field, newValue, newMetadata, i18n) + } + onValidate={onValidate} + processControlRef={this.controlRef.bind(this)} + controlRef={this.controlRef} + entry={entry} + collection={collection} + isDisabled={isDuplicate} + isHidden={isHidden} + isFieldDuplicate={field => isFieldDuplicate(field, locale, defaultLocale)} + isFieldHidden={field => isFieldHidden(field, locale, defaultLocale)} + /> + ); + })} ); } diff --git a/packages/netlify-cms-core/src/components/Editor/EditorControlPane/Widget.js b/packages/netlify-cms-core/src/components/Editor/EditorControlPane/Widget.js index 6c29f25e..cde7cd69 100644 --- a/packages/netlify-cms-core/src/components/Editor/EditorControlPane/Widget.js +++ b/packages/netlify-cms-core/src/components/Editor/EditorControlPane/Widget.js @@ -60,6 +60,9 @@ export default class Widget extends Component { isEditorComponent: PropTypes.bool, isNewEditorComponent: PropTypes.bool, entry: ImmutablePropTypes.map.isRequired, + isDisabled: PropTypes.bool, + isFieldDuplicate: PropTypes.func, + isFieldHidden: PropTypes.func, }; shouldComponentUpdate(nextProps) { @@ -277,6 +280,9 @@ export default class Widget extends Component { isNewEditorComponent, parentIds, t, + isDisabled, + isFieldDuplicate, + isFieldHidden, } = this.props; return React.createElement(controlComponent, { @@ -323,6 +329,9 @@ export default class Widget extends Component { controlRef, parentIds, t, + isDisabled, + isFieldDuplicate, + isFieldHidden, }); } } diff --git a/packages/netlify-cms-core/src/components/Editor/EditorInterface.js b/packages/netlify-cms-core/src/components/Editor/EditorInterface.js index 53bab723..50517a26 100644 --- a/packages/netlify-cms-core/src/components/Editor/EditorInterface.js +++ b/packages/netlify-cms-core/src/components/Editor/EditorInterface.js @@ -16,10 +16,12 @@ import { ScrollSync, ScrollSyncPane } from 'react-scroll-sync'; import EditorControlPane from './EditorControlPane/EditorControlPane'; import EditorPreviewPane from './EditorPreviewPane/EditorPreviewPane'; import EditorToolbar from './EditorToolbar'; +import { hasI18n, getI18nInfo, getPreviewEntry } from '../../lib/i18n'; const PREVIEW_VISIBLE = 'cms.preview-visible'; const SCROLL_SYNC_ENABLED = 'cms.scroll-sync-enabled'; const SPLIT_PANE_POSITION = 'cms.split-pane-position'; +const I18N_VISIBLE = 'cms.i18n-visible'; const styles = { splitPane: css` @@ -100,8 +102,8 @@ const Editor = styled.div` const PreviewPaneContainer = styled.div` height: 100%; - overflow-y: auto; pointer-events: ${props => (props.blockEntry ? 'none' : 'auto')}; + overflow-y: ${props => (props.overFlow ? 'auto' : 'hidden')}; `; const ControlPaneContainer = styled(PreviewPaneContainer)` @@ -117,11 +119,28 @@ const ViewControls = styled.div` z-index: ${zIndex.zIndex299}; `; +const EditorContent = ({ + i18nVisible, + previewVisible, + editor, + editorWithEditor, + editorWithPreview, +}) => { + if (i18nVisible) { + return editorWithEditor; + } else if (previewVisible) { + return editorWithPreview; + } else { + return {editor}; + } +}; + class EditorInterface extends Component { state = { showEventBlocker: false, previewVisible: localStorage.getItem(PREVIEW_VISIBLE) !== 'false', scrollSyncEnabled: localStorage.getItem(SCROLL_SYNC_ENABLED) !== 'false', + i18nVisible: localStorage.getItem(I18N_VISIBLE) !== 'false', }; handleSplitPaneDragStart = () => { @@ -132,14 +151,16 @@ class EditorInterface extends Component { this.setState({ showEventBlocker: false }); }; - handleOnPersist = (opts = {}) => { + handleOnPersist = async (opts = {}) => { const { createNew = false, duplicate = false } = opts; + await this.controlPaneRef.switchToDefaultLocale(); this.controlPaneRef.validate(); this.props.onPersist({ createNew, duplicate }); }; - handleOnPublish = (opts = {}) => { + handleOnPublish = async (opts = {}) => { const { createNew = false, duplicate = false } = opts; + await this.controlPaneRef.switchToDefaultLocale(); this.controlPaneRef.validate(); this.props.onPublish({ createNew, duplicate }); }; @@ -156,6 +177,16 @@ class EditorInterface extends Component { localStorage.setItem(SCROLL_SYNC_ENABLED, newScrollSyncEnabled); }; + handleToggleI18n = () => { + const newI18nVisible = !this.state.i18nVisible; + this.setState({ i18nVisible: newI18nVisible }); + localStorage.setItem(I18N_VISIBLE, newI18nVisible); + }; + + handleLeftPanelLocaleChange = locale => { + this.setState({ leftPanelLocale: locale }); + }; + render() { const { collection, @@ -186,27 +217,46 @@ class EditorInterface extends Component { deployPreview, draftKey, editorBackLink, + t, } = this.props; - const { previewVisible, scrollSyncEnabled, showEventBlocker } = this.state; - + const { scrollSyncEnabled, showEventBlocker } = this.state; const collectionPreviewEnabled = collection.getIn(['editor', 'preview'], true); + const collectionI18nEnabled = hasI18n(collection); + const { locales, defaultLocale } = getI18nInfo(this.props.collection); + const editorProps = { + collection, + entry, + fields, + fieldsMetaData, + fieldsErrors, + onChange, + onValidate, + }; + const leftPanelLocale = this.state.leftPanelLocale || locales?.[0]; const editor = ( - + (this.controlPaneRef = c)} + locale={leftPanelLocale} + t={t} + onLocaleChange={this.handleLeftPanelLocaleChange} /> ); + const editor2 = ( + + + + ); + + const previewEntry = collectionI18nEnabled + ? getPreviewEntry(entry, leftPanelLocale, defaultLocale) + : entry; + const editorWithPreview = (
@@ -222,7 +272,7 @@ class EditorInterface extends Component { @@ -232,6 +282,27 @@ class EditorInterface extends Component { ); + const editorWithEditor = ( + +
+ localStorage.setItem(SPLIT_PANE_POSITION, size)} + onDragStarted={this.handleSplitPaneDragStart} + onDragFinished={this.handleSplitPaneDragFinished} + > + {editor} + {editor2} + +
+
+ ); + + const i18nVisible = collectionI18nEnabled && this.state.i18nVisible; + const previewVisible = collectionPreviewEnabled && this.state.previewVisible; + const scrollSyncVisible = i18nVisible || previewVisible; + return ( + {collectionI18nEnabled && ( + + )} {collectionPreviewEnabled && ( )} - {collectionPreviewEnabled && previewVisible && ( + {scrollSyncVisible && ( )} - {collectionPreviewEnabled && this.state.previewVisible ? ( - editorWithPreview - ) : ( - {editor} - )} + ); @@ -327,6 +410,7 @@ EditorInterface.propTypes = { deployPreview: ImmutablePropTypes.map, loadDeployPreview: PropTypes.func.isRequired, draftKey: PropTypes.string.isRequired, + t: PropTypes.func.isRequired, }; export default EditorInterface; diff --git a/packages/netlify-cms-core/src/constants/__tests__/configSchema.spec.js b/packages/netlify-cms-core/src/constants/__tests__/configSchema.spec.js index f33cecad..a9623247 100644 --- a/packages/netlify-cms-core/src/constants/__tests__/configSchema.spec.js +++ b/packages/netlify-cms-core/src/constants/__tests__/configSchema.spec.js @@ -450,5 +450,59 @@ describe('config', () => { ); }).not.toThrow(); }); + + describe('i18n', () => { + it('should throw error when locale has invalid characters', () => { + expect(() => { + validateConfig( + merge({}, validConfig, { + i18n: { + structure: 'multiple_folders', + locales: ['en', 'tr.TR'], + }, + }), + ); + }).toThrowError(`'i18n.locales[1]' should match pattern "^[a-zA-Z-_]+$"`); + }); + + it('should throw error when locale is less than 2 characters', () => { + expect(() => { + validateConfig( + merge({}, validConfig, { + i18n: { + structure: 'multiple_folders', + locales: ['en', 't'], + }, + }), + ); + }).toThrowError(`'i18n.locales[1]' should NOT be shorter than 2 characters`); + }); + + it('should throw error when locale is more than 10 characters', () => { + expect(() => { + validateConfig( + merge({}, validConfig, { + i18n: { + structure: 'multiple_folders', + locales: ['en', 'a_very_long_locale'], + }, + }), + ); + }).toThrowError(`'i18n.locales[1]' should NOT be longer than 10 characters`); + }); + + it('should allow valid locales strings', () => { + expect(() => { + validateConfig( + merge({}, validConfig, { + i18n: { + structure: 'multiple_folders', + locales: ['en', 'tr-TR', 'zh_CHS'], + }, + }), + ); + }).not.toThrow(); + }); + }); }); }); diff --git a/packages/netlify-cms-core/src/constants/configSchema.js b/packages/netlify-cms-core/src/constants/configSchema.js index 2a15b092..7479ea5c 100644 --- a/packages/netlify-cms-core/src/constants/configSchema.js +++ b/packages/netlify-cms-core/src/constants/configSchema.js @@ -1,8 +1,43 @@ import AJV from 'ajv'; -import { select, uniqueItemProperties, instanceof as instanceOf } from 'ajv-keywords/keywords'; +import { + select, + uniqueItemProperties, + instanceof as instanceOf, + prohibited, +} from 'ajv-keywords/keywords'; import ajvErrors from 'ajv-errors'; import { formatExtensions, frontmatterFormats, extensionFormatters } from 'Formats/formats'; import { getWidgets } from 'Lib/registry'; +import { I18N_STRUCTURE, I18N_FIELD } from '../lib/i18n'; + +const localeType = { type: 'string', minLength: 2, maxLength: 10, pattern: '^[a-zA-Z-_]+$' }; + +const i18n = { + type: 'object', + properties: { + structure: { type: 'string', enum: Object.values(I18N_STRUCTURE) }, + locales: { + type: 'array', + minItems: 2, + items: localeType, + uniqueItems: true, + }, + default_locale: localeType, + }, +}; + +const i18nRoot = { + ...i18n, + required: ['structure', 'locales'], +}; + +const i18nCollection = { + oneOf: [{ type: 'boolean' }, i18n], +}; + +const i18nField = { + oneOf: [{ type: 'boolean' }, { type: 'string', enum: Object.values(I18N_FIELD) }], +}; /** * Config for fields in both file and folder collections. @@ -20,6 +55,7 @@ const fieldsConfig = () => ({ label: { type: 'string' }, widget: { type: 'string' }, required: { type: 'boolean' }, + i18n: i18nField, hint: { type: 'string' }, pattern: { type: 'array', @@ -100,6 +136,7 @@ const getConfigSchema = () => ({ ], }, locale: { type: 'string', examples: ['en', 'fr', 'de'] }, + i18n: i18nRoot, site_url: { type: 'string', examples: ['https://example.com'] }, display_url: { type: 'string', examples: ['https://example.com'] }, logo_url: { type: 'string', examples: ['https://example.com/images/logo.svg'] }, @@ -219,6 +256,7 @@ const getConfigSchema = () => ({ additionalProperties: false, minProperties: 1, }, + i18n: i18nCollection, }, required: ['name', 'label'], oneOf: [{ required: ['files'] }, { required: ['folder', 'fields'] }], @@ -289,6 +327,7 @@ export function validateConfig(config) { uniqueItemProperties(ajv); select(ajv); instanceOf(ajv); + prohibited(ajv); ajvErrors(ajv); const valid = ajv.validate(getConfigSchema(), config); diff --git a/packages/netlify-cms-core/src/lib/__tests__/i18n.spec.js b/packages/netlify-cms-core/src/lib/__tests__/i18n.spec.js new file mode 100644 index 00000000..19f6047f --- /dev/null +++ b/packages/netlify-cms-core/src/lib/__tests__/i18n.spec.js @@ -0,0 +1,706 @@ +import { fromJS } from 'immutable'; +import * as i18n from '../i18n'; + +jest.mock('../../reducers/collections', () => { + return { + selectEntrySlug: () => 'index', + }; +}); + +describe('i18n', () => { + describe('hasI18n', () => { + it('should return false for collection with no i18n', () => { + expect(i18n.hasI18n(fromJS({}))).toBe(false); + }); + + it('should return true for collection with i18n', () => { + expect(i18n.hasI18n(fromJS({ i18n: { structure: i18n.I18N_STRUCTURE.SINGLE_FILE } }))).toBe( + true, + ); + }); + }); + + describe('getI18nInfo', () => { + it('should return empty object for collection with no i18n', () => { + expect(i18n.getI18nInfo(fromJS({}))).toEqual({}); + }); + + it('should return i18n object for collection with i18n', () => { + const i18nObject = { + locales: ['en', 'de'], + default_locale: 'en', + structure: i18n.I18N_STRUCTURE.MULTIPLE_FOLDERS, + }; + expect(i18n.getI18nInfo(fromJS({ i18n: i18nObject }))).toEqual({ + locales: ['en', 'de'], + defaultLocale: 'en', + structure: i18n.I18N_STRUCTURE.MULTIPLE_FOLDERS, + }); + }); + }); + + describe('getI18nFilesDepth', () => { + it('should increase depth when i18n structure is I18N_STRUCTURE.MULTIPLE_FOLDERS', () => { + expect( + i18n.getI18nFilesDepth( + fromJS({ i18n: { structure: i18n.I18N_STRUCTURE.MULTIPLE_FOLDERS } }), + 5, + ), + ).toBe(6); + }); + + it('should return current depth when i18n structure is not I18N_STRUCTURE.MULTIPLE_FOLDERS', () => { + expect( + i18n.getI18nFilesDepth( + fromJS({ i18n: { structure: i18n.I18N_STRUCTURE.MULTIPLE_FILES } }), + 5, + ), + ).toBe(5); + expect( + i18n.getI18nFilesDepth(fromJS({ i18n: { structure: i18n.I18N_STRUCTURE.SINGLE_FILE } }), 5), + ).toBe(5); + expect(i18n.getI18nFilesDepth(fromJS({}), 5)).toBe(5); + }); + }); + + describe('isFieldTranslatable', () => { + it('should return true when not default locale and has I18N_FIELD.TRANSLATE', () => { + expect( + i18n.isFieldTranslatable(fromJS({ i18n: i18n.I18N_FIELD.TRANSLATE }), 'en', 'de'), + ).toBe(true); + }); + + it('should return false when default locale and has I18N_FIELD.TRANSLATE', () => { + expect( + i18n.isFieldTranslatable(fromJS({ i18n: i18n.I18N_FIELD.TRANSLATE }), 'en', 'en'), + ).toBe(false); + }); + + it("should return false when doesn't have i18n", () => { + expect(i18n.isFieldTranslatable(fromJS({}), 'en', 'en')).toBe(false); + }); + }); + + describe('isFieldDuplicate', () => { + it('should return true when not default locale and has I18N_FIELD.TRANSLATE', () => { + expect(i18n.isFieldDuplicate(fromJS({ i18n: i18n.I18N_FIELD.DUPLICATE }), 'en', 'de')).toBe( + true, + ); + }); + + it('should return false when default locale and has I18N_FIELD.TRANSLATE', () => { + expect(i18n.isFieldDuplicate(fromJS({ i18n: i18n.I18N_FIELD.DUPLICATE }), 'en', 'en')).toBe( + false, + ); + }); + + it("should return false when doesn't have i18n", () => { + expect(i18n.isFieldDuplicate(fromJS({}), 'en', 'en')).toBe(false); + }); + }); + + describe('isFieldHidden', () => { + it('should return true when not default locale and has I18N_FIELD.NONE', () => { + expect(i18n.isFieldHidden(fromJS({ i18n: i18n.I18N_FIELD.NONE }), 'en', 'de')).toBe(true); + }); + + it('should return false when default locale and has I18N_FIELD.NONE', () => { + expect(i18n.isFieldHidden(fromJS({ i18n: i18n.I18N_FIELD.NONE }), 'en', 'en')).toBe(false); + }); + + it("should return false when doesn't have i18n", () => { + expect(i18n.isFieldHidden(fromJS({}), 'en', 'en')).toBe(false); + }); + }); + + describe('getLocaleDataPath', () => { + it('should return string array with locale as part of the data path', () => { + expect(i18n.getLocaleDataPath('de')).toEqual(['i18n', 'de', 'data']); + }); + }); + + describe('getDataPath', () => { + it('should not include locale in path for default locale', () => { + expect(i18n.getDataPath('en', 'en')).toEqual(['data']); + }); + + it('should include locale in path for non default locale', () => { + expect(i18n.getDataPath('de', 'en')).toEqual(['i18n', 'de', 'data']); + }); + }); + + describe('getFilePath', () => { + const args = ['md', 'src/content/index.md', 'index', 'de']; + it('should return directory path based on locale when structure is I18N_STRUCTURE.MULTIPLE_FOLDERS', () => { + expect(i18n.getFilePath(i18n.I18N_STRUCTURE.MULTIPLE_FOLDERS, ...args)).toEqual( + 'src/content/de/index.md', + ); + }); + + it('should return file path based on locale when structure is I18N_STRUCTURE.MULTIPLE_FILES', () => { + expect(i18n.getFilePath(i18n.I18N_STRUCTURE.MULTIPLE_FILES, ...args)).toEqual( + 'src/content/index.de.md', + ); + }); + + it('should not modify path when structure is I18N_STRUCTURE.SINGLE_FILE', () => { + expect(i18n.getFilePath(i18n.I18N_STRUCTURE.SINGLE_FILE, ...args)).toEqual( + 'src/content/index.md', + ); + }); + }); + + describe('getFilePaths', () => { + const args = ['md', 'src/content/index.md', 'index']; + + it('should return file paths for all locales', () => { + expect( + i18n.getFilePaths( + fromJS({ + i18n: { structure: i18n.I18N_STRUCTURE.MULTIPLE_FOLDERS, locales: ['en', 'de'] }, + }), + ...args, + ), + ).toEqual(['src/content/en/index.md', 'src/content/de/index.md']); + }); + }); + + describe('normalizeFilePath', () => { + it('should remove locale folder from path when structure is I18N_STRUCTURE.MULTIPLE_FOLDERS', () => { + expect( + i18n.normalizeFilePath( + i18n.I18N_STRUCTURE.MULTIPLE_FOLDERS, + 'src/content/en/index.md', + 'en', + ), + ).toEqual('src/content/index.md'); + }); + + it('should remove locale extension from path when structure is I18N_STRUCTURE.MULTIPLE_FILES', () => { + expect( + i18n.normalizeFilePath(i18n.I18N_STRUCTURE.MULTIPLE_FILES, 'src/content/index.en.md', 'en'), + ).toEqual('src/content/index.md'); + }); + + it('should not modify path when structure is I18N_STRUCTURE.SINGLE_FILE', () => { + expect( + i18n.normalizeFilePath(i18n.I18N_STRUCTURE.SINGLE_FILE, 'src/content/index.md', 'en'), + ).toEqual('src/content/index.md'); + }); + }); + + describe('getI18nFiles', () => { + const locales = ['en', 'de', 'fr']; + const default_locale = 'en'; + const args = [ + 'md', + fromJS({ + data: { title: 'en_title' }, + i18n: { de: { data: { title: 'de_title' } }, fr: { data: { title: 'fr_title' } } }, + }), + map => map.get('data').toJS(), + 'src/content/index.md', + 'index', + ]; + it('should return a single file when structure is I18N_STRUCTURE.SINGLE_FILE', () => { + expect( + i18n.getI18nFiles( + fromJS({ i18n: { structure: i18n.I18N_STRUCTURE.SINGLE_FILE, locales, default_locale } }), + ...args, + ), + ).toEqual([ + { + path: 'src/content/index.md', + raw: { + en: { title: 'en_title' }, + de: { title: 'de_title' }, + fr: { title: 'fr_title' }, + }, + slug: 'index', + }, + ]); + }); + + it('should return a folder based files when structure is I18N_STRUCTURE.MULTIPLE_FOLDERS', () => { + expect( + i18n.getI18nFiles( + fromJS({ + i18n: { structure: i18n.I18N_STRUCTURE.MULTIPLE_FOLDERS, locales, default_locale }, + }), + ...args, + ), + ).toEqual([ + { + path: 'src/content/en/index.md', + raw: { title: 'en_title' }, + slug: 'index', + }, + { + path: 'src/content/de/index.md', + raw: { title: 'de_title' }, + slug: 'index', + }, + { + path: 'src/content/fr/index.md', + raw: { title: 'fr_title' }, + slug: 'index', + }, + ]); + }); + + it('should return a extension based files when structure is I18N_STRUCTURE.MULTIPLE_FILES', () => { + expect( + i18n.getI18nFiles( + fromJS({ + i18n: { structure: i18n.I18N_STRUCTURE.MULTIPLE_FILES, locales, default_locale }, + }), + ...args, + ), + ).toEqual([ + { + path: 'src/content/index.en.md', + raw: { title: 'en_title' }, + slug: 'index', + }, + { + path: 'src/content/index.de.md', + raw: { title: 'de_title' }, + slug: 'index', + }, + { + path: 'src/content/index.fr.md', + raw: { title: 'fr_title' }, + slug: 'index', + }, + ]); + }); + }); + + describe('getI18nEntry', () => { + const locales = ['en', 'de', 'fr', 'es']; + const default_locale = 'en'; + const args = ['md', 'src/content/index.md', 'index']; + + it('should return i18n entry content when structure is I18N_STRUCTURE.MULTIPLE_FOLDERS', async () => { + const data = { + 'src/content/en/index.md': { + slug: 'index', + path: 'src/content/en/index.md', + data: { title: 'en_title' }, + }, + 'src/content/de/index.md': { + slug: 'index', + path: 'src/content/de/index.md', + data: { title: 'de_title' }, + }, + 'src/content/fr/index.md': { + slug: 'index', + path: 'src/content/fr/index.md', + data: { title: 'fr_title' }, + }, + }; + const getEntryValue = jest.fn(path => + data[path] ? Promise.resolve(data[path]) : Promise.reject('Not found'), + ); + + await expect( + i18n.getI18nEntry( + fromJS({ + i18n: { structure: i18n.I18N_STRUCTURE.MULTIPLE_FOLDERS, locales, default_locale }, + }), + ...args, + getEntryValue, + ), + ).resolves.toEqual({ + slug: 'index', + path: 'src/content/index.md', + data: { title: 'en_title' }, + i18n: { + de: { data: { title: 'de_title' } }, + fr: { data: { title: 'fr_title' } }, + }, + raw: '', + }); + }); + + it('should return i18n entry content when structure is I18N_STRUCTURE.MULTIPLE_FILES', async () => { + const data = { + 'src/content/index.en.md': { + slug: 'index', + path: 'src/content/index.en.md', + data: { title: 'en_title' }, + }, + 'src/content/index.de.md': { + slug: 'index', + path: 'src/content/index.de.md', + data: { title: 'de_title' }, + }, + 'src/content/index.fr.md': { + slug: 'index', + path: 'src/content/index.fr.md', + data: { title: 'fr_title' }, + }, + }; + const getEntryValue = jest.fn(path => + data[path] ? Promise.resolve(data[path]) : Promise.reject('Not found'), + ); + + await expect( + i18n.getI18nEntry( + fromJS({ + i18n: { structure: i18n.I18N_STRUCTURE.MULTIPLE_FILES, locales, default_locale }, + }), + ...args, + getEntryValue, + ), + ).resolves.toEqual({ + slug: 'index', + path: 'src/content/index.md', + data: { title: 'en_title' }, + i18n: { + de: { data: { title: 'de_title' } }, + fr: { data: { title: 'fr_title' } }, + }, + raw: '', + }); + }); + + it('should return single entry content when structure is I18N_STRUCTURE.SINGLE_FILE', async () => { + const data = { + 'src/content/index.md': { + slug: 'index', + path: 'src/content/index.md', + data: { + en: { title: 'en_title' }, + de: { title: 'de_title' }, + fr: { title: 'fr_title' }, + }, + }, + }; + const getEntryValue = jest.fn(path => Promise.resolve(data[path])); + + await expect( + i18n.getI18nEntry( + fromJS({ + i18n: { structure: i18n.I18N_STRUCTURE.SINGLE_FILE, locales, default_locale }, + }), + ...args, + getEntryValue, + ), + ).resolves.toEqual({ + slug: 'index', + path: 'src/content/index.md', + data: { + title: 'en_title', + }, + i18n: { + de: { data: { title: 'de_title' } }, + fr: { data: { title: 'fr_title' } }, + }, + raw: '', + }); + }); + }); + + describe('groupEntries', () => { + const locales = ['en', 'de', 'fr']; + const default_locale = 'en'; + const extension = 'md'; + + it('should group entries array when structure is I18N_STRUCTURE.MULTIPLE_FOLDERS', () => { + const entries = [ + { + slug: 'index', + path: 'src/content/en/index.md', + data: { title: 'en_title' }, + }, + { + slug: 'index', + path: 'src/content/de/index.md', + data: { title: 'de_title' }, + }, + { + slug: 'index', + path: 'src/content/fr/index.md', + data: { title: 'fr_title' }, + }, + ]; + + expect( + i18n.groupEntries( + fromJS({ + i18n: { structure: i18n.I18N_STRUCTURE.MULTIPLE_FOLDERS, locales, default_locale }, + }), + extension, + entries, + ), + ).toEqual([ + { + slug: 'index', + path: 'src/content/index.md', + data: { title: 'en_title' }, + i18n: { de: { data: { title: 'de_title' } }, fr: { data: { title: 'fr_title' } } }, + raw: '', + }, + ]); + }); + + it('should group entries array when structure is I18N_STRUCTURE.MULTIPLE_FILES', () => { + const entries = [ + { + slug: 'index', + path: 'src/content/index.en.md', + data: { title: 'en_title' }, + }, + { + slug: 'index', + path: 'src/content/index.de.md', + data: { title: 'de_title' }, + }, + { + slug: 'index', + path: 'src/content/index.fr.md', + data: { title: 'fr_title' }, + }, + ]; + + expect( + i18n.groupEntries( + fromJS({ + i18n: { structure: i18n.I18N_STRUCTURE.MULTIPLE_FILES, locales, default_locale }, + }), + extension, + entries, + ), + ).toEqual([ + { + slug: 'index', + path: 'src/content/index.md', + data: { title: 'en_title' }, + i18n: { de: { data: { title: 'de_title' } }, fr: { data: { title: 'fr_title' } } }, + raw: '', + }, + ]); + }); + + it('should return entries array as is when structure is I18N_STRUCTURE.SINGLE_FILE', () => { + const entries = [ + { + slug: 'index', + path: 'src/content/index.md', + data: { + en: { title: 'en_title' }, + de: { title: 'de_title' }, + fr: { title: 'fr_title' }, + }, + }, + ]; + + expect( + i18n.groupEntries( + fromJS({ + i18n: { structure: i18n.I18N_STRUCTURE.SINGLE_FILE, locales, default_locale }, + }), + extension, + entries, + ), + ).toEqual([ + { + slug: 'index', + path: 'src/content/index.md', + data: { + title: 'en_title', + }, + i18n: { de: { data: { title: 'de_title' } }, fr: { data: { title: 'fr_title' } } }, + raw: '', + }, + ]); + }); + }); + + describe('getI18nDataFiles', () => { + const locales = ['en', 'de', 'fr']; + const default_locale = 'en'; + + const args = ['md', 'src/content/index.md', 'index']; + + it('should add missing locale files to diff files when structure is MULTIPLE_FOLDERS', () => { + expect( + i18n.getI18nDataFiles( + fromJS({ + i18n: { structure: i18n.I18N_STRUCTURE.MULTIPLE_FOLDERS, locales, default_locale }, + }), + ...args, + [{ path: 'src/content/fr/index.md', id: 'id', newFile: false }], + ), + ).toEqual([ + { path: 'src/content/en/index.md', id: '', newFile: false }, + { path: 'src/content/de/index.md', id: '', newFile: false }, + { path: 'src/content/fr/index.md', id: 'id', newFile: false }, + ]); + }); + + it('should add missing locale files to diff files when structure is MULTIPLE_FILES', () => { + expect( + i18n.getI18nDataFiles( + fromJS({ + i18n: { structure: i18n.I18N_STRUCTURE.MULTIPLE_FILES, locales, default_locale }, + }), + ...args, + [{ path: 'src/content/index.fr.md', id: 'id', newFile: false }], + ), + ).toEqual([ + { path: 'src/content/index.en.md', id: '', newFile: false }, + { path: 'src/content/index.de.md', id: '', newFile: false }, + { path: 'src/content/index.fr.md', id: 'id', newFile: false }, + ]); + }); + + it('should return a single file when structure is SINGLE_FILE', () => { + expect( + i18n.getI18nDataFiles( + fromJS({ + i18n: { structure: i18n.I18N_STRUCTURE.SINGLE_FILE, locales, default_locale }, + }), + ...args, + [{ path: 'src/content/index.md', id: 'id', newFile: false }], + ), + ).toEqual([{ path: 'src/content/index.md', id: 'id', newFile: false }]); + }); + }); + + describe('getI18nBackup', () => { + it('should return i18n with raw data', () => { + const locales = ['en', 'de', 'fr']; + const default_locale = 'en'; + + expect( + i18n.getI18nBackup( + fromJS({ + i18n: { structure: i18n.I18N_STRUCTURE.MULTIPLE_FILES, locales, default_locale }, + }), + fromJS({ + data: 'raw_en', + i18n: { + de: { data: 'raw_de' }, + fr: { data: 'raw_fr' }, + }, + }), + e => e.get('data'), + ), + ).toEqual({ de: { raw: 'raw_de' }, fr: { raw: 'raw_fr' } }); + }); + }); + + describe('formatI18nBackup', () => { + it('should return i18n with formatted data', () => { + expect( + i18n.formatI18nBackup({ de: { raw: 'raw_de' }, fr: { raw: 'raw_fr' } }, raw => ({ + data: raw, + })), + ).toEqual({ de: { data: 'raw_de' }, fr: { data: 'raw_fr' } }); + }); + }); + + describe('duplicateI18nFields', () => { + it('should duplicate non nested field when field i18n is DUPLICATE', () => { + const date = new Date('2020/01/01'); + expect( + i18n + .duplicateI18nFields( + fromJS({ entry: { data: { date } } }), + fromJS({ name: 'date', i18n: i18n.I18N_FIELD.DUPLICATE }), + ['en', 'de', 'fr'], + 'en', + ) + .toJS(), + ).toEqual({ + entry: { + data: { date }, + i18n: { + de: { data: { date } }, + fr: { data: { date } }, + }, + }, + }); + }); + + it('should not duplicate field when field i18n is not DUPLICATE', () => { + const date = new Date('2020/01/01'); + [i18n.I18N_FIELD.TRANSLATE, i18n.I18N_FIELD.TRANSLATE.DUPLICATE].forEach(fieldI18n => { + expect( + i18n + .duplicateI18nFields( + fromJS({ entry: { data: { date } } }), + fromJS({ name: 'date', i18n: fieldI18n }), + ['en', 'de', 'fr'], + 'en', + ) + .toJS(), + ).toEqual({ + entry: { + data: { date }, + }, + }); + }); + }); + + it('should duplicate nested field when nested fields i18n is DUPLICATE', () => { + const date = new Date('2020/01/01'); + const value = fromJS({ title: 'title', date, boolean: true }); + expect( + i18n + .duplicateI18nFields( + fromJS({ entry: { data: { object: value } } }), + fromJS({ + name: 'object', + fields: [ + { name: 'string', i18n: i18n.I18N_FIELD.TRANSLATE }, + { name: 'date', i18n: i18n.I18N_FIELD.DUPLICATE }, + { name: 'boolean', i18n: i18n.I18N_FIELD.NONE }, + ], + i18n: i18n.I18N_FIELD.TRANSLATE, + }), + ['en', 'de', 'fr'], + 'en', + ) + .toJS(), + ).toEqual({ + entry: { + data: { object: value.toJS() }, + i18n: { + de: { data: { object: { date } } }, + fr: { data: { object: { date } } }, + }, + }, + }); + }); + }); + + describe('getPreviewEntry', () => { + it('should set data to i18n data when locale is not default', () => { + expect( + i18n + .getPreviewEntry( + fromJS({ + data: { title: 'en', body: 'markdown' }, + i18n: { de: { data: { title: 'de' } } }, + }), + 'de', + ) + .toJS(), + ).toEqual({ + data: { title: 'de' }, + i18n: { de: { data: { title: 'de' } } }, + }); + }); + + it('should not change entry for default locale', () => { + const entry = fromJS({ + data: { title: 'en', body: 'markdown' }, + i18n: { de: { data: { title: 'de' } } }, + }); + expect(i18n.getPreviewEntry(entry, 'en', 'en')).toBe(entry); + }); + }); +}); diff --git a/packages/netlify-cms-core/src/lib/i18n.ts b/packages/netlify-cms-core/src/lib/i18n.ts new file mode 100644 index 00000000..5eb903b3 --- /dev/null +++ b/packages/netlify-cms-core/src/lib/i18n.ts @@ -0,0 +1,407 @@ +import { Map, List } from 'immutable'; +import { set, trimEnd, groupBy } from 'lodash'; +import { Collection, Entry, EntryDraft, EntryField, EntryMap } from '../types/redux'; +import { selectEntrySlug } from '../reducers/collections'; +import { EntryValue } from '../valueObjects/Entry'; + +export const I18N = 'i18n'; + +export enum I18N_STRUCTURE { + MULTIPLE_FOLDERS = 'multiple_folders', + MULTIPLE_FILES = 'multiple_files', + SINGLE_FILE = 'single_file', +} + +export enum I18N_FIELD { + TRANSLATE = 'translate', + DUPLICATE = 'duplicate', + NONE = 'none', +} + +export const hasI18n = (collection: Collection) => { + return collection.has(I18N); +}; + +type I18nInfo = { + locales: string[]; + defaultLocale: string; + structure: I18N_STRUCTURE; +}; + +export const getI18nInfo = (collection: Collection) => { + if (!hasI18n(collection)) { + return {}; + } + const { structure, locales, default_locale: defaultLocale } = collection.get(I18N).toJS(); + return { structure, locales, defaultLocale } as I18nInfo; +}; + +export const getI18nFilesDepth = (collection: Collection, depth: number) => { + const { structure } = getI18nInfo(collection) as I18nInfo; + if (structure === I18N_STRUCTURE.MULTIPLE_FOLDERS) { + return depth + 1; + } + return depth; +}; + +export const isFieldTranslatable = (field: EntryField, locale: string, defaultLocale: string) => { + const isTranslatable = locale !== defaultLocale && field.get(I18N) === I18N_FIELD.TRANSLATE; + return isTranslatable; +}; + +export const isFieldDuplicate = (field: EntryField, locale: string, defaultLocale: string) => { + const isDuplicate = locale !== defaultLocale && field.get(I18N) === I18N_FIELD.DUPLICATE; + return isDuplicate; +}; + +export const isFieldHidden = (field: EntryField, locale: string, defaultLocale: string) => { + const isHidden = locale !== defaultLocale && field.get(I18N) === I18N_FIELD.NONE; + return isHidden; +}; + +export const getLocaleDataPath = (locale: string) => { + return [I18N, locale, 'data']; +}; + +export const getDataPath = (locale: string, defaultLocale: string) => { + const dataPath = locale !== defaultLocale ? getLocaleDataPath(locale) : ['data']; + return dataPath; +}; + +export const getFilePath = ( + structure: I18N_STRUCTURE, + extension: string, + path: string, + slug: string, + locale: string, +) => { + switch (structure) { + case I18N_STRUCTURE.MULTIPLE_FOLDERS: + return path.replace(`/${slug}`, `/${locale}/${slug}`); + case I18N_STRUCTURE.MULTIPLE_FILES: + return path.replace(extension, `${locale}.${extension}`); + case I18N_STRUCTURE.SINGLE_FILE: + default: + return path; + } +}; + +export const getLocaleFromPath = (structure: I18N_STRUCTURE, extension: string, path: string) => { + switch (structure) { + case I18N_STRUCTURE.MULTIPLE_FOLDERS: { + const parts = path.split('/'); + // filename + parts.pop(); + // locale + return parts.pop(); + } + case I18N_STRUCTURE.MULTIPLE_FILES: { + const parts = trimEnd(path, `.${extension}`); + return parts.split('.').pop(); + } + case I18N_STRUCTURE.SINGLE_FILE: + default: + return ''; + } +}; + +export const getFilePaths = ( + collection: Collection, + extension: string, + path: string, + slug: string, +) => { + const { structure, locales } = getI18nInfo(collection) as I18nInfo; + const paths = locales.map(locale => + getFilePath(structure as I18N_STRUCTURE, extension, path, slug, locale), + ); + + return paths; +}; + +export const normalizeFilePath = (structure: I18N_STRUCTURE, path: string, locale: string) => { + switch (structure) { + case I18N_STRUCTURE.MULTIPLE_FOLDERS: + return path.replace(`${locale}/`, ''); + case I18N_STRUCTURE.MULTIPLE_FILES: + return path.replace(`.${locale}`, ''); + case I18N_STRUCTURE.SINGLE_FILE: + default: + return path; + } +}; + +export const getI18nFiles = ( + collection: Collection, + extension: string, + entryDraft: EntryMap, + entryToRaw: (entryDraft: EntryMap) => string, + path: string, + slug: string, + newPath?: string, +) => { + const { structure, defaultLocale, locales } = getI18nInfo(collection) as I18nInfo; + + if (structure === I18N_STRUCTURE.SINGLE_FILE) { + const data = locales.reduce((map, locale) => { + const dataPath = getDataPath(locale, defaultLocale); + return map.set(locale, entryDraft.getIn(dataPath)); + }, Map({})); + const draft = entryDraft.set('data', data); + + return [ + { + path: getFilePath(structure, extension, path, slug, locales[0]), + slug, + raw: entryToRaw(draft), + ...(newPath && { + newPath: getFilePath(structure, extension, newPath, slug, locales[0]), + }), + }, + ]; + } + + const dataFiles = locales + .map(locale => { + const dataPath = getDataPath(locale, defaultLocale); + const draft = entryDraft.set('data', entryDraft.getIn(dataPath)); + return { + path: getFilePath(structure, extension, path, slug, locale), + slug, + raw: draft.get('data') ? entryToRaw(draft) : '', + ...(newPath && { + newPath: getFilePath(structure, extension, newPath, slug, locale), + }), + }; + }) + .filter(dataFile => dataFile.raw); + return dataFiles; +}; + +export const getI18nBackup = ( + collection: Collection, + entry: EntryMap, + entryToRaw: (entry: EntryMap) => string, +) => { + const { locales, defaultLocale } = getI18nInfo(collection) as I18nInfo; + + const i18nBackup = locales + .filter(l => l !== defaultLocale) + .reduce((acc, locale) => { + const dataPath = getDataPath(locale, defaultLocale); + const data = entry.getIn(dataPath); + if (!data) { + return acc; + } + const draft = entry.set('data', data); + return { ...acc, [locale]: { raw: entryToRaw(draft) } }; + }, {} as Record); + + return i18nBackup; +}; + +export const formatI18nBackup = ( + i18nBackup: Record, + formatRawData: (raw: string) => EntryValue, +) => { + const i18n = Object.entries(i18nBackup).reduce((acc, [locale, { raw }]) => { + const entry = formatRawData(raw); + return { ...acc, [locale]: { data: entry.data } }; + }, {}); + + return i18n; +}; + +const mergeValues = ( + collection: Collection, + structure: I18N_STRUCTURE, + defaultLocale: string, + values: { locale: string; value: EntryValue }[], +) => { + let defaultEntry = values.find(e => e.locale === defaultLocale); + if (!defaultEntry) { + defaultEntry = values[0]; + console.warn(`Could not locale entry for default locale '${defaultLocale}'`); + } + const i18n = values + .filter(e => e.locale !== defaultEntry!.locale) + .reduce((acc, { locale, value }) => { + const dataPath = getLocaleDataPath(locale); + return set(acc, dataPath, value.data); + }, {}); + + const path = normalizeFilePath(structure, defaultEntry.value.path, defaultLocale); + const slug = selectEntrySlug(collection, path) as string; + const entryValue: EntryValue = { + ...defaultEntry.value, + raw: '', + ...i18n, + path, + slug, + }; + + return entryValue; +}; + +const mergeSingleFileValue = (entryValue: EntryValue, defaultLocale: string, locales: string[]) => { + const data = entryValue.data[defaultLocale]; + const i18n = locales + .filter(l => l !== defaultLocale) + .map(l => ({ locale: l, value: entryValue.data[l] })) + .filter(e => e.value) + .reduce((acc, e) => { + return { ...acc, [e.locale]: { data: e.value } }; + }, {}); + + return { + ...entryValue, + data, + i18n, + raw: '', + }; +}; + +export const getI18nEntry = async ( + collection: Collection, + extension: string, + path: string, + slug: string, + getEntryValue: (path: string) => Promise, +) => { + const { structure, locales, defaultLocale } = getI18nInfo(collection) as I18nInfo; + + let entryValue: EntryValue; + if (structure === I18N_STRUCTURE.SINGLE_FILE) { + entryValue = mergeSingleFileValue(await getEntryValue(path), defaultLocale, locales); + } else { + const entryValues = await Promise.all( + locales.map(async locale => { + const entryPath = getFilePath(structure, extension, path, slug, locale); + const value = await getEntryValue(entryPath).catch(() => null); + return { value, locale }; + }), + ); + + const nonNullValues = entryValues.filter(e => e.value !== null) as { + value: EntryValue; + locale: string; + }[]; + + entryValue = mergeValues(collection, structure, defaultLocale, nonNullValues); + } + + return entryValue; +}; + +export const groupEntries = (collection: Collection, extension: string, entries: EntryValue[]) => { + const { structure, defaultLocale, locales } = getI18nInfo(collection) as I18nInfo; + if (structure === I18N_STRUCTURE.SINGLE_FILE) { + return entries.map(e => mergeSingleFileValue(e, defaultLocale, locales)); + } + + const grouped = groupBy( + entries.map(e => ({ + locale: getLocaleFromPath(structure, extension, e.path) as string, + value: e, + })), + ({ locale, value: e }) => { + return normalizeFilePath(structure, e.path, locale); + }, + ); + + const groupedEntries = Object.values(grouped).reduce((acc, values) => { + const entryValue = mergeValues(collection, structure, defaultLocale, values); + return [...acc, entryValue]; + }, [] as EntryValue[]); + + return groupedEntries; +}; + +export const getI18nDataFiles = ( + collection: Collection, + extension: string, + path: string, + slug: string, + diffFiles: { path: string; id: string; newFile: boolean }[], +) => { + const { structure } = getI18nInfo(collection) as I18nInfo; + if (structure === I18N_STRUCTURE.SINGLE_FILE) { + return diffFiles; + } + const paths = getFilePaths(collection, extension, path, slug); + const dataFiles = paths.reduce((acc, path) => { + const dataFile = diffFiles.find(file => file.path === path); + if (dataFile) { + return [...acc, dataFile]; + } else { + return [...acc, { path, id: '', newFile: false }]; + } + }, [] as { path: string; id: string; newFile: boolean }[]); + + return dataFiles; +}; + +export const duplicateI18nFields = ( + entryDraft: EntryDraft, + field: EntryField, + locales: string[], + defaultLocale: string, + fieldPath: string[] = [field.get('name')], +) => { + const value = entryDraft.getIn(['entry', 'data', ...fieldPath]); + if (field.get(I18N) === I18N_FIELD.DUPLICATE) { + locales + .filter(l => l !== defaultLocale) + .forEach(l => { + entryDraft = entryDraft.setIn( + ['entry', ...getDataPath(l, defaultLocale), ...fieldPath], + value, + ); + }); + } + + if (field.has('field') && !List.isList(value)) { + const fields = [field.get('field') as EntryField]; + fields.forEach(field => { + entryDraft = duplicateI18nFields(entryDraft, field, locales, defaultLocale, [ + ...fieldPath, + field.get('name'), + ]); + }); + } else if (field.has('fields') && !List.isList(value)) { + const fields = field.get('fields')!.toArray() as EntryField[]; + fields.forEach(field => { + entryDraft = duplicateI18nFields(entryDraft, field, locales, defaultLocale, [ + ...fieldPath, + field.get('name'), + ]); + }); + } + + return entryDraft; +}; + +export const getPreviewEntry = (entry: EntryMap, locale: string, defaultLocale: string) => { + if (locale === defaultLocale) { + return entry; + } + return entry.set('data', entry.getIn([I18N, locale, 'data'])); +}; + +export const serializeI18n = ( + collection: Collection, + entry: Entry, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + serializeValues: (data: any) => any, +) => { + const { locales, defaultLocale } = getI18nInfo(collection) as I18nInfo; + + locales + .filter(locale => locale !== defaultLocale) + .forEach(locale => { + const dataPath = getLocaleDataPath(locale); + entry = entry.setIn(dataPath, serializeValues(entry.getIn(dataPath))); + }); + + return entry; +}; diff --git a/packages/netlify-cms-core/src/reducers/entryDraft.js b/packages/netlify-cms-core/src/reducers/entryDraft.js index 57037937..ce8f824d 100644 --- a/packages/netlify-cms-core/src/reducers/entryDraft.js +++ b/packages/netlify-cms-core/src/reducers/entryDraft.js @@ -25,6 +25,7 @@ import { import { get } from 'lodash'; import { selectFolderEntryExtension, selectHasMetaPath } from './collections'; import { join } from 'path'; +import { getDataPath, duplicateI18nFields } from '../lib/i18n'; const initialState = Map({ entry: Map(), @@ -90,20 +91,25 @@ const entryDraftReducer = (state = Map(), action) => { } case DRAFT_CHANGE_FIELD: { return state.withMutations(state => { - const { field, value, metadata, entries } = action.payload; + const { field, value, metadata, entries, i18n } = action.payload; const name = field.get('name'); const meta = field.get('meta'); + + const dataPath = (i18n && getDataPath(i18n.currentLocale, i18n.defaultLocale)) || ['data']; if (meta) { state.setIn(['entry', 'meta', name], value); } else { - state.setIn(['entry', 'data', name], value); + state.setIn(['entry', ...dataPath, name], value); + if (i18n) { + state = duplicateI18nFields(state, field, i18n.locales, i18n.defaultLocale); + } } state.mergeDeepIn(['fieldsMetaData'], fromJS(metadata)); - const newData = state.getIn(['entry', 'data']); + const newData = state.getIn(['entry', ...dataPath]); const newMeta = state.getIn(['entry', 'meta']); state.set( 'hasChanged', - !entries.some(e => newData.equals(e.get('data'))) || + !entries.some(e => newData.equals(e.get(...dataPath))) || !entries.some(e => newMeta.equals(e.get('meta'))), ); }); diff --git a/packages/netlify-cms-core/src/types/immutable.ts b/packages/netlify-cms-core/src/types/immutable.ts index 3b6ffdce..2d1325ac 100644 --- a/packages/netlify-cms-core/src/types/immutable.ts +++ b/packages/netlify-cms-core/src/types/immutable.ts @@ -16,10 +16,12 @@ export interface StaticallyTypedRecord { keys: [K1, K2, K3], defaultValue?: V, ): T[K1][K2][K3]; + getIn(keys: string[]): unknown; setIn( keys: [K1, K2], value: V, ): StaticallyTypedRecord; + setIn(keys: string[], value: unknown): StaticallyTypedRecord & T; toJS(): T; isEmpty(): boolean; some(predicate: (value: T[K], key: K, iter: this) => boolean): boolean; diff --git a/packages/netlify-cms-core/src/types/redux.ts b/packages/netlify-cms-core/src/types/redux.ts index d0502d4a..67c2ec1a 100644 --- a/packages/netlify-cms-core/src/types/redux.ts +++ b/packages/netlify-cms-core/src/types/redux.ts @@ -123,6 +123,7 @@ export type EntryField = StaticallyTypedRecord<{ public_folder?: string; comment?: string; meta?: boolean; + i18n: 'translate' | 'duplicate' | 'none'; }>; export type EntryFields = List; @@ -161,6 +162,12 @@ type MetaObject = { type Meta = StaticallyTypedRecord; +type i18n = StaticallyTypedRecord<{ + structure: string; + locales: string[]; + default_locale: string; +}>; + type CollectionObject = { name: string; folder?: string; @@ -187,6 +194,7 @@ type CollectionObject = { view_filters: List>; nested?: Nested; meta?: Meta; + i18n: i18n; }; export type Collection = StaticallyTypedRecord; diff --git a/packages/netlify-cms-core/src/valueObjects/Entry.ts b/packages/netlify-cms-core/src/valueObjects/Entry.ts index 2894b109..275c0b85 100644 --- a/packages/netlify-cms-core/src/valueObjects/Entry.ts +++ b/packages/netlify-cms-core/src/valueObjects/Entry.ts @@ -30,6 +30,10 @@ export interface EntryValue { updatedOn: string; status?: string; meta: { path?: string }; + i18n?: { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + [locale: string]: any; + }; } export function createEntry(collection: string, slug = '', path = '', options: Options = {}) { diff --git a/packages/netlify-cms-lib-util/src/implementation.ts b/packages/netlify-cms-lib-util/src/implementation.ts index 39e15cf9..345e518c 100644 --- a/packages/netlify-cms-lib-util/src/implementation.ts +++ b/packages/netlify-cms-lib-util/src/implementation.ts @@ -30,11 +30,17 @@ export interface ImplementationEntry { file: { path: string; label?: string; id?: string | null; author?: string; updatedOn?: string }; } +export interface UnpublishedEntryDiff { + id: string; + path: string; + newFile: boolean; +} + export interface UnpublishedEntry { slug: string; collection: string; status: string; - diffs: { id: string; path: string; newFile: boolean }[]; + diffs: UnpublishedEntryDiff[]; updatedAt: string; } @@ -45,13 +51,23 @@ export interface Map { set: (key: string, value: T) => Map; } +export type DataFile = { + path: string; + slug: string; + raw: string; + newPath?: string; +}; + export type AssetProxy = { path: string; fileObj?: File; toBase64?: () => Promise; }; -export type Entry = { path: string; slug: string; raw: string; newPath?: string }; +export type Entry = { + dataFiles: DataFile[]; + assets: AssetProxy[]; +}; export type PersistOptions = { newEntry?: boolean; @@ -116,9 +132,9 @@ export interface Implementation { getMedia: (folder?: string) => Promise; getMediaFile: (path: string) => Promise; - persistEntry: (obj: Entry, assetProxies: AssetProxy[], opts: PersistOptions) => Promise; + persistEntry: (entry: Entry, opts: PersistOptions) => Promise; persistMedia: (file: AssetProxy, opts: PersistOptions) => Promise; - deleteFile: (path: string, commitMessage: string) => Promise; + deleteFiles: (paths: string[], commitMessage: string) => Promise; unpublishedEntries: () => Promise; unpublishedEntry: (args: { diff --git a/packages/netlify-cms-lib-util/src/index.ts b/packages/netlify-cms-lib-util/src/index.ts index 5bf3aa99..e5f59cd4 100644 --- a/packages/netlify-cms-lib-util/src/index.ts +++ b/packages/netlify-cms-lib-util/src/index.ts @@ -20,6 +20,7 @@ import { asyncLock, AsyncLock as AL } from './asyncLock'; import { Implementation as I, ImplementationEntry as IE, + UnpublishedEntryDiff as UED, UnpublishedEntry as UE, ImplementationMediaFile as IMF, ImplementationFile as IF, @@ -40,6 +41,7 @@ import { UnpublishedEntryMediaFile as UEMF, blobToFileObj, allEntriesByFolder, + DataFile as DF, } from './implementation'; import { readFile, @@ -76,6 +78,7 @@ import { export type AsyncLock = AL; export type Implementation = I; export type ImplementationEntry = IE; +export type UnpublishedEntryDiff = UED; export type UnpublishedEntry = UE; export type ImplementationMediaFile = IMF; export type ImplementationFile = IF; @@ -91,6 +94,7 @@ export type ApiRequest = AR; export type Config = C; export type FetchError = FE; export type PointerFile = PF; +export type DataFile = DF; export const NetlifyCmsLibUtil = { APIError, diff --git a/packages/netlify-cms-locales/src/en/index.js b/packages/netlify-cms-locales/src/en/index.js index 4964918f..76d614c5 100644 --- a/packages/netlify-cms-locales/src/en/index.js +++ b/packages/netlify-cms-locales/src/en/index.js @@ -84,6 +84,9 @@ const en = { invalidPath: `'%{path}' is not a valid path`, pathExists: `Path '%{path}' already exists`, }, + i18n: { + writingInLocale: 'Writing in %{locale}', + }, }, editor: { onLeavePage: 'Are you sure you want to leave this page?', diff --git a/packages/netlify-cms-proxy-server/package.json b/packages/netlify-cms-proxy-server/package.json index 2a3b5338..8eac7063 100644 --- a/packages/netlify-cms-proxy-server/package.json +++ b/packages/netlify-cms-proxy-server/package.json @@ -23,6 +23,7 @@ }, "dependencies": { "@hapi/joi": "^17.0.2", + "async-mutex": "^0.2.4", "cors": "^2.8.5", "dotenv": "^8.2.0", "express": "^4.17.1", diff --git a/packages/netlify-cms-proxy-server/src/middlewares/joi/index.spec.ts b/packages/netlify-cms-proxy-server/src/middlewares/joi/index.spec.ts index a044c813..0d42f0f6 100644 --- a/packages/netlify-cms-proxy-server/src/middlewares/joi/index.spec.ts +++ b/packages/netlify-cms-proxy-server/src/middlewares/joi/index.spec.ts @@ -26,7 +26,7 @@ describe('defaultSchema', () => { assetFailure( schema.validate({ action: 'unknown', params: {} }), - '"action" must be one of [info, entriesByFolder, entriesByFiles, getEntry, unpublishedEntries, unpublishedEntry, unpublishedEntryDataFile, unpublishedEntryMediaFile, deleteUnpublishedEntry, persistEntry, updateUnpublishedEntryStatus, publishUnpublishedEntry, getMedia, getMediaFile, persistMedia, deleteFile, getDeployPreview]', + '"action" must be one of [info, entriesByFolder, entriesByFiles, getEntry, unpublishedEntries, unpublishedEntry, unpublishedEntryDataFile, unpublishedEntryMediaFile, deleteUnpublishedEntry, persistEntry, updateUnpublishedEntryStatus, publishUnpublishedEntry, getMedia, getMediaFile, persistMedia, deleteFile, deleteFiles, getDeployPreview]', ); }); @@ -274,8 +274,19 @@ describe('defaultSchema', () => { const schema = defaultSchema(); assetFailure( - schema.validate({ action: 'persistEntry', params: { ...defaultParams } }), - '"params.entry" is required', + schema.validate({ + action: 'persistEntry', + params: { + ...defaultParams, + assets: [], + options: { + commitMessage: 'commitMessage', + useWorkflow: true, + status: 'draft', + }, + }, + }), + '"params" must contain at least one of [entry, dataFiles]', ); assetFailure( schema.validate({ @@ -309,7 +320,7 @@ describe('defaultSchema', () => { ); }); - it('should pass on valid params', () => { + it('should pass on valid params (entry argument)', () => { const schema = defaultSchema(); const { error } = schema.validate({ action: 'persistEntry', @@ -327,6 +338,25 @@ describe('defaultSchema', () => { expect(error).toBeUndefined(); }); + + it('should pass on valid params (dataFiles argument)', () => { + const schema = defaultSchema(); + const { error } = schema.validate({ + action: 'persistEntry', + params: { + ...defaultParams, + dataFiles: [{ slug: 'slug', path: 'path', raw: 'content' }], + assets: [{ path: 'path', content: 'content', encoding: 'base64' }], + options: { + commitMessage: 'commitMessage', + useWorkflow: true, + status: 'draft', + }, + }, + }); + + expect(error).toBeUndefined(); + }); }); describe('updateUnpublishedEntryStatus', () => { @@ -491,6 +521,31 @@ describe('defaultSchema', () => { }); }); + describe('deleteFiles', () => { + it('should fail on invalid params', () => { + const schema = defaultSchema(); + + assetFailure( + schema.validate({ action: 'deleteFiles', params: { ...defaultParams } }), + '"params.paths" is required', + ); + }); + + it('should pass on valid params', () => { + const schema = defaultSchema(); + const { error } = schema.validate({ + action: 'deleteFiles', + params: { + ...defaultParams, + paths: ['src/static/images/image.png'], + options: { commitMessage: 'commitMessage' }, + }, + }); + + expect(error).toBeUndefined(); + }); + }); + describe('getDeployPreview', () => { it('should fail on invalid params', () => { const schema = defaultSchema(); diff --git a/packages/netlify-cms-proxy-server/src/middlewares/joi/index.ts b/packages/netlify-cms-proxy-server/src/middlewares/joi/index.ts index e23b7cc2..c3976bdd 100644 --- a/packages/netlify-cms-proxy-server/src/middlewares/joi/index.ts +++ b/packages/netlify-cms-proxy-server/src/middlewares/joi/index.ts @@ -18,6 +18,7 @@ const allowedActions = [ 'getMediaFile', 'persistMedia', 'deleteFile', + 'deleteFiles', 'getDeployPreview', ]; @@ -39,6 +40,13 @@ export const defaultSchema = ({ path = requiredString } = {}) => { encoding: requiredString.valid('base64'), }); + const dataFile = Joi.object({ + slug: requiredString, + path, + raw: requiredString, + newPath: path.optional(), + }); + const params = Joi.when('action', { switch: [ { @@ -122,12 +130,8 @@ export const defaultSchema = ({ path = requiredString } = {}) => { then: defaultParams .keys({ cmsLabelPrefix: Joi.string().optional(), - entry: Joi.object({ - slug: requiredString, - path, - raw: requiredString, - newPath: path.optional(), - }).required(), + entry: dataFile, // entry is kept for backwards compatibility + dataFiles: Joi.array().items(dataFile), assets: Joi.array() .items(asset) .required(), @@ -138,6 +142,7 @@ export const defaultSchema = ({ path = requiredString } = {}) => { status: requiredString, }).required(), }) + .xor('entry', 'dataFiles') .required(), }, { @@ -198,6 +203,20 @@ export const defaultSchema = ({ path = requiredString } = {}) => { }) .required(), }, + { + is: 'deleteFiles', + then: defaultParams + .keys({ + paths: Joi.array() + .items(path) + .min(1) + .required(), + options: Joi.object({ + commitMessage: requiredString, + }).required(), + }) + .required(), + }, { is: 'getDeployPreview', then: defaultParams diff --git a/packages/netlify-cms-proxy-server/src/middlewares/localFs/index.ts b/packages/netlify-cms-proxy-server/src/middlewares/localFs/index.ts index 26c7a8c0..2bbc760e 100644 --- a/packages/netlify-cms-proxy-server/src/middlewares/localFs/index.ts +++ b/packages/netlify-cms-proxy-server/src/middlewares/localFs/index.ts @@ -12,6 +12,8 @@ import { GetMediaFileParams, PersistMediaParams, DeleteFileParams, + DeleteFilesParams, + DataFile, } from '../types'; import { listRepoFiles, deleteFile, writeFile, move } from '../utils/fs'; import { entriesFromFiles, readMediaFile } from '../utils/entries'; @@ -61,16 +63,27 @@ export const localFsMiddleware = ({ repoPath, logger }: FsOptions) => { break; } case 'persistEntry': { - const { entry, assets } = body.params as PersistEntryParams; - await writeFile(path.join(repoPath, entry.path), entry.raw); + const { + entry, + dataFiles = [entry as DataFile], + assets, + } = body.params as PersistEntryParams; + await Promise.all( + dataFiles.map(dataFile => writeFile(path.join(repoPath, dataFile.path), dataFile.raw)), + ); // save assets await Promise.all( assets.map(a => writeFile(path.join(repoPath, a.path), Buffer.from(a.content, a.encoding)), ), ); - if (entry.newPath) { - await move(path.join(repoPath, entry.path), path.join(repoPath, entry.newPath)); + if (dataFiles.every(dataFile => dataFile.newPath)) { + dataFiles.forEach(async dataFile => { + await move( + path.join(repoPath, dataFile.path), + path.join(repoPath, dataFile.newPath!), + ); + }); } res.json({ message: 'entry persisted' }); break; @@ -104,6 +117,12 @@ export const localFsMiddleware = ({ repoPath, logger }: FsOptions) => { res.json({ message: `deleted file ${filePath}` }); break; } + case 'deleteFiles': { + const { paths } = body.params as DeleteFilesParams; + await Promise.all(paths.map(filePath => deleteFile(repoPath, filePath))); + res.json({ message: `deleted files ${paths.join(', ')}` }); + break; + } case 'getDeployPreview': { res.json(null); break; diff --git a/packages/netlify-cms-proxy-server/src/middlewares/localGit/index.ts b/packages/netlify-cms-proxy-server/src/middlewares/localGit/index.ts index 6e8a5215..fc5ebcb1 100644 --- a/packages/netlify-cms-proxy-server/src/middlewares/localGit/index.ts +++ b/packages/netlify-cms-proxy-server/src/middlewares/localGit/index.ts @@ -26,16 +26,18 @@ import { PersistMediaParams, DeleteFileParams, UpdateUnpublishedEntryStatusParams, - Entry, + DataFile, GetMediaFileParams, DeleteEntryParams, + DeleteFilesParams, UnpublishedEntryDataFileParams, UnpublishedEntryMediaFileParams, } from '../types'; // eslint-disable-next-line import/default import simpleGit from 'simple-git/promise'; +import { Mutex, withTimeout } from 'async-mutex'; import { pathTraversal } from '../joi/customValidators'; -import { listRepoFiles, writeFile, move } from '../utils/fs'; +import { listRepoFiles, writeFile, move, deleteFile, getUpdateDate } from '../utils/fs'; import { entriesFromFiles, readMediaFile } from '../utils/entries'; const commit = async (git: simpleGit.SimpleGit, commitMessage: string) => { @@ -76,18 +78,22 @@ type GitOptions = { const commitEntry = async ( git: simpleGit.SimpleGit, repoPath: string, - entry: Entry, + dataFiles: DataFile[], assets: Asset[], commitMessage: string, ) => { // save entry content - await writeFile(path.join(repoPath, entry.path), entry.raw); + await Promise.all( + dataFiles.map(dataFile => writeFile(path.join(repoPath, dataFile.path), dataFile.raw)), + ); // save assets await Promise.all( assets.map(a => writeFile(path.join(repoPath, a.path), Buffer.from(a.content, a.encoding))), ); - if (entry.newPath) { - await move(path.join(repoPath, entry.path), path.join(repoPath, entry.newPath)); + if (dataFiles.every(dataFile => dataFile.newPath)) { + dataFiles.forEach(async dataFile => { + await move(path.join(repoPath, dataFile.path), path.join(repoPath, dataFile.newPath!)); + }); } // commits files @@ -162,8 +168,13 @@ export const getSchema = ({ repoPath }: { repoPath: string }) => { export const localGitMiddleware = ({ repoPath, logger }: GitOptions) => { const git = simpleGit(repoPath).silent(false); + // we can only perform a single git operation at any given time + const mutex = withTimeout(new Mutex(), 3000, new Error('Request timed out')); + return async function(req: express.Request, res: express.Response) { + let release; try { + release = await mutex.acquire(); const { body } = req; if (body.action === 'info') { res.json({ @@ -233,11 +244,23 @@ export const localGitMiddleware = ({ repoPath, logger }: GitOptions) => { const diffs = await getDiffs(git, branch, cmsBranch); const label = await git.raw(['config', branchDescription(cmsBranch)]); const status = label && labelToStatus(label.trim(), cmsLabelPrefix || ''); + const updatedAt = + diffs.length >= 0 + ? await runOnBranch(git, cmsBranch, async () => { + const dates = await Promise.all( + diffs.map(({ newPath }) => getUpdateDate(repoPath, newPath)), + ); + return dates.reduce((a, b) => { + return a > b ? a : b; + }); + }) + : new Date(); const unpublishedEntry = { collection, slug, status, diffs, + updatedAt, }; res.json(unpublishedEntry); } else { @@ -276,13 +299,20 @@ export const localGitMiddleware = ({ repoPath, logger }: GitOptions) => { break; } case 'persistEntry': { - const { entry, assets, options, cmsLabelPrefix } = body.params as PersistEntryParams; + const { + cmsLabelPrefix, + entry, + dataFiles = [entry as DataFile], + assets, + options, + } = body.params as PersistEntryParams; + if (!options.useWorkflow) { await runOnBranch(git, branch, async () => { - await commitEntry(git, repoPath, entry, assets, options.commitMessage); + await commitEntry(git, repoPath, dataFiles, assets, options.commitMessage); }); } else { - const slug = entry.slug; + const slug = dataFiles[0].slug; const collection = options.collectionName as string; const contentKey = generateContentKey(collection, slug); const cmsBranch = branchFromContentKey(contentKey); @@ -300,7 +330,7 @@ export const localGitMiddleware = ({ repoPath, logger }: GitOptions) => { d => d.binary && !assets.map(a => a.path).includes(d.path), ); await Promise.all(toDelete.map(f => fs.unlink(path.join(repoPath, f.path)))); - await commitEntry(git, repoPath, entry, assets, options.commitMessage); + await commitEntry(git, repoPath, dataFiles, assets, options.commitMessage); // add status for new entries if (!branchExists) { @@ -378,12 +408,24 @@ export const localGitMiddleware = ({ repoPath, logger }: GitOptions) => { options: { commitMessage }, } = body.params as DeleteFileParams; await runOnBranch(git, branch, async () => { - await fs.unlink(path.join(repoPath, filePath)); + await deleteFile(repoPath, filePath); await commit(git, commitMessage); }); res.json({ message: `deleted file ${filePath}` }); break; } + case 'deleteFiles': { + const { + paths, + options: { commitMessage }, + } = body.params as DeleteFilesParams; + await runOnBranch(git, branch, async () => { + await Promise.all(paths.map(filePath => deleteFile(repoPath, filePath))); + await commit(git, commitMessage); + }); + res.json({ message: `deleted files ${paths.join(', ')}` }); + break; + } case 'getDeployPreview': { res.json(null); break; @@ -397,6 +439,8 @@ export const localGitMiddleware = ({ repoPath, logger }: GitOptions) => { } catch (e) { logger.error(`Error handling ${JSON.stringify(req.body)}: ${e.message}`); res.status(500).json({ error: 'Unknown error' }); + } finally { + release && release(); } }; }; diff --git a/packages/netlify-cms-proxy-server/src/middlewares/types.ts b/packages/netlify-cms-proxy-server/src/middlewares/types.ts index 36315174..be69316d 100644 --- a/packages/netlify-cms-proxy-server/src/middlewares/types.ts +++ b/packages/netlify-cms-proxy-server/src/middlewares/types.ts @@ -54,13 +54,14 @@ export type PublishUnpublishedEntryParams = { slug: string; }; -export type Entry = { slug: string; path: string; raw: string; newPath?: string }; +export type DataFile = { slug: string; path: string; raw: string; newPath?: string }; export type Asset = { path: string; content: string; encoding: 'base64' }; export type PersistEntryParams = { cmsLabelPrefix?: string; - entry: Entry; + entry?: DataFile; + dataFiles?: DataFile[]; assets: Asset[]; options: { collectionName?: string; @@ -91,3 +92,10 @@ export type DeleteFileParams = { commitMessage: string; }; }; + +export type DeleteFilesParams = { + paths: string[]; + options: { + commitMessage: string; + }; +}; diff --git a/packages/netlify-cms-proxy-server/src/middlewares/utils/fs.ts b/packages/netlify-cms-proxy-server/src/middlewares/utils/fs.ts index 1b5b6e71..476a0724 100644 --- a/packages/netlify-cms-proxy-server/src/middlewares/utils/fs.ts +++ b/packages/netlify-cms-proxy-server/src/middlewares/utils/fs.ts @@ -38,7 +38,7 @@ export const writeFile = async (filePath: string, content: Buffer | string) => { }; export const deleteFile = async (repoPath: string, filePath: string) => { - await fs.unlink(path.join(repoPath, filePath)); + await fs.unlink(path.join(repoPath, filePath)).catch(() => undefined); }; const moveFile = async (from: string, to: string) => { @@ -56,3 +56,10 @@ export const move = async (from: string, to: string) => { const allFiles = await listFiles(sourceDir, '', 100); await Promise.all(allFiles.map(file => moveFile(file, file.replace(sourceDir, destDir)))); }; + +export const getUpdateDate = async (repoPath: string, filePath: string) => { + return fs + .stat(path.join(repoPath, filePath)) + .then(stat => stat.mtime) + .catch(() => new Date()); +}; diff --git a/packages/netlify-cms-ui-default/src/styles.js b/packages/netlify-cms-ui-default/src/styles.js index 5bf687b1..900c22c5 100644 --- a/packages/netlify-cms-ui-default/src/styles.js +++ b/packages/netlify-cms-ui-default/src/styles.js @@ -373,7 +373,7 @@ const reactSelectStyles = { : 'transparent', paddingLeft: '22px', }), - menu: styles => ({ ...styles, right: 0, zIndex: 300 }), + menu: styles => ({ ...styles, right: 0, zIndex: zIndex.zIndex300 }), container: styles => ({ ...styles, padding: '0 !important' }), indicatorSeparator: (styles, state) => state.hasValue && state.selectProps.isClearable diff --git a/packages/netlify-cms-widget-datetime/src/DateTimeControl.js b/packages/netlify-cms-widget-datetime/src/DateTimeControl.js index dd0d15fa..9cfec02d 100644 --- a/packages/netlify-cms-widget-datetime/src/DateTimeControl.js +++ b/packages/netlify-cms-widget-datetime/src/DateTimeControl.js @@ -7,6 +7,34 @@ import DateTime from 'react-datetime'; import moment from 'moment'; import { buttons } from 'netlify-cms-ui-default'; +const NowButton = ({ t, handleChange }) => { + return ( +
+ +
+ ); +}; + export default class DateTimeControl extends React.Component { static propTypes = { field: PropTypes.object.isRequired, @@ -114,7 +142,7 @@ export default class DateTimeControl extends React.Component { }; render() { - const { forID, value, classNameWrapper, setActiveStyle, t } = this.props; + const { forID, value, classNameWrapper, setActiveStyle, t, isDisabled } = this.props; const { format, dateFormat, timeFormat } = this.formats; return ( @@ -134,29 +162,7 @@ export default class DateTimeControl extends React.Component { inputProps={{ className: classNameWrapper, id: forID }} utc={this.pickerUtc} /> -
- -
+ {!isDisabled && this.handleChange(v)} />}
); } diff --git a/packages/netlify-cms-widget-list/src/schema.js b/packages/netlify-cms-widget-list/src/schema.js index f5869fc0..f868b0f6 100644 --- a/packages/netlify-cms-widget-list/src/schema.js +++ b/packages/netlify-cms-widget-list/src/schema.js @@ -5,5 +5,6 @@ export default { summary: { type: 'string' }, minimize_collapsed: { type: 'boolean' }, label_singular: { type: 'string' }, + i18n: { type: 'boolean' }, }, }; diff --git a/packages/netlify-cms-widget-markdown/src/MarkdownControl/RawEditor.js b/packages/netlify-cms-widget-markdown/src/MarkdownControl/RawEditor.js index ce7c5899..6075c2a6 100644 --- a/packages/netlify-cms-widget-markdown/src/MarkdownControl/RawEditor.js +++ b/packages/netlify-cms-widget-markdown/src/MarkdownControl/RawEditor.js @@ -38,7 +38,16 @@ export default class RawEditor extends React.Component { } shouldComponentUpdate(nextProps, nextState) { - return !this.state.value.equals(nextState.value); + return ( + !this.state.value.equals(nextState.value) || + nextProps.value !== Plain.serialize(nextState.value) + ); + } + + componentDidUpdate(prevProps) { + if (prevProps.value !== this.props.value) { + this.setState({ value: Plain.deserialize(this.props.value) }); + } } componentDidMount() { diff --git a/packages/netlify-cms-widget-markdown/src/MarkdownControl/VisualEditor.js b/packages/netlify-cms-widget-markdown/src/MarkdownControl/VisualEditor.js index 838e23de..d34b45d7 100644 --- a/packages/netlify-cms-widget-markdown/src/MarkdownControl/VisualEditor.js +++ b/packages/netlify-cms-widget-markdown/src/MarkdownControl/VisualEditor.js @@ -121,7 +121,9 @@ export default class Editor extends React.Component { }; shouldComponentUpdate(nextProps, nextState) { - return !this.state.value.equals(nextState.value); + const raw = nextState.value.document.toJS(); + const markdown = slateToMarkdown(raw, { voidCodeBlock: this.codeBlockComponent }); + return !this.state.value.equals(nextState.value) || nextProps.value !== markdown; } componentDidMount() { @@ -131,6 +133,14 @@ export default class Editor extends React.Component { } } + componentDidUpdate(prevProps) { + if (prevProps.value !== this.props.value) { + this.setState({ + value: createSlateValue(this.props.value, { voidCodeBlock: !!this.codeBlockComponent }), + }); + } + } + handleMarkClick = type => { this.editor.toggleMark(type).focus(); }; @@ -178,7 +188,7 @@ export default class Editor extends React.Component { }; render() { - const { onAddAsset, getAsset, className, field, isShowModeToggle, t } = this.props; + const { onAddAsset, getAsset, className, field, isShowModeToggle, t, isDisabled } = this.props; return (
diff --git a/packages/netlify-cms-widget-markdown/src/MarkdownControl/index.js b/packages/netlify-cms-widget-markdown/src/MarkdownControl/index.js index 34189082..be0cbba0 100644 --- a/packages/netlify-cms-widget-markdown/src/MarkdownControl/index.js +++ b/packages/netlify-cms-widget-markdown/src/MarkdownControl/index.js @@ -71,6 +71,7 @@ export default class MarkdownControl extends React.Component { getEditorComponents, resolveWidget, t, + isDisabled, } = this.props; const { mode, pendingFocus } = this.state; @@ -90,6 +91,7 @@ export default class MarkdownControl extends React.Component { resolveWidget={resolveWidget} pendingFocus={pendingFocus && this.setFocusReceived} t={t} + isDisabled={isDisabled} />
); diff --git a/packages/netlify-cms-widget-object/src/ObjectControl.js b/packages/netlify-cms-widget-object/src/ObjectControl.js index d32fb78a..019d1f11 100644 --- a/packages/netlify-cms-widget-object/src/ObjectControl.js +++ b/packages/netlify-cms-widget-object/src/ObjectControl.js @@ -81,6 +81,8 @@ export default class ObjectControl extends React.Component { editorControl: EditorControl, controlRef, parentIds, + isFieldDuplicate, + isFieldHidden, } = this.props; if (field.get('widget') === 'hidden') { @@ -89,6 +91,9 @@ export default class ObjectControl extends React.Component { const fieldName = field.get('name'); const fieldValue = value && Map.isMap(value) ? value.get(fieldName) : value; + const isDuplicate = isFieldDuplicate && isFieldDuplicate(field); + const isHidden = isFieldHidden && isFieldHidden(field); + return ( ); } diff --git a/packages/netlify-cms-widget-object/src/schema.js b/packages/netlify-cms-widget-object/src/schema.js index 6c06179f..a8569789 100644 --- a/packages/netlify-cms-widget-object/src/schema.js +++ b/packages/netlify-cms-widget-object/src/schema.js @@ -1,5 +1,6 @@ export default { properties: { collapsed: { type: 'boolean' }, + i18n: { type: 'boolean' }, }, }; diff --git a/website/content/docs/beta-features.md b/website/content/docs/beta-features.md index bfd543f3..47607c91 100644 --- a/website/content/docs/beta-features.md +++ b/website/content/docs/beta-features.md @@ -48,6 +48,110 @@ publish_mode: editorial_workflow In order to track unpublished entries statuses the GitLab implementation uses merge requests labels and the BitBucket implementation uses pull requests comments. +## i18n Support + +The CMS can provide a side by side interface for authoring content in multiple languages. +Configuring the CMS for i18n support requires top level configuration, collection level configuration and field level configuration. + +### Top level configuration + +```yaml +i18n: + # Required and can be one of multiple_folders, multiple_files or single_file + # multiple_folders - persists files in `//.` + # multiple_files - persists files in `/..` + # single_file - persists a single file in `/.` + structure: multiple_folders + + # Required - a list of locales to show in the editor UI + locales: [en, de, fr] + + # Optional, defaults to the first item in locales. + # The locale to be used for fields validation and as a baseline for the entry. + default_locale: en +``` + +### Collection level configuration + +```yaml +collections: + - name: i18n_content + # same as the top level, but all fields are optional and defaults to the top level + # can also be a boolean to accept the top level defaults + i18n: true +``` + +### Field level configuration + +```yaml +fields: + - label: Title + name: title + widget: string + # same as 'i18n: translate'. Allows translation of the title field + i18n: true + - label: Date + name: date + widget: datetime + # The date field will be duplicated from the default locale. + i18n: duplicate + - label: Body + name: body + # The markdown field will be omitted from the translation. + widget: markdown +``` + +Example configuration: + +```yaml +i18n: + structure: multiple_folders + locales: [en, de, fr] + +collections: + - name: posts + label: Posts + folder: content/posts + create: true + i18n: true + fields: + - label: Title + name: title + widget: string + i18n: true + - label: Date + name: date + widget: datetime + i18n: duplicate + - label: Body + name: body + widget: markdown +``` + +### Limitations + +1. File collections are not supported. +2. List widgets only support `i18n: true`. `i18n` configuration on sub fields is ignored. +3. Object widgets only support `i18n: true` and `i18n` configuration should be done per field: + +```yaml +- label: 'Object' + name: 'object' + widget: 'object' + i18n: true + fields: + - { label: 'String', name: 'string', widget: 'string', i18n: true } + - { label: 'Date', name: 'date', widget: 'datetime', i18n: duplicate } + - { label: 'Boolean', name: 'boolean', widget: 'boolean', i18n: duplicate } + - { + label: 'Object', + name: 'object', + widget: 'object', + i18n: true, + field: { label: 'String', name: 'string', widget: 'string', i18n: duplicate }, + } +``` + ## GitHub GraphQL API Experimental support for GitHub's [GraphQL API](https://developer.github.com/v4/) is now available for the GitHub backend. diff --git a/yarn.lock b/yarn.lock index 4e02c862..22bac9f7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4395,6 +4395,13 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== +async-mutex@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/async-mutex/-/async-mutex-0.2.4.tgz#f6ea5f9cc73147f395f86fa573a2af039fe63082" + integrity sha512-fcQKOXUKMQc57JlmjBCHtkKNrfGpHyR7vu18RfuLfeTAf4hK9PgOadPR5cDrBQ682zasrLUhJFe7EKAHJOduDg== + dependencies: + tslib "^2.0.0" + async@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" @@ -17489,7 +17496,7 @@ tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== -tslib@^2.0.1: +tslib@^2.0.0, tslib@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e" integrity sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==