{"action":"created","comment":{"url":"https://api.github.com/repos/scala-js/scala-js/pulls/comments/33684991","id":33684991,"diff_hunk":"@@ -0,0 +1,337 @@\n+package java.util\n+package concurrent\n+\n+import java.lang.{reflect => jlr}\n+\n+import scala.annotation.tailrec\n+import scala.collection.JavaConversions._\n+\n+import scala.scalajs._\n+\n+class CopyOnWriteArrayList[E] private(private var inner: js.Array[E])\n+    extends List[E] with RandomAccess with Cloneable with Serializable {\n+  self =>\n+\n+  // requiresCopyOnWrite is false if and only if no other object\n+  // (like the iterator) may have a reference to inner\n+  private var requiresCopyOnWrite = false\n+\n+  def this() = {\n+    this(new js.Array[E])\n+  }\n+\n+  def this(c: Collection[_ <: E]) = {\n+    this()\n+    addAll(c)\n+  }\n+\n+  def this(toCopyIn: Array[E]) = {\n+    this()\n+    toCopyIn.foreach(add)\n+  }\n+\n+  def size(): Int =\n+    inner.size\n+\n+  def isEmpty: Boolean =\n+    size == 0\n+\n+  def contains(o: scala.Any): Boolean =\n+    iterator.exists(o === _)\n+\n+  def indexOf(o: scala.Any): Int =\n+    indexOf(o.asInstanceOf[E], 0)\n+\n+  def indexOf(e: E, index: Int): Int = {\n+    checkIndexInBounds(index)\n+    index + listIterator(index).indexWhere(_ === e)\n+  }\n+\n+  def lastIndexOf(o: scala.Any): Int =\n+    lastIndexOf(o.asInstanceOf[E], 0)\n+\n+  def lastIndexOf(e: E, index: Int): Int = {\n+    @tailrec\n+    def findIndex(iter: ListIterator[E]): Int = {\n+      if (!iter.hasPrevious) -1\n+      else if (iter.previous() === e) iter.nextIndex\n+      else findIndex(iter)\n+    }\n+    findIndex(listIterator(size))\n+  }\n+\n+  override def clone(): AnyRef =\n+    new CopyOnWriteArrayList[E](this)\n+\n+  def toArray(): Array[AnyRef] =\n+    toArray(new Array[AnyRef](size))\n+\n+  def toArray[T](a: Array[T]): Array[T] = {\n+    val toFill: Array[T] =\n+      if (a.size >= size) a\n+      else jlr.Array.newInstance(\n+          a.getClass.getComponentType, size).asInstanceOf[Array[T]]\n+\n+    val iter = iterator\n+    for (i <- 0 until size)\n+      toFill(i) = iter.next().asInstanceOf[T]\n+    if (toFill.size > size)\n+      toFill(size) = null.asInstanceOf[T]\n+    toFill\n+  }\n+\n+  def get(index: Int): E = {\n+    checkIndexInBounds(index)\n+    innerGet(index)\n+  }\n+\n+  def set(index: Int, element: E): E = {\n+    checkIndexInBounds(index)\n+    copyIfNeeded()\n+    val oldValue = innerGet(index)\n+    innerSet(index, element)\n+    oldValue\n+  }\n+\n+  def add(e: E): Boolean = {\n+    copyIfNeeded()\n+    innerPush(e)\n+    true\n+  }\n+\n+  def add(index: Int, element: E): Unit = {\n+    checkIndexOnBounds(index)\n+    copyIfNeeded()\n+    innerSplice(index, 0, element)\n+  }\n+\n+  def remove(index: Int): E = {\n+    checkIndexInBounds(index)\n+    copyIfNeeded()\n+    innerSplice(index, 1)(0)\n+  }\n+\n+  def remove(o: scala.Any): Boolean = {\n+    val index = indexOf(o)\n+    if (index == -1) false else {\n+      remove(index)\n+      true\n+    }\n+  }\n+\n+  def addIfAbsent(e: E): Boolean = {\n+    if (contains(e)) false else {\n+      copyIfNeeded()\n+      innerPush(e)\n+      true\n+    }\n+  }\n+\n+  def containsAll(c: Collection[_]): Boolean =\n+    c.iterator.forall(this.contains(_))\n+\n+  def removeAll(c: Collection[_]): Boolean = {\n+    copyIfNeeded()\n+    c.foldLeft(false)((prev, elem) => remove(elem) || prev)\n+  }\n+\n+  def retainAll(c: Collection[_]): Boolean = {\n+    val iter = iterator()\n+    clear()\n+    var modified = false\n+    for (elem <- iter) {\n+      if (c.contains(elem))\n+        innerPush(elem)\n+      else\n+        modified = true\n+    }\n+    modified\n+  }\n+\n+  def addAllAbsent(c: Collection[_ <: E]): Int = {\n+    val elemsToAdd = c.iterator().filter(!contains(_)).toList\n+    copyIfNeeded()\n+    elemsToAdd.foreach(innerPush(_))\n+    elemsToAdd.size\n+  }\n+\n+  def clear(): Unit = {\n+    inner = new js.Array[E]\n+    requiresCopyOnWrite = false\n+  }\n+\n+  def addAll(c: Collection[_ <: E]): Boolean =\n+    addAll(size, c)\n+\n+  def addAll(index: Int, c: Collection[_ <: E]): Boolean = {\n+    checkIndexOnBounds(index)\n+    copyIfNeeded()\n+    innerSplice(index, 0, c.asInstanceOf[Collection[E]].toSeq: _*)\n+    c.nonEmpty\n+  }\n+\n+  override def toString: String =\n+    iterator().mkString(\"[\", \",\", \"]\")\n+\n+  override def equals(obj: Any): Boolean = {\n+    if (obj.asInstanceOf[AnyRef] eq this) {\n+      true\n+    } else {\n+      obj match {\n+        case obj: List[_] =>\n+          val oIter = obj.listIterator\n+          this.forall(oIter.hasNext && _ === oIter.next()) && !oIter.hasNext\n+        case _ => false\n+      }\n+    }\n+  }\n+\n+  override def hashCode(): Int = {\n+    iterator().foldLeft(1) {\n+      (prev, elem) => 31 * prev + (if (elem == null) 0 else elem.hashCode)\n+    }\n+  }\n+\n+  def iterator(): Iterator[E] =\n+    listIterator()\n+\n+  def listIterator(): ListIterator[E] =\n+    listIterator(0)\n+\n+  def listIterator(index: Int): ListIterator[E] = {\n+    checkIndexOnBounds(index)\n+    new CopyOnWriteArrayListIterator[E](innerSnapshot(), index, 0, size)\n+  }\n+\n+  def subList(fromIndex: Int, toIndex: Int): List[E] = {\n+    if (fromIndex < 0 || fromIndex > toIndex || toIndex > size)\n+      throw new IndexOutOfBoundsException\n+    new CopyOnWriteArrayListView(fromIndex, toIndex)\n+  }\n+\n+  protected def innerGet(index: Int): E =\n+    inner(index)\n+\n+  protected def innerSet(index: Int, elem: E): Unit =\n+    inner(index) = elem\n+\n+  protected def innerPush(elem: E): Unit =\n+    inner.push(elem)\n+\n+  protected def innerSplice(index: Int, deleteCount: Int, items: E*): js.Array[E] =\n+    inner.splice(index, deleteCount, items: _*)\n+\n+  protected def copyIfNeeded(): Unit = {\n+    if (requiresCopyOnWrite) {\n+      inner = inner.jsSlice()\n+      requiresCopyOnWrite = false\n+    }\n+  }\n+\n+  protected def innerSnapshot(): js.Array[E] = {\n+    requiresCopyOnWrite = true\n+    inner\n+  }\n+\n+  class CopyOnWriteArrayListView(fromIndex: Int, private var toIndex: Int)","path":"javalib/src/main/scala/java/util/concurrent/CopyOnWriteArrayList.scala","position":236,"original_position":236,"commit_id":"775f61e83f1abf8718896a99a717d7022140016e","original_commit_id":"775f61e83f1abf8718896a99a717d7022140016e","user":{"login":"sjrd","id":535934,"avatar_url":"https://avatars.githubusercontent.com/u/535934?v=3","gravatar_id":"","url":"https://api.github.com/users/sjrd","html_url":"https://github.com/sjrd","followers_url":"https://api.github.com/users/sjrd/followers","following_url":"https://api.github.com/users/sjrd/following{/other_user}","gists_url":"https://api.github.com/users/sjrd/gists{/gist_id}","starred_url":"https://api.github.com/users/sjrd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sjrd/subscriptions","organizations_url":"https://api.github.com/users/sjrd/orgs","repos_url":"https://api.github.com/users/sjrd/repos","events_url":"https://api.github.com/users/sjrd/events{/privacy}","received_events_url":"https://api.github.com/users/sjrd/received_events","type":"User","site_admin":false},"body":"This should probably be `private`.","created_at":"2015-07-01T14:44:07Z","updated_at":"2015-07-01T14:44:07Z","html_url":"https://github.com/scala-js/scala-js/pull/1770#discussion_r33684991","pull_request_url":"https://api.github.com/repos/scala-js/scala-js/pulls/1770","_links":{"self":{"href":"https://api.github.com/repos/scala-js/scala-js/pulls/comments/33684991"},"html":{"href":"https://github.com/scala-js/scala-js/pull/1770#discussion_r33684991"},"pull_request":{"href":"https://api.github.com/repos/scala-js/scala-js/pulls/1770"}}},"pull_request":{"url":"https://api.github.com/repos/scala-js/scala-js/pulls/1770","id":38751394,"html_url":"https://github.com/scala-js/scala-js/pull/1770","diff_url":"https://github.com/scala-js/scala-js/pull/1770.diff","patch_url":"https://github.com/scala-js/scala-js/pull/1770.patch","issue_url":"https://api.github.com/repos/scala-js/scala-js/issues/1770","number":1770,"state":"open","locked":false,"title":"Fix #1693: Implement java.util.concurrent.CopyOnWriteArrayList.","user":{"login":"nicolasstucki","id":3648029,"avatar_url":"https://avatars.githubusercontent.com/u/3648029?v=3","gravatar_id":"","url":"https://api.github.com/users/nicolasstucki","html_url":"https://github.com/nicolasstucki","followers_url":"https://api.github.com/users/nicolasstucki/followers","following_url":"https://api.github.com/users/nicolasstucki/following{/other_user}","gists_url":"https://api.github.com/users/nicolasstucki/gists{/gist_id}","starred_url":"https://api.github.com/users/nicolasstucki/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nicolasstucki/subscriptions","organizations_url":"https://api.github.com/users/nicolasstucki/orgs","repos_url":"https://api.github.com/users/nicolasstucki/repos","events_url":"https://api.github.com/users/nicolasstucki/events{/privacy}","received_events_url":"https://api.github.com/users/nicolasstucki/received_events","type":"User","site_admin":false},"body":"* Implement `java.util.concurrent.CopyOnWriteArrayList` without copy on each write.\r\n  Only make a copy if there might be an iterator using the array (simplification due to single-threading).\r\n* Implement tests for `CopyOnWriteArrayList`.","created_at":"2015-06-29T08:31:08Z","updated_at":"2015-07-01T14:44:07Z","closed_at":null,"merged_at":null,"merge_commit_sha":"98729d6597ec8600efc9899bbf7e467457a4c450","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/scala-js/scala-js/pulls/1770/commits","review_comments_url":"https://api.github.com/repos/scala-js/scala-js/pulls/1770/comments","review_comment_url":"https://api.github.com/repos/scala-js/scala-js/pulls/comments{/number}","comments_url":"https://api.github.com/repos/scala-js/scala-js/issues/1770/comments","statuses_url":"https://api.github.com/repos/scala-js/scala-js/statuses/775f61e83f1abf8718896a99a717d7022140016e","head":{"label":"nicolasstucki:implement-java-util-concurrent-CopyOnWriteArrayList","ref":"implement-java-util-concurrent-CopyOnWriteArrayList","sha":"775f61e83f1abf8718896a99a717d7022140016e","user":{"login":"nicolasstucki","id":3648029,"avatar_url":"https://avatars.githubusercontent.com/u/3648029?v=3","gravatar_id":"","url":"https://api.github.com/users/nicolasstucki","html_url":"https://github.com/nicolasstucki","followers_url":"https://api.github.com/users/nicolasstucki/followers","following_url":"https://api.github.com/users/nicolasstucki/following{/other_user}","gists_url":"https://api.github.com/users/nicolasstucki/gists{/gist_id}","starred_url":"https://api.github.com/users/nicolasstucki/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nicolasstucki/subscriptions","organizations_url":"https://api.github.com/users/nicolasstucki/orgs","repos_url":"https://api.github.com/users/nicolasstucki/repos","events_url":"https://api.github.com/users/nicolasstucki/events{/privacy}","received_events_url":"https://api.github.com/users/nicolasstucki/received_events","type":"User","site_admin":false},"repo":{"id":35167756,"name":"scala-js","full_name":"nicolasstucki/scala-js","owner":{"login":"nicolasstucki","id":3648029,"avatar_url":"https://avatars.githubusercontent.com/u/3648029?v=3","gravatar_id":"","url":"https://api.github.com/users/nicolasstucki","html_url":"https://github.com/nicolasstucki","followers_url":"https://api.github.com/users/nicolasstucki/followers","following_url":"https://api.github.com/users/nicolasstucki/following{/other_user}","gists_url":"https://api.github.com/users/nicolasstucki/gists{/gist_id}","starred_url":"https://api.github.com/users/nicolasstucki/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nicolasstucki/subscriptions","organizations_url":"https://api.github.com/users/nicolasstucki/orgs","repos_url":"https://api.github.com/users/nicolasstucki/repos","events_url":"https://api.github.com/users/nicolasstucki/events{/privacy}","received_events_url":"https://api.github.com/users/nicolasstucki/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/nicolasstucki/scala-js","description":"Scala.js, the Scala to JavaScript compiler","fork":true,"url":"https://api.github.com/repos/nicolasstucki/scala-js","forks_url":"https://api.github.com/repos/nicolasstucki/scala-js/forks","keys_url":"https://api.github.com/repos/nicolasstucki/scala-js/keys{/key_id}","collaborators_url":"https://api.github.com/repos/nicolasstucki/scala-js/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/nicolasstucki/scala-js/teams","hooks_url":"https://api.github.com/repos/nicolasstucki/scala-js/hooks","issue_events_url":"https://api.github.com/repos/nicolasstucki/scala-js/issues/events{/number}","events_url":"https://api.github.com/repos/nicolasstucki/scala-js/events","assignees_url":"https://api.github.com/repos/nicolasstucki/scala-js/assignees{/user}","branches_url":"https://api.github.com/repos/nicolasstucki/scala-js/branches{/branch}","tags_url":"https://api.github.com/repos/nicolasstucki/scala-js/tags","blobs_url":"https://api.github.com/repos/nicolasstucki/scala-js/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/nicolasstucki/scala-js/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/nicolasstucki/scala-js/git/refs{/sha}","trees_url":"https://api.github.com/repos/nicolasstucki/scala-js/git/trees{/sha}","statuses_url":"https://api.github.com/repos/nicolasstucki/scala-js/statuses/{sha}","languages_url":"https://api.github.com/repos/nicolasstucki/scala-js/languages","stargazers_url":"https://api.github.com/repos/nicolasstucki/scala-js/stargazers","contributors_url":"https://api.github.com/repos/nicolasstucki/scala-js/contributors","subscribers_url":"https://api.github.com/repos/nicolasstucki/scala-js/subscribers","subscription_url":"https://api.github.com/repos/nicolasstucki/scala-js/subscription","commits_url":"https://api.github.com/repos/nicolasstucki/scala-js/commits{/sha}","git_commits_url":"https://api.github.com/repos/nicolasstucki/scala-js/git/commits{/sha}","comments_url":"https://api.github.com/repos/nicolasstucki/scala-js/comments{/number}","issue_comment_url":"https://api.github.com/repos/nicolasstucki/scala-js/issues/comments{/number}","contents_url":"https://api.github.com/repos/nicolasstucki/scala-js/contents/{+path}","compare_url":"https://api.github.com/repos/nicolasstucki/scala-js/compare/{base}...{head}","merges_url":"https://api.github.com/repos/nicolasstucki/scala-js/merges","archive_url":"https://api.github.com/repos/nicolasstucki/scala-js/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/nicolasstucki/scala-js/downloads","issues_url":"https://api.github.com/repos/nicolasstucki/scala-js/issues{/number}","pulls_url":"https://api.github.com/repos/nicolasstucki/scala-js/pulls{/number}","milestones_url":"https://api.github.com/repos/nicolasstucki/scala-js/milestones{/number}","notifications_url":"https://api.github.com/repos/nicolasstucki/scala-js/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/nicolasstucki/scala-js/labels{/name}","releases_url":"https://api.github.com/repos/nicolasstucki/scala-js/releases{/id}","created_at":"2015-05-06T15:41:56Z","updated_at":"2015-05-06T15:41:58Z","pushed_at":"2015-07-01T08:26:19Z","git_url":"git://github.com/nicolasstucki/scala-js.git","ssh_url":"git@github.com:nicolasstucki/scala-js.git","clone_url":"https://github.com/nicolasstucki/scala-js.git","svn_url":"https://github.com/nicolasstucki/scala-js","homepage":"http://www.scala-js.org/","size":8972,"stargazers_count":0,"watchers_count":0,"language":"Scala","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"scala-js:master","ref":"master","sha":"a1f4469d68b3d7a5a8e3a871952ec509f2dcd56a","user":{"login":"scala-js","id":6039724,"avatar_url":"https://avatars.githubusercontent.com/u/6039724?v=3","gravatar_id":"","url":"https://api.github.com/users/scala-js","html_url":"https://github.com/scala-js","followers_url":"https://api.github.com/users/scala-js/followers","following_url":"https://api.github.com/users/scala-js/following{/other_user}","gists_url":"https://api.github.com/users/scala-js/gists{/gist_id}","starred_url":"https://api.github.com/users/scala-js/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scala-js/subscriptions","organizations_url":"https://api.github.com/users/scala-js/orgs","repos_url":"https://api.github.com/users/scala-js/repos","events_url":"https://api.github.com/users/scala-js/events{/privacy}","received_events_url":"https://api.github.com/users/scala-js/received_events","type":"Organization","site_admin":false},"repo":{"id":8272315,"name":"scala-js","full_name":"scala-js/scala-js","owner":{"login":"scala-js","id":6039724,"avatar_url":"https://avatars.githubusercontent.com/u/6039724?v=3","gravatar_id":"","url":"https://api.github.com/users/scala-js","html_url":"https://github.com/scala-js","followers_url":"https://api.github.com/users/scala-js/followers","following_url":"https://api.github.com/users/scala-js/following{/other_user}","gists_url":"https://api.github.com/users/scala-js/gists{/gist_id}","starred_url":"https://api.github.com/users/scala-js/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scala-js/subscriptions","organizations_url":"https://api.github.com/users/scala-js/orgs","repos_url":"https://api.github.com/users/scala-js/repos","events_url":"https://api.github.com/users/scala-js/events{/privacy}","received_events_url":"https://api.github.com/users/scala-js/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/scala-js/scala-js","description":"Scala.js, the Scala to JavaScript compiler","fork":false,"url":"https://api.github.com/repos/scala-js/scala-js","forks_url":"https://api.github.com/repos/scala-js/scala-js/forks","keys_url":"https://api.github.com/repos/scala-js/scala-js/keys{/key_id}","collaborators_url":"https://api.github.com/repos/scala-js/scala-js/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/scala-js/scala-js/teams","hooks_url":"https://api.github.com/repos/scala-js/scala-js/hooks","issue_events_url":"https://api.github.com/repos/scala-js/scala-js/issues/events{/number}","events_url":"https://api.github.com/repos/scala-js/scala-js/events","assignees_url":"https://api.github.com/repos/scala-js/scala-js/assignees{/user}","branches_url":"https://api.github.com/repos/scala-js/scala-js/branches{/branch}","tags_url":"https://api.github.com/repos/scala-js/scala-js/tags","blobs_url":"https://api.github.com/repos/scala-js/scala-js/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/scala-js/scala-js/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/scala-js/scala-js/git/refs{/sha}","trees_url":"https://api.github.com/repos/scala-js/scala-js/git/trees{/sha}","statuses_url":"https://api.github.com/repos/scala-js/scala-js/statuses/{sha}","languages_url":"https://api.github.com/repos/scala-js/scala-js/languages","stargazers_url":"https://api.github.com/repos/scala-js/scala-js/stargazers","contributors_url":"https://api.github.com/repos/scala-js/scala-js/contributors","subscribers_url":"https://api.github.com/repos/scala-js/scala-js/subscribers","subscription_url":"https://api.github.com/repos/scala-js/scala-js/subscription","commits_url":"https://api.github.com/repos/scala-js/scala-js/commits{/sha}","git_commits_url":"https://api.github.com/repos/scala-js/scala-js/git/commits{/sha}","comments_url":"https://api.github.com/repos/scala-js/scala-js/comments{/number}","issue_comment_url":"https://api.github.com/repos/scala-js/scala-js/issues/comments{/number}","contents_url":"https://api.github.com/repos/scala-js/scala-js/contents/{+path}","compare_url":"https://api.github.com/repos/scala-js/scala-js/compare/{base}...{head}","merges_url":"https://api.github.com/repos/scala-js/scala-js/merges","archive_url":"https://api.github.com/repos/scala-js/scala-js/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/scala-js/scala-js/downloads","issues_url":"https://api.github.com/repos/scala-js/scala-js/issues{/number}","pulls_url":"https://api.github.com/repos/scala-js/scala-js/pulls{/number}","milestones_url":"https://api.github.com/repos/scala-js/scala-js/milestones{/number}","notifications_url":"https://api.github.com/repos/scala-js/scala-js/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/scala-js/scala-js/labels{/name}","releases_url":"https://api.github.com/repos/scala-js/scala-js/releases{/id}","created_at":"2013-02-18T16:33:55Z","updated_at":"2015-06-30T21:55:29Z","pushed_at":"2015-07-01T14:19:49Z","git_url":"git://github.com/scala-js/scala-js.git","ssh_url":"git@github.com:scala-js/scala-js.git","clone_url":"https://github.com/scala-js/scala-js.git","svn_url":"https://github.com/scala-js/scala-js","homepage":"http://www.scala-js.org/","size":16779,"stargazers_count":1742,"watchers_count":1742,"language":"Scala","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":150,"mirror_url":null,"open_issues_count":63,"forks":150,"open_issues":63,"watchers":1742,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/scala-js/scala-js/pulls/1770"},"html":{"href":"https://github.com/scala-js/scala-js/pull/1770"},"issue":{"href":"https://api.github.com/repos/scala-js/scala-js/issues/1770"},"comments":{"href":"https://api.github.com/repos/scala-js/scala-js/issues/1770/comments"},"review_comments":{"href":"https://api.github.com/repos/scala-js/scala-js/pulls/1770/comments"},"review_comment":{"href":"https://api.github.com/repos/scala-js/scala-js/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/scala-js/scala-js/pulls/1770/commits"},"statuses":{"href":"https://api.github.com/repos/scala-js/scala-js/statuses/775f61e83f1abf8718896a99a717d7022140016e"}}}}