<?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>109627</bug_id>
          
          <creation_ts>2013-02-12 16:21:30 -0800</creation_ts>
          <short_desc>[GTK] Remove the GLib unicode backend</short_desc>
          <delta_ts>2013-02-13 09:30:05 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>atwilson</cc>
    
    <cc>benjamin</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>d-r</cc>
    
    <cc>gustavo</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zarvai</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>831391</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-02-12 16:21:30 -0800</bug_when>
    <thetext>The GLib unicode backend is unused in Gnome and incomplete at the moment. Additionally it requires conversion to UTF-8 everywhere, so it will never match the performance of the ICU one. ICU is used by almost all other ports and gives us consistency.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831395</commentid>
    <comment_count>1</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-02-12 16:23:34 -0800</bug_when>
    <thetext>Carlos did a lot of really nice cleanup to the GLib backend a few years back, so I&apos;m a bit sad to be proposing this. At the same time, the design of the GLib API (UTF-8 only) suggest that the performance characteristics of the backend will be worse than those of the ICU backend. Since this is used throughout WebCore we really need this code to be fast.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831608</commentid>
    <comment_count>2</comment_count>
      <attachid>188006</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-02-12 21:31:20 -0800</bug_when>
    <thetext>Created attachment 188006
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831628</commentid>
    <comment_count>3</comment_count>
      <attachid>188006</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-02-12 22:03:54 -0800</bug_when>
    <thetext>Comment on attachment 188006
Patch

I think focusing on ICU is a great idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831646</commentid>
    <comment_count>4</comment_count>
      <attachid>188006</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-12 22:32:21 -0800</bug_when>
    <thetext>Comment on attachment 188006
Patch

Clearing flags on attachment: 188006

Committed r142724: &lt;http://trac.webkit.org/changeset/142724&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831647</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-12 22:32:24 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831735</commentid>
    <comment_count>6</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2013-02-13 02:11:44 -0800</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831737</commentid>
    <comment_count>7</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2013-02-13 02:12:51 -0800</bug_when>
    <thetext>Sorry, didn&apos;t mean to reopen this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831749</commentid>
    <comment_count>8</comment_count>
    <who name="Zoltan Arvai">zarvai</who>
    <bug_when>2013-02-13 02:32:43 -0800</bug_when>
    <thetext>It seems some traces of GLib unicode are still present in the sources:

WTF/WTF.gypi:258:            &apos;wtf/unicode/glib/UnicodeGLib.cpp&apos;,
WTF/WTF.gypi:259:            &apos;wtf/unicode/glib/UnicodeGLib.h&apos;,
WTF/wtf/unicode/Unicode.h:34:#include &lt;wtf/unicode/glib/UnicodeGLib.h&gt;

WebCore/platform/text/TextEncoding.cpp:40:#elif USE(GLIB_UNICODE)
WebCore/platform/text/TextEncoding.cpp:107:#elif USE(GLIB_UNICODE)
WebCore/platform/text/TextEncodingRegistry.cpp:48:#if USE(GLIB_UNICODE)
WebCore/platform/text/TextEncodingRegistry.cpp:229:#if USE(GLIB_UNICODE)
WebCore/platform/text/TextEncodingRegistry.cpp:301:#if USE(GLIB_UNICODE)
WebCore/platform/KURL.cpp:47:#elif USE(GLIB_UNICODE)
WebCore/platform/KURL.cpp:1483:#elif USE(GLIB_UNICODE)
WebKit/blackberry/WebCoreSupport/AboutDataUseFeatures.in:37:GLIB_UNICODE
WTF/wtf/unicode/Unicode.h:33:#elif USE(GLIB_UNICODE)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831753</commentid>
    <comment_count>9</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2013-02-13 02:37:28 -0800</bug_when>
    <thetext>I&apos;m fixing the .gypi references since they break the chromium bots. I&apos;m not doing anything with the #defines in the code, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831792</commentid>
    <comment_count>10</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2013-02-13 04:13:05 -0800</bug_when>
    <thetext>*sniff* Feeling nostalgic to see my first ever WebKit contribution going away...

But agree it makes sense. Performance isn&apos;t the only thing where it wouldn&apos;t match ICU. Word breaking behavior was not really identical.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831974</commentid>
    <comment_count>11</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2013-02-13 09:30:05 -0800</bug_when>
    <thetext>Cleanup is here: https://bugs.webkit.org/show_bug.cgi?id=109707</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188006</attachid>
            <date>2013-02-12 21:31:20 -0800</date>
            <delta_ts>2013-02-13 02:11:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109627-20130212212750.patch</filename>
            <type>text/plain</type>
            <size>67249</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNjg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDJmZGI2NmUwYTM0NjExOTBmMTJlYjlh
