<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>96687</bug_id>
          
          <creation_ts>2012-09-13 12:58:51 -0700</creation_ts>
          <short_desc>[Chromium] Support the --{in,out,err}-fifo arguments on TestWebKitAPI and webkit_unit_tests</short_desc>
          <delta_ts>2012-09-14 10:37:25 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>84867</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Peter Beverloo">peter</reporter>
          <assigned_to name="Peter Beverloo">peter</assigned_to>
          <cc>abarth</cc>
    
    <cc>dpranke</cc>
    
    <cc>jamesr</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>719827</commentid>
    <comment_count>0</comment_count>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-09-13 12:58:51 -0700</bug_when>
    <thetext>[Chromium] Support the --{in,out,err}-fifo arguments on TestWebKitAPI and webkit_unit_tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719837</commentid>
    <comment_count>1</comment_count>
      <attachid>163946</attachid>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-09-13 13:08:25 -0700</bug_when>
    <thetext>Created attachment 163946
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719867</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-13 13:30:14 -0700</bug_when>
    <thetext>Maybe tony@ is a good person to review this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719882</commentid>
    <comment_count>3</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-09-13 13:50:46 -0700</bug_when>
    <thetext>Conceptually, this is OK, but would it be easier to have a wrapper script that runs on the target device?  This script would start the test binary, collect stdout and stderr separately, and write it to a known location or send it back to the host.  This seems easier than modifying test binaries and would work for test binaries that aren&apos;t in WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719926</commentid>
    <comment_count>4</comment_count>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-09-13 14:18:31 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Conceptually, this is OK, but would it be easier to have a wrapper script that runs on the target device?  This script would start the test binary, collect stdout and stderr separately, and write it to a known location or send it back to the host.  This seems easier than modifying test binaries and would work for test binaries that aren&apos;t in WebKit.

The binaries are packed and then installed as APK files because we can&apos;t rely on having root access to the devices. The APKs then have to be started using the activity manager. Starting them is a shell command (which we send to the phone), but they will be executed in the background like any other application on the phone.

By default the output will end up in the logs, but these can be very tedious to parse. All we want is the STDOUT (and STDERR), giving us exactly the same result as when it&apos;d have been run locally.

This is how DumpRenderTree on Android gets its output (formatted in the Python script):
http://build.webkit.org/builders/Chromium%20Android%20Release%20%28Tests%29/builds/226/steps/layout-test/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719959</commentid>
    <comment_count>5</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-09-13 14:35:58 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; Conceptually, this is OK, but would it be easier to have a wrapper script that runs on the target device?  This script would start the test binary, collect stdout and stderr separately, and write it to a known location or send it back to the host.  This seems easier than modifying test binaries and would work for test binaries that aren&apos;t in WebKit.
&gt; 
&gt; The binaries are packed and then installed as APK files because we can&apos;t rely on having root access to the devices. The APKs then have to be started using the activity manager. Starting them is a shell command (which we send to the phone), but they will be executed in the background like any other application on the phone.
&gt; 
&gt; By default the output will end up in the logs, but these can be very tedious to parse. All we want is the STDOUT (and STDERR), giving us exactly the same result as when it&apos;d have been run locally.
&gt; 
&gt; This is how DumpRenderTree on Android gets its output (formatted in the Python script):
&gt; http://build.webkit.org/builders/Chromium%20Android%20Release%20%28Tests%29/builds/226/steps/layout-test/logs/stdio

I understand all this, but what I&apos;m asking is rather than having to modify every test binary, can you run a wrapper script/program on the target device that collects stdout/stderr and passes it back to the host?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719965</commentid>
    <comment_count>6</comment_count>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-09-13 14:45:18 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; I understand all this, but what I&apos;m asking is rather than having to modify every test binary, can you run a wrapper script/program on the target device that collects stdout/stderr and passes it back to the host?

I&apos;m not sure I understand what you mean. Due to the way the activity manager executes APKs in the background, which comes down to sending an intent, their stdout/stderr will never be available in the shell. They directly go to the logs.

It *is* possible to run the test suites as normal executables on the devices, which does allow us to get the output directly, but this requires root access to the device as well. Having a rooted device is something we can&apos;t rely on and don&apos;t want to enforce either. Philippe removed the need for that in r128181, and Chromium is about to switch over too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719973</commentid>
    <comment_count>7</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-09-13 14:50:25 -0700</bug_when>
    <thetext>Can APKs launch other processes (i.e., like the way that the Chrome browser process launches the renderer process)?  Is it possible to make an APK that launches TestWebKitAPI (bundled in the same APK) and collects TestWebKitAPI&apos;s stdout/stderr?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719994</commentid>
    <comment_count>8</comment_count>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-09-13 15:06:10 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Can APKs launch other processes (i.e., like the way that the Chrome browser process launches the renderer process)?  Is it possible to make an APK that launches TestWebKitAPI (bundled in the same APK) and collects TestWebKitAPI&apos;s stdout/stderr?

Yes -- all of Chrome for Android is a single APK, and there is a separation between the browser, renderer and gpu process. For test-suites, this basically comes down to what we do now: we embed the test suite as a shared library (as such, we have TestWebKitAPI.so) and load and execute it using a very simple Java wrapper. This is shared among every test suite in Chrome, so diverging from this doesn&apos;t seem like a good idea.

An alternative would be to copy code from Chromium, i.e. _WatchTestOutput in src/build/android/pylib/test_package.py, but there&apos;s a lot of additional Python infrastructure required to make that work correctly. Chromium&apos;s implementation relies on an ADB interface licensed as Apache 2 code, which is why we can&apos;t import that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719997</commentid>
    <comment_count>9</comment_count>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-09-13 15:08:38 -0700</bug_when>
    <thetext>A third option could be to rely on Chromium&apos;s pylib (in src/build/android/pylib) directly in WebKit&apos;s test runner. This is available in Source/WebKit/chromium for Chromium checkouts, but no other areas of the test-runner scripts do this and this would be very fragile, as it doesn&apos;t have a stable API and lots of refactoring is still going on in there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720035</commentid>
    <comment_count>10</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-09-13 15:39:16 -0700</bug_when>
    <thetext>Does src/build/android/pylib/test_package.py run on the target device or the host?

It sounds like you&apos;re saying for unit tests in Chromium, they use this python code.  I think it would be nice if for WebKit test binaries, we were able to use the same code/approach.

If you&apos;re worried about that code changing in API incompatible ways, we can freeze the revision we pull in Source/WebKit/chromium/DEPS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720085</commentid>
    <comment_count>11</comment_count>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-09-13 16:15:16 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Does src/build/android/pylib/test_package.py run on the target device or the host?
&gt; 
&gt; It sounds like you&apos;re saying for unit tests in Chromium, they use this python code.  I think it would be nice if for WebKit test binaries, we were able to use the same code/approach.
&gt; 
&gt; If you&apos;re worried about that code changing in API incompatible ways, we can freeze the revision we pull in Source/WebKit/chromium/DEPS.

All Python code executes on the host, and talks to the device using an &quot;adb&quot; tool. The android_testrunner project it depends on[1] is the Apache 2 project. We already use all Chromium infrastructure for creating the APK itself.

Pulling in both build/android/pylib/ and third_party/android_testrunner/ to a second location (using a fixed revision) may be an idea. The code hasn&apos;t been designed for usage outside of the Chromium tree, isn&apos;t completely upstreamed yet and all of it is in transition between being used from within an Android tree and from a Chromium tree (called &quot;SDK&quot; build) right now. This definitely is a goal in the long term, however.

My plan is to factor some parts of the ChromiumAndroidDriver layout test runner out of the script and add an AndroidTestRunner object which can be used by all three of WebKit&apos;s suites, with a minimal interface to talk to the device using ADB..


[1] http://src.chromium.org/viewvc/chrome/trunk/src/third_party/android_testrunner/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720133</commentid>
    <comment_count>12</comment_count>
      <attachid>163946</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-09-13 17:14:57 -0700</bug_when>
    <thetext>Comment on attachment 163946
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=163946&amp;action=review

It sounds like you&apos;re saying it&apos;ll be a long time before running gtests in Chromium will be stable enough for us to use, so we should use this in the meantime.  I think that&apos;s fine, but please make sure to have a tracking bug about switching over to a common framework.  For example, why can&apos;t Chromium use an approach like this?

