<?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>137749</bug_id>
          
          <creation_ts>2014-10-15 12:32:17 -0700</creation_ts>
          <short_desc>Use is&lt;&gt;() / downcast&lt;&gt;() for InlineBox subclasses</short_desc>
          <delta_ts>2014-10-15 17:05:46 -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>
          <dependson>137424</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>kling</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1041921</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-15 12:32:17 -0700</bug_when>
    <thetext>Use is&lt;&gt;() / downcast&lt;&gt;() for InlineBox subclasses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041929</commentid>
    <comment_count>1</comment_count>
      <attachid>239885</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-10-15 13:00:08 -0700</bug_when>
    <thetext>Created attachment 239885
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042010</commentid>
    <comment_count>2</comment_count>
      <attachid>239885</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-15 17:05:39 -0700</bug_when>
    <thetext>Comment on attachment 239885
Patch

Clearing flags on attachment: 239885

Committed r174746: &lt;http://trac.webkit.org/changeset/174746&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1042011</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-10-15 17:05:46 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239885</attachid>
            <date>2014-10-15 13:00:08 -0700</date>
            <delta_ts>2014-10-15 17:05:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137749-20141015130017.patch</filename>
            <type>text/plain</type>
            <size>100102</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0NzMwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWNjN2MwMmIzNTVkNTIz
