<?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>258660</bug_id>
          
          <creation_ts>2023-06-29 02:02:58 -0700</creation_ts>
          <short_desc>private class members are much, much slower than public members</short_desc>
          <delta_ts>2023-08-03 18:05:25 -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>JavaScriptCore</component>
          <version>Safari 16</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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>scythes.corms_0i</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dpaddock</cc>
    
    <cc>jarred</cc>
    
    <cc>mark.lam</cc>
    
    <cc>rik</cc>
    
    <cc>rob.palmer2</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1964202</commentid>
    <comment_count>0</comment_count>
    <who name="">scythes.corms_0i</who>
    <bug_when>2023-06-29 02:02:58 -0700</bug_when>
    <thetext>We have noticed that using native private class members is ~95% slower than normal properties. That puts them into the same ballpark as the WeakMap-workaround that&apos;s commonly used/emitted today. 


https://jsbench.me/0gljcn4wzt/2 is a benchmark that compares

* native privates
* weakmap polyfill privates
* publics 


I have tested this with Safari 16.5.1 and latest Tech Preview. Other browsers also show inferior performance but not as dramatic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1965272</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2023-07-06 02:03:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/111836716&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1969203</commentid>
    <comment_count>2</comment_count>
    <who name="Rob Palmer">rob.palmer2</who>
    <bug_when>2023-08-02 01:04:41 -0700</bug_when>
    <thetext>I can replicate these numbers on my M1 Macbook Air using latest STP. The performance drop for native private fields is greater in JSC than V8.

Safari TP #private fields: 35 ops/sec
Safari TP public fields: 632 ops/sec

Chome Canary #private fields: 62 ops/sec
Chome Canary public fields: 107 ops/sec

This is surprising.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1969567</commentid>
    <comment_count>3</comment_count>
      <attachid>467196</attachid>
    <who name="Jarred Sumner">jarred</who>
    <bug_when>2023-08-03 18:02:23 -0700</bug_when>
    <thetext>Created attachment 467196
microbenchmark that can be run from jsc shell</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1969568</commentid>
    <comment_count>4</comment_count>
    <who name="Jarred Sumner">jarred</who>
    <bug_when>2023-08-03 18:05:25 -0700</bug_when>
    <thetext>I&apos;ve attached a microbenchmark that can be run from the jsc shell directly.

```
❯ jsc -m out.js
cpu: unknown
runtime: unknown (unknown)

benchmark                 time (avg)             (min … max)       p75       p99      p995
------------------------------------------------------------ -----------------------------
Polyfillprivate        81.76 ms/iter   (79.48 ms … 84.84 ms)  82.04 ms  84.84 ms  84.84 ms
NativePrivates         41.32 ms/iter   (40.31 ms … 43.61 ms)  41.76 ms  43.61 ms  43.61 ms
ConventionalPrivates  919.52 µs/iter   (619.67 µs … 2.65 ms) 780.25 µs   1.95 ms   1.96 ms
```</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>467196</attachid>
            <date>2023-08-03 18:02:23 -0700</date>
            <delta_ts>2023-08-03 18:02:23 -0700</delta_ts>
            <desc>microbenchmark that can be run from jsc shell</desc>
            <filename>out.js</filename>
            <type>text/javascript</type>
            <size>21144</size>
            <attacher name="Jarred Sumner">jarred</attacher>
            
              <data encoding="base64">Ly8gQGJ1bgp2YXIgX19jcmVhdGUgPSBPYmplY3QuY3JlYXRlOwp2YXIgX19kZWZQcm9wID0gT2Jq
