<?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>155200</bug_id>
          
          <creation_ts>2016-03-08 15:26:46 -0800</creation_ts>
          <short_desc>DFG should be able to constant-fold strings</short_desc>
          <delta_ts>2016-03-09 01:00:04 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1172248</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-03-08 15:26:46 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172262</commentid>
    <comment_count>1</comment_count>
      <attachid>273353</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-03-08 15:35:14 -0800</bug_when>
    <thetext>Created attachment 273353
it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172271</commentid>
    <comment_count>2</comment_count>
      <attachid>273358</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-03-08 15:56:17 -0800</bug_when>
    <thetext>Created attachment 273358
more

wrote all of the support for creating strings at compile time</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172346</commentid>
    <comment_count>3</comment_count>
      <attachid>273373</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-03-08 19:31:35 -0800</bug_when>
    <thetext>Created attachment 273373
wow, it works!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172347</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-08 19:35:46 -0800</bug_when>
    <thetext>Attachment 273373 did not pass style-queue:


ERROR: LayoutTests/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
ERROR: Source/JavaScriptCore/dfg/DFGLazyJSValue.cpp:228:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:1055:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 3 in 33 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172353</commentid>
    <comment_count>5</comment_count>
      <attachid>273375</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-03-08 19:57:42 -0800</bug_when>
    <thetext>Created attachment 273375
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172354</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-08 19:59:00 -0800</bug_when>
    <thetext>Attachment 273375 did not pass style-queue:


ERROR: LayoutTests/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
ERROR: Source/JavaScriptCore/dfg/DFGLazyJSValue.cpp:230:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:1055:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 3 in 34 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172355</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-03-08 20:01:46 -0800</bug_when>
    <thetext>r=me with some comments

&gt; Source/JavaScriptCore/dfg/DFGLazyJSValue.cpp:99
&gt; +        if (JSString* string = jsDynamicCast&lt;JSString*&gt;(value()-&gt;value()))
&gt; +            return string-&gt;tryGetValueImpl();

Does the compiler guarantee that we won&apos;t GC KnownValues during compilation?

&gt; Source/WTF/wtf/text/StringImpl.cpp:246
&gt; +Ref&lt;StringImpl&gt; StringImpl::clone() const
&gt; +{
&gt; +    if (is8Bit())
&gt; +        return create(characters8(), length());
&gt; +    return create(characters16(), length());
&gt; +}

StringImpl already has isolatedCopy(). You should use that and remove this.

&gt; Source/WTF/wtf/text/StringImpl.h:-588
&gt; -        ASSERT(!isCompilationThread());

I think it would be slightly nicer to ASSERT(!isCompilationThread() || !isAtomic()). That way, we won&apos;t use Identifiers on the compilation thread -- which is still totally prohibited.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172362</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-03-08 20:09:54 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; r=me with some comments
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGLazyJSValue.cpp:99
&gt; &gt; +        if (JSString* string = jsDynamicCast&lt;JSString*&gt;(value()-&gt;value()))
&gt; &gt; +            return string-&gt;tryGetValueImpl();
&gt; 
&gt; Does the compiler guarantee that we won&apos;t GC KnownValues during compilation?

Yes.  We only get JSStrings from FrozenValues, which are already registered with the GC, either strongly (the GC will keep them alive) or weakly (the GC will abort this compilation if they die).  Note that the JIT safepoints with the GC, so while this code is running, we know that the GC is either not running at all or it&apos;s blocked on our execution lock.  We will unlock our execution lock only at points where we know that all FrozenValues are properly accounted for.  The GC will see them.

&gt; 
&gt; &gt; Source/WTF/wtf/text/StringImpl.cpp:246
&gt; &gt; +Ref&lt;StringImpl&gt; StringImpl::clone() const
&gt; &gt; +{
&gt; &gt; +    if (is8Bit())
&gt; &gt; +        return create(characters8(), length());
&gt; &gt; +    return create(characters16(), length());
&gt; &gt; +}
&gt; 
&gt; StringImpl already has isolatedCopy(). You should use that and remove this.

OK.

&gt; 
&gt; &gt; Source/WTF/wtf/text/StringImpl.h:-588
&gt; &gt; -        ASSERT(!isCompilationThread());
&gt; 
&gt; I think it would be slightly nicer to ASSERT(!isCompilationThread() ||
&gt; !isAtomic()). That way, we won&apos;t use Identifiers on the compilation thread
&gt; -- which is still totally prohibited.

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172374</commentid>
    <comment_count>9</comment_count>
      <attachid>273383</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-03-08 20:34:37 -0800</bug_when>
    <thetext>Created attachment 273383
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172376</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-08 20:36:23 -0800</bug_when>
    <thetext>Attachment 273383 did not pass style-queue:


ERROR: LayoutTests/ChangeLog:1:  ChangeLog entry has no bug number  [changelog/bugnumber] [5]
ERROR: Source/JavaScriptCore/dfg/DFGLazyJSValue.cpp:230:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:1055:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 3 in 33 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172394</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-03-08 21:26:34 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/197833</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172452</commentid>
    <comment_count>12</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-03-09 00:31:24 -0800</bug_when>
    <thetext>The debug bots are in bad shape following this. E.g.:
-https://build.webkit.org/builders/Apple%20El%20Capitan%20Debug%20WK2%20%28Tests%29</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172462</commentid>
    <comment_count>13</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-03-09 01:00:04 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; The debug bots are in bad shape following this. E.g.:
&gt; -https://build.webkit.org/builders/
&gt; Apple%20El%20Capitan%20Debug%20WK2%20%28Tests%29

For reference, the fix is http://trac.webkit.org/changeset/197838</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273353</attachid>
            <date>2016-03-08 15:35:14 -0800</date>
            <delta_ts>2016-03-08 15:56:17 -0800</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>8192</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE5Nzc4MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpA
QCAtODgwLDYgKzg4MCw5IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBtX2xvY2FsVmFyczsKICAg
ICB1bnNpZ25lZCBtX25leHRNYWNoaW5lTG9jYWw7CiAgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJT
bG90czsKKyAgICAKKyAgICBIYXNoU2V0PFN0cmluZz4gbV9sb2NhbFN0cmluZ3M7CisgICAgSGFz
aE1hcDxTdHJpbmdJbXBsKiwgU3RyaW5nPiBtX2NvcGllZFN0cmluZ3M7CiAKICNpZiBVU0UoSlNW
QUxVRTMyXzY0KQogICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxpbnQ2NF90LCBkb3VibGUqPiBtX2Rv
dWJsZUNvbnN0YW50c01hcDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6
eUpTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TGF6eUpTVmFsdWUuY3BwCShyZXZpc2lvbiAxOTc3ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0xhenlKU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgs
MTAgKzI4LDE5IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkRGR0dyYXBo
LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAKK0xhenlKU1ZhbHVlIExhenlKU1ZhbHVlOjpuZXdTdHJpbmcoR3JhcGgmIGdyYXBo
LCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBMYXp5SlNWYWx1ZSByZXN1bHQ7CisgICAg
cmVzdWx0Lm1fa2luZCA9IE5ld1N0cmluZ0ltcGw7CisgICAgcmVzdWx0LnUuc3RyaW5nSW1wbCA9
IGdyYXBoLm1fbG9jYWxTdHJpbmdzLmFkZChzdHJpbmcpLml0ZXJhdG9yLT5pbXBsKCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwogSlNWYWx1ZSBMYXp5SlNWYWx1ZTo6Z2V0VmFsdWUoVk0mIHZt
KSBjb25zdAogewogICAgIHN3aXRjaCAobV9raW5kKSB7CkBAIC00MCw2ICs0OSw3IEBAIEpTVmFs
dWUgTGF6eUpTVmFsdWU6OmdldFZhbHVlKFZNJiB2bSkgY28KICAgICBjYXNlIFNpbmdsZUNoYXJh
Y3RlclN0cmluZzoKICAgICAgICAgcmV0dXJuIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKCZ2bSwg
dS5jaGFyYWN0ZXIpOwogICAgIGNhc2UgS25vd25TdHJpbmdJbXBsOgorICAgIGNhc2UgTmV3U3Ry
aW5nSW1wbDoKICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCZ2bSwgdS5zdHJpbmdJbXBsKTsKICAg
ICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTc1LDYgKzg1LDQ4IEBA
IHN0YXRpYyBUcmlTdGF0ZSBlcXVhbFRvU3RyaW5nSW1wbChKU1ZhbHUKICAgICByZXR1cm4gdHJp
U3RhdGUoV1RGOjplcXVhbChzdHJpbmdJbXBsLCBzdHJpbmcpKTsKIH0KIAorU3RyaW5nSW1wbCog
dHJ5R2V0U3RyaW5nSW1wbCgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBj
YXNlIEtub3duU3RyaW5nSW1wbDoKKyAgICBjYXNlIE5ld1N0cmluZ0ltcGw6CisgICAgICAgIHJl
dHVybiB1LnN0cmluZ0ltcGw7CisKKyAgICBjYXNlIEtub3duVmFsdWU6CisgICAgICAgIGlmIChK
U1N0cmluZyogc3RyaW5nID0ganNEeW5hbWljQ2FzdDxKU1N0cmluZyo+KHZhbHVlKCktPnZhbHVl
KCkpKQorICAgICAgICAgICAgcmV0dXJuIHN0cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCk7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorfQorCitTdHJpbmcgTGF6eUpTVmFsdWU6OnRyeUdldFN0cmluZyhHcmFwaCYg
Z3JhcGgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIE5ld1N0cmlu
Z0ltcGw6CisgICAgICAgIHJldHVybiB1LnN0cmluZ0ltcGw7CisKKyAgICBjYXNlIFNpbmdsZUNo
YXJhY3RlclN0cmluZzoKKyAgICAgICAgcmV0dXJuIFN0cmluZygmdS5jaGFyYWN0ZXIsIDEpOwor
CisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKFN0cmluZ0ltcGwqIHJlc3VsdCA9IHRyeUdldFN0
cmluZ0ltcGwoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgZ2lub3Jtb3VzU3RyaW5nTGVuZ3Ro
ID0gMTAwMDA7CisgICAgICAgICAgICBpZiAocmVzdWx0LT5sZW5ndGgoKSA+IGdpbm9ybW91c1N0
cmluZ0xlbmd0aCkKKyAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gZ3JhcGgubV9jb3BpZWRTdHJpbmdzLmFkZChy
ZXN1bHQsIFN0cmluZygpKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAg
ICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gcmVzdWx0LT5jbG9uZSgpOwor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB9Cit9CisKIFRyaVN0YXRlIExh
enlKU1ZhbHVlOjpzdHJpY3RFcXVhbChjb25zdCBMYXp5SlNWYWx1ZSYgb3RoZXIpIGNvbnN0CiB7
CiAgICAgc3dpdGNoIChtX2tpbmQpIHsKQEAgLTg1LDYgKzEzNyw3IEBAIFRyaVN0YXRlIExhenlK
U1ZhbHVlOjpzdHJpY3RFcXVhbChjb25zdCAKICAgICAgICAgY2FzZSBTaW5nbGVDaGFyYWN0ZXJT
dHJpbmc6CiAgICAgICAgICAgICByZXR1cm4gZXF1YWxUb1NpbmdsZUNoYXJhY3Rlcih2YWx1ZSgp
LT52YWx1ZSgpLCBvdGhlci5jaGFyYWN0ZXIoKSk7CiAgICAgICAgIGNhc2UgS25vd25TdHJpbmdJ
bXBsOgorICAgICAgICBjYXNlIE5ld1N0cmluZ0ltcGw6CiAgICAgICAgICAgICByZXR1cm4gZXF1
YWxUb1N0cmluZ0ltcGwodmFsdWUoKS0+dmFsdWUoKSwgb3RoZXIuc3RyaW5nSW1wbCgpKTsKICAg
ICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTkzLDYgKzE0Niw3IEBAIFRyaVN0YXRlIExhenlK
U1ZhbHVlOjpzdHJpY3RFcXVhbChjb25zdCAKICAgICAgICAgY2FzZSBTaW5nbGVDaGFyYWN0ZXJT
dHJpbmc6CiAgICAgICAgICAgICByZXR1cm4gdHJpU3RhdGUoY2hhcmFjdGVyKCkgPT0gb3RoZXIu
Y2hhcmFjdGVyKCkpOwogICAgICAgICBjYXNlIEtub3duU3RyaW5nSW1wbDoKKyAgICAgICAgY2Fz
ZSBOZXdTdHJpbmdJbXBsOgogICAgICAgICAgICAgaWYgKG90aGVyLnN0cmluZ0ltcGwoKS0+bGVu
Z3RoKCkgIT0gMSkKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2VUcmlTdGF0ZTsKICAgICAg
ICAgICAgIHJldHVybiB0cmlTdGF0ZShvdGhlci5zdHJpbmdJbXBsKCktPmF0KDApID09IGNoYXJh
Y3RlcigpKTsKQEAgLTEwMSw4ICsxNTUsMTAgQEAgVHJpU3RhdGUgTGF6eUpTVmFsdWU6OnN0cmlj
dEVxdWFsKGNvbnN0IAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgS25vd25T
dHJpbmdJbXBsOgorICAgIGNhc2UgTmV3U3RyaW5nSW1wbDoKICAgICAgICAgc3dpdGNoIChvdGhl
ci5tX2tpbmQpIHsKICAgICAgICAgY2FzZSBLbm93blN0cmluZ0ltcGw6CisgICAgICAgIGNhc2Ug
TmV3U3RyaW5nSW1wbDoKICAgICAgICAgICAgIHJldHVybiB0cmlTdGF0ZShXVEY6OmVxdWFsKHN0
cmluZ0ltcGwoKSwgb3RoZXIuc3RyaW5nSW1wbCgpKSk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICByZXR1cm4gb3RoZXIuc3RyaWN0RXF1YWwoKnRoaXMpOwpAQCAtMTQzLDYgKzE5OSw0
MSBAQCB1aW50cHRyX3QgTGF6eUpTVmFsdWU6OnN3aXRjaExvb2t1cFZhbHVlCiAgICAgfQogfQog
Cit2b2lkIExhenlKU1ZhbHVlOjplbWl0KENDYWxsSGVscGVycyYgaml0LCBKU1ZhbHVlUmVncyBy
ZXN1bHQpIGNvbnN0Cit7CisgICAgaWYgKG1fa2luZCA9PSBLbm93blZhbHVlKSB7CisgICAgICAg
IGppdC5tb3ZlVmFsdWUodmFsdWUoKS0+dmFsdWUoKSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIEl0IG11c3QgYmUgc29tZSBraW5kIG9mIGNlbGwuCisjaWYgVVNF
KEpTVkFMVUUzMl82NCkKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihD
ZWxsVGFnKSwgcmVzdWx0LnRhZ0dQUigpKTsKKyNlbmRpZgorICAgIENDYWxsSGVscGVyczo6RGF0
YUxhYmVsUHRyIGxhYmVsID0gaml0Lm1vdmVXaXRoUGF0Y2goCisgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oMHhkMWU3YmVlZmx1KSksCisg
ICAgICAgIHJlc3VsdC5wYXlsb2FkR1BSKCkpOworCisgICAgTGF6eUpTVmFsdWUgdGhpc1ZhbHVl
ID0gKnRoaXM7CisKKyAgICAvLyBPbmNlIHdlIGRvIHRoaXMsIHdlJ3JlIGNvbW1pdHRlZC4gT3Ro
ZXJ3aXNlIHdlIGxlYWsgbWVtb3J5LiBOb3RlIHRoYXQgd2UgY2FsbCByZWYvZGVyZWYKKyAgICAv
LyBtYW51YWxseSB0byBlbnN1cmUgdGhhdCB0aGVyZSBpcyBubyBjb25jdXJyZW5jeSBzaGFkaW5l
c3MuIFdlIGFyZSBkb2luZyBzb21ldGhpbmcgaGVyZQorICAgIC8vIHRoYXQgbWlnaHQgYmUgcmF0
aGVyIGJydXRhbDogdHJhbnNmZXJpbmcgb3duZXJzaGlwIG9mIHRoaXMgc3RyaW5nLgorICAgIGlm
IChtX2tpbmQgPT0gTmV3U3RyaW5nSW1wbCkKKyAgICAgICAgdGhpc1ZhbHVlLnUuc3RyaW5nSW1w
bC0+cmVmKCk7CisgICAgCisgICAgaml0LmFkZExpbmtUYXNrKAorICAgICAgICBbdGhpc1ZhbHVl
LCBsYWJlbF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIEpTVmFsdWUg
cmVhbFZhbHVlID0gdGhpc1ZhbHVlLmdldFZhbHVlKGxpbmtCdWZmZXIudm0oKSk7CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChyZWFsVmFsdWUuaXNDZWxsKCkpOworCisgICAgICAgICAgICBp
ZiAodGhpc1ZhbHVlLm1fa2luZCA9PSBOZXdTdHJpbmdJbXBsKQorICAgICAgICAgICAgICAgIHRo
aXNWYWx1ZS51LnN0cmluZ0ltcGwtPmRlcmVmKCk7CisKKyAgICAgICAgICAgIGxpbmtCdWZmZXIu
cGF0Y2gobGFiZWwsIHJlYWxWYWx1ZS5hc0NlbGwoKSk7CisgICAgICAgIH0pOworfQorCiB2b2lk
IExhenlKU1ZhbHVlOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0
KiBjb250ZXh0KSBjb25zdAogewogICAgIHN3aXRjaCAobV9raW5kKSB7CkBAIC0xNTUsNyArMjQ2
LDEwIEBAIHZvaWQgTGF6eUpTVmFsdWU6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHIKICAgICAgICAg
b3V0LnByaW50KCIgLyAiLCBTdHJpbmdJbXBsOjp1dGY4Rm9yQ2hhcmFjdGVycygmdS5jaGFyYWN0
ZXIsIDEpLCAiKSIpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBLbm93blN0cmluZ0ltcGw6
Ci0gICAgICAgIG91dC5wcmludCgiTGF6eTpTdHJpbmcoIiwgc3RyaW5nSW1wbCgpLCAiKSIpOwor
ICAgICAgICBvdXQucHJpbnQoIkxhenk6S25vd25TdHJpbmcoIiwgc3RyaW5nSW1wbCgpLCAiKSIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBOZXdTdHJpbmdJbXBsOgorICAgICAgICBvdXQu
cHJpbnQoIkxhenk6TmV3U3RyaW5nKCIsIHN0cmluZ0ltcGwoKSwgIikiKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMYXp5SlNWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuaAkocmV2aXNpb24gMTk3Nzgx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMYXp5SlNWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zNCwxNyArMzQsMjEgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogCitjbGFzcyBDQ2FsbEhlbHBlcnM7CitjbGFzcyBHcmFwaDsKKwogLy8g
UmVwcmVzZW50cyBlaXRoZXIgYSBKU1ZhbHVlLCBvciBmb3IgSlNWYWx1ZXMgdGhhdCByZXF1aXJl
IGFsbG9jYXRpb24gaW4gdGhlIGhlYXAsCiAvLyBpdCB0ZWxscyB5b3UgZXZlcnl0aGluZyB5b3Un
ZCBuZWVkIHRvIGtub3cgaW4gb3JkZXIgdG8gYWxsb2NhdGUgaXQuCiAKLWVudW0gTGF6aW5lc3NL
aW5kIHsKLSAgICBLbm93blZhbHVlLAotICAgIFNpbmdsZUNoYXJhY3RlclN0cmluZywKLSAgICBL
bm93blN0cmluZ0ltcGwKLX07Ci0KIGNsYXNzIExhenlKU1ZhbHVlIHsKIHB1YmxpYzoKKyAgICBl
bnVtIExhemluZXNzS2luZCB7CisgICAgICAgIEtub3duVmFsdWUsCisgICAgICAgIFNpbmdsZUNo
YXJhY3RlclN0cmluZywKKyAgICAgICAgS25vd25TdHJpbmdJbXBsLAorICAgICAgICBOZXdTdHJp
bmdJbXBsCisgICAgfTsKKwogICAgIExhenlKU1ZhbHVlKEZyb3plblZhbHVlKiB2YWx1ZSA9IEZy
b3plblZhbHVlOjplbXB0eVNpbmdsZXRvbigpKQogICAgICAgICA6IG1fa2luZChLbm93blZhbHVl
KQogICAgIHsKQEAgLTY2LDYgKzcwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmVzdWx0LnUuc3Ry
aW5nSW1wbCA9IHN0cmluZzsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CisKKyAgICBz
dGF0aWMgTGF6eUpTVmFsdWUgbmV3U3RyaW5nKEdyYXBoJiwgY29uc3QgU3RyaW5nJik7CisKKyAg
ICBMYXppbmVzc0tpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIAogICAg
IEZyb3plblZhbHVlKiB0cnlHZXRWYWx1ZShHcmFwaCYpIGNvbnN0CiAgICAgewpAQCAtODcsMTYg
Kzk1LDIyIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBTaW5nbGVDaGFyYWN0
ZXJTdHJpbmcpOwogICAgICAgICByZXR1cm4gdS5jaGFyYWN0ZXI7CiAgICAgfQorCisgICAgU3Ry
aW5nSW1wbCogdHJ5R2V0U3RyaW5nSW1wbCgpIGNvbnN0OworICAgIAorICAgIFN0cmluZyB0cnlH
ZXRTdHJpbmcoR3JhcGgmKSBjb25zdDsKICAgICAKICAgICBTdHJpbmdJbXBsKiBzdHJpbmdJbXBs
KCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2tpbmQgPT0gS25vd25TdHJpbmdJbXBs
KTsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBLbm93blN0cmluZ0ltcGwgfHwgbV9raW5kID09
IE5ld1N0cmluZ0ltcGwpOwogICAgICAgICByZXR1cm4gdS5zdHJpbmdJbXBsOwogICAgIH0KLSAg
ICAKKwogICAgIFRyaVN0YXRlIHN0cmljdEVxdWFsKGNvbnN0IExhenlKU1ZhbHVlJiBvdGhlcikg
Y29uc3Q7CiAgICAgCiAgICAgdWludHB0cl90IHN3aXRjaExvb2t1cFZhbHVlKFN3aXRjaEtpbmQp
IGNvbnN0OworCisgICAgdm9pZCBlbWl0KENDYWxsSGVscGVycyYsIEpTVmFsdWVSZWdzKTsKICAg
ICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lkIGR1bXBJbkNv
bnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273358</attachid>
            <date>2016-03-08 15:56:17 -0800</date>
            <delta_ts>2016-03-08 19:31:35 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>22857</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE5Nzc4MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTQxLDYgKzE0MSwyMSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgICAgIHNldEJ1aWx0SW5Db25zdGFudChub2RlLCAqbm9kZS0+Y29uc3Rh
bnQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIGNhc2UgTGF6eUpTQ29uc3RhbnQ6
IHsKKyAgICAgICAgTGF6eUpTVmFsdWUgdmFsdWUgPSBub2RlLT5sYXp5SlNWYWx1ZSgpOworICAg
ICAgICBzd2l0Y2ggKHZhbHVlLmtpbmQoKSkgeworICAgICAgICBjYXNlIExhenlKU1ZhbHVlOjpL
bm93blZhbHVlOgorICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgdmFsdWUudmFsdWUoKS0+
dmFsdWUoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMYXp5SlNWYWx1ZTo6
U2luZ2xlQ2hhcmFjdGVyU3RyaW5nOgorICAgICAgICBjYXNlIExhenlKU1ZhbHVlOjpLbm93blN0
cmluZ0ltcGw6CisgICAgICAgIGNhc2UgTGF6eUpTVmFsdWU6Ok5ld1N0cmluZ0ltcGw6CisgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY1N0cmluZyk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgSWRlbnRpdHk6IHsKICAgICAgICAgZm9yTm9kZShub2RlKSA9IGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9i
YmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9i
YmVyaXplLmgJKHJldmlzaW9uIDE5Nzc4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDcgQEAgdm9pZCBj
bG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgSW50NTJDb25zdGFu
dDoKICAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlLCBub2RlLT5jb25zdGFudCgpKSk7CiAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgCisKICAgICBjYXNlIElkZW50aXR5OgogICAgIGNhc2UgUGhh
bnRvbToKICAgICBjYXNlIENoZWNrOgpAQCAtMTIxLDYgKzEyMSwxMSBAQCB2b2lkIGNsb2JiZXJp
emUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVk
aWF0ZToKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICBjYXNlIExhenlKU0NvbnN0YW50
OgorICAgICAgICAvLyBXZSBzaG91bGQgZW5hYmxlIENTRSBvZiBMYXp5SlNDb25zdGFudC4gSXQn
cyBhIGxpdHRsZSBhbm5veWluZyBzaW5jZSBMYXp5SlNWYWx1ZSBoYXMKKyAgICAgICAgLy8gbW9y
ZSBiaXRzIHRoYW4gd2UgY3VycmVudGx5IGhhdmUgaW4gUHVyZVZhbHVlLgorICAgICAgICByZXR1
cm47CisgICAgICAgIAogICAgIGNhc2UgQXJpdGhJTXVsOgogICAgIGNhc2UgQXJpdGhBYnM6CiAg
ICAgY2FzZSBBcml0aENsejMyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
b2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9l
c0dDLmNwcAkocmV2aXNpb24gMTk3NzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBAIGJvb2wgZG9lc0dD
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgY2Fz
ZSBEb3VibGVDb25zdGFudDoKICAgICBjYXNlIEludDUyQ29uc3RhbnQ6CisgICAgY2FzZSBMYXp5
SlNDb25zdGFudDoKICAgICBjYXNlIElkZW50aXR5OgogICAgIGNhc2UgR2V0Q2FsbGVlOgogICAg
IGNhc2UgR2V0QXJndW1lbnRDb3VudDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTk3NzgxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1MSw2ICsx
NDUxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gSGF2ZSB0aGVzZSBuby1vcCBjYXNlcyBoZXJl
IHRvIGVuc3VyZSB0aGF0IG5vYm9keSBmb3JnZXRzIHRvIGFkZCBoYW5kbGVycyBmb3IgbmV3IG9w
Y29kZXMuCiAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAgICAgICAgIGNhc2UgSlNDb25zdGFu
dDoKKyAgICAgICAgY2FzZSBMYXp5SlNDb25zdGFudDoKICAgICAgICAgY2FzZSBEb3VibGVDb25z
dGFudDoKICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgY2FzZSBHZXRDYWxsZWU6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zyb3plblZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zyb3plblZhbHVlLmNwcAkocmV2
aXNpb24gMTk3NzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGcm96ZW5WYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklU
KQogCisjaW5jbHVkZSAiREZHTGF6eUpTVmFsdWUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTM4LDYgKzM5LDExIEBAIEZy
b3plblZhbHVlKiBGcm96ZW5WYWx1ZTo6ZW1wdHlTaW5nbGV0b24KICAgICByZXR1cm4gJmVtcHR5
OwogfQogCitTdHJpbmcgRnJvemVuVmFsdWU6OnRyeUdldFN0cmluZyhHcmFwaCYgZ3JhcGgpCit7
CisgICAgcmV0dXJuIExhenlKU1ZhbHVlKHRoaXMpLnRyeUdldFN0cmluZyhncmFwaCk7Cit9CisK
IHZvaWQgRnJvemVuVmFsdWU6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENv
bnRleHQqIGNvbnRleHQpIGNvbnN0CiB7CiAgICAgaWYgKCEhbV92YWx1ZSAmJiBtX3ZhbHVlLmlz
Q2VsbCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGcm96ZW5WYWx1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRnJvemVuVmFsdWUu
aAkocmV2aXNpb24gMTk3NzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGcm96
ZW5WYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkzLDYgKzkzLDggQEAgcHVibGljOgogICAg
IAogICAgIC8vIFRoZSBzdHJlbmd0aCBvZiB0aGUgdmFsdWUgaXRzZWxmLiBUaGUgc3RydWN0dXJl
IGlzIGFsbW9zdCBhbHdheXMgd2Vhay4KICAgICBWYWx1ZVN0cmVuZ3RoIHN0cmVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gbV9zdHJlbmd0aDsgfQorCisgICAgU3RyaW5nIHRyeUdldFN0cmluZyhHcmFw
aCYpOwogICAgIAogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1w
Q29udGV4dCogY29udGV4dCkgY29uc3Q7CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24g
MTk3NzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5n
IGNvcHkpCkBAIC04NjgsNiArODY4LDcgQEAgcHVibGljOgogICAgIEJhZzxDYWxsVmFyYXJnc0Rh
dGE+IG1fY2FsbFZhcmFyZ3NEYXRhOwogICAgIEJhZzxMb2FkVmFyYXJnc0RhdGE+IG1fbG9hZFZh
cmFyZ3NEYXRhOwogICAgIEJhZzxTdGFja0FjY2Vzc0RhdGE+IG1fc3RhY2tBY2Nlc3NEYXRhOwor
ICAgIEJhZzxMYXp5SlNWYWx1ZT4gbV9sYXp5SlNWYWx1ZXM7CiAgICAgVmVjdG9yPElubGluZVZh
cmlhYmxlRGF0YSwgND4gbV9pbmxpbmVWYXJpYWJsZURhdGE7CiAgICAgSGFzaE1hcDxDb2RlQmxv
Y2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2
ZW5lc3M7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVL
aWxscz4+IG1fYnl0ZWNvZGVLaWxsczsKQEAgLTg4MCw2ICs4ODEsOSBAQCBwdWJsaWM6CiAgICAg
dW5zaWduZWQgbV9sb2NhbFZhcnM7CiAgICAgdW5zaWduZWQgbV9uZXh0TWFjaGluZUxvY2FsOwog
ICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyU2xvdHM7CisgICAgCisgICAgSGFzaFNldDxTdHJpbmc+
IG1fbG9jYWxTdHJpbmdzOworICAgIEhhc2hNYXA8U3RyaW5nSW1wbCosIFN0cmluZz4gbV9jb3Bp
ZWRTdHJpbmdzOwogCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBzdGQ6OnVub3JkZXJlZF9t
YXA8aW50NjRfdCwgZG91YmxlKj4gbV9kb3VibGVDb25zdGFudHNNYXA7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmNwcAkocmV2aXNpb24gMTk3Nzgx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMYXp5SlNWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDEwICsyOCwxOSBAQAogCiAjaWYgRU5BQkxFKERGR19K
SVQpCiAKKyNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCitMYXp5SlNWYWx1ZSBMYXp5SlNWYWx1
ZTo6bmV3U3RyaW5nKEdyYXBoJiBncmFwaCwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAg
TGF6eUpTVmFsdWUgcmVzdWx0OworICAgIHJlc3VsdC5tX2tpbmQgPSBOZXdTdHJpbmdJbXBsOwor
ICAgIHJlc3VsdC51LnN0cmluZ0ltcGwgPSBncmFwaC5tX2xvY2FsU3RyaW5ncy5hZGQoc3RyaW5n
KS5pdGVyYXRvci0+aW1wbCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEpTVmFsdWUgTGF6
eUpTVmFsdWU6OmdldFZhbHVlKFZNJiB2bSkgY29uc3QKIHsKICAgICBzd2l0Y2ggKG1fa2luZCkg
ewpAQCAtNDAsNiArNDksNyBAQCBKU1ZhbHVlIExhenlKU1ZhbHVlOjpnZXRWYWx1ZShWTSYgdm0p
IGNvCiAgICAgY2FzZSBTaW5nbGVDaGFyYWN0ZXJTdHJpbmc6CiAgICAgICAgIHJldHVybiBqc1Np
bmdsZUNoYXJhY3RlclN0cmluZygmdm0sIHUuY2hhcmFjdGVyKTsKICAgICBjYXNlIEtub3duU3Ry
aW5nSW1wbDoKKyAgICBjYXNlIE5ld1N0cmluZ0ltcGw6CiAgICAgICAgIHJldHVybiBqc1N0cmlu
Zygmdm0sIHUuc3RyaW5nSW1wbCk7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC03NSw2ICs4NSw0OCBAQCBzdGF0aWMgVHJpU3RhdGUgZXF1YWxUb1N0cmluZ0lt
cGwoSlNWYWx1CiAgICAgcmV0dXJuIHRyaVN0YXRlKFdURjo6ZXF1YWwoc3RyaW5nSW1wbCwgc3Ry
aW5nKSk7CiB9CiAKK1N0cmluZ0ltcGwqIHRyeUdldFN0cmluZ0ltcGwoKSBjb25zdAoreworICAg
IHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBLbm93blN0cmluZ0ltcGw6CisgICAgY2FzZSBO
ZXdTdHJpbmdJbXBsOgorICAgICAgICByZXR1cm4gdS5zdHJpbmdJbXBsOworCisgICAgY2FzZSBL
bm93blZhbHVlOgorICAgICAgICBpZiAoSlNTdHJpbmcqIHN0cmluZyA9IGpzRHluYW1pY0Nhc3Q8
SlNTdHJpbmcqPih2YWx1ZSgpLT52YWx1ZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBzdHJpbmct
PnRyeUdldFZhbHVlSW1wbCgpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KK30KKworU3RyaW5nIExhenlKU1Zh
bHVlOjp0cnlHZXRTdHJpbmcoR3JhcGgmIGdyYXBoKSBjb25zdAoreworICAgIHN3aXRjaCAobV9r
aW5kKSB7CisgICAgY2FzZSBOZXdTdHJpbmdJbXBsOgorICAgICAgICByZXR1cm4gdS5zdHJpbmdJ
bXBsOworCisgICAgY2FzZSBTaW5nbGVDaGFyYWN0ZXJTdHJpbmc6CisgICAgICAgIHJldHVybiBT
dHJpbmcoJnUuY2hhcmFjdGVyLCAxKTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChTdHJp
bmdJbXBsKiByZXN1bHQgPSB0cnlHZXRTdHJpbmdJbXBsKCkpIHsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGdpbm9ybW91c1N0cmluZ0xlbmd0aCA9IDEwMDAwOworICAgICAgICAgICAgaWYgKHJlc3Vs
dC0+bGVuZ3RoKCkgPiBnaW5vcm1vdXNTdHJpbmdMZW5ndGgpCisgICAgICAgICAgICAgICAgcmV0
dXJuIFN0cmluZygpOworICAgICAgICAgICAgCisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGdy
YXBoLm1fY29waWVkU3RyaW5ncy5hZGQocmVzdWx0LCBTdHJpbmcoKSk7CisgICAgICAgICAgICBp
ZiAocmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSA9IHJlc3VsdC0+Y2xvbmUoKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisgICAgfQorfQorCiBUcmlTdGF0ZSBMYXp5SlNWYWx1ZTo6c3RyaWN0RXF1YWwoY29uc3QgTGF6
eUpTVmFsdWUmIG90aGVyKSBjb25zdAogewogICAgIHN3aXRjaCAobV9raW5kKSB7CkBAIC04NSw2
ICsxMzcsNyBAQCBUcmlTdGF0ZSBMYXp5SlNWYWx1ZTo6c3RyaWN0RXF1YWwoY29uc3QgCiAgICAg
ICAgIGNhc2UgU2luZ2xlQ2hhcmFjdGVyU3RyaW5nOgogICAgICAgICAgICAgcmV0dXJuIGVxdWFs
VG9TaW5nbGVDaGFyYWN0ZXIodmFsdWUoKS0+dmFsdWUoKSwgb3RoZXIuY2hhcmFjdGVyKCkpOwog
ICAgICAgICBjYXNlIEtub3duU3RyaW5nSW1wbDoKKyAgICAgICAgY2FzZSBOZXdTdHJpbmdJbXBs
OgogICAgICAgICAgICAgcmV0dXJuIGVxdWFsVG9TdHJpbmdJbXBsKHZhbHVlKCktPnZhbHVlKCks
IG90aGVyLnN0cmluZ0ltcGwoKSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC05Myw2
ICsxNDYsNyBAQCBUcmlTdGF0ZSBMYXp5SlNWYWx1ZTo6c3RyaWN0RXF1YWwoY29uc3QgCiAgICAg
ICAgIGNhc2UgU2luZ2xlQ2hhcmFjdGVyU3RyaW5nOgogICAgICAgICAgICAgcmV0dXJuIHRyaVN0
YXRlKGNoYXJhY3RlcigpID09IG90aGVyLmNoYXJhY3RlcigpKTsKICAgICAgICAgY2FzZSBLbm93
blN0cmluZ0ltcGw6CisgICAgICAgIGNhc2UgTmV3U3RyaW5nSW1wbDoKICAgICAgICAgICAgIGlm
IChvdGhlci5zdHJpbmdJbXBsKCktPmxlbmd0aCgpICE9IDEpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIEZhbHNlVHJpU3RhdGU7CiAgICAgICAgICAgICByZXR1cm4gdHJpU3RhdGUob3RoZXIuc3Ry
aW5nSW1wbCgpLT5hdCgwKSA9PSBjaGFyYWN0ZXIoKSk7CkBAIC0xMDEsOCArMTU1LDEwIEBAIFRy
aVN0YXRlIExhenlKU1ZhbHVlOjpzdHJpY3RFcXVhbChjb25zdCAKICAgICAgICAgfQogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEtub3duU3RyaW5nSW1wbDoKKyAgICBjYXNlIE5ld1N0cmluZ0lt
cGw6CiAgICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CiAgICAgICAgIGNhc2UgS25vd25T
dHJpbmdJbXBsOgorICAgICAgICBjYXNlIE5ld1N0cmluZ0ltcGw6CiAgICAgICAgICAgICByZXR1
cm4gdHJpU3RhdGUoV1RGOjplcXVhbChzdHJpbmdJbXBsKCksIG90aGVyLnN0cmluZ0ltcGwoKSkp
OwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIG90aGVyLnN0cmljdEVxdWFs
KCp0aGlzKTsKQEAgLTE0Myw2ICsxOTksNDEgQEAgdWludHB0cl90IExhenlKU1ZhbHVlOjpzd2l0
Y2hMb29rdXBWYWx1ZQogICAgIH0KIH0KIAordm9pZCBMYXp5SlNWYWx1ZTo6ZW1pdChDQ2FsbEhl
bHBlcnMmIGppdCwgSlNWYWx1ZVJlZ3MgcmVzdWx0KSBjb25zdAoreworICAgIGlmIChtX2tpbmQg
PT0gS25vd25WYWx1ZSkgeworICAgICAgICBqaXQubW92ZVZhbHVlKHZhbHVlKCktPnZhbHVlKCks
IHJlc3VsdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBJdCBtdXN0IGJlIHNv
bWUga2luZCBvZiBjZWxsLgorI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgaml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoQ2VsbFRhZyksIHJlc3VsdC50YWdHUFIoKSk7CisjZW5k
aWYKKyAgICBDQ2FsbEhlbHBlcnM6OkRhdGFMYWJlbFB0ciBsYWJlbCA9IGppdC5tb3ZlV2l0aFBh
dGNoKAorICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RhdGljX2Nhc3Q8aW50
cHRyX3Q+KDB4ZDFlN2JlZWZsdSkpLAorICAgICAgICByZXN1bHQucGF5bG9hZEdQUigpKTsKKwor
ICAgIExhenlKU1ZhbHVlIHRoaXNWYWx1ZSA9ICp0aGlzOworCisgICAgLy8gT25jZSB3ZSBkbyB0
aGlzLCB3ZSdyZSBjb21taXR0ZWQuIE90aGVyd2lzZSB3ZSBsZWFrIG1lbW9yeS4gTm90ZSB0aGF0
IHdlIGNhbGwgcmVmL2RlcmVmCisgICAgLy8gbWFudWFsbHkgdG8gZW5zdXJlIHRoYXQgdGhlcmUg
aXMgbm8gY29uY3VycmVuY3kgc2hhZGluZXNzLiBXZSBhcmUgZG9pbmcgc29tZXRoaW5nIGhlcmUK
KyAgICAvLyB0aGF0IG1pZ2h0IGJlIHJhdGhlciBicnV0YWw6IHRyYW5zZmVyaW5nIG93bmVyc2hp
cCBvZiB0aGlzIHN0cmluZy4KKyAgICBpZiAobV9raW5kID09IE5ld1N0cmluZ0ltcGwpCisgICAg
ICAgIHRoaXNWYWx1ZS51LnN0cmluZ0ltcGwtPnJlZigpOworICAgIAorICAgIGppdC5hZGRMaW5r
VGFzaygKKyAgICAgICAgW3RoaXNWYWx1ZSwgbGFiZWxdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVy
KSB7CisgICAgICAgICAgICBKU1ZhbHVlIHJlYWxWYWx1ZSA9IHRoaXNWYWx1ZS5nZXRWYWx1ZShs
aW5rQnVmZmVyLnZtKCkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVhbFZhbHVlLmlz
Q2VsbCgpKTsKKworICAgICAgICAgICAgaWYgKHRoaXNWYWx1ZS5tX2tpbmQgPT0gTmV3U3RyaW5n
SW1wbCkKKyAgICAgICAgICAgICAgICB0aGlzVmFsdWUudS5zdHJpbmdJbXBsLT5kZXJlZigpOwor
CisgICAgICAgICAgICBsaW5rQnVmZmVyLnBhdGNoKGxhYmVsLCByZWFsVmFsdWUuYXNDZWxsKCkp
OworICAgICAgICB9KTsKK30KKwogdm9pZCBMYXp5SlNWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmlu
dFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKIHsKICAgICBzd2l0Y2gg
KG1fa2luZCkgewpAQCAtMTU1LDcgKzI0NiwxMCBAQCB2b2lkIExhenlKU1ZhbHVlOjpkdW1wSW5D
b250ZXh0KFByaW50U3RyCiAgICAgICAgIG91dC5wcmludCgiIC8gIiwgU3RyaW5nSW1wbDo6dXRm
OEZvckNoYXJhY3RlcnMoJnUuY2hhcmFjdGVyLCAxKSwgIikiKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIGNhc2UgS25vd25TdHJpbmdJbXBsOgotICAgICAgICBvdXQucHJpbnQoIkxhenk6U3RyaW5n
KCIsIHN0cmluZ0ltcGwoKSwgIikiKTsKKyAgICAgICAgb3V0LnByaW50KCJMYXp5Oktub3duU3Ry
aW5nKCIsIHN0cmluZ0ltcGwoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTmV3
U3RyaW5nSW1wbDoKKyAgICAgICAgb3V0LnByaW50KCJMYXp5Ok5ld1N0cmluZygiLCBzdHJpbmdJ
bXBsKCksICIpIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eUpT
VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlK
U1ZhbHVlLmgJKHJldmlzaW9uIDE5Nzc4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTGF6eUpTVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsMTcgKzM0LDIx
IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorY2xhc3MgQ0NhbGxIZWxw
ZXJzOworY2xhc3MgR3JhcGg7CisKIC8vIFJlcHJlc2VudHMgZWl0aGVyIGEgSlNWYWx1ZSwgb3Ig
Zm9yIEpTVmFsdWVzIHRoYXQgcmVxdWlyZSBhbGxvY2F0aW9uIGluIHRoZSBoZWFwLAogLy8gaXQg
dGVsbHMgeW91IGV2ZXJ5dGhpbmcgeW91J2QgbmVlZCB0byBrbm93IGluIG9yZGVyIHRvIGFsbG9j
YXRlIGl0LgogCi1lbnVtIExhemluZXNzS2luZCB7Ci0gICAgS25vd25WYWx1ZSwKLSAgICBTaW5n
bGVDaGFyYWN0ZXJTdHJpbmcsCi0gICAgS25vd25TdHJpbmdJbXBsCi19OwotCiBjbGFzcyBMYXp5
SlNWYWx1ZSB7CiBwdWJsaWM6CisgICAgZW51bSBMYXppbmVzc0tpbmQgeworICAgICAgICBLbm93
blZhbHVlLAorICAgICAgICBTaW5nbGVDaGFyYWN0ZXJTdHJpbmcsCisgICAgICAgIEtub3duU3Ry
aW5nSW1wbCwKKyAgICAgICAgTmV3U3RyaW5nSW1wbAorICAgIH07CisKICAgICBMYXp5SlNWYWx1
ZShGcm96ZW5WYWx1ZSogdmFsdWUgPSBGcm96ZW5WYWx1ZTo6ZW1wdHlTaW5nbGV0b24oKSkKICAg
ICAgICAgOiBtX2tpbmQoS25vd25WYWx1ZSkKICAgICB7CkBAIC02Niw2ICs3MCwxMCBAQCBwdWJs
aWM6CiAgICAgICAgIHJlc3VsdC51LnN0cmluZ0ltcGwgPSBzdHJpbmc7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQorCisgICAgc3RhdGljIExhenlKU1ZhbHVlIG5ld1N0cmluZyhHcmFw
aCYsIGNvbnN0IFN0cmluZyYpOworCisgICAgTGF6aW5lc3NLaW5kIGtpbmQoKSBjb25zdCB7IHJl
dHVybiBtX2tpbmQ7IH0KICAgICAKICAgICBGcm96ZW5WYWx1ZSogdHJ5R2V0VmFsdWUoR3JhcGgm
KSBjb25zdAogICAgIHsKQEAgLTg3LDE2ICs5NSwyMiBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VS
VChtX2tpbmQgPT0gU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKTsKICAgICAgICAgcmV0dXJuIHUuY2hh
cmFjdGVyOwogICAgIH0KKworICAgIFN0cmluZ0ltcGwqIHRyeUdldFN0cmluZ0ltcGwoKSBjb25z
dDsKKyAgICAKKyAgICBTdHJpbmcgdHJ5R2V0U3RyaW5nKEdyYXBoJikgY29uc3Q7CiAgICAgCiAg
ICAgU3RyaW5nSW1wbCogc3RyaW5nSW1wbCgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQo
bV9raW5kID09IEtub3duU3RyaW5nSW1wbCk7CisgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gS25v
d25TdHJpbmdJbXBsIHx8IG1fa2luZCA9PSBOZXdTdHJpbmdJbXBsKTsKICAgICAgICAgcmV0dXJu
IHUuc3RyaW5nSW1wbDsKICAgICB9Ci0gICAgCisKICAgICBUcmlTdGF0ZSBzdHJpY3RFcXVhbChj
b25zdCBMYXp5SlNWYWx1ZSYgb3RoZXIpIGNvbnN0OwogICAgIAogICAgIHVpbnRwdHJfdCBzd2l0
Y2hMb29rdXBWYWx1ZShTd2l0Y2hLaW5kKSBjb25zdDsKKworICAgIHZvaWQgZW1pdChDQ2FsbEhl
bHBlcnMmLCBKU1ZhbHVlUmVncyk7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQq
KSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAko
cmV2aXNpb24gMTk3NzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTIsNiArOTIsNyBAQCBFeGl0TW9kZSBtYXlFeGl0KEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kCiAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICBjYXNlIEpT
Q29uc3RhbnQ6CiAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKKyAgICBjYXNlIExhenlKU0NvbnN0
YW50OgogICAgIGNhc2UgSW50NTJDb25zdGFudDoKICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgY2Fz
ZSBTZXRMb2NhbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAkocmV2
aXNpb24gMTk3NzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTkzLDYgKzE5MywxNSBAQCB2b2lkIE5vZGU6OmNvbnZlcnRUb1B1
dENsb3N1cmVWYXJIaW50KCkKICAgICAgICAgY2hpbGQxKCkubm9kZSgpLCBjaGlsZDIoKS5ub2Rl
KCkpOwogfQogCitTdHJpbmcgTm9kZTo6dHJ5R2V0U3RyaW5nKEdyYXBoJiBncmFwaCkgY29uc3QK
K3sKKyAgICBpZiAoaGFzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGNvbnN0YW50KCktPnRy
eUdldFN0cmluZyhncmFwaCk7CisgICAgaWYgKGhhc0xhenlKU1ZhbHVlKCkpCisgICAgICAgIHJl
dHVybiBsYXp5SlNWYWx1ZSgpLnRyeUdldFN0cmluZyhncmFwaCk7CisgICAgcmV0dXJuIFN0cmlu
ZygpOworfQorCiBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciBOb2RlOjpwcm9tb3RlZExvY2F0
aW9uRGVzY3JpcHRvcigpCiB7CiAgICAgcmV0dXJuIFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9y
KHN0YXRpY19jYXN0PFByb21vdGVkTG9jYXRpb25LaW5kPihtX29wSW5mbyksIG1fb3BJbmZvMik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTk3NzgxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc0Myw2ICs3NDMsMTkgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KIAorICAgIGJvb2wgaGFzTGF6eUpTVmFsdWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG9wKCkgPT0gTGF6eUpTQ29uc3RhbnQ7CisgICAgfQorCisgICAgTGF6eUpTVmFsdWUgbGF6eUpT
VmFsdWUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0xhenlKU1ZhbHVlKCkpOworICAgICAg
ICByZXR1cm4gKmJpdHdpc2VfY2FzdDxMYXp5SlNWYWx1ZSo+KG1fb3BJbmZvKTsKKyAgICB9CisK
KyAgICBTdHJpbmcgdHJ5R2V0U3RyaW5nKEdyYXBoJikgY29uc3Q7CisKICAgICBKU1ZhbHVlIGlu
aXRpYWxpemF0aW9uVmFsdWVGb3JBY3RpdmF0aW9uKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFT
U0VSVChvcCgpID09IENyZWF0ZUFjdGl2YXRpb24pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTk3NzgxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw5IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhEb3VibGVDb25zdGFu
dCwgTm9kZVJlc3VsdERvdWJsZSkgXAogICAgIG1hY3JvKEludDUyQ29uc3RhbnQsIE5vZGVSZXN1
bHRJbnQ1MikgXAogICAgIFwKKyAgICAvKiBMYXp5IEpTVmFsdWUgY29uc3RhbnQuIFdlIGRvbid0
IGtub3cgdGhlIEpTVmFsdWUgYml0cyBvZiBpdCB5ZXQuICovXAorICAgIG1hY3JvKExhenlKU0Nv
bnN0YW50LCBOb2RlUmVzdWx0SlMpIFwKKyAgICBcCiAgICAgLyogTWFya2VyIHRvIGluZGljYXRl
IHRoYXQgYW4gb3BlcmF0aW9uIHdhcyBvcHRpbWl6ZWQgZW50aXJlbHkgYW5kIGFsbCB0aGF0IGlz
IGxlZnQgKi9cCiAgICAgLyogaXMgdG8gbWFrZSBvbmUgbm9kZSBhbGlhcyBhbm90aGVyLiBDU0Ug
d2lsbCBsYXRlciB1c3VhbGx5IGVsaW1pbmF0ZSB0aGlzIG5vZGUsICovXAogICAgIC8qIHRob3Vn
aCBpdCBtYXkgY2hvb3NlIG5vdCB0byBpZiBpdCB3b3VsZCBjb3JydXB0IHByZWRpY3Rpb25zICh2
ZXJ5IHJhcmUpLiAqL1wKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxOTc3
ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjY4LDcgKzY2OCw4IEBAIHByaXZhdGU6CiAg
ICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyOgogICAgICAgICBjYXNlIEdldFN0YWNrOgogICAgICAg
ICBjYXNlIEdldFJlZ0V4cE9iamVjdExhc3RJbmRleDoKLSAgICAgICAgY2FzZSBTZXRSZWdFeHBP
YmplY3RMYXN0SW5kZXg6IHsKKyAgICAgICAgY2FzZSBTZXRSZWdFeHBPYmplY3RMYXN0SW5kZXg6
CisgICAgICAgIGNhc2UgTGF6eUpTQ29uc3RhbnQ6IHsKICAgICAgICAgICAgIC8vIFRoaXMgbm9k
ZSBzaG91bGQgbmV2ZXIgYmUgdmlzaWJsZSBhdCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0aW9uLiBJ
dCBpcwogICAgICAgICAgICAgLy8gaW5zZXJ0ZWQgYnkgZml4dXAoKSwgd2hpY2ggZm9sbG93cyB0
aGlzIHBoYXNlLgogICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJVbmV4cGVj
dGVkIG5vZGUgZHVyaW5nIHByZWRpY3Rpb24gcHJvcGFnYXRpb24iKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxOTc3ODEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM3LDYgKzEzNyw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0
YXRlVHlwZSYgc3QKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgY2FzZSBEb3VibGVDb25zdGFu
dDoKICAgICBjYXNlIEludDUyQ29uc3RhbnQ6CisgICAgY2FzZSBMYXp5SlNDb25zdGFudDoKICAg
ICBjYXNlIElkZW50aXR5OgogICAgIGNhc2UgVG9UaGlzOgogICAgIGNhc2UgQ3JlYXRlVGhpczoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTk3NzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg3NCw2
ICsxODc0LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgaW5pdENvbnN0YW50SW5mbyhub2RlKTsKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNl
IExhenlKU0NvbnN0YW50OgorICAgICAgICBjb21waWxlTGF6eUpTQ29uc3RhbnQobm9kZSk7Cisg
ICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBJZGVudGl0eTogewogICAgICAgICBzcGVjdWxhdGUo
bm9kZSwgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVz
ZUtpbmQoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxOTc3ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTgy
LDYgKzE5ODIsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgICAgICBpbml0Q29uc3RhbnRJbmZvKG5vZGUpOwogICAgICAgICBicmVhazsKIAorICAgIGNh
c2UgTGF6eUpTQ29uc3RhbnQ6CisgICAgICAgIGNvbXBpbGVMYXp5SlNDb25zdGFudChub2RlKTsK
KyAgICAgICAgYnJlYWs7CisKICAgICBjYXNlIElkZW50aXR5OiB7CiAgICAgICAgIHNwZWN1bGF0
ZShub2RlLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTk3NzgxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2NDcsNiAr
NzY0NywxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU2V0UmVnRXhwT2JqCiAgICAg
bm9SZXN1bHQobm9kZSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMYXp5SlND
b25zdGFudChOb2RlKiBub2RlKQoreworICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKKyAgICBu
b2RlLT5sYXp5SlNWYWx1ZSgpLmVtaXQobV9qaXQsIHJlc3VsdFJlZ3MpOworICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0UmVncywgbm9kZSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
IAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCShyZXZpc2lvbiAxOTc3ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTI0MDAsNiArMjQwMCw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVQdXRBY2Nlc3NvckJ5VmFsKE5vZGUqKTsKICAgICB2
b2lkIGNvbXBpbGVHZXRSZWdFeHBPYmplY3RMYXN0SW5kZXgoTm9kZSopOwogICAgIHZvaWQgY29t
cGlsZVNldFJlZ0V4cE9iamVjdExhc3RJbmRleChOb2RlKik7CisgICAgdm9pZCBjb21waWxlTGF6
eUpTQ29uc3RhbnQoTm9kZSopOwogICAgIAogICAgIHZvaWQgbW92ZVRydWVUbyhHUFJSZWcpOwog
ICAgIHZvaWQgbW92ZUZhbHNlVG8oR1BSUmVnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE5Nzc4MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQsNiArNDQsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSog
CiAgICAgCiAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBKU0NvbnN0YW50Ogor
ICAgIGNhc2UgTGF6eUpTQ29uc3RhbnQ6CiAgICAgY2FzZSBHZXRMb2NhbDoKICAgICBjYXNlIFNl
dExvY2FsOgogICAgIGNhc2UgUHV0U3RhY2s6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAxOTc3ODEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ0Niw2ICs0NDYsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEludDUyQ29uc3RhbnQ6CiAg
ICAgICAgICAgICBjb21waWxlSW50NTJDb25zdGFudCgpOwogICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgTGF6eUpTQ29uc3RhbnQ6CisgICAgICAgICAgICBjb21waWxlTGF6eUpTQ29u
c3RhbnQoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERvdWJsZVJlcDoKICAg
ICAgICAgICAgIGNvbXBpbGVEb3VibGVSZXAoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTA0
NCw2ICsxMDQ3LDE4IEBAIHByaXZhdGU6CiAgICAgICAgIHNldFN0cmljdEludDUyKG1fb3V0LmNv
bnN0SW50NjQodmFsdWUpKTsKICAgICB9CiAKKyAgICB2b2lkIGNvbXBpbGVMYXp5SlNDb25zdGFu
dCgpCisgICAgeworICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBtX291dC5w
YXRjaHBvaW50KEludDY0KTsKKyAgICAgICAgTGF6eUpTVmFsdWUgdmFsdWUgPSBtX25vZGUtPmxh
enlKU1ZhbHVlKCk7CisgICAgICAgIHBhdGNocG9pbnQtPnNldEdlbmVyYXRvcigKKyAgICAgICAg
ICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFt
cyYgcGFyYW1zKSB7CisgICAgICAgICAgICAgICAgdmFsdWUuZW1pdChqaXQsIEpTVmFsdWVSZWdz
KHBhcmFtc1swXS5ncHIoKSkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIHBhdGNocG9pbnQt
PmVmZmVjdHMgPSBFZmZlY3RzOjpub25lKCk7CisgICAgICAgIHNldEpTVmFsdWUocGF0Y2hwb2lu
dCk7CisgICAgfQorCiAgICAgdm9pZCBjb21waWxlRG91YmxlUmVwKCkKICAgICB7CiAgICAgICAg
IHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4
dC9TdHJpbmdJbXBsLmNwcAkocmV2aXNpb24gMTk3NzgxKQorKysgU291cmNlL1dURi93dGYvdGV4
dC9TdHJpbmdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM3LDYgKzIzNywxNCBAQCBSZWY8
U3RyaW5nSW1wbD4gU3RyaW5nSW1wbDo6cmVhbGxvY2F0ZShQCiAgICAgcmV0dXJuIHJlYWxsb2Nh
dGVJbnRlcm5hbChvcmlnaW5hbFN0cmluZywgbGVuZ3RoLCBkYXRhKTsKIH0KIAorCitSZWY8U3Ry
aW5nSW1wbD4gU3RyaW5nSW1wbDo6Y2xvbmUoKQoreworICAgIGlmIChpczhCaXQoKSkKKyAgICAg
ICAgcmV0dXJuIGNyZWF0ZShjaGFyYWN0ZXJzOCgpLCBsZW5ndGgoKSk7CisgICAgcmV0dXJuIGNy
ZWF0ZShjaGFyYWN0ZXJzMTYoKSwgbGVuZ3RoKCkpOworfQorCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
Q2hhclR5cGU+CiBpbmxpbmUgUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNyZWF0ZUludGVy
bmFsKGNvbnN0IENoYXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAkocmV2aXNpb24gMTk3NzgxKQorKysgU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxNyw2ICs0MTcsOCBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiByZWFsbG9jYXRlKFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gb3JpZ2luYWxTdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgTENoYXIqJiBk
YXRhKTsKICAgICBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IHJlYWxsb2NhdGUoUGFzc1JlZlB0cjxT
dHJpbmdJbXBsPiBvcmlnaW5hbFN0cmluZywgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciomIGRhdGEp
OwogCisgICAgUmVmPFN0cmluZ0ltcGw+IGNsb25lKCkgY29uc3Q7CisKICAgICBzdGF0aWMgdW5z
aWduZWQgZmxhZ3NPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU3RyaW5nSW1wbCwg
bV9oYXNoQW5kRmxhZ3MpOyB9CiAgICAgc3RhdGljIHVuc2lnbmVkIGZsYWdJczhCaXQoKSB7IHJl
dHVybiBzX2hhc2hGbGFnOEJpdEJ1ZmZlcjsgfQogICAgIHN0YXRpYyB1bnNpZ25lZCBmbGFnSXNB
dG9taWMoKSB7IHJldHVybiBzX2hhc2hGbGFnU3RyaW5nS2luZElzQXRvbWljOyB9CkBAIC01ODUs
OCArNTg3LDYgQEAgcHVibGljOgogCiAgICAgaW5saW5lIHZvaWQgcmVmKCkKICAgICB7Ci0gICAg
ICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKLQogICAgICAgICBTVFJJTkdfU1RB
VFNfUkVGX1NUUklORygqdGhpcyk7CiAKICAgICAgICAgbV9yZWZDb3VudCArPSBzX3JlZkNvdW50
SW5jcmVtZW50OwpAQCAtNTk0LDggKzU5NCw2IEBAIHB1YmxpYzoKIAogICAgIGlubGluZSB2b2lk
IGRlcmVmKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsK
LQogICAgICAgICBTVFJJTkdfU1RBVFNfREVSRUZfU1RSSU5HKCp0aGlzKTsKIAogICAgICAgICB1
bnNpZ25lZCB0ZW1wUmVmQ291bnQgPSBtX3JlZkNvdW50IC0gc19yZWZDb3VudEluY3JlbWVudDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273373</attachid>
            <date>2016-03-08 19:31:35 -0800</date>
            <delta_ts>2016-03-08 19:57:42 -0800</delta_ts>
            <desc>wow, it works!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>36851</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk3ODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOCBA
