<?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>65376</bug_id>
          
          <creation_ts>2011-07-29 07:19:34 -0700</creation_ts>
          <short_desc>Split RenderBlock::layoutRunsAndFloats into multiple methods</short_desc>
          <delta_ts>2011-08-02 11:07:49 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Alexandru Chiculita">achicu</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>hyatt</cc>
    
    <cc>mihnea</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>443934</commentid>
    <comment_count>0</comment_count>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2011-07-29 07:19:34 -0700</bug_when>
    <thetext>RenderBlock::layoutRunsAndFloats has a couple of different parts:
1. Determines the first dirty line
2. Detaches the lines starting from the first dirty line
3. Finds the last dirty line
4. Computes the lines starting with the first dirty lines. Also tries to match the last line, or at least somewhere near that.
5. If the last line was matched it links it with the new generated lines.
6. Fix floats after the last line.
7. Repaint some floats that needed repaint during layout

Steps 1, 2, 3 are extracted into separate methods, but 4 and 5 are quite long and still part of RenderBlock::layoutRunsAndFloats.
This patch should extract 4, 5-6 and 7 into 3 separate methods.

It should also help fix bug https://bugs.webkit.org/show_bug.cgi?id=61303, which triggers a position change for a float changes in steps 5 and 6. That happens when doing multi-column incremental layout and the floats have to move from one column to another. It should be much easier to repeat steps from 3 to 6 if it is required to do so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443937</commentid>
    <comment_count>1</comment_count>
      <attachid>102360</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2011-07-29 07:26:58 -0700</bug_when>
    <thetext>Created attachment 102360
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443955</commentid>
    <comment_count>2</comment_count>
      <attachid>102360</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-29 08:37:00 -0700</bug_when>
    <thetext>Comment on attachment 102360
Patch

Attachment 102360 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9262556

New failing tests:
fast/repaint/line-flow-with-floats-6.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444028</commentid>
    <comment_count>3</comment_count>
      <attachid>102378</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2011-07-29 11:44:03 -0700</bug_when>
    <thetext>Created attachment 102378
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445262</commentid>
    <comment_count>4</comment_count>
      <attachid>102651</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2011-08-02 07:48:58 -0700</bug_when>
    <thetext>Created attachment 102651
Rebased patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445331</commentid>
    <comment_count>5</comment_count>
      <attachid>102651</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-08-02 10:05:20 -0700</bug_when>
    <thetext>Comment on attachment 102651
Rebased patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445363</commentid>
    <comment_count>6</comment_count>
      <attachid>102651</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-02 11:07:45 -0700</bug_when>
    <thetext>Comment on attachment 102651
Rebased patch

Clearing flags on attachment: 102651

Committed r92207: &lt;http://trac.webkit.org/changeset/92207&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>445364</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-02 11:07:49 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102360</attachid>
            <date>2011-07-29 07:26:58 -0700</date>
            <delta_ts>2011-07-29 11:44:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug65376.patch</filename>
            <type>text/plain</type>
            <size>32678</size>
            <attacher name="Alexandru Chiculita">achicu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2MzRhNGFmLi5kMzc2YzczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIg
