<?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>118155</bug_id>
          
          <creation_ts>2013-06-27 16:36:21 -0700</creation_ts>
          <short_desc>Add a new String::charactersWithNullTermination() function that returns a vector</short_desc>
          <delta_ts>2013-07-19 11:54:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Anders Carlsson">andersca</reporter>
          <assigned_to name="Anders Carlsson">andersca</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>galpeter</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>904381</commentid>
    <comment_count>0</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-06-27 16:36:21 -0700</bug_when>
    <thetext>Add a new String::charactersWithNullTermination() function that returns a vector</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>904382</commentid>
    <comment_count>1</comment_count>
      <attachid>205646</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-06-27 16:38:59 -0700</bug_when>
    <thetext>Created attachment 205646
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>904383</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-06-27 16:41:12 -0700</bug_when>
    <thetext>Attachment 205646 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WTF/ChangeLog&apos;, u&apos;Source/WTF/wtf/text/WTFString.cpp&apos;, u&apos;Source/WTF/wtf/text/WTFString.h&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/platform/graphics/win/FontCacheWin.cpp&apos;, u&apos;Source/WebCore/platform/graphics/win/FontCustomPlatformData.cpp&apos;, u&apos;Source/WebCore/platform/graphics/win/FontCustomPlatformDataCairo.cpp&apos;, u&apos;Source/WebCore/platform/graphics/win/IconWin.cpp&apos;, u&apos;Source/WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp&apos;, u&apos;Source/WebCore/platform/graphics/wince/FontPlatformData.cpp&apos;, u&apos;Source/WebCore/platform/network/curl/CurlDownload.cpp&apos;, u&apos;Source/WebCore/platform/network/win/CookieJarWin.cpp&apos;, u&apos;Source/WebCore/platform/network/win/DownloadBundleWin.cpp&apos;, u&apos;Source/WebCore/platform/network/win/ResourceHandleWin.cpp&apos;, u&apos;Source/WebCore/platform/text/win/LocaleWin.cpp&apos;, u&apos;Source/WebCore/platform/text/win/TextCodecWin.cpp&apos;, u&apos;Source/WebCore/platform/win/ClipboardUtilitiesWin.cpp&apos;, u&apos;Source/WebCore/platform/win/ContextMenuWin.cpp&apos;, u&apos;Source/WebCore/platform/win/DragImageWin.cpp&apos;, u&apos;Source/WebCore/platform/win/FileSystemWin.cpp&apos;, u&apos;Source/WebCore/platform/win/MIMETypeRegistryWin.cpp&apos;, u&apos;Source/WebCore/platform/win/PasteboardWin.cpp&apos;, u&apos;Source/WebCore/platform/win/PathWalker.cpp&apos;, u&apos;Source/WebCore/platform/win/SSLKeyGeneratorWin.cpp&apos;, u&apos;Source/WebCore/platform/win/SharedBufferWin.cpp&apos;, u&apos;Source/WebCore/platform/wince/FileSystemWinCE.cpp&apos;, u&apos;Source/WebCore/plugins/win/PluginDatabaseWin.cpp&apos;, u&apos;Source/WebCore/plugins/win/PluginPackageWin.cpp&apos;, u&apos;Source/WebCore/plugins/win/PluginViewWin.cpp&apos;]&quot; exit_code: 1
Source/WebCore/platform/network/win/ResourceHandleWin.cpp:310:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/plugins/win/PluginViewWin.cpp:900:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/graphics/win/FontCacheWin.cpp:103:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/graphics/win/FontCacheWin.cpp:105:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 4 in 29 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>904393</commentid>
    <comment_count>3</comment_count>
      <attachid>205646</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-06-27 17:14:27 -0700</bug_when>
    <thetext>Comment on attachment 205646
Patch

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

