)]}'
{
  "log": [
    {
      "commit": "b313559b212f6c22bb414c14937fb6a6d4b6c45a",
      "tree": "bd61c29b64459a53e70b56d70b93cae772b066a0",
      "parents": [
        "c9122a775e9b4d345058aed0dc01a9bb206d7178",
        "49a65e5526ed3a5353765b3e429c49543d1f3b8c"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Jul 27 15:54:51 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jul 27 15:54:51 2011 -0700"
      },
      "message": "Merge \"Move extract native libraries to JNI code\""
    },
    {
      "commit": "49a65e5526ed3a5353765b3e429c49543d1f3b8c",
      "tree": "aef4700f9ccea623c3a136c9ea622a5aeef85bb5",
      "parents": [
        "355240e6db6d8c12765df46481f64cce52b10404"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Jul 12 14:14:01 2011 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Jul 26 10:14:58 2011 -0700"
      },
      "message": "Move extract native libraries to JNI code\n\nThe built-in ZipFile class was quite a long time to find an unpack\nlibraries. Move everything to using the libutils ZipFileRO class that\ngoes quite a bit faster. Initial measurements are 6 times faster than\nthe Java code.\n\nAlso, read files off the disk and compare their CRC against the APK\u0027s\nCRC to see if we need to write the new file to disk. This also cuts down\nthe bootup time by up to a second per APK that has native files.\n\nChange-Id: Ic464a7969a17368fb6a6b81d026888c4136c7603\n"
    },
    {
      "commit": "395dcd07f1fa195e4a968c9ed32197a0de0a8522",
      "tree": "2f52f31c7cfbdf95eec5669ccdc6fecc74cf5607",
      "parents": [
        "8b9340b9e83656aa5ba388e1c9a990dc7824ae24",
        "66a2eec56401980053efd9fdc7883246981d9a20"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@android.com",
        "time": "Mon Jul 25 17:24:52 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Jul 25 17:24:52 2011 -0700"
      },
      "message": "am 64ed1059: am e612c881: am 4f3a8db6: am 3cf03987: Merge \"Continue idmap generation even if name lookup fails.\"\n\n* commit \u002764ed105957098a900d58e7c2598e060cb37755ce\u0027:\n  Continue idmap generation even if name lookup fails.\n"
    },
    {
      "commit": "66a2eec56401980053efd9fdc7883246981d9a20",
      "tree": "bbf83ec5be558d536e86597a4eb2e0e0741a3a62",
      "parents": [
        "476ceb890ad6c2aa25f644b2346fdf6c36e81867",
        "fed1e9021e5a760a372671cadcffbb6d051eaf27"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@android.com",
        "time": "Mon Jul 25 12:21:06 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Jul 25 12:21:06 2011 -0700"
      },
      "message": "am e612c881: am 4f3a8db6: am 3cf03987: Merge \"Continue idmap generation even if name lookup fails.\"\n\n* commit \u0027e612c881ecf74770098aa9c07d4f0611ac982038\u0027:\n  Continue idmap generation even if name lookup fails.\n"
    },
    {
      "commit": "2cc4e531f0950fd4faee67a74f29a6d7182674e7",
      "tree": "6c43eb4ce620ab4dafe06cd471505693a303a2ea",
      "parents": [
        "a4460559064d844c63a51e4e4f6c5a19126fc021",
        "c0e7a061709d1c5f6d0cbd2bb4fd626af2c577d7"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@android.com",
        "time": "Thu Jul 21 13:09:05 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Jul 21 13:09:05 2011 -0700"
      },
      "message": "am 3cf03987: Merge \"Continue idmap generation even if name lookup fails.\"\n\n* commit \u00273cf039876177b5b314b635bb12a1dae1b42f4605\u0027:\n  Continue idmap generation even if name lookup fails.\n"
    },
    {
      "commit": "585ef1e14a31bfdc83ec40f3362dc1d92c8de977",
      "tree": "152495e3e7c1d81bb10ef41565a4546eef361095",
      "parents": [
        "4fd15f54340e3cdc1f4916b91c6e5d32b673e21c"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jul 20 15:19:50 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jul 20 15:19:50 2011 -0700"
      },
      "message": "Remove unimplemented memory pool.\n\ndlmalloc does such a great job that we don\u0027t need a pool anyways.\n\nChange-Id: I105b28c4a5c491543959190c7c0a9de75a5b8052\n"
    },
    {
      "commit": "3919950de8b54d4781c09e711fd2afabab452e69",
      "tree": "44cd918bad0ecb43b0b869e72df6df6b9d4d825c",
      "parents": [
        "c9367a80d101827c8434db35521a3aabe5292123"
      ],
      "author": {
        "name": "Le-Chun Wu",
        "email": "lcwu@google.com",
        "time": "Thu Jul 14 14:27:18 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jul 14 20:14:07 2011 -0700"
      },
      "message": "Add a call to pthread_attr_destroy to avoid potential memory leaks.\n\nChange-Id: Ib57efc3530e9793298190cc9cab19c9af54e11a7\n"
    },
    {
      "commit": "c1053339974b52f7338cd2076f6ef6524a6fcfd5",
      "tree": "8320d89713f4277f6ed25399ecca8bd3077c9039",
      "parents": [
        "686f62fcaf4ce2f48d662fa89fb2e84ee9339c4d"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jul 14 00:29:49 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jul 14 04:11:23 2011 -0700"
      },
      "message": "Minor code cleanups in vector.\n\nFixed a potential bug where calling replaceAt with a reference to\nan existing element in the vector at the same index would cause\nthe element to be destroyed while being copied to itself.\n\nRefactored the conditions in _grow and _shrink for clarity.\nThe computations are exactly the same but I think it reads better\nthis way.  In particular, the ssize_t variable \u0027s\u0027 is gone: it didn\u0027t\nneed to be signed anyways because its value could never be negative.\n\nChange-Id: If087841c15e6a87160eee874720c4a77eb0e99a6\n"
    },
    {
      "commit": "686f62fcaf4ce2f48d662fa89fb2e84ee9339c4d",
      "tree": "fa392c2e074f53876e4fa9438f78acfc5146787b",
      "parents": [
        "8a1d693e592ba872024f7bce647024c4e167836e"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jul 13 22:22:02 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jul 14 04:11:22 2011 -0700"
      },
      "message": "Replace Vector _grow/_shrink checks with assert.\n\nOn review of the code, _grow and _shrink are checking for conditions\nthat cannot happen and that don\u0027t even really make sense.  For\nexample, if _shrink is called with where + amount \u003e mCount then\nthis is really bad, however the check only considered the case\nwhen where \u003e\u003d mCount and then it would arbitrarily choose a new\nvalue for where.  Huh?\n\nAs it happens, the callers are correctly validating the\narguments before passing them down to these methods so we can\nget rid of this code.\n\nChange-Id: I921852dba8997065bb0e9cac733e82028d14afcd\n"
    },
    {
      "commit": "a100c02b8d29b516b9191f18c87274ed8f45f2f8",
      "tree": "026a55bed9bbfb43e987ca9875926ec3d07f9699",
      "parents": [
        "15a99db8de19afe3096209717542429535b9b0b0"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Mon Jul 11 11:31:57 2011 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Wed Jul 13 15:30:41 2011 -0700"
      },
      "message": "Compress the backup output stream\n\nZlib compression, with a full flush between each application\u0027s\ndata.  Encryption will be performed on the already-compressed data\nonce that\u0027s implemented.\n\nOn restore, the streamed data is similarly uncompressed on the fly.\n\nChange-Id: I19b65c88e759a66527d10913d18fffa9df0bc011\n"
    },
    {
      "commit": "71753982479b9a68e36d43fbb58de0331ea5797c",
      "tree": "3261a0523f462502f8b6d8248a43536296ef4ffc",
      "parents": [
        "f8ff03d96d343ce4c78b701f2641cc6813c5d12c",
        "baa44b89ec159fd65230cbb8ebab62d63a513b0b"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Jul 12 12:15:07 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 12 12:15:07 2011 -0700"
      },
      "message": "Merge \"Remove the simulator target from all makefiles. Bug: 5010576\""
    },
    {
      "commit": "baa44b89ec159fd65230cbb8ebab62d63a513b0b",
      "tree": "644c9bc6ebe2b1a545a2934ce268640d8673cb0f",
      "parents": [
        "919b1a8495fb413a7e25f08bca59533146829ee4"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jul 11 22:12:16 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jul 11 22:12:16 2011 -0700"
      },
      "message": "Remove the simulator target from all makefiles.\nBug: 5010576\n\nChange-Id: I04d722f258951a3078fe07899f5bbe8aac02a8e8\n"
    },
    {
      "commit": "f6f177f2e282da6dcff3c4725eb66096b196aac5",
      "tree": "32ebc2db8844ff30fe99cf24527500a8cc40ea71",
      "parents": [
        "c5603d20aded724798561feff0f7a90ddd98b787"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jul 11 16:26:18 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jul 11 16:26:18 2011 -0700"
      },
      "message": "Fix typo in an assert\u0027s log\n\nChange-Id: I94883a23a0a92eaf3e4976f942f747a2137499ac\n"
    },
    {
      "commit": "be3c018f8b00738cd7e884058966f82597b8e370",
      "tree": "6f4d3f8e77e1b823447bfb9e4112d284a83128d1",
      "parents": [
        "7e918860f9d496bf0c4b7e1649216c9209c57850",
        "58e012d1e37e1272d43c9ff0f56c9b236dd1d7f1"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 06 11:37:53 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jul 06 11:37:53 2011 -0700"
      },
      "message": "Merge \"Add Thread::join\""
    },
    {
      "commit": "f44c896b091cbbea4a96a6c47ddd65f77ba54b32",
      "tree": "4516f5a0e380d2ed4ab016fc27c6a157979ce163",
      "parents": [
        "3135e6e0f0f6099cf1890f6218fd05af03b47204",
        "ce63396effb32212501658c25f2ec6d1bd8b0307"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 05 15:08:31 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 05 15:08:31 2011 -0700"
      },
      "message": "Merge \"Thread ID zero for androidSetThreadSchedulingGroup\""
    },
    {
      "commit": "c18d4da5e4d2d41fd5423c10da993d70c2b1b9e0",
      "tree": "33653c3ccb806f44f9b0a8790f87dc89130ada4c",
      "parents": [
        "2a5be6620bcc1151f3008783b0462ba3cabac041"
      ],
      "author": {
        "name": "Jason Simmons",
        "email": "jsimmons@google.com",
        "time": "Tue Jun 28 17:43:30 2011 -0700"
      },
      "committer": {
        "name": "Jason Simmons",
        "email": "jsimmons@google.com",
        "time": "Tue Jun 28 17:43:30 2011 -0700"
      },
      "message": "Add a linear transform library to libutils\n\nChange-Id: Icdec5a6bebd9d8f24b3f335f8ec8b09a5810a774\n"
    },
    {
      "commit": "cd604a1a6e20aa43ebf21b4a1aa05e594c81747f",
      "tree": "02743a14290374619febbf2577bcd4e2ee1d6578",
      "parents": [
        "a4472c018f815580a504d038c70ea4bf55754359"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri Jun 24 15:06:48 2011 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri Jun 24 15:06:48 2011 -0700"
      },
      "message": "Fix settings restore\n\nAlso correct the debug-mode logging of error locations in backup data.\nBug 4914182\n\nChange-Id: Ie7dda0192afa819e42490b7ffd2d3db6f11968f6\n"
    },
    {
      "commit": "58e012d1e37e1272d43c9ff0f56c9b236dd1d7f1",
      "tree": "2c690746cbb3c4129ae9b5d4794b414effbd4037",
      "parents": [
        "6eb0e6526c9fea3accfbd3a4c6ae3eb7277d578f"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jun 23 12:55:29 2011 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jun 23 12:55:29 2011 -0700"
      },
      "message": "Add Thread::join\n\nThis new API will be used by applications that previously used the\nlower-level pthread APIs (including pthread_join).  Centralizing on the\nThread class instead of pthread will permit additional functionality to\nbe added later in only one location.\n\nChange-Id: I8460169ac9c61ac9f85752405ed54c94651058d7\n"
    },
    {
      "commit": "ce63396effb32212501658c25f2ec6d1bd8b0307",
      "tree": "aba1bb6bda3ca418bc455b6c15ff7cc3720224db",
      "parents": [
        "d80fa1aa3933b8f2ab55dd0ce6ff87630997a492"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 22 17:42:23 2011 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 22 17:45:30 2011 -0700"
      },
      "message": "Thread ID zero for androidSetThreadSchedulingGroup\n\nAlready implemented by androidSetThreadPriority but not documented\n\nChange-Id: I85302b17092952065f3f3a4214d8d8abdd465dbd\n"
    },
    {
      "commit": "e397ce2880020b7c04a711e481fc6faf8b52cecd",
      "tree": "51284820a388ffca949bf1773e9ee8229d52395e",
      "parents": [
        "dbe60ddd85abf4b18f3b9a97b33e0efa95b0dd8e",
        "866f87251fb7163dcd4133b13b98510a871f3239"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 15 22:42:52 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Jun 15 22:42:52 2011 -0700"
      },
      "message": "am 0887b8c2: am 8e18668d: revert surfaceflinger leak fix as it uncovered a crasher on xoom (DO NOT MERGE)\n\n* commit \u00270887b8c2e583e682cd2c1bc909cb3fdbec704004\u0027:\n  revert surfaceflinger leak fix as it uncovered a crasher on xoom (DO NOT MERGE)\n"
    },
    {
      "commit": "dbe60ddd85abf4b18f3b9a97b33e0efa95b0dd8e",
      "tree": "01e09e2a5586c79999831795bce23b509374fcce",
      "parents": [
        "e776586a081bddb734441a64f62ea28bee05a96f",
        "6fb53d28350d934f1d8ccd6350d9077170d52d60"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 15 22:12:32 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Jun 15 22:12:32 2011 -0700"
      },
      "message": "am d5244e0a: am 52a43990: Revert \"revert surfaceflinger leak fix as it uncovered a crasher on xoom\"\n\n* commit \u0027d5244e0a88ed2f843651aa5ffdc71a45c968e0f3\u0027:\n  Revert \"revert surfaceflinger leak fix as it uncovered a crasher on xoom\"\n"
    },
    {
      "commit": "111280a8de1700f718744f48d163789473b9da30",
      "tree": "02a86dc22485fd8ce11695a5684f670154c34610",
      "parents": [
        "ef890381093fef91792390e2885920a43763e7d3"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Jun 15 20:41:15 2011 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Jun 15 20:55:49 2011 -0700"
      },
      "message": "Use rand() for MinGW\n\nThe version of MinGW we use doesn\u0027t have nrand48() which is really lame,\nbut we need to use libutils in the Windows SDK.\n\nChange-Id: If854c03dbf02bc29e79f49e4539f08c2bf057517\n"
    },
    {
      "commit": "1b2c2a9ea0108cd182a56c47997ec68ee8de02b3",
      "tree": "1c2f422290bfac3762ea20bd9471416ac11350f9",
      "parents": [
        "63ad28fb53a1b3b652495e57eb5fe52eb2a0ec80"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 15 20:42:47 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 15 20:45:32 2011 -0700"
      },
      "message": "revert surfaceflinger leak fix as it uncovered a crasher on xoom (DO NOT MERGE)\n\nThis reverts commit 52a43990880b27808bcf562afcc4209d34728e6e.\n\nChange-Id: I1856a48f863b051395b8091ddfd1e01292fa1b1e\n"
    },
    {
      "commit": "63ad28fb53a1b3b652495e57eb5fe52eb2a0ec80",
      "tree": "c45c57e57309fcb0b20e33a9262564834accdc5f",
      "parents": [
        "c6601d3e018d0cadd1cf246da6d85ee5607e524b"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 15 20:41:24 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 15 20:42:25 2011 -0700"
      },
      "message": "Revert \"revert surfaceflinger leak fix as it uncovered a crasher on xoom\"\n\nThis reverts commit af6edba59e250adbdfa5b3c3be134f70d8c38a16.\n\nChange-Id: I7793d3ca8a4d20a2b188364f47854328ab5f586d\n"
    },
    {
      "commit": "e776586a081bddb734441a64f62ea28bee05a96f",
      "tree": "51284820a388ffca949bf1773e9ee8229d52395e",
      "parents": [
        "995e8f239ab52aaf017f4b16c2b3e0a235028bdd",
        "a31b4f3fb94d75df709e22f5020bb43580c51297"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 15 20:21:31 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Jun 15 20:21:31 2011 -0700"
      },
      "message": "am 7ecdeb6e: am d20d72d1: Merge \"revert surfaceflinger leak fix as it uncovered a crasher on xoom\" into honeycomb-mr2\n\n* commit \u00277ecdeb6e548ff71d4f70b343e30136e89eaa3e33\u0027:\n  revert surfaceflinger leak fix as it uncovered a crasher on xoom\n"
    },
    {
      "commit": "3790e7997a9a4444ef95c862046cf0053ab4703f",
      "tree": "1c2f422290bfac3762ea20bd9471416ac11350f9",
      "parents": [
        "d502ddadcaffce5321aca05fb902f9e3d7d4b370"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 15 19:20:52 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 15 19:31:04 2011 -0700"
      },
      "message": "revert surfaceflinger leak fix as it uncovered a crasher on xoom\n\nBug: 4600244\nChange-Id: Ia68ebf0f243a051ff6a21b3863e3e5d259bbf7ac\n"
    },
    {
      "commit": "35cc0fcd51cb8c5580c516247407623e4e8e0cfa",
      "tree": "3a36b9c93fe8480ded776e5ca5c21edd403fe09e",
      "parents": [
        "dd729fc173fdb9f4e7b95334b2715048602e868b",
        "76feee7a58af9626371a3540e6acc936662faabe"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 15 14:13:04 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Jun 15 14:13:04 2011 -0700"
      },
      "message": "am afffa8fa: fix RefBase so it retains binary-compatibility with gingerbread (DO NOT MERGE)\n\n* commit \u0027afffa8fa9f82a7343e1158bf921931fd3e3df615\u0027:\n  fix RefBase so it retains binary-compatibility with gingerbread (DO NOT MERGE)\n"
    },
    {
      "commit": "982a69f827a8244ade7d95913726f1d0a6b2a9a3",
      "tree": "9afdd1fa266ef7914943b2ada0a0193581ac1891",
      "parents": [
        "0e59cd3ab59d4907e9aeaee1e7d51a10971b0afa",
        "f0c412513ff0efe0df40325d98a99de7634548ee"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jun 14 17:54:25 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jun 14 17:54:25 2011 -0700"
      },
      "message": "Merge \"Bug 4608375\""
    },
    {
      "commit": "f0c412513ff0efe0df40325d98a99de7634548ee",
      "tree": "01e21a22d151318ad903e3259bf9a4c884fe4fa9",
      "parents": [
        "a23a53296fdfc465b074064b225057946a04a375"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jun 14 10:35:34 2011 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jun 14 10:41:50 2011 -0700"
      },
      "message": "Bug 4608375\n\nUpdate priority and policy together for audio threads\n\nChange-Id: Ib3b07b32586c222c4aacbf23414ae8b05db502be\n"
    },
    {
      "commit": "ddc31c3e2bc6ffe66695c385d23e8ccc3c6dad06",
      "tree": "dc823058282daaf8d85a5a2c69feb3dd0f20bd93",
      "parents": [
        "5eabb2c13cf2fb41861dd29c76e3ead91c2bec0e"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Sun Jun 12 18:05:53 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jun 13 18:39:45 2011 -0700"
      },
      "message": "fix RefBase so it retains binary-compatibility with gingerbread\n\nBug: 4595257\nChange-Id: I0d5e10f497e3f39868bff58f6ded510c38b44b12\n"
    },
    {
      "commit": "7794b30589786098756e4734794f0cca30109557",
      "tree": "c358eff473b1b9eade46759b3450aa522eb82d46",
      "parents": [
        "574462f9d84a2a7aad0442657167d7e77ebcbef6",
        "4c83aefe5938b71555792fc9862c1ee3ea819480"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jun 13 14:15:00 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Jun 13 14:15:00 2011 -0700"
      },
      "message": "am 77079399: am a9c9a4ba: fix RefBase so it retains binary-compatibility with gingerbread (DO NOT MERGE)\n\n* commit \u002777079399fca3e9c71e2ac06f3da26934e1c278b9\u0027:\n  fix RefBase so it retains binary-compatibility with gingerbread (DO NOT MERGE)\n"
    },
    {
      "commit": "76feee7a58af9626371a3540e6acc936662faabe",
      "tree": "222b49b4aef87b2a1ba8a6de61f08565641bc4e5",
      "parents": [
        "907dfec02de9f6386d13351e974cda99160394c5"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Sun Jun 12 18:05:53 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jun 13 13:58:34 2011 -0700"
      },
      "message": "fix RefBase so it retains binary-compatibility with gingerbread (DO NOT MERGE)\n\nBug: 4595257\nChange-Id: I4773cf4fe59b2509db0ed733739eb6961d473b25\n"
    },
    {
      "commit": "867740df0509e1f9b44f16187d1428ba8f351811",
      "tree": "aab8fe281f6eaa5b507056335a469e5dc604628f",
      "parents": [
        "fcd83591ffa2c811d9ea5d3a3f514f68d57ec1e5"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Sun Jun 12 18:05:53 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jun 13 13:44:28 2011 -0700"
      },
      "message": "fix RefBase so it retains binary-compatibility with gingerbread (DO NOT MERGE)\n\nBug: 4595257\nChange-Id: I1db83149107d7dab1f0b7e73c684e0ff82e17e62\n"
    },
    {
      "commit": "ac642349ba89c8839c421502fb779bee5cebfee3",
      "tree": "5dbaaf704b024349585387b85ed9b6f040008318",
      "parents": [
        "4bcd592df7aa2df5a8eedc71ef72d982048bea4b",
        "58c8dd2aa9a8931a53923054679fb31fecc696c9"
      ],
      "author": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Mon Jun 13 12:32:46 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jun 13 12:32:46 2011 -0700"
      },
      "message": "Merge \"libutils: add a binary blob cache implementation.\""
    },
    {
      "commit": "c4a0feaaf4dbf8052ee2c231a522a5f596dec42f",
      "tree": "c5f79e18c6a043a900b59f2eba73a93e6a2a3786",
      "parents": [
        "a23a53296fdfc465b074064b225057946a04a375",
        "d9e1bb76fe1e01fb79bb65959b92051aa18fddbe"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jun 13 10:30:29 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jun 13 10:30:29 2011 -0700"
      },
      "message": "Merge \"Remove redundant memory barrier\""
    },
    {
      "commit": "d9e1bb76fe1e01fb79bb65959b92051aa18fddbe",
      "tree": "01d4ae97d8d952940f8b48c47b7f670315756e9b",
      "parents": [
        "53df9ca28f6cfe9acf897579985ef6fcde13cb21"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jun 02 08:59:28 2011 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jun 10 17:07:46 2011 -0700"
      },
      "message": "Remove redundant memory barrier\n\npthread_create already includes the necessary memory barriers:\n - parent at pthread_create : pthread_mutex_unlock(start_mutex)\n - child at __thread_entry : pthread_mutex_lock(start_mutex)\n\nAdd lock around uses of mThread.\n\nAdded comments:\n - uses of mThread require lock\n - androidCreateRawThreadEtc returned ID is not safe for direct use from non-parent threads.\n\nChange-Id: I18cb296b41ddaf64cf127b57aab31154319b5970\n"
    },
    {
      "commit": "66168d4bb452492907765084de886b8cff2fd5b1",
      "tree": "862c72cb956abeb756b2d3c23455935cc5616b19",
      "parents": [
        "a6eb6791335d11751f326b7d37b29862a3714179",
        "199512446d07e15797d1ae8b21b92ae61a372352"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jun 10 12:45:36 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jun 10 12:45:36 2011 -0700"
      },
      "message": "resolved conflicts for merge of f51ded0f to master\n\nChange-Id: Ida356524a68aeb2b9b0013dfbb6ab4bd11e616e2\n"
    },
    {
      "commit": "5ea8834ab90edad020ae9aa94753eec1901eca51",
      "tree": "a391a16652e856ed088baf870d69ccd2630df64f",
      "parents": [
        "1844b17bbcf58766857a93e5c8ad8f20eb28205b",
        "b0cc4a8083d81f00f808edf75cde336741fdd170"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jun 09 17:50:36 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jun 09 17:50:36 2011 -0700"
      },
      "message": "resolved conflicts for merge of e2aa0490 to master\n\nChange-Id: Id0448a1598fc93aca0652b29253e02586e35a067\n"
    },
    {
      "commit": "199512446d07e15797d1ae8b21b92ae61a372352",
      "tree": "0c82e60cb9d297caa5d2f66016ca7ded75d71b0d",
      "parents": [
        "fd8454ebbfe30d824088bb85b5cbeb88794f5ce2",
        "3bbe6fb6b23becfa745e6b49ba450845d0f12336"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jun 09 16:06:07 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Jun 09 16:06:07 2011 -0700"
      },
      "message": "am a8d7ea06: am 220cd77d: Merge \"Enforce public resource restriction on bag parents.\" into honeycomb-mr2\n\n* commit \u0027a8d7ea067cf22baeee2ff0a33e5a8c5a35936942\u0027:\n  Enforce public resource restriction on bag parents.\n"
    },
    {
      "commit": "d4bfc93113bd1a73145935dbf13e1560d151ae17",
      "tree": "7102f592c32a398f5836aea01662e69fc1c2413d",
      "parents": [
        "c762e30727680e194add921b6353a790e6e4c787"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jun 09 11:29:08 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jun 09 15:27:39 2011 -0700"
      },
      "message": "Enforce public resource restriction on bag parents.\n\nNeed to put some more styles in the SDK to avoid breaking apps.\n\nAlso, welcome Android 3.2.\n\nChange-Id: Ia31d07c9b1b91ad868d8630437fdc1b5ae24f37d\n"
    },
    {
      "commit": "a1bb021469878a1578a55b671402fe667d0a2546",
      "tree": "02a19250ad2d2fdec0f99d9882776256959ede28",
      "parents": [
        "795a71517873d39c268117696a6b1d785a955aa2",
        "c2db91c3bfa3e61e00a4c94b02f3e9685fa09cd9"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Jun 09 13:54:54 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Jun 09 13:54:54 2011 -0700"
      },
      "message": "am 96fcb702: am b40e85f9: am 645434fb: Merge \"Fix a leak in RefBase\" into honeycomb-mr2\n\n* commit \u002796fcb702d75dcfb36c3ebd8fe420c8b29fa67fb7\u0027:\n  Fix a leak in RefBase\n"
    },
    {
      "commit": "61334a3f831ecd5ad7b91a2b81532f5caffb1307",
      "tree": "3cc224ea0317387c64e5dc6e835ad889ac36f793",
      "parents": [
        "5f3274036c5d8cf879eacfac323f9622d15d343f"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Wed Jun 08 20:09:31 2011 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Wed Jun 08 20:11:49 2011 -0700"
      },
      "message": "Fix handling of directory entries\n\nDon\u0027t emit tar blocks for directories with an invalid nonzero size.  Also, if\nsuch an entry is encountered during restore, don\u0027t actually attempt to treat\nit as valid and thus skip over the next actual tar entry.\n\nThis patch also adds tracking of the data actually consumed during restore,\nand reports a total at the end of stream.\n\nChange-Id: I625173f76df3c007e899209101ff2b587841f184\n"
    },
    {
      "commit": "b0cc4a8083d81f00f808edf75cde336741fdd170",
      "tree": "f949892f9d4299de57cbfad53d96970f7cb51df1",
      "parents": [
        "a89933c191f9c8a9779bbf6fc9407a81d47c5bdc",
        "2b6f1b12f724491f55fcec633a4fb4dfc3c3bb37"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jun 08 20:06:40 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Jun 08 20:06:40 2011 -0700"
      },
      "message": "am a1396dfe: am 02140891: Merge \"Work on issue #4518815: Compatibility mode introduces compatibility regression...\" into honeycomb-mr2\n\n* commit \u0027a1396dfe7ad6ec6953f544be42d69d7804ab0fd4\u0027:\n  Work on issue #4518815: Compatibility mode introduces compatibility regression...\n"
    },
    {
      "commit": "ab6bf752b32e1da9dfecbb6f28ca7a0927ef6262",
      "tree": "3b95fad964a5ac86852adf85eb49d3e17d1c5315",
      "parents": [
        "ee8e9af975c2ee55cae02cf3a5655ec6692fd5f5",
        "acf87675ae956a5e94df15115af4fef0902576c8"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jun 08 20:00:50 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jun 08 20:00:50 2011 -0700"
      },
      "message": "Merge \"Work on issue #4518815: Compatibility mode introduces compatibility regression...\" into honeycomb-mr2"
    },
    {
      "commit": "ef1e16fc0bb2e88074124ba275beab41b24b338b",
      "tree": "2bec06355ab419e7a2a9dfee166cab7980866ea9",
      "parents": [
        "233fca912a49596abd8672aef726956695326dd3",
        "9a03cecf8b63810ba3f451bd139d3b473cb67c81"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 08 19:56:06 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Jun 08 19:56:06 2011 -0700"
      },
      "message": "am 19974ecc: Fix a leak in RefBase (DO NOT MERGE)\n\n* commit \u002719974eccdbd3e4dbd7e3b2cc401db7806d4a17bc\u0027:\n  Fix a leak in RefBase (DO NOT MERGE)\n"
    },
    {
      "commit": "c2db91c3bfa3e61e00a4c94b02f3e9685fa09cd9",
      "tree": "6426ce816e8f13c97fabb912ca4138e121441399",
      "parents": [
        "903f4a0cf3fcdb4140600661f2185502834743c2",
        "58d6631e4d2f94cb4ab0f1680536abe849ccfeed"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 08 19:34:30 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Jun 08 19:34:30 2011 -0700"
      },
      "message": "am b40e85f9: am 645434fb: Merge \"Fix a leak in RefBase\" into honeycomb-mr2\n\n* commit \u0027b40e85f90146a654bfe5657187be491147814ea0\u0027:\n  Fix a leak in RefBase\n"
    },
    {
      "commit": "acf87675ae956a5e94df15115af4fef0902576c8",
      "tree": "d6f215bb20004d8093048559371da2233d642af5",
      "parents": [
        "59fd67e54bebec5adac5026ece949768f73dd434"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Jun 07 14:09:47 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jun 08 18:45:43 2011 -0700"
      },
      "message": "Work on issue #4518815: Compatibility mode introduces compatibility regression...\n\n...for Market App iRunner\n\nThere were a lot of serious issues with how we updated (or often didn\u0027t update)\nthe display and resource state when switching compatibility mode in conjunction\nwith restarting and updating application components.  This addresses everything\nI could find.\n\nUnfortunately it does *not* fix this particular app.  I am starting to think this\nis just an issue in the app.  This change does fix a number of other problems\nI could repro, such as switching the compatibility mode of an IME.\n\nAlso a few changes here and there to get rid of $#*\u0026^!! debug logs.\n\nChange-Id: Ib15572eac9ec93b4b9966ddcbbc830ce9dec1317\n"
    },
    {
      "commit": "3b0a7a739e7191964cddd2ff4b87cdee899de82f",
      "tree": "628023f8216fd6590f9c0beb3cc0aaef576313ca",
      "parents": [
        "1c251f9d9a514d2233361b88ecc657c4de9b5eca"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 08 16:05:30 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 08 16:25:01 2011 -0700"
      },
      "message": "Fix a leak in RefBase\n\nthis bug was introduced recently. it caused RefBase\u0027s weakref_impl\nstructure to be leaked for every RefBase object (about 20 bytes).\n\nChange-Id: Id85e749ba04521199555dd701198edd097c313d4\n"
    },
    {
      "commit": "9a03cecf8b63810ba3f451bd139d3b473cb67c81",
      "tree": "2836faac6d2de1e1be186c2af9622bed3b4f849a",
      "parents": [
        "df2590212745ce3beea59a2d5e6fc53ca64e4bd4"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 08 16:05:30 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 08 16:13:39 2011 -0700"
      },
      "message": "Fix a leak in RefBase (DO NOT MERGE)\n\nthis bug was introduced recently. it caused RefBase\u0027s weakref_impl\nstructure to be leaked for every RefBase object (about 20 bytes).\n\nChange-Id: Ia9b155fbfa643ef72cfb8129e96260a3b806a78c\n"
    },
    {
      "commit": "9f7bcda136283db5bed5f6c66475d11bcda2de5a",
      "tree": "23f458f7b2bf07089e03934403762efdce4f4e3b",
      "parents": [
        "5212f30bbfc9cb99b69962aa07b6181a534697be"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue Jun 07 13:17:17 2011 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue Jun 07 13:17:17 2011 -0700"
      },
      "message": "Fix embedded spaces in tar stream EVEN HARDER\n\nChange-Id: I97ac586ff3541a05d73e1e53f680517c15e6c662\n"
    },
    {
      "commit": "72a404d102a526e4a2b62110cf35226595f335b9",
      "tree": "f78e9d9b7cd06b352f543067351ea53d97cda089",
      "parents": [
        "dcfc0443afd865dc2587e7a44be7e2e60806bd30"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Jun 02 15:08:13 2011 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue Jun 07 12:16:27 2011 -0700"
      },
      "message": "Implement shared-storage full backup/restore\n\nEvery available shared-storage volume is backed up, tagged with its\nordinal in the set of mounted shared volumes.  This is an approximation\nof \"internal + the external card\".  This lets us restore things to the\nsame volume [or \"equivalent\" volume, in the case of a cross-model\nrestore] as they originated on.\n\nAlso fixed a bug in the handling of files/dirs with spaces in\ntheir names.\n\nChange-Id: I380019da8d0bb5b3699bd7c11eeff621a88e78c3\n"
    },
    {
      "commit": "f3d939c5e5c2fa9b1ffea817fde3eece869e2bec",
      "tree": "e3e9d09a6d13e259b198d98c08a92c043137eef9",
      "parents": [
        "2768505342efc55ee040b70bb490453d2369db23"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jun 06 09:55:15 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jun 06 15:14:25 2011 -0700"
      },
      "message": "merge various SF fixes from gingerbread to honeycomb-mr2 (DO NOT MERGE)\n\n  Fix a race that could cause GL commands to be executed from the wrong thread.\n  RefBase subclasses can now decide how they want to be destroyed.\n  Fix a race in SurfaceFlinger that could cause layers to be leaked forever.\n  Fix a race-condtion in SurfaceFlinger that could lead to a crash.\n\ninitial cherry-pick:\nresolved conflicts for merge of b9783b49 to honeycomb-plus-aosp\n\nChange-Id: I2a335e03fff219e35c18a7b0089b3a11d636576f\n"
    },
    {
      "commit": "0129f1a27f13e175c9055e6f169096e5ac40602d",
      "tree": "00a25e32363374782ade1e998b6af138b1f39f45",
      "parents": [
        "58ac798e454f17322b4cc42ea947eff70deca5ee",
        "be93983384d967d981e2ca4ca21e5916c93c270d"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Jun 06 09:55:15 2011 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Jun 06 09:55:15 2011 -0700"
      },
      "message": "resolved conflicts for merge of b9783b49 to honeycomb-plus-aosp\n\nChange-Id: I1d86ea56b3d1d1b69f6671e5b0df0ca3f0c79643\n"
    },
    {
      "commit": "15e113033bf75fe1a5b998f6e69c9cac0691e187",
      "tree": "feab4fdc85c1da9c1b6498086b3ad7ff3c1f4c93",
      "parents": [
        "c507859dd8309825658ffcb944e3f13f922f18dd"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Wed May 18 16:28:19 2011 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Wed Jun 01 15:09:55 2011 -0700"
      },
      "message": "Restore from a previous full backup\u0027s tarfile\n\nUsage:  adb restore [tarfilename]\n\nRestores app data [and installs the apps if necessary from the backup\nfile] captured in a previous invocation of \u0027adb backup\u0027.  The user\nmust explicitly acknowledge the action on-device before it is allowed\nto proceed; this prevents any \"invisible\" pushes of content from the\nhost to the device.\n\nKnown issues:\n\n* The settings databases and wallpaper are saved/restored, but lots\n  of other system state is not yet captured in the full backup.  This\n  means that for practical purposes this is usable for 3rd party\n  apps at present but not for full-system cloning/imaging.\n\nChange-Id: I0c748b645845e7c9178e30bf142857861a64efd3\n"
    },
    {
      "commit": "98d1f99704b78cd17c7cdaa5d4898d3547428a28",
      "tree": "2ee963463c3506b8788200904160b078e5e5a51d",
      "parents": [
        "6f5893ff6c1e8402d4470c5ada07c39ebc4dc3a7",
        "01fdb1bb41dbdfa8366f4d957ef09ba1a8c4a8bb"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed May 25 14:46:53 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed May 25 14:46:53 2011 -0700"
      },
      "message": "am 8148cc3e: am 86ea1f5f: Initial checkin of spot presentation for touchpad gestures. (DO NOT MERGE)\n\n* commit \u00278148cc3e47e50c916066e2fed562618b5827188f\u0027:\n  Initial checkin of spot presentation for touchpad gestures. (DO NOT MERGE)\n"
    },
    {
      "commit": "9a2c1ca2dd96c30a7bd2242cf08e9f4ba80cc31c",
      "tree": "2fe66db634a483e4cbf2c768ba3b8f30be571c48",
      "parents": [
        "689e53cc822f0dc543d3728559a6ed8cea60cf57",
        "270f43e008c2baff60174a3079399d887c55d6b0"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed May 25 14:42:20 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed May 25 14:42:20 2011 -0700"
      },
      "message": "am af685f3b: am 85a7f99c: Merge \"Refactor how timeouts are calculated. (DO NOT MERGE)\" into honeycomb-mr2\n\n* commit \u0027af685f3bb566f297deee1615d55d4f33d5580ba3\u0027:\n  Refactor how timeouts are calculated. (DO NOT MERGE)\n"
    },
    {
      "commit": "d3e6d3e763544511a870b354f657600d25c42b91",
      "tree": "b2e51ea79ac3fb83fa91c0e9906817eacbd203cb",
      "parents": [
        "fa785531f7510e3dee799dd4b37279e1e04f4a81"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Apr 12 22:39:53 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Wed May 25 14:37:17 2011 -0700"
      },
      "message": "Initial checkin of spot presentation for touchpad gestures. (DO NOT MERGE)\n\nAdded a new PointerIcon API (hidden for now) for loading\npointer icons.\n\nFixed a starvation problem in the native Looper\u0027s sendMessage\nimplementation which caused new messages to be posted ahead\nof old messages sent with sendMessageDelayed.\n\nRedesigned the touch pad gestures to be defined in terms of\nmore fluid finger / spot movements.  The objective is to reinforce\nthe natural mapping between fingers and spots which means there\nmust not be any discontinuities in spot motion relative to\nthe fingers.\n\nRemoved the SpotController stub and folded its responsibilities\ninto PointerController.\n\nChange-Id: Ib647dbd7a57a7f30dd9c6e2c260df51d7bbdd18e\n"
    },
    {
      "commit": "be93983384d967d981e2ca4ca21e5916c93c270d",
      "tree": "c790c5fc8fa491fd5310bfe40fd410317fc45515",
      "parents": [
        "7555e549c094e7edda71b91d6e217de5e4fe4a67",
        "5657c010c67a619986bdbfa2178b9bd920fe76ed"
      ],
      "author": {
        "name": "Simon Wilson",
        "email": "simonwilson@google.com",
        "time": "Tue May 24 17:29:12 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue May 24 17:29:12 2011 -0700"
      },
      "message": "am c9cd2387: Merge changes I37f0f315,I8cbf6044,Ibb598931,I5262bf11 into gingerbread\n\n* commit \u0027c9cd2387b6938a6fbefc731d2177902266f2a130\u0027:\n  Fix a race that could cause GL commands to be executed from the wrong thread.\n  RefBase subclasses can now decide how they want to be destroyed.\n  Fix a race in SurfaceFlinger that could cause layers to be leaked forever.\n  Fix a race-condtion in SurfaceFlinger that could lead to a crash.\n"
    },
    {
      "commit": "1eb42cf6dbe457a5173193eb0276f8c703003db5",
      "tree": "aa5096afcbfaf5c3d004f0a90d8880981302cc0e",
      "parents": [
        "c5982b7bee75467f50d681ad54120eadc7a8d88e"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Mar 17 01:34:19 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Mon May 23 17:20:42 2011 -0700"
      },
      "message": "Refactor how timeouts are calculated. (DO NOT MERGE)\n\nAdded a timeout mechanism to EventHub and InputReader so that\nInputMappers can request timeouts to perform delayed processing of\ninput when needed.\n\nChange-Id: I89c1171c9326c6e413042e3ee13aa9f7f1fc0454\n"
    },
    {
      "commit": "3d6881f3940dd19268006e71dd2ed9896588dfb6",
      "tree": "7cd587807e26896f4cbc34e5aa47319c0c5df55f",
      "parents": [
        "34cd9b72f1474ccbfd2338049d81a24bfa814f35"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu May 19 18:03:31 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 23 16:13:48 2011 -0700"
      },
      "message": "RefBase subclasses can now decide how they want to be destroyed.\n\nThis adds a destroy() virtual on RefBase which\nsublasses can implement. destroy() is called\nin lieu of the destructor whenthe last strong\nref goes away.\n\nBug: 4483050\nChange-Id: I8cbf6044a6fd3f01043a45592b5a60fa1e5fade2\n"
    },
    {
      "commit": "d31099f021e998cd4720f18380b9feac863eba07",
      "tree": "dc6b00566431771934a0e1084a316317338b994e",
      "parents": [
        "3933bcd76f1d3fd70adfaa8295e207c4d04a8c0d",
        "8561698c9bd2fd91aee81a3ac8fa5a2f7d2351f6"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri May 20 13:15:20 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri May 20 13:15:20 2011 -0700"
      },
      "message": "Merge \"Call RefBase::destroy() when OBJECT_LIFETIME_* is not the default\""
    },
    {
      "commit": "79ba9b5e39bfcbc6775bca56de139cf0fc5c914f",
      "tree": "1542c8901b2f9a9dcefde62c80518ca22f36f2fc",
      "parents": [
        "342451d19f9e985912a413612ca6c1de5a13d339",
        "7583282db6783a7550b70d5b8bfbe613d0480de2"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu May 19 21:44:52 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu May 19 21:44:52 2011 -0700"
      },
      "message": "resolved conflicts for merge of 06a8ceac to master\n\nChange-Id: Id51574c825affddfac14ad7214c5496d6a3d6e69\n"
    },
    {
      "commit": "8561698c9bd2fd91aee81a3ac8fa5a2f7d2351f6",
      "tree": "82d69449726426a52d58addd08a48ba46feb5a0a",
      "parents": [
        "342451d19f9e985912a413612ca6c1de5a13d339"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu May 19 20:41:27 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu May 19 21:01:04 2011 -0700"
      },
      "message": "Call RefBase::destroy() when OBJECT_LIFETIME_* is not the default\n\nChange-Id: Ifb2069e095dba57b7d97e9f2d942fd85fa975f58\n"
    },
    {
      "commit": "20aeb1caa4e2232153d3a59923722c19a3563a78",
      "tree": "1e933bee5fbb9c1927204a06145473808b71b0d2",
      "parents": [
        "18c7868cecfe3b1c18113d13bda4e853d43e9fb1"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu May 19 18:03:31 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu May 19 19:40:01 2011 -0700"
      },
      "message": "RefBase subclasses can now decide how they want to be destroyed.\n\nThis adds a destroy() virtual on RefBase which\nsublasses can implement. destroy() is called\nin lieu of the destructor whenthe last strong\nref goes away.\n"
    },
    {
      "commit": "7583282db6783a7550b70d5b8bfbe613d0480de2",
      "tree": "cc49bbb8abf379490d8a487b9e8b36e43e5ecb3b",
      "parents": [
        "40b97c0b7fa87ab52f4cbb3b1a3a8bd457b9493b",
        "6c87dbce9f6e7b6a1bb185e0a796cec25cb7efe8"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu May 19 19:34:21 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu May 19 19:34:21 2011 -0700"
      },
      "message": "am c851ea56: am 69cb8757: Add new \"-swNNNdp\" resource qualifier.\n\n* commit \u0027c851ea5672f6e042c2e89b2a2ce4a2467e1fcd2a\u0027:\n  Add new \"-swNNNdp\" resource qualifier.\n"
    },
    {
      "commit": "22585947ff9d5b4cd4235b399be5c2de2338e68b",
      "tree": "b74c15576207a21591c20da12c9b6dfc2bf5faf0",
      "parents": [
        "3da5b00cf0bed28dd012fd5ae2afda8111d1ad0d"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu May 19 18:13:32 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu May 19 18:23:29 2011 -0700"
      },
      "message": "Add new \"-swNNNdp\" resource qualifier.\n\nChange-Id: I0101e88ca9d8d44138bdcaf571f24b0352f4f6ce\n"
    },
    {
      "commit": "963664b6b7b1d94994a6449c8a49e7457be4d8e3",
      "tree": "9721540bdcc24fcb28f027ca4259d12b29b5cfcd",
      "parents": [
        "14402a1a5a4e1cc5638fc82c1988c64efb652752"
      ],
      "author": {
        "name": "Mårten Kongstad",
        "email": "marten.kongstad@sonyericsson.com",
        "time": "Thu May 19 16:02:35 2011 +0200"
      },
      "committer": {
        "name": "Johan Redestig",
        "email": "johan.redestig@sonyericsson.com",
        "time": "Thu May 19 16:02:35 2011 +0200"
      },
      "message": "Continue idmap generation even if name lookup fails.\n\nIn resources.arsc files, a resource is represented by a specification\nblock and one or more value blocks. In rare cases, a resource name\nis also given a new resource ID, a specification block and no values\nblocks. This commit ensures idmap generation does not fail if such an\nentry is encountered.\n\nChange-Id: I32302a0b07a7a320b7eeb31886931be3bb7b7e9a\n"
    },
    {
      "commit": "58c8dd2aa9a8931a53923054679fb31fecc696c9",
      "tree": "ce0c6477dc24bac07292d4c40e17f2a808f1e885",
      "parents": [
        "9a595e6789b57b2d14b68e7971afb857c4bd3e98"
      ],
      "author": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Thu Apr 28 16:19:45 2011 -0700"
      },
      "committer": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Tue May 17 16:58:37 2011 -0700"
      },
      "message": "libutils: add a binary blob cache implementation.\n\nThis change adds an implementation of a cache that stores key/value\npairs of unstructured binary blobs.\n\nChange-Id: Idd01fdabedfa3aed6d359a6efb0592967af52651\n"
    },
    {
      "commit": "b41c5a5ae79d8436d09a5fb9ba8e835dd3de88c5",
      "tree": "a803e9dc920f0121a762a251011aa69f8956d5c2",
      "parents": [
        "ffd242ed552120b85b6bca968e7cba3abb75e626"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri May 13 15:38:02 2011 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri May 13 15:38:02 2011 -0700"
      },
      "message": "Full backup tweaks\n\n* provide placeholder UI showing backup/restore start/stop/timeout\n* don\u0027t kill the progress UI in mid stream\n* tidy up the pax extended header data writing a little\n\nChange-Id: Ife0cb78e3facb541d8327f1d5ca5fe77faa6cbca\n"
    },
    {
      "commit": "89178d4de2964538c8a754df94c0911abe53c171",
      "tree": "384bd709bfdad1b99e928efef531b47d16a3d8f3",
      "parents": [
        "40b34001246a1fe7255f1eb1f98caaddf90028f8",
        "ed49d546d10d86b039cda8ed3b20aca7688c2f56"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri May 13 11:21:26 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri May 13 11:21:26 2011 -0700"
      },
      "message": "am 46a282f3: am 0ed2e845: Merge \"DO NOT MERGE.  Integrate add new screen width/height in \"dp\" configs.\" into honeycomb-mr2\n\n* commit \u002746a282f323bc05606e4fe1eba795bd9ac7c99819\u0027:\n  DO NOT MERGE.  Integrate add new screen width/height in \"dp\" configs.\n"
    },
    {
      "commit": "88c0d696cc25defc021ae885811d1d52c482ebcf",
      "tree": "1f465c937ea4ed997c1a9048c3d9c9fe3bf79276",
      "parents": [
        "a51147adb4a67ebefda9c73ab79f57535f576ca4"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu May 12 18:07:47 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu May 12 18:39:51 2011 -0700"
      },
      "message": "DO NOT MERGE.  Integrate add new screen width/height in \"dp\" configs.\n\nYou can now specify resource configuration variants \"wNNNdp\"\nand \"hNNNdp\".  These are the minimum screen width/height in \"dp\"\nunits.  This allows you to do things like have your app adjust\nits layout based only on the about of horizontal space available.\n\nThis introduces a new configuration change flag for screen size.\nNote that this configuration change happens each time the orientation\nchanges.  Applications often say they handle the orientation change\nto avoid being restarted at a screen rotation, and this will now\ncause them to be restarted.  To address this, we assume the app can\nhandle this new config change if its target SDK version is \u003c ICS.\n\nChange-Id: I4acb73d82677b74092c1da9e4046a4951921f9f4\n"
    },
    {
      "commit": "ffd242ed552120b85b6bca968e7cba3abb75e626",
      "tree": "cdd43bdaa29836314b9636a3e5c2c4354c8b4858",
      "parents": [
        "f128af5346d1b3a7822223b6d431efb74733c0b2"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu May 12 17:47:12 2011 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu May 12 18:07:57 2011 -0700"
      },
      "message": "Use pax extended tar format to support long filenames etc.\n\n\u0027tar\u0027 supports only 100-character paths; \u0027ustar\u0027 supports only\n155+100 character prefix + paths; neither supports files larger\nthan about 8 gigabytes.  We now use the POSIX.1-2001 \u0027pax\u0027\nextended tar format for those files in the backup stream that\nare too large or have too-long paths for the \u0027ustar\u0027 format.\n\nChange-Id: I2f256823091deaec9b1ccea685d2344753c6cb67\n"
    },
    {
      "commit": "25bc410b31b81415b6833e13148aeaef03e379ab",
      "tree": "3b645c782ea2ae41a1b6ba3c3f88a61095643fe1",
      "parents": [
        "dc128f220b59f04eeca46d3c19a71beefabde64f",
        "74cfbe12393cce6456c4cfce87a24c2054d6e5d7"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Wed May 11 13:10:56 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed May 11 13:10:56 2011 -0700"
      },
      "message": "am 041aa34e: am 87d86044: am bcd029b6: Merge \"Add missing clean-up of idmap file descriptors.\"\n\n* commit \u0027041aa34e089d7b194a5d93c682c3af3d3116d3f3\u0027:\n  Add missing clean-up of idmap file descriptors.\n"
    },
    {
      "commit": "d78797f6e69485f37dae9cb255f5287a06b65599",
      "tree": "8dc1359d81604bdb5b4777aa34558617e3bd1945",
      "parents": [
        "599ce46f2b8a845802763ef99c935ffd78d848c6"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri Apr 01 14:43:32 2011 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue May 10 17:52:51 2011 -0700"
      },
      "message": "Full local backup infrastructure\n\nThis is the basic infrastructure for pulling a full(*) backup of the\ndevice\u0027s data over an adb(**) connection to the local device.  The\nbasic process consists of these interacting pieces:\n\n1. The framework\u0027s BackupManagerService, which coordinates the\n   collection of app data and routing to the destination.\n\n2. A new framework-provided BackupAgent implementation called\n   FullBackupAgent, which is instantiated in the target applications\u0027\n   processes in turn, and knows how to emit a datastream that contains\n   all of the app\u0027s saved data files.\n\n3. A new shell-level program called \"bu\" that is used to bridge from\n   adb to the framework\u0027s Backup Manager.\n\n4. adb itself, which now knows how to use \u0027bu\u0027 to kick off a backup\n   operation and pull the resulting data stream to the desktop host.\n\n5. A system-provided application that verifies with the user that\n   an attempted backup/restore operation is in fact expected and to\n   be allowed.\n\nThe full agent implementation is not used during normal operation of\nthe delta-based app-customized remote backup process.  Instead it\u0027s\nused during user-confirmed *full* backup of applications and all their\ndata to a local destination, e.g. via the adb connection.\n\nThe output format is \u0027tar\u0027.  This makes it very easy for the end\nuser to examine the resulting dataset, e.g. for purpose of extracting\nfiles for debug purposes; as well as making it easy to contemplate\nadding things like a direct gzip stage to the data pipeline during\nbackup/restore.  It also makes it convenient to construct and maintain\nsynthetic backup datasets for testing purposes.\n\nWithin the tar format, certain artificial conventions are used.\nAll files are stored within top-level directories according to\ntheir semantic origin:\n\napps/pkgname/a/  : Application .apk file itself\napps/pkgname/obb/: The application\u0027s associated .obb containers\napps/pkgname/f/  : The subtree rooted at the getFilesDir() location\napps/pkgname/db/ : The subtree rooted at the getDatabasePath() parent\napps/pkgname/sp/ : The subtree rooted at the getSharedPrefsFile() parent\napps/pkgname/r/  : Files stored relative to the root of the app\u0027s file tree\napps/pkgname/c/  : Reserved for the app\u0027s getCacheDir() tree; not stored.\n\nFor each package, the first entry in the tar stream is a file called\n\"_manifest\", nominally rooted at apps/pkgname.  This file contains some\nmetadata about the package whose data is stored in the archive.\n\nThe contents of shared storage can optionally be included in the tar\nstream. It is placed in the synthetic location:\n\nshared/...\n\nuid/gid are ignored; app uids are assigned at install time, and the\napp\u0027s data is handled from within its own execution environment, so\nwill automatically have the app\u0027s correct uid.\n\nForward-locked .apk files are never backed up.  System-partition\n.apk files are not backed up unless they have been overridden by a\npost-factory upgrade, in which case the current .apk *is* backed up --\ni.e. the .apk that matches the on-disk data.  The manifest preceding\neach application\u0027s portion of the tar stream provides version numbers\nand signature blocks for version checking, as well as an indication\nof whether the restore logic should expect to install the .apk before\nextracting the data.\n\nSystem packages can designate their own full backup agents.  This is\nto manage things like the settings provider which (a) cannot be shut\ndown on the fly in order to do a clean snapshot of their file trees,\nand (b) manage data that is not only irrelevant but actively hostile\nto non-identical devices -- CDMA telephony settings would seriously\nmess up a GSM device if emplaced there blind, for example.\n\nWhen a full backup or restore is initiated from adb, the system will\npresent a confirmation UI that the user must explicitly respond to\nwithin a short [~ 30 seconds] timeout.  This is to avoid the\npossibility of malicious desktop-side software secretly grabbing a copy\nof all the user\u0027s data for nefarious purposes.\n\n(*) The backup is not strictly a full mirror.  In particular, the\n    settings database is not cloned; it is handled the same way that\n    it is in cloud backup/restore.  This is because some settings\n    are actively destructive if cloned onto a different (or\n    especially a different-model) device: telephony settings and\n    AndroidID are good examples of this.\n\n(**) On the framework side it doesn\u0027t care that it\u0027s adb; it just\n    sends the tar stream to a file descriptor.  This can easily be\n    retargeted around whatever transport we might decide to use\n    in the future.\n\nKNOWN ISSUES:\n\n* the security UI is desperately ugly; no proper designs have yet\n  been done for it\n* restore is not yet implemented\n* shared storage backup is not yet implemented\n* symlinks aren\u0027t yet handled, though some infrastructure for\n  dealing with them has been put in place.\n\nChange-Id: Ia8347611e23b398af36ea22c36dff0a276b1ce91\n"
    },
    {
      "commit": "74cfbe12393cce6456c4cfce87a24c2054d6e5d7",
      "tree": "1ec4d75712b4d17a995a065d2afe558b9ecd444c",
      "parents": [
        "49b2ebe8b3521ccc552949fc242a5a4f29b4e72a",
        "d701fd181935d6abc6c046a99f855b5ccc5c2d27"
      ],
      "author": {
        "name": "Conley Owens",
        "email": "cco3@android.com",
        "time": "Tue May 10 16:19:29 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue May 10 16:19:29 2011 -0700"
      },
      "message": "am 87d86044: am bcd029b6: Merge \"Add missing clean-up of idmap file descriptors.\"\n\n* commit \u002787d86044c0f15ae2ffc0350271c76ff874fb413b\u0027:\n  Add missing clean-up of idmap file descriptors.\n"
    },
    {
      "commit": "3e17850f1cc6c4e65ebaf89fa8b2c30a3b66fdf4",
      "tree": "a261cac5a69ebbc5cf717395918b6e0cdf6cd0be",
      "parents": [
        "d1820ffeb90df445aa192ee1df67899f8fba19eb"
      ],
      "author": {
        "name": "Mårten Kongstad",
        "email": "marten.kongstad@sonyericsson.com",
        "time": "Thu May 05 10:40:42 2011 +0200"
      },
      "committer": {
        "name": "Johan Redestig",
        "email": "johan.redestig@sonyericsson.com",
        "time": "Thu May 05 15:38:14 2011 +0200"
      },
      "message": "Add missing clean-up of idmap file descriptors.\n\nChange-Id: I9bdc9a4b7962f1a8dce77f4b213c8b9dc26e4b0f\n"
    },
    {
      "commit": "7e002d9a3f125698ccea76d1244ddad510e9aeef",
      "tree": "132d3408358cea6defb87346b5957661047072ca",
      "parents": [
        "ee3098ecb84209f8d896907be4fe8cc2d0949ef3",
        "f3faf0bc3d201cec500d6cfdc8db434bd8653e45"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@android.com",
        "time": "Tue Apr 26 12:46:04 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Apr 26 12:46:04 2011 -0700"
      },
      "message": "am fbb0e9f9: am bb93dad9: am bb10986c: am 13ce221e: Merge \"libutils: Fix an improper const-cast in RefBase\"\n\n* commit \u0027fbb0e9f9846e185ba8ded63d754c4e61b1499b90\u0027:\n  libutils: Fix an improper const-cast in RefBase\n"
    },
    {
      "commit": "f3faf0bc3d201cec500d6cfdc8db434bd8653e45",
      "tree": "5bc1c0dda6595cc3972013d6d5322b9de98c7370",
      "parents": [
        "62d9009da176fed40de3d3a20f635625bbb454b6",
        "dd3718af9067adfa53f598f16d443ebe53157f3b"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@android.com",
        "time": "Tue Apr 26 11:45:46 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Apr 26 11:45:46 2011 -0700"
      },
      "message": "am bb93dad9: am bb10986c: am 13ce221e: Merge \"libutils: Fix an improper const-cast in RefBase\"\n\n* commit \u0027bb93dad9250c0ee8330ab37bbdcd2eb8bfc0f930\u0027:\n  libutils: Fix an improper const-cast in RefBase\n"
    },
    {
      "commit": "e6b21626a5df95b66e0a0527564e2b9da100c5c3",
      "tree": "c9cf2fa3c1b62c103925a48b19cd72e069e477da",
      "parents": [
        "7b55adc7151c4a682e54365b86daa0e0e2dd57a0"
      ],
      "author": {
        "name": "Josh Stone",
        "email": "cuviper@gmail.com",
        "time": "Fri Apr 22 11:13:35 2011 -0700"
      },
      "committer": {
        "name": "Josh Stone",
        "email": "cuviper@gmail.com",
        "time": "Fri Apr 22 11:13:35 2011 -0700"
      },
      "message": "libutils: Fix an improper const-cast in RefBase\n\nUnder Fedora 15 Beta, gcc 4.6.0 warns:\n\n  frameworks/base/libs/utils/RefBase.cpp: In member function\n    ‘void android::RefBase::weakref_type::trackMe(bool, bool)’:\n  frameworks/base/libs/utils/RefBase.cpp:483:67: error: passing\n    ‘const android::RefBase::weakref_impl’ as ‘this’ argument of\n    ‘void android::RefBase::weakref_impl::trackMe(bool, bool)’\n    discards qualifiers [-fpermissive]\n\ntrackMe is not a const function, so don\u0027t use const in the static_cast\nto a weakref_impl pointer.\n\nChange-Id: I3c9ba73eb127985f5f54197ffecf2939c50f632c\n"
    },
    {
      "commit": "4815f2a6ada7941680b29581d5cf5a5ed168f618",
      "tree": "e0a613ac24a2edff88e1ee087bab4742bdf04d35",
      "parents": [
        "a01b1ff638352d3fa3a6d58481e018cda22b4c1c"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Apr 12 22:39:53 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Apr 19 15:35:51 2011 -0700"
      },
      "message": "Initial checkin of spot presentation for touchpad gestures.\n\nAdded a new PointerIcon API (hidden for now) for loading\npointer icons.\n\nFixed a starvation problem in the native Looper\u0027s sendMessage\nimplementation which caused new messages to be posted ahead\nof old messages sent with sendMessageDelayed.\n\nRedesigned the touch pad gestures to be defined in terms of\nmore fluid finger / spot movements.  The objective is to reinforce\nthe natural mapping between fingers and spots which means there\nmust not be any discontinuities in spot motion relative to\nthe fingers.\n\nRemoved the SpotController stub and folded its responsibilities\ninto PointerController.\n\nChange-Id: I5126b1e69d95252fda7f2a684c9287e239a57163\n"
    },
    {
      "commit": "81bc5677452b5433d5214e7976224c8d0f29fbcb",
      "tree": "0203de19ab6e2bd5591b36fcf88920d05c7f6008",
      "parents": [
        "d80cc88854a516fe6713ac4f7fec66de1ea0d526",
        "f6bbefd581a28c2b3c8db74efe66eabdc23ab0b3"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Apr 12 12:51:08 2011 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Apr 12 12:51:08 2011 -0700"
      },
      "message": "resolved conflicts for merge of 18490fb9 to master\n\nChange-Id: I6c68e6fb0f9c1182a955689bbffc161a8f30bd37\n"
    },
    {
      "commit": "f6bbefd581a28c2b3c8db74efe66eabdc23ab0b3",
      "tree": "a3402cd0e7a2da9b63a6ca702bb7d9c8533bf223",
      "parents": [
        "77e4ad4610238db874c89cef077ba833fb04020c",
        "8a1a61517645ea989b9045eb209ba1d6fdc23cd8"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Apr 12 10:27:15 2011 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Apr 12 10:27:15 2011 -0700"
      },
      "message": "resolved conflicts for merge of 87b3c0dc to honeycomb-plus-aosp\n\nChange-Id: Ia1a0024aabf531438203eb9fea3a10dd15eabe53\n"
    },
    {
      "commit": "592e3fc1509793e592ba99725736ce4995af8cb3",
      "tree": "90751027356739475d4069fd21eee72a1c662c22",
      "parents": [
        "b76dd6c566a0eeaf0a1f01b0c4e2992ad7451091"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Mar 30 16:20:26 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Apr 06 11:00:37 2011 -0700"
      },
      "message": "Add new resource configurations for screen width/height in \"dp\".\n\nYou can now specify resource configuration variants \"wNNNdp\"\nand \"hNNNdp\".  These are the minimum screen width/height in \"dp\"\nunits.  This allows you to do things like have your app adjust\nits layout based only on the about of horizontal space available.\n\nThis introduces a new configuration change flag for screen size.\nNote that this configuration change happens each time the orientation\nchanges.  Applications often say they handle the orientation change\nto avoid being restarted at a screen rotation, and this will now\ncause them to be restarted.  To address this, we assume the app can\nhandle this new config change if its target SDK version is \u003c ICS.\n\nChange-Id: I22f8afa136b4f274423978c570fa7c9855040496\n"
    },
    {
      "commit": "5f29c87ef2ed197e19b614d306dbbd24a283305d",
      "tree": "1c6b58c7379a8357a67a96db3f26d31c2b975960",
      "parents": [
        "0686717d7968719a85bfbf841052066a3a182e65"
      ],
      "author": {
        "name": "Mårten Kongstad",
        "email": "marten.kongstad@sonyericsson.com",
        "time": "Thu Mar 17 14:13:41 2011 +0100"
      },
      "committer": {
        "name": "Kenneth Andersson",
        "email": "kenneth.andersson@sonyericsson.com",
        "time": "Fri Apr 01 14:12:10 2011 +0200"
      },
      "message": "Runtime resource overlay, iteration 1.\n\nRuntime resource overlay allows unmodified applications to appear\nas if they had been compiled with additional resources defined. See\nlibs/utils/README for more information.\n\nThis commit is the first iteration of runtime resource overlay. It\nprovides the actual overlay modifications and loading of trusted overlay\npackages (ie residing in /vendor) targeting framework-res.apk.\n\nThis commit loads exactly one overlay package. The overlay,\nif present, must target framework-res.apk and be located at\n/vendor/overlay/framework/framework-res.apk.\n\nChange-Id: If26ee7754813004a96c043dba37fbe99fa3919db\n"
    },
    {
      "commit": "3bafffb1bd241e4ecb93a91015a189b65bd61f2b",
      "tree": "fdfb1d10aa4dc4465fadb50c378acdc94e91fd0c",
      "parents": [
        "5388e1c68d3786122704868c0fc1561f7ff8c4f8"
      ],
      "author": {
        "name": "Carl Shapiro",
        "email": "cshapiro@google.com",
        "time": "Mon Mar 21 20:26:25 2011 -0700"
      },
      "committer": {
        "name": "Carl Shapiro",
        "email": "cshapiro@google.com",
        "time": "Mon Mar 21 20:26:25 2011 -0700"
      },
      "message": "Include strings.h for the strcasecmp prototype.\n\nChange-Id: I0659ce2186547274e58f8b2027e16d3e45189353\n"
    },
    {
      "commit": "c0a5e8df03d949cb307a0eb98f0222086c0434c1",
      "tree": "56ac2f0317addc862718811205160f114620d40c",
      "parents": [
        "e3d4a68f2d09098bda8c6ca6c3826877365c7267"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Mar 17 01:34:19 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Mar 17 17:29:09 2011 -0700"
      },
      "message": "Refactor how timeouts are calculated.\n\nAdded a timeout mechanism to EventHub and InputReader so that\nInputMappers can request timeouts to perform delayed processing of\ninput when needed.\n\nChange-Id: Iec2045baaf4e67690b15eef3c09a58d5cac76897\n"
    },
    {
      "commit": "80f3e7cc1506bbb4bec458e15629805a7c1df7ee",
      "tree": "5074a61abeedeb60f9d861fc25f5de50f156dcf2",
      "parents": [
        "76048aeee7812a6d3a05e6204f561659623e785c"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Mar 02 14:41:58 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Mar 02 15:37:57 2011 -0800"
      },
      "message": "Fade out the mouse pointer after inactivity or other events.\n\nFades out the mouse pointer:\n- after 15 seconds of inactivity normally\n- after 3 seconds of inactivity in lights out mode\n- after a non-modifier key down\n- after a touch down\n\nExtended the native Looper to support enqueuing time delayed\nmessages.  This is used by the PointerController to control\npointer fade timing.\n\nChange-Id: I87792fea7dbe2d9376c78cf354fe3189a484d9da\n"
    },
    {
      "commit": "32bebb0a58dd9c699aed8045ca2e752f681e5a0f",
      "tree": "9d22fe196138cf4fea219d84c12772df9cd9c05a",
      "parents": [
        "c614e553cc4b93443c30d1ec728997c293ba024d"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Feb 25 16:11:44 2011 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Feb 25 16:20:52 2011 -0800"
      },
      "message": "Fix sp\u003c\u003e conversion operator / constructor\n\nsome of the conversion operators were not using the proper\npointer type when calling incStrong/decStrong, usually it\nhas no bad consequences, but for some implementation\nof the ref-counted object it could lead to recording the wrong\nowner id.\n\nChange-Id: If574b9069b8a4cf6e0911a992c8f095aba799995\n"
    },
    {
      "commit": "da26c6662db6ad76f214df0e7ebe9fe3b211c0fe",
      "tree": "62d7d5de887a0c3f463c2e560acaef9385f18818",
      "parents": [
        "7f5a4dde549ece6ab2d6fda8a1c37b31bd3cfe75",
        "f14a1046e7242222300bbe88d530c3b531fc7678"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Feb 24 16:23:51 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 24 16:23:51 2011 -0800"
      },
      "message": "Merge \"Fix some issues with RefBase debugging.\""
    },
    {
      "commit": "3477a8cff2cf0eb5fcec03b0dc8ef9dcf64c0eb4",
      "tree": "0985bdcb179b8f5171e7401a3808879299aed247",
      "parents": [
        "99cdf2d9ba167ddf6ae996e6d9f9a2834bfa066b",
        "7e453a51a5436c6c8c49c1e37cea5077bce09405"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Feb 24 10:01:31 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 24 10:01:31 2011 -0800"
      },
      "message": "Merge \"Bug 3362814 Fix SMP race in access to mRequestExit\""
    },
    {
      "commit": "f14a1046e7242222300bbe88d530c3b531fc7678",
      "tree": "0412bc19f065c72f52c4c2bfa6ec7f71242dc47f",
      "parents": [
        "4e9e63740031b04cd3c8492e13c715538f4d04b5"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Feb 16 20:23:43 2011 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Feb 23 22:21:41 2011 -0800"
      },
      "message": "Fix some issues with RefBase debugging.\n\nFirst slipt sp\u003c\u003e out of RefBase into StrongPointer.h so it can be reused\nmore easily and to make it clear that it doesn\u0027t require RefBase.\n\nNote: the rest of the change only affects the system when DEBUG_REFS is enabled.\n\nThe main problem we fix here is that the owner id associated with each\nreference could get out of date when a sp\u003c\u003e or wp\u003c\u003e was moved, for\ninstance when they\u0027re used in a Vector\u003c \u003e.\n\nWe fix this issue by calling into RefBase::moveReferences from\na template specialization for sp\u003cTYPE\u003e and wp\u003cTYPE\u003e of the\ntype helpers. RefBase::moveReferences() has then a chance to\nupdate the owner ids.\n\nThere is a little bit of trickery to implement this generically in\nRefBase, where we need to use a templatized functor that can turn\na sp\u003cTYPE\u003e* casted to a void* into a RefBase*.\n\nIntroduced a new debug option DEBUG_REFS_FATAL_SANITY_CHECKS\ncurrently set to 0 by default as there seem to be an issue\nwith sp\u003cANativeWindow\u003e which trips the sanity checks.\n\nChange-Id: I4825b21c8ec47d4a0ef35d760760ae0c9cdfbd7f\n"
    },
    {
      "commit": "7e453a51a5436c6c8c49c1e37cea5077bce09405",
      "tree": "462f9100943a8c158c66c16ba0d5c9e4e6e4d7a0",
      "parents": [
        "f1cc94960a5c636c851b11f3d64d06d7f5379d16"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 01 11:32:29 2011 -0800"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Feb 23 17:49:59 2011 -0800"
      },
      "message": "Bug 3362814 Fix SMP race in access to mRequestExit\n\nAlso fix an unlikely SMP race in access to mHoldSelf on entry to _threadLoop.\n\nChange-Id: I6cbc0b94739c7dd5e77e8a5ba0da22cdc0b1a4db\n"
    },
    {
      "commit": "a08ef4932fc6dcb812a7ceb5a87e8d144a6adda4",
      "tree": "402ac87cced38b6119fa9398140c72de83eb5316",
      "parents": [
        "62021d21457e6fa7dcc93b065e761516e75e872d"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Feb 16 15:23:08 2011 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Feb 22 18:08:58 2011 -0800"
      },
      "message": "Remove RefBase.h dependency on TextOutput.h\n\nChange-Id: I72cd6b98ef82b4868fe1c8ec87862cf43fb4ee73\n"
    },
    {
      "commit": "af1cf07134dccc884c654da0e713c9213d7be3f4",
      "tree": "a4343f8ed4c9e66c7437149572049681a09e8dbd",
      "parents": [
        "1ad7de7372466ac37ec4b0ec031e6466d533ebb4"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Feb 16 10:13:53 2011 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Feb 16 10:56:32 2011 -0800"
      },
      "message": "Clean up use of HAVE_ANDROID_OS\n\nHAVE_ANDROID_OS was defined as \"1\" for targets, but never defined as \"0\"\nfor non-targets. Changing them to #ifdef should be safe and matches\nall the other uses of HAVE_ANDROID_OS throughout the system.\n\nChange-Id: I82257325a8ae5e4e4371ddfc4dbf51cea8ea0abb\n"
    },
    {
      "commit": "d45c61dfcfed72eaa6bcc197192b9ac24296e353",
      "tree": "8c80998b5fb2b59fb75b1091020dd4b4a898398a",
      "parents": [
        "f10add6590ea5d669a6cc7259a4079614aa13a45",
        "9bfc45e3c3c57a4e512b83f87f150a33572d3637"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Sun Jan 30 16:32:44 2011 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sun Jan 30 16:32:44 2011 -0800"
      },
      "message": "am 1314bdb2: am e88fa50b: Merge from open-source gingerbread\n\n* commit \u00271314bdb2b22ae3613c3e08ae278dbc70f90b965c\u0027:\n  fix failing thread object run\n"
    },
    {
      "commit": "9bfc45e3c3c57a4e512b83f87f150a33572d3637",
      "tree": "f07d2aa647069e9ad51d10616344b8865a2d715f",
      "parents": [
        "a8eea2f3d98fb510803085635ba331e7026902b5",
        "02bac86968f556bc9f1c100118a9fef847c6cde2"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Sun Jan 30 16:19:59 2011 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sun Jan 30 16:19:59 2011 -0800"
      },
      "message": "am e88fa50b: Merge from open-source gingerbread\n\n* commit \u0027e88fa50be8d6709ef58b7aeb01c5efa059bcac2e\u0027:\n  fix failing thread object run\n"
    },
    {
      "commit": "02bac86968f556bc9f1c100118a9fef847c6cde2",
      "tree": "9b84eb591fb6aee96cb7e467c45faaa830744111",
      "parents": [
        "a7ba8153071de02d14a94c4ac9b59f1103b022c7",
        "9b1515590cd18cb9dd6c8ed99bf2145a30e011c1"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Sun Jan 30 15:29:52 2011 -0800"
      },
      "committer": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Sun Jan 30 15:30:03 2011 -0800"
      },
      "message": "Merge from open-source gingerbread\n\nChange-Id: I56f2ed37187796807fbf0de15274a85164f9432c\n"
    },
    {
      "commit": "402960177f9539e4e66623c82f0d123c9b4ba5a1",
      "tree": "038ae147c547c5c135dafe2a8bcc6a38c8d3a6f2",
      "parents": [
        "50168d71e860def502bce7f284e4f7a4e7ccd637",
        "a8eea2f3d98fb510803085635ba331e7026902b5"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@android.com",
        "time": "Sat Jan 29 23:07:48 2011 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sat Jan 29 23:07:48 2011 -0800"
      },
      "message": "am a1f5e82f: am a30063d8: am 25eb0464: Merge \"Normalize output from aapt d\"\n\n* commit \u0027a1f5e82f37c77af7b1d630b5bca715d1742f1234\u0027:\n  Normalize output from aapt d\n"
    },
    {
      "commit": "a8eea2f3d98fb510803085635ba331e7026902b5",
      "tree": "804da591fd434ca0117f37afb8e7b751a139c9f2",
      "parents": [
        "e0128485a81f2c9c57059ffadfaeb2e848d25a9b",
        "e68d8b8810a51387d503b658c87069f7332f6f3a"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@android.com",
        "time": "Sat Jan 29 23:04:50 2011 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sat Jan 29 23:04:50 2011 -0800"
      },
      "message": "am a30063d8: am 25eb0464: Merge \"Normalize output from aapt d\"\n\n* commit \u0027a30063d80c08434ac3c7316f338c6d54110449ab\u0027:\n  Normalize output from aapt d\n"
    },
    {
      "commit": "11e0746577faa032a8db9bd8192a180d938060d0",
      "tree": "c108a35c18ab50b92de189158c0d5ee01cfdd6de",
      "parents": [
        "460529bb934a5f53bccc2d7c7a9dd8df3e2e464a"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jan 27 19:37:40 2011 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jan 27 21:56:33 2011 -0800"
      },
      "message": "Fix issue #3392073: At times soft keyboard comes up in...\n\n...gallery while attaching picture to gmail message\n\nIn various places we could block switching the IME target incorrectly.\n\nChange-Id: I7e647fb35f4ea6f2e39eb7efd911420ea9ee64fa\n"
    }
  ],
  "next": "5ee1a0c5ee41a9c7366e7e378e5ab232072bb983"
}
