<?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>49206</bug_id>
          
          <creation_ts>2010-11-08 14:07:53 -0800</creation_ts>
          <short_desc>Add multisampling support to DrawingBuffer.</short_desc>
          <delta_ts>2010-11-11 14:43:34 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</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>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>47379</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Chris Marrin">cmarrin</assigned_to>
          <cc>abarth</cc>
    
    <cc>buildbot</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>jamesr</cc>
    
    <cc>mihaip</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>306350</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-11-08 14:07:53 -0800</bug_when>
    <thetext>DrawingBuffer doesn&apos;t handle multisampling right now. This is needed to be able to do https://bugs.webkit.org/show_bug.cgi?id=47379.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306516</commentid>
    <comment_count>1</comment_count>
      <attachid>73320</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-11-08 17:43:40 -0800</bug_when>
    <thetext>Created attachment 73320
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306522</commentid>
    <comment_count>2</comment_count>
      <attachid>73320</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-08 17:48:22 -0800</bug_when>
    <thetext>Comment on attachment 73320
Patch

Could you please make the Qt and Chromium ports compile by adding these virtuals to their implementations? Qt&apos;s is in platform/graphics/qt and Chromium&apos;s is in platform/graphics/chromium and WebKit/chromium/src. They can be no-ops with FIXMEs; the Chromium port should explicitly not claim support for them initially.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306525</commentid>
    <comment_count>3</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-11-08 17:53:25 -0800</bug_when>
    <thetext>Attachment 73320 did not build on qt:
Build output: http://queues.webkit.org/results/5496034</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306582</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-08 20:04:01 -0800</bug_when>
    <thetext>Attachment 73320 did not build on chromium:
Build output: http://queues.webkit.org/results/5482039</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306584</commentid>
    <comment_count>5</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2010-11-08 20:07:51 -0800</bug_when>
    <thetext>Attachment 73320 did not build on win:
Build output: http://queues.webkit.org/results/5447048</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307012</commentid>
    <comment_count>6</comment_count>
      <attachid>73427</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-11-09 14:57:55 -0800</bug_when>
    <thetext>Created attachment 73427
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307112</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-09 18:51:43 -0800</bug_when>
    <thetext>Attachment 73427 did not build on chromium:
Build output: http://queues.webkit.org/results/5451064</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307427</commentid>
    <comment_count>8</comment_count>
      <attachid>73507</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-11-10 10:48:44 -0800</bug_when>
    <thetext>Created attachment 73507
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307566</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-11-10 14:30:14 -0800</bug_when>
    <thetext>Attachment 73507 did not build on chromium:
Build output: http://queues.webkit.org/results/5603005</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307606</commentid>
    <comment_count>10</comment_count>
      <attachid>73552</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-11-10 16:10:05 -0800</bug_when>
    <thetext>Created attachment 73552
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307650</commentid>
    <comment_count>11</comment_count>
      <attachid>73552</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-11-10 17:20:29 -0800</bug_when>
    <thetext>Comment on attachment 73552
Patch

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

Looks pretty good to me.  Left some comments, but nothing major.

To reduce risk, could you set antialias to &apos;false&apos; in SharedGraphicsContext3D::create() for now?  That way we can land this and test it out a bit locally on various platforms/configs before changing the behavior of any DrawingBuffer clients.

&gt; WebCore/platform/graphics/gpu/DrawingBuffer.cpp:114
&gt; +    // resize multisample FBO

This (and the other comments) should be written as sentences (Leading caps, trailing period).

&gt; WebCore/platform/graphics/gpu/DrawingBuffer.cpp:119
&gt; +        int sampleCount = std::min(8, maxSampleCount);

I&apos;m not sure why 8 is special here.  Could this be a constant with a more descriptive name?

Also, webkit style is to put a &apos;using namespace std&apos; declaration at the top of the .cpp and just say min() here.

&gt; WebCore/platform/graphics/gpu/DrawingBuffer.cpp:207
&gt; +    if (multisample())
&gt; +        m_context-&gt;bindFramebuffer(GraphicsContext3D::FRAMEBUFFER, m_multisampleFBO);
&gt; +
&gt; +    // Initialize renderbuffers to 0.
&gt; +    unsigned char colorMask[] = {true, true, true, true}, depthMask = true, stencilMask = true;
&gt; +    unsigned char isScissorEnabled = false;
&gt; +    unsigned char isDitherEnabled = false;
&gt; +    unsigned long clearMask = GraphicsContext3D::COLOR_BUFFER_BIT;
&gt; +    m_context-&gt;getBooleanv(GraphicsContext3D::COLOR_WRITEMASK, colorMask);
&gt; +    m_context-&gt;colorMask(true, true, true, true);
&gt; +    if (attributes.depth) {
&gt; +        m_context-&gt;getBooleanv(GraphicsContext3D::DEPTH_WRITEMASK, &amp;depthMask);
&gt; +        m_context-&gt;depthMask(true);
&gt; +        clearMask |= GraphicsContext3D::DEPTH_BUFFER_BIT;
&gt; +    }
&gt; +    if (attributes.stencil) {
&gt; +        m_context-&gt;getBooleanv(GraphicsContext3D::STENCIL_WRITEMASK, &amp;stencilMask);
&gt; +        m_context-&gt;stencilMask(true);
&gt; +        clearMask |= GraphicsContext3D::STENCIL_BUFFER_BIT;
&gt; +    }
&gt; +    isScissorEnabled = m_context-&gt;isEnabled(GraphicsContext3D::SCISSOR_TEST);
&gt; +    m_context-&gt;disable(GraphicsContext3D::SCISSOR_TEST);
&gt; +    isDitherEnabled = m_context-&gt;isEnabled(GraphicsContext3D::DITHER);
&gt; +    m_context-&gt;disable(GraphicsContext3D::DITHER);
&gt; +
&gt; +    m_context-&gt;clear(clearMask);
&gt; +
&gt; +    m_context-&gt;colorMask(colorMask[0], colorMask[1], colorMask[2], colorMask[3]);
&gt; +    if (attributes.depth)
&gt; +        m_context-&gt;depthMask(depthMask);
&gt; +    if (attributes.stencil)
&gt; +        m_context-&gt;stencilMask(stencilMask);
&gt; +    if (isScissorEnabled)
&gt; +        m_context-&gt;enable(GraphicsContext3D::SCISSOR_TEST);
&gt; +    else
&gt; +        m_context-&gt;disable(GraphicsContext3D::SCISSOR_TEST);
&gt; +    if (isDitherEnabled)
&gt; +        m_context-&gt;enable(GraphicsContext3D::DITHER);
&gt; +    else
&gt; +        m_context-&gt;disable(GraphicsContext3D::DITHER);
&gt; +
&gt; +    m_context-&gt;flush();

I think this would be useful to have this clearing logic as a separate utility function, if just to shorten up the reset() function a bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307651</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-11-10 17:21:12 -0800</bug_when>
    <thetext>Attachment 73507 did not build on chromium:
Build output: http://queues.webkit.org/results/5529076</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307987</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-11-11 10:42:44 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/71827 might have broken Leopard Intel Release (Tests)
The following tests are not passing:
media/video-played-collapse.html
media/video-played-ranges-1.html
media/video-played-reset.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308007</commentid>
    <comment_count>14</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-11-11 11:14:17 -0800</bug_when>
    <thetext>Sadly looks like this did break a bunch of canvas tests in chromium.  I&apos;ll debug and update the bug when I figure out why.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308048</commentid>
    <comment_count>15</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2010-11-11 12:12:03 -0800</bug_when>
    <thetext>For the record, the rollout change was http://trac.webkit.org/changeset/71839</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308083</commentid>
    <comment_count>16</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-11-11 13:08:17 -0800</bug_when>
    <thetext>Ah, as it turns out the DrawingBufferChromium changes weren&apos;t quite complete.  In particular, the newly added fields on DrawingBuffer weren&apos;t initialized in the DrawingBufferChromium.cpp version of the constructor and the DrawingBufferChromium.cpp functions were not using m_colorBuffer when they should have been.  I should have caught both of these issues in review - my bad.

I&apos;ll update this bug with a patch that passes all tests on chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308152</commentid>
    <comment_count>17</comment_count>
      <attachid>73662</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-11-11 14:26:41 -0800</bug_when>
    <thetext>Created attachment 73662
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308169</commentid>
    <comment_count>18</comment_count>
      <attachid>73662</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2010-11-11 14:41:24 -0800</bug_when>
    <thetext>Comment on attachment 73662
Patch

R=me

Confirmed that this passes all gpu tests in fast/canvas and canvas/philip on chromium linux.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308172</commentid>
    <comment_count>19</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-11-11 14:43:34 -0800</bug_when>
    <thetext>Committed r71853: &lt;http://trac.webkit.org/changeset/71853&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73320</attachid>
            <date>2010-11-08 17:43:40 -0800</date>
            <delta_ts>2010-11-09 14:57:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49206-20101108174338.patch</filename>
            <type>text/plain</type>
            <size>20508</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTU4OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMTAtMTEtMDggIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBtdWx0aXNhbXBsaW5nIHN1cHBvcnQgdG8gRHJhd2luZ0J1ZmZlci4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MjA2CisKKyAgICAgICAgQWRkZWQg
