<?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>180641</bug_id>
          
          <creation_ts>2017-12-11 02:07:57 -0800</creation_ts>
          <short_desc>[CoordGraphics] Move UpdateAtlas, AreaAllocator into the platform layer</short_desc>
          <delta_ts>2017-12-11 23:07:37 -0800</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1380157</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-12-11 02:07:57 -0800</bug_when>
    <thetext>[CoordGraphics] Move UpdateAtlas, AreaAllocator into the platform layer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380158</commentid>
    <comment_count>1</comment_count>
      <attachid>328958</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-12-11 02:10:50 -0800</bug_when>
    <thetext>Created attachment 328958
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380161</commentid>
    <comment_count>2</comment_count>
      <attachid>328959</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-12-11 02:23:15 -0800</bug_when>
    <thetext>Created attachment 328959
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380340</commentid>
    <comment_count>3</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-12-11 12:17:15 -0800</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #2)
&gt; Created attachment 328959 [details]
&gt; Patch

^</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380574</commentid>
    <comment_count>4</comment_count>
      <attachid>328959</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-12-11 23:04:47 -0800</bug_when>
    <thetext>Comment on attachment 328959
Patch

Clearing flags on attachment: 328959

Committed r225773: &lt;https://trac.webkit.org/changeset/225773&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380575</commentid>
    <comment_count>5</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-12-11 23:04:51 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1380582</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-12-11 23:07:37 -0800</bug_when>
    <thetext>&lt;rdar://problem/35988150&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328958</attachid>
            <date>2017-12-11 02:10:50 -0800</date>
            <delta_ts>2017-12-11 02:23:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-180641-20171211111048.patch</filename>
            <type>text/plain</type>
            <size>50007</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1NzM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGE2NGVkMjNkN2E4NzQy