ODRhYmI1MTRhMzBlYTE5ZDI2NDVhZjVmMS4uNDAyYzE4MGRhNzgxNzFlYTc1OTM4NDAyOTIyNzJl
YWFjZjFjM2M0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDk1IEBACiAyMDE0LTEwLTE1ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKKyAgICAgICAgVXNlIGlzPD4oKSAvIGRvd25j
YXN0PD4oKSBmb3IgSW5saW5lQm94IHN1YmNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzc0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBpczw+KCkgLyBkb3duY2FzdDw+KCkgZm9yIElu
bGluZUJveCBzdWJjbGFzc2VzIGFuZCBjbGVhbiB1cCB0aGUKKyAgICAgICAgc3Vycm91bmRpbmcg
Y29kZS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAg
ICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQb3NpdGlvbjo6dXBz
dHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6UG9zaXRpb246OmRvd25zdHJlYW0pOgorICAgICAg
ICAqIGVkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndvcmRCcmVh
a0l0ZXJhdG9yRm9yTWluT2Zmc2V0Qm91bmRhcnkpOgorICAgICAgICAoV2ViQ29yZTo6d29yZEJy
ZWFrSXRlcmF0b3JGb3JNYXhPZmZzZXRCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjp2aXN1
YWxXb3JkUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6c3RhcnRQb3NpdGlvbkZvckxpbmUp
OgorICAgICAgICAoV2ViQ29yZTo6ZW5kUG9zaXRpb25Gb3JMaW5lKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvSW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6cm9vdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6Om5leHRMZWFmQ2hpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lQm94OjpwcmV2TGVhZkNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZUJveDo6bmV4dExlYWZDaGlsZElnbm9yaW5nTGluZUJyZWFrKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvSW5saW5lQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUVsZW1lbnRCb3gu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVGbG93Qm94OjpnZXRGbG93U3BhY2luZ0xvZ2ljYWxXaWR0aCk6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjphZGRUb0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lRmxvd0JveDo6ZGV0ZXJtaW5lU3BhY2luZ0ZvckZsb3dCb3hlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpwbGFjZUJveFJhbmdlSW5JbmxpbmVEaXJlY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cmVxdWlyZXNJZGVvZ3JhcGhpY0Jhc2Vs
aW5lKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OmFkanVzdE1heEFzY2VudEFu
ZERlc2NlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6Y29tcHV0ZUxvZ2lj
YWxCb3hIZWlnaHRzKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OnBsYWNlQm94
ZXNJbkJsb2NrRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OmNv
bXB1dGVNYXhMb2dpY2FsVG9wKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OmZs
aXBMaW5lc0luQmxvY2tEaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0Jv
eDo6Y29tcHV0ZU92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OmZp
cnN0TGVhZkNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6Omxhc3RMZWFm
Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6Y29tcHV0ZU92ZXJBbm5v
dGF0aW9uQWRqdXN0bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94Ojpjb21w
dXRlVW5kZXJBbm5vdGF0aW9uQWRqdXN0bWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGlu
ZUZsb3dCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2tGbG93Ojpwb3NpdGlvbkZvckJveCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJsb2NrRmxvdy5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpmaXJzdFJv
b3RCb3gpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpsYXN0Um9vdEJveCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNyZWF0ZUxpbmVCb3hlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNvbnN0cnVjdExpbmUpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0TG9naWNhbFdpZHRoRm9yVGV4dFJ1bik6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRl
RXhwYW5zaW9uRm9ySnVzdGlmaWVkVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
a0Zsb3c6OmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JTZWdtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUJsb2NrRGlyZWN0aW9uUG9zaXRp
b25zRm9yTGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNyZWF0ZUxp
bmVCb3hlc0Zyb21CaWRpUnVucyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6bG9jYWxDYXJldFJlY3QpOgorICAgICAg
ICAqIHJlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJ
bmxpbmVCb3g6OmlzSHlwaGVuYXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94
Ojphc2NlbnRBbmREZXNjZW50Rm9yQm94KToKKyAgICAgICAgKiByZW5kZXJpbmcvUm9vdElubGlu
ZUJveC5oOgorICAgICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6bmV4dFJvb3RCb3gpOgor
ICAgICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6cHJldlJvb3RCb3gpOgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdJbmxpbmVUZXh0Ojpsb2NhbENhcmV0UmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdJbmxpbmVUZXh0Ojpwb3NpdGlvbkZvclBvaW50KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
VGV4dDo6cG9zaXRpb25Gb3JQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxp
bmVGbG93Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZUZsb3dCb3g6OnBhaW50
U2VsZWN0aW9uQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVGbG93Qm94
OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVGbG93Qm94Ojpjb21wdXRlVGV4
dE1hdGNoTWFya2VyUmVjdEZvclJlbmRlcmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NW
R0lubGluZUZsb3dCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRC
b3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlclRyZWVBc1RleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6d3JpdGVSZW5kZXJTVkdUZXh0Qm94KToKKyAgICAgICAgKFdlYkNv
cmU6OndyaXRlU1ZHSW5saW5lVGV4dEJveGVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NW
R1Jvb3RJbmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUm9vdElubGluZUJveDo6
cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUm9vdElubGluZUJveDo6bGF5b3V0Q2hhcmFj
dGVyc0luVGV4dEJveGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jvb3RJbmxpbmVCb3g6Omxh
eW91dENoaWxkQm94ZXMpOgorICAgICAgICAoV2ViQ29yZTo6cmV2ZXJzZUlubGluZUJveFJhbmdl
QW5kVmFsdWVMaXN0c0lmTmVlZGVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJ
bmxpbmVCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UXVlcnk6OmNvbGxlY3RUZXh0Qm94ZXNJbkZsb3dCb3gp
OgorCisyMDE0LTEwLTE1ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKICAgICAg
ICAgVXNlIGlzPD4oKSAvIGRvd25jYXN0PD4oKSBmb3IgQ2xpcFBhdGhPcGVyYXRpb24gc3ViY2xh
c3NlcwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3
NzMzCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCmluZGV4IGYxZmM1YmQzOTI1N2U1NDg0MjAxN2I1
ZjAxNDQ2ZjFkNDIwZmY5ZjUuLjY0MmNlMjY2NjBmOWFkNTQ5MjM4N2MyM2UzOWI3M2E2MWYzMjMw
YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcApAQCAtNjYxLDcgKzY2MSw3IEBAIFBvc2l0aW9u
IFBvc2l0aW9uOjp1cHN0cmVhbShFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSkgY29u
c3QKICAgICAgICAgICAgICAgICAgICAgb3RoZXJCb3ggPSBvdGhlckJveC0+bmV4dExlYWZDaGls
ZCgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIW90aGVyQm94KQogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChvdGhlckJveCA9PSBsYXN0
VGV4dEJveCB8fCAoJm90aGVyQm94LT5yZW5kZXJlcigpID09ICZ0ZXh0UmVuZGVyZXIgJiYgdG9J
bmxpbmVUZXh0Qm94KG90aGVyQm94KS0+c3RhcnQoKSA+IHRleHRPZmZzZXQpKQorICAgICAgICAg
ICAgICAgICAgICBpZiAob3RoZXJCb3ggPT0gbGFzdFRleHRCb3ggfHwgKCZvdGhlckJveC0+cmVu
ZGVyZXIoKSA9PSAmdGV4dFJlbmRlcmVyICYmIGRvd25jYXN0PElubGluZVRleHRCb3g+KCpvdGhl
ckJveCkuc3RhcnQoKSA+IHRleHRPZmZzZXQpKQogICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWVzT25OZXh0TGluZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIH0KIApAQCAtNjcwLDcg
KzY3MCw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjp1cHN0cmVhbShFZGl0aW5nQm91bmRhcnlDcm9z
c2luZ1J1bGUgcnVsZSkgY29uc3QKICAgICAgICAgICAgICAgICAgICAgb3RoZXJCb3ggPSBvdGhl
ckJveC0+cHJldkxlYWZDaGlsZCgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIW90aGVyQm94
KQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChvdGhlckJveCA9PSBsYXN0VGV4dEJveCB8fCAoJm90aGVyQm94LT5yZW5kZXJlcigpID09ICZ0
ZXh0UmVuZGVyZXIgJiYgdG9JbmxpbmVUZXh0Qm94KG90aGVyQm94KS0+c3RhcnQoKSA+IHRleHRP
ZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICBpZiAob3RoZXJCb3ggPT0gbGFzdFRleHRCb3gg
fHwgKCZvdGhlckJveC0+cmVuZGVyZXIoKSA9PSAmdGV4dFJlbmRlcmVyICYmIGRvd25jYXN0PElu
bGluZVRleHRCb3g+KCpvdGhlckJveCkuc3RhcnQoKSA+IHRleHRPZmZzZXQpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWVzT25OZXh0TGluZSA9IGZhbHNlOwogICAgICAgICAgICAg
ICAgIH0KIApAQCAtNzg5LDcgKzc4OSw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpkb3duc3RyZWFt
KEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBydWxlKSBjb25zdAogICAgICAgICAgICAgICAg
ICAgICBvdGhlckJveCA9IG90aGVyQm94LT5uZXh0TGVhZkNoaWxkKCk7CiAgICAgICAgICAgICAg
ICAgICAgIGlmICghb3RoZXJCb3gpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKG90aGVyQm94ID09IGxhc3RUZXh0Qm94IHx8ICgmb3RoZXJC
b3gtPnJlbmRlcmVyKCkgPT0gJnRleHRSZW5kZXJlciAmJiB0b0lubGluZVRleHRCb3gob3RoZXJC
b3gpLT5zdGFydCgpID49IHRleHRPZmZzZXQpKQorICAgICAgICAgICAgICAgICAgICBpZiAob3Ro
ZXJCb3ggPT0gbGFzdFRleHRCb3ggfHwgKCZvdGhlckJveC0+cmVuZGVyZXIoKSA9PSAmdGV4dFJl
bmRlcmVyICYmIGRvd25jYXN0PElubGluZVRleHRCb3g+KCpvdGhlckJveCkuc3RhcnQoKSA+PSB0
ZXh0T2Zmc2V0KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlc09uTmV4dExpbmUg
PSBmYWxzZTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTc5OCw3ICs3OTgsNyBAQCBQb3NpdGlv
biBQb3NpdGlvbjo6ZG93bnN0cmVhbShFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSkg
Y29uc3QKICAgICAgICAgICAgICAgICAgICAgb3RoZXJCb3ggPSBvdGhlckJveC0+cHJldkxlYWZD
aGlsZCgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIW90aGVyQm94KQogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChvdGhlckJveCA9PSBs
YXN0VGV4dEJveCB8fCAoJm90aGVyQm94LT5yZW5kZXJlcigpID09ICZ0ZXh0UmVuZGVyZXIgJiYg
dG9JbmxpbmVUZXh0Qm94KG90aGVyQm94KS0+c3RhcnQoKSA+PSB0ZXh0T2Zmc2V0KSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG90aGVyQm94ID09IGxhc3RUZXh0Qm94IHx8ICgmb3RoZXJCb3gt
PnJlbmRlcmVyKCkgPT0gJnRleHRSZW5kZXJlciAmJiBkb3duY2FzdDxJbmxpbmVUZXh0Qm94Pigq
b3RoZXJCb3gpLnN0YXJ0KCkgPj0gdGV4dE9mZnNldCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZXNPbk5leHRMaW5lID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKaW5kZXggZGRlY2YyOWZjOWFhMDU4ZTUy
Nzk1MjQ1Y2JhNzVkNDIzNzU1ZmRjNi4uMDRjMTM5NTY4ZGI1OGI0MDkzNjE0ZDA0NjlhYmJkZTM5
MmQ2ZTY3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcApAQCAtMjky
LDEwICsyOTIsMTAgQEAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiB3b3JkQnJlYWtJdGVyYXRv
ckZvck1pbk9mZnNldEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3MKIAogICAgIHN0cmluZy5jbGVh
cigpOwogCi0gICAgaWYgKHByZXZpb3VzQm94ICYmIHByZXZpb3VzQm94LT5pc0lubGluZVRleHRC
b3goKSkgewotICAgICAgICBjb25zdCBJbmxpbmVUZXh0Qm94KiBwcmV2aW91c1RleHRCb3ggPSB0
b0lubGluZVRleHRCb3gocHJldmlvdXNCb3gpOwotICAgICAgICBwcmV2aW91c0JveExlbmd0aCA9
IHByZXZpb3VzVGV4dEJveC0+bGVuKCk7Ci0gICAgICAgIGFwcGVuZChzdHJpbmcsIFN0cmluZ1Zp
ZXcocHJldmlvdXNUZXh0Qm94LT5yZW5kZXJlcigpLnRleHQoKSkuc3Vic3RyaW5nKHByZXZpb3Vz
VGV4dEJveC0+c3RhcnQoKSwgcHJldmlvdXNCb3hMZW5ndGgpKTsKKyAgICBpZiAoaXM8SW5saW5l
VGV4dEJveD4ocHJldmlvdXNCb3gpKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIHByZXZpb3VzVGV4
dEJveCA9IGRvd25jYXN0PElubGluZVRleHRCb3g+KCpwcmV2aW91c0JveCk7CisgICAgICAgIHBy
ZXZpb3VzQm94TGVuZ3RoID0gcHJldmlvdXNUZXh0Qm94LmxlbigpOworICAgICAgICBhcHBlbmQo
c3RyaW5nLCBTdHJpbmdWaWV3KHByZXZpb3VzVGV4dEJveC5yZW5kZXJlcigpLnRleHQoKSkuc3Vi
c3RyaW5nKHByZXZpb3VzVGV4dEJveC5zdGFydCgpLCBwcmV2aW91c0JveExlbmd0aCkpOwogICAg
IH0KICAgICBhcHBlbmQoc3RyaW5nLCBTdHJpbmdWaWV3KHRleHRCb3gtPnJlbmRlcmVyKCkudGV4
dCgpKS5zdWJzdHJpbmcodGV4dEJveC0+c3RhcnQoKSwgdGV4dEJveC0+bGVuKCkpKTsKIApAQCAt
MzEyLDkgKzMxMiw5IEBAIHN0YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogd29yZEJyZWFrSXRlcmF0
b3JGb3JNYXhPZmZzZXRCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zCiAKICAgICBzdHJpbmcuY2xl
YXIoKTsKICAgICBhcHBlbmQoc3RyaW5nLCBTdHJpbmdWaWV3KHRleHRCb3gtPnJlbmRlcmVyKCku
dGV4dCgpKS5zdWJzdHJpbmcodGV4dEJveC0+c3RhcnQoKSwgdGV4dEJveC0+bGVuKCkpKTsKLSAg
ICBpZiAobmV4dEJveCAmJiBuZXh0Qm94LT5pc0lubGluZVRleHRCb3goKSkgewotICAgICAgICBj
b25zdCBJbmxpbmVUZXh0Qm94KiBuZXh0VGV4dEJveCA9IHRvSW5saW5lVGV4dEJveChuZXh0Qm94
KTsKLSAgICAgICAgYXBwZW5kKHN0cmluZywgU3RyaW5nVmlldyhuZXh0VGV4dEJveC0+cmVuZGVy
ZXIoKS50ZXh0KCkpLnN1YnN0cmluZyhuZXh0VGV4dEJveC0+c3RhcnQoKSwgbmV4dFRleHRCb3gt
PmxlbigpKSk7CisgICAgaWYgKGlzPElubGluZVRleHRCb3g+KG5leHRCb3gpKSB7CisgICAgICAg
IGNvbnN0IGF1dG8mIG5leHRUZXh0Qm94ID0gZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oKm5leHRC
b3gpOworICAgICAgICBhcHBlbmQoc3RyaW5nLCBTdHJpbmdWaWV3KG5leHRUZXh0Qm94LnJlbmRl
cmVyKCkudGV4dCgpKS5zdWJzdHJpbmcobmV4dFRleHRCb3guc3RhcnQoKSwgbmV4dFRleHRCb3gu
bGVuKCkpKTsKICAgICB9CiAKICAgICByZXR1cm4gd29yZEJyZWFrSXRlcmF0b3IoU3RyaW5nVmll
dyhzdHJpbmcuZGF0YSgpLCBzdHJpbmcuc2l6ZSgpKSk7CkBAIC0zNjQsMjMgKzM2NCwyMyBAQCBz
dGF0aWMgVmlzaWJsZVBvc2l0aW9uIHZpc3VhbFdvcmRQb3NpdGlvbihjb25zdCBWaXNpYmxlUG9z
aXRpb24mIHZpc2libGVQb3NpdGlvbgogICAgIAogICAgICAgICBpZiAoIWJveCkKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBpZiAoIWJveC0+aXNJbmxpbmVUZXh0Qm94KCkpIHsKKyAgICAg
ICAgaWYgKCFpczxJbmxpbmVUZXh0Qm94PigqYm94KSkgewogICAgICAgICAgICAgY3VycmVudCA9
IGFkamFjZW50Q2hhcmFjdGVyUG9zaXRpb247CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQogCi0gICAgICAgIElubGluZVRleHRCb3gqIHRleHRCb3ggPSB0b0lubGluZVRleHRCb3go
Ym94KTsKKyAgICAgICAgSW5saW5lVGV4dEJveCYgdGV4dEJveCA9IGRvd25jYXN0PElubGluZVRl
eHRCb3g+KCpib3gpOwogICAgICAgICBpbnQgcHJldmlvdXNCb3hMZW5ndGggPSAwOwogICAgICAg
ICBib29sIHByZXZpb3VzQm94SW5EaWZmZXJlbnRCbG9jayA9IGZhbHNlOwogICAgICAgICBib29s
IG5leHRCb3hJbkRpZmZlcmVudEJsb2NrID0gZmFsc2U7CiAgICAgICAgIGJvb2wgbW92aW5nSW50
b05ld0JveCA9IHByZXZpb3VzbHlWaXNpdGVkQm94ICE9IGJveDsKIAogICAgICAgICBpZiAob2Zm
c2V0SW5Cb3ggPT0gYm94LT5jYXJldE1pbk9mZnNldCgpKQotICAgICAgICAgICAgaXRlciA9IHdv
cmRCcmVha0l0ZXJhdG9yRm9yTWluT2Zmc2V0Qm91bmRhcnkodmlzaWJsZVBvc2l0aW9uLCB0ZXh0
Qm94LCBwcmV2aW91c0JveExlbmd0aCwgcHJldmlvdXNCb3hJbkRpZmZlcmVudEJsb2NrLCBzdHJp
bmcsIGxlYWZCb3hlcyk7CisgICAgICAgICAgICBpdGVyID0gd29yZEJyZWFrSXRlcmF0b3JGb3JN
aW5PZmZzZXRCb3VuZGFyeSh2aXNpYmxlUG9zaXRpb24sICZ0ZXh0Qm94LCBwcmV2aW91c0JveExl
bmd0aCwgcHJldmlvdXNCb3hJbkRpZmZlcmVudEJsb2NrLCBzdHJpbmcsIGxlYWZCb3hlcyk7CiAg
ICAgICAgIGVsc2UgaWYgKG9mZnNldEluQm94ID09IGJveC0+Y2FyZXRNYXhPZmZzZXQoKSkKLSAg
ICAgICAgICAgIGl0ZXIgPSB3b3JkQnJlYWtJdGVyYXRvckZvck1heE9mZnNldEJvdW5kYXJ5KHZp
c2libGVQb3NpdGlvbiwgdGV4dEJveCwgbmV4dEJveEluRGlmZmVyZW50QmxvY2ssIHN0cmluZywg
bGVhZkJveGVzKTsKKyAgICAgICAgICAgIGl0ZXIgPSB3b3JkQnJlYWtJdGVyYXRvckZvck1heE9m
ZnNldEJvdW5kYXJ5KHZpc2libGVQb3NpdGlvbiwgJnRleHRCb3gsIG5leHRCb3hJbkRpZmZlcmVu
dEJsb2NrLCBzdHJpbmcsIGxlYWZCb3hlcyk7CiAgICAgICAgIGVsc2UgaWYgKG1vdmluZ0ludG9O
ZXdCb3gpIHsKLSAgICAgICAgICAgIGl0ZXIgPSB3b3JkQnJlYWtJdGVyYXRvcihTdHJpbmdWaWV3
KHRleHRCb3gtPnJlbmRlcmVyKCkudGV4dCgpKS5zdWJzdHJpbmcodGV4dEJveC0+c3RhcnQoKSwg
dGV4dEJveC0+bGVuKCkpKTsKKyAgICAgICAgICAgIGl0ZXIgPSB3b3JkQnJlYWtJdGVyYXRvcihT
dHJpbmdWaWV3KHRleHRCb3gucmVuZGVyZXIoKS50ZXh0KCkpLnN1YnN0cmluZyh0ZXh0Qm94LnN0
YXJ0KCksIHRleHRCb3gubGVuKCkpKTsKICAgICAgICAgICAgIHByZXZpb3VzbHlWaXNpdGVkQm94
ID0gYm94OwogICAgICAgICB9CiAKQEAgLTM4OCwxNyArMzg4LDE3IEBAIHN0YXRpYyBWaXNpYmxl
UG9zaXRpb24gdmlzdWFsV29yZFBvc2l0aW9uKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJs
ZVBvc2l0aW9uCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICB0ZXh0QnJlYWtGaXJzdChp
dGVyKTsKLSAgICAgICAgaW50IG9mZnNldEluSXRlcmF0b3IgPSBvZmZzZXRJbkJveCAtIHRleHRC
b3gtPnN0YXJ0KCkgKyBwcmV2aW91c0JveExlbmd0aDsKKyAgICAgICAgaW50IG9mZnNldEluSXRl
cmF0b3IgPSBvZmZzZXRJbkJveCAtIHRleHRCb3guc3RhcnQoKSArIHByZXZpb3VzQm94TGVuZ3Ro
OwogCiAgICAgICAgIGJvb2wgaXNXb3JkQnJlYWs7CiAgICAgICAgIGJvb2wgYm94SGFzU2FtZURp
cmVjdGlvbmFsaXR5QXNCbG9jayA9IGJveC0+ZGlyZWN0aW9uKCkgPT0gYmxvY2tEaXJlY3Rpb247
CiAgICAgICAgIGJvb2wgbW92aW5nQmFja3dhcmQgPSAoZGlyZWN0aW9uID09IE1vdmVMZWZ0ICYm
IGJveC0+ZGlyZWN0aW9uKCkgPT0gTFRSKSB8fCAoZGlyZWN0aW9uID09IE1vdmVSaWdodCAmJiBi
b3gtPmRpcmVjdGlvbigpID09IFJUTCk7CiAgICAgICAgIGlmICgoc2tpcHNTcGFjZVdoZW5Nb3Zp
bmdSaWdodCAmJiBib3hIYXNTYW1lRGlyZWN0aW9uYWxpdHlBc0Jsb2NrKQogICAgICAgICAgICAg
fHwgKCFza2lwc1NwYWNlV2hlbk1vdmluZ1JpZ2h0ICYmIG1vdmluZ0JhY2t3YXJkKSkgewotICAg
ICAgICAgICAgYm9vbCBsb2dpY2FsU3RhcnRJblJlbmRlcmVyID0gb2Zmc2V0SW5Cb3ggPT0gc3Rh
dGljX2Nhc3Q8aW50Pih0ZXh0Qm94LT5zdGFydCgpKSAmJiBwcmV2aW91c0JveEluRGlmZmVyZW50
QmxvY2s7CisgICAgICAgICAgICBib29sIGxvZ2ljYWxTdGFydEluUmVuZGVyZXIgPSBvZmZzZXRJ
bkJveCA9PSBzdGF0aWNfY2FzdDxpbnQ+KHRleHRCb3guc3RhcnQoKSkgJiYgcHJldmlvdXNCb3hJ
bkRpZmZlcmVudEJsb2NrOwogICAgICAgICAgICAgaXNXb3JkQnJlYWsgPSBpc0xvZ2ljYWxTdGFy
dE9mV29yZChpdGVyLCBvZmZzZXRJbkl0ZXJhdG9yLCBsb2dpY2FsU3RhcnRJblJlbmRlcmVyKTsK
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJvb2wgbG9naWNhbEVuZEluUmVuZGVyZXIg
PSBvZmZzZXRJbkJveCA9PSBzdGF0aWNfY2FzdDxpbnQ+KHRleHRCb3gtPnN0YXJ0KCkgKyB0ZXh0
Qm94LT5sZW4oKSkgJiYgbmV4dEJveEluRGlmZmVyZW50QmxvY2s7CisgICAgICAgICAgICBib29s
IGxvZ2ljYWxFbmRJblJlbmRlcmVyID0gb2Zmc2V0SW5Cb3ggPT0gc3RhdGljX2Nhc3Q8aW50Pih0
ZXh0Qm94LnN0YXJ0KCkgKyB0ZXh0Qm94LmxlbigpKSAmJiBuZXh0Qm94SW5EaWZmZXJlbnRCbG9j
azsKICAgICAgICAgICAgIGlzV29yZEJyZWFrID0gaXNsb2dpY2FsRW5kT2ZXb3JkKGl0ZXIsIG9m
ZnNldEluSXRlcmF0b3IsIGxvZ2ljYWxFbmRJblJlbmRlcmVyKTsKICAgICAgICAgfSAgICAgIAog
CkBAIC03NjcsNyArNzY3LDcgQEAgc3RhdGljIFZpc2libGVQb3NpdGlvbiBzdGFydFBvc2l0aW9u
Rm9yTGluZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIExpbmVFbmRwb2kKICAgICAgICAgfQog
ICAgIH0KIAotICAgIHJldHVybiBpczxUZXh0Pigqc3RhcnROb2RlKSA/IFBvc2l0aW9uKGRvd25j
YXN0PFRleHQ+KHN0YXJ0Tm9kZSksIHRvSW5saW5lVGV4dEJveChzdGFydEJveCktPnN0YXJ0KCkp
CisgICAgcmV0dXJuIGlzPFRleHQ+KCpzdGFydE5vZGUpID8gUG9zaXRpb24oZG93bmNhc3Q8VGV4
dD4oc3RhcnROb2RlKSwgZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oKnN0YXJ0Qm94KS5zdGFydCgp
KQogICAgICAgICA6IHBvc2l0aW9uQmVmb3JlTm9kZShzdGFydE5vZGUpOwogfQogCkBAIC04MzYs
MTMgKzgzNiwxMyBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uRm9yTGluZShj
b25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIExpbmVFbmRwb2ludAogICAgIH0KIAogICAgIFBvc2l0
aW9uIHBvczsKLSAgICBpZiAoZW5kTm9kZS0+aGFzVGFnTmFtZShiclRhZykpCisgICAgaWYgKGlz
PEhUTUxCUkVsZW1lbnQ+KCplbmROb2RlKSkKICAgICAgICAgcG9zID0gcG9zaXRpb25CZWZvcmVO
b2RlKGVuZE5vZGUpOwotICAgIGVsc2UgaWYgKGVuZEJveC0+aXNJbmxpbmVUZXh0Qm94KCkgJiYg
aXM8VGV4dD4oKmVuZE5vZGUpKSB7Ci0gICAgICAgIElubGluZVRleHRCb3gqIGVuZFRleHRCb3gg
PSB0b0lubGluZVRleHRCb3goZW5kQm94KTsKLSAgICAgICAgaW50IGVuZE9mZnNldCA9IGVuZFRl
eHRCb3gtPnN0YXJ0KCk7Ci0gICAgICAgIGlmICghZW5kVGV4dEJveC0+aXNMaW5lQnJlYWsoKSkK
LSAgICAgICAgICAgIGVuZE9mZnNldCArPSBlbmRUZXh0Qm94LT5sZW4oKTsKKyAgICBlbHNlIGlm
IChpczxJbmxpbmVUZXh0Qm94PigqZW5kQm94KSAmJiBpczxUZXh0PigqZW5kTm9kZSkpIHsKKyAg
ICAgICAgYXV0byYgZW5kVGV4dEJveCA9IGRvd25jYXN0PElubGluZVRleHRCb3g+KCplbmRCb3gp
OworICAgICAgICBpbnQgZW5kT2Zmc2V0ID0gZW5kVGV4dEJveC5zdGFydCgpOworICAgICAgICBp
ZiAoIWVuZFRleHRCb3guaXNMaW5lQnJlYWsoKSkKKyAgICAgICAgICAgIGVuZE9mZnNldCArPSBl
bmRUZXh0Qm94LmxlbigpOwogICAgICAgICBwb3MgPSBQb3NpdGlvbihkb3duY2FzdDxUZXh0Pihl
bmROb2RlKSwgZW5kT2Zmc2V0KTsKICAgICB9IGVsc2UKICAgICAgICAgcG9zID0gcG9zaXRpb25B
ZnRlck5vZGUoZW5kTm9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCmlu
ZGV4IGZmNjJjMGY4MjIzZGMxZDMwZDY5NmNlYjNlMGU5MTM5OTM5MGFhYzAuLjUyMWZjZDRjMTYx
NTMwYTk0NGIwMDQ3YWRiMTU4MmFjZjQxNTUzMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVCb3guY3BwCkBAIC0xODQsMTYgKzE4NCwxNCBAQCBjb25zdCBSb290SW5saW5lQm94JiBJ
bmxpbmVCb3g6OnJvb3QoKSBjb25zdAogeyAKICAgICBpZiAocGFyZW50KCkpCiAgICAgICAgIHJl
dHVybiBwYXJlbnQoKS0+cm9vdCgpOwotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKGlzUm9vdElubGluZUJveCgpKTsKLSAgICByZXR1cm4gdG9Sb290SW5saW5lQm94KCp0aGlz
KTsKKyAgICByZXR1cm4gZG93bmNhc3Q8Um9vdElubGluZUJveD4oKnRoaXMpOwogfQogCiBSb290
SW5saW5lQm94JiBJbmxpbmVCb3g6OnJvb3QoKQogeyAKICAgICBpZiAocGFyZW50KCkpCiAgICAg
ICAgIHJldHVybiBwYXJlbnQoKS0+cm9vdCgpOwotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKGlzUm9vdElubGluZUJveCgpKTsKLSAgICByZXR1cm4gdG9Sb290SW5saW5lQm94
KCp0aGlzKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8Um9vdElubGluZUJveD4oKnRoaXMpOwogfQog
CiBib29sIElubGluZUJveDo6bmV4dE9uTGluZUV4aXN0cygpIGNvbnN0CkBAIC0yMjIsOSArMjIw
LDkgQEAgYm9vbCBJbmxpbmVCb3g6OnByZXZpb3VzT25MaW5lRXhpc3RzKCkgY29uc3QKIAogSW5s
aW5lQm94KiBJbmxpbmVCb3g6Om5leHRMZWFmQ2hpbGQoKSBjb25zdAogewotICAgIElubGluZUJv
eCogbGVhZiA9IDA7CisgICAgSW5saW5lQm94KiBsZWFmID0gbnVsbHB0cjsKICAgICBmb3IgKElu
bGluZUJveCogYm94ID0gbmV4dE9uTGluZSgpOyBib3ggJiYgIWxlYWY7IGJveCA9IGJveC0+bmV4
dE9uTGluZSgpKQotICAgICAgICBsZWFmID0gYm94LT5pc0xlYWYoKSA/IGJveCA6IHRvSW5saW5l
Rmxvd0JveChib3gpLT5maXJzdExlYWZDaGlsZCgpOworICAgICAgICBsZWFmID0gYm94LT5pc0xl
YWYoKSA/IGJveCA6IGRvd25jYXN0PElubGluZUZsb3dCb3g+KCpib3gpLmZpcnN0TGVhZkNoaWxk
KCk7CiAgICAgaWYgKCFsZWFmICYmIHBhcmVudCgpKQogICAgICAgICBsZWFmID0gcGFyZW50KCkt
Pm5leHRMZWFmQ2hpbGQoKTsKICAgICByZXR1cm4gbGVhZjsKQEAgLTIzMiw5ICsyMzAsOSBAQCBJ
bmxpbmVCb3gqIElubGluZUJveDo6bmV4dExlYWZDaGlsZCgpIGNvbnN0CiAgICAgCiBJbmxpbmVC
b3gqIElubGluZUJveDo6cHJldkxlYWZDaGlsZCgpIGNvbnN0CiB7Ci0gICAgSW5saW5lQm94KiBs
ZWFmID0gMDsKKyAgICBJbmxpbmVCb3gqIGxlYWYgPSBudWxscHRyOwogICAgIGZvciAoSW5saW5l
Qm94KiBib3ggPSBwcmV2T25MaW5lKCk7IGJveCAmJiAhbGVhZjsgYm94ID0gYm94LT5wcmV2T25M
aW5lKCkpCi0gICAgICAgIGxlYWYgPSBib3gtPmlzTGVhZigpID8gYm94IDogdG9JbmxpbmVGbG93
Qm94KGJveCktPmxhc3RMZWFmQ2hpbGQoKTsKKyAgICAgICAgbGVhZiA9IGJveC0+aXNMZWFmKCkg
PyBib3ggOiBkb3duY2FzdDxJbmxpbmVGbG93Qm94PigqYm94KS5sYXN0TGVhZkNoaWxkKCk7CiAg
ICAgaWYgKCFsZWFmICYmIHBhcmVudCgpKQogICAgICAgICBsZWFmID0gcGFyZW50KCktPnByZXZM
ZWFmQ2hpbGQoKTsKICAgICByZXR1cm4gbGVhZjsKQEAgLTI0NCw3ICsyNDIsNyBAQCBJbmxpbmVC
b3gqIElubGluZUJveDo6bmV4dExlYWZDaGlsZElnbm9yaW5nTGluZUJyZWFrKCkgY29uc3QKIHsK
ICAgICBJbmxpbmVCb3gqIGxlYWYgPSBuZXh0TGVhZkNoaWxkKCk7CiAgICAgaWYgKGxlYWYgJiYg
bGVhZi0+aXNMaW5lQnJlYWsoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIHJldHVybiBsZWFmOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
Qm94LmgKaW5kZXggNTg2NjRkOWZjYmQ1MDk0MzQ1Yjk2NmJhNzNjMmJmYjA5MDcyMDBkMy4uN2I3
YmUzOGU3NGMwOTY3OGJkZWUyOTU5ZjU0OTVkNzYwNzU3NjI5NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVCb3guaApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgIlJlbmRlckJveE1v
ZGVsT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogI2luY2x1ZGUgIlRleHREaXJl
Y3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtNDIxLDkgKzQyMiw2IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKLSNkZWZpbmUg
SU5MSU5FX0JPWF9PQkpFQ1RfVFlQRV9DQVNUUyhUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkg
XAotICAgIFRZUEVfQ0FTVFNfQkFTRShUb1ZhbHVlVHlwZU5hbWUsIElubGluZUJveCwgb2JqZWN0
LCBvYmplY3QtPnByZWRpY2F0ZSwgb2JqZWN0LnByZWRpY2F0ZSkKLQogI2lmIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OX0RJU0FCTEVECiAKIGlubGluZSBJbmxpbmVCb3g6On5Jbmxp
bmVCb3goKQpAQCAtNDM4LDYgKzQzNiwxMSBAQCBpbmxpbmUgdm9pZCBJbmxpbmVCb3g6OmFzc2Vy
dE5vdERlbGV0ZWQoKSBjb25zdAogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKKyNkZWZpbmUg
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19JTkxJTkVfQk9YKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGlj
YXRlKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlRvVmFsdWVUeXBl
TmFtZSkgXAorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpJbmxpbmVCb3gm
IGJveCkgeyByZXR1cm4gYm94LnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0VORCgpCisKICNpZm5kZWYgTkRFQlVHCiAvLyBPdXRzaWRlIHRoZSBXZWJDb3JlIG5hbWVzcGFj
ZSBmb3IgZWFzZSBvZiBpbnZvY2F0aW9uIGZyb20gZ2RiLgogdm9pZCBzaG93Tm9kZVRyZWUoY29u
c3QgV2ViQ29yZTo6SW5saW5lQm94Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRWxlbWVudEJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUVsZW1lbnRCb3guaAppbmRleCA0MjRlNTRiODg4YWEwZGEyYjNlMmYyYzVmZGM3Y2MxMmY1ODIx
MzU4Li45NjFhMDc1NDUzZDVmOTQ3YWVmNDY2NDBkOGFjZWM3NGQ2MjNmZTg0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRWxlbWVudEJveC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVFbGVtZW50Qm94LmgKQEAgLTU1LDggKzU1LDggQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNJbmxpbmVFbGVtZW50Qm94KCkgY29uc3Qgb3Zl
cnJpZGUgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogfTsKIAotSU5MSU5FX0JPWF9PQkpFQ1RfVFlQ
RV9DQVNUUyhJbmxpbmVFbGVtZW50Qm94LCBpc0lubGluZUVsZW1lbnRCb3goKSkKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAotfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19JTkxJTkVfQk9YKElu
bGluZUVsZW1lbnRCb3gsIGlzSW5saW5lRWxlbWVudEJveCgpKQogCiAjZW5kaWYgLy8gSW5saW5l
RWxlbWVudEJveF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
Rmxvd0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAK
aW5kZXggZDc3MTU1YzNkZGNmY2ZmOWFmOGY1OTJhNTg0YjNhZTViYzEwMmQ5Ny4uODEyZGQwZDk5
OWVhNDk2MzExN2FmNTEyMTFjMTdjNzQyYzNjNDYzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVGbG93Qm94LmNwcApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlJlbmRl
ckJsb2NrLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5
ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJMaW5lQnJlYWsuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0
TWFya2VyLmgiCiAjaW5jbHVkZSAiUmVuZGVyUnVieUJhc2UuaCIKICNpbmNsdWRlICJSZW5kZXJS
dWJ5UnVuLmgiCkBAIC03MCwxMiArNzEsMTIgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpzZXRIYXNC
YWRDaGlsZExpc3QoKQogCiBMYXlvdXRVbml0IElubGluZUZsb3dCb3g6OmdldEZsb3dTcGFjaW5n
TG9naWNhbFdpZHRoKCkKIHsKLSAgICBMYXlvdXRVbml0IHRvdFdpZHRoID0gbWFyZ2luQm9yZGVy
UGFkZGluZ0xvZ2ljYWxMZWZ0KCkgKyBtYXJnaW5Cb3JkZXJQYWRkaW5nTG9naWNhbFJpZ2h0KCk7
Ci0gICAgZm9yIChJbmxpbmVCb3gqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBj
dXJyLT5uZXh0T25MaW5lKCkpIHsKLSAgICAgICAgaWYgKGN1cnItPmlzSW5saW5lRmxvd0JveCgp
KQotICAgICAgICAgICAgdG90V2lkdGggKz0gdG9JbmxpbmVGbG93Qm94KGN1cnIpLT5nZXRGbG93
U3BhY2luZ0xvZ2ljYWxXaWR0aCgpOworICAgIExheW91dFVuaXQgdG90YWxXaWR0aCA9IG1hcmdp
bkJvcmRlclBhZGRpbmdMb2dpY2FsTGVmdCgpICsgbWFyZ2luQm9yZGVyUGFkZGluZ0xvZ2ljYWxS
aWdodCgpOworICAgIGZvciAoSW5saW5lQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHRPbkxpbmUoKSkgeworICAgICAgICBpZiAoaXM8SW5saW5lRmxv
d0JveD4oKmNoaWxkKSkKKyAgICAgICAgICAgIHRvdGFsV2lkdGggKz0gZG93bmNhc3Q8SW5saW5l
Rmxvd0JveD4oKmNoaWxkKS5nZXRGbG93U3BhY2luZ0xvZ2ljYWxXaWR0aCgpOwogICAgIH0KLSAg
ICByZXR1cm4gdG90V2lkdGg7CisgICAgcmV0dXJuIHRvdGFsV2lkdGg7CiB9CiAKIHN0YXRpYyB2
b2lkIHNldEhhc1RleHREZXNjZW5kYW50c09uQW5jZXN0b3JzKElubGluZUZsb3dCb3gqIGJveCkK
QEAgLTEwOCw4ICsxMDksOCBAQCB2b2lkIElubGluZUZsb3dCb3g6OmFkZFRvTGluZShJbmxpbmVC
b3gqIGNoaWxkKQogICAgICAgICBpZiAoY2hpbGQtPnJlbmRlcmVyKCkucGFyZW50KCkgPT0gJnJl
bmRlcmVyKCkpCiAgICAgICAgICAgICBtX2hhc1RleHRDaGlsZHJlbiA9IHRydWU7CiAgICAgICAg
IHNldEhhc1RleHREZXNjZW5kYW50c09uQW5jZXN0b3JzKHRoaXMpOwotICAgIH0gZWxzZSBpZiAo
Y2hpbGQtPmlzSW5saW5lRmxvd0JveCgpKSB7Ci0gICAgICAgIGlmICh0b0lubGluZUZsb3dCb3go
Y2hpbGQpLT5oYXNUZXh0RGVzY2VuZGFudHMoKSkKKyAgICB9IGVsc2UgaWYgKGlzPElubGluZUZs
b3dCb3g+KCpjaGlsZCkpIHsKKyAgICAgICAgaWYgKGRvd25jYXN0PElubGluZUZsb3dCb3g+KCpj
aGlsZCkuaGFzVGV4dERlc2NlbmRhbnRzKCkpCiAgICAgICAgICAgICBzZXRIYXNUZXh0RGVzY2Vu
ZGFudHNPbkFuY2VzdG9ycyh0aGlzKTsKICAgICB9CiAKQEAgLTEzNCwxMCArMTM1LDkgQEAgdm9p
ZCBJbmxpbmVGbG93Qm94OjphZGRUb0xpbmUoSW5saW5lQm94KiBjaGlsZCkKICAgICAgICAgICAg
ICAgICAvLyBPdGhlciB0aGFuIG1ha2luZyBhIHppbGxpb24gdGVzdHMgaGF2ZSB0byByZWdlbmVy
YXRlIHJlc3VsdHMsIHRoZXJlJ3Mgbm8gcmVhc29uIHRvIGRpdGNoIHRoZSBvcHRpbWl6YXRpb24g
aGVyZS4KICAgICAgICAgICAgICAgICBzaG91bGRDbGVhckRlc2NlbmRhbnRzSGF2ZVNhbWVMaW5l
SGVpZ2h0QW5kQmFzZWxpbmUgPSBjaGlsZC0+cmVuZGVyZXIoKS5pc0JSKCk7CiAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVChpc0lubGluZUZsb3dCb3goKSk7Ci0g
ICAgICAgICAgICAgICAgSW5saW5lRmxvd0JveCogY2hpbGRGbG93Qm94ID0gdG9JbmxpbmVGbG93
Qm94KGNoaWxkKTsKKyAgICAgICAgICAgICAgICBhdXRvJiBjaGlsZEZsb3dCb3ggPSBkb3duY2Fz
dDxJbmxpbmVGbG93Qm94PigqY2hpbGQpOwogICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoZSBj
aGlsZCdzIGJpdCwgYW5kIHRoZW4gYWxzbyBjaGVjayBmb3IgZGlmZmVyZW5jZXMgaW4gZm9udCwg
bGluZS1oZWlnaHQsIHZlcnRpY2FsLWFsaWduCi0gICAgICAgICAgICAgICAgaWYgKCFjaGlsZEZs
b3dCb3gtPmRlc2NlbmRhbnRzSGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUoKQorICAgICAg
ICAgICAgICAgIGlmICghY2hpbGRGbG93Qm94LmRlc2NlbmRhbnRzSGF2ZVNhbWVMaW5lSGVpZ2h0
QW5kQmFzZWxpbmUoKQogICAgICAgICAgICAgICAgICAgICB8fCAhcGFyZW50U3R5bGUuZm9udCgp
LmZvbnRNZXRyaWNzKCkuaGFzSWRlbnRpY2FsQXNjZW50RGVzY2VudEFuZExpbmVHYXAoY2hpbGRT
dHlsZS5mb250KCkuZm9udE1ldHJpY3MoKSkKICAgICAgICAgICAgICAgICAgICAgfHwgcGFyZW50
U3R5bGUubGluZUhlaWdodCgpICE9IGNoaWxkU3R5bGUubGluZUhlaWdodCgpCiAgICAgICAgICAg
ICAgICAgICAgIHx8IChwYXJlbnRTdHlsZS52ZXJ0aWNhbEFsaWduKCkgIT0gQkFTRUxJTkUgJiYg
IWlzUm9vdElubGluZUJveCgpKSB8fCBjaGlsZFN0eWxlLnZlcnRpY2FsQWxpZ24oKSAhPSBCQVNF
TElORQpAQCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6YWRkVG9MaW5lKElu
bGluZUJveCogY2hpbGQpCiAgICAgICAgICAgICB8fCBjaGlsZFN0eWxlLmhhc0JvcmRlckltYWdl
T3V0c2V0cygpKSkKICAgICAgICAgICAgIGNoaWxkLT5jbGVhcktub3duVG9IYXZlTm9PdmVyZmxv
dygpOwogICAgICAgICAKLSAgICAgICAgaWYgKGtub3duVG9IYXZlTm9PdmVyZmxvdygpICYmIGNo
aWxkLT5pc0lubGluZUZsb3dCb3goKSAmJiAhdG9JbmxpbmVGbG93Qm94KGNoaWxkKS0+a25vd25U
b0hhdmVOb092ZXJmbG93KCkpCisgICAgICAgIGlmIChrbm93blRvSGF2ZU5vT3ZlcmZsb3coKSAm
JiBpczxJbmxpbmVGbG93Qm94PigqY2hpbGQpICYmICFkb3duY2FzdDxJbmxpbmVGbG93Qm94Pigq
Y2hpbGQpLmtub3duVG9IYXZlTm9PdmVyZmxvdygpKQogICAgICAgICAgICAgY2xlYXJLbm93blRv
SGF2ZU5vT3ZlcmZsb3coKTsKICAgICB9CiAKQEAgLTM0NywxMSArMzQ3LDkgQEAgdm9pZCBJbmxp
bmVGbG93Qm94OjpkZXRlcm1pbmVTcGFjaW5nRm9yRmxvd0JveGVzKGJvb2wgbGFzdExpbmUsIGJv
b2wgaXNMb2dpY2FsbHkKICAgICBzZXRFZGdlcyhpbmNsdWRlTGVmdEVkZ2UsIGluY2x1ZGVSaWdo
dEVkZ2UpOwogCiAgICAgLy8gUmVjdXIgaW50byBvdXIgY2hpbGRyZW4uCi0gICAgZm9yIChJbmxp
bmVCb3gqIGN1cnJDaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY3VyckNoaWxkOyBjdXJyQ2hpbGQgPSBj
dXJyQ2hpbGQtPm5leHRPbkxpbmUoKSkgewotICAgICAgICBpZiAoY3VyckNoaWxkLT5pc0lubGlu
ZUZsb3dCb3goKSkgewotICAgICAgICAgICAgSW5saW5lRmxvd0JveCogY3VyckZsb3cgPSB0b0lu
bGluZUZsb3dCb3goY3VyckNoaWxkKTsKLSAgICAgICAgICAgIGN1cnJGbG93LT5kZXRlcm1pbmVT
cGFjaW5nRm9yRmxvd0JveGVzKGxhc3RMaW5lLCBpc0xvZ2ljYWxseUxhc3RSdW5XcmFwcGVkLCBs
b2dpY2FsbHlMYXN0UnVuUmVuZGVyZXIpOwotICAgICAgICB9CisgICAgZm9yIChJbmxpbmVCb3gq
IGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dE9uTGluZSgp
KSB7CisgICAgICAgIGlmIChpczxJbmxpbmVGbG93Qm94PigqY2hpbGQpKQorICAgICAgICAgICAg
ZG93bmNhc3Q8SW5saW5lRmxvd0JveD4oKmNoaWxkKS5kZXRlcm1pbmVTcGFjaW5nRm9yRmxvd0Jv
eGVzKGxhc3RMaW5lLCBpc0xvZ2ljYWxseUxhc3RSdW5XcmFwcGVkLCBsb2dpY2FsbHlMYXN0UnVu
UmVuZGVyZXIpOwogICAgIH0KIH0KIApAQCAtMzc1LDUyICszNzMsNTIgQEAgZmxvYXQgSW5saW5l
Rmxvd0JveDo6cGxhY2VCb3hlc0luSW5saW5lRGlyZWN0aW9uKGZsb2F0IGxvZ2ljYWxMZWZ0LCBi
b29sJiBuZWVkc1cKIAogZmxvYXQgSW5saW5lRmxvd0JveDo6cGxhY2VCb3hSYW5nZUluSW5saW5l
RGlyZWN0aW9uKElubGluZUJveCogZmlyc3RDaGlsZCwgSW5saW5lQm94KiBsYXN0Q2hpbGQsIGZs
b2F0JiBsb2dpY2FsTGVmdCwgZmxvYXQmIG1pbkxvZ2ljYWxMZWZ0LCBmbG9hdCYgbWF4TG9naWNh
bFJpZ2h0LCBib29sJiBuZWVkc1dvcmRTcGFjaW5nKQogewotICAgIGZvciAoSW5saW5lQm94KiBj
dXJyID0gZmlyc3RDaGlsZDsgY3VyciAmJiBjdXJyICE9IGxhc3RDaGlsZDsgY3VyciA9IGN1cnIt
Pm5leHRPbkxpbmUoKSkgewotICAgICAgICBpZiAoY3Vyci0+cmVuZGVyZXIoKS5pc1RleHQoKSkg
ewotICAgICAgICAgICAgSW5saW5lVGV4dEJveCogdGV4dCA9IHRvSW5saW5lVGV4dEJveChjdXJy
KTsKLSAgICAgICAgICAgIFJlbmRlclRleHQmIHJ0ID0gdGV4dC0+cmVuZGVyZXIoKTsKLSAgICAg
ICAgICAgIGlmIChydC50ZXh0TGVuZ3RoKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAobmVlZHNX
b3JkU3BhY2luZyAmJiBpc1NwYWNlT3JOZXdsaW5lKHJ0LmNoYXJhY3RlckF0KHRleHQtPnN0YXJ0
KCkpKSkKLSAgICAgICAgICAgICAgICAgICAgbG9naWNhbExlZnQgKz0gdGV4dC0+bGluZVN0eWxl
KCkuZm9udCgpLndvcmRTcGFjaW5nKCk7Ci0gICAgICAgICAgICAgICAgbmVlZHNXb3JkU3BhY2lu
ZyA9ICFpc1NwYWNlT3JOZXdsaW5lKHJ0LmNoYXJhY3RlckF0KHRleHQtPmVuZCgpKSk7CisgICAg
Zm9yIChJbmxpbmVCb3gqIGNoaWxkID0gZmlyc3RDaGlsZDsgY2hpbGQgJiYgY2hpbGQgIT0gbGFz
dENoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0T25MaW5lKCkpIHsKKyAgICAgICAgaWYgKGlzPFJl
bmRlclRleHQ+KGNoaWxkLT5yZW5kZXJlcigpKSkgeworICAgICAgICAgICAgYXV0byYgdGV4dEJv
eCA9IGRvd25jYXN0PElubGluZVRleHRCb3g+KCpjaGlsZCk7CisgICAgICAgICAgICBSZW5kZXJU
ZXh0JiByZW5kZXJUZXh0ID0gdGV4dEJveC5yZW5kZXJlcigpOworICAgICAgICAgICAgaWYgKHJl
bmRlclRleHQudGV4dExlbmd0aCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKG5lZWRzV29yZFNw
YWNpbmcgJiYgaXNTcGFjZU9yTmV3bGluZShyZW5kZXJUZXh0LmNoYXJhY3RlckF0KHRleHRCb3gu
c3RhcnQoKSkpKQorICAgICAgICAgICAgICAgICAgICBsb2dpY2FsTGVmdCArPSB0ZXh0Qm94Lmxp
bmVTdHlsZSgpLmZvbnQoKS53b3JkU3BhY2luZygpOworICAgICAgICAgICAgICAgIG5lZWRzV29y
ZFNwYWNpbmcgPSAhaXNTcGFjZU9yTmV3bGluZShyZW5kZXJUZXh0LmNoYXJhY3RlckF0KHRleHRC
b3guZW5kKCkpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRleHQtPnNldExvZ2ljYWxM
ZWZ0KGxvZ2ljYWxMZWZ0KTsKKyAgICAgICAgICAgIHRleHRCb3guc2V0TG9naWNhbExlZnQobG9n
aWNhbExlZnQpOwogICAgICAgICAgICAgaWYgKGtub3duVG9IYXZlTm9PdmVyZmxvdygpKQogICAg
ICAgICAgICAgICAgIG1pbkxvZ2ljYWxMZWZ0ID0gc3RkOjptaW4obG9naWNhbExlZnQsIG1pbkxv
Z2ljYWxMZWZ0KTsKLSAgICAgICAgICAgIGxvZ2ljYWxMZWZ0ICs9IHRleHQtPmxvZ2ljYWxXaWR0
aCgpOworICAgICAgICAgICAgbG9naWNhbExlZnQgKz0gdGV4dEJveC5sb2dpY2FsV2lkdGgoKTsK
ICAgICAgICAgICAgIGlmIChrbm93blRvSGF2ZU5vT3ZlcmZsb3coKSkKICAgICAgICAgICAgICAg
ICBtYXhMb2dpY2FsUmlnaHQgPSBzdGQ6Om1heChsb2dpY2FsTGVmdCwgbWF4TG9naWNhbFJpZ2h0
KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChjdXJyLT5yZW5kZXJlcigpLmlz
T3V0T2ZGbG93UG9zaXRpb25lZCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnItPnJlbmRl
cmVyKCkucGFyZW50KCktPnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAgICAg
ICAgICAgICAgICAgICBjdXJyLT5zZXRMb2dpY2FsTGVmdChsb2dpY2FsTGVmdCk7CisgICAgICAg
ICAgICBpZiAoY2hpbGQtPnJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoY2hpbGQtPnJlbmRlcmVyKCkucGFyZW50KCktPnN0eWxlKCkuaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpKQorICAgICAgICAgICAgICAgICAgICBjaGlsZC0+c2V0TG9n
aWNhbExlZnQobG9naWNhbExlZnQpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgLy8gT3VyIG9mZnNldCB0aGF0IHdlIGNhY2hlIG5lZWRzIHRvIGJlIGZyb20gdGhl
IGVkZ2Ugb2YgdGhlIHJpZ2h0IGJvcmRlciBib3ggYW5kCiAgICAgICAgICAgICAgICAgICAgIC8v
IG5vdCB0aGUgbGVmdCBib3JkZXIgYm94LiAgV2UgaGF2ZSB0byBzdWJ0cmFjdCB8eHwgZnJvbSB0
aGUgd2lkdGggb2YgdGhlIGJsb2NrCiAgICAgICAgICAgICAgICAgICAgIC8vICh3aGljaCBjYW4g
YmUgb2J0YWluZWQgZnJvbSB0aGUgcm9vdCBsaW5lIGJveCkuCi0gICAgICAgICAgICAgICAgICAg
IGN1cnItPnNldExvZ2ljYWxMZWZ0KHJvb3QoKS5ibG9ja0Zsb3coKS5sb2dpY2FsV2lkdGgoKSAt
IGxvZ2ljYWxMZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQtPnNldExvZ2ljYWxMZWZ0
KHJvb3QoKS5ibG9ja0Zsb3coKS5sb2dpY2FsV2lkdGgoKSAtIGxvZ2ljYWxMZWZ0KTsKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsgLy8gVGhlIHBvc2l0aW9uZWQgb2JqZWN0IGhhcyBubyBlZmZl
Y3Qgb24gdGhlIHdpZHRoLgogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGN1cnItPnJl
bmRlcmVyKCkuaXNSZW5kZXJJbmxpbmUoKSkgewotICAgICAgICAgICAgICAgIElubGluZUZsb3dC
b3gqIGZsb3cgPSB0b0lubGluZUZsb3dCb3goY3Vycik7Ci0gICAgICAgICAgICAgICAgbG9naWNh
bExlZnQgKz0gZmxvdy0+bWFyZ2luTG9naWNhbExlZnQoKTsKKyAgICAgICAgICAgIGlmIChpczxS
ZW5kZXJJbmxpbmU+KGNoaWxkLT5yZW5kZXJlcigpKSkgeworICAgICAgICAgICAgICAgIGF1dG8m
IGZsb3cgPSBkb3duY2FzdDxJbmxpbmVGbG93Qm94PigqY2hpbGQpOworICAgICAgICAgICAgICAg
IGxvZ2ljYWxMZWZ0ICs9IGZsb3cubWFyZ2luTG9naWNhbExlZnQoKTsKICAgICAgICAgICAgICAg
ICBpZiAoa25vd25Ub0hhdmVOb092ZXJmbG93KCkpCiAgICAgICAgICAgICAgICAgICAgIG1pbkxv
Z2ljYWxMZWZ0ID0gc3RkOjptaW4obG9naWNhbExlZnQsIG1pbkxvZ2ljYWxMZWZ0KTsKLSAgICAg
ICAgICAgICAgICBsb2dpY2FsTGVmdCA9IGZsb3ctPnBsYWNlQm94ZXNJbklubGluZURpcmVjdGlv
bihsb2dpY2FsTGVmdCwgbmVlZHNXb3JkU3BhY2luZyk7CisgICAgICAgICAgICAgICAgbG9naWNh
bExlZnQgPSBmbG93LnBsYWNlQm94ZXNJbklubGluZURpcmVjdGlvbihsb2dpY2FsTGVmdCwgbmVl
ZHNXb3JkU3BhY2luZyk7CiAgICAgICAgICAgICAgICAgaWYgKGtub3duVG9IYXZlTm9PdmVyZmxv
dygpKQogICAgICAgICAgICAgICAgICAgICBtYXhMb2dpY2FsUmlnaHQgPSBzdGQ6Om1heChsb2dp
Y2FsTGVmdCwgbWF4TG9naWNhbFJpZ2h0KTsKLSAgICAgICAgICAgICAgICBsb2dpY2FsTGVmdCAr
PSBmbG93LT5tYXJnaW5Mb2dpY2FsUmlnaHQoKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoIWN1
cnItPnJlbmRlcmVyKCkuaXNMaXN0TWFya2VyKCkgfHwgdG9SZW5kZXJMaXN0TWFya2VyKGN1cnIt
PnJlbmRlcmVyKCkpLmlzSW5zaWRlKCkpIHsKKyAgICAgICAgICAgICAgICBsb2dpY2FsTGVmdCAr
PSBmbG93Lm1hcmdpbkxvZ2ljYWxSaWdodCgpOworICAgICAgICAgICAgfSBlbHNlIGlmICghY2hp
bGQtPnJlbmRlcmVyKCkuaXNMaXN0TWFya2VyKCkgfHwgdG9SZW5kZXJMaXN0TWFya2VyKGNoaWxk
LT5yZW5kZXJlcigpKS5pc0luc2lkZSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIGJveCBj
YW4gaGF2ZSBhIGRpZmZlcmVudCB3cml0aW5nLW1vZGUgdGhhbiB0aGUgb3ZlcmFsbCBsaW5lLCBz
byB0aGlzIGlzIGEgYml0IGNvbXBsaWNhdGVkLgogICAgICAgICAgICAgICAgIC8vIEp1c3QgZ2V0
IGFsbCB0aGUgcGh5c2ljYWwgbWFyZ2luIGFuZCBvdmVyZmxvdyB2YWx1ZXMgYnkgaGFuZCBiYXNl
ZCBvZmYgfGlzVmVydGljYWx8LgotICAgICAgICAgICAgICAgIExheW91dFVuaXQgbG9naWNhbExl
ZnRNYXJnaW4gPSBpc0hvcml6b250YWwoKSA/IGN1cnItPmJveE1vZGVsT2JqZWN0KCktPm1hcmdp
bkxlZnQoKSA6IGN1cnItPmJveE1vZGVsT2JqZWN0KCktPm1hcmdpblRvcCgpOwotICAgICAgICAg
ICAgICAgIExheW91dFVuaXQgbG9naWNhbFJpZ2h0TWFyZ2luID0gaXNIb3Jpem9udGFsKCkgPyBj
dXJyLT5ib3hNb2RlbE9iamVjdCgpLT5tYXJnaW5SaWdodCgpIDogY3Vyci0+Ym94TW9kZWxPYmpl
Y3QoKS0+bWFyZ2luQm90dG9tKCk7CisgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2Fs
TGVmdE1hcmdpbiA9IGlzSG9yaXpvbnRhbCgpID8gY2hpbGQtPmJveE1vZGVsT2JqZWN0KCktPm1h
cmdpbkxlZnQoKSA6IGNoaWxkLT5ib3hNb2RlbE9iamVjdCgpLT5tYXJnaW5Ub3AoKTsKKyAgICAg
ICAgICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodE1hcmdpbiA9IGlzSG9yaXpvbnRhbCgp
ID8gY2hpbGQtPmJveE1vZGVsT2JqZWN0KCktPm1hcmdpblJpZ2h0KCkgOiBjaGlsZC0+Ym94TW9k
ZWxPYmplY3QoKS0+bWFyZ2luQm90dG9tKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgbG9naWNhbExlZnQgKz0gbG9naWNhbExlZnRNYXJnaW47Ci0gICAgICAgICAgICAgICAg
Y3Vyci0+c2V0TG9naWNhbExlZnQobG9naWNhbExlZnQpOworICAgICAgICAgICAgICAgIGNoaWxk
LT5zZXRMb2dpY2FsTGVmdChsb2dpY2FsTGVmdCk7CiAgICAgICAgICAgICAgICAgaWYgKGtub3du
VG9IYXZlTm9PdmVyZmxvdygpKQogICAgICAgICAgICAgICAgICAgICBtaW5Mb2dpY2FsTGVmdCA9
IHN0ZDo6bWluKGxvZ2ljYWxMZWZ0LCBtaW5Mb2dpY2FsTGVmdCk7Ci0gICAgICAgICAgICAgICAg
bG9naWNhbExlZnQgKz0gY3Vyci0+bG9naWNhbFdpZHRoKCk7CisgICAgICAgICAgICAgICAgbG9n
aWNhbExlZnQgKz0gY2hpbGQtPmxvZ2ljYWxXaWR0aCgpOwogICAgICAgICAgICAgICAgIGlmIChr
bm93blRvSGF2ZU5vT3ZlcmZsb3coKSkKICAgICAgICAgICAgICAgICAgICAgbWF4TG9naWNhbFJp
Z2h0ID0gc3RkOjptYXgobG9naWNhbExlZnQsIG1heExvZ2ljYWxSaWdodCk7CiAgICAgICAgICAg
ICAgICAgbG9naWNhbExlZnQgKz0gbG9naWNhbFJpZ2h0TWFyZ2luOwpAQCAtNDQyLDI2ICs0NDAs
MjYgQEAgYm9vbCBJbmxpbmVGbG93Qm94OjpyZXF1aXJlc0lkZW9ncmFwaGljQmFzZWxpbmUoY29u
c3QgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm8KICAgICAgICAgfHwgbGluZVN0eWxlLmZvbnQo
KS5wcmltYXJ5Rm9udCgpLT5oYXNWZXJ0aWNhbEdseXBocygpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAotICAgIGZvciAoSW5saW5lQm94KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJy
ID0gY3Vyci0+bmV4dE9uTGluZSgpKSB7Ci0gICAgICAgIGlmIChjdXJyLT5yZW5kZXJlcigpLmlz
T3V0T2ZGbG93UG9zaXRpb25lZCgpKQorICAgIGZvciAoSW5saW5lQm94KiBjaGlsZCA9IGZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRPbkxpbmUoKSkgeworICAgICAgICBp
ZiAoY2hpbGQtPnJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsgLy8gUG9zaXRpb25lZCBwbGFjZWhvbGRlcnMgZG9uJ3QgYWZmZWN0IGNhbGN1
bGF0aW9ucy4KICAgICAgICAgCi0gICAgICAgIGlmIChjdXJyLT5pc0lubGluZUZsb3dCb3goKSkg
ewotICAgICAgICAgICAgaWYgKHRvSW5saW5lRmxvd0JveChjdXJyKS0+cmVxdWlyZXNJZGVvZ3Jh
cGhpY0Jhc2VsaW5lKHRleHRCb3hEYXRhTWFwKSkKKyAgICAgICAgaWYgKGlzPElubGluZUZsb3dC
b3g+KCpjaGlsZCkpIHsKKyAgICAgICAgICAgIGlmIChkb3duY2FzdDxJbmxpbmVGbG93Qm94Pigq
Y2hpbGQpLnJlcXVpcmVzSWRlb2dyYXBoaWNCYXNlbGluZSh0ZXh0Qm94RGF0YU1hcCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBp
ZiAoY3Vyci0+bGluZVN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250KCktPmhhc1ZlcnRpY2FsR2x5
cGhzKCkpCisgICAgICAgICAgICBpZiAoY2hpbGQtPmxpbmVTdHlsZSgpLmZvbnQoKS5wcmltYXJ5
Rm9udCgpLT5oYXNWZXJ0aWNhbEdseXBocygpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBjb25zdCBWZWN0b3I8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPiogdXNlZEZvbnRzID0gMDsKLSAgICAgICAgICAgIGlmIChjdXJyLT5pc0lubGluZVRl
eHRCb3goKSkgewotICAgICAgICAgICAgICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRz
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHRleHRCb3hEYXRhTWFwLmZpbmQodG9JbmxpbmVUZXh0
Qm94KGN1cnIpKTsKLSAgICAgICAgICAgICAgICB1c2VkRm9udHMgPSBpdCA9PSB0ZXh0Qm94RGF0
YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnZhbHVlLmZpcnN0OworICAgICAgICAgICAgY29uc3QgVmVj
dG9yPGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIHVzZWRGb250cyA9IG51bGxwdHI7CisgICAgICAg
ICAgICBpZiAoaXM8SW5saW5lVGV4dEJveD4oKmNoaWxkKSkgeworICAgICAgICAgICAgICAgIEds
eXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHRleHRC
b3hEYXRhTWFwLmZpbmQoZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oY2hpbGQpKTsKKyAgICAgICAg
ICAgICAgICB1c2VkRm9udHMgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IG51bGxwdHIg
OiAmaXQtPnZhbHVlLmZpcnN0OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAodXNl
ZEZvbnRzKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB1c2VkRm9u
dHMtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh1c2VkRm9udHMtPmF0
KGkpLT5oYXNWZXJ0aWNhbEdseXBocygpKQorICAgICAgICAgICAgICAgIGZvciAoY29uc3QgU2lt
cGxlRm9udERhdGEqIGZvbnREYXRhIDogKnVzZWRGb250cykgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoZm9udERhdGEtPmhhc1ZlcnRpY2FsR2x5cGhzKCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC00
ODAsMTUgKzQ3OCwxNSBAQCBzdGF0aWMgYm9vbCB2ZXJ0aWNhbEFsaWduQXBwbGllcyhjb25zdCBS
ZW5kZXJPYmplY3QmIHJlbmRlcmVyKQogCiB2b2lkIElubGluZUZsb3dCb3g6OmFkanVzdE1heEFz
Y2VudEFuZERlc2NlbnQoaW50JiBtYXhBc2NlbnQsIGludCYgbWF4RGVzY2VudCwgaW50IG1heFBv
c2l0aW9uVG9wLCBpbnQgbWF4UG9zaXRpb25Cb3R0b20pCiB7Ci0gICAgZm9yIChJbmxpbmVCb3gq
IGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0T25MaW5lKCkpIHsK
KyAgICBmb3IgKElubGluZUJveCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLT5uZXh0T25MaW5lKCkpIHsKICAgICAgICAgLy8gVGhlIGNvbXB1dGVkIGxpbmVoZWln
aHQgbmVlZHMgdG8gYmUgZXh0ZW5kZWQgZm9yIHRoZQogICAgICAgICAvLyBwb3NpdGlvbmVkIGVs
ZW1lbnRzCi0gICAgICAgIGlmIChjdXJyLT5yZW5kZXJlcigpLmlzT3V0T2ZGbG93UG9zaXRpb25l
ZCgpKQorICAgICAgICBpZiAoY2hpbGQtPnJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsgLy8gUG9zaXRpb25lZCBwbGFjZWhvbGRlcnMgZG9u
J3QgYWZmZWN0IGNhbGN1bGF0aW9ucy4KIAotICAgICAgICBpZiAoKGN1cnItPnZlcnRpY2FsQWxp
Z24oKSA9PSBUT1AgfHwgY3Vyci0+dmVydGljYWxBbGlnbigpID09IEJPVFRPTSkgJiYgdmVydGlj
YWxBbGlnbkFwcGxpZXMoY3Vyci0+cmVuZGVyZXIoKSkpIHsKLSAgICAgICAgICAgIGludCBsaW5l
SGVpZ2h0ID0gY3Vyci0+bGluZUhlaWdodCgpOwotICAgICAgICAgICAgaWYgKGN1cnItPnZlcnRp
Y2FsQWxpZ24oKSA9PSBUT1ApIHsKKyAgICAgICAgaWYgKChjaGlsZC0+dmVydGljYWxBbGlnbigp
ID09IFRPUCB8fCBjaGlsZC0+dmVydGljYWxBbGlnbigpID09IEJPVFRPTSkgJiYgdmVydGljYWxB
bGlnbkFwcGxpZXMoY2hpbGQtPnJlbmRlcmVyKCkpKSB7CisgICAgICAgICAgICBpbnQgbGluZUhl
aWdodCA9IGNoaWxkLT5saW5lSGVpZ2h0KCk7CisgICAgICAgICAgICBpZiAoY2hpbGQtPnZlcnRp
Y2FsQWxpZ24oKSA9PSBUT1ApIHsKICAgICAgICAgICAgICAgICBpZiAobWF4QXNjZW50ICsgbWF4
RGVzY2VudCA8IGxpbmVIZWlnaHQpCiAgICAgICAgICAgICAgICAgICAgIG1heERlc2NlbnQgPSBs
aW5lSGVpZ2h0IC0gbWF4QXNjZW50OwogICAgICAgICAgICAgfQpAQCAtNTAxLDggKzQ5OSw4IEBA
IHZvaWQgSW5saW5lRmxvd0JveDo6YWRqdXN0TWF4QXNjZW50QW5kRGVzY2VudChpbnQmIG1heEFz
Y2VudCwgaW50JiBtYXhEZXNjZW50LCBpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIAotICAgICAgICBpZiAoY3Vyci0+aXNJbmxpbmVGbG93Qm94KCkpCi0gICAgICAgICAgICB0
b0lubGluZUZsb3dCb3goY3VyciktPmFkanVzdE1heEFzY2VudEFuZERlc2NlbnQobWF4QXNjZW50
LCBtYXhEZXNjZW50LCBtYXhQb3NpdGlvblRvcCwgbWF4UG9zaXRpb25Cb3R0b20pOworICAgICAg
ICBpZiAoaXM8SW5saW5lRmxvd0JveD4oKmNoaWxkKSkKKyAgICAgICAgICAgIGRvd25jYXN0PElu
bGluZUZsb3dCb3g+KCpjaGlsZCkuYWRqdXN0TWF4QXNjZW50QW5kRGVzY2VudChtYXhBc2NlbnQs
IG1heERlc2NlbnQsIG1heFBvc2l0aW9uVG9wLCBtYXhQb3NpdGlvbkJvdHRvbSk7CiAgICAgfQog
fQogCkBAIC01NTAsMTEgKzU0OCwxMSBAQCB2b2lkIElubGluZUZsb3dCb3g6OmNvbXB1dGVMb2dp
Y2FsQm94SGVpZ2h0cyhSb290SW5saW5lQm94JiByb290Qm94LCBMYXlvdXRVbml0JgogICAgIGlm
ICghY2hlY2tDaGlsZHJlbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChJbmxpbmVCb3gq
IGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0T25MaW5lKCkpIHsK
LSAgICAgICAgaWYgKGN1cnItPnJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCisg
ICAgZm9yIChJbmxpbmVCb3gqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+bmV4dE9uTGluZSgpKSB7CisgICAgICAgIGlmIChjaGlsZC0+cmVuZGVyZXIoKS5pc091
dE9mRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBQb3NpdGlvbmVk
IHBsYWNlaG9sZGVycyBkb24ndCBhZmZlY3QgY2FsY3VsYXRpb25zLgogICAgICAgICAKLSAgICAg
ICAgSW5saW5lRmxvd0JveCogaW5saW5lRmxvd0JveCA9IGN1cnItPmlzSW5saW5lRmxvd0JveCgp
ID8gdG9JbmxpbmVGbG93Qm94KGN1cnIpIDogMDsKKyAgICAgICAgSW5saW5lRmxvd0JveCogaW5s
aW5lRmxvd0JveCA9IGlzPElubGluZUZsb3dCb3g+KCpjaGlsZCkgPyBkb3duY2FzdDxJbmxpbmVG
bG93Qm94PihjaGlsZCkgOiBudWxscHRyOwogICAgICAgICAKICAgICAgICAgYm9vbCBhZmZlY3Rz
QXNjZW50ID0gZmFsc2U7CiAgICAgICAgIGJvb2wgYWZmZWN0c0Rlc2NlbnQgPSBmYWxzZTsKQEAg
LTU2MiwxNyArNTYwLDE3IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6Y29tcHV0ZUxvZ2ljYWxCb3hI
ZWlnaHRzKFJvb3RJbmxpbmVCb3gmIHJvb3RCb3gsIExheW91dFVuaXQmCiAgICAgICAgIC8vIFRo
ZSB2ZXJ0aWNhbFBvc2l0aW9uRm9yQm94IGZ1bmN0aW9uIHJldHVybnMgdGhlIGRpc3RhbmNlIGJl
dHdlZW4gdGhlIGNoaWxkIGJveCdzIGJhc2VsaW5lCiAgICAgICAgIC8vIGFuZCB0aGUgcm9vdCBi
b3gncyBiYXNlbGluZS4gIFRoZSB2YWx1ZSBpcyBuZWdhdGl2ZSBpZiB0aGUgY2hpbGQgYm94J3Mg
YmFzZWxpbmUgaXMgYWJvdmUgdGhlCiAgICAgICAgIC8vIHJvb3QgYm94J3MgYmFzZWxpbmUsIGFu
ZCBpdCBpcyBwb3NpdGl2ZSBpZiB0aGUgY2hpbGQgYm94J3MgYmFzZWxpbmUgaXMgYmVsb3cgdGhl
IHJvb3QgYm94J3MgYmFzZWxpbmUuCi0gICAgICAgIGN1cnItPnNldExvZ2ljYWxUb3Aocm9vdEJv
eC52ZXJ0aWNhbFBvc2l0aW9uRm9yQm94KGN1cnIsIHZlcnRpY2FsUG9zaXRpb25DYWNoZSkpOwor
ICAgICAgICBjaGlsZC0+c2V0TG9naWNhbFRvcChyb290Qm94LnZlcnRpY2FsUG9zaXRpb25Gb3JC
b3goY2hpbGQsIHZlcnRpY2FsUG9zaXRpb25DYWNoZSkpOwogICAgICAgICAKICAgICAgICAgaW50
IGFzY2VudCA9IDA7CiAgICAgICAgIGludCBkZXNjZW50ID0gMDsKLSAgICAgICAgcm9vdEJveC5h
c2NlbnRBbmREZXNjZW50Rm9yQm94KCpjdXJyLCB0ZXh0Qm94RGF0YU1hcCwgYXNjZW50LCBkZXNj
ZW50LCBhZmZlY3RzQXNjZW50LCBhZmZlY3RzRGVzY2VudCk7CisgICAgICAgIHJvb3RCb3guYXNj
ZW50QW5kRGVzY2VudEZvckJveCgqY2hpbGQsIHRleHRCb3hEYXRhTWFwLCBhc2NlbnQsIGRlc2Nl
bnQsIGFmZmVjdHNBc2NlbnQsIGFmZmVjdHNEZXNjZW50KTsKIAogICAgICAgICBMYXlvdXRVbml0
IGJveEhlaWdodCA9IGFzY2VudCArIGRlc2NlbnQ7Ci0gICAgICAgIGlmIChjdXJyLT52ZXJ0aWNh
bEFsaWduKCkgPT0gVE9QICYmIHZlcnRpY2FsQWxpZ25BcHBsaWVzKGN1cnItPnJlbmRlcmVyKCkp
KSB7CisgICAgICAgIGlmIChjaGlsZC0+dmVydGljYWxBbGlnbigpID09IFRPUCAmJiB2ZXJ0aWNh
bEFsaWduQXBwbGllcyhjaGlsZC0+cmVuZGVyZXIoKSkpIHsKICAgICAgICAgICAgIGlmIChtYXhQ
b3NpdGlvblRvcCA8IGJveEhlaWdodCkKICAgICAgICAgICAgICAgICBtYXhQb3NpdGlvblRvcCA9
IGJveEhlaWdodDsKLSAgICAgICAgfSBlbHNlIGlmIChjdXJyLT52ZXJ0aWNhbEFsaWduKCkgPT0g
Qk9UVE9NICYmIHZlcnRpY2FsQWxpZ25BcHBsaWVzKGN1cnItPnJlbmRlcmVyKCkpKSB7CisgICAg
ICAgIH0gZWxzZSBpZiAoY2hpbGQtPnZlcnRpY2FsQWxpZ24oKSA9PSBCT1RUT00gJiYgdmVydGlj
YWxBbGlnbkFwcGxpZXMoY2hpbGQtPnJlbmRlcmVyKCkpKSB7CiAgICAgICAgICAgICBpZiAobWF4
UG9zaXRpb25Cb3R0b20gPCBib3hIZWlnaHQpCiAgICAgICAgICAgICAgICAgbWF4UG9zaXRpb25C
b3R0b20gPSBib3hIZWlnaHQ7CiAgICAgICAgIH0gZWxzZSBpZiAoIWlubGluZUZsb3dCb3ggfHwg
c3RyaWN0TW9kZSB8fCBpbmxpbmVGbG93Qm94LT5oYXNUZXh0Q2hpbGRyZW4oKSB8fCAoaW5saW5l
Rmxvd0JveC0+ZGVzY2VuZGFudHNIYXZlU2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSgpICYmIGlu
bGluZUZsb3dCb3gtPmhhc1RleHREZXNjZW5kYW50cygpKQpAQCAtNTgzLDggKzU4MSw4IEBAIHZv
aWQgSW5saW5lRmxvd0JveDo6Y29tcHV0ZUxvZ2ljYWxCb3hIZWlnaHRzKFJvb3RJbmxpbmVCb3gm
IHJvb3RCb3gsIExheW91dFVuaXQmCiAgICAgICAgICAgICAvLyBtZWFucyBpcyB0aGF0IGFzY2Vu
dCBhbmQgZGVzY2VudCAoaW5jbHVkaW5nIGxlYWRpbmcpLCBjYW4gZW5kIHVwIGJlaW5nIG5lZ2F0
aXZlLiAgVGhlIHNldE1heEFzY2VudCBhbmQKICAgICAgICAgICAgIC8vIHNldE1heERlc2NlbnQg
Ym9vbGVhbnMgYXJlIHVzZWQgdG8gZW5zdXJlIHRoYXQgd2UncmUgd2lsbGluZyB0byBpbml0aWFs
bHkgc2V0IG1heEFzY2VudC9EZXNjZW50IHRvIG5lZ2F0aXZlCiAgICAgICAgICAgICAvLyB2YWx1
ZXMuCi0gICAgICAgICAgICBhc2NlbnQgLT0gY3Vyci0+bG9naWNhbFRvcCgpOwotICAgICAgICAg
ICAgZGVzY2VudCArPSBjdXJyLT5sb2dpY2FsVG9wKCk7CisgICAgICAgICAgICBhc2NlbnQgLT0g
Y2hpbGQtPmxvZ2ljYWxUb3AoKTsKKyAgICAgICAgICAgIGRlc2NlbnQgKz0gY2hpbGQtPmxvZ2lj
YWxUb3AoKTsKICAgICAgICAgICAgIGlmIChhZmZlY3RzQXNjZW50ICYmIChtYXhBc2NlbnQgPCBh
c2NlbnQgfHwgIXNldE1heEFzY2VudCkpIHsKICAgICAgICAgICAgICAgICBtYXhBc2NlbnQgPSBh
c2NlbnQ7CiAgICAgICAgICAgICAgICAgc2V0TWF4QXNjZW50ID0gdHJ1ZTsKQEAgLTYyMSw3OCAr
NjE5LDc4IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0luQmxvY2tEaXJlY3Rpb24o
TGF5b3V0VW5pdCB0b3AsIExheW91dFVuaXQgbWF4SGVpCiAgICAgICAgICAgICBhZGp1c3RtZW50
Rm9yQ2hpbGRyZW5XaXRoU2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSArPSByZW5kZXJlcigpLmJv
cmRlckFuZFBhZGRpbmdCZWZvcmUoKTsKICAgICB9CiAKLSAgICBmb3IgKElubGluZUJveCogY3Vy
ciA9IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRPbkxpbmUoKSkgewotICAg
ICAgICBpZiAoY3Vyci0+cmVuZGVyZXIoKS5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkKKyAgICBm
b3IgKElubGluZUJveCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxk
LT5uZXh0T25MaW5lKCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5yZW5kZXJlcigpLmlzT3V0T2ZG
bG93UG9zaXRpb25lZCgpKQogICAgICAgICAgICAgY29udGludWU7IC8vIFBvc2l0aW9uZWQgcGxh
Y2Vob2xkZXJzIGRvbid0IGFmZmVjdCBjYWxjdWxhdGlvbnMuCiAKICAgICAgICAgaWYgKGRlc2Nl
bmRhbnRzSGF2ZVNhbWVMaW5lSGVpZ2h0QW5kQmFzZWxpbmUoKSkgewotICAgICAgICAgICAgY3Vy
ci0+YWRqdXN0QmxvY2tEaXJlY3Rpb25Qb3NpdGlvbihhZGp1c3RtZW50Rm9yQ2hpbGRyZW5XaXRo
U2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSk7CisgICAgICAgICAgICBjaGlsZC0+YWRqdXN0Qmxv
Y2tEaXJlY3Rpb25Qb3NpdGlvbihhZGp1c3RtZW50Rm9yQ2hpbGRyZW5XaXRoU2FtZUxpbmVIZWln
aHRBbmRCYXNlbGluZSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAg
ICAgIElubGluZUZsb3dCb3gqIGlubGluZUZsb3dCb3ggPSBjdXJyLT5pc0lubGluZUZsb3dCb3go
KSA/IHRvSW5saW5lRmxvd0JveChjdXJyKSA6IDA7CisgICAgICAgIElubGluZUZsb3dCb3gqIGlu
bGluZUZsb3dCb3ggPSBpczxJbmxpbmVGbG93Qm94PigqY2hpbGQpID8gZG93bmNhc3Q8SW5saW5l
Rmxvd0JveD4oY2hpbGQpIDogbnVsbHB0cjsKICAgICAgICAgYm9vbCBjaGlsZEFmZmVjdHNUb3BC
b3R0b21Qb3MgPSB0cnVlOwogCi0gICAgICAgIGlmIChjdXJyLT52ZXJ0aWNhbEFsaWduKCkgPT0g
VE9QICYmIHZlcnRpY2FsQWxpZ25BcHBsaWVzKGN1cnItPnJlbmRlcmVyKCkpKQotICAgICAgICAg
ICAgY3Vyci0+c2V0TG9naWNhbFRvcCh0b3ApOwotICAgICAgICBlbHNlIGlmIChjdXJyLT52ZXJ0
aWNhbEFsaWduKCkgPT0gQk9UVE9NICYmIHZlcnRpY2FsQWxpZ25BcHBsaWVzKGN1cnItPnJlbmRl
cmVyKCkpKQotICAgICAgICAgICAgY3Vyci0+c2V0TG9naWNhbFRvcCh0b3AgKyBtYXhIZWlnaHQg
LSBjdXJyLT5saW5lSGVpZ2h0KCkpOworICAgICAgICBpZiAoY2hpbGQtPnZlcnRpY2FsQWxpZ24o
KSA9PSBUT1AgJiYgdmVydGljYWxBbGlnbkFwcGxpZXMoY2hpbGQtPnJlbmRlcmVyKCkpKQorICAg
ICAgICAgICAgY2hpbGQtPnNldExvZ2ljYWxUb3AodG9wKTsKKyAgICAgICAgZWxzZSBpZiAoY2hp
bGQtPnZlcnRpY2FsQWxpZ24oKSA9PSBCT1RUT00gJiYgdmVydGljYWxBbGlnbkFwcGxpZXMoY2hp
bGQtPnJlbmRlcmVyKCkpKQorICAgICAgICAgICAgY2hpbGQtPnNldExvZ2ljYWxUb3AodG9wICsg
bWF4SGVpZ2h0IC0gY2hpbGQtPmxpbmVIZWlnaHQoKSk7CiAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgaWYgKCFzdHJpY3RNb2RlICYmIGlubGluZUZsb3dCb3ggJiYgIWlubGluZUZsb3dCb3gt
Pmhhc1RleHRDaGlsZHJlbigpICYmICFpbmxpbmVGbG93Qm94LT5yZW5kZXJlcigpLmhhc0lubGlu
ZURpcmVjdGlvbkJvcmRlcnNPclBhZGRpbmcoKQogICAgICAgICAgICAgICAgICYmICEoaW5saW5l
Rmxvd0JveC0+ZGVzY2VuZGFudHNIYXZlU2FtZUxpbmVIZWlnaHRBbmRCYXNlbGluZSgpICYmIGlu
bGluZUZsb3dCb3gtPmhhc1RleHREZXNjZW5kYW50cygpKSkKICAgICAgICAgICAgICAgICBjaGls
ZEFmZmVjdHNUb3BCb3R0b21Qb3MgPSBmYWxzZTsKLSAgICAgICAgICAgIExheW91dFVuaXQgcG9z
QWRqdXN0ID0gbWF4QXNjZW50IC0gY3Vyci0+YmFzZWxpbmVQb3NpdGlvbihiYXNlbGluZVR5cGUp
OwotICAgICAgICAgICAgY3Vyci0+c2V0TG9naWNhbFRvcChjdXJyLT5sb2dpY2FsVG9wKCkgKyB0
b3AgKyBwb3NBZGp1c3QpOworICAgICAgICAgICAgTGF5b3V0VW5pdCBwb3NBZGp1c3QgPSBtYXhB
c2NlbnQgLSBjaGlsZC0+YmFzZWxpbmVQb3NpdGlvbihiYXNlbGluZVR5cGUpOworICAgICAgICAg
ICAgY2hpbGQtPnNldExvZ2ljYWxUb3AoY2hpbGQtPmxvZ2ljYWxUb3AoKSArIHRvcCArIHBvc0Fk
anVzdCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIExheW91dFVuaXQgbmV3TG9naWNh
bFRvcCA9IGN1cnItPmxvZ2ljYWxUb3AoKTsKKyAgICAgICAgTGF5b3V0VW5pdCBuZXdMb2dpY2Fs
VG9wID0gY2hpbGQtPmxvZ2ljYWxUb3AoKTsKICAgICAgICAgTGF5b3V0VW5pdCBuZXdMb2dpY2Fs
VG9wSW5jbHVkaW5nTWFyZ2lucyA9IG5ld0xvZ2ljYWxUb3A7Ci0gICAgICAgIExheW91dFVuaXQg
Ym94SGVpZ2h0ID0gY3Vyci0+bG9naWNhbEhlaWdodCgpOworICAgICAgICBMYXlvdXRVbml0IGJv
eEhlaWdodCA9IGNoaWxkLT5sb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAgIExheW91dFVuaXQgYm94
SGVpZ2h0SW5jbHVkaW5nTWFyZ2lucyA9IGJveEhlaWdodDsKIAotICAgICAgICBjb25zdCBSZW5k
ZXJTdHlsZSYgY2hpbGRMaW5lU3R5bGUgPSBjdXJyLT5saW5lU3R5bGUoKTsKLSAgICAgICAgaWYg
KGN1cnItPmJlaGF2ZXNMaWtlVGV4dCgpIHx8IGN1cnItPmlzSW5saW5lRmxvd0JveCgpKSB7Cisg
ICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBjaGlsZExpbmVTdHlsZSA9IGNoaWxkLT5saW5lU3R5
bGUoKTsKKyAgICAgICAgaWYgKGNoaWxkLT5iZWhhdmVzTGlrZVRleHQoKSB8fCBpczxJbmxpbmVG
bG93Qm94PigqY2hpbGQpKSB7CiAgICAgICAgICAgICBjb25zdCBGb250TWV0cmljcyYgZm9udE1l
dHJpY3MgPSBjaGlsZExpbmVTdHlsZS5mb250TWV0cmljcygpOwotICAgICAgICAgICAgbmV3TG9n
aWNhbFRvcCArPSBjdXJyLT5iYXNlbGluZVBvc2l0aW9uKGJhc2VsaW5lVHlwZSkgLSBmb250TWV0
cmljcy5hc2NlbnQoYmFzZWxpbmVUeXBlKTsKLSAgICAgICAgICAgIGlmIChjdXJyLT5pc0lubGlu
ZUZsb3dCb3goKSkgewotICAgICAgICAgICAgICAgIFJlbmRlckJveE1vZGVsT2JqZWN0JiBib3hP
YmplY3QgPSBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oY3Vyci0+cmVuZGVyZXIoKSk7
CisgICAgICAgICAgICBuZXdMb2dpY2FsVG9wICs9IGNoaWxkLT5iYXNlbGluZVBvc2l0aW9uKGJh
c2VsaW5lVHlwZSkgLSBmb250TWV0cmljcy5hc2NlbnQoYmFzZWxpbmVUeXBlKTsKKyAgICAgICAg
ICAgIGlmIChpczxJbmxpbmVGbG93Qm94PigqY2hpbGQpKSB7CisgICAgICAgICAgICAgICAgUmVu
ZGVyQm94TW9kZWxPYmplY3QmIGJveE9iamVjdCA9IGRvd25jYXN0PElubGluZUZsb3dCb3g+KCpj
aGlsZCkucmVuZGVyZXIoKTsKICAgICAgICAgICAgICAgICBuZXdMb2dpY2FsVG9wIC09IGNoaWxk
TGluZVN0eWxlLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkKICAgICAgICAgICAgICAgICAgICAg
PyBib3hPYmplY3QuYm9yZGVyVG9wKCkgKyBib3hPYmplY3QucGFkZGluZ1RvcCgpCiAgICAgICAg
ICAgICAgICAgICAgIDogYm94T2JqZWN0LmJvcmRlclJpZ2h0KCkgKyBib3hPYmplY3QucGFkZGlu
Z1JpZ2h0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBuZXdMb2dpY2FsVG9wSW5jbHVk
aW5nTWFyZ2lucyA9IG5ld0xvZ2ljYWxUb3A7Ci0gICAgICAgIH0gZWxzZSBpZiAoIWN1cnItPnJl
bmRlcmVyKCkuaXNCUigpKSB7Ci0gICAgICAgICAgICBjb25zdCBSZW5kZXJCb3gmIGJveCA9IHRv
UmVuZGVyQm94KGN1cnItPnJlbmRlcmVyKCkpOworICAgICAgICB9IGVsc2UgaWYgKCFjaGlsZC0+
cmVuZGVyZXIoKS5pc0JSKCkpIHsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIGJveCA9IGRvd25j
YXN0PFJlbmRlckJveD4oY2hpbGQtPnJlbmRlcmVyKCkpOwogICAgICAgICAgICAgbmV3TG9naWNh
bFRvcEluY2x1ZGluZ01hcmdpbnMgPSBuZXdMb2dpY2FsVG9wOwotICAgICAgICAgICAgTGF5b3V0
VW5pdCBvdmVyU2lkZU1hcmdpbiA9IGN1cnItPmlzSG9yaXpvbnRhbCgpID8gYm94Lm1hcmdpblRv
cCgpIDogYm94Lm1hcmdpblJpZ2h0KCk7Ci0gICAgICAgICAgICBMYXlvdXRVbml0IHVuZGVyU2lk
ZU1hcmdpbiA9IGN1cnItPmlzSG9yaXpvbnRhbCgpID8gYm94Lm1hcmdpbkJvdHRvbSgpIDogYm94
Lm1hcmdpbkxlZnQoKTsKKyAgICAgICAgICAgIExheW91dFVuaXQgb3ZlclNpZGVNYXJnaW4gPSBj
aGlsZC0+aXNIb3Jpem9udGFsKCkgPyBib3gubWFyZ2luVG9wKCkgOiBib3gubWFyZ2luUmlnaHQo
KTsKKyAgICAgICAgICAgIExheW91dFVuaXQgdW5kZXJTaWRlTWFyZ2luID0gY2hpbGQtPmlzSG9y
aXpvbnRhbCgpID8gYm94Lm1hcmdpbkJvdHRvbSgpIDogYm94Lm1hcmdpbkxlZnQoKTsKICAgICAg
ICAgICAgIG5ld0xvZ2ljYWxUb3AgKz0gb3ZlclNpZGVNYXJnaW47CiAgICAgICAgICAgICBib3hI
ZWlnaHRJbmNsdWRpbmdNYXJnaW5zICs9IG92ZXJTaWRlTWFyZ2luICsgdW5kZXJTaWRlTWFyZ2lu
OwogICAgICAgICB9CiAKLSAgICAgICAgY3Vyci0+c2V0TG9naWNhbFRvcChuZXdMb2dpY2FsVG9w
KTsKKyAgICAgICAgY2hpbGQtPnNldExvZ2ljYWxUb3AobmV3TG9naWNhbFRvcCk7CiAKICAgICAg
ICAgaWYgKGNoaWxkQWZmZWN0c1RvcEJvdHRvbVBvcykgewotICAgICAgICAgICAgaWYgKGN1cnIt
PnJlbmRlcmVyKCkuaXNSdWJ5UnVuKCkpIHsKKyAgICAgICAgICAgIGlmIChpczxSZW5kZXJSdWJ5
UnVuPihjaGlsZC0+cmVuZGVyZXIoKSkpIHsKICAgICAgICAgICAgICAgICAvLyBUcmVhdCB0aGUg
bGVhZGluZyBvbiB0aGUgZmlyc3QgYW5kIGxhc3QgbGluZXMgb2YgcnVieSBydW5zIGFzIG5vdCBi
ZWluZyBwYXJ0IG9mIHRoZSBvdmVyYWxsIGxpbmVUb3AvbGluZUJvdHRvbS4KICAgICAgICAgICAg
ICAgICAvLyBSZWFsbHkgdGhpcyBpcyBhIHdvcmthcm91bmQgaGFjayBmb3IgdGhlIGZhY3QgdGhh
dCBydWJ5IHNob3VsZCBoYXZlIGJlZW4gZG9uZSBhcyBsaW5lIGxheW91dCBhbmQgbm90IGRvbmUg
dXNpbmcKICAgICAgICAgICAgICAgICAvLyBpbmxpbmUtYmxvY2suCi0gICAgICAgICAgICAgICAg
aWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkgPT0gKGN1
cnItPnJlbmRlcmVyKCkuc3R5bGUoKS5ydWJ5UG9zaXRpb24oKSA9PSBSdWJ5UG9zaXRpb25BZnRl
cikpCisgICAgICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkuc3R5bGUoKS5pc0ZsaXBwZWRMaW5l
c1dyaXRpbmdNb2RlKCkgPT0gKGNoaWxkLT5yZW5kZXJlcigpLnN0eWxlKCkucnVieVBvc2l0aW9u
KCkgPT0gUnVieVBvc2l0aW9uQWZ0ZXIpKQogICAgICAgICAgICAgICAgICAgICBoYXNBbm5vdGF0
aW9uc0JlZm9yZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgICBoYXNBbm5vdGF0aW9uc0FmdGVyID0gdHJ1ZTsKIAotICAgICAgICAgICAgICAgIFJlbmRl
clJ1YnlSdW4mIHJ1YnlSdW4gPSB0b1JlbmRlclJ1YnlSdW4oY3Vyci0+cmVuZGVyZXIoKSk7Cisg
ICAgICAgICAgICAgICAgYXV0byYgcnVieVJ1biA9IGRvd25jYXN0PFJlbmRlclJ1YnlSdW4+KGNo
aWxkLT5yZW5kZXJlcigpKTsKICAgICAgICAgICAgICAgICBpZiAoUmVuZGVyUnVieUJhc2UqIHJ1
YnlCYXNlID0gcnVieVJ1bi5ydWJ5QmFzZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIExheW91
dFVuaXQgYm90dG9tUnVieUJhc2VMZWFkaW5nID0gKGN1cnItPmxvZ2ljYWxIZWlnaHQoKSAtIHJ1
YnlCYXNlLT5sb2dpY2FsQm90dG9tKCkpICsgcnVieUJhc2UtPmxvZ2ljYWxIZWlnaHQoKSAtIChy
dWJ5QmFzZS0+bGFzdFJvb3RCb3goKSA/IHJ1YnlCYXNlLT5sYXN0Um9vdEJveCgpLT5saW5lQm90
dG9tKCkgOiBMYXlvdXRVbml0KCkpOworICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGJv
dHRvbVJ1YnlCYXNlTGVhZGluZyA9IChjaGlsZC0+bG9naWNhbEhlaWdodCgpIC0gcnVieUJhc2Ut
PmxvZ2ljYWxCb3R0b20oKSkgKyBydWJ5QmFzZS0+bG9naWNhbEhlaWdodCgpIC0gKHJ1YnlCYXNl
LT5sYXN0Um9vdEJveCgpID8gcnVieUJhc2UtPmxhc3RSb290Qm94KCktPmxpbmVCb3R0b20oKSA6
IExheW91dFVuaXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgdG9wUnVieUJh
c2VMZWFkaW5nID0gcnVieUJhc2UtPmxvZ2ljYWxUb3AoKSArIChydWJ5QmFzZS0+Zmlyc3RSb290
Qm94KCkgPyBydWJ5QmFzZS0+Zmlyc3RSb290Qm94KCktPmxpbmVUb3AoKSA6IExheW91dFVuaXQo
KSk7CiAgICAgICAgICAgICAgICAgICAgIG5ld0xvZ2ljYWxUb3AgKz0gIXJlbmRlcmVyKCkuc3R5
bGUoKS5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkgPyB0b3BSdWJ5QmFzZUxlYWRpbmcgOiBi
b3R0b21SdWJ5QmFzZUxlYWRpbmc7CiAgICAgICAgICAgICAgICAgICAgIGJveEhlaWdodCAtPSAo
dG9wUnVieUJhc2VMZWFkaW5nICsgYm90dG9tUnVieUJhc2VMZWFkaW5nKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY3Vyci0+aXNJbmxpbmVUZXh0
Qm94KCkpIHsKKyAgICAgICAgICAgIGlmIChpczxJbmxpbmVUZXh0Qm94PigqY2hpbGQpKSB7CiAg
ICAgICAgICAgICAgICAgYm9vbCBlbXBoYXNpc01hcmtJc092ZXI7Ci0gICAgICAgICAgICAgICAg
aWYgKHRvSW5saW5lVGV4dEJveChjdXJyKS0+ZW1waGFzaXNNYXJrRXhpc3RzQW5kSXNBYm92ZShj
aGlsZExpbmVTdHlsZSwgZW1waGFzaXNNYXJrSXNPdmVyKSkgeworICAgICAgICAgICAgICAgIGlm
IChkb3duY2FzdDxJbmxpbmVUZXh0Qm94PigqY2hpbGQpLmVtcGhhc2lzTWFya0V4aXN0c0FuZElz
QWJvdmUoY2hpbGRMaW5lU3R5bGUsIGVtcGhhc2lzTWFya0lzT3ZlcikpIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGVtcGhhc2lzTWFya0lzT3ZlciAhPSBjaGlsZExpbmVTdHlsZS5pc0ZsaXBw
ZWRMaW5lc1dyaXRpbmdNb2RlKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBoYXNBbm5vdGF0
aW9uc0JlZm9yZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UKQEAgLTc0MCwxNyAr
NzM4LDE3IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0luQmxvY2tEaXJlY3Rpb24o
TGF5b3V0VW5pdCB0b3AsIExheW91dFVuaXQgbWF4SGVpCiAKIHZvaWQgSW5saW5lRmxvd0JveDo6
Y29tcHV0ZU1heExvZ2ljYWxUb3AoZmxvYXQmIG1heExvZ2ljYWxUb3ApIGNvbnN0CiB7Ci0gICAg
Zm9yIChJbmxpbmVCb3gqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5u
ZXh0T25MaW5lKCkpIHsKLSAgICAgICAgaWYgKGN1cnItPnJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkpCisgICAgZm9yIChJbmxpbmVCb3gqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dE9uTGluZSgpKSB7CisgICAgICAgIGlmIChjaGlsZC0+
cmVuZGVyZXIoKS5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OyAvLyBQb3NpdGlvbmVkIHBsYWNlaG9sZGVycyBkb24ndCBhZmZlY3QgY2FsY3VsYXRpb25zLgog
CiAgICAgICAgIGlmIChkZXNjZW5kYW50c0hhdmVTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lKCkp
CiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBtYXhMb2dpY2FsVG9wID0gc3RkOjpt
YXg8ZmxvYXQ+KG1heExvZ2ljYWxUb3AsIGN1cnItPnkoKSk7CisgICAgICAgIG1heExvZ2ljYWxU
b3AgPSBzdGQ6Om1heDxmbG9hdD4obWF4TG9naWNhbFRvcCwgY2hpbGQtPnkoKSk7CiAgICAgICAg
IGZsb2F0IGxvY2FsTWF4TG9naWNhbFRvcCA9IDA7Ci0gICAgICAgIGlmIChjdXJyLT5pc0lubGlu
ZUZsb3dCb3goKSkKLSAgICAgICAgICAgIHRvSW5saW5lRmxvd0JveChjdXJyKS0+Y29tcHV0ZU1h
eExvZ2ljYWxUb3AobG9jYWxNYXhMb2dpY2FsVG9wKTsKKyAgICAgICAgaWYgKGlzPElubGluZUZs
b3dCb3g+KCpjaGlsZCkpCisgICAgICAgICAgICBkb3duY2FzdDxJbmxpbmVGbG93Qm94PigqY2hp
bGQpLmNvbXB1dGVNYXhMb2dpY2FsVG9wKGxvY2FsTWF4TG9naWNhbFRvcCk7CiAgICAgICAgIG1h
eExvZ2ljYWxUb3AgPSBzdGQ6Om1heDxmbG9hdD4obWF4TG9naWNhbFRvcCwgbG9jYWxNYXhMb2dp
Y2FsVG9wKTsKICAgICB9CiB9CkBAIC03NjAsMTQgKzc1OCwxNCBAQCB2b2lkIElubGluZUZsb3dC
b3g6OmZsaXBMaW5lc0luQmxvY2tEaXJlY3Rpb24oTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRV
bml0IGxpbgogICAgIC8vIEZsaXAgdGhlIGJveCBvbiB0aGUgbGluZSBzdWNoIHRoYXQgdGhlIHRv
cCBpcyBub3cgcmVsYXRpdmUgdG8gdGhlIGxpbmVCb3R0b20gaW5zdGVhZCBvZiB0aGUgbGluZVRv
cC4KICAgICBzZXRMb2dpY2FsVG9wKGxpbmVCb3R0b20gLSAobG9naWNhbFRvcCgpIC0gbGluZVRv
cCkgLSBsb2dpY2FsSGVpZ2h0KCkpOwogICAgIAotICAgIGZvciAoSW5saW5lQm94KiBjdXJyID0g
Zmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dE9uTGluZSgpKSB7Ci0gICAgICAg
IGlmIChjdXJyLT5yZW5kZXJlcigpLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQorICAgIGZvciAo
SW5saW5lQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHRPbkxpbmUoKSkgeworICAgICAgICBpZiAoY2hpbGQtPnJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsgLy8gUG9zaXRpb25lZCBwbGFjZWhv
bGRlcnMgYXJlbid0IGFmZmVjdGVkIGhlcmUuCiAgICAgICAgIAotICAgICAgICBpZiAoY3Vyci0+
aXNJbmxpbmVGbG93Qm94KCkpCi0gICAgICAgICAgICB0b0lubGluZUZsb3dCb3goY3VyciktPmZs
aXBMaW5lc0luQmxvY2tEaXJlY3Rpb24obGluZVRvcCwgbGluZUJvdHRvbSk7CisgICAgICAgIGlm
IChpczxJbmxpbmVGbG93Qm94PigqY2hpbGQpKQorICAgICAgICAgICAgZG93bmNhc3Q8SW5saW5l
Rmxvd0JveD4oKmNoaWxkKS5mbGlwTGluZXNJbkJsb2NrRGlyZWN0aW9uKGxpbmVUb3AsIGxpbmVC
b3R0b20pOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjdXJyLT5zZXRMb2dpY2FsVG9wKGxp
bmVCb3R0b20gLSAoY3Vyci0+bG9naWNhbFRvcCgpIC0gbGluZVRvcCkgLSBjdXJyLT5sb2dpY2Fs
SGVpZ2h0KCkpOworICAgICAgICAgICAgY2hpbGQtPnNldExvZ2ljYWxUb3AobGluZUJvdHRvbSAt
IChjaGlsZC0+bG9naWNhbFRvcCgpIC0gbGluZVRvcCkgLSBjaGlsZC0+bG9naWNhbEhlaWdodCgp
KTsKICAgICB9CiB9CiAKQEAgLTkzOCwyNyArOTM2LDI3IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6
Y29tcHV0ZU92ZXJmbG93KExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9t
LCBHCiAgICAgYWRkQm94U2hhZG93VmlzdWFsT3ZlcmZsb3cobG9naWNhbFZpc3VhbE92ZXJmbG93
KTsKICAgICBhZGRCb3JkZXJPdXRzZXRWaXN1YWxPdmVyZmxvdyhsb2dpY2FsVmlzdWFsT3ZlcmZs
b3cpOwogCi0gICAgZm9yIChJbmxpbmVCb3gqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1
cnIgPSBjdXJyLT5uZXh0T25MaW5lKCkpIHsKLSAgICAgICAgaWYgKGN1cnItPnJlbmRlcmVyKCku
aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCisgICAgZm9yIChJbmxpbmVCb3gqIGNoaWxkID0gZmly
c3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dE9uTGluZSgpKSB7CisgICAgICAg
IGlmIChjaGlsZC0+cmVuZGVyZXIoKS5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOyAvLyBQb3NpdGlvbmVkIHBsYWNlaG9sZGVycyBkb24ndCBhZmZlY3QgY2Fs
Y3VsYXRpb25zLgogCi0gICAgICAgIGlmIChjdXJyLT5yZW5kZXJlcigpLmlzTGluZUJyZWFrKCkp
CisgICAgICAgIGlmIChpczxSZW5kZXJMaW5lQnJlYWs+KGNoaWxkLT5yZW5kZXJlcigpKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoY3Vyci0+cmVuZGVyZXIoKS5pc1RleHQo
KSkgewotICAgICAgICAgICAgSW5saW5lVGV4dEJveCogdGV4dCA9IHRvSW5saW5lVGV4dEJveChj
dXJyKTsKLSAgICAgICAgICAgIExheW91dFJlY3QgdGV4dEJveE92ZXJmbG93KGVuY2xvc2luZ0xh
eW91dFJlY3QodGV4dC0+bG9naWNhbEZyYW1lUmVjdCgpKSk7Ci0gICAgICAgICAgICBhZGRUZXh0
Qm94VmlzdWFsT3ZlcmZsb3coKnRleHQsIHRleHRCb3hEYXRhTWFwLCB0ZXh0Qm94T3ZlcmZsb3cp
OworICAgICAgICBpZiAoaXM8UmVuZGVyVGV4dD4oY2hpbGQtPnJlbmRlcmVyKCkpKSB7CisgICAg
ICAgICAgICBhdXRvJiB0ZXh0Qm94ID0gZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oKmNoaWxkKTsK
KyAgICAgICAgICAgIExheW91dFJlY3QgdGV4dEJveE92ZXJmbG93KGVuY2xvc2luZ0xheW91dFJl
Y3QodGV4dEJveC5sb2dpY2FsRnJhbWVSZWN0KCkpKTsKKyAgICAgICAgICAgIGFkZFRleHRCb3hW
aXN1YWxPdmVyZmxvdyh0ZXh0Qm94LCB0ZXh0Qm94RGF0YU1hcCwgdGV4dEJveE92ZXJmbG93KTsK
ICAgICAgICAgICAgIGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy51bml0ZSh0ZXh0Qm94T3ZlcmZsb3cp
OwotICAgICAgICB9IGVsc2UgaWYgKGN1cnItPnJlbmRlcmVyKCkuaXNSZW5kZXJJbmxpbmUoKSkg
ewotICAgICAgICAgICAgSW5saW5lRmxvd0JveCogZmxvdyA9IHRvSW5saW5lRmxvd0JveChjdXJy
KTsKLSAgICAgICAgICAgIGZsb3ctPmNvbXB1dGVPdmVyZmxvdyhsaW5lVG9wLCBsaW5lQm90dG9t
LCB0ZXh0Qm94RGF0YU1hcCk7Ci0gICAgICAgICAgICBpZiAoIWZsb3ctPnJlbmRlcmVyKCkuaGFz
U2VsZlBhaW50aW5nTGF5ZXIoKSkKLSAgICAgICAgICAgICAgICBsb2dpY2FsVmlzdWFsT3ZlcmZs
b3cudW5pdGUoZmxvdy0+bG9naWNhbFZpc3VhbE92ZXJmbG93UmVjdChsaW5lVG9wLCBsaW5lQm90
dG9tKSk7Ci0gICAgICAgICAgICBMYXlvdXRSZWN0IGNoaWxkTGF5b3V0T3ZlcmZsb3cgPSBmbG93
LT5sb2dpY2FsTGF5b3V0T3ZlcmZsb3dSZWN0KGxpbmVUb3AsIGxpbmVCb3R0b20pOwotICAgICAg
ICAgICAgY2hpbGRMYXlvdXRPdmVyZmxvdy5tb3ZlKGZsb3ctPnJlbmRlcmVyKCkucmVsYXRpdmVQ
b3NpdGlvbkxvZ2ljYWxPZmZzZXQoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoaXM8UmVuZGVySW5s
aW5lPihjaGlsZC0+cmVuZGVyZXIoKSkpIHsKKyAgICAgICAgICAgIGF1dG8mIGZsb3cgPSBkb3du
Y2FzdDxJbmxpbmVGbG93Qm94PigqY2hpbGQpOworICAgICAgICAgICAgZmxvdy5jb21wdXRlT3Zl
cmZsb3cobGluZVRvcCwgbGluZUJvdHRvbSwgdGV4dEJveERhdGFNYXApOworICAgICAgICAgICAg
aWYgKCFmbG93LnJlbmRlcmVyKCkuaGFzU2VsZlBhaW50aW5nTGF5ZXIoKSkKKyAgICAgICAgICAg
ICAgICBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cudW5pdGUoZmxvdy5sb2dpY2FsVmlzdWFsT3ZlcmZs
b3dSZWN0KGxpbmVUb3AsIGxpbmVCb3R0b20pKTsKKyAgICAgICAgICAgIExheW91dFJlY3QgY2hp
bGRMYXlvdXRPdmVyZmxvdyA9IGZsb3cubG9naWNhbExheW91dE92ZXJmbG93UmVjdChsaW5lVG9w
LCBsaW5lQm90dG9tKTsKKyAgICAgICAgICAgIGNoaWxkTGF5b3V0T3ZlcmZsb3cubW92ZShmbG93
LnJlbmRlcmVyKCkucmVsYXRpdmVQb3NpdGlvbkxvZ2ljYWxPZmZzZXQoKSk7CiAgICAgICAgICAg
ICBsb2dpY2FsTGF5b3V0T3ZlcmZsb3cudW5pdGUoY2hpbGRMYXlvdXRPdmVyZmxvdyk7CiAgICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgYWRkUmVwbGFjZWRDaGlsZE92ZXJmbG93KGN1cnIsIGxv
Z2ljYWxMYXlvdXRPdmVyZmxvdywgbG9naWNhbFZpc3VhbE92ZXJmbG93KTsKKyAgICAgICAgICAg
IGFkZFJlcGxhY2VkQ2hpbGRPdmVyZmxvdyhjaGlsZCwgbG9naWNhbExheW91dE92ZXJmbG93LCBs
b2dpY2FsVmlzdWFsT3ZlcmZsb3cpOwogICAgIH0KICAgICAKICAgICBzZXRPdmVyZmxvd0Zyb21M
b2dpY2FsUmVjdHMobG9naWNhbExheW91dE92ZXJmbG93LCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cs
IGxpbmVUb3AsIGxpbmVCb3R0b20pOwpAQCAtMTQyNCwxNyArMTQyMiwxNyBAQCB2b2lkIElubGlu
ZUZsb3dCb3g6OnBhaW50TWFzayhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9p
bnQmIHBhaW50T2ZmcwogCiBJbmxpbmVCb3gqIElubGluZUZsb3dCb3g6OmZpcnN0TGVhZkNoaWxk
KCkgY29uc3QKIHsKLSAgICBJbmxpbmVCb3gqIGxlYWYgPSAwOworICAgIElubGluZUJveCogbGVh
ZiA9IG51bGxwdHI7CiAgICAgZm9yIChJbmxpbmVCb3gqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBj
aGlsZCAmJiAhbGVhZjsgY2hpbGQgPSBjaGlsZC0+bmV4dE9uTGluZSgpKQotICAgICAgICBsZWFm
ID0gY2hpbGQtPmlzTGVhZigpID8gY2hpbGQgOiB0b0lubGluZUZsb3dCb3goY2hpbGQpLT5maXJz
dExlYWZDaGlsZCgpOworICAgICAgICBsZWFmID0gY2hpbGQtPmlzTGVhZigpID8gY2hpbGQgOiBk
b3duY2FzdDxJbmxpbmVGbG93Qm94PigqY2hpbGQpLmZpcnN0TGVhZkNoaWxkKCk7CiAgICAgcmV0
dXJuIGxlYWY7CiB9CiAKIElubGluZUJveCogSW5saW5lRmxvd0JveDo6bGFzdExlYWZDaGlsZCgp
IGNvbnN0CiB7Ci0gICAgSW5saW5lQm94KiBsZWFmID0gMDsKKyAgICBJbmxpbmVCb3gqIGxlYWYg
PSBudWxscHRyOwogICAgIGZvciAoSW5saW5lQm94KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGls
ZCAmJiAhbGVhZjsgY2hpbGQgPSBjaGlsZC0+cHJldk9uTGluZSgpKQotICAgICAgICBsZWFmID0g
Y2hpbGQtPmlzTGVhZigpID8gY2hpbGQgOiB0b0lubGluZUZsb3dCb3goY2hpbGQpLT5sYXN0TGVh
ZkNoaWxkKCk7CisgICAgICAgIGxlYWYgPSBjaGlsZC0+aXNMZWFmKCkgPyBjaGlsZCA6IGRvd25j
YXN0PElubGluZUZsb3dCb3g+KCpjaGlsZCkubGFzdExlYWZDaGlsZCgpOwogICAgIHJldHVybiBs
ZWFmOwogfQogCkBAIC0xNDkxLDE1ICsxNDg5LDE1IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6Y2xl
YXJUcnVuY2F0aW9uKCkKIExheW91dFVuaXQgSW5saW5lRmxvd0JveDo6Y29tcHV0ZU92ZXJBbm5v
dGF0aW9uQWRqdXN0bWVudChMYXlvdXRVbml0IGFsbG93ZWRQb3NpdGlvbikgY29uc3QKIHsKICAg
ICBMYXlvdXRVbml0IHJlc3VsdCA9IDA7Ci0gICAgZm9yIChJbmxpbmVCb3gqIGN1cnIgPSBmaXJz
dENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0T25MaW5lKCkpIHsKLSAgICAgICAgaWYg
KGN1cnItPnJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCisgICAgZm9yIChJbmxp
bmVCb3gqIGNoaWxkID0gZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dE9u
TGluZSgpKSB7CisgICAgICAgIGlmIChjaGlsZC0+cmVuZGVyZXIoKS5pc091dE9mRmxvd1Bvc2l0
aW9uZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBQb3NpdGlvbmVkIHBsYWNlaG9sZGVy
cyBkb24ndCBhZmZlY3QgY2FsY3VsYXRpb25zLgogICAgICAgICAKLSAgICAgICAgaWYgKGN1cnIt
PmlzSW5saW5lRmxvd0JveCgpKQotICAgICAgICAgICAgcmVzdWx0ID0gc3RkOjptYXgocmVzdWx0
LCB0b0lubGluZUZsb3dCb3goY3VyciktPmNvbXB1dGVPdmVyQW5ub3RhdGlvbkFkanVzdG1lbnQo
YWxsb3dlZFBvc2l0aW9uKSk7CisgICAgICAgIGlmIChpczxJbmxpbmVGbG93Qm94PigqY2hpbGQp
KQorICAgICAgICAgICAgcmVzdWx0ID0gc3RkOjptYXgocmVzdWx0LCBkb3duY2FzdDxJbmxpbmVG
bG93Qm94PigqY2hpbGQpLmNvbXB1dGVPdmVyQW5ub3RhdGlvbkFkanVzdG1lbnQoYWxsb3dlZFBv
c2l0aW9uKSk7CiAgICAgICAgIAotICAgICAgICBpZiAoY3Vyci0+cmVuZGVyZXIoKS5pc1JlcGxh
Y2VkKCkgJiYgY3Vyci0+cmVuZGVyZXIoKS5pc1J1YnlSdW4oKSAmJiBjdXJyLT5yZW5kZXJlcigp
LnN0eWxlKCkucnVieVBvc2l0aW9uKCkgPT0gUnVieVBvc2l0aW9uQmVmb3JlKSB7Ci0gICAgICAg
ICAgICBSZW5kZXJSdWJ5UnVuJiBydWJ5UnVuID0gdG9SZW5kZXJSdWJ5UnVuKGN1cnItPnJlbmRl
cmVyKCkpOworICAgICAgICBpZiAoY2hpbGQtPnJlbmRlcmVyKCkuaXNSZXBsYWNlZCgpICYmIGlz
PFJlbmRlclJ1YnlSdW4+KGNoaWxkLT5yZW5kZXJlcigpKSAmJiBjaGlsZC0+cmVuZGVyZXIoKS5z
dHlsZSgpLnJ1YnlQb3NpdGlvbigpID09IFJ1YnlQb3NpdGlvbkJlZm9yZSkgeworICAgICAgICAg
ICAgYXV0byYgcnVieVJ1biA9IGRvd25jYXN0PFJlbmRlclJ1YnlSdW4+KGNoaWxkLT5yZW5kZXJl
cigpKTsKICAgICAgICAgICAgIFJlbmRlclJ1YnlUZXh0KiBydWJ5VGV4dCA9IHJ1YnlSdW4ucnVi
eVRleHQoKTsKICAgICAgICAgICAgIGlmICghcnVieVRleHQpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CkBAIC0xNTA4LDI2ICsxNTA2LDI2IEBAIExheW91dFVuaXQgSW5saW5lRmxvd0JveDo6
Y29tcHV0ZU92ZXJBbm5vdGF0aW9uQWRqdXN0bWVudChMYXlvdXRVbml0IGFsbG93ZWRQb3NpCiAg
ICAgICAgICAgICAgICAgTGF5b3V0VW5pdCB0b3BPZkZpcnN0UnVieVRleHRMaW5lID0gcnVieVRl
eHQtPmxvZ2ljYWxUb3AoKSArIChydWJ5VGV4dC0+Zmlyc3RSb290Qm94KCkgPyBydWJ5VGV4dC0+
Zmlyc3RSb290Qm94KCktPmxpbmVUb3AoKSA6IExheW91dFVuaXQoKSk7CiAgICAgICAgICAgICAg
ICAgaWYgKHRvcE9mRmlyc3RSdWJ5VGV4dExpbmUgPj0gMCkKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgdG9wT2ZGaXJzdFJ1YnlUZXh0TGluZSArPSBjdXJy
LT5sb2dpY2FsVG9wKCk7CisgICAgICAgICAgICAgICAgdG9wT2ZGaXJzdFJ1YnlUZXh0TGluZSAr
PSBjaGlsZC0+bG9naWNhbFRvcCgpOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN0ZDo6bWF4
KHJlc3VsdCwgYWxsb3dlZFBvc2l0aW9uIC0gdG9wT2ZGaXJzdFJ1YnlUZXh0TGluZSk7CiAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIExheW91dFVuaXQgYm90dG9tT2ZMYXN0
UnVieVRleHRMaW5lID0gcnVieVRleHQtPmxvZ2ljYWxUb3AoKSArIChydWJ5VGV4dC0+bGFzdFJv
b3RCb3goKSA/IHJ1YnlUZXh0LT5sYXN0Um9vdEJveCgpLT5saW5lQm90dG9tKCkgOiBydWJ5VGV4
dC0+bG9naWNhbEhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoYm90dG9tT2ZMYXN0UnVi
eVRleHRMaW5lIDw9IGN1cnItPmxvZ2ljYWxIZWlnaHQoKSkKKyAgICAgICAgICAgICAgICBpZiAo
Ym90dG9tT2ZMYXN0UnVieVRleHRMaW5lIDw9IGNoaWxkLT5sb2dpY2FsSGVpZ2h0KCkpCiAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGJvdHRvbU9mTGFzdFJ1
YnlUZXh0TGluZSArPSBjdXJyLT5sb2dpY2FsVG9wKCk7CisgICAgICAgICAgICAgICAgYm90dG9t
T2ZMYXN0UnVieVRleHRMaW5lICs9IGNoaWxkLT5sb2dpY2FsVG9wKCk7CiAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gc3RkOjptYXgocmVzdWx0LCBib3R0b21PZkxhc3RSdWJ5VGV4dExpbmUgLSBh
bGxvd2VkUG9zaXRpb24pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYg
KGN1cnItPmlzSW5saW5lVGV4dEJveCgpKSB7Ci0gICAgICAgICAgICBjb25zdCBSZW5kZXJTdHls
ZSYgY2hpbGRMaW5lU3R5bGUgPSBjdXJyLT5saW5lU3R5bGUoKTsKKyAgICAgICAgaWYgKGlzPElu
bGluZVRleHRCb3g+KCpjaGlsZCkpIHsKKyAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBj
aGlsZExpbmVTdHlsZSA9IGNoaWxkLT5saW5lU3R5bGUoKTsKICAgICAgICAgICAgIGJvb2wgZW1w
aGFzaXNNYXJrSXNBYm92ZTsKLSAgICAgICAgICAgIGlmIChjaGlsZExpbmVTdHlsZS50ZXh0RW1w
aGFzaXNNYXJrKCkgIT0gVGV4dEVtcGhhc2lzTWFya05vbmUgJiYgdG9JbmxpbmVUZXh0Qm94KGN1
cnIpLT5lbXBoYXNpc01hcmtFeGlzdHNBbmRJc0Fib3ZlKGNoaWxkTGluZVN0eWxlLCBlbXBoYXNp
c01hcmtJc0Fib3ZlKSAmJiBlbXBoYXNpc01hcmtJc0Fib3ZlKSB7CisgICAgICAgICAgICBpZiAo
Y2hpbGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFyaygpICE9IFRleHRFbXBoYXNpc01hcmtOb25l
ICYmIGRvd25jYXN0PElubGluZVRleHRCb3g+KCpjaGlsZCkuZW1waGFzaXNNYXJrRXhpc3RzQW5k
SXNBYm92ZShjaGlsZExpbmVTdHlsZSwgZW1waGFzaXNNYXJrSXNBYm92ZSkgJiYgZW1waGFzaXNN
YXJrSXNBYm92ZSkgewogICAgICAgICAgICAgICAgIGlmICghY2hpbGRMaW5lU3R5bGUuaXNGbGlw
cGVkTGluZXNXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCB0b3BPZkVt
cGhhc2lzTWFyayA9IGN1cnItPmxvZ2ljYWxUb3AoKSAtIGNoaWxkTGluZVN0eWxlLmZvbnQoKS5l
bXBoYXNpc01hcmtIZWlnaHQoY2hpbGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFya1N0cmluZygp
KTsKKyAgICAgICAgICAgICAgICAgICAgaW50IHRvcE9mRW1waGFzaXNNYXJrID0gY2hpbGQtPmxv
Z2ljYWxUb3AoKSAtIGNoaWxkTGluZVN0eWxlLmZvbnQoKS5lbXBoYXNpc01hcmtIZWlnaHQoY2hp
bGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFya1N0cmluZygpKTsKICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gc3RkOjptYXgocmVzdWx0LCBhbGxvd2VkUG9zaXRpb24gLSB0b3BPZkVtcGhh
c2lzTWFyayk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
aW50IGJvdHRvbU9mRW1waGFzaXNNYXJrID0gY3Vyci0+bG9naWNhbEJvdHRvbSgpICsgY2hpbGRM
aW5lU3R5bGUuZm9udCgpLmVtcGhhc2lzTWFya0hlaWdodChjaGlsZExpbmVTdHlsZS50ZXh0RW1w
aGFzaXNNYXJrU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICBpbnQgYm90dG9tT2ZFbXBo
YXNpc01hcmsgPSBjaGlsZC0+bG9naWNhbEJvdHRvbSgpICsgY2hpbGRMaW5lU3R5bGUuZm9udCgp
LmVtcGhhc2lzTWFya0hlaWdodChjaGlsZExpbmVTdHlsZS50ZXh0RW1waGFzaXNNYXJrU3RyaW5n
KCkpOwogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzdGQ6Om1heChyZXN1bHQsIGJvdHRv
bU9mRW1waGFzaXNNYXJrIC0gYWxsb3dlZFBvc2l0aW9uKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CkBAIC0xNTM5LDE1ICsxNTM3LDE1IEBAIExheW91dFVuaXQgSW5saW5lRmxv
d0JveDo6Y29tcHV0ZU92ZXJBbm5vdGF0aW9uQWRqdXN0bWVudChMYXlvdXRVbml0IGFsbG93ZWRQ
b3NpCiBMYXlvdXRVbml0IElubGluZUZsb3dCb3g6OmNvbXB1dGVVbmRlckFubm90YXRpb25BZGp1
c3RtZW50KExheW91dFVuaXQgYWxsb3dlZFBvc2l0aW9uKSBjb25zdAogewogICAgIExheW91dFVu
aXQgcmVzdWx0ID0gMDsKLSAgICBmb3IgKElubGluZUJveCogY3VyciA9IGZpcnN0Q2hpbGQoKTsg
Y3VycjsgY3VyciA9IGN1cnItPm5leHRPbkxpbmUoKSkgewotICAgICAgICBpZiAoY3Vyci0+cmVu
ZGVyZXIoKS5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkKKyAgICBmb3IgKElubGluZUJveCogY2hp
bGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0T25MaW5lKCkpIHsK
KyAgICAgICAgaWYgKGNoaWxkLT5yZW5kZXJlcigpLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQog
ICAgICAgICAgICAgY29udGludWU7IC8vIFBvc2l0aW9uZWQgcGxhY2Vob2xkZXJzIGRvbid0IGFm
ZmVjdCBjYWxjdWxhdGlvbnMuCiAKLSAgICAgICAgaWYgKGN1cnItPmlzSW5saW5lRmxvd0JveCgp
KQotICAgICAgICAgICAgcmVzdWx0ID0gc3RkOjptYXgocmVzdWx0LCB0b0lubGluZUZsb3dCb3go
Y3VyciktPmNvbXB1dGVVbmRlckFubm90YXRpb25BZGp1c3RtZW50KGFsbG93ZWRQb3NpdGlvbikp
OworICAgICAgICBpZiAoaXM8SW5saW5lRmxvd0JveD4oKmNoaWxkKSkKKyAgICAgICAgICAgIHJl
c3VsdCA9IHN0ZDo6bWF4KHJlc3VsdCwgZG93bmNhc3Q8SW5saW5lRmxvd0JveD4oKmNoaWxkKS5j
b21wdXRlVW5kZXJBbm5vdGF0aW9uQWRqdXN0bWVudChhbGxvd2VkUG9zaXRpb24pKTsKIAotICAg
ICAgICBpZiAoY3Vyci0+cmVuZGVyZXIoKS5pc1JlcGxhY2VkKCkgJiYgY3Vyci0+cmVuZGVyZXIo
KS5pc1J1YnlSdW4oKSAmJiBjdXJyLT5yZW5kZXJlcigpLnN0eWxlKCkucnVieVBvc2l0aW9uKCkg
PT0gUnVieVBvc2l0aW9uQWZ0ZXIpIHsKLSAgICAgICAgICAgIFJlbmRlclJ1YnlSdW4mIHJ1YnlS
dW4gPSB0b1JlbmRlclJ1YnlSdW4oY3Vyci0+cmVuZGVyZXIoKSk7CisgICAgICAgIGlmIChjaGls
ZC0+cmVuZGVyZXIoKS5pc1JlcGxhY2VkKCkgJiYgaXM8UmVuZGVyUnVieVJ1bj4oY2hpbGQtPnJl
bmRlcmVyKCkpICYmIGNoaWxkLT5yZW5kZXJlcigpLnN0eWxlKCkucnVieVBvc2l0aW9uKCkgPT0g
UnVieVBvc2l0aW9uQWZ0ZXIpIHsKKyAgICAgICAgICAgIGF1dG8mIHJ1YnlSdW4gPSBkb3duY2Fz
dDxSZW5kZXJSdWJ5UnVuPihjaGlsZC0+cmVuZGVyZXIoKSk7CiAgICAgICAgICAgICBSZW5kZXJS
dWJ5VGV4dCogcnVieVRleHQgPSBydWJ5UnVuLnJ1YnlUZXh0KCk7CiAgICAgICAgICAgICBpZiAo
IXJ1YnlUZXh0KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTU1NiwyNyArMTU1NCwy
NyBAQCBMYXlvdXRVbml0IElubGluZUZsb3dCb3g6OmNvbXB1dGVVbmRlckFubm90YXRpb25BZGp1
c3RtZW50KExheW91dFVuaXQgYWxsb3dlZFBvcwogICAgICAgICAgICAgICAgIExheW91dFVuaXQg
dG9wT2ZGaXJzdFJ1YnlUZXh0TGluZSA9IHJ1YnlUZXh0LT5sb2dpY2FsVG9wKCkgKyAocnVieVRl
eHQtPmZpcnN0Um9vdEJveCgpID8gcnVieVRleHQtPmZpcnN0Um9vdEJveCgpLT5saW5lVG9wKCkg
OiBMYXlvdXRVbml0KCkpOwogICAgICAgICAgICAgICAgIGlmICh0b3BPZkZpcnN0UnVieVRleHRM
aW5lID49IDApCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IHRvcE9mRmlyc3RSdWJ5VGV4dExpbmUgKz0gY3Vyci0+bG9naWNhbFRvcCgpOworICAgICAgICAg
ICAgICAgIHRvcE9mRmlyc3RSdWJ5VGV4dExpbmUgKz0gY2hpbGQtPmxvZ2ljYWxUb3AoKTsKICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBzdGQ6Om1heChyZXN1bHQsIGFsbG93ZWRQb3NpdGlvbiAt
IHRvcE9mRmlyc3RSdWJ5VGV4dExpbmUpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICBMYXlvdXRVbml0IGJvdHRvbU9mTGFzdFJ1YnlUZXh0TGluZSA9IHJ1YnlUZXh0LT5s
b2dpY2FsVG9wKCkgKyAocnVieVRleHQtPmxhc3RSb290Qm94KCkgPyBydWJ5VGV4dC0+bGFzdFJv
b3RCb3goKS0+bGluZUJvdHRvbSgpIDogcnVieVRleHQtPmxvZ2ljYWxIZWlnaHQoKSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGJvdHRvbU9mTGFzdFJ1YnlUZXh0TGluZSA8PSBjdXJyLT5sb2dpY2Fs
SGVpZ2h0KCkpCisgICAgICAgICAgICAgICAgaWYgKGJvdHRvbU9mTGFzdFJ1YnlUZXh0TGluZSA8
PSBjaGlsZC0+bG9naWNhbEhlaWdodCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICBib3R0b21PZkxhc3RSdWJ5VGV4dExpbmUgKz0gY3Vyci0+bG9naWNh
bFRvcCgpOworICAgICAgICAgICAgICAgIGJvdHRvbU9mTGFzdFJ1YnlUZXh0TGluZSArPSBjaGls
ZC0+bG9naWNhbFRvcCgpOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHN0ZDo6bWF4KHJlc3Vs
dCwgYm90dG9tT2ZMYXN0UnVieVRleHRMaW5lIC0gYWxsb3dlZFBvc2l0aW9uKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGlmIChjdXJyLT5pc0lubGluZVRleHRCb3goKSkg
ewotICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGNoaWxkTGluZVN0eWxlID0gY3Vyci0+
bGluZVN0eWxlKCk7CisgICAgICAgIGlmIChpczxJbmxpbmVUZXh0Qm94PigqY2hpbGQpKSB7Cisg
ICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgY2hpbGRMaW5lU3R5bGUgPSBjaGlsZC0+bGlu
ZVN0eWxlKCk7CiAgICAgICAgICAgICBib29sIGVtcGhhc2lzTWFya0lzQWJvdmU7Ci0gICAgICAg
ICAgICB0b0lubGluZVRleHRCb3goY3VyciktPmVtcGhhc2lzTWFya0V4aXN0c0FuZElzQWJvdmUo
Y2hpbGRMaW5lU3R5bGUsIGVtcGhhc2lzTWFya0lzQWJvdmUpOworICAgICAgICAgICAgZG93bmNh
c3Q8SW5saW5lVGV4dEJveD4oKmNoaWxkKS5lbXBoYXNpc01hcmtFeGlzdHNBbmRJc0Fib3ZlKGNo
aWxkTGluZVN0eWxlLCBlbXBoYXNpc01hcmtJc0Fib3ZlKTsKICAgICAgICAgICAgIGlmIChjaGls
ZExpbmVTdHlsZS50ZXh0RW1waGFzaXNNYXJrKCkgIT0gVGV4dEVtcGhhc2lzTWFya05vbmUgJiYg
IWVtcGhhc2lzTWFya0lzQWJvdmUpIHsKICAgICAgICAgICAgICAgICBpZiAoIWNoaWxkTGluZVN0
eWxlLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSkgewotICAgICAgICAgICAgICAgICAgICBM
YXlvdXRVbml0IGJvdHRvbU9mRW1waGFzaXNNYXJrID0gY3Vyci0+bG9naWNhbEJvdHRvbSgpICsg
Y2hpbGRMaW5lU3R5bGUuZm9udCgpLmVtcGhhc2lzTWFya0hlaWdodChjaGlsZExpbmVTdHlsZS50
ZXh0RW1waGFzaXNNYXJrU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0
IGJvdHRvbU9mRW1waGFzaXNNYXJrID0gY2hpbGQtPmxvZ2ljYWxCb3R0b20oKSArIGNoaWxkTGlu
ZVN0eWxlLmZvbnQoKS5lbXBoYXNpc01hcmtIZWlnaHQoY2hpbGRMaW5lU3R5bGUudGV4dEVtcGhh
c2lzTWFya1N0cmluZygpKTsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gc3RkOjptYXgo
cmVzdWx0LCBib3R0b21PZkVtcGhhc2lzTWFyayAtIGFsbG93ZWRQb3NpdGlvbik7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCB0b3BPZkVt
cGhhc2lzTWFyayA9IGN1cnItPmxvZ2ljYWxUb3AoKSAtIGNoaWxkTGluZVN0eWxlLmZvbnQoKS5l
bXBoYXNpc01hcmtIZWlnaHQoY2hpbGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFya1N0cmluZygp
KTsKKyAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCB0b3BPZkVtcGhhc2lzTWFyayA9IGNo
aWxkLT5sb2dpY2FsVG9wKCkgLSBjaGlsZExpbmVTdHlsZS5mb250KCkuZW1waGFzaXNNYXJrSGVp
Z2h0KGNoaWxkTGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CiAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IHN0ZDo6bWF4KHJlc3VsdCwgYWxsb3dlZFBvc2l0aW9uIC0gdG9w
T2ZFbXBoYXNpc01hcmspOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCmluZGV4IDhjNjZkNTY2YjcxMWE0OWU1
YWU0ZjYyYTI2YmEwYzFiMGNiODdjZmMuLjFkMDQ0MzZjNGI0MGZhYjQ4MzVkNzc4N2Q3ZDA3YmZk
ZDAxODY4NjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93
Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaApAQCAt
MzQ0LDggKzM0NCw2IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKLUlOTElORV9CT1hfT0JKRUNU
X1RZUEVfQ0FTVFMoSW5saW5lRmxvd0JveCwgaXNJbmxpbmVGbG93Qm94KCkpCi0KICNpZmRlZiBO
REVCVUcKIAogaW5saW5lIHZvaWQgSW5saW5lRmxvd0JveDo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNv
bnN0CkBAIC0zNjQsNiArMzYyLDggQEAgaW5saW5lIHZvaWQgSW5saW5lRmxvd0JveDo6c2V0SGFz
QmFkQ2hpbGRMaXN0KCkKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0lOTElORV9CT1goSW5saW5lRmxvd0JveCwgaXNJbmxpbmVGbG93Qm94KCkpCisK
ICNpZm5kZWYgTkRFQlVHCiAvLyBPdXRzaWRlIHRoZSBXZWJDb3JlIG5hbWVzcGFjZSBmb3IgZWFz
ZSBvZiBpbnZvY2F0aW9uIGZyb20gZ2RiLgogdm9pZCBzaG93VHJlZShjb25zdCBXZWJDb3JlOjpJ
bmxpbmVGbG93Qm94Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaApp
bmRleCBkMzkyYWQ1MjFkNWIxMDIwM2Q5MzUyNWM4Mjk4M2ZiNzhlM2NiYmZmLi40ZGEwYmE4ZmY5
ZTUwMGRkN2QwMjUyYWZlYjMzMGM1MDI2ZGYyODdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmgKQEAgLTE3OSw4ICsxNzksOCBAQCBwcml2YXRlOgogICAgIHVuc2ln
bmVkIHNob3J0IG1fdHJ1bmNhdGlvbjsKIH07CiAKLUlOTElORV9CT1hfT0JKRUNUX1RZUEVfQ0FT
VFMoSW5saW5lVGV4dEJveCwgaXNJbmxpbmVUZXh0Qm94KCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19JTkxJTkVfQk9YKElubGluZVRleHRCb3gs
IGlzSW5saW5lVGV4dEJveCgpKQorCiAjZW5kaWYgLy8gSW5saW5lVGV4dEJveF9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCmluZGV4IDU0OGQ1NWRjNGY3
ZDY2ZGNjNjFmOGMyNWI4YjgwMWY5ZGQ4Yjk4MTEuLmYxNDJjNGQzNDcyYjMzNGZkNjI0YTIzZmM5
NjU2YjdlMmY4ZDYxN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0Zsb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
a0Zsb3cuY3BwCkBAIC0zMjcwLDExICszMjcwLDExIEBAIFBvc2l0aW9uIFJlbmRlckJsb2NrRmxv
dzo6cG9zaXRpb25Gb3JCb3goSW5saW5lQm94ICpib3gsIGJvb2wgc3RhcnQpIGNvbnN0CiAgICAg
aWYgKCFib3gtPnJlbmRlcmVyKCkubm9uUHNldWRvTm9kZSgpKQogICAgICAgICByZXR1cm4gY3Jl
YXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG5vblBzZXVkb0VsZW1lbnQoKSwgc3RhcnQgPyBjYXJl
dE1pbk9mZnNldCgpIDogY2FyZXRNYXhPZmZzZXQoKSk7CiAKLSAgICBpZiAoIWJveC0+aXNJbmxp
bmVUZXh0Qm94KCkpCisgICAgaWYgKCFpczxJbmxpbmVUZXh0Qm94PigqYm94KSkKICAgICAgICAg
cmV0dXJuIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihib3gtPnJlbmRlcmVyKCkubm9uUHNl
dWRvTm9kZSgpLCBzdGFydCA/IGJveC0+cmVuZGVyZXIoKS5jYXJldE1pbk9mZnNldCgpIDogYm94
LT5yZW5kZXJlcigpLmNhcmV0TWF4T2Zmc2V0KCkpOwogCi0gICAgSW5saW5lVGV4dEJveCogdGV4
dEJveCA9IHRvSW5saW5lVGV4dEJveChib3gpOwotICAgIHJldHVybiBjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24oYm94LT5yZW5kZXJlcigpLm5vblBzZXVkb05vZGUoKSwgc3RhcnQgPyB0ZXh0
Qm94LT5zdGFydCgpIDogdGV4dEJveC0+c3RhcnQoKSArIHRleHRCb3gtPmxlbigpKTsKKyAgICBh
dXRvJiB0ZXh0Qm94ID0gZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oKmJveCk7CisgICAgcmV0dXJu
IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbih0ZXh0Qm94LnJlbmRlcmVyKCkubm9uUHNldWRv
Tm9kZSgpLCBzdGFydCA/IHRleHRCb3guc3RhcnQoKSA6IHRleHRCb3guc3RhcnQoKSArIHRleHRC
b3gubGVuKCkpOwogfQogCiBWaXNpYmxlUG9zaXRpb24gUmVuZGVyQmxvY2tGbG93Ojpwb3NpdGlv
bkZvclBvaW50V2l0aElubGluZUNoaWxkcmVuKGNvbnN0IExheW91dFBvaW50JiBwb2ludEluTG9n
aWNhbENvbnRlbnRzLCBjb25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaAppbmRleCA2ZWRjY2MyNmQ1MmQ4N2FjN2ZjYjJl
OGNhMDg2NjQxZjQxODNjYjYxLi5hYjc2MzlmYTEyYjczMTNiOGRhZTJmYmM2ZGVhYzY0MDhkYjQ0
NDhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCkBAIC0z
MzgsOCArMzM4LDggQEAgcHVibGljOgogICAgIFJlbmRlckxpbmVCb3hMaXN0JiBsaW5lQm94ZXMo
KSB7IHJldHVybiBtX2xpbmVCb3hlczsgfQogICAgIGNvbnN0IFJlbmRlckxpbmVCb3hMaXN0JiBs
aW5lQm94ZXMoKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3hlczsgfQogCi0gICAgUm9vdElubGlu
ZUJveCogZmlyc3RSb290Qm94KCkgY29uc3QgeyByZXR1cm4gdG9Sb290SW5saW5lQm94KG1fbGlu
ZUJveGVzLmZpcnN0TGluZUJveCgpKTsgfQotICAgIFJvb3RJbmxpbmVCb3gqIGxhc3RSb290Qm94
KCkgY29uc3QgeyByZXR1cm4gdG9Sb290SW5saW5lQm94KG1fbGluZUJveGVzLmxhc3RMaW5lQm94
KCkpOyB9CisgICAgUm9vdElubGluZUJveCogZmlyc3RSb290Qm94KCkgY29uc3QgeyByZXR1cm4g
ZG93bmNhc3Q8Um9vdElubGluZUJveD4obV9saW5lQm94ZXMuZmlyc3RMaW5lQm94KCkpOyB9Cisg
ICAgUm9vdElubGluZUJveCogbGFzdFJvb3RCb3goKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxS
b290SW5saW5lQm94PihtX2xpbmVCb3hlcy5sYXN0TGluZUJveCgpKTsgfQogCiAgICAgdmlydHVh
bCBib29sIGhhc0xpbmVzKCkgY29uc3Qgb3ZlcnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lk
IGludmFsaWRhdGVMaW5lTGF5b3V0UGF0aCgpIG92ZXJyaWRlIGZpbmFsOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAppbmRleCA0OTIw
NzlhOTNlZTU2NDFmYjU4ZjEwMjk4NzZjNGRiYmYxZWEzMjI0Li41OGY0NTVkM2E3NTRiZDRmMDU2
ZTE0YmRmYTMyNWExODZiOTc5NWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcApAQCAtMjEzLDggKzIxMyw3IEBAIElubGluZUZs
b3dCb3gqIFJlbmRlckJsb2NrRmxvdzo6Y3JlYXRlTGluZUJveGVzKFJlbmRlck9iamVjdCogb2Jq
LCBjb25zdCBMaW5lSW5mCiAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIG1ha2UgYSBuZXcgYm94
IGZvciB0aGlzIHJlbmRlciBvYmplY3QuICBPbmNlCiAgICAgICAgICAgICAvLyBtYWRlLCB3ZSBu
ZWVkIHRvIHBsYWNlIGl0IGF0IHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgbGluZS4KICAgICAgICAg
ICAgIElubGluZUJveCogbmV3Qm94ID0gY3JlYXRlSW5saW5lQm94Rm9yUmVuZGVyZXIob2JqLCBv
YmogPT0gdGhpcyk7Ci0gICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TihuZXdCb3gtPmlzSW5saW5lRmxvd0JveCgpKTsKLSAgICAgICAgICAgIHBhcmVudEJveCA9IHRv
SW5saW5lRmxvd0JveChuZXdCb3gpOworICAgICAgICAgICAgcGFyZW50Qm94ID0gZG93bmNhc3Q8
SW5saW5lRmxvd0JveD4obmV3Qm94KTsKICAgICAgICAgICAgIHBhcmVudEJveC0+c2V0SXNGaXJz
dExpbmUobGluZUluZm8uaXNGaXJzdExpbmUoKSk7CiAgICAgICAgICAgICBwYXJlbnRCb3gtPnNl
dElzSG9yaXpvbnRhbChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKICAgICAgICAgICAgIGlm
ICghaGFzRGVmYXVsdExpbmVCb3hDb250YWluKQpAQCAtMzE0LDEzICszMTMsMTMgQEAgUm9vdElu
bGluZUJveCogUmVuZGVyQmxvY2tGbG93Ojpjb25zdHJ1Y3RMaW5lKEJpZGlSdW5MaXN0PEJpZGlS
dW4+JiBiaWRpUnVucywgY28KICAgICAgICAgYm9vbCB2aXN1YWxseU9yZGVyZWQgPSByLT5yZW5k
ZXJlcigpLnN0eWxlKCkucnRsT3JkZXJpbmcoKSA9PSBWaXN1YWxPcmRlcjsKICAgICAgICAgYm94
LT5zZXRCaWRpTGV2ZWwoci0+bGV2ZWwoKSk7CiAKLSAgICAgICAgaWYgKGJveC0+aXNJbmxpbmVU
ZXh0Qm94KCkpIHsKLSAgICAgICAgICAgIElubGluZVRleHRCb3gqIHRleHQgPSB0b0lubGluZVRl
eHRCb3goYm94KTsKLSAgICAgICAgICAgIHRleHQtPnNldFN0YXJ0KHItPm1fc3RhcnQpOwotICAg
ICAgICAgICAgdGV4dC0+c2V0TGVuKHItPm1fc3RvcCAtIHItPm1fc3RhcnQpOwotICAgICAgICAg
ICAgdGV4dC0+c2V0RGlyT3ZlcnJpZGUoci0+ZGlyT3ZlcnJpZGUodmlzdWFsbHlPcmRlcmVkKSk7
CisgICAgICAgIGlmIChpczxJbmxpbmVUZXh0Qm94PigqYm94KSkgeworICAgICAgICAgICAgYXV0
byYgdGV4dEJveCA9IGRvd25jYXN0PElubGluZVRleHRCb3g+KCpib3gpOworICAgICAgICAgICAg
dGV4dEJveC5zZXRTdGFydChyLT5tX3N0YXJ0KTsKKyAgICAgICAgICAgIHRleHRCb3guc2V0TGVu
KHItPm1fc3RvcCAtIHItPm1fc3RhcnQpOworICAgICAgICAgICAgdGV4dEJveC5zZXREaXJPdmVy
cmlkZShyLT5kaXJPdmVycmlkZSh2aXN1YWxseU9yZGVyZWQpKTsKICAgICAgICAgICAgIGlmIChy
LT5tX2hhc0h5cGhlbikKLSAgICAgICAgICAgICAgICB0ZXh0LT5zZXRIYXNIeXBoZW4odHJ1ZSk7
CisgICAgICAgICAgICAgICAgdGV4dEJveC5zZXRIYXNIeXBoZW4odHJ1ZSk7CiAgICAgICAgIH0K
ICAgICB9CiAKQEAgLTQ3OCw3ICs0NzcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0TG9naWNh
bFdpZHRoRm9yVGV4dFJ1bihSb290SW5saW5lQm94KiBsaW5lQm94LCBCaWRpUnVuKiBydQogICAg
IH0KICAgICAKICAgICBMYXlvdXRVbml0IGh5cGhlbldpZHRoID0gMDsKLSAgICBpZiAodG9Jbmxp
bmVUZXh0Qm94KHJ1bi0+Ym94KCkpLT5oYXNIeXBoZW4oKSkKKyAgICBpZiAoZG93bmNhc3Q8SW5s
aW5lVGV4dEJveD4oKnJ1bi0+Ym94KCkpLmhhc0h5cGhlbigpKQogICAgICAgICBoeXBoZW5XaWR0
aCA9IG1lYXN1cmVIeXBoZW5XaWR0aChyZW5kZXJlciwgZm9udCwgJmZhbGxiYWNrRm9udHMpOwog
CiAgICAgZmxvYXQgbWVhc3VyZWRXaWR0aCA9IDA7CkBAIC01MjgsNyArNTI3LDcgQEAgc3RhdGlj
IGlubGluZSB2b2lkIHNldExvZ2ljYWxXaWR0aEZvclRleHRSdW4oUm9vdElubGluZUJveCogbGlu
ZUJveCwgQmlkaVJ1biogcnUKICAgICBydW4tPmJveCgpLT5zZXRMb2dpY2FsV2lkdGgobWVhc3Vy
ZWRXaWR0aCArIGh5cGhlbldpZHRoKTsKICAgICBpZiAoIWZhbGxiYWNrRm9udHMuaXNFbXB0eSgp
KSB7CiAgICAgICAgIEFTU0VSVChydW4tPmJveCgpLT5iZWhhdmVzTGlrZVRleHQoKSk7Ci0gICAg
ICAgIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwOjppdGVyYXRvciBpdCA9IHRleHRC
b3hEYXRhTWFwLmFkZCh0b0lubGluZVRleHRCb3gocnVuLT5ib3goKSksIHN0ZDo6bWFrZV9wYWly
KFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KCksIEdseXBoT3ZlcmZsb3coKSkpLml0ZXJh
dG9yOworICAgICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3Ig
aXQgPSB0ZXh0Qm94RGF0YU1hcC5hZGQoZG93bmNhc3Q8SW5saW5lVGV4dEJveD4ocnVuLT5ib3go
KSksIHN0ZDo6bWFrZV9wYWlyKFZlY3Rvcjxjb25zdCBTaW1wbGVGb250RGF0YSo+KCksIEdseXBo
T3ZlcmZsb3coKSkpLml0ZXJhdG9yOwogICAgICAgICBBU1NFUlQoaXQtPnZhbHVlLmZpcnN0Lmlz
RW1wdHkoKSk7CiAgICAgICAgIGNvcHlUb1ZlY3RvcihmYWxsYmFja0ZvbnRzLCBpdC0+dmFsdWUu
Zmlyc3QpOwogICAgICAgICBydW4tPmJveCgpLT5wYXJlbnQoKS0+Y2xlYXJEZXNjZW5kYW50c0hh
dmVTYW1lTGluZUhlaWdodEFuZEJhc2VsaW5lKCk7CkBAIC01MzYsMTEgKzUzNSwxMSBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgc2V0TG9naWNhbFdpZHRoRm9yVGV4dFJ1bihSb290SW5saW5lQm94KiBs
aW5lQm94LCBCaWRpUnVuKiBydQogCiAgICAgLy8gSW5jbHVkZSB0ZXh0IGRlY29yYXRpb24gdmlz
dWFsIG92ZXJmbG93IGFzIHBhcnQgb2YgdGhlIGdseXBoIG92ZXJmbG93LgogICAgIGlmIChyZW5k
ZXJlci0+c3R5bGUoKS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpICE9IFRleHREZWNvcmF0aW9u
Tm9uZSkKLSAgICAgICAgZ2x5cGhPdmVyZmxvdy5leHRlbmRUbyh2aXN1YWxPdmVyZmxvd0ZvckRl
Y29yYXRpb25zKHJ1bi0+Ym94KCktPmxpbmVTdHlsZSgpLCB0b0lubGluZVRleHRCb3gocnVuLT5i
b3goKSkpKTsKKyAgICAgICAgZ2x5cGhPdmVyZmxvdy5leHRlbmRUbyh2aXN1YWxPdmVyZmxvd0Zv
ckRlY29yYXRpb25zKHJ1bi0+Ym94KCktPmxpbmVTdHlsZSgpLCBkb3duY2FzdDxJbmxpbmVUZXh0
Qm94PihydW4tPmJveCgpKSkpOwogCiAgICAgaWYgKCFnbHlwaE92ZXJmbG93LmlzRW1wdHkoKSkg
ewogICAgICAgICBBU1NFUlQocnVuLT5ib3goKS0+YmVoYXZlc0xpa2VUZXh0KCkpOwotICAgICAg
ICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0Qm94
RGF0YU1hcC5hZGQodG9JbmxpbmVUZXh0Qm94KHJ1bi0+Ym94KCkpLCBzdGQ6Om1ha2VfcGFpcihW
ZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqPigpLCBHbHlwaE92ZXJmbG93KCkpKS5pdGVyYXRv
cjsKKyAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0
ID0gdGV4dEJveERhdGFNYXAuYWRkKGRvd25jYXN0PElubGluZVRleHRCb3g+KHJ1bi0+Ym94KCkp
LCBzdGQ6Om1ha2VfcGFpcihWZWN0b3I8Y29uc3QgU2ltcGxlRm9udERhdGEqPigpLCBHbHlwaE92
ZXJmbG93KCkpKS5pdGVyYXRvcjsKICAgICAgICAgaXQtPnZhbHVlLnNlY29uZCA9IGdseXBoT3Zl
cmZsb3c7CiAgICAgICAgIHJ1bi0+Ym94KCktPmNsZWFyS25vd25Ub0hhdmVOb092ZXJmbG93KCk7
CiAgICAgfQpAQCAtNTg2LDI1ICs1ODUsMjUgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvbXB1dGVF
eHBhbnNpb25Gb3JKdXN0aWZpZWRUZXh0KEJpZGlSdW4qIGZpcnN0UnVuLCBCaWRpUnVuKgogICAg
ICAgICByZXR1cm47CiAKICAgICBzaXplX3QgaSA9IDA7Ci0gICAgZm9yIChCaWRpUnVuKiByID0g
Zmlyc3RSdW47IHI7IHIgPSByLT5uZXh0KCkpIHsKLSAgICAgICAgaWYgKCFyLT5ib3goKSB8fCBy
ID09IHRyYWlsaW5nU3BhY2VSdW4pCisgICAgZm9yIChCaWRpUnVuKiBydW4gPSBmaXJzdFJ1bjsg
cnVuOyBydW4gPSBydW4tPm5leHQoKSkgeworICAgICAgICBpZiAoIXJ1bi0+Ym94KCkgfHwgcnVu
ID09IHRyYWlsaW5nU3BhY2VSdW4pCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCi0g
ICAgICAgIGlmIChyLT5yZW5kZXJlcigpLmlzVGV4dCgpKSB7CisgICAgICAgIGlmIChpczxSZW5k
ZXJUZXh0PihydW4tPnJlbmRlcmVyKCkpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBvcHBvcnR1
bml0aWVzSW5SdW4gPSBleHBhbnNpb25PcHBvcnR1bml0aWVzW2krK107CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIEFTU0VSVChvcHBvcnR1bml0aWVzSW5SdW4gPD0gZXhwYW5zaW9uT3Bwb3J0
dW5pdHlDb3VudCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIE9ubHkganVzdGlmeSB0
ZXh0IGlmIHdoaXRlc3BhY2UgaXMgY29sbGFwc2VkLgotICAgICAgICAgICAgaWYgKHItPnJlbmRl
cmVyKCkuc3R5bGUoKS5jb2xsYXBzZVdoaXRlU3BhY2UoKSkgewotICAgICAgICAgICAgICAgIElu
bGluZVRleHRCb3gqIHRleHRCb3ggPSB0b0lubGluZVRleHRCb3goci0+Ym94KCkpOworICAgICAg
ICAgICAgaWYgKHJ1bi0+cmVuZGVyZXIoKS5zdHlsZSgpLmNvbGxhcHNlV2hpdGVTcGFjZSgpKSB7
CisgICAgICAgICAgICAgICAgSW5saW5lVGV4dEJveCYgdGV4dEJveCA9IGRvd25jYXN0PElubGlu
ZVRleHRCb3g+KCpydW4tPmJveCgpKTsKICAgICAgICAgICAgICAgICBmbG9hdCBleHBhbnNpb24g
PSAoYXZhaWxhYmxlTG9naWNhbFdpZHRoIC0gdG90YWxMb2dpY2FsV2lkdGgpICogb3Bwb3J0dW5p
dGllc0luUnVuIC8gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudDsKLSAgICAgICAgICAgICAgICB0
ZXh0Qm94LT5zZXRFeHBhbnNpb24oZXhwYW5zaW9uKTsKKyAgICAgICAgICAgICAgICB0ZXh0Qm94
LnNldEV4cGFuc2lvbihleHBhbnNpb24pOwogICAgICAgICAgICAgICAgIHRvdGFsTG9naWNhbFdp
ZHRoICs9IGV4cGFuc2lvbjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGV4cGFuc2lvbk9w
cG9ydHVuaXR5Q291bnQgLT0gb3Bwb3J0dW5pdGllc0luUnVuOwotICAgICAgICB9IGVsc2UgaWYg
KHItPnJlbmRlcmVyKCkuaXNSdWJ5UnVuKCkpCi0gICAgICAgICAgICB1cGRhdGVSdWJ5Rm9ySnVz
dGlmaWVkVGV4dCh0b1JlbmRlclJ1YnlSdW4oci0+cmVuZGVyZXIoKSksICpyLCBleHBhbnNpb25P
cHBvcnR1bml0aWVzLCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50LCB0b3RhbExvZ2ljYWxXaWR0
aCwgYXZhaWxhYmxlTG9naWNhbFdpZHRoLCBpKTsKKyAgICAgICAgfSBlbHNlIGlmIChpczxSZW5k
ZXJSdWJ5UnVuPihydW4tPnJlbmRlcmVyKCkpKQorICAgICAgICAgICAgdXBkYXRlUnVieUZvckp1
c3RpZmllZFRleHQoZG93bmNhc3Q8UmVuZGVyUnVieVJ1bj4ocnVuLT5yZW5kZXJlcigpKSwgKnJ1
biwgZXhwYW5zaW9uT3Bwb3J0dW5pdGllcywgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCwgdG90
YWxMb2dpY2FsV2lkdGgsIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCwgaSk7CiAKICAgICAgICAgaWYg
KCFleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KQogICAgICAgICAgICAgYnJlYWs7CkBAIC03MDks
MzkgKzcwOCw0MCBAQCBCaWRpUnVuKiBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbmxpbmVEaXJl
Y3Rpb25Qb3NpdGlvbnNGb3JTZWdtZW50KFJvb3RJbmxpbmVCbwogICAgIFZlY3Rvcjx1bnNpZ25l
ZCwgMTY+IGV4cGFuc2lvbk9wcG9ydHVuaXRpZXM7CiAgICAgUmVuZGVyT2JqZWN0KiBwcmV2aW91
c09iamVjdCA9IG51bGxwdHI7CiAKLSAgICBCaWRpUnVuKiByID0gZmlyc3RSdW47Ci0gICAgZm9y
ICg7IHI7IHIgPSByLT5uZXh0KCkpIHsKLSAgICAgICAgaWYgKCFyLT5ib3goKSB8fCByLT5yZW5k
ZXJlcigpLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8IHItPmJveCgpLT5pc0xpbmVCcmVhaygp
KQorICAgIEJpZGlSdW4qIHJ1biA9IGZpcnN0UnVuOworICAgIGZvciAoOyBydW47IHJ1biA9IHJ1
bi0+bmV4dCgpKSB7CisgICAgICAgIGlmICghcnVuLT5ib3goKSB8fCBydW4tPnJlbmRlcmVyKCku
aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwgcnVuLT5ib3goKS0+aXNMaW5lQnJlYWsoKSkgewog
ICAgICAgICAgICAgY29udGludWU7IC8vIFBvc2l0aW9uZWQgb2JqZWN0cyBhcmUgb25seSBwYXJ0
aWNpcGF0aW5nIHRvIGZpZ3VyZSBvdXQgdGhlaXIKICAgICAgICAgICAgICAgICAgICAgICAvLyBj
b3JyZWN0IHN0YXRpYyB4IHBvc2l0aW9uLiAgVGhleSBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgd2lk
dGguCiAgICAgICAgICAgICAgICAgICAgICAgLy8gU2ltaWxhcmx5LCBsaW5lIGJyZWFrIGJveGVz
IGhhdmUgbm8gZWZmZWN0IG9uIHRoZSB3aWR0aC4KLSAgICAgICAgaWYgKGlzPFJlbmRlclRleHQ+
KHItPnJlbmRlcmVyKCkpKSB7Ci0gICAgICAgICAgICBSZW5kZXJUZXh0JiByZW5kZXJUZXh0ID0g
ZG93bmNhc3Q8UmVuZGVyVGV4dD4oci0+cmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICBpZiAodGV4
dEFsaWduID09IEpVU1RJRlkgJiYgciAhPSB0cmFpbGluZ1NwYWNlUnVuKSB7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGlzPFJlbmRlclRleHQ+KHJ1bi0+cmVuZGVyZXIoKSkpIHsKKyAgICAgICAg
ICAgIGF1dG8mIHJlbmRlclRleHQgPSBkb3duY2FzdDxSZW5kZXJUZXh0PihydW4tPnJlbmRlcmVy
KCkpOworICAgICAgICAgICAgaWYgKHRleHRBbGlnbiA9PSBKVVNUSUZZICYmIHJ1biAhPSB0cmFp
bGluZ1NwYWNlUnVuKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFpc0FmdGVyRXhwYW5zaW9uKQot
ICAgICAgICAgICAgICAgICAgICB0b0lubGluZVRleHRCb3goci0+Ym94KCkpLT5zZXRDYW5IYXZl
TGVhZGluZ0V4cGFuc2lvbih0cnVlKTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBvcHBvcnR1
bml0aWVzSW5SdW4gPSBGb250OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KHJlbmRlclRleHQu
c3RyaW5nVmlldyhyLT5tX3N0YXJ0LCByLT5tX3N0b3ApLCByLT5ib3goKS0+ZGlyZWN0aW9uKCks
IGlzQWZ0ZXJFeHBhbnNpb24pOworICAgICAgICAgICAgICAgICAgICBkb3duY2FzdDxJbmxpbmVU
ZXh0Qm94PigqcnVuLT5ib3goKSkuc2V0Q2FuSGF2ZUxlYWRpbmdFeHBhbnNpb24odHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgdW5zaWduZWQgb3Bwb3J0dW5pdGllc0luUnVuID0gRm9udDo6ZXhwYW5z
aW9uT3Bwb3J0dW5pdHlDb3VudChyZW5kZXJUZXh0LnN0cmluZ1ZpZXcocnVuLT5tX3N0YXJ0LCBy
dW4tPm1fc3RvcCksIHJ1bi0+Ym94KCktPmRpcmVjdGlvbigpLCBpc0FmdGVyRXhwYW5zaW9uKTsK
ICAgICAgICAgICAgICAgICBleHBhbnNpb25PcHBvcnR1bml0aWVzLmFwcGVuZChvcHBvcnR1bml0
aWVzSW5SdW4pOwogICAgICAgICAgICAgICAgIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgKz0g
b3Bwb3J0dW5pdGllc0luUnVuOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoaW50
IGxlbmd0aCA9IHJlbmRlclRleHQudGV4dExlbmd0aCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KCFyLT5tX3N0YXJ0ICYmIG5lZWRzV29yZFNwYWNpbmcgJiYgaXNTcGFjZU9yTmV3bGluZShyZW5k
ZXJUZXh0LmNoYXJhY3RlckF0KHItPm1fc3RhcnQpKSkKKyAgICAgICAgICAgICAgICBpZiAoIXJ1
bi0+bV9zdGFydCAmJiBuZWVkc1dvcmRTcGFjaW5nICYmIGlzU3BhY2VPck5ld2xpbmUocmVuZGVy
VGV4dC5jaGFyYWN0ZXJBdChydW4tPm1fc3RhcnQpKSkKICAgICAgICAgICAgICAgICAgICAgdG90
YWxMb2dpY2FsV2lkdGggKz0gbGluZVN0eWxlKCpyZW5kZXJUZXh0LnBhcmVudCgpLCBsaW5lSW5m
bykuZm9udCgpLndvcmRTcGFjaW5nKCk7Ci0gICAgICAgICAgICAgICAgbmVlZHNXb3JkU3BhY2lu
ZyA9ICFpc1NwYWNlT3JOZXdsaW5lKHJlbmRlclRleHQuY2hhcmFjdGVyQXQoci0+bV9zdG9wIC0g
MSkpICYmIHItPm1fc3RvcCA9PSBsZW5ndGg7CisgICAgICAgICAgICAgICAgbmVlZHNXb3JkU3Bh
Y2luZyA9ICFpc1NwYWNlT3JOZXdsaW5lKHJlbmRlclRleHQuY2hhcmFjdGVyQXQocnVuLT5tX3N0
b3AgLSAxKSkgJiYgcnVuLT5tX3N0b3AgPT0gbGVuZ3RoOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBzZXRMb2dpY2FsV2lkdGhGb3JUZXh0UnVuKGxpbmVCb3gsIHIsICZyZW5kZXJUZXh0
LCB0b3RhbExvZ2ljYWxXaWR0aCwgbGluZUluZm8sIHRleHRCb3hEYXRhTWFwLCB2ZXJ0aWNhbFBv
c2l0aW9uQ2FjaGUsIHdvcmRNZWFzdXJlbWVudHMpOworICAgICAgICAgICAgc2V0TG9naWNhbFdp
ZHRoRm9yVGV4dFJ1bihsaW5lQm94LCBydW4sICZyZW5kZXJUZXh0LCB0b3RhbExvZ2ljYWxXaWR0
aCwgbGluZUluZm8sIHRleHRCb3hEYXRhTWFwLCB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUsIHdvcmRN
ZWFzdXJlbWVudHMpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYm9vbCBlbmNvdW50
ZXJlZEp1c3RpZmllZFJ1YnkgPSBmYWxzZTsKLSAgICAgICAgICAgIGlmIChyLT5yZW5kZXJlcigp
LmlzUnVieVJ1bigpICYmIHRleHRBbGlnbiA9PSBKVVNUSUZZICYmIHIgIT0gdHJhaWxpbmdTcGFj
ZVJ1biAmJiB0b1JlbmRlclJ1YnlSdW4oci0+cmVuZGVyZXIoKSkucnVieUJhc2UoKSkgewotICAg
ICAgICAgICAgICAgIGF1dG8qIHJ1YnlCYXNlID0gdG9SZW5kZXJSdWJ5UnVuKHItPnJlbmRlcmVy
KCkpLnJ1YnlCYXNlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJ1YnlCYXNlLT5maXJzdFJvb3RC
b3goKSAmJiAhcnVieUJhc2UtPmZpcnN0Um9vdEJveCgpLT5uZXh0Um9vdEJveCgpICYmIHItPnJl
bmRlcmVyKCkuc3R5bGUoKS5jb2xsYXBzZVdoaXRlU3BhY2UoKSkgeworICAgICAgICAgICAgaWYg
KGlzPFJlbmRlclJ1YnlSdW4+KHJ1bi0+cmVuZGVyZXIoKSkgJiYgdGV4dEFsaWduID09IEpVU1RJ
RlkgJiYgcnVuICE9IHRyYWlsaW5nU3BhY2VSdW4gJiYgdG9SZW5kZXJSdWJ5UnVuKHJ1bi0+cmVu
ZGVyZXIoKSkucnVieUJhc2UoKSkgeworICAgICAgICAgICAgICAgIGF1dG8qIHJ1YnlCYXNlID0g
ZG93bmNhc3Q8UmVuZGVyUnVieVJ1bj4ocnVuLT5yZW5kZXJlcigpKS5ydWJ5QmFzZSgpOworICAg
ICAgICAgICAgICAgIGlmIChydWJ5QmFzZS0+Zmlyc3RSb290Qm94KCkgJiYgIXJ1YnlCYXNlLT5m
aXJzdFJvb3RCb3goKS0+bmV4dFJvb3RCb3goKSAmJiBydW4tPnJlbmRlcmVyKCkuc3R5bGUoKS5j
b2xsYXBzZVdoaXRlU3BhY2UoKSkgewogICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8qIGxl
YWZDaGlsZCA9IHJ1YnlCYXNlLT5maXJzdFJvb3RCb3goKS0+Zmlyc3RMZWFmQ2hpbGQoKTsgbGVh
ZkNoaWxkOyBsZWFmQ2hpbGQgPSBsZWFmQ2hpbGQtPm5leHRMZWFmQ2hpbGQoKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFsZWFmQ2hpbGQtPmlzSW5saW5lVGV4dEJveCgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFpczxJbmxpbmVUZXh0Qm94PigqbGVhZkNoaWxkKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghaXNBZnRlckV4cGFuc2lvbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0b0lubGluZVRleHRCb3gobGVhZkNoaWxkKS0+c2V0Q2FuSGF2ZUxlYWRpbmdFeHBhbnNpb24o
dHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bmNhc3Q8SW5saW5lVGV4dEJv
eD4oKmxlYWZDaGlsZCkuc2V0Q2FuSGF2ZUxlYWRpbmdFeHBhbnNpb24odHJ1ZSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBlbmNvdW50ZXJlZEp1c3RpZmllZFJ1YnkgPSB0cnVlOwogICAgICAg
ICAgICAgICAgICAgICAgICAgYXV0byYgcmVuZGVyVGV4dCA9IGRvd25jYXN0PFJlbmRlclRleHQ+
KGxlYWZDaGlsZC0+cmVuZGVyZXIoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBvcHBvcnR1bml0aWVzSW5SdW4gPSBGb250OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KHJl
bmRlclRleHQuc3RyaW5nVmlldygpLCBsZWFmQ2hpbGQtPmRpcmVjdGlvbigpLCBpc0FmdGVyRXhw
YW5zaW9uKTsKQEAgLTc1NCwxNyArNzU0LDE3IEBAIEJpZGlSdW4qIFJlbmRlckJsb2NrRmxvdzo6
Y29tcHV0ZUlubGluZURpcmVjdGlvblBvc2l0aW9uc0ZvclNlZ21lbnQoUm9vdElubGluZUJvCiAg
ICAgICAgICAgICBpZiAoIWVuY291bnRlcmVkSnVzdGlmaWVkUnVieSkKICAgICAgICAgICAgICAg
ICBpc0FmdGVyRXhwYW5zaW9uID0gZmFsc2U7CiAKLSAgICAgICAgICAgIGlmICghci0+cmVuZGVy
ZXIoKS5pc1JlbmRlcklubGluZSgpKSB7Ci0gICAgICAgICAgICAgICAgUmVuZGVyQm94JiByZW5k
ZXJCb3ggPSB0b1JlbmRlckJveChyLT5yZW5kZXJlcigpKTsKLSAgICAgICAgICAgICAgICBpZiAo
cmVuZGVyQm94LmlzUnVieVJ1bigpKQotICAgICAgICAgICAgICAgICAgICBzZXRNYXJnaW5zRm9y
UnVieVJ1bihyLCB0b1JlbmRlclJ1YnlSdW4ocmVuZGVyQm94KSwgcHJldmlvdXNPYmplY3QsIGxp
bmVJbmZvKTsKLSAgICAgICAgICAgICAgICByLT5ib3goKS0+c2V0TG9naWNhbFdpZHRoKGxvZ2lj
YWxXaWR0aEZvckNoaWxkKHJlbmRlckJveCkpOworICAgICAgICAgICAgaWYgKCFpczxSZW5kZXJJ
bmxpbmU+KHJ1bi0+cmVuZGVyZXIoKSkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiByZW5kZXJC
b3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJ1bi0+cmVuZGVyZXIoKSk7CisgICAgICAgICAgICAg
ICAgaWYgKGlzPFJlbmRlclJ1YnlSdW4+KHJlbmRlckJveCkpCisgICAgICAgICAgICAgICAgICAg
IHNldE1hcmdpbnNGb3JSdWJ5UnVuKHJ1biwgZG93bmNhc3Q8UmVuZGVyUnVieVJ1bj4ocmVuZGVy
Qm94KSwgcHJldmlvdXNPYmplY3QsIGxpbmVJbmZvKTsKKyAgICAgICAgICAgICAgICBydW4tPmJv
eCgpLT5zZXRMb2dpY2FsV2lkdGgobG9naWNhbFdpZHRoRm9yQ2hpbGQocmVuZGVyQm94KSk7CiAg
ICAgICAgICAgICAgICAgdG90YWxMb2dpY2FsV2lkdGggKz0gbWFyZ2luU3RhcnRGb3JDaGlsZChy
ZW5kZXJCb3gpICsgbWFyZ2luRW5kRm9yQ2hpbGQocmVuZGVyQm94KTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogCi0gICAgICAgIHRvdGFsTG9naWNhbFdpZHRoICs9IHItPmJveCgpLT5sb2dp
Y2FsV2lkdGgoKTsKLSAgICAgICAgcHJldmlvdXNPYmplY3QgPSAmci0+cmVuZGVyZXIoKTsKKyAg
ICAgICAgdG90YWxMb2dpY2FsV2lkdGggKz0gcnVuLT5ib3goKS0+bG9naWNhbFdpZHRoKCk7Cisg
ICAgICAgIHByZXZpb3VzT2JqZWN0ID0gJnJ1bi0+cmVuZGVyZXIoKTsKICAgICB9CiAKICAgICBp
ZiAoaXNBZnRlckV4cGFuc2lvbiAmJiAhZXhwYW5zaW9uT3Bwb3J0dW5pdGllcy5pc0VtcHR5KCkp
IHsKQEAgLTc3Niw3ICs3NzYsNyBAQCBCaWRpUnVuKiBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJ
bmxpbmVEaXJlY3Rpb25Qb3NpdGlvbnNGb3JTZWdtZW50KFJvb3RJbmxpbmVCbwogCiAgICAgY29t
cHV0ZUV4cGFuc2lvbkZvckp1c3RpZmllZFRleHQoZmlyc3RSdW4sIHRyYWlsaW5nU3BhY2VSdW4s
IGV4cGFuc2lvbk9wcG9ydHVuaXRpZXMsIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQsIHRvdGFs
TG9naWNhbFdpZHRoLCBhdmFpbGFibGVMb2dpY2FsV2lkdGgpOwogCi0gICAgcmV0dXJuIHI7Cisg
ICAgcmV0dXJuIHJ1bjsKIH0KIAogdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVCbG9ja0Rp
cmVjdGlvblBvc2l0aW9uc0ZvckxpbmUoUm9vdElubGluZUJveCogbGluZUJveCwgQmlkaVJ1biog
Zmlyc3RSdW4sIEdseXBoT3ZlcmZsb3dBbmRGYWxsYmFja0ZvbnRzTWFwJiB0ZXh0Qm94RGF0YU1h
cCwKQEAgLTc4NSwyNiArNzg1LDI2IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlQmxv
Y2tEaXJlY3Rpb25Qb3NpdGlvbnNGb3JMaW5lKFJvb3RJbmxpbmVCb3gqIGxpbmVCCiAgICAgc2V0
TG9naWNhbEhlaWdodChsaW5lQm94LT5hbGlnbkJveGVzSW5CbG9ja0RpcmVjdGlvbihsb2dpY2Fs
SGVpZ2h0KCksIHRleHRCb3hEYXRhTWFwLCB2ZXJ0aWNhbFBvc2l0aW9uQ2FjaGUpKTsKIAogICAg
IC8vIE5vdyBtYWtlIHN1cmUgd2UgcGxhY2UgcmVwbGFjZWQgcmVuZGVyIG9iamVjdHMgY29ycmVj
dGx5LgotICAgIGZvciAoQmlkaVJ1biogciA9IGZpcnN0UnVuOyByOyByID0gci0+bmV4dCgpKSB7
Ci0gICAgICAgIEFTU0VSVChyLT5ib3goKSk7Ci0gICAgICAgIGlmICghci0+Ym94KCkpCisgICAg
Zm9yIChCaWRpUnVuKiBydW4gPSBmaXJzdFJ1bjsgcnVuOyBydW4gPSBydW4tPm5leHQoKSkgewor
ICAgICAgICBBU1NFUlQocnVuLT5ib3goKSk7CisgICAgICAgIGlmICghcnVuLT5ib3goKSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOyAvLyBTa2lwIHJ1bnMgd2l0aCBubyBsaW5lIGJveGVzLgogCi0g
ICAgICAgIElubGluZUJveCYgYm94ID0gKnItPmJveCgpOworICAgICAgICBJbmxpbmVCb3gmIGJv
eCA9ICpydW4tPmJveCgpOwogCiAgICAgICAgIC8vIEFsaWduIHBvc2l0aW9uZWQgYm94ZXMgd2l0
aCB0aGUgdG9wIG9mIHRoZSBsaW5lIGJveC4gIFRoaXMgaXMKICAgICAgICAgLy8gYSByZWFzb25h
YmxlIGFwcHJveGltYXRpb24gb2YgYW4gYXBwcm9wcmlhdGUgeSBwb3NpdGlvbi4KLSAgICAgICAg
aWYgKHItPnJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCisgICAgICAgIGlmIChy
dW4tPnJlbmRlcmVyKCkuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICBib3gu
c2V0TG9naWNhbFRvcChsb2dpY2FsSGVpZ2h0KCkpOwogCiAgICAgICAgIC8vIFBvc2l0aW9uIGlz
IHVzZWQgdG8gcHJvcGVybHkgcG9zaXRpb24gYm90aCByZXBsYWNlZCBlbGVtZW50cyBhbmQKICAg
ICAgICAgLy8gdG8gdXBkYXRlIHRoZSBzdGF0aWMgbm9ybWFsIGZsb3cgeC95IG9mIHBvc2l0aW9u
ZWQgZWxlbWVudHMuCi0gICAgICAgIGlmIChpczxSZW5kZXJUZXh0PihyLT5yZW5kZXJlcigpKSkK
LSAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlclRleHQ+KHItPnJlbmRlcmVyKCkpLnBvc2l0aW9u
TGluZUJveCh0b0lubGluZVRleHRCb3goYm94KSk7Ci0gICAgICAgIGVsc2UgaWYgKGlzPFJlbmRl
ckJveD4oci0+cmVuZGVyZXIoKSkpCi0gICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCb3g+KHIt
PnJlbmRlcmVyKCkpLnBvc2l0aW9uTGluZUJveCh0b0lubGluZUVsZW1lbnRCb3goYm94KSk7Ci0g
ICAgICAgIGVsc2UgaWYgKGlzPFJlbmRlckxpbmVCcmVhaz4oci0+cmVuZGVyZXIoKSkpCi0gICAg
ICAgICAgICBkb3duY2FzdDxSZW5kZXJMaW5lQnJlYWs+KHItPnJlbmRlcmVyKCkpLnJlcGxhY2VJ
bmxpbmVCb3hXcmFwcGVyKHRvSW5saW5lRWxlbWVudEJveChib3gpKTsKKyAgICAgICAgaWYgKGlz
PFJlbmRlclRleHQ+KHJ1bi0+cmVuZGVyZXIoKSkpCisgICAgICAgICAgICBkb3duY2FzdDxSZW5k
ZXJUZXh0PihydW4tPnJlbmRlcmVyKCkpLnBvc2l0aW9uTGluZUJveChkb3duY2FzdDxJbmxpbmVU
ZXh0Qm94Pihib3gpKTsKKyAgICAgICAgZWxzZSBpZiAoaXM8UmVuZGVyQm94PihydW4tPnJlbmRl
cmVyKCkpKQorICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQm94PihydW4tPnJlbmRlcmVyKCkp
LnBvc2l0aW9uTGluZUJveChkb3duY2FzdDxJbmxpbmVFbGVtZW50Qm94Pihib3gpKTsKKyAgICAg
ICAgZWxzZSBpZiAoaXM8UmVuZGVyTGluZUJyZWFrPihydW4tPnJlbmRlcmVyKCkpKQorICAgICAg
ICAgICAgZG93bmNhc3Q8UmVuZGVyTGluZUJyZWFrPihydW4tPnJlbmRlcmVyKCkpLnJlcGxhY2VJ
bmxpbmVCb3hXcmFwcGVyKGRvd25jYXN0PElubGluZUVsZW1lbnRCb3g+KGJveCkpOwogICAgIH0K
ICAgICAvLyBQb3NpdGlvbmVkIG9iamVjdHMgYW5kIHplcm8tbGVuZ3RoIHRleHQgbm9kZXMgZGVz
dHJveSB0aGVpciBib3hlcyBpbgogICAgIC8vIHBvc2l0aW9uKCksIHdoaWNoIHVubmVjZXNzYXJp
bHkgZGlydGllcyB0aGUgbGluZS4KQEAgLTk4NCw3ICs5ODQsNyBAQCBSb290SW5saW5lQm94KiBS
ZW5kZXJCbG9ja0Zsb3c6OmNyZWF0ZUxpbmVCb3hlc0Zyb21CaWRpUnVucyh1bnNpZ25lZCBiaWRp
TGV2ZWwsCiAgICAgbGluZUJveC0+c2V0QmlkaUxldmVsKGJpZGlMZXZlbCk7CiAgICAgbGluZUJv
eC0+c2V0RW5kc1dpdGhCcmVhayhsaW5lSW5mby5wcmV2aW91c0xpbmVCcm9rZUNsZWFubHkoKSk7
CiAgICAgCi0gICAgYm9vbCBpc1NWR1Jvb3RJbmxpbmVCb3ggPSBsaW5lQm94LT5pc1NWR1Jvb3RJ
bmxpbmVCb3goKTsKKyAgICBib29sIGlzU1ZHUm9vdElubGluZUJveCA9IGlzPFNWR1Jvb3RJbmxp
bmVCb3g+KCpsaW5lQm94KTsKICAgICAKICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250
c01hcCB0ZXh0Qm94RGF0YU1hcDsKICAgICAKQEAgLTEwMDIsNyArMTAwMiw3IEBAIFJvb3RJbmxp
bmVCb3gqIFJlbmRlckJsb2NrRmxvdzo6Y3JlYXRlTGluZUJveGVzRnJvbUJpZGlSdW5zKHVuc2ln
bmVkIGJpZGlMZXZlbCwKICAgICAvLyB0ZXh0IHNlbGVjdGlvbiBpbiBSVEwgYm94ZXMgd291bGQg
bm90IHdvcmsgYXMgZXhwZWN0ZWQuCiAgICAgaWYgKGlzU1ZHUm9vdElubGluZUJveCkgewogICAg
ICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpc1NWR1RleHQoKSk7Ci0gICAg
ICAgIHRvU1ZHUm9vdElubGluZUJveChsaW5lQm94KS0+Y29tcHV0ZVBlckNoYXJhY3RlckxheW91
dEluZm9ybWF0aW9uKCk7CisgICAgICAgIGRvd25jYXN0PFNWR1Jvb3RJbmxpbmVCb3g+KCpsaW5l
Qm94KS5jb21wdXRlUGVyQ2hhcmFjdGVyTGF5b3V0SW5mb3JtYXRpb24oKTsKICAgICB9CiAgICAg
CiAgICAgLy8gQ29tcHV0ZSBvdXIgb3ZlcmZsb3cgbm93LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHQuY3BwCmluZGV4IGQwMjU1OWVhYzBlYzA0YzJjZmU3MmU3ZmFjM2I1ZmMyMWRh
MDUyMDAuLmFiNDJkNTRhNDBlMjNkYmYyYjgyYTZhMTQ1YmVkYmQ1ODE3ZTk2YjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKQEAgLTQzMSw5ICs0MzEsOSBAQCBMYXlv
dXRSZWN0IFJlbmRlclRleHQ6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCogaW5saW5lQm94LCBp
bnQgY2FyZXRPZmZzZXQsIExheQogICAgIGlmICghaW5saW5lQm94KQogICAgICAgICByZXR1cm4g
TGF5b3V0UmVjdCgpOwogCi0gICAgSW5saW5lVGV4dEJveCogYm94ID0gdG9JbmxpbmVUZXh0Qm94
KGlubGluZUJveCk7Ci0gICAgZmxvYXQgbGVmdCA9IGJveC0+cG9zaXRpb25Gb3JPZmZzZXQoY2Fy
ZXRPZmZzZXQpOwotICAgIHJldHVybiBib3gtPnJvb3QoKS5jb21wdXRlQ2FyZXRSZWN0KGxlZnQs
IGNhcmV0V2lkdGgsIGV4dHJhV2lkdGhUb0VuZE9mTGluZSk7CisgICAgYXV0byYgYm94ID0gZG93
bmNhc3Q8SW5saW5lVGV4dEJveD4oKmlubGluZUJveCk7CisgICAgZmxvYXQgbGVmdCA9IGJveC5w
b3NpdGlvbkZvck9mZnNldChjYXJldE9mZnNldCk7CisgICAgcmV0dXJuIGJveC5yb290KCkuY29t
cHV0ZUNhcmV0UmVjdChsZWZ0LCBjYXJldFdpZHRoLCBleHRyYVdpZHRoVG9FbmRPZkxpbmUpOwog
fQogCiBBTFdBWVNfSU5MSU5FIGZsb2F0IFJlbmRlclRleHQ6OndpZHRoRnJvbUNhY2hlKGNvbnN0
IEZvbnQmIGYsIGludCBzdGFydCwgaW50IGxlbiwgZmxvYXQgeFBvcywgSGFzaFNldDxjb25zdCBT
aW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJm
bG93LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUm9vdElubGluZUJveC5jcHAKaW5kZXggOTMxMDAxZTA0YjViYTlmY2QxZTM2ODQ1YjM3
MmExZTQzZmEwOTI0Ni4uMWNlMjQ4NTRjMTIyODVkNjRhYjAwMzc5Y2U1ZWQ4Yjk0MWRiNDBkMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcApAQCAtOTUsMTIg
Kzk1LDkgQEAgdm9pZCBSb290SW5saW5lQm94OjpjbGVhclRydW5jYXRpb24oKQogYm9vbCBSb290
SW5saW5lQm94Ojppc0h5cGhlbmF0ZWQoKSBjb25zdAogewogICAgIGZvciAoSW5saW5lQm94KiBi
b3ggPSBmaXJzdExlYWZDaGlsZCgpOyBib3g7IGJveCA9IGJveC0+bmV4dExlYWZDaGlsZCgpKSB7
Ci0gICAgICAgIGlmIChib3gtPmlzSW5saW5lVGV4dEJveCgpKSB7Ci0gICAgICAgICAgICBpZiAo
dG9JbmxpbmVUZXh0Qm94KGJveCktPmhhc0h5cGhlbigpKQotICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9CisgICAgICAgIGlmIChpczxJbmxpbmVUZXh0Qm94PigqYm94KSAm
JiBkb3duY2FzdDxJbmxpbmVUZXh0Qm94PigqYm94KS5oYXNIeXBoZW4oKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KLQogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtODMwLDEw
ICs4MjcsMTAgQEAgdm9pZCBSb290SW5saW5lQm94Ojphc2NlbnRBbmREZXNjZW50Rm9yQm94KElu
bGluZUJveCYgYm94LCBHbHlwaE92ZXJmbG93QW5kRmFsbGIKIAogICAgIFZlY3Rvcjxjb25zdCBT
aW1wbGVGb250RGF0YSo+KiB1c2VkRm9udHMgPSBudWxscHRyOwogICAgIEdseXBoT3ZlcmZsb3cq
IGdseXBoT3ZlcmZsb3cgPSBudWxscHRyOwotICAgIGlmIChib3guaXNJbmxpbmVUZXh0Qm94KCkp
IHsKLSAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0
ID0gdGV4dEJveERhdGFNYXAuZmluZCh0b0lubGluZVRleHRCb3goJmJveCkpOwotICAgICAgICB1
c2VkRm9udHMgPSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnZhbHVlLmZp
cnN0OwotICAgICAgICBnbHlwaE92ZXJmbG93ID0gaXQgPT0gdGV4dEJveERhdGFNYXAuZW5kKCkg
PyAwIDogJml0LT52YWx1ZS5zZWNvbmQ7CisgICAgaWYgKGlzPElubGluZVRleHRCb3g+KGJveCkp
IHsKKyAgICAgICAgR2x5cGhPdmVyZmxvd0FuZEZhbGxiYWNrRm9udHNNYXA6Oml0ZXJhdG9yIGl0
ID0gdGV4dEJveERhdGFNYXAuZmluZCgmZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oYm94KSk7Cisg
ICAgICAgIHVzZWRGb250cyA9IGl0ID09IHRleHRCb3hEYXRhTWFwLmVuZCgpID8gbnVsbHB0ciA6
ICZpdC0+dmFsdWUuZmlyc3Q7CisgICAgICAgIGdseXBoT3ZlcmZsb3cgPSBpdCA9PSB0ZXh0Qm94
RGF0YU1hcC5lbmQoKSA/IG51bGxwdHIgOiAmaXQtPnZhbHVlLnNlY29uZDsKICAgICB9CiAgICAg
ICAgIAogICAgIGJvb2wgaW5jbHVkZUxlYWRpbmcgPSBpbmNsdWRlTGVhZGluZ0ZvckJveChib3gp
OwpAQCAtMTAxNyw3ICsxMDE0LDcgQEAgYm9vbCBSb290SW5saW5lQm94OjppbmNsdWRlRm9udEZv
ckJveChJbmxpbmVCb3gmIGJveCkgY29uc3QKICAgICBpZiAoYm94LnJlbmRlcmVyKCkuaXNSZXBs
YWNlZCgpIHx8IChib3gucmVuZGVyZXIoKS5pc1RleHRPckxpbmVCcmVhaygpICYmICFib3guYmVo
YXZlc0xpa2VUZXh0KCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKCFi
b3guYmVoYXZlc0xpa2VUZXh0KCkgJiYgYm94LmlzSW5saW5lRmxvd0JveCgpICYmICF0b0lubGlu
ZUZsb3dCb3goJmJveCktPmhhc1RleHRDaGlsZHJlbigpKQorICAgIGlmICghYm94LmJlaGF2ZXNM
aWtlVGV4dCgpICYmIGlzPElubGluZUZsb3dCb3g+KGJveCkgJiYgIWRvd25jYXN0PElubGluZUZs
b3dCb3g+KGJveCkuaGFzVGV4dENoaWxkcmVuKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIC8vIEZvciBub3cgbWFwICJnbHlwaHMiIHRvICJmb250IiBpbiB2ZXJ0aWNhbCB0ZXh0IG1v
ZGUgdW50aWwgdGhlIGJvdW5kcyByZXR1cm5lZCBieSBnbHlwaHMgYXJlbid0IGdhcmJhZ2UuCkBA
IC0xMDMwLDcgKzEwMjcsNyBAQCBib29sIFJvb3RJbmxpbmVCb3g6OmluY2x1ZGVHbHlwaHNGb3JC
b3goSW5saW5lQm94JiBib3gpIGNvbnN0CiAgICAgaWYgKGJveC5yZW5kZXJlcigpLmlzUmVwbGFj
ZWQoKSB8fCAoYm94LnJlbmRlcmVyKCkuaXNUZXh0T3JMaW5lQnJlYWsoKSAmJiAhYm94LmJlaGF2
ZXNMaWtlVGV4dCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGlmICghYm94
LmJlaGF2ZXNMaWtlVGV4dCgpICYmIGJveC5pc0lubGluZUZsb3dCb3goKSAmJiAhdG9JbmxpbmVG
bG93Qm94KCZib3gpLT5oYXNUZXh0Q2hpbGRyZW4oKSkKKyAgICBpZiAoIWJveC5iZWhhdmVzTGlr
ZVRleHQoKSAmJiBpczxJbmxpbmVGbG93Qm94Pihib3gpICYmICFkb3duY2FzdDxJbmxpbmVGbG93
Qm94Pihib3gpLmhhc1RleHRDaGlsZHJlbigpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICAvLyBGSVhNRTogV2UgY2FuJ3QgZml0IHRvIGdseXBocyB5ZXQgZm9yIHZlcnRpY2FsIHRleHQs
IHNpbmNlIHRoZSBib3VuZHMgcmV0dXJuZWQgYXJlIGdhcmJhZ2UuCkBAIC0xMDQzLDcgKzEwNDAs
NyBAQCBib29sIFJvb3RJbmxpbmVCb3g6OmluY2x1ZGVJbml0aWFsTGV0dGVyRm9yQm94KElubGlu
ZUJveCYgYm94KSBjb25zdAogICAgIGlmIChib3gucmVuZGVyZXIoKS5pc1JlcGxhY2VkKCkgfHwg
KGJveC5yZW5kZXJlcigpLmlzVGV4dE9yTGluZUJyZWFrKCkgJiYgIWJveC5iZWhhdmVzTGlrZVRl
eHQoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAoIWJveC5iZWhhdmVz
TGlrZVRleHQoKSAmJiBib3guaXNJbmxpbmVGbG93Qm94KCkgJiYgIXRvSW5saW5lRmxvd0JveCgm
Ym94KS0+aGFzVGV4dENoaWxkcmVuKCkpCisgICAgaWYgKCFib3guYmVoYXZlc0xpa2VUZXh0KCkg
JiYgaXM8SW5saW5lRmxvd0JveD4oYm94KSAmJiAhZG93bmNhc3Q8SW5saW5lRmxvd0JveD4oYm94
KS5oYXNUZXh0Q2hpbGRyZW4oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgTGluZUJv
eENvbnRhaW4gbGluZUJveENvbnRhaW4gPSByZW5kZXJlcigpLnN0eWxlKCkubGluZUJveENvbnRh
aW4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5oCmluZGV4IGQ5N2I1
MzU2OTBiY2E0ZGU4YTJiNGFhZDk1NWJjNjEyZjAyOTI1NWIuLjRhOTU1MzU5MWM0ZDI5ZmFlYjBj
YmI5MjE5OGYzMjk4ZDgxYzZmNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9Sb290SW5saW5lQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxp
bmVCb3guaApAQCAtMjI0LDE4ICsyMjQsMTggQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8VmVjdG9yPFJlbmRlckJveCo+PiBtX2Zsb2F0czsKIH07CiAKLUlOTElORV9CT1hfT0JKRUNU
X1RZUEVfQ0FTVFMoUm9vdElubGluZUJveCwgaXNSb290SW5saW5lQm94KCkpCi0KIGlubGluZSBS
b290SW5saW5lQm94KiBSb290SW5saW5lQm94OjpuZXh0Um9vdEJveCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIHRvUm9vdElubGluZUJveChtX25leHRMaW5lQm94KTsKKyAgICByZXR1cm4gZG93bmNh
c3Q8Um9vdElubGluZUJveD4obV9uZXh0TGluZUJveCk7CiB9CiAKIGlubGluZSBSb290SW5saW5l
Qm94KiBSb290SW5saW5lQm94OjpwcmV2Um9vdEJveCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRv
Um9vdElubGluZUJveChtX3ByZXZMaW5lQm94KTsKKyAgICByZXR1cm4gZG93bmNhc3Q8Um9vdElu
bGluZUJveD4obV9wcmV2TGluZUJveCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19JTkxJTkVfQk9YKFJvb3RJbmxpbmVCb3gsIGlzUm9vdElu
bGluZUJveCgpKQorCiAjZW5kaWYgLy8gUm9vdElubGluZUJveF9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcAppbmRleCA4NTUz
MGI1MzcxY2RmMzdkZTRmNDRkNjFhODc3NGQzNzQ2NDI1ODU1Li5jZGUwNGE0NGZmNTgwNGY5OWI0
ZDk0NWQ3OTUxNDJmNDQzNzJjM2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0lubGluZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lVGV4dC5jcHAKQEAgLTExOCwyMiArMTE4LDIyIEBAIHN0
ZDo6dW5pcXVlX3B0cjxJbmxpbmVUZXh0Qm94PiBSZW5kZXJTVkdJbmxpbmVUZXh0OjpjcmVhdGVU
ZXh0Qm94KCkKIAogTGF5b3V0UmVjdCBSZW5kZXJTVkdJbmxpbmVUZXh0Ojpsb2NhbENhcmV0UmVj
dChJbmxpbmVCb3gqIGJveCwgaW50IGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KikKIHsKLSAgICBp
ZiAoIWJveCB8fCAhYm94LT5pc0lubGluZVRleHRCb3goKSkKKyAgICBpZiAoIWlzPElubGluZVRl
eHRCb3g+KGJveCkpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKLSAgICBJbmxpbmVU
ZXh0Qm94KiB0ZXh0Qm94ID0gdG9JbmxpbmVUZXh0Qm94KGJveCk7Ci0gICAgaWYgKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihjYXJldE9mZnNldCkgPCB0ZXh0Qm94LT5zdGFydCgpIHx8IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihjYXJldE9mZnNldCkgPiB0ZXh0Qm94LT5zdGFydCgpICsgdGV4dEJveC0+
bGVuKCkpCisgICAgYXV0byYgdGV4dEJveCA9IGRvd25jYXN0PElubGluZVRleHRCb3g+KCpib3gp
OworICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2FyZXRPZmZzZXQpIDwgdGV4dEJveC5z
dGFydCgpIHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihjYXJldE9mZnNldCkgPiB0ZXh0Qm94LnN0
YXJ0KCkgKyB0ZXh0Qm94LmxlbigpKQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCiAg
ICAgLy8gVXNlIHRoZSBlZGdlIG9mIHRoZSBzZWxlY3Rpb24gcmVjdCB0byBkZXRlcm1pbmUgdGhl
IGNhcmV0IHJlY3QuCi0gICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjYXJldE9mZnNldCkg
PCB0ZXh0Qm94LT5zdGFydCgpICsgdGV4dEJveC0+bGVuKCkpIHsKLSAgICAgICAgTGF5b3V0UmVj
dCByZWN0ID0gdGV4dEJveC0+bG9jYWxTZWxlY3Rpb25SZWN0KGNhcmV0T2Zmc2V0LCBjYXJldE9m
ZnNldCArIDEpOwotICAgICAgICBMYXlvdXRVbml0IHggPSBib3gtPmlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSA/IHJlY3QueCgpIDogcmVjdC5tYXhYKCk7CisgICAgaWYgKHN0YXRpY19jYXN0PHVu
c2lnbmVkPihjYXJldE9mZnNldCkgPCB0ZXh0Qm94LnN0YXJ0KCkgKyB0ZXh0Qm94LmxlbigpKSB7
CisgICAgICAgIExheW91dFJlY3QgcmVjdCA9IHRleHRCb3gubG9jYWxTZWxlY3Rpb25SZWN0KGNh
cmV0T2Zmc2V0LCBjYXJldE9mZnNldCArIDEpOworICAgICAgICBMYXlvdXRVbml0IHggPSB0ZXh0
Qm94LmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IHJlY3QueCgpIDogcmVjdC5tYXhYKCk7CiAg
ICAgICAgIHJldHVybiBMYXlvdXRSZWN0KHgsIHJlY3QueSgpLCBjYXJldFdpZHRoLCByZWN0Lmhl
aWdodCgpKTsKICAgICB9CiAKLSAgICBMYXlvdXRSZWN0IHJlY3QgPSB0ZXh0Qm94LT5sb2NhbFNl
bGVjdGlvblJlY3QoY2FyZXRPZmZzZXQgLSAxLCBjYXJldE9mZnNldCk7Ci0gICAgTGF5b3V0VW5p
dCB4ID0gYm94LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyByZWN0Lm1heFgoKSA6IHJlY3Qu
eCgpOworICAgIExheW91dFJlY3QgcmVjdCA9IHRleHRCb3gubG9jYWxTZWxlY3Rpb25SZWN0KGNh
cmV0T2Zmc2V0IC0gMSwgY2FyZXRPZmZzZXQpOworICAgIExheW91dFVuaXQgeCA9IHRleHRCb3gu
aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gcmVjdC5tYXhYKCkgOiByZWN0LngoKTsKICAgICBy
ZXR1cm4gTGF5b3V0UmVjdCh4LCByZWN0LnkoKSwgY2FyZXRXaWR0aCwgcmVjdC5oZWlnaHQoKSk7
CiB9CiAKQEAgLTE4MiwxNiArMTgyLDE2IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJTVkdJbmxp
bmVUZXh0Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwKIAogICAg
IGZsb2F0IGNsb3Nlc3REaXN0YW5jZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgo
KTsKICAgICBmbG9hdCBjbG9zZXN0RGlzdGFuY2VQb3NpdGlvbiA9IDA7Ci0gICAgY29uc3QgU1ZH
VGV4dEZyYWdtZW50KiBjbG9zZXN0RGlzdGFuY2VGcmFnbWVudCA9IDA7Ci0gICAgU1ZHSW5saW5l
VGV4dEJveCogY2xvc2VzdERpc3RhbmNlQm94ID0gMDsKKyAgICBjb25zdCBTVkdUZXh0RnJhZ21l
bnQqIGNsb3Nlc3REaXN0YW5jZUZyYWdtZW50ID0gbnVsbHB0cjsKKyAgICBTVkdJbmxpbmVUZXh0
Qm94KiBjbG9zZXN0RGlzdGFuY2VCb3ggPSBudWxscHRyOwogCiAgICAgQWZmaW5lVHJhbnNmb3Jt
IGZyYWdtZW50VHJhbnNmb3JtOwogICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94ID0gZmlyc3RU
ZXh0Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7Ci0gICAgICAgIGlmICgh
Ym94LT5pc1NWR0lubGluZVRleHRCb3goKSkKKyAgICAgICAgaWYgKCFpczxTVkdJbmxpbmVUZXh0
Qm94PigqYm94KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFNWR0lubGluZVRl
eHRCb3gqIHRleHRCb3ggPSB0b1NWR0lubGluZVRleHRCb3goYm94KTsKLSAgICAgICAgVmVjdG9y
PFNWR1RleHRGcmFnbWVudD4mIGZyYWdtZW50cyA9IHRleHRCb3gtPnRleHRGcmFnbWVudHMoKTsK
KyAgICAgICAgYXV0byYgdGV4dEJveCA9IGRvd25jYXN0PFNWR0lubGluZVRleHRCb3g+KCpib3gp
OworICAgICAgICBWZWN0b3I8U1ZHVGV4dEZyYWdtZW50PiYgZnJhZ21lbnRzID0gdGV4dEJveC50
ZXh0RnJhZ21lbnRzKCk7CiAKICAgICAgICAgdW5zaWduZWQgdGV4dEZyYWdtZW50c1NpemUgPSBm
cmFnbWVudHMuc2l6ZSgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGV4dEZy
YWdtZW50c1NpemU7ICsraSkgewpAQCAtMjA2LDcgKzIwNiw3IEBAIFZpc2libGVQb3NpdGlvbiBS
ZW5kZXJTVkdJbmxpbmVUZXh0Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBw
b2ludCwKIAogICAgICAgICAgICAgaWYgKGRpc3RhbmNlIDwgY2xvc2VzdERpc3RhbmNlKSB7CiAg
ICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlID0gZGlzdGFuY2U7Ci0gICAgICAgICAgICAg
ICAgY2xvc2VzdERpc3RhbmNlQm94ID0gdGV4dEJveDsKKyAgICAgICAgICAgICAgICBjbG9zZXN0
RGlzdGFuY2VCb3ggPSAmdGV4dEJveDsKICAgICAgICAgICAgICAgICBjbG9zZXN0RGlzdGFuY2VG
cmFnbWVudCA9ICZmcmFnbWVudDsKICAgICAgICAgICAgICAgICBjbG9zZXN0RGlzdGFuY2VQb3Np
dGlvbiA9IGZyYWdtZW50UmVjdC54KCk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmNwcAppbmRleCA1MTBkMTAwOTgwMzk4MWE2
YzM0MGEzNmQ1MzQ0NzBhNjM0NTQ1MTIxLi5mZTAwOWEyZTBmM2VhNDJjYzIxOTRmNzI1OTJkNWI5
NTVmMGQ0OTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1RleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
VGV4dC5jcHAKQEAgLTQ3MiwxMSArNDcyLDEwIEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJTVkdU
ZXh0Ojpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGVuCiAg
ICAgaWYgKCFyb290Qm94KQogICAgICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKDAs
IERPV05TVFJFQU0pOwogCi0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04ocm9v
dEJveC0+aXNTVkdSb290SW5saW5lQm94KCkpOwogICAgIEFTU0VSVCghcm9vdEJveC0+bmV4dFJv
b3RCb3goKSk7CiAgICAgQVNTRVJUKGNoaWxkcmVuSW5saW5lKCkpOwogCi0gICAgSW5saW5lQm94
KiBjbG9zZXN0Qm94ID0gdG9TVkdSb290SW5saW5lQm94KHJvb3RCb3gpLT5jbG9zZXN0TGVhZkNo
aWxkRm9yUG9zaXRpb24ocG9pbnRJbkNvbnRlbnRzKTsKKyAgICBJbmxpbmVCb3gqIGNsb3Nlc3RC
b3ggPSBkb3duY2FzdDxTVkdSb290SW5saW5lQm94Pigqcm9vdEJveCkuY2xvc2VzdExlYWZDaGls
ZEZvclBvc2l0aW9uKHBvaW50SW5Db250ZW50cyk7CiAgICAgaWYgKCFjbG9zZXN0Qm94KQogICAg
ICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKDAsIERPV05TVFJFQU0pOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94LmNwcAppbmRl
eCAxN2Q0MWJkOGY0YmExODRhZDFmZjViNzI3YTE0MDg3NzEwZjRjNjEwLi5mMmM5ODg4YTFhM2I0
ODA0MDZlYTE3OGE0Yzk3NzkxZTY4NWUzZjNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHSW5saW5lRmxvd0JveC5jcHAKQEAgLTM4LDEwICszOCwxMCBAQCB2b2lk
IFNWR0lubGluZUZsb3dCb3g6OnBhaW50U2VsZWN0aW9uQmFja2dyb3VuZChQYWludEluZm8mIHBh
aW50SW5mbykKIAogICAgIFBhaW50SW5mbyBjaGlsZFBhaW50SW5mbyhwYWludEluZm8pOwogICAg
IGZvciAoSW5saW5lQm94KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPm5leHRPbkxpbmUoKSkgewotICAgICAgICBpZiAoY2hpbGQtPmlzU1ZHSW5saW5lVGV4dEJv
eCgpKQotICAgICAgICAgICAgdG9TVkdJbmxpbmVUZXh0Qm94KGNoaWxkKS0+cGFpbnRTZWxlY3Rp
b25CYWNrZ3JvdW5kKGNoaWxkUGFpbnRJbmZvKTsKLSAgICAgICAgZWxzZSBpZiAoY2hpbGQtPmlz
U1ZHSW5saW5lRmxvd0JveCgpKQotICAgICAgICAgICAgdG9TVkdJbmxpbmVGbG93Qm94KGNoaWxk
KS0+cGFpbnRTZWxlY3Rpb25CYWNrZ3JvdW5kKGNoaWxkUGFpbnRJbmZvKTsKKyAgICAgICAgaWYg
KGlzPFNWR0lubGluZVRleHRCb3g+KCpjaGlsZCkpCisgICAgICAgICAgICBkb3duY2FzdDxTVkdJ
bmxpbmVUZXh0Qm94PigqY2hpbGQpLnBhaW50U2VsZWN0aW9uQmFja2dyb3VuZChjaGlsZFBhaW50
SW5mbyk7CisgICAgICAgIGVsc2UgaWYgKGlzPFNWR0lubGluZUZsb3dCb3g+KCpjaGlsZCkpCisg
ICAgICAgICAgICBkb3duY2FzdDxTVkdJbmxpbmVGbG93Qm94PigqY2hpbGQpLnBhaW50U2VsZWN0
aW9uQmFja2dyb3VuZChjaGlsZFBhaW50SW5mbyk7CiAgICAgfQogfQogCkBAIC01Myw4ICs1Myw4
IEBAIHZvaWQgU1ZHSW5saW5lRmxvd0JveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IExheW91dFBvaW50JiBwYWludE9mZnNlCiAgICAgU1ZHUmVuZGVyaW5nQ29udGV4dCByZW5k
ZXJpbmdDb250ZXh0KHJlbmRlcmVyKCksIHBhaW50SW5mbywgU1ZHUmVuZGVyaW5nQ29udGV4dDo6
U2F2ZUdyYXBoaWNzQ29udGV4dCk7CiAgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQuaXNSZW5kZXJp
bmdQcmVwYXJlZCgpKSB7CiAgICAgICAgIGZvciAoSW5saW5lQm94KiBjaGlsZCA9IGZpcnN0Q2hp
bGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRPbkxpbmUoKSkgewotICAgICAgICAgICAg
aWYgKGNoaWxkLT5pc1NWR0lubGluZVRleHRCb3goKSkKLSAgICAgICAgICAgICAgICBjb21wdXRl
VGV4dE1hdGNoTWFya2VyUmVjdEZvclJlbmRlcmVyKCYodG9TVkdJbmxpbmVUZXh0Qm94KGNoaWxk
KS0+cmVuZGVyZXIoKSkpOworICAgICAgICAgICAgaWYgKGlzPFNWR0lubGluZVRleHRCb3g+KCpj
aGlsZCkpCisgICAgICAgICAgICAgICAgY29tcHV0ZVRleHRNYXRjaE1hcmtlclJlY3RGb3JSZW5k
ZXJlcigmZG93bmNhc3Q8U1ZHSW5saW5lVGV4dEJveD4oKmNoaWxkKS5yZW5kZXJlcigpKTsKIAog
ICAgICAgICAgICAgY2hpbGQtPnBhaW50KHBhaW50SW5mbywgcGFpbnRPZmZzZXQsIDAsIDApOwog
ICAgICAgICB9CkBAIC05NSwxMyArOTUsMTMgQEAgdm9pZCBTVkdJbmxpbmVGbG93Qm94Ojpjb21w
dXRlVGV4dE1hdGNoTWFya2VyUmVjdEZvclJlbmRlcmVyKFJlbmRlclNWR0lubGluZVRleHQKIAog
ICAgICAgICBGbG9hdFJlY3QgbWFya2VyUmVjdDsKICAgICAgICAgZm9yIChJbmxpbmVUZXh0Qm94
KiBib3ggPSB0ZXh0UmVuZGVyZXItPmZpcnN0VGV4dEJveCgpOyBib3g7IGJveCA9IGJveC0+bmV4
dFRleHRCb3goKSkgewotICAgICAgICAgICAgaWYgKCFib3gtPmlzU1ZHSW5saW5lVGV4dEJveCgp
KQorICAgICAgICAgICAgaWYgKCFpczxTVkdJbmxpbmVUZXh0Qm94PigqYm94KSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgU1ZHSW5saW5lVGV4dEJveCogdGV4dEJv
eCA9IHRvU1ZHSW5saW5lVGV4dEJveChib3gpOworICAgICAgICAgICAgYXV0byYgdGV4dEJveCA9
IGRvd25jYXN0PFNWR0lubGluZVRleHRCb3g+KCpib3gpOwogCi0gICAgICAgICAgICBpbnQgbWFy
a2VyU3RhcnRQb3NpdGlvbiA9IHN0ZDo6bWF4PGludD4obWFya2VyLT5zdGFydE9mZnNldCgpIC0g
dGV4dEJveC0+c3RhcnQoKSwgMCk7Ci0gICAgICAgICAgICBpbnQgbWFya2VyRW5kUG9zaXRpb24g
PSBzdGQ6Om1pbjxpbnQ+KG1hcmtlci0+ZW5kT2Zmc2V0KCkgLSB0ZXh0Qm94LT5zdGFydCgpLCB0
ZXh0Qm94LT5sZW4oKSk7CisgICAgICAgICAgICBpbnQgbWFya2VyU3RhcnRQb3NpdGlvbiA9IHN0
ZDo6bWF4PGludD4obWFya2VyLT5zdGFydE9mZnNldCgpIC0gdGV4dEJveC5zdGFydCgpLCAwKTsK
KyAgICAgICAgICAgIGludCBtYXJrZXJFbmRQb3NpdGlvbiA9IHN0ZDo6bWluPGludD4obWFya2Vy
LT5lbmRPZmZzZXQoKSAtIHRleHRCb3guc3RhcnQoKSwgdGV4dEJveC5sZW4oKSk7CiAKICAgICAg
ICAgICAgIGlmIChtYXJrZXJTdGFydFBvc2l0aW9uID49IG1hcmtlckVuZFBvc2l0aW9uKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTA5LDE3ICsxMDksMTcgQEAgdm9pZCBTVkdJbmxp
bmVGbG93Qm94Ojpjb21wdXRlVGV4dE1hdGNoTWFya2VyUmVjdEZvclJlbmRlcmVyKFJlbmRlclNW
R0lubGluZVRleHQKICAgICAgICAgICAgIGludCBmcmFnbWVudFN0YXJ0UG9zaXRpb24gPSAwOwog
ICAgICAgICAgICAgaW50IGZyYWdtZW50RW5kUG9zaXRpb24gPSAwOwogCi0gICAgICAgICAgICBj
b25zdCBWZWN0b3I8U1ZHVGV4dEZyYWdtZW50PiYgZnJhZ21lbnRzID0gdGV4dEJveC0+dGV4dEZy
YWdtZW50cygpOworICAgICAgICAgICAgY29uc3QgVmVjdG9yPFNWR1RleHRGcmFnbWVudD4mIGZy
YWdtZW50cyA9IHRleHRCb3gudGV4dEZyYWdtZW50cygpOwogICAgICAgICAgICAgdW5zaWduZWQg
dGV4dEZyYWdtZW50c1NpemUgPSBmcmFnbWVudHMuc2l6ZSgpOwogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRleHRGcmFnbWVudHNTaXplOyArK2kpIHsKICAgICAgICAgICAg
ICAgICBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50ID0gZnJhZ21lbnRzLmF0KGkpOwog
CiAgICAgICAgICAgICAgICAgZnJhZ21lbnRTdGFydFBvc2l0aW9uID0gbWFya2VyU3RhcnRQb3Np
dGlvbjsKICAgICAgICAgICAgICAgICBmcmFnbWVudEVuZFBvc2l0aW9uID0gbWFya2VyRW5kUG9z
aXRpb247Ci0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0Qm94LT5tYXBTdGFydEVuZFBvc2l0aW9u
c0ludG9GcmFnbWVudENvb3JkaW5hdGVzKGZyYWdtZW50LCBmcmFnbWVudFN0YXJ0UG9zaXRpb24s
IGZyYWdtZW50RW5kUG9zaXRpb24pKQorICAgICAgICAgICAgICAgIGlmICghdGV4dEJveC5tYXBT
dGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKGZyYWdtZW50LCBmcmFnbWVu
dFN0YXJ0UG9zaXRpb24sIGZyYWdtZW50RW5kUG9zaXRpb24pKQogICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBmcmFnbWVudFJlY3QgPSB0
ZXh0Qm94LT5zZWxlY3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KGZyYWdtZW50LCBmcmFnbWVudFN0
YXJ0UG9zaXRpb24sIGZyYWdtZW50RW5kUG9zaXRpb24sICZzdHlsZSk7CisgICAgICAgICAgICAg
ICAgRmxvYXRSZWN0IGZyYWdtZW50UmVjdCA9IHRleHRCb3guc2VsZWN0aW9uUmVjdEZvclRleHRG
cmFnbWVudChmcmFnbWVudCwgZnJhZ21lbnRTdGFydFBvc2l0aW9uLCBmcmFnbWVudEVuZFBvc2l0
aW9uLCAmc3R5bGUpOwogICAgICAgICAgICAgICAgIGZyYWdtZW50LmJ1aWxkRnJhZ21lbnRUcmFu
c2Zvcm0oZnJhZ21lbnRUcmFuc2Zvcm0pOwogICAgICAgICAgICAgICAgIGlmICghZnJhZ21lbnRU
cmFuc2Zvcm0uaXNJZGVudGl0eSgpKQogICAgICAgICAgICAgICAgICAgICBmcmFnbWVudFJlY3Qg
PSBmcmFnbWVudFRyYW5zZm9ybS5tYXBSZWN0KGZyYWdtZW50UmVjdCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lRmxvd0JveC5oCmluZGV4IGQwZDhlNzRhNGQ0
Y2NhYzY2N2U4YzI1MWE3MzE1YWNkNTVhODIwMmQuLjBkY2NjOGYyMDdlMzJhYzQ3Njk0ZTdhOGUx
MTUxNmM1N2UwZTEzNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHSW5saW5lRmxvd0JveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
SW5saW5lRmxvd0JveC5oCkBAIC01Miw4ICs1Miw4IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbV9s
b2dpY2FsSGVpZ2h0OwogfTsKIAotSU5MSU5FX0JPWF9PQkpFQ1RfVFlQRV9DQVNUUyhTVkdJbmxp
bmVGbG93Qm94LCBpc1NWR0lubGluZUZsb3dCb3goKSkKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0lOTElORV9CT1goU1ZHSW5saW5lRmxvd0JveCwg
aXNTVkdJbmxpbmVGbG93Qm94KCkpCisKICNlbmRpZiAvLyBTVkdJbmxpbmVGbG93Qm94X2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgKaW5kZXgg
ZjA4OTRmMGI1NTNhOWRiMGQ2YmFjNWExYjg0Y2YzNGFlYzdmMTU5NS4uMzAxZjk0ZGE0MWI2YTFl
Y2QxODdmNDYzNDI5MTE2NDg1ZDhhY2ViNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgKQEAgLTkyLDggKzkyLDggQEAgcHJpdmF0ZToKICAg
ICBWZWN0b3I8U1ZHVGV4dEZyYWdtZW50PiBtX3RleHRGcmFnbWVudHM7CiB9OwogCi1JTkxJTkVf
Qk9YX09CSkVDVF9UWVBFX0NBU1RTKFNWR0lubGluZVRleHRCb3gsIGlzU1ZHSW5saW5lVGV4dEJv
eCgpKQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
SU5MSU5FX0JPWChTVkdJbmxpbmVUZXh0Qm94LCBpc1NWR0lubGluZVRleHRCb3goKSkKKwogI2Vu
ZGlmIC8vIFNWR0lubGluZVRleHRCb3hfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJUcmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggZjI1ZTM0OWI5MWE5Y2Q5NGM2
OGYxYjA4ZmRjNDYxMmM2MmYwZDYxNi4uYjA2YTg4OTQzMzk5ZmE5ZGFhMjBlZjM4MmRhMTQ0NDY5
Yjc2ZTZmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5k
ZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlclRyZWVBc1RleHQuY3BwCkBAIC0zNjQsNyArMzY0LDcgQEAgc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlclNWR1Jvb3QmIHJvb3QpCiAK
IHN0YXRpYyB2b2lkIHdyaXRlUmVuZGVyU1ZHVGV4dEJveChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
UmVuZGVyU1ZHVGV4dCYgdGV4dCkKIHsKLSAgICBTVkdSb290SW5saW5lQm94KiBib3ggPSB0b1NW
R1Jvb3RJbmxpbmVCb3godGV4dC5maXJzdFJvb3RCb3goKSk7CisgICAgYXV0byogYm94ID0gZG93
bmNhc3Q8U1ZHUm9vdElubGluZUJveD4odGV4dC5maXJzdFJvb3RCb3goKSk7CiAgICAgaWYgKCFi
b3gpCiAgICAgICAgIHJldHVybjsKIApAQCAtNDM0LDEwICs0MzQsMTAgQEAgc3RhdGljIGlubGlu
ZSB2b2lkIHdyaXRlU1ZHSW5saW5lVGV4dEJveChUZXh0U3RyZWFtJiB0cywgU1ZHSW5saW5lVGV4
dEJveCogdGV4dEIKIHN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZVNWR0lubGluZVRleHRCb3hlcyhU
ZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyVGV4dCYgdGV4dCwgaW50IGluZGVudCkKIHsKICAg
ICBmb3IgKElubGluZVRleHRCb3gqIGJveCA9IHRleHQuZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94
ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7Ci0gICAgICAgIGlmICghYm94LT5pc1NWR0lubGluZVRl
eHRCb3goKSkKKyAgICAgICAgaWYgKCFpczxTVkdJbmxpbmVUZXh0Qm94PigqYm94KSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIHdyaXRlU1ZHSW5saW5lVGV4dEJveCh0cywgdG9T
VkdJbmxpbmVUZXh0Qm94KGJveCksIGluZGVudCk7CisgICAgICAgIHdyaXRlU1ZHSW5saW5lVGV4
dEJveCh0cywgZG93bmNhc3Q8U1ZHSW5saW5lVGV4dEJveD4oYm94KSwgaW5kZW50KTsKICAgICB9
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElu
bGluZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVC
b3guY3BwCmluZGV4IGQwZTczZTUyODg4OTQ1ODM0NDgyZDAwMzA2YzAzZmQxMzlmOWNiY2UuLjVi
OTIxZWQwMzY1NDhjZDMyYjIwMjVjZjhkZjMxYTkxNzBjOWNkYWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcApAQCAtNTYsMTggKzU2
LDE4IEBAIHZvaWQgU1ZHUm9vdElubGluZUJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNlCiAgICAgUGFpbnRJbmZvIGNoaWxkUGFpbnRJ
bmZvKHBhaW50SW5mbyk7CiAgICAgaWYgKGhhc1NlbGVjdGlvbikgewogICAgICAgICBmb3IgKElu
bGluZUJveCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0
T25MaW5lKCkpIHsKLSAgICAgICAgICAgIGlmIChjaGlsZC0+aXNTVkdJbmxpbmVUZXh0Qm94KCkp
Ci0gICAgICAgICAgICAgICAgdG9TVkdJbmxpbmVUZXh0Qm94KGNoaWxkKS0+cGFpbnRTZWxlY3Rp
b25CYWNrZ3JvdW5kKGNoaWxkUGFpbnRJbmZvKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxk
LT5pc1NWR0lubGluZUZsb3dCb3goKSkKLSAgICAgICAgICAgICAgICB0b1NWR0lubGluZUZsb3dC
b3goY2hpbGQpLT5wYWludFNlbGVjdGlvbkJhY2tncm91bmQoY2hpbGRQYWludEluZm8pOworICAg
ICAgICAgICAgaWYgKGlzPFNWR0lubGluZVRleHRCb3g+KCpjaGlsZCkpCisgICAgICAgICAgICAg
ICAgZG93bmNhc3Q8U1ZHSW5saW5lVGV4dEJveD4oKmNoaWxkKS5wYWludFNlbGVjdGlvbkJhY2tn
cm91bmQoY2hpbGRQYWludEluZm8pOworICAgICAgICAgICAgZWxzZSBpZiAoaXM8U1ZHSW5saW5l
Rmxvd0JveD4oKmNoaWxkKSkKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxTVkdJbmxpbmVGbG93
Qm94PigqY2hpbGQpLnBhaW50U2VsZWN0aW9uQmFja2dyb3VuZChjaGlsZFBhaW50SW5mbyk7CiAg
ICAgICAgIH0KICAgICB9CiAKICAgICBTVkdSZW5kZXJpbmdDb250ZXh0IHJlbmRlcmluZ0NvbnRl
eHQocmVuZGVyU1ZHVGV4dCgpLCBwYWludEluZm8sIFNWR1JlbmRlcmluZ0NvbnRleHQ6OlNhdmVH
cmFwaGljc0NvbnRleHQpOwogICAgIGlmIChyZW5kZXJpbmdDb250ZXh0LmlzUmVuZGVyaW5nUHJl
cGFyZWQoKSkgewogICAgICAgICBmb3IgKElubGluZUJveCogY2hpbGQgPSBmaXJzdENoaWxkKCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0T25MaW5lKCkpIHsKLSAgICAgICAgICAgIGlmIChj
aGlsZC0+aXNTVkdJbmxpbmVUZXh0Qm94KCkpCi0gICAgICAgICAgICAgICAgU1ZHSW5saW5lRmxv
d0JveDo6Y29tcHV0ZVRleHRNYXRjaE1hcmtlclJlY3RGb3JSZW5kZXJlcigmdG9TVkdJbmxpbmVU
ZXh0Qm94KGNoaWxkKS0+cmVuZGVyZXIoKSk7CisgICAgICAgICAgICBpZiAoaXM8U1ZHSW5saW5l
VGV4dEJveD4oKmNoaWxkKSkKKyAgICAgICAgICAgICAgICBTVkdJbmxpbmVGbG93Qm94Ojpjb21w
dXRlVGV4dE1hdGNoTWFya2VyUmVjdEZvclJlbmRlcmVyKCZkb3duY2FzdDxTVkdJbmxpbmVUZXh0
Qm94PigqY2hpbGQpLnJlbmRlcmVyKCkpOwogCiAgICAgICAgICAgICBjaGlsZC0+cGFpbnQocGFp
bnRJbmZvLCBwYWludE9mZnNldCwgMCwgMCk7CiAgICAgICAgIH0KQEAgLTEwMywzMSArMTAzLDI3
IEBAIHZvaWQgU1ZHUm9vdElubGluZUJveDo6Y29tcHV0ZVBlckNoYXJhY3RlckxheW91dEluZm9y
bWF0aW9uKCkKIHZvaWQgU1ZHUm9vdElubGluZUJveDo6bGF5b3V0Q2hhcmFjdGVyc0luVGV4dEJv
eGVzKElubGluZUZsb3dCb3gqIHN0YXJ0LCBTVkdUZXh0TGF5b3V0RW5naW5lJiBjaGFyYWN0ZXJM
YXlvdXQpCiB7CiAgICAgZm9yIChJbmxpbmVCb3gqIGNoaWxkID0gc3RhcnQtPmZpcnN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRPbkxpbmUoKSkgewotICAgICAgICBpZiAoY2hp
bGQtPmlzU1ZHSW5saW5lVGV4dEJveCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoY2hpbGQtPnJl
bmRlcmVyKCkuaXNTVkdJbmxpbmVUZXh0KCkpOwotCi0gICAgICAgICAgICBTVkdJbmxpbmVUZXh0
Qm94KiB0ZXh0Qm94ID0gdG9TVkdJbmxpbmVUZXh0Qm94KGNoaWxkKTsKLSAgICAgICAgICAgIGNo
YXJhY3RlckxheW91dC5sYXlvdXRJbmxpbmVUZXh0Qm94KHRleHRCb3gpOworICAgICAgICBpZiAo
aXM8U1ZHSW5saW5lVGV4dEJveD4oKmNoaWxkKSkgeworICAgICAgICAgICAgQVNTRVJUKGlzPFJl
bmRlclNWR0lubGluZVRleHQ+KGNoaWxkLT5yZW5kZXJlcigpKSk7CisgICAgICAgICAgICBjaGFy
YWN0ZXJMYXlvdXQubGF5b3V0SW5saW5lVGV4dEJveChkb3duY2FzdDxTVkdJbmxpbmVUZXh0Qm94
PihjaGlsZCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gU2tpcCBnZW5lcmF0
ZWQgY29udGVudC4KICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBjaGlsZC0+cmVuZGVyZXIoKS5u
b2RlKCk7CiAgICAgICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAKLSAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGNoaWxkLT5p
c0lubGluZUZsb3dCb3goKSk7Ci0KLSAgICAgICAgICAgIFNWR0lubGluZUZsb3dCb3gqIGZsb3dC
b3ggPSB0b1NWR0lubGluZUZsb3dCb3goY2hpbGQpOworICAgICAgICAgICAgYXV0byYgZmxvd0Jv
eCA9IGRvd25jYXN0PFNWR0lubGluZUZsb3dCb3g+KCpjaGlsZCk7CiAgICAgICAgICAgICBib29s
IGlzVGV4dFBhdGggPSBub2RlLT5oYXNUYWdOYW1lKFNWR05hbWVzOjp0ZXh0UGF0aFRhZyk7CiAg
ICAgICAgICAgICBpZiAoaXNUZXh0UGF0aCkgewogICAgICAgICAgICAgICAgIC8vIEJ1aWxkIHRl
eHQgY2h1bmtzIGZvciBhbGwgPHRleHRQYXRoPiBjaGlsZHJlbiwgdXNpbmcgdGhlIGxpbmUgbGF5
b3V0IGFsZ29yaXRobS4KICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIG5lZWRlZWQgYXMgdGV4
dC1hbmNob3IgaXMganVzdCBhbiBhZGRpdGlvbmFsIHN0YXJ0T2Zmc2V0IGZvciB0ZXh0IHBhdGhz
LgogICAgICAgICAgICAgICAgIFNWR1RleHRMYXlvdXRFbmdpbmUgbGluZUxheW91dChjaGFyYWN0
ZXJMYXlvdXQubGF5b3V0QXR0cmlidXRlcygpKTsKLSAgICAgICAgICAgICAgICBsYXlvdXRDaGFy
YWN0ZXJzSW5UZXh0Qm94ZXMoZmxvd0JveCwgbGluZUxheW91dCk7CisgICAgICAgICAgICAgICAg
bGF5b3V0Q2hhcmFjdGVyc0luVGV4dEJveGVzKCZmbG93Qm94LCBsaW5lTGF5b3V0KTsKIAogICAg
ICAgICAgICAgICAgIGNoYXJhY3RlckxheW91dC5iZWdpblRleHRQYXRoTGF5b3V0KCZjaGlsZC0+
cmVuZGVyZXIoKSwgbGluZUxheW91dCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGxh
eW91dENoYXJhY3RlcnNJblRleHRCb3hlcyhmbG93Qm94LCBjaGFyYWN0ZXJMYXlvdXQpOworICAg
ICAgICAgICAgbGF5b3V0Q2hhcmFjdGVyc0luVGV4dEJveGVzKCZmbG93Qm94LCBjaGFyYWN0ZXJM
YXlvdXQpOwogCiAgICAgICAgICAgICBpZiAoaXNUZXh0UGF0aCkKICAgICAgICAgICAgICAgICBj
aGFyYWN0ZXJMYXlvdXQuZW5kVGV4dFBhdGhMYXlvdXQoKTsKQEAgLTEzOSwzMCArMTM1LDI4IEBA
IHZvaWQgU1ZHUm9vdElubGluZUJveDo6bGF5b3V0Q2hpbGRCb3hlcyhJbmxpbmVGbG93Qm94KiBz
dGFydCwgRmxvYXRSZWN0KiBjaGlsZFJlCiB7CiAgICAgZm9yIChJbmxpbmVCb3gqIGNoaWxkID0g
c3RhcnQtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRPbkxpbmUoKSkg
ewogICAgICAgICBGbG9hdFJlY3QgYm94UmVjdDsKLSAgICAgICAgaWYgKGNoaWxkLT5pc1NWR0lu
bGluZVRleHRCb3goKSkgewotICAgICAgICAgICAgQVNTRVJUKGNoaWxkLT5yZW5kZXJlcigpLmlz
U1ZHSW5saW5lVGV4dCgpKTsKLQotICAgICAgICAgICAgU1ZHSW5saW5lVGV4dEJveCogdGV4dEJv
eCA9IHRvU1ZHSW5saW5lVGV4dEJveChjaGlsZCk7Ci0gICAgICAgICAgICBib3hSZWN0ID0gdGV4
dEJveC0+Y2FsY3VsYXRlQm91bmRhcmllcygpOwotICAgICAgICAgICAgdGV4dEJveC0+c2V0WChi
b3hSZWN0LngoKSk7Ci0gICAgICAgICAgICB0ZXh0Qm94LT5zZXRZKGJveFJlY3QueSgpKTsKLSAg
ICAgICAgICAgIHRleHRCb3gtPnNldExvZ2ljYWxXaWR0aChib3hSZWN0LndpZHRoKCkpOwotICAg
ICAgICAgICAgdGV4dEJveC0+c2V0TG9naWNhbEhlaWdodChib3hSZWN0LmhlaWdodCgpKTsKKyAg
ICAgICAgaWYgKGlzPFNWR0lubGluZVRleHRCb3g+KCpjaGlsZCkpIHsKKyAgICAgICAgICAgIEFT
U0VSVChpczxSZW5kZXJTVkdJbmxpbmVUZXh0PihjaGlsZC0+cmVuZGVyZXIoKSkpOworCisgICAg
ICAgICAgICBhdXRvJiB0ZXh0Qm94ID0gZG93bmNhc3Q8U1ZHSW5saW5lVGV4dEJveD4oKmNoaWxk
KTsKKyAgICAgICAgICAgIGJveFJlY3QgPSB0ZXh0Qm94LmNhbGN1bGF0ZUJvdW5kYXJpZXMoKTsK
KyAgICAgICAgICAgIHRleHRCb3guc2V0WChib3hSZWN0LngoKSk7CisgICAgICAgICAgICB0ZXh0
Qm94LnNldFkoYm94UmVjdC55KCkpOworICAgICAgICAgICAgdGV4dEJveC5zZXRMb2dpY2FsV2lk
dGgoYm94UmVjdC53aWR0aCgpKTsKKyAgICAgICAgICAgIHRleHRCb3guc2V0TG9naWNhbEhlaWdo
dChib3hSZWN0LmhlaWdodCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFNr
aXAgZ2VuZXJhdGVkIGNvbnRlbnQuCiAgICAgICAgICAgICBpZiAoIWNoaWxkLT5yZW5kZXJlcigp
Lm5vZGUoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oY2hpbGQtPmlzSW5saW5lRmxvd0JveCgpKTsKLQot
ICAgICAgICAgICAgU1ZHSW5saW5lRmxvd0JveCogZmxvd0JveCA9IHRvU1ZHSW5saW5lRmxvd0Jv
eChjaGlsZCk7Ci0gICAgICAgICAgICBsYXlvdXRDaGlsZEJveGVzKGZsb3dCb3gpOworICAgICAg
ICAgICAgYXV0byYgZmxvd0JveCA9IGRvd25jYXN0PFNWR0lubGluZUZsb3dCb3g+KCpjaGlsZCk7
CisgICAgICAgICAgICBsYXlvdXRDaGlsZEJveGVzKCZmbG93Qm94KTsKIAotICAgICAgICAgICAg
Ym94UmVjdCA9IGZsb3dCb3gtPmNhbGN1bGF0ZUJvdW5kYXJpZXMoKTsKLSAgICAgICAgICAgIGZs
b3dCb3gtPnNldFgoYm94UmVjdC54KCkpOwotICAgICAgICAgICAgZmxvd0JveC0+c2V0WShib3hS
ZWN0LnkoKSk7Ci0gICAgICAgICAgICBmbG93Qm94LT5zZXRMb2dpY2FsV2lkdGgoYm94UmVjdC53
aWR0aCgpKTsKLSAgICAgICAgICAgIGZsb3dCb3gtPnNldExvZ2ljYWxIZWlnaHQoYm94UmVjdC5o
ZWlnaHQoKSk7CisgICAgICAgICAgICBib3hSZWN0ID0gZmxvd0JveC5jYWxjdWxhdGVCb3VuZGFy
aWVzKCk7CisgICAgICAgICAgICBmbG93Qm94LnNldFgoYm94UmVjdC54KCkpOworICAgICAgICAg
ICAgZmxvd0JveC5zZXRZKGJveFJlY3QueSgpKTsKKyAgICAgICAgICAgIGZsb3dCb3guc2V0TG9n
aWNhbFdpZHRoKGJveFJlY3Qud2lkdGgoKSk7CisgICAgICAgICAgICBmbG93Qm94LnNldExvZ2lj
YWxIZWlnaHQoYm94UmVjdC5oZWlnaHQoKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGNoaWxk
UmVjdCkKICAgICAgICAgICAgIGNoaWxkUmVjdC0+dW5pdGUoYm94UmVjdCk7CkBAIC0yNzMsNyAr
MjY3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHJldmVyc2VJbmxpbmVCb3hSYW5nZUFuZFZhbHVl
TGlzdHNJZk5lZWRlZCh2b2lkKiB1c2VyRGF0YSwgVmUKICAgICAgICAgaWYgKGZpcnN0ID09IGxh
c3QgfHwgZmlyc3QgPT0gLS1sYXN0KQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlm
ICghKCpsYXN0KS0+aXNTVkdJbmxpbmVUZXh0Qm94KCkgfHwgISgqZmlyc3QpLT5pc1NWR0lubGlu
ZVRleHRCb3goKSkgeworICAgICAgICBpZiAoIWlzPFNWR0lubGluZVRleHRCb3g+KCoqbGFzdCkg
fHwgIWlzPFNWR0lubGluZVRleHRCb3g+KCoqZmlyc3QpKSB7CiAgICAgICAgICAgICBJbmxpbmVC
b3gqIHRlbXAgPSAqZmlyc3Q7CiAgICAgICAgICAgICAqZmlyc3QgPSAqbGFzdDsKICAgICAgICAg
ICAgICpsYXN0ID0gdGVtcDsKQEAgLTI4MSwxOCArMjc1LDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9p
ZCByZXZlcnNlSW5saW5lQm94UmFuZ2VBbmRWYWx1ZUxpc3RzSWZOZWVkZWQodm9pZCogdXNlckRh
dGEsIFZlCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFNWR0lu
bGluZVRleHRCb3gqIGZpcnN0VGV4dEJveCA9IHRvU1ZHSW5saW5lVGV4dEJveCgqZmlyc3QpOwot
ICAgICAgICBTVkdJbmxpbmVUZXh0Qm94KiBsYXN0VGV4dEJveCA9IHRvU1ZHSW5saW5lVGV4dEJv
eCgqbGFzdCk7CisgICAgICAgIGF1dG8mIGZpcnN0VGV4dEJveCA9IGRvd25jYXN0PFNWR0lubGlu
ZVRleHRCb3g+KCoqZmlyc3QpOworICAgICAgICBhdXRvJiBsYXN0VGV4dEJveCA9IGRvd25jYXN0
PFNWR0lubGluZVRleHRCb3g+KCoqbGFzdCk7CiAKICAgICAgICAgLy8gUmVvcmRlcmluZyBpcyBv
bmx5IG5lY2Vzc2FyeSBmb3IgQmlEaSB0ZXh0IHRoYXQgaXMgX2Fic29sdXRlbHlfIHBvc2l0aW9u
ZWQuCi0gICAgICAgIGlmIChmaXJzdFRleHRCb3gtPmxlbigpID09IDEgJiYgZmlyc3RUZXh0Qm94
LT5sZW4oKSA9PSBsYXN0VGV4dEJveC0+bGVuKCkpIHsKLSAgICAgICAgICAgIFJlbmRlclNWR0lu
bGluZVRleHQmIGZpcnN0Q29udGV4dCA9IGZpcnN0VGV4dEJveC0+cmVuZGVyZXIoKTsKLSAgICAg
ICAgICAgIFJlbmRlclNWR0lubGluZVRleHQmIGxhc3RDb250ZXh0ID0gbGFzdFRleHRCb3gtPnJl
bmRlcmVyKCk7CisgICAgICAgIGlmIChmaXJzdFRleHRCb3gubGVuKCkgPT0gMSAmJiBmaXJzdFRl
eHRCb3gubGVuKCkgPT0gbGFzdFRleHRCb3gubGVuKCkpIHsKKyAgICAgICAgICAgIFJlbmRlclNW
R0lubGluZVRleHQmIGZpcnN0Q29udGV4dCA9IGZpcnN0VGV4dEJveC5yZW5kZXJlcigpOworICAg
ICAgICAgICAgUmVuZGVyU1ZHSW5saW5lVGV4dCYgbGFzdENvbnRleHQgPSBsYXN0VGV4dEJveC5y
ZW5kZXJlcigpOwogCi0gICAgICAgICAgICBTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyogZmlyc3RB
dHRyaWJ1dGVzID0gMDsKLSAgICAgICAgICAgIFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzKiBsYXN0
QXR0cmlidXRlcyA9IDA7CisgICAgICAgICAgICBTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyogZmly
c3RBdHRyaWJ1dGVzID0gbnVsbHB0cjsKKyAgICAgICAgICAgIFNWR1RleHRMYXlvdXRBdHRyaWJ1
dGVzKiBsYXN0QXR0cmlidXRlcyA9IG51bGxwdHI7CiAgICAgICAgICAgICBmaW5kRmlyc3RBbmRM
YXN0QXR0cmlidXRlc0luVmVjdG9yKGF0dHJpYnV0ZXMsICZmaXJzdENvbnRleHQsICZsYXN0Q29u
dGV4dCwgZmlyc3RBdHRyaWJ1dGVzLCBsYXN0QXR0cmlidXRlcyk7Ci0gICAgICAgICAgICBzd2Fw
SXRlbXNJbkxheW91dEF0dHJpYnV0ZXMoZmlyc3RBdHRyaWJ1dGVzLCBsYXN0QXR0cmlidXRlcywg
Zmlyc3RUZXh0Qm94LT5zdGFydCgpLCBsYXN0VGV4dEJveC0+c3RhcnQoKSk7CisgICAgICAgICAg
ICBzd2FwSXRlbXNJbkxheW91dEF0dHJpYnV0ZXMoZmlyc3RBdHRyaWJ1dGVzLCBsYXN0QXR0cmli
dXRlcywgZmlyc3RUZXh0Qm94LnN0YXJ0KCksIGxhc3RUZXh0Qm94LnN0YXJ0KCkpOwogICAgICAg
ICB9CiAKICAgICAgICAgSW5saW5lQm94KiB0ZW1wID0gKmZpcnN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guaAppbmRleCA3NDAyM2I1M2EyZjAy
MmUwZGE1ZjFmMTU4NjBhZDE3YmJlMmI1YWVlLi5iMzdlMDRhMjFkY2IzM2FhODUxNWMxOTU1YTdi
YjUxYjdjZmNhMmE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1Jvb3RJbmxpbmVCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jv
b3RJbmxpbmVCb3guaApAQCAtNTcsOCArNTcsOCBAQCBwcml2YXRlOgogICAgIGZsb2F0IG1fbG9n
aWNhbEhlaWdodDsKIH07CiAKLUlOTElORV9CT1hfT0JKRUNUX1RZUEVfQ0FTVFMoU1ZHUm9vdElu
bGluZUJveCwgaXNTVkdSb290SW5saW5lQm94KCkpCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19JTkxJTkVfQk9YKFNWR1Jvb3RJbmxpbmVCb3gsIGlz
U1ZHUm9vdElubGluZUJveCgpKQorCiAjZW5kaWYgLy8gU1ZHUm9vdElubGluZUJveF9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHAKaW5kZXggMTA0MDQ5
ZTRjZGQ2NGEyZmI1NDk4NDhkZWNiMmVlYWVlYjZhZTc0OS4uOGM4NTdkZmMwMGVmNmIwNDAzMDYx
MjVlOGQzYzVmY2RmODU2NjgxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0UXVlcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHVGV4dFF1ZXJ5LmNwcApAQCAtODksMTcgKzg5LDE3IEBAIHZvaWQgU1ZHVGV4dFF1ZXJ5Ojpj
b2xsZWN0VGV4dEJveGVzSW5GbG93Qm94KElubGluZUZsb3dCb3gqIGZsb3dCb3gpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGZvciAoSW5saW5lQm94KiBjaGlsZCA9IGZsb3dCb3gtPmZpcnN0Q2hp
bGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRPbkxpbmUoKSkgewotICAgICAgICBpZiAo
Y2hpbGQtPmlzSW5saW5lRmxvd0JveCgpKSB7CisgICAgICAgIGlmIChpczxJbmxpbmVGbG93Qm94
PigqY2hpbGQpKSB7CiAgICAgICAgICAgICAvLyBTa2lwIGdlbmVyYXRlZCBjb250ZW50LgogICAg
ICAgICAgICAgaWYgKCFjaGlsZC0+cmVuZGVyZXIoKS5ub2RlKCkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAKLSAgICAgICAgICAgIGNvbGxlY3RUZXh0Qm94ZXNJbkZsb3dCb3godG9Jbmxp
bmVGbG93Qm94KGNoaWxkKSk7CisgICAgICAgICAgICBjb2xsZWN0VGV4dEJveGVzSW5GbG93Qm94
KGRvd25jYXN0PElubGluZUZsb3dCb3g+KGNoaWxkKSk7CiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQogCi0gICAgICAgIGlmIChjaGlsZC0+aXNTVkdJbmxpbmVUZXh0Qm94KCkpCi0g
ICAgICAgICAgICBtX3RleHRCb3hlcy5hcHBlbmQodG9TVkdJbmxpbmVUZXh0Qm94KGNoaWxkKSk7
CisgICAgICAgIGlmIChpczxTVkdJbmxpbmVUZXh0Qm94PigqY2hpbGQpKQorICAgICAgICAgICAg
bV90ZXh0Qm94ZXMuYXBwZW5kKGRvd25jYXN0PFNWR0lubGluZVRleHRCb3g+KGNoaWxkKSk7CiAg
ICAgfQogfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>