<?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>14145</bug_id>
          
          <creation_ts>2007-06-14 13:19:28 -0700</creation_ts>
          <short_desc>RenderSVGContainer should not inherit from RenderContainer</short_desc>
          <delta_ts>2007-07-14 16:16:50 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>7536</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-06-14 13:19:28 -0700</bug_when>
    <thetext>RenderSVGContainer should not inherit from RenderContainer

at least not now that RenderSVGRoot exists. :)

This may mean implementing a little bit of RenderContainer logic in RenderSVGContainer manually (like RenderContainer::paint() for instance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>7363</commentid>
    <comment_count>1</comment_count>
      <attachid>15070</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-06-15 16:33:43 -0700</bug_when>
    <thetext>Created attachment 15070
partial fix

I&apos;m not sure I&apos;ll have time/energy to finish this patch, but I thought I should post my partial work anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>7199</commentid>
    <comment_count>2</comment_count>
      <attachid>15101</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-06-18 09:59:38 -0700</bug_when>
    <thetext>Created attachment 15101
working patch (rob to finish)

Ok, so this patch works completely (no crashes, etc).  There are two things which still need to be done.

1.  It breaks 4 test cases.  I believe this is something to do with hit-testing errors in RenderSVGContainer when it&apos;s being an &lt;svg&gt;
2.  Still need to change RenderSVGRoot::rendererName() to return RenderSVGRoot and update tests accordingly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>4748</commentid>
    <comment_count>3</comment_count>
      <attachid>15522</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2007-07-14 15:43:32 -0700</bug_when>
    <thetext>Created attachment 15522
Initial patch

New patch incorporating Eric&apos;s patch, but bringing it to a working state w/o regressions.
Inlcudes some fixes from Rob made during WWDC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>4749</commentid>
    <comment_count>4</comment_count>
      <attachid>15522</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2007-07-14 15:47:54 -0700</bug_when>
    <thetext>Comment on attachment 15522
Initial patch

     // Only the root &lt;svg&gt; element should need any translations using the HTML/CSS system
     // parentX, parentY are also non-zero for first-level kids of these
     // CSS-transformed &lt;svg&gt; root-elements (due to RenderBox::paint) for any other element
     // they should be 0.   m_x, m_y should always be 0 for non-root svg containers
-    ASSERT(m_x == 0);
-    ASSERT(m_y == 0);

should the assertions not become isRoot || m_x == 0
etc?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>4750</commentid>
    <comment_count>5</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2007-07-14 15:57:44 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 15522 [edit])
&gt;      // Only the root &lt;svg&gt; element should need any translations using the
&gt; HTML/CSS system
&gt;      // parentX, parentY are also non-zero for first-level kids of these
&gt;      // CSS-transformed &lt;svg&gt; root-elements (due to RenderBox::paint) for any
&gt; other element
&gt;      // they should be 0.   m_x, m_y should always be 0 for non-root svg
&gt; containers
&gt; -    ASSERT(m_x == 0);
&gt; -    ASSERT(m_y == 0);
&gt; 
&gt; should the assertions not become isRoot || m_x == 0
&gt; etc?
&gt; 

The outermost &lt;svg&gt; element is handled by RenderSVGRoot
nowadays. The commented is outdated, I&apos;ll fix it.

Greetings,
Niko</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>4707</commentid>
    <comment_count>6</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2007-07-14 16:16:50 -0700</bug_when>
    <thetext>Landed in r24292.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15070</attachid>
            <date>2007-06-15 16:33:43 -0700</date>
            <delta_ts>2007-06-18 09:59:38 -0700</delta_ts>
            <desc>partial fix</desc>
            <filename>part.patch</filename>
            <type>text/plain</type>
            <size>13116</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGNvbmZpZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvbmZpZy5oCShyZXZpc2lvbiAyMzU0NykK
KysrIGNvbmZpZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw4IEBACiAKICNkZWZpbmUg
TU9CSUxFIDAKIAorI2RlZmluZSBFTkFCTEVfU1ZHX0VYUEVSSU1FTlRBTF9GRUFUVVJFUyAxCisK
ICNpZiBfX0FQUExFX18KICNkZWZpbmUgSEFWRV9GVU5DX1VTTEVFUCAxCiAKSW5kZXg6IGtzdmcy
L3N2Zy9TVkdTVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHU1ZHRWxl
bWVudC5jcHAJKHJldmlzaW9uIDIzNTQ3KQorKysga3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNyArMjI1LDEwIEBAIHZvaWQgU1ZHU1ZHRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUKICAgICAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVx
dWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICBpZiAoU1ZHRml0VG9WaWV3Qm94OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSAm
JiByZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJTVkdDb250YWlu
ZXIqPihyZW5kZXJlcigpKS0+c2V0Vmlld0JveCh2aWV3Qm94KCkpOworICAgICAgICAgICAgaWYg
KHJlbmRlcmVyKCktPmlzU1ZHQ29udGFpbmVyKCkpCisgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8UmVuZGVyU1ZHQ29udGFpbmVyKj4ocmVuZGVyZXIoKSktPnNldFZpZXdCb3godmlld0JveCgp
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJT
VkdSb290Kj4ocmVuZGVyZXIoKSktPnNldFZpZXdCb3godmlld0JveCgpKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAoU1ZHWm9vbUFuZFBhbjo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cikpCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiAyMzU0NykKKysrIHJl
bmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDYgKzEyNSw3IEBA
IHR5cGVkZWYgSGFzaFNldDxSZW5kZXJGbG93Kj4gUmVuZGVyRmxvd1MKIC8vIEJhc2UgY2xhc3Mg
Zm9yIGFsbCByZW5kZXJpbmcgdHJlZSBvYmplY3RzLgogY2xhc3MgUmVuZGVyT2JqZWN0IDogcHVi
bGljIENhY2hlZFJlc291cmNlQ2xpZW50IHsKICAgICBmcmllbmQgY2xhc3MgUmVuZGVyQ29udGFp
bmVyOworICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJTVkdDb250YWluZXI7CiBwdWJsaWM6CiAgICAg
Ly8gQW5vbnltb3VzIG9iamVjdHMgc2hvdWxkIHBhc3MgdGhlIGRvY3VtZW50IGFzIHRoZWlyIG5v
ZGUsIGFuZCB0aGV5IHdpbGwgdGhlbiBhdXRvbWF0aWNhbGx5IGJlCiAgICAgLy8gbWFya2VkIGFz
IGFub255bW91cyBpbiB0aGUgY29uc3RydWN0b3IuCkBAIC0yODIsNiArMjgzLDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgUmVuZGVyRmxvdyogY29udGludWF0aW9uKCkgY29uc3Q7CiAKICNpZiBF
TkFCTEUoU1ZHKQorICAgIHZpcnR1YWwgYm9vbCBpc1NWR1Jvb3QoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NWR0NvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVyUGF0aCgpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU1ZHVGV4dCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSByZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAkocmV2aXNpb24gMjM1NDcpCisr
KyByZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NiArMjYsNyBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVy
LmgiCiAKKyNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgpA
QCAtNDEsOSArNDIsMTEgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVuZGVyU1ZHQ29udGFp
bmVyOjpSZW5kZXJTVkdDb250YWluZXIoU1ZHU3R5bGVkRWxlbWVudCogbm9kZSkKLSAgICA6IFJl
bmRlckNvbnRhaW5lcihub2RlKQorICAgIDogUmVuZGVyT2JqZWN0KG5vZGUpCiAgICAgLCBtX2Ry
YXdzQ29udGVudHModHJ1ZSkKICAgICAsIG1fc2xpY2UoZmFsc2UpCisgICAgLCBtX2ZpcnN0Q2hp
bGQoMCkKKyAgICAsIG1fbGFzdENoaWxkKDApCiB7CiAgICAgc2V0UmVwbGFjZWQodHJ1ZSk7CiB9
CkBAIC0xMTcsNyArMTIwLDYgQEAgdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OmxheW91dCgpCiAg
ICAgfQogCiAgICAgY2FsY1dpZHRoKCk7Ci0gICAgY2FsY0hlaWdodCgpOwogCiAgICAgbV9hYnNv
bHV0ZUJvdW5kcyA9IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOwogCkBAIC0xMjgsMTUg
KzEzMCw4IEBAIHZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjpsYXlvdXQoKQogICAgIHNldE5lZWRz
TGF5b3V0KGZhbHNlKTsKIH0KIAotdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OmFwcGx5Q29udGVu
dFRyYW5zZm9ybXMoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCYgcGFyZW50WCwgaW50JiBwYXJl
bnRZKQordm9pZCBSZW5kZXJTVkdDb250YWluZXI6OmFwcGx5Q29udGVudFRyYW5zZm9ybXMoUGFp
bnRJbmZvJiBwYWludEluZm8pCiB7Ci0gICAgLy8gT25seSB0aGUgcm9vdCA8c3ZnPiBlbGVtZW50
IHNob3VsZCBuZWVkIGFueSB0cmFuc2xhdGlvbnMgdXNpbmcgdGhlIEhUTUwvQ1NTIHN5c3RlbQot
ICAgIC8vIHBhcmVudFgsIHBhcmVudFkgYXJlIGFsc28gbm9uLXplcm8gZm9yIGZpcnN0LWxldmVs
IGtpZHMgb2YgdGhlc2UKLSAgICAvLyBDU1MtdHJhbnNmb3JtZWQgPHN2Zz4gcm9vdC1lbGVtZW50
cyAoZHVlIHRvIFJlbmRlckJveDo6cGFpbnQpIGZvciBhbnkgb3RoZXIgZWxlbWVudAotICAgIC8v
IHRoZXkgc2hvdWxkIGJlIDAuICAgbV94LCBtX3kgc2hvdWxkIGFsd2F5cyBiZSAwIGZvciBub24t
cm9vdCBzdmcgY29udGFpbmVycwotICAgIEFTU0VSVChtX3ggPT0gMCk7Ci0gICAgQVNTRVJUKG1f
eSA9PSAwKTsKLSAgICAKICAgICBpZiAoIXZpZXdwb3J0KCkuaXNFbXB0eSgpKSB7CiAgICAgICAg
IGlmIChzdHlsZSgpLT5vdmVyZmxvd1goKSAhPSBPVklTSUJMRSkKICAgICAgICAgICAgIHBhaW50
SW5mby5jb250ZXh0LT5jbGlwKGVuY2xvc2luZ0ludFJlY3Qodmlld3BvcnQoKSkpOyAvLyBGSVhN
RTogRXZlbnR1YWxseSB3ZSdsbCB3YW50IGZsb2F0LXByZWNpc2lvbiBjbGlwcGluZwpAQCAtMTY1
LDcgKzE2MCw3IEBAIHZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjpwYWludChQYWludEluZm8KICAg
ICAKICAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOwogICAgIAotICAgIGFwcGx5Q29udGVu
dFRyYW5zZm9ybXMocGFpbnRJbmZvLCBwYXJlbnRYLCBwYXJlbnRZKTsKKyAgICBhcHBseUNvbnRl
bnRUcmFuc2Zvcm1zKHBhaW50SW5mbyk7CiAKICNpZiBFTkFCTEUoU1ZHX0VYUEVSSU1FTlRBTF9G
RUFUVVJFUykKICAgICBTVkdSZXNvdXJjZUZpbHRlciogZmlsdGVyID0gMDsKQEAgLTE4Niw3ICsx
ODEsMTAgQEAgdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OnBhaW50KFBhaW50SW5mbwogICAgIGlm
ICghdmlld0JveCgpLmlzRW1wdHkoKSkKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNvbmNh
dENUTSh2aWV3cG9ydFRyYW5zZm9ybSgpKTsKIAotICAgIFJlbmRlckNvbnRhaW5lcjo6cGFpbnQo
cGFpbnRJbmZvLCAwLCAwKTsKKyAgICBQYWludEluZm8gY2hpbGRJbmZvKHBhaW50SW5mbyk7Cisg
ICAgY2hpbGRJbmZvLnBhaW50aW5nUm9vdCA9IHBhaW50aW5nUm9vdEZvckNoaWxkcmVuKHBhaW50
SW5mbyk7CisgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgY2hpbGQtPnBhaW50KGNo
aWxkSW5mbywgMCwgMCk7CiAKICAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VG
b3JlZ3JvdW5kKSB7CiAjaWYgRU5BQkxFKFNWR19FWFBFUklNRU5UQUxfRkVBVFVSRVMpCkBAIC0y
OTksNyArMjk3LDcgQEAgdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OmFic29sdXRlUmVjdHMoVgog
CiBBZmZpbmVUcmFuc2Zvcm0gUmVuZGVyU1ZHQ29udGFpbmVyOjphYnNvbHV0ZVRyYW5zZm9ybSgp
IGNvbnN0CiB7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9IFJlbmRlckNvbnRhaW5lcjo6YWJz
b2x1dGVUcmFuc2Zvcm0oKTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtID0gUmVuZGVyT2JqZWN0
OjphYnNvbHV0ZVRyYW5zZm9ybSgpOwogICAgIGN0bS50cmFuc2xhdGUodmlld3BvcnQoKS54KCks
IHZpZXdwb3J0KCkueSgpKTsKICAgICByZXR1cm4gdmlld3BvcnRUcmFuc2Zvcm0oKSAqIGN0bTsK
IH0KQEAgLTQwMiwxMyArNDAwLDEwIEBAIGJvb2wgUmVuZGVyU1ZHQ29udGFpbmVyOjpub2RlQXRQ
b2ludChjb24KICAgICBpZiAoIXZpZXdwb3J0KCkuaXNFbXB0eSgpCiAgICAgICAgICYmIHN0eWxl
KCktPm92ZXJmbG93WCgpID09IE9ISURERU4KICAgICAgICAgJiYgc3R5bGUoKS0+b3ZlcmZsb3dZ
KCkgPT0gT0hJRERFTikgewotICAgICAgICBpbnQgdHggPSBtX3ggLSBfdHg7Ci0gICAgICAgIGlu
dCB0eSA9IG1feSAtIF90eTsKLQogICAgICAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIGRvIGFu
eXRoaW5nIGF0IGFsbC4KICAgICAgICAgSW50UmVjdCBvdmVyZmxvd0JveCA9IG92ZXJmbG93UmVj
dChmYWxzZSk7Ci0gICAgICAgIG92ZXJmbG93Qm94Lm1vdmUodHgsIHR5KTsKLSAgICAgICAgQWZm
aW5lVHJhbnNmb3JtIGN0bSA9IFJlbmRlckNvbnRhaW5lcjo6YWJzb2x1dGVUcmFuc2Zvcm0oKTsK
KyAgICAgICAgb3ZlcmZsb3dCb3gubW92ZShfdHgsIF90eSk7CisgICAgICAgIEFmZmluZVRyYW5z
Zm9ybSBjdG0gPSBSZW5kZXJPYmplY3Q6OmFic29sdXRlVHJhbnNmb3JtKCk7CiAgICAgICAgIGN0
bS50cmFuc2xhdGUodmlld3BvcnQoKS54KCksIHZpZXdwb3J0KCkueSgpKTsKICAgICAgICAgZG91
YmxlIGxvY2FsWCwgbG9jYWxZOwogICAgICAgICBjdG0uaW52ZXJzZSgpLm1hcChfeCAtIF90eCwg
X3kgLSBfdHksICZsb2NhbFgsICZsb2NhbFkpOwpAQCAtNDI4LDYgKzQyMywxMzEgQEAgYm9vbCBS
ZW5kZXJTVkdDb250YWluZXI6Om5vZGVBdFBvaW50KGNvbgogICAgIHJldHVybiBmYWxzZTsKIH0K
IAorCit2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6ZGVzdHJveSgpCit7CisgICAgZGVzdHJveUxl
ZnRvdmVyQ2hpbGRyZW4oKTsKKyAgICBSZW5kZXJPYmplY3Q6OmRlc3Ryb3koKTsKK30KKwordm9p
ZCBSZW5kZXJTVkdDb250YWluZXI6OmRlc3Ryb3lMZWZ0b3ZlckNoaWxkcmVuKCkKK3sKKyAgICB3
aGlsZSAobV9maXJzdENoaWxkKSB7CisgICAgICAgIC8vIERlc3Ryb3kgYW55IGFub255bW91cyBj
aGlsZHJlbiByZW1haW5pbmcgaW4gdGhlIHJlbmRlciB0cmVlLCBhcyB3ZWxsIGFzIGltcGxpY2l0
IChzaGFkb3cpIERPTSBlbGVtZW50cyBsaWtlIHRob3NlIHVzZWQgaW4gdGhlIGVuZ2luZS1iYXNl
ZCB0ZXh0IGZpZWxkcy4KKyAgICAgICAgaWYgKG1fZmlyc3RDaGlsZC0+ZWxlbWVudCgpKQorICAg
ICAgICAgICAgbV9maXJzdENoaWxkLT5lbGVtZW50KCktPnNldFJlbmRlcmVyKDApOworICAgICAg
ICBtX2ZpcnN0Q2hpbGQtPmRlc3Ryb3koKTsKKyAgICB9Cit9CisKK2Jvb2wgUmVuZGVyU1ZHQ29u
dGFpbmVyOjpjYW5IYXZlQ2hpbGRyZW4oKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGls
ZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3sKKyAgICBpbnNlcnRDaGlsZE5vZGUobmV3
Q2hpbGQsIGJlZm9yZUNoaWxkKTsKK30KKworUmVuZGVyT2JqZWN0KiBSZW5kZXJTVkdDb250YWlu
ZXI6OnJlbW92ZUNoaWxkTm9kZShSZW5kZXJPYmplY3QqIG9sZENoaWxkLCBib29sIGZ1bGxSZW1v
dmUpCit7CisgICAgQVNTRVJUKG9sZENoaWxkLT5wYXJlbnQoKSA9PSB0aGlzKTsKKyAgICAKKyAg
ICAvLyBTbyB0aGF0IHdlJ2xsIGdldCB0aGUgYXBwcm9wcmlhdGUgZGlydHkgYml0IHNldCAoZWl0
aGVyIHRoYXQgYSBub3JtYWwgZmxvdyBjaGlsZCBnb3QgeWFua2VkIG9yCisgICAgLy8gdGhhdCBh
IHBvc2l0aW9uZWQgY2hpbGQgZ290IHlhbmtlZCkuICBXZSBhbHNvIHJlcGFpbnQsIHNvIHRoYXQg
dGhlIGFyZWEgZXhwb3NlZCB3aGVuIHRoZSBjaGlsZAorICAgIC8vIGRpc2FwcGVhcnMgZ2V0cyBy
ZXBhaW50ZWQgcHJvcGVybHkuCisgICAgaWYgKCFkb2N1bWVudEJlaW5nRGVzdHJveWVkKCkgJiYg
ZnVsbFJlbW92ZSkgeworICAgICAgICBvbGRDaGlsZC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lk
dGhzUmVjYWxjKCk7CisgICAgICAgIG9sZENoaWxkLT5yZXBhaW50KCk7CisgICAgfQorICAgICAg
ICAKKyAgICAvLyByZW1vdmUgdGhlIGNoaWxkCisgICAgaWYgKG9sZENoaWxkLT5wcmV2aW91c1Np
YmxpbmcoKSkKKyAgICAgICAgb2xkQ2hpbGQtPnByZXZpb3VzU2libGluZygpLT5zZXROZXh0U2li
bGluZyhvbGRDaGlsZC0+bmV4dFNpYmxpbmcoKSk7CisgICAgaWYgKG9sZENoaWxkLT5uZXh0U2li
bGluZygpKQorICAgICAgICBvbGRDaGlsZC0+bmV4dFNpYmxpbmcoKS0+c2V0UHJldmlvdXNTaWJs
aW5nKG9sZENoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSk7CisgICAgCisgICAgaWYgKG1fZmlyc3RD
aGlsZCA9PSBvbGRDaGlsZCkKKyAgICAgICAgbV9maXJzdENoaWxkID0gb2xkQ2hpbGQtPm5leHRT
aWJsaW5nKCk7CisgICAgaWYgKG1fbGFzdENoaWxkID09IG9sZENoaWxkKQorICAgICAgICBtX2xh
c3RDaGlsZCA9IG9sZENoaWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICAKKyAgICBvbGRDaGls
ZC0+c2V0UHJldmlvdXNTaWJsaW5nKDApOworICAgIG9sZENoaWxkLT5zZXROZXh0U2libGluZygw
KTsKKyAgICBvbGRDaGlsZC0+c2V0UGFyZW50KDApOworICAgIAorICAgIGlmIChBWE9iamVjdENh
Y2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQorICAgICAgICBkb2N1bWVudCgpLT5heE9iamVj
dENhY2hlKCktPmNoaWxkcmVuQ2hhbmdlZCh0aGlzKTsKKyAgICAKKyAgICByZXR1cm4gb2xkQ2hp
bGQ7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjpyZW1vdmVDaGlsZChSZW5kZXJPYmpl
Y3QqIG9sZENoaWxkKQoreworICAgIC8vIFdlIGRvIHRoaXMgaGVyZSBpbnN0ZWFkIG9mIGluIHJl
bW92ZUNoaWxkTm9kZSwgc2luY2UgdGhlIG9ubHkgZXh0cmVtZWx5IGxvdy1sZXZlbCB1c2VzIG9m
IHJlbW92ZS9hcHBlbmRDaGlsZE5vZGUKKyAgICAvLyBjYW5ub3QgYWZmZWN0IHRoZSBwb3NpdGlv
bmVkIG9iamVjdCBsaXN0LCBhbmQgdGhlIGZsb2F0aW5nIG9iamVjdCBsaXN0IGlzIGlycmVsZXZh
bnQgKHNpbmNlIHRoZSBsaXN0IGdldHMgY2xlYXJlZCBvbgorICAgIC8vIGxheW91dCBhbnl3YXkp
LgorICAgIG9sZENoaWxkLT5yZW1vdmVGcm9tT2JqZWN0TGlzdHMoKTsKKyAgICAKKyAgICByZW1v
dmVDaGlsZE5vZGUob2xkQ2hpbGQpOworfQorCit2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6YXBw
ZW5kQ2hpbGROb2RlKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIGJvb2wgZnVsbEFwcGVuZCkKK3sK
KyAgICBBU1NFUlQobmV3Q2hpbGQtPnBhcmVudCgpID09IDApOworICAgIEFTU0VSVChuZXdDaGls
ZC0+ZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSk7CisgICAgCisgICAgbmV3Q2hpbGQtPnNldFBh
cmVudCh0aGlzKTsKKyAgICBSZW5kZXJPYmplY3QqIGxDaGlsZCA9IG1fbGFzdENoaWxkOworICAg
IAorICAgIGlmIChsQ2hpbGQpIHsKKyAgICAgICAgbmV3Q2hpbGQtPnNldFByZXZpb3VzU2libGlu
ZyhsQ2hpbGQpOworICAgICAgICBsQ2hpbGQtPnNldE5leHRTaWJsaW5nKG5ld0NoaWxkKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgbV9maXJzdENoaWxkID0gbmV3Q2hpbGQ7CisgICAgCisgICAgbV9s
YXN0Q2hpbGQgPSBuZXdDaGlsZDsKKyAgICAKKyAgICBuZXdDaGlsZC0+c2V0TmVlZHNMYXlvdXRB
bmRQcmVmV2lkdGhzUmVjYWxjKCk7IC8vIEdvZXMgdXAgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaGll
cmFyY2h5LgorICAgIGlmICghbm9ybWFsQ2hpbGROZWVkc0xheW91dCgpKQorICAgICAgICBzZXRD
aGlsZE5lZWRzTGF5b3V0KHRydWUpOyAvLyBXZSBtYXkgc3VwcGx5IHRoZSBzdGF0aWMgcG9zaXRp
b24gZm9yIGFuIGFic29sdXRlIHBvc2l0aW9uZWQgY2hpbGQuCisgICAgCisgICAgaWYgKEFYT2Jq
ZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCisgICAgICAgIGRvY3VtZW50KCktPmF4
T2JqZWN0Q2FjaGUoKS0+Y2hpbGRyZW5DaGFuZ2VkKHRoaXMpOworfQorCit2b2lkIFJlbmRlclNW
R0NvbnRhaW5lcjo6aW5zZXJ0Q2hpbGROb2RlKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9i
amVjdCogYmVmb3JlQ2hpbGQsIGJvb2wgZnVsbEluc2VydCkKK3sKKyAgICBpZiAoIWJlZm9yZUNo
aWxkKSB7CisgICAgICAgIGFwcGVuZENoaWxkTm9kZShjaGlsZCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgQVNTRVJUKCFjaGlsZC0+cGFyZW50KCkpOworICAgIEFTU0VSVChi
ZWZvcmVDaGlsZC0+cGFyZW50KCkgPT0gdGhpcyk7CisgICAgQVNTRVJUKGNoaWxkLT5lbGVtZW50
KCktPmlzU1ZHRWxlbWVudCgpKTsKKyAgICAKKyAgICBpZiAoYmVmb3JlQ2hpbGQgPT0gbV9maXJz
dENoaWxkKQorICAgICAgICBtX2ZpcnN0Q2hpbGQgPSBjaGlsZDsKKyAgICAKKyAgICBSZW5kZXJP
YmplY3QqIHByZXYgPSBiZWZvcmVDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgY2hpbGQt
PnNldE5leHRTaWJsaW5nKGJlZm9yZUNoaWxkKTsKKyAgICBiZWZvcmVDaGlsZC0+c2V0UHJldmlv
dXNTaWJsaW5nKGNoaWxkKTsKKyAgICBpZiAocHJldikKKyAgICAgICAgcHJldi0+c2V0TmV4dFNp
YmxpbmcoY2hpbGQpOworICAgIGNoaWxkLT5zZXRQcmV2aW91c1NpYmxpbmcocHJldik7CisgICAg
CisgICAgY2hpbGQtPnNldFBhcmVudCh0aGlzKTsKKyAgICAKKyAgICBjaGlsZC0+c2V0TmVlZHNM
YXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CisgICAgaWYgKCFub3JtYWxDaGlsZE5lZWRzTGF5
b3V0KCkpCisgICAgICAgIHNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSk7IC8vIFdlIG1heSBzdXBw
bHkgdGhlIHN0YXRpYyBwb3NpdGlvbiBmb3IgYW4gYWJzb2x1dGUgcG9zaXRpb25lZCBjaGlsZC4K
KyAgICAKKyAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKKyAg
ICAgICAgZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5jaGlsZHJlbkNoYW5nZWQodGhpcyk7
Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiByZW5kZXJpbmcvUmVuZGVy
U1ZHQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5l
ci5oCShyZXZpc2lvbiAyMzU0NykKKysrIHJlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMjUsNyArMjUsNyBAQAogCiAjaWYgRU5BQkxFKFNWRykKIAotI2lu
Y2x1ZGUgIlJlbmRlckNvbnRhaW5lci5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2lu
Y2x1ZGUgIlJlbmRlclBhdGguaCIKICNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgi
CiAKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTVkdFbGVt
ZW50OwogCi1jbGFzcyBSZW5kZXJTVkdDb250YWluZXIgOiBwdWJsaWMgUmVuZGVyQ29udGFpbmVy
IHsKK2NsYXNzIFJlbmRlclNWR0NvbnRhaW5lciA6IHB1YmxpYyBSZW5kZXJPYmplY3QgewogcHVi
bGljOgogICAgIFJlbmRlclNWR0NvbnRhaW5lcihTVkdTdHlsZWRFbGVtZW50Kik7CiAgICAgflJl
bmRlclNWR0NvbnRhaW5lcigpOwpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBzaG9ydCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgYiwgYm9vbCBpc1Jvb3RMaW5lQm94ID0gZmFs
c2UpIGNvbnN0OwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKLSAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHBhcmVudFgsIGludCBwYXJlbnRZKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50LCBpbnQpOwogICAgIAogICAgIHZpcnR1
YWwgSW50UmVjdCBhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKICAgICB2aXJ0dWFsIHZv
aWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSk7
CkBAIC04MiwxMCArODIsMzAgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgYm9vbCBub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50
IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKICAgICAKKyAgICB2aXJ0dWFsIFJl
bmRlck9iamVjdCogZmlyc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmlyc3RDaGlsZDsgfQor
ICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBsYXN0Q2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2xh
c3RDaGlsZDsgfQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBjYW5IYXZlQ2hpbGRyZW4oKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVu
ZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDaGls
ZChSZW5kZXJPYmplY3QqKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOworICAg
IHZvaWQgZGVzdHJveUxlZnRvdmVyQ2hpbGRyZW4oKTsKKyAgICAKKyAgICB2aXJ0dWFsIFJlbmRl
ck9iamVjdCogcmVtb3ZlQ2hpbGROb2RlKFJlbmRlck9iamVjdCosIGJvb2wgZnVsbFJlbW92ZSA9
IHRydWUpOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRDaGlsZE5vZGUoUmVuZGVyT2JqZWN0Kiwg
Ym9vbCBmdWxsQXBwZW5kID0gdHJ1ZSk7CisgICAgdmlydHVhbCB2b2lkIGluc2VydENoaWxkTm9k
ZShSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZSwgYm9vbCBmdWxsSW5z
ZXJ0ID0gdHJ1ZSk7CisgICAgCisgICAgLy8gRGVzaWduZWQgZm9yIHNwZWVkLiAgRG9uJ3Qgd2Fz
dGUgdGltZSBkb2luZyBhIGJ1bmNoIG9mIHdvcmsgbGlrZSBsYXllciB1cGRhdGluZyBhbmQgcmVw
YWludGluZyB3aGVuIHdlIGtub3cgdGhhdCBvdXIKKyAgICAvLyBjaGFuZ2UgaW4gcGFyZW50YWdl
IGlzIG5vdCBnb2luZyB0byBhZmZlY3QgYW55dGhpbmcuCisgICAgdmlydHVhbCB2b2lkIG1vdmVD
aGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBjaGlsZCkgeyBhcHBlbmRDaGlsZE5vZGUoY2hpbGQtPnBh
cmVudCgpLT5yZW1vdmVDaGlsZE5vZGUoY2hpbGQsIGZhbHNlKSwgZmFsc2UpOyB9CisgICAgCisg
ICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCkgeyBzZXRQcmVmV2lkdGhzRGlydHkoZmFs
c2UpOyB9CisgICAgCiBwcml2YXRlOgogICAgIHZvaWQgY2FsY1ZpZXdwb3J0KCk7IAogICAgIEFm
ZmluZVRyYW5zZm9ybSBnZXRBc3BlY3RSYXRpbyhjb25zdCBGbG9hdFJlY3QmIGxvZ2ljYWwsIGNv
bnN0IEZsb2F0UmVjdCYgcGh5c2ljYWwpIGNvbnN0OwotICAgIHZvaWQgYXBwbHlDb250ZW50VHJh
bnNmb3JtcyhQYWludEluZm8mLCBpbnQmIHBhcmVudFgsIGludCYgcGFyZW50WSk7CisgICAgdm9p
ZCBhcHBseUNvbnRlbnRUcmFuc2Zvcm1zKFBhaW50SW5mbyYpOwogCiAgICAgYm9vbCBtX2RyYXdz
Q29udGVudHMgOiAxOwogICAgIGJvb2wgbV9zbGljZSA6IDE7CkBAIC05NSw2ICsxMTUsOSBAQCBw
cml2YXRlOgogICAgIEZsb2F0UmVjdCBtX3ZpZXdCb3g7CiAgICAgU1ZHUHJlc2VydmVBc3BlY3RS
YXRpbzo6U1ZHUHJlc2VydmVBc3BlY3RSYXRpb1R5cGUgbV9hbGlnbjsKICAgICBJbnRSZWN0IG1f
YWJzb2x1dGVCb3VuZHM7CisgICAgCisgICAgUmVuZGVyT2JqZWN0KiBtX2ZpcnN0Q2hpbGQ7Cisg
ICAgUmVuZGVyT2JqZWN0KiBtX2xhc3RDaGlsZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJTVkdSb290LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVy
aW5nL1JlbmRlclNWR1Jvb3QuaAkocmV2aXNpb24gMjM1NDcpCisrKyByZW5kZXJpbmcvUmVuZGVy
U1ZHUm9vdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICBS
ZW5kZXJTVkdSb290KFNWR1N0eWxlZEVsZW1lbnQqKTsKICAgICB+UmVuZGVyU1ZHUm9vdCgpOwog
Ci0gICAgdmlydHVhbCBib29sIGlzU1ZHQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIHZpcnR1YWwgYm9vbCBpc1NWR1Jvb3QoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAg
ICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRl
clNWR0NvbnRhaW5lciI7IH0KICAgICAgICAgCiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5
ZXIoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15101</attachid>
            <date>2007-06-18 09:59:38 -0700</date>
            <delta_ts>2007-07-14 15:43:32 -0700</delta_ts>
            <desc>working patch (rob to finish)</desc>
            <filename>works.patch</filename>
            <type>text/plain</type>
            <size>19100</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGNvbmZpZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNvbmZpZy5oCShyZXZpc2lvbiAyMzU0NykK
KysrIGNvbmZpZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2ICsyMyw4IEBACiAKICNkZWZpbmUg
TU9CSUxFIDAKIAorI2RlZmluZSBFTkFCTEVfU1ZHX0VYUEVSSU1FTlRBTF9GRUFUVVJFUyAxCisK
ICNpZiBfX0FQUExFX18KICNkZWZpbmUgSEFWRV9GVU5DX1VTTEVFUCAxCiAKSW5kZXg6IGtzdmcy
L3N2Zy9TVkdTVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHU1ZHRWxl
bWVudC5jcHAJKHJldmlzaW9uIDIzNTQ3KQorKysga3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNyArMjI1LDEwIEBAIHZvaWQgU1ZHU1ZHRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUKICAgICAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVx
dWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICBpZiAoU1ZHRml0VG9WaWV3Qm94OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSAm
JiByZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJTVkdDb250YWlu
ZXIqPihyZW5kZXJlcigpKS0+c2V0Vmlld0JveCh2aWV3Qm94KCkpOworICAgICAgICAgICAgaWYg
KHJlbmRlcmVyKCktPmlzU1ZHQ29udGFpbmVyKCkpCisgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8UmVuZGVyU1ZHQ29udGFpbmVyKj4ocmVuZGVyZXIoKSktPnNldFZpZXdCb3godmlld0JveCgp
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJT
VkdSb290Kj4ocmVuZGVyZXIoKSktPnNldFZpZXdCb3godmlld0JveCgpKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAoU1ZHWm9vbUFuZFBhbjo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cikpCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMjM1NDcpCisr
KyByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzY0LDcgKzc2
NCw3IEBAIFJlbmRlckJsb2NrKiBSZW5kZXJPYmplY3Q6OmNvbnRhaW5pbmdCbG8KICAgICAgICAg
d2hpbGUgKG8gJiYgKChvLT5pc0lubGluZSgpICYmICFvLT5pc1JlcGxhY2VkKCkpIHx8IG8tPmlz
VGFibGVSb3coKSB8fCBvLT5pc1RhYmxlU2VjdGlvbigpCiAgICAgICAgICAgICAgICAgICAgICB8
fCBvLT5pc1RhYmxlQ29sKCkgfHwgby0+aXNGcmFtZVNldCgpCiAjaWYgRU5BQkxFKFNWRykKLSAg
ICAgICAgICAgICAgICAgICAgIHx8IG8tPmlzU1ZHQ29udGFpbmVyKCkKKyAgICAgICAgICAgICAg
ICAgICAgIHx8IG8tPmlzU1ZHQ29udGFpbmVyKCkgfHwgby0+aXNTVkdSb290KCkKICNlbmRpZgog
ICAgICAgICAgICAgICAgICAgICAgKSkKICAgICAgICAgICAgIG8gPSBvLT5wYXJlbnQoKTsKSW5k
ZXg6IHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmgJKHJldmlzaW9uIDIzNTQ3KQorKysgcmVuZGVyaW5nL1JlbmRlck9iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiArMTI1LDcgQEAgdHlwZWRlZiBIYXNoU2V0PFJlbmRl
ckZsb3cqPiBSZW5kZXJGbG93UwogLy8gQmFzZSBjbGFzcyBmb3IgYWxsIHJlbmRlcmluZyB0cmVl
IG9iamVjdHMuCiBjbGFzcyBSZW5kZXJPYmplY3QgOiBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGll
bnQgewogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJDb250YWluZXI7CisgICAgZnJpZW5kIGNsYXNz
IFJlbmRlclNWR0NvbnRhaW5lcjsKIHB1YmxpYzoKICAgICAvLyBBbm9ueW1vdXMgb2JqZWN0cyBz
aG91bGQgcGFzcyB0aGUgZG9jdW1lbnQgYXMgdGhlaXIgbm9kZSwgYW5kIHRoZXkgd2lsbCB0aGVu
IGF1dG9tYXRpY2FsbHkgYmUKICAgICAvLyBtYXJrZWQgYXMgYW5vbnltb3VzIGluIHRoZSBjb25z
dHJ1Y3Rvci4KQEAgLTI4Miw2ICsyODMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBSZW5kZXJG
bG93KiBjb250aW51YXRpb24oKSBjb25zdDsKIAogI2lmIEVOQUJMRShTVkcpCisgICAgdmlydHVh
bCBib29sIGlzU1ZHUm9vdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBi
b29sIGlzU1ZHQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFs
IGJvb2wgaXNSZW5kZXJQYXRoKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFs
IGJvb2wgaXNTVkdUZXh0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KSW5kZXg6IHJlbmRlcmlu
Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJT
VkdDb250YWluZXIuY3BwCShyZXZpc2lvbiAyMzU0NykKKysrIHJlbmRlcmluZy9SZW5kZXJTVkdD
b250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWYgRU5BQkxF
KFNWRykKICNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIKIAorI2luY2x1ZGUgIkFYT2Jq
ZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJSZW5k
ZXJWaWV3LmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCkBAIC00MSw5ICs0MiwxMSBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBSZW5kZXJTVkdDb250YWluZXI6OlJlbmRlclNWR0NvbnRhaW5l
cihTVkdTdHlsZWRFbGVtZW50KiBub2RlKQotICAgIDogUmVuZGVyQ29udGFpbmVyKG5vZGUpCisg
ICAgOiBSZW5kZXJPYmplY3Qobm9kZSkKICAgICAsIG1fZHJhd3NDb250ZW50cyh0cnVlKQogICAg
ICwgbV9zbGljZShmYWxzZSkKKyAgICAsIG1fZmlyc3RDaGlsZCgwKQorICAgICwgbV9sYXN0Q2hp
bGQoMCkKIHsKICAgICBzZXRSZXBsYWNlZCh0cnVlKTsKIH0KQEAgLTExNyw3ICsxMjAsNiBAQCB2
b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6bGF5b3V0KCkKICAgICB9CiAKICAgICBjYWxjV2lkdGgo
KTsKLSAgICBjYWxjSGVpZ2h0KCk7CiAKICAgICBtX2Fic29sdXRlQm91bmRzID0gYWJzb2x1dGVD
bGlwcGVkT3ZlcmZsb3dSZWN0KCk7CiAKQEAgLTEyOCwxNSArMTMwLDggQEAgdm9pZCBSZW5kZXJT
VkdDb250YWluZXI6OmxheW91dCgpCiAgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwogfQogCi12
b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6YXBwbHlDb250ZW50VHJhbnNmb3JtcyhQYWludEluZm8m
IHBhaW50SW5mbywgaW50JiBwYXJlbnRYLCBpbnQmIHBhcmVudFkpCit2b2lkIFJlbmRlclNWR0Nv
bnRhaW5lcjo6YXBwbHlDb250ZW50VHJhbnNmb3JtcyhQYWludEluZm8mIHBhaW50SW5mbykKIHsK
LSAgICAvLyBPbmx5IHRoZSByb290IDxzdmc+IGVsZW1lbnQgc2hvdWxkIG5lZWQgYW55IHRyYW5z
bGF0aW9ucyB1c2luZyB0aGUgSFRNTC9DU1Mgc3lzdGVtCi0gICAgLy8gcGFyZW50WCwgcGFyZW50
WSBhcmUgYWxzbyBub24temVybyBmb3IgZmlyc3QtbGV2ZWwga2lkcyBvZiB0aGVzZQotICAgIC8v
IENTUy10cmFuc2Zvcm1lZCA8c3ZnPiByb290LWVsZW1lbnRzIChkdWUgdG8gUmVuZGVyQm94Ojpw
YWludCkgZm9yIGFueSBvdGhlciBlbGVtZW50Ci0gICAgLy8gdGhleSBzaG91bGQgYmUgMC4gICBt
X3gsIG1feSBzaG91bGQgYWx3YXlzIGJlIDAgZm9yIG5vbi1yb290IHN2ZyBjb250YWluZXJzCi0g
ICAgQVNTRVJUKG1feCA9PSAwKTsKLSAgICBBU1NFUlQobV95ID09IDApOwotICAgIAogICAgIGlm
ICghdmlld3BvcnQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgaWYgKHN0eWxlKCktPm92ZXJmbG93
WCgpICE9IE9WSVNJQkxFKQogICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNsaXAoZW5j
bG9zaW5nSW50UmVjdCh2aWV3cG9ydCgpKSk7IC8vIEZJWE1FOiBFdmVudHVhbGx5IHdlJ2xsIHdh
bnQgZmxvYXQtcHJlY2lzaW9uIGNsaXBwaW5nCkBAIC0xNjUsNyArMTYwLDcgQEAgdm9pZCBSZW5k
ZXJTVkdDb250YWluZXI6OnBhaW50KFBhaW50SW5mbwogICAgIAogICAgIHBhaW50SW5mby5jb250
ZXh0LT5zYXZlKCk7CiAgICAgCi0gICAgYXBwbHlDb250ZW50VHJhbnNmb3JtcyhwYWludEluZm8s
IHBhcmVudFgsIHBhcmVudFkpOworICAgIGFwcGx5Q29udGVudFRyYW5zZm9ybXMocGFpbnRJbmZv
KTsKIAogI2lmIEVOQUJMRShTVkdfRVhQRVJJTUVOVEFMX0ZFQVRVUkVTKQogICAgIFNWR1Jlc291
cmNlRmlsdGVyKiBmaWx0ZXIgPSAwOwpAQCAtMTg2LDcgKzE4MSwxMCBAQCB2b2lkIFJlbmRlclNW
R0NvbnRhaW5lcjo6cGFpbnQoUGFpbnRJbmZvCiAgICAgaWYgKCF2aWV3Qm94KCkuaXNFbXB0eSgp
KQogICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y29uY2F0Q1RNKHZpZXdwb3J0VHJhbnNmb3Jt
KCkpOwogCi0gICAgUmVuZGVyQ29udGFpbmVyOjpwYWludChwYWludEluZm8sIDAsIDApOworICAg
IFBhaW50SW5mbyBjaGlsZEluZm8ocGFpbnRJbmZvKTsKKyAgICBjaGlsZEluZm8ucGFpbnRpbmdS
b290ID0gcGFpbnRpbmdSb290Rm9yQ2hpbGRyZW4ocGFpbnRJbmZvKTsKKyAgICBmb3IgKFJlbmRl
ck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0
U2libGluZygpKQorICAgICAgICBjaGlsZC0+cGFpbnQoY2hpbGRJbmZvLCAwLCAwKTsKIAogICAg
IGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKICNpZiBFTkFC
TEUoU1ZHX0VYUEVSSU1FTlRBTF9GRUFUVVJFUykKQEAgLTI5OSw3ICsyOTcsNyBAQCB2b2lkIFJl
bmRlclNWR0NvbnRhaW5lcjo6YWJzb2x1dGVSZWN0cyhWCiAKIEFmZmluZVRyYW5zZm9ybSBSZW5k
ZXJTVkdDb250YWluZXI6OmFic29sdXRlVHJhbnNmb3JtKCkgY29uc3QKIHsKLSAgICBBZmZpbmVU
cmFuc2Zvcm0gY3RtID0gUmVuZGVyQ29udGFpbmVyOjphYnNvbHV0ZVRyYW5zZm9ybSgpOworICAg
IEFmZmluZVRyYW5zZm9ybSBjdG0gPSBSZW5kZXJPYmplY3Q6OmFic29sdXRlVHJhbnNmb3JtKCk7
CiAgICAgY3RtLnRyYW5zbGF0ZSh2aWV3cG9ydCgpLngoKSwgdmlld3BvcnQoKS55KCkpOwogICAg
IHJldHVybiB2aWV3cG9ydFRyYW5zZm9ybSgpICogY3RtOwogfQpAQCAtNDAyLDEzICs0MDAsMTAg
QEAgYm9vbCBSZW5kZXJTVkdDb250YWluZXI6Om5vZGVBdFBvaW50KGNvbgogICAgIGlmICghdmll
d3BvcnQoKS5pc0VtcHR5KCkKICAgICAgICAgJiYgc3R5bGUoKS0+b3ZlcmZsb3dYKCkgPT0gT0hJ
RERFTgogICAgICAgICAmJiBzdHlsZSgpLT5vdmVyZmxvd1koKSA9PSBPSElEREVOKSB7Ci0gICAg
ICAgIGludCB0eCA9IG1feCAtIF90eDsKLSAgICAgICAgaW50IHR5ID0gbV95IC0gX3R5OwotCiAg
ICAgICAgIC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gZG8gYW55dGhpbmcgYXQgYWxsLgogICAgICAg
ICBJbnRSZWN0IG92ZXJmbG93Qm94ID0gb3ZlcmZsb3dSZWN0KGZhbHNlKTsKLSAgICAgICAgb3Zl
cmZsb3dCb3gubW92ZSh0eCwgdHkpOwotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY3RtID0gUmVu
ZGVyQ29udGFpbmVyOjphYnNvbHV0ZVRyYW5zZm9ybSgpOworICAgICAgICBvdmVyZmxvd0JveC5t
b3ZlKF90eCwgX3R5KTsKKyAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9IFJlbmRlck9iamVj
dDo6YWJzb2x1dGVUcmFuc2Zvcm0oKTsKICAgICAgICAgY3RtLnRyYW5zbGF0ZSh2aWV3cG9ydCgp
LngoKSwgdmlld3BvcnQoKS55KCkpOwogICAgICAgICBkb3VibGUgbG9jYWxYLCBsb2NhbFk7CiAg
ICAgICAgIGN0bS5pbnZlcnNlKCkubWFwKF94IC0gX3R4LCBfeSAtIF90eSwgJmxvY2FsWCwgJmxv
Y2FsWSk7CkBAIC00MjgsNiArNDIzLDEzMSBAQCBib29sIFJlbmRlclNWR0NvbnRhaW5lcjo6bm9k
ZUF0UG9pbnQoY29uCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCisKK3ZvaWQgUmVuZGVyU1ZHQ29u
dGFpbmVyOjpkZXN0cm95KCkKK3sKKyAgICBkZXN0cm95TGVmdG92ZXJDaGlsZHJlbigpOworICAg
IFJlbmRlck9iamVjdDo6ZGVzdHJveSgpOworfQorCit2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6
ZGVzdHJveUxlZnRvdmVyQ2hpbGRyZW4oKQoreworICAgIHdoaWxlIChtX2ZpcnN0Q2hpbGQpIHsK
KyAgICAgICAgLy8gRGVzdHJveSBhbnkgYW5vbnltb3VzIGNoaWxkcmVuIHJlbWFpbmluZyBpbiB0
aGUgcmVuZGVyIHRyZWUsIGFzIHdlbGwgYXMgaW1wbGljaXQgKHNoYWRvdykgRE9NIGVsZW1lbnRz
IGxpa2UgdGhvc2UgdXNlZCBpbiB0aGUgZW5naW5lLWJhc2VkIHRleHQgZmllbGRzLgorICAgICAg
ICBpZiAobV9maXJzdENoaWxkLT5lbGVtZW50KCkpCisgICAgICAgICAgICBtX2ZpcnN0Q2hpbGQt
PmVsZW1lbnQoKS0+c2V0UmVuZGVyZXIoMCk7CisgICAgICAgIG1fZmlyc3RDaGlsZC0+ZGVzdHJv
eSgpOworICAgIH0KK30KKworYm9vbCBSZW5kZXJTVkdDb250YWluZXI6OmNhbkhhdmVDaGlsZHJl
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHQ29udGFp
bmVyOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9y
ZUNoaWxkKQoreworICAgIGluc2VydENoaWxkTm9kZShuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOwor
fQorCitSZW5kZXJPYmplY3QqIFJlbmRlclNWR0NvbnRhaW5lcjo6cmVtb3ZlQ2hpbGROb2RlKFJl
bmRlck9iamVjdCogb2xkQ2hpbGQsIGJvb2wgZnVsbFJlbW92ZSkKK3sKKyAgICBBU1NFUlQob2xk
Q2hpbGQtPnBhcmVudCgpID09IHRoaXMpOworICAgIAorICAgIC8vIFNvIHRoYXQgd2UnbGwgZ2V0
IHRoZSBhcHByb3ByaWF0ZSBkaXJ0eSBiaXQgc2V0IChlaXRoZXIgdGhhdCBhIG5vcm1hbCBmbG93
IGNoaWxkIGdvdCB5YW5rZWQgb3IKKyAgICAvLyB0aGF0IGEgcG9zaXRpb25lZCBjaGlsZCBnb3Qg
eWFua2VkKS4gIFdlIGFsc28gcmVwYWludCwgc28gdGhhdCB0aGUgYXJlYSBleHBvc2VkIHdoZW4g
dGhlIGNoaWxkCisgICAgLy8gZGlzYXBwZWFycyBnZXRzIHJlcGFpbnRlZCBwcm9wZXJseS4KKyAg
ICBpZiAoIWRvY3VtZW50QmVpbmdEZXN0cm95ZWQoKSAmJiBmdWxsUmVtb3ZlKSB7CisgICAgICAg
IG9sZENoaWxkLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKKyAgICAgICAg
b2xkQ2hpbGQtPnJlcGFpbnQoKTsKKyAgICB9CisgICAgICAgIAorICAgIC8vIHJlbW92ZSB0aGUg
Y2hpbGQKKyAgICBpZiAob2xkQ2hpbGQtPnByZXZpb3VzU2libGluZygpKQorICAgICAgICBvbGRD
aGlsZC0+cHJldmlvdXNTaWJsaW5nKCktPnNldE5leHRTaWJsaW5nKG9sZENoaWxkLT5uZXh0U2li
bGluZygpKTsKKyAgICBpZiAob2xkQ2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgIG9sZENo
aWxkLT5uZXh0U2libGluZygpLT5zZXRQcmV2aW91c1NpYmxpbmcob2xkQ2hpbGQtPnByZXZpb3Vz
U2libGluZygpKTsKKyAgICAKKyAgICBpZiAobV9maXJzdENoaWxkID09IG9sZENoaWxkKQorICAg
ICAgICBtX2ZpcnN0Q2hpbGQgPSBvbGRDaGlsZC0+bmV4dFNpYmxpbmcoKTsKKyAgICBpZiAobV9s
YXN0Q2hpbGQgPT0gb2xkQ2hpbGQpCisgICAgICAgIG1fbGFzdENoaWxkID0gb2xkQ2hpbGQtPnBy
ZXZpb3VzU2libGluZygpOworICAgIAorICAgIG9sZENoaWxkLT5zZXRQcmV2aW91c1NpYmxpbmco
MCk7CisgICAgb2xkQ2hpbGQtPnNldE5leHRTaWJsaW5nKDApOworICAgIG9sZENoaWxkLT5zZXRQ
YXJlbnQoMCk7CisgICAgCisgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFi
bGVkKCkpCisgICAgICAgIGRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+Y2hpbGRyZW5DaGFu
Z2VkKHRoaXMpOworICAgIAorICAgIHJldHVybiBvbGRDaGlsZDsKK30KKwordm9pZCBSZW5kZXJT
VkdDb250YWluZXI6OnJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCogb2xkQ2hpbGQpCit7CisgICAg
Ly8gV2UgZG8gdGhpcyBoZXJlIGluc3RlYWQgb2YgaW4gcmVtb3ZlQ2hpbGROb2RlLCBzaW5jZSB0
aGUgb25seSBleHRyZW1lbHkgbG93LWxldmVsIHVzZXMgb2YgcmVtb3ZlL2FwcGVuZENoaWxkTm9k
ZQorICAgIC8vIGNhbm5vdCBhZmZlY3QgdGhlIHBvc2l0aW9uZWQgb2JqZWN0IGxpc3QsIGFuZCB0
aGUgZmxvYXRpbmcgb2JqZWN0IGxpc3QgaXMgaXJyZWxldmFudCAoc2luY2UgdGhlIGxpc3QgZ2V0
cyBjbGVhcmVkIG9uCisgICAgLy8gbGF5b3V0IGFueXdheSkuCisgICAgb2xkQ2hpbGQtPnJlbW92
ZUZyb21PYmplY3RMaXN0cygpOworICAgIAorICAgIHJlbW92ZUNoaWxkTm9kZShvbGRDaGlsZCk7
Cit9CisKK3ZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjphcHBlbmRDaGlsZE5vZGUoUmVuZGVyT2Jq
ZWN0KiBuZXdDaGlsZCwgYm9vbCBmdWxsQXBwZW5kKQoreworICAgIEFTU0VSVChuZXdDaGlsZC0+
cGFyZW50KCkgPT0gMCk7CisgICAgQVNTRVJUKG5ld0NoaWxkLT5lbGVtZW50KCktPmlzU1ZHRWxl
bWVudCgpKTsKKyAgICAKKyAgICBuZXdDaGlsZC0+c2V0UGFyZW50KHRoaXMpOworICAgIFJlbmRl
ck9iamVjdCogbENoaWxkID0gbV9sYXN0Q2hpbGQ7CisgICAgCisgICAgaWYgKGxDaGlsZCkgewor
ICAgICAgICBuZXdDaGlsZC0+c2V0UHJldmlvdXNTaWJsaW5nKGxDaGlsZCk7CisgICAgICAgIGxD
aGlsZC0+c2V0TmV4dFNpYmxpbmcobmV3Q2hpbGQpOworICAgIH0gZWxzZQorICAgICAgICBtX2Zp
cnN0Q2hpbGQgPSBuZXdDaGlsZDsKKyAgICAKKyAgICBtX2xhc3RDaGlsZCA9IG5ld0NoaWxkOwor
ICAgIAorICAgIG5ld0NoaWxkLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsg
Ly8gR29lcyB1cCB0aGUgY29udGFpbmluZyBibG9jayBoaWVyYXJjaHkuCisgICAgaWYgKCFub3Jt
YWxDaGlsZE5lZWRzTGF5b3V0KCkpCisgICAgICAgIHNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSk7
IC8vIFdlIG1heSBzdXBwbHkgdGhlIHN0YXRpYyBwb3NpdGlvbiBmb3IgYW4gYWJzb2x1dGUgcG9z
aXRpb25lZCBjaGlsZC4KKyAgICAKKyAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0
eUVuYWJsZWQoKSkKKyAgICAgICAgZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5jaGlsZHJl
bkNoYW5nZWQodGhpcyk7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjppbnNlcnRDaGls
ZE5vZGUoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgYm9v
bCBmdWxsSW5zZXJ0KQoreworICAgIGlmICghYmVmb3JlQ2hpbGQpIHsKKyAgICAgICAgYXBwZW5k
Q2hpbGROb2RlKGNoaWxkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBBU1NF
UlQoIWNoaWxkLT5wYXJlbnQoKSk7CisgICAgQVNTRVJUKGJlZm9yZUNoaWxkLT5wYXJlbnQoKSA9
PSB0aGlzKTsKKyAgICBBU1NFUlQoY2hpbGQtPmVsZW1lbnQoKS0+aXNTVkdFbGVtZW50KCkpOwor
ICAgIAorICAgIGlmIChiZWZvcmVDaGlsZCA9PSBtX2ZpcnN0Q2hpbGQpCisgICAgICAgIG1fZmly
c3RDaGlsZCA9IGNoaWxkOworICAgIAorICAgIFJlbmRlck9iamVjdCogcHJldiA9IGJlZm9yZUNo
aWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICBjaGlsZC0+c2V0TmV4dFNpYmxpbmcoYmVmb3Jl
Q2hpbGQpOworICAgIGJlZm9yZUNoaWxkLT5zZXRQcmV2aW91c1NpYmxpbmcoY2hpbGQpOworICAg
IGlmIChwcmV2KQorICAgICAgICBwcmV2LT5zZXROZXh0U2libGluZyhjaGlsZCk7CisgICAgY2hp
bGQtPnNldFByZXZpb3VzU2libGluZyhwcmV2KTsKKyAgICAKKyAgICBjaGlsZC0+c2V0UGFyZW50
KHRoaXMpOworICAgIAorICAgIGNoaWxkLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNh
bGMoKTsKKyAgICBpZiAoIW5vcm1hbENoaWxkTmVlZHNMYXlvdXQoKSkKKyAgICAgICAgc2V0Q2hp
bGROZWVkc0xheW91dCh0cnVlKTsgLy8gV2UgbWF5IHN1cHBseSB0aGUgc3RhdGljIHBvc2l0aW9u
IGZvciBhbiBhYnNvbHV0ZSBwb3NpdGlvbmVkIGNoaWxkLgorICAgIAorICAgIGlmIChBWE9iamVj
dENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQorICAgICAgICBkb2N1bWVudCgpLT5heE9i
amVjdENhY2hlKCktPmNoaWxkcmVuQ2hhbmdlZCh0aGlzKTsKK30KKwogfQogCiAjZW5kaWYgLy8g
RU5BQkxFKFNWRykKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgJKHJldmlzaW9uIDIzNTQ3KQor
KysgcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3
ICsyNSw3IEBACiAKICNpZiBFTkFCTEUoU1ZHKQogCi0jaW5jbHVkZSAiUmVuZGVyQ29udGFpbmVy
LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyUGF0aC5oIgog
I2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIKIApAQCAtMzMsNyArMzMsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNWR0VsZW1lbnQ7CiAKLWNsYXNzIFJlbmRlclNW
R0NvbnRhaW5lciA6IHB1YmxpYyBSZW5kZXJDb250YWluZXIgeworY2xhc3MgUmVuZGVyU1ZHQ29u
dGFpbmVyIDogcHVibGljIFJlbmRlck9iamVjdCB7CiBwdWJsaWM6CiAgICAgUmVuZGVyU1ZHQ29u
dGFpbmVyKFNWR1N0eWxlZEVsZW1lbnQqKTsKICAgICB+UmVuZGVyU1ZHQ29udGFpbmVyKCk7CkBA
IC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHNob3J0IGJhc2VsaW5lUG9zaXRp
b24oYm9vbCBiLCBib29sIGlzUm9vdExpbmVCb3ggPSBmYWxzZSkgY29uc3Q7CiAgICAgCiAgICAg
dmlydHVhbCB2b2lkIGxheW91dCgpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8m
LCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpOworICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWlu
dEluZm8mLCBpbnQsIGludCk7CiAgICAgCiAgICAgdmlydHVhbCBJbnRSZWN0IGFic29sdXRlQ2xp
cHBlZE92ZXJmbG93UmVjdCgpOwogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3Rv
cjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5KTsKQEAgLTgyLDEwICs4MiwzMCBAQCBw
dWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhp
dFRlc3RBY3Rpb24pOwogICAgIAorICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBmaXJzdENoaWxk
KCkgY29uc3QgeyByZXR1cm4gbV9maXJzdENoaWxkOyB9CisgICAgdmlydHVhbCBSZW5kZXJPYmpl
Y3QqIGxhc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdENoaWxkOyB9CisgICAgCisgICAg
dmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBh
ZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxk
ID0gMCk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCopOworICAg
IAorICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7CisgICAgdm9pZCBkZXN0cm95TGVmdG92ZXJD
aGlsZHJlbigpOworICAgIAorICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiByZW1vdmVDaGlsZE5v
ZGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBmdWxsUmVtb3ZlID0gdHJ1ZSk7CisgICAgdmlydHVhbCB2
b2lkIGFwcGVuZENoaWxkTm9kZShSZW5kZXJPYmplY3QqLCBib29sIGZ1bGxBcHBlbmQgPSB0cnVl
KTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0Q2hpbGROb2RlKFJlbmRlck9iamVjdCogY2hpbGQs
IFJlbmRlck9iamVjdCogYmVmb3JlLCBib29sIGZ1bGxJbnNlcnQgPSB0cnVlKTsKKyAgICAKKyAg
ICAvLyBEZXNpZ25lZCBmb3Igc3BlZWQuICBEb24ndCB3YXN0ZSB0aW1lIGRvaW5nIGEgYnVuY2gg
b2Ygd29yayBsaWtlIGxheWVyIHVwZGF0aW5nIGFuZCByZXBhaW50aW5nIHdoZW4gd2Uga25vdyB0
aGF0IG91cgorICAgIC8vIGNoYW5nZSBpbiBwYXJlbnRhZ2UgaXMgbm90IGdvaW5nIHRvIGFmZmVj
dCBhbnl0aGluZy4KKyAgICB2aXJ0dWFsIHZvaWQgbW92ZUNoaWxkTm9kZShSZW5kZXJPYmplY3Qq
IGNoaWxkKSB7IGFwcGVuZENoaWxkTm9kZShjaGlsZC0+cGFyZW50KCktPnJlbW92ZUNoaWxkTm9k
ZShjaGlsZCwgZmFsc2UpLCBmYWxzZSk7IH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY1By
ZWZXaWR0aHMoKSB7IHNldFByZWZXaWR0aHNEaXJ0eShmYWxzZSk7IH0KKyAgICAKIHByaXZhdGU6
CiAgICAgdm9pZCBjYWxjVmlld3BvcnQoKTsgCiAgICAgQWZmaW5lVHJhbnNmb3JtIGdldEFzcGVj
dFJhdGlvKGNvbnN0IEZsb2F0UmVjdCYgbG9naWNhbCwgY29uc3QgRmxvYXRSZWN0JiBwaHlzaWNh
bCkgY29uc3Q7Ci0gICAgdm9pZCBhcHBseUNvbnRlbnRUcmFuc2Zvcm1zKFBhaW50SW5mbyYsIGlu
dCYgcGFyZW50WCwgaW50JiBwYXJlbnRZKTsKKyAgICB2b2lkIGFwcGx5Q29udGVudFRyYW5zZm9y
bXMoUGFpbnRJbmZvJik7CiAKICAgICBib29sIG1fZHJhd3NDb250ZW50cyA6IDE7CiAgICAgYm9v
bCBtX3NsaWNlIDogMTsKQEAgLTk1LDYgKzExNSw5IEBAIHByaXZhdGU6CiAgICAgRmxvYXRSZWN0
IG1fdmlld0JveDsKICAgICBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOjpTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvVHlwZSBtX2FsaWduOwogICAgIEludFJlY3QgbV9hYnNvbHV0ZUJvdW5kczsKKyAgICAK
KyAgICBSZW5kZXJPYmplY3QqIG1fZmlyc3RDaGlsZDsKKyAgICBSZW5kZXJPYmplY3QqIG1fbGFz
dENoaWxkOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogcmVuZGVyaW5nL1Jl
bmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRl
clNWR0hpZGRlbkNvbnRhaW5lci5jcHAJKHJldmlzaW9uIDIzNTQ3KQorKysgcmVuZGVyaW5nL1Jl
bmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpSZW5k
ZXJTVkdIaWRkZW5Db250YWluZXIoU1ZHU3R5bGVkRWxlbWVudCogZWxlbWVudCkKLSAgICA6IFJl
bmRlckNvbnRhaW5lcihlbGVtZW50KQorICAgIDogUmVuZGVyU1ZHQ29udGFpbmVyKGVsZW1lbnQp
CiB7CiB9CiAKQEAgLTEwMyw2ICsxMDMsMTEgQEAgYm9vbCBSZW5kZXJTVkdIaWRkZW5Db250YWlu
ZXI6Om5vZGVBdFBvaQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorRmxvYXRSZWN0IFJlbmRlclNW
R0hpZGRlbkNvbnRhaW5lcjo6cmVsYXRpdmVCQm94KGJvb2wgaW5jbHVkZVN0cm9rZSkgY29uc3QK
K3sKKyAgICByZXR1cm4gRmxvYXRSZWN0KCk7Cit9CisKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShT
VkcpCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oCShyZXZpc2lvbiAyMzU0
NykKKysrIHJlbmRlcmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjUsNyArMjUsNyBAQAogCiAjaWYgRU5BQkxFKFNWRykKIAotI2luY2x1ZGUgIlJlbmRl
ckNvbnRhaW5lci5oIgorI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAKICAgICAvLyBUaGlzIGNsYXNzIGlzIGZvciBjb250YWluZXJzIHdoaWNoIGFyZSBuZXZl
ciBkcmF3biwgYnV0IGRvIG5lZWQgdG8gc3VwcG9ydCBzdHlsZQogICAgIC8vIDxkZWZzPiwgPGxp
bmVhckdyYWRpZW50PiwgPHJhZGlhbEdyYWRpZW50PiBhcmUgYWxsIGdvb2QgZXhhbXBsZXMKLSAg
ICBjbGFzcyBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIgOiBwdWJsaWMgUmVuZGVyQ29udGFpbmVy
IHsKKyAgICBjbGFzcyBSZW5kZXJTVkdIaWRkZW5Db250YWluZXIgOiBwdWJsaWMgUmVuZGVyU1ZH
Q29udGFpbmVyIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5l
cihTVkdTdHlsZWRFbGVtZW50Kik7CiAgICAgICAgIHZpcnR1YWwgflJlbmRlclNWR0hpZGRlbkNv
bnRhaW5lcigpOwpAQCAtNTIsMTEgKzUyLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdmlydHVhbCBJbnRSZWN0IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpOwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQg
dHgsIGludCB0eSk7CiAgICAgICAgIAorICAgICAgICBGbG9hdFJlY3QgcmVsYXRpdmVCQm94KGJv
b2wgaW5jbHVkZVN0cm9rZSA9IHRydWUpIGNvbnN0OworICAgICAgICAKICAgICAgICAgdmlydHVh
bCBBZmZpbmVUcmFuc2Zvcm0gYWJzb2x1dGVUcmFuc2Zvcm0oKSBjb25zdDsKICAgICAgICAgdmly
dHVhbCBBZmZpbmVUcmFuc2Zvcm0gbG9jYWxUcmFuc2Zvcm0oKSBjb25zdDsKICAgICAgICAgCiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9u
KTsKLSAgICAgICAgCiAgICAgfTsKIH0KIApJbmRleDogcmVuZGVyaW5nL1JlbmRlclNWR1Jvb3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5oCShyZXZpc2lvbiAyMzU0
NykKKysrIHJlbmRlcmluZy9SZW5kZXJTVkdSb290LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcg
KzM4LDcgQEAgcHVibGljOgogICAgIFJlbmRlclNWR1Jvb3QoU1ZHU3R5bGVkRWxlbWVudCopOwog
ICAgIH5SZW5kZXJTVkdSb290KCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgaXNTVkdDb250YWluZXIo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIGlzU1ZHUm9vdCgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUo
KSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHQ29udGFpbmVyIjsgfQogICAgICAgICAKICAgICB2
aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlclRyZWVB
c1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAko
cmV2aXNpb24gMjM1NDcpCisrKyByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKICNp
ZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlJlbmRlclNWR1Jvb3QuaCIKICNpbmNsdWRlICJSZW5k
ZXJTVkdDb250YWluZXIuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdJbmxpbmVUZXh0LmgiCiAjaW5j
bHVkZSAiUmVuZGVyU1ZHVGV4dC5oIgpAQCAtMzI1LDYgKzMyNiwxMCBAQCB2b2lkIHdyaXRlKFRl
eHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJPCiAgICAgICAgIHdyaXRlKHRzLCBzdGF0aWNfY2Fz
dDxjb25zdCBSZW5kZXJTVkdDb250YWluZXImPihvKSwgaW5kZW50KTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KKyAgICBpZiAoby5pc1NWR1Jvb3QoKSkgeworICAgICAgICB3cml0ZSh0cywgc3Rh
dGljX2Nhc3Q8Y29uc3QgUmVuZGVyU1ZHUm9vdCY+KG8pLCBpbmRlbnQpOworICAgICAgICByZXR1
cm47CisgICAgfQogICAgIGlmIChvLmlzU1ZHVGV4dCgpKSB7CiAgICAgICAgIGlmICghby5pc1Rl
eHQoKSkKICAgICAgICAgICAgIHdyaXRlKHRzLCBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdU
ZXh0Jj4obyksIGluZGVudCk7CkluZGV4OiByZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZp
c2lvbiAyMzU0NykKKysrIHJlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1
ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZVRleHQu
aCIKKyNpbmNsdWRlICJSZW5kZXJTVkdSb290LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHVGV4dC5o
IgogI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKICNpbmNsdWRlICJTVkdDaGFyYWN0ZXJM
YXlvdXRJbmZvLmgiCkBAIC0zMTEsNiArMzEyLDE1IEBAIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0KICAgICByZXR1cm4gdHM7CiB9CiAKK3N0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdSb290JiByb290KQor
eworICAgIHRzIDw8ICIgIiA8PCByb290LmFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChyb290
LnJlbGF0aXZlQkJveCgpKTsKKyAgICAKKyAgICB3cml0ZVN0eWxlKHRzLCByb290KTsKKyAgICAK
KyAgICByZXR1cm4gdHM7Cit9CisKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdUZXh0JiB0ZXh0KQogewogICAgIFNWR1Jvb3RJbmxp
bmVCb3gqIGJveCA9IHN0YXRpY19jYXN0PFNWR1Jvb3RJbmxpbmVCb3gqPih0ZXh0LmZpcnN0Um9v
dEJveCgpKTsKQEAgLTQ0Myw2ICs0NTMsMjMgQEAgc3RhdGljIFN0cmluZyBnZXRUYWdOYW1lKFNW
R1N0eWxlZEVsZW1lbgogICAgIHJldHVybiAiIjsKIH0KIAordm9pZCB3cml0ZShUZXh0U3RyZWFt
JiB0cywgY29uc3QgUmVuZGVyU1ZHUm9vdCYgcm9vdCwgaW50IGluZGVudCkKK3sKKyAgICB3cml0
ZUluZGVudCh0cywgaW5kZW50KTsKKyAgICB0cyA8PCByb290LnJlbmRlck5hbWUoKTsKKyAgICAK
KyAgICBpZiAocm9vdC5lbGVtZW50KCkpIHsKKyAgICAgICAgU3RyaW5nIHRhZ05hbWUgPSBnZXRU
YWdOYW1lKHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPihyb290LmVsZW1lbnQoKSkpOwor
ICAgICAgICBpZiAoIXRhZ05hbWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgdHMgPDwgIiB7IiA8
PCB0YWdOYW1lIDw8ICJ9IjsKKyAgICB9CisgICAgCisgICAgdHMgPDwgcm9vdCA8PCBlbmRsOwor
ICAgIAorICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHJvb3QuZmlyc3RDaGlsZCgpOyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgd3JpdGUodHMsICpj
aGlsZCwgaW5kZW50ICsgMSk7Cit9CisKIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0
IFJlbmRlclNWR0NvbnRhaW5lciYgY29udGFpbmVyLCBpbnQgaW5kZW50KQogewogICAgIHdyaXRl
SW5kZW50KHRzLCBpbmRlbnQpOwpJbmRleDogcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCShyZXZpc2lv
biAyMzU0NykKKysrIHJlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDE0ICs0MywxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgTm9k
ZTsKICAgICBjbGFzcyBSZW5kZXJQYXRoOwogICAgIGNsYXNzIFJlbmRlclNWR0NvbnRhaW5lcjsK
LSAgICBjbGFzcyBSZW5kZXJTVkdUZXh0OwogICAgIGNsYXNzIFJlbmRlclNWR0lubGluZVRleHQ7
CisgICAgY2xhc3MgUmVuZGVyU1ZHUm9vdDsKKyAgICBjbGFzcyBSZW5kZXJTVkdUZXh0OwogCiAv
LyBmdW5jdGlvbnMgdXNlZCBieSB0aGUgbWFpbiBSZW5kZXJUcmVlQXNUZXh0IGNvZGUKIHZvaWQg
d3JpdGUoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlclBhdGgmLCBpbnQgaW5kZW50ID0gMCk7CiB2
b2lkIHdyaXRlKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdDb250YWluZXImLCBpbnQgaW5k
ZW50ID0gMCk7Ci12b2lkIHdyaXRlKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdUZXh0Jiwg
aW50IGlkZW50ID0gMCk7CiB2b2lkIHdyaXRlKFRleHRTdHJlYW0mLCBjb25zdCBSZW5kZXJTVkdJ
bmxpbmVUZXh0JiwgaW50IGlkZW50ID0gMCk7Cit2b2lkIHdyaXRlKFRleHRTdHJlYW0mLCBjb25z
dCBSZW5kZXJTVkdSb290JiwgaW50IGluZGVudCA9IDApOwordm9pZCB3cml0ZShUZXh0U3RyZWFt
JiwgY29uc3QgUmVuZGVyU1ZHVGV4dCYsIGludCBpZGVudCA9IDApOwogdm9pZCB3cml0ZVJlbmRl
clJlc291cmNlcyhUZXh0U3RyZWFtJiwgTm9kZSogcGFyZW50KTsKIAogLy8gaGVscGVyIG9wZXJh
dG9ycyBkZWZpbmVkIHVzZWQgaW4gdmFyaW91cyBjbGFzc2VzIHRvIGR1bXAgdGhlIHJlbmRlciB0
cmVlLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15522</attachid>
            <date>2007-07-14 15:43:32 -0700</date>
            <delta_ts>2007-07-14 15:47:54 -0700</delta_ts>
            <desc>Initial patch</desc>
            <filename>FixSVGXHTMLStuff.diff</filename>
            <type>text/plain</type>
            <size>39483</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RTcGFuLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUU3Bhbi5jcHAJKHJldmlzaW9uIDI0Mjg4KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVFNwYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSwyNyArMjUsNDIgQEAKIAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiUmVuZGVyU1ZH
