<?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>46378</bug_id>
          
          <creation_ts>2010-09-23 11:36:45 -0700</creation_ts>
          <short_desc>Rename width/height on line boxes to logicalWidth/logicalHeight.</short_desc>
          <delta_ts>2010-09-23 12:18:48 -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>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>46123</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>283796</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-23 11:36:45 -0700</bug_when>
    <thetext>Rename width/height on line boxes to logicalWidth/logicalHeight.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283797</commentid>
    <comment_count>1</comment_count>
      <attachid>68552</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-23 11:38:38 -0700</bug_when>
    <thetext>Created attachment 68552
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283801</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-23 11:45:26 -0700</bug_when>
    <thetext>Attachment 68552 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/rendering/InlineTextBox.cpp:796:  One space before end of line comments  [whitespace/comments] [5]
WebCore/rendering/InlineTextBox.cpp:972:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 2 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283839</commentid>
    <comment_count>3</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-09-23 12:18:42 -0700</bug_when>
    <thetext>Fixed in r68177.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68552</attachid>
            <date>2010-09-23 11:38:38 -0700</date>
            <delta_ts>2010-09-23 11:49:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>78822</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2ODE3MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTI1IEBACisyMDEwLTA5LTIzICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDYzNzgsIHJlbmFtZSB3aWR0aC9o
