<?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>148889</bug_id>
          
          <creation_ts>2015-09-04 23:34:57 -0700</creation_ts>
          <short_desc>Rename members of CanvasRenderingContext2D::State</short_desc>
          <delta_ts>2015-09-04 23:45:14 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jonlee</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1123889</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-09-04 23:34:57 -0700</bug_when>
    <thetext>Rename members of CanvasRenderingContext2D::State</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1123890</commentid>
    <comment_count>1</comment_count>
      <attachid>260677</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-09-04 23:35:43 -0700</bug_when>
    <thetext>Created attachment 260677
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1123893</commentid>
    <comment_count>2</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-09-04 23:45:14 -0700</bug_when>
    <thetext>Committed r189427: &lt;http://trac.webkit.org/changeset/189427&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260677</attachid>
            <date>2015-09-04 23:35:43 -0700</date>
            <delta_ts>2015-09-04 23:41:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148889-20150904233541.patch</filename>
            <type>text/plain</type>
            <size>57543</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg5NDIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjNjMTMyNjQ3YmViMWQ0
MWQwNDYyZjZmZDkyZGRiMWUwYWNmMjUyMS4uM2JhZTk5YmE5ZDkwNDlmOGUwMGU4YjQ0ZDY0NDg1
NDc3OTllYTNjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDg2IEBACiAyMDE1LTA5LTA0ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKKyAgICAgICAgUmVuYW1lIG1l
bWJlcnMgb2YgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpTdGF0ZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4ODg5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpTdGF0ZSBpcyBhIHN0cnVjdCwgc28gaXRzIG1lbWJlcnMgc2hvdWxkIG5vdCBzdGFydCB3aXRo
IG1fLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGJlaGF2aW9y
IGNoYW5nZS4KKworICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OlN0YXRl
OjpTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OlN0
YXRlOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpyZXN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6c2V0U3Ryb2tlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpzZXRGaWxsU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpsaW5lV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpzZXRMaW5lV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpsaW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c2V0TGluZUNhcCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OmxpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c2V0TGluZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjptaXRlckxpbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c2V0TWl0ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnNoYWRvd09mZnNldFgpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTaGFkb3dPZmZzZXRYKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2hhZG93T2Zmc2V0WSk6CisgICAgICAgIChX
ZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvd09mZnNldFkpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzaGFkb3dCbHVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93Qmx1cik6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNoYWRvd0NvbG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpnZXRM
aW5lRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNl
dExpbmVEYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
c2V0V2Via2l0TGluZURhc2gpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpsaW5lRGFzaE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OnNldExpbmVEYXNoT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6YXBwbHlMaW5lRGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6Omdsb2JhbEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0R2xvYmFsQWxwaGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpnbG9iYWxDb21wb3NpdGVPcGVyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRHbG9iYWxD
b21wb3NpdGVPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpzY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OnJvdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnNldFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OnNldFN0cm9rZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6c2V0RmlsbENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6ZmlsbEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c3Ryb2tlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpjbGlwSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjppc1BvaW50SW5QYXRoSW50ZXJuYWwpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjppc1BvaW50SW5TdHJva2VJbnRlcm5h
bCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNsZWFyUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGxSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRv
dyk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmFwcGx5U2hh
ZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2hvdWxk
RHJhd1NoYWRvd3MpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpkcmF3SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Ojp0cmFuc2Zvcm1BcmVhVG9EZXZpY2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpyZWN0Q29udGFpbnNDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjb21wb3NpdGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkaWREcmF3KToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ZvY3VzSWZOZWVkZWRJbnRlcm5hbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZvbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KToKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dGV4dEFsaWduKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0VGV4dEFsaWduKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dGV4dEJhc2VsaW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0VGV4dEJhc2VsaW5l
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZGlyZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0RGlyZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1Rl
eHRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OmluZmxhdGVTdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6aW1hZ2VTbW9vdGhpbmdFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKToKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaDoKKworMjAxNS0wOS0wNCAg
TXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCiAgICAgICAgIENyYXNo
IHdoZW4gZm9udCBjb21wbGV0ZXMgZG93bmxvYWRpbmcgYWZ0ZXIgY2FsbGluZyAyRCBjYW52YXMg
c2V0VGV4dCgpIG11bHRpcGxlIHRpbWVzCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDg3ODkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKaW5kZXggOGFiNTM1ZTNlODUw
ZGQzYjA1NzQwM2EzOWJlMzZiMjJhOTQ0ZTFiNi4uYzRmMDc2NzQ3YjUxYzk3MjdmOTM5ZTUyOWRh
ODc3MTU5M2M5ODY3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC0xNTksNTEgKzE1OSw1MSBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cmVzZXQoKQogfQogCiBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OlN0YXRlOjpTdGF0ZSgpCi0gICAgOiBtX3N0cm9rZVN0eWxlKENvbG9yOjpibGFj
aykKLSAgICAsIG1fZmlsbFN0eWxlKENvbG9yOjpibGFjaykKLSAgICAsIG1fbGluZVdpZHRoKDEp
Ci0gICAgLCBtX2xpbmVDYXAoQnV0dENhcCkKLSAgICAsIG1fbGluZUpvaW4oTWl0ZXJKb2luKQot
ICAgICwgbV9taXRlckxpbWl0KDEwKQotICAgICwgbV9zaGFkb3dCbHVyKDApCi0gICAgLCBtX3No
YWRvd0NvbG9yKENvbG9yOjp0cmFuc3BhcmVudCkKLSAgICAsIG1fZ2xvYmFsQWxwaGEoMSkKLSAg
ICAsIG1fZ2xvYmFsQ29tcG9zaXRlKENvbXBvc2l0ZVNvdXJjZU92ZXIpCi0gICAgLCBtX2dsb2Jh
bEJsZW5kKEJsZW5kTW9kZU5vcm1hbCkKLSAgICAsIG1faGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSh0
cnVlKQotICAgICwgbV9saW5lRGFzaE9mZnNldCgwKQotICAgICwgbV9pbWFnZVNtb290aGluZ0Vu
YWJsZWQodHJ1ZSkKLSAgICAsIG1fdGV4dEFsaWduKFN0YXJ0VGV4dEFsaWduKQotICAgICwgbV90
ZXh0QmFzZWxpbmUoQWxwaGFiZXRpY1RleHRCYXNlbGluZSkKLSAgICAsIG1fZGlyZWN0aW9uKERp
cmVjdGlvbjo6SW5oZXJpdCkKLSAgICAsIG1fdW5wYXJzZWRGb250KGRlZmF1bHRGb250KQorICAg
IDogc3Ryb2tlU3R5bGUoQ29sb3I6OmJsYWNrKQorICAgICwgZmlsbFN0eWxlKENvbG9yOjpibGFj
aykKKyAgICAsIGxpbmVXaWR0aCgxKQorICAgICwgbGluZUNhcChCdXR0Q2FwKQorICAgICwgbGlu
ZUpvaW4oTWl0ZXJKb2luKQorICAgICwgbWl0ZXJMaW1pdCgxMCkKKyAgICAsIHNoYWRvd0JsdXIo
MCkKKyAgICAsIHNoYWRvd0NvbG9yKENvbG9yOjp0cmFuc3BhcmVudCkKKyAgICAsIGdsb2JhbEFs
cGhhKDEpCisgICAgLCBnbG9iYWxDb21wb3NpdGUoQ29tcG9zaXRlU291cmNlT3ZlcikKKyAgICAs
IGdsb2JhbEJsZW5kKEJsZW5kTW9kZU5vcm1hbCkKKyAgICAsIGhhc0ludmVydGlibGVUcmFuc2Zv
cm0odHJ1ZSkKKyAgICAsIGxpbmVEYXNoT2Zmc2V0KDApCisgICAgLCBpbWFnZVNtb290aGluZ0Vu
YWJsZWQodHJ1ZSkKKyAgICAsIHRleHRBbGlnbihTdGFydFRleHRBbGlnbikKKyAgICAsIHRleHRC
YXNlbGluZShBbHBoYWJldGljVGV4dEJhc2VsaW5lKQorICAgICwgZGlyZWN0aW9uKERpcmVjdGlv
bjo6SW5oZXJpdCkKKyAgICAsIHVucGFyc2VkRm9udChkZWZhdWx0Rm9udCkKIHsKIH0KIAogQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpTdGF0ZTo6U3RhdGUoY29uc3QgU3RhdGUmIG90aGVyKQot
ICAgIDogbV91bnBhcnNlZFN0cm9rZUNvbG9yKG90aGVyLm1fdW5wYXJzZWRTdHJva2VDb2xvcikK
LSAgICAsIG1fdW5wYXJzZWRGaWxsQ29sb3Iob3RoZXIubV91bnBhcnNlZEZpbGxDb2xvcikKLSAg
ICAsIG1fc3Ryb2tlU3R5bGUob3RoZXIubV9zdHJva2VTdHlsZSkKLSAgICAsIG1fZmlsbFN0eWxl
KG90aGVyLm1fZmlsbFN0eWxlKQotICAgICwgbV9saW5lV2lkdGgob3RoZXIubV9saW5lV2lkdGgp
Ci0gICAgLCBtX2xpbmVDYXAob3RoZXIubV9saW5lQ2FwKQotICAgICwgbV9saW5lSm9pbihvdGhl
ci5tX2xpbmVKb2luKQotICAgICwgbV9taXRlckxpbWl0KG90aGVyLm1fbWl0ZXJMaW1pdCkKLSAg
ICAsIG1fc2hhZG93T2Zmc2V0KG90aGVyLm1fc2hhZG93T2Zmc2V0KQotICAgICwgbV9zaGFkb3dC
bHVyKG90aGVyLm1fc2hhZG93Qmx1cikKLSAgICAsIG1fc2hhZG93Q29sb3Iob3RoZXIubV9zaGFk
b3dDb2xvcikKLSAgICAsIG1fZ2xvYmFsQWxwaGEob3RoZXIubV9nbG9iYWxBbHBoYSkKLSAgICAs
IG1fZ2xvYmFsQ29tcG9zaXRlKG90aGVyLm1fZ2xvYmFsQ29tcG9zaXRlKQotICAgICwgbV9nbG9i
YWxCbGVuZChvdGhlci5tX2dsb2JhbEJsZW5kKQotICAgICwgbV90cmFuc2Zvcm0ob3RoZXIubV90
cmFuc2Zvcm0pCi0gICAgLCBtX2hhc0ludmVydGlibGVUcmFuc2Zvcm0ob3RoZXIubV9oYXNJbnZl
cnRpYmxlVHJhbnNmb3JtKQotICAgICwgbV9saW5lRGFzaE9mZnNldChvdGhlci5tX2xpbmVEYXNo
T2Zmc2V0KQotICAgICwgbV9pbWFnZVNtb290aGluZ0VuYWJsZWQob3RoZXIubV9pbWFnZVNtb290
aGluZ0VuYWJsZWQpCi0gICAgLCBtX3RleHRBbGlnbihvdGhlci5tX3RleHRBbGlnbikKLSAgICAs
IG1fdGV4dEJhc2VsaW5lKG90aGVyLm1fdGV4dEJhc2VsaW5lKQotICAgICwgbV9kaXJlY3Rpb24o
b3RoZXIubV9kaXJlY3Rpb24pCi0gICAgLCBtX3VucGFyc2VkRm9udChvdGhlci5tX3VucGFyc2Vk
Rm9udCkKLSAgICAsIG1fZm9udChvdGhlci5tX2ZvbnQpCisgICAgOiB1bnBhcnNlZFN0cm9rZUNv
bG9yKG90aGVyLnVucGFyc2VkU3Ryb2tlQ29sb3IpCisgICAgLCB1bnBhcnNlZEZpbGxDb2xvcihv
dGhlci51bnBhcnNlZEZpbGxDb2xvcikKKyAgICAsIHN0cm9rZVN0eWxlKG90aGVyLnN0cm9rZVN0
eWxlKQorICAgICwgZmlsbFN0eWxlKG90aGVyLmZpbGxTdHlsZSkKKyAgICAsIGxpbmVXaWR0aChv
dGhlci5saW5lV2lkdGgpCisgICAgLCBsaW5lQ2FwKG90aGVyLmxpbmVDYXApCisgICAgLCBsaW5l
Sm9pbihvdGhlci5saW5lSm9pbikKKyAgICAsIG1pdGVyTGltaXQob3RoZXIubWl0ZXJMaW1pdCkK
KyAgICAsIHNoYWRvd09mZnNldChvdGhlci5zaGFkb3dPZmZzZXQpCisgICAgLCBzaGFkb3dCbHVy
KG90aGVyLnNoYWRvd0JsdXIpCisgICAgLCBzaGFkb3dDb2xvcihvdGhlci5zaGFkb3dDb2xvcikK
KyAgICAsIGdsb2JhbEFscGhhKG90aGVyLmdsb2JhbEFscGhhKQorICAgICwgZ2xvYmFsQ29tcG9z
aXRlKG90aGVyLmdsb2JhbENvbXBvc2l0ZSkKKyAgICAsIGdsb2JhbEJsZW5kKG90aGVyLmdsb2Jh
bEJsZW5kKQorICAgICwgdHJhbnNmb3JtKG90aGVyLnRyYW5zZm9ybSkKKyAgICAsIGhhc0ludmVy
dGlibGVUcmFuc2Zvcm0ob3RoZXIuaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSkKKyAgICAsIGxpbmVE
YXNoT2Zmc2V0KG90aGVyLmxpbmVEYXNoT2Zmc2V0KQorICAgICwgaW1hZ2VTbW9vdGhpbmdFbmFi
bGVkKG90aGVyLmltYWdlU21vb3RoaW5nRW5hYmxlZCkKKyAgICAsIHRleHRBbGlnbihvdGhlci50
ZXh0QWxpZ24pCisgICAgLCB0ZXh0QmFzZWxpbmUob3RoZXIudGV4dEJhc2VsaW5lKQorICAgICwg
ZGlyZWN0aW9uKG90aGVyLmRpcmVjdGlvbikKKyAgICAsIHVucGFyc2VkRm9udChvdGhlci51bnBh
cnNlZEZvbnQpCisgICAgLCBmb250KG90aGVyLmZvbnQpCiB7CiB9CiAKQEAgLTIxMiwyOCArMjEy
LDI4IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6U3RhdGUmIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6U3RhdGU6Om9wZXJhdG9yPShjb25zCiAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQog
ICAgICAgICByZXR1cm4gKnRoaXM7CiAKLSAgICBtX3VucGFyc2VkU3Ryb2tlQ29sb3IgPSBvdGhl
ci5tX3VucGFyc2VkU3Ryb2tlQ29sb3I7Ci0gICAgbV91bnBhcnNlZEZpbGxDb2xvciA9IG90aGVy
Lm1fdW5wYXJzZWRGaWxsQ29sb3I7Ci0gICAgbV9zdHJva2VTdHlsZSA9IG90aGVyLm1fc3Ryb2tl
U3R5bGU7Ci0gICAgbV9maWxsU3R5bGUgPSBvdGhlci5tX2ZpbGxTdHlsZTsKLSAgICBtX2xpbmVX
aWR0aCA9IG90aGVyLm1fbGluZVdpZHRoOwotICAgIG1fbGluZUNhcCA9IG90aGVyLm1fbGluZUNh
cDsKLSAgICBtX2xpbmVKb2luID0gb3RoZXIubV9saW5lSm9pbjsKLSAgICBtX21pdGVyTGltaXQg
PSBvdGhlci5tX21pdGVyTGltaXQ7Ci0gICAgbV9zaGFkb3dPZmZzZXQgPSBvdGhlci5tX3NoYWRv
d09mZnNldDsKLSAgICBtX3NoYWRvd0JsdXIgPSBvdGhlci5tX3NoYWRvd0JsdXI7Ci0gICAgbV9z
aGFkb3dDb2xvciA9IG90aGVyLm1fc2hhZG93Q29sb3I7Ci0gICAgbV9nbG9iYWxBbHBoYSA9IG90
aGVyLm1fZ2xvYmFsQWxwaGE7Ci0gICAgbV9nbG9iYWxDb21wb3NpdGUgPSBvdGhlci5tX2dsb2Jh
bENvbXBvc2l0ZTsKLSAgICBtX2dsb2JhbEJsZW5kID0gb3RoZXIubV9nbG9iYWxCbGVuZDsKLSAg
ICBtX3RyYW5zZm9ybSA9IG90aGVyLm1fdHJhbnNmb3JtOwotICAgIG1faGFzSW52ZXJ0aWJsZVRy
YW5zZm9ybSA9IG90aGVyLm1faGFzSW52ZXJ0aWJsZVRyYW5zZm9ybTsKLSAgICBtX2ltYWdlU21v
b3RoaW5nRW5hYmxlZCA9IG90aGVyLm1faW1hZ2VTbW9vdGhpbmdFbmFibGVkOwotICAgIG1fdGV4
dEFsaWduID0gb3RoZXIubV90ZXh0QWxpZ247Ci0gICAgbV90ZXh0QmFzZWxpbmUgPSBvdGhlci5t
X3RleHRCYXNlbGluZTsKLSAgICBtX2RpcmVjdGlvbiA9IG90aGVyLm1fZGlyZWN0aW9uOwotICAg
IG1fdW5wYXJzZWRGb250ID0gb3RoZXIubV91bnBhcnNlZEZvbnQ7Ci0gICAgbV9mb250ID0gb3Ro
ZXIubV9mb250OworICAgIHVucGFyc2VkU3Ryb2tlQ29sb3IgPSBvdGhlci51bnBhcnNlZFN0cm9r
ZUNvbG9yOworICAgIHVucGFyc2VkRmlsbENvbG9yID0gb3RoZXIudW5wYXJzZWRGaWxsQ29sb3I7
CisgICAgc3Ryb2tlU3R5bGUgPSBvdGhlci5zdHJva2VTdHlsZTsKKyAgICBmaWxsU3R5bGUgPSBv
dGhlci5maWxsU3R5bGU7CisgICAgbGluZVdpZHRoID0gb3RoZXIubGluZVdpZHRoOworICAgIGxp
bmVDYXAgPSBvdGhlci5saW5lQ2FwOworICAgIGxpbmVKb2luID0gb3RoZXIubGluZUpvaW47Cisg
ICAgbWl0ZXJMaW1pdCA9IG90aGVyLm1pdGVyTGltaXQ7CisgICAgc2hhZG93T2Zmc2V0ID0gb3Ro
ZXIuc2hhZG93T2Zmc2V0OworICAgIHNoYWRvd0JsdXIgPSBvdGhlci5zaGFkb3dCbHVyOworICAg
IHNoYWRvd0NvbG9yID0gb3RoZXIuc2hhZG93Q29sb3I7CisgICAgZ2xvYmFsQWxwaGEgPSBvdGhl
ci5nbG9iYWxBbHBoYTsKKyAgICBnbG9iYWxDb21wb3NpdGUgPSBvdGhlci5nbG9iYWxDb21wb3Np
dGU7CisgICAgZ2xvYmFsQmxlbmQgPSBvdGhlci5nbG9iYWxCbGVuZDsKKyAgICB0cmFuc2Zvcm0g
PSBvdGhlci50cmFuc2Zvcm07CisgICAgaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSA9IG90aGVyLmhh
c0ludmVydGlibGVUcmFuc2Zvcm07CisgICAgaW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gb3RoZXIu
aW1hZ2VTbW9vdGhpbmdFbmFibGVkOworICAgIHRleHRBbGlnbiA9IG90aGVyLnRleHRBbGlnbjsK
KyAgICB0ZXh0QmFzZWxpbmUgPSBvdGhlci50ZXh0QmFzZWxpbmU7CisgICAgZGlyZWN0aW9uID0g
b3RoZXIuZGlyZWN0aW9uOworICAgIHVucGFyc2VkRm9udCA9IG90aGVyLnVucGFyc2VkRm9udDsK
KyAgICBmb250ID0gb3RoZXIuZm9udDsKIAogICAgIHJldHVybiAqdGhpczsKIH0KQEAgLTMzNiw5
ICszMzYsOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cmVzdG9yZSgpCiAgICAg
QVNTRVJUKG1fc3RhdGVTdGFjay5zaXplKCkgPj0gMSk7CiAgICAgaWYgKG1fc3RhdGVTdGFjay5z
aXplKCkgPD0gMSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fcGF0aC50cmFuc2Zvcm0oc3RhdGUo
KS5tX3RyYW5zZm9ybSk7CisgICAgbV9wYXRoLnRyYW5zZm9ybShzdGF0ZSgpLnRyYW5zZm9ybSk7
CiAgICAgbV9zdGF0ZVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICBtX3BhdGgudHJhbnNmb3JtKHN0
YXRlKCkubV90cmFuc2Zvcm0uaW52ZXJzZSgpKTsKKyAgICBtX3BhdGgudHJhbnNmb3JtKHN0YXRl
KCkudHJhbnNmb3JtLmludmVyc2UoKSk7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2lu
Z0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKQEAgLTM1MCw3ICszNTAs
NyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U3Ryb2tlU3R5bGUoQ2FudmFz
U3R5bGUgc3R5bGUpCiAgICAgaWYgKCFzdHlsZS5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUuaXNWYWxpZCgpICYmIHN0YXRlKCkubV9z
dHJva2VTdHlsZS5pc0VxdWl2YWxlbnRDb2xvcihzdHlsZSkpCisgICAgaWYgKHN0YXRlKCkuc3Ry
b2tlU3R5bGUuaXNWYWxpZCgpICYmIHN0YXRlKCkuc3Ryb2tlU3R5bGUuaXNFcXVpdmFsZW50Q29s
b3Ioc3R5bGUpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc3R5bGUuaXNDdXJyZW50Q29s
b3IoKSkgewpAQCAtMzYzLDEyICszNjMsMTIgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OnNldFN0cm9rZVN0eWxlKENhbnZhc1N0eWxlIHN0eWxlKQogCiAgICAgcmVhbGl6ZVNhdmVz
KCk7CiAgICAgU3RhdGUmIHN0YXRlID0gbW9kaWZpYWJsZVN0YXRlKCk7Ci0gICAgc3RhdGUubV9z
dHJva2VTdHlsZSA9IHN0eWxlOworICAgIHN0YXRlLnN0cm9rZVN0eWxlID0gc3R5bGU7CiAgICAg
R3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAg
ICAgIHJldHVybjsKLSAgICBzdGF0ZS5tX3N0cm9rZVN0eWxlLmFwcGx5U3Ryb2tlQ29sb3IoYyk7
Ci0gICAgc3RhdGUubV91bnBhcnNlZFN0cm9rZUNvbG9yID0gU3RyaW5nKCk7CisgICAgc3RhdGUu
c3Ryb2tlU3R5bGUuYXBwbHlTdHJva2VDb2xvcihjKTsKKyAgICBzdGF0ZS51bnBhcnNlZFN0cm9r
ZUNvbG9yID0gU3RyaW5nKCk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
ZXRGaWxsU3R5bGUoQ2FudmFzU3R5bGUgc3R5bGUpCkBAIC0zNzYsNyArMzc2LDcgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZpbGxTdHlsZShDYW52YXNTdHlsZSBzdHlsZSkK
ICAgICBpZiAoIXN0eWxlLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHN0
YXRlKCkubV9maWxsU3R5bGUuaXNWYWxpZCgpICYmIHN0YXRlKCkubV9maWxsU3R5bGUuaXNFcXVp
dmFsZW50Q29sb3Ioc3R5bGUpKQorICAgIGlmIChzdGF0ZSgpLmZpbGxTdHlsZS5pc1ZhbGlkKCkg
JiYgc3RhdGUoKS5maWxsU3R5bGUuaXNFcXVpdmFsZW50Q29sb3Ioc3R5bGUpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAoc3R5bGUuaXNDdXJyZW50Q29sb3IoKSkgewpAQCAtMzg5LDI3ICsz
ODksMjcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZpbGxTdHlsZShDYW52
YXNTdHlsZSBzdHlsZSkKIAogICAgIHJlYWxpemVTYXZlcygpOwogICAgIFN0YXRlJiBzdGF0ZSA9
IG1vZGlmaWFibGVTdGF0ZSgpOwotICAgIHN0YXRlLm1fZmlsbFN0eWxlID0gc3R5bGU7CisgICAg
c3RhdGUuZmlsbFN0eWxlID0gc3R5bGU7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2lu
Z0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKLSAgICBzdGF0ZS5tX2Zp
bGxTdHlsZS5hcHBseUZpbGxDb2xvcihjKTsKLSAgICBzdGF0ZS5tX3VucGFyc2VkRmlsbENvbG9y
ID0gU3RyaW5nKCk7CisgICAgc3RhdGUuZmlsbFN0eWxlLmFwcGx5RmlsbENvbG9yKGMpOworICAg
IHN0YXRlLnVucGFyc2VkRmlsbENvbG9yID0gU3RyaW5nKCk7CiB9CiAKIGZsb2F0IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6bGluZVdpZHRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc3RhdGUo
KS5tX2xpbmVXaWR0aDsKKyAgICByZXR1cm4gc3RhdGUoKS5saW5lV2lkdGg7CiB9CiAKIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRMaW5lV2lkdGgoZmxvYXQgd2lkdGgpCiB7CiAg
ICAgaWYgKCEoc3RkOjppc2Zpbml0ZSh3aWR0aCkgJiYgd2lkdGggPiAwKSkKICAgICAgICAgcmV0
dXJuOwotICAgIGlmIChzdGF0ZSgpLm1fbGluZVdpZHRoID09IHdpZHRoKQorICAgIGlmIChzdGF0
ZSgpLmxpbmVXaWR0aCA9PSB3aWR0aCkKICAgICAgICAgcmV0dXJuOwogICAgIHJlYWxpemVTYXZl
cygpOwotICAgIG1vZGlmaWFibGVTdGF0ZSgpLm1fbGluZVdpZHRoID0gd2lkdGg7CisgICAgbW9k
aWZpYWJsZVN0YXRlKCkubGluZVdpZHRoID0gd2lkdGg7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBj
ID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKQEAgLTQx
OCw3ICs0MTgsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0TGluZVdpZHRo
KGZsb2F0IHdpZHRoKQogCiBTdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpsaW5lQ2Fw
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbGluZUNhcE5hbWUoc3RhdGUoKS5tX2xpbmVDYXApOwor
ICAgIHJldHVybiBsaW5lQ2FwTmFtZShzdGF0ZSgpLmxpbmVDYXApOwogfQogCiB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0TGluZUNhcChjb25zdCBTdHJpbmcmIHMpCkBAIC00MjYs
MTAgKzQyNiwxMCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0TGluZUNhcChj
b25zdCBTdHJpbmcmIHMpCiAgICAgTGluZUNhcCBjYXA7CiAgICAgaWYgKCFwYXJzZUxpbmVDYXAo
cywgY2FwKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChzdGF0ZSgpLm1fbGluZUNhcCA9PSBj
YXApCisgICAgaWYgKHN0YXRlKCkubGluZUNhcCA9PSBjYXApCiAgICAgICAgIHJldHVybjsKICAg
ICByZWFsaXplU2F2ZXMoKTsKLSAgICBtb2RpZmlhYmxlU3RhdGUoKS5tX2xpbmVDYXAgPSBjYXA7
CisgICAgbW9kaWZpYWJsZVN0YXRlKCkubGluZUNhcCA9IGNhcDsKICAgICBHcmFwaGljc0NvbnRl
eHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOwpA
QCAtNDM4LDcgKzQzOCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRMaW5l
Q2FwKGNvbnN0IFN0cmluZyYgcykKIAogU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
bGluZUpvaW4oKSBjb25zdAogewotICAgIHJldHVybiBsaW5lSm9pbk5hbWUoc3RhdGUoKS5tX2xp
bmVKb2luKTsKKyAgICByZXR1cm4gbGluZUpvaW5OYW1lKHN0YXRlKCkubGluZUpvaW4pOwogfQog
CiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0TGluZUpvaW4oY29uc3QgU3RyaW5n
JiBzKQpAQCAtNDQ2LDEwICs0NDYsMTAgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnNldExpbmVKb2luKGNvbnN0IFN0cmluZyYgcykKICAgICBMaW5lSm9pbiBqb2luOwogICAgIGlm
ICghcGFyc2VMaW5lSm9pbihzLCBqb2luKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChzdGF0
ZSgpLm1fbGluZUpvaW4gPT0gam9pbikKKyAgICBpZiAoc3RhdGUoKS5saW5lSm9pbiA9PSBqb2lu
KQogICAgICAgICByZXR1cm47CiAgICAgcmVhbGl6ZVNhdmVzKCk7Ci0gICAgbW9kaWZpYWJsZVN0
YXRlKCkubV9saW5lSm9pbiA9IGpvaW47CisgICAgbW9kaWZpYWJsZVN0YXRlKCkubGluZUpvaW4g
PSBqb2luOwogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAg
aWYgKCFjKQogICAgICAgICByZXR1cm47CkBAIC00NTgsMTcgKzQ1OCwxNyBAQCB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0TGluZUpvaW4oY29uc3QgU3RyaW5nJiBzKQogCiBmbG9h
dCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6Om1pdGVyTGltaXQoKSBjb25zdAogewotICAgIHJl
dHVybiBzdGF0ZSgpLm1fbWl0ZXJMaW1pdDsKKyAgICByZXR1cm4gc3RhdGUoKS5taXRlckxpbWl0
OwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0TWl0ZXJMaW1pdChmbG9h
dCBsaW1pdCkKIHsKICAgICBpZiAoIShzdGQ6OmlzZmluaXRlKGxpbWl0KSAmJiBsaW1pdCA+IDAp
KQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKHN0YXRlKCkubV9taXRlckxpbWl0ID09IGxpbWl0
KQorICAgIGlmIChzdGF0ZSgpLm1pdGVyTGltaXQgPT0gbGltaXQpCiAgICAgICAgIHJldHVybjsK
ICAgICByZWFsaXplU2F2ZXMoKTsKLSAgICBtb2RpZmlhYmxlU3RhdGUoKS5tX21pdGVyTGltaXQg
PSBsaW1pdDsKKyAgICBtb2RpZmlhYmxlU3RhdGUoKS5taXRlckxpbWl0ID0gbGltaXQ7CiAgICAg
R3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAg
ICAgIHJldHVybjsKQEAgLTQ3Nyw1NSArNDc3LDU1IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQogCiBmbG9hdCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OnNoYWRvd09mZnNldFgoKSBjb25zdAogewotICAgIHJldHVybiBzdGF0ZSgp
Lm1fc2hhZG93T2Zmc2V0LndpZHRoKCk7CisgICAgcmV0dXJuIHN0YXRlKCkuc2hhZG93T2Zmc2V0
LndpZHRoKCk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTaGFkb3dP
ZmZzZXRYKGZsb2F0IHgpCiB7CiAgICAgaWYgKCFzdGQ6OmlzZmluaXRlKHgpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKHN0YXRlKCkubV9zaGFkb3dPZmZzZXQud2lkdGgoKSA9PSB4KQorICAg
IGlmIChzdGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpID09IHgpCiAgICAgICAgIHJldHVybjsK
ICAgICByZWFsaXplU2F2ZXMoKTsKLSAgICBtb2RpZmlhYmxlU3RhdGUoKS5tX3NoYWRvd09mZnNl
dC5zZXRXaWR0aCh4KTsKKyAgICBtb2RpZmlhYmxlU3RhdGUoKS5zaGFkb3dPZmZzZXQuc2V0V2lk
dGgoeCk7CiAgICAgYXBwbHlTaGFkb3coKTsKIH0KIAogZmxvYXQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpzaGFkb3dPZmZzZXRZKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc3RhdGUoKS5tX3No
YWRvd09mZnNldC5oZWlnaHQoKTsKKyAgICByZXR1cm4gc3RhdGUoKS5zaGFkb3dPZmZzZXQuaGVp
Z2h0KCk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTaGFkb3dPZmZz
ZXRZKGZsb2F0IHkpCiB7CiAgICAgaWYgKCFzdGQ6OmlzZmluaXRlKHkpKQogICAgICAgICByZXR1
cm47Ci0gICAgaWYgKHN0YXRlKCkubV9zaGFkb3dPZmZzZXQuaGVpZ2h0KCkgPT0geSkKKyAgICBp
ZiAoc3RhdGUoKS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkgPT0geSkKICAgICAgICAgcmV0dXJuOwog
ICAgIHJlYWxpemVTYXZlcygpOwotICAgIG1vZGlmaWFibGVTdGF0ZSgpLm1fc2hhZG93T2Zmc2V0
LnNldEhlaWdodCh5KTsKKyAgICBtb2RpZmlhYmxlU3RhdGUoKS5zaGFkb3dPZmZzZXQuc2V0SGVp
Z2h0KHkpOwogICAgIGFwcGx5U2hhZG93KCk7CiB9CiAKIGZsb2F0IENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6c2hhZG93Qmx1cigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0YXRlKCkubV9zaGFk
b3dCbHVyOworICAgIHJldHVybiBzdGF0ZSgpLnNoYWRvd0JsdXI7CiB9CiAKIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTaGFkb3dCbHVyKGZsb2F0IGJsdXIpCiB7CiAgICAgaWYg
KCEoc3RkOjppc2Zpbml0ZShibHVyKSAmJiBibHVyID49IDApKQogICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKHN0YXRlKCkubV9zaGFkb3dCbHVyID09IGJsdXIpCisgICAgaWYgKHN0YXRlKCkuc2hh
ZG93Qmx1ciA9PSBibHVyKQogICAgICAgICByZXR1cm47CiAgICAgcmVhbGl6ZVNhdmVzKCk7Ci0g
ICAgbW9kaWZpYWJsZVN0YXRlKCkubV9zaGFkb3dCbHVyID0gYmx1cjsKKyAgICBtb2RpZmlhYmxl
U3RhdGUoKS5zaGFkb3dCbHVyID0gYmx1cjsKICAgICBhcHBseVNoYWRvdygpOwogfQogCiBTdHJp
bmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzaGFkb3dDb2xvcigpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIENvbG9yKHN0YXRlKCkubV9zaGFkb3dDb2xvcikuc2VyaWFsaXplZCgpOworICAgIHJl
dHVybiBDb2xvcihzdGF0ZSgpLnNoYWRvd0NvbG9yKS5zZXJpYWxpemVkKCk7CiB9CiAKIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTaGFkb3dDb2xvcihjb25zdCBTdHJpbmcmIGNv
bG9yKQpAQCAtNTMzLDE2ICs1MzMsMTYgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnNldFNoYWRvd0NvbG9yKGNvbnN0IFN0cmluZyYgY29sb3IpCiAgICAgUkdCQTMyIHJnYmE7CiAg
ICAgaWYgKCFwYXJzZUNvbG9yT3JDdXJyZW50Q29sb3IocmdiYSwgY29sb3IsIGNhbnZhcygpKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIGlmIChzdGF0ZSgpLm1fc2hhZG93Q29sb3IgPT0gcmdiYSkK
KyAgICBpZiAoc3RhdGUoKS5zaGFkb3dDb2xvciA9PSByZ2JhKQogICAgICAgICByZXR1cm47CiAg
ICAgcmVhbGl6ZVNhdmVzKCk7Ci0gICAgbW9kaWZpYWJsZVN0YXRlKCkubV9zaGFkb3dDb2xvciA9
IHJnYmE7CisgICAgbW9kaWZpYWJsZVN0YXRlKCkuc2hhZG93Q29sb3IgPSByZ2JhOwogICAgIGFw
cGx5U2hhZG93KCk7CiB9CiAKIGNvbnN0IFZlY3RvcjxmbG9hdD4mIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6Z2V0TGluZURhc2goKSBjb25zdAogewotICAgIHJldHVybiBzdGF0ZSgpLm1fbGlu
ZURhc2g7CisgICAgcmV0dXJuIHN0YXRlKCkubGluZURhc2g7CiB9CiAKIHN0YXRpYyBib29sIGxp
bmVEYXNoU2VxdWVuY2VJc1ZhbGlkKGNvbnN0IFZlY3RvcjxmbG9hdD4mIGRhc2gpCkBAIC01NjAs
MTEgKzU2MCwxMSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0TGluZURhc2go
Y29uc3QgVmVjdG9yPGZsb2F0PiYgZGFzaCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgcmVhbGl6
ZVNhdmVzKCk7Ci0gICAgbW9kaWZpYWJsZVN0YXRlKCkubV9saW5lRGFzaCA9IGRhc2g7CisgICAg
bW9kaWZpYWJsZVN0YXRlKCkubGluZURhc2ggPSBkYXNoOwogICAgIC8vIFNwZWMgcmVxdWlyZXMg
dGhlIGNvbmNhdGVuYXRpb24gb2YgdHdvIGNvcGllcyB0aGUgZGFzaCBsaXN0IHdoZW4gdGhlCiAg
ICAgLy8gbnVtYmVyIG9mIGVsZW1lbnRzIGlzIG9kZAogICAgIGlmIChkYXNoLnNpemUoKSAlIDIp
Ci0gICAgICAgIG1vZGlmaWFibGVTdGF0ZSgpLm1fbGluZURhc2guYXBwZW5kVmVjdG9yKGRhc2gp
OworICAgICAgICBtb2RpZmlhYmxlU3RhdGUoKS5saW5lRGFzaC5hcHBlbmRWZWN0b3IoZGFzaCk7
CiAKICAgICBhcHBseUxpbmVEYXNoKCk7CiB9CkBAIC01NzUsMjMgKzU3NSwyMyBAQCB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0V2Via2l0TGluZURhc2goY29uc3QgVmVjdG9yPGZs
b2F0PiYgZGFzaCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgcmVhbGl6ZVNhdmVzKCk7Ci0gICAg
bW9kaWZpYWJsZVN0YXRlKCkubV9saW5lRGFzaCA9IGRhc2g7CisgICAgbW9kaWZpYWJsZVN0YXRl
KCkubGluZURhc2ggPSBkYXNoOwogCiAgICAgYXBwbHlMaW5lRGFzaCgpOwogfQogCiBmbG9hdCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmxpbmVEYXNoT2Zmc2V0KCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gc3RhdGUoKS5tX2xpbmVEYXNoT2Zmc2V0OworICAgIHJldHVybiBzdGF0ZSgpLmxpbmVE
YXNoT2Zmc2V0OwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0TGluZURh
c2hPZmZzZXQoZmxvYXQgb2Zmc2V0KQogewotICAgIGlmICghc3RkOjppc2Zpbml0ZShvZmZzZXQp
IHx8IHN0YXRlKCkubV9saW5lRGFzaE9mZnNldCA9PSBvZmZzZXQpCisgICAgaWYgKCFzdGQ6Omlz
ZmluaXRlKG9mZnNldCkgfHwgc3RhdGUoKS5saW5lRGFzaE9mZnNldCA9PSBvZmZzZXQpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIHJlYWxpemVTYXZlcygpOwotICAgIG1vZGlmaWFibGVTdGF0ZSgp
Lm1fbGluZURhc2hPZmZzZXQgPSBvZmZzZXQ7CisgICAgbW9kaWZpYWJsZVN0YXRlKCkubGluZURh
c2hPZmZzZXQgPSBvZmZzZXQ7CiAgICAgYXBwbHlMaW5lRGFzaCgpOwogfQogCkBAIC02MTAsMjUg
KzYxMCwyNSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YXBwbHlMaW5lRGFzaCgp
IGNvbnN0CiAgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBp
ZiAoIWMpCiAgICAgICAgIHJldHVybjsKLSAgICBEYXNoQXJyYXkgY29udmVydGVkTGluZURhc2go
c3RhdGUoKS5tX2xpbmVEYXNoLnNpemUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
dGF0ZSgpLm1fbGluZURhc2guc2l6ZSgpOyArK2kpCi0gICAgICAgIGNvbnZlcnRlZExpbmVEYXNo
W2ldID0gc3RhdGljX2Nhc3Q8RGFzaEFycmF5RWxlbWVudD4oc3RhdGUoKS5tX2xpbmVEYXNoW2ld
KTsKLSAgICBjLT5zZXRMaW5lRGFzaChjb252ZXJ0ZWRMaW5lRGFzaCwgc3RhdGUoKS5tX2xpbmVE
YXNoT2Zmc2V0KTsKKyAgICBEYXNoQXJyYXkgY29udmVydGVkTGluZURhc2goc3RhdGUoKS5saW5l
RGFzaC5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RhdGUoKS5saW5lRGFz
aC5zaXplKCk7ICsraSkKKyAgICAgICAgY29udmVydGVkTGluZURhc2hbaV0gPSBzdGF0aWNfY2Fz
dDxEYXNoQXJyYXlFbGVtZW50PihzdGF0ZSgpLmxpbmVEYXNoW2ldKTsKKyAgICBjLT5zZXRMaW5l
RGFzaChjb252ZXJ0ZWRMaW5lRGFzaCwgc3RhdGUoKS5saW5lRGFzaE9mZnNldCk7CiB9CiAKIGZs
b2F0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Z2xvYmFsQWxwaGEoKSBjb25zdAogewotICAg
IHJldHVybiBzdGF0ZSgpLm1fZ2xvYmFsQWxwaGE7CisgICAgcmV0dXJuIHN0YXRlKCkuZ2xvYmFs
QWxwaGE7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRHbG9iYWxBbHBo
YShmbG9hdCBhbHBoYSkKIHsKICAgICBpZiAoIShhbHBoYSA+PSAwICYmIGFscGhhIDw9IDEpKQog
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKHN0YXRlKCkubV9nbG9iYWxBbHBoYSA9PSBhbHBoYSkK
KyAgICBpZiAoc3RhdGUoKS5nbG9iYWxBbHBoYSA9PSBhbHBoYSkKICAgICAgICAgcmV0dXJuOwog
ICAgIHJlYWxpemVTYXZlcygpOwotICAgIG1vZGlmaWFibGVTdGF0ZSgpLm1fZ2xvYmFsQWxwaGEg
PSBhbHBoYTsKKyAgICBtb2RpZmlhYmxlU3RhdGUoKS5nbG9iYWxBbHBoYSA9IGFscGhhOwogICAg
IEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAg
ICAgICByZXR1cm47CkBAIC02MzcsNyArNjM3LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OnNldEdsb2JhbEFscGhhKGZsb2F0IGFscGhhKQogCiBTdHJpbmcgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpnbG9iYWxDb21wb3NpdGVPcGVyYXRpb24oKSBjb25zdAogewotICAgIHJl
dHVybiBjb21wb3NpdGVPcGVyYXRvck5hbWUoc3RhdGUoKS5tX2dsb2JhbENvbXBvc2l0ZSwgc3Rh
dGUoKS5tX2dsb2JhbEJsZW5kKTsKKyAgICByZXR1cm4gY29tcG9zaXRlT3BlcmF0b3JOYW1lKHN0
YXRlKCkuZ2xvYmFsQ29tcG9zaXRlLCBzdGF0ZSgpLmdsb2JhbEJsZW5kKTsKIH0KIAogdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbihjb25z
dCBTdHJpbmcmIG9wZXJhdGlvbikKQEAgLTY0NiwxMSArNjQ2LDExIEBAIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpzZXRHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24oY29uc3QgU3RyaW5n
JiBvcGVyYXRpCiAgICAgQmxlbmRNb2RlIGJsZW5kTW9kZSA9IEJsZW5kTW9kZU5vcm1hbDsKICAg
ICBpZiAoIXBhcnNlQ29tcG9zaXRlQW5kQmxlbmRPcGVyYXRvcihvcGVyYXRpb24sIG9wLCBibGVu
ZE1vZGUpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKChzdGF0ZSgpLm1fZ2xvYmFsQ29tcG9z
aXRlID09IG9wKSAmJiAoc3RhdGUoKS5tX2dsb2JhbEJsZW5kID09IGJsZW5kTW9kZSkpCisgICAg
aWYgKChzdGF0ZSgpLmdsb2JhbENvbXBvc2l0ZSA9PSBvcCkgJiYgKHN0YXRlKCkuZ2xvYmFsQmxl
bmQgPT0gYmxlbmRNb2RlKSkKICAgICAgICAgcmV0dXJuOwogICAgIHJlYWxpemVTYXZlcygpOwot
ICAgIG1vZGlmaWFibGVTdGF0ZSgpLm1fZ2xvYmFsQ29tcG9zaXRlID0gb3A7Ci0gICAgbW9kaWZp
YWJsZVN0YXRlKCkubV9nbG9iYWxCbGVuZCA9IGJsZW5kTW9kZTsKKyAgICBtb2RpZmlhYmxlU3Rh
dGUoKS5nbG9iYWxDb21wb3NpdGUgPSBvcDsKKyAgICBtb2RpZmlhYmxlU3RhdGUoKS5nbG9iYWxC
bGVuZCA9IGJsZW5kTW9kZTsKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4
dCgpOwogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOwpAQCAtNjYyLDI1ICs2NjIsMjUgQEAg
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSkK
ICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykK
ICAgICAgICAgcmV0dXJuOwotICAgIGlmICghc3RhdGUoKS5tX2hhc0ludmVydGlibGVUcmFuc2Zv
cm0pCisgICAgaWYgKCFzdGF0ZSgpLmhhc0ludmVydGlibGVUcmFuc2Zvcm0pCiAgICAgICAgIHJl
dHVybjsKIAogICAgIGlmICghc3RkOjppc2Zpbml0ZShzeCkgfCAhc3RkOjppc2Zpbml0ZShzeSkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIEFmZmluZVRyYW5zZm9ybSBuZXdUcmFuc2Zvcm0gPSBz
dGF0ZSgpLm1fdHJhbnNmb3JtOworICAgIEFmZmluZVRyYW5zZm9ybSBuZXdUcmFuc2Zvcm0gPSBz
dGF0ZSgpLnRyYW5zZm9ybTsKICAgICBuZXdUcmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKHN4LCBz
eSk7Ci0gICAgaWYgKHN0YXRlKCkubV90cmFuc2Zvcm0gPT0gbmV3VHJhbnNmb3JtKQorICAgIGlm
IChzdGF0ZSgpLnRyYW5zZm9ybSA9PSBuZXdUcmFuc2Zvcm0pCiAgICAgICAgIHJldHVybjsKIAog
ICAgIHJlYWxpemVTYXZlcygpOwogCiAgICAgaWYgKCFuZXdUcmFuc2Zvcm0uaXNJbnZlcnRpYmxl
KCkpIHsKLSAgICAgICAgbW9kaWZpYWJsZVN0YXRlKCkubV9oYXNJbnZlcnRpYmxlVHJhbnNmb3Jt
ID0gZmFsc2U7CisgICAgICAgIG1vZGlmaWFibGVTdGF0ZSgpLmhhc0ludmVydGlibGVUcmFuc2Zv
cm0gPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1vZGlmaWFibGVTdGF0
ZSgpLm1fdHJhbnNmb3JtID0gbmV3VHJhbnNmb3JtOworICAgIG1vZGlmaWFibGVTdGF0ZSgpLnRy
YW5zZm9ybSA9IG5ld1RyYW5zZm9ybTsKICAgICBjLT5zY2FsZShGbG9hdFNpemUoc3gsIHN5KSk7
CiAgICAgbV9wYXRoLnRyYW5zZm9ybShBZmZpbmVUcmFuc2Zvcm0oKS5zY2FsZU5vblVuaWZvcm0o
MS4wIC8gc3gsIDEuMCAvIHN5KSk7CiB9CkBAIC02OTAsMjUgKzY5MCwyNSBAQCB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQogICAgIEdy
YXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKCFzdGF0ZSgpLm1faGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSkKKyAg
ICBpZiAoIXN0YXRlKCkuaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKCFzdGQ6OmlzZmluaXRlKGFuZ2xlSW5SYWRpYW5zKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgQWZmaW5lVHJhbnNmb3JtIG5ld1RyYW5zZm9ybSA9IHN0YXRlKCkubV90cmFuc2Zv
cm07CisgICAgQWZmaW5lVHJhbnNmb3JtIG5ld1RyYW5zZm9ybSA9IHN0YXRlKCkudHJhbnNmb3Jt
OwogICAgIG5ld1RyYW5zZm9ybS5yb3RhdGUoYW5nbGVJblJhZGlhbnMgLyBwaURvdWJsZSAqIDE4
MC4wKTsKLSAgICBpZiAoc3RhdGUoKS5tX3RyYW5zZm9ybSA9PSBuZXdUcmFuc2Zvcm0pCisgICAg
aWYgKHN0YXRlKCkudHJhbnNmb3JtID09IG5ld1RyYW5zZm9ybSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgcmVhbGl6ZVNhdmVzKCk7CiAKICAgICBpZiAoIW5ld1RyYW5zZm9ybS5pc0ludmVydGli
bGUoKSkgewotICAgICAgICBtb2RpZmlhYmxlU3RhdGUoKS5tX2hhc0ludmVydGlibGVUcmFuc2Zv
cm0gPSBmYWxzZTsKKyAgICAgICAgbW9kaWZpYWJsZVN0YXRlKCkuaGFzSW52ZXJ0aWJsZVRyYW5z
Zm9ybSA9IGZhbHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbW9kaWZpYWJsZVN0
YXRlKCkubV90cmFuc2Zvcm0gPSBuZXdUcmFuc2Zvcm07CisgICAgbW9kaWZpYWJsZVN0YXRlKCku
dHJhbnNmb3JtID0gbmV3VHJhbnNmb3JtOwogICAgIGMtPnJvdGF0ZShhbmdsZUluUmFkaWFucyk7
CiAgICAgbV9wYXRoLnRyYW5zZm9ybShBZmZpbmVUcmFuc2Zvcm0oKS5yb3RhdGUoLWFuZ2xlSW5S
YWRpYW5zIC8gcGlEb3VibGUgKiAxODAuMCkpOwogfQpAQCAtNzE4LDI1ICs3MTgsMjUgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnRyYW5zbGF0ZShmbG9hdCB0eCwgZmxvYXQgdHkp
CiAgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMp
CiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoIXN0YXRlKCkubV9oYXNJbnZlcnRpYmxlVHJhbnNm
b3JtKQorICAgIGlmICghc3RhdGUoKS5oYXNJbnZlcnRpYmxlVHJhbnNmb3JtKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUodHgpIHwgIXN0ZDo6aXNmaW5pdGUodHkp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbmV3VHJhbnNmb3JtID0g
c3RhdGUoKS5tX3RyYW5zZm9ybTsKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbmV3VHJhbnNmb3JtID0g
c3RhdGUoKS50cmFuc2Zvcm07CiAgICAgbmV3VHJhbnNmb3JtLnRyYW5zbGF0ZSh0eCwgdHkpOwot
ICAgIGlmIChzdGF0ZSgpLm1fdHJhbnNmb3JtID09IG5ld1RyYW5zZm9ybSkKKyAgICBpZiAoc3Rh
dGUoKS50cmFuc2Zvcm0gPT0gbmV3VHJhbnNmb3JtKQogICAgICAgICByZXR1cm47CiAKICAgICBy
ZWFsaXplU2F2ZXMoKTsKIAogICAgIGlmICghbmV3VHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKSB7
Ci0gICAgICAgIG1vZGlmaWFibGVTdGF0ZSgpLm1faGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSA9IGZh
bHNlOworICAgICAgICBtb2RpZmlhYmxlU3RhdGUoKS5oYXNJbnZlcnRpYmxlVHJhbnNmb3JtID0g
ZmFsc2U7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtb2RpZmlhYmxlU3RhdGUoKS5t
X3RyYW5zZm9ybSA9IG5ld1RyYW5zZm9ybTsKKyAgICBtb2RpZmlhYmxlU3RhdGUoKS50cmFuc2Zv
cm0gPSBuZXdUcmFuc2Zvcm07CiAgICAgYy0+dHJhbnNsYXRlKHR4LCB0eSk7CiAgICAgbV9wYXRo
LnRyYW5zZm9ybShBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUoLXR4LCAtdHkpKTsKIH0KQEAg
LTc0NiwyNSArNzQ2LDI1IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0cmFuc2Zv
cm0oZmxvYXQgbTExLCBmbG9hdCBtMTIsIGZsb2F0IG0yMSwgZmxvYXQKICAgICBHcmFwaGljc0Nv
bnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKICAgICAgICAgcmV0dXJu
OwotICAgIGlmICghc3RhdGUoKS5tX2hhc0ludmVydGlibGVUcmFuc2Zvcm0pCisgICAgaWYgKCFz
dGF0ZSgpLmhhc0ludmVydGlibGVUcmFuc2Zvcm0pCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
ICghc3RkOjppc2Zpbml0ZShtMTEpIHwgIXN0ZDo6aXNmaW5pdGUobTIxKSB8ICFzdGQ6OmlzZmlu
aXRlKGR4KSB8ICFzdGQ6OmlzZmluaXRlKG0xMikgfCAhc3RkOjppc2Zpbml0ZShtMjIpIHwgIXN0
ZDo6aXNmaW5pdGUoZHkpKQogICAgICAgICByZXR1cm47CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0g
dHJhbnNmb3JtKG0xMSwgbTEyLCBtMjEsIG0yMiwgZHgsIGR5KTsKLSAgICBBZmZpbmVUcmFuc2Zv
cm0gbmV3VHJhbnNmb3JtID0gc3RhdGUoKS5tX3RyYW5zZm9ybSAqIHRyYW5zZm9ybTsKLSAgICBp
ZiAoc3RhdGUoKS5tX3RyYW5zZm9ybSA9PSBuZXdUcmFuc2Zvcm0pCisgICAgQWZmaW5lVHJhbnNm
b3JtIG5ld1RyYW5zZm9ybSA9IHN0YXRlKCkudHJhbnNmb3JtICogdHJhbnNmb3JtOworICAgIGlm
IChzdGF0ZSgpLnRyYW5zZm9ybSA9PSBuZXdUcmFuc2Zvcm0pCiAgICAgICAgIHJldHVybjsKIAog
ICAgIHJlYWxpemVTYXZlcygpOwogCiAgICAgaWYgKCFuZXdUcmFuc2Zvcm0uaXNJbnZlcnRpYmxl
KCkpIHsKLSAgICAgICAgbW9kaWZpYWJsZVN0YXRlKCkubV9oYXNJbnZlcnRpYmxlVHJhbnNmb3Jt
ID0gZmFsc2U7CisgICAgICAgIG1vZGlmaWFibGVTdGF0ZSgpLmhhc0ludmVydGlibGVUcmFuc2Zv
cm0gPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1vZGlmaWFibGVTdGF0
ZSgpLm1fdHJhbnNmb3JtID0gbmV3VHJhbnNmb3JtOworICAgIG1vZGlmaWFibGVTdGF0ZSgpLnRy
YW5zZm9ybSA9IG5ld1RyYW5zZm9ybTsKICAgICBjLT5jb25jYXRDVE0odHJhbnNmb3JtKTsKICAg
ICBtX3BhdGgudHJhbnNmb3JtKHRyYW5zZm9ybS5pbnZlcnNlKCkpOwogfQpAQCAtNzc4LDMyICs3
NzgsMzIgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFRyYW5zZm9ybShmbG9h
dCBtMTEsIGZsb2F0IG0xMiwgZmxvYXQgbTIxLCBmbG8KICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUo
bTExKSB8ICFzdGQ6OmlzZmluaXRlKG0yMSkgfCAhc3RkOjppc2Zpbml0ZShkeCkgfCAhc3RkOjpp
c2Zpbml0ZShtMTIpIHwgIXN0ZDo6aXNmaW5pdGUobTIyKSB8ICFzdGQ6OmlzZmluaXRlKGR5KSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9IHN0YXRlKCkubV90
cmFuc2Zvcm07CisgICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9IHN0YXRlKCkudHJhbnNmb3JtOwog
ICAgIGlmICghY3RtLmlzSW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICByZWFs
aXplU2F2ZXMoKTsKICAgICAKICAgICBjLT5zZXRDVE0oY2FudmFzKCktPmJhc2VUcmFuc2Zvcm0o
KSk7Ci0gICAgbW9kaWZpYWJsZVN0YXRlKCkubV90cmFuc2Zvcm0gPSBBZmZpbmVUcmFuc2Zvcm0o
KTsKKyAgICBtb2RpZmlhYmxlU3RhdGUoKS50cmFuc2Zvcm0gPSBBZmZpbmVUcmFuc2Zvcm0oKTsK
ICAgICBtX3BhdGgudHJhbnNmb3JtKGN0bSk7CiAKLSAgICBtb2RpZmlhYmxlU3RhdGUoKS5tX2hh
c0ludmVydGlibGVUcmFuc2Zvcm0gPSB0cnVlOworICAgIG1vZGlmaWFibGVTdGF0ZSgpLmhhc0lu
dmVydGlibGVUcmFuc2Zvcm0gPSB0cnVlOwogICAgIHRyYW5zZm9ybShtMTEsIG0xMiwgbTIxLCBt
MjIsIGR4LCBkeSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJv
a2VDb2xvcihjb25zdCBTdHJpbmcmIGNvbG9yKQogewotICAgIGlmIChjb2xvciA9PSBzdGF0ZSgp
Lm1fdW5wYXJzZWRTdHJva2VDb2xvcikKKyAgICBpZiAoY29sb3IgPT0gc3RhdGUoKS51bnBhcnNl
ZFN0cm9rZUNvbG9yKQogICAgICAgICByZXR1cm47CiAgICAgcmVhbGl6ZVNhdmVzKCk7CiAgICAg
c2V0U3Ryb2tlU3R5bGUoQ2FudmFzU3R5bGU6OmNyZWF0ZUZyb21TdHJpbmcoY29sb3IsICZjYW52
YXMoKS0+ZG9jdW1lbnQoKSkpOwotICAgIG1vZGlmaWFibGVTdGF0ZSgpLm1fdW5wYXJzZWRTdHJv
a2VDb2xvciA9IGNvbG9yOworICAgIG1vZGlmaWFibGVTdGF0ZSgpLnVucGFyc2VkU3Ryb2tlQ29s
b3IgPSBjb2xvcjsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9r
ZUNvbG9yKGZsb2F0IGdyYXlMZXZlbCkKIHsKLSAgICBpZiAoc3RhdGUoKS5tX3N0cm9rZVN0eWxl
LmlzVmFsaWQoKSAmJiBzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUuaXNFcXVpdmFsZW50UkdCQShncmF5
TGV2ZWwsIGdyYXlMZXZlbCwgZ3JheUxldmVsLCAxLjBmKSkKKyAgICBpZiAoc3RhdGUoKS5zdHJv
a2VTdHlsZS5pc1ZhbGlkKCkgJiYgc3RhdGUoKS5zdHJva2VTdHlsZS5pc0VxdWl2YWxlbnRSR0JB
KGdyYXlMZXZlbCwgZ3JheUxldmVsLCBncmF5TGV2ZWwsIDEuMGYpKQogICAgICAgICByZXR1cm47
CiAgICAgc2V0U3Ryb2tlU3R5bGUoQ2FudmFzU3R5bGUoZ3JheUxldmVsLCAxLjBmKSk7CiB9CkBA
IC04MTUsMzcgKzgxNSwzNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U3Ry
b2tlQ29sb3IoY29uc3QgU3RyaW5nJiBjb2xvciwgZmxvYXQgYWxwaGEpCiAKIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VDb2xvcihmbG9hdCBncmF5TGV2ZWwsIGZsb2F0
IGFscGhhKQogewotICAgIGlmIChzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUuaXNWYWxpZCgpICYmIHN0
YXRlKCkubV9zdHJva2VTdHlsZS5pc0VxdWl2YWxlbnRSR0JBKGdyYXlMZXZlbCwgZ3JheUxldmVs
LCBncmF5TGV2ZWwsIGFscGhhKSkKKyAgICBpZiAoc3RhdGUoKS5zdHJva2VTdHlsZS5pc1ZhbGlk
KCkgJiYgc3RhdGUoKS5zdHJva2VTdHlsZS5pc0VxdWl2YWxlbnRSR0JBKGdyYXlMZXZlbCwgZ3Jh
eUxldmVsLCBncmF5TGV2ZWwsIGFscGhhKSkKICAgICAgICAgcmV0dXJuOwogICAgIHNldFN0cm9r
ZVN0eWxlKENhbnZhc1N0eWxlKGdyYXlMZXZlbCwgYWxwaGEpKTsKIH0KIAogdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9rZUNvbG9yKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0
IGIsIGZsb2F0IGEpCiB7Ci0gICAgaWYgKHN0YXRlKCkubV9zdHJva2VTdHlsZS5pc1ZhbGlkKCkg
JiYgc3RhdGUoKS5tX3N0cm9rZVN0eWxlLmlzRXF1aXZhbGVudFJHQkEociwgZywgYiwgYSkpCisg
ICAgaWYgKHN0YXRlKCkuc3Ryb2tlU3R5bGUuaXNWYWxpZCgpICYmIHN0YXRlKCkuc3Ryb2tlU3R5
bGUuaXNFcXVpdmFsZW50UkdCQShyLCBnLCBiLCBhKSkKICAgICAgICAgcmV0dXJuOwogICAgIHNl
dFN0cm9rZVN0eWxlKENhbnZhc1N0eWxlKHIsIGcsIGIsIGEpKTsKIH0KIAogdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9rZUNvbG9yKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0
IHksIGZsb2F0IGssIGZsb2F0IGEpCiB7Ci0gICAgaWYgKHN0YXRlKCkubV9zdHJva2VTdHlsZS5p
c1ZhbGlkKCkgJiYgc3RhdGUoKS5tX3N0cm9rZVN0eWxlLmlzRXF1aXZhbGVudENNWUtBKGMsIG0s
IHksIGssIGEpKQorICAgIGlmIChzdGF0ZSgpLnN0cm9rZVN0eWxlLmlzVmFsaWQoKSAmJiBzdGF0
ZSgpLnN0cm9rZVN0eWxlLmlzRXF1aXZhbGVudENNWUtBKGMsIG0sIHksIGssIGEpKQogICAgICAg
ICByZXR1cm47CiAgICAgc2V0U3Ryb2tlU3R5bGUoQ2FudmFzU3R5bGUoYywgbSwgeSwgaywgYSkp
OwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0RmlsbENvbG9yKGNvbnN0
IFN0cmluZyYgY29sb3IpCiB7Ci0gICAgaWYgKGNvbG9yID09IHN0YXRlKCkubV91bnBhcnNlZEZp
bGxDb2xvcikKKyAgICBpZiAoY29sb3IgPT0gc3RhdGUoKS51bnBhcnNlZEZpbGxDb2xvcikKICAg
ICAgICAgcmV0dXJuOwogICAgIHJlYWxpemVTYXZlcygpOwogICAgIHNldEZpbGxTdHlsZShDYW52
YXNTdHlsZTo6Y3JlYXRlRnJvbVN0cmluZyhjb2xvciwgJmNhbnZhcygpLT5kb2N1bWVudCgpKSk7
Ci0gICAgbW9kaWZpYWJsZVN0YXRlKCkubV91bnBhcnNlZEZpbGxDb2xvciA9IGNvbG9yOworICAg
IG1vZGlmaWFibGVTdGF0ZSgpLnVucGFyc2VkRmlsbENvbG9yID0gY29sb3I7CiB9CiAKIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsQ29sb3IoZmxvYXQgZ3JheUxldmVsKQog
ewotICAgIGlmIChzdGF0ZSgpLm1fZmlsbFN0eWxlLmlzVmFsaWQoKSAmJiBzdGF0ZSgpLm1fZmls
bFN0eWxlLmlzRXF1aXZhbGVudFJHQkEoZ3JheUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwg
MS4wZikpCisgICAgaWYgKHN0YXRlKCkuZmlsbFN0eWxlLmlzVmFsaWQoKSAmJiBzdGF0ZSgpLmZp
bGxTdHlsZS5pc0VxdWl2YWxlbnRSR0JBKGdyYXlMZXZlbCwgZ3JheUxldmVsLCBncmF5TGV2ZWws
IDEuMGYpKQogICAgICAgICByZXR1cm47CiAgICAgc2V0RmlsbFN0eWxlKENhbnZhc1N0eWxlKGdy
YXlMZXZlbCwgMS4wZikpOwogfQpAQCAtODU3LDIxICs4NTcsMjEgQEAgdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnNldEZpbGxDb2xvcihjb25zdCBTdHJpbmcmIGNvbG9yLCBmbG9hdCBh
bHBoYSkKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZpbGxDb2xvcihmbG9h
dCBncmF5TGV2ZWwsIGZsb2F0IGFscGhhKQogewotICAgIGlmIChzdGF0ZSgpLm1fZmlsbFN0eWxl
LmlzVmFsaWQoKSAmJiBzdGF0ZSgpLm1fZmlsbFN0eWxlLmlzRXF1aXZhbGVudFJHQkEoZ3JheUxl
dmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwgYWxwaGEpKQorICAgIGlmIChzdGF0ZSgpLmZpbGxT
dHlsZS5pc1ZhbGlkKCkgJiYgc3RhdGUoKS5maWxsU3R5bGUuaXNFcXVpdmFsZW50UkdCQShncmF5
TGV2ZWwsIGdyYXlMZXZlbCwgZ3JheUxldmVsLCBhbHBoYSkpCiAgICAgICAgIHJldHVybjsKICAg
ICBzZXRGaWxsU3R5bGUoQ2FudmFzU3R5bGUoZ3JheUxldmVsLCBhbHBoYSkpOwogfQogCiB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0RmlsbENvbG9yKGZsb2F0IHIsIGZsb2F0IGcs
IGZsb2F0IGIsIGZsb2F0IGEpCiB7Ci0gICAgaWYgKHN0YXRlKCkubV9maWxsU3R5bGUuaXNWYWxp
ZCgpICYmIHN0YXRlKCkubV9maWxsU3R5bGUuaXNFcXVpdmFsZW50UkdCQShyLCBnLCBiLCBhKSkK
KyAgICBpZiAoc3RhdGUoKS5maWxsU3R5bGUuaXNWYWxpZCgpICYmIHN0YXRlKCkuZmlsbFN0eWxl
LmlzRXF1aXZhbGVudFJHQkEociwgZywgYiwgYSkpCiAgICAgICAgIHJldHVybjsKICAgICBzZXRG
aWxsU3R5bGUoQ2FudmFzU3R5bGUociwgZywgYiwgYSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c2V0RmlsbENvbG9yKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZs
b2F0IGssIGZsb2F0IGEpCiB7Ci0gICAgaWYgKHN0YXRlKCkubV9maWxsU3R5bGUuaXNWYWxpZCgp
ICYmIHN0YXRlKCkubV9maWxsU3R5bGUuaXNFcXVpdmFsZW50Q01ZS0EoYywgbSwgeSwgaywgYSkp
CisgICAgaWYgKHN0YXRlKCkuZmlsbFN0eWxlLmlzVmFsaWQoKSAmJiBzdGF0ZSgpLmZpbGxTdHls
ZS5pc0VxdWl2YWxlbnRDTVlLQShjLCBtLCB5LCBrLCBhKSkKICAgICAgICAgcmV0dXJuOwogICAg
IHNldEZpbGxTdHlsZShDYW52YXNTdHlsZShjLCBtLCB5LCBrLCBhKSk7CiB9CkBAIC05NzcsNyAr
OTc3LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGxJbnRlcm5hbChjb25z
dCBQYXRoJiBwYXRoLCBjb25zdCBTdHJpbmcmIHdpbmQKICAgICBHcmFwaGljc0NvbnRleHQqIGMg
PSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOwotICAgIGlm
ICghc3RhdGUoKS5tX2hhc0ludmVydGlibGVUcmFuc2Zvcm0pCisgICAgaWYgKCFzdGF0ZSgpLmhh
c0ludmVydGlibGVUcmFuc2Zvcm0pCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIElmIGdyYWRp
ZW50IHNpemUgaXMgemVybywgdGhlbiBwYWludCBub3RoaW5nLgpAQCAtOTkyLDEyICs5OTIsMTIg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGxJbnRlcm5hbChjb25zdCBQYXRo
JiBwYXRoLCBjb25zdCBTdHJpbmcmIHdpbmQKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
Yy0+c2V0RmlsbFJ1bGUobmV3V2luZFJ1bGUpOwogCi0gICAgICAgIGlmIChpc0Z1bGxDYW52YXND
b21wb3NpdGVNb2RlKHN0YXRlKCkubV9nbG9iYWxDb21wb3NpdGUpKSB7CisgICAgICAgIGlmIChp
c0Z1bGxDYW52YXNDb21wb3NpdGVNb2RlKHN0YXRlKCkuZ2xvYmFsQ29tcG9zaXRlKSkgewogICAg
ICAgICAgICAgYmVnaW5Db21wb3NpdGVMYXllcigpOwogICAgICAgICAgICAgYy0+ZmlsbFBhdGgo
cGF0aCk7CiAgICAgICAgICAgICBlbmRDb21wb3NpdGVMYXllcigpOwogICAgICAgICAgICAgZGlk
RHJhd0VudGlyZUNhbnZhcygpOwotICAgICAgICB9IGVsc2UgaWYgKHN0YXRlKCkubV9nbG9iYWxD
b21wb3NpdGUgPT0gQ29tcG9zaXRlQ29weSkgeworICAgICAgICB9IGVsc2UgaWYgKHN0YXRlKCku
Z2xvYmFsQ29tcG9zaXRlID09IENvbXBvc2l0ZUNvcHkpIHsKICAgICAgICAgICAgIGNsZWFyQ2Fu
dmFzKCk7CiAgICAgICAgICAgICBjLT5maWxsUGF0aChwYXRoKTsKICAgICAgICAgICAgIGRpZERy
YXdFbnRpcmVDYW52YXMoKTsKQEAgLTEwMTUsNyArMTAxNSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpzdHJva2VJbnRlcm5hbChjb25zdCBQYXRoJiBwYXRoKQogICAgIEdyYXBo
aWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKCFzdGF0ZSgpLm1faGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSkKKyAgICBp
ZiAoIXN0YXRlKCkuaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgLy8gSWYgZ3JhZGllbnQgc2l6ZSBpcyB6ZXJvLCB0aGVuIHBhaW50IG5vdGhpbmcuCkBAIC0x
MDI0LDEyICsxMDI0LDEyIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzdHJva2VJ
bnRlcm5hbChjb25zdCBQYXRoJiBwYXRoKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIXBh
dGguaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChpc0Z1bGxDYW52YXNDb21wb3NpdGVNb2RlKHN0
YXRlKCkubV9nbG9iYWxDb21wb3NpdGUpKSB7CisgICAgICAgIGlmIChpc0Z1bGxDYW52YXNDb21w
b3NpdGVNb2RlKHN0YXRlKCkuZ2xvYmFsQ29tcG9zaXRlKSkgewogICAgICAgICAgICAgYmVnaW5D
b21wb3NpdGVMYXllcigpOwogICAgICAgICAgICAgYy0+c3Ryb2tlUGF0aChwYXRoKTsKICAgICAg
ICAgICAgIGVuZENvbXBvc2l0ZUxheWVyKCk7CiAgICAgICAgICAgICBkaWREcmF3RW50aXJlQ2Fu
dmFzKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUoKS5tX2dsb2JhbENvbXBvc2l0ZSA9PSBD
b21wb3NpdGVDb3B5KSB7CisgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUoKS5nbG9iYWxDb21wb3Np
dGUgPT0gQ29tcG9zaXRlQ29weSkgewogICAgICAgICAgICAgY2xlYXJDYW52YXMoKTsKICAgICAg
ICAgICAgIGMtPnN0cm9rZVBhdGgocGF0aCk7CiAgICAgICAgICAgICBkaWREcmF3RW50aXJlQ2Fu
dmFzKCk7CkBAIC0xMDQ3LDcgKzEwNDcsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6Y2xpcEludGVybmFsKGNvbnN0IFBhdGgmIHBhdGgsIGNvbnN0IFN0cmluZyYgd2luZAogICAg
IEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKCFzdGF0ZSgpLm1faGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSkK
KyAgICBpZiAoIXN0YXRlKCkuaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgV2luZFJ1bGUgbmV3V2luZFJ1bGUgPSBSVUxFX05PTlpFUk87CkBAIC0xMDk3LDEx
ICsxMDk3LDExIEBAIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjppc1BvaW50SW5QYXRo
SW50ZXJuYWwoY29uc3QgUGF0aCYgcGF0aCwgZmxvYXQgeCwKICAgICBHcmFwaGljc0NvbnRleHQq
IGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmICghc3RhdGUoKS5tX2hhc0ludmVydGlibGVUcmFuc2Zvcm0pCisgICAgaWYgKCFz
dGF0ZSgpLmhhc0ludmVydGlibGVUcmFuc2Zvcm0pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIEZsb2F0UG9pbnQgcG9pbnQoeCwgeSk7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9IHN0
YXRlKCkubV90cmFuc2Zvcm07CisgICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9IHN0YXRlKCkudHJh
bnNmb3JtOwogICAgIEZsb2F0UG9pbnQgdHJhbnNmb3JtZWRQb2ludCA9IGN0bS5pbnZlcnNlKCku
bWFwUG9pbnQocG9pbnQpOwogICAgIGlmICghc3RkOjppc2Zpbml0ZSh0cmFuc2Zvcm1lZFBvaW50
LngoKSkgfHwgIXN0ZDo6aXNmaW5pdGUodHJhbnNmb3JtZWRQb2ludC55KCkpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xMTE4LDExICsxMTE4LDExIEBAIGJvb2wgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjppc1BvaW50SW5TdHJva2VJbnRlcm5hbChjb25zdCBQYXRoJiBwYXRoLCBmbG9h
dCB4CiAgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAo
IWMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIXN0YXRlKCkubV9oYXNJbnZlcnRp
YmxlVHJhbnNmb3JtKQorICAgIGlmICghc3RhdGUoKS5oYXNJbnZlcnRpYmxlVHJhbnNmb3JtKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBGbG9hdFBvaW50IHBvaW50KHgsIHkpOwotICAg
IEFmZmluZVRyYW5zZm9ybSBjdG0gPSBzdGF0ZSgpLm1fdHJhbnNmb3JtOworICAgIEFmZmluZVRy
YW5zZm9ybSBjdG0gPSBzdGF0ZSgpLnRyYW5zZm9ybTsKICAgICBGbG9hdFBvaW50IHRyYW5zZm9y
bWVkUG9pbnQgPSBjdG0uaW52ZXJzZSgpLm1hcFBvaW50KHBvaW50KTsKICAgICBpZiAoIXN0ZDo6
aXNmaW5pdGUodHJhbnNmb3JtZWRQb2ludC54KCkpIHx8ICFzdGQ6OmlzZmluaXRlKHRyYW5zZm9y
bWVkUG9pbnQueSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTEzOCw3ICsxMTM4LDcg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNsZWFyUmVjdChmbG9hdCB4LCBmbG9h
dCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGUKICAgICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQg
PSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuOwot
ICAgIGlmICghc3RhdGUoKS5tX2hhc0ludmVydGlibGVUcmFuc2Zvcm0pCisgICAgaWYgKCFzdGF0
ZSgpLmhhc0ludmVydGlibGVUcmFuc2Zvcm0pCiAgICAgICAgIHJldHVybjsKICAgICBGbG9hdFJl
Y3QgcmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIApAQCAtMTE0OCwxNCArMTE0OCwxNCBAQCB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y2xlYXJSZWN0KGZsb2F0IHgsIGZsb2F0IHks
IGZsb2F0IHdpZHRoLCBmbG9hdCBoZQogICAgICAgICBzYXZlZCA9IHRydWU7CiAgICAgICAgIGNv
bnRleHQtPnNldExlZ2FjeVNoYWRvdyhGbG9hdFNpemUoKSwgMCwgQ29sb3I6OnRyYW5zcGFyZW50
LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKICAgICB9Ci0gICAgaWYgKHN0YXRlKCkubV9nbG9iYWxB
bHBoYSAhPSAxKSB7CisgICAgaWYgKHN0YXRlKCkuZ2xvYmFsQWxwaGEgIT0gMSkgewogICAgICAg
ICBpZiAoIXNhdmVkKSB7CiAgICAgICAgICAgICBjb250ZXh0LT5zYXZlKCk7CiAgICAgICAgICAg
ICBzYXZlZCA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgY29udGV4dC0+c2V0QWxwaGEoMSk7
CiAgICAgfQotICAgIGlmIChzdGF0ZSgpLm1fZ2xvYmFsQ29tcG9zaXRlICE9IENvbXBvc2l0ZVNv
dXJjZU92ZXIpIHsKKyAgICBpZiAoc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUgIT0gQ29tcG9zaXRl
U291cmNlT3ZlcikgewogICAgICAgICBpZiAoIXNhdmVkKSB7CiAgICAgICAgICAgICBjb250ZXh0
LT5zYXZlKCk7CiAgICAgICAgICAgICBzYXZlZCA9IHRydWU7CkBAIC0xMTc2LDcgKzExNzYsNyBA
QCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZmlsbFJlY3QoZmxvYXQgeCwgZmxvYXQg
eSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaQogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdp
bmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFzdGF0
ZSgpLm1faGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSkKKyAgICBpZiAoIXN0YXRlKCkuaGFzSW52ZXJ0
aWJsZVRyYW5zZm9ybSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gZnJvbSB0aGUgSFRNTDUg
Q2FudmFzIHNwZWM6CkBAIC0xMTkxLDEyICsxMTkxLDEyIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpmaWxsUmVjdChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQg
aGVpCiAgICAgaWYgKHJlY3RDb250YWluc0NhbnZhcyhyZWN0KSkgewogICAgICAgICBjLT5maWxs
UmVjdChyZWN0KTsKICAgICAgICAgZGlkRHJhd0VudGlyZUNhbnZhcygpOwotICAgIH0gZWxzZSBp
ZiAoaXNGdWxsQ2FudmFzQ29tcG9zaXRlTW9kZShzdGF0ZSgpLm1fZ2xvYmFsQ29tcG9zaXRlKSkg
eworICAgIH0gZWxzZSBpZiAoaXNGdWxsQ2FudmFzQ29tcG9zaXRlTW9kZShzdGF0ZSgpLmdsb2Jh
bENvbXBvc2l0ZSkpIHsKICAgICAgICAgYmVnaW5Db21wb3NpdGVMYXllcigpOwogICAgICAgICBj
LT5maWxsUmVjdChyZWN0KTsKICAgICAgICAgZW5kQ29tcG9zaXRlTGF5ZXIoKTsKICAgICAgICAg
ZGlkRHJhd0VudGlyZUNhbnZhcygpOwotICAgIH0gZWxzZSBpZiAoc3RhdGUoKS5tX2dsb2JhbENv
bXBvc2l0ZSA9PSBDb21wb3NpdGVDb3B5KSB7CisgICAgfSBlbHNlIGlmIChzdGF0ZSgpLmdsb2Jh
bENvbXBvc2l0ZSA9PSBDb21wb3NpdGVDb3B5KSB7CiAgICAgICAgIGNsZWFyQ2FudmFzKCk7CiAg
ICAgICAgIGMtPmZpbGxSZWN0KHJlY3QpOwogICAgICAgICBkaWREcmF3RW50aXJlQ2FudmFzKCk7
CkBAIC0xMjE0LDkgKzEyMTQsOSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ry
b2tlUmVjdChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaAogICAgIEdyYXBo
aWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKCFzdGF0ZSgpLm1faGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSkKKyAgICBp
ZiAoIXN0YXRlKCkuaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSkKICAgICAgICAgcmV0dXJuOwotICAg
IGlmICghKHN0YXRlKCkubV9saW5lV2lkdGggPj0gMCkpCisgICAgaWYgKCEoc3RhdGUoKS5saW5l
V2lkdGggPj0gMCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIElmIGdyYWRpZW50IHNpemUg
aXMgemVybywgdGhlbiBwYWludCBub3RoaW5nLgpAQCAtMTIyNSwxOSArMTIyNSwxOSBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlUmVjdChmbG9hdCB4LCBmbG9hdCB5LCBm
bG9hdCB3aWR0aCwgZmxvYXQgaAogICAgICAgICByZXR1cm47CiAKICAgICBGbG9hdFJlY3QgcmVj
dCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBpZiAoaXNGdWxsQ2FudmFzQ29tcG9zaXRlTW9k
ZShzdGF0ZSgpLm1fZ2xvYmFsQ29tcG9zaXRlKSkgeworICAgIGlmIChpc0Z1bGxDYW52YXNDb21w
b3NpdGVNb2RlKHN0YXRlKCkuZ2xvYmFsQ29tcG9zaXRlKSkgewogICAgICAgICBiZWdpbkNvbXBv
c2l0ZUxheWVyKCk7Ci0gICAgICAgIGMtPnN0cm9rZVJlY3QocmVjdCwgc3RhdGUoKS5tX2xpbmVX
aWR0aCk7CisgICAgICAgIGMtPnN0cm9rZVJlY3QocmVjdCwgc3RhdGUoKS5saW5lV2lkdGgpOwog
ICAgICAgICBlbmRDb21wb3NpdGVMYXllcigpOwogICAgICAgICBkaWREcmF3RW50aXJlQ2FudmFz
KCk7Ci0gICAgfSBlbHNlIGlmIChzdGF0ZSgpLm1fZ2xvYmFsQ29tcG9zaXRlID09IENvbXBvc2l0
ZUNvcHkpIHsKKyAgICB9IGVsc2UgaWYgKHN0YXRlKCkuZ2xvYmFsQ29tcG9zaXRlID09IENvbXBv
c2l0ZUNvcHkpIHsKICAgICAgICAgY2xlYXJDYW52YXMoKTsKLSAgICAgICAgYy0+c3Ryb2tlUmVj
dChyZWN0LCBzdGF0ZSgpLm1fbGluZVdpZHRoKTsKKyAgICAgICAgYy0+c3Ryb2tlUmVjdChyZWN0
LCBzdGF0ZSgpLmxpbmVXaWR0aCk7CiAgICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKICAg
ICB9IGVsc2UgewogICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0ID0gcmVjdDsKLSAgICAg
ICAgYm91bmRpbmdSZWN0LmluZmxhdGUoc3RhdGUoKS5tX2xpbmVXaWR0aCAvIDIpOwotICAgICAg
ICBjLT5zdHJva2VSZWN0KHJlY3QsIHN0YXRlKCkubV9saW5lV2lkdGgpOworICAgICAgICBib3Vu
ZGluZ1JlY3QuaW5mbGF0ZShzdGF0ZSgpLmxpbmVXaWR0aCAvIDIpOworICAgICAgICBjLT5zdHJv
a2VSZWN0KHJlY3QsIHN0YXRlKCkubGluZVdpZHRoKTsKICAgICAgICAgZGlkRHJhdyhib3VuZGlu
Z1JlY3QpOwogICAgIH0KIH0KQEAgLTEyOTAsMTMgKzEyOTAsMTMgQEAgdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OmNsZWFyU2hhZG93KCkKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OnNldFNoYWRvdyhjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgZmxvYXQgYmx1ciwgUkdC
QTMyIGNvbG9yKQogewotICAgIGlmIChzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0ID09IG9mZnNldCAm
JiBzdGF0ZSgpLm1fc2hhZG93Qmx1ciA9PSBibHVyICYmIHN0YXRlKCkubV9zaGFkb3dDb2xvciA9
PSBjb2xvcikKKyAgICBpZiAoc3RhdGUoKS5zaGFkb3dPZmZzZXQgPT0gb2Zmc2V0ICYmIHN0YXRl
KCkuc2hhZG93Qmx1ciA9PSBibHVyICYmIHN0YXRlKCkuc2hhZG93Q29sb3IgPT0gY29sb3IpCiAg
ICAgICAgIHJldHVybjsKICAgICBib29sIHdhc0RyYXdpbmdTaGFkb3dzID0gc2hvdWxkRHJhd1No
YWRvd3MoKTsKICAgICByZWFsaXplU2F2ZXMoKTsKLSAgICBtb2RpZmlhYmxlU3RhdGUoKS5tX3No
YWRvd09mZnNldCA9IG9mZnNldDsKLSAgICBtb2RpZmlhYmxlU3RhdGUoKS5tX3NoYWRvd0JsdXIg
PSBibHVyOwotICAgIG1vZGlmaWFibGVTdGF0ZSgpLm1fc2hhZG93Q29sb3IgPSBjb2xvcjsKKyAg
ICBtb2RpZmlhYmxlU3RhdGUoKS5zaGFkb3dPZmZzZXQgPSBvZmZzZXQ7CisgICAgbW9kaWZpYWJs
ZVN0YXRlKCkuc2hhZG93Qmx1ciA9IGJsdXI7CisgICAgbW9kaWZpYWJsZVN0YXRlKCkuc2hhZG93
Q29sb3IgPSBjb2xvcjsKICAgICBpZiAoIXdhc0RyYXdpbmdTaGFkb3dzICYmICFzaG91bGREcmF3
U2hhZG93cygpKQogICAgICAgICByZXR1cm47CiAgICAgYXBwbHlTaGFkb3coKTsKQEAgLTEzMDks
MTYgKzEzMDksMTYgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmFwcGx5U2hhZG93
KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHNob3VsZERyYXdTaGFkb3dzKCkpIHsKLSAg
ICAgICAgZmxvYXQgd2lkdGggPSBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0LndpZHRoKCk7Ci0gICAg
ICAgIGZsb2F0IGhlaWdodCA9IHN0YXRlKCkubV9zaGFkb3dPZmZzZXQuaGVpZ2h0KCk7Ci0gICAg
ICAgIGMtPnNldExlZ2FjeVNoYWRvdyhGbG9hdFNpemUod2lkdGgsIC1oZWlnaHQpLCBzdGF0ZSgp
Lm1fc2hhZG93Qmx1ciwgc3RhdGUoKS5tX3NoYWRvd0NvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdC
KTsKKyAgICAgICAgZmxvYXQgd2lkdGggPSBzdGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpOwor
ICAgICAgICBmbG9hdCBoZWlnaHQgPSBzdGF0ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQoKTsKKyAg
ICAgICAgYy0+c2V0TGVnYWN5U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgLWhlaWdodCksIHN0YXRl
KCkuc2hhZG93Qmx1ciwgc3RhdGUoKS5zaGFkb3dDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQik7
CiAgICAgfSBlbHNlCiAgICAgICAgIGMtPnNldExlZ2FjeVNoYWRvdyhGbG9hdFNpemUoKSwgMCwg
Q29sb3I6OnRyYW5zcGFyZW50LCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKIH0KIAogYm9vbCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNob3VsZERyYXdTaGFkb3dzKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gYWxwaGFDaGFubmVsKHN0YXRlKCkubV9zaGFkb3dDb2xvcikgJiYgKHN0YXRlKCkubV9z
aGFkb3dCbHVyIHx8ICFzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0LmlzWmVybygpKTsKKyAgICByZXR1
cm4gYWxwaGFDaGFubmVsKHN0YXRlKCkuc2hhZG93Q29sb3IpICYmIChzdGF0ZSgpLnNoYWRvd0Js
dXIgfHwgIXN0YXRlKCkuc2hhZG93T2Zmc2V0LmlzWmVybygpKTsKIH0KIAogZW51bSBJbWFnZVNp
emVUeXBlIHsKQEAgLTEzODUsNyArMTM4NSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpkcmF3SW1hZ2UoSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsCiAKIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UoSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKLSAgICBkcmF3SW1hZ2UoaW1hZ2UsIHNyY1JlY3QsIGRzdFJlY3QsIHN0YXRl
KCkubV9nbG9iYWxDb21wb3NpdGUsIHN0YXRlKCkubV9nbG9iYWxCbGVuZCwgZWMpOworICAgIGRy
YXdJbWFnZShpbWFnZSwgc3JjUmVjdCwgZHN0UmVjdCwgc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUs
IHN0YXRlKCkuZ2xvYmFsQmxlbmQsIGVjKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OmRyYXdJbWFnZShIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IENvbXBvc2l0ZU9wZXJh
dG9yJiBvcCwgY29uc3QgQmxlbmRNb2RlJiBibGVuZE1vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQpA
QCAtMTQyMSw3ICsxNDIxLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJ
bWFnZShIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgY29uc3QgRmxvYXRSZWMKICAgICBHcmFwaGlj
c0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKICAgICAgICAgcmV0
dXJuOwotICAgIGlmICghc3RhdGUoKS5tX2hhc0ludmVydGlibGVUcmFuc2Zvcm0pCisgICAgaWYg
KCFzdGF0ZSgpLmhhc0ludmVydGlibGVUcmFuc2Zvcm0pCiAgICAgICAgIHJldHVybjsKIAogICAg
IENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IGltYWdlLT5jYWNoZWRJbWFnZSgpOwpAQCAtMTQ5
Miw3ICsxNDkyLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZShI
VE1MQ2FudmFzRWxlbWVudCogc291cmNlQ2FudmFzLCBjb25zdAogICAgIEdyYXBoaWNzQ29udGV4
dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKCFzdGF0ZSgpLm1faGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSkKKyAgICBpZiAoIXN0YXRl
KCkuaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gRklY
TUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQg
QVBJLgpAQCAtMTUxNCwxNyArMTUxNCwxNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6ZHJhd0ltYWdlKEhUTUxDYW52YXNFbGVtZW50KiBzb3VyY2VDYW52YXMsIGNvbnN0CiAjZW5k
aWYKIAogICAgIGlmIChyZWN0Q29udGFpbnNDYW52YXMoZHN0UmVjdCkpIHsKLSAgICAgICAgYy0+
ZHJhd0ltYWdlQnVmZmVyKGJ1ZmZlciwgQ29sb3JTcGFjZURldmljZVJHQiwgZHN0UmVjdCwgc3Jj
UmVjdCwgSW1hZ2VQYWludGluZ09wdGlvbnMoc3RhdGUoKS5tX2dsb2JhbENvbXBvc2l0ZSwgc3Rh
dGUoKS5tX2dsb2JhbEJsZW5kKSk7CisgICAgICAgIGMtPmRyYXdJbWFnZUJ1ZmZlcihidWZmZXIs
IENvbG9yU3BhY2VEZXZpY2VSR0IsIGRzdFJlY3QsIHNyY1JlY3QsIEltYWdlUGFpbnRpbmdPcHRp
b25zKHN0YXRlKCkuZ2xvYmFsQ29tcG9zaXRlLCBzdGF0ZSgpLmdsb2JhbEJsZW5kKSk7CiAgICAg
ICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKLSAgICB9IGVsc2UgaWYgKGlzRnVsbENhbnZhc0Nv
bXBvc2l0ZU1vZGUoc3RhdGUoKS5tX2dsb2JhbENvbXBvc2l0ZSkpIHsKLSAgICAgICAgZnVsbENh
bnZhc0NvbXBvc2l0ZWREcmF3SW1hZ2UoYnVmZmVyLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkc3RS
ZWN0LCBzcmNSZWN0LCBzdGF0ZSgpLm1fZ2xvYmFsQ29tcG9zaXRlKTsKKyAgICB9IGVsc2UgaWYg
KGlzRnVsbENhbnZhc0NvbXBvc2l0ZU1vZGUoc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUpKSB7Cisg
ICAgICAgIGZ1bGxDYW52YXNDb21wb3NpdGVkRHJhd0ltYWdlKGJ1ZmZlciwgQ29sb3JTcGFjZURl
dmljZVJHQiwgZHN0UmVjdCwgc3JjUmVjdCwgc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUpOwogICAg
ICAgICBkaWREcmF3RW50aXJlQ2FudmFzKCk7Ci0gICAgfSBlbHNlIGlmIChzdGF0ZSgpLm1fZ2xv
YmFsQ29tcG9zaXRlID09IENvbXBvc2l0ZUNvcHkpIHsKKyAgICB9IGVsc2UgaWYgKHN0YXRlKCku
Z2xvYmFsQ29tcG9zaXRlID09IENvbXBvc2l0ZUNvcHkpIHsKICAgICAgICAgY2xlYXJDYW52YXMo
KTsKLSAgICAgICAgYy0+ZHJhd0ltYWdlQnVmZmVyKGJ1ZmZlciwgQ29sb3JTcGFjZURldmljZVJH
QiwgZHN0UmVjdCwgc3JjUmVjdCwgSW1hZ2VQYWludGluZ09wdGlvbnMoc3RhdGUoKS5tX2dsb2Jh
bENvbXBvc2l0ZSwgc3RhdGUoKS5tX2dsb2JhbEJsZW5kKSk7CisgICAgICAgIGMtPmRyYXdJbWFn
ZUJ1ZmZlcihidWZmZXIsIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRzdFJlY3QsIHNyY1JlY3QsIElt
YWdlUGFpbnRpbmdPcHRpb25zKHN0YXRlKCkuZ2xvYmFsQ29tcG9zaXRlLCBzdGF0ZSgpLmdsb2Jh
bEJsZW5kKSk7CiAgICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBjLT5kcmF3SW1hZ2VCdWZmZXIoYnVmZmVyLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBk
c3RSZWN0LCBzcmNSZWN0LCBJbWFnZVBhaW50aW5nT3B0aW9ucyhzdGF0ZSgpLm1fZ2xvYmFsQ29t
cG9zaXRlLCBzdGF0ZSgpLm1fZ2xvYmFsQmxlbmQpKTsKKyAgICAgICAgYy0+ZHJhd0ltYWdlQnVm
ZmVyKGJ1ZmZlciwgQ29sb3JTcGFjZURldmljZVJHQiwgZHN0UmVjdCwgc3JjUmVjdCwgSW1hZ2VQ
YWludGluZ09wdGlvbnMoc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUsIHN0YXRlKCkuZ2xvYmFsQmxl
bmQpKTsKICAgICAgICAgZGlkRHJhdyhkc3RSZWN0KTsKICAgICB9CiB9CkBAIC0xNTgzLDcgKzE1
ODMsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlKEhUTUxWaWRl
b0VsZW1lbnQqIHZpZGVvLCBjb25zdCBGbG9hdFJlYwogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9
IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47Ci0gICAgaWYg
KCFzdGF0ZSgpLm1faGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSkKKyAgICBpZiAoIXN0YXRlKCkuaGFz
SW52ZXJ0aWJsZVRyYW5zZm9ybSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2hlY2tPcmlnaW4o
dmlkZW8pOwpAQCAtMTY1MCw3ICsxNjUwLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OmNsZWFyQ2FudmFzKCkKIFBhdGggQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0cmFuc2Zv
cm1BcmVhVG9EZXZpY2UoY29uc3QgUGF0aCYgcGF0aCkgY29uc3QKIHsKICAgICBQYXRoIHRyYW5z
Zm9ybWVkKHBhdGgpOwotICAgIHRyYW5zZm9ybWVkLnRyYW5zZm9ybShzdGF0ZSgpLm1fdHJhbnNm
b3JtKTsKKyAgICB0cmFuc2Zvcm1lZC50cmFuc2Zvcm0oc3RhdGUoKS50cmFuc2Zvcm0pOwogICAg
IHRyYW5zZm9ybWVkLnRyYW5zZm9ybShjYW52YXMoKS0+YmFzZVRyYW5zZm9ybSgpKTsKICAgICBy
ZXR1cm4gdHJhbnNmb3JtZWQ7CiB9CkBAIC0xNjY2LDcgKzE2NjYsNyBAQCBib29sIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6cmVjdENvbnRhaW5zQ2FudmFzKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkgY29uc3QKIHsKICAgICBGbG9hdFF1YWQgcXVhZChyZWN0KTsKICAgICBGbG9hdFF1YWQgY2Fu
dmFzUXVhZChGbG9hdFJlY3QoMCwgMCwgY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWln
aHQoKSkpOwotICAgIHJldHVybiBzdGF0ZSgpLm1fdHJhbnNmb3JtLm1hcFF1YWQocXVhZCkuY29u
dGFpbnNRdWFkKGNhbnZhc1F1YWQpOworICAgIHJldHVybiBzdGF0ZSgpLnRyYW5zZm9ybS5tYXBR
dWFkKHF1YWQpLmNvbnRhaW5zUXVhZChjYW52YXNRdWFkKTsKIH0KIAogdGVtcGxhdGU8Y2xhc3Mg
VD4gSW50UmVjdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNhbGN1bGF0ZUNvbXBvc2l0aW5n
QnVmZmVyUmVjdChjb25zdCBUJiBhcmVhLCBJbnRTaXplKiBjcm9wcGVkT2Zmc2V0KQpAQCAtMTcw
NSw3ICsxNzA1LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNvbXBvc2l0ZUJ1
ZmZlcihJbWFnZUJ1ZmZlciogYnVmZmVyLCBjb25zdCBJbnRSZWMKICAgICBjLT5jbGlwT3V0KGJ1
ZmZlclJlY3QpOwogICAgIGMtPmNsZWFyUmVjdChjYW52YXNSZWN0KTsKICAgICBjLT5yZXN0b3Jl
KCk7Ci0gICAgYy0+ZHJhd0ltYWdlQnVmZmVyKGJ1ZmZlciwgQ29sb3JTcGFjZURldmljZVJHQiwg
YnVmZmVyUmVjdC5sb2NhdGlvbigpLCBzdGF0ZSgpLm1fZ2xvYmFsQ29tcG9zaXRlKTsKKyAgICBj
LT5kcmF3SW1hZ2VCdWZmZXIoYnVmZmVyLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBidWZmZXJSZWN0
LmxvY2F0aW9uKCksIHN0YXRlKCkuZ2xvYmFsQ29tcG9zaXRlKTsKICAgICBjLT5yZXN0b3JlKCk7
CiB9CiAKQEAgLTE4NDksNyArMTg0OSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpkaWREcmF3KGNvbnN0IEZsb2F0UmVjdCYgciwgdW5zaWduZWQgb3B0aW9ucykKICAgICBHcmFw
aGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKICAgICAgICAg
cmV0dXJuOwotICAgIGlmICghc3RhdGUoKS5tX2hhc0ludmVydGlibGVUcmFuc2Zvcm0pCisgICAg
aWYgKCFzdGF0ZSgpLmhhc0ludmVydGlibGVUcmFuc2Zvcm0pCiAgICAgICAgIHJldHVybjsKIAog
I2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCkBAIC0xODY3LDE1ICsxODY3LDE1IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkaWREcmF3KGNvbnN0IEZsb2F0UmVjdCYg
ciwgdW5zaWduZWQgb3B0aW9ucykKIAogICAgIEZsb2F0UmVjdCBkaXJ0eVJlY3QgPSByOwogICAg
IGlmIChvcHRpb25zICYgQ2FudmFzRGlkRHJhd0FwcGx5VHJhbnNmb3JtKSB7Ci0gICAgICAgIEFm
ZmluZVRyYW5zZm9ybSBjdG0gPSBzdGF0ZSgpLm1fdHJhbnNmb3JtOworICAgICAgICBBZmZpbmVU
cmFuc2Zvcm0gY3RtID0gc3RhdGUoKS50cmFuc2Zvcm07CiAgICAgICAgIGRpcnR5UmVjdCA9IGN0
bS5tYXBSZWN0KHIpOwogICAgIH0KIAotICAgIGlmIChvcHRpb25zICYgQ2FudmFzRGlkRHJhd0Fw
cGx5U2hhZG93ICYmIGFscGhhQ2hhbm5lbChzdGF0ZSgpLm1fc2hhZG93Q29sb3IpKSB7CisgICAg
aWYgKG9wdGlvbnMgJiBDYW52YXNEaWREcmF3QXBwbHlTaGFkb3cgJiYgYWxwaGFDaGFubmVsKHN0
YXRlKCkuc2hhZG93Q29sb3IpKSB7CiAgICAgICAgIC8vIFRoZSBzaGFkb3cgZ2V0cyBhcHBsaWVk
IGFmdGVyIHRyYW5zZm9ybWF0aW9uCiAgICAgICAgIEZsb2F0UmVjdCBzaGFkb3dSZWN0KGRpcnR5
UmVjdCk7Ci0gICAgICAgIHNoYWRvd1JlY3QubW92ZShzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0KTsK
LSAgICAgICAgc2hhZG93UmVjdC5pbmZsYXRlKHN0YXRlKCkubV9zaGFkb3dCbHVyKTsKKyAgICAg
ICAgc2hhZG93UmVjdC5tb3ZlKHN0YXRlKCkuc2hhZG93T2Zmc2V0KTsKKyAgICAgICAgc2hhZG93
UmVjdC5pbmZsYXRlKHN0YXRlKCkuc2hhZG93Qmx1cik7CiAgICAgICAgIGRpcnR5UmVjdC51bml0
ZShzaGFkb3dSZWN0KTsKICAgICB9CiAKQEAgLTIwMzgsNyArMjAzOCw3IEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3Rm9jdXNJZk5lZWRlZEludGVybmFsKGNvbnN0IFBhdGgm
IHBhdGgsIEVsZW1lCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0ID0gZHJhd2luZ0Nv
bnRleHQoKTsKIAotICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC0+Zm9jdXNlZCgpIHx8ICFz
dGF0ZSgpLm1faGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSB8fCBwYXRoLmlzRW1wdHkoKQorICAgIGlm
ICghZWxlbWVudCB8fCAhZWxlbWVudC0+Zm9jdXNlZCgpIHx8ICFzdGF0ZSgpLmhhc0ludmVydGli
bGVUcmFuc2Zvcm0gfHwgcGF0aC5pc0VtcHR5KCkKICAgICAgICAgfHwgIWVsZW1lbnQtPmlzRGVz
Y2VuZGFudE9mKGNhbnZhcygpKSB8fCAhY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0y
MDg5LDExICsyMDg5LDExIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpwdXRJbWFn
ZURhdGEoSW1hZ2VEYXRhKiBkYXRhLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpCiAKIFN0cmluZyBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZvbnQoKSBjb25zdAogewotICAgIGlmICghc3RhdGUoKS5t
X2ZvbnQucmVhbGl6ZWQoKSkKKyAgICBpZiAoIXN0YXRlKCkuZm9udC5yZWFsaXplZCgpKQogICAg
ICAgICByZXR1cm4gZGVmYXVsdEZvbnQ7CiAKICAgICBTdHJpbmdCdWlsZGVyIHNlcmlhbGl6ZWRG
b250OwotICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uID0gc3RhdGUo
KS5tX2ZvbnQuZm9udERlc2NyaXB0aW9uKCk7CisgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBm
b250RGVzY3JpcHRpb24gPSBzdGF0ZSgpLmZvbnQuZm9udERlc2NyaXB0aW9uKCk7CiAKICAgICBp
ZiAoZm9udERlc2NyaXB0aW9uLml0YWxpYygpKQogICAgICAgICBzZXJpYWxpemVkRm9udC5hcHBl
bmRMaXRlcmFsKCJpdGFsaWMgIik7CkBAIC0yMTIyLDcgKzIxMjIsNyBAQCBTdHJpbmcgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpmb250KCkgY29uc3QKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnNldEZvbnQoY29uc3QgU3RyaW5nJiBuZXdGb250KQogewotICAgIGlmIChuZXdG
b250ID09IHN0YXRlKCkubV91bnBhcnNlZEZvbnQgJiYgc3RhdGUoKS5tX2ZvbnQucmVhbGl6ZWQo
KSkKKyAgICBpZiAobmV3Rm9udCA9PSBzdGF0ZSgpLnVucGFyc2VkRm9udCAmJiBzdGF0ZSgpLmZv
bnQucmVhbGl6ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPE11dGFibGVTdHls
ZVByb3BlcnRpZXM+IHBhcnNlZFN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRl
KCk7CkBAIC0yMTQwLDcgKzIxNDAsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
c2V0Rm9udChjb25zdCBTdHJpbmcmIG5ld0ZvbnQpCiAgICAgLy8gVGhlIHBhcnNlIHN1Y2NlZWRl
ZC4KICAgICBTdHJpbmcgbmV3Rm9udFNhZmVDb3B5KG5ld0ZvbnQpOyAvLyBDcmVhdGUgYSBzdHJp
bmcgY29weSBzaW5jZSBuZXdGb250IGNhbiBiZSBkZWxldGVkIGluc2lkZSByZWFsaXplU2F2ZXMu
CiAgICAgcmVhbGl6ZVNhdmVzKCk7Ci0gICAgbW9kaWZpYWJsZVN0YXRlKCkubV91bnBhcnNlZEZv
bnQgPSBuZXdGb250U2FmZUNvcHk7CisgICAgbW9kaWZpYWJsZVN0YXRlKCkudW5wYXJzZWRGb250
ID0gbmV3Rm9udFNhZmVDb3B5OwogCiAgICAgLy8gTWFwIHRoZSA8Y2FudmFzPiBmb250IGludG8g
dGhlIHRleHQgc3R5bGUuIElmIHRoZSBmb250IHVzZXMga2V5d29yZHMgbGlrZSBsYXJnZXIvc21h
bGxlciwgdGhlc2Ugd2lsbCB3b3JrCiAgICAgLy8gcmVsYXRpdmUgdG8gdGhlIGNhbnZhcy4KQEAg
LTIxNzcsMTIgKzIxNzcsMTIgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZv
bnQoY29uc3QgU3RyaW5nJiBuZXdGb250KQogICAgIHN0eWxlUmVzb2x2ZXIudXBkYXRlRm9udCgp
OwogICAgIHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3Bl
cnR5TGluZUhlaWdodCwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVy
dHlMaW5lSGVpZ2h0KS5nZXQoKSk7CiAKLSAgICBtb2RpZmlhYmxlU3RhdGUoKS5tX2ZvbnQuaW5p
dGlhbGl6ZShkb2N1bWVudC5mb250U2VsZWN0b3IoKSwgbmV3U3R5bGUpOworICAgIG1vZGlmaWFi
bGVTdGF0ZSgpLmZvbnQuaW5pdGlhbGl6ZShkb2N1bWVudC5mb250U2VsZWN0b3IoKSwgbmV3U3R5
bGUpOwogfQogCiBTdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0ZXh0QWxpZ24oKSBj
b25zdAogewotICAgIHJldHVybiB0ZXh0QWxpZ25OYW1lKHN0YXRlKCkubV90ZXh0QWxpZ24pOwor
ICAgIHJldHVybiB0ZXh0QWxpZ25OYW1lKHN0YXRlKCkudGV4dEFsaWduKTsKIH0KIAogdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFRleHRBbGlnbihjb25zdCBTdHJpbmcmIHMpCkBA
IC0yMTkwLDE1ICsyMTkwLDE1IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRU
ZXh0QWxpZ24oY29uc3QgU3RyaW5nJiBzKQogICAgIFRleHRBbGlnbiBhbGlnbjsKICAgICBpZiAo
IXBhcnNlVGV4dEFsaWduKHMsIGFsaWduKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChzdGF0
ZSgpLm1fdGV4dEFsaWduID09IGFsaWduKQorICAgIGlmIChzdGF0ZSgpLnRleHRBbGlnbiA9PSBh
bGlnbikKICAgICAgICAgcmV0dXJuOwogICAgIHJlYWxpemVTYXZlcygpOwotICAgIG1vZGlmaWFi
bGVTdGF0ZSgpLm1fdGV4dEFsaWduID0gYWxpZ247CisgICAgbW9kaWZpYWJsZVN0YXRlKCkudGV4
dEFsaWduID0gYWxpZ247CiB9CiAKIFN0cmluZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnRl
eHRCYXNlbGluZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRleHRCYXNlbGluZU5hbWUoc3RhdGUo
KS5tX3RleHRCYXNlbGluZSk7CisgICAgcmV0dXJuIHRleHRCYXNlbGluZU5hbWUoc3RhdGUoKS50
ZXh0QmFzZWxpbmUpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0VGV4
dEJhc2VsaW5lKGNvbnN0IFN0cmluZyYgcykKQEAgLTIyMDYsMTAgKzIyMDYsMTAgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFRleHRCYXNlbGluZShjb25zdCBTdHJpbmcmIHMp
CiAgICAgVGV4dEJhc2VsaW5lIGJhc2VsaW5lOwogICAgIGlmICghcGFyc2VUZXh0QmFzZWxpbmUo
cywgYmFzZWxpbmUpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKHN0YXRlKCkubV90ZXh0QmFz
ZWxpbmUgPT0gYmFzZWxpbmUpCisgICAgaWYgKHN0YXRlKCkudGV4dEJhc2VsaW5lID09IGJhc2Vs
aW5lKQogICAgICAgICByZXR1cm47CiAgICAgcmVhbGl6ZVNhdmVzKCk7Ci0gICAgbW9kaWZpYWJs
ZVN0YXRlKCkubV90ZXh0QmFzZWxpbmUgPSBiYXNlbGluZTsKKyAgICBtb2RpZmlhYmxlU3RhdGUo
KS50ZXh0QmFzZWxpbmUgPSBiYXNlbGluZTsKIH0KIAogaW5saW5lIFRleHREaXJlY3Rpb24gQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0b1RleHREaXJlY3Rpb24oRGlyZWN0aW9uIGRpcmVjdGlv
biwgUmVuZGVyU3R5bGUqKiBjb21wdXRlZFN0eWxlKSBjb25zdApAQCAtMjIzMSw5ICsyMjMxLDkg
QEAgaW5saW5lIFRleHREaXJlY3Rpb24gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0b1RleHRE
aXJlY3Rpb24oRGlyZWN0aW9uIGRpcmVjdGkKIAogU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6ZGlyZWN0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAoc3RhdGUoKS5tX2RpcmVjdGlvbiA9
PSBEaXJlY3Rpb246OkluaGVyaXQpCisgICAgaWYgKHN0YXRlKCkuZGlyZWN0aW9uID09IERpcmVj
dGlvbjo6SW5oZXJpdCkKICAgICAgICAgY2FudmFzKCktPmRvY3VtZW50KCkudXBkYXRlU3R5bGVJ
Zk5lZWRlZCgpOwotICAgIHJldHVybiB0b1RleHREaXJlY3Rpb24oc3RhdGUoKS5tX2RpcmVjdGlv
bikgPT0gUlRMID8gQVNDSUlMaXRlcmFsKCJydGwiKSA6IEFTQ0lJTGl0ZXJhbCgibHRyIik7Cisg
ICAgcmV0dXJuIHRvVGV4dERpcmVjdGlvbihzdGF0ZSgpLmRpcmVjdGlvbikgPT0gUlRMID8gQVND
SUlMaXRlcmFsKCJydGwiKSA6IEFTQ0lJTGl0ZXJhbCgibHRyIik7CiB9CiAKIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzZXREaXJlY3Rpb24oY29uc3QgU3RyaW5nJiBkaXJlY3Rpb25T
dHJpbmcpCkBAIC0yMjQ4LDExICsyMjQ4LDExIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpzZXREaXJlY3Rpb24oY29uc3QgU3RyaW5nJiBkaXJlY3Rpb25TdHJpbmcpCiAgICAgZWxz
ZQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoc3RhdGUoKS5tX2RpcmVjdGlvbiA9PSBkaXJl
Y3Rpb24pCisgICAgaWYgKHN0YXRlKCkuZGlyZWN0aW9uID09IGRpcmVjdGlvbikKICAgICAgICAg
cmV0dXJuOwogCiAgICAgcmVhbGl6ZVNhdmVzKCk7Ci0gICAgbW9kaWZpYWJsZVN0YXRlKCkubV9k
aXJlY3Rpb24gPSBkaXJlY3Rpb247CisgICAgbW9kaWZpYWJsZVN0YXRlKCkuZGlyZWN0aW9uID0g
ZGlyZWN0aW9uOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZmlsbFRleHQo
Y29uc3QgU3RyaW5nJiB0ZXh0LCBmbG9hdCB4LCBmbG9hdCB5KQpAQCAtMjMyMyw3ICsyMzIzLDcg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdUZXh0SW50ZXJuYWwoY29uc3Qg
U3RyaW5nJiB0ZXh0LCBmbG9hdCB4LCBmbG8KICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3
aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghc3Rh
dGUoKS5tX2hhc0ludmVydGlibGVUcmFuc2Zvcm0pCisgICAgaWYgKCFzdGF0ZSgpLmhhc0ludmVy
dGlibGVUcmFuc2Zvcm0pCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUo
eCkgfCAhc3RkOjppc2Zpbml0ZSh5KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjM0OSwxNCArMjM0
OSwxNCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1RleHRJbnRlcm5hbChj
b25zdCBTdHJpbmcmIHRleHQsIGZsb2F0IHgsIGZsbwogCiAgICAgUmVuZGVyU3R5bGUqIGNvbXB1
dGVkU3R5bGU7CiAgICAgY2FudmFzKCktPmRvY3VtZW50KCkudXBkYXRlU3R5bGVJZk5lZWRlZCgp
OwotICAgIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gdG9UZXh0RGlyZWN0aW9uKHN0YXRlKCku
bV9kaXJlY3Rpb24sICZjb21wdXRlZFN0eWxlKTsKKyAgICBUZXh0RGlyZWN0aW9uIGRpcmVjdGlv
biA9IHRvVGV4dERpcmVjdGlvbihzdGF0ZSgpLmRpcmVjdGlvbiwgJmNvbXB1dGVkU3R5bGUpOwog
ICAgIGJvb2wgaXNSVEwgPSBkaXJlY3Rpb24gPT0gUlRMOwogICAgIGJvb2wgb3ZlcnJpZGUgPSBj
b21wdXRlZFN0eWxlID8gaXNPdmVycmlkZShjb21wdXRlZFN0eWxlLT51bmljb2RlQmlkaSgpKSA6
IGZhbHNlOwogCiAgICAgVGV4dFJ1biB0ZXh0UnVuKG5vcm1hbGl6ZWRUZXh0LCAwLCAwLCBBbGxv
d1RyYWlsaW5nRXhwYW5zaW9uLCBkaXJlY3Rpb24sIG92ZXJyaWRlLCB0cnVlLCBUZXh0UnVuOjpO
b1JvdW5kaW5nKTsKICAgICAvLyBEcmF3IHRoZSBpdGVtIHRleHQgYXQgdGhlIGNvcnJlY3QgcG9p
bnQuCiAgICAgRmxvYXRQb2ludCBsb2NhdGlvbih4LCB5KTsKLSAgICBzd2l0Y2ggKHN0YXRlKCku
bV90ZXh0QmFzZWxpbmUpIHsKKyAgICBzd2l0Y2ggKHN0YXRlKCkudGV4dEJhc2VsaW5lKSB7CiAg
ICAgY2FzZSBUb3BUZXh0QmFzZWxpbmU6CiAgICAgY2FzZSBIYW5naW5nVGV4dEJhc2VsaW5lOgog
ICAgICAgICBsb2NhdGlvbi5zZXRZKHkgKyBmb250TWV0cmljcy5hc2NlbnQoKSk7CkBAIC0yMzc5
LDcgKzIzNzksNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1RleHRJbnRl
cm5hbChjb25zdCBTdHJpbmcmIHRleHQsIGZsb2F0IHgsIGZsbwogICAgIHVzZU1heFdpZHRoID0g
KHVzZU1heFdpZHRoICYmIG1heFdpZHRoIDwgZm9udFdpZHRoKTsKICAgICBmbG9hdCB3aWR0aCA9
IHVzZU1heFdpZHRoID8gbWF4V2lkdGggOiBmb250V2lkdGg7CiAKLSAgICBUZXh0QWxpZ24gYWxp
Z24gPSBzdGF0ZSgpLm1fdGV4dEFsaWduOworICAgIFRleHRBbGlnbiBhbGlnbiA9IHN0YXRlKCku
dGV4dEFsaWduOwogICAgIGlmIChhbGlnbiA9PSBTdGFydFRleHRBbGlnbikKICAgICAgICAgYWxp
Z24gPSBpc1JUTCA/IFJpZ2h0VGV4dEFsaWduIDogTGVmdFRleHRBbGlnbjsKICAgICBlbHNlIGlm
IChhbGlnbiA9PSBFbmRUZXh0QWxpZ24pCkBAIC0yNDAzLDcgKzI0MDMsNyBAQCB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1RleHRJbnRlcm5hbChjb25zdCBTdHJpbmcmIHRleHQs
IGZsb2F0IHgsIGZsbwogICAgICAgICBpbmZsYXRlU3Ryb2tlUmVjdCh0ZXh0UmVjdCk7CiAKICNp
ZiBVU0UoQ0cpCi0gICAgY29uc3QgQ2FudmFzU3R5bGUmIGRyYXdTdHlsZSA9IGZpbGwgPyBzdGF0
ZSgpLm1fZmlsbFN0eWxlIDogc3RhdGUoKS5tX3N0cm9rZVN0eWxlOworICAgIGNvbnN0IENhbnZh
c1N0eWxlJiBkcmF3U3R5bGUgPSBmaWxsID8gc3RhdGUoKS5maWxsU3R5bGUgOiBzdGF0ZSgpLnN0
cm9rZVN0eWxlOwogICAgIGlmIChkcmF3U3R5bGUuY2FudmFzR3JhZGllbnQoKSB8fCBkcmF3U3R5
bGUuY2FudmFzUGF0dGVybigpKSB7CiAKICAgICAgICAgSW50UmVjdCBtYXNrUmVjdCA9IGVuY2xv
c2luZ0ludFJlY3QodGV4dFJlY3QpOwpAQCAtMjQ4MCwxMiArMjQ4MCwxMiBAQCB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd1RleHRJbnRlcm5hbChjb25zdCBTdHJpbmcmIHRleHQs
IGZsb2F0IHgsIGZsbwogICAgICAgICBsb2NhdGlvbiA9IEZsb2F0UG9pbnQoKTsKICAgICB9CiAK
LSAgICBpZiAoaXNGdWxsQ2FudmFzQ29tcG9zaXRlTW9kZShzdGF0ZSgpLm1fZ2xvYmFsQ29tcG9z
aXRlKSkgeworICAgIGlmIChpc0Z1bGxDYW52YXNDb21wb3NpdGVNb2RlKHN0YXRlKCkuZ2xvYmFs
Q29tcG9zaXRlKSkgewogICAgICAgICBiZWdpbkNvbXBvc2l0ZUxheWVyKCk7CiAgICAgICAgIGZv
bnRQcm94eS5kcmF3QmlkaVRleHQoKmMsIHRleHRSdW4sIGxvY2F0aW9uLCBGb250Q2FzY2FkZTo6
VXNlRmFsbGJhY2tJZkZvbnROb3RSZWFkeSk7CiAgICAgICAgIGVuZENvbXBvc2l0ZUxheWVyKCk7
CiAgICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKLSAgICB9IGVsc2UgaWYgKHN0YXRlKCku
bV9nbG9iYWxDb21wb3NpdGUgPT0gQ29tcG9zaXRlQ29weSkgeworICAgIH0gZWxzZSBpZiAoc3Rh
dGUoKS5nbG9iYWxDb21wb3NpdGUgPT0gQ29tcG9zaXRlQ29weSkgewogICAgICAgICBjbGVhckNh
bnZhcygpOwogICAgICAgICBmb250UHJveHkuZHJhd0JpZGlUZXh0KCpjLCB0ZXh0UnVuLCBsb2Nh
dGlvbiwgRm9udENhc2NhZGU6OlVzZUZhbGxiYWNrSWZGb250Tm90UmVhZHkpOwogICAgICAgICBk
aWREcmF3RW50aXJlQ2FudmFzKCk7CkBAIC0yNTAxLDEwICsyNTAxLDEwIEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjppbmZsYXRlU3Ryb2tlUmVjdChGbG9hdFJlY3QmIHJlY3QpIGNv
bnN0CiAgICAgLy8gVGhpcyB5aWVsZHMgYSBzbGlnaHRseSBvdmVyc2l6ZWQgcmVjdCBidXQgaXMg
dmVyeSBmYXN0CiAgICAgLy8gY29tcGFyZWQgdG8gUGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KCku
CiAgICAgc3RhdGljIGNvbnN0IGZsb2F0IHJvb3QyID0gc3FydGYoMik7Ci0gICAgZmxvYXQgZGVs
dGEgPSBzdGF0ZSgpLm1fbGluZVdpZHRoIC8gMjsKLSAgICBpZiAoc3RhdGUoKS5tX2xpbmVKb2lu
ID09IE1pdGVySm9pbikKLSAgICAgICAgZGVsdGEgKj0gc3RhdGUoKS5tX21pdGVyTGltaXQ7Ci0g
ICAgZWxzZSBpZiAoc3RhdGUoKS5tX2xpbmVDYXAgPT0gU3F1YXJlQ2FwKQorICAgIGZsb2F0IGRl
bHRhID0gc3RhdGUoKS5saW5lV2lkdGggLyAyOworICAgIGlmIChzdGF0ZSgpLmxpbmVKb2luID09
IE1pdGVySm9pbikKKyAgICAgICAgZGVsdGEgKj0gc3RhdGUoKS5taXRlckxpbWl0OworICAgIGVs
c2UgaWYgKHN0YXRlKCkubGluZUNhcCA9PSBTcXVhcmVDYXApCiAgICAgICAgIGRlbHRhICo9IHJv
b3QyOwogCiAgICAgcmVjdC5pbmZsYXRlKGRlbHRhKTsKQEAgLTI1MTQsOSArMjUxNCw5IEBAIGF1
dG8gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmb250UHJveHkoKSAtPiBjb25zdCBGb250UHJv
eHkmCiB7CiAgICAgY2FudmFzKCktPmRvY3VtZW50KCkudXBkYXRlU3R5bGVJZk5lZWRlZCgpOwog
Ci0gICAgaWYgKCFzdGF0ZSgpLm1fZm9udC5yZWFsaXplZCgpKQotICAgICAgICBzZXRGb250KHN0
YXRlKCkubV91bnBhcnNlZEZvbnQpOwotICAgIHJldHVybiBzdGF0ZSgpLm1fZm9udDsKKyAgICBp
ZiAoIXN0YXRlKCkuZm9udC5yZWFsaXplZCgpKQorICAgICAgICBzZXRGb250KHN0YXRlKCkudW5w
YXJzZWRGb250KTsKKyAgICByZXR1cm4gc3RhdGUoKS5mb250OwogfQogCiAjaWYgRU5BQkxFKEFD
Q0VMRVJBVEVEXzJEX0NBTlZBUykKQEAgLTI1MjgsMTYgKzI1MjgsMTYgQEAgUGxhdGZvcm1MYXll
ciogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIAogYm9v
bCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmltYWdlU21vb3RoaW5nRW5hYmxlZCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIHN0YXRlKCkubV9pbWFnZVNtb290aGluZ0VuYWJsZWQ7CisgICAgcmV0
dXJuIHN0YXRlKCkuaW1hZ2VTbW9vdGhpbmdFbmFibGVkOwogfQogCiB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c2V0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsK
LSAgICBpZiAoZW5hYmxlZCA9PSBzdGF0ZSgpLm1faW1hZ2VTbW9vdGhpbmdFbmFibGVkKQorICAg
IGlmIChlbmFibGVkID09IHN0YXRlKCkuaW1hZ2VTbW9vdGhpbmdFbmFibGVkKQogICAgICAgICBy
ZXR1cm47CiAKICAgICByZWFsaXplU2F2ZXMoKTsKLSAgICBtb2RpZmlhYmxlU3RhdGUoKS5tX2lt
YWdlU21vb3RoaW5nRW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgbW9kaWZpYWJsZVN0YXRlKCkuaW1h
Z2VTbW9vdGhpbmdFbmFibGVkID0gZW5hYmxlZDsKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBk
cmF3aW5nQ29udGV4dCgpOwogICAgIGlmIChjKQogICAgICAgICBjLT5zZXRJbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KGVuYWJsZWQgPyBEZWZhdWx0SW50ZXJwb2xhdGlvblF1YWxpdHkgOiBJbnRl
cnBvbGF0aW9uTm9uZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCmluZGV4IDYxNTY3ZmVhMWFkMjRmYTNlMmJiMjAyOTQ1
MDk1NjY0ZDJmYjg2MmIuLmNhNjE5ODAxY2RjOTI4Y2MwOWVlZTNhZGFhYjBmNWEyMjAwMWFiNjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5oCkBAIC02MiwxMCArNjIsMTAgQEAgcHVibGljOgogICAgIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRChIVE1MQ2FudmFzRWxlbWVudCosIGJvb2wgdXNlc0NTU0NvbXBhdGliaWxp
dHlQYXJzZU1vZGUsIGJvb2wgdXNlc0Rhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlKTsKICAgICB2
aXJ0dWFsIH5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQoKTsKIAotICAgIGNvbnN0IENhbnZhc1N0
eWxlJiBzdHJva2VTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRlKCkubV9zdHJva2VTdHlsZTsg
fQorICAgIGNvbnN0IENhbnZhc1N0eWxlJiBzdHJva2VTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRlKCkuc3Ryb2tlU3R5bGU7IH0KICAgICB2b2lkIHNldFN0cm9rZVN0eWxlKENhbnZhc1N0eWxl
KTsKIAotICAgIGNvbnN0IENhbnZhc1N0eWxlJiBmaWxsU3R5bGUoKSBjb25zdCB7IHJldHVybiBz
dGF0ZSgpLm1fZmlsbFN0eWxlOyB9CisgICAgY29uc3QgQ2FudmFzU3R5bGUmIGZpbGxTdHlsZSgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRlKCkuZmlsbFN0eWxlOyB9CiAgICAgdm9pZCBzZXRGaWxsU3R5
bGUoQ2FudmFzU3R5bGUpOwogCiAgICAgZmxvYXQgbGluZVdpZHRoKCkgY29uc3Q7CkBAIC0yMjIs
OCArMjIyLDggQEAgcHVibGljOgogICAgIHZvaWQgc3Ryb2tlVGV4dChjb25zdCBTdHJpbmcmIHRl
eHQsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IG1heFdpZHRoKTsKICAgICBSZWY8VGV4dE1ldHJp
Y3M+IG1lYXN1cmVUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCk7CiAKLSAgICBMaW5lQ2FwIGdldExp
bmVDYXAoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpLm1fbGluZUNhcDsgfQotICAgIExpbmVKb2lu
IGdldExpbmVKb2luKCkgY29uc3QgeyByZXR1cm4gc3RhdGUoKS5tX2xpbmVKb2luOyB9CisgICAg
TGluZUNhcCBnZXRMaW5lQ2FwKCkgY29uc3QgeyByZXR1cm4gc3RhdGUoKS5saW5lQ2FwOyB9Cisg
ICAgTGluZUpvaW4gZ2V0TGluZUpvaW4oKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpLmxpbmVKb2lu
OyB9CiAKICAgICBib29sIGltYWdlU21vb3RoaW5nRW5hYmxlZCgpIGNvbnN0OwogICAgIHZvaWQg
c2V0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKGJvb2wpOwpAQCAtMjYyLDMzICsyNjIsMzMgQEAgcHJp
dmF0ZToKICAgICAgICAgU3RhdGUoY29uc3QgU3RhdGUmKTsKICAgICAgICAgU3RhdGUmIG9wZXJh
dG9yPShjb25zdCBTdGF0ZSYpOwogCi0gICAgICAgIFN0cmluZyBtX3VucGFyc2VkU3Ryb2tlQ29s
b3I7Ci0gICAgICAgIFN0cmluZyBtX3VucGFyc2VkRmlsbENvbG9yOwotICAgICAgICBDYW52YXNT
dHlsZSBtX3N0cm9rZVN0eWxlOwotICAgICAgICBDYW52YXNTdHlsZSBtX2ZpbGxTdHlsZTsKLSAg
ICAgICAgZmxvYXQgbV9saW5lV2lkdGg7Ci0gICAgICAgIExpbmVDYXAgbV9saW5lQ2FwOwotICAg
ICAgICBMaW5lSm9pbiBtX2xpbmVKb2luOwotICAgICAgICBmbG9hdCBtX21pdGVyTGltaXQ7Ci0g
ICAgICAgIEZsb2F0U2l6ZSBtX3NoYWRvd09mZnNldDsKLSAgICAgICAgZmxvYXQgbV9zaGFkb3dC
bHVyOwotICAgICAgICBSR0JBMzIgbV9zaGFkb3dDb2xvcjsKLSAgICAgICAgZmxvYXQgbV9nbG9i
YWxBbHBoYTsKLSAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3IgbV9nbG9iYWxDb21wb3NpdGU7Ci0g
ICAgICAgIEJsZW5kTW9kZSBtX2dsb2JhbEJsZW5kOwotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0g
bV90cmFuc2Zvcm07Ci0gICAgICAgIGJvb2wgbV9oYXNJbnZlcnRpYmxlVHJhbnNmb3JtOwotICAg
ICAgICBWZWN0b3I8ZmxvYXQ+IG1fbGluZURhc2g7Ci0gICAgICAgIGZsb2F0IG1fbGluZURhc2hP
ZmZzZXQ7Ci0gICAgICAgIGJvb2wgbV9pbWFnZVNtb290aGluZ0VuYWJsZWQ7CisgICAgICAgIFN0
cmluZyB1bnBhcnNlZFN0cm9rZUNvbG9yOworICAgICAgICBTdHJpbmcgdW5wYXJzZWRGaWxsQ29s
b3I7CisgICAgICAgIENhbnZhc1N0eWxlIHN0cm9rZVN0eWxlOworICAgICAgICBDYW52YXNTdHls
ZSBmaWxsU3R5bGU7CisgICAgICAgIGZsb2F0IGxpbmVXaWR0aDsKKyAgICAgICAgTGluZUNhcCBs
aW5lQ2FwOworICAgICAgICBMaW5lSm9pbiBsaW5lSm9pbjsKKyAgICAgICAgZmxvYXQgbWl0ZXJM
aW1pdDsKKyAgICAgICAgRmxvYXRTaXplIHNoYWRvd09mZnNldDsKKyAgICAgICAgZmxvYXQgc2hh
ZG93Qmx1cjsKKyAgICAgICAgUkdCQTMyIHNoYWRvd0NvbG9yOworICAgICAgICBmbG9hdCBnbG9i
YWxBbHBoYTsKKyAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3IgZ2xvYmFsQ29tcG9zaXRlOworICAg
ICAgICBCbGVuZE1vZGUgZ2xvYmFsQmxlbmQ7CisgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFu
c2Zvcm07CisgICAgICAgIGJvb2wgaGFzSW52ZXJ0aWJsZVRyYW5zZm9ybTsKKyAgICAgICAgVmVj
dG9yPGZsb2F0PiBsaW5lRGFzaDsKKyAgICAgICAgZmxvYXQgbGluZURhc2hPZmZzZXQ7CisgICAg
ICAgIGJvb2wgaW1hZ2VTbW9vdGhpbmdFbmFibGVkOwogCiAgICAgICAgIC8vIFRleHQgc3RhdGUu
Ci0gICAgICAgIFRleHRBbGlnbiBtX3RleHRBbGlnbjsKLSAgICAgICAgVGV4dEJhc2VsaW5lIG1f
dGV4dEJhc2VsaW5lOwotICAgICAgICBEaXJlY3Rpb24gbV9kaXJlY3Rpb247CisgICAgICAgIFRl
eHRBbGlnbiB0ZXh0QWxpZ247CisgICAgICAgIFRleHRCYXNlbGluZSB0ZXh0QmFzZWxpbmU7Cisg
ICAgICAgIERpcmVjdGlvbiBkaXJlY3Rpb247CiAKLSAgICAgICAgU3RyaW5nIG1fdW5wYXJzZWRG
b250OwotICAgICAgICBGb250UHJveHkgbV9mb250OworICAgICAgICBTdHJpbmcgdW5wYXJzZWRG
b250OworICAgICAgICBGb250UHJveHkgZm9udDsKICAgICB9OwogCiAgICAgZW51bSBDYW52YXNE
aWREcmF3T3B0aW9uIHsKQEAgLTM2Niw3ICszNjYsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
Ym9vbCBpczJkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBpc0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIGJvb2wg
aGFzSW52ZXJ0aWJsZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHN0YXRlKCku
bV9oYXNJbnZlcnRpYmxlVHJhbnNmb3JtOyB9CisgICAgdmlydHVhbCBib29sIGhhc0ludmVydGli
bGVUcmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBzdGF0ZSgpLmhhc0ludmVydGli
bGVUcmFuc2Zvcm07IH0KICAgICBUZXh0RGlyZWN0aW9uIHRvVGV4dERpcmVjdGlvbihEaXJlY3Rp
b24sIFJlbmRlclN0eWxlKiogY29tcHV0ZWRTdHlsZSA9IG51bGxwdHIpIGNvbnN0OwogCiAjaWYg
RU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykK
</data>
<flag name="review"
          id="285880"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>