<?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>191493</bug_id>
          
          <creation_ts>2018-11-09 16:01:20 -0800</creation_ts>
          <short_desc>[Curl] Add API Test for Curl cookie backend.</short_desc>
          <delta_ts>2018-11-12 15:19:24 -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>Platform</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=191406</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Basuke Suzuki">basuke</reporter>
          <assigned_to name="Basuke Suzuki">basuke</assigned_to>
          <cc>achristensen</cc>
    
    <cc>basuke</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1477157</commentid>
    <comment_count>0</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-11-09 16:01:20 -0800</bug_when>
    <thetext>Cleanup Cookie database implementation to make them testable better. Then add unit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477167</commentid>
    <comment_count>1</comment_count>
      <attachid>354405</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-11-09 16:17:13 -0800</bug_when>
    <thetext>Created attachment 354405
PATCH</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477169</commentid>
    <comment_count>2</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-11-09 16:18:33 -0800</bug_when>
    <thetext>Separate the initial test preparation and refactoring of code from the patch. https://bugs.webkit.org/show_bug.cgi?id=191406</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477173</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-11-09 16:22:25 -0800</bug_when>
    <thetext>Attachment 354405 did not pass style-queue:


ERROR: Source/WebCore/platform/network/curl/CookieJarDB.cpp:152:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 1 in 11 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>1477181</commentid>
    <comment_count>4</comment_count>
      <attachid>354410</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-11-09 16:33:01 -0800</bug_when>
    <thetext>Created attachment 354410
FIX Style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477329</commentid>
    <comment_count>5</comment_count>
      <attachid>354410</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-10 16:46:34 -0800</bug_when>
    <thetext>Comment on attachment 354410
FIX Style

View in context: https://bugs.webkit.org/attachment.cgi?id=354410&amp;action=review

&gt; Source/WebCore/platform/FileSystem.h:190
&gt; +#if OS(WINDOWS)

There&apos;s already a PLATFORM(WIN) just above this.

&gt; Tools/TestWebKitAPI/Tests/WebCore/curl/Cookies.cpp:35
&gt; +using namespace WebCore;

Could we put this inside the namespace in case we unify these sources, too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477646</commentid>
    <comment_count>6</comment_count>
      <attachid>354410</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-11-12 11:06:19 -0800</bug_when>
    <thetext>Comment on attachment 354410
FIX Style

View in context: https://bugs.webkit.org/attachment.cgi?id=354410&amp;action=review

Thanks for review!

&gt;&gt; Source/WebCore/platform/FileSystem.h:190
&gt;&gt; +#if OS(WINDOWS)
&gt; 
&gt; There&apos;s already a PLATFORM(WIN) just above this.

I meant this for both AppleWin and WinCairo because there&apos;s not WinCairo specific code.

&gt;&gt; Tools/TestWebKitAPI/Tests/WebCore/curl/Cookies.cpp:35
&gt;&gt; +using namespace WebCore;
&gt; 
&gt; Could we put this inside the namespace in case we unify these sources, too?

Ah, okay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477700</commentid>
    <comment_count>7</comment_count>
      <attachid>354582</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-11-12 13:28:00 -0800</bug_when>
    <thetext>Created attachment 354582
Fix

Move tests into its own namespace and make utility functions in FileSystem into PLATFORM(WIN_CAIRO)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477718</commentid>
    <comment_count>8</comment_count>
      <attachid>354582</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2018-11-12 13:53:47 -0800</bug_when>
    <thetext>Comment on attachment 354582
Fix

View in context: https://bugs.webkit.org/attachment.cgi?id=354582&amp;action=review

&gt; Source/WebCore/platform/network/curl/CookieJarCurlDatabase.cpp:51
&gt; +        for (auto cookie : *result) {

s/auto/auto&amp;

&gt; Source/WebCore/platform/network/curl/CookieJarDB.cpp:434
&gt; +    SQLiteStatement* statement = getPrepareStatement(SET_COOKIE_SQL);

s/SQLiteStatement/auto/
Also maybe getPrepareStatement should return a SQLiteStatement&amp;

&gt; Source/WebCore/platform/network/curl/CookieJarDB.h:43
&gt; +    enum class Source : uint8_t {

Do we need &quot; : uint8_t&quot;?

&gt; Source/WebCore/platform/network/curl/CookieUtil.cpp:147
&gt; +        return std::nullopt;

You can also write it { }, which is shorter.
Not exactly sure what is the recommended way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477731</commentid>
    <comment_count>9</comment_count>
      <attachid>354582</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-11-12 14:22:30 -0800</bug_when>
    <thetext>Comment on attachment 354582
Fix

View in context: https://bugs.webkit.org/attachment.cgi?id=354582&amp;action=review

Thanks!

&gt;&gt; Source/WebCore/platform/network/curl/CookieJarCurlDatabase.cpp:51
&gt;&gt; +        for (auto cookie : *result) {
&gt; 
&gt; s/auto/auto&amp;

Sure.

&gt;&gt; Source/WebCore/platform/network/curl/CookieJarDB.cpp:434
&gt;&gt; +    SQLiteStatement* statement = getPrepareStatement(SET_COOKIE_SQL);
&gt; 
&gt; s/SQLiteStatement/auto/
&gt; Also maybe getPrepareStatement should return a SQLiteStatement&amp;

Got it. Also will rename getPrepareStatement to preparedStatement.

&gt;&gt; Source/WebCore/platform/network/curl/CookieJarDB.h:43
&gt;&gt; +    enum class Source : uint8_t {
&gt; 
&gt; Do we need &quot; : uint8_t&quot;?

Not specifically. Will remove it.

&gt;&gt; Source/WebCore/platform/network/curl/CookieUtil.cpp:147
&gt;&gt; +        return std::nullopt;
&gt; 
&gt; You can also write it { }, which is shorter.
&gt; Not exactly sure what is the recommended way.

Oh, I didn&apos;t know that. Thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477732</commentid>
    <comment_count>10</comment_count>
      <attachid>354592</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-11-12 14:29:03 -0800</bug_when>
    <thetext>Created attachment 354592
PATCH</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477734</commentid>
    <comment_count>11</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-12 14:31:01 -0800</bug_when>
    <thetext>(In reply to youenn fablet from comment #8)
&gt; Comment on attachment 354582 [details]
&gt; Fix
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=354582&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/network/curl/CookieJarCurlDatabase.cpp:51
&gt; &gt; +        for (auto cookie : *result) {
&gt; 
&gt; s/auto/auto&amp;
&gt; 
&gt; &gt; Source/WebCore/platform/network/curl/CookieJarDB.cpp:434
&gt; &gt; +    SQLiteStatement* statement = getPrepareStatement(SET_COOKIE_SQL);
&gt; 
&gt; s/SQLiteStatement/auto/
&gt; Also maybe getPrepareStatement should return a SQLiteStatement&amp;
&gt; 
&gt; &gt; Source/WebCore/platform/network/curl/CookieJarDB.h:43
&gt; &gt; +    enum class Source : uint8_t {
&gt; 
&gt; Do we need &quot; : uint8_t&quot;?
We are preferring this when possible in case they get stored someday.  In fact, you can&apos;t send an enum class without a storage class over IPC now.
&gt; 
&gt; &gt; Source/WebCore/platform/network/curl/CookieUtil.cpp:147
&gt; &gt; +        return std::nullopt;
&gt; 
&gt; You can also write it { }, which is shorter.
&gt; Not exactly sure what is the recommended way.
std::nullopt is preferred in WebKit.  It&apos;s more explicit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477735</commentid>
    <comment_count>12</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-11-12 14:34:24 -0800</bug_when>
    <thetext>(In reply to Alex Christensen from comment #11)
&gt; (In reply to youenn fablet from comment #8)
&gt; &gt; Comment on attachment 354582 [details]
&gt; &gt; Fix
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=354582&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/network/curl/CookieJarCurlDatabase.cpp:51
&gt; &gt; &gt; +        for (auto cookie : *result) {
&gt; &gt; 
&gt; &gt; s/auto/auto&amp;
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/network/curl/CookieJarDB.cpp:434
&gt; &gt; &gt; +    SQLiteStatement* statement = getPrepareStatement(SET_COOKIE_SQL);
&gt; &gt; 
&gt; &gt; s/SQLiteStatement/auto/
&gt; &gt; Also maybe getPrepareStatement should return a SQLiteStatement&amp;
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/network/curl/CookieJarDB.h:43
&gt; &gt; &gt; +    enum class Source : uint8_t {
&gt; &gt; 
&gt; &gt; Do we need &quot; : uint8_t&quot;?
&gt; We are preferring this when possible in case they get stored someday.  In
&gt; fact, you can&apos;t send an enum class without a storage class over IPC now.

Got it. I couldn&apos;t find any reason at this moment for this, but it may be contained in IPC someday.

&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/network/curl/CookieUtil.cpp:147
&gt; &gt; &gt; +        return std::nullopt;
&gt; &gt; 
&gt; &gt; You can also write it { }, which is shorter.
&gt; &gt; Not exactly sure what is the recommended way.
&gt; std::nullopt is preferred in WebKit.  It&apos;s more explicit.

Oh, okay. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477737</commentid>
    <comment_count>13</comment_count>
      <attachid>354594</attachid>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2018-11-12 14:41:13 -0800</bug_when>
    <thetext>Created attachment 354594
PATCH AGAIN</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477753</commentid>
    <comment_count>14</comment_count>
      <attachid>354594</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-12 15:18:51 -0800</bug_when>
    <thetext>Comment on attachment 354594
PATCH AGAIN

Clearing flags on attachment: 354594

Committed r238111: &lt;https://trac.webkit.org/changeset/238111&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477754</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-12 15:18:53 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477756</commentid>
    <comment_count>16</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-11-12 15:19:24 -0800</bug_when>
    <thetext>&lt;rdar://problem/46005812&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354405</attachid>
            <date>2018-11-09 16:17:13 -0800</date>
            <delta_ts>2018-11-09 16:33:01 -0800</delta_ts>
            <desc>PATCH</desc>
            <filename>191493.diff</filename>
            <type>text/plain</type>
            <size>27848</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyNWU0YTFhNmMzMi4uOTEyYTNjMzU3MjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MiBAQAorMjAxOC0xMS0wOSAgQmFzdWtlIFN1enVraSAgPGJhc3VrZS5zdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIEFkZCBBUEkgVGVzdCBmb3IgQ3VybCBjb29raWUgYmFj
a2VuZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
MTQ5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
ZmFjdG9yaW5nIGZvciBjb29raWUgYmFja2VuZCBpbnRlcmZhY2UuCisKKyAgICAgICAgVGVzdHM6
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jdXJsL0Nvb2tpZXMuY3BwCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9GaWxlU3lzdGVtLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJs
L0Nvb2tpZUphckN1cmxEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVzRm9y
U2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXJDdXJsRGF0YWJhc2U6OnNldENv
b2tpZXNGcm9tRE9NIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckN1cmxEYXRh
YmFzZTo6c2V0Q29va2llc0Zyb21IVFRQUmVzcG9uc2UgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyQ3VybERhdGFiYXNlOjpnZXRSYXdDb29raWVzIGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyREI6Om9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVK
YXJEQjo6Y2hlY2tTUUxpdGVSZXR1cm5Db2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUph
ckRCOjppc0VuYWJsZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OnNl
YXJjaENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OnNldENvb2tpZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXJEQjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphckRCOjpkZWxldGVDb29raWVJbnRlcm5hbCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29raWVKYXJEQjo6ZGVsZXRlQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpD
b29raWVKYXJEQjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVK
YXJEQjo6ZXhlY3V0ZVNpbXBsZVNxbCk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXJEQjo6
aXNFbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29v
a2llSmFyREIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llVXRpbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVVdGlsOjpwYXJzZUNvb2tpZUhlYWRlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZVV0aWwuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlU3lz
dGVtOjpnZW5lcmF0ZVRlbXBvcmFyeVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVN5c3Rl
bTo6b3BlblRlbXBvcmFyeUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVN5c3RlbTo6Y3Jl
YXRlVGVtcG9yYXJ5RGlyZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVTeXN0ZW06OmRl
bGV0ZU5vbkVtcHR5RGlyZWN0b3J5KToKKwogMjAxOC0xMS0wNyAgRG9uIE9sbXN0ZWFkICA8ZG9u
Lm9sbXN0ZWFkQHNvbnkuY29tPgogCiAgICAgICAgIFNpbXBsaWZ5IG1hY3JvcyBpbiBwbGF0Zm9y
bQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oCmluZGV4IGE1MmFiNGM3Y2Y0Li41YTMz
N2U1YzU0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaApAQCAtMTg3LDYgKzE4
NywxMSBAQCBXRUJDT1JFX0VYUE9SVCBOU1N0cmluZyAqY3JlYXRlVGVtcG9yYXJ5RGlyZWN0b3J5
KE5TU3RyaW5nICpkaXJlY3RvcnlQcmVmaXgpOwogV0VCQ09SRV9FWFBPUlQgYm9vbCBkZWxldGVO
b25FbXB0eURpcmVjdG9yeShjb25zdCBTdHJpbmcmKTsKICNlbmRpZgogCisjaWYgT1MoV0lORE9X
UykKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBjcmVhdGVUZW1wb3JhcnlEaXJlY3RvcnkoKTsKK1dF
QkNPUkVfRVhQT1JUIGJvb2wgZGVsZXRlTm9uRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJik7
CisjZW5kaWYKKwogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHJlYWxQYXRoKGNvbnN0IFN0cmluZyYp
OwogCiBjbGFzcyBNYXBwZWRGaWxlRGF0YSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybERhdGFiYXNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsRGF0YWJhc2UuY3BwCmlu
ZGV4IDVlODQ1NGFhNTRhLi45MDQwZmI2NGVmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmxEYXRhYmFzZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmxEYXRhYmFzZS5j
cHAKQEAgLTQ3LDE0ICs0NywxMyBAQCBzdGF0aWMgU3RyaW5nIGNvb2tpZXNGb3JTZXNzaW9uKGNv
bnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJgogICAgIGF1dG8g
c2VhcmNoSFRUUE9ubHkgPSAoZm9ySFRUUEhlYWRlciA/IHN0ZDo6bnVsbG9wdCA6IHN0ZDo6b3B0
aW9uYWw8Ym9vbD4ge2ZhbHNlfSk7CiAgICAgYXV0byBzZWN1cmUgPSB1cmwucHJvdG9jb2xJcygi
aHR0cHMiKSA/IHN0ZDo6bnVsbG9wdCA6IHN0ZDo6b3B0aW9uYWw8Ym9vbD4ge2ZhbHNlfTsKIAot
ICAgIFZlY3RvcjxDb29raWU+IHJlc3VsdHM7Ci0gICAgaWYgKGNvb2tpZUphckRCLnNlYXJjaENv
b2tpZXModXJsLnN0cmluZygpLCBzZWFyY2hIVFRQT25seSwgc2VjdXJlLCBzdGQ6Om51bGxvcHQs
IHJlc3VsdHMpKSB7Ci0gICAgICAgIGZvciAoYXV0byByZXN1bHQgOiByZXN1bHRzKSB7CisgICAg
aWYgKGF1dG8gcmVzdWx0ID0gY29va2llSmFyREIuc2VhcmNoQ29va2llcyh1cmwuc3RyaW5nKCks
IHNlYXJjaEhUVFBPbmx5LCBzZWN1cmUsIHN0ZDo6bnVsbG9wdCkpIHsKKyAgICAgICAgZm9yIChh
dXRvIGNvb2tpZSA6ICpyZXN1bHQpIHsKICAgICAgICAgICAgIGlmICghY29va2llcy5pc0VtcHR5
KCkpCiAgICAgICAgICAgICAgICAgY29va2llcy5hcHBlbmQoIjsgIik7Ci0gICAgICAgICAgICBj
b29raWVzLmFwcGVuZChyZXN1bHQubmFtZSk7CisgICAgICAgICAgICBjb29raWVzLmFwcGVuZChj
b29raWUubmFtZSk7CiAgICAgICAgICAgICBjb29raWVzLmFwcGVuZCgiPSIpOwotICAgICAgICAg
ICAgY29va2llcy5hcHBlbmQocmVzdWx0LnZhbHVlKTsKKyAgICAgICAgICAgIGNvb2tpZXMuYXBw
ZW5kKGNvb2tpZS52YWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGNvb2tpZXMu
dG9TdHJpbmcoKTsKQEAgLTY3LDEzICs2NiwxMyBAQCB2b2lkIENvb2tpZUphckN1cmxEYXRhYmFz
ZTo6c2V0Q29va2llc0Zyb21ET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaQog
ICAgIFVOVVNFRF9QQVJBTShmaXJzdFBhcnR5KTsKIAogICAgIENvb2tpZUphckRCJiBjb29raWVK
YXJEQiA9IHNlc3Npb24uY29va2llRGF0YWJhc2UoKTsKLSAgICBjb29raWVKYXJEQi5zZXRDb29r
aWUodXJsLnN0cmluZygpLCB2YWx1ZSwgdHJ1ZSk7CisgICAgY29va2llSmFyREIuc2V0Q29va2ll
KHVybC5zdHJpbmcoKSwgdmFsdWUsIENvb2tpZUphckRCOjpTb3VyY2U6OlNjcmlwdCk7CiB9CiAK
IHZvaWQgQ29va2llSmFyQ3VybERhdGFiYXNlOjpzZXRDb29raWVzRnJvbUhUVFBSZXNwb25zZShj
b25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIHZhbHVlKSBjb25zdAogewogICAgIENvb2tpZUphckRCJiBjb29raWVKYXJEQiA9
IHNlc3Npb24uY29va2llRGF0YWJhc2UoKTsKLSAgICBjb29raWVKYXJEQi5zZXRDb29raWUodXJs
LnN0cmluZygpLCB2YWx1ZSwgZmFsc2UpOworICAgIGNvb2tpZUphckRCLnNldENvb2tpZSh1cmwu
c3RyaW5nKCksIHZhbHVlLCBDb29raWVKYXJEQjo6U291cmNlOjpOZXR3b3JrKTsKIH0KIAogc3Rk
OjpwYWlyPFN0cmluZywgYm9vbD4gQ29va2llSmFyQ3VybERhdGFiYXNlOjpjb29raWVzRm9yRE9N
KGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBh
cnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1
aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRl
U2VjdXJlQ29va2llcykgY29uc3QKQEAgLTExMCw3ICsxMDksMTEgQEAgYm9vbCBDb29raWVKYXJD
dXJsRGF0YWJhc2U6OmdldFJhd0Nvb2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBz
ZXNzaW9uLAogICAgIFVOVVNFRF9QQVJBTShwYWdlSUQpOwogCiAgICAgQ29va2llSmFyREImIGNv
b2tpZUphckRCID0gc2Vzc2lvbi5jb29raWVEYXRhYmFzZSgpOwotICAgIHJldHVybiBjb29raWVK
YXJEQi5zZWFyY2hDb29raWVzKGZpcnN0UGFydHkuc3RyaW5nKCksIHN0ZDo6bnVsbG9wdCwgc3Rk
OjpudWxsb3B0LCBzdGQ6Om51bGxvcHQsIHJhd0Nvb2tpZXMpOworICAgIGlmIChhdXRvIGNvb2tp
ZXMgPSBjb29raWVKYXJEQi5zZWFyY2hDb29raWVzKGZpcnN0UGFydHkuc3RyaW5nKCksIHN0ZDo6
bnVsbG9wdCwgc3RkOjpudWxsb3B0LCBzdGQ6Om51bGxvcHQpKSB7CisgICAgICAgIHJhd0Nvb2tp
ZXMgPSBXVEZNb3ZlKCpjb29raWVzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBDb29raWVKYXJDdXJsRGF0YWJhc2U6OmRlbGV0ZUNv
b2tpZShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckRCLmNwcAppbmRleCA0MjA0OWVkNDdjOS4uNDU0
YTU0MjViOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9Db29raWVKYXJEQi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL0Nvb2tpZUphckRCLmNwcApAQCAtMTQ3LDE4ICsxNDcsMTcgQEAgYm9vbCBDb29raWVKYXJE
Qjo6b3BlbkRhdGFiYXNlKCkKIAogICAgIHZlcmlmeVNjaGVtYVZlcnNpb24oKTsKIAotICAgIGJv
b2wgZGF0YWJhc2VWYWxpZGl0eSA9IHRydWU7CiAgICAgaWYgKCFleGlzdHNEYXRhYmFzZUZpbGUg
fHwgIW1fZGF0YWJhc2UudGFibGVFeGlzdHMoIkNvb2tpZSIpKSB7Ci0gICAgICAgIGRhdGFiYXNl
VmFsaWRpdHkgJj0gKGV4ZWN1dGVTaW1wbGVTcWwoQ1JFQVRFX0NPT0tJRV9UQUJMRV9TUUwpID09
IFNRTElURV9ET05FKTsKLSAgICAgICAgZGF0YWJhc2VWYWxpZGl0eSAmPSAoZXhlY3V0ZVNpbXBs
ZVNxbChDUkVBVEVfRE9NQUlOX0lOREVYX1NRTCkgPT0gU1FMSVRFX0RPTkUpOwotICAgICAgICBk
YXRhYmFzZVZhbGlkaXR5ICY9IChleGVjdXRlU2ltcGxlU3FsKENSRUFURV9QQVRIX0lOREVYX1NR
TCkgPT0gU1FMSVRFX0RPTkUpOwotICAgIH0KKyAgICAgICAgYm9vbCBpc1ZhbGlkID0gZXhlY3V0
ZVNpbXBsZVNxbChDUkVBVEVfQ09PS0lFX1RBQkxFX1NRTCkKKyAgICAgICAgICAgICAgICAgICAg
JiYgZXhlY3V0ZVNpbXBsZVNxbChDUkVBVEVfRE9NQUlOX0lOREVYX1NRTCkKKyAgICAgICAgICAg
ICAgICAgICAgJiYgZXhlY3V0ZVNpbXBsZVNxbChDUkVBVEVfUEFUSF9JTkRFWF9TUUwpOwogCi0g
ICAgaWYgKCFkYXRhYmFzZVZhbGlkaXR5KSB7Ci0gICAgICAgIC8vIGdpdmUgdXAgY3JlYXRlIGRh
dGFiYXNlIGF0IHRoaXMgdGltZSAoYWxsIGNvb2tpZXMgb24gcmVxdWVzdC9yZXNwb25zZSBhcmUg
aWdub3JlZCkKLSAgICAgICAgbV9kYXRhYmFzZS5jbG9zZSgpOwotICAgICAgICBkZWxldGVBbGxE
YXRhYmFzZUZpbGVzKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFpc1Zh
bGlkKSB7CisgICAgICAgICAgICAvLyBnaXZlIHVwIGNyZWF0ZSBkYXRhYmFzZSBhdCB0aGlzIHRp
bWUgKGFsbCBjb29raWVzIG9uIHJlcXVlc3QvcmVzcG9uc2UgYXJlIGlnbm9yZWQpCisgICAgICAg
ICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7CisgICAgICAgICAgICBkZWxldGVBbGxEYXRhYmFzZUZp
bGVzKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICB9CiAKICAg
ICBtX2RhdGFiYXNlLnNldFN5bmNocm9ub3VzKFNRTGl0ZURhdGFiYXNlOjpTeW5jTm9ybWFsKTsK
QEAgLTI0NSwxMCArMjQ0LDEwIEBAIGJvb2wgQ29va2llSmFyREI6OmNoZWNrRGF0YWJhc2VDb3Jy
dXB0aW9uQW5kUmVtb3ZlSWZOZWVkZWQoKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBD
b29raWVKYXJEQjo6Y2hlY2tTUUxpdGVSZXR1cm5Db2RlKGludCBhY3R1YWwpCitib29sIENvb2tp
ZUphckRCOjpjaGVja1NRTGl0ZVJldHVybkNvZGUoaW50IGNvZGUpCiB7CiAgICAgaWYgKCFtX2Rl
dGVjdGVkRGF0YWJhc2VDb3JydXB0aW9uKSB7Ci0gICAgICAgIHN3aXRjaCAoYWN0dWFsKSB7Cisg
ICAgICAgIHN3aXRjaCAoY29kZSkgewogICAgICAgICBjYXNlIFNRTElURV9DT1JSVVBUOgogICAg
ICAgICBjYXNlIFNRTElURV9TQ0hFTUE6CiAgICAgICAgIGNhc2UgU1FMSVRFX0ZPUk1BVDoKQEAg
LTI1Nyw2ICsyNTYsNyBAQCB2b2lkIENvb2tpZUphckRCOjpjaGVja1NRTGl0ZVJldHVybkNvZGUo
aW50IGFjdHVhbCkKICAgICAgICAgICAgIG1fZGV0ZWN0ZWREYXRhYmFzZUNvcnJ1cHRpb24gPSB0
cnVlOwogICAgICAgICB9CiAgICAgfQorICAgIHJldHVybiBjb2RlID09IFNRTElURV9PSyB8fCBj
b2RlID09IFNRTElURV9ET05FIHx8IGNvZGUgPT0gU1FMSVRFX1JPVzsKIH0KIAogYm9vbCBDb29r
aWVKYXJEQjo6Y2hlY2tEYXRhYmFzZVZhbGlkaXR5KCkKQEAgLTMwNiw3ICszMDYsNyBAQCB2b2lk
IENvb2tpZUphckRCOjpkZWxldGVBbGxEYXRhYmFzZUZpbGVzKCkKICAgICBGaWxlU3lzdGVtOjpk
ZWxldGVGaWxlKG1fZGF0YWJhc2VQYXRoICsgIi13YWwiKTsKIH0KIAotYm9vbCBDb29raWVKYXJE
Qjo6aXNFbmFibGVkKCkKK2Jvb2wgQ29va2llSmFyREI6OmlzRW5hYmxlZCgpIGNvbnN0CiB7CiAg
ICAgaWYgKG1fZGF0YWJhc2VQYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMzE0LDE3ICszMTQsMTcgQEAgYm9vbCBDb29raWVKYXJEQjo6aXNFbmFibGVkKCkKICAgICBy
ZXR1cm4gbV9pc0VuYWJsZWQ7CiB9CiAKLWJvb2wgQ29va2llSmFyREI6OnNlYXJjaENvb2tpZXMo
Y29uc3QgU3RyaW5nJiByZXF1ZXN0VXJsLCBjb25zdCBzdGQ6Om9wdGlvbmFsPGJvb2w+JiBodHRw
T25seSwgY29uc3Qgc3RkOjpvcHRpb25hbDxib29sPiYgc2VjdXJlLCBjb25zdCBzdGQ6Om9wdGlv
bmFsPGJvb2w+JiBzZXNzaW9uLCBWZWN0b3I8Q29va2llPiYgcmVzdWx0cykKK3N0ZDo6b3B0aW9u
YWw8VmVjdG9yPENvb2tpZT4+IENvb2tpZUphckRCOjpzZWFyY2hDb29raWVzKGNvbnN0IFN0cmlu
ZyYgcmVxdWVzdFVybCwgY29uc3Qgc3RkOjpvcHRpb25hbDxib29sPiYgaHR0cE9ubHksIGNvbnN0
IHN0ZDo6b3B0aW9uYWw8Ym9vbD4mIHNlY3VyZSwgY29uc3Qgc3RkOjpvcHRpb25hbDxib29sPiYg
c2Vzc2lvbikKIHsKICAgICBpZiAoIWlzRW5hYmxlZCgpIHx8ICFtX2RhdGFiYXNlLmlzT3Blbigp
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAK
ICAgICBVUkwgcmVxdWVzdFVybE9iaih7IH0sIHJlcXVlc3RVcmwpOwogICAgIFN0cmluZyByZXF1
ZXN0SG9zdChyZXF1ZXN0VXJsT2JqLmhvc3QoKS50b1N0cmluZygpLmNvbnZlcnRUb0FTQ0lJTG93
ZXJjYXNlKCkpOwogICAgIFN0cmluZyByZXF1ZXN0UGF0aChyZXF1ZXN0VXJsT2JqLnBhdGgoKS5j
b252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpKTsKIAogICAgIGlmIChyZXF1ZXN0SG9zdC5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsK
IAogICAgIGlmIChyZXF1ZXN0UGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJlcXVlc3RQYXRoID0g
Ii8iOwpAQCAtMzQwLDcgKzM0MCw3IEBAIGJvb2wgQ29va2llSmFyREI6OnNlYXJjaENvb2tpZXMo
Y29uc3QgU3RyaW5nJiByZXF1ZXN0VXJsLCBjb25zdCBzdGQ6Om9wdGlvbmFsPGJvCiAKICAgICBh
dXRvIHBzdG10ID0gc3RkOjptYWtlX3VuaXF1ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2Us
IHNxbCk7CiAgICAgaWYgKCFwc3RtdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgcHN0bXQtPnByZXBhcmUoKTsKICAgICBwc3RtdC0+
YmluZEludCgxLCBodHRwT25seSA/ICpodHRwT25seSA6IC0xKTsKQEAgLTM3MCw5ICszNzAsOSBA
QCBib29sIENvb2tpZUphckRCOjpzZWFyY2hDb29raWVzKGNvbnN0IFN0cmluZyYgcmVxdWVzdFVy
bCwgY29uc3Qgc3RkOjpvcHRpb25hbDxibwogICAgIH0KIAogICAgIGlmICghcHN0bXQpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHJl
c3VsdHMuY2xlYXIoKTsKKyAgICBWZWN0b3I8Q29va2llPiByZXN1bHRzOwogCiAgICAgd2hpbGUg
KHBzdG10LT5zdGVwKCkgPT0gU1FMSVRFX1JPVykgewogCkBAIC00MTIsNyArNDEyLDcgQEAgYm9v
bCBDb29raWVKYXJEQjo6c2VhcmNoQ29va2llcyhjb25zdCBTdHJpbmcmIHJlcXVlc3RVcmwsIGNv
bnN0IHN0ZDo6b3B0aW9uYWw8Ym8KICAgICB9CiAgICAgcHN0bXQtPmZpbmFsaXplKCk7CiAKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gcmVzdWx0czsKIH0KIAogYm9vbCBDb29raWVKYXJE
Qjo6aGFzSHR0cE9ubHlDb29raWUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRv
bWFpbiwgY29uc3QgU3RyaW5nJiBwYXRoKQpAQCAtNDI4LDc1ICs0MjgsNjkgQEAgYm9vbCBDb29r
aWVKYXJEQjo6aGFzSHR0cE9ubHlDb29raWUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIGRvbWFpbiwgY28KIH0KIAogCi1pbnQgQ29va2llSmFyREI6OnNldENvb2tpZShjb25zdCBD
b29raWUmIGNvb2tpZSkKK2Jvb2wgQ29va2llSmFyREI6OnNldENvb2tpZShjb25zdCBDb29raWUm
IGNvb2tpZSkKIHsKLSAgICBpbnQgcmV0ID0gMDsKICAgICBpZiAoIWNvb2tpZS5zZXNzaW9uICYm
IE1vbm90b25pY1RpbWU6OmZyb21SYXdTZWNvbmRzKGNvb2tpZS5leHBpcmVzKSA8PSBNb25vdG9u
aWNUaW1lOjpub3coKSkKLSAgICAgICAgcmV0ID0gZGVsZXRlQ29va2llSW50ZXJuYWwoY29va2ll
Lm5hbWUsIGNvb2tpZS5kb21haW4sIGNvb2tpZS5wYXRoKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
U1FMaXRlU3RhdGVtZW50KiBzdGF0ZW1lbnQgPSBnZXRQcmVwYXJlU3RhdGVtZW50KFNFVF9DT09L
SUVfU1FMKTsKLSAgICAgICAgQVNTRVJUKHN0YXRlbWVudCk7Ci0KLSAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBoYXZlIHNvbWUgZXZpY3Rpb24gcG9saWN5IHdoZW4gYSBkb21haW4gZ29lcyBv
dmVyIE1BWF9DT09LSUVfUEVSX0RPTUFJTgorICAgICAgICByZXR1cm4gZGVsZXRlQ29va2llSW50
ZXJuYWwoY29va2llLm5hbWUsIGNvb2tpZS5kb21haW4sIGNvb2tpZS5wYXRoKTsKIAotICAgICAg
ICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGNvb2tpZS5uYW1lKTsKLSAgICAgICAgc3RhdGVtZW50
LT5iaW5kVGV4dCgyLCBjb29raWUudmFsdWUpOwotICAgICAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0
KDMsIGNvb2tpZS5kb21haW4pOwotICAgICAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDQsIGNvb2tp
ZS5wYXRoKTsKLSAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoNSwgY29va2llLnNlc3Npb24g
PyAwIDogc3RhdGljX2Nhc3Q8aW50NjRfdD4oY29va2llLmV4cGlyZXMpKTsKLSAgICAgICAgc3Rh
dGVtZW50LT5iaW5kSW50KDYsIGNvb2tpZS52YWx1ZS5sZW5ndGgoKSk7Ci0gICAgICAgIHN0YXRl
bWVudC0+YmluZEludCg3LCBjb29raWUuc2Vzc2lvbiA/IDEgOiAwKTsKLSAgICAgICAgc3RhdGVt
ZW50LT5iaW5kSW50KDgsIGNvb2tpZS5odHRwT25seSA/IDEgOiAwKTsKLSAgICAgICAgc3RhdGVt
ZW50LT5iaW5kSW50KDksIGNvb2tpZS5zZWN1cmUgPyAxIDogMCk7Ci0KLSAgICAgICAgcmV0ID0g
c3RhdGVtZW50LT5zdGVwKCk7Ci0gICAgfQotICAgIGNoZWNrU1FMaXRlUmV0dXJuQ29kZShyZXQp
OwotICAgIEFTU0VSVChyZXQgPT0gU1FMSVRFX0RPTkUpOworICAgIFNRTGl0ZVN0YXRlbWVudCog
c3RhdGVtZW50ID0gZ2V0UHJlcGFyZVN0YXRlbWVudChTRVRfQ09PS0lFX1NRTCk7CisgICAgQVNT
RVJUKHN0YXRlbWVudCk7CiAKLSAgICByZXR1cm4gcmV0OworICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgaGF2ZSBzb21lIGV2aWN0aW9uIHBvbGljeSB3aGVuIGEgZG9tYWluIGdvZXMgb3ZlciBNQVhf
Q09PS0lFX1BFUl9ET01BSU4KKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGNvb2tpZS5uYW1l
KTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGNvb2tpZS52YWx1ZSk7CisgICAgc3RhdGVt
ZW50LT5iaW5kVGV4dCgzLCBjb29raWUuZG9tYWluKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0
KDQsIGNvb2tpZS5wYXRoKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRJbnQ2NCg1LCBjb29raWUuc2Vz
c2lvbiA/IDAgOiBzdGF0aWNfY2FzdDxpbnQ2NF90Pihjb29raWUuZXhwaXJlcykpOworICAgIHN0
YXRlbWVudC0+YmluZEludCg2LCBjb29raWUudmFsdWUubGVuZ3RoKCkpOworICAgIHN0YXRlbWVu
dC0+YmluZEludCg3LCBjb29raWUuc2Vzc2lvbiA/IDEgOiAwKTsKKyAgICBzdGF0ZW1lbnQtPmJp
bmRJbnQoOCwgY29va2llLmh0dHBPbmx5ID8gMSA6IDApOworICAgIHN0YXRlbWVudC0+YmluZElu
dCg5LCBjb29raWUuc2VjdXJlID8gMSA6IDApOworICAgIHJldHVybiBjaGVja1NRTGl0ZVJldHVy
bkNvZGUoc3RhdGVtZW50LT5zdGVwKCkpOwogfQogCi1pbnQgQ29va2llSmFyREI6OnNldENvb2tp
ZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWUsIGJvb2wgZnJvbUphdmFT
Y3JpcHQpCitib29sIENvb2tpZUphckRCOjpzZXRDb29raWUoY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IFN0cmluZyYgYm9keSwgQ29va2llSmFyREI6OlNvdXJjZSBzb3VyY2UpCiB7CiAgICAgaWYg
KCFpc0VuYWJsZWQoKSB8fCAhbV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgcmV0dXJuIC0x
OworICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAodXJsLmlzRW1wdHkoKSB8fCBjb29r
aWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKHVybC5pc0VtcHR5KCkg
fHwgYm9keS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFVSTCB1cmxP
YmooeyB9LCB1cmwpOwogICAgIFN0cmluZyBob3N0KHVybE9iai5ob3N0KCkudG9TdHJpbmcoKSk7
CiAgICAgU3RyaW5nIHBhdGgodXJsT2JqLnBhdGgoKSk7CiAKLSAgICBDb29raWUgY29va2llT2Jq
OwotICAgIGlmICghQ29va2llVXRpbDo6cGFyc2VDb29raWVIZWFkZXIoY29va2llLCBob3N0LCBj
b29raWVPYmopKQotICAgICAgICByZXR1cm4gLTE7CisgICAgYXV0byBjb29raWUgPSBDb29raWVV
dGlsOjpwYXJzZUNvb2tpZUhlYWRlcihib2R5LCBob3N0KTsKKyAgICBpZiAoIWNvb2tpZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGNvb2tpZU9iai5kb21haW4uaXNFbXB0eSgp
KQotICAgICAgICBjb29raWVPYmouZG9tYWluID0gU3RyaW5nKGhvc3QpOworICAgIGlmIChjb29r
aWUtPmRvbWFpbi5pc0VtcHR5KCkpCisgICAgICAgIGNvb2tpZS0+ZG9tYWluID0gU3RyaW5nKGhv
c3QpOwogCi0gICAgaWYgKGNvb2tpZU9iai5wYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgY29va2ll
T2JqLnBhdGggPSBDb29raWVVdGlsOjpkZWZhdWx0UGF0aEZvclVSTCh1cmxPYmopOworICAgIGlm
IChjb29raWUtPnBhdGguaXNFbXB0eSgpKQorICAgICAgICBjb29raWUtPnBhdGggPSBDb29raWVV
dGlsOjpkZWZhdWx0UGF0aEZvclVSTCh1cmxPYmopOwogCiAjaWYgRU5BQkxFKFBVQkxJQ19TVUZG
SVhfTElTVCkKLSAgICBpZiAoaXNQdWJsaWNTdWZmaXgoY29va2llT2JqLmRvbWFpbikpCi0gICAg
ICAgIHJldHVybiAtMTsKKyAgICBpZiAoaXNQdWJsaWNTdWZmaXgoY29va2llLT5kb21haW4pKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAotICAgIGlmIChmcm9tSmF2YVNjcmlwdCAm
JiBjb29raWVPYmouaHR0cE9ubHkpCi0gICAgICAgIHJldHVybiAtMTsKKyAgICBib29sIGZyb21K
YXZhU2NyaXB0ID0gc291cmNlID09IENvb2tpZUphckRCOjpTb3VyY2U6OlNjcmlwdDsKKworICAg
IGlmIChmcm9tSmF2YVNjcmlwdCAmJiBjb29raWUtPmh0dHBPbmx5KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBpZiAoZnJvbUphdmFTY3JpcHQgJiYgaGFzSHR0cE9ubHlDb29raWUoY29v
a2llT2JqLm5hbWUsIGNvb2tpZU9iai5kb21haW4sIGNvb2tpZU9iai5wYXRoKSkKLSAgICAgICAg
cmV0dXJuIC0xOworICAgIGlmIChmcm9tSmF2YVNjcmlwdCAmJiBoYXNIdHRwT25seUNvb2tpZShj
b29raWUtPm5hbWUsIGNvb2tpZS0+ZG9tYWluLCBjb29raWUtPnBhdGgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gc2V0Q29va2llKGNvb2tpZU9iaik7CisgICAgcmV0dXJu
IHNldENvb2tpZSgqY29va2llKTsKIH0KIAotaW50IENvb2tpZUphckRCOjpkZWxldGVDb29raWUo
Y29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSkKK2Jvb2wgQ29va2llSmFyREI6
OmRlbGV0ZUNvb2tpZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewog
ICAgIGlmICghaXNFbmFibGVkKCkgfHwgIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIHJl
dHVybiAtMTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgU3RyaW5nIHVybENvcGllZCA9
IFN0cmluZyh1cmwpOwogICAgIGlmICh1cmxDb3BpZWQuc3RhcnRzV2l0aCgnLicpKQpAQCAtNTA2
LDE3ICs1MDAsMTMgQEAgaW50IENvb2tpZUphckRCOjpkZWxldGVDb29raWUoY29uc3QgU3RyaW5n
JiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICBpZiAodXJsT2JqLmlzVmFsaWQoKSkgewog
ICAgICAgICBTdHJpbmcgaG9zdFN0cih1cmxPYmouaG9zdCgpLnRvU3RyaW5nKCkpOwogICAgICAg
ICBTdHJpbmcgcGF0aFN0cih1cmxPYmoucGF0aCgpKTsKLSAgICAgICAgaW50IHJldCA9IGRlbGV0
ZUNvb2tpZUludGVybmFsKG5hbWUsIGhvc3RTdHIsIHBhdGhTdHIpOwotICAgICAgICBjaGVja1NR
TGl0ZVJldHVybkNvZGUocmV0KTsKLSAgICAgICAgQVNTRVJUKHJldCA9PSBTUUxJVEVfRE9ORSk7
Ci0KLSAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgcmV0dXJuIGRlbGV0ZUNvb2tpZUludGVy
bmFsKG5hbWUsIGhvc3RTdHIsIHBhdGhTdHIpOwogICAgIH0KIAotICAgIHJldHVybiAtMTsKKyAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLWludCBDb29raWVKYXJEQjo6ZGVsZXRlQ29va2llSW50ZXJu
YWwoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5n
JiBwYXRoKQorYm9vbCBDb29raWVKYXJEQjo6ZGVsZXRlQ29va2llSW50ZXJuYWwoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBwYXRoKQogewog
ICAgIFNRTGl0ZVN0YXRlbWVudCogc3RhdGVtZW50OwogICAgIGlmICghcGF0aC5pc0VtcHR5KCkp
IHsKQEAgLTUzMiwyMCArNTIyLDIwIEBAIGludCBDb29raWVKYXJEQjo6ZGVsZXRlQ29va2llSW50
ZXJuYWwoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwKICAgICAgICAg
c3RhdGVtZW50LT5iaW5kVGV4dCgyLCBkb21haW4pOwogICAgIH0KIAotICAgIHJldHVybiBzdGF0
ZW1lbnQtPnN0ZXAoKTsKKyAgICByZXR1cm4gY2hlY2tTUUxpdGVSZXR1cm5Db2RlKHN0YXRlbWVu
dC0+c3RlcCgpKTsKIH0KIAotaW50IENvb2tpZUphckRCOjpkZWxldGVDb29raWVzKGNvbnN0IFN0
cmluZyYpCitib29sIENvb2tpZUphckRCOjpkZWxldGVDb29raWVzKGNvbnN0IFN0cmluZyYpCiB7
CiAgICAgLy8gTk9UIElNUExFTUVOVEVECiAgICAgLy8gVE9ETzogdGhpcyBmdW5jdGlvbiB3aWxs
IGJlIGNhbGxlZCBpZiBhcHBsaWNhdGlvbiBjYWxscyBXS0Nvb2tpZU1hbmFnZXJEZWxldGVDb29r
aWVzRm9ySG9zdG5hbWUoKSBpbiBXS0Nvb2tpZU1hbmFnZXIuaC4KLSAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLWludCBDb29raWVKYXJEQjo6ZGVsZXRlQWxsQ29va2llcygp
Citib29sIENvb2tpZUphckRCOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICBpZiAoIWlzRW5h
YmxlZCgpIHx8ICFtX2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAgICByZXR1cm4gLTE7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIHJldHVybiBleGVjdXRlU2ltcGxlU3FsKERFTEVURV9B
TExfQ09PS0lFX1NRTCk7CiB9CkBAIC01NjYsMTcgKzU1NiwxOCBAQCBTUUxpdGVTdGF0ZW1lbnQq
IENvb2tpZUphckRCOjpnZXRQcmVwYXJlU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3FsKQogICAg
IHJldHVybiBzdGF0ZW1lbnQ7CiB9CiAKLWludCBDb29raWVKYXJEQjo6ZXhlY3V0ZVNpbXBsZVNx
bChjb25zdCBTdHJpbmcmIHNxbCwgYm9vbCBpZ25vcmVFcnJvcikKK2Jvb2wgQ29va2llSmFyREI6
OmV4ZWN1dGVTaW1wbGVTcWwoY29uc3QgU3RyaW5nJiBzcWwpCiB7CiAgICAgU1FMaXRlU3RhdGVt
ZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCBzcWwpOwogICAgIGludCByZXQgPSBzdGF0ZW1lbnQu
cHJlcGFyZUFuZFN0ZXAoKTsKICAgICBzdGF0ZW1lbnQuZmluYWxpemUoKTsKIAotICAgIGNoZWNr
U1FMaXRlUmV0dXJuQ29kZShyZXQpOwotICAgIGlmIChyZXQgIT0gU1FMSVRFX09LICYmIHJldCAh
PSBTUUxJVEVfRE9ORSAmJiByZXQgIT0gU1FMSVRFX1JPVyAmJiAhaWdub3JlRXJyb3IpCisgICAg
aWYgKCFjaGVja1NRTGl0ZVJldHVybkNvZGUocmV0KSkgewogICAgICAgICBMT0dfRVJST1IoIkZh
aWxlZCB0byBleGVjdXRlICVzIGVycm9yOiAlcyIsIHNxbC5hc2NpaSgpLmRhdGEoKSwgbV9kYXRh
YmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAg
ICByZXR1cm4gcmV0OworICAgIHJldHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29v
a2llSmFyREIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVK
YXJEQi5oCmluZGV4IDY5NWI5NjdhMTIyLi4wYWQ4ZmNhOGE1ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckRCLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckRCLmgKQEAgLTQwLDM0ICs0
MCwzOCBAQCBjbGFzcyBDb29raWVKYXJEQiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29v
a2llSmFyREIpOwogCiBwdWJsaWM6CisgICAgZW51bSBjbGFzcyBTb3VyY2UgOiB1aW50OF90IHsK
KyAgICAgICAgTmV0d29yaywKKyAgICAgICAgU2NyaXB0CisgICAgfTsKICAgICB2b2lkIG9wZW4o
KTsKLSAgICBib29sIGlzRW5hYmxlZCgpOworICAgIGJvb2wgaXNFbmFibGVkKCkgY29uc3Q7CiAg
ICAgdm9pZCBzZXRFbmFibGVkKGJvb2wpOwogCi0gICAgYm9vbCBzZWFyY2hDb29raWVzKGNvbnN0
IFN0cmluZyYgcmVxdWVzdFVybCwgY29uc3Qgc3RkOjpvcHRpb25hbDxib29sPiYgaHR0cE9ubHks
IGNvbnN0IHN0ZDo6b3B0aW9uYWw8Ym9vbD4mIHNlY3VyZSwgY29uc3Qgc3RkOjpvcHRpb25hbDxi
b29sPiYgc2Vzc2lvbiwgVmVjdG9yPENvb2tpZT4mIHJlc3VsdHMpOwotICAgIGludCBzZXRDb29r
aWUoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llLCBib29sIGZyb21KYXZh
U2NyaXB0KTsKLSAgICBpbnQgc2V0Q29va2llKGNvbnN0IENvb2tpZSYpOworICAgIHN0ZDo6b3B0
aW9uYWw8VmVjdG9yPENvb2tpZT4+IHNlYXJjaENvb2tpZXMoY29uc3QgU3RyaW5nJiByZXF1ZXN0
VXJsLCBjb25zdCBzdGQ6Om9wdGlvbmFsPGJvb2w+JiBodHRwT25seSwgY29uc3Qgc3RkOjpvcHRp
b25hbDxib29sPiYgc2VjdXJlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPGJvb2w+JiBzZXNzaW9uKTsK
KyAgICBib29sIHNldENvb2tpZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjb29r
aWUsIFNvdXJjZSk7CisgICAgYm9vbCBzZXRDb29raWUoY29uc3QgQ29va2llJik7CiAKLSAgICBp
bnQgZGVsZXRlQ29va2llKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUpOwot
ICAgIGludCBkZWxldGVDb29raWVzKGNvbnN0IFN0cmluZyYgdXJsKTsKLSAgICBpbnQgZGVsZXRl
QWxsQ29va2llcygpOworICAgIGJvb2wgZGVsZXRlQ29va2llKGNvbnN0IFN0cmluZyYgdXJsLCBj
b25zdCBTdHJpbmcmIG5hbWUpOworICAgIGJvb2wgZGVsZXRlQ29va2llcyhjb25zdCBTdHJpbmcm
IHVybCk7CisgICAgYm9vbCBkZWxldGVBbGxDb29raWVzKCk7CiAKICAgICBXRUJDT1JFX0VYUE9S
VCBDb29raWVKYXJEQihjb25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCk7CiAgICAgV0VCQ09SRV9F
WFBPUlQgfkNvb2tpZUphckRCKCk7CiAKIHByaXZhdGU6CiAKLSAgICBib29sIG1faXNFbmFibGVk
IHt0cnVlfTsKKyAgICBib29sIG1faXNFbmFibGVkIHsgdHJ1ZSB9OwogICAgIFN0cmluZyBtX2Rh
dGFiYXNlUGF0aDsKIAotICAgIGJvb2wgbV9kZXRlY3RlZERhdGFiYXNlQ29ycnVwdGlvbiB7ZmFs
c2V9OworICAgIGJvb2wgbV9kZXRlY3RlZERhdGFiYXNlQ29ycnVwdGlvbiB7IGZhbHNlIH07CiAK
ICAgICBib29sIGlzT25NZW1vcnkoKSBjb25zdCB7IHJldHVybiAobV9kYXRhYmFzZVBhdGggPT0g
IjptZW1vcnk6Iik7IH07CiAKICAgICBib29sIG9wZW5EYXRhYmFzZSgpOwogICAgIHZvaWQgY2xv
c2VEYXRhYmFzZSgpOwogCi0gICAgdm9pZCBjaGVja1NRTGl0ZVJldHVybkNvZGUoaW50IGFjdHVh
bCk7CisgICAgYm9vbCBjaGVja1NRTGl0ZVJldHVybkNvZGUoaW50KTsKICAgICB2b2lkIGZsYWdE
YXRhYmFzZUNvcnJ1cHRpb24oKTsKICAgICBib29sIGNoZWNrRGF0YWJhc2VDb3JydXB0aW9uQW5k
UmVtb3ZlSWZOZWVkZWQoKTsKICAgICBTdHJpbmcgZ2V0Q29ycnVwdGlvbk1hcmtlclBhdGgoKSBj
b25zdDsKQEAgLTc4LDExICs4MiwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgdmVyaWZ5U2NoZW1h
VmVyc2lvbigpOwogICAgIHZvaWQgZGVsZXRlQWxsVGFibGVzKCk7CiAKLSAgICB2b2lkIGNyZWF0
ZVByZXBhcmVTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBzcWwpOwotICAgIFNRTGl0ZVN0YXRlbWVu
dCogZ2V0UHJlcGFyZVN0YXRlbWVudChjb25zdCBTdHJpbmcmIHNxbCk7Ci0gICAgaW50IGV4ZWN1
dGVTaW1wbGVTcWwoY29uc3QgU3RyaW5nJiBzcWwsIGJvb2wgaWdub3JlRXJyb3IgPSBmYWxzZSk7
CisgICAgdm9pZCBjcmVhdGVQcmVwYXJlU3RhdGVtZW50KGNvbnN0IFN0cmluZyYpOworICAgIFNR
TGl0ZVN0YXRlbWVudCogZ2V0UHJlcGFyZVN0YXRlbWVudChjb25zdCBTdHJpbmcmKTsKKyAgICBi
b29sIGV4ZWN1dGVTaW1wbGVTcWwoY29uc3QgU3RyaW5nJik7CiAKLSAgICBpbnQgZGVsZXRlQ29v
a2llSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29u
c3QgU3RyaW5nJiBwYXRoKTsKKyAgICBib29sIGRlbGV0ZUNvb2tpZUludGVybmFsKGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYgcGF0aCk7CiAg
ICAgYm9vbCBoYXNIdHRwT25seUNvb2tpZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIHBhdGgpOwogCiAgICAgU1FMaXRlRGF0YWJhc2UgbV9k
YXRhYmFzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9Db29raWVVdGlsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
b29raWVVdGlsLmNwcAppbmRleCBjZjU1ODg0ODI2Zi4uM2FhNzdhODkyZDQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVVdGlsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llVXRpbC5jcHAKQEAg
LTE0MSwxMCArMTQxLDEwIEBAIHN0YXRpYyB2b2lkIHBhcnNlQ29va2llQXR0cmlidXRlcyhjb25z
dCBTdHJpbmcmIGF0dHJpYnV0ZSwgY29uc3QgU3RyaW5nJiBkb21haW4sCiAgICAgfQogfQogCi1i
b29sIHBhcnNlQ29va2llSGVhZGVyKGNvbnN0IFN0cmluZyYgY29va2llTGluZSwgY29uc3QgU3Ry
aW5nJiBkb21haW4sIENvb2tpZSYgcmVzdWx0KQorc3RkOjpvcHRpb25hbDxDb29raWU+IHBhcnNl
Q29va2llSGVhZGVyKGNvbnN0IFN0cmluZyYgY29va2llTGluZSwgY29uc3QgU3RyaW5nJiBkb21h
aW4pCiB7CiAgICAgaWYgKGNvb2tpZUxpbmUubGVuZ3RoKCkgPj0gTUFYX0NPT0tJRV9MSU5FKQot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKICAg
ICAvLyBUaGlzIEFsZ29yaXRobSBpcyBiYXNlZCBvbiB0aGUgYWxnb3JpdGhtIGRlZmluZWQgaW4g
UkZDIDYyNjUgNS4yIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2MjY1I3NlY3Rpb24t
NS4yLwogCkBAIC0xNjUsMTYgKzE2NSwxNyBAQCBib29sIHBhcnNlQ29va2llSGVhZGVyKGNvbnN0
IFN0cmluZyYgY29va2llTGluZSwgY29uc3QgU3RyaW5nJiBkb21haW4sIENvb2tpZSYgcgogICAg
ICAgICBjb29raWVWYWx1ZSA9IGNvb2tpZVBhaXIuc3Vic3RyaW5nKGFzc2lnbm1lbnRQb3NpdGlv
biArIDEpOwogICAgIH0KIAotICAgIHJlc3VsdC5uYW1lID0gY29va2llTmFtZS5zdHJpcFdoaXRl
U3BhY2UoKTsKLSAgICByZXN1bHQudmFsdWUgPSBjb29raWVWYWx1ZS5zdHJpcFdoaXRlU3BhY2Uo
KTsKKyAgICBDb29raWUgY29va2llOworICAgIGNvb2tpZS5uYW1lID0gY29va2llTmFtZS5zdHJp
cFdoaXRlU3BhY2UoKTsKKyAgICBjb29raWUudmFsdWUgPSBjb29raWVWYWx1ZS5zdHJpcFdoaXRl
U3BhY2UoKTsKIAogICAgIGJvb2wgaGFzTWF4QWdlID0gZmFsc2U7Ci0gICAgcmVzdWx0LnNlc3Np
b24gPSB0cnVlOworICAgIGNvb2tpZS5zZXNzaW9uID0gdHJ1ZTsKIAogICAgIGZvciAoYXV0byBh
dHRyaWJ1dGUgOiBjb29raWVMaW5lLnNwbGl0QWxsb3dpbmdFbXB0eUVudHJpZXMoJzsnKSkKLSAg
ICAgICAgcGFyc2VDb29raWVBdHRyaWJ1dGVzKGF0dHJpYnV0ZSwgZG9tYWluLCBoYXNNYXhBZ2Us
IHJlc3VsdCk7CisgICAgICAgIHBhcnNlQ29va2llQXR0cmlidXRlcyhhdHRyaWJ1dGUsIGRvbWFp
biwgaGFzTWF4QWdlLCBjb29raWUpOwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGNv
b2tpZTsKIH0KIAogU3RyaW5nIGRlZmF1bHRQYXRoRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZVV0aWwu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVVdGlsLmgKaW5k
ZXggYTg5YzlhYjdiOTYuLjQ5MGQzNjJiYmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llVXRpbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVVdGlsLmgKQEAgLTM0LDkgKzM0LDkgQEAgc3RydWN0
IENvb2tpZTsKIAogbmFtZXNwYWNlIENvb2tpZVV0aWwgewogCi1ib29sIHBhcnNlQ29va2llSGVh
ZGVyKGNvbnN0IFN0cmluZyYgY29va2llTGluZSwgY29uc3QgU3RyaW5nJiBkb21haW4sIENvb2tp
ZSYgcmVzdWx0KTsKK3N0ZDo6b3B0aW9uYWw8Q29va2llPiBwYXJzZUNvb2tpZUhlYWRlcihjb25z
dCBTdHJpbmcmIGNvb2tpZUxpbmUsIGNvbnN0IFN0cmluZyYgZG9tYWluKTsKIAotYm9vbCBpc0lQ
QWRkcmVzcyhjb25zdCBTdHJpbmcmIGhvc3RuYW1lKTsKK2Jvb2wgaXNJUEFkZHJlc3MoY29uc3Qg
U3RyaW5nJik7CiAKIGJvb2wgZG9tYWluTWF0Y2goY29uc3QgU3RyaW5nJiBjb29raWVEb21haW4s
IGNvbnN0IFN0cmluZyYgaG9zdCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9G
aWxlU3lzdGVtV2luLmNwcAppbmRleCA1NDM2YTI2YWQ1MS4uNzhkNTZlNzk1ZDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKQEAgLTM3NiwxMCAr
Mzc2LDggQEAgc3RhdGljIFN0cmluZyBjYWNoZWRTdG9yYWdlRGlyZWN0b3J5KERXT1JEIHBhdGhJ
ZGVudGlmaWVyKQogICAgIHJldHVybiBkaXJlY3Rvcnk7CiB9CiAKLVN0cmluZyBvcGVuVGVtcG9y
YXJ5RmlsZShjb25zdCBTdHJpbmcmLCBQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKK3N0YXRp
YyBTdHJpbmcgZ2VuZXJhdGVUZW1wb3JhcnlQYXRoKGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3Qg
U3RyaW5nJik+JiBhY3Rpb24pCiB7Ci0gICAgaGFuZGxlID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7
Ci0KICAgICB3Y2hhcl90IHRlbXBQYXRoW01BWF9QQVRIXTsKICAgICBpbnQgdGVtcFBhdGhMZW5n
dGggPSA6OkdldFRlbXBQYXRoVyhXVEZfQVJSQVlfTEVOR1RIKHRlbXBQYXRoKSwgdGVtcFBhdGgp
OwogICAgIGlmICh0ZW1wUGF0aExlbmd0aCA8PSAwIHx8IHRlbXBQYXRoTGVuZ3RoID4gV1RGX0FS
UkFZX0xFTkdUSCh0ZW1wUGF0aCkpCkBAIC00MDIsMTAgKzQwMCwyMSBAQCBTdHJpbmcgb3BlblRl
bXBvcmFyeUZpbGUoY29uc3QgU3RyaW5nJiwgUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCiAg
ICAgICAgIHByb3Bvc2VkUGF0aCA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChudWxsVGVybWlu
YXRlZFdDaGFyVG9TdHJpbmcodGVtcFBhdGgpLCBudWxsVGVybWluYXRlZFdDaGFyVG9TdHJpbmco
dGVtcEZpbGUpKTsKICAgICAgICAgaWYgKHByb3Bvc2VkUGF0aC5pc0VtcHR5KCkpCiAgICAgICAg
ICAgICBicmVhazsKKyAgICB9IHdoaWxlICghYWN0aW9uKHByb3Bvc2VkUGF0aCkpOworCisgICAg
cmV0dXJuIHByb3Bvc2VkUGF0aDsKK30KKworU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0
IFN0cmluZyYsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQoreworICAgIGhhbmRsZSA9IElO
VkFMSURfSEFORExFX1ZBTFVFOwogCisgICAgU3RyaW5nIHByb3Bvc2VkUGF0aCA9IGdlbmVyYXRl
VGVtcG9yYXJ5UGF0aChbJmhhbmRsZV0oY29uc3QgU3RyaW5nJiBwcm9wb3NlZFBhdGgpIHsKICAg
ICAgICAgLy8gdXNlIENSRUFURV9ORVcgdG8gYXZvaWQgb3ZlcndyaXRpbmcgYW4gZXhpc3Rpbmcg
ZmlsZSB3aXRoIHRoZSBzYW1lIG5hbWUKICAgICAgICAgaGFuZGxlID0gOjpDcmVhdGVGaWxlVyhz
dHJpbmdUb051bGxUZXJtaW5hdGVkV0NoYXIocHJvcG9zZWRQYXRoKS5kYXRhKCksIEdFTkVSSUNf
UkVBRCB8IEdFTkVSSUNfV1JJVEUsIDAsIDAsIENSRUFURV9ORVcsIEZJTEVfQVRUUklCVVRFX05P
Uk1BTCwgMCk7Ci0gICAgfSB3aGlsZSAoIWlzSGFuZGxlVmFsaWQoaGFuZGxlKSAmJiBHZXRMYXN0
RXJyb3IoKSA9PSBFUlJPUl9BTFJFQURZX0VYSVNUUyk7CisKKyAgICAgICAgcmV0dXJuIGlzSGFu
ZGxlVmFsaWQoaGFuZGxlKSB8fCBHZXRMYXN0RXJyb3IoKSA9PSBFUlJPUl9BTFJFQURZX0VYSVNU
UzsKKyAgICB9KTsKIAogICAgIGlmICghaXNIYW5kbGVWYWxpZChoYW5kbGUpKQogICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CkBAIC01NTEsNSArNTYwLDI3IEBAIFN0cmluZyByZWFsUGF0aChjb25z
dCBTdHJpbmcmIGZpbGVQYXRoKQogICAgIHJldHVybiBnZXRGaW5hbFBhdGhOYW1lKGZpbGVQYXRo
KTsKIH0KIAorU3RyaW5nIGNyZWF0ZVRlbXBvcmFyeURpcmVjdG9yeSgpCit7CisgICAgcmV0dXJu
IGdlbmVyYXRlVGVtcG9yYXJ5UGF0aChbXShjb25zdCBTdHJpbmcmIHByb3Bvc2VkUGF0aCkgewor
ICAgICAgICByZXR1cm4gbWFrZUFsbERpcmVjdG9yaWVzKHByb3Bvc2VkUGF0aCk7CisgICAgfSk7
Cit9CisKK2Jvb2wgZGVsZXRlTm9uRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBkaXJlY3Rv
cnlQYXRoKQoreworICAgIFNIRklMRU9QU1RSVUNUIGRlbGV0ZU9wZXJhdGlvbiA9IHsKKyAgICAg
ICAgbnVsbHB0ciwKKyAgICAgICAgRk9fREVMRVRFLAorICAgICAgICBzdHJpbmdUb051bGxUZXJt
aW5hdGVkV0NoYXIoZGlyZWN0b3J5UGF0aCkuZGF0YSgpLAorICAgICAgICBMIiIsCisgICAgICAg
IEZPRl9OT0NPTkZJUk1BVElPTiB8IEZPRl9OT0VSUk9SVUkgfCBGT0ZfU0lMRU5ULAorICAgICAg
ICBmYWxzZSwKKyAgICAgICAgMCwKKyAgICAgICAgTCIiCisgICAgfTsKKyAgICByZXR1cm4gIVNI
RmlsZU9wZXJhdGlvbigmZGVsZXRlT3BlcmF0aW9uKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgRmls
ZVN5c3RlbQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdl
TG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDJiNmM3NzUzNDA0Li4xOTZkOWU2MmIyMSAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE1IEBACisyMDE4LTExLTA5ICBCYXN1a2UgU3V6dWtpICA8YmFzdWtlLnN1enVraUBzb255LmNv
bT4KKworICAgICAgICBbQ3VybF0gQWRkIEFQSSBUZXN0IGZvciBDdXJsIGNvb2tpZSBiYWNrZW5k
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxNDkz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHVu
aXQgdGVzdCB0byBUZXN0V2ViQ29yZS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvUGxhdGZv
cm1XaW4uY21ha2U6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2N1cmwv
Q29va2llcy5jcHA6IEFkZGVkLgorCiAyMDE4LTExLTA3ICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVz
QGFwcGxlLmNvbT4KIAogICAgICAgICBPdmVycmlkZSArW1VJS2V5Ym9hcmQgaXNJbkhhcmR3YXJl
S2V5Ym9hcmRNb2RlXSBpbiBXZWJLaXRUZXN0UnVubmVyIGFuZCBEdW1wUmVuZGVyVHJlZQpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdpbi5jbWFrZSBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggZjEzYjgyZWFlNzUuLjM2NTBlNDA2
NDVhIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2luLmNtYWtlCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTc0LDYgKzc0LDcg
QEAgaWYgKCR7V1RGX1BMQVRGT1JNX1dJTl9DQUlST30pCiAgICAgICAgIHZjcnVudGltZQogICAg
ICkKICAgICBsaXN0KEFQUEVORCBUZXN0V2ViQ29yZUxpYl9TT1VSQ0VTCisgICAgICAgICR7VEVT
VFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvY3VybC9Db29raWVzLmNwcAogICAgICAgICAk
e1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL3dpbi9CaXRtYXBJbWFnZS5jcHAKICAg
ICAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9DcnlwdG9EaWdlc3QuY3Bw
CiAgICAgICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvUHVibGljU3VmZml4
LmNwcApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2N1cmwv
Q29va2llcy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY3VybC9Db29r
aWVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjFhMjkzYjUy
MDUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
Y3VybC9Db29raWVzLmNwcApAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmIFVTRShDVVJMKQorCisjaW5jbHVkZSA8V2ViQ29yZS9Db29r
aWVKYXJEQi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvQ29va2llVXRpbC5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPG1lbW9yeT4KKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworY2xhc3MgQ3VybENvb2tp
ZXM6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICB2b2lkIFNldFVwKCkgZmlu
YWwKKyAgICB7CisgICAgICAgIG1fY29va2llRGlyZWN0b3J5ID0gRmlsZVN5c3RlbTo6Y3JlYXRl
VGVtcG9yYXJ5RGlyZWN0b3J5KCk7CisKKyAgICAgICAgbV9jb29raWVKYXIgPSBzdGQ6Om1ha2Vf
dW5pcXVlPFdlYkNvcmU6OkNvb2tpZUphckRCPihGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnQobV9jb29raWVEaXJlY3RvcnksICJjb29raWVkYi5zcWwiKSk7CisgICAgICAgIG1f
Y29va2llSmFyLT5vcGVuKCk7CisgICAgICAgIG1fY29va2llSmFyLT5zZXRFbmFibGVkKHRydWUp
OworICAgIH0KKworICAgIHZvaWQgVGVhckRvd24oKSBmaW5hbAorICAgIHsKKyAgICAgICAgbV9j
b29raWVKYXIgPSBudWxscHRyOworCisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZU5vbkVtcHR5
RGlyZWN0b3J5KG1fY29va2llRGlyZWN0b3J5KTsKKyAgICAgICAgbV9jb29raWVEaXJlY3Rvcnkg
PSBTdHJpbmcoKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29v
a2llSmFyREI+IG1fY29va2llSmFyOworICAgIFN0cmluZyBtX2Nvb2tpZURpcmVjdG9yeTsKK307
CisKK1RFU1RfRihDdXJsQ29va2llcywgVGVzdEh0dHBPbmx5Q2FzZSkKK3sKKyAgICAvLyBzdWNj
ZXNzOiBmcm9tIG5ldHdvcmsKKyAgICBFWFBFQ1RfVFJVRShtX2Nvb2tpZUphci0+c2V0Q29va2ll
KCJodHRwOi8vZXhhbXBsZS5jb20iLCAiZm9vPWJhcjsgSHR0cE9ubHkiLCBDb29raWVKYXJEQjo6
U291cmNlOjpOZXR3b3JrKSk7CisgICAgLy8gc3VjY2Vzczogd2lsZGNhcmQgb2YgZG9tYWlucwor
ICAgIEVYUEVDVF9UUlVFKG1fY29va2llSmFyLT5zZXRDb29raWUoImh0dHA6Ly9leGFtcGxlLmNv
bSIsICJiaW5nbz1ib25nbzsiLCBDb29raWVKYXJEQjo6U291cmNlOjpTY3JpcHQpKTsKKyAgICAv
LyBmYWlsdXJlOiBmb28gaXMgYWxyZWFkeSBzdG9yZWQgYXMgSHR0cE9ubHkKKyAgICBFWFBFQ1Rf
RkFMU0UobV9jb29raWVKYXItPnNldENvb2tpZSgiaHR0cDovL2V4YW1wbGUuY29tIiwgImZvbz1i
YXI7IiwgQ29va2llSmFyREI6OlNvdXJjZTo6U2NyaXB0KSk7CisgICAgLy8gZmFpbHVyZTogaW5j
b25zaXN0ZW50LiBTb3VyY2UgaXMgU2NyaXB0LCBidXQgYXR0cmlidXRlIHNheXMgSHR0cE9ubHkK
KyAgICBFWFBFQ1RfRkFMU0UobV9jb29raWVKYXItPnNldENvb2tpZSgiaHR0cDovL2V4YW1wbGUu
Y29tIiwgImZvbz1iYXI7IEh0dHBPbmx5IiwgQ29va2llSmFyREI6OlNvdXJjZTo6U2NyaXB0KSk7
Cit9CisKK30KKworI2VuZGlmIC8vIFVTRShDVVJMKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354410</attachid>
            <date>2018-11-09 16:33:01 -0800</date>
            <delta_ts>2018-11-12 13:28:00 -0800</delta_ts>
            <desc>FIX Style</desc>
            <filename>191493.diff</filename>
            <type>text/plain</type>
            <size>28660</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyNWU0YTFhNmMzMi4uOTEyYTNjMzU3MjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MiBAQAorMjAxOC0xMS0wOSAgQmFzdWtlIFN1enVraSAgPGJhc3VrZS5zdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIEFkZCBBUEkgVGVzdCBmb3IgQ3VybCBjb29raWUgYmFj
a2VuZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
MTQ5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
ZmFjdG9yaW5nIGZvciBjb29raWUgYmFja2VuZCBpbnRlcmZhY2UuCisKKyAgICAgICAgVGVzdHM6
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jdXJsL0Nvb2tpZXMuY3BwCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9GaWxlU3lzdGVtLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJs
L0Nvb2tpZUphckN1cmxEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVzRm9y
U2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXJDdXJsRGF0YWJhc2U6OnNldENv
b2tpZXNGcm9tRE9NIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckN1cmxEYXRh
YmFzZTo6c2V0Q29va2llc0Zyb21IVFRQUmVzcG9uc2UgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyQ3VybERhdGFiYXNlOjpnZXRSYXdDb29raWVzIGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyREI6Om9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVK
YXJEQjo6Y2hlY2tTUUxpdGVSZXR1cm5Db2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUph
ckRCOjppc0VuYWJsZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OnNl
YXJjaENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OnNldENvb2tpZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXJEQjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphckRCOjpkZWxldGVDb29raWVJbnRlcm5hbCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29raWVKYXJEQjo6ZGVsZXRlQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpD
b29raWVKYXJEQjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVK
YXJEQjo6ZXhlY3V0ZVNpbXBsZVNxbCk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXJEQjo6
aXNFbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29v
a2llSmFyREIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llVXRpbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVVdGlsOjpwYXJzZUNvb2tpZUhlYWRlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZVV0aWwuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlU3lz
dGVtOjpnZW5lcmF0ZVRlbXBvcmFyeVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVN5c3Rl
bTo6b3BlblRlbXBvcmFyeUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVN5c3RlbTo6Y3Jl
YXRlVGVtcG9yYXJ5RGlyZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVTeXN0ZW06OmRl
bGV0ZU5vbkVtcHR5RGlyZWN0b3J5KToKKwogMjAxOC0xMS0wNyAgRG9uIE9sbXN0ZWFkICA8ZG9u
Lm9sbXN0ZWFkQHNvbnkuY29tPgogCiAgICAgICAgIFNpbXBsaWZ5IG1hY3JvcyBpbiBwbGF0Zm9y
bQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oCmluZGV4IGE1MmFiNGM3Y2Y0Li41YTMz
N2U1YzU0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaApAQCAtMTg3LDYgKzE4
NywxMSBAQCBXRUJDT1JFX0VYUE9SVCBOU1N0cmluZyAqY3JlYXRlVGVtcG9yYXJ5RGlyZWN0b3J5
KE5TU3RyaW5nICpkaXJlY3RvcnlQcmVmaXgpOwogV0VCQ09SRV9FWFBPUlQgYm9vbCBkZWxldGVO
b25FbXB0eURpcmVjdG9yeShjb25zdCBTdHJpbmcmKTsKICNlbmRpZgogCisjaWYgT1MoV0lORE9X
UykKK1dFQkNPUkVfRVhQT1JUIFN0cmluZyBjcmVhdGVUZW1wb3JhcnlEaXJlY3RvcnkoKTsKK1dF
QkNPUkVfRVhQT1JUIGJvb2wgZGVsZXRlTm9uRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJik7
CisjZW5kaWYKKwogV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHJlYWxQYXRoKGNvbnN0IFN0cmluZyYp
OwogCiBjbGFzcyBNYXBwZWRGaWxlRGF0YSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybERhdGFiYXNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsRGF0YWJhc2UuY3BwCmlu
ZGV4IDVlODQ1NGFhNTRhLi45MDQwZmI2NGVmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmxEYXRhYmFzZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmxEYXRhYmFzZS5j
cHAKQEAgLTQ3LDE0ICs0NywxMyBAQCBzdGF0aWMgU3RyaW5nIGNvb2tpZXNGb3JTZXNzaW9uKGNv
bnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJgogICAgIGF1dG8g
c2VhcmNoSFRUUE9ubHkgPSAoZm9ySFRUUEhlYWRlciA/IHN0ZDo6bnVsbG9wdCA6IHN0ZDo6b3B0
aW9uYWw8Ym9vbD4ge2ZhbHNlfSk7CiAgICAgYXV0byBzZWN1cmUgPSB1cmwucHJvdG9jb2xJcygi
aHR0cHMiKSA/IHN0ZDo6bnVsbG9wdCA6IHN0ZDo6b3B0aW9uYWw8Ym9vbD4ge2ZhbHNlfTsKIAot
ICAgIFZlY3RvcjxDb29raWU+IHJlc3VsdHM7Ci0gICAgaWYgKGNvb2tpZUphckRCLnNlYXJjaENv
b2tpZXModXJsLnN0cmluZygpLCBzZWFyY2hIVFRQT25seSwgc2VjdXJlLCBzdGQ6Om51bGxvcHQs
IHJlc3VsdHMpKSB7Ci0gICAgICAgIGZvciAoYXV0byByZXN1bHQgOiByZXN1bHRzKSB7CisgICAg
aWYgKGF1dG8gcmVzdWx0ID0gY29va2llSmFyREIuc2VhcmNoQ29va2llcyh1cmwuc3RyaW5nKCks
IHNlYXJjaEhUVFBPbmx5LCBzZWN1cmUsIHN0ZDo6bnVsbG9wdCkpIHsKKyAgICAgICAgZm9yIChh
dXRvIGNvb2tpZSA6ICpyZXN1bHQpIHsKICAgICAgICAgICAgIGlmICghY29va2llcy5pc0VtcHR5
KCkpCiAgICAgICAgICAgICAgICAgY29va2llcy5hcHBlbmQoIjsgIik7Ci0gICAgICAgICAgICBj
b29raWVzLmFwcGVuZChyZXN1bHQubmFtZSk7CisgICAgICAgICAgICBjb29raWVzLmFwcGVuZChj
b29raWUubmFtZSk7CiAgICAgICAgICAgICBjb29raWVzLmFwcGVuZCgiPSIpOwotICAgICAgICAg
ICAgY29va2llcy5hcHBlbmQocmVzdWx0LnZhbHVlKTsKKyAgICAgICAgICAgIGNvb2tpZXMuYXBw
ZW5kKGNvb2tpZS52YWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGNvb2tpZXMu
dG9TdHJpbmcoKTsKQEAgLTY3LDEzICs2NiwxMyBAQCB2b2lkIENvb2tpZUphckN1cmxEYXRhYmFz
ZTo6c2V0Q29va2llc0Zyb21ET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaQog
ICAgIFVOVVNFRF9QQVJBTShmaXJzdFBhcnR5KTsKIAogICAgIENvb2tpZUphckRCJiBjb29raWVK
YXJEQiA9IHNlc3Npb24uY29va2llRGF0YWJhc2UoKTsKLSAgICBjb29raWVKYXJEQi5zZXRDb29r
aWUodXJsLnN0cmluZygpLCB2YWx1ZSwgdHJ1ZSk7CisgICAgY29va2llSmFyREIuc2V0Q29va2ll
KHVybC5zdHJpbmcoKSwgdmFsdWUsIENvb2tpZUphckRCOjpTb3VyY2U6OlNjcmlwdCk7CiB9CiAK
IHZvaWQgQ29va2llSmFyQ3VybERhdGFiYXNlOjpzZXRDb29raWVzRnJvbUhUVFBSZXNwb25zZShj
b25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIHZhbHVlKSBjb25zdAogewogICAgIENvb2tpZUphckRCJiBjb29raWVKYXJEQiA9
IHNlc3Npb24uY29va2llRGF0YWJhc2UoKTsKLSAgICBjb29raWVKYXJEQi5zZXRDb29raWUodXJs
LnN0cmluZygpLCB2YWx1ZSwgZmFsc2UpOworICAgIGNvb2tpZUphckRCLnNldENvb2tpZSh1cmwu
c3RyaW5nKCksIHZhbHVlLCBDb29raWVKYXJEQjo6U291cmNlOjpOZXR3b3JrKTsKIH0KIAogc3Rk
OjpwYWlyPFN0cmluZywgYm9vbD4gQ29va2llSmFyQ3VybERhdGFiYXNlOjpjb29raWVzRm9yRE9N
KGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiBmaXJzdFBh
cnR5LCBjb25zdCBTYW1lU2l0ZUluZm8mLCBjb25zdCBVUkwmIHVybCwgc3RkOjpvcHRpb25hbDx1
aW50NjRfdD4gZnJhbWVJRCwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gcGFnZUlELCBJbmNsdWRl
U2VjdXJlQ29va2llcykgY29uc3QKQEAgLTExMCw3ICsxMDksMTEgQEAgYm9vbCBDb29raWVKYXJD
dXJsRGF0YWJhc2U6OmdldFJhd0Nvb2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBz
ZXNzaW9uLAogICAgIFVOVVNFRF9QQVJBTShwYWdlSUQpOwogCiAgICAgQ29va2llSmFyREImIGNv
b2tpZUphckRCID0gc2Vzc2lvbi5jb29raWVEYXRhYmFzZSgpOwotICAgIHJldHVybiBjb29raWVK
YXJEQi5zZWFyY2hDb29raWVzKGZpcnN0UGFydHkuc3RyaW5nKCksIHN0ZDo6bnVsbG9wdCwgc3Rk
OjpudWxsb3B0LCBzdGQ6Om51bGxvcHQsIHJhd0Nvb2tpZXMpOworICAgIGlmIChhdXRvIGNvb2tp
ZXMgPSBjb29raWVKYXJEQi5zZWFyY2hDb29raWVzKGZpcnN0UGFydHkuc3RyaW5nKCksIHN0ZDo6
bnVsbG9wdCwgc3RkOjpudWxsb3B0LCBzdGQ6Om51bGxvcHQpKSB7CisgICAgICAgIHJhd0Nvb2tp
ZXMgPSBXVEZNb3ZlKCpjb29raWVzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBDb29raWVKYXJDdXJsRGF0YWJhc2U6OmRlbGV0ZUNv
b2tpZShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckRCLmNwcAppbmRleCA0MjA0OWVkNDdjOS4uNjM1
MDg2MGM1ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9Db29raWVKYXJEQi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL0Nvb2tpZUphckRCLmNwcApAQCAtMTE3LDcgKzExNyw3IEBAIGJvb2wgQ29va2llSmFyREI6
Om9wZW5EYXRhYmFzZSgpCiAgICAgaWYgKGV4aXN0c0RhdGFiYXNlRmlsZSkgewogICAgICAgICBp
ZiAobV9kYXRhYmFzZS5vcGVuKG1fZGF0YWJhc2VQYXRoLCBmYWxzZSkpIHsKICAgICAgICAgICAg
IGlmIChjaGVja0RhdGFiYXNlVmFsaWRpdHkoKSkKLSAgICAgICAgICAgICAgICBleGVjdXRlU2lt
cGxlU3FsKERFTEVURV9BTExfU0VTU0lPTl9DT09LSUVfU1FMKTsKKyAgICAgICAgICAgICAgICBl
eGVjdXRlU3FsKERFTEVURV9BTExfU0VTU0lPTl9DT09LSUVfU1FMKTsKICAgICAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgICAgIC8vIGRlbGV0ZSBkYXRhYmFzZSBhbmQgdHJ5IHRvIHJlLWNy
ZWF0ZSBhZ2FpbgogICAgICAgICAgICAgICAgIExPR19FUlJPUigiQ29va2llIGRhdGFiYXNlIHZh
bGlkaXR5IGNoZWNrIGZhaWxlZCwgYXR0ZW1wdGluZyB0byByZWNyZWF0ZSB0aGUgZGF0YWJhc2Ui
KTsKQEAgLTE0NywxOCArMTQ3LDE1IEBAIGJvb2wgQ29va2llSmFyREI6Om9wZW5EYXRhYmFzZSgp
CiAKICAgICB2ZXJpZnlTY2hlbWFWZXJzaW9uKCk7CiAKLSAgICBib29sIGRhdGFiYXNlVmFsaWRp
dHkgPSB0cnVlOwogICAgIGlmICghZXhpc3RzRGF0YWJhc2VGaWxlIHx8ICFtX2RhdGFiYXNlLnRh
YmxlRXhpc3RzKCJDb29raWUiKSkgewotICAgICAgICBkYXRhYmFzZVZhbGlkaXR5ICY9IChleGVj
dXRlU2ltcGxlU3FsKENSRUFURV9DT09LSUVfVEFCTEVfU1FMKSA9PSBTUUxJVEVfRE9ORSk7Ci0g
ICAgICAgIGRhdGFiYXNlVmFsaWRpdHkgJj0gKGV4ZWN1dGVTaW1wbGVTcWwoQ1JFQVRFX0RPTUFJ
Tl9JTkRFWF9TUUwpID09IFNRTElURV9ET05FKTsKLSAgICAgICAgZGF0YWJhc2VWYWxpZGl0eSAm
PSAoZXhlY3V0ZVNpbXBsZVNxbChDUkVBVEVfUEFUSF9JTkRFWF9TUUwpID09IFNRTElURV9ET05F
KTsKLSAgICB9CisgICAgICAgIGJvb2wgb2sgPSBleGVjdXRlU3FsKENSRUFURV9DT09LSUVfVEFC
TEVfU1FMKSAmJiBleGVjdXRlU3FsKENSRUFURV9ET01BSU5fSU5ERVhfU1FMKSAmJiBleGVjdXRl
U3FsKENSRUFURV9QQVRIX0lOREVYX1NRTCk7CiAKLSAgICBpZiAoIWRhdGFiYXNlVmFsaWRpdHkp
IHsKLSAgICAgICAgLy8gZ2l2ZSB1cCBjcmVhdGUgZGF0YWJhc2UgYXQgdGhpcyB0aW1lIChhbGwg
Y29va2llcyBvbiByZXF1ZXN0L3Jlc3BvbnNlIGFyZSBpZ25vcmVkKQotICAgICAgICBtX2RhdGFi
YXNlLmNsb3NlKCk7Ci0gICAgICAgIGRlbGV0ZUFsbERhdGFiYXNlRmlsZXMoKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgICAgICAvLyBnaXZlIHVw
IGNyZWF0ZSBkYXRhYmFzZSBhdCB0aGlzIHRpbWUgKGFsbCBjb29raWVzIG9uIHJlcXVlc3QvcmVz
cG9uc2UgYXJlIGlnbm9yZWQpCisgICAgICAgICAgICBtX2RhdGFiYXNlLmNsb3NlKCk7CisgICAg
ICAgICAgICBkZWxldGVBbGxEYXRhYmFzZUZpbGVzKCk7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KICAgICB9CiAKICAgICBtX2RhdGFiYXNlLnNldFN5bmNocm9ub3VzKFNR
TGl0ZURhdGFiYXNlOjpTeW5jTm9ybWFsKTsKQEAgLTIwNiw3ICsyMDMsNyBAQCB2b2lkIENvb2tp
ZUphckRCOjp2ZXJpZnlTY2hlbWFWZXJzaW9uKCkKICAgICB9CiAKICAgICAvLyBVcGRhdGUgdmVy
c2lvbgotICAgIGV4ZWN1dGVTaW1wbGVTcWwoU3RyaW5nOjpmb3JtYXQoIlBSQUdNQSB1c2VyX3Zl
cnNpb249JWQiLCBzY2hlbWFWZXJzaW9uKSk7CisgICAgZXhlY3V0ZVNxbChTdHJpbmc6OmZvcm1h
dCgiUFJBR01BIHVzZXJfdmVyc2lvbj0lZCIsIHNjaGVtYVZlcnNpb24pKTsKIH0KIAogdm9pZCBD
b29raWVKYXJEQjo6ZGVsZXRlQWxsVGFibGVzKCkKQEAgLTI0NSwxMCArMjQyLDEwIEBAIGJvb2wg
Q29va2llSmFyREI6OmNoZWNrRGF0YWJhc2VDb3JydXB0aW9uQW5kUmVtb3ZlSWZOZWVkZWQoKQog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBDb29raWVKYXJEQjo6Y2hlY2tTUUxpdGVSZXR1
cm5Db2RlKGludCBhY3R1YWwpCitib29sIENvb2tpZUphckRCOjpjaGVja1NRTGl0ZVJldHVybkNv
ZGUoaW50IGNvZGUpCiB7CiAgICAgaWYgKCFtX2RldGVjdGVkRGF0YWJhc2VDb3JydXB0aW9uKSB7
Ci0gICAgICAgIHN3aXRjaCAoYWN0dWFsKSB7CisgICAgICAgIHN3aXRjaCAoY29kZSkgewogICAg
ICAgICBjYXNlIFNRTElURV9DT1JSVVBUOgogICAgICAgICBjYXNlIFNRTElURV9TQ0hFTUE6CiAg
ICAgICAgIGNhc2UgU1FMSVRFX0ZPUk1BVDoKQEAgLTI1Nyw2ICsyNTQsNyBAQCB2b2lkIENvb2tp
ZUphckRCOjpjaGVja1NRTGl0ZVJldHVybkNvZGUoaW50IGFjdHVhbCkKICAgICAgICAgICAgIG1f
ZGV0ZWN0ZWREYXRhYmFzZUNvcnJ1cHRpb24gPSB0cnVlOwogICAgICAgICB9CiAgICAgfQorICAg
IHJldHVybiBjb2RlID09IFNRTElURV9PSyB8fCBjb2RlID09IFNRTElURV9ET05FIHx8IGNvZGUg
PT0gU1FMSVRFX1JPVzsKIH0KIAogYm9vbCBDb29raWVKYXJEQjo6Y2hlY2tEYXRhYmFzZVZhbGlk
aXR5KCkKQEAgLTMwNiw3ICszMDQsNyBAQCB2b2lkIENvb2tpZUphckRCOjpkZWxldGVBbGxEYXRh
YmFzZUZpbGVzKCkKICAgICBGaWxlU3lzdGVtOjpkZWxldGVGaWxlKG1fZGF0YWJhc2VQYXRoICsg
Ii13YWwiKTsKIH0KIAotYm9vbCBDb29raWVKYXJEQjo6aXNFbmFibGVkKCkKK2Jvb2wgQ29va2ll
SmFyREI6OmlzRW5hYmxlZCgpIGNvbnN0CiB7CiAgICAgaWYgKG1fZGF0YWJhc2VQYXRoLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzE0LDE3ICszMTIsMTcgQEAgYm9vbCBD
b29raWVKYXJEQjo6aXNFbmFibGVkKCkKICAgICByZXR1cm4gbV9pc0VuYWJsZWQ7CiB9CiAKLWJv
b2wgQ29va2llSmFyREI6OnNlYXJjaENvb2tpZXMoY29uc3QgU3RyaW5nJiByZXF1ZXN0VXJsLCBj
b25zdCBzdGQ6Om9wdGlvbmFsPGJvb2w+JiBodHRwT25seSwgY29uc3Qgc3RkOjpvcHRpb25hbDxi
b29sPiYgc2VjdXJlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPGJvb2w+JiBzZXNzaW9uLCBWZWN0b3I8
Q29va2llPiYgcmVzdWx0cykKK3N0ZDo6b3B0aW9uYWw8VmVjdG9yPENvb2tpZT4+IENvb2tpZUph
ckRCOjpzZWFyY2hDb29raWVzKGNvbnN0IFN0cmluZyYgcmVxdWVzdFVybCwgY29uc3Qgc3RkOjpv
cHRpb25hbDxib29sPiYgaHR0cE9ubHksIGNvbnN0IHN0ZDo6b3B0aW9uYWw8Ym9vbD4mIHNlY3Vy
ZSwgY29uc3Qgc3RkOjpvcHRpb25hbDxib29sPiYgc2Vzc2lvbikKIHsKICAgICBpZiAoIWlzRW5h
YmxlZCgpIHx8ICFtX2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKICAgICBVUkwgcmVxdWVzdFVybE9iaih7IH0s
IHJlcXVlc3RVcmwpOwogICAgIFN0cmluZyByZXF1ZXN0SG9zdChyZXF1ZXN0VXJsT2JqLmhvc3Qo
KS50b1N0cmluZygpLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkpOwogICAgIFN0cmluZyByZXF1
ZXN0UGF0aChyZXF1ZXN0VXJsT2JqLnBhdGgoKS5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpKTsK
IAogICAgIGlmIChyZXF1ZXN0SG9zdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIGlmIChyZXF1ZXN0UGF0aC5pc0Vt
cHR5KCkpCiAgICAgICAgIHJlcXVlc3RQYXRoID0gIi8iOwpAQCAtMzQwLDcgKzMzOCw3IEBAIGJv
b2wgQ29va2llSmFyREI6OnNlYXJjaENvb2tpZXMoY29uc3QgU3RyaW5nJiByZXF1ZXN0VXJsLCBj
b25zdCBzdGQ6Om9wdGlvbmFsPGJvCiAKICAgICBhdXRvIHBzdG10ID0gc3RkOjptYWtlX3VuaXF1
ZTxTUUxpdGVTdGF0ZW1lbnQ+KG1fZGF0YWJhc2UsIHNxbCk7CiAgICAgaWYgKCFwc3RtdCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAg
cHN0bXQtPnByZXBhcmUoKTsKICAgICBwc3RtdC0+YmluZEludCgxLCBodHRwT25seSA/ICpodHRw
T25seSA6IC0xKTsKQEAgLTM3MCw5ICszNjgsOSBAQCBib29sIENvb2tpZUphckRCOjpzZWFyY2hD
b29raWVzKGNvbnN0IFN0cmluZyYgcmVxdWVzdFVybCwgY29uc3Qgc3RkOjpvcHRpb25hbDxibwog
ICAgIH0KIAogICAgIGlmICghcHN0bXQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIHJlc3VsdHMuY2xlYXIoKTsKKyAgICBWZWN0b3I8
Q29va2llPiByZXN1bHRzOwogCiAgICAgd2hpbGUgKHBzdG10LT5zdGVwKCkgPT0gU1FMSVRFX1JP
VykgewogCkBAIC00MTIsNyArNDEwLDcgQEAgYm9vbCBDb29raWVKYXJEQjo6c2VhcmNoQ29va2ll
cyhjb25zdCBTdHJpbmcmIHJlcXVlc3RVcmwsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8Ym8KICAgICB9
CiAgICAgcHN0bXQtPmZpbmFsaXplKCk7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
cmVzdWx0czsKIH0KIAogYm9vbCBDb29raWVKYXJEQjo6aGFzSHR0cE9ubHlDb29raWUoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBwYXRoKQpA
QCAtNDI4LDc1ICs0MjYsNjkgQEAgYm9vbCBDb29raWVKYXJEQjo6aGFzSHR0cE9ubHlDb29raWUo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY28KIH0KIAogCi1pbnQg
Q29va2llSmFyREI6OnNldENvb2tpZShjb25zdCBDb29raWUmIGNvb2tpZSkKK2Jvb2wgQ29va2ll
SmFyREI6OnNldENvb2tpZShjb25zdCBDb29raWUmIGNvb2tpZSkKIHsKLSAgICBpbnQgcmV0ID0g
MDsKICAgICBpZiAoIWNvb2tpZS5zZXNzaW9uICYmIE1vbm90b25pY1RpbWU6OmZyb21SYXdTZWNv
bmRzKGNvb2tpZS5leHBpcmVzKSA8PSBNb25vdG9uaWNUaW1lOjpub3coKSkKLSAgICAgICAgcmV0
ID0gZGVsZXRlQ29va2llSW50ZXJuYWwoY29va2llLm5hbWUsIGNvb2tpZS5kb21haW4sIGNvb2tp
ZS5wYXRoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgU1FMaXRlU3RhdGVtZW50KiBzdGF0ZW1lbnQg
PSBnZXRQcmVwYXJlU3RhdGVtZW50KFNFVF9DT09LSUVfU1FMKTsKLSAgICAgICAgQVNTRVJUKHN0
YXRlbWVudCk7Ci0KLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZlIHNvbWUgZXZpY3Rp
b24gcG9saWN5IHdoZW4gYSBkb21haW4gZ29lcyBvdmVyIE1BWF9DT09LSUVfUEVSX0RPTUFJTgor
ICAgICAgICByZXR1cm4gZGVsZXRlQ29va2llSW50ZXJuYWwoY29va2llLm5hbWUsIGNvb2tpZS5k
b21haW4sIGNvb2tpZS5wYXRoKTsKIAotICAgICAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGNv
b2tpZS5uYW1lKTsKLSAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBjb29raWUudmFsdWUp
OwotICAgICAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDMsIGNvb2tpZS5kb21haW4pOwotICAgICAg
ICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDQsIGNvb2tpZS5wYXRoKTsKLSAgICAgICAgc3RhdGVtZW50
LT5iaW5kSW50NjQoNSwgY29va2llLnNlc3Npb24gPyAwIDogc3RhdGljX2Nhc3Q8aW50NjRfdD4o
Y29va2llLmV4cGlyZXMpKTsKLSAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50KDYsIGNvb2tpZS52
YWx1ZS5sZW5ndGgoKSk7Ci0gICAgICAgIHN0YXRlbWVudC0+YmluZEludCg3LCBjb29raWUuc2Vz
c2lvbiA/IDEgOiAwKTsKLSAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50KDgsIGNvb2tpZS5odHRw
T25seSA/IDEgOiAwKTsKLSAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50KDksIGNvb2tpZS5zZWN1
cmUgPyAxIDogMCk7Ci0KLSAgICAgICAgcmV0ID0gc3RhdGVtZW50LT5zdGVwKCk7Ci0gICAgfQot
ICAgIGNoZWNrU1FMaXRlUmV0dXJuQ29kZShyZXQpOwotICAgIEFTU0VSVChyZXQgPT0gU1FMSVRF
X0RPTkUpOworICAgIFNRTGl0ZVN0YXRlbWVudCogc3RhdGVtZW50ID0gZ2V0UHJlcGFyZVN0YXRl
bWVudChTRVRfQ09PS0lFX1NRTCk7CisgICAgQVNTRVJUKHN0YXRlbWVudCk7CiAKLSAgICByZXR1
cm4gcmV0OworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBzb21lIGV2aWN0aW9uIHBvbGlj
eSB3aGVuIGEgZG9tYWluIGdvZXMgb3ZlciBNQVhfQ09PS0lFX1BFUl9ET01BSU4KKyAgICBzdGF0
ZW1lbnQtPmJpbmRUZXh0KDEsIGNvb2tpZS5uYW1lKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0
KDIsIGNvb2tpZS52YWx1ZSk7CisgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgzLCBjb29raWUuZG9t
YWluKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDQsIGNvb2tpZS5wYXRoKTsKKyAgICBzdGF0
ZW1lbnQtPmJpbmRJbnQ2NCg1LCBjb29raWUuc2Vzc2lvbiA/IDAgOiBzdGF0aWNfY2FzdDxpbnQ2
NF90Pihjb29raWUuZXhwaXJlcykpOworICAgIHN0YXRlbWVudC0+YmluZEludCg2LCBjb29raWUu
dmFsdWUubGVuZ3RoKCkpOworICAgIHN0YXRlbWVudC0+YmluZEludCg3LCBjb29raWUuc2Vzc2lv
biA/IDEgOiAwKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRJbnQoOCwgY29va2llLmh0dHBPbmx5ID8g
MSA6IDApOworICAgIHN0YXRlbWVudC0+YmluZEludCg5LCBjb29raWUuc2VjdXJlID8gMSA6IDAp
OworICAgIHJldHVybiBjaGVja1NRTGl0ZVJldHVybkNvZGUoc3RhdGVtZW50LT5zdGVwKCkpOwog
fQogCi1pbnQgQ29va2llSmFyREI6OnNldENvb2tpZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3Qg
U3RyaW5nJiBjb29raWUsIGJvb2wgZnJvbUphdmFTY3JpcHQpCitib29sIENvb2tpZUphckRCOjpz
ZXRDb29raWUoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgYm9keSwgQ29va2llSmFy
REI6OlNvdXJjZSBzb3VyY2UpCiB7CiAgICAgaWYgKCFpc0VuYWJsZWQoKSB8fCAhbV9kYXRhYmFz
ZS5pc09wZW4oKSkKLSAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBpZiAodXJsLmlzRW1wdHkoKSB8fCBjb29raWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gLTE7CisgICAgaWYgKHVybC5pc0VtcHR5KCkgfHwgYm9keS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIFVSTCB1cmxPYmooeyB9LCB1cmwpOwogICAgIFN0cmluZyBo
b3N0KHVybE9iai5ob3N0KCkudG9TdHJpbmcoKSk7CiAgICAgU3RyaW5nIHBhdGgodXJsT2JqLnBh
dGgoKSk7CiAKLSAgICBDb29raWUgY29va2llT2JqOwotICAgIGlmICghQ29va2llVXRpbDo6cGFy
c2VDb29raWVIZWFkZXIoY29va2llLCBob3N0LCBjb29raWVPYmopKQotICAgICAgICByZXR1cm4g
LTE7CisgICAgYXV0byBjb29raWUgPSBDb29raWVVdGlsOjpwYXJzZUNvb2tpZUhlYWRlcihib2R5
LCBob3N0KTsKKyAgICBpZiAoIWNvb2tpZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
aWYgKGNvb2tpZU9iai5kb21haW4uaXNFbXB0eSgpKQotICAgICAgICBjb29raWVPYmouZG9tYWlu
ID0gU3RyaW5nKGhvc3QpOworICAgIGlmIChjb29raWUtPmRvbWFpbi5pc0VtcHR5KCkpCisgICAg
ICAgIGNvb2tpZS0+ZG9tYWluID0gU3RyaW5nKGhvc3QpOwogCi0gICAgaWYgKGNvb2tpZU9iai5w
YXRoLmlzRW1wdHkoKSkKLSAgICAgICAgY29va2llT2JqLnBhdGggPSBDb29raWVVdGlsOjpkZWZh
dWx0UGF0aEZvclVSTCh1cmxPYmopOworICAgIGlmIChjb29raWUtPnBhdGguaXNFbXB0eSgpKQor
ICAgICAgICBjb29raWUtPnBhdGggPSBDb29raWVVdGlsOjpkZWZhdWx0UGF0aEZvclVSTCh1cmxP
YmopOwogCiAjaWYgRU5BQkxFKFBVQkxJQ19TVUZGSVhfTElTVCkKLSAgICBpZiAoaXNQdWJsaWNT
dWZmaXgoY29va2llT2JqLmRvbWFpbikpCi0gICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoaXNQ
dWJsaWNTdWZmaXgoY29va2llLT5kb21haW4pKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5k
aWYKIAotICAgIGlmIChmcm9tSmF2YVNjcmlwdCAmJiBjb29raWVPYmouaHR0cE9ubHkpCi0gICAg
ICAgIHJldHVybiAtMTsKKyAgICBib29sIGZyb21KYXZhU2NyaXB0ID0gc291cmNlID09IENvb2tp
ZUphckRCOjpTb3VyY2U6OlNjcmlwdDsKKworICAgIGlmIChmcm9tSmF2YVNjcmlwdCAmJiBjb29r
aWUtPmh0dHBPbmx5KQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZnJvbUphdmFT
Y3JpcHQgJiYgaGFzSHR0cE9ubHlDb29raWUoY29va2llT2JqLm5hbWUsIGNvb2tpZU9iai5kb21h
aW4sIGNvb2tpZU9iai5wYXRoKSkKLSAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChmcm9tSmF2
YVNjcmlwdCAmJiBoYXNIdHRwT25seUNvb2tpZShjb29raWUtPm5hbWUsIGNvb2tpZS0+ZG9tYWlu
LCBjb29raWUtPnBhdGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gc2V0
Q29va2llKGNvb2tpZU9iaik7CisgICAgcmV0dXJuIHNldENvb2tpZSgqY29va2llKTsKIH0KIAot
aW50IENvb2tpZUphckRCOjpkZWxldGVDb29raWUoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0
cmluZyYgbmFtZSkKK2Jvb2wgQ29va2llSmFyREI6OmRlbGV0ZUNvb2tpZShjb25zdCBTdHJpbmcm
IHVybCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIGlmICghaXNFbmFibGVkKCkgfHwgIW1f
ZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgU3RyaW5nIHVybENvcGllZCA9IFN0cmluZyh1cmwpOwogICAgIGlmICh1cmxD
b3BpZWQuc3RhcnRzV2l0aCgnLicpKQpAQCAtNTA2LDE3ICs0OTgsMTMgQEAgaW50IENvb2tpZUph
ckRCOjpkZWxldGVDb29raWUoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSkK
ICAgICBpZiAodXJsT2JqLmlzVmFsaWQoKSkgewogICAgICAgICBTdHJpbmcgaG9zdFN0cih1cmxP
YmouaG9zdCgpLnRvU3RyaW5nKCkpOwogICAgICAgICBTdHJpbmcgcGF0aFN0cih1cmxPYmoucGF0
aCgpKTsKLSAgICAgICAgaW50IHJldCA9IGRlbGV0ZUNvb2tpZUludGVybmFsKG5hbWUsIGhvc3RT
dHIsIHBhdGhTdHIpOwotICAgICAgICBjaGVja1NRTGl0ZVJldHVybkNvZGUocmV0KTsKLSAgICAg
ICAgQVNTRVJUKHJldCA9PSBTUUxJVEVfRE9ORSk7Ci0KLSAgICAgICAgcmV0dXJuIHJldDsKKyAg
ICAgICAgcmV0dXJuIGRlbGV0ZUNvb2tpZUludGVybmFsKG5hbWUsIGhvc3RTdHIsIHBhdGhTdHIp
OwogICAgIH0KIAotICAgIHJldHVybiAtMTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWludCBD
b29raWVKYXJEQjo6ZGVsZXRlQ29va2llSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBwYXRoKQorYm9vbCBDb29raWVKYXJEQjo6
ZGVsZXRlQ29va2llSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRv
bWFpbiwgY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIFNRTGl0ZVN0YXRlbWVudCogc3RhdGVt
ZW50OwogICAgIGlmICghcGF0aC5pc0VtcHR5KCkpIHsKQEAgLTUzMiwyMiArNTIwLDIyIEBAIGlu
dCBDb29raWVKYXJEQjo6ZGVsZXRlQ29va2llSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIGRvbWFpbiwKICAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBkb21h
aW4pOwogICAgIH0KIAotICAgIHJldHVybiBzdGF0ZW1lbnQtPnN0ZXAoKTsKKyAgICByZXR1cm4g
Y2hlY2tTUUxpdGVSZXR1cm5Db2RlKHN0YXRlbWVudC0+c3RlcCgpKTsKIH0KIAotaW50IENvb2tp
ZUphckRCOjpkZWxldGVDb29raWVzKGNvbnN0IFN0cmluZyYpCitib29sIENvb2tpZUphckRCOjpk
ZWxldGVDb29raWVzKGNvbnN0IFN0cmluZyYpCiB7CiAgICAgLy8gTk9UIElNUExFTUVOVEVECiAg
ICAgLy8gVE9ETzogdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpZiBhcHBsaWNhdGlvbiBj
YWxscyBXS0Nvb2tpZU1hbmFnZXJEZWxldGVDb29raWVzRm9ySG9zdG5hbWUoKSBpbiBXS0Nvb2tp
ZU1hbmFnZXIuaC4KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWludCBD
b29raWVKYXJEQjo6ZGVsZXRlQWxsQ29va2llcygpCitib29sIENvb2tpZUphckRCOjpkZWxldGVB
bGxDb29raWVzKCkKIHsKICAgICBpZiAoIWlzRW5hYmxlZCgpIHx8ICFtX2RhdGFiYXNlLmlzT3Bl
bigpKQotICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJl
dHVybiBleGVjdXRlU2ltcGxlU3FsKERFTEVURV9BTExfQ09PS0lFX1NRTCk7CisgICAgcmV0dXJu
IGV4ZWN1dGVTcWwoREVMRVRFX0FMTF9DT09LSUVfU1FMKTsKIH0KIAogdm9pZCBDb29raWVKYXJE
Qjo6Y3JlYXRlUHJlcGFyZVN0YXRlbWVudChjb25zdCBTdHJpbmcmIHNxbCkKQEAgLTU2NiwxNyAr
NTU0LDE4IEBAIFNRTGl0ZVN0YXRlbWVudCogQ29va2llSmFyREI6OmdldFByZXBhcmVTdGF0ZW1l
bnQoY29uc3QgU3RyaW5nJiBzcWwpCiAgICAgcmV0dXJuIHN0YXRlbWVudDsKIH0KIAotaW50IENv
b2tpZUphckRCOjpleGVjdXRlU2ltcGxlU3FsKGNvbnN0IFN0cmluZyYgc3FsLCBib29sIGlnbm9y
ZUVycm9yKQorYm9vbCBDb29raWVKYXJEQjo6ZXhlY3V0ZVNxbChjb25zdCBTdHJpbmcmIHNxbCkK
IHsKICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsIHNxbCk7CiAgICAg
aW50IHJldCA9IHN0YXRlbWVudC5wcmVwYXJlQW5kU3RlcCgpOwogICAgIHN0YXRlbWVudC5maW5h
bGl6ZSgpOwogCi0gICAgY2hlY2tTUUxpdGVSZXR1cm5Db2RlKHJldCk7Ci0gICAgaWYgKHJldCAh
PSBTUUxJVEVfT0sgJiYgcmV0ICE9IFNRTElURV9ET05FICYmIHJldCAhPSBTUUxJVEVfUk9XICYm
ICFpZ25vcmVFcnJvcikKKyAgICBpZiAoIWNoZWNrU1FMaXRlUmV0dXJuQ29kZShyZXQpKSB7CiAg
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGV4ZWN1dGUgJXMgZXJyb3I6ICVzIiwgc3FsLmFz
Y2lpKCkuZGF0YSgpLCBtX2RhdGFiYXNlLmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KIAotICAgIHJldHVybiByZXQ7CisgICAgcmV0dXJuIHRydWU7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJEQi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL0Nvb2tpZUphckRCLmgKaW5kZXggNjk1Yjk2N2ExMjIuLjI4YmJmNWY3Yzc0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2ll
SmFyREIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2ll
SmFyREIuaApAQCAtNDAsMzQgKzQwLDM4IEBAIGNsYXNzIENvb2tpZUphckRCIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDb29raWVKYXJEQik7CiAKIHB1YmxpYzoKKyAgICBlbnVtIGNsYXNz
IFNvdXJjZSA6IHVpbnQ4X3QgeworICAgICAgICBOZXR3b3JrLAorICAgICAgICBTY3JpcHQKKyAg
ICB9OwogICAgIHZvaWQgb3BlbigpOwotICAgIGJvb2wgaXNFbmFibGVkKCk7CisgICAgYm9vbCBp
c0VuYWJsZWQoKSBjb25zdDsKICAgICB2b2lkIHNldEVuYWJsZWQoYm9vbCk7CiAKLSAgICBib29s
IHNlYXJjaENvb2tpZXMoY29uc3QgU3RyaW5nJiByZXF1ZXN0VXJsLCBjb25zdCBzdGQ6Om9wdGlv
bmFsPGJvb2w+JiBodHRwT25seSwgY29uc3Qgc3RkOjpvcHRpb25hbDxib29sPiYgc2VjdXJlLCBj
b25zdCBzdGQ6Om9wdGlvbmFsPGJvb2w+JiBzZXNzaW9uLCBWZWN0b3I8Q29va2llPiYgcmVzdWx0
cyk7Ci0gICAgaW50IHNldENvb2tpZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBj
b29raWUsIGJvb2wgZnJvbUphdmFTY3JpcHQpOwotICAgIGludCBzZXRDb29raWUoY29uc3QgQ29v
a2llJik7CisgICAgc3RkOjpvcHRpb25hbDxWZWN0b3I8Q29va2llPj4gc2VhcmNoQ29va2llcyhj
b25zdCBTdHJpbmcmIHJlcXVlc3RVcmwsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8Ym9vbD4mIGh0dHBP
bmx5LCBjb25zdCBzdGQ6Om9wdGlvbmFsPGJvb2w+JiBzZWN1cmUsIGNvbnN0IHN0ZDo6b3B0aW9u
YWw8Ym9vbD4mIHNlc3Npb24pOworICAgIGJvb2wgc2V0Q29va2llKGNvbnN0IFN0cmluZyYgdXJs
LCBjb25zdCBTdHJpbmcmIGNvb2tpZSwgU291cmNlKTsKKyAgICBib29sIHNldENvb2tpZShjb25z
dCBDb29raWUmKTsKIAotICAgIGludCBkZWxldGVDb29raWUoY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgaW50IGRlbGV0ZUNvb2tpZXMoY29uc3QgU3RyaW5nJiB1
cmwpOwotICAgIGludCBkZWxldGVBbGxDb29raWVzKCk7CisgICAgYm9vbCBkZWxldGVDb29raWUo
Y29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgYm9vbCBkZWxldGVD
b29raWVzKGNvbnN0IFN0cmluZyYgdXJsKTsKKyAgICBib29sIGRlbGV0ZUFsbENvb2tpZXMoKTsK
IAogICAgIFdFQkNPUkVfRVhQT1JUIENvb2tpZUphckRCKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQ
YXRoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB+Q29va2llSmFyREIoKTsKIAogcHJpdmF0ZToKIAot
ICAgIGJvb2wgbV9pc0VuYWJsZWQge3RydWV9OworICAgIGJvb2wgbV9pc0VuYWJsZWQgeyB0cnVl
IH07CiAgICAgU3RyaW5nIG1fZGF0YWJhc2VQYXRoOwogCi0gICAgYm9vbCBtX2RldGVjdGVkRGF0
YWJhc2VDb3JydXB0aW9uIHtmYWxzZX07CisgICAgYm9vbCBtX2RldGVjdGVkRGF0YWJhc2VDb3Jy
dXB0aW9uIHsgZmFsc2UgfTsKIAogICAgIGJvb2wgaXNPbk1lbW9yeSgpIGNvbnN0IHsgcmV0dXJu
IChtX2RhdGFiYXNlUGF0aCA9PSAiOm1lbW9yeToiKTsgfTsKIAogICAgIGJvb2wgb3BlbkRhdGFi
YXNlKCk7CiAgICAgdm9pZCBjbG9zZURhdGFiYXNlKCk7CiAKLSAgICB2b2lkIGNoZWNrU1FMaXRl
UmV0dXJuQ29kZShpbnQgYWN0dWFsKTsKKyAgICBib29sIGNoZWNrU1FMaXRlUmV0dXJuQ29kZShp
bnQpOwogICAgIHZvaWQgZmxhZ0RhdGFiYXNlQ29ycnVwdGlvbigpOwogICAgIGJvb2wgY2hlY2tE
YXRhYmFzZUNvcnJ1cHRpb25BbmRSZW1vdmVJZk5lZWRlZCgpOwogICAgIFN0cmluZyBnZXRDb3Jy
dXB0aW9uTWFya2VyUGF0aCgpIGNvbnN0OwpAQCAtNzgsMTEgKzgyLDExIEBAIHByaXZhdGU6CiAg
ICAgdm9pZCB2ZXJpZnlTY2hlbWFWZXJzaW9uKCk7CiAgICAgdm9pZCBkZWxldGVBbGxUYWJsZXMo
KTsKIAotICAgIHZvaWQgY3JlYXRlUHJlcGFyZVN0YXRlbWVudChjb25zdCBTdHJpbmcmIHNxbCk7
Ci0gICAgU1FMaXRlU3RhdGVtZW50KiBnZXRQcmVwYXJlU3RhdGVtZW50KGNvbnN0IFN0cmluZyYg
c3FsKTsKLSAgICBpbnQgZXhlY3V0ZVNpbXBsZVNxbChjb25zdCBTdHJpbmcmIHNxbCwgYm9vbCBp
Z25vcmVFcnJvciA9IGZhbHNlKTsKKyAgICB2b2lkIGNyZWF0ZVByZXBhcmVTdGF0ZW1lbnQoY29u
c3QgU3RyaW5nJik7CisgICAgU1FMaXRlU3RhdGVtZW50KiBnZXRQcmVwYXJlU3RhdGVtZW50KGNv
bnN0IFN0cmluZyYpOworICAgIGJvb2wgZXhlY3V0ZVNxbChjb25zdCBTdHJpbmcmKTsKIAotICAg
IGludCBkZWxldGVDb29raWVJbnRlcm5hbChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIGJvb2wgZGVsZXRlQ29va2llSW50
ZXJuYWwoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3Ry
aW5nJiBwYXRoKTsKICAgICBib29sIGhhc0h0dHBPbmx5Q29va2llKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYgcGF0aCk7CiAKICAgICBTUUxp
dGVEYXRhYmFzZSBtX2RhdGFiYXNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL0Nvb2tpZVV0aWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL0Nvb2tpZVV0aWwuY3BwCmluZGV4IGNmNTU4ODQ4MjZmLi4zYWE3N2E4OTJk
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tp
ZVV0aWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29r
aWVVdGlsLmNwcApAQCAtMTQxLDEwICsxNDEsMTAgQEAgc3RhdGljIHZvaWQgcGFyc2VDb29raWVB
dHRyaWJ1dGVzKGNvbnN0IFN0cmluZyYgYXR0cmlidXRlLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwK
ICAgICB9CiB9CiAKLWJvb2wgcGFyc2VDb29raWVIZWFkZXIoY29uc3QgU3RyaW5nJiBjb29raWVM
aW5lLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgQ29va2llJiByZXN1bHQpCitzdGQ6Om9wdGlvbmFs
PENvb2tpZT4gcGFyc2VDb29raWVIZWFkZXIoY29uc3QgU3RyaW5nJiBjb29raWVMaW5lLCBjb25z
dCBTdHJpbmcmIGRvbWFpbikKIHsKICAgICBpZiAoY29va2llTGluZS5sZW5ndGgoKSA+PSBNQVhf
Q09PS0lFX0xJTkUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKIAogICAgIC8vIFRoaXMgQWxnb3JpdGhtIGlzIGJhc2VkIG9uIHRoZSBhbGdvcml0
aG0gZGVmaW5lZCBpbiBSRkMgNjI2NSA1LjIgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3Jm
YzYyNjUjc2VjdGlvbi01LjIvCiAKQEAgLTE2NSwxNiArMTY1LDE3IEBAIGJvb2wgcGFyc2VDb29r
aWVIZWFkZXIoY29uc3QgU3RyaW5nJiBjb29raWVMaW5lLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwg
Q29va2llJiByCiAgICAgICAgIGNvb2tpZVZhbHVlID0gY29va2llUGFpci5zdWJzdHJpbmcoYXNz
aWdubWVudFBvc2l0aW9uICsgMSk7CiAgICAgfQogCi0gICAgcmVzdWx0Lm5hbWUgPSBjb29raWVO
YW1lLnN0cmlwV2hpdGVTcGFjZSgpOwotICAgIHJlc3VsdC52YWx1ZSA9IGNvb2tpZVZhbHVlLnN0
cmlwV2hpdGVTcGFjZSgpOworICAgIENvb2tpZSBjb29raWU7CisgICAgY29va2llLm5hbWUgPSBj
b29raWVOYW1lLnN0cmlwV2hpdGVTcGFjZSgpOworICAgIGNvb2tpZS52YWx1ZSA9IGNvb2tpZVZh
bHVlLnN0cmlwV2hpdGVTcGFjZSgpOwogCiAgICAgYm9vbCBoYXNNYXhBZ2UgPSBmYWxzZTsKLSAg
ICByZXN1bHQuc2Vzc2lvbiA9IHRydWU7CisgICAgY29va2llLnNlc3Npb24gPSB0cnVlOwogCiAg
ICAgZm9yIChhdXRvIGF0dHJpYnV0ZSA6IGNvb2tpZUxpbmUuc3BsaXRBbGxvd2luZ0VtcHR5RW50
cmllcygnOycpKQotICAgICAgICBwYXJzZUNvb2tpZUF0dHJpYnV0ZXMoYXR0cmlidXRlLCBkb21h
aW4sIGhhc01heEFnZSwgcmVzdWx0KTsKKyAgICAgICAgcGFyc2VDb29raWVBdHRyaWJ1dGVzKGF0
dHJpYnV0ZSwgZG9tYWluLCBoYXNNYXhBZ2UsIGNvb2tpZSk7CiAKLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4gY29va2llOwogfQogCiBTdHJpbmcgZGVmYXVsdFBhdGhGb3JVUkwoY29uc3Qg
VVJMJiB1cmwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvQ29va2llVXRpbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nv
b2tpZVV0aWwuaAppbmRleCBhODljOWFiN2I5Ni4uNDkwZDM2MmJiZDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVVdGlsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZVV0aWwuaApAQCAtMzQsOSAr
MzQsOSBAQCBzdHJ1Y3QgQ29va2llOwogCiBuYW1lc3BhY2UgQ29va2llVXRpbCB7CiAKLWJvb2wg
cGFyc2VDb29raWVIZWFkZXIoY29uc3QgU3RyaW5nJiBjb29raWVMaW5lLCBjb25zdCBTdHJpbmcm
IGRvbWFpbiwgQ29va2llJiByZXN1bHQpOworc3RkOjpvcHRpb25hbDxDb29raWU+IHBhcnNlQ29v
a2llSGVhZGVyKGNvbnN0IFN0cmluZyYgY29va2llTGluZSwgY29uc3QgU3RyaW5nJiBkb21haW4p
OwogCi1ib29sIGlzSVBBZGRyZXNzKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpOworYm9vbCBpc0lQ
QWRkcmVzcyhjb25zdCBTdHJpbmcmKTsKIAogYm9vbCBkb21haW5NYXRjaChjb25zdCBTdHJpbmcm
IGNvb2tpZURvbWFpbiwgY29uc3QgU3RyaW5nJiBob3N0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCmluZGV4IDU0MzZhMjZhZDUxLi43OGQ1NmU3
OTVkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0ZW1X
aW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNw
cApAQCAtMzc2LDEwICszNzYsOCBAQCBzdGF0aWMgU3RyaW5nIGNhY2hlZFN0b3JhZ2VEaXJlY3Rv
cnkoRFdPUkQgcGF0aElkZW50aWZpZXIpCiAgICAgcmV0dXJuIGRpcmVjdG9yeTsKIH0KIAotU3Ry
aW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYsIFBsYXRmb3JtRmlsZUhhbmRsZSYg
aGFuZGxlKQorc3RhdGljIFN0cmluZyBnZW5lcmF0ZVRlbXBvcmFyeVBhdGgoY29uc3QgRnVuY3Rp
b248Ym9vbChjb25zdCBTdHJpbmcmKT4mIGFjdGlvbikKIHsKLSAgICBoYW5kbGUgPSBJTlZBTElE
X0hBTkRMRV9WQUxVRTsKLQogICAgIHdjaGFyX3QgdGVtcFBhdGhbTUFYX1BBVEhdOwogICAgIGlu
dCB0ZW1wUGF0aExlbmd0aCA9IDo6R2V0VGVtcFBhdGhXKFdURl9BUlJBWV9MRU5HVEgodGVtcFBh
dGgpLCB0ZW1wUGF0aCk7CiAgICAgaWYgKHRlbXBQYXRoTGVuZ3RoIDw9IDAgfHwgdGVtcFBhdGhM
ZW5ndGggPiBXVEZfQVJSQVlfTEVOR1RIKHRlbXBQYXRoKSkKQEAgLTQwMiwxMCArNDAwLDIxIEBA
IFN0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmLCBQbGF0Zm9ybUZpbGVIYW5k
bGUmIGhhbmRsZSkKICAgICAgICAgcHJvcG9zZWRQYXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50KG51bGxUZXJtaW5hdGVkV0NoYXJUb1N0cmluZyh0ZW1wUGF0aCksIG51bGxUZXJtaW5hdGVk
V0NoYXJUb1N0cmluZyh0ZW1wRmlsZSkpOwogICAgICAgICBpZiAocHJvcG9zZWRQYXRoLmlzRW1w
dHkoKSkKICAgICAgICAgICAgIGJyZWFrOworICAgIH0gd2hpbGUgKCFhY3Rpb24ocHJvcG9zZWRQ
YXRoKSk7CisKKyAgICByZXR1cm4gcHJvcG9zZWRQYXRoOworfQorCitTdHJpbmcgb3BlblRlbXBv
cmFyeUZpbGUoY29uc3QgU3RyaW5nJiwgUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCit7Cisg
ICAgaGFuZGxlID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CiAKKyAgICBTdHJpbmcgcHJvcG9zZWRQ
YXRoID0gZ2VuZXJhdGVUZW1wb3JhcnlQYXRoKFsmaGFuZGxlXShjb25zdCBTdHJpbmcmIHByb3Bv
c2VkUGF0aCkgewogICAgICAgICAvLyB1c2UgQ1JFQVRFX05FVyB0byBhdm9pZCBvdmVyd3JpdGlu
ZyBhbiBleGlzdGluZyBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZQogICAgICAgICBoYW5kbGUgPSA6
OkNyZWF0ZUZpbGVXKHN0cmluZ1RvTnVsbFRlcm1pbmF0ZWRXQ2hhcihwcm9wb3NlZFBhdGgpLmRh
dGEoKSwgR0VORVJJQ19SRUFEIHwgR0VORVJJQ19XUklURSwgMCwgMCwgQ1JFQVRFX05FVywgRklM
RV9BVFRSSUJVVEVfTk9STUFMLCAwKTsKLSAgICB9IHdoaWxlICghaXNIYW5kbGVWYWxpZChoYW5k
bGUpICYmIEdldExhc3RFcnJvcigpID09IEVSUk9SX0FMUkVBRFlfRVhJU1RTKTsKKworICAgICAg
ICByZXR1cm4gaXNIYW5kbGVWYWxpZChoYW5kbGUpIHx8IEdldExhc3RFcnJvcigpID09IEVSUk9S
X0FMUkVBRFlfRVhJU1RTOworICAgIH0pOwogCiAgICAgaWYgKCFpc0hhbmRsZVZhbGlkKGhhbmRs
ZSkpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKQEAgLTU1MSw1ICs1NjAsMjcgQEAgU3RyaW5n
IHJlYWxQYXRoKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpCiAgICAgcmV0dXJuIGdldEZpbmFsUGF0
aE5hbWUoZmlsZVBhdGgpOwogfQogCitTdHJpbmcgY3JlYXRlVGVtcG9yYXJ5RGlyZWN0b3J5KCkK
K3sKKyAgICByZXR1cm4gZ2VuZXJhdGVUZW1wb3JhcnlQYXRoKFtdKGNvbnN0IFN0cmluZyYgcHJv
cG9zZWRQYXRoKSB7CisgICAgICAgIHJldHVybiBtYWtlQWxsRGlyZWN0b3JpZXMocHJvcG9zZWRQ
YXRoKTsKKyAgICB9KTsKK30KKworYm9vbCBkZWxldGVOb25FbXB0eURpcmVjdG9yeShjb25zdCBT
dHJpbmcmIGRpcmVjdG9yeVBhdGgpCit7CisgICAgU0hGSUxFT1BTVFJVQ1QgZGVsZXRlT3BlcmF0
aW9uID0geworICAgICAgICBudWxscHRyLAorICAgICAgICBGT19ERUxFVEUsCisgICAgICAgIHN0
cmluZ1RvTnVsbFRlcm1pbmF0ZWRXQ2hhcihkaXJlY3RvcnlQYXRoKS5kYXRhKCksCisgICAgICAg
IEwiIiwKKyAgICAgICAgRk9GX05PQ09ORklSTUFUSU9OIHwgRk9GX05PRVJST1JVSSB8IEZPRl9T
SUxFTlQsCisgICAgICAgIGZhbHNlLAorICAgICAgICAwLAorICAgICAgICBMIiIKKyAgICB9Owor
ICAgIHJldHVybiAhU0hGaWxlT3BlcmF0aW9uKCZkZWxldGVPcGVyYXRpb24pOworfQorCiB9IC8v
IG5hbWVzcGFjZSBGaWxlU3lzdGVtCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMmI2Yzc3NTM0MDQuLjE5
NmQ5ZTYyYjIxIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTgtMTEtMDkgIEJhc3VrZSBTdXp1a2kgIDxiYXN1a2Uu
c3V6dWtpQHNvbnkuY29tPgorCisgICAgICAgIFtDdXJsXSBBZGQgQVBJIFRlc3QgZm9yIEN1cmwg
Y29va2llIGJhY2tlbmQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTE0OTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgdW5pdCB0ZXN0IHRvIFRlc3RXZWJDb3JlLgorCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9QbGF0Zm9ybVdpbi5jbWFrZToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvY3VybC9Db29raWVzLmNwcDogQWRkZWQuCisKIDIwMTgtMTEtMDcgIERhbmllbCBC
YXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIE92ZXJyaWRlICtbVUlLZXlib2Fy
ZCBpc0luSGFyZHdhcmVLZXlib2FyZE1vZGVdIGluIFdlYktpdFRlc3RSdW5uZXIgYW5kIER1bXBS
ZW5kZXJUcmVlCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2luLmNt
YWtlIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdpbi5jbWFrZQppbmRleCBmMTNiODJl
YWU3NS4uMzY1MGU0MDY0NWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZv
cm1XaW4uY21ha2UKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdpbi5jbWFrZQpA
QCAtNzQsNiArNzQsNyBAQCBpZiAoJHtXVEZfUExBVEZPUk1fV0lOX0NBSVJPfSkKICAgICAgICAg
dmNydW50aW1lCiAgICAgKQogICAgIGxpc3QoQVBQRU5EIFRlc3RXZWJDb3JlTGliX1NPVVJDRVMK
KyAgICAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9jdXJsL0Nvb2tpZXMu
Y3BwCiAgICAgICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dlYkNvcmUvd2luL0JpdG1h
cEltYWdlLmNwcAogICAgICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL0Ny
eXB0b0RpZ2VzdC5jcHAKICAgICAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29y
ZS9QdWJsaWNTdWZmaXguY3BwCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvY3VybC9Db29raWVzLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9jdXJsL0Nvb2tpZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwLi5iMWEyOTNiNTIwNQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9jdXJsL0Nvb2tpZXMuY3BwCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTggU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKENVUkwpCisKKyNpbmNsdWRl
IDxXZWJDb3JlL0Nvb2tpZUphckRCLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Db29raWVVdGlsLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+CisjaW5jbHVkZSA8bWVtb3J5PgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitj
bGFzcyBDdXJsQ29va2llczogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIHZv
aWQgU2V0VXAoKSBmaW5hbAorICAgIHsKKyAgICAgICAgbV9jb29raWVEaXJlY3RvcnkgPSBGaWxl
U3lzdGVtOjpjcmVhdGVUZW1wb3JhcnlEaXJlY3RvcnkoKTsKKworICAgICAgICBtX2Nvb2tpZUph
ciA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViQ29yZTo6Q29va2llSmFyREI+KEZpbGVTeXN0ZW06OnBh
dGhCeUFwcGVuZGluZ0NvbXBvbmVudChtX2Nvb2tpZURpcmVjdG9yeSwgImNvb2tpZWRiLnNxbCIp
KTsKKyAgICAgICAgbV9jb29raWVKYXItPm9wZW4oKTsKKyAgICAgICAgbV9jb29raWVKYXItPnNl
dEVuYWJsZWQodHJ1ZSk7CisgICAgfQorCisgICAgdm9pZCBUZWFyRG93bigpIGZpbmFsCisgICAg
eworICAgICAgICBtX2Nvb2tpZUphciA9IG51bGxwdHI7CisKKyAgICAgICAgRmlsZVN5c3RlbTo6
ZGVsZXRlTm9uRW1wdHlEaXJlY3RvcnkobV9jb29raWVEaXJlY3RvcnkpOworICAgICAgICBtX2Nv
b2tpZURpcmVjdG9yeSA9IFN0cmluZygpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHN0ZDo6
dW5pcXVlX3B0cjxDb29raWVKYXJEQj4gbV9jb29raWVKYXI7CisgICAgU3RyaW5nIG1fY29va2ll
RGlyZWN0b3J5OworfTsKKworVEVTVF9GKEN1cmxDb29raWVzLCBUZXN0SHR0cE9ubHlDYXNlKQor
eworICAgIC8vIHN1Y2Nlc3M6IGZyb20gbmV0d29yaworICAgIEVYUEVDVF9UUlVFKG1fY29va2ll
SmFyLT5zZXRDb29raWUoImh0dHA6Ly9leGFtcGxlLmNvbSIsICJmb289YmFyOyBIdHRwT25seSIs
IENvb2tpZUphckRCOjpTb3VyY2U6Ok5ldHdvcmspKTsKKyAgICAvLyBzdWNjZXNzOiB3aWxkY2Fy
ZCBvZiBkb21haW5zCisgICAgRVhQRUNUX1RSVUUobV9jb29raWVKYXItPnNldENvb2tpZSgiaHR0
cDovL2V4YW1wbGUuY29tIiwgImJpbmdvPWJvbmdvOyIsIENvb2tpZUphckRCOjpTb3VyY2U6OlNj
cmlwdCkpOworICAgIC8vIGZhaWx1cmU6IGZvbyBpcyBhbHJlYWR5IHN0b3JlZCBhcyBIdHRwT25s
eQorICAgIEVYUEVDVF9GQUxTRShtX2Nvb2tpZUphci0+c2V0Q29va2llKCJodHRwOi8vZXhhbXBs
ZS5jb20iLCAiZm9vPWJhcjsiLCBDb29raWVKYXJEQjo6U291cmNlOjpTY3JpcHQpKTsKKyAgICAv
LyBmYWlsdXJlOiBpbmNvbnNpc3RlbnQuIFNvdXJjZSBpcyBTY3JpcHQsIGJ1dCBhdHRyaWJ1dGUg
c2F5cyBIdHRwT25seQorICAgIEVYUEVDVF9GQUxTRShtX2Nvb2tpZUphci0+c2V0Q29va2llKCJo
dHRwOi8vZXhhbXBsZS5jb20iLCAiZm9vPWJhcjsgSHR0cE9ubHkiLCBDb29raWVKYXJEQjo6U291
cmNlOjpTY3JpcHQpKTsKK30KKworfQorCisjZW5kaWYgLy8gVVNFKENVUkwpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354582</attachid>
            <date>2018-11-12 13:28:00 -0800</date>
            <delta_ts>2018-11-12 14:29:03 -0800</delta_ts>
            <desc>Fix</desc>
            <filename>191493.diff</filename>
            <type>text/plain</type>
            <size>28693</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyNWU0YTFhNmMzMi4uOTEyYTNjMzU3MjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MiBAQAorMjAxOC0xMS0wOSAgQmFzdWtlIFN1enVraSAgPGJhc3VrZS5zdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIEFkZCBBUEkgVGVzdCBmb3IgQ3VybCBjb29raWUgYmFj
a2VuZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
MTQ5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJl
ZmFjdG9yaW5nIGZvciBjb29raWUgYmFja2VuZCBpbnRlcmZhY2UuCisKKyAgICAgICAgVGVzdHM6
IFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jdXJsL0Nvb2tpZXMuY3BwCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9GaWxlU3lzdGVtLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJs
L0Nvb2tpZUphckN1cmxEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb29raWVzRm9y
U2Vzc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXJDdXJsRGF0YWJhc2U6OnNldENv
b2tpZXNGcm9tRE9NIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckN1cmxEYXRh
YmFzZTo6c2V0Q29va2llc0Zyb21IVFRQUmVzcG9uc2UgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyQ3VybERhdGFiYXNlOjpnZXRSYXdDb29raWVzIGNvbnN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q29va2llSmFyREI6Om9wZW5EYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVK
YXJEQjo6Y2hlY2tTUUxpdGVSZXR1cm5Db2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUph
ckRCOjppc0VuYWJsZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OnNl
YXJjaENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyREI6OnNldENvb2tpZSk6
CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXJEQjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvb2tpZUphckRCOjpkZWxldGVDb29raWVJbnRlcm5hbCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb29raWVKYXJEQjo6ZGVsZXRlQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpD
b29raWVKYXJEQjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVK
YXJEQjo6ZXhlY3V0ZVNpbXBsZVNxbCk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXJEQjo6
aXNFbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29v
a2llSmFyREIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llVXRpbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVVdGlsOjpwYXJzZUNvb2tpZUhlYWRlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZVV0aWwuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlU3lz
dGVtOjpnZW5lcmF0ZVRlbXBvcmFyeVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVN5c3Rl
bTo6b3BlblRlbXBvcmFyeUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVN5c3RlbTo6Y3Jl
YXRlVGVtcG9yYXJ5RGlyZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVTeXN0ZW06OmRl
bGV0ZU5vbkVtcHR5RGlyZWN0b3J5KToKKwogMjAxOC0xMS0wNyAgRG9uIE9sbXN0ZWFkICA8ZG9u
Lm9sbXN0ZWFkQHNvbnkuY29tPgogCiAgICAgICAgIFNpbXBsaWZ5IG1hY3JvcyBpbiBwbGF0Zm9y
bQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oCmluZGV4IGE1MmFiNGM3Y2Y0Li5lMTQw
YjI0NTdlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaApAQCAtMTg3LDYgKzE4
NywxMSBAQCBXRUJDT1JFX0VYUE9SVCBOU1N0cmluZyAqY3JlYXRlVGVtcG9yYXJ5RGlyZWN0b3J5
KE5TU3RyaW5nICpkaXJlY3RvcnlQcmVmaXgpOwogV0VCQ09SRV9FWFBPUlQgYm9vbCBkZWxldGVO
b25FbXB0eURpcmVjdG9yeShjb25zdCBTdHJpbmcmKTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0o
V0lOX0NBSVJPKQorV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGNyZWF0ZVRlbXBvcmFyeURpcmVjdG9y
eSgpOworV0VCQ09SRV9FWFBPUlQgYm9vbCBkZWxldGVOb25FbXB0eURpcmVjdG9yeShjb25zdCBT
dHJpbmcmKTsKKyNlbmRpZgorCiBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgcmVhbFBhdGgoY29uc3Qg
U3RyaW5nJik7CiAKIGNsYXNzIE1hcHBlZEZpbGVEYXRhIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsRGF0YWJhc2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmxEYXRhYmFz
ZS5jcHAKaW5kZXggNWU4NDU0YWE1NGEuLjkwNDBmYjY0ZWY0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybERhdGFiYXNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybERh
dGFiYXNlLmNwcApAQCAtNDcsMTQgKzQ3LDEzIEBAIHN0YXRpYyBTdHJpbmcgY29va2llc0ZvclNl
c3Npb24oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwmCiAg
ICAgYXV0byBzZWFyY2hIVFRQT25seSA9IChmb3JIVFRQSGVhZGVyID8gc3RkOjpudWxsb3B0IDog
c3RkOjpvcHRpb25hbDxib29sPiB7ZmFsc2V9KTsKICAgICBhdXRvIHNlY3VyZSA9IHVybC5wcm90
b2NvbElzKCJodHRwcyIpID8gc3RkOjpudWxsb3B0IDogc3RkOjpvcHRpb25hbDxib29sPiB7ZmFs
c2V9OwogCi0gICAgVmVjdG9yPENvb2tpZT4gcmVzdWx0czsKLSAgICBpZiAoY29va2llSmFyREIu
c2VhcmNoQ29va2llcyh1cmwuc3RyaW5nKCksIHNlYXJjaEhUVFBPbmx5LCBzZWN1cmUsIHN0ZDo6
bnVsbG9wdCwgcmVzdWx0cykpIHsKLSAgICAgICAgZm9yIChhdXRvIHJlc3VsdCA6IHJlc3VsdHMp
IHsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBjb29raWVKYXJEQi5zZWFyY2hDb29raWVzKHVybC5z
dHJpbmcoKSwgc2VhcmNoSFRUUE9ubHksIHNlY3VyZSwgc3RkOjpudWxsb3B0KSkgeworICAgICAg
ICBmb3IgKGF1dG8gY29va2llIDogKnJlc3VsdCkgewogICAgICAgICAgICAgaWYgKCFjb29raWVz
LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBjb29raWVzLmFwcGVuZCgiOyAiKTsKLSAgICAg
ICAgICAgIGNvb2tpZXMuYXBwZW5kKHJlc3VsdC5uYW1lKTsKKyAgICAgICAgICAgIGNvb2tpZXMu
YXBwZW5kKGNvb2tpZS5uYW1lKTsKICAgICAgICAgICAgIGNvb2tpZXMuYXBwZW5kKCI9Iik7Ci0g
ICAgICAgICAgICBjb29raWVzLmFwcGVuZChyZXN1bHQudmFsdWUpOworICAgICAgICAgICAgY29v
a2llcy5hcHBlbmQoY29va2llLnZhbHVlKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4g
Y29va2llcy50b1N0cmluZygpOwpAQCAtNjcsMTMgKzY2LDEzIEBAIHZvaWQgQ29va2llSmFyQ3Vy
bERhdGFiYXNlOjpzZXRDb29raWVzRnJvbURPTShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24m
IHNlc3NpCiAgICAgVU5VU0VEX1BBUkFNKGZpcnN0UGFydHkpOwogCiAgICAgQ29va2llSmFyREIm
IGNvb2tpZUphckRCID0gc2Vzc2lvbi5jb29raWVEYXRhYmFzZSgpOwotICAgIGNvb2tpZUphckRC
LnNldENvb2tpZSh1cmwuc3RyaW5nKCksIHZhbHVlLCB0cnVlKTsKKyAgICBjb29raWVKYXJEQi5z
ZXRDb29raWUodXJsLnN0cmluZygpLCB2YWx1ZSwgQ29va2llSmFyREI6OlNvdXJjZTo6U2NyaXB0
KTsKIH0KIAogdm9pZCBDb29raWVKYXJDdXJsRGF0YWJhc2U6OnNldENvb2tpZXNGcm9tSFRUUFJl
c3BvbnNlKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0CiB7CiAgICAgQ29va2llSmFyREImIGNvb2tp
ZUphckRCID0gc2Vzc2lvbi5jb29raWVEYXRhYmFzZSgpOwotICAgIGNvb2tpZUphckRCLnNldENv
b2tpZSh1cmwuc3RyaW5nKCksIHZhbHVlLCBmYWxzZSk7CisgICAgY29va2llSmFyREIuc2V0Q29v
a2llKHVybC5zdHJpbmcoKSwgdmFsdWUsIENvb2tpZUphckRCOjpTb3VyY2U6Ok5ldHdvcmspOwog
fQogCiBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBDb29raWVKYXJDdXJsRGF0YWJhc2U6OmNvb2tp
ZXNGb3JET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwm
IGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYsIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9w
dGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQs
IEluY2x1ZGVTZWN1cmVDb29raWVzKSBjb25zdApAQCAtMTEwLDcgKzEwOSwxMSBAQCBib29sIENv
b2tpZUphckN1cmxEYXRhYmFzZTo6Z2V0UmF3Q29va2llcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNl
c3Npb24mIHNlc3Npb24sCiAgICAgVU5VU0VEX1BBUkFNKHBhZ2VJRCk7CiAKICAgICBDb29raWVK
YXJEQiYgY29va2llSmFyREIgPSBzZXNzaW9uLmNvb2tpZURhdGFiYXNlKCk7Ci0gICAgcmV0dXJu
IGNvb2tpZUphckRCLnNlYXJjaENvb2tpZXMoZmlyc3RQYXJ0eS5zdHJpbmcoKSwgc3RkOjpudWxs
b3B0LCBzdGQ6Om51bGxvcHQsIHN0ZDo6bnVsbG9wdCwgcmF3Q29va2llcyk7CisgICAgaWYgKGF1
dG8gY29va2llcyA9IGNvb2tpZUphckRCLnNlYXJjaENvb2tpZXMoZmlyc3RQYXJ0eS5zdHJpbmco
KSwgc3RkOjpudWxsb3B0LCBzdGQ6Om51bGxvcHQsIHN0ZDo6bnVsbG9wdCkpIHsKKyAgICAgICAg
cmF3Q29va2llcyA9IFdURk1vdmUoKmNvb2tpZXMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIENvb2tpZUphckN1cmxEYXRhYmFzZTo6
ZGVsZXRlQ29va2llKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3Qg
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJEQi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIuY3BwCmluZGV4IDQyMDQ5ZWQ0
N2M5Li42MzUwODYwYzVlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL0Nvb2tpZUphckRCLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvQ29va2llSmFyREIuY3BwCkBAIC0xMTcsNyArMTE3LDcgQEAgYm9vbCBDb29r
aWVKYXJEQjo6b3BlbkRhdGFiYXNlKCkKICAgICBpZiAoZXhpc3RzRGF0YWJhc2VGaWxlKSB7CiAg
ICAgICAgIGlmIChtX2RhdGFiYXNlLm9wZW4obV9kYXRhYmFzZVBhdGgsIGZhbHNlKSkgewogICAg
ICAgICAgICAgaWYgKGNoZWNrRGF0YWJhc2VWYWxpZGl0eSgpKQotICAgICAgICAgICAgICAgIGV4
ZWN1dGVTaW1wbGVTcWwoREVMRVRFX0FMTF9TRVNTSU9OX0NPT0tJRV9TUUwpOworICAgICAgICAg
ICAgICAgIGV4ZWN1dGVTcWwoREVMRVRFX0FMTF9TRVNTSU9OX0NPT0tJRV9TUUwpOwogICAgICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gZGVsZXRlIGRhdGFiYXNlIGFuZCB0cnkg
dG8gcmUtY3JlYXRlIGFnYWluCiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJDb29raWUgZGF0
YWJhc2UgdmFsaWRpdHkgY2hlY2sgZmFpbGVkLCBhdHRlbXB0aW5nIHRvIHJlY3JlYXRlIHRoZSBk
YXRhYmFzZSIpOwpAQCAtMTQ3LDE4ICsxNDcsMTUgQEAgYm9vbCBDb29raWVKYXJEQjo6b3BlbkRh
dGFiYXNlKCkKIAogICAgIHZlcmlmeVNjaGVtYVZlcnNpb24oKTsKIAotICAgIGJvb2wgZGF0YWJh
c2VWYWxpZGl0eSA9IHRydWU7CiAgICAgaWYgKCFleGlzdHNEYXRhYmFzZUZpbGUgfHwgIW1fZGF0
YWJhc2UudGFibGVFeGlzdHMoIkNvb2tpZSIpKSB7Ci0gICAgICAgIGRhdGFiYXNlVmFsaWRpdHkg
Jj0gKGV4ZWN1dGVTaW1wbGVTcWwoQ1JFQVRFX0NPT0tJRV9UQUJMRV9TUUwpID09IFNRTElURV9E
T05FKTsKLSAgICAgICAgZGF0YWJhc2VWYWxpZGl0eSAmPSAoZXhlY3V0ZVNpbXBsZVNxbChDUkVB
VEVfRE9NQUlOX0lOREVYX1NRTCkgPT0gU1FMSVRFX0RPTkUpOwotICAgICAgICBkYXRhYmFzZVZh
bGlkaXR5ICY9IChleGVjdXRlU2ltcGxlU3FsKENSRUFURV9QQVRIX0lOREVYX1NRTCkgPT0gU1FM
SVRFX0RPTkUpOwotICAgIH0KKyAgICAgICAgYm9vbCBvayA9IGV4ZWN1dGVTcWwoQ1JFQVRFX0NP
T0tJRV9UQUJMRV9TUUwpICYmIGV4ZWN1dGVTcWwoQ1JFQVRFX0RPTUFJTl9JTkRFWF9TUUwpICYm
IGV4ZWN1dGVTcWwoQ1JFQVRFX1BBVEhfSU5ERVhfU1FMKTsKIAotICAgIGlmICghZGF0YWJhc2VW
YWxpZGl0eSkgewotICAgICAgICAvLyBnaXZlIHVwIGNyZWF0ZSBkYXRhYmFzZSBhdCB0aGlzIHRp
bWUgKGFsbCBjb29raWVzIG9uIHJlcXVlc3QvcmVzcG9uc2UgYXJlIGlnbm9yZWQpCi0gICAgICAg
IG1fZGF0YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgZGVsZXRlQWxsRGF0YWJhc2VGaWxlcygpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghb2spIHsKKyAgICAgICAgICAgIC8v
IGdpdmUgdXAgY3JlYXRlIGRhdGFiYXNlIGF0IHRoaXMgdGltZSAoYWxsIGNvb2tpZXMgb24gcmVx
dWVzdC9yZXNwb25zZSBhcmUgaWdub3JlZCkKKyAgICAgICAgICAgIG1fZGF0YWJhc2UuY2xvc2Uo
KTsKKyAgICAgICAgICAgIGRlbGV0ZUFsbERhdGFiYXNlRmlsZXMoKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIG1fZGF0YWJhc2Uuc2V0U3luY2hy
b25vdXMoU1FMaXRlRGF0YWJhc2U6OlN5bmNOb3JtYWwpOwpAQCAtMjA2LDcgKzIwMyw3IEBAIHZv
aWQgQ29va2llSmFyREI6OnZlcmlmeVNjaGVtYVZlcnNpb24oKQogICAgIH0KIAogICAgIC8vIFVw
ZGF0ZSB2ZXJzaW9uCi0gICAgZXhlY3V0ZVNpbXBsZVNxbChTdHJpbmc6OmZvcm1hdCgiUFJBR01B
IHVzZXJfdmVyc2lvbj0lZCIsIHNjaGVtYVZlcnNpb24pKTsKKyAgICBleGVjdXRlU3FsKFN0cmlu
Zzo6Zm9ybWF0KCJQUkFHTUEgdXNlcl92ZXJzaW9uPSVkIiwgc2NoZW1hVmVyc2lvbikpOwogfQog
CiB2b2lkIENvb2tpZUphckRCOjpkZWxldGVBbGxUYWJsZXMoKQpAQCAtMjQ1LDEwICsyNDIsMTAg
QEAgYm9vbCBDb29raWVKYXJEQjo6Y2hlY2tEYXRhYmFzZUNvcnJ1cHRpb25BbmRSZW1vdmVJZk5l
ZWRlZCgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIENvb2tpZUphckRCOjpjaGVja1NR
TGl0ZVJldHVybkNvZGUoaW50IGFjdHVhbCkKK2Jvb2wgQ29va2llSmFyREI6OmNoZWNrU1FMaXRl
UmV0dXJuQ29kZShpbnQgY29kZSkKIHsKICAgICBpZiAoIW1fZGV0ZWN0ZWREYXRhYmFzZUNvcnJ1
cHRpb24pIHsKLSAgICAgICAgc3dpdGNoIChhY3R1YWwpIHsKKyAgICAgICAgc3dpdGNoIChjb2Rl
KSB7CiAgICAgICAgIGNhc2UgU1FMSVRFX0NPUlJVUFQ6CiAgICAgICAgIGNhc2UgU1FMSVRFX1ND
SEVNQToKICAgICAgICAgY2FzZSBTUUxJVEVfRk9STUFUOgpAQCAtMjU3LDYgKzI1NCw3IEBAIHZv
aWQgQ29va2llSmFyREI6OmNoZWNrU1FMaXRlUmV0dXJuQ29kZShpbnQgYWN0dWFsKQogICAgICAg
ICAgICAgbV9kZXRlY3RlZERhdGFiYXNlQ29ycnVwdGlvbiA9IHRydWU7CiAgICAgICAgIH0KICAg
ICB9CisgICAgcmV0dXJuIGNvZGUgPT0gU1FMSVRFX09LIHx8IGNvZGUgPT0gU1FMSVRFX0RPTkUg
fHwgY29kZSA9PSBTUUxJVEVfUk9XOwogfQogCiBib29sIENvb2tpZUphckRCOjpjaGVja0RhdGFi
YXNlVmFsaWRpdHkoKQpAQCAtMzA2LDcgKzMwNCw3IEBAIHZvaWQgQ29va2llSmFyREI6OmRlbGV0
ZUFsbERhdGFiYXNlRmlsZXMoKQogICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV9kYXRhYmFz
ZVBhdGggKyAiLXdhbCIpOwogfQogCi1ib29sIENvb2tpZUphckRCOjppc0VuYWJsZWQoKQorYm9v
bCBDb29raWVKYXJEQjo6aXNFbmFibGVkKCkgY29uc3QKIHsKICAgICBpZiAobV9kYXRhYmFzZVBh
dGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMTQsMTcgKzMxMiwxNyBA
QCBib29sIENvb2tpZUphckRCOjppc0VuYWJsZWQoKQogICAgIHJldHVybiBtX2lzRW5hYmxlZDsK
IH0KIAotYm9vbCBDb29raWVKYXJEQjo6c2VhcmNoQ29va2llcyhjb25zdCBTdHJpbmcmIHJlcXVl
c3RVcmwsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8Ym9vbD4mIGh0dHBPbmx5LCBjb25zdCBzdGQ6Om9w
dGlvbmFsPGJvb2w+JiBzZWN1cmUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8Ym9vbD4mIHNlc3Npb24s
IFZlY3RvcjxDb29raWU+JiByZXN1bHRzKQorc3RkOjpvcHRpb25hbDxWZWN0b3I8Q29va2llPj4g
Q29va2llSmFyREI6OnNlYXJjaENvb2tpZXMoY29uc3QgU3RyaW5nJiByZXF1ZXN0VXJsLCBjb25z
dCBzdGQ6Om9wdGlvbmFsPGJvb2w+JiBodHRwT25seSwgY29uc3Qgc3RkOjpvcHRpb25hbDxib29s
PiYgc2VjdXJlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPGJvb2w+JiBzZXNzaW9uKQogewogICAgIGlm
ICghaXNFbmFibGVkKCkgfHwgIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIFVSTCByZXF1ZXN0VXJs
T2JqKHsgfSwgcmVxdWVzdFVybCk7CiAgICAgU3RyaW5nIHJlcXVlc3RIb3N0KHJlcXVlc3RVcmxP
YmouaG9zdCgpLnRvU3RyaW5nKCkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CiAgICAgU3Ry
aW5nIHJlcXVlc3RQYXRoKHJlcXVlc3RVcmxPYmoucGF0aCgpLmNvbnZlcnRUb0FTQ0lJTG93ZXJj
YXNlKCkpOwogCiAgICAgaWYgKHJlcXVlc3RIb3N0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgaWYgKHJlcXVlc3RQ
YXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmVxdWVzdFBhdGggPSAiLyI7CkBAIC0zNDAsNyArMzM4
LDcgQEAgYm9vbCBDb29raWVKYXJEQjo6c2VhcmNoQ29va2llcyhjb25zdCBTdHJpbmcmIHJlcXVl
c3RVcmwsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8Ym8KIAogICAgIGF1dG8gcHN0bXQgPSBzdGQ6Om1h
a2VfdW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZSwgc3FsKTsKICAgICBpZiAoIXBz
dG10KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CiAKICAgICBwc3RtdC0+cHJlcGFyZSgpOwogICAgIHBzdG10LT5iaW5kSW50KDEsIGh0dHBPbmx5
ID8gKmh0dHBPbmx5IDogLTEpOwpAQCAtMzcwLDkgKzM2OCw5IEBAIGJvb2wgQ29va2llSmFyREI6
OnNlYXJjaENvb2tpZXMoY29uc3QgU3RyaW5nJiByZXF1ZXN0VXJsLCBjb25zdCBzdGQ6Om9wdGlv
bmFsPGJvCiAgICAgfQogCiAgICAgaWYgKCFwc3RtdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgcmVzdWx0cy5jbGVhcigpOworICAg
IFZlY3RvcjxDb29raWU+IHJlc3VsdHM7CiAKICAgICB3aGlsZSAocHN0bXQtPnN0ZXAoKSA9PSBT
UUxJVEVfUk9XKSB7CiAKQEAgLTQxMiw3ICs0MTAsNyBAQCBib29sIENvb2tpZUphckRCOjpzZWFy
Y2hDb29raWVzKGNvbnN0IFN0cmluZyYgcmVxdWVzdFVybCwgY29uc3Qgc3RkOjpvcHRpb25hbDxi
bwogICAgIH0KICAgICBwc3RtdC0+ZmluYWxpemUoKTsKIAotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiByZXN1bHRzOwogfQogCiBib29sIENvb2tpZUphckRCOjpoYXNIdHRwT25seUNvb2tp
ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcm
IHBhdGgpCkBAIC00MjgsNzUgKzQyNiw2OSBAQCBib29sIENvb2tpZUphckRCOjpoYXNIdHRwT25s
eUNvb2tpZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjbwogfQog
CiAKLWludCBDb29raWVKYXJEQjo6c2V0Q29va2llKGNvbnN0IENvb2tpZSYgY29va2llKQorYm9v
bCBDb29raWVKYXJEQjo6c2V0Q29va2llKGNvbnN0IENvb2tpZSYgY29va2llKQogewotICAgIGlu
dCByZXQgPSAwOwogICAgIGlmICghY29va2llLnNlc3Npb24gJiYgTW9ub3RvbmljVGltZTo6ZnJv
bVJhd1NlY29uZHMoY29va2llLmV4cGlyZXMpIDw9IE1vbm90b25pY1RpbWU6Om5vdygpKQotICAg
ICAgICByZXQgPSBkZWxldGVDb29raWVJbnRlcm5hbChjb29raWUubmFtZSwgY29va2llLmRvbWFp
biwgY29va2llLnBhdGgpOwotICAgIGVsc2UgewotICAgICAgICBTUUxpdGVTdGF0ZW1lbnQqIHN0
YXRlbWVudCA9IGdldFByZXBhcmVTdGF0ZW1lbnQoU0VUX0NPT0tJRV9TUUwpOwotICAgICAgICBB
U1NFUlQoc3RhdGVtZW50KTsKLQotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgc29t
ZSBldmljdGlvbiBwb2xpY3kgd2hlbiBhIGRvbWFpbiBnb2VzIG92ZXIgTUFYX0NPT0tJRV9QRVJf
RE9NQUlOCisgICAgICAgIHJldHVybiBkZWxldGVDb29raWVJbnRlcm5hbChjb29raWUubmFtZSwg
Y29va2llLmRvbWFpbiwgY29va2llLnBhdGgpOwogCi0gICAgICAgIHN0YXRlbWVudC0+YmluZFRl
eHQoMSwgY29va2llLm5hbWUpOwotICAgICAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDIsIGNvb2tp
ZS52YWx1ZSk7Ci0gICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMywgY29va2llLmRvbWFpbik7
Ci0gICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoNCwgY29va2llLnBhdGgpOwotICAgICAgICBz
dGF0ZW1lbnQtPmJpbmRJbnQ2NCg1LCBjb29raWUuc2Vzc2lvbiA/IDAgOiBzdGF0aWNfY2FzdDxp
bnQ2NF90Pihjb29raWUuZXhwaXJlcykpOwotICAgICAgICBzdGF0ZW1lbnQtPmJpbmRJbnQoNiwg
Y29va2llLnZhbHVlLmxlbmd0aCgpKTsKLSAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50KDcsIGNv
b2tpZS5zZXNzaW9uID8gMSA6IDApOwotICAgICAgICBzdGF0ZW1lbnQtPmJpbmRJbnQoOCwgY29v
a2llLmh0dHBPbmx5ID8gMSA6IDApOwotICAgICAgICBzdGF0ZW1lbnQtPmJpbmRJbnQoOSwgY29v
a2llLnNlY3VyZSA/IDEgOiAwKTsKLQotICAgICAgICByZXQgPSBzdGF0ZW1lbnQtPnN0ZXAoKTsK
LSAgICB9Ci0gICAgY2hlY2tTUUxpdGVSZXR1cm5Db2RlKHJldCk7Ci0gICAgQVNTRVJUKHJldCA9
PSBTUUxJVEVfRE9ORSk7CisgICAgU1FMaXRlU3RhdGVtZW50KiBzdGF0ZW1lbnQgPSBnZXRQcmVw
YXJlU3RhdGVtZW50KFNFVF9DT09LSUVfU1FMKTsKKyAgICBBU1NFUlQoc3RhdGVtZW50KTsKIAot
ICAgIHJldHVybiByZXQ7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZlIHNvbWUgZXZpY3Rp
b24gcG9saWN5IHdoZW4gYSBkb21haW4gZ29lcyBvdmVyIE1BWF9DT09LSUVfUEVSX0RPTUFJTgor
ICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgY29va2llLm5hbWUpOworICAgIHN0YXRlbWVudC0+
YmluZFRleHQoMiwgY29va2llLnZhbHVlKTsKKyAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDMsIGNv
b2tpZS5kb21haW4pOworICAgIHN0YXRlbWVudC0+YmluZFRleHQoNCwgY29va2llLnBhdGgpOwor
ICAgIHN0YXRlbWVudC0+YmluZEludDY0KDUsIGNvb2tpZS5zZXNzaW9uID8gMCA6IHN0YXRpY19j
YXN0PGludDY0X3Q+KGNvb2tpZS5leHBpcmVzKSk7CisgICAgc3RhdGVtZW50LT5iaW5kSW50KDYs
IGNvb2tpZS52YWx1ZS5sZW5ndGgoKSk7CisgICAgc3RhdGVtZW50LT5iaW5kSW50KDcsIGNvb2tp
ZS5zZXNzaW9uID8gMSA6IDApOworICAgIHN0YXRlbWVudC0+YmluZEludCg4LCBjb29raWUuaHR0
cE9ubHkgPyAxIDogMCk7CisgICAgc3RhdGVtZW50LT5iaW5kSW50KDksIGNvb2tpZS5zZWN1cmUg
PyAxIDogMCk7CisgICAgcmV0dXJuIGNoZWNrU1FMaXRlUmV0dXJuQ29kZShzdGF0ZW1lbnQtPnN0
ZXAoKSk7CiB9CiAKLWludCBDb29raWVKYXJEQjo6c2V0Q29va2llKGNvbnN0IFN0cmluZyYgdXJs
LCBjb25zdCBTdHJpbmcmIGNvb2tpZSwgYm9vbCBmcm9tSmF2YVNjcmlwdCkKK2Jvb2wgQ29va2ll
SmFyREI6OnNldENvb2tpZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBib2R5LCBD
b29raWVKYXJEQjo6U291cmNlIHNvdXJjZSkKIHsKICAgICBpZiAoIWlzRW5hYmxlZCgpIHx8ICFt
X2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGlmICh1cmwuaXNFbXB0eSgpIHx8IGNvb2tpZS5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiAtMTsKKyAgICBpZiAodXJsLmlzRW1wdHkoKSB8fCBib2R5LmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgVVJMIHVybE9iaih7IH0sIHVybCk7CiAgICAg
U3RyaW5nIGhvc3QodXJsT2JqLmhvc3QoKS50b1N0cmluZygpKTsKICAgICBTdHJpbmcgcGF0aCh1
cmxPYmoucGF0aCgpKTsKIAotICAgIENvb2tpZSBjb29raWVPYmo7Ci0gICAgaWYgKCFDb29raWVV
dGlsOjpwYXJzZUNvb2tpZUhlYWRlcihjb29raWUsIGhvc3QsIGNvb2tpZU9iaikpCi0gICAgICAg
IHJldHVybiAtMTsKKyAgICBhdXRvIGNvb2tpZSA9IENvb2tpZVV0aWw6OnBhcnNlQ29va2llSGVh
ZGVyKGJvZHksIGhvc3QpOworICAgIGlmICghY29va2llKQorICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBpZiAoY29va2llT2JqLmRvbWFpbi5pc0VtcHR5KCkpCi0gICAgICAgIGNvb2tpZU9i
ai5kb21haW4gPSBTdHJpbmcoaG9zdCk7CisgICAgaWYgKGNvb2tpZS0+ZG9tYWluLmlzRW1wdHko
KSkKKyAgICAgICAgY29va2llLT5kb21haW4gPSBTdHJpbmcoaG9zdCk7CiAKLSAgICBpZiAoY29v
a2llT2JqLnBhdGguaXNFbXB0eSgpKQotICAgICAgICBjb29raWVPYmoucGF0aCA9IENvb2tpZVV0
aWw6OmRlZmF1bHRQYXRoRm9yVVJMKHVybE9iaik7CisgICAgaWYgKGNvb2tpZS0+cGF0aC5pc0Vt
cHR5KCkpCisgICAgICAgIGNvb2tpZS0+cGF0aCA9IENvb2tpZVV0aWw6OmRlZmF1bHRQYXRoRm9y
VVJMKHVybE9iaik7CiAKICNpZiBFTkFCTEUoUFVCTElDX1NVRkZJWF9MSVNUKQotICAgIGlmIChp
c1B1YmxpY1N1ZmZpeChjb29raWVPYmouZG9tYWluKSkKLSAgICAgICAgcmV0dXJuIC0xOworICAg
IGlmIChpc1B1YmxpY1N1ZmZpeChjb29raWUtPmRvbWFpbikpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKICNlbmRpZgogCi0gICAgaWYgKGZyb21KYXZhU2NyaXB0ICYmIGNvb2tpZU9iai5odHRwT25s
eSkKLSAgICAgICAgcmV0dXJuIC0xOworICAgIGJvb2wgZnJvbUphdmFTY3JpcHQgPSBzb3VyY2Ug
PT0gQ29va2llSmFyREI6OlNvdXJjZTo6U2NyaXB0OworCisgICAgaWYgKGZyb21KYXZhU2NyaXB0
ICYmIGNvb2tpZS0+aHR0cE9ubHkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChm
cm9tSmF2YVNjcmlwdCAmJiBoYXNIdHRwT25seUNvb2tpZShjb29raWVPYmoubmFtZSwgY29va2ll
T2JqLmRvbWFpbiwgY29va2llT2JqLnBhdGgpKQotICAgICAgICByZXR1cm4gLTE7CisgICAgaWYg
KGZyb21KYXZhU2NyaXB0ICYmIGhhc0h0dHBPbmx5Q29va2llKGNvb2tpZS0+bmFtZSwgY29va2ll
LT5kb21haW4sIGNvb2tpZS0+cGF0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJl
dHVybiBzZXRDb29raWUoY29va2llT2JqKTsKKyAgICByZXR1cm4gc2V0Q29va2llKCpjb29raWUp
OwogfQogCi1pbnQgQ29va2llSmFyREI6OmRlbGV0ZUNvb2tpZShjb25zdCBTdHJpbmcmIHVybCwg
Y29uc3QgU3RyaW5nJiBuYW1lKQorYm9vbCBDb29raWVKYXJEQjo6ZGVsZXRlQ29va2llKGNvbnN0
IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgaWYgKCFpc0VuYWJsZWQo
KSB8fCAhbV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBTdHJpbmcgdXJsQ29waWVkID0gU3RyaW5nKHVybCk7CiAgICAg
aWYgKHVybENvcGllZC5zdGFydHNXaXRoKCcuJykpCkBAIC01MDYsMTcgKzQ5OCwxMyBAQCBpbnQg
Q29va2llSmFyREI6OmRlbGV0ZUNvb2tpZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5n
JiBuYW1lKQogICAgIGlmICh1cmxPYmouaXNWYWxpZCgpKSB7CiAgICAgICAgIFN0cmluZyBob3N0
U3RyKHVybE9iai5ob3N0KCkudG9TdHJpbmcoKSk7CiAgICAgICAgIFN0cmluZyBwYXRoU3RyKHVy
bE9iai5wYXRoKCkpOwotICAgICAgICBpbnQgcmV0ID0gZGVsZXRlQ29va2llSW50ZXJuYWwobmFt
ZSwgaG9zdFN0ciwgcGF0aFN0cik7Ci0gICAgICAgIGNoZWNrU1FMaXRlUmV0dXJuQ29kZShyZXQp
OwotICAgICAgICBBU1NFUlQocmV0ID09IFNRTElURV9ET05FKTsKLQotICAgICAgICByZXR1cm4g
cmV0OworICAgICAgICByZXR1cm4gZGVsZXRlQ29va2llSW50ZXJuYWwobmFtZSwgaG9zdFN0ciwg
cGF0aFN0cik7CiAgICAgfQogCi0gICAgcmV0dXJuIC0xOworICAgIHJldHVybiBmYWxzZTsKIH0K
IAotaW50IENvb2tpZUphckRCOjpkZWxldGVDb29raWVJbnRlcm5hbChjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIHBhdGgpCitib29sIENvb2tp
ZUphckRCOjpkZWxldGVDb29raWVJbnRlcm5hbChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgU1FMaXRlU3RhdGVtZW50
KiBzdGF0ZW1lbnQ7CiAgICAgaWYgKCFwYXRoLmlzRW1wdHkoKSkgewpAQCAtNTMyLDIyICs1MjAs
MjIgQEAgaW50IENvb2tpZUphckRCOjpkZWxldGVDb29raWVJbnRlcm5hbChjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgZG9tYWluLAogICAgICAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0
KDIsIGRvbWFpbik7CiAgICAgfQogCi0gICAgcmV0dXJuIHN0YXRlbWVudC0+c3RlcCgpOworICAg
IHJldHVybiBjaGVja1NRTGl0ZVJldHVybkNvZGUoc3RhdGVtZW50LT5zdGVwKCkpOwogfQogCi1p
bnQgQ29va2llSmFyREI6OmRlbGV0ZUNvb2tpZXMoY29uc3QgU3RyaW5nJikKK2Jvb2wgQ29va2ll
SmFyREI6OmRlbGV0ZUNvb2tpZXMoY29uc3QgU3RyaW5nJikKIHsKICAgICAvLyBOT1QgSU1QTEVN
RU5URUQKICAgICAvLyBUT0RPOiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGlmIGFwcGxp
Y2F0aW9uIGNhbGxzIFdLQ29va2llTWFuYWdlckRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZSgpIGlu
IFdLQ29va2llTWFuYWdlci5oLgotICAgIHJldHVybiAwOworICAgIHJldHVybiBmYWxzZTsKIH0K
IAotaW50IENvb2tpZUphckRCOjpkZWxldGVBbGxDb29raWVzKCkKK2Jvb2wgQ29va2llSmFyREI6
OmRlbGV0ZUFsbENvb2tpZXMoKQogewogICAgIGlmICghaXNFbmFibGVkKCkgfHwgIW1fZGF0YWJh
c2UuaXNPcGVuKCkpCi0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgcmV0dXJuIGV4ZWN1dGVTaW1wbGVTcWwoREVMRVRFX0FMTF9DT09LSUVfU1FMKTsKKyAg
ICByZXR1cm4gZXhlY3V0ZVNxbChERUxFVEVfQUxMX0NPT0tJRV9TUUwpOwogfQogCiB2b2lkIENv
b2tpZUphckRCOjpjcmVhdGVQcmVwYXJlU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3FsKQpAQCAt
NTY2LDE3ICs1NTQsMTggQEAgU1FMaXRlU3RhdGVtZW50KiBDb29raWVKYXJEQjo6Z2V0UHJlcGFy
ZVN0YXRlbWVudChjb25zdCBTdHJpbmcmIHNxbCkKICAgICByZXR1cm4gc3RhdGVtZW50OwogfQog
Ci1pbnQgQ29va2llSmFyREI6OmV4ZWN1dGVTaW1wbGVTcWwoY29uc3QgU3RyaW5nJiBzcWwsIGJv
b2wgaWdub3JlRXJyb3IpCitib29sIENvb2tpZUphckRCOjpleGVjdXRlU3FsKGNvbnN0IFN0cmlu
ZyYgc3FsKQogewogICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgc3Fs
KTsKICAgICBpbnQgcmV0ID0gc3RhdGVtZW50LnByZXBhcmVBbmRTdGVwKCk7CiAgICAgc3RhdGVt
ZW50LmZpbmFsaXplKCk7CiAKLSAgICBjaGVja1NRTGl0ZVJldHVybkNvZGUocmV0KTsKLSAgICBp
ZiAocmV0ICE9IFNRTElURV9PSyAmJiByZXQgIT0gU1FMSVRFX0RPTkUgJiYgcmV0ICE9IFNRTElU
RV9ST1cgJiYgIWlnbm9yZUVycm9yKQorICAgIGlmICghY2hlY2tTUUxpdGVSZXR1cm5Db2RlKHJl
dCkpIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZXhlY3V0ZSAlcyBlcnJvcjogJXMi
LCBzcWwuYXNjaWkoKS5kYXRhKCksIG1fZGF0YWJhc2UubGFzdEVycm9yTXNnKCkpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgcmV0dXJuIHJldDsKKyAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckRCLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIuaAppbmRleCA2OTViOTY3YTEyMi4uMjhi
YmY1ZjdjNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9Db29raWVKYXJEQi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9Db29raWVKYXJEQi5oCkBAIC00MCwzNCArNDAsMzggQEAgY2xhc3MgQ29va2llSmFyREIgewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvb2tpZUphckRCKTsKIAogcHVibGljOgorICAgIGVu
dW0gY2xhc3MgU291cmNlIDogdWludDhfdCB7CisgICAgICAgIE5ldHdvcmssCisgICAgICAgIFNj
cmlwdAorICAgIH07CiAgICAgdm9pZCBvcGVuKCk7Ci0gICAgYm9vbCBpc0VuYWJsZWQoKTsKKyAg
ICBib29sIGlzRW5hYmxlZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0RW5hYmxlZChib29sKTsKIAot
ICAgIGJvb2wgc2VhcmNoQ29va2llcyhjb25zdCBTdHJpbmcmIHJlcXVlc3RVcmwsIGNvbnN0IHN0
ZDo6b3B0aW9uYWw8Ym9vbD4mIGh0dHBPbmx5LCBjb25zdCBzdGQ6Om9wdGlvbmFsPGJvb2w+JiBz
ZWN1cmUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8Ym9vbD4mIHNlc3Npb24sIFZlY3RvcjxDb29raWU+
JiByZXN1bHRzKTsKLSAgICBpbnQgc2V0Q29va2llKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBT
dHJpbmcmIGNvb2tpZSwgYm9vbCBmcm9tSmF2YVNjcmlwdCk7Ci0gICAgaW50IHNldENvb2tpZShj
b25zdCBDb29raWUmKTsKKyAgICBzdGQ6Om9wdGlvbmFsPFZlY3RvcjxDb29raWU+PiBzZWFyY2hD
b29raWVzKGNvbnN0IFN0cmluZyYgcmVxdWVzdFVybCwgY29uc3Qgc3RkOjpvcHRpb25hbDxib29s
PiYgaHR0cE9ubHksIGNvbnN0IHN0ZDo6b3B0aW9uYWw8Ym9vbD4mIHNlY3VyZSwgY29uc3Qgc3Rk
OjpvcHRpb25hbDxib29sPiYgc2Vzc2lvbik7CisgICAgYm9vbCBzZXRDb29raWUoY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llLCBTb3VyY2UpOworICAgIGJvb2wgc2V0Q29v
a2llKGNvbnN0IENvb2tpZSYpOwogCi0gICAgaW50IGRlbGV0ZUNvb2tpZShjb25zdCBTdHJpbmcm
IHVybCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKLSAgICBpbnQgZGVsZXRlQ29va2llcyhjb25zdCBT
dHJpbmcmIHVybCk7Ci0gICAgaW50IGRlbGV0ZUFsbENvb2tpZXMoKTsKKyAgICBib29sIGRlbGV0
ZUNvb2tpZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBib29s
IGRlbGV0ZUNvb2tpZXMoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIGJvb2wgZGVsZXRlQWxsQ29v
a2llcygpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgQ29va2llSmFyREIoY29uc3QgU3RyaW5nJiBk
YXRhYmFzZVBhdGgpOwogICAgIFdFQkNPUkVfRVhQT1JUIH5Db29raWVKYXJEQigpOwogCiBwcml2
YXRlOgogCi0gICAgYm9vbCBtX2lzRW5hYmxlZCB7dHJ1ZX07CisgICAgYm9vbCBtX2lzRW5hYmxl
ZCB7IHRydWUgfTsKICAgICBTdHJpbmcgbV9kYXRhYmFzZVBhdGg7CiAKLSAgICBib29sIG1fZGV0
ZWN0ZWREYXRhYmFzZUNvcnJ1cHRpb24ge2ZhbHNlfTsKKyAgICBib29sIG1fZGV0ZWN0ZWREYXRh
YmFzZUNvcnJ1cHRpb24geyBmYWxzZSB9OwogCiAgICAgYm9vbCBpc09uTWVtb3J5KCkgY29uc3Qg
eyByZXR1cm4gKG1fZGF0YWJhc2VQYXRoID09ICI6bWVtb3J5OiIpOyB9OwogCiAgICAgYm9vbCBv
cGVuRGF0YWJhc2UoKTsKICAgICB2b2lkIGNsb3NlRGF0YWJhc2UoKTsKIAotICAgIHZvaWQgY2hl
Y2tTUUxpdGVSZXR1cm5Db2RlKGludCBhY3R1YWwpOworICAgIGJvb2wgY2hlY2tTUUxpdGVSZXR1
cm5Db2RlKGludCk7CiAgICAgdm9pZCBmbGFnRGF0YWJhc2VDb3JydXB0aW9uKCk7CiAgICAgYm9v
bCBjaGVja0RhdGFiYXNlQ29ycnVwdGlvbkFuZFJlbW92ZUlmTmVlZGVkKCk7CiAgICAgU3RyaW5n
IGdldENvcnJ1cHRpb25NYXJrZXJQYXRoKCkgY29uc3Q7CkBAIC03OCwxMSArODIsMTEgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHZlcmlmeVNjaGVtYVZlcnNpb24oKTsKICAgICB2b2lkIGRlbGV0ZUFs
bFRhYmxlcygpOwogCi0gICAgdm9pZCBjcmVhdGVQcmVwYXJlU3RhdGVtZW50KGNvbnN0IFN0cmlu
ZyYgc3FsKTsKLSAgICBTUUxpdGVTdGF0ZW1lbnQqIGdldFByZXBhcmVTdGF0ZW1lbnQoY29uc3Qg
U3RyaW5nJiBzcWwpOwotICAgIGludCBleGVjdXRlU2ltcGxlU3FsKGNvbnN0IFN0cmluZyYgc3Fs
LCBib29sIGlnbm9yZUVycm9yID0gZmFsc2UpOworICAgIHZvaWQgY3JlYXRlUHJlcGFyZVN0YXRl
bWVudChjb25zdCBTdHJpbmcmKTsKKyAgICBTUUxpdGVTdGF0ZW1lbnQqIGdldFByZXBhcmVTdGF0
ZW1lbnQoY29uc3QgU3RyaW5nJik7CisgICAgYm9vbCBleGVjdXRlU3FsKGNvbnN0IFN0cmluZyYp
OwogCi0gICAgaW50IGRlbGV0ZUNvb2tpZUludGVybmFsKGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAgYm9vbCBkZWxldGVD
b29raWVJbnRlcm5hbChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBj
b25zdCBTdHJpbmcmIHBhdGgpOwogICAgIGJvb2wgaGFzSHR0cE9ubHlDb29raWUoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBwYXRoKTsKIAog
ICAgIFNRTGl0ZURhdGFiYXNlIG1fZGF0YWJhc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llVXRpbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llVXRpbC5jcHAKaW5kZXggY2Y1NTg4NDgyNmYuLjNh
YTc3YTg5MmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvQ29va2llVXRpbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL0Nvb2tpZVV0aWwuY3BwCkBAIC0xNDEsMTAgKzE0MSwxMCBAQCBzdGF0aWMgdm9pZCBwYXJz
ZUNvb2tpZUF0dHJpYnV0ZXMoY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGUsIGNvbnN0IFN0cmluZyYg
ZG9tYWluLAogICAgIH0KIH0KIAotYm9vbCBwYXJzZUNvb2tpZUhlYWRlcihjb25zdCBTdHJpbmcm
IGNvb2tpZUxpbmUsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBDb29raWUmIHJlc3VsdCkKK3N0ZDo6
b3B0aW9uYWw8Q29va2llPiBwYXJzZUNvb2tpZUhlYWRlcihjb25zdCBTdHJpbmcmIGNvb2tpZUxp
bmUsIGNvbnN0IFN0cmluZyYgZG9tYWluKQogewogICAgIGlmIChjb29raWVMaW5lLmxlbmd0aCgp
ID49IE1BWF9DT09LSUVfTElORSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwogCiAgICAgLy8gVGhpcyBBbGdvcml0aG0gaXMgYmFzZWQgb24gdGhl
IGFsZ29yaXRobSBkZWZpbmVkIGluIFJGQyA2MjY1IDUuMiBodHRwczovL3Rvb2xzLmlldGYub3Jn
L2h0bWwvcmZjNjI2NSNzZWN0aW9uLTUuMi8KIApAQCAtMTY1LDE2ICsxNjUsMTcgQEAgYm9vbCBw
YXJzZUNvb2tpZUhlYWRlcihjb25zdCBTdHJpbmcmIGNvb2tpZUxpbmUsIGNvbnN0IFN0cmluZyYg
ZG9tYWluLCBDb29raWUmIHIKICAgICAgICAgY29va2llVmFsdWUgPSBjb29raWVQYWlyLnN1YnN0
cmluZyhhc3NpZ25tZW50UG9zaXRpb24gKyAxKTsKICAgICB9CiAKLSAgICByZXN1bHQubmFtZSA9
IGNvb2tpZU5hbWUuc3RyaXBXaGl0ZVNwYWNlKCk7Ci0gICAgcmVzdWx0LnZhbHVlID0gY29va2ll
VmFsdWUuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgQ29va2llIGNvb2tpZTsKKyAgICBjb29raWUu
bmFtZSA9IGNvb2tpZU5hbWUuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgY29va2llLnZhbHVlID0g
Y29va2llVmFsdWUuc3RyaXBXaGl0ZVNwYWNlKCk7CiAKICAgICBib29sIGhhc01heEFnZSA9IGZh
bHNlOwotICAgIHJlc3VsdC5zZXNzaW9uID0gdHJ1ZTsKKyAgICBjb29raWUuc2Vzc2lvbiA9IHRy
dWU7CiAKICAgICBmb3IgKGF1dG8gYXR0cmlidXRlIDogY29va2llTGluZS5zcGxpdEFsbG93aW5n
RW1wdHlFbnRyaWVzKCc7JykpCi0gICAgICAgIHBhcnNlQ29va2llQXR0cmlidXRlcyhhdHRyaWJ1
dGUsIGRvbWFpbiwgaGFzTWF4QWdlLCByZXN1bHQpOworICAgICAgICBwYXJzZUNvb2tpZUF0dHJp
YnV0ZXMoYXR0cmlidXRlLCBkb21haW4sIGhhc01heEFnZSwgY29va2llKTsKIAotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBjb29raWU7CiB9CiAKIFN0cmluZyBkZWZhdWx0UGF0aEZvclVS
TChjb25zdCBVUkwmIHVybCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25l
dHdvcmsvY3VybC9Db29raWVVdGlsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ29va2llVXRpbC5oCmluZGV4IGE4OWM5YWI3Yjk2Li40OTBkMzYyYmJkNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZVV0aWwuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llVXRpbC5oCkBA
IC0zNCw5ICszNCw5IEBAIHN0cnVjdCBDb29raWU7CiAKIG5hbWVzcGFjZSBDb29raWVVdGlsIHsK
IAotYm9vbCBwYXJzZUNvb2tpZUhlYWRlcihjb25zdCBTdHJpbmcmIGNvb2tpZUxpbmUsIGNvbnN0
IFN0cmluZyYgZG9tYWluLCBDb29raWUmIHJlc3VsdCk7CitzdGQ6Om9wdGlvbmFsPENvb2tpZT4g
cGFyc2VDb29raWVIZWFkZXIoY29uc3QgU3RyaW5nJiBjb29raWVMaW5lLCBjb25zdCBTdHJpbmcm
IGRvbWFpbik7CiAKLWJvb2wgaXNJUEFkZHJlc3MoY29uc3QgU3RyaW5nJiBob3N0bmFtZSk7Citi
b29sIGlzSVBBZGRyZXNzKGNvbnN0IFN0cmluZyYpOwogCiBib29sIGRvbWFpbk1hdGNoKGNvbnN0
IFN0cmluZyYgY29va2llRG9tYWluLCBjb25zdCBTdHJpbmcmIGhvc3QpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKaW5kZXggNTQzNmEyNmFkNTEu
Ljc4ZDU2ZTc5NWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmls
ZVN5c3RlbVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0ZpbGVTeXN0
ZW1XaW4uY3BwCkBAIC0zNzYsMTAgKzM3Niw4IEBAIHN0YXRpYyBTdHJpbmcgY2FjaGVkU3RvcmFn
ZURpcmVjdG9yeShEV09SRCBwYXRoSWRlbnRpZmllcikKICAgICByZXR1cm4gZGlyZWN0b3J5Owog
fQogCi1TdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUoY29uc3QgU3RyaW5nJiwgUGxhdGZvcm1GaWxl
SGFuZGxlJiBoYW5kbGUpCitzdGF0aWMgU3RyaW5nIGdlbmVyYXRlVGVtcG9yYXJ5UGF0aChjb25z
dCBGdW5jdGlvbjxib29sKGNvbnN0IFN0cmluZyYpPiYgYWN0aW9uKQogewotICAgIGhhbmRsZSA9
IElOVkFMSURfSEFORExFX1ZBTFVFOwotCiAgICAgd2NoYXJfdCB0ZW1wUGF0aFtNQVhfUEFUSF07
CiAgICAgaW50IHRlbXBQYXRoTGVuZ3RoID0gOjpHZXRUZW1wUGF0aFcoV1RGX0FSUkFZX0xFTkdU
SCh0ZW1wUGF0aCksIHRlbXBQYXRoKTsKICAgICBpZiAodGVtcFBhdGhMZW5ndGggPD0gMCB8fCB0
ZW1wUGF0aExlbmd0aCA+IFdURl9BUlJBWV9MRU5HVEgodGVtcFBhdGgpKQpAQCAtNDAyLDEwICs0
MDAsMjEgQEAgU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYsIFBsYXRmb3Jt
RmlsZUhhbmRsZSYgaGFuZGxlKQogICAgICAgICBwcm9wb3NlZFBhdGggPSBwYXRoQnlBcHBlbmRp
bmdDb21wb25lbnQobnVsbFRlcm1pbmF0ZWRXQ2hhclRvU3RyaW5nKHRlbXBQYXRoKSwgbnVsbFRl
cm1pbmF0ZWRXQ2hhclRvU3RyaW5nKHRlbXBGaWxlKSk7CiAgICAgICAgIGlmIChwcm9wb3NlZFBh
dGguaXNFbXB0eSgpKQogICAgICAgICAgICAgYnJlYWs7CisgICAgfSB3aGlsZSAoIWFjdGlvbihw
cm9wb3NlZFBhdGgpKTsKKworICAgIHJldHVybiBwcm9wb3NlZFBhdGg7Cit9CisKK1N0cmluZyBv
cGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmLCBQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRs
ZSkKK3sKKyAgICBoYW5kbGUgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKIAorICAgIFN0cmluZyBw
cm9wb3NlZFBhdGggPSBnZW5lcmF0ZVRlbXBvcmFyeVBhdGgoWyZoYW5kbGVdKGNvbnN0IFN0cmlu
ZyYgcHJvcG9zZWRQYXRoKSB7CiAgICAgICAgIC8vIHVzZSBDUkVBVEVfTkVXIHRvIGF2b2lkIG92
ZXJ3cml0aW5nIGFuIGV4aXN0aW5nIGZpbGUgd2l0aCB0aGUgc2FtZSBuYW1lCiAgICAgICAgIGhh
bmRsZSA9IDo6Q3JlYXRlRmlsZVcoc3RyaW5nVG9OdWxsVGVybWluYXRlZFdDaGFyKHByb3Bvc2Vk
UGF0aCkuZGF0YSgpLCBHRU5FUklDX1JFQUQgfCBHRU5FUklDX1dSSVRFLCAwLCAwLCBDUkVBVEVf
TkVXLCBGSUxFX0FUVFJJQlVURV9OT1JNQUwsIDApOwotICAgIH0gd2hpbGUgKCFpc0hhbmRsZVZh
bGlkKGhhbmRsZSkgJiYgR2V0TGFzdEVycm9yKCkgPT0gRVJST1JfQUxSRUFEWV9FWElTVFMpOwor
CisgICAgICAgIHJldHVybiBpc0hhbmRsZVZhbGlkKGhhbmRsZSkgfHwgR2V0TGFzdEVycm9yKCkg
PT0gRVJST1JfQUxSRUFEWV9FWElTVFM7CisgICAgfSk7CiAKICAgICBpZiAoIWlzSGFuZGxlVmFs
aWQoaGFuZGxlKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwpAQCAtNTUxLDUgKzU2MCwyNyBA
QCBTdHJpbmcgcmVhbFBhdGgoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKICAgICByZXR1cm4gZ2V0
RmluYWxQYXRoTmFtZShmaWxlUGF0aCk7CiB9CiAKK1N0cmluZyBjcmVhdGVUZW1wb3JhcnlEaXJl
Y3RvcnkoKQoreworICAgIHJldHVybiBnZW5lcmF0ZVRlbXBvcmFyeVBhdGgoW10oY29uc3QgU3Ry
aW5nJiBwcm9wb3NlZFBhdGgpIHsKKyAgICAgICAgcmV0dXJuIG1ha2VBbGxEaXJlY3Rvcmllcyhw
cm9wb3NlZFBhdGgpOworICAgIH0pOworfQorCitib29sIGRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5
KGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5UGF0aCkKK3sKKyAgICBTSEZJTEVPUFNUUlVDVCBkZWxl
dGVPcGVyYXRpb24gPSB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIEZPX0RFTEVURSwKKyAg
ICAgICAgc3RyaW5nVG9OdWxsVGVybWluYXRlZFdDaGFyKGRpcmVjdG9yeVBhdGgpLmRhdGEoKSwK
KyAgICAgICAgTCIiLAorICAgICAgICBGT0ZfTk9DT05GSVJNQVRJT04gfCBGT0ZfTk9FUlJPUlVJ
IHwgRk9GX1NJTEVOVCwKKyAgICAgICAgZmFsc2UsCisgICAgICAgIDAsCisgICAgICAgIEwiIgor
ICAgIH07CisgICAgcmV0dXJuICFTSEZpbGVPcGVyYXRpb24oJmRlbGV0ZU9wZXJhdGlvbik7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIEZpbGVTeXN0ZW0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAyYjZjNzc1
MzQwNC4uMTk2ZDllNjJiMjEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxOC0xMS0wOSAgQmFzdWtlIFN1enVraSAg
PGJhc3VrZS5zdXp1a2lAc29ueS5jb20+CisKKyAgICAgICAgW0N1cmxdIEFkZCBBUEkgVGVzdCBm
b3IgQ3VybCBjb29raWUgYmFja2VuZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE5MTQ5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCB1bml0IHRlc3QgdG8gVGVzdFdlYkNvcmUuCisKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2luLmNtYWtlOgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9jdXJsL0Nvb2tpZXMuY3BwOiBBZGRlZC4KKwogMjAxOC0xMS0wNyAg
RGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgT3ZlcnJpZGUgK1tV
SUtleWJvYXJkIGlzSW5IYXJkd2FyZUtleWJvYXJkTW9kZV0gaW4gV2ViS2l0VGVzdFJ1bm5lciBh
bmQgRHVtcFJlbmRlclRyZWUKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZv
cm1XaW4uY21ha2UgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2luLmNtYWtlCmluZGV4
IGYxM2I4MmVhZTc1Li4zNjUwZTQwNjQ1YSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2lu
LmNtYWtlCkBAIC03NCw2ICs3NCw3IEBAIGlmICgke1dURl9QTEFURk9STV9XSU5fQ0FJUk99KQog
ICAgICAgICB2Y3J1bnRpbWUKICAgICApCiAgICAgbGlzdChBUFBFTkQgVGVzdFdlYkNvcmVMaWJf
U09VUkNFUworICAgICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XZWJDb3JlL2N1cmwv
Q29va2llcy5jcHAKICAgICAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV2ViQ29yZS93
aW4vQml0bWFwSW1hZ2UuY3BwCiAgICAgICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dl
YkNvcmUvQ3J5cHRvRGlnZXN0LmNwcAogICAgICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0
cy9XZWJDb3JlL1B1YmxpY1N1ZmZpeC5jcHAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9jdXJsL0Nvb2tpZXMuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL2N1cmwvQ29va2llcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAuLjNhMDk5YTVjN2E3Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL2N1cmwvQ29va2llcy5jcHAKQEAgLTAsMCArMSw4MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQg
SW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQ1VSTCkKKwor
I2luY2x1ZGUgPFdlYkNvcmUvQ29va2llSmFyREIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tp
ZVV0aWwuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KKyNpbmNsdWRlIDxtZW1v
cnk+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgVGVzdFdlYktpdEFQ
SSB7CisKK25hbWVzcGFjZSBDdXJsIHsKKworY2xhc3MgQ3VybENvb2tpZXM6IHB1YmxpYyB0ZXN0
aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICB2b2lkIFNldFVwKCkgZmluYWwKKyAgICB7CisgICAg
ICAgIG1fY29va2llRGlyZWN0b3J5ID0gRmlsZVN5c3RlbTo6Y3JlYXRlVGVtcG9yYXJ5RGlyZWN0
b3J5KCk7CisKKyAgICAgICAgbV9jb29raWVKYXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkNvcmU6
OkNvb2tpZUphckRCPihGaWxlU3lzdGVtOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQobV9jb29r
aWVEaXJlY3RvcnksICJjb29raWVkYi5zcWwiKSk7CisgICAgICAgIG1fY29va2llSmFyLT5vcGVu
KCk7CisgICAgICAgIG1fY29va2llSmFyLT5zZXRFbmFibGVkKHRydWUpOworICAgIH0KKworICAg
IHZvaWQgVGVhckRvd24oKSBmaW5hbAorICAgIHsKKyAgICAgICAgbV9jb29raWVKYXIgPSBudWxs
cHRyOworCisgICAgICAgIEZpbGVTeXN0ZW06OmRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KG1fY29v
a2llRGlyZWN0b3J5KTsKKyAgICAgICAgbV9jb29raWVEaXJlY3RvcnkgPSBTdHJpbmcoKTsKKyAg
ICB9CisKK3Byb3RlY3RlZDoKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29va2llSmFyREI+IG1fY29v
a2llSmFyOworICAgIFN0cmluZyBtX2Nvb2tpZURpcmVjdG9yeTsKK307CisKK1RFU1RfRihDdXJs
Q29va2llcywgVGVzdEh0dHBPbmx5Q2FzZSkKK3sKKyAgICAvLyBzdWNjZXNzOiBmcm9tIG5ldHdv
cmsKKyAgICBFWFBFQ1RfVFJVRShtX2Nvb2tpZUphci0+c2V0Q29va2llKCJodHRwOi8vZXhhbXBs
ZS5jb20iLCAiZm9vPWJhcjsgSHR0cE9ubHkiLCBDb29raWVKYXJEQjo6U291cmNlOjpOZXR3b3Jr
KSk7CisgICAgLy8gc3VjY2Vzczogd2lsZGNhcmQgb2YgZG9tYWlucworICAgIEVYUEVDVF9UUlVF
KG1fY29va2llSmFyLT5zZXRDb29raWUoImh0dHA6Ly9leGFtcGxlLmNvbSIsICJiaW5nbz1ib25n
bzsiLCBDb29raWVKYXJEQjo6U291cmNlOjpTY3JpcHQpKTsKKyAgICAvLyBmYWlsdXJlOiBmb28g
aXMgYWxyZWFkeSBzdG9yZWQgYXMgSHR0cE9ubHkKKyAgICBFWFBFQ1RfRkFMU0UobV9jb29raWVK
YXItPnNldENvb2tpZSgiaHR0cDovL2V4YW1wbGUuY29tIiwgImZvbz1iYXI7IiwgQ29va2llSmFy
REI6OlNvdXJjZTo6U2NyaXB0KSk7CisgICAgLy8gZmFpbHVyZTogaW5jb25zaXN0ZW50LiBTb3Vy
Y2UgaXMgU2NyaXB0LCBidXQgYXR0cmlidXRlIHNheXMgSHR0cE9ubHkKKyAgICBFWFBFQ1RfRkFM
U0UobV9jb29raWVKYXItPnNldENvb2tpZSgiaHR0cDovL2V4YW1wbGUuY29tIiwgImZvbz1iYXI7
IEh0dHBPbmx5IiwgQ29va2llSmFyREI6OlNvdXJjZTo6U2NyaXB0KSk7Cit9CisKK30KKworfQor
CisjZW5kaWYgLy8gVVNFKENVUkwpCg==
</data>
<flag name="review"
          id="371752"
          type_id="1"
          status="+"
          setter="youennf"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354592</attachid>
            <date>2018-11-12 14:29:03 -0800</date>
            <delta_ts>2018-11-12 14:41:13 -0800</delta_ts>
            <desc>PATCH</desc>
            <filename>191493.diff</filename>
            <type>text/plain</type>
            <size>29846</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyNWU0YTFhNmMzMi4uYjVlNWEyNTc4NWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MiBAQAorMjAxOC0xMS0wOSAgQmFzdWtlIFN1enVraSAgPGJhc3VrZS5zdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIEFkZCBBUEkgVGVzdCBmb3IgQ3VybCBjb29raWUgYmFj
a2VuZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
MTQ5MworCisgICAgICAgIFJldmlld2VkIGJ5IFlvdWVubiBGYWJsZXQuCisKKyAgICAgICAgUmVm
YWN0b3JpbmcgZm9yIGNvb2tpZSBiYWNrZW5kIGludGVyZmFjZS4KKworICAgICAgICBUZXN0czog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2N1cmwvQ29va2llcy5jcHAKKworICAgICAgICAq
IHBsYXRmb3JtL0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q29va2llSmFyQ3VybERhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZXNGb3JT
ZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckN1cmxEYXRhYmFzZTo6c2V0Q29v
a2llc0Zyb21ET00gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyQ3VybERhdGFi
YXNlOjpzZXRDb29raWVzRnJvbUhUVFBSZXNwb25zZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29raWVKYXJDdXJsRGF0YWJhc2U6OmdldFJhd0Nvb2tpZXMgY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJEQi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb29raWVKYXJEQjo6b3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUph
ckRCOjpjaGVja1NRTGl0ZVJldHVybkNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFy
REI6OmlzRW5hYmxlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXJEQjo6c2Vh
cmNoQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXJEQjo6c2V0Q29va2llKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckRCOjpkZWxldGVDb29raWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29va2llSmFyREI6OmRlbGV0ZUNvb2tpZUludGVybmFsKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb2tpZUphckRCOjpkZWxldGVDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b2tpZUphckRCOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUph
ckRCOjpleGVjdXRlU2ltcGxlU3FsKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckRCOjpp
c0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Db29r
aWVKYXJEQi5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVVdGlsLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZVV0aWw6OnBhcnNlQ29va2llSGVhZGVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llVXRpbC5oOgorICAgICAgICAqIHBs
YXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVTeXN0
ZW06OmdlbmVyYXRlVGVtcG9yYXJ5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlU3lzdGVt
OjpvcGVuVGVtcG9yYXJ5RmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlU3lzdGVtOjpjcmVh
dGVUZW1wb3JhcnlEaXJlY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVN5c3RlbTo6ZGVs
ZXRlTm9uRW1wdHlEaXJlY3RvcnkpOgorCiAyMDE4LTExLTA3ICBEb24gT2xtc3RlYWQgIDxkb24u
b2xtc3RlYWRAc29ueS5jb20+CiAKICAgICAgICAgU2ltcGxpZnkgbWFjcm9zIGluIHBsYXRmb3Jt
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgKaW5kZXggYTUyYWI0YzdjZjQuLmUxNDBi
MjQ1N2UxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oCkBAIC0xODcsNiArMTg3
LDExIEBAIFdFQkNPUkVfRVhQT1JUIE5TU3RyaW5nICpjcmVhdGVUZW1wb3JhcnlEaXJlY3Rvcnko
TlNTdHJpbmcgKmRpcmVjdG9yeVByZWZpeCk7CiBXRUJDT1JFX0VYUE9SVCBib29sIGRlbGV0ZU5v
bkVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShX
SU5fQ0FJUk8pCitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgY3JlYXRlVGVtcG9yYXJ5RGlyZWN0b3J5
KCk7CitXRUJDT1JFX0VYUE9SVCBib29sIGRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0
cmluZyYpOworI2VuZGlmCisKIFdFQkNPUkVfRVhQT1JUIFN0cmluZyByZWFsUGF0aChjb25zdCBT
dHJpbmcmKTsKIAogY2xhc3MgTWFwcGVkRmlsZURhdGEgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmxEYXRhYmFzZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybERhdGFiYXNl
LmNwcAppbmRleCA1ZTg0NTRhYTU0YS4uYzFhYzA5ZDgyNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsRGF0YWJhc2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsRGF0
YWJhc2UuY3BwCkBAIC00NywxNCArNDcsMTMgQEAgc3RhdGljIFN0cmluZyBjb29raWVzRm9yU2Vz
c2lvbihjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYKICAg
ICBhdXRvIHNlYXJjaEhUVFBPbmx5ID0gKGZvckhUVFBIZWFkZXIgPyBzdGQ6Om51bGxvcHQgOiBz
dGQ6Om9wdGlvbmFsPGJvb2w+IHtmYWxzZX0pOwogICAgIGF1dG8gc2VjdXJlID0gdXJsLnByb3Rv
Y29sSXMoImh0dHBzIikgPyBzdGQ6Om51bGxvcHQgOiBzdGQ6Om9wdGlvbmFsPGJvb2w+IHtmYWxz
ZX07CiAKLSAgICBWZWN0b3I8Q29va2llPiByZXN1bHRzOwotICAgIGlmIChjb29raWVKYXJEQi5z
ZWFyY2hDb29raWVzKHVybC5zdHJpbmcoKSwgc2VhcmNoSFRUUE9ubHksIHNlY3VyZSwgc3RkOjpu
dWxsb3B0LCByZXN1bHRzKSkgewotICAgICAgICBmb3IgKGF1dG8gcmVzdWx0IDogcmVzdWx0cykg
eworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvb2tpZUphckRCLnNlYXJjaENvb2tpZXModXJsLnN0
cmluZygpLCBzZWFyY2hIVFRQT25seSwgc2VjdXJlLCBzdGQ6Om51bGxvcHQpKSB7CisgICAgICAg
IGZvciAoYXV0byYgY29va2llIDogKnJlc3VsdCkgewogICAgICAgICAgICAgaWYgKCFjb29raWVz
LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBjb29raWVzLmFwcGVuZCgiOyAiKTsKLSAgICAg
ICAgICAgIGNvb2tpZXMuYXBwZW5kKHJlc3VsdC5uYW1lKTsKKyAgICAgICAgICAgIGNvb2tpZXMu
YXBwZW5kKGNvb2tpZS5uYW1lKTsKICAgICAgICAgICAgIGNvb2tpZXMuYXBwZW5kKCI9Iik7Ci0g
ICAgICAgICAgICBjb29raWVzLmFwcGVuZChyZXN1bHQudmFsdWUpOworICAgICAgICAgICAgY29v
a2llcy5hcHBlbmQoY29va2llLnZhbHVlKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4g
Y29va2llcy50b1N0cmluZygpOwpAQCAtNjcsMTMgKzY2LDEzIEBAIHZvaWQgQ29va2llSmFyQ3Vy
bERhdGFiYXNlOjpzZXRDb29raWVzRnJvbURPTShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24m
IHNlc3NpCiAgICAgVU5VU0VEX1BBUkFNKGZpcnN0UGFydHkpOwogCiAgICAgQ29va2llSmFyREIm
IGNvb2tpZUphckRCID0gc2Vzc2lvbi5jb29raWVEYXRhYmFzZSgpOwotICAgIGNvb2tpZUphckRC
LnNldENvb2tpZSh1cmwuc3RyaW5nKCksIHZhbHVlLCB0cnVlKTsKKyAgICBjb29raWVKYXJEQi5z
ZXRDb29raWUodXJsLnN0cmluZygpLCB2YWx1ZSwgQ29va2llSmFyREI6OlNvdXJjZTo6U2NyaXB0
KTsKIH0KIAogdm9pZCBDb29raWVKYXJDdXJsRGF0YWJhc2U6OnNldENvb2tpZXNGcm9tSFRUUFJl
c3BvbnNlKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0CiB7CiAgICAgQ29va2llSmFyREImIGNvb2tp
ZUphckRCID0gc2Vzc2lvbi5jb29raWVEYXRhYmFzZSgpOwotICAgIGNvb2tpZUphckRCLnNldENv
b2tpZSh1cmwuc3RyaW5nKCksIHZhbHVlLCBmYWxzZSk7CisgICAgY29va2llSmFyREIuc2V0Q29v
a2llKHVybC5zdHJpbmcoKSwgdmFsdWUsIENvb2tpZUphckRCOjpTb3VyY2U6Ok5ldHdvcmspOwog
fQogCiBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBDb29raWVKYXJDdXJsRGF0YWJhc2U6OmNvb2tp
ZXNGb3JET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwm
IGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYsIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9w
dGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQs
IEluY2x1ZGVTZWN1cmVDb29raWVzKSBjb25zdApAQCAtMTEwLDcgKzEwOSwxMSBAQCBib29sIENv
b2tpZUphckN1cmxEYXRhYmFzZTo6Z2V0UmF3Q29va2llcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNl
c3Npb24mIHNlc3Npb24sCiAgICAgVU5VU0VEX1BBUkFNKHBhZ2VJRCk7CiAKICAgICBDb29raWVK
YXJEQiYgY29va2llSmFyREIgPSBzZXNzaW9uLmNvb2tpZURhdGFiYXNlKCk7Ci0gICAgcmV0dXJu
IGNvb2tpZUphckRCLnNlYXJjaENvb2tpZXMoZmlyc3RQYXJ0eS5zdHJpbmcoKSwgc3RkOjpudWxs
b3B0LCBzdGQ6Om51bGxvcHQsIHN0ZDo6bnVsbG9wdCwgcmF3Q29va2llcyk7CisgICAgaWYgKGF1
dG8gY29va2llcyA9IGNvb2tpZUphckRCLnNlYXJjaENvb2tpZXMoZmlyc3RQYXJ0eS5zdHJpbmco
KSwgc3RkOjpudWxsb3B0LCBzdGQ6Om51bGxvcHQsIHN0ZDo6bnVsbG9wdCkpIHsKKyAgICAgICAg
cmF3Q29va2llcyA9IFdURk1vdmUoKmNvb2tpZXMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIENvb2tpZUphckN1cmxEYXRhYmFzZTo6
ZGVsZXRlQ29va2llKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3Qg
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJEQi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIuY3BwCmluZGV4IDQyMDQ5ZWQ0
N2M5Li4yZGU0NjQ0ZGE2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL0Nvb2tpZUphckRCLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvQ29va2llSmFyREIuY3BwCkBAIC0xMTcsNyArMTE3LDcgQEAgYm9vbCBDb29r
aWVKYXJEQjo6b3BlbkRhdGFiYXNlKCkKICAgICBpZiAoZXhpc3RzRGF0YWJhc2VGaWxlKSB7CiAg
ICAgICAgIGlmIChtX2RhdGFiYXNlLm9wZW4obV9kYXRhYmFzZVBhdGgsIGZhbHNlKSkgewogICAg
ICAgICAgICAgaWYgKGNoZWNrRGF0YWJhc2VWYWxpZGl0eSgpKQotICAgICAgICAgICAgICAgIGV4
ZWN1dGVTaW1wbGVTcWwoREVMRVRFX0FMTF9TRVNTSU9OX0NPT0tJRV9TUUwpOworICAgICAgICAg
ICAgICAgIGV4ZWN1dGVTcWwoREVMRVRFX0FMTF9TRVNTSU9OX0NPT0tJRV9TUUwpOwogICAgICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gZGVsZXRlIGRhdGFiYXNlIGFuZCB0cnkg
dG8gcmUtY3JlYXRlIGFnYWluCiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJDb29raWUgZGF0
YWJhc2UgdmFsaWRpdHkgY2hlY2sgZmFpbGVkLCBhdHRlbXB0aW5nIHRvIHJlY3JlYXRlIHRoZSBk
YXRhYmFzZSIpOwpAQCAtMTQ3LDE4ICsxNDcsMTUgQEAgYm9vbCBDb29raWVKYXJEQjo6b3BlbkRh
dGFiYXNlKCkKIAogICAgIHZlcmlmeVNjaGVtYVZlcnNpb24oKTsKIAotICAgIGJvb2wgZGF0YWJh
c2VWYWxpZGl0eSA9IHRydWU7CiAgICAgaWYgKCFleGlzdHNEYXRhYmFzZUZpbGUgfHwgIW1fZGF0
YWJhc2UudGFibGVFeGlzdHMoIkNvb2tpZSIpKSB7Ci0gICAgICAgIGRhdGFiYXNlVmFsaWRpdHkg
Jj0gKGV4ZWN1dGVTaW1wbGVTcWwoQ1JFQVRFX0NPT0tJRV9UQUJMRV9TUUwpID09IFNRTElURV9E
T05FKTsKLSAgICAgICAgZGF0YWJhc2VWYWxpZGl0eSAmPSAoZXhlY3V0ZVNpbXBsZVNxbChDUkVB
VEVfRE9NQUlOX0lOREVYX1NRTCkgPT0gU1FMSVRFX0RPTkUpOwotICAgICAgICBkYXRhYmFzZVZh
bGlkaXR5ICY9IChleGVjdXRlU2ltcGxlU3FsKENSRUFURV9QQVRIX0lOREVYX1NRTCkgPT0gU1FM
SVRFX0RPTkUpOwotICAgIH0KKyAgICAgICAgYm9vbCBvayA9IGV4ZWN1dGVTcWwoQ1JFQVRFX0NP
T0tJRV9UQUJMRV9TUUwpICYmIGV4ZWN1dGVTcWwoQ1JFQVRFX0RPTUFJTl9JTkRFWF9TUUwpICYm
IGV4ZWN1dGVTcWwoQ1JFQVRFX1BBVEhfSU5ERVhfU1FMKTsKIAotICAgIGlmICghZGF0YWJhc2VW
YWxpZGl0eSkgewotICAgICAgICAvLyBnaXZlIHVwIGNyZWF0ZSBkYXRhYmFzZSBhdCB0aGlzIHRp
bWUgKGFsbCBjb29raWVzIG9uIHJlcXVlc3QvcmVzcG9uc2UgYXJlIGlnbm9yZWQpCi0gICAgICAg
IG1fZGF0YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgZGVsZXRlQWxsRGF0YWJhc2VGaWxlcygpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghb2spIHsKKyAgICAgICAgICAgIC8v
IGdpdmUgdXAgY3JlYXRlIGRhdGFiYXNlIGF0IHRoaXMgdGltZSAoYWxsIGNvb2tpZXMgb24gcmVx
dWVzdC9yZXNwb25zZSBhcmUgaWdub3JlZCkKKyAgICAgICAgICAgIG1fZGF0YWJhc2UuY2xvc2Uo
KTsKKyAgICAgICAgICAgIGRlbGV0ZUFsbERhdGFiYXNlRmlsZXMoKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIG1fZGF0YWJhc2Uuc2V0U3luY2hy
b25vdXMoU1FMaXRlRGF0YWJhc2U6OlN5bmNOb3JtYWwpOwpAQCAtMjA2LDcgKzIwMyw3IEBAIHZv
aWQgQ29va2llSmFyREI6OnZlcmlmeVNjaGVtYVZlcnNpb24oKQogICAgIH0KIAogICAgIC8vIFVw
ZGF0ZSB2ZXJzaW9uCi0gICAgZXhlY3V0ZVNpbXBsZVNxbChTdHJpbmc6OmZvcm1hdCgiUFJBR01B
IHVzZXJfdmVyc2lvbj0lZCIsIHNjaGVtYVZlcnNpb24pKTsKKyAgICBleGVjdXRlU3FsKFN0cmlu
Zzo6Zm9ybWF0KCJQUkFHTUEgdXNlcl92ZXJzaW9uPSVkIiwgc2NoZW1hVmVyc2lvbikpOwogfQog
CiB2b2lkIENvb2tpZUphckRCOjpkZWxldGVBbGxUYWJsZXMoKQpAQCAtMjQ1LDEwICsyNDIsMTAg
QEAgYm9vbCBDb29raWVKYXJEQjo6Y2hlY2tEYXRhYmFzZUNvcnJ1cHRpb25BbmRSZW1vdmVJZk5l
ZWRlZCgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIENvb2tpZUphckRCOjpjaGVja1NR
TGl0ZVJldHVybkNvZGUoaW50IGFjdHVhbCkKK2Jvb2wgQ29va2llSmFyREI6OmNoZWNrU1FMaXRl
UmV0dXJuQ29kZShpbnQgY29kZSkKIHsKICAgICBpZiAoIW1fZGV0ZWN0ZWREYXRhYmFzZUNvcnJ1
cHRpb24pIHsKLSAgICAgICAgc3dpdGNoIChhY3R1YWwpIHsKKyAgICAgICAgc3dpdGNoIChjb2Rl
KSB7CiAgICAgICAgIGNhc2UgU1FMSVRFX0NPUlJVUFQ6CiAgICAgICAgIGNhc2UgU1FMSVRFX1ND
SEVNQToKICAgICAgICAgY2FzZSBTUUxJVEVfRk9STUFUOgpAQCAtMjU3LDYgKzI1NCw3IEBAIHZv
aWQgQ29va2llSmFyREI6OmNoZWNrU1FMaXRlUmV0dXJuQ29kZShpbnQgYWN0dWFsKQogICAgICAg
ICAgICAgbV9kZXRlY3RlZERhdGFiYXNlQ29ycnVwdGlvbiA9IHRydWU7CiAgICAgICAgIH0KICAg
ICB9CisgICAgcmV0dXJuIGNvZGUgPT0gU1FMSVRFX09LIHx8IGNvZGUgPT0gU1FMSVRFX0RPTkUg
fHwgY29kZSA9PSBTUUxJVEVfUk9XOwogfQogCiBib29sIENvb2tpZUphckRCOjpjaGVja0RhdGFi
YXNlVmFsaWRpdHkoKQpAQCAtMzA2LDcgKzMwNCw3IEBAIHZvaWQgQ29va2llSmFyREI6OmRlbGV0
ZUFsbERhdGFiYXNlRmlsZXMoKQogICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV9kYXRhYmFz
ZVBhdGggKyAiLXdhbCIpOwogfQogCi1ib29sIENvb2tpZUphckRCOjppc0VuYWJsZWQoKQorYm9v
bCBDb29raWVKYXJEQjo6aXNFbmFibGVkKCkgY29uc3QKIHsKICAgICBpZiAobV9kYXRhYmFzZVBh
dGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMTQsMTcgKzMxMiwxNyBA
QCBib29sIENvb2tpZUphckRCOjppc0VuYWJsZWQoKQogICAgIHJldHVybiBtX2lzRW5hYmxlZDsK
IH0KIAotYm9vbCBDb29raWVKYXJEQjo6c2VhcmNoQ29va2llcyhjb25zdCBTdHJpbmcmIHJlcXVl
c3RVcmwsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8Ym9vbD4mIGh0dHBPbmx5LCBjb25zdCBzdGQ6Om9w
dGlvbmFsPGJvb2w+JiBzZWN1cmUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8Ym9vbD4mIHNlc3Npb24s
IFZlY3RvcjxDb29raWU+JiByZXN1bHRzKQorc3RkOjpvcHRpb25hbDxWZWN0b3I8Q29va2llPj4g
Q29va2llSmFyREI6OnNlYXJjaENvb2tpZXMoY29uc3QgU3RyaW5nJiByZXF1ZXN0VXJsLCBjb25z
dCBzdGQ6Om9wdGlvbmFsPGJvb2w+JiBodHRwT25seSwgY29uc3Qgc3RkOjpvcHRpb25hbDxib29s
PiYgc2VjdXJlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPGJvb2w+JiBzZXNzaW9uKQogewogICAgIGlm
ICghaXNFbmFibGVkKCkgfHwgIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFVSTCByZXF1ZXN0VXJsT2JqKHsgfSwg
cmVxdWVzdFVybCk7CiAgICAgU3RyaW5nIHJlcXVlc3RIb3N0KHJlcXVlc3RVcmxPYmouaG9zdCgp
LnRvU3RyaW5nKCkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CiAgICAgU3RyaW5nIHJlcXVl
c3RQYXRoKHJlcXVlc3RVcmxPYmoucGF0aCgpLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkpOwog
CiAgICAgaWYgKHJlcXVlc3RIb3N0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICByZXR1cm4geyB9OwogCiAgICAgaWYgKHJlcXVlc3RQYXRoLmlzRW1wdHkoKSkKICAg
ICAgICAgcmVxdWVzdFBhdGggPSAiLyI7CkBAIC0zNDAsNyArMzM4LDcgQEAgYm9vbCBDb29raWVK
YXJEQjo6c2VhcmNoQ29va2llcyhjb25zdCBTdHJpbmcmIHJlcXVlc3RVcmwsIGNvbnN0IHN0ZDo6
b3B0aW9uYWw8Ym8KIAogICAgIGF1dG8gcHN0bXQgPSBzdGQ6Om1ha2VfdW5pcXVlPFNRTGl0ZVN0
YXRlbWVudD4obV9kYXRhYmFzZSwgc3FsKTsKICAgICBpZiAoIXBzdG10KQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBwc3RtdC0+cHJlcGFyZSgpOwog
ICAgIHBzdG10LT5iaW5kSW50KDEsIGh0dHBPbmx5ID8gKmh0dHBPbmx5IDogLTEpOwpAQCAtMzcw
LDkgKzM2OCw5IEBAIGJvb2wgQ29va2llSmFyREI6OnNlYXJjaENvb2tpZXMoY29uc3QgU3RyaW5n
JiByZXF1ZXN0VXJsLCBjb25zdCBzdGQ6Om9wdGlvbmFsPGJvCiAgICAgfQogCiAgICAgaWYgKCFw
c3RtdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAg
cmVzdWx0cy5jbGVhcigpOworICAgIFZlY3RvcjxDb29raWU+IHJlc3VsdHM7CiAKICAgICB3aGls
ZSAocHN0bXQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XKSB7CiAKQEAgLTQxMiw5MSArNDEwLDgzIEBA
IGJvb2wgQ29va2llSmFyREI6OnNlYXJjaENvb2tpZXMoY29uc3QgU3RyaW5nJiByZXF1ZXN0VXJs
LCBjb25zdCBzdGQ6Om9wdGlvbmFsPGJvCiAgICAgfQogICAgIHBzdG10LT5maW5hbGl6ZSgpOwog
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHJlc3VsdHM7CiB9CiAKIGJvb2wgQ29va2ll
SmFyREI6Omhhc0h0dHBPbmx5Q29va2llKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBkb21haW4sIGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQqIHN0
YXRlbWVudCA9IGdldFByZXBhcmVTdGF0ZW1lbnQoQ0hFQ0tfRVhJU1RTX0hUVFBPTkxZX0NPT0tJ
RV9TUUwpOwotICAgIEFTU0VSVChzdGF0ZW1lbnQpOworICAgIGF1dG8mIHN0YXRlbWVudCA9IHBy
ZXBhcmVkU3RhdGVtZW50KENIRUNLX0VYSVNUU19IVFRQT05MWV9DT09LSUVfU1FMKTsKIAotICAg
IHN0YXRlbWVudC0+YmluZFRleHQoMSwgbmFtZSk7Ci0gICAgc3RhdGVtZW50LT5iaW5kVGV4dCgy
LCBkb21haW4pOwotICAgIHN0YXRlbWVudC0+YmluZFRleHQoMywgcGF0aCk7CisgICAgc3RhdGVt
ZW50LmJpbmRUZXh0KDEsIG5hbWUpOworICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBkb21haW4p
OworICAgIHN0YXRlbWVudC5iaW5kVGV4dCgzLCBwYXRoKTsKIAotICAgIHJldHVybiBzdGF0ZW1l
bnQtPnN0ZXAoKSA9PSBTUUxJVEVfUk9XOworICAgIHJldHVybiBzdGF0ZW1lbnQuc3RlcCgpID09
IFNRTElURV9ST1c7CiB9CiAKIAotaW50IENvb2tpZUphckRCOjpzZXRDb29raWUoY29uc3QgQ29v
a2llJiBjb29raWUpCitib29sIENvb2tpZUphckRCOjpzZXRDb29raWUoY29uc3QgQ29va2llJiBj
b29raWUpCiB7Ci0gICAgaW50IHJldCA9IDA7CiAgICAgaWYgKCFjb29raWUuc2Vzc2lvbiAmJiBN
b25vdG9uaWNUaW1lOjpmcm9tUmF3U2Vjb25kcyhjb29raWUuZXhwaXJlcykgPD0gTW9ub3Rvbmlj
VGltZTo6bm93KCkpCi0gICAgICAgIHJldCA9IGRlbGV0ZUNvb2tpZUludGVybmFsKGNvb2tpZS5u
YW1lLCBjb29raWUuZG9tYWluLCBjb29raWUucGF0aCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFNR
TGl0ZVN0YXRlbWVudCogc3RhdGVtZW50ID0gZ2V0UHJlcGFyZVN0YXRlbWVudChTRVRfQ09PS0lF
X1NRTCk7Ci0gICAgICAgIEFTU0VSVChzdGF0ZW1lbnQpOwotCi0gICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgaGF2ZSBzb21lIGV2aWN0aW9uIHBvbGljeSB3aGVuIGEgZG9tYWluIGdvZXMgb3Zl
ciBNQVhfQ09PS0lFX1BFUl9ET01BSU4KLQotICAgICAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEs
IGNvb2tpZS5uYW1lKTsKLSAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBjb29raWUudmFs
dWUpOwotICAgICAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDMsIGNvb2tpZS5kb21haW4pOwotICAg
ICAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDQsIGNvb2tpZS5wYXRoKTsKLSAgICAgICAgc3RhdGVt
ZW50LT5iaW5kSW50NjQoNSwgY29va2llLnNlc3Npb24gPyAwIDogc3RhdGljX2Nhc3Q8aW50NjRf
dD4oY29va2llLmV4cGlyZXMpKTsKLSAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50KDYsIGNvb2tp
ZS52YWx1ZS5sZW5ndGgoKSk7Ci0gICAgICAgIHN0YXRlbWVudC0+YmluZEludCg3LCBjb29raWUu
c2Vzc2lvbiA/IDEgOiAwKTsKLSAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50KDgsIGNvb2tpZS5o
dHRwT25seSA/IDEgOiAwKTsKLSAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50KDksIGNvb2tpZS5z
ZWN1cmUgPyAxIDogMCk7Ci0KLSAgICAgICAgcmV0ID0gc3RhdGVtZW50LT5zdGVwKCk7Ci0gICAg
fQotICAgIGNoZWNrU1FMaXRlUmV0dXJuQ29kZShyZXQpOwotICAgIEFTU0VSVChyZXQgPT0gU1FM
SVRFX0RPTkUpOwotCi0gICAgcmV0dXJuIHJldDsKKyAgICAgICAgcmV0dXJuIGRlbGV0ZUNvb2tp
ZUludGVybmFsKGNvb2tpZS5uYW1lLCBjb29raWUuZG9tYWluLCBjb29raWUucGF0aCk7CisKKyAg
ICBhdXRvJiBzdGF0ZW1lbnQgPSBwcmVwYXJlZFN0YXRlbWVudChTRVRfQ09PS0lFX1NRTCk7CisK
KyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgc29tZSBldmljdGlvbiBwb2xpY3kgd2hlbiBh
IGRvbWFpbiBnb2VzIG92ZXIgTUFYX0NPT0tJRV9QRVJfRE9NQUlOCisgICAgc3RhdGVtZW50LmJp
bmRUZXh0KDEsIGNvb2tpZS5uYW1lKTsKKyAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgY29va2ll
LnZhbHVlKTsKKyAgICBzdGF0ZW1lbnQuYmluZFRleHQoMywgY29va2llLmRvbWFpbik7CisgICAg
c3RhdGVtZW50LmJpbmRUZXh0KDQsIGNvb2tpZS5wYXRoKTsKKyAgICBzdGF0ZW1lbnQuYmluZElu
dDY0KDUsIGNvb2tpZS5zZXNzaW9uID8gMCA6IHN0YXRpY19jYXN0PGludDY0X3Q+KGNvb2tpZS5l
eHBpcmVzKSk7CisgICAgc3RhdGVtZW50LmJpbmRJbnQoNiwgY29va2llLnZhbHVlLmxlbmd0aCgp
KTsKKyAgICBzdGF0ZW1lbnQuYmluZEludCg3LCBjb29raWUuc2Vzc2lvbiA/IDEgOiAwKTsKKyAg
ICBzdGF0ZW1lbnQuYmluZEludCg4LCBjb29raWUuaHR0cE9ubHkgPyAxIDogMCk7CisgICAgc3Rh
dGVtZW50LmJpbmRJbnQoOSwgY29va2llLnNlY3VyZSA/IDEgOiAwKTsKKyAgICByZXR1cm4gY2hl
Y2tTUUxpdGVSZXR1cm5Db2RlKHN0YXRlbWVudC5zdGVwKCkpOwogfQogCi1pbnQgQ29va2llSmFy
REI6OnNldENvb2tpZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWUsIGJv
b2wgZnJvbUphdmFTY3JpcHQpCitib29sIENvb2tpZUphckRCOjpzZXRDb29raWUoY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgYm9keSwgQ29va2llSmFyREI6OlNvdXJjZSBzb3VyY2Up
CiB7CiAgICAgaWYgKCFpc0VuYWJsZWQoKSB8fCAhbV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAg
ICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAodXJsLmlzRW1w
dHkoKSB8fCBjb29raWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKHVy
bC5pc0VtcHR5KCkgfHwgYm9keS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIFVSTCB1cmxPYmooeyB9LCB1cmwpOwogICAgIFN0cmluZyBob3N0KHVybE9iai5ob3N0KCku
dG9TdHJpbmcoKSk7CiAgICAgU3RyaW5nIHBhdGgodXJsT2JqLnBhdGgoKSk7CiAKLSAgICBDb29r
aWUgY29va2llT2JqOwotICAgIGlmICghQ29va2llVXRpbDo6cGFyc2VDb29raWVIZWFkZXIoY29v
a2llLCBob3N0LCBjb29raWVPYmopKQotICAgICAgICByZXR1cm4gLTE7CisgICAgYXV0byBjb29r
aWUgPSBDb29raWVVdGlsOjpwYXJzZUNvb2tpZUhlYWRlcihib2R5LCBob3N0KTsKKyAgICBpZiAo
IWNvb2tpZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGNvb2tpZU9iai5kb21h
aW4uaXNFbXB0eSgpKQotICAgICAgICBjb29raWVPYmouZG9tYWluID0gU3RyaW5nKGhvc3QpOwor
ICAgIGlmIChjb29raWUtPmRvbWFpbi5pc0VtcHR5KCkpCisgICAgICAgIGNvb2tpZS0+ZG9tYWlu
ID0gU3RyaW5nKGhvc3QpOwogCi0gICAgaWYgKGNvb2tpZU9iai5wYXRoLmlzRW1wdHkoKSkKLSAg
ICAgICAgY29va2llT2JqLnBhdGggPSBDb29raWVVdGlsOjpkZWZhdWx0UGF0aEZvclVSTCh1cmxP
YmopOworICAgIGlmIChjb29raWUtPnBhdGguaXNFbXB0eSgpKQorICAgICAgICBjb29raWUtPnBh
dGggPSBDb29raWVVdGlsOjpkZWZhdWx0UGF0aEZvclVSTCh1cmxPYmopOwogCiAjaWYgRU5BQkxF
KFBVQkxJQ19TVUZGSVhfTElTVCkKLSAgICBpZiAoaXNQdWJsaWNTdWZmaXgoY29va2llT2JqLmRv
bWFpbikpCi0gICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoaXNQdWJsaWNTdWZmaXgoY29va2ll
LT5kb21haW4pKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAotICAgIGlmIChmcm9t
SmF2YVNjcmlwdCAmJiBjb29raWVPYmouaHR0cE9ubHkpCi0gICAgICAgIHJldHVybiAtMTsKKyAg
ICBib29sIGZyb21KYXZhU2NyaXB0ID0gc291cmNlID09IENvb2tpZUphckRCOjpTb3VyY2U6OlNj
cmlwdDsKKworICAgIGlmIChmcm9tSmF2YVNjcmlwdCAmJiBjb29raWUtPmh0dHBPbmx5KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoZnJvbUphdmFTY3JpcHQgJiYgaGFzSHR0cE9u
bHlDb29raWUoY29va2llT2JqLm5hbWUsIGNvb2tpZU9iai5kb21haW4sIGNvb2tpZU9iai5wYXRo
KSkKLSAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChmcm9tSmF2YVNjcmlwdCAmJiBoYXNIdHRw
T25seUNvb2tpZShjb29raWUtPm5hbWUsIGNvb2tpZS0+ZG9tYWluLCBjb29raWUtPnBhdGgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gc2V0Q29va2llKGNvb2tpZU9iaik7
CisgICAgcmV0dXJuIHNldENvb2tpZSgqY29va2llKTsKIH0KIAotaW50IENvb2tpZUphckRCOjpk
ZWxldGVDb29raWUoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSkKK2Jvb2wg
Q29va2llSmFyREI6OmRlbGV0ZUNvb2tpZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5n
JiBuYW1lKQogewogICAgIGlmICghaXNFbmFibGVkKCkgfHwgIW1fZGF0YWJhc2UuaXNPcGVuKCkp
Ci0gICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgU3RyaW5n
IHVybENvcGllZCA9IFN0cmluZyh1cmwpOwogICAgIGlmICh1cmxDb3BpZWQuc3RhcnRzV2l0aCgn
LicpKQpAQCAtNTA2LDQ4ICs0OTYsMzUgQEAgaW50IENvb2tpZUphckRCOjpkZWxldGVDb29raWUo
Y29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICBpZiAodXJsT2JqLmlz
VmFsaWQoKSkgewogICAgICAgICBTdHJpbmcgaG9zdFN0cih1cmxPYmouaG9zdCgpLnRvU3RyaW5n
KCkpOwogICAgICAgICBTdHJpbmcgcGF0aFN0cih1cmxPYmoucGF0aCgpKTsKLSAgICAgICAgaW50
IHJldCA9IGRlbGV0ZUNvb2tpZUludGVybmFsKG5hbWUsIGhvc3RTdHIsIHBhdGhTdHIpOwotICAg
ICAgICBjaGVja1NRTGl0ZVJldHVybkNvZGUocmV0KTsKLSAgICAgICAgQVNTRVJUKHJldCA9PSBT
UUxJVEVfRE9ORSk7Ci0KLSAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgcmV0dXJuIGRlbGV0
ZUNvb2tpZUludGVybmFsKG5hbWUsIGhvc3RTdHIsIHBhdGhTdHIpOwogICAgIH0KIAotICAgIHJl
dHVybiAtMTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWludCBDb29raWVKYXJEQjo6ZGVsZXRl
Q29va2llSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwg
Y29uc3QgU3RyaW5nJiBwYXRoKQorYm9vbCBDb29raWVKYXJEQjo6ZGVsZXRlQ29va2llSW50ZXJu
YWwoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5n
JiBwYXRoKQogewotICAgIFNRTGl0ZVN0YXRlbWVudCogc3RhdGVtZW50OwotICAgIGlmICghcGF0
aC5pc0VtcHR5KCkpIHsKLSAgICAgICAgc3RhdGVtZW50ID0gZ2V0UHJlcGFyZVN0YXRlbWVudChE
RUxFVEVfQ09PS0lFX0JZX05BTUVfRE9NQUlOX1BBVEhfU1FMKTsKLSAgICAgICAgQVNTRVJUKHN0
YXRlbWVudCk7Ci0gICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgbmFtZSk7Ci0gICAgICAg
IHN0YXRlbWVudC0+YmluZFRleHQoMiwgZG9tYWluKTsKLSAgICAgICAgc3RhdGVtZW50LT5iaW5k
VGV4dCgzLCBwYXRoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdGF0ZW1lbnQgPSBnZXRQcmVw
YXJlU3RhdGVtZW50KERFTEVURV9DT09LSUVfQllfTkFNRV9ET01BSU5fU1FMKTsKLSAgICAgICAg
QVNTRVJUKHN0YXRlbWVudCk7Ci0gICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgbmFtZSk7
Ci0gICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMiwgZG9tYWluKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gc3RhdGVtZW50LT5zdGVwKCk7CisgICAgYXV0byYgc3RhdGVtZW50ID0gcHJlcGFyZWRT
dGF0ZW1lbnQocGF0aC5pc0VtcHR5KCkgPyBERUxFVEVfQ09PS0lFX0JZX05BTUVfRE9NQUlOX1NR
TCA6IERFTEVURV9DT09LSUVfQllfTkFNRV9ET01BSU5fUEFUSF9TUUwpOworICAgIHN0YXRlbWVu
dC5iaW5kVGV4dCgxLCBuYW1lKTsKKyAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgZG9tYWluKTsK
KyAgICBpZiAoIXBhdGguaXNFbXB0eSgpKQorICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMywg
cGF0aCk7CisgICAgcmV0dXJuIGNoZWNrU1FMaXRlUmV0dXJuQ29kZShzdGF0ZW1lbnQuc3RlcCgp
KTsKIH0KIAotaW50IENvb2tpZUphckRCOjpkZWxldGVDb29raWVzKGNvbnN0IFN0cmluZyYpCiti
b29sIENvb2tpZUphckRCOjpkZWxldGVDb29raWVzKGNvbnN0IFN0cmluZyYpCiB7CiAgICAgLy8g
Tk9UIElNUExFTUVOVEVECiAgICAgLy8gVE9ETzogdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxl
ZCBpZiBhcHBsaWNhdGlvbiBjYWxscyBXS0Nvb2tpZU1hbmFnZXJEZWxldGVDb29raWVzRm9ySG9z
dG5hbWUoKSBpbiBXS0Nvb2tpZU1hbmFnZXIuaC4KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWludCBDb29raWVKYXJEQjo6ZGVsZXRlQWxsQ29va2llcygpCitib29sIENv
b2tpZUphckRCOjpkZWxldGVBbGxDb29raWVzKCkKIHsKICAgICBpZiAoIWlzRW5hYmxlZCgpIHx8
ICFtX2RhdGFiYXNlLmlzT3BlbigpKQotICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIHJldHVybiBleGVjdXRlU2ltcGxlU3FsKERFTEVURV9BTExfQ09PS0lF
X1NRTCk7CisgICAgcmV0dXJuIGV4ZWN1dGVTcWwoREVMRVRFX0FMTF9DT09LSUVfU1FMKTsKIH0K
IAogdm9pZCBDb29raWVKYXJEQjo6Y3JlYXRlUHJlcGFyZVN0YXRlbWVudChjb25zdCBTdHJpbmcm
IHNxbCkKQEAgLTU1OCwyNSArNTM1LDI2IEBAIHZvaWQgQ29va2llSmFyREI6OmNyZWF0ZVByZXBh
cmVTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBzcWwpCiAgICAgbV9zdGF0ZW1lbnRzLmFkZChzcWws
IFdURk1vdmUoc3RhdGVtZW50KSk7CiB9CiAKLVNRTGl0ZVN0YXRlbWVudCogQ29va2llSmFyREI6
OmdldFByZXBhcmVTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBzcWwpCitTUUxpdGVTdGF0ZW1lbnQm
IENvb2tpZUphckRCOjpwcmVwYXJlZFN0YXRlbWVudChjb25zdCBTdHJpbmcmIHNxbCkKIHsKICAg
ICBjb25zdCBhdXRvJiBzdGF0ZW1lbnQgPSBtX3N0YXRlbWVudHMuZ2V0KHNxbCk7CiAgICAgQVNT
RVJUKHN0YXRlbWVudCk7CiAgICAgc3RhdGVtZW50LT5yZXNldCgpOwotICAgIHJldHVybiBzdGF0
ZW1lbnQ7CisgICAgcmV0dXJuICpzdGF0ZW1lbnQ7CiB9CiAKLWludCBDb29raWVKYXJEQjo6ZXhl
Y3V0ZVNpbXBsZVNxbChjb25zdCBTdHJpbmcmIHNxbCwgYm9vbCBpZ25vcmVFcnJvcikKK2Jvb2wg
Q29va2llSmFyREI6OmV4ZWN1dGVTcWwoY29uc3QgU3RyaW5nJiBzcWwpCiB7CiAgICAgU1FMaXRl
U3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCBzcWwpOwogICAgIGludCByZXQgPSBzdGF0
ZW1lbnQucHJlcGFyZUFuZFN0ZXAoKTsKICAgICBzdGF0ZW1lbnQuZmluYWxpemUoKTsKIAotICAg
IGNoZWNrU1FMaXRlUmV0dXJuQ29kZShyZXQpOwotICAgIGlmIChyZXQgIT0gU1FMSVRFX09LICYm
IHJldCAhPSBTUUxJVEVfRE9ORSAmJiByZXQgIT0gU1FMSVRFX1JPVyAmJiAhaWdub3JlRXJyb3Ip
CisgICAgaWYgKCFjaGVja1NRTGl0ZVJldHVybkNvZGUocmV0KSkgewogICAgICAgICBMT0dfRVJS
T1IoIkZhaWxlZCB0byBleGVjdXRlICVzIGVycm9yOiAlcyIsIHNxbC5hc2NpaSgpLmRhdGEoKSwg
bV9kYXRhYmFzZS5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CiAKLSAgICByZXR1cm4gcmV0OworICAgIHJldHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvQ29va2llSmFyREIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
b29raWVKYXJEQi5oCmluZGV4IDY5NWI5NjdhMTIyLi45ZjRiOTUyNDlmOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckRCLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckRCLmgKQEAgLTQw
LDM0ICs0MCwzOCBAQCBjbGFzcyBDb29raWVKYXJEQiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoQ29va2llSmFyREIpOwogCiBwdWJsaWM6CisgICAgZW51bSBjbGFzcyBTb3VyY2UgeworICAg
ICAgICBOZXR3b3JrLAorICAgICAgICBTY3JpcHQKKyAgICB9OwogICAgIHZvaWQgb3BlbigpOwot
ICAgIGJvb2wgaXNFbmFibGVkKCk7CisgICAgYm9vbCBpc0VuYWJsZWQoKSBjb25zdDsKICAgICB2
b2lkIHNldEVuYWJsZWQoYm9vbCk7CiAKLSAgICBib29sIHNlYXJjaENvb2tpZXMoY29uc3QgU3Ry
aW5nJiByZXF1ZXN0VXJsLCBjb25zdCBzdGQ6Om9wdGlvbmFsPGJvb2w+JiBodHRwT25seSwgY29u
c3Qgc3RkOjpvcHRpb25hbDxib29sPiYgc2VjdXJlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPGJvb2w+
JiBzZXNzaW9uLCBWZWN0b3I8Q29va2llPiYgcmVzdWx0cyk7Ci0gICAgaW50IHNldENvb2tpZShj
b25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWUsIGJvb2wgZnJvbUphdmFTY3Jp
cHQpOwotICAgIGludCBzZXRDb29raWUoY29uc3QgQ29va2llJik7CisgICAgc3RkOjpvcHRpb25h
bDxWZWN0b3I8Q29va2llPj4gc2VhcmNoQ29va2llcyhjb25zdCBTdHJpbmcmIHJlcXVlc3RVcmws
IGNvbnN0IHN0ZDo6b3B0aW9uYWw8Ym9vbD4mIGh0dHBPbmx5LCBjb25zdCBzdGQ6Om9wdGlvbmFs
PGJvb2w+JiBzZWN1cmUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8Ym9vbD4mIHNlc3Npb24pOworICAg
IGJvb2wgc2V0Q29va2llKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZSwg
U291cmNlKTsKKyAgICBib29sIHNldENvb2tpZShjb25zdCBDb29raWUmKTsKIAotICAgIGludCBk
ZWxldGVDb29raWUoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAg
aW50IGRlbGV0ZUNvb2tpZXMoY29uc3QgU3RyaW5nJiB1cmwpOwotICAgIGludCBkZWxldGVBbGxD
b29raWVzKCk7CisgICAgYm9vbCBkZWxldGVDb29raWUoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IFN0cmluZyYgbmFtZSk7CisgICAgYm9vbCBkZWxldGVDb29raWVzKGNvbnN0IFN0cmluZyYgdXJs
KTsKKyAgICBib29sIGRlbGV0ZUFsbENvb2tpZXMoKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIENv
b2tpZUphckRCKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VQYXRoKTsKICAgICBXRUJDT1JFX0VYUE9S
VCB+Q29va2llSmFyREIoKTsKIAogcHJpdmF0ZToKIAotICAgIGJvb2wgbV9pc0VuYWJsZWQge3Ry
dWV9OworICAgIGJvb2wgbV9pc0VuYWJsZWQgeyB0cnVlIH07CiAgICAgU3RyaW5nIG1fZGF0YWJh
c2VQYXRoOwogCi0gICAgYm9vbCBtX2RldGVjdGVkRGF0YWJhc2VDb3JydXB0aW9uIHtmYWxzZX07
CisgICAgYm9vbCBtX2RldGVjdGVkRGF0YWJhc2VDb3JydXB0aW9uIHsgZmFsc2UgfTsKIAogICAg
IGJvb2wgaXNPbk1lbW9yeSgpIGNvbnN0IHsgcmV0dXJuIChtX2RhdGFiYXNlUGF0aCA9PSAiOm1l
bW9yeToiKTsgfTsKIAogICAgIGJvb2wgb3BlbkRhdGFiYXNlKCk7CiAgICAgdm9pZCBjbG9zZURh
dGFiYXNlKCk7CiAKLSAgICB2b2lkIGNoZWNrU1FMaXRlUmV0dXJuQ29kZShpbnQgYWN0dWFsKTsK
KyAgICBib29sIGNoZWNrU1FMaXRlUmV0dXJuQ29kZShpbnQpOwogICAgIHZvaWQgZmxhZ0RhdGFi
YXNlQ29ycnVwdGlvbigpOwogICAgIGJvb2wgY2hlY2tEYXRhYmFzZUNvcnJ1cHRpb25BbmRSZW1v
dmVJZk5lZWRlZCgpOwogICAgIFN0cmluZyBnZXRDb3JydXB0aW9uTWFya2VyUGF0aCgpIGNvbnN0
OwpAQCAtNzgsMTEgKzgyLDExIEBAIHByaXZhdGU6CiAgICAgdm9pZCB2ZXJpZnlTY2hlbWFWZXJz
aW9uKCk7CiAgICAgdm9pZCBkZWxldGVBbGxUYWJsZXMoKTsKIAotICAgIHZvaWQgY3JlYXRlUHJl
cGFyZVN0YXRlbWVudChjb25zdCBTdHJpbmcmIHNxbCk7Ci0gICAgU1FMaXRlU3RhdGVtZW50KiBn
ZXRQcmVwYXJlU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3FsKTsKLSAgICBpbnQgZXhlY3V0ZVNp
bXBsZVNxbChjb25zdCBTdHJpbmcmIHNxbCwgYm9vbCBpZ25vcmVFcnJvciA9IGZhbHNlKTsKKyAg
ICB2b2lkIGNyZWF0ZVByZXBhcmVTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJik7CisgICAgU1FMaXRl
U3RhdGVtZW50JiBwcmVwYXJlZFN0YXRlbWVudChjb25zdCBTdHJpbmcmKTsKKyAgICBib29sIGV4
ZWN1dGVTcWwoY29uc3QgU3RyaW5nJik7CiAKLSAgICBpbnQgZGVsZXRlQ29va2llSW50ZXJuYWwo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBw
YXRoKTsKKyAgICBib29sIGRlbGV0ZUNvb2tpZUludGVybmFsKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYgcGF0aCk7CiAgICAgYm9vbCBoYXNI
dHRwT25seUNvb2tpZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBj
b25zdCBTdHJpbmcmIHBhdGgpOwogCiAgICAgU1FMaXRlRGF0YWJhc2UgbV9kYXRhYmFzZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVVdGls
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVVdGlsLmNw
cAppbmRleCBjZjU1ODg0ODI2Zi4uYTBlYmMzY2IxNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVVdGlsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llVXRpbC5jcHAKQEAgLTE0MSwxMCArMTQx
LDEwIEBAIHN0YXRpYyB2b2lkIHBhcnNlQ29va2llQXR0cmlidXRlcyhjb25zdCBTdHJpbmcmIGF0
dHJpYnV0ZSwgY29uc3QgU3RyaW5nJiBkb21haW4sCiAgICAgfQogfQogCi1ib29sIHBhcnNlQ29v
a2llSGVhZGVyKGNvbnN0IFN0cmluZyYgY29va2llTGluZSwgY29uc3QgU3RyaW5nJiBkb21haW4s
IENvb2tpZSYgcmVzdWx0KQorc3RkOjpvcHRpb25hbDxDb29raWU+IHBhcnNlQ29va2llSGVhZGVy
KGNvbnN0IFN0cmluZyYgY29va2llTGluZSwgY29uc3QgU3RyaW5nJiBkb21haW4pCiB7CiAgICAg
aWYgKGNvb2tpZUxpbmUubGVuZ3RoKCkgPj0gTUFYX0NPT0tJRV9MSU5FKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICAvLyBUaGlzIEFsZ29yaXRobSBp
cyBiYXNlZCBvbiB0aGUgYWxnb3JpdGhtIGRlZmluZWQgaW4gUkZDIDYyNjUgNS4yIGh0dHBzOi8v
dG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2MjY1I3NlY3Rpb24tNS4yLwogCkBAIC0xNjUsMTYgKzE2
NSwxNyBAQCBib29sIHBhcnNlQ29va2llSGVhZGVyKGNvbnN0IFN0cmluZyYgY29va2llTGluZSwg
Y29uc3QgU3RyaW5nJiBkb21haW4sIENvb2tpZSYgcgogICAgICAgICBjb29raWVWYWx1ZSA9IGNv
b2tpZVBhaXIuc3Vic3RyaW5nKGFzc2lnbm1lbnRQb3NpdGlvbiArIDEpOwogICAgIH0KIAotICAg
IHJlc3VsdC5uYW1lID0gY29va2llTmFtZS5zdHJpcFdoaXRlU3BhY2UoKTsKLSAgICByZXN1bHQu
dmFsdWUgPSBjb29raWVWYWx1ZS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICBDb29raWUgY29va2ll
OworICAgIGNvb2tpZS5uYW1lID0gY29va2llTmFtZS5zdHJpcFdoaXRlU3BhY2UoKTsKKyAgICBj
b29raWUudmFsdWUgPSBjb29raWVWYWx1ZS5zdHJpcFdoaXRlU3BhY2UoKTsKIAogICAgIGJvb2wg
aGFzTWF4QWdlID0gZmFsc2U7Ci0gICAgcmVzdWx0LnNlc3Npb24gPSB0cnVlOworICAgIGNvb2tp
ZS5zZXNzaW9uID0gdHJ1ZTsKIAogICAgIGZvciAoYXV0byBhdHRyaWJ1dGUgOiBjb29raWVMaW5l
LnNwbGl0QWxsb3dpbmdFbXB0eUVudHJpZXMoJzsnKSkKLSAgICAgICAgcGFyc2VDb29raWVBdHRy
aWJ1dGVzKGF0dHJpYnV0ZSwgZG9tYWluLCBoYXNNYXhBZ2UsIHJlc3VsdCk7CisgICAgICAgIHBh
cnNlQ29va2llQXR0cmlidXRlcyhhdHRyaWJ1dGUsIGRvbWFpbiwgaGFzTWF4QWdlLCBjb29raWUp
OwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGNvb2tpZTsKIH0KIAogU3RyaW5nIGRl
ZmF1bHRQYXRoRm9yVVJMKGNvbnN0IFVSTCYgdXJsKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZVV0aWwuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVVdGlsLmgKaW5kZXggYTg5YzlhYjdiOTYuLjQ5MGQz
NjJiYmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q29va2llVXRpbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
b29raWVVdGlsLmgKQEAgLTM0LDkgKzM0LDkgQEAgc3RydWN0IENvb2tpZTsKIAogbmFtZXNwYWNl
IENvb2tpZVV0aWwgewogCi1ib29sIHBhcnNlQ29va2llSGVhZGVyKGNvbnN0IFN0cmluZyYgY29v
a2llTGluZSwgY29uc3QgU3RyaW5nJiBkb21haW4sIENvb2tpZSYgcmVzdWx0KTsKK3N0ZDo6b3B0
aW9uYWw8Q29va2llPiBwYXJzZUNvb2tpZUhlYWRlcihjb25zdCBTdHJpbmcmIGNvb2tpZUxpbmUs
IGNvbnN0IFN0cmluZyYgZG9tYWluKTsKIAotYm9vbCBpc0lQQWRkcmVzcyhjb25zdCBTdHJpbmcm
IGhvc3RuYW1lKTsKK2Jvb2wgaXNJUEFkZHJlc3MoY29uc3QgU3RyaW5nJik7CiAKIGJvb2wgZG9t
YWluTWF0Y2goY29uc3QgU3RyaW5nJiBjb29raWVEb21haW4sIGNvbnN0IFN0cmluZyYgaG9zdCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2lu
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcAppbmRl
eCA1NDM2YTI2YWQ1MS4uNzhkNTZlNzk1ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKQEAgLTM3NiwxMCArMzc2LDggQEAgc3RhdGljIFN0cmlu
ZyBjYWNoZWRTdG9yYWdlRGlyZWN0b3J5KERXT1JEIHBhdGhJZGVudGlmaWVyKQogICAgIHJldHVy
biBkaXJlY3Rvcnk7CiB9CiAKLVN0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcm
LCBQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKK3N0YXRpYyBTdHJpbmcgZ2VuZXJhdGVUZW1w
b3JhcnlQYXRoKGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgU3RyaW5nJik+JiBhY3Rpb24pCiB7
Ci0gICAgaGFuZGxlID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7Ci0KICAgICB3Y2hhcl90IHRlbXBQ
YXRoW01BWF9QQVRIXTsKICAgICBpbnQgdGVtcFBhdGhMZW5ndGggPSA6OkdldFRlbXBQYXRoVyhX
VEZfQVJSQVlfTEVOR1RIKHRlbXBQYXRoKSwgdGVtcFBhdGgpOwogICAgIGlmICh0ZW1wUGF0aExl
bmd0aCA8PSAwIHx8IHRlbXBQYXRoTGVuZ3RoID4gV1RGX0FSUkFZX0xFTkdUSCh0ZW1wUGF0aCkp
CkBAIC00MDIsMTAgKzQwMCwyMSBAQCBTdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUoY29uc3QgU3Ry
aW5nJiwgUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCiAgICAgICAgIHByb3Bvc2VkUGF0aCA9
IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChudWxsVGVybWluYXRlZFdDaGFyVG9TdHJpbmcodGVt
cFBhdGgpLCBudWxsVGVybWluYXRlZFdDaGFyVG9TdHJpbmcodGVtcEZpbGUpKTsKICAgICAgICAg
aWYgKHByb3Bvc2VkUGF0aC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBicmVhazsKKyAgICB9IHdo
aWxlICghYWN0aW9uKHByb3Bvc2VkUGF0aCkpOworCisgICAgcmV0dXJuIHByb3Bvc2VkUGF0aDsK
K30KKworU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYsIFBsYXRmb3JtRmls
ZUhhbmRsZSYgaGFuZGxlKQoreworICAgIGhhbmRsZSA9IElOVkFMSURfSEFORExFX1ZBTFVFOwog
CisgICAgU3RyaW5nIHByb3Bvc2VkUGF0aCA9IGdlbmVyYXRlVGVtcG9yYXJ5UGF0aChbJmhhbmRs
ZV0oY29uc3QgU3RyaW5nJiBwcm9wb3NlZFBhdGgpIHsKICAgICAgICAgLy8gdXNlIENSRUFURV9O
RVcgdG8gYXZvaWQgb3ZlcndyaXRpbmcgYW4gZXhpc3RpbmcgZmlsZSB3aXRoIHRoZSBzYW1lIG5h
bWUKICAgICAgICAgaGFuZGxlID0gOjpDcmVhdGVGaWxlVyhzdHJpbmdUb051bGxUZXJtaW5hdGVk
V0NoYXIocHJvcG9zZWRQYXRoKS5kYXRhKCksIEdFTkVSSUNfUkVBRCB8IEdFTkVSSUNfV1JJVEUs
IDAsIDAsIENSRUFURV9ORVcsIEZJTEVfQVRUUklCVVRFX05PUk1BTCwgMCk7Ci0gICAgfSB3aGls
ZSAoIWlzSGFuZGxlVmFsaWQoaGFuZGxlKSAmJiBHZXRMYXN0RXJyb3IoKSA9PSBFUlJPUl9BTFJF
QURZX0VYSVNUUyk7CisKKyAgICAgICAgcmV0dXJuIGlzSGFuZGxlVmFsaWQoaGFuZGxlKSB8fCBH
ZXRMYXN0RXJyb3IoKSA9PSBFUlJPUl9BTFJFQURZX0VYSVNUUzsKKyAgICB9KTsKIAogICAgIGlm
ICghaXNIYW5kbGVWYWxpZChoYW5kbGUpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC01
NTEsNSArNTYwLDI3IEBAIFN0cmluZyByZWFsUGF0aChjb25zdCBTdHJpbmcmIGZpbGVQYXRoKQog
ICAgIHJldHVybiBnZXRGaW5hbFBhdGhOYW1lKGZpbGVQYXRoKTsKIH0KIAorU3RyaW5nIGNyZWF0
ZVRlbXBvcmFyeURpcmVjdG9yeSgpCit7CisgICAgcmV0dXJuIGdlbmVyYXRlVGVtcG9yYXJ5UGF0
aChbXShjb25zdCBTdHJpbmcmIHByb3Bvc2VkUGF0aCkgeworICAgICAgICByZXR1cm4gbWFrZUFs
bERpcmVjdG9yaWVzKHByb3Bvc2VkUGF0aCk7CisgICAgfSk7Cit9CisKK2Jvb2wgZGVsZXRlTm9u
RW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBkaXJlY3RvcnlQYXRoKQoreworICAgIFNIRklM
RU9QU1RSVUNUIGRlbGV0ZU9wZXJhdGlvbiA9IHsKKyAgICAgICAgbnVsbHB0ciwKKyAgICAgICAg
Rk9fREVMRVRFLAorICAgICAgICBzdHJpbmdUb051bGxUZXJtaW5hdGVkV0NoYXIoZGlyZWN0b3J5
UGF0aCkuZGF0YSgpLAorICAgICAgICBMIiIsCisgICAgICAgIEZPRl9OT0NPTkZJUk1BVElPTiB8
IEZPRl9OT0VSUk9SVUkgfCBGT0ZfU0lMRU5ULAorICAgICAgICBmYWxzZSwKKyAgICAgICAgMCwK
KyAgICAgICAgTCIiCisgICAgfTsKKyAgICByZXR1cm4gIVNIRmlsZU9wZXJhdGlvbigmZGVsZXRl
T3BlcmF0aW9uKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgRmlsZVN5c3RlbQogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9n
CmluZGV4IDJiNmM3NzUzNDA0Li4wMGRjNWUzZjUwZCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE4LTExLTA5ICBC
YXN1a2UgU3V6dWtpICA8YmFzdWtlLnN1enVraUBzb255LmNvbT4KKworICAgICAgICBbQ3VybF0g
QWRkIEFQSSBUZXN0IGZvciBDdXJsIGNvb2tpZSBiYWNrZW5kLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxNDkzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgWW91ZW5uIEZhYmxldC4KKworICAgICAgICBBZGQgdW5pdCB0ZXN0IHRvIFRlc3RXZWJDb3Jl
LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdpbi5jbWFrZToKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY3VybC9Db29raWVzLmNwcDogQWRkZWQuCisK
IDIwMTgtMTEtMDcgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAg
IE92ZXJyaWRlICtbVUlLZXlib2FyZCBpc0luSGFyZHdhcmVLZXlib2FyZE1vZGVdIGluIFdlYktp
dFRlc3RSdW5uZXIgYW5kIER1bXBSZW5kZXJUcmVlCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1BsYXRmb3JtV2luLmNtYWtlIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9QbGF0Zm9ybVdp
bi5jbWFrZQppbmRleCBmMTNiODJlYWU3NS4uMzY1MGU0MDY0NWEgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAtNzQsNiArNzQsNyBAQCBpZiAoJHtXVEZfUExBVEZPUk1f
V0lOX0NBSVJPfSkKICAgICAgICAgdmNydW50aW1lCiAgICAgKQogICAgIGxpc3QoQVBQRU5EIFRl
c3RXZWJDb3JlTGliX1NPVVJDRVMKKyAgICAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMv
V2ViQ29yZS9jdXJsL0Nvb2tpZXMuY3BwCiAgICAgICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rl
c3RzL1dlYkNvcmUvd2luL0JpdG1hcEltYWdlLmNwcAogICAgICAgICAke1RFU1RXRUJLSVRBUElf
RElSfS9UZXN0cy9XZWJDb3JlL0NyeXB0b0RpZ2VzdC5jcHAKICAgICAgICAgJHtURVNUV0VCS0lU
QVBJX0RJUn0vVGVzdHMvV2ViQ29yZS9QdWJsaWNTdWZmaXguY3BwCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY3VybC9Db29raWVzLmNwcCBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jdXJsL0Nvb2tpZXMuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zYTA5OWE1YzdhNwotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9jdXJsL0Nvb2tpZXMuY3BwCkBAIC0w
LDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggU29ueSBJbnRlcmFjdGl2ZSBF
bnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
VVNFKENVUkwpCisKKyNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZUphckRCLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9Db29raWVVdGlsLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVtLmg+Cisj
aW5jbHVkZSA8bWVtb3J5PgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNl
IFRlc3RXZWJLaXRBUEkgeworCituYW1lc3BhY2UgQ3VybCB7CisKK2NsYXNzIEN1cmxDb29raWVz
OiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CitwdWJsaWM6CisgICAgdm9pZCBTZXRVcCgpIGZpbmFs
CisgICAgeworICAgICAgICBtX2Nvb2tpZURpcmVjdG9yeSA9IEZpbGVTeXN0ZW06OmNyZWF0ZVRl
bXBvcmFyeURpcmVjdG9yeSgpOworCisgICAgICAgIG1fY29va2llSmFyID0gc3RkOjptYWtlX3Vu
aXF1ZTxXZWJDb3JlOjpDb29raWVKYXJEQj4oRmlsZVN5c3RlbTo6cGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KG1fY29va2llRGlyZWN0b3J5LCAiY29va2llZGIuc3FsIikpOworICAgICAgICBtX2Nv
b2tpZUphci0+b3BlbigpOworICAgICAgICBtX2Nvb2tpZUphci0+c2V0RW5hYmxlZCh0cnVlKTsK
KyAgICB9CisKKyAgICB2b2lkIFRlYXJEb3duKCkgZmluYWwKKyAgICB7CisgICAgICAgIG1fY29v
a2llSmFyID0gbnVsbHB0cjsKKworICAgICAgICBGaWxlU3lzdGVtOjpkZWxldGVOb25FbXB0eURp
cmVjdG9yeShtX2Nvb2tpZURpcmVjdG9yeSk7CisgICAgICAgIG1fY29va2llRGlyZWN0b3J5ID0g
U3RyaW5nKCk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgc3RkOjp1bmlxdWVfcHRyPENvb2tp
ZUphckRCPiBtX2Nvb2tpZUphcjsKKyAgICBTdHJpbmcgbV9jb29raWVEaXJlY3Rvcnk7Cit9Owor
CitURVNUX0YoQ3VybENvb2tpZXMsIFRlc3RIdHRwT25seUNhc2UpCit7CisgICAgLy8gc3VjY2Vz
czogZnJvbSBuZXR3b3JrCisgICAgRVhQRUNUX1RSVUUobV9jb29raWVKYXItPnNldENvb2tpZSgi
aHR0cDovL2V4YW1wbGUuY29tIiwgImZvbz1iYXI7IEh0dHBPbmx5IiwgQ29va2llSmFyREI6OlNv
dXJjZTo6TmV0d29yaykpOworICAgIC8vIHN1Y2Nlc3M6IHdpbGRjYXJkIG9mIGRvbWFpbnMKKyAg
ICBFWFBFQ1RfVFJVRShtX2Nvb2tpZUphci0+c2V0Q29va2llKCJodHRwOi8vZXhhbXBsZS5jb20i
LCAiYmluZ289Ym9uZ287IiwgQ29va2llSmFyREI6OlNvdXJjZTo6U2NyaXB0KSk7CisgICAgLy8g
ZmFpbHVyZTogZm9vIGlzIGFscmVhZHkgc3RvcmVkIGFzIEh0dHBPbmx5CisgICAgRVhQRUNUX0ZB
TFNFKG1fY29va2llSmFyLT5zZXRDb29raWUoImh0dHA6Ly9leGFtcGxlLmNvbSIsICJmb289YmFy
OyIsIENvb2tpZUphckRCOjpTb3VyY2U6OlNjcmlwdCkpOworICAgIC8vIGZhaWx1cmU6IGluY29u
c2lzdGVudC4gU291cmNlIGlzIFNjcmlwdCwgYnV0IGF0dHJpYnV0ZSBzYXlzIEh0dHBPbmx5Cisg
ICAgRVhQRUNUX0ZBTFNFKG1fY29va2llSmFyLT5zZXRDb29raWUoImh0dHA6Ly9leGFtcGxlLmNv
bSIsICJmb289YmFyOyBIdHRwT25seSIsIENvb2tpZUphckRCOjpTb3VyY2U6OlNjcmlwdCkpOwor
fQorCit9CisKK30KKworI2VuZGlmIC8vIFVTRShDVVJMKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354594</attachid>
            <date>2018-11-12 14:41:13 -0800</date>
            <delta_ts>2018-11-12 15:18:51 -0800</delta_ts>
            <desc>PATCH AGAIN</desc>
            <filename>191493.diff</filename>
            <type>text/plain</type>
            <size>29901</size>
            <attacher name="Basuke Suzuki">basuke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyNWU0YTFhNmMzMi4uYjVlNWEyNTc4NWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MiBAQAorMjAxOC0xMS0wOSAgQmFzdWtlIFN1enVraSAgPGJhc3VrZS5zdXp1a2lAc29u
eS5jb20+CisKKyAgICAgICAgW0N1cmxdIEFkZCBBUEkgVGVzdCBmb3IgQ3VybCBjb29raWUgYmFj
a2VuZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
MTQ5MworCisgICAgICAgIFJldmlld2VkIGJ5IFlvdWVubiBGYWJsZXQuCisKKyAgICAgICAgUmVm
YWN0b3JpbmcgZm9yIGNvb2tpZSBiYWNrZW5kIGludGVyZmFjZS4KKworICAgICAgICBUZXN0czog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2N1cmwvQ29va2llcy5jcHAKKworICAgICAgICAq
IHBsYXRmb3JtL0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q29va2llSmFyQ3VybERhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZXNGb3JT
ZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckN1cmxEYXRhYmFzZTo6c2V0Q29v
a2llc0Zyb21ET00gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFyQ3VybERhdGFi
YXNlOjpzZXRDb29raWVzRnJvbUhUVFBSZXNwb25zZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb29raWVKYXJDdXJsRGF0YWJhc2U6OmdldFJhd0Nvb2tpZXMgY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJEQi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb29raWVKYXJEQjo6b3BlbkRhdGFiYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUph
ckRCOjpjaGVja1NRTGl0ZVJldHVybkNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29va2llSmFy
REI6OmlzRW5hYmxlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXJEQjo6c2Vh
cmNoQ29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpDb29raWVKYXJEQjo6c2V0Q29va2llKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckRCOjpkZWxldGVDb29raWUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29va2llSmFyREI6OmRlbGV0ZUNvb2tpZUludGVybmFsKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvb2tpZUphckRCOjpkZWxldGVDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
b2tpZUphckRCOjpkZWxldGVBbGxDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUph
ckRCOjpleGVjdXRlU2ltcGxlU3FsKToKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZUphckRCOjpp
c0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Db29r
aWVKYXJEQi5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVVdGlsLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNvb2tpZVV0aWw6OnBhcnNlQ29va2llSGVhZGVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llVXRpbC5oOgorICAgICAgICAqIHBs
YXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVTeXN0
ZW06OmdlbmVyYXRlVGVtcG9yYXJ5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlU3lzdGVt
OjpvcGVuVGVtcG9yYXJ5RmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlU3lzdGVtOjpjcmVh
dGVUZW1wb3JhcnlEaXJlY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVN5c3RlbTo6ZGVs
ZXRlTm9uRW1wdHlEaXJlY3RvcnkpOgorCiAyMDE4LTExLTA3ICBEb24gT2xtc3RlYWQgIDxkb24u
b2xtc3RlYWRAc29ueS5jb20+CiAKICAgICAgICAgU2ltcGxpZnkgbWFjcm9zIGluIHBsYXRmb3Jt
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgKaW5kZXggYTUyYWI0YzdjZjQuLmUxNDBi
MjQ1N2UxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oCkBAIC0xODcsNiArMTg3
LDExIEBAIFdFQkNPUkVfRVhQT1JUIE5TU3RyaW5nICpjcmVhdGVUZW1wb3JhcnlEaXJlY3Rvcnko
TlNTdHJpbmcgKmRpcmVjdG9yeVByZWZpeCk7CiBXRUJDT1JFX0VYUE9SVCBib29sIGRlbGV0ZU5v
bkVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShX
SU5fQ0FJUk8pCitXRUJDT1JFX0VYUE9SVCBTdHJpbmcgY3JlYXRlVGVtcG9yYXJ5RGlyZWN0b3J5
KCk7CitXRUJDT1JFX0VYUE9SVCBib29sIGRlbGV0ZU5vbkVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0
cmluZyYpOworI2VuZGlmCisKIFdFQkNPUkVfRVhQT1JUIFN0cmluZyByZWFsUGF0aChjb25zdCBT
dHJpbmcmKTsKIAogY2xhc3MgTWFwcGVkRmlsZURhdGEgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckN1cmxEYXRhYmFzZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyQ3VybERhdGFiYXNl
LmNwcAppbmRleCA1ZTg0NTRhYTU0YS4uYzFhYzA5ZDgyNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsRGF0YWJhc2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJDdXJsRGF0
YWJhc2UuY3BwCkBAIC00NywxNCArNDcsMTMgQEAgc3RhdGljIFN0cmluZyBjb29raWVzRm9yU2Vz
c2lvbihjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIGNvbnN0IFVSTCYKICAg
ICBhdXRvIHNlYXJjaEhUVFBPbmx5ID0gKGZvckhUVFBIZWFkZXIgPyBzdGQ6Om51bGxvcHQgOiBz
dGQ6Om9wdGlvbmFsPGJvb2w+IHtmYWxzZX0pOwogICAgIGF1dG8gc2VjdXJlID0gdXJsLnByb3Rv
Y29sSXMoImh0dHBzIikgPyBzdGQ6Om51bGxvcHQgOiBzdGQ6Om9wdGlvbmFsPGJvb2w+IHtmYWxz
ZX07CiAKLSAgICBWZWN0b3I8Q29va2llPiByZXN1bHRzOwotICAgIGlmIChjb29raWVKYXJEQi5z
ZWFyY2hDb29raWVzKHVybC5zdHJpbmcoKSwgc2VhcmNoSFRUUE9ubHksIHNlY3VyZSwgc3RkOjpu
dWxsb3B0LCByZXN1bHRzKSkgewotICAgICAgICBmb3IgKGF1dG8gcmVzdWx0IDogcmVzdWx0cykg
eworICAgIGlmIChhdXRvIHJlc3VsdCA9IGNvb2tpZUphckRCLnNlYXJjaENvb2tpZXModXJsLnN0
cmluZygpLCBzZWFyY2hIVFRQT25seSwgc2VjdXJlLCBzdGQ6Om51bGxvcHQpKSB7CisgICAgICAg
IGZvciAoYXV0byYgY29va2llIDogKnJlc3VsdCkgewogICAgICAgICAgICAgaWYgKCFjb29raWVz
LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBjb29raWVzLmFwcGVuZCgiOyAiKTsKLSAgICAg
ICAgICAgIGNvb2tpZXMuYXBwZW5kKHJlc3VsdC5uYW1lKTsKKyAgICAgICAgICAgIGNvb2tpZXMu
YXBwZW5kKGNvb2tpZS5uYW1lKTsKICAgICAgICAgICAgIGNvb2tpZXMuYXBwZW5kKCI9Iik7Ci0g
ICAgICAgICAgICBjb29raWVzLmFwcGVuZChyZXN1bHQudmFsdWUpOworICAgICAgICAgICAgY29v
a2llcy5hcHBlbmQoY29va2llLnZhbHVlKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4g
Y29va2llcy50b1N0cmluZygpOwpAQCAtNjcsMTMgKzY2LDEzIEBAIHZvaWQgQ29va2llSmFyQ3Vy
bERhdGFiYXNlOjpzZXRDb29raWVzRnJvbURPTShjb25zdCBOZXR3b3JrU3RvcmFnZVNlc3Npb24m
IHNlc3NpCiAgICAgVU5VU0VEX1BBUkFNKGZpcnN0UGFydHkpOwogCiAgICAgQ29va2llSmFyREIm
IGNvb2tpZUphckRCID0gc2Vzc2lvbi5jb29raWVEYXRhYmFzZSgpOwotICAgIGNvb2tpZUphckRC
LnNldENvb2tpZSh1cmwuc3RyaW5nKCksIHZhbHVlLCB0cnVlKTsKKyAgICBjb29raWVKYXJEQi5z
ZXRDb29raWUodXJsLnN0cmluZygpLCB2YWx1ZSwgQ29va2llSmFyREI6OlNvdXJjZTo6U2NyaXB0
KTsKIH0KIAogdm9pZCBDb29raWVKYXJDdXJsRGF0YWJhc2U6OnNldENvb2tpZXNGcm9tSFRUUFJl
c3BvbnNlKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3QgVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgdmFsdWUpIGNvbnN0CiB7CiAgICAgQ29va2llSmFyREImIGNvb2tp
ZUphckRCID0gc2Vzc2lvbi5jb29raWVEYXRhYmFzZSgpOwotICAgIGNvb2tpZUphckRCLnNldENv
b2tpZSh1cmwuc3RyaW5nKCksIHZhbHVlLCBmYWxzZSk7CisgICAgY29va2llSmFyREIuc2V0Q29v
a2llKHVybC5zdHJpbmcoKSwgdmFsdWUsIENvb2tpZUphckRCOjpTb3VyY2U6Ok5ldHdvcmspOwog
fQogCiBzdGQ6OnBhaXI8U3RyaW5nLCBib29sPiBDb29raWVKYXJDdXJsRGF0YWJhc2U6OmNvb2tp
ZXNGb3JET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBjb25zdCBVUkwm
IGZpcnN0UGFydHksIGNvbnN0IFNhbWVTaXRlSW5mbyYsIGNvbnN0IFVSTCYgdXJsLCBzdGQ6Om9w
dGlvbmFsPHVpbnQ2NF90PiBmcmFtZUlELCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBwYWdlSUQs
IEluY2x1ZGVTZWN1cmVDb29raWVzKSBjb25zdApAQCAtMTEwLDcgKzEwOSwxMSBAQCBib29sIENv
b2tpZUphckN1cmxEYXRhYmFzZTo6Z2V0UmF3Q29va2llcyhjb25zdCBOZXR3b3JrU3RvcmFnZVNl
c3Npb24mIHNlc3Npb24sCiAgICAgVU5VU0VEX1BBUkFNKHBhZ2VJRCk7CiAKICAgICBDb29raWVK
YXJEQiYgY29va2llSmFyREIgPSBzZXNzaW9uLmNvb2tpZURhdGFiYXNlKCk7Ci0gICAgcmV0dXJu
IGNvb2tpZUphckRCLnNlYXJjaENvb2tpZXMoZmlyc3RQYXJ0eS5zdHJpbmcoKSwgc3RkOjpudWxs
b3B0LCBzdGQ6Om51bGxvcHQsIHN0ZDo6bnVsbG9wdCwgcmF3Q29va2llcyk7CisgICAgaWYgKGF1
dG8gY29va2llcyA9IGNvb2tpZUphckRCLnNlYXJjaENvb2tpZXMoZmlyc3RQYXJ0eS5zdHJpbmco
KSwgc3RkOjpudWxsb3B0LCBzdGQ6Om51bGxvcHQsIHN0ZDo6bnVsbG9wdCkpIHsKKyAgICAgICAg
cmF3Q29va2llcyA9IFdURk1vdmUoKmNvb2tpZXMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB2b2lkIENvb2tpZUphckN1cmxEYXRhYmFzZTo6
ZGVsZXRlQ29va2llKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vzc2lvbiwgY29uc3Qg
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJEQi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIuY3BwCmluZGV4IDQyMDQ5ZWQ0
N2M5Li5kNjc5NWY2ZWM4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL0Nvb2tpZUphckRCLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvQ29va2llSmFyREIuY3BwCkBAIC0xMTcsNyArMTE3LDcgQEAgYm9vbCBDb29r
aWVKYXJEQjo6b3BlbkRhdGFiYXNlKCkKICAgICBpZiAoZXhpc3RzRGF0YWJhc2VGaWxlKSB7CiAg
ICAgICAgIGlmIChtX2RhdGFiYXNlLm9wZW4obV9kYXRhYmFzZVBhdGgsIGZhbHNlKSkgewogICAg
ICAgICAgICAgaWYgKGNoZWNrRGF0YWJhc2VWYWxpZGl0eSgpKQotICAgICAgICAgICAgICAgIGV4
ZWN1dGVTaW1wbGVTcWwoREVMRVRFX0FMTF9TRVNTSU9OX0NPT0tJRV9TUUwpOworICAgICAgICAg
ICAgICAgIGV4ZWN1dGVTcWwoREVMRVRFX0FMTF9TRVNTSU9OX0NPT0tJRV9TUUwpOwogICAgICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gZGVsZXRlIGRhdGFiYXNlIGFuZCB0cnkg
dG8gcmUtY3JlYXRlIGFnYWluCiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJDb29raWUgZGF0
YWJhc2UgdmFsaWRpdHkgY2hlY2sgZmFpbGVkLCBhdHRlbXB0aW5nIHRvIHJlY3JlYXRlIHRoZSBk
YXRhYmFzZSIpOwpAQCAtMTQ3LDE4ICsxNDcsMTUgQEAgYm9vbCBDb29raWVKYXJEQjo6b3BlbkRh
dGFiYXNlKCkKIAogICAgIHZlcmlmeVNjaGVtYVZlcnNpb24oKTsKIAotICAgIGJvb2wgZGF0YWJh
c2VWYWxpZGl0eSA9IHRydWU7CiAgICAgaWYgKCFleGlzdHNEYXRhYmFzZUZpbGUgfHwgIW1fZGF0
YWJhc2UudGFibGVFeGlzdHMoIkNvb2tpZSIpKSB7Ci0gICAgICAgIGRhdGFiYXNlVmFsaWRpdHkg
Jj0gKGV4ZWN1dGVTaW1wbGVTcWwoQ1JFQVRFX0NPT0tJRV9UQUJMRV9TUUwpID09IFNRTElURV9E
T05FKTsKLSAgICAgICAgZGF0YWJhc2VWYWxpZGl0eSAmPSAoZXhlY3V0ZVNpbXBsZVNxbChDUkVB
VEVfRE9NQUlOX0lOREVYX1NRTCkgPT0gU1FMSVRFX0RPTkUpOwotICAgICAgICBkYXRhYmFzZVZh
bGlkaXR5ICY9IChleGVjdXRlU2ltcGxlU3FsKENSRUFURV9QQVRIX0lOREVYX1NRTCkgPT0gU1FM
SVRFX0RPTkUpOwotICAgIH0KKyAgICAgICAgYm9vbCBvayA9IGV4ZWN1dGVTcWwoQ1JFQVRFX0NP
T0tJRV9UQUJMRV9TUUwpICYmIGV4ZWN1dGVTcWwoQ1JFQVRFX0RPTUFJTl9JTkRFWF9TUUwpICYm
IGV4ZWN1dGVTcWwoQ1JFQVRFX1BBVEhfSU5ERVhfU1FMKTsKIAotICAgIGlmICghZGF0YWJhc2VW
YWxpZGl0eSkgewotICAgICAgICAvLyBnaXZlIHVwIGNyZWF0ZSBkYXRhYmFzZSBhdCB0aGlzIHRp
bWUgKGFsbCBjb29raWVzIG9uIHJlcXVlc3QvcmVzcG9uc2UgYXJlIGlnbm9yZWQpCi0gICAgICAg
IG1fZGF0YWJhc2UuY2xvc2UoKTsKLSAgICAgICAgZGVsZXRlQWxsRGF0YWJhc2VGaWxlcygpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghb2spIHsKKyAgICAgICAgICAgIC8v
IGdpdmUgdXAgY3JlYXRlIGRhdGFiYXNlIGF0IHRoaXMgdGltZSAoYWxsIGNvb2tpZXMgb24gcmVx
dWVzdC9yZXNwb25zZSBhcmUgaWdub3JlZCkKKyAgICAgICAgICAgIG1fZGF0YWJhc2UuY2xvc2Uo
KTsKKyAgICAgICAgICAgIGRlbGV0ZUFsbERhdGFiYXNlRmlsZXMoKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIG1fZGF0YWJhc2Uuc2V0U3luY2hy
b25vdXMoU1FMaXRlRGF0YWJhc2U6OlN5bmNOb3JtYWwpOwpAQCAtMjA2LDcgKzIwMyw3IEBAIHZv
aWQgQ29va2llSmFyREI6OnZlcmlmeVNjaGVtYVZlcnNpb24oKQogICAgIH0KIAogICAgIC8vIFVw
ZGF0ZSB2ZXJzaW9uCi0gICAgZXhlY3V0ZVNpbXBsZVNxbChTdHJpbmc6OmZvcm1hdCgiUFJBR01B
IHVzZXJfdmVyc2lvbj0lZCIsIHNjaGVtYVZlcnNpb24pKTsKKyAgICBleGVjdXRlU3FsKFN0cmlu
Zzo6Zm9ybWF0KCJQUkFHTUEgdXNlcl92ZXJzaW9uPSVkIiwgc2NoZW1hVmVyc2lvbikpOwogfQog
CiB2b2lkIENvb2tpZUphckRCOjpkZWxldGVBbGxUYWJsZXMoKQpAQCAtMjQ1LDEwICsyNDIsMTAg
QEAgYm9vbCBDb29raWVKYXJEQjo6Y2hlY2tEYXRhYmFzZUNvcnJ1cHRpb25BbmRSZW1vdmVJZk5l
ZWRlZCgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIENvb2tpZUphckRCOjpjaGVja1NR
TGl0ZVJldHVybkNvZGUoaW50IGFjdHVhbCkKK2Jvb2wgQ29va2llSmFyREI6OmNoZWNrU1FMaXRl
UmV0dXJuQ29kZShpbnQgY29kZSkKIHsKICAgICBpZiAoIW1fZGV0ZWN0ZWREYXRhYmFzZUNvcnJ1
cHRpb24pIHsKLSAgICAgICAgc3dpdGNoIChhY3R1YWwpIHsKKyAgICAgICAgc3dpdGNoIChjb2Rl
KSB7CiAgICAgICAgIGNhc2UgU1FMSVRFX0NPUlJVUFQ6CiAgICAgICAgIGNhc2UgU1FMSVRFX1ND
SEVNQToKICAgICAgICAgY2FzZSBTUUxJVEVfRk9STUFUOgpAQCAtMjU3LDYgKzI1NCw3IEBAIHZv
aWQgQ29va2llSmFyREI6OmNoZWNrU1FMaXRlUmV0dXJuQ29kZShpbnQgYWN0dWFsKQogICAgICAg
ICAgICAgbV9kZXRlY3RlZERhdGFiYXNlQ29ycnVwdGlvbiA9IHRydWU7CiAgICAgICAgIH0KICAg
ICB9CisgICAgcmV0dXJuIGNvZGUgPT0gU1FMSVRFX09LIHx8IGNvZGUgPT0gU1FMSVRFX0RPTkUg
fHwgY29kZSA9PSBTUUxJVEVfUk9XOwogfQogCiBib29sIENvb2tpZUphckRCOjpjaGVja0RhdGFi
YXNlVmFsaWRpdHkoKQpAQCAtMzA2LDcgKzMwNCw3IEBAIHZvaWQgQ29va2llSmFyREI6OmRlbGV0
ZUFsbERhdGFiYXNlRmlsZXMoKQogICAgIEZpbGVTeXN0ZW06OmRlbGV0ZUZpbGUobV9kYXRhYmFz
ZVBhdGggKyAiLXdhbCIpOwogfQogCi1ib29sIENvb2tpZUphckRCOjppc0VuYWJsZWQoKQorYm9v
bCBDb29raWVKYXJEQjo6aXNFbmFibGVkKCkgY29uc3QKIHsKICAgICBpZiAobV9kYXRhYmFzZVBh
dGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zMTQsMTcgKzMxMiwxNyBA
QCBib29sIENvb2tpZUphckRCOjppc0VuYWJsZWQoKQogICAgIHJldHVybiBtX2lzRW5hYmxlZDsK
IH0KIAotYm9vbCBDb29raWVKYXJEQjo6c2VhcmNoQ29va2llcyhjb25zdCBTdHJpbmcmIHJlcXVl
c3RVcmwsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8Ym9vbD4mIGh0dHBPbmx5LCBjb25zdCBzdGQ6Om9w
dGlvbmFsPGJvb2w+JiBzZWN1cmUsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8Ym9vbD4mIHNlc3Npb24s
IFZlY3RvcjxDb29raWU+JiByZXN1bHRzKQorc3RkOjpvcHRpb25hbDxWZWN0b3I8Q29va2llPj4g
Q29va2llSmFyREI6OnNlYXJjaENvb2tpZXMoY29uc3QgU3RyaW5nJiByZXF1ZXN0VXJsLCBjb25z
dCBzdGQ6Om9wdGlvbmFsPGJvb2w+JiBodHRwT25seSwgY29uc3Qgc3RkOjpvcHRpb25hbDxib29s
PiYgc2VjdXJlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPGJvb2w+JiBzZXNzaW9uKQogewogICAgIGlm
ICghaXNFbmFibGVkKCkgfHwgIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAogICAgIFVSTCByZXF1ZXN0VXJs
T2JqKHsgfSwgcmVxdWVzdFVybCk7CiAgICAgU3RyaW5nIHJlcXVlc3RIb3N0KHJlcXVlc3RVcmxP
YmouaG9zdCgpLnRvU3RyaW5nKCkuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKSk7CiAgICAgU3Ry
aW5nIHJlcXVlc3RQYXRoKHJlcXVlc3RVcmxPYmoucGF0aCgpLmNvbnZlcnRUb0FTQ0lJTG93ZXJj
YXNlKCkpOwogCiAgICAgaWYgKHJlcXVlc3RIb3N0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgaWYgKHJlcXVlc3RQ
YXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmVxdWVzdFBhdGggPSAiLyI7CkBAIC0zNDAsNyArMzM4
LDcgQEAgYm9vbCBDb29raWVKYXJEQjo6c2VhcmNoQ29va2llcyhjb25zdCBTdHJpbmcmIHJlcXVl
c3RVcmwsIGNvbnN0IHN0ZDo6b3B0aW9uYWw8Ym8KIAogICAgIGF1dG8gcHN0bXQgPSBzdGQ6Om1h
a2VfdW5pcXVlPFNRTGl0ZVN0YXRlbWVudD4obV9kYXRhYmFzZSwgc3FsKTsKICAgICBpZiAoIXBz
dG10KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CiAKICAgICBwc3RtdC0+cHJlcGFyZSgpOwogICAgIHBzdG10LT5iaW5kSW50KDEsIGh0dHBPbmx5
ID8gKmh0dHBPbmx5IDogLTEpOwpAQCAtMzcwLDkgKzM2OCw5IEBAIGJvb2wgQ29va2llSmFyREI6
OnNlYXJjaENvb2tpZXMoY29uc3QgU3RyaW5nJiByZXF1ZXN0VXJsLCBjb25zdCBzdGQ6Om9wdGlv
bmFsPGJvCiAgICAgfQogCiAgICAgaWYgKCFwc3RtdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgcmVzdWx0cy5jbGVhcigpOworICAg
IFZlY3RvcjxDb29raWU+IHJlc3VsdHM7CiAKICAgICB3aGlsZSAocHN0bXQtPnN0ZXAoKSA9PSBT
UUxJVEVfUk9XKSB7CiAKQEAgLTQxMiw5MSArNDEwLDgzIEBAIGJvb2wgQ29va2llSmFyREI6OnNl
YXJjaENvb2tpZXMoY29uc3QgU3RyaW5nJiByZXF1ZXN0VXJsLCBjb25zdCBzdGQ6Om9wdGlvbmFs
PGJvCiAgICAgfQogICAgIHBzdG10LT5maW5hbGl6ZSgpOwogCi0gICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIHJlc3VsdHM7CiB9CiAKIGJvb2wgQ29va2llSmFyREI6Omhhc0h0dHBPbmx5Q29v
a2llKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmlu
ZyYgcGF0aCkKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQqIHN0YXRlbWVudCA9IGdldFByZXBhcmVT
dGF0ZW1lbnQoQ0hFQ0tfRVhJU1RTX0hUVFBPTkxZX0NPT0tJRV9TUUwpOwotICAgIEFTU0VSVChz
dGF0ZW1lbnQpOworICAgIGF1dG8mIHN0YXRlbWVudCA9IHByZXBhcmVkU3RhdGVtZW50KENIRUNL
X0VYSVNUU19IVFRQT05MWV9DT09LSUVfU1FMKTsKIAotICAgIHN0YXRlbWVudC0+YmluZFRleHQo
MSwgbmFtZSk7Ci0gICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBkb21haW4pOwotICAgIHN0YXRl
bWVudC0+YmluZFRleHQoMywgcGF0aCk7CisgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG5hbWUp
OworICAgIHN0YXRlbWVudC5iaW5kVGV4dCgyLCBkb21haW4pOworICAgIHN0YXRlbWVudC5iaW5k
VGV4dCgzLCBwYXRoKTsKIAotICAgIHJldHVybiBzdGF0ZW1lbnQtPnN0ZXAoKSA9PSBTUUxJVEVf
Uk9XOworICAgIHJldHVybiBzdGF0ZW1lbnQuc3RlcCgpID09IFNRTElURV9ST1c7CiB9CiAKIAot
aW50IENvb2tpZUphckRCOjpzZXRDb29raWUoY29uc3QgQ29va2llJiBjb29raWUpCitib29sIENv
b2tpZUphckRCOjpzZXRDb29raWUoY29uc3QgQ29va2llJiBjb29raWUpCiB7Ci0gICAgaW50IHJl
dCA9IDA7CiAgICAgaWYgKCFjb29raWUuc2Vzc2lvbiAmJiBNb25vdG9uaWNUaW1lOjpmcm9tUmF3
U2Vjb25kcyhjb29raWUuZXhwaXJlcykgPD0gTW9ub3RvbmljVGltZTo6bm93KCkpCi0gICAgICAg
IHJldCA9IGRlbGV0ZUNvb2tpZUludGVybmFsKGNvb2tpZS5uYW1lLCBjb29raWUuZG9tYWluLCBj
b29raWUucGF0aCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFNRTGl0ZVN0YXRlbWVudCogc3RhdGVt
ZW50ID0gZ2V0UHJlcGFyZVN0YXRlbWVudChTRVRfQ09PS0lFX1NRTCk7Ci0gICAgICAgIEFTU0VS
VChzdGF0ZW1lbnQpOwotCi0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBzb21lIGV2
aWN0aW9uIHBvbGljeSB3aGVuIGEgZG9tYWluIGdvZXMgb3ZlciBNQVhfQ09PS0lFX1BFUl9ET01B
SU4KLQotICAgICAgICBzdGF0ZW1lbnQtPmJpbmRUZXh0KDEsIGNvb2tpZS5uYW1lKTsKLSAgICAg
ICAgc3RhdGVtZW50LT5iaW5kVGV4dCgyLCBjb29raWUudmFsdWUpOwotICAgICAgICBzdGF0ZW1l
bnQtPmJpbmRUZXh0KDMsIGNvb2tpZS5kb21haW4pOwotICAgICAgICBzdGF0ZW1lbnQtPmJpbmRU
ZXh0KDQsIGNvb2tpZS5wYXRoKTsKLSAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50NjQoNSwgY29v
a2llLnNlc3Npb24gPyAwIDogc3RhdGljX2Nhc3Q8aW50NjRfdD4oY29va2llLmV4cGlyZXMpKTsK
LSAgICAgICAgc3RhdGVtZW50LT5iaW5kSW50KDYsIGNvb2tpZS52YWx1ZS5sZW5ndGgoKSk7Ci0g
ICAgICAgIHN0YXRlbWVudC0+YmluZEludCg3LCBjb29raWUuc2Vzc2lvbiA/IDEgOiAwKTsKLSAg
ICAgICAgc3RhdGVtZW50LT5iaW5kSW50KDgsIGNvb2tpZS5odHRwT25seSA/IDEgOiAwKTsKLSAg
ICAgICAgc3RhdGVtZW50LT5iaW5kSW50KDksIGNvb2tpZS5zZWN1cmUgPyAxIDogMCk7Ci0KLSAg
ICAgICAgcmV0ID0gc3RhdGVtZW50LT5zdGVwKCk7Ci0gICAgfQotICAgIGNoZWNrU1FMaXRlUmV0
dXJuQ29kZShyZXQpOwotICAgIEFTU0VSVChyZXQgPT0gU1FMSVRFX0RPTkUpOwotCi0gICAgcmV0
dXJuIHJldDsKKyAgICAgICAgcmV0dXJuIGRlbGV0ZUNvb2tpZUludGVybmFsKGNvb2tpZS5uYW1l
LCBjb29raWUuZG9tYWluLCBjb29raWUucGF0aCk7CisKKyAgICBhdXRvJiBzdGF0ZW1lbnQgPSBw
cmVwYXJlZFN0YXRlbWVudChTRVRfQ09PS0lFX1NRTCk7CisKKyAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGhhdmUgc29tZSBldmljdGlvbiBwb2xpY3kgd2hlbiBhIGRvbWFpbiBnb2VzIG92ZXIgTUFY
X0NPT0tJRV9QRVJfRE9NQUlOCisgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIGNvb2tpZS5uYW1l
KTsKKyAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgY29va2llLnZhbHVlKTsKKyAgICBzdGF0ZW1l
bnQuYmluZFRleHQoMywgY29va2llLmRvbWFpbik7CisgICAgc3RhdGVtZW50LmJpbmRUZXh0KDQs
IGNvb2tpZS5wYXRoKTsKKyAgICBzdGF0ZW1lbnQuYmluZEludDY0KDUsIGNvb2tpZS5zZXNzaW9u
ID8gMCA6IHN0YXRpY19jYXN0PGludDY0X3Q+KGNvb2tpZS5leHBpcmVzKSk7CisgICAgc3RhdGVt
ZW50LmJpbmRJbnQoNiwgY29va2llLnZhbHVlLmxlbmd0aCgpKTsKKyAgICBzdGF0ZW1lbnQuYmlu
ZEludCg3LCBjb29raWUuc2Vzc2lvbiA/IDEgOiAwKTsKKyAgICBzdGF0ZW1lbnQuYmluZEludCg4
LCBjb29raWUuaHR0cE9ubHkgPyAxIDogMCk7CisgICAgc3RhdGVtZW50LmJpbmRJbnQoOSwgY29v
a2llLnNlY3VyZSA/IDEgOiAwKTsKKyAgICByZXR1cm4gY2hlY2tTUUxpdGVSZXR1cm5Db2RlKHN0
YXRlbWVudC5zdGVwKCkpOwogfQogCi1pbnQgQ29va2llSmFyREI6OnNldENvb2tpZShjb25zdCBT
dHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWUsIGJvb2wgZnJvbUphdmFTY3JpcHQpCiti
b29sIENvb2tpZUphckRCOjpzZXRDb29raWUoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgYm9keSwgQ29va2llSmFyREI6OlNvdXJjZSBzb3VyY2UpCiB7CiAgICAgaWYgKCFpc0VuYWJs
ZWQoKSB8fCAhbV9kYXRhYmFzZS5pc09wZW4oKSkKLSAgICAgICAgcmV0dXJuIC0xOworICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAodXJsLmlzRW1wdHkoKSB8fCBjb29raWUuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKHVybC5pc0VtcHR5KCkgfHwgYm9keS5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFVSTCB1cmxPYmooeyB9LCB1
cmwpOwogICAgIFN0cmluZyBob3N0KHVybE9iai5ob3N0KCkudG9TdHJpbmcoKSk7CiAgICAgU3Ry
aW5nIHBhdGgodXJsT2JqLnBhdGgoKSk7CiAKLSAgICBDb29raWUgY29va2llT2JqOwotICAgIGlm
ICghQ29va2llVXRpbDo6cGFyc2VDb29raWVIZWFkZXIoY29va2llLCBob3N0LCBjb29raWVPYmop
KQotICAgICAgICByZXR1cm4gLTE7CisgICAgYXV0byBjb29raWUgPSBDb29raWVVdGlsOjpwYXJz
ZUNvb2tpZUhlYWRlcihib2R5LCBob3N0KTsKKyAgICBpZiAoIWNvb2tpZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgaWYgKGNvb2tpZU9iai5kb21haW4uaXNFbXB0eSgpKQotICAgICAg
ICBjb29raWVPYmouZG9tYWluID0gU3RyaW5nKGhvc3QpOworICAgIGlmIChjb29raWUtPmRvbWFp
bi5pc0VtcHR5KCkpCisgICAgICAgIGNvb2tpZS0+ZG9tYWluID0gU3RyaW5nKGhvc3QpOwogCi0g
ICAgaWYgKGNvb2tpZU9iai5wYXRoLmlzRW1wdHkoKSkKLSAgICAgICAgY29va2llT2JqLnBhdGgg
PSBDb29raWVVdGlsOjpkZWZhdWx0UGF0aEZvclVSTCh1cmxPYmopOworICAgIGlmIChjb29raWUt
PnBhdGguaXNFbXB0eSgpKQorICAgICAgICBjb29raWUtPnBhdGggPSBDb29raWVVdGlsOjpkZWZh
dWx0UGF0aEZvclVSTCh1cmxPYmopOwogCiAjaWYgRU5BQkxFKFBVQkxJQ19TVUZGSVhfTElTVCkK
LSAgICBpZiAoaXNQdWJsaWNTdWZmaXgoY29va2llT2JqLmRvbWFpbikpCi0gICAgICAgIHJldHVy
biAtMTsKKyAgICBpZiAoaXNQdWJsaWNTdWZmaXgoY29va2llLT5kb21haW4pKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAjZW5kaWYKIAotICAgIGlmIChmcm9tSmF2YVNjcmlwdCAmJiBjb29raWVP
YmouaHR0cE9ubHkpCi0gICAgICAgIHJldHVybiAtMTsKKyAgICBib29sIGZyb21KYXZhU2NyaXB0
ID0gc291cmNlID09IENvb2tpZUphckRCOjpTb3VyY2U6OlNjcmlwdDsKKworICAgIGlmIChmcm9t
SmF2YVNjcmlwdCAmJiBjb29raWUtPmh0dHBPbmx5KQorICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBpZiAoZnJvbUphdmFTY3JpcHQgJiYgaGFzSHR0cE9ubHlDb29raWUoY29va2llT2JqLm5h
bWUsIGNvb2tpZU9iai5kb21haW4sIGNvb2tpZU9iai5wYXRoKSkKLSAgICAgICAgcmV0dXJuIC0x
OworICAgIGlmIChmcm9tSmF2YVNjcmlwdCAmJiBoYXNIdHRwT25seUNvb2tpZShjb29raWUtPm5h
bWUsIGNvb2tpZS0+ZG9tYWluLCBjb29raWUtPnBhdGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICByZXR1cm4gc2V0Q29va2llKGNvb2tpZU9iaik7CisgICAgcmV0dXJuIHNldENvb2tp
ZSgqY29va2llKTsKIH0KIAotaW50IENvb2tpZUphckRCOjpkZWxldGVDb29raWUoY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSkKK2Jvb2wgQ29va2llSmFyREI6OmRlbGV0ZUNv
b2tpZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewogICAgIGlmICgh
aXNFbmFibGVkKCkgfHwgIW1fZGF0YWJhc2UuaXNPcGVuKCkpCi0gICAgICAgIHJldHVybiAtMTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgU3RyaW5nIHVybENvcGllZCA9IFN0cmluZyh1
cmwpOwogICAgIGlmICh1cmxDb3BpZWQuc3RhcnRzV2l0aCgnLicpKQpAQCAtNTA2LDQ4ICs0OTYs
MzUgQEAgaW50IENvb2tpZUphckRCOjpkZWxldGVDb29raWUoY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IFN0cmluZyYgbmFtZSkKICAgICBpZiAodXJsT2JqLmlzVmFsaWQoKSkgewogICAgICAgICBT
dHJpbmcgaG9zdFN0cih1cmxPYmouaG9zdCgpLnRvU3RyaW5nKCkpOwogICAgICAgICBTdHJpbmcg
cGF0aFN0cih1cmxPYmoucGF0aCgpKTsKLSAgICAgICAgaW50IHJldCA9IGRlbGV0ZUNvb2tpZUlu
dGVybmFsKG5hbWUsIGhvc3RTdHIsIHBhdGhTdHIpOwotICAgICAgICBjaGVja1NRTGl0ZVJldHVy
bkNvZGUocmV0KTsKLSAgICAgICAgQVNTRVJUKHJldCA9PSBTUUxJVEVfRE9ORSk7Ci0KLSAgICAg
ICAgcmV0dXJuIHJldDsKKyAgICAgICAgcmV0dXJuIGRlbGV0ZUNvb2tpZUludGVybmFsKG5hbWUs
IGhvc3RTdHIsIHBhdGhTdHIpOwogICAgIH0KIAotICAgIHJldHVybiAtMTsKKyAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWludCBDb29raWVKYXJEQjo6ZGVsZXRlQ29va2llSW50ZXJuYWwoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBwYXRoKQor
Ym9vbCBDb29raWVKYXJEQjo6ZGVsZXRlQ29va2llSW50ZXJuYWwoY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBwYXRoKQogewotICAgIFNRTGl0
ZVN0YXRlbWVudCogc3RhdGVtZW50OwotICAgIGlmICghcGF0aC5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgc3RhdGVtZW50ID0gZ2V0UHJlcGFyZVN0YXRlbWVudChERUxFVEVfQ09PS0lFX0JZX05BTUVf
RE9NQUlOX1BBVEhfU1FMKTsKLSAgICAgICAgQVNTRVJUKHN0YXRlbWVudCk7Ci0gICAgICAgIHN0
YXRlbWVudC0+YmluZFRleHQoMSwgbmFtZSk7Ci0gICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQo
MiwgZG9tYWluKTsKLSAgICAgICAgc3RhdGVtZW50LT5iaW5kVGV4dCgzLCBwYXRoKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBzdGF0ZW1lbnQgPSBnZXRQcmVwYXJlU3RhdGVtZW50KERFTEVURV9D
T09LSUVfQllfTkFNRV9ET01BSU5fU1FMKTsKLSAgICAgICAgQVNTRVJUKHN0YXRlbWVudCk7Ci0g
ICAgICAgIHN0YXRlbWVudC0+YmluZFRleHQoMSwgbmFtZSk7Ci0gICAgICAgIHN0YXRlbWVudC0+
YmluZFRleHQoMiwgZG9tYWluKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RhdGVtZW50LT5zdGVw
KCk7CisgICAgYXV0byYgc3RhdGVtZW50ID0gcHJlcGFyZWRTdGF0ZW1lbnQocGF0aC5pc0VtcHR5
KCkgPyBERUxFVEVfQ09PS0lFX0JZX05BTUVfRE9NQUlOX1NRTCA6IERFTEVURV9DT09LSUVfQllf
TkFNRV9ET01BSU5fUEFUSF9TUUwpOworICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBuYW1lKTsK
KyAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgZG9tYWluKTsKKyAgICBpZiAoIXBhdGguaXNFbXB0
eSgpKQorICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMywgcGF0aCk7CisgICAgcmV0dXJuIGNo
ZWNrU1FMaXRlUmV0dXJuQ29kZShzdGF0ZW1lbnQuc3RlcCgpKTsKIH0KIAotaW50IENvb2tpZUph
ckRCOjpkZWxldGVDb29raWVzKGNvbnN0IFN0cmluZyYpCitib29sIENvb2tpZUphckRCOjpkZWxl
dGVDb29raWVzKGNvbnN0IFN0cmluZyYpCiB7CiAgICAgLy8gTk9UIElNUExFTUVOVEVECiAgICAg
Ly8gVE9ETzogdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBpZiBhcHBsaWNhdGlvbiBjYWxs
cyBXS0Nvb2tpZU1hbmFnZXJEZWxldGVDb29raWVzRm9ySG9zdG5hbWUoKSBpbiBXS0Nvb2tpZU1h
bmFnZXIuaC4KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWludCBDb29r
aWVKYXJEQjo6ZGVsZXRlQWxsQ29va2llcygpCitib29sIENvb2tpZUphckRCOjpkZWxldGVBbGxD
b29raWVzKCkKIHsKICAgICBpZiAoIWlzRW5hYmxlZCgpIHx8ICFtX2RhdGFiYXNlLmlzT3Blbigp
KQotICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVy
biBleGVjdXRlU2ltcGxlU3FsKERFTEVURV9BTExfQ09PS0lFX1NRTCk7CisgICAgcmV0dXJuIGV4
ZWN1dGVTcWwoREVMRVRFX0FMTF9DT09LSUVfU1FMKTsKIH0KIAogdm9pZCBDb29raWVKYXJEQjo6
Y3JlYXRlUHJlcGFyZVN0YXRlbWVudChjb25zdCBTdHJpbmcmIHNxbCkKQEAgLTU1OCwyNSArNTM1
LDI2IEBAIHZvaWQgQ29va2llSmFyREI6OmNyZWF0ZVByZXBhcmVTdGF0ZW1lbnQoY29uc3QgU3Ry
aW5nJiBzcWwpCiAgICAgbV9zdGF0ZW1lbnRzLmFkZChzcWwsIFdURk1vdmUoc3RhdGVtZW50KSk7
CiB9CiAKLVNRTGl0ZVN0YXRlbWVudCogQ29va2llSmFyREI6OmdldFByZXBhcmVTdGF0ZW1lbnQo
Y29uc3QgU3RyaW5nJiBzcWwpCitTUUxpdGVTdGF0ZW1lbnQmIENvb2tpZUphckRCOjpwcmVwYXJl
ZFN0YXRlbWVudChjb25zdCBTdHJpbmcmIHNxbCkKIHsKICAgICBjb25zdCBhdXRvJiBzdGF0ZW1l
bnQgPSBtX3N0YXRlbWVudHMuZ2V0KHNxbCk7CiAgICAgQVNTRVJUKHN0YXRlbWVudCk7CiAgICAg
c3RhdGVtZW50LT5yZXNldCgpOwotICAgIHJldHVybiBzdGF0ZW1lbnQ7CisgICAgcmV0dXJuICpz
dGF0ZW1lbnQ7CiB9CiAKLWludCBDb29raWVKYXJEQjo6ZXhlY3V0ZVNpbXBsZVNxbChjb25zdCBT
dHJpbmcmIHNxbCwgYm9vbCBpZ25vcmVFcnJvcikKK2Jvb2wgQ29va2llSmFyREI6OmV4ZWN1dGVT
cWwoY29uc3QgU3RyaW5nJiBzcWwpCiB7CiAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCht
X2RhdGFiYXNlLCBzcWwpOwogICAgIGludCByZXQgPSBzdGF0ZW1lbnQucHJlcGFyZUFuZFN0ZXAo
KTsKICAgICBzdGF0ZW1lbnQuZmluYWxpemUoKTsKIAotICAgIGNoZWNrU1FMaXRlUmV0dXJuQ29k
ZShyZXQpOwotICAgIGlmIChyZXQgIT0gU1FMSVRFX09LICYmIHJldCAhPSBTUUxJVEVfRE9ORSAm
JiByZXQgIT0gU1FMSVRFX1JPVyAmJiAhaWdub3JlRXJyb3IpCisgICAgaWYgKCFjaGVja1NRTGl0
ZVJldHVybkNvZGUocmV0KSkgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBleGVjdXRl
ICVzIGVycm9yOiAlcyIsIHNxbC5hc2NpaSgpLmRhdGEoKSwgbV9kYXRhYmFzZS5sYXN0RXJyb3JN
c2coKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICByZXR1cm4gcmV0Owor
ICAgIHJldHVybiB0cnVlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llSmFyREIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVKYXJEQi5oCmluZGV4IDY5
NWI5NjdhMTIyLi41OTg3YTZlM2I0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckRCLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL0Nvb2tpZUphckRCLmgKQEAgLTQwLDM0ICs0MCwzOCBAQCBjbGFzcyBD
b29raWVKYXJEQiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29va2llSmFyREIpOwogCiBw
dWJsaWM6CisgICAgZW51bSBjbGFzcyBTb3VyY2UgOiB1aW50OF90IHsKKyAgICAgICAgTmV0d29y
aywKKyAgICAgICAgU2NyaXB0CisgICAgfTsKICAgICB2b2lkIG9wZW4oKTsKLSAgICBib29sIGlz
RW5hYmxlZCgpOworICAgIGJvb2wgaXNFbmFibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRFbmFi
bGVkKGJvb2wpOwogCi0gICAgYm9vbCBzZWFyY2hDb29raWVzKGNvbnN0IFN0cmluZyYgcmVxdWVz
dFVybCwgY29uc3Qgc3RkOjpvcHRpb25hbDxib29sPiYgaHR0cE9ubHksIGNvbnN0IHN0ZDo6b3B0
aW9uYWw8Ym9vbD4mIHNlY3VyZSwgY29uc3Qgc3RkOjpvcHRpb25hbDxib29sPiYgc2Vzc2lvbiwg
VmVjdG9yPENvb2tpZT4mIHJlc3VsdHMpOwotICAgIGludCBzZXRDb29raWUoY29uc3QgU3RyaW5n
JiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llLCBib29sIGZyb21KYXZhU2NyaXB0KTsKLSAgICBp
bnQgc2V0Q29va2llKGNvbnN0IENvb2tpZSYpOworICAgIHN0ZDo6b3B0aW9uYWw8VmVjdG9yPENv
b2tpZT4+IHNlYXJjaENvb2tpZXMoY29uc3QgU3RyaW5nJiByZXF1ZXN0VXJsLCBjb25zdCBzdGQ6
Om9wdGlvbmFsPGJvb2w+JiBodHRwT25seSwgY29uc3Qgc3RkOjpvcHRpb25hbDxib29sPiYgc2Vj
dXJlLCBjb25zdCBzdGQ6Om9wdGlvbmFsPGJvb2w+JiBzZXNzaW9uKTsKKyAgICBib29sIHNldENv
b2tpZShjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWUsIFNvdXJjZSk7Cisg
ICAgYm9vbCBzZXRDb29raWUoY29uc3QgQ29va2llJik7CiAKLSAgICBpbnQgZGVsZXRlQ29va2ll
KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIGludCBkZWxldGVD
b29raWVzKGNvbnN0IFN0cmluZyYgdXJsKTsKLSAgICBpbnQgZGVsZXRlQWxsQ29va2llcygpOwor
ICAgIGJvb2wgZGVsZXRlQ29va2llKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIG5h
bWUpOworICAgIGJvb2wgZGVsZXRlQ29va2llcyhjb25zdCBTdHJpbmcmIHVybCk7CisgICAgYm9v
bCBkZWxldGVBbGxDb29raWVzKCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBDb29raWVKYXJEQihj
b25zdCBTdHJpbmcmIGRhdGFiYXNlUGF0aCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgfkNvb2tpZUph
ckRCKCk7CiAKIHByaXZhdGU6CiAKLSAgICBib29sIG1faXNFbmFibGVkIHt0cnVlfTsKKyAgICBi
b29sIG1faXNFbmFibGVkIHsgdHJ1ZSB9OwogICAgIFN0cmluZyBtX2RhdGFiYXNlUGF0aDsKIAot
ICAgIGJvb2wgbV9kZXRlY3RlZERhdGFiYXNlQ29ycnVwdGlvbiB7ZmFsc2V9OworICAgIGJvb2wg
bV9kZXRlY3RlZERhdGFiYXNlQ29ycnVwdGlvbiB7IGZhbHNlIH07CiAKICAgICBib29sIGlzT25N
ZW1vcnkoKSBjb25zdCB7IHJldHVybiAobV9kYXRhYmFzZVBhdGggPT0gIjptZW1vcnk6Iik7IH07
CiAKICAgICBib29sIG9wZW5EYXRhYmFzZSgpOwogICAgIHZvaWQgY2xvc2VEYXRhYmFzZSgpOwog
Ci0gICAgdm9pZCBjaGVja1NRTGl0ZVJldHVybkNvZGUoaW50IGFjdHVhbCk7CisgICAgYm9vbCBj
aGVja1NRTGl0ZVJldHVybkNvZGUoaW50KTsKICAgICB2b2lkIGZsYWdEYXRhYmFzZUNvcnJ1cHRp
b24oKTsKICAgICBib29sIGNoZWNrRGF0YWJhc2VDb3JydXB0aW9uQW5kUmVtb3ZlSWZOZWVkZWQo
KTsKICAgICBTdHJpbmcgZ2V0Q29ycnVwdGlvbk1hcmtlclBhdGgoKSBjb25zdDsKQEAgLTc4LDEx
ICs4MiwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgdmVyaWZ5U2NoZW1hVmVyc2lvbigpOwogICAg
IHZvaWQgZGVsZXRlQWxsVGFibGVzKCk7CiAKLSAgICB2b2lkIGNyZWF0ZVByZXBhcmVTdGF0ZW1l
bnQoY29uc3QgU3RyaW5nJiBzcWwpOwotICAgIFNRTGl0ZVN0YXRlbWVudCogZ2V0UHJlcGFyZVN0
YXRlbWVudChjb25zdCBTdHJpbmcmIHNxbCk7Ci0gICAgaW50IGV4ZWN1dGVTaW1wbGVTcWwoY29u
c3QgU3RyaW5nJiBzcWwsIGJvb2wgaWdub3JlRXJyb3IgPSBmYWxzZSk7CisgICAgdm9pZCBjcmVh
dGVQcmVwYXJlU3RhdGVtZW50KGNvbnN0IFN0cmluZyYpOworICAgIFNRTGl0ZVN0YXRlbWVudCYg
cHJlcGFyZWRTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJik7CisgICAgYm9vbCBleGVjdXRlU3FsKGNv
bnN0IFN0cmluZyYpOwogCi0gICAgaW50IGRlbGV0ZUNvb2tpZUludGVybmFsKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYgcGF0aCk7CisgICAg
Ym9vbCBkZWxldGVDb29raWVJbnRlcm5hbChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgZG9tYWluLCBjb25zdCBTdHJpbmcmIHBhdGgpOwogICAgIGJvb2wgaGFzSHR0cE9ubHlDb29r
aWUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5n
JiBwYXRoKTsKIAogICAgIFNRTGl0ZURhdGFiYXNlIG1fZGF0YWJhc2U7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llVXRpbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llVXRpbC5jcHAKaW5kZXggY2Y1
NTg4NDgyNmYuLjNhYTc3YTg5MmQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQ29va2llVXRpbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL0Nvb2tpZVV0aWwuY3BwCkBAIC0xNDEsMTAgKzE0MSwxMCBAQCBzdGF0
aWMgdm9pZCBwYXJzZUNvb2tpZUF0dHJpYnV0ZXMoY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGUsIGNv
bnN0IFN0cmluZyYgZG9tYWluLAogICAgIH0KIH0KIAotYm9vbCBwYXJzZUNvb2tpZUhlYWRlcihj
b25zdCBTdHJpbmcmIGNvb2tpZUxpbmUsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBDb29raWUmIHJl
c3VsdCkKK3N0ZDo6b3B0aW9uYWw8Q29va2llPiBwYXJzZUNvb2tpZUhlYWRlcihjb25zdCBTdHJp
bmcmIGNvb2tpZUxpbmUsIGNvbnN0IFN0cmluZyYgZG9tYWluKQogewogICAgIGlmIChjb29raWVM
aW5lLmxlbmd0aCgpID49IE1BWF9DT09LSUVfTElORSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCiAgICAgLy8gVGhpcyBBbGdvcml0aG0gaXMg
YmFzZWQgb24gdGhlIGFsZ29yaXRobSBkZWZpbmVkIGluIFJGQyA2MjY1IDUuMiBodHRwczovL3Rv
b2xzLmlldGYub3JnL2h0bWwvcmZjNjI2NSNzZWN0aW9uLTUuMi8KIApAQCAtMTY1LDE2ICsxNjUs
MTcgQEAgYm9vbCBwYXJzZUNvb2tpZUhlYWRlcihjb25zdCBTdHJpbmcmIGNvb2tpZUxpbmUsIGNv
bnN0IFN0cmluZyYgZG9tYWluLCBDb29raWUmIHIKICAgICAgICAgY29va2llVmFsdWUgPSBjb29r
aWVQYWlyLnN1YnN0cmluZyhhc3NpZ25tZW50UG9zaXRpb24gKyAxKTsKICAgICB9CiAKLSAgICBy
ZXN1bHQubmFtZSA9IGNvb2tpZU5hbWUuc3RyaXBXaGl0ZVNwYWNlKCk7Ci0gICAgcmVzdWx0LnZh
bHVlID0gY29va2llVmFsdWUuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgQ29va2llIGNvb2tpZTsK
KyAgICBjb29raWUubmFtZSA9IGNvb2tpZU5hbWUuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgY29v
a2llLnZhbHVlID0gY29va2llVmFsdWUuc3RyaXBXaGl0ZVNwYWNlKCk7CiAKICAgICBib29sIGhh
c01heEFnZSA9IGZhbHNlOwotICAgIHJlc3VsdC5zZXNzaW9uID0gdHJ1ZTsKKyAgICBjb29raWUu
c2Vzc2lvbiA9IHRydWU7CiAKICAgICBmb3IgKGF1dG8gYXR0cmlidXRlIDogY29va2llTGluZS5z
cGxpdEFsbG93aW5nRW1wdHlFbnRyaWVzKCc7JykpCi0gICAgICAgIHBhcnNlQ29va2llQXR0cmli
dXRlcyhhdHRyaWJ1dGUsIGRvbWFpbiwgaGFzTWF4QWdlLCByZXN1bHQpOworICAgICAgICBwYXJz
ZUNvb2tpZUF0dHJpYnV0ZXMoYXR0cmlidXRlLCBkb21haW4sIGhhc01heEFnZSwgY29va2llKTsK
IAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBjb29raWU7CiB9CiAKIFN0cmluZyBkZWZh
dWx0UGF0aEZvclVSTChjb25zdCBVUkwmIHVybCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9Db29raWVVdGlsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ29va2llVXRpbC5oCmluZGV4IGE4OWM5YWI3Yjk2Li40OTBkMzYy
YmJkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nv
b2tpZVV0aWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ29v
a2llVXRpbC5oCkBAIC0zNCw5ICszNCw5IEBAIHN0cnVjdCBDb29raWU7CiAKIG5hbWVzcGFjZSBD
b29raWVVdGlsIHsKIAotYm9vbCBwYXJzZUNvb2tpZUhlYWRlcihjb25zdCBTdHJpbmcmIGNvb2tp
ZUxpbmUsIGNvbnN0IFN0cmluZyYgZG9tYWluLCBDb29raWUmIHJlc3VsdCk7CitzdGQ6Om9wdGlv
bmFsPENvb2tpZT4gcGFyc2VDb29raWVIZWFkZXIoY29uc3QgU3RyaW5nJiBjb29raWVMaW5lLCBj
b25zdCBTdHJpbmcmIGRvbWFpbik7CiAKLWJvb2wgaXNJUEFkZHJlc3MoY29uc3QgU3RyaW5nJiBo
b3N0bmFtZSk7Citib29sIGlzSVBBZGRyZXNzKGNvbnN0IFN0cmluZyYpOwogCiBib29sIGRvbWFp
bk1hdGNoKGNvbnN0IFN0cmluZyYgY29va2llRG9tYWluLCBjb25zdCBTdHJpbmcmIGhvc3QpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKaW5kZXgg
NTQzNmEyNmFkNTEuLjc4ZDU2ZTc5NWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL0ZpbGVTeXN0ZW1XaW4uY3BwCkBAIC0zNzYsMTAgKzM3Niw4IEBAIHN0YXRpYyBTdHJpbmcg
Y2FjaGVkU3RvcmFnZURpcmVjdG9yeShEV09SRCBwYXRoSWRlbnRpZmllcikKICAgICByZXR1cm4g
ZGlyZWN0b3J5OwogfQogCi1TdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUoY29uc3QgU3RyaW5nJiwg
UGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCitzdGF0aWMgU3RyaW5nIGdlbmVyYXRlVGVtcG9y
YXJ5UGF0aChjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IFN0cmluZyYpPiYgYWN0aW9uKQogewot
ICAgIGhhbmRsZSA9IElOVkFMSURfSEFORExFX1ZBTFVFOwotCiAgICAgd2NoYXJfdCB0ZW1wUGF0
aFtNQVhfUEFUSF07CiAgICAgaW50IHRlbXBQYXRoTGVuZ3RoID0gOjpHZXRUZW1wUGF0aFcoV1RG
X0FSUkFZX0xFTkdUSCh0ZW1wUGF0aCksIHRlbXBQYXRoKTsKICAgICBpZiAodGVtcFBhdGhMZW5n
dGggPD0gMCB8fCB0ZW1wUGF0aExlbmd0aCA+IFdURl9BUlJBWV9MRU5HVEgodGVtcFBhdGgpKQpA
QCAtNDAyLDEwICs0MDAsMjEgQEAgU3RyaW5nIG9wZW5UZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmlu
ZyYsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQogICAgICAgICBwcm9wb3NlZFBhdGggPSBw
YXRoQnlBcHBlbmRpbmdDb21wb25lbnQobnVsbFRlcm1pbmF0ZWRXQ2hhclRvU3RyaW5nKHRlbXBQ
YXRoKSwgbnVsbFRlcm1pbmF0ZWRXQ2hhclRvU3RyaW5nKHRlbXBGaWxlKSk7CiAgICAgICAgIGlm
IChwcm9wb3NlZFBhdGguaXNFbXB0eSgpKQogICAgICAgICAgICAgYnJlYWs7CisgICAgfSB3aGls
ZSAoIWFjdGlvbihwcm9wb3NlZFBhdGgpKTsKKworICAgIHJldHVybiBwcm9wb3NlZFBhdGg7Cit9
CisKK1N0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmLCBQbGF0Zm9ybUZpbGVI
YW5kbGUmIGhhbmRsZSkKK3sKKyAgICBoYW5kbGUgPSBJTlZBTElEX0hBTkRMRV9WQUxVRTsKIAor
ICAgIFN0cmluZyBwcm9wb3NlZFBhdGggPSBnZW5lcmF0ZVRlbXBvcmFyeVBhdGgoWyZoYW5kbGVd
KGNvbnN0IFN0cmluZyYgcHJvcG9zZWRQYXRoKSB7CiAgICAgICAgIC8vIHVzZSBDUkVBVEVfTkVX
IHRvIGF2b2lkIG92ZXJ3cml0aW5nIGFuIGV4aXN0aW5nIGZpbGUgd2l0aCB0aGUgc2FtZSBuYW1l
CiAgICAgICAgIGhhbmRsZSA9IDo6Q3JlYXRlRmlsZVcoc3RyaW5nVG9OdWxsVGVybWluYXRlZFdD
aGFyKHByb3Bvc2VkUGF0aCkuZGF0YSgpLCBHRU5FUklDX1JFQUQgfCBHRU5FUklDX1dSSVRFLCAw
LCAwLCBDUkVBVEVfTkVXLCBGSUxFX0FUVFJJQlVURV9OT1JNQUwsIDApOwotICAgIH0gd2hpbGUg
KCFpc0hhbmRsZVZhbGlkKGhhbmRsZSkgJiYgR2V0TGFzdEVycm9yKCkgPT0gRVJST1JfQUxSRUFE
WV9FWElTVFMpOworCisgICAgICAgIHJldHVybiBpc0hhbmRsZVZhbGlkKGhhbmRsZSkgfHwgR2V0
TGFzdEVycm9yKCkgPT0gRVJST1JfQUxSRUFEWV9FWElTVFM7CisgICAgfSk7CiAKICAgICBpZiAo
IWlzSGFuZGxlVmFsaWQoaGFuZGxlKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwpAQCAtNTUx
LDUgKzU2MCwyNyBAQCBTdHJpbmcgcmVhbFBhdGgoY29uc3QgU3RyaW5nJiBmaWxlUGF0aCkKICAg
ICByZXR1cm4gZ2V0RmluYWxQYXRoTmFtZShmaWxlUGF0aCk7CiB9CiAKK1N0cmluZyBjcmVhdGVU
ZW1wb3JhcnlEaXJlY3RvcnkoKQoreworICAgIHJldHVybiBnZW5lcmF0ZVRlbXBvcmFyeVBhdGgo
W10oY29uc3QgU3RyaW5nJiBwcm9wb3NlZFBhdGgpIHsKKyAgICAgICAgcmV0dXJuIG1ha2VBbGxE
aXJlY3Rvcmllcyhwcm9wb3NlZFBhdGgpOworICAgIH0pOworfQorCitib29sIGRlbGV0ZU5vbkVt
cHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgZGlyZWN0b3J5UGF0aCkKK3sKKyAgICBTSEZJTEVP
UFNUUlVDVCBkZWxldGVPcGVyYXRpb24gPSB7CisgICAgICAgIG51bGxwdHIsCisgICAgICAgIEZP
X0RFTEVURSwKKyAgICAgICAgc3RyaW5nVG9OdWxsVGVybWluYXRlZFdDaGFyKGRpcmVjdG9yeVBh
dGgpLmRhdGEoKSwKKyAgICAgICAgTCIiLAorICAgICAgICBGT0ZfTk9DT05GSVJNQVRJT04gfCBG
T0ZfTk9FUlJPUlVJIHwgRk9GX1NJTEVOVCwKKyAgICAgICAgZmFsc2UsCisgICAgICAgIDAsCisg
ICAgICAgIEwiIgorICAgIH07CisgICAgcmV0dXJuICFTSEZpbGVPcGVyYXRpb24oJmRlbGV0ZU9w
ZXJhdGlvbik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEZpbGVTeXN0ZW0KIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCAyYjZjNzc1MzQwNC4uMDBkYzVlM2Y1MGQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxv
ZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxOC0xMS0wOSAgQmFz
dWtlIFN1enVraSAgPGJhc3VrZS5zdXp1a2lAc29ueS5jb20+CisKKyAgICAgICAgW0N1cmxdIEFk
ZCBBUEkgVGVzdCBmb3IgQ3VybCBjb29raWUgYmFja2VuZC4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTQ5MworCisgICAgICAgIFJldmlld2VkIGJ5
IFlvdWVubiBGYWJsZXQuCisKKyAgICAgICAgQWRkIHVuaXQgdGVzdCB0byBUZXN0V2ViQ29yZS4K
KworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvUGxhdGZvcm1XaW4uY21ha2U6CisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2N1cmwvQ29va2llcy5jcHA6IEFkZGVkLgorCiAy
MDE4LTExLTA3ICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBP
dmVycmlkZSArW1VJS2V5Ym9hcmQgaXNJbkhhcmR3YXJlS2V5Ym9hcmRNb2RlXSBpbiBXZWJLaXRU
ZXN0UnVubmVyIGFuZCBEdW1wUmVuZGVyVHJlZQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9QbGF0Zm9ybVdpbi5jbWFrZSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvUGxhdGZvcm1XaW4u
Y21ha2UKaW5kZXggZjEzYjgyZWFlNzUuLjM2NTBlNDA2NDVhIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1BsYXRmb3JtV2luLmNtYWtlCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
UGxhdGZvcm1XaW4uY21ha2UKQEAgLTc0LDYgKzc0LDcgQEAgaWYgKCR7V1RGX1BMQVRGT1JNX1dJ
Tl9DQUlST30pCiAgICAgICAgIHZjcnVudGltZQogICAgICkKICAgICBsaXN0KEFQUEVORCBUZXN0
V2ViQ29yZUxpYl9TT1VSQ0VTCisgICAgICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dl
YkNvcmUvY3VybC9Db29raWVzLmNwcAogICAgICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0
cy9XZWJDb3JlL3dpbi9CaXRtYXBJbWFnZS5jcHAKICAgICAgICAgJHtURVNUV0VCS0lUQVBJX0RJ
Un0vVGVzdHMvV2ViQ29yZS9DcnlwdG9EaWdlc3QuY3BwCiAgICAgICAgICR7VEVTVFdFQktJVEFQ
SV9ESVJ9L1Rlc3RzL1dlYkNvcmUvUHVibGljU3VmZml4LmNwcApkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL2N1cmwvQ29va2llcy5jcHAgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY3VybC9Db29raWVzLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2EwOTlhNWM3YTcKLS0tIC9kZXYvbnVsbAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvY3VybC9Db29raWVzLmNwcApAQCAtMCww
ICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFNvbnkgSW50ZXJhY3RpdmUgRW50
ZXJ0YWlubWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVT
RShDVVJMKQorCisjaW5jbHVkZSA8V2ViQ29yZS9Db29raWVKYXJEQi5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvQ29va2llVXRpbC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZVN5c3RlbS5oPgorI2lu
Y2x1ZGUgPG1lbW9yeT4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJIHsKKworbmFtZXNwYWNlIEN1cmwgeworCitjbGFzcyBDdXJsQ29va2llczog
cHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIHZvaWQgU2V0VXAoKSBmaW5hbAor
ICAgIHsKKyAgICAgICAgbV9jb29raWVEaXJlY3RvcnkgPSBGaWxlU3lzdGVtOjpjcmVhdGVUZW1w
b3JhcnlEaXJlY3RvcnkoKTsKKworICAgICAgICBtX2Nvb2tpZUphciA9IHN0ZDo6bWFrZV91bmlx
dWU8V2ViQ29yZTo6Q29va2llSmFyREI+KEZpbGVTeXN0ZW06OnBhdGhCeUFwcGVuZGluZ0NvbXBv
bmVudChtX2Nvb2tpZURpcmVjdG9yeSwgImNvb2tpZWRiLnNxbCIpKTsKKyAgICAgICAgbV9jb29r
aWVKYXItPm9wZW4oKTsKKyAgICAgICAgbV9jb29raWVKYXItPnNldEVuYWJsZWQodHJ1ZSk7Cisg
ICAgfQorCisgICAgdm9pZCBUZWFyRG93bigpIGZpbmFsCisgICAgeworICAgICAgICBtX2Nvb2tp
ZUphciA9IG51bGxwdHI7CisKKyAgICAgICAgRmlsZVN5c3RlbTo6ZGVsZXRlTm9uRW1wdHlEaXJl
Y3RvcnkobV9jb29raWVEaXJlY3RvcnkpOworICAgICAgICBtX2Nvb2tpZURpcmVjdG9yeSA9IFN0
cmluZygpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHN0ZDo6dW5pcXVlX3B0cjxDb29raWVK
YXJEQj4gbV9jb29raWVKYXI7CisgICAgU3RyaW5nIG1fY29va2llRGlyZWN0b3J5OworfTsKKwor
VEVTVF9GKEN1cmxDb29raWVzLCBUZXN0SHR0cE9ubHlDYXNlKQoreworICAgIC8vIHN1Y2Nlc3M6
IGZyb20gbmV0d29yaworICAgIEVYUEVDVF9UUlVFKG1fY29va2llSmFyLT5zZXRDb29raWUoImh0
dHA6Ly9leGFtcGxlLmNvbSIsICJmb289YmFyOyBIdHRwT25seSIsIENvb2tpZUphckRCOjpTb3Vy
Y2U6Ok5ldHdvcmspKTsKKyAgICAvLyBzdWNjZXNzOiB3aWxkY2FyZCBvZiBkb21haW5zCisgICAg
RVhQRUNUX1RSVUUobV9jb29raWVKYXItPnNldENvb2tpZSgiaHR0cDovL2V4YW1wbGUuY29tIiwg
ImJpbmdvPWJvbmdvOyIsIENvb2tpZUphckRCOjpTb3VyY2U6OlNjcmlwdCkpOworICAgIC8vIGZh
aWx1cmU6IGZvbyBpcyBhbHJlYWR5IHN0b3JlZCBhcyBIdHRwT25seQorICAgIEVYUEVDVF9GQUxT
RShtX2Nvb2tpZUphci0+c2V0Q29va2llKCJodHRwOi8vZXhhbXBsZS5jb20iLCAiZm9vPWJhcjsi
LCBDb29raWVKYXJEQjo6U291cmNlOjpTY3JpcHQpKTsKKyAgICAvLyBmYWlsdXJlOiBpbmNvbnNp
c3RlbnQuIFNvdXJjZSBpcyBTY3JpcHQsIGJ1dCBhdHRyaWJ1dGUgc2F5cyBIdHRwT25seQorICAg
IEVYUEVDVF9GQUxTRShtX2Nvb2tpZUphci0+c2V0Q29va2llKCJodHRwOi8vZXhhbXBsZS5jb20i
LCAiZm9vPWJhcjsgSHR0cE9ubHkiLCBDb29raWVKYXJEQjo6U291cmNlOjpTY3JpcHQpKTsKK30K
KworfQorCit9CisKKyNlbmRpZiAvLyBVU0UoQ1VSTCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>