ZWlnaHQgb24gbGluZSBib3hlcyB0byBsb2dpY2FsV2lkdGgvbG9naWNhbEhlaWdodC4KKworICAg
ICAgICAqIGVkaXRpbmcvdmlzaWJsZV91bml0cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmV2
aW91c0xpbmVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpuZXh0TGluZVBvc2l0aW9uKToK
KyAgICAgICAgKiByZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWxsaXBzaXNCb3g6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94OjpwYWlu
dFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFbGxpcHNpc0JveDo6bm9kZUF0UG9pbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lQm94Ojpsb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6
Y2FuQWNjb21tb2RhdGVFbGxpcHNpcyk6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUJveC5o
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94OjpJbmxpbmVCb3gpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lQm94OjpoYXNWaXJ0dWFsTG9naWNhbEhlaWdodCk6CisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVCb3g6OnNldEhhc1ZpcnR1YWxMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKFdl
YkNvcmU6OklubGluZUJveDo6dmlydHVhbExvZ2ljYWxIZWlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lQm94OjpzZXRMb2dpY2FsV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
Qm94Ojpsb2dpY2FsV2lkdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNIb3Jpem9udGFs
bHkpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc1ZlcnRpY2Fs
bHkpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6Y29tcHV0ZVZlcnRpY2FsT3Zl
cmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cGFpbnRGaWxsTGF5ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpwYWludE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lRmxvd0JveDo6cGFpbnRUZXh0RGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lRmxvd0JveDo6cGxhY2VFbGxpcHNpc0JveCk6CisgICAgICAgICogcmVuZGVyaW5nL0lu
bGluZUZsb3dCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OnZpc2libGVP
dmVyZmxvd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6Ym90dG9tTGF5
b3V0T3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cmlnaHRMYXlv
dXRPdmVyZmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpsYXlvdXRPdmVy
Zmxvd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6Ym90dG9tVmlzdWFs
T3ZlcmZsb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cmlnaHRWaXN1YWxP
dmVyZmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94Ojp2aXN1YWxPdmVyZmxv
d1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6c2V0SG9yaXpvbnRhbE92
ZXJmbG93UG9zaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OnNldFZl
cnRpY2FsT3ZlcmZsb3dQb3NpdGlvbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnNlbGVjdGlvblJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGxhY2VFbGxpcHNpc0JveCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVU
ZXh0Qm94OjpwYWludFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94
OjpwYWludEN1c3RvbUhpZ2hsaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94
OjpwYWludERlY29yYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFp
bnRTcGVsbGluZ09yR3JhbW1hck1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0
Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0
Qm94OjpwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5oOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6Y2FsY3VsYXRl
Qm91bmRhcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpzZXRTcGFjZUFk
ZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpwYWludEVsbGlwc2lzQm94ZXMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OnJpZ2h0bW9zdFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjphZGp1c3RGb3JCb3JkZXJGaXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tM
aW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjb21wdXRlSG9y
aXpvbnRhbFBvc2l0aW9uc0ZvckxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmNoZWNrTGluZXNGb3JUZXh0T3ZlcmZsb3cpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJC
b3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpwYWludEN1c3RvbUhpZ2hsaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja1dpZHRoRm9y
UG9zaXRpb25lZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsZXhpYmxlQm94OjphcHBseUxpbmVDbGFtcCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJJbmxpbmU6OmFic29sdXRlUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5s
aW5lOjphYnNvbHV0ZVF1YWRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6bGlu
ZXNCb3VuZGluZ0JveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmFkZEZvY3Vz
UmluZ1JlY3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6cGFpbnRPdXRsaW5l
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHSW5saW5lLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR0lubGluZTo6Y3JlYXRlSW5saW5lRmxvd0JveCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdJbmxpbmU6OmFic29sdXRlUXVhZHMpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJTVkdJbmxpbmVUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R0lubGluZVRleHQ6OmNyZWF0ZVRleHRCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJT
VkdUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OmNyZWF0ZVJvb3RJ
bmxpbmVCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRleHQ6OmFic29sdXRlUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGV4dDo6YWJzb2x1dGVSZWN0c0ZvclJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclRleHQ6OmFic29sdXRlUXVhZHNGb3JSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUZXh0Ojpwb3NpdGlvbkZvclBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6
OmxvY2FsQ2FyZXRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmxpbmVzQm91
bmRpbmdCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OndyaXRlVGV4dFJ1bik6CisgICAgICAgICogcmVuZGVyaW5nL1Jvb3RJ
bmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6Y2FuQWNjb21t
b2RhdGVFbGxpcHNpcyk6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpwbGFjZUVs
bGlwc2lzKToKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OmFkZEhpZ2hsaWdodE92
ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OnBhaW50Q3VzdG9tSGln
aGxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OmZpbGxMaW5lU2VsZWN0
aW9uR2FwKToKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OmNsb3Nlc3RMZWFmQ2hp
bGRGb3JYUG9zKToKKyAgICAgICAgKiByZW5kZXJpbmcvU1ZHSW5saW5lRmxvd0JveC5oOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lRmxvd0JveDo6U1ZHSW5saW5lRmxvd0JveCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdJbmxpbmVGbG93Qm94Ojp2aXJ0dWFsTG9naWNhbEhlaWdodCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVGbG93Qm94OjpzZXRMb2dpY2FsSGVpZ2h0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvU1ZHSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdJbmxpbmVUZXh0Qm94OjpTVkdJbmxpbmVUZXh0Qm94KToKKyAgICAgICAgKiByZW5kZXJp
bmcvU1ZHSW5saW5lVGV4dEJveC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJv
eDo6dmlydHVhbExvZ2ljYWxIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4
dEJveDo6c2V0TG9naWNhbEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0
Qm94OjpzZWxlY3Rpb25IZWlnaHQpOgorICAgICAgICAqIHJlbmRlcmluZy9TVkdSZW5kZXJUcmVl
QXNUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlUmVuZGVyU1ZHVGV4dEJveCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1NWR1Jvb3RJbmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHUm9vdElubGluZUJveDo6bGF5b3V0Q2hpbGRCb3hlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdSb290SW5saW5lQm94OjpsYXlvdXRSb290Qm94KToKKyAgICAgICAgKiByZW5kZXJpbmcv
U1ZHUm9vdElubGluZUJveC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUm9vdElubGluZUJveDo6
U1ZHUm9vdElubGluZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94Ojp2
aXJ0dWFsTG9naWNhbEhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94
OjpzZXRMb2dpY2FsSGVpZ2h0KToKKyAgICAgICAgKiByZW5kZXJpbmcvVHJhaWxpbmdGbG9hdHNS
b290SW5saW5lQm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxp
bmVCb3g6OlRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpU
cmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3g6OnZpcnR1YWxMb2dpY2FsSGVpZ2h0KToKKwogMjAx
MC0wOS0yMyAgUmVuYXRhIEhvZG92YW4gIDxyZW5pQGluZi51LXN6ZWdlZC5odT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBEaXJrIFNjaHVsemUuCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvdmlzaWJs
ZV91bml0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL3Zpc2libGVfdW5pdHMu
Y3BwCShyZXZpc2lvbiA2NzkzMCkKKysrIFdlYkNvcmUvZWRpdGluZy92aXNpYmxlX3VuaXRzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTYwLDcgKzU2MCw3IEBAIFZpc2libGVQb3NpdGlvbiBwcmV2
aW91c0xpbmVQb3NpdGlvbihjb24KICAgICAgICAgcm9vdCA9IGJveC0+cm9vdCgpLT5wcmV2Um9v
dEJveCgpOwogICAgICAgICAvLyBXZSB3YW50IHRvIHNraXAgemVybyBoZWlnaHQgYm94ZXMuCiAg
ICAgICAgIC8vIFRoaXMgY291bGQgaGFwcGVuIGluIGNhc2UgaXQgaXMgYSBUcmFpbGluZ0Zsb2F0
c1Jvb3RJbmxpbmVCb3guCi0gICAgICAgIGlmIChyb290ICYmIHJvb3QtPmhlaWdodCgpKQorICAg
ICAgICBpZiAocm9vdCAmJiByb290LT5sb2dpY2FsSGVpZ2h0KCkpCiAgICAgICAgICAgICBjb250
YWluaW5nQmxvY2sgPSByZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIHJvb3QgPSAwOwpAQCAtNjY5LDcgKzY2OSw3IEBAIFZpc2libGVQb3NpdGlv
biBuZXh0TGluZVBvc2l0aW9uKGNvbnN0IFYKICAgICAgICAgcm9vdCA9IGJveC0+cm9vdCgpLT5u
ZXh0Um9vdEJveCgpOwogICAgICAgICAvLyBXZSB3YW50IHRvIHNraXAgemVybyBoZWlnaHQgYm94
ZXMuCiAgICAgICAgIC8vIFRoaXMgY291bGQgaGFwcGVuIGluIGNhc2UgaXQgaXMgYSBUcmFpbGlu
Z0Zsb2F0c1Jvb3RJbmxpbmVCb3guCi0gICAgICAgIGlmIChyb290ICYmIHJvb3QtPmhlaWdodCgp
KQorICAgICAgICBpZiAocm9vdCAmJiByb290LT5sb2dpY2FsSGVpZ2h0KCkpCiAgICAgICAgICAg
ICBjb250YWluaW5nQmxvY2sgPSByZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIHJvb3QgPSAwOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvRWxs
aXBzaXNCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94
LmNwcAkocmV2aXNpb24gNjc5MzApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBFbGxpcHNpc0JveDo6cGFp
bnQoUGFpbnRJbmZvJiBwYWludAogCiAgICAgaWYgKG1fbWFya3VwQm94KSB7CiAgICAgICAgIC8v
IFBhaW50IHRoZSBtYXJrdXAgYm94Ci0gICAgICAgIHR4ICs9IG1feCArIG1fd2lkdGggLSBtX21h
cmt1cEJveC0+eCgpOworICAgICAgICB0eCArPSBtX3ggKyBtX2xvZ2ljYWxXaWR0aCAtIG1fbWFy
a3VwQm94LT54KCk7CiAgICAgICAgIHR5ICs9IG1feSArIHN0eWxlLT5mb250KCkuYXNjZW50KCkg
LSAobV9tYXJrdXBCb3gtPnkoKSArIG1fbWFya3VwQm94LT5yZW5kZXJlcigpLT5zdHlsZShtX2Zp
cnN0TGluZSktPmZvbnQoKS5hc2NlbnQoKSk7CiAgICAgICAgIG1fbWFya3VwQm94LT5wYWludChw
YWludEluZm8sIHR4LCB0eSk7CiAgICAgfQpAQCAtOTEsNyArOTEsNyBAQCB2b2lkIEVsbGlwc2lz
Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljCiAgICAgY29udGV4dC0+c2F2ZSgpOwogICAgIGlu
dCB5ID0gcm9vdCgpLT5zZWxlY3Rpb25Ub3AoKTsKICAgICBpbnQgaCA9IHJvb3QoKS0+c2VsZWN0
aW9uSGVpZ2h0KCk7Ci0gICAgY29udGV4dC0+Y2xpcChJbnRSZWN0KG1feCArIHR4LCB5ICsgdHks
IG1fd2lkdGgsIGgpKTsKKyAgICBjb250ZXh0LT5jbGlwKEludFJlY3QobV94ICsgdHgsIHkgKyB0
eSwgbV9sb2dpY2FsV2lkdGgsIGgpKTsKICAgICBjb250ZXh0LT5kcmF3SGlnaGxpZ2h0Rm9yVGV4
dChmb250LCBUZXh0UnVuKG1fc3RyLmNoYXJhY3RlcnMoKSwgbV9zdHIubGVuZ3RoKCksIGZhbHNl
LCAwLCAwLCBmYWxzZSwgc3R5bGUtPnZpc3VhbGx5T3JkZXJlZCgpKSwKICAgICAgICAgSW50UG9p
bnQobV94ICsgdHgsIG1feSArIHR5ICsgeSksIGgsIGMsIHN0eWxlLT5jb2xvclNwYWNlKCkpOwog
ICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKQEAgLTEwNSw3ICsxMDUsNyBAQCBib29sIEVsbGlwc2lz
Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUCiAgICAgLy8gSGl0IHRlc3QgdGhlIG1hcmt1cCBi
b3guCiAgICAgaWYgKG1fbWFya3VwQm94KSB7CiAgICAgICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9
IG1fcmVuZGVyZXItPnN0eWxlKG1fZmlyc3RMaW5lKTsKLSAgICAgICAgaW50IG10eCA9IHR4ICsg
bV93aWR0aCAtIG1fbWFya3VwQm94LT54KCk7CisgICAgICAgIGludCBtdHggPSB0eCArIG1fbG9n
aWNhbFdpZHRoIC0gbV9tYXJrdXBCb3gtPngoKTsKICAgICAgICAgaW50IG10eSA9IHR5ICsgc3R5
bGUtPmZvbnQoKS5hc2NlbnQoKSAtIChtX21hcmt1cEJveC0+eSgpICsgbV9tYXJrdXBCb3gtPnJl
bmRlcmVyKCktPnN0eWxlKG1fZmlyc3RMaW5lKS0+Zm9udCgpLmFzY2VudCgpKTsKICAgICAgICAg
aWYgKG1fbWFya3VwQm94LT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHgsIHksIG10eCwg
bXR5KSkgewogICAgICAgICAgICAgcmVuZGVyZXIoKS0+dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1
bHQsIEludFBvaW50KHggLSBtdHgsIHkgLSBtdHkpKTsKQEAgLTExMyw3ICsxMTMsNyBAQCBib29s
IEVsbGlwc2lzQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUCiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBJbnRSZWN0IGJvdW5kc1JlY3QgPSBJbnRSZWN0KHR4LCB0eSwgbV93aWR0aCwgbV9oZWln
aHQpOworICAgIEludFJlY3QgYm91bmRzUmVjdCA9IEludFJlY3QodHgsIHR5LCBtX2xvZ2ljYWxX
aWR0aCwgbV9oZWlnaHQpOwogICAgIGlmICh2aXNpYmxlVG9IaXRUZXN0aW5nKCkgJiYgYm91bmRz
UmVjdC5pbnRlcnNlY3RzKHJlc3VsdC5yZWN0RnJvbVBvaW50KHgsIHkpKSkgewogICAgICAgICBy
ZW5kZXJlcigpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeCAtIHR4LCB5
IC0gdHkpKTsKICAgICAgICAgaWYgKCFyZXN1bHQuYWRkTm9kZVRvUmVjdEJhc2VkVGVzdFJlc3Vs
dChyZW5kZXJlcigpLT5ub2RlKCksIHgsIHksIGJvdW5kc1JlY3QpKQpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVCb3guY3BwCShyZXZpc2lvbiA2NzkzMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDExICs4NSwxMSBAQCB2b2lkIElubGluZUJv
eDo6c2hvd1RyZWVGb3JUaGlzKCkgY29uc3QKIH0KICNlbmRpZgogCi1pbnQgSW5saW5lQm94Ojpo
ZWlnaHQoKSBjb25zdAoraW50IElubGluZUJveDo6bG9naWNhbEhlaWdodCgpIGNvbnN0CiB7CiAj
aWYgRU5BQkxFKFNWRykKLSAgICBpZiAoaGFzVmlydHVhbEhlaWdodCgpKQotICAgICAgICByZXR1
cm4gdmlydHVhbEhlaWdodCgpOworICAgIGlmIChoYXNWaXJ0dWFsTG9naWNhbEhlaWdodCgpKQor
ICAgICAgICByZXR1cm4gdmlydHVhbExvZ2ljYWxIZWlnaHQoKTsKICNlbmRpZgogICAgIAogICAg
IGlmIChyZW5kZXJlcigpLT5pc1RleHQoKSkKQEAgLTI2OCw3ICsyNjgsNyBAQCBib29sIElubGlu
ZUJveDo6Y2FuQWNjb21tb2RhdGVFbGxpcHNpcyhiCiAgICAgaWYgKCFtX3JlbmRlcmVyIHx8ICFt
X3JlbmRlcmVyLT5pc1JlcGxhY2VkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAotICAg
IEludFJlY3QgYm94UmVjdChtX3gsIDAsIG1fd2lkdGgsIDEwKTsKKyAgICBJbnRSZWN0IGJveFJl
Y3QobV94LCAwLCBtX2xvZ2ljYWxXaWR0aCwgMTApOwogICAgIEludFJlY3QgZWxsaXBzaXNSZWN0
KGx0ciA/IGJsb2NrRWRnZSAtIGVsbGlwc2lzV2lkdGggOiBibG9ja0VkZ2UsIDAsIGVsbGlwc2lz
V2lkdGgsIDEwKTsKICAgICByZXR1cm4gIShib3hSZWN0LmludGVyc2VjdHMoZWxsaXBzaXNSZWN0
KSk7CiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAkocmV2aXNpb24gNjc5MzApCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTQgKzQyLDE0
IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX3JlbmRlcmVyKG9iaikKICAgICAgICAgLCBtX3goMCkK
ICAgICAgICAgLCBtX3koMCkKLSAgICAgICAgLCBtX3dpZHRoKDApCisgICAgICAgICwgbV9sb2dp
Y2FsV2lkdGgoMCkKICAgICAgICAgLCBtX2ZpcnN0TGluZShmYWxzZSkKICAgICAgICAgLCBtX2Nv
bnN0cnVjdGVkKGZhbHNlKQogICAgICAgICAsIG1fYmlkaUVtYmVkZGluZ0xldmVsKDApCiAgICAg
ICAgICwgbV9kaXJ0eShmYWxzZSkKICAgICAgICAgLCBtX2V4dHJhY3RlZChmYWxzZSkKICNpZiBF
TkFCTEUoU1ZHKQotICAgICAgICAsIG1faGFzVmlydHVhbEhlaWdodChmYWxzZSkKKyAgICAgICAg
LCBtX2hhc1ZpcnR1YWxMb2dpY2FsSGVpZ2h0KGZhbHNlKQogI2VuZGlmCiAgICAgICAgICwgbV9l
bmRzV2l0aEJyZWFrKGZhbHNlKQogICAgICAgICAsIG1faGFzU2VsZWN0ZWRDaGlsZHJlbihmYWxz
ZSkKQEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBJbmxpbmVC
b3goUmVuZGVyT2JqZWN0KiBvYmosIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBib29sIGZpcnN0
TGluZSwgYm9vbCBjb25zdHJ1Y3RlZCwKKyAgICBJbmxpbmVCb3goUmVuZGVyT2JqZWN0KiBvYmos
IGludCB4LCBpbnQgeSwgaW50IGxvZ2ljYWxXaWR0aCwgYm9vbCBmaXJzdExpbmUsIGJvb2wgY29u
c3RydWN0ZWQsCiAgICAgICAgICAgICAgIGJvb2wgZGlydHksIGJvb2wgZXh0cmFjdGVkLCBJbmxp
bmVCb3gqIG5leHQsIElubGluZUJveCogcHJldiwgSW5saW5lRmxvd0JveCogcGFyZW50KQogICAg
ICAgICA6IG1fbmV4dChuZXh0KQogICAgICAgICAsIG1fcHJldihwcmV2KQpAQCAtNzUsMTQgKzc1
LDE0IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX3JlbmRlcmVyKG9iaikKICAgICAgICAgLCBtX3go
eCkKICAgICAgICAgLCBtX3koeSkKLSAgICAgICAgLCBtX3dpZHRoKHdpZHRoKQorICAgICAgICAs
IG1fbG9naWNhbFdpZHRoKGxvZ2ljYWxXaWR0aCkKICAgICAgICAgLCBtX2ZpcnN0TGluZShmaXJz
dExpbmUpCiAgICAgICAgICwgbV9jb25zdHJ1Y3RlZChjb25zdHJ1Y3RlZCkKICAgICAgICAgLCBt
X2JpZGlFbWJlZGRpbmdMZXZlbCgwKQogICAgICAgICAsIG1fZGlydHkoZGlydHkpCiAgICAgICAg
ICwgbV9leHRyYWN0ZWQoZXh0cmFjdGVkKQogI2lmIEVOQUJMRShTVkcpCi0gICAgICAgICwgbV9o
YXNWaXJ0dWFsSGVpZ2h0KGZhbHNlKQorICAgICAgICAsIG1faGFzVmlydHVhbExvZ2ljYWxIZWln
aHQoZmFsc2UpCiAjZW5kaWYKICAgICAgICAgLCBtX2VuZHNXaXRoQnJlYWsoZmFsc2UpCiAgICAg
ICAgICwgbV9oYXNTZWxlY3RlZENoaWxkcmVuKGZhbHNlKSAgIApAQCAtMTQwLDkgKzE0MCw5IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdJbmxpbmVUZXh0Qm94KCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdSb290SW5saW5lQm94KCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIGJvb2wgaGFzVmlydHVhbEhlaWdodCgpIGNvbnN0
IHsgcmV0dXJuIG1faGFzVmlydHVhbEhlaWdodDsgfQotICAgIHZvaWQgc2V0SGFzVmlydHVhbEhl
aWdodCgpIHsgbV9oYXNWaXJ0dWFsSGVpZ2h0ID0gdHJ1ZTsgfQotICAgIHZpcnR1YWwgaW50IHZp
cnR1YWxIZWlnaHQoKSBjb25zdAorICAgIGJvb2wgaGFzVmlydHVhbExvZ2ljYWxIZWlnaHQoKSBj
b25zdCB7IHJldHVybiBtX2hhc1ZpcnR1YWxMb2dpY2FsSGVpZ2h0OyB9CisgICAgdm9pZCBzZXRI
YXNWaXJ0dWFsTG9naWNhbEhlaWdodCgpIHsgbV9oYXNWaXJ0dWFsTG9naWNhbEhlaWdodCA9IHRy
dWU7IH0KKyAgICB2aXJ0dWFsIGludCB2aXJ0dWFsTG9naWNhbEhlaWdodCgpIGNvbnN0CiAgICAg
ewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0y
MDIsOSArMjAyLDYgQEAgcHVibGljOgogICAgIGNvbnN0IFJvb3RJbmxpbmVCb3gqIHJvb3QoKSBj
b25zdDsKICAgICBSb290SW5saW5lQm94KiByb290KCk7CiAKLSAgICB2b2lkIHNldFdpZHRoKGlu
dCB3KSB7IG1fd2lkdGggPSB3OyB9Ci0gICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV93
aWR0aDsgfQotCiAgICAgLy8geCgpIGlzIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIGJveCBpbiB0aGUg
cGFyZW50J3MgY29vcmRpbmF0ZSBzeXN0ZW0uCiAgICAgdm9pZCBzZXRYKGludCB4KSB7IG1feCA9
IHg7IH0KICAgICBpbnQgeCgpIGNvbnN0IHsgcmV0dXJuIG1feDsgfQpAQCAtMjEzLDcgKzIxMCwx
MiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRZKGludCB5KSB7IG1feSA9IHk7IH0KICAgICBpbnQg
eSgpIGNvbnN0IHsgcmV0dXJuIG1feTsgfQogCi0gICAgaW50IGhlaWdodCgpIGNvbnN0OworICAg
IC8vIFRoZSBsb2dpY2FsIHdpZHRoIGlzIG91ciBleHRlbnQgaW4gdGhlIGxpbmUncyBvdmVyYWxs
IGlubGluZSBkaXJlY3Rpb24sIGkuZS4sIHdpZHRoIGZvciBob3Jpem9udGFsIHRleHQgYW5kIGhl
aWdodCBmb3IgdmVydGljYWwgdGV4dC4KKyAgICB2b2lkIHNldExvZ2ljYWxXaWR0aChpbnQgdykg
eyBtX2xvZ2ljYWxXaWR0aCA9IHc7IH0KKyAgICBpbnQgbG9naWNhbFdpZHRoKCkgY29uc3QgeyBy
ZXR1cm4gbV9sb2dpY2FsV2lkdGg7IH0KKworICAgIC8vIFRoZSBsb2dpY2FsIGhlaWdodCBpcyBv
dXIgZXh0ZW50IGluIHRoZSBibG9jayBmbG93IGRpcmVjdGlvbiwgaS5lLiwgaGVpZ2h0IGZvciBo
b3Jpem9udGFsIHRleHQgYW5kIHdpZHRoIGZvciB2ZXJ0aWNhbCB0ZXh0LgorICAgIGludCBsb2dp
Y2FsSGVpZ2h0KCkgY29uc3Q7CiAKICAgICBpbmxpbmUgaW50IGJhc2VsaW5lUG9zaXRpb24oYm9v
bCBpc1Jvb3RMaW5lQm94KSBjb25zdCB7IHJldHVybiByZW5kZXJlcigpLT5iYXNlbGluZVBvc2l0
aW9uKG1fZmlyc3RMaW5lLCBpc1Jvb3RMaW5lQm94KTsgfQogICAgIGlubGluZSBpbnQgbGluZUhl
aWdodChib29sIGlzUm9vdExpbmVCb3gpIGNvbnN0IHsgcmV0dXJuIHJlbmRlcmVyKCktPmxpbmVI
ZWlnaHQobV9maXJzdExpbmUsIGlzUm9vdExpbmVCb3gpOyB9CkBAIC0yNjYsNyArMjY4LDcgQEAg
cHVibGljOgogCiAgICAgaW50IG1feDsKICAgICBpbnQgbV95OwotICAgIGludCBtX3dpZHRoOwor
ICAgIGludCBtX2xvZ2ljYWxXaWR0aDsKICAgICAKICAgICAvLyBTb21lIG9mIHRoZXNlIGJpdHMg
YXJlIGFjdHVhbGx5IGZvciBzdWJjbGFzc2VzIGFuZCBtb3ZlZCBoZXJlIHRvIGNvbXBhY3QgdGhl
IHN0cnVjdHVyZXMuCiAKQEAgLTI3OSw3ICsyODEsNyBAQCBwcml2YXRlOgogcHJvdGVjdGVkOgog
ICAgIGJvb2wgbV9kaXJ0eSA6IDE7CiAgICAgYm9vbCBtX2V4dHJhY3RlZCA6IDE7Ci0gICAgYm9v
bCBtX2hhc1ZpcnR1YWxIZWlnaHQgOiAxOworICAgIGJvb2wgbV9oYXNWaXJ0dWFsTG9naWNhbEhl
aWdodCA6IDE7CiAKICAgICAvLyBmb3IgUm9vdElubGluZUJveAogICAgIGJvb2wgbV9lbmRzV2l0
aEJyZWFrIDogMTsgIC8vIFdoZXRoZXIgdGhlIGxpbmUgZW5kcyB3aXRoIGEgPGJyPi4KSW5kZXg6
IFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiA2NzkzMCkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODcsNyAr
Mjg3LDcgQEAgaW50IElubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNIb3Jpem9udGFsbAogICAgICAg
ICAgICAgLy8gSWYgbGV0dGVyLXNwYWNpbmcgaXMgbmVnYXRpdmUsIHdlIHNob3VsZCBmYWN0b3Ig
dGhhdCBpbnRvIHJpZ2h0IGxheW91dCBvdmVyZmxvdy4gKEV2ZW4gaW4gUlRMLCBsZXR0ZXItc3Bh
Y2luZyBpcwogICAgICAgICAgICAgLy8gYXBwbGllZCB0byB0aGUgcmlnaHQsIHNvIHRoaXMgaXMg
bm90IGFuIGlzc3VlIHdpdGggbGVmdCBvdmVyZmxvdy4KICAgICAgICAgICAgIGludCBsZXR0ZXJT
cGFjaW5nID0gbWluKDAsIChpbnQpcnQtPnN0eWxlKG1fZmlyc3RMaW5lKS0+Zm9udCgpLmxldHRl
clNwYWNpbmcoKSk7Ci0gICAgICAgICAgICByaWdodExheW91dE92ZXJmbG93ID0gbWF4KHhQb3Mg
KyB0ZXh0LT53aWR0aCgpIC0gbGV0dGVyU3BhY2luZywgcmlnaHRMYXlvdXRPdmVyZmxvdyk7Cisg
ICAgICAgICAgICByaWdodExheW91dE92ZXJmbG93ID0gbWF4KHhQb3MgKyB0ZXh0LT5sb2dpY2Fs
V2lkdGgoKSAtIGxldHRlclNwYWNpbmcsIHJpZ2h0TGF5b3V0T3ZlcmZsb3cpOwogCiAgICAgICAg
ICAgICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0
Qm94RGF0YU1hcC5maW5kKHN0YXRpY19jYXN0PElubGluZVRleHRCb3gqPihjdXJyKSk7CiAgICAg
ICAgICAgICBHbHlwaE92ZXJmbG93KiBnbHlwaE92ZXJmbG93ID0gaXQgPT0gdGV4dEJveERhdGFN
YXAuZW5kKCkgPyAwIDogJml0LT5zZWNvbmQuc2Vjb25kOwpAQCAtMzAzLDkgKzMwMyw5IEBAIGlu
dCBJbmxpbmVGbG93Qm94OjpwbGFjZUJveGVzSG9yaXpvbnRhbGwKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICAgICAgbGVmdFZpc3VhbE92ZXJmbG93ID0gbWluKHhQb3MgKyBj
aGlsZE92ZXJmbG93TGVmdCwgbGVmdFZpc3VhbE92ZXJmbG93KTsKLSAgICAgICAgICAgIHJpZ2h0
VmlzdWFsT3ZlcmZsb3cgPSBtYXgoeFBvcyArIHRleHQtPndpZHRoKCkgKyBjaGlsZE92ZXJmbG93
UmlnaHQsIHJpZ2h0VmlzdWFsT3ZlcmZsb3cpOworICAgICAgICAgICAgcmlnaHRWaXN1YWxPdmVy
ZmxvdyA9IG1heCh4UG9zICsgdGV4dC0+bG9naWNhbFdpZHRoKCkgKyBjaGlsZE92ZXJmbG93Umln
aHQsIHJpZ2h0VmlzdWFsT3ZlcmZsb3cpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICB4UG9z
ICs9IHRleHQtPndpZHRoKCk7CisgICAgICAgICAgICB4UG9zICs9IHRleHQtPmxvZ2ljYWxXaWR0
aCgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGN1cnItPnJlbmRlcmVyKCkt
PmlzUG9zaXRpb25lZCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGN1cnItPnJlbmRlcmVyKCkt
PnBhcmVudCgpLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpCkBAIC0zMzIsNyArMzMyLDcg
QEAgaW50IElubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNIb3Jpem9udGFsbAogICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICBSZW5kZXJCb3gqIGJveCA9IHRvUmVuZGVyQm94KGN1cnIt
PnJlbmRlcmVyKCkpOwogICAgICAgICAgICAgICAgIGludCBjaGlsZExlZnRPdmVyZmxvdyA9IGJv
eC0+aGFzT3ZlcmZsb3dDbGlwKCkgPyAwIDogYm94LT5sZWZ0TGF5b3V0T3ZlcmZsb3coKTsKLSAg
ICAgICAgICAgICAgICBpbnQgY2hpbGRSaWdodE92ZXJmbG93ID0gYm94LT5oYXNPdmVyZmxvd0Ns
aXAoKSA/IGN1cnItPndpZHRoKCkgOiBib3gtPnJpZ2h0TGF5b3V0T3ZlcmZsb3coKTsKKyAgICAg
ICAgICAgICAgICBpbnQgY2hpbGRSaWdodE92ZXJmbG93ID0gYm94LT5oYXNPdmVyZmxvd0NsaXAo
KSA/IGN1cnItPmxvZ2ljYWxXaWR0aCgpIDogYm94LT5yaWdodExheW91dE92ZXJmbG93KCk7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbGVmdExheW91dE92ZXJmbG93ID0gbWlu
KHhQb3MgKyBjaGlsZExlZnRPdmVyZmxvdywgbGVmdExheW91dE92ZXJmbG93KTsKICAgICAgICAg
ICAgICAgICByaWdodExheW91dE92ZXJmbG93ID0gbWF4KHhQb3MgKyBjaGlsZFJpZ2h0T3ZlcmZs
b3csIHJpZ2h0TGF5b3V0T3ZlcmZsb3cpOwpAQCAtMzQwLDE1ICszNDAsMTUgQEAgaW50IElubGlu
ZUZsb3dCb3g6OnBsYWNlQm94ZXNIb3Jpem9udGFsbAogICAgICAgICAgICAgICAgIGxlZnRWaXN1
YWxPdmVyZmxvdyA9IG1pbih4UG9zICsgYm94LT5sZWZ0VmlzdWFsT3ZlcmZsb3coKSwgbGVmdFZp
c3VhbE92ZXJmbG93KTsKICAgICAgICAgICAgICAgICByaWdodFZpc3VhbE92ZXJmbG93ID0gbWF4
KHhQb3MgKyBib3gtPnJpZ2h0VmlzdWFsT3ZlcmZsb3coKSwgcmlnaHRWaXN1YWxPdmVyZmxvdyk7
CiAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICB4UG9zICs9IGN1cnItPndpZHRoKCkg
KyBjdXJyLT5ib3hNb2RlbE9iamVjdCgpLT5tYXJnaW5SaWdodCgpOworICAgICAgICAgICAgICAg
IHhQb3MgKz0gY3Vyci0+bG9naWNhbFdpZHRoKCkgKyBjdXJyLT5ib3hNb2RlbE9iamVjdCgpLT5t
YXJnaW5SaWdodCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCiAgICAgeFBv
cyArPSBib3JkZXJSaWdodCgpICsgcGFkZGluZ1JpZ2h0KCk7Ci0gICAgc2V0V2lkdGgoeFBvcyAt
IHN0YXJ0WCk7Ci0gICAgcmlnaHRWaXN1YWxPdmVyZmxvdyA9IG1heCh4KCkgKyB3aWR0aCgpICsg
Ym94U2hhZG93UmlnaHQsIHJpZ2h0VmlzdWFsT3ZlcmZsb3cpOwotICAgIHJpZ2h0TGF5b3V0T3Zl
cmZsb3cgPSBtYXgoeCgpICsgd2lkdGgoKSwgcmlnaHRMYXlvdXRPdmVyZmxvdyk7CisgICAgc2V0
TG9naWNhbFdpZHRoKHhQb3MgLSBzdGFydFgpOworICAgIHJpZ2h0VmlzdWFsT3ZlcmZsb3cgPSBt
YXgoeCgpICsgbG9naWNhbFdpZHRoKCkgKyBib3hTaGFkb3dSaWdodCwgcmlnaHRWaXN1YWxPdmVy
Zmxvdyk7CisgICAgcmlnaHRMYXlvdXRPdmVyZmxvdyA9IG1heCh4KCkgKyBsb2dpY2FsV2lkdGgo
KSwgcmlnaHRMYXlvdXRPdmVyZmxvdyk7CiAKICAgICBzZXRIb3Jpem9udGFsT3ZlcmZsb3dQb3Np
dGlvbnMobGVmdExheW91dE92ZXJmbG93LCByaWdodExheW91dE92ZXJmbG93LCBsZWZ0VmlzdWFs
T3ZlcmZsb3csIHJpZ2h0VmlzdWFsT3ZlcmZsb3cpOwogICAgIHJldHVybiB4UG9zOwpAQCAtNTE2
LDcgKzUxNiw3IEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc1ZlcnRpY2FsbHkKICAg
ICAgICAgY3Vyci0+c2V0WShuZXdZKTsKIAogICAgICAgICBpZiAoY2hpbGRBZmZlY3RzVG9wQm90
dG9tUG9zKSB7Ci0gICAgICAgICAgICBpbnQgYm94SGVpZ2h0ID0gY3Vyci0+aGVpZ2h0KCk7Cisg
ICAgICAgICAgICBpbnQgYm94SGVpZ2h0ID0gY3Vyci0+bG9naWNhbEhlaWdodCgpOwogICAgICAg
ICAgICAgc2VsZWN0aW9uVG9wID0gbWluKHNlbGVjdGlvblRvcCwgbmV3WSk7CiAgICAgICAgICAg
ICBzZWxlY3Rpb25Cb3R0b20gPSBtYXgoc2VsZWN0aW9uQm90dG9tLCBuZXdZICsgYm94SGVpZ2h0
KTsKICAgICAgICAgfQpAQCAtNTI3LDE0ICs1MjcsMTQgQEAgdm9pZCBJbmxpbmVGbG93Qm94Ojpw
bGFjZUJveGVzVmVydGljYWxseQogICAgICAgICBzZXRZKHkoKSArIGJhc2VsaW5lUG9zaXRpb24o
dHJ1ZSkgLSBmb250LmFzY2VudCgpKTsKICAgICAgICAgaWYgKGhhc1RleHRDaGlsZHJlbigpIHx8
IHN0cmljdE1vZGUpIHsKICAgICAgICAgICAgIHNlbGVjdGlvblRvcCA9IG1pbihzZWxlY3Rpb25U
b3AsIHkoKSk7Ci0gICAgICAgICAgICBzZWxlY3Rpb25Cb3R0b20gPSBtYXgoc2VsZWN0aW9uQm90
dG9tLCB5KCkgKyBoZWlnaHQoKSk7CisgICAgICAgICAgICBzZWxlY3Rpb25Cb3R0b20gPSBtYXgo
c2VsZWN0aW9uQm90dG9tLCB5KCkgKyBsb2dpY2FsSGVpZ2h0KCkpOwogICAgICAgICB9CiAgICAg
fQogfQogCiB2b2lkIElubGluZUZsb3dCb3g6OmNvbXB1dGVWZXJ0aWNhbE92ZXJmbG93KGludCBs
aW5lVG9wLCBpbnQgbGluZUJvdHRvbSwgYm9vbCBzdHJpY3RNb2RlLCBHbHlwaE92ZXJmbG93QW5k
RmFsbGJhY2tGb250c01hcCYgdGV4dEJveERhdGFNYXApCiB7Ci0gICAgaW50IGJveEhlaWdodCA9
IGhlaWdodCgpOworICAgIGludCBib3hIZWlnaHQgPSBsb2dpY2FsSGVpZ2h0KCk7CiAKICAgICAv
LyBBbnkgc3BpbGxhZ2Ugb3V0c2lkZSBvZiB0aGUgbGluZSB0b3AgYW5kIGJvdHRvbSBpcyBub3Qg
Y29uc2lkZXJlZCBvdmVyZmxvdy4gIFdlIGp1c3QgaWdub3JlIHRoaXMsIHNpbmNlIGl0IG9ubHkg
aGFwcGVucwogICAgIC8vIGZyb20gdGhlICJ5b3VyIGFzY2VudC9kZXNjZW50IGRvbid0IGFmZmVj
dCB0aGUgbGluZSIgcXVpcmsuCkBAIC01ODMsNyArNTgzLDcgQEAgdm9pZCBJbmxpbmVGbG93Qm94
Ojpjb21wdXRlVmVydGljYWxPdmVyZgogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgICAgICB0b3BWaXN1YWxPdmVyZmxvdyA9IG1pbihjdXJyLT55KCkgKyBjaGlsZE92ZXJmbG93
VG9wLCB0b3BWaXN1YWxPdmVyZmxvdyk7Ci0gICAgICAgICAgICBib3R0b21WaXN1YWxPdmVyZmxv
dyA9IG1heChjdXJyLT55KCkgKyB0ZXh0LT5oZWlnaHQoKSArIGNoaWxkT3ZlcmZsb3dCb3R0b20s
IGJvdHRvbVZpc3VhbE92ZXJmbG93KTsKKyAgICAgICAgICAgIGJvdHRvbVZpc3VhbE92ZXJmbG93
ID0gbWF4KGN1cnItPnkoKSArIHRleHQtPmxvZ2ljYWxIZWlnaHQoKSArIGNoaWxkT3ZlcmZsb3dC
b3R0b20sIGJvdHRvbVZpc3VhbE92ZXJmbG93KTsKICAgICAgICAgfSBlbHNlICBpZiAoY3Vyci0+
cmVuZGVyZXIoKS0+aXNSZW5kZXJJbmxpbmUoKSkgewogICAgICAgICAgICAgSW5saW5lRmxvd0Jv
eCogZmxvdyA9IHN0YXRpY19jYXN0PElubGluZUZsb3dCb3gqPihjdXJyKTsKICAgICAgICAgICAg
IGZsb3ctPmNvbXB1dGVWZXJ0aWNhbE92ZXJmbG93KGxpbmVUb3AsIGxpbmVCb3R0b20sIHN0cmlj
dE1vZGUsIHRleHRCb3hEYXRhTWFwKTsKQEAgLTU5Niw3ICs1OTYsNyBAQCB2b2lkIElubGluZUZs
b3dCb3g6OmNvbXB1dGVWZXJ0aWNhbE92ZXJmCiAgICAgICAgICAgICBSZW5kZXJCb3gqIGJveCA9
IHRvUmVuZGVyQm94KGN1cnItPnJlbmRlcmVyKCkpOwogICAgICAgICAgICAgaW50IGJveFkgPSBj
dXJyLT55KCk7CiAgICAgICAgICAgICBpbnQgY2hpbGRUb3BPdmVyZmxvdyA9IGJveC0+aGFzT3Zl
cmZsb3dDbGlwKCkgPyAwIDogYm94LT50b3BMYXlvdXRPdmVyZmxvdygpOwotICAgICAgICAgICAg
aW50IGNoaWxkQm90dG9tT3ZlcmZsb3cgPSBib3gtPmhhc092ZXJmbG93Q2xpcCgpID8gY3Vyci0+
aGVpZ2h0KCkgOiBib3gtPmJvdHRvbUxheW91dE92ZXJmbG93KCk7CisgICAgICAgICAgICBpbnQg
Y2hpbGRCb3R0b21PdmVyZmxvdyA9IGJveC0+aGFzT3ZlcmZsb3dDbGlwKCkgPyBjdXJyLT5sb2dp
Y2FsSGVpZ2h0KCkgOiBib3gtPmJvdHRvbUxheW91dE92ZXJmbG93KCk7CiAgICAgICAgICAgICB0
b3BMYXlvdXRPdmVyZmxvdyA9IG1pbihib3hZICsgY2hpbGRUb3BPdmVyZmxvdywgdG9wTGF5b3V0
T3ZlcmZsb3cpOwogICAgICAgICAgICAgYm90dG9tTGF5b3V0T3ZlcmZsb3cgPSBtYXgoYm94WSAr
IGNoaWxkQm90dG9tT3ZlcmZsb3csIGJvdHRvbUxheW91dE92ZXJmbG93KTsKICAgICAgICAgICAg
IHRvcFZpc3VhbE92ZXJmbG93ID0gbWluKGJveFkgKyBib3gtPnRvcFZpc3VhbE92ZXJmbG93KCks
IHRvcFZpc3VhbE92ZXJmbG93KTsKQEAgLTYyMyw3ICs2MjMsNyBAQCBib29sIElubGluZUZsb3dC
b3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpCiAgICAgfQogCiAgICAgLy8gTm93IGNoZWNrIG91cnNl
bHZlcy4KLSAgICBJbnRSZWN0IHJlY3QodHggKyBtX3gsIHR5ICsgbV95LCBtX3dpZHRoLCBoZWln
aHQoKSk7CisgICAgSW50UmVjdCByZWN0KHR4ICsgbV94LCB0eSArIG1feSwgbV9sb2dpY2FsV2lk
dGgsIGxvZ2ljYWxIZWlnaHQoKSk7CiAgICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBy
ZWN0LmludGVyc2VjdHMocmVzdWx0LnJlY3RGcm9tUG9pbnQoeCwgeSkpKSB7CiAgICAgICAgIHJl
bmRlcmVyKCktPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4IC0gdHgsIHkg
LSB0eSkpOyAvLyBEb24ndCBhZGQgaW4gbV94IG9yIG1feSBoZXJlLCB3ZSB3YW50IGNvb3JkcyBp
biB0aGUgY29udGFpbmluZyBibG9jaydzIHNwYWNlLgogICAgICAgICBpZiAoIXJlc3VsdC5hZGRO
b2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KHJlbmRlcmVyKCktPm5vZGUoKSwgeCwgeSwgcmVjdCkp
CkBAIC03MjcsMTMgKzcyNywxMyBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBhaW50RmlsbExheWVy
KGNvbnN0CiAgICAgICAgIC8vIGJ1dCBpdCBpc24ndCBldmVuIGNsZWFyIGhvdyB0aGlzIHNob3Vs
ZCB3b3JrIGF0IGFsbC4KICAgICAgICAgaW50IHhPZmZzZXRPbkxpbmUgPSAwOwogICAgICAgICBm
b3IgKElubGluZUZsb3dCb3gqIGN1cnIgPSBwcmV2TGluZUJveCgpOyBjdXJyOyBjdXJyID0gY3Vy
ci0+cHJldkxpbmVCb3goKSkKLSAgICAgICAgICAgIHhPZmZzZXRPbkxpbmUgKz0gY3Vyci0+d2lk
dGgoKTsKKyAgICAgICAgICAgIHhPZmZzZXRPbkxpbmUgKz0gY3Vyci0+bG9naWNhbFdpZHRoKCk7
CiAgICAgICAgIGludCBzdGFydFggPSB0eCAtIHhPZmZzZXRPbkxpbmU7CiAgICAgICAgIGludCB0
b3RhbFdpZHRoID0geE9mZnNldE9uTGluZTsKICAgICAgICAgZm9yIChJbmxpbmVGbG93Qm94KiBj
dXJyID0gdGhpczsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkpCi0gICAgICAgICAg
ICB0b3RhbFdpZHRoICs9IGN1cnItPndpZHRoKCk7CisgICAgICAgICAgICB0b3RhbFdpZHRoICs9
IGN1cnItPmxvZ2ljYWxXaWR0aCgpOwogICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgp
OwotICAgICAgICBwYWludEluZm8uY29udGV4dC0+Y2xpcChJbnRSZWN0KHR4LCB0eSwgd2lkdGgo
KSwgaGVpZ2h0KCkpKTsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQtPmNsaXAoSW50UmVjdCh0
eCwgdHksIGxvZ2ljYWxXaWR0aCgpLCBsb2dpY2FsSGVpZ2h0KCkpKTsKICAgICAgICAgYm94TW9k
ZWxPYmplY3QoKS0+cGFpbnRGaWxsTGF5ZXJFeHRlbmRlZChwYWludEluZm8sIGMsIGZpbGxMYXll
ciwgc3RhcnRYLCB0eSwgdG90YWxXaWR0aCwgaCwgdGhpcywgb3ApOwogICAgICAgICBwYWludElu
Zm8uY29udGV4dC0+cmVzdG9yZSgpOwogICAgIH0KQEAgLTc1Nyw4ICs3NTcsOCBAQCB2b2lkIElu
bGluZUZsb3dCb3g6OnBhaW50Qm94RGVjb3JhdGlvbnMoCiAKICAgICBpbnQgeCA9IG1feDsKICAg
ICBpbnQgeSA9IG1feTsKLSAgICBpbnQgdyA9IHdpZHRoKCk7Ci0gICAgaW50IGggPSBoZWlnaHQo
KTsKKyAgICBpbnQgdyA9IGxvZ2ljYWxXaWR0aCgpOworICAgIGludCBoID0gbG9naWNhbEhlaWdo
dCgpOwogCiAgICAgLy8gQ29uc3RyYWluIG91ciBiYWNrZ3JvdW5kL2JvcmRlciBwYWludGluZyB0
byB0aGUgbGluZSB0b3AgYW5kIGJvdHRvbSBpZiBuZWNlc3NhcnkuCiAgICAgYm9vbCBub1F1aXJr
c01vZGUgPSByZW5kZXJlcigpLT5kb2N1bWVudCgpLT5pbk5vUXVpcmtzTW9kZSgpOwpAQCAtODEy
LDExICs4MTIsMTEgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEJveERlY29yYXRpb25zKAog
ICAgICAgICAgICAgICAgIC8vIGJ1dCBpdCBpc24ndCBldmVuIGNsZWFyIGhvdyB0aGlzIHNob3Vs
ZCB3b3JrIGF0IGFsbC4KICAgICAgICAgICAgICAgICBpbnQgeE9mZnNldE9uTGluZSA9IDA7CiAg
ICAgICAgICAgICAgICAgZm9yIChJbmxpbmVGbG93Qm94KiBjdXJyID0gcHJldkxpbmVCb3goKTsg
Y3VycjsgY3VyciA9IGN1cnItPnByZXZMaW5lQm94KCkpCi0gICAgICAgICAgICAgICAgICAgIHhP
ZmZzZXRPbkxpbmUgKz0gY3Vyci0+d2lkdGgoKTsKKyAgICAgICAgICAgICAgICAgICAgeE9mZnNl
dE9uTGluZSArPSBjdXJyLT5sb2dpY2FsV2lkdGgoKTsKICAgICAgICAgICAgICAgICBpbnQgc3Rh
cnRYID0gdHggLSB4T2Zmc2V0T25MaW5lOwogICAgICAgICAgICAgICAgIGludCB0b3RhbFdpZHRo
ID0geE9mZnNldE9uTGluZTsKICAgICAgICAgICAgICAgICBmb3IgKElubGluZUZsb3dCb3gqIGN1
cnIgPSB0aGlzOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkKLSAgICAgICAgICAg
ICAgICAgICAgdG90YWxXaWR0aCArPSBjdXJyLT53aWR0aCgpOworICAgICAgICAgICAgICAgICAg
ICB0b3RhbFdpZHRoICs9IGN1cnItPmxvZ2ljYWxXaWR0aCgpOwogICAgICAgICAgICAgICAgIGNv
bnRleHQtPnNhdmUoKTsKICAgICAgICAgICAgICAgICBjb250ZXh0LT5jbGlwKEludFJlY3QodHgs
IHR5LCB3LCBoKSk7CiAgICAgICAgICAgICAgICAgYm94TW9kZWxPYmplY3QoKS0+cGFpbnRCb3Jk
ZXIoY29udGV4dCwgc3RhcnRYLCB0eSwgdG90YWxXaWR0aCwgaCwgcmVuZGVyZXIoKS0+c3R5bGUo
KSk7CkBAIC04MzMsOCArODMzLDggQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludE1hc2soUGFp
bnRJbmZvJgogCiAgICAgaW50IHggPSBtX3g7CiAgICAgaW50IHkgPSBtX3k7Ci0gICAgaW50IHcg
PSB3aWR0aCgpOwotICAgIGludCBoID0gaGVpZ2h0KCk7CisgICAgaW50IHcgPSBsb2dpY2FsV2lk
dGgoKTsKKyAgICBpbnQgaCA9IGxvZ2ljYWxIZWlnaHQoKTsKIAogICAgIC8vIENvbnN0cmFpbiBv
dXIgYmFja2dyb3VuZC9ib3JkZXIgcGFpbnRpbmcgdG8gdGhlIGxpbmUgdG9wIGFuZCBib3R0b20g
aWYgbmVjZXNzYXJ5LgogICAgIGJvb2wgbm9RdWlya3NNb2RlID0gcmVuZGVyZXIoKS0+ZG9jdW1l
bnQoKS0+aW5Ob1F1aXJrc01vZGUoKTsKQEAgLTg4MywxMSArODgzLDExIEBAIHZvaWQgSW5saW5l
Rmxvd0JveDo6cGFpbnRNYXNrKFBhaW50SW5mbyYKICAgICAgICAgLy8gV2UgbmVlZCB0byBhZGp1
c3QgX3R4IGFuZCBfdHkgYnkgdGhlIHdpZHRoIG9mIGFsbCBwcmV2aW91cyBsaW5lcy4KICAgICAg
ICAgaW50IHhPZmZzZXRPbkxpbmUgPSAwOwogICAgICAgICBmb3IgKElubGluZUZsb3dCb3gqIGN1
cnIgPSBwcmV2TGluZUJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+cHJldkxpbmVCb3goKSkKLSAg
ICAgICAgICAgIHhPZmZzZXRPbkxpbmUgKz0gY3Vyci0+d2lkdGgoKTsKKyAgICAgICAgICAgIHhP
ZmZzZXRPbkxpbmUgKz0gY3Vyci0+bG9naWNhbFdpZHRoKCk7CiAgICAgICAgIGludCBzdGFydFgg
PSB0eCAtIHhPZmZzZXRPbkxpbmU7CiAgICAgICAgIGludCB0b3RhbFdpZHRoID0geE9mZnNldE9u
TGluZTsKICAgICAgICAgZm9yIChJbmxpbmVGbG93Qm94KiBjdXJyID0gdGhpczsgY3VycjsgY3Vy
ciA9IGN1cnItPm5leHRMaW5lQm94KCkpCi0gICAgICAgICAgICB0b3RhbFdpZHRoICs9IGN1cnIt
PndpZHRoKCk7CisgICAgICAgICAgICB0b3RhbFdpZHRoICs9IGN1cnItPmxvZ2ljYWxXaWR0aCgp
OwogICAgICAgICBwYWludEluZm8uY29udGV4dC0+c2F2ZSgpOwogICAgICAgICBwYWludEluZm8u
Y29udGV4dC0+Y2xpcChJbnRSZWN0KHR4LCB0eSwgdywgaCkpOwogICAgICAgICBib3hNb2RlbE9i
amVjdCgpLT5wYWludE5pbmVQaWVjZUltYWdlKHBhaW50SW5mby5jb250ZXh0LCBzdGFydFgsIHR5
LCB0b3RhbFdpZHRoLCBoLCByZW5kZXJlcigpLT5zdHlsZSgpLCBtYXNrTmluZVBpZWNlSW1hZ2Us
IGNvbXBvc2l0ZU9wKTsKQEAgLTkzOSwxMSArOTM5LDExIEBAIHZvaWQgSW5saW5lRmxvd0JveDo6
cGFpbnRUZXh0RGVjb3JhdGlvbnMKICAgICAgICAgKCghcGFpbnRlZENoaWxkcmVuICYmICgoZGVj
byAmIFVOREVSTElORSkgfHwgKGRlY28gJiBPVkVSTElORSkpKSB8fCAocGFpbnRlZENoaWxkcmVu
ICYmIChkZWNvICYgTElORV9USFJPVUdIKSkpICYmCiAgICAgICAgIHNob3VsZERyYXdUZXh0RGVj
b3JhdGlvbihyZW5kZXJlcigpKSkgewogICAgICAgICBpbnQgeCA9IG1feCArIGJvcmRlckxlZnQo
KSArIHBhZGRpbmdMZWZ0KCk7Ci0gICAgICAgIGludCB3ID0gbV93aWR0aCAtIChib3JkZXJMZWZ0
KCkgKyBwYWRkaW5nTGVmdCgpICsgYm9yZGVyUmlnaHQoKSArIHBhZGRpbmdSaWdodCgpKTsKKyAg
ICAgICAgaW50IHcgPSBtX2xvZ2ljYWxXaWR0aCAtIChib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVm
dCgpICsgYm9yZGVyUmlnaHQoKSArIHBhZGRpbmdSaWdodCgpKTsKICAgICAgICAgUm9vdElubGlu
ZUJveCogcm9vdExpbmUgPSByb290KCk7CiAgICAgICAgIGlmIChyb290TGluZS0+ZWxsaXBzaXNC
b3goKSkgewogICAgICAgICAgICAgaW50IGVsbGlwc2lzWCA9IG1feCArIHJvb3RMaW5lLT5lbGxp
cHNpc0JveCgpLT54KCk7Ci0gICAgICAgICAgICBpbnQgZWxsaXBzaXNXaWR0aCA9IHJvb3RMaW5l
LT5lbGxpcHNpc0JveCgpLT53aWR0aCgpOworICAgICAgICAgICAgaW50IGVsbGlwc2lzV2lkdGgg
PSByb290TGluZS0+ZWxsaXBzaXNCb3goKS0+bG9naWNhbFdpZHRoKCk7CiAgICAgICAgICAgICBi
b29sIGx0ciA9IHJlbmRlcmVyKCktPnN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUjsKICAgICAg
ICAgICAgIGlmIChyb290TGluZSA9PSB0aGlzKSB7CiAgICAgICAgICAgICAgICAgLy8gVHJpbSB3
IGFuZCB4IHNvIHRoYXQgdGhlIHVuZGVybGluZSBpc24ndCBkcmF3biB1bmRlcm5lYXRoIHRoZSBl
bGxpcHNpcy4KQEAgLTExMDQsMTEgKzExMDQsMTEgQEAgaW50IElubGluZUZsb3dCb3g6OnBsYWNl
RWxsaXBzaXNCb3goYm9vbAogICAgICAgICAgICAgcmVzdWx0ID0gY3VyclJlc3VsdDsKIAogICAg
ICAgICBpZiAobHRyKSB7Ci0gICAgICAgICAgICB2aXNpYmxlTGVmdEVkZ2UgKz0gYm94LT53aWR0
aCgpOworICAgICAgICAgICAgdmlzaWJsZUxlZnRFZGdlICs9IGJveC0+bG9naWNhbFdpZHRoKCk7
CiAgICAgICAgICAgICBib3ggPSBib3gtPm5leHRPbkxpbmUoKTsKICAgICAgICAgfQogICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIHZpc2libGVSaWdodEVkZ2UgLT0gYm94LT53aWR0aCgpOwor
ICAgICAgICAgICAgdmlzaWJsZVJpZ2h0RWRnZSAtPSBib3gtPmxvZ2ljYWxXaWR0aCgpOwogICAg
ICAgICAgICAgYm94ID0gYm94LT5wcmV2T25MaW5lKCk7CiAgICAgICAgIH0KICAgICB9CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCShyZXZpc2lvbiA2NzkzMCkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDE5ICsxNTEs
MTkgQEAgcHVibGljOgogICAgIGludCBib3R0b21WaXNpYmxlT3ZlcmZsb3coKSBjb25zdCB7IHJl
dHVybiBzdGQ6Om1heChib3R0b21MYXlvdXRPdmVyZmxvdygpLCBib3R0b21WaXN1YWxPdmVyZmxv
dygpKTsgfQogICAgIGludCBsZWZ0VmlzaWJsZU92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gc3Rk
OjptaW4obGVmdExheW91dE92ZXJmbG93KCksIGxlZnRWaXN1YWxPdmVyZmxvdygpKTsgfQogICAg
IGludCByaWdodFZpc2libGVPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWF4KHJpZ2h0
TGF5b3V0T3ZlcmZsb3coKSwgcmlnaHRWaXN1YWxPdmVyZmxvdygpKTsgfQotICAgIEludFJlY3Qg
dmlzaWJsZU92ZXJmbG93UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cgPyBtX292ZXJm
bG93LT52aXNpYmxlT3ZlcmZsb3dSZWN0KCkgOiBJbnRSZWN0KG1feCwgbV95LCBtX3dpZHRoLCBo
ZWlnaHQoKSk7ICB9CisgICAgSW50UmVjdCB2aXNpYmxlT3ZlcmZsb3dSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9vdmVyZmxvdyA/IG1fb3ZlcmZsb3ctPnZpc2libGVPdmVyZmxvd1JlY3QoKSA6IElu
dFJlY3QobV94LCBtX3ksIG1fbG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KCkpOyAgfQogCiAg
ICAgaW50IHRvcExheW91dE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdyA/IG1f
b3ZlcmZsb3ctPnRvcExheW91dE92ZXJmbG93KCkgOiBtX3k7IH0KLSAgICBpbnQgYm90dG9tTGF5
b3V0T3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93ID8gbV9vdmVyZmxvdy0+Ym90
dG9tTGF5b3V0T3ZlcmZsb3coKSA6IG1feSArIGhlaWdodCgpOyB9CisgICAgaW50IGJvdHRvbUxh
eW91dE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdyA/IG1fb3ZlcmZsb3ctPmJv
dHRvbUxheW91dE92ZXJmbG93KCkgOiBtX3kgKyBsb2dpY2FsSGVpZ2h0KCk7IH0KICAgICBpbnQg
bGVmdExheW91dE92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdyA/IG1fb3ZlcmZs
b3ctPmxlZnRMYXlvdXRPdmVyZmxvdygpIDogbV94OyB9Ci0gICAgaW50IHJpZ2h0TGF5b3V0T3Zl
cmZsb3coKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93ID8gbV9vdmVyZmxvdy0+cmlnaHRMYXlv
dXRPdmVyZmxvdygpIDogbV94ICsgbV93aWR0aDsgfQotICAgIEludFJlY3QgbGF5b3V0T3ZlcmZs
b3dSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdyA/IG1fb3ZlcmZsb3ctPmxheW91dE92
ZXJmbG93UmVjdCgpIDogSW50UmVjdChtX3gsIG1feSwgbV93aWR0aCwgaGVpZ2h0KCkpOyB9Cisg
ICAgaW50IHJpZ2h0TGF5b3V0T3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93ID8g
bV9vdmVyZmxvdy0+cmlnaHRMYXlvdXRPdmVyZmxvdygpIDogbV94ICsgbV9sb2dpY2FsV2lkdGg7
IH0KKyAgICBJbnRSZWN0IGxheW91dE92ZXJmbG93UmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb3Zl
cmZsb3cgPyBtX292ZXJmbG93LT5sYXlvdXRPdmVyZmxvd1JlY3QoKSA6IEludFJlY3QobV94LCBt
X3ksIG1fbG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KCkpOyB9CiAKICAgICBpbnQgdG9wVmlz
dWFsT3ZlcmZsb3coKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93ID8gbV9vdmVyZmxvdy0+dG9w
VmlzdWFsT3ZlcmZsb3coKSA6IG1feTsgfQotICAgIGludCBib3R0b21WaXN1YWxPdmVyZmxvdygp
IGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cgPyBtX292ZXJmbG93LT5ib3R0b21WaXN1YWxPdmVy
ZmxvdygpIDogbV95ICsgaGVpZ2h0KCk7IH0KKyAgICBpbnQgYm90dG9tVmlzdWFsT3ZlcmZsb3co
KSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93ID8gbV9vdmVyZmxvdy0+Ym90dG9tVmlzdWFsT3Zl
cmZsb3coKSA6IG1feSArIGxvZ2ljYWxIZWlnaHQoKTsgfQogICAgIGludCBsZWZ0VmlzdWFsT3Zl
cmZsb3coKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93ID8gbV9vdmVyZmxvdy0+bGVmdFZpc3Vh
bE92ZXJmbG93KCkgOiBtX3g7IH0KLSAgICBpbnQgcmlnaHRWaXN1YWxPdmVyZmxvdygpIGNvbnN0
IHsgcmV0dXJuIG1fb3ZlcmZsb3cgPyBtX292ZXJmbG93LT5yaWdodFZpc3VhbE92ZXJmbG93KCkg
OiBtX3ggKyBtX3dpZHRoOyB9Ci0gICAgSW50UmVjdCB2aXN1YWxPdmVyZmxvd1JlY3QoKSBjb25z
dCB7IHJldHVybiBtX292ZXJmbG93ID8gbV9vdmVyZmxvdy0+dmlzdWFsT3ZlcmZsb3dSZWN0KCkg
OiBJbnRSZWN0KG1feCwgbV95LCBtX3dpZHRoLCBoZWlnaHQoKSk7IH0KKyAgICBpbnQgcmlnaHRW
aXN1YWxPdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3cgPyBtX292ZXJmbG93LT5y
aWdodFZpc3VhbE92ZXJmbG93KCkgOiBtX3ggKyBtX2xvZ2ljYWxXaWR0aDsgfQorICAgIEludFJl
Y3QgdmlzdWFsT3ZlcmZsb3dSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vdmVyZmxvdyA/IG1fb3Zl
cmZsb3ctPnZpc3VhbE92ZXJmbG93UmVjdCgpIDogSW50UmVjdChtX3gsIG1feSwgbV9sb2dpY2Fs
V2lkdGgsIGxvZ2ljYWxIZWlnaHQoKSk7IH0KIAogICAgIHZvaWQgc2V0SG9yaXpvbnRhbE92ZXJm
bG93UG9zaXRpb25zKGludCBsZWZ0TGF5b3V0T3ZlcmZsb3csIGludCByaWdodExheW91dE92ZXJm
bG93LCBpbnQgbGVmdFZpc3VhbE92ZXJmbG93LCBpbnQgcmlnaHRWaXN1YWxPdmVyZmxvdyk7CiAg
ICAgdm9pZCBzZXRWZXJ0aWNhbE92ZXJmbG93UG9zaXRpb25zKGludCB0b3BMYXlvdXRPdmVyZmxv
dywgaW50IGJvdHRvbUxheW91dE92ZXJmbG93LCBpbnQgdG9wVmlzdWFsT3ZlcmZsb3csIGludCBi
b3R0b21WaXN1YWxPdmVyZmxvdywgaW50IGJveEhlaWdodCk7CkBAIC0xOTEsOSArMTkxLDkgQEAg
cHJvdGVjdGVkOgogaW5saW5lIHZvaWQgSW5saW5lRmxvd0JveDo6c2V0SG9yaXpvbnRhbE92ZXJm
bG93UG9zaXRpb25zKGludCBsZWZ0TGF5b3V0T3ZlcmZsb3csIGludCByaWdodExheW91dE92ZXJm
bG93LCBpbnQgbGVmdFZpc3VhbE92ZXJmbG93LCBpbnQgcmlnaHRWaXN1YWxPdmVyZmxvdykgCiB7
IAogICAgIGlmICghbV9vdmVyZmxvdykgewotICAgICAgICBpZiAobGVmdExheW91dE92ZXJmbG93
ID09IG1feCAmJiByaWdodExheW91dE92ZXJmbG93ID09IG1feCArIG1fd2lkdGggJiYgbGVmdFZp
c3VhbE92ZXJmbG93ID09IG1feCAmJiByaWdodFZpc3VhbE92ZXJmbG93ID09IG1feCArIG1fd2lk
dGgpCisgICAgICAgIGlmIChsZWZ0TGF5b3V0T3ZlcmZsb3cgPT0gbV94ICYmIHJpZ2h0TGF5b3V0
T3ZlcmZsb3cgPT0gbV94ICsgbV9sb2dpY2FsV2lkdGggJiYgbGVmdFZpc3VhbE92ZXJmbG93ID09
IG1feCAmJiByaWdodFZpc3VhbE92ZXJmbG93ID09IG1feCArIG1fbG9naWNhbFdpZHRoKQogICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX292ZXJmbG93ID0gYWRvcHRQdHIobmV3IFJlbmRl
ck92ZXJmbG93KEludFJlY3QobV94LCBtX3ksIG1fd2lkdGgsIG1fcmVuZGVyZXItPnN0eWxlKG1f
Zmlyc3RMaW5lKS0+Zm9udCgpLmhlaWdodCgpKSkpOyAgICAKKyAgICAgICAgbV9vdmVyZmxvdyA9
IGFkb3B0UHRyKG5ldyBSZW5kZXJPdmVyZmxvdyhJbnRSZWN0KG1feCwgbV95LCBtX2xvZ2ljYWxX
aWR0aCwgbV9yZW5kZXJlci0+c3R5bGUobV9maXJzdExpbmUpLT5mb250KCkuaGVpZ2h0KCkpKSk7
ICAgIAogICAgIH0KIAogICAgIG1fb3ZlcmZsb3ctPnNldExlZnRMYXlvdXRPdmVyZmxvdyhsZWZ0
TGF5b3V0T3ZlcmZsb3cpOwpAQCAtMjA3LDcgKzIwNyw3IEBAIGlubGluZSB2b2lkIElubGluZUZs
b3dCb3g6OnNldFZlcnRpY2FsT3YKICAgICBpZiAoIW1fb3ZlcmZsb3cpIHsKICAgICAgICAgaWYg
KHRvcExheW91dE92ZXJmbG93ID09IG1feSAmJiBib3R0b21MYXlvdXRPdmVyZmxvdyA9PSBtX3kg
KyBib3hIZWlnaHQgJiYgdG9wVmlzdWFsT3ZlcmZsb3cgPT0gbV95ICYmIGJvdHRvbVZpc3VhbE92
ZXJmbG93ID09IG1feSArIGJveEhlaWdodCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
bV9vdmVyZmxvdyA9IGFkb3B0UHRyKG5ldyBSZW5kZXJPdmVyZmxvdyhJbnRSZWN0KG1feCwgbV95
LCBtX3dpZHRoLCBib3hIZWlnaHQpKSk7CisgICAgICAgIG1fb3ZlcmZsb3cgPSBhZG9wdFB0cihu
ZXcgUmVuZGVyT3ZlcmZsb3coSW50UmVjdChtX3gsIG1feSwgbV9sb2dpY2FsV2lkdGgsIGJveEhl
aWdodCkpKTsKICAgICB9CiAKICAgICBtX292ZXJmbG93LT5zZXRUb3BMYXlvdXRPdmVyZmxvdyh0
b3BMYXlvdXRPdmVyZmxvdyk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAko
cmV2aXNpb24gNjc5MzApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM5LDEwICsxMzksMTAgQEAgSW50UmVjdCBJbmxpbmVUZXh0Qm94
OjpzZWxlY3Rpb25SZWN0KGludAogCiAgICAgSW50UmVjdCByID0gZW5jbG9zaW5nSW50UmVjdChm
LnNlbGVjdGlvblJlY3RGb3JUZXh0KFRleHRSdW4oY2hhcmFjdGVycywgbGVuLCB0ZXh0T2JqLT5h
bGxvd1RhYnMoKSwgdGV4dFBvcygpLCBtX3RvQWRkLCBkaXJlY3Rpb24oKSA9PSBSVEwsIG1fZGly
T3ZlcnJpZGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJbnRQb2ludCh0eCArIG1feCwgdHkgKyBzZWxUb3ApLCBzZWxIZWlnaHQsIHNQ
b3MsIGVQb3MpKTsKLSAgICBpZiAoci54KCkgPiB0eCArIG1feCArIG1fd2lkdGgpCisgICAgaWYg
KHIueCgpID4gdHggKyBtX3ggKyBtX2xvZ2ljYWxXaWR0aCkKICAgICAgICAgci5zZXRXaWR0aCgw
KTsKLSAgICBlbHNlIGlmIChyLnJpZ2h0KCkgLSAxID4gdHggKyBtX3ggKyBtX3dpZHRoKQotICAg
ICAgICByLnNldFdpZHRoKHR4ICsgbV94ICsgbV93aWR0aCAtIHIueCgpKTsKKyAgICBlbHNlIGlm
IChyLnJpZ2h0KCkgLSAxID4gdHggKyBtX3ggKyBtX2xvZ2ljYWxXaWR0aCkKKyAgICAgICAgci5z
ZXRXaWR0aCh0eCArIG1feCArIG1fbG9naWNhbFdpZHRoIC0gci54KCkpOwogICAgIHJldHVybiBy
OwogfQogCkBAIC0xODIsNyArMTgyLDcgQEAgaW50IElubGluZVRleHRCb3g6OnBsYWNlRWxsaXBz
aXNCb3goYm9vbAogICAgIC8vIExUUjogdGhlIGxlZnQgZWRnZSBvZiB0aGUgZWxsaXBzaXMgaXMg
dG8gdGhlIGxlZnQgb2Ygb3VyIHRleHQgcnVuLgogICAgIC8vIFJUTDogdGhlIHJpZ2h0IGVkZ2Ug
b2YgdGhlIGVsbGlwc2lzIGlzIHRvIHRoZSByaWdodCBvZiBvdXIgdGV4dCBydW4uCiAgICAgYm9v
bCBsdHJGdWxsVHJ1bmNhdGlvbiA9IGZsb3dJc0xUUiAmJiBlbGxpcHNpc1ggPD0gbV94OwotICAg
IGJvb2wgcnRsRnVsbFRydW5jYXRpb24gPSAhZmxvd0lzTFRSICYmIGVsbGlwc2lzWCA+PSAobV94
ICsgbV93aWR0aCk7CisgICAgYm9vbCBydGxGdWxsVHJ1bmNhdGlvbiA9ICFmbG93SXNMVFIgJiYg
ZWxsaXBzaXNYID49IChtX3ggKyBtX2xvZ2ljYWxXaWR0aCk7CiAgICAgaWYgKGx0ckZ1bGxUcnVu
Y2F0aW9uIHx8IHJ0bEZ1bGxUcnVuY2F0aW9uKSB7CiAgICAgICAgIC8vIFRvbyBmYXIuICBKdXN0
IHNldCBmdWxsIHRydW5jYXRpb24sIGJ1dCByZXR1cm4gLTEgYW5kIGxldCB0aGUgZWxsaXBzaXMg
anVzdCBiZSBwbGFjZWQgYXQgdGhlIGVkZ2Ugb2YgdGhlIGJveC4KICAgICAgICAgbV90cnVuY2F0
aW9uID0gY0Z1bGxUcnVuY2F0aW9uOwpAQCAtMTkwLDcgKzE5MCw3IEBAIGludCBJbmxpbmVUZXh0
Qm94OjpwbGFjZUVsbGlwc2lzQm94KGJvb2wKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAot
ICAgIGJvb2wgbHRyRWxsaXBzaXNXaXRoaW5Cb3ggPSBmbG93SXNMVFIgJiYgKGVsbGlwc2lzWCA8
IG1feCArIG1fd2lkdGgpOworICAgIGJvb2wgbHRyRWxsaXBzaXNXaXRoaW5Cb3ggPSBmbG93SXNM
VFIgJiYgKGVsbGlwc2lzWCA8IG1feCArIG1fbG9naWNhbFdpZHRoKTsKICAgICBib29sIHJ0bEVs
bGlwc2lzV2l0aGluQm94ID0gIWZsb3dJc0xUUiAmJiAoZWxsaXBzaXNYID4gbV94KTsKICAgICBp
ZiAobHRyRWxsaXBzaXNXaXRoaW5Cb3ggfHwgcnRsRWxsaXBzaXNXaXRoaW5Cb3gpIHsKICAgICAg
ICAgZm91bmRCb3ggPSB0cnVlOwpAQCAtMjAyLDcgKzIwMiw3IEBAIGludCBJbmxpbmVUZXh0Qm94
OjpwbGFjZUVsbGlwc2lzQm94KGJvb2wKICAgICAgICAgaWYgKGx0ciAhPSBmbG93SXNMVFIpIHsK
ICAgICAgICAgICAvLyBXaWR0aCBpbiBwaXhlbHMgb2YgdGhlIHZpc2libGUgcG9ydGlvbiBvZiB0
aGUgYm94LCBleGNsdWRpbmcgdGhlIGVsbGlwc2lzLgogICAgICAgICAgIGludCB2aXNpYmxlQm94
V2lkdGggPSB2aXNpYmxlUmlnaHRFZGdlIC0gdmlzaWJsZUxlZnRFZGdlICAtIGVsbGlwc2lzV2lk
dGg7Ci0gICAgICAgICAgZWxsaXBzaXNYID0gbHRyID8gbV94ICsgdmlzaWJsZUJveFdpZHRoIDog
bV94ICsgbV93aWR0aCAtIHZpc2libGVCb3hXaWR0aDsKKyAgICAgICAgICBlbGxpcHNpc1ggPSBs
dHIgPyBtX3ggKyB2aXNpYmxlQm94V2lkdGggOiBtX3ggKyBtX2xvZ2ljYWxXaWR0aCAtIHZpc2li
bGVCb3hXaWR0aDsKICAgICAgICAgfQogCiAgICAgICAgIGludCBvZmZzZXQgPSBvZmZzZXRGb3JQ
b3NpdGlvbihlbGxpcHNpc1gsIGZhbHNlKTsKQEAgLTIyOCw3ICsyMjgsNyBAQCBpbnQgSW5saW5l
VGV4dEJveDo6cGxhY2VFbGxpcHNpc0JveChib29sCiAgICAgICAgIGlmIChmbG93SXNMVFIpCiAg
ICAgICAgICAgICByZXR1cm4gbV94ICsgd2lkdGhPZlZpc2libGVUZXh0OwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICByZXR1cm4gKG1feCArIG1fd2lkdGgpIC0gd2lkdGhPZlZpc2libGVUZXh0
IC0gZWxsaXBzaXNXaWR0aDsKKyAgICAgICAgICAgIHJldHVybiAobV94ICsgbV9sb2dpY2FsV2lk
dGgpIC0gd2lkdGhPZlZpc2libGVUZXh0IC0gZWxsaXBzaXNXaWR0aDsKICAgICB9CiAgICAgcmV0
dXJuIC0xOwogfQpAQCAtMjg2LDcgKzI4Niw3IEBAIGJvb2wgSW5saW5lVGV4dEJveDo6bm9kZUF0
UG9pbnQoY29uc3QgSGkKICAgICBpZiAoaXNMaW5lQnJlYWsoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgSW50UmVjdCByZWN0KHR4ICsgbV94LCB0eSArIG1feSwgbV93aWR0aCwgaGVp
Z2h0KCkpOworICAgIEludFJlY3QgcmVjdCh0eCArIG1feCwgdHkgKyBtX3ksIG1fbG9naWNhbFdp
ZHRoLCBsb2dpY2FsSGVpZ2h0KCkpOwogICAgIGlmIChtX3RydW5jYXRpb24gIT0gY0Z1bGxUcnVu
Y2F0aW9uICYmIHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiByZWN0LmludGVyc2VjdHMocmVzdWx0
LnJlY3RGcm9tUG9pbnQoeCwgeSkpKSB7CiAgICAgICAgIHJlbmRlcmVyKCktPnVwZGF0ZUhpdFRl
c3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4IC0gdHgsIHkgLSB0eSkpOwogICAgICAgICBpZiAo
IXJlc3VsdC5hZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KHJlbmRlcmVyKCktPm5vZGUoKSwg
eCwgeSwgcmVjdCkpCkBAIC0zNjcsOSArMzY3LDkgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWlu
dChQYWludEluZm8mIHBhaQogICAgIC8vIEZJWE1FOiBUZWNobmljYWxseSB3ZSdyZSBwb3RlbnRp
YWxseSBpbmNvcnBvcmF0aW5nIG90aGVyIHZpc3VhbCBvdmVyZmxvdyB0aGF0IGhhZCBub3RoaW5n
IHRvIGRvIHdpdGggdXMuCiAgICAgLy8gV291bGQgaXQgYmUgc2ltcGxlciB0byBqdXN0IGNoZWNr
IG91ciBvd24gc2hhZG93IGFuZCBzdHJva2Ugb3ZlcmZsb3cgYnkgaGFuZCBoZXJlPwogICAgIGlu
dCBsZWZ0T3ZlcmZsb3cgPSBwYXJlbnQoKS0+eCgpIC0gcGFyZW50KCktPmxlZnRWaXN1YWxPdmVy
ZmxvdygpOwotICAgIGludCByaWdodE92ZXJmbG93ID0gcGFyZW50KCktPnJpZ2h0VmlzdWFsT3Zl
cmZsb3coKSAtIChwYXJlbnQoKS0+eCgpICsgcGFyZW50KCktPndpZHRoKCkpOworICAgIGludCBy
aWdodE92ZXJmbG93ID0gcGFyZW50KCktPnJpZ2h0VmlzdWFsT3ZlcmZsb3coKSAtIChwYXJlbnQo
KS0+eCgpICsgcGFyZW50KCktPmxvZ2ljYWxXaWR0aCgpKTsKICAgICBpbnQgeFBvcyA9IHR4ICsg
bV94IC0gbGVmdE92ZXJmbG93OwotICAgIGludCB3ID0gd2lkdGgoKSArIGxlZnRPdmVyZmxvdyAr
IHJpZ2h0T3ZlcmZsb3c7CisgICAgaW50IHcgPSBsb2dpY2FsV2lkdGgoKSArIGxlZnRPdmVyZmxv
dyArIHJpZ2h0T3ZlcmZsb3c7CiAgICAgaWYgKHhQb3MgPj0gcGFpbnRJbmZvLnJlY3QucmlnaHQo
KSB8fCB4UG9zICsgdyA8PSBwYWludEluZm8ucmVjdC54KCkpCiAgICAgICAgIHJldHVybjsKIApA
QCAtMzkzLDcgKzM5Myw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBw
YWkKICAgICAgICAgICAgIC8vIE5PVEU6IFdlYktpdCdzIGJlaGF2aW9yIGRpZmZlcnMgZnJvbSB0
aGF0IG9mIElFIHdoaWNoIGFwcGVhcnMgdG8ganVzdCBvdmVybGF5IHRoZSBlbGxpcHNpcyBvbiB0
b3Agb2YgdGhlCiAgICAgICAgICAgICAvLyB0cnVuY2F0ZWQgc3RyaW5nIGkuZS4gIHxIZWxsb3xD
QkF8IC0+IHwuLi5sb3xDQkF8CiAgICAgICAgICAgICBpbnQgd2lkdGhPZlZpc2libGVUZXh0ID0g
dG9SZW5kZXJUZXh0KHJlbmRlcmVyKCkpLT53aWR0aChtX3N0YXJ0LCBtX3RydW5jYXRpb24sIHRl
eHRQb3MoKSwgbV9maXJzdExpbmUpOwotICAgICAgICAgICAgaW50IHdpZHRoT2ZIaWRkZW5UZXh0
ID0gbV93aWR0aCAtIHdpZHRoT2ZWaXNpYmxlVGV4dDsKKyAgICAgICAgICAgIGludCB3aWR0aE9m
SGlkZGVuVGV4dCA9IG1fbG9naWNhbFdpZHRoIC0gd2lkdGhPZlZpc2libGVUZXh0OwogICAgICAg
ICAgICAgLy8gRklYTUU6IFRoZSBoaXQgdGVzdGluZyBsb2dpYyBhbHNvIG5lZWRzIHRvIHRha2Ug
dGhpcyB0cmFuc2xhdGlvbiBpbnQgYWNjb3VudC4KICAgICAgICAgICAgIHR4ICs9IGRpcmVjdGlv
bigpID09IExUUiA/IHdpZHRoT2ZIaWRkZW5UZXh0IDogLXdpZHRoT2ZIaWRkZW5UZXh0OwogICAg
ICAgICB9CkBAIC01MjYsOSArNTI2LDkgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWlu
dEluZm8mIHBhaQogICAgICAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQoY29udGV4dCwgdGV4dEZp
bGxDb2xvciwgdGV4dFN0cm9rZUNvbG9yLCB0ZXh0U3Ryb2tlV2lkdGgsIHN0eWxlVG9Vc2UtPmNv
bG9yU3BhY2UoKSk7CiAgICAgICAgIGlmICghcGFpbnRTZWxlY3RlZFRleHRTZXBhcmF0ZWx5IHx8
IGVQb3MgPD0gc1BvcykgewogICAgICAgICAgICAgLy8gRklYTUU6IFRydW5jYXRlIHJpZ2h0LXRv
LWxlZnQgdGV4dCBjb3JyZWN0bHkuCi0gICAgICAgICAgICBwYWludFRleHRXaXRoU2hhZG93cyhj
b250ZXh0LCBmb250LCB0ZXh0UnVuLCAwLCBsZW5ndGgsIGxlbmd0aCwgdGV4dE9yaWdpbiwgbV94
ICsgdHgsIG1feSArIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSwgdGV4dFNoYWRvdywgdGV4dFN0cm9r
ZVdpZHRoID4gMCk7CisgICAgICAgICAgICBwYWludFRleHRXaXRoU2hhZG93cyhjb250ZXh0LCBm
b250LCB0ZXh0UnVuLCAwLCBsZW5ndGgsIGxlbmd0aCwgdGV4dE9yaWdpbiwgbV94ICsgdHgsIG1f
eSArIHR5LCBsb2dpY2FsV2lkdGgoKSwgbG9naWNhbEhlaWdodCgpLCB0ZXh0U2hhZG93LCB0ZXh0
U3Ryb2tlV2lkdGggPiAwKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBwYWludFRleHRX
aXRoU2hhZG93cyhjb250ZXh0LCBmb250LCB0ZXh0UnVuLCBlUG9zLCBzUG9zLCBsZW5ndGgsIHRl
eHRPcmlnaW4sIG1feCArIHR4LCBtX3kgKyB0eSwgd2lkdGgoKSwgaGVpZ2h0KCksIHRleHRTaGFk
b3csIHRleHRTdHJva2VXaWR0aCA+IDApOworICAgICAgICAgICAgcGFpbnRUZXh0V2l0aFNoYWRv
d3MoY29udGV4dCwgZm9udCwgdGV4dFJ1biwgZVBvcywgc1BvcywgbGVuZ3RoLCB0ZXh0T3JpZ2lu
LCBtX3ggKyB0eCwgbV95ICsgdHksIGxvZ2ljYWxXaWR0aCgpLCBsb2dpY2FsSGVpZ2h0KCksIHRl
eHRTaGFkb3csIHRleHRTdHJva2VXaWR0aCA+IDApOwogCiAgICAgICAgIGlmICh0ZXh0U3Ryb2tl
V2lkdGggPiAwKQogICAgICAgICAgICAgY29udGV4dC0+cmVzdG9yZSgpOwpAQCAtNTQwLDcgKzU0
MCw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWkKICAgICAgICAg
ICAgIGNvbnRleHQtPnNhdmUoKTsKIAogICAgICAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQoY29u
dGV4dCwgc2VsZWN0aW9uRmlsbENvbG9yLCBzZWxlY3Rpb25TdHJva2VDb2xvciwgc2VsZWN0aW9u
U3Ryb2tlV2lkdGgsIHN0eWxlVG9Vc2UtPmNvbG9yU3BhY2UoKSk7Ci0gICAgICAgIHBhaW50VGV4
dFdpdGhTaGFkb3dzKGNvbnRleHQsIGZvbnQsIHRleHRSdW4sIHNQb3MsIGVQb3MsIGxlbmd0aCwg
dGV4dE9yaWdpbiwgbV94ICsgdHgsIG1feSArIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSwgc2VsZWN0
aW9uU2hhZG93LCBzZWxlY3Rpb25TdHJva2VXaWR0aCA+IDApOworICAgICAgICBwYWludFRleHRX
aXRoU2hhZG93cyhjb250ZXh0LCBmb250LCB0ZXh0UnVuLCBzUG9zLCBlUG9zLCBsZW5ndGgsIHRl
eHRPcmlnaW4sIG1feCArIHR4LCBtX3kgKyB0eSwgbG9naWNhbFdpZHRoKCksIGxvZ2ljYWxIZWln
aHQoKSwgc2VsZWN0aW9uU2hhZG93LCBzZWxlY3Rpb25TdHJva2VXaWR0aCA+IDApOwogCiAgICAg
ICAgIGlmIChzZWxlY3Rpb25TdHJva2VXaWR0aCA+IDApCiAgICAgICAgICAgICBjb250ZXh0LT5y
ZXN0b3JlKCk7CkBAIC02MzMsNyArNjMzLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNl
bGVjdGlvbihHcmFwaAogICAgICAgICBlUG9zID0gbGVuZ3RoOwogICAgIH0KIAotICAgIGNvbnRl
eHQtPmNsaXAoSW50UmVjdChtX3ggKyB0eCwgeSArIHR5LCBtX3dpZHRoLCBoKSk7CisgICAgY29u
dGV4dC0+Y2xpcChJbnRSZWN0KG1feCArIHR4LCB5ICsgdHksIG1fbG9naWNhbFdpZHRoLCBoKSk7
CiAgICAgY29udGV4dC0+ZHJhd0hpZ2hsaWdodEZvclRleHQoZm9udCwgVGV4dFJ1bihjaGFyYWN0
ZXJzLCBsZW5ndGgsIHRleHRSZW5kZXJlcigpLT5hbGxvd1RhYnMoKSwgdGV4dFBvcygpLCBtX3Rv
QWRkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3Rpb24oKSA9PSBS
VEwsIG1fZGlyT3ZlcnJpZGUgfHwgc3R5bGUtPnZpc3VhbGx5T3JkZXJlZCgpKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRQb2ludChtX3ggKyB0eCwgeSArIHR5KSwgaCwg
Yywgc3R5bGUtPmNvbG9yU3BhY2UoKSwgc1BvcywgZVBvcyk7CkBAIC02NzUsOCArNjc1LDggQEAg
dm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludEN1c3RvbUhpZ2hsaWdodAogICAgICAgICByZXR1cm47
CiAKICAgICBSb290SW5saW5lQm94KiByID0gcm9vdCgpOwotICAgIEZsb2F0UmVjdCByb290UmVj
dCh0eCArIHItPngoKSwgdHkgKyBzZWxlY3Rpb25Ub3AoKSwgci0+d2lkdGgoKSwgc2VsZWN0aW9u
SGVpZ2h0KCkpOwotICAgIEZsb2F0UmVjdCB0ZXh0UmVjdCh0eCArIHgoKSwgcm9vdFJlY3QueSgp
LCB3aWR0aCgpLCByb290UmVjdC5oZWlnaHQoKSk7CisgICAgRmxvYXRSZWN0IHJvb3RSZWN0KHR4
ICsgci0+eCgpLCB0eSArIHNlbGVjdGlvblRvcCgpLCByLT5sb2dpY2FsV2lkdGgoKSwgc2VsZWN0
aW9uSGVpZ2h0KCkpOworICAgIEZsb2F0UmVjdCB0ZXh0UmVjdCh0eCArIHgoKSwgcm9vdFJlY3Qu
eSgpLCBsb2dpY2FsV2lkdGgoKSwgcm9vdFJlY3QuaGVpZ2h0KCkpOwogCiAgICAgcGFnZS0+Y2hy
b21lKCktPmNsaWVudCgpLT5wYWludEN1c3RvbUhpZ2hsaWdodChyZW5kZXJlcigpLT5ub2RlKCks
IHR5cGUsIHRleHRSZWN0LCByb290UmVjdCwgdHJ1ZSwgZmFsc2UpOwogfQpAQCAtNjkxLDExICs2
OTEsMTEgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb24oR3JhcAogICAgIGlm
IChtX3RydW5jYXRpb24gPT0gY0Z1bGxUcnVuY2F0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpbnQgd2lkdGggPSBtX3dpZHRoOworICAgIGludCB3aWR0aCA9IG1fbG9naWNhbFdpZHRoOwog
ICAgIGlmIChtX3RydW5jYXRpb24gIT0gY05vVHJ1bmNhdGlvbikgewogICAgICAgICB3aWR0aCA9
IHRvUmVuZGVyVGV4dChyZW5kZXJlcigpKS0+d2lkdGgobV9zdGFydCwgbV90cnVuY2F0aW9uLCB0
ZXh0UG9zKCksIG1fZmlyc3RMaW5lKTsKICAgICAgICAgaWYgKGRpcmVjdGlvbigpID09IFJUTCkK
LSAgICAgICAgICAgIHR4ICs9IChtX3dpZHRoIC0gd2lkdGgpOworICAgICAgICAgICAgdHggKz0g
KG1fbG9naWNhbFdpZHRoIC0gd2lkdGgpOwogICAgIH0KICAgICAKICAgICAvLyBHZXQgdGhlIHRl
eHQgZGVjb3JhdGlvbiBjb2xvcnMuCkBAIC03OTMsNyArNzkzLDcgQEAgdm9pZCBJbmxpbmVUZXh0
Qm94OjpwYWludFNwZWxsaW5nT3JHcmFtbQogICAgICAgICByZXR1cm47CiAKICAgICBpbnQgc3Rh
cnQgPSAwOyAgICAgICAgICAgICAgICAgIC8vIHN0YXJ0IG9mIGxpbmUgdG8gZHJhdywgcmVsYXRp
dmUgdG8gdHgKLSAgICBpbnQgd2lkdGggPSBtX3dpZHRoOyAgICAgICAgICAgIC8vIGhvdyBtdWNo
IGxpbmUgdG8gZHJhdworICAgIGludCB3aWR0aCA9IG1fbG9naWNhbFdpZHRoOyAgICAgICAgICAg
IC8vIGhvdyBtdWNoIGxpbmUgdG8gZHJhdwogCiAgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgd2Ug
bmVlZCB0byBtZWFzdXJlIHRleHQKICAgICBib29sIG1hcmtlclNwYW5zV2hvbGVCb3ggPSB0cnVl
OwpAQCAtODM3LDExICs4MzcsMTEgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNwZWxsaW5n
T3JHcmFtbQogICAgIC8vIHdlIHBpbiB0byB0d28gcGl4ZWxzIHVuZGVyIHRoZSBiYXNlbGluZS4K
ICAgICBpbnQgbGluZVRoaWNrbmVzcyA9IGNNaXNzcGVsbGluZ0xpbmVUaGlja25lc3M7CiAgICAg
aW50IGJhc2VsaW5lID0gcmVuZGVyZXIoKS0+c3R5bGUobV9maXJzdExpbmUpLT5mb250KCkuYXNj
ZW50KCk7Ci0gICAgaW50IGRlc2NlbnQgPSBoZWlnaHQoKSAtIGJhc2VsaW5lOworICAgIGludCBk
ZXNjZW50ID0gbG9naWNhbEhlaWdodCgpIC0gYmFzZWxpbmU7CiAgICAgaW50IHVuZGVybGluZU9m
ZnNldDsKICAgICBpZiAoZGVzY2VudCA8PSAoMiArIGxpbmVUaGlja25lc3MpKSB7CiAgICAgICAg
IC8vIFBsYWNlIHRoZSB1bmRlcmxpbmUgYXQgdGhlIHZlcnkgYm90dG9tIG9mIHRoZSB0ZXh0IGlu
IHNtYWxsL21lZGl1bSBmb250cy4KLSAgICAgICAgdW5kZXJsaW5lT2Zmc2V0ID0gaGVpZ2h0KCkg
LSBsaW5lVGhpY2tuZXNzOworICAgICAgICB1bmRlcmxpbmVPZmZzZXQgPSBsb2dpY2FsSGVpZ2h0
KCkgLSBsaW5lVGhpY2tuZXNzOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEluIGxhcmdlciBm
b250cywgdGhvdWdoLCBwbGFjZSB0aGUgdW5kZXJsaW5lIHVwIG5lYXIgdGhlIGJhc2VsaW5lIHRv
IHByZXZlbnQgYSBiaWcgZ2FwLgogICAgICAgICB1bmRlcmxpbmVPZmZzZXQgPSBiYXNlbGluZSAr
IDI7CkBAIC04NzIsNyArODcyLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRj
aE1hcmtlcgogICAgICAgICAgICAgcmVuZGVyZXIoKS0+dGhlbWUoKS0+cGxhdGZvcm1JbmFjdGl2
ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpOwogICAgICAgICBwdC0+c2F2ZSgpOwogICAgICAg
ICB1cGRhdGVHcmFwaGljc0NvbnRleHQocHQsIGNvbG9yLCBjb2xvciwgMCwgc3R5bGUtPmNvbG9y
U3BhY2UoKSk7ICAvLyBEb24ndCBkcmF3IHRleHQgYXQgYWxsIQotICAgICAgICBwdC0+Y2xpcChJ
bnRSZWN0KHR4ICsgbV94LCB0eSArIHksIG1fd2lkdGgsIGgpKTsKKyAgICAgICAgcHQtPmNsaXAo
SW50UmVjdCh0eCArIG1feCwgdHkgKyB5LCBtX2xvZ2ljYWxXaWR0aCwgaCkpOwogICAgICAgICBw
dC0+ZHJhd0hpZ2hsaWdodEZvclRleHQoZm9udCwgcnVuLCBJbnRQb2ludChtX3ggKyB0eCwgeSAr
IHR5KSwgaCwgY29sb3IsIHN0eWxlLT5jb2xvclNwYWNlKCksIHNQb3MsIGVQb3MpOwogICAgICAg
ICBwdC0+cmVzdG9yZSgpOwogICAgIH0KQEAgLTk2OSw3ICs5NjksNyBAQCB2b2lkIElubGluZVRl
eHRCb3g6OnBhaW50Q29tcG9zaXRpb25VbmRlCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBp
bnQgc3RhcnQgPSAwOyAgICAgICAgICAgICAgICAgLy8gc3RhcnQgb2YgbGluZSB0byBkcmF3LCBy
ZWxhdGl2ZSB0byB0eAotICAgIGludCB3aWR0aCA9IG1fd2lkdGg7ICAgICAgICAgICAvLyBob3cg
bXVjaCBsaW5lIHRvIGRyYXcKKyAgICBpbnQgd2lkdGggPSBtX2xvZ2ljYWxXaWR0aDsgICAgICAg
ICAgIC8vIGhvdyBtdWNoIGxpbmUgdG8gZHJhdwogICAgIGJvb2wgdXNlV2hvbGVXaWR0aCA9IHRy
dWU7CiAgICAgdW5zaWduZWQgcGFpbnRTdGFydCA9IG1fc3RhcnQ7CiAgICAgdW5zaWduZWQgcGFp
bnRFbmQgPSBlbmQoKSArIDE7IC8vIGVuZCBwb2ludHMgYXQgdGhlIGxhc3QgY2hhciwgbm90IHBh
c3QgaXQKQEAgLTk5NSw3ICs5OTUsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50Q29tcG9z
aXRpb25VbmRlCiAgICAgLy8gSWYgdGhlcmUncyBub3QgZW5vdWdoIHNwYWNlIHRoZSB1bmRlcmxp
bmUgd2lsbCB0b3VjaCBvciBvdmVybGFwIGNoYXJhY3RlcnMuCiAgICAgaW50IGxpbmVUaGlja25l
c3MgPSAxOwogICAgIGludCBiYXNlbGluZSA9IHJlbmRlcmVyKCktPnN0eWxlKG1fZmlyc3RMaW5l
KS0+Zm9udCgpLmFzY2VudCgpOwotICAgIGlmICh1bmRlcmxpbmUudGhpY2sgJiYgaGVpZ2h0KCkg
LSBiYXNlbGluZSA+PSAyKQorICAgIGlmICh1bmRlcmxpbmUudGhpY2sgJiYgbG9naWNhbEhlaWdo
dCgpIC0gYmFzZWxpbmUgPj0gMikKICAgICAgICAgbGluZVRoaWNrbmVzcyA9IDI7CiAKICAgICAv
LyBXZSBuZWVkIHRvIGhhdmUgc29tZSBzcGFjZSBiZXR3ZWVuIHVuZGVybGluZXMgb2Ygc3Vic2Vx
dWVudCBjbGF1c2VzLCBiZWNhdXNlIHNvbWUgaW5wdXQgbWV0aG9kcyBkbyBub3QgdXNlIGRpZmZl
cmVudCB1bmRlcmxpbmUgc3R5bGVzIGZvciB0aG9zZS4KQEAgLTEwMDUsNyArMTAwNSw3IEBAIHZv
aWQgSW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvblVuZGUKIAogICAgIGN0eC0+c2V0U3Ry
b2tlQ29sb3IodW5kZXJsaW5lLmNvbG9yLCByZW5kZXJlcigpLT5zdHlsZSgpLT5jb2xvclNwYWNl
KCkpOwogICAgIGN0eC0+c2V0U3Ryb2tlVGhpY2tuZXNzKGxpbmVUaGlja25lc3MpOwotICAgIGN0
eC0+ZHJhd0xpbmVGb3JUZXh0KEludFBvaW50KHR4ICsgc3RhcnQsIHR5ICsgaGVpZ2h0KCkgLSBs
aW5lVGhpY2tuZXNzKSwgd2lkdGgsIHRleHRSZW5kZXJlcigpLT5kb2N1bWVudCgpLT5wcmludGlu
ZygpKTsKKyAgICBjdHgtPmRyYXdMaW5lRm9yVGV4dChJbnRQb2ludCh0eCArIHN0YXJ0LCB0eSAr
IGxvZ2ljYWxIZWlnaHQoKSAtIGxpbmVUaGlja25lc3MpLCB3aWR0aCwgdGV4dFJlbmRlcmVyKCkt
PmRvY3VtZW50KCktPnByaW50aW5nKCkpOwogfQogCiBpbnQgSW5saW5lVGV4dEJveDo6Y2FyZXRN
aW5PZmZzZXQoKSBjb25zdApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAkocmV2aXNp
b24gNjc5MzApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc0LDcgKzc0LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGludCBzZWxlY3Rp
b25IZWlnaHQoKTsKIAogcHVibGljOgotICAgIHZpcnR1YWwgSW50UmVjdCBjYWxjdWxhdGVCb3Vu
ZGFyaWVzKCkgY29uc3QgeyByZXR1cm4gSW50UmVjdCh4KCksIHkoKSwgd2lkdGgoKSwgaGVpZ2h0
KCkpOyB9CisgICAgdmlydHVhbCBJbnRSZWN0IGNhbGN1bGF0ZUJvdW5kYXJpZXMoKSBjb25zdCB7
IHJldHVybiBJbnRSZWN0KHgoKSwgeSgpLCBsb2dpY2FsV2lkdGgoKSwgbG9naWNhbEhlaWdodCgp
KTsgfQogCiAgICAgdmlydHVhbCBJbnRSZWN0IHNlbGVjdGlvblJlY3QoaW50IGFic3gsIGludCBh
YnN5LCBpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpOwogICAgIGJvb2wgaXNTZWxlY3RlZChpbnQg
c3RhcnRQb3MsIGludCBlbmRQb3MpIGNvbnN0OwpAQCAtMTAyLDcgKzEwMiw3IEBAIHByaXZhdGU6
CiBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzTGluZUJyZWFrKCkgY29uc3Q7CiAKLSAgICB2
b2lkIHNldFNwYWNlQWRkKGludCBhZGQpIHsgbV93aWR0aCAtPSBtX3RvQWRkOyBtX3RvQWRkID0g
YWRkOyBtX3dpZHRoICs9IG1fdG9BZGQ7IH0KKyAgICB2b2lkIHNldFNwYWNlQWRkKGludCBhZGQp
IHsgbV9sb2dpY2FsV2lkdGggLT0gbV90b0FkZDsgbV90b0FkZCA9IGFkZDsgbV9sb2dpY2FsV2lk
dGggKz0gbV90b0FkZDsgfQogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBpc0lubGluZVRl
eHRCb3goKSBjb25zdCB7IHJldHVybiB0cnVlOyB9ICAgIApJbmRleDogV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcAkocmV2aXNpb24gNjc5MzApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MDMsNyArMjQwMyw3IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OnBhaW50RWxsaXBzaXNCb3hlcyhQYWkKICAgICAgICAgLy8gV2UgY2FuIGNoZWNrIHRo
ZSBmaXJzdCBib3ggYW5kIGxhc3QgYm94IGFuZCBhdm9pZCBwYWludGluZyBpZiB3ZSBkb24ndAog
ICAgICAgICAvLyBpbnRlcnNlY3QuCiAgICAgICAgIGludCB5UG9zID0gdHkgKyBmaXJzdExpbmVC
b3goKS0+eSgpOwotICAgICAgICBpbnQgaCA9IGxhc3RMaW5lQm94KCktPnkoKSArIGxhc3RMaW5l
Qm94KCktPmhlaWdodCgpIC0gZmlyc3RMaW5lQm94KCktPnkoKTsKKyAgICAgICAgaW50IGggPSBs
YXN0TGluZUJveCgpLT55KCkgKyBsYXN0TGluZUJveCgpLT5sb2dpY2FsSGVpZ2h0KCkgLSBmaXJz
dExpbmVCb3goKS0+eSgpOwogICAgICAgICBpZiAoeVBvcyA+PSBwYWludEluZm8ucmVjdC5ib3R0
b20oKSB8fCB5UG9zICsgaCA8PSBwYWludEluZm8ucmVjdC55KCkpCiAgICAgICAgICAgICByZXR1
cm47CiAKQEAgLTI0MTIsNyArMjQxMiw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50RWxsaXBz
aXNCb3hlcyhQYWkKICAgICAgICAgLy8gYmFzZWQgb2ZmIHBvc2l0aW9ucyBvZiBvdXIgZmlyc3Qg
bGluZSBib3ggb3Igb3VyIGxhc3QgbGluZSBib3guCiAgICAgICAgIGZvciAoUm9vdElubGluZUJv
eCogY3VyciA9IGZpcnN0Um9vdEJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFJvb3RCb3go
KSkgewogICAgICAgICAgICAgeVBvcyA9IHR5ICsgY3Vyci0+eSgpOwotICAgICAgICAgICAgaCA9
IGN1cnItPmhlaWdodCgpOworICAgICAgICAgICAgaCA9IGN1cnItPmxvZ2ljYWxIZWlnaHQoKTsK
ICAgICAgICAgICAgIGlmIChjdXJyLT5lbGxpcHNpc0JveCgpICYmIHlQb3MgPCBwYWludEluZm8u
cmVjdC5ib3R0b20oKSAmJiB5UG9zICsgaCA+IHBhaW50SW5mby5yZWN0LnkoKSkKICAgICAgICAg
ICAgICAgICBjdXJyLT5wYWludEVsbGlwc2lzQm94KHBhaW50SW5mbywgdHgsIHR5KTsKICAgICAg
ICAgfQpAQCAtMzQ4MCw3ICszNDgwLDcgQEAgaW50IFJlbmRlckJsb2NrOjpyaWdodG1vc3RQb3Np
dGlvbihib29sIAogICAgICAgICByaWdodCA9IG1heChyaWdodCwgYm9yZGVyTGVmdCgpICsgcGFk
ZGluZ0xlZnQoKSArIHBhZGRpbmdSaWdodCgpICsgcmVsYXRpdmVPZmZzZXQpOwogICAgICAgICBp
ZiAoY2hpbGRyZW5JbmxpbmUoKSkgewogICAgICAgICAgICAgZm9yIChJbmxpbmVGbG93Qm94KiBj
dXJyQm94ID0gZmlyc3RMaW5lQm94KCk7IGN1cnJCb3g7IGN1cnJCb3ggPSBjdXJyQm94LT5uZXh0
TGluZUJveCgpKSB7Ci0gICAgICAgICAgICAgICAgaW50IGNoaWxkUmlnaHRFZGdlID0gY3VyckJv
eC0+eCgpICsgY3VyckJveC0+d2lkdGgoKTsKKyAgICAgICAgICAgICAgICBpbnQgY2hpbGRSaWdo
dEVkZ2UgPSBjdXJyQm94LT54KCkgKyBjdXJyQm94LT5sb2dpY2FsV2lkdGgoKTsKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIG5vZGUgaXMgYSByb290IGVkaXRh
YmxlIGVsZW1lbnQsIHRoZW4gdGhlIHJpZ2h0bW9zdFBvc2l0aW9uIHNob3VsZCBhY2NvdW50IGZv
ciBhIGNhcmV0IGF0IHRoZSBlbmQuCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IE5lZWQgdG8g
ZmluZCBhbm90aGVyIHdheSB0byBkbyB0aGlzLCBzaW5jZSBzY3JvbGxiYXJzIGNvdWxkIHNob3cg
d2hlbiB3ZSBkb24ndCB3YW50IHRoZW0gdG8uCkBAIC01NTIyLDcgKzU1MjIsNyBAQCB2b2lkIFJl
bmRlckJsb2NrOjphZGp1c3RGb3JCb3JkZXJGaXQoaW50CiAgICAgICAgICAgICAgICAgaWYgKGJv
eC0+Zmlyc3RDaGlsZCgpKQogICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gbWluKGxlZnQsIHgg
KyBib3gtPmZpcnN0Q2hpbGQoKS0+eCgpKTsKICAgICAgICAgICAgICAgICBpZiAoYm94LT5sYXN0
Q2hpbGQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBtYXgocmlnaHQsIHggKyBib3gt
Pmxhc3RDaGlsZCgpLT54KCkgKyBib3gtPmxhc3RDaGlsZCgpLT53aWR0aCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmlnaHQgPSBtYXgocmlnaHQsIHggKyBib3gtPmxhc3RDaGlsZCgpLT54KCkg
KyBib3gtPmxhc3RDaGlsZCgpLT5sb2dpY2FsV2lkdGgoKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAgICAgZWxzZSB7CkBAIC01ODE3LDggKzU4MTcsOCBAQCB2b2lkIFJlbmRlckJs
b2NrOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0CiAgICAgaWYgKCFoYXNPdmVyZmxvd0NsaXAoKSAm
JiAhaGFzQ29udHJvbENsaXAoKSkgewogICAgICAgICBmb3IgKFJvb3RJbmxpbmVCb3gqIGN1cnIg
PSBmaXJzdFJvb3RCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRSb290Qm94KCkpIHsKICAg
ICAgICAgICAgIGludCB0b3AgPSBtYXgoY3Vyci0+bGluZVRvcCgpLCBjdXJyLT55KCkpOwotICAg
ICAgICAgICAgaW50IGJvdHRvbSA9IG1pbihjdXJyLT5saW5lQm90dG9tKCksIGN1cnItPnkoKSAr
IGN1cnItPmhlaWdodCgpKTsKLSAgICAgICAgICAgIEludFJlY3QgcmVjdCh0eCArIGN1cnItPngo
KSwgdHkgKyB0b3AsIGN1cnItPndpZHRoKCksIGJvdHRvbSAtIHRvcCk7CisgICAgICAgICAgICBp
bnQgYm90dG9tID0gbWluKGN1cnItPmxpbmVCb3R0b20oKSwgY3Vyci0+eSgpICsgY3Vyci0+bG9n
aWNhbEhlaWdodCgpKTsKKyAgICAgICAgICAgIEludFJlY3QgcmVjdCh0eCArIGN1cnItPngoKSwg
dHkgKyB0b3AsIGN1cnItPmxvZ2ljYWxXaWR0aCgpLCBib3R0b20gLSB0b3ApOwogICAgICAgICAg
ICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICByZWN0cy5hcHBlbmQocmVj
dCk7CiAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxh
eW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5l
TGF5b3V0LmNwcAkocmV2aXNpb24gNjc5MzApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9ja0xpbmVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNTgsNyArMzU4LDcgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUhvcml6b250YWxQb3NpdAogICAgICAgICAgICAgICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgaHlwaGVuU3RyaW5nID0gcnQtPnN0eWxlKCktPmh5cGhlblN0cmlu
ZygpOwogICAgICAgICAgICAgICAgIGh5cGhlbldpZHRoID0gcnQtPnN0eWxlKGZpcnN0TGluZSkt
PmZvbnQoKS53aWR0aChUZXh0UnVuKGh5cGhlblN0cmluZy5jaGFyYWN0ZXJzKCksIGh5cGhlblN0
cmluZy5sZW5ndGgoKSkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgci0+bV9ib3gtPnNl
dFdpZHRoKHJ0LT53aWR0aChyLT5tX3N0YXJ0LCByLT5tX3N0b3AgLSByLT5tX3N0YXJ0LCB0b3RX
aWR0aCwgZmlyc3RMaW5lLCAmZmFsbGJhY2tGb250cywgJmdseXBoT3ZlcmZsb3cpICsgaHlwaGVu
V2lkdGgpOworICAgICAgICAgICAgci0+bV9ib3gtPnNldExvZ2ljYWxXaWR0aChydC0+d2lkdGgo
ci0+bV9zdGFydCwgci0+bV9zdG9wIC0gci0+bV9zdGFydCwgdG90V2lkdGgsIGZpcnN0TGluZSwg
JmZhbGxiYWNrRm9udHMsICZnbHlwaE92ZXJmbG93KSArIGh5cGhlbldpZHRoKTsKICAgICAgICAg
ICAgIGlmICghZmFsbGJhY2tGb250cy5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBBU1NF
UlQoci0+bV9ib3gtPmlzVGV4dCgpKTsKICAgICAgICAgICAgICAgICBHbHlwaE92ZXJmbG93QW5k
RmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0Qm94RGF0YU1hcC5hZGQoc3RhdGlj
X2Nhc3Q8SW5saW5lVGV4dEJveCo+KHItPm1fYm94KSwgbWFrZV9wYWlyKFZlY3Rvcjxjb25zdCBT
aW1wbGVGb250RGF0YSo+KCksIEdseXBoT3ZlcmZsb3coKSkpLmZpcnN0OwpAQCAtMzczLDExICsz
NzMsMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUhvcml6b250YWxQb3NpdAogICAgICAg
ICB9IGVsc2UgaWYgKCFyLT5tX29iamVjdC0+aXNSZW5kZXJJbmxpbmUoKSkgewogICAgICAgICAg
ICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSB0b1JlbmRlckJveChyLT5tX29iamVjdCk7CiAgICAg
ICAgICAgICByZW5kZXJCb3gtPmNhbGNXaWR0aCgpOwotICAgICAgICAgICAgci0+bV9ib3gtPnNl
dFdpZHRoKHJlbmRlckJveC0+d2lkdGgoKSk7CisgICAgICAgICAgICByLT5tX2JveC0+c2V0TG9n
aWNhbFdpZHRoKHJlbmRlckJveC0+d2lkdGgoKSk7CiAgICAgICAgICAgICB0b3RXaWR0aCArPSBy
ZW5kZXJCb3gtPm1hcmdpbkxlZnQoKSArIHJlbmRlckJveC0+bWFyZ2luUmlnaHQoKTsKICAgICAg
ICAgfQogCi0gICAgICAgIHRvdFdpZHRoICs9IHItPm1fYm94LT53aWR0aCgpOworICAgICAgICB0
b3RXaWR0aCArPSByLT5tX2JveC0+bG9naWNhbFdpZHRoKCk7CiAgICAgfQogCiAgICAgLy8gQXJt
ZWQgd2l0aCB0aGUgdG90YWwgd2lkdGggb2YgdGhlIGxpbmUgKHdpdGhvdXQganVzdGlmaWNhdGlv
biksCkBAIC0zOTIsMTAgKzM5MiwxMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlSG9yaXpv
bnRhbFBvc2l0CiAgICAgICAgICAgICAvLyBwYXJ0aWN1bGFyIHdpdGggUlRMIGJsb2Nrcywgd2lk
ZSBsaW5lcyBzaG91bGQgc3RpbGwgc3BpbGwgb3V0IHRvIHRoZSBsZWZ0LgogICAgICAgICAgICAg
aWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgewogICAgICAgICAgICAgICAgIGlmICh0
b3RXaWR0aCA+IGF2YWlsYWJsZVdpZHRoICYmIHRyYWlsaW5nU3BhY2VSdW4pCi0gICAgICAgICAg
ICAgICAgICAgIHRyYWlsaW5nU3BhY2VSdW4tPm1fYm94LT5zZXRXaWR0aChtYXgoMCwgdHJhaWxp
bmdTcGFjZVJ1bi0+bV9ib3gtPndpZHRoKCkgLSB0b3RXaWR0aCArIGF2YWlsYWJsZVdpZHRoKSk7
CisgICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nU3BhY2VSdW4tPm1fYm94LT5zZXRMb2dpY2Fs
V2lkdGgobWF4KDAsIHRyYWlsaW5nU3BhY2VSdW4tPm1fYm94LT5sb2dpY2FsV2lkdGgoKSAtIHRv
dFdpZHRoICsgYXZhaWxhYmxlV2lkdGgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgaWYgKHRyYWlsaW5nU3BhY2VSdW4pCi0gICAgICAgICAgICAgICAgICAgIHRyYWls
aW5nU3BhY2VSdW4tPm1fYm94LT5zZXRXaWR0aCgwKTsKKyAgICAgICAgICAgICAgICAgICAgdHJh
aWxpbmdTcGFjZVJ1bi0+bV9ib3gtPnNldExvZ2ljYWxXaWR0aCgwKTsKICAgICAgICAgICAgICAg
ICBlbHNlIGlmICh0b3RXaWR0aCA+IGF2YWlsYWJsZVdpZHRoKQogICAgICAgICAgICAgICAgICAg
ICB4IC09ICh0b3RXaWR0aCAtIGF2YWlsYWJsZVdpZHRoKTsKICAgICAgICAgICAgIH0KQEAgLTQw
Myw4ICs0MDMsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlSG9yaXpvbnRhbFBvc2l0CiAg
ICAgICAgIGNhc2UgSlVTVElGWToKICAgICAgICAgICAgIGlmIChudW1TcGFjZXMgJiYgIXJlYWNo
ZWRFbmQgJiYgIWxpbmVCb3gtPmVuZHNXaXRoQnJlYWsoKSkgewogICAgICAgICAgICAgICAgIGlm
ICh0cmFpbGluZ1NwYWNlUnVuKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRvdFdpZHRoIC09IHRy
YWlsaW5nU3BhY2VSdW4tPm1fYm94LT53aWR0aCgpOwotICAgICAgICAgICAgICAgICAgICB0cmFp
bGluZ1NwYWNlUnVuLT5tX2JveC0+c2V0V2lkdGgoMCk7CisgICAgICAgICAgICAgICAgICAgIHRv
dFdpZHRoIC09IHRyYWlsaW5nU3BhY2VSdW4tPm1fYm94LT5sb2dpY2FsV2lkdGgoKTsKKyAgICAg
ICAgICAgICAgICAgICAgdHJhaWxpbmdTcGFjZVJ1bi0+bV9ib3gtPnNldExvZ2ljYWxXaWR0aCgw
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CkBAIC00MTQsNyArNDE0LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUhvcml6b250
YWxQb3NpdAogICAgICAgICAgICAgLy8gZm9yIHJpZ2h0IHRvIGxlZnQgZmFsbCB0aHJvdWdoIHRv
IHJpZ2h0IGFsaWduZWQKICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBM
VFIpIHsKICAgICAgICAgICAgICAgICBpZiAodG90V2lkdGggPiBhdmFpbGFibGVXaWR0aCAmJiB0
cmFpbGluZ1NwYWNlUnVuKQotICAgICAgICAgICAgICAgICAgICB0cmFpbGluZ1NwYWNlUnVuLT5t
X2JveC0+c2V0V2lkdGgobWF4KDAsIHRyYWlsaW5nU3BhY2VSdW4tPm1fYm94LT53aWR0aCgpIC0g
dG90V2lkdGggKyBhdmFpbGFibGVXaWR0aCkpOworICAgICAgICAgICAgICAgICAgICB0cmFpbGlu
Z1NwYWNlUnVuLT5tX2JveC0+c2V0TG9naWNhbFdpZHRoKG1heCgwLCB0cmFpbGluZ1NwYWNlUnVu
LT5tX2JveC0+bG9naWNhbFdpZHRoKCkgLSB0b3RXaWR0aCArIGF2YWlsYWJsZVdpZHRoKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIGNhc2UgUklHSFQ6
CkBAIC00MjQsMTUgKzQyNCwxNSBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlSG9yaXpvbnRh
bFBvc2l0CiAgICAgICAgICAgICAvLyBzaWRlIG9mIHRoZSBibG9jay4KICAgICAgICAgICAgIGlm
IChzdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpIHsKICAgICAgICAgICAgICAgICBpZiAodHJh
aWxpbmdTcGFjZVJ1bikgewotICAgICAgICAgICAgICAgICAgICB0b3RXaWR0aCAtPSB0cmFpbGlu
Z1NwYWNlUnVuLT5tX2JveC0+d2lkdGgoKTsKLSAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdT
cGFjZVJ1bi0+bV9ib3gtPnNldFdpZHRoKDApOworICAgICAgICAgICAgICAgICAgICB0b3RXaWR0
aCAtPSB0cmFpbGluZ1NwYWNlUnVuLT5tX2JveC0+bG9naWNhbFdpZHRoKCk7CisgICAgICAgICAg
ICAgICAgICAgIHRyYWlsaW5nU3BhY2VSdW4tPm1fYm94LT5zZXRMb2dpY2FsV2lkdGgoMCk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICh0b3RXaWR0aCA8IGF2YWlsYWJs
ZVdpZHRoKQogICAgICAgICAgICAgICAgICAgICB4ICs9IGF2YWlsYWJsZVdpZHRoIC0gdG90V2lk
dGg7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmICh0b3RXaWR0aCA+
IGF2YWlsYWJsZVdpZHRoICYmIHRyYWlsaW5nU3BhY2VSdW4pIHsKLSAgICAgICAgICAgICAgICAg
ICAgdHJhaWxpbmdTcGFjZVJ1bi0+bV9ib3gtPnNldFdpZHRoKG1heCgwLCB0cmFpbGluZ1NwYWNl
UnVuLT5tX2JveC0+d2lkdGgoKSAtIHRvdFdpZHRoICsgYXZhaWxhYmxlV2lkdGgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgdG90V2lkdGggLT0gdHJhaWxpbmdTcGFjZVJ1bi0+bV9ib3gtPndpZHRo
KCk7CisgICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nU3BhY2VSdW4tPm1fYm94LT5zZXRMb2dp
Y2FsV2lkdGgobWF4KDAsIHRyYWlsaW5nU3BhY2VSdW4tPm1fYm94LT5sb2dpY2FsV2lkdGgoKSAt
IHRvdFdpZHRoICsgYXZhaWxhYmxlV2lkdGgpKTsKKyAgICAgICAgICAgICAgICAgICAgdG90V2lk
dGggLT0gdHJhaWxpbmdTcGFjZVJ1bi0+bV9ib3gtPmxvZ2ljYWxXaWR0aCgpOwogICAgICAgICAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICB4ICs9IGF2YWlsYWJsZVdpZHRoIC0g
dG90V2lkdGg7CiAgICAgICAgICAgICB9CkBAIC00NDEsOSArNDQxLDkgQEAgdm9pZCBSZW5kZXJC
bG9jazo6Y29tcHV0ZUhvcml6b250YWxQb3NpdAogICAgICAgICBjYXNlIFdFQktJVF9DRU5URVI6
CiAgICAgICAgICAgICBpbnQgdHJhaWxpbmdTcGFjZVdpZHRoID0gMDsKICAgICAgICAgICAgIGlm
ICh0cmFpbGluZ1NwYWNlUnVuKSB7Ci0gICAgICAgICAgICAgICAgdG90V2lkdGggLT0gdHJhaWxp
bmdTcGFjZVJ1bi0+bV9ib3gtPndpZHRoKCk7Ci0gICAgICAgICAgICAgICAgdHJhaWxpbmdTcGFj
ZVdpZHRoID0gbWluKHRyYWlsaW5nU3BhY2VSdW4tPm1fYm94LT53aWR0aCgpLCAoYXZhaWxhYmxl
V2lkdGggLSB0b3RXaWR0aCArIDEpIC8gMik7Ci0gICAgICAgICAgICAgICAgdHJhaWxpbmdTcGFj
ZVJ1bi0+bV9ib3gtPnNldFdpZHRoKG1heCgwLCB0cmFpbGluZ1NwYWNlV2lkdGgpKTsKKyAgICAg
ICAgICAgICAgICB0b3RXaWR0aCAtPSB0cmFpbGluZ1NwYWNlUnVuLT5tX2JveC0+bG9naWNhbFdp
ZHRoKCk7CisgICAgICAgICAgICAgICAgdHJhaWxpbmdTcGFjZVdpZHRoID0gbWluKHRyYWlsaW5n
U3BhY2VSdW4tPm1fYm94LT5sb2dpY2FsV2lkdGgoKSwgKGF2YWlsYWJsZVdpZHRoIC0gdG90V2lk
dGggKyAxKSAvIDIpOworICAgICAgICAgICAgICAgIHRyYWlsaW5nU3BhY2VSdW4tPm1fYm94LT5z
ZXRMb2dpY2FsV2lkdGgobWF4KDAsIHRyYWlsaW5nU3BhY2VXaWR0aCkpOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikKICAgICAgICAg
ICAgICAgICB4ICs9IG1heCgoYXZhaWxhYmxlV2lkdGggLSB0b3RXaWR0aCkgLyAyLCAwKTsKQEAg
LTIxMDQsNyArMjEwNCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNoZWNrTGluZXNGb3JUZXh0T3Zl
cmYKICAgICBmb3IgKFJvb3RJbmxpbmVCb3gqIGN1cnIgPSBmaXJzdFJvb3RCb3goKTsgY3Vycjsg
Y3VyciA9IGN1cnItPm5leHRSb290Qm94KCkpIHsKICAgICAgICAgaW50IGJsb2NrUmlnaHRFZGdl
ID0gcmlnaHRPZmZzZXQoY3Vyci0+eSgpLCBjdXJyID09IGZpcnN0Um9vdEJveCgpKTsKICAgICAg
ICAgaW50IGJsb2NrTGVmdEVkZ2UgPSBsZWZ0T2Zmc2V0KGN1cnItPnkoKSwgY3VyciA9PSBmaXJz
dFJvb3RCb3goKSk7Ci0gICAgICAgIGludCBsaW5lQm94RWRnZSA9IGx0ciA/IGN1cnItPngoKSAr
IGN1cnItPndpZHRoKCkgOiBjdXJyLT54KCk7CisgICAgICAgIGludCBsaW5lQm94RWRnZSA9IGx0
ciA/IGN1cnItPngoKSArIGN1cnItPmxvZ2ljYWxXaWR0aCgpIDogY3Vyci0+eCgpOwogICAgICAg
ICBpZiAoKGx0ciAmJiBsaW5lQm94RWRnZSA+IGJsb2NrUmlnaHRFZGdlKSB8fCAoIWx0ciAmJiBs
aW5lQm94RWRnZSA8IGJsb2NrTGVmdEVkZ2UpKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGxpbmUg
c3BpbGxzIG91dCBvZiBvdXIgYm94IGluIHRoZSBhcHByb3ByaWF0ZSBkaXJlY3Rpb24uICBOb3cg
d2UgbmVlZCB0byBzZWUgaWYgdGhlIGxpbmUKICAgICAgICAgICAgIC8vIGNhbiBiZSB0cnVuY2F0
ZWQuICBJbiBvcmRlciBmb3IgdHJ1bmNhdGlvbiB0byBiZSBwb3NzaWJsZSwgdGhlIGxpbmUgbXVz
dCBoYXZlIHN1ZmZpY2llbnQgc3BhY2UgdG8KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAko
cmV2aXNpb24gNjgxNTcpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MjksNyArOTI5LDcgQEAgdm9pZCBSZW5kZXJCb3g6OnBhaW50Q3VzdG9t
SGlnaGxpZ2h0KGludAogICAgIElubGluZUJveCogYm94V3JhcCA9IGlubGluZUJveFdyYXBwZXIo
KTsKICAgICBSb290SW5saW5lQm94KiByID0gYm94V3JhcCA/IGJveFdyYXAtPnJvb3QoKSA6IDA7
CiAgICAgaWYgKHIpIHsKLSAgICAgICAgRmxvYXRSZWN0IHJvb3RSZWN0KHR4ICsgci0+eCgpLCB0
eSArIHItPnNlbGVjdGlvblRvcCgpLCByLT53aWR0aCgpLCByLT5zZWxlY3Rpb25IZWlnaHQoKSk7
CisgICAgICAgIEZsb2F0UmVjdCByb290UmVjdCh0eCArIHItPngoKSwgdHkgKyByLT5zZWxlY3Rp
b25Ub3AoKSwgci0+bG9naWNhbFdpZHRoKCksIHItPnNlbGVjdGlvbkhlaWdodCgpKTsKICAgICAg
ICAgRmxvYXRSZWN0IGltYWdlUmVjdCh0eCArIHgoKSwgcm9vdFJlY3QueSgpLCB3aWR0aCgpLCBy
b290UmVjdC5oZWlnaHQoKSk7CiAgICAgICAgIHBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGFp
bnRDdXN0b21IaWdobGlnaHQobm9kZSgpLCB0eXBlLCBpbWFnZVJlY3QsIHJvb3RSZWN0LCBiZWhp
bmRUZXh0LCBmYWxzZSk7CiAgICAgfSBlbHNlIHsKQEAgLTE4NTYsOSArMTg1Niw5IEBAIGludCBS
ZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja1dpZHRoRm9yUG8KICAgICBpbnQgZnJvbVJpZ2h0Owog
ICAgIGlmIChjb250YWluaW5nQmxvY2stPnN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgewog
ICAgICAgICBmcm9tTGVmdCA9IGZpcnN0LT54KCkgKyBmaXJzdC0+Ym9yZGVyTGVmdCgpOwotICAg
ICAgICBmcm9tUmlnaHQgPSBsYXN0LT54KCkgKyBsYXN0LT53aWR0aCgpIC0gbGFzdC0+Ym9yZGVy
UmlnaHQoKTsKKyAgICAgICAgZnJvbVJpZ2h0ID0gbGFzdC0+eCgpICsgbGFzdC0+bG9naWNhbFdp
ZHRoKCkgLSBsYXN0LT5ib3JkZXJSaWdodCgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGZyb21S
aWdodCA9IGZpcnN0LT54KCkgKyBmaXJzdC0+d2lkdGgoKSAtIGZpcnN0LT5ib3JkZXJSaWdodCgp
OworICAgICAgICBmcm9tUmlnaHQgPSBmaXJzdC0+eCgpICsgZmlyc3QtPmxvZ2ljYWxXaWR0aCgp
IC0gZmlyc3QtPmJvcmRlclJpZ2h0KCk7CiAgICAgICAgIGZyb21MZWZ0ID0gbGFzdC0+eCgpICsg
bGFzdC0+Ym9yZGVyTGVmdCgpOwogICAgIH0KIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRmxleGlibGVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZsZXhpYmxlQm94LmNwcAkocmV2aXNpb24gNjc5MzApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJGbGV4aWJsZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5Myw3ICs5OTMsNyBAQCB2
b2lkIFJlbmRlckZsZXhpYmxlQm94OjphcHBseUxpbmVDbGFtcChGCiAgICAgICAgICAgICBpbnQg
dG90YWxXaWR0aDsKICAgICAgICAgICAgIElubGluZUJveCogYW5jaG9yQm94ID0gbGFzdExpbmUt
Pmxhc3RDaGlsZCgpOwogICAgICAgICAgICAgaWYgKGFuY2hvckJveCAmJiBhbmNob3JCb3gtPnJl
bmRlcmVyKCktPm5vZGUoKSAmJiBhbmNob3JCb3gtPnJlbmRlcmVyKCktPm5vZGUoKS0+aXNMaW5r
KCkpCi0gICAgICAgICAgICAgICAgdG90YWxXaWR0aCA9IGFuY2hvckJveC0+d2lkdGgoKSArIGZv
bnQud2lkdGgoVGV4dFJ1bihlbGxpcHNpc0FuZFNwYWNlLCAyKSk7CisgICAgICAgICAgICAgICAg
dG90YWxXaWR0aCA9IGFuY2hvckJveC0+bG9naWNhbFdpZHRoKCkgKyBmb250LndpZHRoKFRleHRS
dW4oZWxsaXBzaXNBbmRTcGFjZSwgMikpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICAgICAgYW5jaG9yQm94ID0gMDsKICAgICAgICAgICAgICAgICB0b3RhbFdpZHRoID0gZm9udC53
aWR0aChUZXh0UnVuKCZob3Jpem9udGFsRWxsaXBzaXMsIDEpKTsKQEAgLTEwMTUsNyArMTAxNSw3
IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmFwcGx5TGluZUNsYW1wKEYKICAgICAgICAgICAg
IAogICAgICAgICAgICAgaW50IGJsb2NrRWRnZSA9IGx0ciA/IGJsb2NrUmlnaHRFZGdlIDogYmxv
Y2tMZWZ0RWRnZTsKICAgICAgICAgICAgIGlmICghbGFzdFZpc2libGVMaW5lLT5jYW5BY2NvbW1v
ZGF0ZUVsbGlwc2lzKGx0ciwgYmxvY2tFZGdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFZpc2libGVMaW5lLT54KCkgKyBsYXN0
VmlzaWJsZUxpbmUtPndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmlzaWJsZUxpbmUtPngoKSArIGxhc3RWaXNpYmxl
TGluZS0+bG9naWNhbFdpZHRoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0b3RhbFdpZHRoKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShy
ZXZpc2lvbiA2Nzk2NCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQxMyw3ICs0MTMsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6YWJzb2x1
dGVSZWN0cyhWZWN0b3I8CiB7CiAgICAgaWYgKElubGluZUZsb3dCb3gqIGN1cnIgPSBmaXJzdExp
bmVCb3goKSkgewogICAgICAgICBmb3IgKDsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94
KCkpCi0gICAgICAgICAgICByZWN0cy5hcHBlbmQoSW50UmVjdCh0eCArIGN1cnItPngoKSwgdHkg
KyBjdXJyLT55KCksIGN1cnItPndpZHRoKCksIGN1cnItPmhlaWdodCgpKSk7CisgICAgICAgICAg
ICByZWN0cy5hcHBlbmQoSW50UmVjdCh0eCArIGN1cnItPngoKSwgdHkgKyBjdXJyLT55KCksIGN1
cnItPmxvZ2ljYWxXaWR0aCgpLCBjdXJyLT5sb2dpY2FsSGVpZ2h0KCkpKTsKICAgICB9IGVsc2UK
ICAgICAgICAgcmVjdHMuYXBwZW5kKEludFJlY3QodHgsIHR5LCAwLCAwKSk7CiAKQEAgLTQzMiw3
ICs0MzIsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6YWJzb2x1dGVRdWFkcyhWZWN0b3I8CiB7CiAg
ICAgaWYgKElubGluZUZsb3dCb3gqIGN1cnIgPSBmaXJzdExpbmVCb3goKSkgewogICAgICAgICBm
b3IgKDsgY3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkpIHsKLSAgICAgICAgICAgIEZs
b2F0UmVjdCBsb2NhbFJlY3QoY3Vyci0+eCgpLCBjdXJyLT55KCksIGN1cnItPndpZHRoKCksIGN1
cnItPmhlaWdodCgpKTsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBsb2NhbFJlY3QoY3Vyci0+eCgp
LCBjdXJyLT55KCksIGN1cnItPmxvZ2ljYWxXaWR0aCgpLCBjdXJyLT5sb2dpY2FsSGVpZ2h0KCkp
OwogICAgICAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQobG9jYWxSZWN0
KSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UKQEAgLTU2MywxMiArNTYzLDEyIEBAIEludFJlY3Qg
UmVuZGVySW5saW5lOjpsaW5lc0JvdW5kaW5nQm94KCkKICAgICAgICAgZm9yIChJbmxpbmVGbG93
Qm94KiBjdXJyID0gZmlyc3RMaW5lQm94KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0TGluZUJv
eCgpKSB7CiAgICAgICAgICAgICBpZiAoY3VyciA9PSBmaXJzdExpbmVCb3goKSB8fCBjdXJyLT54
KCkgPCBsZWZ0U2lkZSkKICAgICAgICAgICAgICAgICBsZWZ0U2lkZSA9IGN1cnItPngoKTsKLSAg
ICAgICAgICAgIGlmIChjdXJyID09IGZpcnN0TGluZUJveCgpIHx8IGN1cnItPngoKSArIGN1cnIt
PndpZHRoKCkgPiByaWdodFNpZGUpCi0gICAgICAgICAgICAgICAgcmlnaHRTaWRlID0gY3Vyci0+
eCgpICsgY3Vyci0+d2lkdGgoKTsKKyAgICAgICAgICAgIGlmIChjdXJyID09IGZpcnN0TGluZUJv
eCgpIHx8IGN1cnItPngoKSArIGN1cnItPmxvZ2ljYWxXaWR0aCgpID4gcmlnaHRTaWRlKQorICAg
ICAgICAgICAgICAgIHJpZ2h0U2lkZSA9IGN1cnItPngoKSArIGN1cnItPmxvZ2ljYWxXaWR0aCgp
OwogICAgICAgICB9CiAgICAgICAgIHJlc3VsdC5zZXRXaWR0aChyaWdodFNpZGUgLSBsZWZ0U2lk
ZSk7CiAgICAgICAgIHJlc3VsdC5zZXRYKGxlZnRTaWRlKTsKLSAgICAgICAgcmVzdWx0LnNldEhl
aWdodChsYXN0TGluZUJveCgpLT55KCkgKyBsYXN0TGluZUJveCgpLT5oZWlnaHQoKSAtIGZpcnN0
TGluZUJveCgpLT55KCkpOworICAgICAgICByZXN1bHQuc2V0SGVpZ2h0KGxhc3RMaW5lQm94KCkt
PnkoKSArIGxhc3RMaW5lQm94KCktPmxvZ2ljYWxIZWlnaHQoKSAtIGZpcnN0TGluZUJveCgpLT55
KCkpOwogICAgICAgICByZXN1bHQuc2V0WShmaXJzdExpbmVCb3goKS0+eSgpKTsKICAgICB9CiAK
QEAgLTk1Niw4ICs5NTYsOCBAQCB2b2lkIFJlbmRlcklubGluZTo6YWRkRm9jdXNSaW5nUmVjdHMo
VmVjCiAgICAgZm9yIChJbmxpbmVGbG93Qm94KiBjdXJyID0gZmlyc3RMaW5lQm94KCk7IGN1cnI7
IGN1cnIgPSBjdXJyLT5uZXh0TGluZUJveCgpKSB7CiAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJv
b3QgPSBjdXJyLT5yb290KCk7CiAgICAgICAgIGludCB0b3AgPSBtYXgocm9vdC0+bGluZVRvcCgp
LCBjdXJyLT55KCkpOwotICAgICAgICBpbnQgYm90dG9tID0gbWluKHJvb3QtPmxpbmVCb3R0b20o
KSwgY3Vyci0+eSgpICsgY3Vyci0+aGVpZ2h0KCkpOwotICAgICAgICBJbnRSZWN0IHJlY3QodHgg
KyBjdXJyLT54KCksIHR5ICsgdG9wLCBjdXJyLT53aWR0aCgpLCBib3R0b20gLSB0b3ApOworICAg
ICAgICBpbnQgYm90dG9tID0gbWluKHJvb3QtPmxpbmVCb3R0b20oKSwgY3Vyci0+eSgpICsgY3Vy
ci0+bG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAgSW50UmVjdCByZWN0KHR4ICsgY3Vyci0+eCgp
LCB0eSArIHRvcCwgY3Vyci0+bG9naWNhbFdpZHRoKCksIGJvdHRvbSAtIHRvcCk7CiAgICAgICAg
IGlmICghcmVjdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZWN0cy5hcHBlbmQocmVjdCk7CiAg
ICAgfQpAQCAtMTAxMyw4ICsxMDEzLDggQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50T3V0bGlu
ZShHcmFwaGljcwogICAgIGZvciAoSW5saW5lRmxvd0JveCogY3VyciA9IGZpcnN0TGluZUJveCgp
OyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkgewogICAgICAgICBSb290SW5saW5l
Qm94KiByb290ID0gY3Vyci0+cm9vdCgpOwogICAgICAgICBpbnQgdG9wID0gbWF4KHJvb3QtPmxp
bmVUb3AoKSwgY3Vyci0+eSgpKTsKLSAgICAgICAgaW50IGJvdHRvbSA9IG1pbihyb290LT5saW5l
Qm90dG9tKCksIGN1cnItPnkoKSArIGN1cnItPmhlaWdodCgpKTsKLSAgICAgICAgcmVjdHMuYXBw
ZW5kKEludFJlY3QoY3Vyci0+eCgpLCB0b3AsIGN1cnItPndpZHRoKCksIGJvdHRvbSAtIHRvcCkp
OworICAgICAgICBpbnQgYm90dG9tID0gbWluKHJvb3QtPmxpbmVCb3R0b20oKSwgY3Vyci0+eSgp
ICsgY3Vyci0+bG9naWNhbEhlaWdodCgpKTsKKyAgICAgICAgcmVjdHMuYXBwZW5kKEludFJlY3Qo
Y3Vyci0+eCgpLCB0b3AsIGN1cnItPmxvZ2ljYWxXaWR0aCgpLCBib3R0b20gLSB0b3ApKTsKICAg
ICB9CiAgICAgcmVjdHMuYXBwZW5kKEludFJlY3QoKSk7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR0lubGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyU1ZHSW5saW5lLmNwcAkocmV2aXNpb24gNjc5MzApCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIFJl
bmRlclNWR0lubGluZTo6UmVuZGVyU1ZHSW5saW5lKE5vZGUqIG4KIElubGluZUZsb3dCb3gqIFJl
bmRlclNWR0lubGluZTo6Y3JlYXRlSW5saW5lRmxvd0JveCgpCiB7CiAgICAgSW5saW5lRmxvd0Jv
eCogYm94ID0gbmV3IChyZW5kZXJBcmVuYSgpKSBTVkdJbmxpbmVGbG93Qm94KHRoaXMpOwotICAg
IGJveC0+c2V0SGFzVmlydHVhbEhlaWdodCgpOworICAgIGJveC0+c2V0SGFzVmlydHVhbExvZ2lj
YWxIZWlnaHQoKTsKICAgICByZXR1cm4gYm94OwogfQogCkBAIC05MCw3ICs5MCw3IEBAIHZvaWQg
UmVuZGVyU1ZHSW5saW5lOjphYnNvbHV0ZVF1YWRzKFZlY3QKIAogICAgIEZsb2F0UmVjdCB0ZXh0
Qm91bmRpbmdCb3ggPSBvYmplY3QtPnN0cm9rZUJvdW5kaW5nQm94KCk7CiAgICAgZm9yIChJbmxp
bmVGbG93Qm94KiBib3ggPSBmaXJzdExpbmVCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRMaW5l
Qm94KCkpCi0gICAgICAgIHF1YWRzLmFwcGVuZChsb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVj
dCh0ZXh0Qm91bmRpbmdCb3gueCgpICsgYm94LT54KCksIHRleHRCb3VuZGluZ0JveC55KCkgKyBi
b3gtPnkoKSwgYm94LT53aWR0aCgpLCBib3gtPmhlaWdodCgpKSkpOworICAgICAgICBxdWFkcy5h
cHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QodGV4dEJvdW5kaW5nQm94LngoKSAr
IGJveC0+eCgpLCB0ZXh0Qm91bmRpbmdCb3gueSgpICsgYm94LT55KCksIGJveC0+bG9naWNhbFdp
ZHRoKCksIGJveC0+bG9naWNhbEhlaWdodCgpKSkpOwogfQogCiB2b2lkIFJlbmRlclNWR0lubGlu
ZTo6ZGVzdHJveSgpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbmxpbmVUZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbmxpbmVUZXh0
LmNwcAkocmV2aXNpb24gNjc5MzApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdJbmxp
bmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCB2b2lkIFJlbmRlclNW
R0lubGluZVRleHQ6OnN0eWxlRGlkQ2hhbmdlCiBJbmxpbmVUZXh0Qm94KiBSZW5kZXJTVkdJbmxp
bmVUZXh0OjpjcmVhdGVUZXh0Qm94KCkKIHsKICAgICBJbmxpbmVUZXh0Qm94KiBib3ggPSBuZXcg
KHJlbmRlckFyZW5hKCkpIFNWR0lubGluZVRleHRCb3godGhpcyk7Ci0gICAgYm94LT5zZXRIYXNW
aXJ0dWFsSGVpZ2h0KCk7CisgICAgYm94LT5zZXRIYXNWaXJ0dWFsTG9naWNhbEhlaWdodCgpOwog
ICAgIHJldHVybiBib3g7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Rl
eHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3Bw
CShyZXZpc2lvbiA2NzkzMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDcgQEAgdm9pZCBSZW5kZXJTVkdUZXh0Ojps
YXlvdXQoKQogUm9vdElubGluZUJveCogUmVuZGVyU1ZHVGV4dDo6Y3JlYXRlUm9vdElubGluZUJv
eCgpIAogewogICAgIFJvb3RJbmxpbmVCb3gqIGJveCA9IG5ldyAocmVuZGVyQXJlbmEoKSkgU1ZH
Um9vdElubGluZUJveCh0aGlzKTsKLSAgICBib3gtPnNldEhhc1ZpcnR1YWxIZWlnaHQoKTsKKyAg
ICBib3gtPnNldEhhc1ZpcnR1YWxMb2dpY2FsSGVpZ2h0KCk7CiAgICAgcmV0dXJuIGJveDsKIH0K
IApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDY3OTMwKQorKysgV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2Myw3ICsy
NjMsNyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFJlbmRlclRleHQ6Om9yaWdpCiB2b2lkIFJl
bmRlclRleHQ6OmFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBp
bnQgdHkpCiB7CiAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBib3ggPSBmaXJzdFRleHRCb3goKTsg
Ym94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpCi0gICAgICAgIHJlY3RzLmFwcGVuZChJbnRS
ZWN0KHR4ICsgYm94LT54KCksIHR5ICsgYm94LT55KCksIGJveC0+d2lkdGgoKSwgYm94LT5oZWln
aHQoKSkpOworICAgICAgICByZWN0cy5hcHBlbmQoSW50UmVjdCh0eCArIGJveC0+eCgpLCB0eSAr
IGJveC0+eSgpLCBib3gtPmxvZ2ljYWxXaWR0aCgpLCBib3gtPmxvZ2ljYWxIZWlnaHQoKSkpOwog
fQogCiB2b2lkIFJlbmRlclRleHQ6OmFic29sdXRlUmVjdHNGb3JSYW5nZShWZWN0b3I8SW50UmVj
dD4mIHJlY3RzLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBib29sIHVzZVNlbGVjdGlv
bkhlaWdodCkKQEAgLTI4MSw3ICsyODEsNyBAQCB2b2lkIFJlbmRlclRleHQ6OmFic29sdXRlUmVj
dHNGb3JSYW5nZShWCiAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBib3ggPSBmaXJzdFRleHRCb3go
KTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKICAgICAgICAgLy8gTm90ZTogYm94
LT5lbmQoKSByZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBjaGFyYWN0ZXIsIG5vdCB0aGUg
aW5kZXggcGFzdCBpdAogICAgICAgICBpZiAoc3RhcnQgPD0gYm94LT5zdGFydCgpICYmIGJveC0+
ZW5kKCkgPCBlbmQpIHsKLSAgICAgICAgICAgIEludFJlY3QgciA9IEludFJlY3QoYm94LT54KCks
IGJveC0+eSgpLCBib3gtPndpZHRoKCksIGJveC0+aGVpZ2h0KCkpOworICAgICAgICAgICAgSW50
UmVjdCByID0gSW50UmVjdChib3gtPngoKSwgYm94LT55KCksIGJveC0+bG9naWNhbFdpZHRoKCks
IGJveC0+bG9naWNhbEhlaWdodCgpKTsKICAgICAgICAgICAgIGlmICh1c2VTZWxlY3Rpb25IZWln
aHQpIHsKICAgICAgICAgICAgICAgICBJbnRSZWN0IHNlbGVjdGlvblJlY3QgPSBib3gtPnNlbGVj
dGlvblJlY3QoMCwgMCwgc3RhcnQsIGVuZCk7CiAgICAgICAgICAgICAgICAgci5zZXRIZWlnaHQo
c2VsZWN0aW9uUmVjdC5oZWlnaHQoKSk7CkBAIC0yOTcsNyArMjk3LDcgQEAgdm9pZCBSZW5kZXJU
ZXh0OjphYnNvbHV0ZVJlY3RzRm9yUmFuZ2UoVgogICAgICAgICAgICAgaWYgKCFyLmlzRW1wdHko
KSkgewogICAgICAgICAgICAgICAgIGlmICghdXNlU2VsZWN0aW9uSGVpZ2h0KSB7CiAgICAgICAg
ICAgICAgICAgICAgIC8vIGNoYW5nZSB0aGUgaGVpZ2h0IGFuZCB5IHBvc2l0aW9uIGJlY2F1c2Ug
c2VsZWN0aW9uUmVjdCB1c2VzIHNlbGVjdGlvbi1zcGVjaWZpYyB2YWx1ZXMKLSAgICAgICAgICAg
ICAgICAgICAgci5zZXRIZWlnaHQoYm94LT5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgICAg
IHIuc2V0SGVpZ2h0KGJveC0+bG9naWNhbEhlaWdodCgpKTsKICAgICAgICAgICAgICAgICAgICAg
ci5zZXRZKGJveC0+eSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgRmxv
YXRQb2ludCBvcmlnaW4gPSBsb2NhbFRvQWJzb2x1dGUoci5sb2NhdGlvbigpKTsKQEAgLTM4MCw3
ICszODAsNyBAQCB2b2lkIFJlbmRlclRleHQ6OmFic29sdXRlUXVhZHNGb3JSYW5nZShWCiAgICAg
ICAgICAgICBpZiAoci5oZWlnaHQoKSkgewogICAgICAgICAgICAgICAgIGlmICghdXNlU2VsZWN0
aW9uSGVpZ2h0KSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZSB0aGUgaGVpZ2h0IGFu
ZCB5IHBvc2l0aW9uIGJlY2F1c2Ugc2VsZWN0aW9uUmVjdCB1c2VzIHNlbGVjdGlvbi1zcGVjaWZp
YyB2YWx1ZXMKLSAgICAgICAgICAgICAgICAgICAgci5zZXRIZWlnaHQoYm94LT5oZWlnaHQoKSk7
CisgICAgICAgICAgICAgICAgICAgIHIuc2V0SGVpZ2h0KGJveC0+bG9naWNhbEhlaWdodCgpKTsK
ICAgICAgICAgICAgICAgICAgICAgci5zZXRZKGJveC0+eSgpKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgcXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRS
ZWN0KHIpKSk7CkBAIC00MjUsNyArNDI1LDcgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlclRleHQ6
OnBvc2l0aW9uRm9yUAogICAgICAgICBvZmZzZXQgPSBmaXJzdFRleHRCb3goKS0+b2Zmc2V0Rm9y
UG9zaXRpb24ocG9pbnQueCgpKTsKICAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlv
bihvZmZzZXQgKyBmaXJzdFRleHRCb3goKS0+c3RhcnQoKSwgRE9XTlNUUkVBTSk7CiAgICAgfQot
ICAgIGlmIChsYXN0VGV4dEJveCgpICYmIHBvaW50LnkoKSA+PSBsYXN0VGV4dEJveCgpLT5yb290
KCktPmxpbmVUb3AoKSAmJiBwb2ludC54KCkgPj0gbGFzdFRleHRCb3goKS0+bV94ICsgbGFzdFRl
eHRCb3goKS0+bV93aWR0aCkgeworICAgIGlmIChsYXN0VGV4dEJveCgpICYmIHBvaW50LnkoKSA+
PSBsYXN0VGV4dEJveCgpLT5yb290KCktPmxpbmVUb3AoKSAmJiBwb2ludC54KCkgPj0gbGFzdFRl
eHRCb3goKS0+bV94ICsgbGFzdFRleHRCb3goKS0+bG9naWNhbFdpZHRoKCkpIHsKICAgICAgICAg
Ly8gYXQgdGhlIHkgY29vcmRpbmF0ZSBvZiB0aGUgbGFzdCBsaW5lIG9yIGJlbG93CiAgICAgICAg
IC8vIGFuZCB0aGUgeCBjb29yZGluYXRlIGlzIHRvIHRoZSByaWdodCBvZiB0aGUgbGFzdCB0ZXh0
IGJveCByaWdodCBlZGdlCiAgICAgICAgIG9mZnNldCA9IGxhc3RUZXh0Qm94KCktPm9mZnNldEZv
clBvc2l0aW9uKHBvaW50LngoKSk7CkBAIC00NDQsNyArNDQ0LDcgQEAgVmlzaWJsZVBvc2l0aW9u
IFJlbmRlclRleHQ6OnBvc2l0aW9uRm9yUAogICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYWZm
aW5pdHkgbXVzdCBiZSBkb3duc3RyZWFtIHNvIHRoZSBwb3NpdGlvbiBkb2Vzbid0IGp1bXAgYmFj
ayB0byB0aGUgcHJldmlvdXMgbGluZQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRl
VmlzaWJsZVBvc2l0aW9uKG9mZnNldCArIGJveC0+c3RhcnQoKSwgRE9XTlNUUkVBTSk7CiAKLSAg
ICAgICAgICAgICAgICBpZiAocG9pbnQueCgpIDwgYm94LT5tX3ggKyBib3gtPm1fd2lkdGgpCisg
ICAgICAgICAgICAgICAgaWYgKHBvaW50LngoKSA8IGJveC0+bV94ICsgYm94LT5sb2dpY2FsV2lk
dGgoKSkKICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHRoZSB4IGNvb3JkaW5hdGUgaXMgdG8g
dGhlIGxlZnQgb2YgdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhpcyBib3gKICAgICAgICAgICAgICAgICAg
ICAgLy8gY2hlY2sgdG8gc2VlIGlmIHBvc2l0aW9uIGdvZXMgaW4gdGhpcyBib3gKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVZpc2libGVQb3NpdGlvbihvZmZzZXQgKyBib3gtPnN0
YXJ0KCksIG9mZnNldCA+IDAgPyBWUF9VUFNUUkVBTV9JRl9QT1NTSUJMRSA6IERPV05TVFJFQU0p
OwpAQCAtNDg5LDExICs0ODksMTEgQEAgSW50UmVjdCBSZW5kZXJUZXh0Ojpsb2NhbENhcmV0UmVj
dChJbmxpbgogICAgIGludCBjYXJldFdpZHRoUmlnaHRPZk9mZnNldCA9IGNhcmV0V2lkdGggLSBj
YXJldFdpZHRoTGVmdE9mT2Zmc2V0OwogCiAgICAgaW50IHJvb3RMZWZ0ID0gYm94LT5yb290KCkt
PngoKTsKLSAgICBpbnQgcm9vdFJpZ2h0ID0gcm9vdExlZnQgKyBib3gtPnJvb3QoKS0+d2lkdGgo
KTsKKyAgICBpbnQgcm9vdFJpZ2h0ID0gcm9vdExlZnQgKyBib3gtPnJvb3QoKS0+bG9naWNhbFdp
ZHRoKCk7CiAgICAgLy8gRklYTUU6IHNob3VsZCB3ZSB1c2UgdGhlIHdpZHRoIG9mIHRoZSByb290
IGlubGluZSBib3ggb3IgdGhlCiAgICAgLy8gd2lkdGggb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sg
Zm9yIHRoaXM/CiAgICAgaWYgKGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKLSAgICAgICAgKmV4dHJh
V2lkdGhUb0VuZE9mTGluZSA9IChib3gtPnJvb3QoKS0+d2lkdGgoKSArIHJvb3RMZWZ0KSAtIChs
ZWZ0ICsgMSk7CisgICAgICAgICpleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAoYm94LT5yb290KCkt
PmxvZ2ljYWxXaWR0aCgpICsgcm9vdExlZnQpIC0gKGxlZnQgKyAxKTsKIAogICAgIFJlbmRlckJs
b2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOwogICAgIFJlbmRlclN0eWxlKiBjYlN0eWxlID0g
Y2ItPnN0eWxlKCk7CkBAIC0xMjc3LDEyICsxMjc3LDEyIEBAIEludFJlY3QgUmVuZGVyVGV4dDo6
bGluZXNCb3VuZGluZ0JveCgpIGMKICAgICAgICAgZm9yIChJbmxpbmVUZXh0Qm94KiBjdXJyID0g
Zmlyc3RUZXh0Qm94KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0VGV4dEJveCgpKSB7CiAgICAg
ICAgICAgICBpZiAoY3VyciA9PSBmaXJzdFRleHRCb3goKSB8fCBjdXJyLT54KCkgPCBsZWZ0U2lk
ZSkKICAgICAgICAgICAgICAgICBsZWZ0U2lkZSA9IGN1cnItPngoKTsKLSAgICAgICAgICAgIGlm
IChjdXJyID09IGZpcnN0VGV4dEJveCgpIHx8IGN1cnItPngoKSArIGN1cnItPndpZHRoKCkgPiBy
aWdodFNpZGUpCi0gICAgICAgICAgICAgICAgcmlnaHRTaWRlID0gY3Vyci0+eCgpICsgY3Vyci0+
d2lkdGgoKTsKKyAgICAgICAgICAgIGlmIChjdXJyID09IGZpcnN0VGV4dEJveCgpIHx8IGN1cnIt
PngoKSArIGN1cnItPmxvZ2ljYWxXaWR0aCgpID4gcmlnaHRTaWRlKQorICAgICAgICAgICAgICAg
IHJpZ2h0U2lkZSA9IGN1cnItPngoKSArIGN1cnItPmxvZ2ljYWxXaWR0aCgpOwogICAgICAgICB9
CiAgICAgICAgIHJlc3VsdC5zZXRXaWR0aChyaWdodFNpZGUgLSBsZWZ0U2lkZSk7CiAgICAgICAg
IHJlc3VsdC5zZXRYKGxlZnRTaWRlKTsKLSAgICAgICAgcmVzdWx0LnNldEhlaWdodChsYXN0VGV4
dEJveCgpLT55KCkgKyBsYXN0VGV4dEJveCgpLT5oZWlnaHQoKSAtIGZpcnN0VGV4dEJveCgpLT55
KCkpOworICAgICAgICByZXN1bHQuc2V0SGVpZ2h0KGxhc3RUZXh0Qm94KCktPnkoKSArIGxhc3RU
ZXh0Qm94KCktPmxvZ2ljYWxIZWlnaHQoKSAtIGZpcnN0VGV4dEJveCgpLT55KCkpOwogICAgICAg
ICByZXN1bHQuc2V0WShmaXJzdFRleHRCb3goKS0+eSgpKTsKICAgICB9CiAKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiA2NzkzMCkKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Mzgs
NyArNDM4LDcgQEAgc3RhdGljIHZvaWQgd3JpdGVUZXh0UnVuKFRleHRTdHJlYW0mIHRzLAogICAg
IGludCB5ID0gcnVuLm1feTsKICAgICBpZiAoby5jb250YWluaW5nQmxvY2soKS0+aXNUYWJsZUNl
bGwoKSkKICAgICAgICAgeSAtPSB0b1JlbmRlclRhYmxlQ2VsbChvLmNvbnRhaW5pbmdCbG9jaygp
KS0+aW50cmluc2ljUGFkZGluZ0JlZm9yZSgpOwotICAgIHRzIDw8ICJ0ZXh0IHJ1biBhdCAoIiA8
PCBydW4ubV94IDw8ICIsIiA8PCB5IDw8ICIpIHdpZHRoICIgPDwgcnVuLm1fd2lkdGg7CisgICAg
dHMgPDwgInRleHQgcnVuIGF0ICgiIDw8IHJ1bi5tX3ggPDwgIiwiIDw8IHkgPDwgIikgd2lkdGgg
IiA8PCBydW4ubV9sb2dpY2FsV2lkdGg7CiAgICAgaWYgKHJ1bi5kaXJlY3Rpb24oKSA9PSBSVEwg
fHwgcnVuLm1fZGlyT3ZlcnJpZGUpIHsKICAgICAgICAgdHMgPDwgKHJ1bi5kaXJlY3Rpb24oKSA9
PSBSVEwgPyAiIFJUTCIgOiAiIExUUiIpOwogICAgICAgICBpZiAocnVuLm1fZGlyT3ZlcnJpZGUp
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkocmV2aXNpb24gNjc5MzApCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzIsNyArNzIsNyBAQCBib29sIFJvb3RJbmxpbmVCb3g6OmNhbkFjY29tbW9kYXRlRWxsaXBzCiB7
CiAgICAgLy8gRmlyc3Qgc2FuaXR5LWNoZWNrIHRoZSB1bm92ZXJmbG93ZWQgd2lkdGggb2YgdGhl
IHdob2xlIGxpbmUgdG8gc2VlIGlmIHRoZXJlIGlzIHN1ZmZpY2llbnQgcm9vbS4KICAgICBpbnQg
ZGVsdGEgPSBsdHIgPyBsaW5lQm94RWRnZSAtIGJsb2NrRWRnZSA6IGJsb2NrRWRnZSAtIGxpbmVC
b3hFZGdlOwotICAgIGlmICh3aWR0aCgpIC0gZGVsdGEgPCBlbGxpcHNpc1dpZHRoKQorICAgIGlm
IChsb2dpY2FsV2lkdGgoKSAtIGRlbHRhIDwgZWxsaXBzaXNXaWR0aCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgLy8gTmV4dCBpdGVyYXRlIG92ZXIgYWxsIHRoZSBsaW5lIGJveGVzIG9u
IHRoZSBsaW5lLiAgSWYgd2UgZmluZCBhIHJlcGxhY2VkIGVsZW1lbnQgdGhhdCBpbnRlcnNlY3Rz
CkBAIC04NSw3ICs4NSw3IEBAIHZvaWQgUm9vdElubGluZUJveDo6cGxhY2VFbGxpcHNpcyhjb25z
dCAKIHsKICAgICAvLyBDcmVhdGUgYW4gZWxsaXBzaXMgYm94LgogICAgIEVsbGlwc2lzQm94KiBl
bGxpcHNpc0JveCA9IG5ldyAocmVuZGVyZXIoKS0+cmVuZGVyQXJlbmEoKSkgRWxsaXBzaXNCb3go
cmVuZGVyZXIoKSwgZWxsaXBzaXNTdHIsIHRoaXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsbGlwc2lzV2lkdGggLSAobWFy
a3VwQm94ID8gbWFya3VwQm94LT53aWR0aCgpIDogMCksIGhlaWdodCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGxpcHNp
c1dpZHRoIC0gKG1hcmt1cEJveCA/IG1hcmt1cEJveC0+bG9naWNhbFdpZHRoKCkgOiAwKSwgbG9n
aWNhbEhlaWdodCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB5KCksICFwcmV2Um9vdEJveCgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrdXBCb3gp
OwogICAgIApAQCAtOTUsOCArOTUsOCBAQCB2b2lkIFJvb3RJbmxpbmVCb3g6OnBsYWNlRWxsaXBz
aXMoY29uc3QgCiAgICAgc2V0SGFzRWxsaXBzaXNCb3godHJ1ZSk7CiAKICAgICAvLyBGSVhNRTog
RG8gd2UgbmVlZCBhbiBSVEwgdmVyc2lvbiBvZiB0aGlzPwotICAgIGlmIChsdHIgJiYgKHgoKSAr
IHdpZHRoKCkgKyBlbGxpcHNpc1dpZHRoKSA8PSBibG9ja1JpZ2h0RWRnZSkgewotICAgICAgICBl
bGxpcHNpc0JveC0+bV94ID0geCgpICsgd2lkdGgoKTsKKyAgICBpZiAobHRyICYmICh4KCkgKyBs
b2dpY2FsV2lkdGgoKSArIGVsbGlwc2lzV2lkdGgpIDw9IGJsb2NrUmlnaHRFZGdlKSB7CisgICAg
ICAgIGVsbGlwc2lzQm94LT5tX3ggPSB4KCkgKyBsb2dpY2FsV2lkdGgoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApAQCAtMTM0LDEwICsxMzQsMTAgQEAgdm9pZCBSb290SW5saW5lQm94Ojph
ZGRIaWdobGlnaHRPdmVyZmxvdwogICAgICAgICByZXR1cm47CiAKICAgICAvLyBIaWdobGlnaHQg
YWN0cyBhcyBhIHNlbGVjdGlvbiBpbmZsYXRpb24uCi0gICAgRmxvYXRSZWN0IHJvb3RSZWN0KDAs
IHNlbGVjdGlvblRvcCgpLCB3aWR0aCgpLCBzZWxlY3Rpb25IZWlnaHQoKSk7CisgICAgRmxvYXRS
ZWN0IHJvb3RSZWN0KDAsIHNlbGVjdGlvblRvcCgpLCBsb2dpY2FsV2lkdGgoKSwgc2VsZWN0aW9u
SGVpZ2h0KCkpOwogICAgIEludFJlY3QgaW5mbGF0ZWRSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChw
YWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPmN1c3RvbUhpZ2hsaWdodFJlY3QocmVuZGVyZXIoKS0+
bm9kZSgpLCByZW5kZXJlcigpLT5zdHlsZSgpLT5oaWdobGlnaHQoKSwgcm9vdFJlY3QpKTsKICAg
ICBzZXRIb3Jpem9udGFsT3ZlcmZsb3dQb3NpdGlvbnMobGVmdExheW91dE92ZXJmbG93KCksIHJp
Z2h0TGF5b3V0T3ZlcmZsb3coKSwgbWluKGxlZnRWaXN1YWxPdmVyZmxvdygpLCBpbmZsYXRlZFJl
Y3QueCgpKSwgbWF4KHJpZ2h0VmlzdWFsT3ZlcmZsb3coKSwgaW5mbGF0ZWRSZWN0LnJpZ2h0KCkp
KTsKLSAgICBzZXRWZXJ0aWNhbE92ZXJmbG93UG9zaXRpb25zKHRvcExheW91dE92ZXJmbG93KCks
IGJvdHRvbUxheW91dE92ZXJmbG93KCksIG1pbih0b3BWaXN1YWxPdmVyZmxvdygpLCBpbmZsYXRl
ZFJlY3QueSgpKSwgbWF4KGJvdHRvbVZpc3VhbE92ZXJmbG93KCksIGluZmxhdGVkUmVjdC5ib3R0
b20oKSksIGhlaWdodCgpKTsKKyAgICBzZXRWZXJ0aWNhbE92ZXJmbG93UG9zaXRpb25zKHRvcExh
eW91dE92ZXJmbG93KCksIGJvdHRvbUxheW91dE92ZXJmbG93KCksIG1pbih0b3BWaXN1YWxPdmVy
ZmxvdygpLCBpbmZsYXRlZFJlY3QueSgpKSwgbWF4KGJvdHRvbVZpc3VhbE92ZXJmbG93KCksIGlu
ZmxhdGVkUmVjdC5ib3R0b20oKSksIGxvZ2ljYWxIZWlnaHQoKSk7CiB9CiAKIHZvaWQgUm9vdElu
bGluZUJveDo6cGFpbnRDdXN0b21IaWdobGlnaHQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCB0
eCwgaW50IHR5LCBjb25zdCBBdG9taWNTdHJpbmcmIGhpZ2hsaWdodFR5cGUpCkBAIC0xNTMsNyAr
MTUzLDcgQEAgdm9pZCBSb290SW5saW5lQm94OjpwYWludEN1c3RvbUhpZ2hsaWdodAogICAgICAg
ICByZXR1cm47CiAKICAgICAvLyBHZXQgdGhlIGluZmxhdGVkIHJlY3Qgc28gdGhhdCB3ZSBjYW4g
cHJvcGVybHkgaGl0IHRlc3QuCi0gICAgRmxvYXRSZWN0IHJvb3RSZWN0KHR4ICsgeCgpLCB0eSAr
IHNlbGVjdGlvblRvcCgpLCB3aWR0aCgpLCBzZWxlY3Rpb25IZWlnaHQoKSk7CisgICAgRmxvYXRS
ZWN0IHJvb3RSZWN0KHR4ICsgeCgpLCB0eSArIHNlbGVjdGlvblRvcCgpLCBsb2dpY2FsV2lkdGgo
KSwgc2VsZWN0aW9uSGVpZ2h0KCkpOwogICAgIEZsb2F0UmVjdCBpbmZsYXRlZFJlY3QgPSBwYWdl
LT5jaHJvbWUoKS0+Y2xpZW50KCktPmN1c3RvbUhpZ2hsaWdodFJlY3QocmVuZGVyZXIoKS0+bm9k
ZSgpLCBoaWdobGlnaHRUeXBlLCByb290UmVjdCk7CiAgICAgaWYgKGluZmxhdGVkUmVjdC5pbnRl
cnNlY3RzKHBhaW50SW5mby5yZWN0KSkKICAgICAgICAgcGFnZS0+Y2hyb21lKCktPmNsaWVudCgp
LT5wYWludEN1c3RvbUhpZ2hsaWdodChyZW5kZXJlcigpLT5ub2RlKCksIGhpZ2hsaWdodFR5cGUs
IHJvb3RSZWN0LCByb290UmVjdCwgZmFsc2UsIHRydWUpOwpAQCAtMjUzLDcgKzI1Myw3IEBAIEdh
cFJlY3RzIFJvb3RJbmxpbmVCb3g6OmZpbGxMaW5lU2VsZWN0aW8KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290QmxvY2ssIGJsb2NrWCwg
YmxvY2tZLCB0eCwgdHksIHBhaW50SW5mbykpOwogICAgIGlmIChyaWdodEdhcCkKICAgICAgICAg
cmVzdWx0LnVuaXRlUmlnaHQoYmxvY2soKS0+ZmlsbFJpZ2h0U2VsZWN0aW9uR2FwKGxhc3RCb3gt
PnBhcmVudCgpLT5yZW5kZXJlcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEJveC0+eCgpICsgbGFzdEJveC0+d2lkdGgoKSwg
c2VsVG9wLCBzZWxIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsYXN0Qm94LT54KCkgKyBsYXN0Qm94LT5sb2dpY2FsV2lkdGgo
KSwgc2VsVG9wLCBzZWxIZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByb290QmxvY2ssIGJsb2NrWCwgYmxvY2tZLCB0eCwgdHks
IHBhaW50SW5mbykpOwogCiAgICAgLy8gV2hlbiBkZWFsaW5nIHdpdGggYmlkaSB0ZXh0LCBhIG5v
bi1jb250aWd1b3VzIHNlbGVjdGlvbiByZWdpb24gaXMgcG9zc2libGUuCkBAIC0yNjUsNyArMjY1
LDcgQEAgR2FwUmVjdHMgUm9vdElubGluZUJveDo6ZmlsbExpbmVTZWxlY3RpbwogICAgIC8vIFdl
IGNhbiBzZWUgdGhhdCB0aGUgfGJiYnwgcnVuIGlzIG5vdCBwYXJ0IG9mIHRoZSBzZWxlY3Rpb24g
d2hpbGUgdGhlIHJ1bnMgYXJvdW5kIGl0IGFyZS4KICAgICBpZiAoZmlyc3RCb3ggJiYgZmlyc3RC
b3ggIT0gbGFzdEJveCkgewogICAgICAgICAvLyBOb3cgZmlsbCBpbiBhbnkgZ2FwcyBvbiB0aGUg
bGluZSB0aGF0IG9jY3VycmVkIGJldHdlZW4gdHdvIHNlbGVjdGVkIGVsZW1lbnRzLgotICAgICAg
ICBpbnQgbGFzdFggPSBmaXJzdEJveC0+eCgpICsgZmlyc3RCb3gtPndpZHRoKCk7CisgICAgICAg
IGludCBsYXN0WCA9IGZpcnN0Qm94LT54KCkgKyBmaXJzdEJveC0+bG9naWNhbFdpZHRoKCk7CiAg
ICAgICAgIGJvb2wgaXNQcmV2aW91c0JveFNlbGVjdGVkID0gZmlyc3RCb3gtPnNlbGVjdGlvblN0
YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lOwogICAgICAgICBmb3IgKElubGlu
ZUJveCogYm94ID0gZmlyc3RCb3gtPm5leHRMZWFmQ2hpbGQoKTsgYm94OyBib3ggPSBib3gtPm5l
eHRMZWFmQ2hpbGQoKSkgewogICAgICAgICAgICAgaWYgKGJveC0+c2VsZWN0aW9uU3RhdGUoKSAh
PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpIHsKQEAgLTI3Myw3ICsyNzMsNyBAQCBHYXBS
ZWN0cyBSb290SW5saW5lQm94OjpmaWxsTGluZVNlbGVjdGlvCiAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC51bml0ZUNlbnRlcihibG9jaygpLT5maWxsSG9yaXpvbnRhbFNlbGVjdGlvbkdhcChi
b3gtPnBhcmVudCgpLT5yZW5kZXJlcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFggKyB0eCwg
c2VsVG9wICsgdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3gtPngoKSAtIGxhc3RYLCBzZWxIZWln
aHQsIHBhaW50SW5mbykpOwotICAgICAgICAgICAgICAgIGxhc3RYID0gYm94LT54KCkgKyBib3gt
PndpZHRoKCk7CisgICAgICAgICAgICAgICAgbGFzdFggPSBib3gtPngoKSArIGJveC0+bG9naWNh
bFdpZHRoKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoYm94ID09IGxhc3RCb3gp
CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zNzYsNyArMzc2LDcgQEAgSW5saW5lQm94KiBS
b290SW5saW5lQm94OjpjbG9zZXN0TGVhZkNoaQogICAgICAgICAvLyBSZXR1cm4gaXQuCiAgICAg
ICAgIHJldHVybiBmaXJzdExlYWY7CiAKLSAgICBpZiAoeCA+PSBsYXN0TGVhZi0+bV94ICsgbGFz
dExlYWYtPm1fd2lkdGggJiYgIWxhc3RMZWFmLT5yZW5kZXJlcigpLT5pc0xpc3RNYXJrZXIoKSAm
JiAoIW9ubHlFZGl0YWJsZUxlYXZlcyB8fCBpc0VkaXRhYmxlTGVhZihsYXN0TGVhZikpKQorICAg
IGlmICh4ID49IGxhc3RMZWFmLT5tX3ggKyBsYXN0TGVhZi0+bV9sb2dpY2FsV2lkdGggJiYgIWxh
c3RMZWFmLT5yZW5kZXJlcigpLT5pc0xpc3RNYXJrZXIoKSAmJiAoIW9ubHlFZGl0YWJsZUxlYXZl
cyB8fCBpc0VkaXRhYmxlTGVhZihsYXN0TGVhZikpKQogICAgICAgICAvLyBUaGUgeCBjb29yZGlu
YXRlIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gcmlnaHQgZWRnZSBvZiB0aGUgbGFzdExlYWYuCiAg
ICAgICAgIC8vIFJldHVybiBpdC4KICAgICAgICAgcmV0dXJuIGxhc3RMZWFmOwpAQCAtMzg1LDcg
KzM4NSw3IEBAIElubGluZUJveCogUm9vdElubGluZUJveDo6Y2xvc2VzdExlYWZDaGkKICAgICBm
b3IgKElubGluZUJveCogbGVhZiA9IGZpcnN0TGVhZjsgbGVhZjsgbGVhZiA9IGxlYWYtPm5leHRM
ZWFmQ2hpbGQoKSkgewogICAgICAgICBpZiAoIWxlYWYtPnJlbmRlcmVyKCktPmlzTGlzdE1hcmtl
cigpICYmICghb25seUVkaXRhYmxlTGVhdmVzIHx8IGlzRWRpdGFibGVMZWFmKGxlYWYpKSkgewog
ICAgICAgICAgICAgY2xvc2VzdExlYWYgPSBsZWFmOwotICAgICAgICAgICAgaWYgKHggPCBsZWFm
LT5tX3ggKyBsZWFmLT5tX3dpZHRoKQorICAgICAgICAgICAgaWYgKHggPCBsZWFmLT5tX3ggKyBs
ZWFmLT5tX2xvZ2ljYWxXaWR0aCkKICAgICAgICAgICAgICAgICAvLyBUaGUgeCBjb29yZGluYXRl
IGlzIGxlc3MgdGhhbiB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgYm94LgogICAgICAgICAgICAgICAg
IC8vIFJldHVybiBpdC4KICAgICAgICAgICAgICAgICByZXR1cm4gbGVhZjsKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1NWR0lubGluZUZsb3dCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9TVkdJbmxpbmVGbG93Qm94LmgJKHJldmlzaW9uIDY3OTMwKQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvU1ZHSW5saW5lRmxvd0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMiArMzMs
MTIgQEAgY2xhc3MgU1ZHSW5saW5lRmxvd0JveCA6IHB1YmxpYyBJbmxpbmVGbAogcHVibGljOgog
ICAgIFNWR0lubGluZUZsb3dCb3goUmVuZGVyT2JqZWN0KiBvYmopCiAgICAgICAgIDogSW5saW5l
Rmxvd0JveChvYmopCi0gICAgICAgICwgbV9oZWlnaHQoMCkKKyAgICAgICAgLCBtX2xvZ2ljYWxI
ZWlnaHQoMCkKICAgICB7CiAgICAgfQogCi0gICAgdmlydHVhbCBpbnQgdmlydHVhbEhlaWdodCgp
IGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9Ci0gICAgdm9pZCBzZXRIZWlnaHQoaW50IGgpIHsg
bV9oZWlnaHQgPSBoOyB9CisgICAgdmlydHVhbCBpbnQgdmlydHVhbExvZ2ljYWxIZWlnaHQoKSBj
b25zdCB7IHJldHVybiBtX2xvZ2ljYWxIZWlnaHQ7IH0KKyAgICB2b2lkIHNldExvZ2ljYWxIZWln
aHQoaW50IGgpIHsgbV9sb2dpY2FsSGVpZ2h0ID0gaDsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBh
aW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKIApAQCAtNDYsNyArNDYsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBsYXlvdXRGbG93Qm94KCk7CiAKIHByaXZhdGU6Ci0gICAgaW50IG1faGVp
Z2h0OworICAgIGludCBtX2xvZ2ljYWxIZWlnaHQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24g
Njc5MzApCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNWR0lubGlu
ZVRleHRCb3g6OlNWR0lubGluZVRleHRCb3goUmVuZGVyT2JqZWN0KiBvYmplY3QpCiAgICAgOiBJ
bmxpbmVUZXh0Qm94KG9iamVjdCkKLSAgICAsIG1faGVpZ2h0KDApCisgICAgLCBtX2xvZ2ljYWxI
ZWlnaHQoMCkKICAgICAsIG1fcGFpbnRpbmdSZXNvdXJjZSgwKQogICAgICwgbV9wYWludGluZ1Jl
c291cmNlTW9kZShBcHBseVRvRGVmYXVsdE1vZGUpCiB7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9TVkdJbmxpbmVUZXh0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZH
SW5saW5lVGV4dEJveC5oCShyZXZpc2lvbiA2NzkzMCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1NW
R0lubGluZVRleHRCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNDIsMTEgKzQyLDExIEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgYm9vbCBpc1NWR0lubGluZVRleHRCb3goKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIGludCB2aXJ0dWFsSGVpZ2h0KCkgY29uc3QgeyByZXR1
cm4gbV9oZWlnaHQ7IH0KLSAgICB2b2lkIHNldEhlaWdodChpbnQgaGVpZ2h0KSB7IG1faGVpZ2h0
ID0gaGVpZ2h0OyB9CisgICAgdmlydHVhbCBpbnQgdmlydHVhbExvZ2ljYWxIZWlnaHQoKSBjb25z
dCB7IHJldHVybiBtX2xvZ2ljYWxIZWlnaHQ7IH0KKyAgICB2b2lkIHNldExvZ2ljYWxIZWlnaHQo
aW50IGhlaWdodCkgeyBtX2xvZ2ljYWxIZWlnaHQgPSBoZWlnaHQ7IH0KIAogICAgIHZpcnR1YWwg
aW50IHNlbGVjdGlvblRvcCgpIHsgcmV0dXJuIG1feTsgfQotICAgIHZpcnR1YWwgaW50IHNlbGVj
dGlvbkhlaWdodCgpIHsgcmV0dXJuIG1faGVpZ2h0OyB9CisgICAgdmlydHVhbCBpbnQgc2VsZWN0
aW9uSGVpZ2h0KCkgeyByZXR1cm4gbV9sb2dpY2FsSGVpZ2h0OyB9CiAgICAgdmlydHVhbCBpbnQg
b2Zmc2V0Rm9yUG9zaXRpb24oaW50IHgsIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMgPSB0cnVl
KSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBwb3NpdGlvbkZvck9mZnNldChpbnQgb2Zmc2V0KSBj
b25zdDsKIApAQCAtOTEsNyArOTEsNyBAQCBwcml2YXRlOgogICAgIEZsb2F0UmVjdCBzZWxlY3Rp
b25SZWN0Rm9yVGV4dENodW5rUGFydChjb25zdCBTVkdUZXh0Q2h1bmtQYXJ0JiwgaW50IHBhcnRT
dGFydFBvcywgaW50IHBhcnRFbmRQb3MsIFJlbmRlclN0eWxlKik7CiAKIHByaXZhdGU6Ci0gICAg
aW50IG1faGVpZ2h0OworICAgIGludCBtX2xvZ2ljYWxIZWlnaHQ7CiAgICAgQWZmaW5lVHJhbnNm
b3JtIG1fY2h1bmtUcmFuc2Zvcm1hdGlvbjsKICAgICBWZWN0b3I8U1ZHVGV4dENodW5rUGFydD4g
bV9zdmdUZXh0Q2h1bmtQYXJ0czsKICAgICBtdXRhYmxlIFNWR1RleHRDaHVua1BhcnQgbV9jdXJy
ZW50Q2h1bmtQYXJ0OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJlZUFzVGV4
dC5jcHAJKHJldmlzaW9uIDY3OTMwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvU1ZHUmVuZGVyVHJl
ZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Miw3ICszOTIsNyBAQCBzdGF0aWMgdm9p
ZCB3cml0ZVJlbmRlclNWR1RleHRCb3goVGV4dFN0CiAgICAgICAgIHJldHVybjsKIAogICAgIFZl
Y3RvcjxTVkdUZXh0Q2h1bms+JiBjaHVua3MgPSBjb25zdF9jYXN0PFZlY3RvcjxTVkdUZXh0Q2h1
bms+JiA+KGJveC0+c3ZnVGV4dENodW5rcygpKTsKLSAgICB0cyA8PCAiIGF0ICgiIDw8IHRleHQu
eCgpIDw8ICIsIiA8PCB0ZXh0LnkoKSA8PCAiKSBzaXplICIgPDwgYm94LT53aWR0aCgpIDw8ICJ4
IiA8PCBib3gtPmhlaWdodCgpIDw8ICIgY29udGFpbnMgIiA8PCBjaHVua3Muc2l6ZSgpIDw8ICIg
Y2h1bmsocykiOworICAgIHRzIDw8ICIgYXQgKCIgPDwgdGV4dC54KCkgPDwgIiwiIDw8IHRleHQu
eSgpIDw8ICIpIHNpemUgIiA8PCBib3gtPmxvZ2ljYWxXaWR0aCgpIDw8ICJ4IiA8PCBib3gtPmxv
Z2ljYWxIZWlnaHQoKSA8PCAiIGNvbnRhaW5zICIgPDwgY2h1bmtzLnNpemUoKSA8PCAiIGNodW5r
KHMpIjsKIAogICAgIGlmICh0ZXh0LnBhcmVudCgpICYmICh0ZXh0LnBhcmVudCgpLT5zdHlsZSgp
LT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikgIT0gdGV4dC5zdHlsZSgp
LT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcikpKQogICAgICAgICB3cml0
ZU5hbWVWYWx1ZVBhaXIodHMsICJjb2xvciIsIHRleHQuc3R5bGUoKS0+dmlzaXRlZERlcGVuZGVu
dENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLm5hbWUoKSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9TVkdSb290SW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9T
VkdSb290SW5saW5lQm94LmNwcAkocmV2aXNpb24gNjc5MzApCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9TVkdSb290SW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk2LDggKzE5Niw4IEBA
IHZvaWQgU1ZHUm9vdElubGluZUJveDo6bGF5b3V0Q2hpbGRCb3hlcygKICAgICAgICAgICAgIElu
dFJlY3QgYm94UmVjdCA9IHRleHRCb3gtPmNhbGN1bGF0ZUJvdW5kYXJpZXMoKTsKICAgICAgICAg
ICAgIHRleHRCb3gtPnNldFgoYm94UmVjdC54KCkpOwogICAgICAgICAgICAgdGV4dEJveC0+c2V0
WShib3hSZWN0LnkoKSk7Ci0gICAgICAgICAgICB0ZXh0Qm94LT5zZXRXaWR0aChib3hSZWN0Lndp
ZHRoKCkpOwotICAgICAgICAgICAgdGV4dEJveC0+c2V0SGVpZ2h0KGJveFJlY3QuaGVpZ2h0KCkp
OworICAgICAgICAgICAgdGV4dEJveC0+c2V0TG9naWNhbFdpZHRoKGJveFJlY3Qud2lkdGgoKSk7
CisgICAgICAgICAgICB0ZXh0Qm94LT5zZXRMb2dpY2FsSGVpZ2h0KGJveFJlY3QuaGVpZ2h0KCkp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKGNoaWxkLT5pc0lubGluZUZs
b3dCb3goKSk7CiAgICAKQEAgLTIxMSw4ICsyMTEsOCBAQCB2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6
OmxheW91dENoaWxkQm94ZXMoCiAgICAgICAgICAgICBJbnRSZWN0IGJveFJlY3QgPSBmbG93Qm94
LT5jYWxjdWxhdGVCb3VuZGFyaWVzKCk7CiAgICAgICAgICAgICBmbG93Qm94LT5zZXRYKGJveFJl
Y3QueCgpKTsKICAgICAgICAgICAgIGZsb3dCb3gtPnNldFkoYm94UmVjdC55KCkpOwotICAgICAg
ICAgICAgZmxvd0JveC0+c2V0V2lkdGgoYm94UmVjdC53aWR0aCgpKTsKLSAgICAgICAgICAgIGZs
b3dCb3gtPnNldEhlaWdodChib3hSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgIGZsb3dCb3gt
PnNldExvZ2ljYWxXaWR0aChib3hSZWN0LndpZHRoKCkpOworICAgICAgICAgICAgZmxvd0JveC0+
c2V0TG9naWNhbEhlaWdodChib3hSZWN0LmhlaWdodCgpKTsKICAgICAgICAgfQogICAgIH0KIH0K
QEAgLTI1MSw4ICsyNTEsOCBAQCB2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OmxheW91dFJvb3RCb3go
KQogICAgIC8vIFBvc2l0aW9uIG91cnNlbHZlcy4KICAgICBzZXRYKDApOwogICAgIHNldFkoMCk7
Ci0gICAgc2V0V2lkdGgod2lkdGhCbG9jayk7Ci0gICAgc2V0SGVpZ2h0KGhlaWdodEJsb2NrKTsK
KyAgICBzZXRMb2dpY2FsV2lkdGgod2lkdGhCbG9jayk7CisgICAgc2V0TG9naWNhbEhlaWdodCho
ZWlnaHRCbG9jayk7CiAgICAgc2V0QmxvY2tIZWlnaHQoaGVpZ2h0QmxvY2spOwogICAgIHNldExp
bmVUb3BCb3R0b21Qb3NpdGlvbnMoMCwgaGVpZ2h0QmxvY2spOwogfQpJbmRleDogV2ViQ29yZS9y
ZW5kZXJpbmcvU1ZHUm9vdElubGluZUJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1NWR1Jvb3RJbmxpbmVCb3guaAkocmV2aXNpb24gNjc5MzApCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9TVkdSb290SW5saW5lQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDE0ICszOSwxNCBA
QCBjbGFzcyBTVkdSb290SW5saW5lQm94IDogcHVibGljIFJvb3RJbmxpCiBwdWJsaWM6CiAgICAg
U1ZHUm9vdElubGluZUJveChSZW5kZXJPYmplY3QqIG9iaikKICAgICAgICAgOiBSb290SW5saW5l
Qm94KG9iaikKLSAgICAgICAgLCBtX2hlaWdodCgwKQorICAgICAgICAsIG1fbG9naWNhbEhlaWdo
dCgwKQogICAgIHsKICAgICB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdSb290SW5saW5lQm94
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdmlydHVhbCBpbnQgdmlydHVhbEhlaWdo
dCgpIGNvbnN0IHsgcmV0dXJuIG1faGVpZ2h0OyB9Ci0gICAgdm9pZCBzZXRIZWlnaHQoaW50IGhl
aWdodCkgeyBtX2hlaWdodCA9IGhlaWdodDsgfQorICAgIHZpcnR1YWwgaW50IHZpcnR1YWxMb2dp
Y2FsSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsSGVpZ2h0OyB9CisgICAgdm9pZCBz
ZXRMb2dpY2FsSGVpZ2h0KGludCBoZWlnaHQpIHsgbV9sb2dpY2FsSGVpZ2h0ID0gaGVpZ2h0OyB9
CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwog
CkBAIC02Niw3ICs2Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBsYXlvdXRDaGlsZEJveGVzKElu
bGluZUZsb3dCb3gqIHN0YXJ0KTsKIAogcHJpdmF0ZToKLSAgICBpbnQgbV9oZWlnaHQ7CisgICAg
aW50IG1fbG9naWNhbEhlaWdodDsKICAgICBWZWN0b3I8U1ZHQ2hhcj4gbV9zdmdDaGFyczsKICAg
ICBWZWN0b3I8U1ZHVGV4dENodW5rPiBtX3N2Z1RleHRDaHVua3M7CiB9OwpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94LmgJKHJldmlzaW9u
IDY3OTMwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxMiBAQCBwdWJsaWM6CiAgICAgVHJhaWxp
bmdGbG9hdHNSb290SW5saW5lQm94KFJlbmRlck9iamVjdCogb2JqZWN0KSA6IFJvb3RJbmxpbmVC
b3gob2JqZWN0KQogICAgIHsKICNpZiBFTkFCTEUoU1ZHKQotICAgICAgICBzZXRIYXNWaXJ0dWFs
SGVpZ2h0KCk7CisgICAgICAgIHNldEhhc1ZpcnR1YWxMb2dpY2FsSGVpZ2h0KCk7CiAjZW5kaWYK
ICAgICB9CiAKIHByaXZhdGU6Ci0gICAgdmlydHVhbCBpbnQgdmlydHVhbEhlaWdodCgpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGludCB2aXJ0dWFsTG9naWNhbEhlaWdodCgpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="58094"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>