c3VwcG9ydCBmb3IgdGhlIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQgYW5kIEdMX0FOR0xFX2Zy
YW1lYnVmZmVyX211bHRpc2FtcGxlCisgICAgICAgIGV4dGVuc2lvbnMgdG8gRXh0ZW5zaW9uczNE
LiBUaGVuIEkgdXNlIHRoZXNlIHRvIGFkZCBtdWx0aXNhbXBsZSBzdXBwb3J0IHRvIERyYXdpbmdC
dWZmZXIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmF0dHJpYnV0ZXMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRy
YXdpbmdCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpyZXNldCk6CisgICAgICAg
IChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6RHJh
d2luZ0J1ZmZlcjo6YmluZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdp
bmdCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6Om11bHRpc2FtcGxl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvbWFjL0RyYXdpbmdCdWZmZXJNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnBsYXRmb3JtQ29sb3JCdWZmZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpzdXBwb3J0cyk6CisgICAgICAg
IChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OmJsaXRGcmFtZWJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNh
bXBsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9w
ZW5HTC5oOgorCiAyMDEwLTExLTA4ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0V4dGVuc2lvbnMzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRXh0ZW5zaW9uczNELmgJKHJldmlzaW9uIDcxNTY3KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgs
NyBAQCBwdWJsaWM6CiAgICAgLy8gICBHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYQogICAgIC8vICAg
R0xfQVJCX3JvYnVzdG5lc3MKICAgICAvLyAgIEdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCAv
IEdMX09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbAorICAgIC8vICAgR0xfQU5HTEVfZnJhbWVidWZm
ZXJfYmxpdCAvIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlCiAKICAgICAvLyBUYWtl
cyBmdWxsIG5hbWUgb2YgZXh0ZW5zaW9uOyBmb3IgZXhhbXBsZSwKICAgICAvLyAiR0xfRVhUX3Rl
eHR1cmVfZm9ybWF0X0JHUkE4ODg4Ii4KQEAgLTYzLDExICs2NCwyOCBAQCBwdWJsaWM6CiAgICAg
ICAgIFVOS05PV05fQ09OVEVYVF9SRVNFVF9BUkIgPSAweDgyNTUsCiAKICAgICAgICAgLy8gR0xf
RVhUL09FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCBlbnVtcwotICAgICAgICBERVBUSDI0X1NURU5D
SUw4ID0gMHg4OEYwCisgICAgICAgIERFUFRIMjRfU1RFTkNJTDggPSAweDg4RjAsCisgICAgICAg
IAorICAgICAgICAvLyBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IG5hbWVzCisgICAgICAgIFJF
QURfRlJBTUVCVUZGRVIgPSAweDhDQTgsCisgICAgICAgIERSQVdfRlJBTUVCVUZGRVIgPSAweDhD
QTksCisgICAgICAgIERSQVdfRlJBTUVCVUZGRVJfQklORElORyA9IDB4OENBNiwgCisgICAgICAg
IFJFQURfRlJBTUVCVUZGRVJfQklORElORyA9IDB4OENBQSwKKyAgICAgICAgCisgICAgICAgIC8v
IEdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIG5hbWVzCisgICAgICAgIFJFTkRFUkJV
RkZFUl9TQU1QTEVTID0gMHg4Q0FCLAorICAgICAgICBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01V
TFRJU0FNUExFID0gMHg4RDU2LAorICAgICAgICBNQVhfU0FNUExFUyA9IDB4OEQ1NwogICAgIH07
CiAKICAgICAvLyBHTF9BUkJfcm9idXN0bmVzcwogICAgIHZpcnR1YWwgaW50IGdldEdyYXBoaWNz
UmVzZXRTdGF0dXNBUkIoKSA9IDA7CisgICAgCisgICAgLy8gR0xfQU5HTEVfZnJhbWVidWZmZXJf
YmxpdAorICAgIHZpcnR1YWwgdm9pZCBibGl0RnJhbWVidWZmZXIobG9uZyBzcmNYMCwgbG9uZyBz
cmNZMCwgbG9uZyBzcmNYMSwgbG9uZyBzcmNZMSwgbG9uZyBkc3RYMCwgbG9uZyBkc3RZMCwgbG9u
ZyBkc3RYMSwgbG9uZyBkc3RZMSwgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGZp
bHRlcikgPSAwOworICAgIAorICAgIC8vIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxl
CisgICAgdmlydHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25l
ZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVy
bmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkgPSAw
OyAgICAKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDcxNTY3KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NjEsNiArNDYxLDggQEAgcHVibGljOgogCiAgICAgUGFzc1JlZlB0cjxEcmF3aW5n
QnVmZmVyPiBjcmVhdGVEcmF3aW5nQnVmZmVyKGNvbnN0IEludFNpemUmID0gSW50U2l6ZSgpKTsK
ICAgICAKKyAgICBjb25zdCBBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzKCkgY29uc3QgeyByZXR1cm4g
bV9hdHRyczsgfQorCiAjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShDSFJPTUlVTSkKICAg
ICAvLyBXaXRoIG11bHRpc2FtcGxpbmcgb24sIGJsaXQgZnJvbSBtdWx0aXNhbXBsZUZCTyB0byBy
ZWd1bGFyIEZCTy4KICAgICB2b2lkIHByZXBhcmVUZXh0dXJlKCk7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcAkocmV2aXNpb24gNzE1
NjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDE0IEBACiAKICNpbmNsdWRlICJEcmF3aW5nQnVm
ZmVyLmgiCiAKKyNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBQYXNzUmVmUHRyPERyYXdpbmdCdWZmZXI+IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBSZWZQ
dHI8RHJhd2luZ0J1ZmZlcj4gZHJhd2luZ0J1ZmZlciA9IGFkb3B0UmVmKG5ldyBEcmF3aW5nQnVm
ZmVyKGNvbnRleHQsIHNpemUpKTsKKyAgICBkcmF3aW5nQnVmZmVyLT5tX211bHRpc2FtcGxlRXh0
ZW5zaW9uU3VwcG9ydGVkID0gY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xf
QU5HTEVfZnJhbWVidWZmZXJfYmxpdCIpICYmIGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3Vw
cG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIik7CiAgICAgcmV0dXJuIChk
cmF3aW5nQnVmZmVyLT5tX2NvbnRleHQpID8gZHJhd2luZ0J1ZmZlci5yZWxlYXNlKCkgOiAwOwog
fQogCkBAIC00NiwyMSArNDksMTkxIEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6Y2xlYXIoKQogewog
ICAgIGlmICghbV9jb250ZXh0KQogICAgICAgICByZXR1cm47Ci0KKyAgICAgICAgCiAgICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX2NvbnRleHQtPmRlbGV0ZVRleHR1
cmUobV9jb2xvckJ1ZmZlcik7CisgICAgbV9jb2xvckJ1ZmZlciA9IDA7CisgICAgCisgICAgaWYg
KG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcikgeworICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVJl
bmRlcmJ1ZmZlcihtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICBtX211bHRpc2Ft
cGxlQ29sb3JCdWZmZXIgPSAwOworICAgIH0KKyAgICAKKyAgICBpZiAobV9tdWx0aXNhbXBsZURl
cHRoU3RlbmNpbEJ1ZmZlcikgeworICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVJlbmRlcmJ1ZmZl
cihtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgbV9tdWx0aXNhbXBs
ZURlcHRoU3RlbmNpbEJ1ZmZlciA9IDA7CisgICAgfQorICAgIAorICAgIGlmIChtX2RlcHRoU3Rl
bmNpbEJ1ZmZlcikgeworICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVJlbmRlcmJ1ZmZlcihtX2Rl
cHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIG1fZGVwdGhTdGVuY2lsQnVmZmVyID0gMDsKKyAg
ICB9CisgICAgCisgICAgaWYgKG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAgICAgbV9jb250ZXh0
LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRp
c2FtcGxlRkJPKTsKKyAgICAgICAgbV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihtX211bHRp
c2FtcGxlRkJPKTsKKyAgICAgICAgbV9tdWx0aXNhbXBsZUZCTyA9IDA7CisgICAgfQorICAgICAg
ICAKICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIG1fZmJvKTsKICAgICBtX2NvbnRleHQtPmRlbGV0ZUZyYW1lYnVmZmVyKG1fZmJv
KTsKICAgICBtX2ZibyA9IDA7Ci0KKyAgICAKICAgICBtX2NvbnRleHQuY2xlYXIoKTsKIH0KIAot
dm9pZCBEcmF3aW5nQnVmZmVyOjpiaW5kKCkKK3ZvaWQgRHJhd2luZ0J1ZmZlcjo6cmVzZXQoY29u
c3QgSW50U2l6ZSYgbmV3U2l6ZSkKK3sKKyAgICBpZiAobV9zaXplID09IG5ld1NpemUpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX3NpemUgPSBuZXdTaXplOworCisgICAgaWYgKCFtX2NvbnRleHQp
CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICAKKyAgICBjb25zdCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyYg
YXR0cmlidXRlcyA9IG1fY29udGV4dC0+YXR0cmlidXRlcygpOworICAgIEdMdWludCBpbnRlcm5h
bENvbG9yRm9ybWF0LCBjb2xvckZvcm1hdCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSAw
OworICAgIGlmIChhdHRyaWJ1dGVzLmFscGhhKSB7CisgICAgICAgIGludGVybmFsQ29sb3JGb3Jt
YXQgPSBHTF9SR0JBODsKKyAgICAgICAgY29sb3JGb3JtYXQgPSBHTF9SR0JBOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0I4OworICAgICAgICBjb2xv
ckZvcm1hdCA9IEdMX1JHQjsKKyAgICB9CisgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBh
dHRyaWJ1dGVzLmRlcHRoKSB7CisgICAgICAgIC8vIFdlIGRvbid0IGFsbG93IHRoZSBsb2dpYyB3
aGVyZSBzdGVuY2lsIGlzIHJlcXVpcmVkIGFuZCBkZXB0aCBpcyBub3QuCisgICAgICAgIC8vIFNl
ZSBHcmFwaGljc0NvbnRleHQzRCBjb25zdHJ1Y3Rvci4KKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMu
c3RlbmNpbCAmJiBhdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgaW50ZXJuYWxEZXB0aFN0
ZW5jaWxGb3JtYXQgPSBHTF9ERVBUSDI0X1NURU5DSUw4X0VYVDsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9ERVBUSF9DT01QT05FTlQ7
CisgICAgfQorCisgICAgLy8gcmVzaXplIG11bHRpc2FtcGxlIEZCTworICAgIGlmIChtdWx0aXNh
bXBsZSgpKSB7CisgICAgICAgIEdMaW50IG1heFNhbXBsZUNvdW50OworICAgICAgICAKKyAgICAg
ICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9TQU1QTEVTLCAmbWF4
U2FtcGxlQ291bnQpOworICAgICAgICBHTGludCBzYW1wbGVDb3VudCA9IHN0ZDo6bWluKDgsIG1h
eFNhbXBsZUNvdW50KTsKKyAgICAgICAgaWYgKHNhbXBsZUNvdW50ID4gbWF4U2FtcGxlQ291bnQp
CisgICAgICAgICAgICBzYW1wbGVDb3VudCA9IG1heFNhbXBsZUNvdW50OworICAgICAgICAKKyAg
ICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKKworICAgICAgICBtX2NvbnRleHQtPmJpbmRSZW5k
ZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZUNv
bG9yQnVmZmVyKTsKKyAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnJlbmRlcmJ1
ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBz
YW1wbGVDb3VudCwgaW50ZXJuYWxDb2xvckZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5o
ZWlnaHQoKSk7CisgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRU
QUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVD
b2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRl
cy5kZXB0aCkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZm
ZXIpOworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBzYW1w
bGVDb3VudCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3Np
emUuaGVpZ2h0KCkpOworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCkKKyAgICAg
ICAgICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVO
VCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZURlcHRoU3Rl
bmNpbEJ1ZmZlcik7CisgICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAg
ICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIEdy
YXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxC
dWZmZXIpOworICAgICAgICB9CisgICAgICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKKyAgICAgICAgaWYgKG1fY29udGV4
dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIp
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgeworICAgICAgICAg
ICAgLy8gQ2xlYW51cAorICAgICAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIHJlc2l6ZSByZWd1bGFyIEZCTworICAgIG1fY29u
dGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9m
Ym8pOworCisgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgbV9jb2xvckJ1ZmZlcik7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0LCBtX3NpemUu
d2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBjb2xvckZvcm1hdCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUsIDApOworICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJl
MkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09M
T1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFLCBtX2NvbG9yQnVmZmVy
LCAwKTsKKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCAwKTsKKyAgICBpZiAoIW11bHRpc2FtcGxlKCkgJiYgKGF0dHJpYnV0ZXMuc3RlbmNp
bCB8fCBhdHRyaWJ1dGVzLmRlcHRoKSkgeworICAgICAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJi
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZm
ZXIpOworICAgICAgICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIG1fc2l6ZS53
aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOworICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2ls
KQorICAgICAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFD
SE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVm
ZmVyKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICBtX2NvbnRl
eHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNE
OjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgbV9jb250ZXh0
LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOwor
ICAgIH0KKyAgICBpZiAobV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
X0NPTVBMRVRFKSB7CisgICAgICAgIC8vIENsZWFudXAKKyAgICAgICAgY2xlYXIoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtdWx0aXNhbXBsZSgpKQorICAgICAgICBtX2Nv
bnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1f
bXVsdGlzYW1wbGVGQk8pOworCisgICAgLy8gSW5pdGlhbGl6ZSByZW5kZXJidWZmZXJzIHRvIDAu
CisgICAgR0xib29sZWFuIGNvbG9yTWFza1tdID0ge3RydWUsIHRydWUsIHRydWUsIHRydWV9LCBk
ZXB0aE1hc2sgPSB0cnVlLCBzdGVuY2lsTWFzayA9IHRydWU7CisgICAgR0xib29sZWFuIGlzU2Np
c3NvckVuYWJsZWQgPSBmYWxzZTsKKyAgICBHTGJvb2xlYW4gaXNEaXRoZXJFbmFibGVkID0gZmFs
c2U7CisgICAgR0xiaXRmaWVsZCBjbGVhck1hc2sgPSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1Jf
QlVGRkVSX0JJVDsKKyAgICBtX2NvbnRleHQtPmdldEJvb2xlYW52KEdyYXBoaWNzQ29udGV4dDNE
OjpDT0xPUl9XUklURU1BU0ssIGNvbG9yTWFzayk7CisgICAgbV9jb250ZXh0LT5jb2xvck1hc2so
dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpIHsKKyAg
ICAgICAgbV9jb250ZXh0LT5nZXRCb29sZWFudihHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfV1JJ
VEVNQVNLLCAmZGVwdGhNYXNrKTsKKyAgICAgICAgbV9jb250ZXh0LT5kZXB0aE1hc2sodHJ1ZSk7
CisgICAgICAgIGNsZWFyTWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJ
VDsKKyAgICB9CisgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCkgeworICAgICAgICBtX2NvbnRl
eHQtPmdldEJvb2xlYW52KEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1dSSVRFTUFTSywgJnN0
ZW5jaWxNYXNrKTsKKyAgICAgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFzayh0cnVlKTsKKyAgICAg
ICAgY2xlYXJNYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQ7Cisg
ICAgfQorICAgIGlzU2Npc3NvckVuYWJsZWQgPSBtX2NvbnRleHQtPmlzRW5hYmxlZChHcmFwaGlj
c0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKKyAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CisgICAgaXNEaXRoZXJFbmFibGVkID0gbV9jb250
ZXh0LT5pc0VuYWJsZWQoR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUik7CisgICAgbV9jb250ZXh0
LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVIpOworCisgICAgbV9jb250ZXh0LT5j
bGVhcihjbGVhck1hc2spOworCisgICAgbV9jb250ZXh0LT5jb2xvck1hc2soY29sb3JNYXNrWzBd
LCBjb2xvck1hc2tbMV0sIGNvbG9yTWFza1syXSwgY29sb3JNYXNrWzNdKTsKKyAgICBpZiAoYXR0
cmlidXRlcy5kZXB0aCkKKyAgICAgICAgbV9jb250ZXh0LT5kZXB0aE1hc2soZGVwdGhNYXNrKTsK
KyAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKQorICAgICAgICBtX2NvbnRleHQtPnN0ZW5jaWxN
YXNrKHN0ZW5jaWxNYXNrKTsKKyAgICBpZiAoaXNTY2lzc29yRW5hYmxlZCkKKyAgICAgICAgbV9j
b250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CisgICAgZWxz
ZQorICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1Jf
VEVTVCk7CisgICAgaWYgKGlzRGl0aGVyRW5hYmxlZCkKKyAgICAgICAgbV9jb250ZXh0LT5lbmFi
bGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUik7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRl
eHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUik7CisKKyAgICBtX2NvbnRleHQt
PmZsdXNoKCk7Cit9CisKK3ZvaWQgRHJhd2luZ0J1ZmZlcjo6Y29tbWl0KGxvbmcgeCwgbG9uZyB5
LCBsb25nIHdpZHRoLCBsb25nIGhlaWdodCkKIHsKICAgICBpZiAoIW1fY29udGV4dCkKICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKKyAgICBpZiAod2lkdGggPCAwKQorICAgICAgICB3aWR0aCA9
IG1fc2l6ZS53aWR0aCgpOworICAgIGlmIChoZWlnaHQgPCAwKQorICAgICAgICBoZWlnaHQgPSBt
X3NpemUuaGVpZ2h0KCk7CisgICAgICAgIAorICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgCisgICAgaWYgKG1fbXVsdGlzYW1wbGVGQk8pIHsKKyAgICAgICAgbV9jb250
ZXh0LT5iaW5kRnJhbWVidWZmZXIoRXh0ZW5zaW9uczNEOjpSRUFEX0ZSQU1FQlVGRkVSLCBtX211
bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoRXh0ZW5z
aW9uczNEOjpEUkFXX0ZSQU1FQlVGRkVSLCBtX2Zibyk7CisgICAgICAgIG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5ibGl0RnJhbWVidWZmZXIoeCwgeSwgd2lkdGgsIGhlaWdodCwgeCwgeSwg
d2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQsIEdyYXBo
aWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgIH0KKyAgICAKICAgICBtX2NvbnRleHQtPmJpbmRG
cmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKK30KKwor
dm9pZCBEcmF3aW5nQnVmZmVyOjpiaW5kKCkKK3sKKyAgICBpZiAoIW1fY29udGV4dCkKKyAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8gPyBtX211bHRpc2Ft
cGxlRkJPIDogbV9mYm8pOwogICAgIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgbV9zaXplLndp
ZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgJKHJldmlzaW9uIDcxNTY3KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC02NCwxMyArNjQsMTggQEAgcHVibGljOgogICAgIC8vIHRvIHByZXZlbnQgaW52YWxpZCBhY2Nl
c3NlcyB0byB0aGUgcmVzb3VyY2VzLgogICAgIHZvaWQgY2xlYXIoKTsKICAgICAKKyAgICAvLyBD
b3BpZXMgdGhlIG11bHRpc2FtcGxlIGNvbG9yIGJ1ZmZlciB0byB0aGUgbm9ybWFsIGNvbG9yIGJ1
ZmZlciBhbmQgbGVhdmVzIG1fZmJvIGJvdW5kCisgICAgdm9pZCBjb21taXQobG9uZyB4ID0gMCwg
bG9uZyB5ID0gMCwgbG9uZyB3aWR0aCA9IC0xLCBsb25nIGhlaWdodCA9IC0xKTsKKyAgICAKKyAg
ICBib29sIG11bHRpc2FtcGxlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0ICYmIG1fY29udGV4
dC0+YXR0cmlidXRlcygpLmFudGlhbGlhcyAmJiBtX211bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9y
dGVkOyB9CisgICAgCisgICAgUGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybUNvbG9yQnVmZmVyKCkg
Y29uc3Q7CisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgUGxhdGZvcm1M
YXllciogcGxhdGZvcm1MYXllcigpOwogICAgIHZvaWQgcHVibGlzaFRvUGxhdGZvcm1MYXllcigp
OwogI2VuZGlmCiAKLSAgICB1bnNpZ25lZCBnZXRSZW5kZXJpbmdSZXN1bHRzQXNUZXh0dXJlKCk7
Ci0KICNpZiBQTEFURk9STShDSFJPTUlVTSkKICAgICBjbGFzcyBXaWxsUHVibGlzaENhbGxiYWNr
IDogcHVibGljIE5vbmNvcHlhYmxlIHsKICAgICBwdWJsaWM6CkBAIC05MSw3ICs5Niw5IEBAIHBy
aXZhdGU6CiAKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKICAgICBJ
bnRTaXplIG1fc2l6ZTsKKyAgICBib29sIG1fbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQ7
CiAgICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZibzsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fbXVs
dGlzYW1wbGVGQk87CiAKICNpZiBQTEFURk9STShDSFJPTUlVTSkKICAgICBPd25QdHI8V2lsbFB1
Ymxpc2hDYWxsYmFjaz4gbV9jYWxsYmFjazsKQEAgLTEwMCw2ICsxMDcsMTMgQEAgcHJpdmF0ZToK
IAogI2lmIFBMQVRGT1JNKE1BQykKICAgICBSZXRhaW5QdHI8V2ViR0xMYXllcj4gbV9wbGF0Zm9y
bUxheWVyOworCisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2NvbG9yQnVmZmVyOworICAgIFBsYXRm
b3JtM0RPYmplY3QgbV9kZXB0aFN0ZW5jaWxCdWZmZXI7CisKKyAgICAvLyBGb3IgbXVsdGlzYW1w
bGluZworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyOworICAg
IFBsYXRmb3JtM0RPYmplY3QgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcjsKICNlbmRp
ZgogfTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvbWFjL0RyYXdpbmdC
dWZmZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
bWFjL0RyYXdpbmdCdWZmZXJNYWMubW0JKHJldmlzaW9uIDcxNTY3KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvbWFjL0RyYXdpbmdCdWZmZXJNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTI5LDYgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKIAorI2luY2x1
ZGUgIkV4dGVuc2lvbnMzRC5oIgogI2luY2x1ZGUgIldlYkdMTGF5ZXIuaCIKIAogI2ltcG9ydCAi
QmxvY2tFeGNlcHRpb25zLmgiCkBAIC0zOSw2ICs0MCwxMSBAQCBEcmF3aW5nQnVmZmVyOjpEcmF3
aW5nQnVmZmVyKEdyYXBoaWNzQ29uCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1f
c2l6ZShzaXplKQogICAgICwgbV9mYm8oY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKSkKKyAg
ICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKKyAgICAsIG1fY29sb3JCdWZmZXIoMCkKKyAgICAsIG1f
ZGVwdGhTdGVuY2lsQnVmZmVyKDApCisgICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkK
KyAgICAsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIoMCkKIHsKICAgICBBU1NFUlQo
bV9mYm8pOwogICAgIGlmICghbV9mYm8pIHsKQEAgLTUzLDYgKzU5LDQwIEBAIERyYXdpbmdCdWZm
ZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb24KICAgICAgICAgW21fcGxhdGZvcm1MYXllci5n
ZXQoKSBzZXROYW1lOkAiRHJhd2luZ0J1ZmZlciBMYXllciJdOwogI2VuZGlmICAgIAogICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKKworICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgdG8gcmVu
ZGVyIGludG8KKyAgICBtX2NvbG9yQnVmZmVyID0gY29udGV4dC0+Y3JlYXRlVGV4dHVyZSgpOwor
ICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBt
X2NvbG9yQnVmZmVyKTsKKyAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJmKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBH
cmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJmKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9N
SU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAgICBjb250ZXh0LT50ZXhQ
YXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAg
ICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFN
UF9UT19FREdFKTsKKyAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgMCk7CisgICAgCisgICAgLy8gQ3JlYXRlIHRoZSBGQk8KKyAgICBtX2ZibyA9
IGNvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgQVNTRVJUKG1fZmJvKTsKKyAgICBp
ZiAoIW1fZmJvKSB7CisgICAgICAgIGNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgICAgIAorICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzJiBhdHRyaWJ1
dGVzID0gY29udGV4dC0+YXR0cmlidXRlcygpOworICAgIAorICAgIC8vIENyZWF0ZSB0aGUgc3Rl
bmNpbCBhbmQgZGVwdGggYnVmZmVyIGlmIG5lZWRlZAorICAgIGlmICghbXVsdGlzYW1wbGUoKSAm
JiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpKQorICAgICAgICBtX2Rl
cHRoU3RlbmNpbEJ1ZmZlciA9IGNvbnRleHQtPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworCisgICAg
Ly8gY3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPCisgICAgaWYgKG11bHRpc2FtcGxlKCkpIHsKKyAg
ICAgICAgbV9tdWx0aXNhbXBsZUZCTyA9IGNvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7Cisg
ICAgICAgIGNvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBtX211bHRpc2FtcGxlQ29sb3JCdWZm
ZXIgPSBjb250ZXh0LT5jcmVhdGVSZW5kZXJidWZmZXIoKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0
ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgbV9tdWx0aXNhbXBs
ZURlcHRoU3RlbmNpbEJ1ZmZlciA9IGNvbnRleHQtPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworICAg
IH0KKyAgICAKKyAgICByZXNldChzaXplKTsKIH0KIAogRHJhd2luZ0J1ZmZlcjo6fkRyYXdpbmdC
dWZmZXIoKQpAQCAtNjAsMTggKzEwMCw2IEBAIERyYXdpbmdCdWZmZXI6On5EcmF3aW5nQnVmZmVy
KCkKICAgICBjbGVhcigpOwogfQogCi12b2lkIERyYXdpbmdCdWZmZXI6OnJlc2V0KGNvbnN0IElu
dFNpemUmIG5ld1NpemUpCi17Ci0gICAgaWYgKCFtX2NvbnRleHQpCi0gICAgICAgIHJldHVybjsK
LSAgICAgICAgCi0gICAgaWYgKG1fc2l6ZSA9PSBuZXdTaXplKQotICAgICAgICByZXR1cm47Ci0g
ICAgbV9zaXplID0gbmV3U2l6ZTsKLQotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIG1fc2l6
ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgMCk7Ci19Ci0KICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCiBQbGF0Zm9ybUxheWVyKiBEcmF3aW5nQnVmZmVyOjpwbGF0Zm9y
bUxheWVyKCkKIHsKQEAgLTc5LDYgKzEwNywxMSBAQCBQbGF0Zm9ybUxheWVyKiBEcmF3aW5nQnVm
ZmVyOjpwbGF0Zm9ybUxhCiB9CiAjZW5kaWYKIAorUGxhdGZvcm0zRE9iamVjdCBEcmF3aW5nQnVm
ZmVyOjpwbGF0Zm9ybUNvbG9yQnVmZmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9jb2xvckJ1
ZmZlcjsKK30KKwogfQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
b3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcAkocmV2aXNpb24gNzE1
NjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVu
R0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSwxNCBAQCBib29sIEV4dGVuc2lvbnMz
RE9wZW5HTDo6c3VwcG9ydHMoY29uc3QgCiAgICAgICAgICAgICBtX2F2YWlsYWJsZUV4dGVuc2lv
bnMuYWRkKGF2YWlsYWJsZUV4dGVuc2lvbnNbaV0pOwogICAgICAgICBtX2luaXRpYWxpemVkQXZh
aWxhYmxlRXh0ZW5zaW9ucyA9IHRydWU7CiAgICAgfQorICAgIAorICAgIC8vIEdMX0FOR0xFX2Zy
YW1lYnVmZmVyX2JsaXQgYW5kIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIGFyZSAi
ZmFrZSIuIFRoZXkgYXJlIGltcGxlbWVudGVkIHVzaW5nIG90aGVyCisgICAgLy8gZXh0ZW5zaW9u
cy4gSW4gcGFydGljdWxhciBHTF9FWFRfZnJhbWVidWZmZXJfYmxpdCBhbmQgR0xfRVhUX2ZyYW1l
YnVmZmVyX211bHRpc2FtcGxlCisgICAgaWYgKG5hbWUgPT0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVy
X2JsaXQiKQorICAgICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJH
TF9FWFRfZnJhbWVidWZmZXJfYmxpdCIpOworICAgIGlmIChuYW1lID09ICJHTF9BTkdMRV9mcmFt
ZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpCisgICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lv
bnMuY29udGFpbnMoIkdMX0VYVF9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOworICAgICAgICAK
ICAgICByZXR1cm4gbV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKG5hbWUpOwogfQogCkBA
IC03Nyw2ICs4NSwxNiBAQCBpbnQgRXh0ZW5zaW9uczNET3BlbkdMOjpnZXRHcmFwaGljc1Jlc2V0
CiAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUjsKIH0KIAordm9pZCBFeHRl
bnNpb25zM0RPcGVuR0w6OmJsaXRGcmFtZWJ1ZmZlcihsb25nIHNyY1gwLCBsb25nIHNyY1kwLCBs
b25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRzdFgwLCBsb25nIGRzdFkwLCBsb25nIGRzdFgx
LCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVuc2lnbmVkIGxvbmcgZmlsdGVyKQor
eworICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQoc3JjWDAsIHNyY1kwLCBzcmNYMSwgc3JjWTEs
IGRzdFgwLCBkc3RZMCwgZHN0WDEsIGRzdFkxLCBtYXNrLCBmaWx0ZXIpOworfQorCit2b2lkIEV4
dGVuc2lvbnMzRE9wZW5HTDo6cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKHVuc2lnbmVk
IGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMsIHVuc2lnbmVkIGxvbmcgaW50ZXJu
YWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KQorewor
ICAgIDo6Z2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodGFyZ2V0LCBzYW1wbGVzLCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaAkocmV2aXNp
b24gNzE1NjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25z
M0RPcGVuR0wuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsOCBAQCBwdWJsaWM6CiAgICAg
Ly8gRXh0ZW5zaW9uczNEIG1ldGhvZHMuCiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzKGNvbnN0
IFN0cmluZyYpOwogICAgIHZpcnR1YWwgaW50IGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgYmxpdEZyYW1lYnVmZmVyKGxvbmcgc3JjWDAsIGxvbmcgc3JjWTAs
IGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcgZHN0WTAsIGxvbmcgZHN0
WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyBmaWx0ZXIp
OworICAgIHZpcnR1YWwgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodW5zaWdu
ZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBpbnRl
cm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOyAg
ICAKIAogcHJpdmF0ZToKICAgICAvLyBUaGlzIGNsYXNzIG9ubHkgbmVlZHMgdG8gYmUgaW5zdGFu
dGlhdGVkIGJ5IEdyYXBoaWNzQ29udGV4dDNEIGltcGxlbWVudGF0aW9ucy4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73427</attachid>
            <date>2010-11-09 14:57:55 -0800</date>
            <delta_ts>2010-11-10 10:48:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49206-20101109145754.patch</filename>
            <type>text/plain</type>
            <size>21603</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTY4MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzYgQEAKKzIwMTAtMTEtMDkgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBtdWx0aXNhbXBsaW5nIHN1cHBvcnQgdG8gRHJhd2luZ0J1ZmZlci4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MjA2CisKKyAgICAgICAgQWRkZWQg