&gt; Source/WTF/wtf/text/WTFString.cpp:401
&gt; +    if (m_impl) {

No early return?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>904399</commentid>
    <comment_count>4</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-06-27 17:20:20 -0700</bug_when>
    <thetext>Committed r152142: &lt;http://trac.webkit.org/changeset/152142&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910272</commentid>
    <comment_count>5</comment_count>
      <attachid>205646</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-07-19 11:54:54 -0700</bug_when>
    <thetext>Comment on attachment 205646
Patch

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

These changes broke a few things on Windows.  I&apos;ll correct under a separate bug.

&gt; Source/WebCore/platform/win/ContextMenuWin.cpp:126
&gt; +            menuItem.dwTypeData = const_cast&lt;LPWSTR&gt;(itemTitle.charactersWithNullTermination().data());

This definitely breaks things due to asking the menuItem to display a (possibly re-used) temporary memory address.

&gt; Source/WebCore/platform/win/PasteboardWin.cpp:966
&gt; +        LPCWSTR localPathStr = localPath.charactersWithNullTermination().data();

I think this might break things, because we are using the address of a temporary.

&gt; Source/WebCore/platform/win/SSLKeyGeneratorWin.cpp:71
&gt; +        requestInfo.pwszChallengeString = const_cast&lt;wchar_t*&gt;(localChallenge.charactersWithNullTermination().data());

Holding onto the address of a temporary!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>205646</attachid>
            <date>2013-06-27 16:38:59 -0700</date>
            <delta_ts>2013-07-19 11:54:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-118155-20130627163700.patch</filename>
            <type>text/plain</type>
            <size>47493</size>
            <attacher name="Anders Carlsson">andersca</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUyMTM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDQxMjkyMWE0ZDZjY2VhMWFjNjA4ZDEy
YjNhNTIyMDkwOWQ2YmFmZGUuLmEwOGJjODIxYTE1OTY0YTZhMGYxN2FhYTc4YWIyYmM5YzFiNDVl
OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTMtMDYtMjcgIEFuZGVycyBDYXJsc3NvbiAgPGFu
ZGVyc2NhQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBuZXcgU3RyaW5nOjpjaGFyYWN0ZXJz
V2l0aE51bGxUZXJtaW5hdGlvbigpIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHZlY3RvcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE4MTU1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBuZXcgU3Ry
aW5nOjpjaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpIGZ1bmN0aW9uIHJldHVybnMgYSBu
ZXcgVmVjdG9yPFVDaGFyPgorICAgICAgICBhbmQgZG9lcyBub3QgbW9kaWZ5IHRoZSB1bmRlcmx5
aW5nIHN0cmluZyBkYXRhLgorCisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmNwcDoKKyAg
ICAgICAgKFdURjo6U3RyaW5nOjpjaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbik6CisgICAg
ICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmg6CisKIDIwMTMtMDYtMjYgIEFuZGVycyBDYXJsc3Nv
biAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBEZXByZWNhdGUgU3RyaW5nSW1wbDo6
Y2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkNDEwMTFjYTRkMTMz
ZTg3Y2U2N2FjMmJhZTY1ZTFiYzE2NTNjZjkwLi4zMjA0MTliZjNjYWIyZGFmYTBiMWI2ZTU3YjMw
OGI4OGJlYmU5MmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsOTMgQEAKIDIwMTMtMDYtMjcgIEFu
ZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KIAorICAgICAgICBBZGQgYSBuZXcg
U3RyaW5nOjpjaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpIGZ1bmN0aW9uIHRoYXQgcmV0
dXJucyBhIHZlY3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTE4MTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQ2hhbmdlIGNhbGxzIHRvIGRlcHJlY2F0ZWRDaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5h
dGlvbigpIHRvIGNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmdldExpbmtlZEZvbnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q3VzdG9t
UGxhdGZvcm1EYXRhOjpmb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JY29uV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklj
b246OmNyZWF0ZUljb25Gb3JGaWxlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6c2V0VXBD
b29raWVzRm9yUXVpY2tUaW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9G
b250UGxhdGZvcm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6
OkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJs
RG93bmxvYWQuY3BwOgorICAgICAgICAoQ3VybERvd25sb2FkOjptb3ZlRmlsZVRvRGVzdGluYXRp
b24pOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvd2luL0Nvb2tpZUphcldpbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRDb29raWVzRnJvbURPTSk6CisgICAgICAgIChXZWJDb3JlOjpj
b29raWVzRm9yRE9NKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL3dpbi9Eb3dubG9hZEJ1
bmRsZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb3dubG9hZEJ1bmRsZTo6YXBwZW5kUmVz
dW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEb3dubG9hZEJ1bmRsZTo6ZXh0cmFjdFJlc3Vt
ZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvd2luL1Jlc291cmNlSGFuZGxlV2lu
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUludGVybmV0SGFuZGxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpSZXNv
dXJjZUhhbmRsZTo6ZmlsZUxvYWRUaW1lcik6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC93aW4v
TG9jYWxlV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxDSURGcm9tTG9jYWxlSW50ZXJuYWwp
OgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvd2luL1RleHRDb2RlY1dpbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0Q29kZWNXaW46OmVudW1lcmF0ZVN1cHBvcnRlZEVuY29kaW5ncyk6Cisg
ICAgICAgICogcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxpdGllc1dpbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpnZXRXZWJMb2NEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdsb2Jh
bERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6c2V0RmlsZURlc2NyaXB0b3JEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OmdldFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpzZXRDRkRhdGEpOgorICAg
ICAgICAqIHBsYXRmb3JtL3dpbi9Db250ZXh0TWVudVdpbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZXh0TWVudTo6Y3JlYXRlUGxhdGZvcm1Db250ZXh0TWVudUZyb21JdGVtcyk6CisgICAg
ICAgICogcGxhdGZvcm0vd2luL0RyYWdJbWFnZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpj
cmVhdGVEcmFnSW1hZ2VJY29uRm9yQ2FjaGVkSW1hZ2VGaWxlbmFtZSk6CisgICAgICAgICogcGxh
dGZvcm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RmluZERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpk
ZWxldGVFbXB0eURpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUFsbERpcmVjdG9yaWVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OnBhdGhHZXRGaWxlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVuVGVt
cG9yYXJ5RmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVuRmlsZSk6CisgICAgICAgICogcGxh
dGZvcm0vd2luL01JTUVUeXBlUmVnaXN0cnlXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWlt
ZVR5cGVGb3JFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6
Z2V0UHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL3dp
bi9QYXN0ZWJvYXJkV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdsb2JhbEltYWdl
RmlsZURlc2NyaXB0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR2xvYmFsSERyb3BDb250
ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUGF0aFdhbGtlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQYXRoV2Fsa2VyOjpQYXRoV2Fsa2VyKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4v
U1NMS2V5R2VuZXJhdG9yV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkNvcmU6OnNpZ25l
ZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyk6CisgICAgICAgICogcGxhdGZvcm0vd2luL1No
YXJlZEJ1ZmZlcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmNyZWF0
ZVdpdGhDb250ZW50c09mRmlsZSk6CisgICAgICAgICogcGxhdGZvcm0vd2luY2UvRmlsZVN5c3Rl
bVdpbkNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldEZpbGVJbmZvKToKKyAgICAgICAgKFdl
YkNvcmU6OmZpbGVFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlRmlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpkZWxldGVFbXB0eURpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpt
YWtlQWxsRGlyZWN0b3JpZXMpOgorICAgICAgICAoV2ViQ29yZTo6b3BlblRlbXBvcmFyeUZpbGUp
OgorICAgICAgICAoV2ViQ29yZTo6b3BlbkZpbGUpOgorICAgICAgICAqIHBsdWdpbnMvd2luL1Bs
dWdpbkRhdGFiYXNlV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRhdGFiYXNlOjpn
ZXRQbHVnaW5QYXRoc0luRGlyZWN0b3JpZXMpOgorICAgICAgICAoV2ViQ29yZTo6YWRkTW96aWxs
YVBsdWdpbkRpcmVjdG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmFkZEFkb2JlQWNyb2JhdFBs
dWdpbkRpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjphZGRKYXZhUGx1Z2luRGlyZWN0b3J5
KToKKyAgICAgICAgKiBwbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmdldFZlcnNpb25JbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpblBhY2th
Z2U6OmZldGNoSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5QYWNrYWdlOjpsb2FkKToK
KyAgICAgICAgKiBwbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpblZpZXc6OmhhbmRsZVBvc3RSZWFkRmlsZSk6CisKKzIwMTMtMDYtMjcgIEFuZGVy
cyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFwcGxlLmNvbT4KKwogICAgICAgICBSZW1vdmUgY2FsbCB0
byBkZXByZWNhdGVkQ2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSBpbiBXZWJHTCBjb2Rl
CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTgxNTQK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwIGIvU291cmNl
L1dURi93dGYvdGV4dC9XVEZTdHJpbmcuY3BwCmluZGV4IDFhMGU0YTIxMzNiMjQwM2M3ZTVjNzA0
M2I1OGFmMWUwNjFiOWI3YTUuLmIxZWQ5MzQ3OTc2OTMyMzdiZDRiMDRlYjM0ODQ0OTgyODk2OTJk
MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RGU3RyaW5nLmNwcAorKysgYi9T
b3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5jcHAKQEAgLTM5NCw2ICszOTQsMjggQEAgYm9v
bCBTdHJpbmc6OnBlcmNlbnRhZ2UoaW50JiByZXN1bHQpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKK1ZlY3RvcjxVQ2hhcj4gU3RyaW5nOjpjaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlv
bigpIGNvbnN0Cit7CisgICAgVmVjdG9yPFVDaGFyPiByZXN1bHQ7CisKKyAgICBpZiAobV9pbXBs
KSB7CisgICAgICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0aCgpICsgMSk7
CisKKyAgICAgICAgaWYgKGlzOEJpdCgpKSB7CisgICAgICAgICAgICBjb25zdCBMQ2hhciogY2hh
cmFjdGVyczggPSBtX2ltcGwtPmNoYXJhY3RlcnM4KCk7CisgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxlbmd0aCgpOyArK2kpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChjaGFyYWN0ZXJzOFtpXSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb25zdCBV
Q2hhciogY2hhcmFjdGVyczE2ID0gbV9pbXBsLT5jaGFyYWN0ZXJzMTYoKTsKKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoY2hhcmFjdGVyczE2LCBtX2ltcGwtPmxlbmd0aCgpKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJlc3VsdC5hcHBlbmQoMCk7CisgICAgfQorCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwogY29uc3QgVUNoYXIqIFN0cmluZzo6ZGVwcmVjYXRlZENoYXJhY3RlcnNXaXRoTnVs
bFRlcm1pbmF0aW9uKCkKIHsKICAgICBpZiAoIW1faW1wbCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL3RleHQvV1RGU3RyaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5o
CmluZGV4IGQwMWNkMTI2YzQ2ZDNkMTE3NTI3ZDJlY2Q2YmE1ZWVlNzA1ZGVjNGIuLjExZjI5ZDY4
ZWFjMjAwODk3MTc4ODcyYTcxMWQyZGM4YmY5ZGY4MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL3RleHQvV1RGU3RyaW5nLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcu
aApAQCAtMjgxLDYgKzI4MSw3IEBAIHB1YmxpYzoKICAgICBzaXplX3QgcmV2ZXJzZUZpbmQoY29u
c3QgU3RyaW5nJiBzdHIsIHVuc2lnbmVkIHN0YXJ0LCBib29sIGNhc2VTZW5zaXRpdmUpIGNvbnN0
CiAgICAgICAgIHsgcmV0dXJuIGNhc2VTZW5zaXRpdmUgPyByZXZlcnNlRmluZChzdHIsIHN0YXJ0
KSA6IHJldmVyc2VGaW5kSWdub3JpbmdDYXNlKHN0ciwgc3RhcnQpOyB9CiAKKyAgICBXVEZfRVhQ
T1JUX1NUUklOR19BUEkgVmVjdG9yPFVDaGFyPiBjaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlv
bigpIGNvbnN0OwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBjb25zdCBVQ2hhciogZGVwcmVj
YXRlZENoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCk7CiAgICAgCiAgICAgV1RGX0VYUE9S
VF9TVFJJTkdfQVBJIFVDaGFyMzIgY2hhcmFjdGVyU3RhcnRpbmdBdCh1bnNpZ25lZCkgY29uc3Q7
IC8vIERpdHRvLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ZvbnRDYWNoZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRm9udENhY2hlV2luLmNwcAppbmRleCAzNmU0YmIyM2Q1NWZiMTdkYjhjYjRiYzg4MzlhYzc1
MGM5M2M4OThjLi44ZjkzMDZkYzRmY2ZmODM1ZmVmMWQxNzQ1MTEzYWExMjhhNDVhZDRmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hlV2lu
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENhY2hl
V2luLmNwcApAQCAtMTAwLDkgKzEwMCw5IEBAIHN0YXRpYyBjb25zdCBWZWN0b3I8U3RyaW5nPiog
Z2V0TGlua2VkRm9udHMoU3RyaW5nJiBmYW1pbHkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAK
ICAgICBEV09SRCBsaW5rZWRGb250c0J1ZmZlclNpemUgPSAwOwotICAgIFJlZ1F1ZXJ5VmFsdWVF
eChmb250TGlua0tleSwgZmFtaWx5LmRlcHJlY2F0ZWRDaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5h
dGlvbigpLCAwLCBOVUxMLCBOVUxMLCAmbGlua2VkRm9udHNCdWZmZXJTaXplKTsKKyAgICBSZWdR
dWVyeVZhbHVlRXgoZm9udExpbmtLZXksIGZhbWlseS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5h
dGlvbigpLmRhdGEoKSwgMCwgTlVMTCwgTlVMTCwgJmxpbmtlZEZvbnRzQnVmZmVyU2l6ZSk7CiAg
ICAgV0NIQVIqIGxpbmtlZEZvbnRzID0gcmVpbnRlcnByZXRfY2FzdDxXQ0hBUio+KG1hbGxvYyhs
aW5rZWRGb250c0J1ZmZlclNpemUpKTsKLSAgICBpZiAoU1VDQ0VFREVEKFJlZ1F1ZXJ5VmFsdWVF
eChmb250TGlua0tleSwgZmFtaWx5LmRlcHJlY2F0ZWRDaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5h
dGlvbigpLCAwLCBOVUxMLCByZWludGVycHJldF9jYXN0PEJZVEUqPihsaW5rZWRGb250cyksICZs
aW5rZWRGb250c0J1ZmZlclNpemUpKSkgeworICAgIGlmIChTVUNDRUVERUQoUmVnUXVlcnlWYWx1
ZUV4KGZvbnRMaW5rS2V5LCBmYW1pbHkuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5k
YXRhKCksIDAsIE5VTEwsIHJlaW50ZXJwcmV0X2Nhc3Q8QllURSo+KGxpbmtlZEZvbnRzKSwgJmxp
bmtlZEZvbnRzQnVmZmVyU2l6ZSkpKSB7CiAgICAgICAgIHVuc2lnbmVkIGkgPSAwOwogICAgICAg
ICB1bnNpZ25lZCBsZW5ndGggPSBsaW5rZWRGb250c0J1ZmZlclNpemUgLyBzaXplb2YoKmxpbmtl
ZEZvbnRzKTsKICAgICAgICAgd2hpbGUgKGkgPCBsZW5ndGgpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q3VzdG9tUGxhdGZv
cm1EYXRhLmNwcAppbmRleCBjY2ViZDA3NGM4OTlkM2ZhNzJlMzQxZDdlNTU0MmVlYmNiNThmZjQ4
Li43ODMwOWJjYWFkOWVhNDZhMTY5ZWM1NDIyMjllOWY3YzMzZjJkZjMyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0
YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0
b21QbGF0Zm9ybURhdGEuY3BwCkBAIC00NSw3ICs0NSw3IEBAIEZvbnRQbGF0Zm9ybURhdGEgRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YShpbnQgc2l6ZSwgYm9vbCBib2xk
LCBiCiAgICAgQVNTRVJUKG1fZm9udFJlZmVyZW5jZSk7CiAKICAgICBMT0dGT05UJiBsb2dGb250
ID0gKnN0YXRpY19jYXN0PExPR0ZPTlQqPihtYWxsb2Moc2l6ZW9mKExPR0ZPTlQpKSk7Ci0gICAg
bWVtY3B5KGxvZ0ZvbnQubGZGYWNlTmFtZSwgbV9uYW1lLmRlcHJlY2F0ZWRDaGFyYWN0ZXJzV2l0
aE51bGxUZXJtaW5hdGlvbigpLCBzaXplb2YobG9nRm9udC5sZkZhY2VOYW1lWzBdKSAqIG1pbihz
dGF0aWNfY2FzdDxzaXplX3Q+KExGX0ZBQ0VTSVpFKSwgMSArIG1fbmFtZS5sZW5ndGgoKSkpOwor
ICAgIG1lbWNweShsb2dGb250LmxmRmFjZU5hbWUsIG1fbmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxU
ZXJtaW5hdGlvbigpLmRhdGEoKSwgc2l6ZW9mKGxvZ0ZvbnQubGZGYWNlTmFtZVswXSkgKiBtaW4o
c3RhdGljX2Nhc3Q8c2l6ZV90PihMRl9GQUNFU0laRSksIDEgKyBtX25hbWUubGVuZ3RoKCkpKTsK
IAogICAgIGxvZ0ZvbnQubGZIZWlnaHQgPSAtc2l6ZTsKICAgICBpZiAocmVuZGVyaW5nTW9kZSA9
PSBOb3JtYWxSZW5kZXJpbmdNb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFDYWlyby5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJv
LmNwcAppbmRleCA1NDYxOTFiNTQ4MTE2NmNlNWI1YjY4ZTJhZDQxNTQ0OWJiY2RmNjcxLi5jYjA5
YjMzYzZiOTY2MzBmOTVmZTNkNWRmYTZjMjM0OGJkZTY4YzY3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3RvbVBsYXRmb3JtRGF0YUNhaXJv
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YUNhaXJvLmNwcApAQCAtNDEsNyArNDEsNyBAQCBGb250UGxhdGZvcm1EYXRh
IEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZvbnRQbGF0Zm9ybURhdGEoaW50IHNpemUsIGJvb2wg
Ym9sZCwgYgogewogICAgIExPR0ZPTlQgbG9nRm9udDsKICAgICBtZW1zZXQoJmxvZ0ZvbnQsIDAs
IHNpemVvZihMT0dGT05UKSk7Ci0gICAgd2NzbmNweShsb2dGb250LmxmRmFjZU5hbWUsIG1fbmFt
ZS5kZXByZWNhdGVkQ2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgTEZfRkFDRVNJWkUg
LSAxKTsKKyAgICB3Y3NuY3B5KGxvZ0ZvbnQubGZGYWNlTmFtZSwgbV9uYW1lLmNoYXJhY3RlcnNX
aXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpLCBMRl9GQUNFU0laRSAtIDEpOwogCiAgICAgbG9n
Rm9udC5sZkhlaWdodCA9IC1zaXplOwogICAgIGlmIChyZW5kZXJpbmdNb2RlID09IE5vcm1hbFJl
bmRlcmluZ01vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vSWNvbldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
SWNvbldpbi5jcHAKaW5kZXggOTQ4NWU4MDRkNTc1M2Q3Y2EyYWMxODdjNTQzYTIzNjM3YzA4YmU3
OC4uNTBjZjNlNTljZDRiNWY5YzAyMWQwNjcxMDExOGMxMjY1YWU1ZGFhZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25XaW4uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JY29uV2luLmNwcApAQCAtNTgsNyAr
NTgsNyBAQCBQYXNzUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JGaWxlcyhjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKQogICAgICAgICBtZW1zZXQoJnNmaSwgMCwgc2l6ZW9m
KHNmaSkpOwogCiAgICAgICAgIFN0cmluZyB0bXBGaWxlbmFtZSA9IGZpbGVuYW1lc1swXTsKLSAg
ICAgICAgaWYgKCFTSEdldEZpbGVJbmZvKHRtcEZpbGVuYW1lLmRlcHJlY2F0ZWRDaGFyYWN0ZXJz
V2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCAmc2ZpLCBzaXplb2Yoc2ZpKSwgU0hHRklfSUNPTiB8
IFNIR0ZJX1NIRUxMSUNPTlNJWkUgfCBTSEdGSV9TTUFMTElDT04pKQorICAgICAgICBpZiAoIVNI
R2V0RmlsZUluZm8odG1wRmlsZW5hbWUuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5k
YXRhKCksIDAsICZzZmksIHNpemVvZihzZmkpLCBTSEdGSV9JQ09OIHwgU0hHRklfU0hFTExJQ09O
U0laRSB8IFNIR0ZJX1NNQUxMSUNPTikpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEljb24oc2ZpLmhJY29uKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tU
aW1lVmlzdWFsQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5jcHAKaW5kZXggOGMw
MDM2MTI1ZGFhMWIzMTNhZTcwODgyMWFiMTA1NDRkMGM0YjAwNS4uZDJjNDI0YjAwMGQwMmFlOGU4
YmNlZWExMDRkZWVlZjc3MjQ3ZTE1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXll
clByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcApAQCAtMzA3LDcgKzMwNyw3IEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dDo6c2V0VXBDb29raWVz
Rm9yUXVpY2tUaW1lKGNvbnN0IFN0CiAgICAgICAgICAgICBjb29raWVVUkwgPSBtb3ZpZVVSTDsK
IAogICAgICAgICBTdHJpbmcgc3RyaW5nID0gY29va2llQnVpbGRlci50b1N0cmluZygpOwotICAg
ICAgICBJbnRlcm5ldFNldENvb2tpZUV4Vyhjb29raWVVUkwuZGVwcmVjYXRlZENoYXJhY3RlcnNX
aXRoTnVsbFRlcm1pbmF0aW9uKCksIDAsIHN0cmluZy5kZXByZWNhdGVkQ2hhcmFjdGVyc1dpdGhO
dWxsVGVybWluYXRpb24oKSwgMCwgMCk7CisgICAgICAgIEludGVybmV0U2V0Q29va2llRXhXKGNv
b2tpZVVSTC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgMCwgc3RyaW5n
LmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpLCAwLCAwKTsKICAgICB9CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0Zv
bnRQbGF0Zm9ybURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
Y2UvRm9udFBsYXRmb3JtRGF0YS5jcHAKaW5kZXggYzVlNWNiMDc5YzFhMmQxMmQzMWFlMDI4ODRl
YTI1NTZhYjY3ODg3NC4uNWFhMGQ5ZWEyZTFiNWI3N2I2MzI3M2YxYjliMTIxZTY2ZmZmNjc4ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFBs
YXRmb3JtRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
Y2UvRm9udFBsYXRmb3JtRGF0YS5jcHAKQEAgLTMzNiw3ICszMzYsNyBAQCBwdWJsaWM6CiBGb250
UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9u
dERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGRlc2lyZWRGYW1pbHksIGJvb2wgdXNl
RGVmYXVsdEZvbnRJZk5vdFByZXNlbnQpCiB7CiAgICAgU3RyaW5nIGZhbWlseShkZXNpcmVkRmFt
aWx5KTsKLSAgICBpZiAoIWVxdWFsSWdub3JpbmdDYXNlKGZhbWlseSwgZGVmYXVsdEZvbnRGYW1p
bHkoKSkgJiYgIUZvbnRGYW1pbHlDaGVja2VyKGZhbWlseS5kZXByZWNhdGVkQ2hhcmFjdGVyc1dp
dGhOdWxsVGVybWluYXRpb24oKSkuaXNTdXBwb3J0ZWQoKSkgeworICAgIGlmICghZXF1YWxJZ25v
cmluZ0Nhc2UoZmFtaWx5LCBkZWZhdWx0Rm9udEZhbWlseSgpKSAmJiAhRm9udEZhbWlseUNoZWNr
ZXIoZmFtaWx5LmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpKS5pc1N1cHBv
cnRlZCgpKSB7CiAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShmYW1pbHksIFN0cmluZyho
ZWlUaVN0cikpICYmIGlzU29uZ1RpU3VwcG9ydGVkKCkpCiAgICAgICAgICAgICBmYW1pbHkgPSBT
dHJpbmcoc29uZ1RpU3RyKTsKICAgICAgICAgZWxzZSBpZiAodXNlRGVmYXVsdEZvbnRJZk5vdFBy
ZXNlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q3VybERvd25sb2FkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsRG93bmxvYWQuY3BwCmluZGV4IDNmMjdiN2VlNmQxODAzMmYzZWMzYzNmZWJmMmMxOTBhNDBl
Y2RhMWYuLjg3MDNlOWYxY2I0YjRmMTQ3ODIwYmIzZjRhNmUzYWY2YzBhYTM3NjcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQu
Y3BwCkBAIC0yOTAsNyArMjkwLDcgQEAgdm9pZCBDdXJsRG93bmxvYWQ6Om1vdmVGaWxlVG9EZXN0
aW5hdGlvbigpCiAgICAgaWYgKG1fZGVzdGluYXRpb24uaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICA6Ok1vdmVGaWxlKG1fdGVtcFBhdGguZGVwcmVjYXRlZENoYXJhY3RlcnNXaXRo
TnVsbFRlcm1pbmF0aW9uKCksIG1fZGVzdGluYXRpb24uZGVwcmVjYXRlZENoYXJhY3RlcnNXaXRo
TnVsbFRlcm1pbmF0aW9uKCkpOworICAgIDo6TW92ZUZpbGUobV90ZW1wUGF0aC5jaGFyYWN0ZXJz
V2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgbV9kZXN0aW5hdGlvbi5jaGFyYWN0ZXJzV2l0
aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSk7CiB9CiAKIHZvaWQgQ3VybERvd25sb2FkOjpkaWRS
ZWNlaXZlSGVhZGVyKGNvbnN0IFN0cmluZyYgaGVhZGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vQ29va2llSmFyV2luLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL0Nvb2tpZUphcldpbi5jcHAKaW5kZXggZWFmMzJiMWI1
NjE5OGE5OWM2NTQ5YmJjMWU2YmQwZmMxOWU0NDNkYi4uN2IxMjZlMDMxNDM1NDA5MzcwZDRjMjlk
MmRmMGRmZDI3MjEwNTU5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay93aW4vQ29va2llSmFyV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3dpbi9Db29raWVKYXJXaW4uY3BwCkBAIC00MSw3ICs0MSw3IEBAIHZvaWQgc2V0Q29v
a2llc0Zyb21ET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29uc3QgS1VSTCYsIGNv
bnN0IEtVUkwmIHVyCiAgICAgLy8gRklYTUU6IERlYWwgd2l0aCBmaXJzdFBhcnR5IGFyZ3VtZW50
LgogICAgIFN0cmluZyBzdHIgPSB1cmwuc3RyaW5nKCk7CiAgICAgU3RyaW5nIHZhbCA9IHZhbHVl
OwotICAgIEludGVybmV0U2V0Q29va2llKHN0ci5kZXByZWNhdGVkQ2hhcmFjdGVyc1dpdGhOdWxs
VGVybWluYXRpb24oKSwgMCwgdmFsLmRlcHJlY2F0ZWRDaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5h
dGlvbigpKTsKKyAgICBJbnRlcm5ldFNldENvb2tpZShzdHIuY2hhcmFjdGVyc1dpdGhOdWxsVGVy
bWluYXRpb24oKS5kYXRhKCksIDAsIHZhbC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigp
LmRhdGEoKSk7CiB9CiAKIFN0cmluZyBjb29raWVzRm9yRE9NKGNvbnN0IE5ldHdvcmtTdG9yYWdl
U2Vzc2lvbiYsIGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJiB1cmwpCkBAIC01MSwxNCArNTEsMTQg
QEAgU3RyaW5nIGNvb2tpZXNGb3JET00oY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgY29u
c3QgS1VSTCYsIGNvbnN0IEtVUkwmIHVybCkKICAgICBTdHJpbmcgc3RyID0gdXJsLnN0cmluZygp
OwogCiAgICAgRFdPUkQgY291bnQgPSAwOwotICAgIGlmICghSW50ZXJuZXRHZXRDb29raWUoc3Ry
LmRlcHJlY2F0ZWRDaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCAwLCAmY291bnQp
KQorICAgIGlmICghSW50ZXJuZXRHZXRDb29raWUoc3RyLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1p
bmF0aW9uKCkuZGF0YSgpLCAwLCAwLCAmY291bnQpKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CiAKICAgICBpZiAoY291bnQgPD0gMSkgLy8gTnVsbCB0ZXJtaW5hdG9yIGNvdW50cyBhcyAxLgog
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKICAgICBWZWN0b3I8VUNoYXI+IGJ1ZmZlcihjb3Vu
dCk7Ci0gICAgaWYgKCFJbnRlcm5ldEdldENvb2tpZShzdHIuZGVwcmVjYXRlZENoYXJhY3RlcnNX
aXRoTnVsbFRlcm1pbmF0aW9uKCksIDAsIGJ1ZmZlci5kYXRhKCksICZjb3VudCkpCisgICAgaWYg
KCFJbnRlcm5ldEdldENvb2tpZShzdHIuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5k
YXRhKCksIDAsIGJ1ZmZlci5kYXRhKCksICZjb3VudCkpCiAgICAgICAgIHJldHVybiBTdHJpbmco
KTsKIAogICAgIGJ1ZmZlci5zaHJpbmsoY291bnQgLSAxKTsgLy8gSWdub3JlIHRoZSBudWxsIHRl
cm1pbmF0b3IuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dp
bi9Eb3dubG9hZEJ1bmRsZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3dpbi9Eb3dubG9hZEJ1bmRsZVdpbi5jcHAKaW5kZXggODAzYTg1OWVjZmM3MDEzMzI0OGIyOTcy
NzNlMDUwMzI1YzMzMDVhNC4uMzQ3NjU0YzAyNmU2N2EzZTg3NTY2NTliYjM0ZmNlYTk3N2JlYTVj
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93aW4vRG93bmxv
YWRCdW5kbGVXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2lu
L0Rvd25sb2FkQnVuZGxlV2luLmNwcApAQCAtNjEsNyArNjEsNyBAQCBib29sIGFwcGVuZFJlc3Vt
ZURhdGEoQ0ZEYXRhUmVmIHJlc3VtZURhdGEsIGNvbnN0IFN0cmluZyYgYnVuZGxlUGF0aCkKIAog
ICAgIFN0cmluZyBudWxsaWZpZWRQYXRoID0gYnVuZGxlUGF0aDsKICAgICBGSUxFKiBidW5kbGUg
PSAwOwotICAgIGlmIChfd2ZvcGVuX3MoJmJ1bmRsZSwgbnVsbGlmaWVkUGF0aC5kZXByZWNhdGVk
Q2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgVEVYVCgiYWIiKSkgfHwgIWJ1bmRsZSkg
eworICAgIGlmIChfd2ZvcGVuX3MoJmJ1bmRsZSwgbnVsbGlmaWVkUGF0aC5jaGFyYWN0ZXJzV2l0
aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgVEVYVCgiYWIiKSkgfHwgIWJ1bmRsZSkgewogICAg
ICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBvcGVuIGZpbGUgJXMgdG8gYXBwZW5kIHJlc3VtZSBk
YXRhIiwgYnVuZGxlUGF0aC5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CkBAIC0xMTAsNyArMTEwLDcgQEAgQ0ZEYXRhUmVmIGV4dHJhY3RSZXN1bWVEYXRhKGNv
bnN0IFN0cmluZyYgYnVuZGxlUGF0aCkKICAgICAvLyBPcGVuIGEgaGFuZGxlIHRvIHRoZSBidW5k
bGUgZmlsZQogICAgIFN0cmluZyBudWxsaWZpZWRQYXRoID0gYnVuZGxlUGF0aDsKICAgICBGSUxF
KiBidW5kbGUgPSAwOwotICAgIGlmIChfd2ZvcGVuX3MoJmJ1bmRsZSwgbnVsbGlmaWVkUGF0aC5k
ZXByZWNhdGVkQ2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgVEVYVCgicitiIikpIHx8
ICFidW5kbGUpIHsKKyAgICBpZiAoX3dmb3Blbl9zKCZidW5kbGUsIG51bGxpZmllZFBhdGguY2hh
cmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksIFRFWFQoInIrYiIpKSB8fCAhYnVu
ZGxlKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIG9wZW4gZmlsZSAlcyB0byBnZXQg
cmVzdW1lIGRhdGEiLCBidW5kbGVQYXRoLmFzY2lpKCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay93
aW4vUmVzb3VyY2VIYW5kbGVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay93aW4vUmVzb3VyY2VIYW5kbGVXaW4uY3BwCmluZGV4IDFmOGVlODU5ZmU0ZjkwNDRlZDY5Zjk4
N2QzOTQwNjAwNDE1MTFjNzguLjMyMGM0NWQ2NTU3OTE5YmVlNzIyYzQxNTliOGZjZDI4ZmJhZGVi
NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvd2luL1Jlc291
cmNlSGFuZGxlV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3dp
bi9SZXNvdXJjZUhhbmRsZVdpbi5jcHAKQEAgLTQ5LDcgKzQ5LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogc3RhdGljIGlubGluZSBISU5URVJORVQgY3JlYXRlSW50ZXJuZXRIYW5kbGUoY29uc3Qg
U3RyaW5nJiB1c2VyQWdlbnQsIGJvb2wgYXN5bmNocm9ub3VzKQogewogICAgIFN0cmluZyB1c2Vy
QWdlbnRTdHJpbmcgPSB1c2VyQWdlbnQ7Ci0gICAgSElOVEVSTkVUIGludGVybmV0SGFuZGxlID0g
SW50ZXJuZXRPcGVuVyh1c2VyQWdlbnRTdHJpbmcuZGVwcmVjYXRlZENoYXJhY3RlcnNXaXRoTnVs
bFRlcm1pbmF0aW9uKCksIElOVEVSTkVUX09QRU5fVFlQRV9QUkVDT05GSUcsIDAsIDAsIGFzeW5j
aHJvbm91cyA/IElOVEVSTkVUX0ZMQUdfQVNZTkMgOiAwKTsKKyAgICBISU5URVJORVQgaW50ZXJu
ZXRIYW5kbGUgPSBJbnRlcm5ldE9wZW5XKHVzZXJBZ2VudFN0cmluZy5jaGFyYWN0ZXJzV2l0aE51
bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgSU5URVJORVRfT1BFTl9UWVBFX1BSRUNPTkZJRywgMCwg
MCwgYXN5bmNocm9ub3VzID8gSU5URVJORVRfRkxBR19BU1lOQyA6IDApOwogCiAgICAgaWYgKGFz
eW5jaHJvbm91cykKICAgICAgICAgSW50ZXJuZXRTZXRTdGF0dXNDYWxsYmFjayhpbnRlcm5ldEhh
bmRsZSwgJlJlc291cmNlSGFuZGxlOjppbnRlcm5ldFN0YXR1c0NhbGxiYWNrKTsKQEAgLTI4Nyw3
ICsyODcsNyBAQCBib29sIFJlc291cmNlSGFuZGxlOjpzdGFydCgpCiAgICAgICAgIHwgSU5URVJO
RVRfRkxBR19ET05UX0NBQ0hFCiAgICAgICAgIHwgSU5URVJORVRfRkxBR19SRUxPQUQ7CiAKLSAg
ICBkLT5tX2Nvbm5lY3RIYW5kbGUgPSBJbnRlcm5ldENvbm5lY3RXKGQtPm1faW50ZXJuZXRIYW5k
bGUsIGZpcnN0UmVxdWVzdCgpLnVybCgpLmhvc3QoKS5kZXByZWNhdGVkQ2hhcmFjdGVyc1dpdGhO
dWxsVGVybWluYXRpb24oKSwgZmlyc3RSZXF1ZXN0KCkudXJsKCkucG9ydCgpLAorICAgIGQtPm1f
Y29ubmVjdEhhbmRsZSA9IEludGVybmV0Q29ubmVjdFcoZC0+bV9pbnRlcm5ldEhhbmRsZSwgZmly
c3RSZXF1ZXN0KCkudXJsKCkuaG9zdCgpLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCku
ZGF0YSgpLCBmaXJzdFJlcXVlc3QoKS51cmwoKS5wb3J0KCksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBJTlRFUk5FVF9TRVJWSUNFX0hUVFAsIGZsYWdz
LCByZWludGVycHJldF9jYXN0PERXT1JEX1BUUj4odGhpcykpOwogCiAgICAgaWYgKCFkLT5tX2Nv
bm5lY3RIYW5kbGUpCkBAIC0zMDYsOCArMzA2LDggQEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3Rh
cnQoKQogCiAgICAgTFBDV1NUUiBodHRwQWNjZXB0W10gPSB7IEwiKi8qIiwgMCB9OwogCi0gICAg
ZC0+bV9yZXF1ZXN0SGFuZGxlID0gSHR0cE9wZW5SZXF1ZXN0VyhkLT5tX2Nvbm5lY3RIYW5kbGUs
IGh0dHBNZXRob2QuZGVwcmVjYXRlZENoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIHVy
bFN0ci5kZXByZWNhdGVkQ2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGh0dHBSZWZlcnJlci5kZXByZWNh
dGVkQ2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgaHR0cEFjY2VwdCwgZmxhZ3MsIHJl
aW50ZXJwcmV0X2Nhc3Q8RFdPUkRfUFRSPih0aGlzKSk7CisgICAgZC0+bV9yZXF1ZXN0SGFuZGxl
ID0gSHR0cE9wZW5SZXF1ZXN0VyhkLT5tX2Nvbm5lY3RIYW5kbGUsIGh0dHBNZXRob2QuY2hhcmFj
dGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksIHVybFN0ci5jaGFyYWN0ZXJzV2l0aE51
bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAsIGh0dHBSZWZlcnJlci5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigp
LmRhdGEoKSwgaHR0cEFjY2VwdCwgZmxhZ3MsIHJlaW50ZXJwcmV0X2Nhc3Q8RFdPUkRfUFRSPih0
aGlzKSk7CiAKICAgICBpZiAoIWQtPm1fcmVxdWVzdEhhbmRsZSkgewogICAgICAgICBJbnRlcm5l
dENsb3NlSGFuZGxlKGQtPm1fY29ubmVjdEhhbmRsZSk7CkBAIC0zNjQsNyArMzY0LDcgQEAgdm9p
ZCBSZXNvdXJjZUhhbmRsZTo6ZmlsZUxvYWRUaW1lcihUaW1lcjxSZXNvdXJjZUhhbmRsZT4qKQog
ICAgIH0KIAogICAgIFN0cmluZyBmaWxlTmFtZSA9IGZpcnN0UmVxdWVzdCgpLnVybCgpLmZpbGVT
eXN0ZW1QYXRoKCk7Ci0gICAgSEFORExFIGZpbGVIYW5kbGUgPSBDcmVhdGVGaWxlVyhmaWxlTmFt
ZS5kZXByZWNhdGVkQ2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgR0VORVJJQ19SRUFE
LCAwLCAwLCBPUEVOX0VYSVNUSU5HLCBGSUxFX0FUVFJJQlVURV9OT1JNQUwsIDApOworICAgIEhB
TkRMRSBmaWxlSGFuZGxlID0gQ3JlYXRlRmlsZVcoZmlsZU5hbWUuY2hhcmFjdGVyc1dpdGhOdWxs
VGVybWluYXRpb24oKS5kYXRhKCksIEdFTkVSSUNfUkVBRCwgMCwgMCwgT1BFTl9FWElTVElORywg
RklMRV9BVFRSSUJVVEVfTk9STUFMLCAwKTsKIAogICAgIGlmIChmaWxlSGFuZGxlID09IElOVkFM
SURfSEFORExFX1ZBTFVFKSB7CiAgICAgICAgIGNsaWVudCgpLT5kaWRGYWlsKHRoaXMsIFJlc291
cmNlRXJyb3IoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dp
bi9Mb2NhbGVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93aW4vTG9jYWxl
V2luLmNwcAppbmRleCBhZTkxNjM1M2Q5NTIwOTlkY2Y5MTBkN2FlYjQ1NmNlNzMwZThkODBjLi5j
NDFlNDg0MDIwODg1Yzc1MjRkNjViZjZlOTVhYjBmZmQ0MzhlZjMzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbi9Mb2NhbGVXaW4uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luL0xvY2FsZVdpbi5jcHAKQEAgLTEyNSw3ICsxMjUsNyBA
QCBzdGF0aWMgTENJRCBMQ0lERnJvbUxvY2FsZUludGVybmFsKExDSUQgdXNlckRlZmF1bHRMQ0lE
LCBjb25zdCBTdHJpbmcmIHVzZXJEZWZhdQogICAgIFN0cmluZyBsb2NhbGVMYW5ndWFnZUNvZGUg
PSBleHRyYWN0TGFuZ3VhZ2VDb2RlKGxvY2FsZSk7CiAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KGxvY2FsZUxhbmd1YWdlQ29kZSwgdXNlckRlZmF1bHRMYW5ndWFnZUNvZGUpKQogICAgICAgICBy
ZXR1cm4gdXNlckRlZmF1bHRMQ0lEOwotICAgIHJldHVybiBsb2NhbGVOYW1lVG9MQ0lEKGxvY2Fs
ZS5kZXByZWNhdGVkQ2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCk7CisgICAgcmV0
dXJuIGxvY2FsZU5hbWVUb0xDSUQobG9jYWxlLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9u
KCkuZGF0YSgpLCAwKTsKIH0KIAogc3RhdGljIExDSUQgTENJREZyb21Mb2NhbGUoY29uc3QgQXRv
bWljU3RyaW5nJiBsb2NhbGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90
ZXh0L3dpbi9UZXh0Q29kZWNXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC93
aW4vVGV4dENvZGVjV2luLmNwcAppbmRleCAzOGQ4NDlkODdmOGZmNmE3NTQzYWZjMTE1YTA1NTQ2
NTYzNGIyOWIwLi5hNWJjYTcwYjQ4MjcyMzFmYjcyMjIwZTZhMTMzY2EyNjBmZWJkZjNlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L3dpbi9UZXh0Q29kZWNXaW4uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvd2luL1RleHRDb2RlY1dpbi5jcHAK
QEAgLTMwMSw3ICszMDEsNyBAQCB2b2lkIFRleHRDb2RlY1dpbjo6ZW51bWVyYXRlU3VwcG9ydGVk
RW5jb2RpbmdzKEVuY29kaW5nUmVjZWl2ZXImIHJlY2VpdmVyKQogICAgIGxhbmd1YWdlTWFuYWdl
cigpOwogICAgIGZvciAoQ2hhcnNldFNldDo6aXRlcmF0b3IgaSA9IHN1cHBvcnRlZENoYXJzZXRz
KCkuYmVnaW4oKTsgaSAhPSBzdXBwb3J0ZWRDaGFyc2V0cygpLmVuZCgpOyArK2kpIHsKICAgICAg
ICAgSGFzaE1hcDxTdHJpbmcsIENoYXJzZXRJbmZvPjo6aXRlcmF0b3IgaiA9IGtub3duQ2hhcnNl
dHMoKS5maW5kKCppKTsKLSAgICAgICAgaWYgKGogIT0ga25vd25DaGFyc2V0cygpLmVuZCgpICYm
ICFyZWNlaXZlci5yZWNlaXZlKGotPnZhbHVlLm1fbmFtZS5kYXRhKCksIGotPnZhbHVlLm1fZnJp
ZW5kbHlOYW1lLmRlcHJlY2F0ZWRDaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCBqLT52
YWx1ZS5tX2NvZGVQYWdlKSkKKyAgICAgICAgaWYgKGogIT0ga25vd25DaGFyc2V0cygpLmVuZCgp
ICYmICFyZWNlaXZlci5yZWNlaXZlKGotPnZhbHVlLm1fbmFtZS5kYXRhKCksIGotPnZhbHVlLm1f
ZnJpZW5kbHlOYW1lLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpLCBqLT52
YWx1ZS5tX2NvZGVQYWdlKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxpdGllc1dpbi5jcHAK
aW5kZXggZDY2YjUxNWI3MDhjODVjNjg1NGFlMGZjYzI3MDUwYTc1MzJlZDQzYi4uYmZhMGI2NzE0
NzExMjI1MzA2N2FlNzc3NWNlZTUwMmFkN2VlMjJjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxpdGllc1dpbi5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxpdGllc1dpbi5jcHAKQEAgLTEzMyw3ICsx
MzMsNyBAQCBzdGF0aWMgYm9vbCBnZXRXZWJMb2NEYXRhKGNvbnN0IERyYWdEYXRhTWFwKiBkYXRh
T2JqZWN0LCBTdHJpbmcmIHVybCwgU3RyaW5nKiB0aQogICAgIGlmICghZGF0YU9iamVjdC0+Y29u
dGFpbnMoY2ZIRHJvcEZvcm1hdCgpLT5jZkZvcm1hdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIHdjc2NweShmaWxlbmFtZSwgZGF0YU9iamVjdC0+Z2V0KGNmSERyb3BGb3JtYXQoKS0+
Y2ZGb3JtYXQpWzBdLmRlcHJlY2F0ZWRDaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKTsK
KyAgICB3Y3NjcHkoZmlsZW5hbWUsIGRhdGFPYmplY3QtPmdldChjZkhEcm9wRm9ybWF0KCktPmNm
Rm9ybWF0KVswXS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSk7CiAgICAg
aWYgKF93Y3NpY21wKFBhdGhGaW5kRXh0ZW5zaW9uVyhmaWxlbmFtZSksIEwiLnVybCIpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7ICAgIAogCkBAIC0xODIsNyArMTgyLDcgQEAgSEdMT0JBTCBjcmVh
dGVHbG9iYWxEYXRhKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSkKIAogICAg
IGlmIChjYkRhdGEpIHsKICAgICAgICAgUFdTVFIgYnVmZmVyID0gc3RhdGljX2Nhc3Q8UFdTVFI+
KEdsb2JhbExvY2soY2JEYXRhKSk7Ci0gICAgICAgIF9zbndwcmludGYoYnVmZmVyLCBzaXplLCBM
IiVzXG4lcyIsIG11dGFibGVVUkwuZGVwcmVjYXRlZENoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0
aW9uKCksIG11dGFibGVUaXRsZS5kZXByZWNhdGVkQ2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRp
b24oKSk7CisgICAgICAgIF9zbndwcmludGYoYnVmZmVyLCBzaXplLCBMIiVzXG4lcyIsIG11dGFi
bGVVUkwuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksIG11dGFibGVUaXRs
ZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSk7CiAgICAgICAgIEdsb2Jh
bFVubG9jayhjYkRhdGEpOwogICAgIH0KICAgICByZXR1cm4gY2JEYXRhOwpAQCAtNDM0LDcgKzQz
NCw3IEBAIHZvaWQgc2V0RmlsZURlc2NyaXB0b3JEYXRhKElEYXRhT2JqZWN0KiBkYXRhT2JqZWN0
LCBpbnQgc2l6ZSwgY29uc3QgU3RyaW5nJiBwYXNzCiAgICAgZmdkLT5mZ2RbMF0ubkZpbGVTaXpl
TG93ID0gc2l6ZTsKIAogICAgIGludCBtYXhTaXplID0gc3RkOjptaW48aW50PihwYXRobmFtZS5s
ZW5ndGgoKSwgV1RGX0FSUkFZX0xFTkdUSChmZ2QtPmZnZFswXS5jRmlsZU5hbWUpKTsKLSAgICBD
b3B5TWVtb3J5KGZnZC0+ZmdkWzBdLmNGaWxlTmFtZSwgcGF0aG5hbWUuZGVwcmVjYXRlZENoYXJh
Y3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIG1heFNpemUgKiBzaXplb2YoVUNoYXIpKTsKKyAg
ICBDb3B5TWVtb3J5KGZnZC0+ZmdkWzBdLmNGaWxlTmFtZSwgcGF0aG5hbWUuY2hhcmFjdGVyc1dp
dGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksIG1heFNpemUgKiBzaXplb2YoVUNoYXIpKTsKICAg
ICBHbG9iYWxVbmxvY2sobWVkaXVtLmhHbG9iYWwpOwogCiAgICAgZGF0YU9iamVjdC0+U2V0RGF0
YShmaWxlRGVzY3JpcHRvckZvcm1hdCgpLCAmbWVkaXVtLCBUUlVFKTsKQEAgLTUyMSw5ICs1MjEs
OSBAQCBTdHJpbmcgZ2V0VVJMKGNvbnN0IERyYWdEYXRhTWFwKiBkYXRhLCBEcmFnRGF0YTo6Rmls
ZW5hbWVDb252ZXJzaW9uUG9saWN5IGZpbGVuYQogICAgIGlmICghZ2V0RGF0YU1hcEl0ZW0oZGF0
YSwgZmlsZW5hbWVXRm9ybWF0KCksIHN0cmluZ0RhdGEpKQogICAgICAgICBnZXREYXRhTWFwSXRl
bShkYXRhLCBmaWxlbmFtZUZvcm1hdCgpLCBzdHJpbmdEYXRhKTsKIAotICAgIGlmIChzdHJpbmdE
YXRhLmlzRW1wdHkoKSB8fCAoIVBhdGhGaWxlRXhpc3RzKHN0cmluZ0RhdGEuZGVwcmVjYXRlZENo
YXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpICYmICFQYXRoSXNVTkMoc3RyaW5nRGF0YS5k
ZXByZWNhdGVkQ2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSkpKQorICAgIGlmIChzdHJp
bmdEYXRhLmlzRW1wdHkoKSB8fCAoIVBhdGhGaWxlRXhpc3RzKHN0cmluZ0RhdGEuY2hhcmFjdGVy
c1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCkpICYmICFQYXRoSXNVTkMoc3RyaW5nRGF0YS5j
aGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSkpKQogICAgICAgICByZXR1cm4g
dXJsOwotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gcGF0aEFzQ0ZTdHJpbmcgPSBhZG9wdENG
KENGU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKGNvbnN0
IFVuaUNoYXIgKilzdHJpbmdEYXRhLmRlcHJlY2F0ZWRDaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5h
dGlvbigpLCB3Y3NsZW4oc3RyaW5nRGF0YS5kZXByZWNhdGVkQ2hhcmFjdGVyc1dpdGhOdWxsVGVy
bWluYXRpb24oKSkpKTsKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHBhdGhBc0NGU3RyaW5n
ID0gYWRvcHRDRihDRlN0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKGtDRkFsbG9jYXRvckRlZmF1
bHQsIChjb25zdCBVbmlDaGFyICopc3RyaW5nRGF0YS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5h
dGlvbigpLmRhdGEoKSwgd2NzbGVuKHN0cmluZ0RhdGEuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWlu
YXRpb24oKS5kYXRhKCkpKSk7CiAgICAgaWYgKHVybEZyb21QYXRoKHBhdGhBc0NGU3RyaW5nLmdl
dCgpLCB1cmwpICYmIHRpdGxlKQogICAgICAgICAqdGl0bGUgPSB1cmw7CiAjZW5kaWYKQEAgLTc5
Nyw3ICs3OTcsNyBAQCB2b2lkIHNldENGRGF0YShJRGF0YU9iamVjdCogZGF0YSwgRk9STUFURVRD
KiBmb3JtYXQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkYXRhUwogICAgIGRyb3BGaWxlcy0+cEZp
bGVzID0gc2l6ZW9mKERST1BGSUxFUyk7CiAgICAgZHJvcEZpbGVzLT5mV2lkZSA9IFRSVUU7CiAg
ICAgU3RyaW5nIGZpbGVuYW1lID0gZGF0YVN0cmluZ3MuZmlyc3QoKTsKLSAgICB3Y3NjcHkocmVp
bnRlcnByZXRfY2FzdDxMUFdTVFI+KGRyb3BGaWxlcyArIDEpLCBmaWxlbmFtZS5kZXByZWNhdGVk
Q2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSk7ICAgIAorICAgIHdjc2NweShyZWludGVy
cHJldF9jYXN0PExQV1NUUj4oZHJvcEZpbGVzICsgMSksIGZpbGVuYW1lLmNoYXJhY3RlcnNXaXRo
TnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpKTsgICAgCiAgICAgR2xvYmFsVW5sb2NrKG1lZGl1bS5o
R2xvYmFsKTsKICAgICBkYXRhLT5TZXREYXRhKGZvcm1hdCwgJm1lZGl1bSwgRkFMU0UpOwogICAg
IDo6R2xvYmFsRnJlZShtZWRpdW0uaEdsb2JhbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vQ29udGV4dE1lbnVXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL0NvbnRleHRNZW51V2luLmNwcAppbmRleCAzMWMzNzczOTk5ODE3M2ViZGM0M2EzYmE1
MmZmNzQyNGEyY2Q4NDE4Li45NDY1NTFjZmY4OGQyZmZmMTcyYTU1Zjc2YjBjZjViMmNiNjA5MTIx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ29udGV4dE1lbnVXaW4u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9Db250ZXh0TWVudVdpbi5jcHAK
QEAgLTEyMyw3ICsxMjMsNyBAQCBITUVOVSBDb250ZXh0TWVudTo6Y3JlYXRlUGxhdGZvcm1Db250
ZXh0TWVudUZyb21JdGVtcyhjb25zdCBWZWN0b3I8Q29udGV4dE1lbnVJdAogICAgICAgICBpZiAo
aXRlbS50eXBlKCkgIT0gU2VwYXJhdG9yVHlwZSkgewogICAgICAgICAgICAgbWVudUl0ZW0uZk1h
c2sgfD0gTUlJTV9TVFJJTkc7CiAgICAgICAgICAgICBtZW51SXRlbS5jY2ggPSBpdGVtVGl0bGUu
bGVuZ3RoKCk7Ci0gICAgICAgICAgICBtZW51SXRlbS5kd1R5cGVEYXRhID0gY29uc3RfY2FzdDxM
UFdTVFI+KGl0ZW1UaXRsZS5kZXByZWNhdGVkQ2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24o
KSk7CisgICAgICAgICAgICBtZW51SXRlbS5kd1R5cGVEYXRhID0gY29uc3RfY2FzdDxMUFdTVFI+
KGl0ZW1UaXRsZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSk7CiAgICAg
ICAgIH0KIAogICAgICAgICA6Okluc2VydE1lbnVJdGVtKG1lbnUsIGksIFRSVUUsICZtZW51SXRl
bSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlV2lu
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VXaW4uY3BwCmluZGV4
IDcxMzJiZDRkNGJhZThkOWZmOTdkODRhZDdmYjM1NmM0YzE2YTk3ZTQuLmY0OTQ0ZjljN2Y3OGU1
NzQwZmY5Y2RiZmU0YTRkNTQ0MWI4NmE2YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9EcmFnSW1hZ2VXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbi9EcmFnSW1hZ2VXaW4uY3BwCkBAIC03MSw3ICs3MSw3IEBAIERyYWdJbWFnZVJlZiBjcmVh
dGVEcmFnSW1hZ2VJY29uRm9yQ2FjaGVkSW1hZ2VGaWxlbmFtZShjb25zdCBTdHJpbmcmIGZpbGVu
YW1lKQogewogICAgIFNIRklMRUlORk8gc2hmaSA9IHswfTsKICAgICBTdHJpbmcgZm5hbWUgPSBm
aWxlbmFtZTsKLSAgICBpZiAoRkFJTEVEKFNIR2V0RmlsZUluZm8oc3RhdGljX2Nhc3Q8TFBDV1NU
Uj4oZm5hbWUuZGVwcmVjYXRlZENoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpLCBGSUxF
X0FUVFJJQlVURV9OT1JNQUwsCisgICAgaWYgKEZBSUxFRChTSEdldEZpbGVJbmZvKHN0YXRpY19j
YXN0PExQQ1dTVFI+KGZuYW1lLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgp
KSwgRklMRV9BVFRSSUJVVEVfTk9STUFMLAogICAgICAgICAmc2hmaSwgc2l6ZW9mKHNoZmkpLCBT
SEdGSV9JQ09OIHwgU0hHRklfVVNFRklMRUFUVFJJQlVURVMpKSkKICAgICAgICAgcmV0dXJuIDA7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2lu
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9GaWxlU3lzdGVtV2luLmNwcAppbmRl
eCAxZjk2NTBjNThhYzkyOTkwOTRkNTExZDZkNWQyNzU0OThlZDE5OTI4Li41OWViOGU0ZTE0NWRm
MTdmOTU0Y2NjZWFhZDgxNjg3ZmRmODI5OTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vRmlsZVN5c3RlbVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL0ZpbGVTeXN0ZW1XaW4uY3BwCkBAIC00OCw3ICs0OCw3IEBAIHN0YXRpYyBjb25zdCBV
TE9OR0xPTkcga1NlY29uZHNGcm9tRmlsZVRpbWVUb1RpbWV0ID0gMTE2NDQ0NzM2MDA7CiAKIHN0
YXRpYyBib29sIGdldEZpbmREYXRhKFN0cmluZyBwYXRoLCBXSU4zMl9GSU5EX0RBVEFXJiBmaW5k
RGF0YSkKIHsKLSAgICBIQU5ETEUgaGFuZGxlID0gRmluZEZpcnN0RmlsZVcocGF0aC5kZXByZWNh
dGVkQ2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgJmZpbmREYXRhKTsKKyAgICBIQU5E
TEUgaGFuZGxlID0gRmluZEZpcnN0RmlsZVcocGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5h
dGlvbigpLmRhdGEoKSwgJmZpbmREYXRhKTsKICAgICBpZiAoaGFuZGxlID09IElOVkFMSURfSEFO
RExFX1ZBTFVFKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgRmluZENsb3NlKGhhbmRsZSk7
CkBAIC0xMjQsMTMgKzEyNCwxMyBAQCBib29sIGZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRo
KQogYm9vbCBkZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICBTdHJpbmcgZmls
ZW5hbWUgPSBwYXRoOwotICAgIHJldHVybiAhIURlbGV0ZUZpbGVXKGZpbGVuYW1lLmRlcHJlY2F0
ZWRDaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKTsKKyAgICByZXR1cm4gISFEZWxldGVG
aWxlVyhmaWxlbmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSk7CiB9
CiAKIGJvb2wgZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAg
IFN0cmluZyBmaWxlbmFtZSA9IHBhdGg7Ci0gICAgcmV0dXJuICEhUmVtb3ZlRGlyZWN0b3J5Vyhm
aWxlbmFtZS5kZXByZWNhdGVkQ2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSk7CisgICAg
cmV0dXJuICEhUmVtb3ZlRGlyZWN0b3J5VyhmaWxlbmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJt
aW5hdGlvbigpLmRhdGEoKSk7CiB9CiAKIFN0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQo
Y29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNvbXBvbmVudCkKQEAgLTE1NCw3ICsx
NTQsNyBAQCBTdHJpbmcgcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNvbnN0IFN0cmluZyYgcGF0
aCwgY29uc3QgU3RyaW5nJiBjb21wb25lbnQpCiAgICAgYnVmZmVyW3BhdGgubGVuZ3RoKCldID0g
J1wwJzsKIAogICAgIFN0cmluZyBjb21wb25lbnRDb3B5ID0gY29tcG9uZW50OwotICAgIGlmICgh
UGF0aEFwcGVuZFcoYnVmZmVyLmRhdGEoKSwgY29tcG9uZW50Q29weS5kZXByZWNhdGVkQ2hhcmFj
dGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSkpCisgICAgaWYgKCFQYXRoQXBwZW5kVyhidWZmZXIu
ZGF0YSgpLCBjb21wb25lbnRDb3B5LmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0
YSgpKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgYnVmZmVyLnJlc2l6ZSh3Y3Ns
ZW4oYnVmZmVyLmRhdGEoKSkpOwpAQCAtMTgzLDcgKzE4Myw3IEBAIENTdHJpbmcgZmlsZVN5c3Rl
bVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYgcGF0aCkKIGJvb2wgbWFrZUFsbERpcmVjdG9y
aWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICBTdHJpbmcgZnVsbFBhdGggPSBwYXRoOwot
ICAgIGlmIChTSENyZWF0ZURpcmVjdG9yeUV4KDAsIGZ1bGxQYXRoLmRlcHJlY2F0ZWRDaGFyYWN0
ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwKSAhPSBFUlJPUl9TVUNDRVNTKSB7CisgICAgaWYg
KFNIQ3JlYXRlRGlyZWN0b3J5RXgoMCwgZnVsbFBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWlu
YXRpb24oKS5kYXRhKCksIDApICE9IEVSUk9SX1NVQ0NFU1MpIHsKICAgICAgICAgRFdPUkQgZXJy
b3IgPSBHZXRMYXN0RXJyb3IoKTsKICAgICAgICAgaWYgKGVycm9yICE9IEVSUk9SX0ZJTEVfRVhJ
U1RTICYmIGVycm9yICE9IEVSUk9SX0FMUkVBRFlfRVhJU1RTKSB7CiAgICAgICAgICAgICBMT0df
RVJST1IoIkZhaWxlZCB0byBjcmVhdGUgcGF0aCAlcyIsIHBhdGguYXNjaWkoKS5kYXRhKCkpOwpA
QCAtMjE3LDcgKzIxNyw3IEBAIFN0cmluZyBwYXRoR2V0RmlsZU5hbWUoY29uc3QgU3RyaW5nJiBw
YXRoKQogICAgICAgICByZXR1cm4gcGF0aDsKICAgICByZXR1cm4gcGF0aC5zdWJzdHJpbmcocG9z
aXRpb24gKyAxKTsKICNlbHNlCi0gICAgcmV0dXJuIFN0cmluZyg6OlBhdGhGaW5kRmlsZU5hbWUo
U3RyaW5nKHBhdGgpLmRlcHJlY2F0ZWRDaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKSk7
CisgICAgcmV0dXJuIFN0cmluZyg6OlBhdGhGaW5kRmlsZU5hbWUoU3RyaW5nKHBhdGgpLmNoYXJh
Y3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpKSk7CiAjZW5kaWYKIH0KIApAQCAtMzA5
LDcgKzMwOSw3IEBAIFN0cmluZyBvcGVuVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmLCBQbGF0
Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIC8v
IHVzZSBDUkVBVEVfTkVXIHRvIGF2b2lkIG92ZXJ3cml0aW5nIGFuIGV4aXN0aW5nIGZpbGUgd2l0
aCB0aGUgc2FtZSBuYW1lCi0gICAgICAgIGhhbmRsZSA9IDo6Q3JlYXRlRmlsZVcocHJvcG9zZWRQ
YXRoLmRlcHJlY2F0ZWRDaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCBHRU5FUklDX1JF
QUQgfCBHRU5FUklDX1dSSVRFLCAwLCAwLCBDUkVBVEVfTkVXLCBGSUxFX0FUVFJJQlVURV9OT1JN
QUwsIDApOworICAgICAgICBoYW5kbGUgPSA6OkNyZWF0ZUZpbGVXKHByb3Bvc2VkUGF0aC5jaGFy
YWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgR0VORVJJQ19SRUFEIHwgR0VORVJJ
Q19XUklURSwgMCwgMCwgQ1JFQVRFX05FVywgRklMRV9BVFRSSUJVVEVfTk9STUFMLCAwKTsKICAg
ICB9IHdoaWxlICghaXNIYW5kbGVWYWxpZChoYW5kbGUpICYmIEdldExhc3RFcnJvcigpID09IEVS
Uk9SX0FMUkVBRFlfRVhJU1RTKTsKIAogICAgIGlmICghaXNIYW5kbGVWYWxpZChoYW5kbGUpKQpA
QCAtMzM2LDcgKzMzNiw3IEBAIFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJp
bmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQogICAgIH0KIAogICAgIFN0cmluZyBkZXN0aW5h
dGlvbiA9IHBhdGg7Ci0gICAgcmV0dXJuIENyZWF0ZUZpbGUoZGVzdGluYXRpb24uZGVwcmVjYXRl
ZENoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIGRlc2lyZWRBY2Nlc3MsIDAsIDAsIGNy
ZWF0aW9uRGlzcG9zaXRpb24sIEZJTEVfQVRUUklCVVRFX05PUk1BTCwgMCk7CisgICAgcmV0dXJu
IENyZWF0ZUZpbGUoZGVzdGluYXRpb24uY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5k
YXRhKCksIGRlc2lyZWRBY2Nlc3MsIDAsIDAsIGNyZWF0aW9uRGlzcG9zaXRpb24sIEZJTEVfQVRU
UklCVVRFX05PUk1BTCwgMCk7CiB9CiAKIHZvaWQgY2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRs
ZSYgaGFuZGxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL01JTUVU
eXBlUmVnaXN0cnlXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL01JTUVUeXBl
UmVnaXN0cnlXaW4uY3BwCmluZGV4IGVkY2M4OTJiZGFkZDU4N2ZhNTRkN2MyOGI1NjA4MDY2Yzk1
ZDQ3MmYuLmYzMDgyMGNkZWNkMDA2Mjg2YzkxYWIwY2E2OTQwOGY0YzI5YzY4ZDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9NSU1FVHlwZVJlZ2lzdHJ5V2luLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vTUlNRVR5cGVSZWdpc3RyeVdpbi5jcHAK
QEAgLTQwLDcgKzQwLDcgQEAgc3RhdGljIFN0cmluZyBtaW1lVHlwZUZvckV4dGVuc2lvbihjb25z
dCBTdHJpbmcmIGV4dGVuc2lvbikKICAgICBEV09SRCBjb250ZW50VHlwZVN0ckxlbiA9IHNpemVv
Zihjb250ZW50VHlwZVN0cik7CiAgICAgRFdPUkQga2V5VHlwZTsKIAotICAgIEhSRVNVTFQgcmVz
dWx0ID0gZ2V0UmVnaXN0cnlWYWx1ZShIS0VZX0NMQVNTRVNfUk9PVCwgZXh0LmRlcHJlY2F0ZWRD
aGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCBMIkNvbnRlbnQgVHlwZSIsICZrZXlUeXBl
LCBjb250ZW50VHlwZVN0ciwgJmNvbnRlbnRUeXBlU3RyTGVuKTsKKyAgICBIUkVTVUxUIHJlc3Vs
dCA9IGdldFJlZ2lzdHJ5VmFsdWUoSEtFWV9DTEFTU0VTX1JPT1QsIGV4dC5jaGFyYWN0ZXJzV2l0
aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgTCJDb250ZW50IFR5cGUiLCAma2V5VHlwZSwgY29u
dGVudFR5cGVTdHIsICZjb250ZW50VHlwZVN0ckxlbik7CiAKICAgICBpZiAocmVzdWx0ID09IEVS
Uk9SX1NVQ0NFU1MgJiYga2V5VHlwZSA9PSBSRUdfU1opCiAgICAgICAgIHJldHVybiBTdHJpbmco
Y29udGVudFR5cGVTdHIsIGNvbnRlbnRUeXBlU3RyTGVuIC8gc2l6ZW9mKGNvbnRlbnRUeXBlU3Ry
WzBdKSAtIDEpOwpAQCAtNTUsNyArNTUsNyBAQCBTdHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0
UHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQogICAgIERX
T1JEIGV4dFN0ckxlbiA9IHNpemVvZihleHRTdHIpOwogICAgIERXT1JEIGtleVR5cGU7CiAKLSAg
ICBIUkVTVUxUIHJlc3VsdCA9IGdldFJlZ2lzdHJ5VmFsdWUoSEtFWV9DTEFTU0VTX1JPT1QsIHBh
dGguZGVwcmVjYXRlZENoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIEwiRXh0ZW5zaW9u
IiwgJmtleVR5cGUsIGV4dFN0ciwgJmV4dFN0ckxlbik7CisgICAgSFJFU1VMVCByZXN1bHQgPSBn
ZXRSZWdpc3RyeVZhbHVlKEhLRVlfQ0xBU1NFU19ST09ULCBwYXRoLmNoYXJhY3RlcnNXaXRoTnVs
bFRlcm1pbmF0aW9uKCkuZGF0YSgpLCBMIkV4dGVuc2lvbiIsICZrZXlUeXBlLCBleHRTdHIsICZl
eHRTdHJMZW4pOwogCiAgICAgaWYgKHJlc3VsdCA9PSBFUlJPUl9TVUNDRVNTICYmIGtleVR5cGUg
PT0gUkVHX1NaKQogICAgICAgICByZXR1cm4gU3RyaW5nKGV4dFN0ciArIDEsIGV4dFN0ckxlbiAv
IHNpemVvZihleHRTdHJbMF0pIC0gMik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
UGFzdGVib2FyZFdpbi5jcHAKaW5kZXggYjY0MDhkZDQ0NDJmYzgxM2YyOGE5OTE0YTM4YjJjYTBl
ODYyOWRlNi4uODU1M2Q0ZGUwZDRlYjBmNTI3NjlkOGNlODA1NmRhMWI3Y2ZiMmE5YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcApAQCAtOTIxLDcg
KzkyMSw3IEBAIHN0YXRpYyBIR0xPQkFMIGNyZWF0ZUdsb2JhbEltYWdlRmlsZURlc2NyaXB0b3Io
Y29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogICAgIGV4dGVuc2lvbi5pbnNlcnQoIi4iLCAwKTsKLSAgICBmc1BhdGggPSBmaWxlc3lzdGVt
UGF0aEZyb21VcmxPclRpdGxlKHVybCwgcHJlZmVycmVkVGl0bGUsIGV4dGVuc2lvbi5kZXByZWNh
dGVkQ2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgZmFsc2UpOworICAgIGZzUGF0aCA9
IGZpbGVzeXN0ZW1QYXRoRnJvbVVybE9yVGl0bGUodXJsLCBwcmVmZXJyZWRUaXRsZSwgZXh0ZW5z
aW9uLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpLCBmYWxzZSk7CiAKICAg
ICBpZiAoZnNQYXRoLmxlbmd0aCgpIDw9IDApIHsKICAgICAgICAgR2xvYmFsVW5sb2NrKG1lbU9i
aik7CkBAIC05NjMsNyArOTYzLDcgQEAgc3RhdGljIEhHTE9CQUwgY3JlYXRlR2xvYmFsSERyb3BD
b250ZW50KGNvbnN0IEtVUkwmIHVybCwgU3RyaW5nJiBmaWxlTmFtZSwgU2hhcmUKICAgICAgICAg
Ly8gd2luZG93cyBkb2VzIG5vdCBlbmpveSBhIGxlYWRpbmcgc2xhc2ggb24gcGF0aHMKICAgICAg
ICAgaWYgKGxvY2FsUGF0aFswXSA9PSAnLycpCiAgICAgICAgICAgICBsb2NhbFBhdGggPSBsb2Nh
bFBhdGguc3Vic3RyaW5nKDEpOwotICAgICAgICBMUENXU1RSIGxvY2FsUGF0aFN0ciA9IGxvY2Fs
UGF0aC5kZXByZWNhdGVkQ2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKTsKKyAgICAgICAg
TFBDV1NUUiBsb2NhbFBhdGhTdHIgPSBsb2NhbFBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWlu
YXRpb24oKS5kYXRhKCk7CiAgICAgICAgIGlmICh3Y3NsZW4obG9jYWxQYXRoU3RyKSArIDEgPCBN
QVhfUEFUSCkKICAgICAgICAgICAgIHdjc2NweV9zKGZpbGVQYXRoLCBNQVhfUEFUSCwgbG9jYWxQ
YXRoU3RyKTsKICAgICAgICAgZWxzZQpAQCAtOTc3LDcgKzk3Nyw3IEBAIHN0YXRpYyBIR0xPQkFM
IGNyZWF0ZUdsb2JhbEhEcm9wQ29udGVudChjb25zdCBLVVJMJiB1cmwsIFN0cmluZyYgZmlsZU5h
bWUsIFNoYXJlCiAgICAgICAgIFdDSEFSIGV4dGVuc2lvbltNQVhfUEFUSF07CiAgICAgICAgIGlm
ICghOjpHZXRUZW1wUGF0aChXVEZfQVJSQVlfTEVOR1RIKHRlbXBQYXRoKSwgdGVtcFBhdGgpKQog
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIGlmICghOjpQYXRoQXBwZW5kKHRlbXBQYXRo
LCBmaWxlTmFtZS5kZXByZWNhdGVkQ2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSkpCisg
ICAgICAgIGlmICghOjpQYXRoQXBwZW5kKHRlbXBQYXRoLCBmaWxlTmFtZS5jaGFyYWN0ZXJzV2l0
aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgTFBDV1NUUiBmb3VuZEV4dGVuc2lvbiA9IDo6UGF0aEZpbmRFeHRlbnNpb24odGVtcFBhdGgp
OwogICAgICAgICBpZiAoZm91bmRFeHRlbnNpb24pIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9QYXRoV2Fsa2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbi9QYXRoV2Fsa2VyLmNwcAppbmRleCA0YjhiNDY5MzhlNTdkMDI0Y2MyNGQyZmIxY2ZkZmRl
MTRkOGRmZTBiLi44YmE2ZWYyYjQzZTM0MzFhNTBkYWM1NDYwZTUxZjMyM2UxODgwOGYwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGF0aFdhbGtlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1BhdGhXYWxrZXIuY3BwCkBAIC0zMyw3ICszMyw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFBhdGhXYWxrZXI6OlBhdGhXYWxrZXIoY29uc3QgU3Ry
aW5nJiBkaXJlY3RvcnksIGNvbnN0IFN0cmluZyYgcGF0dGVybikKIHsKICAgICBTdHJpbmcgcGF0
aCA9IGRpcmVjdG9yeSArICJcXCIgKyBwYXR0ZXJuOwotICAgIG1faGFuZGxlID0gOjpGaW5kRmly
c3RGaWxlVyhwYXRoLmRlcHJlY2F0ZWRDaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAm
bV9kYXRhKTsKKyAgICBtX2hhbmRsZSA9IDo6RmluZEZpcnN0RmlsZVcocGF0aC5jaGFyYWN0ZXJz
V2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgJm1fZGF0YSk7CiB9CiAKIFBhdGhXYWxrZXI6
On5QYXRoV2Fsa2VyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9T
U0xLZXlHZW5lcmF0b3JXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NTTEtl
eUdlbmVyYXRvcldpbi5jcHAKaW5kZXggYjYzOTM0NDdhYjlmNTk0ZjMwOTk3MDkwZDY3NGY3NjE2
ZGYxMzIyNy4uNDE0Njg1MzE0OTg4ODIxZjdmZWRiZTEwMmUyZWM2N2Q5ZTJjMDMwZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NTTEtleUdlbmVyYXRvcldpbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NTTEtleUdlbmVyYXRvcldpbi5jcHAK
QEAgLTY4LDcgKzY4LDcgQEAgU3RyaW5nIFdlYkNvcmU6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxs
ZW5nZVN0cmluZyh1bnNpZ25lZCBpbmRleCwgY29uc3QgU3RyaW5nJgogICAgICAgICBTdHJpbmcg
bG9jYWxDaGFsbGVuZ2UgPSBjaGFsbGVuZ2U7CiAKICAgICAgICAgLy8gV2luZG93cyBBUEkgd29u
J3Qgd3JpdGUgdG8gb3VyIGJ1ZmZlciwgYWx0aG91Z2ggaXQncyBub3QgZGVjbGFyZWQgd2l0aCBj
b25zdC4KLSAgICAgICAgcmVxdWVzdEluZm8ucHdzekNoYWxsZW5nZVN0cmluZyA9IGNvbnN0X2Nh
c3Q8d2NoYXJfdCo+KGxvY2FsQ2hhbGxlbmdlLmRlcHJlY2F0ZWRDaGFyYWN0ZXJzV2l0aE51bGxU
ZXJtaW5hdGlvbigpKTsKKyAgICAgICAgcmVxdWVzdEluZm8ucHdzekNoYWxsZW5nZVN0cmluZyA9
IGNvbnN0X2Nhc3Q8d2NoYXJfdCo+KGxvY2FsQ2hhbGxlbmdlLmNoYXJhY3RlcnNXaXRoTnVsbFRl
cm1pbmF0aW9uKCkuZGF0YSgpKTsKIAogICAgICAgICBDUllQVF9BTEdPUklUSE1fSURFTlRJRklF
UiBzaWduQWxnbyA9IHsgMCB9OwogICAgICAgICBzaWduQWxnby5wc3pPYmpJZCA9IHN6T0lEX1JT
QV9TSEExUlNBOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1NoYXJl
ZEJ1ZmZlcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2hhcmVkQnVmZmVy
V2luLmNwcAppbmRleCAxNzQyZWJkMWE2NDFkNmE1OGVlMTE1OTEwMDQ5YzM0NWMxNTI4MjcxLi5m
YzcxYmQ3ZDY1Y2EzM2M4YzMwZWM5YWRlNDg0MDg2MmMxYTdlMmE0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vU2hhcmVkQnVmZmVyV2luLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vU2hhcmVkQnVmZmVyV2luLmNwcApAQCAtNDQsNyArNDQsNyBA
QCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gU2hhcmVkQnVmZmVyOjpjcmVhdGVXaXRoQ29udGVu
dHNPZkZpbGUoY29uc3QgU3RyaW5nJiBmaQogICAgICAgICByZXR1cm4gMDsKIAogICAgIFN0cmlu
ZyBudWxsaWZpZWRQYXRoID0gZmlsZVBhdGg7Ci0gICAgSEFORExFIGZpbGVIYW5kbGUgPSBDcmVh
dGVGaWxlVyhudWxsaWZpZWRQYXRoLmRlcHJlY2F0ZWRDaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5h
dGlvbigpLCBHRU5FUklDX1JFQUQsIEZJTEVfU0hBUkVfUkVBRCwgMCwgT1BFTl9FWElTVElORywg
RklMRV9BVFRSSUJVVEVfTk9STUFMLCAwKTsKKyAgICBIQU5ETEUgZmlsZUhhbmRsZSA9IENyZWF0
ZUZpbGVXKG51bGxpZmllZFBhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRh
KCksIEdFTkVSSUNfUkVBRCwgRklMRV9TSEFSRV9SRUFELCAwLCBPUEVOX0VYSVNUSU5HLCBGSUxF
X0FUVFJJQlVURV9OT1JNQUwsIDApOwogICAgIGlmIChmaWxlSGFuZGxlID09IElOVkFMSURfSEFO
RExFX1ZBTFVFKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIG9wZW4gZmlsZSAlcyB0
byBjcmVhdGUgc2hhcmVkIGJ1ZmZlciwgR2V0TGFzdEVycm9yKCkgPSAldSIsIGZpbGVQYXRoLmFz
Y2lpKCkuZGF0YSgpLCBHZXRMYXN0RXJyb3IoKSk7CiAgICAgICAgIHJldHVybiAwOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luY2UvRmlsZVN5c3RlbVdpbkNFLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbmNlL0ZpbGVTeXN0ZW1XaW5DRS5jcHAKaW5kZXgg
ODE2YmVhYTkwZTVjYmNhYWZmZDJiYmNhM2Y2Njg0ZGIyZDI1MGVjMi4uMzc5NzlkNWU0OTliZWJh
MWJlYWYxMmZmODI0YmJlNDY0NTczOGVjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd2luY2UvRmlsZVN5c3RlbVdpbkNFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW5jZS9GaWxlU3lzdGVtV2luQ0UuY3BwCkBAIC01Nyw3ICs1Nyw3IEBAIHN0YXRpYyBz
aXplX3QgcmV2ZXJzZUZpbmRQYXRoU2VwYXJhdG9yKGNvbnN0IFN0cmluZyYgcGF0aCwgdW5zaWdu
ZWQgc3RhcnQgPSBVSU5UCiBzdGF0aWMgYm9vbCBnZXRGaWxlSW5mbyhjb25zdCBTdHJpbmcmIHBh
dGgsIEJZX0hBTkRMRV9GSUxFX0lORk9STUFUSU9OJiBmaWxlSW5mbykKIHsKICAgICBTdHJpbmcg
ZmlsZW5hbWUgPSBwYXRoOwotICAgIEhBTkRMRSBoRmlsZSA9IENyZWF0ZUZpbGUoZmlsZW5hbWUu
ZGVwcmVjYXRlZENoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIEdFTkVSSUNfUkVBRCwg
RklMRV9TSEFSRV9SRUFELCAwCisgICAgSEFORExFIGhGaWxlID0gQ3JlYXRlRmlsZShmaWxlbmFt
ZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgR0VORVJJQ19SRUFELCBG
SUxFX1NIQVJFX1JFQUQsIDAKICAgICAgICAgLCBPUEVOX0VYSVNUSU5HLCBGSUxFX0ZMQUdfTk9f
QlVGRkVSSU5HLCAwKTsKIAogICAgIGlmIChoRmlsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkK
QEAgLTEyNCw3ICsxMjQsNyBAQCBib29sIGdldEZpbGVNZXRhZGF0YShjb25zdCBTdHJpbmcmIHBh
dGgsIEZpbGVNZXRhZGF0YSYgbWV0YWRhdGEpCiBib29sIGZpbGVFeGlzdHMoY29uc3QgU3RyaW5n
JiBwYXRoKSAKIHsKICAgICBTdHJpbmcgZmlsZW5hbWUgPSBwYXRoOwotICAgIEhBTkRMRSBoRmls
ZSA9IENyZWF0ZUZpbGUoZmlsZW5hbWUuZGVwcmVjYXRlZENoYXJhY3RlcnNXaXRoTnVsbFRlcm1p
bmF0aW9uKCksIDAsIEZJTEVfU0hBUkVfUkVBRCB8IEZJTEVfU0hBUkVfV1JJVEUKKyAgICBIQU5E
TEUgaEZpbGUgPSBDcmVhdGVGaWxlKGZpbGVuYW1lLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0
aW9uKCkuZGF0YSgpLCAwLCBGSUxFX1NIQVJFX1JFQUQgfCBGSUxFX1NIQVJFX1dSSVRFCiAgICAg
ICAgICwgMCwgT1BFTl9FWElTVElORywgRklMRV9GTEFHX05PX0JVRkZFUklORywgMCk7CiAKICAg
ICBDbG9zZUhhbmRsZShoRmlsZSk7CkBAIC0xMzUsMTQgKzEzNSwxNCBAQCBib29sIGZpbGVFeGlz
dHMoY29uc3QgU3RyaW5nJiBwYXRoKQogYm9vbCBkZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0
aCkKIHsKICAgICBTdHJpbmcgZmlsZW5hbWUgPSBwYXRoOwotICAgIHJldHVybiAhIURlbGV0ZUZp
bGVXKGZpbGVuYW1lLmRlcHJlY2F0ZWRDaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKTsK
KyAgICByZXR1cm4gISFEZWxldGVGaWxlVyhmaWxlbmFtZS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJt
aW5hdGlvbigpLmRhdGEoKSk7CiB9CiAKIAogYm9vbCBkZWxldGVFbXB0eURpcmVjdG9yeShjb25z
dCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgU3RyaW5nIGZpbGVuYW1lID0gcGF0aDsKLSAgICByZXR1
cm4gISFSZW1vdmVEaXJlY3RvcnlXKGZpbGVuYW1lLmRlcHJlY2F0ZWRDaGFyYWN0ZXJzV2l0aE51
bGxUZXJtaW5hdGlvbigpKTsKKyAgICByZXR1cm4gISFSZW1vdmVEaXJlY3RvcnlXKGZpbGVuYW1l
LmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpKTsKIH0KIAogU3RyaW5nIHBh
dGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYg
Y29tcG9uZW50KQpAQCAtMTgzLDkgKzE4Myw5IEBAIGJvb2wgbWFrZUFsbERpcmVjdG9yaWVzKGNv
bnN0IFN0cmluZyYgcGF0aCkKICAgICB9CiAKICAgICBTdHJpbmcgZm9sZGVyKHBhdGguc3Vic3Ry
aW5nKDAsIGVuZFBvcykpOwotICAgIENyZWF0ZURpcmVjdG9yeShmb2xkZXIuZGVwcmVjYXRlZENo
YXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIDApOworICAgIENyZWF0ZURpcmVjdG9yeShm
b2xkZXIuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksIDApOwogCi0gICAg
RFdPUkQgZmlsZUF0dHIgPSBHZXRGaWxlQXR0cmlidXRlcyhmb2xkZXIuZGVwcmVjYXRlZENoYXJh
Y3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpOworICAgIERXT1JEIGZpbGVBdHRyID0gR2V0Rmls
ZUF0dHJpYnV0ZXMoZm9sZGVyLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgp
KTsKICAgICByZXR1cm4gZmlsZUF0dHIgIT0gMHhGRkZGRkZGRiAmJiAoZmlsZUF0dHIgJiBGSUxF
X0FUVFJJQlVURV9ESVJFQ1RPUlkpOwogfQogCkBAIC0yNDMsNyArMjQzLDcgQEAgU3RyaW5nIG9w
ZW5UZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYsIFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxl
KQogICAgICAgICBwcm9wb3NlZFBhdGggPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoU3RyaW5n
KHRlbXBQYXRoKSwgU3RyaW5nKHRlbXBGaWxlKSk7CiAKICAgICAgICAgLy8gdXNlIENSRUFURV9O
RVcgdG8gYXZvaWQgb3ZlcndyaXRpbmcgYW4gZXhpc3RpbmcgZmlsZSB3aXRoIHRoZSBzYW1lIG5h
bWUKLSAgICAgICAgaGFuZGxlID0gQ3JlYXRlRmlsZShwcm9wb3NlZFBhdGguZGVwcmVjYXRlZENo
YXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIEdFTkVSSUNfUkVBRCB8IEdFTkVSSUNfV1JJ
VEUsIDAsIDAsIENSRUFURV9ORVcsIEZJTEVfQVRUUklCVVRFX05PUk1BTCwgMCk7CisgICAgICAg
IGhhbmRsZSA9IENyZWF0ZUZpbGUocHJvcG9zZWRQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1p
bmF0aW9uKCkuZGF0YSgpLCBHRU5FUklDX1JFQUQgfCBHRU5FUklDX1dSSVRFLCAwLCAwLCBDUkVB
VEVfTkVXLCBGSUxFX0FUVFJJQlVURV9OT1JNQUwsIDApOwogICAgICAgICBpZiAoIWlzSGFuZGxl
VmFsaWQoaGFuZGxlKSAmJiBHZXRMYXN0RXJyb3IoKSA9PSBFUlJPUl9BTFJFQURZX0VYSVNUUykK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0yNzQsNyArMjc0LDcgQEAgUGxhdGZvcm1GaWxl
SGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCiAg
ICAgfQogCiAgICAgU3RyaW5nIGRlc3RpbmF0aW9uID0gcGF0aDsKLSAgICByZXR1cm4gQ3JlYXRl
RmlsZShkZXN0aW5hdGlvbi5kZXByZWNhdGVkQ2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24o
KSwgZGVzaXJlZEFjY2VzcywgMCwgMCwgY3JlYXRpb25EaXNwb3NpdGlvbiwgRklMRV9BVFRSSUJV
VEVfTk9STUFMLCAwKTsKKyAgICByZXR1cm4gQ3JlYXRlRmlsZShkZXN0aW5hdGlvbi5jaGFyYWN0
ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgZGVzaXJlZEFjY2VzcywgMCwgMCwgY3Jl
YXRpb25EaXNwb3NpdGlvbiwgRklMRV9BVFRSSUJVVEVfTk9STUFMLCAwKTsKIH0KIAogdm9pZCBj
bG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbHVnaW5zL3dpbi9QbHVnaW5EYXRhYmFzZVdpbi5jcHAKaW5kZXggMWExNTQ4OTY1ODBmNTli
MWU1YzU3MTYxNzFjNDYzYjk1MGEzMmM1Mi4uMGVjN2UwOTU5OTBkMjM5ZDVjYTk3OWVjNDUwODIw
NzlkNTFhZjI2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy93aW4vUGx1Z2lu
RGF0YWJhc2VXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpbkRh
dGFiYXNlV2luLmNwcApAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgUGx1Z2luRGF0YWJhc2U6Omdl
dFBsdWdpblBhdGhzSW5EaXJlY3RvcmllcyhIYXNoU2V0PFN0cmluZz4mIHBhdGhzKSBjb25zdAog
ICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9wbHVnaW5EaXJl
Y3Rvcmllcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgU3RyaW5nIHBhdHRl
cm4gPSAqaXQgKyAiXFwqIjsKIAotICAgICAgICBoRmluZCA9IEZpbmRGaXJzdEZpbGVXKHBhdHRl
cm4uZGVwcmVjYXRlZENoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksICZmaW5kRmlsZURh
dGEpOworICAgICAgICBoRmluZCA9IEZpbmRGaXJzdEZpbGVXKHBhdHRlcm4uY2hhcmFjdGVyc1dp
dGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksICZmaW5kRmlsZURhdGEpOwogCiAgICAgICAgIGlm
IChoRmluZCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpA
QCAtMjE1LDcgKzIxNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRNb3ppbGxhUGx1Z2luRGly
ZWN0b3JpZXMoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVzKQogICAgICAgICAgICAgSEtFWSBl
eHRlbnNpb25zS2V5OwogCiAgICAgICAgICAgICAvLyBUcnkgb3BlbmluZyB0aGUga2V5Ci0gICAg
ICAgICAgICByZXN1bHQgPSBSZWdPcGVuS2V5RXgoa2V5LCBleHRlbnNpb25zUGF0aC5kZXByZWNh
dGVkQ2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgS0VZX1JFQUQsICZleHRlbnNp
b25zS2V5KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IFJlZ09wZW5LZXlFeChrZXksIGV4dGVuc2lv
bnNQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpLCAwLCBLRVlfUkVB
RCwgJmV4dGVuc2lvbnNLZXkpOwogCiAgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NV
Q0NFU1MpIHsKICAgICAgICAgICAgICAgICAvLyBOb3cgZ2V0IHRoZSBwbHVnaW5zIGRpcmVjdG9y
eQpAQCAtMzA1LDcgKzMwNSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRBZG9iZUFjcm9iYXRQ
bHVnaW5EaXJlY3RvcnkoVmVjdG9yPFN0cmluZz4mIGRpcmVjdG9yaWVzKQogICAgICAgICBEV09S
RCBhY3JvYmF0SW5zdGFsbFBhdGhTaXplID0gc2l6ZW9mKGFjcm9iYXRJbnN0YWxsUGF0aFN0cik7
CiAKICAgICAgICAgU3RyaW5nIGFjcm9iYXRQbHVnaW5LZXlQYXRoID0gIlNvZnR3YXJlXFxBZG9i
ZVxcQWNyb2JhdCBSZWFkZXJcXCIgKyBsYXRlc3RBY3JvYmF0VmVyc2lvblN0cmluZyArICJcXElu
c3RhbGxQYXRoIjsKLSAgICAgICAgcmVzdWx0ID0gZ2V0UmVnaXN0cnlWYWx1ZShIS0VZX0xPQ0FM
X01BQ0hJTkUsIGFjcm9iYXRQbHVnaW5LZXlQYXRoLmRlcHJlY2F0ZWRDaGFyYWN0ZXJzV2l0aE51
bGxUZXJtaW5hdGlvbigpLCAwLCAmdHlwZSwgYWNyb2JhdEluc3RhbGxQYXRoU3RyLCAmYWNyb2Jh
dEluc3RhbGxQYXRoU2l6ZSk7CisgICAgICAgIHJlc3VsdCA9IGdldFJlZ2lzdHJ5VmFsdWUoSEtF
WV9MT0NBTF9NQUNISU5FLCBhY3JvYmF0UGx1Z2luS2V5UGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxU
ZXJtaW5hdGlvbigpLmRhdGEoKSwgMCwgJnR5cGUsIGFjcm9iYXRJbnN0YWxsUGF0aFN0ciwgJmFj
cm9iYXRJbnN0YWxsUGF0aFNpemUpOwogCiAgICAgICAgIGlmIChyZXN1bHQgPT0gRVJST1JfU1VD
Q0VTUykgewogICAgICAgICAgICAgU3RyaW5nIGFjcm9iYXRQbHVnaW5EaXJlY3RvcnkgPSBTdHJp
bmcoYWNyb2JhdEluc3RhbGxQYXRoU3RyLCBhY3JvYmF0SW5zdGFsbFBhdGhTaXplIC8gc2l6ZW9m
KFdDSEFSKSAtIDEpICsgIlxcYnJvd3NlciI7CkBAIC0zNTIsMTAgKzM1MiwxMCBAQCBzdGF0aWMg
aW5saW5lIHZvaWQgYWRkSmF2YVBsdWdpbkRpcmVjdG9yeShWZWN0b3I8U3RyaW5nPiYgZGlyZWN0
b3JpZXMpCiAgICAgICAgIERXT1JEIHVzZU5ld1BsdWdpblNpemU7CiAKICAgICAgICAgU3RyaW5n
IGphdmFQbHVnaW5LZXlQYXRoID0gIlNvZnR3YXJlXFxKYXZhU29mdFxcSmF2YSBQbHVnLWluXFwi
ICsgbGF0ZXN0SmF2YVZlcnNpb25TdHJpbmc7Ci0gICAgICAgIHJlc3VsdCA9IGdldFJlZ2lzdHJ5
VmFsdWUoSEtFWV9MT0NBTF9NQUNISU5FLCBqYXZhUGx1Z2luS2V5UGF0aC5kZXByZWNhdGVkQ2hh
cmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgTCJVc2VOZXdKYXZhUGx1Z2luIiwgJnR5cGUs
ICZ1c2VOZXdQbHVnaW5WYWx1ZSwgJnVzZU5ld1BsdWdpblNpemUpOworICAgICAgICByZXN1bHQg
PSBnZXRSZWdpc3RyeVZhbHVlKEhLRVlfTE9DQUxfTUFDSElORSwgamF2YVBsdWdpbktleVBhdGgu
Y2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksIEwiVXNlTmV3SmF2YVBsdWdp
biIsICZ0eXBlLCAmdXNlTmV3UGx1Z2luVmFsdWUsICZ1c2VOZXdQbHVnaW5TaXplKTsKIAogICAg
ICAgICBpZiAocmVzdWx0ID09IEVSUk9SX1NVQ0NFU1MgJiYgdXNlTmV3UGx1Z2luVmFsdWUgPT0g
MSkgewotICAgICAgICAgICAgcmVzdWx0ID0gZ2V0UmVnaXN0cnlWYWx1ZShIS0VZX0xPQ0FMX01B
Q0hJTkUsIGphdmFQbHVnaW5LZXlQYXRoLmRlcHJlY2F0ZWRDaGFyYWN0ZXJzV2l0aE51bGxUZXJt
aW5hdGlvbigpLCBMIkphdmFIb21lIiwgJnR5cGUsIGphdmFJbnN0YWxsUGF0aFN0ciwgJmphdmFJ
bnN0YWxsUGF0aFNpemUpOworICAgICAgICAgICAgcmVzdWx0ID0gZ2V0UmVnaXN0cnlWYWx1ZShI
S0VZX0xPQ0FMX01BQ0hJTkUsIGphdmFQbHVnaW5LZXlQYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRl
cm1pbmF0aW9uKCkuZGF0YSgpLCBMIkphdmFIb21lIiwgJnR5cGUsIGphdmFJbnN0YWxsUGF0aFN0
ciwgJmphdmFJbnN0YWxsUGF0aFNpemUpOwogICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBFUlJP
Ul9TVUNDRVNTKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIGphdmFQbHVnaW5EaXJlY3Rvcnkg
PSBTdHJpbmcoamF2YUluc3RhbGxQYXRoU3RyLCBqYXZhSW5zdGFsbFBhdGhTaXplIC8gc2l6ZW9m
KFdDSEFSKSAtIDEpICsgIlxcYmluXFxuZXdfcGx1Z2luIjsKICAgICAgICAgICAgICAgICBkaXJl
Y3Rvcmllcy5hcHBlbmQoamF2YVBsdWdpbkRpcmVjdG9yeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5QYWNrYWdlV2luLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsdWdpbnMvd2luL1BsdWdpblBhY2thZ2VXaW4uY3BwCmluZGV4IGZmYTIxNjQ0NWFhMzgyYzRh
ZWVmMDk3MTc3NGYwZDRkNzBhNGJjMjkuLmFiODQ1OWY3NWYzM2VkNGYyMjgzYmRmY2VjY2RkYTUx
MGFjYWJlMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBh
Y2thZ2VXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblBhY2th
Z2VXaW4uY3BwCkBAIC00Nyw3ICs0Nyw3IEBAIHN0YXRpYyBTdHJpbmcgZ2V0VmVyc2lvbkluZm8o
Y29uc3QgTFBWT0lEIHZlcnNpb25JbmZvRGF0YSwgY29uc3QgU3RyaW5nJiBpbmZvKQogICAgIFVJ
TlQgYnVmZmVyTGVuZ3RoOwogICAgIFN0cmluZyBzdWJJbmZvID0gIlxcU3RyaW5nZmlsZUluZm9c
XDA0MDkwNEU0XFwiICsgaW5mbzsKICAgICBib29sIHJldHZhbCA9IFZlclF1ZXJ5VmFsdWVXKHZl
cnNpb25JbmZvRGF0YSwKLSAgICAgICAgY29uc3RfY2FzdDxVQ2hhcio+KHN1YkluZm8uZGVwcmVj
YXRlZENoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpLAorICAgICAgICBjb25zdF9jYXN0
PFVDaGFyKj4oc3ViSW5mby5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSks
CiAgICAgICAgICZidWZmZXIsICZidWZmZXJMZW5ndGgpOwogICAgIGlmICghcmV0dmFsIHx8IGJ1
ZmZlckxlbmd0aCA9PSAwKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CkBAIC0xNjcsMTMgKzE2
NywxMyBAQCB2b2lkIFBsdWdpblBhY2thZ2U6OmRldGVybWluZVF1aXJrcyhjb25zdCBTdHJpbmcm
IG1pbWVUeXBlKQogYm9vbCBQbHVnaW5QYWNrYWdlOjpmZXRjaEluZm8oKQogewogICAgIERXT1JE
IHZlcnNpb25JbmZvU2l6ZSwgemVyb0hhbmRsZTsKLSAgICB2ZXJzaW9uSW5mb1NpemUgPSBHZXRG
aWxlVmVyc2lvbkluZm9TaXplVyhjb25zdF9jYXN0PFVDaGFyKj4obV9wYXRoLmRlcHJlY2F0ZWRD
aGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpKSwgJnplcm9IYW5kbGUpOworICAgIHZlcnNp
b25JbmZvU2l6ZSA9IEdldEZpbGVWZXJzaW9uSW5mb1NpemVXKGNvbnN0X2Nhc3Q8VUNoYXIqPiht
X3BhdGguY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCkpLCAmemVyb0hhbmRs
ZSk7CiAgICAgaWYgKHZlcnNpb25JbmZvU2l6ZSA9PSAwKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBPd25BcnJheVB0cjxjaGFyPiB2ZXJzaW9uSW5mb0RhdGEgPSBhZG9wdEFycmF5UHRy
KG5ldyBjaGFyW3ZlcnNpb25JbmZvU2l6ZV0pOwogCi0gICAgaWYgKCFHZXRGaWxlVmVyc2lvbklu
Zm9XKGNvbnN0X2Nhc3Q8VUNoYXIqPihtX3BhdGguZGVwcmVjYXRlZENoYXJhY3RlcnNXaXRoTnVs
bFRlcm1pbmF0aW9uKCkpLAorICAgIGlmICghR2V0RmlsZVZlcnNpb25JbmZvVyhjb25zdF9jYXN0
PFVDaGFyKj4obV9wYXRoLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkuZGF0YSgpKSwK
ICAgICAgICAgICAgIDAsIHZlcnNpb25JbmZvU2l6ZSwgdmVyc2lvbkluZm9EYXRhLmdldCgpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yMzgsNyArMjM4LDcgQEAgYm9vbCBQbHVnaW5Q
YWNrYWdlOjpsb2FkKCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSBlbHNlIHsKICNpZiBP
UyhXSU5DRSkKLSAgICAgICAgbV9tb2R1bGUgPSA6OkxvYWRMaWJyYXJ5VyhtX3BhdGguZGVwcmVj
YXRlZENoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpOworICAgICAgICBtX21vZHVsZSA9
IDo6TG9hZExpYnJhcnlXKG1fcGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRh
dGEoKSk7CiAjZWxzZQogICAgICAgICBXQ0hBUiBjdXJyZW50UGF0aFtNQVhfUEFUSF07CiAKQEAg
LTI0NywxMSArMjQ3LDExIEBAIGJvb2wgUGx1Z2luUGFja2FnZTo6bG9hZCgpCiAKICAgICAgICAg
U3RyaW5nIHBhdGggPSBtX3BhdGguc3Vic3RyaW5nKDAsIG1fcGF0aC5yZXZlcnNlRmluZCgnXFwn
KSk7CiAKLSAgICAgICAgaWYgKCE6OlNldEN1cnJlbnREaXJlY3RvcnlXKHBhdGguZGVwcmVjYXRl
ZENoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCkpKQorICAgICAgICBpZiAoITo6U2V0Q3Vy
cmVudERpcmVjdG9yeVcocGF0aC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEo
KSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgLy8gTG9hZCB0aGUgbGli
cmFyeQotICAgICAgICBtX21vZHVsZSA9IDo6TG9hZExpYnJhcnlFeFcobV9wYXRoLmRlcHJlY2F0
ZWRDaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAwLCBMT0FEX1dJVEhfQUxURVJFRF9T
RUFSQ0hfUEFUSCk7CisgICAgICAgIG1fbW9kdWxlID0gOjpMb2FkTGlicmFyeUV4VyhtX3BhdGgu
Y2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKS5kYXRhKCksIDAsIExPQURfV0lUSF9BTFRF
UkVEX1NFQVJDSF9QQVRIKTsKIAogICAgICAgICBpZiAoITo6U2V0Q3VycmVudERpcmVjdG9yeVco
Y3VycmVudFBhdGgpKSB7CiAgICAgICAgICAgICBpZiAobV9tb2R1bGUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbHVnaW5zL3dpbi9QbHVnaW5WaWV3V2luLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4uY3BwCmluZGV4IDA2NTk3OTM0NjRhZjEyNzBj
OTlmYzMxYmE0MjljZjE1ZGVlN2ZjMDYuLmZhZTNjNDQxNTllNDg3OGVmYjkzMWRjOWQ4MmQzNTRj
YmI1ZDM5ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZp
ZXdXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdpbnMvd2luL1BsdWdpblZpZXdXaW4u
Y3BwCkBAIC04OTcsMTMgKzg5NywxMyBAQCBOUEVycm9yIFBsdWdpblZpZXc6OmhhbmRsZVBvc3RS
ZWFkRmlsZShWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgdWludDMyX3QgbGVuLCBjb25zdAogCiAgICAg
Ly8gR2V0IGZpbGUgaW5mbwogICAgIFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgYXR0cnM7Ci0g
ICAgaWYgKEdldEZpbGVBdHRyaWJ1dGVzRXhXKGZpbGVuYW1lLmRlcHJlY2F0ZWRDaGFyYWN0ZXJz
V2l0aE51bGxUZXJtaW5hdGlvbigpLCBHZXRGaWxlRXhJbmZvU3RhbmRhcmQsICZhdHRycykgPT0g
MCkKKyAgICBpZiAoR2V0RmlsZUF0dHJpYnV0ZXNFeFcoZmlsZW5hbWUuY2hhcmFjdGVyc1dpdGhO
dWxsVGVybWluYXRpb24oKS5kYXRhKCksIEdldEZpbGVFeEluZm9TdGFuZGFyZCwgJmF0dHJzKSA9
PSAwKQogICAgICAgICByZXR1cm4gTlBFUlJfRklMRV9OT1RfRk9VTkQ7CiAKICAgICBpZiAoYXR0
cnMuZHdGaWxlQXR0cmlidXRlcyAmIEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWSkKICAgICAgICAg
cmV0dXJuIE5QRVJSX0ZJTEVfTk9UX0ZPVU5EOwogCi0gICAgSEFORExFIGZpbGVIYW5kbGUgPSBD
cmVhdGVGaWxlVyhmaWxlbmFtZS5kZXByZWNhdGVkQ2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRp
b24oKSwgRklMRV9SRUFEX0RBVEEsIEZJTEVfU0hBUkVfUkVBRCwgMCwgT1BFTl9FWElTVElORywg
MCwgMCk7CisgICAgSEFORExFIGZpbGVIYW5kbGUgPSBDcmVhdGVGaWxlVyhmaWxlbmFtZS5jaGFy
YWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLmRhdGEoKSwgRklMRV9SRUFEX0RBVEEsIEZJTEVf
U0hBUkVfUkVBRCwgMCwgT1BFTl9FWElTVElORywgMCwgMCk7CiAgICAgCiAgICAgaWYgKGZpbGVI
YW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCiAgICAgICAgIHJldHVybiBOUEVSUl9GSUxF
X05PVF9GT1VORDsK
</data>
<flag name="review"
          id="227223"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>