<?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>38492</bug_id>
          
          <creation_ts>2010-05-03 15:18:23 -0700</creation_ts>
          <short_desc>CG implementation needed for compression quality in canvas.toDataURL</short_desc>
          <delta_ts>2010-06-04 04:52:59 -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>Mac</rep_platform>
          <op_sys>OS X 10.5</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>37304</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Matthew Delaney">mdelaney7</reporter>
          <assigned_to name="Matthew Delaney">mdelaney7</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>220322</commentid>
    <comment_count>0</comment_count>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2010-05-03 15:18:23 -0700</bug_when>
    <thetext>CG implementation is needed to incorporate compression quality for jpeg in canvas.toDataURL

HTML5 draft spec says implementation shall support quality parameter in canvas.toDataURL(type, quality, ...) when the type is image/jpeg. Support for this is needed by CG.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232913</commentid>
    <comment_count>1</comment_count>
      <attachid>57583</attachid>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2010-06-01 12:50:07 -0700</bug_when>
    <thetext>Created attachment 57583
Patch implements CG support for quality param in toDataURL canvas feature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232953</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-01 14:19:20 -0700</bug_when>
    <thetext>Attachment 57583 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/ChangeLog:5:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 1 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232966</commentid>
    <comment_count>3</comment_count>
      <attachid>57583</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-01 15:15:43 -0700</bug_when>
    <thetext>Comment on attachment 57583
Patch implements CG support for quality param in toDataURL canvas feature.

Looks good.

&gt; +	Fix for 38492. Added CG implementation to support quality parameter in canvas toDataURL().

This has a tab character.

The reference to the bug should be a bug URL not just the bug number.

&gt; +
&gt; +        * bindings/js/JSHTMLCanvasElementCustom.cpp:
&gt; +        (WebCore::JSHTMLCanvasElement::toDataURL):
&gt; +        * dom/CanvasSurface.h:
&gt; +        (WebCore::CanvasSurface::toDataURL):
&gt; +        * platform/graphics/ImageBuffer.h:
&gt; +        * platform/graphics/cg/ImageBufferCG.cpp:
&gt; +        (WebCore::jpegUTI):
&gt; +        (WebCore::utiFromMIMEType):
&gt; +        (WebCore::ImageBuffer::toDataURL):

Each file and function should have a short comment explaining the change.

&gt; +#define DEFAULT_QUALITY -1.0

This should be a C++ constant, not a macro. Also, if the name is at the WebCore namespace level (top level), then it needs to be a specific-enough name to stand on its own.

    const double defaultImageCompressionQuality = -1;

I also am surprised that the default quality is -1. The old default was 1. Why the change? The change log should explain this. If the idea is that an explicit quality is optional, I think we should find an explicit way of doing that instead of defining a magic constant. We call that &quot;in-band signaling&quot; and usually try to avoid it. One way to do it would be to make the image quality argument be a &quot;const double*&quot; instead of just double and then we could use a 0 to mean &quot;not specified&quot;.

If you do want to use in-band signaling, I think that NAN is probably a better value to mean &quot;no quality specified&quot;. One advantage of that is that JavaScript code will automatically supply a NAN for any value that is not a number, without any custom bindings.

Did you add code to handle this default quality concept to the other platforms? Or do they already work as-is?

&gt;          void putUnmultipliedImageData(ImageData*, const IntRect&amp; sourceRect, const IntPoint&amp; destPoint);
&gt;          void putPremultipliedImageData(ImageData*, const IntRect&amp; sourceRect, const IntPoint&amp; destPoint);
&gt;  
&gt; -        String toDataURL(const String&amp; mimeType, double quality = 1.0) const;
&gt; +
&gt; +        String toDataURL(const String&amp; mimeType, double quality = DEFAULT_QUALITY) const;

Why are you adding an extra blank line? I suggest omitting that.

&gt; -    CGImageDestinationAddImage(destination.get(), image.get(), 0);
&gt; +    RetainPtr&lt;CFDictionaryRef&gt; dict = 0;

I suggest naming this either &quot;properties&quot; or &quot;imageProperties&quot;. The name &quot;dict&quot; isn&apos;t as good because it&apos;s an abbreviation, not a word, and also naming the data structure is not as useful as naming its purpose.