ZjM3NDE4M2FlNjMyZGI4ODguLjhkNTliOTg5YTQ5NmQ0ODNiYzY1YTU2ZjA2NTAxM2U4YTkzODkx
YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTMtMDItMTIgIE1hcnRpbiBSb2JpbnNvbiAgPG1y
b2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFJlbW92ZSB0aGUgR0xpYiB1bmlj
b2RlIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwOTYyNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFJlbW92ZSByZWZlcmVuY2VzIHRvIHRoZSBHTGliIHVuaWNvZGUgYmFja2VuZCBmcm9tIFdU
Ri4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IFJlbW92ZSBHTGliIHVuaWNvZGUg
ZmlsZXMgZnJvbSB0aGUgc291cmNlIGxpc3QuCisgICAgICAgICogd3RmL3VuaWNvZGUvZ2xpYi9V
bmljb2RlR0xpYi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogd3RmL3VuaWNvZGUvZ2xpYi9Vbmlj
b2RlR0xpYi5oOiBSZW1vdmVkLgorCiAyMDEzLTAyLTExICBPbGl2ZXIgSHVudCAgPG9saXZlckBh
cHBsZS5jb20+CiAKICAgICAgICAgQnVpbGQgZml4LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDlkMDI1YmUzZTVj
NjcxNmU0YzJhNDkxM2Q2Y2M5Y2E0MjQ4NzQ0NzMuLmFiNTYxZGZiODgyZDEyY2U1NzgzMzNhMzVi
ZWM5MGNkZTIyNmE2NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMy0wMi0xMiAg
TWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10g
UmVtb3ZlIHRoZSBHTGliIHVuaWNvZGUgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5NjI3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIHJlZmVyZW5jZXMgdG8gdGhlIEdMaWIgdW5p
Y29kZSBiYWNrZW5kIGZyb20gV2ViQ29yZS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3Qu
YW06IFVwZGF0ZSB0aGUgc291cmNlIGxpc3QuCisgICAgICAgICogcGxhdGZvcm0vdGV4dC9ndGsv
VGV4dEJyZWFrSXRlcmF0b3JHdGsuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvZ3RrL1RleHRDb2RlY0d0ay5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vdGV4
dC9ndGsvVGV4dENvZGVjR3RrLmg6IFJlbW92ZWQuCisKIDIwMTMtMDItMTIgIERlYW4gSmFja3Nv
biAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBjbGFzcyBuYW1lIGZvciBzbmFwc2hv
dHRlZCBwbHVnaW4gYmFzZWQgb24gZGltZW5zaW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9H
TlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dURi9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4
IGMyM2I0NTNhMzdkMjUzZDI5MTVhMGVjODQ0Nzk0MWRiMjdmZThkOTcuLjBjMDE1Nzk3YzNhY2Fk
OWZiNTNkZjBlODg1MGUwN2YzM2MxNTRjZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvR05VbWFr
ZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV1RGL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTI2
MSw4ICsyNjEsNiBAQCB3dGZfc291cmNlcyArPSBcCiAgICAgU291cmNlL1dURi93dGYvdW5pY29k
ZS9VVEY4LmggXAogICAgIFNvdXJjZS9XVEYvd3RmL3VuaWNvZGUvVW5pY29kZS5oIFwKICAgICBT
b3VyY2UvV1RGL3d0Zi91bmljb2RlL1VuaWNvZGVNYWNyb3NGcm9tSUNVLmggXAotICAgIFNvdXJj
ZS9XVEYvd3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlR0xpYi5oIFwKLSAgICBTb3VyY2UvV1RGL3d0
Zi91bmljb2RlL2dsaWIvVW5pY29kZUdMaWIuY3BwIFwKICAgICBTb3VyY2UvV1RGL3d0Zi91bmlj
b2RlL2ljdS9Db2xsYXRvcklDVS5jcHAgXAogICAgIFNvdXJjZS9XVEYvd3RmL3VuaWNvZGUvaWN1
L1VuaWNvZGVJY3UuaCBcCiAgICAgU291cmNlL1dURi93dGYvdXJsL2FwaS9QYXJzZWRVUkwuY3Bw
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlR0xpYi5j
cHAgYi9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL2dsaWIvVW5pY29kZUdMaWIuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWE4YjEwODAzZWY5YWMzYzA2MGEzMzZmNjMxMDAzMTg1
NTA5Mjg5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XVEYvd3RmL3VuaWNvZGUvZ2xpYi9Vbmljb2RlR0xpYi5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwxOTkgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDggSsO8cmcgQmlsbGV0
ZXIgPGpAYml0cm9uLmNoPgotICogIENvcHlyaWdodCAoQykgMjAwOCBEb21pbmlrIFLDtnR0c2No
ZXMgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nlc3MtY29tcGFueS5jb20+Ci0gKiAgQ29weXJpZ2h0
IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiVW5pY29kZUdMaWIuaCIKLQotI2lmIFVTRShHTElCX1VOSUNPREUpCi0KLSNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3VuaWNvZGUvVVRGOC5oPgotCi0j
ZGVmaW5lIFVURjhfSVNfU1VSUk9HQVRFKGNoYXJhY3RlcikgKGNoYXJhY3RlciA+PSAweDEwMDAw
ICYmIGNoYXJhY3RlciA8PSAweDEwRkZGRikKLQotbmFtZXNwYWNlIFdURiB7Ci0KLW5hbWVzcGFj
ZSBVbmljb2RlIHsKLQotVUNoYXIzMiBmb2xkQ2FzZShVQ2hhcjMyIGNoKQotewotICAgIEdPd25Q
dHI8R0Vycm9yPiBnZXJyb3I7Ci0KLSAgICBHT3duUHRyPGNoYXI+IHV0ZjhjaGFyOwotICAgIHV0
ZjhjaGFyLnNldChnX3VjczRfdG9fdXRmOChyZWludGVycHJldF9jYXN0PGd1bmljaGFyKj4oJmNo
KSwgMSwgMCwgMCwgJmdlcnJvci5vdXRQdHIoKSkpOwotICAgIGlmIChnZXJyb3IpCi0gICAgICAg
IHJldHVybiBjaDsKLQotICAgIEdPd25QdHI8Y2hhcj4gdXRmOGNhc2VGb2xkZWQ7Ci0gICAgdXRm
OGNhc2VGb2xkZWQuc2V0KGdfdXRmOF9jYXNlZm9sZCh1dGY4Y2hhci5nZXQoKSwgLTEpKTsKLQot
ICAgIEdPd25QdHI8Z3VuaWNoYXI+IHVjczRSZXN1bHQ7Ci0gICAgdWNzNFJlc3VsdC5zZXQoZ191
dGY4X3RvX3VjczRfZmFzdCh1dGY4Y2FzZUZvbGRlZC5nZXQoKSwgLTEsIDApKTsKLQotICAgIHJl
dHVybiAqdWNzNFJlc3VsdDsKLX0KLQotc3RhdGljIGludCBnZXRVVEYxNkxlbmd0aEZyb21VVEY4
KGNvbnN0IGdjaGFyKiB1dGY4U3RyaW5nLCBpbnQgbGVuZ3RoKQotewotICAgIGludCB1dGYxNkxl
bmd0aCA9IDA7Ci0gICAgY29uc3QgZ2NoYXIqIGlucHV0U3RyaW5nID0gdXRmOFN0cmluZzsKLQot
ICAgIHdoaWxlICgodXRmOFN0cmluZyArIGxlbmd0aCAtIGlucHV0U3RyaW5nID4gMCkgJiYgKmlu
cHV0U3RyaW5nKSB7Ci0gICAgICAgIGd1bmljaGFyIGNoYXJhY3RlciA9IGdfdXRmOF9nZXRfY2hh
cihpbnB1dFN0cmluZyk7Ci0KLSAgICAgICAgdXRmMTZMZW5ndGggKz0gVVRGOF9JU19TVVJST0dB
VEUoY2hhcmFjdGVyKSA/IDIgOiAxOwotICAgICAgICBpbnB1dFN0cmluZyA9IGdfdXRmOF9uZXh0
X2NoYXIoaW5wdXRTdHJpbmcpOwotICAgIH0KLQotICAgIHJldHVybiB1dGYxNkxlbmd0aDsKLX0K
LQotdHlwZWRlZiBnY2hhciogKCpVVEY4Q2FzZUZ1bmN0aW9uKShjb25zdCBnY2hhciosIGdzc2l6
ZSBsZW5ndGgpOwotCi1zdGF0aWMgaW50IGNvbnZlcnRDYXNlKFVDaGFyKiByZXN1bHQsIGludCBy
ZXN1bHRMZW5ndGgsIGNvbnN0IFVDaGFyKiBzcmMsIGludCBzcmNMZW5ndGgsIGJvb2wqIGVycm9y
LCBVVEY4Q2FzZUZ1bmN0aW9uIGNhc2VGdW5jdGlvbikKLXsKLSAgICAqZXJyb3IgPSBmYWxzZTsK
LQotICAgIC8vIEFsbG9jYXRlIGEgYnVmZmVyIGJpZyBlbm91Z2ggdG8gaG9sZCBhbGwgdGhlIGNo
YXJhY3RlcnMuCi0gICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcihzcmNMZW5ndGggKiAzKTsKLSAgICBj
aGFyKiB1dGY4VGFyZ2V0ID0gYnVmZmVyLmRhdGEoKTsKLSAgICBjb25zdCBVQ2hhciogdXRmMTZT
b3VyY2UgPSBzcmM7Ci0gICAgQ29udmVyc2lvblJlc3VsdCBjb252ZXJzaW9uUmVzdWx0ID0gY29u
dmVydFVURjE2VG9VVEY4KCZ1dGYxNlNvdXJjZSwgdXRmMTZTb3VyY2UgKyBzcmNMZW5ndGgsICZ1
dGY4VGFyZ2V0LCB1dGY4VGFyZ2V0ICsgYnVmZmVyLnNpemUoKSwgdHJ1ZSk7Ci0gICAgaWYgKGNv
bnZlcnNpb25SZXN1bHQgIT0gY29udmVyc2lvbk9LKSB7Ci0gICAgICAgICplcnJvciA9IHRydWU7
Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgYnVmZmVyLnNocmluayh1dGY4VGFyZ2V0
IC0gYnVmZmVyLmRhdGEoKSk7Ci0KLSAgICBHT3duUHRyPGNoYXI+IHV0ZjhSZXN1bHQoY2FzZUZ1
bmN0aW9uKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5zaXplKCkpKTsKLSAgICBsb25nIHV0ZjhSZXN1
bHRMZW5ndGggPSBzdHJsZW4odXRmOFJlc3VsdC5nZXQoKSk7Ci0KLSAgICAvLyBDYWxjdWxhdGUg
dGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBzaXplLgotICAgIGludCByZWFsTGVuZ3RoID0gZ2V0VVRG
MTZMZW5ndGhGcm9tVVRGOCh1dGY4UmVzdWx0LmdldCgpLCB1dGY4UmVzdWx0TGVuZ3RoKTsKLSAg
ICBpZiAocmVhbExlbmd0aCA+IHJlc3VsdExlbmd0aCkgewotICAgICAgICAqZXJyb3IgPSB0cnVl
OwotICAgICAgICByZXR1cm4gcmVhbExlbmd0aDsKLSAgICB9Ci0KLSAgICAvLyBDb252ZXJ0IHRo
ZSByZXN1bHQgdG8gVVRGLTE2LgotICAgIFVDaGFyKiB1dGYxNlRhcmdldCA9IHJlc3VsdDsKLSAg
ICBjb25zdCBjaGFyKiB1dGY4U291cmNlID0gdXRmOFJlc3VsdC5nZXQoKTsKLSAgICBib29sIHVu
dXNlZElTQWxsQVNDSUk7Ci0gICAgY29udmVyc2lvblJlc3VsdCA9IGNvbnZlcnRVVEY4VG9VVEYx
NigmdXRmOFNvdXJjZSwgdXRmOFNvdXJjZSArIHV0ZjhSZXN1bHRMZW5ndGgsICZ1dGYxNlRhcmdl
dCwgdXRmMTZUYXJnZXQgKyByZXN1bHRMZW5ndGgsICZ1bnVzZWRJc0FsbEFTQ0lJLCB0cnVlKTsK
LSAgICBsb25nIHV0ZjE2UmVzdWx0TGVuZ3RoID0gdXRmMTZUYXJnZXQgLSByZXN1bHQ7Ci0gICAg
aWYgKGNvbnZlcnNpb25SZXN1bHQgIT0gY29udmVyc2lvbk9LKQotICAgICAgICAqZXJyb3IgPSB0
cnVlOwotCi0gICAgcmV0dXJuIHV0ZjE2UmVzdWx0TGVuZ3RoIDw9IDAgPyAtMSA6IHV0ZjE2UmVz
dWx0TGVuZ3RoOwotfQotaW50IGZvbGRDYXNlKFVDaGFyKiByZXN1bHQsIGludCByZXN1bHRMZW5n
dGgsIGNvbnN0IFVDaGFyKiBzcmMsIGludCBzcmNMZW5ndGgsIGJvb2wqIGVycm9yKQotewotICAg
IHJldHVybiBjb252ZXJ0Q2FzZShyZXN1bHQsIHJlc3VsdExlbmd0aCwgc3JjLCBzcmNMZW5ndGgs
IGVycm9yLCBnX3V0ZjhfY2FzZWZvbGQpOwotfQotCi1pbnQgdG9Mb3dlcihVQ2hhciogcmVzdWx0
LCBpbnQgcmVzdWx0TGVuZ3RoLCBjb25zdCBVQ2hhciogc3JjLCBpbnQgc3JjTGVuZ3RoLCBib29s
KiBlcnJvcikKLXsKLSAgICByZXR1cm4gY29udmVydENhc2UocmVzdWx0LCByZXN1bHRMZW5ndGgs
IHNyYywgc3JjTGVuZ3RoLCBlcnJvciwgZ191dGY4X3N0cmRvd24pOwotfQotCi1pbnQgdG9VcHBl
cihVQ2hhciogcmVzdWx0LCBpbnQgcmVzdWx0TGVuZ3RoLCBjb25zdCBVQ2hhciogc3JjLCBpbnQg
c3JjTGVuZ3RoLCBib29sKiBlcnJvcikKLXsKLSAgICByZXR1cm4gY29udmVydENhc2UocmVzdWx0
LCByZXN1bHRMZW5ndGgsIHNyYywgc3JjTGVuZ3RoLCBlcnJvciwgZ191dGY4X3N0cnVwKTsKLX0K
LQotRGlyZWN0aW9uIGRpcmVjdGlvbihVQ2hhcjMyIGMpCi17Ci0gICAgUGFuZ29CaWRpVHlwZSB0
eXBlID0gcGFuZ29fYmlkaV90eXBlX2Zvcl91bmljaGFyKGMpOwotICAgIHN3aXRjaCAodHlwZSkg
ewotICAgIGNhc2UgUEFOR09fQklESV9UWVBFX0w6Ci0gICAgICAgIHJldHVybiBMZWZ0VG9SaWdo
dDsKLSAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9SOgotICAgICAgICByZXR1cm4gUmlnaHRUb0xl
ZnQ7Ci0gICAgY2FzZSBQQU5HT19CSURJX1RZUEVfQUw6Ci0gICAgICAgIHJldHVybiBSaWdodFRv
TGVmdEFyYWJpYzsKLSAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9MUkU6Ci0gICAgICAgIHJldHVy
biBMZWZ0VG9SaWdodEVtYmVkZGluZzsKLSAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9STEU6Ci0g
ICAgICAgIHJldHVybiBSaWdodFRvTGVmdEVtYmVkZGluZzsKLSAgICBjYXNlIFBBTkdPX0JJRElf
VFlQRV9MUk86Ci0gICAgICAgIHJldHVybiBMZWZ0VG9SaWdodE92ZXJyaWRlOwotICAgIGNhc2Ug
UEFOR09fQklESV9UWVBFX1JMTzoKLSAgICAgICAgcmV0dXJuIFJpZ2h0VG9MZWZ0T3ZlcnJpZGU7
Ci0gICAgY2FzZSBQQU5HT19CSURJX1RZUEVfUERGOgotICAgICAgICByZXR1cm4gUG9wRGlyZWN0
aW9uYWxGb3JtYXQ7Ci0gICAgY2FzZSBQQU5HT19CSURJX1RZUEVfRU46Ci0gICAgICAgIHJldHVy
biBFdXJvcGVhbk51bWJlcjsKLSAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9BTjoKLSAgICAgICAg
cmV0dXJuIEFyYWJpY051bWJlcjsKLSAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9FUzoKLSAgICAg
ICAgcmV0dXJuIEV1cm9wZWFuTnVtYmVyU2VwYXJhdG9yOwotICAgIGNhc2UgUEFOR09fQklESV9U
WVBFX0VUOgotICAgICAgICByZXR1cm4gRXVyb3BlYW5OdW1iZXJUZXJtaW5hdG9yOwotICAgIGNh
c2UgUEFOR09fQklESV9UWVBFX0NTOgotICAgICAgICByZXR1cm4gQ29tbW9uTnVtYmVyU2VwYXJh
dG9yOwotICAgIGNhc2UgUEFOR09fQklESV9UWVBFX05TTToKLSAgICAgICAgcmV0dXJuIE5vblNw
YWNpbmdNYXJrOwotICAgIGNhc2UgUEFOR09fQklESV9UWVBFX0JOOgotICAgICAgICByZXR1cm4g
Qm91bmRhcnlOZXV0cmFsOwotICAgIGNhc2UgUEFOR09fQklESV9UWVBFX0I6Ci0gICAgICAgIHJl
dHVybiBCbG9ja1NlcGFyYXRvcjsKLSAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9TOgotICAgICAg
ICByZXR1cm4gU2VnbWVudFNlcGFyYXRvcjsKLSAgICBjYXNlIFBBTkdPX0JJRElfVFlQRV9XUzoK
LSAgICAgICAgcmV0dXJuIFdoaXRlU3BhY2VOZXV0cmFsOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiBPdGhlck5ldXRyYWw7Ci0gICAgfQotfQotCi1pbnQgdW1lbWNhc2VjbXAoY29uc3Qg
VUNoYXIqIGEsIGNvbnN0IFVDaGFyKiBiLCBpbnQgbGVuKQotewotICAgIEdPd25QdHI8Y2hhcj4g
dXRmOGE7Ci0gICAgR093blB0cjxjaGFyPiB1dGY4YjsKLQotICAgIHV0ZjhhLnNldChnX3V0ZjE2
X3RvX3V0ZjgoYSwgbGVuLCAwLCAwLCAwKSk7Ci0gICAgdXRmOGIuc2V0KGdfdXRmMTZfdG9fdXRm
OChiLCBsZW4sIDAsIDAsIDApKTsKLQotICAgIEdPd25QdHI8Y2hhcj4gZm9sZGVkQTsKLSAgICBH
T3duUHRyPGNoYXI+IGZvbGRlZEI7Ci0KLSAgICBmb2xkZWRBLnNldChnX3V0ZjhfY2FzZWZvbGQo
dXRmOGEuZ2V0KCksIC0xKSk7Ci0gICAgZm9sZGVkQi5zZXQoZ191dGY4X2Nhc2Vmb2xkKHV0Zjhi
LmdldCgpLCAtMSkpOwotCi0gICAgLy8gRklYTUU6IHVtZW1jYXNlY21wIG5lZWRzIHRvIG1pbWlj
IHVfbWVtY2FzZWNtcCBvZiBpY3UKLSAgICAvLyBmcm9tIHRoZSBJQ1UgZG9jczoKLSAgICAvLyAi
Q29tcGFyZSB0d28gc3RyaW5ncyBjYXNlLWluc2Vuc2l0aXZlbHkgdXNpbmcgZnVsbCBjYXNlIGZv
bGRpbmcuCi0gICAgLy8gaGlzIGlzIGVxdWl2YWxlbnQgdG8gdV9zdHJjbXAodV9zdHJGb2xkQ2Fz
ZShzMSwgbiwgb3B0aW9ucyksIHVfc3RyRm9sZENhc2UoczIsIG4sIG9wdGlvbnMpKS4iCi0gICAg
Ly8KLSAgICAvLyBTbyBpdCBsb29rcyBsaWtlIHdlIGRvbid0IG5lZWQgdGhlIGZ1bGwgZ191dGY4
X2NvbGxhdGUgaGVyZSwKLSAgICAvLyBidXQgcmVhbGx5IGEgYml0d2lzZSBjb21wYXJpc29uIG9m
IGNhc2Vmb2xkZWQgdW5pY29kZSBjaGFycyAobm90IHV0Zi04IGJ5dGVzKS4KLSAgICAvLyBBcyB0
aGVyZSBpcyBubyBkaXJlY3QgZXF1aXZhbGVudCB0byB0aGlzIGljdSBmdW5jdGlvbiBpbiBHTGli
LCBmb3Igbm93Ci0gICAgLy8gd2UnbGwgdXNlIGdfdXRmOF9jb2xsYXRlKCk6Ci0KLSAgICByZXR1
cm4gZ191dGY4X2NvbGxhdGUoZm9sZGVkQS5nZXQoKSwgZm9sZGVkQi5nZXQoKSk7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFVuaWNvZGUKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRpZiAvLyBV
U0UoR0xJQl9VTklDT0RFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdW5pY29kZS9nbGli
L1VuaWNvZGVHTGliLmggYi9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL2dsaWIvVW5pY29kZUdMaWIu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTllNDU1YWY4ZTg4YmJkZjI3ZjgwYzYy
YzJkODYyNDk3MDg5YWUxMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL2dsaWIvVW5pY29kZUdMaWIuaAorKysgL2Rl
di9udWxsCkBAIC0xLDIzOCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwNiBHZW9y
Z2UgU3RhaWtvcyA8c3RhaWtvc0BrZGUub3JnPgotICogIENvcHlyaWdodCAoQykgMjAwNiBBbGV4
ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA3IEFw
cGxlIENvbXB1dGVyLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgQ29weXJpZ2h0IChD
KSAyMDA4IErDvHJnIEJpbGxldGVyIDxqQGJpdHJvbi5jaD4KLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDggRG9taW5payBSw7Z0dHNjaGVzIDxkb21pbmlrLnJvZXR0c2NoZXNAYWNjZXNzLWNvbXBhbnku
Y29tPgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQot
ICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KLSAqCi0gKi8KLQotI2lmbmRlZiBVbmljb2RlR0xpYl9oCi0jZGVmaW5lIFVuaWNv
ZGVHTGliX2gKLQotI2lmIFVTRShHTElCX1VOSUNPREUpCi0KLSNpbmNsdWRlIDx3dGYvZ29iamVj
dC9HT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3VuaWNvZGUvU2NyaXB0Q29kZXNGcm9tSUNVLmg+
Ci0jaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZU1hY3Jvc0Zyb21JQ1UuaD4KLQotI2luY2x1
ZGUgPGdsaWIuaD4KLSNpbmNsdWRlIDxwYW5nby9wYW5nby5oPgotI2luY2x1ZGUgPHN0ZGludC5o
PgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi10eXBlZGVmIHVp
bnQxNl90IFVDaGFyOwotdHlwZWRlZiBpbnQzMl90IFVDaGFyMzI7Ci0KLW5hbWVzcGFjZSBXVEYg
ewotCi1uYW1lc3BhY2UgVW5pY29kZSB7Ci0KLWVudW0gRGlyZWN0aW9uIHsKLSAgICBMZWZ0VG9S
aWdodCwKLSAgICBSaWdodFRvTGVmdCwKLSAgICBFdXJvcGVhbk51bWJlciwKLSAgICBFdXJvcGVh
bk51bWJlclNlcGFyYXRvciwKLSAgICBFdXJvcGVhbk51bWJlclRlcm1pbmF0b3IsCi0gICAgQXJh
YmljTnVtYmVyLAotICAgIENvbW1vbk51bWJlclNlcGFyYXRvciwKLSAgICBCbG9ja1NlcGFyYXRv
ciwKLSAgICBTZWdtZW50U2VwYXJhdG9yLAotICAgIFdoaXRlU3BhY2VOZXV0cmFsLAotICAgIE90
aGVyTmV1dHJhbCwKLSAgICBMZWZ0VG9SaWdodEVtYmVkZGluZywKLSAgICBMZWZ0VG9SaWdodE92
ZXJyaWRlLAotICAgIFJpZ2h0VG9MZWZ0QXJhYmljLAotICAgIFJpZ2h0VG9MZWZ0RW1iZWRkaW5n
LAotICAgIFJpZ2h0VG9MZWZ0T3ZlcnJpZGUsCi0gICAgUG9wRGlyZWN0aW9uYWxGb3JtYXQsCi0g
ICAgTm9uU3BhY2luZ01hcmssCi0gICAgQm91bmRhcnlOZXV0cmFsCi19OwotCi1lbnVtIERlY29t
cG9zaXRpb25UeXBlIHsKLSAgICBEZWNvbXBvc2l0aW9uTm9uZSwKLSAgICBEZWNvbXBvc2l0aW9u
Q2Fub25pY2FsLAotICAgIERlY29tcG9zaXRpb25Db21wYXQsCi0gICAgRGVjb21wb3NpdGlvbkNp
cmNsZSwKLSAgICBEZWNvbXBvc2l0aW9uRmluYWwsCi0gICAgRGVjb21wb3NpdGlvbkZvbnQsCi0g
ICAgRGVjb21wb3NpdGlvbkZyYWN0aW9uLAotICAgIERlY29tcG9zaXRpb25Jbml0aWFsLAotICAg
IERlY29tcG9zaXRpb25Jc29sYXRlZCwKLSAgICBEZWNvbXBvc2l0aW9uTWVkaWFsLAotICAgIERl
Y29tcG9zaXRpb25OYXJyb3csCi0gICAgRGVjb21wb3NpdGlvbk5vQnJlYWssCi0gICAgRGVjb21w
b3NpdGlvblNtYWxsLAotICAgIERlY29tcG9zaXRpb25TcXVhcmUsCi0gICAgRGVjb21wb3NpdGlv
blN1YiwKLSAgICBEZWNvbXBvc2l0aW9uU3VwZXIsCi0gICAgRGVjb21wb3NpdGlvblZlcnRpY2Fs
LAotICAgIERlY29tcG9zaXRpb25XaWRlLAotfTsKLQotZW51bSBDaGFyQ2F0ZWdvcnkgewotICAg
IE5vQ2F0ZWdvcnkgPSAgMCwKLSAgICBPdGhlcl9Ob3RBc3NpZ25lZCA9IFVfTUFTSyhHX1VOSUNP
REVfVU5BU1NJR05FRCksCi0gICAgTGV0dGVyX1VwcGVyY2FzZSA9IFVfTUFTSyhHX1VOSUNPREVf
VVBQRVJDQVNFX0xFVFRFUiksCi0gICAgTGV0dGVyX0xvd2VyY2FzZSA9IFVfTUFTSyhHX1VOSUNP
REVfTE9XRVJDQVNFX0xFVFRFUiksCi0gICAgTGV0dGVyX1RpdGxlY2FzZSA9IFVfTUFTSyhHX1VO
SUNPREVfVElUTEVDQVNFX0xFVFRFUiksCi0gICAgTGV0dGVyX01vZGlmaWVyID0gVV9NQVNLKEdf
VU5JQ09ERV9NT0RJRklFUl9MRVRURVIpLAotICAgIExldHRlcl9PdGhlciA9IFVfTUFTSyhHX1VO
SUNPREVfT1RIRVJfTEVUVEVSKSwKLQotICAgIE1hcmtfTm9uU3BhY2luZyA9IFVfTUFTSyhHX1VO
SUNPREVfTk9OX1NQQUNJTkdfTUFSSyksCi0gICAgTWFya19FbmNsb3NpbmcgPSBVX01BU0soR19V
TklDT0RFX0VOQ0xPU0lOR19NQVJLKSwKLSAgICBNYXJrX1NwYWNpbmdDb21iaW5pbmcgPSBVX01B
U0soR19VTklDT0RFX0NPTUJJTklOR19NQVJLKSwKLQotICAgIE51bWJlcl9EZWNpbWFsRGlnaXQg
PSBVX01BU0soR19VTklDT0RFX0RFQ0lNQUxfTlVNQkVSKSwKLSAgICBOdW1iZXJfTGV0dGVyID0g
VV9NQVNLKEdfVU5JQ09ERV9MRVRURVJfTlVNQkVSKSwKLSAgICBOdW1iZXJfT3RoZXIgPSBVX01B
U0soR19VTklDT0RFX09USEVSX05VTUJFUiksCi0KLSAgICBTZXBhcmF0b3JfU3BhY2UgPSBVX01B
U0soR19VTklDT0RFX1NQQUNFX1NFUEFSQVRPUiksCi0gICAgU2VwYXJhdG9yX0xpbmUgPSBVX01B
U0soR19VTklDT0RFX0xJTkVfU0VQQVJBVE9SKSwKLSAgICBTZXBhcmF0b3JfUGFyYWdyYXBoID0g
VV9NQVNLKEdfVU5JQ09ERV9QQVJBR1JBUEhfU0VQQVJBVE9SKSwKLQotICAgIE90aGVyX0NvbnRy
b2wgPSBVX01BU0soR19VTklDT0RFX0NPTlRST0wpLAotICAgIE90aGVyX0Zvcm1hdCA9IFVfTUFT
SyhHX1VOSUNPREVfRk9STUFUKSwKLSAgICBPdGhlcl9Qcml2YXRlVXNlID0gVV9NQVNLKEdfVU5J
Q09ERV9QUklWQVRFX1VTRSksCi0gICAgT3RoZXJfU3Vycm9nYXRlID0gVV9NQVNLKEdfVU5JQ09E
RV9TVVJST0dBVEUpLAotCi0gICAgUHVuY3R1YXRpb25fRGFzaCA9IFVfTUFTSyhHX1VOSUNPREVf
REFTSF9QVU5DVFVBVElPTiksCi0gICAgUHVuY3R1YXRpb25fT3BlbiA9IFVfTUFTSyhHX1VOSUNP
REVfT1BFTl9QVU5DVFVBVElPTiksCi0gICAgUHVuY3R1YXRpb25fQ2xvc2UgPSBVX01BU0soR19V
TklDT0RFX0NMT1NFX1BVTkNUVUFUSU9OKSwKLSAgICBQdW5jdHVhdGlvbl9Db25uZWN0b3IgPSBV
X01BU0soR19VTklDT0RFX0NPTk5FQ1RfUFVOQ1RVQVRJT04pLAotICAgIFB1bmN0dWF0aW9uX090
aGVyID0gVV9NQVNLKEdfVU5JQ09ERV9PVEhFUl9QVU5DVFVBVElPTiksCi0KLSAgICBTeW1ib2xf
TWF0aCA9IFVfTUFTSyhHX1VOSUNPREVfTUFUSF9TWU1CT0wpLAotICAgIFN5bWJvbF9DdXJyZW5j
eSA9IFVfTUFTSyhHX1VOSUNPREVfQ1VSUkVOQ1lfU1lNQk9MKSwKLSAgICBTeW1ib2xfTW9kaWZp
ZXIgPSBVX01BU0soR19VTklDT0RFX01PRElGSUVSX1NZTUJPTCksCi0gICAgU3ltYm9sX090aGVy
ID0gVV9NQVNLKEdfVU5JQ09ERV9PVEhFUl9TWU1CT0wpLAotCi0gICAgUHVuY3R1YXRpb25fSW5p
dGlhbFF1b3RlID0gVV9NQVNLKEdfVU5JQ09ERV9JTklUSUFMX1BVTkNUVUFUSU9OKSwKLSAgICBQ
dW5jdHVhdGlvbl9GaW5hbFF1b3RlID0gVV9NQVNLKEdfVU5JQ09ERV9GSU5BTF9QVU5DVFVBVElP
TikKLX07Ci0KLVVDaGFyMzIgZm9sZENhc2UoVUNoYXIzMik7Ci0KLWludCBmb2xkQ2FzZShVQ2hh
ciogcmVzdWx0LCBpbnQgcmVzdWx0TGVuZ3RoLCBjb25zdCBVQ2hhciogc3JjLCBpbnQgc3JjTGVu
Z3RoLCBib29sKiBlcnJvcik7Ci0KLWludCB0b0xvd2VyKFVDaGFyKiByZXN1bHQsIGludCByZXN1
bHRMZW5ndGgsIGNvbnN0IFVDaGFyKiBzcmMsIGludCBzcmNMZW5ndGgsIGJvb2wqIGVycm9yKTsK
LQotaW5saW5lIFVDaGFyMzIgdG9Mb3dlcihVQ2hhcjMyIGMpCi17Ci0gICAgcmV0dXJuIGdfdW5p
Y2hhcl90b2xvd2VyKGMpOwotfQotCi1pbmxpbmUgVUNoYXIzMiB0b1VwcGVyKFVDaGFyMzIgYykK
LXsKLSAgICByZXR1cm4gZ191bmljaGFyX3RvdXBwZXIoYyk7Ci19Ci0KLWludCB0b1VwcGVyKFVD
aGFyKiByZXN1bHQsIGludCByZXN1bHRMZW5ndGgsIGNvbnN0IFVDaGFyKiBzcmMsIGludCBzcmNM
ZW5ndGgsIGJvb2wqIGVycm9yKTsKLQotaW5saW5lIFVDaGFyMzIgdG9UaXRsZUNhc2UoVUNoYXIz
MiBjKQotewotICAgIHJldHVybiBnX3VuaWNoYXJfdG90aXRsZShjKTsKLX0KLQotaW5saW5lIGJv
b2wgaXNBcmFiaWNDaGFyKFVDaGFyMzIgYykKLXsKLSAgICByZXR1cm4gYyA+PSAweDA2MDAgJiYg
YyA8PSAweDA2RkY7Ci19Ci0KLWlubGluZSBib29sIGlzQWxwaGFudW1lcmljKFVDaGFyMzIgYykK
LXsKLSAgICByZXR1cm4gZ191bmljaGFyX2lzYWxudW0oYyk7Ci19Ci0KLWlubGluZSBib29sIGlz
Rm9ybWF0Q2hhcihVQ2hhcjMyIGMpCi17Ci0gICAgcmV0dXJuIGdfdW5pY2hhcl90eXBlKGMpID09
IEdfVU5JQ09ERV9GT1JNQVQ7Ci19Ci0KLWlubGluZSBib29sIGlzU2VwYXJhdG9yU3BhY2UoVUNo
YXIzMiBjKQotewotICAgIHJldHVybiBnX3VuaWNoYXJfdHlwZShjKSA9PSBHX1VOSUNPREVfU1BB
Q0VfU0VQQVJBVE9SOwotfQotCi1pbmxpbmUgYm9vbCBpc1ByaW50YWJsZUNoYXIoVUNoYXIzMiBj
KQotewotICAgIHJldHVybiBnX3VuaWNoYXJfaXNwcmludChjKTsKLX0KLQotaW5saW5lIGJvb2wg
aXNEaWdpdChVQ2hhcjMyIGMpCi17Ci0gICAgcmV0dXJuIGdfdW5pY2hhcl9pc2RpZ2l0KGMpOwot
fQotCi1pbmxpbmUgYm9vbCBpc1B1bmN0KFVDaGFyMzIgYykKLXsKLSAgICByZXR1cm4gZ191bmlj
aGFyX2lzcHVuY3QoYyk7Ci19Ci0KLWlubGluZSBib29sIGhhc0xpbmVCcmVha2luZ1Byb3BlcnR5
Q29tcGxleENvbnRleHQoVUNoYXIzMiBjKQotewotICAgIC8vIEZJWE1FCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1pbmxpbmUgVUNoYXIzMiBtaXJyb3JlZENoYXIoVUNoYXIzMiBjKQotewotICAg
IGd1bmljaGFyIG1pcnJvciA9IDA7Ci0gICAgZ191bmljaGFyX2dldF9taXJyb3JfY2hhcihjLCAm
bWlycm9yKTsKLSAgICByZXR1cm4gbWlycm9yOwotfQotCi1pbmxpbmUgQ2hhckNhdGVnb3J5IGNh
dGVnb3J5KFVDaGFyMzIgYykKLXsKLSAgICBpZiAoYyA+IDB4ZmZmZikKLSAgICAgICAgcmV0dXJu
IE5vQ2F0ZWdvcnk7Ci0KLSAgICByZXR1cm4gKENoYXJDYXRlZ29yeSkgVV9NQVNLKGdfdW5pY2hh
cl90eXBlKGMpKTsKLX0KLQotRGlyZWN0aW9uIGRpcmVjdGlvbihVQ2hhcjMyKTsKLQotaW5saW5l
IGJvb2wgaXNMb3dlcihVQ2hhcjMyIGMpCi17Ci0gICAgcmV0dXJuIGdfdW5pY2hhcl9pc2xvd2Vy
KGMpOwotfQotCi1pbmxpbmUgdWludDhfdCBjb21iaW5pbmdDbGFzcyhVQ2hhcjMyIGMpCi17Ci0g
ICAgLy8gRklYTUUKLSAgICAvLyByZXR1cm4gZ191bmljaGFyX2NvbWJpbmluZ19jbGFzcyhjKTsK
LSAgICByZXR1cm4gMDsKLX0KLQotaW5saW5lIERlY29tcG9zaXRpb25UeXBlIGRlY29tcG9zaXRp
b25UeXBlKFVDaGFyMzIgYykKLXsKLSAgICAvLyBGSVhNRQotICAgIHJldHVybiBEZWNvbXBvc2l0
aW9uTm9uZTsKLX0KLQotaW50IHVtZW1jYXNlY21wKGNvbnN0IFVDaGFyKiwgY29uc3QgVUNoYXIq
LCBpbnQgbGVuKTsKLQotfSAvLyBuYW1lc3BhY2UgVW5pY29kZQotCi19IC8vIG5hbWVzcGFjZSBX
VEYKLQotI2VuZGlmIC8vIFVTRShHTElCX1VOSUNPREUpCi0KLSNlbmRpZiAvLyBVbmljb2RlR2xp
Yl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBjNWVkYTViZDE5YmY3NTZmMDQz
MDY3OGNhYmI2NDkxOTIxYjM4MmNjLi43ZjAzNzNmNDdlYTA5NGMwNTQ5ZGM4MDRlZmIyODU3ZTM5
YjcwYWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTU5NzksNiArNTk3OSw3
IEBAIHdlYmNvcmVfcGxhdGZvcm1fc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU3lzdGVtVGltZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2VuY2hhbnQv
VGV4dENoZWNrZXJFbmNoYW50LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZW5j
aGFudC9UZXh0Q2hlY2tlckVuY2hhbnQuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvckludGVybmFsSUNVR3RrLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9CaWRpQ29udGV4dC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvQmlkaUNvbnRleHQuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9CaWRpUmVzb2x2ZXIuaCBcCkBAIC02MDA5LDYgKzYwMTAsOCBAQCB3ZWJjb3JlX3BsYXRmb3Jt
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJvdW5kYXJp
ZXMuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCb3VuZGFyaWVzLmgg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3IuY3BwIFwK
KwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySUNVLmNwcCBc
CisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0QnJlYWtJdGVyYXRvckludGVybmFs
SUNVLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3Iu
aCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q2hlY2tlckNsaWVudC5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDaGVja2luZy5oIFwKQEAgLTYwMjMs
NiArNjAyNiw4IEBAIHdlYmNvcmVfcGxhdGZvcm1fc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNVVEYxNi5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRDb2RlY1VURjguY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L1RleHRDb2RlY1VURjguaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
Q29kZWNJQ1UuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lD
VS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHREaXJlY3Rpb24uaCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZ0RldGVjdG9yLmggXApAQCAtNjI2NSwy
OCArNjI3MCw2IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvT3BlbkdMU2hpbXMuaAogZW5kaWYgIyBFTkQgVVNFX0dMRVMyCiAKLSMgLS0t
LQotIyBpY3UgdW5pY29kZSBiYWNrZW5kCi0jIC0tLS0KLWlmIFVTRV9JQ1VfVU5JQ09ERQotd2Vi
Y29yZV9zb3VyY2VzICs9IFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2Rl
Y0lDVS5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmgg
XAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3Bw
IFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRCcmVha0l0ZXJhdG9ySW50ZXJu
YWxJQ1UuaCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4dEJyZWFrSXRl
cmF0b3JJbnRlcm5hbElDVUd0ay5jcHAKLWVuZGlmCi0KLSMgLS0tLQotIyBnbGliIHVuaWNvZGUg
YmFja2VuZAotIyAtLS0tCi1pZiBVU0VfR0xJQl9VTklDT0RFCi13ZWJjb3JlX3NvdXJjZXMgKz0g
XAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5jcHAgXAot
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5oIFwKLQlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0QnJlYWtJdGVyYXRvckd0ay5jcHAKLWVu
ZGlmCi0KIGlmIFVTRV9HU1RSRUFNRVIKIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3Bw
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRCcmVh
a0l0ZXJhdG9yR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRC
cmVha0l0ZXJhdG9yR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjMzMjU1
ZGE1ZWY2ZjExY2E5ODM4YmYyNzIxZDU0N2EyOGU4ODE4MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0
ay9UZXh0QnJlYWtJdGVyYXRvckd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MDUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBMYXJzIEtub2xsIDxsYXJzQHRyb2xsdGVjaC5j
b20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDA4IErDvHJnIEJpbGxldGVyIDxqQGJpdHJvbi5jaD4KLSAq
IENvcHlyaWdodCAoQykgMjAwOCBEb21pbmlrIFLDtnR0c2NoZXMgPGRvbWluaWsucm9ldHRzY2hl
c0BhY2Nlc3MtY29tcGFueS5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4K
LSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvci5oIgot
Ci0jaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KLSNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRy
Lmg+Ci0jaW5jbHVkZSA8cGFuZ28vcGFuZ28uaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdURjsKLXVz
aW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLSNkZWZpbmUgVVRGOF9JU19TVVJST0dBVEUoY2hhcmFjdGVy
KSAoY2hhcmFjdGVyID49IDB4MTAwMDAgJiYgY2hhcmFjdGVyIDw9IDB4MTBGRkZGKQotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENoYXJhY3Rlckl0ZXJhdG9yIHsKLXB1YmxpYzoKLSAg
ICBib29sIHNldFRleHQoY29uc3QgVUNoYXIqIHN0cmluZywgaW50IGxlbmd0aCk7Ci0gICAgY29u
c3QgZ2NoYXIqIGdldFRleHQoKSB7IHJldHVybiBtX3V0ZjguZ2V0KCk7IH0KLSAgICBpbnQgZ2V0
TGVuZ3RoKCkgeyByZXR1cm4gbV9sZW5ndGg7IH0KLSAgICBnbG9uZyBnZXRTaXplKCkgeyByZXR1
cm4gbV9zaXplOyB9Ci0gICAgdm9pZCBzZXRJbmRleChpbnQgaW5kZXgpOwotICAgIGludCBnZXRJ
bmRleCgpIHsgcmV0dXJuIG1faW5kZXg7IH0KLSAgICB2b2lkIHNldFVURjE2SW5kZXgoaW50IGlu
ZGV4KTsKLSAgICBpbnQgZ2V0VVRGMTZJbmRleCgpIHsgcmV0dXJuIG1fdXRmMTZJbmRleDsgfQot
ICAgIGludCBnZXRVVEYxNkxlbmd0aCgpIHsgcmV0dXJuIG1fdXRmMTZMZW5ndGg7IH0KLSAgICBp
bnQgZmlyc3QoKTsKLSAgICBpbnQgbGFzdCgpOwotICAgIGludCBuZXh0KCk7Ci0gICAgaW50IHBy
ZXZpb3VzKCk7Ci1wcml2YXRlOgotICAgIGludCBjaGFyYWN0ZXJTaXplKGludCBpbmRleCk7Ci0K
LSAgICBHT3duUHRyPGNoYXI+IG1fdXRmODsKLSAgICBpbnQgbV9sZW5ndGg7Ci0gICAgbG9uZyBt
X3NpemU7Ci0gICAgaW50IG1faW5kZXg7Ci0gICAgaW50IG1fdXRmMTZJbmRleDsKLSAgICBpbnQg
bV91dGYxNkxlbmd0aDsKLX07Ci0KLWludCBDaGFyYWN0ZXJJdGVyYXRvcjo6Y2hhcmFjdGVyU2l6
ZShpbnQgaW5kZXgpCi17Ci0gICAgaWYgKGluZGV4ID09IG1fbGVuZ3RoIHx8IGluZGV4IDwgMCkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKG1fbGVuZ3RoID09IG1fdXRmMTZMZW5ndGgpCi0g
ICAgICAgIHJldHVybiAxOwotCi0gICAgZ2NoYXIqIGluZGV4UHRyID0gZ191dGY4X29mZnNldF90
b19wb2ludGVyKG1fdXRmOC5nZXQoKSwgaW5kZXgpOwotICAgIGd1bmljaGFyIGNoYXJhY3RlciA9
IGdfdXRmOF9nZXRfY2hhcihpbmRleFB0cik7Ci0gICAgcmV0dXJuIFVURjhfSVNfU1VSUk9HQVRF
KGNoYXJhY3RlcikgPyAyIDogMTsKLX0KLQotYm9vbCBDaGFyYWN0ZXJJdGVyYXRvcjo6c2V0VGV4
dChjb25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoKQotewotICAgIGxvbmcgdXRmOFNpemUg
PSAwOwotICAgIG1fdXRmOC5zZXQoZ191dGYxNl90b191dGY4KHN0cmluZywgbGVuZ3RoLCAwLCAm
dXRmOFNpemUsIDApKTsKLSAgICBpZiAoIXV0ZjhTaXplKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBtX3V0ZjE2TGVuZ3RoID0gbGVuZ3RoOwotICAgIG1fbGVuZ3RoID0gZ191dGY4X3N0
cmxlbihtX3V0ZjguZ2V0KCksIHV0ZjhTaXplKTsKLSAgICBtX3NpemUgPSB1dGY4U2l6ZTsKLSAg
ICBtX2luZGV4ID0gMDsKLSAgICBtX3V0ZjE2SW5kZXggPSAwOwotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXZvaWQgQ2hhcmFjdGVySXRlcmF0b3I6OnNldEluZGV4KGludCBpbmRleCkKLXsKLSAg
ICBpZiAoaW5kZXggPT0gbV9pbmRleCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChpbmRleCA8
PSAwKQotICAgICAgICBtX2luZGV4ID0gbV91dGYxNkluZGV4ID0gMDsKLSAgICBlbHNlIGlmIChp
bmRleCA+PSBtX2xlbmd0aCkgewotICAgICAgICBtX2luZGV4ID0gbV9sZW5ndGg7Ci0gICAgICAg
IG1fdXRmMTZJbmRleCA9IG1fdXRmMTZMZW5ndGg7Ci0gICAgfSBlbHNlIGlmIChtX2xlbmd0aCA9
PSBtX3V0ZjE2TGVuZ3RoKQotICAgICAgICBtX2luZGV4ID0gbV91dGYxNkluZGV4ID0gaW5kZXg7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIG1faW5kZXggPSBpbmRleDsKLSAgICAgICAgaW50IHV0ZjE2
SW5kZXggPSAwOwotICAgICAgICBpbnQgdXRmOEluZGV4ID0gMDsKLSAgICAgICAgd2hpbGUgKHV0
ZjhJbmRleCA8IGluZGV4KSB7Ci0gICAgICAgICAgICB1dGYxNkluZGV4ICs9IGNoYXJhY3RlclNp
emUodXRmOEluZGV4KTsKLSAgICAgICAgICAgIHV0ZjhJbmRleCsrOwotICAgICAgICB9Ci0gICAg
ICAgIG1fdXRmMTZJbmRleCA9IHV0ZjE2SW5kZXg7Ci0gICAgfQotfQotCi12b2lkIENoYXJhY3Rl
ckl0ZXJhdG9yOjpzZXRVVEYxNkluZGV4KGludCBpbmRleCkKLXsKLSAgICBpZiAoaW5kZXggPT0g
bV91dGYxNkluZGV4KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGluZGV4IDw9IDApCi0gICAg
ICAgIG1fdXRmMTZJbmRleCA9IG1faW5kZXggPSAwOwotICAgIGVsc2UgaWYgKGluZGV4ID49IG1f
dXRmMTZMZW5ndGgpIHsKLSAgICAgICAgbV91dGYxNkluZGV4ID0gbV91dGYxNkxlbmd0aDsKLSAg
ICAgICAgbV9pbmRleCA9IG1fbGVuZ3RoOwotICAgIH0gZWxzZSBpZiAobV9sZW5ndGggPT0gbV91
dGYxNkxlbmd0aCkKLSAgICAgICAgbV91dGYxNkluZGV4ID0gbV9pbmRleCA9IGluZGV4OwotICAg
IGVsc2UgewotICAgICAgICBtX3V0ZjE2SW5kZXggPSBpbmRleDsKLSAgICAgICAgaW50IHV0ZjE2
SW5kZXggPSAwOwotICAgICAgICBpbnQgdXRmOEluZGV4ID0gMDsKLSAgICAgICAgd2hpbGUgKHV0
ZjE2SW5kZXggPCBpbmRleCkgewotICAgICAgICAgICAgdXRmMTZJbmRleCArPSBjaGFyYWN0ZXJT
aXplKHV0ZjhJbmRleCk7Ci0gICAgICAgICAgICB1dGY4SW5kZXgrKzsKLSAgICAgICAgfQotICAg
ICAgICBtX2luZGV4ID0gdXRmOEluZGV4OwotICAgIH0KLX0KLQotaW50IENoYXJhY3Rlckl0ZXJh
dG9yOjpmaXJzdCgpCi17Ci0gICAgbV9pbmRleCA9IG1fdXRmMTZJbmRleCA9IDA7Ci0gICAgcmV0
dXJuIG1faW5kZXg7Ci19Ci0KLWludCBDaGFyYWN0ZXJJdGVyYXRvcjo6bGFzdCgpCi17Ci0gICAg
bV9pbmRleCA9IG1fbGVuZ3RoOwotICAgIG1fdXRmMTZJbmRleCA9IG1fdXRmMTZMZW5ndGg7Ci0g
ICAgcmV0dXJuIG1faW5kZXg7Ci19Ci0KLWludCBDaGFyYWN0ZXJJdGVyYXRvcjo6bmV4dCgpCi17
Ci0gICAgaW50IG5leHQgPSBtX2luZGV4ICsgMTsKLQotICAgIGlmIChuZXh0IDw9IG1fbGVuZ3Ro
KSB7Ci0gICAgICAgIG1fdXRmMTZJbmRleCA9IG1pbihtX3V0ZjE2SW5kZXggKyBjaGFyYWN0ZXJT
aXplKG1faW5kZXgpLCBtX3V0ZjE2TGVuZ3RoKTsKLSAgICAgICAgbV9pbmRleCA9IG5leHQ7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgbV9pbmRleCA9IFRleHRCcmVha0RvbmU7Ci0gICAgICAgIG1f
dXRmMTZJbmRleCA9IFRleHRCcmVha0RvbmU7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1faW5kZXg7
Ci19Ci0KLWludCBDaGFyYWN0ZXJJdGVyYXRvcjo6cHJldmlvdXMoKQotewotICAgIGludCBwcmV2
aW91cyA9IG1faW5kZXggLSAxOwotCi0gICAgaWYgKHByZXZpb3VzID49IDApIHsKLSAgICAgICAg
bV91dGYxNkluZGV4ID0gbWF4KG1fdXRmMTZJbmRleCAtIGNoYXJhY3RlclNpemUocHJldmlvdXMp
LCAwKTsKLSAgICAgICAgbV9pbmRleCA9IHByZXZpb3VzOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IG1faW5kZXggPSBUZXh0QnJlYWtEb25lOwotICAgICAgICBtX3V0ZjE2SW5kZXggPSBUZXh0QnJl
YWtEb25lOwotICAgIH0KLQotICAgIHJldHVybiBtX2luZGV4OwotfQotCi1lbnVtIFVCcmVha0l0
ZXJhdG9yVHlwZSB7Ci0gICAgVUJSS19DSEFSQUNURVIsCi0gICAgVUJSS19XT1JELAotICAgIFVC
UktfTElORSwKLSAgICBVQlJLX1NFTlRFTkNFCi19OwotCi1jbGFzcyBUZXh0QnJlYWtJdGVyYXRv
ciB7Ci1wdWJsaWM6Ci0gICAgVUJyZWFrSXRlcmF0b3JUeXBlIG1fdHlwZTsKLSAgICBQYW5nb0xv
Z0F0dHIqIG1fbG9nQXR0cnM7Ci0gICAgQ2hhcmFjdGVySXRlcmF0b3IgbV9jaGFySXRlcmF0b3I7
Ci19OwotCi1zdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHNldFVwSXRlcmF0b3IoYm9vbCYgY3Jl
YXRlZEl0ZXJhdG9yLCBUZXh0QnJlYWtJdGVyYXRvciomIGl0ZXJhdG9yLAotICAgIFVCcmVha0l0
ZXJhdG9yVHlwZSB0eXBlLCBjb25zdCBVQ2hhciogc3RyaW5nLCBpbnQgbGVuZ3RoKQotewotICAg
IGlmICghc3RyaW5nKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghY3JlYXRlZEl0ZXJh
dG9yKSB7Ci0gICAgICAgIGl0ZXJhdG9yID0gbmV3IFRleHRCcmVha0l0ZXJhdG9yKCk7Ci0gICAg
ICAgIGNyZWF0ZWRJdGVyYXRvciA9IHRydWU7Ci0gICAgfQotICAgIGlmICghaXRlcmF0b3IpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFpdGVyYXRvci0+bV9jaGFySXRlcmF0b3Iuc2V0
VGV4dChzdHJpbmcsIGxlbmd0aCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaW50IGNoYXJM
ZW5ndGggPSBpdGVyYXRvci0+bV9jaGFySXRlcmF0b3IuZ2V0TGVuZ3RoKCk7Ci0KLSAgICBpdGVy
YXRvci0+bV90eXBlID0gdHlwZTsKLSAgICBpZiAoY3JlYXRlZEl0ZXJhdG9yKQotICAgICAgICBn
X2ZyZWUoaXRlcmF0b3ItPm1fbG9nQXR0cnMpOwotICAgIGl0ZXJhdG9yLT5tX2xvZ0F0dHJzID0g
Z19uZXcwKFBhbmdvTG9nQXR0ciwgY2hhckxlbmd0aCArIDEpOwotICAgIHBhbmdvX2dldF9sb2df
YXR0cnMoaXRlcmF0b3ItPm1fY2hhckl0ZXJhdG9yLmdldFRleHQoKSwgaXRlcmF0b3ItPm1fY2hh
ckl0ZXJhdG9yLmdldFNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIC0xLCAwLCBpdGVy
YXRvci0+bV9sb2dBdHRycywgY2hhckxlbmd0aCArIDEpOwotCi0gICAgcmV0dXJuIGl0ZXJhdG9y
OwotfQotCi1zdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIG5vblNoYXJlZENoYXJhY3RlckJyZWFr
SXRlcmF0b3I7Ci0KLU5vblNoYXJlZENoYXJhY3RlckJyZWFrSXRlcmF0b3I6Ok5vblNoYXJlZENo
YXJhY3RlckJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqIGJ1ZmZlciwgaW50IGxlbmd0aCkKLXsK
LSAgICBtX2l0ZXJhdG9yID0gbm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcjsKLSAgICBi
b29sIGNyZWF0ZWRJdGVyYXRvciA9IG1faXRlcmF0b3IgJiYgd2Vha0NvbXBhcmVBbmRTd2FwKHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciks
IG1faXRlcmF0b3IsIDApOwotICAgIG1faXRlcmF0b3IgPSBzZXRVcEl0ZXJhdG9yKGNyZWF0ZWRJ
dGVyYXRvciwgbV9pdGVyYXRvciwgVUJSS19DSEFSQUNURVIsIGJ1ZmZlciwgbGVuZ3RoKTsKLX0K
LQotTm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvcjo6fk5vblNoYXJlZENoYXJhY3RlckJy
ZWFrSXRlcmF0b3IoKQotewotICAgIGlmICghd2Vha0NvbXBhcmVBbmRTd2FwKHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCoqPigmbm9uU2hhcmVkQ2hhcmFjdGVyQnJlYWtJdGVyYXRvciksIDAsIG1faXRl
cmF0b3IpKQotICAgICAgICBkZWxldGUgbV9pdGVyYXRvcjsKLX0KLQotVGV4dEJyZWFrSXRlcmF0
b3IqIGN1cnNvck1vdmVtZW50SXRlcmF0b3IoY29uc3QgVUNoYXIqIHN0cmluZywgaW50IGxlbmd0
aCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyBjbG9zZXIgaW5zcGVjdGlvbiB0byBhY2hp
ZXZlIGJlaGF2aW91ciBpZGVudGljYWwgdG8gdGhlIElDVSB2ZXJzaW9uLgotICAgIHN0YXRpYyBi
b29sIGNyZWF0ZWRDdXJzb3JNb3ZlbWVudEl0ZXJhdG9yID0gZmFsc2U7Ci0gICAgc3RhdGljIFRl
eHRCcmVha0l0ZXJhdG9yKiBzdGF0aWNDdXJzb3JNb3ZlbWVudEl0ZXJhdG9yOwotICAgIHJldHVy
biBzZXRVcEl0ZXJhdG9yKGNyZWF0ZWRDdXJzb3JNb3ZlbWVudEl0ZXJhdG9yLCBzdGF0aWNDdXJz
b3JNb3ZlbWVudEl0ZXJhdG9yLCBVQlJLX0NIQVJBQ1RFUiwgc3RyaW5nLCBsZW5ndGgpOwotfQot
Ci1UZXh0QnJlYWtJdGVyYXRvciogd29yZEJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqIHN0cmlu
ZywgaW50IGxlbmd0aCkKLXsKLSAgICBzdGF0aWMgYm9vbCBjcmVhdGVkV29yZEJyZWFrSXRlcmF0
b3IgPSBmYWxzZTsKLSAgICBzdGF0aWMgVGV4dEJyZWFrSXRlcmF0b3IqIHN0YXRpY1dvcmRCcmVh
a0l0ZXJhdG9yOwotICAgIHJldHVybiBzZXRVcEl0ZXJhdG9yKGNyZWF0ZWRXb3JkQnJlYWtJdGVy
YXRvciwgc3RhdGljV29yZEJyZWFrSXRlcmF0b3IsIFVCUktfV09SRCwgc3RyaW5nLCBsZW5ndGgp
OwotfQotCi1zdGF0aWMgYm9vbCBjcmVhdGVkTGluZUJyZWFrSXRlcmF0b3IgPSBmYWxzZTsKLXN0
YXRpYyBUZXh0QnJlYWtJdGVyYXRvciogc3RhdGljTGluZUJyZWFrSXRlcmF0b3I7Ci0KLVRleHRC
cmVha0l0ZXJhdG9yKiBhY3F1aXJlTGluZUJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqIHN0cmlu
ZywgaW50IGxlbmd0aCwgY29uc3QgQXRvbWljU3RyaW5nJikKLXsKLSAgICBUZXh0QnJlYWtJdGVy
YXRvciogbGluZUJyZWFrSXRlcmF0b3IgPSAwOwotICAgIGlmICghY3JlYXRlZExpbmVCcmVha0l0
ZXJhdG9yIHx8IHN0YXRpY0xpbmVCcmVha0l0ZXJhdG9yKSB7Ci0gICAgICAgIHNldFVwSXRlcmF0
b3IoY3JlYXRlZExpbmVCcmVha0l0ZXJhdG9yLCBzdGF0aWNMaW5lQnJlYWtJdGVyYXRvciwgVUJS
S19MSU5FLCBzdHJpbmcsIGxlbmd0aCk7Ci0gICAgICAgIHN3YXAoc3RhdGljTGluZUJyZWFrSXRl
cmF0b3IsIGxpbmVCcmVha0l0ZXJhdG9yKTsKLSAgICB9Ci0KLSAgICBpZiAoIWxpbmVCcmVha0l0
ZXJhdG9yKSB7Ci0gICAgICAgIGJvb2wgY3JlYXRlZE5ld0xpbmVCcmVha0l0ZXJhdG9yID0gZmFs
c2U7Ci0gICAgICAgIHNldFVwSXRlcmF0b3IoY3JlYXRlZE5ld0xpbmVCcmVha0l0ZXJhdG9yLCBs
aW5lQnJlYWtJdGVyYXRvciwgVUJSS19MSU5FLCBzdHJpbmcsIGxlbmd0aCk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGxpbmVCcmVha0l0ZXJhdG9yOwotfQotCi12b2lkIHJlbGVhc2VMaW5lQnJlYWtJ
dGVyYXRvcihUZXh0QnJlYWtJdGVyYXRvciogaXRlcmF0b3IpCi17Ci0gICAgQVNTRVJUKGNyZWF0
ZWRMaW5lQnJlYWtJdGVyYXRvcik7Ci0gICAgQVNTRVJUKGl0ZXJhdG9yKTsKLQotICAgIGlmICgh
c3RhdGljTGluZUJyZWFrSXRlcmF0b3IpCi0gICAgICAgIHN0YXRpY0xpbmVCcmVha0l0ZXJhdG9y
ID0gaXRlcmF0b3I7Ci0gICAgZWxzZQotICAgICAgICBkZWxldGUgaXRlcmF0b3I7Ci19Ci0KLVRl
eHRCcmVha0l0ZXJhdG9yKiBzZW50ZW5jZUJyZWFrSXRlcmF0b3IoY29uc3QgVUNoYXIqIHN0cmlu
ZywgaW50IGxlbmd0aCkKLXsKLSAgICBzdGF0aWMgYm9vbCBjcmVhdGVkU2VudGVuY2VCcmVha0l0
ZXJhdG9yID0gZmFsc2U7Ci0gICAgc3RhdGljIFRleHRCcmVha0l0ZXJhdG9yKiBzdGF0aWNTZW50
ZW5jZUJyZWFrSXRlcmF0b3I7Ci0gICAgcmV0dXJuIHNldFVwSXRlcmF0b3IoY3JlYXRlZFNlbnRl
bmNlQnJlYWtJdGVyYXRvciwgc3RhdGljU2VudGVuY2VCcmVha0l0ZXJhdG9yLCBVQlJLX1NFTlRF
TkNFLCBzdHJpbmcsIGxlbmd0aCk7Ci19Ci0KLWludCB0ZXh0QnJlYWtGaXJzdChUZXh0QnJlYWtJ
dGVyYXRvciogaXRlcmF0b3IpCi17Ci0gICAgaXRlcmF0b3ItPm1fY2hhckl0ZXJhdG9yLmZpcnN0
KCk7Ci0gICAgcmV0dXJuIGl0ZXJhdG9yLT5tX2NoYXJJdGVyYXRvci5nZXRVVEYxNkluZGV4KCk7
Ci19Ci0KLWludCB0ZXh0QnJlYWtMYXN0KFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvcikKLXsK
LSAgICAvLyBUZXh0QnJlYWtMYXN0IGlzIG5vdCBtZWFudCB0byBmaW5kIGp1c3QgYW55IGJyZWFr
IGFjY29yZGluZyB0byBiaS0+bV90eXBlIAotICAgIC8vIGJ1dCByZWFsbHkgdGhlIG9uZSBuZWFy
IHRoZSBsYXN0IGNoYXJhY3Rlci4KLSAgICAvLyAoY21wIElDVSBkb2N1bWVudGF0aW9uIGZvciB1
YnJrX2ZpcnN0IGFuZCB1YnJrX2xhc3QpCi0gICAgLy8gRnJvbSBJQ1UgZG9jcyBmb3IgdWJya19s
YXN0OgotICAgIC8vICJEZXRlcm1pbmUgdGhlIGluZGV4IGltbWVkaWF0ZWx5IGJleW9uZCB0aGUg
bGFzdCBjaGFyYWN0ZXIgaW4gdGhlIHRleHQgYmVpbmcgc2Nhbm5lZC4iIAotCi0gICAgLy8gU28g
d2Ugc2hvdWxkIGFkdmFuY2Ugb3IgdHJhdmVyc2UgYmFjayBiYXNlZCBvbiBiaS0+bV9sb2dBdHRy
cyBjdXJzb3IgcG9zaXRpb25zLgotICAgIC8vIElmIGxhc3QgY2hhcmFjdGVyIHBvc2l0aW9uIGlu
IHRoZSBvcmlnaW5hbCBzdHJpbmcgaXMgYSB3aGl0ZXNwYWNlLAotICAgIC8vIHRyYXZlcnNlIHRv
IHRoZSBsZWZ0IHVudGlsIHRoZSBmaXJzdCBub24td2hpdGUgY2hhcmFjdGVyIHBvc2l0aW9uIGlz
IGZvdW5kCi0gICAgLy8gYW5kIHJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IHdoaXRl
LXNwYWNlIGNoYXIgYWZ0ZXIgdGhpcyBvbmUuCi0gICAgLy8gT3RoZXJ3aXNlIHJldHVybiBtX2xl
bmd0aCwgYXMgInRoZSBmaXJzdCBjaGFyYWN0ZXIgYmV5b25kIHRoZSBsYXN0IiBpcyBvdXRzaWRl
IG91ciBzdHJpbmcuCi0gICAgCi0gICAgYm9vbCB3aGl0ZVNwYWNlQXRUaGVFbmQgPSB0cnVlOwot
ICAgIGludCBuZXh0V2hpdGVTcGFjZVBvcyA9IGl0ZXJhdG9yLT5tX2NoYXJJdGVyYXRvci5nZXRM
ZW5ndGgoKTsKLQotICAgIGludCBwb3MgPSBpdGVyYXRvci0+bV9jaGFySXRlcmF0b3IubGFzdCgp
OwotICAgIHdoaWxlIChwb3MgPj0gMCAmJiB3aGl0ZVNwYWNlQXRUaGVFbmQpIHsKLSAgICAgICAg
aWYgKGl0ZXJhdG9yLT5tX2xvZ0F0dHJzW3Bvc10uaXNfY3Vyc29yX3Bvc2l0aW9uKSB7Ci0gICAg
ICAgICAgICBpZiAod2hpdGVTcGFjZUF0VGhlRW5kID0gaXRlcmF0b3ItPm1fbG9nQXR0cnNbcG9z
XS5pc193aGl0ZSkKLSAgICAgICAgICAgICAgICBuZXh0V2hpdGVTcGFjZVBvcyA9IHBvczsKLSAg
ICAgICAgfQotICAgICAgICBwb3MgPSBpdGVyYXRvci0+bV9jaGFySXRlcmF0b3IucHJldmlvdXMo
KTsKLSAgICB9Ci0gICAgaXRlcmF0b3ItPm1fY2hhckl0ZXJhdG9yLnNldEluZGV4KG5leHRXaGl0
ZVNwYWNlUG9zKTsKLSAgICByZXR1cm4gaXRlcmF0b3ItPm1fY2hhckl0ZXJhdG9yLmdldFVURjE2
SW5kZXgoKTsKLX0KLQotaW50IHRleHRCcmVha05leHQoVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJh
dG9yKQotewotICAgIHdoaWxlIChpdGVyYXRvci0+bV9jaGFySXRlcmF0b3IubmV4dCgpICE9IFRl
eHRCcmVha0RvbmUpIHsKLSAgICAgICAgaW50IGluZGV4ID0gaXRlcmF0b3ItPm1fY2hhckl0ZXJh
dG9yLmdldEluZGV4KCk7Ci0KLSAgICAgICAgLy8gRklYTUU6IFVCUktfV09SRCBjYXNlOiBTaW5n
bGUgbXVsdGlieXRlIGNoYXJhY3RlcnMgKGkuZS4gd2hpdGUgc3BhY2UgYXJvdW5kIHRoZW0pLCBz
dWNoIGFzIHRoZSBldXJvIHN5bWJvbCDigqwsIAotICAgICAgICAvLyBhcmUgbm90IG1hcmtlZCBh
cyB3b3JkX3N0YXJ0ICYgd29yZF9lbmQgYXMgb3Bwb3NlZCB0byB0aGUgd2F5IElDVSBkb2VzIGl0
LgotICAgICAgICAvLyBUaGlzIGxlYWRzIHRvIC0gZm9yIGV4YW1wbGUgLSBkaWZmZXJlbnQgd29y
ZCBzZWxlY3Rpb24gYmVoYXZpb3VyIHdoZW4gcmlnaHQgY2xpY2tpbmcuCi0KLSAgICAgICAgaWYg
KChpdGVyYXRvci0+bV90eXBlID09IFVCUktfTElORSAmJiBpdGVyYXRvci0+bV9sb2dBdHRyc1tp
bmRleF0uaXNfbGluZV9icmVhaykKLSAgICAgICAgICAgIHx8IChpdGVyYXRvci0+bV90eXBlID09
IFVCUktfV09SRCAmJiAoaXRlcmF0b3ItPm1fbG9nQXR0cnNbaW5kZXhdLmlzX3dvcmRfc3RhcnQg
fHwgaXRlcmF0b3ItPm1fbG9nQXR0cnNbaW5kZXhdLmlzX3dvcmRfZW5kKSkKLSAgICAgICAgICAg
IHx8IChpdGVyYXRvci0+bV90eXBlID09IFVCUktfQ0hBUkFDVEVSICYmIGl0ZXJhdG9yLT5tX2xv
Z0F0dHJzW2luZGV4XS5pc19jdXJzb3JfcG9zaXRpb24pCi0gICAgICAgICAgICB8fCAoaXRlcmF0
b3ItPm1fdHlwZSA9PSBVQlJLX1NFTlRFTkNFICYmIGl0ZXJhdG9yLT5tX2xvZ0F0dHJzW2luZGV4
XS5pc19zZW50ZW5jZV9ib3VuZGFyeSkpIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfQotICAgIHJldHVybiBpdGVyYXRvci0+bV9jaGFySXRlcmF0b3IuZ2V0VVRGMTZJbmRl
eCgpOwotfQotCi1pbnQgdGV4dEJyZWFrUHJldmlvdXMoVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJh
dG9yKQotewotICAgIHdoaWxlIChpdGVyYXRvci0+bV9jaGFySXRlcmF0b3IucHJldmlvdXMoKSAh
PSBUZXh0QnJlYWtEb25lKSB7Ci0gICAgICAgIGludCBpbmRleCA9IGl0ZXJhdG9yLT5tX2NoYXJJ
dGVyYXRvci5nZXRJbmRleCgpOwotCi0gICAgICAgIGlmICgoaXRlcmF0b3ItPm1fdHlwZSA9PSBV
QlJLX0xJTkUgJiYgaXRlcmF0b3ItPm1fbG9nQXR0cnNbaW5kZXhdLmlzX2xpbmVfYnJlYWspCi0g
ICAgICAgICAgICB8fCAoaXRlcmF0b3ItPm1fdHlwZSA9PSBVQlJLX1dPUkQgJiYgKGl0ZXJhdG9y
LT5tX2xvZ0F0dHJzW2luZGV4XS5pc193b3JkX3N0YXJ0IHx8IGl0ZXJhdG9yLT5tX2xvZ0F0dHJz
W2luZGV4XS5pc193b3JkX2VuZCkpCi0gICAgICAgICAgICB8fCAoaXRlcmF0b3ItPm1fdHlwZSA9
PSBVQlJLX0NIQVJBQ1RFUiAmJiBpdGVyYXRvci0+bV9sb2dBdHRyc1tpbmRleF0uaXNfY3Vyc29y
X3Bvc2l0aW9uKQotICAgICAgICAgICAgfHwgKGl0ZXJhdG9yLT5tX3R5cGUgPT0gVUJSS19TRU5U
RU5DRSAmJiBpdGVyYXRvci0+bV9sb2dBdHRyc1tpbmRleF0uaXNfc2VudGVuY2VfYm91bmRhcnkp
KSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gaXRl
cmF0b3ItPm1fY2hhckl0ZXJhdG9yLmdldFVURjE2SW5kZXgoKTsKLX0KLQotaW50IHRleHRCcmVh
a1ByZWNlZGluZyhUZXh0QnJlYWtJdGVyYXRvciogaXRlcmF0b3IsIGludCBvZmZzZXQpCi17Ci0g
ICAgaWYgKG9mZnNldCA+IGl0ZXJhdG9yLT5tX2NoYXJJdGVyYXRvci5nZXRVVEYxNkxlbmd0aCgp
KQotICAgICAgICByZXR1cm4gVGV4dEJyZWFrRG9uZTsKLSAgICBpZiAob2Zmc2V0IDwgMCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgaXRlcmF0b3ItPm1fY2hhckl0ZXJhdG9yLnNldFVURjE2SW5k
ZXgob2Zmc2V0KTsKLSAgICByZXR1cm4gdGV4dEJyZWFrUHJldmlvdXMoaXRlcmF0b3IpOwotfQot
Ci1pbnQgdGV4dEJyZWFrRm9sbG93aW5nKFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvciwgaW50
IG9mZnNldCkKLXsKLSAgICBpZiAob2Zmc2V0ID4gaXRlcmF0b3ItPm1fY2hhckl0ZXJhdG9yLmdl
dFVURjE2TGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBUZXh0QnJlYWtEb25lOwotICAgIGlmIChv
ZmZzZXQgPCAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpdGVyYXRvci0+bV9jaGFySXRlcmF0
b3Iuc2V0VVRGMTZJbmRleChvZmZzZXQpOwotICAgIHJldHVybiB0ZXh0QnJlYWtOZXh0KGl0ZXJh
dG9yKTsKLX0KLQotaW50IHRleHRCcmVha0N1cnJlbnQoVGV4dEJyZWFrSXRlcmF0b3IqIGl0ZXJh
dG9yKQotewotICAgIHJldHVybiBpdGVyYXRvci0+bV9jaGFySXRlcmF0b3IuZ2V0VVRGMTZJbmRl
eCgpOwotfQotCi1ib29sIGlzVGV4dEJyZWFrKFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvciwg
aW50IG9mZnNldCkKLXsKLSAgICBpZiAoIW9mZnNldCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgaWYgKG9mZnNldCA+IGl0ZXJhdG9yLT5tX2NoYXJJdGVyYXRvci5nZXRVVEYxNkxlbmd0aCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpdGVyYXRvci0+bV9jaGFySXRlcmF0b3Iu
c2V0VVRGMTZJbmRleChvZmZzZXQpOwotCi0gICAgaW50IGluZGV4ID0gaXRlcmF0b3ItPm1fY2hh
ckl0ZXJhdG9yLmdldEluZGV4KCk7Ci0gICAgaXRlcmF0b3ItPm1fY2hhckl0ZXJhdG9yLnByZXZp
b3VzKCk7Ci0gICAgdGV4dEJyZWFrTmV4dChpdGVyYXRvcik7Ci0gICAgcmV0dXJuIGl0ZXJhdG9y
LT5tX2NoYXJJdGVyYXRvci5nZXRJbmRleCgpID09IGluZGV4OwotfQotCi1ib29sIGlzV29yZFRl
eHRCcmVhayhUZXh0QnJlYWtJdGVyYXRvciopCi17Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0
ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2d0ay9UZXh0Q29kZWNHdGsuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTMyZDk1YjQ1MTg2ZDc3NzA1MGQ3OTAz
MzRlMDg0OWVkNTVjYjAyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvZ3RrL1RleHRDb2RlY0d0ay5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw1NzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAbnlwb3AuY29tPgotICog
Q29weXJpZ2h0IChDKSAyMDA4IErDvHJnIEJpbGxldGVyIDxqQGJpdHJvbi5jaD4KLSAqIENvcHly
aWdodCAoQykgMjAwOSBEb21pbmlrIFLDtnR0c2NoZXMgPGRvbWluaWsucm9ldHRzY2hlc0BhY2Nl
c3MtY29tcGFueS5jb20+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJU
ZXh0Q29kZWNHdGsuaCIKLQotI2luY2x1ZGUgPGdpby9naW8uaD4KLSNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HT3duUHRyLmg+Ci0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLXVzaW5nIHN0ZDo6
bWluOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIFRleHRDb2RlYydzIGFwcGVuZE9taXR0
aW5nQk9NKCkgaXMgZ29uZSAoaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMzMzODAp
LiAKLS8vIFRoYXQncyB3aHkgd2UgbmVlZCB0byBhdm9pZCBnZW5lcmF0aW5nIGV4dHJhIEJPTSdz
IGZvciB0aGUgY29udmVyc2lvbiByZXN1bHQuCi0vLyBUaGlzIGNhbiBiZSBhY2hpZXZlZCBieSBz
cGVjaWZ5aW5nIHRoZSBVVEYtMTYgY29kZWNzJyBlbmRpYW5uZXNzIGV4cGxpY2l0bHkgd2hlbiBp
bml0aWFsaXppbmcgR0xpYi4KLQotI2lmIChHX0JZVEVfT1JERVIgPT0gR19CSUdfRU5ESUFOKQot
c3RhdGljIGNvbnN0IGdjaGFyKiBpbnRlcm5hbEVuY29kaW5nTmFtZSA9ICJVVEYtMTZCRSI7Ci0j
ZWxzZQotc3RhdGljIGNvbnN0IGdjaGFyKiBpbnRlcm5hbEVuY29kaW5nTmFtZSA9ICJVVEYtMTZM
RSI7Ci0jZW5kaWYKLQotCi1jb25zdCBzaXplX3QgQ29udmVyc2lvbkJ1ZmZlclNpemUgPSAxNjM4
NDsKLSAgICAKLQotc3RhdGljIFBhc3NPd25QdHI8VGV4dENvZGVjPiBuZXdUZXh0Q29kZWNHdGso
Y29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgY29uc3Qgdm9pZCopCi17Ci0gICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBUZXh0Q29kZWNHdGsoZW5jb2RpbmcpKTsKLX0KLQotc3RhdGljIGJvb2wg
aXNFbmNvZGluZ0F2YWlsYWJsZShjb25zdCBnY2hhciogZW5jb2RpbmdOYW1lKQotewotICAgIEdJ
Q29udiB0ZXN0ZXI7Ci0gICAgLy8gdGVzdCBkZWNvZGluZwotICAgIHRlc3RlciA9IGdfaWNvbnZf
b3BlbihpbnRlcm5hbEVuY29kaW5nTmFtZSwgZW5jb2RpbmdOYW1lKTsKLSAgICBpZiAodGVzdGVy
ID09IHJlaW50ZXJwcmV0X2Nhc3Q8R0lDb252PigtMSkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGdfaWNvbnZfY2xvc2UodGVzdGVyKTsKLSAgICAgICAg
Ly8gdGVzdCBlbmNvZGluZwotICAgICAgICB0ZXN0ZXIgPSBnX2ljb252X29wZW4oZW5jb2RpbmdO
YW1lLCBpbnRlcm5hbEVuY29kaW5nTmFtZSk7Ci0gICAgICAgIGlmICh0ZXN0ZXIgPT0gcmVpbnRl
cnByZXRfY2FzdDxHSUNvbnY+KC0xKSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgZ19pY29udl9jbG9zZSh0ZXN0ZXIpOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXN0YXRpYyBib29sIHJl
Z2lzdGVyRW5jb2RpbmdOYW1lSWZBdmFpbGFibGUoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lz
dHJhciwgY29uc3QgY2hhciogY2Fub25pY2FsTmFtZSkKLXsKLSAgICBpZiAoaXNFbmNvZGluZ0F2
YWlsYWJsZShjYW5vbmljYWxOYW1lKSkgewotICAgICAgICByZWdpc3RyYXIoY2Fub25pY2FsTmFt
ZSwgY2Fub25pY2FsTmFtZSk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQgcmVnaXN0ZXJFbmNvZGluZ0FsaWFzSWZBdmFp
bGFibGUoRW5jb2RpbmdOYW1lUmVnaXN0cmFyIHJlZ2lzdHJhciwgY29uc3QgY2hhciogY2Fub25p
Y2FsTmFtZSwgY29uc3QgY2hhciogYWxpYXNOYW1lKQotewotICAgIGlmIChpc0VuY29kaW5nQXZh
aWxhYmxlKGFsaWFzTmFtZSkpCi0gICAgICAgIHJlZ2lzdHJhcihhbGlhc05hbWUsIGNhbm9uaWNh
bE5hbWUpOwotfQotCi1zdGF0aWMgdm9pZCByZWdpc3RlckNvZGVjSWZBdmFpbGFibGUoVGV4dENv
ZGVjUmVnaXN0cmFyIHJlZ2lzdHJhciwgY29uc3QgY2hhciogY29kZWNOYW1lKQotewotICAgIGlm
IChpc0VuY29kaW5nQXZhaWxhYmxlKGNvZGVjTmFtZSkpCi0gICAgICAgIHJlZ2lzdHJhcihjb2Rl
Y05hbWUsIG5ld1RleHRDb2RlY0d0aywgMCk7Ci19Ci0KLXZvaWQgVGV4dENvZGVjR3RrOjpyZWdp
c3RlckJhc2VFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIpCi17
Ci0gICAgLy8gVW5pY29kZQotICAgIHJlZ2lzdGVyRW5jb2RpbmdOYW1lSWZBdmFpbGFibGUocmVn
aXN0cmFyLCAiVVRGLTgiKTsKLSAgICByZWdpc3RlckVuY29kaW5nTmFtZUlmQXZhaWxhYmxlKHJl
Z2lzdHJhciwgIlVURi0zMiIpOwotICAgIHJlZ2lzdGVyRW5jb2RpbmdOYW1lSWZBdmFpbGFibGUo
cmVnaXN0cmFyLCAiVVRGLTMyQkUiKTsKLSAgICByZWdpc3RlckVuY29kaW5nTmFtZUlmQXZhaWxh
YmxlKHJlZ2lzdHJhciwgIlVURi0zMkxFIik7Ci0KLSAgICAvLyBXZXN0ZXJuCi0gICAgaWYgKHJl
Z2lzdGVyRW5jb2RpbmdOYW1lSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiSVNPLTg4NTktMSIpKSB7
Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2RpbmdBbGlhc0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIklT
Ty04ODU5LTEiLCAiQ1A4MTkiKTsKLSAgICAgICAgcmVnaXN0ZXJFbmNvZGluZ0FsaWFzSWZBdmFp
bGFibGUocmVnaXN0cmFyLCAiSVNPLTg4NTktMSIsICJJQk04MTkiKTsKLSAgICAgICAgcmVnaXN0
ZXJFbmNvZGluZ0FsaWFzSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiSVNPLTg4NTktMSIsICJJU08t
SVItMTAwIik7Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2RpbmdBbGlhc0lmQXZhaWxhYmxlKHJlZ2lz
dHJhciwgIklTTy04ODU5LTEiLCAiSVNPODg1OS0xIik7Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2Rp
bmdBbGlhc0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIklTTy04ODU5LTEiLCAiSVNPXzg4NTktMSIp
OwotICAgICAgICByZWdpc3RlckVuY29kaW5nQWxpYXNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJJ
U08tODg1OS0xIiwgIklTT184ODU5LTE6MTk4NyIpOwotICAgICAgICByZWdpc3RlckVuY29kaW5n
QWxpYXNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJJU08tODg1OS0xIiwgIkwxIik7Ci0gICAgICAg
IHJlZ2lzdGVyRW5jb2RpbmdBbGlhc0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIklTTy04ODU5LTEi
LCAiTEFUSU4xIik7Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2RpbmdBbGlhc0lmQXZhaWxhYmxlKHJl
Z2lzdHJhciwgIklTTy04ODU5LTEiLCAiQ1NJU09MQVRJTjEiKTsKLSAgICB9Ci19Ci0KLXZvaWQg
VGV4dENvZGVjR3RrOjpyZWdpc3RlckJhc2VDb2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyIHJlZ2lz
dHJhcikKLXsKLSAgICAvLyBVbmljb2RlCi0gICAgcmVnaXN0ZXJDb2RlY0lmQXZhaWxhYmxlKHJl
Z2lzdHJhciwgIlVURi04Iik7Ci0gICAgcmVnaXN0ZXJDb2RlY0lmQXZhaWxhYmxlKHJlZ2lzdHJh
ciwgIlVURi0zMiIpOwotICAgIHJlZ2lzdGVyQ29kZWNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJV
VEYtMzJCRSIpOwotICAgIHJlZ2lzdGVyQ29kZWNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJVVEYt
MzJMRSIpOwotCi0gICAgLy8gV2VzdGVybgotICAgIHJlZ2lzdGVyQ29kZWNJZkF2YWlsYWJsZShy
ZWdpc3RyYXIsICJJU08tODg1OS0xIik7Ci19Ci0KLXZvaWQgVGV4dENvZGVjR3RrOjpyZWdpc3Rl
ckV4dGVuZGVkRW5jb2RpbmdOYW1lcyhFbmNvZGluZ05hbWVSZWdpc3RyYXIgcmVnaXN0cmFyKQot
ewotICAgIC8vIFdlc3Rlcm4KLSAgICBpZiAocmVnaXN0ZXJFbmNvZGluZ05hbWVJZkF2YWlsYWJs
ZShyZWdpc3RyYXIsICJNQUNST01BTiIpKSB7Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2RpbmdBbGlh
c0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIk1BQ1JPTUFOIiwgIk1BQyIpOwotICAgICAgICByZWdp
c3RlckVuY29kaW5nQWxpYXNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJNQUNST01BTiIsICJNQUNJ
TlRPU0giKTsKLSAgICAgICAgcmVnaXN0ZXJFbmNvZGluZ0FsaWFzSWZBdmFpbGFibGUocmVnaXN0
cmFyLCAiTUFDUk9NQU4iLCAiQ1NNQUNJTlRPU0giKTsKLSAgICB9Ci0KLSAgICAvLyBKYXBhbmVz
ZQotICAgIGlmIChyZWdpc3RlckVuY29kaW5nTmFtZUlmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIlNo
aWZ0X0pJUyIpKSB7Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2RpbmdBbGlhc0lmQXZhaWxhYmxlKHJl
Z2lzdHJhciwgIlNoaWZ0X0pJUyIsICJNU19LQU5KSSIpOwotICAgICAgICByZWdpc3RlckVuY29k
aW5nQWxpYXNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJTaGlmdF9KSVMiLCAiU0hJRlQtSklTIik7
Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2RpbmdBbGlhc0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIlNo
aWZ0X0pJUyIsICJTSklTIik7Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2RpbmdBbGlhc0lmQXZhaWxh
YmxlKHJlZ2lzdHJhciwgIlNoaWZ0X0pJUyIsICJDU1NISUZUSklTIik7Ci0gICAgfQotICAgIGlm
IChyZWdpc3RlckVuY29kaW5nTmFtZUlmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIkVVQy1KUCIpKSB7
Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2RpbmdBbGlhc0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIkVV
Qy1KUCIsICJFVUNfSlAiKTsKLSAgICAgICAgcmVnaXN0ZXJFbmNvZGluZ0FsaWFzSWZBdmFpbGFi
bGUocmVnaXN0cmFyLCAiRVVDLUpQIiwgIkVVQ0pQIik7Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2Rp
bmdBbGlhc0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIkVVQy1KUCIsICJFWFRFTkRFRF9VTklYX0NP
REVfUEFDS0VEX0ZPUk1BVF9GT1JfSkFQQU5FU0UiKTsKLSAgICAgICAgcmVnaXN0ZXJFbmNvZGlu
Z0FsaWFzSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiRVVDLUpQIiwgIkNTRVVDUEtERk1USkFQQU5F
U0UiKTsKLSAgICB9Ci0gICAgcmVnaXN0ZXJFbmNvZGluZ05hbWVJZkF2YWlsYWJsZShyZWdpc3Ry
YXIsICJJU08tMjAyMi1KUCIpOwotCi0gICAgLy8gVHJhZGl0aW9uYWwgQ2hpbmVzZQotICAgIGlm
IChyZWdpc3RlckVuY29kaW5nTmFtZUlmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIkJJRzUiKSkgewot
ICAgICAgICByZWdpc3RlckVuY29kaW5nQWxpYXNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJCSUc1
IiwgIkJJRy01Iik7Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2RpbmdBbGlhc0lmQXZhaWxhYmxlKHJl
Z2lzdHJhciwgIkJJRzUiLCAiQklHLUZJVkUiKTsKLSAgICAgICAgcmVnaXN0ZXJFbmNvZGluZ0Fs
aWFzSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiQklHNSIsICJCSUdGSVZFIik7Ci0gICAgICAgIHJl
Z2lzdGVyRW5jb2RpbmdBbGlhc0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIkJJRzUiLCAiQ04tQklH
NSIpOwotICAgICAgICByZWdpc3RlckVuY29kaW5nQWxpYXNJZkF2YWlsYWJsZShyZWdpc3RyYXIs
ICJCSUc1IiwgIkNTQklHNSIpOwotICAgIH0KLSAgICBpZiAocmVnaXN0ZXJFbmNvZGluZ05hbWVJ
ZkF2YWlsYWJsZShyZWdpc3RyYXIsICJCSUc1LUhLU0NTIikpIHsKLSAgICAgICAgcmVnaXN0ZXJF
bmNvZGluZ0FsaWFzSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiQklHNS1IS1NDUyIsICJCSUc1LUhL
U0NTOjIwMDQiKTsKLSAgICAgICAgcmVnaXN0ZXJFbmNvZGluZ0FsaWFzSWZBdmFpbGFibGUocmVn
aXN0cmFyLCAiQklHNS1IS1NDUyIsICJCSUc1SEtTQ1MiKTsKLSAgICB9Ci0gICAgcmVnaXN0ZXJF
bmNvZGluZ05hbWVJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJDUDk1MCIpOwotCi0gICAgLy8gS29y
ZWFuCi0gICAgaWYgKHJlZ2lzdGVyRW5jb2RpbmdOYW1lSWZBdmFpbGFibGUocmVnaXN0cmFyLCAi
SVNPLTIwMjItS1IiKSkKLSAgICAgICAgcmVnaXN0ZXJFbmNvZGluZ0FsaWFzSWZBdmFpbGFibGUo
cmVnaXN0cmFyLCAiSVNPLTIwMjItS1IiLCAiQ1NJU08yMDIyS1IiKTsKLSAgICBpZiAocmVnaXN0
ZXJFbmNvZGluZ05hbWVJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJDUDk0OSIpKQotICAgICAgICBy
ZWdpc3RlckVuY29kaW5nQWxpYXNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJDUDk0OSIsICJVSEMi
KTsKLSAgICBpZiAocmVnaXN0ZXJFbmNvZGluZ05hbWVJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJF
VUMtS1IiKSkKLSAgICAgICAgcmVnaXN0ZXJFbmNvZGluZ0FsaWFzSWZBdmFpbGFibGUocmVnaXN0
cmFyLCAiRVVDLUtSIiwgIkNTRVVDS1IiKTsKLQotICAgIC8vIEFyYWJpYwotICAgIGlmIChyZWdp
c3RlckVuY29kaW5nTmFtZUlmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIklTTy04ODU5LTYiKSkgewot
ICAgICAgICByZWdpc3RlckVuY29kaW5nQWxpYXNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJJU08t
ODg1OS02IiwgIkFSQUJJQyIpOwotICAgICAgICByZWdpc3RlckVuY29kaW5nQWxpYXNJZkF2YWls
YWJsZShyZWdpc3RyYXIsICJJU08tODg1OS02IiwgIkFTTU8tNzA4Iik7Ci0gICAgICAgIHJlZ2lz
dGVyRW5jb2RpbmdBbGlhc0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIklTTy04ODU5LTYiLCAiRUNN
QS0xMTQiKTsKLSAgICAgICAgcmVnaXN0ZXJFbmNvZGluZ0FsaWFzSWZBdmFpbGFibGUocmVnaXN0
cmFyLCAiSVNPLTg4NTktNiIsICJJU08tSVItMTI3Iik7Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2Rp
bmdBbGlhc0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIklTTy04ODU5LTYiLCAiSVNPODg1OS02Iik7
Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2RpbmdBbGlhc0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIklT
Ty04ODU5LTYiLCAiSVNPXzg4NTktNiIpOwotICAgICAgICByZWdpc3RlckVuY29kaW5nQWxpYXNJ
ZkF2YWlsYWJsZShyZWdpc3RyYXIsICJJU08tODg1OS02IiwgIklTT184ODU5LTY6MTk4NyIpOwot
ICAgICAgICByZWdpc3RlckVuY29kaW5nQWxpYXNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJJU08t
ODg1OS02IiwgIkNTSVNPTEFUSU5BUkFCSUMiKTsKLSAgICB9Ci0gICAgLy8gcmVhcnJhbmdlZCwg
d2luZG93cy0xMjU2IG5vdyBkZWNsYXJlZCB0aGUgY2Fub25pY2FsIG5hbWUgYW5kIHB1dCB0byBs
b3dlcmNhc2UgdG8gZml4IC9mYXN0L2VuY29kaW5nL2FocmFtLW9yZy1lZy5odG1sIHRlc3QgY2Fz
ZQotICAgIGlmIChyZWdpc3RlckVuY29kaW5nTmFtZUlmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIndp
bmRvd3MtMTI1NiIpKSB7Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2RpbmdBbGlhc0lmQXZhaWxhYmxl
KHJlZ2lzdHJhciwgIndpbmRvd3MtMTI1NiIsICJDUDEyNTYiKTsKLSAgICAgICAgcmVnaXN0ZXJF
bmNvZGluZ0FsaWFzSWZBdmFpbGFibGUocmVnaXN0cmFyLCAid2luZG93cy0xMjU2IiwgIk1TLUFS
QUIiKTsKLSAgICB9Ci0KLSAgICAvLyBIZWJyZXcKLSAgICBpZiAocmVnaXN0ZXJFbmNvZGluZ05h
bWVJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJJU08tODg1OS04IikpIHsKLSAgICAgICAgcmVnaXN0
ZXJFbmNvZGluZ0FsaWFzSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiSVNPLTg4NTktOCIsICJIRUJS
RVciKTsKLSAgICAgICAgcmVnaXN0ZXJFbmNvZGluZ0FsaWFzSWZBdmFpbGFibGUocmVnaXN0cmFy
LCAiSVNPLTg4NTktOCIsICJJU08tODg1OS04Iik7Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2RpbmdB
bGlhc0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIklTTy04ODU5LTgiLCAiSVNPLUlSLTEzOCIpOwot
ICAgICAgICByZWdpc3RlckVuY29kaW5nQWxpYXNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJJU08t
ODg1OS04IiwgIklTTzg4NTktOCIpOwotICAgICAgICByZWdpc3RlckVuY29kaW5nQWxpYXNJZkF2
YWlsYWJsZShyZWdpc3RyYXIsICJJU08tODg1OS04IiwgIklTT184ODU5LTgiKTsKLSAgICAgICAg
cmVnaXN0ZXJFbmNvZGluZ0FsaWFzSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiSVNPLTg4NTktOCIs
ICJJU09fODg1OS04OjE5ODgiKTsKLSAgICAgICAgcmVnaXN0ZXJFbmNvZGluZ0FsaWFzSWZBdmFp
bGFibGUocmVnaXN0cmFyLCAiSVNPLTg4NTktOCIsICJDU0lTT0xBVElOSEVCUkVXIik7Ci0gICAg
fQotICAgIC8vIHJlYXJyYW5nZWQsIG1vdmVkIHdpbmRvd3MtMTI1NSBhcyBjYW5vbmljYWwgYW5k
IGxvd2VyY2FzZWQsIGZpeGluZyAvZmFzdC9lbmNvZGluZy9tZXRhLWNoYXJzZXQuaHRtbAotICAg
IGlmIChyZWdpc3RlckVuY29kaW5nTmFtZUlmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIndpbmRvd3Mt
MTI1NSIpKSB7Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2RpbmdBbGlhc0lmQXZhaWxhYmxlKHJlZ2lz
dHJhciwgIndpbmRvd3MtMTI1NSIsICJDUDEyNTUiKTsKLSAgICAgICAgcmVnaXN0ZXJFbmNvZGlu
Z0FsaWFzSWZBdmFpbGFibGUocmVnaXN0cmFyLCAid2luZG93cy0xMjU1IiwgIk1TLUhFQlIiKTsK
LSAgICB9Ci0KLSAgICAvLyBHcmVlawotICAgIGlmIChyZWdpc3RlckVuY29kaW5nTmFtZUlmQXZh
aWxhYmxlKHJlZ2lzdHJhciwgIklTTy04ODU5LTciKSkgewotICAgICAgICByZWdpc3RlckVuY29k
aW5nQWxpYXNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJJU08tODg1OS03IiwgIkVDTUEtMTE4Iik7
Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2RpbmdBbGlhc0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIklT
Ty04ODU5LTciLCAiRUxPVF85MjgiKTsKLSAgICAgICAgcmVnaXN0ZXJFbmNvZGluZ0FsaWFzSWZB
dmFpbGFibGUocmVnaXN0cmFyLCAiSVNPLTg4NTktNyIsICJHUkVFSyIpOwotICAgICAgICByZWdp
c3RlckVuY29kaW5nQWxpYXNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJJU08tODg1OS03IiwgIkdS
RUVLOCIpOwotICAgICAgICByZWdpc3RlckVuY29kaW5nQWxpYXNJZkF2YWlsYWJsZShyZWdpc3Ry
YXIsICJJU08tODg1OS03IiwgIklTTy1JUi0xMjYiKTsKLSAgICAgICAgcmVnaXN0ZXJFbmNvZGlu
Z0FsaWFzSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiSVNPLTg4NTktNyIsICJJU084ODU5LTciKTsK
LSAgICAgICAgcmVnaXN0ZXJFbmNvZGluZ0FsaWFzSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiSVNP
LTg4NTktNyIsICJJU09fODg1OS03Iik7Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2RpbmdBbGlhc0lm
QXZhaWxhYmxlKHJlZ2lzdHJhciwgIklTTy04ODU5LTciLCAiSVNPXzg4NTktNzoxOTg3Iik7Ci0g
ICAgICAgIHJlZ2lzdGVyRW5jb2RpbmdBbGlhc0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIklTTy04
ODU5LTciLCAiSVNPXzg4NTktNzoyMDAzIik7Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2RpbmdBbGlh
c0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIklTTy04ODU5LTciLCAiQ1NJIik7Ci0gICAgfQotICAg
IGlmIChyZWdpc3RlckVuY29kaW5nTmFtZUlmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIkNQODY5Iikp
IHsKLSAgICAgICAgcmVnaXN0ZXJFbmNvZGluZ0FsaWFzSWZBdmFpbGFibGUocmVnaXN0cmFyLCAi
Q1A4NjkiLCAiODY5Iik7Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2RpbmdBbGlhc0lmQXZhaWxhYmxl
KHJlZ2lzdHJhciwgIkNQODY5IiwgIkNQLUdSIik7Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2RpbmdB
bGlhc0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIkNQODY5IiwgIklCTTg2OSIpOwotICAgICAgICBy
ZWdpc3RlckVuY29kaW5nQWxpYXNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJDUDg2OSIsICJDU0lC
TTg2OSIpOwotICAgIH0KLSAgICByZWdpc3RlckVuY29kaW5nTmFtZUlmQXZhaWxhYmxlKHJlZ2lz
dHJhciwgIldJTkRPV1MtMTI1MyIpOwotCi0gICAgLy8gQ3lyaWxsaWMKLSAgICBpZiAocmVnaXN0
ZXJFbmNvZGluZ05hbWVJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJJU08tODg1OS01IikpIHsKLSAg
ICAgICAgcmVnaXN0ZXJFbmNvZGluZ0FsaWFzSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiSVNPLTg4
NTktNSIsICJDWVJJTExJQyIpOwotICAgICAgICByZWdpc3RlckVuY29kaW5nQWxpYXNJZkF2YWls
YWJsZShyZWdpc3RyYXIsICJJU08tODg1OS01IiwgIklTTy1JUi0xNDQiKTsKLSAgICAgICAgcmVn
aXN0ZXJFbmNvZGluZ0FsaWFzSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiSVNPLTg4NTktNSIsICJJ
U084ODU5LTUiKTsKLSAgICAgICAgcmVnaXN0ZXJFbmNvZGluZ0FsaWFzSWZBdmFpbGFibGUocmVn
aXN0cmFyLCAiSVNPLTg4NTktNSIsICJJU09fODg1OS01Iik7Ci0gICAgICAgIHJlZ2lzdGVyRW5j
b2RpbmdBbGlhc0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIklTTy04ODU5LTUiLCAiSVNPXzg4NTkt
NToxOTg4Iik7Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2RpbmdBbGlhc0lmQXZhaWxhYmxlKHJlZ2lz
dHJhciwgIklTTy04ODU5LTUiLCAiQ1NJU09MQVRJTkNZUklMTElDIik7Ci0gICAgfQotICAgIGlm
IChyZWdpc3RlckVuY29kaW5nTmFtZUlmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIktPSTgtUiIpKQot
ICAgICAgICByZWdpc3RlckVuY29kaW5nQWxpYXNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJLT0k4
LVIiLCAiQ1NLT0k4UiIpOwotICAgIGlmIChyZWdpc3RlckVuY29kaW5nTmFtZUlmQXZhaWxhYmxl
KHJlZ2lzdHJhciwgIkNQODY2IikpIHsKLSAgICAgICAgcmVnaXN0ZXJFbmNvZGluZ0FsaWFzSWZB
dmFpbGFibGUocmVnaXN0cmFyLCAiQ1A4NjYiLCAiODY2Iik7Ci0gICAgICAgIHJlZ2lzdGVyRW5j
b2RpbmdBbGlhc0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIkNQODY2IiwgIklCTTg2NiIpOwotICAg
ICAgICByZWdpc3RlckVuY29kaW5nQWxpYXNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJDUDg2NiIs
ICJDU0lCTTg2NiIpOwotICAgIH0KLSAgICByZWdpc3RlckVuY29kaW5nTmFtZUlmQXZhaWxhYmxl
KHJlZ2lzdHJhciwgIktPSTgtVSIpOwotICAgIC8vIENQMTI1MSBhZGRlZCB0byBwYXNzIC9mYXN0
L2VuY29kaW5nL2NoYXJzZXQtY3AxMjUxLmh0bWwKLSAgICBpZiAocmVnaXN0ZXJFbmNvZGluZ05h
bWVJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJ3aW5kb3dzLTEyNTEiKSkKLSAgICAgICAgcmVnaXN0
ZXJFbmNvZGluZ0FsaWFzSWZBdmFpbGFibGUocmVnaXN0cmFyLCAid2luZG93cy0xMjUxIiwgIkNQ
MTI1MSIpOwotICAgIGlmIChyZWdpc3RlckVuY29kaW5nTmFtZUlmQXZhaWxhYmxlKHJlZ2lzdHJh
ciwgIm1hYy1jeXJpbGxpYyIpKSB7Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2RpbmdBbGlhc0lmQXZh
aWxhYmxlKHJlZ2lzdHJhciwgIm1hYy1jeXJpbGxpYyIsICJNQUNDWVJJTExJQyIpOwotICAgICAg
ICByZWdpc3RlckVuY29kaW5nQWxpYXNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJtYWMtY3lyaWxs
aWMiLCAieC1tYWMtY3lyaWxsaWMiKTsKLSAgICB9Ci0KLSAgICAvLyBUaGFpCi0gICAgaWYgKHJl
Z2lzdGVyRW5jb2RpbmdOYW1lSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiQ1A4NzQiKSkKLSAgICAg
ICAgcmVnaXN0ZXJFbmNvZGluZ0FsaWFzSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiQ1A4NzQiLCAi
V0lORE9XUy04NzQiKTsKLSAgICByZWdpc3RlckVuY29kaW5nTmFtZUlmQXZhaWxhYmxlKHJlZ2lz
dHJhciwgIlRJUy02MjAiKTsKLQotICAgIC8vIFNpbXBsaWZpZWQgQ2hpbmVzZQotICAgIHJlZ2lz
dGVyRW5jb2RpbmdOYW1lSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiR0JLIik7Ci0gICAgaWYgKHJl
Z2lzdGVyRW5jb2RpbmdOYW1lSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiSFoiKSkKLSAgICAgICAg
cmVnaXN0ZXJFbmNvZGluZ0FsaWFzSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiSFoiLCAiSFotR0It
MjMxMiIpOwotICAgIHJlZ2lzdGVyRW5jb2RpbmdOYW1lSWZBdmFpbGFibGUocmVnaXN0cmFyLCAi
R0IxODAzMCIpOwotICAgIGlmIChyZWdpc3RlckVuY29kaW5nTmFtZUlmQXZhaWxhYmxlKHJlZ2lz
dHJhciwgIkVVQy1DTiIpKSB7Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2RpbmdBbGlhc0lmQXZhaWxh
YmxlKHJlZ2lzdHJhciwgIkVVQy1DTiIsICJFVUNDTiIpOwotICAgICAgICByZWdpc3RlckVuY29k
aW5nQWxpYXNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJFVUMtQ04iLCAiR0IyMzEyIik7Ci0gICAg
ICAgIHJlZ2lzdGVyRW5jb2RpbmdBbGlhc0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIkVVQy1DTiIs
ICJDTi1HQiIpOwotICAgICAgICByZWdpc3RlckVuY29kaW5nQWxpYXNJZkF2YWlsYWJsZShyZWdp
c3RyYXIsICJFVUMtQ04iLCAiQ1NHQjIzMTIiKTsKLSAgICAgICAgcmVnaXN0ZXJFbmNvZGluZ0Fs
aWFzSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiRVVDLUNOIiwgIkVVQ19DTiIpOwotICAgIH0KLSAg
ICBpZiAocmVnaXN0ZXJFbmNvZGluZ05hbWVJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJHQl8yMzEy
LTgwIikpIHsKLSAgICAgICAgcmVnaXN0ZXJFbmNvZGluZ0FsaWFzSWZBdmFpbGFibGUocmVnaXN0
cmFyLCAiR0JfMjMxMi04MCIsICJDSElORVNFIik7Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2RpbmdB
bGlhc0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIkdCXzIzMTItODAiLCAiY3NJU081OEdCMjMxMjgw
Iik7Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2RpbmdBbGlhc0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwg
IkdCXzIzMTItODAiLCAiR0IyMzEyLjE5ODAtMCIpOwotICAgICAgICByZWdpc3RlckVuY29kaW5n
QWxpYXNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJHQl8yMzEyLTgwIiwgIklTTy1JUi01OCIpOwot
ICAgIH0KLQotICAgIC8vIENlbnRyYWwgRXVyb3BlYW4KLSAgICBpZiAocmVnaXN0ZXJFbmNvZGlu
Z05hbWVJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJJU08tODg1OS0yIikpIHsKLSAgICAgICAgcmVn
aXN0ZXJFbmNvZGluZ0FsaWFzSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiSVNPLTg4NTktMiIsICJJ
U08tSVItMTAxIik7Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2RpbmdBbGlhc0lmQXZhaWxhYmxlKHJl
Z2lzdHJhciwgIklTTy04ODU5LTIiLCAiSVNPODg1OS0yIik7Ci0gICAgICAgIHJlZ2lzdGVyRW5j
b2RpbmdBbGlhc0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIklTTy04ODU5LTIiLCAiSVNPXzg4NTkt
MiIpOwotICAgICAgICByZWdpc3RlckVuY29kaW5nQWxpYXNJZkF2YWlsYWJsZShyZWdpc3RyYXIs
ICJJU08tODg1OS0yIiwgIklTT184ODU5LTI6MTk4NyIpOwotICAgICAgICByZWdpc3RlckVuY29k
aW5nQWxpYXNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJJU08tODg1OS0yIiwgIkwyIik7Ci0gICAg
ICAgIHJlZ2lzdGVyRW5jb2RpbmdBbGlhc0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIklTTy04ODU5
LTIiLCAiTEFUSU4yIik7Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2RpbmdBbGlhc0lmQXZhaWxhYmxl
KHJlZ2lzdHJhciwgIklTTy04ODU5LTIiLCAiQ1NJU09MQVRJTjIiKTsKLSAgICB9Ci0gICAgaWYg
KHJlZ2lzdGVyRW5jb2RpbmdOYW1lSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiQ1AxMjUwIikpIHsK
LSAgICAgICAgcmVnaXN0ZXJFbmNvZGluZ0FsaWFzSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiQ1Ax
MjUwIiwgIk1TLUVFIik7Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2RpbmdBbGlhc0lmQXZhaWxhYmxl
KHJlZ2lzdHJhciwgIkNQMTI1MCIsICJXSU5ET1dTLTEyNTAiKTsKLSAgICB9Ci0gICAgcmVnaXN0
ZXJFbmNvZGluZ05hbWVJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJNQUMtQ0VOVFJBTEVVUk9QRSIp
OwotCi0gICAgLy8gVmlldG5hbWVzZQotICAgIGlmIChyZWdpc3RlckVuY29kaW5nTmFtZUlmQXZh
aWxhYmxlKHJlZ2lzdHJhciwgIkNQMTI1OCIpKQotICAgICAgICByZWdpc3RlckVuY29kaW5nQWxp
YXNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJDUDEyNTgiLCAiV0lORE9XUy0xMjU4Iik7Ci0KLSAg
ICAvLyBUdXJraXNoCi0gICAgaWYgKHJlZ2lzdGVyRW5jb2RpbmdOYW1lSWZBdmFpbGFibGUocmVn
aXN0cmFyLCAiQ1AxMjU0IikpIHsKLSAgICAgICAgcmVnaXN0ZXJFbmNvZGluZ0FsaWFzSWZBdmFp
bGFibGUocmVnaXN0cmFyLCAiQ1AxMjU0IiwgIk1TLVRVUksiKTsKLSAgICAgICAgcmVnaXN0ZXJF
bmNvZGluZ0FsaWFzSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiQ1AxMjU0IiwgIldJTkRPV1MtMTI1
NCIpOwotICAgIH0KLSAgICBpZiAocmVnaXN0ZXJFbmNvZGluZ05hbWVJZkF2YWlsYWJsZShyZWdp
c3RyYXIsICJJU08tODg1OS05IikpIHsKLSAgICAgICAgcmVnaXN0ZXJFbmNvZGluZ0FsaWFzSWZB
dmFpbGFibGUocmVnaXN0cmFyLCAiSVNPLTg4NTktOSIsICJJU08tSVItMTQ4Iik7Ci0gICAgICAg
IHJlZ2lzdGVyRW5jb2RpbmdBbGlhc0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIklTTy04ODU5LTki
LCAiSVNPODg1OS05Iik7Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2RpbmdBbGlhc0lmQXZhaWxhYmxl
KHJlZ2lzdHJhciwgIklTTy04ODU5LTkiLCAiSVNPXzg4NTktOSIpOwotICAgICAgICByZWdpc3Rl
ckVuY29kaW5nQWxpYXNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJJU08tODg1OS05IiwgIklTT184
ODU5LTk6MTk4OSIpOwotICAgICAgICByZWdpc3RlckVuY29kaW5nQWxpYXNJZkF2YWlsYWJsZShy
ZWdpc3RyYXIsICJJU08tODg1OS05IiwgIkw1Iik7Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2RpbmdB
bGlhc0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIklTTy04ODU5LTkiLCAiTEFUSU41Iik7Ci0gICAg
ICAgIHJlZ2lzdGVyRW5jb2RpbmdBbGlhc0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIklTTy04ODU5
LTkiLCAiQ1NJU09MQVRJTjUiKTsKLSAgICB9Ci0KLSAgICAvLyBCYWx0aWMKLSAgICBpZiAocmVn
aXN0ZXJFbmNvZGluZ05hbWVJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJDUDEyNTciKSkgewotICAg
ICAgICByZWdpc3RlckVuY29kaW5nQWxpYXNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJDUDEyNTci
LCAiV0lOQkFMVFJJTSIpOwotICAgICAgICByZWdpc3RlckVuY29kaW5nQWxpYXNJZkF2YWlsYWJs
ZShyZWdpc3RyYXIsICJDUDEyNTciLCAiV0lORE9XUy0xMjU3Iik7Ci0gICAgfQotICAgIGlmIChy
ZWdpc3RlckVuY29kaW5nTmFtZUlmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIklTTy04ODU5LTQiKSkg
ewotICAgICAgICByZWdpc3RlckVuY29kaW5nQWxpYXNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJJ
U08tODg1OS00IiwgIklTTy1JUi0xMTAiKTsKLSAgICAgICAgcmVnaXN0ZXJFbmNvZGluZ0FsaWFz
SWZBdmFpbGFibGUocmVnaXN0cmFyLCAiSVNPLTg4NTktNCIsICJJU084ODU5LTQiKTsKLSAgICAg
ICAgcmVnaXN0ZXJFbmNvZGluZ0FsaWFzSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiSVNPLTg4NTkt
NCIsICJJU09fODg1OS00Iik7Ci0gICAgICAgIHJlZ2lzdGVyRW5jb2RpbmdBbGlhc0lmQXZhaWxh
YmxlKHJlZ2lzdHJhciwgIklTTy04ODU5LTQiLCAiSVNPXzg4NTktNDoxOTg4Iik7Ci0gICAgICAg
IHJlZ2lzdGVyRW5jb2RpbmdBbGlhc0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIklTTy04ODU5LTQi
LCAiTDQiKTsKLSAgICAgICAgcmVnaXN0ZXJFbmNvZGluZ0FsaWFzSWZBdmFpbGFibGUocmVnaXN0
cmFyLCAiSVNPLTg4NTktNCIsICJMQVRJTjQiKTsKLSAgICAgICAgcmVnaXN0ZXJFbmNvZGluZ0Fs
aWFzSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiSVNPLTg4NTktNCIsICJDU0lTT0xBVElONCIpOwot
ICAgIH0KLX0KLQotdm9pZCBUZXh0Q29kZWNHdGs6OnJlZ2lzdGVyRXh0ZW5kZWRDb2RlY3MoVGV4
dENvZGVjUmVnaXN0cmFyIHJlZ2lzdHJhcikKLXsKLSAgICAvLyBXZXN0ZXJuCi0gICAgcmVnaXN0
ZXJDb2RlY0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIk1BQ1JPTUFOIik7Ci0KLSAgICAvLyBKYXBh
bmVzZQotICAgIHJlZ2lzdGVyQ29kZWNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJTaGlmdF9KSVMi
KTsKLSAgICByZWdpc3RlckNvZGVjSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiRVVDLUpQIik7Ci0g
ICAgcmVnaXN0ZXJDb2RlY0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIklTTy0yMDIyLUpQIik7Ci0K
LSAgICAvLyBUcmFkaXRpb25hbCBDaGluZXNlCi0gICAgcmVnaXN0ZXJDb2RlY0lmQXZhaWxhYmxl
KHJlZ2lzdHJhciwgIkJJRzUiKTsKLSAgICByZWdpc3RlckNvZGVjSWZBdmFpbGFibGUocmVnaXN0
cmFyLCAiQklHNS1IS1NDUyIpOwotICAgIHJlZ2lzdGVyQ29kZWNJZkF2YWlsYWJsZShyZWdpc3Ry
YXIsICJDUDk1MCIpOwotCi0gICAgLy8gS29yZWFuCi0gICAgcmVnaXN0ZXJDb2RlY0lmQXZhaWxh
YmxlKHJlZ2lzdHJhciwgIklTTy0yMDIyLUtSIik7Ci0gICAgcmVnaXN0ZXJDb2RlY0lmQXZhaWxh
YmxlKHJlZ2lzdHJhciwgIkNQOTQ5Iik7Ci0gICAgcmVnaXN0ZXJDb2RlY0lmQXZhaWxhYmxlKHJl
Z2lzdHJhciwgIkVVQy1LUiIpOwotCi0gICAgLy8gQXJhYmljCi0gICAgcmVnaXN0ZXJDb2RlY0lm
QXZhaWxhYmxlKHJlZ2lzdHJhciwgIklTTy04ODU5LTYiKTsKLSAgICAvLyByZWFycmFuZ2VkLCB3
aW5kb3dzLTEyNTYgbm93IGRlY2xhcmVkIHRoZSBjYW5vbmljYWwgbmFtZSBhbmQgcHV0IHRvIGxv
d2VyY2FzZSB0byBmaXggL2Zhc3QvZW5jb2RpbmcvYWhyYW0tb3JnLWVnLmh0bWwgdGVzdCBjYXNl
Ci0gICAgcmVnaXN0ZXJDb2RlY0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIndpbmRvd3MtMTI1NiIp
OwotCi0gICAgLy8gSGVicmV3Ci0gICAgcmVnaXN0ZXJDb2RlY0lmQXZhaWxhYmxlKHJlZ2lzdHJh
ciwgIklTTy04ODU5LTgiKTsKLSAgICAvLyByZWFycmFuZ2VkLCBtb3ZlZCB3aW5kb3dzLTEyNTUg
YXMgY2Fub25pY2FsIGFuZCBsb3dlcmNhc2VkLCBmaXhpbmcgL2Zhc3QvZW5jb2RpbmcvbWV0YS1j
aGFyc2V0Lmh0bWwKLSAgICByZWdpc3RlckNvZGVjSWZBdmFpbGFibGUocmVnaXN0cmFyLCAid2lu
ZG93cy0xMjU1Iik7Ci0KLSAgICAvLyBHcmVlawotICAgIHJlZ2lzdGVyQ29kZWNJZkF2YWlsYWJs
ZShyZWdpc3RyYXIsICJJU08tODg1OS03Iik7Ci0gICAgcmVnaXN0ZXJDb2RlY0lmQXZhaWxhYmxl
KHJlZ2lzdHJhciwgIkNQODY5Iik7Ci0gICAgcmVnaXN0ZXJDb2RlY0lmQXZhaWxhYmxlKHJlZ2lz
dHJhciwgIldJTkRPV1MtMTI1MyIpOwotCi0gICAgLy8gQ3lyaWxsaWMKLSAgICByZWdpc3RlckNv
ZGVjSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiSVNPLTg4NTktNSIpOwotICAgIHJlZ2lzdGVyQ29k
ZWNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJLT0k4LVIiKTsKLSAgICByZWdpc3RlckNvZGVjSWZB
dmFpbGFibGUocmVnaXN0cmFyLCAiQ1A4NjYiKTsKLSAgICByZWdpc3RlckNvZGVjSWZBdmFpbGFi
bGUocmVnaXN0cmFyLCAiS09JOC1VIik7Ci0gICAgLy8gQ1AxMjUxIGFkZGVkIHRvIHBhc3MgL2Zh
c3QvZW5jb2RpbmcvY2hhcnNldC1jcDEyNTEuaHRtbAotICAgIHJlZ2lzdGVyQ29kZWNJZkF2YWls
YWJsZShyZWdpc3RyYXIsICJ3aW5kb3dzLTEyNTEiKTsKLSAgICByZWdpc3RlckNvZGVjSWZBdmFp
bGFibGUocmVnaXN0cmFyLCAibWFjLWN5cmlsbGljIik7Ci0KLSAgICAvLyBUaGFpCi0gICAgcmVn
aXN0ZXJDb2RlY0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIkNQODc0Iik7Ci0gICAgcmVnaXN0ZXJD
b2RlY0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIlRJUy02MjAiKTsKLQotICAgIC8vIFNpbXBsaWZp
ZWQgQ2hpbmVzZQotICAgIHJlZ2lzdGVyQ29kZWNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJHQksi
KTsKLSAgICByZWdpc3RlckNvZGVjSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiSFoiKTsKLSAgICBy
ZWdpc3RlckNvZGVjSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiR0IxODAzMCIpOwotICAgIHJlZ2lz
dGVyQ29kZWNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJFVUMtQ04iKTsKLSAgICByZWdpc3RlckNv
ZGVjSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiR0JfMjMxMi04MCIpOwotCi0gICAgLy8gQ2VudHJh
bCBFdXJvcGVhbgotICAgIHJlZ2lzdGVyQ29kZWNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJJU08t
ODg1OS0yIik7Ci0gICAgcmVnaXN0ZXJDb2RlY0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIkNQMTI1
MCIpOwotICAgIHJlZ2lzdGVyQ29kZWNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJNQUMtQ0VOVFJB
TEVVUk9QRSIpOwotCi0gICAgLy8gVmlldG5hbWVzZQotICAgIHJlZ2lzdGVyQ29kZWNJZkF2YWls
YWJsZShyZWdpc3RyYXIsICJDUDEyNTgiKTsKLQotICAgIC8vIFR1cmtpc2gKLSAgICByZWdpc3Rl
ckNvZGVjSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiQ1AxMjU0Iik7Ci0gICAgcmVnaXN0ZXJDb2Rl
Y0lmQXZhaWxhYmxlKHJlZ2lzdHJhciwgIklTTy04ODU5LTkiKTsKLQotICAgIC8vIEJhbHRpYwot
ICAgIHJlZ2lzdGVyQ29kZWNJZkF2YWlsYWJsZShyZWdpc3RyYXIsICJDUDEyNTciKTsKLSAgICBy
ZWdpc3RlckNvZGVjSWZBdmFpbGFibGUocmVnaXN0cmFyLCAiSVNPLTg4NTktNCIpOwotfQotCi1U
ZXh0Q29kZWNHdGs6OlRleHRDb2RlY0d0ayhjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQot
ICAgIDogbV9lbmNvZGluZyhlbmNvZGluZykKLSAgICAsIG1fbnVtQnVmZmVyZWRCeXRlcygwKQot
ewotfQotCi1UZXh0Q29kZWNHdGs6On5UZXh0Q29kZWNHdGsoKQotewotfQotCi12b2lkIFRleHRD
b2RlY0d0azo6Y3JlYXRlSUNvbnZEZWNvZGVyKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIW1faWNv
bnZEZWNvZGVyKTsKLQotICAgIG1faWNvbnZEZWNvZGVyID0gYWRvcHRHUmVmKGdfY2hhcnNldF9j
b252ZXJ0ZXJfbmV3KGludGVybmFsRW5jb2RpbmdOYW1lLCBtX2VuY29kaW5nLm5hbWUoKSwgMCkp
OwotfQotCi12b2lkIFRleHRDb2RlY0d0azo6Y3JlYXRlSUNvbnZFbmNvZGVyKCkgY29uc3QKLXsK
LSAgICBBU1NFUlQoIW1faWNvbnZFbmNvZGVyKTsKLQotICAgIG1faWNvbnZFbmNvZGVyID0gYWRv
cHRHUmVmKGdfY2hhcnNldF9jb252ZXJ0ZXJfbmV3KG1fZW5jb2RpbmcubmFtZSgpLCBpbnRlcm5h
bEVuY29kaW5nTmFtZSwgMCkpOwotfQotCi1TdHJpbmcgVGV4dENvZGVjR3RrOjpkZWNvZGUoY29u
c3QgY2hhciogYnl0ZXMsIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wgc3RvcE9uRXJy
b3IsIGJvb2wmIHNhd0Vycm9yKQotewotICAgIC8vIEdldCBhIGNvbnZlcnRlciBmb3IgdGhlIHBh
c3NlZC1pbiBlbmNvZGluZy4KLSAgICBpZiAoIW1faWNvbnZEZWNvZGVyKQotICAgICAgICBjcmVh
dGVJQ29udkRlY29kZXIoKTsKLSAgICBpZiAoIW1faWNvbnZEZWNvZGVyKSB7Ci0gICAgICAgIExP
R19FUlJPUigiRXJyb3IgY3JlYXRpbmcgSUNvbnYgZW5jb2RlciBldmVuIHRob3VnaCBlbmNvZGlu
ZyB3YXMgaW4gdGFibGUuIik7Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICB9Ci0KLSAg
ICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKLQotICAgIGdzaXplIGJ5dGVzUmVhZCA9IDA7Ci0gICAg
Z3NpemUgYnl0ZXNXcml0dGVuID0gMDsKLSAgICBjb25zdCBnY2hhciogaW5wdXQgPSBieXRlczsK
LSAgICBnc2l6ZSBpbnB1dExlbmd0aCA9IGxlbmd0aDsKLSAgICBnY2hhciBidWZmZXJbQ29udmVy
c2lvbkJ1ZmZlclNpemVdOwotICAgIGludCBmbGFncyA9ICFsZW5ndGggPyBHX0NPTlZFUlRFUl9J
TlBVVF9BVF9FTkQgOiBHX0NPTlZFUlRFUl9OT19GTEFHUzsKLSAgICBpZiAoZmx1c2gpCi0gICAg
ICAgIGZsYWdzIHw9IEdfQ09OVkVSVEVSX0ZMVVNIOwotCi0gICAgYm9vbCBidWZmZXJXYXNGdWxs
ID0gZmFsc2U7Ci0gICAgY2hhciogcHJlZml4ZWRCeXRlcyA9IDA7Ci0KLSAgICBpZiAobV9udW1C
dWZmZXJlZEJ5dGVzKSB7Ci0gICAgICAgIGlucHV0TGVuZ3RoID0gbGVuZ3RoICsgbV9udW1CdWZm
ZXJlZEJ5dGVzOwotICAgICAgICBwcmVmaXhlZEJ5dGVzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGZh
c3RNYWxsb2MoaW5wdXRMZW5ndGgpKTsKLSAgICAgICAgbWVtY3B5KHByZWZpeGVkQnl0ZXMsIG1f
YnVmZmVyZWRCeXRlcywgbV9udW1CdWZmZXJlZEJ5dGVzKTsKLSAgICAgICAgbWVtY3B5KHByZWZp
eGVkQnl0ZXMgKyBtX251bUJ1ZmZlcmVkQnl0ZXMsIGJ5dGVzLCBsZW5ndGgpOwotCi0gICAgICAg
IGlucHV0ID0gcHJlZml4ZWRCeXRlczsKLQotICAgICAgICAvLyBhbGwgYnVmZmVyZWQgYnl0ZXMg
YXJlIGNvbnN1bWVkIG5vdwotICAgICAgICBtX251bUJ1ZmZlcmVkQnl0ZXMgPSAwOwotICAgIH0K
LQotICAgIGRvIHsKLSAgICAgICAgR093blB0cjxHRXJyb3I+IGVycm9yOwotICAgICAgICBHQ29u
dmVydGVyUmVzdWx0IHJlcyA9IGdfY29udmVydGVyX2NvbnZlcnQoR19DT05WRVJURVIobV9pY29u
dkRlY29kZXIuZ2V0KCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5wdXQsIGlucHV0TGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PEdDb252ZXJ0ZXJGbGFncz4oZmxhZ3MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJmJ5dGVzUmVhZCwgJmJ5dGVzV3JpdHRlbiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlcnJvci5vdXRQdHIo
KSk7Ci0gICAgICAgIGlucHV0ICs9IGJ5dGVzUmVhZDsKLSAgICAgICAgaW5wdXRMZW5ndGggLT0g
Ynl0ZXNSZWFkOwotCi0gICAgICAgIGlmIChyZXMgPT0gR19DT05WRVJURVJfRVJST1IpIHsKLSAg
ICAgICAgICAgIGlmIChnX2Vycm9yX21hdGNoZXMoZXJyb3IuZ2V0KCksIEdfSU9fRVJST1IsIEdf
SU9fRVJST1JfUEFSVElBTF9JTlBVVCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBu
b3QgZW5vdWdoIGlucHV0IHRvIGZ1bGx5IGRldGVybWluZSB3aGF0IHRoZSBjb252ZXJzaW9uIHNo
b3VsZCBwcm9kdWNlLAotICAgICAgICAgICAgICAgIC8vIHNhdmUgaXQgdG8gYSBidWZmZXIgdG8g
cHJlcGVuZCBpdCB0byB0aGUgbmV4dCBpbnB1dC4KLSAgICAgICAgICAgICAgICBtZW1jcHkobV9i
dWZmZXJlZEJ5dGVzLCBpbnB1dCwgaW5wdXRMZW5ndGgpOwotICAgICAgICAgICAgICAgIG1fbnVt
QnVmZmVyZWRCeXRlcyA9IGlucHV0TGVuZ3RoOwotICAgICAgICAgICAgICAgIGlucHV0TGVuZ3Ro
ID0gMDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoZ19lcnJvcl9tYXRjaGVzKGVycm9yLmdldCgp
LCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX05PX1NQQUNFKSkKLSAgICAgICAgICAgICAgICBidWZm
ZXJXYXNGdWxsID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGdfZXJyb3JfbWF0Y2hlcyhl
cnJvci5nZXQoKSwgR19JT19FUlJPUiwgR19JT19FUlJPUl9JTlZBTElEX0RBVEEpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHN0b3BPbkVycm9yKQotICAgICAgICAgICAgICAgICAgICBzYXdFcnJv
ciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKGlucHV0TGVuZ3RoKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIElnbm9yZSBpbnZhbGlkIGNoYXJhY3Rlci4KLSAgICAgICAgICAgICAgICAg
ICAgaW5wdXQgKz0gMTsKLSAgICAgICAgICAgICAgICAgICAgaW5wdXRMZW5ndGggLT0gMTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNh
d0Vycm9yID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkdJQ29udiBjb252ZXJz
aW9uIGVycm9yLCBDb2RlICVkOiBcIiVzXCIiLCBlcnJvci0+Y29kZSwgZXJyb3ItPm1lc3NhZ2Up
OwotICAgICAgICAgICAgICAgIG1fbnVtQnVmZmVyZWRCeXRlcyA9IDA7IC8vIFJlc2V0IHN0YXRl
IGZvciBzdWJzZXF1ZW50IGNhbGxzIHRvIGRlY29kZS4KLSAgICAgICAgICAgICAgICBmYXN0RnJl
ZShwcmVmaXhlZEJ5dGVzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXN1bHQuYXBwZW5kKHJlaW50ZXJwcmV0
X2Nhc3Q8VUNoYXIqPihidWZmZXIpLCBieXRlc1dyaXR0ZW4gLyBzaXplb2YoVUNoYXIpKTsKLSAg
ICB9IHdoaWxlICgoaW5wdXRMZW5ndGggfHwgYnVmZmVyV2FzRnVsbCkgJiYgIXNhd0Vycm9yKTsK
LQotICAgIGZhc3RGcmVlKHByZWZpeGVkQnl0ZXMpOwotCi0gICAgcmV0dXJuIFN0cmluZzo6YWRv
cHQocmVzdWx0KTsKLX0KLQotQ1N0cmluZyBUZXh0Q29kZWNHdGs6OmVuY29kZShjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFibGVIYW5kbGluZyBoYW5kbGlu
ZykKLXsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuICIiOwotCi0gICAgaWYgKCFt
X2ljb252RW5jb2RlcikKLSAgICAgICAgY3JlYXRlSUNvbnZFbmNvZGVyKCk7Ci0gICAgaWYgKCFt
X2ljb252RW5jb2RlcikgewotICAgICAgICBMT0dfRVJST1IoIkVycm9yIGNyZWF0aW5nIElDb252
IGVuY29kZXIgZXZlbiB0aG91Z2ggZW5jb2Rpbmcgd2FzIGluIHRhYmxlLiIpOwotICAgICAgICBy
ZXR1cm4gQ1N0cmluZygpOwotICAgIH0KLQotICAgIGdzaXplIGJ5dGVzUmVhZCA9IDA7Ci0gICAg
Z3NpemUgYnl0ZXNXcml0dGVuID0gMDsKLSAgICBjb25zdCBnY2hhciogaW5wdXQgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IGNoYXIqPihjaGFyYWN0ZXJzKTsKLSAgICBnc2l6ZSBpbnB1dExlbmd0
aCA9IGxlbmd0aCAqIHNpemVvZihVQ2hhcik7Ci0gICAgZ2NoYXIgYnVmZmVyW0NvbnZlcnNpb25C
dWZmZXJTaXplXTsKLSAgICBWZWN0b3I8Y2hhcj4gcmVzdWx0OwotICAgIEdPd25QdHI8R0Vycm9y
PiBlcnJvcjsKLQotICAgIHNpemVfdCBzaXplID0gMDsKLSAgICBkbyB7Ci0gICAgICAgIGdfY29u
dmVydGVyX2NvbnZlcnQoR19DT05WRVJURVIobV9pY29udkVuY29kZXIuZ2V0KCkpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlucHV0LCBpbnB1dExlbmd0aCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBidWZmZXIsIHNpemVvZihidWZmZXIpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdfQ09OVkVSVEVSX0lOUFVUX0FUX0VORCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmYnl0ZXNSZWFkLCAmYnl0ZXNXcml0dGVuLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZlcnJvci5vdXRQdHIoKSk7Ci0gICAgICAgIGlucHV0ICs9IGJ5dGVzUmVhZDsKLSAg
ICAgICAgaW5wdXRMZW5ndGggLT0gYnl0ZXNSZWFkOwotICAgICAgICBpZiAoYnl0ZXNXcml0dGVu
ID4gMCkgewotICAgICAgICAgICAgcmVzdWx0Lmdyb3coc2l6ZSArIGJ5dGVzV3JpdHRlbik7Ci0g
ICAgICAgICAgICBtZW1jcHkocmVzdWx0LmRhdGEoKSArIHNpemUsIGJ1ZmZlciwgYnl0ZXNXcml0
dGVuKTsKLSAgICAgICAgICAgIHNpemUgKz0gYnl0ZXNXcml0dGVuOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGVycm9yICYmIGdfZXJyb3JfbWF0Y2hlcyhlcnJvci5nZXQoKSwgR19JT19FUlJP
UiwgR19JT19FUlJPUl9JTlZBTElEX0RBVEEpKSB7Ci0gICAgICAgICAgICBVQ2hhciBjb2RlUG9p
bnQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4oaW5wdXQpWzBdOwotICAgICAgICAg
ICAgVW5lbmNvZGFibGVSZXBsYWNlbWVudEFycmF5IHJlcGxhY2VtZW50OwotICAgICAgICAgICAg
aW50IHJlcGxhY2VtZW50TGVuZ3RoID0gVGV4dENvZGVjOjpnZXRVbmVuY29kYWJsZVJlcGxhY2Vt
ZW50KGNvZGVQb2ludCwgaGFuZGxpbmcsIHJlcGxhY2VtZW50KTsKLQotICAgICAgICAgICAgLy8g
Q29uc3VtZSB0aGUgaW52YWxpZCBjaGFyYWN0ZXIuCi0gICAgICAgICAgICBpbnB1dCArPSBzaXpl
b2YoVUNoYXIpOwotICAgICAgICAgICAgaW5wdXRMZW5ndGggLT0gc2l6ZW9mKFVDaGFyKTsKLQot
ICAgICAgICAgICAgLy8gQXBwZW5kIHJlcGxhY2VtZW50IHN0cmluZyB0byByZXN1bHQgYnVmZmVy
LgotICAgICAgICAgICAgcmVzdWx0Lmdyb3coc2l6ZSArIHJlcGxhY2VtZW50TGVuZ3RoKTsKLSAg
ICAgICAgICAgIG1lbWNweShyZXN1bHQuZGF0YSgpICsgc2l6ZSwgcmVwbGFjZW1lbnQsIHJlcGxh
Y2VtZW50TGVuZ3RoKTsKLSAgICAgICAgICAgIHNpemUgKz0gcmVwbGFjZW1lbnRMZW5ndGg7Ci0K
LSAgICAgICAgICAgIGVycm9yLmNsZWFyKCk7Ci0gICAgICAgIH0KLSAgICB9IHdoaWxlIChpbnB1
dExlbmd0aCAmJiAhZXJyb3IuZ2V0KCkpOwotCi0gICAgaWYgKGVycm9yKSB7Ci0gICAgICAgIExP
R19FUlJPUigiR0lDb252IGNvbnZlcnNpb24gZXJyb3IsIENvZGUgJWQ6IFwiJXNcIiIsIGVycm9y
LT5jb2RlLCBlcnJvci0+bWVzc2FnZSk7Ci0gICAgICAgIHJldHVybiBDU3RyaW5nKCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIENTdHJpbmcocmVzdWx0LmRhdGEoKSwgc2l6ZSk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvZ3RrL1RleHRDb2RlY0d0ay5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsv
VGV4dENvZGVjR3RrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2NzA0ODRkOWQy
ZmY3MWU2OTFlZjI4NmI1YTc0ZmZmYzU4YTdlYjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9ndGsvVGV4
dENvZGVjR3RrLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IDxhcEBueXBvcC5jb20+
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggSsO8cmcgQmlsbGV0ZXIgPGpAYml0cm9uLmNoPgotICog
Q29weXJpZ2h0IChDKSAyMDA5IERvbWluaWsgUsO2dHRzY2hlcyA8ZG9taW5pay5yb2V0dHNjaGVz
QGFjY2Vzcy1jb21wYW55LmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBUZXh0Q29kZWNHVEtfaAotI2Rl
ZmluZSBUZXh0Q29kZWNHVEtfaAotCi0jaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgot
I2luY2x1ZGUgPGdsaWIuaD4KLSNpbmNsdWRlICJUZXh0Q29kZWMuaCIKLSNpbmNsdWRlICJUZXh0
RW5jb2RpbmcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0gICAgY2xhc3MgVGV4dENvZGVj
R3RrIDogcHVibGljIFRleHRDb2RlYyB7Ci0gICAgcHVibGljOgotICAgICAgICBzdGF0aWMgdm9p
ZCByZWdpc3RlckJhc2VFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhcik7Ci0gICAg
ICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyQmFzZUNvZGVjcyhUZXh0Q29kZWNSZWdpc3RyYXIpOwot
Ci0gICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRXh0ZW5kZWRFbmNvZGluZ05hbWVzKEVuY29k
aW5nTmFtZVJlZ2lzdHJhcik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyRXh0ZW5kZWRD
b2RlY3MoVGV4dENvZGVjUmVnaXN0cmFyKTsKLQotICAgICAgICBUZXh0Q29kZWNHdGsoY29uc3Qg
VGV4dEVuY29kaW5nJik7Ci0gICAgICAgIHZpcnR1YWwgflRleHRDb2RlY0d0aygpOwotCi0gICAg
ICAgIHZpcnR1YWwgU3RyaW5nIGRlY29kZShjb25zdCBjaGFyKiwgc2l6ZV90IGxlbmd0aCwgYm9v
bCBmbHVzaCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpOwotICAgICAgICB2aXJ0
dWFsIENTdHJpbmcgZW5jb2RlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgVW5lbmNvZGFi
bGVIYW5kbGluZyk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2b2lkIGNyZWF0ZUlDb252RGVj
b2RlcigpIGNvbnN0OwotICAgICAgICB2b2lkIGNyZWF0ZUlDb252RW5jb2RlcigpIGNvbnN0Owot
Ci0gICAgICAgIFRleHRFbmNvZGluZyBtX2VuY29kaW5nOwotICAgICAgICBzaXplX3QgbV9udW1C
dWZmZXJlZEJ5dGVzOwotICAgICAgICB1bnNpZ25lZCBjaGFyIG1fYnVmZmVyZWRCeXRlc1sxNl07
IC8vIGJpZ2dlciB0aGFuIGFueSBzaW5nbGUgbXVsdGktYnl0ZSBjaGFyYWN0ZXIgICAgICAgIAot
ICAgICAgICBtdXRhYmxlIEdSZWZQdHI8R0NoYXJzZXRDb252ZXJ0ZXI+IG1faWNvbnZEZWNvZGVy
OwotICAgICAgICBtdXRhYmxlIEdSZWZQdHI8R0NoYXJzZXRDb252ZXJ0ZXI+IG1faWNvbnZFbmNv
ZGVyOwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFRleHRD
b2RlY0dUS19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvYXV0b3Rvb2xzL0ZpbmREZXBlbmRlbmNpZXMu
bTQgYi9Tb3VyY2UvYXV0b3Rvb2xzL0ZpbmREZXBlbmRlbmNpZXMubTQKaW5kZXggZjFlZTRiZGIy
YzNmYTcwZTE4NTE1MmY2NDI3OTNjYmUzMDUxOGY2MC4uMTBlNjM1ZDg3ZmE0OTA1NWYyNTliODY5
NDdjMzY5OThkYzhjZjgyZiAxMDA2NDQKLS0tIGEvU291cmNlL2F1dG90b29scy9GaW5kRGVwZW5k
ZW5jaWVzLm00CisrKyBiL1NvdXJjZS9hdXRvdG9vbHMvRmluZERlcGVuZGVuY2llcy5tNApAQCAt
MTA2LDM0ICsxMDYsMjggQEAgR0xJQl9DT01QSUxFX1JFU09VUkNFUz1gJFBLR19DT05GSUcgLS12
YXJpYWJsZSBnbGliX2NvbXBpbGVfcmVzb3VyY2VzIGdpby0yLjBgCiBBQ19TVUJTVChHTElCX0NP
TVBJTEVfUkVTT1VSQ0VTKQogR0xJQl9HU0VUVElOR1MKIAotaWYgdGVzdCAiJHdpdGhfdW5pY29k
ZV9iYWNrZW5kIiA9ICJpY3UiOyB0aGVuCi0gICAgIyBUT0RPOiB1c2UgcGtnLWNvbmZpZyAoYWZ0
ZXIgQ0ZMQUdTIGluIHRoZWlyIC5wYyBmaWxlcyBhcmUgY2xlYW5lZCB1cCkuCi0gICAgY2FzZSAi
JGhvc3QiIGluCi0gICAgICAgICotKi1kYXJ3aW4qKQotICAgICAgICAgICAgVU5JQ09ERV9DRkxB
R1M9Ii1JJHNyY2Rpci9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaWN1IC1JJHNyY2Rpci9Tb3VyY2Uv
V2ViQ29yZS9pY3UiCi0gICAgICAgICAgICBVTklDT0RFX0xJQlM9Ii1saWN1Y29yZSIKLSAgICAg
ICAgICAgIDs7Ci0gICAgICAgICotKi1taW5ndyopCi0gICAgICAgICAgICBVTklDT0RFX0NGTEFH
Uz0iIgotICAgICAgICAgICAgVU5JQ09ERV9MSUJTPSItbGljdWkxOG4gLWxpY3V1YyIKLSAgICAg
ICAgICAgIDs7Ci0gICAgICAgICopCi0gICAgICAgICAgICBBQ19QQVRIX1BST0coaWN1X2NvbmZp
ZywgaWN1LWNvbmZpZywgbm8pCi0gICAgICAgICAgICBpZiB0ZXN0ICIkaWN1X2NvbmZpZyIgPSAi
bm8iOyB0aGVuCi0gICAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtDYW5ub3QgZmluZCBpY3Ut
Y29uZmlnLiBUaGUgSUNVIGxpYnJhcnkgaXMgbmVlZGVkLl0pCi0gICAgICAgICAgICBmaQotCi0g
ICAgICAgICAgICAjIFdlIGRvbid0IHVzZSAtLWNmbGFncyBhcyB0aGlzIGdpdmVzIHVzIGEgbG90
IG9mIHRoaW5ncyB0aGF0IHdlIGRvbid0IG5lY2Vzc2FyaWx5IHdhbnQsCi0gICAgICAgICAgICAj
IGxpa2UgZGVidWdnaW5nIGFuZCBvcHRpbWl6YXRpb24gZmxhZ3MuIFNlZSBtYW4gKDEpIGljdS1j
b25maWcgZm9yIG1vcmUgaW5mby4KLSAgICAgICAgICAgIFVOSUNPREVfQ0ZMQUdTPWAkaWN1X2Nv
bmZpZyAtLWNwcGZsYWdzYAotICAgICAgICAgICAgVU5JQ09ERV9MSUJTPWAkaWN1X2NvbmZpZyAt
LWxkZmxhZ3MtbGlic29ubHlgCi0gICAgICAgICAgICA7OwotICAgIGVzYWMKLWZpCi0KLWlmIHRl
c3QgIiR3aXRoX3VuaWNvZGVfYmFja2VuZCIgPSAiZ2xpYiI7IHRoZW4KLSAgICBQS0dfQ0hFQ0tf
TU9EVUxFUyhbVU5JQ09ERV0sIFtnbGliLTIuMCBwYW5nbyA+PSBwYW5nb19yZXF1aXJlZF92ZXJz
aW9uXSkKLWZpCisjIFRPRE86IHVzZSBwa2ctY29uZmlnIChhZnRlciBDRkxBR1MgaW4gdGhlaXIg
LnBjIGZpbGVzIGFyZSBjbGVhbmVkIHVwKS4KK2Nhc2UgIiRob3N0IiBpbgorICAgICotKi1kYXJ3
aW4qKQorICAgICAgICBVTklDT0RFX0NGTEFHUz0iLUkkc3JjZGlyL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pY3UgLUkkc3JjZGlyL1NvdXJjZS9XZWJDb3JlL2ljdSIKKyAgICAgICAgVU5JQ09ERV9M
SUJTPSItbGljdWNvcmUiCisgICAgICAgIDs7CisgICAgKi0qLW1pbmd3KikKKyAgICAgICAgVU5J
Q09ERV9DRkxBR1M9IiIKKyAgICAgICAgVU5JQ09ERV9MSUJTPSItbGljdWkxOG4gLWxpY3V1YyIK
KyAgICAgICAgOzsKKyAgICAqKQorICAgICAgICBBQ19QQVRIX1BST0coaWN1X2NvbmZpZywgaWN1
LWNvbmZpZywgbm8pCisgICAgICAgIGlmIHRlc3QgIiRpY3VfY29uZmlnIiA9ICJubyI7IHRoZW4K
KyAgICAgICAgICAgIEFDX01TR19FUlJPUihbQ2Fubm90IGZpbmQgaWN1LWNvbmZpZy4gVGhlIElD
VSBsaWJyYXJ5IGlzIG5lZWRlZC5dKQorICAgICAgICBmaQorCisgICAgICAgICMgV2UgZG9uJ3Qg
dXNlIC0tY2ZsYWdzIGFzIHRoaXMgZ2l2ZXMgdXMgYSBsb3Qgb2YgdGhpbmdzIHRoYXQgd2UgZG9u
J3QgbmVjZXNzYXJpbHkgd2FudCwKKyAgICAgICAgIyBsaWtlIGRlYnVnZ2luZyBhbmQgb3B0aW1p
emF0aW9uIGZsYWdzLiBTZWUgbWFuICgxKSBpY3UtY29uZmlnIGZvciBtb3JlIGluZm8uCisgICAg
ICAgIFVOSUNPREVfQ0ZMQUdTPWAkaWN1X2NvbmZpZyAtLWNwcGZsYWdzYAorICAgICAgICBVTklD
T0RFX0xJQlM9YCRpY3VfY29uZmlnIC0tbGRmbGFncy1saWJzb25seWAKKyAgICAgICAgOzsKK2Vz
YWMKIAogQUNfU1VCU1QoW1VOSUNPREVfQ0ZMQUdTXSkKIEFDX1NVQlNUKFtVTklDT0RFX0xJQlNd
KQpkaWZmIC0tZ2l0IGEvU291cmNlL2F1dG90b29scy9SZWFkQ29tbWFuZExpbmVBcmd1bWVudHMu
bTQgYi9Tb3VyY2UvYXV0b3Rvb2xzL1JlYWRDb21tYW5kTGluZUFyZ3VtZW50cy5tNAppbmRleCBm
MTZhMTg1Y2ZhZDMxYWQxMGM3ODE0ZGQxOGE0Zjc5NTIzZDMxOTE0Li45ZThlOGYyNWRmYWRkMjY3
MzVhNGMzZDhkYTZkYzFlMDc1MGM0ODFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvYXV0b3Rvb2xzL1Jl
YWRDb21tYW5kTGluZUFyZ3VtZW50cy5tNAorKysgYi9Tb3VyY2UvYXV0b3Rvb2xzL1JlYWRDb21t
YW5kTGluZUFyZ3VtZW50cy5tNApAQCAtNTcsMTkgKzU3LDYgQEAgQUNfQVJHX1dJVEgodGFyZ2V0
LAogICAgIFt3aXRoX3RhcmdldD0ieDExIl0pCiBBQ19NU0dfUkVTVUxUKFskd2l0aF90YXJnZXRd
KQogCi1BQ19NU0dfQ0hFQ0tJTkcoW3doaWNoIFVuaWNvZGUgYmFja2VuZCB0byB1c2VdKQotQUNf
QVJHX1dJVEgodW5pY29kZV9iYWNrZW5kLCAKLSAgICBBQ19IRUxQX1NUUklORyhbLS13aXRoLXVu
aWNvZGUtYmFja2VuZD1APDpAaWN1L2dsaWJAOj5AXSwKLSAgICAgICAgW1NlbGVjdCBVbmljb2Rl
IGJhY2tlbmQgKFdBUk5JTkc6IHRoZSBnbGliLWJhc2VkIGJhY2tlbmQgaXMgc2xvdywgYW5kIGlu
Y29tcGxldGUpIFtkZWZhdWx0PWljdV1dKSwKLSAgICBbCi0gICAgICAgIGNhc2UgIiR3aXRoX3Vu
aWNvZGViYWNrZW5kIiBpbgotICAgICAgICAgICAgaWN1fGdsaWIpIDs7Ci0gICAgICAgICAgICAq
KSBBQ19NU0dfRVJST1IoW0ludmFsaWQgVW5pY29kZSBiYWNrZW5kOiBtdXN0IGJlIGljdSBvciBn
bGliLl0pIDs7Ci0gICAgICAgICBlc2FjCi0gICAgXSwKLSAgICBbd2l0aF91bmljb2RlX2JhY2tl
bmQ9ImljdSJdKQotQUNfTVNHX1JFU1VMVChbJHdpdGhfdW5pY29kZV9iYWNrZW5kXSkKLQogQUNf
TVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGVuYWJsZSBzcGVsbGNoZWNrIHN1cHBvcnRdKQogQUNf
QVJHX0VOQUJMRShbc3BlbGxjaGVja10sCiAgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1z
cGVsbGNoZWNrXSxbZW5hYmxlIHN1cHBvcnQgZm9yIHNwZWxsY2hlY2tdKV0sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvYXV0b3Rvb2xzL1NldHVwQXV0b2NvbmZIZWFkZXIubTQgYi9Tb3VyY2UvYXV0b3Rv
b2xzL1NldHVwQXV0b2NvbmZIZWFkZXIubTQKaW5kZXggMDhiNTgzZTM3MmUyY2I2MWUxOTQ3ZmE0
MTkyOTA3NjVlYmU0NDRjOC4uM2RkOTJmMDE5NDQ1OGRmNWJkMDdmYzZkM2EyODg5YTUwMTdiMzc3
MSAxMDA2NDQKLS0tIGEvU291cmNlL2F1dG90b29scy9TZXR1cEF1dG9jb25mSGVhZGVyLm00Cisr
KyBiL1NvdXJjZS9hdXRvdG9vbHMvU2V0dXBBdXRvY29uZkhlYWRlci5tNApAQCAtNCw2ICs0LDcg
QEAgQUNfREVGSU5FKFtXVEZfVVNFX0ZSRUVUWVBFXSwgWzFdLCBbIF0pCiBBQ19ERUZJTkUoW1dU
Rl9VU0VfSEFSRkJVWlpdLCBbMV0sIFsgXSkKIEFDX0RFRklORShbV1RGX1VTRV9TT1VQXSwgWzFd
LCBbIF0pCiBBQ19ERUZJTkUoW1dURl9VU0VfV0VCUF0sIFsxXSwgWyBdKQorQUNfREVGSU5FKFtX
VEZfVVNFX0lDVV9VTklDT0RFXSwgWzFdLCBbIF0pCiBBQ19ERUZJTkVfVU5RVU9URUQoR0VUVEVY
VF9QQUNLQUdFLCIkR0VUVEVYVF9QQUNLQUdFIiwgW1RoZSBnZXR0ZXh0IGNhdGFsb2cgbmFtZV0p
CiAKIGlmIHRlc3QgIiRlbmFibGVfZGVidWciID0gInllcyI7IHRoZW4KQEAgLTQ4LDEyICs0OSw2
IEBAIGlmIHRlc3QgIiR3aXRoX3RhcmdldCIgPSAieDExIjsgdGhlbgogICAgIEFDX0RFRklORShb
V1RGX1BMQVRGT1JNX1gxMV0sIFsxXSwgW0RlZmluZSBpZiB0YXJnZXQgaXMgWDExXSkKIGZpCiAK
LWlmIHRlc3QgIiR3aXRoX3VuaWNvZGVfYmFja2VuZCIgPSAiaWN1IjsgdGhlbgotICAgIEFDX0RF
RklORShbV1RGX1VTRV9JQ1VfVU5JQ09ERV0sIFsxXSwgWyBdKQotZWxzZQotICAgIEFDX0RFRklO
RShbV1RGX1VTRV9HTElCX1VOSUNPREVdLCBbMV0sIFsgXSkKLWZpCi0KIGlmIHRlc3QgIiRlbmFi
bGVfZmFzdF9tYWxsb2MiID0gIm5vIjsgdGhlbgogICAgIEFDX0RFRklORShbV1RGX1NZU1RFTV9N
QUxMT0NdLCBbMV0sIFsgXSkKIGZpCmRpZmYgLS1naXQgYS9Tb3VyY2UvYXV0b3Rvb2xzL1NldHVw
QXV0b21ha2UubTQgYi9Tb3VyY2UvYXV0b3Rvb2xzL1NldHVwQXV0b21ha2UubTQKaW5kZXggMTYw
MWNkOWIwMzk1MDBhYmU2ZjljMGVmOGQxZGJiMTM4NzRkOGY2YS4uNTIyM2Q1NmI5Y2Y3MjNkZjEz
MTM3NmViMjc4MzczMWE5ZWIxYWVmMCAxMDA2NDQKLS0tIGEvU291cmNlL2F1dG90b29scy9TZXR1
cEF1dG9tYWtlLm00CisrKyBiL1NvdXJjZS9hdXRvdG9vbHMvU2V0dXBBdXRvbWFrZS5tNApAQCAt
MjcsMTAgKzI3LDYgQEAgQU1fQ09ORElUSU9OQUwoW1RBUkdFVF9XSU4zMl0sIFt0ZXN0ICIkd2l0
aF90YXJnZXQiID0gIndpbjMyIl0pCiBBTV9DT05ESVRJT05BTChbVEFSR0VUX1FVQVJUWl0sIFt0
ZXN0ICIkd2l0aF90YXJnZXQiID0gInF1YXJ0eiJdKQogQU1fQ09ORElUSU9OQUwoW1RBUkdFVF9E
SVJFQ1RGQl0sIFt0ZXN0ICIkd2l0aF90YXJnZXQiID0gImRpcmVjdGZiIl0pCiAKLSMgVW5pY29k
ZSBiYWNrZW5kIGNvbmRpdGlvbmFscy4KLUFNX0NPTkRJVElPTkFMKFtVU0VfSUNVX1VOSUNPREVd
LCBbdGVzdCAiJHdpdGhfdW5pY29kZV9iYWNrZW5kIiA9ICJpY3UiXSkKLUFNX0NPTkRJVElPTkFM
KFtVU0VfR0xJQl9VTklDT0RFXSwgW3Rlc3QgIiR3aXRoX3VuaWNvZGVfYmFja2VuZCIgPSAiZ2xp
YiJdKQotCiAjIEdTdHJlYW1lciBmZWF0dXJlIGNvbmRpdGlvbmFscy4KIEFNX0NPTkRJVElPTkFM
KFtVU0VfR1NUUkVBTUVSXSwgW3Rlc3QgIiRoYXZlX2dzdHJlYW1lciIgPSAieWVzIl0pCiBBTV9D
T05ESVRJT05BTChbVVNFX1dFQkFVRElPX0dTVFJFQU1FUl0sIFt0ZXN0ICIkZW5hYmxlX3dlYl9h
dWRpbyIgPSAieWVzIl0pCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXgg
NWM3MzMwOTI0OGM2ZGJhNDQ1MTM3OTVjMGQwOTVmNzcxMjBmNzhmZC4uNDNkMDdjZjQ0ZWUyNWI4
ZDE0MWIwZWRmZWIxOWJjMzlmODQzYjU0YiAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEzLTAyLTEyICBNYXJ0aW4gUm9iaW5zb24gIDxt
cm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBSZW1vdmUgdGhlIEdMaWIgdW5p
Y29kZSBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMDk2MjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSZW1vdmUgcmVmZXJlbmNlcyB0byB0aGUgR0xpYiB1bmljb2RlIGJhY2tlbmQgZnJvbSBj
b25maWd1cmF0aW9uLgorCisgICAgICAgICogU291cmNlL2F1dG90b29scy9GaW5kRGVwZW5kZW5j
aWVzLm00OgorICAgICAgICAqIFNvdXJjZS9hdXRvdG9vbHMvUmVhZENvbW1hbmRMaW5lQXJndW1l
bnRzLm00OgorICAgICAgICAqIFNvdXJjZS9hdXRvdG9vbHMvU2V0dXBBdXRvY29uZkhlYWRlci5t
NDoKKyAgICAgICAgKiBTb3VyY2UvYXV0b3Rvb2xzL1NldHVwQXV0b21ha2UubTQ6CisKIDIwMTMt
MDItMTIgIENocmlzdG9waGUgRHVtZXogIDxjaC5kdW1lekBzaXNhLnNhbXN1bmcuY29tPgogCiAg
ICAgICAgIFJlbW92ZSByZW1haW5pbmcgdHJhY2VzIG9mIFdlYiBJbnRlbnRzCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>