VFNwYW4uaCIKKworCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiU1ZHSW5saW5lVGV4dEJveC5oIgorI2luY2x1ZGUg
IlNWR0lubGluZUZsb3dCb3guaCIiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5oIgogI2luY2x1
ZGUgIlNWR1Jvb3RJbmxpbmVCb3guaCIKLSNpbmNsdWRlICJTVkdJbmxpbmVGbG93Qm94LmgiCi0j
aW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiU1ZHVGV4dFBvc2l0aW9uaW5n
RWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0xlbmd0aExpc3QuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1SZW5kZXJTVkdUU3Bhbjo6UmVuZGVyU1ZHVFNwYW4oTm9kZSogbikgOiBSZW5kZXJT
VkdJbmxpbmUobikKK1JlbmRlclNWR1RTcGFuOjpSZW5kZXJTVkdUU3BhbihOb2RlKiBuKQorICAg
IDogUmVuZGVyU1ZHSW5saW5lKG4pCiB7CiB9CiAKIHZvaWQgUmVuZGVyU1ZHVFNwYW46OmFic29s
dXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHkpCiB7Ci0gICAg
SW5saW5lRmxvd0JveCogaW5pdEZsb3cgPSBmaXJzdExpbmVCb3goKTsKLSAgICBGbG9hdFJlY3Qg
Ym91bmRzKHR4ICsgaW5pdEZsb3ctPnhQb3MoKSwgdHkgKyBpbml0Rmxvdy0+eVBvcygpLCB3aWR0
aCgpLCBoZWlnaHQoKSk7Ci0gICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1
dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KGJvdW5kcykpKTsKLX0KKyAgICBJbmxpbmVSdW5Cb3gqIGZp
cnN0Qm94ID0gZmlyc3RMaW5lQm94KCk7CiAKKyAgICBTVkdSb290SW5saW5lQm94KiByb290Qm94
ID0gZmlyc3RCb3ggPyBzdGF0aWNfY2FzdDxTVkdJbmxpbmVUZXh0Qm94Kj4oZmlyc3RCb3gpLT5z
dmdSb290SW5saW5lQm94KCkgOiAwOworICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gcm9vdEJv
eCA/IHJvb3RCb3gtPm9iamVjdCgpIDogMDsKIAorICAgIGlmICghb2JqZWN0KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpbnQgeFJlZiA9IG9iamVjdC0+eFBvcygpICsgeFBvcygpOworICAgIGlu
dCB5UmVmID0gb2JqZWN0LT55UG9zKCkgKyB5UG9zKCk7CisgCisgICAgZm9yIChJbmxpbmVSdW5C
b3gqIGN1cnIgPSBmaXJzdEJveDsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkpIHsK
KyAgICAgICAgRmxvYXRSZWN0IHJlY3QoeFJlZiArIGN1cnItPnhQb3MoKSwgeVJlZiArIGN1cnIt
PnlQb3MoKSwgY3Vyci0+d2lkdGgoKSwgY3Vyci0+aGVpZ2h0KCkpOworICAgICAgICByZWN0cy5h
cHBlbmQoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QocmVjdCkp
KTsKKyAgICB9CiB9CiAKK30KKwogI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDI0Mjg4KQorKysgV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzY0LDcgKzc2NCw3IEBACiAg
ICAgICAgIHdoaWxlIChvICYmICgoby0+aXNJbmxpbmUoKSAmJiAhby0+aXNSZXBsYWNlZCgpKSB8
fCBvLT5pc1RhYmxlUm93KCkgfHwgby0+aXNUYWJsZVNlY3Rpb24oKQogICAgICAgICAgICAgICAg
ICAgICAgfHwgby0+aXNUYWJsZUNvbCgpIHx8IG8tPmlzRnJhbWVTZXQoKQogI2lmIEVOQUJMRShT
VkcpCi0gICAgICAgICAgICAgICAgICAgICB8fCBvLT5pc1NWR0NvbnRhaW5lcigpCisgICAgICAg
ICAgICAgICAgICAgICB8fCBvLT5pc1NWR0NvbnRhaW5lcigpIHx8IG8tPmlzU1ZHUm9vdCgpCiAj
ZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICkpCiAgICAgICAgICAgICBvID0gby0+cGFyZW50
KCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdUZXh0UGF0aC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dFBhdGguY3BwCShyZXZpc2lv
biAyNDI4OCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHRQYXRoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODEsOSArODEsMTAgQEAKIAogdm9pZCBSZW5kZXJTVkdUZXh0UGF0aDo6
YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSkKIHsK
LSAgICBJbmxpbmVGbG93Qm94KiBpbml0RmxvdyA9IGZpcnN0TGluZUJveCgpOwotICAgIEZsb2F0
UmVjdCBib3VuZHModHggKyBpbml0Rmxvdy0+eFBvcygpLCB0eSArIGluaXRGbG93LT55UG9zKCks
IHdpZHRoKCksIGhlaWdodCgpKTsKLSAgICByZWN0cy5hcHBlbmQoZW5jbG9zaW5nSW50UmVjdChh
YnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QoYm91bmRzKSkpOworICAgIGZvciAoSW5saW5lUnVu
Qm94KiBjdXJyID0gZmlyc3RMaW5lQm94KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0TGluZUJv
eCgpKSB7CisgICAgICAgIEZsb2F0UmVjdCByZWN0KHR4ICsgY3Vyci0+eFBvcygpLCB0eSArIGN1
cnItPnlQb3MoKSwgY3Vyci0+d2lkdGgoKSwgY3Vyci0+aGVpZ2h0KCkpOworICAgICAgICByZWN0
cy5hcHBlbmQoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QocmVj
dCkpKTsKKyAgICB9CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0Nv
bnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29u
dGFpbmVyLmNwcAkocmV2aXNpb24gMjQyODgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdDb250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaWYgRU5B
QkxFKFNWRykKICNpbmNsdWRlICJSZW5kZXJTVkdDb250YWluZXIuaCIKIAorI2luY2x1ZGUgIkFY
T2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJS
ZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCkBAIC00MSw3ICs0MiwxMSBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZW5kZXJTVkdDb250YWluZXI6OlJlbmRlclNWR0NvbnRh
aW5lcihTVkdTdHlsZWRFbGVtZW50KiBub2RlKQotICAgIDogUmVuZGVyQ29udGFpbmVyKG5vZGUp
CisgICAgOiBSZW5kZXJPYmplY3Qobm9kZSkKKyAgICAsIG1fZmlyc3RDaGlsZCgwKQorICAgICwg
bV9sYXN0Q2hpbGQoMCkKKyAgICAsIG1fd2lkdGgoMCkKKyAgICAsIG1faGVpZ2h0KDApCiAgICAg
LCBtX2RyYXdzQ29udGVudHModHJ1ZSkKICAgICAsIG1fc2xpY2UoZmFsc2UpCiB7CkBAIC01Miw2
ICs1NywxNDMgQEAKIHsKIH0KIAorYm9vbCBSZW5kZXJTVkdDb250YWluZXI6OmNhbkhhdmVDaGls
ZHJlbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgUmVuZGVyU1ZHQ29u
dGFpbmVyOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkKQoreworICAgIGluc2VydENoaWxkTm9kZShuZXdDaGlsZCwgYmVmb3JlQ2hpbGQp
OworfQorCit2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0
KiBvbGRDaGlsZCkKK3sKKyAgICAvLyBXZSBkbyB0aGlzIGhlcmUgaW5zdGVhZCBvZiBpbiByZW1v
dmVDaGlsZE5vZGUsIHNpbmNlIHRoZSBvbmx5IGV4dHJlbWVseSBsb3ctbGV2ZWwgdXNlcyBvZiBy
ZW1vdmUvYXBwZW5kQ2hpbGROb2RlCisgICAgLy8gY2Fubm90IGFmZmVjdCB0aGUgcG9zaXRpb25l
ZCBvYmplY3QgbGlzdCwgYW5kIHRoZSBmbG9hdGluZyBvYmplY3QgbGlzdCBpcyBpcnJlbGV2YW50
IChzaW5jZSB0aGUgbGlzdCBnZXRzIGNsZWFyZWQgb24KKyAgICAvLyBsYXlvdXQgYW55d2F5KS4K
KyAgICBvbGRDaGlsZC0+cmVtb3ZlRnJvbU9iamVjdExpc3RzKCk7CisKKyAgICByZW1vdmVDaGls
ZE5vZGUob2xkQ2hpbGQpOworfQorCit2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6ZGVzdHJveSgp
Cit7CisgICAgZGVzdHJveUxlZnRvdmVyQ2hpbGRyZW4oKTsKKyAgICBSZW5kZXJPYmplY3Q6OmRl
c3Ryb3koKTsKK30KKwordm9pZCBSZW5kZXJTVkdDb250YWluZXI6OmRlc3Ryb3lMZWZ0b3ZlckNo
aWxkcmVuKCkKK3sKKyAgICB3aGlsZSAobV9maXJzdENoaWxkKSB7CisgICAgICAgIC8vIERlc3Ry
b3kgYW55IGFub255bW91cyBjaGlsZHJlbiByZW1haW5pbmcgaW4gdGhlIHJlbmRlciB0cmVlLCBh
cyB3ZWxsIGFzIGltcGxpY2l0IChzaGFkb3cpIERPTSBlbGVtZW50cyBsaWtlIHRob3NlIHVzZWQg
aW4gdGhlIGVuZ2luZS1iYXNlZCB0ZXh0IGZpZWxkcy4KKyAgICAgICAgaWYgKG1fZmlyc3RDaGls
ZC0+ZWxlbWVudCgpKQorICAgICAgICAgICAgbV9maXJzdENoaWxkLT5lbGVtZW50KCktPnNldFJl
bmRlcmVyKDApOworCisgICAgICAgIG1fZmlyc3RDaGlsZC0+ZGVzdHJveSgpOworICAgIH0KK30K
KworUmVuZGVyT2JqZWN0KiBSZW5kZXJTVkdDb250YWluZXI6OnJlbW92ZUNoaWxkTm9kZShSZW5k
ZXJPYmplY3QqIG9sZENoaWxkLCBib29sIGZ1bGxSZW1vdmUpCit7CisgICAgQVNTRVJUKG9sZENo
aWxkLT5wYXJlbnQoKSA9PSB0aGlzKTsKKworICAgIC8vIFNvIHRoYXQgd2UnbGwgZ2V0IHRoZSBh
cHByb3ByaWF0ZSBkaXJ0eSBiaXQgc2V0IChlaXRoZXIgdGhhdCBhIG5vcm1hbCBmbG93IGNoaWxk
IGdvdCB5YW5rZWQgb3IKKyAgICAvLyB0aGF0IGEgcG9zaXRpb25lZCBjaGlsZCBnb3QgeWFua2Vk
KS4gIFdlIGFsc28gcmVwYWludCwgc28gdGhhdCB0aGUgYXJlYSBleHBvc2VkIHdoZW4gdGhlIGNo
aWxkCisgICAgLy8gZGlzYXBwZWFycyBnZXRzIHJlcGFpbnRlZCBwcm9wZXJseS4KKyAgICBpZiAo
IWRvY3VtZW50QmVpbmdEZXN0cm95ZWQoKSAmJiBmdWxsUmVtb3ZlKSB7CisgICAgICAgIG9sZENo
aWxkLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKKyAgICAgICAgb2xkQ2hp
bGQtPnJlcGFpbnQoKTsKKyAgICB9CisKKyAgICAvLyBJZiB3ZSBoYXZlIGEgbGluZSBib3ggd3Jh
cHBlciwgZGVsZXRlIGl0LgorICAgIG9sZENoaWxkLT5kZWxldGVMaW5lQm94V3JhcHBlcigpOwor
CisgICAgaWYgKCFkb2N1bWVudEJlaW5nRGVzdHJveWVkKCkgJiYgZnVsbFJlbW92ZSkgeworICAg
ICAgICAvLyBJZiBvbGRDaGlsZCBpcyB0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZSBzZWxlY3Rpb24s
IHRoZW4gY2xlYXIgdGhlIHNlbGVjdGlvbiB0bworICAgICAgICAvLyBhdm9pZCBwcm9ibGVtcyBv
ZiBpbnZhbGlkIHBvaW50ZXJzLgorICAgICAgICAvLyBGSVhNRTogVGhlIFNlbGVjdGlvbkNvbnRy
b2xsZXIgc2hvdWxkIGJlIHJlc3BvbnNpYmxlIGZvciB0aGlzIHdoZW4gaXQKKyAgICAgICAgLy8g
aXMgbm90aWZpZWQgb2YgRE9NIG11dGF0aW9ucy4KKyAgICAgICAgaWYgKG9sZENoaWxkLT5pc1Nl
bGVjdGlvbkJvcmRlcigpKQorICAgICAgICAgICAgdmlldygpLT5jbGVhclNlbGVjdGlvbigpOwor
ICAgIH0KKworICAgIC8vIHJlbW92ZSB0aGUgY2hpbGQKKyAgICBpZiAob2xkQ2hpbGQtPnByZXZp
b3VzU2libGluZygpKQorICAgICAgICBvbGRDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCktPnNldE5l
eHRTaWJsaW5nKG9sZENoaWxkLT5uZXh0U2libGluZygpKTsKKyAgICBpZiAob2xkQ2hpbGQtPm5l
eHRTaWJsaW5nKCkpCisgICAgICAgIG9sZENoaWxkLT5uZXh0U2libGluZygpLT5zZXRQcmV2aW91
c1NpYmxpbmcob2xkQ2hpbGQtPnByZXZpb3VzU2libGluZygpKTsKKworICAgIGlmIChtX2ZpcnN0
Q2hpbGQgPT0gb2xkQ2hpbGQpCisgICAgICAgIG1fZmlyc3RDaGlsZCA9IG9sZENoaWxkLT5uZXh0
U2libGluZygpOworICAgIGlmIChtX2xhc3RDaGlsZCA9PSBvbGRDaGlsZCkKKyAgICAgICAgbV9s
YXN0Q2hpbGQgPSBvbGRDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7CisKKyAgICBvbGRDaGlsZC0+
c2V0UHJldmlvdXNTaWJsaW5nKDApOworICAgIG9sZENoaWxkLT5zZXROZXh0U2libGluZygwKTsK
KyAgICBvbGRDaGlsZC0+c2V0UGFyZW50KDApOworCisgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFj
Y2Vzc2liaWxpdHlFbmFibGVkKCkpCisgICAgICAgIGRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUo
KS0+Y2hpbGRyZW5DaGFuZ2VkKHRoaXMpOworCisgICAgcmV0dXJuIG9sZENoaWxkOworfQorCit2
b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6YXBwZW5kQ2hpbGROb2RlKFJlbmRlck9iamVjdCogbmV3
Q2hpbGQsIGJvb2wpCit7CisgICAgQVNTRVJUKCFuZXdDaGlsZC0+cGFyZW50KCkpOworICAgIEFT
U0VSVChuZXdDaGlsZC0+ZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSk7CisKKyAgICBuZXdDaGls
ZC0+c2V0UGFyZW50KHRoaXMpOworICAgIFJlbmRlck9iamVjdCogbENoaWxkID0gbV9sYXN0Q2hp
bGQ7CisKKyAgICBpZiAobENoaWxkKSB7CisgICAgICAgIG5ld0NoaWxkLT5zZXRQcmV2aW91c1Np
YmxpbmcobENoaWxkKTsKKyAgICAgICAgbENoaWxkLT5zZXROZXh0U2libGluZyhuZXdDaGlsZCk7
CisgICAgfSBlbHNlCisgICAgICAgIG1fZmlyc3RDaGlsZCA9IG5ld0NoaWxkOworCisgICAgbV9s
YXN0Q2hpbGQgPSBuZXdDaGlsZDsKKworICAgIG5ld0NoaWxkLT5zZXROZWVkc0xheW91dEFuZFBy
ZWZXaWR0aHNSZWNhbGMoKTsgLy8gR29lcyB1cCB0aGUgY29udGFpbmluZyBibG9jayBoaWVyYXJj
aHkuCisgICAgaWYgKCFub3JtYWxDaGlsZE5lZWRzTGF5b3V0KCkpCisgICAgICAgIHNldENoaWxk
TmVlZHNMYXlvdXQodHJ1ZSk7IC8vIFdlIG1heSBzdXBwbHkgdGhlIHN0YXRpYyBwb3NpdGlvbiBm
b3IgYW4gYWJzb2x1dGUgcG9zaXRpb25lZCBjaGlsZC4KKworICAgIGlmIChBWE9iamVjdENhY2hl
OjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQorICAgICAgICBkb2N1bWVudCgpLT5heE9iamVjdENh
Y2hlKCktPmNoaWxkcmVuQ2hhbmdlZCh0aGlzKTsKK30KKwordm9pZCBSZW5kZXJTVkdDb250YWlu
ZXI6Omluc2VydENoaWxkTm9kZShSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkLCBib29sKQoreworICAgIGlmICghYmVmb3JlQ2hpbGQpIHsKKyAgICAgICAgYXBw
ZW5kQ2hpbGROb2RlKGNoaWxkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VS
VCghY2hpbGQtPnBhcmVudCgpKTsKKyAgICBBU1NFUlQoYmVmb3JlQ2hpbGQtPnBhcmVudCgpID09
IHRoaXMpOworICAgIEFTU0VSVChjaGlsZC0+ZWxlbWVudCgpLT5pc1NWR0VsZW1lbnQoKSk7CisK
KyAgICBpZiAoYmVmb3JlQ2hpbGQgPT0gbV9maXJzdENoaWxkKQorICAgICAgICBtX2ZpcnN0Q2hp
bGQgPSBjaGlsZDsKKworICAgIFJlbmRlck9iamVjdCogcHJldiA9IGJlZm9yZUNoaWxkLT5wcmV2
aW91c1NpYmxpbmcoKTsKKyAgICBjaGlsZC0+c2V0TmV4dFNpYmxpbmcoYmVmb3JlQ2hpbGQpOwor
ICAgIGJlZm9yZUNoaWxkLT5zZXRQcmV2aW91c1NpYmxpbmcoY2hpbGQpOworICAgIGlmIChwcmV2
KQorICAgICAgICBwcmV2LT5zZXROZXh0U2libGluZyhjaGlsZCk7CisgICAgY2hpbGQtPnNldFBy
ZXZpb3VzU2libGluZyhwcmV2KTsKKworICAgIGNoaWxkLT5zZXRQYXJlbnQodGhpcyk7CisKKyAg
ICBjaGlsZC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CisgICAgaWYgKCFu
b3JtYWxDaGlsZE5lZWRzTGF5b3V0KCkpCisgICAgICAgIHNldENoaWxkTmVlZHNMYXlvdXQodHJ1
ZSk7IC8vIFdlIG1heSBzdXBwbHkgdGhlIHN0YXRpYyBwb3NpdGlvbiBmb3IgYW4gYWJzb2x1dGUg
cG9zaXRpb25lZCBjaGlsZC4KKworICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5
RW5hYmxlZCgpKQorICAgICAgICBkb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPmNoaWxkcmVu
Q2hhbmdlZCh0aGlzKTsKK30KKwogYm9vbCBSZW5kZXJTVkdDb250YWluZXI6OmRyYXdzQ29udGVu
dHMoKSBjb25zdAogewogICAgIHJldHVybiBtX2RyYXdzQ29udGVudHM7CkBAIC0xMTYsOSArMjU4
LDkgQEAKICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICB9CiAKLSAg
ICBjYWxjV2lkdGgoKTsKLSAgICBjYWxjSGVpZ2h0KCk7Ci0KKyAgICAvLyBDYWxjdWxhdGUgd2lk
dGggJiBoZWlnaHQKKyAgICBtX3dpZHRoID0gY2FsY1JlcGxhY2VkV2lkdGgoKTsKKyAgICBtX2hl
aWdodCA9IGNhbGNSZXBsYWNlZEhlaWdodCgpOwogICAgIG1fYWJzb2x1dGVCb3VuZHMgPSBhYnNv
bHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKIAogICAgIGlmIChzZWxmTmVlZHNMYXlvdXQoKSAm
JiBjaGVja0ZvclJlcGFpbnQpCkBAIC0xMjgsMjEgKzI3MCw0OSBAQAogICAgIHNldE5lZWRzTGF5
b3V0KGZhbHNlKTsKIH0KIAotdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OmFwcGx5Q29udGVudFRy
YW5zZm9ybXMoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCYgcGFyZW50WCwgaW50JiBwYXJlbnRZ
KQoraW50IFJlbmRlclNWR0NvbnRhaW5lcjo6Y2FsY1JlcGxhY2VkV2lkdGgoKSBjb25zdAogewor
ICAgIHN3aXRjaCAoc3R5bGUoKS0+d2lkdGgoKS50eXBlKCkpIHsKKyAgICBjYXNlIEZpeGVkOgor
ICAgICAgICByZXR1cm4gbWF4KDAsIHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSk7CisgICAgY2Fz
ZSBQZXJjZW50OgorICAgIHsKKyAgICAgICAgY29uc3QgaW50IGN3ID0gY29udGFpbmluZ0Jsb2Nr
V2lkdGgoKTsKKyAgICAgICAgcmV0dXJuIGN3ID4gMCA/IG1heCgwLCBzdHlsZSgpLT53aWR0aCgp
LmNhbGNNaW5WYWx1ZShjdykpIDogMDsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorfQorCitpbnQgUmVuZGVyU1ZHQ29udGFpbmVyOjpjYWxjUmVwbGFjZWRI
ZWlnaHQoKSBjb25zdAoreworICAgIHN3aXRjaCAoc3R5bGUoKS0+aGVpZ2h0KCkudHlwZSgpKSB7
CisgICAgY2FzZSBGaXhlZDoKKyAgICAgICAgcmV0dXJuIG1heCgwLCBzdHlsZSgpLT5oZWlnaHQo
KS52YWx1ZSgpKTsKKyAgICBjYXNlIFBlcmNlbnQ6CisgICAgeworICAgICAgICBSZW5kZXJCbG9j
ayogY2IgPSBjb250YWluaW5nQmxvY2soKTsKKyAgICAgICAgcmV0dXJuIHN0eWxlKCktPmhlaWdo
dCgpLmNhbGNWYWx1ZShjYi0+YXZhaWxhYmxlSGVpZ2h0KCkpOworICAgIH0KKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyU1ZHQ29udGFpbmVy
OjphcHBseUNvbnRlbnRUcmFuc2Zvcm1zKFBhaW50SW5mbyYgcGFpbnRJbmZvKQorewogICAgIC8v
IE9ubHkgdGhlIHJvb3QgPHN2Zz4gZWxlbWVudCBzaG91bGQgbmVlZCBhbnkgdHJhbnNsYXRpb25z
IHVzaW5nIHRoZSBIVE1ML0NTUyBzeXN0ZW0KICAgICAvLyBwYXJlbnRYLCBwYXJlbnRZIGFyZSBh
bHNvIG5vbi16ZXJvIGZvciBmaXJzdC1sZXZlbCBraWRzIG9mIHRoZXNlCiAgICAgLy8gQ1NTLXRy
YW5zZm9ybWVkIDxzdmc+IHJvb3QtZWxlbWVudHMgKGR1ZSB0byBSZW5kZXJCb3g6OnBhaW50KSBm
b3IgYW55IG90aGVyIGVsZW1lbnQKICAgICAvLyB0aGV5IHNob3VsZCBiZSAwLiAgIG1feCwgbV95
IHNob3VsZCBhbHdheXMgYmUgMCBmb3Igbm9uLXJvb3Qgc3ZnIGNvbnRhaW5lcnMKLSAgICBBU1NF
UlQobV94ID09IDApOwotICAgIEFTU0VSVChtX3kgPT0gMCk7Ci0gICAgCiAgICAgaWYgKCF2aWV3
cG9ydCgpLmlzRW1wdHkoKSkgewogICAgICAgICBpZiAoc3R5bGUoKS0+b3ZlcmZsb3dYKCkgIT0g
T1ZJU0lCTEUpCiAgICAgICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcChlbmNsb3NpbmdJ
bnRSZWN0KHZpZXdwb3J0KCkpKTsgLy8gRklYTUU6IEV2ZW50dWFsbHkgd2UnbGwgd2FudCBmbG9h
dC1wcmVjaXNpb24gY2xpcHBpbmcKICAgICAgICAgCiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT5jb25jYXRDVE0oQWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRlKHZpZXdwb3J0KCkueCgpLCB2
aWV3cG9ydCgpLnkoKSkpOwogICAgIH0KKwogICAgIGlmICghbG9jYWxUcmFuc2Zvcm0oKS5pc0lk
ZW50aXR5KCkpCiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5jb25jYXRDVE0obG9jYWxUcmFu
c2Zvcm0oKSk7CiB9CkBAIC0xNjgsOCArMzM4LDcgQEAKICAgICB9CiAgICAgCiAgICAgcGFpbnRJ
bmZvLmNvbnRleHQtPnNhdmUoKTsKLSAgICAKLSAgICBhcHBseUNvbnRlbnRUcmFuc2Zvcm1zKHBh
aW50SW5mbywgcGFyZW50WCwgcGFyZW50WSk7CisgICAgYXBwbHlDb250ZW50VHJhbnNmb3Jtcyhw
YWludEluZm8pOwogCiAjaWYgRU5BQkxFKFNWR19FWFBFUklNRU5UQUxfRkVBVFVSRVMpCiAgICAg
U1ZHUmVzb3VyY2VGaWx0ZXIqIGZpbHRlciA9IDA7CkBAIC0xOTAsNyArMzU5LDExIEBACiAgICAg
aWYgKCF2aWV3Qm94KCkuaXNFbXB0eSgpKQogICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y29u
Y2F0Q1RNKHZpZXdwb3J0VHJhbnNmb3JtKCkpOwogCi0gICAgUmVuZGVyQ29udGFpbmVyOjpwYWlu
dChwYWludEluZm8sIDAsIDApOworICAgIC8vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uIEp1c3Qg
cGFzcyBwYWludCB0aHJvdWdoIHRvIHRoZSBjaGlsZHJlbgorICAgIFBhaW50SW5mbyBjaGlsZElu
Zm8ocGFpbnRJbmZvKTsKKyAgICBjaGlsZEluZm8ucGFpbnRpbmdSb290ID0gcGFpbnRpbmdSb290
Rm9yQ2hpbGRyZW4ocGFpbnRJbmZvKTsKKyAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBm
aXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgICAg
ICBjaGlsZC0+cGFpbnQoY2hpbGRJbmZvLCAwLCAwKTsKIAogICAgIGlmIChwYWludEluZm8ucGhh
c2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKICNpZiBFTkFCTEUoU1ZHX0VYUEVSSU1FTlRB
TF9GRUFUVVJFUykKQEAgLTMwMyw3ICs0NzYsNyBAQAogCiBBZmZpbmVUcmFuc2Zvcm0gUmVuZGVy
U1ZHQ29udGFpbmVyOjphYnNvbHV0ZVRyYW5zZm9ybSgpIGNvbnN0CiB7Ci0gICAgQWZmaW5lVHJh
bnNmb3JtIGN0bSA9IFJlbmRlckNvbnRhaW5lcjo6YWJzb2x1dGVUcmFuc2Zvcm0oKTsKKyAgICBB
ZmZpbmVUcmFuc2Zvcm0gY3RtID0gUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRyYW5zZm9ybSgpOwog
ICAgIGN0bS50cmFuc2xhdGUodmlld3BvcnQoKS54KCksIHZpZXdwb3J0KCkueSgpKTsKICAgICBy
ZXR1cm4gdmlld3BvcnRUcmFuc2Zvcm0oKSAqIGN0bTsKIH0KQEAgLTQwNiwxMyArNTc5LDEwIEBA
CiAgICAgaWYgKCF2aWV3cG9ydCgpLmlzRW1wdHkoKQogICAgICAgICAmJiBzdHlsZSgpLT5vdmVy
Zmxvd1goKSA9PSBPSElEREVOCiAgICAgICAgICYmIHN0eWxlKCktPm92ZXJmbG93WSgpID09IE9I
SURERU4pIHsKLSAgICAgICAgaW50IHR4ID0gbV94IC0gX3R4OwotICAgICAgICBpbnQgdHkgPSBt
X3kgLSBfdHk7Ci0KICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byBkbyBhbnl0aGluZyBh
dCBhbGwuCiAgICAgICAgIEludFJlY3Qgb3ZlcmZsb3dCb3ggPSBvdmVyZmxvd1JlY3QoZmFsc2Up
OwotICAgICAgICBvdmVyZmxvd0JveC5tb3ZlKHR4LCB0eSk7Ci0gICAgICAgIEFmZmluZVRyYW5z
Zm9ybSBjdG0gPSBSZW5kZXJDb250YWluZXI6OmFic29sdXRlVHJhbnNmb3JtKCk7CisgICAgICAg
IG92ZXJmbG93Qm94Lm1vdmUoX3R4LCBfdHkpOworICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gY3Rt
ID0gUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRyYW5zZm9ybSgpOwogICAgICAgICBjdG0udHJhbnNs
YXRlKHZpZXdwb3J0KCkueCgpLCB2aWV3cG9ydCgpLnkoKSk7CiAgICAgICAgIGRvdWJsZSBsb2Nh
bFgsIGxvY2FsWTsKICAgICAgICAgY3RtLmludmVyc2UoKS5tYXAoX3ggLSBfdHgsIF95IC0gX3R5
LCAmbG9jYWxYLCAmbG9jYWxZKTsKQEAgLTQyMCwxMyArNTkwLDIzIEBACiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgaW50IHN4ID0gMDsKKyAgICBpbnQgc3kgPSAwOwor
CisgICAgLy8gUmVzcGVjdCBwYXJlbnQgdHJhbnNsYXRpb24gb2Zmc2V0IGZvciBub24tb3V0ZXJt
b3N0IDxzdmc+IGVsZW1lbnRzLgorICAgIC8vIE91dGVybW9zdCA8c3ZnPiBlbGVtZW50IGlzIGhh
bmRsZWQgYnkgUmVuZGVyU1ZHUm9vdC4KKyAgICBpZiAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKFNW
R05hbWVzOjpzdmdUYWcpKSB7CisgICAgICAgIHN4ID0gX3R4OworICAgICAgICBzeSA9IF90eTsK
KyAgICB9CisKICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hp
bGQ7IGNoaWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAgIGlmIChjaGls
ZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBfeCwgX3ksIF90eCwgX3R5LCBoaXRUZXN0
QWN0aW9uKSkgeworICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3Vs
dCwgX3ggLSBzeCwgX3kgLSBzeSwgX3R4LCBfdHksIGhpdFRlc3RBY3Rpb24pKSB7CiAgICAgICAg
ICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoX3ggLSBfdHgsIF95IC0g
X3R5KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KLSAgICAK
KwogICAgIC8vIFNwZWM6IE9ubHkgZ3JhcGhpY2FsIGVsZW1lbnRzIGNhbiBiZSB0YXJnZXRlZCBi
eSB0aGUgbW91c2UsIHBlcmlvZC4KICAgICAvLyAxNi40OiAiSWYgdGhlcmUgYXJlIG5vIGdyYXBo
aWNzIGVsZW1lbnRzIHdob3NlIHJlbGV2YW50IGdyYXBoaWNzIGNvbnRlbnQgaXMgdW5kZXIgdGhl
IHBvaW50ZXIgKGkuZS4sIHRoZXJlIGlzIG5vIHRhcmdldCBlbGVtZW50KSwgdGhlIGV2ZW50IGlz
IG5vdCBkaXNwYXRjaGVkLiIKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaAkocmV2aXNpb24gMjQyODgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDYgKzEyNSw3IEBACiAvLyBCYXNlIGNsYXNz
IGZvciBhbGwgcmVuZGVyaW5nIHRyZWUgb2JqZWN0cy4KIGNsYXNzIFJlbmRlck9iamVjdCA6IHB1
YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlckNvbnRh
aW5lcjsKKyAgICBmcmllbmQgY2xhc3MgUmVuZGVyU1ZHQ29udGFpbmVyOwogcHVibGljOgogICAg
IC8vIEFub255bW91cyBvYmplY3RzIHNob3VsZCBwYXNzIHRoZSBkb2N1bWVudCBhcyB0aGVpciBu
b2RlLCBhbmQgdGhleSB3aWxsIHRoZW4gYXV0b21hdGljYWxseSBiZQogICAgIC8vIG1hcmtlZCBh
cyBhbm9ueW1vdXMgaW4gdGhlIGNvbnN0cnVjdG9yLgpAQCAtMjgyLDYgKzI4Myw3IEBACiAgICAg
dmlydHVhbCBSZW5kZXJGbG93KiBjb250aW51YXRpb24oKSBjb25zdDsKIAogI2lmIEVOQUJMRShT
VkcpCisgICAgdmlydHVhbCBib29sIGlzU1ZHUm9vdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAgICAgdmlydHVhbCBib29sIGlzU1ZHQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJQYXRoKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdUZXh0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhdGguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhdGguY3BwCShyZXZpc2lvbiAyNDI4OCkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclBhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODksNyArMTg5
LDcgQEAKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyUGF0aDo6cGFpbnQoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSkKK3ZvaWQgUmVuZGVyUGF0aDo6cGFpbnQo
UGFpbnRJbmZvJiBwYWludEluZm8sIGludCwgaW50KQogewogICAgIGlmIChwYWludEluZm8uY29u
dGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpIHx8IHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBISURE
RU4gfHwgbV9wYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjIzLDcgKzIyMyw3
IEBACiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPnJlc3RvcmUoKTsKIH0KIAotdm9pZCBSZW5kZXJQ
YXRoOjphZGRGb2N1c1JpbmdSZWN0cyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwg
aW50IHR4LCBpbnQgdHkpCit2b2lkIFJlbmRlclBhdGg6OmFkZEZvY3VzUmluZ1JlY3RzKEdyYXBo
aWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBpbnQsIGludCkgCiB7CiAgICAgRmxvYXRSZWN0
IGJvdW5kaW5nQm94ID0gcmVsYXRpdmVCQm94KHRydWUpOwogICAgIGdyYXBoaWNzQ29udGV4dC0+
YWRkRm9jdXNSaW5nUmVjdChJbnRSZWN0KGJvdW5kaW5nQm94LngoKSwgYm91bmRpbmdCb3gueSgp
LCBib3VuZGluZ0JveC53aWR0aCgpLCBib3VuZGluZ0JveC5oZWlnaHQoKSkpOwpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAJKHJldmlzaW9uIDI0Mjg4KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDE2ICszNCwyOSBAQAogI2luY2x1ZGUgIlNWR1Jvb3RJbmxpbmVCb3guaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAorCiBSZW5kZXJTVkdJbmxpbmVUZXh0OjpSZW5kZXJT
VkdJbmxpbmVUZXh0KE5vZGUqIG4sIFN0cmluZ0ltcGwqIHN0cikgCiAgICAgOiBSZW5kZXJUZXh0
KG4sIHN0cikKIHsKIH0KIAotdm9pZCBSZW5kZXJTVkdJbmxpbmVUZXh0OjphYnNvbHV0ZVJlY3Rz
KFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5KQordm9pZCBSZW5kZXJTVkdJ
bmxpbmVUZXh0OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCwgaW50
KQogewotICAgIEZsb2F0UmVjdCBhYnNvbHV0ZVJlY3QgPSBhYnNvbHV0ZVRyYW5zZm9ybSgpLm1h
cFJlY3QoRmxvYXRSZWN0KHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpKTsKLSAgICByZWN0cy5h
cHBlbmQoZW5jbG9zaW5nSW50UmVjdChhYnNvbHV0ZVJlY3QpKTsKKyAgICBJbmxpbmVUZXh0Qm94
KiBmaXJzdEJveCA9IGZpcnN0VGV4dEJveCgpOworCisgICAgU1ZHUm9vdElubGluZUJveCogcm9v
dEJveCA9IGZpcnN0Qm94ID8gc3RhdGljX2Nhc3Q8U1ZHSW5saW5lVGV4dEJveCo+KGZpcnN0Qm94
KS0+c3ZnUm9vdElubGluZUJveCgpIDogMDsKKyAgICBSZW5kZXJPYmplY3QqIG9iamVjdCA9IHJv
b3RCb3ggPyByb290Qm94LT5vYmplY3QoKSA6IDA7CisKKyAgICBpZiAoIW9iamVjdCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaW50IHhSZWYgPSB4UG9zKCkgKyBvYmplY3QtPnhQb3MoKTsKKyAg
ICBpbnQgeVJlZiA9IHlQb3MoKSArIG9iamVjdC0+eVBvcygpOworCisgICAgZm9yIChJbmxpbmVU
ZXh0Qm94KiBjdXJyID0gZmlyc3RCb3g7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0VGV4dEJveCgp
KSB7CisgICAgICAgIEZsb2F0UmVjdCByZWN0KHhSZWYgLSBjdXJyLT54UG9zKCksIHlSZWYgLSBj
dXJyLT55UG9zKCksIGN1cnItPndpZHRoKCksIGN1cnItPmhlaWdodCgpKTsKKyAgICAgICAgcmVj
dHMuYXBwZW5kKGVuY2xvc2luZ0ludFJlY3QoYWJzb2x1dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHJl
Y3QpKSk7CisgICAgfQogfQogCiBJbnRSZWN0IFJlbmRlclNWR0lubGluZVRleHQ6OnNlbGVjdGlv
blJlY3QoKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgJKHJldmlz
aW9uIDI0Mjg4KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDYgQEAKIAogI2lmIEVOQUJMRShTVkcpCiAKLSNpbmNs
dWRlICJSZW5kZXJDb250YWluZXIuaCIKICNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCiAjaW5jbHVk
ZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oIgogCkBAIC0zMywxMSArMzIsMzQgQEAKIAogY2xh
c3MgU1ZHRWxlbWVudDsKIAotY2xhc3MgUmVuZGVyU1ZHQ29udGFpbmVyIDogcHVibGljIFJlbmRl
ckNvbnRhaW5lciB7CitjbGFzcyBSZW5kZXJTVkdDb250YWluZXIgOiBwdWJsaWMgUmVuZGVyT2Jq
ZWN0IHsKIHB1YmxpYzoKICAgICBSZW5kZXJTVkdDb250YWluZXIoU1ZHU3R5bGVkRWxlbWVudCop
OwogICAgIH5SZW5kZXJTVkdDb250YWluZXIoKTsKIAorICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0
KiBmaXJzdENoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdENoaWxkOyB9CisgICAgdmlydHVh
bCBSZW5kZXJPYmplY3QqIGxhc3RDaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdENoaWxkOyB9
CisKKyAgICB2aXJ0dWFsIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fd2lkdGg7IH0KKyAg
ICB2aXJ0dWFsIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hlaWdodDsgfQorCisgICAg
dmlydHVhbCBib29sIGNhbkhhdmVDaGlsZHJlbigpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBh
ZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxk
ID0gMCk7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCopOworCisg
ICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKKyAgICB2b2lkIGRlc3Ryb3lMZWZ0b3ZlckNoaWxk
cmVuKCk7CisKKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogcmVtb3ZlQ2hpbGROb2RlKFJlbmRl
ck9iamVjdCosIGJvb2wgZnVsbFJlbW92ZSA9IHRydWUpOworICAgIHZpcnR1YWwgdm9pZCBhcHBl
bmRDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBmdWxsQXBwZW5kID0gdHJ1ZSk7CisgICAg
dmlydHVhbCB2b2lkIGluc2VydENoaWxkTm9kZShSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJP
YmplY3QqIGJlZm9yZSwgYm9vbCBmdWxsSW5zZXJ0ID0gdHJ1ZSk7CisKKyAgICAvLyBEZXNpZ25l
ZCBmb3Igc3BlZWQuICBEb24ndCB3YXN0ZSB0aW1lIGRvaW5nIGEgYnVuY2ggb2Ygd29yayBsaWtl
IGxheWVyIHVwZGF0aW5nIGFuZCByZXBhaW50aW5nIHdoZW4gd2Uga25vdyB0aGF0IG91cgorICAg
IC8vIGNoYW5nZSBpbiBwYXJlbnRhZ2UgaXMgbm90IGdvaW5nIHRvIGFmZmVjdCBhbnl0aGluZy4K
KyAgICB2aXJ0dWFsIHZvaWQgbW92ZUNoaWxkTm9kZShSZW5kZXJPYmplY3QqIGNoaWxkKSB7IGFw
cGVuZENoaWxkTm9kZShjaGlsZC0+cGFyZW50KCktPnJlbW92ZUNoaWxkTm9kZShjaGlsZCwgZmFs
c2UpLCBmYWxzZSk7IH0KKworICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpIHsgc2V0
UHJlZldpZHRoc0RpcnR5KGZhbHNlKTsgfQorCiAgICAgLy8gU29tZSBjb250YWluZXJzIGRvIG5v
dCB3YW50IGl0J3MgY2hpbGRyZW4KICAgICAvLyB0byBiZSBkcmF3biwgYmVjYXVzZSB0aGV5IG1h
eSBiZSAncmVmZXJlbmNlZCcKICAgICAvLyBFeGFtcGxlOiA8bWFya2VyPiBjaGlsZHJlbiBpbiBT
VkcKQEAgLTg0LDExICsxMDYsMjEgQEAKICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBjYWxjVmll
d3BvcnQoKTsgCisgICAgaW50IGNhbGNSZXBsYWNlZFdpZHRoKCkgY29uc3Q7CisgICAgaW50IGNh
bGNSZXBsYWNlZEhlaWdodCgpIGNvbnN0OworCiAgICAgQWZmaW5lVHJhbnNmb3JtIGdldEFzcGVj
dFJhdGlvKGNvbnN0IEZsb2F0UmVjdCYgbG9naWNhbCwgY29uc3QgRmxvYXRSZWN0JiBwaHlzaWNh
bCkgY29uc3Q7Ci0gICAgdm9pZCBhcHBseUNvbnRlbnRUcmFuc2Zvcm1zKFBhaW50SW5mbyYsIGlu
dCYgcGFyZW50WCwgaW50JiBwYXJlbnRZKTsKKyAgICB2b2lkIGFwcGx5Q29udGVudFRyYW5zZm9y
bXMoUGFpbnRJbmZvJik7CiAKKyAgICBSZW5kZXJPYmplY3QqIG1fZmlyc3RDaGlsZDsKKyAgICBS
ZW5kZXJPYmplY3QqIG1fbGFzdENoaWxkOworCisgICAgaW50IG1fd2lkdGg7CisgICAgaW50IG1f
aGVpZ2h0OworCiAgICAgYm9vbCBtX2RyYXdzQ29udGVudHMgOiAxOwogICAgIGJvb2wgbV9zbGlj
ZSA6IDE7CisKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9tYXRyaXg7CiAgICAgCiAgICAgRmxvYXRS
ZWN0IG1fdmlld3BvcnQ7CkBAIC05Niw3ICsxMjgsNyBAQAogICAgIFNWR1ByZXNlcnZlQXNwZWN0
UmF0aW86OlNWR1ByZXNlcnZlQXNwZWN0UmF0aW9UeXBlIG1fYWxpZ247CiAgICAgSW50UmVjdCBt
X2Fic29sdXRlQm91bmRzOwogfTsKLQorICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNU
ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0
LmNwcAkocmV2aXNpb24gMjQyODgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNU
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAogI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgog
I2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0lubGlu
ZVRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdUZXh0LmgiCkBAIC0zMjUsNiArMzI2LDEwIEBA
CiAgICAgICAgIHdyaXRlKHRzLCBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdDb250YWluZXIm
PihvKSwgaW5kZW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBpZiAoby5pc1NWR1Jv
b3QoKSkgeworICAgICAgICB3cml0ZSh0cywgc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyU1ZHUm9v
dCY+KG8pLCBpbmRlbnQpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGlmIChvLmlzU1ZH
VGV4dCgpKSB7CiAgICAgICAgIGlmICghby5pc1RleHQoKSkKICAgICAgICAgICAgIHdyaXRlKHRz
LCBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJTVkdUZXh0Jj4obyksIGluZGVudCk7CkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5oCShyZXZpc2lvbiAyNDI4OCkKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1NWR1JlbmRlclRyZWVBc1RleHQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDMsMTQgKzQzLDE3IEBACiAgICAgY2xhc3MgTm9kZTsKICAgICBjbGFzcyBSZW5kZXJQYXRo
OwogICAgIGNsYXNzIFJlbmRlclNWR0NvbnRhaW5lcjsKLSAgICBjbGFzcyBSZW5kZXJTVkdUZXh0
OwogICAgIGNsYXNzIFJlbmRlclNWR0lubGluZVRleHQ7CisgICAgY2xhc3MgUmVuZGVyU1ZHUm9v
dDsKKyAgICBjbGFzcyBSZW5kZXJTVkdUZXh0OyAKIAogLy8gZnVuY3Rpb25zIHVzZWQgYnkgdGhl
IG1haW4gUmVuZGVyVHJlZUFzVGV4dCBjb2RlCiB2b2lkIHdyaXRlKFRleHRTdHJlYW0mLCBjb25z
dCBSZW5kZXJQYXRoJiwgaW50IGluZGVudCA9IDApOwogdm9pZCB3cml0ZShUZXh0U3RyZWFtJiwg
Y29uc3QgUmVuZGVyU1ZHQ29udGFpbmVyJiwgaW50IGluZGVudCA9IDApOwordm9pZCB3cml0ZShU
ZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyU1ZHSW5saW5lVGV4dCYsIGludCBpZGVudCA9IDApOwor
dm9pZCB3cml0ZShUZXh0U3RyZWFtJiwgY29uc3QgUmVuZGVyU1ZHUm9vdCYsIGludCBpbmRlbnQg
PSAwKTsKIHZvaWQgd3JpdGUoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR1RleHQmLCBpbnQg
aWRlbnQgPSAwKTsKLXZvaWQgd3JpdGUoVGV4dFN0cmVhbSYsIGNvbnN0IFJlbmRlclNWR0lubGlu
ZVRleHQmLCBpbnQgaWRlbnQgPSAwKTsKKwogdm9pZCB3cml0ZVJlbmRlclJlc291cmNlcyhUZXh0
U3RyZWFtJiwgTm9kZSogcGFyZW50KTsKIAogLy8gaGVscGVyIG9wZXJhdG9ycyBkZWZpbmVkIHVz
ZWQgaW4gdmFyaW91cyBjbGFzc2VzIHRvIGR1bXAgdGhlIHJlbmRlciB0cmVlLgpJbmRleDogV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwCShyZXZpc2lv
biAyNDI4OCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5LDEwICsxOSwxMCBAQAogICogQm9zdG9uLCBNQSAwMjEx
MS0xMzA3LCBVU0EuCiAgKgogICovCisKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2lmIEVOQUJM
RShTVkcpCi0KICNpbmNsdWRlICJSZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaCIKIAogI2luY2x1
ZGUgIlJlbmRlclBhdGguaCIKQEAgLTMxLDcgKzMxLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpSZW5kZXJTVkdIaWRkZW5Db250YWluZXIoU1ZH
U3R5bGVkRWxlbWVudCogZWxlbWVudCkKLSAgICA6IFJlbmRlckNvbnRhaW5lcihlbGVtZW50KQor
ICAgIDogUmVuZGVyU1ZHQ29udGFpbmVyKGVsZW1lbnQpCiB7CiB9CiAKQEAgLTczLDcgKzczLDcg
QEAKICAgICBzZXROZWVkc0xheW91dChmYWxzZSk7ICAgIAogfQogCi12b2lkIFJlbmRlclNWR0hp
ZGRlbkNvbnRhaW5lcjo6cGFpbnQoUGFpbnRJbmZvJiwgaW50IHBhcmVudFgsIGludCBwYXJlbnRZ
KQordm9pZCBSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6OnBhaW50KFBhaW50SW5mbyYsIGludCwg
aW50KQogewogICAgIC8vIFRoaXMgc3VidHJlZSBkb2VzIG5vdCBwYWludC4KIH0KQEAgLTgzLDcg
KzgzLDcgQEAKICAgICByZXR1cm4gSW50UmVjdCgpOwogfQogCi12b2lkIFJlbmRlclNWR0hpZGRl
bkNvbnRhaW5lcjo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgs
IGludCB0eSkKK3ZvaWQgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjphYnNvbHV0ZVJlY3RzKFZl
Y3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCwgaW50KQogewogICAgIC8vIFRoaXMgc3VidHJlZSBk
b2VzIG5vdCB0YWtlIHVwIHNwYWNlIG9yIHBhaW50CiB9CkBAIC0xMDMsNiArMTAzLDExIEBACiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCitGbG9hdFJlY3QgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVy
OjpyZWxhdGl2ZUJCb3goYm9vbCBpbmNsdWRlU3Ryb2tlKSBjb25zdAoreworCXJldHVybiBGbG9h
dFJlY3QoKTsKIH0KIAorfQorCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oCShyZXZpc2lvbiAyNDI4OCkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNSw3ICsyNSw3IEBACiAKICNpZiBFTkFCTEUoU1ZHKQogCi0jaW5jbHVkZSAi
UmVuZGVyQ29udGFpbmVyLmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAKICAgICAvLyBU
aGlzIGNsYXNzIGlzIGZvciBjb250YWluZXJzIHdoaWNoIGFyZSBuZXZlciBkcmF3biwgYnV0IGRv
IG5lZWQgdG8gc3VwcG9ydCBzdHlsZQogICAgIC8vIDxkZWZzPiwgPGxpbmVhckdyYWRpZW50Piwg
PHJhZGlhbEdyYWRpZW50PiBhcmUgYWxsIGdvb2QgZXhhbXBsZXMKLSAgICBjbGFzcyBSZW5kZXJT
VkdIaWRkZW5Db250YWluZXIgOiBwdWJsaWMgUmVuZGVyQ29udGFpbmVyIHsKKyAgICBjbGFzcyBS
ZW5kZXJTVkdIaWRkZW5Db250YWluZXIgOiBwdWJsaWMgUmVuZGVyU1ZHQ29udGFpbmVyIHsKICAg
ICBwdWJsaWM6CiAgICAgICAgIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcihTVkdTdHlsZWRFbGVt
ZW50Kik7CiAgICAgICAgIHZpcnR1YWwgflJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcigpOwpAQCAt
NTQsMTIgKzU0LDExIEBACiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9y
bSBhYnNvbHV0ZVRyYW5zZm9ybSgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIEFmZmluZVRyYW5z
Zm9ybSBsb2NhbFRyYW5zZm9ybSgpIGNvbnN0OwotICAgICAgICAKKworICAgICAgICB2aXJ0dWFs
IEZsb2F0UmVjdCByZWxhdGl2ZUJCb3goYm9vbCBpbmNsdWRlU3Ryb2tlID0gdHJ1ZSkgY29uc3Q7
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYs
IEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0
aW9uKTsKLSAgICAgICAgCiAgICAgfTsKIH0KIAotCiAjZW5kaWYgLy8gRU5BQkxFKFNWRykKICNl
bmRpZiAvLyBSZW5kZXJTVkdIaWRkZW5Db250YWluZXJfaApJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNWR0ltYWdlLmNwcAkocmV2aXNpb24gMjQyODgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCwyMCArMTI4LDIxIEBACiB7
CiAgICAgaWYgKHBhaW50SW5mby5jb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkgfHwgc3R5bGUo
KS0+dmlzaWJpbGl0eSgpID09IEhJRERFTikKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAg
cGFpbnRJbmZvLmNvbnRleHQtPnNhdmUoKTsKICAgICBwYWludEluZm8uY29udGV4dC0+Y29uY2F0
Q1RNKGxvY2FsVHJhbnNmb3JtKCkpOwotICAgIHBhaW50SW5mby5jb250ZXh0LT5jb25jYXRDVE0o
dHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCkpOwotICAgIAorCiAgICAgaWYgKHBhaW50SW5mby5w
aGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgewogI2lmIEVOQUJMRShTVkdfRVhQRVJJTUVO
VEFMX0ZFQVRVUkVTKQogICAgICAgICBTVkdSZXNvdXJjZUZpbHRlciogZmlsdGVyID0gMDsKICNl
bHNlCiAgICAgICAgIHZvaWQqIGZpbHRlciA9IDA7CiAjZW5kaWYKLSAgICAgICAgRmxvYXRSZWN0
IGJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KDAsIDAsIG1faW1hZ2VXaWR0aCwgbV9pbWFnZUhlaWdo
dCk7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSBpbWFnZUN0bSh0cmFuc2xhdGlvbkZvckF0dHJp
YnV0ZXMoKSk7CisKKyAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KGlt
YWdlQ3RtLmUoKSwgaW1hZ2VDdG0uZigpLCBtX2ltYWdlV2lkdGgsIG1faW1hZ2VIZWlnaHQpOwog
ICAgICAgICBwcmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KHRoaXMsIHBhaW50SW5mbywgYm91bmRp
bmdCb3gsIGZpbHRlcik7Ci0KKyAKICAgICAgICAgZmxvYXQgb3BhY2l0eSA9IHN0eWxlKCktPm9w
YWNpdHkoKTsKICAgICAgICAgaWYgKG9wYWNpdHkgPCAxLjBmKSB7CiAgICAgICAgICAgICBwYWlu
dEluZm8uY29udGV4dC0+Y2xpcChlbmNsb3NpbmdJbnRSZWN0KGJvdW5kaW5nQm94KSk7CkBAIC0x
NTksNiArMTYwLDcgQEAKICAgICAgICAgaWYgKGltYWdlRWx0LT5wcmVzZXJ2ZUFzcGVjdFJhdGlv
KCktPmFsaWduKCkgIT0gU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzo6U1ZHX1BSRVNFUlZFQVNQRUNU
UkFUSU9fTk9ORSkKICAgICAgICAgICAgIGFkanVzdFJlY3RzRm9yQXNwZWN0UmF0aW8oZGVzdFJl
Y3QsIHNyY1JlY3QsIGltYWdlRWx0LT5wcmVzZXJ2ZUFzcGVjdFJhdGlvKCkpOwogCisgICAgICAg
IHBhaW50SW5mby5jb250ZXh0LT5jb25jYXRDVE0oaW1hZ2VDdG0pOwogICAgICAgICBwYWludElu
Zm8uY29udGV4dC0+ZHJhd0ltYWdlKGltYWdlKCksIGRlc3RSZWN0LCBzcmNSZWN0KTsKIAogI2lm
IEVOQUJMRShTVkdfRVhQRVJJTUVOVEFMX0ZFQVRVUkVTKQpJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHUm9vdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR1Jvb3QuaAkocmV2aXNpb24gMjQyODgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdSb290LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDYgQEAKICNkZWZpbmUgUmVuZGVy
U1ZHUm9vdF9oCiAKICNpZiBFTkFCTEUoU1ZHKQotCiAjaW5jbHVkZSAiUmVuZGVyQ29udGFpbmVy
LmgiCiAjaW5jbHVkZSAiUmVuZGVyUGF0aC5oIgogI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0
UmF0aW8uaCIKQEAgLTM4LDEwICszNyw5IEBACiAgICAgUmVuZGVyU1ZHUm9vdChTVkdTdHlsZWRF
bGVtZW50Kik7CiAgICAgflJlbmRlclNWR1Jvb3QoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBpc1NW
R0NvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHQ29udGFpbmVyIjsgfQot
ICAgICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpOworICAgIHZpcnR1YWwg
Ym9vbCBpc1NWR1Jvb3QoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBjb25z
dCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRlclNWR1Jvb3QiOyB9CisK
ICAgICB2aXJ0dWFsIHNob3J0IGxpbmVIZWlnaHQoYm9vbCBiLCBib29sIGlzUm9vdExpbmVCb3gg
PSBmYWxzZSkgY29uc3Q7CiAgICAgdmlydHVhbCBzaG9ydCBiYXNlbGluZVBvc2l0aW9uKGJvb2wg
YiwgYm9vbCBpc1Jvb3RMaW5lQm94ID0gZmFsc2UpIGNvbnN0OwogICAgIApAQCAtNzksNyArNzcs
NyBAQAogcHJpdmF0ZToKICAgICB2b2lkIGNhbGNWaWV3cG9ydCgpOyAKICAgICBBZmZpbmVUcmFu
c2Zvcm0gZ2V0QXNwZWN0UmF0aW8oY29uc3QgRmxvYXRSZWN0JiBsb2dpY2FsLCBjb25zdCBGbG9h
dFJlY3QmIHBoeXNpY2FsKSBjb25zdDsKLSAgICB2b2lkIGFwcGx5Q29udGVudFRyYW5zZm9ybXMo
UGFpbnRJbmZvJiwgaW50JiBwYXJlbnRYLCBpbnQmIHBhcmVudFkpOworICAgIHZvaWQgYXBwbHlD
b250ZW50VHJhbnNmb3JtcyhQYWludEluZm8mLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpOwog
CiAgICAgYm9vbCBtX3NsaWNlIDogMTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9tYXRyaXg7Cklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNpb24g
MjQyODgpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5l
ci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZVRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJT
VkdUZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUgIlJlbmRlclRy
ZWVBc1RleHQuaCIKICNpbmNsdWRlICJTVkdDaGFyYWN0ZXJMYXlvdXRJbmZvLmgiCiAjaW5jbHVk
ZSAiU1ZHSW5saW5lVGV4dEJveC5oIgpAQCAtMzExLDYgKzMxMiwxNSBAQAogICAgIHJldHVybiB0
czsKIH0KIAorc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNv
bnN0IFJlbmRlclNWR1Jvb3QmIHJvb3QpCit7CisgICAgdHMgPDwgIiAiIDw8IHJvb3QuYWJzb2x1
dGVUcmFuc2Zvcm0oKS5tYXBSZWN0KHJvb3QucmVsYXRpdmVCQm94KCkpOworCisgICAgd3JpdGVT
dHlsZSh0cywgcm9vdCk7CisKKyAgICByZXR1cm4gdHM7Cit9CisKIHN0YXRpYyBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdUZXh0JiB0ZXh0KQog
ewogICAgIFNWR1Jvb3RJbmxpbmVCb3gqIGJveCA9IHN0YXRpY19jYXN0PFNWR1Jvb3RJbmxpbmVC
b3gqPih0ZXh0LmZpcnN0Um9vdEJveCgpKTsKQEAgLTQ2MCw2ICs0NzAsMjMgQEAKICAgICAgICAg
d3JpdGUodHMsICpjaGlsZCwgaW5kZW50ICsgMSk7CiB9CiAKK3ZvaWQgd3JpdGUoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IFJlbmRlclNWR1Jvb3QmIHJvb3QsIGludCBpbmRlbnQpCit7CisgICAgd3Jp
dGVJbmRlbnQodHMsIGluZGVudCk7CisgICAgdHMgPDwgcm9vdC5yZW5kZXJOYW1lKCk7CisKKyAg
ICBpZiAocm9vdC5lbGVtZW50KCkpIHsKKyAgICAgICAgU3RyaW5nIHRhZ05hbWUgPSBnZXRUYWdO
YW1lKHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPihyb290LmVsZW1lbnQoKSkpOworICAg
ICAgICBpZiAoIXRhZ05hbWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgdHMgPDwgIiB7IiA8PCB0
YWdOYW1lIDw8ICJ9IjsKKyAgICB9CisKKyAgICB0cyA8PCByb290IDw8IGVuZGw7CisKKyAgICBm
b3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSByb290LmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgIHdyaXRlKHRzLCAqY2hpbGQsIGluZGVu
dCArIDEpOworfQorCiB2b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRzLCBjb25zdCBSZW5kZXJTVkdU
ZXh0JiB0ZXh0LCBpbnQgaW5kZW50KQogewogICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwpJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbmxpbmUuY3BwCShyZXZpc2lvbiAyNDI4OCkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0lubGluZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI1LDEzICsyNSwxMyBAQAogCiAjaWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJSZW5kZXJT
VkdJbmxpbmUuaCIKKwogI2luY2x1ZGUgIlNWR0lubGluZUZsb3dCb3guaCIKLSNpbmNsdWRlICJT
VkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCi1SZW5kZXJTVkdJbmxpbmU6OlJlbmRlclNWR0lu
bGluZShOb2RlKiBuKSA6IFJlbmRlcklubGluZShuKQorUmVuZGVyU1ZHSW5saW5lOjpSZW5kZXJT
VkdJbmxpbmUoTm9kZSogbikKKyAgICA6IFJlbmRlcklubGluZShuKQogewogfQogCkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcAkocmV2aXNpb24gMjQyODgpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTIgKzYw
LDYgQEAKICAgICBtX21hdHJpeCA9IG1hdHJpeDsKIH0KIAotYm9vbCBSZW5kZXJTVkdSb290Ojpy
ZXF1aXJlc0xheWVyKCkKLXsKLSAgICAvLyBPbmx5IGFsbG93IGFuIDxzdmc+IGVsZW1lbnQgdG8g
Z2VuZXJhdGUgYSBsYXllciB3aGVuIGl0J3MgcG9zaXRpb25lZCBpbiBhIG5vbi1TVkcgY29udGV4
dAotICAgIHJldHVybiBmYWxzZTsKLX0KLQogc2hvcnQgUmVuZGVyU1ZHUm9vdDo6bGluZUhlaWdo
dChib29sIGIsIGJvb2wgaXNSb290TGluZUJveCkgY29uc3QKIHsKICAgICByZXR1cm4gaGVpZ2h0
KCkgKyBtYXJnaW5Ub3AoKSArIG1hcmdpbkJvdHRvbSgpOwpAQCAtMTE5LDcgKzExMyw3IEBACiAg
ICAgc2V0TmVlZHNMYXlvdXQoZmFsc2UpOwogfQogCi12b2lkIFJlbmRlclNWR1Jvb3Q6OmFwcGx5
Q29udGVudFRyYW5zZm9ybXMoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCYgcGFyZW50WCwgaW50
JiBwYXJlbnRZKQordm9pZCBSZW5kZXJTVkdSb290OjphcHBseUNvbnRlbnRUcmFuc2Zvcm1zKFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpCiB7CiAgICAgLy8g
VHJhbnNsYXRlIGZyb20gcGFyZW50IG9mZnNldHMgKGh0bWwgcmVuZGVyZXJzKSB0byBhIHJlbGF0
aXZlIHRyYW5zZm9ybSAoc3ZnIHJlbmRlcmVycykKICAgICBJbnRQb2ludCBvcmlnaW47CkBAIC0x
MjcsMjIgKzEyMSwyNSBAQAogICAgIG9yaWdpbi5tb3ZlKG1feCwgbV95KTsKICAgICBvcmlnaW4u
bW92ZShib3JkZXJMZWZ0KCksIGJvcmRlclRvcCgpKTsKICAgICBvcmlnaW4ubW92ZShwYWRkaW5n
TGVmdCgpLCBwYWRkaW5nVG9wKCkpOworCiAgICAgaWYgKG9yaWdpbi54KCkgfHwgb3JpZ2luLnko
KSkgewogICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y29uY2F0Q1RNKEFmZmluZVRyYW5zZm9y
bSgpLnRyYW5zbGF0ZShvcmlnaW4ueCgpLCBvcmlnaW4ueSgpKSk7CiAgICAgICAgIHBhaW50SW5m
by5yZWN0Lm1vdmUoLW9yaWdpbi54KCksIC1vcmlnaW4ueSgpKTsKICAgICB9Ci0gICAgcGFyZW50
WCA9IHBhcmVudFkgPSAwOworCiAgICAgU1ZHU1ZHRWxlbWVudCogc3ZnID0gc3RhdGljX2Nhc3Q8
U1ZHU1ZHRWxlbWVudCo+KGVsZW1lbnQoKSk7CiAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNvbmNh
dENUTShBZmZpbmVUcmFuc2Zvcm0oKS5zY2FsZShzdmctPmN1cnJlbnRTY2FsZSgpKSk7Ci0gICAg
CisKICAgICBpZiAoIXZpZXdwb3J0KCkuaXNFbXB0eSgpKSB7CiAgICAgICAgIGlmIChzdHlsZSgp
LT5vdmVyZmxvd1goKSAhPSBPVklTSUJMRSkKICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0
LT5jbGlwKGVuY2xvc2luZ0ludFJlY3Qodmlld3BvcnQoKSkpOyAvLyBGSVhNRTogRXZlbnR1YWxs
eSB3ZSdsbCB3YW50IGZsb2F0LXByZWNpc2lvbiBjbGlwcGluZwogICAgICAgICAKICAgICAgICAg
cGFpbnRJbmZvLmNvbnRleHQtPmNvbmNhdENUTShBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUo
dmlld3BvcnQoKS54KCksIHZpZXdwb3J0KCkueSgpKSk7CiAgICAgfQorCiAgICAgaWYgKCFsb2Nh
bFRyYW5zZm9ybSgpLmlzSWRlbnRpdHkoKSkKICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNv
bmNhdENUTShsb2NhbFRyYW5zZm9ybSgpKTsKKwogICAgIHBhaW50SW5mby5jb250ZXh0LT5jb25j
YXRDVE0oQWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRlKHN2Zy0+Y3VycmVudFRyYW5zbGF0ZSgp
LngoKSwgc3ZnLT5jdXJyZW50VHJhbnNsYXRlKCkueSgpKSk7CiB9CiAKQEAgLTE1MSw2ICsxNDgs
MTEgQEAKICAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwogCisgICAgLy8gQmUgc3VyZSB0aGF0IG91ciB2aWV3cG9ydCBzaXplLCBk
aWRuJ3QgZGVwZW5kIG9uIG91cnNlbHZlcyEKKyAgICAvLyBJZiB0aGF0IGlzIHRydWUsIHdlIGhh
dmUgYSBudWxsIHZpZXdwb3J0KCkgaGVyZSwgYW5kIG5lZWQgdG8gcmVjYWxjdWxhdGUuCisgICAg
aWYgKHZpZXdwb3J0KCkuaXNFbXB0eSgpKQorICAgICAgICBjYWxjVmlld3BvcnQoKTsKKwogICAg
IC8vIEEgdmFsdWUgb2YgemVybyBkaXNhYmxlcyByZW5kZXJpbmcgb2YgdGhlIGVsZW1lbnQuIAog
ICAgIGlmICh2aWV3cG9ydCgpLndpZHRoKCkgPD0gMC4gfHwgdmlld3BvcnQoKS5oZWlnaHQoKSA8
PSAwLikKICAgICAgICAgcmV0dXJuOwpAQCAtMTY5LDExICsxNzEsMTIgQEAKICNlbmRpZgogICAg
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICBwYWludEluZm8uY29udGV4dC0+c2F2
ZSgpOwotICAgIAotICAgIGFwcGx5Q29udGVudFRyYW5zZm9ybXMocGFpbnRJbmZvLCBwYXJlbnRY
LCBwYXJlbnRZKTsKIAorICAgIFJlbmRlck9iamVjdDo6UGFpbnRJbmZvIGNoaWxkUGFpbnRJbmZv
KHBhaW50SW5mbyk7CisgICAgY2hpbGRQYWludEluZm8uY29udGV4dC0+c2F2ZSgpOworIAorICAg
IGFwcGx5Q29udGVudFRyYW5zZm9ybXMoY2hpbGRQYWludEluZm8sIHBhcmVudFgsIHBhcmVudFkp
OworCiAjaWYgRU5BQkxFKFNWR19FWFBFUklNRU5UQUxfRkVBVFVSRVMpCiAgICAgU1ZHUmVzb3Vy
Y2VGaWx0ZXIqIGZpbHRlciA9IDA7CiAjZWxzZQpAQCAtMTgxLDM0ICsxODQsMzQgQEAKICNlbmRp
ZgogICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJlbGF0aXZlQkJveCh0cnVlKTsKICAgICBm
bG9hdCBvcGFjaXR5ID0gc3R5bGUoKS0+b3BhY2l0eSgpOwotICAgIGlmIChwYWludEluZm8ucGhh
c2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKLSAgICAgICAgcHJlcGFyZVRvUmVuZGVyU1ZH
Q29udGVudCh0aGlzLCBwYWludEluZm8sIGJvdW5kaW5nQm94LCBmaWx0ZXIpOworICAgIGlmIChj
aGlsZFBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgeworICAgICAgICBw
cmVwYXJlVG9SZW5kZXJTVkdDb250ZW50KHRoaXMsIGNoaWxkUGFpbnRJbmZvLCBib3VuZGluZ0Jv
eCwgZmlsdGVyKTsKICAgICAgICAgCiAgICAgICAgIGlmIChvcGFjaXR5IDwgMS4wZikgewotICAg
ICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNsaXAoZW5jbG9zaW5nSW50UmVjdChib3VuZGlu
Z0JveCkpOwotICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmJlZ2luVHJhbnNwYXJlbmN5
TGF5ZXIob3BhY2l0eSk7CisgICAgICAgICAgICBjaGlsZFBhaW50SW5mby5jb250ZXh0LT5jbGlw
KGVuY2xvc2luZ0ludFJlY3QoYm91bmRpbmdCb3gpKTsKKyAgICAgICAgICAgIGNoaWxkUGFpbnRJ
bmZvLmNvbnRleHQtPmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIob3BhY2l0eSk7CiAgICAgICAgIH0K
ICAgICB9CiAKICAgICBpZiAoIXZpZXdCb3goKS5pc0VtcHR5KCkpCi0gICAgICAgIHBhaW50SW5m
by5jb250ZXh0LT5jb25jYXRDVE0odmlld3BvcnRUcmFuc2Zvcm0oKSk7CisgICAgICAgIGNoaWxk
UGFpbnRJbmZvLmNvbnRleHQtPmNvbmNhdENUTSh2aWV3cG9ydFRyYW5zZm9ybSgpKTsKIAotICAg
IFJlbmRlckNvbnRhaW5lcjo6cGFpbnQocGFpbnRJbmZvLCAwLCAwKTsKKyAgICBSZW5kZXJDb250
YWluZXI6OnBhaW50KGNoaWxkUGFpbnRJbmZvLCAwLCAwKTsKIAotICAgIGlmIChwYWludEluZm8u
cGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKKyAgICBpZiAoY2hpbGRQYWludEluZm8u
cGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKICNpZiBFTkFCTEUoU1ZHX0VYUEVSSU1F
TlRBTF9GRUFUVVJFUykKICAgICAgICAgaWYgKGZpbHRlcikKLSAgICAgICAgICAgIGZpbHRlci0+
YXBwbHlGaWx0ZXIocGFpbnRJbmZvLmNvbnRleHQsIGJvdW5kaW5nQm94KTsKKyAgICAgICAgICAg
IGZpbHRlci0+YXBwbHlGaWx0ZXIoY2hpbGRQYWludEluZm8uY29udGV4dCwgYm91bmRpbmdCb3gp
OwogI2VuZGlmCiAKICAgICAgICAgaWYgKG9wYWNpdHkgPCAxLjBmKQotICAgICAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CisgICAgICAgICAgICBjaGls
ZFBhaW50SW5mby5jb250ZXh0LT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwogICAgIH0KIAotICAg
IHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CisgICAgY2hpbGRQYWludEluZm8uY29udGV4
dC0+cmVzdG9yZSgpOwogICAgIAotICAgIGlmICgocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhh
c2VPdXRsaW5lIHx8IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlU2VsZk91dGxpbmUpICYm
IHN0eWxlKCktPm91dGxpbmVXaWR0aCgpICYmIHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJ
QkxFKQotICAgICAgICBwYWludE91dGxpbmUocGFpbnRJbmZvLmNvbnRleHQsIG1fYWJzb2x1dGVC
b3VuZHMueCgpLCBtX2Fic29sdXRlQm91bmRzLnkoKSwgbV9hYnNvbHV0ZUJvdW5kcy53aWR0aCgp
LCBtX2Fic29sdXRlQm91bmRzLmhlaWdodCgpLCBzdHlsZSgpKTsKKyAgICBpZiAoKGNoaWxkUGFp
bnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VPdXRsaW5lIHx8IGNoaWxkUGFpbnRJbmZvLnBoYXNl
ID09IFBhaW50UGhhc2VTZWxmT3V0bGluZSkgJiYgc3R5bGUoKS0+b3V0bGluZVdpZHRoKCkgJiYg
c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpCisgICAgICAgIHBhaW50T3V0bGluZShj
aGlsZFBhaW50SW5mby5jb250ZXh0LCBtX2Fic29sdXRlQm91bmRzLngoKSwgbV9hYnNvbHV0ZUJv
dW5kcy55KCksIG1fYWJzb2x1dGVCb3VuZHMud2lkdGgoKSwgbV9hYnNvbHV0ZUJvdW5kcy5oZWln
aHQoKSwgc3R5bGUoKSk7CiB9CiAKIEZsb2F0UmVjdCBSZW5kZXJTVkdSb290Ojp2aWV3cG9ydCgp
IGNvbnN0CkBAIC0yOTAsNyArMjkzLDcgQEAKICAgICByZXR1cm4gcmVwYWludFJlY3Q7CiB9CiAK
LXZvaWQgUmVuZGVyU1ZHUm9vdDo6YWRkRm9jdXNSaW5nUmVjdHMoR3JhcGhpY3NDb250ZXh0KiBn
cmFwaGljc0NvbnRleHQsIGludCB0eCwgaW50IHR5KQordm9pZCBSZW5kZXJTVkdSb290OjphZGRG
b2N1c1JpbmdSZWN0cyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgaW50LCBpbnQp
CiB7CiAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRGb2N1c1JpbmdSZWN0KG1fYWJzb2x1dGVCb3Vu
ZHMpOwogfQpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9D
aGFuZ2VMb2cJKHJldmlzaW9uIDI0Mjg5KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSw5MyBAQAorMjAwNy0wNy0xNSAgTmlrb2xhcyBaaW1tZXJtYW5uICA8
emltbWVybWFubkBrZGUub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEZpeGVzOiBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01OTQwICg8c3ZnPiBpbnNpZGUgPGJvZHk+IGluY29ycmVjdGx5IGV4dGVuZHMgb3ZlciB0b3Av
Ym90dG9tIGJvcmRlcnMpCisgICAgICAgIEZpeGVzOiBodHRwOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDE0NSAoUmVuZGVyU1ZHQ29udGFpbmVyIHNob3VsZCBub3QgaW5oZXJp
dCBmcm9tIFJlbmRlckNvbnRhaW5lcikKKworICAgICAgICBNYWtlIFJlbmRlclNWR0NvbnRhaW5l
ciBpbmhlcml0IGZyb20gUmVuZGVyT2JqZWN0IGRpcmVjdGx5LCBpbnN0ZWFkIG9mIFJlbmRlckNv
bnRhaW5lci4KKyAgICAgICAgSXRkb2VzIGEgbG90IG9mIHRoaW5ncyB0aGF0IHdlIGRvbid0IG5l
ZWQgZm9yIFNWRywgYW5kIGJ5IHJlbW92aW5nIHRoaXMgaW5oZXJpdGFuY2UKKyAgICAgICAgd2Ug
Y2FuIGZpbmFsbHkgZml4IHRoZSBkaWZmZXJlbmNlcyBhYm91dCBTVkcgb2JqZWN0IHBvc2l0aW9u
aW5nLCBhcyB3ZSBkb24ndCBuZWVkCisgICAgICAgIHBhcmVudCB0cmFuc2xhdGlvbiAodHgvdHkp
LiBGaXhlcyBTVkcgdGV4dCByZW5kZXJpbmcgd2l0aGluIFhIVE1MLgorCisgICAgICAgIEZpeCBy
ZXF1aXJlTGF5ZXIoKSBmdW5jdGlvbiBvbiBSZW5kZXJTVkdSb290LCBhcyBpdCBjYW4gYWN0dWFs
bHkgYmUgYSBsYXllciBub3cuCisgICAgICAgIFRoaXMgY2hhbmdlIGlzIGJhc2VkIG9uIFJvYidz
IHBhdGNoIGF0IDU5NDAgLSBmaXhpbmcgei1vcmRlciBpbmRleGluZy4KKworICAgICAgICBDaGFu
Z2UgUmVuZGVyU1ZHUm9vdCByZW5kZXJOYW1lKCkgYW5kIHVwZGF0ZSBhbGwgbGF5b3V0IHRlc3Rz
LCBiZWNhdXNlIG9mIHRoaXMgY2hhbmdlLgorICAgICAgICAKKyAgICAgICAgRml4IGFic29sdXRl
UmVjdHMoKSBmdW5jdGlvbiBmb3IgUmVuZGVyU1ZHSW5saW5lVGV4dCAmIFJlbmRlclNWR1RTcGFu
LgorICAgICAgICBDaGVja2VkIGV4dGVuc2l2ZWx5IHVzaW5nIFdlYkluc3BlY3RvciwgdG8gYXNz
dXJlIGFsbCByZWN0cyBhcmUgY29ycmVjdGx5IGRpc3BsYXllZC4KKworICAgICAgICBUZXN0Y2Fz
ZXMgZml4ZWQ6IGp1bmstZGF0YS5zdmcsIG1pc3NpbmcteGxpbmsuc3ZnIGhpeGllLzAxMy54bWwg
KGFsbCByZWdyZXNzaW9ucyEpCisgICAgICAgIChqdW5rLWRhdGEuc3ZnICYgbWlzc2luZy14bGlu
ay5zdmcgcHJldmlvdXNseSByZWxpZWQgb24gU1ZHIHRleHQgcGFpbnRpbmcgb3V0IG9mIDxzdmc+
IG92ZXJmbG93IHJlY3QuCisgICAgICAgICBGaXggdGhlc2UgdGVzdGNhc2VzLCBhcyB3aXRoaW4g
dGhpcyBuZXcgUmVuZGVyU1ZHQ29udGFpbmVyIGNvbmNlcHQsIHRoYXQgYnVnIGlzIG5vdyBmaXhl
ZCwgYW5kIGJyZWFrcyB0aGVtKQorCisgICAgICAgIFRlc3RjYXNlcyBhZGRlZDogY3VzdG9tL2Fi
c29sdXRlLXNpemVkLXN2Zy1pbi14aHRtbC54aHRtbCwgY3VzdG9tL2lubGluZS1zdmctaW4teGh0
bWwueG1sIChNb3ppbGxhIFhUZWNoIGRlbW8pCisKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHU1ZH
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmNvbnRhaW5pbmdCbG9jayk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0
Ojppc1NWR1Jvb3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJQYXRoLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclBhdGg6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clBhdGg6OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZH
Q29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6UmVu
ZGVyU1ZHQ29udGFpbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6
Y2FuSGF2ZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6
YWRkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjpyZW1vdmVD
aGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6OmRlc3Ryb3kpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjpkZXN0cm95TGVmdG92ZXJDaGls
ZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6OnJlbW92ZUNoaWxk
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6OmFwcGVuZENoaWxk
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6Omluc2VydENoaWxk
Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6OmxheW91dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6OmNhbGNSZXBsYWNlZFdpZHRoKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6Y2FsY1JlcGxhY2VkSGVpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6YXBwbHlDb250ZW50VHJh
bnNmb3Jtcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6OnBhaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6YWJzb2x1dGVUcmFuc2Zvcm0p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjpub2RlQXRQb2ludCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5oOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjpmaXJzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR0NvbnRhaW5lcjo6bGFzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R0NvbnRhaW5lcjo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVy
OjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjptb3ZlQ2hp
bGROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6Y2FsY1ByZWZX
aWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpSZW5kZXJTVkdI
aWRkZW5Db250YWluZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSGlkZGVuQ29udGFp
bmVyOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6
OmFic29sdXRlUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSGlkZGVuQ29udGFp
bmVyOjpyZWxhdGl2ZUJCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdIaWRkZW5D
b250YWluZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHSW1hZ2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW1hZ2U6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyU1ZHSW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0lubGlu
ZTo6UmVuZGVyU1ZHSW5saW5lKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5l
VGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbmxpbmVUZXh0OjphYnNvbHV0
ZVJlY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUm9vdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdSb290OjphcHBseUNvbnRlbnRUcmFuc2Zvcm1zKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1Jvb3Q6OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyU1ZHUm9vdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6aXNTVkdSb290
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OnJlbmRlck5hbWUpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJTVkdUU3Bhbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdUU3Bhbjo6UmVuZGVyU1ZHVFNwYW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
VFNwYW46OmFic29sdXRlUmVjdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdUZXh0
UGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0UGF0aDo6YWJzb2x1dGVS
ZWN0cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6d3JpdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNU
ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAoV2ViQ29y
ZTo6d3JpdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9TVkdSZW5kZXJUcmVlQXNUZXh0Lmg6CisK
IDIwMDctMDctMTEgIE5pa29sYXMgWmltbWVybWFubiAgPHppbW1lcm1hbm5Aa2RlLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBTYW0uCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTVkdF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTVkdFbGVtZW50
LmNwcAkocmV2aXNpb24gMjQyODgpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTVkdFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDcgKzIyNSwxMCBAQAogICAgICAgICBpZiAoU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpICYmIHJlbmRlcmVyKCkpIHsKLSAgICAgICAgICAgIHN0YXRpY19j
YXN0PFJlbmRlclNWR0NvbnRhaW5lcio+KHJlbmRlcmVyKCkpLT5zZXRWaWV3Qm94KHZpZXdCb3go
KSk7CisgICAgICAgICAgICBpZiAocmVuZGVyZXIoKS0+aXNTVkdDb250YWluZXIoKSkKKyAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJTVkdDb250YWluZXIqPihyZW5kZXJlcigpKS0+
c2V0Vmlld0JveCh2aWV3Qm94KCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PFJlbmRlclNWR1Jvb3QqPihyZW5kZXJlcigpKS0+c2V0Vmlld0JveCh2aWV3
Qm94KCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmIChTVkda
b29tQW5kUGFuOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkK
</data>
<flag name="review"
          id="6453"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>