&gt; +    if (CFEqual(uti.get(), jpegUTI()) &amp;&amp; quality &gt;= 0.0 &amp;&amp; quality &lt;= 1.0) {
&gt; +
&gt; +        // Apply the compression quality to the image destination.
&gt; +        RetainPtr&lt;CFNumberRef&gt; compressionQuality(AdoptCF, CFNumberCreate(kCFAllocatorDefault, kCFNumberDoubleType, &amp;quality));

You should get rid of that extra newline above.

&gt; +        const void* keys[] = { kCGImageDestinationLossyCompressionQuality };
&gt; +        const void* values[] = { compressionQuality.get() };
&gt; +        dict.adoptCF(CFDictionaryCreate(0, keys, values, 1, &amp;kCFTypeDictionaryKeyCallBacks, &amp;kCFTypeDictionaryValueCallBacks));

I suggest you explicitly use the size &quot;1&quot; for these arrays instead of omitting the size. But also, if there&apos;s only a single key and value you don&apos;t actually need an array. This works:

    const void* key = kCGImageDestinationLossyCompressionQuality;
    const void* value = compressionQuality.get();
    imageProperties.adoptCF(CFDictionaryCreate(0, &amp;key, &amp;value, 1, &amp;kCFTypeDictionaryKeyCallBacks, &amp;kCFTypeDictionaryValueCallBacks));

I think those &quot;&amp;&quot; before kCFTypeDictionaryKeyCallBacks and kCFTypeDictionaryValueCallBacks are optional and you should omit them.

I&apos;m going to say review- because I think that you should deal with at least one of the bugs above.

Also, is there any test for this? A bug fix should add a test. A new test, or an existing test that was disabled on Mac before, or an existing test with new success results that before had failure results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233600</commentid>
    <comment_count>4</comment_count>
      <attachid>57732</attachid>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2010-06-02 21:37:53 -0700</bug_when>
    <thetext>Created attachment 57732
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>233606</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-02 22:00:22 -0700</bug_when>
    <thetext>Attachment 57732 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3004009</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234012</commentid>
    <comment_count>6</comment_count>
      <attachid>57838</attachid>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2010-06-03 17:34:19 -0700</bug_when>
    <thetext>Created attachment 57838
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234014</commentid>
    <comment_count>7</comment_count>
      <attachid>57838</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-03 17:59:41 -0700</bug_when>
    <thetext>Comment on attachment 57838
Patch

In the Qt version you don&apos;t do a range check on the quality value passed in. But in the CG version you do. And you removed the checking from the custom binding for toDataURL. This means that the Qt version won&apos;t have range checking any more, but it did before.

review- because you should not regress Qt in this fashion. Otherwise, r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234016</commentid>
    <comment_count>8</comment_count>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2010-06-03 18:04:42 -0700</bug_when>
    <thetext>Opps, good call. Uploading a new patch with that change now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234017</commentid>
    <comment_count>9</comment_count>
      <attachid>57839</attachid>
    <who name="Matthew Delaney">mdelaney7</who>
    <bug_when>2010-06-03 18:09:02 -0700</bug_when>
    <thetext>Created attachment 57839
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234160</commentid>
    <comment_count>10</comment_count>
      <attachid>57839</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-06-04 04:52:53 -0700</bug_when>
    <thetext>Comment on attachment 57839
Patch

Clearing flags on attachment: 57839

Committed r60675: &lt;http://trac.webkit.org/changeset/60675&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234161</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-06-04 04:52:59 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57583</attachid>
            <date>2010-06-01 12:50:07 -0700</date>
            <delta_ts>2010-06-02 21:37:50 -0700</delta_ts>
            <desc>Patch implements CG support for quality param in toDataURL canvas feature.</desc>
            <filename>canvas-toDataURL-quality-CG.patch</filename>
            <type>text/plain</type>
            <size>6552</size>
            <attacher name="Matthew Delaney">mdelaney7</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDQ5OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTAtMDYtMDEgIE1hdHRoZXcgRGVsYW5leSAgPG1kZWxhbmV5QGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworCUZpeCBm
b3IgMzg0OTIuIEFkZGVkIENHIGltcGxlbWVudGF0aW9uIHRvIHN1cHBvcnQgcXVhbGl0eSBwYXJh
bWV0ZXIgaW4gY2FudmFzIHRvRGF0YVVSTCgpLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNI
VE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0hUTUxDYW52
YXNFbGVtZW50Ojp0b0RhdGFVUkwpOgorICAgICAgICAqIGRvbS9DYW52YXNTdXJmYWNlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNTdXJmYWNlOjp0b0RhdGFVUkwpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqcGVnVVRJKToKKyAg
ICAgICAgKFdlYkNvcmU6OnV0aUZyb21NSU1FVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6dG9EYXRhVVJMKToKKwogMjAxMC0wNi0wMSAgQ2hyaXMgRmxlaXphY2ggIDxjZmxl
aXphY2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEJldGggRGFraW4uCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5j
cHAJKHJldmlzaW9uIDYwNDk0KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNF
bGVtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTMgKzg4LDEzIEBAIEpTVmFs
dWUgSlNIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dCgKIEpTVmFsdWUgSlNIVE1MQ2FudmFz
RWxlbWVudDo6dG9EYXRhVVJMKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBjb25zdCBTdHJpbmcm
IHR5cGUgPSB2YWx1ZVRvU3RyaW5nV2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGV4ZWMsIGV4ZWMt
PmFyZ3VtZW50KDApKTsKLSAgICBkb3VibGUgcXVhbGl0eSA9IDEuMDsKKyAgICBkb3VibGUgcXVh
bGl0eSA9IERFRkFVTFRfUVVBTElUWTsKICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4g
MSkgewogICAgICAgICBKU1ZhbHVlIHYgPSBleGVjLT5hcmd1bWVudCgxKTsKICAgICAgICAgaWYg
KHYuaXNOdW1iZXIoKSkKICAgICAgICAgICAgIHF1YWxpdHkgPSB2LnRvTnVtYmVyKGV4ZWMpOwog
ICAgICAgICBpZiAoISgwLjAgPD0gcXVhbGl0eSAmJiBxdWFsaXR5IDw9IDEuMCkpCi0gICAgICAg
ICAgICBxdWFsaXR5ID0gMS4wOworICAgICAgICAgICAgcXVhbGl0eSA9IERFRkFVTFRfUVVBTElU
WTsKICAgICB9CiAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IHN0YXRpY19jYXN0PEhU
TUxDYW52YXNFbGVtZW50Kj4oaW1wbCgpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKSW5k
ZXg6IFdlYkNvcmUvZG9tL0NhbnZhc1N1cmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9DYW52YXNTdXJmYWNlLmgJKHJldmlzaW9uIDYwNDk0KQorKysgV2ViQ29yZS9kb20vQ2FudmFz
U3VyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjZGVmaW5lIENhbnZh
c1N1cmZhY2VfaAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKIApAQCAtNjEsNyArNjIsNyBAQCBwdWJsaWM6CiAKICAgICBTdHJpbmcgdG9EYXRhVVJM
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGRvdWJsZSBxdWFsaXR5LCBFeGNlcHRpb25Db2RlJik7
CiAKLSAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIEV4Y2VwdGlv
bkNvZGUmIGVjKSB7IHJldHVybiB0b0RhdGFVUkwobWltZVR5cGUsIDEuMCwgZWMpOyB9CisgICAg
U3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBFeGNlcHRpb25Db2RlJiBl
YykgeyByZXR1cm4gdG9EYXRhVVJMKG1pbWVUeXBlLCBERUZBVUxUX1FVQUxJVFksIGVjKTsgfQog
CiAgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQogCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCShyZXZpc2lvbiA2MDQ5
NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzYsNiArMzYsOCBAQAogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAorI2RlZmluZSBERUZBVUxUX1FVQUxJVFkgLTEuMAor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CkBAIC04
Myw3ICs4NSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBwdXRVbm11bHRp
cGxpZWRJbWFnZURhdGEoSW1hZ2VEYXRhKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29u
c3QgSW50UG9pbnQmIGRlc3RQb2ludCk7CiAgICAgICAgIHZvaWQgcHV0UHJlbXVsdGlwbGllZElt
YWdlRGF0YShJbWFnZURhdGEqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50KTsKIAotICAgICAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIGRvdWJsZSBxdWFsaXR5ID0gMS4wKSBjb25zdDsKKworICAgICAgICBTdHJp
bmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGRvdWJsZSBxdWFsaXR5ID0gREVG
QVVMVF9RVUFMSVRZKSBjb25zdDsKICNpZiAhUExBVEZPUk0oQ0cpCiAgICAgICAgIEFmZmluZVRy
YW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7
IH0KICAgICAgICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKEltYWdlQ29sb3JTcGFjZSBzcmND
b2xvclNwYWNlLCBJbWFnZUNvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSk7CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAJKHJldmlzaW9uIDYw
NDk0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjUwLDYgKzI1MCwxNCBAQCB2b2lkIEltYWdlQnVmZmVyOjpwdXRQ
cmVtdWx0aXBsaWVkSW1hZ2VECiAgICAgcHV0SW1hZ2VEYXRhPFByZW11bHRpcGxpZWQ+KHNvdXJj
ZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBtX2RhdGEsIG1fc2l6ZSk7CiB9CiAKK3N0YXRpYyBp
bmxpbmUgQ0ZTdHJpbmdSZWYganBlZ1VUSSgpCit7CisjaWYgUExBVEZPUk0oV0lOKQorICAgIHN0
YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlSlBFRyA9IENGU1RSKCJwdWJsaWMuanBlZyIp
OworI2VuZGlmCisgICAgcmV0dXJuIGtVVFR5cGVKUEVHOworfQorICAgIAogc3RhdGljIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gdXRpRnJvbU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUp
CiB7CiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtMjYxLDEzICsyNjksMTIgQEAgc3RhdGljIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gdXRpRnJvbU1JTQogICAgIC8vIEZJWE1FOiBBZGQgV2luZG93cyBz
dXBwb3J0IGZvciBhbGwgdGhlIHN1cHBvcnRlZCBVVElzIHdoZW4gYSB3YXkgdG8gY29udmVydCBm
cm9tIE1JTUVUeXBlIHRvIFVUSSByZWxpYWJseSBpcyBmb3VuZC4KICAgICAvLyBGb3Igbm93LCBv
bmx5IHN1cHBvcnQgUE5HLCBKUEVHLCBhbmQgR0lGLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYwOTUy
ODY+LgogICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlUE5HID0gQ0ZTVFIoInB1
YmxpYy5wbmciKTsKLSAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZUpQRUcgPSBD
RlNUUigicHVibGljLmpwZWciKTsKICAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlw
ZUdJRiA9IENGU1RSKCJjb20uY29tcHVzZXJ2ZS5naWYiKTsKIAogICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShtaW1lVHlwZSwgImltYWdlL3BuZyIpKQogICAgICAgICByZXR1cm4ga1VUVHlwZVBO
RzsKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobWltZVR5cGUsICJpbWFnZS9qcGVnIikpCi0g
ICAgICAgIHJldHVybiBrVVRUeXBlSlBFRzsKKyAgICAgICAgcmV0dXJuIGpwZWdVVEkoKTsKICAg
ICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobWltZVR5cGUsICJpbWFnZS9naWYiKSkKICAgICAgICAg
cmV0dXJuIGtVVFR5cGVHSUY7CiAKQEAgLTI3Niw3ICsyODMsNyBAQCBzdGF0aWMgUmV0YWluUHRy
PENGU3RyaW5nUmVmPiB1dGlGcm9tTUlNCiAjZW5kaWYKIH0KIAotU3RyaW5nIEltYWdlQnVmZmVy
Ojp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgZG91YmxlKSBjb25zdAorU3RyaW5n
IEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgZG91YmxlIHF1
YWxpdHkpIGNvbnN0CiB7CiAgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVk
SW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CiAKQEAgLTI4OCwxMSArMjk1LDI0
IEBAIFN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmkKICAgICBpZiAoIWRh
dGEpCiAgICAgICAgIHJldHVybiAiZGF0YTosIjsKIAotICAgIFJldGFpblB0cjxDR0ltYWdlRGVz
dGluYXRpb25SZWY+IGRlc3RpbmF0aW9uKEFkb3B0Q0YsIENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0
ZVdpdGhEYXRhKGRhdGEuZ2V0KCksIHV0aUZyb21NSU1FVHlwZShtaW1lVHlwZSkuZ2V0KCksIDEs
IDApKTsKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aSA9IHV0aUZyb21NSU1FVHlwZSht
aW1lVHlwZSk7CisgICAgQVNTRVJUKHV0aSk7CisKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZURlc3Rp
bmF0aW9uUmVmPiBkZXN0aW5hdGlvbihBZG9wdENGLCBDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVX
aXRoRGF0YShkYXRhLmdldCgpLCB1dGkuZ2V0KCksIDEsIDApKTsKICAgICBpZiAoIWRlc3RpbmF0
aW9uKQogICAgICAgICByZXR1cm4gImRhdGE6LCI7CiAKLSAgICBDR0ltYWdlRGVzdGluYXRpb25B
ZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwgaW1hZ2UuZ2V0KCksIDApOworICAgIFJldGFpblB0
cjxDRkRpY3Rpb25hcnlSZWY+IGRpY3QgPSAwOworICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwg
anBlZ1VUSSgpKSAmJiBxdWFsaXR5ID49IDAuMCAmJiBxdWFsaXR5IDw9IDEuMCkgeworCisgICAg
ICAgIC8vIEFwcGx5IHRoZSBjb21wcmVzc2lvbiBxdWFsaXR5IHRvIHRoZSBpbWFnZSBkZXN0aW5h
dGlvbi4KKyAgICAgICAgUmV0YWluUHRyPENGTnVtYmVyUmVmPiBjb21wcmVzc2lvblF1YWxpdHko
QWRvcHRDRiwgQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyRG91
YmxlVHlwZSwgJnF1YWxpdHkpKTsKKyAgICAgICAgY29uc3Qgdm9pZCoga2V5c1tdID0geyBrQ0dJ
bWFnZURlc3RpbmF0aW9uTG9zc3lDb21wcmVzc2lvblF1YWxpdHkgfTsKKyAgICAgICAgY29uc3Qg
dm9pZCogdmFsdWVzW10gPSB7IGNvbXByZXNzaW9uUXVhbGl0eS5nZXQoKSB9OworICAgICAgICBk
aWN0LmFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKDAsIGtleXMsIHZhbHVlcywgMSwgJmtDRlR5
cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNr
cykpOworICAgIH0KKworICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9u
LmdldCgpLCBpbWFnZS5nZXQoKSwgZGljdC5nZXQoKSk7CiAgICAgQ0dJbWFnZURlc3RpbmF0aW9u
RmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkpOwogCiAgICAgVmVjdG9yPGNoYXI+IG91dDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57732</attachid>
            <date>2010-06-02 21:37:53 -0700</date>
            <delta_ts>2010-06-03 17:34:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38492-20100602213752.patch</filename>
            <type>text/plain</type>
            <size>14438</size>
            <attacher name="Matthew Delaney">mdelaney7</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDU5NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDQgQEAKKzIwMTAtMDYtMDIgIE1hdHRoZXcgRGVsYW5leSAgPG1kZWxhbmV5QGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDRyBpbXBsZW1lbnRhdGlvbiBuZWVkZWQgZm9yIGNvbXByZXNzaW9uIHF1YWxpdHkgaW4gY2Fu
dmFzLnRvRGF0YVVSTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Mzg0OTIKKworICAgICAgICBUb29rIHRvRGF0YVVSTC5qcGVnLnF1YWxpdHkuYmFzaWMu
aHRtbCB0ZXN0IG9mZiBvZiBTa2lwcGVkIGxpc3QuIFBhc3Nlcy4KKworICAgICAgICBXZW50IHRo
ZSByb3V0ZSBvZiBhdm9pZGluZyBpbi1iYW5kIHNpZ25hbGluZyB0byBmbGFnIHRoZSB1c2Ugb2Yg
YSBxdWFsaXR5IAorICAgICAgICBwYXJhbWV0ZXIgb3Igbm90LiBTbywgaW5zdGVhZCBvZiBzaW1w
bHkgcGFzc2luZyB0aGUgcXVhbGl0eSBkb3duIGFzIGEKKyAgICAgICAgZG91YmxlLCBpbnN0ZWFk
IEkgcGFzcyBhIHJlZmVyZW5jZSB0byB0aGUgcXVhbGl0eSBwYXJhbWV0ZXIgZnJvbSB3aGVyZQor
ICAgICAgICBpdCBjb21lcyBpbiBqdXN0IGFmdGVyIHRoZSBKUyBiaW5kaW5ncy4gVGh1cywgbm8g
bmVlZCBmb3IgYW55IGdsb2JhbAorICAgICAgICBjb25zdGFudHMgdG8gc2lnbmlmeSB3aGVuIHRo
ZSBxdWFsaXR5IGlzIG5vdCBzcGVjaWZpZWQuIFVwZGF0ZWQgdGhlIG90aGVyIAorICAgICAgICBw
bGF0Zm9ybXMgdG8gc3VwcG9ydCB0aGlzIChxdCB3YXMgb24gdGhlIG9ubHkgb25lIGN1cnJlbnRs
eSB3aXRoIGFueQorICAgICAgICBpbXBsZW1lbnRhdGlvbikuIAorCisgICAgICAgICogYmluZGlu
Z3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpK
U0hUTUxDYW52YXNFbGVtZW50Ojp0b0RhdGFVUkwpOgorICAgICAgICAqIGRvbS9DYW52YXNTdXJm
YWNlLmNwcDogVXBkYXRlZCBtZXRob2QgcHJvdG90eXBlLgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzU3VyZmFjZTo6dG9EYXRhVVJMKToKKyAgICAgICAgKiBkb20vQ2FudmFzU3VyZmFjZS5oOiBV
cGRhdGVkIG1ldGhvZCBwcm90b3R5cGUuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdXJmYWNl
Ojp0b0RhdGFVUkwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDogSW1wbGVtZW50ZWQgc3VwcG9y
dCBmb3IgcXVhbGl0eSBwYXJhbWV0ZXIgd2hlbiBqcGVnIE1JTUUgdHlwZSB1c2VkLgorICAgICAg
ICAoV2ViQ29yZTo6anBlZ1VUSSk6CisgICAgICAgIChXZWJDb3JlOjp1dGlGcm9tTUlNRVR5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvRGF0YVVSTCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHA6IFVwZGF0ZWQgcHJv
dG90eXBlIGZvciBjb25zaXN0ZW5jeS4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0
b0RhdGFVUkwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQu
Y3BwOiBVcGRhdGVkIHByb3RvdHlwZSBmb3IgY29uc2lzdGVuY3kuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0ltYWdlQnVmZmVyU2tpYS5jcHA6IFVwZGF0ZWQgcHJvdG90eXBlIGZvciBjb25zaXN0ZW5j
eS4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0b0RhdGFVUkwpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luY2UuY3BwOiBVcGRhdGVkIHBy
b3RvdHlwZSBmb3IgY29uc2lzdGVuY3kuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
dG9EYXRhVVJMKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4
LmNwcDogVXBkYXRlZCBwcm90b3R5cGUgZm9yIGNvbnNpc3RlbmN5LgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OnRvRGF0YVVSTCk6CisKIDIwMTAtMDYtMDIgIE5pY28gV2ViZXIgIDx0
aGFraXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEZyYXNlci4K
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3Vz
dG9tLmNwcAkocmV2aXNpb24gNjA1ODUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENh
bnZhc0VsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxNyArODgsMjEgQEAg
SlNWYWx1ZSBKU0hUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0KAogSlNWYWx1ZSBKU0hUTUxD
YW52YXNFbGVtZW50Ojp0b0RhdGFVUkwoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGNvbnN0IFN0
cmluZyYgdHlwZSA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soZXhlYywg
ZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIGRvdWJsZSBxdWFsaXR5ID0gMS4wOworICAgIEhUTUxD
YW52YXNFbGVtZW50KiBjYW52YXMgPSBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxlbWVudCo+KGlt
cGwoKSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgCisgICAgSlNDOjpKU1ZhbHVl
IHJlc3VsdDsKKyAgICBkb3VibGUgcXVhbGl0eTsKKyAgICBkb3VibGUqIHF1YWxpdHlQdHIgPSAw
OwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAxKSB7CiAgICAgICAgIEpTVmFsdWUg
diA9IGV4ZWMtPmFyZ3VtZW50KDEpOwotICAgICAgICBpZiAodi5pc051bWJlcigpKQorICAgICAg
ICBpZiAodi5pc051bWJlcigpKSB7CiAgICAgICAgICAgICBxdWFsaXR5ID0gdi50b051bWJlcihl
eGVjKTsKLSAgICAgICAgaWYgKCEoMC4wIDw9IHF1YWxpdHkgJiYgcXVhbGl0eSA8PSAxLjApKQot
ICAgICAgICAgICAgcXVhbGl0eSA9IDEuMDsKKyAgICAgICAgICAgIHF1YWxpdHlQdHIgPSAmcXVh
bGl0eTsKKyAgICAgICAgfQogICAgIH0KLSAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0g
c3RhdGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPihpbXBsKCkpOwotICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwotICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZyhleGVjLCBjYW52
YXMtPnRvRGF0YVVSTCh0eXBlLCBxdWFsaXR5LCBlYykpOworICAgIAorICAgIHJlc3VsdCA9IGpz
U3RyaW5nKGV4ZWMsIGNhbnZhcy0+dG9EYXRhVVJMKHR5cGUsIHF1YWxpdHlQdHIsIGVjKSk7CiAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRl
eDogV2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vQ2FudmFzU3VyZmFjZS5jcHAJKHJldmlzaW9uIDYwNTg1KQorKysgV2ViQ29yZS9kb20vQ2Fu
dmFzU3VyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgdm9pZCBDYW52
YXNTdXJmYWNlOjpzZXRTdXJmYWNlU2l6ZShjb25zdAogICAgIG1faW1hZ2VCdWZmZXIuY2xlYXIo
KTsKIH0KIAotU3RyaW5nIENhbnZhc1N1cmZhY2U6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBkb3VibGUgcXVhbGl0eSwgRXhjZXB0aW9uQ29kZSYgZWMpCitTdHJpbmcgQ2FudmFz
U3VyZmFjZTo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSog
cXVhbGl0eSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKCFtX29yaWdpbkNsZWFuKSB7
CiAgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwpJbmRleDogV2ViQ29yZS9kb20vQ2FudmFzU3Vy
ZmFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NhbnZhc1N1cmZhY2UuaAkocmV2aXNp
b24gNjA1ODUpCisrKyBXZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDkgKzU5LDggQEAgcHVibGljOgogICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2l6ZS53aWR0aCgpOyB9CiAgICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZS5oZWlnaHQoKTsgfQogCi0gICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBkb3VibGUgcXVhbGl0eSwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgU3RyaW5nIHRvRGF0
YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4g
dG9EYXRhVVJMKG1pbWVUeXBlLCAxLjAsIGVjKTsgfQorICAgIFN0cmluZyB0b0RhdGFVUkwoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5LCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBFeGNlcHRp
b25Db2RlJiBlYykgeyByZXR1cm4gdG9EYXRhVVJMKG1pbWVUeXBlLCAwLCBlYyk7IH0KIAogICAg
IGNvbnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KIApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAkocmV2aXNpb24gNjA1ODUpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDcgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEludFBvaW50
OwogICAgIGNsYXNzIEludFJlY3Q7CiAgICAgY2xhc3MgU3RyaW5nOwotCisgICAgCiAgICAgZW51
bSBJbWFnZUNvbG9yU3BhY2UgewogICAgICAgICBVbmtub3duLAogICAgICAgICBEZXZpY2VSR0Is
IC8vIGxpa2Ugc1JHQgpAQCAtODIsOCArODIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICAgICAgdm9pZCBwdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VEYXRhKiwgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCk7CiAgICAgICAgIHZv
aWQgcHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbWFnZURhdGEqLCBjb25zdCBJbnRSZWN0JiBz
b3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KTsKLQotICAgICAgICBTdHJpbmcg
dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGRvdWJsZSBxdWFsaXR5ID0gMS4wKSBj
b25zdDsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5ID0gMCkgY29uc3Q7CiAjaWYgIVBMQVRGT1JN
KENHKQogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0
dXJuIEFmZmluZVRyYW5zZm9ybSgpOyB9CiAgICAgICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFj
ZShJbWFnZUNvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgSW1hZ2VDb2xvclNwYWNlIGRzdENvbG9y
U3BhY2UpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCShyZXZpc2lvbiA2MDU4NSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4NCw3ICsyODQsNyBAQCBzdGF0aWMgY2Fpcm9fc3RhdHVzX3Qgd3JpdGVGdW5jdGlvbih2b2lk
CiAgICAgcmV0dXJuIENBSVJPX1NUQVRVU19TVUNDRVNTOwogfQogCi1TdHJpbmcgSW1hZ2VCdWZm
ZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBkb3VibGUpIGNvbnN0CitTdHJp
bmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBk
b3VibGUqKSBjb25zdAogewogICAgIGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UgPSBjYWlyb19nZXRf
dGFyZ2V0KGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOwogICAgIGlmICghaW1hZ2UpCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAJ
KHJldmlzaW9uIDYwNTg1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUwLDYgKzI1MCwxNCBAQCB2b2lkIEltYWdl
QnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VECiAgICAgcHV0SW1hZ2VEYXRhPFByZW11bHRp
cGxpZWQ+KHNvdXJjZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBtX2RhdGEsIG1fc2l6ZSk7CiB9
CiAKK3N0YXRpYyBpbmxpbmUgQ0ZTdHJpbmdSZWYganBlZ1VUSSgpCit7CisjaWYgUExBVEZPUk0o
V0lOKQorICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlSlBFRyA9IENGU1RSKCJw
dWJsaWMuanBlZyIpOworI2VuZGlmCisgICAgcmV0dXJuIGtVVFR5cGVKUEVHOworfQorICAgIAog
c3RhdGljIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXRpRnJvbU1JTUVUeXBlKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpCiB7CiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtMjYxLDEzICsyNjksMTIgQEAg
c3RhdGljIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXRpRnJvbU1JTQogICAgIC8vIEZJWE1FOiBB
ZGQgV2luZG93cyBzdXBwb3J0IGZvciBhbGwgdGhlIHN1cHBvcnRlZCBVVElzIHdoZW4gYSB3YXkg
dG8gY29udmVydCBmcm9tIE1JTUVUeXBlIHRvIFVUSSByZWxpYWJseSBpcyBmb3VuZC4KICAgICAv
LyBGb3Igbm93LCBvbmx5IHN1cHBvcnQgUE5HLCBKUEVHLCBhbmQgR0lGLiBTZWUgPHJkYXI6Ly9w
cm9ibGVtLzYwOTUyODY+LgogICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlUE5H
ID0gQ0ZTVFIoInB1YmxpYy5wbmciKTsKLSAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VU
VHlwZUpQRUcgPSBDRlNUUigicHVibGljLmpwZWciKTsKICAgICBzdGF0aWMgY29uc3QgQ0ZTdHJp
bmdSZWYga1VUVHlwZUdJRiA9IENGU1RSKCJjb20uY29tcHVzZXJ2ZS5naWYiKTsKIAogICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShtaW1lVHlwZSwgImltYWdlL3BuZyIpKQogICAgICAgICByZXR1
cm4ga1VUVHlwZVBORzsKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobWltZVR5cGUsICJpbWFn
ZS9qcGVnIikpCi0gICAgICAgIHJldHVybiBrVVRUeXBlSlBFRzsKKyAgICAgICAgcmV0dXJuIGpw
ZWdVVEkoKTsKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobWltZVR5cGUsICJpbWFnZS9naWYi
KSkKICAgICAgICAgcmV0dXJuIGtVVFR5cGVHSUY7CiAKQEAgLTI3Niw3ICsyODMsNyBAQCBzdGF0
aWMgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlGcm9tTUlNCiAjZW5kaWYKIH0KIAotU3RyaW5n
IEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgZG91YmxlKSBj
b25zdAorU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5KSBjb25zdAogewogICAgIEFTU0VSVChNSU1FVHlwZVJl
Z2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwog
CkBAIC0yODgsMTEgKzI5NSwyMyBAQCBTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25z
dCBTdHJpCiAgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm4gImRhdGE6LCI7CiAKLSAgICBS
ZXRhaW5QdHI8Q0dJbWFnZURlc3RpbmF0aW9uUmVmPiBkZXN0aW5hdGlvbihBZG9wdENGLCBDR0lt
YWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShkYXRhLmdldCgpLCB1dGlGcm9tTUlNRVR5cGUo
bWltZVR5cGUpLmdldCgpLCAxLCAwKSk7CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGkg
PSB1dGlGcm9tTUlNRVR5cGUobWltZVR5cGUpOworICAgIEFTU0VSVCh1dGkpOworCisgICAgUmV0
YWluUHRyPENHSW1hZ2VEZXN0aW5hdGlvblJlZj4gZGVzdGluYXRpb24oQWRvcHRDRiwgQ0dJbWFn
ZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YS5nZXQoKSwgdXRpLmdldCgpLCAxLCAwKSk7
CiAgICAgaWYgKCFkZXN0aW5hdGlvbikKICAgICAgICAgcmV0dXJuICJkYXRhOiwiOwogCi0gICAg
Q0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRpb24uZ2V0KCksIGltYWdlLmdldCgp
LCAwKTsKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFnZVByb3BlcnRpZXMgPSAw
OworICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VUSSgpKSAmJiBxdWFsaXR5ICYmICpx
dWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKKyAgICAgICAgLy8gQXBwbHkgdGhl
IGNvbXByZXNzaW9uIHF1YWxpdHkgdG8gdGhlIGltYWdlIGRlc3RpbmF0aW9uLgorICAgICAgICBS
ZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IGNvbXByZXNzaW9uUXVhbGl0eShBZG9wdENGLCBDRk51bWJl
ckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJEb3VibGVUeXBlLCBxdWFsaXR5
KSk7CisgICAgICAgIGNvbnN0IHZvaWQqIGtleSA9IGtDR0ltYWdlRGVzdGluYXRpb25Mb3NzeUNv
bXByZXNzaW9uUXVhbGl0eTsKKyAgICAgICAgY29uc3Qgdm9pZCogdmFsdWUgPSBjb21wcmVzc2lv
blF1YWxpdHkuZ2V0KCk7CisgICAgICAgIGltYWdlUHJvcGVydGllcy5hZG9wdENGKENGRGljdGlv
bmFyeUNyZWF0ZSgwLCAma2V5LCAmdmFsdWUsIDEsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxC
YWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAgICB9CisKKyAgICBD
R0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwgaW1hZ2UuZ2V0KCks
IGltYWdlUHJvcGVydGllcy5nZXQoKSk7CiAgICAgQ0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUo
ZGVzdGluYXRpb24uZ2V0KCkpOwogCiAgICAgVmVjdG9yPGNoYXI+IG91dDsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1LmNw
cAkocmV2aXNpb24gNjA1ODUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0lt
YWdlQnVmZmVySGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTAsNyArMzEwLDcgQEAgdm9p
ZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZEltYWdlRAogICAgIHB1dEltYWdlRGF0YShz
b3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RQb2ludCwgbV9kYXRhLCBtX3NpemUsIHRydWUpOwogfQog
Ci1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBk
b3VibGUpIGNvbnN0CitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBjb25zdCBkb3VibGUqKSBjb25zdAogewogICAgIGlmICghTUlNRVR5cGVSZWdp
c3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKQogICAg
ICAgICByZXR1cm4gImRhdGE6LCI7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0ltYWdlQnVmZmVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAJKHJldmlzaW9uIDYwNTg1KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc2
LDEwICsyNzYsOSBAQCB2b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VECiAv
LyBXZSBnZXQgYSBtaW1lVHlwZSBoZXJlIGJ1dCBRSW1hZ2VXcml0ZXIgZG9lcyBub3Qgc3VwcG9y
dCBtaW1ldHlwZXMgYnV0CiAvLyBvbmx5IGZvcm1hdHMgKHBuZywgZ2lmLCBqcGVnLi4uLCB4cG0p
LiBTbyBhc3N1bWUgd2UgZ2V0IGltYWdlLyBhcyBpbWFnZQogLy8gbWltZXR5cGVzIGFuZCB0aGVu
IHJlbW92ZSB0aGUgaW1hZ2UvIHRvIGdldCB0aGUgUXQgZm9ybWF0LgotU3RyaW5nIEltYWdlQnVm
ZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgZG91YmxlIHF1YWxpdHkpIGNv
bnN0CitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBjb25zdCBkb3VibGUqIHF1YWxpdHkpIGNvbnN0CiB7CiAgICAgQVNTRVJUKE1JTUVUeXBlUmVn
aXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0g
ICAgQVNTRVJUKDAuMCA8PSBxdWFsaXR5ICYmIHF1YWxpdHkgPD0gMS4wKTsKIAogICAgIGlmICgh
bWltZVR5cGUuc3RhcnRzV2l0aCgiaW1hZ2UvIikpCiAgICAgICAgIHJldHVybiAiZGF0YTosIjsK
QEAgLTI4OSw5ICsyODgsMTYgQEAgU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3Qg
U3RyaQogICAgIFFCdWZmZXIgYnVmZmVyKCZkYXRhKTsKICAgICBidWZmZXIub3BlbihRQnVmZmVy
OjpXcml0ZU9ubHkpOwogCi0gICAgaWYgKCFtX2RhdGEubV9waXhtYXAuc2F2ZSgmYnVmZmVyLCBt
aW1lVHlwZS5zdWJzdHJpbmcoc2l6ZW9mICJpbWFnZSIpLnV0ZjgoKS5kYXRhKCksIHF1YWxpdHkg
KiAxMDAgKyAwLjUpKSB7Ci0gICAgICAgIGJ1ZmZlci5jbG9zZSgpOwotICAgICAgICByZXR1cm4g
ImRhdGE6LCI7CisgICAgaWYgKHF1YWxpdHkpIHsKKyAgICAgICAgaWYgKCFtX2RhdGEubV9waXht
YXAuc2F2ZSgmYnVmZmVyLCBtaW1lVHlwZS5zdWJzdHJpbmcoc2l6ZW9mICJpbWFnZSIpLnV0Zjgo
KS5kYXRhKCksICpxdWFsaXR5ICogMTAwICsgMC41KSkgeworICAgICAgICAgICAgYnVmZmVyLmNs
b3NlKCk7CisgICAgICAgICAgICByZXR1cm4gImRhdGE6LCI7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICBpZiAoIW1fZGF0YS5tX3BpeG1hcC5zYXZlKCZidWZmZXIsIG1pbWVUeXBl
LnN1YnN0cmluZyhzaXplb2YgImltYWdlIikudXRmOCgpLmRhdGEoKSwgMTAwKSkgeworICAgICAg
ICAgICAgYnVmZmVyLmNsb3NlKCk7CisgICAgICAgICAgICByZXR1cm4gImRhdGE6LCI7CisgICAg
ICAgIH0KICAgICB9CiAKICAgICBidWZmZXIuY2xvc2UoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCShyZXZpc2lvbiA2
MDU4NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNyArMjYxLDcgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6
cHV0UHJlbXVsdGlwbGllZEltYWdlRAogICAgIHB1dEltYWdlRGF0YTxQcmVtdWx0aXBsaWVkPihz
b3VyY2UsIHNvdXJjZVJlY3QsIGRlc3RQb2ludCwgKmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0
KCktPmJpdG1hcCgpLCBtX3NpemUpOwogfQogCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVS
TChjb25zdCBTdHJpbmcmLCBkb3VibGUpIGNvbnN0CitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0
YVVSTChjb25zdCBTdHJpbmcmLCBjb25zdCBkb3VibGUqKSBjb25zdAogewogICAgIC8vIEVuY29k
ZSB0aGUgaW1hZ2UgaW50byBhIHZlY3Rvci4KICAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gcG5n
RW5jb2RlZERhdGE7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdl
QnVmZmVyV2luY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luY2UvSW1hZ2VCdWZmZXJXaW5jZS5jcHAJKHJldmlzaW9uIDYwNTg1KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbmNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjE2LDcgKzIxNiw3IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJ
bWFnZUQKICAgICBwdXRJbWFnZURhdGE8dHJ1ZT4oc291cmNlLCBzb3VyY2VSZWN0LCBkZXN0UG9p
bnQsIG1fZGF0YS5tX2JpdG1hcC5nZXQoKSk7CiB9CiAKLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9E
YXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGRvdWJsZSkgY29uc3QKK1N0cmluZyBJbWFn
ZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSop
IGNvbnN0CiB7CiAgICAgaWYgKCFtX2RhdGEubV9iaXRtYXAtPmJ5dGVzKCkpCiAgICAgICAgIHJl
dHVybiAiZGF0YTosIjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VC
dWZmZXJXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9J
bWFnZUJ1ZmZlcld4LmNwcAkocmV2aXNpb24gNjA1ODUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3
IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZUQKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogfQogCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJp
bmcmLCBkb3VibGUpIGNvbnN0CitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBT
dHJpbmcmLCBjb25zdCBkb3VibGUqKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAg
ICAgcmV0dXJuIFN0cmluZygpOwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBw
ZWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQJKHJldmlz
aW9uIDYwNTg1KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQJKHdvcmtpbmcg
Y29weSkKQEAgLTI4OSw3ICsyODksNiBAQCBjYW52YXMvcGhpbGlwL3Rlc3RzL3NlY3VyaXR5LnJl
c2V0Lmh0bWwKIGNhbnZhcy9waGlsaXAvdGVzdHMvc2l6ZS5hdHRyaWJ1dGVzLnBhcnNlLm1pbnVz
Lmh0bWwKIGNhbnZhcy9waGlsaXAvdGVzdHMvc2l6ZS5hdHRyaWJ1dGVzLnNldEF0dHJpYnV0ZS5t
aW51cy5odG1sCiBjYW52YXMvcGhpbGlwL3Rlc3RzL3RvRGF0YVVSTC5qcGVnLmFscGhhLmh0bWwK
LWNhbnZhcy9waGlsaXAvdGVzdHMvdG9EYXRhVVJMLmpwZWcucXVhbGl0eS5iYXNpYy5odG1sCiBj
YW52YXMvcGhpbGlwL3Rlc3RzL3R5cGUucHJvdG90eXBlLmh0bWwKIAogIyBJbmRleGVkREIgaXMg
bm90IHlldCBlbmFibGVkLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57838</attachid>
            <date>2010-06-03 17:34:19 -0700</date>
            <delta_ts>2010-06-03 18:08:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38492-20100603173417.patch</filename>
            <type>text/plain</type>
            <size>16089</size>
            <attacher name="Matthew Delaney">mdelaney7</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDY0NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMTAtMDYtMDMgIE1hdHRoZXcgRGVsYW5leSAgPG1kZWxhbmV5QGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDRyBpbXBsZW1lbnRhdGlvbiBuZWVkZWQgZm9yIGNvbXByZXNzaW9uIHF1YWxpdHkgaW4gY2Fu
dmFzLnRvRGF0YVVSTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Mzg0OTIKKworICAgICAgICBUb29rIHRvRGF0YVVSTC5qcGVnLnF1YWxpdHkuYmFzaWMu
aHRtbCB0ZXN0IG9mZiBvZiBTa2lwcGVkIGxpc3QuIFBhc3Nlcy4KKworICAgICAgICBXZW50IHRo
ZSByb3V0ZSBvZiBhdm9pZGluZyBpbi1iYW5kIHNpZ25hbGluZyB0byBmbGFnIHRoZSB1c2Ugb2Yg
YSBxdWFsaXR5IAorICAgICAgICBwYXJhbWV0ZXIgb3Igbm90LiBTbywgaW5zdGVhZCBvZiBzaW1w
bHkgcGFzc2luZyB0aGUgcXVhbGl0eSBkb3duIGFzIGEKKyAgICAgICAgZG91YmxlLCBpbnN0ZWFk
IEkgcGFzcyBhIHJlZmVyZW5jZSB0byB0aGUgcXVhbGl0eSBwYXJhbWV0ZXIgZnJvbSB3aGVyZQor
ICAgICAgICBpdCBjb21lcyBpbiBqdXN0IGFmdGVyIHRoZSBKUyBiaW5kaW5ncy4gVGh1cywgbm8g
bmVlZCBmb3IgYW55IGdsb2JhbAorICAgICAgICBjb25zdGFudHMgdG8gc2lnbmlmeSB3aGVuIHRo
ZSBxdWFsaXR5IGlzIG5vdCBzcGVjaWZpZWQuIFVwZGF0ZWQgdGhlIG90aGVyIAorICAgICAgICBw
bGF0Zm9ybXMgdG8gc3VwcG9ydCB0aGlzIChxdCB3YXMgb24gdGhlIG9ubHkgb25lIGN1cnJlbnRs
eSB3aXRoIGFueQorICAgICAgICBpbXBsZW1lbnRhdGlvbikuIAorCisgICAgICAgICogYmluZGlu
Z3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHA6IE1vdmVkIHJhbmdlIGNoZWNrIGxv
Z2ljIGZvciBxdWFsaXR5IHBhcmFtZXRlciBkb3duIGxvd2VyLiBVcGRhdGVkCisgICAgICAgIGNh
bGwgdG8gdG9EYXRhVVJMIHRvIHVzZSBkb3VibGUqIGluc3RlYWQgb2YganVzdCBwYXNzaW5nIHRo
ZSBxdWFsaXR5IGRpcmVjdGx5LgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MQ2FudmFzRWxlbWVu
dDo6dG9EYXRhVVJMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFz
RWxlbWVudEN1c3RvbS5jcHA6IFVwZGF0ZWQgdG9EYXRhVVJMIGNhbGwgdG8gcGFzcyBkb3VibGUq
CisgICAgICAgIChXZWJDb3JlOjpWOEhUTUxDYW52YXNFbGVtZW50Ojp0b0RhdGFVUkxDYWxsYmFj
ayk6CisgICAgICAgICogZG9tL0NhbnZhc1N1cmZhY2UuY3BwOiBVcGRhdGVkIG1ldGhvZCBwcm90
b3R5cGUuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdXJmYWNlOjp0b0RhdGFVUkwpOgorICAg
ICAgICAqIGRvbS9DYW52YXNTdXJmYWNlLmg6IFVwZGF0ZWQgbWV0aG9kIHByb3RvdHlwZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc1N1cmZhY2U6OnRvRGF0YVVSTCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDogVXBkYXRlZCBtZXRob2Qgc2lnbmF0dXJlIHRv
IHVzZSBkb3VibGUqIGZvciBxdWFsaXR5IHBhcmFtLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwOiBVcGRhdGVkIHByb3RvdHlwZSBmb3IgY29u
c2lzdGVuY3kuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDogSW1wbGVtZW50
ZWQgc3VwcG9ydCBmb3IgcXVhbGl0eSBwYXJhbWV0ZWpyIHdoZW4ganBlZyBNSU1FIHR5cGUgdXNl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmpwZWdVVEkpOgorICAgICAgICAoV2ViQ29yZTo6dXRpRnJv
bU1JTUVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0b0RhdGFVUkwpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwOiBV
cGRhdGVkIHByb3RvdHlwZSBmb3IgY29uc2lzdGVuY3kuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6dG9EYXRhVVJMKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFn
ZUJ1ZmZlclF0LmNwcDogVXBkYXRlZCBwcm90b3R5cGUgZm9yIGNvbnNpc3RlbmN5LgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvRGF0YVVSTCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwOiBVcGRhdGVkIHByb3RvdHlwZSBmb3Ig
Y29uc2lzdGVuY3kuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbmNlLmNwcDog
VXBkYXRlZCBwcm90b3R5cGUgZm9yIGNvbnNpc3RlbmN5LgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OnRvRGF0YVVSTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1h
Z2VCdWZmZXJXeC5jcHA6IFVwZGF0ZWQgcHJvdG90eXBlIGZvciBjb25zaXN0ZW5jeS4KKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0b0RhdGFVUkwpOgorCiAyMDEwLTA2LTAzICBEYW1p
YW4gS2FsZXRhICA8ZGthbGV0YUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQmV0
aCBEYWtpbi4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNF
bGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNjA2NDUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxNyAr
ODgsMjEgQEAgSlNWYWx1ZSBKU0hUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0KAogSlNWYWx1
ZSBKU0hUTUxDYW52YXNFbGVtZW50Ojp0b0RhdGFVUkwoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IGNvbnN0IFN0cmluZyYgdHlwZSA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hl
Y2soZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIGRvdWJsZSBxdWFsaXR5ID0gMS4wOwor
ICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxl
bWVudCo+KGltcGwoKSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgCisgICAgSlND
OjpKU1ZhbHVlIHJlc3VsdDsKKyAgICBkb3VibGUgcXVhbGl0eTsKKyAgICBkb3VibGUqIHF1YWxp
dHlQdHIgPSAwOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAxKSB7CiAgICAgICAg
IEpTVmFsdWUgdiA9IGV4ZWMtPmFyZ3VtZW50KDEpOwotICAgICAgICBpZiAodi5pc051bWJlcigp
KQorICAgICAgICBpZiAodi5pc051bWJlcigpKSB7CiAgICAgICAgICAgICBxdWFsaXR5ID0gdi50
b051bWJlcihleGVjKTsKLSAgICAgICAgaWYgKCEoMC4wIDw9IHF1YWxpdHkgJiYgcXVhbGl0eSA8
PSAxLjApKQotICAgICAgICAgICAgcXVhbGl0eSA9IDEuMDsKKyAgICAgICAgICAgIHF1YWxpdHlQ
dHIgPSAmcXVhbGl0eTsKKyAgICAgICAgfQogICAgIH0KLSAgICBIVE1MQ2FudmFzRWxlbWVudCog
Y2FudmFzID0gc3RhdGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPihpbXBsKCkpOwotICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZyhl
eGVjLCBjYW52YXMtPnRvRGF0YVVSTCh0eXBlLCBxdWFsaXR5LCBlYykpOworICAgIAorICAgIHJl
c3VsdCA9IGpzU3RyaW5nKGV4ZWMsIGNhbnZhcy0+dG9EYXRhVVJMKHR5cGUsIHF1YWxpdHlQdHIs
IGVjKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVu
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhI
VE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDYwNjQ1KQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MQ2Fu
dmFzRWxlbWVuCiAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IFY4SFRNTENhbnZhc0Vs
ZW1lbnQ6OnRvTmF0aXZlKGhvbGRlcik7CiAgICAgU3RyaW5nIHR5cGUgPSB0b1dlYkNvcmVTdHJp
bmcoYXJnc1swXSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgU3RyaW5nIHJlc3Vs
dCA9IGNhbnZhcy0+dG9EYXRhVVJMKHR5cGUsIHF1YWxpdHksIGVjKTsKKyAgICBTdHJpbmcgcmVz
dWx0ID0gY2FudmFzLT50b0RhdGFVUkwodHlwZSwgJnF1YWxpdHksIGVjKTsKICAgICBWOFByb3h5
OjpzZXRET01FeGNlcHRpb24oZWMpOwogICAgIHJldHVybiB2OFN0cmluZ09yVW5kZWZpbmVkKHJl
c3VsdCk7CiB9CkluZGV4OiBXZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNlLmNwcAkocmV2aXNpb24gNjA2NDUpCisrKyBX
ZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUs
NyBAQCB2b2lkIENhbnZhc1N1cmZhY2U6OnNldFN1cmZhY2VTaXplKGNvbnN0CiAgICAgbV9pbWFn
ZUJ1ZmZlci5jbGVhcigpOwogfQogCi1TdHJpbmcgQ2FudmFzU3VyZmFjZTo6dG9EYXRhVVJMKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIGRvdWJsZSBxdWFsaXR5LCBFeGNlcHRpb25Db2RlJiBlYykK
K1N0cmluZyBDYW52YXNTdXJmYWNlOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
Y29uc3QgZG91YmxlKiBxdWFsaXR5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIW1f
b3JpZ2luQ2xlYW4pIHsKICAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CkluZGV4OiBXZWJDb3Jl
L2RvbS9DYW52YXNTdXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ2FudmFzU3Vy
ZmFjZS5oCShyZXZpc2lvbiA2MDY0NSkKKysrIFdlYkNvcmUvZG9tL0NhbnZhc1N1cmZhY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtNTksOSArNTksOCBAQCBwdWJsaWM6CiAgICAgaW50IHdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplLndpZHRoKCk7IH0KICAgICBpbnQgaGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplLmhlaWdodCgpOyB9CiAKLSAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIGRvdWJsZSBxdWFsaXR5LCBFeGNlcHRpb25Db2RlJik7Ci0KLSAg
ICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIEV4Y2VwdGlvbkNvZGUm
IGVjKSB7IHJldHVybiB0b0RhdGFVUkwobWltZVR5cGUsIDEuMCwgZWMpOyB9CisgICAgU3RyaW5n
IHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHks
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiB0b0RhdGFVUkwobWltZVR5cGUsIDAs
IGVjKTsgfQogCiAgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZTsgfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCShyZXZp
c2lvbiA2MDY0NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Y2xhc3MgSW50UG9pbnQ7CiAgICAgY2xhc3MgSW50UmVjdDsKICAgICBjbGFzcyBTdHJpbmc7Ci0K
KyAgICAKICAgICBlbnVtIEltYWdlQ29sb3JTcGFjZSB7CiAgICAgICAgIFVua25vd24sCiAgICAg
ICAgIERldmljZVJHQiwgLy8gbGlrZSBzUkdCCkBAIC04Miw4ICs4Miw4IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgICAgICB2b2lkIHB1dFVubXVsdGlwbGllZEltYWdlRGF0YShJbWFnZURh
dGEqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
KTsKICAgICAgICAgdm9pZCBwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEltYWdlRGF0YSosIGNv
bnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpOwotCi0g
ICAgICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgZG91YmxlIHF1
YWxpdHkgPSAxLjApIGNvbnN0OworICAgICAgICAKKyAgICAgICAgU3RyaW5nIHRvRGF0YVVSTChj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHkgPSAwKSBjb25zdDsK
ICNpZiAhUExBVEZPUk0oQ0cpCiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3Jt
KCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7IH0KICAgICAgICAgdm9pZCB0cmFu
c2Zvcm1Db2xvclNwYWNlKEltYWdlQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBJbWFnZUNvbG9y
U3BhY2UgZHN0Q29sb3JTcGFjZSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAJKHJldmlzaW9uIDYwNjQ1KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjg0LDcgKzI4NCw3IEBAIHN0YXRpYyBjYWlyb19zdGF0dXNfdCB3cml0
ZUZ1bmN0aW9uKHZvaWQKICAgICByZXR1cm4gQ0FJUk9fU1RBVFVTX1NVQ0NFU1M7CiB9CiAKLVN0
cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGRvdWJs
ZSkgY29uc3QKK1N0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIGNvbnN0IGRvdWJsZSopIGNvbnN0CiB7CiAgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFn
ZSA9IGNhaXJvX2dldF90YXJnZXQoY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAg
aWYgKCFpbWFnZSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHLmNwcAkocmV2aXNpb24gNjA2NDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsNiArMjUwLDE0
IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZUQKICAgICBwdXRJbWFn
ZURhdGE8UHJlbXVsdGlwbGllZD4oc291cmNlLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsIG1fZGF0
YSwgbV9zaXplKTsKIH0KIAorc3RhdGljIGlubGluZSBDRlN0cmluZ1JlZiBqcGVnVVRJKCkKK3sK
KyNpZiBQTEFURk9STShXSU4pCisgICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVK
UEVHID0gQ0ZTVFIoInB1YmxpYy5qcGVnIik7CisjZW5kaWYKKyAgICByZXR1cm4ga1VUVHlwZUpQ
RUc7Cit9CisgICAgCiBzdGF0aWMgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlGcm9tTUlNRVR5
cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKICNpZiBQTEFURk9STShNQUMpCkBAIC0yNjEs
MTMgKzI2OSwxMiBAQCBzdGF0aWMgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlGcm9tTUlNCiAg
ICAgLy8gRklYTUU6IEFkZCBXaW5kb3dzIHN1cHBvcnQgZm9yIGFsbCB0aGUgc3VwcG9ydGVkIFVU
SXMgd2hlbiBhIHdheSB0byBjb252ZXJ0IGZyb20gTUlNRVR5cGUgdG8gVVRJIHJlbGlhYmx5IGlz
IGZvdW5kLgogICAgIC8vIEZvciBub3csIG9ubHkgc3VwcG9ydCBQTkcsIEpQRUcsIGFuZCBHSUYu
IFNlZSA8cmRhcjovL3Byb2JsZW0vNjA5NTI4Nj4uCiAgICAgc3RhdGljIGNvbnN0IENGU3RyaW5n
UmVmIGtVVFR5cGVQTkcgPSBDRlNUUigicHVibGljLnBuZyIpOwotICAgIHN0YXRpYyBjb25zdCBD
RlN0cmluZ1JlZiBrVVRUeXBlSlBFRyA9IENGU1RSKCJwdWJsaWMuanBlZyIpOwogICAgIHN0YXRp
YyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlR0lGID0gQ0ZTVFIoImNvbS5jb21wdXNlcnZlLmdp
ZiIpOwogCiAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvcG5nIikp
CiAgICAgICAgIHJldHVybiBrVVRUeXBlUE5HOwogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSht
aW1lVHlwZSwgImltYWdlL2pwZWciKSkKLSAgICAgICAgcmV0dXJuIGtVVFR5cGVKUEVHOworICAg
ICAgICByZXR1cm4ganBlZ1VUSSgpOwogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShtaW1lVHlw
ZSwgImltYWdlL2dpZiIpKQogICAgICAgICByZXR1cm4ga1VUVHlwZUdJRjsKIApAQCAtMjc2LDcg
KzI4Myw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21NSU0KICNlbmRp
ZgogfQogCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBkb3VibGUpIGNvbnN0CitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHkpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5n
KG1pbWVUeXBlKSk7CiAKQEAgLTI4OCwxMSArMjk1LDIzIEBAIFN0cmluZyBJbWFnZUJ1ZmZlcjo6
dG9EYXRhVVJMKGNvbnN0IFN0cmkKICAgICBpZiAoIWRhdGEpCiAgICAgICAgIHJldHVybiAiZGF0
YTosIjsKIAotICAgIFJldGFpblB0cjxDR0ltYWdlRGVzdGluYXRpb25SZWY+IGRlc3RpbmF0aW9u
KEFkb3B0Q0YsIENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGRhdGEuZ2V0KCksIHV0
aUZyb21NSU1FVHlwZShtaW1lVHlwZSkuZ2V0KCksIDEsIDApKTsKKyAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IHV0aSA9IHV0aUZyb21NSU1FVHlwZShtaW1lVHlwZSk7CisgICAgQVNTRVJUKHV0
aSk7CisKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZURlc3RpbmF0aW9uUmVmPiBkZXN0aW5hdGlvbihB
ZG9wdENGLCBDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShkYXRhLmdldCgpLCB1dGku
Z2V0KCksIDEsIDApKTsKICAgICBpZiAoIWRlc3RpbmF0aW9uKQogICAgICAgICByZXR1cm4gImRh
dGE6LCI7CiAKLSAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQo
KSwgaW1hZ2UuZ2V0KCksIDApOworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGltYWdl
UHJvcGVydGllcyA9IDA7CisgICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpICYm
IHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYmICpxdWFsaXR5IDw9IDEuMCkgeworICAgICAg
ICAvLyBBcHBseSB0aGUgY29tcHJlc3Npb24gcXVhbGl0eSB0byB0aGUgaW1hZ2UgZGVzdGluYXRp
b24uCisgICAgICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gY29tcHJlc3Npb25RdWFsaXR5KEFk
b3B0Q0YsIENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckRvdWJs
ZVR5cGUsIHF1YWxpdHkpKTsKKyAgICAgICAgY29uc3Qgdm9pZCoga2V5ID0ga0NHSW1hZ2VEZXN0
aW5hdGlvbkxvc3N5Q29tcHJlc3Npb25RdWFsaXR5OworICAgICAgICBjb25zdCB2b2lkKiB2YWx1
ZSA9IGNvbXByZXNzaW9uUXVhbGl0eS5nZXQoKTsKKyAgICAgICAgaW1hZ2VQcm9wZXJ0aWVzLmFk
b3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKDAsICZrZXksICZ2YWx1ZSwgMSwgJmtDRlR5cGVEaWN0
aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwor
ICAgIH0KKworICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgp
LCBpbWFnZS5nZXQoKSwgaW1hZ2VQcm9wZXJ0aWVzLmdldCgpKTsKICAgICBDR0ltYWdlRGVzdGlu
YXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQoKSk7CiAKICAgICBWZWN0b3I8Y2hhcj4gb3V0
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdl
QnVmZmVySGFpa3UuY3BwCShyZXZpc2lvbiA2MDY0NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMCw3
ICszMTAsNyBAQCB2b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VECiAgICAg
cHV0SW1hZ2VEYXRhKHNvdXJjZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBtX2RhdGEsIG1fc2l6
ZSwgdHJ1ZSk7CiB9CiAKLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIGRvdWJsZSkgY29uc3QKK1N0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJM
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSopIGNvbnN0CiB7CiAgICAgaWYg
KCFNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyht
aW1lVHlwZSkpCiAgICAgICAgIHJldHVybiAiZGF0YTosIjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAkocmV2aXNpb24gNjA2NDUpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNzYsMTAgKzI3Niw5IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRp
cGxpZWRJbWFnZUQKIC8vIFdlIGdldCBhIG1pbWVUeXBlIGhlcmUgYnV0IFFJbWFnZVdyaXRlciBk
b2VzIG5vdCBzdXBwb3J0IG1pbWV0eXBlcyBidXQKIC8vIG9ubHkgZm9ybWF0cyAocG5nLCBnaWYs
IGpwZWcuLi4sIHhwbSkuIFNvIGFzc3VtZSB3ZSBnZXQgaW1hZ2UvIGFzIGltYWdlCiAvLyBtaW1l
dHlwZXMgYW5kIHRoZW4gcmVtb3ZlIHRoZSBpbWFnZS8gdG8gZ2V0IHRoZSBRdCBmb3JtYXQuCi1T
dHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBkb3Vi
bGUgcXVhbGl0eSkgY29uc3QKK1N0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSkgY29uc3QKIHsKICAgICBBU1NF
UlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2Rpbmco
bWltZVR5cGUpKTsKLSAgICBBU1NFUlQoMC4wIDw9IHF1YWxpdHkgJiYgcXVhbGl0eSA8PSAxLjAp
OwogCiAgICAgaWYgKCFtaW1lVHlwZS5zdGFydHNXaXRoKCJpbWFnZS8iKSkKICAgICAgICAgcmV0
dXJuICJkYXRhOiwiOwpAQCAtMjg5LDkgKzI4OCwxNiBAQCBTdHJpbmcgSW1hZ2VCdWZmZXI6OnRv
RGF0YVVSTChjb25zdCBTdHJpCiAgICAgUUJ1ZmZlciBidWZmZXIoJmRhdGEpOwogICAgIGJ1ZmZl
ci5vcGVuKFFCdWZmZXI6OldyaXRlT25seSk7CiAKLSAgICBpZiAoIW1fZGF0YS5tX3BpeG1hcC5z
YXZlKCZidWZmZXIsIG1pbWVUeXBlLnN1YnN0cmluZyhzaXplb2YgImltYWdlIikudXRmOCgpLmRh
dGEoKSwgcXVhbGl0eSAqIDEwMCArIDAuNSkpIHsKLSAgICAgICAgYnVmZmVyLmNsb3NlKCk7Ci0g
ICAgICAgIHJldHVybiAiZGF0YTosIjsKKyAgICBpZiAocXVhbGl0eSkgeworICAgICAgICBpZiAo
IW1fZGF0YS5tX3BpeG1hcC5zYXZlKCZidWZmZXIsIG1pbWVUeXBlLnN1YnN0cmluZyhzaXplb2Yg
ImltYWdlIikudXRmOCgpLmRhdGEoKSwgKnF1YWxpdHkgKiAxMDAgKyAwLjUpKSB7CisgICAgICAg
ICAgICBidWZmZXIuY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAiZGF0YTosIjsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghbV9kYXRhLm1fcGl4bWFwLnNhdmUoJmJ1
ZmZlciwgbWltZVR5cGUuc3Vic3RyaW5nKHNpemVvZiAiaW1hZ2UiKS51dGY4KCkuZGF0YSgpLCAx
MDApKSB7CisgICAgICAgICAgICBidWZmZXIuY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiAi
ZGF0YTosIjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGJ1ZmZlci5jbG9zZSgpOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5j
cHAJKHJldmlzaW9uIDYwNjQ1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0lt
YWdlQnVmZmVyU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2MSw3ICsyNjEsNyBAQCB2b2lk
IEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VECiAgICAgcHV0SW1hZ2VEYXRhPFBy
ZW11bHRpcGxpZWQ+KHNvdXJjZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCAqY29udGV4dCgpLT5w
bGF0Zm9ybUNvbnRleHQoKS0+Yml0bWFwKCksIG1fc2l6ZSk7CiB9CiAKLVN0cmluZyBJbWFnZUJ1
ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYsIGRvdWJsZSkgY29uc3QKK1N0cmluZyBJbWFn
ZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYsIGNvbnN0IGRvdWJsZSopIGNvbnN0CiB7
CiAgICAgLy8gRW5jb2RlIHRoZSBpbWFnZSBpbnRvIGEgdmVjdG9yLgogICAgIFZlY3Rvcjx1bnNp
Z25lZCBjaGFyPiBwbmdFbmNvZGVkRGF0YTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbmNlLmNwcAkocmV2aXNpb24gNjA2NDUp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ltYWdlQnVmZmVyV2luY2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsNyArMjE2LDcgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0
UHJlbXVsdGlwbGllZEltYWdlRAogICAgIHB1dEltYWdlRGF0YTx0cnVlPihzb3VyY2UsIHNvdXJj
ZVJlY3QsIGRlc3RQb2ludCwgbV9kYXRhLm1fYml0bWFwLmdldCgpKTsKIH0KIAotU3RyaW5nIElt
YWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgZG91YmxlKSBjb25z
dAorU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
Y29uc3QgZG91YmxlKikgY29uc3QKIHsKICAgICBpZiAoIW1fZGF0YS5tX2JpdG1hcC0+Ynl0ZXMo
KSkKICAgICAgICAgcmV0dXJuICJkYXRhOiwiOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCShyZXZpc2lvbiA2MDY0NSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZEltYWdl
RAogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRh
VVJMKGNvbnN0IFN0cmluZyYsIGRvdWJsZSkgY29uc3QKK1N0cmluZyBJbWFnZUJ1ZmZlcjo6dG9E
YXRhVVJMKGNvbnN0IFN0cmluZyYsIGNvbnN0IGRvdWJsZSopIGNvbnN0CiB7CiAgICAgbm90SW1w
bGVtZW50ZWQoKTsKICAgICByZXR1cm4gU3RyaW5nKCk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MDY0
NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEy
IEBACisyMDEwLTA2LTAzICBNYXR0aGV3IERlbGFuZXkgIDxtZGVsYW5leUBhcHBsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ0cgaW1wbGVt
ZW50YXRpb24gbmVlZGVkIGZvciBjb21wcmVzc2lvbiBxdWFsaXR5IGluIGNhbnZhcy50b0RhdGFV
UkwKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4NDky
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvU2tpcHBlZDoKKwogMjAxMC0wNi0wMyAgU3RldmUg
QmxvY2sgIDxzdGV2ZWJsb2NrQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWxl
eGV5IFByb3NrdXJ5YWtvdi4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVk
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCShyZXZpc2lv
biA2MDY0NSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9Ta2lwcGVkCSh3b3JraW5nIGNv
cHkpCkBAIC0yODksNyArMjg5LDYgQEAgY2FudmFzL3BoaWxpcC90ZXN0cy9zZWN1cml0eS5yZXNl
dC5odG1sCiBjYW52YXMvcGhpbGlwL3Rlc3RzL3NpemUuYXR0cmlidXRlcy5wYXJzZS5taW51cy5o
dG1sCiBjYW52YXMvcGhpbGlwL3Rlc3RzL3NpemUuYXR0cmlidXRlcy5zZXRBdHRyaWJ1dGUubWlu
dXMuaHRtbAogY2FudmFzL3BoaWxpcC90ZXN0cy90b0RhdGFVUkwuanBlZy5hbHBoYS5odG1sCi1j
YW52YXMvcGhpbGlwL3Rlc3RzL3RvRGF0YVVSTC5qcGVnLnF1YWxpdHkuYmFzaWMuaHRtbAogY2Fu
dmFzL3BoaWxpcC90ZXN0cy90eXBlLnByb3RvdHlwZS5odG1sCiAKICMgSW5kZXhlZERCIGlzIG5v
dCB5ZXQgZW5hYmxlZC4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57839</attachid>
            <date>2010-06-03 18:09:02 -0700</date>
            <delta_ts>2010-06-04 04:52:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38492-20100603180901.patch</filename>
            <type>text/plain</type>
            <size>16127</size>
            <attacher name="Matthew Delaney">mdelaney7</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDY0NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMTAtMDYtMDMgIE1hdHRoZXcgRGVsYW5leSAgPG1kZWxhbmV5QGFw
cGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDRyBpbXBsZW1lbnRhdGlvbiBuZWVkZWQgZm9yIGNvbXByZXNzaW9uIHF1YWxpdHkgaW4gY2Fu
dmFzLnRvRGF0YVVSTAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Mzg0OTIKKworICAgICAgICBUb29rIHRvRGF0YVVSTC5qcGVnLnF1YWxpdHkuYmFzaWMu
aHRtbCB0ZXN0IG9mZiBvZiBTa2lwcGVkIGxpc3QuIFBhc3Nlcy4KKworICAgICAgICBXZW50IHRo
ZSByb3V0ZSBvZiBhdm9pZGluZyBpbi1iYW5kIHNpZ25hbGluZyB0byBmbGFnIHRoZSB1c2Ugb2Yg
YSBxdWFsaXR5IAorICAgICAgICBwYXJhbWV0ZXIgb3Igbm90LiBTbywgaW5zdGVhZCBvZiBzaW1w
bHkgcGFzc2luZyB0aGUgcXVhbGl0eSBkb3duIGFzIGEKKyAgICAgICAgZG91YmxlLCBpbnN0ZWFk
IEkgcGFzcyBhIHJlZmVyZW5jZSB0byB0aGUgcXVhbGl0eSBwYXJhbWV0ZXIgZnJvbSB3aGVyZQor
ICAgICAgICBpdCBjb21lcyBpbiBqdXN0IGFmdGVyIHRoZSBKUyBiaW5kaW5ncy4gVGh1cywgbm8g
bmVlZCBmb3IgYW55IGdsb2JhbAorICAgICAgICBjb25zdGFudHMgdG8gc2lnbmlmeSB3aGVuIHRo
ZSBxdWFsaXR5IGlzIG5vdCBzcGVjaWZpZWQuIFVwZGF0ZWQgdGhlIG90aGVyIAorICAgICAgICBw
bGF0Zm9ybXMgdG8gc3VwcG9ydCB0aGlzIChxdCB3YXMgb24gdGhlIG9ubHkgb25lIGN1cnJlbnRs
eSB3aXRoIGFueQorICAgICAgICBpbXBsZW1lbnRhdGlvbikuIAorCisgICAgICAgICogYmluZGlu
Z3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHA6IE1vdmVkIHJhbmdlIGNoZWNrIGxv
Z2ljIGZvciBxdWFsaXR5IHBhcmFtZXRlciBkb3duIGxvd2VyLiBVcGRhdGVkCisgICAgICAgIGNh
bGwgdG8gdG9EYXRhVVJMIHRvIHVzZSBkb3VibGUqIGluc3RlYWQgb2YganVzdCBwYXNzaW5nIHRo
ZSBxdWFsaXR5IGRpcmVjdGx5LgorICAgICAgICAoV2ViQ29yZTo6SlNIVE1MQ2FudmFzRWxlbWVu
dDo6dG9EYXRhVVJMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFz
RWxlbWVudEN1c3RvbS5jcHA6IFVwZGF0ZWQgdG9EYXRhVVJMIGNhbGwgdG8gcGFzcyBkb3VibGUq
CisgICAgICAgIChXZWJDb3JlOjpWOEhUTUxDYW52YXNFbGVtZW50Ojp0b0RhdGFVUkxDYWxsYmFj
ayk6CisgICAgICAgICogZG9tL0NhbnZhc1N1cmZhY2UuY3BwOiBVcGRhdGVkIG1ldGhvZCBwcm90
b3R5cGUuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdXJmYWNlOjp0b0RhdGFVUkwpOgorICAg
ICAgICAqIGRvbS9DYW52YXNTdXJmYWNlLmg6IFVwZGF0ZWQgbWV0aG9kIHByb3RvdHlwZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc1N1cmZhY2U6OnRvRGF0YVVSTCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDogVXBkYXRlZCBtZXRob2Qgc2lnbmF0dXJlIHRv
IHVzZSBkb3VibGUqIGZvciBxdWFsaXR5IHBhcmFtLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwOiBVcGRhdGVkIHByb3RvdHlwZSBmb3IgY29u
c2lzdGVuY3kuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDogSW1wbGVtZW50
ZWQgc3VwcG9ydCBmb3IgcXVhbGl0eSBwYXJhbWV0ZWpyIHdoZW4ganBlZyBNSU1FIHR5cGUgdXNl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmpwZWdVVEkpOgorICAgICAgICAoV2ViQ29yZTo6dXRpRnJv
bU1JTUVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0b0RhdGFVUkwpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlQnVmZmVySGFpa3UuY3BwOiBV
cGRhdGVkIHByb3RvdHlwZSBmb3IgY29uc2lzdGVuY3kuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6dG9EYXRhVVJMKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFn
ZUJ1ZmZlclF0LmNwcDogVXBkYXRlZCBwcm90b3R5cGUgZm9yIGNvbnNpc3RlbmN5LgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRvRGF0YVVSTCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwOiBVcGRhdGVkIHByb3RvdHlwZSBmb3Ig
Y29uc2lzdGVuY3kuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZlcldpbmNlLmNwcDog
VXBkYXRlZCBwcm90b3R5cGUgZm9yIGNvbnNpc3RlbmN5LgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OnRvRGF0YVVSTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1h
Z2VCdWZmZXJXeC5jcHA6IFVwZGF0ZWQgcHJvdG90eXBlIGZvciBjb25zaXN0ZW5jeS4KKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0b0RhdGFVUkwpOgorCiAyMDEwLTA2LTAzICBEYW1p
YW4gS2FsZXRhICA8ZGthbGV0YUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQmV0
aCBEYWtpbi4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNF
bGVtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gNjA2NDUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxNyAr
ODgsMjEgQEAgSlNWYWx1ZSBKU0hUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0KAogSlNWYWx1
ZSBKU0hUTUxDYW52YXNFbGVtZW50Ojp0b0RhdGFVUkwoRXhlY1N0YXRlKiBleGVjKQogewogICAg
IGNvbnN0IFN0cmluZyYgdHlwZSA9IHZhbHVlVG9TdHJpbmdXaXRoVW5kZWZpbmVkT3JOdWxsQ2hl
Y2soZXhlYywgZXhlYy0+YXJndW1lbnQoMCkpOwotICAgIGRvdWJsZSBxdWFsaXR5ID0gMS4wOwor
ICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBzdGF0aWNfY2FzdDxIVE1MQ2FudmFzRWxl
bWVudCo+KGltcGwoKSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgCisgICAgSlND
OjpKU1ZhbHVlIHJlc3VsdDsKKyAgICBkb3VibGUgcXVhbGl0eTsKKyAgICBkb3VibGUqIHF1YWxp
dHlQdHIgPSAwOwogICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPiAxKSB7CiAgICAgICAg
IEpTVmFsdWUgdiA9IGV4ZWMtPmFyZ3VtZW50KDEpOwotICAgICAgICBpZiAodi5pc051bWJlcigp
KQorICAgICAgICBpZiAodi5pc051bWJlcigpKSB7CiAgICAgICAgICAgICBxdWFsaXR5ID0gdi50
b051bWJlcihleGVjKTsKLSAgICAgICAgaWYgKCEoMC4wIDw9IHF1YWxpdHkgJiYgcXVhbGl0eSA8
PSAxLjApKQotICAgICAgICAgICAgcXVhbGl0eSA9IDEuMDsKKyAgICAgICAgICAgIHF1YWxpdHlQ
dHIgPSAmcXVhbGl0eTsKKyAgICAgICAgfQogICAgIH0KLSAgICBIVE1MQ2FudmFzRWxlbWVudCog
Y2FudmFzID0gc3RhdGljX2Nhc3Q8SFRNTENhbnZhc0VsZW1lbnQqPihpbXBsKCkpOwotICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIEpTQzo6SlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZyhl
eGVjLCBjYW52YXMtPnRvRGF0YVVSTCh0eXBlLCBxdWFsaXR5LCBlYykpOworICAgIAorICAgIHJl
c3VsdCA9IGpzU3RyaW5nKGV4ZWMsIGNhbnZhcy0+dG9EYXRhVVJMKHR5cGUsIHF1YWxpdHlQdHIs
IGVjKSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVu
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhI
VE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDYwNjQ1KQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNSw3ICsxMDUsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MQ2Fu
dmFzRWxlbWVuCiAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IFY4SFRNTENhbnZhc0Vs
ZW1lbnQ6OnRvTmF0aXZlKGhvbGRlcik7CiAgICAgU3RyaW5nIHR5cGUgPSB0b1dlYkNvcmVTdHJp
bmcoYXJnc1swXSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgU3RyaW5nIHJlc3Vs
dCA9IGNhbnZhcy0+dG9EYXRhVVJMKHR5cGUsIHF1YWxpdHksIGVjKTsKKyAgICBTdHJpbmcgcmVz
dWx0ID0gY2FudmFzLT50b0RhdGFVUkwodHlwZSwgJnF1YWxpdHksIGVjKTsKICAgICBWOFByb3h5
OjpzZXRET01FeGNlcHRpb24oZWMpOwogICAgIHJldHVybiB2OFN0cmluZ09yVW5kZWZpbmVkKHJl
c3VsdCk7CiB9CkluZGV4OiBXZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNlLmNwcAkocmV2aXNpb24gNjA2NDUpCisrKyBX
ZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUs
NyBAQCB2b2lkIENhbnZhc1N1cmZhY2U6OnNldFN1cmZhY2VTaXplKGNvbnN0CiAgICAgbV9pbWFn
ZUJ1ZmZlci5jbGVhcigpOwogfQogCi1TdHJpbmcgQ2FudmFzU3VyZmFjZTo6dG9EYXRhVVJMKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIGRvdWJsZSBxdWFsaXR5LCBFeGNlcHRpb25Db2RlJiBlYykK
K1N0cmluZyBDYW52YXNTdXJmYWNlOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
Y29uc3QgZG91YmxlKiBxdWFsaXR5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIW1f
b3JpZ2luQ2xlYW4pIHsKICAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CkluZGV4OiBXZWJDb3Jl
L2RvbS9DYW52YXNTdXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vQ2FudmFzU3Vy
ZmFjZS5oCShyZXZpc2lvbiA2MDY0NSkKKysrIFdlYkNvcmUvZG9tL0NhbnZhc1N1cmZhY2UuaAko
d29ya2luZyBjb3B5KQpAQCAtNTksOSArNTksOCBAQCBwdWJsaWM6CiAgICAgaW50IHdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplLndpZHRoKCk7IH0KICAgICBpbnQgaGVpZ2h0KCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplLmhlaWdodCgpOyB9CiAKLSAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIGRvdWJsZSBxdWFsaXR5LCBFeGNlcHRpb25Db2RlJik7Ci0KLSAg
ICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIEV4Y2VwdGlvbkNvZGUm
IGVjKSB7IHJldHVybiB0b0RhdGFVUkwobWltZVR5cGUsIDEuMCwgZWMpOyB9CisgICAgU3RyaW5n
IHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHks
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiB0b0RhdGFVUkwobWltZVR5cGUsIDAs
IGVjKTsgfQogCiAgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZTsgfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCShyZXZp
c2lvbiA2MDY0NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Y2xhc3MgSW50UG9pbnQ7CiAgICAgY2xhc3MgSW50UmVjdDsKICAgICBjbGFzcyBTdHJpbmc7Ci0K
KyAgICAKICAgICBlbnVtIEltYWdlQ29sb3JTcGFjZSB7CiAgICAgICAgIFVua25vd24sCiAgICAg
ICAgIERldmljZVJHQiwgLy8gbGlrZSBzUkdCCkBAIC04Miw4ICs4Miw4IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgICAgICB2b2lkIHB1dFVubXVsdGlwbGllZEltYWdlRGF0YShJbWFnZURh
dGEqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
KTsKICAgICAgICAgdm9pZCBwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEltYWdlRGF0YSosIGNv
bnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpOwotCi0g
ICAgICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgZG91YmxlIHF1
YWxpdHkgPSAxLjApIGNvbnN0OworICAgICAgICAKKyAgICAgICAgU3RyaW5nIHRvRGF0YVVSTChj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHkgPSAwKSBjb25zdDsK
ICNpZiAhUExBVEZPUk0oQ0cpCiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3Jt
KCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7IH0KICAgICAgICAgdm9pZCB0cmFu
c2Zvcm1Db2xvclNwYWNlKEltYWdlQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBJbWFnZUNvbG9y
U3BhY2UgZHN0Q29sb3JTcGFjZSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAJKHJldmlzaW9uIDYwNjQ1KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjg0LDcgKzI4NCw3IEBAIHN0YXRpYyBjYWlyb19zdGF0dXNfdCB3cml0
ZUZ1bmN0aW9uKHZvaWQKICAgICByZXR1cm4gQ0FJUk9fU1RBVFVTX1NVQ0NFU1M7CiB9CiAKLVN0
cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGRvdWJs
ZSkgY29uc3QKK1N0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIGNvbnN0IGRvdWJsZSopIGNvbnN0CiB7CiAgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFn
ZSA9IGNhaXJvX2dldF90YXJnZXQoY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSk7CiAgICAg
aWYgKCFpbWFnZSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHLmNwcAkocmV2aXNpb24gNjA2NDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsNiArMjUwLDE0
IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRpcGxpZWRJbWFnZUQKICAgICBwdXRJbWFn
ZURhdGE8UHJlbXVsdGlwbGllZD4oc291cmNlLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsIG1fZGF0
YSwgbV9zaXplKTsKIH0KIAorc3RhdGljIGlubGluZSBDRlN0cmluZ1JlZiBqcGVnVVRJKCkKK3sK
KyNpZiBQTEFURk9STShXSU4pCisgICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVK
UEVHID0gQ0ZTVFIoInB1YmxpYy5qcGVnIik7CisjZW5kaWYKKyAgICByZXR1cm4ga1VUVHlwZUpQ
RUc7Cit9CisgICAgCiBzdGF0aWMgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlGcm9tTUlNRVR5
cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKICNpZiBQTEFURk9STShNQUMpCkBAIC0yNjEs
MTMgKzI2OSwxMiBAQCBzdGF0aWMgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlGcm9tTUlNCiAg
ICAgLy8gRklYTUU6IEFkZCBXaW5kb3dzIHN1cHBvcnQgZm9yIGFsbCB0aGUgc3VwcG9ydGVkIFVU
SXMgd2hlbiBhIHdheSB0byBjb252ZXJ0IGZyb20gTUlNRVR5cGUgdG8gVVRJIHJlbGlhYmx5IGlz
IGZvdW5kLgogICAgIC8vIEZvciBub3csIG9ubHkgc3VwcG9ydCBQTkcsIEpQRUcsIGFuZCBHSUYu
IFNlZSA8cmRhcjovL3Byb2JsZW0vNjA5NTI4Nj4uCiAgICAgc3RhdGljIGNvbnN0IENGU3RyaW5n
UmVmIGtVVFR5cGVQTkcgPSBDRlNUUigicHVibGljLnBuZyIpOwotICAgIHN0YXRpYyBjb25zdCBD
RlN0cmluZ1JlZiBrVVRUeXBlSlBFRyA9IENGU1RSKCJwdWJsaWMuanBlZyIpOwogICAgIHN0YXRp
YyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlR0lGID0gQ0ZTVFIoImNvbS5jb21wdXNlcnZlLmdp
ZiIpOwogCiAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvcG5nIikp
CiAgICAgICAgIHJldHVybiBrVVRUeXBlUE5HOwogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSht
aW1lVHlwZSwgImltYWdlL2pwZWciKSkKLSAgICAgICAgcmV0dXJuIGtVVFR5cGVKUEVHOworICAg
ICAgICByZXR1cm4ganBlZ1VUSSgpOwogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShtaW1lVHlw
ZSwgImltYWdlL2dpZiIpKQogICAgICAgICByZXR1cm4ga1VUVHlwZUdJRjsKIApAQCAtMjc2LDcg
KzI4Myw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21NSU0KICNlbmRp
ZgogfQogCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBkb3VibGUpIGNvbnN0CitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHkpIGNvbnN0CiB7CiAgICAgQVNT
RVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5n
KG1pbWVUeXBlKSk7CiAKQEAgLTI4OCwxMSArMjk1LDIzIEBAIFN0cmluZyBJbWFnZUJ1ZmZlcjo6
dG9EYXRhVVJMKGNvbnN0IFN0cmkKICAgICBpZiAoIWRhdGEpCiAgICAgICAgIHJldHVybiAiZGF0
YTosIjsKIAotICAgIFJldGFpblB0cjxDR0ltYWdlRGVzdGluYXRpb25SZWY+IGRlc3RpbmF0aW9u
KEFkb3B0Q0YsIENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGRhdGEuZ2V0KCksIHV0
aUZyb21NSU1FVHlwZShtaW1lVHlwZSkuZ2V0KCksIDEsIDApKTsKKyAgICBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IHV0aSA9IHV0aUZyb21NSU1FVHlwZShtaW1lVHlwZSk7CisgICAgQVNTRVJUKHV0
aSk7CisKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZURlc3RpbmF0aW9uUmVmPiBkZXN0aW5hdGlvbihB
ZG9wdENGLCBDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShkYXRhLmdldCgpLCB1dGku
Z2V0KCksIDEsIDApKTsKICAgICBpZiAoIWRlc3RpbmF0aW9uKQogICAgICAgICByZXR1cm4gImRh
dGE6LCI7CiAKLSAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQo
KSwgaW1hZ2UuZ2V0KCksIDApOworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGltYWdl
UHJvcGVydGllcyA9IDA7CisgICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpICYm
IHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYmICpxdWFsaXR5IDw9IDEuMCkgeworICAgICAg
ICAvLyBBcHBseSB0aGUgY29tcHJlc3Npb24gcXVhbGl0eSB0byB0aGUgaW1hZ2UgZGVzdGluYXRp
b24uCisgICAgICAgIFJldGFpblB0cjxDRk51bWJlclJlZj4gY29tcHJlc3Npb25RdWFsaXR5KEFk
b3B0Q0YsIENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckRvdWJs
ZVR5cGUsIHF1YWxpdHkpKTsKKyAgICAgICAgY29uc3Qgdm9pZCoga2V5ID0ga0NHSW1hZ2VEZXN0
aW5hdGlvbkxvc3N5Q29tcHJlc3Npb25RdWFsaXR5OworICAgICAgICBjb25zdCB2b2lkKiB2YWx1
ZSA9IGNvbXByZXNzaW9uUXVhbGl0eS5nZXQoKTsKKyAgICAgICAgaW1hZ2VQcm9wZXJ0aWVzLmFk
b3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKDAsICZrZXksICZ2YWx1ZSwgMSwgJmtDRlR5cGVEaWN0
aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwor
ICAgIH0KKworICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgp
LCBpbWFnZS5nZXQoKSwgaW1hZ2VQcm9wZXJ0aWVzLmdldCgpKTsKICAgICBDR0ltYWdlRGVzdGlu
YXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQoKSk7CiAKICAgICBWZWN0b3I8Y2hhcj4gb3V0
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUJ1ZmZlckhhaWt1
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdl
QnVmZmVySGFpa3UuY3BwCShyZXZpc2lvbiA2MDY0NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvSW1hZ2VCdWZmZXJIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMCw3
ICszMTAsNyBAQCB2b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VECiAgICAg
cHV0SW1hZ2VEYXRhKHNvdXJjZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBtX2RhdGEsIG1fc2l6
ZSwgdHJ1ZSk7CiB9CiAKLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIGRvdWJsZSkgY29uc3QKK1N0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJM
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSopIGNvbnN0CiB7CiAgICAgaWYg
KCFNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyht
aW1lVHlwZSkpCiAgICAgICAgIHJldHVybiAiZGF0YTosIjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAkocmV2aXNpb24gNjA2NDUpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNzYsMTAgKzI3Niw5IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11bHRp
cGxpZWRJbWFnZUQKIC8vIFdlIGdldCBhIG1pbWVUeXBlIGhlcmUgYnV0IFFJbWFnZVdyaXRlciBk
b2VzIG5vdCBzdXBwb3J0IG1pbWV0eXBlcyBidXQKIC8vIG9ubHkgZm9ybWF0cyAocG5nLCBnaWYs
IGpwZWcuLi4sIHhwbSkuIFNvIGFzc3VtZSB3ZSBnZXQgaW1hZ2UvIGFzIGltYWdlCiAvLyBtaW1l
dHlwZXMgYW5kIHRoZW4gcmVtb3ZlIHRoZSBpbWFnZS8gdG8gZ2V0IHRoZSBRdCBmb3JtYXQuCi1T
dHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBkb3Vi
bGUgcXVhbGl0eSkgY29uc3QKK1N0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSkgY29uc3QKIHsKICAgICBBU1NF
UlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2Rpbmco
bWltZVR5cGUpKTsKLSAgICBBU1NFUlQoMC4wIDw9IHF1YWxpdHkgJiYgcXVhbGl0eSA8PSAxLjAp
OwogCiAgICAgaWYgKCFtaW1lVHlwZS5zdGFydHNXaXRoKCJpbWFnZS8iKSkKICAgICAgICAgcmV0
dXJuICJkYXRhOiwiOwpAQCAtMjg5LDkgKzI4OCwxNiBAQCBTdHJpbmcgSW1hZ2VCdWZmZXI6OnRv
RGF0YVVSTChjb25zdCBTdHJpCiAgICAgUUJ1ZmZlciBidWZmZXIoJmRhdGEpOwogICAgIGJ1ZmZl
ci5vcGVuKFFCdWZmZXI6OldyaXRlT25seSk7CiAKLSAgICBpZiAoIW1fZGF0YS5tX3BpeG1hcC5z
YXZlKCZidWZmZXIsIG1pbWVUeXBlLnN1YnN0cmluZyhzaXplb2YgImltYWdlIikudXRmOCgpLmRh
dGEoKSwgcXVhbGl0eSAqIDEwMCArIDAuNSkpIHsKLSAgICAgICAgYnVmZmVyLmNsb3NlKCk7Ci0g
ICAgICAgIHJldHVybiAiZGF0YTosIjsKKyAgICBpZiAocXVhbGl0eSAmJiAqcXVhbGl0eSA+PSAw
LjAgJiYgKnF1YWxpdHkgPD0gMS4wKSB7CisgICAgICAgIGlmICghbV9kYXRhLm1fcGl4bWFwLnNh
dmUoJmJ1ZmZlciwgbWltZVR5cGUuc3Vic3RyaW5nKHNpemVvZiAiaW1hZ2UiKS51dGY4KCkuZGF0
YSgpLCAqcXVhbGl0eSAqIDEwMCArIDAuNSkpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5jbG9zZSgp
OworICAgICAgICAgICAgcmV0dXJuICJkYXRhOiwiOworICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgaWYgKCFtX2RhdGEubV9waXhtYXAuc2F2ZSgmYnVmZmVyLCBtaW1lVHlwZS5zdWJz
dHJpbmcoc2l6ZW9mICJpbWFnZSIpLnV0ZjgoKS5kYXRhKCksIDEwMCkpIHsKKyAgICAgICAgICAg
IGJ1ZmZlci5jbG9zZSgpOworICAgICAgICAgICAgcmV0dXJuICJkYXRhOiwiOworICAgICAgICB9
CiAgICAgfQogCiAgICAgYnVmZmVyLmNsb3NlKCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkocmV2aXNpb24gNjA2NDUp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYxLDcgKzI2MSw3IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dFBy
ZW11bHRpcGxpZWRJbWFnZUQKICAgICBwdXRJbWFnZURhdGE8UHJlbXVsdGlwbGllZD4oc291cmNl
LCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsICpjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5i
aXRtYXAoKSwgbV9zaXplKTsKIH0KIAotU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29u
c3QgU3RyaW5nJiwgZG91YmxlKSBjb25zdAorU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwo
Y29uc3QgU3RyaW5nJiwgY29uc3QgZG91YmxlKikgY29uc3QKIHsKICAgICAvLyBFbmNvZGUgdGhl
IGltYWdlIGludG8gYSB2ZWN0b3IuCiAgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHBuZ0VuY29k
ZWREYXRhOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZUJ1ZmZl
cldpbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNl
L0ltYWdlQnVmZmVyV2luY2UuY3BwCShyZXZpc2lvbiA2MDY0NSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VCdWZmZXJXaW5jZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIxNiw3ICsyMTYsNyBAQCB2b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VE
CiAgICAgcHV0SW1hZ2VEYXRhPHRydWU+KHNvdXJjZSwgc291cmNlUmVjdCwgZGVzdFBvaW50LCBt
X2RhdGEubV9iaXRtYXAuZ2V0KCkpOwogfQogCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVS
TChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBkb3VibGUpIGNvbnN0CitTdHJpbmcgSW1hZ2VCdWZm
ZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqKSBjb25z
dAogewogICAgIGlmICghbV9kYXRhLm1fYml0bWFwLT5ieXRlcygpKQogICAgICAgICByZXR1cm4g
ImRhdGE6LCI7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVy
V3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VC
dWZmZXJXeC5jcHAJKHJldmlzaW9uIDYwNjQ1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93eC9JbWFnZUJ1ZmZlcld4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNyBAQCB2
b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VECiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KIAotU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiwg
ZG91YmxlKSBjb25zdAorU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5n
JiwgY29uc3QgZG91YmxlKikgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJl
dHVybiBTdHJpbmcoKTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYwNjQ1KQorKysgTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMDYtMDMgIE1h
dHRoZXcgRGVsYW5leSAgPG1kZWxhbmV5QGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDRyBpbXBsZW1lbnRhdGlvbiBuZWVkZWQgZm9y
IGNvbXByZXNzaW9uIHF1YWxpdHkgaW4gY2FudmFzLnRvRGF0YVVSTAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzg0OTIKKworICAgICAgICAqIHBsYXRm
b3JtL21hYy9Ta2lwcGVkOgorCiAyMDEwLTA2LTAzICBTdGV2ZSBCbG9jayAgPHN0ZXZlYmxvY2tA
Z29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgpJ
bmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQJKHJldmlzaW9uIDYwNjQ1KQorKysgTGF5b3V0
VGVzdHMvcGxhdGZvcm0vbWFjL1NraXBwZWQJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw3ICsyODks
NiBAQCBjYW52YXMvcGhpbGlwL3Rlc3RzL3NlY3VyaXR5LnJlc2V0Lmh0bWwKIGNhbnZhcy9waGls
aXAvdGVzdHMvc2l6ZS5hdHRyaWJ1dGVzLnBhcnNlLm1pbnVzLmh0bWwKIGNhbnZhcy9waGlsaXAv
dGVzdHMvc2l6ZS5hdHRyaWJ1dGVzLnNldEF0dHJpYnV0ZS5taW51cy5odG1sCiBjYW52YXMvcGhp
bGlwL3Rlc3RzL3RvRGF0YVVSTC5qcGVnLmFscGhhLmh0bWwKLWNhbnZhcy9waGlsaXAvdGVzdHMv
dG9EYXRhVVJMLmpwZWcucXVhbGl0eS5iYXNpYy5odG1sCiBjYW52YXMvcGhpbGlwL3Rlc3RzL3R5
cGUucHJvdG90eXBlLmh0bWwKIAogIyBJbmRleGVkREIgaXMgbm90IHlldCBlbmFibGVkLgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>