QAorMjAxNi0wMy0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgYmUgYWJsZSB0byBjb25zdGFudC1mb2xkIHN0cmluZ3MKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTIwMAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWRkcyBjb25zdGFudC1m
b2xkaW5nIG9mIHN0cmluZzEgKyBzdHJpbmcyIGFuZCBzdHJpbmcubGVuZ3RoLiBUaGUgYWN0dWFs
IGZvbGRpbmcKKyAgICAgICAgcnVsZSBpcyBlYXN5LCBidXQgdGhlcmUgYXJlIHNvbWUgZ290Y2hh
cy4KKworICAgICAgICBUaGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBERkcgY2Fubm90IGFsbG9jYXRl
IG5ldyBKU1N0cmluZyBvYmplY3RzIHVudGlsIHdlIGFyZSBvbiB0aGUKKyAgICAgICAgbWFpbiB0
aHJlYWQuIFNvLCBERkcgSVIgbXVzdCBoYXZlIGEgbm9kZSBmb3IgYSBKU1ZhbHVlIHN0cmluZyBj
b25zdGFudCB0aGF0IGhhc24ndCBiZWVuCisgICAgICAgIGNyZWF0ZWQgeWV0IC0gaS5lLiBpdCBk
b2Vzbid0IGhhdmUgYW55IGNvbmNyZXRlIEpTVmFsdWUgYml0cyB5ZXQuCisKKyAgICAgICAgV2Ug
aGF2ZSB0aGUgYWJpbGl0eSB0byBzcGVhayBvZiBzdWNoIHRoaW5ncywgdXNpbmcgTGF6eUpTVmFs
dWUuIEJ1dCB0aGF0J3MgYSBjbGFzcywgbm90CisgICAgICAgIGEgbm9kZSB0eXBlLiBUaGlzIHBh
dGNoIG5vdyBhZGRzIGEgbm9kZSB0eXBlLCBMYXp5SlNDb25zdGFudCwgd2hpY2ggaXMgYSBOb2Rl
IHRoYXQgaG9sZHMKKyAgICAgICAgYSBMYXp5SlNWYWx1ZS4KKworICAgICAgICBUaGlzIHB1dHMg
dXMgaW4gYSB3ZWlyZCBzaXR1YXRpb246IEFJIHVzZXMgSlNWYWx1ZSB0byByZXByZXNlbnQgY29u
c3RhbnRzLiBJdCB3b3VsZCB0YWtlCisgICAgICAgIGEgbG90IG9mIHdvcmsgdG8gY2hhbmdlIGl0
IHRvIHVzZSBMYXp5SlNWYWx1ZS4gU28sIHRoaXMgaW1wbGVtZW50cyB0aGUgY29uc3RhbnQgZm9s
ZGluZworICAgICAgICBpbiBTdHJlbmd0aFJlZHVjdGlvblBoYXNlLiBJIGNyZWF0ZWQgYSBidWcg
YW5kIHB1dCBhIEZJWE1FIGFib3V0IG1vdmluZyB0aGVzZSBydWxlcyBpbnRvCisgICAgICAgIEFJ
LgorCisgICAgICAgIE9UT0gsIG91ciBleHBlcmllbmNlIGluIEIzIHNob3dzIHRoYXQgY29uc3Rh
bnQgZm9sZGluZyBpbiBzdHJlbmd0aCByZWR1Y3Rpb24gaXMgcXVpdGUKKyAgICAgICAgbmljZS4g
SXQgd291bGQgdG90YWxseSBtYWtlIHNlbnNlIHRvIGhhdmUgc3RyZW5ndGggcmVkdWN0aW9uIGhh
dmUgY29uc3RhbnQgZm9sZGluZyBydWxlcworICAgICAgICB0aGF0IG1pcnJvciB0aGUgcnVsZXMg
aW4gQUksIG9yIHRvIGZhY3RvciBvdXQgdGhlIEFJIGNvbnN0YW50IGZvbGRpbmcgcnVsZXMsIHRo
ZSBzYW1lCisgICAgICAgIHdheSB0aGF0IEIzIGZhY3RvcnMgb3V0IHRob3NlIHJ1bGVzIGludG8g
VmFsdWUgbWV0aG9kcy4KKworICAgICAgICBUaGlzIGp1c3QgaW1wbGVtZW50cyBmb2xkaW5nIGZv
ciBjb25jYXRlbmF0aW9uIGFuZCBHZXRBcnJheUxlbmd0aC4gSXQncyBqdXN0IGEgcHJvb2Ygb2YK
KyAgICAgICAgY29uY2VwdCBmb3IgZXZpbCB0aGluZ3MgSSB3YW50IHRvIGRvIGxhdGVyLgorCisg
ICAgICAgIFRoaXMgY2hhbmdlIGlzIGEgMi41eCBzcGVlZC11cCBvbiB0aGUgc3RyaW5nIGNvbmNh
dGVuYXRpb24gbWljcm9iZW5jaG1hcmtzIEkgYWRkZWQgaW4KKyAgICAgICAgdGhpcyBwYXRjaC4K
KworICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVj
dXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRm
Zy9ERkdGcm96ZW5WYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6RnJvemVuVmFsdWU6OmVt
cHR5U2luZ2xldG9uKToKKyAgICAgICAgKEpTQzo6REZHOjpGcm96ZW5WYWx1ZTo6dHJ5R2V0U3Ry
aW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpGcm96ZW5WYWx1ZTo6ZHVtcEluQ29udGV4dCk6Cisg
ICAgICAgICogZGZnL0RGR0Zyb3plblZhbHVlLmg6CisgICAgICAgIChKU0M6OkRGRzo6RnJvemVu
VmFsdWU6OnN0cmVuZ3RoKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKiBk
ZmcvREZHTGF6eUpTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkxhenlKU1ZhbHVlOjpu
ZXdTdHJpbmcpOgorICAgICAgICAoSlNDOjpERkc6OkxhenlKU1ZhbHVlOjpnZXRWYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6ZXF1YWxUb1N0cmluZ0ltcGwpOgorICAgICAgICAoSlNDOjpERkc6
OkxhenlKU1ZhbHVlOjp0cnlHZXRTdHJpbmdJbXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpMYXp5
SlNWYWx1ZTo6dHJ5R2V0U3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpMYXp5SlNWYWx1ZTo6
c3RyaWN0RXF1YWwpOgorICAgICAgICAoSlNDOjpERkc6OkxhenlKU1ZhbHVlOjpzd2l0Y2hMb29r
dXBWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6TGF6eUpTVmFsdWU6OmVtaXQpOgorICAgICAg
ICAoSlNDOjpERkc6OkxhenlKU1ZhbHVlOjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKiBkZmcv
REZHTGF6eUpTVmFsdWUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpMYXp5SlNWYWx1ZTo6TGF6eUpT
VmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OkxhenlKU1ZhbHVlOjprbm93blN0cmluZ0ltcGwp
OgorICAgICAgICAoSlNDOjpERkc6OkxhenlKU1ZhbHVlOjpraW5kKToKKyAgICAgICAgKEpTQzo6
REZHOjpMYXp5SlNWYWx1ZTo6dHJ5R2V0VmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OkxhenlK
U1ZhbHVlOjpjaGFyYWN0ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkxhenlKU1ZhbHVlOjpzdHJp
bmdJbXBsKToKKyAgICAgICAgKiBkZmcvREZHTWF5RXhpdC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6bWF5RXhpdCk6CisgICAgICAgICogZGZnL0RGR05vZGUuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6OmNvbnZlcnRUb0lkZW50aXR5T24pOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
OmNvbnZlcnRUb0xhenlKU0NvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjb252
ZXJ0VG9QdXRIaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjb252ZXJ0VG9QdXRDbG9z
dXJlVmFySGludCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dHJ5R2V0U3RyaW5nKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpwcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcik6CisgICAg
ICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjb252ZXJ0VG9D
b25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRvQ29uc3RhbnRTdG9y
YWdlUG9pbnRlcik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y2FzdENvbnN0YW50KToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNMYXp5SlNWYWx1ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6bGF6eUpTVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmluaXRpYWxp
emF0aW9uVmFsdWVGb3JBY3RpdmF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoK
KyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAg
ICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRv
RXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNldFJlZ0V4cE9iamVjdExhc3RJbmRl
eCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMYXp5SlNDb25z
dGFudCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAq
IGRmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
dHJlbmd0aFJlZHVjdGlvblBoYXNlOjpoYW5kbGVOb2RlKToKKyAgICAgICAgKiBmdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAg
KiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2Vy
REZHVG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjb21waWxlSW50NTJDb25zdGFudCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmNvbXBpbGVMYXp5SlNDb25zdGFudCk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVEb3VibGVSZXApOgorCiAyMDE2LTAzLTA4ICBKb3NlcGgg
UGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3Rvcjog
TWVtb3J5IFRpbWVsaW5lIHNob3VsZCBzaG93IE1lbW9yeVByZXNzdXJlIGV2ZW50cwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTk3NzgxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDEsNiArMTQxLDIxIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHkKICAgICAgICAgc2V0QnVpbHRJbkNvbnN0YW50KG5vZGUsICpub2RlLT5jb25zdGFudCgpKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgY2FzZSBMYXp5SlNDb25zdGFudDogeworICAg
ICAgICBMYXp5SlNWYWx1ZSB2YWx1ZSA9IG5vZGUtPmxhenlKU1ZhbHVlKCk7CisgICAgICAgIHN3
aXRjaCAodmFsdWUua2luZCgpKSB7CisgICAgICAgIGNhc2UgTGF6eUpTVmFsdWU6Oktub3duVmFs
dWU6CisgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCB2YWx1ZS52YWx1ZSgpLT52YWx1ZSgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExhenlKU1ZhbHVlOjpTaW5nbGVD
aGFyYWN0ZXJTdHJpbmc6CisgICAgICAgIGNhc2UgTGF6eUpTVmFsdWU6Oktub3duU3RyaW5nSW1w
bDoKKyAgICAgICAgY2FzZSBMYXp5SlNWYWx1ZTo6TmV3U3RyaW5nSW1wbDoKKyAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBTcGVjU3RyaW5nKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICAgICAgCiAgICAg
Y2FzZSBJZGVudGl0eTogewogICAgICAgICBmb3JOb2RlKG5vZGUpID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUu
aAkocmV2aXNpb24gMTk3NzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9i
YmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMyw3ICsxMTMsNyBAQCB2b2lkIGNsb2JiZXJp
emUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgogICAg
ICAgICBkZWYoUHVyZVZhbHVlKG5vZGUsIG5vZGUtPmNvbnN0YW50KCkpKTsKICAgICAgICAgcmV0
dXJuOwotICAgICAgICAKKwogICAgIGNhc2UgSWRlbnRpdHk6CiAgICAgY2FzZSBQaGFudG9tOgog
ICAgIGNhc2UgQ2hlY2s6CkBAIC0xMjEsNiArMTIxLDExIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgog
ICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAgIGNhc2UgTGF6eUpTQ29uc3RhbnQ6CisgICAg
ICAgIC8vIFdlIHNob3VsZCBlbmFibGUgQ1NFIG9mIExhenlKU0NvbnN0YW50LiBJdCdzIGEgbGl0
dGxlIGFubm95aW5nIHNpbmNlIExhenlKU1ZhbHVlIGhhcworICAgICAgICAvLyBtb3JlIGJpdHMg
dGhhbiB3ZSBjdXJyZW50bHkgaGF2ZSBpbiBQdXJlVmFsdWUuCisgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCiAgICAgY2FzZSBBcml0aElNdWw6CiAgICAgY2FzZSBBcml0aEFiczoKICAgICBjYXNl
IEFyaXRoQ2x6MzI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3Bw
CShyZXZpc2lvbiAxOTc3ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNH
Qy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgSlNDb25zdGFudDoKICAgICBjYXNlIERvdWJs
ZUNvbnN0YW50OgogICAgIGNhc2UgSW50NTJDb25zdGFudDoKKyAgICBjYXNlIExhenlKU0NvbnN0
YW50OgogICAgIGNhc2UgSWRlbnRpdHk6CiAgICAgY2FzZSBHZXRDYWxsZWU6CiAgICAgY2FzZSBH
ZXRBcmd1bWVudENvdW50OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxOTc3ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUxLDYgKzE0NTEsNyBA
QCBwcml2YXRlOgogICAgICAgICAvLyBIYXZlIHRoZXNlIG5vLW9wIGNhc2VzIGhlcmUgdG8gZW5z
dXJlIHRoYXQgbm9ib2R5IGZvcmdldHMgdG8gYWRkIGhhbmRsZXJzIGZvciBuZXcgb3Bjb2Rlcy4K
ICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgorICAg
ICAgICBjYXNlIExhenlKU0NvbnN0YW50OgogICAgICAgICBjYXNlIERvdWJsZUNvbnN0YW50Ogog
ICAgICAgICBjYXNlIEdldExvY2FsOgogICAgICAgICBjYXNlIEdldENhbGxlZToKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRnJvemVuVmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRnJvemVuVmFsdWUuY3BwCShyZXZpc2lvbiAx
OTc3ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zyb3plblZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNp
bmNsdWRlICJERkdMYXp5SlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtMzgsNiArMzksMTEgQEAgRnJvemVuVmFs
dWUqIEZyb3plblZhbHVlOjplbXB0eVNpbmdsZXRvbgogICAgIHJldHVybiAmZW1wdHk7CiB9CiAK
K1N0cmluZyBGcm96ZW5WYWx1ZTo6dHJ5R2V0U3RyaW5nKEdyYXBoJiBncmFwaCkKK3sKKyAgICBy
ZXR1cm4gTGF6eUpTVmFsdWUodGhpcykudHJ5R2V0U3RyaW5nKGdyYXBoKTsKK30KKwogdm9pZCBG
cm96ZW5WYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCog
Y29udGV4dCkgY29uc3QKIHsKICAgICBpZiAoISFtX3ZhbHVlICYmIG1fdmFsdWUuaXNDZWxsKCkp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zyb3plblZhbHVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGcm96ZW5WYWx1ZS5oCShyZXZp
c2lvbiAxOTc3ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zyb3plblZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTMsNiArOTMsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Ly8gVGhlIHN0cmVuZ3RoIG9mIHRoZSB2YWx1ZSBpdHNlbGYuIFRoZSBzdHJ1Y3R1cmUgaXMgYWxt
b3N0IGFsd2F5cyB3ZWFrLgogICAgIFZhbHVlU3RyZW5ndGggc3RyZW5ndGgoKSBjb25zdCB7IHJl
dHVybiBtX3N0cmVuZ3RoOyB9CisKKyAgICBTdHJpbmcgdHJ5R2V0U3RyaW5nKEdyYXBoJik7CiAg
ICAgCiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0
KiBjb250ZXh0KSBjb25zdDsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxOTc3ODEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkK
QEAgLTg2OCw2ICs4NjgsNyBAQCBwdWJsaWM6CiAgICAgQmFnPENhbGxWYXJhcmdzRGF0YT4gbV9j
YWxsVmFyYXJnc0RhdGE7CiAgICAgQmFnPExvYWRWYXJhcmdzRGF0YT4gbV9sb2FkVmFyYXJnc0Rh
dGE7CiAgICAgQmFnPFN0YWNrQWNjZXNzRGF0YT4gbV9zdGFja0FjY2Vzc0RhdGE7CisgICAgQmFn
PExhenlKU1ZhbHVlPiBtX2xhenlKU1ZhbHVlczsKICAgICBWZWN0b3I8SW5saW5lVmFyaWFibGVE
YXRhLCA0PiBtX2lubGluZVZhcmlhYmxlRGF0YTsKICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0
ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4+IG1fYnl0ZWNvZGVMaXZlbmVzczsK
ICAgICBIYXNoTWFwPENvZGVCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUtpbGxzPj4g
bV9ieXRlY29kZUtpbGxzOwpAQCAtODgwLDYgKzg4MSw5IEBAIHB1YmxpYzoKICAgICB1bnNpZ25l
ZCBtX2xvY2FsVmFyczsKICAgICB1bnNpZ25lZCBtX25leHRNYWNoaW5lTG9jYWw7CiAgICAgdW5z
aWduZWQgbV9wYXJhbWV0ZXJTbG90czsKKyAgICAKKyAgICBIYXNoU2V0PFN0cmluZz4gbV9sb2Nh
bFN0cmluZ3M7CisgICAgSGFzaE1hcDxjb25zdCBTdHJpbmdJbXBsKiwgU3RyaW5nPiBtX2NvcGll
ZFN0cmluZ3M7CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIHN0ZDo6dW5vcmRlcmVkX21h
cDxpbnQ2NF90LCBkb3VibGUqPiBtX2RvdWJsZUNvbnN0YW50c01hcDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuY3BwCShyZXZpc2lvbiAxOTc3ODEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE0LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMTAgKzI4LDIxIEBACiAKICNpZiBFTkFCTEUoREZHX0pJ
VCkKIAorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCitMYXp5SlNWYWx1ZSBMYXp5SlNWYWx1ZTo6bmV3
U3RyaW5nKEdyYXBoJiBncmFwaCwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgTGF6eUpT
VmFsdWUgcmVzdWx0OworICAgIHJlc3VsdC5tX2tpbmQgPSBOZXdTdHJpbmdJbXBsOworICAgIHJl
c3VsdC51LnN0cmluZ0ltcGwgPSBncmFwaC5tX2xvY2FsU3RyaW5ncy5hZGQoc3RyaW5nKS5pdGVy
YXRvci0+aW1wbCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEpTVmFsdWUgTGF6eUpTVmFs
dWU6OmdldFZhbHVlKFZNJiB2bSkgY29uc3QKIHsKICAgICBzd2l0Y2ggKG1fa2luZCkgewpAQCAt
NDAsNiArNTEsNyBAQCBKU1ZhbHVlIExhenlKU1ZhbHVlOjpnZXRWYWx1ZShWTSYgdm0pIGNvCiAg
ICAgY2FzZSBTaW5nbGVDaGFyYWN0ZXJTdHJpbmc6CiAgICAgICAgIHJldHVybiBqc1NpbmdsZUNo
YXJhY3RlclN0cmluZygmdm0sIHUuY2hhcmFjdGVyKTsKICAgICBjYXNlIEtub3duU3RyaW5nSW1w
bDoKKyAgICBjYXNlIE5ld1N0cmluZ0ltcGw6CiAgICAgICAgIHJldHVybiBqc1N0cmluZygmdm0s
IHUuc3RyaW5nSW1wbCk7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CkBAIC03NSw2ICs4Nyw0OCBAQCBzdGF0aWMgVHJpU3RhdGUgZXF1YWxUb1N0cmluZ0ltcGwoSlNW
YWx1CiAgICAgcmV0dXJuIHRyaVN0YXRlKFdURjo6ZXF1YWwoc3RyaW5nSW1wbCwgc3RyaW5nKSk7
CiB9CiAKK2NvbnN0IFN0cmluZ0ltcGwqIExhenlKU1ZhbHVlOjp0cnlHZXRTdHJpbmdJbXBsKCkg
Y29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgS25vd25TdHJpbmdJbXBs
OgorICAgIGNhc2UgTmV3U3RyaW5nSW1wbDoKKyAgICAgICAgcmV0dXJuIHUuc3RyaW5nSW1wbDsK
KworICAgIGNhc2UgS25vd25WYWx1ZToKKyAgICAgICAgaWYgKEpTU3RyaW5nKiBzdHJpbmcgPSBq
c0R5bmFtaWNDYXN0PEpTU3RyaW5nKj4odmFsdWUoKS0+dmFsdWUoKSkpCisgICAgICAgICAgICBy
ZXR1cm4gc3RyaW5nLT50cnlHZXRWYWx1ZUltcGwoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9CisKK1N0
cmluZyBMYXp5SlNWYWx1ZTo6dHJ5R2V0U3RyaW5nKEdyYXBoJiBncmFwaCkgY29uc3QKK3sKKyAg
ICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgTmV3U3RyaW5nSW1wbDoKKyAgICAgICAgcmV0
dXJuIHUuc3RyaW5nSW1wbDsKKworICAgIGNhc2UgU2luZ2xlQ2hhcmFjdGVyU3RyaW5nOgorICAg
ICAgICByZXR1cm4gU3RyaW5nKCZ1LmNoYXJhY3RlciwgMSk7CisKKyAgICBkZWZhdWx0OgorICAg
ICAgICBpZiAoY29uc3QgU3RyaW5nSW1wbCogc3RyaW5nID0gdHJ5R2V0U3RyaW5nSW1wbCgpKSB7
CisgICAgICAgICAgICB1bnNpZ25lZCBnaW5vcm1vdXNTdHJpbmdMZW5ndGggPSAxMDAwMDsKKyAg
ICAgICAgICAgIGlmIChzdHJpbmctPmxlbmd0aCgpID4gZ2lub3Jtb3VzU3RyaW5nTGVuZ3RoKQor
ICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgYXV0byByZXN1bHQgPSBncmFwaC5tX2NvcGllZFN0cmluZ3MuYWRkKHN0cmluZywgU3RyaW5n
KCkpOworICAgICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAg
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBzdHJpbmctPmNsb25lKCk7CisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIFN0cmluZygpOworICAgIH0KK30KKwogVHJpU3RhdGUgTGF6eUpTVmFsdWU6OnN0
cmljdEVxdWFsKGNvbnN0IExhenlKU1ZhbHVlJiBvdGhlcikgY29uc3QKIHsKICAgICBzd2l0Y2gg
KG1fa2luZCkgewpAQCAtODUsNiArMTM5LDcgQEAgVHJpU3RhdGUgTGF6eUpTVmFsdWU6OnN0cmlj
dEVxdWFsKGNvbnN0IAogICAgICAgICBjYXNlIFNpbmdsZUNoYXJhY3RlclN0cmluZzoKICAgICAg
ICAgICAgIHJldHVybiBlcXVhbFRvU2luZ2xlQ2hhcmFjdGVyKHZhbHVlKCktPnZhbHVlKCksIG90
aGVyLmNoYXJhY3RlcigpKTsKICAgICAgICAgY2FzZSBLbm93blN0cmluZ0ltcGw6CisgICAgICAg
IGNhc2UgTmV3U3RyaW5nSW1wbDoKICAgICAgICAgICAgIHJldHVybiBlcXVhbFRvU3RyaW5nSW1w
bCh2YWx1ZSgpLT52YWx1ZSgpLCBvdGhlci5zdHJpbmdJbXBsKCkpOwogICAgICAgICB9CiAgICAg
ICAgIGJyZWFrOwpAQCAtOTMsNiArMTQ4LDcgQEAgVHJpU3RhdGUgTGF6eUpTVmFsdWU6OnN0cmlj
dEVxdWFsKGNvbnN0IAogICAgICAgICBjYXNlIFNpbmdsZUNoYXJhY3RlclN0cmluZzoKICAgICAg
ICAgICAgIHJldHVybiB0cmlTdGF0ZShjaGFyYWN0ZXIoKSA9PSBvdGhlci5jaGFyYWN0ZXIoKSk7
CiAgICAgICAgIGNhc2UgS25vd25TdHJpbmdJbXBsOgorICAgICAgICBjYXNlIE5ld1N0cmluZ0lt
cGw6CiAgICAgICAgICAgICBpZiAob3RoZXIuc3RyaW5nSW1wbCgpLT5sZW5ndGgoKSAhPSAxKQog
ICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZVRyaVN0YXRlOwogICAgICAgICAgICAgcmV0dXJu
IHRyaVN0YXRlKG90aGVyLnN0cmluZ0ltcGwoKS0+YXQoMCkgPT0gY2hhcmFjdGVyKCkpOwpAQCAt
MTAxLDggKzE1NywxMCBAQCBUcmlTdGF0ZSBMYXp5SlNWYWx1ZTo6c3RyaWN0RXF1YWwoY29uc3Qg
CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBLbm93blN0cmluZ0ltcGw6Cisg
ICAgY2FzZSBOZXdTdHJpbmdJbXBsOgogICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewog
ICAgICAgICBjYXNlIEtub3duU3RyaW5nSW1wbDoKKyAgICAgICAgY2FzZSBOZXdTdHJpbmdJbXBs
OgogICAgICAgICAgICAgcmV0dXJuIHRyaVN0YXRlKFdURjo6ZXF1YWwoc3RyaW5nSW1wbCgpLCBv
dGhlci5zdHJpbmdJbXBsKCkpKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVy
biBvdGhlci5zdHJpY3RFcXVhbCgqdGhpcyk7CkBAIC0xNDMsNiArMjAxLDQxIEBAIHVpbnRwdHJf
dCBMYXp5SlNWYWx1ZTo6c3dpdGNoTG9va3VwVmFsdWUKICAgICB9CiB9CiAKK3ZvaWQgTGF6eUpT
VmFsdWU6OmVtaXQoQ0NhbGxIZWxwZXJzJiBqaXQsIEpTVmFsdWVSZWdzIHJlc3VsdCkgY29uc3QK
K3sKKyAgICBpZiAobV9raW5kID09IEtub3duVmFsdWUpIHsKKyAgICAgICAgaml0Lm1vdmVWYWx1
ZSh2YWx1ZSgpLT52YWx1ZSgpLCByZXN1bHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gSXQgbXVzdCBiZSBzb21lIGtpbmQgb2YgY2VsbC4KKyNpZiBVU0UoSlNWQUxVRTMyXzY0
KQorICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKENlbGxUYWcpLCByZXN1
bHQudGFnR1BSKCkpOworI2VuZGlmCisgICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIgbGFi
ZWwgPSBqaXQubW92ZVdpdGhQYXRjaCgKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKHN0YXRpY19jYXN0PHNpemVfdD4oMHhkMWU3YmVlZmx1KSksCisgICAgICAgIHJlc3VsdC5w
YXlsb2FkR1BSKCkpOworCisgICAgTGF6eUpTVmFsdWUgdGhpc1ZhbHVlID0gKnRoaXM7CisKKyAg
ICAvLyBPbmNlIHdlIGRvIHRoaXMsIHdlJ3JlIGNvbW1pdHRlZC4gT3RoZXJ3aXNlIHdlIGxlYWsg
bWVtb3J5LiBOb3RlIHRoYXQgd2UgY2FsbCByZWYvZGVyZWYKKyAgICAvLyBtYW51YWxseSB0byBl
bnN1cmUgdGhhdCB0aGVyZSBpcyBubyBjb25jdXJyZW5jeSBzaGFkaW5lc3MuIFdlIGFyZSBkb2lu
ZyBzb21ldGhpbmcgaGVyZQorICAgIC8vIHRoYXQgbWlnaHQgYmUgcmF0aGVyIGJydXRhbDogdHJh
bnNmZXJpbmcgb3duZXJzaGlwIG9mIHRoaXMgc3RyaW5nLgorICAgIGlmIChtX2tpbmQgPT0gTmV3
U3RyaW5nSW1wbCkKKyAgICAgICAgdGhpc1ZhbHVlLnUuc3RyaW5nSW1wbC0+cmVmKCk7CisgICAg
CisgICAgaml0LmFkZExpbmtUYXNrKAorICAgICAgICBbdGhpc1ZhbHVlLCBsYWJlbF0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgcmVhbFZhbHVlID0gdGhp
c1ZhbHVlLmdldFZhbHVlKGxpbmtCdWZmZXIudm0oKSk7CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChyZWFsVmFsdWUuaXNDZWxsKCkpOworCisgICAgICAgICAgICBpZiAodGhpc1ZhbHVlLm1f
a2luZCA9PSBOZXdTdHJpbmdJbXBsKQorICAgICAgICAgICAgICAgIHRoaXNWYWx1ZS51LnN0cmlu
Z0ltcGwtPmRlcmVmKCk7CisKKyAgICAgICAgICAgIGxpbmtCdWZmZXIucGF0Y2gobGFiZWwsIHJl
YWxWYWx1ZS5hc0NlbGwoKSk7CisgICAgICAgIH0pOworfQorCiB2b2lkIExhenlKU1ZhbHVlOjpk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25z
dAogewogICAgIHN3aXRjaCAobV9raW5kKSB7CkBAIC0xNTUsNyArMjQ4LDEwIEBAIHZvaWQgTGF6
eUpTVmFsdWU6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHIKICAgICAgICAgb3V0LnByaW50KCIgLyAi
LCBTdHJpbmdJbXBsOjp1dGY4Rm9yQ2hhcmFjdGVycygmdS5jaGFyYWN0ZXIsIDEpLCAiKSIpOwog
ICAgICAgICByZXR1cm47CiAgICAgY2FzZSBLbm93blN0cmluZ0ltcGw6Ci0gICAgICAgIG91dC5w
cmludCgiTGF6eTpTdHJpbmcoIiwgc3RyaW5nSW1wbCgpLCAiKSIpOworICAgICAgICBvdXQucHJp
bnQoIkxhenk6S25vd25TdHJpbmcoIiwgc3RyaW5nSW1wbCgpLCAiKSIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBOZXdTdHJpbmdJbXBsOgorICAgICAgICBvdXQucHJpbnQoIkxhenk6TmV3
U3RyaW5nKCIsIHN0cmluZ0ltcGwoKSwgIikiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdMYXp5SlNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuaAkocmV2aXNpb24gMTk3NzgxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdMYXp5SlNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQsIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zMiwxOSArMzIsMjYgQEAKICNpbmNsdWRlICJERkdGcm96ZW5WYWx1ZS5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KIAotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENDYWxsSGVscGVyczsKKworbmFtZXNwYWNl
IERGRyB7CisKK2NsYXNzIEdyYXBoOwogCiAvLyBSZXByZXNlbnRzIGVpdGhlciBhIEpTVmFsdWUs
IG9yIGZvciBKU1ZhbHVlcyB0aGF0IHJlcXVpcmUgYWxsb2NhdGlvbiBpbiB0aGUgaGVhcCwKIC8v
IGl0IHRlbGxzIHlvdSBldmVyeXRoaW5nIHlvdSdkIG5lZWQgdG8ga25vdyBpbiBvcmRlciB0byBh
bGxvY2F0ZSBpdC4KIAotZW51bSBMYXppbmVzc0tpbmQgewotICAgIEtub3duVmFsdWUsCi0gICAg
U2luZ2xlQ2hhcmFjdGVyU3RyaW5nLAotICAgIEtub3duU3RyaW5nSW1wbAotfTsKLQogY2xhc3Mg
TGF6eUpTVmFsdWUgewogcHVibGljOgorICAgIGVudW0gTGF6aW5lc3NLaW5kIHsKKyAgICAgICAg
S25vd25WYWx1ZSwKKyAgICAgICAgU2luZ2xlQ2hhcmFjdGVyU3RyaW5nLAorICAgICAgICBLbm93
blN0cmluZ0ltcGwsCisgICAgICAgIE5ld1N0cmluZ0ltcGwKKyAgICB9OworCiAgICAgTGF6eUpT
VmFsdWUoRnJvemVuVmFsdWUqIHZhbHVlID0gRnJvemVuVmFsdWU6OmVtcHR5U2luZ2xldG9uKCkp
CiAgICAgICAgIDogbV9raW5kKEtub3duVmFsdWUpCiAgICAgewpAQCAtNjYsNiArNzMsMTAgQEAg
cHVibGljOgogICAgICAgICByZXN1bHQudS5zdHJpbmdJbXBsID0gc3RyaW5nOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KKworICAgIHN0YXRpYyBMYXp5SlNWYWx1ZSBuZXdTdHJpbmco
R3JhcGgmLCBjb25zdCBTdHJpbmcmKTsKKworICAgIExhemluZXNzS2luZCBraW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9raW5kOyB9CiAgICAgCiAgICAgRnJvemVuVmFsdWUqIHRyeUdldFZhbHVlKEdy
YXBoJikgY29uc3QKICAgICB7CkBAIC04NywxNiArOTgsMjIgQEAgcHVibGljOgogICAgICAgICBB
U1NFUlQobV9raW5kID09IFNpbmdsZUNoYXJhY3RlclN0cmluZyk7CiAgICAgICAgIHJldHVybiB1
LmNoYXJhY3RlcjsKICAgICB9CisKKyAgICBjb25zdCBTdHJpbmdJbXBsKiB0cnlHZXRTdHJpbmdJ
bXBsKCkgY29uc3Q7CisgICAgCisgICAgU3RyaW5nIHRyeUdldFN0cmluZyhHcmFwaCYpIGNvbnN0
OwogICAgIAogICAgIFN0cmluZ0ltcGwqIHN0cmluZ0ltcGwoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgQVNTRVJUKG1fa2luZCA9PSBLbm93blN0cmluZ0ltcGwpOworICAgICAgICBBU1NFUlQobV9r
aW5kID09IEtub3duU3RyaW5nSW1wbCB8fCBtX2tpbmQgPT0gTmV3U3RyaW5nSW1wbCk7CiAgICAg
ICAgIHJldHVybiB1LnN0cmluZ0ltcGw7CiAgICAgfQotICAgIAorCiAgICAgVHJpU3RhdGUgc3Ry
aWN0RXF1YWwoY29uc3QgTGF6eUpTVmFsdWUmIG90aGVyKSBjb25zdDsKICAgICAKICAgICB1aW50
cHRyX3Qgc3dpdGNoTG9va3VwVmFsdWUoU3dpdGNoS2luZCkgY29uc3Q7CisKKyAgICB2b2lkIGVt
aXQoQ0NhbGxIZWxwZXJzJiwgSlNWYWx1ZVJlZ3MpIGNvbnN0OwogICAgIAogICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVh
bSYsIER1bXBDb250ZXh0KikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR01heUV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTWF5RXhpdC5jcHAJKHJldmlzaW9uIDE5Nzc4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTWF5RXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDcgQEAgRXhp
dE1vZGUgbWF5RXhpdChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZAogICAgIGNhc2UgU2V0QXJndW1l
bnQ6CiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CisgICAg
Y2FzZSBMYXp5SlNDb25zdGFudDoKICAgICBjYXNlIEludDUyQ29uc3RhbnQ6CiAgICAgY2FzZSBN
b3ZIaW50OgogICAgIGNhc2UgU2V0TG9jYWw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5jcHAJKHJldmlzaW9uIDE5Nzc4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2MCw2ICsxNjAsMTQg
QEAgdm9pZCBOb2RlOjpjb252ZXJ0VG9JZGVudGl0eU9uKE5vZGUqIGNoaQogICAgIH0KIH0KIAor
dm9pZCBOb2RlOjpjb252ZXJ0VG9MYXp5SlNDb25zdGFudChHcmFwaCYgZ3JhcGgsIExhenlKU1Zh
bHVlIHZhbHVlKQoreworICAgIG1fb3AgPSBMYXp5SlNDb25zdGFudDsKKyAgICBtX2ZsYWdzICY9
IH5Ob2RlTXVzdEdlbmVyYXRlOworICAgIG1fb3BJbmZvID0gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4oZ3JhcGgubV9sYXp5SlNWYWx1ZXMuYWRkKHZhbHVlKSk7CisgICAgY2hpbGRyZW4ucmVzZXQo
KTsKK30KKwogdm9pZCBOb2RlOjpjb252ZXJ0VG9QdXRIaW50KGNvbnN0IFByb21vdGVkTG9jYXRp
b25EZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBOb2RlKiBiYXNlLCBOb2RlKiB2YWx1ZSkKIHsKICAg
ICBtX29wID0gUHV0SGludDsKQEAgLTE5Myw2ICsyMDEsMTUgQEAgdm9pZCBOb2RlOjpjb252ZXJ0
VG9QdXRDbG9zdXJlVmFySGludCgpCiAgICAgICAgIGNoaWxkMSgpLm5vZGUoKSwgY2hpbGQyKCku
bm9kZSgpKTsKIH0KIAorU3RyaW5nIE5vZGU6OnRyeUdldFN0cmluZyhHcmFwaCYgZ3JhcGgpCit7
CisgICAgaWYgKGhhc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBjb25zdGFudCgpLT50cnlH
ZXRTdHJpbmcoZ3JhcGgpOworICAgIGlmIChoYXNMYXp5SlNWYWx1ZSgpKQorICAgICAgICByZXR1
cm4gbGF6eUpTVmFsdWUoKS50cnlHZXRTdHJpbmcoZ3JhcGgpOworICAgIHJldHVybiBTdHJpbmco
KTsKK30KKwogUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IgTm9kZTo6cHJvbW90ZWRMb2NhdGlv
bkRlc2NyaXB0b3IoKQogewogICAgIHJldHVybiBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcihz
dGF0aWNfY2FzdDxQcm9tb3RlZExvY2F0aW9uS2luZD4obV9vcEluZm8pLCBtX29wSW5mbzIpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE5Nzc4MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OTQsNiArNDk0LDggQEAgc3RydWN0IE5vZGUgewogICAgICAgICBtX29wSW5mbyA9IGJpdHdpc2Vf
Y2FzdDx1aW50cHRyX3Q+KHZhbHVlKTsKICAgICAgICAgY2hpbGRyZW4ucmVzZXQoKTsKICAgICB9
CisKKyAgICB2b2lkIGNvbnZlcnRUb0xhenlKU0NvbnN0YW50KEdyYXBoJiwgTGF6eUpTVmFsdWUp
OwogICAgIAogICAgIHZvaWQgY29udmVydFRvQ29uc3RhbnRTdG9yYWdlUG9pbnRlcih2b2lkKiBw
b2ludGVyKQogICAgIHsKQEAgLTc0Myw2ICs3NDUsMTkgQEAgc3RydWN0IE5vZGUgewogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIGJvb2wgaGFzTGF6eUpTVmFsdWUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gTGF6eUpTQ29uc3RhbnQ7CisgICAgfQorCisgICAg
TGF6eUpTVmFsdWUgbGF6eUpTVmFsdWUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0xhenlK
U1ZhbHVlKCkpOworICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxMYXp5SlNWYWx1ZSo+KG1f
b3BJbmZvKTsKKyAgICB9CisKKyAgICBTdHJpbmcgdHJ5R2V0U3RyaW5nKEdyYXBoJik7CisKICAg
ICBKU1ZhbHVlIGluaXRpYWxpemF0aW9uVmFsdWVGb3JBY3RpdmF0aW9uKCkgY29uc3QKICAgICB7
CiAgICAgICAgIEFTU0VSVChvcCgpID09IENyZWF0ZUFjdGl2YXRpb24pOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTk3NzgxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw2ICs0MSw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhE
b3VibGVDb25zdGFudCwgTm9kZVJlc3VsdERvdWJsZSkgXAogICAgIG1hY3JvKEludDUyQ29uc3Rh
bnQsIE5vZGVSZXN1bHRJbnQ1MikgXAogICAgIFwKKyAgICAvKiBMYXp5IEpTVmFsdWUgY29uc3Rh
bnQuIFdlIGRvbid0IGtub3cgdGhlIEpTVmFsdWUgYml0cyBvZiBpdCB5ZXQuICovXAorICAgIG1h
Y3JvKExhenlKU0NvbnN0YW50LCBOb2RlUmVzdWx0SlMpIFwKKyAgICBcCiAgICAgLyogTWFya2Vy
IHRvIGluZGljYXRlIHRoYXQgYW4gb3BlcmF0aW9uIHdhcyBvcHRpbWl6ZWQgZW50aXJlbHkgYW5k
IGFsbCB0aGF0IGlzIGxlZnQgKi9cCiAgICAgLyogaXMgdG8gbWFrZSBvbmUgbm9kZSBhbGlhcyBh
bm90aGVyLiBDU0Ugd2lsbCBsYXRlciB1c3VhbGx5IGVsaW1pbmF0ZSB0aGlzIG5vZGUsICovXAog
ICAgIC8qIHRob3VnaCBpdCBtYXkgY2hvb3NlIG5vdCB0byBpZiBpdCB3b3VsZCBjb3JydXB0IHBy
ZWRpY3Rpb25zICh2ZXJ5IHJhcmUpLiAqL1wKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAxOTc3ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjY4LDcgKzY2OCw4IEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyOgogICAgICAgICBjYXNlIEdldFN0
YWNrOgogICAgICAgICBjYXNlIEdldFJlZ0V4cE9iamVjdExhc3RJbmRleDoKLSAgICAgICAgY2Fz
ZSBTZXRSZWdFeHBPYmplY3RMYXN0SW5kZXg6IHsKKyAgICAgICAgY2FzZSBTZXRSZWdFeHBPYmpl
Y3RMYXN0SW5kZXg6CisgICAgICAgIGNhc2UgTGF6eUpTQ29uc3RhbnQ6IHsKICAgICAgICAgICAg
IC8vIFRoaXMgbm9kZSBzaG91bGQgbmV2ZXIgYmUgdmlzaWJsZSBhdCB0aGlzIHN0YWdlIG9mIGNv
bXBpbGF0aW9uLiBJdCBpcwogICAgICAgICAgICAgLy8gaW5zZXJ0ZWQgYnkgZml4dXAoKSwgd2hp
Y2ggZm9sbG93cyB0aGlzIHBoYXNlLgogICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5v
ZGUsICJVbmV4cGVjdGVkIG5vZGUgZHVyaW5nIHByZWRpY3Rpb24gcHJvcGFnYXRpb24iKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZp
c2lvbiAxOTc3ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1
dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDYgKzEzNyw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0
ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgY2FzZSBE
b3VibGVDb25zdGFudDoKICAgICBjYXNlIEludDUyQ29uc3RhbnQ6CisgICAgY2FzZSBMYXp5SlND
b25zdGFudDoKICAgICBjYXNlIElkZW50aXR5OgogICAgIGNhc2UgVG9UaGlzOgogICAgIGNhc2Ug
Q3JlYXRlVGhpczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTk3NzgxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTg3NCw2ICsxODc0LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgaW5pdENvbnN0YW50SW5mbyhub2RlKTsKICAgICAgICAgYnJlYWs7
CiAKKyAgICBjYXNlIExhenlKU0NvbnN0YW50OgorICAgICAgICBjb21waWxlTGF6eUpTQ29uc3Rh
bnQobm9kZSk7CisgICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBJZGVudGl0eTogewogICAgICAg
ICBzcGVjdWxhdGUobm9kZSwgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBzd2l0Y2ggKG5vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxOTc3ODEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTgyLDYgKzE5ODIsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgICAgICBpbml0Q29uc3RhbnRJbmZvKG5vZGUpOwogICAgICAgICBicmVh
azsKIAorICAgIGNhc2UgTGF6eUpTQ29uc3RhbnQ6CisgICAgICAgIGNvbXBpbGVMYXp5SlNDb25z
dGFudChub2RlKTsKKyAgICAgICAgYnJlYWs7CisKICAgICBjYXNlIElkZW50aXR5OiB7CiAgICAg
ICAgIHNwZWN1bGF0ZShub2RlLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIHN3aXRjaCAobm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTk3NzgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc2NDcsNiArNzY0NywxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU2V0UmVn
RXhwT2JqCiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVMYXp5SlNDb25zdGFudChOb2RlKiBub2RlKQoreworICAgIEpTVmFsdWVSZWdzVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJl
Z3MoKTsKKyAgICBub2RlLT5sYXp5SlNWYWx1ZSgpLmVtaXQobV9qaXQsIHJlc3VsdFJlZ3MpOwor
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7Cit9CisKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxOTc3ODEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTI0MDAs
NiArMjQwMCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVQdXRBY2Nlc3NvckJ5VmFsKE5v
ZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRSZWdFeHBPYmplY3RMYXN0SW5kZXgoTm9kZSopOwog
ICAgIHZvaWQgY29tcGlsZVNldFJlZ0V4cE9iamVjdExhc3RJbmRleChOb2RlKik7CisgICAgdm9p
ZCBjb21waWxlTGF6eUpTQ29uc3RhbnQoTm9kZSopOwogICAgIAogICAgIHZvaWQgbW92ZVRydWVU
byhHUFJSZWcpOwogICAgIHZvaWQgbW92ZUZhbHNlVG8oR1BSUmVnKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNl
LmNwcAkocmV2aXNpb24gMTk3NzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
dHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkxLDcgKzI5MSw1
MSBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAg
ICAgCisKKyAgICAgICAgLy8gRklYTUU6IFdlIGhhdmUgYSBsb3Qgb2Ygc3RyaW5nIGNvbnN0YW50
LWZvbGRpbmcgcnVsZXMgaGVyZS4gSXQgd291bGQgYmUgZ3JlYXQgdG8KKyAgICAgICAgLy8gbW92
ZSB0aGVzZSB0byB0aGUgYWJzdHJhY3QgaW50ZXJwcmV0ZXIgb25jZSBBYnN0cmFjdFZhbHVlIGNh
biBzdXBwb3J0IExhenlKU1ZhbHVlLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU1MjA0CisKKyAgICAgICAgY2FzZSBNYWtlUm9wZToKKyAgICAg
ICAgY2FzZSBWYWx1ZUFkZDoKKyAgICAgICAgY2FzZSBTdHJDYXQ6IHsKKyAgICAgICAgICAgIFN0
cmluZyBsZWZ0U3RyaW5nID0gbV9ub2RlLT5jaGlsZDEoKS0+dHJ5R2V0U3RyaW5nKG1fZ3JhcGgp
OworICAgICAgICAgICAgaWYgKCFsZWZ0U3RyaW5nKQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgU3RyaW5nIHJpZ2h0U3RyaW5nID0gbV9ub2RlLT5jaGlsZDIoKS0+dHJ5R2V0
U3RyaW5nKG1fZ3JhcGgpOworICAgICAgICAgICAgaWYgKCFyaWdodFN0cmluZykKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFN0cmluZyBleHRyYVN0cmluZzsKKyAgICAgICAg
ICAgIGlmIChtX25vZGUtPmNoaWxkMygpKSB7CisgICAgICAgICAgICAgICAgZXh0cmFTdHJpbmcg
PSBtX25vZGUtPmNoaWxkMygpLT50cnlHZXRTdHJpbmcobV9ncmFwaCk7CisgICAgICAgICAgICAg
ICAgaWYgKCFleHRyYVN0cmluZykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKGxlZnRTdHJpbmcpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQo
cmlnaHRTdHJpbmcpOworICAgICAgICAgICAgaWYgKCEhZXh0cmFTdHJpbmcpCisgICAgICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmQoZXh0cmFTdHJpbmcpOworCisgICAgICAgICAgICBtX25vZGUt
PmNvbnZlcnRUb0xhenlKU0NvbnN0YW50KAorICAgICAgICAgICAgICAgIG1fZ3JhcGgsIExhenlK
U1ZhbHVlOjpuZXdTdHJpbmcobV9ncmFwaCwgYnVpbGRlci50b1N0cmluZygpKSk7CisgICAgICAg
ICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOiB7CisgICAgICAgICAgICBpZiAobV9ub2RlLT5h
cnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkdlbmVyaWMKKyAgICAgICAgICAgICAgICB8fCBt
X25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6U3RyaW5nKSB7CisgICAgICAgICAg
ICAgICAgU3RyaW5nIHN0cmluZyA9IG1fbm9kZS0+Y2hpbGQxKCktPnRyeUdldFN0cmluZyhtX2dy
YXBoKTsKKyAgICAgICAgICAgICAgICBpZiAoISFzdHJpbmcpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChtX25vZGUsIGpzTnVtYmVyKHN0cmluZy5sZW5n
dGgoKSkpOworICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lv
biAxOTc3ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZl
bCBjYW5Db21waWxlKE5vZGUqIAogICAgIAogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAg
IGNhc2UgSlNDb25zdGFudDoKKyAgICBjYXNlIExhenlKU0NvbnN0YW50OgogICAgIGNhc2UgR2V0
TG9jYWw6CiAgICAgY2FzZSBTZXRMb2NhbDoKICAgICBjYXNlIFB1dFN0YWNrOgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24g
MTk3NzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NDYsNiArNDQ2LDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2Fz
ZSBJbnQ1MkNvbnN0YW50OgogICAgICAgICAgICAgY29tcGlsZUludDUyQ29uc3RhbnQoKTsKICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExhenlKU0NvbnN0YW50OgorICAgICAgICAg
ICAgY29tcGlsZUxhenlKU0NvbnN0YW50KCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBEb3VibGVSZXA6CiAgICAgICAgICAgICBjb21waWxlRG91YmxlUmVwKCk7CiAgICAgICAg
ICAgICBicmVhazsKQEAgLTEwNDQsNiArMTA0NywxOCBAQCBwcml2YXRlOgogICAgICAgICBzZXRT
dHJpY3RJbnQ1MihtX291dC5jb25zdEludDY0KHZhbHVlKSk7CiAgICAgfQogCisgICAgdm9pZCBj
b21waWxlTGF6eUpTQ29uc3RhbnQoKQorICAgIHsKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBw
YXRjaHBvaW50ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7CisgICAgICAgIExhenlKU1ZhbHVl
IHZhbHVlID0gbV9ub2RlLT5sYXp5SlNWYWx1ZSgpOworICAgICAgICBwYXRjaHBvaW50LT5zZXRH
ZW5lcmF0b3IoCisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgIHZhbHVlLmVt
aXQoaml0LCBKU1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgICAgICBz
ZXRKU1ZhbHVlKHBhdGNocG9pbnQpOworICAgIH0KKwogICAgIHZvaWQgY29tcGlsZURvdWJsZVJl
cCgpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7
CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0No
YW5nZUxvZwkocmV2aXNpb24gMTk3NzgxKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyNyBAQAorMjAxNi0wMy0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgorCisgICAgICAgIERGRyBzaG91bGQgYmUgYWJsZSB0byBjb25zdGFudC1m
b2xkIHN0cmluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1NTIwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBzdXBwb3J0IGZvciBjbG9uaW5nIGEgU3RyaW5nSW1wbC4gVGhpcyBhbGxvd3MgdGhl
IEpJVCB0aHJlYWQgdG8gY3JlYXRlIGl0cyBvd24KKyAgICAgICAgc2hhZG93IHZlcnNpb25zIG9m
IHRoZSBTdHJpbmdJbXBscyBpdCdzIGFuYWx5emluZywgc28gdGhhdCBpdCBjYW4gdXNlIFdURlN0
cmluZyBBUElzLgorCisgICAgICAgIEFsc28gZGlzYWJsZSBhc3NlcnRpb25zIGFib3V0IHJlZmVy
ZW5jZSBjb3VudGluZyBzdHJpbmdzIG9uIHRoZSBKSVQgdGhyZWFkLiBXZSB3aWxsIGRvCisgICAg
ICAgIHRoYXQgbm93IGFuZCBpdCdzIE9LLgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1w
bC5jcHA6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnJlYWxsb2NhdGUpOgorICAgICAgICAo
V1RGOjpTdHJpbmdJbXBsOjpjbG9uZSk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNyZWF0
ZUludGVybmFsKToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmg6CisgICAgICAgIChX
VEY6OlN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6
ZmxhZ0lzOEJpdCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmZsYWdJc0F0b21pYyk6Cisg
ICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnJlZik6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6
OmRlcmVmKToKKwogMjAxNi0wMy0wNyAgS2VpdGggUm9sbGluICA8a3JvbGxpbkBhcHBsZS5jb20+
CiAKICAgICAgICAgRW5oYW5jZSBsb2dnaW5nOiBVc2UgImFsd2F5cyBvbiIgbWFjcm9zCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAJKHJldmlzaW9uIDE5Nzc4MSkKKysrIFNvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNyw2ICsy
MzcsMTQgQEAgUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlYWxsb2NhdGUoUAogICAgIHJl
dHVybiByZWFsbG9jYXRlSW50ZXJuYWwob3JpZ2luYWxTdHJpbmcsIGxlbmd0aCwgZGF0YSk7CiB9
CiAKKworUmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNsb25lKCkgY29uc3QKK3sKKyAgICBp
ZiAoaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBjcmVhdGUoY2hhcmFjdGVyczgoKSwgbGVuZ3Ro
KCkpOworICAgIHJldHVybiBjcmVhdGUoY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpKTsKK30KKwog
dGVtcGxhdGUgPHR5cGVuYW1lIENoYXJUeXBlPgogaW5saW5lIFJlZjxTdHJpbmdJbXBsPiBTdHJp
bmdJbXBsOjpjcmVhdGVJbnRlcm5hbChjb25zdCBDaGFyVHlwZSogY2hhcmFjdGVycywgdW5zaWdu
ZWQgbGVuZ3RoKQogewpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHJldmlzaW9uIDE5
Nzc4MSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MTcsNiArNDE3LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4g
cmVhbGxvY2F0ZShQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG9yaWdpbmFsU3RyaW5nLCB1bnNpZ25l
ZCBsZW5ndGgsIExDaGFyKiYgZGF0YSk7CiAgICAgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiByZWFs
bG9jYXRlKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gb3JpZ2luYWxTdHJpbmcsIHVuc2lnbmVkIGxl
bmd0aCwgVUNoYXIqJiBkYXRhKTsKIAorICAgIFJlZjxTdHJpbmdJbXBsPiBjbG9uZSgpIGNvbnN0
OworCiAgICAgc3RhdGljIHVuc2lnbmVkIGZsYWdzT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKFN0cmluZ0ltcGwsIG1faGFzaEFuZEZsYWdzKTsgfQogICAgIHN0YXRpYyB1bnNpZ25l
ZCBmbGFnSXM4Qml0KCkgeyByZXR1cm4gc19oYXNoRmxhZzhCaXRCdWZmZXI7IH0KICAgICBzdGF0
aWMgdW5zaWduZWQgZmxhZ0lzQXRvbWljKCkgeyByZXR1cm4gc19oYXNoRmxhZ1N0cmluZ0tpbmRJ
c0F0b21pYzsgfQpAQCAtNTg1LDggKzU4Nyw2IEBAIHB1YmxpYzoKIAogICAgIGlubGluZSB2b2lk
IHJlZigpCiAgICAgewotICAgICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7Ci0K
ICAgICAgICAgU1RSSU5HX1NUQVRTX1JFRl9TVFJJTkcoKnRoaXMpOwogCiAgICAgICAgIG1fcmVm
Q291bnQgKz0gc19yZWZDb3VudEluY3JlbWVudDsKQEAgLTU5NCw4ICs1OTQsNiBAQCBwdWJsaWM6
CiAKICAgICBpbmxpbmUgdm9pZCBkZXJlZigpCiAgICAgewotICAgICAgICBBU1NFUlQoIWlzQ29t
cGlsYXRpb25UaHJlYWQoKSk7Ci0KICAgICAgICAgU1RSSU5HX1NUQVRTX0RFUkVGX1NUUklORygq
dGhpcyk7CiAKICAgICAgICAgdW5zaWduZWQgdGVtcFJlZkNvdW50ID0gbV9yZWZDb3VudCAtIHNf
cmVmQ291bnRJbmNyZW1lbnQ7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTc3ODEpCisrKyBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAxNi0wMy0w
OCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIE5lZWQgYSBzaG9y
dCBkZXNjcmlwdGlvbiAoT09QUyEpLgorICAgICAgICBOZWVkIHRoZSBidWcgVVJMIChPT1BTISku
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBqcy9y
ZWdyZXNzL3NjcmlwdC10ZXN0cy9zdHJjYXQtY29uc3QuanM6IEFkZGVkLgorICAgICAgICAoZm9v
KToKKyAgICAgICAgKGJhcik6CisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvc3Ry
Y2F0LWxlbmd0aC1jb25zdC5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAoYmFy
KToKKyAgICAgICAgKiBqcy9yZWdyZXNzL3N0cmNhdC1jb25zdC1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc3RyY2F0LWNvbnN0Lmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGpzL3JlZ3Jlc3Mvc3RyY2F0LWxlbmd0aC1jb25zdC1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGpzL3JlZ3Jlc3Mvc3RyY2F0LWxlbmd0aC1jb25zdC5odG1sOiBBZGRlZC4KKwog
MjAxNi0wMy0wOCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbRVM2XSBSZWd1bGFyIEV4cHJlc3Npb24gY2Fub25pY2FsaXphdGlvbiB0YWJsZXMgZm9yIFVu
aWNvZGUgbmVlZCB0byBiZSB1cGRhdGVkIHRvIHVzZSBVbmljb2RlIENhc2VGb2xkaW5nLnR4dApJ
bmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zdHJjYXQtY29uc3QtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc3RyY2F0LWNvbnN0LWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc3RyY2F0LWNvbnN0
LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3Mv
c3RyY2F0LWNvbnN0CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4
Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3N0cmNhdC1jb25zdC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc3RyY2F0LWNvbnN0Lmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3N0cmNhdC1jb25zdC5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAi
LS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3N0cmNhdC1jb25zdC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3N0cmNhdC1sZW5ndGgt
Y29uc3QtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
c3RyY2F0LWxlbmd0aC1jb25zdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL3N0cmNhdC1sZW5ndGgtY29uc3QtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9zdHJjYXQtbGVuZ3RoLWNvbnN0CisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24K
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4
OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3N0cmNhdC1sZW5ndGgtY29uc3QuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3N0cmNhdC1sZW5ndGgtY29uc3QuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc3RyY2F0LWxlbmd0aC1jb25z
dC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBV
QkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3N0cmNhdC1sZW5ndGgtY29uc3QuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9z
Y3JpcHQtdGVzdHMvc3RyY2F0LWNvbnN0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3N0cmNhdC1jb25zdC5qcwkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3N0cmNhdC1jb25zdC5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE2IEBACitmdW5jdGlvbiBmb28oYSwgYikgeworICAgIHJldHVy
biBhICsgYjsKK30KKworZnVuY3Rpb24gYmFyKCkgeworICAgIHJldHVybiBmb28oImhlbGxvICIs
ICJ3b3JsZCEiKTsKK30KKworbm9JbmxpbmUoYmFyKTsKKwordmFyIHJlc3VsdDsKK2ZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDAwMDsgKytpKQorICAgIHJlc3VsdCA9IGJhcigpOworCitpZiAocmVz
dWx0ICE9ICJoZWxsbyB3b3JsZCEiKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiAr
IHJlc3VsdDsKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3N0cmNh
dC1sZW5ndGgtY29uc3QuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9z
Y3JpcHQtdGVzdHMvc3RyY2F0LWxlbmd0aC1jb25zdC5qcwkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3N0cmNhdC1sZW5ndGgtY29uc3QuanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNiBAQAorZnVuY3Rpb24gZm9vKGEsIGIpIHsKKyAgICBy
ZXR1cm4gKGEgKyBiKS5sZW5ndGg7Cit9CisKK2Z1bmN0aW9uIGJhcigpIHsKKyAgICByZXR1cm4g
Zm9vKCJoZWxsbyAiLCAid29ybGQhIik7Cit9CisKK25vSW5saW5lKGJhcik7CisKK3ZhciByZXN1
bHQ7Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkKKyAgICByZXN1bHQgPSBiYXIo
KTsKKworaWYgKHJlc3VsdCAhPSAiaGVsbG8gd29ybGQhIi5sZW5ndGgpCisgICAgdGhyb3cgIkVy
cm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273375</attachid>
            <date>2016-03-08 19:57:42 -0800</date>
            <delta_ts>2016-03-08 20:34:37 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>38780</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk3ODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMiBA
