<?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>273070</bug_id>
          
          <creation_ts>2024-04-22 09:26:02 -0700</creation_ts>
          <short_desc>[WebGPU] https://philogb.github.io/page/indraspearls/ fails to compile shader</short_desc>
          <delta_ts>2024-05-13 03:43:28 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGPU</component>
          <version>Other</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="Mike Wyrzykowski">mwyrzykowski</reporter>
          <assigned_to name="Tadeu Zagallo">tzagallo</assigned_to>
          <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>2030251</commentid>
    <comment_count>0</comment_count>
      <attachid>471041</attachid>
    <who name="Mike Wyrzykowski">mwyrzykowski</who>
    <bug_when>2024-04-22 09:26:02 -0700</bug_when>
    <thetext>Created attachment 471041
WGSL source

Site is using something like:

for (var i = 0; i &lt; 250; i++) @diagnostic(off,derivative_uniformity) {

which we don&apos;t parse


1 error generated while compiling the shader:
307:38: Expected a {, but got a @


Attaching full WGSL source</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2030252</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2024-04-22 09:26:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/126865140&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2034585</commentid>
    <comment_count>2</comment_count>
    <who name="Tadeu Zagallo">tzagallo</who>
    <bug_when>2024-05-10 12:21:33 -0700</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/28400</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2034882</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2024-05-13 03:43:26 -0700</bug_when>
    <thetext>Committed 278682@main (1d59f80ecec0): &lt;https://commits.webkit.org/278682@main&gt;

Reviewed commits have been landed. Closing PR #28400 and removing active labels.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>471041</attachid>
            <date>2024-04-22 09:26:02 -0700</date>
            <delta_ts>2024-04-22 09:26:02 -0700</delta_ts>
            <desc>WGSL source</desc>
            <filename>wgsl.txt</filename>
            <type>text/plain</type>
            <size>52829</size>
            <attacher name="Mike Wyrzykowski">mwyrzykowski</attacher>
            
              <data encoding="base64">Ly8xNjQKc3RydWN0IENpcmNsZXNVbmlmb3JtIHsKICAgICBEX2E6IHZlYzQ8ZjMyPiwKICAgICBE
X0E6IHZlYzQ8ZjMyPiwKICAgICBEX2I6IHZlYzQ8ZjMyPiwKICAgICBEX0I6IHZlYzQ8ZjMyPiwK
ICAgICBtYXRfcmVfYTogdmVjNDxmMzI+LAogICAgIG1hdF9pbV9hOiB2ZWM0PGYzMj4sCiAgICAg
bWF0X3JlX2I6IHZlYzQ8ZjMyPiwKICAgICBtYXRfaW1fYjogdmVjNDxmMzI+LAogICAgIHRfYTog
dmVjNDxmMzI+LAogICAgIHZpZXdwb3J0OiB2ZWM0PGYzMj4sCiAgICAgbGV2ZWxzOiB2ZWM0PGYz
Mj4sCiAgICAgcm90YXRpb246IG1hdDR4NDxmMzI+LAogICAgIGRlbHRhOiB2ZWM0PGYzMj4sCiAg
ICAgYmJveDogdmVjNDxmMzI+LAogICAgLy9jYSBDQSBjYiBjQiByYW5nZSBbMC03XSBwYWxldHRl
cwogICAgIGNvbG9yUGFsZXR0ZXM6IHZlYzQ8ZjMyPiwKICAgICBjb3JuZXJzOiB2ZWM0PGYzMj4s
CiAgICAgcGFsZXR0ZTE6IHZlYzQ8ZjMyPiwKICAgICBwYWxldHRlMjogdmVjNDxmMzI+CiAgIH07
CgpAZ3JvdXAoMCkgQGJpbmRpbmcoMCkgdmFyPHVuaWZvcm0+IGNpcmNsZXM6IENpcmNsZXNVbmlm
b3JtOwoKQGdyb3VwKDEpIEBiaW5kaW5nKDApIHZhciBzYW1wbGVySW4gOiBzYW1wbGVyOwpAZ3Jv
dXAoMSkgQGJpbmRpbmcoMSkgdmFyIHRleHR1cmVJbiA6IHRleHR1cmVfMmQ8ZjMyPjsKQGdyb3Vw
KDEpIEBiaW5kaW5nKDIpIHZhciB0ZXh0dXJlQ29sb3IgOiB0ZXh0dXJlXzJkPGYzMj47CgpAZ3Jv
dXAoMikgQGJpbmRpbmcoMCkgdmFyIHNhbXBsZXJDYW52YXMgOiBzYW1wbGVyOwpAZ3JvdXAoMikg
QGJpbmRpbmcoMSkgdmFyIHRleHR1cmVDYW52YXMgOiB0ZXh0dXJlXzJkPGYzMj47CgpzdHJ1Y3Qg
VGV4IHsKICAgIEBsb2NhdGlvbigwKSB0ZXh0dXJlT3V0IDogdmVjNDxmMzI+LAp9OwoKLy8gaHR0
cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29tcGxleF9udW1iZXIjTXVsdGlwbGljYXRpb24K
CmZuIHByb2QoYzE6IHZlYzI8ZjMyPiwgYzI6IHZlYzI8ZjMyPikgLT4gdmVjMjxmMzI+IHsKICBy
ZXR1cm4gdmVjMjxmMzI+KGMxLnggKiBjMi54IC0gYzEueSAqIGMyLnksIGMxLnkgKiBjMi54ICsg
YzEueCAqIGMyLnkpOwp9CgpmbiBpbnYoejogdmVjMjxmMzI+KSAtPiB2ZWMyPGYzMj4gewogIGxl
dCBkID0gZG90KHosIHopOwogIHJldHVybiB2ZWMyPGYzMj4oei54LCAtei55KSAvIGQ7Cn0KCmZu
IGRpdihhOiB2ZWMyPGYzMj4sIGI6IHZlYzI8ZjMyPikgLT4gdmVjMjxmMzI+IHsKICAgIHJldHVy
biBwcm9kKGEsIGludihiKSk7Cn0KCmZuIGludmVyc2VNYXQobTogbWF0Mng0PGYzMj4pIC0+IG1h
dDJ4NDxmMzI+IHsKICAgIGxldCBtYXRfcmUgPSBtWzBdOwogICAgbGV0IG1hdF9pbSA9IG1bMV07
CiAgICBsZXQgYW5zX21hdF9yZSA9IHZlYzQ8ZjMyPigKICAgICAgICAgbWF0X3JlLncsIC1tYXRf
cmUueSwKICAgICAgICAtbWF0X3JlLnosICBtYXRfcmUueAogICAgKTsKICAgIGxldCBhbnNfbWF0
X2ltID0gdmVjNDxmMzI+KAogICAgICAgICBtYXRfaW0udywgLW1hdF9pbS55LAogICAgICAgIC1t
YXRfaW0ueiwgIG1hdF9pbS54CiAgICApOwogICAgcmV0dXJuIG1hdDJ4NDxmMzI+KAogICAgICAg
IGFuc19tYXRfcmUsIGFuc19tYXRfaW0KICAgICk7Cn0KCmZuIHN0ZXJlb1NwaGVyZTJQbGFuZShw
b3M6IHZlYzM8ZjMyPikgLT4gdmVjMjxmMzI+IHsKICAgIGxldCBkZW4gPSAxLiAtIHBvcy56Owog
ICAgcmV0dXJuIHZlYzI8ZjMyPihwb3MueCwgcG9zLnkpIC8gZGVuOwp9CgpmbiBzdGVyZW9QbGFu
ZTJTcGhlcmUocG9zOiB2ZWMyPGYzMj4pIC0+IHZlYzM8ZjMyPiB7CiAgICBsZXQgZGVuID0gcG9z
LnggKiBwb3MueCArIHBvcy55ICogcG9zLnkgKyAxLjsKICAgIHJldHVybiB2ZWMzPGYzMj4ocG9z
LngsIHBvcy55LCBwb3MueCAqIHBvcy54ICsgcG9zLnkgKiBwb3MueSkgLyBkZW47Cn0KCmZuIG1v
Yml1c09uUG9pbnQobTogbWF0Mng0PGYzMj4sIHo6IHZlYzI8ZjMyPikgLT4gdmVjMjxmMzI+IHsK
ICAgIGxldCBhID0gdmVjMjxmMzI+KG1bMF0ueCwgbVsxXS54KTsKICAgIGxldCBiID0gdmVjMjxm
MzI+KG1bMF0ueSwgbVsxXS55KTsKICAgIGxldCBjID0gdmVjMjxmMzI+KG1bMF0ueiwgbVsxXS56
KTsKICAgIGxldCBkID0gdmVjMjxmMzI+KG1bMF0udywgbVsxXS53KTsKCiAgICByZXR1cm4gZGl2
KAogICAgICAgIHByb2QoYSwgeikgKyBiLAogICAgICAgIHByb2QoYywgeikgKyBkCiAgICApOwp9
CgogICAgZm4gdHJhbnNmb3JtKAogICAgICAgIG1hdF9hOiBtYXQyeDQ8ZjMyPiwKICAgICAgICBt
YXRfQTogbWF0Mng0PGYzMj4sCiAgICAgICAgbWF0X2I6IG1hdDJ4NDxmMzI+LAogICAgICAgIG1h
dF9COiBtYXQyeDQ8ZjMyPiwKICAgICAgICBwOiB2ZWMyPGYzMj4pIC0+IHZlYzI8ZjMyPiB7CiAg
ICAgICAgaWYgKGNpcmNsZXMuRF9hLnogPCAwLikgewogICAgICAgICAgICBpZiAocC55ID4gMC4p
IHsKICAgICAgICAgICAgICAgIHJldHVybiBwOwogICAgICAgICAgICAgICAgLy9yZXR1cm4gbW9i
aXVzT25Qb2ludChtYXRfYSwgcCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICBsZXQgZDEgPSBkaXN0YW5jZShwLCBjaXJjbGVzLkRfYS54eSk7CiAgICAgICAgICAg
IGlmIChkMSA8PSBjaXJjbGVzLkRfYS56KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbW9iaXVz
T25Qb2ludChtYXRfYSwgcCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbGV0IGQy
ID0gZGlzdGFuY2UocCwgY2lyY2xlcy5EX0EueHkpOwogICAgICAgIGlmIChkMiA8PSBjaXJjbGVz
LkRfQS56KSB7CiAgICAgICAgICAgIHJldHVybiBtb2JpdXNPblBvaW50KG1hdF9BLCBwKTsKICAg
ICAgICB9CiAgICAgICAgbGV0IGQzID0gZGlzdGFuY2UocCwgY2lyY2xlcy5EX2IueHkpOwogICAg
ICAgIGlmIChkMyA8PSBjaXJjbGVzLkRfYi56KSB7CiAgICAgICAgICAgIHJldHVybiBtb2JpdXNP
blBvaW50KG1hdF9iLCBwKTsKICAgICAgICB9CiAgICAgICAgbGV0IGQ0ID0gZGlzdGFuY2UocCwg
Y2lyY2xlcy5EX0IueHkpOwogICAgICAgIGlmIChkNCA8PSBjaXJjbGVzLkRfQi56KSB7CiAgICAg
ICAgICAgIHJldHVybiBtb2JpdXNPblBvaW50KG1hdF9CLCBwKTsKICAgICAgICB9CiAgICAgICAg
cmV0dXJuIHA7CiAgICB9CgogICAgZm4gYmVsb25nc1RvRGlzayhwOiB2ZWMyPGYzMj4sIGM6IHZl
YzQ8ZjMyPiwgaW5kZXg6IGYzMiwgc3ltbWV0cnk6IGJvb2wpIC0+IHZlYzQ8ZjMyPiB7CiAgICAg
ICAgbGV0IGQxID0gZGlzdGFuY2UocCwgYy54eSk7CiAgICAgICAgaWYgKGQxIDw9IGMueikgewog
ICAgICAgICAgICByZXR1cm4gdmVjNDxmMzI+KGluZGV4LCAwLiwgMjU1LiwgMjU1LikgLyAyNTUu
OwogICAgICAgIH0KICAgICAgICBpZiAoc3ltbWV0cnkpIHsKICAgICAgICAgICAgbGV0IGNhMSA9
IHZlYzI8ZjMyPihjLngsIGNpcmNsZXMudmlld3BvcnQueSArIGNpcmNsZXMudmlld3BvcnQudyAt
IChjLnkgLSBjaXJjbGVzLnZpZXdwb3J0LnkpKTsKICAgICAgICAgICAgbGV0IGQxMSA9IGRpc3Rh
bmNlKHAsIGNhMSk7CiAgICAgICAgICAgIGlmIChkMTEgPD0gYy56KSB7CiAgICAgICAgICAgICAg
ICByZXR1cm4gdmVjNDxmMzI+KGluZGV4LCAwLiwgMjU1LiwgMjU1LikgLyAyNTUuOwogICAgICAg
ICAgICB9CiAgICAgICAgICAgIGxldCBjYTIgPSB2ZWMyPGYzMj4oY2lyY2xlcy52aWV3cG9ydC54
ICsgY2lyY2xlcy52aWV3cG9ydC56IC0gKGMueCAtIGNpcmNsZXMudmlld3BvcnQueCksIGMueSk7
CiAgICAgICAgICAgIGxldCBkMTIgPSBkaXN0YW5jZShwLCBjYTIpOwogICAgICAgICAgICBpZiAo
ZDEyIDw9IGMueikgewogICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQ8ZjMyPihpbmRleCwgMC4s
IDI1NS4sIDI1NS4pIC8gMjU1LjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1
cm4gdmVjNDxmMzI+KDAuLCAwLiwgMC4sIDAuKTsKICAgIH0KCiAgICBmbiBvdXRPZkJvdW5kcyhw
OiB2ZWMyPGYzMj4sIHN5bW1ldHJ5OiBib29sKSAtPiB2ZWM0PGYzMj4gewogICAgICAgIHZhciBw
b3MgPSBwOwogICAgICAgIGxldCBsID0gMC47CiAgICAgICAgaWYgKGNpcmNsZXMuRF9hLnogPCAw
LikgewogICAgICAgICAgICBpZiAocC55ID4gY2lyY2xlcy52aWV3cG9ydC53IC8gMi4gKyBjaXJj
bGVzLnZpZXdwb3J0LnkpIHsKICAgICAgICAgICAgICAgIC8vcmV0dXJuIHZlYzQ8ZjMyPigwLiwg
bCwgMC4sIDEuKTsKICAgICAgICAgICAgICAgIC8vcmV0dXJuIHZlYzQ8ZjMyPigwLiwgMC4sIDAu
LCAwLik7CiAgICAgICAgICAgICAgICBwb3MueSA9IGNpcmNsZXMudmlld3BvcnQueSArIChjaXJj
bGVzLnZpZXdwb3J0LncvMi4gLSBwLnkpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgbGV0IGFucyA9IGJlbG9uZ3NUb0Rpc2socCwgY2lyY2xlcy5EX2EsIDAuLCBz
eW1tZXRyeSk7CiAgICAgICAgICAgIGlmIChhbnMuYSAhPSAwLikgewogICAgICAgICAgICAgICAg
cmV0dXJuIGFuczsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBsZXQgYW5zX0EgPSBi
ZWxvbmdzVG9EaXNrKHAsIGNpcmNsZXMuRF9BLCAxLiwgc3ltbWV0cnkpOwogICAgICAgIGlmIChh
bnNfQS5hICE9IDAuKSB7CiAgICAgICAgICAgIHJldHVybiBhbnNfQTsKICAgICAgICB9CiAgICAg
ICAgbGV0IGFuc19iID0gYmVsb25nc1RvRGlzayhwLCBjaXJjbGVzLkRfYiwgMi4sIHN5bW1ldHJ5
KTsKICAgICAgICBpZiAoYW5zX2IuYSAhPSAwLikgewogICAgICAgICAgICByZXR1cm4gYW5zX2I7
CiAgICAgICAgfQogICAgICAgIGxldCBhbnNfQiA9IGJlbG9uZ3NUb0Rpc2socCwgY2lyY2xlcy5E
X0IsIDMuLCBzeW1tZXRyeSk7CiAgICAgICAgaWYgKGFuc19CLmEgIT0gMC4pIHsKICAgICAgICAg
ICAgcmV0dXJuIGFuc19COwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmVjNDxmMzI+KDAuLCAw
LiwgMC4sIDAuKTsKICAgIH0KCiAgICBmbiBjaGVja2VyYm9hcmQocDogdmVjMjxmMzI+LCBhbmds
ZTogZjMyKSAtPiBmMzIgewogICAgICAgIHJldHVybiAxLjsKLyoKICAgICAgICBsZXQgcGkgPSAz
LjE0MTU5MjY1MzU7CiAgICAgICAgdmFyIGFuZ2xlVmFsdWUgPSBhdGFuMihwLnksIHAueCk7CiAg
ICAgICAgaWYgKGFuZ2xlVmFsdWUgPCAwLikgewogICAgICAgICAgICBhbmdsZVZhbHVlID0gYW5n
bGVWYWx1ZSArIHBpICogMi47CiAgICAgICAgfQogICAgICAgIHZhciBjb3VudGVyID0gMC47CiAg
ICAgICAgZm9yICh2YXIgaSA9IDAuOyBpIDwgcGkgKiAyLjsgaSA9IGkgKyBhbmdsZSkgewogICAg
ICAgICAgICBpZiAoYW5nbGVWYWx1ZSA+PSBpICYmIGFuZ2xlVmFsdWUgPD0gaSArIGFuZ2xlKSB7
CiAgICAgICAgICAgICAgICByZXR1cm4gY291bnRlciAvIDAuNSArIDAuNTsKICAgICAgICAgICAg
fQogICAgICAgICAgICBjb3VudGVyID0gMS4gLSBjb3VudGVyOwogICAgICAgIH0KICAgICAgICBy
ZXR1cm4gY291bnRlciAvIDAuNSArIDAuNTsKKi8KICAgIH0KCiAgICBmbiBjb2xvckJhY2tncm91
bmQocDogdmVjMjxmMzI+KSAtPiB2ZWM0PGYzMj4gewogICAgICAgIGxldCBwaSA9IDMuMTQxNTky
NjUzNTsKICAgICAgICBsZXQgYW5nbGUgPSBwaS84LjsKICAgICAgICB2YXIgY2EgPSB2ZWM0PGYz
Mj4oMC4sIDAuLCAxLiwgMjU1LikgLyAyNTUuOwogICAgICAgIHZhciBjQSA9IHZlYzQ8ZjMyPigx
LiwgMC4sIDEuLCAyNTUuKSAvIDI1NS47CiAgICAgICAgdmFyIGNiID0gdmVjNDxmMzI+KDIuLCAw
LiwgMS4sIDI1NS4pIC8gMjU1LjsKICAgICAgICB2YXIgY0IgPSB2ZWM0PGYzMj4oMy4sIDAuLCAx
LiwgMjU1LikgLyAyNTUuOwogICAgICAgIHZhciBwb3MgPSBwOwoKICAgICAgICBpZiAoY2lyY2xl
cy5EX2EueiA8IDAuKSB7CiAgICAgICAgICAgIGlmIChwLnkgPiBjaXJjbGVzLnZpZXdwb3J0Lnkg
KyBjaXJjbGVzLnZpZXdwb3J0LncgLyAyLikgewogICAgICAgICAgICAgICAgcG9zLnkgPSBjaXJj
bGVzLnZpZXdwb3J0LnkgKyAoY2lyY2xlcy52aWV3cG9ydC53LzIuIC0gcC55KTsKICAgICAgICAg
ICAgICAgIC8vcmV0dXJuIGNhOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgbGV0IGQxID0gZGlzdGFuY2UocG9zLCBjaXJjbGVzLkRfYS54eSk7CiAgICAgICAgICAg
IGlmIChkMSA8PSBjaXJjbGVzLkRfYS56KSB7CiAgICAgICAgICAgICAgICBjYS5iID0gY2hlY2tl
cmJvYXJkKHBvcyAtIGNpcmNsZXMuRF9hLnh5LCBhbmdsZSk7CiAgICAgICAgICAgICAgICByZXR1
cm4gY2E7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbGV0IGQyID0gZGlzdGFuY2Uo
cG9zLCBjaXJjbGVzLkRfQS54eSk7CiAgICAgICAgaWYgKGQyIDw9IGNpcmNsZXMuRF9BLnopIHsK
ICAgICAgICAgICAgY0EuYiA9IGNoZWNrZXJib2FyZChwb3MgLSBjaXJjbGVzLkRfQS54eSwgYW5n
bGUpOwogICAgICAgICAgICByZXR1cm4gY0E7CiAgICAgICAgfQogICAgICAgIGxldCBkMyA9IGRp
c3RhbmNlKHBvcywgY2lyY2xlcy5EX2IueHkpOwogICAgICAgIGlmIChkMyA8PSBjaXJjbGVzLkRf
Yi56KSB7CiAgICAgICAgICAgIGNiLmIgPSBjaGVja2VyYm9hcmQocG9zIC0gY2lyY2xlcy5EX2Iu
eHksIGFuZ2xlKTsKICAgICAgICAgICAgcmV0dXJuIGNiOwogICAgICAgIH0KICAgICAgICBsZXQg
ZDQgPSBkaXN0YW5jZShwb3MsIGNpcmNsZXMuRF9CLnh5KTsKICAgICAgICBpZiAoZDQgPD0gY2ly
Y2xlcy5EX0IueikgewogICAgICAgICAgICBjQi5iID0gY2hlY2tlcmJvYXJkKHBvcyAtIGNpcmNs
ZXMuRF9CLnh5LCBhbmdsZSk7CiAgICAgICAgICAgIHJldHVybiBjQjsKICAgICAgICB9CiAgICAg
ICAgcmV0dXJuIHZlYzQ8ZjMyPigwLiwgMC4sIDAuLCAwLik7CiAgICB9CgoKICAgIGZuIGNpcmNs
ZUludmVydChwOiB2ZWMyPGYzMj4pIC0+IHZlYzI8ZjMyPiB7CiAgICAgICAgbGV0IGQxID0gZGlz
dGFuY2UocCwgY2lyY2xlcy5EX2EueHkpOwogICAgICAgIGlmIChkMSA8PSBjaXJjbGVzLkRfYS56
KSB7CiAgICAgICAgICAgIGxldCBSYTIgPSBjaXJjbGVzLkRfYS56ICogY2lyY2xlcy5EX2EuejsK
ICAgICAgICAgICAgbGV0IGQxMiA9IFJhMiAvIGQxIC0gZDE7CiAgICAgICAgICAgIGxldCBkaXJl
Y3Rpb24gPSBub3JtYWxpemUocCAtIGNpcmNsZXMuRF9hLnh5KSAqIGQxMjsKICAgICAgICAgICAg
cmV0dXJuIHAgKyBkaXJlY3Rpb247CiAgICAgICAgfQogICAgICAgIGxldCBkMiA9IGRpc3RhbmNl
KHAsIGNpcmNsZXMuRF9BLnh5KTsKICAgICAgICBpZiAoZDIgPD0gY2lyY2xlcy5EX0Eueikgewog
ICAgICAgICAgICBsZXQgUmEyID0gY2lyY2xlcy5EX0EueiAqIGNpcmNsZXMuRF9BLno7CiAgICAg
ICAgICAgIGxldCBkMjIgPSBSYTIgLyBkMiAtIGQyOwogICAgICAgICAgICBsZXQgZGlyZWN0aW9u
ID0gbm9ybWFsaXplKHAgLSBjaXJjbGVzLkRfQS54eSkgKiBkMjI7CiAgICAgICAgICAgIHJldHVy
biBwICsgZGlyZWN0aW9uOwogICAgICAgIH0KICAgICAgICBsZXQgZDMgPSBkaXN0YW5jZShwLCBj
aXJjbGVzLkRfYi54eSk7CiAgICAgICAgaWYgKGQzIDw9IGNpcmNsZXMuRF9iLnopIHsKICAgICAg
ICAgICAgbGV0IFJhMiA9IGNpcmNsZXMuRF9iLnogKiBjaXJjbGVzLkRfYi56OwogICAgICAgICAg
ICBsZXQgZDMyID0gUmEyIC8gZDMgLSBkMzsKICAgICAgICAgICAgbGV0IGRpcmVjdGlvbiA9IG5v
cm1hbGl6ZShwIC0gY2lyY2xlcy5EX2IueHkpICogZDMyOwogICAgICAgICAgICByZXR1cm4gcCAr
IGRpcmVjdGlvbjsKICAgICAgICB9CiAgICAgICAgbGV0IGQ0ID0gZGlzdGFuY2UocCwgY2lyY2xl
cy5EX0IueHkpOwogICAgICAgIGlmIChkNCA8PSBjaXJjbGVzLkRfQi56KSB7CiAgICAgICAgICAg
IGxldCBSYTIgPSBjaXJjbGVzLkRfQi56ICogY2lyY2xlcy5EX0IuejsKICAgICAgICAgICAgbGV0
IGQ0MiA9IFJhMiAvIGQ0IC0gZDQ7CiAgICAgICAgICAgIGxldCBkaXJlY3Rpb24gPSBub3JtYWxp
emUocCAtIGNpcmNsZXMuRF9CLnh5KSAqIGQ0MjsKICAgICAgICAgICAgcmV0dXJuIHAgKyBkaXJl
Y3Rpb247CiAgICAgICAgfQogICAgICAgIHJldHVybiBwOwogICAgfQoKICAgIGZuIG1vZHVsbyhh
OmYzMiwgYjpmMzIpIC0+IGYzMiB7CiAgICAgICAgcmV0dXJuIGEgLSAoYiAqIGZsb29yKGEvYikp
OwogICAgfQoKICAgIGZuIGNvbG9yUGFsZXR0ZShzY2FsZU46IGYzMiwgbGV2ZWw6IGYzMiwgY29s
b3JQYWxldHRlczogdmVjNDxmMzI+LCBsZXZlbHM6IGYzMikgLT4gdmVjMjxmMzI+IHsKICAgICAg
ICAvLyBnZXQgdGhlIHJpZ2h0IGNvbG9yIHNjYWxlCiAgICAgICAgbGV0IHRvdGFsU2NhbGVzID0g
OC47CiAgICAgICAgbGV0IHRvdGFsTGV2ZWxzID0gbGV2ZWxzICsgMC47CiAgICAgICAgaWYgKHNj
YWxlTiA8IDAuKSB7CiAgICAgICAgICAgIHJldHVybiB2ZWMyPGYzMj4oCiAgICAgICAgICAgICAg
ICAoKGxldmVsIC8gdG90YWxMZXZlbHMpKSwKICAgICAgICAgICAgICAgIDEuIC8gKHRvdGFsU2Nh
bGVzICogMi4pICsgMS4gLyB0b3RhbFNjYWxlcyAqIChhYnMoc2NhbGVOKS0xLikKICAgICAgICAg
ICAgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHZlYzI8ZjMyPigKICAgICAgICAgICAgMS4g
LSAobGV2ZWwgLyB0b3RhbExldmVscyksCiAgICAgICAgICAgIDEuIC8gKHRvdGFsU2NhbGVzICog
Mi4pICsgMS4gLyB0b3RhbFNjYWxlcyAqIChhYnMoc2NhbGVOKS0xLikKICAgICAgICApOwogICAg
fQoKICAgIGZuIG1hc2tpdCh2UG9zOiB2ZWMyPGYzMj4sIG1hdF9hOiBtYXQyeDQ8ZjMyPiwgbWF0
X0E6IG1hdDJ4NDxmMzI+KSAtPiB2ZWM0PGYzMj4gewogICAgICAgIHZhciB0ZXh0dXJlT3V0ID0g
dmVjNCgwLik7CiAgICAgICAgLy8gYmVnaW5uaW5nIG9mIGpvcyBsZXlzIGNvZGUKICAgICAgICB2
YXIgdXYgPSBjaXJjbGVzLnRfYS54eTsKICAgICAgICBsZXQgcGhhc2UgPSBjaXJjbGVzLmRlbHRh
Lnk7CgogICAgICAgIGxldCB2UG9zU2NhbGVkID0gdlBvcy8xLjsKICAgICAgICAvLyBIYW5kbGUg
QXhpcyByb3RhdGlvbgogICAgICAgIGxldCB2UG9zeTEgPSAodlBvc1NjYWxlZC55ICsgMS4vcGhh
c2UpKnV2LngvMi47CiAgICAgICAgbGV0IHZQb3N5MiA9ICh2UG9zU2NhbGVkLnkpOwogICAgICAg
IGxldCB2UG9zeTMgPSB2UG9zeTEgKyAodlBvc3kyIC0gdlBvc3kxKSAqIGNpcmNsZXMuZGVsdGEu
eDsKCiAgICAgICAgbGV0IHBTcGhlcmUgPSBzdGVyZW9QbGFuZTJTcGhlcmUodmVjMih2UG9zU2Nh
bGVkLngsIHZQb3N5MykpIC0gdmVjMzxmMzI+KDAuLCAwLiwgMC41KTsKICAgICAgICBsZXQgcFNw
aGVyZVJvdCA9IGNpcmNsZXMucm90YXRpb24gKiB2ZWM0PGYzMj4ocFNwaGVyZSwgMS4pOwogICAg
ICAgIHZhciBwb3MgPSBzdGVyZW9TcGhlcmUyUGxhbmUocFNwaGVyZVJvdC54eXogKyB2ZWMzPGYz
Mj4oMC4sIDAuLCAwLjUpKTsKCiAgICAgICAgcG9zID0gdmVjMihwb3MueCAqIHBoYXNlLCBwb3Mu
eSAqIHBoYXNlKTsKICAgICAgICBsZXQgTiA9IDEwMC47CiAgICAgICAgbGV0IGJsYWNrID0gdmVj
NCgwLjEsIDAuMiwgMC4yLCAwLjApOwogICAgICAgIGxldCBiYWNrWCA9IDEuIC0gKGNpcmNsZXMu
YmJveC55IC0gcG9zLngpIC8gKGNpcmNsZXMuYmJveC55IC0gY2lyY2xlcy5iYm94LngpOwogICAg
ICAgIGxldCBiYWNrWSA9IDEuIC0gKGNpcmNsZXMuYmJveC53IC0gcG9zLnkpIC8gKGNpcmNsZXMu
YmJveC53IC0gY2lyY2xlcy5iYm94LnopOwogICAgICAgIGxldCBiYWNrVGV4dHVyZSA9IHRleHR1
cmVTYW1wbGUodGV4dHVyZUNhbnZhcywgc2FtcGxlckNhbnZhcywgdmVjMihiYWNrWCwgYmFja1kp
KTsKICAgICAgICAvLyBCRUdJTiBMT09QCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTA7
IGkrKykgQGRpYWdub3N0aWMob2ZmLGRlcml2YXRpdmVfdW5pZm9ybWl0eSkgewogICAgICAgICAg
ICBwb3MueCA9IG1vZHVsbyhwb3MueCArIDIuICogTiAtIDEuICsgdXYueSAqIHBvcy55IC8gdXYu
eCwgMi4pIC0gMS4gLSB1di55ICogcG9zLnkgLyB1di54OwogICAgICAgICAgICBsZXQgdGV4ZWxY
ID0gMS4gLSAoY2lyY2xlcy5iYm94LnkgLSBwb3MueCkgLyAoY2lyY2xlcy5iYm94LnkgLSBjaXJj
bGVzLmJib3gueCk7CiAgICAgICAgICAgIGxldCB0ZXhlbFkgPSAxLiAtIChjaXJjbGVzLmJib3gu
dyAtIHBvcy55KSAvIChjaXJjbGVzLmJib3gudyAtIGNpcmNsZXMuYmJveC56KTsKICAgICAgICAg
ICAgdmFyIHRleGVsID0gdmVjMih0ZXhlbFgsIHRleGVsWSk7CiAgICAgICAgICAgIGlmIChjaXJj
bGVzLmJib3gueCA9PSAwLikgewogICAgICAgICAgICAgICAgdGV4ZWwgPSB2ZWMyKChwb3MueCAr
IDEuKS8yLiwgcG9zLnkgLyB1di54KTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgYW5z
ID0gdGV4dHVyZVNhbXBsZSh0ZXh0dXJlQ2FudmFzLCBzYW1wbGVyQ2FudmFzLCB0ZXhlbCk7CiAg
ICAgICAgICAgIGlmIChhbnMuZyA+IDAuKSB7CiAgICAgICAgICAgICAgICBwb3MueCA9IHBvcy54
ICsgY2lyY2xlcy5jb3JuZXJzLng7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGFucy5i
ID4gMC4pIHsKICAgICAgICAgICAgICAgIHBvcy54ID0gcG9zLnggLSBjaXJjbGVzLmNvcm5lcnMu
eDsKICAgICAgICAgICAgfQogICAgICAgICAgICBsZXQgZmkgPSAxLiAvIHNxcnQoZjMyKGkpKSAv
IDIuOwoKICAgICAgICAgICAgbGV0IHNjYWxlMSA9IGNpcmNsZXMucGFsZXR0ZTEueDsKICAgICAg
ICAgICAgdmFyIHJldmVyc2UgPSAxLjsKICAgICAgICAgICAgaWYgKGNpcmNsZXMucGFsZXR0ZTEu
eSA+IDAuKSB7CiAgICAgICAgICAgICAgICByZXZlcnNlID0gLTEuOwogICAgICAgICAgICB9CiAg
ICAgICAgICAgIHZhciBsZW4xID0gYWJzKHBvcy55IC0gdXYueCkvMTAuICsgMS47CiAgICAgICAg
ICAgIGlmIChjaXJjbGVzLnBhbGV0dGUxLncgPiAwLikgewogICAgICAgICAgICAgICAgbGVuMSA9
IHJvdW5kKGFicyhwb3MueSAtIHV2LngpKS8xMC4gKyAxLjsKICAgICAgICAgICAgfQogICAgICAg
ICAgICBsZXQgdXZDb2xvcjEgPSBjb2xvclBhbGV0dGUoc2NhbGUxICogcmV2ZXJzZSwgZjMyKGkq
aSksIGNpcmNsZXMuY29sb3JQYWxldHRlcywgMjUwLiouNyk7CiAgICAgICAgICAgIGxldCBjb2xv
cjEgPSB0ZXh0dXJlU2FtcGxlKHRleHR1cmVDb2xvciwgc2FtcGxlckluLCB1dkNvbG9yMSk7CiAg
ICAgICAgICAgIHRleHR1cmVPdXQgPSB2ZWM0PGYzMj4oY29sb3IxLnJnYiwgMS4gLyBsZW4xKTsv
LzEuL2ZpKTsKICAgICAgICAgICAgaWYgKGNpcmNsZXMucGFsZXR0ZTEueiA9PSAxLikgewogICAg
ICAgICAgICAgICAgdGV4dHVyZU91dCA9IHZlYzQ8ZjMyPihjb2xvcjEucmdiIC8gbGVuMSwgMS4p
OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChjaXJjbGVzLnBhbGV0dGUxLnogPT0gMi4p
IHsKICAgICAgICAgICAgICAgIHRleHR1cmVPdXQgPSB2ZWM0PGYzMj4oY29sb3IxLnJnYiwgMS4p
OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAocG9zLnkgPiB1di54KSB7CiAgICAgICAg
ICAgICAgICByZXR1cm4gdGV4dHVyZU91dDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGV0
IHNjYWxlMiA9IGNpcmNsZXMucGFsZXR0ZTIueDsKICAgICAgICAgICAgcmV2ZXJzZSA9IDEuOwog
ICAgICAgICAgICBpZiAoY2lyY2xlcy5wYWxldHRlMi55ID4gMC4pIHsKICAgICAgICAgICAgICAg
IHJldmVyc2UgPSAtMS47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIGxlbjIgPSBhYnMo
cG9zLnkpLzEwLiArIDEuOwogICAgICAgICAgICBpZiAoY2lyY2xlcy5wYWxldHRlMi53ID4gMC4p
IHsKICAgICAgICAgICAgICAgIGxlbjIgPSByb3VuZChhYnMocG9zLnkpKS8xMC4gKyAxLjsKICAg
ICAgICAgICAgfQogICAgICAgICAgICBsZXQgdXZDb2xvcjIgPSBjb2xvclBhbGV0dGUoc2NhbGUy
ICogcmV2ZXJzZSwgZjMyKGkqaSksIGNpcmNsZXMuY29sb3JQYWxldHRlcywgMjUwLiouNyk7CiAg
ICAgICAgICAgIGxldCBjb2xvcjIgPSB0ZXh0dXJlU2FtcGxlKHRleHR1cmVDb2xvciwgc2FtcGxl
ckluLCB1dkNvbG9yMik7CiAgICAgICAgICAgIHRleHR1cmVPdXQgPSB2ZWM0PGYzMj4oY29sb3Iy
LnJnYiwgMS4gLyBsZW4yKTsvLzEuL2ZpKTsKICAgICAgICAgICAgaWYgKGNpcmNsZXMucGFsZXR0
ZTIueiA9PSAxLikgewogICAgICAgICAgICAgICAgdGV4dHVyZU91dCA9IHZlYzQ8ZjMyPihjb2xv
cjIucmdiIC8gbGVuMiwgMS4pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChjaXJjbGVz
LnBhbGV0dGUyLnogPT0gMi4pIHsKICAgICAgICAgICAgICAgIHRleHR1cmVPdXQgPSB2ZWM0PGYz
Mj4oY29sb3IyLnJnYiwgMS4pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChwb3MueSA8
IDAuKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZU91dDsKICAgICAgICAgICAgfQog
ICAgICAgICAgICBpZiAoYW5zLnIgPiAwLikgewogICAgICAgICAgICAgICAgcG9zID0gbW9iaXVz
T25Qb2ludChtYXRfQSwgcG9zKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
IHBvcyA9IG1vYml1c09uUG9pbnQobWF0X2EsIHBvcyk7CiAgICAgICAgICAgIH0KICAgICAgICB9
CiAgICAgICAgLy8gRU5ETE9PUAogICAgICAgIGxldCBsZW4zID0gbGVuZ3RoKHBvcyk7Ly8gKyAx
LjsKICAgICAgICB0ZXh0dXJlT3V0ID0gYmxhY2s7CiAgICAgICAgLy90ZXh0dXJlT3V0ID0gbWl4
KGJsYWNrLCBiYWNrVGV4dHVyZSAqIHZlYzQ8ZjMyPigwLjUsIDAuNSwgMS4sIDEuKSwgMC41KTsK
ICAgICAgICByZXR1cm4gdGV4dHVyZU91dDsKICAgICAgICAvLyBlbmQgb2Ygam9zIGxleXMgY29k
ZQogICAgfQoKICBAZnJhZ21lbnQKICBmbiBtYWluKAogICAgQGxvY2F0aW9uKDApIHZQb3M6IHZl
YzI8ZjMyPgogICkgLT4gVGV4IHsKICB2YXIgb3V0cHV0IDogVGV4OwoKICBsZXQgbWF0X2EgPSBt
YXQyeDQ8ZjMyPigKICAgICAgY2lyY2xlcy5tYXRfcmVfYSwgY2lyY2xlcy5tYXRfaW1fYQogICk7
CiAgbGV0IG1hdF9BID0gaW52ZXJzZU1hdChtYXRfYSk7CiAgbGV0IG1hdF9iID0gbWF0Mng0PGYz
Mj4oCiAgICAgIGNpcmNsZXMubWF0X3JlX2IsIGNpcmNsZXMubWF0X2ltX2IKICApOwogIGxldCBt
YXRfQiA9IGludmVyc2VNYXQobWF0X2IpOwoKICBpZiAoY2lyY2xlcy5jb3JuZXJzLnkgPiAwLikg
ewogICAgb3V0cHV0LnRleHR1cmVPdXQgPSBtYXNraXQodlBvcywgbWF0X2EsIG1hdF9BKTsKICAg
IHJldHVybiBvdXRwdXQ7CiAgfQoKICBsZXQgcCA9IHZlYzI8ZjMyPigodlBvcy54ICsgMS4pIC8g
Mi4gKiBjaXJjbGVzLnZpZXdwb3J0LnogKyBjaXJjbGVzLnZpZXdwb3J0LngsCiAgKHZQb3MueSAr
IDEuKSAvIDIuICogY2lyY2xlcy52aWV3cG9ydC53ICsgY2lyY2xlcy52aWV3cG9ydC55KTsKCiAg
bGV0IG91dENvbG9yID0gdGV4dHVyZVNhbXBsZSh0ZXh0dXJlSW4sIHNhbXBsZXJJbiwgKHZQb3Mg
KyAxLikgLyAyLik7CiAgLy8gSWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IHBhc3MKICBpZiAoY2ly
Y2xlcy5sZXZlbHMueCAhPSAwLikgewogICAgLy92YXIgcDIgPSBjaXJjbGVJbnZlcnQocCk7CiAg
ICBsZXQgcDIgPSB0cmFuc2Zvcm0obWF0X2EsIG1hdF9BLCBtYXRfYiwgbWF0X0IsIHApOwogICAg
dmFyIG5vcm1hbGl6ZWRQMSA9ICh2UG9zICsgMS4pIC8gMi47CiAgICBsZXQgc2FtcGxlZCA9IHRl
eHR1cmVTYW1wbGUodGV4dHVyZUluLCBzYW1wbGVySW4sIG5vcm1hbGl6ZWRQMSk7CiAgICBsZXQg
cDJfdmlld3BvcnQgPSB2ZWMyKAogICAgICAgIChwMi54IC0gY2lyY2xlcy52aWV3cG9ydC54KSAv
IGNpcmNsZXMudmlld3BvcnQueiwKICAgICAgICAocDIueSAtIGNpcmNsZXMudmlld3BvcnQueSkg
LyBjaXJjbGVzLnZpZXdwb3J0LncKICAgICk7CiAgICBsZXQgc2FtcGxlZDIgPSB0ZXh0dXJlU2Ft
cGxlKHRleHR1cmVJbiwgc2FtcGxlckluLCBwMl92aWV3cG9ydCk7CiAgICBpZiAocDIueCA8IGNp
cmNsZXMudmlld3BvcnQueCB8fCBwMi54ID4gY2lyY2xlcy52aWV3cG9ydC54ICsgY2lyY2xlcy52
aWV3cG9ydC56IHx8CiAgICAgICAgcDIueSA8IGNpcmNsZXMudmlld3BvcnQueSB8fCBwMi55ID4g
Y2lyY2xlcy52aWV3cG9ydC55ICsgY2lyY2xlcy52aWV3cG9ydC53KSB7CiAgICAgICAgb3V0cHV0
LnRleHR1cmVPdXQgPSBvdXRPZkJvdW5kcyhwMiwgdHJ1ZSk7CiAgICAgICAgaWYgKG91dHB1dC50
ZXh0dXJlT3V0LmEgPT0gMC4pIHsKICAgICAgICAgICAgb3V0cHV0LnRleHR1cmVPdXQgPSBzYW1w
bGVkOwogICAgICAgICAgICAvL291dHB1dC50ZXh0dXJlT3V0LmcgPSAob3V0cHV0LnRleHR1cmVP
dXQuZyAqIDI1NS4gKyAxLikgLyAyNTUuOwogICAgICAgICAgICAvL291dHB1dC50ZXh0dXJlT3V0
ID0gdmVjNCgxLiwgMi4sIDEuLCAxLik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgb3V0
cHV0LnRleHR1cmVPdXQuZyA9IChvdXRwdXQudGV4dHVyZU91dC5nICogMjU1LiArIDEuKSAvIDI1
NS47CiAgICAgICAgfQogICAgICAgIHJldHVybiBvdXRwdXQ7CiAgICB9CiAgICBpZiAoc2FtcGxl
ZDIuYSA9PSAxLikgewogICAgICAgIG91dHB1dC50ZXh0dXJlT3V0ID0gdmVjNDxmMzI+KHNhbXBs
ZWQyLnIsIChzYW1wbGVkMi5nICogMjU1LiArIDEuKSAvIDI1NS4sIHNhbXBsZWQyLmIsIDEuKTsK
ICAgICAgICByZXR1cm4gb3V0cHV0OwogICAgfQogICAgb3V0cHV0LnRleHR1cmVPdXQgPSBzYW1w
bGVkOwogICAgcmV0dXJuIG91dHB1dDsKICB9CiAgb3V0cHV0LnRleHR1cmVPdXQgPSBjb2xvckJh
Y2tncm91bmQocCk7CiAgcmV0dXJuIG91dHB1dDsKIC8qCiBsZXQgbHAgPSBsZW5ndGgocCk7CiBp
ZiAobHAgPCBjaXJjbGVzLkRfYS56ICYmIGxwIDwgY2lyY2xlcy5EX0EueiAmJiBscCA8IGNpcmNs
ZXMuRF9iLnogJiYgbHAgPCBjaXJjbGVzLkRfQi56KSB7CiAgICAgIG91dHB1dC50ZXh0dXJlT3V0
ID0gdmVjNDxmMzI+KDE2MS4sIDIwOC4sIDE3Mi4sIDAuKSAvIDI1NS47CiAgICAgIHJldHVybiBv
dXRwdXQ7CiB9CiAqLwp9CgpHZW5lcmF0ZWQgTWV0YWwgY29kZToKI2luY2x1ZGUgPG1ldGFsX3N0
ZGxpYj4KI2luY2x1ZGUgPG1ldGFsX3R5cGVzPgoKdXNpbmcgbmFtZXNwYWNlIG1ldGFsOwoKc3Ry
dWN0IHR5cGUwIHsKICAgIHZlYzxmbG9hdCwgND4gZmllbGQwIDsKICAgIHZlYzxmbG9hdCwgMj4g
ZmllbGQxIDsKfTsKCnN0cnVjdCBfX3R5cGUwX1ZlcnRleE91dHB1dCB7CiAgICB2ZWM8ZmxvYXQs
IDQ+IGZpZWxkMCBbW3Bvc2l0aW9uXV07CiAgICB2ZWM8ZmxvYXQsIDI+IGZpZWxkMSBbW3VzZXIo
bG9jMCldXTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgX190eXBlMF9WZXJ0ZXhPdXRw
dXQoY29uc3QgdGhyZWFkIFQmIG90aGVyKQogICAgICAgIDogZmllbGQwKG90aGVyLmZpZWxkMCkK
ICAgICAgICAsIGZpZWxkMShvdGhlci5maWVsZDEpCiAgICB7IH0KfTsKCnN0cnVjdCBfX2Z1bmN0
aW9uMF9pblQgewogICAgdmVjPGZsb2F0LCAyPiBwYXJhbWV0ZXIwIFtbYXR0cmlidXRlKDApXV07
Cn07CgpbW3ZlcnRleF1dIF9fdHlwZTBfVmVydGV4T3V0cHV0IGZ1bmN0aW9uMChfX2Z1bmN0aW9u
MF9pblQgX19mdW5jdGlvbjBfaW4gW1tzdGFnZV9pbl1dKQp7CiAgICB2ZWM8ZmxvYXQsIDI+IHBh
cmFtZXRlcjAgPSBfX2Z1bmN0aW9uMF9pbi5wYXJhbWV0ZXIwOwogICAgdHlwZTAgbG9jYWwwIHsg
fTsKICAgIGxvY2FsMC5maWVsZDAgPSB2ZWM8ZmxvYXQsIDQ+KHBhcmFtZXRlcjAsIDAuLCAxLik7
CiAgICBsb2NhbDAuZmllbGQxID0gcGFyYW1ldGVyMDsKICAgIHJldHVybiBsb2NhbDA7Cn0KCgpo
dHRwczovL3BoaWxvZ2IuZ2l0aHViLmlvL3BhZ2UvaW5kcmFzcGVhcmxzL2pzL21haW4uODk2MzI4
NzQyMDFjM2FmOTcxMWUuYnVuZGxlLmpzOjI6NzY0NjU5OiBDT05TT0xFIExPRyBpbml0Q29udHJv
bHMKaHR0cHM6Ly9waGlsb2diLmdpdGh1Yi5pby9wYWdlL2luZHJhc3BlYXJscy9qcy9tYWluLjg5
NjMyODc0MjAxYzNhZjk3MTFlLmJ1bmRsZS5qczoyOjk0MzQ2OiBDT05TT0xFIExPRyBbb2JqZWN0
IEdQVVVuY2FwdHVyZWRFcnJvckV2ZW50XQpHZW5lcmF0ZWQgTWV0YWwgY29kZToKI2luY2x1ZGUg
PG1ldGFsX3N0ZGxpYj4KI2luY2x1ZGUgPG1ldGFsX3R5cGVzPgoKdXNpbmcgbmFtZXNwYWNlIG1l
dGFsOwoKc3RydWN0IHR5cGUwIHsKICAgIG1hdHJpeDxmbG9hdCwgNCwgND4gZmllbGQwOwogICAg
bWF0cml4PGZsb2F0LCA0LCA0PiBmaWVsZDE7CiAgICB2ZWM8ZmxvYXQsIDQ+IGZpZWxkMjsKICAg
IGZsb2F0IGZpZWxkMzsKfTsKCnN0cnVjdCB0eXBlMSB7CiAgICB2ZWM8ZmxvYXQsIDQ+IGZpZWxk
MCA7CiAgICB2ZWM8ZmxvYXQsIDM+IGZpZWxkMSA7Cn07CgpzdHJ1Y3QgX190eXBlMV9WZXJ0ZXhP
dXRwdXQgewogICAgdmVjPGZsb2F0LCA0PiBmaWVsZDAgW1twb3NpdGlvbl1dOwogICAgdmVjPGZs
b2F0LCAzPiBmaWVsZDEgW1t1c2VyKGxvYzApXV07CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
ICAgIF9fdHlwZTFfVmVydGV4T3V0cHV0KGNvbnN0IHRocmVhZCBUJiBvdGhlcikKICAgICAgICA6
IGZpZWxkMChvdGhlci5maWVsZDApCiAgICAgICAgLCBmaWVsZDEob3RoZXIuZmllbGQxKQogICAg
eyB9Cn07CgpzdHJ1Y3QgX19mdW5jdGlvbjBfaW5UIHsKICAgIHZlYzxmbG9hdCwgMz4gcGFyYW1l
dGVyMCBbW2F0dHJpYnV0ZSgwKV1dOwp9OwoKc3RydWN0IF9fQXJndW1lbnRCdWZmZXJUXzAgewog
ICAgY29uc3QgY29uc3RhbnQgdHlwZTAmIGdsb2JhbDAgW1tpZCgwKV1dOwogICAgdW5zaWduZWQg
X19nbG9iYWwwX0FycmF5TGVuZ3RoIFtbaWQoMSldXTsKfTsKCltbdmVydGV4XV0gX190eXBlMV9W
ZXJ0ZXhPdXRwdXQgZnVuY3Rpb24wKF9fZnVuY3Rpb24wX2luVCBfX2Z1bmN0aW9uMF9pbiBbW3N0
YWdlX2luXV0sIGNvbnN0YW50IF9fQXJndW1lbnRCdWZmZXJUXzAmIF9fQXJndW1lbnRCdWZmZXJf
MCBbW2J1ZmZlcigyMyldXSkKewogICAgY29uc3QgY29uc3RhbnQgdHlwZTAmIGdsb2JhbDAgPSBf
X0FyZ3VtZW50QnVmZmVyXzAuZ2xvYmFsMDsKICAgIHZlYzxmbG9hdCwgMz4gcGFyYW1ldGVyMCA9
IF9fZnVuY3Rpb24wX2luLnBhcmFtZXRlcjA7CiAgICB0eXBlMSBsb2NhbDAgeyB9OwogICAgdmVj
PGZsb2F0LCAzPiBsb2NhbDEgPSAoKHBhcmFtZXRlcjAgKiAwLjUpICsgdmVjPGZsb2F0LCAzPigw
LiwgMC4sIDAuNSkpOwogICAgbG9jYWwwLmZpZWxkMCA9ICgoZ2xvYmFsMC5maWVsZDAgKiBnbG9i
YWwwLmZpZWxkMSkgKiB2ZWM8ZmxvYXQsIDQ+KGxvY2FsMSwgMS4pKTsKICAgIGxvY2FsMC5maWVs
ZDEgPSBsb2NhbDE7CiAgICByZXR1cm4gbG9jYWwwOwp9CgoKR2VuZXJhdGVkIE1ldGFsIGNvZGU6
CiNpbmNsdWRlIDxtZXRhbF9zdGRsaWI+CiNpbmNsdWRlIDxtZXRhbF90eXBlcz4KCnVzaW5nIG5h
bWVzcGFjZSBtZXRhbDsKCnRlbXBsYXRlPHR5cGVuYW1lIFQsIHVuc2lnbmVkIE4+ClQgX193Z3Ns
RG90KHZlYzxULCBOPiBsaHMsIHZlYzxULCBOPiByaHMpCnsKICAgIGF1dG8gcmVzdWx0ID0gbGhz
WzBdICogcmhzWzBdICsgbGhzWzFdICogcmhzWzFdOwogICAgaWYgY29uc3RleHByIChOID4gMikg
cmVzdWx0ICs9IGxoc1syXSAqIHJoc1syXTsKICAgIGlmIGNvbnN0ZXhwciAoTiA+IDMpIHJlc3Vs
dCArPSBsaHNbM10gKiByaHNbM107CiAgICByZXR1cm4gcmVzdWx0Owp9CnN0cnVjdCB0eXBlMCB7
CiAgICBtYXRyaXg8ZmxvYXQsIDQsIDQ+IGZpZWxkMDsKICAgIG1hdHJpeDxmbG9hdCwgNCwgND4g
ZmllbGQxOwogICAgdmVjPGZsb2F0LCA0PiBmaWVsZDI7CiAgICBmbG9hdCBmaWVsZDM7Cn07Cgpz
dHJ1Y3QgdHlwZTEgewogICAgdmVjPGZsb2F0LCA0PiBmaWVsZDA7CiAgICB2ZWM8ZmxvYXQsIDQ+
IGZpZWxkMTsKICAgIG1hdHJpeDxmbG9hdCwgNCwgND4gZmllbGQyOwogICAgdmVjPGZsb2F0LCA0
PiBmaWVsZDM7CiAgICB2ZWM8ZmxvYXQsIDQ+IGZpZWxkNDsKfTsKCnN0cnVjdCB0eXBlMiB7CiAg
ICB2ZWM8ZmxvYXQsIDQ+IGZpZWxkMCA7Cn07CgpzdHJ1Y3QgX190eXBlMl9GcmFnbWVudE91dHB1
dCB7CiAgICB2ZWM8ZmxvYXQsIDQ+IGZpZWxkMCBbW2NvbG9yKDApXV07CgogICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KICAgIF9fdHlwZTJfRnJhZ21lbnRPdXRwdXQoY29uc3QgdGhyZWFkIFQmIG90
aGVyKQogICAgICAgIDogZmllbGQwKG90aGVyLmZpZWxkMCkKICAgIHsgfQp9OwoKc3RydWN0IF9f
ZnVuY3Rpb240X2luVCB7CiAgICB2ZWM8ZmxvYXQsIDM+IHBhcmFtZXRlcjggW1t1c2VyKGxvYzAp
XV07Cn07CgpzdHJ1Y3QgX19Bcmd1bWVudEJ1ZmZlclRfMCB7CiAgICBjb25zdCBjb25zdGFudCB0
eXBlMCYgZ2xvYmFsMCBbW2lkKDApXV07CiAgICB1bnNpZ25lZCBfX2dsb2JhbDBfQXJyYXlMZW5n
dGggW1tpZCgxKV1dOwp9OwoKc3RydWN0IF9fQXJndW1lbnRCdWZmZXJUXzEgewogICAgY29uc3Qg
Y29uc3RhbnQgdHlwZTEmIGdsb2JhbDEgW1tpZCgwKV1dOwogICAgdW5zaWduZWQgX19nbG9iYWwx
X0FycmF5TGVuZ3RoIFtbaWQoMSldXTsKfTsKCnN0cnVjdCBfX0FyZ3VtZW50QnVmZmVyVF8yIHsK
ICAgIHNhbXBsZXIgZ2xvYmFsMiBbW2lkKDApXV07CiAgICB0ZXh0dXJlMmQ8ZmxvYXQsIGFjY2Vz
czo6c2FtcGxlPiBnbG9iYWwzIFtbaWQoMSldXTsKICAgIHRleHR1cmUyZDxmbG9hdCwgYWNjZXNz
OjpzYW1wbGU+IGdsb2JhbDQgW1tpZCgyKV1dOwp9OwoKdmVjPGZsb2F0LCAyPiBmdW5jdGlvbjEo
dmVjPGZsb2F0LCAzPiBwYXJhbWV0ZXIxKQp7CiAgICBmbG9hdCBsb2NhbDEgPSAoMS4gLSBwYXJh
bWV0ZXIxLnopOwogICAgcmV0dXJuICh2ZWM8ZmxvYXQsIDI+KHBhcmFtZXRlcjEueCwgcGFyYW1l
dGVyMS55KSAvIGxvY2FsMSk7Cn0KCnZlYzxmbG9hdCwgMj4gZnVuY3Rpb24zKHZlYzxmbG9hdCwg
ND4gcGFyYW1ldGVyNSwgdmVjPGZsb2F0LCA0PiBwYXJhbWV0ZXI2LCBmbG9hdCBwYXJhbWV0ZXI3
KQp7CiAgICBmbG9hdCBsb2NhbDQgPSA4LjsKICAgIGZsb2F0IGxvY2FsNSA9IGZsb29yKChwYXJh
bWV0ZXI1LnIgKiAyNTUuKSk7CiAgICBmbG9hdCBsb2NhbDYgPSAwLjsKICAgIGlmICgobG9jYWw1
ID09IDAuKSkgewogICAgICAgIGxvY2FsNiA9IHBhcmFtZXRlcjYueDsKICAgIH0KICAgIGlmICgo
bG9jYWw1ID09IDEuKSkgewogICAgICAgIGxvY2FsNiA9IHBhcmFtZXRlcjYueTsKICAgIH0KICAg
IGlmICgobG9jYWw1ID09IDIuKSkgewogICAgICAgIGxvY2FsNiA9IHBhcmFtZXRlcjYuejsKICAg
IH0KICAgIGlmICgobG9jYWw1ID09IDMuKSkgewogICAgICAgIGxvY2FsNiA9IHBhcmFtZXRlcjYu
dzsKICAgIH0KICAgIGZsb2F0IGxvY2FsNyA9IChwYXJhbWV0ZXI1LmcgKiAyNTUuKTsKICAgIGZs
b2F0IGxvY2FsOCA9IChwYXJhbWV0ZXI3ICsgMC4pOwogICAgdmVjPGZsb2F0LCAyPiBsb2NhbDkg
PSB2ZWM8ZmxvYXQsIDI+KCgxLiAtIChsb2NhbDcgLyBsb2NhbDgpKSwgKCgxLiAvIChsb2NhbDQg
KiAyLikpICsgKCgxLiAvIGxvY2FsNCkgKiBsb2NhbDYpKSk7CiAgICByZXR1cm4gbG9jYWw5Owp9
CgpbW2ZyYWdtZW50XV0gX190eXBlMl9GcmFnbWVudE91dHB1dCBmdW5jdGlvbjQoX19mdW5jdGlv
bjRfaW5UIF9fZnVuY3Rpb240X2luIFtbc3RhZ2VfaW5dXSwgY29uc3RhbnQgX19Bcmd1bWVudEJ1
ZmZlclRfMCYgX19Bcmd1bWVudEJ1ZmZlcl8wIFtbYnVmZmVyKDApXV0sIGNvbnN0YW50IF9fQXJn
dW1lbnRCdWZmZXJUXzEmIF9fQXJndW1lbnRCdWZmZXJfMSBbW2J1ZmZlcigxKV1dLCBjb25zdGFu
dCBfX0FyZ3VtZW50QnVmZmVyVF8yJiBfX0FyZ3VtZW50QnVmZmVyXzIgW1tidWZmZXIoMildXSkK
ewogICAgdGV4dHVyZTJkPGZsb2F0LCBhY2Nlc3M6OnNhbXBsZT4gZ2xvYmFsNCA9IF9fQXJndW1l
bnRCdWZmZXJfMi5nbG9iYWw0OwogICAgc2FtcGxlciBnbG9iYWwyID0gX19Bcmd1bWVudEJ1ZmZl
cl8yLmdsb2JhbDI7CiAgICB0ZXh0dXJlMmQ8ZmxvYXQsIGFjY2Vzczo6c2FtcGxlPiBnbG9iYWwz
ID0gX19Bcmd1bWVudEJ1ZmZlcl8yLmdsb2JhbDM7CiAgICBjb25zdCBjb25zdGFudCB0eXBlMCYg
Z2xvYmFsMCA9IF9fQXJndW1lbnRCdWZmZXJfMC5nbG9iYWwwOwogICAgY29uc3QgY29uc3RhbnQg
dHlwZTEmIGdsb2JhbDEgPSBfX0FyZ3VtZW50QnVmZmVyXzEuZ2xvYmFsMTsKICAgIHZlYzxmbG9h
dCwgMz4gcGFyYW1ldGVyOCA9IF9fZnVuY3Rpb240X2luLnBhcmFtZXRlcjg7CiAgICB0eXBlMiBs
b2NhbDEwIHsgfTsKICAgIHZlYzxmbG9hdCwgMz4gbG9jYWwxMSA9IHZlYzxmbG9hdCwgMz4oMC4s
IDUuLCAwLjUpOwogICAgdmVjPGZsb2F0LCAzPiBsb2NhbDEyID0gdmVjPGZsb2F0LCAzPigxLiwg
MS4sIDEuKTsKICAgIHZlYzxmbG9hdCwgMz4gbG9jYWwxMyA9IHZlYzxmbG9hdCwgMz4oMC4yMDAw
MDAwMDI5ODAyMzIyNCwgMC4yMDAwMDAwMDI5ODAyMzIyNCwgMC4yMDAwMDAwMDI5ODAyMzIyNCk7
CiAgICBtYXRyaXg8ZmxvYXQsIDQsIDQ+IGxvY2FsMTQgPSBtYXRyaXg8ZmxvYXQsIDQsIDQ+KDEu
LCAwLiwgMC4sIDAuLCAwLiwgMS4sIDAuLCAwLiwgMC4sIDAuLCAxLiwgMC4sIDAuLCAwLiwgMC4s
IDEuKTsKICAgIHZlYzxmbG9hdCwgMz4gbG9jYWwxNSA9IChwYXJhbWV0ZXI4IC0gdmVjPGZsb2F0
LCAzPigwLiwgMC4sIDAuNSkpOwogICAgZmxvYXQgbG9jYWwxNiA9IHBvdygoMS4gLSBhYnMoX193
Z3NsRG90KG5vcm1hbGl6ZShnbG9iYWwwLmZpZWxkMi54eXopLCBsb2NhbDE1KSkpLCA4Lik7CiAg
ICB2ZWM8ZmxvYXQsIDQ+IGxvY2FsMTcgPSAobG9jYWwxNCAqIHZlYzxmbG9hdCwgND4ocGFyYW1l
dGVyOCwgMS4pKTsKICAgIHZlYzxmbG9hdCwgMz4gbG9jYWwxOCA9IG5vcm1hbGl6ZSgobG9jYWwx
MSAtIGxvY2FsMTcueHl6KSk7CiAgICB2ZWM8ZmxvYXQsIDQ+IGxvY2FsMTkgPSAobG9jYWwxNCAq
IHZlYzxmbG9hdCwgND4obm9ybWFsaXplKGxvY2FsMTUpLCAwLikpOwogICAgZmxvYXQgbG9jYWwy
MCA9IG1heChfX3dnc2xEb3QobG9jYWwxOS54eXosIGxvY2FsMTgpLCAwLik7CiAgICB2ZWM8Zmxv
YXQsIDM+IGxvY2FsMjEgPSAobG9jYWwxMiAqIGxvY2FsMjApOwogICAgdmVjPGZsb2F0LCAyPiBs
b2NhbDIyID0gdmVjPGZsb2F0LCAyPigoKGdsb2JhbDEuZmllbGQxLnggLSBnbG9iYWwxLmZpZWxk
MC54KSAvIGdsb2JhbDEuZmllbGQwLnopLCAoKGdsb2JhbDEuZmllbGQxLnkgLSBnbG9iYWwxLmZp
ZWxkMC55KSAvIGdsb2JhbDEuZmllbGQwLncpKTsKICAgIHZlYzxmbG9hdCwgMj4gbG9jYWwyMyA9
IHZlYzxmbG9hdCwgMj4oKCgoZ2xvYmFsMS5maWVsZDEueCArIGdsb2JhbDEuZmllbGQxLnopIC0g
Z2xvYmFsMS5maWVsZDAueCkgLyBnbG9iYWwxLmZpZWxkMC56KSwgKCgoZ2xvYmFsMS5maWVsZDEu
eSArIGdsb2JhbDEuZmllbGQxLncpIC0gZ2xvYmFsMS5maWVsZDAueSkgLyBnbG9iYWwxLmZpZWxk
MC53KSk7CiAgICB2ZWM8ZmxvYXQsIDM+IGxvY2FsMjQgPSAocGFyYW1ldGVyOCAtIHZlYzxmbG9h
dCwgMz4oMC4sIDAuLCAwLjUpKTsKICAgIHZlYzxmbG9hdCwgND4gbG9jYWwyNSA9IChnbG9iYWwx
LmZpZWxkMiAqIHZlYzxmbG9hdCwgND4obG9jYWwyNCwgMS4pKTsKICAgIHZlYzxmbG9hdCwgMj4g
bG9jYWwyNiA9IGZ1bmN0aW9uMSgobG9jYWwyNS54eXogKyB2ZWM8ZmxvYXQsIDM+KDAuLCAwLiwg
MC41KSkpOwogICAgaWYgKCgoKChsb2NhbDI2LnggPCBnbG9iYWwxLmZpZWxkMC54KSB8fCAobG9j
YWwyNi54ID4gKGdsb2JhbDEuZmllbGQwLnggKyBnbG9iYWwxLmZpZWxkMC56KSkpIHx8IChsb2Nh
bDI2LnkgPCBnbG9iYWwxLmZpZWxkMC55KSkgfHwgKGxvY2FsMjYueSA+IChnbG9iYWwxLmZpZWxk
MC55ICsgZ2xvYmFsMS5maWVsZDAudykpKSkgewogICAgICAgIGxvY2FsMjYueCA9IDAuOwogICAg
ICAgIGxvY2FsMjYueSA9IDAuOwogICAgfSBlbHNlIHsKICAgICAgICBsb2NhbDI2LnggPSAobG9j
YWwyNi54IC0gZ2xvYmFsMS5maWVsZDAueCk7CiAgICAgICAgbG9jYWwyNi54ID0gKGxvY2FsMjYu
eCAvIGdsb2JhbDEuZmllbGQwLnopOwogICAgICAgIGxvY2FsMjYueSA9IChsb2NhbDI2LnkgLSBn
bG9iYWwxLmZpZWxkMC55KTsKICAgICAgICBsb2NhbDI2LnkgPSAobG9jYWwyNi55IC8gZ2xvYmFs
MS5maWVsZDAudyk7CiAgICAgICAgbG9jYWwyNi54ID0gKGxvY2FsMjIueCArICgobG9jYWwyMy54
IC0gbG9jYWwyMi54KSAqIGxvY2FsMjYueCkpOwogICAgICAgIGxvY2FsMjYueSA9IChsb2NhbDIy
LnkgKyAoKGxvY2FsMjMueSAtIGxvY2FsMjIueSkgKiBsb2NhbDI2LnkpKTsKICAgIH0KICAgIHZl
YzxmbG9hdCwgND4gbG9jYWwyNyA9IGdsb2JhbDMuc2FtcGxlKGdsb2JhbDIsIGxvY2FsMjYpOwog
ICAgdmVjPGZsb2F0LCAyPiBsb2NhbDI4ID0gZnVuY3Rpb24zKGxvY2FsMjcsIGdsb2JhbDEuZmll
bGQzLCBnbG9iYWwxLmZpZWxkNC54KTsKICAgIHZlYzxmbG9hdCwgND4gbG9jYWwyOSA9IGdsb2Jh
bDQuc2FtcGxlKGdsb2JhbDIsIGxvY2FsMjgpOwogICAgZmxvYXQgbG9jYWwzMCA9IChsb2NhbDI3
LmEgKiBnbG9iYWwwLmZpZWxkMyk7CiAgICBsb2NhbDEwLmZpZWxkMCA9IHZlYzxmbG9hdCwgND4o
KChsb2NhbDI5LnJnYiAqIGxvY2FsMjEpICsgbG9jYWwxMyksIGxvY2FsMzApOwogICAgbG9jYWwx
MC5maWVsZDAgPSBtaXgobG9jYWwxMC5maWVsZDAsIHZlYzxmbG9hdCwgND4oMC4zODAzOTIxNjM5
OTE5MjgxLCAwLjU5NjA3ODQ1NTQ0ODE1MDYsIDAuNzc2NDcwNjAxNTU4Njg1MywgbG9jYWwxNiks
IGxvY2FsMTYpOwogICAgaWYgKCgobG9jYWwzMCA9PSAwLikgJiYgKGxvY2FsMTYgPT0gMC4pKSkg
ewogICAgICAgIGxvY2FsMTAuZmllbGQwID0gdmVjPGZsb2F0LCA0PigwLiwgMC4sIDAuLCAwLik7
CiAgICB9CiAgICByZXR1cm4gbG9jYWwxMDsKfQoKCkdlbmVyYXRlZCBNZXRhbCBjb2RlOgojaW5j
bHVkZSA8bWV0YWxfc3RkbGliPgojaW5jbHVkZSA8bWV0YWxfdHlwZXM+Cgp1c2luZyBuYW1lc3Bh
Y2UgbWV0YWw7CgpzdHJ1Y3QgdHlwZTAgewogICAgbWF0cml4PGZsb2F0LCA0LCA0PiBmaWVsZDA7
CiAgICBtYXRyaXg8ZmxvYXQsIDQsIDQ+IGZpZWxkMTsKICAgIHZlYzxmbG9hdCwgND4gZmllbGQy
OwogICAgdmVjPGZsb2F0LCA0PiBmaWVsZDM7Cn07CgpzdHJ1Y3QgdHlwZTEgewogICAgdmVjPGZs
b2F0LCA0PiBmaWVsZDA7CiAgICB2ZWM8ZmxvYXQsIDQ+IGZpZWxkMTsKICAgIG1hdHJpeDxmbG9h
dCwgNCwgND4gZmllbGQyOwogICAgdmVjPGZsb2F0LCA0PiBmaWVsZDM7CiAgICB2ZWM8ZmxvYXQs
IDI+IGZpZWxkNDsKICAgIHZlYzxmbG9hdCwgMj4gZmllbGQ1Owp9OwoKc3RydWN0IHR5cGUyIHsK
ICAgIHZlYzxmbG9hdCwgND4gZmllbGQwIDsKICAgIHZlYzxmbG9hdCwgMj4gZmllbGQxIDsKICAg
IHZlYzxmbG9hdCwgMz4gZmllbGQyIDsKfTsKCnN0cnVjdCBfX3R5cGUyX1ZlcnRleE91dHB1dCB7
CiAgICB2ZWM8ZmxvYXQsIDQ+IGZpZWxkMCBbW3Bvc2l0aW9uXV07CiAgICB2ZWM8ZmxvYXQsIDI+
IGZpZWxkMSBbW3VzZXIobG9jMCldXTsKICAgIHZlYzxmbG9hdCwgMz4gZmllbGQyIFtbdXNlcihs
b2MxKV1dOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICBfX3R5cGUyX1ZlcnRleE91dHB1
dChjb25zdCB0aHJlYWQgVCYgb3RoZXIpCiAgICAgICAgOiBmaWVsZDAob3RoZXIuZmllbGQwKQog
ICAgICAgICwgZmllbGQxKG90aGVyLmZpZWxkMSkKICAgICAgICAsIGZpZWxkMihvdGhlci5maWVs
ZDIpCiAgICB7IH0KfTsKCnN0cnVjdCBfX2Z1bmN0aW9uMF9pblQgewogICAgdmVjPGZsb2F0LCAy
PiBwYXJhbWV0ZXIxIFtbYXR0cmlidXRlKDApXV07Cn07CgpzdHJ1Y3QgX19Bcmd1bWVudEJ1ZmZl
clRfMCB7CiAgICBjb25zdCBjb25zdGFudCB0eXBlMCYgZ2xvYmFsMCBbW2lkKDApXV07CiAgICB1
bnNpZ25lZCBfX2dsb2JhbDBfQXJyYXlMZW5ndGggW1tpZCgxKV1dOwp9OwoKc3RydWN0IF9fQXJn
dW1lbnRCdWZmZXJUXzEgewogICAgY29uc3QgY29uc3RhbnQgdHlwZTEmIGdsb2JhbDEgW1tpZCgw
KV1dOwogICAgdW5zaWduZWQgX19nbG9iYWwxX0FycmF5TGVuZ3RoIFtbaWQoMSldXTsKfTsKCltb
dmVydGV4XV0gX190eXBlMl9WZXJ0ZXhPdXRwdXQgZnVuY3Rpb24wKHVuc2lnbmVkIHBhcmFtZXRl
cjAgW1t2ZXJ0ZXhfaWRdXSwgX19mdW5jdGlvbjBfaW5UIF9fZnVuY3Rpb24wX2luIFtbc3RhZ2Vf
aW5dXSwgY29uc3RhbnQgX19Bcmd1bWVudEJ1ZmZlclRfMCYgX19Bcmd1bWVudEJ1ZmZlcl8wIFtb
YnVmZmVyKDIzKV1dLCBjb25zdGFudCBfX0FyZ3VtZW50QnVmZmVyVF8xJiBfX0FyZ3VtZW50QnVm
ZmVyXzEgW1tidWZmZXIoMjIpXV0pCnsKICAgIGNvbnN0IGNvbnN0YW50IHR5cGUwJiBnbG9iYWww
ID0gX19Bcmd1bWVudEJ1ZmZlcl8wLmdsb2JhbDA7CiAgICBjb25zdCBjb25zdGFudCB0eXBlMSYg
Z2xvYmFsMSA9IF9fQXJndW1lbnRCdWZmZXJfMS5nbG9iYWwxOwogICAgdmVjPGZsb2F0LCAyPiBw
YXJhbWV0ZXIxID0gX19mdW5jdGlvbjBfaW4ucGFyYW1ldGVyMTsKICAgIHR5cGUyIGxvY2FsMCB7
IH07CiAgICBmbG9hdCBsb2NhbDEgPSBjZWlsKGdsb2JhbDAuZmllbGQzLngpOwogICAgdmVjPGZs
b2F0LCAyPiBsb2NhbDIgPSB2ZWM8ZmxvYXQsIDI+KDAuLCAwLik7CiAgICBpZiAoKHBhcmFtZXRl
cjAgPT0gMHUpKSB7CiAgICAgICAgbG9jYWwyID0gbWl4KHBhcmFtZXRlcjEsIHZlYzxmbG9hdCwg
Mj4oKGdsb2JhbDEuZmllbGQxLnggKyBnbG9iYWwxLmZpZWxkMS56KSwgKGdsb2JhbDEuZmllbGQx
LnkgKyBnbG9iYWwxLmZpZWxkMS53KSksIGxvY2FsMSk7CiAgICB9CiAgICBpZiAoKHBhcmFtZXRl
cjAgPT0gMXUpKSB7CiAgICAgICAgbG9jYWwyID0gbWl4KHBhcmFtZXRlcjEsIHZlYzxmbG9hdCwg
Mj4oKGdsb2JhbDEuZmllbGQxLnggKyBnbG9iYWwxLmZpZWxkMS56KSwgZ2xvYmFsMS5maWVsZDEu
eSksIGxvY2FsMSk7CiAgICB9CiAgICBpZiAoKHBhcmFtZXRlcjAgPT0gMnUpKSB7CiAgICAgICAg
bG9jYWwyID0gbWl4KHBhcmFtZXRlcjEsIHZlYzxmbG9hdCwgMj4oZ2xvYmFsMS5maWVsZDEueCwg
Z2xvYmFsMS5maWVsZDEueSksIGxvY2FsMSk7CiAgICB9CiAgICBpZiAoKHBhcmFtZXRlcjAgPT0g
M3UpKSB7CiAgICAgICAgbG9jYWwyID0gbWl4KHBhcmFtZXRlcjEsIHZlYzxmbG9hdCwgMj4oZ2xv
YmFsMS5maWVsZDEueCwgKGdsb2JhbDEuZmllbGQxLnkgKyBnbG9iYWwxLmZpZWxkMS53KSksIGxv
Y2FsMSk7CiAgICB9CiAgICBsb2NhbDAuZmllbGQwID0gdmVjPGZsb2F0LCA0PihwYXJhbWV0ZXIx
LCAwLiwgMS4pOwogICAgbG9jYWwwLmZpZWxkMSA9IHBhcmFtZXRlcjE7CiAgICBsb2NhbDAuZmll
bGQyID0gdmVjPGZsb2F0LCAzPihwYXJhbWV0ZXIxLCAwLik7CiAgICBpZiAoKGxvY2FsMSA+IDAu
KSkgewogICAgICAgIGxvY2FsMC5maWVsZDAgPSAoKGdsb2JhbDAuZmllbGQwICogZ2xvYmFsMC5m
aWVsZDEpICogdmVjPGZsb2F0LCA0Pihsb2NhbDIsIDAuLCAxLikpOwogICAgICAgIGxvY2FsMC5m
aWVsZDEgPSBwYXJhbWV0ZXIxOwogICAgICAgIGxvY2FsMC5maWVsZDIgPSB2ZWM8ZmxvYXQsIDM+
KGxvY2FsMiwgMC4pOwogICAgfQogICAgcmV0dXJuIGxvY2FsMDsKfQoKCkdlbmVyYXRlZCBNZXRh
bCBjb2RlOgojaW5jbHVkZSA8bWV0YWxfc3RkbGliPgojaW5jbHVkZSA8bWV0YWxfdHlwZXM+Cgp1
c2luZyBuYW1lc3BhY2UgbWV0YWw7Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBULCB1bnNpZ25lZCBOPgpU
IF9fd2dzbERvdCh2ZWM8VCwgTj4gbGhzLCB2ZWM8VCwgTj4gcmhzKQp7CiAgICBhdXRvIHJlc3Vs
dCA9IGxoc1swXSAqIHJoc1swXSArIGxoc1sxXSAqIHJoc1sxXTsKICAgIGlmIGNvbnN0ZXhwciAo
TiA+IDIpIHJlc3VsdCArPSBsaHNbMl0gKiByaHNbMl07CiAgICBpZiBjb25zdGV4cHIgKE4gPiAz
KSByZXN1bHQgKz0gbGhzWzNdICogcmhzWzNdOwogICAgcmV0dXJuIHJlc3VsdDsKfQpzdHJ1Y3Qg
dHlwZTAgewogICAgbWF0cml4PGZsb2F0LCA0LCA0PiBmaWVsZDA7CiAgICBtYXRyaXg8ZmxvYXQs
IDQsIDQ+IGZpZWxkMTsKICAgIHZlYzxmbG9hdCwgND4gZmllbGQyOwogICAgdmVjPGZsb2F0LCA0
PiBmaWVsZDM7Cn07CgpzdHJ1Y3QgdHlwZTEgewogICAgdmVjPGZsb2F0LCA0PiBmaWVsZDA7CiAg
ICB2ZWM8ZmxvYXQsIDQ+IGZpZWxkMTsKICAgIG1hdHJpeDxmbG9hdCwgNCwgND4gZmllbGQyOwog
ICAgdmVjPGZsb2F0LCA0PiBmaWVsZDM7CiAgICB2ZWM8ZmxvYXQsIDI+IGZpZWxkNDsKICAgIHZl
YzxmbG9hdCwgMj4gZmllbGQ1Owp9OwoKc3RydWN0IHR5cGUyIHsKICAgIHZlYzxmbG9hdCwgND4g
ZmllbGQwIDsKfTsKCnN0cnVjdCBfX3R5cGUyX0ZyYWdtZW50T3V0cHV0IHsKICAgIHZlYzxmbG9h
dCwgND4gZmllbGQwIFtbY29sb3IoMCldXTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAg
X190eXBlMl9GcmFnbWVudE91dHB1dChjb25zdCB0aHJlYWQgVCYgb3RoZXIpCiAgICAgICAgOiBm
aWVsZDAob3RoZXIuZmllbGQwKQogICAgeyB9Cn07CgpzdHJ1Y3QgX19mdW5jdGlvbjhfaW5UIHsK
ICAgIHZlYzxmbG9hdCwgMj4gcGFyYW1ldGVyMTQgW1t1c2VyKGxvYzApXV07CiAgICB2ZWM8Zmxv
YXQsIDM+IHBhcmFtZXRlcjE1IFtbdXNlcihsb2MxKV1dOwp9OwoKc3RydWN0IF9fQXJndW1lbnRC
dWZmZXJUXzAgewogICAgY29uc3QgY29uc3RhbnQgdHlwZTAmIGdsb2JhbDAgW1tpZCgwKV1dOwog
ICAgdW5zaWduZWQgX19nbG9iYWwwX0FycmF5TGVuZ3RoIFtbaWQoMSldXTsKfTsKCnN0cnVjdCBf
X0FyZ3VtZW50QnVmZmVyVF8xIHsKICAgIGNvbnN0IGNvbnN0YW50IHR5cGUxJiBnbG9iYWwxIFtb
aWQoMCldXTsKICAgIHVuc2lnbmVkIF9fZ2xvYmFsMV9BcnJheUxlbmd0aCBbW2lkKDEpXV07Cn07
CgpzdHJ1Y3QgX19Bcmd1bWVudEJ1ZmZlclRfMiB7CiAgICBzYW1wbGVyIGdsb2JhbDIgW1tpZCgw
KV1dOwogICAgdGV4dHVyZTJkPGZsb2F0LCBhY2Nlc3M6OnNhbXBsZT4gZ2xvYmFsMyBbW2lkKDEp
XV07CiAgICB0ZXh0dXJlMmQ8ZmxvYXQsIGFjY2Vzczo6c2FtcGxlPiBnbG9iYWw0IFtbaWQoMild
XTsKfTsKCnZlYzxmbG9hdCwgMj4gZnVuY3Rpb24zKHZlYzxmbG9hdCwgMj4gcGFyYW1ldGVyNSwg
dmVjPGZsb2F0LCAyPiBwYXJhbWV0ZXI2KQp7CiAgICByZXR1cm4gdmVjPGZsb2F0LCAyPigoKHBh
cmFtZXRlcjUueCAqIHBhcmFtZXRlcjYueCkgLSAocGFyYW1ldGVyNS55ICogcGFyYW1ldGVyNi55
KSksICgocGFyYW1ldGVyNS55ICogcGFyYW1ldGVyNi54KSArIChwYXJhbWV0ZXI1LnggKiBwYXJh
bWV0ZXI2LnkpKSk7Cn0KCnZlYzxmbG9hdCwgMj4gZnVuY3Rpb240KHZlYzxmbG9hdCwgMj4gcGFy
YW1ldGVyNykKewogICAgZmxvYXQgbG9jYWw0ID0gX193Z3NsRG90KHBhcmFtZXRlcjcsIHBhcmFt
ZXRlcjcpOwogICAgcmV0dXJuICh2ZWM8ZmxvYXQsIDI+KHBhcmFtZXRlcjcueCwgKC1wYXJhbWV0
ZXI3LnkpKSAvIGxvY2FsNCk7Cn0KCnZlYzxmbG9hdCwgMj4gZnVuY3Rpb242KHZlYzxmbG9hdCwg
Mj4gcGFyYW1ldGVyMTApCnsKICAgIHZlYzxmbG9hdCwgMj4gbG9jYWw1ID0gZnVuY3Rpb240KChm
dW5jdGlvbjModmVjPGZsb2F0LCAyPigwLiwgMS4pLCBwYXJhbWV0ZXIxMCkgKyB2ZWM8ZmxvYXQs
IDI+KDEuLCAwLikpKTsKICAgIHZlYzxmbG9hdCwgMj4gbG9jYWw2ID0gKHBhcmFtZXRlcjEwICsg
dmVjPGZsb2F0LCAyPigwLiwgMS4pKTsKICAgIHJldHVybiBmdW5jdGlvbjMobG9jYWw2LCBsb2Nh
bDUpOwp9Cgp2ZWM8ZmxvYXQsIDM+IGZ1bmN0aW9uMCh2ZWM8ZmxvYXQsIDI+IHBhcmFtZXRlcjAp
CnsKICAgIGZsb2F0IGxvY2FsMCA9ICgoKHBhcmFtZXRlcjAueCAqIHBhcmFtZXRlcjAueCkgKyAo
cGFyYW1ldGVyMC55ICogcGFyYW1ldGVyMC55KSkgKyAxLik7CiAgICByZXR1cm4gKHZlYzxmbG9h
dCwgMz4ocGFyYW1ldGVyMC54LCBwYXJhbWV0ZXIwLnksICgocGFyYW1ldGVyMC54ICogcGFyYW1l
dGVyMC54KSArIChwYXJhbWV0ZXIwLnkgKiBwYXJhbWV0ZXIwLnkpKSkgLyBsb2NhbDApOwp9Cgp2
ZWM8ZmxvYXQsIDI+IGZ1bmN0aW9uMSh2ZWM8ZmxvYXQsIDM+IHBhcmFtZXRlcjEpCnsKICAgIGZs
b2F0IGxvY2FsMSA9ICgxLiAtIHBhcmFtZXRlcjEueik7CiAgICByZXR1cm4gKHZlYzxmbG9hdCwg
Mj4ocGFyYW1ldGVyMS54LCBwYXJhbWV0ZXIxLnkpIC8gbG9jYWwxKTsKfQoKdmVjPGZsb2F0LCAy
PiBmdW5jdGlvbjcodmVjPGZsb2F0LCA0PiBwYXJhbWV0ZXIxMSwgdmVjPGZsb2F0LCA0PiBwYXJh
bWV0ZXIxMiwgZmxvYXQgcGFyYW1ldGVyMTMpCnsKICAgIGZsb2F0IGxvY2FsNyA9IDguOwogICAg
ZmxvYXQgbG9jYWw4ID0gZmxvb3IoKHBhcmFtZXRlcjExLnIgKiAyNTUuKSk7CiAgICBmbG9hdCBs
b2NhbDkgPSAwLjsKICAgIGlmICgobG9jYWw4ID09IDAuKSkgewogICAgICAgIGxvY2FsOSA9IHBh
cmFtZXRlcjEyLng7CiAgICB9CiAgICBpZiAoKGxvY2FsOCA9PSAxLikpIHsKICAgICAgICBsb2Nh
bDkgPSBwYXJhbWV0ZXIxMi55OwogICAgfQogICAgaWYgKChsb2NhbDggPT0gMi4pKSB7CiAgICAg
ICAgbG9jYWw5ID0gcGFyYW1ldGVyMTIuejsKICAgIH0KICAgIGlmICgobG9jYWw4ID09IDMuKSkg
ewogICAgICAgIGxvY2FsOSA9IHBhcmFtZXRlcjEyLnc7CiAgICB9CiAgICBmbG9hdCBsb2NhbDEw
ID0gKHBhcmFtZXRlcjExLmcgKiAyNTUuKTsKICAgIGZsb2F0IGxvY2FsMTEgPSAocGFyYW1ldGVy
MTMgKyAwLik7CiAgICB2ZWM8ZmxvYXQsIDI+IGxvY2FsMTIgPSB2ZWM8ZmxvYXQsIDI+KCgxLiAt
IChsb2NhbDEwIC8gbG9jYWwxMSkpLCAoKDEuIC8gKGxvY2FsNyAqIDIuKSkgKyAoKDEuIC8gbG9j
YWw3KSAqIGxvY2FsOSkpKTsKICAgIHJldHVybiBsb2NhbDEyOwp9CgpbW2ZyYWdtZW50XV0gX190
eXBlMl9GcmFnbWVudE91dHB1dCBmdW5jdGlvbjgoX19mdW5jdGlvbjhfaW5UIF9fZnVuY3Rpb244
X2luIFtbc3RhZ2VfaW5dXSwgY29uc3RhbnQgX19Bcmd1bWVudEJ1ZmZlclRfMCYgX19Bcmd1bWVu
dEJ1ZmZlcl8wIFtbYnVmZmVyKDApXV0sIGNvbnN0YW50IF9fQXJndW1lbnRCdWZmZXJUXzEmIF9f
QXJndW1lbnRCdWZmZXJfMSBbW2J1ZmZlcigxKV1dLCBjb25zdGFudCBfX0FyZ3VtZW50QnVmZmVy
VF8yJiBfX0FyZ3VtZW50QnVmZmVyXzIgW1tidWZmZXIoMildXSkKewogICAgY29uc3QgY29uc3Rh
bnQgdHlwZTAmIGdsb2JhbDAgPSBfX0FyZ3VtZW50QnVmZmVyXzAuZ2xvYmFsMDsKICAgIGNvbnN0
IGNvbnN0YW50IHR5cGUxJiBnbG9iYWwxID0gX19Bcmd1bWVudEJ1ZmZlcl8xLmdsb2JhbDE7CiAg
ICB0ZXh0dXJlMmQ8ZmxvYXQsIGFjY2Vzczo6c2FtcGxlPiBnbG9iYWw0ID0gX19Bcmd1bWVudEJ1
ZmZlcl8yLmdsb2JhbDQ7CiAgICBzYW1wbGVyIGdsb2JhbDIgPSBfX0FyZ3VtZW50QnVmZmVyXzIu
Z2xvYmFsMjsKICAgIHRleHR1cmUyZDxmbG9hdCwgYWNjZXNzOjpzYW1wbGU+IGdsb2JhbDMgPSBf
X0FyZ3VtZW50QnVmZmVyXzIuZ2xvYmFsMzsKICAgIHZlYzxmbG9hdCwgMj4gcGFyYW1ldGVyMTQg
PSBfX2Z1bmN0aW9uOF9pbi5wYXJhbWV0ZXIxNDsKICAgIHZlYzxmbG9hdCwgMz4gcGFyYW1ldGVy
MTUgPSBfX2Z1bmN0aW9uOF9pbi5wYXJhbWV0ZXIxNTsKICAgIHR5cGUyIGxvY2FsMTMgeyB9Owog
ICAgdmVjPGZsb2F0LCA0PiBsb2NhbDE0ID0gZ2xvYmFsMy5zYW1wbGUoZ2xvYmFsMiwgKChwYXJh
bWV0ZXIxNCArIDEuKSAvIDIuKSk7CiAgICBsb2NhbDEzLmZpZWxkMCA9IGxvY2FsMTQ7CiAgICBp
ZiAoKGdsb2JhbDEuZmllbGQ1LnggPT0gNC4pKSB7CiAgICAgICAgcmV0dXJuIGxvY2FsMTM7CiAg
ICB9CiAgICB2ZWM8ZmxvYXQsIDI+IGxvY2FsMTUgPSB2ZWM8ZmxvYXQsIDI+KCgoZ2xvYmFsMS5m
aWVsZDEueCAtIGdsb2JhbDEuZmllbGQwLngpIC8gZ2xvYmFsMS5maWVsZDAueiksICgoZ2xvYmFs
MS5maWVsZDEueSAtIGdsb2JhbDEuZmllbGQwLnkpIC8gZ2xvYmFsMS5maWVsZDAudykpOwogICAg
dmVjPGZsb2F0LCAyPiBsb2NhbDE2ID0gdmVjPGZsb2F0LCAyPigoKChnbG9iYWwxLmZpZWxkMS54
ICsgZ2xvYmFsMS5maWVsZDEueikgLSBnbG9iYWwxLmZpZWxkMC54KSAvIGdsb2JhbDEuZmllbGQw
LnopLCAoKChnbG9iYWwxLmZpZWxkMS55ICsgZ2xvYmFsMS5maWVsZDEudykgLSBnbG9iYWwxLmZp
ZWxkMC55KSAvIGdsb2JhbDEuZmllbGQwLncpKTsKICAgIGJvb2wgbG9jYWwxNyA9IChnbG9iYWwx
LmZpZWxkNS54ID49IDIuKTsKICAgIGJvb2wgbG9jYWwxOCA9IChnbG9iYWwxLmZpZWxkNS54ID49
IDMuKTsKICAgIGZsb2F0IGxvY2FsMTkgPSAxLjsKICAgIGlmIChsb2NhbDE3KSB7CiAgICAgICAg
bG9jYWwxOSA9IDAuOwogICAgfQogICAgZmxvYXQgbG9jYWwyMCA9IDAuOwogICAgdmVjPGZsb2F0
LCAyPiBsb2NhbDIxID0gcGFyYW1ldGVyMTQ7CiAgICB2ZWM8ZmxvYXQsIDI+IGxvY2FsMjIgPSAo
KHBhcmFtZXRlcjE0ICsgMS4pIC8gMi4pOwogICAgdmVjPGZsb2F0LCAyPiBsb2NhbDIzID0gdmVj
PGZsb2F0LCAyPigwLiwgMC4pOwogICAgaWYgKGxvY2FsMTgpIHsKICAgICAgICBsb2NhbDIzID0g
ZnVuY3Rpb242KChwYXJhbWV0ZXIxNC54eSAqIDIuKSk7CiAgICAgICAgZmxvYXQgbG9jYWwyNCA9
IDMuMTQxNTkyNzQxMDEyNTczMjsKICAgICAgICBsb2NhbDIzLnggPSAoKGxvY2FsMjMueCArICgy
LiAqIGxvY2FsMjQpKSArIDAuMjE1MDAwMDAzNTc2Mjc4Nyk7CiAgICAgICAgbG9jYWwyMy55ID0g
KGxvY2FsMjMueSAtIDEuKTsKICAgIH0KICAgIHZlYzxmbG9hdCwgMj4gbG9jYWwyNSA9IGxvY2Fs
MjE7CiAgICBsb2NhbDI1LnggPSAoKGxvY2FsMjIueCAqIGdsb2JhbDEuZmllbGQwLnopICsgZ2xv
YmFsMS5maWVsZDAueCk7CiAgICBsb2NhbDI1LnkgPSAoKGxvY2FsMjIueSAqIGdsb2JhbDEuZmll
bGQwLncpICsgZ2xvYmFsMS5maWVsZDAueSk7CiAgICBsb2NhbDIxID0gbG9jYWwyNTsKICAgIGlm
IChsb2NhbDE4KSB7CiAgICAgICAgbG9jYWwyMSA9IG1peChsb2NhbDIzLCBsb2NhbDI1LCAoMS4g
LSBtaW4oMS4sIChnbG9iYWwxLmZpZWxkNS54IC0gMy4pKSkpOwogICAgfQogICAgdmVjPGZsb2F0
LCAyPiBsb2NhbDI2ID0gbG9jYWwyMTsKICAgIHZlYzxmbG9hdCwgMj4gbG9jYWwyNyA9IGxvY2Fs
MjE7CiAgICBpZiAobG9jYWwxNykgewogICAgICAgIGZvciAoaW50IGxvY2FsMjggPSAwOyAobG9j
YWwyOCA8IDIwKTsgbG9jYWwyOCA9IChsb2NhbDI4ICsgMSkpIHsKICAgICAgICAgICAgaWYgKChs
b2NhbDI2LnggPiAoKChnbG9iYWwxLmZpZWxkMC56IC8gMi4pICsgZ2xvYmFsMS5maWVsZDAueCkg
KyAwLjUpKSkgewogICAgICAgICAgICAgICAgbG9jYWwyNi54ID0gKCgoKGdsb2JhbDEuZmllbGQw
LnogLyAyLikgKyBnbG9iYWwxLmZpZWxkMC54KSArIDAuNSkgLSAobG9jYWwyNi54IC0gKCgoZ2xv
YmFsMS5maWVsZDAueiAvIDIuKSArIGdsb2JhbDEuZmllbGQwLngpICsgMC41KSkpOwogICAgICAg
ICAgICB9CiAgICAgICAgICAgIGlmICgobG9jYWwyNi54IDwgKCgoZ2xvYmFsMS5maWVsZDAueiAv
IDIuKSArIGdsb2JhbDEuZmllbGQwLngpIC0gMC41KSkpIHsKICAgICAgICAgICAgICAgIGxvY2Fs
MjYueCA9ICgoKChnbG9iYWwxLmZpZWxkMC56IC8gMi4pICsgZ2xvYmFsMS5maWVsZDAueCkgLSAw
LjUpICsgKCgoKGdsb2JhbDEuZmllbGQwLnogLyAyLikgKyBnbG9iYWwxLmZpZWxkMC54KSAtIDAu
NSkgLSBsb2NhbDI2LngpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3IgKGlu
dCBsb2NhbDI5ID0gMDsgKGxvY2FsMjkgPCAyMCk7IGxvY2FsMjkgPSAobG9jYWwyOSArIDEpKSB7
CiAgICAgICAgICAgIGlmICgobG9jYWwyNy54ID4gKCgoZ2xvYmFsMS5maWVsZDAueiAvIDIuKSAr
IGdsb2JhbDEuZmllbGQwLngpICsgMS4pKSkgewogICAgICAgICAgICAgICAgbG9jYWwyNy54ID0g
KCgoKGdsb2JhbDEuZmllbGQwLnogLyAyLikgKyBnbG9iYWwxLmZpZWxkMC54KSArIDEuKSAtIChs
b2NhbDI3LnggLSAoKChnbG9iYWwxLmZpZWxkMC56IC8gMi4pICsgZ2xvYmFsMS5maWVsZDAueCkg
KyAxLikpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoKGxvY2FsMjcueCA8ICgoKGds
b2JhbDEuZmllbGQwLnogLyAyLikgKyBnbG9iYWwxLmZpZWxkMC54KSAtIDEuKSkpIHsKICAgICAg
ICAgICAgICAgIGxvY2FsMjcueCA9ICgoKChnbG9iYWwxLmZpZWxkMC56IC8gMi4pICsgZ2xvYmFs
MS5maWVsZDAueCkgLSAxLikgKyAoKCgoZ2xvYmFsMS5maWVsZDAueiAvIDIuKSArIGdsb2JhbDEu
ZmllbGQwLngpIC0gMS4pIC0gbG9jYWwyNy54KSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgICAgbG9jYWwyMSA9IGxvY2FsMjY7CiAgICB9CiAgICBmbG9hdCBsb2NhbDMwID0gMC47CiAg
ICBpZiAobG9jYWwxNykgewogICAgICAgIGxvY2FsMjcgPSAoKGxvY2FsMjcgLSAoZ2xvYmFsMS5m
aWVsZDAueiAvIDIuKSkgLSBnbG9iYWwxLmZpZWxkMC54KTsKICAgICAgICBpZiAoKChsb2NhbDI3
LnggPiAtMC41KSAmJiAobG9jYWwyNy54IDwgMC41KSkpIHsKICAgICAgICAgICAgbG9jYWwzMCA9
IChsb2NhbDMwICsgMS4pOwogICAgICAgIH0KICAgICAgICB2ZWM8ZmxvYXQsIDI+IGxvY2FsMzEg
PSB2ZWM8ZmxvYXQsIDI+KDAuLCAtMS4pOwogICAgICAgIHZlYzxmbG9hdCwgMj4gbG9jYWwzMiA9
IHZlYzxmbG9hdCwgMj4oMS4sIC0xLik7CiAgICAgICAgdmVjPGZsb2F0LCAyPiBsb2NhbDMzID0g
dmVjPGZsb2F0LCAyPigtMS4sIC0xLik7CiAgICAgICAgaWYgKChkaXN0YW5jZShsb2NhbDI3LCBs
b2NhbDMxKSA8IDEuKSkgewogICAgICAgICAgICBsb2NhbDMwID0gKGxvY2FsMzAgKyAxLik7CiAg
ICAgICAgfQogICAgICAgIGlmICgoZGlzdGFuY2UobG9jYWwyNywgbG9jYWwzMikgPCAxLikpIHsK
ICAgICAgICAgICAgbG9jYWwzMCA9IChsb2NhbDMwICsgMS4pOwogICAgICAgIH0KICAgICAgICBp
ZiAoKGRpc3RhbmNlKGxvY2FsMjcsIGxvY2FsMzMpIDwgMS4pKSB7CiAgICAgICAgICAgIGxvY2Fs
MzAgPSAobG9jYWwzMCArIDEuKTsKICAgICAgICB9CiAgICB9CiAgICB2ZWM8ZmxvYXQsIDM+IGxv
Y2FsMzQgPSAoZnVuY3Rpb24wKGxvY2FsMjEpIC0gdmVjPGZsb2F0LCAzPigwLiwgMC4sIDAuNSkp
OwogICAgdmVjPGZsb2F0LCA0PiBsb2NhbDM1ID0gKGdsb2JhbDEuZmllbGQyICogdmVjPGZsb2F0
LCA0Pihsb2NhbDM0LCAxLikpOwogICAgbG9jYWwyMSA9IGZ1bmN0aW9uMSgobG9jYWwzNS54eXog
KyB2ZWM8ZmxvYXQsIDM+KDAuLCAwLiwgMC41KSkpOwogICAgdmVjPGZsb2F0LCAyPiBsb2NhbDM2
ID0gbG9jYWwyMTsKICAgIGxvY2FsMjEueCA9IChsb2NhbDIxLnggLSBnbG9iYWwxLmZpZWxkMC54
KTsKICAgIGxvY2FsMjEueCA9IChsb2NhbDIxLnggLyBnbG9iYWwxLmZpZWxkMC56KTsKICAgIGxv
Y2FsMjEueSA9IChsb2NhbDIxLnkgLSBnbG9iYWwxLmZpZWxkMC55KTsKICAgIGxvY2FsMjEueSA9
IChsb2NhbDIxLnkgLyBnbG9iYWwxLmZpZWxkMC53KTsKICAgIGxvY2FsMjEueCA9IChsb2NhbDE1
LnggKyAoKGxvY2FsMTYueCAtIGxvY2FsMTUueCkgKiBsb2NhbDIxLngpKTsKICAgIGxvY2FsMjEu
eSA9IChsb2NhbDE1LnkgKyAoKGxvY2FsMTYueSAtIGxvY2FsMTUueSkgKiBsb2NhbDIxLnkpKTsK
ICAgIHZlYzxmbG9hdCwgND4gbG9jYWwzNyA9IGdsb2JhbDMuc2FtcGxlKGdsb2JhbDIsIGxvY2Fs
MjEpOwogICAgaWYgKChnbG9iYWwxLmZpZWxkNS54ID4gMC4pKSB7CiAgICAgICAgdmVjPGZsb2F0
LCA0PiBsb2NhbDM4ID0gZ2xvYmFsMy5zYW1wbGUoZ2xvYmFsMiwgdmVjPGZsb2F0LCAyPihsb2Nh
bDIxLngsICgxLiAtIGxvY2FsMjEueSkpKTsKICAgICAgICBpZiAoKGxvY2FsMzcuYSA9PSAwLikp
IHsKICAgICAgICAgICAgbG9jYWwzNyA9IGxvY2FsMzg7CiAgICAgICAgICAgIGxvY2FsMzcuZyA9
ICgoKGxvY2FsMzcuZyAqIDI1NS4pICsgMS4pIC8gMjU1Lik7CiAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgaWYgKCgobG9jYWwzOC5hICE9IDAuKSAmJiAobG9jYWwzOC5nID4gbG9jYWwzNy5n
KSkpIHsKICAgICAgICAgICAgICAgIGxvY2FsMzcgPSBsb2NhbDM4OwogICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgICAgIGlmIChsb2NhbDE3KSB7CiAgICAgICAgICAgIGlmICgobG9jYWwzNi55
IDwgKGdsb2JhbDEuZmllbGQxLnkgKyAoZ2xvYmFsMS5maWVsZDEudyAvIDIuKSkpKSB7CiAgICAg
ICAgICAgICAgICBpZiAoKGxvY2FsMzcuYSA9PSAwLikpIHsKICAgICAgICAgICAgICAgICAgICBs
b2NhbDM3ID0gdmVjPGZsb2F0LCA0PigwLiwgMC4wMzUyOTQxMTkyNjg2NTU3OCwgMS4sIDEuKTsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGxvY2FsMzcuZyA9ICgoKGxvY2FsMzcu
ZyAqIDI1NS4pICsgMS4pIC8gMjU1Lik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICBpZiAoKGxvY2FsMzYueSA+IChnbG9iYWwxLmZpZWxkMS55ICsgKGdsb2JhbDEuZmllbGQx
LncgLyAyLikpKSkgewogICAgICAgICAgICAgICAgICAgIGlmICgobG9jYWwzNy5hID09IDAuKSkg
ewogICAgICAgICAgICAgICAgICAgICAgICBsb2NhbDM3ID0gdmVjPGZsb2F0LCA0PigwLiwgMC4w
NDMxMzcyNTYwNTYwNzAzMywgMS4sIDEuKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBsb2NhbDEzLmZpZWxk
MCA9IHZlYzxmbG9hdCwgND4oMC4sIDAuLCAwLiwgMC4pOwogICAgdmVjPGZsb2F0LCAyPiBsb2Nh
bDM5ID0gZnVuY3Rpb243KGxvY2FsMzcsIGdsb2JhbDEuZmllbGQzLCBnbG9iYWwxLmZpZWxkNC54
KTsKICAgIGZsb2F0IGxvY2FsNDAgPSAoKDEuIC0gbG9jYWwzOS54KSArIDAuMTAwMDAwMDAxNDkw
MTE2MTIpOwogICAgdmVjPGZsb2F0LCA0PiBsb2NhbDQxID0gZ2xvYmFsNC5zYW1wbGUoZ2xvYmFs
MiwgbG9jYWwzOSk7CiAgICBsb2NhbDQxLmEgPSAxLjsKICAgIGZsb2F0IGxvY2FsNDIgPSAobG9j
YWwzNy5nICogMjU1Lik7CiAgICBpZiAoKGZtb2QoKGxvY2FsNDIgKyBsb2NhbDMwKSwgMi4pID09
IDEuKSkgewogICAgICAgIGxvY2FsNDEgPSB2ZWM8ZmxvYXQsIDQ+KGxvY2FsNDEueHl6LCAxLik7
CiAgICAgICAgaWYgKGxvY2FsMTcpIHsKICAgICAgICAgICAgbG9jYWw0MSA9IG1peChsb2NhbDQx
LCB2ZWM8ZmxvYXQsIDQ+KCh2ZWM8ZmxvYXQsIDM+KDEuLCAxLiwgMS4pICogbG9jYWwxOSksIDEu
KSwgbWluKG1pbigzLiwgKGdsb2JhbDEuZmllbGQ0LnggLSAyLikpLCAxLikpOwogICAgICAgIH0K
ICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGxvY2FsMTcpIHsKICAgICAgICAgICAgbG9jYWw0MSA9
IG1peChsb2NhbDQxLCB2ZWM8ZmxvYXQsIDQ+KDEuLCAxLiwgMS4sIDEuKSwgbWluKG1pbigzLiwg
KGdsb2JhbDEuZmllbGQ0LnggLSAyLikpLCAxLikpOwogICAgICAgIH0KICAgIH0KICAgIGlmIChs
b2NhbDE4KSB7CiAgICAgICAgZmxvYXQgbG9jYWw0MyA9IG1heCgwLjEwMDAwMDAwMTQ5MDExNjEy
LCAoMS4gLSBtaW4ocG93KChsZW5ndGgoKGxvY2FsMjIgLSAwLjUpKSAqIDMuOTUwMDAwMDQ3Njgz
NzE2KSwgNi4pLCAxLikpKTsKICAgICAgICBmbG9hdCBsb2NhbDQ0ID0gbWF4KG1pbigxLiwgKGds
b2JhbDEuZmllbGQ1LnggLSAzLikpLCAwLik7CiAgICAgICAgZmxvYXQgbG9jYWw0NSA9ICgxLiAr
ICgobG9jYWw0MyAtIDEuKSAqIGxvY2FsNDQpKTsKICAgICAgICBsb2NhbDQxID0gdmVjPGZsb2F0
LCA0PigobG9jYWw0MS54eXogKiBsb2NhbDQ1KSwgbG9jYWw0MS5hKTsKICAgIH0KICAgIHZlYzxm
bG9hdCwgMz4gbG9jYWw0NiA9IHZlYzxmbG9hdCwgMz4oMS4sIDEuLCAxLik7CiAgICB2ZWM8Zmxv
YXQsIDM+IGxvY2FsNDcgPSB2ZWM8ZmxvYXQsIDM+KDAuLCAwLiwgMC4pOwogICAgaWYgKChnbG9i
YWwwLmZpZWxkMy54ID4gMC4pKSB7CiAgICAgICAgbG9jYWw0NyA9IHZlYzxmbG9hdCwgMz4oMC4s
IDAuLCAwLik7CiAgICAgICAgdmVjPGZsb2F0LCAzPiBsb2NhbDQ4ID0gdmVjPGZsb2F0LCAzPigw
LiwgMC4sIDAuNSk7CiAgICAgICAgdmVjPGZsb2F0LCAzPiBsb2NhbDQ5ID0gdmVjPGZsb2F0LCAz
PigxLiwgMS4sIDEuKTsKICAgICAgICBtYXRyaXg8ZmxvYXQsIDQsIDQ+IGxvY2FsNTAgPSBtYXRy
aXg8ZmxvYXQsIDQsIDQ+KDEuLCAwLiwgMC4sIDAuLCAwLiwgMS4sIDAuLCAwLiwgMC4sIDAuLCAx
LiwgMC4sIDAuLCAwLiwgMC4sIDEuKTsKICAgICAgICB2ZWM8ZmxvYXQsIDM+IGxvY2FsNTEgPSB2
ZWM8ZmxvYXQsIDM+KDAuLCAwLiwgMS4pOwogICAgICAgIHZlYzxmbG9hdCwgND4gbG9jYWw1MiA9
IChsb2NhbDUwICogdmVjPGZsb2F0LCA0PihwYXJhbWV0ZXIxNSwgMS4pKTsKICAgICAgICB2ZWM8
ZmxvYXQsIDM+IGxvY2FsNTMgPSBub3JtYWxpemUoKGxvY2FsNDggLSBsb2NhbDUyLnh5eikpOwog
ICAgICAgIHZlYzxmbG9hdCwgND4gbG9jYWw1NCA9IChsb2NhbDUwICogdmVjPGZsb2F0LCA0Pihu
b3JtYWxpemUobG9jYWw1MSksIDAuKSk7CiAgICAgICAgZmxvYXQgbG9jYWw1NSA9IG1heChfX3dn
c2xEb3QobG9jYWw1NC54eXosIGxvY2FsNTMpLCAwLik7CiAgICAgICAgZmxvYXQgbG9jYWw1NiA9
IG1peCgxLiwgbWluKDEuLCBwb3cobGVuZ3RoKChwYXJhbWV0ZXIxNSAvIDAuMzQ5OTk5OTk0MDM5
NTM1NSkpLCA0LikpLCBnbG9iYWwwLmZpZWxkMy54KTsKICAgICAgICBsb2NhbDQ2ID0gKG1peChs
b2NhbDQ2LCAobG9jYWw0OSAqIGxvY2FsNTUpLCBnbG9iYWwwLmZpZWxkMy54KSAqIGxvY2FsNTYp
OwogICAgfQogICAgaWYgKChsb2NhbDM3LmEgPiAwLikpIHsKICAgICAgICBsb2NhbDEzLmZpZWxk
MCA9IGxvY2FsNDE7CiAgICAgICAgbG9jYWwxMy5maWVsZDAgPSB2ZWM8ZmxvYXQsIDQ+KCgoKGxv
Y2FsMTMuZmllbGQwLnJnYiAqIGxvY2FsMzcuYikgKiBsb2NhbDQ2KSArIGxvY2FsNDcpLCBsb2Nh
bDEzLmZpZWxkMC5hKTsKICAgIH0KICAgIGlmICgobG9jYWw0MiA8IGxvY2FsMjApKSB7CiAgICAg
ICAgbG9jYWwxMy5maWVsZDAgPSB2ZWM8ZmxvYXQsIDQ+KDEuLCAxLiwgMS4sIDAuKTsKICAgIH0K
ICAgIHJldHVybiBsb2NhbDEzOwp9CgoKMSBlcnJvciBnZW5lcmF0ZWQgd2hpbGUgY29tcGlsaW5n
IHRoZSBzaGFkZXI6CjMwNzozODogRXhwZWN0ZWQgYSB7LCBidXQgZ290IGEgQAoKLy8xNjQKc3Ry
dWN0IENpcmNsZXNVbmlmb3JtIHsKICAgICBEX2E6IHZlYzQ8ZjMyPiwKICAgICBEX0E6IHZlYzQ8
ZjMyPiwKICAgICBEX2I6IHZlYzQ8ZjMyPiwKICAgICBEX0I6IHZlYzQ8ZjMyPiwKICAgICBtYXRf
cmVfYTogdmVjNDxmMzI+LAogICAgIG1hdF9pbV9hOiB2ZWM0PGYzMj4sCiAgICAgbWF0X3JlX2I6
IHZlYzQ8ZjMyPiwKICAgICBtYXRfaW1fYjogdmVjNDxmMzI+LAogICAgIHRfYTogdmVjNDxmMzI+
LAogICAgIHZpZXdwb3J0OiB2ZWM0PGYzMj4sCiAgICAgbGV2ZWxzOiB2ZWM0PGYzMj4sCiAgICAg
cm90YXRpb246IG1hdDR4NDxmMzI+LAogICAgIGRlbHRhOiB2ZWM0PGYzMj4sCiAgICAgYmJveDog
dmVjNDxmMzI+LAogICAgLy9jYSBDQSBjYiBjQiByYW5nZSBbMC03XSBwYWxldHRlcwogICAgIGNv
bG9yUGFsZXR0ZXM6IHZlYzQ8ZjMyPiwKICAgICBjb3JuZXJzOiB2ZWM0PGYzMj4sCiAgICAgcGFs
ZXR0ZTE6IHZlYzQ8ZjMyPiwKICAgICBwYWxldHRlMjogdmVjNDxmMzI+CiAgIH07CgpAZ3JvdXAo
MCkgQGJpbmRpbmcoMCkgdmFyPHVuaWZvcm0+IGNpcmNsZXM6IENpcmNsZXNVbmlmb3JtOwoKQGdy
b3VwKDEpIEBiaW5kaW5nKDApIHZhciBzYW1wbGVySW4gOiBzYW1wbGVyOwpAZ3JvdXAoMSkgQGJp
bmRpbmcoMSkgdmFyIHRleHR1cmVJbiA6IHRleHR1cmVfMmQ8ZjMyPjsKQGdyb3VwKDEpIEBiaW5k
aW5nKDIpIHZhciB0ZXh0dXJlQ29sb3IgOiB0ZXh0dXJlXzJkPGYzMj47CgpAZ3JvdXAoMikgQGJp
bmRpbmcoMCkgdmFyIHNhbXBsZXJDYW52YXMgOiBzYW1wbGVyOwpAZ3JvdXAoMikgQGJpbmRpbmco
MSkgdmFyIHRleHR1cmVDYW52YXMgOiB0ZXh0dXJlXzJkPGYzMj47CgpzdHJ1Y3QgVGV4IHsKICAg
IEBsb2NhdGlvbigwKSB0ZXh0dXJlT3V0IDogdmVjNDxmMzI+LAp9OwoKLy8gaHR0cHM6Ly9lbi53
aWtpcGVkaWEub3JnL3dpa2kvQ29tcGxleF9udW1iZXIjTXVsdGlwbGljYXRpb24KCmZuIHByb2Qo
YzE6IHZlYzI8ZjMyPiwgYzI6IHZlYzI8ZjMyPikgLT4gdmVjMjxmMzI+IHsKICByZXR1cm4gdmVj
MjxmMzI+KGMxLnggKiBjMi54IC0gYzEueSAqIGMyLnksIGMxLnkgKiBjMi54ICsgYzEueCAqIGMy
LnkpOwp9CgpmbiBpbnYoejogdmVjMjxmMzI+KSAtPiB2ZWMyPGYzMj4gewogIGxldCBkID0gZG90
KHosIHopOwogIHJldHVybiB2ZWMyPGYzMj4oei54LCAtei55KSAvIGQ7Cn0KCmZuIGRpdihhOiB2
ZWMyPGYzMj4sIGI6IHZlYzI8ZjMyPikgLT4gdmVjMjxmMzI+IHsKICAgIHJldHVybiBwcm9kKGEs
IGludihiKSk7Cn0KCmZuIGludmVyc2VNYXQobTogbWF0Mng0PGYzMj4pIC0+IG1hdDJ4NDxmMzI+
IHsKICAgIGxldCBtYXRfcmUgPSBtWzBdOwogICAgbGV0IG1hdF9pbSA9IG1bMV07CiAgICBsZXQg
YW5zX21hdF9yZSA9IHZlYzQ8ZjMyPigKICAgICAgICAgbWF0X3JlLncsIC1tYXRfcmUueSwKICAg
ICAgICAtbWF0X3JlLnosICBtYXRfcmUueAogICAgKTsKICAgIGxldCBhbnNfbWF0X2ltID0gdmVj
NDxmMzI+KAogICAgICAgICBtYXRfaW0udywgLW1hdF9pbS55LAogICAgICAgIC1tYXRfaW0ueiwg
IG1hdF9pbS54CiAgICApOwogICAgcmV0dXJuIG1hdDJ4NDxmMzI+KAogICAgICAgIGFuc19tYXRf
cmUsIGFuc19tYXRfaW0KICAgICk7Cn0KCmZuIHN0ZXJlb1NwaGVyZTJQbGFuZShwb3M6IHZlYzM8
ZjMyPikgLT4gdmVjMjxmMzI+IHsKICAgIGxldCBkZW4gPSAxLiAtIHBvcy56OwogICAgcmV0dXJu
IHZlYzI8ZjMyPihwb3MueCwgcG9zLnkpIC8gZGVuOwp9CgpmbiBzdGVyZW9QbGFuZTJTcGhlcmUo
cG9zOiB2ZWMyPGYzMj4pIC0+IHZlYzM8ZjMyPiB7CiAgICBsZXQgZGVuID0gcG9zLnggKiBwb3Mu
eCArIHBvcy55ICogcG9zLnkgKyAxLjsKICAgIHJldHVybiB2ZWMzPGYzMj4ocG9zLngsIHBvcy55
LCBwb3MueCAqIHBvcy54ICsgcG9zLnkgKiBwb3MueSkgLyBkZW47Cn0KCmZuIG1vYml1c09uUG9p
bnQobTogbWF0Mng0PGYzMj4sIHo6IHZlYzI8ZjMyPikgLT4gdmVjMjxmMzI+IHsKICAgIGxldCBh
ID0gdmVjMjxmMzI+KG1bMF0ueCwgbVsxXS54KTsKICAgIGxldCBiID0gdmVjMjxmMzI+KG1bMF0u
eSwgbVsxXS55KTsKICAgIGxldCBjID0gdmVjMjxmMzI+KG1bMF0ueiwgbVsxXS56KTsKICAgIGxl
dCBkID0gdmVjMjxmMzI+KG1bMF0udywgbVsxXS53KTsKCiAgICByZXR1cm4gZGl2KAogICAgICAg
IHByb2QoYSwgeikgKyBiLAogICAgICAgIHByb2QoYywgeikgKyBkCiAgICApOwp9CgogICAgZm4g
dHJhbnNmb3JtKAogICAgICAgIG1hdF9hOiBtYXQyeDQ8ZjMyPiwKICAgICAgICBtYXRfQTogbWF0
Mng0PGYzMj4sCiAgICAgICAgbWF0X2I6IG1hdDJ4NDxmMzI+LAogICAgICAgIG1hdF9COiBtYXQy
eDQ8ZjMyPiwKICAgICAgICBwOiB2ZWMyPGYzMj4pIC0+IHZlYzI8ZjMyPiB7CiAgICAgICAgaWYg
KGNpcmNsZXMuRF9hLnogPCAwLikgewogICAgICAgICAgICBpZiAocC55ID4gMC4pIHsKICAgICAg
ICAgICAgICAgIHJldHVybiBwOwogICAgICAgICAgICAgICAgLy9yZXR1cm4gbW9iaXVzT25Qb2lu
dChtYXRfYSwgcCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBs
ZXQgZDEgPSBkaXN0YW5jZShwLCBjaXJjbGVzLkRfYS54eSk7CiAgICAgICAgICAgIGlmIChkMSA8
PSBjaXJjbGVzLkRfYS56KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbW9iaXVzT25Qb2ludCht
YXRfYSwgcCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbGV0IGQyID0gZGlzdGFu
Y2UocCwgY2lyY2xlcy5EX0EueHkpOwogICAgICAgIGlmIChkMiA8PSBjaXJjbGVzLkRfQS56KSB7
CiAgICAgICAgICAgIHJldHVybiBtb2JpdXNPblBvaW50KG1hdF9BLCBwKTsKICAgICAgICB9CiAg
ICAgICAgbGV0IGQzID0gZGlzdGFuY2UocCwgY2lyY2xlcy5EX2IueHkpOwogICAgICAgIGlmIChk
MyA8PSBjaXJjbGVzLkRfYi56KSB7CiAgICAgICAgICAgIHJldHVybiBtb2JpdXNPblBvaW50KG1h
dF9iLCBwKTsKICAgICAgICB9CiAgICAgICAgbGV0IGQ0ID0gZGlzdGFuY2UocCwgY2lyY2xlcy5E
X0IueHkpOwogICAgICAgIGlmIChkNCA8PSBjaXJjbGVzLkRfQi56KSB7CiAgICAgICAgICAgIHJl
dHVybiBtb2JpdXNPblBvaW50KG1hdF9CLCBwKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHA7
CiAgICB9CgogICAgZm4gYmVsb25nc1RvRGlzayhwOiB2ZWMyPGYzMj4sIGM6IHZlYzQ8ZjMyPiwg
aW5kZXg6IGYzMiwgc3ltbWV0cnk6IGJvb2wpIC0+IHZlYzQ8ZjMyPiB7CiAgICAgICAgbGV0IGQx
ID0gZGlzdGFuY2UocCwgYy54eSk7CiAgICAgICAgaWYgKGQxIDw9IGMueikgewogICAgICAgICAg
ICByZXR1cm4gdmVjNDxmMzI+KGluZGV4LCAwLiwgMjU1LiwgMjU1LikgLyAyNTUuOwogICAgICAg
IH0KICAgICAgICBpZiAoc3ltbWV0cnkpIHsKICAgICAgICAgICAgbGV0IGNhMSA9IHZlYzI8ZjMy
PihjLngsIGNpcmNsZXMudmlld3BvcnQueSArIGNpcmNsZXMudmlld3BvcnQudyAtIChjLnkgLSBj
aXJjbGVzLnZpZXdwb3J0LnkpKTsKICAgICAgICAgICAgbGV0IGQxMSA9IGRpc3RhbmNlKHAsIGNh
MSk7CiAgICAgICAgICAgIGlmIChkMTEgPD0gYy56KSB7CiAgICAgICAgICAgICAgICByZXR1cm4g
dmVjNDxmMzI+KGluZGV4LCAwLiwgMjU1LiwgMjU1LikgLyAyNTUuOwogICAgICAgICAgICB9CiAg
ICAgICAgICAgIGxldCBjYTIgPSB2ZWMyPGYzMj4oY2lyY2xlcy52aWV3cG9ydC54ICsgY2lyY2xl
cy52aWV3cG9ydC56IC0gKGMueCAtIGNpcmNsZXMudmlld3BvcnQueCksIGMueSk7CiAgICAgICAg
ICAgIGxldCBkMTIgPSBkaXN0YW5jZShwLCBjYTIpOwogICAgICAgICAgICBpZiAoZDEyIDw9IGMu
eikgewogICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQ8ZjMyPihpbmRleCwgMC4sIDI1NS4sIDI1
NS4pIC8gMjU1LjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdmVjNDxm
MzI+KDAuLCAwLiwgMC4sIDAuKTsKICAgIH0KCiAgICBmbiBvdXRPZkJvdW5kcyhwOiB2ZWMyPGYz
Mj4sIHN5bW1ldHJ5OiBib29sKSAtPiB2ZWM0PGYzMj4gewogICAgICAgIHZhciBwb3MgPSBwOwog
ICAgICAgIGxldCBsID0gMC47CiAgICAgICAgaWYgKGNpcmNsZXMuRF9hLnogPCAwLikgewogICAg
ICAgICAgICBpZiAocC55ID4gY2lyY2xlcy52aWV3cG9ydC53IC8gMi4gKyBjaXJjbGVzLnZpZXdw
b3J0LnkpIHsKICAgICAgICAgICAgICAgIC8vcmV0dXJuIHZlYzQ8ZjMyPigwLiwgbCwgMC4sIDEu
KTsKICAgICAgICAgICAgICAgIC8vcmV0dXJuIHZlYzQ8ZjMyPigwLiwgMC4sIDAuLCAwLik7CiAg
ICAgICAgICAgICAgICBwb3MueSA9IGNpcmNsZXMudmlld3BvcnQueSArIChjaXJjbGVzLnZpZXdw
b3J0LncvMi4gLSBwLnkpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgbGV0IGFucyA9IGJlbG9uZ3NUb0Rpc2socCwgY2lyY2xlcy5EX2EsIDAuLCBzeW1tZXRyeSk7
CiAgICAgICAgICAgIGlmIChhbnMuYSAhPSAwLikgewogICAgICAgICAgICAgICAgcmV0dXJuIGFu
czsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBsZXQgYW5zX0EgPSBiZWxvbmdzVG9E
aXNrKHAsIGNpcmNsZXMuRF9BLCAxLiwgc3ltbWV0cnkpOwogICAgICAgIGlmIChhbnNfQS5hICE9
IDAuKSB7CiAgICAgICAgICAgIHJldHVybiBhbnNfQTsKICAgICAgICB9CiAgICAgICAgbGV0IGFu
c19iID0gYmVsb25nc1RvRGlzayhwLCBjaXJjbGVzLkRfYiwgMi4sIHN5bW1ldHJ5KTsKICAgICAg
ICBpZiAoYW5zX2IuYSAhPSAwLikgewogICAgICAgICAgICByZXR1cm4gYW5zX2I7CiAgICAgICAg
fQogICAgICAgIGxldCBhbnNfQiA9IGJlbG9uZ3NUb0Rpc2socCwgY2lyY2xlcy5EX0IsIDMuLCBz
eW1tZXRyeSk7CiAgICAgICAgaWYgKGFuc19CLmEgIT0gMC4pIHsKICAgICAgICAgICAgcmV0dXJu
IGFuc19COwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmVjNDxmMzI+KDAuLCAwLiwgMC4sIDAu
KTsKICAgIH0KCiAgICBmbiBjaGVja2VyYm9hcmQocDogdmVjMjxmMzI+LCBhbmdsZTogZjMyKSAt
PiBmMzIgewogICAgICAgIHJldHVybiAxLjsKLyoKICAgICAgICBsZXQgcGkgPSAzLjE0MTU5MjY1
MzU7CiAgICAgICAgdmFyIGFuZ2xlVmFsdWUgPSBhdGFuMihwLnksIHAueCk7CiAgICAgICAgaWYg
KGFuZ2xlVmFsdWUgPCAwLikgewogICAgICAgICAgICBhbmdsZVZhbHVlID0gYW5nbGVWYWx1ZSAr
IHBpICogMi47CiAgICAgICAgfQogICAgICAgIHZhciBjb3VudGVyID0gMC47CiAgICAgICAgZm9y
ICh2YXIgaSA9IDAuOyBpIDwgcGkgKiAyLjsgaSA9IGkgKyBhbmdsZSkgewogICAgICAgICAgICBp
ZiAoYW5nbGVWYWx1ZSA+PSBpICYmIGFuZ2xlVmFsdWUgPD0gaSArIGFuZ2xlKSB7CiAgICAgICAg
ICAgICAgICByZXR1cm4gY291bnRlciAvIDAuNSArIDAuNTsKICAgICAgICAgICAgfQogICAgICAg
ICAgICBjb3VudGVyID0gMS4gLSBjb3VudGVyOwogICAgICAgIH0KICAgICAgICByZXR1cm4gY291
bnRlciAvIDAuNSArIDAuNTsKKi8KICAgIH0KCiAgICBmbiBjb2xvckJhY2tncm91bmQocDogdmVj
MjxmMzI+KSAtPiB2ZWM0PGYzMj4gewogICAgICAgIGxldCBwaSA9IDMuMTQxNTkyNjUzNTsKICAg
ICAgICBsZXQgYW5nbGUgPSBwaS84LjsKICAgICAgICB2YXIgY2EgPSB2ZWM0PGYzMj4oMC4sIDAu
LCAxLiwgMjU1LikgLyAyNTUuOwogICAgICAgIHZhciBjQSA9IHZlYzQ8ZjMyPigxLiwgMC4sIDEu
LCAyNTUuKSAvIDI1NS47CiAgICAgICAgdmFyIGNiID0gdmVjNDxmMzI+KDIuLCAwLiwgMS4sIDI1
NS4pIC8gMjU1LjsKICAgICAgICB2YXIgY0IgPSB2ZWM0PGYzMj4oMy4sIDAuLCAxLiwgMjU1Likg
LyAyNTUuOwogICAgICAgIHZhciBwb3MgPSBwOwoKICAgICAgICBpZiAoY2lyY2xlcy5EX2EueiA8
IDAuKSB7CiAgICAgICAgICAgIGlmIChwLnkgPiBjaXJjbGVzLnZpZXdwb3J0LnkgKyBjaXJjbGVz
LnZpZXdwb3J0LncgLyAyLikgewogICAgICAgICAgICAgICAgcG9zLnkgPSBjaXJjbGVzLnZpZXdw
b3J0LnkgKyAoY2lyY2xlcy52aWV3cG9ydC53LzIuIC0gcC55KTsKICAgICAgICAgICAgICAgIC8v
cmV0dXJuIGNhOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbGV0
IGQxID0gZGlzdGFuY2UocG9zLCBjaXJjbGVzLkRfYS54eSk7CiAgICAgICAgICAgIGlmIChkMSA8
PSBjaXJjbGVzLkRfYS56KSB7CiAgICAgICAgICAgICAgICBjYS5iID0gY2hlY2tlcmJvYXJkKHBv
cyAtIGNpcmNsZXMuRF9hLnh5LCBhbmdsZSk7CiAgICAgICAgICAgICAgICByZXR1cm4gY2E7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbGV0IGQyID0gZGlzdGFuY2UocG9zLCBjaXJj
bGVzLkRfQS54eSk7CiAgICAgICAgaWYgKGQyIDw9IGNpcmNsZXMuRF9BLnopIHsKICAgICAgICAg
ICAgY0EuYiA9IGNoZWNrZXJib2FyZChwb3MgLSBjaXJjbGVzLkRfQS54eSwgYW5nbGUpOwogICAg
ICAgICAgICByZXR1cm4gY0E7CiAgICAgICAgfQogICAgICAgIGxldCBkMyA9IGRpc3RhbmNlKHBv
cywgY2lyY2xlcy5EX2IueHkpOwogICAgICAgIGlmIChkMyA8PSBjaXJjbGVzLkRfYi56KSB7CiAg
ICAgICAgICAgIGNiLmIgPSBjaGVja2VyYm9hcmQocG9zIC0gY2lyY2xlcy5EX2IueHksIGFuZ2xl
KTsKICAgICAgICAgICAgcmV0dXJuIGNiOwogICAgICAgIH0KICAgICAgICBsZXQgZDQgPSBkaXN0
YW5jZShwb3MsIGNpcmNsZXMuRF9CLnh5KTsKICAgICAgICBpZiAoZDQgPD0gY2lyY2xlcy5EX0Iu
eikgewogICAgICAgICAgICBjQi5iID0gY2hlY2tlcmJvYXJkKHBvcyAtIGNpcmNsZXMuRF9CLnh5
LCBhbmdsZSk7CiAgICAgICAgICAgIHJldHVybiBjQjsKICAgICAgICB9CiAgICAgICAgcmV0dXJu
IHZlYzQ8ZjMyPigwLiwgMC4sIDAuLCAwLik7CiAgICB9CgoKICAgIGZuIGNpcmNsZUludmVydChw
OiB2ZWMyPGYzMj4pIC0+IHZlYzI8ZjMyPiB7CiAgICAgICAgbGV0IGQxID0gZGlzdGFuY2UocCwg
Y2lyY2xlcy5EX2EueHkpOwogICAgICAgIGlmIChkMSA8PSBjaXJjbGVzLkRfYS56KSB7CiAgICAg
ICAgICAgIGxldCBSYTIgPSBjaXJjbGVzLkRfYS56ICogY2lyY2xlcy5EX2EuejsKICAgICAgICAg
ICAgbGV0IGQxMiA9IFJhMiAvIGQxIC0gZDE7CiAgICAgICAgICAgIGxldCBkaXJlY3Rpb24gPSBu
b3JtYWxpemUocCAtIGNpcmNsZXMuRF9hLnh5KSAqIGQxMjsKICAgICAgICAgICAgcmV0dXJuIHAg
KyBkaXJlY3Rpb247CiAgICAgICAgfQogICAgICAgIGxldCBkMiA9IGRpc3RhbmNlKHAsIGNpcmNs
ZXMuRF9BLnh5KTsKICAgICAgICBpZiAoZDIgPD0gY2lyY2xlcy5EX0EueikgewogICAgICAgICAg
ICBsZXQgUmEyID0gY2lyY2xlcy5EX0EueiAqIGNpcmNsZXMuRF9BLno7CiAgICAgICAgICAgIGxl
dCBkMjIgPSBSYTIgLyBkMiAtIGQyOwogICAgICAgICAgICBsZXQgZGlyZWN0aW9uID0gbm9ybWFs
aXplKHAgLSBjaXJjbGVzLkRfQS54eSkgKiBkMjI7CiAgICAgICAgICAgIHJldHVybiBwICsgZGly
ZWN0aW9uOwogICAgICAgIH0KICAgICAgICBsZXQgZDMgPSBkaXN0YW5jZShwLCBjaXJjbGVzLkRf
Yi54eSk7CiAgICAgICAgaWYgKGQzIDw9IGNpcmNsZXMuRF9iLnopIHsKICAgICAgICAgICAgbGV0
IFJhMiA9IGNpcmNsZXMuRF9iLnogKiBjaXJjbGVzLkRfYi56OwogICAgICAgICAgICBsZXQgZDMy
ID0gUmEyIC8gZDMgLSBkMzsKICAgICAgICAgICAgbGV0IGRpcmVjdGlvbiA9IG5vcm1hbGl6ZShw
IC0gY2lyY2xlcy5EX2IueHkpICogZDMyOwogICAgICAgICAgICByZXR1cm4gcCArIGRpcmVjdGlv
bjsKICAgICAgICB9CiAgICAgICAgbGV0IGQ0ID0gZGlzdGFuY2UocCwgY2lyY2xlcy5EX0IueHkp
OwogICAgICAgIGlmIChkNCA8PSBjaXJjbGVzLkRfQi56KSB7CiAgICAgICAgICAgIGxldCBSYTIg
PSBjaXJjbGVzLkRfQi56ICogY2lyY2xlcy5EX0IuejsKICAgICAgICAgICAgbGV0IGQ0MiA9IFJh
MiAvIGQ0IC0gZDQ7CiAgICAgICAgICAgIGxldCBkaXJlY3Rpb24gPSBub3JtYWxpemUocCAtIGNp
cmNsZXMuRF9CLnh5KSAqIGQ0MjsKICAgICAgICAgICAgcmV0dXJuIHAgKyBkaXJlY3Rpb247CiAg
ICAgICAgfQogICAgICAgIHJldHVybiBwOwogICAgfQoKICAgIGZuIG1vZHVsbyhhOmYzMiwgYjpm
MzIpIC0+IGYzMiB7CiAgICAgICAgcmV0dXJuIGEgLSAoYiAqIGZsb29yKGEvYikpOwogICAgfQoK
ICAgIGZuIGNvbG9yUGFsZXR0ZShzY2FsZU46IGYzMiwgbGV2ZWw6IGYzMiwgY29sb3JQYWxldHRl
czogdmVjNDxmMzI+LCBsZXZlbHM6IGYzMikgLT4gdmVjMjxmMzI+IHsKICAgICAgICAvLyBnZXQg
dGhlIHJpZ2h0IGNvbG9yIHNjYWxlCiAgICAgICAgbGV0IHRvdGFsU2NhbGVzID0gOC47CiAgICAg
ICAgbGV0IHRvdGFsTGV2ZWxzID0gbGV2ZWxzICsgMC47CiAgICAgICAgaWYgKHNjYWxlTiA8IDAu
KSB7CiAgICAgICAgICAgIHJldHVybiB2ZWMyPGYzMj4oCiAgICAgICAgICAgICAgICAoKGxldmVs
IC8gdG90YWxMZXZlbHMpKSwKICAgICAgICAgICAgICAgIDEuIC8gKHRvdGFsU2NhbGVzICogMi4p
ICsgMS4gLyB0b3RhbFNjYWxlcyAqIChhYnMoc2NhbGVOKS0xLikKICAgICAgICAgICAgKTsKICAg
ICAgICB9CiAgICAgICAgcmV0dXJuIHZlYzI8ZjMyPigKICAgICAgICAgICAgMS4gLSAobGV2ZWwg
LyB0b3RhbExldmVscyksCiAgICAgICAgICAgIDEuIC8gKHRvdGFsU2NhbGVzICogMi4pICsgMS4g
LyB0b3RhbFNjYWxlcyAqIChhYnMoc2NhbGVOKS0xLikKICAgICAgICApOwogICAgfQoKICAgIGZu
IG1hc2tpdCh2UG9zOiB2ZWMyPGYzMj4sIG1hdF9hOiBtYXQyeDQ8ZjMyPiwgbWF0X0E6IG1hdDJ4
NDxmMzI+KSAtPiB2ZWM0PGYzMj4gewogICAgICAgIHZhciB0ZXh0dXJlT3V0ID0gdmVjNCgwLik7
CiAgICAgICAgLy8gYmVnaW5uaW5nIG9mIGpvcyBsZXlzIGNvZGUKICAgICAgICB2YXIgdXYgPSBj
aXJjbGVzLnRfYS54eTsKICAgICAgICBsZXQgcGhhc2UgPSBjaXJjbGVzLmRlbHRhLnk7CgogICAg
ICAgIGxldCB2UG9zU2NhbGVkID0gdlBvcy8xLjsKICAgICAgICAvLyBIYW5kbGUgQXhpcyByb3Rh
dGlvbgogICAgICAgIGxldCB2UG9zeTEgPSAodlBvc1NjYWxlZC55ICsgMS4vcGhhc2UpKnV2Lngv
Mi47CiAgICAgICAgbGV0IHZQb3N5MiA9ICh2UG9zU2NhbGVkLnkpOwogICAgICAgIGxldCB2UG9z
eTMgPSB2UG9zeTEgKyAodlBvc3kyIC0gdlBvc3kxKSAqIGNpcmNsZXMuZGVsdGEueDsKCiAgICAg
ICAgbGV0IHBTcGhlcmUgPSBzdGVyZW9QbGFuZTJTcGhlcmUodmVjMih2UG9zU2NhbGVkLngsIHZQ
b3N5MykpIC0gdmVjMzxmMzI+KDAuLCAwLiwgMC41KTsKICAgICAgICBsZXQgcFNwaGVyZVJvdCA9
IGNpcmNsZXMucm90YXRpb24gKiB2ZWM0PGYzMj4ocFNwaGVyZSwgMS4pOwogICAgICAgIHZhciBw
b3MgPSBzdGVyZW9TcGhlcmUyUGxhbmUocFNwaGVyZVJvdC54eXogKyB2ZWMzPGYzMj4oMC4sIDAu
LCAwLjUpKTsKCiAgICAgICAgcG9zID0gdmVjMihwb3MueCAqIHBoYXNlLCBwb3MueSAqIHBoYXNl
KTsKICAgICAgICBsZXQgTiA9IDEwMC47CiAgICAgICAgbGV0IGJsYWNrID0gdmVjNCgwLjEsIDAu
MiwgMC4yLCAwLjApOwogICAgICAgIGxldCBiYWNrWCA9IDEuIC0gKGNpcmNsZXMuYmJveC55IC0g
cG9zLngpIC8gKGNpcmNsZXMuYmJveC55IC0gY2lyY2xlcy5iYm94LngpOwogICAgICAgIGxldCBi
YWNrWSA9IDEuIC0gKGNpcmNsZXMuYmJveC53IC0gcG9zLnkpIC8gKGNpcmNsZXMuYmJveC53IC0g
Y2lyY2xlcy5iYm94LnopOwogICAgICAgIGxldCBiYWNrVGV4dHVyZSA9IHRleHR1cmVTYW1wbGUo
dGV4dHVyZUNhbnZhcywgc2FtcGxlckNhbnZhcywgdmVjMihiYWNrWCwgYmFja1kpKTsKICAgICAg
ICAvLyBCRUdJTiBMT09QCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTA7IGkrKykgQGRp
YWdub3N0aWMob2ZmLGRlcml2YXRpdmVfdW5pZm9ybWl0eSkgewogICAgICAgICAgICBwb3MueCA9
IG1vZHVsbyhwb3MueCArIDIuICogTiAtIDEuICsgdXYueSAqIHBvcy55IC8gdXYueCwgMi4pIC0g
MS4gLSB1di55ICogcG9zLnkgLyB1di54OwogICAgICAgICAgICBsZXQgdGV4ZWxYID0gMS4gLSAo
Y2lyY2xlcy5iYm94LnkgLSBwb3MueCkgLyAoY2lyY2xlcy5iYm94LnkgLSBjaXJjbGVzLmJib3gu
eCk7CiAgICAgICAgICAgIGxldCB0ZXhlbFkgPSAxLiAtIChjaXJjbGVzLmJib3gudyAtIHBvcy55
KSAvIChjaXJjbGVzLmJib3gudyAtIGNpcmNsZXMuYmJveC56KTsKICAgICAgICAgICAgdmFyIHRl
eGVsID0gdmVjMih0ZXhlbFgsIHRleGVsWSk7CiAgICAgICAgICAgIGlmIChjaXJjbGVzLmJib3gu
eCA9PSAwLikgewogICAgICAgICAgICAgICAgdGV4ZWwgPSB2ZWMyKChwb3MueCArIDEuKS8yLiwg
cG9zLnkgLyB1di54KTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgYW5zID0gdGV4dHVy
ZVNhbXBsZSh0ZXh0dXJlQ2FudmFzLCBzYW1wbGVyQ2FudmFzLCB0ZXhlbCk7CiAgICAgICAgICAg
IGlmIChhbnMuZyA+IDAuKSB7CiAgICAgICAgICAgICAgICBwb3MueCA9IHBvcy54ICsgY2lyY2xl
cy5jb3JuZXJzLng7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGFucy5iID4gMC4pIHsK
ICAgICAgICAgICAgICAgIHBvcy54ID0gcG9zLnggLSBjaXJjbGVzLmNvcm5lcnMueDsKICAgICAg
ICAgICAgfQogICAgICAgICAgICBsZXQgZmkgPSAxLiAvIHNxcnQoZjMyKGkpKSAvIDIuOwoKICAg
ICAgICAgICAgbGV0IHNjYWxlMSA9IGNpcmNsZXMucGFsZXR0ZTEueDsKICAgICAgICAgICAgdmFy
IHJldmVyc2UgPSAxLjsKICAgICAgICAgICAgaWYgKGNpcmNsZXMucGFsZXR0ZTEueSA+IDAuKSB7
CiAgICAgICAgICAgICAgICByZXZlcnNlID0gLTEuOwogICAgICAgICAgICB9CiAgICAgICAgICAg
IHZhciBsZW4xID0gYWJzKHBvcy55IC0gdXYueCkvMTAuICsgMS47CiAgICAgICAgICAgIGlmIChj
aXJjbGVzLnBhbGV0dGUxLncgPiAwLikgewogICAgICAgICAgICAgICAgbGVuMSA9IHJvdW5kKGFi
cyhwb3MueSAtIHV2LngpKS8xMC4gKyAxLjsKICAgICAgICAgICAgfQogICAgICAgICAgICBsZXQg
dXZDb2xvcjEgPSBjb2xvclBhbGV0dGUoc2NhbGUxICogcmV2ZXJzZSwgZjMyKGkqaSksIGNpcmNs
ZXMuY29sb3JQYWxldHRlcywgMjUwLiouNyk7CiAgICAgICAgICAgIGxldCBjb2xvcjEgPSB0ZXh0
dXJlU2FtcGxlKHRleHR1cmVDb2xvciwgc2FtcGxlckluLCB1dkNvbG9yMSk7CiAgICAgICAgICAg
IHRleHR1cmVPdXQgPSB2ZWM0PGYzMj4oY29sb3IxLnJnYiwgMS4gLyBsZW4xKTsvLzEuL2ZpKTsK
ICAgICAgICAgICAgaWYgKGNpcmNsZXMucGFsZXR0ZTEueiA9PSAxLikgewogICAgICAgICAgICAg
ICAgdGV4dHVyZU91dCA9IHZlYzQ8ZjMyPihjb2xvcjEucmdiIC8gbGVuMSwgMS4pOwogICAgICAg
ICAgICB9CiAgICAgICAgICAgIGlmIChjaXJjbGVzLnBhbGV0dGUxLnogPT0gMi4pIHsKICAgICAg
ICAgICAgICAgIHRleHR1cmVPdXQgPSB2ZWM0PGYzMj4oY29sb3IxLnJnYiwgMS4pOwogICAgICAg
ICAgICB9CgogICAgICAgICAgICBpZiAocG9zLnkgPiB1di54KSB7CiAgICAgICAgICAgICAgICBy
ZXR1cm4gdGV4dHVyZU91dDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGV0IHNjYWxlMiA9
IGNpcmNsZXMucGFsZXR0ZTIueDsKICAgICAgICAgICAgcmV2ZXJzZSA9IDEuOwogICAgICAgICAg
ICBpZiAoY2lyY2xlcy5wYWxldHRlMi55ID4gMC4pIHsKICAgICAgICAgICAgICAgIHJldmVyc2Ug
PSAtMS47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIGxlbjIgPSBhYnMocG9zLnkpLzEw
LiArIDEuOwogICAgICAgICAgICBpZiAoY2lyY2xlcy5wYWxldHRlMi53ID4gMC4pIHsKICAgICAg
ICAgICAgICAgIGxlbjIgPSByb3VuZChhYnMocG9zLnkpKS8xMC4gKyAxLjsKICAgICAgICAgICAg
fQogICAgICAgICAgICBsZXQgdXZDb2xvcjIgPSBjb2xvclBhbGV0dGUoc2NhbGUyICogcmV2ZXJz
ZSwgZjMyKGkqaSksIGNpcmNsZXMuY29sb3JQYWxldHRlcywgMjUwLiouNyk7CiAgICAgICAgICAg
IGxldCBjb2xvcjIgPSB0ZXh0dXJlU2FtcGxlKHRleHR1cmVDb2xvciwgc2FtcGxlckluLCB1dkNv
bG9yMik7CiAgICAgICAgICAgIHRleHR1cmVPdXQgPSB2ZWM0PGYzMj4oY29sb3IyLnJnYiwgMS4g
LyBsZW4yKTsvLzEuL2ZpKTsKICAgICAgICAgICAgaWYgKGNpcmNsZXMucGFsZXR0ZTIueiA9PSAx
LikgewogICAgICAgICAgICAgICAgdGV4dHVyZU91dCA9IHZlYzQ8ZjMyPihjb2xvcjIucmdiIC8g
bGVuMiwgMS4pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChjaXJjbGVzLnBhbGV0dGUy
LnogPT0gMi4pIHsKICAgICAgICAgICAgICAgIHRleHR1cmVPdXQgPSB2ZWM0PGYzMj4oY29sb3Iy
LnJnYiwgMS4pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChwb3MueSA8IDAuKSB7CiAg
ICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZU91dDsKICAgICAgICAgICAgfQogICAgICAgICAg
ICBpZiAoYW5zLnIgPiAwLikgewogICAgICAgICAgICAgICAgcG9zID0gbW9iaXVzT25Qb2ludCht
YXRfQSwgcG9zKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHBvcyA9IG1v
Yml1c09uUG9pbnQobWF0X2EsIHBvcyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAg
Ly8gRU5ETE9PUAogICAgICAgIGxldCBsZW4zID0gbGVuZ3RoKHBvcyk7Ly8gKyAxLjsKICAgICAg
ICB0ZXh0dXJlT3V0ID0gYmxhY2s7CiAgICAgICAgLy90ZXh0dXJlT3V0ID0gbWl4KGJsYWNrLCBi
YWNrVGV4dHVyZSAqIHZlYzQ8ZjMyPigwLjUsIDAuNSwgMS4sIDEuKSwgMC41KTsKICAgICAgICBy
ZXR1cm4gdGV4dHVyZU91dDsKICAgICAgICAvLyBlbmQgb2Ygam9zIGxleXMgY29kZQogICAgfQoK
ICBAZnJhZ21lbnQKICBmbiBtYWluKAogICAgQGxvY2F0aW9uKDApIHZQb3M6IHZlYzI8ZjMyPgog
ICkgLT4gVGV4IHsKICB2YXIgb3V0cHV0IDogVGV4OwoKICBsZXQgbWF0X2EgPSBtYXQyeDQ8ZjMy
PigKICAgICAgY2lyY2xlcy5tYXRfcmVfYSwgY2lyY2xlcy5tYXRfaW1fYQogICk7CiAgbGV0IG1h
dF9BID0gaW52ZXJzZU1hdChtYXRfYSk7CiAgbGV0IG1hdF9iID0gbWF0Mng0PGYzMj4oCiAgICAg
IGNpcmNsZXMubWF0X3JlX2IsIGNpcmNsZXMubWF0X2ltX2IKICApOwogIGxldCBtYXRfQiA9IGlu
dmVyc2VNYXQobWF0X2IpOwoKICBpZiAoY2lyY2xlcy5jb3JuZXJzLnkgPiAwLikgewogICAgb3V0
cHV0LnRleHR1cmVPdXQgPSBtYXNraXQodlBvcywgbWF0X2EsIG1hdF9BKTsKICAgIHJldHVybiBv
dXRwdXQ7CiAgfQoKICBsZXQgcCA9IHZlYzI8ZjMyPigodlBvcy54ICsgMS4pIC8gMi4gKiBjaXJj
bGVzLnZpZXdwb3J0LnogKyBjaXJjbGVzLnZpZXdwb3J0LngsCiAgKHZQb3MueSArIDEuKSAvIDIu
ICogY2lyY2xlcy52aWV3cG9ydC53ICsgY2lyY2xlcy52aWV3cG9ydC55KTsKCiAgbGV0IG91dENv
bG9yID0gdGV4dHVyZVNhbXBsZSh0ZXh0dXJlSW4sIHNhbXBsZXJJbiwgKHZQb3MgKyAxLikgLyAy
Lik7CiAgLy8gSWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IHBhc3MKICBpZiAoY2lyY2xlcy5sZXZl
bHMueCAhPSAwLikgewogICAgLy92YXIgcDIgPSBjaXJjbGVJbnZlcnQocCk7CiAgICBsZXQgcDIg
PSB0cmFuc2Zvcm0obWF0X2EsIG1hdF9BLCBtYXRfYiwgbWF0X0IsIHApOwogICAgdmFyIG5vcm1h
bGl6ZWRQMSA9ICh2UG9zICsgMS4pIC8gMi47CiAgICBsZXQgc2FtcGxlZCA9IHRleHR1cmVTYW1w
bGUodGV4dHVyZUluLCBzYW1wbGVySW4sIG5vcm1hbGl6ZWRQMSk7CiAgICBsZXQgcDJfdmlld3Bv
cnQgPSB2ZWMyKAogICAgICAgIChwMi54IC0gY2lyY2xlcy52aWV3cG9ydC54KSAvIGNpcmNsZXMu
dmlld3BvcnQueiwKICAgICAgICAocDIueSAtIGNpcmNsZXMudmlld3BvcnQueSkgLyBjaXJjbGVz
LnZpZXdwb3J0LncKICAgICk7CiAgICBsZXQgc2FtcGxlZDIgPSB0ZXh0dXJlU2FtcGxlKHRleHR1
cmVJbiwgc2FtcGxlckluLCBwMl92aWV3cG9ydCk7CiAgICBpZiAocDIueCA8IGNpcmNsZXMudmll
d3BvcnQueCB8fCBwMi54ID4gY2lyY2xlcy52aWV3cG9ydC54ICsgY2lyY2xlcy52aWV3cG9ydC56
IHx8CiAgICAgICAgcDIueSA8IGNpcmNsZXMudmlld3BvcnQueSB8fCBwMi55ID4gY2lyY2xlcy52
aWV3cG9ydC55ICsgY2lyY2xlcy52aWV3cG9ydC53KSB7CiAgICAgICAgb3V0cHV0LnRleHR1cmVP
dXQgPSBvdXRPZkJvdW5kcyhwMiwgdHJ1ZSk7CiAgICAgICAgaWYgKG91dHB1dC50ZXh0dXJlT3V0
LmEgPT0gMC4pIHsKICAgICAgICAgICAgb3V0cHV0LnRleHR1cmVPdXQgPSBzYW1wbGVkOwogICAg
ICAgICAgICAvL291dHB1dC50ZXh0dXJlT3V0LmcgPSAob3V0cHV0LnRleHR1cmVPdXQuZyAqIDI1
NS4gKyAxLikgLyAyNTUuOwogICAgICAgICAgICAvL291dHB1dC50ZXh0dXJlT3V0ID0gdmVjNCgx
LiwgMi4sIDEuLCAxLik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgb3V0cHV0LnRleHR1
cmVPdXQuZyA9IChvdXRwdXQudGV4dHVyZU91dC5nICogMjU1LiArIDEuKSAvIDI1NS47CiAgICAg
ICAgfQogICAgICAgIHJldHVybiBvdXRwdXQ7CiAgICB9CiAgICBpZiAoc2FtcGxlZDIuYSA9PSAx
LikgewogICAgICAgIG91dHB1dC50ZXh0dXJlT3V0ID0gdmVjNDxmMzI+KHNhbXBsZWQyLnIsIChz
YW1wbGVkMi5nICogMjU1LiArIDEuKSAvIDI1NS4sIHNhbXBsZWQyLmIsIDEuKTsKICAgICAgICBy
ZXR1cm4gb3V0cHV0OwogICAgfQogICAgb3V0cHV0LnRleHR1cmVPdXQgPSBzYW1wbGVkOwogICAg
cmV0dXJuIG91dHB1dDsKICB9CiAgb3V0cHV0LnRleHR1cmVPdXQgPSBjb2xvckJhY2tncm91bmQo
cCk7CiAgcmV0dXJuIG91dHB1dDsKIC8qCiBsZXQgbHAgPSBsZW5ndGgocCk7CiBpZiAobHAgPCBj
aXJjbGVzLkRfYS56ICYmIGxwIDwgY2lyY2xlcy5EX0EueiAmJiBscCA8IGNpcmNsZXMuRF9iLnog
JiYgbHAgPCBjaXJjbGVzLkRfQi56KSB7CiAgICAgIG91dHB1dC50ZXh0dXJlT3V0ID0gdmVjNDxm
MzI+KDE2MS4sIDIwOC4sIDE3Mi4sIDAuKSAvIDI1NS47CiAgICAgIHJldHVybiBvdXRwdXQ7CiB9
CiAqLwp9CgpHZW5lcmF0ZWQgTWV0YWwgY29kZToKI2luY2x1ZGUgPG1ldGFsX3N0ZGxpYj4KI2lu
Y2x1ZGUgPG1ldGFsX3R5cGVzPgoKdXNpbmcgbmFtZXNwYWNlIG1ldGFsOwoKc3RydWN0IHR5cGUw
IHsKICAgIHZlYzxmbG9hdCwgND4gZmllbGQwIDsKICAgIHZlYzxmbG9hdCwgMj4gZmllbGQxIDsK
fTsKCnN0cnVjdCBfX3R5cGUwX1ZlcnRleE91dHB1dCB7CiAgICB2ZWM8ZmxvYXQsIDQ+IGZpZWxk
MCBbW3Bvc2l0aW9uXV07CiAgICB2ZWM8ZmxvYXQsIDI+IGZpZWxkMSBbW3VzZXIobG9jMCldXTsK
CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgX190eXBlMF9WZXJ0ZXhPdXRwdXQoY29uc3Qg
dGhyZWFkIFQmIG90aGVyKQogICAgICAgIDogZmllbGQwKG90aGVyLmZpZWxkMCkKICAgICAgICAs
IGZpZWxkMShvdGhlci5maWVsZDEpCiAgICB7IH0KfTsKCnN0cnVjdCBfX2Z1bmN0aW9uMF9pblQg
ewogICAgdmVjPGZsb2F0LCAyPiBwYXJhbWV0ZXIwIFtbYXR0cmlidXRlKDApXV07Cn07CgpbW3Zl
cnRleF1dIF9fdHlwZTBfVmVydGV4T3V0cHV0IGZ1bmN0aW9uMChfX2Z1bmN0aW9uMF9pblQgX19m
dW5jdGlvbjBfaW4gW1tzdGFnZV9pbl1dKQp7CiAgICB2ZWM8ZmxvYXQsIDI+IHBhcmFtZXRlcjAg
PSBfX2Z1bmN0aW9uMF9pbi5wYXJhbWV0ZXIwOwogICAgdHlwZTAgbG9jYWwwIHsgfTsKICAgIGxv
Y2FsMC5maWVsZDAgPSB2ZWM8ZmxvYXQsIDQ+KHBhcmFtZXRlcjAsIDAuLCAxLik7CiAgICBsb2Nh
bDAuZmllbGQxID0gcGFyYW1ldGVyMDsKICAgIHJldHVybiBsb2NhbDA7Cn0KCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>