c3VwcG9ydCBmb3IgdGhlIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQgYW5kIEdMX0FOR0xFX2Zy
YW1lYnVmZmVyX211bHRpc2FtcGxlCisgICAgICAgIGV4dGVuc2lvbnMgdG8gRXh0ZW5zaW9uczNE
LiBUaGVuIEkgdXNlIHRoZXNlIHRvIGFkZCBtdWx0aXNhbXBsZSBzdXBwb3J0IHRvIERyYXdpbmdC
dWZmZXIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1Db2xvckJ1ZmZl
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRyYXdpbmdCdWZmZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZm
ZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OmNvbW1pdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpiaW5kKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2lu
Z0J1ZmZlcjo6bXVsdGlzYW1wbGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9t
YWMvRHJhd2luZ0J1ZmZlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6
OkRyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGxhdGZv
cm1MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpwbGF0Zm9ybUNvbG9y
QnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNE
T3BlbkdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRE9wZW5HTDo6c3VwcG9y
dHMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpibGl0RnJhbWVidWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpyZW5kZXJidWZmZXJT
dG9yYWdlTXVsdGlzYW1wbGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9F
eHRlbnNpb25zM0RPcGVuR0wuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0lt
YWdlQnVmZmVyU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6
CisKIDIwMTAtMTEtMDkgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9FeHRlbnNpb25zM0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0V4dGVuc2lvbnMzRC5oCShyZXZpc2lvbiA3MTU2NykKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRXh0ZW5zaW9uczNELmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAg
cHVibGljOgogICAgIC8vICAgR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEKICAgICAvLyAgIEdMX0FS
Ql9yb2J1c3RuZXNzCiAgICAgLy8gICBHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwgLyBHTF9P
RVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwKKyAgICAvLyAgIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2Js
aXQgLyBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZQogCiAgICAgLy8gVGFrZXMgZnVs
bCBuYW1lIG9mIGV4dGVuc2lvbjsgZm9yIGV4YW1wbGUsCiAgICAgLy8gIkdMX0VYVF90ZXh0dXJl
X2Zvcm1hdF9CR1JBODg4OCIuCkBAIC02MywxMSArNjQsMjggQEAgcHVibGljOgogICAgICAgICBV
TktOT1dOX0NPTlRFWFRfUkVTRVRfQVJCID0gMHg4MjU1LAogCiAgICAgICAgIC8vIEdMX0VYVC9P
RVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwgZW51bXMKLSAgICAgICAgREVQVEgyNF9TVEVOQ0lMOCA9
IDB4ODhGMAorICAgICAgICBERVBUSDI0X1NURU5DSUw4ID0gMHg4OEYwLAorICAgICAgICAKKyAg
ICAgICAgLy8gR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCBuYW1lcworICAgICAgICBSRUFEX0ZS
QU1FQlVGRkVSID0gMHg4Q0E4LAorICAgICAgICBEUkFXX0ZSQU1FQlVGRkVSID0gMHg4Q0E5LAor
ICAgICAgICBEUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkcgPSAweDhDQTYsIAorICAgICAgICBSRUFE
X0ZSQU1FQlVGRkVSX0JJTkRJTkcgPSAweDhDQUEsCisgICAgICAgIAorICAgICAgICAvLyBHTF9B
TkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSBuYW1lcworICAgICAgICBSRU5ERVJCVUZGRVJf
U0FNUExFUyA9IDB4OENBQiwKKyAgICAgICAgRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNB
TVBMRSA9IDB4OEQ1NiwKKyAgICAgICAgTUFYX1NBTVBMRVMgPSAweDhENTcKICAgICB9OwogCiAg
ICAgLy8gR0xfQVJCX3JvYnVzdG5lc3MKICAgICB2aXJ0dWFsIGludCBnZXRHcmFwaGljc1Jlc2V0
U3RhdHVzQVJCKCkgPSAwOworICAgIAorICAgIC8vIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQK
KyAgICB2aXJ0dWFsIHZvaWQgYmxpdEZyYW1lYnVmZmVyKGxvbmcgc3JjWDAsIGxvbmcgc3JjWTAs
IGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcgZHN0WTAsIGxvbmcgZHN0
WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyBmaWx0ZXIp
ID0gMDsKKyAgICAKKyAgICAvLyBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZQorICAg
IHZpcnR1YWwgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZv
cm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpID0gMDsgICAg
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0u
Y3BwCShyZXZpc2lvbiA3MTU2NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDcgKzE0
NSw3IEBAIFBsYXRmb3JtTGF5ZXIqIERyYXdpbmdCdWZmZXI6OnBsYXRmb3JtTGEKIH0KICNlbmRp
ZgogCi11bnNpZ25lZCBEcmF3aW5nQnVmZmVyOjpnZXRSZW5kZXJpbmdSZXN1bHRzQXNUZXh0dXJl
KCkKK1BsYXRmb3JtM0RPYmplY3QgRHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1Db2xvckJ1ZmZlcigp
CiB7CiAgICAgcmV0dXJuIG1faW50ZXJuYWwtPm9mZnNjcmVlbkNvbG9yVGV4dHVyZTsKIH0KSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3Bw
CShyZXZpc2lvbiA3MTU2NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdp
bmdCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMSArMzQsMTQgQEAKIAogI2luY2x1
ZGUgIkRyYXdpbmdCdWZmZXIuaCIKIAorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gRHJhd2luZ0J1ZmZl
cjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRTaXplJiBzaXpl
KQogewogICAgIFJlZlB0cjxEcmF3aW5nQnVmZmVyPiBkcmF3aW5nQnVmZmVyID0gYWRvcHRSZWYo
bmV3IERyYXdpbmdCdWZmZXIoY29udGV4dCwgc2l6ZSkpOworICAgIGRyYXdpbmdCdWZmZXItPm1f
bXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQgPSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCkt
PnN1cHBvcnRzKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IikgJiYgY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKTsK
ICAgICByZXR1cm4gKGRyYXdpbmdCdWZmZXItPm1fY29udGV4dCkgPyBkcmF3aW5nQnVmZmVyLnJl
bGVhc2UoKSA6IDA7CiB9CiAKQEAgLTQ2LDIxICs0OSwxOTEgQEAgdm9pZCBEcmF3aW5nQnVmZmVy
OjpjbGVhcigpCiB7CiAgICAgaWYgKCFtX2NvbnRleHQpCiAgICAgICAgIHJldHVybjsKLQorICAg
ICAgICAKICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1fY29udGV4
dC0+ZGVsZXRlVGV4dHVyZShtX2NvbG9yQnVmZmVyKTsKKyAgICBtX2NvbG9yQnVmZmVyID0gMDsK
KyAgICAKKyAgICBpZiAobV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKSB7CisgICAgICAgIG1fY29u
dGV4dC0+ZGVsZXRlUmVuZGVyYnVmZmVyKG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAg
ICAgIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlciA9IDA7CisgICAgfQorICAgIAorICAgIGlmICht
X211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKSB7CisgICAgICAgIG1fY29udGV4dC0+ZGVs
ZXRlUmVuZGVyYnVmZmVyKG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAg
ICBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyID0gMDsKKyAgICB9CisgICAgCisgICAg
aWYgKG1fZGVwdGhTdGVuY2lsQnVmZmVyKSB7CisgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlUmVu
ZGVyYnVmZmVyKG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgbV9kZXB0aFN0ZW5jaWxC
dWZmZXIgPSAwOworICAgIH0KKyAgICAKKyAgICBpZiAobV9tdWx0aXNhbXBsZUZCTykgeworICAg
ICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZUZyYW1l
YnVmZmVyKG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBtX211bHRpc2FtcGxlRkJPID0gMDsK
KyAgICB9CisgICAgICAgIAogICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwogICAgIG1fY29udGV4dC0+ZGVsZXRlRnJh
bWVidWZmZXIobV9mYm8pOwogICAgIG1fZmJvID0gMDsKLQorICAgIAogICAgIG1fY29udGV4dC5j
bGVhcigpOwogfQogCi12b2lkIERyYXdpbmdCdWZmZXI6OmJpbmQoKQordm9pZCBEcmF3aW5nQnVm
ZmVyOjpyZXNldChjb25zdCBJbnRTaXplJiBuZXdTaXplKQoreworICAgIGlmIChtX3NpemUgPT0g
bmV3U2l6ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2l6ZSA9IG5ld1NpemU7CisKKyAgICBp
ZiAoIW1fY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBtX2NvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIAorICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dDNE
OjpBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzID0gbV9jb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRl
cygpOworICAgIEdMdWludCBpbnRlcm5hbENvbG9yRm9ybWF0LCBjb2xvckZvcm1hdCwgaW50ZXJu
YWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSAwOworICAgIGlmIChhdHRyaWJ1dGVzLmFscGhhKSB7Cisg
ICAgICAgIGludGVybmFsQ29sb3JGb3JtYXQgPSBHTF9SR0JBODsKKyAgICAgICAgY29sb3JGb3Jt
YXQgPSBHTF9SR0JBOworICAgIH0gZWxzZSB7CisgICAgICAgIGludGVybmFsQ29sb3JGb3JtYXQg
PSBHTF9SR0I4OworICAgICAgICBjb2xvckZvcm1hdCA9IEdMX1JHQjsKKyAgICB9CisgICAgaWYg
KGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKSB7CisgICAgICAgIC8vIFdl
IGRvbid0IGFsbG93IHRoZSBsb2dpYyB3aGVyZSBzdGVuY2lsIGlzIHJlcXVpcmVkIGFuZCBkZXB0
aCBpcyBub3QuCisgICAgICAgIC8vIFNlZSBHcmFwaGljc0NvbnRleHQzRCBjb25zdHJ1Y3Rvci4K
KyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCAmJiBhdHRyaWJ1dGVzLmRlcHRoKQorICAg
ICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBHTF9ERVBUSDI0X1NURU5DSUw4
X0VYVDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3Jt
YXQgPSBHTF9ERVBUSF9DT01QT05FTlQ7CisgICAgfQorCisgICAgLy8gcmVzaXplIG11bHRpc2Ft
cGxlIEZCTworICAgIGlmIChtdWx0aXNhbXBsZSgpKSB7CisgICAgICAgIEdMaW50IG1heFNhbXBs
ZUNvdW50OworICAgICAgICAKKyAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNp
b25zM0Q6Ok1BWF9TQU1QTEVTLCAmbWF4U2FtcGxlQ291bnQpOworICAgICAgICBHTGludCBzYW1w
bGVDb3VudCA9IHN0ZDo6bWluKDgsIG1heFNhbXBsZUNvdW50KTsKKyAgICAgICAgaWYgKHNhbXBs
ZUNvdW50ID4gbWF4U2FtcGxlQ291bnQpCisgICAgICAgICAgICBzYW1wbGVDb3VudCA9IG1heFNh
bXBsZUNvdW50OworICAgICAgICAKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKKworICAg
ICAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSLCBzYW1wbGVDb3VudCwgaW50ZXJuYWxDb2xvckZvcm1hdCwg
bV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIG1fY29udGV4dC0+ZnJh
bWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFw
aGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5E
RVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChhdHRyaWJ1
dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkgeworICAgICAgICAgICAgbV9jb250ZXh0
LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fbXVs
dGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSLCBzYW1wbGVDb3VudCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3Jt
YXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOworICAgICAgICAgICAgaWYgKGF0
dHJpYnV0ZXMuc3RlbmNpbCkKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
UiwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICBpZiAoYXR0
cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1f
bXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICB9CisgICAgICAgIG1fY29u
dGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAw
KTsKKyAgICAgICAgaWYgKG1fY29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
Ul9DT01QTEVURSkgeworICAgICAgICAgICAgLy8gQ2xlYW51cAorICAgICAgICAgICAgY2xlYXIo
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIHJlc2l6
ZSByZWd1bGFyIEZCTworICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworCisgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVy
ZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZlcik7CisgICAgbV9j
b250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBpbnRl
cm5hbENvbG9yRm9ybWF0LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBjb2xv
ckZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApOworICAgIG1fY29u
dGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFLCBtX2NvbG9yQnVmZmVyLCAwKTsKKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsKKyAgICBpZiAoIW11bHRpc2FtcGxl
KCkgJiYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKSkgeworICAgICAg
ICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICBtX2NvbnRleHQtPnJlbmRlcmJ1
ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgaW50ZXJuYWxEZXB0
aFN0ZW5jaWxGb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOworICAgICAg
ICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKQorICAgICAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJC
VUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuZGVw
dGgpCisgICAgICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFD
SE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVm
ZmVyKTsKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEOjpSRU5ERVJCVUZGRVIsIDApOworICAgIH0KKyAgICBpZiAobV9jb250ZXh0LT5jaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7CisgICAgICAgIC8vIENsZWFudXAK
KyAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtdWx0
aXNhbXBsZSgpKQorICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworCisgICAgLy8gSW5pdGlh
bGl6ZSByZW5kZXJidWZmZXJzIHRvIDAuCisgICAgR0xib29sZWFuIGNvbG9yTWFza1tdID0ge3Ry
dWUsIHRydWUsIHRydWUsIHRydWV9LCBkZXB0aE1hc2sgPSB0cnVlLCBzdGVuY2lsTWFzayA9IHRy
dWU7CisgICAgR0xib29sZWFuIGlzU2Npc3NvckVuYWJsZWQgPSBmYWxzZTsKKyAgICBHTGJvb2xl
YW4gaXNEaXRoZXJFbmFibGVkID0gZmFsc2U7CisgICAgR0xiaXRmaWVsZCBjbGVhck1hc2sgPSBH
cmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVDsKKyAgICBtX2NvbnRleHQtPmdldEJv
b2xlYW52KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9XUklURU1BU0ssIGNvbG9yTWFzayk7Cisg
ICAgbV9jb250ZXh0LT5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgaWYg
KGF0dHJpYnV0ZXMuZGVwdGgpIHsKKyAgICAgICAgbV9jb250ZXh0LT5nZXRCb29sZWFudihHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfV1JJVEVNQVNLLCAmZGVwdGhNYXNrKTsKKyAgICAgICAgbV9j
b250ZXh0LT5kZXB0aE1hc2sodHJ1ZSk7CisgICAgICAgIGNsZWFyTWFzayB8PSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVDsKKyAgICB9CisgICAgaWYgKGF0dHJpYnV0ZXMuc3Rl
bmNpbCkgeworICAgICAgICBtX2NvbnRleHQtPmdldEJvb2xlYW52KEdyYXBoaWNzQ29udGV4dDNE
OjpTVEVOQ0lMX1dSSVRFTUFTSywgJnN0ZW5jaWxNYXNrKTsKKyAgICAgICAgbV9jb250ZXh0LT5z
dGVuY2lsTWFzayh0cnVlKTsKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNE
OjpTVEVOQ0lMX0JVRkZFUl9CSVQ7CisgICAgfQorICAgIGlzU2Npc3NvckVuYWJsZWQgPSBtX2Nv
bnRleHQtPmlzRW5hYmxlZChHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKKyAgICBt
X2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CisgICAg
aXNEaXRoZXJFbmFibGVkID0gbV9jb250ZXh0LT5pc0VuYWJsZWQoR3JhcGhpY3NDb250ZXh0M0Q6
OkRJVEhFUik7CisgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpESVRI
RVIpOworCisgICAgbV9jb250ZXh0LT5jbGVhcihjbGVhck1hc2spOworCisgICAgbV9jb250ZXh0
LT5jb2xvck1hc2soY29sb3JNYXNrWzBdLCBjb2xvck1hc2tbMV0sIGNvbG9yTWFza1syXSwgY29s
b3JNYXNrWzNdKTsKKyAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgbV9jb250ZXh0
LT5kZXB0aE1hc2soZGVwdGhNYXNrKTsKKyAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKQorICAg
ICAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrKHN0ZW5jaWxNYXNrKTsKKyAgICBpZiAoaXNTY2lz
c29yRW5hYmxlZCkKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OlNDSVNTT1JfVEVTVCk7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CisgICAgaWYgKGlzRGl0aGVyRW5hYmxlZCkK
KyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUik7Cisg
ICAgZWxzZQorICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRJ
VEhFUik7CisKKyAgICBtX2NvbnRleHQtPmZsdXNoKCk7Cit9CisKK3ZvaWQgRHJhd2luZ0J1ZmZl
cjo6Y29tbWl0KGxvbmcgeCwgbG9uZyB5LCBsb25nIHdpZHRoLCBsb25nIGhlaWdodCkKIHsKICAg
ICBpZiAoIW1fY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICBpZiAod2lk
dGggPCAwKQorICAgICAgICB3aWR0aCA9IG1fc2l6ZS53aWR0aCgpOworICAgIGlmIChoZWlnaHQg
PCAwKQorICAgICAgICBoZWlnaHQgPSBtX3NpemUuaGVpZ2h0KCk7CisgICAgICAgIAorICAgIG1f
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgCisgICAgaWYgKG1fbXVsdGlzYW1w
bGVGQk8pIHsKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoRXh0ZW5zaW9uczNE
OjpSRUFEX0ZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKKyAgICAgICAgbV9jb250ZXh0
LT5iaW5kRnJhbWVidWZmZXIoRXh0ZW5zaW9uczNEOjpEUkFXX0ZSQU1FQlVGRkVSLCBtX2Zibyk7
CisgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5ibGl0RnJhbWVidWZmZXIoeCwg
eSwgd2lkdGgsIGhlaWdodCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6
OkNPTE9SX0JVRkZFUl9CSVQsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgIH0KKyAg
ICAKICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIG1fZmJvKTsKK30KKwordm9pZCBEcmF3aW5nQnVmZmVyOjpiaW5kKCkKK3sKKyAg
ICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBtX2NvbnRl
eHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVs
dGlzYW1wbGVGQk8gPyBtX211bHRpc2FtcGxlRkJPIDogbV9mYm8pOwogICAgIG1fY29udGV4dC0+
dmlld3BvcnQoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CiB9CiAKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgJKHJl
dmlzaW9uIDcxNTY3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1
ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCwxMyArNjQsMTggQEAgcHVibGljOgogICAgIC8v
IHRvIHByZXZlbnQgaW52YWxpZCBhY2Nlc3NlcyB0byB0aGUgcmVzb3VyY2VzLgogICAgIHZvaWQg
Y2xlYXIoKTsKICAgICAKKyAgICAvLyBDb3BpZXMgdGhlIG11bHRpc2FtcGxlIGNvbG9yIGJ1ZmZl
ciB0byB0aGUgbm9ybWFsIGNvbG9yIGJ1ZmZlciBhbmQgbGVhdmVzIG1fZmJvIGJvdW5kCisgICAg
dm9pZCBjb21taXQobG9uZyB4ID0gMCwgbG9uZyB5ID0gMCwgbG9uZyB3aWR0aCA9IC0xLCBsb25n
IGhlaWdodCA9IC0xKTsKKyAgICAKKyAgICBib29sIG11bHRpc2FtcGxlKCkgY29uc3QgeyByZXR1
cm4gbV9jb250ZXh0ICYmIG1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5hbnRpYWxp
YXMgJiYgbV9tdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZDsgfQorICAgIAorICAgIFBsYXRm
b3JtM0RPYmplY3QgcGxhdGZvcm1Db2xvckJ1ZmZlcigpIGNvbnN0OworCiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKTsK
ICAgICB2b2lkIHB1Ymxpc2hUb1BsYXRmb3JtTGF5ZXIoKTsKICNlbmRpZgogCi0gICAgdW5zaWdu
ZWQgZ2V0UmVuZGVyaW5nUmVzdWx0c0FzVGV4dHVyZSgpOwotCiAjaWYgUExBVEZPUk0oQ0hST01J
VU0pCiAgICAgY2xhc3MgV2lsbFB1Ymxpc2hDYWxsYmFjayA6IHB1YmxpYyBOb25jb3B5YWJsZSB7
CiAgICAgcHVibGljOgpAQCAtOTEsOCArOTYsMTYgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwogICAgIEludFNpemUgbV9zaXplOworICAgIGJv
b2wgbV9tdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZDsKICAgICBQbGF0Zm9ybTNET2JqZWN0
IG1fZmJvOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9jb2xvckJ1ZmZlcjsKKyAgICBQbGF0Zm9y
bTNET2JqZWN0IG1fZGVwdGhTdGVuY2lsQnVmZmVyOwogCisgICAgLy8gRm9yIG11bHRpc2FtcGxp
bmcKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fbXVsdGlzYW1wbGVGQk87CisgICAgUGxhdGZvcm0z
RE9iamVjdCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXI7CisgICAgUGxhdGZvcm0zRE9iamVjdCBt
X211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyOworICAgIAogI2lmIFBMQVRGT1JNKENIUk9N
SVVNKQogICAgIE93blB0cjxXaWxsUHVibGlzaENhbGxiYWNrPiBtX2NhbGxiYWNrOwogICAgIE93
blB0cjxEcmF3aW5nQnVmZmVySW50ZXJuYWw+IG1faW50ZXJuYWw7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1ZmZlck1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1ZmZlck1hYy5tbQko
cmV2aXNpb24gNzE1NjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJh
d2luZ0J1ZmZlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5j
bHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCiAjaW5j
bHVkZSAiV2ViR0xMYXllci5oIgogCiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKQEAgLTM5
LDYgKzQwLDExIEBAIERyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb24KICAg
ICA6IG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9zaXplKHNpemUpCiAgICAgLCBtX2Zibyhj
b250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpKQorICAgICwgbV9jb2xvckJ1ZmZlcigwKQorICAg
ICwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKKyAg
ICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQorICAgICwgbV9tdWx0aXNhbXBsZURlcHRo
U3RlbmNpbEJ1ZmZlcigwKQogewogICAgIEFTU0VSVChtX2Zibyk7CiAgICAgaWYgKCFtX2Zibykg
ewpAQCAtNTMsNiArNTksNDAgQEAgRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcihHcmFwaGlj
c0NvbgogICAgICAgICBbbV9wbGF0Zm9ybUxheWVyLmdldCgpIHNldE5hbWU6QCJEcmF3aW5nQnVm
ZmVyIExheWVyIl07CiAjZW5kaWYgICAgCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwor
CisgICAgLy8gY3JlYXRlIGEgdGV4dHVyZSB0byByZW5kZXIgaW50bworICAgIG1fY29sb3JCdWZm
ZXIgPSBjb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7CisgICAgY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fY29sb3JCdWZmZXIpOworICAgIGNvbnRl
eHQtPnRleFBhcmFtZXRlcmYoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIp
OworICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmYoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4
dDNEOjpMSU5FQVIpOworICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmko
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIGNvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsKKyAgICAKKyAg
ICAvLyBDcmVhdGUgdGhlIEZCTworICAgIG1fZmJvID0gY29udGV4dC0+Y3JlYXRlRnJhbWVidWZm
ZXIoKTsKKyAgICBBU1NFUlQobV9mYm8pOworICAgIGlmICghbV9mYm8pIHsKKyAgICAgICAgY2xl
YXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgY29uc3QgR3JhcGhp
Y3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMgPSBjb250ZXh0LT5nZXRDb250ZXh0
QXR0cmlidXRlcygpOworICAgIAorICAgIC8vIENyZWF0ZSB0aGUgc3RlbmNpbCBhbmQgZGVwdGgg
YnVmZmVyIGlmIG5lZWRlZAorICAgIGlmICghbXVsdGlzYW1wbGUoKSAmJiAoYXR0cmlidXRlcy5z
dGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpKQorICAgICAgICBtX2RlcHRoU3RlbmNpbEJ1ZmZl
ciA9IGNvbnRleHQtPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworCisgICAgLy8gY3JlYXRlIGEgbXVs
dGlzYW1wbGUgRkJPCisgICAgaWYgKG11bHRpc2FtcGxlKCkpIHsKKyAgICAgICAgbV9tdWx0aXNh
bXBsZUZCTyA9IGNvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgICAgIGNvbnRleHQt
PmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlz
YW1wbGVGQk8pOworICAgICAgICBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIgPSBjb250ZXh0LT5j
cmVhdGVSZW5kZXJidWZmZXIoKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBh
dHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1
ZmZlciA9IGNvbnRleHQtPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworICAgIH0KKyAgICAKKyAgICBy
ZXNldChzaXplKTsKIH0KIAogRHJhd2luZ0J1ZmZlcjo6fkRyYXdpbmdCdWZmZXIoKQpAQCAtNjAs
MjQgKzEwMCwxNSBAQCBEcmF3aW5nQnVmZmVyOjp+RHJhd2luZ0J1ZmZlcigpCiAgICAgY2xlYXIo
KTsKIH0KIAotdm9pZCBEcmF3aW5nQnVmZmVyOjpyZXNldChjb25zdCBJbnRTaXplJiBuZXdTaXpl
KQorUGxhdGZvcm1MYXllciogRHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1MYXllcigpCiB7Ci0gICAg
aWYgKCFtX2NvbnRleHQpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgaWYgKG1fc2l6
ZSA9PSBuZXdTaXplKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zaXplID0gbmV3U2l6ZTsKLQot
ICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
MCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0
KCksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSwgMCk7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1MYXllci5nZXQoKTsKIH0KIAotI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLVBsYXRmb3JtTGF5ZXIqIERyYXdpbmdCdWZm
ZXI6OnBsYXRmb3JtTGF5ZXIoKQorUGxhdGZvcm0zRE9iamVjdCBEcmF3aW5nQnVmZmVyOjpwbGF0
Zm9ybUNvbG9yQnVmZmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybUxheWVyLmdl
dCgpOworICAgIHJldHVybiBtX2NvbG9yQnVmZmVyOwogfQotI2VuZGlmCiAKIH0KIApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25z
M0RPcGVuR0wuY3BwCShyZXZpc2lvbiA3MTU2NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYg
KzY5LDE0IEBAIGJvb2wgRXh0ZW5zaW9uczNET3BlbkdMOjpzdXBwb3J0cyhjb25zdCAKICAgICAg
ICAgICAgIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5hZGQoYXZhaWxhYmxlRXh0ZW5zaW9uc1tpXSk7
CiAgICAgICAgIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVFeHRlbnNpb25zID0gdHJ1ZTsKICAgICB9
CisgICAgCisgICAgLy8gR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCBhbmQgR0xfQU5HTEVfZnJh
bWVidWZmZXJfbXVsdGlzYW1wbGUgYXJlICJmYWtlIi4gVGhleSBhcmUgaW1wbGVtZW50ZWQgdXNp
bmcgb3RoZXIKKyAgICAvLyBleHRlbnNpb25zLiBJbiBwYXJ0aWN1bGFyIEdMX0VYVF9mcmFtZWJ1
ZmZlcl9ibGl0IGFuZCBHTF9FWFRfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUKKyAgICBpZiAobmFt
ZSA9PSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCIpCisgICAgICAgIHJldHVybiBtX2F2YWls
YWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9mcmFtZWJ1ZmZlcl9ibGl0Iik7CisgICAg
aWYgKG5hbWUgPT0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIikKKyAgICAgICAg
cmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX2ZyYW1lYnVmZmVy
X211bHRpc2FtcGxlIik7CisgICAgICAgIAogICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lv
bnMuY29udGFpbnMobmFtZSk7CiB9CiAKQEAgLTc3LDYgKzg1LDE2IEBAIGludCBFeHRlbnNpb25z
M0RPcGVuR0w6OmdldEdyYXBoaWNzUmVzZXQKICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6
Ok5PX0VSUk9SOwogfQogCit2b2lkIEV4dGVuc2lvbnMzRE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVy
KGxvbmcgc3JjWDAsIGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0
WDAsIGxvbmcgZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFz
aywgdW5zaWduZWQgbG9uZyBmaWx0ZXIpCit7CisgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVChz
cmNYMCwgc3JjWTAsIHNyY1gxLCBzcmNZMSwgZHN0WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1h
c2ssIGZpbHRlcik7Cit9CisKK3ZvaWQgRXh0ZW5zaW9uczNET3BlbkdMOjpyZW5kZXJidWZmZXJT
dG9yYWdlTXVsdGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2Ft
cGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwg
dW5zaWduZWQgbG9uZyBoZWlnaHQpCit7CisgICAgOjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0
aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZB
UykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9w
ZW5HTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4
dGVuc2lvbnMzRE9wZW5HTC5oCShyZXZpc2lvbiA3MTU2NykKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw2ICs0MSw4IEBAIHB1YmxpYzoKICAgICAvLyBFeHRlbnNpb25zM0QgbWV0aG9kcy4KICAgICB2
aXJ0dWFsIGJvb2wgc3VwcG9ydHMoY29uc3QgU3RyaW5nJik7CiAgICAgdmlydHVhbCBpbnQgZ2V0
R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpOworICAgIHZpcnR1YWwgdm9pZCBibGl0RnJhbWVidWZm
ZXIobG9uZyBzcmNYMCwgbG9uZyBzcmNZMCwgbG9uZyBzcmNYMSwgbG9uZyBzcmNZMSwgbG9uZyBk
c3RYMCwgbG9uZyBkc3RZMCwgbG9uZyBkc3RYMSwgbG9uZyBkc3RZMSwgdW5zaWduZWQgbG9uZyBt
YXNrLCB1bnNpZ25lZCBsb25nIGZpbHRlcik7CisgICAgdmlydHVhbCB2b2lkIHJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBz
YW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRo
LCB1bnNpZ25lZCBsb25nIGhlaWdodCk7ICAgIAogCiBwcml2YXRlOgogICAgIC8vIFRoaXMgY2xh
c3Mgb25seSBuZWVkcyB0byBiZSBpbnN0YW50aWF0ZWQgYnkgR3JhcGhpY3NDb250ZXh0M0QgaW1w
bGVtZW50YXRpb25zLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdl
QnVmZmVyU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHJldmlzaW9uIDcxNTY3KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExMSw3ICsxMTEsNyBAQCB2b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCog
CiAgICAgaWYgKG1fZGF0YS5tX3BsYXRmb3JtQ29udGV4dC51c2VHUFUoKSAmJiBjb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkpIHsKICAgICAgICAgaWYgKGNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpLT5jYW5BY2NlbGVyYXRlKCkpIHsKICAgICAgICAgICAgIERyYXdpbmdCdWZm
ZXIqIHNvdXJjZURyYXdpbmdCdWZmZXIgPSBtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQuZ3B1Q2Fu
dmFzKCktPmRyYXdpbmdCdWZmZXIoKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNvdXJjZVRleHR1
cmUgPSBzb3VyY2VEcmF3aW5nQnVmZmVyLT5nZXRSZW5kZXJpbmdSZXN1bHRzQXNUZXh0dXJlKCk7
CisgICAgICAgICAgICB1bnNpZ25lZCBzb3VyY2VUZXh0dXJlID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHNvdXJjZURyYXdpbmdCdWZmZXItPnBsYXRmb3JtQ29sb3JCdWZmZXIoKSk7CiAgICAgICAg
ICAgICBGbG9hdFJlY3QgZGVzdFJlY3RGbGlwcGVkKGRlc3RSZWN0KTsKICAgICAgICAgICAgIGRl
c3RSZWN0RmxpcHBlZC5zZXRZKGRlc3RSZWN0LnkoKSArIGRlc3RSZWN0LmhlaWdodCgpKTsKICAg
ICAgICAgICAgIGRlc3RSZWN0RmxpcHBlZC5zZXRIZWlnaHQoLWRlc3RSZWN0LmhlaWdodCgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73507</attachid>
            <date>2010-11-10 10:48:44 -0800</date>
            <delta_ts>2010-11-10 16:10:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49206-20101110104843.patch</filename>
            <type>text/plain</type>
            <size>22964</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTc1NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzkgQEAKKzIwMTAtMTEtMTAgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBtdWx0aXNhbXBsaW5nIHN1cHBvcnQgdG8gRHJhd2luZ0J1ZmZlci4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MjA2CisKKyAgICAgICAgQWRkZWQg
