<?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>97954</bug_id>
          
          <creation_ts>2012-09-28 17:20:23 -0700</creation_ts>
          <short_desc>Remove Java bridge</short_desc>
          <delta_ts>2012-09-28 17:36:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>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="Anders Carlsson">andersca</reporter>
          <assigned_to name="Anders Carlsson">andersca</assigned_to>
          <cc>benjamin</cc>
    
    <cc>japhet</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>731073</commentid>
    <comment_count>0</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-09-28 17:20:23 -0700</bug_when>
    <thetext>Remove Java bridge</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731075</commentid>
    <comment_count>1</comment_count>
      <attachid>166334</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-09-28 17:22:52 -0700</bug_when>
    <thetext>Created attachment 166334
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731082</commentid>
    <comment_count>2</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2012-09-28 17:27:58 -0700</bug_when>
    <thetext>Awesome</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731090</commentid>
    <comment_count>3</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2012-09-28 17:36:36 -0700</bug_when>
    <thetext>Committed r129964: &lt;http://trac.webkit.org/changeset/129964&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166334</attachid>
            <date>2012-09-28 17:22:52 -0700</date>
            <delta_ts>2012-09-28 17:25:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97954-20120928172209.patch</filename>
            <type>text/plain</type>
            <size>185720</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5OTYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGQ0ZTBlMWJlMTkxNDg1MGZiNWRlYWMx
NmMwNjNiN2MwOTMyM2UxZjEuLmI1ZmI5MWYxZTg2NzgyOWNjOWNmNTZkMTliMjQ2YjNlMjJhZTM4
NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMDktMjggIEFuZGVycyBDYXJsc3NvbiAgPGFu
ZGVyc2NhQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgSmF2YSBicmlkZ2UKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3OTU0CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIEphdmEgYnJpZGdlIGlz
IG5vdCB1c2VkIGJ5IGFueSBwb3J0OyBNYWMgbm93IGhhcyBhIE5QQVBJIEphdmEgcGx1Zy1pbi4K
KworICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorCiAyMDEyLTA5LTI4ICBLYWkgS29laG5lICA8
a2FpLmtvZWhuZUBkaWdpYS5jb20+CiAKICAgICAgICAgRGlzYWJsZSBZQVJSX0pJVCBmb3IgV2lu
ZG93cyA2NCBiaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3ZWIxNzI3ZWQ4M2M0MDQyZDhjNDRhODRhMmFhOTU4
YTViM2RjMWE2Li42NzNhZTdmMWJjZDc0MGFlNjI0Y2YyMDg4OThlNTUzOGI0MDYxN2Q5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDUgKzEsNDkgQEAKIDIwMTItMDktMjggIEFuZGVycyBDYXJsc3NvbiAgPGFu
ZGVyc2NhQGFwcGxlLmNvbT4KIAorICAgICAgICBSZW1vdmUgSmF2YSBicmlkZ2UKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3OTU0CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIEphdmEgYnJpZGdlIGlz
IG5vdCB1c2VkIGJ5IGFueSBwb3J0OyBNYWMgbm93IGhhcyBhIE5QQVBJIEphdmEgcGx1Zy1pbi4K
KworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OlNjcmlwdENvbnRyb2xs
ZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuaDoKKyAgICAgICAg
KFNjcmlwdENvbnRyb2xsZXIpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xs
ZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjcmVhdGVTY3Jp
cHRJbnN0YW5jZUZvcldpZGdldCk6CisgICAgICAgICogYnJpZGdlL2puaS9KTklVdGlsaXR5LmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBicmlkZ2Uvam5pL0pOSVV0aWxpdHkuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBicmlkZ2Uvam5pL0phdmFUeXBlLmg6IFJlbW92ZWQuCisgICAgICAgICogYnJp
ZGdlL2puaS9Kb2JqZWN0V3JhcHBlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYnJpZGdlL2pu
aS9Kb2JqZWN0V3JhcHBlci5oOiBSZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9qbmkvam5pX2pz
b2JqZWN0Lmg6IFJlbW92ZWQuCisgICAgICAgICogYnJpZGdlL2puaS9qbmlfanNvYmplY3QubW06
IFJlbW92ZWQuCisgICAgICAgICogYnJpZGdlL2puaS9qbmlfb2JqYy5tbTogUmVtb3ZlZC4KKyAg
ICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KTklVdGlsaXR5UHJpdmF0ZS5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogYnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZhdGUuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KYXZhQXJyYXlKU0MuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIGJyaWRnZS9qbmkvanNjL0phdmFBcnJheUpTQy5oOiBSZW1vdmVkLgorICAgICAgICAqIGJy
aWRnZS9qbmkvanNjL0phdmFDbGFzc0pTQy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYnJpZGdl
L2puaS9qc2MvSmF2YUNsYXNzSlNDLmg6IFJlbW92ZWQuCisgICAgICAgICogYnJpZGdlL2puaS9q
c2MvSmF2YUZpZWxkSlNDLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9K
YXZhRmllbGRKU0MuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KYXZhSW5z
dGFuY2VKU0MuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0phdmFJbnN0
YW5jZUpTQy5oOiBSZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0phdmFNZXRob2RK
U0MuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0phdmFNZXRob2RKU0Mu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KYXZhUnVudGltZU9iamVjdC5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogYnJpZGdlL2puaS9qc2MvSmF2YVJ1bnRpbWVPYmplY3Qu
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KYXZhU3RyaW5nSlNDLmg6IFJl
bW92ZWQuCisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfcm9vdC5oOgorICAgICAgICAqIGxvYWRl
ci9GcmFtZUxvYWRlckNsaWVudC5oOgorICAgICAgICAoRnJhbWVMb2FkZXJDbGllbnQpOgorCisy
MDEyLTA5LTI4ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CisKICAgICAg
ICAgUmVtb3ZlIEluc3RhbmNlOjpzZXREaWRFeGVjdXRlRnVuY3Rpb24KICAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3OTUyCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwpp
bmRleCBhYzkxMzA4OWIwODZiOGU3ZTgzODA0Yjk1YTNmOGFhNjA1YTk3N2EyLi45MGU3ZmI5ZTRl
MDEyNjVmMDFlZTE3OTkwMGE4ZmY4YzRlNTU3NjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTYgQEAKKzIwMTItMDktMjggIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNv
bT4KKworICAgICAgICBSZW1vdmUgSmF2YSBicmlkZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3OTU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIEphdmEgYnJpZGdlIGlzIG5vdCB1c2VkIGJ5IGFu
eSBwb3J0OyBNYWMgbm93IGhhcyBhIE5QQVBJIEphdmEgcGx1Zy1pbi4KKworICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lmg6CisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW06CisgICAgICAgIE1ha2Ugc3VyZSB0aGF0IHdl
IHRyeSB0byBsb2FkIHRoZSBOUEFQSSBKYXZhIHBsdWctaW4uCisKIDIwMTItMDktMjcgIEFuZGVy
cyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBHZXQgcmlkIG9mIG1v
cmUgdW51c2VkIFdLMSBwbHVnLWluIGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA1ZTdhNWRlNDdkZmExMWJj
MDdkMjhmYmNlNzdmMjY2MWEwMzQwNjYzLi5kYjgzNzhiNWU3ODVlMmIzNDM0NzY1MjQ0OTk3ZWZh
ZDQ2ZjZlNDQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDktMjggIEFuZGVy
cyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgSmF2YSBi
cmlkZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk3
OTU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhl
IEphdmEgYnJpZGdlIGlzIG5vdCB1c2VkIGJ5IGFueSBwb3J0OyBNYWMgbm93IGhhcyBhIE5QQVBJ
IEphdmEgcGx1Zy1pbi4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVMb2FkZXJDbGllbnQuY3BwOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuaDoKKyAgICAgICAgKFdlYkZyYW1lTG9hZGVyQ2xpZW50
KToKKwogMjAxMi0wOS0yOCAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS8xMjM5ODUzNz4gV2ViS2l0MiBsYWNrcyBBUEkgZm9yIGRpc2Fi
bGluZyBkb2N1bWVudC5jb29raWUgbGlrZSAtW1dlYlZpZXcgX3NldENvb2tpZUVuYWJsZWQ6XQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaCBiL1NvdXJjZS9XVEYvd3RmL1Bs
YXRmb3JtLmgKaW5kZXggYjE4ZmY5ZWYzNmFmYWZiZjNhOTk1NjY0MWY0YWUyMmI2OTc5ZDZhZS4u
ZDVkYTQ5YTk3MWM5OTIwOGNkM2QwY2M3ZGI3NWU5MTBjZjY1ZDUyNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvUGxhdGZvcm0uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCkBA
IC01NDAsOSArNTQwLDYgQEAKICNkZWZpbmUgV1RGX1VTRV9TQ1JPTExCQVJfUEFJTlRFUiAxCiAj
ZGVmaW5lIEhBVkVfWFBDIDEKICNlbmRpZgotI2lmICFkZWZpbmVkKEVOQUJMRV9KQVZBX0JSSURH
RSkKLSNkZWZpbmUgRU5BQkxFX0pBVkFfQlJJREdFIDEKLSNlbmRpZgogI2lmICFkZWZpbmVkKEVO
QUJMRV9EQVNIQk9BUkRfU1VQUE9SVCkKICNkZWZpbmUgRU5BQkxFX0RBU0hCT0FSRF9TVVBQT1JU
IDEKICNlbmRpZgpAQCAtNTkxLDcgKzU4OCw2IEBACiAjZGVmaW5lIEVOQUJMRV9HRU9MT0NBVElP
TiAxCiAjZGVmaW5lIEVOQUJMRV9JQ09OREFUQUJBU0UgMAogI2RlZmluZSBFTkFCTEVfSU5TUEVD
VE9SIDEKLSNkZWZpbmUgRU5BQkxFX0pBVkFfQlJJREdFIDAKICNkZWZpbmUgRU5BQkxFX05FVFND
QVBFX1BMVUdJTl9BUEkgMAogI2RlZmluZSBFTkFCTEVfT1JJRU5UQVRJT05fRVZFTlRTIDEKICNk
ZWZpbmUgRU5BQkxFX1JFUEFJTlRfVEhST1RUTElORyAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4
IGZiMTc2Njg4MzA5ZWQ1NzRlNjY1YzA5MDhhNDU5NjJjOTkxZjQ5OGQuLmI4NjUxYmIzMTM0YTUw
OTYzOTg3YWI2M2ZhYmI4OTlkZDQ3YzA0ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC0yMjkz
LDE5ICsyMjkzLDYgQEAgX19aTks3V2ViQ29yZTlGbG9hdFF1YWQxMmNvbnRhaW5zUXVhZEVSS1Mw
XwogX19aTks3V2ViQ29yZTlGbG9hdFF1YWQxM2NvbnRhaW5zUG9pbnRFUktOU18xMEZsb2F0UG9p
bnRFCiAjZW5kaWYKIAotI2lmIEVOQUJMRShKQVZBX0JSSURHRSkKLV9LSlNfSlNDcmVhdGVOYXRp
dmVKU09iamVjdAotX0tKU19KU09iamVjdF9KU0ZpbmFsaXplCi1fS0pTX0pTT2JqZWN0X0pTT2Jq
ZWN0Q2FsbAotX0tKU19KU09iamVjdF9KU09iamVjdEV2YWwKLV9LSlNfSlNPYmplY3RfSlNPYmpl
Y3RHZXRNZW1iZXIKLV9LSlNfSlNPYmplY3RfSlNPYmplY3RHZXRTbG90Ci1fS0pTX0pTT2JqZWN0
X0pTT2JqZWN0UmVtb3ZlTWVtYmVyCi1fS0pTX0pTT2JqZWN0X0pTT2JqZWN0U2V0TWVtYmVyCi1f
S0pTX0pTT2JqZWN0X0pTT2JqZWN0U2V0U2xvdAotX0tKU19KU09iamVjdF9KU09iamVjdFRvU3Ry
aW5nCi0jZW5kaWYKLQogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQogX19OUE5fQ29u
c3RydWN0CiBfX05QTl9DcmVhdGVPYmplY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyZmU1NGFlMjcyMmQxMDllNGM5ZDllM2Zm
MDRhZjhhYzdmNWM4YmJiLi42M2UxNTg1NTg1NWY2YjJlNTMxODRhNTBjMDZjNmYxYjc0ZDE0MDUy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC00MjYsOSArNDI2LDYgQEAKIAkJMUE1NjlDRkMwRDdFMkI4MjAwN0MzOTgzIC8qIGNf
cnVudGltZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUE1NjlDQ0IwRDdFMkI4MjAwN0MzOTgzIC8qIGNfcnVudGltZS5oICovOyB9OwogCQkxQTU2OUNG
RDBEN0UyQjgyMDA3QzM5ODMgLyogY191dGlsaXR5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNTY5Q0NDMEQ3RTJCODIwMDdDMzk4MyAvKiBjX3V0
aWxpdHkuY3BwICovOyB9OwogCQkxQTU2OUNGRTBEN0UyQjgyMDA3QzM5ODMgLyogY191dGlsaXR5
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTU2OUND
RDBEN0UyQjgyMDA3QzM5ODMgLyogY191dGlsaXR5LmggKi87IH07Ci0JCTFBNTY5RDAzMEQ3RTJC
ODIwMDdDMzk4MyAvKiBqbmlfanNvYmplY3QubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAxQTU2OUNEMzBEN0UyQjgyMDA3QzM5ODMgLyogam5pX2pzb2Jq
ZWN0Lm1tICovOyB9OwotCQkxQTU2OUQwNDBEN0UyQjgyMDA3QzM5ODMgLyogam5pX2pzb2JqZWN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTU2OUNE
NDBEN0UyQjgyMDA3QzM5ODMgLyogam5pX2pzb2JqZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMUE1NjlEMDUwRDdFMkI4MjAwN0MzOTgzIC8q
IGpuaV9vYmpjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUE1NjlDRDUwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9vYmpjLm1tICovOyB9OwogCQkxQTU2
OUQwQTBEN0UyQjgyMDA3QzM5ODMgLyogTlBfanNvYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE1NjlDREEwRDdFMkI4MjAwN0MzOTgzIC8q
IE5QX2pzb2JqZWN0LmNwcCAqLzsgfTsKIAkJMUE1NjlEMEIwRDdFMkI4MjAwN0MzOTgzIC8qIE5Q
X2pzb2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQTU2OUNEQjBEN0UyQjgyMDA3QzM5ODMgLyogTlBfanNvYmplY3QuaCAqLzsgfTsKIAkJMUE1
NjlEMEQwRDdFMkI4MjAwN0MzOTgzIC8qIG5wcnVudGltZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTU2OUNERDBEN0UyQjgyMDA3QzM5ODMgLyog
bnBydW50aW1lLmNwcCAqLzsgfTsKQEAgLTE2NTIsMTYgKzE2NDksMTAgQEAKIAkJNTkxM0EyNDIx
M0Q0OUVCQTAwRjVCMDVDIC8qIElkZW50aWZpZXJzRmFjdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTkxM0EyNDAxM0Q0OUVCQTAwRjVCMDVDIC8q
IElkZW50aWZpZXJzRmFjdG9yeS5oICovOyB9OwogCQk1OTMwOUExMTExRjRBRTU4MDAyNTA2MDMg
LyogRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5MzA5QTEwMTFGNEFFNTgwMDI1MDYwMyAvKiBEZXZp
Y2VPcmllbnRhdGlvbkNsaWVudE1vY2suY3BwICovOyB9OwogCQk1OTMwOUExMzExRjRBRTZBMDAy
NTA2MDMgLyogRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OTMwOUExMjExRjRBRTZBMDAyNTA2MDMgLyog
RGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTk2OTUwODIxMzIxMDU5OTAwQzNFRDE4IC8qIEpvYmpl
Y3RXcmFwcGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1OTY5NTA4MTEzMjEwNTk5MDBDM0VEMTggLyogSm9iamVjdFdyYXBwZXIuaCAqLzsgfTsKLQkJ
NTk2OTUwODQxMzIxMDVBNTAwQzNFRDE4IC8qIEpvYmplY3RXcmFwcGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5Njk1MDgzMTMyMTA1QTUwMEMz
RUQxOCAvKiBKb2JqZWN0V3JhcHBlci5jcHAgKi87IH07CiAJCTU5ODM2NUREMTM1NUY1NTcwMDFC
MTg1RCAvKiBKU1Bvc2l0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU5ODM2NURDMTM1NUY1M0MwMDFCMTg1RCAvKiBKU1Bvc2l0aW9u
Q2FsbGJhY2suaCAqLzsgfTsKIAkJNTk4MzY1REYxMzU1RjU2MjAwMUIxODVEIC8qIEpTUG9zaXRp
b25FcnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1OTgzNjVERTEzNTVGNTYyMDAxQjE4NUQgLyogSlNQb3NpdGlvbkVycm9yQ2FsbGJh
Y2suaCAqLzsgfTsKIAkJNTk4MzY1RTQxMzU1RjYwNDAwMUIxODVEIC8qIEpTUG9zaXRpb25DYWxs
YmFjay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
OTgzNjVFMzEzNTVGNjA0MDAxQjE4NUQgLyogSlNQb3NpdGlvbkNhbGxiYWNrLmNwcCAqLzsgfTsK
IAkJNTk4MzY1RTYxMzU1RjYwRDAwMUIxODVEIC8qIEpTUG9zaXRpb25FcnJvckNhbGxiYWNrLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5ODM2NUU1
MTM1NUY2MEQwMDFCMTg1RCAvKiBKU1Bvc2l0aW9uRXJyb3JDYWxsYmFjay5jcHAgKi87IH07Ci0J
CTU5OEQ3N0REMTMyNTQxRUUwMDc2MUIyMiAvKiBKYXZhQXJyYXlKU0MuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTk4RDc3REMxMzI1NDFFRTAwNzYx
QjIyIC8qIEphdmFBcnJheUpTQy5jcHAgKi87IH07Ci0JCTU5OEQ3N0RGMTMyNTQxRkEwMDc2MUIy
MiAvKiBKYXZhQXJyYXlKU0MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDU5OEQ3N0RFMTMyNTQxRkEwMDc2MUIyMiAvKiBKYXZhQXJyYXlKU0MuaCAqLzsg
fTsKLQkJNTk4RDc3RTExMzI1NDIwNDAwNzYxQjIyIC8qIEphdmFGaWVsZEpTQy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OThENzdFMDEzMjU0MjA0
MDA3NjFCMjIgLyogSmF2YUZpZWxkSlNDLmNwcCAqLzsgfTsKLQkJNTk4RDc3RTMxMzI1NDIwRTAw
NzYxQjIyIC8qIEphdmFGaWVsZEpTQy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTk4RDc3RTIxMzI1NDIwRTAwNzYxQjIyIC8qIEphdmFGaWVsZEpTQy5o
ICovOyB9OwogCQk1OTlFNzU5MDExMDU1QTFGMDBEOTA0RkEgLyogQnJpZGdlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OTlFNzU4RjExMDU1QTFGMDBE
OTA0RkEgLyogQnJpZGdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTlBODVFQTIxMTlENjhEOTAwREVGMUVGIC8qIERldmljZU9yaWVudGF0aW9u
RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTlBODVFQTExMTlENjhEOTAwREVGMUVGIC8qIERldmljZU9yaWVudGF0aW9uRXZlbnQuY3BwICov
OyB9OwogCQk1OUE4NUVBNDExOUQ2OEVDMDBERUYxRUYgLyogRGV2aWNlT3JpZW50YXRpb25FdmVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTlBODVF
QTMxMTlENjhFQzAwREVGMUVGIC8qIERldmljZU9yaWVudGF0aW9uRXZlbnQuaCAqLzsgfTsKQEAg
LTE2NzAsMjUgKzE2NjEsMTMgQEAKIAkJNTlBOEYxRDQxMUE2OTUwODAwMUFDMzRBIC8qIERldmlj
ZU9yaWVudGF0aW9uQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1OUE4RjFEMzExQTY5NTA4MDAxQUMzNEEgLyogRGV2aWNlT3JpZW50
YXRpb25Db250cm9sbGVyLmNwcCAqLzsgfTsKIAkJNTlBOEYxRDYxMUE2OTUxMzAwMUFDMzRBIC8q
IERldmljZU9yaWVudGF0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTlBOEYxRDUxMUE2OTUxMzAwMUFDMzRBIC8qIERldmljZU9y
aWVudGF0aW9uQ29udHJvbGxlci5oICovOyB9OwogCQk1OUE4RjFEODExQTY5NTIwMDAxQUMzNEEg
LyogRGV2aWNlT3JpZW50YXRpb25DbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU5QThGMUQ3MTFBNjk1MjAwMDFBQzM0QSAvKiBEZXZpY2VPcmll
bnRhdGlvbkNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTU5QTlFN0IwMTEwNDc1ODgwMERGQjRDMSAvKiBKYXZhSW5zdGFuY2VKU0MuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTlBOUU3QUYx
MTA0NzU4ODAwREZCNEMxIC8qIEphdmFJbnN0YW5jZUpTQy5jcHAgKi87IH07Ci0JCTU5QTlFN0Iy
MTEwNDc1OTQwMERGQjRDMSAvKiBKYXZhSW5zdGFuY2VKU0MuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5QTlFN0IxMTEwNDc1OTQwMERGQjRDMSAvKiBK
YXZhSW5zdGFuY2VKU0MuaCAqLzsgfTsKLQkJNTlCMEVFQTcxMzJBNkYyQTAwNDMzMUM3IC8qIEph
dmFUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1
OUIwRUVBNjEzMkE2RjJBMDA0MzMxQzcgLyogSmF2YVR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1OUI1OTc3MzExMDg2NTZCMDA3MTU5RTgg
LyogQnJpZGdlSlNDLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU5QjU5NzcyMTEwODY1NkIwMDcxNTlFOCAvKiBCcmlkZ2VKU0MuY3BwICovOyB9Owog
CQk1OUI1OTc3NTExMDg2NTc5MDA3MTU5RTggLyogQnJpZGdlSlNDLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OUI1OTc3NDExMDg2NTc5MDA3MTU5RTgg
LyogQnJpZGdlSlNDLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJNTlCQzM5M0YxMTA1NEExMzAwRkQ4NURCIC8qIEphdmFTdHJpbmdKU0MuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5QkMzOTNFMTEwNTRB
MTMwMEZEODVEQiAvKiBKYXZhU3RyaW5nSlNDLmggKi87IH07CiAJCTU5QzI3RjA1MTM4RDI4QzEw
MDc5QjdFMiAvKiBOZXR3b3JrUmVzb3VyY2VzRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OUMyN0YwNDEzOEQyOEMxMDA3OUI3RTIgLyogTmV0
d29ya1Jlc291cmNlc0RhdGEuY3BwICovOyB9OwogCQk1OUMyN0YwNzEzOEQyOENGMDA3OUI3RTIg
LyogTmV0d29ya1Jlc291cmNlc0RhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDU5QzI3RjA2MTM4RDI4Q0YwMDc5QjdFMiAvKiBOZXR3b3JrUmVzb3Vy
Y2VzRGF0YS5oICovOyB9OwogCQk1OUMyODA0NTEzOERDMjQxMDA3OUI3RTIgLyogWE1MRXJyb3Jz
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5QzI4
MDQzMTM4REMyNDEwMDc5QjdFMiAvKiBYTUxFcnJvcnMuY3BwICovOyB9OwogCQk1OUMyODA0NjEz
OERDMjQxMDA3OUI3RTIgLyogWE1MRXJyb3JzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1OUMyODA0NDEzOERDMjQxMDA3OUI3RTIgLyogWE1MRXJyb3Jz
LmggKi87IH07CiAJCTU5RDFDMTA0MTFFQjVEQ0YwMEI2MzhDOCAvKiBEZXZpY2VPcmllbnRhdGlv
bkRhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTlEMUMxMDMxMUVCNURDRjAwQjYzOEM4IC8qIERldmljZU9yaWVudGF0aW9uRGF0YS5jcHAgKi87
IH07Ci0JCTU5REU3OTA0MTNGMTZDN0YwMDA3RkNERiAvKiBKYXZhTWV0aG9kSlNDLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5REU3OTAzMTNGMTZD
N0YwMDA3RkNERiAvKiBKYXZhTWV0aG9kSlNDLmNwcCAqLzsgfTsKLQkJNTlERTc5MDYxM0YxNkM4
QzAwMDdGQ0RGIC8qIEphdmFNZXRob2RKU0MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU5REU3OTA1MTNGMTZDOEMwMDA3RkNERiAvKiBKYXZhTWV0aG9k
SlNDLmggKi87IH07Ci0JCTU5RTU2MEE3MTEwNTMzNjYwMEFBMTI1OCAvKiBKYXZhQ2xhc3NKU0Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5RTU2MEE2
MTEwNTMzNjYwMEFBMTI1OCAvKiBKYXZhQ2xhc3NKU0MuaCAqLzsgfTsKLQkJNTlFNTYwQTkxMTA1
MzM2RjAwQUExMjU4IC8qIEphdmFDbGFzc0pTQy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OUU1NjBBODExMDUzMzZGMDBBQTEyNTggLyogSmF2YUNs
YXNzSlNDLmNwcCAqLzsgfTsKLQkJNTlFRTEyMkMxMTA2MDgwNTAwODg1MTE2IC8qIEpOSVV0aWxp
dHlQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU5RUUxMjJCMTEwNjA4MDUwMDg4NTExNiAvKiBKTklVdGlsaXR5UHJpdmF0ZS5jcHAgKi87
IH07Ci0JCTU5RUUxMjJFMTEwNjA4MEYwMDg4NTExNiAvKiBKTklVdGlsaXR5UHJpdmF0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTlFRTEyMkQxMTA2
MDgwRjAwODg1MTE2IC8qIEpOSVV0aWxpdHlQcml2YXRlLmggKi87IH07Ci0JCTU5RUUxMjMwMTEw
NjA4MUYwMDg4NTExNiAvKiBKTklVdGlsaXR5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5RUUxMjJGMTEwNjA4MUYwMDg4NTExNiAvKiBKTklVdGls
aXR5LmNwcCAqLzsgfTsKLQkJNTlFRTEyMzIxMTA2MDgyOTAwODg1MTE2IC8qIEpOSVV0aWxpdHku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU5RUUxMjMx
MTEwNjA4MjkwMDg4NTExNiAvKiBKTklVdGlsaXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNUE1NzRGMjQxMzFEQjkzOTAwNDcxQjg4IC8qIFJl
bmRlclF1b3RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDVBNTc0RjIyMTMxREI5MzkwMDQ3MUI4OCAvKiBSZW5kZXJRdW90ZS5jcHAgKi87IH07CiAJ
CTVBNTc0RjI1MTMxREI5MzkwMDQ3MUI4OCAvKiBSZW5kZXJRdW90ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNUE1NzRGMjMxMzFEQjkzOTAwNDcxQjg4
IC8qIFJlbmRlclF1b3RlLmggKi87IH07CiAJCTVBNTc0RjI4MTMxREI5NkQwMDQ3MUI4OCAvKiBR
dW90ZXNEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDVBNTc0RjI2MTMxREI5NkQwMDQ3MUI4OCAvKiBRdW90ZXNEYXRhLmNwcCAqLzsgfTsKQEAg
LTYwMTksOCArNTk5OCw2IEBACiAJCUUxNjk4MDQ5MTEzMzY0NDcwMDg5NDExNSAvKiBDUnVudGlt
ZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMTY5ODA0ODExMzM2NDQ3MDA4OTQxMTUgLyogQ1J1bnRpbWVPYmplY3QuY3BwICovOyB9Owog
CQlFMTY5ODI1NTExMzQ2MjlEMDA4OTQxMTUgLyogT2JqQ1J1bnRpbWVPYmplY3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNjk4MjU0MTEzNDYyOUQw
MDg5NDExNSAvKiBPYmpDUnVudGltZU9iamVjdC5oICovOyB9OwogCQlFMTY5ODI2MDExMzQ2MzZB
MDA4OTQxMTUgLyogT2JqQ1J1bnRpbWVPYmplY3QubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTY5ODI1RjExMzQ2MzZBMDA4OTQxMTUgLyogT2JqQ1J1
bnRpbWVPYmplY3QubW0gKi87IH07Ci0JCUUxNjk4MjY0MTEzNDY3RjMwMDg5NDExNSAvKiBKYXZh
UnVudGltZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMTY5ODI2MzExMzQ2N0YzMDA4OTQxMTUgLyogSmF2YVJ1bnRpbWVPYmplY3QuY3Bw
ICovOyB9OwotCQlFMTY5ODI2ODExMzQ2ODA3MDA4OTQxMTUgLyogSmF2YVJ1bnRpbWVPYmplY3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNjk4MjY3
MTEzNDY4MDcwMDg5NDExNSAvKiBKYXZhUnVudGltZU9iamVjdC5oICovOyB9OwogCQlFMTZBODRG
OTE0Qzg1Q0NDMDAyOTc3REYgLyogQ1NTQm9yZGVySW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE2QTg0RjcxNEM4NUNDQzAwMjk3N0RGIC8q
IENTU0JvcmRlckltYWdlLmNwcCAqLzsgfTsKIAkJRTE2QTg0RkExNEM4NUNDQzAwMjk3N0RGIC8q
IENTU0JvcmRlckltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMTZBODRGODE0Qzg1Q0NDMDAyOTc3REYgLyogQ1NTQm9yZGVySW1hZ2UuaCAqLzsg
fTsKIAkJRTE3QTRBMUIwRDk3OTkxRDAwRkMxMEM2IC8qIERPTVNWR0FsdEdseXBoRWxlbWVudC5o
IGluIENvcHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNjVBQTZCQUMwRDk3NEEwMDAwMDU0MUFFIC8qIERPTVNWR0FsdEdseXBoRWxlbWVudC5o
ICovOyB9OwpAQCAtNzQ4Nyw5ICs3NDY0LDYgQEAKIAkJMUE1NjlDQ0IwRDdFMkI4MjAwN0MzOTgz
IC8qIGNfcnVudGltZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBjX3J1bnRp
bWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE1NjlDQ0MwRDdFMkI4MjAwN0Mz
OTgzIC8qIGNfdXRpbGl0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBjX3V0aWxpdHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTU2OUNDRDBE
N0UyQjgyMDA3QzM5ODMgLyogY191dGlsaXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IGNfdXRpbGl0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQTU2OUNE
MzBEN0UyQjgyMDA3QzM5ODMgLyogam5pX2pzb2JqZWN0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gam5pX2pzb2JqZWN0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkxQTU2OUNENDBEN0UyQjgyMDA3QzM5ODMgLyogam5pX2pzb2JqZWN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGpuaV9qc29iamVjdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkxQTU2OUNENTBEN0UyQjgyMDA3QzM5ODMgLyogam5pX29iamMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBqbmlfb2JqYy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE1NjlDREEwRDdFMkI4MjAwN0MzOTgzIC8q
IE5QX2pzb2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE5Q
X2pzb2JqZWN0LmNwcDsgcGF0aCA9IGJyaWRnZS9OUF9qc29iamVjdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFBNTY5Q0RCMEQ3RTJCODIwMDdDMzk4MyAvKiBOUF9qc29iamVj
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBOUF9qc29iamVjdC5oOyBwYXRo
ID0gYnJpZGdlL05QX2pzb2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFB
NTY5Q0REMEQ3RTJCODIwMDdDMzk4MyAvKiBucHJ1bnRpbWUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gbnBydW50aW1lLmNwcDsgcGF0aCA9IGJyaWRnZS9ucHJ1bnRp
bWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODg0MCwxNiArODgxNCwxMCBA
QAogCQk1OTMwOUExMjExRjRBRTZBMDAyNTA2MDMgLyogRGV2aWNlT3JpZW50YXRpb25DbGllbnRN
b2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERldmljZU9yaWVudGF0aW9u
Q2xpZW50TW9jay5oOyBwYXRoID0gbW9jay9EZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2suaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTk1OEYxQ0IxMzQzOTE3QzAwODBCMzFGIC8q
IFhNTFZpZXdlci5jc3MgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LmNzczsgcGF0aCA9IFhNTFZpZXdlci5jc3M7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU5NThGMUNDMTM0MzkxN0MwMDgwQjMxRiAv
KiBYTUxWaWV3ZXIuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSBY
TUxWaWV3ZXIuanM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU5Njk1MDgxMTMyMTA1
OTkwMEMzRUQxOCAvKiBKb2JqZWN0V3JhcHBlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKb2JqZWN0V3JhcHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1
OTY5NTA4MzEzMjEwNUE1MDBDM0VEMTggLyogSm9iamVjdFdyYXBwZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSm9iamVjdFdyYXBwZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1OTgzNjVEQzEzNTVGNTNDMDAxQjE4NUQgLyogSlNQb3NpdGlv
bkNhbGxiYWNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTUG9zaXRpb25D
YWxsYmFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1OTgzNjVERTEzNTVGNTYy
MDAxQjE4NUQgLyogSlNQb3NpdGlvbkVycm9yQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNQb3NpdGlvbkVycm9yQ2FsbGJhY2suaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTk4MzY1RTMxMzU1RjYwNDAwMUIxODVEIC8qIEpTUG9zaXRpb25DYWxs
YmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1Bvc2l0aW9u
Q2FsbGJhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1OTgzNjVFNTEzNTVG
NjBEMDAxQjE4NUQgLyogSlNQb3NpdGlvbkVycm9yQ2FsbGJhY2suY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNQb3NpdGlvbkVycm9yQ2FsbGJhY2suY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1OThENzdEQzEzMjU0MUVFMDA3NjFCMjIgLyogSmF2
YUFycmF5SlNDLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEphdmFB
cnJheUpTQy5jcHA7IHBhdGggPSBqc2MvSmF2YUFycmF5SlNDLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNTk4RDc3REUxMzI1NDFGQTAwNzYxQjIyIC8qIEphdmFBcnJheUpTQy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKYXZhQXJyYXlKU0MuaDsgcGF0aCA9
IGpzYy9KYXZhQXJyYXlKU0MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTk4RDc3
RTAxMzI1NDIwNDAwNzYxQjIyIC8qIEphdmFGaWVsZEpTQy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBKYXZhRmllbGRKU0MuY3BwOyBwYXRoID0ganNjL0phdmFGaWVs
ZEpTQy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU5OEQ3N0UyMTMyNTQyMEUw
MDc2MUIyMiAvKiBKYXZhRmllbGRKU0MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gSmF2YUZpZWxkSlNDLmg7IHBhdGggPSBqc2MvSmF2YUZpZWxkSlNDLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTU5OUU3NThGMTEwNTVBMUYwMEQ5MDRGQSAvKiBCcmlkZ2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQnJpZGdlLmg7IHBhdGggPSBicmlkZ2Uv
QnJpZGdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU5QTg1RUExMTE5RDY4RDkw
MERFRjFFRiAvKiBEZXZpY2VPcmllbnRhdGlvbkV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERldmljZU9yaWVudGF0aW9uRXZlbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1OUE4NUVBMzExOUQ2OEVDMDBERUYxRUYgLyogRGV2aWNlT3Jp
ZW50YXRpb25FdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXZpY2VP
cmllbnRhdGlvbkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04ODU5LDI1
ICs4ODI3LDEzIEBACiAJCTU5QThGMUQzMTFBNjk1MDgwMDFBQzM0QSAvKiBEZXZpY2VPcmllbnRh
dGlvbkNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RGV2aWNlT3JpZW50YXRpb25Db250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTlBOEYxRDUxMUE2OTUxMzAwMUFDMzRBIC8qIERldmljZU9yaWVudGF0aW9uQ29udHJv
bGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZXZpY2VPcmllbnRhdGlv
bkNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTlBOEYxRDcxMUE2
OTUyMDAwMUFDMzRBIC8qIERldmljZU9yaWVudGF0aW9uQ2xpZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERldmljZU9yaWVudGF0aW9uQ2xpZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTU5QTlFN0FGMTEwNDc1ODgwMERGQjRDMSAvKiBKYXZhSW5zdGFu
Y2VKU0MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSmF2YUluc3Rh
bmNlSlNDLmNwcDsgcGF0aCA9IGpzYy9KYXZhSW5zdGFuY2VKU0MuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk1OUE5RTdCMTExMDQ3NTk0MDBERkI0QzEgLyogSmF2YUluc3RhbmNl
SlNDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEphdmFJbnN0YW5jZUpTQy5o
OyBwYXRoID0ganNjL0phdmFJbnN0YW5jZUpTQy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk1OUIwRUVBNjEzMkE2RjJBMDA0MzMxQzcgLyogSmF2YVR5cGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSmF2YVR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTlCNTk3NzIxMTA4NjU2QjAwNzE1OUU4IC8qIEJyaWRnZUpTQy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCcmlkZ2VKU0MuY3BwOyBwYXRoID0gYnJpZGdl
L2pzYy9CcmlkZ2VKU0MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1OUI1OTc3
NDExMDg2NTc5MDA3MTU5RTggLyogQnJpZGdlSlNDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEJyaWRnZUpTQy5oOyBwYXRoID0gYnJpZGdlL2pzYy9CcmlkZ2VKU0MuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTlCQzM5M0UxMTA1NEExMzAwRkQ4NURCIC8qIEph
dmFTdHJpbmdKU0MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSmF2YVN0cmlu
Z0pTQy5oOyBwYXRoID0ganNjL0phdmFTdHJpbmdKU0MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTlDMjdGMDQxMzhEMjhDMTAwNzlCN0UyIC8qIE5ldHdvcmtSZXNvdXJjZXNEYXRh
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE5ldHdvcmtSZXNvdXJj
ZXNEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTlDMjdGMDYxMzhEMjhD
RjAwNzlCN0UyIC8qIE5ldHdvcmtSZXNvdXJjZXNEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE5ldHdvcmtSZXNvdXJjZXNEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTU5QzI4MDQzMTM4REMyNDEwMDc5QjdFMiAvKiBYTUxFcnJvcnMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gWE1MRXJyb3JzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTlDMjgwNDQxMzhEQzI0MTAwNzlCN0UyIC8qIFhNTEVycm9y
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBYTUxFcnJvcnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTlEMUMxMDMxMUVCNURDRjAwQjYzOEM4IC8qIERldmlj
ZU9yaWVudGF0aW9uRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBEZXZpY2VPcmllbnRhdGlvbkRhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk1OURFNzkwMzEzRjE2QzdGMDAwN0ZDREYgLyogSmF2YU1ldGhvZEpTQy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKYXZhTWV0aG9kSlNDLmNwcDsgcGF0aCA9IGpz
Yy9KYXZhTWV0aG9kSlNDLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTlERTc5
MDUxM0YxNkM4QzAwMDdGQ0RGIC8qIEphdmFNZXRob2RKU0MuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gSmF2YU1ldGhvZEpTQy5oOyBwYXRoID0ganNjL0phdmFNZXRob2RKU0Mu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNTlFNTYwQTYxMTA1MzM2NjAwQUExMjU4
IC8qIEphdmFDbGFzc0pTQy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBKYXZh
Q2xhc3NKU0MuaDsgcGF0aCA9IGpzYy9KYXZhQ2xhc3NKU0MuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNTlFNTYwQTgxMTA1MzM2RjAwQUExMjU4IC8qIEphdmFDbGFzc0pTQy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKYXZhQ2xhc3NKU0MuY3BwOyBw
YXRoID0ganNjL0phdmFDbGFzc0pTQy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTU5RUUxMjJCMTEwNjA4MDUwMDg4NTExNiAvKiBKTklVdGlsaXR5UHJpdmF0ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBKTklVdGlsaXR5UHJpdmF0ZS5jcHA7IHBh
dGggPSBqc2MvSk5JVXRpbGl0eVByaXZhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk1OUVFMTIyRDExMDYwODBGMDA4ODUxMTYgLyogSk5JVXRpbGl0eVByaXZhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gSk5JVXRpbGl0eVByaXZhdGUuaDsgcGF0aCA9
IGpzYy9KTklVdGlsaXR5UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1
OUVFMTIyRjExMDYwODFGMDA4ODUxMTYgLyogSk5JVXRpbGl0eS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKTklVdGlsaXR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJNTlFRTEyMzExMTA2MDgyOTAwODg1MTE2IC8qIEpOSVV0aWxpdHkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSk5JVXRpbGl0eS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1QTU3NEYyMjEzMURCOTM5MDA0NzFCODggLyogUmVuZGVyUXVvdGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyUXVvdGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QTU3NEYyMzEzMURCOTM5MDA0NzFCODgg
LyogUmVuZGVyUXVvdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVy
UXVvdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUE1NzRGMjYxMzFEQjk2RDAw
NDcxQjg4IC8qIFF1b3Rlc0RhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gUXVvdGVzRGF0YS5jcHA7IHBhdGggPSBzdHlsZS9RdW90ZXNEYXRhLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMzc3LDggKzEzMzMzLDYgQEAKIAkJRTE2OTgwNDgx
MTMzNjQ0NzAwODk0MTE1IC8qIENSdW50aW1lT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENSdW50aW1lT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRTE2OTgyNTQxMTM0NjI5RDAwODk0MTE1IC8qIE9iakNSdW50aW1lT2JqZWN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9iakNSdW50aW1lT2JqZWN0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNjk4MjVGMTEzNDYzNkEwMDg5NDExNSAv
KiBPYmpDUnVudGltZU9iamVjdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IE9iakNSdW50aW1lT2JqZWN0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlFMTY5ODI2MzExMzQ2N0YzMDA4OTQxMTUgLyogSmF2YVJ1bnRpbWVPYmplY3QuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gSmF2YVJ1bnRpbWVPYmplY3QuY3BwOyBw
YXRoID0ganNjL0phdmFSdW50aW1lT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJRTE2OTgyNjcxMTM0NjgwNzAwODk0MTE1IC8qIEphdmFSdW50aW1lT2JqZWN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEphdmFSdW50aW1lT2JqZWN0Lmg7IHBhdGgg
PSBqc2MvSmF2YVJ1bnRpbWVPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RTE2QTg0RjcxNEM4NUNDQzAwMjk3N0RGIC8qIENTU0JvcmRlckltYWdlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0JvcmRlckltYWdlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE2QTg0RjgxNEM4NUNDQzAwMjk3N0RGIC8qIENTU0JvcmRl
ckltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0JvcmRlckltYWdl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxODI1NjhEMEVGMkIwMkQwMDkzMzI0
MiAvKiBKU1dvcmtlckNvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNXb3JrZXJDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE0NDA3LDcgKzE0MzYxLDYgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CiAJCQkJMUE1NjlDQzUwRDdFMkI4MjAwN0MzOTgzIC8qIGMgKi8sCi0JCQkJMUE1NjlDQ0UwRDdF
MkI4MjAwN0MzOTgzIC8qIGpuaSAqLywKIAkJCQk1OUI1OTc3MTExMDg2NTU2MDA3MTU5RTggLyog
anNjICovLAogCQkJCTFBNTY5Q0UyMEQ3RTJCODIwMDdDMzk4MyAvKiBvYmpjICovLAogCQkJCTU5
OUU3NThGMTEwNTVBMUYwMEQ5MDRGQSAvKiBCcmlkZ2UuaCAqLywKQEAgLTE0NDQ5LDIzICsxNDQw
Miw2IEBACiAJCQlwYXRoID0gYnJpZGdlL2M7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwog
CQl9OwotCQkxQTU2OUNDRTBEN0UyQjgyMDA3QzM5ODMgLyogam5pICovID0gewotCQkJaXNhID0g
UEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQk1OUIwRUVBNjEzMkE2RjJBMDA0MzMxQzcg
LyogSmF2YVR5cGUuaCAqLywKLQkJCQkxQTU2OUNENDBEN0UyQjgyMDA3QzM5ODMgLyogam5pX2pz
b2JqZWN0LmggKi8sCi0JCQkJMUE1NjlDRDMwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9qc29iamVj
dC5tbSAqLywKLQkJCQkxQTU2OUNENTBEN0UyQjgyMDA3QzM5ODMgLyogam5pX29iamMubW0gKi8s
Ci0JCQkJNTlFRTEyMkYxMTA2MDgxRjAwODg1MTE2IC8qIEpOSVV0aWxpdHkuY3BwICovLAotCQkJ
CTU5RUUxMjMxMTEwNjA4MjkwMDg4NTExNiAvKiBKTklVdGlsaXR5LmggKi8sCi0JCQkJNTk2OTUw
ODMxMzIxMDVBNTAwQzNFRDE4IC8qIEpvYmplY3RXcmFwcGVyLmNwcCAqLywKLQkJCQk1OTY5NTA4
MTEzMjEwNTk5MDBDM0VEMTggLyogSm9iamVjdFdyYXBwZXIuaCAqLywKLQkJCQk1OTlEMUUyRjEw
Qzk3RDRDMDBFMEVGMTIgLyoganNjICovLAotCQkJKTsKLQkJCW5hbWUgPSBqbmk7Ci0JCQlwYXRo
ID0gYnJpZGdlL2puaTsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07CiAJCTFBNTY5
Q0UyMEQ3RTJCODIwMDdDMzk4MyAvKiBvYmpjICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKQEAgLTE1NDIzLDI4ICsxNTM1OSw2IEBACiAJCQl0YWJXaWR0aCA9IDQ7
CiAJCQl1c2VzVGFicyA9IDA7CiAJCX07Ci0JCTU5OUQxRTJGMTBDOTdENEMwMEUwRUYxMiAvKiBq
c2MgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTU5OEQ3
N0RDMTMyNTQxRUUwMDc2MUIyMiAvKiBKYXZhQXJyYXlKU0MuY3BwICovLAotCQkJCTU5OEQ3N0RF
MTMyNTQxRkEwMDc2MUIyMiAvKiBKYXZhQXJyYXlKU0MuaCAqLywKLQkJCQk1OUU1NjBBODExMDUz
MzZGMDBBQTEyNTggLyogSmF2YUNsYXNzSlNDLmNwcCAqLywKLQkJCQk1OUU1NjBBNjExMDUzMzY2
MDBBQTEyNTggLyogSmF2YUNsYXNzSlNDLmggKi8sCi0JCQkJNTk4RDc3RTAxMzI1NDIwNDAwNzYx
QjIyIC8qIEphdmFGaWVsZEpTQy5jcHAgKi8sCi0JCQkJNTk4RDc3RTIxMzI1NDIwRTAwNzYxQjIy
IC8qIEphdmFGaWVsZEpTQy5oICovLAotCQkJCTU5QTlFN0FGMTEwNDc1ODgwMERGQjRDMSAvKiBK
YXZhSW5zdGFuY2VKU0MuY3BwICovLAotCQkJCTU5QTlFN0IxMTEwNDc1OTQwMERGQjRDMSAvKiBK
YXZhSW5zdGFuY2VKU0MuaCAqLywKLQkJCQk1OURFNzkwMzEzRjE2QzdGMDAwN0ZDREYgLyogSmF2
YU1ldGhvZEpTQy5jcHAgKi8sCi0JCQkJNTlERTc5MDUxM0YxNkM4QzAwMDdGQ0RGIC8qIEphdmFN
ZXRob2RKU0MuaCAqLywKLQkJCQlFMTY5ODI2MzExMzQ2N0YzMDA4OTQxMTUgLyogSmF2YVJ1bnRp
bWVPYmplY3QuY3BwICovLAotCQkJCUUxNjk4MjY3MTEzNDY4MDcwMDg5NDExNSAvKiBKYXZhUnVu
dGltZU9iamVjdC5oICovLAotCQkJCTU5QkMzOTNFMTEwNTRBMTMwMEZEODVEQiAvKiBKYXZhU3Ry
aW5nSlNDLmggKi8sCi0JCQkJNTlFRTEyMkIxMTA2MDgwNTAwODg1MTE2IC8qIEpOSVV0aWxpdHlQ
cml2YXRlLmNwcCAqLywKLQkJCQk1OUVFMTIyRDExMDYwODBGMDA4ODUxMTYgLyogSk5JVXRpbGl0
eVByaXZhdGUuaCAqLywKLQkJCSk7Ci0JCQluYW1lID0ganNjOwotCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKLQkJfTsKIAkJNTlCNTk3NzExMTA4NjU1NjAwNzE1OUU4IC8qIGpzYyAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yMzgxOSwyMCArMjM3MzMs
OCBAQAogCQkJCUUxMzRGNUFCMTJFRTM0M0YwMDRFQzU4RCAvKiBJbnRSZWN0SGFzaC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQjI3NTM1NzUwQjA1MzgxNDAwMkNFNjRGIC8qIEludFNpemUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUIyNzUzNTc2MEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRTaXplSGFzaC5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJNTk4RDc3REYxMzI1NDFGQTAwNzYxQjIyIC8qIEphdmFBcnJh
eUpTQy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTlFNTYwQTcxMTA1MzM2NjAwQUExMjU4IC8qIEph
dmFDbGFzc0pTQy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTk4RDc3RTMxMzI1NDIwRTAwNzYxQjIy
IC8qIEphdmFGaWVsZEpTQy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTlBOUU3QjIxMTA0NzU5NDAw
REZCNEMxIC8qIEphdmFJbnN0YW5jZUpTQy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTlERTc5MDYx
M0YxNkM4QzAwMDdGQ0RGIC8qIEphdmFNZXRob2RKU0MuaCBpbiBIZWFkZXJzICovLAotCQkJCUUx
Njk4MjY4MTEzNDY4MDcwMDg5NDExNSAvKiBKYXZhUnVudGltZU9iamVjdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkQzMTYwMzYxMkIwMjY3NjAwQzFBMzU5IC8qIEphdmFTY3JpcHRBdWRpb05vZGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFDODFCQTBBMEU5NzM0ODMwMDI2NkUwNyAvKiBKYXZhU2Ny
aXB0Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLywKLQkJCQk1OUJDMzkzRjExMDU0QTEzMDBGRDg1
REIgLyogSmF2YVN0cmluZ0pTQy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTlCMEVFQTcxMzJBNkYy
QTAwNDMzMUM3IC8qIEphdmFUeXBlLmggaW4gSGVhZGVycyAqLywKLQkJCQkxQTU2OUQwNDBEN0Uy
QjgyMDA3QzM5ODMgLyogam5pX2pzb2JqZWN0LmggaW4gSGVhZGVycyAqLywKLQkJCQk1OUVFMTIz
MjExMDYwODI5MDA4ODUxMTYgLyogSk5JVXRpbGl0eS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTlF
RTEyMkUxMTA2MDgwRjAwODg1MTE2IC8qIEpOSVV0aWxpdHlQcml2YXRlLmggaW4gSGVhZGVycyAq
LywKLQkJCQk1OTY5NTA4MjEzMjEwNTk5MDBDM0VEMTggLyogSm9iamVjdFdyYXBwZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQxOEY4ODA1MEZGOTU3QUYwMDgwRjA0NSAvKiBKU0Fic3RyYWN0V29y
a2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUVFQ0YwMTEwNTA3MEM0MDAwOTlGQUIgLyogSlNB
cnJheUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlFRUNGMUMxMDUwNzJGMzAwMDk5RkFC
IC8qIEpTQXJyYXlCdWZmZXJWaWV3LmggaW4gSGVhZGVycyAqLywKQEAgLTI3MDE5LDE5ICsyNjky
MSw4IEBACiAJCQkJQjI3NTM1N0QwQjA1MzgxNDAwMkNFNjRGIC8qIEludFJlY3RNYWMubW0gaW4g
U291cmNlcyAqLywKIAkJCQlCMjc1MzU2MjBCMDUzODE0MDAyQ0U2NEYgLyogSW50U2l6ZUNHLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUIyNzUzNTdFMEIwNTM4MTQwMDJDRTY0RiAvKiBJbnRTaXpl
TWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNTk4RDc3REQxMzI1NDFFRTAwNzYxQjIyIC8qIEph
dmFBcnJheUpTQy5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1OUU1NjBBOTExMDUzMzZGMDBBQTEy
NTggLyogSmF2YUNsYXNzSlNDLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTU5OEQ3N0UxMTMyNTQy
MDQwMDc2MUIyMiAvKiBKYXZhRmllbGRKU0MuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNTlBOUU3
QjAxMTA0NzU4ODAwREZCNEMxIC8qIEphdmFJbnN0YW5jZUpTQy5jcHAgaW4gU291cmNlcyAqLywK
LQkJCQk1OURFNzkwNDEzRjE2QzdGMDAwN0ZDREYgLyogSmF2YU1ldGhvZEpTQy5jcHAgaW4gU291
cmNlcyAqLywKLQkJCQlFMTY5ODI2NDExMzQ2N0YzMDA4OTQxMTUgLyogSmF2YVJ1bnRpbWVPYmpl
Y3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQzMTYwMzUxMkIwMjY3NjAwQzFBMzU5IC8qIEph
dmFTY3JpcHRBdWRpb05vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM4MUJBMDkwRTk3MzQ4
MzAwMjY2RTA3IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
MUE1NjlEMDMwRDdFMkI4MjAwN0MzOTgzIC8qIGpuaV9qc29iamVjdC5tbSBpbiBTb3VyY2VzICov
LAotCQkJCTFBNTY5RDA1MEQ3RTJCODIwMDdDMzk4MyAvKiBqbmlfb2JqYy5tbSBpbiBTb3VyY2Vz
ICovLAotCQkJCTU5RUUxMjMwMTEwNjA4MUYwMDg4NTExNiAvKiBKTklVdGlsaXR5LmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTU5RUUxMjJDMTEwNjA4MDUwMDg4NTExNiAvKiBKTklVdGlsaXR5UHJp
dmF0ZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk1OTY5NTA4NDEzMjEwNUE1MDBDM0VEMTggLyog
Sm9iamVjdFdyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDE4Rjg4MDQwRkY5NTdBRTAw
ODBGMDQ1IC8qIEpTQWJzdHJhY3RXb3JrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlFRUNG
MDAxMDUwNzBDNDAwMDk5RkFCIC8qIEpTQXJyYXlCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkMyNzVDQjMxMUM1RTg1QzAwQzkyMDZDIC8qIEpTQXJyYXlCdWZmZXJDdXN0b20uY3BwIGlu
IFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3Jp
cHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRy
b2xsZXIuY3BwCmluZGV4IDQ4ZjY4YzhhMzI4NmY1ZDlhODJlMGYxYTA3ZWZhOGNkZDRlMjVlNTIu
LjY4OGMxMjJmYzI1YjIyY2YzZDJkMTYyOWY1ZDdiYzYzZjVjODUzZDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xsZXIuY3BwCkBAIC03NSwxMyArNzUs
NiBAQCBTY3JpcHRDb250cm9sbGVyOjpTY3JpcHRDb250cm9sbGVyKEZyYW1lKiBmcmFtZSkKICAg
ICAsIG1fd2luZG93U2NyaXB0T2JqZWN0KDApCiAjZW5kaWYKIHsKLSNpZiBQTEFURk9STShNQUMp
ICYmIEVOQUJMRShKQVZBX0JSSURHRSkKLSAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZEphdmFK
U0JpbmRpbmdzOwotICAgIGlmICghaW5pdGlhbGl6ZWRKYXZhSlNCaW5kaW5ncykgewotICAgICAg
ICBpbml0aWFsaXplZEphdmFKU0JpbmRpbmdzID0gdHJ1ZTsKLSAgICAgICAgaW5pdEphdmFKU0Jp
bmRpbmdzKCk7Ci0gICAgfQotI2VuZGlmCiB9CiAKIFNjcmlwdENvbnRyb2xsZXI6On5TY3JpcHRD
b250cm9sbGVyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdENvbnRyb2xs
ZXIuaAppbmRleCAxODdmYWI1MmJlZjBhZDIxY2Y1NGRlNTA2YTRlZjY1MWNmZmRiZWJhLi5iY2Vk
M2Y4MzU4ZTJiYjA1YmRiNmQwZDVjNTQ3MWEwYTQxYzA2OTdjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlci5oCkBAIC0xNTAsOSArMTUwLDYgQEAgcHVi
bGljOgogI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpCi0jaWYgRU5BQkxFKEpBVkFfQlJJREdF
KQotICAgIHN0YXRpYyB2b2lkIGluaXRKYXZhSlNCaW5kaW5ncygpOwotI2VuZGlmCiAgICAgV2Vi
U2NyaXB0T2JqZWN0KiB3aW5kb3dTY3JpcHRPYmplY3QoKTsKICNlbmRpZgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRDb250cm9sbGVyTWFjLm1tIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0Q29udHJvbGxlck1hYy5tbQppbmRleCA5M2Y2
MDNmM2QxYjhhYWE3ZThhYmFkNTVjZmQ0ZjJiNTA3NWFkN2Y3Li5lMGNhYmY3OTgyZDNmYTdiNWIw
NDk2NDAzMDEyMDdhZTYzZDYzOWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TY3JpcHRDb250cm9sbGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NjcmlwdENvbnRyb2xsZXJNYWMubW0KQEAgLTQ5LDEwICs0OSw2IEBACiAjaW1wb3J0ICJu
cHJ1bnRpbWVfaW1wbC5oIgogI2VuZGlmCiAKLSNpZiBFTkFCTEUoSkFWQV9CUklER0UpCi0jaW1w
b3J0ICJKYXZhSW5zdGFuY2VKU0MuaCIKLSNlbmRpZgotCiBAaW50ZXJmYWNlIE5TT2JqZWN0IChX
ZWJQbHVnaW4pCiAtIChpZClvYmplY3RGb3JXZWJTY3JpcHQ7CiAtIChOUE9iamVjdCAqKWNyZWF0
ZVBsdWdpblNjcmlwdGFibGVPYmplY3Q7CkBAIC05NSwxNCArOTEsNyBAQCBQYXNzU2NyaXB0SW5z
dGFuY2UgU2NyaXB0Q29udHJvbGxlcjo6Y3JlYXRlU2NyaXB0SW5zdGFuY2VGb3JXaWRnZXQoV2lk
Z2V0KiB3aWRnZQogI2VuZGlmCiAgICAgfQogCi0jaWYgRU5BQkxFKEpBVkFfQlJJREdFKQotICAg
IGpvYmplY3QgYXBwbGV0ID0gbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5qYXZhQXBwbGV0
KHdpZGdldFZpZXcpOwotICAgIGlmICghYXBwbGV0KQotICAgICAgICByZXR1cm4gMDsKLSAgICBy
ZXR1cm4gSlNDOjpCaW5kaW5nczo6SmF2YUluc3RhbmNlOjpjcmVhdGUoYXBwbGV0LCByb290T2Jq
ZWN0LnJlbGVhc2UoKSk7Ci0jZWxzZQogICAgIHJldHVybiAwOwotI2VuZGlmCiB9CiAKIFdlYlNj
cmlwdE9iamVjdCogU2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2NyaXB0T2JqZWN0KCkKQEAgLTEz
NiwxMyArMTI1LDQgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpkaXNjb25uZWN0UGxhdGZvcm1T
Y3JpcHRPYmplY3RzKCkKICAgICB9CiB9CiAKLSNpZiBFTkFCTEUoSkFWQV9CUklER0UpCi0KLXZv
aWQgU2NyaXB0Q29udHJvbGxlcjo6aW5pdEphdmFKU0JpbmRpbmdzKCkKLXsKLSAgICBKU0M6OkJp
bmRpbmdzOjpKYXZhSlNPYmplY3Q6OmluaXRpYWxpemVKTklUaHJlYWRpbmcoKTsKLX0KLQotI2Vu
ZGlmCi0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvSk5JVXRpbGl0
eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL0pOSVV0aWxpdHkuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWNjZmZjMjZkY2IwNGQxNGIxOWI3NTI1ZWM2ZDM0MzI5
N2RjNTAxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvSk5JVXRpbGl0eS5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwzOTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAw
NywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkpOSVV0aWxpdHkuaCIKLQotI2lmIEVO
QUJMRShKQVZBX0JSSURHRSkKLQotI2luY2x1ZGUgPGRsZmNuLmg+Ci0KLW5hbWVzcGFjZSBKU0Mg
ewotCi1uYW1lc3BhY2UgQmluZGluZ3MgewotCi1zdGF0aWMgamludCBLSlNHZXRDcmVhdGVkSmF2
YVZNcyhKYXZhVk0qKiB2bUJ1ZiwganNpemUgYnVmTGVuLCBqc2l6ZSogblZNcykKLXsKLSAgICBz
dGF0aWMgdm9pZCogamF2YVZNRnJhbWV3b3JrID0gMDsKLSAgICBpZiAoIWphdmFWTUZyYW1ld29y
aykKLSAgICAgICAgamF2YVZNRnJhbWV3b3JrID0gZGxvcGVuKCIvU3lzdGVtL0xpYnJhcnkvRnJh
bWV3b3Jrcy9KYXZhVk0uZnJhbWV3b3JrL0phdmFWTSIsIFJUTERfTEFaWSk7Ci0gICAgaWYgKCFq
YXZhVk1GcmFtZXdvcmspCi0gICAgICAgIHJldHVybiBKTklfRVJSOwotCi0gICAgdHlwZWRlZiBq
aW50KCpGdW5jdGlvblBvaW50ZXJUeXBlKShKYXZhVk0qKiwganNpemUsIGpzaXplKik7Ci0gICAg
c3RhdGljIEZ1bmN0aW9uUG9pbnRlclR5cGUgZnVuY3Rpb25Qb2ludGVyID0gMDsKLSAgICBpZiAo
IWZ1bmN0aW9uUG9pbnRlcikKLSAgICAgICAgZnVuY3Rpb25Qb2ludGVyID0gcmVpbnRlcnByZXRf
Y2FzdDxGdW5jdGlvblBvaW50ZXJUeXBlPihkbHN5bShqYXZhVk1GcmFtZXdvcmssICJKTklfR2V0
Q3JlYXRlZEphdmFWTXMiKSk7Ci0gICAgaWYgKCFmdW5jdGlvblBvaW50ZXIpCi0gICAgICAgIHJl
dHVybiBKTklfRVJSOwotICAgIHJldHVybiBmdW5jdGlvblBvaW50ZXIodm1CdWYsIGJ1Zkxlbiwg
blZNcyk7Ci19Ci0KLXN0YXRpYyBKYXZhVk0qIGp2bSA9IDA7Ci0KLS8vIFByb3ZpZGUgdGhlIGFi
aWxpdHkgZm9yIGFuIG91dHNpZGUgY29tcG9uZW50IHRvIHNwZWNpZnkgdGhlIEphdmFWTSB0byB1
c2UKLS8vIElmIHRoZSBqdm0gdmFsdWUgaXMgc2V0LCB0aGUgZ2V0SmF2YVZNIGZ1bmN0aW9uIGJl
bG93IHdpbGwganVzdCByZXR1cm4uCi0vLyBJbiBnZXRKTklFbnYoKSwgaWYgQXR0YWNoQ3VycmVu
dFRocmVhZCBpcyBjYWxsZWQgdG8gYSBWTSB0aGF0IGlzIGFscmVhZHkKLS8vIGF0dGFjaGVkLCB0
aGUgcmVzdWx0IGlzIGEgbm8tb3AuCi12b2lkIHNldEphdmFWTShKYXZhVk0qIGphdmFWTSkKLXsK
LSAgICBqdm0gPSBqYXZhVk07Ci19Ci0KLUphdmFWTSogZ2V0SmF2YVZNKCkKLXsKLSAgICBpZiAo
anZtKQotICAgICAgICByZXR1cm4ganZtOwotCi0gICAgSmF2YVZNKiBqdm1BcnJheVsxXTsKLSAg
ICBqc2l6ZSBidWZMZW4gPSAxOwotICAgIGpzaXplIG5KVk1zID0gMDsKLSAgICBqaW50IGpuaUVy
cm9yID0gMDsKLQotICAgIC8vIEFzc3VtZXMgSlZNIGlzIGFscmVhZHkgcnVubmluZyAuLi4sIG9u
ZSBwZXIgcHJvY2VzcwotICAgIGpuaUVycm9yID0gS0pTR2V0Q3JlYXRlZEphdmFWTXMoanZtQXJy
YXksIGJ1ZkxlbiwgJm5KVk1zKTsKLSAgICBpZiAoam5pRXJyb3IgPT0gSk5JX09LICYmIG5KVk1z
ID4gMCkKLSAgICAgICAganZtID0ganZtQXJyYXlbMF07Ci0gICAgZWxzZQotICAgICAgICBMT0df
RVJST1IoIkpOSV9HZXRDcmVhdGVkSmF2YVZNcyBmYWlsZWQsIHJldHVybmVkICVsZCIsIHN0YXRp
Y19jYXN0PGxvbmc+KGpuaUVycm9yKSk7Ci0KLSAgICByZXR1cm4ganZtOwotfQotCi0vLyBKREsg
MS4wIG1pc3Rha2VubHkgZGVjbGFyZWQgdGhlIGZpcnN0IHBhcmFtZXRlciB0byBBdHRhY2hDdXJy
ZW50VGhyZWFkIGFzCi0vLyB2b2lkKiogcmF0aGVyIHRoYW4gYXMgSk5JRW52KiouIFRoaXMgcXVp
cmsgYXBwZWFycyB0byBoYXZlIGJlZW4gY2FycmllZAotLy8gZm9yd2FyZCBpbiBpbXBsZW1lbnRh
dGlvbnMgb2YgSmF2YSBkZXNwaXRlIHdoYXQgdGhlIGRvY3VtZW50YXRpb24gc2F5cy4KLS8vIE9u
IE9TKEFORFJPSUQpLCBob3dldmVyLCBBdHRhY2hDdXJyZW50VGhyZWFkIGFwcGVhcnMgdG8gZm9s
bG93IHRoZQotLy8gZG9jdW1lbnRhdGlvbiBhbmQgZXhwZWN0cyBhIEpOSUVudioqIHBhcmFtZXRl
ci4gVGhlIGZvbGxvd2luZyB0eXBlZGVmIHNob3VsZAotLy8gZ2l2ZSBlYWNoIGltcGxlbWVudGF0
aW9uIHdoYXQgaXQgZGVzaXJlcy4KLSNpZiBPUyhBTkRST0lEKQotdHlwZWRlZiBKTklFbnYqIEpO
SUVudkR1bW15OwotI2Vsc2UKLXR5cGVkZWYgdm9pZCogSk5JRW52RHVtbXk7Ci0jZW5kaWYKLQot
Sk5JRW52KiBnZXRKTklFbnYoKQotewotICAgIHVuaW9uIHsKLSAgICAgICAgSk5JRW52KiBlbnY7
Ci0gICAgICAgIEpOSUVudkR1bW15IGR1bW15OwotICAgIH0gdTsKLSAgICBqaW50IGpuaUVycm9y
ID0gMDsKLQotICAgIGpuaUVycm9yID0gZ2V0SmF2YVZNKCktPkF0dGFjaEN1cnJlbnRUaHJlYWQo
JnUuZHVtbXksIDApOwotCi0gICAgaWYgKGpuaUVycm9yID09IEpOSV9PSykKLSAgICAgICAgcmV0
dXJuIHUuZW52OwotICAgIExPR19FUlJPUigiQXR0YWNoQ3VycmVudFRocmVhZCBmYWlsZWQsIHJl
dHVybmVkICVsZCIsIHN0YXRpY19jYXN0PGxvbmc+KGpuaUVycm9yKSk7Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLWptZXRob2RJRCBnZXRNZXRob2RJRChqb2JqZWN0IG9iaiwgY29uc3QgY2hhciogbmFt
ZSwgY29uc3QgY2hhciogc2lnKQotewotICAgIEpOSUVudiogZW52ID0gZ2V0Sk5JRW52KCk7Ci0g
ICAgam1ldGhvZElEIG1pZCA9IDA7Ci0KLSAgICBpZiAoZW52KSB7Ci0gICAgICAgIGpjbGFzcyBj
bHMgPSBlbnYtPkdldE9iamVjdENsYXNzKG9iaik7Ci0gICAgICAgIGlmIChjbHMpIHsKLSAgICAg
ICAgICAgIG1pZCA9IGVudi0+R2V0TWV0aG9kSUQoY2xzLCBuYW1lLCBzaWcpOwotICAgICAgICAg
ICAgaWYgKCFtaWQpIHsKLSAgICAgICAgICAgICAgICBlbnYtPkV4Y2VwdGlvbkNsZWFyKCk7Ci0g
ICAgICAgICAgICAgICAgbWlkID0gZW52LT5HZXRTdGF0aWNNZXRob2RJRChjbHMsIG5hbWUsIHNp
Zyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFtaWQpCi0gICAgICAgICAgICAgICAgICAgIGVudi0+
RXhjZXB0aW9uQ2xlYXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbnYt
PkRlbGV0ZUxvY2FsUmVmKGNscyk7Ci0gICAgfQotICAgIHJldHVybiBtaWQ7Ci19Ci0KLWNvbnN0
IGNoYXIqIGdldENoYXJhY3RlcnNGcm9tSlN0cmluZyhqc3RyaW5nIGFKU3RyaW5nKQotewotICAg
IHJldHVybiBnZXRDaGFyYWN0ZXJzRnJvbUpTdHJpbmdJbkVudihnZXRKTklFbnYoKSwgYUpTdHJp
bmcpOwotfQotCi12b2lkIHJlbGVhc2VDaGFyYWN0ZXJzRm9ySlN0cmluZyhqc3RyaW5nIGFKU3Ry
aW5nLCBjb25zdCBjaGFyKiBzKQotewotICAgIHJlbGVhc2VDaGFyYWN0ZXJzRm9ySlN0cmluZ0lu
RW52KGdldEpOSUVudigpLCBhSlN0cmluZywgcyk7Ci19Ci0KLWNvbnN0IGNoYXIqIGdldENoYXJh
Y3RlcnNGcm9tSlN0cmluZ0luRW52KEpOSUVudiogZW52LCBqc3RyaW5nIGFKU3RyaW5nKQotewot
ICAgIGpib29sZWFuIGlzQ29weTsKLSAgICBjb25zdCBjaGFyKiBzID0gZW52LT5HZXRTdHJpbmdV
VEZDaGFycyhhSlN0cmluZywgJmlzQ29weSk7Ci0gICAgaWYgKCFzKSB7Ci0gICAgICAgIGVudi0+
RXhjZXB0aW9uRGVzY3JpYmUoKTsKLSAgICAgICAgZW52LT5FeGNlcHRpb25DbGVhcigpOwotICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7Ci0gICAgfQotICAgIHJldHVybiBzOwotfQotCi12
b2lkIHJlbGVhc2VDaGFyYWN0ZXJzRm9ySlN0cmluZ0luRW52KEpOSUVudiogZW52LCBqc3RyaW5n
IGFKU3RyaW5nLCBjb25zdCBjaGFyKiBzKQotewotICAgIGVudi0+UmVsZWFzZVN0cmluZ1VURkNo
YXJzKGFKU3RyaW5nLCBzKTsKLX0KLQotY29uc3QgamNoYXIqIGdldFVDaGFyYWN0ZXJzRnJvbUpT
dHJpbmdJbkVudihKTklFbnYqIGVudiwganN0cmluZyBhSlN0cmluZykKLXsKLSAgICBqYm9vbGVh
biBpc0NvcHk7Ci0gICAgY29uc3QgamNoYXIqIHMgPSBlbnYtPkdldFN0cmluZ0NoYXJzKGFKU3Ry
aW5nLCAmaXNDb3B5KTsKLSAgICBpZiAoIXMpIHsKLSAgICAgICAgZW52LT5FeGNlcHRpb25EZXNj
cmliZSgpOwotICAgICAgICBlbnYtPkV4Y2VwdGlvbkNsZWFyKCk7Ci0gICAgICAgIGZwcmludGYo
c3RkZXJyLCAiXG4iKTsKLSAgICB9Ci0gICAgcmV0dXJuIHM7Ci19Ci0KLXZvaWQgcmVsZWFzZVVD
aGFyYWN0ZXJzRm9ySlN0cmluZ0luRW52KEpOSUVudiogZW52LCBqc3RyaW5nIGFKU3RyaW5nLCBj
b25zdCBqY2hhciogcykKLXsKLSAgICBlbnYtPlJlbGVhc2VTdHJpbmdDaGFycyhhSlN0cmluZywg
cyk7Ci19Ci0KLUphdmFUeXBlIGphdmFUeXBlRnJvbUNsYXNzTmFtZShjb25zdCBjaGFyKiBuYW1l
KQotewotICAgIEphdmFUeXBlIHR5cGU7Ci0KLSAgICBpZiAoIXN0cmNtcCgiYnl0ZSIsIG5hbWUp
KQotICAgICAgICB0eXBlID0gSmF2YVR5cGVCeXRlOwotICAgIGVsc2UgaWYgKCFzdHJjbXAoInNo
b3J0IiwgbmFtZSkpCi0gICAgICAgIHR5cGUgPSBKYXZhVHlwZVNob3J0OwotICAgIGVsc2UgaWYg
KCFzdHJjbXAoImludCIsIG5hbWUpKQotICAgICAgICB0eXBlID0gSmF2YVR5cGVJbnQ7Ci0gICAg
ZWxzZSBpZiAoIXN0cmNtcCgibG9uZyIsIG5hbWUpKQotICAgICAgICB0eXBlID0gSmF2YVR5cGVM
b25nOwotICAgIGVsc2UgaWYgKCFzdHJjbXAoImZsb2F0IiwgbmFtZSkpCi0gICAgICAgIHR5cGUg
PSBKYXZhVHlwZUZsb2F0OwotICAgIGVsc2UgaWYgKCFzdHJjbXAoImRvdWJsZSIsIG5hbWUpKQot
ICAgICAgICB0eXBlID0gSmF2YVR5cGVEb3VibGU7Ci0gICAgZWxzZSBpZiAoIXN0cmNtcCgiY2hh
ciIsIG5hbWUpKQotICAgICAgICB0eXBlID0gSmF2YVR5cGVDaGFyOwotICAgIGVsc2UgaWYgKCFz
dHJjbXAoImJvb2xlYW4iLCBuYW1lKSkKLSAgICAgICAgdHlwZSA9IEphdmFUeXBlQm9vbGVhbjsK
LSAgICBlbHNlIGlmICghc3RyY21wKCJ2b2lkIiwgbmFtZSkpCi0gICAgICAgIHR5cGUgPSBKYXZh
VHlwZVZvaWQ7Ci0gICAgZWxzZSBpZiAoJ1snID09IG5hbWVbMF0pCi0gICAgICAgIHR5cGUgPSBK
YXZhVHlwZUFycmF5OwotICAgIGVsc2UKLSAgICAgICAgdHlwZSA9IEphdmFUeXBlT2JqZWN0Owot
Ci0gICAgcmV0dXJuIHR5cGU7Ci19Ci0KLWNvbnN0IGNoYXIqIHNpZ25hdHVyZUZyb21KYXZhVHlw
ZShKYXZhVHlwZSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgSmF2YVR5
cGVWb2lkOgotICAgICAgICByZXR1cm4gIlYiOwotCi0gICAgY2FzZSBKYXZhVHlwZUFycmF5Ogot
ICAgICAgICByZXR1cm4gIlsiOwotCi0gICAgY2FzZSBKYXZhVHlwZU9iamVjdDoKLSAgICAgICAg
cmV0dXJuICJMIjsKLQotICAgIGNhc2UgSmF2YVR5cGVCb29sZWFuOgotICAgICAgICByZXR1cm4g
IloiOwotCi0gICAgY2FzZSBKYXZhVHlwZUJ5dGU6Ci0gICAgICAgIHJldHVybiAiQiI7Ci0KLSAg
ICBjYXNlIEphdmFUeXBlQ2hhcjoKLSAgICAgICAgcmV0dXJuICJDIjsKLQotICAgIGNhc2UgSmF2
YVR5cGVTaG9ydDoKLSAgICAgICAgcmV0dXJuICJTIjsKLQotICAgIGNhc2UgSmF2YVR5cGVJbnQ6
Ci0gICAgICAgIHJldHVybiAiSSI7Ci0KLSAgICBjYXNlIEphdmFUeXBlTG9uZzoKLSAgICAgICAg
cmV0dXJuICJKIjsKLQotICAgIGNhc2UgSmF2YVR5cGVGbG9hdDoKLSAgICAgICAgcmV0dXJuICJG
IjsKLQotICAgIGNhc2UgSmF2YVR5cGVEb3VibGU6Ci0gICAgICAgIHJldHVybiAiRCI7Ci0KLSAg
ICBjYXNlIEphdmFUeXBlSW52YWxpZDoKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgcmV0dXJuICIiOwotfQotCi1KYXZhVHlwZSBqYXZhVHlwZUZyb21QcmltaXRpdmVU
eXBlKGNoYXIgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlICdWJzoKLSAg
ICAgICAgcmV0dXJuIEphdmFUeXBlVm9pZDsKLQotICAgIGNhc2UgJ0wnOgotICAgICAgICByZXR1
cm4gSmF2YVR5cGVPYmplY3Q7Ci0KLSAgICBjYXNlICdbJzoKLSAgICAgICAgcmV0dXJuIEphdmFU
eXBlQXJyYXk7Ci0KLSAgICBjYXNlICdaJzoKLSAgICAgICAgcmV0dXJuIEphdmFUeXBlQm9vbGVh
bjsKLQotICAgIGNhc2UgJ0InOgotICAgICAgICByZXR1cm4gSmF2YVR5cGVCeXRlOwotCi0gICAg
Y2FzZSAnQyc6Ci0gICAgICAgIHJldHVybiBKYXZhVHlwZUNoYXI7Ci0KLSAgICBjYXNlICdTJzoK
LSAgICAgICAgcmV0dXJuIEphdmFUeXBlU2hvcnQ7Ci0KLSAgICBjYXNlICdJJzoKLSAgICAgICAg
cmV0dXJuIEphdmFUeXBlSW50OwotCi0gICAgY2FzZSAnSic6Ci0gICAgICAgIHJldHVybiBKYXZh
VHlwZUxvbmc7Ci0KLSAgICBjYXNlICdGJzoKLSAgICAgICAgcmV0dXJuIEphdmFUeXBlRmxvYXQ7
Ci0KLSAgICBjYXNlICdEJzoKLSAgICAgICAgcmV0dXJuIEphdmFUeXBlRG91YmxlOwotCi0gICAg
ZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBKYXZhVHlwZUludmFs
aWQ7Ci19Ci0KLWp2YWx1ZSBnZXRKTklGaWVsZChqb2JqZWN0IG9iaiwgSmF2YVR5cGUgdHlwZSwg
Y29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogc2lnbmF0dXJlKQotewotICAgIEphdmFWTSog
anZtID0gZ2V0SmF2YVZNKCk7Ci0gICAgSk5JRW52KiBlbnYgPSBnZXRKTklFbnYoKTsKLSAgICBq
dmFsdWUgcmVzdWx0OwotCi0gICAgbWVtc2V0KCZyZXN1bHQsIDAsIHNpemVvZihqdmFsdWUpKTsK
LSAgICBpZiAob2JqICYmIGp2bSAmJiBlbnYpIHsKLSAgICAgICAgamNsYXNzIGNscyA9IGVudi0+
R2V0T2JqZWN0Q2xhc3Mob2JqKTsKLSAgICAgICAgaWYgKGNscykgewotICAgICAgICAgICAgamZp
ZWxkSUQgZmllbGQgPSBlbnYtPkdldEZpZWxkSUQoY2xzLCBuYW1lLCBzaWduYXR1cmUpOwotICAg
ICAgICAgICAgaWYgKGZpZWxkKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7Ci0g
ICAgICAgICAgICAgICAgY2FzZSBKYXZhVHlwZUFycmF5OgotICAgICAgICAgICAgICAgIGNhc2Ug
SmF2YVR5cGVPYmplY3Q6Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5sID0gZW52LT5mdW5j
dGlvbnMtPkdldE9iamVjdEZpZWxkKGVudiwgb2JqLCBmaWVsZCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgSmF2YVR5cGVCb29sZWFuOgotICAgICAg
ICAgICAgICAgICAgICByZXN1bHQueiA9IGVudi0+ZnVuY3Rpb25zLT5HZXRCb29sZWFuRmllbGQo
ZW52LCBvYmosIGZpZWxkKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgY2FzZSBKYXZhVHlwZUJ5dGU6Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5iID0g
ZW52LT5mdW5jdGlvbnMtPkdldEJ5dGVGaWVsZChlbnYsIG9iaiwgZmllbGQpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEphdmFUeXBlQ2hhcjoKLSAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LmMgPSBlbnYtPmZ1bmN0aW9ucy0+R2V0Q2hhckZpZWxk
KGVudiwgb2JqLCBmaWVsZCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIGNhc2UgSmF2YVR5cGVTaG9ydDoKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnMg
PSBlbnYtPmZ1bmN0aW9ucy0+R2V0U2hvcnRGaWVsZChlbnYsIG9iaiwgZmllbGQpOwotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEphdmFUeXBlSW50Ogot
ICAgICAgICAgICAgICAgICAgICByZXN1bHQuaSA9IGVudi0+ZnVuY3Rpb25zLT5HZXRJbnRGaWVs
ZChlbnYsIG9iaiwgZmllbGQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICBjYXNlIEphdmFUeXBlTG9uZzoKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmog
PSBlbnYtPmZ1bmN0aW9ucy0+R2V0TG9uZ0ZpZWxkKGVudiwgb2JqLCBmaWVsZCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgSmF2YVR5cGVGbG9hdDoK
LSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmYgPSBlbnYtPmZ1bmN0aW9ucy0+R2V0RmxvYXRG
aWVsZChlbnYsIG9iaiwgZmllbGQpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICBjYXNlIEphdmFUeXBlRG91YmxlOgotICAgICAgICAgICAgICAgICAgICByZXN1
bHQuZCA9IGVudi0+ZnVuY3Rpb25zLT5HZXREb3VibGVGaWVsZChlbnYsIG9iaiwgZmllbGQpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkludmFsaWQgZmllbGQgdHlwZSAoJWQpIiwgc3Rh
dGljX2Nhc3Q8aW50Pih0eXBlKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBmaW5kIGZpZWxkOiAl
cyIsIG5hbWUpOwotICAgICAgICAgICAgICAgIGVudi0+RXhjZXB0aW9uRGVzY3JpYmUoKTsKLSAg
ICAgICAgICAgICAgICBlbnYtPkV4Y2VwdGlvbkNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJcbiIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBlbnYtPkRl
bGV0ZUxvY2FsUmVmKGNscyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgTE9HX0VSUk9S
KCJDb3VsZCBub3QgZmluZCBjbGFzcyBmb3Igb2JqZWN0Iik7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotanZhbHVlIGNhbGxKTklNZXRob2Qoam9iamVjdCBvYmplY3QsIEphdmFU
eXBlIHJldHVyblR5cGUsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHNpZ25hdHVyZSwg
anZhbHVlKiBhcmdzKQotewotICAgIGptZXRob2RJRCBtZXRob2RJZCA9IGdldE1ldGhvZElEKG9i
amVjdCwgbmFtZSwgc2lnbmF0dXJlKTsKLSAgICBqdmFsdWUgcmVzdWx0OwotICAgIHN3aXRjaCAo
cmV0dXJuVHlwZSkgewotICAgIGNhc2UgSmF2YVR5cGVWb2lkOgotICAgICAgICBjYWxsSk5JTWV0
aG9kSURBPHZvaWQ+KG9iamVjdCwgbWV0aG9kSWQsIGFyZ3MpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEphdmFUeXBlT2JqZWN0OgotICAgICAgICByZXN1bHQubCA9IGNhbGxKTklNZXRob2RJ
REE8am9iamVjdD4ob2JqZWN0LCBtZXRob2RJZCwgYXJncyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSmF2YVR5cGVCb29sZWFuOgotICAgICAgICByZXN1bHQueiA9IGNhbGxKTklNZXRob2RJ
REE8amJvb2xlYW4+KG9iamVjdCwgbWV0aG9kSWQsIGFyZ3MpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEphdmFUeXBlQnl0ZToKLSAgICAgICAgcmVzdWx0LmIgPSBjYWxsSk5JTWV0aG9kSURB
PGpieXRlPihvYmplY3QsIG1ldGhvZElkLCBhcmdzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBKYXZhVHlwZUNoYXI6Ci0gICAgICAgIHJlc3VsdC5jID0gY2FsbEpOSU1ldGhvZElEQTxqY2hh
cj4ob2JqZWN0LCBtZXRob2RJZCwgYXJncyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSmF2
YVR5cGVTaG9ydDoKLSAgICAgICAgcmVzdWx0LnMgPSBjYWxsSk5JTWV0aG9kSURBPGpzaG9ydD4o
b2JqZWN0LCBtZXRob2RJZCwgYXJncyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSmF2YVR5
cGVJbnQ6Ci0gICAgICAgIHJlc3VsdC5pID0gY2FsbEpOSU1ldGhvZElEQTxqaW50PihvYmplY3Qs
IG1ldGhvZElkLCBhcmdzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKYXZhVHlwZUxvbmc6
Ci0gICAgICAgIHJlc3VsdC5qID0gY2FsbEpOSU1ldGhvZElEQTxqbG9uZz4ob2JqZWN0LCBtZXRo
b2RJZCwgYXJncyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSmF2YVR5cGVGbG9hdDoKLSAg
ICAgICAgcmVzdWx0LmYgPSBjYWxsSk5JTWV0aG9kSURBPGpmbG9hdD4ob2JqZWN0LCBtZXRob2RJ
ZCwgYXJncyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSmF2YVR5cGVEb3VibGU6Ci0gICAg
ICAgIHJlc3VsdC5kID0gY2FsbEpOSU1ldGhvZElEQTxqZG91YmxlPihvYmplY3QsIG1ldGhvZElk
LCBhcmdzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEJpbmRpbmdzCi0K
LX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKEpBVkFfQlJJREdFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9KTklVdGlsaXR5LmggYi9Tb3VyY2Uv
V2ViQ29yZS9icmlkZ2Uvam5pL0pOSVV0aWxpdHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNTA4YTJlNTI0ZDZkOTA3MmE3ZGEwNzZiZjQxYmFlOWU0MDdlN2NmZi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlk
Z2Uvam5pL0pOSVV0aWxpdHkuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2MCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEpOSVV0aWxpdHlfaAot
I2RlZmluZSBKTklVdGlsaXR5X2gKLQotI2lmIEVOQUJMRShKQVZBX0JSSURHRSkKLQotI2luY2x1
ZGUgIkphdmFUeXBlLmgiCi0KLSNpZiBPUyhNQUNfT1NfWCkKLSNpbmNsdWRlIDxKYXZhVk0vam5p
Lmg+Ci0jZWxzZQotI2luY2x1ZGUgPGpuaS5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBKU0Mgewot
Ci1uYW1lc3BhY2UgQmluZGluZ3MgewotCi1jb25zdCBjaGFyKiBnZXRDaGFyYWN0ZXJzRnJvbUpT
dHJpbmcoanN0cmluZyk7Ci12b2lkIHJlbGVhc2VDaGFyYWN0ZXJzRm9ySlN0cmluZyhqc3RyaW5n
LCBjb25zdCBjaGFyKik7Ci0KLWNvbnN0IGNoYXIqIGdldENoYXJhY3RlcnNGcm9tSlN0cmluZ0lu
RW52KEpOSUVudiosIGpzdHJpbmcpOwotdm9pZCByZWxlYXNlQ2hhcmFjdGVyc0ZvckpTdHJpbmdJ
bkVudihKTklFbnYqLCBqc3RyaW5nLCBjb25zdCBjaGFyKik7Ci1jb25zdCBqY2hhciogZ2V0VUNo
YXJhY3RlcnNGcm9tSlN0cmluZ0luRW52KEpOSUVudiosIGpzdHJpbmcpOwotdm9pZCByZWxlYXNl
VUNoYXJhY3RlcnNGb3JKU3RyaW5nSW5FbnYoSk5JRW52KiwganN0cmluZywgY29uc3QgamNoYXIq
KTsKLQotSmF2YVR5cGUgamF2YVR5cGVGcm9tQ2xhc3NOYW1lKGNvbnN0IGNoYXIqIG5hbWUpOwot
SmF2YVR5cGUgamF2YVR5cGVGcm9tUHJpbWl0aXZlVHlwZShjaGFyIHR5cGUpOwotY29uc3QgY2hh
ciogc2lnbmF0dXJlRnJvbUphdmFUeXBlKEphdmFUeXBlKTsKLQotanZhbHVlIGdldEpOSUZpZWxk
KGpvYmplY3QsIEphdmFUeXBlLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBzaWduYXR1
cmUpOwotanZhbHVlIGNhbGxKTklNZXRob2Qoam9iamVjdCwgSmF2YVR5cGUgcmV0dXJuVHlwZSwg
Y29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogc2lnbmF0dXJlLCBqdmFsdWUqIGFyZ3MpOwot
Ci1qbWV0aG9kSUQgZ2V0TWV0aG9kSUQoam9iamVjdCwgY29uc3QgY2hhciogbmFtZSwgY29uc3Qg
Y2hhciogc2lnKTsKLUpOSUVudiogZ2V0Sk5JRW52KCk7Ci1KYXZhVk0qIGdldEphdmFWTSgpOwot
dm9pZCBzZXRKYXZhVk0oSmF2YVZNKik7Ci0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVj
dCBKTklDYWxsZXI7Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpOSUNhbGxlcjx2b2lkPiB7Ci0gICAg
c3RhdGljIHZvaWQgY2FsbEEoam9iamVjdCBvYmosIGptZXRob2RJRCBtaWQsIGp2YWx1ZSogYXJn
cykKLSAgICB7Ci0gICAgICAgIGdldEpOSUVudigpLT5DYWxsVm9pZE1ldGhvZEEob2JqLCBtaWQs
IGFyZ3MpOwotICAgIH0KLSAgICBzdGF0aWMgdm9pZCBjYWxsVihqb2JqZWN0IG9iaiwgam1ldGhv
ZElEIG1pZCwgdmFfbGlzdCBhcmdzKQotICAgIHsKLSAgICAgICAgZ2V0Sk5JRW52KCktPkNhbGxW
b2lkTWV0aG9kVihvYmosIG1pZCwgYXJncyk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgSk5JQ2FsbGVyPGpvYmplY3Q+IHsKLSAgICBzdGF0aWMgam9iamVjdCBjYWxsQShqb2JqZWN0
IG9iaiwgam1ldGhvZElEIG1pZCwganZhbHVlKiBhcmdzKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGdldEpOSUVudigpLT5DYWxsT2JqZWN0TWV0aG9kQShvYmosIG1pZCwgYXJncyk7Ci0gICAgfQot
ICAgIHN0YXRpYyBqb2JqZWN0IGNhbGxWKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWlkLCB2YV9s
aXN0IGFyZ3MpCi0gICAgewotICAgICAgICByZXR1cm4gZ2V0Sk5JRW52KCktPkNhbGxPYmplY3RN
ZXRob2RWKG9iaiwgbWlkLCBhcmdzKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBK
TklDYWxsZXI8amJvb2xlYW4+IHsKLSAgICBzdGF0aWMgamJvb2xlYW4gY2FsbEEoam9iamVjdCBv
YmosIGptZXRob2RJRCBtaWQsIGp2YWx1ZSogYXJncykKLSAgICB7Ci0gICAgICAgIHJldHVybiBn
ZXRKTklFbnYoKS0+Q2FsbEJvb2xlYW5NZXRob2RBKG9iaiwgbWlkLCBhcmdzKTsKLSAgICB9Ci0g
ICAgc3RhdGljIGpib29sZWFuIGNhbGxWKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWlkLCB2YV9s
aXN0IGFyZ3MpCi0gICAgewotICAgICAgICByZXR1cm4gZ2V0Sk5JRW52KCktPkNhbGxCb29sZWFu
TWV0aG9kVihvYmosIG1pZCwgYXJncyk7Ci0gICAgfQotICAgIHN0YXRpYyBqYm9vbGVhbiBjYWxs
U3RhdGljVihqY2xhc3MgY2xzLCBqbWV0aG9kSUQgbWlkLCB2YV9saXN0IGFyZ3MpCi0gICAgewot
ICAgICAgICByZXR1cm4gZ2V0Sk5JRW52KCktPkNhbGxTdGF0aWNCb29sZWFuTWV0aG9kKGNscywg
bWlkLCBhcmdzKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBKTklDYWxsZXI8amJ5
dGU+IHsKLSAgICBzdGF0aWMgamJ5dGUgY2FsbEEoam9iamVjdCBvYmosIGptZXRob2RJRCBtaWQs
IGp2YWx1ZSogYXJncykKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZXRKTklFbnYoKS0+Q2FsbEJ5
dGVNZXRob2RBKG9iaiwgbWlkLCBhcmdzKTsKLSAgICB9Ci0gICAgc3RhdGljIGpieXRlIGNhbGxW
KGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWlkLCB2YV9saXN0IGFyZ3MpCi0gICAgewotICAgICAg
ICByZXR1cm4gZ2V0Sk5JRW52KCktPkNhbGxCeXRlTWV0aG9kVihvYmosIG1pZCwgYXJncyk7Ci0g
ICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSk5JQ2FsbGVyPGpjaGFyPiB7Ci0gICAgc3Rh
dGljIGpjaGFyIGNhbGxBKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWlkLCBqdmFsdWUqIGFyZ3Mp
Ci0gICAgewotICAgICAgICByZXR1cm4gZ2V0Sk5JRW52KCktPkNhbGxDaGFyTWV0aG9kQShvYmos
IG1pZCwgYXJncyk7Ci0gICAgfQotICAgIHN0YXRpYyBqY2hhciBjYWxsVihqb2JqZWN0IG9iaiwg
am1ldGhvZElEIG1pZCwgdmFfbGlzdCBhcmdzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdldEpO
SUVudigpLT5DYWxsQ2hhck1ldGhvZFYob2JqLCBtaWQsIGFyZ3MpOwotICAgIH0KLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IEpOSUNhbGxlcjxqc2hvcnQ+IHsKLSAgICBzdGF0aWMganNob3J0IGNh
bGxBKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWlkLCBqdmFsdWUqIGFyZ3MpCi0gICAgewotICAg
ICAgICByZXR1cm4gZ2V0Sk5JRW52KCktPkNhbGxTaG9ydE1ldGhvZEEob2JqLCBtaWQsIGFyZ3Mp
OwotICAgIH0KLSAgICBzdGF0aWMganNob3J0IGNhbGxWKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQg
bWlkLCB2YV9saXN0IGFyZ3MpCi0gICAgewotICAgICAgICByZXR1cm4gZ2V0Sk5JRW52KCktPkNh
bGxTaG9ydE1ldGhvZFYob2JqLCBtaWQsIGFyZ3MpOwotICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IEpOSUNhbGxlcjxqaW50PiB7Ci0gICAgc3RhdGljIGppbnQgY2FsbEEoam9iamVjdCBv
YmosIGptZXRob2RJRCBtaWQsIGp2YWx1ZSogYXJncykKLSAgICB7Ci0gICAgICAgIHJldHVybiBn
ZXRKTklFbnYoKS0+Q2FsbEludE1ldGhvZEEob2JqLCBtaWQsIGFyZ3MpOwotICAgIH0KLSAgICBz
dGF0aWMgamludCBjYWxsVihqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1pZCwgdmFfbGlzdCBhcmdz
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdldEpOSUVudigpLT5DYWxsSW50TWV0aG9kVihvYmos
IG1pZCwgYXJncyk7Ci0gICAgfQotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgSk5JQ2FsbGVyPGps
b25nPiB7Ci0gICAgc3RhdGljIGpsb25nIGNhbGxBKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWlk
LCBqdmFsdWUqIGFyZ3MpCi0gICAgewotICAgICAgICByZXR1cm4gZ2V0Sk5JRW52KCktPkNhbGxM
b25nTWV0aG9kQShvYmosIG1pZCwgYXJncyk7Ci0gICAgfQotICAgIHN0YXRpYyBqbG9uZyBjYWxs
Vihqb2JqZWN0IG9iaiwgam1ldGhvZElEIG1pZCwgdmFfbGlzdCBhcmdzKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGdldEpOSUVudigpLT5DYWxsTG9uZ01ldGhvZFYob2JqLCBtaWQsIGFyZ3MpOwot
ICAgIH0KLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpOSUNhbGxlcjxqZmxvYXQ+IHsKLSAgICBz
dGF0aWMgamZsb2F0IGNhbGxBKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWlkLCBqdmFsdWUqIGFy
Z3MpCi0gICAgewotICAgICAgICByZXR1cm4gZ2V0Sk5JRW52KCktPkNhbGxGbG9hdE1ldGhvZEEo
b2JqLCBtaWQsIGFyZ3MpOwotICAgIH0KLSAgICBzdGF0aWMgamZsb2F0IGNhbGxWKGpvYmplY3Qg
b2JqLCBqbWV0aG9kSUQgbWlkLCB2YV9saXN0IGFyZ3MpCi0gICAgewotICAgICAgICByZXR1cm4g
Z2V0Sk5JRW52KCktPkNhbGxGbG9hdE1ldGhvZFYob2JqLCBtaWQsIGFyZ3MpOwotICAgIH0KLX07
Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEpOSUNhbGxlcjxqZG91YmxlPiB7Ci0gICAgc3RhdGljIGpk
b3VibGUgY2FsbEEoam9iamVjdCBvYmosIGptZXRob2RJRCBtaWQsIGp2YWx1ZSogYXJncykKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBnZXRKTklFbnYoKS0+Q2FsbERvdWJsZU1ldGhvZEEob2JqLCBt
aWQsIGFyZ3MpOwotICAgIH0KLSAgICBzdGF0aWMgamRvdWJsZSBjYWxsVihqb2JqZWN0IG9iaiwg
am1ldGhvZElEIG1pZCwgdmFfbGlzdCBhcmdzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdldEpO
SUVudigpLT5DYWxsRG91YmxlTWV0aG9kVihvYmosIG1pZCwgYXJncyk7Ci0gICAgfQotfTsKLQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gVCBjYWxsSk5JTWV0aG9kSURBKGpvYmplY3Qgb2JqLCBqbWV0
aG9kSUQgbWlkLCBqdmFsdWUgKmFyZ3MpCi17Ci0gICAgcmV0dXJuIEpOSUNhbGxlcjxUPjo6Y2Fs
bEEob2JqLCBtaWQsIGFyZ3MpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGljIFQg
Y2FsbEpOSU1ldGhvZFYoam9iamVjdCBvYmosIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIq
IHNpZywgdmFfbGlzdCBhcmdzKQotewotICAgIEphdmFWTSoganZtID0gZ2V0SmF2YVZNKCk7Ci0g
ICAgSk5JRW52KiBlbnYgPSBnZXRKTklFbnYoKTsKLQotICAgIGlmIChvYmogJiYganZtICYmIGVu
dikgewotICAgICAgICBqY2xhc3MgY2xzID0gZW52LT5HZXRPYmplY3RDbGFzcyhvYmopOwotICAg
ICAgICBpZiAoY2xzKSB7Ci0gICAgICAgICAgICBqbWV0aG9kSUQgbWlkID0gZW52LT5HZXRNZXRo
b2RJRChjbHMsIG5hbWUsIHNpZyk7Ci0gICAgICAgICAgICBpZiAobWlkKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gQXZvaWRzIHJlZmVyZW5jZXMgdG8gY2xzIHdpdGhvdXQgcG9wcGluZyB0aGUgbG9j
YWwgZnJhbWUuCi0gICAgICAgICAgICAgICAgZW52LT5EZWxldGVMb2NhbFJlZihjbHMpOwotICAg
ICAgICAgICAgICAgIHJldHVybiBKTklDYWxsZXI8VD46OmNhbGxWKG9iaiwgbWlkLCBhcmdzKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGZpbmQgbWV0
aG9kOiAlcyBmb3IgJXAiLCBuYW1lLCBvYmopOwotICAgICAgICAgICAgZW52LT5FeGNlcHRpb25E
ZXNjcmliZSgpOwotICAgICAgICAgICAgZW52LT5FeGNlcHRpb25DbGVhcigpOwotICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJcbiIpOwotCi0gICAgICAgICAgICBlbnYtPkRlbGV0ZUxvY2Fs
UmVmKGNscyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBu
b3QgZmluZCBjbGFzcyBmb3IgJXAiLCBvYmopOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotVCBjYWxsSk5JTWV0aG9kKGpvYmplY3Qgb2JqLCBjb25z
dCBjaGFyKiBtZXRob2ROYW1lLCBjb25zdCBjaGFyKiBtZXRob2RTaWduYXR1cmUsIC4uLikKLXsK
LSAgICB2YV9saXN0IGFyZ3M7Ci0gICAgdmFfc3RhcnQoYXJncywgbWV0aG9kU2lnbmF0dXJlKTsK
LQotICAgIFQgcmVzdWx0ID0gY2FsbEpOSU1ldGhvZFY8VD4ob2JqLCBtZXRob2ROYW1lLCBtZXRo
b2RTaWduYXR1cmUsIGFyZ3MpOwotCi0gICAgdmFfZW5kKGFyZ3MpOwotCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLVQgY2FsbEpOSVN0YXRpY01ldGhvZChq
Y2xhc3MgY2xzLCBjb25zdCBjaGFyKiBtZXRob2ROYW1lLCBjb25zdCBjaGFyKiBtZXRob2RTaWdu
YXR1cmUsIC4uLikKLXsKLSAgICBKYXZhVk0qIGp2bSA9IGdldEphdmFWTSgpOwotICAgIEpOSUVu
diogZW52ID0gZ2V0Sk5JRW52KCk7Ci0gICAgdmFfbGlzdCBhcmdzOwotCi0gICAgdmFfc3RhcnQo
YXJncywgbWV0aG9kU2lnbmF0dXJlKTsKLQotICAgIFQgcmVzdWx0ID0gMDsKLQotICAgIGlmIChj
bHMgJiYganZtICYmIGVudikgewotICAgICAgICBqbWV0aG9kSUQgbWlkID0gZW52LT5HZXRTdGF0
aWNNZXRob2RJRChjbHMsIG1ldGhvZE5hbWUsIG1ldGhvZFNpZ25hdHVyZSk7Ci0gICAgICAgIGlm
IChtaWQpCi0gICAgICAgICAgICByZXN1bHQgPSBKTklDYWxsZXI8VD46OmNhbGxTdGF0aWNWKGNs
cywgbWlkLCBhcmdzKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBMT0dfRVJST1IoIkNv
dWxkIG5vdCBmaW5kIG1ldGhvZDogJXMgZm9yICVwIiwgbWV0aG9kTmFtZSwgY2xzKTsKLSAgICAg
ICAgICAgIGVudi0+RXhjZXB0aW9uRGVzY3JpYmUoKTsKLSAgICAgICAgICAgIGVudi0+RXhjZXB0
aW9uQ2xlYXIoKTsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHZhX2VuZChhcmdzKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIEJpbmRpbmdzCi0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYg
Ly8gRU5BQkxFKEpBVkFfQlJJREdFKQotCi0jZW5kaWYgLy8gSk5JVXRpbGl0eV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL0phdmFUeXBlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9icmlkZ2Uvam5pL0phdmFUeXBlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4
MGZmZWMxMTVmYzYxYTAzOWIxYzBlZGI0NjNlMmI2N2U5NDhjN2MuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9K
YXZhVHlwZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBKYXZhVHlwZV9oCi0jZGVmaW5lIEphdmFU
eXBlX2gKLQotI2lmIEVOQUJMRShKQVZBX0JSSURHRSkKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLW5h
bWVzcGFjZSBCaW5kaW5ncyB7Ci0KLS8vIFRoZSBvcmRlciBvZiB0aGVzZSBpdGVtcyBjYW4gbm90
IGJlIG1vZGlmaWVkIGFzIHRoZXkgYXJlIHRpZ2h0bHkKLS8vIGJvdW5kIHdpdGggdGhlIEpWTSBv
biBNYWMgT1NYLiBJZiBuZXcgdHlwZXMgbmVlZCB0byBiZSBhZGRlZCwgdGhleQotLy8gc2hvdWxk
IGJlIGFkZGVkIHRvIHRoZSBlbmQuIEl0IGlzIHVzZWQgaW4gam5pX29iYy5tbSB3aGVuIGNhbGxp
bmcKLS8vIHRocm91Z2ggdG8gdGhlIEpWTS4gTmV3bHkgYWRkZWQgaXRlbXMgbmVlZCB0byBiZSBt
YWRlIGNvbXBhdGlibGUKLS8vIGluIHRoYXQgZmlsZS4KLS8vCi0vLyBUaGUgdHlwZSBjb252ZXJz
aW9uIGxvZ2ljIHVzZWQgaGVyZSBuZWVkcyBpbXByb3ZpbmcgYW5kIHRoaXMgZW51bSB3aWxsIGxp
a2VseQotLy8gYmUgY2hhbmdlZCBhdCB0aGF0IHRpbWUuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzg3NDUKLWVudW0gSmF2YVR5cGUgewotICAgIEphdmFUeXBl
SW52YWxpZCA9IDAsCi0gICAgSmF2YVR5cGVWb2lkLAotICAgIEphdmFUeXBlT2JqZWN0LAotICAg
IEphdmFUeXBlQm9vbGVhbiwKLSAgICBKYXZhVHlwZUJ5dGUsCi0gICAgSmF2YVR5cGVDaGFyLAot
ICAgIEphdmFUeXBlU2hvcnQsCi0gICAgSmF2YVR5cGVJbnQsCi0gICAgSmF2YVR5cGVMb25nLAot
ICAgIEphdmFUeXBlRmxvYXQsCi0gICAgSmF2YVR5cGVEb3VibGUsCi0gICAgSmF2YVR5cGVBcnJh
eSwKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEJpbmRpbmdzCi0KLX0gLy8gbmFtZXNwYWNlIEpTQwot
Ci0jZW5kaWYgLy8gRU5BQkxFKEpBVkFfQlJJREdFKQotCi0jZW5kaWYgLy8gSmF2YVR5cGVfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9Kb2JqZWN0V3JhcHBlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL0pvYmplY3RXcmFwcGVyLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggOTczY2EwN2YxYjRlOTM5OWM1Zjc0MzY5MGQzMzY5OTNhMWJm
NWUwMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9icmlkZ2Uvam5pL0pvYmplY3RXcmFwcGVyLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDgsIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IDIwMTEsIFRoZSBBbmRy
b2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiSm9iamVjdFdyYXBwZXIuaCIKLQotI2lmIEVOQUJMRShKQVZBX0JSSURHRSkKLQotdXNp
bmcgbmFtZXNwYWNlIEpTQzo6QmluZGluZ3M7Ci0KLUpvYmplY3RXcmFwcGVyOjpKb2JqZWN0V3Jh
cHBlcihqb2JqZWN0IGluc3RhbmNlKQotewotICAgIEFTU0VSVChpbnN0YW5jZSk7Ci0KLSAgICAv
LyBDYWNoZSB0aGUgSk5JRW52IHVzZWQgdG8gZ2V0IHRoZSBnbG9iYWwgcmVmIGZvciB0aGlzIGph
dmEgaW5zdGFuYWNlLgotICAgIC8vIEl0J2xsIGJlIHVzZWQgdG8gZGVsZXRlIHRoZSByZWZlcmVu
Y2UuCi0gICAgbV9lbnYgPSBnZXRKTklFbnYoKTsKLQotICAgIG1faW5zdGFuY2UgPSBtX2Vudi0+
TmV3R2xvYmFsUmVmKGluc3RhbmNlKTsKLQotICAgIGlmICghbV9pbnN0YW5jZSkKLSAgICAgICAg
TE9HX0VSUk9SKCJDb3VsZCBub3QgZ2V0IEdsb2JhbFJlZiBmb3IgJXAiLCBpbnN0YW5jZSk7Ci19
Ci0KLUpvYmplY3RXcmFwcGVyOjp+Sm9iamVjdFdyYXBwZXIoKQotewotICAgIG1fZW52LT5EZWxl
dGVHbG9iYWxSZWYobV9pbnN0YW5jZSk7Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSkFWQV9CUklE
R0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL0pvYmplY3RXcmFwcGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL0pvYmplY3RXcmFwcGVyLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2OGYyMTJhZjIzYjI0NTdlNTk3YjBlYTc5MmMwY2MxYTNi
ZjI4ZTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9Kb2JqZWN0V3JhcHBlci5oCisrKyAvZGV2L251bGwKQEAg
LTEsNjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAyMDExLCBUaGUgQW5kcm9p
ZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBKb2JqZWN0V3JhcHBlcl9oCi0j
ZGVmaW5lIEpvYmplY3RXcmFwcGVyX2gKLQotI2lmIEVOQUJMRShKQVZBX0JSSURHRSkKLQotI2lu
Y2x1ZGUgIkpOSVV0aWxpdHkuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi1uYW1lc3BhY2UgQmlu
ZGluZ3MgewotCi1jbGFzcyBKb2JqZWN0V3JhcHBlciA6IHB1YmxpYyBSZWZDb3VudGVkPEpvYmpl
Y3RXcmFwcGVyPiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Sm9iamVjdFdyYXBw
ZXI+IGNyZWF0ZShqb2JqZWN0IG9iamVjdCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IEpvYmplY3RX
cmFwcGVyKG9iamVjdCkpOyB9Ci0gICAgfkpvYmplY3RXcmFwcGVyKCk7Ci0KLSAgICBqb2JqZWN0
IGluc3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZTsgfQotICAgIHZvaWQgc2V0SW5z
dGFuY2Uoam9iamVjdCBpbnN0YW5jZSkgeyBtX2luc3RhbmNlID0gaW5zdGFuY2U7IH0KLQotcHJp
dmF0ZToKLSAgICBKb2JqZWN0V3JhcHBlcihqb2JqZWN0KTsKLQotICAgIGpvYmplY3QgbV9pbnN0
YW5jZTsKLSAgICBKTklFbnYqIG1fZW52OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgQmluZGluZ3MK
LQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSkFWQV9CUklER0UpCi0K
LSNlbmRpZiAvLyBKb2JqZWN0V3JhcHBlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
cmlkZ2Uvam5pL2puaV9qc29iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qbmlf
anNvYmplY3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc0ZjE2MzM3OWNhNzRl
YTg1NzUyNTgzNjE4NGQyNzM4OGZkOTA0YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVjdC5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
Zm5kZWYgSkFWQVNDUklQVENPUkVfQklORElOR1NfSk5JX0pTT0JKRUNUX0gKLSNkZWZpbmUgSkFW
QVNDUklQVENPUkVfQklORElOR1NfSk5JX0pTT0JKRUNUX0gKLQotI2lmIEVOQUJMRShKQVZBX0JS
SURHRSkKLQotI2luY2x1ZGUgIkpOSVV0aWxpdHkuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTVmFs
dWUuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLSNkZWZpbmUgamxvbmdfdG9fcHRyKGEp
ICgodm9pZCopKHVpbnRwdHJfdCkoYSkpCi0jZGVmaW5lIGpsb25nX3RvX2ltcHB0cihhKSAoSlND
Ojpqc0Nhc3Q8SlNDOjpKU09iamVjdCo+KChzdGF0aWNfY2FzdDxKU0NlbGwqPigodm9pZCopKHVp
bnRwdHJfdCkoYSkpKSkpCi0jZGVmaW5lIHB0cl90b19qbG9uZyhhKSAoKGpsb25nKSh1aW50cHRy
X3QpKGEpKQotCi0jaWYgUExBVEZPUk0oTUFDKQotCi1uYW1lc3BhY2UgSlNDIHsKLQotY2xhc3Mg
QXJnTGlzdDsKLWNsYXNzIEV4ZWNTdGF0ZTsKLWNsYXNzIEpTT2JqZWN0OwotY2xhc3MgTWFya2Vk
QXJndW1lbnRCdWZmZXI7Ci0KLW5hbWVzcGFjZSBCaW5kaW5ncyB7Ci0KLWNsYXNzIFJvb3RPYmpl
Y3Q7Ci0KLWVudW0gSlNPYmplY3RDYWxsVHlwZSB7Ci0gICAgQ3JlYXRlTmF0aXZlLAotICAgIENh
bGwsCi0gICAgRXZhbCwKLSAgICBHZXRNZW1iZXIsCi0gICAgU2V0TWVtYmVyLAotICAgIFJlbW92
ZU1lbWJlciwKLSAgICBHZXRTbG90LAotICAgIFNldFNsb3QsCi0gICAgVG9TdHJpbmcsCi0gICAg
RmluYWxpemUKLX07Ci0KLXN0cnVjdCBKU09iamVjdENhbGxDb250ZXh0Ci17Ci0gICAgSlNPYmpl
Y3RDYWxsVHlwZSB0eXBlOwotICAgIGpsb25nIG5hdGl2ZUhhbmRsZTsKLSAgICBqc3RyaW5nIHN0
cmluZzsKLSAgICBqb2JqZWN0QXJyYXkgYXJnczsKLSAgICBqaW50IGluZGV4OwotICAgIGpvYmpl
Y3QgdmFsdWU7Ci0gICAgQ0ZSdW5Mb29wUmVmIG9yaWdpbmF0aW5nTG9vcDsKLSAgICBqdmFsdWUg
cmVzdWx0OwotfTsKLQotY2xhc3MgSmF2YUpTT2JqZWN0Ci17Ci1wdWJsaWM6Ci0gICAgSmF2YUpT
T2JqZWN0KGpsb25nIG5hdGl2ZUhhbmRsZSk7Ci0gICAgCi0gICAgc3RhdGljIGpsb25nIGNyZWF0
ZU5hdGl2ZShqbG9uZyBuYXRpdmVIYW5kbGUpOwotICAgIGpvYmplY3QgY2FsbChqc3RyaW5nIG1l
dGhvZE5hbWUsIGpvYmplY3RBcnJheSBhcmdzKSBjb25zdDsKLSAgICBqb2JqZWN0IGV2YWwoanN0
cmluZyBzY3JpcHQpIGNvbnN0OwotICAgIGpvYmplY3QgZ2V0TWVtYmVyKGpzdHJpbmcgbWVtYmVy
TmFtZSkgY29uc3Q7Ci0gICAgdm9pZCBzZXRNZW1iZXIoanN0cmluZyBtZW1iZXJOYW1lLCBqb2Jq
ZWN0IHZhbHVlKSBjb25zdDsKLSAgICB2b2lkIHJlbW92ZU1lbWJlcihqc3RyaW5nIG1lbWJlck5h
bWUpIGNvbnN0OwotICAgIGpvYmplY3QgZ2V0U2xvdChqaW50IGluZGV4KSBjb25zdDsKLSAgICB2
b2lkIHNldFNsb3QoamludCBpbmRleCwgam9iamVjdCB2YWx1ZSkgY29uc3Q7Ci0gICAganN0cmlu
ZyB0b1N0cmluZygpIGNvbnN0OwotICAgIHZvaWQgZmluYWxpemUoKSBjb25zdDsKLSAgICAKLSAg
ICBzdGF0aWMganZhbHVlIGludm9rZShKU09iamVjdENhbGxDb250ZXh0Kik7Ci0KLSAgICBqb2Jq
ZWN0IGNvbnZlcnRWYWx1ZVRvSk9iamVjdChKU1ZhbHVlKSBjb25zdDsKLSAgICBKU1ZhbHVlIGNv
bnZlcnRKT2JqZWN0VG9WYWx1ZShFeGVjU3RhdGUqLCBqb2JqZWN0KSBjb25zdDsKLSAgICB2b2lk
IGdldExpc3RGcm9tSkFycmF5KEV4ZWNTdGF0ZSosIGpvYmplY3RBcnJheSwgTWFya2VkQXJndW1l
bnRCdWZmZXImKSBjb25zdDsKLSAgICAKLSAgICBSb290T2JqZWN0KiByb290T2JqZWN0KCkgY29u
c3Q7Ci0gICAgCi0gICAgLy8gTXVzdCBiZSBjYWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgd2ls
bCBiZSB1c2VkIHRvIGFjY2VzcyBKYXZhU2NyaXB0LgotICAgIHN0YXRpYyB2b2lkIGluaXRpYWxp
emVKTklUaHJlYWRpbmcoKTsKLXByaXZhdGU6Ci0gICAgUmVmUHRyPFJvb3RPYmplY3Q+IF9yb290
T2JqZWN0OwotICAgIEpTT2JqZWN0KiBfaW1wOwotfTsKLQotCi19IC8vIG5hbWVzcGFjZSBCaW5k
aW5ncwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotZXh0ZXJuICJDIiB7Ci0KLS8vIFRoZSBKYXZh
IFZNIGNhbGxzIHRoZXNlIGZ1bmN0aW9ucyB0byBoYW5kbGUgY2FsbHMgdG8gbWV0aG9kcyBpbiBK
YXZhJ3MgSlNPYmplY3QgY2xhc3MuCi1qbG9uZyBLSlNfSlNDcmVhdGVOYXRpdmVKU09iamVjdChK
TklFbnYqLCBqY2xhc3MsIGpzdHJpbmcganVybCwgamxvbmcgbmF0aXZlSGFuZGxlLCBqYm9vbGVh
biBjdHgpOwotdm9pZCBLSlNfSlNPYmplY3RfSlNGaW5hbGl6ZShKTklFbnYqLCBqY2xhc3MsIGps
b25nIG5hdGl2ZUpTT2JqZWN0KTsKLWpvYmplY3QgS0pTX0pTT2JqZWN0X0pTT2JqZWN0Q2FsbChK
TklFbnYqLCBqY2xhc3MsIGpsb25nIG5hdGl2ZUpTT2JqZWN0LCBqc3RyaW5nIGp1cmwsIGpzdHJp
bmcgbWV0aG9kTmFtZSwgam9iamVjdEFycmF5IGFyZ3MsIGpib29sZWFuIGN0eCk7Ci1qb2JqZWN0
IEtKU19KU09iamVjdF9KU09iamVjdEV2YWwoSk5JRW52KiwgamNsYXNzLCBqbG9uZyBuYXRpdmVK
U09iamVjdCwganN0cmluZyBqdXJsLCBqc3RyaW5nIGpzY3JpcHQsIGpib29sZWFuIGN0eCk7Ci1q
b2JqZWN0IEtKU19KU09iamVjdF9KU09iamVjdEdldE1lbWJlcihKTklFbnYqLCBqY2xhc3MsIGps
b25nIG5hdGl2ZUpTT2JqZWN0LCBqc3RyaW5nIGp1cmwsIGpzdHJpbmcgam5hbWUsIGpib29sZWFu
IGN0eCk7Ci12b2lkIEtKU19KU09iamVjdF9KU09iamVjdFNldE1lbWJlcihKTklFbnYqLCBqY2xh
c3MsIGpsb25nIG5hdGl2ZUpTT2JqZWN0LCBqc3RyaW5nIGp1cmwsIGpzdHJpbmcgam5hbWUsIGpv
YmplY3QgdmFsdWUsIGpib29sZWFuIGN0eCk7Ci12b2lkIEtKU19KU09iamVjdF9KU09iamVjdFJl
bW92ZU1lbWJlcihKTklFbnYqLCBqY2xhc3MsIGpsb25nIG5hdGl2ZUpTT2JqZWN0LCBqc3RyaW5n
IGp1cmwsIGpzdHJpbmcgam5hbWUsIGpib29sZWFuIGN0eCk7Ci1qb2JqZWN0IEtKU19KU09iamVj
dF9KU09iamVjdEdldFNsb3QoSk5JRW52KiwgamNsYXNzLCBqbG9uZyBuYXRpdmVKU09iamVjdCwg
anN0cmluZyBqdXJsLCBqaW50IGppbmRleCwgamJvb2xlYW4gY3R4KTsKLXZvaWQgS0pTX0pTT2Jq
ZWN0X0pTT2JqZWN0U2V0U2xvdChKTklFbnYqLCBqY2xhc3MsIGpsb25nIG5hdGl2ZUpTT2JqZWN0
LCBqc3RyaW5nIGp1cmwsIGppbnQgamluZGV4LCBqb2JqZWN0IHZhbHVlLCBqYm9vbGVhbiBjdHgp
OwotanN0cmluZyBLSlNfSlNPYmplY3RfSlNPYmplY3RUb1N0cmluZyhKTklFbnYqLCBqY2xhc3Ms
IGpsb25nIG5hdGl2ZUpTT2JqZWN0KTsKLQotfQotCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQot
Ci0jZW5kaWYgLy8gRU5BQkxFKEpBVkFfQlJJREdFKQotCi0jZW5kaWYgLy8gSkFWQVNDUklQVENP
UkVfQklORElOR1NfSk5JX0pTT0JKRUNUX0gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9qbmkvam5pX2pzb2JqZWN0Lm1tIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qbmlf
anNvYmplY3QubW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViMjRlYjBmZTg2OWQ4
ZDAyNDNjM2QxYjY2YmExZDBmZGE4ZjIyODcuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qbmlfanNvYmplY3Qu
bW0KKysrIC9kZXYvbnVsbApAQCAtMSw2OTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwMywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJqbmlfanNvYmplY3QuaCIKLQotI2lmIEVOQUJMRShK
QVZBX0JSSURHRSkKLQotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiSk5JVXRpbGl0eS5o
IgotI2luY2x1ZGUgIkpOSVV0aWxpdHlQcml2YXRlLmgiCi0jaW5jbHVkZSAiSlNET01CaW5kaW5n
LmgiCi0jaW5jbHVkZSAiSmF2YVJ1bnRpbWVPYmplY3QuaCIKLSNpbmNsdWRlICJKYXZhU3RyaW5n
SlNDLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIu
aCIKLSNpbmNsdWRlICJXZWJDb3JlRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAicnVudGltZV9vYmpl
Y3QuaCIKLSNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKLSNpbmNsdWRlIDxpbnRlcnByZXRlci9D
YWxsRnJhbWUuaD4KLSNpbmNsdWRlIDxwYXJzZXIvU291cmNlQ29kZS5oPgotI2luY2x1ZGUgPHJ1
bnRpbWUvQ29tcGxldGlvbi5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaD4K
LSNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgotCi11c2luZyBXZWJDb3JlOjpGcmFtZTsKLQot
dXNpbmcgbmFtZXNwYWNlIEpTQzo6QmluZGluZ3M7Ci11c2luZyBuYW1lc3BhY2UgSlNDOwotdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLSNkZWZpbmUgVW5kZWZpbmVkSGFuZGxlIDEKLQotc3Rh
dGljIENGUnVuTG9vcFNvdXJjZVJlZiBfcGVyZm9ybUphdmFTY3JpcHRTb3VyY2U7Ci1zdGF0aWMg
Q0ZSdW5Mb29wUmVmIF9wZXJmb3JtSmF2YVNjcmlwdFJ1bkxvb3A7Ci0KLS8vIE1heSBvbmx5IGJl
IHNldCBieSBkaXNwYXRjaFRvSmF2YVNjcmlwdFRocmVhZCgpLgotc3RhdGljIENGUnVuTG9vcFNv
dXJjZVJlZiBjb21wbGV0aW9uU291cmNlOwotCi1zdGF0aWMgdm9pZCBjb21wbGV0ZWRKYXZhU2Ny
aXB0QWNjZXNzICh2b2lkICppKQotewotICAgIEFTU0VSVChDRlJ1bkxvb3BHZXRDdXJyZW50KCkg
IT0gX3BlcmZvcm1KYXZhU2NyaXB0UnVuTG9vcCk7Ci0gICAgCi0gICAgSlNPYmplY3RDYWxsQ29u
dGV4dCAqY2FsbENvbnRleHQgPSAoSlNPYmplY3RDYWxsQ29udGV4dCAqKWk7Ci0gICAgQ0ZSdW5M
b29wUmVmIHJ1bkxvb3AgPSAoQ0ZSdW5Mb29wUmVmKWNhbGxDb250ZXh0LT5vcmlnaW5hdGluZ0xv
b3A7Ci0gICAgCi0gICAgQVNTRVJUKENGUnVuTG9vcEdldEN1cnJlbnQoKSA9PSBydW5Mb29wKTsK
LSAgICAKLSAgICBDRlJ1bkxvb3BTdG9wKHJ1bkxvb3ApOwotfQotCi1zdGF0aWMgcHRocmVhZF9v
bmNlX3QgamF2YVNjcmlwdEFjY2Vzc0xvY2tPbmNlID0gUFRIUkVBRF9PTkNFX0lOSVQ7Ci1zdGF0
aWMgcHRocmVhZF9tdXRleF90IGphdmFTY3JpcHRBY2Nlc3NMb2NrOwotc3RhdGljIGludCBqYXZh
U2NyaXB0QWNjZXNzTG9ja0NvdW50ID0gMDsKLQotc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUphdmFT
Y3JpcHRBY2Nlc3NMb2NrKCkKLXsKLSAgICBwdGhyZWFkX211dGV4YXR0cl90IGF0dHI7Ci0gICAg
Ci0gICAgcHRocmVhZF9tdXRleGF0dHJfaW5pdCgmYXR0cik7Ci0gICAgcHRocmVhZF9tdXRleGF0
dHJfc2V0dHlwZSAoJmF0dHIsIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFKTsKLSAgICAKLSAgICBw
dGhyZWFkX211dGV4X2luaXQoJmphdmFTY3JpcHRBY2Nlc3NMb2NrLCAmYXR0cik7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgdm9pZCBsb2NrSmF2YVNjcmlwdEFjY2VzcygpCi17Ci0gICAgLy8gUGVyaGFw
cyBhZGQgZGVhZGxvY2sgZGV0ZWN0aW9uPwotICAgIHB0aHJlYWRfb25jZSgmamF2YVNjcmlwdEFj
Y2Vzc0xvY2tPbmNlLCBpbml0aWFsaXplSmF2YVNjcmlwdEFjY2Vzc0xvY2spOwotICAgIHB0aHJl
YWRfbXV0ZXhfbG9jaygmamF2YVNjcmlwdEFjY2Vzc0xvY2spOwotICAgIGphdmFTY3JpcHRBY2Nl
c3NMb2NrQ291bnQrKzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVubG9ja0phdmFTY3JpcHRB
Y2Nlc3MoKQotewotICAgIGphdmFTY3JpcHRBY2Nlc3NMb2NrQ291bnQtLTsKLSAgICBwdGhyZWFk
X211dGV4X3VubG9jaygmamF2YVNjcmlwdEFjY2Vzc0xvY2spOwotfQotCi1zdGF0aWMgdm9pZCBk
aXNwYXRjaFRvSmF2YVNjcmlwdFRocmVhZChKU09iamVjdENhbGxDb250ZXh0ICpjb250ZXh0KQot
ewotICAgIC8vIFRoaXMgbG9jayBndWFyYW50ZWVzIHRoYXQgb25seSBvbmUgdGhyZWFkIGNhbiBp
bnZva2UKLSAgICAvLyBhdCBhIHRpbWUsIGFuZCBhbHNvIGd1YXJhbnRlZXMgdGhhdCBjb21wbGV0
aW9uU291cmNlOwotICAgIC8vIHdvbid0IGdldCBjbG9iYmVyZWQuCi0gICAgbG9ja0phdmFTY3Jp
cHRBY2Nlc3MoKTsKLSAgICAKLSAgICBDRlJ1bkxvb3BSZWYgY3VycmVudFJ1bkxvb3AgPSBDRlJ1
bkxvb3BHZXRDdXJyZW50KCk7Ci0gICAgCi0gICAgQVNTRVJUKGN1cnJlbnRSdW5Mb29wICE9IF9w
ZXJmb3JtSmF2YVNjcmlwdFJ1bkxvb3ApOwotICAgIAotICAgIC8vIFNldHVwIGEgc291cmNlIHRv
IHNpZ25hbCBvbmNlIHRoZSBpbnZvY2F0aW9uIG9mIHRoZSBKYXZhU2NyaXB0Ci0gICAgLy8gY2Fs
bCBjb21wbGV0ZXMuCi0gICAgLy8KLSAgICAvLyBGSVhNRTogIFRoaXMgY291bGQgYmUgYSBwb3Rl
bnRpYWwgcGVyZm9ybWFuY2UgaXNzdWUuICBDcmVhdGluZyBhbmQKLSAgICAvLyBhZGRpbmcgcnVu
IGxvb3Agc291cmNlcyBpcyBleHBlbnNpdmUuICBXZSBjb3VsZCBjcmVhdGUgb25lIHNvdXJjZSAK
LSAgICAvLyBwZXIgdGhyZWFkLCBhcyBuZWVkZWQsIGluc3RlYWQuCi0gICAgY29udGV4dC0+b3Jp
Z2luYXRpbmdMb29wID0gY3VycmVudFJ1bkxvb3A7Ci0gICAgQ0ZSdW5Mb29wU291cmNlQ29udGV4
dCBzb3VyY2VDb250ZXh0ID0gezAsIGNvbnRleHQsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5V
TEwsIE5VTEwsIE5VTEwsIGNvbXBsZXRlZEphdmFTY3JpcHRBY2Nlc3N9OwotICAgIGNvbXBsZXRp
b25Tb3VyY2UgPSBDRlJ1bkxvb3BTb3VyY2VDcmVhdGUoTlVMTCwgMCwgJnNvdXJjZUNvbnRleHQp
OwotICAgIENGUnVuTG9vcEFkZFNvdXJjZShjdXJyZW50UnVuTG9vcCwgY29tcGxldGlvblNvdXJj
ZSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKLSAgICAKLSAgICAvLyBXYWtldXAgSmF2YVNjcmlw
dCBhY2Nlc3MgdGhyZWFkIGFuZCBtYWtlIGl0IGRvIGl0cyB3b3JrLgotICAgIENGUnVuTG9vcFNv
dXJjZVNpZ25hbChfcGVyZm9ybUphdmFTY3JpcHRTb3VyY2UpOwotICAgIGlmIChDRlJ1bkxvb3BJ
c1dhaXRpbmcoX3BlcmZvcm1KYXZhU2NyaXB0UnVuTG9vcCkpCi0gICAgICAgIENGUnVuTG9vcFdh
a2VVcChfcGVyZm9ybUphdmFTY3JpcHRSdW5Mb29wKTsKLSAgICAKLSAgICAvLyBXYWl0IHVudGls
IHRoZSBKYXZhU2NyaXB0IGFjY2VzcyB0aHJlYWQgaXMgZG9uZS4KLSAgICBDRlJ1bkxvb3BSdW4g
KCk7Ci0gICAgCi0gICAgQ0ZSdW5Mb29wUmVtb3ZlU291cmNlKGN1cnJlbnRSdW5Mb29wLCBjb21w
bGV0aW9uU291cmNlLCBrQ0ZSdW5Mb29wRGVmYXVsdE1vZGUpOwotICAgIENGUmVsZWFzZSAoY29t
cGxldGlvblNvdXJjZSk7Ci0gICAgCi0gICAgdW5sb2NrSmF2YVNjcmlwdEFjY2VzcygpOwotfQot
Ci1zdGF0aWMgdm9pZCBwZXJmb3JtSmF2YVNjcmlwdEFjY2Vzcyh2b2lkKikKLXsKLSAgICBBU1NF
UlQoQ0ZSdW5Mb29wR2V0Q3VycmVudCgpID09IF9wZXJmb3JtSmF2YVNjcmlwdFJ1bkxvb3ApOwot
ICAgIAotICAgIC8vIERpc3BhdGNoIEphdmFTY3JpcHQgY2FsbHMgaGVyZS4KLSAgICBDRlJ1bkxv
b3BTb3VyY2VDb250ZXh0IHNvdXJjZUNvbnRleHQ7Ci0gICAgQ0ZSdW5Mb29wU291cmNlR2V0Q29u
dGV4dCAoY29tcGxldGlvblNvdXJjZSwgJnNvdXJjZUNvbnRleHQpOwotICAgIEpTT2JqZWN0Q2Fs
bENvbnRleHQgKmNhbGxDb250ZXh0ID0gKEpTT2JqZWN0Q2FsbENvbnRleHQgKilzb3VyY2VDb250
ZXh0LmluZm87ICAgIAotICAgIENGUnVuTG9vcFJlZiBvcmlnaW5hdGluZ0xvb3AgPSBjYWxsQ29u
dGV4dC0+b3JpZ2luYXRpbmdMb29wOwotICAgIAotICAgIEphdmFKU09iamVjdDo6aW52b2tlIChj
YWxsQ29udGV4dCk7Ci0gICAgCi0gICAgLy8gU2lnbmFsIHRoZSBvcmlnaW5hdGluZyB0aHJlYWQg
dGhhdCB3ZSdyZSBkb25lLgotICAgIENGUnVuTG9vcFNvdXJjZVNpZ25hbCAoY29tcGxldGlvblNv
dXJjZSk7Ci0gICAgaWYgKENGUnVuTG9vcElzV2FpdGluZyhvcmlnaW5hdGluZ0xvb3ApKQotICAg
ICAgICBDRlJ1bkxvb3BXYWtlVXAob3JpZ2luYXRpbmdMb29wKTsKLX0KLQotLy8gTXVzdCBiZSBj
YWxsZWQgZnJvbSB0aGUgdGhyZWFkIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGFjY2VzcyBKYXZhU2Ny
aXB0Lgotdm9pZCBKYXZhSlNPYmplY3Q6OmluaXRpYWxpemVKTklUaHJlYWRpbmcoKSB7Ci0gICAg
Ly8gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UuCi0gICAgQVNTRVJUKCFfcGVyZm9ybUphdmFT
Y3JpcHRSdW5Mb29wKTsKLSAgICAKLSAgICAvLyBBc3N1bWUgdGhhdCB3ZSBjYW4gcmV0YWluIHRo
aXMgcnVuIGxvb3AgZm9yZXZlci4gIEl0J2xsIG1vc3QgCi0gICAgLy8gbGlrZWx5IChhbHdheXM/
KSBiZSB0aGUgbWFpbiBsb29wLgotICAgIF9wZXJmb3JtSmF2YVNjcmlwdFJ1bkxvb3AgPSAoQ0ZS
dW5Mb29wUmVmKUNGUmV0YWluKENGUnVuTG9vcEdldEN1cnJlbnQoKSk7Ci0gICAgCi0gICAgLy8g
U2V0dXAgYSBzb3VyY2UgdGhlIG90aGVyIHRocmVhZHMgY2FuIHVzZSB0byBzaWduYWwgdGhlIF9y
dW5Mb29wCi0gICAgLy8gdGhyZWFkIHRoYXQgYSBKYXZhU2NyaXB0IGNhbGwgbmVlZHMgdG8gYmUg
aW52b2tlZC4KLSAgICBDRlJ1bkxvb3BTb3VyY2VDb250ZXh0IHNvdXJjZUNvbnRleHQgPSB7MCwg
TlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgcGVyZm9ybUph
dmFTY3JpcHRBY2Nlc3N9OwotICAgIF9wZXJmb3JtSmF2YVNjcmlwdFNvdXJjZSA9IENGUnVuTG9v
cFNvdXJjZUNyZWF0ZShOVUxMLCAwLCAmc291cmNlQ29udGV4dCk7Ci0gICAgQ0ZSdW5Mb29wQWRk
U291cmNlKF9wZXJmb3JtSmF2YVNjcmlwdFJ1bkxvb3AsIF9wZXJmb3JtSmF2YVNjcmlwdFNvdXJj
ZSwga0NGUnVuTG9vcERlZmF1bHRNb2RlKTsKLX0KLQotc3RhdGljIGJvb2wgaXNKYXZhU2NyaXB0
VGhyZWFkKCkKLXsKLSAgICByZXR1cm4gKF9wZXJmb3JtSmF2YVNjcmlwdFJ1bkxvb3AgPT0gQ0ZS
dW5Mb29wR2V0Q3VycmVudCgpKTsKLX0KLQotanZhbHVlIEphdmFKU09iamVjdDo6aW52b2tlKEpT
T2JqZWN0Q2FsbENvbnRleHQgKmNvbnRleHQpCi17Ci0gICAganZhbHVlIHJlc3VsdDsKLQotICAg
IGJ6ZXJvICgodm9pZCAqKSZyZXN1bHQsIHNpemVvZihqdmFsdWUpKTsKLSAgICAKLSAgICBpZiAo
IWlzSmF2YVNjcmlwdFRocmVhZCgpKSB7ICAgICAgICAKLSAgICAgICAgLy8gU2VuZCB0aGUgY2Fs
bCBjb250ZXh0IHRvIHRoZSB0aHJlYWQgdGhhdCBpcyBhbGxvd2VkIHRvCi0gICAgICAgIC8vIGNh
bGwgSmF2YVNjcmlwdC4KLSAgICAgICAgZGlzcGF0Y2hUb0phdmFTY3JpcHRUaHJlYWQoY29udGV4
dCk7Ci0gICAgICAgIHJlc3VsdCA9IGNvbnRleHQtPnJlc3VsdDsKLSAgICB9Ci0gICAgZWxzZSB7
Ci0gICAgICAgIGpsb25nIG5hdGl2ZUhhbmRsZSA9IGNvbnRleHQtPm5hdGl2ZUhhbmRsZTsKLSAg
ICAgICAgaWYgKG5hdGl2ZUhhbmRsZSA9PSBVbmRlZmluZWRIYW5kbGUgfHwgbmF0aXZlSGFuZGxl
ID09IDApIHsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoY29udGV4dC0+dHlwZSA9PSBDcmVhdGVOYXRpdmUpIHsKLSAgICAgICAgICAgIHJlc3Vs
dC5qID0gSmF2YUpTT2JqZWN0OjpjcmVhdGVOYXRpdmUobmF0aXZlSGFuZGxlKTsKLSAgICAgICAg
fQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIEpTT2JqZWN0ICppbXAgPSBqbG9uZ190b19p
bXBwdHIobmF0aXZlSGFuZGxlKTsKLSAgICAgICAgICAgIGlmICghZmluZFByb3RlY3RpbmdSb290
T2JqZWN0KGltcCkpIHsKLSAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkF0dGVtcHQgdG8gYWNj
ZXNzIEphdmFTY3JpcHQgZnJvbSBkZXN0cm95ZWQgYXBwbGV0LCB0eXBlICVkLiIsIGNvbnRleHQt
PnR5cGUpOwotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHN3aXRjaCAoY29udGV4dC0+dHlwZSl7ICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgY2FzZSBDYWxsOiB7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5sID0gSmF2
YUpTT2JqZWN0KG5hdGl2ZUhhbmRsZSkuY2FsbChjb250ZXh0LT5zdHJpbmcsIGNvbnRleHQtPmFy
Z3MpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBFdmFsOiB7Ci0gICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5sID0gSmF2YUpTT2JqZWN0KG5hdGl2ZUhhbmRsZSkuZXZhbChjb250ZXh0
LT5zdHJpbmcpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIEdldE1lbWJlcjogewotICAgICAg
ICAgICAgICAgICAgICByZXN1bHQubCA9IEphdmFKU09iamVjdChuYXRpdmVIYW5kbGUpLmdldE1l
bWJlcihjb250ZXh0LT5zdHJpbmcpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBTZXRN
ZW1iZXI6IHsKLSAgICAgICAgICAgICAgICAgICAgSmF2YUpTT2JqZWN0KG5hdGl2ZUhhbmRsZSku
c2V0TWVtYmVyKGNvbnRleHQtPnN0cmluZywgY29udGV4dC0+dmFsdWUpOwotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgY2FzZSBSZW1vdmVNZW1iZXI6IHsKLSAgICAgICAgICAgICAgICAgICAgSmF2
YUpTT2JqZWN0KG5hdGl2ZUhhbmRsZSkucmVtb3ZlTWVtYmVyKGNvbnRleHQtPnN0cmluZyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGNhc2UgR2V0U2xvdDogewotICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQubCA9IEphdmFKU09iamVjdChuYXRpdmVIYW5kbGUpLmdldFNsb3QoY29udGV4dC0+aW5k
ZXgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBTZXRTbG90OiB7Ci0gICAgICAgICAg
ICAgICAgICAgIEphdmFKU09iamVjdChuYXRpdmVIYW5kbGUpLnNldFNsb3QoY29udGV4dC0+aW5k
ZXgsIGNvbnRleHQtPnZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBUb1N0cmluZzog
ewotICAgICAgICAgICAgICAgICAgICByZXN1bHQubCA9IChqb2JqZWN0KSBKYXZhSlNPYmplY3Qo
bmF0aXZlSGFuZGxlKS50b1N0cmluZygpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgCi0gICAgICAgICAgICAgICAgY2FzZSBGaW5hbGl6ZTogewot
ICAgICAgICAgICAgICAgICAgICBKYXZhSlNPYmplY3QobmF0aXZlSGFuZGxlKS5maW5hbGl6ZSgp
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAgICAgICAg
ICBMT0dfRVJST1IoImludmFsaWQgSmF2YVNjcmlwdCBjYWxsIik7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGNvbnRleHQtPnJlc3VsdCA9IHJl
c3VsdDsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0KLUphdmFKU09iamVjdDo6
SmF2YUpTT2JqZWN0KGpsb25nIG5hdGl2ZUpTT2JqZWN0KQotewotICAgIF9pbXAgPSBqbG9uZ190
b19pbXBwdHIobmF0aXZlSlNPYmplY3QpOwotICAgIAotICAgIEFTU0VSVChfaW1wKTsKLSAgICBf
cm9vdE9iamVjdCA9IGZpbmRQcm90ZWN0aW5nUm9vdE9iamVjdChfaW1wKTsKLSAgICBBU1NFUlQo
X3Jvb3RPYmplY3QpOwotfQotCi1Sb290T2JqZWN0KiBKYXZhSlNPYmplY3Q6OnJvb3RPYmplY3Qo
KSBjb25zdAoteyAKLSAgICByZXR1cm4gX3Jvb3RPYmplY3QgJiYgX3Jvb3RPYmplY3QtPmlzVmFs
aWQoKSA/IF9yb290T2JqZWN0LmdldCgpIDogMDsgCi19Ci0KLWpvYmplY3QgSmF2YUpTT2JqZWN0
OjpjYWxsKGpzdHJpbmcgbWV0aG9kTmFtZSwgam9iamVjdEFycmF5IGFyZ3MpIGNvbnN0Ci17Ci0g
ICAgTE9HKExpdmVDb25uZWN0LCAiSmF2YUpTT2JqZWN0OjpjYWxsIG1ldGhvZE5hbWUgPSAlcyIs
IEphdmFTdHJpbmcobWV0aG9kTmFtZSkudXRmOCgpKTsKLQotICAgIFJvb3RPYmplY3QqIHJvb3RP
YmplY3QgPSB0aGlzLT5yb290T2JqZWN0KCk7Ci0gICAgaWYgKCFyb290T2JqZWN0KQotICAgICAg
ICByZXR1cm4gMDsKLSAgICAKLSAgICAvLyBMb29rdXAgdGhlIGZ1bmN0aW9uIG9iamVjdC4KLSAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgIAotICAgIElkZW50aWZpZXIg
aWRlbnRpZmllcihleGVjLCBKYXZhU3RyaW5nKG1ldGhvZE5hbWUpLmltcGwoKSk7Ci0gICAgSlNW
YWx1ZSBmdW5jdGlvbiA9IF9pbXAtPmdldChleGVjLCBpZGVudGlmaWVyKTsKLSAgICBDYWxsRGF0
YSBjYWxsRGF0YTsKLSAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGZ1bmN0aW9u
LCBjYWxsRGF0YSk7Ci0gICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICAvLyBDYWxsIHRoZSBmdW5jdGlvbiBvYmplY3QuCi0gICAgTWFya2Vk
QXJndW1lbnRCdWZmZXIgYXJnTGlzdDsKLSAgICBnZXRMaXN0RnJvbUpBcnJheShleGVjLCBhcmdz
LCBhcmdMaXN0KTsKLSAgICByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgp
LnRpbWVvdXRDaGVja2VyLnN0YXJ0KCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBKU0M6OmNhbGwo
ZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgX2ltcCwgYXJnTGlzdCk7Ci0gICAg
cm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbERhdGEoKS50aW1lb3V0Q2hlY2tlci5z
dG9wKCk7Ci0KLSAgICByZXR1cm4gY29udmVydFZhbHVlVG9KT2JqZWN0KHJlc3VsdCk7Ci19Ci0K
LWpvYmplY3QgSmF2YUpTT2JqZWN0OjpldmFsKGpzdHJpbmcgc2NyaXB0KSBjb25zdAotewotICAg
IExPRyhMaXZlQ29ubmVjdCwgIkphdmFKU09iamVjdDo6ZXZhbCBzY3JpcHQgPSAlcyIsIEphdmFT
dHJpbmcoc2NyaXB0KS51dGY4KCkpOwotCi0gICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9IHRo
aXMtPnJvb3RPYmplY3QoKTsKLSAgICBpZiAoIXJvb3RPYmplY3QpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgSlNMb2NrSG9sZGVyIGxvY2socm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmds
b2JhbERhdGEoKSk7Ci0gICAgCi0gICAgcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bERhdGEoKS50aW1lb3V0Q2hlY2tlci5zdGFydCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gSlND
OjpldmFsdWF0ZShyb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpLCBtYWtl
U291cmNlKEphdmFTdHJpbmcoc2NyaXB0KS5pbXBsKCkpKTsKLSAgICByb290T2JqZWN0LT5nbG9i
YWxPYmplY3QoKS0+Z2xvYmFsRGF0YSgpLnRpbWVvdXRDaGVja2VyLnN0b3AoKTsKLQotICAgIHJl
dHVybiBjb252ZXJ0VmFsdWVUb0pPYmplY3QocmVzdWx0KTsKLX0KLQotam9iamVjdCBKYXZhSlNP
YmplY3Q6OmdldE1lbWJlcihqc3RyaW5nIG1lbWJlck5hbWUpIGNvbnN0Ci17Ci0gICAgTE9HKExp
dmVDb25uZWN0LCAiSmF2YUpTT2JqZWN0OjpnZXRNZW1iZXIgKCVwKSBtZW1iZXJOYW1lID0gJXMi
LCBfaW1wLCBKYXZhU3RyaW5nKG1lbWJlck5hbWUpLnV0ZjgoKSk7Ci0KLSAgICBSb290T2JqZWN0
KiByb290T2JqZWN0ID0gdGhpcy0+cm9vdE9iamVjdCgpOwotICAgIGlmICghcm9vdE9iamVjdCkK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIAotICAgIEpTTG9ja0hvbGRlciBsb2Nr
KGV4ZWMpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gX2ltcC0+Z2V0KGV4ZWMsIElkZW50aWZpZXIo
ZXhlYywgSmF2YVN0cmluZyhtZW1iZXJOYW1lKS5pbXBsKCkpKTsKLQotICAgIHJldHVybiBjb252
ZXJ0VmFsdWVUb0pPYmplY3QocmVzdWx0KTsKLX0KLQotdm9pZCBKYXZhSlNPYmplY3Q6OnNldE1l
bWJlcihqc3RyaW5nIG1lbWJlck5hbWUsIGpvYmplY3QgdmFsdWUpIGNvbnN0Ci17Ci0gICAgTE9H
KExpdmVDb25uZWN0LCAiSmF2YUpTT2JqZWN0OjpzZXRNZW1iZXIgbWVtYmVyTmFtZSA9ICVzLCB2
YWx1ZSA9ICVwIiwgSmF2YVN0cmluZyhtZW1iZXJOYW1lKS51dGY4KCksIHZhbHVlKTsKLQotICAg
IFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSB0aGlzLT5yb290T2JqZWN0KCk7Ci0gICAgaWYgKCFy
b290T2JqZWN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290
T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotCi0gICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7Ci0gICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7Ci0gICAgX2ltcC0+bWV0aG9k
VGFibGUoKS0+cHV0KF9pbXAsIGV4ZWMsIElkZW50aWZpZXIoZXhlYywgSmF2YVN0cmluZyhtZW1i
ZXJOYW1lKS5pbXBsKCkpLCBjb252ZXJ0Sk9iamVjdFRvVmFsdWUoZXhlYywgdmFsdWUpLCBzbG90
KTsKLX0KLQotCi12b2lkIEphdmFKU09iamVjdDo6cmVtb3ZlTWVtYmVyKGpzdHJpbmcgbWVtYmVy
TmFtZSkgY29uc3QKLXsKLSAgICBMT0coTGl2ZUNvbm5lY3QsICJKYXZhSlNPYmplY3Q6OnJlbW92
ZU1lbWJlciBtZW1iZXJOYW1lID0gJXMiLCBKYXZhU3RyaW5nKG1lbWJlck5hbWUpLnV0ZjgoKSk7
Ci0KLSAgICBSb290T2JqZWN0KiByb290T2JqZWN0ID0gdGhpcy0+cm9vdE9iamVjdCgpOwotICAg
IGlmICghcm9vdE9iamVjdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRXhlY1N0YXRlKiBleGVj
ID0gcm9vdE9iamVjdC0+Z2xvYmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLSAgICBKU0xvY2tI
b2xkZXIgbG9jayhleGVjKTsKLSAgICBfaW1wLT5tZXRob2RUYWJsZSgpLT5kZWxldGVQcm9wZXJ0
eShfaW1wLCBleGVjLCBJZGVudGlmaWVyKGV4ZWMsIEphdmFTdHJpbmcobWVtYmVyTmFtZSkuaW1w
bCgpKSk7Ci19Ci0KLQotam9iamVjdCBKYXZhSlNPYmplY3Q6OmdldFNsb3QoamludCBpbmRleCkg
Y29uc3QKLXsKLSAgICBMT0coTGl2ZUNvbm5lY3QsICJKYXZhSlNPYmplY3Q6OmdldFNsb3QgaW5k
ZXggPSAlbGQiLCBzdGF0aWNfY2FzdDxsb25nPihpbmRleCkpOwotCi0gICAgUm9vdE9iamVjdCog
cm9vdE9iamVjdCA9IHRoaXMtPnJvb3RPYmplY3QoKTsKLSAgICBpZiAoIXJvb3RPYmplY3QpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xv
YmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKLQotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OwotICAgIEpTVmFsdWUgcmVzdWx0ID0gX2ltcC0+Z2V0KGV4ZWMsIGluZGV4KTsKLQotICAgIHJl
dHVybiBjb252ZXJ0VmFsdWVUb0pPYmplY3QocmVzdWx0KTsKLX0KLQotCi12b2lkIEphdmFKU09i
amVjdDo6c2V0U2xvdChqaW50IGluZGV4LCBqb2JqZWN0IHZhbHVlKSBjb25zdAotewotICAgIExP
RyhMaXZlQ29ubmVjdCwgIkphdmFKU09iamVjdDo6c2V0U2xvdCBpbmRleCA9ICVsZCwgdmFsdWUg
PSAlcCIsIHN0YXRpY19jYXN0PGxvbmc+KGluZGV4KSwgdmFsdWUpOwotCi0gICAgUm9vdE9iamVj
dCogcm9vdE9iamVjdCA9IHRoaXMtPnJvb3RPYmplY3QoKTsKLSAgICBpZiAoIXJvb3RPYmplY3Qp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHJvb3RPYmplY3QtPmds
b2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7Ci0gICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7
Ci0gICAgX2ltcC0+bWV0aG9kVGFibGUoKS0+cHV0QnlJbmRleChfaW1wLCBleGVjLCAodW5zaWdu
ZWQpaW5kZXgsIGNvbnZlcnRKT2JqZWN0VG9WYWx1ZShleGVjLCB2YWx1ZSksIGZhbHNlKTsKLX0K
LQotCi1qc3RyaW5nIEphdmFKU09iamVjdDo6dG9TdHJpbmcoKSBjb25zdAotewotICAgIExPRyhM
aXZlQ29ubmVjdCwgIkphdmFKU09iamVjdDo6dG9TdHJpbmciKTsKLSAgICAKLSAgICBSb290T2Jq
ZWN0KiByb290T2JqZWN0ID0gdGhpcy0+cm9vdE9iamVjdCgpOwotICAgIGlmICghcm9vdE9iamVj
dCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBKU09iamVjdCAqdGhpc09iaiA9IGNvbnN0X2Nh
c3Q8SlNPYmplY3QqPihfaW1wKTsKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5n
bG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMp
OwotICAgIAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxqc3RyaW5nPihjb252ZXJ0VmFsdWVUb0pW
YWx1ZShleGVjLCByb290T2JqZWN0LCB0aGlzT2JqLCBKYXZhVHlwZU9iamVjdCwgImphdmEubGFu
Zy5TdHJpbmciKS5sKTsKLX0KLQotdm9pZCBKYXZhSlNPYmplY3Q6OmZpbmFsaXplKCkgY29uc3QK
LXsKLSAgICBpZiAoUm9vdE9iamVjdCogcm9vdE9iamVjdCA9IHRoaXMtPnJvb3RPYmplY3QoKSkK
LSAgICAgICAgcm9vdE9iamVjdC0+Z2NVbnByb3RlY3QoX2ltcCk7Ci19Ci0KLXN0YXRpYyBQYXNz
UmVmUHRyPFJvb3RPYmplY3Q+IGNyZWF0ZVJvb3RPYmplY3Qodm9pZCogbmF0aXZlSGFuZGxlKQot
ewotICAgIEZyYW1lKiBmcmFtZSA9IDA7Ci0gICAgZm9yIChOU1ZpZXcgKnZpZXcgPSAoTlNWaWV3
ICopbmF0aXZlSGFuZGxlOyB2aWV3OyB2aWV3ID0gW3ZpZXcgc3VwZXJ2aWV3XSkgewotICAgICAg
ICBpZiAoW3ZpZXcgY29uZm9ybXNUb1Byb3RvY29sOkBwcm90b2NvbChXZWJDb3JlRnJhbWVWaWV3
KV0pIHsKLSAgICAgICAgICAgIE5TVmlldzxXZWJDb3JlRnJhbWVWaWV3PiAqd2ViQ29yZUZyYW1l
VmlldyA9IHN0YXRpY19jYXN0PE5TVmlldzxXZWJDb3JlRnJhbWVWaWV3Pio+KHZpZXcpOwotICAg
ICAgICAgICAgZnJhbWUgPSBbd2ViQ29yZUZyYW1lVmlldyBfd2ViX2ZyYW1lXTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiBmcmFtZS0+c2NyaXB0KCktPmNyZWF0ZVJvb3RPYmplY3QobmF0
aXZlSGFuZGxlKTsKLX0KLQotLy8gV2UncmUgZWl0aGVyIGNyZWF0aW5nIGEgJ1Jvb3QnIG9iamVj
dCAodmlhIGEgY2FsbCB0byBKYXZhSlNPYmplY3QuZ2V0V2luZG93KCkpLCBvcgotLy8gYW5vdGhl
ciBKYXZhSlNPYmplY3QuCi1qbG9uZyBKYXZhSlNPYmplY3Q6OmNyZWF0ZU5hdGl2ZShqbG9uZyBu
YXRpdmVIYW5kbGUpCi17Ci0gICAgTE9HKExpdmVDb25uZWN0LCAiSmF2YUpTT2JqZWN0OjpjcmVh
dGVOYXRpdmUgbmF0aXZlSGFuZGxlID0gJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KG5hdGl2ZUhhbmRs
ZSkpOwotCi0gICAgaWYgKG5hdGl2ZUhhbmRsZSA9PSBVbmRlZmluZWRIYW5kbGUpCi0gICAgICAg
IHJldHVybiBuYXRpdmVIYW5kbGU7Ci0KLSAgICBpZiAoZmluZFByb3RlY3RpbmdSb290T2JqZWN0
KGpsb25nX3RvX2ltcHB0cihuYXRpdmVIYW5kbGUpKSkKLSAgICAgICAgcmV0dXJuIG5hdGl2ZUhh
bmRsZTsKLQotICAgIFJlZlB0cjxSb290T2JqZWN0PiByb290T2JqZWN0ID0gY3JlYXRlUm9vdE9i
amVjdChqbG9uZ190b19wdHIobmF0aXZlSGFuZGxlKSk7Ci0KLSAgICAvLyBJZiByb290T2JqZWN0
IGlzICFOVUxMIFdlIG11c3QgaGF2ZSBiZWVuIGNhbGxlZCB2aWEgbmV0c2NhcGUuamF2YXNjcmlw
dC5KYXZhSlNPYmplY3QuZ2V0V2luZG93KCksCi0gICAgLy8gb3RoZXJ3aXNlIHdlIGFyZSBiZWlu
ZyBjYWxsZWQgYWZ0ZXIgY3JlYXRpbmcgYSBKYXZhSlNPYmplY3QgaW4KLSAgICAvLyBKYXZhSlNP
YmplY3Q6OmNvbnZlcnRWYWx1ZVRvSk9iamVjdCgpLgotICAgIGlmIChyb290T2JqZWN0KSB7Ci0g
ICAgICAgIEpTT2JqZWN0KiBnbG9iYWxPYmplY3QgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3Qo
KTsKLSAgICAgICAgLy8gV2UgY2FsbCBnY1Byb3RlY3QgaGVyZSB0byBnZXQgdGhlIG9iamVjdCBp
bnRvIHRoZSByb290IG9iamVjdCdzICJwcm90ZWN0IHNldCIgd2hpY2gKLSAgICAgICAgLy8gaXMg
dXNlZCB0byB0ZXN0IGlmIGEgbmF0aXZlIGhhbmRsZSBpcyB2YWxpZCBhcyB3ZWxsIGFzIGdldHRp
bmcgdGhlIHJvb3Qgb2JqZWN0IGdpdmVuIHRoZSBoYW5kbGUuCi0gICAgICAgIHJvb3RPYmplY3Qt
PmdjUHJvdGVjdChnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gcHRyX3RvX2psb25nKGds
b2JhbE9iamVjdCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBuYXRpdmVIYW5kbGU7Ci19Ci0K
LWpvYmplY3QgSmF2YUpTT2JqZWN0Ojpjb252ZXJ0VmFsdWVUb0pPYmplY3QoSlNWYWx1ZSB2YWx1
ZSkgY29uc3QKLXsKLSAgICBSb290T2JqZWN0KiByb290T2JqZWN0ID0gdGhpcy0+cm9vdE9iamVj
dCgpOwotICAgIGlmICghcm9vdE9iamVjdCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAKLSAg
ICBFeGVjU3RhdGUqIGV4ZWMgPSByb290T2JqZWN0LT5nbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhl
YygpOwotICAgIEpTTG9ja0hvbGRlciBsb2NrKGV4ZWMpOwotICAgIEpOSUVudiAqZW52ID0gZ2V0
Sk5JRW52KCk7Ci0gICAgam9iamVjdCByZXN1bHQgPSAwOwotICAgIAotICAgIC8vIFNlZSBzZWN0
aW9uIDIyLjcgb2YgJ0phdmFTY3JpcHQ6ICBUaGUgRGVmaW5pdGl2ZSBHdWlkZSwgNHRoIEVkaXRp
b24nLAotICAgIC8vIGZpZ3VyZSAyMi01LgotICAgIC8vIG51bWJlciAtPiBqYXZhLmxhbmcuRG91
YmxlCi0gICAgLy8gc3RyaW5nIC0+IGphdmEubGFuZy5TdHJpbmcKLSAgICAvLyBib29sZWFuIC0+
IGphdmEubGFuZy5Cb29sZWFuCi0gICAgLy8gSmF2YSBpbnN0YW5jZSAtPiBKYXZhIGluc3RhbmNl
Ci0gICAgLy8gRXZlcnl0aGluZyBlbHNlIC0+IEphdmFKU09iamVjdAotICAgIAotICAgIGlmICh2
YWx1ZS5pc051bWJlcigpKSB7Ci0gICAgICAgIGpjbGFzcyBKU09iamVjdENsYXNzID0gZW52LT5G
aW5kQ2xhc3MgKCJqYXZhL2xhbmcvRG91YmxlIik7Ci0gICAgICAgIGptZXRob2RJRCBjb25zdHJ1
Y3RvcklEID0gZW52LT5HZXRNZXRob2RJRCAoSlNPYmplY3RDbGFzcywgIjxpbml0PiIsICIoRClW
Iik7Ci0gICAgICAgIGlmIChjb25zdHJ1Y3RvcklEICE9IE5VTEwpIHsKLSAgICAgICAgICAgIHJl
c3VsdCA9IGVudi0+TmV3T2JqZWN0IChKU09iamVjdENsYXNzLCBjb25zdHJ1Y3RvcklELCAoamRv
dWJsZSl2YWx1ZS50b051bWJlcihleGVjKSk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHZh
bHVlLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlID0gdmFsdWUudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICBKTklFbnYgKmVudiA9IGdldEpOSUVu
digpOwotICAgICAgICByZXN1bHQgPSBlbnYtPk5ld1N0cmluZyAoKGNvbnN0IGpjaGFyICopc3Ry
aW5nVmFsdWUuY2hhcmFjdGVycygpLCBzdHJpbmdWYWx1ZS5sZW5ndGgoKSk7Ci0gICAgfSBlbHNl
IGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkgewotICAgICAgICBqY2xhc3MgSlNPYmplY3RDbGFzcyA9
IGVudi0+RmluZENsYXNzICgiamF2YS9sYW5nL0Jvb2xlYW4iKTsKLSAgICAgICAgam1ldGhvZElE
IGNvbnN0cnVjdG9ySUQgPSBlbnYtPkdldE1ldGhvZElEIChKU09iamVjdENsYXNzLCAiPGluaXQ+
IiwgIihaKVYiKTsKLSAgICAgICAgaWYgKGNvbnN0cnVjdG9ySUQgIT0gTlVMTCkgewotICAgICAg
ICAgICAgcmVzdWx0ID0gZW52LT5OZXdPYmplY3QgKEpTT2JqZWN0Q2xhc3MsIGNvbnN0cnVjdG9y
SUQsIChqYm9vbGVhbil2YWx1ZS50b0Jvb2xlYW4oZXhlYykpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGVsc2UgewotICAgICAgICAvLyBDcmVhdGUgYSBKYXZhSlNPYmplY3QuCi0gICAgICAgIGps
b25nIG5hdGl2ZUhhbmRsZTsKLSAgICAgICAgCi0gICAgICAgIGlmICh2YWx1ZS5pc09iamVjdCgp
KSB7Ci0gICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICAvLyBXZSBlaXRoZXIgaGF2ZSBhIHdyYXBwZXIgYXJvdW5k
IGEgSmF2YSBpbnN0YW5jZSBvciBhIEphdmFTY3JpcHQKLSAgICAgICAgICAgIC8vIG9iamVjdC4g
IElmIHdlIGhhdmUgYSB3cmFwcGVyIGFyb3VuZCBhIEphdmEgaW5zdGFuY2UsIHJldHVybiB0aGF0
Ci0gICAgICAgICAgICAvLyBpbnN0YW5jZSwgb3RoZXJ3aXNlIGNyZWF0ZSBhIG5ldyBKYXZhIEph
dmFKU09iamVjdCB3aXRoIHRoZSBKU09iamVjdCoKLSAgICAgICAgICAgIC8vIGFzIGl0cyBuYXRp
dmVIYW5kbGUuCi0gICAgICAgICAgICBpZiAob2JqZWN0LT5pbmhlcml0cygmSmF2YVJ1bnRpbWVP
YmplY3Q6OnNfaW5mbykpIHsKLSAgICAgICAgICAgICAgICBKYXZhUnVudGltZU9iamVjdCogcnVu
dGltZU9iamVjdCA9IHN0YXRpY19jYXN0PEphdmFSdW50aW1lT2JqZWN0Kj4ob2JqZWN0KTsKLSAg
ICAgICAgICAgICAgICBKYXZhSW5zdGFuY2UqIHJ1bnRpbWVJbnN0YW5jZSA9IHJ1bnRpbWVPYmpl
Y3QtPmdldEludGVybmFsSmF2YUluc3RhbmNlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFydW50
aW1lSW5zdGFuY2UpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIHJldHVybiBydW50aW1lSW5zdGFuY2UtPmphdmFJbnN0YW5j
ZSgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBuYXRpdmVIYW5kbGUg
PSBwdHJfdG9famxvbmcob2JqZWN0KTsKLSAgICAgICAgICAgICAgICByb290T2JqZWN0LT5nY1By
b3RlY3Qob2JqZWN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
Ly8gQWxsIG90aGVyIHR5cGVzIHdpbGwgcmVzdWx0IGluIGFuIHVuZGVmaW5lZCBvYmplY3QuCi0g
ICAgICAgICAgICBuYXRpdmVIYW5kbGUgPSBVbmRlZmluZWRIYW5kbGU7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIC8vIE5vdyBjcmVhdGUgdGhlIEphdmEgSmF2YUpTT2JqZWN0LiAgTG9v
ayBmb3IgdGhlIEphdmFKU09iamVjdCBpbiBpdHMgbmV3IChUaWdlcikKLSAgICAgICAgLy8gbG9j
YXRpb24gYW5kIGluIHRoZSBvcmlnaW5hbCBKYXZhIDEuNC4yIGxvY2F0aW9uLgotICAgICAgICBq
Y2xhc3MgSlNPYmplY3RDbGFzczsKLSAgICAgICAgCi0gICAgICAgIEpTT2JqZWN0Q2xhc3MgPSBl
bnYtPkZpbmRDbGFzcyAoInN1bi9wbHVnaW4vamF2YXNjcmlwdC93ZWJraXQvSlNPYmplY3QiKTsK
LSAgICAgICAgaWYgKCFKU09iamVjdENsYXNzKSB7Ci0gICAgICAgICAgICBlbnYtPkV4Y2VwdGlv
bkRlc2NyaWJlKCk7Ci0gICAgICAgICAgICBlbnYtPkV4Y2VwdGlvbkNsZWFyKCk7Ci0gICAgICAg
ICAgICBKU09iamVjdENsYXNzID0gZW52LT5GaW5kQ2xhc3MgKCJhcHBsZS9hcHBsZXQvSlNPYmpl
Y3QiKTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGptZXRob2RJRCBjb25zdHJ1
Y3RvcklEID0gZW52LT5HZXRNZXRob2RJRCAoSlNPYmplY3RDbGFzcywgIjxpbml0PiIsICIoSilW
Iik7Ci0gICAgICAgIGlmIChjb25zdHJ1Y3RvcklEICE9IE5VTEwpIHsKLSAgICAgICAgICAgIHJl
c3VsdCA9IGVudi0+TmV3T2JqZWN0IChKU09iamVjdENsYXNzLCBjb25zdHJ1Y3RvcklELCBuYXRp
dmVIYW5kbGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLUpTVmFsdWUgSmF2YUpTT2JqZWN0Ojpjb252ZXJ0Sk9iamVjdFRvVmFsdWUoRXhlY1N0YXRl
KiBleGVjLCBqb2JqZWN0IHRoZU9iamVjdCkgY29uc3QKLXsKLSAgICAvLyBJbnN0YW5jZXMgb2Yg
bmV0c2NhcGUuamF2YXNjcmlwdC5KU09iamVjdCBnZXQgY29udmVydGVkIGJhY2sgdG8KLSAgICAv
LyBKYXZhU2NyaXB0IG9iamVjdHMuICBBbGwgb3RoZXIgb2JqZWN0cyBhcmUgd3JhcHBlZC4gIEl0
J3Mgbm90Ci0gICAgLy8gcG9zc2libGUgdG8gcGFzcyBwcmltaXRpdmUgdHlwZXMgZnJvbSB0aGUg
SmF2YSB0byBKYXZhU2NyaXB0LgotICAgIC8vIFNlZSBzZWN0aW9uIDIyLjcgb2YgJ0phdmFTY3Jp
cHQ6ICBUaGUgRGVmaW5pdGl2ZSBHdWlkZSwgNHRoIEVkaXRpb24nLAotICAgIC8vIGZpZ3VyZSAy
Mi00LgotICAgIGpvYmplY3QgY2xhc3NPZkluc3RhbmNlID0gY2FsbEpOSU1ldGhvZDxqb2JqZWN0
Pih0aGVPYmplY3QsICJnZXRDbGFzcyIsICIoKUxqYXZhL2xhbmcvQ2xhc3M7Iik7Ci0gICAgaWYg
KCFjbGFzc09mSW5zdGFuY2UpIHsKLSAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soZXhlYyk7Ci0g
ICAgICAgIHJldHVybiBKYXZhSW5zdGFuY2U6OmNyZWF0ZSh0aGVPYmplY3QsIF9yb290T2JqZWN0
KS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKLSAgICB9Ci0KLSAgICAvLyBPbmx5IHRoZSBz
dW4ucGx1Z2luLmphdmFzY3JpcHQud2Via2l0LkpTT2JqZWN0IGhhcyBhIG1lbWJlciBjYWxsZWQg
bmF0aXZlSlNPYmplY3QuIFRoaXMgY2xhc3MgaXMKLSAgICAvLyBjcmVhdGVkIGFib3ZlIHRvIHdy
YXAgaW50ZXJuYWwgYnJvd3NlciBvYmplY3RzLiBUaGUgY29uc3RydWN0b3Igb2YgdGhpcyBjbGFz
cyB0YWtlcyB0aGUgbmF0aXZlCi0gICAgLy8gcG9pbnRlciBhbmQgc3RvcmVzIGl0IGluIHRoaXMg
b2JqZWN0LCBzbyB0aGF0IGl0IGNhbiBiZSByZXRyaWV2ZWQgYmVsb3cuCi0gICAganN0cmluZyBj
bGFzc05hbWUgPSAoanN0cmluZyljYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGNsYXNzT2ZJbnN0YW5j
ZSwgImdldE5hbWUiLCAiKClMamF2YS9sYW5nL1N0cmluZzsiKTsKLSAgICBpZiAoIWNsYXNzTmFt
ZSB8fCAoc3RyY21wKEphdmFTdHJpbmcoY2xhc3NOYW1lKS51dGY4KCksICJzdW4ucGx1Z2luLmph
dmFzY3JpcHQud2Via2l0LkpTT2JqZWN0IikgIT0gMCkpIHsKLSAgICAgICAgSlNMb2NrSG9sZGVy
IGxvY2soZXhlYyk7Ci0gICAgICAgIHJldHVybiBKYXZhSW5zdGFuY2U6OmNyZWF0ZSh0aGVPYmpl
Y3QsIF9yb290T2JqZWN0KS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKLSAgICB9Ci0KLSAg
ICAvLyBQdWxsIHRoZSBuYXRpdmVKU09iamVjdCB2YWx1ZSBmcm9tIHRoZSBKYXZhIGluc3RhbmNl
LiAgVGhpcyBpcyBhCi0gICAgLy8gcG9pbnRlciB0byB0aGUgSlNPYmplY3QuCi0gICAgSk5JRW52
ICplbnYgPSBnZXRKTklFbnYoKTsKLSAgICBqZmllbGRJRCBmaWVsZElEID0gZW52LT5HZXRGaWVs
ZElEKChqY2xhc3MpY2xhc3NPZkluc3RhbmNlLCAibmF0aXZlSlNPYmplY3QiLCAiSiIpOwotICAg
IGlmIChmaWVsZElEID09IE5VTEwpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAg
IGpsb25nIG5hdGl2ZUhhbmRsZSA9IGVudi0+R2V0TG9uZ0ZpZWxkKHRoZU9iamVjdCwgZmllbGRJ
RCk7Ci0gICAgaWYgKG5hdGl2ZUhhbmRsZSA9PSBVbmRlZmluZWRIYW5kbGUpCi0gICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgIEpTT2JqZWN0ICppbXAgPSBqc0Nhc3Q8SlNPYmplY3Qq
PihqbG9uZ190b19pbXBwdHIobmF0aXZlSGFuZGxlKSk7Ci0gICAgcmV0dXJuIGltcDsKLX0KLQot
dm9pZCBKYXZhSlNPYmplY3Q6OmdldExpc3RGcm9tSkFycmF5KEV4ZWNTdGF0ZSogZXhlYywgam9i
amVjdEFycmF5IGpBcnJheSwgTWFya2VkQXJndW1lbnRCdWZmZXImIGxpc3QpIGNvbnN0Ci17Ci0g
ICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsKLSAgICBpbnQgbnVtT2JqZWN0cyA9IGpBcnJh
eSA/IGVudi0+R2V0QXJyYXlMZW5ndGgoakFycmF5KSA6IDA7Ci0gICAgCi0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBudW1PYmplY3RzOyBpKyspIHsKLSAgICAgICAgam9iamVjdCBhbk9iamVjdCA9
IGVudi0+R2V0T2JqZWN0QXJyYXlFbGVtZW50ICgoam9iamVjdEFycmF5KWpBcnJheSwgaSk7Ci0g
ICAgICAgIGlmIChhbk9iamVjdCkgewotICAgICAgICAgICAgbGlzdC5hcHBlbmQoY29udmVydEpP
YmplY3RUb1ZhbHVlKGV4ZWMsIGFuT2JqZWN0KSk7Ci0gICAgICAgICAgICBlbnYtPkRlbGV0ZUxv
Y2FsUmVmIChhbk9iamVjdCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBlbnYtPkV4Y2VwdGlvbkRlc2NyaWJlKCk7Ci0gICAgICAgICAgICBlbnYtPkV4Y2VwdGlvbkNs
ZWFyKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWV4dGVybiAiQyIgewotCi1qbG9uZyBLSlNf
SlNDcmVhdGVOYXRpdmVKU09iamVjdCAoSk5JRW52KiwgamNsYXNzLCBqc3RyaW5nLCBqbG9uZyBu
YXRpdmVIYW5kbGUsIGpib29sZWFuKQotewotICAgIEpTT2JqZWN0Q2FsbENvbnRleHQgY29udGV4
dDsKLSAgICBjb250ZXh0LnR5cGUgPSBDcmVhdGVOYXRpdmU7Ci0gICAgY29udGV4dC5uYXRpdmVI
YW5kbGUgPSBuYXRpdmVIYW5kbGU7Ci0gICAgcmV0dXJuIEphdmFKU09iamVjdDo6aW52b2tlICgm
Y29udGV4dCkuajsKLX0KLQotdm9pZCBLSlNfSlNPYmplY3RfSlNGaW5hbGl6ZSAoSk5JRW52Kiwg
amNsYXNzLCBqbG9uZyBuYXRpdmVIYW5kbGUpCi17Ci0gICAgSlNPYmplY3RDYWxsQ29udGV4dCBj
b250ZXh0OwotICAgIGNvbnRleHQudHlwZSA9IEZpbmFsaXplOwotICAgIGNvbnRleHQubmF0aXZl
SGFuZGxlID0gbmF0aXZlSGFuZGxlOwotICAgIEphdmFKU09iamVjdDo6aW52b2tlICgmY29udGV4
dCk7Ci19Ci0KLWpvYmplY3QgS0pTX0pTT2JqZWN0X0pTT2JqZWN0Q2FsbCAoSk5JRW52KiwgamNs
YXNzLCBqbG9uZyBuYXRpdmVIYW5kbGUsIGpzdHJpbmcsIGpzdHJpbmcgbWV0aG9kTmFtZSwgam9i
amVjdEFycmF5IGFyZ3MsIGpib29sZWFuKQotewotICAgIEpTT2JqZWN0Q2FsbENvbnRleHQgY29u
dGV4dDsKLSAgICBjb250ZXh0LnR5cGUgPSBDYWxsOwotICAgIGNvbnRleHQubmF0aXZlSGFuZGxl
ID0gbmF0aXZlSGFuZGxlOwotICAgIGNvbnRleHQuc3RyaW5nID0gbWV0aG9kTmFtZTsKLSAgICBj
b250ZXh0LmFyZ3MgPSBhcmdzOwotICAgIHJldHVybiBKYXZhSlNPYmplY3Q6Omludm9rZSAoJmNv
bnRleHQpLmw7Ci19Ci0KLWpvYmplY3QgS0pTX0pTT2JqZWN0X0pTT2JqZWN0RXZhbCAoSk5JRW52
KiwgamNsYXNzLCBqbG9uZyBuYXRpdmVIYW5kbGUsIGpzdHJpbmcsIGpzdHJpbmcganNjcmlwdCwg
amJvb2xlYW4pCi17Ci0gICAgSlNPYmplY3RDYWxsQ29udGV4dCBjb250ZXh0OwotICAgIGNvbnRl
eHQudHlwZSA9IEV2YWw7Ci0gICAgY29udGV4dC5uYXRpdmVIYW5kbGUgPSBuYXRpdmVIYW5kbGU7
Ci0gICAgY29udGV4dC5zdHJpbmcgPSBqc2NyaXB0OwotICAgIHJldHVybiBKYXZhSlNPYmplY3Q6
Omludm9rZSAoJmNvbnRleHQpLmw7Ci19Ci0KLWpvYmplY3QgS0pTX0pTT2JqZWN0X0pTT2JqZWN0
R2V0TWVtYmVyIChKTklFbnYqLCBqY2xhc3MsIGpsb25nIG5hdGl2ZUhhbmRsZSwganN0cmluZywg
anN0cmluZyBqbmFtZSwgamJvb2xlYW4pCi17Ci0gICAgSlNPYmplY3RDYWxsQ29udGV4dCBjb250
ZXh0OwotICAgIGNvbnRleHQudHlwZSA9IEdldE1lbWJlcjsKLSAgICBjb250ZXh0Lm5hdGl2ZUhh
bmRsZSA9IG5hdGl2ZUhhbmRsZTsKLSAgICBjb250ZXh0LnN0cmluZyA9IGpuYW1lOwotICAgIHJl
dHVybiBKYXZhSlNPYmplY3Q6Omludm9rZSAoJmNvbnRleHQpLmw7Ci19Ci0KLXZvaWQgS0pTX0pT
T2JqZWN0X0pTT2JqZWN0U2V0TWVtYmVyIChKTklFbnYqLCBqY2xhc3MsIGpsb25nIG5hdGl2ZUhh
bmRsZSwganN0cmluZywganN0cmluZyBqbmFtZSwgam9iamVjdCB2YWx1ZSwgamJvb2xlYW4pCi17
Ci0gICAgSlNPYmplY3RDYWxsQ29udGV4dCBjb250ZXh0OwotICAgIGNvbnRleHQudHlwZSA9IFNl
dE1lbWJlcjsKLSAgICBjb250ZXh0Lm5hdGl2ZUhhbmRsZSA9IG5hdGl2ZUhhbmRsZTsKLSAgICBj
b250ZXh0LnN0cmluZyA9IGpuYW1lOwotICAgIGNvbnRleHQudmFsdWUgPSB2YWx1ZTsKLSAgICBK
YXZhSlNPYmplY3Q6Omludm9rZSAoJmNvbnRleHQpOwotfQotCi12b2lkIEtKU19KU09iamVjdF9K
U09iamVjdFJlbW92ZU1lbWJlciAoSk5JRW52KiwgamNsYXNzLCBqbG9uZyBuYXRpdmVIYW5kbGUs
IGpzdHJpbmcsIGpzdHJpbmcgam5hbWUsIGpib29sZWFuKQotewotICAgIEpTT2JqZWN0Q2FsbENv
bnRleHQgY29udGV4dDsKLSAgICBjb250ZXh0LnR5cGUgPSBSZW1vdmVNZW1iZXI7Ci0gICAgY29u
dGV4dC5uYXRpdmVIYW5kbGUgPSBuYXRpdmVIYW5kbGU7Ci0gICAgY29udGV4dC5zdHJpbmcgPSBq
bmFtZTsKLSAgICBKYXZhSlNPYmplY3Q6Omludm9rZSAoJmNvbnRleHQpOwotfQotCi1qb2JqZWN0
IEtKU19KU09iamVjdF9KU09iamVjdEdldFNsb3QgKEpOSUVudiosIGpjbGFzcywgamxvbmcgbmF0
aXZlSGFuZGxlLCBqc3RyaW5nLCBqaW50IGppbmRleCwgamJvb2xlYW4pCi17Ci0gICAgSlNPYmpl
Y3RDYWxsQ29udGV4dCBjb250ZXh0OwotICAgIGNvbnRleHQudHlwZSA9IEdldFNsb3Q7Ci0gICAg
Y29udGV4dC5uYXRpdmVIYW5kbGUgPSBuYXRpdmVIYW5kbGU7Ci0gICAgY29udGV4dC5pbmRleCA9
IGppbmRleDsKLSAgICByZXR1cm4gSmF2YUpTT2JqZWN0OjppbnZva2UgKCZjb250ZXh0KS5sOwot
fQotCi12b2lkIEtKU19KU09iamVjdF9KU09iamVjdFNldFNsb3QgKEpOSUVudiosIGpjbGFzcywg
amxvbmcgbmF0aXZlSGFuZGxlLCBqc3RyaW5nLCBqaW50IGppbmRleCwgam9iamVjdCB2YWx1ZSwg
amJvb2xlYW4pCi17Ci0gICAgSlNPYmplY3RDYWxsQ29udGV4dCBjb250ZXh0OwotICAgIGNvbnRl
eHQudHlwZSA9IFNldFNsb3Q7Ci0gICAgY29udGV4dC5uYXRpdmVIYW5kbGUgPSBuYXRpdmVIYW5k
bGU7Ci0gICAgY29udGV4dC5pbmRleCA9IGppbmRleDsKLSAgICBjb250ZXh0LnZhbHVlID0gdmFs
dWU7Ci0gICAgSmF2YUpTT2JqZWN0OjppbnZva2UgKCZjb250ZXh0KTsKLX0KLQotanN0cmluZyBL
SlNfSlNPYmplY3RfSlNPYmplY3RUb1N0cmluZyAoSk5JRW52KiwgamNsYXNzLCBqbG9uZyBuYXRp
dmVIYW5kbGUpCi17Ci0gICAgSlNPYmplY3RDYWxsQ29udGV4dCBjb250ZXh0OwotICAgIGNvbnRl
eHQudHlwZSA9IFRvU3RyaW5nOwotICAgIGNvbnRleHQubmF0aXZlSGFuZGxlID0gbmF0aXZlSGFu
ZGxlOwotICAgIHJldHVybiAoanN0cmluZylKYXZhSlNPYmplY3Q6Omludm9rZSAoJmNvbnRleHQp
Lmw7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShKQVZBX0JSSURHRSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvam5pX29iamMubW0gYi9Tb3VyY2UvV2ViQ29yZS9i
cmlkZ2Uvam5pL2puaV9vYmpjLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWUx
YWU1NjUzMGNiMTg4YWNhOTM0OWNlMTM2MzYwZjhlMDEwMjNiLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvam5p
X29iamMubW0KKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIs
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoSkFWQV9CUklER0UpCi0KLSNp
bXBvcnQgPEZvdW5kYXRpb24vRm91bmRhdGlvbi5oPgotI2ltcG9ydCAiSk5JVXRpbGl0eVByaXZh
dGUuaCIKLSNpbXBvcnQgIkphdmFUeXBlLmgiCi0jaW1wb3J0ICJvYmpjX3V0aWxpdHkuaCIKLSNp
bmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgotCi11c2luZyBuYW1lc3BhY2UgSlNDOjpCaW5kaW5n
czsKLQotQGludGVyZmFjZSBOU09iamVjdCAoV2ViU2NyaXB0aW5nUHJpdmF0ZSkKLS0gKGp2YWx1
ZSl3ZWJQbHVnSW5DYWxsSmF2YTooam9iamVjdClvYmplY3QgbWV0aG9kOihqbWV0aG9kSUQpbWV0
aG9kIHJldHVyblR5cGU6KEphdmFUeXBlKXJldHVyblR5cGUgYXJndW1lbnRzOihqdmFsdWUqKWFy
Z3M7Ci0tIChqdmFsdWUpd2ViUGx1Z0luQ2FsbEphdmE6KGpvYmplY3Qpb2JqZWN0Ci0gICAgICAg
ICAgICAgICAgICAgaXNTdGF0aWM6KEJPT0wpaXNTdGF0aWMKLSAgICAgICAgICAgICAgICAgcmV0
dXJuVHlwZTooSmF2YVR5cGUpcmV0dXJuVHlwZQotICAgICAgICAgICAgICAgICAgICAgbWV0aG9k
OihqbWV0aG9kSUQpbWV0aG9kCi0gICAgICAgICAgICAgICAgICBhcmd1bWVudHM6KGp2YWx1ZSop
YXJncwotICAgICAgICAgICAgICAgICBjYWxsaW5nVVJMOihOU1VSTCAqKXVybAotICAgICAgIGV4
Y2VwdGlvbkRlc2NyaXB0aW9uOihOU1N0cmluZyAqKilleGNlcHRpb25TdHJpbmc7Ci1AZW5kCi0K
LWJvb2wgSlNDOjpCaW5kaW5nczo6ZGlzcGF0Y2hKTklDYWxsKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3Qgdm9pZCogdGFyZ2V0QXBwbGV0Vmlldywgam9iamVjdCBvYmosIGJvb2wgaXNTdGF0aWMsIEph
dmFUeXBlIHJldHVyblR5cGUsIGptZXRob2RJRCBtZXRob2RJRCwganZhbHVlKiBhcmdzLCBqdmFs
dWUgJnJlc3VsdCwgY29uc3QgY2hhciosIEpTVmFsdWUmIGV4Y2VwdGlvbkRlc2NyaXB0aW9uKQot
ewotICAgIGlkIHZpZXcgPSAoaWQpdGFyZ2V0QXBwbGV0VmlldzsKLSAgICAKLSAgICAvLyBBcyBK
YXZhVHlwZUFycmF5IGlzIG5vdCBrbm93biBieSB0aGUgTWFjIEpWTSwgY2hhbmdlIGl0IHRvIGEg
Y29tcGF0aWJsZSB0eXBlLgotICAgIGlmIChyZXR1cm5UeXBlID09IEphdmFUeXBlQXJyYXkpCi0g
ICAgICAgIHJldHVyblR5cGUgPSBKYXZhVHlwZU9iamVjdDsKLSAgICAKLSAgICBpZiAoW3ZpZXcg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQbHVnSW5DYWxsSmF2YTppc1N0YXRpYzpy
ZXR1cm5UeXBlOm1ldGhvZDphcmd1bWVudHM6Y2FsbGluZ1VSTDpleGNlcHRpb25EZXNjcmlwdGlv
bjopXSkgewotICAgICAgICBOU1N0cmluZyAqX2V4Y2VwdGlvbkRlc2NyaXB0aW9uID0gMDsKLQot
ICAgICAgICAvLyBQYXNzaW5nIG5pbCBhcyB0aGUgY2FsbGluZyBVUkwgd2lsbCBjYXVzZSB0aGUg
SmF2YSBwbHVnaW4gdG8gdXNlIHRoZSBVUkwKLSAgICAgICAgLy8gb2YgdGhlIHBhZ2UgdGhhdCBj
b250YWlucyB0aGUgYXBwbGV0LiBUaGUgZXhlY3V0aW9uIHJlc3RyaWN0aW9ucyAKLSAgICAgICAg
Ly8gaW1wbGVtZW50ZWQgaW4gV2ViQ29yZSB3aWxsIGd1YXJhbnRlZSB0aGF0IG9ubHkgYXBwcm9w
cmlhdGUgSmF2YVNjcmlwdAotICAgICAgICAvLyBjYW4gcmVmZXJlbmNlIHRoZSBhcHBsZXQuCi0g
ICAgICAgIHsKLSAgICAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExvY2tzKGV4
ZWMpOwotICAgICAgICAgICAgcmVzdWx0ID0gW3ZpZXcgd2ViUGx1Z0luQ2FsbEphdmE6b2JqIGlz
U3RhdGljOmlzU3RhdGljIHJldHVyblR5cGU6cmV0dXJuVHlwZSBtZXRob2Q6bWV0aG9kSUQgYXJn
dW1lbnRzOmFyZ3MgY2FsbGluZ1VSTDpuaWwgZXhjZXB0aW9uRGVzY3JpcHRpb246Jl9leGNlcHRp
b25EZXNjcmlwdGlvbl07Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoX2V4Y2VwdGlvbkRlc2Ny
aXB0aW9uICE9IDApIHsKLSAgICAgICAgICAgIGV4Y2VwdGlvbkRlc2NyaXB0aW9uID0gY29udmVy
dE5TU3RyaW5nVG9TdHJpbmcoZXhlYywgX2V4Y2VwdGlvbkRlc2NyaXB0aW9uKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgZWxzZSBpZiAoW3ZpZXcgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcih3ZWJQbHVnSW5DYWxsSmF2YTptZXRob2Q6cmV0dXJuVHlw
ZTphcmd1bWVudHM6KV0pIHsKLSAgICAgICAgSlNMb2NrOjpEcm9wQWxsTG9ja3MgZHJvcEFsbExv
Y2tzKGV4ZWMpOwotICAgICAgICByZXN1bHQgPSBbdmlldyB3ZWJQbHVnSW5DYWxsSmF2YTpvYmog
bWV0aG9kOm1ldGhvZElEIHJldHVyblR5cGU6cmV0dXJuVHlwZSBhcmd1bWVudHM6YXJnc107Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGJ6ZXJvICgmcmVzdWx0LCBzaXplb2Yo
anZhbHVlKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKEpBVkFf
QlJJREdFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JVXRp
bGl0eVByaXZhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0
eVByaXZhdGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzZiMDJhNDRmODdl
Njc1OTJiOTVjYTZjMGZkNzgxMmI4ZDc2MTljLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSVV0aWxp
dHlQcml2YXRlLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDMyMCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDAzLCAyMDEwIEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IDIwMDksIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dO
RVIgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSk5JVXRpbGl0eVByaXZhdGUuaCIKLQot
I2lmIEVOQUJMRShKQVZBX0JSSURHRSkKLQotI2luY2x1ZGUgIkphdmFBcnJheUpTQy5oIgotI2lu
Y2x1ZGUgIkphdmFJbnN0YW5jZUpTQy5oIgotI2luY2x1ZGUgIkphdmFSdW50aW1lT2JqZWN0Lmgi
Ci0jaW5jbHVkZSAiam5pX2pzb2JqZWN0LmgiCi0jaW5jbHVkZSAicnVudGltZV9hcnJheS5oIgot
I2luY2x1ZGUgInJ1bnRpbWVfb2JqZWN0LmgiCi0jaW5jbHVkZSAicnVudGltZV9yb290LmgiCi0j
aW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4K
LQotbmFtZXNwYWNlIEpTQyB7Ci0KLW5hbWVzcGFjZSBCaW5kaW5ncyB7Ci0KLXN0YXRpYyBqb2Jq
ZWN0IGNvbnZlcnRBcnJheUluc3RhbmNlVG9KYXZhQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBKU0Fy
cmF5KiBqc0FycmF5LCBjb25zdCBjaGFyKiBqYXZhQ2xhc3NOYW1lKQotewotICAgIEpOSUVudiog
ZW52ID0gZ2V0Sk5JRW52KCk7Ci0gICAgLy8gQXMgSlMgQXJyYXlzIGNhbiBjb250YWluIGEgbWl4
dHVyZSBvZiBvYmplY3RzLCBhc3N1bWUgd2UgY2FuIGNvbnZlcnQgdG8KLSAgICAvLyB0aGUgcmVx
dWVzdGVkIEphdmEgQXJyYXkgdHlwZSByZXF1ZXN0ZWQsIHVubGVzcyB0aGUgYXJyYXkgdHlwZSBp
cyBzb21lIG9iamVjdCBhcnJheQotICAgIC8vIG90aGVyIHRoYW4gYSBzdHJpbmcuCi0gICAgdW5z
aWduZWQgbGVuZ3RoID0ganNBcnJheS0+bGVuZ3RoKCk7Ci0gICAgam9iamVjdEFycmF5IGphcnJh
eSA9IDA7Ci0KLSAgICAvLyBCdWlsZCB0aGUgY29ycmVjdCBhcnJheSB0eXBlCi0gICAgc3dpdGNo
IChqYXZhVHlwZUZyb21QcmltaXRpdmVUeXBlKGphdmFDbGFzc05hbWVbMV0pKSB7Ci0gICAgY2Fz
ZSBKYXZhVHlwZU9iamVjdDoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIE9ubHkgc3Vw
cG9ydCBzdHJpbmcgb2JqZWN0IHR5cGVzCi0gICAgICAgICAgICBpZiAoIXN0cmNtcCgiW0xqYXZh
LmxhbmcuU3RyaW5nOyIsIGphdmFDbGFzc05hbWUpKSB7Ci0gICAgICAgICAgICAgICAgamFycmF5
ID0gKGpvYmplY3RBcnJheSllbnYtPk5ld09iamVjdEFycmF5KGxlbmd0aCwKLSAgICAgICAgICAg
ICAgICAgICAgZW52LT5GaW5kQ2xhc3MoImphdmEvbGFuZy9TdHJpbmciKSwKLSAgICAgICAgICAg
ICAgICAgICAgZW52LT5OZXdTdHJpbmdVVEYoIiIpKTsKLSAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgSlNW
YWx1ZSBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgICAgICAgICBT
dHJpbmcgc3RyaW5nVmFsdWUgPSBpdGVtLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAg
ICAgICAgICAgICAgICAgICAgZW52LT5TZXRPYmplY3RBcnJheUVsZW1lbnQoamFycmF5LCBpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgZW52LT5mdW5jdGlvbnMtPk5ld1N0cmluZyhlbnYsIChj
b25zdCBqY2hhciAqKXN0cmluZ1ZhbHVlLmNoYXJhY3RlcnMoKSwgc3RyaW5nVmFsdWUubGVuZ3Ro
KCkpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotCi0gICAgY2FzZSBKYXZhVHlwZUJvb2xlYW46Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIGphcnJheSA9IChqb2JqZWN0QXJyYXkpZW52LT5OZXdCb29sZWFuQXJyYXkobGVu
Z3RoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykg
ewotICAgICAgICAgICAgICAgIEpTVmFsdWUgaXRlbSA9IGpzQXJyYXktPmdldChleGVjLCBpKTsK
LSAgICAgICAgICAgICAgICBqYm9vbGVhbiB2YWx1ZSA9IChqYm9vbGVhbilpdGVtLnRvTnVtYmVy
KGV4ZWMpOwotICAgICAgICAgICAgICAgIGVudi0+U2V0Qm9vbGVhbkFycmF5UmVnaW9uKChqYm9v
bGVhbkFycmF5KWphcnJheSwgKGpzaXplKWksIChqc2l6ZSkxLCAmdmFsdWUpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgIGNhc2UgSmF2YVR5cGVC
eXRlOgotICAgICAgICB7Ci0gICAgICAgICAgICBqYXJyYXkgPSAoam9iamVjdEFycmF5KWVudi0+
TmV3Qnl0ZUFycmF5KGxlbmd0aCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGl0ZW0gPSBqc0FycmF5
LT5nZXQoZXhlYywgaSk7Ci0gICAgICAgICAgICAgICAgamJ5dGUgdmFsdWUgPSAoamJ5dGUpaXRl
bS50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICBlbnYtPlNldEJ5dGVBcnJheVJlZ2lv
bigoamJ5dGVBcnJheSlqYXJyYXksIChqc2l6ZSlpLCAoanNpemUpMSwgJnZhbHVlKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICBjYXNlIEphdmFU
eXBlQ2hhcjoKLSAgICAgICAgewotICAgICAgICAgICAgamFycmF5ID0gKGpvYmplY3RBcnJheSll
bnYtPk5ld0NoYXJBcnJheShsZW5ndGgpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBpdGVtID0ganNB
cnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9
IGl0ZW0udG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgICAgICAgICAgICAgIGpjaGFy
IHZhbHVlID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoc3RyaW5nVmFsdWUubGVuZ3RoKCkgPiAw
KQotICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICgoY29uc3QgamNoYXIqKXN0cmluZ1ZhbHVl
LmNoYXJhY3RlcnMoKSlbMF07Ci0gICAgICAgICAgICAgICAgZW52LT5TZXRDaGFyQXJyYXlSZWdp
b24oKGpjaGFyQXJyYXkpamFycmF5LCAoanNpemUpaSwgKGpzaXplKTEsICZ2YWx1ZSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgY2FzZSBKYXZh
VHlwZVNob3J0OgotICAgICAgICB7Ci0gICAgICAgICAgICBqYXJyYXkgPSAoam9iamVjdEFycmF5
KWVudi0+TmV3U2hvcnRBcnJheShsZW5ndGgpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBpdGVtID0g
anNBcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgICAgIGpzaG9ydCB2YWx1ZSA9IChq
c2hvcnQpaXRlbS50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICBlbnYtPlNldFNob3J0
QXJyYXlSZWdpb24oKGpzaG9ydEFycmF5KWphcnJheSwgKGpzaXplKWksIChqc2l6ZSkxLCAmdmFs
dWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAg
IGNhc2UgSmF2YVR5cGVJbnQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGphcnJheSA9IChqb2Jq
ZWN0QXJyYXkpZW52LT5OZXdJbnRBcnJheShsZW5ndGgpOwotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBp
dGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgICAgIGppbnQgdmFsdWUg
PSAoamludClpdGVtLnRvTnVtYmVyKGV4ZWMpOwotICAgICAgICAgICAgICAgIGVudi0+U2V0SW50
QXJyYXlSZWdpb24oKGppbnRBcnJheSlqYXJyYXksIChqc2l6ZSlpLCAoanNpemUpMSwgJnZhbHVl
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICBj
YXNlIEphdmFUeXBlTG9uZzoKLSAgICAgICAgewotICAgICAgICAgICAgamFycmF5ID0gKGpvYmpl
Y3RBcnJheSllbnYtPk5ld0xvbmdBcnJheShsZW5ndGgpOwotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBp
dGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgICAgIGpsb25nIHZhbHVl
ID0gKGpsb25nKWl0ZW0udG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgICAgICAgICAgZW52LT5TZXRM
b25nQXJyYXlSZWdpb24oKGpsb25nQXJyYXkpamFycmF5LCAoanNpemUpaSwgKGpzaXplKTEsICZ2
YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0g
ICAgY2FzZSBKYXZhVHlwZUZsb2F0OgotICAgICAgICB7Ci0gICAgICAgICAgICBqYXJyYXkgPSAo
am9iamVjdEFycmF5KWVudi0+TmV3RmxvYXRBcnJheShsZW5ndGgpOwotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgSlNW
YWx1ZSBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAgICAgICAgIGpmbG9h
dCB2YWx1ZSA9IChqZmxvYXQpaXRlbS50b051bWJlcihleGVjKTsKLSAgICAgICAgICAgICAgICBl
bnYtPlNldEZsb2F0QXJyYXlSZWdpb24oKGpmbG9hdEFycmF5KWphcnJheSwgKGpzaXplKWksIChq
c2l6ZSkxLCAmdmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLQotICAgIGNhc2UgSmF2YVR5cGVEb3VibGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IGphcnJheSA9IChqb2JqZWN0QXJyYXkpZW52LT5OZXdEb3VibGVBcnJheShsZW5ndGgpOwotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAg
ICAgICAgICAgSlNWYWx1ZSBpdGVtID0ganNBcnJheS0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICAg
ICAgICAgIGpkb3VibGUgdmFsdWUgPSAoamRvdWJsZSlpdGVtLnRvTnVtYmVyKGV4ZWMpOwotICAg
ICAgICAgICAgICAgIGVudi0+U2V0RG91YmxlQXJyYXlSZWdpb24oKGpkb3VibGVBcnJheSlqYXJy
YXksIChqc2l6ZSlpLCAoanNpemUpMSwgJnZhbHVlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICBjYXNlIEphdmFUeXBlQXJyYXk6IC8vIGRvbid0
IGhhbmRsZSBlbWJlZGRlZCBhcnJheXMKLSAgICBjYXNlIEphdmFUeXBlVm9pZDogLy8gRG9uJ3Qg
ZXhwZWN0IGFycmF5cyBvZiB2b2lkIG9iamVjdHMKLSAgICBjYXNlIEphdmFUeXBlSW52YWxpZDog
Ly8gQXJyYXkgb2YgdW5rbm93biBvYmplY3RzCi0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAg
IC8vIGlmIGl0IHdhcyBub3Qgb25lIG9mIHRoZSBjYXNlcyBoYW5kbGVkLCB0aGVuIG51bGwgaXMg
cmV0dXJuZWQKLSAgICByZXR1cm4gamFycmF5OwotfQotCi1qdmFsdWUgY29udmVydFZhbHVlVG9K
VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBSb290T2JqZWN0KiByb290T2JqZWN0LCBKU1ZhbHVlIHZh
bHVlLCBKYXZhVHlwZSBqYXZhVHlwZSwgY29uc3QgY2hhciogamF2YUNsYXNzTmFtZSkKLXsKLSAg
ICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKLQotICAgIGp2YWx1ZSByZXN1bHQ7Ci0gICAgbWVt
c2V0KCZyZXN1bHQsIDAsIHNpemVvZihqdmFsdWUpKTsKLQotICAgIHN3aXRjaCAoamF2YVR5cGUp
IHsKLSAgICBjYXNlIEphdmFUeXBlQXJyYXk6Ci0gICAgY2FzZSBKYXZhVHlwZU9iamVjdDoKLSAg
ICAgICAgewotICAgICAgICAgICAgLy8gRklYTUU6IEphdmFKU09iamVjdDo6Y29udmVydFZhbHVl
VG9KT2JqZWN0IGZ1bmN0aW9uYWxpdHkgaXMgYWxtb3N0IGV4YWN0bHkgdGhlIHNhbWUsCi0gICAg
ICAgICAgICAvLyB0aGVzZSBmdW5jdGlvbnMgc2hvdWxkIHVzZSBjb21tb24gY29kZS4KLQotICAg
ICAgICAgICAgaWYgKHZhbHVlLmlzT2JqZWN0KCkpIHsKLSAgICAgICAgICAgICAgICBKU09iamVj
dCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOwotICAgICAgICAgICAgICAgIGlmIChvYmplY3Qt
PmluaGVyaXRzKCZKYXZhUnVudGltZU9iamVjdDo6c19pbmZvKSkgewotICAgICAgICAgICAgICAg
ICAgICAvLyBVbndyYXAgYSBKYXZhIGluc3RhbmNlLgotICAgICAgICAgICAgICAgICAgICBKYXZh
UnVudGltZU9iamVjdCogcnVudGltZU9iamVjdCA9IHN0YXRpY19jYXN0PEphdmFSdW50aW1lT2Jq
ZWN0Kj4ob2JqZWN0KTsKLSAgICAgICAgICAgICAgICAgICAgSmF2YUluc3RhbmNlKiBpbnN0YW5j
ZSA9IHJ1bnRpbWVPYmplY3QtPmdldEludGVybmFsSmF2YUluc3RhbmNlKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChpbnN0YW5jZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5s
ID0gaW5zdGFuY2UtPmphdmFJbnN0YW5jZSgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
b2JqZWN0LT5jbGFzc0luZm8oKSA9PSAmUnVudGltZUFycmF5OjpzX2luZm8pIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gSW5wdXQgaXMgYSBKYXZhU2NyaXB0IEFycmF5IHRoYXQgd2FzIG9yaWdp
bmFsbHkgY3JlYXRlZCBmcm9tIGEgSmF2YSBBcnJheQotICAgICAgICAgICAgICAgICAgICBSdW50
aW1lQXJyYXkqIGltcCA9IHN0YXRpY19jYXN0PFJ1bnRpbWVBcnJheSo+KG9iamVjdCk7Ci0gICAg
ICAgICAgICAgICAgICAgIEphdmFBcnJheSogYXJyYXkgPSBzdGF0aWNfY2FzdDxKYXZhQXJyYXkq
PihpbXAtPmdldENvbmNyZXRlQXJyYXkoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5s
ID0gYXJyYXktPmphdmFBcnJheSgpOwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob2JqZWN0
LT5jbGFzc0luZm8oKSA9PSAmSlNBcnJheTo6c19pbmZvKSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIElucHV0IGlzIGEgSmF2YXNjcmlwdCBBcnJheS4gV2UgbmVlZCB0byBjcmVhdGUgaXQgdG8g
YSBKYXZhIEFycmF5LgotICAgICAgICAgICAgICAgICAgICByZXN1bHQubCA9IGNvbnZlcnRBcnJh
eUluc3RhbmNlVG9KYXZhQXJyYXkoZXhlYywgYXNBcnJheSh2YWx1ZSksIGphdmFDbGFzc05hbWUp
OwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKCFyZXN1bHQubCAmJiAoIXN0cmNtcChqYXZh
Q2xhc3NOYW1lLCAiamF2YS5sYW5nLk9iamVjdCIpKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHx8ICghc3RyY21wKGphdmFDbGFzc05hbWUsICJuZXRzY2FwZS5qYXZhc2NyaXB0LkpTT2Jq
ZWN0IikpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdyYXAgb2JqZWN0cyBpbiBKU09iamVj
dCBpbnN0YW5jZXMuCi0gICAgICAgICAgICAgICAgICAgIEpOSUVudiogZW52ID0gZ2V0Sk5JRW52
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGpjbGFzcyBqc09iamVjdENsYXNzID0gZW52LT5GaW5k
Q2xhc3MoInN1bi9wbHVnaW4vamF2YXNjcmlwdC93ZWJraXQvSlNPYmplY3QiKTsKLSAgICAgICAg
ICAgICAgICAgICAgam1ldGhvZElEIGNvbnN0cnVjdG9ySUQgPSBlbnYtPkdldE1ldGhvZElEKGpz
T2JqZWN0Q2xhc3MsICI8aW5pdD4iLCAiKEopViIpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
Y29uc3RydWN0b3JJRCkgewotICAgICAgICAgICAgICAgICAgICAgICAgamxvbmcgbmF0aXZlSGFu
ZGxlID0gcHRyX3RvX2psb25nKG9iamVjdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByb290
T2JqZWN0LT5nY1Byb3RlY3Qob2JqZWN0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC5sID0gZW52LT5OZXdPYmplY3QoanNPYmplY3RDbGFzcywgY29uc3RydWN0b3JJRCwgbmF0aXZl
SGFuZGxlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQ3JlYXRlIGFuIGFwcHJvcHJpYXRlIEphdmEgb2Jq
ZWN0IGlmIHRhcmdldCB0eXBlIGlzIGphdmEubGFuZy5PYmplY3QuCi0gICAgICAgICAgICBpZiAo
IXJlc3VsdC5sICYmICFzdHJjbXAoamF2YUNsYXNzTmFtZSwgImphdmEubGFuZy5PYmplY3QiKSkg
ewotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9IGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUoZXhlYyk7
Ci0gICAgICAgICAgICAgICAgICAgIEpOSUVudiogZW52ID0gZ2V0Sk5JRW52KCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGpvYmplY3QgamF2YVN0cmluZyA9IGVudi0+ZnVuY3Rpb25zLT5OZXdTdHJp
bmcoZW52LCAoY29uc3QgamNoYXIqKXN0cmluZ1ZhbHVlLmNoYXJhY3RlcnMoKSwgc3RyaW5nVmFs
dWUubGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgICAgICByZXN1bHQubCA9IGphdmFTdHJpbmc7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5pc051bWJlcigpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZSA9IHZhbHVlLmFzTnVtYmVyKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIEpOSUVudiogZW52ID0gZ2V0Sk5JRW52KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGpjbGFzcyBjbGF6eiA9IGVudi0+RmluZENsYXNzKCJqYXZhL2xhbmcvRG91YmxlIik7
Ci0gICAgICAgICAgICAgICAgICAgIGptZXRob2RJRCBjb25zdHJ1Y3RvciA9IGVudi0+R2V0TWV0
aG9kSUQoY2xhenosICI8aW5pdD4iLCAiKEQpViIpOwotICAgICAgICAgICAgICAgICAgICBqb2Jq
ZWN0IGphdmFEb3VibGUgPSBlbnYtPmZ1bmN0aW9ucy0+TmV3T2JqZWN0KGVudiwgY2xhenosIGNv
bnN0cnVjdG9yLCBkb3VibGVWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5sID0g
amF2YURvdWJsZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmlzQm9vbGVhbigp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgYm9vbFZhbHVlID0gdmFsdWUuYXNCb29sZWFu
KCk7Ci0gICAgICAgICAgICAgICAgICAgIEpOSUVudiogZW52ID0gZ2V0Sk5JRW52KCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGpjbGFzcyBjbGF6eiA9IGVudi0+RmluZENsYXNzKCJqYXZhL2xhbmcv
Qm9vbGVhbiIpOwotICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQgY29uc3RydWN0b3IgPSBl
bnYtPkdldE1ldGhvZElEKGNsYXp6LCAiPGluaXQ+IiwgIihaKVYiKTsKLSAgICAgICAgICAgICAg
ICAgICAgam9iamVjdCBqYXZhQm9vbGVhbiA9IGVudi0+ZnVuY3Rpb25zLT5OZXdPYmplY3QoZW52
LCBjbGF6eiwgY29uc3RydWN0b3IsIGJvb2xWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJl
c3VsdC5sID0gamF2YUJvb2xlYW47Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5p
c1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZSA9
ICJ1bmRlZmluZWQiOwotICAgICAgICAgICAgICAgICAgICBKTklFbnYqIGVudiA9IGdldEpOSUVu
digpOwotICAgICAgICAgICAgICAgICAgICBqb2JqZWN0IGphdmFTdHJpbmcgPSBlbnYtPmZ1bmN0
aW9ucy0+TmV3U3RyaW5nKGVudiwgKGNvbnN0IGpjaGFyKilzdHJpbmdWYWx1ZS5jaGFyYWN0ZXJz
KCksIHN0cmluZ1ZhbHVlLmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmwg
PSBqYXZhU3RyaW5nOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgLy8gQ29udmVydCB2YWx1ZSB0byBhIHN0cmluZyBpZiB0aGUgdGFyZ2V0IHR5cGUgaXMg
YSBqYXZhLmxhbmcuU3RyaW5nLCBhbmQgd2UncmUgbm90Ci0gICAgICAgICAgICAvLyBjb252ZXJ0
aW5nIGZyb20gYSBudWxsLgotICAgICAgICAgICAgaWYgKCFyZXN1bHQubCAmJiAhc3RyY21wKGph
dmFDbGFzc05hbWUsICJqYXZhLmxhbmcuU3RyaW5nIikpIHsKLSAgICAgICAgICAgICAgICBpZiAo
IXZhbHVlLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdHJpbmdWYWx1
ZSA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICAgICAgICAgICAgICAg
ICAgSk5JRW52KiBlbnYgPSBnZXRKTklFbnYoKTsKLSAgICAgICAgICAgICAgICAgICAgam9iamVj
dCBqYXZhU3RyaW5nID0gZW52LT5mdW5jdGlvbnMtPk5ld1N0cmluZyhlbnYsIChjb25zdCBqY2hh
ciopc3RyaW5nVmFsdWUuY2hhcmFjdGVycygpLCBzdHJpbmdWYWx1ZS5sZW5ndGgoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5sID0gamF2YVN0cmluZzsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEph
dmFUeXBlQm9vbGVhbjoKLSAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0LnogPSAoamJvb2xl
YW4pdmFsdWUudG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAg
ICBjYXNlIEphdmFUeXBlQnl0ZToKLSAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0LmIgPSAo
amJ5dGUpdmFsdWUudG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0K
LSAgICBjYXNlIEphdmFUeXBlQ2hhcjoKLSAgICAgICAgewotICAgICAgICAgICAgcmVzdWx0LmMg
PSAoamNoYXIpdmFsdWUudG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0KLSAgICBjYXNlIEphdmFUeXBlU2hvcnQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc3Vs
dC5zID0gKGpzaG9ydCl2YWx1ZS50b051bWJlcihleGVjKTsKLSAgICAgICAgfQotICAgICAgICBi
cmVhazsKLQotICAgIGNhc2UgSmF2YVR5cGVJbnQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
c3VsdC5pID0gKGppbnQpdmFsdWUudG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIEphdmFUeXBlTG9uZzoKLSAgICAgICAgewotICAgICAgICAgICAg
cmVzdWx0LmogPSAoamxvbmcpdmFsdWUudG9OdW1iZXIoZXhlYyk7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0KLSAgICBjYXNlIEphdmFUeXBlRmxvYXQ6Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJlc3VsdC5mID0gKGpmbG9hdCl2YWx1ZS50b051bWJlcihleGVjKTsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLQotICAgIGNhc2UgSmF2YVR5cGVEb3VibGU6Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJlc3VsdC5kID0gKGpkb3VibGUpdmFsdWUudG9OdW1iZXIoZXhlYyk7Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEphdmFUeXBlSW52YWxpZDoKLSAgICBj
YXNlIEphdmFUeXBlVm9pZDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLX0gLy8gZW5kIG9mIG5hbWVzcGFjZSBCaW5kaW5ncwotCi19IC8vIGVuZCBvZiBu
YW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBFTkFCTEUoSkFWQV9CUklER0UpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KTklVdGlsaXR5UHJpdmF0ZS5oIGIvU291
cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZhdGUuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZWQwOWZkNjVkNzQ1NzIzOTEzOTE4ZDA4OTU0MGU4OTAyMzM1
ZTY4OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KTklVdGlsaXR5UHJpdmF0ZS5oCisrKyAvZGV2L251
bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAyMDA5LCBUaGUg
QW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBKTklVdGlsaXR5UHJp
dmF0ZV9oCi0jZGVmaW5lIEpOSVV0aWxpdHlQcml2YXRlX2gKLQotI2lmIEVOQUJMRShKQVZBX0JS
SURHRSkKLQotI2luY2x1ZGUgIkpOSVV0aWxpdHkuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTVmFs
dWUuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEV4ZWNTdGF0ZTsKLWNsYXNzIEpTT2Jq
ZWN0OwotCi1uYW1lc3BhY2UgQmluZGluZ3MgewotCi1jbGFzcyBSb290T2JqZWN0OwotCi1qdmFs
dWUgY29udmVydFZhbHVlVG9KVmFsdWUoRXhlY1N0YXRlKiwgUm9vdE9iamVjdCosIEpTVmFsdWUs
IEphdmFUeXBlLCBjb25zdCBjaGFyKiBqYXZhQ2xhc3NOYW1lKTsKLWJvb2wgZGlzcGF0Y2hKTklD
YWxsKEV4ZWNTdGF0ZSosIGNvbnN0IHZvaWQqIHRhcmdldEFwcGxldFZpZXcsIGpvYmplY3QsIGJv
b2wgaXNTdGF0aWMsIEphdmFUeXBlIHJldHVyblR5cGUsIGptZXRob2RJRCwganZhbHVlKiBhcmdz
LCBqdmFsdWUmIHJlc3VsdCwgY29uc3QgY2hhciogY2FsbGluZ1VSTCwgSlNWYWx1ZSYgZXhjZXB0
aW9uRGVzY3JpcHRpb24pOwotCi19IC8vIG5hbWVzcGFjZSBCaW5kaW5ncwotCi19IC8vIG5hbWVz
cGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShKQVZBX0JSSURHRSkKLQotI2VuZGlmIC8vIEpO
SVV0aWxpdHlQcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkv
anNjL0phdmFBcnJheUpTQy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZh
QXJyYXlKU0MuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NmY0ZWM4MWFlZGNi
MzBmMDBlZmQ0NzYxNTVmNTY0MmZiZmJkZTgxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFBcnJh
eUpTQy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgMjAxMCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJv
amVjdAotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKYXZhQXJyYXlKU0Mu
aCIKLQotI2lmIEVOQUJMRShKQVZBX0JSSURHRSkKLQotI2luY2x1ZGUgIkpOSVV0aWxpdHlQcml2
YXRlLmgiCi0jaW5jbHVkZSAiSmF2YUluc3RhbmNlSlNDLmgiCi0jaW5jbHVkZSAiSm9iamVjdFdy
YXBwZXIuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAicnVudGltZV9hcnJheS5o
IgotI2luY2x1ZGUgInJ1bnRpbWVfb2JqZWN0LmgiCi0jaW5jbHVkZSAicnVudGltZV9yb290Lmgi
Ci0jaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotdXNp
bmcgbmFtZXNwYWNlIEpTQzo6QmluZGluZ3M7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQot
SlNWYWx1ZSBKYXZhQXJyYXk6OmNvbnZlcnRKT2JqZWN0VG9BcnJheShFeGVjU3RhdGUqIGV4ZWMs
IGpvYmplY3QgYW5PYmplY3QsIGNvbnN0IGNoYXIqIHR5cGUsIFBhc3NSZWZQdHI8Um9vdE9iamVj
dD4gcm9vdE9iamVjdCkKLXsKLSAgICBpZiAodHlwZVswXSAhPSAnWycpCi0gICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotCi0gICAgcmV0dXJuIFJ1bnRpbWVBcnJheTo6Y3JlYXRlKGV4ZWMs
IG5ldyBKYXZhQXJyYXkoYW5PYmplY3QsIHR5cGUsIHJvb3RPYmplY3QpKTsKLX0KLQotSmF2YUFy
cmF5OjpKYXZhQXJyYXkoam9iamVjdCBhcnJheSwgY29uc3QgY2hhciogdHlwZSwgUGFzc1JlZlB0
cjxSb290T2JqZWN0PiByb290T2JqZWN0KQotICAgIDogQXJyYXkocm9vdE9iamVjdCkKLXsKLSAg
ICBtX2FycmF5ID0gSm9iamVjdFdyYXBwZXI6OmNyZWF0ZShhcnJheSk7Ci0gICAgLy8gSmF2YSBh
cnJheSBhcmUgZml4ZWQgbGVuZ3RoLCBzbyB3ZSBjYW4gY2FjaGUgbGVuZ3RoLgotICAgIEpOSUVu
diogZW52ID0gZ2V0Sk5JRW52KCk7Ci0gICAgbV9sZW5ndGggPSBlbnYtPkdldEFycmF5TGVuZ3Ro
KHN0YXRpY19jYXN0PGphcnJheT4obV9hcnJheS0+aW5zdGFuY2UoKSkpOwotICAgIG1fdHlwZSA9
IHN0cmR1cCh0eXBlKTsKLX0KLQotSmF2YUFycmF5Ojp+SmF2YUFycmF5KCkKLXsKLSAgICBmcmVl
KGNvbnN0X2Nhc3Q8Y2hhcio+KG1fdHlwZSkpOwotfQotCi1Sb290T2JqZWN0KiBKYXZhQXJyYXk6
OnJvb3RPYmplY3QoKSBjb25zdAotewotICAgIHJldHVybiBtX3Jvb3RPYmplY3QgJiYgbV9yb290
T2JqZWN0LT5pc1ZhbGlkKCkgPyBtX3Jvb3RPYmplY3QuZ2V0KCkgOiAwOwotfQotCi12b2lkIEph
dmFBcnJheTo6c2V0VmFsdWVBdChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU1Zh
bHVlIGFWYWx1ZSkgY29uc3QKLXsKLSAgICBKTklFbnYqIGVudiA9IGdldEpOSUVudigpOwotICAg
IGNoYXIqIGphdmFDbGFzc05hbWUgPSAwOwotCi0gICAgSmF2YVR5cGUgYXJyYXlUeXBlID0gamF2
YVR5cGVGcm9tUHJpbWl0aXZlVHlwZShtX3R5cGVbMV0pOwotICAgIGlmIChtX3R5cGVbMV0gPT0g
J0wnKSB7Ci0gICAgICAgIC8vIFRoZSB0eXBlIG9mIHRoZSBhcnJheSB3aWxsIGJlIHNvbWV0aGlu
ZyBsaWtlOgotICAgICAgICAvLyAiW0xqYXZhLmxhbmcuc3RyaW5nOyIuIFRoaXMgaXMgZ3VhcmFu
dGVlZCwgc28gbm8gbmVlZAotICAgICAgICAvLyBmb3IgZXh0cmEgc2FuaXR5IGNoZWNrcy4KLSAg
ICAgICAgamF2YUNsYXNzTmFtZSA9IHN0cmR1cCgmbV90eXBlWzJdKTsKLSAgICAgICAgamF2YUNs
YXNzTmFtZVtzdHJjaHIoamF2YUNsYXNzTmFtZSwgJzsnKS1qYXZhQ2xhc3NOYW1lXSA9IDA7Ci0g
ICAgfQotICAgIGp2YWx1ZSBhSlZhbHVlID0gY29udmVydFZhbHVlVG9KVmFsdWUoZXhlYywgbV9y
b290T2JqZWN0LmdldCgpLCBhVmFsdWUsIGFycmF5VHlwZSwgamF2YUNsYXNzTmFtZSk7Ci0KLSAg
ICBzd2l0Y2ggKGFycmF5VHlwZSkgewotICAgIGNhc2UgSmF2YVR5cGVPYmplY3Q6Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIGVudi0+U2V0T2JqZWN0QXJyYXlFbGVtZW50KHN0YXRpY19jYXN0PGpv
YmplY3RBcnJheT4oamF2YUFycmF5KCkpLCBpbmRleCwgYUpWYWx1ZS5sKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0KLSAgICBjYXNlIEphdmFUeXBlQm9vbGVhbjoKLSAgICAgICAg
ewotICAgICAgICAgICAgZW52LT5TZXRCb29sZWFuQXJyYXlSZWdpb24oc3RhdGljX2Nhc3Q8amJv
b2xlYW5BcnJheT4oamF2YUFycmF5KCkpLCBpbmRleCwgMSwgJmFKVmFsdWUueik7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgY2FzZSBKYXZhVHlwZUJ5dGU6Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIGVudi0+U2V0Qnl0ZUFycmF5UmVnaW9uKHN0YXRpY19jYXN0PGpieXRl
QXJyYXk+KGphdmFBcnJheSgpKSwgaW5kZXgsIDEsICZhSlZhbHVlLmIpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLQotICAgIGNhc2UgSmF2YVR5cGVDaGFyOgotICAgICAgICB7Ci0g
ICAgICAgICAgICBlbnYtPlNldENoYXJBcnJheVJlZ2lvbihzdGF0aWNfY2FzdDxqY2hhckFycmF5
PihqYXZhQXJyYXkoKSksIGluZGV4LCAxLCAmYUpWYWx1ZS5jKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0KLSAgICBjYXNlIEphdmFUeXBlU2hvcnQ6Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIGVudi0+U2V0U2hvcnRBcnJheVJlZ2lvbihzdGF0aWNfY2FzdDxqc2hvcnRBcnJheT4o
amF2YUFycmF5KCkpLCBpbmRleCwgMSwgJmFKVmFsdWUucyk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotCi0gICAgY2FzZSBKYXZhVHlwZUludDoKLSAgICAgICAgewotICAgICAgICAg
ICAgZW52LT5TZXRJbnRBcnJheVJlZ2lvbihzdGF0aWNfY2FzdDxqaW50QXJyYXk+KGphdmFBcnJh
eSgpKSwgaW5kZXgsIDEsICZhSlZhbHVlLmkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLQotICAgIGNhc2UgSmF2YVR5cGVMb25nOgotICAgICAgICB7Ci0gICAgICAgICAgICBlbnYt
PlNldExvbmdBcnJheVJlZ2lvbihzdGF0aWNfY2FzdDxqbG9uZ0FycmF5PihqYXZhQXJyYXkoKSks
IGluZGV4LCAxLCAmYUpWYWx1ZS5qKTsKLSAgICAgICAgfQotCi0gICAgY2FzZSBKYXZhVHlwZUZs
b2F0OgotICAgICAgICB7Ci0gICAgICAgICAgICBlbnYtPlNldEZsb2F0QXJyYXlSZWdpb24oc3Rh
dGljX2Nhc3Q8amZsb2F0QXJyYXk+KGphdmFBcnJheSgpKSwgaW5kZXgsIDEsICZhSlZhbHVlLmYp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgIGNhc2UgSmF2YVR5cGVEb3Vi
bGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGVudi0+U2V0RG91YmxlQXJyYXlSZWdpb24oc3Rh
dGljX2Nhc3Q8amRvdWJsZUFycmF5PihqYXZhQXJyYXkoKSksIGluZGV4LCAxLCAmYUpWYWx1ZS5k
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKGphdmFDbGFzc05hbWUpCi0gICAgICAgIGZyZWUoY29u
c3RfY2FzdDxjaGFyKj4oamF2YUNsYXNzTmFtZSkpOwotfQotCi1KU1ZhbHVlIEphdmFBcnJheTo6
dmFsdWVBdChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4KSBjb25zdAotewotICAgIEpO
SUVudiogZW52ID0gZ2V0Sk5JRW52KCk7Ci0gICAgSmF2YVR5cGUgYXJyYXlUeXBlID0gamF2YVR5
cGVGcm9tUHJpbWl0aXZlVHlwZShtX3R5cGVbMV0pOwotICAgIHN3aXRjaCAoYXJyYXlUeXBlKSB7
Ci0gICAgY2FzZSBKYXZhVHlwZU9iamVjdDoKLSAgICAgICAgewotICAgICAgICAgICAgam9iamVj
dEFycmF5IG9iamVjdEFycmF5ID0gc3RhdGljX2Nhc3Q8am9iamVjdEFycmF5PihqYXZhQXJyYXko
KSk7Ci0gICAgICAgICAgICBqb2JqZWN0IGFuT2JqZWN0OwotICAgICAgICAgICAgYW5PYmplY3Qg
PSBlbnYtPkdldE9iamVjdEFycmF5RWxlbWVudChvYmplY3RBcnJheSwgaW5kZXgpOwotCi0gICAg
ICAgICAgICAvLyBObyBvYmplY3Q/Ci0gICAgICAgICAgICBpZiAoIWFuT2JqZWN0KQotICAgICAg
ICAgICAgICAgIHJldHVybiBqc051bGwoKTsKLQotICAgICAgICAgICAgLy8gTmVzdGVkIGFycmF5
PwotICAgICAgICAgICAgaWYgKG1fdHlwZVsxXSA9PSAnWycpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIEphdmFBcnJheTo6Y29udmVydEpPYmplY3RUb0FycmF5KGV4ZWMsIGFuT2JqZWN0LCBtX3R5
cGUgKyAxLCByb290T2JqZWN0KCkpOwotICAgICAgICAgICAgLy8gb3IgYXJyYXkgb2Ygb3RoZXIg
b2JqZWN0IHR5cGU/Ci0gICAgICAgICAgICByZXR1cm4gSmF2YUluc3RhbmNlOjpjcmVhdGUoYW5P
YmplY3QsIHJvb3RPYmplY3QoKSktPmNyZWF0ZVJ1bnRpbWVPYmplY3QoZXhlYyk7Ci0gICAgICAg
IH0KLQotICAgIGNhc2UgSmF2YVR5cGVCb29sZWFuOgotICAgICAgICB7Ci0gICAgICAgICAgICBq
Ym9vbGVhbkFycmF5IGJvb2xlYW5BcnJheSA9IHN0YXRpY19jYXN0PGpib29sZWFuQXJyYXk+KGph
dmFBcnJheSgpKTsKLSAgICAgICAgICAgIGpib29sZWFuIGFCb29sZWFuOwotICAgICAgICAgICAg
ZW52LT5HZXRCb29sZWFuQXJyYXlSZWdpb24oYm9vbGVhbkFycmF5LCBpbmRleCwgMSwgJmFCb29s
ZWFuKTsKLSAgICAgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oYUJvb2xlYW4pOwotICAgICAgICB9
Ci0KLSAgICBjYXNlIEphdmFUeXBlQnl0ZToKLSAgICAgICAgewotICAgICAgICAgICAgamJ5dGVB
cnJheSBieXRlQXJyYXkgPSBzdGF0aWNfY2FzdDxqYnl0ZUFycmF5PihqYXZhQXJyYXkoKSk7Ci0g
ICAgICAgICAgICBqYnl0ZSBhQnl0ZTsKLSAgICAgICAgICAgIGVudi0+R2V0Qnl0ZUFycmF5UmVn
aW9uKGJ5dGVBcnJheSwgaW5kZXgsIDEsICZhQnl0ZSk7Ci0gICAgICAgICAgICByZXR1cm4ganNO
dW1iZXIoYUJ5dGUpOwotICAgICAgICB9Ci0KLSAgICBjYXNlIEphdmFUeXBlQ2hhcjoKLSAgICAg
ICAgewotICAgICAgICAgICAgamNoYXJBcnJheSBjaGFyQXJyYXkgPSBzdGF0aWNfY2FzdDxqY2hh
ckFycmF5PihqYXZhQXJyYXkoKSk7Ci0gICAgICAgICAgICBqY2hhciBhQ2hhcjsKLSAgICAgICAg
ICAgIGVudi0+R2V0Q2hhckFycmF5UmVnaW9uKGNoYXJBcnJheSwgaW5kZXgsIDEsICZhQ2hhcik7
Ci0gICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoYUNoYXIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLQotICAgIGNhc2UgSmF2YVR5cGVTaG9ydDoKLSAgICAgICAgewotICAgICAg
ICAgICAganNob3J0QXJyYXkgc2hvcnRBcnJheSA9IHN0YXRpY19jYXN0PGpzaG9ydEFycmF5Pihq
YXZhQXJyYXkoKSk7Ci0gICAgICAgICAgICBqc2hvcnQgYVNob3J0OwotICAgICAgICAgICAgZW52
LT5HZXRTaG9ydEFycmF5UmVnaW9uKHNob3J0QXJyYXksIGluZGV4LCAxLCAmYVNob3J0KTsKLSAg
ICAgICAgICAgIHJldHVybiBqc051bWJlcihhU2hvcnQpOwotICAgICAgICB9Ci0KLSAgICBjYXNl
IEphdmFUeXBlSW50OgotICAgICAgICB7Ci0gICAgICAgICAgICBqaW50QXJyYXkgaW50QXJyYXkg
PSBzdGF0aWNfY2FzdDxqaW50QXJyYXk+KGphdmFBcnJheSgpKTsKLSAgICAgICAgICAgIGppbnQg
YW5JbnQ7Ci0gICAgICAgICAgICBlbnYtPkdldEludEFycmF5UmVnaW9uKGludEFycmF5LCBpbmRl
eCwgMSwgJmFuSW50KTsKLSAgICAgICAgICAgIHJldHVybiBqc051bWJlcihhbkludCk7Ci0gICAg
ICAgIH0KLQotICAgIGNhc2UgSmF2YVR5cGVMb25nOgotICAgICAgICB7Ci0gICAgICAgICAgICBq
bG9uZ0FycmF5IGxvbmdBcnJheSA9IHN0YXRpY19jYXN0PGpsb25nQXJyYXk+KGphdmFBcnJheSgp
KTsKLSAgICAgICAgICAgIGpsb25nIGFMb25nOwotICAgICAgICAgICAgZW52LT5HZXRMb25nQXJy
YXlSZWdpb24obG9uZ0FycmF5LCBpbmRleCwgMSwgJmFMb25nKTsKLSAgICAgICAgICAgIHJldHVy
biBqc051bWJlcihhTG9uZyk7Ci0gICAgICAgIH0KLQotICAgIGNhc2UgSmF2YVR5cGVGbG9hdDoK
LSAgICAgICAgewotICAgICAgICAgICAgamZsb2F0QXJyYXkgZmxvYXRBcnJheSA9IHN0YXRpY19j
YXN0PGpmbG9hdEFycmF5PihqYXZhQXJyYXkoKSk7Ci0gICAgICAgICAgICBqZmxvYXQgYUZsb2F0
OwotICAgICAgICAgICAgZW52LT5HZXRGbG9hdEFycmF5UmVnaW9uKGZsb2F0QXJyYXksIGluZGV4
LCAxLCAmYUZsb2F0KTsKLSAgICAgICAgICAgIHJldHVybiBqc051bWJlcihhRmxvYXQpOwotICAg
ICAgICB9Ci0KLSAgICBjYXNlIEphdmFUeXBlRG91YmxlOgotICAgICAgICB7Ci0gICAgICAgICAg
ICBqZG91YmxlQXJyYXkgZG91YmxlQXJyYXkgPSBzdGF0aWNfY2FzdDxqZG91YmxlQXJyYXk+KGph
dmFBcnJheSgpKTsKLSAgICAgICAgICAgIGpkb3VibGUgYURvdWJsZTsKLSAgICAgICAgICAgIGVu
di0+R2V0RG91YmxlQXJyYXlSZWdpb24oZG91YmxlQXJyYXksIGluZGV4LCAxLCAmYURvdWJsZSk7
Ci0gICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoYURvdWJsZSk7Ci0gICAgICAgIH0KLSAgICBk
ZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci19Ci0KLXVuc2lnbmVkIGludCBKYXZhQXJyYXk6OmdldExlbmd0aCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fbGVuZ3RoOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKEpBVkFfQlJJREdFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUFycmF5SlNDLmggYi9T
b3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQXJyYXlKU0MuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOGFiM2U2NzQ4MzkzYjMwNGRiOGFlODQ3NmUzMzY5YzdhZmJmYjI4
My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQXJyYXlKU0MuaAorKysgL2Rldi9udWxsCkBAIC0x
LDY3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDcs
IDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IDIwMTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEph
dmFBcnJheUpTQ19oCi0jZGVmaW5lIEphdmFBcnJheUpTQ19oCi0KLSNpZiBFTkFCTEUoSkFWQV9C
UklER0UpCi0KLSNpbmNsdWRlICJCcmlkZ2VKU0MuaCIKLSNpbmNsdWRlICJKTklVdGlsaXR5Lmgi
Ci0jaW5jbHVkZSAiSm9iamVjdFdyYXBwZXIuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLW5hbWVz
cGFjZSBCaW5kaW5ncyB7Ci0KLWNsYXNzIEphdmFBcnJheSA6IHB1YmxpYyBBcnJheSB7Ci1wdWJs
aWM6Ci0gICAgSmF2YUFycmF5KGpvYmplY3QgYXJyYXksIGNvbnN0IGNoYXIqIHR5cGUsIFBhc3NS
ZWZQdHI8Um9vdE9iamVjdD4pOwotICAgIHZpcnR1YWwgfkphdmFBcnJheSgpOwotCi0gICAgUm9v
dE9iamVjdCogcm9vdE9iamVjdCgpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIHNldFZhbHVl
QXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgaW50IGluZGV4LCBKU1ZhbHVlKSBjb25zdDsKLSAgICB2
aXJ0dWFsIEpTVmFsdWUgdmFsdWVBdChFeGVjU3RhdGUqLCB1bnNpZ25lZCBpbnQgaW5kZXgpIGNv
bnN0OwotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldExlbmd0aCgpIGNvbnN0OwotCi0gICAg
am9iamVjdCBqYXZhQXJyYXkoKSBjb25zdCB7IHJldHVybiBtX2FycmF5LT5pbnN0YW5jZSgpOyB9
Ci0KLSAgICBzdGF0aWMgSlNWYWx1ZSBjb252ZXJ0Sk9iamVjdFRvQXJyYXkoRXhlY1N0YXRlKiwg
am9iamVjdCwgY29uc3QgY2hhciogdHlwZSwgUGFzc1JlZlB0cjxSb290T2JqZWN0Pik7Ci0KLXBy
aXZhdGU6Ci0gICAgUmVmUHRyPEpvYmplY3RXcmFwcGVyPiBtX2FycmF5OwotICAgIHVuc2lnbmVk
IGludCBtX2xlbmd0aDsKLSAgICBjb25zdCBjaGFyKiBtX3R5cGU7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBCaW5kaW5ncwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIEVOQUJMRShK
QVZBX0JSSURHRSkKLQotI2VuZGlmIC8vIEphdmFBcnJheUpTQ19oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwIGIvU291cmNlL1dlYkNv
cmUvYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYWViNDAyMGJkODRhMjM3YjllYzFjMGFiNzZhOWY2ZmZiNmU4Yjk3NS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
cmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTUxICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKYXZhQ2xhc3NKU0MuaCIKLQotI2lmIEVO
QUJMRShKQVZBX0JSSURHRSkKLQotI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCi0jaW5jbHVkZSAi
SmF2YUZpZWxkSlNDLmgiCi0jaW5jbHVkZSAiSmF2YU1ldGhvZEpTQy5oIgotI2luY2x1ZGUgPHJ1
bnRpbWUvSWRlbnRpZmllci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+Ci0KLXVzaW5n
IG5hbWVzcGFjZSBKU0M6OkJpbmRpbmdzOwotCi1KYXZhQ2xhc3M6OkphdmFDbGFzcyhqb2JqZWN0
IGFuSW5zdGFuY2UpCi17Ci0gICAgam9iamVjdCBhQ2xhc3MgPSBjYWxsSk5JTWV0aG9kPGpvYmpl
Y3Q+KGFuSW5zdGFuY2UsICJnZXRDbGFzcyIsICIoKUxqYXZhL2xhbmcvQ2xhc3M7Iik7Ci0KLSAg
ICBpZiAoIWFDbGFzcykgewotICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBjYWxsIGdldENs
YXNzIG9uIGluc3RhbmNlICVwIiwgYW5JbnN0YW5jZSk7Ci0gICAgICAgIG1fbmFtZSA9IGZhc3RT
dHJEdXAoIjxVbmtub3duPiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGpz
dHJpbmcgY2xhc3NOYW1lID0gKGpzdHJpbmcpY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihhQ2xhc3Ms
ICJnZXROYW1lIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7IikpIHsKLSAgICAgICAgY29uc3QgY2hh
ciogY2xhc3NOYW1lQyA9IGdldENoYXJhY3RlcnNGcm9tSlN0cmluZyhjbGFzc05hbWUpOwotICAg
ICAgICBtX25hbWUgPSBmYXN0U3RyRHVwKGNsYXNzTmFtZUMpOwotICAgICAgICByZWxlYXNlQ2hh
cmFjdGVyc0ZvckpTdHJpbmcoY2xhc3NOYW1lLCBjbGFzc05hbWVDKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgbV9uYW1lID0gZmFzdFN0ckR1cCgiPFVua25vd24+Iik7Ci0KLSAgICBpbnQgaTsKLSAg
ICBKTklFbnYqIGVudiA9IGdldEpOSUVudigpOwotCi0gICAgLy8gR2V0IHRoZSBmaWVsZHMKLSAg
ICBpZiAoamFycmF5IGZpZWxkcyA9IChqYXJyYXkpY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihhQ2xh
c3MsICJnZXRGaWVsZHMiLCAiKClbTGphdmEvbGFuZy9yZWZsZWN0L0ZpZWxkOyIpKSB7Ci0gICAg
ICAgIGludCBudW1GaWVsZHMgPSBlbnYtPkdldEFycmF5TGVuZ3RoKGZpZWxkcyk7Ci0gICAgICAg
IGZvciAoaSA9IDA7IGkgPCBudW1GaWVsZHM7IGkrKykgewotICAgICAgICAgICAgam9iamVjdCBh
SkZpZWxkID0gZW52LT5HZXRPYmplY3RBcnJheUVsZW1lbnQoKGpvYmplY3RBcnJheSlmaWVsZHMs
IGkpOwotICAgICAgICAgICAgSmF2YUZpZWxkKiBhRmllbGQgPSBuZXcgSmF2YUZpZWxkKGVudiwg
YUpGaWVsZCk7IC8vIGRlbGV0ZWQgaW4gdGhlIEphdmFDbGFzcyBkZXN0cnVjdG9yCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhY3F1aXJlIGEgSlNM
b2NrIGhlcmU/Ci0gICAgICAgICAgICAgICAgbV9maWVsZHMuc2V0KGFGaWVsZC0+bmFtZSgpLmlt
cGwoKSwgYUZpZWxkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVudi0+RGVsZXRlTG9j
YWxSZWYoYUpGaWVsZCk7Ci0gICAgICAgIH0KLSAgICAgICAgZW52LT5EZWxldGVMb2NhbFJlZihm
aWVsZHMpOwotICAgIH0KLQotICAgIC8vIEdldCB0aGUgbWV0aG9kcwotICAgIGlmIChqYXJyYXkg
bWV0aG9kcyA9IChqYXJyYXkpY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihhQ2xhc3MsICJnZXRNZXRo
b2RzIiwgIigpW0xqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2Q7IikpIHsKLSAgICAgICAgaW50IG51
bU1ldGhvZHMgPSBlbnYtPkdldEFycmF5TGVuZ3RoKG1ldGhvZHMpOwotICAgICAgICBmb3IgKGkg
PSAwOyBpIDwgbnVtTWV0aG9kczsgaSsrKSB7Ci0gICAgICAgICAgICBqb2JqZWN0IGFKTWV0aG9k
ID0gZW52LT5HZXRPYmplY3RBcnJheUVsZW1lbnQoKGpvYmplY3RBcnJheSltZXRob2RzLCBpKTsK
LSAgICAgICAgICAgIEphdmFNZXRob2QqIGFNZXRob2QgPSBuZXcgSmF2YU1ldGhvZChlbnYsIGFK
TWV0aG9kKTsgLy8gZGVsZXRlZCBpbiB0aGUgSmF2YUNsYXNzIGRlc3RydWN0b3IKLSAgICAgICAg
ICAgIE1ldGhvZExpc3QqIG1ldGhvZExpc3Q7Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhY3F1aXJlIGEgSlNMb2NrIGhlcmU/Ci0KLSAgICAgICAg
ICAgICAgICBtZXRob2RMaXN0ID0gbV9tZXRob2RzLmdldChhTWV0aG9kLT5uYW1lKCkuaW1wbCgp
KTsKLSAgICAgICAgICAgICAgICBpZiAoIW1ldGhvZExpc3QpIHsKLSAgICAgICAgICAgICAgICAg
ICAgbWV0aG9kTGlzdCA9IG5ldyBNZXRob2RMaXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIG1f
bWV0aG9kcy5zZXQoYU1ldGhvZC0+bmFtZSgpLmltcGwoKSwgbWV0aG9kTGlzdCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgbWV0aG9kTGlzdC0+YXBwZW5k
KGFNZXRob2QpOwotICAgICAgICAgICAgZW52LT5EZWxldGVMb2NhbFJlZihhSk1ldGhvZCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZW52LT5EZWxldGVMb2NhbFJlZihtZXRob2RzKTsKLSAgICB9Ci0K
LSAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKGFDbGFzcyk7Ci19Ci0KLUphdmFDbGFzczo6fkphdmFD
bGFzcygpCi17Ci0gICAgZmFzdEZyZWUoY29uc3RfY2FzdDxjaGFyKj4obV9uYW1lKSk7Ci0KLSAg
ICAvLyBGSVhNRTogU2hvdWxkIHdlIGFjcXVpcmUgYSBKU0xvY2sgaGVyZT8KLQotICAgIGRlbGV0
ZUFsbFZhbHVlcyhtX2ZpZWxkcyk7Ci0gICAgbV9maWVsZHMuY2xlYXIoKTsKLQotICAgIE1ldGhv
ZExpc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fbWV0aG9kcy5lbmQoKTsKLSAgICBmb3Ig
KE1ldGhvZExpc3RNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9tZXRob2RzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBNZXRob2RMaXN0KiBtZXRob2RMaXN0ID0g
aXQtPnNlY29uZDsKLSAgICAgICAgZGVsZXRlQWxsVmFsdWVzKCptZXRob2RMaXN0KTsKLSAgICAg
ICAgZGVsZXRlIG1ldGhvZExpc3Q7Ci0gICAgfQotICAgIG1fbWV0aG9kcy5jbGVhcigpOwotfQot
Ci1NZXRob2RMaXN0IEphdmFDbGFzczo6bWV0aG9kc05hbWVkKFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIEluc3RhbmNlKikgY29uc3QKLXsKLSAgICBNZXRob2RMaXN0KiBtZXRob2RMaXN0ID0g
bV9tZXRob2RzLmdldChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKLQotICAgIGlmIChtZXRo
b2RMaXN0KQotICAgICAgICByZXR1cm4gKm1ldGhvZExpc3Q7Ci0gICAgcmV0dXJuIE1ldGhvZExp
c3QoKTsKLX0KLQotRmllbGQqIEphdmFDbGFzczo6ZmllbGROYW1lZChQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBJbnN0YW5jZSopIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZmllbGRzLmdldChw
cm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKLX0KLQotYm9vbCBKYXZhQ2xhc3M6OmlzTnVtYmVy
Q2xhc3MoKSBjb25zdAotewotICAgIHJldHVybiAoIXN0cmNtcChtX25hbWUsICJqYXZhLmxhbmcu
Qnl0ZSIpCi0gICAgICAgIHx8ICFzdHJjbXAobV9uYW1lLCAiamF2YS5sYW5nLlNob3J0IikKLSAg
ICAgICAgfHwgIXN0cmNtcChtX25hbWUsICJqYXZhLmxhbmcuSW50ZWdlciIpCi0gICAgICAgIHx8
ICFzdHJjbXAobV9uYW1lLCAiamF2YS5sYW5nLkxvbmciKQotICAgICAgICB8fCAhc3RyY21wKG1f
bmFtZSwgImphdmEubGFuZy5GbG9hdCIpCi0gICAgICAgIHx8ICFzdHJjbXAobV9uYW1lLCAiamF2
YS5sYW5nLkRvdWJsZSIpKTsKLX0KLQotYm9vbCBKYXZhQ2xhc3M6OmlzQm9vbGVhbkNsYXNzKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gIXN0cmNtcChtX25hbWUsICJqYXZhLmxhbmcuQm9vbGVhbiIp
OwotfQotCi1ib29sIEphdmFDbGFzczo6aXNTdHJpbmdDbGFzcygpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuICFzdHJjbXAobV9uYW1lLCAiamF2YS5sYW5nLlN0cmluZyIpOwotfQotCi0jZW5kaWYgLy8g
RU5BQkxFKEpBVkFfQlJJREdFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2pu
aS9qc2MvSmF2YUNsYXNzSlNDLmggYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZh
Q2xhc3NKU0MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUzMDgwNzljYjdlMTRl
YzFmM2Y5ODgyN2EwNThhZWQwY2I2YTQ5YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NK
U0MuaAorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDMsIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSmF2YUNsYXNzSlNDX2gKLSNkZWZpbmUgSmF2YUNs
YXNzSlNDX2gKLQotI2lmIEVOQUJMRShKQVZBX0JSSURHRSkKLQotI2luY2x1ZGUgIkJyaWRnZUpT
Qy5oIgotI2luY2x1ZGUgIkpOSVV0aWxpdHkuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgot
Ci1uYW1lc3BhY2UgSlNDIHsKLQotbmFtZXNwYWNlIEJpbmRpbmdzIHsKLQotY2xhc3MgSmF2YUNs
YXNzIDogcHVibGljIENsYXNzIHsKLXB1YmxpYzoKLSAgICBKYXZhQ2xhc3Moam9iamVjdCk7Ci0g
ICAgfkphdmFDbGFzcygpOwotCi0gICAgdmlydHVhbCBNZXRob2RMaXN0IG1ldGhvZHNOYW1lZChQ
cm9wZXJ0eU5hbWUsIEluc3RhbmNlKikgY29uc3Q7Ci0gICAgdmlydHVhbCBGaWVsZCogZmllbGRO
YW1lZChQcm9wZXJ0eU5hbWUsIEluc3RhbmNlKikgY29uc3Q7Ci0KLSAgICBib29sIGlzTnVtYmVy
Q2xhc3MoKSBjb25zdDsKLSAgICBib29sIGlzQm9vbGVhbkNsYXNzKCkgY29uc3Q7Ci0gICAgYm9v
bCBpc1N0cmluZ0NsYXNzKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgY29uc3QgY2hhciogbV9u
YW1lOwotICAgIEZpZWxkTWFwIG1fZmllbGRzOwotICAgIE1ldGhvZExpc3RNYXAgbV9tZXRob2Rz
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgQmluZGluZ3MKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0K
LSNlbmRpZiAvLyBFTkFCTEUoSkFWQV9CUklER0UpCi0KLSNlbmRpZiAvLyBKYXZhQ2xhc3NKU0Nf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUZpZWxkSlND
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFGaWVsZEpTQy5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4NzE3NTUzMTllZTEwY2Q3ODQ2OTk5NjYzMWFi
NTVmMGM2M2RmODEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUZpZWxkSlNDLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDI0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0
LCAyMDA1LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAyMDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkphdmFGaWVsZEpTQy5oIgotCi0jaWYgRU5BQkxF
KEpBVkFfQlJJREdFKQotCi0jaW5jbHVkZSAiSk5JVXRpbGl0eVByaXZhdGUuaCIKLSNpbmNsdWRl
ICJKYXZhQXJyYXlKU0MuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAicnVudGlt
ZV9hcnJheS5oIgotI2luY2x1ZGUgInJ1bnRpbWVfb2JqZWN0LmgiCi0jaW5jbHVkZSA8cnVudGlt
ZS9FcnJvci5oPgotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotdXNpbmcgbmFtZXNwYWNlIEpTQzo6
QmluZGluZ3M7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotSmF2YUZpZWxkOjpKYXZhRmll
bGQoSk5JRW52KiBlbnYsIGpvYmplY3QgYUZpZWxkKQotewotICAgIC8vIEdldCBmaWVsZCB0eXBl
IG5hbWUKLSAgICBqc3RyaW5nIGZpZWxkVHlwZU5hbWUgPSAwOwotICAgIGpjbGFzcyBmaWVsZFR5
cGUgPSBzdGF0aWNfY2FzdDxqY2xhc3M+KGNhbGxKTklNZXRob2Q8am9iamVjdD4oYUZpZWxkLCAi
Z2V0VHlwZSIsICIoKUxqYXZhL2xhbmcvQ2xhc3M7IikpOwotICAgIGlmIChmaWVsZFR5cGUpCi0g
ICAgICAgIGZpZWxkVHlwZU5hbWUgPSBzdGF0aWNfY2FzdDxqc3RyaW5nPihjYWxsSk5JTWV0aG9k
PGpvYmplY3Q+KGZpZWxkVHlwZSwgImdldE5hbWUiLCAiKClMamF2YS9sYW5nL1N0cmluZzsiKSk7
Ci0gICAgaWYgKCFmaWVsZFR5cGVOYW1lKQotICAgICAgICBmaWVsZFR5cGVOYW1lID0gZW52LT5O
ZXdTdHJpbmdVVEYoIjxVbmtub3duPiIpOwotICAgIG1fdHlwZUNsYXNzTmFtZSA9IEphdmFTdHJp
bmcoZW52LCBmaWVsZFR5cGVOYW1lKTsKLQotICAgIG1fdHlwZSA9IGphdmFUeXBlRnJvbUNsYXNz
TmFtZShtX3R5cGVDbGFzc05hbWUudXRmOCgpKTsKLSAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKGZp
ZWxkVHlwZSk7Ci0gICAgZW52LT5EZWxldGVMb2NhbFJlZihmaWVsZFR5cGVOYW1lKTsKLQotICAg
IC8vIEdldCBmaWVsZCBuYW1lCi0gICAganN0cmluZyBmaWVsZE5hbWUgPSBzdGF0aWNfY2FzdDxq
c3RyaW5nPihjYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGFGaWVsZCwgImdldE5hbWUiLCAiKClMamF2
YS9sYW5nL1N0cmluZzsiKSk7Ci0gICAgaWYgKCFmaWVsZE5hbWUpCi0gICAgICAgIGZpZWxkTmFt
ZSA9IGVudi0+TmV3U3RyaW5nVVRGKCI8VW5rbm93bj4iKTsKLSAgICBtX25hbWUgPSBKYXZhU3Ry
aW5nKGVudiwgZmllbGROYW1lKTsKLSAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKGZpZWxkTmFtZSk7
Ci0KLSAgICBtX2ZpZWxkID0gSm9iamVjdFdyYXBwZXI6OmNyZWF0ZShhRmllbGQpOwotfQotCi1q
dmFsdWUgSmF2YUZpZWxkOjpkaXNwYXRjaFZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSmF2YUluc3RhbmNlKiBpbnN0YW5jZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3Qg
Y2hhciogc2lnLCBKYXZhVHlwZSByZXR1cm5UeXBlKSBjb25zdAotewotICAgIGpvYmplY3Qgamlu
c3RhbmNlID0gaW5zdGFuY2UtPmphdmFJbnN0YW5jZSgpOwotICAgIGpvYmplY3QgZmllbGRKSW5z
dGFuY2UgPSBtX2ZpZWxkLT5pbnN0YW5jZSgpOwotICAgIEpOSUVudiogZW52ID0gZ2V0Sk5JRW52
KCk7Ci0gICAganZhbHVlIHJlc3VsdDsKLQotICAgIG1lbXNldCgmcmVzdWx0LCAwLCBzaXplb2Yo
anZhbHVlKSk7Ci0gICAgamNsYXNzIGNscyA9IGVudi0+R2V0T2JqZWN0Q2xhc3MoZmllbGRKSW5z
dGFuY2UpOwotICAgIGlmIChjbHMpIHsKLSAgICAgICAgam1ldGhvZElEIG1pZCA9IGVudi0+R2V0
TWV0aG9kSUQoY2xzLCBuYW1lLCBzaWcpOwotICAgICAgICBpZiAobWlkKSB7Ci0gICAgICAgICAg
ICBSb290T2JqZWN0KiByb290T2JqZWN0ID0gaW5zdGFuY2UtPnJvb3RPYmplY3QoKTsKLSAgICAg
ICAgICAgIGlmIChyb290T2JqZWN0ICYmIHJvb3RPYmplY3QtPm5hdGl2ZUhhbmRsZSgpKSB7Ci0g
ICAgICAgICAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25EZXNjcmlwdGlvbjsKLSAgICAgICAgICAg
ICAgICBqdmFsdWUgYXJnc1sxXTsKLQotICAgICAgICAgICAgICAgIGFyZ3NbMF0ubCA9IGppbnN0
YW5jZTsKLSAgICAgICAgICAgICAgICBkaXNwYXRjaEpOSUNhbGwoZXhlYywgcm9vdE9iamVjdC0+
bmF0aXZlSGFuZGxlKCksIGZpZWxkSkluc3RhbmNlLCBmYWxzZSwgcmV0dXJuVHlwZSwgbWlkLCBh
cmdzLCByZXN1bHQsIDAsIGV4Y2VwdGlvbkRlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgICAgICBp
ZiAoZXhjZXB0aW9uRGVzY3JpcHRpb24pCi0gICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3Io
ZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgZXhjZXB0aW9uRGVzY3JpcHRpb24udG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotSlNWYWx1ZSBKYXZhRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5zdGFuY2UqIGkpIGNvbnN0Ci17Ci0gICAgY29uc3Qg
SmF2YUluc3RhbmNlKiBpbnN0YW5jZSA9IHN0YXRpY19jYXN0PGNvbnN0IEphdmFJbnN0YW5jZSo+
KGkpOwotCi0gICAgSlNWYWx1ZSBqc3Jlc3VsdCA9IGpzVW5kZWZpbmVkKCk7Ci0KLSAgICBzd2l0
Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgSmF2YVR5cGVBcnJheToKLSAgICBjYXNlIEphdmFUeXBl
T2JqZWN0OgotICAgICAgICB7Ci0gICAgICAgICAgICBqdmFsdWUgcmVzdWx0ID0gZGlzcGF0Y2hW
YWx1ZUZyb21JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgImdldCIsICIoTGphdmEvbGFuZy9PYmpl
Y3Q7KUxqYXZhL2xhbmcvT2JqZWN0OyIsIEphdmFUeXBlT2JqZWN0KTsKLSAgICAgICAgICAgIGpv
YmplY3QgYW5PYmplY3QgPSByZXN1bHQubDsKLQotICAgICAgICAgICAgaWYgKCFhbk9iamVjdCkK
LSAgICAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0KLSAgICAgICAgICAgIGNvbnN0IGNo
YXIqIGFycmF5VHlwZSA9IHR5cGVDbGFzc05hbWUoKTsKLSAgICAgICAgICAgIGlmIChhcnJheVR5
cGVbMF0gPT0gJ1snKQotICAgICAgICAgICAgICAgIGpzcmVzdWx0ID0gSmF2YUFycmF5Ojpjb252
ZXJ0Sk9iamVjdFRvQXJyYXkoZXhlYywgYW5PYmplY3QsIGFycmF5VHlwZSwgaW5zdGFuY2UtPnJv
b3RPYmplY3QoKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChhbk9iamVjdCkKLSAgICAgICAgICAg
ICAgICBqc3Jlc3VsdCA9IEphdmFJbnN0YW5jZTo6Y3JlYXRlKGFuT2JqZWN0LCBpbnN0YW5jZS0+
cm9vdE9iamVjdCgpKS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLQotICAgIGNhc2UgSmF2YVR5cGVCb29sZWFuOgotICAgICAgICBqc3Jlc3Vs
dCA9IGpzQm9vbGVhbihkaXNwYXRjaFZhbHVlRnJvbUluc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCAi
Z2V0Qm9vbGVhbiIsICIoTGphdmEvbGFuZy9PYmplY3Q7KVoiLCBKYXZhVHlwZUJvb2xlYW4pLnop
OwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgSmF2YVR5cGVCeXRlOgotICAgIGNhc2UgSmF2
YVR5cGVDaGFyOgotICAgIGNhc2UgSmF2YVR5cGVTaG9ydDoKLQotICAgIGNhc2UgSmF2YVR5cGVJ
bnQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGppbnQgdmFsdWU7Ci0gICAgICAgICAgICBqdmFs
dWUgcmVzdWx0ID0gZGlzcGF0Y2hWYWx1ZUZyb21JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgImdl
dEludCIsICIoTGphdmEvbGFuZy9PYmplY3Q7KUkiLCBKYXZhVHlwZUludCk7Ci0gICAgICAgICAg
ICB2YWx1ZSA9IHJlc3VsdC5pOwotICAgICAgICAgICAganNyZXN1bHQgPSBqc051bWJlcihzdGF0
aWNfY2FzdDxpbnQ+KHZhbHVlKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBj
YXNlIEphdmFUeXBlTG9uZzoKLSAgICBjYXNlIEphdmFUeXBlRmxvYXQ6Ci0gICAgY2FzZSBKYXZh
VHlwZURvdWJsZToKLSAgICAgICAgewotICAgICAgICAgICAgamRvdWJsZSB2YWx1ZTsKLSAgICAg
ICAgICAgIGp2YWx1ZSByZXN1bHQgPSBkaXNwYXRjaFZhbHVlRnJvbUluc3RhbmNlKGV4ZWMsIGlu
c3RhbmNlLCAiZ2V0RG91YmxlIiwgIihMamF2YS9sYW5nL09iamVjdDspRCIsIEphdmFUeXBlRG91
YmxlKTsKLSAgICAgICAgICAgIHZhbHVlID0gcmVzdWx0Lmk7Ci0gICAgICAgICAgICBqc3Jlc3Vs
dCA9IGpzTnVtYmVyKHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpKTsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBM
T0coTGl2ZUNvbm5lY3QsICJKYXZhRmllbGQ6OnZhbHVlRnJvbUluc3RhbmNlIGdldHRpbmcgJXMg
PSAlcyIsIFN0cmluZyhuYW1lKCkuaW1wbCgpKS51dGY4KCkuZGF0YSgpLCBqc3Jlc3VsdC50b1N0
cmluZyhleGVjKS0+dmFsdWUoZXhlYykuYXNjaWkoKS5kYXRhKCkpOwotCi0gICAgcmV0dXJuIGpz
cmVzdWx0OwotfQotCi12b2lkIEphdmFGaWVsZDo6ZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2Uo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKYXZhSW5zdGFuY2UqIGluc3RhbmNlLCBqdmFsdWUgamF2
YVZhbHVlLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBzaWcpIGNvbnN0Ci17Ci0gICAg
am9iamVjdCBqaW5zdGFuY2UgPSBpbnN0YW5jZS0+amF2YUluc3RhbmNlKCk7Ci0gICAgam9iamVj
dCBmaWVsZEpJbnN0YW5jZSA9IG1fZmllbGQtPmluc3RhbmNlKCk7Ci0gICAgSk5JRW52KiBlbnYg
PSBnZXRKTklFbnYoKTsKLQotICAgIGpjbGFzcyBjbHMgPSBlbnYtPkdldE9iamVjdENsYXNzKGZp
ZWxkSkluc3RhbmNlKTsKLSAgICBpZiAoY2xzKSB7Ci0gICAgICAgIGptZXRob2RJRCBtaWQgPSBl
bnYtPkdldE1ldGhvZElEKGNscywgbmFtZSwgc2lnKTsKLSAgICAgICAgaWYgKG1pZCkgewotICAg
ICAgICAgICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9IGluc3RhbmNlLT5yb290T2JqZWN0KCk7
Ci0gICAgICAgICAgICBpZiAocm9vdE9iamVjdCAmJiByb290T2JqZWN0LT5uYXRpdmVIYW5kbGUo
KSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgZXhjZXB0aW9uRGVzY3JpcHRpb247Ci0gICAg
ICAgICAgICAgICAganZhbHVlIGFyZ3NbMl07Ci0gICAgICAgICAgICAgICAganZhbHVlIHJlc3Vs
dDsKLQotICAgICAgICAgICAgICAgIGFyZ3NbMF0ubCA9IGppbnN0YW5jZTsKLSAgICAgICAgICAg
ICAgICBhcmdzWzFdID0gamF2YVZhbHVlOwotICAgICAgICAgICAgICAgIGRpc3BhdGNoSk5JQ2Fs
bChleGVjLCByb290T2JqZWN0LT5uYXRpdmVIYW5kbGUoKSwgZmllbGRKSW5zdGFuY2UsIGZhbHNl
LCBKYXZhVHlwZVZvaWQsIG1pZCwgYXJncywgcmVzdWx0LCAwLCBleGNlcHRpb25EZXNjcmlwdGlv
bik7Ci0gICAgICAgICAgICAgICAgaWYgKGV4Y2VwdGlvbkRlc2NyaXB0aW9uKQotICAgICAgICAg
ICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIGV4Y2VwdGlvbkRl
c2NyaXB0aW9uLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEphdmFGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNl
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5zdGFuY2UqIGksIEpTVmFsdWUgYVZhbHVlKSBjb25z
dAotewotICAgIGNvbnN0IEphdmFJbnN0YW5jZSogaW5zdGFuY2UgPSBzdGF0aWNfY2FzdDxjb25z
dCBKYXZhSW5zdGFuY2UqPihpKTsKLSAgICBqdmFsdWUgamF2YVZhbHVlID0gY29udmVydFZhbHVl
VG9KVmFsdWUoZXhlYywgaS0+cm9vdE9iamVjdCgpLCBhVmFsdWUsIG1fdHlwZSwgdHlwZUNsYXNz
TmFtZSgpKTsKLQotICAgIExPRyhMaXZlQ29ubmVjdCwgIkphdmFGaWVsZDo6c2V0VmFsdWVUb0lu
c3RhbmNlIHNldHRpbmcgdmFsdWUgJXMgdG8gJXMiLCBTdHJpbmcobmFtZSgpLmltcGwoKSkudXRm
OCgpLmRhdGEoKSwgYVZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKS5hc2NpaSgpLmRh
dGEoKSk7Ci0KLSAgICBzd2l0Y2ggKG1fdHlwZSkgewotICAgIGNhc2UgSmF2YVR5cGVBcnJheToK
LSAgICBjYXNlIEphdmFUeXBlT2JqZWN0OgotICAgICAgICB7Ci0gICAgICAgICAgICBkaXNwYXRj
aFNldFZhbHVlVG9JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0IiwgIihM
amF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL09iamVjdDspViIpOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotCi0gICAgY2FzZSBKYXZhVHlwZUJvb2xlYW46Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIGRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFs
dWUsICJzZXRCb29sZWFuIiwgIihMamF2YS9sYW5nL09iamVjdDtaKVYiKTsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLQotICAgIGNhc2UgSmF2YVR5cGVCeXRlOgotICAgICAgICB7Ci0gICAg
ICAgICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZh
bHVlLCAic2V0Qnl0ZSIsICIoTGphdmEvbGFuZy9PYmplY3Q7QilWIik7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEphdmFUeXBlQ2hhcjoKLSAgICAgICAgewotICAgICAg
ICAgICAgZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2UoZXhlYywgaW5zdGFuY2UsIGphdmFWYWx1
ZSwgInNldENoYXIiLCAiKExqYXZhL2xhbmcvT2JqZWN0O0MpViIpOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotCi0gICAgY2FzZSBKYXZhVHlwZVNob3J0OgotICAgICAgICB7Ci0gICAgICAg
ICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVl
LCAic2V0U2hvcnQiLCAiKExqYXZhL2xhbmcvT2JqZWN0O1MpViIpOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotCi0gICAgY2FzZSBKYXZhVHlwZUludDoKLSAgICAgICAgewotICAgICAgICAg
ICAgZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2UoZXhlYywgaW5zdGFuY2UsIGphdmFWYWx1ZSwg
InNldEludCIsICIoTGphdmEvbGFuZy9PYmplY3Q7SSlWIik7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIEphdmFUeXBlTG9uZzoKLSAgICAgICAgewotICAgICAgICAgICAg
ZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2UoZXhlYywgaW5zdGFuY2UsIGphdmFWYWx1ZSwgInNl
dExvbmciLCAiKExqYXZhL2xhbmcvT2JqZWN0O0opViIpOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgY2FzZSBKYXZhVHlwZUZsb2F0OgotICAgICAgICB7Ci0gICAgICAgICAgICBk
aXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0
RmxvYXQiLCAiKExqYXZhL2xhbmcvT2JqZWN0O0YpViIpOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgY2FzZSBKYXZhVHlwZURvdWJsZToKLSAgICAgICAgewotICAgICAgICAgICAg
ZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2UoZXhlYywgaW5zdGFuY2UsIGphdmFWYWx1ZSwgInNl
dERvdWJsZSIsICIoTGphdmEvbGFuZy9PYmplY3Q7RClWIik7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi0jZW5kaWYg
Ly8gRU5BQkxFKEpBVkFfQlJJREdFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdl
L2puaS9qc2MvSmF2YUZpZWxkSlNDLmggYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9K
YXZhRmllbGRKU0MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWIwYjc1NGIzOTZk
YTM1MTZhNjNkYzliYWNhMjMzNzU0ZmJhZmRlMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhRmll
bGRKU0MuaAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDksIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IDIwMTAsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNl
IFByb2plY3QKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEphdmFGaWVsZEpTQ19oCi0jZGVmaW5lIEphdmFGaWVs
ZEpTQ19oCi0KLSNpZiBFTkFCTEUoSkFWQV9CUklER0UpCi0KLSNpbmNsdWRlICJCcmlkZ2VKU0Mu
aCIKLSNpbmNsdWRlICJKTklVdGlsaXR5LmgiCi0jaW5jbHVkZSAiSmF2YU1ldGhvZEpTQy5oIgot
I2luY2x1ZGUgIkphdmFTdHJpbmdKU0MuaCIKLSNpbmNsdWRlICJKb2JqZWN0V3JhcHBlci5oIgot
Ci1uYW1lc3BhY2UgSlNDIHsKLQotbmFtZXNwYWNlIEJpbmRpbmdzIHsKLQotY2xhc3MgSmF2YUZp
ZWxkIDogcHVibGljIEZpZWxkIHsKLXB1YmxpYzoKLSAgICBKYXZhRmllbGQoSk5JRW52Kiwgam9i
amVjdCBhRmllbGQpOwotCi0gICAgdmlydHVhbCBKU1ZhbHVlIHZhbHVlRnJvbUluc3RhbmNlKEV4
ZWNTdGF0ZSosIGNvbnN0IEluc3RhbmNlKikgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHNldFZh
bHVlVG9JbnN0YW5jZShFeGVjU3RhdGUqLCBjb25zdCBJbnN0YW5jZSosIEpTVmFsdWUpIGNvbnN0
OwotCi0gICAgY29uc3QgSmF2YVN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsg
fQotICAgIHZpcnR1YWwgUnVudGltZVR5cGUgdHlwZUNsYXNzTmFtZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZUNsYXNzTmFtZS51dGY4KCk7IH0KLSAgICBKYXZhVHlwZSB0eXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlOyB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBkaXNwYXRjaFNldFZhbHVlVG9J
bnN0YW5jZShFeGVjU3RhdGUqLCBjb25zdCBKYXZhSW5zdGFuY2UqLCBqdmFsdWUsIGNvbnN0IGNo
YXIqIG5hbWUsIGNvbnN0IGNoYXIqIHNpZykgY29uc3Q7Ci0gICAganZhbHVlIGRpc3BhdGNoVmFs
dWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiwgY29uc3QgSmF2YUluc3RhbmNlKiwgY29uc3QgY2hh
ciogbmFtZSwgY29uc3QgY2hhciogc2lnLCBKYXZhVHlwZSByZXR1cm5UeXBlKSBjb25zdDsKLQot
ICAgIEphdmFTdHJpbmcgbV9uYW1lOwotICAgIEphdmFTdHJpbmcgbV90eXBlQ2xhc3NOYW1lOwot
ICAgIEphdmFUeXBlIG1fdHlwZTsKLSAgICBSZWZQdHI8Sm9iamVjdFdyYXBwZXI+IG1fZmllbGQ7
Ci19OwotCi19IC8vIG5hbWVzcGFjZSBCaW5kaW5ncwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQot
I2VuZGlmIC8vIEVOQUJMRShKQVZBX0JSSURHRSkKLQotI2VuZGlmIC8vIEphdmFGaWVsZEpTQ19o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VK
U0MuY3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJkYmUwZTgzN2M5NWU4M2U2MmY2YWJl
OTk5OTE5ZTVlZjk0OGMxNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMzQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDMsIDIwMDgsIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJKYXZhSW5zdGFuY2VKU0MuaCIKLQotI2lmIEVO
QUJMRShKQVZBX0JSSURHRSkKLQotI2luY2x1ZGUgIkphdmFSdW50aW1lT2JqZWN0LmgiCi0jaW5j
bHVkZSAiSk5JVXRpbGl0eVByaXZhdGUuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNp
bmNsdWRlICJKYXZhQXJyYXlKU0MuaCIKLSNpbmNsdWRlICJKYXZhQ2xhc3NKU0MuaCIKLSNpbmNs
dWRlICJKYXZhTWV0aG9kSlNDLmgiCi0jaW5jbHVkZSAiSmF2YVN0cmluZ0pTQy5oIgotI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJqbmlfanNvYmplY3QuaCIKLSNpbmNsdWRlICJydW50
aW1lX21ldGhvZC5oIgotI2luY2x1ZGUgInJ1bnRpbWVfb2JqZWN0LmgiCi0jaW5jbHVkZSAicnVu
dGltZV9yb290LmgiCi0jaW5jbHVkZSA8cnVudGltZS9BcmdMaXN0Lmg+Ci0jaW5jbHVkZSA8cnVu
dGltZS9FcnJvci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuaD4KLSNp
bmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgotCi11c2luZyBuYW1lc3BhY2UgSlNDOjpCaW5kaW5n
czsKLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotSmF2
YUluc3RhbmNlOjpKYXZhSW5zdGFuY2Uoam9iamVjdCBpbnN0YW5jZSwgUGFzc1JlZlB0cjxSb290
T2JqZWN0PiByb290T2JqZWN0KQotICAgIDogSW5zdGFuY2Uocm9vdE9iamVjdCkKLXsKLSAgICBt
X2luc3RhbmNlID0gSm9iamVjdFdyYXBwZXI6OmNyZWF0ZShpbnN0YW5jZSk7Ci0gICAgbV9jbGFz
cyA9IDA7Ci19Ci0KLUphdmFJbnN0YW5jZTo6fkphdmFJbnN0YW5jZSgpCi17Ci0gICAgZGVsZXRl
IG1fY2xhc3M7Ci19Ci0KLVJ1bnRpbWVPYmplY3QqIEphdmFJbnN0YW5jZTo6bmV3UnVudGltZU9i
amVjdChFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIEphdmFSdW50aW1lT2JqZWN0Ojpj
cmVhdGUoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCB0aGlzKTsKLX0KLQotI2Rl
ZmluZSBOVU1fTE9DQUxfUkVGUyA2NAotCi12b2lkIEphdmFJbnN0YW5jZTo6dmlydHVhbEJlZ2lu
KCkKLXsKLSAgICBnZXRKTklFbnYoKS0+UHVzaExvY2FsRnJhbWUoTlVNX0xPQ0FMX1JFRlMpOwot
fQotCi12b2lkIEphdmFJbnN0YW5jZTo6dmlydHVhbEVuZCgpCi17Ci0gICAgZ2V0Sk5JRW52KCkt
PlBvcExvY2FsRnJhbWUoMCk7Ci19Ci0KLUNsYXNzKiBKYXZhSW5zdGFuY2U6OmdldENsYXNzKCkg
Y29uc3QKLXsKLSAgICBpZiAoIW1fY2xhc3MpCi0gICAgICAgIG1fY2xhc3MgPSBuZXcgSmF2YUNs
YXNzIChtX2luc3RhbmNlLT5pbnN0YW5jZSgpKTsKLSAgICByZXR1cm4gbV9jbGFzczsKLX0KLQot
SlNWYWx1ZSBKYXZhSW5zdGFuY2U6OnN0cmluZ1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QK
LXsKLSAgICBKU0xvY2tIb2xkZXIgbG9jayhleGVjKTsKLQotICAgIGpzdHJpbmcgc3RyaW5nVmFs
dWUgPSAoanN0cmluZyljYWxsSk5JTWV0aG9kPGpvYmplY3Q+KG1faW5zdGFuY2UtPmluc3RhbmNl
KCksICJ0b1N0cmluZyIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpOwotCi0gICAgLy8gU2hvdWxk
IHRocm93IGEgSlMgZXhjZXB0aW9uLCByYXRoZXIgdGhhbiByZXR1cm5pbmcgIiI/IC0gYnV0IGJl
dHRlciB0aGFuIGEgbnVsbCBkZXJlZmVyZW5jZS4KLSAgICBpZiAoIXN0cmluZ1ZhbHVlKQotICAg
ICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgU3RyaW5nKCkpOyAvLyBGSVhNRTogd2h5IG5vdCBq
c0VtcHR5U3RyaW5nKGV4ZWMpPwotCi0gICAgSk5JRW52KiBlbnYgPSBnZXRKTklFbnYoKTsKLSAg
ICBjb25zdCBqY2hhciogYyA9IGdldFVDaGFyYWN0ZXJzRnJvbUpTdHJpbmdJbkVudihlbnYsIHN0
cmluZ1ZhbHVlKTsKLSAgICBTdHJpbmcgdSgoY29uc3QgVUNoYXIqKWMsIChpbnQpZW52LT5HZXRT
dHJpbmdMZW5ndGgoc3RyaW5nVmFsdWUpKTsKLSAgICByZWxlYXNlVUNoYXJhY3RlcnNGb3JKU3Ry
aW5nSW5FbnYoZW52LCBzdHJpbmdWYWx1ZSwgYyk7Ci0gICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMs
IHUpOwotfQotCi1KU1ZhbHVlIEphdmFJbnN0YW5jZTo6bnVtYmVyVmFsdWUoRXhlY1N0YXRlKikg
Y29uc3QKLXsKLSAgICBqZG91YmxlIGRvdWJsZVZhbHVlID0gY2FsbEpOSU1ldGhvZDxqZG91Ymxl
PihtX2luc3RhbmNlLT5pbnN0YW5jZSgpLCAiZG91YmxlVmFsdWUiLCAiKClEIik7Ci0gICAgcmV0
dXJuIGpzTnVtYmVyKGRvdWJsZVZhbHVlKTsKLX0KLQotSlNWYWx1ZSBKYXZhSW5zdGFuY2U6OmJv
b2xlYW5WYWx1ZSgpIGNvbnN0Ci17Ci0gICAgamJvb2xlYW4gYm9vbGVhblZhbHVlID0gY2FsbEpO
SU1ldGhvZDxqYm9vbGVhbj4obV9pbnN0YW5jZS0+aW5zdGFuY2UoKSwgImJvb2xlYW5WYWx1ZSIs
ICIoKVoiKTsKLSAgICByZXR1cm4ganNCb29sZWFuKGJvb2xlYW5WYWx1ZSk7Ci19Ci0KLWNsYXNz
IEphdmFSdW50aW1lTWV0aG9kIDogcHVibGljIFJ1bnRpbWVNZXRob2QgewotcHVibGljOgotICAg
IHR5cGVkZWYgUnVudGltZU1ldGhvZCBCYXNlOwotCi0gICAgc3RhdGljIEphdmFSdW50aW1lTWV0
aG9kKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBjb25zdCBTdHJpbmcmIG5hbWUsIEJpbmRpbmdzOjpNZXRob2RMaXN0JiBsaXN0KQotICAgIHsK
LSAgICAgICAgLy8gRklYTUU6IGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUgdXNlcyB0aGUgcHJv
dG90eXBlIG9mZiBvZiB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdAotICAgICAgICAvLyBXZSBuZWVk
IHRvIHBhc3MgaW4gdGhlIHJpZ2h0IGdsb2JhbCBvYmplY3QgZm9yICJpIi4KLSAgICAgICAgU3Ry
dWN0dXJlKiBkb21TdHJ1Y3R1cmUgPSBXZWJDb3JlOjpkZXByZWNhdGVkR2V0RE9NU3RydWN0dXJl
PEphdmFSdW50aW1lTWV0aG9kPihleGVjKTsKLSAgICAgICAgSmF2YVJ1bnRpbWVNZXRob2QqIG1l
dGhvZCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEphdmFSdW50aW1lTWV0aG9kPigqZXhl
Yy0+aGVhcCgpKSkgSmF2YVJ1bnRpbWVNZXRob2QoZ2xvYmFsT2JqZWN0LCBkb21TdHJ1Y3R1cmUs
IGxpc3QpOwotICAgICAgICBtZXRob2QtPmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERhdGEo
KSwgbmFtZSk7Ci0gICAgICAgIHJldHVybiBtZXRob2Q7Ci0gICAgfQotCi0gICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCi0gICAgewotICAgICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7Ci0g
ICAgfQotCi0gICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Ci0KLXByaXZhdGU6Ci0g
ICAgSmF2YVJ1bnRpbWVNZXRob2QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEJpbmRpbmdzOjpNZXRob2RMaXN0JiBsaXN0KQotICAgICAgICA6IFJ1
bnRpbWVNZXRob2QoZ2xvYmFsT2JqZWN0LCBzdHJ1Y3R1cmUsIGxpc3QpCi0gICAgewotICAgIH0K
LQotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25z
dCBTdHJpbmcmIG5hbWUpCi0gICAgewotICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9i
YWxEYXRhLCBuYW1lKTsKLSAgICAgICAgQVNTRVJUKGluaGVyaXRzKCZzX2luZm8pKTsKLSAgICB9
Ci19OwotCi1jb25zdCBDbGFzc0luZm8gSmF2YVJ1bnRpbWVNZXRob2Q6OnNfaW5mbyA9IHsgIkph
dmFSdW50aW1lTWV0aG9kIiwgJlJ1bnRpbWVNZXRob2Q6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01F
VEhPRF9UQUJMRShKYXZhUnVudGltZU1ldGhvZCkgfTsKLQotSlNWYWx1ZSBKYXZhSW5zdGFuY2U6
OmdldE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17
Ci0gICAgTWV0aG9kTGlzdCBtZXRob2RMaXN0ID0gZ2V0Q2xhc3MoKS0+bWV0aG9kc05hbWVkKHBy
b3BlcnR5TmFtZSwgdGhpcyk7Ci0gICAgcmV0dXJuIEphdmFSdW50aW1lTWV0aG9kOjpjcmVhdGUo
ZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBwcm9wZXJ0eU5hbWUucHVibGljTmFt
ZSgpLCBtZXRob2RMaXN0KTsKLX0KLQotSlNWYWx1ZSBKYXZhSW5zdGFuY2U6Omludm9rZU1ldGhv
ZChFeGVjU3RhdGUqIGV4ZWMsIFJ1bnRpbWVNZXRob2QqIHJ1bnRpbWVNZXRob2QpCi17Ci0gICAg
aWYgKCFhc09iamVjdChydW50aW1lTWV0aG9kKS0+aW5oZXJpdHMoJkphdmFSdW50aW1lTWV0aG9k
OjpzX2luZm8pKQotICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBjcmVhdGVUeXBlRXJy
b3IoZXhlYywgIkF0dGVtcHQgdG8gaW52b2tlIG5vbi1KYXZhIG1ldGhvZCBvbiBKYXZhIG9iamVj
dC4iKSk7Ci0KLSAgICBjb25zdCBNZXRob2RMaXN0JiBtZXRob2RMaXN0ID0gKnJ1bnRpbWVNZXRo
b2QtPm1ldGhvZHMoKTsKLQotICAgIGludCBpOwotICAgIGludCBjb3VudCA9IGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdFZhbHVlOwotICAgIE1ldGhvZCogbWV0aG9k
ID0gMDsKLSAgICBzaXplX3QgbnVtTWV0aG9kcyA9IG1ldGhvZExpc3Quc2l6ZSgpOwotCi0gICAg
Ly8gVHJ5IHRvIGZpbmQgYSBnb29kIG1hdGNoIGZvciB0aGUgb3ZlcmxvYWRlZCBtZXRob2QuICBU
aGUKLSAgICAvLyBmdW5kYW1lbnRhbCBwcm9ibGVtIGlzIHRoYXQgSmF2YVNjcmlwdCBkb2Vzbid0
IGhhdmUgdGhlCi0gICAgLy8gbm90aW9uIG9mIG1ldGhvZCBvdmVybG9hZGluZyBhbmQgSmF2YSBk
b2VzLiAgV2UgY291bGQKLSAgICAvLyBnZXQgYSBiaXQgbW9yZSBzb3BoaXN0aWNhdGVkIGFuZCBh
dHRlbXB0IHRvIGRvZXMgc29tZQotICAgIC8vIHR5cGUgY2hlY2tpbmcgYXMgd2UgYXMgY2hlY2tp
bmcgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzLgotICAgIGZvciAoc2l6ZV90IG1ldGhvZEluZGV4
ID0gMDsgbWV0aG9kSW5kZXggPCBudW1NZXRob2RzOyBtZXRob2RJbmRleCsrKSB7Ci0gICAgICAg
IE1ldGhvZCogYU1ldGhvZCA9IG1ldGhvZExpc3RbbWV0aG9kSW5kZXhdOwotICAgICAgICBpZiAo
YU1ldGhvZC0+bnVtUGFyYW1ldGVycygpID09IGNvdW50KSB7Ci0gICAgICAgICAgICBtZXRob2Qg
PSBhTWV0aG9kOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYg
KCFtZXRob2QpIHsKLSAgICAgICAgTE9HKExpdmVDb25uZWN0LCAiSmF2YUluc3RhbmNlOjppbnZv
a2VNZXRob2QgdW5hYmxlIHRvIGZpbmQgYW4gYXBwcm9waWF0ZSBtZXRob2QiKTsKLSAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotCi0gICAgY29uc3QgSmF2YU1ldGhvZCogak1l
dGhvZCA9IHN0YXRpY19jYXN0PGNvbnN0IEphdmFNZXRob2QqPihtZXRob2QpOwotICAgIExPRyhM
aXZlQ29ubmVjdCwgIkphdmFJbnN0YW5jZTo6aW52b2tlTWV0aG9kIGNhbGwgJXMgJXMgb24gJXAi
LCBTdHJpbmcoak1ldGhvZC0+bmFtZSgpLmltcGwoKSkudXRmOCgpLmRhdGEoKSwgak1ldGhvZC0+
c2lnbmF0dXJlKCksIG1faW5zdGFuY2UtPmluc3RhbmNlKCkpOwotCi0gICAgVmVjdG9yPGp2YWx1
ZT4gakFyZ3MoY291bnQpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAg
ICAgICAgQ1N0cmluZyBqYXZhQ2xhc3NOYW1lID0gak1ldGhvZC0+cGFyYW1ldGVyQXQoaSkudXRm
OCgpOwotICAgICAgICBqQXJnc1tpXSA9IGNvbnZlcnRWYWx1ZVRvSlZhbHVlKGV4ZWMsIG1fcm9v
dE9iamVjdC5nZXQoKSwgZXhlYy0+YXJndW1lbnQoaSksIGphdmFUeXBlRnJvbUNsYXNzTmFtZShq
YXZhQ2xhc3NOYW1lLmRhdGEoKSksIGphdmFDbGFzc05hbWUuZGF0YSgpKTsKLSAgICAgICAgTE9H
KExpdmVDb25uZWN0LCAiSmF2YUluc3RhbmNlOjppbnZva2VNZXRob2QgYXJnWyVkXSA9ICVzIiwg
aSwgZXhlYy0+YXJndW1lbnQoaSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpLmFzY2lpKCku
ZGF0YSgpKTsKLSAgICB9Ci0KLSAgICBqdmFsdWUgcmVzdWx0OwotCi0gICAgLy8gVHJ5IHRvIHVz
ZSB0aGUgSk5JIGFic3RyYWN0aW9uIGZpcnN0LCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvCi0gICAg
Ly8gbm9ybWFsIEpOSS4gIFRoZSBKTkkgZGlzcGF0Y2ggYWJzdHJhY3Rpb24gYWxsb3dzIHRoZSBK
YXZhIHBsdWdpbgotICAgIC8vIHRvIGRpc3BhdGNoIHRoZSBjYWxsIG9uIHRoZSBhcHByb3ByaWF0
ZSBpbnRlcm5hbCBWTSB0aHJlYWQuCi0gICAgUm9vdE9iamVjdCogcm9vdE9iamVjdCA9IHRoaXMt
PnJvb3RPYmplY3QoKTsKLSAgICBpZiAoIXJvb3RPYmplY3QpCi0gICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotCi0gICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7Ci0gICAgaWYgKHJvb3RPYmpl
Y3QtPm5hdGl2ZUhhbmRsZSgpKSB7Ci0gICAgICAgIGpvYmplY3Qgb2JqID0gbV9pbnN0YW5jZS0+
aW5zdGFuY2UoKTsKLSAgICAgICAgSlNWYWx1ZSBleGNlcHRpb25EZXNjcmlwdGlvbjsKLSAgICAg
ICAgY29uc3QgY2hhciAqY2FsbGluZ1VSTCA9IDA7IC8vIEZJWE1FLCBuZWVkIHRvIHByb3BhZ2F0
ZSBjYWxsaW5nIFVSTCB0byBKYXZhCi0gICAgICAgIGptZXRob2RJRCBtZXRob2RJZCA9IGdldE1l
dGhvZElEKG9iaiwgak1ldGhvZC0+bmFtZSgpLnV0ZjgoKS5kYXRhKCksIGpNZXRob2QtPnNpZ25h
dHVyZSgpKTsKLSAgICAgICAgaGFuZGxlZCA9IGRpc3BhdGNoSk5JQ2FsbChleGVjLCByb290T2Jq
ZWN0LT5uYXRpdmVIYW5kbGUoKSwgb2JqLCBqTWV0aG9kLT5pc1N0YXRpYygpLCBqTWV0aG9kLT5y
ZXR1cm5UeXBlKCksIG1ldGhvZElkLCBqQXJncy5kYXRhKCksIHJlc3VsdCwgY2FsbGluZ1VSTCwg
ZXhjZXB0aW9uRGVzY3JpcHRpb24pOwotICAgICAgICBpZiAoZXhjZXB0aW9uRGVzY3JpcHRpb24p
IHsKLSAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgZXhjZXB0
aW9uRGVzY3JpcHRpb24udG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSk7Ci0gICAgICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN3aXRjaCAo
ak1ldGhvZC0+cmV0dXJuVHlwZSgpKSB7Ci0gICAgY2FzZSBKYXZhVHlwZVZvaWQ6Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIHJlc3VsdFZhbHVlID0ganNVbmRlZmluZWQoKTsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLQotICAgIGNhc2UgSmF2YVR5cGVPYmplY3Q6Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChyZXN1bHQubCkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBKYXZh
VHlwZUFycmF5IHJldHVybiB0eXBlIGlzIGhhbmRsZWQgYmVsb3csIGNhbiB3ZSBhY3R1YWxseSBn
ZXQgYW4gYXJyYXkgaGVyZT8KLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBhcnJheVR5cGUg
PSBqTWV0aG9kLT5yZXR1cm5UeXBlQ2xhc3NOYW1lKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGFy
cmF5VHlwZVswXSA9PSAnWycpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdFZhbHVlID0gSmF2
YUFycmF5Ojpjb252ZXJ0Sk9iamVjdFRvQXJyYXkoZXhlYywgcmVzdWx0LmwsIGFycmF5VHlwZSwg
cm9vdE9iamVjdCk7Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IGpvYmplY3QgY2xhc3NPZkluc3RhbmNlID0gY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihyZXN1bHQu
bCwgImdldENsYXNzIiwgIigpTGphdmEvbGFuZy9DbGFzczsiKTsKLSAgICAgICAgICAgICAgICAg
ICAganN0cmluZyBjbGFzc05hbWUgPSBzdGF0aWNfY2FzdDxqc3RyaW5nPihjYWxsSk5JTWV0aG9k
PGpvYmplY3Q+KGNsYXNzT2ZJbnN0YW5jZSwgImdldE5hbWUiLCAiKClMamF2YS9sYW5nL1N0cmlu
ZzsiKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghc3RyY21wKEphdmFTdHJpbmcoY2xhc3NO
YW1lKS51dGY4KCksICJzdW4ucGx1Z2luLmphdmFzY3JpcHQud2Via2l0LkpTT2JqZWN0IikpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFB1bGwgdGhlIG5hdGl2ZUpTT2JqZWN0IHZhbHVl
IGZyb20gdGhlIEphdmEgaW5zdGFuY2UuICBUaGlzIGlzIGEgcG9pbnRlciB0byB0aGUgSlNPYmpl
Y3QuCi0gICAgICAgICAgICAgICAgICAgICAgICBKTklFbnYqIGVudiA9IGdldEpOSUVudigpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgamZpZWxkSUQgZmllbGRJRCA9IGVudi0+R2V0RmllbGRJ
RChzdGF0aWNfY2FzdDxqY2xhc3M+KGNsYXNzT2ZJbnN0YW5jZSksICJuYXRpdmVKU09iamVjdCIs
ICJKIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqbG9uZyBuYXRpdmVIYW5kbGUgPSBlbnYt
PkdldExvbmdGaWVsZChyZXN1bHQubCwgZmllbGRJRCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogSGFuZGxpbmcgb2YgdW5kZWZpbmVkIHZhbHVlcyBkaWZmZXJzIGJldHdlZW4g
ZnVuY3Rpb25zIGluIEpOSVV0aWxpdHlQcml2YXRlLmNwcCBhbmQgdGhvc2UgaW4gdGhvc2UgaW4g
am5pX2pzb2JqZWN0Lm1tLAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIHNvIGl0IGRv
ZXMgYmV0d2VlbiBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgTGl2ZUNvbm5lY3Qgc3BlYy4gVGhlcmUg
c2hvdWxkIG5vdCBiZSBtdWx0aXBsZSBjb2RlIHBhdGhzIHRvIGRvIHRoZSBzYW1lIHdvcmsuCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobmF0aXZlSGFuZGxlID09IDEgLyogVW5kZWZpbmVk
SGFuZGxlICovKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpsb25nX3RvX2ltcHB0cihuYXRp
dmVIYW5kbGUpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBKYXZhSW5zdGFuY2U6OmNyZWF0ZShyZXN1bHQubCwgcm9vdE9iamVjdCkt
PmNyZWF0ZVJ1bnRpbWVPYmplY3QoZXhlYyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEphdmFUeXBlQm9vbGVhbjoKLSAgICAgICAg
ewotICAgICAgICAgICAgcmVzdWx0VmFsdWUgPSBqc0Jvb2xlYW4ocmVzdWx0LnopOwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBKYXZhVHlwZUJ5dGU6Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIHJlc3VsdFZhbHVlID0ganNOdW1iZXIocmVzdWx0LmIpOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBKYXZhVHlwZUNoYXI6Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJlc3VsdFZhbHVlID0ganNOdW1iZXIocmVzdWx0LmMpOwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBKYXZhVHlwZVNob3J0OgotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXN1bHRWYWx1ZSA9IGpzTnVtYmVyKHJlc3VsdC5zKTsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLQotICAgIGNhc2UgSmF2YVR5cGVJbnQ6Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJlc3VsdFZhbHVlID0ganNOdW1iZXIocmVzdWx0LmkpOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotCi0gICAgY2FzZSBKYXZhVHlwZUxvbmc6Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IHJlc3VsdFZhbHVlID0ganNOdW1iZXIocmVzdWx0LmopOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotCi0gICAgY2FzZSBKYXZhVHlwZUZsb2F0OgotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXN1bHRWYWx1ZSA9IGpzTnVtYmVyKHJlc3VsdC5mKTsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLQotICAgIGNhc2UgSmF2YVR5cGVEb3VibGU6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
c3VsdFZhbHVlID0ganNOdW1iZXIocmVzdWx0LmQpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotCi0gICAgY2FzZSBKYXZhVHlwZUFycmF5OgotICAgICAgICB7Ci0gICAgICAgICAgICBjb25z
dCBjaGFyKiBhcnJheVR5cGUgPSBqTWV0aG9kLT5yZXR1cm5UeXBlQ2xhc3NOYW1lKCk7Ci0gICAg
ICAgICAgICBBU1NFUlQoYXJyYXlUeXBlWzBdID09ICdbJyk7Ci0gICAgICAgICAgICByZXN1bHRW
YWx1ZSA9IEphdmFBcnJheTo6Y29udmVydEpPYmplY3RUb0FycmF5KGV4ZWMsIHJlc3VsdC5sLCBh
cnJheVR5cGUsIHJvb3RPYmplY3QpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAg
Y2FzZSBKYXZhVHlwZUludmFsaWQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJlc3VsdFZhbHVl
ID0ganNVbmRlZmluZWQoKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gcmVzdWx0VmFsdWU7Ci19Ci0KLUpTVmFsdWUgSmF2YUluc3RhbmNlOjpkZWZhdWx0
VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIGhpbnQpIGNvbnN0
Ci17Ci0gICAgaWYgKGhpbnQgPT0gUHJlZmVyU3RyaW5nKQotICAgICAgICByZXR1cm4gc3RyaW5n
VmFsdWUoZXhlYyk7Ci0gICAgaWYgKGhpbnQgPT0gUHJlZmVyTnVtYmVyKQotICAgICAgICByZXR1
cm4gbnVtYmVyVmFsdWUoZXhlYyk7Ci0gICAgSmF2YUNsYXNzKiBhQ2xhc3MgPSBzdGF0aWNfY2Fz
dDxKYXZhQ2xhc3MqPihnZXRDbGFzcygpKTsKLSAgICBpZiAoYUNsYXNzLT5pc1N0cmluZ0NsYXNz
KCkpCi0gICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZShleGVjKTsKLSAgICBpZiAoYUNsYXNzLT5p
c051bWJlckNsYXNzKCkpCi0gICAgICAgIHJldHVybiBudW1iZXJWYWx1ZShleGVjKTsKLSAgICBp
ZiAoYUNsYXNzLT5pc0Jvb2xlYW5DbGFzcygpKQotICAgICAgICByZXR1cm4gYm9vbGVhblZhbHVl
KCk7Ci0gICAgcmV0dXJuIHZhbHVlT2YoZXhlYyk7Ci19Ci0KLUpTVmFsdWUgSmF2YUluc3RhbmNl
Ojp2YWx1ZU9mKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKLXsKLSAgICByZXR1cm4gc3RyaW5nVmFs
dWUoZXhlYyk7Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSkFWQV9CUklER0UpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuaCBiL1NvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBmOGQ2YzhlODU0NWM0Nzk5OGRhYzI3OTA4ZjEyMzc1YTUxYzliYjFi
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5oCisrKyAvZGV2L251bGwKQEAg
LTEsODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEphdmFJbnN0YW5jZUpT
Q19oCi0jZGVmaW5lIEphdmFJbnN0YW5jZUpTQ19oCi0KLSNpZiBFTkFCTEUoSkFWQV9CUklER0Up
Ci0KLSNpbmNsdWRlICJCcmlkZ2VKU0MuaCIKLSNpbmNsdWRlICJKTklVdGlsaXR5LmgiCi0jaW5j
bHVkZSAiSm9iamVjdFdyYXBwZXIuaCIKLSNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKLQotbmFt
ZXNwYWNlIEpTQyB7Ci0KLW5hbWVzcGFjZSBCaW5kaW5ncyB7Ci0KLWNsYXNzIEphdmFDbGFzczsK
LQotY2xhc3MgSmF2YUluc3RhbmNlIDogcHVibGljIEluc3RhbmNlIHsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxKYXZhSW5zdGFuY2U+IGNyZWF0ZShqb2JqZWN0IGluc3RhbmNlLCBQ
YXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3RPYmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEphdmFJbnN0YW5jZShpbnN0YW5jZSwgcm9vdE9iamVjdCkpOwotICAgIH0K
LQotICAgIH5KYXZhSW5zdGFuY2UoKTsKLQotICAgIHZpcnR1YWwgQ2xhc3MqIGdldENsYXNzKCkg
Y29uc3Q7Ci0KLSAgICB2aXJ0dWFsIEpTVmFsdWUgdmFsdWVPZihFeGVjU3RhdGUqKSBjb25zdDsK
LSAgICB2aXJ0dWFsIEpTVmFsdWUgZGVmYXVsdFZhbHVlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFBy
aW1pdGl2ZVR5cGUpIGNvbnN0OwotCi0gICAgdmlydHVhbCBKU1ZhbHVlIGdldE1ldGhvZChFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUpOwotICAgIHZpcnR1YWwgSlNWYWx1ZSBpbnZva2VNZXRob2Qo
RXhlY1N0YXRlKiwgUnVudGltZU1ldGhvZCopOwotCi0gICAgam9iamVjdCBqYXZhSW5zdGFuY2Uo
KSBjb25zdCB7IHJldHVybiBtX2luc3RhbmNlLT5pbnN0YW5jZSgpOyB9Ci0KLSAgICBKU1ZhbHVl
IHN0cmluZ1ZhbHVlKEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgIEpTVmFsdWUgbnVtYmVyVmFsdWUo
RXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgSlNWYWx1ZSBib29sZWFuVmFsdWUoKSBjb25zdDsKLQot
cHJvdGVjdGVkOgotICAgIEphdmFJbnN0YW5jZShqb2JqZWN0IGluc3RhbmNlLCBQYXNzUmVmUHRy
PFJvb3RPYmplY3Q+KTsKLQotICAgIHZpcnR1YWwgUnVudGltZU9iamVjdCogbmV3UnVudGltZU9i
amVjdChFeGVjU3RhdGUqKTsKLQotICAgIHZpcnR1YWwgdm9pZCB2aXJ0dWFsQmVnaW4oKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgdmlydHVhbEVuZCgpOwotCi0gICAgUmVmUHRyPEpvYmplY3RXcmFwcGVy
PiBtX2luc3RhbmNlOwotICAgIG11dGFibGUgSmF2YUNsYXNzKiBtX2NsYXNzOwotfTsKLQotfSAv
LyBuYW1lc3BhY2UgQmluZGluZ3MKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBF
TkFCTEUoSkFWQV9CUklER0UpCi0KLSNlbmRpZiAvLyBKYXZhSW5zdGFuY2VKU0NfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YU1ldGhvZEpTQy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhTWV0aG9kSlNDLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMTlkNWNhNjE3ZDY1MGY5MTNiOGY3YjU5MGRjMzEzNzc3YTcx
MGFhNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhTWV0aG9kSlNDLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDE1MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1
LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAyMDEwLCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkphdmFNZXRob2RKU0MuaCIKLQotI2lmIEVOQUJMRShKQVZB
X0JSSURHRSkKLQotI2luY2x1ZGUgPHJ1bnRpbWUvSlNPYmplY3QuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M7Ci11c2luZyBuYW1l
c3BhY2UgSlNDOjpCaW5kaW5nczsKLQotSmF2YU1ldGhvZDo6SmF2YU1ldGhvZChKTklFbnYqIGVu
diwgam9iamVjdCBhTWV0aG9kKQotewotICAgIC8vIEdldCByZXR1cm4gdHlwZSBuYW1lCi0gICAg
anN0cmluZyByZXR1cm5UeXBlTmFtZSA9IDA7Ci0gICAgaWYgKGpvYmplY3QgcmV0dXJuVHlwZSA9
IGNhbGxKTklNZXRob2Q8am9iamVjdD4oYU1ldGhvZCwgImdldFJldHVyblR5cGUiLCAiKClMamF2
YS9sYW5nL0NsYXNzOyIpKSB7Ci0gICAgICAgIHJldHVyblR5cGVOYW1lID0gc3RhdGljX2Nhc3Q8
anN0cmluZz4oY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihyZXR1cm5UeXBlLCAiZ2V0TmFtZSIsICIo
KUxqYXZhL2xhbmcvU3RyaW5nOyIpKTsKLSAgICAgICAgaWYgKCFyZXR1cm5UeXBlTmFtZSkKLSAg
ICAgICAgICAgIHJldHVyblR5cGVOYW1lID0gZW52LT5OZXdTdHJpbmdVVEYoIjxVbmtub3duPiIp
OwotICAgICAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKHJldHVyblR5cGUpOwotICAgIH0KLSAgICBt
X3JldHVyblR5cGVDbGFzc05hbWUgPSBKYXZhU3RyaW5nKGVudiwgcmV0dXJuVHlwZU5hbWUpOwot
ICAgIG1fcmV0dXJuVHlwZSA9IGphdmFUeXBlRnJvbUNsYXNzTmFtZShtX3JldHVyblR5cGVDbGFz
c05hbWUudXRmOCgpKTsKLSAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKHJldHVyblR5cGVOYW1lKTsK
LQotICAgIC8vIEdldCBtZXRob2QgbmFtZQotICAgIGpzdHJpbmcgbWV0aG9kTmFtZSA9IHN0YXRp
Y19jYXN0PGpzdHJpbmc+KGNhbGxKTklNZXRob2Q8am9iamVjdD4oYU1ldGhvZCwgImdldE5hbWUi
LCAiKClMamF2YS9sYW5nL1N0cmluZzsiKSk7Ci0gICAgaWYgKCFtZXRob2ROYW1lKQotICAgICAg
ICBtZXRob2ROYW1lID0gZW52LT5OZXdTdHJpbmdVVEYoIjxVbmtub3duPiIpOwotICAgIG1fbmFt
ZSA9IEphdmFTdHJpbmcoZW52LCBtZXRob2ROYW1lKTsKLSAgICBlbnYtPkRlbGV0ZUxvY2FsUmVm
KG1ldGhvZE5hbWUpOwotCi0gICAgLy8gR2V0IHBhcmFtZXRlcnMKLSAgICBpZiAoamFycmF5IGpw
YXJhbWV0ZXJzID0gc3RhdGljX2Nhc3Q8amFycmF5PihjYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGFN
ZXRob2QsICJnZXRQYXJhbWV0ZXJUeXBlcyIsICIoKVtMamF2YS9sYW5nL0NsYXNzOyIpKSkgewot
ICAgICAgICB1bnNpZ25lZCBpbnQgbnVtUGFyYW1zID0gZW52LT5HZXRBcnJheUxlbmd0aChqcGFy
YW1ldGVycyk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1QYXJh
bXM7IGkrKykgewotICAgICAgICAgICAgam9iamVjdCBhUGFyYW1ldGVyID0gZW52LT5HZXRPYmpl
Y3RBcnJheUVsZW1lbnQoc3RhdGljX2Nhc3Q8am9iamVjdEFycmF5PihqcGFyYW1ldGVycyksIGkp
OwotICAgICAgICAgICAganN0cmluZyBwYXJhbWV0ZXJOYW1lID0gc3RhdGljX2Nhc3Q8anN0cmlu
Zz4oY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihhUGFyYW1ldGVyLCAiZ2V0TmFtZSIsICIoKUxqYXZh
L2xhbmcvU3RyaW5nOyIpKTsKLSAgICAgICAgICAgIGlmICghcGFyYW1ldGVyTmFtZSkKLSAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJOYW1lID0gZW52LT5OZXdTdHJpbmdVVEYoIjxVbmtub3duPiIp
OwotICAgICAgICAgICAgbV9wYXJhbWV0ZXJzLmFwcGVuZChKYXZhU3RyaW5nKGVudiwgcGFyYW1l
dGVyTmFtZSkuaW1wbCgpKTsKLSAgICAgICAgICAgIGVudi0+RGVsZXRlTG9jYWxSZWYoYVBhcmFt
ZXRlcik7Ci0gICAgICAgICAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKHBhcmFtZXRlck5hbWUpOwot
ICAgICAgICB9Ci0gICAgICAgIGVudi0+RGVsZXRlTG9jYWxSZWYoanBhcmFtZXRlcnMpOwotICAg
IH0KLQotICAgIC8vIENyZWF0ZWQgbGF6aWx5LgotICAgIG1fc2lnbmF0dXJlID0gMDsKLQotICAg
IGpjbGFzcyBtb2RpZmllckNsYXNzID0gZW52LT5GaW5kQ2xhc3MoImphdmEvbGFuZy9yZWZsZWN0
L01vZGlmaWVyIik7Ci0gICAgaW50IG1vZGlmaWVycyA9IGNhbGxKTklNZXRob2Q8amludD4oYU1l
dGhvZCwgImdldE1vZGlmaWVycyIsICIoKUkiKTsKLSAgICBtX2lzU3RhdGljID0gc3RhdGljX2Nh
c3Q8Ym9vbD4oY2FsbEpOSVN0YXRpY01ldGhvZDxqYm9vbGVhbj4obW9kaWZpZXJDbGFzcywgImlz
U3RhdGljIiwgIihJKVoiLCBtb2RpZmllcnMpKTsKLSAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKG1v
ZGlmaWVyQ2xhc3MpOwotfQotCi1KYXZhTWV0aG9kOjp+SmF2YU1ldGhvZCgpCi17Ci0gICAgaWYg
KG1fc2lnbmF0dXJlKQotICAgICAgICBmYXN0RnJlZShtX3NpZ25hdHVyZSk7Ci19Ci0KLS8vIEpO
SSBtZXRob2Qgc2lnbmF0dXJlcyB1c2UgJy8nIGJldHdlZW4gY29tcG9uZW50cyBvZiBhIGNsYXNz
IG5hbWUsIGJ1dAotLy8gd2UgZ2V0ICcuJyBiZXR3ZWVuIGNvbXBvbmVudHMgZnJvbSB0aGUgcmVm
bGVjdGlvbiBBUEkuCi1zdGF0aWMgdm9pZCBhcHBlbmRDbGFzc05hbWUoU3RyaW5nQnVpbGRlciYg
YnVpbGRlciwgY29uc3QgY2hhciogY2xhc3NOYW1lKQotewotICAgIEFTU0VSVChKU0M6OkpTR2xv
YmFsRGF0YTo6c2hhcmVkSW5zdGFuY2UoKS5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGlu
Z0xvY2soKSk7Ci0KLSAgICBjaGFyKiBjID0gZmFzdFN0ckR1cChjbGFzc05hbWUpOwotCi0gICAg
Y2hhciogcmVzdWx0ID0gYzsKLSAgICB3aGlsZSAoKmMpIHsKLSAgICAgICAgaWYgKCpjID09ICcu
JykKLSAgICAgICAgICAgICpjID0gJy8nOwotICAgICAgICBjKys7Ci0gICAgfQotCi0gICAgYnVp
bGRlci5hcHBlbmQocmVzdWx0KTsKLQotICAgIGZhc3RGcmVlKHJlc3VsdCk7Ci19Ci0KLWNvbnN0
IGNoYXIqIEphdmFNZXRob2Q6OnNpZ25hdHVyZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3NpZ25h
dHVyZSkgewotICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGFjcXVpcmUgYSBKU0xvY2sgaGVy
ZT8KLQotICAgICAgICBTdHJpbmdCdWlsZGVyIHNpZ25hdHVyZUJ1aWxkZXI7Ci0gICAgICAgIHNp
Z25hdHVyZUJ1aWxkZXIuYXBwZW5kKCcoJyk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgbV9wYXJhbWV0ZXJzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgICAgICBDU3RyaW5n
IGphdmFDbGFzc05hbWUgPSBwYXJhbWV0ZXJBdChpKS51dGY4KCk7Ci0gICAgICAgICAgICBKYXZh
VHlwZSB0eXBlID0gamF2YVR5cGVGcm9tQ2xhc3NOYW1lKGphdmFDbGFzc05hbWUuZGF0YSgpKTsK
LSAgICAgICAgICAgIGlmICh0eXBlID09IEphdmFUeXBlQXJyYXkpCi0gICAgICAgICAgICAgICAg
YXBwZW5kQ2xhc3NOYW1lKHNpZ25hdHVyZUJ1aWxkZXIsIGphdmFDbGFzc05hbWUuZGF0YSgpKTsK
LSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHNpZ25hdHVyZUJ1aWxkZXIuYXBw
ZW5kKHNpZ25hdHVyZUZyb21KYXZhVHlwZSh0eXBlKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHR5
cGUgPT0gSmF2YVR5cGVPYmplY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kQ2xhc3NO
YW1lKHNpZ25hdHVyZUJ1aWxkZXIsIGphdmFDbGFzc05hbWUuZGF0YSgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgc2lnbmF0dXJlQnVpbGRlci5hcHBlbmQoJzsnKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgc2lnbmF0dXJlQnVpbGRlci5hcHBl
bmQoJyknKTsKLQotICAgICAgICBjb25zdCBjaGFyKiByZXR1cm5UeXBlID0gbV9yZXR1cm5UeXBl
Q2xhc3NOYW1lLnV0ZjgoKTsKLSAgICAgICAgaWYgKG1fcmV0dXJuVHlwZSA9PSBKYXZhVHlwZUFy
cmF5KQotICAgICAgICAgICAgYXBwZW5kQ2xhc3NOYW1lKHNpZ25hdHVyZUJ1aWxkZXIsIHJldHVy
blR5cGUpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHNpZ25hdHVyZUJ1aWxkZXIuYXBw
ZW5kKHNpZ25hdHVyZUZyb21KYXZhVHlwZShtX3JldHVyblR5cGUpKTsKLSAgICAgICAgICAgIGlm
IChtX3JldHVyblR5cGUgPT0gSmF2YVR5cGVPYmplY3QpIHsKLSAgICAgICAgICAgICAgICBhcHBl
bmRDbGFzc05hbWUoc2lnbmF0dXJlQnVpbGRlciwgcmV0dXJuVHlwZSk7Ci0gICAgICAgICAgICAg
ICAgc2lnbmF0dXJlQnVpbGRlci5hcHBlbmQoJzsnKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIFN0cmluZyBzaWduYXR1cmVTdHJpbmcgPSBzaWduYXR1cmVCdWlsZGVyLnRv
U3RyaW5nKCk7Ci0gICAgICAgIG1fc2lnbmF0dXJlID0gZmFzdFN0ckR1cChzaWduYXR1cmVTdHJp
bmcudXRmOCgpLmRhdGEoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fc2lnbmF0dXJlOwotfQot
Ci0jZW5kaWYgLy8gRU5BQkxFKEpBVkFfQlJJREdFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYnJpZGdlL2puaS9qc2MvSmF2YU1ldGhvZEpTQy5oIGIvU291cmNlL1dlYkNvcmUvYnJpZGdl
L2puaS9qc2MvSmF2YU1ldGhvZEpTQy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2
NGMyOTNmMmMyY2MwMDZjY2ZhMTRmMGJlYjM1ZTVmNGNlYmQ3YWI4Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkv
anNjL0phdmFNZXRob2RKU0MuaAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDksIDIwMTAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IDIwMTAsIFRoZSBBbmRyb2lk
IE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEphdmFNZXRob2RKU0NfaAotI2Rl
ZmluZSBKYXZhTWV0aG9kSlNDX2gKLQotI2lmIEVOQUJMRShKQVZBX0JSSURHRSkKLQotI2luY2x1
ZGUgIkJyaWRnZS5oIgotI2luY2x1ZGUgIkphdmFTdHJpbmdKU0MuaCIKLSNpbmNsdWRlICJKYXZh
VHlwZS5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotbmFtZXNwYWNlIEJpbmRpbmdzIHsKLQotdHlw
ZWRlZiBjb25zdCBjaGFyKiBSdW50aW1lVHlwZTsKLQotY2xhc3MgSmF2YU1ldGhvZCA6IHB1Ymxp
YyBNZXRob2QgewotcHVibGljOgotICAgIEphdmFNZXRob2QoSk5JRW52Kiwgam9iamVjdCBhTWV0
aG9kKTsKLSAgICB+SmF2YU1ldGhvZCgpOwotCi0gICAgY29uc3QgU3RyaW5nIG5hbWUoKSBjb25z
dCB7IHJldHVybiBtX25hbWUuaW1wbCgpOyB9Ci0gICAgUnVudGltZVR5cGUgcmV0dXJuVHlwZUNs
YXNzTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmV0dXJuVHlwZUNsYXNzTmFtZS51dGY4KCk7IH0K
LSAgICBjb25zdCBTdHJpbmcgcGFyYW1ldGVyQXQoaW50IGkpIGNvbnN0IHsgcmV0dXJuIG1fcGFy
YW1ldGVyc1tpXTsgfQotICAgIGNvbnN0IGNoYXIqIHNpZ25hdHVyZSgpIGNvbnN0OwotICAgIEph
dmFUeXBlIHJldHVyblR5cGUoKSBjb25zdCB7IHJldHVybiBtX3JldHVyblR5cGU7IH0KLSAgICBi
b29sIGlzU3RhdGljKCkgY29uc3QgeyByZXR1cm4gbV9pc1N0YXRpYzsgfQotCi0gICAgLy8gTWV0
aG9kIGltcGxlbWVudGF0aW9uCi0gICAgaW50IG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVy
biBtX3BhcmFtZXRlcnMuc2l6ZSgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgVmVjdG9yPFdURjo6U3Ry
aW5nPiBtX3BhcmFtZXRlcnM7Ci0gICAgSmF2YVN0cmluZyBtX25hbWU7Ci0gICAgbXV0YWJsZSBj
aGFyKiBtX3NpZ25hdHVyZTsKLSAgICBKYXZhU3RyaW5nIG1fcmV0dXJuVHlwZUNsYXNzTmFtZTsK
LSAgICBKYXZhVHlwZSBtX3JldHVyblR5cGU7Ci0gICAgYm9vbCBtX2lzU3RhdGljOwotfTsKLQot
fSAvLyBuYW1lc3BhY2UgQmluZGluZ3MKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAv
LyBFTkFCTEUoSkFWQV9CUklER0UpCi0KLSNlbmRpZiAvLyBKYXZhTWV0aG9kSlNDX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFSdW50aW1lT2JqZWN0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFSdW50aW1lT2JqZWN0LmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODRhM2VmMzE5YWI3ZmFmNWY4NWVkOWRhNjAw
YzAwMWQ5YTBhOTYzNi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhUnVudGltZU9iamVjdC5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiSmF2YVJ1bnRpbWVPYmplY3QuaCIKLQotI2luY2x1ZGUgIkphdmFJbnN0YW5jZUpTQy5o
IgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgInJ1bnRpbWUvT2JqZWN0UHJv
dG90eXBlLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotbmFtZXNwYWNlIEJpbmRpbmdzIHsKLQotY29u
c3QgQ2xhc3NJbmZvIEphdmFSdW50aW1lT2JqZWN0OjpzX2luZm8gPSB7ICJKYXZhUnVudGltZU9i
amVjdCIsICZSdW50aW1lT2JqZWN0OjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUo
SmF2YVJ1bnRpbWVPYmplY3QpIH07Ci0KLUphdmFSdW50aW1lT2JqZWN0OjpKYXZhUnVudGltZU9i
amVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQYXNzUmVmUHRyPEphdmFJbnN0YW5jZT4gaW5zdGFuY2UpCi0gICAg
OiBSdW50aW1lT2JqZWN0KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RydWN0dXJlLCBpbnN0YW5jZSkK
LXsKLX0KLQotdm9pZCBKYXZhUnVudGltZU9iamVjdDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCkKLXsKLSAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxP
YmplY3QpOwotICAgIEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7Ci19Ci0KLUphdmFJbnN0YW5j
ZSogSmF2YVJ1bnRpbWVPYmplY3Q6OmdldEludGVybmFsSmF2YUluc3RhbmNlKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SmF2YUluc3RhbmNlKj4oZ2V0SW50ZXJuYWxJbnN0YW5j
ZSgpKTsKLX0KLQotCi0KLX0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9q
bmkvanNjL0phdmFSdW50aW1lT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pz
Yy9KYXZhUnVudGltZU9iamVjdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGNj
NGU1MjRhOWRmNjg3M2U0ZjJmZjk1OTQ4MDgxNTQyMDdhZGUwLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNj
L0phdmFSdW50aW1lT2JqZWN0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZu
ZGVmIEphdmFSdW50aW1lT2JqZWN0X2gKLSNkZWZpbmUgSmF2YVJ1bnRpbWVPYmplY3RfaAotCi0j
aW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCi0jaW5jbHVkZSAicnVudGltZV9vYmplY3QuaCIKLQot
bmFtZXNwYWNlIEpTQyB7Ci1uYW1lc3BhY2UgQmluZGluZ3MgewotCi1jbGFzcyBKYXZhSW5zdGFu
Y2U7Ci0KLWNsYXNzIEphdmFSdW50aW1lT2JqZWN0IDogcHVibGljIFJ1bnRpbWVPYmplY3Qgewot
cHVibGljOgotICAgIHR5cGVkZWYgUnVudGltZU9iamVjdCBCYXNlOwotCi0gICAgc3RhdGljIEph
dmFSdW50aW1lT2JqZWN0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBQYXNzUmVmUHRyPEphdmFJbnN0YW5jZT4gamF2YUluc3RhbmNlKQotICAg
IHsKLSAgICAgICAgLy8gRklYTUU6IGRlcHJlY2F0ZWRHZXRET01TdHJ1Y3R1cmUgdXNlcyB0aGUg
cHJvdG90eXBlIG9mZiBvZiB0aGUgd3JvbmcgZ2xvYmFsIG9iamVjdAotICAgICAgICAvLyBXZSBu
ZWVkIHRvIHBhc3MgaW4gdGhlIHJpZ2h0IGdsb2JhbCBvYmplY3QgZm9yICJpIi4KLSAgICAgICAg
U3RydWN0dXJlKiBkb21TdHJ1Y3R1cmUgPSBXZWJDb3JlOjpkZXByZWNhdGVkR2V0RE9NU3RydWN0
dXJlPEphdmFSdW50aW1lT2JqZWN0PihleGVjKTsKLSAgICAgICAgSmF2YVJ1bnRpbWVPYmplY3Qq
IG9iamVjdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEphdmFSdW50aW1lT2JqZWN0Pigq
ZXhlYy0+aGVhcCgpKSkgSmF2YVJ1bnRpbWVPYmplY3QoZXhlYywgZ2xvYmFsT2JqZWN0LCBkb21T
dHJ1Y3R1cmUsIGphdmFJbnN0YW5jZSk7Ci0gICAgICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsT2JqZWN0KTsKLSAgICAgICAgcmV0dXJuIG9iamVjdDsKLSAgICB9Ci0KLSAgICBKYXZh
SW5zdGFuY2UqIGdldEludGVybmFsSmF2YUluc3RhbmNlKCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMg
Y29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKLQotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVy
ZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhP
YmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8pOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBKYXZhUnVudGltZU9iamVjdChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIFN0cnVj
dHVyZSosIFBhc3NSZWZQdHI8SmF2YUluc3RhbmNlPik7Ci0gICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihKU0dsb2JhbE9iamVjdCopOwotfTsKLQotfQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFTdHJpbmdKU0MuaCBiL1NvdXJjZS9XZWJD
b3JlL2JyaWRnZS9qbmkvanNjL0phdmFTdHJpbmdKU0MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNzA1YzUyY2NiM2QyZGY4OTkyMzRkZDI5MDkwZjFiZTQ2NTcwMWI4Ny4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
cmlkZ2Uvam5pL2pzYy9KYXZhU3RyaW5nSlNDLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA3LCAyMDA5LCAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAyMDEwLCBU
aGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBKYXZhU3RyaW5n
SlNDX2gKLSNkZWZpbmUgSmF2YVN0cmluZ0pTQ19oCi0KLSNpbmNsdWRlICJKTklVdGlsaXR5Lmgi
Ci0jaW5jbHVkZSAiSlNET01XaW5kb3dCYXNlLmgiCi0jaW5jbHVkZSAiSmF2YUluc3RhbmNlSlND
LmgiCi0KLSNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgotCi1uYW1lc3BhY2UgSlNDIHsKLQot
bmFtZXNwYWNlIEJpbmRpbmdzIHsKLQotY2xhc3MgSmF2YVN0cmluZyB7Ci1wdWJsaWM6Ci0gICAg
SmF2YVN0cmluZyhKTklFbnYqIGUsIGpzdHJpbmcgcykKLSAgICB7Ci0gICAgICAgIGluaXQoZSwg
cyk7Ci0gICAgfQotCi0gICAgSmF2YVN0cmluZyhqc3RyaW5nIHMpCi0gICAgewotICAgICAgICBp
bml0KGdldEpOSUVudigpLCBzKTsKLSAgICB9Ci0KLSAgICBKYXZhU3RyaW5nKCkKLSAgICB7Ci0g
ICAgICAgIEpTTG9ja0hvbGRlciBsb2NrKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y29tbW9u
SlNHbG9iYWxEYXRhKCkpOwotICAgIH0KLQotICAgIH5KYXZhU3RyaW5nKCkKLSAgICB7Ci0gICAg
ICAgIEpTTG9ja0hvbGRlciBsb2NrKFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6Y29tbW9uSlNH
bG9iYWxEYXRhKCkpOwotICAgICAgICBtX2ltcGwgPSAwOwotICAgIH0KLQotICAgIGNvbnN0IGNo
YXIqIHV0ZjgoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFtX3V0ZjhTdHJpbmcuZGF0YSgp
KSB7Ci0gICAgICAgICAgICBKU0xvY2tIb2xkZXIgbG9jayhXZWJDb3JlOjpKU0RPTVdpbmRvd0Jh
c2U6OmNvbW1vbkpTR2xvYmFsRGF0YSgpKTsKLSAgICAgICAgICAgIG1fdXRmOFN0cmluZyA9IFN0
cmluZyhtX2ltcGwpLnV0ZjgoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV91dGY4U3Ry
aW5nLmRhdGEoKTsKLSAgICB9Ci0gICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1faW1w
bC0+bGVuZ3RoKCk7IH0KLSAgICBTdHJpbmdJbXBsKiBpbXBsKCkgY29uc3QgeyByZXR1cm4gbV9p
bXBsLmdldCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBpbml0KEpOSUVudiogZSwganN0cmlu
ZyBzKQotICAgIHsKLSAgICAgICAgaW50IHNpemUgPSBlLT5HZXRTdHJpbmdMZW5ndGgocyk7Ci0g
ICAgICAgIGNvbnN0IGpjaGFyKiB1YyA9IGdldFVDaGFyYWN0ZXJzRnJvbUpTdHJpbmdJbkVudihl
LCBzKTsKLSAgICAgICAgewotICAgICAgICAgICAgSlNMb2NrSG9sZGVyIGxvY2soV2ViQ29yZTo6
SlNET01XaW5kb3dCYXNlOjpjb21tb25KU0dsb2JhbERhdGEoKSk7Ci0gICAgICAgICAgICBtX2lt
cGwgPSBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHVjKSwgc2l6ZSkuaW1w
bCgpOwotICAgICAgICB9Ci0gICAgICAgIHJlbGVhc2VVQ2hhcmFjdGVyc0ZvckpTdHJpbmdJbkVu
dihlLCBzLCB1Yyk7Ci0gICAgfQotCi0gICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1faW1wbDsKLSAg
ICBtdXRhYmxlIENTdHJpbmcgbV91dGY4U3RyaW5nOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgQmlu
ZGluZ3MKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBKYXZhU3RyaW5nSlNDX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuaCBiL1NvdXJj
ZS9XZWJDb3JlL2JyaWRnZS9ydW50aW1lX3Jvb3QuaAppbmRleCBjNTI3OTRkNWNiZTQ0MmZkMGI5
Njk5NGQ5ZTVhNGI0NzE3NTJmYmMyLi5mY2U1N2ViY2FlMTg4ODkzNGZmZTYxYjY2Yjk4NTIyMDNj
ZjljN2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9yb290LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfcm9vdC5oCkBAIC0yNiw5ICsyNiw2
IEBACiAjaWZuZGVmIFJVTlRJTUVfUk9PVF9IXwogI2RlZmluZSBSVU5USU1FX1JPT1RfSF8KIAot
I2lmIFBMQVRGT1JNKE1BQykKLSNpbmNsdWRlICJqbmlfanNvYmplY3QuaCIKLSNlbmRpZgogI2lu
Y2x1ZGUgPGhlYXAvU3Ryb25nLmg+CiAjaW5jbHVkZSA8aGVhcC9XZWFrLmg+CiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgK
aW5kZXggNDQwOTQxNmNmOGFjOTY5MGM0ZjRhZDgyZjUwNmFiZmZjYzYxYmRlMC4uMjZmNzY0OTlm
YTBlNjM3YzE3ZGY2MzEzZjViOTU5ZmVlMjJmOWQ3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0ZyYW1lTG9hZGVyQ2xpZW50LmgKQEAgLTI5MCw5ICsyOTAsNiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICAvLyBBbGxvdyBhbiBhY2Nlc3NpYmlsaXR5
IG9iamVjdCB0byByZXRyaWV2ZSBhIEZyYW1lIHBhcmVudCBpZiB0aGVyZSdzIG5vIFBsYXRmb3Jt
V2lkZ2V0LgogICAgICAgICB2aXJ0dWFsIFJlbW90ZUFYT2JqZWN0UmVmIGFjY2Vzc2liaWxpdHlS
ZW1vdGVPYmplY3QoKSA9IDA7Ci0jaWYgRU5BQkxFKEpBVkFfQlJJREdFKQotICAgICAgICB2aXJ0
dWFsIGpvYmplY3QgamF2YUFwcGxldChOU1ZpZXcqKSB7IHJldHVybiAwOyB9Ci0jZW5kaWYKICAg
ICAgICAgdmlydHVhbCBOU0NhY2hlZFVSTFJlc3BvbnNlKiB3aWxsQ2FjaGVSZXNwb25zZShEb2N1
bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgTlNDYWNoZWRVUkxSZXNwb25z
ZSopIGNvbnN0ID0gMDsKICNlbmRpZgogI2lmIFBMQVRGT1JNKFdJTikgJiYgVVNFKENGTkVUV09S
SykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
TG9hZGVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFt
ZUxvYWRlckNsaWVudC5oCmluZGV4IGNjZDc1MTU3MjczMDliMGQyNzE4YjYwZTcyOWQ0NGFlOWQ1
OGM3ZGEuLmQ5MDg4ODFhM2FjNzRlYzIxMjhlNzJhOTE5MTg4MWVmM2YzNDgyYmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50
LmgKKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJD
bGllbnQuaApAQCAtMjE5LDEwICsyMTksNiBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lk
IHJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihib29sIGxpc3RlbikgT1ZFUlJJREU7CiAKLSNp
ZiBFTkFCTEUoSkFWQV9CUklER0UpCi0gICAgdmlydHVhbCBqb2JqZWN0IGphdmFBcHBsZXQoTlNW
aWV3KikgT1ZFUlJJREU7Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2aXJ0dWFs
IFJlbW90ZUFYT2JqZWN0UmVmIGFjY2Vzc2liaWxpdHlSZW1vdGVPYmplY3QoKSBPVkVSUklERSB7
IHJldHVybiAwOyB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50Lm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KaW5kZXggZWNhOGQyZGYwZWY1ZWZk
ZGEyYjk3N2Y1MjdlN2UxMTk4MDhmYWQ5My4uZGUwZjYxODNkMjkyYjU4MjNlMzBjZTFkNmFiMTc5
Y2QwNmViZDM1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVMb2FkZXJDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQubW0KQEAgLTEyOCwxMCArMTI4LDYgQEAKICNpbXBv
cnQgPFdlYkNvcmUvSFRNTE1lZGlhRWxlbWVudC5oPgogI2VuZGlmCiAKLSNpZiBFTkFCTEUoSkFW
QV9CUklER0UpCi0jaW1wb3J0ICJXZWJKYXZhUGx1Z0luLmgiCi0jZW5kaWYKLQogI2lmIFVTRShQ
TFVHSU5fSE9TVF9QUk9DRVNTKSAmJiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICNpbXBv
cnQgIk5ldHNjYXBlUGx1Z2luSG9zdE1hbmFnZXIuaCIKICNpbXBvcnQgIldlYkhvc3RlZE5ldHNj
YXBlUGx1Z2luVmlldy5oIgpAQCAtMTQxLDEyICsxMzcsNiBAQCB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiB1c2luZyBuYW1lc3BhY2Ugc3RkOwog
Ci0jaWYgRU5BQkxFKEpBVkFfQlJJREdFKQotQGludGVyZmFjZSBOU1ZpZXcgKFdlYkphdmFQbHVn
aW5EZXRhaWxzKQotLSAoam9iamVjdClwb2xsRm9yQXBwbGV0SW5XaW5kb3c6KE5TV2luZG93ICop
d2luZG93OwotQGVuZAotI2VuZGlmCi0KIC8vIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3
aXRoIG9sZGVyIFdlYktpdCBwbHVnLWlucy4KIE5TU3RyaW5nICpXZWJQbHVnaW5CYXNlVVJMS2V5
ID0gQCJXZWJQbHVnaW5CYXNlVVJMIjsKIE5TU3RyaW5nICpXZWJQbHVnaW5BdHRyaWJ1dGVzS2V5
ID0gQCJXZWJQbHVnaW5BdHRyaWJ1dGVzIjsKQEAgLTE3NjMsNyArMTc1Myw2IEBAIHZvaWQgV2Vi
RnJhbWVMb2FkZXJDbGllbnQ6OnJlZGlyZWN0RGF0YVRvUGx1Z2luKFdpZGdldCogcGx1Z2luV2lk
Z2V0KQogUGFzc1JlZlB0cjxXaWRnZXQ+IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVKYXZh
QXBwbGV0V2lkZ2V0KGNvbnN0IEludFNpemUmIHNpemUsIEhUTUxBcHBsZXRFbGVtZW50KiBlbGVt
ZW50LCBjb25zdCBLVVJMJiBiYXNlVVJMLCAKICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFy
YW1OYW1lcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKQogewotI2lmIEVOQUJM
RShKQVZBX0JSSURHRSkKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKICAgICBO
U1ZpZXcgKnZpZXcgPSBuaWw7CkBAIC0xNzc4LDI0ICsxNzY3LDggQEAgUGFzc1JlZlB0cjxXaWRn
ZXQ+IFdlYkZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IElu
dFNpemUmIHMKIAogICAgIGlmIChwbHVnaW5QYWNrYWdlKSB7CiAgICAgICAgIGlmICghV0tTaG91
bGRCbG9ja1BsdWdpbihbcGx1Z2luUGFja2FnZSBidW5kbGVJZGVudGlmaWVyXSwgW3BsdWdpblBh
Y2thZ2UgYnVuZGxlVmVyc2lvbl0pKSB7Ci0gICAgICAgICAgICBpZiAoW3BsdWdpblBhY2thZ2Ug
aXNLaW5kT2ZDbGFzczpbV2ViUGx1Z2luUGFja2FnZSBjbGFzc11dKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gRm9yIHNvbWUgcmVhc29uLCB0aGUgSmF2YSBwbHVnLWluIHJlcXVpcmVzIHRoYXQgd2Ug
cGFzcyB0aGUgZGltZW5zaW9uIG9mIHRoZSBwbHVnLWluIGFzIGF0dHJpYnV0ZXMuCi0gICAgICAg
ICAgICAgICAgTlNNdXRhYmxlQXJyYXkgKm5hbWVzID0ga2l0KHBhcmFtTmFtZXMpOwotICAgICAg
ICAgICAgICAgIE5TTXV0YWJsZUFycmF5ICp2YWx1ZXMgPSBraXQocGFyYW1WYWx1ZXMpOwotICAg
ICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJWYWx1ZShwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywg
IndpZHRoIikuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgW25hbWVzIGFkZE9iamVj
dDpAIndpZHRoIl07Ci0gICAgICAgICAgICAgICAgICAgIFt2YWx1ZXMgYWRkT2JqZWN0OltOU1N0
cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiJWQiLCBzaXplLndpZHRoKCldXTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlclZhbHVlKHBhcmFtTmFtZXMsIHBh
cmFtVmFsdWVzLCAiaGVpZ2h0IikuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgW25h
bWVzIGFkZE9iamVjdDpAImhlaWdodCJdOwotICAgICAgICAgICAgICAgICAgICBbdmFsdWVzIGFk
ZE9iamVjdDpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAIiVkIiwgc2l6ZS5oZWlnaHQoKV1d
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB2aWV3ID0gcGx1Z2luVmlldyht
X3dlYkZyYW1lLmdldCgpLCAoV2ViUGx1Z2luUGFja2FnZSAqKXBsdWdpblBhY2thZ2UsIG5hbWVz
LCB2YWx1ZXMsIGJhc2VVUkwsIGtpdChlbGVtZW50KSwgTk8pOwotICAgICAgICAgICAgICAgIGlm
ICh2aWV3KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBsdWdpbldp
ZGdldCh2aWV3KSk7Ci0gICAgICAgICAgICB9CiAgICAgI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQotICAgICAgICAgICAgZWxzZSBpZiAoW3BsdWdpblBhY2thZ2UgaXNLaW5kT2ZDbGFz
czpbV2ViTmV0c2NhcGVQbHVnaW5QYWNrYWdlIGNsYXNzXV0pIHsKKyAgICAgICAgICAgIGlmIChb
cGx1Z2luUGFja2FnZSBpc0tpbmRPZkNsYXNzOltXZWJOZXRzY2FwZVBsdWdpblBhY2thZ2UgY2xh
c3NdXSkgewogICAgICAgICAgICAgICAgIHZpZXcgPSBbW1tORVRTQ0FQRV9QTFVHSU5fVklFVyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpOU01ha2VSZWN0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSkKICAgICAgICAgICAgICAgICAgICAgcGx1Z2luUGFja2FnZTooV2ViTmV0c2NhcGVQ
bHVnaW5QYWNrYWdlICopcGx1Z2luUGFja2FnZQogICAgICAgICAgICAgICAgICAgICBVUkw6bmls
CkBAIC0xODA3LDggKzE3ODAsNiBAQCBQYXNzUmVmUHRyPFdpZGdldD4gV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OmNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYgcwogICAgICAgICAg
ICAgICAgICAgICBlbGVtZW50OmVsZW1lbnRdIGF1dG9yZWxlYXNlXTsKICAgICAgICAgICAgICAg
ICBpZiAodmlldykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBOZXRz
Y2FwZVBsdWdpbldpZGdldChzdGF0aWNfY2FzdDxXZWJCYXNlTmV0c2NhcGVQbHVnaW5WaWV3ICo+
KHZpZXcpKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgfQogICAgICNlbmRpZgogICAgICAgICB9IGVsc2Ug
ewpAQCAtMTgzMCw3ICsxODAxLDcgQEAgUGFzc1JlZlB0cjxXaWRnZXQ+IFdlYkZyYW1lTG9hZGVy
Q2xpZW50OjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNpemUmIHMKICAgICB9CiAK
ICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotI2VuZGlmIC8vIEVOQUJMRShKQVZBX0JS
SURHRSkKKwogICAgIHJldHVybiAwOwogfQogCkBAIC0xOTcyLDIxICsxOTQzLDYgQEAgUGFzc1Jl
ZlB0cjxGcmFtZU5ldHdvcmtpbmdDb250ZXh0PiBXZWJGcmFtZUxvYWRlckNsaWVudDo6Y3JlYXRl
TmV0d29ya2luZ0NvbnRleHQKICAgICByZXR1cm4gV2ViRnJhbWVOZXR3b3JraW5nQ29udGV4dDo6
Y3JlYXRlKGNvcmUobV93ZWJGcmFtZS5nZXQoKSkpOwogfQogCi0jaWYgRU5BQkxFKEpBVkFfQlJJ
REdFKQotam9iamVjdCBXZWJGcmFtZUxvYWRlckNsaWVudDo6amF2YUFwcGxldChOU1ZpZXcqIHZp
ZXcpCi17Ci0gICAgaWYgKFt2aWV3IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Iod2ViUGx1
Z0luR2V0QXBwbGV0KV0pCi0gICAgICAgIHJldHVybiBbdmlldyB3ZWJQbHVnSW5HZXRBcHBsZXRd
OwotCi0gICAgLy8gQ29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIEphdmEuCi0g
ICAgLy8gRklYTUU6IERvIHdlIHN0aWxsIG5lZWQgdGhpcz8KLSAgICBpZiAoW3ZpZXcgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihwb2xsRm9yQXBwbGV0SW5XaW5kb3c6KV0pCi0gICAgICAg
IHJldHVybiBbdmlldyBwb2xsRm9yQXBwbGV0SW5XaW5kb3c6W1ttX3dlYkZyYW1lLmdldCgpIGZy
YW1lVmlld10gd2luZG93XV07Ci0KLSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZgotCiBAaW1wbGVt
ZW50YXRpb24gV2ViRnJhbWVQb2xpY3lMaXN0ZW5lcgogKyAodm9pZClpbml0aWFsaXplCiB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZy
YW1lTG9hZGVyQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCmluZGV4IGY4YjlhYjhiY2Q0MjIwZDJkZWM1
M2EzMDBhNjU0Y2ZlY2Q1NDcwYWMuLjEzOThmZjA0MTliMzY1ZjNjNWI0ZmI1NjA1ZThlMmEwNmIy
NGU5YzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCkBAIC0xNTE2LDEwICsx
NTE2LDYgQEAgUmVtb3RlQVhPYmplY3RSZWYgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmFjY2Vzc2li
aWxpdHlSZW1vdGVPYmplY3QoKQogICAgIHJldHVybiBtX2ZyYW1lLT5wYWdlKCktPmFjY2Vzc2li
aWxpdHlSZW1vdGVPYmplY3QoKTsKIH0KICAgICAKLSNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdF
KQotam9iamVjdCBXZWJGcmFtZUxvYWRlckNsaWVudDo6amF2YUFwcGxldChOU1ZpZXcqKSB7IHJl
dHVybiAwOyB9Ci0jZW5kaWYKLQogTlNDYWNoZWRVUkxSZXNwb25zZSogV2ViRnJhbWVMb2FkZXJD
bGllbnQ6OndpbGxDYWNoZVJlc3BvbnNlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBOU0NhY2hlZFVSTFJlc3BvbnNlKiByZXNwb25zZSkgY29uc3QKIHsKICAgICBX
ZWJQYWdlKiB3ZWJQYWdlID0gbV9mcmFtZS0+cGFnZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5oIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNs
aWVudC5oCmluZGV4IDIxM2EyZmVhMGUzMTE0MjQxYWYyNzBmOTVmOTA1YWUyMjYxMDgwZTkuLmI1
YTMwNDUwOTAxNDQ4YTIxZGViY2I0NjVkOGJmMWU0MDU5YTRkMWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
TG9hZGVyQ2xpZW50LmgKQEAgLTIxNiw5ICsyMTYsNiBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JN
KE1BQykKICAgICB2aXJ0dWFsIFJlbW90ZUFYT2JqZWN0UmVmIGFjY2Vzc2liaWxpdHlSZW1vdGVP
YmplY3QoKSBPVkVSUklERTsKICAgICAKLSNpZiBFTkFCTEUoTUFDX0pBVkFfQlJJREdFKQotICAg
IHZpcnR1YWwgam9iamVjdCBqYXZhQXBwbGV0KE5TVmlldyopIE9WRVJSSURFOwotI2VuZGlmCiAg
ICAgdmlydHVhbCBOU0NhY2hlZFVSTFJlc3BvbnNlKiB3aWxsQ2FjaGVSZXNwb25zZShXZWJDb3Jl
OjpEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgTlNDYWNoZWRVUkxS
ZXNwb25zZSopIGNvbnN0IE9WRVJSSURFOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oV0lOKSAmJiBV
U0UoQ0ZORVRXT1JLKQo=
</data>
<flag name="review"
          id="178642"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>