NDJhYzMzMmIwMDQxMWMyMWIzMTBjNjhiMS4uODZkNzhkOWE4M2FiNjJkNjM0YjhlOTNlZGNjMzA1
ZTQ4NWNiODA3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDE3LTEyLTExICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbQ29vcmRHcmFwaGlj
c10gTW92ZSBVcGRhdGVBdGxhcywgQXJlYUFsbG9jYXRvciBpbnRvIHRoZSBwbGF0Zm9ybSBsYXll
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwNjQx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0
aGUgVXBkYXRlQXRsYXMgYW5kIEFyZWFBbGxvY2F0b3IgY2xhc3NlcyBhbmQgdGhlaXIgc291cmNl
IGZpbGVzCisgICAgICAgIGludG8gdGhlIHBsYXRmb3JtIGxheWVyLiBUaGlzIHN0aWxsIG1lYW5z
IHVzaW5nIHRoZSBXZWJDb3JlIG5hbWVzcGFjZSwKKyAgICAgICAgYnV0IGFwYXJ0IGZyb20gdGhh
dCB0aGVzZSB0d28gY2xhc3NlcyBoYXZlIG5vIGRlcGVuZGVuY3kgb24gYW55dGhpbmcgaW4KKyAg
ICAgICAgdGhlIFdlYktpdCBsYXllciwgc28gdGhleSBjYW4gYmUgbW92ZWQgZnJvbSB0aGVyZS4K
KworICAgICAgICBObyBuZXcgdGVzdHMgLS0gbm8gY2hhbmdlIGluIGJlaGF2aW9yLgorCisgICAg
ICAgICogcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJlYUFsbG9jYXRvci5jcHA6IFJlbmFtZWQgZnJv
bSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Fy
ZWFBbGxvY2F0b3IuY3BwLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9BcmVhQWxsb2NhdG9yLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0FyZWFBbGxvY2F0b3IuaC4KKyAgICAg
ICAgKFdlYkNvcmU6Om5leHRQb3dlck9mVHdvKToKKyAgICAgICAgKFdlYkNvcmU6OkFyZWFBbGxv
Y2F0b3I6OnNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXJlYUFsbG9jYXRvcjo6bWlu
aW11bUFsbG9jYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXJlYUFsbG9jYXRvcjo6
c2V0TWluaW11bUFsbG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6QXJlYUFsbG9jYXRvcjo6
bWFyZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFyZWFBbGxvY2F0b3I6OnNldE1hcmdp
bik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0
ZUF0bGFzLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMuY3BwLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxhcy5oOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRh
dGVBdGxhcy5oLgorICAgICAgICAoV2ViQ29yZTo6VXBkYXRlQXRsYXM6OnNpemUgY29uc3QpOgor
CiAyMDE3LTEyLTEwICBNaW5zaGVuZyBMaXUgIDxsYW1iZGFAbGl1Lm1zPgogCiAgICAgICAgIElu
Y29ycmVjdCBib3VuZHMgaW5zaWRlIDxtb3Zlcj4vPG11bmRlcj4gd2hlbiBhIHN0cmV0Y2h5IG9w
ZXJhdG9yIGlzIHByZXNlbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMGQ5ZDliMWM5MWY0ODA3MTY2NTYwNjM5YWVh
N2M3MjgzMDA1MTU3NS4uMzA5ZjZmYzM5ZjkwNWRlYTA2NDEwYjU3ZmFlYzBkYmQ5ZWMzZTY3YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxNy0xMi0xMSAgWmFuIERvYmVyc2VrICA8emRv
YmVyc2VrQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0Nvb3JkR3JhcGhpY3NdIE1vdmUgVXBkYXRl
QXRsYXMsIEFyZWFBbGxvY2F0b3IgaW50byB0aGUgcGxhdGZvcm0gbGF5ZXIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDY0MQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgdGhlIFVwZGF0ZUF0bGFz
IGFuZCBBcmVhQWxsb2NhdG9yIGNsYXNzZXMgaW50byB0aGUgcGxhdGZvcm0gbGF5ZXIsCisgICAg
ICAgIG1vdmluZyBvdmVyIGJ1aWxkIHRhcmdldHMgYW5kIGFkanVzdCBVcGRhdGVBdGxhcyBjbGFz
cyByZWZlcmVuY2VzIGluCisgICAgICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0b3IuCisKKyAgICAg
ICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybVdQRS5jbWFrZToKKyAg
ICAgICAgKiBQbGF0Zm9ybVdpbi5jbWFrZToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmg6CisKIDIwMTctMTIt
MTAgIFN0ZXBoYW4gU3phYm8gIDxzdGVwaGFuLnN6YWJvQHNvbnkuY29tPgogCiAgICAgICAgIEFQ
SUNsaWVudC5oIHVzZXMgdGhpbmdzIGZyb20gPHR1cGxlPiB3aXRob3V0IGluY2x1ZGluZyBpdCBl
eHBsaWNpdGx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFw
cGVyLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVyZU1hcHBlci5jbWFrZQpp
bmRleCAwZDZlZDE5MWVlYjZhODcwYjc3OTBmNDA1MTFmZjgyYjkwODQ4MTE3Li41ZjZiN2YzNGNl
ODVlMWU2MmQyMWUyYzNlYmZiYWQ3NDY4Yjc1MmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1RleHR1cmVNYXBwZXIuY21ha2UKQEAgLTM1LDEwICszNSwxMiBAQCBpZiAoVVNFX0NPT1JE
SU5BVEVEX0dSQVBISUNTKQogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmNwcAogCisgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmNwcAogICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRJbWFnZUJhY2tpbmcuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9UaWxlLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvY29vcmRpbmF0ZWQvVGlsZWRCYWNraW5nU3RvcmUuY3BwCisgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxhcy5jcHAKICAgICApCiAKICAg
ICAjIEZJWE1FOiBNb3ZlIHRoaXMgaW50byBOaWNvc2lhLmNtYWtlIG9uY2UgdGhlIGNvbXBvbmVu
dCBpcyBzZXQgZm9yIGxvbmctdGVybSB1c2UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJlYUFsbG9jYXRvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJlYUFs
bG9jYXRvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTlkYWM1ZDU3Mzc3ZjAwZTM4YTkwYjQ5MWRlZjE5MTgy
MjI5ZmRkNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmNwcApAQCAtMCwwICsxLDMyNiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
Mi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQXJlYUFsbG9jYXRvci5oIgorCisjaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0FyZWFBbGxvY2F0b3I6OkFy
ZWFBbGxvY2F0b3IoY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICA6IG1fc2l6ZShzaXplKQorICAg
ICwgbV9taW5BbGxvYygxLCAxKQorICAgICwgbV9tYXJnaW4oMCwgMCkKK3sKK30KKworQXJlYUFs
bG9jYXRvcjo6fkFyZWFBbGxvY2F0b3IoKQoreworfQorCit2b2lkIEFyZWFBbGxvY2F0b3I6OmV4
cGFuZChjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIG1fc2l6ZSA9IG1fc2l6ZS5leHBhbmRl
ZFRvKHNpemUpOworfQorCit2b2lkIEFyZWFBbGxvY2F0b3I6OmV4cGFuZEJ5KGNvbnN0IEludFNp
emUmIHNpemUpCit7CisgICAgbV9zaXplICs9IHNpemU7Cit9CisKK3ZvaWQgQXJlYUFsbG9jYXRv
cjo6cmVsZWFzZShjb25zdCBJbnRSZWN0JikKK3sKK30KKworaW50IEFyZWFBbGxvY2F0b3I6Om92
ZXJoZWFkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKK30KKworSW50U2l6ZSBBcmVhQWxsb2Nh
dG9yOjpyb3VuZEFsbG9jYXRpb24oY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICBp
bnQgd2lkdGggPSBzaXplLndpZHRoKCkgKyBtX21hcmdpbi53aWR0aCgpOworICAgIGludCBoZWln
aHQgPSBzaXplLmhlaWdodCgpICsgbV9tYXJnaW4uaGVpZ2h0KCk7CisgICAgaW50IGV4dHJhID0g
d2lkdGggJSBtX21pbkFsbG9jLndpZHRoKCk7CisgICAgaWYgKGV4dHJhKQorICAgICAgICB3aWR0
aCArPSBtX21pbkFsbG9jLndpZHRoKCkgLSBleHRyYTsKKyAgICBleHRyYSA9IGhlaWdodCAlIG1f
bWluQWxsb2MuaGVpZ2h0KCk7CisgICAgaWYgKGV4dHJhKQorICAgICAgICBoZWlnaHQgKz0gbV9t
aW5BbGxvYy5oZWlnaHQoKSAtIGV4dHJhOworCisgICAgcmV0dXJuIEludFNpemUod2lkdGgsIGhl
aWdodCk7Cit9CisKK0dlbmVyYWxBcmVhQWxsb2NhdG9yOjpHZW5lcmFsQXJlYUFsbG9jYXRvcihj
b25zdCBJbnRTaXplJiBzaXplKQorICAgIDogQXJlYUFsbG9jYXRvcihuZXh0UG93ZXJPZlR3byhz
aXplKSkKK3sKKyAgICBtX3Jvb3QgPSBuZXcgTm9kZSgpOworICAgIG1fcm9vdC0+cmVjdCA9IElu
dFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgbV9yb290
LT5sYXJnZXN0RnJlZSA9IG1fc2l6ZTsKKyAgICBtX25vZGVDb3VudCA9IDE7CisgICAgc2V0TWlu
aW11bUFsbG9jYXRpb24oSW50U2l6ZSg4LCA4KSk7Cit9CisKK0dlbmVyYWxBcmVhQWxsb2NhdG9y
Ojp+R2VuZXJhbEFyZWFBbGxvY2F0b3IoKQoreworICAgIGZyZWVOb2RlKG1fcm9vdCk7Cit9CisK
K3ZvaWQgR2VuZXJhbEFyZWFBbGxvY2F0b3I6OmZyZWVOb2RlKE5vZGUqIG5vZGUpCit7CisgICAg
aWYgKG5vZGUpIHsKKyAgICAgICAgZnJlZU5vZGUobm9kZS0+bGVmdCk7CisgICAgICAgIGZyZWVO
b2RlKG5vZGUtPnJpZ2h0KTsKKyAgICB9CisgICAgZGVsZXRlIG5vZGU7Cit9CisKK3ZvaWQgR2Vu
ZXJhbEFyZWFBbGxvY2F0b3I6OmV4cGFuZChjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIEFy
ZWFBbGxvY2F0b3I6OmV4cGFuZChuZXh0UG93ZXJPZlR3byhzaXplKSk7CisKKyAgICBpZiAobV9y
b290LT5yZWN0LnNpemUoKSA9PSBtX3NpemUpCisgICAgICAgIHJldHVybjsgLy8gTm8gY2hhbmdl
LgorCisgICAgaWYgKCFtX3Jvb3QtPmxlZnQgJiYgbV9yb290LT5sYXJnZXN0RnJlZS53aWR0aCgp
ID4gMCkgeworICAgICAgICAvLyBObyBhbGxvY2F0aW9ucyBoYXZlIG9jY3VycmVkLCBzbyBqdXN0
IGFkanVzdCB0aGUgcm9vdCBzaXplLgorICAgICAgICBtX3Jvb3QtPnJlY3QgPSBJbnRSZWN0KDAs
IDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOworICAgICAgICBtX3Jvb3QtPmxh
cmdlc3RGcmVlID0gbV9zaXplOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQWRk
IGV4dHJhIG5vZGVzIGFib3ZlIHRoZSBjdXJyZW50IHJvb3QgdG8gZXhwYW5kIHRoZSB0cmVlLgor
ICAgIE5vZGUqIG9sZFJvb3QgPSBtX3Jvb3Q7CisgICAgU3BsaXQgc3BsaXQ7CisgICAgaWYgKG1f
c2l6ZS53aWR0aCgpID49IG1fc2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgc3BsaXQgPSBTcGxpdE9u
WDsKKyAgICBlbHNlCisgICAgICAgIHNwbGl0ID0gU3BsaXRPblk7CisKKyAgICB3aGlsZSAobV9y
b290LT5yZWN0LnNpemUoKSAhPSBtX3NpemUpIHsKKyAgICAgICAgaWYgKG1fcm9vdC0+cmVjdC53
aWR0aCgpID09IG1fc2l6ZS53aWR0aCgpKQorICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWTsK
KyAgICAgICAgZWxzZSBpZiAobV9yb290LT5yZWN0LmhlaWdodCgpID09IG1fc2l6ZS5oZWlnaHQo
KSkKKyAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblg7CisgICAgICAgIE5vZGUqIHBhcmVudCA9
IG5ldyBOb2RlKCk7CisgICAgICAgIE5vZGUqIHJpZ2h0ID0gbmV3IE5vZGUoKTsKKyAgICAgICAg
bV9ub2RlQ291bnQgKz0gMjsKKyAgICAgICAgbV9yb290LT5wYXJlbnQgPSBwYXJlbnQ7CisgICAg
ICAgIHBhcmVudC0+cGFyZW50ID0gbnVsbHB0cjsKKyAgICAgICAgcGFyZW50LT5sZWZ0ID0gbV9y
b290OworICAgICAgICBwYXJlbnQtPnJpZ2h0ID0gcmlnaHQ7CisgICAgICAgIHBhcmVudC0+bGFy
Z2VzdEZyZWUgPSBtX3Jvb3QtPnJlY3Quc2l6ZSgpOworICAgICAgICByaWdodC0+cGFyZW50ID0g
cGFyZW50OworICAgICAgICByaWdodC0+bGVmdCA9IG51bGxwdHI7CisgICAgICAgIHJpZ2h0LT5y
aWdodCA9IG51bGxwdHI7CisgICAgICAgIHJpZ2h0LT5sYXJnZXN0RnJlZSA9IG1fcm9vdC0+cmVj
dC5zaXplKCk7CisgICAgICAgIGlmIChzcGxpdCA9PSBTcGxpdE9uWCkgeworICAgICAgICAgICAg
cGFyZW50LT5yZWN0ID0gSW50UmVjdChtX3Jvb3QtPnJlY3QueCgpLCBtX3Jvb3QtPnJlY3QueSgp
LAorICAgICAgICAgICAgICAgIG1fcm9vdC0+cmVjdC53aWR0aCgpICogMiwgbV9yb290LT5yZWN0
LmhlaWdodCgpKTsKKyAgICAgICAgICAgIHJpZ2h0LT5yZWN0ID0gSW50UmVjdChtX3Jvb3QtPnJl
Y3QueCgpICsgbV9yb290LT5yZWN0LndpZHRoKCksIG1fcm9vdC0+cmVjdC55KCksCisgICAgICAg
ICAgICAgICAgbV9yb290LT5yZWN0LndpZHRoKCksIG1fcm9vdC0+cmVjdC5oZWlnaHQoKSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwYXJlbnQtPnJlY3QgPSBJbnRSZWN0KG1fcm9v
dC0+cmVjdC54KCksIG1fcm9vdC0+cmVjdC55KCksCisgICAgICAgICAgICAgICAgbV9yb290LT5y
ZWN0LndpZHRoKCksIG1fcm9vdC0+cmVjdC5oZWlnaHQoKSAqIDIpOworICAgICAgICAgICAgcmln
aHQtPnJlY3QgPSBJbnRSZWN0KG1fcm9vdC0+cmVjdC54KCksIG1fcm9vdC0+cmVjdC55KCkgKyBt
X3Jvb3QtPnJlY3Qud2lkdGgoKSwKKyAgICAgICAgICAgICAgICBtX3Jvb3QtPnJlY3Qud2lkdGgo
KSwgbV9yb290LT5yZWN0LmhlaWdodCgpKTsKKyAgICAgICAgfQorICAgICAgICBzcGxpdCA9IChz
cGxpdCA9PSBTcGxpdE9uWCA/IFNwbGl0T25ZIDogU3BsaXRPblgpOworICAgICAgICBtX3Jvb3Qg
PSBwYXJlbnQ7CisgICAgfQorICAgIHVwZGF0ZUxhcmdlc3RGcmVlKG9sZFJvb3QpOworfQorCitz
dGF0aWMgaW5saW5lIGJvb2wgZml0c1dpdGhpbihjb25zdCBJbnRTaXplJiBzaXplMSwgY29uc3Qg
SW50U2l6ZSYgc2l6ZTIpCit7CisgICAgcmV0dXJuIHNpemUxLndpZHRoKCkgPD0gc2l6ZTIud2lk
dGgoKSAmJiBzaXplMS5oZWlnaHQoKSA8PSBzaXplMi5oZWlnaHQoKTsKK30KKworSW50UmVjdCBH
ZW5lcmFsQXJlYUFsbG9jYXRvcjo6YWxsb2NhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAg
ICBJbnRTaXplIHJvdW5kZWQgPSByb3VuZEFsbG9jYXRpb24oc2l6ZSk7CisgICAgcm91bmRlZCA9
IG5leHRQb3dlck9mVHdvKHJvdW5kZWQpOworICAgIGlmIChyb3VuZGVkLndpZHRoKCkgPD0gMCB8
fCByb3VuZGVkLndpZHRoKCkgPiBtX3NpemUud2lkdGgoKQorICAgICAgICB8fCByb3VuZGVkLmhl
aWdodCgpIDw9IDAgfHwgcm91bmRlZC5oZWlnaHQoKSA+IG1fc2l6ZS5oZWlnaHQoKSkKKyAgICAg
ICAgcmV0dXJuIEludFJlY3QoKTsKKworICAgIEludFBvaW50IHBvaW50ID0gYWxsb2NhdGVGcm9t
Tm9kZShyb3VuZGVkLCBtX3Jvb3QpOworICAgIGlmIChwb2ludC54KCkgPj0gMCkKKyAgICAgICAg
cmV0dXJuIEludFJlY3QocG9pbnQsIHNpemUpOworICAgIHJldHVybiBJbnRSZWN0KCk7Cit9CisK
K0ludFBvaW50IEdlbmVyYWxBcmVhQWxsb2NhdG9yOjphbGxvY2F0ZUZyb21Ob2RlKGNvbnN0IElu
dFNpemUmIHNpemUsIE5vZGUqIG5vZGUpCit7CisgICAgLy8gRmluZCB0aGUgYmVzdCBub2RlIHRv
IGluc2VydCBpbnRvLCB3aGljaCBzaG91bGQgYmUKKyAgICAvLyBhIG5vZGUgd2l0aCB0aGUgbGVh
c3QgYW1vdW50IG9mIHVudXNlZCBzcGFjZSB0aGF0IGlzCisgICAgLy8gYmlnIGVub3VnaCB0byBj
b250YWluIHRoZSByZXF1ZXN0ZWQgc2l6ZS4KKyAgICB3aGlsZSAobm9kZSkgeworICAgICAgICAv
LyBHbyBkb3duIGEgbGV2ZWwgYW5kIGRldGVybWluZSBpZiB0aGUgbGVmdCBvciByaWdodAorICAg
ICAgICAvLyBzdWItdHJlZSBjb250YWlucyB0aGUgYmVzdCBjaGFuY2Ugb2YgYWxsb2NhdGlvbi4K
KyAgICAgICAgTm9kZSogbGVmdCA9IG5vZGUtPmxlZnQ7CisgICAgICAgIE5vZGUqIHJpZ2h0ID0g
bm9kZS0+cmlnaHQ7CisgICAgICAgIGlmIChsZWZ0ICYmIGZpdHNXaXRoaW4oc2l6ZSwgbGVmdC0+
bGFyZ2VzdEZyZWUpKSB7CisgICAgICAgICAgICBpZiAocmlnaHQgJiYgZml0c1dpdGhpbihzaXpl
LCByaWdodC0+bGFyZ2VzdEZyZWUpKSB7CisgICAgICAgICAgICAgICAgaWYgKGxlZnQtPmxhcmdl
c3RGcmVlLndpZHRoKCkgPCByaWdodC0+bGFyZ2VzdEZyZWUud2lkdGgoKQorICAgICAgICAgICAg
ICAgICAgICB8fCBsZWZ0LT5sYXJnZXN0RnJlZS5oZWlnaHQoKSA8IHJpZ2h0LT5sYXJnZXN0RnJl
ZS5oZWlnaHQoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbGFyZ2VzdEZyZWUgdmFs
dWVzIG1heSBiZSBhIGxpdHRsZSBvdmVyc2l6ZWQsCisgICAgICAgICAgICAgICAgICAgIC8vIHNv
IHRyeSB0aGUgbGVmdCBzdWItdHJlZSBhbmQgdGhlbiB0aGUgcmlnaHQgc3ViLXRyZWUuCisgICAg
ICAgICAgICAgICAgICAgIEludFBvaW50IHBvaW50ID0gYWxsb2NhdGVGcm9tTm9kZShzaXplLCBs
ZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHBvaW50LngoKSA+PSAwKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHBvaW50OworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
YWxsb2NhdGVGcm9tTm9kZShzaXplLCByaWdodCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIG5vZGUgPSByaWdodDsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ICAgIG5vZGUgPSBsZWZ0OworICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0ICYmIGZpdHNXaXRoaW4o
c2l6ZSwgcmlnaHQtPmxhcmdlc3RGcmVlKSkKKyAgICAgICAgICAgIG5vZGUgPSByaWdodDsKKyAg
ICAgICAgZWxzZSBpZiAobGVmdCB8fCByaWdodCkgeworICAgICAgICAgICAgLy8gTmVpdGhlciBz
dWItbm9kZSBoYXMgZW5vdWdoIHNwYWNlIHRvIGFsbG9jYXRlIGZyb20uCisgICAgICAgICAgICBy
ZXR1cm4gSW50UG9pbnQoLTEsIC0xKTsKKyAgICAgICAgfSBlbHNlIGlmIChmaXRzV2l0aGluKHNp
emUsIG5vZGUtPmxhcmdlc3RGcmVlKSkgeworICAgICAgICAgICAgLy8gRG8gd2UgbmVlZCB0byBz
cGxpdCB0aGlzIG5vZGUgaW50byBzbWFsbGVyIHBpZWNlcz8KKyAgICAgICAgICAgIFNwbGl0IHNw
bGl0OworICAgICAgICAgICAgaWYgKGZpdHNXaXRoaW4oSW50U2l6ZShzaXplLndpZHRoKCkgKiAy
LCBzaXplLmhlaWdodCgpICogMiksIG5vZGUtPmxhcmdlc3RGcmVlKSkgeworICAgICAgICAgICAg
ICAgIC8vIFNwbGl0IGluIGVpdGhlciBkaXJlY3Rpb246IGNob29zZSB0aGUgaW52ZXJzZSBvZgor
ICAgICAgICAgICAgICAgIC8vIHRoZSBwYXJlbnQgbm9kZSdzIHNwbGl0IGRpcmVjdGlvbiB0byB0
cnkgdG8gYmFsYW5jZQorICAgICAgICAgICAgICAgIC8vIG91dCB0aGUgd2FzdGVkIHNwYWNlIGFz
IGZ1cnRoZXIgc3ViZGl2aXNpb25zIGhhcHBlbi4KKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+
cGFyZW50CisgICAgICAgICAgICAgICAgICAgICYmIG5vZGUtPnBhcmVudC0+bGVmdC0+cmVjdC54
KCkgPT0gbm9kZS0+cGFyZW50LT5yaWdodC0+cmVjdC54KCkpCisgICAgICAgICAgICAgICAgICAg
IHNwbGl0ID0gU3BsaXRPblg7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+cGFyZW50
KQorICAgICAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOworICAgICAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUtPnJlY3Qud2lkdGgoKSA+PSBub2RlLT5yZWN0LmhlaWdodCgpKQorICAg
ICAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25YOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWTsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoZml0c1dpdGhpbihJbnRTaXplKHNpemUud2lkdGgoKSAqIDIsIHNpemUuaGVpZ2h0KCkp
LCBub2RlLT5sYXJnZXN0RnJlZSkpIHsKKyAgICAgICAgICAgICAgICAvLyBTcGxpdCBhbG9uZyB0
aGUgWCBkaXJlY3Rpb24uCisgICAgICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWDsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoZml0c1dpdGhpbihJbnRTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSAqIDIpLCBub2RlLT5sYXJnZXN0RnJlZSkpIHsKKyAgICAgICAgICAgICAgICAvLyBT
cGxpdCBhbG9uZyB0aGUgWSBkaXJlY3Rpb24uCisgICAgICAgICAgICAgICAgc3BsaXQgPSBTcGxp
dE9uWTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gQ2Fubm90IHNw
bGl0IGZ1cnRoZXIgLSBhbGxvY2F0ZSB0aGlzIG5vZGUuCisgICAgICAgICAgICAgICAgbm9kZS0+
bGFyZ2VzdEZyZWUgPSBJbnRTaXplKDAsIDApOworICAgICAgICAgICAgICAgIHVwZGF0ZUxhcmdl
c3RGcmVlKG5vZGUpOworICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5yZWN0LmxvY2F0aW9u
KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNwbGl0IHRoZSBub2RlLCB0aGVu
IGdvIGFyb3VuZCBhZ2FpbiB1c2luZyB0aGUgbGVmdCBzdWItdHJlZS4KKyAgICAgICAgICAgIG5v
ZGUgPSBzcGxpdE5vZGUobm9kZSwgc3BsaXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgLy8gQ2Fubm90IHBvc3NpYmx5IGZpdCBpbnRvIHRoaXMgbm9kZS4KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBJbnRQb2ludCgtMSwgLTEpOworfQor
CitHZW5lcmFsQXJlYUFsbG9jYXRvcjo6Tm9kZSogR2VuZXJhbEFyZWFBbGxvY2F0b3I6OnNwbGl0
Tm9kZShOb2RlKiBub2RlLCBTcGxpdCBzcGxpdCkKK3sKKyAgICBOb2RlKiBsZWZ0ID0gbmV3IE5v
ZGUoKTsKKyAgICBsZWZ0LT5wYXJlbnQgPSBub2RlOworICAgIE5vZGUqIHJpZ2h0ID0gbmV3IE5v
ZGUoKTsKKyAgICByaWdodC0+cGFyZW50ID0gbm9kZTsKKyAgICBub2RlLT5sZWZ0ID0gbGVmdDsK
KyAgICBub2RlLT5yaWdodCA9IHJpZ2h0OworICAgIG1fbm9kZUNvdW50ICs9IDI7CisKKyAgICBp
ZiAoc3BsaXQgPT0gU3BsaXRPblgpIHsKKyAgICAgICAgbGVmdC0+cmVjdCA9IEludFJlY3Qobm9k
ZS0+cmVjdC54KCksIG5vZGUtPnJlY3QueSgpLAorICAgICAgICAgICAgbm9kZS0+cmVjdC53aWR0
aCgpIC8gMiwgbm9kZS0+cmVjdC5oZWlnaHQoKSk7CisgICAgICAgIHJpZ2h0LT5yZWN0ID0gSW50
UmVjdChsZWZ0LT5yZWN0Lm1heFgoKSwgbm9kZS0+cmVjdC55KCksCisgICAgICAgICAgICBub2Rl
LT5yZWN0LndpZHRoKCkgLyAyLCBub2RlLT5yZWN0LmhlaWdodCgpKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBsZWZ0LT5yZWN0ID0gSW50UmVjdChub2RlLT5yZWN0LngoKSwgbm9kZS0+cmVjdC55
KCksCisgICAgICAgICAgICBub2RlLT5yZWN0LndpZHRoKCksIG5vZGUtPnJlY3QuaGVpZ2h0KCkg
LyAyKTsKKyAgICAgICAgcmlnaHQtPnJlY3QgPSBJbnRSZWN0KG5vZGUtPnJlY3QueCgpLCBsZWZ0
LT5yZWN0Lm1heFkoKSwKKyAgICAgICAgICAgIG5vZGUtPnJlY3Qud2lkdGgoKSwgbm9kZS0+cmVj
dC5oZWlnaHQoKSAvIDIpOworICAgIH0KKworICAgIGxlZnQtPmxhcmdlc3RGcmVlID0gbGVmdC0+
cmVjdC5zaXplKCk7CisgICAgcmlnaHQtPmxhcmdlc3RGcmVlID0gcmlnaHQtPnJlY3Quc2l6ZSgp
OworICAgIG5vZGUtPmxhcmdlc3RGcmVlID0gcmlnaHQtPmxhcmdlc3RGcmVlOworICAgIHJldHVy
biBsZWZ0OworfQorCit2b2lkIEdlbmVyYWxBcmVhQWxsb2NhdG9yOjp1cGRhdGVMYXJnZXN0RnJl
ZShOb2RlKiBub2RlKQoreworICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnBhcmVudCkpIHsKKyAg
ICAgICAgbm9kZS0+bGFyZ2VzdEZyZWUgPSBJbnRTaXplKAorICAgICAgICAgICAgc3RkOjptYXgo
bm9kZS0+bGVmdC0+bGFyZ2VzdEZyZWUud2lkdGgoKSwgbm9kZS0+cmlnaHQtPmxhcmdlc3RGcmVl
LndpZHRoKCkpLAorICAgICAgICAgICAgc3RkOjptYXgobm9kZS0+bGVmdC0+bGFyZ2VzdEZyZWUu
aGVpZ2h0KCksIG5vZGUtPnJpZ2h0LT5sYXJnZXN0RnJlZS5oZWlnaHQoKSkKKyAgICAgICAgICAg
ICk7CisgICAgfQorfQorCit2b2lkIEdlbmVyYWxBcmVhQWxsb2NhdG9yOjpyZWxlYXNlKGNvbnN0
IEludFJlY3QmIHJlY3QpCit7CisgICAgLy8gTG9jYXRlIHRoZSBub2RlIHRoYXQgY29udGFpbnMg
dGhlIGFsbG9jYXRlZCByZWdpb24uCisgICAgTm9kZSogbm9kZSA9IG1fcm9vdDsKKyAgICBJbnRQ
b2ludCBwb2ludCA9IHJlY3QubG9jYXRpb24oKTsKKyAgICB3aGlsZSAobm9kZSkgeworICAgICAg
ICBpZiAobm9kZS0+bGVmdCAmJiBub2RlLT5sZWZ0LT5yZWN0LmNvbnRhaW5zKHBvaW50KSkKKyAg
ICAgICAgICAgIG5vZGUgPSBub2RlLT5sZWZ0OworICAgICAgICBlbHNlIGlmIChub2RlLT5yaWdo
dCAmJiBub2RlLT5yaWdodC0+cmVjdC5jb250YWlucyhwb2ludCkpCisgICAgICAgICAgICBub2Rl
ID0gbm9kZS0+cmlnaHQ7CisgICAgICAgIGVsc2UgaWYgKG5vZGUtPnJlY3QuY29udGFpbnMocG9p
bnQpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVy
bjsgLy8gUG9pbnQgaXMgY29tcGxldGVseSBvdXRzaWRlIHRoZSB0cmVlLgorICAgIH0KKyAgICBp
ZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIE1hcmsgdGhlIG5vZGUgYXMgZnJl
ZSBhbmQgdGhlbiB3b3JrIHVwd2FyZHMgdGhyb3VnaCB0aGUgdHJlZQorICAgIC8vIHJlY29tYmlu
aW5nIGFuZCBkZWxldGluZyBub2RlcyB1bnRpbCB3ZSByZWFjaCBhIHNpYmxpbmcKKyAgICAvLyB0
aGF0IGlzIHN0aWxsIGFsbG9jYXRlZC4KKyAgICBub2RlLT5sYXJnZXN0RnJlZSA9IG5vZGUtPnJl
Y3Quc2l6ZSgpOworICAgIHdoaWxlIChub2RlLT5wYXJlbnQpIHsKKyAgICAgICAgaWYgKG5vZGUt
PnBhcmVudC0+bGVmdCA9PSBub2RlKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+cGFyZW50LT5y
aWdodC0+bGFyZ2VzdEZyZWUgIT0gbm9kZS0+cGFyZW50LT5yaWdodC0+cmVjdC5zaXplKCkpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAo
bm9kZS0+cGFyZW50LT5sZWZ0LT5sYXJnZXN0RnJlZSAhPSBub2RlLT5wYXJlbnQtPmxlZnQtPnJl
Y3Quc2l6ZSgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG5v
ZGUgPSBub2RlLT5wYXJlbnQ7CisgICAgICAgIGZyZWVOb2RlKG5vZGUtPmxlZnQpOworICAgICAg
ICBmcmVlTm9kZShub2RlLT5yaWdodCk7CisgICAgICAgIG1fbm9kZUNvdW50IC09IDI7CisgICAg
ICAgIG5vZGUtPmxlZnQgPSBudWxscHRyOworICAgICAgICBub2RlLT5yaWdodCA9IG51bGxwdHI7
CisgICAgICAgIG5vZGUtPmxhcmdlc3RGcmVlID0gbm9kZS0+cmVjdC5zaXplKCk7CisgICAgfQor
CisgICAgLy8gTWFrZSB0aGUgcmVzdCBvZiBvdXIgYW5jZXN0b3JzIGhhdmUgdGhlIGNvcnJlY3Qg
Imxhcmdlc3QgZnJlZSBzaXplIi4KKyAgICB1cGRhdGVMYXJnZXN0RnJlZShub2RlKTsKK30KKwor
aW50IEdlbmVyYWxBcmVhQWxsb2NhdG9yOjpvdmVyaGVhZCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fbm9kZUNvdW50ICogc2l6ZW9mKE5vZGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9BcmVhQWxsb2Nh
dG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQXJlYUFsbG9jYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmZGM4Zjc2NWVjNGJjMGYxMzQzYjRlOWY2
YTJmYjQ4ZDM5OTNjMDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQXJlYUFsbG9jYXRvci5oCkBAIC0wLDAgKzEs
MTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorCisjaW5jbHVkZSAiSW50
UG9pbnQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2lubGluZSBpbnQgbmV4dFBvd2VyT2ZUd28oaW50IG51bWJl
cikKK3sKKyAgICAvLyBUaGlzIGlzIGEgZmFzdCB0cmljayB0byBnZXQgbmV4dFBvd2VyT2ZUd28g
Zm9yIGFuIGludGVnZXIuCisgICAgLS1udW1iZXI7CisgICAgbnVtYmVyIHw9IG51bWJlciA+PiAx
OworICAgIG51bWJlciB8PSBudW1iZXIgPj4gMjsKKyAgICBudW1iZXIgfD0gbnVtYmVyID4+IDQ7
CisgICAgbnVtYmVyIHw9IG51bWJlciA+PiA4OworICAgIG51bWJlciB8PSBudW1iZXIgPj4gMTY7
CisgICAgbnVtYmVyKys7CisgICAgcmV0dXJuIG51bWJlcjsKK30KKworaW5saW5lIEludFNpemUg
bmV4dFBvd2VyT2ZUd28oY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICByZXR1cm4gSW50U2l6
ZShuZXh0UG93ZXJPZlR3byhzaXplLndpZHRoKCkpLCBuZXh0UG93ZXJPZlR3byhzaXplLmhlaWdo
dCgpKSk7Cit9CisKK2NsYXNzIEFyZWFBbGxvY2F0b3IgeworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IEFyZWFBbGxvY2F0b3IoY29uc3QgSW50U2l6
ZSYpOworICAgIHZpcnR1YWwgfkFyZWFBbGxvY2F0b3IoKTsKKworICAgIEludFNpemUgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCisgICAgSW50U2l6ZSBtaW5pbXVtQWxsb2NhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fbWluQWxsb2M7IH0KKyAgICB2b2lkIHNldE1pbmltdW1BbGxv
Y2F0aW9uKGNvbnN0IEludFNpemUmIHNpemUpIHsgbV9taW5BbGxvYyA9IHNpemU7IH0KKworICAg
IEludFNpemUgbWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW47IH0KKyAgICB2b2lkIHNl
dE1hcmdpbihjb25zdCBJbnRTaXplICZtYXJnaW4pIHsgbV9tYXJnaW4gPSBtYXJnaW47IH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBleHBhbmQoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgZXhwYW5k
QnkoY29uc3QgSW50U2l6ZSYpOworCisgICAgdmlydHVhbCBJbnRSZWN0IGFsbG9jYXRlKGNvbnN0
IEludFNpemUmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbGVhc2UoY29uc3QgSW50UmVjdCYp
OworCisgICAgdmlydHVhbCBpbnQgb3ZlcmhlYWQoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAg
IEludFNpemUgbV9zaXplOworICAgIEludFNpemUgbV9taW5BbGxvYzsKKyAgICBJbnRTaXplIG1f
bWFyZ2luOworCisgICAgSW50U2l6ZSByb3VuZEFsbG9jYXRpb24oY29uc3QgSW50U2l6ZSYpIGNv
bnN0OworfTsKKworY2xhc3MgR2VuZXJhbEFyZWFBbGxvY2F0b3IgZmluYWwgOiBwdWJsaWMgQXJl
YUFsbG9jYXRvciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
ZXhwbGljaXQgR2VuZXJhbEFyZWFBbGxvY2F0b3IoY29uc3QgSW50U2l6ZSYpOworICAgIHZpcnR1
YWwgfkdlbmVyYWxBcmVhQWxsb2NhdG9yKCk7CisKKyAgICB2b2lkIGV4cGFuZChjb25zdCBJbnRT
aXplJikgb3ZlcnJpZGU7CisgICAgSW50UmVjdCBhbGxvY2F0ZShjb25zdCBJbnRTaXplJikgb3Zl
cnJpZGU7CisgICAgdm9pZCByZWxlYXNlKGNvbnN0IEludFJlY3QmKSBvdmVycmlkZTsKKyAgICBp
bnQgb3ZlcmhlYWQoKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBlbnVtIFNwbGl0
IHsgU3BsaXRPblgsIFNwbGl0T25ZIH07CisKKyAgICBzdHJ1Y3QgTm9kZSB7CisgICAgICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgSW50UmVjdCByZWN0
OworICAgICAgICBJbnRTaXplIGxhcmdlc3RGcmVlOworICAgICAgICBOb2RlKiBwYXJlbnQgeyBu
dWxscHRyIH07CisgICAgICAgIE5vZGUqIGxlZnQgeyBudWxscHRyIH07CisgICAgICAgIE5vZGUq
IHJpZ2h0IHsgbnVsbHB0ciB9OworICAgIH07CisKKyAgICBOb2RlKiBtX3Jvb3Q7CisgICAgaW50
IG1fbm9kZUNvdW50OworCisgICAgc3RhdGljIHZvaWQgZnJlZU5vZGUoTm9kZSopOworICAgIElu
dFBvaW50IGFsbG9jYXRlRnJvbU5vZGUoY29uc3QgSW50U2l6ZSYsIE5vZGUqKTsKKyAgICBOb2Rl
KiBzcGxpdE5vZGUoTm9kZSosIFNwbGl0KTsKKyAgICBzdGF0aWMgdm9pZCB1cGRhdGVMYXJnZXN0
RnJlZShOb2RlKik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFz
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4zMWM1NjgyYmVkMjViYjBhYzMwMDQ1ZGExM2UzNzY3MjAyNjkzZjJk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmNwcApAQCAtMCwwICsxLDc0IEBACisvKgorIENv
cHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykKKyBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4KKworIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlVwZGF0ZUF0bGFz
LmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJDb29yZGlu
YXRlZEdyYXBoaWNzU3RhdGUuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworVXBkYXRlQXRsYXM6OlVwZGF0ZUF0bGFzKENsaWVudCYgY2xpZW50LCBjb25z
dCBJbnRTaXplJiBzaXplLCBOaWNvc2lhOjpCdWZmZXI6OkZsYWdzIGZsYWdzKQorICAgIDogbV9j
bGllbnQoY2xpZW50KQorICAgICwgbV9idWZmZXIoTmljb3NpYTo6QnVmZmVyOjpjcmVhdGUoc2l6
ZSwgZmxhZ3MpKQoreworICAgIHN0YXRpYyBJRCBzX25leHRJRCB7IDAgfTsKKyAgICBtX2lkID0g
KytzX25leHRJRDsKKworICAgIG1fY2xpZW50LmNyZWF0ZVVwZGF0ZUF0bGFzKG1faWQsIG1fYnVm
ZmVyLmNvcHlSZWYoKSk7Cit9CisKK1VwZGF0ZUF0bGFzOjp+VXBkYXRlQXRsYXMoKQoreworICAg
IG1fY2xpZW50LnJlbW92ZVVwZGF0ZUF0bGFzKG1faWQpOworfQorCit2b2lkIFVwZGF0ZUF0bGFz
OjpidWlsZExheW91dElmTmVlZGVkKCkKK3sKKyAgICBpZiAobV9hcmVhQWxsb2NhdG9yKQorICAg
ICAgICByZXR1cm47CisgICAgbV9hcmVhQWxsb2NhdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxHZW5l
cmFsQXJlYUFsbG9jYXRvcj4oc2l6ZSgpKTsKKyAgICBtX2FyZWFBbGxvY2F0b3ItPnNldE1pbmlt
dW1BbGxvY2F0aW9uKEludFNpemUoMzIsIDMyKSk7Cit9CisKK3ZvaWQgVXBkYXRlQXRsYXM6OmRp
ZFN3YXBCdWZmZXJzKCkKK3sKKyAgICBtX2FyZWFBbGxvY2F0b3IgPSBudWxscHRyOworfQorCitS
ZWZQdHI8Tmljb3NpYTo6QnVmZmVyPiBVcGRhdGVBdGxhczo6Z2V0Q29vcmRpbmF0ZWRCdWZmZXIo
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgdWludDMyX3QmIGF0bGFzSUQsIEludFJlY3QmIGFsbG9jYXRl
ZFJlY3QpCit7CisgICAgbV9pbmFjdGl2aXR5SW5TZWNvbmRzID0gMDsKKyAgICBidWlsZExheW91
dElmTmVlZGVkKCk7CisgICAgYWxsb2NhdGVkUmVjdCA9IG1fYXJlYUFsbG9jYXRvci0+YWxsb2Nh
dGUoc2l6ZSk7CisKKyAgICBpZiAoYWxsb2NhdGVkUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgYXRsYXNJRCA9IG1faWQ7CisgICAgcmV0dXJuIG1fYnVmZmVy
LmNvcHlSZWYoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iMmIyNjY3Y2I4MGM5MjIyOGU4MmVjYTFhODE4NGQ2MTM3ODM2OGFlCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyBDb3B5cmlnaHQg
KEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisg
Q29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuCisKKyBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisKKyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQXJlYUFsbG9jYXRvci5oIgorI2luY2x1
ZGUgIk5pY29zaWFCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW50
UmVjdDsKK2NsYXNzIEludFNpemU7CisKK2NsYXNzIFVwZGF0ZUF0bGFzIHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShVcGRhdGVBdGxhcyk7
CitwdWJsaWM6CisgICAgdXNpbmcgSUQgPSB1aW50MzJfdDsKKworICAgIGNsYXNzIENsaWVudCB7
CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXMoSUQs
IFJlZjxOaWNvc2lhOjpCdWZmZXI+JiYpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92
ZVVwZGF0ZUF0bGFzKElEKSA9IDA7CisgICAgfTsKKworICAgIFVwZGF0ZUF0bGFzKENsaWVudCYs
IGNvbnN0IEludFNpemUmLCBOaWNvc2lhOjpCdWZmZXI6OkZsYWdzKTsKKyAgICB+VXBkYXRlQXRs
YXMoKTsKKworICAgIGNvbnN0IEludFNpemUmIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZl
ci0+c2l6ZSgpOyB9CisKKyAgICBSZWZQdHI8Tmljb3NpYTo6QnVmZmVyPiBnZXRDb29yZGluYXRl
ZEJ1ZmZlcihjb25zdCBJbnRTaXplJiwgdWludDMyX3QmLCBJbnRSZWN0Jik7CisgICAgdm9pZCBk
aWRTd2FwQnVmZmVycygpOworICAgIGJvb2wgc3VwcG9ydHNBbHBoYSgpIGNvbnN0IHsgcmV0dXJu
IG1fYnVmZmVyLT5zdXBwb3J0c0FscGhhKCk7IH0KKworICAgIHZvaWQgYWRkVGltZUluYWN0aXZl
KGRvdWJsZSBzZWNvbmRzKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc0luVXNlKCkpOworICAg
ICAgICBtX2luYWN0aXZpdHlJblNlY29uZHMgKz0gc2Vjb25kczsKKyAgICB9CisgICAgYm9vbCBp
c0luYWN0aXZlKCkgY29uc3QKKyAgICB7CisgICAgICAgIGNvbnN0IGRvdWJsZSBpbmFjdGl2ZVNl
Y29uZHNUb2xlcmFuY2UgPSAzOworICAgICAgICByZXR1cm4gbV9pbmFjdGl2aXR5SW5TZWNvbmRz
ID4gaW5hY3RpdmVTZWNvbmRzVG9sZXJhbmNlOworICAgIH0KKyAgICBib29sIGlzSW5Vc2UoKSBj
b25zdCB7IHJldHVybiAhIW1fYXJlYUFsbG9jYXRvcjsgfQorCitwcml2YXRlOgorICAgIHZvaWQg
YnVpbGRMYXlvdXRJZk5lZWRlZCgpOworCisgICAgSUQgbV9pZCB7IDAgfTsKKyAgICBDbGllbnQm
IG1fY2xpZW50OworICAgIHN0ZDo6dW5pcXVlX3B0cjxHZW5lcmFsQXJlYUFsbG9jYXRvcj4gbV9h
cmVhQWxsb2NhdG9yOworICAgIFJlZjxOaWNvc2lhOjpCdWZmZXI+IG1fYnVmZmVyOworICAgIGRv
dWJsZSBtX2luYWN0aXZpdHlJblNlY29uZHMgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtR1RLLmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0Zm9y
bUdUSy5jbWFrZQppbmRleCBjYTE4ZTE1NWQxNjgwM2ZlYjUyYTk1Y2MzNzk1OTEzYTU1Y2RhODVi
Li4yYTU1ZTRjOGNiYzdiZTU4NzEwYmMyZTA5NWNlZjlhYTdjOTIyZTA3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxhdGZv
cm1HVEsuY21ha2UKQEAgLTM4NiwxMSArMzg2LDkgQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJD
RVMKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWREcmF3aW5nQXJlYS5jcHAKICAg
ICBXZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWRTdXJmYWNlLmNwcAogCi0gICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRvci5jcHAKICAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5h
dG9yLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3Jk
aW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKLSAgICBXZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5jcHAKIAogICAg
IFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm1XUEUuY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV1BF
LmNtYWtlCmluZGV4IDJlMDkzY2Y2MGViMGE5MmViNWY5NTU3YTIyOGViZGFkMDFjNWI0YmIuLjZi
YTIzZjdhM2RkYTQ0NjYxZjk5ZTk4YThmZjU0ODkzNDkwMWZhN2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm1XUEUuY21ha2UKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdQ
RS5jbWFrZQpAQCAtMjYwLDExICsyNjAsOSBAQCBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwog
ICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcAogICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZFN1cmZhY2UuY3BwCiAKLSAgICBXZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9BcmVhQWxsb2NhdG9yLmNwcAogICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3Iu
Y3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0
ZWRMYXllclRyZWVIb3N0LmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAotICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1VwZGF0ZUF0bGFzLmNwcAogCiAgICAgV2Vi
UHJvY2Vzcy9XZWJQYWdlL2dzdHJlYW1lci9XZWJQYWdlR1N0cmVhbWVyLmNwcAogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlIGIvU291cmNlL1dlYktpdC9QbGF0
Zm9ybVdpbi5jbWFrZQppbmRleCA0ODc0Y2IwYmMwNDZlYzE2MWM1MWZmZDFkZWQ2ZjMyMTFiZjMx
ZjBiLi4yMTE5MjAwOTI3MTYyYjE5Yzg5MDk5Mjg3YmIwNGU1OTFhZmYyY2UwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm1XaW4uY21ha2UKQEAgLTQ2LDExICs0Niw5IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VS
Q0VTCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkU3VyZmFjZS5jcHAKICAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWFJbXBsLmNwcAogCi0gICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRvci5jcHAKICAgICBXZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmNw
cAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Nvb3JkaW5hdGVk
TGF5ZXJUcmVlSG9zdC5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFw
aGljcy9UaHJlYWRlZENvb3JkaW5hdGVkTGF5ZXJUcmVlSG9zdC5jcHAKLSAgICBXZWJQcm9jZXNz
L1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5jcHAKIAogICAgIFdlYlBy
b2Nlc3MvV2ViUGFnZS93aW4vV2ViSW5zcGVjdG9yVUlXaW4uY3BwCiAgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL3dpbi9XZWJQYWdlV2luLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9BcmVhQWxsb2NhdG9yLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFs
bG9jYXRvci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5ZWNlMTI5MDc0ZDU0
NWU3YzNkNGMxYTk2NWJjYWI3ZjUxNmVlZmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRp
bmF0ZWRHcmFwaGljcy9BcmVhQWxsb2NhdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMyOCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVy
c2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwot
ICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJBcmVhQWxsb2NhdG9yLmgiCi0KLSNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3Bh
Y2UgV2ViS2l0IHsKLQotQXJlYUFsbG9jYXRvcjo6QXJlYUFsbG9jYXRvcihjb25zdCBJbnRTaXpl
JiBzaXplKQotICAgIDogbV9zaXplKHNpemUpCi0gICAgLCBtX21pbkFsbG9jKDEsIDEpCi0gICAg
LCBtX21hcmdpbigwLCAwKQotewotfQotCi1BcmVhQWxsb2NhdG9yOjp+QXJlYUFsbG9jYXRvcigp
Ci17Ci19Ci0KLXZvaWQgQXJlYUFsbG9jYXRvcjo6ZXhwYW5kKGNvbnN0IEludFNpemUmIHNpemUp
Ci17Ci0gICAgbV9zaXplID0gbV9zaXplLmV4cGFuZGVkVG8oc2l6ZSk7Ci19Ci0KLXZvaWQgQXJl
YUFsbG9jYXRvcjo6ZXhwYW5kQnkoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBtX3NpemUg
Kz0gc2l6ZTsKLX0KLQotdm9pZCBBcmVhQWxsb2NhdG9yOjpyZWxlYXNlKGNvbnN0IEludFJlY3Qm
KQotewotfQotCi1pbnQgQXJlYUFsbG9jYXRvcjo6b3ZlcmhlYWQoKSBjb25zdAotewotICAgIHJl
dHVybiAwOwotfQotCi1JbnRTaXplIEFyZWFBbGxvY2F0b3I6OnJvdW5kQWxsb2NhdGlvbihjb25z
dCBJbnRTaXplJiBzaXplKSBjb25zdAotewotICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgoKSAr
IG1fbWFyZ2luLndpZHRoKCk7Ci0gICAgaW50IGhlaWdodCA9IHNpemUuaGVpZ2h0KCkgKyBtX21h
cmdpbi5oZWlnaHQoKTsKLSAgICBpbnQgZXh0cmEgPSB3aWR0aCAlIG1fbWluQWxsb2Mud2lkdGgo
KTsKLSAgICBpZiAoZXh0cmEpCi0gICAgICAgIHdpZHRoICs9IG1fbWluQWxsb2Mud2lkdGgoKSAt
IGV4dHJhOwotICAgIGV4dHJhID0gaGVpZ2h0ICUgbV9taW5BbGxvYy5oZWlnaHQoKTsKLSAgICBp
ZiAoZXh0cmEpCi0gICAgICAgIGhlaWdodCArPSBtX21pbkFsbG9jLmhlaWdodCgpIC0gZXh0cmE7
Ci0KLSAgICByZXR1cm4gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLX0KLQotR2VuZXJhbEFyZWFB
bGxvY2F0b3I6OkdlbmVyYWxBcmVhQWxsb2NhdG9yKGNvbnN0IEludFNpemUmIHNpemUpCi0gICAg
OiBBcmVhQWxsb2NhdG9yKG5leHRQb3dlck9mVHdvKHNpemUpKQotewotICAgIG1fcm9vdCA9IG5l
dyBOb2RlKCk7Ci0gICAgbV9yb290LT5yZWN0ID0gSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgo
KSwgbV9zaXplLmhlaWdodCgpKTsKLSAgICBtX3Jvb3QtPmxhcmdlc3RGcmVlID0gbV9zaXplOwot
ICAgIG1fbm9kZUNvdW50ID0gMTsKLSAgICBzZXRNaW5pbXVtQWxsb2NhdGlvbihJbnRTaXplKDgs
IDgpKTsKLX0KLQotR2VuZXJhbEFyZWFBbGxvY2F0b3I6On5HZW5lcmFsQXJlYUFsbG9jYXRvcigp
Ci17Ci0gICAgZnJlZU5vZGUobV9yb290KTsKLX0KLQotdm9pZCBHZW5lcmFsQXJlYUFsbG9jYXRv
cjo6ZnJlZU5vZGUoTm9kZSogbm9kZSkKLXsKLSAgICBpZiAobm9kZSkgewotICAgICAgICBmcmVl
Tm9kZShub2RlLT5sZWZ0KTsKLSAgICAgICAgZnJlZU5vZGUobm9kZS0+cmlnaHQpOwotICAgIH0K
LSAgICBkZWxldGUgbm9kZTsKLX0KLQotdm9pZCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6ZXhwYW5k
KGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgQXJlYUFsbG9jYXRvcjo6ZXhwYW5kKG5leHRQ
b3dlck9mVHdvKHNpemUpKTsKLQotICAgIGlmIChtX3Jvb3QtPnJlY3Quc2l6ZSgpID09IG1fc2l6
ZSkKLSAgICAgICAgcmV0dXJuOyAvLyBObyBjaGFuZ2UuCi0KLSAgICBpZiAoIW1fcm9vdC0+bGVm
dCAmJiBtX3Jvb3QtPmxhcmdlc3RGcmVlLndpZHRoKCkgPiAwKSB7Ci0gICAgICAgIC8vIE5vIGFs
bG9jYXRpb25zIGhhdmUgb2NjdXJyZWQsIHNvIGp1c3QgYWRqdXN0IHRoZSByb290IHNpemUuCi0g
ICAgICAgIG1fcm9vdC0+cmVjdCA9IEludFJlY3QoMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6
ZS5oZWlnaHQoKSk7Ci0gICAgICAgIG1fcm9vdC0+bGFyZ2VzdEZyZWUgPSBtX3NpemU7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBBZGQgZXh0cmEgbm9kZXMgYWJvdmUgdGhlIGN1
cnJlbnQgcm9vdCB0byBleHBhbmQgdGhlIHRyZWUuCi0gICAgTm9kZSogb2xkUm9vdCA9IG1fcm9v
dDsKLSAgICBTcGxpdCBzcGxpdDsKLSAgICBpZiAobV9zaXplLndpZHRoKCkgPj0gbV9zaXplLmhl
aWdodCgpKQotICAgICAgICBzcGxpdCA9IFNwbGl0T25YOwotICAgIGVsc2UKLSAgICAgICAgc3Bs
aXQgPSBTcGxpdE9uWTsKLQotICAgIHdoaWxlIChtX3Jvb3QtPnJlY3Quc2l6ZSgpICE9IG1fc2l6
ZSkgewotICAgICAgICBpZiAobV9yb290LT5yZWN0LndpZHRoKCkgPT0gbV9zaXplLndpZHRoKCkp
Ci0gICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOwotICAgICAgICBlbHNlIGlmIChtX3Jvb3Qt
PnJlY3QuaGVpZ2h0KCkgPT0gbV9zaXplLmhlaWdodCgpKQotICAgICAgICAgICAgc3BsaXQgPSBT
cGxpdE9uWDsKLSAgICAgICAgTm9kZSogcGFyZW50ID0gbmV3IE5vZGUoKTsKLSAgICAgICAgTm9k
ZSogcmlnaHQgPSBuZXcgTm9kZSgpOwotICAgICAgICBtX25vZGVDb3VudCArPSAyOwotICAgICAg
ICBtX3Jvb3QtPnBhcmVudCA9IHBhcmVudDsKLSAgICAgICAgcGFyZW50LT5wYXJlbnQgPSBudWxs
cHRyOwotICAgICAgICBwYXJlbnQtPmxlZnQgPSBtX3Jvb3Q7Ci0gICAgICAgIHBhcmVudC0+cmln
aHQgPSByaWdodDsKLSAgICAgICAgcGFyZW50LT5sYXJnZXN0RnJlZSA9IG1fcm9vdC0+cmVjdC5z
aXplKCk7Ci0gICAgICAgIHJpZ2h0LT5wYXJlbnQgPSBwYXJlbnQ7Ci0gICAgICAgIHJpZ2h0LT5s
ZWZ0ID0gbnVsbHB0cjsKLSAgICAgICAgcmlnaHQtPnJpZ2h0ID0gbnVsbHB0cjsKLSAgICAgICAg
cmlnaHQtPmxhcmdlc3RGcmVlID0gbV9yb290LT5yZWN0LnNpemUoKTsKLSAgICAgICAgaWYgKHNw
bGl0ID09IFNwbGl0T25YKSB7Ci0gICAgICAgICAgICBwYXJlbnQtPnJlY3QgPSBJbnRSZWN0KG1f
cm9vdC0+cmVjdC54KCksIG1fcm9vdC0+cmVjdC55KCksCi0gICAgICAgICAgICAgICAgbV9yb290
LT5yZWN0LndpZHRoKCkgKiAyLCBtX3Jvb3QtPnJlY3QuaGVpZ2h0KCkpOwotICAgICAgICAgICAg
cmlnaHQtPnJlY3QgPSBJbnRSZWN0KG1fcm9vdC0+cmVjdC54KCkgKyBtX3Jvb3QtPnJlY3Qud2lk
dGgoKSwgbV9yb290LT5yZWN0LnkoKSwKLSAgICAgICAgICAgICAgICBtX3Jvb3QtPnJlY3Qud2lk
dGgoKSwgbV9yb290LT5yZWN0LmhlaWdodCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIHBhcmVudC0+cmVjdCA9IEludFJlY3QobV9yb290LT5yZWN0LngoKSwgbV9yb290LT5yZWN0
LnkoKSwKLSAgICAgICAgICAgICAgICBtX3Jvb3QtPnJlY3Qud2lkdGgoKSwgbV9yb290LT5yZWN0
LmhlaWdodCgpICogMik7Ci0gICAgICAgICAgICByaWdodC0+cmVjdCA9IEludFJlY3QobV9yb290
LT5yZWN0LngoKSwgbV9yb290LT5yZWN0LnkoKSArIG1fcm9vdC0+cmVjdC53aWR0aCgpLAotICAg
ICAgICAgICAgICAgIG1fcm9vdC0+cmVjdC53aWR0aCgpLCBtX3Jvb3QtPnJlY3QuaGVpZ2h0KCkp
OwotICAgICAgICB9Ci0gICAgICAgIHNwbGl0ID0gKHNwbGl0ID09IFNwbGl0T25YID8gU3BsaXRP
blkgOiBTcGxpdE9uWCk7Ci0gICAgICAgIG1fcm9vdCA9IHBhcmVudDsKLSAgICB9Ci0gICAgdXBk
YXRlTGFyZ2VzdEZyZWUob2xkUm9vdCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBmaXRzV2l0
aGluKGNvbnN0IEludFNpemUmIHNpemUxLCBjb25zdCBJbnRTaXplJiBzaXplMikKLXsKLSAgICBy
ZXR1cm4gc2l6ZTEud2lkdGgoKSA8PSBzaXplMi53aWR0aCgpICYmIHNpemUxLmhlaWdodCgpIDw9
IHNpemUyLmhlaWdodCgpOwotfQotCi1JbnRSZWN0IEdlbmVyYWxBcmVhQWxsb2NhdG9yOjphbGxv
Y2F0ZShjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIEludFNpemUgcm91bmRlZCA9IHJvdW5k
QWxsb2NhdGlvbihzaXplKTsKLSAgICByb3VuZGVkID0gbmV4dFBvd2VyT2ZUd28ocm91bmRlZCk7
Ci0gICAgaWYgKHJvdW5kZWQud2lkdGgoKSA8PSAwIHx8IHJvdW5kZWQud2lkdGgoKSA+IG1fc2l6
ZS53aWR0aCgpCi0gICAgICAgIHx8IHJvdW5kZWQuaGVpZ2h0KCkgPD0gMCB8fCByb3VuZGVkLmhl
aWdodCgpID4gbV9zaXplLmhlaWdodCgpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0g
ICAgSW50UG9pbnQgcG9pbnQgPSBhbGxvY2F0ZUZyb21Ob2RlKHJvdW5kZWQsIG1fcm9vdCk7Ci0g
ICAgaWYgKHBvaW50LngoKSA+PSAwKQotICAgICAgICByZXR1cm4gSW50UmVjdChwb2ludCwgc2l6
ZSk7Ci0gICAgcmV0dXJuIEludFJlY3QoKTsKLX0KLQotSW50UG9pbnQgR2VuZXJhbEFyZWFBbGxv
Y2F0b3I6OmFsbG9jYXRlRnJvbU5vZGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgTm9kZSogbm9kZSkK
LXsKLSAgICAvLyBGaW5kIHRoZSBiZXN0IG5vZGUgdG8gaW5zZXJ0IGludG8sIHdoaWNoIHNob3Vs
ZCBiZQotICAgIC8vIGEgbm9kZSB3aXRoIHRoZSBsZWFzdCBhbW91bnQgb2YgdW51c2VkIHNwYWNl
IHRoYXQgaXMKLSAgICAvLyBiaWcgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIHJlcXVlc3RlZCBzaXpl
LgotICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAgIC8vIEdvIGRvd24gYSBsZXZlbCBhbmQgZGV0
ZXJtaW5lIGlmIHRoZSBsZWZ0IG9yIHJpZ2h0Ci0gICAgICAgIC8vIHN1Yi10cmVlIGNvbnRhaW5z
IHRoZSBiZXN0IGNoYW5jZSBvZiBhbGxvY2F0aW9uLgotICAgICAgICBOb2RlKiBsZWZ0ID0gbm9k
ZS0+bGVmdDsKLSAgICAgICAgTm9kZSogcmlnaHQgPSBub2RlLT5yaWdodDsKLSAgICAgICAgaWYg
KGxlZnQgJiYgZml0c1dpdGhpbihzaXplLCBsZWZ0LT5sYXJnZXN0RnJlZSkpIHsKLSAgICAgICAg
ICAgIGlmIChyaWdodCAmJiBmaXRzV2l0aGluKHNpemUsIHJpZ2h0LT5sYXJnZXN0RnJlZSkpIHsK
LSAgICAgICAgICAgICAgICBpZiAobGVmdC0+bGFyZ2VzdEZyZWUud2lkdGgoKSA8IHJpZ2h0LT5s
YXJnZXN0RnJlZS53aWR0aCgpCi0gICAgICAgICAgICAgICAgICAgIHx8IGxlZnQtPmxhcmdlc3RG
cmVlLmhlaWdodCgpIDwgcmlnaHQtPmxhcmdlc3RGcmVlLmhlaWdodCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIFRoZSBsYXJnZXN0RnJlZSB2YWx1ZXMgbWF5IGJlIGEgbGl0dGxlIG92ZXJz
aXplZCwKLSAgICAgICAgICAgICAgICAgICAgLy8gc28gdHJ5IHRoZSBsZWZ0IHN1Yi10cmVlIGFu
ZCB0aGVuIHRoZSByaWdodCBzdWItdHJlZS4KLSAgICAgICAgICAgICAgICAgICAgSW50UG9pbnQg
cG9pbnQgPSBhbGxvY2F0ZUZyb21Ob2RlKHNpemUsIGxlZnQpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAocG9pbnQueCgpID49IDApCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9p
bnQ7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZUZyb21Ob2RlKHNpemUsIHJp
Z2h0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbm9kZSA9IHJpZ2h0Owot
ICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbm9kZSA9IGxlZnQ7Ci0gICAgICAg
IH0gZWxzZSBpZiAocmlnaHQgJiYgZml0c1dpdGhpbihzaXplLCByaWdodC0+bGFyZ2VzdEZyZWUp
KQotICAgICAgICAgICAgbm9kZSA9IHJpZ2h0OwotICAgICAgICBlbHNlIGlmIChsZWZ0IHx8IHJp
Z2h0KSB7Ci0gICAgICAgICAgICAvLyBOZWl0aGVyIHN1Yi1ub2RlIGhhcyBlbm91Z2ggc3BhY2Ug
dG8gYWxsb2NhdGUgZnJvbS4KLSAgICAgICAgICAgIHJldHVybiBJbnRQb2ludCgtMSwgLTEpOwot
ICAgICAgICB9IGVsc2UgaWYgKGZpdHNXaXRoaW4oc2l6ZSwgbm9kZS0+bGFyZ2VzdEZyZWUpKSB7
Ci0gICAgICAgICAgICAvLyBEbyB3ZSBuZWVkIHRvIHNwbGl0IHRoaXMgbm9kZSBpbnRvIHNtYWxs
ZXIgcGllY2VzPwotICAgICAgICAgICAgU3BsaXQgc3BsaXQ7Ci0gICAgICAgICAgICBpZiAoZml0
c1dpdGhpbihJbnRTaXplKHNpemUud2lkdGgoKSAqIDIsIHNpemUuaGVpZ2h0KCkgKiAyKSwgbm9k
ZS0+bGFyZ2VzdEZyZWUpKSB7Ci0gICAgICAgICAgICAgICAgLy8gU3BsaXQgaW4gZWl0aGVyIGRp
cmVjdGlvbjogY2hvb3NlIHRoZSBpbnZlcnNlIG9mCi0gICAgICAgICAgICAgICAgLy8gdGhlIHBh
cmVudCBub2RlJ3Mgc3BsaXQgZGlyZWN0aW9uIHRvIHRyeSB0byBiYWxhbmNlCi0gICAgICAgICAg
ICAgICAgLy8gb3V0IHRoZSB3YXN0ZWQgc3BhY2UgYXMgZnVydGhlciBzdWJkaXZpc2lvbnMgaGFw
cGVuLgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5wYXJlbnQKLSAgICAgICAgICAgICAgICAg
ICAgJiYgbm9kZS0+cGFyZW50LT5sZWZ0LT5yZWN0LngoKSA9PSBub2RlLT5wYXJlbnQtPnJpZ2h0
LT5yZWN0LngoKSkKLSAgICAgICAgICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWDsKLSAgICAg
ICAgICAgICAgICBlbHNlIGlmIChub2RlLT5wYXJlbnQpCi0gICAgICAgICAgICAgICAgICAgIHNw
bGl0ID0gU3BsaXRPblk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+cmVjdC53aWR0
aCgpID49IG5vZGUtPnJlY3QuaGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAgICAgIHNwbGl0ID0g
U3BsaXRPblg7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzcGxp
dCA9IFNwbGl0T25ZOwotICAgICAgICAgICAgfSBlbHNlIGlmIChmaXRzV2l0aGluKEludFNpemUo
c2l6ZS53aWR0aCgpICogMiwgc2l6ZS5oZWlnaHQoKSksIG5vZGUtPmxhcmdlc3RGcmVlKSkgewot
ICAgICAgICAgICAgICAgIC8vIFNwbGl0IGFsb25nIHRoZSBYIGRpcmVjdGlvbi4KLSAgICAgICAg
ICAgICAgICBzcGxpdCA9IFNwbGl0T25YOwotICAgICAgICAgICAgfSBlbHNlIGlmIChmaXRzV2l0
aGluKEludFNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpICogMiksIG5vZGUtPmxhcmdl
c3RGcmVlKSkgewotICAgICAgICAgICAgICAgIC8vIFNwbGl0IGFsb25nIHRoZSBZIGRpcmVjdGlv
bi4KLSAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAvLyBDYW5ub3Qgc3BsaXQgZnVydGhlciAtIGFsbG9jYXRlIHRo
aXMgbm9kZS4KLSAgICAgICAgICAgICAgICBub2RlLT5sYXJnZXN0RnJlZSA9IEludFNpemUoMCwg
MCk7Ci0gICAgICAgICAgICAgICAgdXBkYXRlTGFyZ2VzdEZyZWUobm9kZSk7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIG5vZGUtPnJlY3QubG9jYXRpb24oKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgLy8gU3BsaXQgdGhlIG5vZGUsIHRoZW4gZ28gYXJvdW5kIGFnYWluIHVzaW5nIHRo
ZSBsZWZ0IHN1Yi10cmVlLgotICAgICAgICAgICAgbm9kZSA9IHNwbGl0Tm9kZShub2RlLCBzcGxp
dCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBDYW5ub3QgcG9zc2libHkgZml0
IGludG8gdGhpcyBub2RlLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIEludFBvaW50KC0xLCAtMSk7Ci19Ci0KLUdlbmVyYWxBcmVhQWxsb2NhdG9yOjpO
b2RlKiBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6c3BsaXROb2RlKE5vZGUqIG5vZGUsIFNwbGl0IHNw
bGl0KQotewotICAgIE5vZGUqIGxlZnQgPSBuZXcgTm9kZSgpOwotICAgIGxlZnQtPnBhcmVudCA9
IG5vZGU7Ci0gICAgTm9kZSogcmlnaHQgPSBuZXcgTm9kZSgpOwotICAgIHJpZ2h0LT5wYXJlbnQg
PSBub2RlOwotICAgIG5vZGUtPmxlZnQgPSBsZWZ0OwotICAgIG5vZGUtPnJpZ2h0ID0gcmlnaHQ7
Ci0gICAgbV9ub2RlQ291bnQgKz0gMjsKLQotICAgIGlmIChzcGxpdCA9PSBTcGxpdE9uWCkgewot
ICAgICAgICBsZWZ0LT5yZWN0ID0gSW50UmVjdChub2RlLT5yZWN0LngoKSwgbm9kZS0+cmVjdC55
KCksCi0gICAgICAgICAgICBub2RlLT5yZWN0LndpZHRoKCkgLyAyLCBub2RlLT5yZWN0LmhlaWdo
dCgpKTsKLSAgICAgICAgcmlnaHQtPnJlY3QgPSBJbnRSZWN0KGxlZnQtPnJlY3QubWF4WCgpLCBu
b2RlLT5yZWN0LnkoKSwKLSAgICAgICAgICAgIG5vZGUtPnJlY3Qud2lkdGgoKSAvIDIsIG5vZGUt
PnJlY3QuaGVpZ2h0KCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGxlZnQtPnJlY3QgPSBJbnRS
ZWN0KG5vZGUtPnJlY3QueCgpLCBub2RlLT5yZWN0LnkoKSwKLSAgICAgICAgICAgIG5vZGUtPnJl
Y3Qud2lkdGgoKSwgbm9kZS0+cmVjdC5oZWlnaHQoKSAvIDIpOwotICAgICAgICByaWdodC0+cmVj
dCA9IEludFJlY3Qobm9kZS0+cmVjdC54KCksIGxlZnQtPnJlY3QubWF4WSgpLAotICAgICAgICAg
ICAgbm9kZS0+cmVjdC53aWR0aCgpLCBub2RlLT5yZWN0LmhlaWdodCgpIC8gMik7Ci0gICAgfQot
Ci0gICAgbGVmdC0+bGFyZ2VzdEZyZWUgPSBsZWZ0LT5yZWN0LnNpemUoKTsKLSAgICByaWdodC0+
bGFyZ2VzdEZyZWUgPSByaWdodC0+cmVjdC5zaXplKCk7Ci0gICAgbm9kZS0+bGFyZ2VzdEZyZWUg
PSByaWdodC0+bGFyZ2VzdEZyZWU7Ci0gICAgcmV0dXJuIGxlZnQ7Ci19Ci0KLXZvaWQgR2VuZXJh
bEFyZWFBbGxvY2F0b3I6OnVwZGF0ZUxhcmdlc3RGcmVlKE5vZGUqIG5vZGUpCi17Ci0gICAgd2hp
bGUgKChub2RlID0gbm9kZS0+cGFyZW50KSkgewotICAgICAgICBub2RlLT5sYXJnZXN0RnJlZSA9
IEludFNpemUoCi0gICAgICAgICAgICBzdGQ6Om1heChub2RlLT5sZWZ0LT5sYXJnZXN0RnJlZS53
aWR0aCgpLCBub2RlLT5yaWdodC0+bGFyZ2VzdEZyZWUud2lkdGgoKSksCi0gICAgICAgICAgICBz
dGQ6Om1heChub2RlLT5sZWZ0LT5sYXJnZXN0RnJlZS5oZWlnaHQoKSwgbm9kZS0+cmlnaHQtPmxh
cmdlc3RGcmVlLmhlaWdodCgpKQotICAgICAgICAgICAgKTsKLSAgICB9Ci19Ci0KLXZvaWQgR2Vu
ZXJhbEFyZWFBbGxvY2F0b3I6OnJlbGVhc2UoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICAv
LyBMb2NhdGUgdGhlIG5vZGUgdGhhdCBjb250YWlucyB0aGUgYWxsb2NhdGVkIHJlZ2lvbi4KLSAg
ICBOb2RlKiBub2RlID0gbV9yb290OwotICAgIEludFBvaW50IHBvaW50ID0gcmVjdC5sb2NhdGlv
bigpOwotICAgIHdoaWxlIChub2RlKSB7Ci0gICAgICAgIGlmIChub2RlLT5sZWZ0ICYmIG5vZGUt
PmxlZnQtPnJlY3QuY29udGFpbnMocG9pbnQpKQotICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmxl
ZnQ7Ci0gICAgICAgIGVsc2UgaWYgKG5vZGUtPnJpZ2h0ICYmIG5vZGUtPnJpZ2h0LT5yZWN0LmNv
bnRhaW5zKHBvaW50KSkKLSAgICAgICAgICAgIG5vZGUgPSBub2RlLT5yaWdodDsKLSAgICAgICAg
ZWxzZSBpZiAobm9kZS0+cmVjdC5jb250YWlucyhwb2ludCkpCi0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuOyAvLyBQb2ludCBpcyBjb21wbGV0ZWx5
IG91dHNpZGUgdGhlIHRyZWUuCi0gICAgfQotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gTWFyayB0aGUgbm9kZSBhcyBmcmVlIGFuZCB0aGVuIHdvcmsgdXB3YXJkcyB0
aHJvdWdoIHRoZSB0cmVlCi0gICAgLy8gcmVjb21iaW5pbmcgYW5kIGRlbGV0aW5nIG5vZGVzIHVu
dGlsIHdlIHJlYWNoIGEgc2libGluZwotICAgIC8vIHRoYXQgaXMgc3RpbGwgYWxsb2NhdGVkLgot
ICAgIG5vZGUtPmxhcmdlc3RGcmVlID0gbm9kZS0+cmVjdC5zaXplKCk7Ci0gICAgd2hpbGUgKG5v
ZGUtPnBhcmVudCkgewotICAgICAgICBpZiAobm9kZS0+cGFyZW50LT5sZWZ0ID09IG5vZGUpIHsK
LSAgICAgICAgICAgIGlmIChub2RlLT5wYXJlbnQtPnJpZ2h0LT5sYXJnZXN0RnJlZSAhPSBub2Rl
LT5wYXJlbnQtPnJpZ2h0LT5yZWN0LnNpemUoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChub2RlLT5wYXJlbnQtPmxlZnQtPmxhcmdl
c3RGcmVlICE9IG5vZGUtPnBhcmVudC0+bGVmdC0+cmVjdC5zaXplKCkpCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudDsKLSAgICAg
ICAgZnJlZU5vZGUobm9kZS0+bGVmdCk7Ci0gICAgICAgIGZyZWVOb2RlKG5vZGUtPnJpZ2h0KTsK
LSAgICAgICAgbV9ub2RlQ291bnQgLT0gMjsKLSAgICAgICAgbm9kZS0+bGVmdCA9IG51bGxwdHI7
Ci0gICAgICAgIG5vZGUtPnJpZ2h0ID0gbnVsbHB0cjsKLSAgICAgICAgbm9kZS0+bGFyZ2VzdEZy
ZWUgPSBub2RlLT5yZWN0LnNpemUoKTsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIHRoZSByZXN0IG9m
IG91ciBhbmNlc3RvcnMgaGF2ZSB0aGUgY29ycmVjdCAibGFyZ2VzdCBmcmVlIHNpemUiLgotICAg
IHVwZGF0ZUxhcmdlc3RGcmVlKG5vZGUpOwotfQotCi1pbnQgR2VuZXJhbEFyZWFBbGxvY2F0b3I6
Om92ZXJoZWFkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9ub2RlQ291bnQgKiBzaXplb2YoTm9k
ZSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9BcmVhQWxsb2NhdG9yLmggYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0FyZWFBbGxvY2F0b3IuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjBjYWRkNjEzZmZhMjM5YzIyZDAzY2Q2OWE2ZGI3
MzEzNTJmMjQzOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0Fy
ZWFBbGxvY2F0b3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgt
aWVzKQotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyLjEgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICog
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKgotICovCi0KLSNpZm5kZWYgQXJlYUFsbG9jYXRvcl9o
Ci0jZGVmaW5lIEFyZWFBbGxvY2F0b3JfaAotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQotCi0jaW5jbHVkZSA8V2ViQ29yZS9JbnRQb2ludC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW50
UmVjdC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgotCi1uYW1lc3BhY2UgV2ViS2l0
IHsKLQotaW5saW5lIGludCBuZXh0UG93ZXJPZlR3byhpbnQgbnVtYmVyKQotewotICAgIC8vIFRo
aXMgaXMgYSBmYXN0IHRyaWNrIHRvIGdldCBuZXh0UG93ZXJPZlR3byBmb3IgYW4gaW50ZWdlci4K
LSAgICAtLW51bWJlcjsKLSAgICBudW1iZXIgfD0gbnVtYmVyID4+IDE7Ci0gICAgbnVtYmVyIHw9
IG51bWJlciA+PiAyOwotICAgIG51bWJlciB8PSBudW1iZXIgPj4gNDsKLSAgICBudW1iZXIgfD0g
bnVtYmVyID4+IDg7Ci0gICAgbnVtYmVyIHw9IG51bWJlciA+PiAxNjsKLSAgICBudW1iZXIrKzsK
LSAgICByZXR1cm4gbnVtYmVyOwotfQotCi1pbmxpbmUgV2ViQ29yZTo6SW50U2l6ZSBuZXh0UG93
ZXJPZlR3byhjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQotewotICAgIHJldHVybiBXZWJD
b3JlOjpJbnRTaXplKG5leHRQb3dlck9mVHdvKHNpemUud2lkdGgoKSksIG5leHRQb3dlck9mVHdv
KHNpemUuaGVpZ2h0KCkpKTsKLX0KLQotY2xhc3MgQXJlYUFsbG9jYXRvciB7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgQXJlYUFsbG9jYXRvcihj
b25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0gICAgdmlydHVhbCB+QXJlYUFsbG9jYXRvcigpOwot
Ci0gICAgV2ViQ29yZTo6SW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0K
LSAgICBXZWJDb3JlOjpJbnRTaXplIG1pbmltdW1BbGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9taW5BbGxvYzsgfQotICAgIHZvaWQgc2V0TWluaW11bUFsbG9jYXRpb24oY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgc2l6ZSkgeyBtX21pbkFsbG9jID0gc2l6ZTsgfQotCi0gICAgV2ViQ29yZTo6
SW50U2l6ZSBtYXJnaW4oKSBjb25zdCB7IHJldHVybiBtX21hcmdpbjsgfQotICAgIHZvaWQgc2V0
TWFyZ2luKGNvbnN0IFdlYkNvcmU6OkludFNpemUgJm1hcmdpbikgeyBtX21hcmdpbiA9IG1hcmdp
bjsgfQotCi0gICAgdmlydHVhbCB2b2lkIGV4cGFuZChjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7
Ci0gICAgdm9pZCBleHBhbmRCeShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0KLSAgICB2aXJ0
dWFsIFdlYkNvcmU6OkludFJlY3QgYWxsb2NhdGUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7Ci0K
LSAgICB2aXJ0dWFsIGludCBvdmVyaGVhZCgpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgV2Vi
Q29yZTo6SW50U2l6ZSBtX3NpemU7Ci0gICAgV2ViQ29yZTo6SW50U2l6ZSBtX21pbkFsbG9jOwot
ICAgIFdlYkNvcmU6OkludFNpemUgbV9tYXJnaW47Ci0KLSAgICBXZWJDb3JlOjpJbnRTaXplIHJv
dW5kQWxsb2NhdGlvbihjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgY29uc3Q7Ci19OwotCi1jbGFz
cyBHZW5lcmFsQXJlYUFsbG9jYXRvciBmaW5hbCA6IHB1YmxpYyBBcmVhQWxsb2NhdG9yIHsKLSAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBHZW5lcmFs
QXJlYUFsbG9jYXRvcihjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7Ci0gICAgdmlydHVhbCB+R2Vu
ZXJhbEFyZWFBbGxvY2F0b3IoKTsKLQotICAgIHZvaWQgZXhwYW5kKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmKSBvdmVycmlkZTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IGFsbG9jYXRlKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbGVhc2UoY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYpIG92ZXJyaWRlOwotICAgIGludCBvdmVyaGVhZCgpIGNvbnN0IG92ZXJyaWRl
OwotCi1wcml2YXRlOgotICAgIGVudW0gU3BsaXQgeyBTcGxpdE9uWCwgU3BsaXRPblkgfTsKLQot
ICAgIHN0cnVjdCBOb2RlIHsKLSAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAg
cHVibGljOgotICAgICAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3Q7Ci0gICAgICAgIFdlYkNvcmU6
OkludFNpemUgbGFyZ2VzdEZyZWU7Ci0gICAgICAgIE5vZGUqIHBhcmVudCB7IG51bGxwdHIgfTsK
LSAgICAgICAgTm9kZSogbGVmdCB7IG51bGxwdHIgfTsKLSAgICAgICAgTm9kZSogcmlnaHQgeyBu
dWxscHRyIH07Ci0gICAgfTsKLQotICAgIE5vZGUqIG1fcm9vdDsKLSAgICBpbnQgbV9ub2RlQ291
bnQ7Ci0KLSAgICBzdGF0aWMgdm9pZCBmcmVlTm9kZShOb2RlKik7Ci0gICAgV2ViQ29yZTo6SW50
UG9pbnQgYWxsb2NhdGVGcm9tTm9kZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgTm9kZSopOwot
ICAgIE5vZGUqIHNwbGl0Tm9kZShOb2RlKiwgU3BsaXQpOwotICAgIHN0YXRpYyB2b2lkIHVwZGF0
ZUxhcmdlc3RGcmVlKE5vZGUqKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLy8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2VuZGlmIC8vIEFyZWFBbGxvY2F0b3Jf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0
ZWRHcmFwaGljcy9Db21wb3NpdGluZ0Nvb3JkaW5hdG9yLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3Iu
aAppbmRleCA3N2YxNzI4Mzc0MGM1ZGUyMzMyM2UwOWNiYzgwNDQ0MGViOTZhYmFkLi5mNmNkODQx
MzYwNTVlNWY1OWVmY2ZmZDU5OTFhNjNmMzUwOWZkNmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29v
cmRpbmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuaApAQCAtMjksNyArMjksNiBAQAog
CiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogCi0jaW5jbHVkZSAiVXBkYXRlQXRsYXMu
aCIKICNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc1N0YXRlLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9Db29yZGluYXRlZEltYWdlQmFja2luZy5oPgpAQCAtMzgsNiArMzcsNyBAQAogI2luY2x1ZGUg
PFdlYkNvcmUvR3JhcGhpY3NMYXllckZhY3RvcnkuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ludFJl
Y3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05pY29zaWFCdWZmZXIuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1VwZGF0ZUF0bGFzLmg+CiAKIG5hbWVzcGFjZSBOaWNvc2lhIHsKIGNsYXNzIFBhaW50aW5n
RW5naW5lOwpAQCAtNTQsNyArNTQsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIENvbXBv
c2l0aW5nQ29vcmRpbmF0b3IgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNs
aWVudAogICAgICwgcHVibGljIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NMYXllckNsaWVu
dAogICAgICwgcHVibGljIFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1hZ2VCYWNraW5nOjpDbGllbnQK
LSAgICAsIHB1YmxpYyBVcGRhdGVBdGxhczo6Q2xpZW50CisgICAgLCBwdWJsaWMgV2ViQ29yZTo6
VXBkYXRlQXRsYXM6OkNsaWVudAogICAgICwgcHVibGljIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJG
YWN0b3J5IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb21wb3NpdGluZ0Nvb3JkaW5hdG9y
KTsKIHB1YmxpYzoKQEAgLTEyMiw4ICsxMjIsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgc3luY0xh
eWVyU3RhdGUoV2ViQ29yZTo6Q29vcmRpbmF0ZWRMYXllcklELCBXZWJDb3JlOjpDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXJTdGF0ZSYpIG92ZXJyaWRlOwogCiAgICAgLy8gVXBkYXRlQXRsYXM6OkNs
aWVudAotICAgIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXMoVXBkYXRlQXRsYXM6OklELCBSZWY8Tmlj
b3NpYTo6QnVmZmVyPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZVVwZGF0ZUF0bGFzKFVw
ZGF0ZUF0bGFzOjpJRCkgb3ZlcnJpZGU7CisgICAgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyhXZWJD
b3JlOjpVcGRhdGVBdGxhczo6SUQsIFJlZjxOaWNvc2lhOjpCdWZmZXI+JiYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXMoV2ViQ29yZTo6VXBkYXRlQXRsYXM6OklEKSBvdmVy
cmlkZTsKIAogICAgIC8vIEdyYXBoaWNzTGF5ZXJGYWN0b3J5CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI+IGNyZWF0ZUdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllcjo6VHlwZSwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsaWVudCYpIG92ZXJyaWRl
OwpAQCAtMTUzLDcgKzE1Myw3IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxXZWJDb3JlOjpDb29y
ZGluYXRlZEltYWdlQmFja2luZ0lELCBSZWZQdHI8V2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJh
Y2tpbmc+PiBtX2ltYWdlQmFja2luZ3M7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Tmljb3NpYTo6
UGFpbnRpbmdFbmdpbmU+IG1fcGFpbnRpbmdFbmdpbmU7Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxVcGRhdGVBdGxhcz4+IG1fdXBkYXRlQXRsYXNlczsKKyAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OlVwZGF0ZUF0bGFzPj4gbV91cGRhdGVBdGxhc2VzOwogICAgIFZlY3Rv
cjx1aW50MzJfdD4gbV9hdGxhc2VzVG9SZW1vdmU7CiAKICAgICAvLyBXZSBkb24ndCBzZW5kIHRo
ZSBtZXNzYWdlcyByZWxhdGVkIHRvIHJlbGVhc2luZyByZXNvdXJjZXMgdG8gcmVuZGVyZXIgZHVy
aW5nIHB1cmdpbmcsIGJlY2F1c2UgcmVuZGVyZXIgYWxyZWFkeSBoYWQgcmVtb3ZlZCBhbGwgcmVz
b3VyY2VzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1VwZGF0ZUF0bGFzLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggOGNkOGU5ZDVhNDliM2Y2OWU4NjI5NzU1NWJjNDFkYzdiNmU5
ZmM1Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1VwZGF0ZUF0
bGFzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChD
KSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQotIENv
cHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5jLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVXBkYXRlQXRsYXMuaCIKLQotI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLQotI2luY2x1ZGUgPFdlYkNvcmUvQ29vcmRpbmF0
ZWRHcmFwaGljc1N0YXRlLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4K
LSNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1VcGRhdGVBdGxhczo6VXBkYXRlQXRsYXMoQ2xpZW50
JiBjbGllbnQsIGNvbnN0IEludFNpemUmIHNpemUsIE5pY29zaWE6OkJ1ZmZlcjo6RmxhZ3MgZmxh
Z3MpCi0gICAgOiBtX2NsaWVudChjbGllbnQpCi0gICAgLCBtX2J1ZmZlcihOaWNvc2lhOjpCdWZm
ZXI6OmNyZWF0ZShzaXplLCBmbGFncykpCi17Ci0gICAgc3RhdGljIElEIHNfbmV4dElEIHsgMCB9
OwotICAgIG1faWQgPSArK3NfbmV4dElEOwotCi0gICAgbV9jbGllbnQuY3JlYXRlVXBkYXRlQXRs
YXMobV9pZCwgbV9idWZmZXIuY29weVJlZigpKTsKLX0KLQotVXBkYXRlQXRsYXM6On5VcGRhdGVB
dGxhcygpCi17Ci0gICAgbV9jbGllbnQucmVtb3ZlVXBkYXRlQXRsYXMobV9pZCk7Ci19Ci0KLXZv
aWQgVXBkYXRlQXRsYXM6OmJ1aWxkTGF5b3V0SWZOZWVkZWQoKQotewotICAgIGlmIChtX2FyZWFB
bGxvY2F0b3IpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2FyZWFBbGxvY2F0b3IgPSBzdGQ6Om1h
a2VfdW5pcXVlPEdlbmVyYWxBcmVhQWxsb2NhdG9yPihzaXplKCkpOwotICAgIG1fYXJlYUFsbG9j
YXRvci0+c2V0TWluaW11bUFsbG9jYXRpb24oSW50U2l6ZSgzMiwgMzIpKTsKLX0KLQotdm9pZCBV
cGRhdGVBdGxhczo6ZGlkU3dhcEJ1ZmZlcnMoKQotewotICAgIG1fYXJlYUFsbG9jYXRvciA9IG51
bGxwdHI7Ci19Ci0KLVJlZlB0cjxOaWNvc2lhOjpCdWZmZXI+IFVwZGF0ZUF0bGFzOjpnZXRDb29y
ZGluYXRlZEJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplLCB1aW50MzJfdCYgYXRsYXNJRCwgSW50
UmVjdCYgYWxsb2NhdGVkUmVjdCkKLXsKLSAgICBtX2luYWN0aXZpdHlJblNlY29uZHMgPSAwOwot
ICAgIGJ1aWxkTGF5b3V0SWZOZWVkZWQoKTsKLSAgICBhbGxvY2F0ZWRSZWN0ID0gbV9hcmVhQWxs
b2NhdG9yLT5hbGxvY2F0ZShzaXplKTsKLQotICAgIGlmIChhbGxvY2F0ZWRSZWN0LmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdGxhc0lEID0gbV9pZDsKLSAgICBy
ZXR1cm4gbV9idWZmZXIuY29weVJlZigpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQot
I2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMu
aCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3Mv
VXBkYXRlQXRsYXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM3M2VkNmQxMThl
N2VlOTMwZjUyOTI0Y2I0YzAzOWEwZWZkMmE0Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29y
ZGluYXRlZEdyYXBoaWNzL1VwZGF0ZUF0bGFzLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCww
IEBACi0vKgotIENvcHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKLSBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4K
LQotIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKLSBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQot
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKLSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJBcmVh
QWxsb2NhdG9yLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9OaWNvc2lhQnVmZmVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBJbnRSZWN0OwotY2xhc3MgSW50U2l6ZTsKLX0KLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFVwZGF0ZUF0bGFzIHsKLSAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShVcGRhdGVBdGxhcyk7Ci1wdWJs
aWM6Ci0gICAgdXNpbmcgSUQgPSB1aW50MzJfdDsKLQotICAgIGNsYXNzIENsaWVudCB7Ci0gICAg
cHVibGljOgotICAgICAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlVXBkYXRlQXRsYXMoSUQsIFJlZjxO
aWNvc2lhOjpCdWZmZXI+JiYpID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZVVwZGF0
ZUF0bGFzKElEKSA9IDA7Ci0gICAgfTsKLQotICAgIFVwZGF0ZUF0bGFzKENsaWVudCYsIGNvbnN0
IFdlYkNvcmU6OkludFNpemUmLCBOaWNvc2lhOjpCdWZmZXI6OkZsYWdzKTsKLSAgICB+VXBkYXRl
QXRsYXMoKTsKLQotICAgIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2J1ZmZlci0+c2l6ZSgpOyB9Ci0KLSAgICBSZWZQdHI8Tmljb3NpYTo6QnVmZmVyPiBn
ZXRDb29yZGluYXRlZEJ1ZmZlcihjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgdWludDMyX3QmLCBX
ZWJDb3JlOjpJbnRSZWN0Jik7Ci0gICAgdm9pZCBkaWRTd2FwQnVmZmVycygpOwotICAgIGJvb2wg
c3VwcG9ydHNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLT5zdXBwb3J0c0FscGhhKCk7
IH0KLQotICAgIHZvaWQgYWRkVGltZUluYWN0aXZlKGRvdWJsZSBzZWNvbmRzKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKCFpc0luVXNlKCkpOwotICAgICAgICBtX2luYWN0aXZpdHlJblNlY29uZHMg
Kz0gc2Vjb25kczsKLSAgICB9Ci0gICAgYm9vbCBpc0luYWN0aXZlKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIGNvbnN0IGRvdWJsZSBpbmFjdGl2ZVNlY29uZHNUb2xlcmFuY2UgPSAzOwotICAgICAg
ICByZXR1cm4gbV9pbmFjdGl2aXR5SW5TZWNvbmRzID4gaW5hY3RpdmVTZWNvbmRzVG9sZXJhbmNl
OwotICAgIH0KLSAgICBib29sIGlzSW5Vc2UoKSBjb25zdCB7IHJldHVybiAhIW1fYXJlYUFsbG9j
YXRvcjsgfQotCi1wcml2YXRlOgotICAgIHZvaWQgYnVpbGRMYXlvdXRJZk5lZWRlZCgpOwotCi0g
ICAgSUQgbV9pZCB7IDAgfTsKLSAgICBDbGllbnQmIG1fY2xpZW50OwotICAgIHN0ZDo6dW5pcXVl
X3B0cjxHZW5lcmFsQXJlYUFsbG9jYXRvcj4gbV9hcmVhQWxsb2NhdG9yOwotICAgIFJlZjxOaWNv
c2lhOjpCdWZmZXI+IG1fYnVmZmVyOwotICAgIGRvdWJsZSBtX2luYWN0aXZpdHlJblNlY29uZHMg
eyAwIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328959</attachid>
            <date>2017-12-11 02:23:15 -0800</date>
            <delta_ts>2017-12-11 23:04:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-180641-20171211112314.patch</filename>
            <type>text/plain</type>
            <size>51422</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1NzQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjA3OTdkOGViN2Y4ZDIz