c3VwcG9ydCBmb3IgdGhlIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQgYW5kIEdMX0FOR0xFX2Zy
YW1lYnVmZmVyX211bHRpc2FtcGxlCisgICAgICAgIGV4dGVuc2lvbnMgdG8gRXh0ZW5zaW9uczNE
LiBUaGVuIEkgdXNlIHRoZXNlIHRvIGFkZCBtdWx0aXNhbXBsZSBzdXBwb3J0IHRvIERyYXdpbmdC
dWZmZXIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1Db2xvckJ1ZmZl
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRXh0ZW5zaW9uczNEQ2hy
b21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjpibGl0RnJh
bWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06OnJlbmRl
cmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L0RyYXdpbmdCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OmNsZWFyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRy
YXdpbmdCdWZmZXI6OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpi
aW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6bXVsdGlzYW1wbGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1ZmZlck1hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3
aW5nQnVmZmVyOjpwbGF0Zm9ybUNvbG9yQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuc2lvbnMzRE9wZW5HTDo6c3VwcG9ydHMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9u
czNET3BlbkdMOjpibGl0RnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9u
czNET3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisKIDIwMTAtMTEtMTAgIENzYWJhIE9zenRyb2dvbsOh
YyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBIeWF0dC4K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5zaW9uczNELmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaAkocmV2aXNpb24g
NzE1NjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuc2lvbnMzRC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCwxMiArNDgsMTMgQEAgcHVibGljOgogICAgIC8vICAgR0xfRVhUX3Jl
YWRfZm9ybWF0X2JncmEKICAgICAvLyAgIEdMX0FSQl9yb2J1c3RuZXNzCiAgICAgLy8gICBHTF9F
WFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwgLyBHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwKKyAg
ICAvLyAgIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQgLyBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9t
dWx0aXNhbXBsZQogCiAgICAgLy8gVGFrZXMgZnVsbCBuYW1lIG9mIGV4dGVuc2lvbjsgZm9yIGV4
YW1wbGUsCiAgICAgLy8gIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCIuCiAgICAgdmly
dHVhbCBib29sIHN1cHBvcnRzKGNvbnN0IFN0cmluZyYpID0gMDsKIAotICAgIGVudW0geworICAg
IGVudW0gRXh0ZW5zaW9uc0VudW1UeXBlIHsKICAgICAgICAgLy8gR0xfRVhUX3RleHR1cmVfZm9y
bWF0X0JHUkE4ODg4IGVudW1zCiAgICAgICAgIEJHUkFfRVhUID0gMHg4MEUxLAogCkBAIC02Mywx
MSArNjQsMjggQEAgcHVibGljOgogICAgICAgICBVTktOT1dOX0NPTlRFWFRfUkVTRVRfQVJCID0g
MHg4MjU1LAogCiAgICAgICAgIC8vIEdMX0VYVC9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwgZW51
bXMKLSAgICAgICAgREVQVEgyNF9TVEVOQ0lMOCA9IDB4ODhGMAorICAgICAgICBERVBUSDI0X1NU
RU5DSUw4ID0gMHg4OEYwLAorICAgICAgICAKKyAgICAgICAgLy8gR0xfQU5HTEVfZnJhbWVidWZm
ZXJfYmxpdCBuYW1lcworICAgICAgICBSRUFEX0ZSQU1FQlVGRkVSID0gMHg4Q0E4LAorICAgICAg
ICBEUkFXX0ZSQU1FQlVGRkVSID0gMHg4Q0E5LAorICAgICAgICBEUkFXX0ZSQU1FQlVGRkVSX0JJ
TkRJTkcgPSAweDhDQTYsIAorICAgICAgICBSRUFEX0ZSQU1FQlVGRkVSX0JJTkRJTkcgPSAweDhD
QUEsCisgICAgICAgIAorICAgICAgICAvLyBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBs
ZSBuYW1lcworICAgICAgICBSRU5ERVJCVUZGRVJfU0FNUExFUyA9IDB4OENBQiwKKyAgICAgICAg
RlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRSA9IDB4OEQ1NiwKKyAgICAgICAgTUFY
X1NBTVBMRVMgPSAweDhENTcKICAgICB9OwogCiAgICAgLy8gR0xfQVJCX3JvYnVzdG5lc3MKICAg
ICB2aXJ0dWFsIGludCBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgPSAwOworICAgIAorICAg
IC8vIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQKKyAgICB2aXJ0dWFsIHZvaWQgYmxpdEZyYW1l
YnVmZmVyKGxvbmcgc3JjWDAsIGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxv
bmcgZHN0WDAsIGxvbmcgZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxv
bmcgbWFzaywgdW5zaWduZWQgbG9uZyBmaWx0ZXIpID0gMDsKKyAgICAKKyAgICAvLyBHTF9BTkdM
RV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZQorICAgIHZpcnR1YWwgdm9pZCByZW5kZXJidWZmZXJT
dG9yYWdlTXVsdGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2Ft
cGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwg
dW5zaWduZWQgbG9uZyBoZWlnaHQpID0gMDsgICAgCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZm
ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA3MTU2NykKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDcgKzE0NSw3IEBAIFBsYXRmb3JtTGF5ZXIqIERyYXdp
bmdCdWZmZXI6OnBsYXRmb3JtTGEKIH0KICNlbmRpZgogCi11bnNpZ25lZCBEcmF3aW5nQnVmZmVy
OjpnZXRSZW5kZXJpbmdSZXN1bHRzQXNUZXh0dXJlKCkKK1BsYXRmb3JtM0RPYmplY3QgRHJhd2lu
Z0J1ZmZlcjo6cGxhdGZvcm1Db2xvckJ1ZmZlcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faW50
ZXJuYWwtPm9mZnNjcmVlbkNvbG9yVGV4dHVyZTsKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRXh0ZW5zaW9uczNEQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0V4dGVuc2lvbnMzRENocm9taXVtLmgJ
KHJldmlzaW9uIDcxNTY3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9F
eHRlbnNpb25zM0RDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw4IEBAIHB1
YmxpYzoKICAgICAvLyBFeHRlbnNpb25zM0QgbWV0aG9kcy4KICAgICB2aXJ0dWFsIGJvb2wgc3Vw
cG9ydHMoY29uc3QgU3RyaW5nJik7CiAgICAgdmlydHVhbCBpbnQgZ2V0R3JhcGhpY3NSZXNldFN0
YXR1c0FSQigpOworICAgIHZpcnR1YWwgdm9pZCBibGl0RnJhbWVidWZmZXIobG9uZyBzcmNYMCwg
bG9uZyBzcmNZMCwgbG9uZyBzcmNYMSwgbG9uZyBzcmNZMSwgbG9uZyBkc3RYMCwgbG9uZyBkc3RZ
MCwgbG9uZyBkc3RYMSwgbG9uZyBkc3RZMSwgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBs
b25nIGZpbHRlcikgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0
aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNp
Z25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBs
b25nIGhlaWdodCkgeyB9CiAKICAgICBlbnVtIHsKICAgICAgICAgLy8gR0xfQ0hST01JVU1fbWFw
X3N1YiAoZW51bXMgaW5oZXJpdGVkIGZyb20gR0xfQVJCX3ZlcnRleF9idWZmZXJfb2JqZWN0KQpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5j
cHAJKHJldmlzaW9uIDcxNTY3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJh
d2luZ0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICszNCwxNCBAQAogCiAjaW5j
bHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCisKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBEcmF3aW5nQnVm
ZmVyOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IEludFNpemUmIHNp
emUpCiB7CiAgICAgUmVmUHRyPERyYXdpbmdCdWZmZXI+IGRyYXdpbmdCdWZmZXIgPSBhZG9wdFJl
ZihuZXcgRHJhd2luZ0J1ZmZlcihjb250ZXh0LCBzaXplKSk7CisgICAgZHJhd2luZ0J1ZmZlci0+
bV9tdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZCA9IGNvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+c3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQiKSAmJiBjb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIp
OwogICAgIHJldHVybiAoZHJhd2luZ0J1ZmZlci0+bV9jb250ZXh0KSA/IGRyYXdpbmdCdWZmZXIu
cmVsZWFzZSgpIDogMDsKIH0KIApAQCAtNDYsMjEgKzQ5LDE5MSBAQCB2b2lkIERyYXdpbmdCdWZm
ZXI6OmNsZWFyKCkKIHsKICAgICBpZiAoIW1fY29udGV4dCkKICAgICAgICAgcmV0dXJuOwotCisg
ICAgICAgIAogICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9jb250
ZXh0LT5kZWxldGVUZXh0dXJlKG1fY29sb3JCdWZmZXIpOworICAgIG1fY29sb3JCdWZmZXIgPSAw
OworICAgIAorICAgIGlmIChtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpIHsKKyAgICAgICAgbV9j
b250ZXh0LT5kZWxldGVSZW5kZXJidWZmZXIobV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAg
ICAgICAgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyID0gMDsKKyAgICB9CisgICAgCisgICAgaWYg
KG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpIHsKKyAgICAgICAgbV9jb250ZXh0LT5k
ZWxldGVSZW5kZXJidWZmZXIobV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAg
ICAgIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIgPSAwOworICAgIH0KKyAgICAKKyAg
ICBpZiAobV9kZXB0aFN0ZW5jaWxCdWZmZXIpIHsKKyAgICAgICAgbV9jb250ZXh0LT5kZWxldGVS
ZW5kZXJidWZmZXIobV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICBtX2RlcHRoU3RlbmNp
bEJ1ZmZlciA9IDA7CisgICAgfQorICAgIAorICAgIGlmIChtX211bHRpc2FtcGxlRkJPKSB7Cisg
ICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlRnJh
bWVidWZmZXIobV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIG1fbXVsdGlzYW1wbGVGQk8gPSAw
OworICAgIH0KKyAgICAgICAgCiAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CiAgICAgbV9jb250ZXh0LT5kZWxldGVG
cmFtZWJ1ZmZlcihtX2Zibyk7CiAgICAgbV9mYm8gPSAwOwotCisgICAgCiAgICAgbV9jb250ZXh0
LmNsZWFyKCk7CiB9CiAKLXZvaWQgRHJhd2luZ0J1ZmZlcjo6YmluZCgpCit2b2lkIERyYXdpbmdC
dWZmZXI6OnJlc2V0KGNvbnN0IEludFNpemUmIG5ld1NpemUpCit7CisgICAgaWYgKG1fc2l6ZSA9
PSBuZXdTaXplKQorICAgICAgICByZXR1cm47CisgICAgbV9zaXplID0gbmV3U2l6ZTsKKworICAg
IGlmICghbV9jb250ZXh0KQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgCisgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0
M0Q6OkF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMgPSBtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1
dGVzKCk7CisgICAgdW5zaWduZWQgbG9uZyBpbnRlcm5hbENvbG9yRm9ybWF0LCBjb2xvckZvcm1h
dCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSAwOworICAgIGlmIChhdHRyaWJ1dGVzLmFs
cGhhKSB7CisgICAgICAgIGludGVybmFsQ29sb3JGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQTsKKyAgICAgICAgY29sb3JGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBpbnRlcm5hbENvbG9yRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQjsKKyAgICAgICAgY29sb3JGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOwor
ICAgIH0KKyAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpIHsK
KyAgICAgICAgLy8gV2UgZG9uJ3QgYWxsb3cgdGhlIGxvZ2ljIHdoZXJlIHN0ZW5jaWwgaXMgcmVx
dWlyZWQgYW5kIGRlcHRoIGlzIG5vdC4KKyAgICAgICAgLy8gU2VlIEdyYXBoaWNzQ29udGV4dDNE
IGNvbnN0cnVjdG9yLgorICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsICYmIGF0dHJpYnV0
ZXMuZGVwdGgpCisgICAgICAgICAgICBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOworICAgICAgICBlbHNlCisgICAgICAgICAgICBp
bnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01Q
T05FTlQ7CisgICAgfQorCisgICAgLy8gcmVzaXplIG11bHRpc2FtcGxlIEZCTworICAgIGlmICht
dWx0aXNhbXBsZSgpKSB7CisgICAgICAgIGludCBtYXhTYW1wbGVDb3VudDsKKyAgICAgICAgCisg
ICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfU0FNUExFUywg
Jm1heFNhbXBsZUNvdW50KTsKKyAgICAgICAgaW50IHNhbXBsZUNvdW50ID0gc3RkOjptaW4oOCwg
bWF4U2FtcGxlQ291bnQpOworICAgICAgICBpZiAoc2FtcGxlQ291bnQgPiBtYXhTYW1wbGVDb3Vu
dCkKKyAgICAgICAgICAgIHNhbXBsZUNvdW50ID0gbWF4U2FtcGxlQ291bnQ7CisgICAgICAgIAor
ICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworCisgICAgICAgIG1fY29udGV4dC0+YmluZFJl
bmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX211bHRpc2FtcGxl
Q29sb3JCdWZmZXIpOworICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+cmVuZGVy
YnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIs
IHNhbXBsZUNvdW50LCBpbnRlcm5hbENvbG9yRm9ybWF0LCBtX3NpemUud2lkdGgoKSwgbV9zaXpl
LmhlaWdodCgpKTsKKyAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9B
VFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBs
ZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1
dGVzLmRlcHRoKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1
ZmZlcik7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+cmVuZGVyYnVm
ZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIHNh
bXBsZUNvdW50LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1f
c2l6ZS5oZWlnaHQoKSk7CisgICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKQorICAg
ICAgICAgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hN
RU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX211bHRpc2FtcGxlRGVwdGhT
dGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKQorICAgICAg
ICAgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNp
bEJ1ZmZlcik7CisgICAgICAgIH0KKyAgICAgICAgbV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOworICAgICAgICBpZiAobV9jb250
ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7CisgICAgICAg
ICAgICAvLyBDbGVhbnVwCisgICAgICAgICAgICBjbGVhcigpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgfQorCisgICAgLy8gcmVzaXplIHJlZ3VsYXIgRkJPCisgICAgbV9j
b250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBt
X2Zibyk7CisKKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBtX2NvbG9yQnVmZmVyKTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGludGVybmFsQ29sb3JGb3JtYXQsIG1fc2l6
ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAsIGNvbG9yRm9ybWF0LCBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfQllURSwgMCk7CisgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1
cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpD
T0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUsIG1fY29sb3JCdWZm
ZXIsIDApOworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIDApOworICAgIGlmICghbXVsdGlzYW1wbGUoKSAmJiAoYXR0cmlidXRlcy5zdGVu
Y2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpKSB7CisgICAgICAgIG1fY29udGV4dC0+YmluZFJlbmRl
cmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoU3RlbmNpbEJ1
ZmZlcik7CisgICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSLCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgbV9zaXpl
LndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5j
aWwpCisgICAgICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRU
QUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxC
dWZmZXIpOworICAgICAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgIG1fY29u
dGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICBtX2NvbnRl
eHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7
CisgICAgfQorICAgIGlmIChtX2NvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVJfQ09NUExFVEUpIHsKKyAgICAgICAgLy8gQ2xlYW51cAorICAgICAgICBjbGVhcigpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG11bHRpc2FtcGxlKCkpCisgICAgICAgIG1f
Y29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwg
bV9tdWx0aXNhbXBsZUZCTyk7CisKKyAgICAvLyBJbml0aWFsaXplIHJlbmRlcmJ1ZmZlcnMgdG8g
MC4KKyAgICB1bnNpZ25lZCBjaGFyIGNvbG9yTWFza1tdID0ge3RydWUsIHRydWUsIHRydWUsIHRy
dWV9LCBkZXB0aE1hc2sgPSB0cnVlLCBzdGVuY2lsTWFzayA9IHRydWU7CisgICAgdW5zaWduZWQg
Y2hhciBpc1NjaXNzb3JFbmFibGVkID0gZmFsc2U7CisgICAgdW5zaWduZWQgY2hhciBpc0RpdGhl
ckVuYWJsZWQgPSBmYWxzZTsKKyAgICB1bnNpZ25lZCBsb25nIGNsZWFyTWFzayA9IEdyYXBoaWNz
Q29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUOworICAgIG1fY29udGV4dC0+Z2V0Qm9vbGVhbnYo
R3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX1dSSVRFTUFTSywgY29sb3JNYXNrKTsKKyAgICBtX2Nv
bnRleHQtPmNvbG9yTWFzayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKKyAgICBpZiAoYXR0cmli
dXRlcy5kZXB0aCkgeworICAgICAgICBtX2NvbnRleHQtPmdldEJvb2xlYW52KEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9XUklURU1BU0ssICZkZXB0aE1hc2spOworICAgICAgICBtX2NvbnRleHQt
PmRlcHRoTWFzayh0cnVlKTsKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9CVUZGRVJfQklUOworICAgIH0KKyAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKSB7
CisgICAgICAgIG1fY29udGV4dC0+Z2V0Qm9vbGVhbnYoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfV1JJVEVNQVNLLCAmc3RlbmNpbE1hc2spOworICAgICAgICBtX2NvbnRleHQtPnN0ZW5jaWxN
YXNrKHRydWUpOworICAgICAgICBjbGVhck1hc2sgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfQlVGRkVSX0JJVDsKKyAgICB9CisgICAgaXNTY2lzc29yRW5hYmxlZCA9IG1fY29udGV4dC0+
aXNFbmFibGVkKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOworICAgIG1fY29udGV4
dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKKyAgICBpc0RpdGhl
ckVuYWJsZWQgPSBtX2NvbnRleHQtPmlzRW5hYmxlZChHcmFwaGljc0NvbnRleHQzRDo6RElUSEVS
KTsKKyAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUik7CisK
KyAgICBtX2NvbnRleHQtPmNsZWFyKGNsZWFyTWFzayk7CisKKyAgICBtX2NvbnRleHQtPmNvbG9y
TWFzayhjb2xvck1hc2tbMF0sIGNvbG9yTWFza1sxXSwgY29sb3JNYXNrWzJdLCBjb2xvck1hc2tb
M10pOworICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICBtX2NvbnRleHQtPmRlcHRo
TWFzayhkZXB0aE1hc2spOworICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwpCisgICAgICAgIG1f
Y29udGV4dC0+c3RlbmNpbE1hc2soc3RlbmNpbE1hc2spOworICAgIGlmIChpc1NjaXNzb3JFbmFi
bGVkKQorICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NP
Ul9URVNUKTsKKyAgICBlbHNlCisgICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6U0NJU1NPUl9URVNUKTsKKyAgICBpZiAoaXNEaXRoZXJFbmFibGVkKQorICAgICAg
ICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6RElUSEVSKTsKKyAgICBlbHNl
CisgICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6RElUSEVSKTsK
KworICAgIG1fY29udGV4dC0+Zmx1c2goKTsKK30KKwordm9pZCBEcmF3aW5nQnVmZmVyOjpjb21t
aXQobG9uZyB4LCBsb25nIHksIGxvbmcgd2lkdGgsIGxvbmcgaGVpZ2h0KQogewogICAgIGlmICgh
bV9jb250ZXh0KQogICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAgIGlmICh3aWR0aCA8IDAp
CisgICAgICAgIHdpZHRoID0gbV9zaXplLndpZHRoKCk7CisgICAgaWYgKGhlaWdodCA8IDApCisg
ICAgICAgIGhlaWdodCA9IG1fc2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgCisgICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICAKKyAgICBpZiAobV9tdWx0aXNhbXBsZUZCTykg
eworICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihFeHRlbnNpb25zM0Q6OlJFQURf
RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBtX2NvbnRleHQtPmJpbmRG
cmFtZWJ1ZmZlcihFeHRlbnNpb25zM0Q6OkRSQVdfRlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICAg
ICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmJsaXRGcmFtZWJ1ZmZlcih4LCB5LCB3aWR0
aCwgaGVpZ2h0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1Jf
QlVGRkVSX0JJVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgfQorICAgIAogICAg
IG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UiwgbV9mYm8pOworfQorCit2b2lkIERyYXdpbmdCdWZmZXI6OmJpbmQoKQoreworICAgIGlmICgh
bV9jb250ZXh0KQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIG1fY29udGV4dC0+Ymlu
ZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBs
ZUZCTyA/IG1fbXVsdGlzYW1wbGVGQk8gOiBtX2Zibyk7CiAgICAgbV9jb250ZXh0LT52aWV3cG9y
dCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKIH0KIApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuaAkocmV2aXNpb24g
NzE1NjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY0LDEzICs2NCwxOCBAQCBwdWJsaWM6CiAgICAgLy8gdG8gcHJl
dmVudCBpbnZhbGlkIGFjY2Vzc2VzIHRvIHRoZSByZXNvdXJjZXMuCiAgICAgdm9pZCBjbGVhcigp
OwogICAgIAorICAgIC8vIENvcGllcyB0aGUgbXVsdGlzYW1wbGUgY29sb3IgYnVmZmVyIHRvIHRo
ZSBub3JtYWwgY29sb3IgYnVmZmVyIGFuZCBsZWF2ZXMgbV9mYm8gYm91bmQKKyAgICB2b2lkIGNv
bW1pdChsb25nIHggPSAwLCBsb25nIHkgPSAwLCBsb25nIHdpZHRoID0gLTEsIGxvbmcgaGVpZ2h0
ID0gLTEpOworICAgIAorICAgIGJvb2wgbXVsdGlzYW1wbGUoKSBjb25zdCB7IHJldHVybiBtX2Nv
bnRleHQgJiYgbV9jb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcyAmJiBt
X211bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkOyB9CisgICAgCisgICAgUGxhdGZvcm0zRE9i
amVjdCBwbGF0Zm9ybUNvbG9yQnVmZmVyKCkgY29uc3Q7CisKICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCiAgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpOwogICAgIHZv
aWQgcHVibGlzaFRvUGxhdGZvcm1MYXllcigpOwogI2VuZGlmCiAKLSAgICB1bnNpZ25lZCBnZXRS
ZW5kZXJpbmdSZXN1bHRzQXNUZXh0dXJlKCk7Ci0KICNpZiBQTEFURk9STShDSFJPTUlVTSkKICAg
ICBjbGFzcyBXaWxsUHVibGlzaENhbGxiYWNrIDogcHVibGljIE5vbmNvcHlhYmxlIHsKICAgICBw
dWJsaWM6CkBAIC05MSw4ICs5NiwxNiBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBtX2NvbnRleHQ7CiAgICAgSW50U2l6ZSBtX3NpemU7CisgICAgYm9vbCBtX211
bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkOwogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mYm87
CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2NvbG9yQnVmZmVyOworICAgIFBsYXRmb3JtM0RPYmpl
Y3QgbV9kZXB0aFN0ZW5jaWxCdWZmZXI7CiAKKyAgICAvLyBGb3IgbXVsdGlzYW1wbGluZworICAg
IFBsYXRmb3JtM0RPYmplY3QgbV9tdWx0aXNhbXBsZUZCTzsKKyAgICBQbGF0Zm9ybTNET2JqZWN0
IG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcjsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fbXVsdGlz
YW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXI7CisgICAgCiAjaWYgUExBVEZPUk0oQ0hST01JVU0pCiAg
ICAgT3duUHRyPFdpbGxQdWJsaXNoQ2FsbGJhY2s+IG1fY2FsbGJhY2s7CiAgICAgT3duUHRyPERy
YXdpbmdCdWZmZXJJbnRlcm5hbD4gbV9pbnRlcm5hbDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L21hYy9EcmF3aW5nQnVmZmVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L21hYy9EcmF3aW5nQnVmZmVyTWFjLm1tCShyZXZpc2lv
biA3MTU2NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L21hYy9EcmF3aW5nQnVm
ZmVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJE
cmF3aW5nQnVmZmVyLmgiCiAKKyNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKICNpbmNsdWRlICJX
ZWJHTExheWVyLmgiCiAKICNpbXBvcnQgIkJsb2NrRXhjZXB0aW9ucy5oIgpAQCAtMzksNiArNDAs
MTEgQEAgRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcihHcmFwaGljc0NvbgogICAgIDogbV9j
b250ZXh0KGNvbnRleHQpCiAgICAgLCBtX3NpemUoc2l6ZSkKICAgICAsIG1fZmJvKGNvbnRleHQt
PmNyZWF0ZUZyYW1lYnVmZmVyKCkpCisgICAgLCBtX2NvbG9yQnVmZmVyKDApCisgICAgLCBtX2Rl
cHRoU3RlbmNpbEJ1ZmZlcigwKQorICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQorICAgICwgbV9t
dWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCisgICAgLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2ls
QnVmZmVyKDApCiB7CiAgICAgQVNTRVJUKG1fZmJvKTsKICAgICBpZiAoIW1fZmJvKSB7CkBAIC01
Myw2ICs1OSw0MCBAQCBEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKEdyYXBoaWNzQ29uCiAg
ICAgICAgIFttX3BsYXRmb3JtTGF5ZXIuZ2V0KCkgc2V0TmFtZTpAIkRyYXdpbmdCdWZmZXIgTGF5
ZXIiXTsKICNlbmRpZiAgICAKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCisKKyAgICAv
LyBjcmVhdGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvCisgICAgbV9jb2xvckJ1ZmZlciA9IGNv
bnRleHQtPmNyZWF0ZVRleHR1cmUoKTsKKyAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZlcik7CisgICAgY29udGV4dC0+dGV4
UGFyYW1ldGVyZihHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAg
Y29udGV4dC0+dGV4UGFyYW1ldGVyZihHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJ
TkVBUik7CisgICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRl
eHQzRDo6Q0xBTVBfVE9fRURHRSk7CisgICAgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9U
LCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CisgICAgY29udGV4dC0+YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOworICAgIAorICAgIC8vIENy
ZWF0ZSB0aGUgRkJPCisgICAgbV9mYm8gPSBjb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOwor
ICAgIEFTU0VSVChtX2Zibyk7CisgICAgaWYgKCFtX2ZibykgeworICAgICAgICBjbGVhcigpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBjb25zdCBHcmFwaGljc0NvbnRl
eHQzRDo6QXR0cmlidXRlcyYgYXR0cmlidXRlcyA9IGNvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1
dGVzKCk7CisgICAgCisgICAgLy8gQ3JlYXRlIHRoZSBzdGVuY2lsIGFuZCBkZXB0aCBidWZmZXIg
aWYgbmVlZGVkCisgICAgaWYgKCFtdWx0aXNhbXBsZSgpICYmIChhdHRyaWJ1dGVzLnN0ZW5jaWwg
fHwgYXR0cmlidXRlcy5kZXB0aCkpCisgICAgICAgIG1fZGVwdGhTdGVuY2lsQnVmZmVyID0gY29u
dGV4dC0+Y3JlYXRlUmVuZGVyYnVmZmVyKCk7CisKKyAgICAvLyBjcmVhdGUgYSBtdWx0aXNhbXBs
ZSBGQk8KKyAgICBpZiAobXVsdGlzYW1wbGUoKSkgeworICAgICAgICBtX211bHRpc2FtcGxlRkJP
ID0gY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICAgICAgY29udGV4dC0+YmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZC
Tyk7CisgICAgICAgIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlciA9IGNvbnRleHQtPmNyZWF0ZVJl
bmRlcmJ1ZmZlcigpOworICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0
ZXMuZGVwdGgpCisgICAgICAgICAgICBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyID0g
Y29udGV4dC0+Y3JlYXRlUmVuZGVyYnVmZmVyKCk7CisgICAgfQorICAgIAorICAgIHJlc2V0KHNp
emUpOwogfQogCiBEcmF3aW5nQnVmZmVyOjp+RHJhd2luZ0J1ZmZlcigpCkBAIC02MCwyNCArMTAw
LDE1IEBAIERyYXdpbmdCdWZmZXI6On5EcmF3aW5nQnVmZmVyKCkKICAgICBjbGVhcigpOwogfQog
Ci12b2lkIERyYXdpbmdCdWZmZXI6OnJlc2V0KGNvbnN0IEludFNpemUmIG5ld1NpemUpCitQbGF0
Zm9ybUxheWVyKiBEcmF3aW5nQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkKIHsKLSAgICBpZiAoIW1f
Y29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBpZiAobV9zaXplID09IG5l
d1NpemUpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3NpemUgPSBuZXdTaXplOwotCi0gICAgbV9j
b250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
LCAwKTsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybUxheWVyLmdldCgpOwogfQogCi0jaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotUGxhdGZvcm1MYXllciogRHJhd2luZ0J1ZmZlcjo6cGxh
dGZvcm1MYXllcigpCitQbGF0Zm9ybTNET2JqZWN0IERyYXdpbmdCdWZmZXI6OnBsYXRmb3JtQ29s
b3JCdWZmZXIoKSBjb25zdAogewotICAgIHJldHVybiBtX3BsYXRmb3JtTGF5ZXIuZ2V0KCk7Cisg
ICAgcmV0dXJuIG1fY29sb3JCdWZmZXI7CiB9Ci0jZW5kaWYKIAogfQogCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5H
TC5jcHAJKHJldmlzaW9uIDcxNTY3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjksMTQg
QEAgYm9vbCBFeHRlbnNpb25zM0RPcGVuR0w6OnN1cHBvcnRzKGNvbnN0IAogICAgICAgICAgICAg
bV9hdmFpbGFibGVFeHRlbnNpb25zLmFkZChhdmFpbGFibGVFeHRlbnNpb25zW2ldKTsKICAgICAg
ICAgbV9pbml0aWFsaXplZEF2YWlsYWJsZUV4dGVuc2lvbnMgPSB0cnVlOwogICAgIH0KKyAgICAK
KyAgICAvLyBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IGFuZCBHTF9BTkdMRV9mcmFtZWJ1ZmZl
cl9tdWx0aXNhbXBsZSBhcmUgImZha2UiLiBUaGV5IGFyZSBpbXBsZW1lbnRlZCB1c2luZyBvdGhl
cgorICAgIC8vIGV4dGVuc2lvbnMuIEluIHBhcnRpY3VsYXIgR0xfRVhUX2ZyYW1lYnVmZmVyX2Js
aXQgYW5kIEdMX0VYVF9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZQorICAgIGlmIChuYW1lID09ICJH
TF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IikKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0
ZW5zaW9ucy5jb250YWlucygiR0xfRVhUX2ZyYW1lYnVmZmVyX2JsaXQiKTsKKyAgICBpZiAobmFt
ZSA9PSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUiKQorICAgICAgICByZXR1cm4g
bV9hdmFpbGFibGVFeHRlbnNpb25zLmNvbnRhaW5zKCJHTF9FWFRfZnJhbWVidWZmZXJfbXVsdGlz
YW1wbGUiKTsKKyAgICAgICAgCiAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250
YWlucyhuYW1lKTsKIH0KIApAQCAtNzcsNiArODUsMTYgQEAgaW50IEV4dGVuc2lvbnMzRE9wZW5H
TDo6Z2V0R3JhcGhpY3NSZXNldAogICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJS
T1I7CiB9CiAKK3ZvaWQgRXh0ZW5zaW9uczNET3BlbkdMOjpibGl0RnJhbWVidWZmZXIobG9uZyBz
cmNYMCwgbG9uZyBzcmNZMCwgbG9uZyBzcmNYMSwgbG9uZyBzcmNZMSwgbG9uZyBkc3RYMCwgbG9u
ZyBkc3RZMCwgbG9uZyBkc3RYMSwgbG9uZyBkc3RZMSwgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNp
Z25lZCBsb25nIGZpbHRlcikKK3sKKyAgICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhUKHNyY1gwLCBz
cmNZMCwgc3JjWDEsIHNyY1kxLCBkc3RYMCwgZHN0WTAsIGRzdFgxLCBkc3RZMSwgbWFzaywgZmls
dGVyKTsKK30KKwordm9pZCBFeHRlbnNpb25zM0RPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VN
dWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1
bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25l
ZCBsb25nIGhlaWdodCkKK3sKKyAgICA6OmdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxl
KHRhcmdldCwgc2FtcGxlcywgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9u
czNET3BlbkdMLmgJKHJldmlzaW9uIDcxNTY3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQx
LDggQEAgcHVibGljOgogICAgIC8vIEV4dGVuc2lvbnMzRCBtZXRob2RzLgogICAgIHZpcnR1YWwg
Ym9vbCBzdXBwb3J0cyhjb25zdCBTdHJpbmcmKTsKICAgICB2aXJ0dWFsIGludCBnZXRHcmFwaGlj
c1Jlc2V0U3RhdHVzQVJCKCk7CisgICAgdmlydHVhbCB2b2lkIGJsaXRGcmFtZWJ1ZmZlcihsb25n
IHNyY1gwLCBsb25nIHNyY1kwLCBsb25nIHNyY1gxLCBsb25nIHNyY1kxLCBsb25nIGRzdFgwLCBs
b25nIGRzdFkwLCBsb25nIGRzdFgxLCBsb25nIGRzdFkxLCB1bnNpZ25lZCBsb25nIG1hc2ssIHVu
c2lnbmVkIGxvbmcgZmlsdGVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFn
ZU11bHRpc2FtcGxlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHNhbXBsZXMs
IHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxmb3JtYXQsIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2ln
bmVkIGxvbmcgaGVpZ2h0KTsgICAgCiAKIHByaXZhdGU6CiAgICAgLy8gVGhpcyBjbGFzcyBvbmx5
IG5lZWRzIHRvIGJlIGluc3RhbnRpYXRlZCBieSBHcmFwaGljc0NvbnRleHQzRCBpbXBsZW1lbnRh
dGlvbnMuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJT
a2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1h
Z2VCdWZmZXJTa2lhLmNwcAkocmV2aXNpb24gNzE1NjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcg
KzExMSw3IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICBp
ZiAobV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0LnVzZUdQVSgpICYmIGNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT51c2VHUFUoKSkgewogICAgICAgICBpZiAoY29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCktPmNhbkFjY2VsZXJhdGUoKSkgewogICAgICAgICAgICAgRHJhd2luZ0J1ZmZlciogc291
cmNlRHJhd2luZ0J1ZmZlciA9IG1fZGF0YS5tX3BsYXRmb3JtQ29udGV4dC5ncHVDYW52YXMoKS0+
ZHJhd2luZ0J1ZmZlcigpOwotICAgICAgICAgICAgdW5zaWduZWQgc291cmNlVGV4dHVyZSA9IHNv
dXJjZURyYXdpbmdCdWZmZXItPmdldFJlbmRlcmluZ1Jlc3VsdHNBc1RleHR1cmUoKTsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIHNvdXJjZVRleHR1cmUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc291
cmNlRHJhd2luZ0J1ZmZlci0+cGxhdGZvcm1Db2xvckJ1ZmZlcigpKTsKICAgICAgICAgICAgIEZs
b2F0UmVjdCBkZXN0UmVjdEZsaXBwZWQoZGVzdFJlY3QpOwogICAgICAgICAgICAgZGVzdFJlY3RG
bGlwcGVkLnNldFkoZGVzdFJlY3QueSgpICsgZGVzdFJlY3QuaGVpZ2h0KCkpOwogICAgICAgICAg
ICAgZGVzdFJlY3RGbGlwcGVkLnNldEhlaWdodCgtZGVzdFJlY3QuaGVpZ2h0KCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73552</attachid>
            <date>2010-11-10 16:10:05 -0800</date>
            <delta_ts>2010-11-11 14:26:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49206-20101110161004.patch</filename>
            <type>text/plain</type>
            <size>23907</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTc1NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzkgQEAKKzIwMTAtMTEtMTAgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBtdWx0aXNhbXBsaW5nIHN1cHBvcnQgdG8gRHJhd2luZ0J1ZmZlci4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MjA2CisKKyAgICAgICAgQWRkZWQg