QAorMjAxNi0wMy0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgYmUgYWJsZSB0byBjb25zdGFudC1mb2xkIHN0cmluZ3MKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTIwMAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgYWRkcyBjb25zdGFudC1m
b2xkaW5nIG9mIHN0cmluZzEgKyBzdHJpbmcyIGFuZCBzdHJpbmcubGVuZ3RoLiBUaGUgYWN0dWFs
IGZvbGRpbmcKKyAgICAgICAgcnVsZSBpcyBlYXN5LCBidXQgdGhlcmUgYXJlIHNvbWUgZ290Y2hh
cy4KKworICAgICAgICBUaGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBERkcgY2Fubm90IGFsbG9jYXRl
IG5ldyBKU1N0cmluZyBvYmplY3RzIHVudGlsIHdlIGFyZSBvbiB0aGUKKyAgICAgICAgbWFpbiB0
aHJlYWQuIFNvLCBERkcgSVIgbXVzdCBoYXZlIGEgbm9kZSBmb3IgYSBKU1ZhbHVlIHN0cmluZyBj
b25zdGFudCB0aGF0IGhhc24ndCBiZWVuCisgICAgICAgIGNyZWF0ZWQgeWV0IC0gaS5lLiBpdCBk
b2Vzbid0IGhhdmUgYW55IGNvbmNyZXRlIEpTVmFsdWUgYml0cyB5ZXQuCisKKyAgICAgICAgV2Ug
aGF2ZSB0aGUgYWJpbGl0eSB0byBzcGVhayBvZiBzdWNoIHRoaW5ncywgdXNpbmcgTGF6eUpTVmFs
dWUuIEJ1dCB0aGF0J3MgYSBjbGFzcywgbm90CisgICAgICAgIGEgbm9kZSB0eXBlLiBUaGlzIHBh
dGNoIG5vdyBhZGRzIGEgbm9kZSB0eXBlLCBMYXp5SlNDb25zdGFudCwgd2hpY2ggaXMgYSBOb2Rl
IHRoYXQgaG9sZHMKKyAgICAgICAgYSBMYXp5SlNWYWx1ZS4KKworICAgICAgICBUaGlzIHB1dHMg
dXMgaW4gYSB3ZWlyZCBzaXR1YXRpb246IEFJIHVzZXMgSlNWYWx1ZSB0byByZXByZXNlbnQgY29u
c3RhbnRzLiBJdCB3b3VsZCB0YWtlCisgICAgICAgIGEgbG90IG9mIHdvcmsgdG8gY2hhbmdlIGl0
IHRvIHVzZSBMYXp5SlNWYWx1ZS4gU28sIHRoaXMgaW1wbGVtZW50cyB0aGUgY29uc3RhbnQgZm9s
ZGluZworICAgICAgICBpbiBTdHJlbmd0aFJlZHVjdGlvblBoYXNlLiBJIGNyZWF0ZWQgYSBidWcg
YW5kIHB1dCBhIEZJWE1FIGFib3V0IG1vdmluZyB0aGVzZSBydWxlcyBpbnRvCisgICAgICAgIEFJ
LgorCisgICAgICAgIE9UT0gsIG91ciBleHBlcmllbmNlIGluIEIzIHNob3dzIHRoYXQgY29uc3Rh
bnQgZm9sZGluZyBpbiBzdHJlbmd0aCByZWR1Y3Rpb24gaXMgcXVpdGUKKyAgICAgICAgbmljZS4g
SXQgd291bGQgdG90YWxseSBtYWtlIHNlbnNlIHRvIGhhdmUgc3RyZW5ndGggcmVkdWN0aW9uIGhh
dmUgY29uc3RhbnQgZm9sZGluZyBydWxlcworICAgICAgICB0aGF0IG1pcnJvciB0aGUgcnVsZXMg
aW4gQUksIG9yIHRvIGZhY3RvciBvdXQgdGhlIEFJIGNvbnN0YW50IGZvbGRpbmcgcnVsZXMsIHRo
ZSBzYW1lCisgICAgICAgIHdheSB0aGF0IEIzIGZhY3RvcnMgb3V0IHRob3NlIHJ1bGVzIGludG8g
VmFsdWUgbWV0aG9kcy4KKworICAgICAgICBBbm90aGVyIGlzc3VlIGlzIGhvdyB0byByZXByZXNl
bnQgdGhlIGN1bXVsYXRpdmUgcmVzdWx0IG9mIHBvc3NpYmx5IG1hbnkgZm9sZGluZ3MuIEkKKyAg
ICAgICAgaW5pdGlhbGx5IGNvbnNpZGVyZWQgYWRkaW5nIExhenlKU1ZhbHVlIGtpbmRzIHRoYXQg
cmVwcmVzZW50ZWQgY29uY2F0ZW5hdGlvbi4gRm9sZGluZworICAgICAgICB0aGUgY29uY2F0ZW5h
dGlvbiB0byBhIGNvbnN0YW50IG1lYW5kIHRoYXQgdGhpcyBjb25zdGFudCB3YXMgYWN0dWFsbHkg
YSBMYXp5SlNWYWx1ZSB0aGF0CisgICAgICAgIHJlcHJlc2VudGVkIHRoZSBjb25jYXRlbmF0aW9u
IG9mIHR3byBvdGhlciB0aGluZ3MuIEJ1dCB0aGlzIHdvdWxkIGdldCBzdXBlciBtZXNzeSBpZiB3
ZQorICAgICAgICB3YW50ZWQgdG8gZm9sZCBhbiBvcGVyYXRpb24gdGhhdCB1c2VzIHRoZSByZXN1
bHRzIG9mIGFub3RoZXIgZm9sZGVkIG9wZXJhdGlvbi4KKworICAgICAgICBTbywgdGhlIEpJVCB0
aHJlYWQgZm9sZHMgc3RyaW5nIG9wZXJhdGlvbnMgYnkgY3JlYXRpbmcgYSBXVEY6OlN0cmluZyB0
aGF0IGNvbnRhaW5zIHRoZQorICAgICAgICByZXN1bHQuIFRoZSBERkc6OkdyYXBoIGhvbGRzIGEg
KzEgb24gdGhlIHVuZGVybHlpbmcgU3RyaW5nSW1wbCwgc28gd2UgY2FuIHBhc3MgdGhlCisgICAg
ICAgIFN0cmluZ0ltcGwqIGFyb3VuZCB3aXRob3V0IHJlZmVyZW5jZSBjb3VudGluZy4gVGhlIExh
enlKU1ZhbHVlIG5vdyBoYXMgYSBzcGVjaWFsIGtpbmQKKyAgICAgICAgdGhhdCBtZWFuczogd2Ug
Y3JlYXRlZCB0aGlzIFN0cmluZ0ltcGwqIG9uIHRoZSBKSVQgdGhyZWFkLCBhbmQgb25jZSB0aGUg
SklUIGlzIGRvbmUsIHdlCisgICAgICAgIHdpbGwgcmVsaW5xdWlzaCBvd25lcnNoaXAgb2YgaXQu
IExhenlKU1ZhbHVlIGhhcyBzb21lIG1hZ2ljIHRvIGVtaXQgY29kZSBmb3IgdGhlc2UKKyAgICAg
ICAgdG8tYmUtY3JlYXRlZC1KU1N0cmluZ3Mgd2hpbGUgYWxzbyB0cmFuc2ZlcnJpbmcgb3duZXJz
aGlwIG9mIHRoZSBTdHJpbmdJbXBsIGZyb20gdGhlIEpJVAorICAgICAgICB0aHJlYWQgdG8gdGhl
IG1haW4gdGhyZWFkIGFuZCByZWdpc3RlcmluZyB0aGUgSlNTdHJpbmcgd2l0aCB0aGUgR0MuCisK
KyAgICAgICAgVGhpcyBqdXN0IGltcGxlbWVudHMgZm9sZGluZyBmb3IgY29uY2F0ZW5hdGlvbiBh
bmQgR2V0QXJyYXlMZW5ndGguIEl0J3MganVzdCBhIHByb29mIG9mCisgICAgICAgIGNvbmNlcHQg
Zm9yIGV2aWwgdGhpbmdzIEkgd2FudCB0byBkbyBsYXRlci4KKworICAgICAgICBUaGlzIGNoYW5n
ZSBpcyBhIDIuNXggc3BlZWQtdXAgb24gdGhlIHN0cmluZyBjb25jYXRlbmF0aW9uIG1pY3JvYmVu
Y2htYXJrcyBJIGFkZGVkIGluCisgICAgICAgIHRoaXMgcGF0Y2guCisKKyAgICAgICAgKiBkZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAg
ICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6
ZSk6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9l
c0dDKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHRnJvemVuVmFsdWUu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkZyb3plblZhbHVlOjplbXB0eVNpbmdsZXRvbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6RnJvemVuVmFsdWU6OnRyeUdldFN0cmluZyk6CisgICAgICAgIChK
U0M6OkRGRzo6RnJvemVuVmFsdWU6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAqIGRmZy9ERkdG
cm96ZW5WYWx1ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkZyb3plblZhbHVlOjpzdHJlbmd0aCk6
CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgICogZGZnL0RGR0xhenlKU1ZhbHVl
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpMYXp5SlNWYWx1ZTo6bmV3U3RyaW5nKToKKyAgICAg
ICAgKEpTQzo6REZHOjpMYXp5SlNWYWx1ZTo6Z2V0VmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6
OmVxdWFsVG9TdHJpbmdJbXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpMYXp5SlNWYWx1ZTo6dHJ5
R2V0U3RyaW5nSW1wbCk6CisgICAgICAgIChKU0M6OkRGRzo6TGF6eUpTVmFsdWU6OnRyeUdldFN0
cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6TGF6eUpTVmFsdWU6OnN0cmljdEVxdWFsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpMYXp5SlNWYWx1ZTo6c3dpdGNoTG9va3VwVmFsdWUpOgorICAgICAg
ICAoSlNDOjpERkc6OkxhenlKU1ZhbHVlOjplbWl0KToKKyAgICAgICAgKEpTQzo6REZHOjpMYXp5
SlNWYWx1ZTo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgICogZGZnL0RGR0xhenlKU1ZhbHVlLmg6
CisgICAgICAgIChKU0M6OkRGRzo6TGF6eUpTVmFsdWU6OkxhenlKU1ZhbHVlKToKKyAgICAgICAg
KEpTQzo6REZHOjpMYXp5SlNWYWx1ZTo6a25vd25TdHJpbmdJbXBsKToKKyAgICAgICAgKEpTQzo6
REZHOjpMYXp5SlNWYWx1ZTo6a2luZCk6CisgICAgICAgIChKU0M6OkRGRzo6TGF6eUpTVmFsdWU6
OnRyeUdldFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpMYXp5SlNWYWx1ZTo6Y2hhcmFjdGVy
KToKKyAgICAgICAgKEpTQzo6REZHOjpMYXp5SlNWYWx1ZTo6c3RyaW5nSW1wbCk6CisgICAgICAg
ICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om1heUV4aXQpOgorICAg
ICAgICAqIGRmZy9ERkdOb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjb252ZXJ0
VG9JZGVudGl0eU9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjb252ZXJ0VG9MYXp5SlND
b25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRvUHV0SGludCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRvUHV0Q2xvc3VyZVZhckhpbnQpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6OnRyeUdldFN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6cHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IpOgorICAgICAgICAqIGRmZy9ERkdOb2Rl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRvQ29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRUb0NvbnN0YW50U3RvcmFnZVBvaW50ZXIpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6OmNhc3RDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6aGFzTGF6eUpTVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmxhenlKU1Zh
bHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjppbml0aWFsaXphdGlvblZhbHVlRm9yQWN0
aXZhdGlvbik6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVTZXRSZWdFeHBPYmplY3RMYXN0SW5kZXgpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTGF6eUpTQ29uc3RhbnQpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3RyZW5ndGhS
ZWR1Y3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3RyZW5ndGhSZWR1Y3Rpb25Q
aGFzZTo6aGFuZGxlTm9kZSk6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVO
b2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUludDUy
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxl
TGF6eUpTQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlRG91YmxlUmVwKToKKwogMjAxNi0wMy0wOCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jh
cm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IE1lbW9yeSBUaW1lbGluZSBz
aG91bGQgc2hvdyBNZW1vcnlQcmVzc3VyZSBldmVudHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJ
KHJldmlzaW9uIDE5Nzc4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDYgKzE0MSwyMSBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIHNldEJ1
aWx0SW5Db25zdGFudChub2RlLCAqbm9kZS0+Y29uc3RhbnQoKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KKworICAgIGNhc2UgTGF6eUpTQ29uc3RhbnQ6IHsKKyAgICAgICAgTGF6eUpTVmFsdWUg
dmFsdWUgPSBub2RlLT5sYXp5SlNWYWx1ZSgpOworICAgICAgICBzd2l0Y2ggKHZhbHVlLmtpbmQo
KSkgeworICAgICAgICBjYXNlIExhenlKU1ZhbHVlOjpLbm93blZhbHVlOgorICAgICAgICAgICAg
c2V0Q29uc3RhbnQobm9kZSwgdmFsdWUudmFsdWUoKS0+dmFsdWUoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBMYXp5SlNWYWx1ZTo6U2luZ2xlQ2hhcmFjdGVyU3RyaW5nOgor
ICAgICAgICBjYXNlIExhenlKU1ZhbHVlOjpLbm93blN0cmluZ0ltcGw6CisgICAgICAgIGNhc2Ug
TGF6eUpTVmFsdWU6Ok5ld1N0cmluZ0ltcGw6CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dFR5cGUobV9ncmFwaCwgU3BlY1N0cmluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgIAogICAgIGNhc2UgSWRlbnRpdHk6IHsK
ICAgICAgICAgZm9yTm9kZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE5Nzc4
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTMsNyArMTEzLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZQogICAgIGNhc2UgSW50NTJDb25zdGFudDoKICAgICAgICAgZGVmKFB1cmVWYWx1
ZShub2RlLCBub2RlLT5jb25zdGFudCgpKSk7CiAgICAgICAgIHJldHVybjsKLSAgICAgICAgCisK
ICAgICBjYXNlIElkZW50aXR5OgogICAgIGNhc2UgUGhhbnRvbToKICAgICBjYXNlIENoZWNrOgpA
QCAtMTIxLDYgKzEyMSwxMSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToKICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKKyAgICBjYXNlIExhenlKU0NvbnN0YW50OgorICAgICAgICAvLyBXZSBzaG91bGQg
ZW5hYmxlIENTRSBvZiBMYXp5SlNDb25zdGFudC4gSXQncyBhIGxpdHRsZSBhbm5veWluZyBzaW5j
ZSBMYXp5SlNWYWx1ZSBoYXMKKyAgICAgICAgLy8gbW9yZSBiaXRzIHRoYW4gd2UgY3VycmVudGx5
IGhhdmUgaW4gUHVyZVZhbHVlLgorICAgICAgICByZXR1cm47CisgICAgICAgIAogICAgIGNhc2Ug
QXJpdGhJTXVsOgogICAgIGNhc2UgQXJpdGhBYnM6CiAgICAgY2FzZSBBcml0aENsejMyOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMTk3Nzgx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw2ICs0Nyw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSkKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKICAgICBj
YXNlIEludDUyQ29uc3RhbnQ6CisgICAgY2FzZSBMYXp5SlNDb25zdGFudDoKICAgICBjYXNlIElk
ZW50aXR5OgogICAgIGNhc2UgR2V0Q2FsbGVlOgogICAgIGNhc2UgR2V0QXJndW1lbnRDb3VudDoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2
aXNpb24gMTk3NzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1MSw2ICsxNDUxLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgLy8gSGF2ZSB0aGVzZSBuby1vcCBjYXNlcyBoZXJlIHRvIGVuc3VyZSB0aGF0IG5vYm9keSBm
b3JnZXRzIHRvIGFkZCBoYW5kbGVycyBmb3IgbmV3IG9wY29kZXMuCiAgICAgICAgIGNhc2UgU2V0
QXJndW1lbnQ6CiAgICAgICAgIGNhc2UgSlNDb25zdGFudDoKKyAgICAgICAgY2FzZSBMYXp5SlND
b25zdGFudDoKICAgICAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKICAgICAgICAgY2FzZSBHZXRM
b2NhbDoKICAgICAgICAgY2FzZSBHZXRDYWxsZWU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Zyb3plblZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Zyb3plblZhbHVlLmNwcAkocmV2aXNpb24gMTk3NzgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGcm96ZW5WYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4
LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiREZHTGF6eUpT
VmFsdWUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKQEAgLTM4LDYgKzM5LDExIEBAIEZyb3plblZhbHVlKiBGcm96ZW5WYWx1ZTo6
ZW1wdHlTaW5nbGV0b24KICAgICByZXR1cm4gJmVtcHR5OwogfQogCitTdHJpbmcgRnJvemVuVmFs
dWU6OnRyeUdldFN0cmluZyhHcmFwaCYgZ3JhcGgpCit7CisgICAgcmV0dXJuIExhenlKU1ZhbHVl
KHRoaXMpLnRyeUdldFN0cmluZyhncmFwaCk7Cit9CisKIHZvaWQgRnJvemVuVmFsdWU6OmR1bXBJ
bkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7
CiAgICAgaWYgKCEhbV92YWx1ZSAmJiBtX3ZhbHVlLmlzQ2VsbCgpKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGcm96ZW5WYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRnJvemVuVmFsdWUuaAkocmV2aXNpb24gMTk3NzgxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGcm96ZW5WYWx1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTkzLDYgKzkzLDggQEAgcHVibGljOgogICAgIAogICAgIC8vIFRoZSBzdHJlbmd0aCBv
ZiB0aGUgdmFsdWUgaXRzZWxmLiBUaGUgc3RydWN0dXJlIGlzIGFsbW9zdCBhbHdheXMgd2Vhay4K
ICAgICBWYWx1ZVN0cmVuZ3RoIHN0cmVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zdHJlbmd0aDsg
fQorCisgICAgU3RyaW5nIHRyeUdldFN0cmluZyhHcmFwaCYpOwogICAgIAogICAgIHZvaWQgZHVt
cEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3Q7
CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTk3NzgxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NjgsNiArODY4LDcg
QEAgcHVibGljOgogICAgIEJhZzxDYWxsVmFyYXJnc0RhdGE+IG1fY2FsbFZhcmFyZ3NEYXRhOwog
ICAgIEJhZzxMb2FkVmFyYXJnc0RhdGE+IG1fbG9hZFZhcmFyZ3NEYXRhOwogICAgIEJhZzxTdGFj
a0FjY2Vzc0RhdGE+IG1fc3RhY2tBY2Nlc3NEYXRhOworICAgIEJhZzxMYXp5SlNWYWx1ZT4gbV9s
YXp5SlNWYWx1ZXM7CiAgICAgVmVjdG9yPElubGluZVZhcmlhYmxlRGF0YSwgND4gbV9pbmxpbmVW
YXJpYWJsZURhdGE7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVs
bEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7CiAgICAgSGFzaE1hcDxDb2Rl
QmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVLaWxscz4+IG1fYnl0ZWNvZGVLaWxsczsK
QEAgLTg4MCw2ICs4ODEsOSBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbV9sb2NhbFZhcnM7CiAg
ICAgdW5zaWduZWQgbV9uZXh0TWFjaGluZUxvY2FsOwogICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVy
U2xvdHM7CisgICAgCisgICAgSGFzaFNldDxTdHJpbmc+IG1fbG9jYWxTdHJpbmdzOworICAgIEhh
c2hNYXA8Y29uc3QgU3RyaW5nSW1wbCosIFN0cmluZz4gbV9jb3BpZWRTdHJpbmdzOwogCiAjaWYg
VVNFKEpTVkFMVUUzMl82NCkKICAgICBzdGQ6OnVub3JkZXJlZF9tYXA8aW50NjRfdCwgZG91Ymxl
Kj4gbV9kb3VibGVDb25zdGFudHNNYXA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAxOTc3ODEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgy
LDYgKzgyLDEwIEBAIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkKIAogdm9p
ZCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplQ29tbW9uKCkKIHsKKyAgICAvLyBTb21lIEpJVCBmaW5h
bGl6ZXJzIG1heSBoYXZlIGFkZGVkIG1vcmUgY29uc3RhbnRzLiBTaHJpbmstdG8tZml0IHRob3Nl
IHRoaW5ncyBub3cuCisgICAgbV9wbGFuLmNvZGVCbG9jay0+Y29uc3RhbnRzKCkuc2hyaW5rVG9G
aXQoKTsKKyAgICBtX3BsYW4uY29kZUJsb2NrLT5jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24oKS5zaHJpbmtUb0ZpdCgpOworICAgIAogI2lmIEVOQUJMRShGVExfSklUKQogICAgIG1f
aml0Q29kZS0+b3B0aW1pemVBZnRlcldhcm1VcChtX3BsYW4uY29kZUJsb2NrKTsKICNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6
eUpTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TGF6eUpTVmFsdWUuY3BwCShyZXZpc2lvbiAxOTc3ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0xhenlKU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgs
MTAgKzI4LDIxIEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkNDYWxsSGVs
cGVycy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgor
I2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogCitMYXp5SlNWYWx1ZSBMYXp5SlNWYWx1ZTo6bmV3U3RyaW5nKEdyYXBoJiBncmFwaCwgY29u
c3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgTGF6eUpTVmFsdWUgcmVzdWx0OworICAgIHJlc3Vs
dC5tX2tpbmQgPSBOZXdTdHJpbmdJbXBsOworICAgIHJlc3VsdC51LnN0cmluZ0ltcGwgPSBncmFw
aC5tX2xvY2FsU3RyaW5ncy5hZGQoc3RyaW5nKS5pdGVyYXRvci0+aW1wbCgpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKIEpTVmFsdWUgTGF6eUpTVmFsdWU6OmdldFZhbHVlKFZNJiB2bSkgY29u
c3QKIHsKICAgICBzd2l0Y2ggKG1fa2luZCkgewpAQCAtNDAsNiArNTEsNyBAQCBKU1ZhbHVlIExh
enlKU1ZhbHVlOjpnZXRWYWx1ZShWTSYgdm0pIGNvCiAgICAgY2FzZSBTaW5nbGVDaGFyYWN0ZXJT
dHJpbmc6CiAgICAgICAgIHJldHVybiBqc1NpbmdsZUNoYXJhY3RlclN0cmluZygmdm0sIHUuY2hh
cmFjdGVyKTsKICAgICBjYXNlIEtub3duU3RyaW5nSW1wbDoKKyAgICBjYXNlIE5ld1N0cmluZ0lt
cGw6CiAgICAgICAgIHJldHVybiBqc1N0cmluZygmdm0sIHUuc3RyaW5nSW1wbCk7CiAgICAgfQog
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC03NSw2ICs4Nyw0OCBAQCBzdGF0
aWMgVHJpU3RhdGUgZXF1YWxUb1N0cmluZ0ltcGwoSlNWYWx1CiAgICAgcmV0dXJuIHRyaVN0YXRl
KFdURjo6ZXF1YWwoc3RyaW5nSW1wbCwgc3RyaW5nKSk7CiB9CiAKK2NvbnN0IFN0cmluZ0ltcGwq
IExhenlKU1ZhbHVlOjp0cnlHZXRTdHJpbmdJbXBsKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1f
a2luZCkgeworICAgIGNhc2UgS25vd25TdHJpbmdJbXBsOgorICAgIGNhc2UgTmV3U3RyaW5nSW1w
bDoKKyAgICAgICAgcmV0dXJuIHUuc3RyaW5nSW1wbDsKKworICAgIGNhc2UgS25vd25WYWx1ZToK
KyAgICAgICAgaWYgKEpTU3RyaW5nKiBzdHJpbmcgPSBqc0R5bmFtaWNDYXN0PEpTU3RyaW5nKj4o
dmFsdWUoKS0+dmFsdWUoKSkpCisgICAgICAgICAgICByZXR1cm4gc3RyaW5nLT50cnlHZXRWYWx1
ZUltcGwoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9CisKK1N0cmluZyBMYXp5SlNWYWx1ZTo6dHJ5R2V0
U3RyaW5nKEdyYXBoJiBncmFwaCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAg
IGNhc2UgTmV3U3RyaW5nSW1wbDoKKyAgICAgICAgcmV0dXJuIHUuc3RyaW5nSW1wbDsKKworICAg
IGNhc2UgU2luZ2xlQ2hhcmFjdGVyU3RyaW5nOgorICAgICAgICByZXR1cm4gU3RyaW5nKCZ1LmNo
YXJhY3RlciwgMSk7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBpZiAoY29uc3QgU3RyaW5nSW1w
bCogc3RyaW5nID0gdHJ5R2V0U3RyaW5nSW1wbCgpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBn
aW5vcm1vdXNTdHJpbmdMZW5ndGggPSAxMDAwMDsKKyAgICAgICAgICAgIGlmIChzdHJpbmctPmxl
bmd0aCgpID4gZ2lub3Jtb3VzU3RyaW5nTGVuZ3RoKQorICAgICAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXV0byByZXN1bHQgPSBncmFwaC5t
X2NvcGllZFN0cmluZ3MuYWRkKHN0cmluZywgU3RyaW5nKCkpOworICAgICAgICAgICAgaWYgKHJl
c3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
PSBzdHJpbmctPmNsb25lKCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAg
IH0KK30KKwogVHJpU3RhdGUgTGF6eUpTVmFsdWU6OnN0cmljdEVxdWFsKGNvbnN0IExhenlKU1Zh
bHVlJiBvdGhlcikgY29uc3QKIHsKICAgICBzd2l0Y2ggKG1fa2luZCkgewpAQCAtODUsNiArMTM5
LDcgQEAgVHJpU3RhdGUgTGF6eUpTVmFsdWU6OnN0cmljdEVxdWFsKGNvbnN0IAogICAgICAgICBj
YXNlIFNpbmdsZUNoYXJhY3RlclN0cmluZzoKICAgICAgICAgICAgIHJldHVybiBlcXVhbFRvU2lu
Z2xlQ2hhcmFjdGVyKHZhbHVlKCktPnZhbHVlKCksIG90aGVyLmNoYXJhY3RlcigpKTsKICAgICAg
ICAgY2FzZSBLbm93blN0cmluZ0ltcGw6CisgICAgICAgIGNhc2UgTmV3U3RyaW5nSW1wbDoKICAg
ICAgICAgICAgIHJldHVybiBlcXVhbFRvU3RyaW5nSW1wbCh2YWx1ZSgpLT52YWx1ZSgpLCBvdGhl
ci5zdHJpbmdJbXBsKCkpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtOTMsNiArMTQ4
LDcgQEAgVHJpU3RhdGUgTGF6eUpTVmFsdWU6OnN0cmljdEVxdWFsKGNvbnN0IAogICAgICAgICBj
YXNlIFNpbmdsZUNoYXJhY3RlclN0cmluZzoKICAgICAgICAgICAgIHJldHVybiB0cmlTdGF0ZShj
aGFyYWN0ZXIoKSA9PSBvdGhlci5jaGFyYWN0ZXIoKSk7CiAgICAgICAgIGNhc2UgS25vd25TdHJp
bmdJbXBsOgorICAgICAgICBjYXNlIE5ld1N0cmluZ0ltcGw6CiAgICAgICAgICAgICBpZiAob3Ro
ZXIuc3RyaW5nSW1wbCgpLT5sZW5ndGgoKSAhPSAxKQogICAgICAgICAgICAgICAgIHJldHVybiBG
YWxzZVRyaVN0YXRlOwogICAgICAgICAgICAgcmV0dXJuIHRyaVN0YXRlKG90aGVyLnN0cmluZ0lt
cGwoKS0+YXQoMCkgPT0gY2hhcmFjdGVyKCkpOwpAQCAtMTAxLDggKzE1NywxMCBAQCBUcmlTdGF0
ZSBMYXp5SlNWYWx1ZTo6c3RyaWN0RXF1YWwoY29uc3QgCiAgICAgICAgIH0KICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBLbm93blN0cmluZ0ltcGw6CisgICAgY2FzZSBOZXdTdHJpbmdJbXBsOgog
ICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewogICAgICAgICBjYXNlIEtub3duU3RyaW5n
SW1wbDoKKyAgICAgICAgY2FzZSBOZXdTdHJpbmdJbXBsOgogICAgICAgICAgICAgcmV0dXJuIHRy
aVN0YXRlKFdURjo6ZXF1YWwoc3RyaW5nSW1wbCgpLCBvdGhlci5zdHJpbmdJbXBsKCkpKTsKICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBvdGhlci5zdHJpY3RFcXVhbCgqdGhp
cyk7CkBAIC0xNDMsNiArMjAxLDQ1IEBAIHVpbnRwdHJfdCBMYXp5SlNWYWx1ZTo6c3dpdGNoTG9v
a3VwVmFsdWUKICAgICB9CiB9CiAKK3ZvaWQgTGF6eUpTVmFsdWU6OmVtaXQoQ0NhbGxIZWxwZXJz
JiBqaXQsIEpTVmFsdWVSZWdzIHJlc3VsdCkgY29uc3QKK3sKKyAgICBpZiAobV9raW5kID09IEtu
b3duVmFsdWUpIHsKKyAgICAgICAgaml0Lm1vdmVWYWx1ZSh2YWx1ZSgpLT52YWx1ZSgpLCByZXN1
bHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gSXQgbXVzdCBiZSBzb21lIGtp
bmQgb2YgY2VsbC4KKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIGppdC5tb3ZlKENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZXN1bHQudGFnR1BSKCkpOwor
I2VuZGlmCisgICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIgbGFiZWwgPSBqaXQubW92ZVdp
dGhQYXRjaCgKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0YXRpY19jYXN0
PHNpemVfdD4oMHhkMWU3YmVlZmx1KSksCisgICAgICAgIHJlc3VsdC5wYXlsb2FkR1BSKCkpOwor
CisgICAgTGF6eUpTVmFsdWUgdGhpc1ZhbHVlID0gKnRoaXM7CisKKyAgICAvLyBPbmNlIHdlIGRv
IHRoaXMsIHdlJ3JlIGNvbW1pdHRlZC4gT3RoZXJ3aXNlIHdlIGxlYWsgbWVtb3J5LiBOb3RlIHRo
YXQgd2UgY2FsbCByZWYvZGVyZWYKKyAgICAvLyBtYW51YWxseSB0byBlbnN1cmUgdGhhdCB0aGVy
ZSBpcyBubyBjb25jdXJyZW5jeSBzaGFkaW5lc3MuIFdlIGFyZSBkb2luZyBzb21ldGhpbmcgaGVy
ZQorICAgIC8vIHRoYXQgbWlnaHQgYmUgcmF0aGVyIGJydXRhbDogdHJhbnNmZXJpbmcgb3duZXJz
aGlwIG9mIHRoaXMgc3RyaW5nLgorICAgIGlmIChtX2tpbmQgPT0gTmV3U3RyaW5nSW1wbCkKKyAg
ICAgICAgdGhpc1ZhbHVlLnUuc3RyaW5nSW1wbC0+cmVmKCk7CisKKyAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jayA9IGppdC5jb2RlQmxvY2soKTsKKyAgICAKKyAgICBqaXQuYWRkTGlua1Rhc2soCisg
ICAgICAgIFtjb2RlQmxvY2ssIGxhYmVsLCB0aGlzVmFsdWVdIChMaW5rQnVmZmVyJiBsaW5rQnVm
ZmVyKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHJlYWxWYWx1ZSA9IHRoaXNWYWx1ZS5nZXRWYWx1
ZShsaW5rQnVmZmVyLnZtKCkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVhbFZhbHVl
LmlzQ2VsbCgpKTsKKworICAgICAgICAgICAgY29kZUJsb2NrLT5hZGRDb25zdGFudChyZWFsVmFs
dWUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodGhpc1ZhbHVlLm1fa2luZCA9PSBO
ZXdTdHJpbmdJbXBsKQorICAgICAgICAgICAgICAgIHRoaXNWYWx1ZS51LnN0cmluZ0ltcGwtPmRl
cmVmKCk7CisKKyAgICAgICAgICAgIGxpbmtCdWZmZXIucGF0Y2gobGFiZWwsIHJlYWxWYWx1ZS5h
c0NlbGwoKSk7CisgICAgICAgIH0pOworfQorCiB2b2lkIExhenlKU1ZhbHVlOjpkdW1wSW5Db250
ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogewogICAg
IHN3aXRjaCAobV9raW5kKSB7CkBAIC0xNTUsNyArMjUyLDEwIEBAIHZvaWQgTGF6eUpTVmFsdWU6
OmR1bXBJbkNvbnRleHQoUHJpbnRTdHIKICAgICAgICAgb3V0LnByaW50KCIgLyAiLCBTdHJpbmdJ
bXBsOjp1dGY4Rm9yQ2hhcmFjdGVycygmdS5jaGFyYWN0ZXIsIDEpLCAiKSIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBLbm93blN0cmluZ0ltcGw6Ci0gICAgICAgIG91dC5wcmludCgiTGF6
eTpTdHJpbmcoIiwgc3RyaW5nSW1wbCgpLCAiKSIpOworICAgICAgICBvdXQucHJpbnQoIkxhenk6
S25vd25TdHJpbmcoIiwgc3RyaW5nSW1wbCgpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBOZXdTdHJpbmdJbXBsOgorICAgICAgICBvdXQucHJpbnQoIkxhenk6TmV3U3RyaW5nKCIs
IHN0cmluZ0ltcGwoKSwgIikiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdMYXp5SlNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTGF6eUpTVmFsdWUuaAkocmV2aXNpb24gMTk3NzgxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdMYXp5SlNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiwx
OSArMzIsMjYgQEAKICNpbmNsdWRlICJERkdGcm96ZW5WYWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0ltcGwuaD4KIAotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIENDYWxsSGVscGVyczsKKworbmFtZXNwYWNlIERGRyB7CisK
K2NsYXNzIEdyYXBoOwogCiAvLyBSZXByZXNlbnRzIGVpdGhlciBhIEpTVmFsdWUsIG9yIGZvciBK
U1ZhbHVlcyB0aGF0IHJlcXVpcmUgYWxsb2NhdGlvbiBpbiB0aGUgaGVhcCwKIC8vIGl0IHRlbGxz
IHlvdSBldmVyeXRoaW5nIHlvdSdkIG5lZWQgdG8ga25vdyBpbiBvcmRlciB0byBhbGxvY2F0ZSBp
dC4KIAotZW51bSBMYXppbmVzc0tpbmQgewotICAgIEtub3duVmFsdWUsCi0gICAgU2luZ2xlQ2hh
cmFjdGVyU3RyaW5nLAotICAgIEtub3duU3RyaW5nSW1wbAotfTsKLQogY2xhc3MgTGF6eUpTVmFs
dWUgewogcHVibGljOgorICAgIGVudW0gTGF6aW5lc3NLaW5kIHsKKyAgICAgICAgS25vd25WYWx1
ZSwKKyAgICAgICAgU2luZ2xlQ2hhcmFjdGVyU3RyaW5nLAorICAgICAgICBLbm93blN0cmluZ0lt
cGwsCisgICAgICAgIE5ld1N0cmluZ0ltcGwKKyAgICB9OworCiAgICAgTGF6eUpTVmFsdWUoRnJv
emVuVmFsdWUqIHZhbHVlID0gRnJvemVuVmFsdWU6OmVtcHR5U2luZ2xldG9uKCkpCiAgICAgICAg
IDogbV9raW5kKEtub3duVmFsdWUpCiAgICAgewpAQCAtNjYsNiArNzMsMTAgQEAgcHVibGljOgog
ICAgICAgICByZXN1bHQudS5zdHJpbmdJbXBsID0gc3RyaW5nOwogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KKworICAgIHN0YXRpYyBMYXp5SlNWYWx1ZSBuZXdTdHJpbmcoR3JhcGgmLCBj
b25zdCBTdHJpbmcmKTsKKworICAgIExhemluZXNzS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4g
bV9raW5kOyB9CiAgICAgCiAgICAgRnJvemVuVmFsdWUqIHRyeUdldFZhbHVlKEdyYXBoJikgY29u
c3QKICAgICB7CkBAIC04NywxNiArOTgsMjIgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9r
aW5kID09IFNpbmdsZUNoYXJhY3RlclN0cmluZyk7CiAgICAgICAgIHJldHVybiB1LmNoYXJhY3Rl
cjsKICAgICB9CisKKyAgICBjb25zdCBTdHJpbmdJbXBsKiB0cnlHZXRTdHJpbmdJbXBsKCkgY29u
c3Q7CisgICAgCisgICAgU3RyaW5nIHRyeUdldFN0cmluZyhHcmFwaCYpIGNvbnN0OwogICAgIAog
ICAgIFN0cmluZ0ltcGwqIHN0cmluZ0ltcGwoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJU
KG1fa2luZCA9PSBLbm93blN0cmluZ0ltcGwpOworICAgICAgICBBU1NFUlQobV9raW5kID09IEtu
b3duU3RyaW5nSW1wbCB8fCBtX2tpbmQgPT0gTmV3U3RyaW5nSW1wbCk7CiAgICAgICAgIHJldHVy
biB1LnN0cmluZ0ltcGw7CiAgICAgfQotICAgIAorCiAgICAgVHJpU3RhdGUgc3RyaWN0RXF1YWwo
Y29uc3QgTGF6eUpTVmFsdWUmIG90aGVyKSBjb25zdDsKICAgICAKICAgICB1aW50cHRyX3Qgc3dp
dGNoTG9va3VwVmFsdWUoU3dpdGNoS2luZCkgY29uc3Q7CisKKyAgICB2b2lkIGVtaXQoQ0NhbGxI
ZWxwZXJzJiwgSlNWYWx1ZVJlZ3MpIGNvbnN0OwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBD
b250ZXh0KikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4
aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhp
dC5jcHAJKHJldmlzaW9uIDE5Nzc4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TWF5RXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDcgQEAgRXhpdE1vZGUgbWF5
RXhpdChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZAogICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAgICAg
Y2FzZSBKU0NvbnN0YW50OgogICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CisgICAgY2FzZSBMYXp5
SlNDb25zdGFudDoKICAgICBjYXNlIEludDUyQ29uc3RhbnQ6CiAgICAgY2FzZSBNb3ZIaW50Ogog
ICAgIGNhc2UgU2V0TG9jYWw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5j
cHAJKHJldmlzaW9uIDE5Nzc4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE2MCw2ICsxNjAsMTQgQEAgdm9pZCBO
b2RlOjpjb252ZXJ0VG9JZGVudGl0eU9uKE5vZGUqIGNoaQogICAgIH0KIH0KIAordm9pZCBOb2Rl
Ojpjb252ZXJ0VG9MYXp5SlNDb25zdGFudChHcmFwaCYgZ3JhcGgsIExhenlKU1ZhbHVlIHZhbHVl
KQoreworICAgIG1fb3AgPSBMYXp5SlNDb25zdGFudDsKKyAgICBtX2ZsYWdzICY9IH5Ob2RlTXVz
dEdlbmVyYXRlOworICAgIG1fb3BJbmZvID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZ3JhcGgu
bV9sYXp5SlNWYWx1ZXMuYWRkKHZhbHVlKSk7CisgICAgY2hpbGRyZW4ucmVzZXQoKTsKK30KKwog
dm9pZCBOb2RlOjpjb252ZXJ0VG9QdXRIaW50KGNvbnN0IFByb21vdGVkTG9jYXRpb25EZXNjcmlw
dG9yJiBkZXNjcmlwdG9yLCBOb2RlKiBiYXNlLCBOb2RlKiB2YWx1ZSkKIHsKICAgICBtX29wID0g
UHV0SGludDsKQEAgLTE5Myw2ICsyMDEsMTUgQEAgdm9pZCBOb2RlOjpjb252ZXJ0VG9QdXRDbG9z
dXJlVmFySGludCgpCiAgICAgICAgIGNoaWxkMSgpLm5vZGUoKSwgY2hpbGQyKCkubm9kZSgpKTsK
IH0KIAorU3RyaW5nIE5vZGU6OnRyeUdldFN0cmluZyhHcmFwaCYgZ3JhcGgpCit7CisgICAgaWYg
KGhhc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBjb25zdGFudCgpLT50cnlHZXRTdHJpbmco
Z3JhcGgpOworICAgIGlmIChoYXNMYXp5SlNWYWx1ZSgpKQorICAgICAgICByZXR1cm4gbGF6eUpT
VmFsdWUoKS50cnlHZXRTdHJpbmcoZ3JhcGgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwog
UHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IgTm9kZTo6cHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0
b3IoKQogewogICAgIHJldHVybiBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvcihzdGF0aWNfY2Fz
dDxQcm9tb3RlZExvY2F0aW9uS2luZD4obV9vcEluZm8pLCBtX29wSW5mbzIpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE5Nzc4MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTQsNiArNDk0
LDggQEAgc3RydWN0IE5vZGUgewogICAgICAgICBtX29wSW5mbyA9IGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KHZhbHVlKTsKICAgICAgICAgY2hpbGRyZW4ucmVzZXQoKTsKICAgICB9CisKKyAgICB2
b2lkIGNvbnZlcnRUb0xhenlKU0NvbnN0YW50KEdyYXBoJiwgTGF6eUpTVmFsdWUpOwogICAgIAog
ICAgIHZvaWQgY29udmVydFRvQ29uc3RhbnRTdG9yYWdlUG9pbnRlcih2b2lkKiBwb2ludGVyKQog
ICAgIHsKQEAgLTc0Myw2ICs3NDUsMTkgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KIAorICAgIGJvb2wgaGFzTGF6eUpTVmFsdWUoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG9wKCkgPT0gTGF6eUpTQ29uc3RhbnQ7CisgICAgfQorCisgICAgTGF6eUpTVmFs
dWUgbGF6eUpTVmFsdWUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0xhenlKU1ZhbHVlKCkp
OworICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxMYXp5SlNWYWx1ZSo+KG1fb3BJbmZvKTsK
KyAgICB9CisKKyAgICBTdHJpbmcgdHJ5R2V0U3RyaW5nKEdyYXBoJik7CisKICAgICBKU1ZhbHVl
IGluaXRpYWxpemF0aW9uVmFsdWVGb3JBY3RpdmF0aW9uKCkgY29uc3QKICAgICB7CiAgICAgICAg
IEFTU0VSVChvcCgpID09IENyZWF0ZUFjdGl2YXRpb24pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTk3NzgxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw5
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhEb3VibGVDb25z
dGFudCwgTm9kZVJlc3VsdERvdWJsZSkgXAogICAgIG1hY3JvKEludDUyQ29uc3RhbnQsIE5vZGVS
ZXN1bHRJbnQ1MikgXAogICAgIFwKKyAgICAvKiBMYXp5IEpTVmFsdWUgY29uc3RhbnQuIFdlIGRv
bid0IGtub3cgdGhlIEpTVmFsdWUgYml0cyBvZiBpdCB5ZXQuICovXAorICAgIG1hY3JvKExhenlK
U0NvbnN0YW50LCBOb2RlUmVzdWx0SlMpIFwKKyAgICBcCiAgICAgLyogTWFya2VyIHRvIGluZGlj
YXRlIHRoYXQgYW4gb3BlcmF0aW9uIHdhcyBvcHRpbWl6ZWQgZW50aXJlbHkgYW5kIGFsbCB0aGF0
IGlzIGxlZnQgKi9cCiAgICAgLyogaXMgdG8gbWFrZSBvbmUgbm9kZSBhbGlhcyBhbm90aGVyLiBD
U0Ugd2lsbCBsYXRlciB1c3VhbGx5IGVsaW1pbmF0ZSB0aGlzIG5vZGUsICovXAogICAgIC8qIHRo
b3VnaCBpdCBtYXkgY2hvb3NlIG5vdCB0byBpZiBpdCB3b3VsZCBjb3JydXB0IHByZWRpY3Rpb25z
ICh2ZXJ5IHJhcmUpLiAqL1wKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAx
OTc3ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjY4LDcgKzY2OCw4IEBAIHByaXZhdGU6
CiAgICAgICAgIGNhc2UgU3RvcmVCYXJyaWVyOgogICAgICAgICBjYXNlIEdldFN0YWNrOgogICAg
ICAgICBjYXNlIEdldFJlZ0V4cE9iamVjdExhc3RJbmRleDoKLSAgICAgICAgY2FzZSBTZXRSZWdF
eHBPYmplY3RMYXN0SW5kZXg6IHsKKyAgICAgICAgY2FzZSBTZXRSZWdFeHBPYmplY3RMYXN0SW5k
ZXg6CisgICAgICAgIGNhc2UgTGF6eUpTQ29uc3RhbnQ6IHsKICAgICAgICAgICAgIC8vIFRoaXMg
bm9kZSBzaG91bGQgbmV2ZXIgYmUgdmlzaWJsZSBhdCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0aW9u
LiBJdCBpcwogICAgICAgICAgICAgLy8gaW5zZXJ0ZWQgYnkgZml4dXAoKSwgd2hpY2ggZm9sbG93
cyB0aGlzIHBoYXNlLgogICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJVbmV4
cGVjdGVkIG5vZGUgZHVyaW5nIHByZWRpY3Rpb24gcHJvcGFnYXRpb24iKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxOTc3
ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTM3LDYgKzEzNyw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFj
dFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgY2FzZSBEb3VibGVDb25z
dGFudDoKICAgICBjYXNlIEludDUyQ29uc3RhbnQ6CisgICAgY2FzZSBMYXp5SlNDb25zdGFudDoK
ICAgICBjYXNlIElkZW50aXR5OgogICAgIGNhc2UgVG9UaGlzOgogICAgIGNhc2UgQ3JlYXRlVGhp
czoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTk3NzgxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg3
NCw2ICsxODc0LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgaW5pdENvbnN0YW50SW5mbyhub2RlKTsKICAgICAgICAgYnJlYWs7CiAKKyAgICBj
YXNlIExhenlKU0NvbnN0YW50OgorICAgICAgICBjb21waWxlTGF6eUpTQ29uc3RhbnQobm9kZSk7
CisgICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBJZGVudGl0eTogewogICAgICAgICBzcGVjdWxh
dGUobm9kZSwgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxOTc3ODEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTgyLDYgKzE5ODIsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgICAgICBpbml0Q29uc3RhbnRJbmZvKG5vZGUpOwogICAgICAgICBicmVhazsKIAorICAg
IGNhc2UgTGF6eUpTQ29uc3RhbnQ6CisgICAgICAgIGNvbXBpbGVMYXp5SlNDb25zdGFudChub2Rl
KTsKKyAgICAgICAgYnJlYWs7CisKICAgICBjYXNlIElkZW50aXR5OiB7CiAgICAgICAgIHNwZWN1
bGF0ZShub2RlLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQx
KCkudXNlS2luZCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTk3NzgxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2NDcs
NiArNzY0NywxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU2V0UmVnRXhwT2JqCiAg
ICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMYXp5
SlNDb25zdGFudChOb2RlKiBub2RlKQoreworICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKKyAg
ICBub2RlLT5sYXp5SlNWYWx1ZSgpLmVtaXQobV9qaXQsIHJlc3VsdFJlZ3MpOworICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxOTc3ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTI0MDAsNiArMjQwMCw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVQdXRBY2Nlc3NvckJ5VmFsKE5vZGUqKTsKICAg
ICB2b2lkIGNvbXBpbGVHZXRSZWdFeHBPYmplY3RMYXN0SW5kZXgoTm9kZSopOwogICAgIHZvaWQg
Y29tcGlsZVNldFJlZ0V4cE9iamVjdExhc3RJbmRleChOb2RlKik7CisgICAgdm9pZCBjb21waWxl
TGF6eUpTQ29uc3RhbnQoTm9kZSopOwogICAgIAogICAgIHZvaWQgbW92ZVRydWVUbyhHUFJSZWcp
OwogICAgIHZvaWQgbW92ZUZhbHNlVG8oR1BSUmVnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAkocmV2
aXNpb24gMTk3NzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJl
ZHVjdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkxLDcgKzI5MSw1MSBAQCBwcml2
YXRlOgogCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAgICAgCisKKyAg
ICAgICAgLy8gRklYTUU6IFdlIGhhdmUgYSBsb3Qgb2Ygc3RyaW5nIGNvbnN0YW50LWZvbGRpbmcg
cnVsZXMgaGVyZS4gSXQgd291bGQgYmUgZ3JlYXQgdG8KKyAgICAgICAgLy8gbW92ZSB0aGVzZSB0
byB0aGUgYWJzdHJhY3QgaW50ZXJwcmV0ZXIgb25jZSBBYnN0cmFjdFZhbHVlIGNhbiBzdXBwb3J0
IExhenlKU1ZhbHVlLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU1MjA0CisKKyAgICAgICAgY2FzZSBNYWtlUm9wZToKKyAgICAgICAgY2FzZSBW
YWx1ZUFkZDoKKyAgICAgICAgY2FzZSBTdHJDYXQ6IHsKKyAgICAgICAgICAgIFN0cmluZyBsZWZ0
U3RyaW5nID0gbV9ub2RlLT5jaGlsZDEoKS0+dHJ5R2V0U3RyaW5nKG1fZ3JhcGgpOworICAgICAg
ICAgICAgaWYgKCFsZWZ0U3RyaW5nKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgU3RyaW5nIHJpZ2h0U3RyaW5nID0gbV9ub2RlLT5jaGlsZDIoKS0+dHJ5R2V0U3RyaW5nKG1f
Z3JhcGgpOworICAgICAgICAgICAgaWYgKCFyaWdodFN0cmluZykKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIFN0cmluZyBleHRyYVN0cmluZzsKKyAgICAgICAgICAgIGlmICht
X25vZGUtPmNoaWxkMygpKSB7CisgICAgICAgICAgICAgICAgZXh0cmFTdHJpbmcgPSBtX25vZGUt
PmNoaWxkMygpLT50cnlHZXRTdHJpbmcobV9ncmFwaCk7CisgICAgICAgICAgICAgICAgaWYgKCFl
eHRyYVN0cmluZykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKGxlZnRTdHJpbmcpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQocmlnaHRTdHJp
bmcpOworICAgICAgICAgICAgaWYgKCEhZXh0cmFTdHJpbmcpCisgICAgICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmQoZXh0cmFTdHJpbmcpOworCisgICAgICAgICAgICBtX25vZGUtPmNvbnZlcnRU
b0xhenlKU0NvbnN0YW50KAorICAgICAgICAgICAgICAgIG1fZ3JhcGgsIExhenlKU1ZhbHVlOjpu
ZXdTdHJpbmcobV9ncmFwaCwgYnVpbGRlci50b1N0cmluZygpKSk7CisgICAgICAgICAgICBtX2No
YW5nZWQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBj
YXNlIEdldEFycmF5TGVuZ3RoOiB7CisgICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUo
KS50eXBlKCkgPT0gQXJyYXk6OkdlbmVyaWMKKyAgICAgICAgICAgICAgICB8fCBtX25vZGUtPmFy
cmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6U3RyaW5nKSB7CisgICAgICAgICAgICAgICAgU3Ry
aW5nIHN0cmluZyA9IG1fbm9kZS0+Y2hpbGQxKCktPnRyeUdldFN0cmluZyhtX2dyYXBoKTsKKyAg
ICAgICAgICAgICAgICBpZiAoISFzdHJpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC5jb252ZXJ0VG9Db25zdGFudChtX25vZGUsIGpzTnVtYmVyKHN0cmluZy5sZW5ndGgoKSkpOwor
ICAgICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxOTc3ODEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21w
aWxlKE5vZGUqIAogICAgIAogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgIGNhc2UgSlND
b25zdGFudDoKKyAgICBjYXNlIExhenlKU0NvbnN0YW50OgogICAgIGNhc2UgR2V0TG9jYWw6CiAg
ICAgY2FzZSBTZXRMb2NhbDoKICAgICBjYXNlIFB1dFN0YWNrOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMTk3NzgxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NDYsNiArNDQ2LDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBJbnQ1MkNv
bnN0YW50OgogICAgICAgICAgICAgY29tcGlsZUludDUyQ29uc3RhbnQoKTsKICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIExhenlKU0NvbnN0YW50OgorICAgICAgICAgICAgY29tcGls
ZUxhenlKU0NvbnN0YW50KCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEb3Vi
bGVSZXA6CiAgICAgICAgICAgICBjb21waWxlRG91YmxlUmVwKCk7CiAgICAgICAgICAgICBicmVh
azsKQEAgLTEwNDQsNiArMTA0NywxOCBAQCBwcml2YXRlOgogICAgICAgICBzZXRTdHJpY3RJbnQ1
MihtX291dC5jb25zdEludDY0KHZhbHVlKSk7CiAgICAgfQogCisgICAgdm9pZCBjb21waWxlTGF6
eUpTQ29uc3RhbnQoKQorICAgIHsKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50
ID0gbV9vdXQucGF0Y2hwb2ludChJbnQ2NCk7CisgICAgICAgIExhenlKU1ZhbHVlIHZhbHVlID0g
bV9ub2RlLT5sYXp5SlNWYWx1ZSgpOworICAgICAgICBwYXRjaHBvaW50LT5zZXRHZW5lcmF0b3Io
CisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVy
YXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgIHZhbHVlLmVtaXQoaml0LCBK
U1ZhbHVlUmVncyhwYXJhbXNbMF0uZ3ByKCkpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICBw
YXRjaHBvaW50LT5lZmZlY3RzID0gRWZmZWN0czo6bm9uZSgpOworICAgICAgICBzZXRKU1ZhbHVl
KHBhdGNocG9pbnQpOworICAgIH0KKwogICAgIHZvaWQgY29tcGlsZURvdWJsZVJlcCgpCiAgICAg
ewogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CkluZGV4OiBT
b3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwko
cmV2aXNpb24gMTk3NzgxKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwyNyBAQAorMjAxNi0wMy0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUu
Y29tPgorCisgICAgICAgIERGRyBzaG91bGQgYmUgYWJsZSB0byBjb25zdGFudC1mb2xkIHN0cmlu
Z3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTIw
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBz
dXBwb3J0IGZvciBjbG9uaW5nIGEgU3RyaW5nSW1wbC4gVGhpcyBhbGxvd3MgdGhlIEpJVCB0aHJl
YWQgdG8gY3JlYXRlIGl0cyBvd24KKyAgICAgICAgc2hhZG93IHZlcnNpb25zIG9mIHRoZSBTdHJp
bmdJbXBscyBpdCdzIGFuYWx5emluZywgc28gdGhhdCBpdCBjYW4gdXNlIFdURlN0cmluZyBBUElz
LgorCisgICAgICAgIEFsc28gZGlzYWJsZSBhc3NlcnRpb25zIGFib3V0IHJlZmVyZW5jZSBjb3Vu
dGluZyBzdHJpbmdzIG9uIHRoZSBKSVQgdGhyZWFkLiBXZSB3aWxsIGRvCisgICAgICAgIHRoYXQg
bm93IGFuZCBpdCdzIE9LLgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1wbC5jcHA6Cisg
ICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OnJlYWxsb2NhdGUpOgorICAgICAgICAoV1RGOjpTdHJp
bmdJbXBsOjpjbG9uZSk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmNyZWF0ZUludGVybmFs
KToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmg6CisgICAgICAgIChXVEY6OlN0cmlu
Z0ltcGw6OmZsYWdzT2Zmc2V0KToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6ZmxhZ0lzOEJp
dCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmZsYWdJc0F0b21pYyk6CisgICAgICAgIChX
VEY6OlN0cmluZ0ltcGw6OnJlZik6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmRlcmVmKToK
KwogMjAxNi0wMy0wNyAgS2VpdGggUm9sbGluICA8a3JvbGxpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgRW5oYW5jZSBsb2dnaW5nOiBVc2UgImFsd2F5cyBvbiIgbWFjcm9zCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L3RleHQvU3RyaW5nSW1wbC5jcHAJKHJldmlzaW9uIDE5Nzc4MSkKKysrIFNvdXJjZS9XVEYvd3Rm
L3RleHQvU3RyaW5nSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNyw2ICsyMzcsMTQgQEAg
UmVmPFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OnJlYWxsb2NhdGUoUAogICAgIHJldHVybiByZWFs
bG9jYXRlSW50ZXJuYWwob3JpZ2luYWxTdHJpbmcsIGxlbmd0aCwgZGF0YSk7CiB9CiAKKworUmVm
PFN0cmluZ0ltcGw+IFN0cmluZ0ltcGw6OmNsb25lKCkgY29uc3QKK3sKKyAgICBpZiAoaXM4Qml0
KCkpCisgICAgICAgIHJldHVybiBjcmVhdGUoY2hhcmFjdGVyczgoKSwgbGVuZ3RoKCkpOworICAg
IHJldHVybiBjcmVhdGUoY2hhcmFjdGVyczE2KCksIGxlbmd0aCgpKTsKK30KKwogdGVtcGxhdGUg
PHR5cGVuYW1lIENoYXJUeXBlPgogaW5saW5lIFJlZjxTdHJpbmdJbXBsPiBTdHJpbmdJbXBsOjpj
cmVhdGVJbnRlcm5hbChjb25zdCBDaGFyVHlwZSogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3Ro
KQogewpJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHJldmlzaW9uIDE5Nzc4MSkKKysr
IFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTcs
NiArNDE3LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBSZWY8U3RyaW5nSW1wbD4gcmVhbGxvY2F0
ZShQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG9yaWdpbmFsU3RyaW5nLCB1bnNpZ25lZCBsZW5ndGgs
IExDaGFyKiYgZGF0YSk7CiAgICAgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiByZWFsbG9jYXRlKFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gb3JpZ2luYWxTdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCwgVUNo
YXIqJiBkYXRhKTsKIAorICAgIFJlZjxTdHJpbmdJbXBsPiBjbG9uZSgpIGNvbnN0OworCiAgICAg
c3RhdGljIHVuc2lnbmVkIGZsYWdzT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0
cmluZ0ltcGwsIG1faGFzaEFuZEZsYWdzKTsgfQogICAgIHN0YXRpYyB1bnNpZ25lZCBmbGFnSXM4
Qml0KCkgeyByZXR1cm4gc19oYXNoRmxhZzhCaXRCdWZmZXI7IH0KICAgICBzdGF0aWMgdW5zaWdu
ZWQgZmxhZ0lzQXRvbWljKCkgeyByZXR1cm4gc19oYXNoRmxhZ1N0cmluZ0tpbmRJc0F0b21pYzsg
fQpAQCAtNTg1LDggKzU4Nyw2IEBAIHB1YmxpYzoKIAogICAgIGlubGluZSB2b2lkIHJlZigpCiAg
ICAgewotICAgICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7Ci0KICAgICAgICAg
U1RSSU5HX1NUQVRTX1JFRl9TVFJJTkcoKnRoaXMpOwogCiAgICAgICAgIG1fcmVmQ291bnQgKz0g
c19yZWZDb3VudEluY3JlbWVudDsKQEAgLTU5NCw4ICs1OTQsNiBAQCBwdWJsaWM6CiAKICAgICBp
bmxpbmUgdm9pZCBkZXJlZigpCiAgICAgewotICAgICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25U
aHJlYWQoKSk7Ci0KICAgICAgICAgU1RSSU5HX1NUQVRTX0RFUkVGX1NUUklORygqdGhpcyk7CiAK
ICAgICAgICAgdW5zaWduZWQgdGVtcFJlZkNvdW50ID0gbV9yZWZDb3VudCAtIHNfcmVmQ291bnRJ
bmNyZW1lbnQ7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTc3ODEpCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAxNi0wMy0wOCAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIE5lZWQgYSBzaG9ydCBkZXNjcmlw
dGlvbiAoT09QUyEpLgorICAgICAgICBOZWVkIHRoZSBidWcgVVJMIChPT1BTISkuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBqcy9yZWdyZXNzL3Nj
cmlwdC10ZXN0cy9zdHJjYXQtY29uc3QuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAg
ICAgKGJhcik6CisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvc3RyY2F0LWxlbmd0
aC1jb25zdC5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAoYmFyKToKKyAgICAg
ICAgKiBqcy9yZWdyZXNzL3N0cmNhdC1jb25zdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGpzL3JlZ3Jlc3Mvc3RyY2F0LWNvbnN0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3Jl
Z3Jlc3Mvc3RyY2F0LWxlbmd0aC1jb25zdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGpzL3JlZ3Jlc3Mvc3RyY2F0LWxlbmd0aC1jb25zdC5odG1sOiBBZGRlZC4KKwogMjAxNi0wMy0w
OCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBbRVM2XSBS
ZWd1bGFyIEV4cHJlc3Npb24gY2Fub25pY2FsaXphdGlvbiB0YWJsZXMgZm9yIFVuaWNvZGUgbmVl
ZCB0byBiZSB1cGRhdGVkIHRvIHVzZSBVbmljb2RlIENhc2VGb2xkaW5nLnR4dApJbmRleDogTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9zdHJjYXQtY29uc3QtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc3RyY2F0LWNvbnN0LWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc3RyY2F0LWNvbnN0LWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3Mvc3RyY2F0LWNv
bnN0CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0
aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3N0cmNhdC1jb25zdC5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc3RyY2F0LWNvbnN0Lmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3N0cmNhdC1jb25zdC5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8v
RFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0ic2NyaXB0LXRlc3RzL3N0cmNhdC1jb25zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3N0cmNhdC1sZW5ndGgtY29uc3QtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc3RyY2F0LWxl
bmd0aC1jb25zdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL3N0cmNhdC1sZW5ndGgtY29uc3QtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9zdHJjYXQtbGVuZ3RoLWNvbnN0CisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL3N0cmNhdC1sZW5ndGgtY29uc3QuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3N0cmNhdC1sZW5ndGgtY29uc3QuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc3RyY2F0LWxlbmd0aC1jb25zdC5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8v
SUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0ic2NyaXB0LXRlc3RzL3N0cmNhdC1sZW5ndGgtY29uc3QuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvc3RyY2F0LWNvbnN0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
c2NyaXB0LXRlc3RzL3N0cmNhdC1jb25zdC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3N0cmNhdC1jb25zdC5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE2IEBACitmdW5jdGlvbiBmb28oYSwgYikgeworICAgIHJldHVybiBhICsgYjsK
K30KKworZnVuY3Rpb24gYmFyKCkgeworICAgIHJldHVybiBmb28oImhlbGxvICIsICJ3b3JsZCEi
KTsKK30KKworbm9JbmxpbmUoYmFyKTsKKwordmFyIHJlc3VsdDsKK2ZvciAodmFyIGkgPSAwOyBp
IDwgMTAwMDAwMDsgKytpKQorICAgIHJlc3VsdCA9IGJhcigpOworCitpZiAocmVzdWx0ICE9ICJo
ZWxsbyB3b3JsZCEiKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsK
SW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3N0cmNhdC1sZW5ndGgt
Y29uc3QuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvc3RyY2F0LWxlbmd0aC1jb25zdC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3N0cmNhdC1sZW5ndGgtY29uc3QuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNiBAQAorZnVuY3Rpb24gZm9vKGEsIGIpIHsKKyAgICByZXR1cm4gKGEg
KyBiKS5sZW5ndGg7Cit9CisKK2Z1bmN0aW9uIGJhcigpIHsKKyAgICByZXR1cm4gZm9vKCJoZWxs
byAiLCAid29ybGQhIik7Cit9CisKK25vSW5saW5lKGJhcik7CisKK3ZhciByZXN1bHQ7Citmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkKKyAgICByZXN1bHQgPSBiYXIoKTsKKworaWYg
KHJlc3VsdCAhPSAiaGVsbG8gd29ybGQhIi5sZW5ndGgpCisgICAgdGhyb3cgIkVycm9yOiBiYWQg
cmVzdWx0OiAiICsgcmVzdWx0Owo=
</data>
<flag name="review"
          id="297976"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273383</attachid>
            <date>2016-03-08 20:34:37 -0800</date>
            <delta_ts>2016-03-08 20:34:37 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>37619</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk3ODMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMiBA
QAorMjAxNi0wMy0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgYmUgYWJsZSB0byBjb25zdGFudC1mb2xkIHN0cmluZ3MKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTIwMAorCisgICAgICAgIFJl
dmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgorCisgICAgICAgIFRoaXMgYWRkcyBjb25zdGFudC1m
b2xkaW5nIG9mIHN0cmluZzEgKyBzdHJpbmcyIGFuZCBzdHJpbmcubGVuZ3RoLiBUaGUgYWN0dWFs
IGZvbGRpbmcKKyAgICAgICAgcnVsZSBpcyBlYXN5LCBidXQgdGhlcmUgYXJlIHNvbWUgZ290Y2hh
cy4KKworICAgICAgICBUaGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBERkcgY2Fubm90IGFsbG9jYXRl
IG5ldyBKU1N0cmluZyBvYmplY3RzIHVudGlsIHdlIGFyZSBvbiB0aGUKKyAgICAgICAgbWFpbiB0
aHJlYWQuIFNvLCBERkcgSVIgbXVzdCBoYXZlIGEgbm9kZSBmb3IgYSBKU1ZhbHVlIHN0cmluZyBj
b25zdGFudCB0aGF0IGhhc24ndCBiZWVuCisgICAgICAgIGNyZWF0ZWQgeWV0IC0gaS5lLiBpdCBk
b2Vzbid0IGhhdmUgYW55IGNvbmNyZXRlIEpTVmFsdWUgYml0cyB5ZXQuCisKKyAgICAgICAgV2Ug
aGF2ZSB0aGUgYWJpbGl0eSB0byBzcGVhayBvZiBzdWNoIHRoaW5ncywgdXNpbmcgTGF6eUpTVmFs
dWUuIEJ1dCB0aGF0J3MgYSBjbGFzcywgbm90CisgICAgICAgIGEgbm9kZSB0eXBlLiBUaGlzIHBh
dGNoIG5vdyBhZGRzIGEgbm9kZSB0eXBlLCBMYXp5SlNDb25zdGFudCwgd2hpY2ggaXMgYSBOb2Rl
IHRoYXQgaG9sZHMKKyAgICAgICAgYSBMYXp5SlNWYWx1ZS4KKworICAgICAgICBUaGlzIHB1dHMg
dXMgaW4gYSB3ZWlyZCBzaXR1YXRpb246IEFJIHVzZXMgSlNWYWx1ZSB0byByZXByZXNlbnQgY29u
c3RhbnRzLiBJdCB3b3VsZCB0YWtlCisgICAgICAgIGEgbG90IG9mIHdvcmsgdG8gY2hhbmdlIGl0
IHRvIHVzZSBMYXp5SlNWYWx1ZS4gU28sIHRoaXMgaW1wbGVtZW50cyB0aGUgY29uc3RhbnQgZm9s
ZGluZworICAgICAgICBpbiBTdHJlbmd0aFJlZHVjdGlvblBoYXNlLiBJIGNyZWF0ZWQgYSBidWcg
YW5kIHB1dCBhIEZJWE1FIGFib3V0IG1vdmluZyB0aGVzZSBydWxlcyBpbnRvCisgICAgICAgIEFJ
LgorCisgICAgICAgIE9UT0gsIG91ciBleHBlcmllbmNlIGluIEIzIHNob3dzIHRoYXQgY29uc3Rh
bnQgZm9sZGluZyBpbiBzdHJlbmd0aCByZWR1Y3Rpb24gaXMgcXVpdGUKKyAgICAgICAgbmljZS4g
SXQgd291bGQgdG90YWxseSBtYWtlIHNlbnNlIHRvIGhhdmUgc3RyZW5ndGggcmVkdWN0aW9uIGhh
dmUgY29uc3RhbnQgZm9sZGluZyBydWxlcworICAgICAgICB0aGF0IG1pcnJvciB0aGUgcnVsZXMg
aW4gQUksIG9yIHRvIGZhY3RvciBvdXQgdGhlIEFJIGNvbnN0YW50IGZvbGRpbmcgcnVsZXMsIHRo
ZSBzYW1lCisgICAgICAgIHdheSB0aGF0IEIzIGZhY3RvcnMgb3V0IHRob3NlIHJ1bGVzIGludG8g
VmFsdWUgbWV0aG9kcy4KKworICAgICAgICBBbm90aGVyIGlzc3VlIGlzIGhvdyB0byByZXByZXNl
bnQgdGhlIGN1bXVsYXRpdmUgcmVzdWx0IG9mIHBvc3NpYmx5IG1hbnkgZm9sZGluZ3MuIEkKKyAg
ICAgICAgaW5pdGlhbGx5IGNvbnNpZGVyZWQgYWRkaW5nIExhenlKU1ZhbHVlIGtpbmRzIHRoYXQg
cmVwcmVzZW50ZWQgY29uY2F0ZW5hdGlvbi4gRm9sZGluZworICAgICAgICB0aGUgY29uY2F0ZW5h
dGlvbiB0byBhIGNvbnN0YW50IG1lYW5kIHRoYXQgdGhpcyBjb25zdGFudCB3YXMgYWN0dWFsbHkg
YSBMYXp5SlNWYWx1ZSB0aGF0CisgICAgICAgIHJlcHJlc2VudGVkIHRoZSBjb25jYXRlbmF0aW9u
IG9mIHR3byBvdGhlciB0aGluZ3MuIEJ1dCB0aGlzIHdvdWxkIGdldCBzdXBlciBtZXNzeSBpZiB3
ZQorICAgICAgICB3YW50ZWQgdG8gZm9sZCBhbiBvcGVyYXRpb24gdGhhdCB1c2VzIHRoZSByZXN1
bHRzIG9mIGFub3RoZXIgZm9sZGVkIG9wZXJhdGlvbi4KKworICAgICAgICBTbywgdGhlIEpJVCB0
aHJlYWQgZm9sZHMgc3RyaW5nIG9wZXJhdGlvbnMgYnkgY3JlYXRpbmcgYSBXVEY6OlN0cmluZyB0
aGF0IGNvbnRhaW5zIHRoZQorICAgICAgICByZXN1bHQuIFRoZSBERkc6OkdyYXBoIGhvbGRzIGEg
KzEgb24gdGhlIHVuZGVybHlpbmcgU3RyaW5nSW1wbCwgc28gd2UgY2FuIHBhc3MgdGhlCisgICAg
ICAgIFN0cmluZ0ltcGwqIGFyb3VuZCB3aXRob3V0IHJlZmVyZW5jZSBjb3VudGluZy4gVGhlIExh
enlKU1ZhbHVlIG5vdyBoYXMgYSBzcGVjaWFsIGtpbmQKKyAgICAgICAgdGhhdCBtZWFuczogd2Ug
Y3JlYXRlZCB0aGlzIFN0cmluZ0ltcGwqIG9uIHRoZSBKSVQgdGhyZWFkLCBhbmQgb25jZSB0aGUg
SklUIGlzIGRvbmUsIHdlCisgICAgICAgIHdpbGwgcmVsaW5xdWlzaCBvd25lcnNoaXAgb2YgaXQu
IExhenlKU1ZhbHVlIGhhcyBzb21lIG1hZ2ljIHRvIGVtaXQgY29kZSBmb3IgdGhlc2UKKyAgICAg
ICAgdG8tYmUtY3JlYXRlZC1KU1N0cmluZ3Mgd2hpbGUgYWxzbyB0cmFuc2ZlcnJpbmcgb3duZXJz
aGlwIG9mIHRoZSBTdHJpbmdJbXBsIGZyb20gdGhlIEpJVAorICAgICAgICB0aHJlYWQgdG8gdGhl
IG1haW4gdGhyZWFkIGFuZCByZWdpc3RlcmluZyB0aGUgSlNTdHJpbmcgd2l0aCB0aGUgR0MuCisK
KyAgICAgICAgVGhpcyBqdXN0IGltcGxlbWVudHMgZm9sZGluZyBmb3IgY29uY2F0ZW5hdGlvbiBh
bmQgR2V0QXJyYXlMZW5ndGguIEl0J3MganVzdCBhIHByb29mIG9mCisgICAgICAgIGNvbmNlcHQg
Zm9yIGV2aWwgdGhpbmdzIEkgd2FudCB0byBkbyBsYXRlci4KKworICAgICAgICBUaGlzIGNoYW5n
ZSBpcyBhIDIuNXggc3BlZWQtdXAgb24gdGhlIHN0cmluZyBjb25jYXRlbmF0aW9uIG1pY3JvYmVu
Y2htYXJrcyBJIGFkZGVkIGluCisgICAgICAgIHRoaXMgcGF0Y2guCisKKyAgICAgICAgKiBkZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAg
ICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6
ZSk6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9l
c0dDKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHRnJvemVuVmFsdWUu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkZyb3plblZhbHVlOjplbXB0eVNpbmdsZXRvbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6RnJvemVuVmFsdWU6OnRyeUdldFN0cmluZyk6CisgICAgICAgIChK
U0M6OkRGRzo6RnJvemVuVmFsdWU6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAqIGRmZy9ERkdG
cm96ZW5WYWx1ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkZyb3plblZhbHVlOjpzdHJlbmd0aCk6
CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgICogZGZnL0RGR0xhenlKU1ZhbHVl
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpMYXp5SlNWYWx1ZTo6bmV3U3RyaW5nKToKKyAgICAg
ICAgKEpTQzo6REZHOjpMYXp5SlNWYWx1ZTo6Z2V0VmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6
OmVxdWFsVG9TdHJpbmdJbXBsKToKKyAgICAgICAgKEpTQzo6REZHOjpMYXp5SlNWYWx1ZTo6dHJ5
R2V0U3RyaW5nSW1wbCk6CisgICAgICAgIChKU0M6OkRGRzo6TGF6eUpTVmFsdWU6OnRyeUdldFN0
cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6TGF6eUpTVmFsdWU6OnN0cmljdEVxdWFsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpMYXp5SlNWYWx1ZTo6c3dpdGNoTG9va3VwVmFsdWUpOgorICAgICAg
ICAoSlNDOjpERkc6OkxhenlKU1ZhbHVlOjplbWl0KToKKyAgICAgICAgKEpTQzo6REZHOjpMYXp5
SlNWYWx1ZTo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgICogZGZnL0RGR0xhenlKU1ZhbHVlLmg6
CisgICAgICAgIChKU0M6OkRGRzo6TGF6eUpTVmFsdWU6OkxhenlKU1ZhbHVlKToKKyAgICAgICAg
KEpTQzo6REZHOjpMYXp5SlNWYWx1ZTo6a25vd25TdHJpbmdJbXBsKToKKyAgICAgICAgKEpTQzo6
REZHOjpMYXp5SlNWYWx1ZTo6a2luZCk6CisgICAgICAgIChKU0M6OkRGRzo6TGF6eUpTVmFsdWU6
OnRyeUdldFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpMYXp5SlNWYWx1ZTo6Y2hhcmFjdGVy
KToKKyAgICAgICAgKEpTQzo6REZHOjpMYXp5SlNWYWx1ZTo6c3RyaW5nSW1wbCk6CisgICAgICAg
ICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Om1heUV4aXQpOgorICAg
ICAgICAqIGRmZy9ERkdOb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjb252ZXJ0
VG9JZGVudGl0eU9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjb252ZXJ0VG9MYXp5SlND
b25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRvUHV0SGludCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRvUHV0Q2xvc3VyZVZhckhpbnQpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6OnRyeUdldFN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6cHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3IpOgorICAgICAgICAqIGRmZy9ERkdOb2Rl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRvQ29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRUb0NvbnN0YW50U3RvcmFnZVBvaW50ZXIpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6OmNhc3RDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6aGFzTGF6eUpTVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmxhenlKU1Zh
bHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjppbml0aWFsaXphdGlvblZhbHVlRm9yQWN0
aXZhdGlvbik6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVTZXRSZWdFeHBPYmplY3RMYXN0SW5kZXgpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTGF6eUpTQ29uc3RhbnQpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3RyZW5ndGhS
ZWR1Y3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3RyZW5ndGhSZWR1Y3Rpb25Q
aGFzZTo6aGFuZGxlTm9kZSk6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVO
b2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUludDUy
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxl
TGF6eUpTQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpj
b21waWxlRG91YmxlUmVwKToKKwogMjAxNi0wMy0wOCAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jh
cm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IE1lbW9yeSBUaW1lbGluZSBz
aG91bGQgc2hvdyBNZW1vcnlQcmVzc3VyZSBldmVudHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJ
KHJldmlzaW9uIDE5Nzc4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDYgKzE0MSwyMSBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIHNldEJ1
aWx0SW5Db25zdGFudChub2RlLCAqbm9kZS0+Y29uc3RhbnQoKSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KKworICAgIGNhc2UgTGF6eUpTQ29uc3RhbnQ6IHsKKyAgICAgICAgTGF6eUpTVmFsdWUg
dmFsdWUgPSBub2RlLT5sYXp5SlNWYWx1ZSgpOworICAgICAgICBzd2l0Y2ggKHZhbHVlLmtpbmQo
KSkgeworICAgICAgICBjYXNlIExhenlKU1ZhbHVlOjpLbm93blZhbHVlOgorICAgICAgICAgICAg
c2V0Q29uc3RhbnQobm9kZSwgdmFsdWUudmFsdWUoKS0+dmFsdWUoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBMYXp5SlNWYWx1ZTo6U2luZ2xlQ2hhcmFjdGVyU3RyaW5nOgor
ICAgICAgICBjYXNlIExhenlKU1ZhbHVlOjpLbm93blN0cmluZ0ltcGw6CisgICAgICAgIGNhc2Ug
TGF6eUpTVmFsdWU6Ok5ld1N0cmluZ0ltcGw6CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dFR5cGUobV9ncmFwaCwgU3BlY1N0cmluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgIAogICAgIGNhc2UgSWRlbnRpdHk6IHsK
ICAgICAgICAgZm9yTm9kZShub2RlKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE5Nzc4
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTMsNyArMTEzLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZQogICAgIGNhc2UgSW50NTJDb25zdGFudDoKICAgICAgICAgZGVmKFB1cmVWYWx1
ZShub2RlLCBub2RlLT5jb25zdGFudCgpKSk7CiAgICAgICAgIHJldHVybjsKLSAgICAgICAgCisK
ICAgICBjYXNlIElkZW50aXR5OgogICAgIGNhc2UgUGhhbnRvbToKICAgICBjYXNlIENoZWNrOgpA
QCAtMTIxLDYgKzEyMSwxMSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToKICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKKyAgICBjYXNlIExhenlKU0NvbnN0YW50OgorICAgICAgICAvLyBXZSBzaG91bGQg
ZW5hYmxlIENTRSBvZiBMYXp5SlNDb25zdGFudC4gSXQncyBhIGxpdHRsZSBhbm5veWluZyBzaW5j
ZSBMYXp5SlNWYWx1ZSBoYXMKKyAgICAgICAgLy8gbW9yZSBiaXRzIHRoYW4gd2UgY3VycmVudGx5
IGhhdmUgaW4gUHVyZVZhbHVlLgorICAgICAgICByZXR1cm47CisgICAgICAgIAogICAgIGNhc2Ug
QXJpdGhJTXVsOgogICAgIGNhc2UgQXJpdGhBYnM6CiAgICAgY2FzZSBBcml0aENsejMyOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMTk3Nzgx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw2ICs0Nyw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSkKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKICAgICBj
YXNlIEludDUyQ29uc3RhbnQ6CisgICAgY2FzZSBMYXp5SlNDb25zdGFudDoKICAgICBjYXNlIElk
ZW50aXR5OgogICAgIGNhc2UgR2V0Q2FsbGVlOgogICAgIGNhc2UgR2V0QXJndW1lbnRDb3VudDoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2
aXNpb24gMTk3NzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1MSw2ICsxNDUxLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgLy8gSGF2ZSB0aGVzZSBuby1vcCBjYXNlcyBoZXJlIHRvIGVuc3VyZSB0aGF0IG5vYm9keSBm
b3JnZXRzIHRvIGFkZCBoYW5kbGVycyBmb3IgbmV3IG9wY29kZXMuCiAgICAgICAgIGNhc2UgU2V0
QXJndW1lbnQ6CiAgICAgICAgIGNhc2UgSlNDb25zdGFudDoKKyAgICAgICAgY2FzZSBMYXp5SlND
b25zdGFudDoKICAgICAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKICAgICAgICAgY2FzZSBHZXRM
b2NhbDoKICAgICAgICAgY2FzZSBHZXRDYWxsZWU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Zyb3plblZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Zyb3plblZhbHVlLmNwcAkocmV2aXNpb24gMTk3NzgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGcm96ZW5WYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4
LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiREZHTGF6eUpT
VmFsdWUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKQEAgLTM4LDYgKzM5LDExIEBAIEZyb3plblZhbHVlKiBGcm96ZW5WYWx1ZTo6
ZW1wdHlTaW5nbGV0b24KICAgICByZXR1cm4gJmVtcHR5OwogfQogCitTdHJpbmcgRnJvemVuVmFs
dWU6OnRyeUdldFN0cmluZyhHcmFwaCYgZ3JhcGgpCit7CisgICAgcmV0dXJuIExhenlKU1ZhbHVl
KHRoaXMpLnRyeUdldFN0cmluZyhncmFwaCk7Cit9CisKIHZvaWQgRnJvemVuVmFsdWU6OmR1bXBJ
bkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7
CiAgICAgaWYgKCEhbV92YWx1ZSAmJiBtX3ZhbHVlLmlzQ2VsbCgpKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGcm96ZW5WYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRnJvemVuVmFsdWUuaAkocmV2aXNpb24gMTk3NzgxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGcm96ZW5WYWx1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTkzLDYgKzkzLDggQEAgcHVibGljOgogICAgIAogICAgIC8vIFRoZSBzdHJlbmd0aCBv
ZiB0aGUgdmFsdWUgaXRzZWxmLiBUaGUgc3RydWN0dXJlIGlzIGFsbW9zdCBhbHdheXMgd2Vhay4K
ICAgICBWYWx1ZVN0cmVuZ3RoIHN0cmVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zdHJlbmd0aDsg
fQorCisgICAgU3RyaW5nIHRyeUdldFN0cmluZyhHcmFwaCYpOwogICAgIAogICAgIHZvaWQgZHVt
cEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3Q7
CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTk3NzgxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NjgsNiArODY4LDcg
QEAgcHVibGljOgogICAgIEJhZzxDYWxsVmFyYXJnc0RhdGE+IG1fY2FsbFZhcmFyZ3NEYXRhOwog
ICAgIEJhZzxMb2FkVmFyYXJnc0RhdGE+IG1fbG9hZFZhcmFyZ3NEYXRhOwogICAgIEJhZzxTdGFj
a0FjY2Vzc0RhdGE+IG1fc3RhY2tBY2Nlc3NEYXRhOworICAgIEJhZzxMYXp5SlNWYWx1ZT4gbV9s
YXp5SlNWYWx1ZXM7CiAgICAgVmVjdG9yPElubGluZVZhcmlhYmxlRGF0YSwgND4gbV9pbmxpbmVW
YXJpYWJsZURhdGE7CiAgICAgSGFzaE1hcDxDb2RlQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8RnVs
bEJ5dGVjb2RlTGl2ZW5lc3M+PiBtX2J5dGVjb2RlTGl2ZW5lc3M7CiAgICAgSGFzaE1hcDxDb2Rl
QmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVLaWxscz4+IG1fYnl0ZWNvZGVLaWxsczsK
QEAgLTg4MCw2ICs4ODEsOSBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbV9sb2NhbFZhcnM7CiAg
ICAgdW5zaWduZWQgbV9uZXh0TWFjaGluZUxvY2FsOwogICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVy
U2xvdHM7CisgICAgCisgICAgSGFzaFNldDxTdHJpbmc+IG1fbG9jYWxTdHJpbmdzOworICAgIEhh
c2hNYXA8Y29uc3QgU3RyaW5nSW1wbCosIFN0cmluZz4gbV9jb3BpZWRTdHJpbmdzOwogCiAjaWYg
VVNFKEpTVkFMVUUzMl82NCkKICAgICBzdGQ6OnVub3JkZXJlZF9tYXA8aW50NjRfdCwgZG91Ymxl
Kj4gbV9kb3VibGVDb25zdGFudHNNYXA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAxOTc3ODEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgy
LDYgKzgyLDEwIEBAIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkKIAogdm9p
ZCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplQ29tbW9uKCkKIHsKKyAgICAvLyBTb21lIEpJVCBmaW5h
bGl6ZXJzIG1heSBoYXZlIGFkZGVkIG1vcmUgY29uc3RhbnRzLiBTaHJpbmstdG8tZml0IHRob3Nl
IHRoaW5ncyBub3cuCisgICAgbV9wbGFuLmNvZGVCbG9jay0+Y29uc3RhbnRzKCkuc2hyaW5rVG9G
aXQoKTsKKyAgICBtX3BsYW4uY29kZUJsb2NrLT5jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50
YXRpb24oKS5zaHJpbmtUb0ZpdCgpOworICAgIAogI2lmIEVOQUJMRShGVExfSklUKQogICAgIG1f
aml0Q29kZS0+b3B0aW1pemVBZnRlcldhcm1VcChtX3BsYW4uY29kZUJsb2NrKTsKICNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6
eUpTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TGF6eUpTVmFsdWUuY3BwCShyZXZpc2lvbiAxOTc3ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0xhenlKU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0LCAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgs
MTAgKzI4LDIxIEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkNDYWxsSGVs
cGVycy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgor
I2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogCitMYXp5SlNWYWx1ZSBMYXp5SlNWYWx1ZTo6bmV3U3RyaW5nKEdyYXBoJiBncmFwaCwgY29u
c3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgTGF6eUpTVmFsdWUgcmVzdWx0OworICAgIHJlc3Vs
dC5tX2tpbmQgPSBOZXdTdHJpbmdJbXBsOworICAgIHJlc3VsdC51LnN0cmluZ0ltcGwgPSBncmFw
aC5tX2xvY2FsU3RyaW5ncy5hZGQoc3RyaW5nKS5pdGVyYXRvci0+aW1wbCgpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKIEpTVmFsdWUgTGF6eUpTVmFsdWU6OmdldFZhbHVlKFZNJiB2bSkgY29u
c3QKIHsKICAgICBzd2l0Y2ggKG1fa2luZCkgewpAQCAtNDAsNiArNTEsNyBAQCBKU1ZhbHVlIExh
enlKU1ZhbHVlOjpnZXRWYWx1ZShWTSYgdm0pIGNvCiAgICAgY2FzZSBTaW5nbGVDaGFyYWN0ZXJT
dHJpbmc6CiAgICAgICAgIHJldHVybiBqc1NpbmdsZUNoYXJhY3RlclN0cmluZygmdm0sIHUuY2hh
cmFjdGVyKTsKICAgICBjYXNlIEtub3duU3RyaW5nSW1wbDoKKyAgICBjYXNlIE5ld1N0cmluZ0lt
cGw6CiAgICAgICAgIHJldHVybiBqc1N0cmluZygmdm0sIHUuc3RyaW5nSW1wbCk7CiAgICAgfQog
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC03NSw2ICs4Nyw0OCBAQCBzdGF0
aWMgVHJpU3RhdGUgZXF1YWxUb1N0cmluZ0ltcGwoSlNWYWx1CiAgICAgcmV0dXJuIHRyaVN0YXRl
KFdURjo6ZXF1YWwoc3RyaW5nSW1wbCwgc3RyaW5nKSk7CiB9CiAKK2NvbnN0IFN0cmluZ0ltcGwq
IExhenlKU1ZhbHVlOjp0cnlHZXRTdHJpbmdJbXBsKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1f
a2luZCkgeworICAgIGNhc2UgS25vd25TdHJpbmdJbXBsOgorICAgIGNhc2UgTmV3U3RyaW5nSW1w
bDoKKyAgICAgICAgcmV0dXJuIHUuc3RyaW5nSW1wbDsKKworICAgIGNhc2UgS25vd25WYWx1ZToK
KyAgICAgICAgaWYgKEpTU3RyaW5nKiBzdHJpbmcgPSBqc0R5bmFtaWNDYXN0PEpTU3RyaW5nKj4o
dmFsdWUoKS0+dmFsdWUoKSkpCisgICAgICAgICAgICByZXR1cm4gc3RyaW5nLT50cnlHZXRWYWx1
ZUltcGwoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cit9CisKK1N0cmluZyBMYXp5SlNWYWx1ZTo6dHJ5R2V0
U3RyaW5nKEdyYXBoJiBncmFwaCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAg
IGNhc2UgTmV3U3RyaW5nSW1wbDoKKyAgICAgICAgcmV0dXJuIHUuc3RyaW5nSW1wbDsKKworICAg
IGNhc2UgU2luZ2xlQ2hhcmFjdGVyU3RyaW5nOgorICAgICAgICByZXR1cm4gU3RyaW5nKCZ1LmNo
YXJhY3RlciwgMSk7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBpZiAoY29uc3QgU3RyaW5nSW1w
bCogc3RyaW5nID0gdHJ5R2V0U3RyaW5nSW1wbCgpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBn
aW5vcm1vdXNTdHJpbmdMZW5ndGggPSAxMDAwMDsKKyAgICAgICAgICAgIGlmIChzdHJpbmctPmxl
bmd0aCgpID4gZ2lub3Jtb3VzU3RyaW5nTGVuZ3RoKQorICAgICAgICAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXV0byByZXN1bHQgPSBncmFwaC5t
X2NvcGllZFN0cmluZ3MuYWRkKHN0cmluZywgU3RyaW5nKCkpOworICAgICAgICAgICAgaWYgKHJl
c3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
PSBzdHJpbmctPmlzb2xhdGVkQ29weSgpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKyAgICB9Cit9CisKIFRyaVN0YXRlIExhenlKU1ZhbHVlOjpzdHJpY3RFcXVhbChjb25zdCBM
YXp5SlNWYWx1ZSYgb3RoZXIpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtX2tpbmQpIHsKQEAgLTg1
LDYgKzEzOSw3IEBAIFRyaVN0YXRlIExhenlKU1ZhbHVlOjpzdHJpY3RFcXVhbChjb25zdCAKICAg
ICAgICAgY2FzZSBTaW5nbGVDaGFyYWN0ZXJTdHJpbmc6CiAgICAgICAgICAgICByZXR1cm4gZXF1
YWxUb1NpbmdsZUNoYXJhY3Rlcih2YWx1ZSgpLT52YWx1ZSgpLCBvdGhlci5jaGFyYWN0ZXIoKSk7
CiAgICAgICAgIGNhc2UgS25vd25TdHJpbmdJbXBsOgorICAgICAgICBjYXNlIE5ld1N0cmluZ0lt
cGw6CiAgICAgICAgICAgICByZXR1cm4gZXF1YWxUb1N0cmluZ0ltcGwodmFsdWUoKS0+dmFsdWUo
KSwgb3RoZXIuc3RyaW5nSW1wbCgpKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTkz
LDYgKzE0OCw3IEBAIFRyaVN0YXRlIExhenlKU1ZhbHVlOjpzdHJpY3RFcXVhbChjb25zdCAKICAg
ICAgICAgY2FzZSBTaW5nbGVDaGFyYWN0ZXJTdHJpbmc6CiAgICAgICAgICAgICByZXR1cm4gdHJp
U3RhdGUoY2hhcmFjdGVyKCkgPT0gb3RoZXIuY2hhcmFjdGVyKCkpOwogICAgICAgICBjYXNlIEtu
b3duU3RyaW5nSW1wbDoKKyAgICAgICAgY2FzZSBOZXdTdHJpbmdJbXBsOgogICAgICAgICAgICAg
aWYgKG90aGVyLnN0cmluZ0ltcGwoKS0+bGVuZ3RoKCkgIT0gMSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gRmFsc2VUcmlTdGF0ZTsKICAgICAgICAgICAgIHJldHVybiB0cmlTdGF0ZShvdGhlci5z
dHJpbmdJbXBsKCktPmF0KDApID09IGNoYXJhY3RlcigpKTsKQEAgLTEwMSw4ICsxNTcsMTAgQEAg
VHJpU3RhdGUgTGF6eUpTVmFsdWU6OnN0cmljdEVxdWFsKGNvbnN0IAogICAgICAgICB9CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgS25vd25TdHJpbmdJbXBsOgorICAgIGNhc2UgTmV3U3RyaW5n
SW1wbDoKICAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKICAgICAgICAgY2FzZSBLbm93
blN0cmluZ0ltcGw6CisgICAgICAgIGNhc2UgTmV3U3RyaW5nSW1wbDoKICAgICAgICAgICAgIHJl
dHVybiB0cmlTdGF0ZShXVEY6OmVxdWFsKHN0cmluZ0ltcGwoKSwgb3RoZXIuc3RyaW5nSW1wbCgp
KSk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gb3RoZXIuc3RyaWN0RXF1
YWwoKnRoaXMpOwpAQCAtMTQzLDYgKzIwMSw0NSBAQCB1aW50cHRyX3QgTGF6eUpTVmFsdWU6OnN3
aXRjaExvb2t1cFZhbHVlCiAgICAgfQogfQogCit2b2lkIExhenlKU1ZhbHVlOjplbWl0KENDYWxs
SGVscGVycyYgaml0LCBKU1ZhbHVlUmVncyByZXN1bHQpIGNvbnN0Cit7CisgICAgaWYgKG1fa2lu
ZCA9PSBLbm93blZhbHVlKSB7CisgICAgICAgIGppdC5tb3ZlVmFsdWUodmFsdWUoKS0+dmFsdWUo
KSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEl0IG11c3QgYmUg
c29tZSBraW5kIG9mIGNlbGwuCisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBqaXQubW92ZShD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVzdWx0LnRhZ0dQ
UigpKTsKKyNlbmRpZgorICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIGxhYmVsID0gaml0
Lm1vdmVXaXRoUGF0Y2goCisgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdGF0
aWNfY2FzdDxzaXplX3Q+KDB4ZDFlN2JlZWZsdSkpLAorICAgICAgICByZXN1bHQucGF5bG9hZEdQ
UigpKTsKKworICAgIExhenlKU1ZhbHVlIHRoaXNWYWx1ZSA9ICp0aGlzOworCisgICAgLy8gT25j
ZSB3ZSBkbyB0aGlzLCB3ZSdyZSBjb21taXR0ZWQuIE90aGVyd2lzZSB3ZSBsZWFrIG1lbW9yeS4g
Tm90ZSB0aGF0IHdlIGNhbGwgcmVmL2RlcmVmCisgICAgLy8gbWFudWFsbHkgdG8gZW5zdXJlIHRo
YXQgdGhlcmUgaXMgbm8gY29uY3VycmVuY3kgc2hhZGluZXNzLiBXZSBhcmUgZG9pbmcgc29tZXRo
aW5nIGhlcmUKKyAgICAvLyB0aGF0IG1pZ2h0IGJlIHJhdGhlciBicnV0YWw6IHRyYW5zZmVyaW5n
IG93bmVyc2hpcCBvZiB0aGlzIHN0cmluZy4KKyAgICBpZiAobV9raW5kID09IE5ld1N0cmluZ0lt
cGwpCisgICAgICAgIHRoaXNWYWx1ZS51LnN0cmluZ0ltcGwtPnJlZigpOworCisgICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBqaXQuY29kZUJsb2NrKCk7CisgICAgCisgICAgaml0LmFkZExpbmtU
YXNrKAorICAgICAgICBbY29kZUJsb2NrLCBsYWJlbCwgdGhpc1ZhbHVlXSAoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgeworICAgICAgICAgICAgSlNWYWx1ZSByZWFsVmFsdWUgPSB0aGlzVmFsdWUu
Z2V0VmFsdWUobGlua0J1ZmZlci52bSgpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJl
YWxWYWx1ZS5pc0NlbGwoKSk7CisKKyAgICAgICAgICAgIGNvZGVCbG9jay0+YWRkQ29uc3RhbnQo
cmVhbFZhbHVlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHRoaXNWYWx1ZS5tX2tp
bmQgPT0gTmV3U3RyaW5nSW1wbCkKKyAgICAgICAgICAgICAgICB0aGlzVmFsdWUudS5zdHJpbmdJ
bXBsLT5kZXJlZigpOworCisgICAgICAgICAgICBsaW5rQnVmZmVyLnBhdGNoKGxhYmVsLCByZWFs
VmFsdWUuYXNDZWxsKCkpOworICAgICAgICB9KTsKK30KKwogdm9pZCBMYXp5SlNWYWx1ZTo6ZHVt
cEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QK
IHsKICAgICBzd2l0Y2ggKG1fa2luZCkgewpAQCAtMTU1LDcgKzI1MiwxMCBAQCB2b2lkIExhenlK
U1ZhbHVlOjpkdW1wSW5Db250ZXh0KFByaW50U3RyCiAgICAgICAgIG91dC5wcmludCgiIC8gIiwg
U3RyaW5nSW1wbDo6dXRmOEZvckNoYXJhY3RlcnMoJnUuY2hhcmFjdGVyLCAxKSwgIikiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIGNhc2UgS25vd25TdHJpbmdJbXBsOgotICAgICAgICBvdXQucHJp
bnQoIkxhenk6U3RyaW5nKCIsIHN0cmluZ0ltcGwoKSwgIikiKTsKKyAgICAgICAgb3V0LnByaW50
KCJMYXp5Oktub3duU3RyaW5nKCIsIHN0cmluZ0ltcGwoKSwgIikiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgTmV3U3RyaW5nSW1wbDoKKyAgICAgICAgb3V0LnByaW50KCJMYXp5Ok5ld1N0
cmluZygiLCBzdHJpbmdJbXBsKCksICIpIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTGF6eUpTVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0xhenlKU1ZhbHVlLmgJKHJldmlzaW9uIDE5Nzc4MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0LCAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzIsMTkgKzMyLDI2IEBACiAjaW5jbHVkZSAiREZHRnJvemVuVmFsdWUuaCIKICNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CiAKLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDQ2FsbEhlbHBlcnM7CisKK25hbWVzcGFjZSBE
RkcgeworCitjbGFzcyBHcmFwaDsKIAogLy8gUmVwcmVzZW50cyBlaXRoZXIgYSBKU1ZhbHVlLCBv
ciBmb3IgSlNWYWx1ZXMgdGhhdCByZXF1aXJlIGFsbG9jYXRpb24gaW4gdGhlIGhlYXAsCiAvLyBp
dCB0ZWxscyB5b3UgZXZlcnl0aGluZyB5b3UnZCBuZWVkIHRvIGtub3cgaW4gb3JkZXIgdG8gYWxs
b2NhdGUgaXQuCiAKLWVudW0gTGF6aW5lc3NLaW5kIHsKLSAgICBLbm93blZhbHVlLAotICAgIFNp
bmdsZUNoYXJhY3RlclN0cmluZywKLSAgICBLbm93blN0cmluZ0ltcGwKLX07Ci0KIGNsYXNzIExh
enlKU1ZhbHVlIHsKIHB1YmxpYzoKKyAgICBlbnVtIExhemluZXNzS2luZCB7CisgICAgICAgIEtu
b3duVmFsdWUsCisgICAgICAgIFNpbmdsZUNoYXJhY3RlclN0cmluZywKKyAgICAgICAgS25vd25T
dHJpbmdJbXBsLAorICAgICAgICBOZXdTdHJpbmdJbXBsCisgICAgfTsKKwogICAgIExhenlKU1Zh
bHVlKEZyb3plblZhbHVlKiB2YWx1ZSA9IEZyb3plblZhbHVlOjplbXB0eVNpbmdsZXRvbigpKQog
ICAgICAgICA6IG1fa2luZChLbm93blZhbHVlKQogICAgIHsKQEAgLTY2LDYgKzczLDEwIEBAIHB1
YmxpYzoKICAgICAgICAgcmVzdWx0LnUuc3RyaW5nSW1wbCA9IHN0cmluZzsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CisKKyAgICBzdGF0aWMgTGF6eUpTVmFsdWUgbmV3U3RyaW5nKEdy
YXBoJiwgY29uc3QgU3RyaW5nJik7CisKKyAgICBMYXppbmVzc0tpbmQga2luZCgpIGNvbnN0IHsg
cmV0dXJuIG1fa2luZDsgfQogICAgIAogICAgIEZyb3plblZhbHVlKiB0cnlHZXRWYWx1ZShHcmFw
aCYpIGNvbnN0CiAgICAgewpAQCAtODcsMTYgKzk4LDIyIEBAIHB1YmxpYzoKICAgICAgICAgQVNT
RVJUKG1fa2luZCA9PSBTaW5nbGVDaGFyYWN0ZXJTdHJpbmcpOwogICAgICAgICByZXR1cm4gdS5j
aGFyYWN0ZXI7CiAgICAgfQorCisgICAgY29uc3QgU3RyaW5nSW1wbCogdHJ5R2V0U3RyaW5nSW1w
bCgpIGNvbnN0OworICAgIAorICAgIFN0cmluZyB0cnlHZXRTdHJpbmcoR3JhcGgmKSBjb25zdDsK
ICAgICAKICAgICBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsKCkgY29uc3QKICAgICB7Ci0gICAgICAg
IEFTU0VSVChtX2tpbmQgPT0gS25vd25TdHJpbmdJbXBsKTsKKyAgICAgICAgQVNTRVJUKG1fa2lu
ZCA9PSBLbm93blN0cmluZ0ltcGwgfHwgbV9raW5kID09IE5ld1N0cmluZ0ltcGwpOwogICAgICAg
ICByZXR1cm4gdS5zdHJpbmdJbXBsOwogICAgIH0KLSAgICAKKwogICAgIFRyaVN0YXRlIHN0cmlj
dEVxdWFsKGNvbnN0IExhenlKU1ZhbHVlJiBvdGhlcikgY29uc3Q7CiAgICAgCiAgICAgdWludHB0
cl90IHN3aXRjaExvb2t1cFZhbHVlKFN3aXRjaEtpbmQpIGNvbnN0OworCisgICAgdm9pZCBlbWl0
KENDYWxsSGVscGVycyYsIEpTVmFsdWVSZWdzKSBjb25zdDsKICAgICAKICAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0m
LCBEdW1wQ29udGV4dCopIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdNYXlFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R01heUV4aXQuY3BwCShyZXZpc2lvbiAxOTc3ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR01heUV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miw3IEBAIEV4aXRN
b2RlIG1heUV4aXQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2QKICAgICBjYXNlIFNldEFyZ3VtZW50
OgogICAgIGNhc2UgSlNDb25zdGFudDoKICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgorICAgIGNh
c2UgTGF6eUpTQ29uc3RhbnQ6CiAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgogICAgIGNhc2UgTW92
SGludDoKICAgICBjYXNlIFNldExvY2FsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuY3BwCShyZXZpc2lvbiAxOTc3ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNjAsNiArMTYwLDE0IEBA
IHZvaWQgTm9kZTo6Y29udmVydFRvSWRlbnRpdHlPbihOb2RlKiBjaGkKICAgICB9CiB9CiAKK3Zv
aWQgTm9kZTo6Y29udmVydFRvTGF6eUpTQ29uc3RhbnQoR3JhcGgmIGdyYXBoLCBMYXp5SlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICBtX29wID0gTGF6eUpTQ29uc3RhbnQ7CisgICAgbV9mbGFncyAmPSB+
Tm9kZU11c3RHZW5lcmF0ZTsKKyAgICBtX29wSW5mbyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KGdyYXBoLm1fbGF6eUpTVmFsdWVzLmFkZCh2YWx1ZSkpOworICAgIGNoaWxkcmVuLnJlc2V0KCk7
Cit9CisKIHZvaWQgTm9kZTo6Y29udmVydFRvUHV0SGludChjb25zdCBQcm9tb3RlZExvY2F0aW9u
RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgTm9kZSogYmFzZSwgTm9kZSogdmFsdWUpCiB7CiAgICAg
bV9vcCA9IFB1dEhpbnQ7CkBAIC0xOTMsNiArMjAxLDE1IEBAIHZvaWQgTm9kZTo6Y29udmVydFRv
UHV0Q2xvc3VyZVZhckhpbnQoKQogICAgICAgICBjaGlsZDEoKS5ub2RlKCksIGNoaWxkMigpLm5v
ZGUoKSk7CiB9CiAKK1N0cmluZyBOb2RlOjp0cnlHZXRTdHJpbmcoR3JhcGgmIGdyYXBoKQorewor
ICAgIGlmIChoYXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gY29uc3RhbnQoKS0+dHJ5R2V0
U3RyaW5nKGdyYXBoKTsKKyAgICBpZiAoaGFzTGF6eUpTVmFsdWUoKSkKKyAgICAgICAgcmV0dXJu
IGxhenlKU1ZhbHVlKCkudHJ5R2V0U3RyaW5nKGdyYXBoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7
Cit9CisKIFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yIE5vZGU6OnByb21vdGVkTG9jYXRpb25E
ZXNjcmlwdG9yKCkKIHsKICAgICByZXR1cm4gUHJvbW90ZWRMb2NhdGlvbkRlc2NyaXB0b3Ioc3Rh
dGljX2Nhc3Q8UHJvbW90ZWRMb2NhdGlvbktpbmQ+KG1fb3BJbmZvKSwgbV9vcEluZm8yKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxOTc3ODEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDk0
LDYgKzQ5NCw4IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgbV9vcEluZm8gPSBiaXR3aXNlX2Nh
c3Q8dWludHB0cl90Pih2YWx1ZSk7CiAgICAgICAgIGNoaWxkcmVuLnJlc2V0KCk7CiAgICAgfQor
CisgICAgdm9pZCBjb252ZXJ0VG9MYXp5SlNDb25zdGFudChHcmFwaCYsIExhenlKU1ZhbHVlKTsK
ICAgICAKICAgICB2b2lkIGNvbnZlcnRUb0NvbnN0YW50U3RvcmFnZVBvaW50ZXIodm9pZCogcG9p
bnRlcikKICAgICB7CkBAIC03NDMsNiArNzQ1LDE5IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICBib29sIGhhc0xhenlKU1ZhbHVlKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBvcCgpID09IExhenlKU0NvbnN0YW50OworICAgIH0KKworICAgIExh
enlKU1ZhbHVlIGxhenlKU1ZhbHVlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNMYXp5SlNW
YWx1ZSgpKTsKKyAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8TGF6eUpTVmFsdWUqPihtX29w
SW5mbyk7CisgICAgfQorCisgICAgU3RyaW5nIHRyeUdldFN0cmluZyhHcmFwaCYpOworCiAgICAg
SlNWYWx1ZSBpbml0aWFsaXphdGlvblZhbHVlRm9yQWN0aXZhdGlvbigpIGNvbnN0CiAgICAgewog
ICAgICAgICBBU1NFUlQob3AoKSA9PSBDcmVhdGVBY3RpdmF0aW9uKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE5Nzc4MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDEs
NiArNDEsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oRG91
YmxlQ29uc3RhbnQsIE5vZGVSZXN1bHREb3VibGUpIFwKICAgICBtYWNybyhJbnQ1MkNvbnN0YW50
LCBOb2RlUmVzdWx0SW50NTIpIFwKICAgICBcCisgICAgLyogTGF6eSBKU1ZhbHVlIGNvbnN0YW50
LiBXZSBkb24ndCBrbm93IHRoZSBKU1ZhbHVlIGJpdHMgb2YgaXQgeWV0LiAqL1wKKyAgICBtYWNy
byhMYXp5SlNDb25zdGFudCwgTm9kZVJlc3VsdEpTKSBcCisgICAgXAogICAgIC8qIE1hcmtlciB0
byBpbmRpY2F0ZSB0aGF0IGFuIG9wZXJhdGlvbiB3YXMgb3B0aW1pemVkIGVudGlyZWx5IGFuZCBh
bGwgdGhhdCBpcyBsZWZ0ICovXAogICAgIC8qIGlzIHRvIG1ha2Ugb25lIG5vZGUgYWxpYXMgYW5v
dGhlci4gQ1NFIHdpbGwgbGF0ZXIgdXN1YWxseSBlbGltaW5hdGUgdGhpcyBub2RlLCAqL1wKICAg
ICAvKiB0aG91Z2ggaXQgbWF5IGNob29zZSBub3QgdG8gaWYgaXQgd291bGQgY29ycnVwdCBwcmVk
aWN0aW9ucyAodmVyeSByYXJlKS4gKi9cCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2
aXNpb24gMTk3NzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2OCw3ICs2NjgsOCBAQCBw
cml2YXRlOgogICAgICAgICBjYXNlIFN0b3JlQmFycmllcjoKICAgICAgICAgY2FzZSBHZXRTdGFj
azoKICAgICAgICAgY2FzZSBHZXRSZWdFeHBPYmplY3RMYXN0SW5kZXg6Ci0gICAgICAgIGNhc2Ug
U2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4OiB7CisgICAgICAgIGNhc2UgU2V0UmVnRXhwT2JqZWN0
TGFzdEluZGV4OgorICAgICAgICBjYXNlIExhenlKU0NvbnN0YW50OiB7CiAgICAgICAgICAgICAv
LyBUaGlzIG5vZGUgc2hvdWxkIG5ldmVyIGJlIHZpc2libGUgYXQgdGhpcyBzdGFnZSBvZiBjb21w
aWxhdGlvbi4gSXQgaXMKICAgICAgICAgICAgIC8vIGluc2VydGVkIGJ5IGZpeHVwKCksIHdoaWNo
IGZvbGxvd3MgdGhpcyBwaGFzZS4KICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2Rl
LCAiVW5leHBlY3RlZCBub2RlIGR1cmluZyBwcmVkaWN0aW9uIHByb3BhZ2F0aW9uIik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNp
b24gMTk3NzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw2ICsxMzcsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUo
QWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNhc2UgRG91
YmxlQ29uc3RhbnQ6CiAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgorICAgIGNhc2UgTGF6eUpTQ29u
c3RhbnQ6CiAgICAgY2FzZSBJZGVudGl0eToKICAgICBjYXNlIFRvVGhpczoKICAgICBjYXNlIENy
ZWF0ZVRoaXM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE5Nzc4MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE4NzQsNiArMTg3NCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAgICAgICAgIGluaXRDb25zdGFudEluZm8obm9kZSk7CiAgICAgICAgIGJyZWFrOwog
CisgICAgY2FzZSBMYXp5SlNDb25zdGFudDoKKyAgICAgICAgY29tcGlsZUxhenlKU0NvbnN0YW50
KG5vZGUpOworICAgICAgICBicmVhazsKKwogICAgIGNhc2UgSWRlbnRpdHk6IHsKICAgICAgICAg
c3BlY3VsYXRlKG5vZGUsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgc3dpdGNoIChub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTk3NzgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTk4Miw2ICsxOTgyLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgaW5pdENvbnN0YW50SW5mbyhub2RlKTsKICAgICAgICAgYnJlYWs7
CiAKKyAgICBjYXNlIExhenlKU0NvbnN0YW50OgorICAgICAgICBjb21waWxlTGF6eUpTQ29uc3Rh
bnQobm9kZSk7CisgICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBJZGVudGl0eTogewogICAgICAg
ICBzcGVjdWxhdGUobm9kZSwgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBzd2l0Y2ggKG5vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE5Nzc4MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03NjQ3LDYgKzc2NDcsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNldFJlZ0V4
cE9iagogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlTGF6eUpTQ29uc3RhbnQoTm9kZSogbm9kZSkKK3sKKyAgICBKU1ZhbHVlUmVnc1RlbXBvcmFy
eSByZXN1bHQodGhpcyk7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdz
KCk7CisgICAgbm9kZS0+bGF6eUpTVmFsdWUoKS5lbWl0KG1faml0LCByZXN1bHRSZWdzKTsKKyAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworfQorCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTk3NzgxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDAwLDYg
KzI0MDAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlUHV0QWNjZXNzb3JCeVZhbChOb2Rl
Kik7CiAgICAgdm9pZCBjb21waWxlR2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4KE5vZGUqKTsKICAg
ICB2b2lkIGNvbXBpbGVTZXRSZWdFeHBPYmplY3RMYXN0SW5kZXgoTm9kZSopOworICAgIHZvaWQg
Y29tcGlsZUxhenlKU0NvbnN0YW50KE5vZGUqKTsKICAgICAKICAgICB2b2lkIG1vdmVUcnVlVG8o
R1BSUmVnKTsKICAgICB2b2lkIG1vdmVGYWxzZVRvKEdQUlJlZyk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5j
cHAJKHJldmlzaW9uIDE5Nzc4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Ry
ZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5MSw3ICsyOTEsNTEg
QEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgICAg
IAorCisgICAgICAgIC8vIEZJWE1FOiBXZSBoYXZlIGEgbG90IG9mIHN0cmluZyBjb25zdGFudC1m
b2xkaW5nIHJ1bGVzIGhlcmUuIEl0IHdvdWxkIGJlIGdyZWF0IHRvCisgICAgICAgIC8vIG1vdmUg
dGhlc2UgdG8gdGhlIGFic3RyYWN0IGludGVycHJldGVyIG9uY2UgQWJzdHJhY3RWYWx1ZSBjYW4g
c3VwcG9ydCBMYXp5SlNWYWx1ZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1NTIwNAorCisgICAgICAgIGNhc2UgTWFrZVJvcGU6CisgICAgICAg
IGNhc2UgVmFsdWVBZGQ6CisgICAgICAgIGNhc2UgU3RyQ2F0OiB7CisgICAgICAgICAgICBTdHJp
bmcgbGVmdFN0cmluZyA9IG1fbm9kZS0+Y2hpbGQxKCktPnRyeUdldFN0cmluZyhtX2dyYXBoKTsK
KyAgICAgICAgICAgIGlmICghbGVmdFN0cmluZykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIFN0cmluZyByaWdodFN0cmluZyA9IG1fbm9kZS0+Y2hpbGQyKCktPnRyeUdldFN0
cmluZyhtX2dyYXBoKTsKKyAgICAgICAgICAgIGlmICghcmlnaHRTdHJpbmcpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBTdHJpbmcgZXh0cmFTdHJpbmc7CisgICAgICAgICAg
ICBpZiAobV9ub2RlLT5jaGlsZDMoKSkgeworICAgICAgICAgICAgICAgIGV4dHJhU3RyaW5nID0g
bV9ub2RlLT5jaGlsZDMoKS0+dHJ5R2V0U3RyaW5nKG1fZ3JhcGgpOworICAgICAgICAgICAgICAg
IGlmICghZXh0cmFTdHJpbmcpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZChsZWZ0U3RyaW5nKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHJp
Z2h0U3RyaW5nKTsKKyAgICAgICAgICAgIGlmICghIWV4dHJhU3RyaW5nKQorICAgICAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKGV4dHJhU3RyaW5nKTsKKworICAgICAgICAgICAgbV9ub2RlLT5j
b252ZXJ0VG9MYXp5SlNDb25zdGFudCgKKyAgICAgICAgICAgICAgICBtX2dyYXBoLCBMYXp5SlNW
YWx1ZTo6bmV3U3RyaW5nKG1fZ3JhcGgsIGJ1aWxkZXIudG9TdHJpbmcoKSkpOworICAgICAgICAg
ICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDogeworICAgICAgICAgICAgaWYgKG1fbm9kZS0+YXJy
YXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpHZW5lcmljCisgICAgICAgICAgICAgICAgfHwgbV9u
b2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OlN0cmluZykgeworICAgICAgICAgICAg
ICAgIFN0cmluZyBzdHJpbmcgPSBtX25vZGUtPmNoaWxkMSgpLT50cnlHZXRTdHJpbmcobV9ncmFw
aCk7CisgICAgICAgICAgICAgICAgaWYgKCEhc3RyaW5nKSB7CisgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobV9ub2RlLCBqc051bWJlcihzdHJpbmcubGVuZ3Ro
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24g
MTk3NzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwg
Y2FuQ29tcGlsZShOb2RlKiAKICAgICAKICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICBj
YXNlIEpTQ29uc3RhbnQ6CisgICAgY2FzZSBMYXp5SlNDb25zdGFudDoKICAgICBjYXNlIEdldExv
Y2FsOgogICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgY2FzZSBQdXRTdGFjazoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDE5
Nzc4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDQ2LDYgKzQ0Niw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2Ug
SW50NTJDb25zdGFudDoKICAgICAgICAgICAgIGNvbXBpbGVJbnQ1MkNvbnN0YW50KCk7CiAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMYXp5SlNDb25zdGFudDoKKyAgICAgICAgICAg
IGNvbXBpbGVMYXp5SlNDb25zdGFudCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgRG91YmxlUmVwOgogICAgICAgICAgICAgY29tcGlsZURvdWJsZVJlcCgpOwogICAgICAgICAg
ICAgYnJlYWs7CkBAIC0xMDQ0LDYgKzEwNDcsMTggQEAgcHJpdmF0ZToKICAgICAgICAgc2V0U3Ry
aWN0SW50NTIobV9vdXQuY29uc3RJbnQ2NCh2YWx1ZSkpOwogICAgIH0KIAorICAgIHZvaWQgY29t
cGlsZUxhenlKU0NvbnN0YW50KCkKKyAgICB7CisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcGF0
Y2hwb2ludCA9IG1fb3V0LnBhdGNocG9pbnQoSW50NjQpOworICAgICAgICBMYXp5SlNWYWx1ZSB2
YWx1ZSA9IG1fbm9kZS0+bGF6eUpTVmFsdWUoKTsKKyAgICAgICAgcGF0Y2hwb2ludC0+c2V0R2Vu
ZXJhdG9yKAorICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZS5lbWl0
KGppdCwgSlNWYWx1ZVJlZ3MocGFyYW1zWzBdLmdwcigpKSk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cyA9IEVmZmVjdHM6Om5vbmUoKTsKKyAgICAgICAgc2V0
SlNWYWx1ZShwYXRjaHBvaW50KTsKKyAgICB9CisKICAgICB2b2lkIGNvbXBpbGVEb3VibGVSZXAo
KQogICAgIHsKICAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewpJ
bmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFu
Z2VMb2cJKHJldmlzaW9uIDE5Nzc4MSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTYtMDMtMDggIEZpbGlwIFBpemxvICA8ZnBpemxv
QGFwcGxlLmNvbT4KKworICAgICAgICBERkcgc2hvdWxkIGJlIGFibGUgdG8gY29uc3RhbnQtZm9s
ZCBzdHJpbmdzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTUyMDAKKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KKworICAgICAg
ICBBZGQgc3VwcG9ydCBmb3IgY2xvbmluZyBhIFN0cmluZ0ltcGwuIFRoaXMgYWxsb3dzIHRoZSBK
SVQgdGhyZWFkIHRvIGNyZWF0ZSBpdHMgb3duCisgICAgICAgIHNoYWRvdyB2ZXJzaW9ucyBvZiB0
aGUgU3RyaW5nSW1wbHMgaXQncyBhbmFseXppbmcsIHNvIHRoYXQgaXQgY2FuIHVzZSBXVEZTdHJp
bmcgQVBJcy4KKworICAgICAgICBBbHNvIGRpc2FibGUgYXNzZXJ0aW9ucyBhYm91dCByZWZlcmVu
Y2UgY291bnRpbmcgc3RyaW5ncyBvbiB0aGUgSklUIHRocmVhZC4gV2Ugd2lsbCBkbworICAgICAg
ICB0aGF0IG5vdyBhbmQgaXQncyBPSy4KKworICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwu
Y3BwOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpyZWFsbG9jYXRlKToKKyAgICAgICAgKFdU
Rjo6U3RyaW5nSW1wbDo6Y2xvbmUpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjcmVhdGVJ
bnRlcm5hbCk6CisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1wbC5oOgorICAgICAgICAoV1RG
OjpTdHJpbmdJbXBsOjpmbGFnc09mZnNldCk6CisgICAgICAgIChXVEY6OlN0cmluZ0ltcGw6OmZs
YWdJczhCaXQpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpmbGFnSXNBdG9taWMpOgorICAg
ICAgICAoV1RGOjpTdHJpbmdJbXBsOjpyZWYpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjpk
ZXJlZik6CisKIDIwMTYtMDMtMDcgIEtlaXRoIFJvbGxpbiAgPGtyb2xsaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIEVuaGFuY2UgbG9nZ2luZzogVXNlICJhbHdheXMgb24iIG1hY3JvcwpJbmRleDog
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHJldmlzaW9uIDE5Nzc4MSkKKysrIFNvdXJjZS9XVEYv
d3RmL3RleHQvU3RyaW5nSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01ODUsNyArNTg1LDcgQEAg
cHVibGljOgogCiAgICAgaW5saW5lIHZvaWQgcmVmKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCgh
aXNDb21waWxhdGlvblRocmVhZCgpKTsKKyAgICAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhy
ZWFkKCkgfHwgIWlzQXRvbWljKCkpOwogCiAgICAgICAgIFNUUklOR19TVEFUU19SRUZfU1RSSU5H
KCp0aGlzKTsKIApAQCAtNTk0LDcgKzU5NCw3IEBAIHB1YmxpYzoKIAogICAgIGlubGluZSB2b2lk
IGRlcmVmKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsK
KyAgICAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkgfHwgIWlzQXRvbWljKCkpOwog
CiAgICAgICAgIFNUUklOR19TVEFUU19ERVJFRl9TVFJJTkcoKnRoaXMpOwogCkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxOTc3ODEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwyMSBAQAorMjAxNi0wMy0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUu
Y29tPgorCisgICAgICAgIE5lZWQgYSBzaG9ydCBkZXNjcmlwdGlvbiAoT09QUyEpLgorICAgICAg
ICBOZWVkIHRoZSBidWcgVVJMIChPT1BTISkuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9zdHJjYXQtY29u
c3QuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGJhcik6CisgICAgICAgICog
anMvcmVncmVzcy9zY3JpcHQtdGVzdHMvc3RyY2F0LWxlbmd0aC1jb25zdC5qczogQWRkZWQuCisg
ICAgICAgIChmb28pOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKiBqcy9yZWdyZXNzL3N0cmNh
dC1jb25zdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc3RyY2F0
LWNvbnN0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc3RyY2F0LWxlbmd0aC1j
b25zdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc3RyY2F0LWxl
bmd0aC1jb25zdC5odG1sOiBBZGRlZC4KKwogMjAxNi0wMy0wOCAgTWljaGFlbCBTYWJvZmYgIDxt
c2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBbRVM2XSBSZWd1bGFyIEV4cHJlc3Npb24gY2Fu
b25pY2FsaXphdGlvbiB0YWJsZXMgZm9yIFVuaWNvZGUgbmVlZCB0byBiZSB1cGRhdGVkIHRvIHVz
ZSBVbmljb2RlIENhc2VGb2xkaW5nLnR4dApJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9z
dHJjYXQtY29uc3QtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3Mvc3RyY2F0LWNvbnN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvc3RyY2F0LWNvbnN0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3Mvc3RyY2F0LWNvbnN0CisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL3N0cmNhdC1jb25zdC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvc3RyY2F0LWNvbnN0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL3N0cmNhdC1jb25zdC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIg
QEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1s
PgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9y
ZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3N0cmNh
dC1jb25zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jl
c3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3N0cmNhdC1sZW5ndGgtY29uc3QtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc3RyY2F0LWxlbmd0aC1jb25zdC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3N0cmNhdC1sZW5ndGgt
Y29uc3QtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVn
cmVzcy9zdHJjYXQtbGVuZ3RoLWNvbnN0CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3N0cmNh
dC1sZW5ndGgtY29uc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3N0cmNhdC1sZW5ndGgtY29uc3QuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvc3RyY2F0LWxlbmd0aC1jb25zdC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291
cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3Rz
L3N0cmNhdC1sZW5ndGgtY29uc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvc3RyY2F0LWNvbnN0LmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3N0cmNhdC1j
b25zdC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL3N0cmNhdC1jb25zdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2IEBACitmdW5j
dGlvbiBmb28oYSwgYikgeworICAgIHJldHVybiBhICsgYjsKK30KKworZnVuY3Rpb24gYmFyKCkg
eworICAgIHJldHVybiBmb28oImhlbGxvICIsICJ3b3JsZCEiKTsKK30KKworbm9JbmxpbmUoYmFy
KTsKKwordmFyIHJlc3VsdDsKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDsgKytpKQorICAg
IHJlc3VsdCA9IGJhcigpOworCitpZiAocmVzdWx0ICE9ICJoZWxsbyB3b3JsZCEiKQorICAgIHRo
cm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKSW5kZXg6IExheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3N0cmNhdC1sZW5ndGgtY29uc3QuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvc3RyY2F0LWxlbmd0aC1jb25z
dC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3Rz
L3N0cmNhdC1sZW5ndGgtY29uc3QuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNiBAQAor
ZnVuY3Rpb24gZm9vKGEsIGIpIHsKKyAgICByZXR1cm4gKGEgKyBiKS5sZW5ndGg7Cit9CisKK2Z1
bmN0aW9uIGJhcigpIHsKKyAgICByZXR1cm4gZm9vKCJoZWxsbyAiLCAid29ybGQhIik7Cit9CisK
K25vSW5saW5lKGJhcik7CisKK3ZhciByZXN1bHQ7Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAw
MDA7ICsraSkKKyAgICByZXN1bHQgPSBiYXIoKTsKKworaWYgKHJlc3VsdCAhPSAiaGVsbG8gd29y
bGQhIi5sZW5ndGgpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>