ZWFkMzFiODU4ZGI0MzcxZTBhMjg1N2M4Mi4uMzFkOWY0YzZhMTc3NjBjMDg4MTgzMTk4ZTdkMTI0
NDc2ODllM2I4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDE3LTEyLTExICBaYW4g
RG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBbQ29vcmRHcmFwaGlj
c10gTW92ZSBVcGRhdGVBdGxhcywgQXJlYUFsbG9jYXRvciBpbnRvIHRoZSBwbGF0Zm9ybSBsYXll
cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwNjQx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0
aGUgVXBkYXRlQXRsYXMgYW5kIEFyZWFBbGxvY2F0b3IgY2xhc3NlcyBhbmQgdGhlaXIgc291cmNl
IGZpbGVzCisgICAgICAgIGludG8gdGhlIHBsYXRmb3JtIGxheWVyLiBUaGlzIHN0aWxsIG1lYW5z
IHVzaW5nIHRoZSBXZWJDb3JlIG5hbWVzcGFjZSwKKyAgICAgICAgYnV0IGFwYXJ0IGZyb20gdGhh
dCB0aGVzZSB0d28gY2xhc3NlcyBoYXZlIG5vIGRlcGVuZGVuY3kgb24gYW55dGhpbmcgaW4KKyAg
ICAgICAgdGhlIFdlYktpdCBsYXllciwgc28gdGhleSBjYW4gYmUgbW92ZWQgZnJvbSB0aGVyZS4K
KworICAgICAgICBObyBuZXcgdGVzdHMgLS0gbm8gY2hhbmdlIGluIGZ1bmN0aW9uYWxpdHkuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmNwcDogUmVuYW1l
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQXJlYUFsbG9jYXRvci5jcHAuCisgICAgICAgIChXZWJDb3JlOjpBcmVhQWxsb2NhdG9yOjpB
cmVhQWxsb2NhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkFyZWFBbGxvY2F0b3I6On5BcmVhQWxs
b2NhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkFyZWFBbGxvY2F0b3I6OmV4cGFuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpBcmVhQWxsb2NhdG9yOjpleHBhbmRCeSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcmVhQWxsb2NhdG9yOjpyZWxlYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFyZWFBbGxvY2F0
b3I6Om92ZXJoZWFkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFyZWFBbGxvY2F0b3I6OnJv
dW5kQWxsb2NhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHZW5lcmFsQXJlYUFsbG9j
YXRvcjo6R2VuZXJhbEFyZWFBbGxvY2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6R2VuZXJhbEFy
ZWFBbGxvY2F0b3I6On5HZW5lcmFsQXJlYUFsbG9jYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpH
ZW5lcmFsQXJlYUFsbG9jYXRvcjo6ZnJlZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6R2VuZXJh
bEFyZWFBbGxvY2F0b3I6OmV4cGFuZCk6CisgICAgICAgIChXZWJDb3JlOjpmaXRzV2l0aGluKToK
KyAgICAgICAgKFdlYkNvcmU6OkdlbmVyYWxBcmVhQWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHZW5lcmFsQXJlYUFsbG9jYXRvcjo6YWxsb2NhdGVGcm9tTm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHZW5lcmFsQXJlYUFsbG9jYXRvcjo6c3BsaXROb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdlbmVyYWxBcmVhQWxsb2NhdG9yOjp1cGRhdGVMYXJnZXN0RnJlZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHZW5lcmFsQXJlYUFsbG9jYXRvcjo6cmVsZWFzZSk6CisgICAgICAg
IChXZWJDb3JlOjpHZW5lcmFsQXJlYUFsbG9jYXRvcjo6b3ZlcmhlYWQgY29uc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmg6
IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0FyZWFBbGxvY2F0b3IuaC4KKyAgICAgICAgKFdlYkNvcmU6Om5leHRQb3dlck9m
VHdvKToKKyAgICAgICAgKFdlYkNvcmU6OkFyZWFBbGxvY2F0b3I6OnNpemUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6QXJlYUFsbG9jYXRvcjo6bWluaW11bUFsbG9jYXRpb24gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6QXJlYUFsbG9jYXRvcjo6c2V0TWluaW11bUFsbG9jYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6QXJlYUFsbG9jYXRvcjo6bWFyZ2luIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkFyZWFBbGxvY2F0b3I6OnNldE1hcmdpbik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBk
YXRlQXRsYXMuY3BwLgorICAgICAgICAoV2ViQ29yZTo6VXBkYXRlQXRsYXM6OlVwZGF0ZUF0bGFz
KToKKyAgICAgICAgKFdlYkNvcmU6OlVwZGF0ZUF0bGFzOjp+VXBkYXRlQXRsYXMpOgorICAgICAg
ICAoV2ViQ29yZTo6VXBkYXRlQXRsYXM6OmJ1aWxkTGF5b3V0SWZOZWVkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6VXBkYXRlQXRsYXM6OmRpZFN3YXBCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OlVwZGF0ZUF0bGFzOjpnZXRDb29yZGluYXRlZEJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1VwZGF0
ZUF0bGFzLmguCisgICAgICAgIChXZWJDb3JlOjpVcGRhdGVBdGxhczo6c2l6ZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpVcGRhdGVBdGxhczo6c3VwcG9ydHNBbHBoYSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpVcGRhdGVBdGxhczo6YWRkVGltZUluYWN0aXZlKToKKyAgICAgICAgKFdl
YkNvcmU6OlVwZGF0ZUF0bGFzOjppc0luYWN0aXZlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlVwZGF0ZUF0bGFzOjppc0luVXNlIGNvbnN0KToKKwogMjAxNy0xMi0xMSAgTWFudWVsIFJlZ28g
Q2FzYXNub3ZhcyAgPHJlZ29AaWdhbGlhLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyMjE5
MzEpOiBSb3cgc3RyZXRjaCBkb2Vzbid0IHdvcmsgZm9yIGdyaWQgY29udGFpbmVyIHdpdGggbWlu
LWhlaWdodApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwppbmRleCAwZDlkOWIxYzkxZjQ4MDcxNjY1NjA2MzlhZWE3YzcyODMwMDUx
NTc1Li4zMDlmNmZjMzlmOTA1ZGVhMDY0MTBiNTdmYWVjMGRiZDllYzNlNjdhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE5IEBACisyMDE3LTEyLTExICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdh
bGlhLmNvbT4KKworICAgICAgICBbQ29vcmRHcmFwaGljc10gTW92ZSBVcGRhdGVBdGxhcywgQXJl
YUFsbG9jYXRvciBpbnRvIHRoZSBwbGF0Zm9ybSBsYXllcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwNjQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgVXBkYXRlQXRsYXMgYW5kIEFyZWFB
bGxvY2F0b3IgY2xhc3NlcyBpbnRvIHRoZSBwbGF0Zm9ybSBsYXllciwKKyAgICAgICAgbW92aW5n
IG92ZXIgYnVpbGQgdGFyZ2V0cyBhbmQgYWRqdXN0IFVwZGF0ZUF0bGFzIGNsYXNzIHJlZmVyZW5j
ZXMgaW4KKyAgICAgICAgQ29tcG9zaXRpbmdDb29yZGluYXRvci4KKworICAgICAgICAqIFBsYXRm
b3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV1BFLmNtYWtlOgorICAgICAgICAqIFBs
YXRmb3JtV2luLmNtYWtlOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRl
ZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuaDoKKwogMjAxNy0xMi0xMCAgU3RlcGhh
biBTemFibyAgPHN0ZXBoYW4uc3phYm9Ac29ueS5jb20+CiAKICAgICAgICAgQVBJQ2xpZW50Lmgg
dXNlcyB0aGluZ3MgZnJvbSA8dHVwbGU+IHdpdGhvdXQgaW5jbHVkaW5nIGl0IGV4cGxpY2l0bHkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1RleHR1cmVNYXBwZXIuY21ha2Ug
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlCmluZGV4IDBkNmVk
MTkxZWViNmE4NzBiNzc5MGY0MDUxMWZmODJiOTA4NDgxMTcuLjVmNmI3ZjM0Y2U4NWUxZTYyZDIx
ZTJjM2ViZmJhZDc0NjhiNzUyZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1RleHR1cmVNYXBwZXIuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVGV4dHVy
ZU1hcHBlci5jbWFrZQpAQCAtMzUsMTAgKzM1LDEyIEBAIGlmIChVU0VfQ09PUkRJTkFURURfR1JB
UEhJQ1MpCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllckJ1ZmZlci5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuY3BwCiAKKyAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0b3IuY3BwCiAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
Y3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGlu
YXRlZEltYWdlQmFja2luZy5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nv
b3JkaW5hdGVkL1RpbGUuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29y
ZGluYXRlZC9UaWxlZEJhY2tpbmdTdG9yZS5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL2Nvb3JkaW5hdGVkL1VwZGF0ZUF0bGFzLmNwcAogICAgICkKIAogICAgICMgRklYTUU6
IE1vdmUgdGhpcyBpbnRvIE5pY29zaWEuY21ha2Ugb25jZSB0aGUgY29tcG9uZW50IGlzIHNldCBm
b3IgbG9uZy10ZXJtIHVzZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45OWRhYzVkNTczNzdmMDBlMzhhOTBiNDkxZGVmMTkxODIyMjlmZGQ1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0b3IuY3BwCkBAIC0wLDAgKzEsMzI2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJBcmVhQWxsb2NhdG9yLmgiCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQXJlYUFsbG9jYXRvcjo6QXJlYUFsbG9jYXRv
cihjb25zdCBJbnRTaXplJiBzaXplKQorICAgIDogbV9zaXplKHNpemUpCisgICAgLCBtX21pbkFs
bG9jKDEsIDEpCisgICAgLCBtX21hcmdpbigwLCAwKQoreworfQorCitBcmVhQWxsb2NhdG9yOjp+
QXJlYUFsbG9jYXRvcigpCit7Cit9CisKK3ZvaWQgQXJlYUFsbG9jYXRvcjo6ZXhwYW5kKGNvbnN0
IEludFNpemUmIHNpemUpCit7CisgICAgbV9zaXplID0gbV9zaXplLmV4cGFuZGVkVG8oc2l6ZSk7
Cit9CisKK3ZvaWQgQXJlYUFsbG9jYXRvcjo6ZXhwYW5kQnkoY29uc3QgSW50U2l6ZSYgc2l6ZSkK
K3sKKyAgICBtX3NpemUgKz0gc2l6ZTsKK30KKwordm9pZCBBcmVhQWxsb2NhdG9yOjpyZWxlYXNl
KGNvbnN0IEludFJlY3QmKQoreworfQorCitpbnQgQXJlYUFsbG9jYXRvcjo6b3ZlcmhlYWQoKSBj
b25zdAoreworICAgIHJldHVybiAwOworfQorCitJbnRTaXplIEFyZWFBbGxvY2F0b3I6OnJvdW5k
QWxsb2NhdGlvbihjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAoreworICAgIGludCB3aWR0aCA9
IHNpemUud2lkdGgoKSArIG1fbWFyZ2luLndpZHRoKCk7CisgICAgaW50IGhlaWdodCA9IHNpemUu
aGVpZ2h0KCkgKyBtX21hcmdpbi5oZWlnaHQoKTsKKyAgICBpbnQgZXh0cmEgPSB3aWR0aCAlIG1f
bWluQWxsb2Mud2lkdGgoKTsKKyAgICBpZiAoZXh0cmEpCisgICAgICAgIHdpZHRoICs9IG1fbWlu
QWxsb2Mud2lkdGgoKSAtIGV4dHJhOworICAgIGV4dHJhID0gaGVpZ2h0ICUgbV9taW5BbGxvYy5o
ZWlnaHQoKTsKKyAgICBpZiAoZXh0cmEpCisgICAgICAgIGhlaWdodCArPSBtX21pbkFsbG9jLmhl
aWdodCgpIC0gZXh0cmE7CisKKyAgICByZXR1cm4gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKK30K
KworR2VuZXJhbEFyZWFBbGxvY2F0b3I6OkdlbmVyYWxBcmVhQWxsb2NhdG9yKGNvbnN0IEludFNp
emUmIHNpemUpCisgICAgOiBBcmVhQWxsb2NhdG9yKG5leHRQb3dlck9mVHdvKHNpemUpKQorewor
ICAgIG1fcm9vdCA9IG5ldyBOb2RlKCk7CisgICAgbV9yb290LT5yZWN0ID0gSW50UmVjdCgwLCAw
LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICBtX3Jvb3QtPmxhcmdlc3RG
cmVlID0gbV9zaXplOworICAgIG1fbm9kZUNvdW50ID0gMTsKKyAgICBzZXRNaW5pbXVtQWxsb2Nh
dGlvbihJbnRTaXplKDgsIDgpKTsKK30KKworR2VuZXJhbEFyZWFBbGxvY2F0b3I6On5HZW5lcmFs
QXJlYUFsbG9jYXRvcigpCit7CisgICAgZnJlZU5vZGUobV9yb290KTsKK30KKwordm9pZCBHZW5l
cmFsQXJlYUFsbG9jYXRvcjo6ZnJlZU5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAobm9kZSkg
eworICAgICAgICBmcmVlTm9kZShub2RlLT5sZWZ0KTsKKyAgICAgICAgZnJlZU5vZGUobm9kZS0+
cmlnaHQpOworICAgIH0KKyAgICBkZWxldGUgbm9kZTsKK30KKwordm9pZCBHZW5lcmFsQXJlYUFs
bG9jYXRvcjo6ZXhwYW5kKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgQXJlYUFsbG9jYXRv
cjo6ZXhwYW5kKG5leHRQb3dlck9mVHdvKHNpemUpKTsKKworICAgIGlmIChtX3Jvb3QtPnJlY3Qu
c2l6ZSgpID09IG1fc2l6ZSkKKyAgICAgICAgcmV0dXJuOyAvLyBObyBjaGFuZ2UuCisKKyAgICBp
ZiAoIW1fcm9vdC0+bGVmdCAmJiBtX3Jvb3QtPmxhcmdlc3RGcmVlLndpZHRoKCkgPiAwKSB7Cisg
ICAgICAgIC8vIE5vIGFsbG9jYXRpb25zIGhhdmUgb2NjdXJyZWQsIHNvIGp1c3QgYWRqdXN0IHRo
ZSByb290IHNpemUuCisgICAgICAgIG1fcm9vdC0+cmVjdCA9IEludFJlY3QoMCwgMCwgbV9zaXpl
LndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIG1fcm9vdC0+bGFyZ2VzdEZyZWUg
PSBtX3NpemU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBBZGQgZXh0cmEgbm9k
ZXMgYWJvdmUgdGhlIGN1cnJlbnQgcm9vdCB0byBleHBhbmQgdGhlIHRyZWUuCisgICAgTm9kZSog
b2xkUm9vdCA9IG1fcm9vdDsKKyAgICBTcGxpdCBzcGxpdDsKKyAgICBpZiAobV9zaXplLndpZHRo
KCkgPj0gbV9zaXplLmhlaWdodCgpKQorICAgICAgICBzcGxpdCA9IFNwbGl0T25YOworICAgIGVs
c2UKKyAgICAgICAgc3BsaXQgPSBTcGxpdE9uWTsKKworICAgIHdoaWxlIChtX3Jvb3QtPnJlY3Qu
c2l6ZSgpICE9IG1fc2l6ZSkgeworICAgICAgICBpZiAobV9yb290LT5yZWN0LndpZHRoKCkgPT0g
bV9zaXplLndpZHRoKCkpCisgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOworICAgICAgICBl
bHNlIGlmIChtX3Jvb3QtPnJlY3QuaGVpZ2h0KCkgPT0gbV9zaXplLmhlaWdodCgpKQorICAgICAg
ICAgICAgc3BsaXQgPSBTcGxpdE9uWDsKKyAgICAgICAgTm9kZSogcGFyZW50ID0gbmV3IE5vZGUo
KTsKKyAgICAgICAgTm9kZSogcmlnaHQgPSBuZXcgTm9kZSgpOworICAgICAgICBtX25vZGVDb3Vu
dCArPSAyOworICAgICAgICBtX3Jvb3QtPnBhcmVudCA9IHBhcmVudDsKKyAgICAgICAgcGFyZW50
LT5wYXJlbnQgPSBudWxscHRyOworICAgICAgICBwYXJlbnQtPmxlZnQgPSBtX3Jvb3Q7CisgICAg
ICAgIHBhcmVudC0+cmlnaHQgPSByaWdodDsKKyAgICAgICAgcGFyZW50LT5sYXJnZXN0RnJlZSA9
IG1fcm9vdC0+cmVjdC5zaXplKCk7CisgICAgICAgIHJpZ2h0LT5wYXJlbnQgPSBwYXJlbnQ7Cisg
ICAgICAgIHJpZ2h0LT5sZWZ0ID0gbnVsbHB0cjsKKyAgICAgICAgcmlnaHQtPnJpZ2h0ID0gbnVs
bHB0cjsKKyAgICAgICAgcmlnaHQtPmxhcmdlc3RGcmVlID0gbV9yb290LT5yZWN0LnNpemUoKTsK
KyAgICAgICAgaWYgKHNwbGl0ID09IFNwbGl0T25YKSB7CisgICAgICAgICAgICBwYXJlbnQtPnJl
Y3QgPSBJbnRSZWN0KG1fcm9vdC0+cmVjdC54KCksIG1fcm9vdC0+cmVjdC55KCksCisgICAgICAg
ICAgICAgICAgbV9yb290LT5yZWN0LndpZHRoKCkgKiAyLCBtX3Jvb3QtPnJlY3QuaGVpZ2h0KCkp
OworICAgICAgICAgICAgcmlnaHQtPnJlY3QgPSBJbnRSZWN0KG1fcm9vdC0+cmVjdC54KCkgKyBt
X3Jvb3QtPnJlY3Qud2lkdGgoKSwgbV9yb290LT5yZWN0LnkoKSwKKyAgICAgICAgICAgICAgICBt
X3Jvb3QtPnJlY3Qud2lkdGgoKSwgbV9yb290LT5yZWN0LmhlaWdodCgpKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHBhcmVudC0+cmVjdCA9IEludFJlY3QobV9yb290LT5yZWN0Lngo
KSwgbV9yb290LT5yZWN0LnkoKSwKKyAgICAgICAgICAgICAgICBtX3Jvb3QtPnJlY3Qud2lkdGgo
KSwgbV9yb290LT5yZWN0LmhlaWdodCgpICogMik7CisgICAgICAgICAgICByaWdodC0+cmVjdCA9
IEludFJlY3QobV9yb290LT5yZWN0LngoKSwgbV9yb290LT5yZWN0LnkoKSArIG1fcm9vdC0+cmVj
dC53aWR0aCgpLAorICAgICAgICAgICAgICAgIG1fcm9vdC0+cmVjdC53aWR0aCgpLCBtX3Jvb3Qt
PnJlY3QuaGVpZ2h0KCkpOworICAgICAgICB9CisgICAgICAgIHNwbGl0ID0gKHNwbGl0ID09IFNw
bGl0T25YID8gU3BsaXRPblkgOiBTcGxpdE9uWCk7CisgICAgICAgIG1fcm9vdCA9IHBhcmVudDsK
KyAgICB9CisgICAgdXBkYXRlTGFyZ2VzdEZyZWUob2xkUm9vdCk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBmaXRzV2l0aGluKGNvbnN0IEludFNpemUmIHNpemUxLCBjb25zdCBJbnRTaXplJiBz
aXplMikKK3sKKyAgICByZXR1cm4gc2l6ZTEud2lkdGgoKSA8PSBzaXplMi53aWR0aCgpICYmIHNp
emUxLmhlaWdodCgpIDw9IHNpemUyLmhlaWdodCgpOworfQorCitJbnRSZWN0IEdlbmVyYWxBcmVh
QWxsb2NhdG9yOjphbGxvY2F0ZShjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIEludFNpemUg
cm91bmRlZCA9IHJvdW5kQWxsb2NhdGlvbihzaXplKTsKKyAgICByb3VuZGVkID0gbmV4dFBvd2Vy
T2ZUd28ocm91bmRlZCk7CisgICAgaWYgKHJvdW5kZWQud2lkdGgoKSA8PSAwIHx8IHJvdW5kZWQu
d2lkdGgoKSA+IG1fc2l6ZS53aWR0aCgpCisgICAgICAgIHx8IHJvdW5kZWQuaGVpZ2h0KCkgPD0g
MCB8fCByb3VuZGVkLmhlaWdodCgpID4gbV9zaXplLmhlaWdodCgpKQorICAgICAgICByZXR1cm4g
SW50UmVjdCgpOworCisgICAgSW50UG9pbnQgcG9pbnQgPSBhbGxvY2F0ZUZyb21Ob2RlKHJvdW5k
ZWQsIG1fcm9vdCk7CisgICAgaWYgKHBvaW50LngoKSA+PSAwKQorICAgICAgICByZXR1cm4gSW50
UmVjdChwb2ludCwgc2l6ZSk7CisgICAgcmV0dXJuIEludFJlY3QoKTsKK30KKworSW50UG9pbnQg
R2VuZXJhbEFyZWFBbGxvY2F0b3I6OmFsbG9jYXRlRnJvbU5vZGUoY29uc3QgSW50U2l6ZSYgc2l6
ZSwgTm9kZSogbm9kZSkKK3sKKyAgICAvLyBGaW5kIHRoZSBiZXN0IG5vZGUgdG8gaW5zZXJ0IGlu
dG8sIHdoaWNoIHNob3VsZCBiZQorICAgIC8vIGEgbm9kZSB3aXRoIHRoZSBsZWFzdCBhbW91bnQg
b2YgdW51c2VkIHNwYWNlIHRoYXQgaXMKKyAgICAvLyBiaWcgZW5vdWdoIHRvIGNvbnRhaW4gdGhl
IHJlcXVlc3RlZCBzaXplLgorICAgIHdoaWxlIChub2RlKSB7CisgICAgICAgIC8vIEdvIGRvd24g
YSBsZXZlbCBhbmQgZGV0ZXJtaW5lIGlmIHRoZSBsZWZ0IG9yIHJpZ2h0CisgICAgICAgIC8vIHN1
Yi10cmVlIGNvbnRhaW5zIHRoZSBiZXN0IGNoYW5jZSBvZiBhbGxvY2F0aW9uLgorICAgICAgICBO
b2RlKiBsZWZ0ID0gbm9kZS0+bGVmdDsKKyAgICAgICAgTm9kZSogcmlnaHQgPSBub2RlLT5yaWdo
dDsKKyAgICAgICAgaWYgKGxlZnQgJiYgZml0c1dpdGhpbihzaXplLCBsZWZ0LT5sYXJnZXN0RnJl
ZSkpIHsKKyAgICAgICAgICAgIGlmIChyaWdodCAmJiBmaXRzV2l0aGluKHNpemUsIHJpZ2h0LT5s
YXJnZXN0RnJlZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobGVmdC0+bGFyZ2VzdEZyZWUud2lk
dGgoKSA8IHJpZ2h0LT5sYXJnZXN0RnJlZS53aWR0aCgpCisgICAgICAgICAgICAgICAgICAgIHx8
IGxlZnQtPmxhcmdlc3RGcmVlLmhlaWdodCgpIDwgcmlnaHQtPmxhcmdlc3RGcmVlLmhlaWdodCgp
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBsYXJnZXN0RnJlZSB2YWx1ZXMgbWF5IGJl
IGEgbGl0dGxlIG92ZXJzaXplZCwKKyAgICAgICAgICAgICAgICAgICAgLy8gc28gdHJ5IHRoZSBs
ZWZ0IHN1Yi10cmVlIGFuZCB0aGVuIHRoZSByaWdodCBzdWItdHJlZS4KKyAgICAgICAgICAgICAg
ICAgICAgSW50UG9pbnQgcG9pbnQgPSBhbGxvY2F0ZUZyb21Ob2RlKHNpemUsIGxlZnQpOworICAg
ICAgICAgICAgICAgICAgICBpZiAocG9pbnQueCgpID49IDApCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcG9pbnQ7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZUZy
b21Ob2RlKHNpemUsIHJpZ2h0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
bm9kZSA9IHJpZ2h0OworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbm9kZSA9
IGxlZnQ7CisgICAgICAgIH0gZWxzZSBpZiAocmlnaHQgJiYgZml0c1dpdGhpbihzaXplLCByaWdo
dC0+bGFyZ2VzdEZyZWUpKQorICAgICAgICAgICAgbm9kZSA9IHJpZ2h0OworICAgICAgICBlbHNl
IGlmIChsZWZ0IHx8IHJpZ2h0KSB7CisgICAgICAgICAgICAvLyBOZWl0aGVyIHN1Yi1ub2RlIGhh
cyBlbm91Z2ggc3BhY2UgdG8gYWxsb2NhdGUgZnJvbS4KKyAgICAgICAgICAgIHJldHVybiBJbnRQ
b2ludCgtMSwgLTEpOworICAgICAgICB9IGVsc2UgaWYgKGZpdHNXaXRoaW4oc2l6ZSwgbm9kZS0+
bGFyZ2VzdEZyZWUpKSB7CisgICAgICAgICAgICAvLyBEbyB3ZSBuZWVkIHRvIHNwbGl0IHRoaXMg
bm9kZSBpbnRvIHNtYWxsZXIgcGllY2VzPworICAgICAgICAgICAgU3BsaXQgc3BsaXQ7CisgICAg
ICAgICAgICBpZiAoZml0c1dpdGhpbihJbnRTaXplKHNpemUud2lkdGgoKSAqIDIsIHNpemUuaGVp
Z2h0KCkgKiAyKSwgbm9kZS0+bGFyZ2VzdEZyZWUpKSB7CisgICAgICAgICAgICAgICAgLy8gU3Bs
aXQgaW4gZWl0aGVyIGRpcmVjdGlvbjogY2hvb3NlIHRoZSBpbnZlcnNlIG9mCisgICAgICAgICAg
ICAgICAgLy8gdGhlIHBhcmVudCBub2RlJ3Mgc3BsaXQgZGlyZWN0aW9uIHRvIHRyeSB0byBiYWxh
bmNlCisgICAgICAgICAgICAgICAgLy8gb3V0IHRoZSB3YXN0ZWQgc3BhY2UgYXMgZnVydGhlciBz
dWJkaXZpc2lvbnMgaGFwcGVuLgorICAgICAgICAgICAgICAgIGlmIChub2RlLT5wYXJlbnQKKyAg
ICAgICAgICAgICAgICAgICAgJiYgbm9kZS0+cGFyZW50LT5sZWZ0LT5yZWN0LngoKSA9PSBub2Rl
LT5wYXJlbnQtPnJpZ2h0LT5yZWN0LngoKSkKKyAgICAgICAgICAgICAgICAgICAgc3BsaXQgPSBT
cGxpdE9uWDsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5wYXJlbnQpCisgICAgICAg
ICAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
bm9kZS0+cmVjdC53aWR0aCgpID49IG5vZGUtPnJlY3QuaGVpZ2h0KCkpCisgICAgICAgICAgICAg
ICAgICAgIHNwbGl0ID0gU3BsaXRPblg7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOworICAgICAgICAgICAgfSBlbHNlIGlmIChmaXRz
V2l0aGluKEludFNpemUoc2l6ZS53aWR0aCgpICogMiwgc2l6ZS5oZWlnaHQoKSksIG5vZGUtPmxh
cmdlc3RGcmVlKSkgeworICAgICAgICAgICAgICAgIC8vIFNwbGl0IGFsb25nIHRoZSBYIGRpcmVj
dGlvbi4KKyAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25YOworICAgICAgICAgICAgfSBl
bHNlIGlmIChmaXRzV2l0aGluKEludFNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpICog
MiksIG5vZGUtPmxhcmdlc3RGcmVlKSkgeworICAgICAgICAgICAgICAgIC8vIFNwbGl0IGFsb25n
IHRoZSBZIGRpcmVjdGlvbi4KKyAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25ZOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBDYW5ub3Qgc3BsaXQgZnVydGhl
ciAtIGFsbG9jYXRlIHRoaXMgbm9kZS4KKyAgICAgICAgICAgICAgICBub2RlLT5sYXJnZXN0RnJl
ZSA9IEludFNpemUoMCwgMCk7CisgICAgICAgICAgICAgICAgdXBkYXRlTGFyZ2VzdEZyZWUobm9k
ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPnJlY3QubG9jYXRpb24oKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gU3BsaXQgdGhlIG5vZGUsIHRoZW4gZ28gYXJvdW5k
IGFnYWluIHVzaW5nIHRoZSBsZWZ0IHN1Yi10cmVlLgorICAgICAgICAgICAgbm9kZSA9IHNwbGl0
Tm9kZShub2RlLCBzcGxpdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBDYW5u
b3QgcG9zc2libHkgZml0IGludG8gdGhpcyBub2RlLgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEludFBvaW50KC0xLCAtMSk7Cit9CisKK0dlbmVyYWxB
cmVhQWxsb2NhdG9yOjpOb2RlKiBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6c3BsaXROb2RlKE5vZGUq
IG5vZGUsIFNwbGl0IHNwbGl0KQoreworICAgIE5vZGUqIGxlZnQgPSBuZXcgTm9kZSgpOworICAg
IGxlZnQtPnBhcmVudCA9IG5vZGU7CisgICAgTm9kZSogcmlnaHQgPSBuZXcgTm9kZSgpOworICAg
IHJpZ2h0LT5wYXJlbnQgPSBub2RlOworICAgIG5vZGUtPmxlZnQgPSBsZWZ0OworICAgIG5vZGUt
PnJpZ2h0ID0gcmlnaHQ7CisgICAgbV9ub2RlQ291bnQgKz0gMjsKKworICAgIGlmIChzcGxpdCA9
PSBTcGxpdE9uWCkgeworICAgICAgICBsZWZ0LT5yZWN0ID0gSW50UmVjdChub2RlLT5yZWN0Lngo
KSwgbm9kZS0+cmVjdC55KCksCisgICAgICAgICAgICBub2RlLT5yZWN0LndpZHRoKCkgLyAyLCBu
b2RlLT5yZWN0LmhlaWdodCgpKTsKKyAgICAgICAgcmlnaHQtPnJlY3QgPSBJbnRSZWN0KGxlZnQt
PnJlY3QubWF4WCgpLCBub2RlLT5yZWN0LnkoKSwKKyAgICAgICAgICAgIG5vZGUtPnJlY3Qud2lk
dGgoKSAvIDIsIG5vZGUtPnJlY3QuaGVpZ2h0KCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxl
ZnQtPnJlY3QgPSBJbnRSZWN0KG5vZGUtPnJlY3QueCgpLCBub2RlLT5yZWN0LnkoKSwKKyAgICAg
ICAgICAgIG5vZGUtPnJlY3Qud2lkdGgoKSwgbm9kZS0+cmVjdC5oZWlnaHQoKSAvIDIpOworICAg
ICAgICByaWdodC0+cmVjdCA9IEludFJlY3Qobm9kZS0+cmVjdC54KCksIGxlZnQtPnJlY3QubWF4
WSgpLAorICAgICAgICAgICAgbm9kZS0+cmVjdC53aWR0aCgpLCBub2RlLT5yZWN0LmhlaWdodCgp
IC8gMik7CisgICAgfQorCisgICAgbGVmdC0+bGFyZ2VzdEZyZWUgPSBsZWZ0LT5yZWN0LnNpemUo
KTsKKyAgICByaWdodC0+bGFyZ2VzdEZyZWUgPSByaWdodC0+cmVjdC5zaXplKCk7CisgICAgbm9k
ZS0+bGFyZ2VzdEZyZWUgPSByaWdodC0+bGFyZ2VzdEZyZWU7CisgICAgcmV0dXJuIGxlZnQ7Cit9
CisKK3ZvaWQgR2VuZXJhbEFyZWFBbGxvY2F0b3I6OnVwZGF0ZUxhcmdlc3RGcmVlKE5vZGUqIG5v
ZGUpCit7CisgICAgd2hpbGUgKChub2RlID0gbm9kZS0+cGFyZW50KSkgeworICAgICAgICBub2Rl
LT5sYXJnZXN0RnJlZSA9IEludFNpemUoCisgICAgICAgICAgICBzdGQ6Om1heChub2RlLT5sZWZ0
LT5sYXJnZXN0RnJlZS53aWR0aCgpLCBub2RlLT5yaWdodC0+bGFyZ2VzdEZyZWUud2lkdGgoKSks
CisgICAgICAgICAgICBzdGQ6Om1heChub2RlLT5sZWZ0LT5sYXJnZXN0RnJlZS5oZWlnaHQoKSwg
bm9kZS0+cmlnaHQtPmxhcmdlc3RGcmVlLmhlaWdodCgpKQorICAgICAgICAgICAgKTsKKyAgICB9
Cit9CisKK3ZvaWQgR2VuZXJhbEFyZWFBbGxvY2F0b3I6OnJlbGVhc2UoY29uc3QgSW50UmVjdCYg
cmVjdCkKK3sKKyAgICAvLyBMb2NhdGUgdGhlIG5vZGUgdGhhdCBjb250YWlucyB0aGUgYWxsb2Nh
dGVkIHJlZ2lvbi4KKyAgICBOb2RlKiBub2RlID0gbV9yb290OworICAgIEludFBvaW50IHBvaW50
ID0gcmVjdC5sb2NhdGlvbigpOworICAgIHdoaWxlIChub2RlKSB7CisgICAgICAgIGlmIChub2Rl
LT5sZWZ0ICYmIG5vZGUtPmxlZnQtPnJlY3QuY29udGFpbnMocG9pbnQpKQorICAgICAgICAgICAg
bm9kZSA9IG5vZGUtPmxlZnQ7CisgICAgICAgIGVsc2UgaWYgKG5vZGUtPnJpZ2h0ICYmIG5vZGUt
PnJpZ2h0LT5yZWN0LmNvbnRhaW5zKHBvaW50KSkKKyAgICAgICAgICAgIG5vZGUgPSBub2RlLT5y
aWdodDsKKyAgICAgICAgZWxzZSBpZiAobm9kZS0+cmVjdC5jb250YWlucyhwb2ludCkpCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuOyAvLyBQb2lu
dCBpcyBjb21wbGV0ZWx5IG91dHNpZGUgdGhlIHRyZWUuCisgICAgfQorICAgIGlmICghbm9kZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTWFyayB0aGUgbm9kZSBhcyBmcmVlIGFuZCB0aGVu
IHdvcmsgdXB3YXJkcyB0aHJvdWdoIHRoZSB0cmVlCisgICAgLy8gcmVjb21iaW5pbmcgYW5kIGRl
bGV0aW5nIG5vZGVzIHVudGlsIHdlIHJlYWNoIGEgc2libGluZworICAgIC8vIHRoYXQgaXMgc3Rp
bGwgYWxsb2NhdGVkLgorICAgIG5vZGUtPmxhcmdlc3RGcmVlID0gbm9kZS0+cmVjdC5zaXplKCk7
CisgICAgd2hpbGUgKG5vZGUtPnBhcmVudCkgeworICAgICAgICBpZiAobm9kZS0+cGFyZW50LT5s
ZWZ0ID09IG5vZGUpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5wYXJlbnQtPnJpZ2h0LT5sYXJn
ZXN0RnJlZSAhPSBub2RlLT5wYXJlbnQtPnJpZ2h0LT5yZWN0LnNpemUoKSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5wYXJl
bnQtPmxlZnQtPmxhcmdlc3RGcmVlICE9IG5vZGUtPnBhcmVudC0+bGVmdC0+cmVjdC5zaXplKCkp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbm9kZSA9IG5vZGUt
PnBhcmVudDsKKyAgICAgICAgZnJlZU5vZGUobm9kZS0+bGVmdCk7CisgICAgICAgIGZyZWVOb2Rl
KG5vZGUtPnJpZ2h0KTsKKyAgICAgICAgbV9ub2RlQ291bnQgLT0gMjsKKyAgICAgICAgbm9kZS0+
bGVmdCA9IG51bGxwdHI7CisgICAgICAgIG5vZGUtPnJpZ2h0ID0gbnVsbHB0cjsKKyAgICAgICAg
bm9kZS0+bGFyZ2VzdEZyZWUgPSBub2RlLT5yZWN0LnNpemUoKTsKKyAgICB9CisKKyAgICAvLyBN
YWtlIHRoZSByZXN0IG9mIG91ciBhbmNlc3RvcnMgaGF2ZSB0aGUgY29ycmVjdCAibGFyZ2VzdCBm
cmVlIHNpemUiLgorICAgIHVwZGF0ZUxhcmdlc3RGcmVlKG5vZGUpOworfQorCitpbnQgR2VuZXJh
bEFyZWFBbGxvY2F0b3I6Om92ZXJoZWFkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ub2RlQ291
bnQgKiBzaXplb2YoTm9kZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0FyZWFBbGxvY2F0b3IuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9BcmVhQWxs
b2NhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uY2ZkYzhmNzY1ZWM0YmMwZjEzNDNiNGU5ZjZhMmZiNDhkMzk5
M2MwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9BcmVhQWxsb2NhdG9yLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJJbnRQb2ludC5oIgor
I2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworaW5saW5lIGludCBuZXh0UG93ZXJPZlR3byhpbnQgbnVtYmVyKQoreworICAg
IC8vIFRoaXMgaXMgYSBmYXN0IHRyaWNrIHRvIGdldCBuZXh0UG93ZXJPZlR3byBmb3IgYW4gaW50
ZWdlci4KKyAgICAtLW51bWJlcjsKKyAgICBudW1iZXIgfD0gbnVtYmVyID4+IDE7CisgICAgbnVt
YmVyIHw9IG51bWJlciA+PiAyOworICAgIG51bWJlciB8PSBudW1iZXIgPj4gNDsKKyAgICBudW1i
ZXIgfD0gbnVtYmVyID4+IDg7CisgICAgbnVtYmVyIHw9IG51bWJlciA+PiAxNjsKKyAgICBudW1i
ZXIrKzsKKyAgICByZXR1cm4gbnVtYmVyOworfQorCitpbmxpbmUgSW50U2l6ZSBuZXh0UG93ZXJP
ZlR3byhjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHJldHVybiBJbnRTaXplKG5leHRQb3dl
ck9mVHdvKHNpemUud2lkdGgoKSksIG5leHRQb3dlck9mVHdvKHNpemUuaGVpZ2h0KCkpKTsKK30K
KworY2xhc3MgQXJlYUFsbG9jYXRvciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgZXhwbGljaXQgQXJlYUFsbG9jYXRvcihjb25zdCBJbnRTaXplJik7CisgICAg
dmlydHVhbCB+QXJlYUFsbG9jYXRvcigpOworCisgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaXplOyB9CisKKyAgICBJbnRTaXplIG1pbmltdW1BbGxvY2F0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9taW5BbGxvYzsgfQorICAgIHZvaWQgc2V0TWluaW11bUFsbG9jYXRpb24oY29u
c3QgSW50U2l6ZSYgc2l6ZSkgeyBtX21pbkFsbG9jID0gc2l6ZTsgfQorCisgICAgSW50U2l6ZSBt
YXJnaW4oKSBjb25zdCB7IHJldHVybiBtX21hcmdpbjsgfQorICAgIHZvaWQgc2V0TWFyZ2luKGNv
bnN0IEludFNpemUgJm1hcmdpbikgeyBtX21hcmdpbiA9IG1hcmdpbjsgfQorCisgICAgdmlydHVh
bCB2b2lkIGV4cGFuZChjb25zdCBJbnRTaXplJik7CisgICAgdm9pZCBleHBhbmRCeShjb25zdCBJ
bnRTaXplJik7CisKKyAgICB2aXJ0dWFsIEludFJlY3QgYWxsb2NhdGUoY29uc3QgSW50U2l6ZSYp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZShjb25zdCBJbnRSZWN0Jik7CisKKyAgICB2
aXJ0dWFsIGludCBvdmVyaGVhZCgpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgSW50U2l6ZSBt
X3NpemU7CisgICAgSW50U2l6ZSBtX21pbkFsbG9jOworICAgIEludFNpemUgbV9tYXJnaW47CisK
KyAgICBJbnRTaXplIHJvdW5kQWxsb2NhdGlvbihjb25zdCBJbnRTaXplJikgY29uc3Q7Cit9Owor
CitjbGFzcyBHZW5lcmFsQXJlYUFsbG9jYXRvciBmaW5hbCA6IHB1YmxpYyBBcmVhQWxsb2NhdG9y
IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBH
ZW5lcmFsQXJlYUFsbG9jYXRvcihjb25zdCBJbnRTaXplJik7CisgICAgdmlydHVhbCB+R2VuZXJh
bEFyZWFBbGxvY2F0b3IoKTsKKworICAgIHZvaWQgZXhwYW5kKGNvbnN0IEludFNpemUmKSBvdmVy
cmlkZTsKKyAgICBJbnRSZWN0IGFsbG9jYXRlKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHJlbGVhc2UoY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOworICAgIGludCBvdmVyaGVh
ZCgpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGVudW0gU3BsaXQgeyBTcGxpdE9u
WCwgU3BsaXRPblkgfTsKKworICAgIHN0cnVjdCBOb2RlIHsKKyAgICAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICBJbnRSZWN0IHJlY3Q7CisgICAgICAg
IEludFNpemUgbGFyZ2VzdEZyZWU7CisgICAgICAgIE5vZGUqIHBhcmVudCB7IG51bGxwdHIgfTsK
KyAgICAgICAgTm9kZSogbGVmdCB7IG51bGxwdHIgfTsKKyAgICAgICAgTm9kZSogcmlnaHQgeyBu
dWxscHRyIH07CisgICAgfTsKKworICAgIE5vZGUqIG1fcm9vdDsKKyAgICBpbnQgbV9ub2RlQ291
bnQ7CisKKyAgICBzdGF0aWMgdm9pZCBmcmVlTm9kZShOb2RlKik7CisgICAgSW50UG9pbnQgYWxs
b2NhdGVGcm9tTm9kZShjb25zdCBJbnRTaXplJiwgTm9kZSopOworICAgIE5vZGUqIHNwbGl0Tm9k
ZShOb2RlKiwgU3BsaXQpOworICAgIHN0YXRpYyB2b2lkIHVwZGF0ZUxhcmdlc3RGcmVlKE5vZGUq
KTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjMxYzU2ODJiZWQyNWJiMGFjMzAwNDVkYTEzZTM3NjcyMDI2OTNmMmQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRp
bmF0ZWQvVXBkYXRlQXRsYXMuY3BwCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgQ29weXJpZ2h0IChD
KSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorIENv
cHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5jLgorCisgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVXBkYXRlQXRsYXMuaCIKKworI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKworI2luY2x1ZGUgIkNvb3JkaW5hdGVkR3JhcGhp
Y3NTdGF0ZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitVcGRhdGVBdGxhczo6VXBkYXRlQXRsYXMoQ2xpZW50JiBjbGllbnQsIGNvbnN0IEludFNpemUm
IHNpemUsIE5pY29zaWE6OkJ1ZmZlcjo6RmxhZ3MgZmxhZ3MpCisgICAgOiBtX2NsaWVudChjbGll
bnQpCisgICAgLCBtX2J1ZmZlcihOaWNvc2lhOjpCdWZmZXI6OmNyZWF0ZShzaXplLCBmbGFncykp
Cit7CisgICAgc3RhdGljIElEIHNfbmV4dElEIHsgMCB9OworICAgIG1faWQgPSArK3NfbmV4dElE
OworCisgICAgbV9jbGllbnQuY3JlYXRlVXBkYXRlQXRsYXMobV9pZCwgbV9idWZmZXIuY29weVJl
ZigpKTsKK30KKworVXBkYXRlQXRsYXM6On5VcGRhdGVBdGxhcygpCit7CisgICAgbV9jbGllbnQu
cmVtb3ZlVXBkYXRlQXRsYXMobV9pZCk7Cit9CisKK3ZvaWQgVXBkYXRlQXRsYXM6OmJ1aWxkTGF5
b3V0SWZOZWVkZWQoKQoreworICAgIGlmIChtX2FyZWFBbGxvY2F0b3IpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX2FyZWFBbGxvY2F0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPEdlbmVyYWxBcmVhQWxs
b2NhdG9yPihzaXplKCkpOworICAgIG1fYXJlYUFsbG9jYXRvci0+c2V0TWluaW11bUFsbG9jYXRp
b24oSW50U2l6ZSgzMiwgMzIpKTsKK30KKwordm9pZCBVcGRhdGVBdGxhczo6ZGlkU3dhcEJ1ZmZl
cnMoKQoreworICAgIG1fYXJlYUFsbG9jYXRvciA9IG51bGxwdHI7Cit9CisKK1JlZlB0cjxOaWNv
c2lhOjpCdWZmZXI+IFVwZGF0ZUF0bGFzOjpnZXRDb29yZGluYXRlZEJ1ZmZlcihjb25zdCBJbnRT
aXplJiBzaXplLCB1aW50MzJfdCYgYXRsYXNJRCwgSW50UmVjdCYgYWxsb2NhdGVkUmVjdCkKK3sK
KyAgICBtX2luYWN0aXZpdHlJblNlY29uZHMgPSAwOworICAgIGJ1aWxkTGF5b3V0SWZOZWVkZWQo
KTsKKyAgICBhbGxvY2F0ZWRSZWN0ID0gbV9hcmVhQWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplKTsK
KworICAgIGlmIChhbGxvY2F0ZWRSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBhdGxhc0lEID0gbV9pZDsKKyAgICByZXR1cm4gbV9idWZmZXIuY29weVJlZigp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvY29vcmRpbmF0ZWQvVXBkYXRlQXRsYXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9VcGRhdGVBdGxhcy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmIyYjI2NjdjYjgwYzkyMjI4ZTgyZWNhMWE4MTg0ZDYxMzc4MzY4YWUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
VXBkYXRlQXRsYXMuaApAQCAtMCwwICsxLDc5IEBACisvKgorIENvcHlyaWdodCAoQykgMjAxMiBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyBDb3B5cmlnaHQg
KEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4KKworIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJBcmVhQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiTmljb3Np
YUJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbnRSZWN0OworY2xh
c3MgSW50U2l6ZTsKKworY2xhc3MgVXBkYXRlQXRsYXMgeworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFVwZGF0ZUF0bGFzKTsKK3B1YmxpYzoK
KyAgICB1c2luZyBJRCA9IHVpbnQzMl90OworCisgICAgY2xhc3MgQ2xpZW50IHsKKyAgICBwdWJs
aWM6CisgICAgICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyhJRCwgUmVmPE5pY29z
aWE6OkJ1ZmZlcj4mJikgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVXBkYXRlQXRs
YXMoSUQpID0gMDsKKyAgICB9OworCisgICAgVXBkYXRlQXRsYXMoQ2xpZW50JiwgY29uc3QgSW50
U2l6ZSYsIE5pY29zaWE6OkJ1ZmZlcjo6RmxhZ3MpOworICAgIH5VcGRhdGVBdGxhcygpOworCisg
ICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLT5zaXplKCk7
IH0KKworICAgIFJlZlB0cjxOaWNvc2lhOjpCdWZmZXI+IGdldENvb3JkaW5hdGVkQnVmZmVyKGNv
bnN0IEludFNpemUmLCB1aW50MzJfdCYsIEludFJlY3QmKTsKKyAgICB2b2lkIGRpZFN3YXBCdWZm
ZXJzKCk7CisgICAgYm9vbCBzdXBwb3J0c0FscGhhKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIt
PnN1cHBvcnRzQWxwaGEoKTsgfQorCisgICAgdm9pZCBhZGRUaW1lSW5hY3RpdmUoZG91YmxlIHNl
Y29uZHMpCisgICAgeworICAgICAgICBBU1NFUlQoIWlzSW5Vc2UoKSk7CisgICAgICAgIG1faW5h
Y3Rpdml0eUluU2Vjb25kcyArPSBzZWNvbmRzOworICAgIH0KKyAgICBib29sIGlzSW5hY3RpdmUo
KSBjb25zdAorICAgIHsKKyAgICAgICAgY29uc3QgZG91YmxlIGluYWN0aXZlU2Vjb25kc1RvbGVy
YW5jZSA9IDM7CisgICAgICAgIHJldHVybiBtX2luYWN0aXZpdHlJblNlY29uZHMgPiBpbmFjdGl2
ZVNlY29uZHNUb2xlcmFuY2U7CisgICAgfQorICAgIGJvb2wgaXNJblVzZSgpIGNvbnN0IHsgcmV0
dXJuICEhbV9hcmVhQWxsb2NhdG9yOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBidWlsZExheW91
dElmTmVlZGVkKCk7CisKKyAgICBJRCBtX2lkIHsgMCB9OworICAgIENsaWVudCYgbV9jbGllbnQ7
CisgICAgc3RkOjp1bmlxdWVfcHRyPEdlbmVyYWxBcmVhQWxsb2NhdG9yPiBtX2FyZWFBbGxvY2F0
b3I7CisgICAgUmVmPE5pY29zaWE6OkJ1ZmZlcj4gbV9idWZmZXI7CisgICAgZG91YmxlIG1faW5h
Y3Rpdml0eUluU2Vjb25kcyB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtR1RLLmNtYWtl
CmluZGV4IGNhMThlMTU1ZDE2ODAzZmViNTJhOTVjYzM3OTU5MTNhNTVjZGE4NWIuLjJhNTVlNGM4
Y2JjN2JlNTg3MTBiYzJlMDk1Y2VmOWFhN2M5MjJlMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybUdUSy5jbWFr
ZQpAQCAtMzg2LDExICszODYsOSBAQCBsaXN0KEFQUEVORCBXZWJLaXRfU09VUkNFUwogICAgIFdl
YlByb2Nlc3MvV2ViUGFnZS9BY2NlbGVyYXRlZERyYXdpbmdBcmVhLmNwcAogICAgIFdlYlByb2Nl
c3MvV2ViUGFnZS9BY2NlbGVyYXRlZFN1cmZhY2UuY3BwCiAKLSAgICBXZWJQcm9jZXNzL1dlYlBh
Z2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9BcmVhQWxsb2NhdG9yLmNwcAogICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwCiAg
ICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXll
clRyZWVIb3N0LmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L1RocmVhZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAotICAgIFdlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1VwZGF0ZUF0bGFzLmNwcAogCiAgICAgV2ViUHJvY2Vz
cy9XZWJQYWdlL0RyYXdpbmdBcmVhSW1wbC5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9QbGF0Zm9ybVdQRS5jbWFrZSBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm1XUEUuY21ha2UKaW5k
ZXggMmUwOTNjZjYwZWIwYTkyZWI1Zjk1NTdhMjI4ZWJkYWQwMWM1YjRiYi4uNmJhMjNmN2EzZGRh
NDQ2NjFmOTllOThhOGZmNTQ4OTM0OTAxZmE3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Q
bGF0Zm9ybVdQRS5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV1BFLmNtYWtlCkBA
IC0yNjAsMTEgKzI2MCw5IEBAIGxpc3QoQVBQRU5EIFdlYktpdF9TT1VSQ0VTCiAgICAgV2ViUHJv
Y2Vzcy9XZWJQYWdlL0FjY2VsZXJhdGVkRHJhd2luZ0FyZWEuY3BwCiAgICAgV2ViUHJvY2Vzcy9X
ZWJQYWdlL0FjY2VsZXJhdGVkU3VyZmFjZS5jcHAKIAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL0FyZWFBbGxvY2F0b3IuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5jcHAKICAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9Db29yZGluYXRlZExheWVyVHJl
ZUhvc3QuY3BwCiAgICAgV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVGhy
ZWFkZWRDb29yZGluYXRlZExheWVyVHJlZUhvc3QuY3BwCi0gICAgV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMuY3BwCiAKICAgICBXZWJQcm9jZXNzL1dl
YlBhZ2UvZ3N0cmVhbWVyL1dlYlBhZ2VHU3RyZWFtZXIuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtV2luLmNt
YWtlCmluZGV4IDQ4NzRjYjBiYzA0NmVjMTYxYzUxZmZkMWRlZDZmMzIxMWJmMzFmMGIuLjIxMTky
MDA5MjcxNjJiMTljODkwOTkyODdiYjA0ZTU5MWFmZjJjZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybVdpbi5j
bWFrZQpAQCAtNDYsMTEgKzQ2LDkgQEAgbGlzdChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAgICBX
ZWJQcm9jZXNzL1dlYlBhZ2UvQWNjZWxlcmF0ZWRTdXJmYWNlLmNwcAogICAgIFdlYlByb2Nlc3Mv
V2ViUGFnZS9EcmF3aW5nQXJlYUltcGwuY3BwCiAKLSAgICBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29v
cmRpbmF0ZWRHcmFwaGljcy9BcmVhQWxsb2NhdG9yLmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFn
ZS9Db29yZGluYXRlZEdyYXBoaWNzL0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuY3BwCiAgICAgV2Vi
UHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29vcmRpbmF0ZWRMYXllclRyZWVI
b3N0LmNwcAogICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL1RocmVh
ZGVkQ29vcmRpbmF0ZWRMYXllclRyZWVIb3N0LmNwcAotICAgIFdlYlByb2Nlc3MvV2ViUGFnZS9D
b29yZGluYXRlZEdyYXBoaWNzL1VwZGF0ZUF0bGFzLmNwcAogCiAgICAgV2ViUHJvY2Vzcy9XZWJQ
YWdlL3dpbi9XZWJJbnNwZWN0b3JVSVdpbi5jcHAKICAgICBXZWJQcm9jZXNzL1dlYlBhZ2Uvd2lu
L1dlYlBhZ2VXaW4uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db29yZGluYXRlZEdyYXBoaWNzL0FyZWFBbGxvY2F0b3IuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9BcmVhQWxsb2NhdG9yLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTllY2UxMjkwNzRkNTQ1ZTdjM2Q0YzFh
OTY1YmNhYjdmNTE2ZWVmYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBo
aWNzL0FyZWFBbGxvY2F0b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJz
aWRpYXJ5KC1pZXMpCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAq
Ci0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkFyZWFBbGxvY2F0b3IuaCIKLQotI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQg
ewotCi1BcmVhQWxsb2NhdG9yOjpBcmVhQWxsb2NhdG9yKGNvbnN0IEludFNpemUmIHNpemUpCi0g
ICAgOiBtX3NpemUoc2l6ZSkKLSAgICAsIG1fbWluQWxsb2MoMSwgMSkKLSAgICAsIG1fbWFyZ2lu
KDAsIDApCi17Ci19Ci0KLUFyZWFBbGxvY2F0b3I6On5BcmVhQWxsb2NhdG9yKCkKLXsKLX0KLQot
dm9pZCBBcmVhQWxsb2NhdG9yOjpleHBhbmQoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBt
X3NpemUgPSBtX3NpemUuZXhwYW5kZWRUbyhzaXplKTsKLX0KLQotdm9pZCBBcmVhQWxsb2NhdG9y
OjpleHBhbmRCeShjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIG1fc2l6ZSArPSBzaXplOwot
fQotCi12b2lkIEFyZWFBbGxvY2F0b3I6OnJlbGVhc2UoY29uc3QgSW50UmVjdCYpCi17Ci19Ci0K
LWludCBBcmVhQWxsb2NhdG9yOjpvdmVyaGVhZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLUludFNpemUgQXJlYUFsbG9jYXRvcjo6cm91bmRBbGxvY2F0aW9uKGNvbnN0IEludFNpemUm
IHNpemUpIGNvbnN0Ci17Ci0gICAgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpICsgbV9tYXJnaW4u
d2lkdGgoKTsKLSAgICBpbnQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKSArIG1fbWFyZ2luLmhlaWdo
dCgpOwotICAgIGludCBleHRyYSA9IHdpZHRoICUgbV9taW5BbGxvYy53aWR0aCgpOwotICAgIGlm
IChleHRyYSkKLSAgICAgICAgd2lkdGggKz0gbV9taW5BbGxvYy53aWR0aCgpIC0gZXh0cmE7Ci0g
ICAgZXh0cmEgPSBoZWlnaHQgJSBtX21pbkFsbG9jLmhlaWdodCgpOwotICAgIGlmIChleHRyYSkK
LSAgICAgICAgaGVpZ2h0ICs9IG1fbWluQWxsb2MuaGVpZ2h0KCkgLSBleHRyYTsKLQotICAgIHJl
dHVybiBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwotfQotCi1HZW5lcmFsQXJlYUFsbG9jYXRvcjo6
R2VuZXJhbEFyZWFBbGxvY2F0b3IoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLSAgICA6IEFyZWFBbGxv
Y2F0b3IobmV4dFBvd2VyT2ZUd28oc2l6ZSkpCi17Ci0gICAgbV9yb290ID0gbmV3IE5vZGUoKTsK
LSAgICBtX3Jvb3QtPnJlY3QgPSBJbnRSZWN0KDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUu
aGVpZ2h0KCkpOwotICAgIG1fcm9vdC0+bGFyZ2VzdEZyZWUgPSBtX3NpemU7Ci0gICAgbV9ub2Rl
Q291bnQgPSAxOwotICAgIHNldE1pbmltdW1BbGxvY2F0aW9uKEludFNpemUoOCwgOCkpOwotfQot
Ci1HZW5lcmFsQXJlYUFsbG9jYXRvcjo6fkdlbmVyYWxBcmVhQWxsb2NhdG9yKCkKLXsKLSAgICBm
cmVlTm9kZShtX3Jvb3QpOwotfQotCi12b2lkIEdlbmVyYWxBcmVhQWxsb2NhdG9yOjpmcmVlTm9k
ZShOb2RlKiBub2RlKQotewotICAgIGlmIChub2RlKSB7Ci0gICAgICAgIGZyZWVOb2RlKG5vZGUt
PmxlZnQpOwotICAgICAgICBmcmVlTm9kZShub2RlLT5yaWdodCk7Ci0gICAgfQotICAgIGRlbGV0
ZSBub2RlOwotfQotCi12b2lkIEdlbmVyYWxBcmVhQWxsb2NhdG9yOjpleHBhbmQoY29uc3QgSW50
U2l6ZSYgc2l6ZSkKLXsKLSAgICBBcmVhQWxsb2NhdG9yOjpleHBhbmQobmV4dFBvd2VyT2ZUd28o
c2l6ZSkpOwotCi0gICAgaWYgKG1fcm9vdC0+cmVjdC5zaXplKCkgPT0gbV9zaXplKQotICAgICAg
ICByZXR1cm47IC8vIE5vIGNoYW5nZS4KLQotICAgIGlmICghbV9yb290LT5sZWZ0ICYmIG1fcm9v
dC0+bGFyZ2VzdEZyZWUud2lkdGgoKSA+IDApIHsKLSAgICAgICAgLy8gTm8gYWxsb2NhdGlvbnMg
aGF2ZSBvY2N1cnJlZCwgc28ganVzdCBhZGp1c3QgdGhlIHJvb3Qgc2l6ZS4KLSAgICAgICAgbV9y
b290LT5yZWN0ID0gSW50UmVjdCgwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgp
KTsKLSAgICAgICAgbV9yb290LT5sYXJnZXN0RnJlZSA9IG1fc2l6ZTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIC8vIEFkZCBleHRyYSBub2RlcyBhYm92ZSB0aGUgY3VycmVudCByb290
IHRvIGV4cGFuZCB0aGUgdHJlZS4KLSAgICBOb2RlKiBvbGRSb290ID0gbV9yb290OwotICAgIFNw
bGl0IHNwbGl0OwotICAgIGlmIChtX3NpemUud2lkdGgoKSA+PSBtX3NpemUuaGVpZ2h0KCkpCi0g
ICAgICAgIHNwbGl0ID0gU3BsaXRPblg7Ci0gICAgZWxzZQotICAgICAgICBzcGxpdCA9IFNwbGl0
T25ZOwotCi0gICAgd2hpbGUgKG1fcm9vdC0+cmVjdC5zaXplKCkgIT0gbV9zaXplKSB7Ci0gICAg
ICAgIGlmIChtX3Jvb3QtPnJlY3Qud2lkdGgoKSA9PSBtX3NpemUud2lkdGgoKSkKLSAgICAgICAg
ICAgIHNwbGl0ID0gU3BsaXRPblk7Ci0gICAgICAgIGVsc2UgaWYgKG1fcm9vdC0+cmVjdC5oZWln
aHQoKSA9PSBtX3NpemUuaGVpZ2h0KCkpCi0gICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25YOwot
ICAgICAgICBOb2RlKiBwYXJlbnQgPSBuZXcgTm9kZSgpOwotICAgICAgICBOb2RlKiByaWdodCA9
IG5ldyBOb2RlKCk7Ci0gICAgICAgIG1fbm9kZUNvdW50ICs9IDI7Ci0gICAgICAgIG1fcm9vdC0+
cGFyZW50ID0gcGFyZW50OwotICAgICAgICBwYXJlbnQtPnBhcmVudCA9IG51bGxwdHI7Ci0gICAg
ICAgIHBhcmVudC0+bGVmdCA9IG1fcm9vdDsKLSAgICAgICAgcGFyZW50LT5yaWdodCA9IHJpZ2h0
OwotICAgICAgICBwYXJlbnQtPmxhcmdlc3RGcmVlID0gbV9yb290LT5yZWN0LnNpemUoKTsKLSAg
ICAgICAgcmlnaHQtPnBhcmVudCA9IHBhcmVudDsKLSAgICAgICAgcmlnaHQtPmxlZnQgPSBudWxs
cHRyOwotICAgICAgICByaWdodC0+cmlnaHQgPSBudWxscHRyOwotICAgICAgICByaWdodC0+bGFy
Z2VzdEZyZWUgPSBtX3Jvb3QtPnJlY3Quc2l6ZSgpOwotICAgICAgICBpZiAoc3BsaXQgPT0gU3Bs
aXRPblgpIHsKLSAgICAgICAgICAgIHBhcmVudC0+cmVjdCA9IEludFJlY3QobV9yb290LT5yZWN0
LngoKSwgbV9yb290LT5yZWN0LnkoKSwKLSAgICAgICAgICAgICAgICBtX3Jvb3QtPnJlY3Qud2lk
dGgoKSAqIDIsIG1fcm9vdC0+cmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgICAgICByaWdodC0+cmVj
dCA9IEludFJlY3QobV9yb290LT5yZWN0LngoKSArIG1fcm9vdC0+cmVjdC53aWR0aCgpLCBtX3Jv
b3QtPnJlY3QueSgpLAotICAgICAgICAgICAgICAgIG1fcm9vdC0+cmVjdC53aWR0aCgpLCBtX3Jv
b3QtPnJlY3QuaGVpZ2h0KCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGFyZW50
LT5yZWN0ID0gSW50UmVjdChtX3Jvb3QtPnJlY3QueCgpLCBtX3Jvb3QtPnJlY3QueSgpLAotICAg
ICAgICAgICAgICAgIG1fcm9vdC0+cmVjdC53aWR0aCgpLCBtX3Jvb3QtPnJlY3QuaGVpZ2h0KCkg
KiAyKTsKLSAgICAgICAgICAgIHJpZ2h0LT5yZWN0ID0gSW50UmVjdChtX3Jvb3QtPnJlY3QueCgp
LCBtX3Jvb3QtPnJlY3QueSgpICsgbV9yb290LT5yZWN0LndpZHRoKCksCi0gICAgICAgICAgICAg
ICAgbV9yb290LT5yZWN0LndpZHRoKCksIG1fcm9vdC0+cmVjdC5oZWlnaHQoKSk7Ci0gICAgICAg
IH0KLSAgICAgICAgc3BsaXQgPSAoc3BsaXQgPT0gU3BsaXRPblggPyBTcGxpdE9uWSA6IFNwbGl0
T25YKTsKLSAgICAgICAgbV9yb290ID0gcGFyZW50OwotICAgIH0KLSAgICB1cGRhdGVMYXJnZXN0
RnJlZShvbGRSb290KTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGZpdHNXaXRoaW4oY29uc3Qg
SW50U2l6ZSYgc2l6ZTEsIGNvbnN0IEludFNpemUmIHNpemUyKQotewotICAgIHJldHVybiBzaXpl
MS53aWR0aCgpIDw9IHNpemUyLndpZHRoKCkgJiYgc2l6ZTEuaGVpZ2h0KCkgPD0gc2l6ZTIuaGVp
Z2h0KCk7Ci19Ci0KLUludFJlY3QgR2VuZXJhbEFyZWFBbGxvY2F0b3I6OmFsbG9jYXRlKGNvbnN0
IEludFNpemUmIHNpemUpCi17Ci0gICAgSW50U2l6ZSByb3VuZGVkID0gcm91bmRBbGxvY2F0aW9u
KHNpemUpOwotICAgIHJvdW5kZWQgPSBuZXh0UG93ZXJPZlR3byhyb3VuZGVkKTsKLSAgICBpZiAo
cm91bmRlZC53aWR0aCgpIDw9IDAgfHwgcm91bmRlZC53aWR0aCgpID4gbV9zaXplLndpZHRoKCkK
LSAgICAgICAgfHwgcm91bmRlZC5oZWlnaHQoKSA8PSAwIHx8IHJvdW5kZWQuaGVpZ2h0KCkgPiBt
X3NpemUuaGVpZ2h0KCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KLSAgICBJbnRQb2lu
dCBwb2ludCA9IGFsbG9jYXRlRnJvbU5vZGUocm91bmRlZCwgbV9yb290KTsKLSAgICBpZiAocG9p
bnQueCgpID49IDApCi0gICAgICAgIHJldHVybiBJbnRSZWN0KHBvaW50LCBzaXplKTsKLSAgICBy
ZXR1cm4gSW50UmVjdCgpOwotfQotCi1JbnRQb2ludCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6YWxs
b2NhdGVGcm9tTm9kZShjb25zdCBJbnRTaXplJiBzaXplLCBOb2RlKiBub2RlKQotewotICAgIC8v
IEZpbmQgdGhlIGJlc3Qgbm9kZSB0byBpbnNlcnQgaW50bywgd2hpY2ggc2hvdWxkIGJlCi0gICAg
Ly8gYSBub2RlIHdpdGggdGhlIGxlYXN0IGFtb3VudCBvZiB1bnVzZWQgc3BhY2UgdGhhdCBpcwot
ICAgIC8vIGJpZyBlbm91Z2ggdG8gY29udGFpbiB0aGUgcmVxdWVzdGVkIHNpemUuCi0gICAgd2hp
bGUgKG5vZGUpIHsKLSAgICAgICAgLy8gR28gZG93biBhIGxldmVsIGFuZCBkZXRlcm1pbmUgaWYg
dGhlIGxlZnQgb3IgcmlnaHQKLSAgICAgICAgLy8gc3ViLXRyZWUgY29udGFpbnMgdGhlIGJlc3Qg
Y2hhbmNlIG9mIGFsbG9jYXRpb24uCi0gICAgICAgIE5vZGUqIGxlZnQgPSBub2RlLT5sZWZ0Owot
ICAgICAgICBOb2RlKiByaWdodCA9IG5vZGUtPnJpZ2h0OwotICAgICAgICBpZiAobGVmdCAmJiBm
aXRzV2l0aGluKHNpemUsIGxlZnQtPmxhcmdlc3RGcmVlKSkgewotICAgICAgICAgICAgaWYgKHJp
Z2h0ICYmIGZpdHNXaXRoaW4oc2l6ZSwgcmlnaHQtPmxhcmdlc3RGcmVlKSkgewotICAgICAgICAg
ICAgICAgIGlmIChsZWZ0LT5sYXJnZXN0RnJlZS53aWR0aCgpIDwgcmlnaHQtPmxhcmdlc3RGcmVl
LndpZHRoKCkKLSAgICAgICAgICAgICAgICAgICAgfHwgbGVmdC0+bGFyZ2VzdEZyZWUuaGVpZ2h0
KCkgPCByaWdodC0+bGFyZ2VzdEZyZWUuaGVpZ2h0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gVGhlIGxhcmdlc3RGcmVlIHZhbHVlcyBtYXkgYmUgYSBsaXR0bGUgb3ZlcnNpemVkLAotICAg
ICAgICAgICAgICAgICAgICAvLyBzbyB0cnkgdGhlIGxlZnQgc3ViLXRyZWUgYW5kIHRoZW4gdGhl
IHJpZ2h0IHN1Yi10cmVlLgotICAgICAgICAgICAgICAgICAgICBJbnRQb2ludCBwb2ludCA9IGFs
bG9jYXRlRnJvbU5vZGUoc2l6ZSwgbGVmdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwb2lu
dC54KCkgPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwb2ludDsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlRnJvbU5vZGUoc2l6ZSwgcmlnaHQpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBub2RlID0gcmlnaHQ7Ci0gICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICBub2RlID0gbGVmdDsKLSAgICAgICAgfSBlbHNlIGlm
IChyaWdodCAmJiBmaXRzV2l0aGluKHNpemUsIHJpZ2h0LT5sYXJnZXN0RnJlZSkpCi0gICAgICAg
ICAgICBub2RlID0gcmlnaHQ7Ci0gICAgICAgIGVsc2UgaWYgKGxlZnQgfHwgcmlnaHQpIHsKLSAg
ICAgICAgICAgIC8vIE5laXRoZXIgc3ViLW5vZGUgaGFzIGVub3VnaCBzcGFjZSB0byBhbGxvY2F0
ZSBmcm9tLgotICAgICAgICAgICAgcmV0dXJuIEludFBvaW50KC0xLCAtMSk7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoZml0c1dpdGhpbihzaXplLCBub2RlLT5sYXJnZXN0RnJlZSkpIHsKLSAgICAgICAg
ICAgIC8vIERvIHdlIG5lZWQgdG8gc3BsaXQgdGhpcyBub2RlIGludG8gc21hbGxlciBwaWVjZXM/
Ci0gICAgICAgICAgICBTcGxpdCBzcGxpdDsKLSAgICAgICAgICAgIGlmIChmaXRzV2l0aGluKElu
dFNpemUoc2l6ZS53aWR0aCgpICogMiwgc2l6ZS5oZWlnaHQoKSAqIDIpLCBub2RlLT5sYXJnZXN0
RnJlZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBTcGxpdCBpbiBlaXRoZXIgZGlyZWN0aW9uOiBj
aG9vc2UgdGhlIGludmVyc2Ugb2YKLSAgICAgICAgICAgICAgICAvLyB0aGUgcGFyZW50IG5vZGUn
cyBzcGxpdCBkaXJlY3Rpb24gdG8gdHJ5IHRvIGJhbGFuY2UKLSAgICAgICAgICAgICAgICAvLyBv
dXQgdGhlIHdhc3RlZCBzcGFjZSBhcyBmdXJ0aGVyIHN1YmRpdmlzaW9ucyBoYXBwZW4uCi0gICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPnBhcmVudAotICAgICAgICAgICAgICAgICAgICAmJiBub2Rl
LT5wYXJlbnQtPmxlZnQtPnJlY3QueCgpID09IG5vZGUtPnBhcmVudC0+cmlnaHQtPnJlY3QueCgp
KQotICAgICAgICAgICAgICAgICAgICBzcGxpdCA9IFNwbGl0T25YOwotICAgICAgICAgICAgICAg
IGVsc2UgaWYgKG5vZGUtPnBhcmVudCkKLSAgICAgICAgICAgICAgICAgICAgc3BsaXQgPSBTcGxp
dE9uWTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5yZWN0LndpZHRoKCkgPj0gbm9k
ZS0+cmVjdC5oZWlnaHQoKSkKLSAgICAgICAgICAgICAgICAgICAgc3BsaXQgPSBTcGxpdE9uWDsK
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHNwbGl0ID0gU3BsaXRP
blk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGZpdHNXaXRoaW4oSW50U2l6ZShzaXplLndpZHRo
KCkgKiAyLCBzaXplLmhlaWdodCgpKSwgbm9kZS0+bGFyZ2VzdEZyZWUpKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gU3BsaXQgYWxvbmcgdGhlIFggZGlyZWN0aW9uLgotICAgICAgICAgICAgICAgIHNw
bGl0ID0gU3BsaXRPblg7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGZpdHNXaXRoaW4oSW50U2l6
ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkgKiAyKSwgbm9kZS0+bGFyZ2VzdEZyZWUpKSB7
Ci0gICAgICAgICAgICAgICAgLy8gU3BsaXQgYWxvbmcgdGhlIFkgZGlyZWN0aW9uLgotICAgICAg
ICAgICAgICAgIHNwbGl0ID0gU3BsaXRPblk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIC8vIENhbm5vdCBzcGxpdCBmdXJ0aGVyIC0gYWxsb2NhdGUgdGhpcyBub2RlLgot
ICAgICAgICAgICAgICAgIG5vZGUtPmxhcmdlc3RGcmVlID0gSW50U2l6ZSgwLCAwKTsKLSAgICAg
ICAgICAgICAgICB1cGRhdGVMYXJnZXN0RnJlZShub2RlKTsKLSAgICAgICAgICAgICAgICByZXR1
cm4gbm9kZS0+cmVjdC5sb2NhdGlvbigpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAv
LyBTcGxpdCB0aGUgbm9kZSwgdGhlbiBnbyBhcm91bmQgYWdhaW4gdXNpbmcgdGhlIGxlZnQgc3Vi
LXRyZWUuCi0gICAgICAgICAgICBub2RlID0gc3BsaXROb2RlKG5vZGUsIHNwbGl0KTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIENhbm5vdCBwb3NzaWJseSBmaXQgaW50byB0aGlz
IG5vZGUuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
SW50UG9pbnQoLTEsIC0xKTsKLX0KLQotR2VuZXJhbEFyZWFBbGxvY2F0b3I6Ok5vZGUqIEdlbmVy
YWxBcmVhQWxsb2NhdG9yOjpzcGxpdE5vZGUoTm9kZSogbm9kZSwgU3BsaXQgc3BsaXQpCi17Ci0g
ICAgTm9kZSogbGVmdCA9IG5ldyBOb2RlKCk7Ci0gICAgbGVmdC0+cGFyZW50ID0gbm9kZTsKLSAg
ICBOb2RlKiByaWdodCA9IG5ldyBOb2RlKCk7Ci0gICAgcmlnaHQtPnBhcmVudCA9IG5vZGU7Ci0g
ICAgbm9kZS0+bGVmdCA9IGxlZnQ7Ci0gICAgbm9kZS0+cmlnaHQgPSByaWdodDsKLSAgICBtX25v
ZGVDb3VudCArPSAyOwotCi0gICAgaWYgKHNwbGl0ID09IFNwbGl0T25YKSB7Ci0gICAgICAgIGxl
ZnQtPnJlY3QgPSBJbnRSZWN0KG5vZGUtPnJlY3QueCgpLCBub2RlLT5yZWN0LnkoKSwKLSAgICAg
ICAgICAgIG5vZGUtPnJlY3Qud2lkdGgoKSAvIDIsIG5vZGUtPnJlY3QuaGVpZ2h0KCkpOwotICAg
ICAgICByaWdodC0+cmVjdCA9IEludFJlY3QobGVmdC0+cmVjdC5tYXhYKCksIG5vZGUtPnJlY3Qu
eSgpLAotICAgICAgICAgICAgbm9kZS0+cmVjdC53aWR0aCgpIC8gMiwgbm9kZS0+cmVjdC5oZWln
aHQoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbGVmdC0+cmVjdCA9IEludFJlY3Qobm9kZS0+
cmVjdC54KCksIG5vZGUtPnJlY3QueSgpLAotICAgICAgICAgICAgbm9kZS0+cmVjdC53aWR0aCgp
LCBub2RlLT5yZWN0LmhlaWdodCgpIC8gMik7Ci0gICAgICAgIHJpZ2h0LT5yZWN0ID0gSW50UmVj
dChub2RlLT5yZWN0LngoKSwgbGVmdC0+cmVjdC5tYXhZKCksCi0gICAgICAgICAgICBub2RlLT5y
ZWN0LndpZHRoKCksIG5vZGUtPnJlY3QuaGVpZ2h0KCkgLyAyKTsKLSAgICB9Ci0KLSAgICBsZWZ0
LT5sYXJnZXN0RnJlZSA9IGxlZnQtPnJlY3Quc2l6ZSgpOwotICAgIHJpZ2h0LT5sYXJnZXN0RnJl
ZSA9IHJpZ2h0LT5yZWN0LnNpemUoKTsKLSAgICBub2RlLT5sYXJnZXN0RnJlZSA9IHJpZ2h0LT5s
YXJnZXN0RnJlZTsKLSAgICByZXR1cm4gbGVmdDsKLX0KLQotdm9pZCBHZW5lcmFsQXJlYUFsbG9j
YXRvcjo6dXBkYXRlTGFyZ2VzdEZyZWUoTm9kZSogbm9kZSkKLXsKLSAgICB3aGlsZSAoKG5vZGUg
PSBub2RlLT5wYXJlbnQpKSB7Ci0gICAgICAgIG5vZGUtPmxhcmdlc3RGcmVlID0gSW50U2l6ZSgK
LSAgICAgICAgICAgIHN0ZDo6bWF4KG5vZGUtPmxlZnQtPmxhcmdlc3RGcmVlLndpZHRoKCksIG5v
ZGUtPnJpZ2h0LT5sYXJnZXN0RnJlZS53aWR0aCgpKSwKLSAgICAgICAgICAgIHN0ZDo6bWF4KG5v
ZGUtPmxlZnQtPmxhcmdlc3RGcmVlLmhlaWdodCgpLCBub2RlLT5yaWdodC0+bGFyZ2VzdEZyZWUu
aGVpZ2h0KCkpCi0gICAgICAgICAgICApOwotICAgIH0KLX0KLQotdm9pZCBHZW5lcmFsQXJlYUFs
bG9jYXRvcjo6cmVsZWFzZShjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIC8vIExvY2F0ZSB0
aGUgbm9kZSB0aGF0IGNvbnRhaW5zIHRoZSBhbGxvY2F0ZWQgcmVnaW9uLgotICAgIE5vZGUqIG5v
ZGUgPSBtX3Jvb3Q7Ci0gICAgSW50UG9pbnQgcG9pbnQgPSByZWN0LmxvY2F0aW9uKCk7Ci0gICAg
d2hpbGUgKG5vZGUpIHsKLSAgICAgICAgaWYgKG5vZGUtPmxlZnQgJiYgbm9kZS0+bGVmdC0+cmVj
dC5jb250YWlucyhwb2ludCkpCi0gICAgICAgICAgICBub2RlID0gbm9kZS0+bGVmdDsKLSAgICAg
ICAgZWxzZSBpZiAobm9kZS0+cmlnaHQgJiYgbm9kZS0+cmlnaHQtPnJlY3QuY29udGFpbnMocG9p
bnQpKQotICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnJpZ2h0OwotICAgICAgICBlbHNlIGlmIChu
b2RlLT5yZWN0LmNvbnRhaW5zKHBvaW50KSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICByZXR1cm47IC8vIFBvaW50IGlzIGNvbXBsZXRlbHkgb3V0c2lkZSB0
aGUgdHJlZS4KLSAgICB9Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBNYXJrIHRoZSBub2RlIGFzIGZyZWUgYW5kIHRoZW4gd29yayB1cHdhcmRzIHRocm91Z2ggdGhl
IHRyZWUKLSAgICAvLyByZWNvbWJpbmluZyBhbmQgZGVsZXRpbmcgbm9kZXMgdW50aWwgd2UgcmVh
Y2ggYSBzaWJsaW5nCi0gICAgLy8gdGhhdCBpcyBzdGlsbCBhbGxvY2F0ZWQuCi0gICAgbm9kZS0+
bGFyZ2VzdEZyZWUgPSBub2RlLT5yZWN0LnNpemUoKTsKLSAgICB3aGlsZSAobm9kZS0+cGFyZW50
KSB7Ci0gICAgICAgIGlmIChub2RlLT5wYXJlbnQtPmxlZnQgPT0gbm9kZSkgewotICAgICAgICAg
ICAgaWYgKG5vZGUtPnBhcmVudC0+cmlnaHQtPmxhcmdlc3RGcmVlICE9IG5vZGUtPnBhcmVudC0+
cmlnaHQtPnJlY3Quc2l6ZSgpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgaWYgKG5vZGUtPnBhcmVudC0+bGVmdC0+bGFyZ2VzdEZyZWUgIT0g
bm9kZS0+cGFyZW50LT5sZWZ0LT5yZWN0LnNpemUoKSkKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50OwotICAgICAgICBmcmVlTm9k
ZShub2RlLT5sZWZ0KTsKLSAgICAgICAgZnJlZU5vZGUobm9kZS0+cmlnaHQpOwotICAgICAgICBt
X25vZGVDb3VudCAtPSAyOwotICAgICAgICBub2RlLT5sZWZ0ID0gbnVsbHB0cjsKLSAgICAgICAg
bm9kZS0+cmlnaHQgPSBudWxscHRyOwotICAgICAgICBub2RlLT5sYXJnZXN0RnJlZSA9IG5vZGUt
PnJlY3Quc2l6ZSgpOwotICAgIH0KLQotICAgIC8vIE1ha2UgdGhlIHJlc3Qgb2Ygb3VyIGFuY2Vz
dG9ycyBoYXZlIHRoZSBjb3JyZWN0ICJsYXJnZXN0IGZyZWUgc2l6ZSIuCi0gICAgdXBkYXRlTGFy
Z2VzdEZyZWUobm9kZSk7Ci19Ci0KLWludCBHZW5lcmFsQXJlYUFsbG9jYXRvcjo6b3ZlcmhlYWQo
KSBjb25zdAotewotICAgIHJldHVybiBtX25vZGVDb3VudCAqIHNpemVvZihOb2RlKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGlu
YXRlZEdyYXBoaWNzL0FyZWFBbGxvY2F0b3IuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRvci5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAyMGNhZGQ2MTNmZmEyMzljMjJkMDNjZDY5YTZkYjczMTM1MmYyNDM5
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQXJlYUFsbG9jYXRv
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgot
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQotICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKLSAqCi0gKi8KLQotI2lmbmRlZiBBcmVhQWxsb2NhdG9yX2gKLSNkZWZpbmUg
QXJlYUFsbG9jYXRvcl9oCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0KLSNpbmNs
dWRlIDxXZWJDb3JlL0ludFBvaW50Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbnRSZWN0Lmg+Ci0j
aW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1pbmxp
bmUgaW50IG5leHRQb3dlck9mVHdvKGludCBudW1iZXIpCi17Ci0gICAgLy8gVGhpcyBpcyBhIGZh
c3QgdHJpY2sgdG8gZ2V0IG5leHRQb3dlck9mVHdvIGZvciBhbiBpbnRlZ2VyLgotICAgIC0tbnVt
YmVyOwotICAgIG51bWJlciB8PSBudW1iZXIgPj4gMTsKLSAgICBudW1iZXIgfD0gbnVtYmVyID4+
IDI7Ci0gICAgbnVtYmVyIHw9IG51bWJlciA+PiA0OwotICAgIG51bWJlciB8PSBudW1iZXIgPj4g
ODsKLSAgICBudW1iZXIgfD0gbnVtYmVyID4+IDE2OwotICAgIG51bWJlcisrOwotICAgIHJldHVy
biBudW1iZXI7Ci19Ci0KLWlubGluZSBXZWJDb3JlOjpJbnRTaXplIG5leHRQb3dlck9mVHdvKGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCi17Ci0gICAgcmV0dXJuIFdlYkNvcmU6OkludFNp
emUobmV4dFBvd2VyT2ZUd28oc2l6ZS53aWR0aCgpKSwgbmV4dFBvd2VyT2ZUd28oc2l6ZS5oZWln
aHQoKSkpOwotfQotCi1jbGFzcyBBcmVhQWxsb2NhdG9yIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBBcmVhQWxsb2NhdG9yKGNvbnN0IFdlYkNv
cmU6OkludFNpemUmKTsKLSAgICB2aXJ0dWFsIH5BcmVhQWxsb2NhdG9yKCk7Ci0KLSAgICBXZWJD
b3JlOjpJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLQotICAgIFdlYkNv
cmU6OkludFNpemUgbWluaW11bUFsbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21pbkFsbG9j
OyB9Ci0gICAgdm9pZCBzZXRNaW5pbXVtQWxsb2NhdGlvbihjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiBzaXplKSB7IG1fbWluQWxsb2MgPSBzaXplOyB9Ci0KLSAgICBXZWJDb3JlOjpJbnRTaXplIG1h
cmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFyZ2luOyB9Ci0gICAgdm9pZCBzZXRNYXJnaW4oY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSAmbWFyZ2luKSB7IG1fbWFyZ2luID0gbWFyZ2luOyB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgZXhwYW5kKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKLSAgICB2b2lk
IGV4cGFuZEJ5KGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKLQotICAgIHZpcnR1YWwgV2ViQ29y
ZTo6SW50UmVjdCBhbGxvY2F0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCByZWxlYXNlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKLQotICAgIHZpcnR1
YWwgaW50IG92ZXJoZWFkKCkgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICBXZWJDb3JlOjpJbnRT
aXplIG1fc2l6ZTsKLSAgICBXZWJDb3JlOjpJbnRTaXplIG1fbWluQWxsb2M7Ci0gICAgV2ViQ29y
ZTo6SW50U2l6ZSBtX21hcmdpbjsKLQotICAgIFdlYkNvcmU6OkludFNpemUgcm91bmRBbGxvY2F0
aW9uKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSBjb25zdDsKLX07Ci0KLWNsYXNzIEdlbmVyYWxB
cmVhQWxsb2NhdG9yIGZpbmFsIDogcHVibGljIEFyZWFBbGxvY2F0b3IgewotICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGV4cGxpY2l0IEdlbmVyYWxBcmVhQWxsb2Nh
dG9yKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKLSAgICB2aXJ0dWFsIH5HZW5lcmFsQXJlYUFs
bG9jYXRvcigpOwotCi0gICAgdm9pZCBleHBhbmQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpIG92
ZXJyaWRlOwotICAgIFdlYkNvcmU6OkludFJlY3QgYWxsb2NhdGUoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVsZWFzZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0
Jikgb3ZlcnJpZGU7Ci0gICAgaW50IG92ZXJoZWFkKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLXByaXZh
dGU6Ci0gICAgZW51bSBTcGxpdCB7IFNwbGl0T25YLCBTcGxpdE9uWSB9OwotCi0gICAgc3RydWN0
IE5vZGUgewotICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdDsKLSAgICAgICAgV2ViQ29yZTo6SW50U2l6ZSBs
YXJnZXN0RnJlZTsKLSAgICAgICAgTm9kZSogcGFyZW50IHsgbnVsbHB0ciB9OwotICAgICAgICBO
b2RlKiBsZWZ0IHsgbnVsbHB0ciB9OwotICAgICAgICBOb2RlKiByaWdodCB7IG51bGxwdHIgfTsK
LSAgICB9OwotCi0gICAgTm9kZSogbV9yb290OwotICAgIGludCBtX25vZGVDb3VudDsKLQotICAg
IHN0YXRpYyB2b2lkIGZyZWVOb2RlKE5vZGUqKTsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCBhbGxv
Y2F0ZUZyb21Ob2RlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBOb2RlKik7Ci0gICAgTm9kZSog
c3BsaXROb2RlKE5vZGUqLCBTcGxpdCk7Ci0gICAgc3RhdGljIHZvaWQgdXBkYXRlTGFyZ2VzdEZy
ZWUoTm9kZSopOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCi0jZW5kaWYgLy8gQXJlYUFsbG9jYXRvcl9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdyYXBoaWNz
L0NvbXBvc2l0aW5nQ29vcmRpbmF0b3IuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5oCmluZGV4IDc3
ZjE3MjgzNzQwYzVkZTIzMzIzZTA5Y2JjODA0NDQwZWI5NmFiYWQuLmY2Y2Q4NDEzNjA1NWU1ZjU5
ZWZjZmZkNTk5MWE2M2YzNTA5ZmQ2YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhp
Y3MvQ29tcG9zaXRpbmdDb29yZGluYXRvci5oCkBAIC0yOSw3ICsyOSw2IEBACiAKICNpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCiAKLSNpbmNsdWRlICJVcGRhdGVBdGxhcy5oIgogI2luY2x1
ZGUgPFdlYkNvcmUvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9Db29yZGluYXRlZEdyYXBoaWNzU3RhdGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Nvb3JkaW5h
dGVkSW1hZ2VCYWNraW5nLmg+CkBAIC0zOCw2ICszNyw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9H
cmFwaGljc0xheWVyRmFjdG9yeS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvTmljb3NpYUJ1ZmZlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVXBkYXRl
QXRsYXMuaD4KIAogbmFtZXNwYWNlIE5pY29zaWEgewogY2xhc3MgUGFpbnRpbmdFbmdpbmU7CkBA
IC01NCw3ICs1NCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgQ29tcG9zaXRpbmdDb29y
ZGluYXRvciBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50CiAgICAg
LCBwdWJsaWMgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyQ2xpZW50CiAgICAgLCBw
dWJsaWMgV2ViQ29yZTo6Q29vcmRpbmF0ZWRJbWFnZUJhY2tpbmc6OkNsaWVudAotICAgICwgcHVi
bGljIFVwZGF0ZUF0bGFzOjpDbGllbnQKKyAgICAsIHB1YmxpYyBXZWJDb3JlOjpVcGRhdGVBdGxh
czo6Q2xpZW50CiAgICAgLCBwdWJsaWMgV2ViQ29yZTo6R3JhcGhpY3NMYXllckZhY3Rvcnkgewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbXBvc2l0aW5nQ29vcmRpbmF0b3IpOwogcHVibGlj
OgpAQCAtMTIyLDggKzEyMiw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzeW5jTGF5ZXJTdGF0ZShX
ZWJDb3JlOjpDb29yZGluYXRlZExheWVySUQsIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NM
YXllclN0YXRlJikgb3ZlcnJpZGU7CiAKICAgICAvLyBVcGRhdGVBdGxhczo6Q2xpZW50Ci0gICAg
dm9pZCBjcmVhdGVVcGRhdGVBdGxhcyhVcGRhdGVBdGxhczo6SUQsIFJlZjxOaWNvc2lhOjpCdWZm
ZXI+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXMoVXBkYXRlQXRsYXM6
OklEKSBvdmVycmlkZTsKKyAgICB2b2lkIGNyZWF0ZVVwZGF0ZUF0bGFzKFdlYkNvcmU6OlVwZGF0
ZUF0bGFzOjpJRCwgUmVmPE5pY29zaWE6OkJ1ZmZlcj4mJikgb3ZlcnJpZGU7CisgICAgdm9pZCBy
ZW1vdmVVcGRhdGVBdGxhcyhXZWJDb3JlOjpVcGRhdGVBdGxhczo6SUQpIG92ZXJyaWRlOwogCiAg
ICAgLy8gR3JhcGhpY3NMYXllckZhY3RvcnkKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
R3JhcGhpY3NMYXllcj4gY3JlYXRlR3JhcGhpY3NMYXllcihXZWJDb3JlOjpHcmFwaGljc0xheWVy
OjpUeXBlLCBXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2xpZW50Jikgb3ZlcnJpZGU7CkBAIC0xNTMs
NyArMTUzLDcgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFdlYkNvcmU6OkNvb3JkaW5hdGVkSW1h
Z2VCYWNraW5nSUQsIFJlZlB0cjxXZWJDb3JlOjpDb29yZGluYXRlZEltYWdlQmFja2luZz4+IG1f
aW1hZ2VCYWNraW5nczsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxOaWNvc2lhOjpQYWludGluZ0Vu
Z2luZT4gbV9wYWludGluZ0VuZ2luZTsKLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFVwZGF0
ZUF0bGFzPj4gbV91cGRhdGVBdGxhc2VzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6VXBkYXRlQXRsYXM+PiBtX3VwZGF0ZUF0bGFzZXM7CiAgICAgVmVjdG9yPHVpbnQzMl90
PiBtX2F0bGFzZXNUb1JlbW92ZTsKIAogICAgIC8vIFdlIGRvbid0IHNlbmQgdGhlIG1lc3NhZ2Vz
IHJlbGF0ZWQgdG8gcmVsZWFzaW5nIHJlc291cmNlcyB0byByZW5kZXJlciBkdXJpbmcgcHVyZ2lu
ZywgYmVjYXVzZSByZW5kZXJlciBhbHJlYWR5IGhhZCByZW1vdmVkIGFsbCByZXNvdXJjZXMuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db29yZGluYXRlZEdy
YXBoaWNzL1VwZGF0ZUF0bGFzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA4Y2Q4ZTlkNWE0OWIzZjY5ZTg2Mjk3NTU1YmM0MWRjN2I2ZTlmYzVmLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3JhcGhpY3MvVXBkYXRlQXRsYXMuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoKLSBDb3B5cmlnaHQgKEMpIDIwMTIgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gQ29weXJpZ2h0IChD
KSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuCi0KLSBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0K
LSBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
LSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJVcGRhdGVBdGxhcy5oIgotCi0jaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQotCi0jaW5jbHVkZSA8V2ViQ29yZS9Db29yZGluYXRlZEdyYXBoaWNz
U3RhdGUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgotI2luY2x1ZGUg
PFdlYkNvcmUvSW50UmVjdC5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNw
YWNlIFdlYktpdCB7Ci0KLVVwZGF0ZUF0bGFzOjpVcGRhdGVBdGxhcyhDbGllbnQmIGNsaWVudCwg
Y29uc3QgSW50U2l6ZSYgc2l6ZSwgTmljb3NpYTo6QnVmZmVyOjpGbGFncyBmbGFncykKLSAgICA6
IG1fY2xpZW50KGNsaWVudCkKLSAgICAsIG1fYnVmZmVyKE5pY29zaWE6OkJ1ZmZlcjo6Y3JlYXRl
KHNpemUsIGZsYWdzKSkKLXsKLSAgICBzdGF0aWMgSUQgc19uZXh0SUQgeyAwIH07Ci0gICAgbV9p
ZCA9ICsrc19uZXh0SUQ7Ci0KLSAgICBtX2NsaWVudC5jcmVhdGVVcGRhdGVBdGxhcyhtX2lkLCBt
X2J1ZmZlci5jb3B5UmVmKCkpOwotfQotCi1VcGRhdGVBdGxhczo6flVwZGF0ZUF0bGFzKCkKLXsK
LSAgICBtX2NsaWVudC5yZW1vdmVVcGRhdGVBdGxhcyhtX2lkKTsKLX0KLQotdm9pZCBVcGRhdGVB
dGxhczo6YnVpbGRMYXlvdXRJZk5lZWRlZCgpCi17Ci0gICAgaWYgKG1fYXJlYUFsbG9jYXRvcikK
LSAgICAgICAgcmV0dXJuOwotICAgIG1fYXJlYUFsbG9jYXRvciA9IHN0ZDo6bWFrZV91bmlxdWU8
R2VuZXJhbEFyZWFBbGxvY2F0b3I+KHNpemUoKSk7Ci0gICAgbV9hcmVhQWxsb2NhdG9yLT5zZXRN
aW5pbXVtQWxsb2NhdGlvbihJbnRTaXplKDMyLCAzMikpOwotfQotCi12b2lkIFVwZGF0ZUF0bGFz
OjpkaWRTd2FwQnVmZmVycygpCi17Ci0gICAgbV9hcmVhQWxsb2NhdG9yID0gbnVsbHB0cjsKLX0K
LQotUmVmUHRyPE5pY29zaWE6OkJ1ZmZlcj4gVXBkYXRlQXRsYXM6OmdldENvb3JkaW5hdGVkQnVm
ZmVyKGNvbnN0IEludFNpemUmIHNpemUsIHVpbnQzMl90JiBhdGxhc0lELCBJbnRSZWN0JiBhbGxv
Y2F0ZWRSZWN0KQotewotICAgIG1faW5hY3Rpdml0eUluU2Vjb25kcyA9IDA7Ci0gICAgYnVpbGRM
YXlvdXRJZk5lZWRlZCgpOwotICAgIGFsbG9jYXRlZFJlY3QgPSBtX2FyZWFBbGxvY2F0b3ItPmFs
bG9jYXRlKHNpemUpOwotCi0gICAgaWYgKGFsbG9jYXRlZFJlY3QuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF0bGFzSUQgPSBtX2lkOwotICAgIHJldHVybiBtX2J1
ZmZlci5jb3B5UmVmKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8g
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxhcy5oIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29vcmRpbmF0ZWRHcmFwaGljcy9VcGRhdGVBdGxh
cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzczZWQ2ZDExOGU3ZWU5MzBmNTI5
MjRjYjRjMDM5YTBlZmQyYTQ3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nvb3JkaW5hdGVkR3Jh
cGhpY3MvVXBkYXRlQXRsYXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLS8qCi0g
Q29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFy
eSgtaWVzKQotIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5jLgotCi0gVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotCi0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCi0gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkFyZWFBbGxvY2F0b3Iu
aCIKLSNpbmNsdWRlIDxXZWJDb3JlL05pY29zaWFCdWZmZXIuaD4KLSNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBJbnRTaXplOwotfQotCi1uYW1lc3BhY2UgV2Vi
S2l0IHsKLQotY2xhc3MgVXBkYXRlQXRsYXMgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFVwZGF0ZUF0bGFzKTsKLXB1YmxpYzoKLSAgICB1
c2luZyBJRCA9IHVpbnQzMl90OwotCi0gICAgY2xhc3MgQ2xpZW50IHsKLSAgICBwdWJsaWM6Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVVcGRhdGVBdGxhcyhJRCwgUmVmPE5pY29zaWE6OkJ1
ZmZlcj4mJikgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlVXBkYXRlQXRsYXMoSUQp
ID0gMDsKLSAgICB9OwotCi0gICAgVXBkYXRlQXRsYXMoQ2xpZW50JiwgY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYsIE5pY29zaWE6OkJ1ZmZlcjo6RmxhZ3MpOwotICAgIH5VcGRhdGVBdGxhcygpOwot
Ci0gICAgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnVm
ZmVyLT5zaXplKCk7IH0KLQotICAgIFJlZlB0cjxOaWNvc2lhOjpCdWZmZXI+IGdldENvb3JkaW5h
dGVkQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCB1aW50MzJfdCYsIFdlYkNvcmU6Oklu
dFJlY3QmKTsKLSAgICB2b2lkIGRpZFN3YXBCdWZmZXJzKCk7Ci0gICAgYm9vbCBzdXBwb3J0c0Fs
cGhhKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXItPnN1cHBvcnRzQWxwaGEoKTsgfQotCi0gICAg
dm9pZCBhZGRUaW1lSW5hY3RpdmUoZG91YmxlIHNlY29uZHMpCi0gICAgewotICAgICAgICBBU1NF
UlQoIWlzSW5Vc2UoKSk7Ci0gICAgICAgIG1faW5hY3Rpdml0eUluU2Vjb25kcyArPSBzZWNvbmRz
OwotICAgIH0KLSAgICBib29sIGlzSW5hY3RpdmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgY29u
c3QgZG91YmxlIGluYWN0aXZlU2Vjb25kc1RvbGVyYW5jZSA9IDM7Ci0gICAgICAgIHJldHVybiBt
X2luYWN0aXZpdHlJblNlY29uZHMgPiBpbmFjdGl2ZVNlY29uZHNUb2xlcmFuY2U7Ci0gICAgfQot
ICAgIGJvb2wgaXNJblVzZSgpIGNvbnN0IHsgcmV0dXJuICEhbV9hcmVhQWxsb2NhdG9yOyB9Ci0K
LXByaXZhdGU6Ci0gICAgdm9pZCBidWlsZExheW91dElmTmVlZGVkKCk7Ci0KLSAgICBJRCBtX2lk
IHsgMCB9OwotICAgIENsaWVudCYgbV9jbGllbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdlbmVy
YWxBcmVhQWxsb2NhdG9yPiBtX2FyZWFBbGxvY2F0b3I7Ci0gICAgUmVmPE5pY29zaWE6OkJ1ZmZl
cj4gbV9idWZmZXI7Ci0gICAgZG91YmxlIG1faW5hY3Rpdml0eUluU2Vjb25kcyB7IDAgfTsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>