c3VwcG9ydCBmb3IgdGhlIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQgYW5kIEdMX0FOR0xFX2Zy
YW1lYnVmZmVyX211bHRpc2FtcGxlCisgICAgICAgIGV4dGVuc2lvbnMgdG8gRXh0ZW5zaW9uczNE
LiBUaGVuIEkgdXNlIHRoZXNlIHRvIGFkZCBtdWx0aXNhbXBsZSBzdXBwb3J0IHRvIERyYXdpbmdC
dWZmZXIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1Db2xvckJ1ZmZl
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRXh0ZW5zaW9uczNEQ2hy
b21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lvbnMzRENocm9taXVtOjpibGl0RnJh
bWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNEQ2hyb21pdW06OnJlbmRl
cmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L0RyYXdpbmdCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OmNsZWFyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRy
YXdpbmdCdWZmZXI6OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpi
aW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6bXVsdGlzYW1wbGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1ZmZlck1hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3
aW5nQnVmZmVyOjpwbGF0Zm9ybUNvbG9yQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkV4
dGVuc2lvbnMzRE9wZW5HTDo6c3VwcG9ydHMpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9u
czNET3BlbkdMOjpibGl0RnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5zaW9u
czNET3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisKIDIwMTAtMTEtMTAgIENzYWJhIE9zenRyb2dvbsOh
YyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBIeWF0dC4K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5zaW9uczNELmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaAkocmV2aXNpb24g
NzE1NjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuc2lvbnMzRC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCwxMiArNDgsMTMgQEAgcHVibGljOgogICAgIC8vICAgR0xfRVhUX3Jl
YWRfZm9ybWF0X2JncmEKICAgICAvLyAgIEdMX0FSQl9yb2J1c3RuZXNzCiAgICAgLy8gICBHTF9F
WFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwgLyBHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwKKyAg
ICAvLyAgIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQgLyBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9t
dWx0aXNhbXBsZQogCiAgICAgLy8gVGFrZXMgZnVsbCBuYW1lIG9mIGV4dGVuc2lvbjsgZm9yIGV4
YW1wbGUsCiAgICAgLy8gIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCIuCiAgICAgdmly
dHVhbCBib29sIHN1cHBvcnRzKGNvbnN0IFN0cmluZyYpID0gMDsKIAotICAgIGVudW0geworICAg
IGVudW0gRXh0ZW5zaW9uc0VudW1UeXBlIHsKICAgICAgICAgLy8gR0xfRVhUX3RleHR1cmVfZm9y
bWF0X0JHUkE4ODg4IGVudW1zCiAgICAgICAgIEJHUkFfRVhUID0gMHg4MEUxLAogCkBAIC02Mywx
MSArNjQsMjggQEAgcHVibGljOgogICAgICAgICBVTktOT1dOX0NPTlRFWFRfUkVTRVRfQVJCID0g
MHg4MjU1LAogCiAgICAgICAgIC8vIEdMX0VYVC9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwgZW51
bXMKLSAgICAgICAgREVQVEgyNF9TVEVOQ0lMOCA9IDB4ODhGMAorICAgICAgICBERVBUSDI0X1NU
RU5DSUw4ID0gMHg4OEYwLAorICAgICAgICAKKyAgICAgICAgLy8gR0xfQU5HTEVfZnJhbWVidWZm
ZXJfYmxpdCBuYW1lcworICAgICAgICBSRUFEX0ZSQU1FQlVGRkVSID0gMHg4Q0E4LAorICAgICAg
ICBEUkFXX0ZSQU1FQlVGRkVSID0gMHg4Q0E5LAorICAgICAgICBEUkFXX0ZSQU1FQlVGRkVSX0JJ
TkRJTkcgPSAweDhDQTYsIAorICAgICAgICBSRUFEX0ZSQU1FQlVGRkVSX0JJTkRJTkcgPSAweDhD
QUEsCisgICAgICAgIAorICAgICAgICAvLyBHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBs
ZSBuYW1lcworICAgICAgICBSRU5ERVJCVUZGRVJfU0FNUExFUyA9IDB4OENBQiwKKyAgICAgICAg
RlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRSA9IDB4OEQ1NiwKKyAgICAgICAgTUFY
X1NBTVBMRVMgPSAweDhENTcKICAgICB9OwogCiAgICAgLy8gR0xfQVJCX3JvYnVzdG5lc3MKICAg
ICB2aXJ0dWFsIGludCBnZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCkgPSAwOworICAgIAorICAg
IC8vIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQKKyAgICB2aXJ0dWFsIHZvaWQgYmxpdEZyYW1l
YnVmZmVyKGxvbmcgc3JjWDAsIGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxv
bmcgZHN0WDAsIGxvbmcgZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxv
bmcgbWFzaywgdW5zaWduZWQgbG9uZyBmaWx0ZXIpID0gMDsKKyAgICAKKyAgICAvLyBHTF9BTkdM
RV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZQorICAgIHZpcnR1YWwgdm9pZCByZW5kZXJidWZmZXJT
dG9yYWdlTXVsdGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2Ft
cGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwg
dW5zaWduZWQgbG9uZyBoZWlnaHQpID0gMDsgICAgCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZm
ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA3MTU2NykKKysrIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDE4ICsxMTgsOCBAQCB2b2lkIERyYXdpbmdCdWZmZXI6
OnB1Ymxpc2hUb1BsYXRmb3JtTGF5CiB9CiAjZW5kaWYKIAotdm9pZCBEcmF3aW5nQnVmZmVyOjpy
ZXNldChjb25zdCBJbnRTaXplJiBuZXdTaXplKQordm9pZCBEcmF3aW5nQnVmZmVyOjpkaWRSZXNl
dCgpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0g
ICAgaWYgKG1fc2l6ZSA9PSBuZXdTaXplKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zaXplID0g
bmV3U2l6ZTsKLQotICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIG1faW50ZXJuYWwtPm9mZnNjcmVlbkNvbG9yVGV4dHVyZSk7Ci0gICAgbV9j
b250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
LCAwKTsKLQogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBpZiAobV9pbnRl
cm5hbC0+cGxhdGZvcm1MYXllcikKICAgICAgICAgbV9pbnRlcm5hbC0+cGxhdGZvcm1MYXllci0+
c2V0VGV4dHVyZUNoYW5nZWQoKTsKQEAgLTE0NSw3ICsxMzUsNyBAQCBQbGF0Zm9ybUxheWVyKiBE
cmF3aW5nQnVmZmVyOjpwbGF0Zm9ybUxhCiB9CiAjZW5kaWYKIAotdW5zaWduZWQgRHJhd2luZ0J1
ZmZlcjo6Z2V0UmVuZGVyaW5nUmVzdWx0c0FzVGV4dHVyZSgpCitQbGF0Zm9ybTNET2JqZWN0IERy
YXdpbmdCdWZmZXI6OnBsYXRmb3JtQ29sb3JCdWZmZXIoKSBjb25zdAogewogICAgIHJldHVybiBt
X2ludGVybmFsLT5vZmZzY3JlZW5Db2xvclRleHR1cmU7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0V4dGVuc2lvbnMzRENocm9taXVtLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9FeHRlbnNpb25zM0RDaHJvbWl1
bS5oCShyZXZpc2lvbiA3MTU2NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vRXh0ZW5zaW9uczNEQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksOCBA
QCBwdWJsaWM6CiAgICAgLy8gRXh0ZW5zaW9uczNEIG1ldGhvZHMuCiAgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzKGNvbnN0IFN0cmluZyYpOwogICAgIHZpcnR1YWwgaW50IGdldEdyYXBoaWNzUmVz
ZXRTdGF0dXNBUkIoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmxpdEZyYW1lYnVmZmVyKGxvbmcgc3Jj
WDAsIGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcg
ZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWdu
ZWQgbG9uZyBmaWx0ZXIpIHsgfQorICAgIHZpcnR1YWwgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdl
TXVsdGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywg
dW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWdu
ZWQgbG9uZyBoZWlnaHQpIHsgfQogCiAgICAgZW51bSB7CiAgICAgICAgIC8vIEdMX0NIUk9NSVVN
X21hcF9zdWIgKGVudW1zIGluaGVyaXRlZCBmcm9tIEdMX0FSQl92ZXJ0ZXhfYnVmZmVyX29iamVj
dCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZm
ZXIuY3BwCShyZXZpc2lvbiA3MTU2NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L0RyYXdpbmdCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMSArMzQsMTQgQEAKIAog
I2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKIAorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gRHJhd2lu
Z0J1ZmZlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRTaXpl
JiBzaXplKQogewogICAgIFJlZlB0cjxEcmF3aW5nQnVmZmVyPiBkcmF3aW5nQnVmZmVyID0gYWRv
cHRSZWYobmV3IERyYXdpbmdCdWZmZXIoY29udGV4dCwgc2l6ZSkpOworICAgIGRyYXdpbmdCdWZm
ZXItPm1fbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQgPSBjb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IikgJiYgY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1w
bGUiKTsKICAgICByZXR1cm4gKGRyYXdpbmdCdWZmZXItPm1fY29udGV4dCkgPyBkcmF3aW5nQnVm
ZmVyLnJlbGVhc2UoKSA6IDA7CiB9CiAKQEAgLTQ2LDIxICs0OSwxOTMgQEAgdm9pZCBEcmF3aW5n
QnVmZmVyOjpjbGVhcigpCiB7CiAgICAgaWYgKCFtX2NvbnRleHQpCiAgICAgICAgIHJldHVybjsK
LQorICAgICAgICAKICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1f
Y29udGV4dC0+ZGVsZXRlVGV4dHVyZShtX2NvbG9yQnVmZmVyKTsKKyAgICBtX2NvbG9yQnVmZmVy
ID0gMDsKKyAgICAKKyAgICBpZiAobV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKSB7CisgICAgICAg
IG1fY29udGV4dC0+ZGVsZXRlUmVuZGVyYnVmZmVyKG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7
CisgICAgICAgIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlciA9IDA7CisgICAgfQorICAgIAorICAg
IGlmIChtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKSB7CisgICAgICAgIG1fY29udGV4
dC0+ZGVsZXRlUmVuZGVyYnVmZmVyKG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwor
ICAgICAgICBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyID0gMDsKKyAgICB9CisgICAg
CisgICAgaWYgKG1fZGVwdGhTdGVuY2lsQnVmZmVyKSB7CisgICAgICAgIG1fY29udGV4dC0+ZGVs
ZXRlUmVuZGVyYnVmZmVyKG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgbV9kZXB0aFN0
ZW5jaWxCdWZmZXIgPSAwOworICAgIH0KKyAgICAKKyAgICBpZiAobV9tdWx0aXNhbXBsZUZCTykg
eworICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBtX2NvbnRleHQtPmRlbGV0
ZUZyYW1lYnVmZmVyKG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBtX211bHRpc2FtcGxlRkJP
ID0gMDsKKyAgICB9CisgICAgICAgIAogICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwogICAgIG1fY29udGV4dC0+ZGVs
ZXRlRnJhbWVidWZmZXIobV9mYm8pOwogICAgIG1fZmJvID0gMDsKLQorICAgIAogICAgIG1fY29u
dGV4dC5jbGVhcigpOwogfQogCi12b2lkIERyYXdpbmdCdWZmZXI6OmJpbmQoKQordm9pZCBEcmF3
aW5nQnVmZmVyOjpyZXNldChjb25zdCBJbnRTaXplJiBuZXdTaXplKQogeworICAgIGlmIChtX3Np
emUgPT0gbmV3U2l6ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2l6ZSA9IG5ld1NpemU7CisK
ICAgICBpZiAoIW1fY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICBtX2Nv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIAorICAgIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dDNEOjpBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzID0gbV9jb250ZXh0LT5nZXRDb250ZXh0QXR0
cmlidXRlcygpOworICAgIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxDb2xvckZvcm1hdCwgY29sb3JG
b3JtYXQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gMDsKKyAgICBpZiAoYXR0cmlidXRl
cy5hbHBoYSkgeworICAgICAgICBpbnRlcm5hbENvbG9yRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkE7CisgICAgICAgIGNvbG9yRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50ZXJuYWxDb2xvckZvcm1hdCA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0I7CisgICAgICAgIGNvbG9yRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QjsKKyAgICB9CisgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRo
KSB7CisgICAgICAgIC8vIFdlIGRvbid0IGFsbG93IHRoZSBsb2dpYyB3aGVyZSBzdGVuY2lsIGlz
IHJlcXVpcmVkIGFuZCBkZXB0aCBpcyBub3QuCisgICAgICAgIC8vIFNlZSBHcmFwaGljc0NvbnRl
eHQzRCBjb25zdHJ1Y3Rvci4KKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCAmJiBhdHRy
aWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTDsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
Q09NUE9ORU5UOworICAgIH0KKworICAgIC8vIHJlc2l6ZSBtdWx0aXNhbXBsZSBGQk8KKyAgICBp
ZiAobXVsdGlzYW1wbGUoKSkgeworICAgICAgICBpbnQgbWF4U2FtcGxlQ291bnQ7CisgICAgICAg
IAorICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX1NBTVBM
RVMsICZtYXhTYW1wbGVDb3VudCk7CisgICAgICAgIGludCBzYW1wbGVDb3VudCA9IHN0ZDo6bWlu
KDgsIG1heFNhbXBsZUNvdW50KTsKKyAgICAgICAgaWYgKHNhbXBsZUNvdW50ID4gbWF4U2FtcGxl
Q291bnQpCisgICAgICAgICAgICBzYW1wbGVDb3VudCA9IG1heFNhbXBsZUNvdW50OworICAgICAg
ICAKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKKworICAgICAgICBtX2NvbnRleHQtPmJp
bmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9tdWx0aXNh
bXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnJl
bmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSLCBzYW1wbGVDb3VudCwgaW50ZXJuYWxDb2xvckZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1f
c2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09M
T1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fbXVsdGlz
YW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0
cmlidXRlcy5kZXB0aCkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5j
aWxCdWZmZXIpOworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnJlbmRl
cmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVS
LCBzYW1wbGVDb3VudCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIG1fc2l6ZS53aWR0aCgp
LCBtX3NpemUuaGVpZ2h0KCkpOworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCkK
KyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRU
QUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZURl
cHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCkKKyAg
ICAgICAgICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1F
TlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVEZXB0aFN0
ZW5jaWxCdWZmZXIpOworICAgICAgICB9CisgICAgICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1
ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKKyAgICAgICAgaWYgKG1f
Y29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgeworICAg
ICAgICAgICAgLy8gQ2xlYW51cAorICAgICAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIHJlc2l6ZSByZWd1bGFyIEZCTwogICAg
IG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UiwgbV9mYm8pOworCisgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZlcik7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJE
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0LCBt
X3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBjb2xvckZvcm1hdCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApOworICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJU
ZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQz
RDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFLCBtX2NvbG9y
QnVmZmVyLCAwKTsKKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCAwKTsKKyAgICBpZiAoIW11bHRpc2FtcGxlKCkgJiYgKGF0dHJpYnV0ZXMu
c3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKSkgeworICAgICAgICBtX2NvbnRleHQtPmJpbmRS
ZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5j
aWxCdWZmZXIpOworICAgICAgICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIG1f
c2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOworICAgICAgICBpZiAoYXR0cmlidXRlcy5z
dGVuY2lsKQorICAgICAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lM
X0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVu
Y2lsQnVmZmVyKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAgICBt
X2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgbV9j
b250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIs
IDApOworICAgIH0KKyAgICBpZiAobV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSX0NPTVBMRVRFKSB7CisgICAgICAgIC8vIENsZWFudXAKKyAgICAgICAgY2xlYXIoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtdWx0aXNhbXBsZSgpKQorICAgICAg
ICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIG1fbXVsdGlzYW1wbGVGQk8pOworCisgICAgLy8gSW5pdGlhbGl6ZSByZW5kZXJidWZmZXJz
IHRvIDAuCisgICAgdW5zaWduZWQgY2hhciBjb2xvck1hc2tbXSA9IHt0cnVlLCB0cnVlLCB0cnVl
LCB0cnVlfSwgZGVwdGhNYXNrID0gdHJ1ZSwgc3RlbmNpbE1hc2sgPSB0cnVlOworICAgIHVuc2ln
bmVkIGNoYXIgaXNTY2lzc29yRW5hYmxlZCA9IGZhbHNlOworICAgIHVuc2lnbmVkIGNoYXIgaXNE
aXRoZXJFbmFibGVkID0gZmFsc2U7CisgICAgdW5zaWduZWQgbG9uZyBjbGVhck1hc2sgPSBHcmFw
aGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVDsKKyAgICBtX2NvbnRleHQtPmdldEJvb2xl
YW52KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9XUklURU1BU0ssIGNvbG9yTWFzayk7CisgICAg
bV9jb250ZXh0LT5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgaWYgKGF0
dHJpYnV0ZXMuZGVwdGgpIHsKKyAgICAgICAgbV9jb250ZXh0LT5nZXRCb29sZWFudihHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfV1JJVEVNQVNLLCAmZGVwdGhNYXNrKTsKKyAgICAgICAgbV9jb250
ZXh0LT5kZXB0aE1hc2sodHJ1ZSk7CisgICAgICAgIGNsZWFyTWFzayB8PSBHcmFwaGljc0NvbnRl
eHQzRDo6REVQVEhfQlVGRkVSX0JJVDsKKyAgICB9CisgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNp
bCkgeworICAgICAgICBtX2NvbnRleHQtPmdldEJvb2xlYW52KEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX1dSSVRFTUFTSywgJnN0ZW5jaWxNYXNrKTsKKyAgICAgICAgbV9jb250ZXh0LT5zdGVu
Y2lsTWFzayh0cnVlKTsKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX0JVRkZFUl9CSVQ7CisgICAgfQorICAgIGlzU2Npc3NvckVuYWJsZWQgPSBtX2NvbnRl
eHQtPmlzRW5hYmxlZChHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKKyAgICBtX2Nv
bnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CisgICAgaXNE
aXRoZXJFbmFibGVkID0gbV9jb250ZXh0LT5pc0VuYWJsZWQoR3JhcGhpY3NDb250ZXh0M0Q6OkRJ
VEhFUik7CisgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVIp
OworCisgICAgbV9jb250ZXh0LT5jbGVhcihjbGVhck1hc2spOworCisgICAgbV9jb250ZXh0LT5j
b2xvck1hc2soY29sb3JNYXNrWzBdLCBjb2xvck1hc2tbMV0sIGNvbG9yTWFza1syXSwgY29sb3JN
YXNrWzNdKTsKKyAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgbV9jb250ZXh0LT5k
ZXB0aE1hc2soZGVwdGhNYXNrKTsKKyAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKQorICAgICAg
ICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrKHN0ZW5jaWxNYXNrKTsKKyAgICBpZiAoaXNTY2lzc29y
RW5hYmxlZCkKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlND
SVNTT1JfVEVTVCk7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CisgICAgaWYgKGlzRGl0aGVyRW5hYmxlZCkKKyAg
ICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUik7CisgICAg
ZWxzZQorICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhF
Uik7CisKKyAgICBtX2NvbnRleHQtPmZsdXNoKCk7CisgICAgCisgICAgZGlkUmVzZXQoKTsKK30K
Kwordm9pZCBEcmF3aW5nQnVmZmVyOjpjb21taXQobG9uZyB4LCBsb25nIHksIGxvbmcgd2lkdGgs
IGxvbmcgaGVpZ2h0KQoreworICAgIGlmICghbV9jb250ZXh0KQorICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgIGlmICh3aWR0aCA8IDApCisgICAgICAgIHdpZHRoID0gbV9zaXplLndpZHRo
KCk7CisgICAgaWYgKGhlaWdodCA8IDApCisgICAgICAgIGhlaWdodCA9IG1fc2l6ZS5oZWlnaHQo
KTsKKyAgICAgICAgCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICAK
KyAgICBpZiAobV9tdWx0aXNhbXBsZUZCTykgeworICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihFeHRlbnNpb25zM0Q6OlJFQURfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8p
OworICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihFeHRlbnNpb25zM0Q6OkRSQVdf
RlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkt
PmJsaXRGcmFtZWJ1ZmZlcih4LCB5LCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCwgR3JhcGhpY3NDb250ZXh0M0Q6
OkxJTkVBUik7CisgICAgfQorICAgIAorICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworfQorCit2b2lkIERyYXdpbmdC
dWZmZXI6OmJpbmQoKQoreworICAgIGlmICghbV9jb250ZXh0KQorICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyA/IG1fbXVsdGlzYW1wbGVGQk8gOiBtX2Zi
byk7CiAgICAgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXpl
LmhlaWdodCgpKTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJh
d2luZ0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L0RyYXdpbmdCdWZmZXIuaAkocmV2aXNpb24gNzE1NjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDEzICs2NCwx
OCBAQCBwdWJsaWM6CiAgICAgLy8gdG8gcHJldmVudCBpbnZhbGlkIGFjY2Vzc2VzIHRvIHRoZSBy
ZXNvdXJjZXMuCiAgICAgdm9pZCBjbGVhcigpOwogICAgIAorICAgIC8vIENvcGllcyB0aGUgbXVs
dGlzYW1wbGUgY29sb3IgYnVmZmVyIHRvIHRoZSBub3JtYWwgY29sb3IgYnVmZmVyIGFuZCBsZWF2
ZXMgbV9mYm8gYm91bmQKKyAgICB2b2lkIGNvbW1pdChsb25nIHggPSAwLCBsb25nIHkgPSAwLCBs
b25nIHdpZHRoID0gLTEsIGxvbmcgaGVpZ2h0ID0gLTEpOworICAgIAorICAgIGJvb2wgbXVsdGlz
YW1wbGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5nZXRDb250ZXh0
QXR0cmlidXRlcygpLmFudGlhbGlhcyAmJiBtX211bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVk
OyB9CisgICAgCisgICAgUGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybUNvbG9yQnVmZmVyKCkgY29u
c3Q7CisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgUGxhdGZvcm1MYXll
ciogcGxhdGZvcm1MYXllcigpOwogICAgIHZvaWQgcHVibGlzaFRvUGxhdGZvcm1MYXllcigpOwog
I2VuZGlmCiAKLSAgICB1bnNpZ25lZCBnZXRSZW5kZXJpbmdSZXN1bHRzQXNUZXh0dXJlKCk7Ci0K
ICNpZiBQTEFURk9STShDSFJPTUlVTSkKICAgICBjbGFzcyBXaWxsUHVibGlzaENhbGxiYWNrIDog
cHVibGljIE5vbmNvcHlhYmxlIHsKICAgICBwdWJsaWM6CkBAIC04OCwxMSArOTMsMjIgQEAgcHJp
dmF0ZToKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBjcmVhdGUoR3JhcGhp
Y3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXplJik7CiAgICAgCiAgICAgRHJhd2luZ0J1ZmZlcihH
cmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFNpemUmKTsKKyAgICAKKyAgICAvLyBQbGF0Zm9y
bSBzcGVjaWZpYyBmdW5jdGlvbiBjYWxsZWQgYWZ0ZXIgcmVzZXQoKSBzbyBlYWNoIHBsYXRmb3Jt
IGNhbiBkbyBleHRyYSB3b3JrIGlmIG5lZWRlZAorICAgIHZvaWQgZGlkUmVzZXQoKTsKIAogICAg
IFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwogICAgIEludFNpemUgbV9zaXpl
OworICAgIGJvb2wgbV9tdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZDsKICAgICBQbGF0Zm9y
bTNET2JqZWN0IG1fZmJvOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9jb2xvckJ1ZmZlcjsKKyAg
ICBQbGF0Zm9ybTNET2JqZWN0IG1fZGVwdGhTdGVuY2lsQnVmZmVyOwogCisgICAgLy8gRm9yIG11
bHRpc2FtcGxpbmcKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fbXVsdGlzYW1wbGVGQk87CisgICAg
UGxhdGZvcm0zRE9iamVjdCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXI7CisgICAgUGxhdGZvcm0z
RE9iamVjdCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyOworICAgIAogI2lmIFBMQVRG
T1JNKENIUk9NSVVNKQogICAgIE93blB0cjxXaWxsUHVibGlzaENhbGxiYWNrPiBtX2NhbGxiYWNr
OwogICAgIE93blB0cjxEcmF3aW5nQnVmZmVySW50ZXJuYWw+IG1faW50ZXJuYWw7CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1ZmZlck1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1ZmZl
ck1hYy5tbQkocmV2aXNpb24gNzE1NjcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9tYWMvRHJhd2luZ0J1ZmZlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBA
QAogCiAjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNE
LmgiCiAjaW5jbHVkZSAiV2ViR0xMYXllci5oIgogCiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMu
aCIKQEAgLTM5LDYgKzQwLDExIEBAIERyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhp
Y3NDb24KICAgICA6IG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9zaXplKHNpemUpCiAgICAg
LCBtX2Zibyhjb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpKQorICAgICwgbV9jb2xvckJ1ZmZl
cigwKQorICAgICwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAsIG1fbXVsdGlzYW1wbGVG
Qk8oMCkKKyAgICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQorICAgICwgbV9tdWx0aXNh
bXBsZURlcHRoU3RlbmNpbEJ1ZmZlcigwKQogewogICAgIEFTU0VSVChtX2Zibyk7CiAgICAgaWYg
KCFtX2ZibykgewpAQCAtNTMsNiArNTksNDAgQEAgRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZl
cihHcmFwaGljc0NvbgogICAgICAgICBbbV9wbGF0Zm9ybUxheWVyLmdldCgpIHNldE5hbWU6QCJE
cmF3aW5nQnVmZmVyIExheWVyIl07CiAjZW5kaWYgICAgCiAgICAgRU5EX0JMT0NLX09CSkNfRVhD
RVBUSU9OUworCisgICAgLy8gY3JlYXRlIGEgdGV4dHVyZSB0byByZW5kZXIgaW50bworICAgIG1f
Y29sb3JCdWZmZXIgPSBjb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7CisgICAgY29udGV4dC0+Ymlu
ZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fY29sb3JCdWZmZXIpOwor
ICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmYoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNE
OjpMSU5FQVIpOworICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmYoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBo
aWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBf
UywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIGNvbnRleHQtPnRleFBh
cmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAg
IGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsK
KyAgICAKKyAgICAvLyBDcmVhdGUgdGhlIEZCTworICAgIG1fZmJvID0gY29udGV4dC0+Y3JlYXRl
RnJhbWVidWZmZXIoKTsKKyAgICBBU1NFUlQobV9mYm8pOworICAgIGlmICghbV9mYm8pIHsKKyAg
ICAgICAgY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgY29u
c3QgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMgPSBjb250ZXh0LT5n
ZXRDb250ZXh0QXR0cmlidXRlcygpOworICAgIAorICAgIC8vIENyZWF0ZSB0aGUgc3RlbmNpbCBh
bmQgZGVwdGggYnVmZmVyIGlmIG5lZWRlZAorICAgIGlmICghbXVsdGlzYW1wbGUoKSAmJiAoYXR0
cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpKQorICAgICAgICBtX2RlcHRoU3Rl
bmNpbEJ1ZmZlciA9IGNvbnRleHQtPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworCisgICAgLy8gY3Jl
YXRlIGEgbXVsdGlzYW1wbGUgRkJPCisgICAgaWYgKG11bHRpc2FtcGxlKCkpIHsKKyAgICAgICAg
bV9tdWx0aXNhbXBsZUZCTyA9IGNvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgICAg
IGNvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIs
IG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIgPSBj
b250ZXh0LT5jcmVhdGVSZW5kZXJidWZmZXIoKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3Rl
bmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgbV9tdWx0aXNhbXBsZURlcHRo
U3RlbmNpbEJ1ZmZlciA9IGNvbnRleHQtPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworICAgIH0KKyAg
ICAKKyAgICByZXNldChzaXplKTsKIH0KIAogRHJhd2luZ0J1ZmZlcjo6fkRyYXdpbmdCdWZmZXIo
KQpAQCAtNjAsMjQgKzEwMCwxOSBAQCBEcmF3aW5nQnVmZmVyOjp+RHJhd2luZ0J1ZmZlcigpCiAg
ICAgY2xlYXIoKTsKIH0KIAotdm9pZCBEcmF3aW5nQnVmZmVyOjpyZXNldChjb25zdCBJbnRTaXpl
JiBuZXdTaXplKQordm9pZCBEcmF3aW5nQnVmZmVyOjpkaWRSZXNldCgpCiB7Ci0gICAgaWYgKCFt
X2NvbnRleHQpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgaWYgKG1fc2l6ZSA9PSBu
ZXdTaXplKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zaXplID0gbmV3U2l6ZTsKLQotICAgIG1f
Y29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAs
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSwgMCk7CiB9CiAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBQbGF0Zm9ybUxh
eWVyKiBEcmF3aW5nQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkKIHsKICAgICByZXR1cm4gbV9wbGF0
Zm9ybUxheWVyLmdldCgpOwogfQotI2VuZGlmCisKK1BsYXRmb3JtM0RPYmplY3QgRHJhd2luZ0J1
ZmZlcjo6cGxhdGZvcm1Db2xvckJ1ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29sb3JC
dWZmZXI7Cit9CiAKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wv
RXh0ZW5zaW9uczNET3BlbkdMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCShyZXZpc2lvbiA3MTU2NykKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDE0IEBAIGJvb2wgRXh0ZW5zaW9uczNET3BlbkdM
OjpzdXBwb3J0cyhjb25zdCAKICAgICAgICAgICAgIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5hZGQo
YXZhaWxhYmxlRXh0ZW5zaW9uc1tpXSk7CiAgICAgICAgIG1faW5pdGlhbGl6ZWRBdmFpbGFibGVF
eHRlbnNpb25zID0gdHJ1ZTsKICAgICB9CisgICAgCisgICAgLy8gR0xfQU5HTEVfZnJhbWVidWZm
ZXJfYmxpdCBhbmQgR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgYXJlICJmYWtlIi4g
VGhleSBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgb3RoZXIKKyAgICAvLyBleHRlbnNpb25zLiBJbiBw
YXJ0aWN1bGFyIEdMX0VYVF9mcmFtZWJ1ZmZlcl9ibGl0IGFuZCBHTF9FWFRfZnJhbWVidWZmZXJf
bXVsdGlzYW1wbGUKKyAgICBpZiAobmFtZSA9PSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCIp
CisgICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VYVF9m
cmFtZWJ1ZmZlcl9ibGl0Iik7CisgICAgaWYgKG5hbWUgPT0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVy
X211bHRpc2FtcGxlIikKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5jb250
YWlucygiR0xfRVhUX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIik7CisgICAgICAgIAogICAgIHJl
dHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMobmFtZSk7CiB9CiAKQEAgLTc3LDYg
Kzg1LDE2IEBAIGludCBFeHRlbnNpb25zM0RPcGVuR0w6OmdldEdyYXBoaWNzUmVzZXQKICAgICBy
ZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOwogfQogCit2b2lkIEV4dGVuc2lvbnMz
RE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKGxvbmcgc3JjWDAsIGxvbmcgc3JjWTAsIGxvbmcgc3Jj
WDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcgZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcg
ZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyBmaWx0ZXIpCit7CisgICAg
OjpnbEJsaXRGcmFtZWJ1ZmZlckVYVChzcmNYMCwgc3JjWTAsIHNyY1gxLCBzcmNZMSwgZHN0WDAs
IGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRlcik7Cit9CisKK3ZvaWQgRXh0ZW5zaW9u
czNET3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodW5zaWduZWQgbG9uZyB0
YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1h
dCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCit7CisgICAgOjpn
bFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh0YXJnZXQsIHNhbXBsZXMsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oCShyZXZpc2lvbiA3MTU2
NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5H
TC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw4IEBAIHB1YmxpYzoKICAgICAvLyBFeHRl
bnNpb25zM0QgbWV0aG9kcy4KICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHMoY29uc3QgU3RyaW5n
Jik7CiAgICAgdmlydHVhbCBpbnQgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpOworICAgIHZp
cnR1YWwgdm9pZCBibGl0RnJhbWVidWZmZXIobG9uZyBzcmNYMCwgbG9uZyBzcmNZMCwgbG9uZyBz
cmNYMSwgbG9uZyBzcmNZMSwgbG9uZyBkc3RYMCwgbG9uZyBkc3RZMCwgbG9uZyBkc3RYMSwgbG9u
ZyBkc3RZMSwgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGZpbHRlcik7CisgICAg
dmlydHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25n
IHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9y
bWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7ICAgIAogCiBw
cml2YXRlOgogICAgIC8vIFRoaXMgY2xhc3Mgb25seSBuZWVkcyB0byBiZSBpbnN0YW50aWF0ZWQg
YnkgR3JhcGhpY3NDb250ZXh0M0QgaW1wbGVtZW50YXRpb25zLgpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHJldmlzaW9u
IDcxNTY3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tp
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIEltYWdlQnVmZmVy
OjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgaWYgKG1fZGF0YS5tX3BsYXRmb3JtQ29udGV4
dC51c2VHUFUoKSAmJiBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkpIHsKICAg
ICAgICAgaWYgKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW5BY2NlbGVyYXRlKCkpIHsK
ICAgICAgICAgICAgIERyYXdpbmdCdWZmZXIqIHNvdXJjZURyYXdpbmdCdWZmZXIgPSBtX2RhdGEu
bV9wbGF0Zm9ybUNvbnRleHQuZ3B1Q2FudmFzKCktPmRyYXdpbmdCdWZmZXIoKTsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIHNvdXJjZVRleHR1cmUgPSBzb3VyY2VEcmF3aW5nQnVmZmVyLT5nZXRSZW5k
ZXJpbmdSZXN1bHRzQXNUZXh0dXJlKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBzb3VyY2VUZXh0
dXJlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNvdXJjZURyYXdpbmdCdWZmZXItPnBsYXRmb3Jt
Q29sb3JCdWZmZXIoKSk7CiAgICAgICAgICAgICBGbG9hdFJlY3QgZGVzdFJlY3RGbGlwcGVkKGRl
c3RSZWN0KTsKICAgICAgICAgICAgIGRlc3RSZWN0RmxpcHBlZC5zZXRZKGRlc3RSZWN0LnkoKSAr
IGRlc3RSZWN0LmhlaWdodCgpKTsKICAgICAgICAgICAgIGRlc3RSZWN0RmxpcHBlZC5zZXRIZWln
aHQoLWRlc3RSZWN0LmhlaWdodCgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73662</attachid>
            <date>2010-11-11 14:26:41 -0800</date>
            <delta_ts>2010-11-11 14:41:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49206-20101111142640.patch</filename>
            <type>text/plain</type>
            <size>26022</size>
            <attacher name="Chris Marrin">cmarrin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTg1MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDcgQEAKKzIwMTAtMTEtMTEgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCBtdWx0aXNhbXBsaW5nIHN1cHBvcnQgdG8gRHJhd2luZ0J1ZmZlci4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MjA2CisKKyAgICAgICAgQWRkZWQg