ZWN0LmRlZmluZVByb3BlcnR5Owp2YXIgX19nZXRQcm90b09mID0gT2JqZWN0LmdldFByb3RvdHlw
ZU9mOwp2YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lczsK
dmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7CnZhciBf
X3RvRVNNID0gKG1vZCwgaXNOb2RlTW9kZSwgdGFyZ2V0KSA9PiB7CiAgdGFyZ2V0ID0gbW9kICE9
IG51bGwgPyBfX2NyZWF0ZShfX2dldFByb3RvT2YobW9kKSkgOiB7fTsKICBjb25zdCB0byA9IGlz
Tm9kZU1vZGUgfHwgIW1vZCB8fCAhbW9kLl9fZXNNb2R1bGUgPyBfX2RlZlByb3AodGFyZ2V0LCAi
ZGVmYXVsdCIsIHsgdmFsdWU6IG1vZCwgZW51bWVyYWJsZTogdHJ1ZSB9KSA6IHRhcmdldDsKICBm
b3IgKGxldCBrZXkgb2YgX19nZXRPd25Qcm9wTmFtZXMobW9kKSkKICAgIGlmICghX19oYXNPd25Q
cm9wLmNhbGwodG8sIGtleSkpCiAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7CiAgICAgICAgZ2V0
OiAoKSA9PiBtb2Rba2V5XSwKICAgICAgICBlbnVtZXJhYmxlOiB0cnVlCiAgICAgIH0pOwogIHJl
dHVybiB0bzsKfTsKdmFyIF9fcmVxdWlyZSA9IChpZCkgPT4gewogIHJldHVybiBpbXBvcnQubWV0
YS5yZXF1aXJlKGlkKTsKfTsKdmFyIF9fZXhwb3J0ID0gKHRhcmdldCwgYWxsKSA9PiB7CiAgZm9y
ICh2YXIgbmFtZSBpbiBhbGwpCiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7CiAgICAgIGdl
dDogYWxsW25hbWVdLAogICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICBjb25maWd1cmFibGU6
IHRydWUsCiAgICAgIHNldDogKG5ld1ZhbHVlKSA9PiBhbGxbbmFtZV0gPSAoKSA9PiBuZXdWYWx1
ZQogICAgfSk7Cn07CgovLyAvVXNlcnMvamFycmVkL0NvZGUvYnVuL2JlbmNoL25vZGVfbW9kdWxl
cy8uZGVuby9taXRhdGFAMC4xLjYvbm9kZV9tb2R1bGVzL21pdGF0YS9zcmMvdGltZS5tanMKdmFy
IHRpbWUgPSAoKCkgPT4gewogIGNvbnN0IGNlaWwgPSBNYXRoLmNlaWw7CiAgdHJ5IHsKICAgIEJ1
bi5uYW5vc2Vjb25kcygpOwogICAgcmV0dXJuIHsKICAgICAgbm93OiBCdW4ubmFub3NlY29uZHMs
CiAgICAgIGRpZmY6IChhLCBiKSA9PiBhIC0gYgogICAgfTsKICB9IGNhdGNoIHsKICB9CiAgdHJ5
IHsKICAgIHByb2Nlc3MuaHJ0aW1lLmJpZ2ludCgpOwogICAgaWYgKCJEZW5vIiBpbiBnbG9iYWxU
aGlzKQogICAgICB0aHJvdyAwOwogICAgcmV0dXJuIHsKICAgICAgbm93OiBwcm9jZXNzLmhydGlt
ZS5iaWdpbnQsCiAgICAgIGRpZmY6IChhLCBiKSA9PiBOdW1iZXIoYSAtIGIpCiAgICB9OwogIH0g
Y2F0Y2ggewogIH0KICB0cnkgewogICAgRGVuby5jb3JlLm9wU3luYygib3BfYmVuY2hfbm93Iik7
CiAgICByZXR1cm4gewogICAgICBkaWZmOiAoYSwgYikgPT4gYSAtIGIsCiAgICAgIG5vdzogKCkg
PT4gRGVuby5jb3JlLm9wU3luYygib3BfYmVuY2hfbm93IikKICAgIH07CiAgfSBjYXRjaCB7CiAg
fQogIHRyeSB7CiAgICBEZW5vLmNvcmUub3BTeW5jKCJvcF9ub3ciKTsKICAgIHJldHVybiB7CiAg
ICAgIGRpZmY6IChhLCBiKSA9PiBhIC0gYiwKICAgICAgbm93OiAoKSA9PiBjZWlsKDFlNiAqIERl
bm8uY29yZS5vcFN5bmMoIm9wX25vdyIpKQogICAgfTsKICB9IGNhdGNoIHsKICB9CiAgdHJ5IHsK
ICAgICQuYWdlbnQubW9ub3RvbmljTm93KCk7CiAgICByZXR1cm4gewogICAgICBkaWZmOiAoYSwg
YikgPT4gYSAtIGIsCiAgICAgIG5vdzogKCkgPT4gY2VpbCgxZTYgKiAkLmFnZW50Lm1vbm90b25p
Y05vdygpKQogICAgfTsKICB9IGNhdGNoIHsKICB9CiAgcmV0dXJuIHsKICAgIGRpZmY6IChhLCBi
KSA9PiBhIC0gYiwKICAgIG5vdzogKCkgPT4gY2VpbCgxZTYgKiBwZXJmb3JtYW5jZS5ub3coKSkK
ICB9Owp9KSgpOwp2YXIgbm93ID0gdGltZS5ub3c7CnZhciBkaWZmID0gdGltZS5kaWZmOwoKLy8g
L1VzZXJzL2phcnJlZC9Db2RlL2J1bi9iZW5jaC9ub2RlX21vZHVsZXMvLmRlbm8vbWl0YXRhQDAu
MS42L25vZGVfbW9kdWxlcy9taXRhdGEvc3JjL2xpYi5tanMKdmFyIHNvcnQgPSBmdW5jdGlvbihh
LCBiKSB7CiAgaWYgKGEgPiBiKQogICAgcmV0dXJuIDE7CiAgaWYgKGEgPCBiKQogICAgcmV0dXJu
IC0xOwogIHJldHVybiAwOwp9Owp2YXIgc3RhdHMgPSBmdW5jdGlvbihuLCB0LCBhdmcsIG1pbiwg
bWF4LCBqaXQsIGFsbCkgewogIHJldHVybiB7CiAgICBuLAogICAgbWluLAogICAgbWF4LAogICAg
aml0LAogICAgcDc1OiBhbGxbTWF0aC5jZWlsKG4gKiAoNzUgLyAxMDApKSAtIDFdLAogICAgcDk5
OiBhbGxbTWF0aC5jZWlsKG4gKiAoOTkgLyAxMDApKSAtIDFdLAogICAgYXZnOiAhdCA/IGF2ZyAv
IG4gOiBNYXRoLmNlaWwoYXZnIC8gbiksCiAgICBwOTk1OiBhbGxbTWF0aC5jZWlsKG4gKiAoOTku
NSAvIDEwMCkpIC0gMV0sCiAgICBwOTk5OiBhbGxbTWF0aC5jZWlsKG4gKiAoOTkuOSAvIDEwMCkp
IC0gMV0KICB9Owp9Owphc3luYyBmdW5jdGlvbiBzeW5jKHQsIGZuLCBjb2xsZWN0ID0gZmFsc2Up
IHsKICBsZXQgbiA9IDA7CiAgbGV0IGF2ZyA9IDA7CiAgbGV0IHdhdmcgPSAwOwogIGxldCBtaW4g
PSBJbmZpbml0eTsKICBsZXQgbWF4ID0gKC1JbmZpbml0eSk7CiAgY29uc3QgYWxsID0gbmV3IEFy
cmF5OwogIGNvbnN0IGppdCA9IG5ldyBBcnJheSgxMCk7CiAgd2FybXVwOiB7CiAgICBsZXQgb2Zm
c2V0ID0gMDsKICAgIGxldCBpdGVyYXRpb25zID0gMTA7CiAgICB3aGlsZSAoaXRlcmF0aW9ucy0t
KSB7CiAgICAgIGNvbnN0IHQxID0gbm93MigpOwogICAgICBjb25zdCB4ID0gZm4oKTsKICAgICAg
aml0W29mZnNldCsrXSA9IGRpZmYobm93MigpLCB0MSk7CiAgICAgIGlmICh4IGluc3RhbmNlb2Yg
UHJvbWlzZSkKICAgICAgICByZXR1cm4gYXdhaXQgeCwgYXN5bmModCwgZm4sIGNvbGxlY3QpOwog
ICAgfQogICAgbGV0IGMgPSAwOwogICAgaXRlcmF0aW9ucyA9IDQ7CiAgICBsZXQgYnVkZ2V0ID0g
MTAgKiAxZTY7CiAgICB3aGlsZSAoMCA8IGJ1ZGdldCB8fCAwIDwgaXRlcmF0aW9ucy0tKSB7CiAg
ICAgIGNvbnN0IHQxID0gbm93MigpOwogICAgICBmbigpOwogICAgICBjb25zdCB0MiA9IGRpZmYo
bm93MigpLCB0MSk7CiAgICAgIGlmICgwID4gdDIpIHsKICAgICAgICBpdGVyYXRpb25zKys7CiAg
ICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgYysrOwogICAgICB3YXZnICs9IHQyOwogICAg
ICBidWRnZXQgLT0gdDI7CiAgICB9CiAgICB3YXZnIC89IGM7CiAgfQogIG1lYXN1cmU6IHsKICAg
IGlmICh3YXZnID4gMWU0KSB7CiAgICAgIGxldCBpdGVyYXRpb25zID0gMTA7CiAgICAgIGxldCBi
dWRnZXQgPSB0ICogMWU2OwogICAgICB3aGlsZSAoMCA8IGJ1ZGdldCB8fCAwIDwgaXRlcmF0aW9u
cy0tKSB7CiAgICAgICAgY29uc3QgdDEgPSBub3cyKCk7CiAgICAgICAgZm4oKTsKICAgICAgICBj
b25zdCB0MiA9IGRpZmYobm93MigpLCB0MSk7CiAgICAgICAgaWYgKDAgPiB0MikgewogICAgICAg
ICAgaXRlcmF0aW9ucysrOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIG4r
KzsKICAgICAgICBhdmcgKz0gdDI7CiAgICAgICAgYnVkZ2V0IC09IHQyOwogICAgICAgIGFsbC5w
dXNoKHQyKTsKICAgICAgICBpZiAodDIgPCBtaW4pCiAgICAgICAgICBtaW4gPSB0MjsKICAgICAg
ICBpZiAodDIgPiBtYXgpCiAgICAgICAgICBtYXggPSB0MjsKICAgICAgfQogICAgfSBlbHNlIHsK
ICAgICAgbGV0IGl0ZXJhdGlvbnMgPSAxMDsKICAgICAgbGV0IGJ1ZGdldCA9IHQgKiAxZTY7CiAg
ICAgIGlmICghY29sbGVjdCkKICAgICAgICB3aGlsZSAoMCA8IGJ1ZGdldCB8fCAwIDwgaXRlcmF0
aW9ucy0tKSB7CiAgICAgICAgICBjb25zdCB0MSA9IG5vdzIoKTsKICAgICAgICAgIGZvciAobGV0
IGMgPSAwO2MgPCAxZTQ7IGMrKykKICAgICAgICAgICAgZm4oKTsKICAgICAgICAgIGNvbnN0IHQy
ID0gZGlmZihub3cyKCksIHQxKSAvIDFlNDsKICAgICAgICAgIGlmICgwID4gdDIpIHsKICAgICAg
ICAgICAgaXRlcmF0aW9ucysrOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAg
ICAgICAgIG4rKzsKICAgICAgICAgIGF2ZyArPSB0MjsKICAgICAgICAgIGFsbC5wdXNoKHQyKTsK
ICAgICAgICAgIGJ1ZGdldCAtPSB0MiAqIDFlNDsKICAgICAgICAgIGlmICh0MiA8IG1pbikKICAg
ICAgICAgICAgbWluID0gdDI7CiAgICAgICAgICBpZiAodDIgPiBtYXgpCiAgICAgICAgICAgIG1h
eCA9IHQyOwogICAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgY29uc3QgZ2FyYmFnZSA9IG5l
dyBBcnJheSgxZTQpOwogICAgICAgIHdoaWxlICgwIDwgYnVkZ2V0IHx8IDAgPCBpdGVyYXRpb25z
LS0pIHsKICAgICAgICAgIGNvbnN0IHQxID0gbm93MigpOwogICAgICAgICAgZm9yIChsZXQgYyA9
IDA7YyA8IDFlNDsgYysrKQogICAgICAgICAgICBnYXJiYWdlW2NdID0gZm4oKTsKICAgICAgICAg
IGNvbnN0IHQyID0gZGlmZihub3cyKCksIHQxKSAvIDFlNDsKICAgICAgICAgIGlmICgwID4gdDIp
IHsKICAgICAgICAgICAgaXRlcmF0aW9ucysrOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgIH0KICAgICAgICAgIG4rKzsKICAgICAgICAgIGF2ZyArPSB0MjsKICAgICAgICAgIGFsbC5w
dXNoKHQyKTsKICAgICAgICAgIGJ1ZGdldCAtPSB0MiAqIDFlNDsKICAgICAgICAgIGlmICh0MiA8
IG1pbikKICAgICAgICAgICAgbWluID0gdDI7CiAgICAgICAgICBpZiAodDIgPiBtYXgpCiAgICAg
ICAgICAgIG1heCA9IHQyOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICBhbGwuc29ydChz
b3J0KTsKICByZXR1cm4gc3RhdHMobiwgd2F2ZyA+IDFlNCwgYXZnLCBtaW4sIG1heCwgaml0LCBh
bGwpOwp9CmFzeW5jIGZ1bmN0aW9uIGFzeW5jKHQsIGZuLCBjb2xsZWN0ID0gZmFsc2UpIHsKICBs
ZXQgbiA9IDA7CiAgbGV0IGF2ZyA9IDA7CiAgbGV0IHdhdmcgPSAwOwogIGxldCBtaW4gPSBJbmZp
bml0eTsKICBsZXQgbWF4ID0gKC1JbmZpbml0eSk7CiAgY29uc3QgYWxsID0gbmV3IEFycmF5Owog
IGNvbnN0IGppdCA9IG5ldyBBcnJheSgxMCk7CiAgd2FybXVwOiB7CiAgICBsZXQgb2Zmc2V0ID0g
MDsKICAgIGxldCBpdGVyYXRpb25zID0gMTA7CiAgICB3aGlsZSAoaXRlcmF0aW9ucy0tKSB7CiAg
ICAgIGNvbnN0IHQxID0gbm93MigpOwogICAgICBhd2FpdCBmbigpOwogICAgICBqaXRbb2Zmc2V0
KytdID0gZGlmZihub3cyKCksIHQxKTsKICAgIH0KICAgIGxldCBjID0gMDsKICAgIGl0ZXJhdGlv
bnMgPSA0OwogICAgbGV0IGJ1ZGdldCA9IDEwICogMWU2OwogICAgd2hpbGUgKDAgPCBidWRnZXQg
fHwgMCA8IGl0ZXJhdGlvbnMtLSkgewogICAgICBjb25zdCB0MSA9IG5vdzIoKTsKICAgICAgYXdh
aXQgZm4oKTsKICAgICAgY29uc3QgdDIgPSBkaWZmKG5vdzIoKSwgdDEpOwogICAgICBpZiAoMCA+
IHQyKSB7CiAgICAgICAgaXRlcmF0aW9ucysrOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAg
ICAgIGMrKzsKICAgICAgd2F2ZyArPSB0MjsKICAgICAgYnVkZ2V0IC09IHQyOwogICAgfQogICAg
d2F2ZyAvPSBjOwogIH0KICBtZWFzdXJlOiB7CiAgICBpZiAod2F2ZyA+IDFlNCkgewogICAgICBs
ZXQgaXRlcmF0aW9ucyA9IDEwOwogICAgICBsZXQgYnVkZ2V0ID0gdCAqIDFlNjsKICAgICAgd2hp
bGUgKDAgPCBidWRnZXQgfHwgMCA8IGl0ZXJhdGlvbnMtLSkgewogICAgICAgIGNvbnN0IHQxID0g
bm93MigpOwogICAgICAgIGF3YWl0IGZuKCk7CiAgICAgICAgY29uc3QgdDIgPSBkaWZmKG5vdzIo
KSwgdDEpOwogICAgICAgIGlmICgwID4gdDIpIHsKICAgICAgICAgIGl0ZXJhdGlvbnMrKzsKICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBuKys7CiAgICAgICAgYXZnICs9IHQy
OwogICAgICAgIGJ1ZGdldCAtPSB0MjsKICAgICAgICBhbGwucHVzaCh0Mik7CiAgICAgICAgaWYg
KHQyIDwgbWluKQogICAgICAgICAgbWluID0gdDI7CiAgICAgICAgaWYgKHQyID4gbWF4KQogICAg
ICAgICAgbWF4ID0gdDI7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGxldCBpdGVyYXRpb25z
ID0gMTA7CiAgICAgIGxldCBidWRnZXQgPSB0ICogMWU2OwogICAgICBpZiAoIWNvbGxlY3QpCiAg
ICAgICAgd2hpbGUgKDAgPCBidWRnZXQgfHwgMCA8IGl0ZXJhdGlvbnMtLSkgewogICAgICAgICAg
Y29uc3QgdDEgPSBub3cyKCk7CiAgICAgICAgICBmb3IgKGxldCBjID0gMDtjIDwgMWU0OyBjKysp
CiAgICAgICAgICAgIGF3YWl0IGZuKCk7CiAgICAgICAgICBjb25zdCB0MiA9IGRpZmYobm93Migp
LCB0MSkgLyAxZTQ7CiAgICAgICAgICBpZiAoMCA+IHQyKSB7CiAgICAgICAgICAgIGl0ZXJhdGlv
bnMrKzsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBuKys7CiAg
ICAgICAgICBhdmcgKz0gdDI7CiAgICAgICAgICBhbGwucHVzaCh0Mik7CiAgICAgICAgICBidWRn
ZXQgLT0gdDIgKiAxZTQ7CiAgICAgICAgICBpZiAodDIgPCBtaW4pCiAgICAgICAgICAgIG1pbiA9
IHQyOwogICAgICAgICAgaWYgKHQyID4gbWF4KQogICAgICAgICAgICBtYXggPSB0MjsKICAgICAg
ICB9CiAgICAgIGVsc2UgewogICAgICAgIGNvbnN0IGdhcmJhZ2UgPSBuZXcgQXJyYXkoMWU0KTsK
ICAgICAgICB3aGlsZSAoMCA8IGJ1ZGdldCB8fCAwIDwgaXRlcmF0aW9ucy0tKSB7CiAgICAgICAg
ICBjb25zdCB0MSA9IG5vdzIoKTsKICAgICAgICAgIGZvciAobGV0IGMgPSAwO2MgPCAxZTQ7IGMr
KykKICAgICAgICAgICAgZ2FyYmFnZVtjXSA9IGF3YWl0IGZuKCk7CiAgICAgICAgICBjb25zdCB0
MiA9IGRpZmYobm93MigpLCB0MSkgLyAxZTQ7CiAgICAgICAgICBpZiAoMCA+IHQyKSB7CiAgICAg
ICAgICAgIGl0ZXJhdGlvbnMrKzsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAg
ICAgICAgICBuKys7CiAgICAgICAgICBhdmcgKz0gdDI7CiAgICAgICAgICBhbGwucHVzaCh0Mik7
CiAgICAgICAgICBidWRnZXQgLT0gdDIgKiAxZTQ7CiAgICAgICAgICBpZiAodDIgPCBtaW4pCiAg
ICAgICAgICAgIG1pbiA9IHQyOwogICAgICAgICAgaWYgKHQyID4gbWF4KQogICAgICAgICAgICBt
YXggPSB0MjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgYWxsLnNvcnQoc29ydCk7CiAg
cmV0dXJuIHN0YXRzKG4sIHdhdmcgPiAxZTQsIGF2ZywgbWluLCBtYXgsIGppdCwgYWxsKTsKfQp2
YXIgbm93MiA9IG5vdzsKCi8vIC9Vc2Vycy9qYXJyZWQvQ29kZS9idW4vYmVuY2gvbm9kZV9tb2R1
bGVzLy5kZW5vL21pdGF0YUAwLjEuNi9ub2RlX21vZHVsZXMvbWl0YXRhL3JlcG9ydGVyL2Nsci5t
anMKdmFyIGV4cG9ydHNfY2xyID0ge307Cl9fZXhwb3J0KGV4cG9ydHNfY2xyLCB7CiAgeWVsbG93
OiAoKSA9PiB7CiAgICB7CiAgICAgIHJldHVybiB5ZWxsb3c7CiAgICB9CiAgfSwKICB3aGl0ZTog
KCkgPT4gewogICAgewogICAgICByZXR1cm4gd2hpdGU7CiAgICB9CiAgfSwKICB1bmRlcmxpbmU6
ICgpID0+IHsKICAgIHsKICAgICAgcmV0dXJuIHVuZGVybGluZTsKICAgIH0KICB9LAogIHN0cmlr
ZXRocm91Z2g6ICgpID0+IHsKICAgIHsKICAgICAgcmV0dXJuIHN0cmlrZXRocm91Z2g7CiAgICB9
CiAgfSwKICByZXNldDogKCkgPT4gewogICAgewogICAgICByZXR1cm4gcmVzZXQ7CiAgICB9CiAg
fSwKICByZWQ6ICgpID0+IHsKICAgIHsKICAgICAgcmV0dXJuIHJlZDsKICAgIH0KICB9LAogIG1h
Z2VudGE6ICgpID0+IHsKICAgIHsKICAgICAgcmV0dXJuIG1hZ2VudGE7CiAgICB9CiAgfSwKICBp
dGFsaWM6ICgpID0+IHsKICAgIHsKICAgICAgcmV0dXJuIGl0YWxpYzsKICAgIH0KICB9LAogIGlu
dmVyc2U6ICgpID0+IHsKICAgIHsKICAgICAgcmV0dXJuIGludmVyc2U7CiAgICB9CiAgfSwKICBo
aWRkZW46ICgpID0+IHsKICAgIHsKICAgICAgcmV0dXJuIGhpZGRlbjsKICAgIH0KICB9LAogIGdy
ZWVuOiAoKSA9PiB7CiAgICB7CiAgICAgIHJldHVybiBncmVlbjsKICAgIH0KICB9LAogIGdyYXk6
ICgpID0+IHsKICAgIHsKICAgICAgcmV0dXJuIGdyYXk7CiAgICB9CiAgfSwKICBkaW06ICgpID0+
IHsKICAgIHsKICAgICAgcmV0dXJuIGRpbTsKICAgIH0KICB9LAogIGN5YW46ICgpID0+IHsKICAg
IHsKICAgICAgcmV0dXJuIGN5YW47CiAgICB9CiAgfSwKICBib2xkOiAoKSA9PiB7CiAgICB7CiAg
ICAgIHJldHVybiBib2xkOwogICAgfQogIH0sCiAgYmx1ZTogKCkgPT4gewogICAgewogICAgICBy
ZXR1cm4gYmx1ZTsKICAgIH0KICB9LAogIGJsYWNrOiAoKSA9PiB7CiAgICB7CiAgICAgIHJldHVy
biBibGFjazsKICAgIH0KICB9LAogIGJnWWVsbG93OiAoKSA9PiB7CiAgICB7CiAgICAgIHJldHVy
biBiZ1llbGxvdzsKICAgIH0KICB9LAogIGJnV2hpdGU6ICgpID0+IHsKICAgIHsKICAgICAgcmV0
dXJuIGJnV2hpdGU7CiAgICB9CiAgfSwKICBiZ1JlZDogKCkgPT4gewogICAgewogICAgICByZXR1
cm4gYmdSZWQ7CiAgICB9CiAgfSwKICBiZ01hZ2VudGE6ICgpID0+IHsKICAgIHsKICAgICAgcmV0
dXJuIGJnTWFnZW50YTsKICAgIH0KICB9LAogIGJnR3JlZW46ICgpID0+IHsKICAgIHsKICAgICAg
cmV0dXJuIGJnR3JlZW47CiAgICB9CiAgfSwKICBiZ0N5YW46ICgpID0+IHsKICAgIHsKICAgICAg
cmV0dXJuIGJnQ3lhbjsKICAgIH0KICB9LAogIGJnQmx1ZTogKCkgPT4gewogICAgewogICAgICBy
ZXR1cm4gYmdCbHVlOwogICAgfQogIH0sCiAgYmdCbGFjazogKCkgPT4gewogICAgewogICAgICBy
ZXR1cm4gYmdCbGFjazsKICAgIH0KICB9Cn0pOwp2YXIgaW5pdCA9IGZ1bmN0aW9uKHgsIHkpIHsK
ICBsZXQgcmd4ID0gbmV3IFJlZ0V4cChgXFx4MWJcXFske3l9bWAsICJnIik7CiAgbGV0IG9wZW4g
PSBgXHgxQlske3h9bWAsIGNsb3NlID0gYFx4MUJbJHt5fW1gOwogIHJldHVybiBmdW5jdGlvbihl
LCB0eHQpIHsKICAgIGlmICghZSB8fCB0eHQgPT0gbnVsbCkKICAgICAgcmV0dXJuIHR4dDsKICAg
IHJldHVybiBvcGVuICsgKH4oIiIgKyB0eHQpLmluZGV4T2YoY2xvc2UpID8gdHh0LnJlcGxhY2Uo
cmd4LCBjbG9zZSArIG9wZW4pIDogdHh0KSArIGNsb3NlOwogIH07Cn07CnZhciByZXNldCA9IGlu
aXQoMCwgMCk7CnZhciBib2xkID0gaW5pdCgxLCAyMik7CnZhciBkaW0gPSBpbml0KDIsIDIyKTsK
dmFyIGl0YWxpYyA9IGluaXQoMywgMjMpOwp2YXIgdW5kZXJsaW5lID0gaW5pdCg0LCAyNCk7CnZh
ciBpbnZlcnNlID0gaW5pdCg3LCAyNyk7CnZhciBoaWRkZW4gPSBpbml0KDgsIDI4KTsKdmFyIHN0
cmlrZXRocm91Z2ggPSBpbml0KDksIDI5KTsKdmFyIGJsYWNrID0gaW5pdCgzMCwgMzkpOwp2YXIg
cmVkID0gaW5pdCgzMSwgMzkpOwp2YXIgZ3JlZW4gPSBpbml0KDMyLCAzOSk7CnZhciB5ZWxsb3cg
PSBpbml0KDMzLCAzOSk7CnZhciBibHVlID0gaW5pdCgzNCwgMzkpOwp2YXIgbWFnZW50YSA9IGlu
aXQoMzUsIDM5KTsKdmFyIGN5YW4gPSBpbml0KDM2LCAzOSk7CnZhciB3aGl0ZSA9IGluaXQoMzcs
IDM5KTsKdmFyIGdyYXkgPSBpbml0KDkwLCAzOSk7CnZhciBiZ0JsYWNrID0gaW5pdCg0MCwgNDkp
Owp2YXIgYmdSZWQgPSBpbml0KDQxLCA0OSk7CnZhciBiZ0dyZWVuID0gaW5pdCg0MiwgNDkpOwp2
YXIgYmdZZWxsb3cgPSBpbml0KDQzLCA0OSk7CnZhciBiZ0JsdWUgPSBpbml0KDQ0LCA0OSk7CnZh
ciBiZ01hZ2VudGEgPSBpbml0KDQ1LCA0OSk7CnZhciBiZ0N5YW4gPSBpbml0KDQ2LCA0OSk7CnZh
ciBiZ1doaXRlID0gaW5pdCg0NywgNDkpOwoKLy8gL1VzZXJzL2phcnJlZC9Db2RlL2J1bi9iZW5j
aC9ub2RlX21vZHVsZXMvLmRlbm8vbWl0YXRhQDAuMS42L25vZGVfbW9kdWxlcy9taXRhdGEvcmVw
b3J0ZXIvZm10Lm1qcwpmdW5jdGlvbiBkdXJhdGlvbih0aW1lMiwgbG9jYWxlID0gImVuLXVzIikg
ewogIGlmICh0aW1lMiA8IDEpCiAgICByZXR1cm4gYCR7TnVtYmVyKCh0aW1lMiAqIDEwMDApLnRv
Rml4ZWQoMikpLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSl9IHBzYDsKICBpZiAodGltZTIgPCAxMDAw
KQogICAgcmV0dXJuIGAke051bWJlcih0aW1lMi50b0ZpeGVkKDIpKS50b0xvY2FsZVN0cmluZyhs
b2NhbGUpfSBuc2A7CiAgaWYgKHRpbWUyIDwgMWU2KQogICAgcmV0dXJuIGAke051bWJlcigodGlt
ZTIgLyAxMDAwKS50b0ZpeGVkKDIpKS50b0xvY2FsZVN0cmluZyhsb2NhbGUpfSBceEI1c2A7CiAg
aWYgKHRpbWUyIDwgMWU5KQogICAgcmV0dXJuIGAke051bWJlcigodGltZTIgLyAxZTYpLnRvRml4
ZWQoMikpLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSl9IG1zYDsKICBpZiAodGltZTIgPCAxMDAwMDAw
MDAwMDAwKQogICAgcmV0dXJuIGAke051bWJlcigodGltZTIgLyAxZTkpLnRvRml4ZWQoMikpLnRv
TG9jYWxlU3RyaW5nKGxvY2FsZSl9IHNgOwogIGlmICh0aW1lMiA8IDM2MDAwMDAwMDAwMDApCiAg
ICByZXR1cm4gYCR7TnVtYmVyKCh0aW1lMiAvIDYwMDAwMDAwMDAwKS50b0ZpeGVkKDIpKS50b0xv
Y2FsZVN0cmluZyhsb2NhbGUpfSBtYDsKICByZXR1cm4gYCR7TnVtYmVyKCh0aW1lMiAvIDM2MDAw
MDAwMDAwMDApLnRvRml4ZWQoMikpLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSl9IGhgOwp9CgovLyAv
VXNlcnMvamFycmVkL0NvZGUvYnVuL2JlbmNoL25vZGVfbW9kdWxlcy8uZGVuby9taXRhdGFAMC4x
LjYvbm9kZV9tb2R1bGVzL21pdGF0YS9yZXBvcnRlci90YWJsZS5tanMKZnVuY3Rpb24gc2l6ZShu
YW1lcykgewogIGxldCBtYXggPSA5OwogIGZvciAoY29uc3QgbmFtZSBvZiBuYW1lcykKICAgIGlm
IChtYXggPCBuYW1lLmxlbmd0aCkKICAgICAgbWF4ID0gbmFtZS5sZW5ndGg7CiAgcmV0dXJuIDIg
KyBtYXg7Cn0KZnVuY3Rpb24gYnIoeyBzaXplOiBzaXplMiwgYXZnID0gdHJ1ZSwgbWluX21heCA9
IHRydWUsIHBlcmNlbnRpbGVzID0gdHJ1ZSB9KSB7CiAgcmV0dXJuICItIi5yZXBlYXQoc2l6ZTIg
KyAxNCAqIGF2ZyArIDI0ICogbWluX21heCkgKyAoIXBlcmNlbnRpbGVzID8gIiIgOiAiICIgKyAi
LSIucmVwZWF0KDkgKyAxMCArIDEwKSk7Cn0KZnVuY3Rpb24gYmVuY2htYXJrX2Vycm9yKG4sIGUs
IHsgc2l6ZTogc2l6ZTIsIGF2ZyA9IHRydWUsIGNvbG9ycyA9IHRydWUsIG1pbl9tYXggPSB0cnVl
LCBwZXJjZW50aWxlcyA9IHRydWUgfSkgewogIHJldHVybiBuLnBhZEVuZChzaXplMiwgIiAiKSAr
IGAke3JlZChjb2xvcnMsICJlcnJvciIpfTogJHtlLm1lc3NhZ2V9JHtlLnN0YWNrID8gIlxuIiAr
IGdyYXkoY29sb3JzLCBlLnN0YWNrKSA6ICIifWA7Cn0KZnVuY3Rpb24gaGVhZGVyKHsgc2l6ZTog
c2l6ZTIsIGF2ZyA9IHRydWUsIG1pbl9tYXggPSB0cnVlLCBwZXJjZW50aWxlcyA9IHRydWUgfSkg
ewogIHJldHVybiAiYmVuY2htYXJrIi5wYWRFbmQoc2l6ZTIsICIgIikgKyAoIWF2ZyA/ICIiIDog
InRpbWUgKGF2ZykiLnBhZFN0YXJ0KDE0LCAiICIpKSArICghbWluX21heCA/ICIiIDogIihtaW4g
XHUyMDI2IG1heCkiLnBhZFN0YXJ0KDI0LCAiICIpKSArICghcGVyY2VudGlsZXMgPyAiIiA6IGAg
JHsicDc1Ii5wYWRTdGFydCg5LCAiICIpfSAkeyJwOTkiLnBhZFN0YXJ0KDksICIgIil9ICR7InA5
OTUiLnBhZFN0YXJ0KDksICIgIil9YCk7Cn0KZnVuY3Rpb24gYmVuY2htYXJrKG4sIGIsIHsgc2l6
ZTogc2l6ZTIsIGF2ZyA9IHRydWUsIGNvbG9ycyA9IHRydWUsIG1pbl9tYXggPSB0cnVlLCBwZXJj
ZW50aWxlcyA9IHRydWUgfSkgewogIHJldHVybiBuLnBhZEVuZChzaXplMiwgIiAiKSArICghYXZn
ID8gIiIgOiBgJHt5ZWxsb3coY29sb3JzLCBkdXJhdGlvbihiLmF2ZykpfS9pdGVyYC5wYWRTdGFy
dCgxNCArIDEwICogY29sb3JzLCAiICIpKSArICghbWluX21heCA/ICIiIDogYCgke2N5YW4oY29s
b3JzLCBkdXJhdGlvbihiLm1pbikpfSBcdTIwMjYgJHttYWdlbnRhKGNvbG9ycywgZHVyYXRpb24o
Yi5tYXgpKX0pYC5wYWRTdGFydCgyNCArIDIgKiAxMCAqIGNvbG9ycywgIiAiKSkgKyAoIXBlcmNl
bnRpbGVzID8gIiIgOiBgICR7Z3JheShjb2xvcnMsIGR1cmF0aW9uKGIucDc1KSkucGFkU3RhcnQo
OSArIDEwICogY29sb3JzLCAiICIpfSAke2dyYXkoY29sb3JzLCBkdXJhdGlvbihiLnA5OSkpLnBh
ZFN0YXJ0KDkgKyAxMCAqIGNvbG9ycywgIiAiKX0gJHtncmF5KGNvbG9ycywgZHVyYXRpb24oYi5w
OTk1KSkucGFkU3RhcnQoOSArIDEwICogY29sb3JzLCAiICIpfWApOwp9CmZ1bmN0aW9uIHN1bW1h
cnkoYmVuY2htYXJrcywgeyBjb2xvcnMgPSB0cnVlIH0gPSB7fSkgewogIGJlbmNobWFya3MgPSBi
ZW5jaG1hcmtzLmZpbHRlcigoYikgPT4gIWIuZXJyb3IpOwogIGJlbmNobWFya3Muc29ydCgoYSwg
YikgPT4gYS5zdGF0cy5hdmcgLSBiLnN0YXRzLmF2Zyk7CiAgY29uc3QgYmFzZWxpbmUgPSBiZW5j
aG1hcmtzLmZpbmQoKGIpID0+IGIuYmFzZWxpbmUpIHx8IGJlbmNobWFya3NbMF07CiAgcmV0dXJu
IGJvbGQoY29sb3JzLCAic3VtbWFyeSIpICsgKGJhc2VsaW5lLmdyb3VwID09IG51bGwgfHwgYmFz
ZWxpbmUuZ3JvdXAuc3RhcnRzV2l0aD8uKCIkbWl0YXRhX2dyb3VwIikgPyAiIiA6IGdyYXkoY29s
b3JzLCBgIGZvciAke2Jhc2VsaW5lLmdyb3VwfWApKSArIGBcbiAgJHtib2xkKGNvbG9ycywgY3lh
bihjb2xvcnMsIGJhc2VsaW5lLm5hbWUpKX1gICsgYmVuY2htYXJrcy5maWx0ZXIoKGIpID0+IGIg
IT09IGJhc2VsaW5lKS5tYXAoKGIpID0+IHsKICAgIGNvbnN0IGRpZmYyID0gTnVtYmVyKCgxIC8g
YmFzZWxpbmUuc3RhdHMuYXZnICogYi5zdGF0cy5hdmcpLnRvRml4ZWQoMikpOwogICAgY29uc3Qg
aW52X2RpZmYgPSBOdW1iZXIoKDEgLyBiLnN0YXRzLmF2ZyAqIGJhc2VsaW5lLnN0YXRzLmF2Zyku
dG9GaXhlZCgyKSk7CiAgICByZXR1cm4gYFxuICAgJHtleHBvcnRzX2NsclsxID4gZGlmZjIgPyAi
cmVkIiA6ICJncmVlbiJdKGNvbG9ycywgMSA8PSBkaWZmMiA/IGRpZmYyIDogaW52X2RpZmYpfXgg
JHsxID4gZGlmZjIgPyAic2xvd2VyIiA6ICJmYXN0ZXIifSB0aGFuICR7Ym9sZChjb2xvcnMsIGN5
YW4oY29sb3JzLCBiLm5hbWUpKX1gOwogIH0pLmpvaW4oIiIpOwp9CgovLyAvVXNlcnMvamFycmVk
L0NvZGUvYnVuL2JlbmNoL25vZGVfbW9kdWxlcy9taXRhdGEvc3JjL2NsaS5tanMKZnVuY3Rpb24g
YmVuY2gobmFtZSwgZm4pIHsKICBpZiAoW0Z1bmN0aW9uLCBBc3luY0Z1bmN0aW9uXS5pbmNsdWRl
cyhuYW1lLmNvbnN0cnVjdG9yKSkKICAgIGZuID0gbmFtZSwgbmFtZSA9IGZuLm5hbWU7CiAgaWYg
KCFbRnVuY3Rpb24sIEFzeW5jRnVuY3Rpb25dLmluY2x1ZGVzKGZuLmNvbnN0cnVjdG9yKSkKICAg
IHRocm93IG5ldyBUeXBlRXJyb3IoYGV4cGVjdGVkIGZ1bmN0aW9uLCBnb3QgJHtmbi5jb25zdHJ1
Y3Rvci5uYW1lfWApOwogIGJlbmNobWFya3MucHVzaCh7CiAgICBmbiwKICAgIG5hbWUsCiAgICBn
cm91cDogZywKICAgIHRpbWU6IDUwMCwKICAgIHdhcm11cDogdHJ1ZSwKICAgIGJhc2VsaW5lOiBm
YWxzZSwKICAgIGFzeW5jOiBBc3luY0Z1bmN0aW9uID09PSBmbi5jb25zdHJ1Y3RvcgogIH0pOwp9
CnZhciBsb2cgPSBmdW5jdGlvbiguLi5hcmdzKSB7CiAgX3ByaW50KC4uLmFyZ3MpOwp9Owp2YXIg
cnVudGltZSA9IGZ1bmN0aW9uKCkgewogIGlmICgiQnVuIiBpbiBnbG9iYWxUaGlzKQogICAgcmV0
dXJuICJidW4iOwogIGlmICgiRGVubyIgaW4gZ2xvYmFsVGhpcykKICAgIHJldHVybiAiZGVubyI7
CiAgaWYgKCJwcm9jZXNzIiBpbiBnbG9iYWxUaGlzKQogICAgcmV0dXJuICJub2RlIjsKICBpZiAo
Im5hdmlnYXRvciIgaW4gZ2xvYmFsVGhpcykKICAgIHJldHVybiAiYnJvd3NlciI7CiAgcmV0dXJu
ICJ1bmtub3duIjsKfTsKdmFyIHZlcnNpb24gPSBmdW5jdGlvbigpIHsKICByZXR1cm4gewogICAg
dW5rbm93bjogKCkgPT4gIiIsCiAgICBicm93c2VyOiAoKSA9PiAiIiwKICAgIG5vZGU6ICgpID0+
IHByb2Nlc3MudmVyc2lvbiwKICAgIGRlbm86ICgpID0+IERlbm8udmVyc2lvbi5kZW5vLAogICAg
YnVuOiAoKSA9PiBwcm9jZXNzLnZlcnNpb25zLmJ1bgogIH1bcnVudGltZSgpXSgpOwp9Owp2YXIg
b3MgPSBmdW5jdGlvbigpIHsKICByZXR1cm4gewogICAgdW5rbm93bjogKCkgPT4gInVua25vd24i
LAogICAgYnJvd3NlcjogKCkgPT4gInVua25vd24iLAogICAgZGVubzogKCkgPT4gRGVuby5idWls
ZC50YXJnZXQsCiAgICBidW46ICgpID0+IGAke3Byb2Nlc3MuYXJjaH0tJHtwcm9jZXNzLnBsYXRm
b3JtfWAsCiAgICBub2RlOiAoKSA9PiBgJHtwcm9jZXNzLmFyY2h9LSR7cHJvY2Vzcy5wbGF0Zm9y
bX1gCiAgfVtydW50aW1lKCldKCk7Cn07CmFzeW5jIGZ1bmN0aW9uIGNwdSgpIHsKICByZXR1cm4g
YXdhaXQgewogICAgdW5rbm93bjogKCkgPT4gInVua25vd24iLAogICAgYnJvd3NlcjogKCkgPT4g
InVua25vd24iLAogICAgbm9kZTogKCkgPT4gaW1wb3J0KCJub2RlOm9zIikudGhlbigoeCkgPT4g
eC5jcHVzKClbMF0ubW9kZWwpLAogICAgYnVuOiBhc3luYyAoKSA9PiB7CiAgICAgIHRyeSB7CiAg
ICAgICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICJsaW51eCIpIHsKICAgICAgICAgIGNvbnN0
IGZzID0gYXdhaXQgaW1wb3J0KCJub2RlOmZzIik7CiAgICAgICAgICBjb25zdCBidWYgPSBuZXcg
VWludDhBcnJheSg2NCAqIDEwMjQpOwogICAgICAgICAgY29uc3QgZmQgPSBmcy5vcGVuU3luYygi
L3Byb2MvY3B1aW5mbyIsICJyIik7CiAgICAgICAgICBjb25zdCBpbmZvID0gbmV3IFRleHREZWNv
ZGVyKCkuZGVjb2RlKGJ1Zi5zdWJhcnJheSgwLCBmcy5yZWFkU3luYyhmZCwgYnVmKSkpLnRyaW0o
KS5zcGxpdCgiXG4iKTsKICAgICAgICAgIGZzLmNsb3NlU3luYyhmZCk7CiAgICAgICAgICBmb3Ig
KGNvbnN0IGxpbmUgb2YgaW5mbykgewogICAgICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBs
aW5lLnNwbGl0KCI6Iik7CiAgICAgICAgICAgIGlmICgvbW9kZWwgbmFtZXxIYXJkd2FyZXxQcm9j
ZXNzb3J8XmNwdSBtb2RlbHxjaGlwIHR5cGV8XmNwdSB0eXBlLy50ZXN0KGtleSkpCiAgICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlLnRyaW0oKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAg
aWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICJkYXJ3aW4iKSB7CiAgICAgICAgICBjb25zdCB7IHB0
ciwgZGxvcGVuLCBDU3RyaW5nIH0gPSBCdW4uRkZJOwogICAgICAgICAgY29uc3Qgc3lzY3RsYnlu
YW1lID0gZGxvcGVuKCJsaWJjLmR5bGliIiwgewogICAgICAgICAgICBzeXNjdGxieW5hbWU6IHsg
YXJnczogWyJwdHIiLCAicHRyIiwgInB0ciIsICJwdHIiLCAiaXNpemUiXSwgcmV0dXJuczogImlz
aXplIiB9CiAgICAgICAgICB9KS5zeW1ib2xzLnN5c2N0bGJ5bmFtZTsKICAgICAgICAgIGNvbnN0
IGJ1ZiA9IG5ldyBVaW50OEFycmF5KDI1Nik7CiAgICAgICAgICBjb25zdCBsZW4gPSBuZXcgQmln
SW50NjRBcnJheShbMjU2bl0pOwogICAgICAgICAgY29uc3QgY21kID0gbmV3IFRleHRFbmNvZGVy
KCkuZW5jb2RlKCJtYWNoZGVwLmNwdS5icmFuZF9zdHJpbmdcMCIpOwogICAgICAgICAgaWYgKE51
bWJlcihzeXNjdGxieW5hbWUocHRyKGNtZCksIHB0cihidWYpLCBwdHIobGVuKSwgMCwgMCkpID09
PSAtMSkKICAgICAgICAgICAgdGhyb3cgMDsKICAgICAgICAgIHJldHVybiBuZXcgQ1N0cmluZyhw
dHIoYnVmKSk7CiAgICAgICAgfQogICAgICB9IGNhdGNoIHsKICAgICAgfQogICAgICByZXR1cm4g
InVua25vd24iOwogICAgfSwKICAgIGRlbm86IGFzeW5jICgpID0+IHsKICAgICAgdHJ5IHsKICAg
ICAgICBpZiAoRGVuby5idWlsZC5vcyA9PT0gImRhcndpbiIpIHsKICAgICAgICAgIGNvbnN0IHAg
PSBEZW5vLnJ1bih7CiAgICAgICAgICAgIHN0ZGluOiAibnVsbCIsCiAgICAgICAgICAgIHN0ZGVy
cjogIm51bGwiLAogICAgICAgICAgICBzdGRvdXQ6ICJwaXBlZCIsCiAgICAgICAgICAgIGNtZDog
WyJzeXNjdGwiLCAiLW4iLCAibWFjaGRlcC5jcHUuYnJhbmRfc3RyaW5nIl0KICAgICAgICAgIH0p
OwogICAgICAgICAgcmV0dXJuIERlbm8uY29yZS5kZWNvZGUoYXdhaXQgcC5vdXRwdXQoKSkudHJp
bSgpOwogICAgICAgIH0KICAgICAgICBpZiAoRGVuby5idWlsZC5vcyA9PT0gImxpbnV4Iikgewog
ICAgICAgICAgY29uc3QgaW5mbyA9IG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShEZW5vLnJlYWRG
aWxlU3luYygiL3Byb2MvY3B1aW5mbyIpKS5zcGxpdCgiXG4iKTsKICAgICAgICAgIGZvciAoY29u
c3QgbGluZSBvZiBpbmZvKSB7CiAgICAgICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGxpbmUu
c3BsaXQoIjoiKTsKICAgICAgICAgICAgaWYgKC9tb2RlbCBuYW1lfEhhcmR3YXJlfFByb2Nlc3Nv
cnxeY3B1IG1vZGVsfGNoaXAgdHlwZXxeY3B1IHR5cGUvLnRlc3Qoa2V5KSkKICAgICAgICAgICAg
ICByZXR1cm4gdmFsdWUudHJpbSgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAo
RGVuby5idWlsZC5vcyA9PT0gIndpbmRvd3MiKSB7CiAgICAgICAgICBjb25zdCBwID0gRGVuby5y
dW4oewogICAgICAgICAgICBzdGRpbjogIm51bGwiLAogICAgICAgICAgICBzdGRlcnI6ICJudWxs
IiwKICAgICAgICAgICAgc3Rkb3V0OiAicGlwZWQiLAogICAgICAgICAgICBjbWQ6IFsid21pYyIs
ICJjcHUiLCAiZ2V0IiwgIm5hbWUiXQogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4gRGVu
by5jb3JlLmRlY29kZShhd2FpdCBwLm91dHB1dCgpKS5zcGxpdCgiXG4iKS5hdCgtMSkudHJpbSgp
OwogICAgICAgIH0KICAgICAgfSBjYXRjaCB7CiAgICAgIH0KICAgICAgcmV0dXJuICJ1bmtub3du
IjsKICAgIH0KICB9W3J1bnRpbWUoKV0oKTsKfQphc3luYyBmdW5jdGlvbiBydW4ob3B0cyA9IHt9
KSB7CiAgY29uc3QgY29sb3JzID0gb3B0cy5jb2xvcnMgPz89IHRydWU7CiAgY29uc3QgY29sbGVj
dCA9IG9wdHMuY29sbGVjdCB8fCBmYWxzZTsKICBjb25zdCBqc29uID0gISFvcHRzLmpzb24gfHwg
b3B0cy5qc29uID09PSAwOwogIG9wdHMuc2l6ZSA9IHNpemUoYmVuY2htYXJrcy5tYXAoKGIpID0+
IGIubmFtZSkpOwogIGNvbnN0IHJlcG9ydCA9IHsKICAgIGJlbmNobWFya3MsCiAgICBjcHU6IGF3
YWl0IGNwdSgpLAogICAgcnVudGltZTogYCR7YCR7cnVudGltZSgpfSAke3ZlcnNpb24oKX1gLnRy
aW0oKX0gKCR7b3MoKX0pYAogIH07CiAgaWYgKCFqc29uKSB7CiAgICBsb2coZ3JheShjb2xvcnMs
IGBjcHU6ICR7cmVwb3J0LmNwdX1gKSk7CiAgICBsb2coZ3JheShjb2xvcnMsIGBydW50aW1lOiAk
e3JlcG9ydC5ydW50aW1lfWApKTsKICAgIGxvZygiIik7CiAgICBsb2coaGVhZGVyKG9wdHMpKSwg
bG9nKGJyKG9wdHMpKTsKICB9CiAgYjogewogICAgbGV0IF9mID0gZmFsc2U7CiAgICBsZXQgX2Ig
PSBmYWxzZTsKICAgIGZvciAoY29uc3QgYiBvZiBiZW5jaG1hcmtzKSB7CiAgICAgIGlmIChiLmdy
b3VwKQogICAgICAgIGNvbnRpbnVlOwogICAgICBpZiAoYi5iYXNlbGluZSkKICAgICAgICBfYiA9
IHRydWU7CiAgICAgIF9mID0gdHJ1ZTsKICAgICAgdHJ5IHsKICAgICAgICBiLnN0YXRzID0gIWIu
YXN5bmMgPyBhd2FpdCBzeW5jKGIudGltZSwgYi5mbiwgY29sbGVjdCkgOiBhd2FpdCBhc3luYyhi
LnRpbWUsIGIuZm4sIGNvbGxlY3QpOwogICAgICAgIGlmICghanNvbikKICAgICAgICAgIGxvZyhi
ZW5jaG1hcmsoYi5uYW1lLCBiLnN0YXRzLCBvcHRzKSk7CiAgICAgIH0gY2F0Y2ggKGVycikgewog
ICAgICAgIGIuZXJyb3IgPSB7IHN0YWNrOiBlcnIuc3RhY2ssIG1lc3NhZ2U6IGVyci5tZXNzYWdl
IH07CiAgICAgICAgaWYgKCFqc29uKQogICAgICAgICAgbG9nKGJlbmNobWFya19lcnJvcihiLm5h
bWUsIGVyciwgb3B0cykpOwogICAgICB9CiAgICB9CiAgICBpZiAoX2IgJiYgIWpzb24pCiAgICAg
IGxvZygiXG4iICsgc3VtbWFyeShiZW5jaG1hcmtzLmZpbHRlcigoYikgPT4gYi5ncm91cCA9PT0g
bnVsbCksIG9wdHMpKTsKICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgZ3JvdXBzKSB7CiAgICAgIGlm
ICghanNvbikgewogICAgICAgIGlmIChfZikKICAgICAgICAgIGxvZygiIik7CiAgICAgICAgaWYg
KCFncm91cC5zdGFydHNXaXRoKCIkbWl0YXRhX2dyb3VwIikpCiAgICAgICAgICBsb2coYFx1MjAy
MiAke2dyb3VwfWApOwogICAgICAgIGlmIChfZiB8fCAhZ3JvdXAuc3RhcnRzV2l0aCgiJG1pdGF0
YV9ncm91cCIpKQogICAgICAgICAgbG9nKGdyYXkoY29sb3JzLCBicihvcHRzKSkpOwogICAgICB9
CiAgICAgIF9mID0gdHJ1ZTsKICAgICAgZm9yIChjb25zdCBiIG9mIGJlbmNobWFya3MpIHsKICAg
ICAgICBpZiAoZ3JvdXAgIT09IGIuZ3JvdXApCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB0
cnkgewogICAgICAgICAgYi5zdGF0cyA9ICFiLmFzeW5jID8gYXdhaXQgc3luYyhiLnRpbWUsIGIu
Zm4sIGNvbGxlY3QpIDogYXdhaXQgYXN5bmMoYi50aW1lLCBiLmZuLCBjb2xsZWN0KTsKICAgICAg
ICAgIGlmICghanNvbikKICAgICAgICAgICAgbG9nKGJlbmNobWFyayhiLm5hbWUsIGIuc3RhdHMs
IG9wdHMpKTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIGIuZXJyb3IgPSB7IHN0
YWNrOiBlcnIuc3RhY2ssIG1lc3NhZ2U6IGVyci5tZXNzYWdlIH07CiAgICAgICAgICBpZiAoIWpz
b24pCiAgICAgICAgICAgIGxvZyhiZW5jaG1hcmtfZXJyb3IoYi5uYW1lLCBlcnIsIG9wdHMpKTsK
ICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHN1bW1hcmllc1tncm91cF0gJiYgIWpzb24pCiAg
ICAgICAgbG9nKCJcbiIgKyBzdW1tYXJ5KGJlbmNobWFya3MuZmlsdGVyKChiKSA9PiBncm91cCA9
PT0gYi5ncm91cCksIG9wdHMpKTsKICAgIH0KICAgIGlmIChqc29uKQogICAgICBsb2coSlNPTi5z
dHJpbmdpZnkocmVwb3J0LCBudWxsLCB0eXBlb2Ygb3B0cy5qc29uICE9PSAibnVtYmVyIiA/IDAg
OiBvcHRzLmpzb24pKTsKICAgIHJldHVybiByZXBvcnQ7CiAgfQp9CnZhciBnID0gbnVsbDsKdmFy
IHN1bW1hcmllcyA9IHt9Owp2YXIgYmVuY2htYXJrcyA9IFtdOwp2YXIgZ3JvdXBzID0gbmV3IFNl
dDsKdmFyIEFzeW5jRnVuY3Rpb24gPSAoYXN5bmMgKCkgPT4gewp9KS5jb25zdHJ1Y3RvcjsKdmFy
IF9wcmludDsKdHJ5IHsKICBfcHJpbnQgPSBjb25zb2xlLmxvZzsKICBpZiAodHlwZW9mIF9wcmlu
dCAhPT0gImZ1bmN0aW9uIikKICAgIHRocm93IDE7Cn0gY2F0Y2ggewogIF9wcmludCA9IHByaW50
Owp9CgovLyBwcml2YXRlLmpzCmJlbmNoKCJQb2x5ZmlsbHByaXZhdGUiLCAoKSA9PiB7CiAgdmFy
IF9fY2xhc3NQcml2YXRlRmllbGRHZXQgPSBmdW5jdGlvbihyZWNlaXZlciwgc3RhdGUsIGtpbmQs
IGYpIHsKICAgIGlmIChraW5kID09PSAiYSIgJiYgIWYpCiAgICAgIHRocm93IG5ldyBUeXBlRXJy
b3IoIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlciIpOwogICAg
aWYgKHR5cGVvZiBzdGF0ZSA9PT0gImZ1bmN0aW9uIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAh
ZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKQogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5u
b3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90
IGRlY2xhcmUgaXQiKTsKICAgIHJldHVybiBraW5kID09PSAibSIgPyBmIDoga2luZCA9PT0gImEi
ID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTsK
ICB9OwogIHZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0ID0gZnVuY3Rpb24ocmVjZWl2ZXIsIHN0
YXRlLCB2YWx1ZSwga2luZCwgZikgewogICAgaWYgKGtpbmQgPT09ICJtIikKICAgICAgdGhyb3cg
bmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlIik7CiAgICBpZiAo
a2luZCA9PT0gImEiICYmICFmKQogICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFj
Y2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXIiKTsKICAgIGlmICh0eXBlb2Ygc3Rh
dGUgPT09ICJmdW5jdGlvbiIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFz
KHJlY2VpdmVyKSkKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IHdyaXRlIHByaXZh
dGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXQiKTsK
ICAgIHJldHVybiBraW5kID09PSAiYSIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBm
LnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSwgdmFsdWU7CiAgfTsK
ICB2YXIgX0Zvb19zdGF0ZSwgX0Zvb19pbmM7CgogIGNsYXNzIEZvbyB7CiAgICBjb25zdHJ1Y3Rv
cigpIHsKICAgICAgX0Zvb19zdGF0ZS5zZXQodGhpcywgMSk7CiAgICAgIF9Gb29faW5jLnNldCh0
aGlzLCAxMyk7CiAgICB9CiAgICBydW4oKSB7CiAgICAgIGxldCBuID0gMWU2OwogICAgICB3aGls
ZSAobi0tID4gMCkgewogICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0Zvb19z
dGF0ZSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRm9vX3N0YXRlLCAiZiIpICsgX19j
bGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRm9vX2luYywgImYiKSwgImYiKTsKICAgICAgfQog
ICAgICByZXR1cm4gbjsKICAgIH0KICB9CiAgX0Zvb19zdGF0ZSA9IG5ldyBXZWFrTWFwLCBfRm9v
X2luYyA9IG5ldyBXZWFrTWFwOwogIG5ldyBGb28oKS5ydW4oKTsKfSk7CmJlbmNoKCJOYXRpdmVQ
cml2YXRlcyIsICgpID0+IHsKCiAgY2xhc3MgRm9vIHsKICAgICNzdGF0ZSA9IDE7CiAgICAjaW5j
ID0gMTM7CiAgICBydW4oKSB7CiAgICAgIGxldCBuID0gMWU2OwogICAgICB3aGlsZSAobi0tID4g
MCkgewogICAgICAgIHRoaXMuI3N0YXRlICs9IHRoaXMuI2luYzsKICAgICAgfQogICAgICByZXR1
cm4gbjsKICAgIH0KICB9CiAgbmV3IEZvbygpLnJ1bigpOwp9KTsKYmVuY2goIkNvbnZlbnRpb25h
bFByaXZhdGVzIiwgKCkgPT4gewoKICBjbGFzcyBGb28gewogICAgX3N0YXRlID0gMTsKICAgIF9p
bmMgPSAxMzsKICAgIHJ1bigpIHsKICAgICAgbGV0IG4gPSAxZTY7CiAgICAgIHdoaWxlIChuLS0g
PiAwKSB7CiAgICAgICAgdGhpcy5fc3RhdGUgKz0gdGhpcy5faW5jOwogICAgICB9CiAgICAgIHJl
dHVybiBuOwogICAgfQogIH0KICBuZXcgRm9vKCkucnVuKCk7Cn0pOwphd2FpdCBydW4oKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>