QEAKKzIwMTEtMDctMjkgIEFsZXhhbmRydSBDaGljdWxpdGEgIDxhY2hpY3VAYWRvYmUuY29tPgor
CisgICAgICAgIFNwbGl0IFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzIGludG8gbXVs
dGlwbGUgbWV0aG9kcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjUzNzYKKworICAgICAgICBFeHRyYWN0ZWQgbGF5b3V0UnVuc0FuZEZsb2F0c0luUmFu
Z2UsIGxpbmtUb0VuZExpbmVJZk5lZWRlZCBhbmQgcmVwYWludERpcnR5RmxvYXRzIG1ldGhvZHMg
YW5kIG1vdmVkCisgICAgICAgIG1vc3Qgb2YgdGhlIGxvY2FscyB0byBMaW5lTGF5b3V0U3RhdGUu
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIG5lZWRlZCBiZWNhdXNlIGl0IGlzIGp1c3QgcmVmYWN0b3JpbmcgZXhpc3RpbmcgY29k
ZS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxh
eW91dFN0YXRlOjpMaW5lTGF5b3V0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91
dFN0YXRlOjplbmRMaW5lTWF0Y2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0U3Rh
dGU6OnNldEVuZExpbmVNYXRjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRTdGF0
ZTo6Y2hlY2tGb3JGbG9hdHNGcm9tTGFzdExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxh
eW91dFN0YXRlOjpzZXRDaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpMaW5lTGF5b3V0U3RhdGU6OmxpbmVJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVM
YXlvdXRTdGF0ZTo6ZW5kTGluZUxvZ2ljYWxUb3ApOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxh
eW91dFN0YXRlOjpzZXRFbmRMaW5lTG9naWNhbFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5l
TGF5b3V0U3RhdGU6OmVuZExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFN0YXRl
OjpzZXRFbmRMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRTdGF0ZTo6bGFzdEZs
b2F0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRTdGF0ZTo6c2V0TGFzdEZsb2F0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRTdGF0ZTo6ZmxvYXRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkxpbmVMYXlvdXRTdGF0ZTo6ZmxvYXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpM
aW5lTGF5b3V0U3RhdGU6OnNldEZsb2F0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OmxheW91dFJ1bnNBbmRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpsaW5rVG9FbmRMaW5lSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OnJlcGFpbnREaXJ0eUZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6bGF5b3V0SW5saW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmNoZWNrRmxvYXRzSW5DbGVhbkxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmRldGVybWluZVN0YXJ0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmRldGVybWluZUVuZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpt
YXRjaGVkRW5kTGluZSk6CisKIDIwMTEtMDctMjggIEx1a2UgTWFjcGhlcnNvbiAgIDxtYWNwaGVy
c29uQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZW1vdmUgcmVtYWluaW5nIHVzZXMgb2YgQ1NT
UHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suaAppbmRleCBlMDUyYjc1Li43NDAyNzE2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApAQCAtNjYsNiArNjYsNyBAQCB0eXBlZGVmIHVu
c2lnbmVkIFRleHRSdW5GbGFnczsKIAogY2xhc3MgUmVuZGVyQmxvY2sgOiBwdWJsaWMgUmVuZGVy
Qm94IHsKIHB1YmxpYzoKKyAgICBmcmllbmQgY2xhc3MgTGluZUxheW91dFN0YXRlOwogICAgIFJl
bmRlckJsb2NrKE5vZGUqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJCbG9jaygpOwogCkBAIC01NDIs
MTAgKzU0MywxMCBAQCBwcml2YXRlOgogICAgICAgICBWZWN0b3I8UmVuZGVyQm94Kj4gbV9wb3Np
dGlvbmVkT2JqZWN0czsKICAgICB9OwogCi0gICAgdm9pZCBjaGVja0Zsb2F0c0luQ2xlYW5MaW5l
KFJvb3RJbmxpbmVCb3gqLCBWZWN0b3I8RmxvYXRXaXRoUmVjdD4mLCBzaXplX3QmIGZsb2F0SW5k
ZXgsIGJvb2wmIGVuY291bnRlcmVkTmV3RmxvYXQsIGJvb2wmIGRpcnRpZWRCeUZsb2F0KTsKLSAg
ICBSb290SW5saW5lQm94KiBkZXRlcm1pbmVTdGFydFBvc2l0aW9uKExpbmVMYXlvdXRTdGF0ZSYs
IExpbmVJbmZvJiwgSW5saW5lQmlkaVJlc29sdmVyJiwgVmVjdG9yPEZsb2F0V2l0aFJlY3Q+Jiwg
dW5zaWduZWQmIG51bUNsZWFuRmxvYXRzKTsKLSAgICBSb290SW5saW5lQm94KiBkZXRlcm1pbmVF
bmRQb3NpdGlvbihSb290SW5saW5lQm94KiBzdGFydEJveCwgVmVjdG9yPEZsb2F0V2l0aFJlY3Q+
Jiwgc2l6ZV90IGZsb2F0SW5kZXgsIElubGluZUl0ZXJhdG9yJiBjbGVhbkxpbmVTdGFydCwgQmlk
aVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cywgaW50JiB5UG9zKTsKLSAgICBib29sIG1hdGNo
ZWRFbmRMaW5lKExpbmVMYXlvdXRTdGF0ZSYsIGNvbnN0IElubGluZUJpZGlSZXNvbHZlciYsIGNv
bnN0IElubGluZUl0ZXJhdG9yJiBlbmRMaW5lU3RhcnQsIGNvbnN0IEJpZGlTdGF0dXMmIGVuZExp
bmVTdGF0dXMsIFJvb3RJbmxpbmVCb3gqJiBlbmRMaW5lLCBpbnQmIGVuZFlQb3MpOworICAgIHZv
aWQgY2hlY2tGbG9hdHNJbkNsZWFuTGluZShSb290SW5saW5lQm94KiwgVmVjdG9yPEZsb2F0V2l0
aFJlY3Q+JiwgdW5zaWduZWQmIGZsb2F0SW5kZXgsIGJvb2wmIGVuY291bnRlcmVkTmV3RmxvYXQs
IGJvb2wmIGRpcnRpZWRCeUZsb2F0KTsKKyAgICBSb290SW5saW5lQm94KiBkZXRlcm1pbmVTdGFy
dFBvc2l0aW9uKExpbmVMYXlvdXRTdGF0ZSYsIElubGluZUJpZGlSZXNvbHZlciYpOworICAgIHZv
aWQgZGV0ZXJtaW5lRW5kUG9zaXRpb24oTGluZUxheW91dFN0YXRlJiwgUm9vdElubGluZUJveCog
c3RhcnRCb3gsIElubGluZUl0ZXJhdG9yJiBjbGVhbkxpbmVTdGFydCwgQmlkaVN0YXR1cyYgY2xl
YW5MaW5lQmlkaVN0YXR1cyk7CisgICAgYm9vbCBtYXRjaGVkRW5kTGluZShMaW5lTGF5b3V0U3Rh
dGUmLCBjb25zdCBJbmxpbmVCaWRpUmVzb2x2ZXImLCBjb25zdCBJbmxpbmVJdGVyYXRvciYgZW5k
TGluZVN0YXJ0LCBjb25zdCBCaWRpU3RhdHVzJiBlbmRMaW5lU3RhdHVzKTsKIAogICAgIFJvb3RJ
bmxpbmVCb3gqIGNvbnN0cnVjdExpbmUoQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mLCBjb25zdCBMaW5l
SW5mbyYpOwogICAgIElubGluZUZsb3dCb3gqIGNyZWF0ZUxpbmVCb3hlcyhSZW5kZXJPYmplY3Qq
LCBjb25zdCBMaW5lSW5mbyYsIElubGluZUJveCogY2hpbGRCb3gpOwpAQCAtNzUwLDcgKzc1MSwx
MCBAQCBwcml2YXRlOgogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBsYXlvdXRJbmxpbmVD
aGlsZHJlbigpCiAgICAgUm9vdElubGluZUJveCogY3JlYXRlTGluZUJveGVzRnJvbUJpZGlSdW5z
KEJpZGlSdW5MaXN0PEJpZGlSdW4+JiwgY29uc3QgSW5saW5lSXRlcmF0b3ImIGVuZCwgTGluZUlu
Zm8mLCBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUmLCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuKTsK
LSAgICB2b2lkIGxheW91dFJ1bnNBbmRGbG9hdHMoTGluZUxheW91dFN0YXRlJiwgYm9vbCBoYXNJ
bmxpbmVDaGlsZCwgVmVjdG9yPEZsb2F0V2l0aFJlY3Q+Jik7CisgICAgdm9pZCBsYXlvdXRSdW5z
QW5kRmxvYXRzKExpbmVMYXlvdXRTdGF0ZSYsIGJvb2wgaGFzSW5saW5lQ2hpbGQpOworICAgIHZv
aWQgbGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiwgSW5saW5lQmlk
aVJlc29sdmVyJiwgY29uc3QgSW5saW5lSXRlcmF0b3ImIGNsZWFuTGluZVN0YXJ0LCBjb25zdCBC
aWRpU3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzKTsKKyAgICB2b2lkIGxpbmtUb0VuZExpbmVJ
Zk5lZWRlZChMaW5lTGF5b3V0U3RhdGUmKTsKKyAgICBzdGF0aWMgdm9pZCByZXBhaW50RGlydHlG
bG9hdHMoVmVjdG9yPEZsb2F0V2l0aFJlY3Q+JiBmbG9hdHMpOwogCiAgICAgLy8gUGFnaW5hdGlv
biByb3V0aW5lcy4KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrTGluZUxheW91dC5jcHAKaW5kZXggMzE2MzE1Mi4uYzY0ZTQ4OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKQEAgLTg0
MSw3ICs4NDEsMTMgQEAgUm9vdElubGluZUJveCogUmVuZGVyQmxvY2s6OmNyZWF0ZUxpbmVCb3hl
c0Zyb21CaWRpUnVucyhCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmkKIGNsYXNzIExpbmVMYXlvdXRT
dGF0ZSB7CiBwdWJsaWM6CiAgICAgTGluZUxheW91dFN0YXRlKGJvb2wgZnVsbExheW91dCwgaW50
JiByZXBhaW50TG9naWNhbFRvcCwgaW50JiByZXBhaW50TG9naWNhbEJvdHRvbSkKLSAgICAgICAg
OiBtX2lzRnVsbExheW91dChmdWxsTGF5b3V0KQorICAgICAgICA6IG1fbGFzdEZsb2F0KDApCisg
ICAgICAgICwgbV9lbmRMaW5lKDApCisgICAgICAgICwgbV9mbG9hdEluZGV4KDApCisgICAgICAg
ICwgbV9lbmRMaW5lTG9naWNhbFRvcCgwKQorICAgICAgICAsIG1fZW5kTGluZU1hdGNoZWQoZmFs
c2UpCisgICAgICAgICwgbV9jaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZShmYWxzZSkKKyAgICAg
ICAgLCBtX2lzRnVsbExheW91dChmdWxsTGF5b3V0KQogICAgICAgICAsIG1fcmVwYWludExvZ2lj
YWxUb3AocmVwYWludExvZ2ljYWxUb3ApCiAgICAgICAgICwgbV9yZXBhaW50TG9naWNhbEJvdHRv
bShyZXBhaW50TG9naWNhbEJvdHRvbSkKICAgICAgICAgLCBtX3VzZXNSZXBhaW50Qm91bmRzKGZh
bHNlKQpAQCAtODY0LDggKzg3MCw0MCBAQCBwdWJsaWM6CiAgICAgICAgIG1fcmVwYWludExvZ2lj
YWxUb3AgPSBtaW4obV9yZXBhaW50TG9naWNhbFRvcCwgYm94LT5sb2dpY2FsVG9wVmlzdWFsT3Zl
cmZsb3coKSArIG1pbihwYWdpbmF0aW9uRGVsdGEsIDApKTsKICAgICAgICAgbV9yZXBhaW50TG9n
aWNhbEJvdHRvbSA9IG1heChtX3JlcGFpbnRMb2dpY2FsQm90dG9tLCBib3gtPmxvZ2ljYWxCb3R0
b21WaXN1YWxPdmVyZmxvdygpICsgbWF4KHBhZ2luYXRpb25EZWx0YSwgMCkpOwogICAgIH0KKyAg
ICAKKyAgICBib29sIGVuZExpbmVNYXRjaGVkKCkgY29uc3QgeyByZXR1cm4gbV9lbmRMaW5lTWF0
Y2hlZDsgfQorICAgIHZvaWQgc2V0RW5kTGluZU1hdGNoZWQoYm9vbCBlbmRMaW5lTWF0Y2hlZCkg
eyBtX2VuZExpbmVNYXRjaGVkID0gZW5kTGluZU1hdGNoZWQ7IH0KKworICAgIGJvb2wgY2hlY2tG
b3JGbG9hdHNGcm9tTGFzdExpbmUoKSBjb25zdCB7IHJldHVybiBtX2NoZWNrRm9yRmxvYXRzRnJv
bUxhc3RMaW5lOyB9CisgICAgdm9pZCBzZXRDaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZShib29s
IGNoZWNrKSB7IG1fY2hlY2tGb3JGbG9hdHNGcm9tTGFzdExpbmUgPSBjaGVjazsgfQorCisgICAg
TGluZUluZm8mIGxpbmVJbmZvKCkgeyByZXR1cm4gbV9saW5lSW5mbzsgfQorICAgIGNvbnN0IExp
bmVJbmZvJiBsaW5lSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUluZm87IH0KKworICAgIGlu
dCBlbmRMaW5lTG9naWNhbFRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kTGluZUxvZ2ljYWxUb3A7
IH0KKyAgICB2b2lkIHNldEVuZExpbmVMb2dpY2FsVG9wKGludCBsb2dpY2FsVG9wKSB7IG1fZW5k
TGluZUxvZ2ljYWxUb3AgPSBsb2dpY2FsVG9wOyB9CiAKKyAgICBSb290SW5saW5lQm94KiBlbmRM
aW5lKCkgY29uc3QgeyByZXR1cm4gbV9lbmRMaW5lOyB9CisgICAgdm9pZCBzZXRFbmRMaW5lKFJv
b3RJbmxpbmVCb3gqIGxpbmUpIHsgbV9lbmRMaW5lID0gbGluZTsgfQorCisgICAgUmVuZGVyQmxv
Y2s6OkZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RGbG9h
dDsgfQorICAgIHZvaWQgc2V0TGFzdEZsb2F0KFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdCog
bGFzdEZsb2F0KSB7IG1fbGFzdEZsb2F0ID0gbGFzdEZsb2F0OyB9CisKKyAgICBWZWN0b3I8UmVu
ZGVyQmxvY2s6OkZsb2F0V2l0aFJlY3Q+JiBmbG9hdHMoKSB7IHJldHVybiBtX2Zsb2F0czsgfQor
ICAgIAorICAgIHVuc2lnbmVkIGZsb2F0SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2Zsb2F0SW5k
ZXg7IH0KKyAgICB2b2lkIHNldEZsb2F0SW5kZXgodW5zaWduZWQgZmxvYXRJbmRleCkgeyBtX2Zs
b2F0SW5kZXggPSBmbG9hdEluZGV4OyB9CisgICAgCiBwcml2YXRlOgorICAgIFZlY3RvcjxSZW5k
ZXJCbG9jazo6RmxvYXRXaXRoUmVjdD4gbV9mbG9hdHM7CisgICAgUmVuZGVyQmxvY2s6OkZsb2F0
aW5nT2JqZWN0KiBtX2xhc3RGbG9hdDsKKyAgICBSb290SW5saW5lQm94KiBtX2VuZExpbmU7Cisg
ICAgTGluZUluZm8gbV9saW5lSW5mbzsKKyAgICB1bnNpZ25lZCBtX2Zsb2F0SW5kZXg7CisgICAg
aW50IG1fZW5kTGluZUxvZ2ljYWxUb3A7CisgICAgYm9vbCBtX2VuZExpbmVNYXRjaGVkOworICAg
IGJvb2wgbV9jaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZTsKKyAgICAKICAgICBib29sIG1faXNG
dWxsTGF5b3V0OwogCiAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGJlIGEgcmFuZ2Ugb2JqZWN0
IGluc3RlYWQgb2YgdHdvIGludHM/CkBAIC04ODgsMTMgKzkyNiwxMSBAQCBzdGF0aWMgdm9pZCBk
ZWxldGVMaW5lUmFuZ2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgUmVuZGVyQXJlbmEq
IGFyZW5hLCBSbwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZs
b2F0cyhMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBib29sIGhhc0lubGluZUNoaWxkLCBW
ZWN0b3I8RmxvYXRXaXRoUmVjdD4mIGZsb2F0cykKK3ZvaWQgUmVuZGVyQmxvY2s6OmxheW91dFJ1
bnNBbmRGbG9hdHMoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgYm9vbCBoYXNJbmxpbmVD
aGlsZCkKIHsKICAgICAvLyBXZSB3YW50IHRvIHNraXAgYWhlYWQgdG8gdGhlIGZpcnN0IGRpcnR5
IGxpbmUKICAgICBJbmxpbmVCaWRpUmVzb2x2ZXIgcmVzb2x2ZXI7Ci0gICAgdW5zaWduZWQgZmxv
YXRJbmRleDsKLSAgICBMaW5lSW5mbyBsaW5lSW5mbzsKLSAgICBSb290SW5saW5lQm94KiBzdGFy
dExpbmUgPSBkZXRlcm1pbmVTdGFydFBvc2l0aW9uKGxheW91dFN0YXRlLCBsaW5lSW5mbywgcmVz
b2x2ZXIsIGZsb2F0cywgZmxvYXRJbmRleCk7CisgICAgUm9vdElubGluZUJveCogc3RhcnRMaW5l
ID0gZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihsYXlvdXRTdGF0ZSwgcmVzb2x2ZXIpOwogCiAgICAg
Ly8gRklYTUU6IFRoaXMgd291bGQgbWFrZSBtb3JlIHNlbnNlIG91dHNpZGUgb2YgdGhpcyBmdW5j
dGlvbiwgYnV0IHNpbmNlCiAgICAgLy8gZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbiBjYW4gY2hhbmdl
IHRoZSBmdWxsTGF5b3V0IGZsYWcgd2UgaGF2ZSB0byBkbyB0aGlzIGhlcmUuIEZhaWx1cmUgdG8g
Y2FsbApAQCAtOTEyLDE3ICs5NDgsMTUgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0Fu
ZEZsb2F0cyhMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBib29sIGhhc0lubGkKICAgICAg
ICAgfQogICAgIH0KIAotICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQgPSAobV9mbG9hdGlu
Z09iamVjdHMgJiYgIW1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5pc0VtcHR5KCkpID8gbV9mbG9h
dGluZ09iamVjdHMtPnNldCgpLmxhc3QoKSA6IDA7Ci0KLSAgICBMaW5lTWlkcG9pbnRTdGF0ZSYg
bGluZU1pZHBvaW50U3RhdGUgPSByZXNvbHZlci5taWRwb2ludFN0YXRlKCk7CisgICAgaWYgKG1f
ZmxvYXRpbmdPYmplY3RzICYmICFtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuaXNFbXB0eSgpKQor
ICAgICAgICBsYXlvdXRTdGF0ZS5zZXRMYXN0RmxvYXQobV9mbG9hdGluZ09iamVjdHMtPnNldCgp
Lmxhc3QoKSk7CiAKICAgICAvLyBXZSBhbHNvIGZpbmQgdGhlIGZpcnN0IGNsZWFuIGxpbmUgYW5k
IGV4dHJhY3QgdGhlc2UgbGluZXMuICBXZSB3aWxsIGFkZCB0aGVtIGJhY2sKICAgICAvLyBpZiB3
ZSBkZXRlcm1pbmUgdGhhdCB3ZSdyZSBhYmxlIHRvIHN5bmNocm9uaXplIGFmdGVyIGhhbmRsaW5n
IGFsbCBvdXIgZGlydHkgbGluZXMuCiAgICAgSW5saW5lSXRlcmF0b3IgY2xlYW5MaW5lU3RhcnQ7
CiAgICAgQmlkaVN0YXR1cyBjbGVhbkxpbmVCaWRpU3RhdHVzOwotICAgIGludCBlbmRMaW5lTG9n
aWNhbFRvcCA9IDA7Ci0gICAgUm9vdElubGluZUJveCogZW5kTGluZSA9IChsYXlvdXRTdGF0ZS5p
c0Z1bGxMYXlvdXQoKSB8fCAhc3RhcnRMaW5lKSA/Ci0gICAgICAgIDAgOiBkZXRlcm1pbmVFbmRQ
b3NpdGlvbihzdGFydExpbmUsIGZsb2F0cywgZmxvYXRJbmRleCwgY2xlYW5MaW5lU3RhcnQsIGNs
ZWFuTGluZUJpZGlTdGF0dXMsIGVuZExpbmVMb2dpY2FsVG9wKTsKKyAgICBpZiAoIWxheW91dFN0
YXRlLmlzRnVsbExheW91dCgpICYmIHN0YXJ0TGluZSkKKyAgICAgICAgZGV0ZXJtaW5lRW5kUG9z
aXRpb24obGF5b3V0U3RhdGUsIHN0YXJ0TGluZSwgY2xlYW5MaW5lU3RhcnQsIGNsZWFuTGluZUJp
ZGlTdGF0dXMpOwogCiAgICAgaWYgKHN0YXJ0TGluZSkgewogICAgICAgICBpZiAoIWxheW91dFN0
YXRlLnVzZXNSZXBhaW50Qm91bmRzKCkpCkBAIC05MzAsOCArOTY0LDYgQEAgdm9pZCBSZW5kZXJC
bG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0cyhMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBi
b29sIGhhc0lubGkKICAgICAgICAgZGVsZXRlTGluZVJhbmdlKGxheW91dFN0YXRlLCByZW5kZXJB
cmVuYSgpLCBzdGFydExpbmUpOwogICAgIH0KIAotICAgIElubGluZUl0ZXJhdG9yIGVuZCA9IHJl
c29sdmVyLnBvc2l0aW9uKCk7Ci0KICAgICBpZiAoIWxheW91dFN0YXRlLmlzRnVsbExheW91dCgp
ICYmIGxhc3RSb290Qm94KCkgJiYgbGFzdFJvb3RCb3goKS0+ZW5kc1dpdGhCcmVhaygpKSB7CiAg
ICAgICAgIC8vIElmIHRoZSBsYXN0IGxpbmUgYmVmb3JlIHRoZSBzdGFydCBsaW5lIGVuZHMgd2l0
aCBhIGxpbmUgYnJlYWsgdGhhdCBjbGVhciBmbG9hdHMsCiAgICAgICAgIC8vIGFkanVzdCB0aGUg
aGVpZ2h0IGFjY29yZGluZ2x5LgpAQCAtOTQ4LDEyICs5ODAsMTcgQEAgdm9pZCBSZW5kZXJCbG9j
azo6bGF5b3V0UnVuc0FuZEZsb2F0cyhMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBib29s
IGhhc0lubGkKICAgICAgICAgfQogICAgIH0KIAotICAgIGJvb2wgZW5kTGluZU1hdGNoZWQgPSBm
YWxzZTsKLSAgICBib29sIGNoZWNrRm9yRW5kTGluZU1hdGNoID0gZW5kTGluZTsKLSAgICBib29s
IGNoZWNrRm9yRmxvYXRzRnJvbUxhc3RMaW5lID0gZmFsc2U7CisgICAgbGF5b3V0UnVuc0FuZEZs
b2F0c0luUmFuZ2UobGF5b3V0U3RhdGUsIHJlc29sdmVyLCBjbGVhbkxpbmVTdGFydCwgY2xlYW5M
aW5lQmlkaVN0YXR1cyk7CisgICAgbGlua1RvRW5kTGluZUlmTmVlZGVkKGxheW91dFN0YXRlKTsK
KyAgICByZXBhaW50RGlydHlGbG9hdHMobGF5b3V0U3RhdGUuZmxvYXRzKCkpOworfQogCit2b2lk
IFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0U3RhdGUm
IGxheW91dFN0YXRlLCBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBjb25zdCBJbmxpbmVJ
dGVyYXRvciYgY2xlYW5MaW5lU3RhcnQsIGNvbnN0IEJpZGlTdGF0dXMmIGNsZWFuTGluZUJpZGlT
dGF0dXMpCit7CiAgICAgYm9vbCBwYWdpbmF0ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCkgJiYg
dmlldygpLT5sYXlvdXRTdGF0ZSgpLT5pc1BhZ2luYXRlZCgpOwotCisgICAgTGluZU1pZHBvaW50
U3RhdGUmIGxpbmVNaWRwb2ludFN0YXRlID0gcmVzb2x2ZXIubWlkcG9pbnRTdGF0ZSgpOworICAg
IElubGluZUl0ZXJhdG9yIGVuZCA9IHJlc29sdmVyLnBvc2l0aW9uKCk7CisgICAgYm9vbCBjaGVj
a0ZvckVuZExpbmVNYXRjaCA9IGxheW91dFN0YXRlLmVuZExpbmUoKTsKICAgICBMaW5lQnJlYWtJ
dGVyYXRvckluZm8gbGluZUJyZWFrSXRlcmF0b3JJbmZvOwogICAgIFZlcnRpY2FsUG9zaXRpb25D
YWNoZSB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGU7CiAKQEAgLTk2MSwyOSArOTk4LDMyIEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmxheW91dFJ1bnNBbmRGbG9hdHMoTGluZUxheW91dFN0YXRlJiBsYXlvdXRT
dGF0ZSwgYm9vbCBoYXNJbmxpCiAKICAgICB3aGlsZSAoIWVuZC5hdEVuZCgpKSB7CiAgICAgICAg
IC8vIEZJWE1FOiBJcyB0aGlzIGNoZWNrIG5lY2Vzc2FyeSBiZWZvcmUgdGhlIGZpcnN0IGl0ZXJh
dGlvbiBvciBjYW4gaXQgYmUgbW92ZWQgdG8gdGhlIGVuZD8KLSAgICAgICAgaWYgKGNoZWNrRm9y
RW5kTGluZU1hdGNoICYmIChlbmRMaW5lTWF0Y2hlZCA9IG1hdGNoZWRFbmRMaW5lKGxheW91dFN0
YXRlLCByZXNvbHZlciwgY2xlYW5MaW5lU3RhcnQsIGNsZWFuTGluZUJpZGlTdGF0dXMsIGVuZExp
bmUsIGVuZExpbmVMb2dpY2FsVG9wKSkpCi0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYg
KGNoZWNrRm9yRW5kTGluZU1hdGNoKSB7CisgICAgICAgICAgICBsYXlvdXRTdGF0ZS5zZXRFbmRM
aW5lTWF0Y2hlZChtYXRjaGVkRW5kTGluZShsYXlvdXRTdGF0ZSwgcmVzb2x2ZXIsIGNsZWFuTGlu
ZVN0YXJ0LCBjbGVhbkxpbmVCaWRpU3RhdHVzKSk7CisgICAgICAgICAgICBpZiAobGF5b3V0U3Rh
dGUuZW5kTGluZU1hdGNoZWQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQog
CiAgICAgICAgIGxpbmVNaWRwb2ludFN0YXRlLnJlc2V0KCk7CiAKLSAgICAgICAgbGluZUluZm8u
c2V0RW1wdHkodHJ1ZSk7CisgICAgICAgIGxheW91dFN0YXRlLmxpbmVJbmZvKCkuc2V0RW1wdHko
dHJ1ZSk7CiAKICAgICAgICAgSW5saW5lSXRlcmF0b3Igb2xkRW5kID0gZW5kOwotICAgICAgICBi
b29sIGlzTmV3VUJBUGFyYWdyYXBoID0gbGluZUluZm8ucHJldmlvdXNMaW5lQnJva2VDbGVhbmx5
KCk7CisgICAgICAgIGJvb2wgaXNOZXdVQkFQYXJhZ3JhcGggPSBsYXlvdXRTdGF0ZS5saW5lSW5m
bygpLnByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSgpOwogICAgICAgICBGbG9hdGluZ09iamVjdCog
bGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSA9IChtX2Zsb2F0aW5nT2JqZWN0cyAmJiAhbV9mbG9h
dGluZ09iamVjdHMtPnNldCgpLmlzRW1wdHkoKSkgPyBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCku
bGFzdCgpIDogMDsKLSAgICAgICAgZW5kID0gbGluZUJyZWFrZXIubmV4dExpbmVCcmVhayhyZXNv
bHZlciwgbGluZUluZm8sIGxpbmVCcmVha0l0ZXJhdG9ySW5mbywgbGFzdEZsb2F0RnJvbVByZXZp
b3VzTGluZSk7CisgICAgICAgIGVuZCA9IGxpbmVCcmVha2VyLm5leHRMaW5lQnJlYWsocmVzb2x2
ZXIsIGxheW91dFN0YXRlLmxpbmVJbmZvKCksIGxpbmVCcmVha0l0ZXJhdG9ySW5mbywgbGFzdEZs
b2F0RnJvbVByZXZpb3VzTGluZSk7CiAgICAgICAgIGlmIChyZXNvbHZlci5wb3NpdGlvbigpLmF0
RW5kKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgYmUgY3JlYXRpbmcg
YW55IHJ1bnMgaW4gZmluZE5leHRMaW5lQnJlYWsgdG8gYmVnaW4gd2l0aCEKICAgICAgICAgICAg
IC8vIE9uY2UgQmlkaVJ1bkxpc3QgaXMgc2VwYXJhdGVkIGZyb20gQmlkaVJlc29sdmVyIHRoaXMg
d2lsbCBub3QgYmUgbmVlZGVkLgogICAgICAgICAgICAgcmVzb2x2ZXIucnVucygpLmRlbGV0ZVJ1
bnMoKTsKICAgICAgICAgICAgIHJlc29sdmVyLm1hcmtDdXJyZW50UnVuRW1wdHkoKTsgLy8gRklY
TUU6IFRoaXMgY2FuIHByb2JhYmx5IGJlIHJlcGxhY2VkIGJ5IGFuIEFTU0VSVCAob3IganVzdCBy
ZW1vdmVkKS4KLSAgICAgICAgICAgIGNoZWNrRm9yRmxvYXRzRnJvbUxhc3RMaW5lID0gdHJ1ZTsK
KyAgICAgICAgICAgIGxheW91dFN0YXRlLnNldENoZWNrRm9yRmxvYXRzRnJvbUxhc3RMaW5lKHRy
dWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKGVuZCAh
PSByZXNvbHZlci5wb3NpdGlvbigpKTsKIAogICAgICAgICAvLyBUaGlzIGlzIGEgc2hvcnQtY3V0
IGZvciBlbXB0eSBsaW5lcy4KLSAgICAgICAgaWYgKGxpbmVJbmZvLmlzRW1wdHkoKSkgeworICAg
ICAgICBpZiAobGF5b3V0U3RhdGUubGluZUluZm8oKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
IGlmIChsYXN0Um9vdEJveCgpKQogICAgICAgICAgICAgICAgIGxhc3RSb290Qm94KCktPnNldExp
bmVCcmVha0luZm8oZW5kLm1fb2JqLCBlbmQubV9wb3MsIHJlc29sdmVyLnN0YXR1cygpKTsKICAg
ICAgICAgfSBlbHNlIHsKQEAgLTk5NiwxMCArMTAzNiwxMCBAQCB2b2lkIFJlbmRlckJsb2NrOjps
YXlvdXRSdW5zQW5kRmxvYXRzKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGJvb2wgaGFz
SW5saQogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgb3duZXJzaGlw
IGlzIHJldmVyc2VkLiBXZSBzaG91bGQgb3duIHRoZSBCaWRpUnVuTGlzdCBhbmQgcGFzcyBpdCB0
byBjcmVhdGVCaWRpUnVuc0ZvckxpbmUuCiAgICAgICAgICAgICBCaWRpUnVuTGlzdDxCaWRpUnVu
PiYgYmlkaVJ1bnMgPSByZXNvbHZlci5ydW5zKCk7Ci0gICAgICAgICAgICByZXNvbHZlci5jcmVh
dGVCaWRpUnVuc0ZvckxpbmUoZW5kLCBvdmVycmlkZSwgbGluZUluZm8ucHJldmlvdXNMaW5lQnJv
a2VDbGVhbmx5KCkpOworICAgICAgICAgICAgcmVzb2x2ZXIuY3JlYXRlQmlkaVJ1bnNGb3JMaW5l
KGVuZCwgb3ZlcnJpZGUsIGxheW91dFN0YXRlLmxpbmVJbmZvKCkucHJldmlvdXNMaW5lQnJva2VD
bGVhbmx5KCkpOwogICAgICAgICAgICAgQVNTRVJUKHJlc29sdmVyLnBvc2l0aW9uKCkgPT0gZW5k
KTsKIAotICAgICAgICAgICAgQmlkaVJ1biogdHJhaWxpbmdTcGFjZVJ1biA9ICFsaW5lSW5mby5w
cmV2aW91c0xpbmVCcm9rZUNsZWFubHkoKSA/IGhhbmRsZVRyYWlsaW5nU3BhY2VzKGJpZGlSdW5z
LCByZXNvbHZlci5jb250ZXh0KCkpIDogMDsKKyAgICAgICAgICAgIEJpZGlSdW4qIHRyYWlsaW5n
U3BhY2VSdW4gPSAhbGF5b3V0U3RhdGUubGluZUluZm8oKS5wcmV2aW91c0xpbmVCcm9rZUNsZWFu
bHkoKSA/IGhhbmRsZVRyYWlsaW5nU3BhY2VzKGJpZGlSdW5zLCByZXNvbHZlci5jb250ZXh0KCkp
IDogMDsKIAogICAgICAgICAgICAgaWYgKGJpZGlSdW5zLnJ1bkNvdW50KCkgJiYgbGluZUJyZWFr
ZXIubGluZVdhc0h5cGhlbmF0ZWQoKSkKICAgICAgICAgICAgICAgICBiaWRpUnVucy5sb2dpY2Fs
bHlMYXN0UnVuKCktPm1faGFzSHlwaGVuID0gdHJ1ZTsKQEAgLTEwMDksNyArMTA0OSw3IEBAIHZv
aWQgUmVuZGVyQmxvY2s6OmxheW91dFJ1bnNBbmRGbG9hdHMoTGluZUxheW91dFN0YXRlJiBsYXlv
dXRTdGF0ZSwgYm9vbCBoYXNJbmxpCiAgICAgICAgICAgICAvLyBpbmxpbmUgZmxvdyBib3hlcy4K
IAogICAgICAgICAgICAgaW50IG9sZExvZ2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCk7Ci0g
ICAgICAgICAgICBSb290SW5saW5lQm94KiBsaW5lQm94ID0gY3JlYXRlTGluZUJveGVzRnJvbUJp
ZGlSdW5zKGJpZGlSdW5zLCBlbmQsIGxpbmVJbmZvLCB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUsIHRy
YWlsaW5nU3BhY2VSdW4pOworICAgICAgICAgICAgUm9vdElubGluZUJveCogbGluZUJveCA9IGNy
ZWF0ZUxpbmVCb3hlc0Zyb21CaWRpUnVucyhiaWRpUnVucywgZW5kLCBsYXlvdXRTdGF0ZS5saW5l
SW5mbygpLCB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUsIHRyYWlsaW5nU3BhY2VSdW4pOwogCiAgICAg
ICAgICAgICBiaWRpUnVucy5kZWxldGVSdW5zKCk7CiAgICAgICAgICAgICByZXNvbHZlci5tYXJr
Q3VycmVudFJ1bkVtcHR5KCk7IC8vIEZJWE1FOiBUaGlzIGNhbiBwcm9iYWJseSBiZSByZXBsYWNl
ZCBieSBhbiBBU1NFUlQgKG9yIGp1c3QgcmVtb3ZlZCkuCkBAIC0xMDIzLDEyICsxMDYzLDEyIEBA
IHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dFJ1bnNBbmRGbG9hdHMoTGluZUxheW91dFN0YXRlJiBs
YXlvdXRTdGF0ZSwgYm9vbCBoYXNJbmxpCiAgICAgICAgICAgICAgICAgICAgIGludCBhZGp1c3Rt
ZW50ID0gMDsKICAgICAgICAgICAgICAgICAgICAgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5h
dGlvbihsaW5lQm94LCBhZGp1c3RtZW50KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGFkanVz
dG1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBvbGRMaW5lV2lkdGggPSBhdmFp
bGFibGVMb2dpY2FsV2lkdGhGb3JMaW5lKG9sZExvZ2ljYWxIZWlnaHQsIGxpbmVJbmZvLmlzRmly
c3RMaW5lKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9sZExpbmVXaWR0aCA9IGF2
YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUob2xkTG9naWNhbEhlaWdodCwgbGF5b3V0U3RhdGUu
bGluZUluZm8oKS5pc0ZpcnN0TGluZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVC
b3gtPmFkanVzdEJsb2NrRGlyZWN0aW9uUG9zaXRpb24oYWRqdXN0bWVudCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUudXNlc1JlcGFpbnRCb3VuZHMoKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXRTdGF0ZS51cGRhdGVSZXBhaW50UmFuZ2VGcm9t
Qm94KGxpbmVCb3gpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlTG9n
aWNhbFdpZHRoRm9yTGluZShvbGRMb2dpY2FsSGVpZ2h0ICsgYWRqdXN0bWVudCwgbGluZUluZm8u
aXNGaXJzdExpbmUoKSkgIT0gb2xkTGluZVdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yTGluZShvbGRMb2dpY2FsSGVpZ2h0ICsgYWRq
dXN0bWVudCwgbGF5b3V0U3RhdGUubGluZUluZm8oKS5pc0ZpcnN0TGluZSgpKSAhPSBvbGRMaW5l
V2lkdGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGRlbGV0
ZSB0aGlzIGxpbmUsIHJlbW92ZSBhbGwgZmxvYXRzIHRoYXQgZ290IGFkZGVkLCBhbmQgbGV0IGxp
bmUgbGF5b3V0IHJlLXJ1bi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lQm94LT5k
ZWxldGVMaW5lKHJlbmRlckFyZW5hKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
bW92ZUZsb2F0aW5nT2JqZWN0c0JlbG93KGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIG9sZExv
Z2ljYWxIZWlnaHQpOwpAQCAtMTA0Niw3ICsxMDg2LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5
b3V0UnVuc0FuZEZsb2F0cyhMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBib29sIGhhc0lu
bGkKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGluZUJyZWFrZXIucG9zaXRp
b25lZE9iamVjdHMoKS5zaXplKCk7ICsraSkKICAgICAgICAgICAgICAgICBzZXRTdGF0aWNQb3Np
dGlvbnModGhpcywgbGluZUJyZWFrZXIucG9zaXRpb25lZE9iamVjdHMoKVtpXSk7CiAKLSAgICAg
ICAgICAgIGxpbmVJbmZvLnNldEZpcnN0TGluZShmYWxzZSk7CisgICAgICAgICAgICBsYXlvdXRT
dGF0ZS5saW5lSW5mbygpLnNldEZpcnN0TGluZShmYWxzZSk7CiAgICAgICAgICAgICBuZXdMaW5l
KGxpbmVCcmVha2VyLmNsZWFyKCkpOwogICAgICAgICB9CiAKQEAgLTEwNTQsOCArMTA5NCw4IEBA
IHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dFJ1bnNBbmRGbG9hdHMoTGluZUxheW91dFN0YXRlJiBs
YXlvdXRTdGF0ZSwgYm9vbCBoYXNJbmxpCiAgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldCYg
ZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgICAgICAg
ICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4o
KTsKICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdP
YmplY3RTZXQuZW5kKCk7Ci0gICAgICAgICAgICBpZiAobGFzdEZsb2F0KSB7Ci0gICAgICAgICAg
ICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBsYXN0RmxvYXRJdGVyYXRvciA9IGZsb2F0
aW5nT2JqZWN0U2V0LmZpbmQobGFzdEZsb2F0KTsKKyAgICAgICAgICAgIGlmIChsYXlvdXRTdGF0
ZS5sYXN0RmxvYXQoKSkgeworICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0
b3IgbGFzdEZsb2F0SXRlcmF0b3IgPSBmbG9hdGluZ09iamVjdFNldC5maW5kKGxheW91dFN0YXRl
Lmxhc3RGbG9hdCgpKTsKICAgICAgICAgICAgICAgICBBU1NFUlQobGFzdEZsb2F0SXRlcmF0b3Ig
IT0gZW5kKTsKICAgICAgICAgICAgICAgICArK2xhc3RGbG9hdEl0ZXJhdG9yOwogICAgICAgICAg
ICAgICAgIGl0ID0gbGFzdEZsb2F0SXRlcmF0b3I7CkBAIC0xMDYzLDI0ICsxMTAzLDI4IEBAIHZv
aWQgUmVuZGVyQmxvY2s6OmxheW91dFJ1bnNBbmRGbG9hdHMoTGluZUxheW91dFN0YXRlJiBsYXlv
dXRTdGF0ZSwgYm9vbCBoYXNJbmxpCiAgICAgICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0
KSB7CiAgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSAqaXQ7CiAgICAgICAgICAg
ICAgICAgYXBwZW5kRmxvYXRpbmdPYmplY3RUb0xhc3RMaW5lKGYpOwotICAgICAgICAgICAgICAg
IEFTU0VSVChmLT5tX3JlbmRlcmVyID09IGZsb2F0c1tmbG9hdEluZGV4XS5vYmplY3QpOworICAg
ICAgICAgICAgICAgIEFTU0VSVChmLT5tX3JlbmRlcmVyID09IGxheW91dFN0YXRlLmZsb2F0cygp
W2xheW91dFN0YXRlLmZsb2F0SW5kZXgoKV0ub2JqZWN0KTsKICAgICAgICAgICAgICAgICAvLyBJ
ZiBhIGZsb2F0J3MgZ2VvbWV0cnkgaGFzIGNoYW5nZWQsIGdpdmUgdXAgb24gc3luY2luZyB3aXRo
IGNsZWFuIGxpbmVzLgotICAgICAgICAgICAgICAgIGlmIChmbG9hdHNbZmxvYXRJbmRleF0ucmVj
dCAhPSBmLT5mcmFtZVJlY3QoKSkKKyAgICAgICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUuZmxv
YXRzKClbbGF5b3V0U3RhdGUuZmxvYXRJbmRleCgpXS5yZWN0ICE9IGYtPmZyYW1lUmVjdCgpKQog
ICAgICAgICAgICAgICAgICAgICBjaGVja0ZvckVuZExpbmVNYXRjaCA9IGZhbHNlOwotICAgICAg
ICAgICAgICAgIGZsb2F0SW5kZXgrKzsKKyAgICAgICAgICAgICAgICBsYXlvdXRTdGF0ZS5zZXRG
bG9hdEluZGV4KGxheW91dFN0YXRlLmZsb2F0SW5kZXgoKSArIDEpOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgbGFzdEZsb2F0ID0gIWZsb2F0aW5nT2JqZWN0U2V0LmlzRW1wdHkoKSA/IGZs
b2F0aW5nT2JqZWN0U2V0Lmxhc3QoKSA6IDA7CisgICAgICAgICAgICBsYXlvdXRTdGF0ZS5zZXRM
YXN0RmxvYXQoIWZsb2F0aW5nT2JqZWN0U2V0LmlzRW1wdHkoKSA/IGZsb2F0aW5nT2JqZWN0U2V0
Lmxhc3QoKSA6IDApOwogICAgICAgICB9CiAKICAgICAgICAgbGluZU1pZHBvaW50U3RhdGUucmVz
ZXQoKTsKICAgICAgICAgcmVzb2x2ZXIuc2V0UG9zaXRpb24oZW5kKTsKICAgICB9Cit9CiAKLSAg
ICBpZiAoZW5kTGluZSkgewotICAgICAgICBpZiAoZW5kTGluZU1hdGNoZWQpIHsKK3ZvaWQgUmVu
ZGVyQmxvY2s6OmxpbmtUb0VuZExpbmVJZk5lZWRlZChMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0
YXRlKQoreworICAgIGlmIChsYXlvdXRTdGF0ZS5lbmRMaW5lKCkpIHsKKyAgICAgICAgaWYgKGxh
eW91dFN0YXRlLmVuZExpbmVNYXRjaGVkKCkpIHsKKyAgICAgICAgICAgIGJvb2wgcGFnaW5hdGVk
ID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+aXNQYWdp
bmF0ZWQoKTsKICAgICAgICAgICAgIC8vIEF0dGFjaCBhbGwgdGhlIHJlbWFpbmluZyBsaW5lcywg
YW5kIHRoZW4gYWRqdXN0IHRoZWlyIHktcG9zaXRpb25zIGFzIG5lZWRlZC4KLSAgICAgICAgICAg
IGludCBkZWx0YSA9IGxvZ2ljYWxIZWlnaHQoKSAtIGVuZExpbmVMb2dpY2FsVG9wOwotICAgICAg
ICAgICAgZm9yIChSb290SW5saW5lQm94KiBsaW5lID0gZW5kTGluZTsgbGluZTsgbGluZSA9IGxp
bmUtPm5leHRSb290Qm94KCkpIHsKKyAgICAgICAgICAgIGludCBkZWx0YSA9IGxvZ2ljYWxIZWln
aHQoKSAtIGxheW91dFN0YXRlLmVuZExpbmVMb2dpY2FsVG9wKCk7CisgICAgICAgICAgICBmb3Ig
KFJvb3RJbmxpbmVCb3gqIGxpbmUgPSBsYXlvdXRTdGF0ZS5lbmRMaW5lKCk7IGxpbmU7IGxpbmUg
PSBsaW5lLT5uZXh0Um9vdEJveCgpKSB7CiAgICAgICAgICAgICAgICAgbGluZS0+YXR0YWNoTGlu
ZSgpOwogICAgICAgICAgICAgICAgIGlmIChwYWdpbmF0ZWQpIHsKICAgICAgICAgICAgICAgICAg
ICAgZGVsdGEgLT0gbGluZS0+cGFnaW5hdGlvblN0cnV0KCk7CkBAIC0xMTA0LDE0ICsxMTQ4LDE1
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dFJ1bnNBbmRGbG9hdHMoTGluZUxheW91dFN0YXRl
JiBsYXlvdXRTdGF0ZSwgYm9vbCBoYXNJbmxpCiAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0
KGxhc3RSb290Qm94KCktPmJsb2NrTG9naWNhbEhlaWdodCgpKTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIC8vIERlbGV0ZSBhbGwgdGhlIHJlbWFpbmluZyBsaW5lcy4KLSAgICAgICAg
ICAgIGRlbGV0ZUxpbmVSYW5nZShsYXlvdXRTdGF0ZSwgcmVuZGVyQXJlbmEoKSwgZW5kTGluZSk7
CisgICAgICAgICAgICBkZWxldGVMaW5lUmFuZ2UobGF5b3V0U3RhdGUsIHJlbmRlckFyZW5hKCks
IGxheW91dFN0YXRlLmVuZExpbmUoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKG1fZmxv
YXRpbmdPYmplY3RzICYmIChjaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZSB8fCBwb3NpdGlvbk5l
d0Zsb2F0cygpKSAmJiBsYXN0Um9vdEJveCgpKSB7CisgICAgCisgICAgaWYgKG1fZmxvYXRpbmdP
YmplY3RzICYmIChsYXlvdXRTdGF0ZS5jaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZSgpIHx8IHBv
c2l0aW9uTmV3RmxvYXRzKCkpICYmIGxhc3RSb290Qm94KCkpIHsKICAgICAgICAgLy8gSW4gY2Fz
ZSB3ZSBoYXZlIGEgZmxvYXQgb24gdGhlIGxhc3QgbGluZSwgaXQgbWlnaHQgbm90IGJlIHBvc2l0
aW9uZWQgdXAgdG8gbm93LgogICAgICAgICAvLyBUaGlzIGhhcyB0byBiZSBkb25lIGJlZm9yZSBh
ZGRpbmcgaW4gdGhlIGJvdHRvbSBib3JkZXIvcGFkZGluZywgb3IgdGhlIGZsb2F0IHdpbGwKICAg
ICAgICAgLy8gaW5jbHVkZSB0aGUgcGFkZGluZyBpbmNvcnJlY3RseS4gLWR3aAotICAgICAgICBp
ZiAoY2hlY2tGb3JGbG9hdHNGcm9tTGFzdExpbmUpIHsKKyAgICAgICAgaWYgKGxheW91dFN0YXRl
LmNoZWNrRm9yRmxvYXRzRnJvbUxhc3RMaW5lKCkpIHsKICAgICAgICAgICAgIGludCBib3R0b21W
aXN1YWxPdmVyZmxvdyA9IGxhc3RSb290Qm94KCktPmxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxv
dygpOwogICAgICAgICAgICAgaW50IGJvdHRvbUxheW91dE92ZXJmbG93ID0gbGFzdFJvb3RCb3go
KS0+bG9naWNhbEJvdHRvbUxheW91dE92ZXJmbG93KCk7CiAgICAgICAgICAgICBUcmFpbGluZ0Zs
b2F0c1Jvb3RJbmxpbmVCb3gqIHRyYWlsaW5nRmxvYXRzTGluZUJveCA9IG5ldyAocmVuZGVyQXJl
bmEoKSkgVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94KHRoaXMpOwpAQCAtMTEzMCwxNiArMTE3
NSwyMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzKExpbmVMYXlvdXRT
dGF0ZSYgbGF5b3V0U3RhdGUsIGJvb2wgaGFzSW5saQogICAgICAgICBGbG9hdGluZ09iamVjdFNl
dCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgICAg
IEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigp
OwogICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0
U2V0LmVuZCgpOwotICAgICAgICBpZiAobGFzdEZsb2F0KSB7Ci0gICAgICAgICAgICBGbG9hdGlu
Z09iamVjdFNldEl0ZXJhdG9yIGxhc3RGbG9hdEl0ZXJhdG9yID0gZmxvYXRpbmdPYmplY3RTZXQu
ZmluZChsYXN0RmxvYXQpOworICAgICAgICBpZiAobGF5b3V0U3RhdGUubGFzdEZsb2F0KCkpIHsK
KyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgbGFzdEZsb2F0SXRlcmF0b3Ig
PSBmbG9hdGluZ09iamVjdFNldC5maW5kKGxheW91dFN0YXRlLmxhc3RGbG9hdCgpKTsKICAgICAg
ICAgICAgIEFTU0VSVChsYXN0RmxvYXRJdGVyYXRvciAhPSBlbmQpOwogICAgICAgICAgICAgKyts
YXN0RmxvYXRJdGVyYXRvcjsKICAgICAgICAgICAgIGl0ID0gbGFzdEZsb2F0SXRlcmF0b3I7CiAg
ICAgICAgIH0KICAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgICAgIGFw
cGVuZEZsb2F0aW5nT2JqZWN0VG9MYXN0TGluZSgqaXQpOwotICAgICAgICBsYXN0RmxvYXQgPSAh
ZmxvYXRpbmdPYmplY3RTZXQuaXNFbXB0eSgpID8gZmxvYXRpbmdPYmplY3RTZXQubGFzdCgpIDog
MDsKKyAgICAgICAgbGF5b3V0U3RhdGUuc2V0TGFzdEZsb2F0KCFmbG9hdGluZ09iamVjdFNldC5p
c0VtcHR5KCkgPyBmbG9hdGluZ09iamVjdFNldC5sYXN0KCkgOiAwKTsKICAgICB9Cit9CisKK3Zv
aWQgUmVuZGVyQmxvY2s6OnJlcGFpbnREaXJ0eUZsb2F0cyhWZWN0b3I8RmxvYXRXaXRoUmVjdD4m
IGZsb2F0cykKK3sKICAgICBzaXplX3QgZmxvYXRDb3VudCA9IGZsb2F0cy5zaXplKCk7CiAgICAg
Ly8gRmxvYXRzIHRoYXQgZGlkIG5vdCBoYXZlIGxheW91dCBkaWQgbm90IHJlcGFpbnQgd2hlbiB3
ZSBsYWlkIHRoZW0gb3V0LiBUaGV5IHdvdWxkIGhhdmUKICAgICAvLyBwYWludGVkIGJ5IG5vdyBp
ZiB0aGV5IGhhZCBtb3ZlZCwgYnV0IGlmIHRoZXkgc3RheWVkIGF0ICgwLCAwKSwgdGhleSBzdGls
bCBuZWVkIHRvIGJlCkBAIC0xMTgwLDcgKzEyMjksNiBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlv
dXRJbmxpbmVDaGlsZHJlbihib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCYgcmVwYWludExvZ2lj
YQogCiAgICAgaWYgKGZpcnN0Q2hpbGQoKSkgewogICAgICAgICAvLyBsYXlvdXQgcmVwbGFjZWQg
ZWxlbWVudHMKLSAgICAgICAgVmVjdG9yPEZsb2F0V2l0aFJlY3Q+IGZsb2F0czsKICAgICAgICAg
Ym9vbCBoYXNJbmxpbmVDaGlsZCA9IGZhbHNlOwogICAgICAgICBmb3IgKElubGluZVdhbGtlciB3
YWxrZXIodGhpcyk7ICF3YWxrZXIuYXRFbmQoKTsgd2Fsa2VyLmFkdmFuY2UoKSkgewogICAgICAg
ICAgICAgUmVuZGVyT2JqZWN0KiBvID0gd2Fsa2VyLmN1cnJlbnQoKTsKQEAgLTEyMDAsNyArMTI0
OCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGJvb2wgcmVsYXlv
dXRDaGlsZHJlbiwgaW50JiByZXBhaW50TG9naWNhCiAgICAgICAgICAgICAgICAgaWYgKG8tPmlz
UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgICAgICAgICBvLT5jb250YWluaW5nQmxvY2soKS0+
aW5zZXJ0UG9zaXRpb25lZE9iamVjdChib3gpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKG8t
PmlzRmxvYXRpbmcoKSkKLSAgICAgICAgICAgICAgICAgICAgZmxvYXRzLmFwcGVuZChGbG9hdFdp
dGhSZWN0KGJveCkpOworICAgICAgICAgICAgICAgICAgICBsYXlvdXRTdGF0ZS5mbG9hdHMoKS5h
cHBlbmQoRmxvYXRXaXRoUmVjdChib3gpKTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChsYXlv
dXRTdGF0ZS5pc0Z1bGxMYXlvdXQoKSB8fCBvLT5uZWVkc0xheW91dCgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIC8vIFJlcGxhY2VkIGVsZW1lbnRzCiAgICAgICAgICAgICAgICAgICAgIHRvUmVu
ZGVyQm94KG8pLT5kaXJ0eUxpbmVCb3hlcyhsYXlvdXRTdGF0ZS5pc0Z1bGxMYXlvdXQoKSk7CkBA
IC0xMjE1LDcgKzEyNjMsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJl
bihib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCYgcmVwYWludExvZ2ljYQogICAgICAgICAgICAg
fQogICAgICAgICB9CiAKLSAgICAgICAgbGF5b3V0UnVuc0FuZEZsb2F0cyhsYXlvdXRTdGF0ZSwg
aGFzSW5saW5lQ2hpbGQsIGZsb2F0cyk7CisgICAgICAgIGxheW91dFJ1bnNBbmRGbG9hdHMobGF5
b3V0U3RhdGUsIGhhc0lubGluZUNoaWxkKTsKICAgICB9CiAKICAgICAvLyBFeHBhbmQgdGhlIGxh
c3QgbGluZSB0byBhY2NvbW1vZGF0ZSBSdWJ5IGFuZCBlbXBoYXNpcyBtYXJrcy4KQEAgLTEyNDAs
NyArMTI4OCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGJvb2wg
cmVsYXlvdXRDaGlsZHJlbiwgaW50JiByZXBhaW50TG9naWNhCiAgICAgICAgIGNoZWNrTGluZXNG
b3JUZXh0T3ZlcmZsb3coKTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6Y2hlY2tGbG9hdHNJbkNs
ZWFuTGluZShSb290SW5saW5lQm94KiBsaW5lLCBWZWN0b3I8RmxvYXRXaXRoUmVjdD4mIGZsb2F0
cywgc2l6ZV90JiBmbG9hdEluZGV4LCBib29sJiBlbmNvdW50ZXJlZE5ld0Zsb2F0LCBib29sJiBk
aXJ0aWVkQnlGbG9hdCkKK3ZvaWQgUmVuZGVyQmxvY2s6OmNoZWNrRmxvYXRzSW5DbGVhbkxpbmUo
Um9vdElubGluZUJveCogbGluZSwgVmVjdG9yPEZsb2F0V2l0aFJlY3Q+JiBmbG9hdHMsIHVuc2ln
bmVkJiBmbG9hdEluZGV4LCBib29sJiBlbmNvdW50ZXJlZE5ld0Zsb2F0LCBib29sJiBkaXJ0aWVk
QnlGbG9hdCkKIHsKICAgICBWZWN0b3I8UmVuZGVyQm94Kj4qIGNsZWFuTGluZUZsb2F0cyA9IGxp
bmUtPmZsb2F0c1B0cigpOwogICAgIGlmICghY2xlYW5MaW5lRmxvYXRzKQpAQCAtMTI3MSw4ICsx
MzE5LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2hlY2tGbG9hdHNJbkNsZWFuTGluZShSb290SW5s
aW5lQm94KiBsaW5lLCBWZWN0b3I8RmxvYXRXaXRoUmUKICAgICB9CiB9CiAKLVJvb3RJbmxpbmVC
b3gqIFJlbmRlckJsb2NrOjpkZXRlcm1pbmVTdGFydFBvc2l0aW9uKExpbmVMYXlvdXRTdGF0ZSYg
bGF5b3V0U3RhdGUsIExpbmVJbmZvJiBsaW5lSW5mbywgSW5saW5lQmlkaVJlc29sdmVyJiByZXNv
bHZlciwgVmVjdG9yPEZsb2F0V2l0aFJlY3Q+JiBmbG9hdHMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCYgbnVtQ2xlYW5GbG9hdHMp
CitSb290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihMaW5l
TGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyKQog
ewogICAgIFJvb3RJbmxpbmVCb3gqIGN1cnIgPSAwOwogICAgIFJvb3RJbmxpbmVCb3gqIGxhc3Qg
PSAwOwpAQCAtMTI4OSw3ICsxMzM2LDcgQEAgUm9vdElubGluZUJveCogUmVuZGVyQmxvY2s6OmRl
dGVybWluZVN0YXJ0UG9zaXRpb24oTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwKICAgICAg
ICAgICAgICAgICBwYWdpbmF0aW9uRGVsdGEgLT0gY3Vyci0+cGFnaW5hdGlvblN0cnV0KCk7CiAg
ICAgICAgICAgICAgICAgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihjdXJyLCBwYWdp
bmF0aW9uRGVsdGEpOwogICAgICAgICAgICAgICAgIGlmIChwYWdpbmF0aW9uRGVsdGEpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5zRmxvYXRzKCkgfHwgIWZsb2F0cy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5zRmxvYXRzKCkgfHwgIWxheW91
dFN0YXRlLmZsb2F0cygpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IERvIGJldHRlciBldmVudHVhbGx5LiAgRm9yIG5vdyBpZiB3ZSBldmVyIHNoaWZ0IGJl
Y2F1c2Ugb2YgcGFnaW5hdGlvbiBhbmQgZmxvYXRzIGFyZSBwcmVzZW50IGp1c3QgZ28gdG8gYSBm
dWxsIGxheW91dC4KICAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dFN0YXRlLm1hcmtGb3JG
dWxsTGF5b3V0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEzMDIsNyAr
MTM0OSw5IEBAIFJvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2NrOjpkZXRlcm1pbmVTdGFydFBvc2l0
aW9uKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsCiAKICAgICAgICAgICAgIC8vIElmIGEg
bmV3IGZsb2F0IGhhcyBiZWVuIGluc2VydGVkIGJlZm9yZSB0aGlzIGxpbmUgb3IgYmVmb3JlIGl0
cyBsYXN0IGtub3duIGZsb2F0LCBqdXN0IGRvIGEgZnVsbCBsYXlvdXQuCiAgICAgICAgICAgICBi
b29sIGVuY291bnRlcmVkTmV3RmxvYXQgPSBmYWxzZTsKLSAgICAgICAgICAgIGNoZWNrRmxvYXRz
SW5DbGVhbkxpbmUoY3VyciwgZmxvYXRzLCBmbG9hdEluZGV4LCBlbmNvdW50ZXJlZE5ld0Zsb2F0
LCBkaXJ0aWVkQnlGbG9hdCk7CisgICAgICAgICAgICB1bnNpZ25lZCBmbG9hdEluZGV4ID0gbGF5
b3V0U3RhdGUuZmxvYXRJbmRleCgpOworICAgICAgICAgICAgY2hlY2tGbG9hdHNJbkNsZWFuTGlu
ZShjdXJyLCBsYXlvdXRTdGF0ZS5mbG9hdHMoKSwgZmxvYXRJbmRleCwgZW5jb3VudGVyZWROZXdG
bG9hdCwgZGlydGllZEJ5RmxvYXQpOworICAgICAgICAgICAgbGF5b3V0U3RhdGUuc2V0RmxvYXRJ
bmRleChmbG9hdEluZGV4KTsKICAgICAgICAgICAgIGlmIChlbmNvdW50ZXJlZE5ld0Zsb2F0KQog
ICAgICAgICAgICAgICAgIGxheW91dFN0YXRlLm1hcmtGb3JGdWxsTGF5b3V0KCk7CiAKQEAgLTEz
MTAsNyArMTM1OSw3IEBAIFJvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2NrOjpkZXRlcm1pbmVTdGFy
dFBvc2l0aW9uKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgLy8gQ2hlY2sgaWYgYSBuZXcgZmxvYXQgaGFzIGJl
ZW4gaW5zZXJ0ZWQgYWZ0ZXIgdGhlIGxhc3Qga25vd24gZmxvYXQuCi0gICAgICAgIGlmICghY3Vy
ciAmJiBmbG9hdEluZGV4IDwgZmxvYXRzLnNpemUoKSkKKyAgICAgICAgaWYgKCFjdXJyICYmIGZs
b2F0SW5kZXggPCBsYXlvdXRTdGF0ZS5mbG9hdHMoKS5zaXplKCkpCiAgICAgICAgICAgICBsYXlv
dXRTdGF0ZS5tYXJrRm9yRnVsbExheW91dCgpOwogICAgIH0KIApAQCAtMTM0Nyw4ICsxMzk2LDgg
QEAgUm9vdElubGluZUJveCogUmVuZGVyQmxvY2s6OmRldGVybWluZVN0YXJ0UG9zaXRpb24oTGlu
ZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwKICAgICAgICAgbGFzdCA9IGN1cnIgPyBjdXJyLT5w
cmV2Um9vdEJveCgpIDogbGFzdFJvb3RCb3goKTsKICAgICB9CiAKLSAgICBudW1DbGVhbkZsb2F0
cyA9IDA7Ci0gICAgaWYgKCFmbG9hdHMuaXNFbXB0eSgpKSB7CisgICAgdW5zaWduZWQgbnVtQ2xl
YW5GbG9hdHMgPSAwOworICAgIGlmICghbGF5b3V0U3RhdGUuZmxvYXRzKCkuaXNFbXB0eSgpKSB7
CiAgICAgICAgIGludCBzYXZlZExvZ2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCk7CiAgICAg
ICAgIC8vIFJlc3RvcmUgZmxvYXRzIGZyb20gY2xlYW4gbGluZXMuCiAgICAgICAgIFJvb3RJbmxp
bmVCb3gqIGxpbmUgPSBmaXJzdFJvb3RCb3goKTsKQEAgLTEzNjEsNyArMTQxMCw3IEBAIFJvb3RJ
bmxpbmVCb3gqIFJlbmRlckJsb2NrOjpkZXRlcm1pbmVTdGFydFBvc2l0aW9uKExpbmVMYXlvdXRT
dGF0ZSYgbGF5b3V0U3RhdGUsCiAgICAgICAgICAgICAgICAgICAgIGZsb2F0aW5nT2JqZWN0LT5t
X29yaWdpbmF0aW5nTGluZSA9IGxpbmU7CiAgICAgICAgICAgICAgICAgICAgIHNldExvZ2ljYWxI
ZWlnaHQobG9naWNhbFRvcEZvckNoaWxkKCpmKSAtIG1hcmdpbkJlZm9yZUZvckNoaWxkKCpmKSk7
CiAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uTmV3RmxvYXRzKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChmbG9hdHNbbnVtQ2xlYW5GbG9hdHNdLm9iamVjdCA9PSAqZik7CisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChsYXlvdXRTdGF0ZS5mbG9hdHMoKVtudW1DbGVhbkZsb2F0
c10ub2JqZWN0ID09ICpmKTsKICAgICAgICAgICAgICAgICAgICAgbnVtQ2xlYW5GbG9hdHMrKzsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xMzY5LDkgKzE0MTgsMTAgQEAg
Um9vdElubGluZUJveCogUmVuZGVyQmxvY2s6OmRldGVybWluZVN0YXJ0UG9zaXRpb24oTGluZUxh
eW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwKICAgICAgICAgfQogICAgICAgICBzZXRMb2dpY2FsSGVp
Z2h0KHNhdmVkTG9naWNhbEhlaWdodCk7CiAgICAgfQorICAgIGxheW91dFN0YXRlLnNldEZsb2F0
SW5kZXgobnVtQ2xlYW5GbG9hdHMpOwogCi0gICAgbGluZUluZm8uc2V0Rmlyc3RMaW5lKCFsYXN0
KTsKLSAgICBsaW5lSW5mby5zZXRQcmV2aW91c0xpbmVCcm9rZUNsZWFubHkoIWxhc3QgfHwgbGFz
dC0+ZW5kc1dpdGhCcmVhaygpKTsKKyAgICBsYXlvdXRTdGF0ZS5saW5lSW5mbygpLnNldEZpcnN0
TGluZSghbGFzdCk7CisgICAgbGF5b3V0U3RhdGUubGluZUluZm8oKS5zZXRQcmV2aW91c0xpbmVC
cm9rZUNsZWFubHkoIWxhc3QgfHwgbGFzdC0+ZW5kc1dpdGhCcmVhaygpKTsKIAogICAgIGlmIChs
YXN0KSB7CiAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQobGFzdC0+YmxvY2tMb2dpY2FsSGVpZ2h0
KCkpOwpAQCAtMTM4NywxNiArMTQzNywxOCBAQCBSb290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6
ZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLAogICAg
IHJldHVybiBjdXJyOwogfQogCi1Sb290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6ZGV0ZXJtaW5l
RW5kUG9zaXRpb24oUm9vdElubGluZUJveCogc3RhcnRMaW5lLCBWZWN0b3I8RmxvYXRXaXRoUmVj
dD4mIGZsb2F0cywgc2l6ZV90IGZsb2F0SW5kZXgsIElubGluZUl0ZXJhdG9yJiBjbGVhbkxpbmVT
dGFydCwgQmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cywgaW50JiBsb2dpY2FsVG9wKQor
dm9pZCBSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lRW5kUG9zaXRpb24oTGluZUxheW91dFN0YXRlJiBs
YXlvdXRTdGF0ZSwgUm9vdElubGluZUJveCogc3RhcnRMaW5lLCBJbmxpbmVJdGVyYXRvciYgY2xl
YW5MaW5lU3RhcnQsIEJpZGlTdGF0dXMmIGNsZWFuTGluZUJpZGlTdGF0dXMpCiB7CisgICAgQVNT
RVJUKCFsYXlvdXRTdGF0ZS5lbmRMaW5lKCkpOworICAgIHVuc2lnbmVkIGZsb2F0SW5kZXggPSBs
YXlvdXRTdGF0ZS5mbG9hdEluZGV4KCk7CiAgICAgUm9vdElubGluZUJveCogbGFzdCA9IDA7CiAg
ICAgZm9yIChSb290SW5saW5lQm94KiBjdXJyID0gc3RhcnRMaW5lLT5uZXh0Um9vdEJveCgpOyBj
dXJyOyBjdXJyID0gY3Vyci0+bmV4dFJvb3RCb3goKSkgewogICAgICAgICBpZiAoIWN1cnItPmlz
RGlydHkoKSkgewogICAgICAgICAgICAgYm9vbCBlbmNvdW50ZXJlZE5ld0Zsb2F0ID0gZmFsc2U7
CiAgICAgICAgICAgICBib29sIGRpcnRpZWRCeUZsb2F0ID0gZmFsc2U7Ci0gICAgICAgICAgICBj
aGVja0Zsb2F0c0luQ2xlYW5MaW5lKGN1cnIsIGZsb2F0cywgZmxvYXRJbmRleCwgZW5jb3VudGVy
ZWROZXdGbG9hdCwgZGlydGllZEJ5RmxvYXQpOworICAgICAgICAgICAgY2hlY2tGbG9hdHNJbkNs
ZWFuTGluZShjdXJyLCBsYXlvdXRTdGF0ZS5mbG9hdHMoKSwgZmxvYXRJbmRleCwgZW5jb3VudGVy
ZWROZXdGbG9hdCwgZGlydGllZEJ5RmxvYXQpOwogICAgICAgICAgICAgaWYgKGVuY291bnRlcmVk
TmV3RmxvYXQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmIChjdXJyLT5pc0RpcnR5KCkpCiAgICAgICAgICAg
ICBsYXN0ID0gMDsKQEAgLTE0MDUsNyArMTQ1Nyw3IEBAIFJvb3RJbmxpbmVCb3gqIFJlbmRlckJs
b2NrOjpkZXRlcm1pbmVFbmRQb3NpdGlvbihSb290SW5saW5lQm94KiBzdGFydExpbmUsIFZlY3Rv
CiAgICAgfQogCiAgICAgaWYgKCFsYXN0KQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0
dXJuOwogCiAgICAgLy8gQXQgdGhpcyBwb2ludCwgfGxhc3R8IGlzIHRoZSBmaXJzdCBsaW5lIGlu
IGEgcnVuIG9mIGNsZWFuIGxpbmVzIHRoYXQgZW5kcyB3aXRoIHRoZSBsYXN0IGxpbmUKICAgICAv
LyBpbiB0aGUgYmxvY2suCkBAIC0xNDEzLDI5ICsxNDY1LDI5IEBAIFJvb3RJbmxpbmVCb3gqIFJl
bmRlckJsb2NrOjpkZXRlcm1pbmVFbmRQb3NpdGlvbihSb290SW5saW5lQm94KiBzdGFydExpbmUs
IFZlY3RvCiAgICAgUm9vdElubGluZUJveCogcHJldiA9IGxhc3QtPnByZXZSb290Qm94KCk7CiAg
ICAgY2xlYW5MaW5lU3RhcnQgPSBJbmxpbmVJdGVyYXRvcih0aGlzLCBwcmV2LT5saW5lQnJlYWtP
YmooKSwgcHJldi0+bGluZUJyZWFrUG9zKCkpOwogICAgIGNsZWFuTGluZUJpZGlTdGF0dXMgPSBw
cmV2LT5saW5lQnJlYWtCaWRpU3RhdHVzKCk7Ci0gICAgbG9naWNhbFRvcCA9IHByZXYtPmJsb2Nr
TG9naWNhbEhlaWdodCgpOworICAgIGxheW91dFN0YXRlLnNldEVuZExpbmVMb2dpY2FsVG9wKHBy
ZXYtPmJsb2NrTG9naWNhbEhlaWdodCgpKTsKIAogICAgIGZvciAoUm9vdElubGluZUJveCogbGlu
ZSA9IGxhc3Q7IGxpbmU7IGxpbmUgPSBsaW5lLT5uZXh0Um9vdEJveCgpKQogICAgICAgICBsaW5l
LT5leHRyYWN0TGluZSgpOyAvLyBEaXNjb25uZWN0IGFsbCBsaW5lIGJveGVzIGZyb20gdGhlaXIg
cmVuZGVyIG9iamVjdHMgd2hpbGUgcHJlc2VydmluZwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB0aGVpciBjb25uZWN0aW9ucyB0byBvbmUgYW5vdGhlci4KIAotICAgIHJldHVybiBs
YXN0OworICAgIGxheW91dFN0YXRlLnNldEVuZExpbmUobGFzdCk7CiB9CiAKLWJvb2wgUmVuZGVy
QmxvY2s6Om1hdGNoZWRFbmRMaW5lKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0
IElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBlbmRM
aW5lU3RhcnQsIGNvbnN0IEJpZGlTdGF0dXMmIGVuZExpbmVTdGF0dXMsIFJvb3RJbmxpbmVCb3gq
JiBlbmRMaW5lLCBpbnQmIGVuZExvZ2ljYWxUb3ApCitib29sIFJlbmRlckJsb2NrOjptYXRjaGVk
RW5kTGluZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBJbmxpbmVCaWRpUmVz
b2x2ZXImIHJlc29sdmVyLCBjb25zdCBJbmxpbmVJdGVyYXRvciYgZW5kTGluZVN0YXJ0LCBjb25z
dCBCaWRpU3RhdHVzJiBlbmRMaW5lU3RhdHVzKQogewogICAgIGlmIChyZXNvbHZlci5wb3NpdGlv
bigpID09IGVuZExpbmVTdGFydCkgewogICAgICAgICBpZiAocmVzb2x2ZXIuc3RhdHVzKCkgIT0g
ZW5kTGluZVN0YXR1cykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpbnQg
ZGVsdGEgPSBsb2dpY2FsSGVpZ2h0KCkgLSBlbmRMb2dpY2FsVG9wOworICAgICAgICBpbnQgZGVs
dGEgPSBsb2dpY2FsSGVpZ2h0KCkgLSBsYXlvdXRTdGF0ZS5lbmRMaW5lTG9naWNhbFRvcCgpOwog
ICAgICAgICBpZiAoIWRlbHRhIHx8ICFtX2Zsb2F0aW5nT2JqZWN0cykKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogCiAgICAgICAgIC8vIFNlZSBpZiBhbnkgZmxvYXRzIGVuZCBpbiB0aGUgcmFu
Z2UgYWxvbmcgd2hpY2ggd2Ugd2FudCB0byBzaGlmdCB0aGUgbGluZXMgdmVydGljYWxseS4KLSAg
ICAgICAgaW50IGxvZ2ljYWxUb3AgPSBtaW4obG9naWNhbEhlaWdodCgpLCBlbmRMb2dpY2FsVG9w
KTsKKyAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSBtaW4obG9naWNhbEhlaWdodCgpLCBsYXlvdXRT
dGF0ZS5lbmRMaW5lTG9naWNhbFRvcCgpKTsKIAotICAgICAgICBSb290SW5saW5lQm94KiBsYXN0
TGluZSA9IGVuZExpbmU7CisgICAgICAgIFJvb3RJbmxpbmVCb3gqIGxhc3RMaW5lID0gbGF5b3V0
U3RhdGUuZW5kTGluZSgpOwogICAgICAgICB3aGlsZSAoUm9vdElubGluZUJveCogbmV4dExpbmUg
PSBsYXN0TGluZS0+bmV4dFJvb3RCb3goKSkKICAgICAgICAgICAgIGxhc3RMaW5lID0gbmV4dExp
bmU7CiAKQEAgLTE0NTUsNyArMTUwNyw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om1hdGNoZWRFbmRM
aW5lKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IElubGluZUJpZGlSCiAgICAg
Ly8gVGhlIGZpcnN0IGNsZWFuIGxpbmUgZG9lc24ndCBtYXRjaCwgYnV0IHdlIGNhbiBjaGVjayBh
IGhhbmRmdWwgb2YgZm9sbG93aW5nIGxpbmVzIHRvIHRyeQogICAgIC8vIHRvIG1hdGNoIGJhY2sg
dXAuCiAgICAgc3RhdGljIGludCBudW1MaW5lcyA9IDg7IC8vIFRoZSAjIG9mIGxpbmVzIHdlJ3Jl
IHdpbGxpbmcgdG8gbWF0Y2ggYWdhaW5zdC4KLSAgICBSb290SW5saW5lQm94KiBsaW5lID0gZW5k
TGluZTsKKyAgICBSb290SW5saW5lQm94KiBsaW5lID0gbGF5b3V0U3RhdGUuZW5kTGluZSgpOwog
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtTGluZXMgJiYgbGluZTsgaSsrLCBsaW5lID0gbGlu
ZS0+bmV4dFJvb3RCb3goKSkgewogICAgICAgICBpZiAobGluZS0+bGluZUJyZWFrT2JqKCkgPT0g
cmVzb2x2ZXIucG9zaXRpb24oKS5tX29iaiAmJiBsaW5lLT5saW5lQnJlYWtQb3MoKSA9PSByZXNv
bHZlci5wb3NpdGlvbigpLm1fcG9zKSB7CiAgICAgICAgICAgICAvLyBXZSBoYXZlIGEgbWF0Y2gu
CkBAIC0xNDY1LDE0ICsxNTE3LDE0IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om1hdGNoZWRFbmRMaW5l
KExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IElubGluZUJpZGlSCiAKICAgICAg
ICAgICAgIC8vIFNldCBvdXIgbG9naWNhbCB0b3AgdG8gYmUgdGhlIGJsb2NrIGhlaWdodCBvZiBl
bmRMaW5lLgogICAgICAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgICAgICBlbmRMb2dp
Y2FsVG9wID0gbGluZS0+YmxvY2tMb2dpY2FsSGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgbGF5
b3V0U3RhdGUuc2V0RW5kTGluZUxvZ2ljYWxUb3AobGluZS0+YmxvY2tMb2dpY2FsSGVpZ2h0KCkp
OwogCi0gICAgICAgICAgICBpbnQgZGVsdGEgPSBsb2dpY2FsSGVpZ2h0KCkgLSBlbmRMb2dpY2Fs
VG9wOworICAgICAgICAgICAgaW50IGRlbHRhID0gbG9naWNhbEhlaWdodCgpIC0gbGF5b3V0U3Rh
dGUuZW5kTGluZUxvZ2ljYWxUb3AoKTsKICAgICAgICAgICAgIGlmIChkZWx0YSAmJiBtX2Zsb2F0
aW5nT2JqZWN0cykgewogICAgICAgICAgICAgICAgIC8vIFNlZSBpZiBhbnkgZmxvYXRzIGVuZCBp
biB0aGUgcmFuZ2UgYWxvbmcgd2hpY2ggd2Ugd2FudCB0byBzaGlmdCB0aGUgbGluZXMgdmVydGlj
YWxseS4KLSAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IG1pbihsb2dpY2FsSGVpZ2h0
KCksIGVuZExvZ2ljYWxUb3ApOworICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0gbWlu
KGxvZ2ljYWxIZWlnaHQoKSwgbGF5b3V0U3RhdGUuZW5kTGluZUxvZ2ljYWxUb3AoKSk7CiAKLSAg
ICAgICAgICAgICAgICBSb290SW5saW5lQm94KiBsYXN0TGluZSA9IGVuZExpbmU7CisgICAgICAg
ICAgICAgICAgUm9vdElubGluZUJveCogbGFzdExpbmUgPSBsYXlvdXRTdGF0ZS5lbmRMaW5lKCk7
CiAgICAgICAgICAgICAgICAgd2hpbGUgKFJvb3RJbmxpbmVCb3gqIG5leHRMaW5lID0gbGFzdExp
bmUtPm5leHRSb290Qm94KCkpCiAgICAgICAgICAgICAgICAgICAgIGxhc3RMaW5lID0gbmV4dExp
bmU7CiAKQEAgLTE0ODgsOCArMTU0MCw4IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om1hdGNoZWRFbmRM
aW5lKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IElubGluZUJpZGlSCiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIE5vdyBkZWxldGUgdGhlIGxpbmVzIHRoYXQgd2Ug
ZmFpbGVkIHRvIHN5bmMuCi0gICAgICAgICAgICBkZWxldGVMaW5lUmFuZ2UobGF5b3V0U3RhdGUs
IHJlbmRlckFyZW5hKCksIGVuZExpbmUsIHJlc3VsdCk7Ci0gICAgICAgICAgICBlbmRMaW5lID0g
cmVzdWx0OworICAgICAgICAgICAgZGVsZXRlTGluZVJhbmdlKGxheW91dFN0YXRlLCByZW5kZXJB
cmVuYSgpLCBsYXlvdXRTdGF0ZS5lbmRMaW5lKCksIHJlc3VsdCk7CisgICAgICAgICAgICBsYXlv
dXRTdGF0ZS5zZXRFbmRMaW5lKHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgICAgICB9CiAgICAgfQo=
</data>
<flag name="commit-queue"
          id="97600"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102378</attachid>
            <date>2011-07-29 11:44:03 -0700</date>
            <delta_ts>2011-08-02 07:48:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug65376_1.patch</filename>
            <type>text/plain</type>
            <size>31744</size>
            <attacher name="Alexandru Chiculita">achicu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2MzRhNGFmLi5lZDUxYmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEg
QEAKKzIwMTEtMDctMjkgIEFsZXhhbmRydSBDaGljdWxpdGEgIDxhY2hpY3VAYWRvYmUuY29tPgor
CisgICAgICAgIFNwbGl0IFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzIGludG8gbXVs
dGlwbGUgbWV0aG9kcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjUzNzYKKworICAgICAgICBFeHRyYWN0ZWQgbGF5b3V0UnVuc0FuZEZsb2F0c0luUmFu
Z2UsIGxpbmtUb0VuZExpbmVJZk5lZWRlZCBhbmQgcmVwYWludERpcnR5RmxvYXRzIG1ldGhvZHMg
YW5kIG1vdmVkCisgICAgICAgIG1vc3Qgb2YgdGhlIGxvY2FscyB0byBMaW5lTGF5b3V0U3RhdGUu
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIG5lZWRlZCBiZWNhdXNlIGl0IGlzIGp1c3QgcmVmYWN0b3JpbmcgZXhpc3RpbmcgY29k
ZS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxh
eW91dFN0YXRlOjpMaW5lTGF5b3V0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91
dFN0YXRlOjplbmRMaW5lTWF0Y2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0U3Rh
dGU6OnNldEVuZExpbmVNYXRjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRTdGF0
ZTo6Y2hlY2tGb3JGbG9hdHNGcm9tTGFzdExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxh
eW91dFN0YXRlOjpzZXRDaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpMaW5lTGF5b3V0U3RhdGU6OmxpbmVJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVM
YXlvdXRTdGF0ZTo6ZW5kTGluZUxvZ2ljYWxUb3ApOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxh
eW91dFN0YXRlOjpzZXRFbmRMaW5lTG9naWNhbFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5l
TGF5b3V0U3RhdGU6OmVuZExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFN0YXRl
OjpzZXRFbmRMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRTdGF0ZTo6bGFzdEZs
b2F0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRTdGF0ZTo6c2V0TGFzdEZsb2F0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRTdGF0ZTo6ZmxvYXRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkxpbmVMYXlvdXRTdGF0ZTo6ZmxvYXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpM
aW5lTGF5b3V0U3RhdGU6OnNldEZsb2F0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OmxheW91dFJ1bnNBbmRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpsaW5rVG9FbmRMaW5lSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OnJlcGFpbnREaXJ0eUZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6bGF5b3V0SW5saW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmRldGVybWluZVN0YXJ0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmRldGVybWluZUVuZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpt
YXRjaGVkRW5kTGluZSk6CisKIDIwMTEtMDctMjggIEx1a2UgTWFjcGhlcnNvbiAgIDxtYWNwaGVy
c29uQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZW1vdmUgcmVtYWluaW5nIHVzZXMgb2YgQ1NT
UHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhJbnRGb3JMZW5ndGgoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suaAppbmRleCBlMDUyYjc1Li41YmEwYzM2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApAQCAtNjYsNiArNjYsNyBAQCB0eXBlZGVmIHVu
c2lnbmVkIFRleHRSdW5GbGFnczsKIAogY2xhc3MgUmVuZGVyQmxvY2sgOiBwdWJsaWMgUmVuZGVy
Qm94IHsKIHB1YmxpYzoKKyAgICBmcmllbmQgY2xhc3MgTGluZUxheW91dFN0YXRlOwogICAgIFJl
bmRlckJsb2NrKE5vZGUqKTsKICAgICB2aXJ0dWFsIH5SZW5kZXJCbG9jaygpOwogCkBAIC01NDMs
OSArNTQ0LDkgQEAgcHJpdmF0ZToKICAgICB9OwogCiAgICAgdm9pZCBjaGVja0Zsb2F0c0luQ2xl
YW5MaW5lKFJvb3RJbmxpbmVCb3gqLCBWZWN0b3I8RmxvYXRXaXRoUmVjdD4mLCBzaXplX3QmIGZs
b2F0SW5kZXgsIGJvb2wmIGVuY291bnRlcmVkTmV3RmxvYXQsIGJvb2wmIGRpcnRpZWRCeUZsb2F0
KTsKLSAgICBSb290SW5saW5lQm94KiBkZXRlcm1pbmVTdGFydFBvc2l0aW9uKExpbmVMYXlvdXRT
dGF0ZSYsIExpbmVJbmZvJiwgSW5saW5lQmlkaVJlc29sdmVyJiwgVmVjdG9yPEZsb2F0V2l0aFJl
Y3Q+JiwgdW5zaWduZWQmIG51bUNsZWFuRmxvYXRzKTsKLSAgICBSb290SW5saW5lQm94KiBkZXRl
cm1pbmVFbmRQb3NpdGlvbihSb290SW5saW5lQm94KiBzdGFydEJveCwgVmVjdG9yPEZsb2F0V2l0
aFJlY3Q+Jiwgc2l6ZV90IGZsb2F0SW5kZXgsIElubGluZUl0ZXJhdG9yJiBjbGVhbkxpbmVTdGFy
dCwgQmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cywgaW50JiB5UG9zKTsKLSAgICBib29s
IG1hdGNoZWRFbmRMaW5lKExpbmVMYXlvdXRTdGF0ZSYsIGNvbnN0IElubGluZUJpZGlSZXNvbHZl
ciYsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBlbmRMaW5lU3RhcnQsIGNvbnN0IEJpZGlTdGF0dXMm
IGVuZExpbmVTdGF0dXMsIFJvb3RJbmxpbmVCb3gqJiBlbmRMaW5lLCBpbnQmIGVuZFlQb3MpOwor
ICAgIFJvb3RJbmxpbmVCb3gqIGRldGVybWluZVN0YXJ0UG9zaXRpb24oTGluZUxheW91dFN0YXRl
JiwgSW5saW5lQmlkaVJlc29sdmVyJik7CisgICAgdm9pZCBkZXRlcm1pbmVFbmRQb3NpdGlvbihM
aW5lTGF5b3V0U3RhdGUmLCBSb290SW5saW5lQm94KiBzdGFydEJveCwgSW5saW5lSXRlcmF0b3Im
IGNsZWFuTGluZVN0YXJ0LCBCaWRpU3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzKTsKKyAgICBi
b29sIG1hdGNoZWRFbmRMaW5lKExpbmVMYXlvdXRTdGF0ZSYsIGNvbnN0IElubGluZUJpZGlSZXNv
bHZlciYsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBlbmRMaW5lU3RhcnQsIGNvbnN0IEJpZGlTdGF0
dXMmIGVuZExpbmVTdGF0dXMpOwogCiAgICAgUm9vdElubGluZUJveCogY29uc3RydWN0TGluZShC
aWRpUnVuTGlzdDxCaWRpUnVuPiYsIGNvbnN0IExpbmVJbmZvJik7CiAgICAgSW5saW5lRmxvd0Jv
eCogY3JlYXRlTGluZUJveGVzKFJlbmRlck9iamVjdCosIGNvbnN0IExpbmVJbmZvJiwgSW5saW5l
Qm94KiBjaGlsZEJveCk7CkBAIC03NTAsNyArNzUxLDEwIEBAIHByaXZhdGU6CiAKICAgICAvLyBI
ZWxwZXIgZnVuY3Rpb24gZm9yIGxheW91dElubGluZUNoaWxkcmVuKCkKICAgICBSb290SW5saW5l
Qm94KiBjcmVhdGVMaW5lQm94ZXNGcm9tQmlkaVJ1bnMoQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mLCBj
b25zdCBJbmxpbmVJdGVyYXRvciYgZW5kLCBMaW5lSW5mbyYsIFZlcnRpY2FsUG9zaXRpb25DYWNo
ZSYsIEJpZGlSdW4qIHRyYWlsaW5nU3BhY2VSdW4pOwotICAgIHZvaWQgbGF5b3V0UnVuc0FuZEZs
b2F0cyhMaW5lTGF5b3V0U3RhdGUmLCBib29sIGhhc0lubGluZUNoaWxkLCBWZWN0b3I8RmxvYXRX
aXRoUmVjdD4mKTsKKyAgICB2b2lkIGxheW91dFJ1bnNBbmRGbG9hdHMoTGluZUxheW91dFN0YXRl
JiwgYm9vbCBoYXNJbmxpbmVDaGlsZCk7CisgICAgdm9pZCBsYXlvdXRSdW5zQW5kRmxvYXRzSW5S
YW5nZShMaW5lTGF5b3V0U3RhdGUmLCBJbmxpbmVCaWRpUmVzb2x2ZXImLCBjb25zdCBJbmxpbmVJ
dGVyYXRvciYgY2xlYW5MaW5lU3RhcnQsIGNvbnN0IEJpZGlTdGF0dXMmIGNsZWFuTGluZUJpZGlT
dGF0dXMpOworICAgIHZvaWQgbGlua1RvRW5kTGluZUlmTmVlZGVkKExpbmVMYXlvdXRTdGF0ZSYp
OworICAgIHN0YXRpYyB2b2lkIHJlcGFpbnREaXJ0eUZsb2F0cyhWZWN0b3I8RmxvYXRXaXRoUmVj
dD4mIGZsb2F0cyk7CiAKICAgICAvLyBQYWdpbmF0aW9uIHJvdXRpbmVzLgogICAgIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAppbmRl
eCAzMTYzMTUyLi45MDVhMzE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcApAQCAtODQxLDcgKzg0MSwxMyBAQCBSb290SW5saW5l
Qm94KiBSZW5kZXJCbG9jazo6Y3JlYXRlTGluZUJveGVzRnJvbUJpZGlSdW5zKEJpZGlSdW5MaXN0
PEJpZGlSdW4+JiBiaQogY2xhc3MgTGluZUxheW91dFN0YXRlIHsKIHB1YmxpYzoKICAgICBMaW5l
TGF5b3V0U3RhdGUoYm9vbCBmdWxsTGF5b3V0LCBpbnQmIHJlcGFpbnRMb2dpY2FsVG9wLCBpbnQm
IHJlcGFpbnRMb2dpY2FsQm90dG9tKQotICAgICAgICA6IG1faXNGdWxsTGF5b3V0KGZ1bGxMYXlv
dXQpCisgICAgICAgIDogbV9sYXN0RmxvYXQoMCkKKyAgICAgICAgLCBtX2VuZExpbmUoMCkKKyAg
ICAgICAgLCBtX2Zsb2F0SW5kZXgoMCkKKyAgICAgICAgLCBtX2VuZExpbmVMb2dpY2FsVG9wKDAp
CisgICAgICAgICwgbV9lbmRMaW5lTWF0Y2hlZChmYWxzZSkKKyAgICAgICAgLCBtX2NoZWNrRm9y
RmxvYXRzRnJvbUxhc3RMaW5lKGZhbHNlKQorICAgICAgICAsIG1faXNGdWxsTGF5b3V0KGZ1bGxM
YXlvdXQpCiAgICAgICAgICwgbV9yZXBhaW50TG9naWNhbFRvcChyZXBhaW50TG9naWNhbFRvcCkK
ICAgICAgICAgLCBtX3JlcGFpbnRMb2dpY2FsQm90dG9tKHJlcGFpbnRMb2dpY2FsQm90dG9tKQog
ICAgICAgICAsIG1fdXNlc1JlcGFpbnRCb3VuZHMoZmFsc2UpCkBAIC04NjQsOCArODcwLDQwIEBA
IHB1YmxpYzoKICAgICAgICAgbV9yZXBhaW50TG9naWNhbFRvcCA9IG1pbihtX3JlcGFpbnRMb2dp
Y2FsVG9wLCBib3gtPmxvZ2ljYWxUb3BWaXN1YWxPdmVyZmxvdygpICsgbWluKHBhZ2luYXRpb25E
ZWx0YSwgMCkpOwogICAgICAgICBtX3JlcGFpbnRMb2dpY2FsQm90dG9tID0gbWF4KG1fcmVwYWlu
dExvZ2ljYWxCb3R0b20sIGJveC0+bG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93KCkgKyBtYXgo
cGFnaW5hdGlvbkRlbHRhLCAwKSk7CiAgICAgfQorICAgIAorICAgIGJvb2wgZW5kTGluZU1hdGNo
ZWQoKSBjb25zdCB7IHJldHVybiBtX2VuZExpbmVNYXRjaGVkOyB9CisgICAgdm9pZCBzZXRFbmRM
aW5lTWF0Y2hlZChib29sIGVuZExpbmVNYXRjaGVkKSB7IG1fZW5kTGluZU1hdGNoZWQgPSBlbmRM
aW5lTWF0Y2hlZDsgfQorCisgICAgYm9vbCBjaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY2hlY2tGb3JGbG9hdHNGcm9tTGFzdExpbmU7IH0KKyAgICB2b2lkIHNl
dENoZWNrRm9yRmxvYXRzRnJvbUxhc3RMaW5lKGJvb2wgY2hlY2spIHsgbV9jaGVja0ZvckZsb2F0
c0Zyb21MYXN0TGluZSA9IGNoZWNrOyB9CisKKyAgICBMaW5lSW5mbyYgbGluZUluZm8oKSB7IHJl
dHVybiBtX2xpbmVJbmZvOyB9CisgICAgY29uc3QgTGluZUluZm8mIGxpbmVJbmZvKCkgY29uc3Qg
eyByZXR1cm4gbV9saW5lSW5mbzsgfQorCisgICAgaW50IGVuZExpbmVMb2dpY2FsVG9wKCkgY29u
c3QgeyByZXR1cm4gbV9lbmRMaW5lTG9naWNhbFRvcDsgfQorICAgIHZvaWQgc2V0RW5kTGluZUxv
Z2ljYWxUb3AoaW50IGxvZ2ljYWxUb3ApIHsgbV9lbmRMaW5lTG9naWNhbFRvcCA9IGxvZ2ljYWxU
b3A7IH0KIAorICAgIFJvb3RJbmxpbmVCb3gqIGVuZExpbmUoKSBjb25zdCB7IHJldHVybiBtX2Vu
ZExpbmU7IH0KKyAgICB2b2lkIHNldEVuZExpbmUoUm9vdElubGluZUJveCogbGluZSkgeyBtX2Vu
ZExpbmUgPSBsaW5lOyB9CisKKyAgICBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3QqIGxhc3RG
bG9hdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdEZsb2F0OyB9CisgICAgdm9pZCBzZXRMYXN0Rmxv
YXQoUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQpIHsgbV9sYXN0RmxvYXQg
PSBsYXN0RmxvYXQ7IH0KKworICAgIFZlY3RvcjxSZW5kZXJCbG9jazo6RmxvYXRXaXRoUmVjdD4m
IGZsb2F0cygpIHsgcmV0dXJuIG1fZmxvYXRzOyB9CisgICAgCisgICAgdW5zaWduZWQgZmxvYXRJ
bmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZmxvYXRJbmRleDsgfQorICAgIHZvaWQgc2V0RmxvYXRJ
bmRleCh1bnNpZ25lZCBmbG9hdEluZGV4KSB7IG1fZmxvYXRJbmRleCA9IGZsb2F0SW5kZXg7IH0K
KyAgICAKIHByaXZhdGU6CisgICAgVmVjdG9yPFJlbmRlckJsb2NrOjpGbG9hdFdpdGhSZWN0PiBt
X2Zsb2F0czsKKyAgICBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3QqIG1fbGFzdEZsb2F0Owor
ICAgIFJvb3RJbmxpbmVCb3gqIG1fZW5kTGluZTsKKyAgICBMaW5lSW5mbyBtX2xpbmVJbmZvOwor
ICAgIHVuc2lnbmVkIG1fZmxvYXRJbmRleDsKKyAgICBpbnQgbV9lbmRMaW5lTG9naWNhbFRvcDsK
KyAgICBib29sIG1fZW5kTGluZU1hdGNoZWQ7CisgICAgYm9vbCBtX2NoZWNrRm9yRmxvYXRzRnJv
bUxhc3RMaW5lOworICAgIAogICAgIGJvb2wgbV9pc0Z1bGxMYXlvdXQ7CiAKICAgICAvLyBGSVhN
RTogU2hvdWxkIHRoaXMgYmUgYSByYW5nZSBvYmplY3QgaW5zdGVhZCBvZiB0d28gaW50cz8KQEAg
LTg4OCwxMyArOTI2LDExIEBAIHN0YXRpYyB2b2lkIGRlbGV0ZUxpbmVSYW5nZShMaW5lTGF5b3V0
U3RhdGUmIGxheW91dFN0YXRlLCBSZW5kZXJBcmVuYSogYXJlbmEsIFJvCiAgICAgfQogfQogCi12
b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzKExpbmVMYXlvdXRTdGF0ZSYgbGF5
b3V0U3RhdGUsIGJvb2wgaGFzSW5saW5lQ2hpbGQsIFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYgZmxv
YXRzKQordm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0cyhMaW5lTGF5b3V0U3Rh
dGUmIGxheW91dFN0YXRlLCBib29sIGhhc0lubGluZUNoaWxkKQogewogICAgIC8vIFdlIHdhbnQg
dG8gc2tpcCBhaGVhZCB0byB0aGUgZmlyc3QgZGlydHkgbGluZQogICAgIElubGluZUJpZGlSZXNv
bHZlciByZXNvbHZlcjsKLSAgICB1bnNpZ25lZCBmbG9hdEluZGV4OwotICAgIExpbmVJbmZvIGxp
bmVJbmZvOwotICAgIFJvb3RJbmxpbmVCb3gqIHN0YXJ0TGluZSA9IGRldGVybWluZVN0YXJ0UG9z
aXRpb24obGF5b3V0U3RhdGUsIGxpbmVJbmZvLCByZXNvbHZlciwgZmxvYXRzLCBmbG9hdEluZGV4
KTsKKyAgICBSb290SW5saW5lQm94KiBzdGFydExpbmUgPSBkZXRlcm1pbmVTdGFydFBvc2l0aW9u
KGxheW91dFN0YXRlLCByZXNvbHZlcik7CiAKICAgICAvLyBGSVhNRTogVGhpcyB3b3VsZCBtYWtl
IG1vcmUgc2Vuc2Ugb3V0c2lkZSBvZiB0aGlzIGZ1bmN0aW9uLCBidXQgc2luY2UKICAgICAvLyBk
ZXRlcm1pbmVTdGFydFBvc2l0aW9uIGNhbiBjaGFuZ2UgdGhlIGZ1bGxMYXlvdXQgZmxhZyB3ZSBo
YXZlIHRvIGRvIHRoaXMgaGVyZS4gRmFpbHVyZSB0byBjYWxsCkBAIC05MTIsMTcgKzk0OCwxNSBA
QCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzKExpbmVMYXlvdXRTdGF0ZSYg
bGF5b3V0U3RhdGUsIGJvb2wgaGFzSW5saQogICAgICAgICB9CiAgICAgfQogCi0gICAgRmxvYXRp
bmdPYmplY3QqIGxhc3RGbG9hdCA9IChtX2Zsb2F0aW5nT2JqZWN0cyAmJiAhbV9mbG9hdGluZ09i
amVjdHMtPnNldCgpLmlzRW1wdHkoKSkgPyBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkubGFzdCgp
IDogMDsKLQotICAgIExpbmVNaWRwb2ludFN0YXRlJiBsaW5lTWlkcG9pbnRTdGF0ZSA9IHJlc29s
dmVyLm1pZHBvaW50U3RhdGUoKTsKKyAgICBpZiAobV9mbG9hdGluZ09iamVjdHMgJiYgIW1fZmxv
YXRpbmdPYmplY3RzLT5zZXQoKS5pc0VtcHR5KCkpCisgICAgICAgIGxheW91dFN0YXRlLnNldExh
c3RGbG9hdChtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkubGFzdCgpKTsKIAogICAgIC8vIFdlIGFs
c28gZmluZCB0aGUgZmlyc3QgY2xlYW4gbGluZSBhbmQgZXh0cmFjdCB0aGVzZSBsaW5lcy4gIFdl
IHdpbGwgYWRkIHRoZW0gYmFjawogICAgIC8vIGlmIHdlIGRldGVybWluZSB0aGF0IHdlJ3JlIGFi
bGUgdG8gc3luY2hyb25pemUgYWZ0ZXIgaGFuZGxpbmcgYWxsIG91ciBkaXJ0eSBsaW5lcy4KICAg
ICBJbmxpbmVJdGVyYXRvciBjbGVhbkxpbmVTdGFydDsKICAgICBCaWRpU3RhdHVzIGNsZWFuTGlu
ZUJpZGlTdGF0dXM7Ci0gICAgaW50IGVuZExpbmVMb2dpY2FsVG9wID0gMDsKLSAgICBSb290SW5s
aW5lQm94KiBlbmRMaW5lID0gKGxheW91dFN0YXRlLmlzRnVsbExheW91dCgpIHx8ICFzdGFydExp
bmUpID8KLSAgICAgICAgMCA6IGRldGVybWluZUVuZFBvc2l0aW9uKHN0YXJ0TGluZSwgZmxvYXRz
LCBmbG9hdEluZGV4LCBjbGVhbkxpbmVTdGFydCwgY2xlYW5MaW5lQmlkaVN0YXR1cywgZW5kTGlu
ZUxvZ2ljYWxUb3ApOworICAgIGlmICghbGF5b3V0U3RhdGUuaXNGdWxsTGF5b3V0KCkgJiYgc3Rh
cnRMaW5lKQorICAgICAgICBkZXRlcm1pbmVFbmRQb3NpdGlvbihsYXlvdXRTdGF0ZSwgc3RhcnRM
aW5lLCBjbGVhbkxpbmVTdGFydCwgY2xlYW5MaW5lQmlkaVN0YXR1cyk7CiAKICAgICBpZiAoc3Rh
cnRMaW5lKSB7CiAgICAgICAgIGlmICghbGF5b3V0U3RhdGUudXNlc1JlcGFpbnRCb3VuZHMoKSkK
QEAgLTkzMCw4ICs5NjQsNiBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRz
KExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGJvb2wgaGFzSW5saQogICAgICAgICBkZWxl
dGVMaW5lUmFuZ2UobGF5b3V0U3RhdGUsIHJlbmRlckFyZW5hKCksIHN0YXJ0TGluZSk7CiAgICAg
fQogCi0gICAgSW5saW5lSXRlcmF0b3IgZW5kID0gcmVzb2x2ZXIucG9zaXRpb24oKTsKLQogICAg
IGlmICghbGF5b3V0U3RhdGUuaXNGdWxsTGF5b3V0KCkgJiYgbGFzdFJvb3RCb3goKSAmJiBsYXN0
Um9vdEJveCgpLT5lbmRzV2l0aEJyZWFrKCkpIHsKICAgICAgICAgLy8gSWYgdGhlIGxhc3QgbGlu
ZSBiZWZvcmUgdGhlIHN0YXJ0IGxpbmUgZW5kcyB3aXRoIGEgbGluZSBicmVhayB0aGF0IGNsZWFy
IGZsb2F0cywKICAgICAgICAgLy8gYWRqdXN0IHRoZSBoZWlnaHQgYWNjb3JkaW5nbHkuCkBAIC05
NDgsMTIgKzk4MCwxNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzKExp
bmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGJvb2wgaGFzSW5saQogICAgICAgICB9CiAgICAg
fQogCi0gICAgYm9vbCBlbmRMaW5lTWF0Y2hlZCA9IGZhbHNlOwotICAgIGJvb2wgY2hlY2tGb3JF
bmRMaW5lTWF0Y2ggPSBlbmRMaW5lOwotICAgIGJvb2wgY2hlY2tGb3JGbG9hdHNGcm9tTGFzdExp
bmUgPSBmYWxzZTsKKyAgICBsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShsYXlvdXRTdGF0ZSwg
cmVzb2x2ZXIsIGNsZWFuTGluZVN0YXJ0LCBjbGVhbkxpbmVCaWRpU3RhdHVzKTsKKyAgICBsaW5r
VG9FbmRMaW5lSWZOZWVkZWQobGF5b3V0U3RhdGUpOworICAgIHJlcGFpbnREaXJ0eUZsb2F0cyhs
YXlvdXRTdGF0ZS5mbG9hdHMoKSk7Cit9CiAKK3ZvaWQgUmVuZGVyQmxvY2s6OmxheW91dFJ1bnNB
bmRGbG9hdHNJblJhbmdlKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIElubGluZUJpZGlS
ZXNvbHZlciYgcmVzb2x2ZXIsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBjbGVhbkxpbmVTdGFydCwg
Y29uc3QgQmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cykKK3sKICAgICBib29sIHBhZ2lu
YXRlZCA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKSAmJiB2aWV3KCktPmxheW91dFN0YXRlKCktPmlz
UGFnaW5hdGVkKCk7Ci0KKyAgICBMaW5lTWlkcG9pbnRTdGF0ZSYgbGluZU1pZHBvaW50U3RhdGUg
PSByZXNvbHZlci5taWRwb2ludFN0YXRlKCk7CisgICAgSW5saW5lSXRlcmF0b3IgZW5kID0gcmVz
b2x2ZXIucG9zaXRpb24oKTsKKyAgICBib29sIGNoZWNrRm9yRW5kTGluZU1hdGNoID0gbGF5b3V0
U3RhdGUuZW5kTGluZSgpOwogICAgIExpbmVCcmVha0l0ZXJhdG9ySW5mbyBsaW5lQnJlYWtJdGVy
YXRvckluZm87CiAgICAgVmVydGljYWxQb3NpdGlvbkNhY2hlIHZlcnRpY2FsUG9zaXRpb25DYWNo
ZTsKIApAQCAtOTYxLDI5ICs5OTgsMzIgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0Fu
ZEZsb2F0cyhMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBib29sIGhhc0lubGkKIAogICAg
IHdoaWxlICghZW5kLmF0RW5kKCkpIHsKICAgICAgICAgLy8gRklYTUU6IElzIHRoaXMgY2hlY2sg
bmVjZXNzYXJ5IGJlZm9yZSB0aGUgZmlyc3QgaXRlcmF0aW9uIG9yIGNhbiBpdCBiZSBtb3ZlZCB0
byB0aGUgZW5kPwotICAgICAgICBpZiAoY2hlY2tGb3JFbmRMaW5lTWF0Y2ggJiYgKGVuZExpbmVN
YXRjaGVkID0gbWF0Y2hlZEVuZExpbmUobGF5b3V0U3RhdGUsIHJlc29sdmVyLCBjbGVhbkxpbmVT
dGFydCwgY2xlYW5MaW5lQmlkaVN0YXR1cywgZW5kTGluZSwgZW5kTGluZUxvZ2ljYWxUb3ApKSkK
LSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoY2hlY2tGb3JFbmRMaW5lTWF0Y2gpIHsK
KyAgICAgICAgICAgIGxheW91dFN0YXRlLnNldEVuZExpbmVNYXRjaGVkKG1hdGNoZWRFbmRMaW5l
KGxheW91dFN0YXRlLCByZXNvbHZlciwgY2xlYW5MaW5lU3RhcnQsIGNsZWFuTGluZUJpZGlTdGF0
dXMpKTsKKyAgICAgICAgICAgIGlmIChsYXlvdXRTdGF0ZS5lbmRMaW5lTWF0Y2hlZCgpKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAKICAgICAgICAgbGluZU1pZHBvaW50U3Rh
dGUucmVzZXQoKTsKIAotICAgICAgICBsaW5lSW5mby5zZXRFbXB0eSh0cnVlKTsKKyAgICAgICAg
bGF5b3V0U3RhdGUubGluZUluZm8oKS5zZXRFbXB0eSh0cnVlKTsKIAogICAgICAgICBJbmxpbmVJ
dGVyYXRvciBvbGRFbmQgPSBlbmQ7Ci0gICAgICAgIGJvb2wgaXNOZXdVQkFQYXJhZ3JhcGggPSBs
aW5lSW5mby5wcmV2aW91c0xpbmVCcm9rZUNsZWFubHkoKTsKKyAgICAgICAgYm9vbCBpc05ld1VC
QVBhcmFncmFwaCA9IGxheW91dFN0YXRlLmxpbmVJbmZvKCkucHJldmlvdXNMaW5lQnJva2VDbGVh
bmx5KCk7CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5l
ID0gKG1fZmxvYXRpbmdPYmplY3RzICYmICFtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuaXNFbXB0
eSgpKSA/IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5sYXN0KCkgOiAwOwotICAgICAgICBlbmQg
PSBsaW5lQnJlYWtlci5uZXh0TGluZUJyZWFrKHJlc29sdmVyLCBsaW5lSW5mbywgbGluZUJyZWFr
SXRlcmF0b3JJbmZvLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lKTsKKyAgICAgICAgZW5kID0g
bGluZUJyZWFrZXIubmV4dExpbmVCcmVhayhyZXNvbHZlciwgbGF5b3V0U3RhdGUubGluZUluZm8o
KSwgbGluZUJyZWFrSXRlcmF0b3JJbmZvLCBsYXN0RmxvYXRGcm9tUHJldmlvdXNMaW5lKTsKICAg
ICAgICAgaWYgKHJlc29sdmVyLnBvc2l0aW9uKCkuYXRFbmQoKSkgewogICAgICAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZG4ndCBiZSBjcmVhdGluZyBhbnkgcnVucyBpbiBmaW5kTmV4dExpbmVC
cmVhayB0byBiZWdpbiB3aXRoIQogICAgICAgICAgICAgLy8gT25jZSBCaWRpUnVuTGlzdCBpcyBz
ZXBhcmF0ZWQgZnJvbSBCaWRpUmVzb2x2ZXIgdGhpcyB3aWxsIG5vdCBiZSBuZWVkZWQuCiAgICAg
ICAgICAgICByZXNvbHZlci5ydW5zKCkuZGVsZXRlUnVucygpOwogICAgICAgICAgICAgcmVzb2x2
ZXIubWFya0N1cnJlbnRSdW5FbXB0eSgpOyAvLyBGSVhNRTogVGhpcyBjYW4gcHJvYmFibHkgYmUg
cmVwbGFjZWQgYnkgYW4gQVNTRVJUIChvciBqdXN0IHJlbW92ZWQpLgotICAgICAgICAgICAgY2hl
Y2tGb3JGbG9hdHNGcm9tTGFzdExpbmUgPSB0cnVlOworICAgICAgICAgICAgbGF5b3V0U3RhdGUu
c2V0Q2hlY2tGb3JGbG9hdHNGcm9tTGFzdExpbmUodHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBBU1NFUlQoZW5kICE9IHJlc29sdmVyLnBvc2l0aW9uKCkpOwog
CiAgICAgICAgIC8vIFRoaXMgaXMgYSBzaG9ydC1jdXQgZm9yIGVtcHR5IGxpbmVzLgotICAgICAg
ICBpZiAobGluZUluZm8uaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChsYXlvdXRTdGF0ZS5saW5l
SW5mbygpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgaWYgKGxhc3RSb290Qm94KCkpCiAgICAg
ICAgICAgICAgICAgbGFzdFJvb3RCb3goKS0+c2V0TGluZUJyZWFrSW5mbyhlbmQubV9vYmosIGVu
ZC5tX3BvcywgcmVzb2x2ZXIuc3RhdHVzKCkpOwogICAgICAgICB9IGVsc2UgewpAQCAtOTk2LDEw
ICsxMDM2LDEwIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dFJ1bnNBbmRGbG9hdHMoTGluZUxh
eW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgYm9vbCBoYXNJbmxpCiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAvLyBGSVhNRTogVGhpcyBvd25lcnNoaXAgaXMgcmV2ZXJzZWQuIFdlIHNob3VsZCBv
d24gdGhlIEJpZGlSdW5MaXN0IGFuZCBwYXNzIGl0IHRvIGNyZWF0ZUJpZGlSdW5zRm9yTGluZS4K
ICAgICAgICAgICAgIEJpZGlSdW5MaXN0PEJpZGlSdW4+JiBiaWRpUnVucyA9IHJlc29sdmVyLnJ1
bnMoKTsKLSAgICAgICAgICAgIHJlc29sdmVyLmNyZWF0ZUJpZGlSdW5zRm9yTGluZShlbmQsIG92
ZXJyaWRlLCBsaW5lSW5mby5wcmV2aW91c0xpbmVCcm9rZUNsZWFubHkoKSk7CisgICAgICAgICAg
ICByZXNvbHZlci5jcmVhdGVCaWRpUnVuc0ZvckxpbmUoZW5kLCBvdmVycmlkZSwgbGF5b3V0U3Rh
dGUubGluZUluZm8oKS5wcmV2aW91c0xpbmVCcm9rZUNsZWFubHkoKSk7CiAgICAgICAgICAgICBB
U1NFUlQocmVzb2x2ZXIucG9zaXRpb24oKSA9PSBlbmQpOwogCi0gICAgICAgICAgICBCaWRpUnVu
KiB0cmFpbGluZ1NwYWNlUnVuID0gIWxpbmVJbmZvLnByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSgp
ID8gaGFuZGxlVHJhaWxpbmdTcGFjZXMoYmlkaVJ1bnMsIHJlc29sdmVyLmNvbnRleHQoKSkgOiAw
OworICAgICAgICAgICAgQmlkaVJ1biogdHJhaWxpbmdTcGFjZVJ1biA9ICFsYXlvdXRTdGF0ZS5s
aW5lSW5mbygpLnByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSgpID8gaGFuZGxlVHJhaWxpbmdTcGFj
ZXMoYmlkaVJ1bnMsIHJlc29sdmVyLmNvbnRleHQoKSkgOiAwOwogCiAgICAgICAgICAgICBpZiAo
YmlkaVJ1bnMucnVuQ291bnQoKSAmJiBsaW5lQnJlYWtlci5saW5lV2FzSHlwaGVuYXRlZCgpKQog
ICAgICAgICAgICAgICAgIGJpZGlSdW5zLmxvZ2ljYWxseUxhc3RSdW4oKS0+bV9oYXNIeXBoZW4g
PSB0cnVlOwpAQCAtMTAwOSw3ICsxMDQ5LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVu
c0FuZEZsb2F0cyhMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBib29sIGhhc0lubGkKICAg
ICAgICAgICAgIC8vIGlubGluZSBmbG93IGJveGVzLgogCiAgICAgICAgICAgICBpbnQgb2xkTG9n
aWNhbEhlaWdodCA9IGxvZ2ljYWxIZWlnaHQoKTsKLSAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gq
IGxpbmVCb3ggPSBjcmVhdGVMaW5lQm94ZXNGcm9tQmlkaVJ1bnMoYmlkaVJ1bnMsIGVuZCwgbGlu
ZUluZm8sIHZlcnRpY2FsUG9zaXRpb25DYWNoZSwgdHJhaWxpbmdTcGFjZVJ1bik7CisgICAgICAg
ICAgICBSb290SW5saW5lQm94KiBsaW5lQm94ID0gY3JlYXRlTGluZUJveGVzRnJvbUJpZGlSdW5z
KGJpZGlSdW5zLCBlbmQsIGxheW91dFN0YXRlLmxpbmVJbmZvKCksIHZlcnRpY2FsUG9zaXRpb25D
YWNoZSwgdHJhaWxpbmdTcGFjZVJ1bik7CiAKICAgICAgICAgICAgIGJpZGlSdW5zLmRlbGV0ZVJ1
bnMoKTsKICAgICAgICAgICAgIHJlc29sdmVyLm1hcmtDdXJyZW50UnVuRW1wdHkoKTsgLy8gRklY
TUU6IFRoaXMgY2FuIHByb2JhYmx5IGJlIHJlcGxhY2VkIGJ5IGFuIEFTU0VSVCAob3IganVzdCBy
ZW1vdmVkKS4KQEAgLTEwMjMsMTIgKzEwNjMsMTIgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0
UnVuc0FuZEZsb2F0cyhMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBib29sIGhhc0lubGkK
ICAgICAgICAgICAgICAgICAgICAgaW50IGFkanVzdG1lbnQgPSAwOwogICAgICAgICAgICAgICAg
ICAgICBhZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKGxpbmVCb3gsIGFkanVzdG1lbnQp
OwogICAgICAgICAgICAgICAgICAgICBpZiAoYWRqdXN0bWVudCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IG9sZExpbmVXaWR0aCA9IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUo
b2xkTG9naWNhbEhlaWdodCwgbGluZUluZm8uaXNGaXJzdExpbmUoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgb2xkTGluZVdpZHRoID0gYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yTGlu
ZShvbGRMb2dpY2FsSGVpZ2h0LCBsYXlvdXRTdGF0ZS5saW5lSW5mbygpLmlzRmlyc3RMaW5lKCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgbGluZUJveC0+YWRqdXN0QmxvY2tEaXJlY3Rpb25Q
b3NpdGlvbihhZGp1c3RtZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXlvdXRT
dGF0ZS51c2VzUmVwYWludEJvdW5kcygpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxh
eW91dFN0YXRlLnVwZGF0ZVJlcGFpbnRSYW5nZUZyb21Cb3gobGluZUJveCk7CiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JMaW5lKG9sZExvZ2lj
YWxIZWlnaHQgKyBhZGp1c3RtZW50LCBsaW5lSW5mby5pc0ZpcnN0TGluZSgpKSAhPSBvbGRMaW5l
V2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGVMb2dpY2FsV2lk
dGhGb3JMaW5lKG9sZExvZ2ljYWxIZWlnaHQgKyBhZGp1c3RtZW50LCBsYXlvdXRTdGF0ZS5saW5l
SW5mbygpLmlzRmlyc3RMaW5lKCkpICE9IG9sZExpbmVXaWR0aCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gZGVsZXRlIHRoaXMgbGluZSwgcmVtb3ZlIGFsbCBm
bG9hdHMgdGhhdCBnb3QgYWRkZWQsIGFuZCBsZXQgbGluZSBsYXlvdXQgcmUtcnVuLgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxpbmVCb3gtPmRlbGV0ZUxpbmUocmVuZGVyQXJlbmEoKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRmxvYXRpbmdPYmplY3RzQmVsb3co
bGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSwgb2xkTG9naWNhbEhlaWdodCk7CkBAIC0xMDQ2LDcg
KzEwODYsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzKExpbmVMYXlv
dXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGJvb2wgaGFzSW5saQogICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsaW5lQnJlYWtlci5wb3NpdGlvbmVkT2JqZWN0cygpLnNpemUoKTsgKytp
KQogICAgICAgICAgICAgICAgIHNldFN0YXRpY1Bvc2l0aW9ucyh0aGlzLCBsaW5lQnJlYWtlci5w
b3NpdGlvbmVkT2JqZWN0cygpW2ldKTsKIAotICAgICAgICAgICAgbGluZUluZm8uc2V0Rmlyc3RM
aW5lKGZhbHNlKTsKKyAgICAgICAgICAgIGxheW91dFN0YXRlLmxpbmVJbmZvKCkuc2V0Rmlyc3RM
aW5lKGZhbHNlKTsKICAgICAgICAgICAgIG5ld0xpbmUobGluZUJyZWFrZXIuY2xlYXIoKSk7CiAg
ICAgICAgIH0KIApAQCAtMTA1NCw4ICsxMDk0LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0
UnVuc0FuZEZsb2F0cyhMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBib29sIGhhc0lubGkK
ICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxv
YXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0
b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOwogICAgICAgICAgICAgRmxvYXRpbmdP
YmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKLSAgICAgICAg
ICAgIGlmIChsYXN0RmxvYXQpIHsKLSAgICAgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0
ZXJhdG9yIGxhc3RGbG9hdEl0ZXJhdG9yID0gZmxvYXRpbmdPYmplY3RTZXQuZmluZChsYXN0Rmxv
YXQpOworICAgICAgICAgICAgaWYgKGxheW91dFN0YXRlLmxhc3RGbG9hdCgpKSB7CisgICAgICAg
ICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBsYXN0RmxvYXRJdGVyYXRvciA9IGZs
b2F0aW5nT2JqZWN0U2V0LmZpbmQobGF5b3V0U3RhdGUubGFzdEZsb2F0KCkpOwogICAgICAgICAg
ICAgICAgIEFTU0VSVChsYXN0RmxvYXRJdGVyYXRvciAhPSBlbmQpOwogICAgICAgICAgICAgICAg
ICsrbGFzdEZsb2F0SXRlcmF0b3I7CiAgICAgICAgICAgICAgICAgaXQgPSBsYXN0RmxvYXRJdGVy
YXRvcjsKQEAgLTEwNjMsMjQgKzExMDMsMjggQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVu
c0FuZEZsb2F0cyhMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBib29sIGhhc0lubGkKICAg
ICAgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgICAgICAgICBGbG9h
dGluZ09iamVjdCogZiA9ICppdDsKICAgICAgICAgICAgICAgICBhcHBlbmRGbG9hdGluZ09iamVj
dFRvTGFzdExpbmUoZik7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGYtPm1fcmVuZGVyZXIgPT0g
ZmxvYXRzW2Zsb2F0SW5kZXhdLm9iamVjdCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKGYtPm1f
cmVuZGVyZXIgPT0gbGF5b3V0U3RhdGUuZmxvYXRzKClbbGF5b3V0U3RhdGUuZmxvYXRJbmRleCgp
XS5vYmplY3QpOwogICAgICAgICAgICAgICAgIC8vIElmIGEgZmxvYXQncyBnZW9tZXRyeSBoYXMg
Y2hhbmdlZCwgZ2l2ZSB1cCBvbiBzeW5jaW5nIHdpdGggY2xlYW4gbGluZXMuCi0gICAgICAgICAg
ICAgICAgaWYgKGZsb2F0c1tmbG9hdEluZGV4XS5yZWN0ICE9IGYtPmZyYW1lUmVjdCgpKQorICAg
ICAgICAgICAgICAgIGlmIChsYXlvdXRTdGF0ZS5mbG9hdHMoKVtsYXlvdXRTdGF0ZS5mbG9hdElu
ZGV4KCldLnJlY3QgIT0gZi0+ZnJhbWVSZWN0KCkpCiAgICAgICAgICAgICAgICAgICAgIGNoZWNr
Rm9yRW5kTGluZU1hdGNoID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZmxvYXRJbmRleCsrOwor
ICAgICAgICAgICAgICAgIGxheW91dFN0YXRlLnNldEZsb2F0SW5kZXgobGF5b3V0U3RhdGUuZmxv
YXRJbmRleCgpICsgMSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBsYXN0RmxvYXQgPSAh
ZmxvYXRpbmdPYmplY3RTZXQuaXNFbXB0eSgpID8gZmxvYXRpbmdPYmplY3RTZXQubGFzdCgpIDog
MDsKKyAgICAgICAgICAgIGxheW91dFN0YXRlLnNldExhc3RGbG9hdCghZmxvYXRpbmdPYmplY3RT
ZXQuaXNFbXB0eSgpID8gZmxvYXRpbmdPYmplY3RTZXQubGFzdCgpIDogMCk7CiAgICAgICAgIH0K
IAogICAgICAgICBsaW5lTWlkcG9pbnRTdGF0ZS5yZXNldCgpOwogICAgICAgICByZXNvbHZlci5z
ZXRQb3NpdGlvbihlbmQpOwogICAgIH0KK30KIAotICAgIGlmIChlbmRMaW5lKSB7Ci0gICAgICAg
IGlmIChlbmRMaW5lTWF0Y2hlZCkgewordm9pZCBSZW5kZXJCbG9jazo6bGlua1RvRW5kTGluZUlm
TmVlZGVkKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUpCit7CisgICAgaWYgKGxheW91dFN0
YXRlLmVuZExpbmUoKSkgeworICAgICAgICBpZiAobGF5b3V0U3RhdGUuZW5kTGluZU1hdGNoZWQo
KSkgeworICAgICAgICAgICAgYm9vbCBwYWdpbmF0ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCkg
JiYgdmlldygpLT5sYXlvdXRTdGF0ZSgpLT5pc1BhZ2luYXRlZCgpOwogICAgICAgICAgICAgLy8g
QXR0YWNoIGFsbCB0aGUgcmVtYWluaW5nIGxpbmVzLCBhbmQgdGhlbiBhZGp1c3QgdGhlaXIgeS1w
b3NpdGlvbnMgYXMgbmVlZGVkLgotICAgICAgICAgICAgaW50IGRlbHRhID0gbG9naWNhbEhlaWdo
dCgpIC0gZW5kTGluZUxvZ2ljYWxUb3A7Ci0gICAgICAgICAgICBmb3IgKFJvb3RJbmxpbmVCb3gq
IGxpbmUgPSBlbmRMaW5lOyBsaW5lOyBsaW5lID0gbGluZS0+bmV4dFJvb3RCb3goKSkgeworICAg
ICAgICAgICAgaW50IGRlbHRhID0gbG9naWNhbEhlaWdodCgpIC0gbGF5b3V0U3RhdGUuZW5kTGlu
ZUxvZ2ljYWxUb3AoKTsKKyAgICAgICAgICAgIGZvciAoUm9vdElubGluZUJveCogbGluZSA9IGxh
eW91dFN0YXRlLmVuZExpbmUoKTsgbGluZTsgbGluZSA9IGxpbmUtPm5leHRSb290Qm94KCkpIHsK
ICAgICAgICAgICAgICAgICBsaW5lLT5hdHRhY2hMaW5lKCk7CiAgICAgICAgICAgICAgICAgaWYg
KHBhZ2luYXRlZCkgewogICAgICAgICAgICAgICAgICAgICBkZWx0YSAtPSBsaW5lLT5wYWdpbmF0
aW9uU3RydXQoKTsKQEAgLTExMDQsMTQgKzExNDgsMTUgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5
b3V0UnVuc0FuZEZsb2F0cyhMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBib29sIGhhc0lu
bGkKICAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQobGFzdFJvb3RCb3goKS0+YmxvY2tMb2dp
Y2FsSGVpZ2h0KCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gRGVsZXRlIGFs
bCB0aGUgcmVtYWluaW5nIGxpbmVzLgotICAgICAgICAgICAgZGVsZXRlTGluZVJhbmdlKGxheW91
dFN0YXRlLCByZW5kZXJBcmVuYSgpLCBlbmRMaW5lKTsKKyAgICAgICAgICAgIGRlbGV0ZUxpbmVS
YW5nZShsYXlvdXRTdGF0ZSwgcmVuZGVyQXJlbmEoKSwgbGF5b3V0U3RhdGUuZW5kTGluZSgpKTsK
ICAgICAgICAgfQogICAgIH0KLSAgICBpZiAobV9mbG9hdGluZ09iamVjdHMgJiYgKGNoZWNrRm9y
RmxvYXRzRnJvbUxhc3RMaW5lIHx8IHBvc2l0aW9uTmV3RmxvYXRzKCkpICYmIGxhc3RSb290Qm94
KCkpIHsKKyAgICAKKyAgICBpZiAobV9mbG9hdGluZ09iamVjdHMgJiYgKGxheW91dFN0YXRlLmNo
ZWNrRm9yRmxvYXRzRnJvbUxhc3RMaW5lKCkgfHwgcG9zaXRpb25OZXdGbG9hdHMoKSkgJiYgbGFz
dFJvb3RCb3goKSkgewogICAgICAgICAvLyBJbiBjYXNlIHdlIGhhdmUgYSBmbG9hdCBvbiB0aGUg
bGFzdCBsaW5lLCBpdCBtaWdodCBub3QgYmUgcG9zaXRpb25lZCB1cCB0byBub3cuCiAgICAgICAg
IC8vIFRoaXMgaGFzIHRvIGJlIGRvbmUgYmVmb3JlIGFkZGluZyBpbiB0aGUgYm90dG9tIGJvcmRl
ci9wYWRkaW5nLCBvciB0aGUgZmxvYXQgd2lsbAogICAgICAgICAvLyBpbmNsdWRlIHRoZSBwYWRk
aW5nIGluY29ycmVjdGx5LiAtZHdoCi0gICAgICAgIGlmIChjaGVja0ZvckZsb2F0c0Zyb21MYXN0
TGluZSkgeworICAgICAgICBpZiAobGF5b3V0U3RhdGUuY2hlY2tGb3JGbG9hdHNGcm9tTGFzdExp
bmUoKSkgewogICAgICAgICAgICAgaW50IGJvdHRvbVZpc3VhbE92ZXJmbG93ID0gbGFzdFJvb3RC
b3goKS0+bG9naWNhbEJvdHRvbVZpc3VhbE92ZXJmbG93KCk7CiAgICAgICAgICAgICBpbnQgYm90
dG9tTGF5b3V0T3ZlcmZsb3cgPSBsYXN0Um9vdEJveCgpLT5sb2dpY2FsQm90dG9tTGF5b3V0T3Zl
cmZsb3coKTsKICAgICAgICAgICAgIFRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveCogdHJhaWxp
bmdGbG9hdHNMaW5lQm94ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBUcmFpbGluZ0Zsb2F0c1Jvb3RJ
bmxpbmVCb3godGhpcyk7CkBAIC0xMTMwLDE2ICsxMTc1LDIwIEBAIHZvaWQgUmVuZGVyQmxvY2s6
OmxheW91dFJ1bnNBbmRGbG9hdHMoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgYm9vbCBo
YXNJbmxpCiAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1f
ZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRv
ciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0
U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7Ci0gICAgICAgIGlmIChs
YXN0RmxvYXQpIHsKLSAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgbGFzdEZs
b2F0SXRlcmF0b3IgPSBmbG9hdGluZ09iamVjdFNldC5maW5kKGxhc3RGbG9hdCk7CisgICAgICAg
IGlmIChsYXlvdXRTdGF0ZS5sYXN0RmxvYXQoKSkgeworICAgICAgICAgICAgRmxvYXRpbmdPYmpl
Y3RTZXRJdGVyYXRvciBsYXN0RmxvYXRJdGVyYXRvciA9IGZsb2F0aW5nT2JqZWN0U2V0LmZpbmQo
bGF5b3V0U3RhdGUubGFzdEZsb2F0KCkpOwogICAgICAgICAgICAgQVNTRVJUKGxhc3RGbG9hdEl0
ZXJhdG9yICE9IGVuZCk7CiAgICAgICAgICAgICArK2xhc3RGbG9hdEl0ZXJhdG9yOwogICAgICAg
ICAgICAgaXQgPSBsYXN0RmxvYXRJdGVyYXRvcjsKICAgICAgICAgfQogICAgICAgICBmb3IgKDsg
aXQgIT0gZW5kOyArK2l0KQogICAgICAgICAgICAgYXBwZW5kRmxvYXRpbmdPYmplY3RUb0xhc3RM
aW5lKCppdCk7Ci0gICAgICAgIGxhc3RGbG9hdCA9ICFmbG9hdGluZ09iamVjdFNldC5pc0VtcHR5
KCkgPyBmbG9hdGluZ09iamVjdFNldC5sYXN0KCkgOiAwOworICAgICAgICBsYXlvdXRTdGF0ZS5z
ZXRMYXN0RmxvYXQoIWZsb2F0aW5nT2JqZWN0U2V0LmlzRW1wdHkoKSA/IGZsb2F0aW5nT2JqZWN0
U2V0Lmxhc3QoKSA6IDApOwogICAgIH0KK30KKwordm9pZCBSZW5kZXJCbG9jazo6cmVwYWludERp
cnR5RmxvYXRzKFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYgZmxvYXRzKQorewogICAgIHNpemVfdCBm
bG9hdENvdW50ID0gZmxvYXRzLnNpemUoKTsKICAgICAvLyBGbG9hdHMgdGhhdCBkaWQgbm90IGhh
dmUgbGF5b3V0IGRpZCBub3QgcmVwYWludCB3aGVuIHdlIGxhaWQgdGhlbSBvdXQuIFRoZXkgd291
bGQgaGF2ZQogICAgIC8vIHBhaW50ZWQgYnkgbm93IGlmIHRoZXkgaGFkIG1vdmVkLCBidXQgaWYg
dGhleSBzdGF5ZWQgYXQgKDAsIDApLCB0aGV5IHN0aWxsIG5lZWQgdG8gYmUKQEAgLTExODAsNyAr
MTIyOSw2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGJvb2wgcmVs
YXlvdXRDaGlsZHJlbiwgaW50JiByZXBhaW50TG9naWNhCiAKICAgICBpZiAoZmlyc3RDaGlsZCgp
KSB7CiAgICAgICAgIC8vIGxheW91dCByZXBsYWNlZCBlbGVtZW50cwotICAgICAgICBWZWN0b3I8
RmxvYXRXaXRoUmVjdD4gZmxvYXRzOwogICAgICAgICBib29sIGhhc0lubGluZUNoaWxkID0gZmFs
c2U7CiAgICAgICAgIGZvciAoSW5saW5lV2Fsa2VyIHdhbGtlcih0aGlzKTsgIXdhbGtlci5hdEVu
ZCgpOyB3YWxrZXIuYWR2YW5jZSgpKSB7CiAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIG8gPSB3
YWxrZXIuY3VycmVudCgpOwpAQCAtMTIwMCw3ICsxMjQ4LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6
bGF5b3V0SW5saW5lQ2hpbGRyZW4oYm9vbCByZWxheW91dENoaWxkcmVuLCBpbnQmIHJlcGFpbnRM
b2dpY2EKICAgICAgICAgICAgICAgICBpZiAoby0+aXNQb3NpdGlvbmVkKCkpCiAgICAgICAgICAg
ICAgICAgICAgIG8tPmNvbnRhaW5pbmdCbG9jaygpLT5pbnNlcnRQb3NpdGlvbmVkT2JqZWN0KGJv
eCk7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoby0+aXNGbG9hdGluZygpKQotICAgICAgICAg
ICAgICAgICAgICBmbG9hdHMuYXBwZW5kKEZsb2F0V2l0aFJlY3QoYm94KSk7CisgICAgICAgICAg
ICAgICAgICAgIGxheW91dFN0YXRlLmZsb2F0cygpLmFwcGVuZChGbG9hdFdpdGhSZWN0KGJveCkp
OwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxheW91dFN0YXRlLmlzRnVsbExheW91dCgpIHx8
IG8tPm5lZWRzTGF5b3V0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gUmVwbGFjZWQgZWxl
bWVudHMKICAgICAgICAgICAgICAgICAgICAgdG9SZW5kZXJCb3gobyktPmRpcnR5TGluZUJveGVz
KGxheW91dFN0YXRlLmlzRnVsbExheW91dCgpKTsKQEAgLTEyMTUsNyArMTI2Myw3IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwg
aW50JiByZXBhaW50TG9naWNhCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBs
YXlvdXRSdW5zQW5kRmxvYXRzKGxheW91dFN0YXRlLCBoYXNJbmxpbmVDaGlsZCwgZmxvYXRzKTsK
KyAgICAgICAgbGF5b3V0UnVuc0FuZEZsb2F0cyhsYXlvdXRTdGF0ZSwgaGFzSW5saW5lQ2hpbGQp
OwogICAgIH0KIAogICAgIC8vIEV4cGFuZCB0aGUgbGFzdCBsaW5lIHRvIGFjY29tbW9kYXRlIFJ1
YnkgYW5kIGVtcGhhc2lzIG1hcmtzLgpAQCAtMTI3MSw4ICsxMzE5LDcgQEAgdm9pZCBSZW5kZXJC
bG9jazo6Y2hlY2tGbG9hdHNJbkNsZWFuTGluZShSb290SW5saW5lQm94KiBsaW5lLCBWZWN0b3I8
RmxvYXRXaXRoUmUKICAgICB9CiB9CiAKLVJvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2NrOjpkZXRl
cm1pbmVTdGFydFBvc2l0aW9uKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIExpbmVJbmZv
JiBsaW5lSW5mbywgSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZlciwgVmVjdG9yPEZsb2F0V2l0
aFJlY3Q+JiBmbG9hdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCYgbnVtQ2xlYW5GbG9hdHMpCitSb290SW5saW5lQm94KiBSZW5k
ZXJCbG9jazo6ZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0
YXRlLCBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyKQogewogICAgIFJvb3RJbmxpbmVCb3gq
IGN1cnIgPSAwOwogICAgIFJvb3RJbmxpbmVCb3gqIGxhc3QgPSAwOwpAQCAtMTI4OSw3ICsxMzM2
LDcgQEAgUm9vdElubGluZUJveCogUmVuZGVyQmxvY2s6OmRldGVybWluZVN0YXJ0UG9zaXRpb24o
TGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwKICAgICAgICAgICAgICAgICBwYWdpbmF0aW9u
RGVsdGEgLT0gY3Vyci0+cGFnaW5hdGlvblN0cnV0KCk7CiAgICAgICAgICAgICAgICAgYWRqdXN0
TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihjdXJyLCBwYWdpbmF0aW9uRGVsdGEpOwogICAgICAg
ICAgICAgICAgIGlmIChwYWdpbmF0aW9uRGVsdGEpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGNvbnRhaW5zRmxvYXRzKCkgfHwgIWZsb2F0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGNvbnRhaW5zRmxvYXRzKCkgfHwgIWxheW91dFN0YXRlLmZsb2F0cygpLmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IERvIGJldHRlciBldmVu
dHVhbGx5LiAgRm9yIG5vdyBpZiB3ZSBldmVyIHNoaWZ0IGJlY2F1c2Ugb2YgcGFnaW5hdGlvbiBh
bmQgZmxvYXRzIGFyZSBwcmVzZW50IGp1c3QgZ28gdG8gYSBmdWxsIGxheW91dC4KICAgICAgICAg
ICAgICAgICAgICAgICAgIGxheW91dFN0YXRlLm1hcmtGb3JGdWxsTGF5b3V0KCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEzMDIsNyArMTM0OSw3IEBAIFJvb3RJbmxpbmVC
b3gqIFJlbmRlckJsb2NrOjpkZXRlcm1pbmVTdGFydFBvc2l0aW9uKExpbmVMYXlvdXRTdGF0ZSYg
bGF5b3V0U3RhdGUsCiAKICAgICAgICAgICAgIC8vIElmIGEgbmV3IGZsb2F0IGhhcyBiZWVuIGlu
c2VydGVkIGJlZm9yZSB0aGlzIGxpbmUgb3IgYmVmb3JlIGl0cyBsYXN0IGtub3duIGZsb2F0LCBq
dXN0IGRvIGEgZnVsbCBsYXlvdXQuCiAgICAgICAgICAgICBib29sIGVuY291bnRlcmVkTmV3Rmxv
YXQgPSBmYWxzZTsKLSAgICAgICAgICAgIGNoZWNrRmxvYXRzSW5DbGVhbkxpbmUoY3VyciwgZmxv
YXRzLCBmbG9hdEluZGV4LCBlbmNvdW50ZXJlZE5ld0Zsb2F0LCBkaXJ0aWVkQnlGbG9hdCk7Cisg
ICAgICAgICAgICBjaGVja0Zsb2F0c0luQ2xlYW5MaW5lKGN1cnIsIGxheW91dFN0YXRlLmZsb2F0
cygpLCBmbG9hdEluZGV4LCBlbmNvdW50ZXJlZE5ld0Zsb2F0LCBkaXJ0aWVkQnlGbG9hdCk7CiAg
ICAgICAgICAgICBpZiAoZW5jb3VudGVyZWROZXdGbG9hdCkKICAgICAgICAgICAgICAgICBsYXlv
dXRTdGF0ZS5tYXJrRm9yRnVsbExheW91dCgpOwogCkBAIC0xMzEwLDcgKzEzNTcsNyBAQCBSb290
SW5saW5lQm94KiBSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihMaW5lTGF5b3V0
U3RhdGUmIGxheW91dFN0YXRlLAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIC8vIENoZWNrIGlmIGEgbmV3IGZsb2F0IGhhcyBiZWVuIGluc2VydGVkIGFmdGVyIHRo
ZSBsYXN0IGtub3duIGZsb2F0LgotICAgICAgICBpZiAoIWN1cnIgJiYgZmxvYXRJbmRleCA8IGZs
b2F0cy5zaXplKCkpCisgICAgICAgIGlmICghY3VyciAmJiBmbG9hdEluZGV4IDwgbGF5b3V0U3Rh
dGUuZmxvYXRzKCkuc2l6ZSgpKQogICAgICAgICAgICAgbGF5b3V0U3RhdGUubWFya0ZvckZ1bGxM
YXlvdXQoKTsKICAgICB9CiAKQEAgLTEzNDcsOCArMTM5NCw4IEBAIFJvb3RJbmxpbmVCb3gqIFJl
bmRlckJsb2NrOjpkZXRlcm1pbmVTdGFydFBvc2l0aW9uKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0
U3RhdGUsCiAgICAgICAgIGxhc3QgPSBjdXJyID8gY3Vyci0+cHJldlJvb3RCb3goKSA6IGxhc3RS
b290Qm94KCk7CiAgICAgfQogCi0gICAgbnVtQ2xlYW5GbG9hdHMgPSAwOwotICAgIGlmICghZmxv
YXRzLmlzRW1wdHkoKSkgeworICAgIHVuc2lnbmVkIG51bUNsZWFuRmxvYXRzID0gMDsKKyAgICBp
ZiAoIWxheW91dFN0YXRlLmZsb2F0cygpLmlzRW1wdHkoKSkgewogICAgICAgICBpbnQgc2F2ZWRM
b2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodCgpOwogICAgICAgICAvLyBSZXN0b3JlIGZsb2F0
cyBmcm9tIGNsZWFuIGxpbmVzLgogICAgICAgICBSb290SW5saW5lQm94KiBsaW5lID0gZmlyc3RS
b290Qm94KCk7CkBAIC0xMzYxLDcgKzE0MDgsNyBAQCBSb290SW5saW5lQm94KiBSZW5kZXJCbG9j
azo6ZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLAog
ICAgICAgICAgICAgICAgICAgICBmbG9hdGluZ09iamVjdC0+bV9vcmlnaW5hdGluZ0xpbmUgPSBs
aW5lOwogICAgICAgICAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxvZ2ljYWxUb3BGb3JD
aGlsZCgqZikgLSBtYXJnaW5CZWZvcmVGb3JDaGlsZCgqZikpOwogICAgICAgICAgICAgICAgICAg
ICBwb3NpdGlvbk5ld0Zsb2F0cygpOwotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZmxvYXRz
W251bUNsZWFuRmxvYXRzXS5vYmplY3QgPT0gKmYpOworICAgICAgICAgICAgICAgICAgICBBU1NF
UlQobGF5b3V0U3RhdGUuZmxvYXRzKClbbnVtQ2xlYW5GbG9hdHNdLm9iamVjdCA9PSAqZik7CiAg
ICAgICAgICAgICAgICAgICAgIG51bUNsZWFuRmxvYXRzKys7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQpAQCAtMTM2OSw5ICsxNDE2LDEwIEBAIFJvb3RJbmxpbmVCb3gqIFJlbmRl
ckJsb2NrOjpkZXRlcm1pbmVTdGFydFBvc2l0aW9uKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3Rh
dGUsCiAgICAgICAgIH0KICAgICAgICAgc2V0TG9naWNhbEhlaWdodChzYXZlZExvZ2ljYWxIZWln
aHQpOwogICAgIH0KKyAgICBsYXlvdXRTdGF0ZS5zZXRGbG9hdEluZGV4KG51bUNsZWFuRmxvYXRz
KTsKIAotICAgIGxpbmVJbmZvLnNldEZpcnN0TGluZSghbGFzdCk7Ci0gICAgbGluZUluZm8uc2V0
UHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KCFsYXN0IHx8IGxhc3QtPmVuZHNXaXRoQnJlYWsoKSk7
CisgICAgbGF5b3V0U3RhdGUubGluZUluZm8oKS5zZXRGaXJzdExpbmUoIWxhc3QpOworICAgIGxh
eW91dFN0YXRlLmxpbmVJbmZvKCkuc2V0UHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KCFsYXN0IHx8
IGxhc3QtPmVuZHNXaXRoQnJlYWsoKSk7CiAKICAgICBpZiAobGFzdCkgewogICAgICAgICBzZXRM
b2dpY2FsSGVpZ2h0KGxhc3QtPmJsb2NrTG9naWNhbEhlaWdodCgpKTsKQEAgLTEzODcsMTYgKzE0
MzUsMTggQEAgUm9vdElubGluZUJveCogUmVuZGVyQmxvY2s6OmRldGVybWluZVN0YXJ0UG9zaXRp
b24oTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwKICAgICByZXR1cm4gY3VycjsKIH0KIAot
Um9vdElubGluZUJveCogUmVuZGVyQmxvY2s6OmRldGVybWluZUVuZFBvc2l0aW9uKFJvb3RJbmxp
bmVCb3gqIHN0YXJ0TGluZSwgVmVjdG9yPEZsb2F0V2l0aFJlY3Q+JiBmbG9hdHMsIHNpemVfdCBm
bG9hdEluZGV4LCBJbmxpbmVJdGVyYXRvciYgY2xlYW5MaW5lU3RhcnQsIEJpZGlTdGF0dXMmIGNs
ZWFuTGluZUJpZGlTdGF0dXMsIGludCYgbG9naWNhbFRvcCkKK3ZvaWQgUmVuZGVyQmxvY2s6OmRl
dGVybWluZUVuZFBvc2l0aW9uKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIFJvb3RJbmxp
bmVCb3gqIHN0YXJ0TGluZSwgSW5saW5lSXRlcmF0b3ImIGNsZWFuTGluZVN0YXJ0LCBCaWRpU3Rh
dHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzKQogeworICAgIEFTU0VSVCghbGF5b3V0U3RhdGUuZW5k
TGluZSgpKTsKKyAgICBzaXplX3QgZmxvYXRJbmRleCA9IGxheW91dFN0YXRlLmZsb2F0SW5kZXgo
KTsKICAgICBSb290SW5saW5lQm94KiBsYXN0ID0gMDsKICAgICBmb3IgKFJvb3RJbmxpbmVCb3gq
IGN1cnIgPSBzdGFydExpbmUtPm5leHRSb290Qm94KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0
Um9vdEJveCgpKSB7CiAgICAgICAgIGlmICghY3Vyci0+aXNEaXJ0eSgpKSB7CiAgICAgICAgICAg
ICBib29sIGVuY291bnRlcmVkTmV3RmxvYXQgPSBmYWxzZTsKICAgICAgICAgICAgIGJvb2wgZGly
dGllZEJ5RmxvYXQgPSBmYWxzZTsKLSAgICAgICAgICAgIGNoZWNrRmxvYXRzSW5DbGVhbkxpbmUo
Y3VyciwgZmxvYXRzLCBmbG9hdEluZGV4LCBlbmNvdW50ZXJlZE5ld0Zsb2F0LCBkaXJ0aWVkQnlG
bG9hdCk7CisgICAgICAgICAgICBjaGVja0Zsb2F0c0luQ2xlYW5MaW5lKGN1cnIsIGxheW91dFN0
YXRlLmZsb2F0cygpLCBmbG9hdEluZGV4LCBlbmNvdW50ZXJlZE5ld0Zsb2F0LCBkaXJ0aWVkQnlG
bG9hdCk7CiAgICAgICAgICAgICBpZiAoZW5jb3VudGVyZWROZXdGbG9hdCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKGN1cnItPmlzRGlydHkoKSkKICAgICAgICAgICAgIGxhc3QgPSAwOwpAQCAtMTQwNSw3
ICsxNDU1LDcgQEAgUm9vdElubGluZUJveCogUmVuZGVyQmxvY2s6OmRldGVybWluZUVuZFBvc2l0
aW9uKFJvb3RJbmxpbmVCb3gqIHN0YXJ0TGluZSwgVmVjdG8KICAgICB9CiAKICAgICBpZiAoIWxh
c3QpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm47CiAKICAgICAvLyBBdCB0aGlz
IHBvaW50LCB8bGFzdHwgaXMgdGhlIGZpcnN0IGxpbmUgaW4gYSBydW4gb2YgY2xlYW4gbGluZXMg
dGhhdCBlbmRzIHdpdGggdGhlIGxhc3QgbGluZQogICAgIC8vIGluIHRoZSBibG9jay4KQEAgLTE0
MTMsMjkgKzE0NjMsMjkgQEAgUm9vdElubGluZUJveCogUmVuZGVyQmxvY2s6OmRldGVybWluZUVu
ZFBvc2l0aW9uKFJvb3RJbmxpbmVCb3gqIHN0YXJ0TGluZSwgVmVjdG8KICAgICBSb290SW5saW5l
Qm94KiBwcmV2ID0gbGFzdC0+cHJldlJvb3RCb3goKTsKICAgICBjbGVhbkxpbmVTdGFydCA9IElu
bGluZUl0ZXJhdG9yKHRoaXMsIHByZXYtPmxpbmVCcmVha09iaigpLCBwcmV2LT5saW5lQnJlYWtQ
b3MoKSk7CiAgICAgY2xlYW5MaW5lQmlkaVN0YXR1cyA9IHByZXYtPmxpbmVCcmVha0JpZGlTdGF0
dXMoKTsKLSAgICBsb2dpY2FsVG9wID0gcHJldi0+YmxvY2tMb2dpY2FsSGVpZ2h0KCk7CisgICAg
bGF5b3V0U3RhdGUuc2V0RW5kTGluZUxvZ2ljYWxUb3AocHJldi0+YmxvY2tMb2dpY2FsSGVpZ2h0
KCkpOwogCiAgICAgZm9yIChSb290SW5saW5lQm94KiBsaW5lID0gbGFzdDsgbGluZTsgbGluZSA9
IGxpbmUtPm5leHRSb290Qm94KCkpCiAgICAgICAgIGxpbmUtPmV4dHJhY3RMaW5lKCk7IC8vIERp
c2Nvbm5lY3QgYWxsIGxpbmUgYm94ZXMgZnJvbSB0aGVpciByZW5kZXIgb2JqZWN0cyB3aGlsZSBw
cmVzZXJ2aW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZWlyIGNvbm5lY3Rp
b25zIHRvIG9uZSBhbm90aGVyLgogCi0gICAgcmV0dXJuIGxhc3Q7CisgICAgbGF5b3V0U3RhdGUu
c2V0RW5kTGluZShsYXN0KTsKIH0KIAotYm9vbCBSZW5kZXJCbG9jazo6bWF0Y2hlZEVuZExpbmUo
TGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgY29uc3QgSW5saW5lQmlkaVJlc29sdmVyJiBy
ZXNvbHZlciwgY29uc3QgSW5saW5lSXRlcmF0b3ImIGVuZExpbmVTdGFydCwgY29uc3QgQmlkaVN0
YXR1cyYgZW5kTGluZVN0YXR1cywgUm9vdElubGluZUJveComIGVuZExpbmUsIGludCYgZW5kTG9n
aWNhbFRvcCkKK2Jvb2wgUmVuZGVyQmxvY2s6Om1hdGNoZWRFbmRMaW5lKExpbmVMYXlvdXRTdGF0
ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGNvbnN0
IElubGluZUl0ZXJhdG9yJiBlbmRMaW5lU3RhcnQsIGNvbnN0IEJpZGlTdGF0dXMmIGVuZExpbmVT
dGF0dXMpCiB7CiAgICAgaWYgKHJlc29sdmVyLnBvc2l0aW9uKCkgPT0gZW5kTGluZVN0YXJ0KSB7
CiAgICAgICAgIGlmIChyZXNvbHZlci5zdGF0dXMoKSAhPSBlbmRMaW5lU3RhdHVzKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGludCBkZWx0YSA9IGxvZ2ljYWxIZWlnaHQo
KSAtIGVuZExvZ2ljYWxUb3A7CisgICAgICAgIGludCBkZWx0YSA9IGxvZ2ljYWxIZWlnaHQoKSAt
IGxheW91dFN0YXRlLmVuZExpbmVMb2dpY2FsVG9wKCk7CiAgICAgICAgIGlmICghZGVsdGEgfHwg
IW1fZmxvYXRpbmdPYmplY3RzKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAg
Ly8gU2VlIGlmIGFueSBmbG9hdHMgZW5kIGluIHRoZSByYW5nZSBhbG9uZyB3aGljaCB3ZSB3YW50
IHRvIHNoaWZ0IHRoZSBsaW5lcyB2ZXJ0aWNhbGx5LgotICAgICAgICBpbnQgbG9naWNhbFRvcCA9
IG1pbihsb2dpY2FsSGVpZ2h0KCksIGVuZExvZ2ljYWxUb3ApOworICAgICAgICBpbnQgbG9naWNh
bFRvcCA9IG1pbihsb2dpY2FsSGVpZ2h0KCksIGxheW91dFN0YXRlLmVuZExpbmVMb2dpY2FsVG9w
KCkpOwogCi0gICAgICAgIFJvb3RJbmxpbmVCb3gqIGxhc3RMaW5lID0gZW5kTGluZTsKKyAgICAg
ICAgUm9vdElubGluZUJveCogbGFzdExpbmUgPSBsYXlvdXRTdGF0ZS5lbmRMaW5lKCk7CiAgICAg
ICAgIHdoaWxlIChSb290SW5saW5lQm94KiBuZXh0TGluZSA9IGxhc3RMaW5lLT5uZXh0Um9vdEJv
eCgpKQogICAgICAgICAgICAgbGFzdExpbmUgPSBuZXh0TGluZTsKIApAQCAtMTQ1NSw3ICsxNTA1
LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6bWF0Y2hlZEVuZExpbmUoTGluZUxheW91dFN0YXRlJiBs
YXlvdXRTdGF0ZSwgY29uc3QgSW5saW5lQmlkaVIKICAgICAvLyBUaGUgZmlyc3QgY2xlYW4gbGlu
ZSBkb2Vzbid0IG1hdGNoLCBidXQgd2UgY2FuIGNoZWNrIGEgaGFuZGZ1bCBvZiBmb2xsb3dpbmcg
bGluZXMgdG8gdHJ5CiAgICAgLy8gdG8gbWF0Y2ggYmFjayB1cC4KICAgICBzdGF0aWMgaW50IG51
bUxpbmVzID0gODsgLy8gVGhlICMgb2YgbGluZXMgd2UncmUgd2lsbGluZyB0byBtYXRjaCBhZ2Fp
bnN0LgotICAgIFJvb3RJbmxpbmVCb3gqIGxpbmUgPSBlbmRMaW5lOworICAgIFJvb3RJbmxpbmVC
b3gqIGxpbmUgPSBsYXlvdXRTdGF0ZS5lbmRMaW5lKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBudW1MaW5lcyAmJiBsaW5lOyBpKyssIGxpbmUgPSBsaW5lLT5uZXh0Um9vdEJveCgpKSB7CiAg
ICAgICAgIGlmIChsaW5lLT5saW5lQnJlYWtPYmooKSA9PSByZXNvbHZlci5wb3NpdGlvbigpLm1f
b2JqICYmIGxpbmUtPmxpbmVCcmVha1BvcygpID09IHJlc29sdmVyLnBvc2l0aW9uKCkubV9wb3Mp
IHsKICAgICAgICAgICAgIC8vIFdlIGhhdmUgYSBtYXRjaC4KQEAgLTE0NjUsMTQgKzE1MTUsMTQg
QEAgYm9vbCBSZW5kZXJCbG9jazo6bWF0Y2hlZEVuZExpbmUoTGluZUxheW91dFN0YXRlJiBsYXlv
dXRTdGF0ZSwgY29uc3QgSW5saW5lQmlkaVIKIAogICAgICAgICAgICAgLy8gU2V0IG91ciBsb2dp
Y2FsIHRvcCB0byBiZSB0aGUgYmxvY2sgaGVpZ2h0IG9mIGVuZExpbmUuCiAgICAgICAgICAgICBp
ZiAocmVzdWx0KQotICAgICAgICAgICAgICAgIGVuZExvZ2ljYWxUb3AgPSBsaW5lLT5ibG9ja0xv
Z2ljYWxIZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBsYXlvdXRTdGF0ZS5zZXRFbmRMaW5lTG9n
aWNhbFRvcChsaW5lLT5ibG9ja0xvZ2ljYWxIZWlnaHQoKSk7CiAKLSAgICAgICAgICAgIGludCBk
ZWx0YSA9IGxvZ2ljYWxIZWlnaHQoKSAtIGVuZExvZ2ljYWxUb3A7CisgICAgICAgICAgICBpbnQg
ZGVsdGEgPSBsb2dpY2FsSGVpZ2h0KCkgLSBsYXlvdXRTdGF0ZS5lbmRMaW5lTG9naWNhbFRvcCgp
OwogICAgICAgICAgICAgaWYgKGRlbHRhICYmIG1fZmxvYXRpbmdPYmplY3RzKSB7CiAgICAgICAg
ICAgICAgICAgLy8gU2VlIGlmIGFueSBmbG9hdHMgZW5kIGluIHRoZSByYW5nZSBhbG9uZyB3aGlj
aCB3ZSB3YW50IHRvIHNoaWZ0IHRoZSBsaW5lcyB2ZXJ0aWNhbGx5LgotICAgICAgICAgICAgICAg
IGludCBsb2dpY2FsVG9wID0gbWluKGxvZ2ljYWxIZWlnaHQoKSwgZW5kTG9naWNhbFRvcCk7Cisg
ICAgICAgICAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSBtaW4obG9naWNhbEhlaWdodCgpLCBsYXlv
dXRTdGF0ZS5lbmRMaW5lTG9naWNhbFRvcCgpKTsKIAotICAgICAgICAgICAgICAgIFJvb3RJbmxp
bmVCb3gqIGxhc3RMaW5lID0gZW5kTGluZTsKKyAgICAgICAgICAgICAgICBSb290SW5saW5lQm94
KiBsYXN0TGluZSA9IGxheW91dFN0YXRlLmVuZExpbmUoKTsKICAgICAgICAgICAgICAgICB3aGls
ZSAoUm9vdElubGluZUJveCogbmV4dExpbmUgPSBsYXN0TGluZS0+bmV4dFJvb3RCb3goKSkKICAg
ICAgICAgICAgICAgICAgICAgbGFzdExpbmUgPSBuZXh0TGluZTsKIApAQCAtMTQ4OCw4ICsxNTM4
LDggQEAgYm9vbCBSZW5kZXJCbG9jazo6bWF0Y2hlZEVuZExpbmUoTGluZUxheW91dFN0YXRlJiBs
YXlvdXRTdGF0ZSwgY29uc3QgSW5saW5lQmlkaVIKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgLy8gTm93IGRlbGV0ZSB0aGUgbGluZXMgdGhhdCB3ZSBmYWlsZWQgdG8gc3luYy4KLSAgICAg
ICAgICAgIGRlbGV0ZUxpbmVSYW5nZShsYXlvdXRTdGF0ZSwgcmVuZGVyQXJlbmEoKSwgZW5kTGlu
ZSwgcmVzdWx0KTsKLSAgICAgICAgICAgIGVuZExpbmUgPSByZXN1bHQ7CisgICAgICAgICAgICBk
ZWxldGVMaW5lUmFuZ2UobGF5b3V0U3RhdGUsIHJlbmRlckFyZW5hKCksIGxheW91dFN0YXRlLmVu
ZExpbmUoKSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGxheW91dFN0YXRlLnNldEVuZExpbmUocmVz
dWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102651</attachid>
            <date>2011-08-02 07:48:58 -0700</date>
            <delta_ts>2011-08-02 11:07:45 -0700</delta_ts>
            <desc>Rebased patch</desc>
            <filename>bug65376_2.patch</filename>
            <type>text/plain</type>
            <size>31712</size>
            <attacher name="Alexandru Chiculita">achicu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyNzBjMWMxLi5hN2EyY2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEg
QEAKKzIwMTEtMDctMjkgIEFsZXhhbmRydSBDaGljdWxpdGEgIDxhY2hpY3VAYWRvYmUuY29tPgor
CisgICAgICAgIFNwbGl0IFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzIGludG8gbXVs
dGlwbGUgbWV0aG9kcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjUzNzYKKworICAgICAgICBFeHRyYWN0ZWQgbGF5b3V0UnVuc0FuZEZsb2F0c0luUmFu
Z2UsIGxpbmtUb0VuZExpbmVJZk5lZWRlZCBhbmQgcmVwYWludERpcnR5RmxvYXRzIG1ldGhvZHMg
YW5kIG1vdmVkCisgICAgICAgIG1vc3Qgb2YgdGhlIGxvY2FscyB0byBMaW5lTGF5b3V0U3RhdGUu
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIG5lZWRlZCBiZWNhdXNlIGl0IGlzIGp1c3QgcmVmYWN0b3JpbmcgZXhpc3RpbmcgY29k
ZS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxh
eW91dFN0YXRlOjpMaW5lTGF5b3V0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91
dFN0YXRlOjplbmRMaW5lTWF0Y2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5lTGF5b3V0U3Rh
dGU6OnNldEVuZExpbmVNYXRjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRTdGF0
ZTo6Y2hlY2tGb3JGbG9hdHNGcm9tTGFzdExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxh
eW91dFN0YXRlOjpzZXRDaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpMaW5lTGF5b3V0U3RhdGU6OmxpbmVJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVM
YXlvdXRTdGF0ZTo6ZW5kTGluZUxvZ2ljYWxUb3ApOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxh
eW91dFN0YXRlOjpzZXRFbmRMaW5lTG9naWNhbFRvcCk6CisgICAgICAgIChXZWJDb3JlOjpMaW5l
TGF5b3V0U3RhdGU6OmVuZExpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TGluZUxheW91dFN0YXRl
OjpzZXRFbmRMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRTdGF0ZTo6bGFzdEZs
b2F0KToKKyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRTdGF0ZTo6c2V0TGFzdEZsb2F0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxpbmVMYXlvdXRTdGF0ZTo6ZmxvYXRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkxpbmVMYXlvdXRTdGF0ZTo6ZmxvYXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpM
aW5lTGF5b3V0U3RhdGU6OnNldEZsb2F0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OmxheW91dFJ1bnNBbmRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpsaW5rVG9FbmRMaW5lSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OnJlcGFpbnREaXJ0eUZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6bGF5b3V0SW5saW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmRldGVybWluZVN0YXJ0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmRldGVybWluZUVuZFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpt
YXRjaGVkRW5kTGluZSk6CisKIDIwMTEtMDgtMDIgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBn
b29nbGUuY29tPgogCiAgICAgICAgIE5vdCByZXZpZXdlZDogb25lIGxpbmUgaW5zcGVjdG9yIHN0
eWxlIGNoYW5nZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKaW5kZXggZDI5
NWQyMi4uNWJkZTg3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKQEAg
LTY2LDYgKzY2LDcgQEAgdHlwZWRlZiB1bnNpZ25lZCBUZXh0UnVuRmxhZ3M7CiAKIGNsYXNzIFJl
bmRlckJsb2NrIDogcHVibGljIFJlbmRlckJveCB7CiBwdWJsaWM6CisgICAgZnJpZW5kIGNsYXNz
IExpbmVMYXlvdXRTdGF0ZTsKICAgICBSZW5kZXJCbG9jayhOb2RlKik7CiAgICAgdmlydHVhbCB+
UmVuZGVyQmxvY2soKTsKIApAQCAtNTU0LDkgKzU1NSw5IEBAIHByaXZhdGU6CiAgICAgfTsKIAog
ICAgIHZvaWQgY2hlY2tGbG9hdHNJbkNsZWFuTGluZShSb290SW5saW5lQm94KiwgVmVjdG9yPEZs
b2F0V2l0aFJlY3Q+Jiwgc2l6ZV90JiBmbG9hdEluZGV4LCBib29sJiBlbmNvdW50ZXJlZE5ld0Zs
b2F0LCBib29sJiBkaXJ0aWVkQnlGbG9hdCk7Ci0gICAgUm9vdElubGluZUJveCogZGV0ZXJtaW5l
U3RhcnRQb3NpdGlvbihMaW5lTGF5b3V0U3RhdGUmLCBMaW5lSW5mbyYsIElubGluZUJpZGlSZXNv
bHZlciYsIFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYsIHVuc2lnbmVkJiBudW1DbGVhbkZsb2F0cyk7
Ci0gICAgUm9vdElubGluZUJveCogZGV0ZXJtaW5lRW5kUG9zaXRpb24oUm9vdElubGluZUJveCog
c3RhcnRCb3gsIFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYsIHNpemVfdCBmbG9hdEluZGV4LCBJbmxp
bmVJdGVyYXRvciYgY2xlYW5MaW5lU3RhcnQsIEJpZGlTdGF0dXMmIGNsZWFuTGluZUJpZGlTdGF0
dXMsIGludCYgeVBvcyk7Ci0gICAgYm9vbCBtYXRjaGVkRW5kTGluZShMaW5lTGF5b3V0U3RhdGUm
LCBjb25zdCBJbmxpbmVCaWRpUmVzb2x2ZXImLCBjb25zdCBJbmxpbmVJdGVyYXRvciYgZW5kTGlu
ZVN0YXJ0LCBjb25zdCBCaWRpU3RhdHVzJiBlbmRMaW5lU3RhdHVzLCBSb290SW5saW5lQm94KiYg
ZW5kTGluZSwgaW50JiBlbmRZUG9zKTsKKyAgICBSb290SW5saW5lQm94KiBkZXRlcm1pbmVTdGFy
dFBvc2l0aW9uKExpbmVMYXlvdXRTdGF0ZSYsIElubGluZUJpZGlSZXNvbHZlciYpOworICAgIHZv
aWQgZGV0ZXJtaW5lRW5kUG9zaXRpb24oTGluZUxheW91dFN0YXRlJiwgUm9vdElubGluZUJveCog
c3RhcnRCb3gsIElubGluZUl0ZXJhdG9yJiBjbGVhbkxpbmVTdGFydCwgQmlkaVN0YXR1cyYgY2xl
YW5MaW5lQmlkaVN0YXR1cyk7CisgICAgYm9vbCBtYXRjaGVkRW5kTGluZShMaW5lTGF5b3V0U3Rh
dGUmLCBjb25zdCBJbmxpbmVCaWRpUmVzb2x2ZXImLCBjb25zdCBJbmxpbmVJdGVyYXRvciYgZW5k
TGluZVN0YXJ0LCBjb25zdCBCaWRpU3RhdHVzJiBlbmRMaW5lU3RhdHVzKTsKIAogICAgIFJvb3RJ
bmxpbmVCb3gqIGNvbnN0cnVjdExpbmUoQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mLCBjb25zdCBMaW5l
SW5mbyYpOwogICAgIElubGluZUZsb3dCb3gqIGNyZWF0ZUxpbmVCb3hlcyhSZW5kZXJPYmplY3Qq
LCBjb25zdCBMaW5lSW5mbyYsIElubGluZUJveCogY2hpbGRCb3gpOwpAQCAtNzY3LDcgKzc2OCwx
MCBAQCBwcml2YXRlOgogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBsYXlvdXRJbmxpbmVD
aGlsZHJlbigpCiAgICAgUm9vdElubGluZUJveCogY3JlYXRlTGluZUJveGVzRnJvbUJpZGlSdW5z
KEJpZGlSdW5MaXN0PEJpZGlSdW4+JiwgY29uc3QgSW5saW5lSXRlcmF0b3ImIGVuZCwgTGluZUlu
Zm8mLCBWZXJ0aWNhbFBvc2l0aW9uQ2FjaGUmLCBCaWRpUnVuKiB0cmFpbGluZ1NwYWNlUnVuKTsK
LSAgICB2b2lkIGxheW91dFJ1bnNBbmRGbG9hdHMoTGluZUxheW91dFN0YXRlJiwgYm9vbCBoYXNJ
bmxpbmVDaGlsZCwgVmVjdG9yPEZsb2F0V2l0aFJlY3Q+Jik7CisgICAgdm9pZCBsYXlvdXRSdW5z
QW5kRmxvYXRzKExpbmVMYXlvdXRTdGF0ZSYsIGJvb2wgaGFzSW5saW5lQ2hpbGQpOworICAgIHZv
aWQgbGF5b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UoTGluZUxheW91dFN0YXRlJiwgSW5saW5lQmlk
aVJlc29sdmVyJiwgY29uc3QgSW5saW5lSXRlcmF0b3ImIGNsZWFuTGluZVN0YXJ0LCBjb25zdCBC
aWRpU3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzKTsKKyAgICB2b2lkIGxpbmtUb0VuZExpbmVJ
Zk5lZWRlZChMaW5lTGF5b3V0U3RhdGUmKTsKKyAgICBzdGF0aWMgdm9pZCByZXBhaW50RGlydHlG
bG9hdHMoVmVjdG9yPEZsb2F0V2l0aFJlY3Q+JiBmbG9hdHMpOwogCiAgICAgLy8gUGFnaW5hdGlv
biByb3V0aW5lcy4KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrTGluZUxheW91dC5jcHAKaW5kZXggNjkyOGE4Yi4uNWRjMjdjNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKQEAgLTg0
MSw3ICs4NDEsMTMgQEAgUm9vdElubGluZUJveCogUmVuZGVyQmxvY2s6OmNyZWF0ZUxpbmVCb3hl
c0Zyb21CaWRpUnVucyhCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmkKIGNsYXNzIExpbmVMYXlvdXRT
dGF0ZSB7CiBwdWJsaWM6CiAgICAgTGluZUxheW91dFN0YXRlKGJvb2wgZnVsbExheW91dCwgaW50
JiByZXBhaW50TG9naWNhbFRvcCwgaW50JiByZXBhaW50TG9naWNhbEJvdHRvbSkKLSAgICAgICAg
OiBtX2lzRnVsbExheW91dChmdWxsTGF5b3V0KQorICAgICAgICA6IG1fbGFzdEZsb2F0KDApCisg
ICAgICAgICwgbV9lbmRMaW5lKDApCisgICAgICAgICwgbV9mbG9hdEluZGV4KDApCisgICAgICAg
ICwgbV9lbmRMaW5lTG9naWNhbFRvcCgwKQorICAgICAgICAsIG1fZW5kTGluZU1hdGNoZWQoZmFs
c2UpCisgICAgICAgICwgbV9jaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZShmYWxzZSkKKyAgICAg
ICAgLCBtX2lzRnVsbExheW91dChmdWxsTGF5b3V0KQogICAgICAgICAsIG1fcmVwYWludExvZ2lj
YWxUb3AocmVwYWludExvZ2ljYWxUb3ApCiAgICAgICAgICwgbV9yZXBhaW50TG9naWNhbEJvdHRv
bShyZXBhaW50TG9naWNhbEJvdHRvbSkKICAgICAgICAgLCBtX3VzZXNSZXBhaW50Qm91bmRzKGZh
bHNlKQpAQCAtODY0LDggKzg3MCw0MCBAQCBwdWJsaWM6CiAgICAgICAgIG1fcmVwYWludExvZ2lj
YWxUb3AgPSBtaW4obV9yZXBhaW50TG9naWNhbFRvcCwgYm94LT5sb2dpY2FsVG9wVmlzdWFsT3Zl
cmZsb3coKSArIG1pbihwYWdpbmF0aW9uRGVsdGEsIDApKTsKICAgICAgICAgbV9yZXBhaW50TG9n
aWNhbEJvdHRvbSA9IG1heChtX3JlcGFpbnRMb2dpY2FsQm90dG9tLCBib3gtPmxvZ2ljYWxCb3R0
b21WaXN1YWxPdmVyZmxvdygpICsgbWF4KHBhZ2luYXRpb25EZWx0YSwgMCkpOwogICAgIH0KKyAg
ICAKKyAgICBib29sIGVuZExpbmVNYXRjaGVkKCkgY29uc3QgeyByZXR1cm4gbV9lbmRMaW5lTWF0
Y2hlZDsgfQorICAgIHZvaWQgc2V0RW5kTGluZU1hdGNoZWQoYm9vbCBlbmRMaW5lTWF0Y2hlZCkg
eyBtX2VuZExpbmVNYXRjaGVkID0gZW5kTGluZU1hdGNoZWQ7IH0KKworICAgIGJvb2wgY2hlY2tG
b3JGbG9hdHNGcm9tTGFzdExpbmUoKSBjb25zdCB7IHJldHVybiBtX2NoZWNrRm9yRmxvYXRzRnJv
bUxhc3RMaW5lOyB9CisgICAgdm9pZCBzZXRDaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZShib29s
IGNoZWNrKSB7IG1fY2hlY2tGb3JGbG9hdHNGcm9tTGFzdExpbmUgPSBjaGVjazsgfQorCisgICAg
TGluZUluZm8mIGxpbmVJbmZvKCkgeyByZXR1cm4gbV9saW5lSW5mbzsgfQorICAgIGNvbnN0IExp
bmVJbmZvJiBsaW5lSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUluZm87IH0KKworICAgIGlu
dCBlbmRMaW5lTG9naWNhbFRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kTGluZUxvZ2ljYWxUb3A7
IH0KKyAgICB2b2lkIHNldEVuZExpbmVMb2dpY2FsVG9wKGludCBsb2dpY2FsVG9wKSB7IG1fZW5k
TGluZUxvZ2ljYWxUb3AgPSBsb2dpY2FsVG9wOyB9CiAKKyAgICBSb290SW5saW5lQm94KiBlbmRM
aW5lKCkgY29uc3QgeyByZXR1cm4gbV9lbmRMaW5lOyB9CisgICAgdm9pZCBzZXRFbmRMaW5lKFJv
b3RJbmxpbmVCb3gqIGxpbmUpIHsgbV9lbmRMaW5lID0gbGluZTsgfQorCisgICAgUmVuZGVyQmxv
Y2s6OkZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQoKSBjb25zdCB7IHJldHVybiBtX2xhc3RGbG9h
dDsgfQorICAgIHZvaWQgc2V0TGFzdEZsb2F0KFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdCog
bGFzdEZsb2F0KSB7IG1fbGFzdEZsb2F0ID0gbGFzdEZsb2F0OyB9CisKKyAgICBWZWN0b3I8UmVu
ZGVyQmxvY2s6OkZsb2F0V2l0aFJlY3Q+JiBmbG9hdHMoKSB7IHJldHVybiBtX2Zsb2F0czsgfQor
ICAgIAorICAgIHVuc2lnbmVkIGZsb2F0SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2Zsb2F0SW5k
ZXg7IH0KKyAgICB2b2lkIHNldEZsb2F0SW5kZXgodW5zaWduZWQgZmxvYXRJbmRleCkgeyBtX2Zs
b2F0SW5kZXggPSBmbG9hdEluZGV4OyB9CisgICAgCiBwcml2YXRlOgorICAgIFZlY3RvcjxSZW5k
ZXJCbG9jazo6RmxvYXRXaXRoUmVjdD4gbV9mbG9hdHM7CisgICAgUmVuZGVyQmxvY2s6OkZsb2F0
aW5nT2JqZWN0KiBtX2xhc3RGbG9hdDsKKyAgICBSb290SW5saW5lQm94KiBtX2VuZExpbmU7Cisg
ICAgTGluZUluZm8gbV9saW5lSW5mbzsKKyAgICB1bnNpZ25lZCBtX2Zsb2F0SW5kZXg7CisgICAg
aW50IG1fZW5kTGluZUxvZ2ljYWxUb3A7CisgICAgYm9vbCBtX2VuZExpbmVNYXRjaGVkOworICAg
IGJvb2wgbV9jaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZTsKKyAgICAKICAgICBib29sIG1faXNG
dWxsTGF5b3V0OwogCiAgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGJlIGEgcmFuZ2Ugb2JqZWN0
IGluc3RlYWQgb2YgdHdvIGludHM/CkBAIC04ODgsMTMgKzkyNiwxMSBAQCBzdGF0aWMgdm9pZCBk
ZWxldGVMaW5lUmFuZ2UoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgUmVuZGVyQXJlbmEq
IGFyZW5hLCBSbwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0FuZEZs
b2F0cyhMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBib29sIGhhc0lubGluZUNoaWxkLCBW
ZWN0b3I8RmxvYXRXaXRoUmVjdD4mIGZsb2F0cykKK3ZvaWQgUmVuZGVyQmxvY2s6OmxheW91dFJ1
bnNBbmRGbG9hdHMoTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgYm9vbCBoYXNJbmxpbmVD
aGlsZCkKIHsKICAgICAvLyBXZSB3YW50IHRvIHNraXAgYWhlYWQgdG8gdGhlIGZpcnN0IGRpcnR5
IGxpbmUKICAgICBJbmxpbmVCaWRpUmVzb2x2ZXIgcmVzb2x2ZXI7Ci0gICAgdW5zaWduZWQgZmxv
YXRJbmRleDsKLSAgICBMaW5lSW5mbyBsaW5lSW5mbzsKLSAgICBSb290SW5saW5lQm94KiBzdGFy
dExpbmUgPSBkZXRlcm1pbmVTdGFydFBvc2l0aW9uKGxheW91dFN0YXRlLCBsaW5lSW5mbywgcmVz
b2x2ZXIsIGZsb2F0cywgZmxvYXRJbmRleCk7CisgICAgUm9vdElubGluZUJveCogc3RhcnRMaW5l
ID0gZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihsYXlvdXRTdGF0ZSwgcmVzb2x2ZXIpOwogCiAgICAg
Ly8gRklYTUU6IFRoaXMgd291bGQgbWFrZSBtb3JlIHNlbnNlIG91dHNpZGUgb2YgdGhpcyBmdW5j
dGlvbiwgYnV0IHNpbmNlCiAgICAgLy8gZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbiBjYW4gY2hhbmdl
IHRoZSBmdWxsTGF5b3V0IGZsYWcgd2UgaGF2ZSB0byBkbyB0aGlzIGhlcmUuIEZhaWx1cmUgdG8g
Y2FsbApAQCAtOTEyLDE3ICs5NDgsMTUgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0UnVuc0Fu
ZEZsb2F0cyhMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBib29sIGhhc0lubGkKICAgICAg
ICAgfQogICAgIH0KIAotICAgIEZsb2F0aW5nT2JqZWN0KiBsYXN0RmxvYXQgPSAobV9mbG9hdGlu
Z09iamVjdHMgJiYgIW1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5pc0VtcHR5KCkpID8gbV9mbG9h
dGluZ09iamVjdHMtPnNldCgpLmxhc3QoKSA6IDA7Ci0KLSAgICBMaW5lTWlkcG9pbnRTdGF0ZSYg
bGluZU1pZHBvaW50U3RhdGUgPSByZXNvbHZlci5taWRwb2ludFN0YXRlKCk7CisgICAgaWYgKG1f
ZmxvYXRpbmdPYmplY3RzICYmICFtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCkuaXNFbXB0eSgpKQor
ICAgICAgICBsYXlvdXRTdGF0ZS5zZXRMYXN0RmxvYXQobV9mbG9hdGluZ09iamVjdHMtPnNldCgp
Lmxhc3QoKSk7CiAKICAgICAvLyBXZSBhbHNvIGZpbmQgdGhlIGZpcnN0IGNsZWFuIGxpbmUgYW5k
IGV4dHJhY3QgdGhlc2UgbGluZXMuICBXZSB3aWxsIGFkZCB0aGVtIGJhY2sKICAgICAvLyBpZiB3
ZSBkZXRlcm1pbmUgdGhhdCB3ZSdyZSBhYmxlIHRvIHN5bmNocm9uaXplIGFmdGVyIGhhbmRsaW5n
IGFsbCBvdXIgZGlydHkgbGluZXMuCiAgICAgSW5saW5lSXRlcmF0b3IgY2xlYW5MaW5lU3RhcnQ7
CiAgICAgQmlkaVN0YXR1cyBjbGVhbkxpbmVCaWRpU3RhdHVzOwotICAgIGludCBlbmRMaW5lTG9n
aWNhbFRvcCA9IDA7Ci0gICAgUm9vdElubGluZUJveCogZW5kTGluZSA9IChsYXlvdXRTdGF0ZS5p
c0Z1bGxMYXlvdXQoKSB8fCAhc3RhcnRMaW5lKSA/Ci0gICAgICAgIDAgOiBkZXRlcm1pbmVFbmRQ
b3NpdGlvbihzdGFydExpbmUsIGZsb2F0cywgZmxvYXRJbmRleCwgY2xlYW5MaW5lU3RhcnQsIGNs
ZWFuTGluZUJpZGlTdGF0dXMsIGVuZExpbmVMb2dpY2FsVG9wKTsKKyAgICBpZiAoIWxheW91dFN0
YXRlLmlzRnVsbExheW91dCgpICYmIHN0YXJ0TGluZSkKKyAgICAgICAgZGV0ZXJtaW5lRW5kUG9z
aXRpb24obGF5b3V0U3RhdGUsIHN0YXJ0TGluZSwgY2xlYW5MaW5lU3RhcnQsIGNsZWFuTGluZUJp
ZGlTdGF0dXMpOwogCiAgICAgaWYgKHN0YXJ0TGluZSkgewogICAgICAgICBpZiAoIWxheW91dFN0
YXRlLnVzZXNSZXBhaW50Qm91bmRzKCkpCkBAIC05MzAsOCArOTY0LDYgQEAgdm9pZCBSZW5kZXJC
bG9jazo6bGF5b3V0UnVuc0FuZEZsb2F0cyhMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBi
b29sIGhhc0lubGkKICAgICAgICAgZGVsZXRlTGluZVJhbmdlKGxheW91dFN0YXRlLCByZW5kZXJB
cmVuYSgpLCBzdGFydExpbmUpOwogICAgIH0KIAotICAgIElubGluZUl0ZXJhdG9yIGVuZCA9IHJl
c29sdmVyLnBvc2l0aW9uKCk7Ci0KICAgICBpZiAoIWxheW91dFN0YXRlLmlzRnVsbExheW91dCgp
ICYmIGxhc3RSb290Qm94KCkgJiYgbGFzdFJvb3RCb3goKS0+ZW5kc1dpdGhCcmVhaygpKSB7CiAg
ICAgICAgIC8vIElmIHRoZSBsYXN0IGxpbmUgYmVmb3JlIHRoZSBzdGFydCBsaW5lIGVuZHMgd2l0
aCBhIGxpbmUgYnJlYWsgdGhhdCBjbGVhciBmbG9hdHMsCiAgICAgICAgIC8vIGFkanVzdCB0aGUg
aGVpZ2h0IGFjY29yZGluZ2x5LgpAQCAtOTQ4LDEyICs5ODAsMTcgQEAgdm9pZCBSZW5kZXJCbG9j
azo6bGF5b3V0UnVuc0FuZEZsb2F0cyhMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBib29s
IGhhc0lubGkKICAgICAgICAgfQogICAgIH0KIAotICAgIGJvb2wgZW5kTGluZU1hdGNoZWQgPSBm
YWxzZTsKLSAgICBib29sIGNoZWNrRm9yRW5kTGluZU1hdGNoID0gZW5kTGluZTsKLSAgICBib29s
IGNoZWNrRm9yRmxvYXRzRnJvbUxhc3RMaW5lID0gZmFsc2U7CisgICAgbGF5b3V0UnVuc0FuZEZs
b2F0c0luUmFuZ2UobGF5b3V0U3RhdGUsIHJlc29sdmVyLCBjbGVhbkxpbmVTdGFydCwgY2xlYW5M
aW5lQmlkaVN0YXR1cyk7CisgICAgbGlua1RvRW5kTGluZUlmTmVlZGVkKGxheW91dFN0YXRlKTsK
KyAgICByZXBhaW50RGlydHlGbG9hdHMobGF5b3V0U3RhdGUuZmxvYXRzKCkpOworfQogCit2b2lk
IFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzSW5SYW5nZShMaW5lTGF5b3V0U3RhdGUm
IGxheW91dFN0YXRlLCBJbmxpbmVCaWRpUmVzb2x2ZXImIHJlc29sdmVyLCBjb25zdCBJbmxpbmVJ
dGVyYXRvciYgY2xlYW5MaW5lU3RhcnQsIGNvbnN0IEJpZGlTdGF0dXMmIGNsZWFuTGluZUJpZGlT
dGF0dXMpCit7CiAgICAgYm9vbCBwYWdpbmF0ZWQgPSB2aWV3KCktPmxheW91dFN0YXRlKCkgJiYg
dmlldygpLT5sYXlvdXRTdGF0ZSgpLT5pc1BhZ2luYXRlZCgpOwotCisgICAgTGluZU1pZHBvaW50
U3RhdGUmIGxpbmVNaWRwb2ludFN0YXRlID0gcmVzb2x2ZXIubWlkcG9pbnRTdGF0ZSgpOworICAg
IElubGluZUl0ZXJhdG9yIGVuZCA9IHJlc29sdmVyLnBvc2l0aW9uKCk7CisgICAgYm9vbCBjaGVj
a0ZvckVuZExpbmVNYXRjaCA9IGxheW91dFN0YXRlLmVuZExpbmUoKTsKICAgICBMaW5lQnJlYWtJ
dGVyYXRvckluZm8gbGluZUJyZWFrSXRlcmF0b3JJbmZvOwogICAgIFZlcnRpY2FsUG9zaXRpb25D
YWNoZSB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGU7CiAKQEAgLTk2MSwyOSArOTk4LDMyIEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmxheW91dFJ1bnNBbmRGbG9hdHMoTGluZUxheW91dFN0YXRlJiBsYXlvdXRT
dGF0ZSwgYm9vbCBoYXNJbmxpCiAKICAgICB3aGlsZSAoIWVuZC5hdEVuZCgpKSB7CiAgICAgICAg
IC8vIEZJWE1FOiBJcyB0aGlzIGNoZWNrIG5lY2Vzc2FyeSBiZWZvcmUgdGhlIGZpcnN0IGl0ZXJh
dGlvbiBvciBjYW4gaXQgYmUgbW92ZWQgdG8gdGhlIGVuZD8KLSAgICAgICAgaWYgKGNoZWNrRm9y
RW5kTGluZU1hdGNoICYmIChlbmRMaW5lTWF0Y2hlZCA9IG1hdGNoZWRFbmRMaW5lKGxheW91dFN0
YXRlLCByZXNvbHZlciwgY2xlYW5MaW5lU3RhcnQsIGNsZWFuTGluZUJpZGlTdGF0dXMsIGVuZExp
bmUsIGVuZExpbmVMb2dpY2FsVG9wKSkpCi0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYg
KGNoZWNrRm9yRW5kTGluZU1hdGNoKSB7CisgICAgICAgICAgICBsYXlvdXRTdGF0ZS5zZXRFbmRM
aW5lTWF0Y2hlZChtYXRjaGVkRW5kTGluZShsYXlvdXRTdGF0ZSwgcmVzb2x2ZXIsIGNsZWFuTGlu
ZVN0YXJ0LCBjbGVhbkxpbmVCaWRpU3RhdHVzKSk7CisgICAgICAgICAgICBpZiAobGF5b3V0U3Rh
dGUuZW5kTGluZU1hdGNoZWQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQog
CiAgICAgICAgIGxpbmVNaWRwb2ludFN0YXRlLnJlc2V0KCk7CiAKLSAgICAgICAgbGluZUluZm8u
c2V0RW1wdHkodHJ1ZSk7CisgICAgICAgIGxheW91dFN0YXRlLmxpbmVJbmZvKCkuc2V0RW1wdHko
dHJ1ZSk7CiAKICAgICAgICAgSW5saW5lSXRlcmF0b3Igb2xkRW5kID0gZW5kOwotICAgICAgICBi
b29sIGlzTmV3VUJBUGFyYWdyYXBoID0gbGluZUluZm8ucHJldmlvdXNMaW5lQnJva2VDbGVhbmx5
KCk7CisgICAgICAgIGJvb2wgaXNOZXdVQkFQYXJhZ3JhcGggPSBsYXlvdXRTdGF0ZS5saW5lSW5m
bygpLnByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSgpOwogICAgICAgICBGbG9hdGluZ09iamVjdCog
bGFzdEZsb2F0RnJvbVByZXZpb3VzTGluZSA9IChtX2Zsb2F0aW5nT2JqZWN0cyAmJiAhbV9mbG9h
dGluZ09iamVjdHMtPnNldCgpLmlzRW1wdHkoKSkgPyBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCku
bGFzdCgpIDogMDsKLSAgICAgICAgZW5kID0gbGluZUJyZWFrZXIubmV4dExpbmVCcmVhayhyZXNv
bHZlciwgbGluZUluZm8sIGxpbmVCcmVha0l0ZXJhdG9ySW5mbywgbGFzdEZsb2F0RnJvbVByZXZp
b3VzTGluZSk7CisgICAgICAgIGVuZCA9IGxpbmVCcmVha2VyLm5leHRMaW5lQnJlYWsocmVzb2x2
ZXIsIGxheW91dFN0YXRlLmxpbmVJbmZvKCksIGxpbmVCcmVha0l0ZXJhdG9ySW5mbywgbGFzdEZs
b2F0RnJvbVByZXZpb3VzTGluZSk7CiAgICAgICAgIGlmIChyZXNvbHZlci5wb3NpdGlvbigpLmF0
RW5kKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgYmUgY3JlYXRpbmcg
YW55IHJ1bnMgaW4gZmluZE5leHRMaW5lQnJlYWsgdG8gYmVnaW4gd2l0aCEKICAgICAgICAgICAg
IC8vIE9uY2UgQmlkaVJ1bkxpc3QgaXMgc2VwYXJhdGVkIGZyb20gQmlkaVJlc29sdmVyIHRoaXMg
d2lsbCBub3QgYmUgbmVlZGVkLgogICAgICAgICAgICAgcmVzb2x2ZXIucnVucygpLmRlbGV0ZVJ1
bnMoKTsKICAgICAgICAgICAgIHJlc29sdmVyLm1hcmtDdXJyZW50UnVuRW1wdHkoKTsgLy8gRklY
TUU6IFRoaXMgY2FuIHByb2JhYmx5IGJlIHJlcGxhY2VkIGJ5IGFuIEFTU0VSVCAob3IganVzdCBy
ZW1vdmVkKS4KLSAgICAgICAgICAgIGNoZWNrRm9yRmxvYXRzRnJvbUxhc3RMaW5lID0gdHJ1ZTsK
KyAgICAgICAgICAgIGxheW91dFN0YXRlLnNldENoZWNrRm9yRmxvYXRzRnJvbUxhc3RMaW5lKHRy
dWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKGVuZCAh
PSByZXNvbHZlci5wb3NpdGlvbigpKTsKIAogICAgICAgICAvLyBUaGlzIGlzIGEgc2hvcnQtY3V0
IGZvciBlbXB0eSBsaW5lcy4KLSAgICAgICAgaWYgKGxpbmVJbmZvLmlzRW1wdHkoKSkgeworICAg
ICAgICBpZiAobGF5b3V0U3RhdGUubGluZUluZm8oKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAg
IGlmIChsYXN0Um9vdEJveCgpKQogICAgICAgICAgICAgICAgIGxhc3RSb290Qm94KCktPnNldExp
bmVCcmVha0luZm8oZW5kLm1fb2JqLCBlbmQubV9wb3MsIHJlc29sdmVyLnN0YXR1cygpKTsKICAg
ICAgICAgfSBlbHNlIHsKQEAgLTk5NiwxMCArMTAzNiwxMCBAQCB2b2lkIFJlbmRlckJsb2NrOjps
YXlvdXRSdW5zQW5kRmxvYXRzKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGJvb2wgaGFz
SW5saQogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgb3duZXJzaGlw
IGlzIHJldmVyc2VkLiBXZSBzaG91bGQgb3duIHRoZSBCaWRpUnVuTGlzdCBhbmQgcGFzcyBpdCB0
byBjcmVhdGVCaWRpUnVuc0ZvckxpbmUuCiAgICAgICAgICAgICBCaWRpUnVuTGlzdDxCaWRpUnVu
PiYgYmlkaVJ1bnMgPSByZXNvbHZlci5ydW5zKCk7Ci0gICAgICAgICAgICByZXNvbHZlci5jcmVh
dGVCaWRpUnVuc0ZvckxpbmUoZW5kLCBvdmVycmlkZSwgbGluZUluZm8ucHJldmlvdXNMaW5lQnJv
a2VDbGVhbmx5KCkpOworICAgICAgICAgICAgcmVzb2x2ZXIuY3JlYXRlQmlkaVJ1bnNGb3JMaW5l
KGVuZCwgb3ZlcnJpZGUsIGxheW91dFN0YXRlLmxpbmVJbmZvKCkucHJldmlvdXNMaW5lQnJva2VD
bGVhbmx5KCkpOwogICAgICAgICAgICAgQVNTRVJUKHJlc29sdmVyLnBvc2l0aW9uKCkgPT0gZW5k
KTsKIAotICAgICAgICAgICAgQmlkaVJ1biogdHJhaWxpbmdTcGFjZVJ1biA9ICFsaW5lSW5mby5w
cmV2aW91c0xpbmVCcm9rZUNsZWFubHkoKSA/IGhhbmRsZVRyYWlsaW5nU3BhY2VzKGJpZGlSdW5z
LCByZXNvbHZlci5jb250ZXh0KCkpIDogMDsKKyAgICAgICAgICAgIEJpZGlSdW4qIHRyYWlsaW5n
U3BhY2VSdW4gPSAhbGF5b3V0U3RhdGUubGluZUluZm8oKS5wcmV2aW91c0xpbmVCcm9rZUNsZWFu
bHkoKSA/IGhhbmRsZVRyYWlsaW5nU3BhY2VzKGJpZGlSdW5zLCByZXNvbHZlci5jb250ZXh0KCkp
IDogMDsKIAogICAgICAgICAgICAgaWYgKGJpZGlSdW5zLnJ1bkNvdW50KCkgJiYgbGluZUJyZWFr
ZXIubGluZVdhc0h5cGhlbmF0ZWQoKSkKICAgICAgICAgICAgICAgICBiaWRpUnVucy5sb2dpY2Fs
bHlMYXN0UnVuKCktPm1faGFzSHlwaGVuID0gdHJ1ZTsKQEAgLTEwMDksNyArMTA0OSw3IEBAIHZv
aWQgUmVuZGVyQmxvY2s6OmxheW91dFJ1bnNBbmRGbG9hdHMoTGluZUxheW91dFN0YXRlJiBsYXlv
dXRTdGF0ZSwgYm9vbCBoYXNJbmxpCiAgICAgICAgICAgICAvLyBpbmxpbmUgZmxvdyBib3hlcy4K
IAogICAgICAgICAgICAgaW50IG9sZExvZ2ljYWxIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCk7Ci0g
ICAgICAgICAgICBSb290SW5saW5lQm94KiBsaW5lQm94ID0gY3JlYXRlTGluZUJveGVzRnJvbUJp
ZGlSdW5zKGJpZGlSdW5zLCBlbmQsIGxpbmVJbmZvLCB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUsIHRy
YWlsaW5nU3BhY2VSdW4pOworICAgICAgICAgICAgUm9vdElubGluZUJveCogbGluZUJveCA9IGNy
ZWF0ZUxpbmVCb3hlc0Zyb21CaWRpUnVucyhiaWRpUnVucywgZW5kLCBsYXlvdXRTdGF0ZS5saW5l
SW5mbygpLCB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUsIHRyYWlsaW5nU3BhY2VSdW4pOwogCiAgICAg
ICAgICAgICBiaWRpUnVucy5kZWxldGVSdW5zKCk7CiAgICAgICAgICAgICByZXNvbHZlci5tYXJr
Q3VycmVudFJ1bkVtcHR5KCk7IC8vIEZJWE1FOiBUaGlzIGNhbiBwcm9iYWJseSBiZSByZXBsYWNl
ZCBieSBhbiBBU1NFUlQgKG9yIGp1c3QgcmVtb3ZlZCkuCkBAIC0xMDIzLDEyICsxMDYzLDEyIEBA
IHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dFJ1bnNBbmRGbG9hdHMoTGluZUxheW91dFN0YXRlJiBs
YXlvdXRTdGF0ZSwgYm9vbCBoYXNJbmxpCiAgICAgICAgICAgICAgICAgICAgIGludCBhZGp1c3Rt
ZW50ID0gMDsKICAgICAgICAgICAgICAgICAgICAgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5h
dGlvbihsaW5lQm94LCBhZGp1c3RtZW50KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGFkanVz
dG1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBvbGRMaW5lV2lkdGggPSBhdmFp
bGFibGVMb2dpY2FsV2lkdGhGb3JMaW5lKG9sZExvZ2ljYWxIZWlnaHQsIGxpbmVJbmZvLmlzRmly
c3RMaW5lKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9sZExpbmVXaWR0aCA9IGF2
YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUob2xkTG9naWNhbEhlaWdodCwgbGF5b3V0U3RhdGUu
bGluZUluZm8oKS5pc0ZpcnN0TGluZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVC
b3gtPmFkanVzdEJsb2NrRGlyZWN0aW9uUG9zaXRpb24oYWRqdXN0bWVudCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUudXNlc1JlcGFpbnRCb3VuZHMoKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXRTdGF0ZS51cGRhdGVSZXBhaW50UmFuZ2VGcm9t
Qm94KGxpbmVCb3gpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlTG9n
aWNhbFdpZHRoRm9yTGluZShvbGRMb2dpY2FsSGVpZ2h0ICsgYWRqdXN0bWVudCwgbGluZUluZm8u
aXNGaXJzdExpbmUoKSkgIT0gb2xkTGluZVdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoYXZhaWxhYmxlTG9naWNhbFdpZHRoRm9yTGluZShvbGRMb2dpY2FsSGVpZ2h0ICsgYWRq
dXN0bWVudCwgbGF5b3V0U3RhdGUubGluZUluZm8oKS5pc0ZpcnN0TGluZSgpKSAhPSBvbGRMaW5l
V2lkdGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGRlbGV0
ZSB0aGlzIGxpbmUsIHJlbW92ZSBhbGwgZmxvYXRzIHRoYXQgZ290IGFkZGVkLCBhbmQgbGV0IGxp
bmUgbGF5b3V0IHJlLXJ1bi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lQm94LT5k
ZWxldGVMaW5lKHJlbmRlckFyZW5hKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
bW92ZUZsb2F0aW5nT2JqZWN0c0JlbG93KGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIG9sZExv
Z2ljYWxIZWlnaHQpOwpAQCAtMTA0Niw3ICsxMDg2LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5
b3V0UnVuc0FuZEZsb2F0cyhMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBib29sIGhhc0lu
bGkKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGluZUJyZWFrZXIucG9zaXRp
b25lZE9iamVjdHMoKS5zaXplKCk7ICsraSkKICAgICAgICAgICAgICAgICBzZXRTdGF0aWNQb3Np
dGlvbnModGhpcywgbGluZUJyZWFrZXIucG9zaXRpb25lZE9iamVjdHMoKVtpXSk7CiAKLSAgICAg
ICAgICAgIGxpbmVJbmZvLnNldEZpcnN0TGluZShmYWxzZSk7CisgICAgICAgICAgICBsYXlvdXRT
dGF0ZS5saW5lSW5mbygpLnNldEZpcnN0TGluZShmYWxzZSk7CiAgICAgICAgICAgICBuZXdMaW5l
KGxpbmVCcmVha2VyLmNsZWFyKCkpOwogICAgICAgICB9CiAKQEAgLTEwNTQsOCArMTA5NCw4IEBA
IHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dFJ1bnNBbmRGbG9hdHMoTGluZUxheW91dFN0YXRlJiBs
YXlvdXRTdGF0ZSwgYm9vbCBoYXNJbmxpCiAgICAgICAgICAgICBGbG9hdGluZ09iamVjdFNldCYg
ZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgICAgICAg
ICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4o
KTsKICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdP
YmplY3RTZXQuZW5kKCk7Ci0gICAgICAgICAgICBpZiAobGFzdEZsb2F0KSB7Ci0gICAgICAgICAg
ICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBsYXN0RmxvYXRJdGVyYXRvciA9IGZsb2F0
aW5nT2JqZWN0U2V0LmZpbmQobGFzdEZsb2F0KTsKKyAgICAgICAgICAgIGlmIChsYXlvdXRTdGF0
ZS5sYXN0RmxvYXQoKSkgeworICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0
b3IgbGFzdEZsb2F0SXRlcmF0b3IgPSBmbG9hdGluZ09iamVjdFNldC5maW5kKGxheW91dFN0YXRl
Lmxhc3RGbG9hdCgpKTsKICAgICAgICAgICAgICAgICBBU1NFUlQobGFzdEZsb2F0SXRlcmF0b3Ig
IT0gZW5kKTsKICAgICAgICAgICAgICAgICArK2xhc3RGbG9hdEl0ZXJhdG9yOwogICAgICAgICAg
ICAgICAgIGl0ID0gbGFzdEZsb2F0SXRlcmF0b3I7CkBAIC0xMDYzLDI0ICsxMTAzLDI4IEBAIHZv
aWQgUmVuZGVyQmxvY2s6OmxheW91dFJ1bnNBbmRGbG9hdHMoTGluZUxheW91dFN0YXRlJiBsYXlv
dXRTdGF0ZSwgYm9vbCBoYXNJbmxpCiAgICAgICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0
KSB7CiAgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGYgPSAqaXQ7CiAgICAgICAgICAg
ICAgICAgYXBwZW5kRmxvYXRpbmdPYmplY3RUb0xhc3RMaW5lKGYpOwotICAgICAgICAgICAgICAg
IEFTU0VSVChmLT5tX3JlbmRlcmVyID09IGZsb2F0c1tmbG9hdEluZGV4XS5vYmplY3QpOworICAg
ICAgICAgICAgICAgIEFTU0VSVChmLT5tX3JlbmRlcmVyID09IGxheW91dFN0YXRlLmZsb2F0cygp
W2xheW91dFN0YXRlLmZsb2F0SW5kZXgoKV0ub2JqZWN0KTsKICAgICAgICAgICAgICAgICAvLyBJ
ZiBhIGZsb2F0J3MgZ2VvbWV0cnkgaGFzIGNoYW5nZWQsIGdpdmUgdXAgb24gc3luY2luZyB3aXRo
IGNsZWFuIGxpbmVzLgotICAgICAgICAgICAgICAgIGlmIChmbG9hdHNbZmxvYXRJbmRleF0ucmVj
dCAhPSBmLT5mcmFtZVJlY3QoKSkKKyAgICAgICAgICAgICAgICBpZiAobGF5b3V0U3RhdGUuZmxv
YXRzKClbbGF5b3V0U3RhdGUuZmxvYXRJbmRleCgpXS5yZWN0ICE9IGYtPmZyYW1lUmVjdCgpKQog
ICAgICAgICAgICAgICAgICAgICBjaGVja0ZvckVuZExpbmVNYXRjaCA9IGZhbHNlOwotICAgICAg
ICAgICAgICAgIGZsb2F0SW5kZXgrKzsKKyAgICAgICAgICAgICAgICBsYXlvdXRTdGF0ZS5zZXRG
bG9hdEluZGV4KGxheW91dFN0YXRlLmZsb2F0SW5kZXgoKSArIDEpOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgbGFzdEZsb2F0ID0gIWZsb2F0aW5nT2JqZWN0U2V0LmlzRW1wdHkoKSA/IGZs
b2F0aW5nT2JqZWN0U2V0Lmxhc3QoKSA6IDA7CisgICAgICAgICAgICBsYXlvdXRTdGF0ZS5zZXRM
YXN0RmxvYXQoIWZsb2F0aW5nT2JqZWN0U2V0LmlzRW1wdHkoKSA/IGZsb2F0aW5nT2JqZWN0U2V0
Lmxhc3QoKSA6IDApOwogICAgICAgICB9CiAKICAgICAgICAgbGluZU1pZHBvaW50U3RhdGUucmVz
ZXQoKTsKICAgICAgICAgcmVzb2x2ZXIuc2V0UG9zaXRpb24oZW5kKTsKICAgICB9Cit9CiAKLSAg
ICBpZiAoZW5kTGluZSkgewotICAgICAgICBpZiAoZW5kTGluZU1hdGNoZWQpIHsKK3ZvaWQgUmVu
ZGVyQmxvY2s6OmxpbmtUb0VuZExpbmVJZk5lZWRlZChMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0
YXRlKQoreworICAgIGlmIChsYXlvdXRTdGF0ZS5lbmRMaW5lKCkpIHsKKyAgICAgICAgaWYgKGxh
eW91dFN0YXRlLmVuZExpbmVNYXRjaGVkKCkpIHsKKyAgICAgICAgICAgIGJvb2wgcGFnaW5hdGVk
ID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpICYmIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+aXNQYWdp
bmF0ZWQoKTsKICAgICAgICAgICAgIC8vIEF0dGFjaCBhbGwgdGhlIHJlbWFpbmluZyBsaW5lcywg
YW5kIHRoZW4gYWRqdXN0IHRoZWlyIHktcG9zaXRpb25zIGFzIG5lZWRlZC4KLSAgICAgICAgICAg
IGludCBkZWx0YSA9IGxvZ2ljYWxIZWlnaHQoKSAtIGVuZExpbmVMb2dpY2FsVG9wOwotICAgICAg
ICAgICAgZm9yIChSb290SW5saW5lQm94KiBsaW5lID0gZW5kTGluZTsgbGluZTsgbGluZSA9IGxp
bmUtPm5leHRSb290Qm94KCkpIHsKKyAgICAgICAgICAgIGludCBkZWx0YSA9IGxvZ2ljYWxIZWln
aHQoKSAtIGxheW91dFN0YXRlLmVuZExpbmVMb2dpY2FsVG9wKCk7CisgICAgICAgICAgICBmb3Ig
KFJvb3RJbmxpbmVCb3gqIGxpbmUgPSBsYXlvdXRTdGF0ZS5lbmRMaW5lKCk7IGxpbmU7IGxpbmUg
PSBsaW5lLT5uZXh0Um9vdEJveCgpKSB7CiAgICAgICAgICAgICAgICAgbGluZS0+YXR0YWNoTGlu
ZSgpOwogICAgICAgICAgICAgICAgIGlmIChwYWdpbmF0ZWQpIHsKICAgICAgICAgICAgICAgICAg
ICAgZGVsdGEgLT0gbGluZS0+cGFnaW5hdGlvblN0cnV0KCk7CkBAIC0xMTA0LDE0ICsxMTQ4LDE1
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dFJ1bnNBbmRGbG9hdHMoTGluZUxheW91dFN0YXRl
JiBsYXlvdXRTdGF0ZSwgYm9vbCBoYXNJbmxpCiAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0
KGxhc3RSb290Qm94KCktPmJsb2NrTG9naWNhbEhlaWdodCgpKTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIC8vIERlbGV0ZSBhbGwgdGhlIHJlbWFpbmluZyBsaW5lcy4KLSAgICAgICAg
ICAgIGRlbGV0ZUxpbmVSYW5nZShsYXlvdXRTdGF0ZSwgcmVuZGVyQXJlbmEoKSwgZW5kTGluZSk7
CisgICAgICAgICAgICBkZWxldGVMaW5lUmFuZ2UobGF5b3V0U3RhdGUsIHJlbmRlckFyZW5hKCks
IGxheW91dFN0YXRlLmVuZExpbmUoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKG1fZmxv
YXRpbmdPYmplY3RzICYmIChjaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZSB8fCBwb3NpdGlvbk5l
d0Zsb2F0cygpKSAmJiBsYXN0Um9vdEJveCgpKSB7CisgICAgCisgICAgaWYgKG1fZmxvYXRpbmdP
YmplY3RzICYmIChsYXlvdXRTdGF0ZS5jaGVja0ZvckZsb2F0c0Zyb21MYXN0TGluZSgpIHx8IHBv
c2l0aW9uTmV3RmxvYXRzKCkpICYmIGxhc3RSb290Qm94KCkpIHsKICAgICAgICAgLy8gSW4gY2Fz
ZSB3ZSBoYXZlIGEgZmxvYXQgb24gdGhlIGxhc3QgbGluZSwgaXQgbWlnaHQgbm90IGJlIHBvc2l0
aW9uZWQgdXAgdG8gbm93LgogICAgICAgICAvLyBUaGlzIGhhcyB0byBiZSBkb25lIGJlZm9yZSBh
ZGRpbmcgaW4gdGhlIGJvdHRvbSBib3JkZXIvcGFkZGluZywgb3IgdGhlIGZsb2F0IHdpbGwKICAg
ICAgICAgLy8gaW5jbHVkZSB0aGUgcGFkZGluZyBpbmNvcnJlY3RseS4gLWR3aAotICAgICAgICBp
ZiAoY2hlY2tGb3JGbG9hdHNGcm9tTGFzdExpbmUpIHsKKyAgICAgICAgaWYgKGxheW91dFN0YXRl
LmNoZWNrRm9yRmxvYXRzRnJvbUxhc3RMaW5lKCkpIHsKICAgICAgICAgICAgIGludCBib3R0b21W
aXN1YWxPdmVyZmxvdyA9IGxhc3RSb290Qm94KCktPmxvZ2ljYWxCb3R0b21WaXN1YWxPdmVyZmxv
dygpOwogICAgICAgICAgICAgaW50IGJvdHRvbUxheW91dE92ZXJmbG93ID0gbGFzdFJvb3RCb3go
KS0+bG9naWNhbEJvdHRvbUxheW91dE92ZXJmbG93KCk7CiAgICAgICAgICAgICBUcmFpbGluZ0Zs
b2F0c1Jvb3RJbmxpbmVCb3gqIHRyYWlsaW5nRmxvYXRzTGluZUJveCA9IG5ldyAocmVuZGVyQXJl
bmEoKSkgVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94KHRoaXMpOwpAQCAtMTEzMCwxNiArMTE3
NSwyMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRSdW5zQW5kRmxvYXRzKExpbmVMYXlvdXRT
dGF0ZSYgbGF5b3V0U3RhdGUsIGJvb2wgaGFzSW5saQogICAgICAgICBGbG9hdGluZ09iamVjdFNl
dCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgICAg
IEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigp
OwogICAgICAgICBGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGVuZCA9IGZsb2F0aW5nT2JqZWN0
U2V0LmVuZCgpOwotICAgICAgICBpZiAobGFzdEZsb2F0KSB7Ci0gICAgICAgICAgICBGbG9hdGlu
Z09iamVjdFNldEl0ZXJhdG9yIGxhc3RGbG9hdEl0ZXJhdG9yID0gZmxvYXRpbmdPYmplY3RTZXQu
ZmluZChsYXN0RmxvYXQpOworICAgICAgICBpZiAobGF5b3V0U3RhdGUubGFzdEZsb2F0KCkpIHsK
KyAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgbGFzdEZsb2F0SXRlcmF0b3Ig
PSBmbG9hdGluZ09iamVjdFNldC5maW5kKGxheW91dFN0YXRlLmxhc3RGbG9hdCgpKTsKICAgICAg
ICAgICAgIEFTU0VSVChsYXN0RmxvYXRJdGVyYXRvciAhPSBlbmQpOwogICAgICAgICAgICAgKyts
YXN0RmxvYXRJdGVyYXRvcjsKICAgICAgICAgICAgIGl0ID0gbGFzdEZsb2F0SXRlcmF0b3I7CiAg
ICAgICAgIH0KICAgICAgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgICAgIGFw
cGVuZEZsb2F0aW5nT2JqZWN0VG9MYXN0TGluZSgqaXQpOwotICAgICAgICBsYXN0RmxvYXQgPSAh
ZmxvYXRpbmdPYmplY3RTZXQuaXNFbXB0eSgpID8gZmxvYXRpbmdPYmplY3RTZXQubGFzdCgpIDog
MDsKKyAgICAgICAgbGF5b3V0U3RhdGUuc2V0TGFzdEZsb2F0KCFmbG9hdGluZ09iamVjdFNldC5p
c0VtcHR5KCkgPyBmbG9hdGluZ09iamVjdFNldC5sYXN0KCkgOiAwKTsKICAgICB9Cit9CisKK3Zv
aWQgUmVuZGVyQmxvY2s6OnJlcGFpbnREaXJ0eUZsb2F0cyhWZWN0b3I8RmxvYXRXaXRoUmVjdD4m
IGZsb2F0cykKK3sKICAgICBzaXplX3QgZmxvYXRDb3VudCA9IGZsb2F0cy5zaXplKCk7CiAgICAg
Ly8gRmxvYXRzIHRoYXQgZGlkIG5vdCBoYXZlIGxheW91dCBkaWQgbm90IHJlcGFpbnQgd2hlbiB3
ZSBsYWlkIHRoZW0gb3V0LiBUaGV5IHdvdWxkIGhhdmUKICAgICAvLyBwYWludGVkIGJ5IG5vdyBp
ZiB0aGV5IGhhZCBtb3ZlZCwgYnV0IGlmIHRoZXkgc3RheWVkIGF0ICgwLCAwKSwgdGhleSBzdGls
bCBuZWVkIHRvIGJlCkBAIC0xMTgwLDcgKzEyMjksNiBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlv
dXRJbmxpbmVDaGlsZHJlbihib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCYgcmVwYWludExvZ2lj
YQogCiAgICAgaWYgKGZpcnN0Q2hpbGQoKSkgewogICAgICAgICAvLyBsYXlvdXQgcmVwbGFjZWQg
ZWxlbWVudHMKLSAgICAgICAgVmVjdG9yPEZsb2F0V2l0aFJlY3Q+IGZsb2F0czsKICAgICAgICAg
Ym9vbCBoYXNJbmxpbmVDaGlsZCA9IGZhbHNlOwogICAgICAgICBmb3IgKElubGluZVdhbGtlciB3
YWxrZXIodGhpcyk7ICF3YWxrZXIuYXRFbmQoKTsgd2Fsa2VyLmFkdmFuY2UoKSkgewogICAgICAg
ICAgICAgUmVuZGVyT2JqZWN0KiBvID0gd2Fsa2VyLmN1cnJlbnQoKTsKQEAgLTEyMDAsNyArMTI0
OCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKGJvb2wgcmVsYXlv
dXRDaGlsZHJlbiwgaW50JiByZXBhaW50TG9naWNhCiAgICAgICAgICAgICAgICAgaWYgKG8tPmlz
UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgICAgICAgICBvLT5jb250YWluaW5nQmxvY2soKS0+
aW5zZXJ0UG9zaXRpb25lZE9iamVjdChib3gpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKG8t
PmlzRmxvYXRpbmcoKSkKLSAgICAgICAgICAgICAgICAgICAgZmxvYXRzLmFwcGVuZChGbG9hdFdp
dGhSZWN0KGJveCkpOworICAgICAgICAgICAgICAgICAgICBsYXlvdXRTdGF0ZS5mbG9hdHMoKS5h
cHBlbmQoRmxvYXRXaXRoUmVjdChib3gpKTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChsYXlv
dXRTdGF0ZS5pc0Z1bGxMYXlvdXQoKSB8fCBvLT5uZWVkc0xheW91dCgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIC8vIFJlcGxhY2VkIGVsZW1lbnRzCiAgICAgICAgICAgICAgICAgICAgIHRvUmVu
ZGVyQm94KG8pLT5kaXJ0eUxpbmVCb3hlcyhsYXlvdXRTdGF0ZS5pc0Z1bGxMYXlvdXQoKSk7CkBA
IC0xMjE1LDcgKzEyNjMsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJl
bihib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCYgcmVwYWludExvZ2ljYQogICAgICAgICAgICAg
fQogICAgICAgICB9CiAKLSAgICAgICAgbGF5b3V0UnVuc0FuZEZsb2F0cyhsYXlvdXRTdGF0ZSwg
aGFzSW5saW5lQ2hpbGQsIGZsb2F0cyk7CisgICAgICAgIGxheW91dFJ1bnNBbmRGbG9hdHMobGF5
b3V0U3RhdGUsIGhhc0lubGluZUNoaWxkKTsKICAgICB9CiAKICAgICAvLyBFeHBhbmQgdGhlIGxh
c3QgbGluZSB0byBhY2NvbW1vZGF0ZSBSdWJ5IGFuZCBlbXBoYXNpcyBtYXJrcy4KQEAgLTEyNzEs
OCArMTMxOSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNoZWNrRmxvYXRzSW5DbGVhbkxpbmUoUm9v
dElubGluZUJveCogbGluZSwgVmVjdG9yPEZsb2F0V2l0aFJlCiAgICAgfQogfQogCi1Sb290SW5s
aW5lQm94KiBSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihMaW5lTGF5b3V0U3Rh
dGUmIGxheW91dFN0YXRlLCBMaW5lSW5mbyYgbGluZUluZm8sIElubGluZUJpZGlSZXNvbHZlciYg
cmVzb2x2ZXIsIFZlY3RvcjxGbG9hdFdpdGhSZWN0PiYgZmxvYXRzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQmIG51bUNsZWFuRmxv
YXRzKQorUm9vdElubGluZUJveCogUmVuZGVyQmxvY2s6OmRldGVybWluZVN0YXJ0UG9zaXRpb24o
TGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwgSW5saW5lQmlkaVJlc29sdmVyJiByZXNvbHZl
cikKIHsKICAgICBSb290SW5saW5lQm94KiBjdXJyID0gMDsKICAgICBSb290SW5saW5lQm94KiBs
YXN0ID0gMDsKQEAgLTEyODksNyArMTMzNiw3IEBAIFJvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2Nr
OjpkZXRlcm1pbmVTdGFydFBvc2l0aW9uKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsCiAg
ICAgICAgICAgICAgICAgcGFnaW5hdGlvbkRlbHRhIC09IGN1cnItPnBhZ2luYXRpb25TdHJ1dCgp
OwogICAgICAgICAgICAgICAgIGFkanVzdExpbmVQb3NpdGlvbkZvclBhZ2luYXRpb24oY3Vyciwg
cGFnaW5hdGlvbkRlbHRhKTsKICAgICAgICAgICAgICAgICBpZiAocGFnaW5hdGlvbkRlbHRhKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb250YWluc0Zsb2F0cygpIHx8ICFmbG9hdHMuaXNF
bXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb250YWluc0Zsb2F0cygpIHx8ICFs
YXlvdXRTdGF0ZS5mbG9hdHMoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBEbyBiZXR0ZXIgZXZlbnR1YWxseS4gIEZvciBub3cgaWYgd2UgZXZlciBzaGlm
dCBiZWNhdXNlIG9mIHBhZ2luYXRpb24gYW5kIGZsb2F0cyBhcmUgcHJlc2VudCBqdXN0IGdvIHRv
IGEgZnVsbCBsYXlvdXQuCiAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXRTdGF0ZS5tYXJr
Rm9yRnVsbExheW91dCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzAy
LDcgKzEzNDksNyBAQCBSb290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lU3RhcnRQ
b3NpdGlvbihMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLAogCiAgICAgICAgICAgICAvLyBJ
ZiBhIG5ldyBmbG9hdCBoYXMgYmVlbiBpbnNlcnRlZCBiZWZvcmUgdGhpcyBsaW5lIG9yIGJlZm9y
ZSBpdHMgbGFzdCBrbm93biBmbG9hdCwganVzdCBkbyBhIGZ1bGwgbGF5b3V0LgogICAgICAgICAg
ICAgYm9vbCBlbmNvdW50ZXJlZE5ld0Zsb2F0ID0gZmFsc2U7Ci0gICAgICAgICAgICBjaGVja0Zs
b2F0c0luQ2xlYW5MaW5lKGN1cnIsIGZsb2F0cywgZmxvYXRJbmRleCwgZW5jb3VudGVyZWROZXdG
bG9hdCwgZGlydGllZEJ5RmxvYXQpOworICAgICAgICAgICAgY2hlY2tGbG9hdHNJbkNsZWFuTGlu
ZShjdXJyLCBsYXlvdXRTdGF0ZS5mbG9hdHMoKSwgZmxvYXRJbmRleCwgZW5jb3VudGVyZWROZXdG
bG9hdCwgZGlydGllZEJ5RmxvYXQpOwogICAgICAgICAgICAgaWYgKGVuY291bnRlcmVkTmV3Rmxv
YXQpCiAgICAgICAgICAgICAgICAgbGF5b3V0U3RhdGUubWFya0ZvckZ1bGxMYXlvdXQoKTsKIApA
QCAtMTMxMCw3ICsxMzU3LDcgQEAgUm9vdElubGluZUJveCogUmVuZGVyQmxvY2s6OmRldGVybWlu
ZVN0YXJ0UG9zaXRpb24oTGluZUxheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAvLyBDaGVjayBpZiBhIG5ldyBmbG9hdCBo
YXMgYmVlbiBpbnNlcnRlZCBhZnRlciB0aGUgbGFzdCBrbm93biBmbG9hdC4KLSAgICAgICAgaWYg
KCFjdXJyICYmIGZsb2F0SW5kZXggPCBmbG9hdHMuc2l6ZSgpKQorICAgICAgICBpZiAoIWN1cnIg
JiYgZmxvYXRJbmRleCA8IGxheW91dFN0YXRlLmZsb2F0cygpLnNpemUoKSkKICAgICAgICAgICAg
IGxheW91dFN0YXRlLm1hcmtGb3JGdWxsTGF5b3V0KCk7CiAgICAgfQogCkBAIC0xMzQ3LDggKzEz
OTQsOCBAQCBSb290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lU3RhcnRQb3NpdGlv
bihMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLAogICAgICAgICBsYXN0ID0gY3VyciA/IGN1
cnItPnByZXZSb290Qm94KCkgOiBsYXN0Um9vdEJveCgpOwogICAgIH0KIAotICAgIG51bUNsZWFu
RmxvYXRzID0gMDsKLSAgICBpZiAoIWZsb2F0cy5pc0VtcHR5KCkpIHsKKyAgICB1bnNpZ25lZCBu
dW1DbGVhbkZsb2F0cyA9IDA7CisgICAgaWYgKCFsYXlvdXRTdGF0ZS5mbG9hdHMoKS5pc0VtcHR5
KCkpIHsKICAgICAgICAgaW50IHNhdmVkTG9naWNhbEhlaWdodCA9IGxvZ2ljYWxIZWlnaHQoKTsK
ICAgICAgICAgLy8gUmVzdG9yZSBmbG9hdHMgZnJvbSBjbGVhbiBsaW5lcy4KICAgICAgICAgUm9v
dElubGluZUJveCogbGluZSA9IGZpcnN0Um9vdEJveCgpOwpAQCAtMTM2MSw3ICsxNDA4LDcgQEAg
Um9vdElubGluZUJveCogUmVuZGVyQmxvY2s6OmRldGVybWluZVN0YXJ0UG9zaXRpb24oTGluZUxh
eW91dFN0YXRlJiBsYXlvdXRTdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgZmxvYXRpbmdPYmpl
Y3QtPm1fb3JpZ2luYXRpbmdMaW5lID0gbGluZTsKICAgICAgICAgICAgICAgICAgICAgc2V0TG9n
aWNhbEhlaWdodChsb2dpY2FsVG9wRm9yQ2hpbGQoKmYpIC0gbWFyZ2luQmVmb3JlRm9yQ2hpbGQo
KmYpKTsKICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25OZXdGbG9hdHMoKTsKLSAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGZsb2F0c1tudW1DbGVhbkZsb2F0c10ub2JqZWN0ID09ICpmKTsK
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGxheW91dFN0YXRlLmZsb2F0cygpW251bUNsZWFu
RmxvYXRzXS5vYmplY3QgPT0gKmYpOwogICAgICAgICAgICAgICAgICAgICBudW1DbGVhbkZsb2F0
cysrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTEzNjksOSArMTQxNiwx
MCBAQCBSb290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lU3RhcnRQb3NpdGlvbihM
aW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLAogICAgICAgICB9CiAgICAgICAgIHNldExvZ2lj
YWxIZWlnaHQoc2F2ZWRMb2dpY2FsSGVpZ2h0KTsKICAgICB9CisgICAgbGF5b3V0U3RhdGUuc2V0
RmxvYXRJbmRleChudW1DbGVhbkZsb2F0cyk7CiAKLSAgICBsaW5lSW5mby5zZXRGaXJzdExpbmUo
IWxhc3QpOwotICAgIGxpbmVJbmZvLnNldFByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSghbGFzdCB8
fCBsYXN0LT5lbmRzV2l0aEJyZWFrKCkpOworICAgIGxheW91dFN0YXRlLmxpbmVJbmZvKCkuc2V0
Rmlyc3RMaW5lKCFsYXN0KTsKKyAgICBsYXlvdXRTdGF0ZS5saW5lSW5mbygpLnNldFByZXZpb3Vz
TGluZUJyb2tlQ2xlYW5seSghbGFzdCB8fCBsYXN0LT5lbmRzV2l0aEJyZWFrKCkpOwogCiAgICAg
aWYgKGxhc3QpIHsKICAgICAgICAgc2V0TG9naWNhbEhlaWdodChsYXN0LT5ibG9ja0xvZ2ljYWxI
ZWlnaHQoKSk7CkBAIC0xMzg3LDE2ICsxNDM1LDE4IEBAIFJvb3RJbmxpbmVCb3gqIFJlbmRlckJs
b2NrOjpkZXRlcm1pbmVTdGFydFBvc2l0aW9uKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUs
CiAgICAgcmV0dXJuIGN1cnI7CiB9CiAKLVJvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2NrOjpkZXRl
cm1pbmVFbmRQb3NpdGlvbihSb290SW5saW5lQm94KiBzdGFydExpbmUsIFZlY3RvcjxGbG9hdFdp
dGhSZWN0PiYgZmxvYXRzLCBzaXplX3QgZmxvYXRJbmRleCwgSW5saW5lSXRlcmF0b3ImIGNsZWFu
TGluZVN0YXJ0LCBCaWRpU3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzLCBpbnQmIGxvZ2ljYWxU
b3ApCit2b2lkIFJlbmRlckJsb2NrOjpkZXRlcm1pbmVFbmRQb3NpdGlvbihMaW5lTGF5b3V0U3Rh
dGUmIGxheW91dFN0YXRlLCBSb290SW5saW5lQm94KiBzdGFydExpbmUsIElubGluZUl0ZXJhdG9y
JiBjbGVhbkxpbmVTdGFydCwgQmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cykKIHsKKyAg
ICBBU1NFUlQoIWxheW91dFN0YXRlLmVuZExpbmUoKSk7CisgICAgc2l6ZV90IGZsb2F0SW5kZXgg
PSBsYXlvdXRTdGF0ZS5mbG9hdEluZGV4KCk7CiAgICAgUm9vdElubGluZUJveCogbGFzdCA9IDA7
CiAgICAgZm9yIChSb290SW5saW5lQm94KiBjdXJyID0gc3RhcnRMaW5lLT5uZXh0Um9vdEJveCgp
OyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFJvb3RCb3goKSkgewogICAgICAgICBpZiAoIWN1cnIt
PmlzRGlydHkoKSkgewogICAgICAgICAgICAgYm9vbCBlbmNvdW50ZXJlZE5ld0Zsb2F0ID0gZmFs
c2U7CiAgICAgICAgICAgICBib29sIGRpcnRpZWRCeUZsb2F0ID0gZmFsc2U7Ci0gICAgICAgICAg
ICBjaGVja0Zsb2F0c0luQ2xlYW5MaW5lKGN1cnIsIGZsb2F0cywgZmxvYXRJbmRleCwgZW5jb3Vu
dGVyZWROZXdGbG9hdCwgZGlydGllZEJ5RmxvYXQpOworICAgICAgICAgICAgY2hlY2tGbG9hdHNJ
bkNsZWFuTGluZShjdXJyLCBsYXlvdXRTdGF0ZS5mbG9hdHMoKSwgZmxvYXRJbmRleCwgZW5jb3Vu
dGVyZWROZXdGbG9hdCwgZGlydGllZEJ5RmxvYXQpOwogICAgICAgICAgICAgaWYgKGVuY291bnRl
cmVkTmV3RmxvYXQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmIChjdXJyLT5pc0RpcnR5KCkpCiAgICAgICAg
ICAgICBsYXN0ID0gMDsKQEAgLTE0MDUsNyArMTQ1NSw3IEBAIFJvb3RJbmxpbmVCb3gqIFJlbmRl
ckJsb2NrOjpkZXRlcm1pbmVFbmRQb3NpdGlvbihSb290SW5saW5lQm94KiBzdGFydExpbmUsIFZl
Y3RvCiAgICAgfQogCiAgICAgaWYgKCFsYXN0KQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuOwogCiAgICAgLy8gQXQgdGhpcyBwb2ludCwgfGxhc3R8IGlzIHRoZSBmaXJzdCBsaW5l
IGluIGEgcnVuIG9mIGNsZWFuIGxpbmVzIHRoYXQgZW5kcyB3aXRoIHRoZSBsYXN0IGxpbmUKICAg
ICAvLyBpbiB0aGUgYmxvY2suCkBAIC0xNDEzLDI5ICsxNDYzLDI5IEBAIFJvb3RJbmxpbmVCb3gq
IFJlbmRlckJsb2NrOjpkZXRlcm1pbmVFbmRQb3NpdGlvbihSb290SW5saW5lQm94KiBzdGFydExp
bmUsIFZlY3RvCiAgICAgUm9vdElubGluZUJveCogcHJldiA9IGxhc3QtPnByZXZSb290Qm94KCk7
CiAgICAgY2xlYW5MaW5lU3RhcnQgPSBJbmxpbmVJdGVyYXRvcih0aGlzLCBwcmV2LT5saW5lQnJl
YWtPYmooKSwgcHJldi0+bGluZUJyZWFrUG9zKCkpOwogICAgIGNsZWFuTGluZUJpZGlTdGF0dXMg
PSBwcmV2LT5saW5lQnJlYWtCaWRpU3RhdHVzKCk7Ci0gICAgbG9naWNhbFRvcCA9IHByZXYtPmJs
b2NrTG9naWNhbEhlaWdodCgpOworICAgIGxheW91dFN0YXRlLnNldEVuZExpbmVMb2dpY2FsVG9w
KHByZXYtPmJsb2NrTG9naWNhbEhlaWdodCgpKTsKIAogICAgIGZvciAoUm9vdElubGluZUJveCog
bGluZSA9IGxhc3Q7IGxpbmU7IGxpbmUgPSBsaW5lLT5uZXh0Um9vdEJveCgpKQogICAgICAgICBs
aW5lLT5leHRyYWN0TGluZSgpOyAvLyBEaXNjb25uZWN0IGFsbCBsaW5lIGJveGVzIGZyb20gdGhl
aXIgcmVuZGVyIG9iamVjdHMgd2hpbGUgcHJlc2VydmluZwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyB0aGVpciBjb25uZWN0aW9ucyB0byBvbmUgYW5vdGhlci4KIAotICAgIHJldHVy
biBsYXN0OworICAgIGxheW91dFN0YXRlLnNldEVuZExpbmUobGFzdCk7CiB9CiAKLWJvb2wgUmVu
ZGVyQmxvY2s6Om1hdGNoZWRFbmRMaW5lKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNv
bnN0IElubGluZUJpZGlSZXNvbHZlciYgcmVzb2x2ZXIsIGNvbnN0IElubGluZUl0ZXJhdG9yJiBl
bmRMaW5lU3RhcnQsIGNvbnN0IEJpZGlTdGF0dXMmIGVuZExpbmVTdGF0dXMsIFJvb3RJbmxpbmVC
b3gqJiBlbmRMaW5lLCBpbnQmIGVuZExvZ2ljYWxUb3ApCitib29sIFJlbmRlckJsb2NrOjptYXRj
aGVkRW5kTGluZShMaW5lTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlLCBjb25zdCBJbmxpbmVCaWRp
UmVzb2x2ZXImIHJlc29sdmVyLCBjb25zdCBJbmxpbmVJdGVyYXRvciYgZW5kTGluZVN0YXJ0LCBj
b25zdCBCaWRpU3RhdHVzJiBlbmRMaW5lU3RhdHVzKQogewogICAgIGlmIChyZXNvbHZlci5wb3Np
dGlvbigpID09IGVuZExpbmVTdGFydCkgewogICAgICAgICBpZiAocmVzb2x2ZXIuc3RhdHVzKCkg
IT0gZW5kTGluZVN0YXR1cykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBp
bnQgZGVsdGEgPSBsb2dpY2FsSGVpZ2h0KCkgLSBlbmRMb2dpY2FsVG9wOworICAgICAgICBpbnQg
ZGVsdGEgPSBsb2dpY2FsSGVpZ2h0KCkgLSBsYXlvdXRTdGF0ZS5lbmRMaW5lTG9naWNhbFRvcCgp
OwogICAgICAgICBpZiAoIWRlbHRhIHx8ICFtX2Zsb2F0aW5nT2JqZWN0cykKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogCiAgICAgICAgIC8vIFNlZSBpZiBhbnkgZmxvYXRzIGVuZCBpbiB0aGUg
cmFuZ2UgYWxvbmcgd2hpY2ggd2Ugd2FudCB0byBzaGlmdCB0aGUgbGluZXMgdmVydGljYWxseS4K
LSAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSBtaW4obG9naWNhbEhlaWdodCgpLCBlbmRMb2dpY2Fs
VG9wKTsKKyAgICAgICAgaW50IGxvZ2ljYWxUb3AgPSBtaW4obG9naWNhbEhlaWdodCgpLCBsYXlv
dXRTdGF0ZS5lbmRMaW5lTG9naWNhbFRvcCgpKTsKIAotICAgICAgICBSb290SW5saW5lQm94KiBs
YXN0TGluZSA9IGVuZExpbmU7CisgICAgICAgIFJvb3RJbmxpbmVCb3gqIGxhc3RMaW5lID0gbGF5
b3V0U3RhdGUuZW5kTGluZSgpOwogICAgICAgICB3aGlsZSAoUm9vdElubGluZUJveCogbmV4dExp
bmUgPSBsYXN0TGluZS0+bmV4dFJvb3RCb3goKSkKICAgICAgICAgICAgIGxhc3RMaW5lID0gbmV4
dExpbmU7CiAKQEAgLTE0NTUsNyArMTUwNSw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om1hdGNoZWRF
bmRMaW5lKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IElubGluZUJpZGlSCiAg
ICAgLy8gVGhlIGZpcnN0IGNsZWFuIGxpbmUgZG9lc24ndCBtYXRjaCwgYnV0IHdlIGNhbiBjaGVj
ayBhIGhhbmRmdWwgb2YgZm9sbG93aW5nIGxpbmVzIHRvIHRyeQogICAgIC8vIHRvIG1hdGNoIGJh
Y2sgdXAuCiAgICAgc3RhdGljIGludCBudW1MaW5lcyA9IDg7IC8vIFRoZSAjIG9mIGxpbmVzIHdl
J3JlIHdpbGxpbmcgdG8gbWF0Y2ggYWdhaW5zdC4KLSAgICBSb290SW5saW5lQm94KiBsaW5lID0g
ZW5kTGluZTsKKyAgICBSb290SW5saW5lQm94KiBsaW5lID0gbGF5b3V0U3RhdGUuZW5kTGluZSgp
OwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtTGluZXMgJiYgbGluZTsgaSsrLCBsaW5lID0g
bGluZS0+bmV4dFJvb3RCb3goKSkgewogICAgICAgICBpZiAobGluZS0+bGluZUJyZWFrT2JqKCkg
PT0gcmVzb2x2ZXIucG9zaXRpb24oKS5tX29iaiAmJiBsaW5lLT5saW5lQnJlYWtQb3MoKSA9PSBy
ZXNvbHZlci5wb3NpdGlvbigpLm1fcG9zKSB7CiAgICAgICAgICAgICAvLyBXZSBoYXZlIGEgbWF0
Y2guCkBAIC0xNDY1LDE0ICsxNTE1LDE0IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om1hdGNoZWRFbmRM
aW5lKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IElubGluZUJpZGlSCiAKICAg
ICAgICAgICAgIC8vIFNldCBvdXIgbG9naWNhbCB0b3AgdG8gYmUgdGhlIGJsb2NrIGhlaWdodCBv
ZiBlbmRMaW5lLgogICAgICAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgICAgICBlbmRM
b2dpY2FsVG9wID0gbGluZS0+YmxvY2tMb2dpY2FsSGVpZ2h0KCk7CisgICAgICAgICAgICAgICAg
bGF5b3V0U3RhdGUuc2V0RW5kTGluZUxvZ2ljYWxUb3AobGluZS0+YmxvY2tMb2dpY2FsSGVpZ2h0
KCkpOwogCi0gICAgICAgICAgICBpbnQgZGVsdGEgPSBsb2dpY2FsSGVpZ2h0KCkgLSBlbmRMb2dp
Y2FsVG9wOworICAgICAgICAgICAgaW50IGRlbHRhID0gbG9naWNhbEhlaWdodCgpIC0gbGF5b3V0
U3RhdGUuZW5kTGluZUxvZ2ljYWxUb3AoKTsKICAgICAgICAgICAgIGlmIChkZWx0YSAmJiBtX2Zs
b2F0aW5nT2JqZWN0cykgewogICAgICAgICAgICAgICAgIC8vIFNlZSBpZiBhbnkgZmxvYXRzIGVu
ZCBpbiB0aGUgcmFuZ2UgYWxvbmcgd2hpY2ggd2Ugd2FudCB0byBzaGlmdCB0aGUgbGluZXMgdmVy
dGljYWxseS4KLSAgICAgICAgICAgICAgICBpbnQgbG9naWNhbFRvcCA9IG1pbihsb2dpY2FsSGVp
Z2h0KCksIGVuZExvZ2ljYWxUb3ApOworICAgICAgICAgICAgICAgIGludCBsb2dpY2FsVG9wID0g
bWluKGxvZ2ljYWxIZWlnaHQoKSwgbGF5b3V0U3RhdGUuZW5kTGluZUxvZ2ljYWxUb3AoKSk7CiAK
LSAgICAgICAgICAgICAgICBSb290SW5saW5lQm94KiBsYXN0TGluZSA9IGVuZExpbmU7CisgICAg
ICAgICAgICAgICAgUm9vdElubGluZUJveCogbGFzdExpbmUgPSBsYXlvdXRTdGF0ZS5lbmRMaW5l
KCk7CiAgICAgICAgICAgICAgICAgd2hpbGUgKFJvb3RJbmxpbmVCb3gqIG5leHRMaW5lID0gbGFz
dExpbmUtPm5leHRSb290Qm94KCkpCiAgICAgICAgICAgICAgICAgICAgIGxhc3RMaW5lID0gbmV4
dExpbmU7CiAKQEAgLTE0ODgsOCArMTUzOCw4IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om1hdGNoZWRF
bmRMaW5lKExpbmVMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUsIGNvbnN0IElubGluZUJpZGlSCiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIE5vdyBkZWxldGUgdGhlIGxpbmVzIHRoYXQg
d2UgZmFpbGVkIHRvIHN5bmMuCi0gICAgICAgICAgICBkZWxldGVMaW5lUmFuZ2UobGF5b3V0U3Rh
dGUsIHJlbmRlckFyZW5hKCksIGVuZExpbmUsIHJlc3VsdCk7Ci0gICAgICAgICAgICBlbmRMaW5l
ID0gcmVzdWx0OworICAgICAgICAgICAgZGVsZXRlTGluZVJhbmdlKGxheW91dFN0YXRlLCByZW5k
ZXJBcmVuYSgpLCBsYXlvdXRTdGF0ZS5lbmRMaW5lKCksIHJlc3VsdCk7CisgICAgICAgICAgICBs
YXlvdXRTdGF0ZS5zZXRFbmRMaW5lKHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgICAgICB9CiAgICAgfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>