c3VwcG9ydCBmb3IgdGhlIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQgYW5kIEdMX0FOR0xFX2Zy
YW1lYnVmZmVyX211bHRpc2FtcGxlCisgICAgICAgIGV4dGVuc2lvbnMgdG8gRXh0ZW5zaW9uczNE
LiBUaGVuIEkgdXNlIHRoZXNlIHRvIGFkZCBtdWx0aXNhbXBsZSBzdXBwb3J0IHRvIERyYXdpbmdC
dWZmZXIuCisKKyAgICAgICAgVGhpcyByZS1sYW5kcyBjaGFuZ2VzIHJvbGxlZCBvdXQgYnkgaHR0
cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvNzE4MzkuIEl0IGluY2x1ZGVzCisgICAgICAg
IHRoZSBjaGFuZ2UgZnJvbSBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC83MTgzMSBh
bmQgYWRkaXRpb25hbCBjaGFuZ2VzIHRvIAorICAgICAgICBEcmF3aW5nQnVmZmVyQ2hyb21pdW0u
Y3BwIHdoaWNoIGNhdXNlIHRoZSBicm9rZW4gY2FudmFzIHRlc3RzIHRvIHBhc3MuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpEcmF3aW5nQnVmZmVyOjp+RHJhd2luZ0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3
aW5nQnVmZmVyOjpwdWJsaXNoVG9QbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkRy
YXdpbmdCdWZmZXI6OmRpZFJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6
OnBsYXRmb3JtQ29sb3JCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0V4dGVuc2lvbnMzRENocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpFeHRlbnNpb25z
M0RDaHJvbWl1bTo6YmxpdEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkV4dGVuc2lv
bnMzRENocm9taXVtOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRyYXdpbmdCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVm
ZmVyOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpyZXNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpjb21taXQpOgorICAgICAgICAoV2ViQ29y
ZTo6RHJhd2luZ0J1ZmZlcjo6YmluZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L0RyYXdpbmdCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6Om11bHRp
c2FtcGxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvbWFjL0RyYXdpbmdCdWZm
ZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OmRpZFJlc2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OnBsYXRmb3JtQ29sb3JCdWZmZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RXh0ZW5zaW9uczNET3BlbkdMOjpzdXBwb3J0cyk6CisgICAgICAgIChXZWJD
b3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OmJsaXRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpFeHRlbnNpb25zM0RPcGVuR0w6OnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3KToKKwogMjAxMC0xMS0xMSAgRGF2
aWQgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24g
RnJhc2VyLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbnNpb25zM0QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuc2lvbnMzRC5oCShy
ZXZpc2lvbiA3MTg1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5zaW9uczNE
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEyICs0OCwxMyBAQCBwdWJsaWM6CiAgICAgLy8gICBH
TF9FWFRfcmVhZF9mb3JtYXRfYmdyYQogICAgIC8vICAgR0xfQVJCX3JvYnVzdG5lc3MKICAgICAv
LyAgIEdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCAvIEdMX09FU19wYWNrZWRfZGVwdGhfc3Rl
bmNpbAorICAgIC8vICAgR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdCAvIEdMX0FOR0xFX2ZyYW1l
YnVmZmVyX211bHRpc2FtcGxlCiAKICAgICAvLyBUYWtlcyBmdWxsIG5hbWUgb2YgZXh0ZW5zaW9u
OyBmb3IgZXhhbXBsZSwKICAgICAvLyAiR0xfRVhUX3RleHR1cmVfZm9ybWF0X0JHUkE4ODg4Ii4K
ICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHMoY29uc3QgU3RyaW5nJikgPSAwOwogCi0gICAgZW51
bSB7CisgICAgZW51bSBFeHRlbnNpb25zRW51bVR5cGUgewogICAgICAgICAvLyBHTF9FWFRfdGV4
dHVyZV9mb3JtYXRfQkdSQTg4ODggZW51bXMKICAgICAgICAgQkdSQV9FWFQgPSAweDgwRTEsCiAK
QEAgLTYzLDExICs2NCwyOCBAQCBwdWJsaWM6CiAgICAgICAgIFVOS05PV05fQ09OVEVYVF9SRVNF
VF9BUkIgPSAweDgyNTUsCiAKICAgICAgICAgLy8gR0xfRVhUL09FU19wYWNrZWRfZGVwdGhfc3Rl
bmNpbCBlbnVtcwotICAgICAgICBERVBUSDI0X1NURU5DSUw4ID0gMHg4OEYwCisgICAgICAgIERF
UFRIMjRfU1RFTkNJTDggPSAweDg4RjAsCisgICAgICAgIAorICAgICAgICAvLyBHTF9BTkdMRV9m
cmFtZWJ1ZmZlcl9ibGl0IG5hbWVzCisgICAgICAgIFJFQURfRlJBTUVCVUZGRVIgPSAweDhDQTgs
CisgICAgICAgIERSQVdfRlJBTUVCVUZGRVIgPSAweDhDQTksCisgICAgICAgIERSQVdfRlJBTUVC
VUZGRVJfQklORElORyA9IDB4OENBNiwgCisgICAgICAgIFJFQURfRlJBTUVCVUZGRVJfQklORElO
RyA9IDB4OENBQSwKKyAgICAgICAgCisgICAgICAgIC8vIEdMX0FOR0xFX2ZyYW1lYnVmZmVyX211
bHRpc2FtcGxlIG5hbWVzCisgICAgICAgIFJFTkRFUkJVRkZFUl9TQU1QTEVTID0gMHg4Q0FCLAor
ICAgICAgICBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJU0FNUExFID0gMHg4RDU2LAorICAg
ICAgICBNQVhfU0FNUExFUyA9IDB4OEQ1NwogICAgIH07CiAKICAgICAvLyBHTF9BUkJfcm9idXN0
bmVzcwogICAgIHZpcnR1YWwgaW50IGdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSA9IDA7Cisg
ICAgCisgICAgLy8gR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxpdAorICAgIHZpcnR1YWwgdm9pZCBi
bGl0RnJhbWVidWZmZXIobG9uZyBzcmNYMCwgbG9uZyBzcmNZMCwgbG9uZyBzcmNYMSwgbG9uZyBz
cmNZMSwgbG9uZyBkc3RYMCwgbG9uZyBkc3RZMCwgbG9uZyBkc3RYMSwgbG9uZyBkc3RZMSwgdW5z
aWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGZpbHRlcikgPSAwOworICAgIAorICAgIC8v
IEdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlCisgICAgdmlydHVhbCB2b2lkIHJlbmRl
cmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25lZCBsb25nIHRhcmdldCwgdW5zaWduZWQg
bG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVybmFsZm9ybWF0LCB1bnNpZ25lZCBsb25n
IHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCkgPSAwOyAgICAKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJh
d2luZ0J1ZmZlckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDcxODUw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hy
b21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSwxMSBAQCBEcmF3aW5nQnVmZmVy
OjpEcmF3aW5nQnVmZmVyKEdyYXBoaWNzQ29uCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKICAg
ICAsIG1fc2l6ZShzaXplKQogICAgICwgbV9mYm8oMCkKKyAgICAsIG1fY29sb3JCdWZmZXIoMCkK
KyAgICAsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKDApCisgICAgLCBtX211bHRpc2FtcGxlRkJPKDAp
CisgICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKKyAgICAsIG1fbXVsdGlzYW1wbGVE
ZXB0aFN0ZW5jaWxCdWZmZXIoMCkKICAgICAsIG1faW50ZXJuYWwobmV3IERyYXdpbmdCdWZmZXJJ
bnRlcm5hbCkKIHsKICAgICBpZiAoIW1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0
cygiR0xfQ0hST01JVU1fY29weV90ZXh0dXJlX3RvX3BhcmVudF90ZXh0dXJlIikpIHsKQEAgLTc5
LDcgKzg0LDcgQEAgRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcihHcmFwaGljc0NvbgogICAg
IH0KICAgICBtX2ZibyA9IGNvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CiAgICAgY29udGV4
dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8p
OwotICAgIG1faW50ZXJuYWwtPm9mZnNjcmVlbkNvbG9yVGV4dHVyZSA9IGdlbmVyYXRlQ29sb3JU
ZXh0dXJlKGNvbnRleHQsIHNpemUpOworICAgIG1fY29sb3JCdWZmZXIgPSBnZW5lcmF0ZUNvbG9y
VGV4dHVyZShjb250ZXh0LCBzaXplKTsKIH0KIAogRHJhd2luZ0J1ZmZlcjo6fkRyYXdpbmdCdWZm
ZXIoKQpAQCAtOTMsNyArOTgsNyBAQCBEcmF3aW5nQnVmZmVyOjp+RHJhd2luZ0J1ZmZlcigpCiAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7Ci0gICAgbV9jb250ZXh0LT5k
ZWxldGVUZXh0dXJlKG1faW50ZXJuYWwtPm9mZnNjcmVlbkNvbG9yVGV4dHVyZSk7CisgICAgbV9j
b250ZXh0LT5kZWxldGVUZXh0dXJlKG1fY29sb3JCdWZmZXIpOwogCiAgICAgY2xlYXIoKTsKIH0K
QEAgLTExMywyMyArMTE4LDEzIEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6cHVibGlzaFRvUGxhdGZv
cm1MYXkKICAgICAvLyBoYXBwZW5zIGJlZm9yZSB0aGUgY29tcG9zaXRvciBkcmF3cy4gIFRoaXMg
bWVhbnMgd2UgbWlnaHQgZHJhdyBzdGFsZSBmcmFtZXMgc29tZXRpbWVzLiAgSWRlYWxseSB0aGlz
CiAgICAgLy8gd291bGQgaW5zZXJ0IGEgZmVuY2UgaW50byB0aGUgY2hpbGQgY29tbWFuZCBzdHJl
YW0gdGhhdCB0aGUgY29tcG9zaXRvciBjb3VsZCB3YWl0IGZvci4KICAgICBtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVt
Kj4obV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkpLT5jb3B5VGV4dHVyZVRvUGFyZW50VGV4dHVy
ZUNIUk9NSVVNKG1faW50ZXJuYWwtPm9mZnNjcmVlbkNvbG9yVGV4dHVyZSwgcGFyZW50VGV4dHVy
ZSk7CisgICAgc3RhdGljX2Nhc3Q8RXh0ZW5zaW9uczNEQ2hyb21pdW0qPihtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKSktPmNvcHlUZXh0dXJlVG9QYXJlbnRUZXh0dXJlQ0hST01JVU0obV9jb2xv
ckJ1ZmZlciwgcGFyZW50VGV4dHVyZSk7CiAgICAgbV9jb250ZXh0LT5mbHVzaCgpOwogfQogI2Vu
ZGlmCiAKLXZvaWQgRHJhd2luZ0J1ZmZlcjo6cmVzZXQoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkK
K3ZvaWQgRHJhd2luZ0J1ZmZlcjo6ZGlkUmVzZXQoKQogewotICAgIGlmICghbV9jb250ZXh0KQot
ICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGlmIChtX3NpemUgPT0gbmV3U2l6ZSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIG1fc2l6ZSA9IG5ld1NpemU7Ci0KLSAgICBtX2NvbnRleHQtPmJp
bmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2ludGVybmFsLT5vZmZz
Y3JlZW5Db2xvclRleHR1cmUpOwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIG1fc2l6ZS53
aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgMCk7Ci0KICNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCiAgICAgaWYgKG1faW50ZXJuYWwtPnBsYXRmb3JtTGF5ZXIpCiAgICAgICAg
IG1faW50ZXJuYWwtPnBsYXRmb3JtTGF5ZXItPnNldFRleHR1cmVDaGFuZ2VkKCk7CkBAIC0xNDUs
OSArMTQwLDkgQEAgUGxhdGZvcm1MYXllciogRHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1MYQogfQog
I2VuZGlmCiAKLXVuc2lnbmVkIERyYXdpbmdCdWZmZXI6OmdldFJlbmRlcmluZ1Jlc3VsdHNBc1Rl
eHR1cmUoKQorUGxhdGZvcm0zRE9iamVjdCBEcmF3aW5nQnVmZmVyOjpwbGF0Zm9ybUNvbG9yQnVm
ZmVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9pbnRlcm5hbC0+b2Zmc2NyZWVuQ29sb3JUZXh0
dXJlOworICAgIHJldHVybiBtX2NvbG9yQnVmZmVyOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0V4dGVuc2lvbnMzRENocm9taXVtLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9FeHRlbnNpb25zM0RDaHJv
bWl1bS5oCShyZXZpc2lvbiA3MTg1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRXh0ZW5zaW9uczNEQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzks
OCBAQCBwdWJsaWM6CiAgICAgLy8gRXh0ZW5zaW9uczNEIG1ldGhvZHMuCiAgICAgdmlydHVhbCBi
b29sIHN1cHBvcnRzKGNvbnN0IFN0cmluZyYpOwogICAgIHZpcnR1YWwgaW50IGdldEdyYXBoaWNz
UmVzZXRTdGF0dXNBUkIoKTsKKyAgICB2aXJ0dWFsIHZvaWQgYmxpdEZyYW1lYnVmZmVyKGxvbmcg
c3JjWDAsIGxvbmcgc3JjWTAsIGxvbmcgc3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxv
bmcgZHN0WTAsIGxvbmcgZHN0WDEsIGxvbmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5z
aWduZWQgbG9uZyBmaWx0ZXIpIHsgfQorICAgIHZpcnR1YWwgdm9pZCByZW5kZXJidWZmZXJTdG9y
YWdlTXVsdGlzYW1wbGUodW5zaWduZWQgbG9uZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxl
cywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZvcm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5z
aWduZWQgbG9uZyBoZWlnaHQpIHsgfQogCiAgICAgZW51bSB7CiAgICAgICAgIC8vIEdMX0NIUk9N
SVVNX21hcF9zdWIgKGVudW1zIGluaGVyaXRlZCBmcm9tIEdMX0FSQl92ZXJ0ZXhfYnVmZmVyX29i
amVjdCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdC
dWZmZXIuY3BwCShyZXZpc2lvbiA3MTg1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L0RyYXdpbmdCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMSArMzQsMTQgQEAK
IAogI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKIAorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5o
IgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gRHJh
d2luZ0J1ZmZlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBJbnRT
aXplJiBzaXplKQogewogICAgIFJlZlB0cjxEcmF3aW5nQnVmZmVyPiBkcmF3aW5nQnVmZmVyID0g
YWRvcHRSZWYobmV3IERyYXdpbmdCdWZmZXIoY29udGV4dCwgc2l6ZSkpOworICAgIGRyYXdpbmdC
dWZmZXItPm1fbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQgPSBjb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPnN1cHBvcnRzKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0IikgJiYgY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlz
YW1wbGUiKTsKICAgICByZXR1cm4gKGRyYXdpbmdCdWZmZXItPm1fY29udGV4dCkgPyBkcmF3aW5n
QnVmZmVyLnJlbGVhc2UoKSA6IDA7CiB9CiAKQEAgLTQ2LDIxICs0OSwxOTMgQEAgdm9pZCBEcmF3
aW5nQnVmZmVyOjpjbGVhcigpCiB7CiAgICAgaWYgKCFtX2NvbnRleHQpCiAgICAgICAgIHJldHVy
bjsKLQorICAgICAgICAKICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IG1fY29udGV4dC0+ZGVsZXRlVGV4dHVyZShtX2NvbG9yQnVmZmVyKTsKKyAgICBtX2NvbG9yQnVm
ZmVyID0gMDsKKyAgICAKKyAgICBpZiAobV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKSB7CisgICAg
ICAgIG1fY29udGV4dC0+ZGVsZXRlUmVuZGVyYnVmZmVyKG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZl
cik7CisgICAgICAgIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlciA9IDA7CisgICAgfQorICAgIAor
ICAgIGlmIChtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKSB7CisgICAgICAgIG1fY29u
dGV4dC0+ZGVsZXRlUmVuZGVyYnVmZmVyKG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIp
OworICAgICAgICBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyID0gMDsKKyAgICB9Cisg
ICAgCisgICAgaWYgKG1fZGVwdGhTdGVuY2lsQnVmZmVyKSB7CisgICAgICAgIG1fY29udGV4dC0+
ZGVsZXRlUmVuZGVyYnVmZmVyKG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgbV9kZXB0
aFN0ZW5jaWxCdWZmZXIgPSAwOworICAgIH0KKyAgICAKKyAgICBpZiAobV9tdWx0aXNhbXBsZUZC
TykgeworICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBtX2NvbnRleHQtPmRl
bGV0ZUZyYW1lYnVmZmVyKG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBtX211bHRpc2FtcGxl
RkJPID0gMDsKKyAgICB9CisgICAgICAgIAogICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwogICAgIG1fY29udGV4dC0+
ZGVsZXRlRnJhbWVidWZmZXIobV9mYm8pOwogICAgIG1fZmJvID0gMDsKLQorICAgIAogICAgIG1f
Y29udGV4dC5jbGVhcigpOwogfQogCi12b2lkIERyYXdpbmdCdWZmZXI6OmJpbmQoKQordm9pZCBE
cmF3aW5nQnVmZmVyOjpyZXNldChjb25zdCBJbnRTaXplJiBuZXdTaXplKQogeworICAgIGlmICht
X3NpemUgPT0gbmV3U2l6ZSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2l6ZSA9IG5ld1NpemU7
CisKICAgICBpZiAoIW1fY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICBt
X2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIAorICAgIGNvbnN0IEdyYXBoaWNz
Q29udGV4dDNEOjpBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzID0gbV9jb250ZXh0LT5nZXRDb250ZXh0
QXR0cmlidXRlcygpOworICAgIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxDb2xvckZvcm1hdCwgY29s
b3JGb3JtYXQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gMDsKKyAgICBpZiAoYXR0cmli
dXRlcy5hbHBoYSkgeworICAgICAgICBpbnRlcm5hbENvbG9yRm9ybWF0ID0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkE7CisgICAgICAgIGNvbG9yRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50ZXJuYWxDb2xvckZvcm1hdCA9IEdyYXBoaWNz
Q29udGV4dDNEOjpSR0I7CisgICAgICAgIGNvbG9yRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQjsKKyAgICB9CisgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRl
cHRoKSB7CisgICAgICAgIC8vIFdlIGRvbid0IGFsbG93IHRoZSBsb2dpYyB3aGVyZSBzdGVuY2ls
IGlzIHJlcXVpcmVkIGFuZCBkZXB0aCBpcyBub3QuCisgICAgICAgIC8vIFNlZSBHcmFwaGljc0Nv
bnRleHQzRCBjb25zdHJ1Y3Rvci4KKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCAmJiBh
dHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQg
PSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTDsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfQ09NUE9ORU5UOworICAgIH0KKworICAgIC8vIHJlc2l6ZSBtdWx0aXNhbXBsZSBGQk8KKyAg
ICBpZiAobXVsdGlzYW1wbGUoKSkgeworICAgICAgICBpbnQgbWF4U2FtcGxlQ291bnQ7CisgICAg
ICAgIAorICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX1NB
TVBMRVMsICZtYXhTYW1wbGVDb3VudCk7CisgICAgICAgIGludCBzYW1wbGVDb3VudCA9IHN0ZDo6
bWluKDgsIG1heFNhbXBsZUNvdW50KTsKKyAgICAgICAgaWYgKHNhbXBsZUNvdW50ID4gbWF4U2Ft
cGxlQ291bnQpCisgICAgICAgICAgICBzYW1wbGVDb3VudCA9IG1heFNhbXBsZUNvdW50OworICAg
ICAgICAKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKKworICAgICAgICBtX2NvbnRleHQt
PmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9tdWx0
aXNhbXBsZUNvbG9yQnVmZmVyKTsKKyAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkt
PnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVS
QlVGRkVSLCBzYW1wbGVDb3VudCwgaW50ZXJuYWxDb2xvckZvcm1hdCwgbV9zaXplLndpZHRoKCks
IG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJi
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6
Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fbXVs
dGlzYW1wbGVDb2xvckJ1ZmZlcik7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwg
YXR0cmlidXRlcy5kZXB0aCkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kUmVuZGVyYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVEZXB0aFN0
ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnJl
bmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSLCBzYW1wbGVDb3VudCwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIG1fc2l6ZS53aWR0
aCgpLCBtX3NpemUuaGVpZ2h0KCkpOworICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNp
bCkKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxf
QVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBs
ZURlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCkK
KyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFD
SE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVEZXB0
aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICB9CisgICAgICAgIG1fY29udGV4dC0+YmluZFJlbmRl
cmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKKyAgICAgICAgaWYg
KG1fY29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgewor
ICAgICAgICAgICAgLy8gQ2xlYW51cAorICAgICAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIHJlc2l6ZSByZWd1bGFyIEZCTwog
ICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUiwgbV9mYm8pOworCisgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZlcik7CisgICAgbV9jb250ZXh0LT50ZXhJbWFn
ZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0
LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBjb2xvckZvcm1hdCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApOworICAgIG1fY29udGV4dC0+ZnJhbWVidWZm
ZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRl
eHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFLCBtX2Nv
bG9yQnVmZmVyLCAwKTsKKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCAwKTsKKyAgICBpZiAoIW11bHRpc2FtcGxlKCkgJiYgKGF0dHJpYnV0
ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKSkgeworICAgICAgICBtX2NvbnRleHQtPmJp
bmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aFN0
ZW5jaWxCdWZmZXIpOworICAgICAgICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQs
IG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOworICAgICAgICBpZiAoYXR0cmlidXRl
cy5zdGVuY2lsKQorICAgICAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVO
Q0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhT
dGVuY2lsQnVmZmVyKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgICAg
ICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNz
Q29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAg
bV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZG
RVIsIDApOworICAgIH0KKyAgICBpZiAobV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSX0NPTVBMRVRFKSB7CisgICAgICAgIC8vIENsZWFudXAKKyAgICAgICAgY2xlYXIo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtdWx0aXNhbXBsZSgpKQorICAg
ICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOworCisgICAgLy8gSW5pdGlhbGl6ZSByZW5kZXJidWZm
ZXJzIHRvIDAuCisgICAgdW5zaWduZWQgY2hhciBjb2xvck1hc2tbXSA9IHt0cnVlLCB0cnVlLCB0
cnVlLCB0cnVlfSwgZGVwdGhNYXNrID0gdHJ1ZSwgc3RlbmNpbE1hc2sgPSB0cnVlOworICAgIHVu
c2lnbmVkIGNoYXIgaXNTY2lzc29yRW5hYmxlZCA9IGZhbHNlOworICAgIHVuc2lnbmVkIGNoYXIg
aXNEaXRoZXJFbmFibGVkID0gZmFsc2U7CisgICAgdW5zaWduZWQgbG9uZyBjbGVhck1hc2sgPSBH
cmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVDsKKyAgICBtX2NvbnRleHQtPmdldEJv
b2xlYW52KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9XUklURU1BU0ssIGNvbG9yTWFzayk7Cisg
ICAgbV9jb250ZXh0LT5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CisgICAgaWYg
KGF0dHJpYnV0ZXMuZGVwdGgpIHsKKyAgICAgICAgbV9jb250ZXh0LT5nZXRCb29sZWFudihHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfV1JJVEVNQVNLLCAmZGVwdGhNYXNrKTsKKyAgICAgICAgbV9j
b250ZXh0LT5kZXB0aE1hc2sodHJ1ZSk7CisgICAgICAgIGNsZWFyTWFzayB8PSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVDsKKyAgICB9CisgICAgaWYgKGF0dHJpYnV0ZXMuc3Rl
bmNpbCkgeworICAgICAgICBtX2NvbnRleHQtPmdldEJvb2xlYW52KEdyYXBoaWNzQ29udGV4dDNE
OjpTVEVOQ0lMX1dSSVRFTUFTSywgJnN0ZW5jaWxNYXNrKTsKKyAgICAgICAgbV9jb250ZXh0LT5z
dGVuY2lsTWFzayh0cnVlKTsKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNE
OjpTVEVOQ0lMX0JVRkZFUl9CSVQ7CisgICAgfQorICAgIGlzU2Npc3NvckVuYWJsZWQgPSBtX2Nv
bnRleHQtPmlzRW5hYmxlZChHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKKyAgICBt
X2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CisgICAg
aXNEaXRoZXJFbmFibGVkID0gbV9jb250ZXh0LT5pc0VuYWJsZWQoR3JhcGhpY3NDb250ZXh0M0Q6
OkRJVEhFUik7CisgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpESVRI
RVIpOworCisgICAgbV9jb250ZXh0LT5jbGVhcihjbGVhck1hc2spOworCisgICAgbV9jb250ZXh0
LT5jb2xvck1hc2soY29sb3JNYXNrWzBdLCBjb2xvck1hc2tbMV0sIGNvbG9yTWFza1syXSwgY29s
b3JNYXNrWzNdKTsKKyAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgbV9jb250ZXh0
LT5kZXB0aE1hc2soZGVwdGhNYXNrKTsKKyAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKQorICAg
ICAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrKHN0ZW5jaWxNYXNrKTsKKyAgICBpZiAoaXNTY2lz
c29yRW5hYmxlZCkKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OlNDSVNTT1JfVEVTVCk7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CisgICAgaWYgKGlzRGl0aGVyRW5hYmxlZCkK
KyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUik7Cisg
ICAgZWxzZQorICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkRJ
VEhFUik7CisKKyAgICBtX2NvbnRleHQtPmZsdXNoKCk7CisgICAgCisgICAgZGlkUmVzZXQoKTsK
K30KKwordm9pZCBEcmF3aW5nQnVmZmVyOjpjb21taXQobG9uZyB4LCBsb25nIHksIGxvbmcgd2lk
dGgsIGxvbmcgaGVpZ2h0KQoreworICAgIGlmICghbV9jb250ZXh0KQorICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgIGlmICh3aWR0aCA8IDApCisgICAgICAgIHdpZHRoID0gbV9zaXplLndp
ZHRoKCk7CisgICAgaWYgKGhlaWdodCA8IDApCisgICAgICAgIGhlaWdodCA9IG1fc2l6ZS5oZWln
aHQoKTsKKyAgICAgICAgCisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICAKKyAgICBpZiAobV9tdWx0aXNhbXBsZUZCTykgeworICAgICAgICBtX2NvbnRleHQtPmJpbmRG
cmFtZWJ1ZmZlcihFeHRlbnNpb25zM0Q6OlJFQURfRlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVG
Qk8pOworICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihFeHRlbnNpb25zM0Q6OkRS
QVdfRlJBTUVCVUZGRVIsIG1fZmJvKTsKKyAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPmJsaXRGcmFtZWJ1ZmZlcih4LCB5LCB3aWR0aCwgaGVpZ2h0LCB4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCwgR3JhcGhpY3NDb250ZXh0
M0Q6OkxJTkVBUik7CisgICAgfQorICAgIAorICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOworfQorCit2b2lkIERyYXdp
bmdCdWZmZXI6OmJpbmQoKQoreworICAgIGlmICghbV9jb250ZXh0KQorICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZCTyA/IG1fbXVsdGlzYW1wbGVGQk8gOiBt
X2Zibyk7CiAgICAgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9z
aXplLmhlaWdodCgpKTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
RHJhd2luZ0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L0RyYXdpbmdCdWZmZXIuaAkocmV2aXNpb24gNzE4NTApCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDEzICs2
NCwxOCBAQCBwdWJsaWM6CiAgICAgLy8gdG8gcHJldmVudCBpbnZhbGlkIGFjY2Vzc2VzIHRvIHRo
ZSByZXNvdXJjZXMuCiAgICAgdm9pZCBjbGVhcigpOwogICAgIAorICAgIC8vIENvcGllcyB0aGUg
bXVsdGlzYW1wbGUgY29sb3IgYnVmZmVyIHRvIHRoZSBub3JtYWwgY29sb3IgYnVmZmVyIGFuZCBs
ZWF2ZXMgbV9mYm8gYm91bmQKKyAgICB2b2lkIGNvbW1pdChsb25nIHggPSAwLCBsb25nIHkgPSAw
LCBsb25nIHdpZHRoID0gLTEsIGxvbmcgaGVpZ2h0ID0gLTEpOworICAgIAorICAgIGJvb2wgbXVs
dGlzYW1wbGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5nZXRDb250
ZXh0QXR0cmlidXRlcygpLmFudGlhbGlhcyAmJiBtX211bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9y
dGVkOyB9CisgICAgCisgICAgUGxhdGZvcm0zRE9iamVjdCBwbGF0Zm9ybUNvbG9yQnVmZmVyKCkg
Y29uc3Q7CisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgUGxhdGZvcm1M
YXllciogcGxhdGZvcm1MYXllcigpOwogICAgIHZvaWQgcHVibGlzaFRvUGxhdGZvcm1MYXllcigp
OwogI2VuZGlmCiAKLSAgICB1bnNpZ25lZCBnZXRSZW5kZXJpbmdSZXN1bHRzQXNUZXh0dXJlKCk7
Ci0KICNpZiBQTEFURk9STShDSFJPTUlVTSkKICAgICBjbGFzcyBXaWxsUHVibGlzaENhbGxiYWNr
IDogcHVibGljIE5vbmNvcHlhYmxlIHsKICAgICBwdWJsaWM6CkBAIC04OCwxMSArOTMsMjIgQEAg
cHJpdmF0ZToKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxEcmF3aW5nQnVmZmVyPiBjcmVhdGUoR3Jh
cGhpY3NDb250ZXh0M0QqLCBjb25zdCBJbnRTaXplJik7CiAgICAgCiAgICAgRHJhd2luZ0J1ZmZl
cihHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IEludFNpemUmKTsKKyAgICAKKyAgICAvLyBQbGF0
Zm9ybSBzcGVjaWZpYyBmdW5jdGlvbiBjYWxsZWQgYWZ0ZXIgcmVzZXQoKSBzbyBlYWNoIHBsYXRm
b3JtIGNhbiBkbyBleHRyYSB3b3JrIGlmIG5lZWRlZAorICAgIHZvaWQgZGlkUmVzZXQoKTsKIAog
ICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwogICAgIEludFNpemUgbV9z
aXplOworICAgIGJvb2wgbV9tdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZDsKICAgICBQbGF0
Zm9ybTNET2JqZWN0IG1fZmJvOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9jb2xvckJ1ZmZlcjsK
KyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZGVwdGhTdGVuY2lsQnVmZmVyOwogCisgICAgLy8gRm9y
IG11bHRpc2FtcGxpbmcKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fbXVsdGlzYW1wbGVGQk87Cisg
ICAgUGxhdGZvcm0zRE9iamVjdCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXI7CisgICAgUGxhdGZv
cm0zRE9iamVjdCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyOworICAgIAogI2lmIFBM
QVRGT1JNKENIUk9NSVVNKQogICAgIE93blB0cjxXaWxsUHVibGlzaENhbGxiYWNrPiBtX2NhbGxi
YWNrOwogICAgIE93blB0cjxEcmF3aW5nQnVmZmVySW50ZXJuYWw+IG1faW50ZXJuYWw7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1ZmZlck1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1
ZmZlck1hYy5tbQkocmV2aXNpb24gNzE4NTApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9tYWMvRHJhd2luZ0J1ZmZlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjks
NyBAQAogCiAjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgogCisjaW5jbHVkZSAiRXh0ZW5zaW9u
czNELmgiCiAjaW5jbHVkZSAiV2ViR0xMYXllci5oIgogCiAjaW1wb3J0ICJCbG9ja0V4Y2VwdGlv
bnMuaCIKQEAgLTM5LDYgKzQwLDExIEBAIERyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3Jh
cGhpY3NDb24KICAgICA6IG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9zaXplKHNpemUpCiAg
ICAgLCBtX2Zibyhjb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpKQorICAgICwgbV9jb2xvckJ1
ZmZlcigwKQorICAgICwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAsIG1fbXVsdGlzYW1w
bGVGQk8oMCkKKyAgICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQorICAgICwgbV9tdWx0
aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcigwKQogewogICAgIEFTU0VSVChtX2Zibyk7CiAgICAg
aWYgKCFtX2ZibykgewpAQCAtNTMsNiArNTksNDAgQEAgRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1
ZmZlcihHcmFwaGljc0NvbgogICAgICAgICBbbV9wbGF0Zm9ybUxheWVyLmdldCgpIHNldE5hbWU6
QCJEcmF3aW5nQnVmZmVyIExheWVyIl07CiAjZW5kaWYgICAgCiAgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUworCisgICAgLy8gY3JlYXRlIGEgdGV4dHVyZSB0byByZW5kZXIgaW50bworICAg
IG1fY29sb3JCdWZmZXIgPSBjb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7CisgICAgY29udGV4dC0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fY29sb3JCdWZmZXIp
OworICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmYoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4
dDNEOjpMSU5FQVIpOworICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmYoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dS
QVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIGNvbnRleHQtPnRl
eFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwor
ICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAw
KTsKKyAgICAKKyAgICAvLyBDcmVhdGUgdGhlIEZCTworICAgIG1fZmJvID0gY29udGV4dC0+Y3Jl
YXRlRnJhbWVidWZmZXIoKTsKKyAgICBBU1NFUlQobV9mYm8pOworICAgIGlmICghbV9mYm8pIHsK
KyAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAg
Y29uc3QgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMgPSBjb250ZXh0
LT5nZXRDb250ZXh0QXR0cmlidXRlcygpOworICAgIAorICAgIC8vIENyZWF0ZSB0aGUgc3RlbmNp
bCBhbmQgZGVwdGggYnVmZmVyIGlmIG5lZWRlZAorICAgIGlmICghbXVsdGlzYW1wbGUoKSAmJiAo
YXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpKQorICAgICAgICBtX2RlcHRo
U3RlbmNpbEJ1ZmZlciA9IGNvbnRleHQtPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworCisgICAgLy8g
Y3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPCisgICAgaWYgKG11bHRpc2FtcGxlKCkpIHsKKyAgICAg
ICAgbV9tdWx0aXNhbXBsZUZCTyA9IGNvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAg
ICAgIGNvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIg
PSBjb250ZXh0LT5jcmVhdGVSZW5kZXJidWZmZXIoKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMu
c3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgbV9tdWx0aXNhbXBsZURl
cHRoU3RlbmNpbEJ1ZmZlciA9IGNvbnRleHQtPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworICAgIH0K
KyAgICAKKyAgICByZXNldChzaXplKTsKIH0KIAogRHJhd2luZ0J1ZmZlcjo6fkRyYXdpbmdCdWZm
ZXIoKQpAQCAtNjAsMjQgKzEwMCwxOSBAQCBEcmF3aW5nQnVmZmVyOjp+RHJhd2luZ0J1ZmZlcigp
CiAgICAgY2xlYXIoKTsKIH0KIAotdm9pZCBEcmF3aW5nQnVmZmVyOjpyZXNldChjb25zdCBJbnRT
aXplJiBuZXdTaXplKQordm9pZCBEcmF3aW5nQnVmZmVyOjpkaWRSZXNldCgpCiB7Ci0gICAgaWYg
KCFtX2NvbnRleHQpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgaWYgKG1fc2l6ZSA9
PSBuZXdTaXplKQotICAgICAgICByZXR1cm47Ci0gICAgbV9zaXplID0gbmV3U2l6ZTsKLQotICAg
IG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCks
IDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSwgMCk7CiB9CiAKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiBQbGF0Zm9y
bUxheWVyKiBEcmF3aW5nQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkKIHsKICAgICByZXR1cm4gbV9w
bGF0Zm9ybUxheWVyLmdldCgpOwogfQotI2VuZGlmCisKK1BsYXRmb3JtM0RPYmplY3QgRHJhd2lu
Z0J1ZmZlcjo6cGxhdGZvcm1Db2xvckJ1ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29s
b3JCdWZmZXI7Cit9CiAKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCShyZXZpc2lvbiA3MTg1MCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDE0IEBAIGJvb2wgRXh0ZW5zaW9uczNET3Bl
bkdMOjpzdXBwb3J0cyhjb25zdCAKICAgICAgICAgICAgIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5h
ZGQoYXZhaWxhYmxlRXh0ZW5zaW9uc1tpXSk7CiAgICAgICAgIG1faW5pdGlhbGl6ZWRBdmFpbGFi
bGVFeHRlbnNpb25zID0gdHJ1ZTsKICAgICB9CisgICAgCisgICAgLy8gR0xfQU5HTEVfZnJhbWVi
dWZmZXJfYmxpdCBhbmQgR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUgYXJlICJmYWtl
Ii4gVGhleSBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgb3RoZXIKKyAgICAvLyBleHRlbnNpb25zLiBJ
biBwYXJ0aWN1bGFyIEdMX0VYVF9mcmFtZWJ1ZmZlcl9ibGl0IGFuZCBHTF9FWFRfZnJhbWVidWZm
ZXJfbXVsdGlzYW1wbGUKKyAgICBpZiAobmFtZSA9PSAiR0xfQU5HTEVfZnJhbWVidWZmZXJfYmxp
dCIpCisgICAgICAgIHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMoIkdMX0VY
VF9mcmFtZWJ1ZmZlcl9ibGl0Iik7CisgICAgaWYgKG5hbWUgPT0gIkdMX0FOR0xFX2ZyYW1lYnVm
ZmVyX211bHRpc2FtcGxlIikKKyAgICAgICAgcmV0dXJuIG1fYXZhaWxhYmxlRXh0ZW5zaW9ucy5j
b250YWlucygiR0xfRVhUX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlIik7CisgICAgICAgIAogICAg
IHJldHVybiBtX2F2YWlsYWJsZUV4dGVuc2lvbnMuY29udGFpbnMobmFtZSk7CiB9CiAKQEAgLTc3
LDYgKzg1LDE2IEBAIGludCBFeHRlbnNpb25zM0RPcGVuR0w6OmdldEdyYXBoaWNzUmVzZXQKICAg
ICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOwogfQogCit2b2lkIEV4dGVuc2lv
bnMzRE9wZW5HTDo6YmxpdEZyYW1lYnVmZmVyKGxvbmcgc3JjWDAsIGxvbmcgc3JjWTAsIGxvbmcg
c3JjWDEsIGxvbmcgc3JjWTEsIGxvbmcgZHN0WDAsIGxvbmcgZHN0WTAsIGxvbmcgZHN0WDEsIGxv
bmcgZHN0WTEsIHVuc2lnbmVkIGxvbmcgbWFzaywgdW5zaWduZWQgbG9uZyBmaWx0ZXIpCit7Cisg
ICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVChzcmNYMCwgc3JjWTAsIHNyY1gxLCBzcmNZMSwgZHN0
WDAsIGRzdFkwLCBkc3RYMSwgZHN0WTEsIG1hc2ssIGZpbHRlcik7Cit9CisKK3ZvaWQgRXh0ZW5z
aW9uczNET3BlbkdMOjpyZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUodW5zaWduZWQgbG9u
ZyB0YXJnZXQsIHVuc2lnbmVkIGxvbmcgc2FtcGxlcywgdW5zaWduZWQgbG9uZyBpbnRlcm5hbGZv
cm1hdCwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpCit7CisgICAg
OjpnbFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUVYVCh0YXJnZXQsIHNhbXBsZXMsIGlu
dGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oCShyZXZpc2lv
biA3MTg1MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMz
RE9wZW5HTC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw4IEBAIHB1YmxpYzoKICAgICAv
LyBFeHRlbnNpb25zM0QgbWV0aG9kcy4KICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHMoY29uc3Qg
U3RyaW5nJik7CiAgICAgdmlydHVhbCBpbnQgZ2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpOwor
ICAgIHZpcnR1YWwgdm9pZCBibGl0RnJhbWVidWZmZXIobG9uZyBzcmNYMCwgbG9uZyBzcmNZMCwg
bG9uZyBzcmNYMSwgbG9uZyBzcmNZMSwgbG9uZyBkc3RYMCwgbG9uZyBkc3RZMCwgbG9uZyBkc3RY
MSwgbG9uZyBkc3RZMSwgdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIGZpbHRlcik7
CisgICAgdmlydHVhbCB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZSh1bnNpZ25l
ZCBsb25nIHRhcmdldCwgdW5zaWduZWQgbG9uZyBzYW1wbGVzLCB1bnNpZ25lZCBsb25nIGludGVy
bmFsZm9ybWF0LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7ICAg
IAogCiBwcml2YXRlOgogICAgIC8vIFRoaXMgY2xhc3Mgb25seSBuZWVkcyB0byBiZSBpbnN0YW50
aWF0ZWQgYnkgR3JhcGhpY3NDb250ZXh0M0QgaW1wbGVtZW50YXRpb25zLgpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHJl
dmlzaW9uIDcxODUwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVm
ZmVyU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsNyBAQCB2b2lkIEltYWdl
QnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgaWYgKG1fZGF0YS5tX3BsYXRmb3Jt
Q29udGV4dC51c2VHUFUoKSAmJiBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkp
IHsKICAgICAgICAgaWYgKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW5BY2NlbGVyYXRl
KCkpIHsKICAgICAgICAgICAgIERyYXdpbmdCdWZmZXIqIHNvdXJjZURyYXdpbmdCdWZmZXIgPSBt
X2RhdGEubV9wbGF0Zm9ybUNvbnRleHQuZ3B1Q2FudmFzKCktPmRyYXdpbmdCdWZmZXIoKTsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIHNvdXJjZVRleHR1cmUgPSBzb3VyY2VEcmF3aW5nQnVmZmVyLT5n
ZXRSZW5kZXJpbmdSZXN1bHRzQXNUZXh0dXJlKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBzb3Vy
Y2VUZXh0dXJlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNvdXJjZURyYXdpbmdCdWZmZXItPnBs
YXRmb3JtQ29sb3JCdWZmZXIoKSk7CiAgICAgICAgICAgICBGbG9hdFJlY3QgZGVzdFJlY3RGbGlw
cGVkKGRlc3RSZWN0KTsKICAgICAgICAgICAgIGRlc3RSZWN0RmxpcHBlZC5zZXRZKGRlc3RSZWN0
LnkoKSArIGRlc3RSZWN0LmhlaWdodCgpKTsKICAgICAgICAgICAgIGRlc3RSZWN0RmxpcHBlZC5z
ZXRIZWlnaHQoLWRlc3RSZWN0LmhlaWdodCgpKTsK
</data>
<flag name="review"
          id="64137"
          type_id="1"
          status="+"
          setter="jamesr"
    />
          </attachment>
      

    </bug>

</bugzilla>