&gt; Source/WebKit/chromium/WebKit.gypi:246
&gt; +                &apos;webkit_unittest_files&apos;: [
&gt; +                    &apos;tests/ForwardIOStreamsAndroid.cpp&apos;,
&gt; +                    &apos;tests/ForwardIOStreamsAndroid.h&apos;,

Please put this into a separate static_library target and have the three targets depend on it rather than compiling it three times.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720780</commentid>
    <comment_count>13</comment_count>
      <attachid>164158</attachid>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-09-14 08:16:56 -0700</bug_when>
    <thetext>Created attachment 164158
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720786</commentid>
    <comment_count>14</comment_count>
    <who name="Peter Beverloo">peter</who>
    <bug_when>2012-09-14 08:28:34 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 163946 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=163946&amp;action=review
&gt; 
&gt; It sounds like you&apos;re saying it&apos;ll be a long time before running gtests in Chromium will be stable enough for us to use, so we should use this in the meantime.  I think that&apos;s fine, but please make sure to have a tracking bug about switching over to a common framework.  For example, why can&apos;t Chromium use an approach like this?
&gt; 
&gt; &gt; Source/WebKit/chromium/WebKit.gypi:246
&gt; &gt; +                &apos;webkit_unittest_files&apos;: [
&gt; &gt; +                    &apos;tests/ForwardIOStreamsAndroid.cpp&apos;,
&gt; &gt; +                    &apos;tests/ForwardIOStreamsAndroid.h&apos;,
&gt; 
&gt; Please put this into a separate static_library target and have the three targets depend on it rather than compiling it three times.

Their method is better, which is why I intend to switch to it when it stabilizes :-).

I&apos;ve added the target to WebKitUnitTests.gyp, but am in doubt about whether it may make more sense to put it in WebKit.gyp. Happy to move it..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720909</commentid>
    <comment_count>15</comment_count>
      <attachid>164158</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-09-14 10:24:43 -0700</bug_when>
    <thetext>Comment on attachment 164158
Patch

Putting the target in WebKitUnitTests.gyp is fine. I&apos;m not sure if it&apos;s weirder to has test libraries in WebKit.gyp or to have DumpRenderTree.gyp depend on WebKitUnitTests.gyp.  *shrug*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720928</commentid>
    <comment_count>16</comment_count>
      <attachid>164158</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-14 10:37:21 -0700</bug_when>
    <thetext>Comment on attachment 164158
Patch

Clearing flags on attachment: 164158

Committed r128628: &lt;http://trac.webkit.org/changeset/128628&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720930</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-14 10:37:25 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163946</attachid>
            <date>2012-09-13 13:08:25 -0700</date>
            <delta_ts>2012-09-14 08:16:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96687-20120913210757.patch</filename>
            <type>text/plain</type>
            <size>18371</size>
            <attacher name="Peter Beverloo">peter</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4NDc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGUzYmMzMGIyMGYyNTM3N2E0ZGY1N2M5NTZlZWU1Mjk5MmMyZDY1NzYuLmJmN2I5NjhiYzYzZGFh
ZWFiZWFlN2FiMmY4ZTQ4NmE1MTMzYTZjZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMzggQEAKKzIwMTItMDktMTMgIFBldGVyIEJldmVybG9vICA8cGV0ZXJAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gU3VwcG9ydCB0aGUgLS17aW4sb3V0LGVycn0t
ZmlmbyBhcmd1bWVudHMgb24gVGVzdFdlYktpdEFQSSBhbmQgd2Via2l0X3VuaXRfdGVzdHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2Njg3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQW5kcm9pZCdzIER1
bXBSZW5kZXJUcmVlIGN1cnJlbnRseSBzdXBwb3J0cyB0aGVzZSBhcmd1bWVudHMsIGltcGxlbWVu
dGVkCisgICAgICAgIGFzIHBhcnQgb2YgVGVzdFNoZWxsQW5kcm9pZDoKKyAgICAgICAgaHR0cDov
L3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RTaGVsbEFuZHJvaWQuY3BwP3Jldj0xMjg0OTYKKworICAgICAgICBUaGV5J3JlIHVz
ZWQgYnkgdGhlIGxheW91dCB0ZXN0IHJ1bm5lciB0byBnZXQgdGhlIFNURE9VVCBhbmQgU1RERVJS
IHdoaWxlCisgICAgICAgIGEgbGF5b3V0IHRlc3QgcnVuIGlzIGluIHByb2Nlc3MsIHdoaWNoIGlz
IGEgc2FmZXIgYWx0ZXJuYXRpdmUgdG8gcGFyc2luZworICAgICAgICBhbGwgdGhlIGxvZ2NhdCBv
dXRwdXQgbWFudWFsbHkuIFRoZSBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgc2VlbiBoZXJlOgorICAg
ICAgICBodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5P3Jldj0xMjg0OTYj
TDU5MAorCisgICAgICAgIFRoaXMgcGF0Y2ggZ2VuZXJhbGl6ZXMgcGFyc2luZyBvZiBhbmQgYXBw
bHlpbmcgdGhlIGVmZmVjdHMgb2YgdGhlc2UgYXJndW1lbnRzCisgICAgICAgIHNvIHRoYXQgdGhl
eSBjYW4gYmUgdXNlZCBmb3IgVGVzdFdlYktpdEFQSSBhbmQgd2Via2l0X3VuaXRfdGVzdHMgYXMg
d2VsbC4KKyAgICAgICAgQWZ0ZXIgdGhpcyBwYXRjaCwgdGhpcyB3aWxsIG1ha2UgaXQgcG9zc2li
bGUgdG8gcHVsbCBvdXQgdGhlIG91dHB1dC1yZWFkaW5nCisgICAgICAgIGNvZGUgZnJvbSBBbmRy
b2lkJ3MgbGF5b3V0IHRlc3QgcG9ydCBhbmQgZ2VuZXJhbGl6ZSBpdCBzbyBpdCBjYW4gYmUgcmUt
dXNlZAorICAgICAgICBpbiB0aGUgbmV3IHRlc3QtcnVubmVyIGZvciB0aGUgb3RoZXIgdHdvIHRl
c3Qgc3VpdGVzLgorCisgICAgICAgIFRoaXMgaGFzIG5vIGVmZmVjdCB3aGVuIGNvbXBpbGluZyBh
bmQgcnVubmluZyB0aGVzZSB0ZXN0cyBhcyBwYXJ0IG9mIENocm9taXVtCisgICAgICAgIGNvZGUs
IHdoaWNoIGhhcyBhIG11Y2ggbW9yZSBhZHZhbmNlZCB0ZXN0LXJ1bm5lciB0aGF0IGRvZXMgcGFy
c2UgY29tcGxldGUgbG9nCisgICAgICAgIG91dHB1dCwgYnV0IGFsc28gZGlyZWN0bHkgZGVwZW5k
cyBvbiBjb2RlIGxpY2Vuc2VkIHVuZGVyIEFwYWNoZSAyLgorCisgICAgICAgICogV2ViS2l0Lmd5
cGk6CisgICAgICAgICogdGVzdHMvRm9yd2FyZElPU3RyZWFtc0FuZHJvaWQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6Om1heWJlSW5pdElPU3RyZWFtRm9y
d2FyZGluZ0ZvckFuZHJvaWQpOgorICAgICAgICAqIHRlc3RzL0ZvcndhcmRJT1N0cmVhbXNBbmRy
b2lkLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiB0ZXN0cy9SdW5BbGxU
ZXN0cy5jcHA6CisgICAgICAgIChtYWluKToKKwogMjAxMi0wOS0xMyAgSWx5YSBUaWtob25vdnNr
eSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogTk1JOiBp
bnN0cnVtZW50IEtVUkwgZGlyZWN0bHkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRl
eCA1ZDNmODUwZDVhMWViMzViN2Q3NmI2MWFhMWUxOWRmM2U1ZjllZDQxLi4wYTFlNGI5MWZkM2E0
MDZmMGVkOGUxN2UxMzY1OTU4NGQwZjE4YjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cGkKQEAgLTI0MCw2ICsyNDAsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1Njcm9s
bEFuaW1hdG9yTm9uZVRlc3QuY3BwJywKICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAg
fV0sCisgICAgICAgICAgICBbJ09TPT0iYW5kcm9pZCInLCB7CisgICAgICAgICAgICAgICAgJ3dl
YmtpdF91bml0dGVzdF9maWxlcyc6IFsKKyAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL0Zvcndh
cmRJT1N0cmVhbXNBbmRyb2lkLmNwcCcsCisgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9Gb3J3
YXJkSU9TdHJlYW1zQW5kcm9pZC5oJywKKyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAg
fV0sCiAgICAgICAgICAgICBbJ29zX3Bvc2l4PT0xIGFuZCBPUyE9Im1hYyInLCB7CiAgICAgICAg
ICAgICAgICAgJ3dlYmtpdF91bml0dGVzdF9maWxlcyc6IFsKICAgICAgICAgICAgICAgICAgICAg
J3Rlc3RzL0xvY2FsaXplZERhdGVJQ1VUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0ZvcndhcmRJT1N0cmVhbXNBbmRyb2lkLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvRm9yd2FyZElPU3RyZWFtc0FuZHJvaWQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjFiYmExN2RlNjY2NTRmMzUzMzVlMGE0MTJmYzlhNTIyOTdkNjgwOWUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ZvcndhcmRJT1N0cmVhbXNBbmRy
b2lkLmNwcApAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgIkZvcndhcmRJT1N0cmVhbXNBbmRyb2lkLmgiCisKKyNpbmNsdWRlIDxhbmRy
b2lkL2xvZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNs
dWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVz
Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgor
CituYW1lc3BhY2UgeworCitjb25zdCBjaGFyIG9wdGlvbkluRklGT1tdID0gIi0taW4tZmlmbz0i
OworY29uc3QgY2hhciBvcHRpb25PdXRGSUZPW10gPSAiLS1vdXQtZmlmbz0iOworY29uc3QgY2hh
ciBvcHRpb25FcnJGSUZPW10gPSAiLS1lcnItZmlmbz0iOworCit2b2lkIGFuZHJvaWRMb2dFcnJv
cihjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikgV1RGX0FUVFJJQlVURV9QUklOVEYoMSwgMik7Cit2
b2lkIGFuZHJvaWRMb2dFcnJvcihjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikKK3sKKyAgICB2YV9s
aXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKyAgICBfX2FuZHJvaWRfbG9n
X3ZwcmludChBTkRST0lEX0xPR19FUlJPUiwgIldlYktpdCIsIGZvcm1hdCwgYXJncyk7CisgICAg
dmFfZW5kKGFyZ3MpOworfQorCit2b2lkIHJlbW92ZUFyZyhpbnQgaW5kZXgsIGludCogYXJnYywg
Y2hhcioqKiBhcmd2KQoreworICAgIGZvciAoaW50IGkgPSBpbmRleDsgaSA8ICphcmdjOyArK2kp
CisgICAgICAgICgqYXJndilbaV0gPSAoKmFyZ3YpW2kgKyAxXTsKKyAgICAtLSphcmdjOworfQor
Cit2b2lkIGNyZWF0ZUZJRk8oY29uc3QgY2hhciogZmlmb1BhdGgpCit7CisgICAgdW5saW5rKGZp
Zm9QYXRoKTsKKyAgICAvLyAwNjY2IGlzIHJ3LXJ3LXJ3LSwgdG8gYWxsb3cgYWRiIHNoZWxsIHRv
IHJlYWQvd3JpdGUgdGhlIGZpZm8uCisgICAgLy8gRXhwbGljaXRseSBjYWxsIGNobW9kIHRvIGVu
c3VyZSB0aGUgbW9kZSBpcyBzZXQgZGVzcGl0ZSB1bWFzay4KKyAgICBpZiAobWtmaWZvKGZpZm9Q
YXRoLCAwNjY2KSB8fCBjaG1vZChmaWZvUGF0aCwgMDY2NikpIHsKKyAgICAgICAgYW5kcm9pZExv
Z0Vycm9yKCJGYWlsZWQgdG8gY3JlYXRlIGZpZm8gJXM6ICVzXG4iLCBmaWZvUGF0aCwgc3RyZXJy
b3IoZXJybm8pKTsKKyAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0KK30KKwordm9p
ZCByZWRpcmVjdChGSUxFKiBzdHJlYW0sIGNvbnN0IGNoYXIqIHBhdGgsIGNvbnN0IGNoYXIqIG1v
ZGUpCit7CisgICAgaWYgKCFmcmVvcGVuKHBhdGgsIG1vZGUsIHN0cmVhbSkpIHsKKyAgICAgICAg
YW5kcm9pZExvZ0Vycm9yKCJGYWlsZWQgdG8gcmVkaXJlY3Qgc3RyZWFtIHRvIGZpbGU6ICVzOiAl
c1xuIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUp
OworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3Zv
aWQgbWF5YmVJbml0SU9TdHJlYW1Gb3J3YXJkaW5nRm9yQW5kcm9pZChpbnQqIGFyZ2MsIGNoYXIq
KiogYXJndikKK3sKKyAgICBjb25zdCBjaGFyKiBpbkZJRk8gPSAwOworICAgIGNvbnN0IGNoYXIq
IG91dEZJRk8gPSAwOworICAgIGNvbnN0IGNoYXIqIGVyckZJRk8gPSAwOworICAgIGZvciAoaW50
IGkgPSAxOyBpIDwgKmFyZ2M7ICkgeworICAgICAgICBjb25zdCBjaGFyKiBhcmd1bWVudCA9ICgq
YXJndilbaV07CisgICAgICAgIGlmIChzdHJzdHIoYXJndW1lbnQsIG9wdGlvbkluRklGTykgPT0g
YXJndW1lbnQpIHsKKyAgICAgICAgICAgIGluRklGTyA9IGFyZ3VtZW50ICsgV1RGX0FSUkFZX0xF
TkdUSChvcHRpb25JbkZJRk8pIC0gMTsKKyAgICAgICAgICAgIGNyZWF0ZUZJRk8oaW5GSUZPKTsK
KyAgICAgICAgICAgIHJlbW92ZUFyZyhpLCBhcmdjLCBhcmd2KTsKKyAgICAgICAgfSBlbHNlIGlm
IChzdHJzdHIoYXJndW1lbnQsIG9wdGlvbk91dEZJRk8pID09IGFyZ3VtZW50KSB7CisgICAgICAg
ICAgICBvdXRGSUZPID0gYXJndW1lbnQgKyBXVEZfQVJSQVlfTEVOR1RIKG9wdGlvbk91dEZJRk8p
IC0gMTsKKyAgICAgICAgICAgIGNyZWF0ZUZJRk8ob3V0RklGTyk7CisgICAgICAgICAgICByZW1v
dmVBcmcoaSwgYXJnYywgYXJndik7CisgICAgICAgIH0gZWxzZSBpZiAoc3Ryc3RyKGFyZ3VtZW50
LCBvcHRpb25FcnJGSUZPKSA9PSBhcmd1bWVudCkgeworICAgICAgICAgICAgZXJyRklGTyA9IGFy
Z3VtZW50ICsgV1RGX0FSUkFZX0xFTkdUSChvcHRpb25FcnJGSUZPKSAtIDE7CisgICAgICAgICAg
ICBjcmVhdGVGSUZPKGVyckZJRk8pOworICAgICAgICAgICAgcmVtb3ZlQXJnKGksIGFyZ2MsIGFy
Z3YpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICsraTsKKyAgICB9CisKKyAgICAvLyBU
aGUgb3JkZXIgb2YgY3JlYXRlRklGTygpIGFuZCByZWRpcmVjdFRvRklGTygpIGlzIGltcG9ydGFu
dCB0byBhdm9pZCBkZWFkbG9jay4KKyAgICBpZiAob3V0RklGTykKKyAgICAgICAgcmVkaXJlY3Qo
c3Rkb3V0LCBvdXRGSUZPLCAidyIpOworICAgIGlmIChpbkZJRk8pCisgICAgICAgIHJlZGlyZWN0
KHN0ZGluLCBpbkZJRk8sICJyIik7CisgICAgaWYgKGVyckZJRk8pCisgICAgICAgIHJlZGlyZWN0
KHN0ZGVyciwgZXJyRklGTywgInciKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gUmVkaXJlY3Qg
c3RkZXJyIHRvIHN0ZG91dC4KKyAgICAgICAgZHVwMigxLCAyKTsKKyAgICB9Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9Gb3J3YXJkSU9TdHJlYW1zQW5kcm9pZC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9Gb3J3YXJkSU9TdHJlYW1zQW5kcm9pZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkYmM2MzhiNGQ0MjlhYmMz
ZjVjMzYyOGY4NTNiYjA0YWMxODM5OGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0ZvcndhcmRJT1N0cmVhbXNBbmRyb2lkLmgKQEAgLTAsMCArMSw0MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgRm9yd2FyZElPU3RyZWFtc0FuZHJvaWRfaAorI2RlZmluZSBG
b3J3YXJkSU9TdHJlYW1zQW5kcm9pZF9oCisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBUaGUg
dGVzdCBleGVjdXRhYmxlcyBmb3IgQW5kcm9pZCBzdXBwb3J0IHRocmVlIGFkZGl0aW9uYWwgY29t
bWFuZCBsaW5lIGZsYWdzCisvLyAoLS1pbi1maWZvLCAtLW91dC1maWZvIGFuZCAtLWVyci1maWZv
KSB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIHJldHJpZXZlIGlucHV0CisvLyBmcm9tIGEgZmlsZSBp
bnN0ZWFkIG9mIFNURElOLCBhbmQgdG8gZm9yd2FyZCBTVERPVVQgYW5kIFNUREVSUiB0byBmaWxl
cy4gV2hlbgorLy8gcnVubmluZyBEdW1wUmVuZGVyVHJlZSwgVGVzdFdlYktpdEFQSSBvciB3ZWJr
aXRfdW5pdF90ZXN0cyBpbiBXZWJLaXQKKy8vIGluZnJhc3RydWN0dXJlLCB0aGVzZSB3aWxsIGJl
IHVzZWQgaW5zdGVhZCBvZiBwYXJzaW5nIGFsbCBsb2cgb3V0cHV0Lgordm9pZCBtYXliZUluaXRJ
T1N0cmVhbUZvcndhcmRpbmdGb3JBbmRyb2lkKGludCogYXJnYywgY2hhcioqKiBhcmd2KTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBGb3J3YXJkSU9TdHJlYW1zQW5kcm9p
ZF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1J1bkFsbFRlc3Rz
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUnVuQWxsVGVzdHMuY3BwCmluZGV4
IDc4ZmQ3ZGEzZDMxMGI1ZTJiOTU4NTE0NjdlOTQzMGUwNmQ3ZjQ1OTkuLmJlNGM3ZGIyOTBlMDYz
MTFmYjJiZWJlNzNhYWY1OGY0ZTc1YjI3NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvUnVuQWxsVGVzdHMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvUnVuQWxsVGVzdHMuY3BwCkBAIC00Myw2ICs0MywxMCBAQAogI2luY2x1ZGUgIldlYlVu
aXRUZXN0cy5oIgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKE9TX0FORFJPSUQpCisjaW5jbHVkZSAi
Rm9yd2FyZElPU3RyZWFtc0FuZHJvaWQuaCIKKyNlbmRpZgorCiAjaW5jbHVkZSA8Z21vY2svZ21v
Y2suaD4KIAogLy8gVGVzdFN1aXRlIG11c3QgYmUgY3JlYXRlZCBiZWZvcmUgU2V0VXBUZXN0RW52
aXJvbm1lbnQgc28gaXQgcGVyZm9ybXMKQEAgLTU5LDYgKzYzLDkgQEAgaW50IG1haW4oaW50IGFy
Z2MsIGNoYXIqKiBhcmd2KQogICAgIFdlYktpdDo6RGVsZXRlVGVzdFN1aXRlKCk7CiAjZWxzZQog
ICAgIDo6dGVzdGluZzo6SW5pdEdvb2dsZU1vY2soJmFyZ2MsIGFyZ3YpOworI2lmIGRlZmluZWQo
T1NfQU5EUk9JRCkKKyAgICBXZWJLaXQ6Om1heWJlSW5pdElPU3RyZWFtRm9yd2FyZGluZ0ZvckFu
ZHJvaWQoJmFyZ2MsICZhcmd2KTsKKyNlbmRpZgogICAgIFRlc3RTdWl0ZSB0ZXN0U3VpdGUoYXJn
YywgYXJndik7CiAgICAgd2Via2l0X3N1cHBvcnQ6OlNldFVwVGVzdEVudmlyb25tZW50Rm9yVW5p
dFRlc3RzKCk7CiAgICAgaW50IHJlc3VsdCA9IHRlc3RTdWl0ZS5SdW4oKTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3Yjg5ZGM2MjFlZDBmOTE1
OGZlZDFmMzgyYTdhYTQxN2MzODE1NDBiLi41YTQzM2ZkYTBiMjhkZjg0ZGMxNDJmYWYzOWNmNTc4
NzMzNzhkZmEyIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTItMDktMTMgIFBldGVyIEJldmVybG9vICA8cGV0ZXJA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gU3VwcG9ydCB0aGUgLS17aW4sb3V0
LGVycn0tZmlmbyBhcmd1bWVudHMgb24gVGVzdFdlYktpdEFQSSBhbmQgd2Via2l0X3VuaXRfdGVz
dHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2Njg3
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQW5kcm9p
ZCdzIER1bXBSZW5kZXJUcmVlIGN1cnJlbnRseSBzdXBwb3J0cyB0aGVzZSBhcmd1bWVudHMsIGlt
cGxlbWVudGVkCisgICAgICAgIGFzIHBhcnQgb2YgVGVzdFNoZWxsQW5kcm9pZDoKKyAgICAgICAg
aHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RTaGVsbEFuZHJvaWQuY3BwP3Jldj0xMjg0OTYKKworICAgICAgICBUaGV5
J3JlIHVzZWQgYnkgdGhlIGxheW91dCB0ZXN0IHJ1bm5lciB0byBnZXQgdGhlIFNURE9VVCBhbmQg
U1RERVJSIHdoaWxlCisgICAgICAgIGEgbGF5b3V0IHRlc3QgcnVuIGlzIGluIHByb2Nlc3MsIHdo
aWNoIGlzIGEgc2FmZXIgYWx0ZXJuYXRpdmUgdG8gcGFyc2luZworICAgICAgICBhbGwgdGhlIGxv
Z2NhdCBvdXRwdXQgbWFudWFsbHkuIFRoZSBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgc2VlbiBoZXJl
OgorICAgICAgICBodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5P3Jldj0x
Mjg0OTYjTDU5MAorCisgICAgICAgIFRoaXMgcGF0Y2ggZ2VuZXJhbGl6ZXMgcGFyc2luZyBvZiBh
bmQgYXBwbHlpbmcgdGhlIGVmZmVjdHMgb2YgdGhlc2UgYXJndW1lbnRzCisgICAgICAgIHNvIHRo
YXQgdGhleSBjYW4gYmUgdXNlZCBmb3IgVGVzdFdlYktpdEFQSSBhbmQgd2Via2l0X3VuaXRfdGVz
dHMgYXMgd2VsbC4KKyAgICAgICAgQWZ0ZXIgdGhpcyBwYXRjaCwgdGhpcyB3aWxsIG1ha2UgaXQg
cG9zc2libGUgdG8gcHVsbCBvdXQgdGhlIG91dHB1dC1yZWFkaW5nCisgICAgICAgIGNvZGUgZnJv
bSBBbmRyb2lkJ3MgbGF5b3V0IHRlc3QgcG9ydCBhbmQgZ2VuZXJhbGl6ZSBpdCBzbyBpdCBjYW4g
YmUgcmUtdXNlZAorICAgICAgICBpbiB0aGUgbmV3IHRlc3QtcnVubmVyIGZvciB0aGUgb3RoZXIg
dHdvIHRlc3Qgc3VpdGVzLgorCisgICAgICAgIFRoaXMgaGFzIG5vIGVmZmVjdCB3aGVuIGNvbXBp
bGluZyBhbmQgcnVubmluZyB0aGVzZSB0ZXN0cyBhcyBwYXJ0IG9mIENocm9taXVtCisgICAgICAg
IGNvZGUsIHdoaWNoIGhhcyBhIG11Y2ggbW9yZSBhZHZhbmNlZCB0ZXN0LXJ1bm5lciB0aGF0IGRv
ZXMgcGFyc2UgY29tcGxldGUgbG9nCisgICAgICAgIG91dHB1dCwgYnV0IGFsc28gZGlyZWN0bHkg
ZGVwZW5kcyBvbiBjb2RlIGxpY2Vuc2VkIHVuZGVyIEFwYWNoZSAyLgorCisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwL0R1bXBSZW5kZXJUcmVlLmd5cDoKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxBbmRyb2lkLmNwcDoKKyAgICAg
ICAgKHBsYXRmb3JtSW5pdCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJ
Lmd5cC9UZXN0V2ViS2l0QVBJLmd5cDoKKwogMjAxMi0wOS0xMyAgU2ltb24gSGF1c21hbm4gIDxz
aW1vbi5oYXVzbWFubkBub2tpYS5jb20+CiAKICAgICAgICAgW1F0XSBNYWtlIFdlYktpdDIgd29y
ayBvbiBXaW5kb3dzIHdpdGggUXQgNQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
RHVtcFJlbmRlclRyZWUuZ3lwL0R1bXBSZW5kZXJUcmVlLmd5cCBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL0R1bXBSZW5kZXJUcmVlLmd5cC9EdW1wUmVuZGVyVHJlZS5neXAKaW5kZXggOGUzMzQ3Y2E4
MmFjN2Q1MTYxN2QyMmNhZjM4MTk0YmRmZTNlMjJiZi4uMTExZTQ2MDkwYjQ4YjY0NWY4NDVkMGYw
OTQ4NTM3Y2U1ODljNDYwYiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJl
bmRlclRyZWUuZ3lwL0R1bXBSZW5kZXJUcmVlLmd5cAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9EdW1wUmVuZGVyVHJlZS5neXAvRHVtcFJlbmRlclRyZWUuZ3lwCkBAIC0zMDAsNiArMzAwLDEw
IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoSU5URVJNRURJQVRFX0RJUikvcmVw
YWNrL0R1bXBSZW5kZXJUcmVlLnBhaycsCiAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAg
ICAgICAgICAgICAgICAgIH1dLAorICAgICAgICAgICAgICAgICAgICAnc291cmNlcyc6IFsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3Rlc3RzL0ZvcndhcmRJ
T1N0cmVhbXNBbmRyb2lkLmNwcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1
bV9zcmNfZGlyKS90ZXN0cy9Gb3J3YXJkSU9TdHJlYW1zQW5kcm9pZC5oJywKKyAgICAgICAgICAg
ICAgICAgICAgXSwKICAgICAgICAgICAgICAgICB9LCB7ICMgT1MhPSJhbmRyb2lkIgogICAgICAg
ICAgICAgICAgICAgICAnc291cmNlcy8nOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICBbJ2V4
Y2x1ZGUnLCAnQW5kcm9pZFxcLmNwcCQnXSwKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RTaGVsbEFuZHJvaWQuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFNoZWxsQW5kcm9pZC5jcHAKaW5kZXggMTg4MTU4NDQwYmE2ODE2OTFiZmM5
OGYxOTIyZTBjNmViOWJlNGU5Yy4uOGY4ZWVkYzNkYmM0N2IyYjllYjMxMTBkYjc0OTIwMzNmMDE3
NDFjMCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxs
QW5kcm9pZC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxs
QW5kcm9pZC5jcHAKQEAgLTMyLDE1ICszMiw4IEBACiAjaW5jbHVkZSAiVGVzdFNoZWxsLmgiCiAK
ICNpbmNsdWRlICJsaW51eC9XZWJGb250UmVuZGVyaW5nLmgiCisjaW5jbHVkZSAidGVzdHMvRm9y
d2FyZElPU3RyZWFtc0FuZHJvaWQuaCIKICNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9za2lhL2luY2x1
ZGUvcG9ydHMvU2tUeXBlZmFjZV9hbmRyb2lkLmgiCi0jaW5jbHVkZSA8YW5kcm9pZC9sb2cuaD4K
LSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jaW5jbHVkZSA8c3RkaW8u
aD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1
ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSB7
CiAKQEAgLTUxLDQ2ICs0NCw2IEBAIGNvbnN0IGNoYXIgZm9udE1haW5Db25maWdGaWxlW10gPSBE
RVZJQ0VfRFJUX0RJUiAiYW5kcm9pZF9tYWluX2ZvbnRzLnhtbCI7CiBjb25zdCBjaGFyIGZvbnRG
YWxsYmFja0NvbmZpZ0ZpbGVbXSA9IERFVklDRV9EUlRfRElSICJhbmRyb2lkX2ZhbGxiYWNrX2Zv
bnRzLnhtbCI7CiBjb25zdCBjaGFyIGZvbnRzRGlyW10gPSBERVZJQ0VfRFJUX0RJUiAiZm9udHMv
IjsKIAotY29uc3QgY2hhciBvcHRpb25JbkZJRk9bXSA9ICItLWluLWZpZm89IjsKLWNvbnN0IGNo
YXIgb3B0aW9uT3V0RklGT1tdID0gIi0tb3V0LWZpZm89IjsKLWNvbnN0IGNoYXIgb3B0aW9uRXJy
RklGT1tdID0gIi0tZXJyLWZpZm89IjsKLQotdm9pZCBhbmRyb2lkTG9nRXJyb3IoY29uc3QgY2hh
ciogZm9ybWF0LCAuLi4pIFdURl9BVFRSSUJVVEVfUFJJTlRGKDEsIDIpOwotCi12b2lkIGFuZHJv
aWRMb2dFcnJvcihjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikKLXsKLSAgICB2YV9saXN0IGFyZ3M7
Ci0gICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKLSAgICBfX2FuZHJvaWRfbG9nX3ZwcmludChB
TkRST0lEX0xPR19FUlJPUiwgIkR1bXBSZW5kZXJUcmVlIiwgZm9ybWF0LCBhcmdzKTsKLSAgICB2
YV9lbmQoYXJncyk7Ci19Ci0KLXZvaWQgcmVtb3ZlQXJnKGludCBpbmRleCwgaW50KiBhcmdjLCBj
aGFyKioqIGFyZ3YpCi17Ci0gICAgZm9yIChpbnQgaSA9IGluZGV4OyBpIDwgKmFyZ2M7ICsraSkK
LSAgICAgICAgKCphcmd2KVtpXSA9ICgqYXJndilbaSArIDFdOwotICAgIC0tKmFyZ2M7Ci19Ci0K
LXZvaWQgY3JlYXRlRklGTyhjb25zdCBjaGFyKiBmaWZvUGF0aCkKLXsKLSAgICB1bmxpbmsoZmlm
b1BhdGgpOwotICAgIC8vIDA2NjYgaXMgcnctcnctcnctLCB0byBhbGxvdyBhZGIgc2hlbGwgdG8g
cmVhZC93cml0ZSB0aGUgZmlmby4KLSAgICAvLyBFeHBsaWNpdGx5IGNhbGwgY2htb2QgdG8gZW5z
dXJlIHRoZSBtb2RlIGlzIHNldCBkZXNwaXRlIHVtYXNrLgotICAgIGlmIChta2ZpZm8oZmlmb1Bh
dGgsIDA2NjYpIHx8IGNobW9kKGZpZm9QYXRoLCAwNjY2KSkgewotICAgICAgICBhbmRyb2lkTG9n
RXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgZmlmbyAlczogJXNcbiIsIGZpZm9QYXRoLCBzdHJlcnJv
cihlcnJubykpOwotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotfQotCi12b2lk
IHJlZGlyZWN0KEZJTEUqIHN0cmVhbSwgY29uc3QgY2hhciogcGF0aCwgY29uc3QgY2hhciogbW9k
ZSkKLXsKLSAgICBpZiAoIWZyZW9wZW4ocGF0aCwgbW9kZSwgc3RyZWFtKSkgewotICAgICAgICBh
bmRyb2lkTG9nRXJyb3IoIkZhaWxlZCB0byByZWRpcmVjdCBzdHJlYW0gdG8gZmlsZTogJXM6ICVz
XG4iLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7
Ci0gICAgfQotfQotCiB9IC8vIG5hbWVzcGFjZQogCiB2b2lkIHBsYXRmb3JtSW5pdChpbnQqIGFy
Z2MsIGNoYXIqKiogYXJndikKQEAgLTk4LDM4ICs1MSw4IEBAIHZvaWQgcGxhdGZvcm1Jbml0KGlu
dCogYXJnYywgY2hhcioqKiBhcmd2KQogICAgIC8vIEluaXRpYWxpemUgc2tpYSB3aXRoIGN1c3Rv
bWl6ZWQgZm9udCBjb25maWcgZmlsZXMuCiAgICAgU2tVc2VUZXN0Rm9udENvbmZpZ0ZpbGUoZm9u
dE1haW5Db25maWdGaWxlLCBmb250RmFsbGJhY2tDb25maWdGaWxlLCBmb250c0Rpcik7CiAKLSAg
ICBjb25zdCBjaGFyKiBpbkZJRk8gPSAwOwotICAgIGNvbnN0IGNoYXIqIG91dEZJRk8gPSAwOwot
ICAgIGNvbnN0IGNoYXIqIGVyckZJRk8gPSAwOwotICAgIGZvciAoaW50IGkgPSAxOyBpIDwgKmFy
Z2M7ICkgewotICAgICAgICBjb25zdCBjaGFyKiBhcmd1bWVudCA9ICgqYXJndilbaV07Ci0gICAg
ICAgIGlmIChzdHJzdHIoYXJndW1lbnQsIG9wdGlvbkluRklGTykgPT0gYXJndW1lbnQpIHsKLSAg
ICAgICAgICAgIGluRklGTyA9IGFyZ3VtZW50ICsgV1RGX0FSUkFZX0xFTkdUSChvcHRpb25JbkZJ
Rk8pIC0gMTsKLSAgICAgICAgICAgIGNyZWF0ZUZJRk8oaW5GSUZPKTsKLSAgICAgICAgICAgIHJl
bW92ZUFyZyhpLCBhcmdjLCBhcmd2KTsKLSAgICAgICAgfSBlbHNlIGlmIChzdHJzdHIoYXJndW1l
bnQsIG9wdGlvbk91dEZJRk8pID09IGFyZ3VtZW50KSB7Ci0gICAgICAgICAgICBvdXRGSUZPID0g
YXJndW1lbnQgKyBXVEZfQVJSQVlfTEVOR1RIKG9wdGlvbk91dEZJRk8pIC0gMTsKLSAgICAgICAg
ICAgIGNyZWF0ZUZJRk8ob3V0RklGTyk7Ci0gICAgICAgICAgICByZW1vdmVBcmcoaSwgYXJnYywg
YXJndik7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3Ryc3RyKGFyZ3VtZW50LCBvcHRpb25FcnJGSUZP
KSA9PSBhcmd1bWVudCkgewotICAgICAgICAgICAgZXJyRklGTyA9IGFyZ3VtZW50ICsgV1RGX0FS
UkFZX0xFTkdUSChvcHRpb25FcnJGSUZPKSAtIDE7Ci0gICAgICAgICAgICBjcmVhdGVGSUZPKGVy
ckZJRk8pOwotICAgICAgICAgICAgcmVtb3ZlQXJnKGksIGFyZ2MsIGFyZ3YpOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICsraTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgb3JkZXIgb2YgY3Jl
YXRlRklGTygpIGFuZCByZWRpcmVjdFRvRklGTygpIGlzIGltcG9ydGFudCB0byBhdm9pZCBkZWFk
bG9jay4KLSAgICBpZiAob3V0RklGTykKLSAgICAgICAgcmVkaXJlY3Qoc3Rkb3V0LCBvdXRGSUZP
LCAidyIpOwotICAgIGlmIChpbkZJRk8pCi0gICAgICAgIHJlZGlyZWN0KHN0ZGluLCBpbkZJRk8s
ICJyIik7Ci0gICAgaWYgKGVyckZJRk8pCi0gICAgICAgIHJlZGlyZWN0KHN0ZGVyciwgZXJyRklG
TywgInciKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gUmVkaXJlY3Qgc3RkZXJyIHRvIHN0ZG91
dC4KLSAgICAgICAgZHVwMigxLCAyKTsKLSAgICB9CisgICAgLy8gU2V0IHVwIElPIHN0cmVhbSBm
b3J3YXJkaW5nIGlmIG5lY2Vzc2FyeS4KKyAgICBXZWJLaXQ6Om1heWJlSW5pdElPU3RyZWFtRm9y
d2FyZGluZ0ZvckFuZHJvaWQoYXJnYywgYXJndik7CiAKICAgICAvLyBEaXNhYmxlIGF1dG8gaGlu
dCBhbmQgdXNlIG5vcm1hbCBoaW50aW5nIGluIGxheW91dCB0ZXN0IG1vZGUgdG8gcHJvZHVjZSB0
aGUgc2FtZSBmb250IG1ldHJpY3MgYXMgY2hyb21pdW0tbGludXguCiAgICAgV2ViS2l0OjpXZWJG
b250UmVuZGVyaW5nOjpzZXRBdXRvSGludChmYWxzZSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkuZ3lwL1Rlc3RXZWJLaXRBUEkuZ3lwIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLmd5cC9UZXN0V2ViS2l0QVBJLmd5cAppbmRleCAyOGU4
MmFjMDcxZDYwZTRmNGE0NmU2ZjdlZTIwOTliM2I2NDlkOTFlLi5mNmJkMWIxZWRmZTQwMjZmMTg4
MTQ1MTRmMDNlZDMyZWFlYTBkYzhlIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RXZWJLaXRBUEkuZ3lwL1Rlc3RXZWJLaXRBUEkuZ3lwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdFdlYktpdEFQSS5neXAvVGVzdFdlYktpdEFQSS5neXAKQEAgLTg5LDYgKzg5LDEzIEBA
CiAgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90ZXN0aW5nL2Fu
ZHJvaWQvbmF0aXZlX3Rlc3QuZ3lwOm5hdGl2ZV90ZXN0X25hdGl2ZV9jb2RlJywKICAgICAgICAg
ICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICB9XSwKKyAgICAgICAgICAgICAgICBbJ09T
PT0iYW5kcm9pZCInLCB7CisgICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzogWworICAgICAg
ICAgICAgICAgICAgICAgICAgIyBSZXVzZSB0aGUgSU8gc3RyZWFtIGZvcndhcmRpbmcgcHJvY2Vk
dXJlcyBmcm9tIHdlYmtpdF91bml0X3Rlc3RzLgorICAgICAgICAgICAgICAgICAgICAgICAgJzwo
c291cmNlX2RpcikvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ZvcndhcmRJT1N0cmVhbXNBbmRyb2lk
LmNwcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnPChzb3VyY2VfZGlyKS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvRm9yd2FyZElPU3RyZWFtc0FuZHJvaWQuaCcsCisgICAgICAgICAgICAgICAg
ICAgIF0sCisgICAgICAgICAgICAgICAgfV0sCiAgICAgICAgICAgICBdLAogICAgICAgICB9LAog
ICAgIF0sICMgdGFyZ2V0cwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164158</attachid>
            <date>2012-09-14 08:16:56 -0700</date>
            <delta_ts>2012-09-14 10:37:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96687-20120914161627.patch</filename>
            <type>text/plain</type>
            <size>18925</size>
            <attacher name="Peter Beverloo">peter</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4NTk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IGRmNjA1MWZiMzhlYTE2MmY4ZmExZDZkYTA4YjUzZmJjMTFjNDU4NzYuLjg4YThjOTRlYmExOTMx
MTkwZDQzYmJjMDJiYzczNzJjMGMzYWRhYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMzggQEAKKzIwMTItMDktMTMgIFBldGVyIEJldmVybG9vICA8cGV0ZXJAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gU3VwcG9ydCB0aGUgLS17aW4sb3V0LGVycn0t
ZmlmbyBhcmd1bWVudHMgb24gVGVzdFdlYktpdEFQSSBhbmQgd2Via2l0X3VuaXRfdGVzdHMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk2Njg3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQW5kcm9pZCdzIER1
bXBSZW5kZXJUcmVlIGN1cnJlbnRseSBzdXBwb3J0cyB0aGVzZSBhcmd1bWVudHMsIGltcGxlbWVu
dGVkCisgICAgICAgIGFzIHBhcnQgb2YgVGVzdFNoZWxsQW5kcm9pZDoKKyAgICAgICAgaHR0cDov
L3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RTaGVsbEFuZHJvaWQuY3BwP3Jldj0xMjg0OTYKKworICAgICAgICBUaGV5J3JlIHVz
ZWQgYnkgdGhlIGxheW91dCB0ZXN0IHJ1bm5lciB0byBnZXQgdGhlIFNURE9VVCBhbmQgU1RERVJS
IHdoaWxlCisgICAgICAgIGEgbGF5b3V0IHRlc3QgcnVuIGlzIGluIHByb2Nlc3MsIHdoaWNoIGlz
IGEgc2FmZXIgYWx0ZXJuYXRpdmUgdG8gcGFyc2luZworICAgICAgICBhbGwgdGhlIGxvZ2NhdCBv
dXRwdXQgbWFudWFsbHkuIFRoZSBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgc2VlbiBoZXJlOgorICAg
ICAgICBodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIvdHJ1bmsvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9hbmRyb2lkLnB5P3Jldj0xMjg0OTYj
TDU5MAorCisgICAgICAgIFRoaXMgcGF0Y2ggZ2VuZXJhbGl6ZXMgcGFyc2luZyBvZiBhbmQgYXBw
bHlpbmcgdGhlIGVmZmVjdHMgb2YgdGhlc2UgYXJndW1lbnRzCisgICAgICAgIHNvIHRoYXQgdGhl
eSBjYW4gYmUgdXNlZCBmb3IgVGVzdFdlYktpdEFQSSBhbmQgd2Via2l0X3VuaXRfdGVzdHMgYXMg
d2VsbC4KKyAgICAgICAgQWZ0ZXIgdGhpcyBwYXRjaCwgdGhpcyB3aWxsIG1ha2UgaXQgcG9zc2li
bGUgdG8gcHVsbCBvdXQgdGhlIG91dHB1dC1yZWFkaW5nCisgICAgICAgIGNvZGUgZnJvbSBBbmRy
b2lkJ3MgbGF5b3V0IHRlc3QgcG9ydCBhbmQgZ2VuZXJhbGl6ZSBpdCBzbyBpdCBjYW4gYmUgcmUt
dXNlZAorICAgICAgICBpbiB0aGUgbmV3IHRlc3QtcnVubmVyIGZvciB0aGUgb3RoZXIgdHdvIHRl
c3Qgc3VpdGVzLgorCisgICAgICAgIFRoaXMgaGFzIG5vIGVmZmVjdCB3aGVuIGNvbXBpbGluZyBh
bmQgcnVubmluZyB0aGVzZSB0ZXN0cyBhcyBwYXJ0IG9mIENocm9taXVtCisgICAgICAgIGNvZGUs
IHdoaWNoIGhhcyBhIG11Y2ggbW9yZSBhZHZhbmNlZCB0ZXN0LXJ1bm5lciB0aGF0IGRvZXMgcGFy
c2UgY29tcGxldGUgbG9nCisgICAgICAgIG91dHB1dCwgYnV0IGFsc28gZGlyZWN0bHkgZGVwZW5k
cyBvbiBjb2RlIGxpY2Vuc2VkIHVuZGVyIEFwYWNoZSAyLgorCisgICAgICAgICogV2ViS2l0Lmd5
cGk6CisgICAgICAgICogdGVzdHMvRm9yd2FyZElPU3RyZWFtc0FuZHJvaWQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6Om1heWJlSW5pdElPU3RyZWFtRm9y
d2FyZGluZ0ZvckFuZHJvaWQpOgorICAgICAgICAqIHRlc3RzL0ZvcndhcmRJT1N0cmVhbXNBbmRy
b2lkLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiB0ZXN0cy9SdW5BbGxU
ZXN0cy5jcHA6CisgICAgICAgIChtYWluKToKKwogMjAxMi0wOS0xNCAgS2Vpc2hpIEhhdHRvcmkg
IDxrZWlzaGlAd2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtlIHRpbWUgaW5wdXQgbGFuZyBhdHRy
aWJ1dGUgYXdhcmUgZm9yIHRlc3RpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0VW5pdFRlc3RzLmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0VW5p
dFRlc3RzLmd5cAppbmRleCAxOGFkYWM5ZjA3NTlkZTBjMmZhZmUxMjA3ZWIzZDQzM2M1MGI5OGMw
Li44M2IzMmNmNmU5MTgxNzUwZjY0ODFiMTJkYzA2ZDQ4NWRkYTUxN2FlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdFVuaXRUZXN0cy5neXAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXRVbml0VGVzdHMuZ3lwCkBAIC0xMjYsNiArMTI2LDcgQEAKICAg
ICAgICAgICAgICAgICAgICAgJ3R5cGUnOiAnc2hhcmVkX2xpYnJhcnknLAogICAgICAgICAgICAg
ICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwogICAgICAgICAgICAgICAgICAgICAgICAgJzwoY2hy
b21pdW1fc3JjX2RpcikvdGVzdGluZy9hbmRyb2lkL25hdGl2ZV90ZXN0Lmd5cDpuYXRpdmVfdGVz
dF9uYXRpdmVfY29kZScsCisgICAgICAgICAgICAgICAgICAgICAgICAnaW9fc3RyZWFtX2Zvcndh
cmRlcl9hbmRyb2lkJywKICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICB9
XSwKICAgICAgICAgICAgIF0sCkBAIC0yMDgsNiArMjA5LDIwIEBACiAgICAgICAgICAgICAgICAg
ICAgICAgICAnPChhbmRyb2lkX2FwcF9hYmkpJywKICAgICAgICAgICAgICAgICAgICAgXSwKICAg
ICAgICAgICAgICAgICB9XSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICAjIEZJWE1FOiBX
aGVuIHRoZSBBbmRyb2lkIHRlc3QgcnVubmVyIGZyYW1ld29yayBpbiBDaHJvbWl1bSBoYXMgc3Rh
YmlsaXplZCBlbm91Z2gsCisgICAgICAgICAgICAjIHdlIHNob3VsZCBzd2l0Y2ggdG8gdXNpbmcg
dGhhdCBhbmQgd2lsbCBubyBsb25nZXIgbmVlZCB0aGUgc3RyZWFtIGZvcndhcmRpbmcuCisgICAg
ICAgICAgICAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05Njc2NAor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdpb19zdHJlYW1f
Zm9yd2FyZGVyX2FuZHJvaWQnLAorICAgICAgICAgICAgICAgICd0eXBlJzogJ3N0YXRpY19saWJy
YXJ5JywKKyAgICAgICAgICAgICAgICAnc291cmNlcyc6IFsKKyAgICAgICAgICAgICAgICAgICAg
J3Rlc3RzL0ZvcndhcmRJT1N0cmVhbXNBbmRyb2lkLmNwcCcsCisgICAgICAgICAgICAgICAgICAg
ICd0ZXN0cy9Gb3J3YXJkSU9TdHJlYW1zQW5kcm9pZC5oJywKKyAgICAgICAgICAgICAgICBdLAor
ICAgICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCisgICAgICAgICAgICAgICAgICAgICcu
Li8uLi9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOndlYmNvcmUnLAorICAgICAgICAg
ICAgICAgIF0sCiAgICAgICAgICAgICB9XSwKICAgICAgICAgfV0sCiAgICAgXSwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRm9yd2FyZElPU3RyZWFtc0FuZHJvaWQu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9Gb3J3YXJkSU9TdHJlYW1zQW5kcm9p
ZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMGNhNWMxYjViYjZkZjNjZjM1MmU5NmU3MTIxY2IxY2UxMzYxZjNl
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRm9yd2Fy
ZElPU3RyZWFtc0FuZHJvaWQuY3BwCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiRm9yd2FyZElPU3RyZWFtc0FuZHJvaWQuaCIKKwor
I2luY2x1ZGUgPGFuZHJvaWQvbG9nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxm
Y250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNs
dWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CisKKyNpZm5kZWYgRVhJVF9GQUlMVVJFCisjZGVmaW5lIEVYSVRfRkFJTFVS
RSAxCisjZW5kaWYKKworbmFtZXNwYWNlIHsKKworY29uc3QgY2hhciBvcHRpb25JbkZJRk9bXSA9
ICItLWluLWZpZm89IjsKK2NvbnN0IGNoYXIgb3B0aW9uT3V0RklGT1tdID0gIi0tb3V0LWZpZm89
IjsKK2NvbnN0IGNoYXIgb3B0aW9uRXJyRklGT1tdID0gIi0tZXJyLWZpZm89IjsKKwordm9pZCBh
bmRyb2lkTG9nRXJyb3IoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pIFdURl9BVFRSSUJVVEVfUFJJ
TlRGKDEsIDIpOworCit2b2lkIGFuZHJvaWRMb2dFcnJvcihjb25zdCBjaGFyKiBmb3JtYXQsIC4u
LikKK3sKKyAgICB2YV9saXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKyAg
ICBfX2FuZHJvaWRfbG9nX3ZwcmludChBTkRST0lEX0xPR19FUlJPUiwgIldlYktpdCIsIGZvcm1h
dCwgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworfQorCit2b2lkIHJlbW92ZUFyZyhpbnQgaW5k
ZXgsIGludCogYXJnYywgY2hhcioqKiBhcmd2KQoreworICAgIGZvciAoaW50IGkgPSBpbmRleDsg
aSA8ICphcmdjOyArK2kpCisgICAgICAgICgqYXJndilbaV0gPSAoKmFyZ3YpW2kgKyAxXTsKKyAg
ICAtLSphcmdjOworfQorCit2b2lkIGNyZWF0ZUZJRk8oY29uc3QgY2hhciogZmlmb1BhdGgpCit7
CisgICAgdW5saW5rKGZpZm9QYXRoKTsKKyAgICAvLyAwNjY2IGlzIHJ3LXJ3LXJ3LSwgdG8gYWxs
b3cgYWRiIHNoZWxsIHRvIHJlYWQvd3JpdGUgdGhlIGZpZm8uCisgICAgLy8gRXhwbGljaXRseSBj
YWxsIGNobW9kIHRvIGVuc3VyZSB0aGUgbW9kZSBpcyBzZXQgZGVzcGl0ZSB1bWFzay4KKyAgICBp
ZiAobWtmaWZvKGZpZm9QYXRoLCAwNjY2KSB8fCBjaG1vZChmaWZvUGF0aCwgMDY2NikpIHsKKyAg
ICAgICAgYW5kcm9pZExvZ0Vycm9yKCJGYWlsZWQgdG8gY3JlYXRlIGZpZm8gJXM6ICVzXG4iLCBm
aWZvUGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwor
ICAgIH0KK30KKwordm9pZCByZWRpcmVjdChGSUxFKiBzdHJlYW0sIGNvbnN0IGNoYXIqIHBhdGgs
IGNvbnN0IGNoYXIqIG1vZGUpCit7CisgICAgaWYgKCFmcmVvcGVuKHBhdGgsIG1vZGUsIHN0cmVh
bSkpIHsKKyAgICAgICAgYW5kcm9pZExvZ0Vycm9yKCJGYWlsZWQgdG8gcmVkaXJlY3Qgc3RyZWFt
IHRvIGZpbGU6ICVzOiAlc1xuIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZXhp
dChFWElUX0ZBSUxVUkUpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK3ZvaWQgbWF5YmVJbml0SU9TdHJlYW1Gb3J3YXJkaW5nRm9yQW5kcm9pZChp
bnQqIGFyZ2MsIGNoYXIqKiogYXJndikKK3sKKyAgICBjb25zdCBjaGFyKiBpbkZJRk8gPSAwOwor
ICAgIGNvbnN0IGNoYXIqIG91dEZJRk8gPSAwOworICAgIGNvbnN0IGNoYXIqIGVyckZJRk8gPSAw
OworICAgIGZvciAoaW50IGkgPSAxOyBpIDwgKmFyZ2M7ICkgeworICAgICAgICBjb25zdCBjaGFy
KiBhcmd1bWVudCA9ICgqYXJndilbaV07CisgICAgICAgIGlmIChzdHJzdHIoYXJndW1lbnQsIG9w
dGlvbkluRklGTykgPT0gYXJndW1lbnQpIHsKKyAgICAgICAgICAgIGluRklGTyA9IGFyZ3VtZW50
ICsgV1RGX0FSUkFZX0xFTkdUSChvcHRpb25JbkZJRk8pIC0gMTsKKyAgICAgICAgICAgIGNyZWF0
ZUZJRk8oaW5GSUZPKTsKKyAgICAgICAgICAgIHJlbW92ZUFyZyhpLCBhcmdjLCBhcmd2KTsKKyAg
ICAgICAgfSBlbHNlIGlmIChzdHJzdHIoYXJndW1lbnQsIG9wdGlvbk91dEZJRk8pID09IGFyZ3Vt
ZW50KSB7CisgICAgICAgICAgICBvdXRGSUZPID0gYXJndW1lbnQgKyBXVEZfQVJSQVlfTEVOR1RI
KG9wdGlvbk91dEZJRk8pIC0gMTsKKyAgICAgICAgICAgIGNyZWF0ZUZJRk8ob3V0RklGTyk7Cisg
ICAgICAgICAgICByZW1vdmVBcmcoaSwgYXJnYywgYXJndik7CisgICAgICAgIH0gZWxzZSBpZiAo
c3Ryc3RyKGFyZ3VtZW50LCBvcHRpb25FcnJGSUZPKSA9PSBhcmd1bWVudCkgeworICAgICAgICAg
ICAgZXJyRklGTyA9IGFyZ3VtZW50ICsgV1RGX0FSUkFZX0xFTkdUSChvcHRpb25FcnJGSUZPKSAt
IDE7CisgICAgICAgICAgICBjcmVhdGVGSUZPKGVyckZJRk8pOworICAgICAgICAgICAgcmVtb3Zl
QXJnKGksIGFyZ2MsIGFyZ3YpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICsraTsKKyAg
ICB9CisKKyAgICAvLyBUaGUgb3JkZXIgb2YgY3JlYXRlRklGTygpIGFuZCByZWRpcmVjdFRvRklG
TygpIGlzIGltcG9ydGFudCB0byBhdm9pZCBkZWFkbG9jay4KKyAgICBpZiAob3V0RklGTykKKyAg
ICAgICAgcmVkaXJlY3Qoc3Rkb3V0LCBvdXRGSUZPLCAidyIpOworICAgIGlmIChpbkZJRk8pCisg
ICAgICAgIHJlZGlyZWN0KHN0ZGluLCBpbkZJRk8sICJyIik7CisgICAgaWYgKGVyckZJRk8pCisg
ICAgICAgIHJlZGlyZWN0KHN0ZGVyciwgZXJyRklGTywgInciKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgLy8gUmVkaXJlY3Qgc3RkZXJyIHRvIHN0ZG91dC4KKyAgICAgICAgZHVwMigxLCAyKTsKKyAg
ICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9Gb3J3YXJkSU9TdHJlYW1zQW5kcm9pZC5oIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9Gb3J3YXJkSU9TdHJlYW1zQW5kcm9pZC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZk
YmM2MzhiNGQ0MjlhYmMzZjVjMzYyOGY4NTNiYjA0YWMxODM5OGEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ZvcndhcmRJT1N0cmVhbXNBbmRyb2lkLmgK
QEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRm9yd2FyZElPU3RyZWFtc0FuZHJv
aWRfaAorI2RlZmluZSBGb3J3YXJkSU9TdHJlYW1zQW5kcm9pZF9oCisKK25hbWVzcGFjZSBXZWJL
aXQgeworCisvLyBUaGUgdGVzdCBleGVjdXRhYmxlcyBmb3IgQW5kcm9pZCBzdXBwb3J0IHRocmVl
IGFkZGl0aW9uYWwgY29tbWFuZCBsaW5lIGZsYWdzCisvLyAoLS1pbi1maWZvLCAtLW91dC1maWZv
IGFuZCAtLWVyci1maWZvKSB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIHJldHJpZXZlIGlucHV0Cisv
LyBmcm9tIGEgZmlsZSBpbnN0ZWFkIG9mIFNURElOLCBhbmQgdG8gZm9yd2FyZCBTVERPVVQgYW5k
IFNUREVSUiB0byBmaWxlcy4gV2hlbgorLy8gcnVubmluZyBEdW1wUmVuZGVyVHJlZSwgVGVzdFdl
YktpdEFQSSBvciB3ZWJraXRfdW5pdF90ZXN0cyBpbiBXZWJLaXQKKy8vIGluZnJhc3RydWN0dXJl
LCB0aGVzZSB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiBwYXJzaW5nIGFsbCBsb2cgb3V0cHV0Lgor
dm9pZCBtYXliZUluaXRJT1N0cmVhbUZvcndhcmRpbmdGb3JBbmRyb2lkKGludCogYXJnYywgY2hh
cioqKiBhcmd2KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBGb3J3YXJk
SU9TdHJlYW1zQW5kcm9pZF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL1J1bkFsbFRlc3RzLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUnVuQWxs
VGVzdHMuY3BwCmluZGV4IDc4ZmQ3ZGEzZDMxMGI1ZTJiOTU4NTE0NjdlOTQzMGUwNmQ3ZjQ1OTku
LmJlNGM3ZGIyOTBlMDYzMTFmYjJiZWJlNzNhYWY1OGY0ZTc1YjI3NzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvUnVuQWxsVGVzdHMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvUnVuQWxsVGVzdHMuY3BwCkBAIC00Myw2ICs0MywxMCBAQAog
I2luY2x1ZGUgIldlYlVuaXRUZXN0cy5oIgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKE9TX0FORFJP
SUQpCisjaW5jbHVkZSAiRm9yd2FyZElPU3RyZWFtc0FuZHJvaWQuaCIKKyNlbmRpZgorCiAjaW5j
bHVkZSA8Z21vY2svZ21vY2suaD4KIAogLy8gVGVzdFN1aXRlIG11c3QgYmUgY3JlYXRlZCBiZWZv
cmUgU2V0VXBUZXN0RW52aXJvbm1lbnQgc28gaXQgcGVyZm9ybXMKQEAgLTU5LDYgKzYzLDkgQEAg
aW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgIFdlYktpdDo6RGVsZXRlVGVzdFN1
aXRlKCk7CiAjZWxzZQogICAgIDo6dGVzdGluZzo6SW5pdEdvb2dsZU1vY2soJmFyZ2MsIGFyZ3Yp
OworI2lmIGRlZmluZWQoT1NfQU5EUk9JRCkKKyAgICBXZWJLaXQ6Om1heWJlSW5pdElPU3RyZWFt
Rm9yd2FyZGluZ0ZvckFuZHJvaWQoJmFyZ2MsICZhcmd2KTsKKyNlbmRpZgogICAgIFRlc3RTdWl0
ZSB0ZXN0U3VpdGUoYXJnYywgYXJndik7CiAgICAgd2Via2l0X3N1cHBvcnQ6OlNldFVwVGVzdEVu
dmlyb25tZW50Rm9yVW5pdFRlc3RzKCk7CiAgICAgaW50IHJlc3VsdCA9IHRlc3RTdWl0ZS5SdW4o
KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBj
Yjk3ZDg2MDgxOGM1ODAwYjgyMWQxNGM3Zjc5MWQzYjMyOWI0MTk1Li5kNzVkN2Q4ODc3ODdkNThj
YmFkYTg1ZDNiNGUwYjc3YTJjMjhmN2JkIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysr
IGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTItMDktMTMgIFBldGVyIEJl
dmVybG9vICA8cGV0ZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtDaHJvbWl1bV0gU3VwcG9y
dCB0aGUgLS17aW4sb3V0LGVycn0tZmlmbyBhcmd1bWVudHMgb24gVGVzdFdlYktpdEFQSSBhbmQg
d2Via2l0X3VuaXRfdGVzdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTk2Njg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQW5kcm9pZCdzIER1bXBSZW5kZXJUcmVlIGN1cnJlbnRseSBzdXBwb3J0cyB0aGVz
ZSBhcmd1bWVudHMsIGltcGxlbWVudGVkCisgICAgICAgIGFzIHBhcnQgb2YgVGVzdFNoZWxsQW5k
cm9pZDoKKyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9icm93c2VyL3RydW5rL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbEFuZHJvaWQuY3BwP3Jldj0xMjg0OTYK
KworICAgICAgICBUaGV5J3JlIHVzZWQgYnkgdGhlIGxheW91dCB0ZXN0IHJ1bm5lciB0byBnZXQg
dGhlIFNURE9VVCBhbmQgU1RERVJSIHdoaWxlCisgICAgICAgIGEgbGF5b3V0IHRlc3QgcnVuIGlz
IGluIHByb2Nlc3MsIHdoaWNoIGlzIGEgc2FmZXIgYWx0ZXJuYXRpdmUgdG8gcGFyc2luZworICAg
ICAgICBhbGwgdGhlIGxvZ2NhdCBvdXRwdXQgbWFudWFsbHkuIFRoZSBpbXBsZW1lbnRhdGlvbiBj
YW4gYmUgc2VlbiBoZXJlOgorICAgICAgICBodHRwOi8vdHJhYy53ZWJraXQub3JnL2Jyb3dzZXIv
dHJ1bmsvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9jaHJvbWl1bV9h
bmRyb2lkLnB5P3Jldj0xMjg0OTYjTDU5MAorCisgICAgICAgIFRoaXMgcGF0Y2ggZ2VuZXJhbGl6
ZXMgcGFyc2luZyBvZiBhbmQgYXBwbHlpbmcgdGhlIGVmZmVjdHMgb2YgdGhlc2UgYXJndW1lbnRz
CisgICAgICAgIHNvIHRoYXQgdGhleSBjYW4gYmUgdXNlZCBmb3IgVGVzdFdlYktpdEFQSSBhbmQg
d2Via2l0X3VuaXRfdGVzdHMgYXMgd2VsbC4KKyAgICAgICAgQWZ0ZXIgdGhpcyBwYXRjaCwgdGhp
cyB3aWxsIG1ha2UgaXQgcG9zc2libGUgdG8gcHVsbCBvdXQgdGhlIG91dHB1dC1yZWFkaW5nCisg
ICAgICAgIGNvZGUgZnJvbSBBbmRyb2lkJ3MgbGF5b3V0IHRlc3QgcG9ydCBhbmQgZ2VuZXJhbGl6
ZSBpdCBzbyBpdCBjYW4gYmUgcmUtdXNlZAorICAgICAgICBpbiB0aGUgbmV3IHRlc3QtcnVubmVy
IGZvciB0aGUgb3RoZXIgdHdvIHRlc3Qgc3VpdGVzLgorCisgICAgICAgIFRoaXMgaGFzIG5vIGVm
ZmVjdCB3aGVuIGNvbXBpbGluZyBhbmQgcnVubmluZyB0aGVzZSB0ZXN0cyBhcyBwYXJ0IG9mIENo
cm9taXVtCisgICAgICAgIGNvZGUsIHdoaWNoIGhhcyBhIG11Y2ggbW9yZSBhZHZhbmNlZCB0ZXN0
LXJ1bm5lciB0aGF0IGRvZXMgcGFyc2UgY29tcGxldGUgbG9nCisgICAgICAgIG91dHB1dCwgYnV0
IGFsc28gZGlyZWN0bHkgZGVwZW5kcyBvbiBjb2RlIGxpY2Vuc2VkIHVuZGVyIEFwYWNoZSAyLgor
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwL0R1bXBSZW5kZXJU
cmVlLmd5cDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxBbmRy
b2lkLmNwcDoKKyAgICAgICAgKHBsYXRmb3JtSW5pdCk6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLmd5cC9UZXN0V2ViS2l0QVBJLmd5cDoKKwogMjAxMi0wOS0xNCAgWmFu
IERvYmVyc2VrICA8emFuZG9iZXJzZWtAZ21haWwuY29tPgogCiAgICAgICAgIFtHVEtdIENsZWFy
IGFwcGxpY2F0aW9uIGNhY2hlIGJldHdlZW4gdGVzdHMgaW4gRHVtcFJlbmRlclRyZWUKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cC9EdW1wUmVuZGVy
VHJlZS5neXAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXAvRHVtcFJl
bmRlclRyZWUuZ3lwCmluZGV4IDhlMzM0N2NhODJhYzdkNTE2MTdkMjJjYWYzODE5NGJkZmUzZTIy
YmYuLmMxMjZlNjdhYWVkY2EwYzdiY2Y4NTRhOTE0MGI0ZGQ5N2VjMmNjMzIgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cC9EdW1wUmVuZGVyVHJlZS5n
eXAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwL0R1bXBSZW5k
ZXJUcmVlLmd5cApAQCAtMjg1LDYgKzI4NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAn
PChjaHJvbWl1bV9zcmNfZGlyKS90ZXN0aW5nL2FuZHJvaWQvbmF0aXZlX3Rlc3QuZ3lwOm5hdGl2
ZV90ZXN0X25hdGl2ZV9jb2RlJywKICAgICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVt
X3NyY19kaXIpL3Rvb2xzL2FuZHJvaWQvZm9yd2FyZGVyL2ZvcndhcmRlci5neXA6Zm9yd2FyZGVy
JywKICAgICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3Rvb2xzL2Fu
ZHJvaWQvbWQ1c3VtL21kNXN1bS5neXA6bWQ1c3VtJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICc8KHNvdXJjZV9kaXIpL1dlYktpdC9jaHJvbWl1bS9XZWJLaXRVbml0VGVzdHMuZ3lwOmlvX3N0
cmVhbV9mb3J3YXJkZXJfYW5kcm9pZCcsCiAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAg
ICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMhJzogWwogICAgICAgICAgICAgICAgICAgICAgICAg
J0ltYWdlRGlmZicsCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0U2hlbGxBbmRyb2lkLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RT
aGVsbEFuZHJvaWQuY3BwCmluZGV4IDE4ODE1ODQ0MGJhNjgxNjkxYmZjOThmMTkyMmUwYzZlYjli
ZTRlOWMuLjhmOGVlZGMzZGJjNDdiMmI5ZWIzMTEwZGI3NDkyMDMzZjAxNzQxYzAgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbEFuZHJvaWQuY3BwCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbEFuZHJvaWQuY3BwCkBA
IC0zMiwxNSArMzIsOCBAQAogI2luY2x1ZGUgIlRlc3RTaGVsbC5oIgogCiAjaW5jbHVkZSAibGlu
dXgvV2ViRm9udFJlbmRlcmluZy5oIgorI2luY2x1ZGUgInRlc3RzL0ZvcndhcmRJT1N0cmVhbXNB
bmRyb2lkLmgiCiAjaW5jbHVkZSAidGhpcmRfcGFydHkvc2tpYS9pbmNsdWRlL3BvcnRzL1NrVHlw
ZWZhY2VfYW5kcm9pZC5oIgotI2luY2x1ZGUgPGFuZHJvaWQvbG9nLmg+Ci0jaW5jbHVkZSA8ZXJy
bm8uaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8
c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4K
LSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgewogCkBAIC01MSw0NiAr
NDQsNiBAQCBjb25zdCBjaGFyIGZvbnRNYWluQ29uZmlnRmlsZVtdID0gREVWSUNFX0RSVF9ESVIg
ImFuZHJvaWRfbWFpbl9mb250cy54bWwiOwogY29uc3QgY2hhciBmb250RmFsbGJhY2tDb25maWdG
aWxlW10gPSBERVZJQ0VfRFJUX0RJUiAiYW5kcm9pZF9mYWxsYmFja19mb250cy54bWwiOwogY29u
c3QgY2hhciBmb250c0RpcltdID0gREVWSUNFX0RSVF9ESVIgImZvbnRzLyI7CiAKLWNvbnN0IGNo
YXIgb3B0aW9uSW5GSUZPW10gPSAiLS1pbi1maWZvPSI7Ci1jb25zdCBjaGFyIG9wdGlvbk91dEZJ
Rk9bXSA9ICItLW91dC1maWZvPSI7Ci1jb25zdCBjaGFyIG9wdGlvbkVyckZJRk9bXSA9ICItLWVy
ci1maWZvPSI7Ci0KLXZvaWQgYW5kcm9pZExvZ0Vycm9yKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4u
KSBXVEZfQVRUUklCVVRFX1BSSU5URigxLCAyKTsKLQotdm9pZCBhbmRyb2lkTG9nRXJyb3IoY29u
c3QgY2hhciogZm9ybWF0LCAuLi4pCi17Ci0gICAgdmFfbGlzdCBhcmdzOwotICAgIHZhX3N0YXJ0
KGFyZ3MsIGZvcm1hdCk7Ci0gICAgX19hbmRyb2lkX2xvZ192cHJpbnQoQU5EUk9JRF9MT0dfRVJS
T1IsICJEdW1wUmVuZGVyVHJlZSIsIGZvcm1hdCwgYXJncyk7Ci0gICAgdmFfZW5kKGFyZ3MpOwot
fQotCi12b2lkIHJlbW92ZUFyZyhpbnQgaW5kZXgsIGludCogYXJnYywgY2hhcioqKiBhcmd2KQot
ewotICAgIGZvciAoaW50IGkgPSBpbmRleDsgaSA8ICphcmdjOyArK2kpCi0gICAgICAgICgqYXJn
dilbaV0gPSAoKmFyZ3YpW2kgKyAxXTsKLSAgICAtLSphcmdjOwotfQotCi12b2lkIGNyZWF0ZUZJ
Rk8oY29uc3QgY2hhciogZmlmb1BhdGgpCi17Ci0gICAgdW5saW5rKGZpZm9QYXRoKTsKLSAgICAv
LyAwNjY2IGlzIHJ3LXJ3LXJ3LSwgdG8gYWxsb3cgYWRiIHNoZWxsIHRvIHJlYWQvd3JpdGUgdGhl
IGZpZm8uCi0gICAgLy8gRXhwbGljaXRseSBjYWxsIGNobW9kIHRvIGVuc3VyZSB0aGUgbW9kZSBp
cyBzZXQgZGVzcGl0ZSB1bWFzay4KLSAgICBpZiAobWtmaWZvKGZpZm9QYXRoLCAwNjY2KSB8fCBj
aG1vZChmaWZvUGF0aCwgMDY2NikpIHsKLSAgICAgICAgYW5kcm9pZExvZ0Vycm9yKCJGYWlsZWQg
dG8gY3JlYXRlIGZpZm8gJXM6ICVzXG4iLCBmaWZvUGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKLSAg
ICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLX0KLQotdm9pZCByZWRpcmVjdChGSUxF
KiBzdHJlYW0sIGNvbnN0IGNoYXIqIHBhdGgsIGNvbnN0IGNoYXIqIG1vZGUpCi17Ci0gICAgaWYg
KCFmcmVvcGVuKHBhdGgsIG1vZGUsIHN0cmVhbSkpIHsKLSAgICAgICAgYW5kcm9pZExvZ0Vycm9y
KCJGYWlsZWQgdG8gcmVkaXJlY3Qgc3RyZWFtIHRvIGZpbGU6ICVzOiAlc1xuIiwgcGF0aCwgc3Ry
ZXJyb3IoZXJybm8pKTsKLSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgIH0KLX0KLQog
fSAvLyBuYW1lc3BhY2UKIAogdm9pZCBwbGF0Zm9ybUluaXQoaW50KiBhcmdjLCBjaGFyKioqIGFy
Z3YpCkBAIC05OCwzOCArNTEsOCBAQCB2b2lkIHBsYXRmb3JtSW5pdChpbnQqIGFyZ2MsIGNoYXIq
KiogYXJndikKICAgICAvLyBJbml0aWFsaXplIHNraWEgd2l0aCBjdXN0b21pemVkIGZvbnQgY29u
ZmlnIGZpbGVzLgogICAgIFNrVXNlVGVzdEZvbnRDb25maWdGaWxlKGZvbnRNYWluQ29uZmlnRmls
ZSwgZm9udEZhbGxiYWNrQ29uZmlnRmlsZSwgZm9udHNEaXIpOwogCi0gICAgY29uc3QgY2hhciog
aW5GSUZPID0gMDsKLSAgICBjb25zdCBjaGFyKiBvdXRGSUZPID0gMDsKLSAgICBjb25zdCBjaGFy
KiBlcnJGSUZPID0gMDsKLSAgICBmb3IgKGludCBpID0gMTsgaSA8ICphcmdjOyApIHsKLSAgICAg
ICAgY29uc3QgY2hhciogYXJndW1lbnQgPSAoKmFyZ3YpW2ldOwotICAgICAgICBpZiAoc3Ryc3Ry
KGFyZ3VtZW50LCBvcHRpb25JbkZJRk8pID09IGFyZ3VtZW50KSB7Ci0gICAgICAgICAgICBpbkZJ
Rk8gPSBhcmd1bWVudCArIFdURl9BUlJBWV9MRU5HVEgob3B0aW9uSW5GSUZPKSAtIDE7Ci0gICAg
ICAgICAgICBjcmVhdGVGSUZPKGluRklGTyk7Ci0gICAgICAgICAgICByZW1vdmVBcmcoaSwgYXJn
YywgYXJndik7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3Ryc3RyKGFyZ3VtZW50LCBvcHRpb25PdXRG
SUZPKSA9PSBhcmd1bWVudCkgewotICAgICAgICAgICAgb3V0RklGTyA9IGFyZ3VtZW50ICsgV1RG
X0FSUkFZX0xFTkdUSChvcHRpb25PdXRGSUZPKSAtIDE7Ci0gICAgICAgICAgICBjcmVhdGVGSUZP
KG91dEZJRk8pOwotICAgICAgICAgICAgcmVtb3ZlQXJnKGksIGFyZ2MsIGFyZ3YpOwotICAgICAg
ICB9IGVsc2UgaWYgKHN0cnN0cihhcmd1bWVudCwgb3B0aW9uRXJyRklGTykgPT0gYXJndW1lbnQp
IHsKLSAgICAgICAgICAgIGVyckZJRk8gPSBhcmd1bWVudCArIFdURl9BUlJBWV9MRU5HVEgob3B0
aW9uRXJyRklGTykgLSAxOwotICAgICAgICAgICAgY3JlYXRlRklGTyhlcnJGSUZPKTsKLSAgICAg
ICAgICAgIHJlbW92ZUFyZyhpLCBhcmdjLCBhcmd2KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICArK2k7Ci0gICAgfQotCi0gICAgLy8gVGhlIG9yZGVyIG9mIGNyZWF0ZUZJRk8oKSBhbmQg
cmVkaXJlY3RUb0ZJRk8oKSBpcyBpbXBvcnRhbnQgdG8gYXZvaWQgZGVhZGxvY2suCi0gICAgaWYg
KG91dEZJRk8pCi0gICAgICAgIHJlZGlyZWN0KHN0ZG91dCwgb3V0RklGTywgInciKTsKLSAgICBp
ZiAoaW5GSUZPKQotICAgICAgICByZWRpcmVjdChzdGRpbiwgaW5GSUZPLCAiciIpOwotICAgIGlm
IChlcnJGSUZPKQotICAgICAgICByZWRpcmVjdChzdGRlcnIsIGVyckZJRk8sICJ3Iik7Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIC8vIFJlZGlyZWN0IHN0ZGVyciB0byBzdGRvdXQuCi0gICAgICAgIGR1
cDIoMSwgMik7Ci0gICAgfQorICAgIC8vIFNldCB1cCBJTyBzdHJlYW0gZm9yd2FyZGluZyBpZiBu
ZWNlc3NhcnkuCisgICAgV2ViS2l0OjptYXliZUluaXRJT1N0cmVhbUZvcndhcmRpbmdGb3JBbmRy
b2lkKGFyZ2MsIGFyZ3YpOwogCiAgICAgLy8gRGlzYWJsZSBhdXRvIGhpbnQgYW5kIHVzZSBub3Jt
YWwgaGludGluZyBpbiBsYXlvdXQgdGVzdCBtb2RlIHRvIHByb2R1Y2UgdGhlIHNhbWUgZm9udCBt
ZXRyaWNzIGFzIGNocm9taXVtLWxpbnV4LgogICAgIFdlYktpdDo6V2ViRm9udFJlbmRlcmluZzo6
c2V0QXV0b0hpbnQoZmFsc2UpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
V2ViS2l0QVBJLmd5cC9UZXN0V2ViS2l0QVBJLmd5cCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dFdlYktpdEFQSS5neXAvVGVzdFdlYktpdEFQSS5neXAKaW5kZXggMjhlODJhYzA3MWQ2MGU0ZjRh
NDZlNmY3ZWUyMDk5YjNiNjQ5ZDkxZS4uMzZlMzBlYWE0NjU1YjhkZTA1MjBmYjg5MzUyYjU5ZTJj
N2IxZDk4YSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLmd5
cC9UZXN0V2ViS2l0QVBJLmd5cAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRB
UEkuZ3lwL1Rlc3RXZWJLaXRBUEkuZ3lwCkBAIC04Nyw2ICs4Nyw3IEBACiAgICAgICAgICAgICAg
ICAgICAgICd0eXBlJzogJ3NoYXJlZF9saWJyYXJ5JywKICAgICAgICAgICAgICAgICAgICAgJ2Rl
cGVuZGVuY2llcyc6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19k
aXIpL3Rlc3RpbmcvYW5kcm9pZC9uYXRpdmVfdGVzdC5neXA6bmF0aXZlX3Rlc3RfbmF0aXZlX2Nv
ZGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgJzwoc291cmNlX2RpcikvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdFVuaXRUZXN0cy5neXA6aW9fc3RyZWFtX2ZvcndhcmRlcl9hbmRyb2lkJywKICAg
ICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgIF0s
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>