<?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>179633</bug_id>
          
          <creation_ts>2017-11-13 13:48:21 -0800</creation_ts>
          <short_desc>[css-grid] Refactoring and new namespace with grid related utility functions</short_desc>
          <delta_ts>2017-11-22 15:47:19 -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>New Bugs</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Javier Fernandez">jfernandez</reporter>
          <assigned_to name="Javier Fernandez">jfernandez</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>jfernandez</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>rego</cc>
    
    <cc>svillar</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1371056</commentid>
    <comment_count>0</comment_count>
    <who name="Javier Fernandez">jfernandez</who>
    <bug_when>2017-11-13 13:48:21 -0800</bug_when>
    <thetext>[css-grid] Refactoring and new Grid utility class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1371057</commentid>
    <comment_count>1</comment_count>
      <attachid>326794</attachid>
    <who name="Javier Fernandez">jfernandez</who>
    <bug_when>2017-11-13 13:49:59 -0800</bug_when>
    <thetext>Created attachment 326794
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1371059</commentid>
    <comment_count>2</comment_count>
      <attachid>326795</attachid>
    <who name="Javier Fernandez">jfernandez</who>
    <bug_when>2017-11-13 13:55:08 -0800</bug_when>
    <thetext>Created attachment 326795
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373830</commentid>
    <comment_count>3</comment_count>
      <attachid>327373</attachid>
    <who name="Javier Fernandez">jfernandez</who>
    <bug_when>2017-11-20 14:12:04 -0800</bug_when>
    <thetext>Created attachment 327373
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1373861</commentid>
    <comment_count>4</comment_count>
      <attachid>327373</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-11-20 16:22:48 -0800</bug_when>
    <thetext>Comment on attachment 327373
Patch

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

The name &quot;Utils&quot; goes against WebKit programming tradition; we try to steer clear of the concept &quot;utilities&quot; and we also don’t abbreviate words with things like &quot;utils&quot; if we can avoid it. It’s also not best style to use a class just as a namespace for some functions. I suggest just naming this GridLayout, or if that really seems wrong, GridLayoutFunctions (as with LengthFunctions). And we should use a namespace rather than a class.

Otherwise this seems fine, but please upload a version that builds.

&gt; Source/WebCore/rendering/GridLayoutUtils.cpp:25
&gt; + */
&gt; +#include &quot;config.h&quot;

Missing blank line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374000</commentid>
    <comment_count>5</comment_count>
      <attachid>327406</attachid>
    <who name="Javier Fernandez">jfernandez</who>
    <bug_when>2017-11-21 06:33:35 -0800</bug_when>
    <thetext>Created attachment 327406
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374013</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-11-21 07:09:30 -0800</bug_when>
    <thetext>&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:1335:122: error: invalid use of incomplete type ‘class WebCore::LayoutState’

This means RenderBlockLineLayout.cpp is missing include of &quot;LayoutState.h&quot;, hidden by unified build file grouping.

&gt; Source/WebCore/rendering/RootInlineBox.cpp:339:44: error: invalid use of incomplete type ‘class WebCore::LayoutState’

Same problem in RootInlineBox.cpp.

If you add those two includes to your patch, should fix the build errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374014</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-11-21 07:10:07 -0800</bug_when>
    <thetext>Or you could check in a separate patch with just those includes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374015</commentid>
    <comment_count>8</comment_count>
    <who name="Javier Fernandez">jfernandez</who>
    <bug_when>2017-11-21 07:17:30 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #7)
&gt; Or you could check in a separate patch with just those includes.

Adding an include to LayoutState.h in the mentioned files indeed solves the compilation errors. However, I wonder why only fail with my patch. Would adding a new file to the Source.txt file cause such errors ? Should we expect more like that in the future ? Is expectable that we will have to add additional headers as we made changes in the Source.txt, which may lead to changes in the compilation units ?

I can add those extra includes in this patch, but such changes seems totally unrelated to the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374016</commentid>
    <comment_count>9</comment_count>
      <attachid>327409</attachid>
    <who name="Javier Fernandez">jfernandez</who>
    <bug_when>2017-11-21 07:21:45 -0800</bug_when>
    <thetext>Created attachment 327409
Patch

Added additional header include directive to fix unified build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374018</commentid>
    <comment_count>10</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-11-21 07:53:09 -0800</bug_when>
    <thetext>Yes, adding a new source file changes the groupings of which files build together, so failures like this are expected. Of course, these missing includes were preexisting bugs that could have been mitigated if a tool like include-what-you-use was integrated with the style checker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374027</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-11-21 08:43:05 -0800</bug_when>
    <thetext>Windows build shows additional errors of the same type due to the unified build.

rendering/RenderMediaControls.cpp(45): error C2065: &apos;MediaSliderThumb&apos;: undeclared identifier
rendering/RenderMediaControls.cpp(48): error C2065: &apos;MediaVolumeSliderThumb&apos;: undeclared identifier
rendering/RenderMediaControls.cpp(51): error C2065: &apos;MediaFullScreenVolumeSliderThumb&apos;: undeclared identifier

In this case the missing header is MediaControlElementTypes.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374268</commentid>
    <comment_count>12</comment_count>
      <attachid>327469</attachid>
    <who name="Javier Fernandez">jfernandez</who>
    <bug_when>2017-11-22 12:36:03 -0800</bug_when>
    <thetext>Created attachment 327469
Patch

Added additional header include directive to fix unified build on win.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374300</commentid>
    <comment_count>13</comment_count>
      <attachid>327469</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-11-22 15:46:19 -0800</bug_when>
    <thetext>Comment on attachment 327469
Patch

Clearing flags on attachment: 327469

Committed r225104: &lt;https://trac.webkit.org/changeset/225104&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374301</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-11-22 15:46:20 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374302</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-11-22 15:47:19 -0800</bug_when>
    <thetext>&lt;rdar://problem/35670404&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326794</attachid>
            <date>2017-11-13 13:49:59 -0800</date>
            <delta_ts>2017-11-13 13:55:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179633-20171113224958.patch</filename>
            <type>text/plain</type>
            <size>28867</size>
            <attacher name="Javier Fernandez">jfernandez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI0NzUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDIzOWQ2OTllNjA1
ODZhZmZiZDZiZmMxOGRiNTdhN2NiZWNhZmYxMDguLjc5OTM4NWI2MGM1MWZmMjA2YTk3YjAwYzU2
MzhhMTZlYzNkZGRhYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xNzIzLDYgKzE3MjMsNyBAQCByZW5k
ZXJpbmcvRmxleGlibGVCb3hBbGdvcml0aG0uY3BwCiByZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91
dC5jcHAKIHJlbmRlcmluZy9GbG9hdGluZ09iamVjdHMuY3BwCiByZW5kZXJpbmcvR3JpZC5jcHAK
K3JlbmRlcmluZy9HcmlkTGF5b3V0VXRpbHMuY3BwCiByZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5n
QWxnb3JpdGhtLmNwcAogcmVuZGVyaW5nL0hpdFRlc3RMb2NhdGlvbi5jcHAKIHJlbmRlcmluZy9I
aXRUZXN0UmVzdWx0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGY0OTBlMGEwYTZhOTYyNzNjOTY3OWQ3OWNlODc4NTViMWY1
YmRkZDIuLmYxMDZiZWI1ZjYwNGE0MjU4MTFkODNhOWQ2NTMwZDVkZTI3ZDk5ZGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEw
NDI0LDYgKzEwNDI0LDggQEAKIAkJOUJGOUE4N0UxNjQ4REQyRjAwMUM2QjIzIC8qIEpTSFRNTEZv
cm1Db250cm9sc0NvbGxlY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTlCRjlBODdGMTY0OEREMkYwMDFDNkIyMyAvKiBKU0hUTUxGb3JtQ29udHJv
bHNDb2xsZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSFRNTEZv
cm1Db250cm9sc0NvbGxlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUQ2
MzgwMEYxQUYxNkUxNjAwMzFBMTVDIC8qIFN0eWxlU2VsZkFsaWdubWVudERhdGEuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVTZWxmQWxpZ25tZW50RGF0YS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5REE0MkE5NjFGQkEzOUYwMDBDMEU4NDIgLyogR3Jp
ZExheW91dFV0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyaWRMYXlv
dXRVdGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5REE0MkE5ODFGQkEzOUYx
MDBDMEU4NDIgLyogR3JpZExheW91dFV0aWxzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEdyaWRMYXlvdXRVdGlscy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTlEQUM3QzUyMUFGMkNBQTEwMDQzN0M0NCAvKiBDU1NDb250ZW50RGlzdHJpYnV0aW9u
VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQ29udGVu
dERpc3RyaWJ1dGlvblZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOURB
QzdDNTMxQUYyQ0FBMTAwNDM3QzQ0IC8qIENTU0NvbnRlbnREaXN0cmlidXRpb25WYWx1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NDb250ZW50RGlzdHJpYnV0aW9uVmFs
dWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOURBQzdDNTYxQUYyQ0I2NDAwNDM3
QzQ0IC8qIFN0eWxlQ29udGVudEFsaWdubWVudERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU3R5bGVDb250ZW50QWxpZ25tZW50RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjQ3NjgsNiArMjQ3NzAsOCBAQAogCQkJCTkzNUM0Nzc0MDlBQzREOEQw
MEE2QUFCNCAvKiBHYXBSZWN0cy5oICovLAogCQkJCUUxMTJGNDcwMUUzQTg1RjIwMEQ2Q0RGRCAv
KiBHcmlkLmNwcCAqLywKIAkJCQlFMTEyRjQ2RjFFM0E4NUQ4MDBENkNERkQgLyogR3JpZC5oICov
LAorCQkJCTlEQTQyQTk4MUZCQTM5RjEwMEMwRTg0MiAvKiBHcmlkTGF5b3V0VXRpbHMuY3BwICov
LAorCQkJCTlEQTQyQTk2MUZCQTM5RjAwMEMwRTg0MiAvKiBHcmlkTGF5b3V0VXRpbHMuaCAqLywK
IAkJCQlFMTJERTcxNTFFNEI3NDg3MDBGOUFDQ0YgLyogR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGht
LmNwcCAqLywKIAkJCQlFMTJERTcxNjFFNEI3NDg3MDBGOUFDQ0YgLyogR3JpZFRyYWNrU2l6aW5n
QWxnb3JpdGhtLmggKi8sCiAJCQkJNDk2OUIwRjAxM0QwQjMzRjAwREYzNTIxIC8qIEhpdFRlc3Rp
bmdUcmFuc2Zvcm1TdGF0ZS5jcHAgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvR3JpZExheW91dFV0aWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Hcmlk
TGF5b3V0VXRpbHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFiMDUwOTE2ZDVkNTdiYmU5YWM5NzI5Y2QwNGM2
YTFiNTU0ODFjMWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
R3JpZExheW91dFV0aWxzLmNwcApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3JpZExheW91dFV0aWxzLmgiCisK
KyNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitM
YXlvdXRVbml0IEdyaWRMYXlvdXRVdGlsczo6Y29tcHV0ZU1hcmdpbkxvZ2ljYWxTaXplRm9yQ2hp
bGQoY29uc3QgUmVuZGVyR3JpZCYgZ3JpZCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVj
dGlvbiwgY29uc3QgUmVuZGVyQm94JiBjaGlsZCkKK3sKKyAgICBpZiAoIWNoaWxkLnN0eWxlKCku
aGFzTWFyZ2luKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgTGF5b3V0VW5pdCBtYXJnaW5T
dGFydDsKKyAgICBMYXlvdXRVbml0IG1hcmdpbkVuZDsKKyAgICBpZiAoZGlyZWN0aW9uID09IEZv
ckNvbHVtbnMpCisgICAgICAgIGNoaWxkLmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25NYXJnaW5zKGdy
aWQsIGNoaWxkLmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnRJbkZyYWdtZW50
KG51bGxwdHIpLCBjaGlsZC5sb2dpY2FsV2lkdGgoKSwgbWFyZ2luU3RhcnQsIG1hcmdpbkVuZCk7
CisgICAgZWxzZQorICAgICAgICBjaGlsZC5jb21wdXRlQmxvY2tEaXJlY3Rpb25NYXJnaW5zKGdy
aWQsIG1hcmdpblN0YXJ0LCBtYXJnaW5FbmQpOworCisgICAgcmV0dXJuIG1hcmdpblN0YXJ0ICsg
bWFyZ2luRW5kOworfQorCitMYXlvdXRVbml0IEdyaWRMYXlvdXRVdGlsczo6bWFyZ2luTG9naWNh
bFNpemVGb3JDaGlsZChjb25zdCBSZW5kZXJHcmlkJiBncmlkLCBHcmlkVHJhY2tTaXppbmdEaXJl
Y3Rpb24gZGlyZWN0aW9uLCBjb25zdCBSZW5kZXJCb3gmIGNoaWxkKQoreworICAgIGlmIChjaGls
ZC5uZWVkc0xheW91dCgpKQorICAgICAgICByZXR1cm4gY29tcHV0ZU1hcmdpbkxvZ2ljYWxTaXpl
Rm9yQ2hpbGQoZ3JpZCwgZGlyZWN0aW9uLCBjaGlsZCk7CisgICAgcmV0dXJuIGZsb3dBd2FyZURp
cmVjdGlvbkZvckNoaWxkKGdyaWQsIGNoaWxkLCBkaXJlY3Rpb24pID09IEZvckNvbHVtbnMgPyBj
aGlsZC5tYXJnaW5Mb2dpY2FsV2lkdGgoKSA6IGNoaWxkLm1hcmdpbkxvZ2ljYWxIZWlnaHQoKTsK
K30KKworYm9vbCBHcmlkTGF5b3V0VXRpbHM6OmlzT3J0aG9nb25hbENoaWxkKGNvbnN0IFJlbmRl
ckdyaWQmIGdyaWQsIGNvbnN0IFJlbmRlckJveCYgY2hpbGQpCit7CisgICAgcmV0dXJuIGNoaWxk
LmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgIT0gZ3JpZC5pc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpOworfQorCitHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gR3JpZExheW91dFV0aWxzOjpmbG93
QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChjb25zdCBSZW5kZXJHcmlkJiBncmlkLCBjb25zdCBSZW5k
ZXJCb3gmIGNoaWxkLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAg
IHJldHVybiAhaXNPcnRob2dvbmFsQ2hpbGQoZ3JpZCwgY2hpbGQpID8gZGlyZWN0aW9uIDogKGRp
cmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gRm9yUm93cyA6IEZvckNvbHVtbnMpOworfQorCit9IC8v
IG5hbWVzcGFjZSBibGluawpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dy
aWRMYXlvdXRVdGlscy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRMYXlvdXRVdGls
cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmQ5ODkwNzQ1Mzg3YWQ2NTYzMmViODU4ZjA5NWRkZGI2MDY0MjQwMDgK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZExheW91dFV0
aWxzLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEg
Uy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJMYXlvdXRVbml0LmgiCisjaW5jbHVkZSAiUmVuZGVyR3JpZC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyaWRMYXlvdXRVdGlscyB7CitwdWJsaWM6
CisgICAgc3RhdGljIExheW91dFVuaXQgY29tcHV0ZU1hcmdpbkxvZ2ljYWxTaXplRm9yQ2hpbGQo
Y29uc3QgUmVuZGVyR3JpZCYsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiwgY29uc3QgUmVuZGVy
Qm94Jik7CisgICAgc3RhdGljIExheW91dFVuaXQgbWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZChj
b25zdCBSZW5kZXJHcmlkJiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uLCBjb25zdCBSZW5kZXJC
b3gmKTsKKyAgICBzdGF0aWMgYm9vbCBpc09ydGhvZ29uYWxDaGlsZChjb25zdCBSZW5kZXJHcmlk
JiwgY29uc3QgUmVuZGVyQm94Jik7CisgICAgc3RhdGljIEdyaWRUcmFja1NpemluZ0RpcmVjdGlv
biBmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChjb25zdCBSZW5kZXJHcmlkJiwgY29uc3QgUmVu
ZGVyQm94JiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uKTsKK307CisKK30gLy8gbmFtZXNwYWNl
IGJsaW5rCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkVHJhY2tT
aXppbmdBbGdvcml0aG0uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1Np
emluZ0FsZ29yaXRobS5jcHAKaW5kZXggMjk2OWVkZTRhN2E3Y2U4MjAwOTVlN2M1MmNmYmIxNTYy
YThmN2Q3NC4uMjEyYzYzZmM3YTY5NTJhZTRiMmU1MDhhNjI3MGYyZDRjMGM4YTU0YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRo
bS5jcHAKQEAgLTExMCwzMiArMTEwLDExIEBAIHN0YXRpYyB2b2lkIHNldE92ZXJyaWRlQ29udGFp
bmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkLCBHcmlkCiAgICAg
ICAgIGNoaWxkLnNldE92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQo
c2l6ZSk7CiB9CiAKLXN0YXRpYyBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZmxvd0F3YXJlRGly
ZWN0aW9uRm9yQ2hpbGQoY29uc3QgUmVuZGVyR3JpZCogZ3JpZCwgY29uc3QgUmVuZGVyQm94JiBj
aGlsZCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLSAgICBBU1NFUlQo
Z3JpZCk7Ci0gICAgcmV0dXJuICFncmlkLT5pc09ydGhvZ29uYWxDaGlsZChjaGlsZCkgPyBkaXJl
Y3Rpb24gOiAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyBGb3JSb3dzIDogRm9yQ29sdW1ucyk7
Ci19Ci0KIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IG92ZXJyaWRlQ29udGFpbmlu
Z0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBHcmlkVHJh
Y2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIHJldHVybiBkaXJlY3Rpb24gPT0g
Rm9yQ29sdW1ucyA/IGNoaWxkLm92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxX
aWR0aCgpIDogY2hpbGQub3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdo
dCgpOwogfQogCi1zdGF0aWMgTGF5b3V0VW5pdCBjb21wdXRlTWFyZ2luTG9naWNhbFNpemVGb3JD
aGlsZChHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBSZW5kZXJHcmlk
JiByZW5kZXJHcmlkLCBjb25zdCBSZW5kZXJCb3gmIGNoaWxkKQotewotICAgIGlmICghY2hpbGQu
c3R5bGUoKS5oYXNNYXJnaW4oKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBMYXlvdXRVbml0
IG1hcmdpblN0YXJ0OwotICAgIExheW91dFVuaXQgbWFyZ2luRW5kOwotICAgIGlmIChkaXJlY3Rp
b24gPT0gRm9yQ29sdW1ucykKLSAgICAgICAgY2hpbGQuY29tcHV0ZUlubGluZURpcmVjdGlvbk1h
cmdpbnMocmVuZGVyR3JpZCwgY2hpbGQuY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29u
dGVudEluRnJhZ21lbnQobnVsbHB0ciksIGNoaWxkLmxvZ2ljYWxXaWR0aCgpLCBtYXJnaW5TdGFy
dCwgbWFyZ2luRW5kKTsKLSAgICBlbHNlCi0gICAgICAgIGNoaWxkLmNvbXB1dGVCbG9ja0RpcmVj
dGlvbk1hcmdpbnMocmVuZGVyR3JpZCwgbWFyZ2luU3RhcnQsIG1hcmdpbkVuZCk7Ci0KLSAgICBy
ZXR1cm4gbWFyZ2luU3RhcnQgKyBtYXJnaW5FbmQ7Ci19Ci0KIC8vIEZJWE1FOiB3ZSBib3Jyb3dl
ZCB0aGlzIGZyb20gUmVuZGVyQmxvY2suIFdlIGNhbm5vdCBjYWxsIGl0IGZyb20gaGVyZSBiZWNh
dXNlIGl0J3MgcHJvdGVjdGVkIGZvciBSZW5kZXJPYmplY3RzLgogc3RhdGljIExheW91dFVuaXQg
bWFyZ2luSW50cmluc2ljTG9naWNhbFdpZHRoRm9yQ2hpbGQoY29uc3QgUmVuZGVyR3JpZCogcmVu
ZGVyR3JpZCwgUmVuZGVyQm94JiBjaGlsZCkKIHsKQEAgLTU2NCw3ICs1NDMsNyBAQCB2b2lkIEdy
aWRUcmFja1NpemluZ0FsZ29yaXRobTo6ZGlzdHJpYnV0ZVNwYWNlVG9UcmFja3MoVmVjdG9yPEdy
aWRUcmFjayo+JiB0cmFjawogCiBMYXlvdXRVbml0IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6
YXNzdW1lZFJvd3NTaXplRm9yT3J0aG9nb25hbENoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQp
IGNvbnN0CiB7Ci0gICAgQVNTRVJUKG1fcmVuZGVyR3JpZC0+aXNPcnRob2dvbmFsQ2hpbGQoY2hp
bGQpKTsKKyAgICBBU1NFUlQoR3JpZExheW91dFV0aWxzOjppc09ydGhvZ29uYWxDaGlsZCgqbV9y
ZW5kZXJHcmlkLCBjaGlsZCkpOwogICAgIGNvbnN0IEdyaWRTcGFuJiBzcGFuID0gbV9ncmlkLmdy
aWRJdGVtU3BhbihjaGlsZCwgRm9yUm93cyk7CiAgICAgTGF5b3V0VW5pdCBncmlkQXJlYVNpemU7
CiAgICAgYm9vbCBncmlkQXJlYUlzSW5kZWZpbml0ZSA9IGZhbHNlOwpAQCAtNzIyLDcgKzcwMSw3
IEBAIHZvaWQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpjb21wdXRlR3JpZENvbnRhaW5lcklu
dHJpbnNpY1NpemVzKCkKIC8vIEdyaWRUcmFja1NpemluZ0FsZ29yaXRobVN0cmF0ZWd5LgogTGF5
b3V0VW5pdCBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG1TdHJhdGVneTo6bG9naWNhbEhlaWdodEZv
ckNoaWxkKFJlbmRlckJveCYgY2hpbGQpIGNvbnN0CiB7Ci0gICAgR3JpZFRyYWNrU2l6aW5nRGly
ZWN0aW9uIGNoaWxkQmxvY2tEaXJlY3Rpb24gPSBmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChy
ZW5kZXJHcmlkKCksIGNoaWxkLCBGb3JSb3dzKTsKKyAgICBHcmlkVHJhY2tTaXppbmdEaXJlY3Rp
b24gY2hpbGRCbG9ja0RpcmVjdGlvbiA9IEdyaWRMYXlvdXRVdGlsczo6Zmxvd0F3YXJlRGlyZWN0
aW9uRm9yQ2hpbGQoKnJlbmRlckdyaWQoKSwgY2hpbGQsIEZvclJvd3MpOwogICAgIC8vIElmIHxj
aGlsZHwgaGFzIGEgcmVsYXRpdmUgbG9naWNhbCBoZWlnaHQsIHdlIHNob3VsZG4ndCBsZXQgaXQg
b3ZlcnJpZGUgaXRzIGludHJpbnNpYyBoZWlnaHQsIHdoaWNoIGlzCiAgICAgLy8gd2hhdCB3ZSBh
cmUgaW50ZXJlc3RlZCBpbiBoZXJlLiBUaHVzIHdlIG5lZWQgdG8gc2V0IHRoZSBibG9jay1heGlz
IG92ZXJyaWRlIHNpemUgdG8gLTEgKG5vIHBvc3NpYmxlIHJlc29sdXRpb24pLgogICAgIGlmIChz
aG91bGRDbGVhck92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChjaGls
ZCwgRm9yUm93cykpIHsKQEAgLTczNSwxNyArNzE0LDE2IEBAIExheW91dFVuaXQgR3JpZFRyYWNr
U2l6aW5nQWxnb3JpdGhtU3RyYXRlZ3k6OmxvZ2ljYWxIZWlnaHRGb3JDaGlsZChSZW5kZXJCb3gm
IGNoCiAgICAgICAgIGNoaWxkLmNsZWFyT3ZlcnJpZGVMb2dpY2FsQ29udGVudEhlaWdodCgpOwog
CiAgICAgY2hpbGQubGF5b3V0SWZOZWVkZWQoKTsKLSAgICByZXR1cm4gY2hpbGQubG9naWNhbEhl
aWdodCgpICsgY2hpbGQubWFyZ2luTG9naWNhbEhlaWdodCgpOworICAgIHJldHVybiBjaGlsZC5s
b2dpY2FsSGVpZ2h0KCkgKyBHcmlkTGF5b3V0VXRpbHM6Om1hcmdpbkxvZ2ljYWxTaXplRm9yQ2hp
bGQoKnJlbmRlckdyaWQoKSwgY2hpbGRCbG9ja0RpcmVjdGlvbiwgY2hpbGQpOwogfQogCiBMYXlv
dXRVbml0IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobVN0cmF0ZWd5OjptaW5Db250ZW50Rm9yQ2hp
bGQoUmVuZGVyQm94JiBjaGlsZCkgY29uc3QKIHsKLSAgICBHcmlkVHJhY2tTaXppbmdEaXJlY3Rp
b24gY2hpbGRJbmxpbmVEaXJlY3Rpb24gPSBmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChyZW5k
ZXJHcmlkKCksIGNoaWxkLCBGb3JDb2x1bW5zKTsKKyAgICBHcmlkVHJhY2tTaXppbmdEaXJlY3Rp
b24gY2hpbGRJbmxpbmVEaXJlY3Rpb24gPSBHcmlkTGF5b3V0VXRpbHM6OmZsb3dBd2FyZURpcmVj
dGlvbkZvckNoaWxkKCpyZW5kZXJHcmlkKCksIGNoaWxkLCBGb3JDb2x1bW5zKTsKICAgICBpZiAo
ZGlyZWN0aW9uKCkgPT0gY2hpbGRJbmxpbmVEaXJlY3Rpb24pIHsKICAgICAgICAgLy8gRklYTUU6
IEl0J3MgdW5jbGVhciBpZiB3ZSBzaG91bGQgcmV0dXJuIHRoZSBpbnRyaW5zaWMgd2lkdGggb3Ig
dGhlIHByZWZlcnJlZCB3aWR0aC4KICAgICAgICAgLy8gU2VlIGh0dHA6Ly9saXN0cy53My5vcmcv
QXJjaGl2ZXMvUHVibGljL3d3dy1zdHlsZS8yMDEzSmFuLzAyNDUuaHRtbAotICAgICAgICBMYXlv
dXRVbml0IG1hcmdpbkxvZ2ljYWxXaWR0aCA9IGNoaWxkLm5lZWRzTGF5b3V0KCkgPyBjb21wdXRl
TWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZChjaGlsZElubGluZURpcmVjdGlvbiwgKnJlbmRlckdy
aWQoKSwgY2hpbGQpIDogY2hpbGQubWFyZ2luTG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIHJldHVy
biBjaGlsZC5taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSArIG1hcmdpbkxvZ2ljYWxXaWR0aDsK
KyAgICAgICAgcmV0dXJuIGNoaWxkLm1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpICsgR3JpZExh
eW91dFV0aWxzOjptYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKCpyZW5kZXJHcmlkKCksIGNoaWxk
SW5saW5lRGlyZWN0aW9uLCBjaGlsZCk7CiAgICAgfQogCiAgICAgaWYgKHVwZGF0ZU92ZXJyaWRl
Q29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChjaGlsZCwgY2hpbGRJbmxpbmVEaXJl
Y3Rpb24pKQpAQCAtNzU1LDEyICs3MzMsMTEgQEAgTGF5b3V0VW5pdCBHcmlkVHJhY2tTaXppbmdB
bGdvcml0aG1TdHJhdGVneTo6bWluQ29udGVudEZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQKIAog
TGF5b3V0VW5pdCBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG1TdHJhdGVneTo6bWF4Q29udGVudEZv
ckNoaWxkKFJlbmRlckJveCYgY2hpbGQpIGNvbnN0CiB7Ci0gICAgR3JpZFRyYWNrU2l6aW5nRGly
ZWN0aW9uIGNoaWxkSW5saW5lRGlyZWN0aW9uID0gZmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQo
cmVuZGVyR3JpZCgpLCBjaGlsZCwgRm9yQ29sdW1ucyk7CisgICAgR3JpZFRyYWNrU2l6aW5nRGly
ZWN0aW9uIGNoaWxkSW5saW5lRGlyZWN0aW9uID0gR3JpZExheW91dFV0aWxzOjpmbG93QXdhcmVE
aXJlY3Rpb25Gb3JDaGlsZCgqcmVuZGVyR3JpZCgpLCBjaGlsZCwgRm9yQ29sdW1ucyk7CiAgICAg
aWYgKGRpcmVjdGlvbigpID09IGNoaWxkSW5saW5lRGlyZWN0aW9uKSB7CiAgICAgICAgIC8vIEZJ
WE1FOiBJdCdzIHVuY2xlYXIgaWYgd2Ugc2hvdWxkIHJldHVybiB0aGUgaW50cmluc2ljIHdpZHRo
IG9yIHRoZSBwcmVmZXJyZWQgd2lkdGguCiAgICAgICAgIC8vIFNlZSBodHRwOi8vbGlzdHMudzMu
b3JnL0FyY2hpdmVzL1B1YmxpYy93d3ctc3R5bGUvMjAxM0phbi8wMjQ1Lmh0bWwKLSAgICAgICAg
TGF5b3V0VW5pdCBtYXJnaW5Mb2dpY2FsV2lkdGggPSBjaGlsZC5uZWVkc0xheW91dCgpID8gY29t
cHV0ZU1hcmdpbkxvZ2ljYWxTaXplRm9yQ2hpbGQoY2hpbGRJbmxpbmVEaXJlY3Rpb24sICpyZW5k
ZXJHcmlkKCksIGNoaWxkKSA6IGNoaWxkLm1hcmdpbkxvZ2ljYWxXaWR0aCgpOwotICAgICAgICBy
ZXR1cm4gY2hpbGQubWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCkgKyBtYXJnaW5Mb2dpY2FsV2lk
dGg7CisgICAgICAgIHJldHVybiBjaGlsZC5tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSArIEdy
aWRMYXlvdXRVdGlsczo6bWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZCgqcmVuZGVyR3JpZCgpLCBj
aGlsZElubGluZURpcmVjdGlvbiwgY2hpbGQpOwogICAgIH0KIAogICAgIGlmICh1cGRhdGVPdmVy
cmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY2hpbGQsIGNoaWxkSW5saW5l
RGlyZWN0aW9uKSkKQEAgLTc3MCw3ICs3NDcsNyBAQCBMYXlvdXRVbml0IEdyaWRUcmFja1Npemlu
Z0FsZ29yaXRobVN0cmF0ZWd5OjptYXhDb250ZW50Rm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZAog
CiBMYXlvdXRVbml0IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobVN0cmF0ZWd5OjptaW5TaXplRm9y
Q2hpbGQoUmVuZGVyQm94JiBjaGlsZCkgY29uc3QKIHsKLSAgICBHcmlkVHJhY2tTaXppbmdEaXJl
Y3Rpb24gY2hpbGRJbmxpbmVEaXJlY3Rpb24gPSBmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChy
ZW5kZXJHcmlkKCksIGNoaWxkLCBGb3JDb2x1bW5zKTsKKyAgICBHcmlkVHJhY2tTaXppbmdEaXJl
Y3Rpb24gY2hpbGRJbmxpbmVEaXJlY3Rpb24gPSBHcmlkTGF5b3V0VXRpbHM6OmZsb3dBd2FyZURp
cmVjdGlvbkZvckNoaWxkKCpyZW5kZXJHcmlkKCksIGNoaWxkLCBGb3JDb2x1bW5zKTsKICAgICBi
b29sIGlzUm93QXhpcyA9IGRpcmVjdGlvbigpID09IGNoaWxkSW5saW5lRGlyZWN0aW9uOwogICAg
IGNvbnN0IExlbmd0aCYgY2hpbGRNaW5TaXplID0gaXNSb3dBeGlzID8gY2hpbGQuc3R5bGUoKS5s
b2dpY2FsTWluV2lkdGgoKSA6IGNoaWxkLnN0eWxlKCkubG9naWNhbE1pbkhlaWdodCgpOwogICAg
IGNvbnN0IExlbmd0aCYgY2hpbGRTaXplID0gaXNSb3dBeGlzID8gY2hpbGQuc3R5bGUoKS5sb2dp
Y2FsV2lkdGgoKSA6IGNoaWxkLnN0eWxlKCkubG9naWNhbEhlaWdodCgpOwpAQCAtOTEzLDcgKzg5
MCw3IEBAIHByaXZhdGU6CiBMYXlvdXRVbml0IERlZmluaXRlU2l6ZVN0cmF0ZWd5OjptaW5Mb2dp
Y2FsV2lkdGhGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkLCBMZW5ndGggY2hpbGRNaW5TaXplLCBM
YXlvdXRVbml0IGF2YWlsYWJsZVNpemUpIGNvbnN0CiB7CiAgICAgTGF5b3V0VW5pdCBtYXJnaW5M
b2dpY2FsV2lkdGggPQotICAgICAgICBjb21wdXRlTWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZChm
bG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChyZW5kZXJHcmlkKCksIGNoaWxkLCBGb3JDb2x1bW5z
KSwgKnJlbmRlckdyaWQoKSwgY2hpbGQpOworICAgICAgICBHcmlkTGF5b3V0VXRpbHM6OmNvbXB1
dGVNYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKCpyZW5kZXJHcmlkKCksIEdyaWRMYXlvdXRVdGls
czo6Zmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQoKnJlbmRlckdyaWQoKSwgY2hpbGQsIEZvckNv
bHVtbnMpLCBjaGlsZCk7CiAgICAgcmV0dXJuIGNoaWxkLmNvbXB1dGVMb2dpY2FsV2lkdGhJbkZy
YWdtZW50VXNpbmcoTWluU2l6ZSwgY2hpbGRNaW5TaXplLCBhdmFpbGFibGVTaXplLCAqcmVuZGVy
R3JpZCgpLCBudWxscHRyKSArIG1hcmdpbkxvZ2ljYWxXaWR0aDsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCmluZGV4IDlhNjgxZmI4ODUzMzQzYjEyNzVlZGRmZGQw
NmVkOTVjZTNlMjc3YjYuLjJmYjgxNDZhOWFiMzgzMTBlOGRhMGI2NTE2MjMyNDUxOWQ0ZWUwMzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAKQEAgLTI4LDYgKzI4LDcg
QEAKICNpbmNsdWRlICJSZW5kZXJHcmlkLmgiCiAKICNpbmNsdWRlICJHcmlkQXJlYS5oIgorI2lu
Y2x1ZGUgIkdyaWRMYXlvdXRVdGlscy5oIgogI2luY2x1ZGUgIkdyaWRQb3NpdGlvbnNSZXNvbHZl
ci5oIgogI2luY2x1ZGUgIkdyaWRUcmFja1NpemluZ0FsZ29yaXRobS5oIgogI2luY2x1ZGUgIkxh
eW91dFJlcGFpbnRlci5oIgpAQCAtMjQ3LDcgKzI0OCw3IEBAIHZvaWQgUmVuZGVyR3JpZDo6bGF5
b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0KQogICAgICAgICAvLyBz
YW1lIHJlc3VsdCB3aGVuIGdyaWQncyBpbnRyaW5zaWMgc2l6ZSBpcyBjb21wdXRlZCBhZ2FpbiBp
biB0aGUgdXBkYXRlTG9naWNhbFdpZHRoIGNhbGwgYmVsbG93LgogICAgICAgICBpZiAoc2l6ZXNM
b2dpY2FsV2lkdGhUb0ZpdENvbnRlbnQoTWF4U2l6ZSkgfHwgc3R5bGUoKS5sb2dpY2FsV2lkdGgo
KS5pc0ludHJpbnNpY09yQXV0bygpKSB7CiAgICAgICAgICAgICBmb3IgKGF1dG8qIGNoaWxkID0g
Zmlyc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmdCb3goKSkg
ewotICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwg
IWlzT3J0aG9nb25hbENoaWxkKCpjaGlsZCkpCisgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5p
c091dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCAhR3JpZExheW91dFV0aWxzOjppc09ydGhvZ29uYWxD
aGlsZCgqdGhpcywgKmNoaWxkKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICAgY2hpbGQtPmNsZWFyT3ZlcnJpZGVTaXplKCk7CiAgICAgICAgICAgICAgICAg
Y2hpbGQtPmNsZWFyQ29udGFpbmluZ0Jsb2NrT3ZlcnJpZGVTaXplKCk7CkBAIC00NjcsMTYgKzQ2
OCw2IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IG92ZXJyaWRlQ29udGFpbmlu
Z0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChjb25zCiAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBG
b3JDb2x1bW5zID8gY2hpbGQub3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdp
ZHRoKCkgOiBjaGlsZC5vdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0
KCk7CiB9CiAKLWJvb2wgUmVuZGVyR3JpZDo6aXNPcnRob2dvbmFsQ2hpbGQoY29uc3QgUmVuZGVy
Qm94JiBjaGlsZCkgY29uc3QKLXsKLSAgICByZXR1cm4gY2hpbGQuaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSAhPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwotfQotCi1HcmlkVHJhY2tTaXpp
bmdEaXJlY3Rpb24gUmVuZGVyR3JpZDo6Zmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQoY29uc3Qg
UmVuZGVyQm94JiBjaGlsZCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikgY29u
c3QKLXsKLSAgICByZXR1cm4gIWlzT3J0aG9nb25hbENoaWxkKGNoaWxkKSA/IGRpcmVjdGlvbiA6
IChkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucyA/IEZvclJvd3MgOiBGb3JDb2x1bW5zKTsKLX0KLQog
dW5zaWduZWQgUmVuZGVyR3JpZDo6Y29tcHV0ZUF1dG9SZXBlYXRUcmFja3NDb3VudChHcmlkVHJh
Y2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uLCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGF2
YWlsYWJsZVNpemUpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFhdmFpbGFibGVTaXplIHx8IGF2YWls
YWJsZVNpemUudmFsdWUoKSAhPSAtMSk7CkBAIC02MjYsNyArNjE3LDcgQEAgdm9pZCBSZW5kZXJH
cmlkOjpwbGFjZUl0ZW1zT25HcmlkKEdyaWQmIGdyaWQsIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5p
dD4gYXZhaWxhYmwKICAgICAgICAgaWYgKGdyaWQub3JkZXJJdGVyYXRvcigpLnNob3VsZFNraXBD
aGlsZCgqY2hpbGQpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaGFzQW55T3J0
aG9nb25hbEdyaWRJdGVtID0gaGFzQW55T3J0aG9nb25hbEdyaWRJdGVtIHx8IGlzT3J0aG9nb25h
bENoaWxkKCpjaGlsZCk7CisgICAgICAgIGhhc0FueU9ydGhvZ29uYWxHcmlkSXRlbSA9IGhhc0Fu
eU9ydGhvZ29uYWxHcmlkSXRlbSB8fCBHcmlkTGF5b3V0VXRpbHM6OmlzT3J0aG9nb25hbENoaWxk
KCp0aGlzLCAqY2hpbGQpOwogCiAgICAgICAgIEdyaWRBcmVhIGFyZWEgPSBncmlkLmdyaWRJdGVt
QXJlYSgqY2hpbGQpOwogICAgICAgICBpZiAoIWFyZWEucm93cy5pc0luZGVmaW5pdGUoKSkKQEAg
LTk2OCw3ICs5NTksNyBAQCB2b2lkIFJlbmRlckdyaWQ6OmxheW91dFBvc2l0aW9uZWRPYmplY3Qo
UmVuZGVyQm94JiBjaGlsZCwgYm9vbCByZWxheW91dENoaWxkcmVuLAogICAgIC8vIEZJWE1FOiBJ
ZiBwb3NzaWJsZSBpdCdkIGJlIG5pY2UgdG8gYXZvaWQgdGhpcyBsYXlvdXQgaGVyZSB3aGVuIGl0
J3Mgbm90IG5lZWRlZC4KICAgICBSZW5kZXJCbG9jazo6bGF5b3V0UG9zaXRpb25lZE9iamVjdChj
aGlsZCwgcmVsYXlvdXRDaGlsZHJlbiwgZml4ZWRQb3NpdGlvbk9iamVjdHNPbmx5KTsKIAotICAg
IGJvb2wgaXNPcnRob2dvbmFsID0gaXNPcnRob2dvbmFsQ2hpbGQoY2hpbGQpOworICAgIGJvb2wg
aXNPcnRob2dvbmFsID0gR3JpZExheW91dFV0aWxzOjppc09ydGhvZ29uYWxDaGlsZCgqdGhpcywg
Y2hpbGQpOwogICAgIExheW91dFVuaXQgbG9naWNhbExlZnQgPSBjaGlsZC5sb2dpY2FsTGVmdCgp
ICsgKGlzT3J0aG9nb25hbCA/IHJvd09mZnNldCA6IGNvbHVtbk9mZnNldCk7CiAgICAgTGF5b3V0
VW5pdCBsb2dpY2FsVG9wID0gY2hpbGQubG9naWNhbFRvcCgpICsgKGlzT3J0aG9nb25hbCA/IGNv
bHVtbk9mZnNldCA6IHJvd09mZnNldCk7CiAgICAgY2hpbGQuc2V0TG9naWNhbExvY2F0aW9uKExh
eW91dFBvaW50KGxvZ2ljYWxMZWZ0LCBsb2dpY2FsVG9wKSk7CkBAIC0xMTQ2LDMzICsxMTM3LDEz
IEBAIHN0YXRpYyBMYXlvdXRVbml0IGNvbXB1dGVPdmVyZmxvd0FsaWdubWVudE9mZnNldChPdmVy
Zmxvd0FsaWdubWVudCBvdmVyZmxvdywgTGF5CiAgICAgcmV0dXJuIDA7CiB9CiAKLUxheW91dFVu
aXQgUmVuZGVyR3JpZDo6bWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZChHcmlkVHJhY2tTaXppbmdE
aXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAotewotICAg
IHJldHVybiBmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChjaGlsZCwgZGlyZWN0aW9uKSA9PSBG
b3JDb2x1bW5zID8gY2hpbGQubWFyZ2luTG9naWNhbFdpZHRoKCkgOiBjaGlsZC5tYXJnaW5Mb2dp
Y2FsSGVpZ2h0KCk7Ci19Ci0KLUxheW91dFVuaXQgUmVuZGVyR3JpZDo6Y29tcHV0ZU1hcmdpbkxv
Z2ljYWxTaXplRm9yQ2hpbGQoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29u
c3QgUmVuZGVyQm94JiBjaGlsZCkgY29uc3QKLXsKLSAgICBpZiAoIWNoaWxkLnN0eWxlKCkuaGFz
TWFyZ2luKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgTGF5b3V0VW5pdCBtYXJnaW5TdGFy
dDsKLSAgICBMYXlvdXRVbml0IG1hcmdpbkVuZDsKLSAgICBpZiAoZGlyZWN0aW9uID09IEZvckNv
bHVtbnMpCi0gICAgICAgIGNoaWxkLmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25NYXJnaW5zKCp0aGlz
LCBjaGlsZC5jb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50SW5GcmFnbWVudChu
dWxscHRyKSwgY2hpbGQubG9naWNhbFdpZHRoKCksIG1hcmdpblN0YXJ0LCBtYXJnaW5FbmQpOwot
ICAgIGVsc2UKLSAgICAgICAgY2hpbGQuY29tcHV0ZUJsb2NrRGlyZWN0aW9uTWFyZ2lucygqdGhp
cywgbWFyZ2luU3RhcnQsIG1hcmdpbkVuZCk7Ci0KLSAgICByZXR1cm4gbWFyZ2luU3RhcnQgKyBt
YXJnaW5FbmQ7Ci19Ci0KIExheW91dFVuaXQgUmVuZGVyR3JpZDo6YXZhaWxhYmxlQWxpZ25tZW50
U3BhY2VGb3JDaGlsZEJlZm9yZVN0cmV0Y2hpbmcoTGF5b3V0VW5pdCBncmlkQXJlYUJyZWFkdGhG
b3JDaGlsZCwgY29uc3QgUmVuZGVyQm94JiBjaGlsZCkgY29uc3QKIHsKICAgICAvLyBCZWNhdXNl
IHdlIHdhbnQgdG8gYXZvaWQgbXVsdGlwbGUgbGF5b3V0cywgc3RyZXRjaGluZyBsb2dpYyBtaWdo
dCBiZSBwZXJmb3JtZWQgYmVmb3JlCiAgICAgLy8gY2hpbGRyZW4gYXJlIGxhaWQgb3V0LCBzbyB3
ZSBjYW4ndCB1c2UgdGhlIGNoaWxkIGNhY2hlZCB2YWx1ZXMuIEhlbmNlLCB3ZSBuZWVkIHRvCiAg
ICAgLy8gY29tcHV0ZSBtYXJnaW5zIGluIG9yZGVyIHRvIGRldGVybWluZSB0aGUgYXZhaWxhYmxl
IGhlaWdodCBiZWZvcmUgc3RyZXRjaGluZy4KLSAgICBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24g
Y2hpbGRCbG9ja0Zsb3dEaXJlY3Rpb24gPSBmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChjaGls
ZCwgRm9yUm93cyk7Ci0gICAgcmV0dXJuIGdyaWRBcmVhQnJlYWR0aEZvckNoaWxkIC0gKGNoaWxk
Lm5lZWRzTGF5b3V0KCkgPyBjb21wdXRlTWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZChjaGlsZEJs
b2NrRmxvd0RpcmVjdGlvbiwgY2hpbGQpIDogbWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZChjaGls
ZEJsb2NrRmxvd0RpcmVjdGlvbiwgY2hpbGQpKTsKKyAgICBHcmlkVHJhY2tTaXppbmdEaXJlY3Rp
b24gY2hpbGRCbG9ja0Zsb3dEaXJlY3Rpb24gPSBHcmlkTGF5b3V0VXRpbHM6OmZsb3dBd2FyZURp
cmVjdGlvbkZvckNoaWxkKCp0aGlzLCBjaGlsZCwgRm9yUm93cyk7CisgICAgcmV0dXJuIGdyaWRB
cmVhQnJlYWR0aEZvckNoaWxkIC0gR3JpZExheW91dFV0aWxzOjptYXJnaW5Mb2dpY2FsU2l6ZUZv
ckNoaWxkKCp0aGlzLCBjaGlsZEJsb2NrRmxvd0RpcmVjdGlvbiwgY2hpbGQpOwogfQogCiBTdHls
ZVNlbGZBbGlnbm1lbnREYXRhIFJlbmRlckdyaWQ6OmFsaWduU2VsZkZvckNoaWxkKGNvbnN0IFJl
bmRlckJveCYgY2hpbGQsIGNvbnN0IFJlbmRlclN0eWxlKiBncmlkU3R5bGUpIGNvbnN0CkBAIC0x
MTk4LDcgKzExNjksNyBAQCB2b2lkIFJlbmRlckdyaWQ6OmFwcGx5U3RyZXRjaEFsaWdubWVudFRv
Q2hpbGRJZk5lZWRlZChSZW5kZXJCb3gmIGNoaWxkKQogICAgIC8vIG5vdCwgZXZhbHVhdGluZyB0
aGUgY29uZGl0aW9ucyB3aGljaCBtaWdodCBoYXZlIGNoYW5nZWQgc2luY2UgdGhlIG9sZCB2YWx1
ZXMgd2VyZSBzZXQuCiAgICAgY2hpbGQuY2xlYXJPdmVycmlkZUxvZ2ljYWxDb250ZW50SGVpZ2h0
KCk7CiAKLSAgICBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gY2hpbGRCbG9ja0RpcmVjdGlvbiA9
IGZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKGNoaWxkLCBGb3JSb3dzKTsKKyAgICBHcmlkVHJh
Y2tTaXppbmdEaXJlY3Rpb24gY2hpbGRCbG9ja0RpcmVjdGlvbiA9IEdyaWRMYXlvdXRVdGlsczo6
Zmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQoKnRoaXMsIGNoaWxkLCBGb3JSb3dzKTsKICAgICBi
b29sIGJsb2NrRmxvd0lzQ29sdW1uQXhpcyA9IGNoaWxkQmxvY2tEaXJlY3Rpb24gPT0gRm9yUm93
czsKICAgICBib29sIGFsbG93ZWRUb1N0cmV0Y2hDaGlsZEJsb2NrU2l6ZSA9IGJsb2NrRmxvd0lz
Q29sdW1uQXhpcyA/IGFsbG93ZWRUb1N0cmV0Y2hDaGlsZEFsb25nQ29sdW1uQXhpcyhjaGlsZCkg
OiBhbGxvd2VkVG9TdHJldGNoQ2hpbGRBbG9uZ1Jvd0F4aXMoY2hpbGQpOwogICAgIGlmIChhbGxv
d2VkVG9TdHJldGNoQ2hpbGRCbG9ja1NpemUpIHsKQEAgLTEyODEsNyArMTI1Miw3IEBAIHN0YXRp
YyBpbnQgc3ludGhlc2l6ZWRCYXNlbGluZUZyb21Cb3JkZXJCb3goY29uc3QgUmVuZGVyQm94JiBi
b3gsIExpbmVEaXJlY3Rpb25NCiAKIGJvb2wgUmVuZGVyR3JpZDo6aXNJbmxpbmVCYXNlbGluZUFs
aWduZWRDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAogewotICAgIHJldHVybiBh
bGlnblNlbGZGb3JDaGlsZChjaGlsZCkucG9zaXRpb24oKSA9PSBJdGVtUG9zaXRpb25CYXNlbGlu
ZSAmJiAhaXNPcnRob2dvbmFsQ2hpbGQoY2hpbGQpICYmICFoYXNBdXRvTWFyZ2luc0luQ29sdW1u
QXhpcyhjaGlsZCk7CisgICAgcmV0dXJuIGFsaWduU2VsZkZvckNoaWxkKGNoaWxkKS5wb3NpdGlv
bigpID09IEl0ZW1Qb3NpdGlvbkJhc2VsaW5lICYmICFHcmlkTGF5b3V0VXRpbHM6OmlzT3J0aG9n
b25hbENoaWxkKCp0aGlzLCBjaGlsZCkgJiYgIWhhc0F1dG9NYXJnaW5zSW5Db2x1bW5BeGlzKGNo
aWxkKTsKIH0KIAogLy8gRklYTUU6IFRoaXMgbG9naWMgaXMgc2hhcmVkIGJ5IFJlbmRlckZsZXhp
YmxlQm94LCBzbyBpdCBtaWdodCBiZSByZWZhY3RvcmVkIHNvbWVob3cuCkBAIC0xMzIyLDcgKzEy
OTMsNyBAQCBzdGQ6Om9wdGlvbmFsPGludD4gUmVuZGVyR3JpZDo6Zmlyc3RMaW5lQmFzZWxpbmUo
KSBjb25zdAogICAgIGlmICghYmFzZWxpbmVDaGlsZCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKIAotICAgIGF1dG8gYmFzZWxpbmUgPSBpc09ydGhvZ29uYWxDaGlsZCgqYmFzZWxpbmVD
aGlsZCkgPyBzdGQ6Om51bGxvcHQgOiBiYXNlbGluZUNoaWxkLT5maXJzdExpbmVCYXNlbGluZSgp
OworICAgIGF1dG8gYmFzZWxpbmUgPSBHcmlkTGF5b3V0VXRpbHM6OmlzT3J0aG9nb25hbENoaWxk
KCp0aGlzLCAqYmFzZWxpbmVDaGlsZCkgPyBzdGQ6Om51bGxvcHQgOiBiYXNlbGluZUNoaWxkLT5m
aXJzdExpbmVCYXNlbGluZSgpOwogICAgIC8vIFdlIHRha2UgYm9yZGVyLWJveCdzIGJvdHRvbSBp
ZiBubyB2YWxpZCBiYXNlbGluZS4KICAgICBpZiAoIWJhc2VsaW5lKSB7CiAgICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgcGFzcyB8ZGlyZWN0aW9ufCBpbnRvIGZpcnN0TGluZUJhc2VsaW5lIGFu
ZCBzdG9wIGJhaWxpbmcgb3V0IGlmIHdlJ3JlIGEgd3JpdGluZwpAQCAtMTM1Miw3ICsxMzIzLDcg
QEAgR3JpZEF4aXNQb3NpdGlvbiBSZW5kZXJHcmlkOjpjb2x1bW5BeGlzUG9zaXRpb25Gb3JDaGls
ZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkKQogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGlt
cGxlbWVudCB0aGlzIGxvZ2ljIGluIGEgZ2VuZXJpYyB1dGlsaXR5IGZ1bmN0aW9uID8KICAgICAg
ICAgLy8gQWxpZ25zIHRoZSBhbGlnbm1lbnQgc3ViamVjdCB0byBiZSBmbHVzaCB3aXRoIHRoZSBl
ZGdlIG9mIHRoZSBhbGlnbm1lbnQgY29udGFpbmVyCiAgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcg
dG8gdGhlIGFsaWdubWVudCBzdWJqZWN0J3MgJ3N0YXJ0JyBzaWRlIGluIHRoZSBjb2x1bW4gYXhp
cy4KLSAgICAgICAgaWYgKGlzT3J0aG9nb25hbENoaWxkKGNoaWxkKSkgeworICAgICAgICBpZiAo
R3JpZExheW91dFV0aWxzOjppc09ydGhvZ29uYWxDaGlsZCgqdGhpcywgY2hpbGQpKSB7CiAgICAg
ICAgICAgICAvLyBJZiBvcnRob2dvbmFsIHdyaXRpbmctbW9kZXMsIHNlbGYtc3RhcnQgd2lsbCBi
ZSBiYXNlZCBvbiB0aGUgY2hpbGQncyBpbmxpbmUtYXhpcwogICAgICAgICAgICAgLy8gZGlyZWN0
aW9uIChpbmxpbmUtc3RhcnQpLCBiZWNhdXNlIGl0J3MgdGhlIG9uZSBwYXJhbGxlbCB0byB0aGUg
Y29sdW1uIGF4aXMuCiAgICAgICAgICAgICBpZiAoc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0
aW5nTW9kZSgpKQpAQCAtMTM2NSw3ICsxMzM2LDcgQEAgR3JpZEF4aXNQb3NpdGlvbiBSZW5kZXJH
cmlkOjpjb2x1bW5BeGlzUG9zaXRpb25Gb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkKQog
ICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGltcGxlbWVudCB0aGlzIGxvZ2ljIGluIGEgZ2Vu
ZXJpYyB1dGlsaXR5IGZ1bmN0aW9uID8KICAgICAgICAgLy8gQWxpZ25zIHRoZSBhbGlnbm1lbnQg
c3ViamVjdCB0byBiZSBmbHVzaCB3aXRoIHRoZSBlZGdlIG9mIHRoZSBhbGlnbm1lbnQgY29udGFp
bmVyCiAgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFsaWdubWVudCBzdWJqZWN0J3Mg
J2VuZCcgc2lkZSBpbiB0aGUgY29sdW1uIGF4aXMuCi0gICAgICAgIGlmIChpc09ydGhvZ29uYWxD
aGlsZChjaGlsZCkpIHsKKyAgICAgICAgaWYgKEdyaWRMYXlvdXRVdGlsczo6aXNPcnRob2dvbmFs
Q2hpbGQoKnRoaXMsIGNoaWxkKSkgewogICAgICAgICAgICAgLy8gSWYgb3J0aG9nb25hbCB3cml0
aW5nLW1vZGVzLCBzZWxmLWVuZCB3aWxsIGJlIGJhc2VkIG9uIHRoZSBjaGlsZCdzIGlubGluZS1h
eGlzCiAgICAgICAgICAgICAvLyBkaXJlY3Rpb24sIChpbmxpbmUtZW5kKSBiZWNhdXNlIGl0J3Mg
dGhlIG9uZSBwYXJhbGxlbCB0byB0aGUgY29sdW1uIGF4aXMuCiAgICAgICAgICAgICBpZiAoc3R5
bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKQpAQCAtMTQxNyw3ICsxMzg4LDcgQEAg
R3JpZEF4aXNQb3NpdGlvbiBSZW5kZXJHcmlkOjpyb3dBeGlzUG9zaXRpb25Gb3JDaGlsZChjb25z
dCBSZW5kZXJCb3gmIGNoaWxkKSBjb24KICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBpbXBs
ZW1lbnQgdGhpcyBsb2dpYyBpbiBhIGdlbmVyaWMgdXRpbGl0eSBmdW5jdGlvbiA/CiAgICAgICAg
IC8vIEFsaWducyB0aGUgYWxpZ25tZW50IHN1YmplY3QgdG8gYmUgZmx1c2ggd2l0aCB0aGUgZWRn
ZSBvZiB0aGUgYWxpZ25tZW50IGNvbnRhaW5lcgogICAgICAgICAvLyBjb3JyZXNwb25kaW5nIHRv
IHRoZSBhbGlnbm1lbnQgc3ViamVjdCdzICdzdGFydCcgc2lkZSBpbiB0aGUgcm93IGF4aXMuCi0g
ICAgICAgIGlmIChpc09ydGhvZ29uYWxDaGlsZChjaGlsZCkpIHsKKyAgICAgICAgaWYgKEdyaWRM
YXlvdXRVdGlsczo6aXNPcnRob2dvbmFsQ2hpbGQoKnRoaXMsIGNoaWxkKSkgewogICAgICAgICAg
ICAgLy8gSWYgb3J0aG9nb25hbCB3cml0aW5nLW1vZGVzLCBzZWxmLXN0YXJ0IHdpbGwgYmUgYmFz
ZWQgb24gdGhlIGNoaWxkJ3MgYmxvY2stYXhpcwogICAgICAgICAgICAgLy8gZGlyZWN0aW9uLCBi
ZWNhdXNlIGl0J3MgdGhlIG9uZSBwYXJhbGxlbCB0byB0aGUgcm93IGF4aXMuCiAgICAgICAgICAg
ICBpZiAoY2hpbGQuc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKQpAQCAtMTQz
MCw3ICsxNDAxLDcgQEAgR3JpZEF4aXNQb3NpdGlvbiBSZW5kZXJHcmlkOjpyb3dBeGlzUG9zaXRp
b25Gb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkKSBjb24KICAgICAgICAgLy8gRklYTUU6
IFNob3VsZCB3ZSBpbXBsZW1lbnQgdGhpcyBsb2dpYyBpbiBhIGdlbmVyaWMgdXRpbGl0eSBmdW5j
dGlvbiA/CiAgICAgICAgIC8vIEFsaWducyB0aGUgYWxpZ25tZW50IHN1YmplY3QgdG8gYmUgZmx1
c2ggd2l0aCB0aGUgZWRnZSBvZiB0aGUgYWxpZ25tZW50IGNvbnRhaW5lcgogICAgICAgICAvLyBj
b3JyZXNwb25kaW5nIHRvIHRoZSBhbGlnbm1lbnQgc3ViamVjdCdzICdlbmQnIHNpZGUgaW4gdGhl
IHJvdyBheGlzLgotICAgICAgICBpZiAoaXNPcnRob2dvbmFsQ2hpbGQoY2hpbGQpKSB7CisgICAg
ICAgIGlmIChHcmlkTGF5b3V0VXRpbHM6OmlzT3J0aG9nb25hbENoaWxkKCp0aGlzLCBjaGlsZCkp
IHsKICAgICAgICAgICAgIC8vIElmIG9ydGhvZ29uYWwgd3JpdGluZy1tb2Rlcywgc2VsZi1lbmQg
d2lsbCBiZSBiYXNlZCBvbiB0aGUgY2hpbGQncyBibG9jay1heGlzCiAgICAgICAgICAgICAvLyBk
aXJlY3Rpb24sIGJlY2F1c2UgaXQncyB0aGUgb25lIHBhcmFsbGVsIHRvIHRoZSByb3cgYXhpcy4K
ICAgICAgICAgICAgIGlmIChjaGlsZC5zdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2Rl
KCkpCkBAIC0xNDkzLDcgKzE0NjQsNyBAQCBMYXlvdXRVbml0IFJlbmRlckdyaWQ6OmNvbHVtbkF4
aXNPZmZzZXRGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAogICAgICAgICAv
LyAodGhpcyBkb2VzIG5vdCBoYXZlIHRvIGJlIGRvbmUgZm9yIHRoZSBsYXN0IHRyYWNrIGFzIHRo
ZXJlIGFyZSBubyBtb3JlIG1fcm93UG9zaXRpb25zIGFmdGVyIGl0KS4KICAgICAgICAgaWYgKGNo
aWxkRW5kTGluZSA8IG1fcm93UG9zaXRpb25zLnNpemUoKSAtIDEpCiAgICAgICAgICAgICBlbmRP
ZlJvdyAtPSBncmlkR2FwKEZvclJvd3MpICsgbV9vZmZzZXRCZXR3ZWVuUm93czsKLSAgICAgICAg
TGF5b3V0VW5pdCBjb2x1bW5BeGlzQ2hpbGRTaXplID0gaXNPcnRob2dvbmFsQ2hpbGQoY2hpbGQp
ID8gY2hpbGQubG9naWNhbFdpZHRoKCkgKyBjaGlsZC5tYXJnaW5Mb2dpY2FsV2lkdGgoKSA6IGNo
aWxkLmxvZ2ljYWxIZWlnaHQoKSArIGNoaWxkLm1hcmdpbkxvZ2ljYWxIZWlnaHQoKTsKKyAgICAg
ICAgTGF5b3V0VW5pdCBjb2x1bW5BeGlzQ2hpbGRTaXplID0gR3JpZExheW91dFV0aWxzOjppc09y
dGhvZ29uYWxDaGlsZCgqdGhpcywgY2hpbGQpID8gY2hpbGQubG9naWNhbFdpZHRoKCkgKyBjaGls
ZC5tYXJnaW5Mb2dpY2FsV2lkdGgoKSA6IGNoaWxkLmxvZ2ljYWxIZWlnaHQoKSArIGNoaWxkLm1h
cmdpbkxvZ2ljYWxIZWlnaHQoKTsKICAgICAgICAgYXV0byBvdmVyZmxvdyA9IGFsaWduU2VsZkZv
ckNoaWxkKGNoaWxkKS5vdmVyZmxvdygpOwogICAgICAgICBMYXlvdXRVbml0IG9mZnNldEZyb21T
dGFydFBvc2l0aW9uID0gY29tcHV0ZU92ZXJmbG93QWxpZ25tZW50T2Zmc2V0KG92ZXJmbG93LCBl
bmRPZlJvdyAtIHN0YXJ0T2ZSb3csIGNvbHVtbkF4aXNDaGlsZFNpemUpOwogICAgICAgICByZXR1
cm4gc3RhcnRQb3NpdGlvbiArIChheGlzUG9zaXRpb24gPT0gR3JpZEF4aXNFbmQgPyBvZmZzZXRG
cm9tU3RhcnRQb3NpdGlvbiA6IG9mZnNldEZyb21TdGFydFBvc2l0aW9uIC8gMik7CkBAIC0xNTI1
LDcgKzE0OTYsNyBAQCBMYXlvdXRVbml0IFJlbmRlckdyaWQ6OnJvd0F4aXNPZmZzZXRGb3JDaGls
ZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAogICAgICAgICAvLyAodGhpcyBkb2VzIG5v
dCBoYXZlIHRvIGJlIGRvbmUgZm9yIHRoZSBsYXN0IHRyYWNrIGFzIHRoZXJlIGFyZSBubyBtb3Jl
IG1fY29sdW1uUG9zaXRpb25zIGFmdGVyIGl0KS4KICAgICAgICAgaWYgKGNoaWxkRW5kTGluZSA8
IG1fY29sdW1uUG9zaXRpb25zLnNpemUoKSAtIDEpCiAgICAgICAgICAgICBlbmRPZkNvbHVtbiAt
PSBncmlkR2FwKEZvckNvbHVtbnMpICsgbV9vZmZzZXRCZXR3ZWVuQ29sdW1uczsKLSAgICAgICAg
TGF5b3V0VW5pdCByb3dBeGlzQ2hpbGRTaXplID0gaXNPcnRob2dvbmFsQ2hpbGQoY2hpbGQpID8g
Y2hpbGQubG9naWNhbEhlaWdodCgpICsgY2hpbGQubWFyZ2luTG9naWNhbEhlaWdodCgpIDogY2hp
bGQubG9naWNhbFdpZHRoKCkgKyBjaGlsZC5tYXJnaW5Mb2dpY2FsV2lkdGgoKTsKKyAgICAgICAg
TGF5b3V0VW5pdCByb3dBeGlzQ2hpbGRTaXplID0gR3JpZExheW91dFV0aWxzOjppc09ydGhvZ29u
YWxDaGlsZCgqdGhpcywgY2hpbGQpID8gY2hpbGQubG9naWNhbEhlaWdodCgpICsgY2hpbGQubWFy
Z2luTG9naWNhbEhlaWdodCgpIDogY2hpbGQubG9naWNhbFdpZHRoKCkgKyBjaGlsZC5tYXJnaW5M
b2dpY2FsV2lkdGgoKTsKICAgICAgICAgYXV0byBvdmVyZmxvdyA9IGp1c3RpZnlTZWxmRm9yQ2hp
bGQoY2hpbGQpLm92ZXJmbG93KCk7CiAgICAgICAgIExheW91dFVuaXQgb2Zmc2V0RnJvbVN0YXJ0
UG9zaXRpb24gPSBjb21wdXRlT3ZlcmZsb3dBbGlnbm1lbnRPZmZzZXQob3ZlcmZsb3csIGVuZE9m
Q29sdW1uIC0gc3RhcnRPZkNvbHVtbiwgcm93QXhpc0NoaWxkU2l6ZSk7CiAgICAgICAgIHJldHVy
biBzdGFydFBvc2l0aW9uICsgKGF4aXNQb3NpdGlvbiA9PSBHcmlkQXhpc0VuZCA/IG9mZnNldEZy
b21TdGFydFBvc2l0aW9uIDogb2Zmc2V0RnJvbVN0YXJ0UG9zaXRpb24gLyAyKTsKQEAgLTE2NTQs
MTggKzE2MjUsMTkgQEAgTGF5b3V0UG9pbnQgUmVuZGVyR3JpZDo6ZmluZENoaWxkTG9naWNhbFBv
c2l0aW9uKGNvbnN0IFJlbmRlckJveCYgY2hpbGQpIGNvbnN0CiB7CiAgICAgTGF5b3V0VW5pdCBj
b2x1bW5BeGlzT2Zmc2V0ID0gY29sdW1uQXhpc09mZnNldEZvckNoaWxkKGNoaWxkKTsKICAgICBM
YXlvdXRVbml0IHJvd0F4aXNPZmZzZXQgPSByb3dBeGlzT2Zmc2V0Rm9yQ2hpbGQoY2hpbGQpOwor
ICAgIGJvb2wgaXNPcnRob2dvbmFsQ2hpbGQgPSBHcmlkTGF5b3V0VXRpbHM6OmlzT3J0aG9nb25h
bENoaWxkKCp0aGlzLCBjaGlsZCk7CiAKICAgICAvLyBXZSBzdG9yZWQgbV9jb2x1bW5Qb3NpdGlv
bnMncyBkYXRhIGlnbm9yaW5nIHRoZSBkaXJlY3Rpb24sIGhlbmNlIHdlIG1pZ2h0IG5lZWQgbm93
CiAgICAgLy8gdG8gdHJhbnNsYXRlIHBvc2l0aW9ucyBmcm9tIFJUTCB0byBMVFIsIGFzIGl0J3Mg
bW9yZSBjb252ZW5pZW50IGZvciBwYWludGluZy4KICAgICBpZiAoIXN0eWxlKCkuaXNMZWZ0VG9S
aWdodERpcmVjdGlvbigpKQotICAgICAgICByb3dBeGlzT2Zmc2V0ID0gdHJhbnNsYXRlUlRMQ29v
cmRpbmF0ZShyb3dBeGlzT2Zmc2V0KSAtIChpc09ydGhvZ29uYWxDaGlsZChjaGlsZCkgPyBjaGls
ZC5sb2dpY2FsSGVpZ2h0KCkgIDogY2hpbGQubG9naWNhbFdpZHRoKCkpOworICAgICAgICByb3dB
eGlzT2Zmc2V0ID0gdHJhbnNsYXRlUlRMQ29vcmRpbmF0ZShyb3dBeGlzT2Zmc2V0KSAtIChpc09y
dGhvZ29uYWxDaGlsZCA/IGNoaWxkLmxvZ2ljYWxIZWlnaHQoKSAgOiBjaGlsZC5sb2dpY2FsV2lk
dGgoKSk7CiAKICAgICAvLyAiSW4gdGhlIHBvc2l0aW9uaW5nIHBoYXNlIFsuLi5dIGNhbGN1bGF0
aW9ucyBhcmUgcGVyZm9ybWVkIGFjY29yZGluZyB0byB0aGUgd3JpdGluZyBtb2RlCiAgICAgLy8g
b2YgdGhlIGNvbnRhaW5pbmcgYmxvY2sgb2YgdGhlIGJveCBlc3RhYmxpc2hpbmcgdGhlIG9ydGhv
Z29uYWwgZmxvdy4iIEhvd2V2ZXIsIHRoZQogICAgIC8vIHJlc3VsdGluZyBMYXlvdXRQb2ludCB3
aWxsIGJlIHVzZWQgaW4gJ3NldExvZ2ljYWxQb3NpdGlvbicgaW4gb3JkZXIgdG8gc2V0IHRoZSBj
aGlsZCdzCiAgICAgLy8gbG9naWNhbCBwb3NpdGlvbiwgd2hpY2ggd2lsbCBvbmx5IHRha2UgaW50
byBhY2NvdW50IHRoZSBjaGlsZCdzIHdyaXRpbmctbW9kZS4KICAgICBMYXlvdXRQb2ludCBjaGls
ZExvY2F0aW9uKHJvd0F4aXNPZmZzZXQsIGNvbHVtbkF4aXNPZmZzZXQpOwotICAgIHJldHVybiBp
c09ydGhvZ29uYWxDaGlsZChjaGlsZCkgPyBjaGlsZExvY2F0aW9uLnRyYW5zcG9zZWRQb2ludCgp
IDogY2hpbGRMb2NhdGlvbjsKKyAgICByZXR1cm4gaXNPcnRob2dvbmFsQ2hpbGQgPyBjaGlsZExv
Y2F0aW9uLnRyYW5zcG9zZWRQb2ludCgpIDogY2hpbGRMb2NhdGlvbjsKIH0KIAogdW5zaWduZWQg
UmVuZGVyR3JpZDo6bnVtVHJhY2tzKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24s
IGNvbnN0IEdyaWQmIGdyaWQpIGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>326795</attachid>
            <date>2017-11-13 13:55:08 -0800</date>
            <delta_ts>2017-11-20 14:12:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179633-20171113225507.patch</filename>
            <type>text/plain</type>
            <size>31407</size>
            <attacher name="Javier Fernandez">jfernandez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI0NzUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWU4ZTg4ZjZmMzAwOGQ5
OTU5ZGNmZmVkMDQ3MWRiMDQ2YjJiMDM0Zi4uNzgxMWI1NmY1NWNhMzg2NzI1NTM3NjMxOWEzNTA3
YjU1OTliMzY3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE3LTExLTEzICBKYXZp
ZXIgRmVybmFuZGV6ICA8amZlcm5hbmRlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtjc3MtZ3Jp
ZF0gUmVmYWN0b3JpbmcgYW5kIG5ldyBncmlkIHV0aWxpdHkgY2xhc3MKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTYzMworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgbmV3IGNsYXNzIHdpdGgg
c2V2ZXJhbCB1dGlsaXR5IGZ1bmN0aW9ucyB0byBzaGFyZSBsb2dpYworICAgICAgICBiZXR3ZWVu
IFJlbmRlckdyaWQgYW5kIEdyaWRUcmFja1NpemluZ0FsZ29yaXRobS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMsIHNpbmNlIG5vIG5ldyBmdW5jdGlvbmFsaXR5IGlzIGFkZGVkLgorCisgICAgICAg
ICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIHJlbmRlcmluZy9HcmlkTGF5b3V0VXRpbHMuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyaWRMYXlvdXRVdGlsczo6Y29tcHV0ZU1hcmdpbkxvZ2ljYWxTaXpl
Rm9yQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6R3JpZExheW91dFV0aWxzOjptYXJnaW5Mb2dp
Y2FsU2l6ZUZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRMYXlvdXRVdGlsczo6aXNP
cnRob2dvbmFsQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6R3JpZExheW91dFV0aWxzOjpmbG93
QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZCk6CisgICAgICAgICogcmVuZGVyaW5nL0dyaWRMYXlvdXRV
dGlscy5oOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3Jp
dGhtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6YXNz
dW1lZFJvd3NTaXplRm9yT3J0aG9nb25hbENoaWxkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyaWRUcmFja1NpemluZ0FsZ29yaXRobVN0cmF0ZWd5Ojpsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtU3RyYXRl
Z3k6Om1pbkNvbnRlbnRGb3JDaGlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmlkVHJh
Y2tTaXppbmdBbGdvcml0aG1TdHJhdGVneTo6bWF4Q29udGVudEZvckNoaWxkIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyaWRUcmFja1NpemluZ0FsZ29yaXRobVN0cmF0ZWd5OjptaW5TaXpl
Rm9yQ2hpbGQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGVmaW5pdGVTaXplU3RyYXRlZ3k6
Om1pbkxvZ2ljYWxXaWR0aEZvckNoaWxkIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyR3JpZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpsYXlvdXRCbG9jayk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpwbGFjZUl0ZW1zT25HcmlkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmxheW91dFBvc2l0aW9uZWRPYmplY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6YXZhaWxhYmxlQWxpZ25tZW50U3BhY2VGb3JD
aGlsZEJlZm9yZVN0cmV0Y2hpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3Jp
ZDo6YXBwbHlTdHJldGNoQWxpZ25tZW50VG9DaGlsZElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckdyaWQ6OmlzSW5saW5lQmFzZWxpbmVBbGlnbmVkQ2hpbGQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6Zmlyc3RMaW5lQmFzZWxpbmUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6Y29sdW1uQXhpc1Bvc2l0aW9uRm9yQ2hpbGQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6cm93QXhpc1Bvc2l0aW9uRm9yQ2hp
bGQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6Y29sdW1uQXhpc09mZnNl
dEZvckNoaWxkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnJvd0F4aXNP
ZmZzZXRGb3JDaGlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpmaW5k
Q2hpbGRMb2dpY2FsUG9zaXRpb24gY29uc3QpOgorCiAyMDE3LTExLTEzICBaYW4gRG9iZXJzZWsg
IDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBbQ2Fpcm9dIE1vdmUgc3RhdGUgY2hh
bmdlIG9wZXJhdGlvbnMgZnJvbSBHcmFwaGljc0NvbnRleHRDYWlybyB0byBDYWlyb09wZXJhdGlv
bnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQKaW5kZXggMjM5ZDY5OWU2MDU4NmFmZmJkNmJmYzE4ZGI1N2E3Y2JlY2Fm
ZjEwOC4uNzk5Mzg1YjYwYzUxZmYyMDZhOTdiMDBjNTYzOGExNmVjM2RkZGFiNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKQEAgLTE3MjMsNiArMTcyMyw3IEBAIHJlbmRlcmluZy9GbGV4aWJsZUJveEFsZ29yaXRo
bS5jcHAKIHJlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcAogcmVuZGVyaW5nL0Zsb2F0aW5n
T2JqZWN0cy5jcHAKIHJlbmRlcmluZy9HcmlkLmNwcAorcmVuZGVyaW5nL0dyaWRMYXlvdXRVdGls
cy5jcHAKIHJlbmRlcmluZy9HcmlkVHJhY2tTaXppbmdBbGdvcml0aG0uY3BwCiByZW5kZXJpbmcv
SGl0VGVzdExvY2F0aW9uLmNwcAogcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjQ5
MGUwYTBhNmE5NjI3M2M5Njc5ZDc5Y2U4Nzg1NWIxZjViZGRkMi4uZjEwNmJlYjVmNjA0YTQyNTgx
MWQ4M2E5ZDY1MzBkNWRlMjdkOTlkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTA0MjQsNiArMTA0MjQsOCBAQAogCQk5QkY5
QTg3RTE2NDhERDJGMDAxQzZCMjMgLyogSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxGb3JtQ29udHJvbHND
b2xsZWN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOUJGOUE4N0YxNjQ4
REQyRjAwMUM2QjIzIC8qIEpTSFRNTEZvcm1Db250cm9sc0NvbGxlY3Rpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNIVE1MRm9ybUNvbnRyb2xzQ29sbGVjdGlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5RDYzODAwRjFBRjE2RTE2MDAzMUExNUMgLyog
U3R5bGVTZWxmQWxpZ25tZW50RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdHlsZVNlbGZBbGlnbm1lbnREYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTlEQTQyQTk2MUZCQTM5RjAwMEMwRTg0MiAvKiBHcmlkTGF5b3V0VXRpbHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JpZExheW91dFV0aWxzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTlEQTQyQTk4MUZCQTM5RjEwMEMwRTg0MiAvKiBHcmlkTGF5b3V0VXRp
bHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JpZExheW91dFV0
aWxzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOURBQzdDNTIxQUYyQ0FBMTAw
NDM3QzQ0IC8qIENTU0NvbnRlbnREaXN0cmlidXRpb25WYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NDb250ZW50RGlzdHJpYnV0aW9uVmFsdWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5REFDN0M1MzFBRjJDQUExMDA0MzdDNDQgLyog
Q1NTQ29udGVudERpc3RyaWJ1dGlvblZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENTU0NvbnRlbnREaXN0cmlidXRpb25WYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk5REFDN0M1NjFBRjJDQjY0MDA0MzdDNDQgLyogU3R5bGVDb250ZW50QWxpZ25t
ZW50RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZUNvbnRlbnRB
bGlnbm1lbnREYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDc2OCw2ICsy
NDc3MCw4IEBACiAJCQkJOTM1QzQ3NzQwOUFDNEQ4RDAwQTZBQUI0IC8qIEdhcFJlY3RzLmggKi8s
CiAJCQkJRTExMkY0NzAxRTNBODVGMjAwRDZDREZEIC8qIEdyaWQuY3BwICovLAogCQkJCUUxMTJG
NDZGMUUzQTg1RDgwMEQ2Q0RGRCAvKiBHcmlkLmggKi8sCisJCQkJOURBNDJBOTgxRkJBMzlGMTAw
QzBFODQyIC8qIEdyaWRMYXlvdXRVdGlscy5jcHAgKi8sCisJCQkJOURBNDJBOTYxRkJBMzlGMDAw
QzBFODQyIC8qIEdyaWRMYXlvdXRVdGlscy5oICovLAogCQkJCUUxMkRFNzE1MUU0Qjc0ODcwMEY5
QUNDRiAvKiBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG0uY3BwICovLAogCQkJCUUxMkRFNzE2MUU0
Qjc0ODcwMEY5QUNDRiAvKiBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG0uaCAqLywKIAkJCQk0OTY5
QjBGMDEzRDBCMzNGMDBERjM1MjEgLyogSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlLmNwcCAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkTGF5b3V0VXRpbHMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRMYXlvdXRVdGlscy5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMWIwNTA5MTZkNWQ1N2JiZTlhYzk3MjljZDA0YzZhMWI1NTQ4MWMxZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkTGF5b3V0VXRpbHMuY3BwCkBAIC0w
LDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJHcmlkTGF5b3V0VXRpbHMuaCIKKworI2luY2x1ZGUgIkxlbmd0aEZ1bmN0aW9u
cy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0xheW91dFVuaXQgR3JpZExheW91dFV0aWxz
Ojpjb21wdXRlTWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZChjb25zdCBSZW5kZXJHcmlkJiBncmlk
LCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBSZW5kZXJCb3gmIGNo
aWxkKQoreworICAgIGlmICghY2hpbGQuc3R5bGUoKS5oYXNNYXJnaW4oKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBMYXlvdXRVbml0IG1hcmdpblN0YXJ0OworICAgIExheW91dFVuaXQgbWFy
Z2luRW5kOworICAgIGlmIChkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykKKyAgICAgICAgY2hpbGQu
Y29tcHV0ZUlubGluZURpcmVjdGlvbk1hcmdpbnMoZ3JpZCwgY2hpbGQuY29udGFpbmluZ0Jsb2Nr
TG9naWNhbFdpZHRoRm9yQ29udGVudEluRnJhZ21lbnQobnVsbHB0ciksIGNoaWxkLmxvZ2ljYWxX
aWR0aCgpLCBtYXJnaW5TdGFydCwgbWFyZ2luRW5kKTsKKyAgICBlbHNlCisgICAgICAgIGNoaWxk
LmNvbXB1dGVCbG9ja0RpcmVjdGlvbk1hcmdpbnMoZ3JpZCwgbWFyZ2luU3RhcnQsIG1hcmdpbkVu
ZCk7CisKKyAgICByZXR1cm4gbWFyZ2luU3RhcnQgKyBtYXJnaW5FbmQ7Cit9CisKK0xheW91dFVu
aXQgR3JpZExheW91dFV0aWxzOjptYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKGNvbnN0IFJlbmRl
ckdyaWQmIGdyaWQsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IFJl
bmRlckJveCYgY2hpbGQpCit7CisgICAgaWYgKGNoaWxkLm5lZWRzTGF5b3V0KCkpCisgICAgICAg
IHJldHVybiBjb21wdXRlTWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZChncmlkLCBkaXJlY3Rpb24s
IGNoaWxkKTsKKyAgICByZXR1cm4gZmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQoZ3JpZCwgY2hp
bGQsIGRpcmVjdGlvbikgPT0gRm9yQ29sdW1ucyA/IGNoaWxkLm1hcmdpbkxvZ2ljYWxXaWR0aCgp
IDogY2hpbGQubWFyZ2luTG9naWNhbEhlaWdodCgpOworfQorCitib29sIEdyaWRMYXlvdXRVdGls
czo6aXNPcnRob2dvbmFsQ2hpbGQoY29uc3QgUmVuZGVyR3JpZCYgZ3JpZCwgY29uc3QgUmVuZGVy
Qm94JiBjaGlsZCkKK3sKKyAgICByZXR1cm4gY2hpbGQuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSAhPSBncmlkLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCk7Cit9CisKK0dyaWRUcmFja1Npemlu
Z0RpcmVjdGlvbiBHcmlkTGF5b3V0VXRpbHM6OmZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKGNv
bnN0IFJlbmRlckdyaWQmIGdyaWQsIGNvbnN0IFJlbmRlckJveCYgY2hpbGQsIEdyaWRUcmFja1Np
emluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgcmV0dXJuICFpc09ydGhvZ29uYWxDaGls
ZChncmlkLCBjaGlsZCkgPyBkaXJlY3Rpb24gOiAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyBG
b3JSb3dzIDogRm9yQ29sdW1ucyk7Cit9CisKK30gLy8gbmFtZXNwYWNlIGJsaW5rCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZExheW91dFV0aWxzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvR3JpZExheW91dFV0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDk4OTA3NDUz
ODdhZDY1NjMyZWI4NThmMDk1ZGRkYjYwNjQyNDAwOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkTGF5b3V0VXRpbHMuaApAQCAtMCwwICsxLDQxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkxheW91dFVu
aXQuaCIKKyNpbmNsdWRlICJSZW5kZXJHcmlkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgR3JpZExheW91dFV0aWxzIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgTGF5b3V0VW5pdCBj
b21wdXRlTWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZChjb25zdCBSZW5kZXJHcmlkJiwgR3JpZFRy
YWNrU2l6aW5nRGlyZWN0aW9uLCBjb25zdCBSZW5kZXJCb3gmKTsKKyAgICBzdGF0aWMgTGF5b3V0
VW5pdCBtYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKGNvbnN0IFJlbmRlckdyaWQmLCBHcmlkVHJh
Y2tTaXppbmdEaXJlY3Rpb24sIGNvbnN0IFJlbmRlckJveCYpOworICAgIHN0YXRpYyBib29sIGlz
T3J0aG9nb25hbENoaWxkKGNvbnN0IFJlbmRlckdyaWQmLCBjb25zdCBSZW5kZXJCb3gmKTsKKyAg
ICBzdGF0aWMgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGZsb3dBd2FyZURpcmVjdGlvbkZvckNo
aWxkKGNvbnN0IFJlbmRlckdyaWQmLCBjb25zdCBSZW5kZXJCb3gmLCBHcmlkVHJhY2tTaXppbmdE
aXJlY3Rpb24pOworfTsKKworfSAvLyBuYW1lc3BhY2UgYmxpbmsKKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmNwcAppbmRleCAy
OTY5ZWRlNGE3YTdjZTgyMDA5NWU3YzUyY2ZiYjE1NjJhOGY3ZDc0Li4yMTJjNjNmYzdhNjk1MmFl
NGIyZTUwOGE2MjcwZjJkNGMwYzhhNTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmNwcApAQCAtMTEwLDMyICsxMTAsMTEg
QEAgc3RhdGljIHZvaWQgc2V0T3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50U2l6ZUZvckNo
aWxkKFJlbmRlckJveCYgY2hpbGQsIEdyaWQKICAgICAgICAgY2hpbGQuc2V0T3ZlcnJpZGVDb250
YWluaW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodChzaXplKTsKIH0KIAotc3RhdGljIEdyaWRU
cmFja1NpemluZ0RpcmVjdGlvbiBmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChjb25zdCBSZW5k
ZXJHcmlkKiBncmlkLCBjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBHcmlkVHJhY2tTaXppbmdEaXJl
Y3Rpb24gZGlyZWN0aW9uKQotewotICAgIEFTU0VSVChncmlkKTsKLSAgICByZXR1cm4gIWdyaWQt
PmlzT3J0aG9nb25hbENoaWxkKGNoaWxkKSA/IGRpcmVjdGlvbiA6IChkaXJlY3Rpb24gPT0gRm9y
Q29sdW1ucyA/IEZvclJvd3MgOiBGb3JDb2x1bW5zKTsKLX0KLQogc3RhdGljIHN0ZDo6b3B0aW9u
YWw8TGF5b3V0VW5pdD4gb3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50U2l6ZUZvckNoaWxk
KGNvbnN0IFJlbmRlckJveCYgY2hpbGQsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rp
b24pCiB7CiAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gY2hpbGQub3ZlcnJp
ZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoKCkgOiBjaGlsZC5vdmVycmlkZUNv
bnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCk7CiB9CiAKLXN0YXRpYyBMYXlvdXRV
bml0IGNvbXB1dGVNYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKEdyaWRUcmFja1NpemluZ0RpcmVj
dGlvbiBkaXJlY3Rpb24sIGNvbnN0IFJlbmRlckdyaWQmIHJlbmRlckdyaWQsIGNvbnN0IFJlbmRl
ckJveCYgY2hpbGQpCi17Ci0gICAgaWYgKCFjaGlsZC5zdHlsZSgpLmhhc01hcmdpbigpKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIExheW91dFVuaXQgbWFyZ2luU3RhcnQ7Ci0gICAgTGF5b3V0
VW5pdCBtYXJnaW5FbmQ7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKQotICAgICAg
ICBjaGlsZC5jb21wdXRlSW5saW5lRGlyZWN0aW9uTWFyZ2lucyhyZW5kZXJHcmlkLCBjaGlsZC5j
b250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50SW5GcmFnbWVudChudWxscHRyKSwg
Y2hpbGQubG9naWNhbFdpZHRoKCksIG1hcmdpblN0YXJ0LCBtYXJnaW5FbmQpOwotICAgIGVsc2UK
LSAgICAgICAgY2hpbGQuY29tcHV0ZUJsb2NrRGlyZWN0aW9uTWFyZ2lucyhyZW5kZXJHcmlkLCBt
YXJnaW5TdGFydCwgbWFyZ2luRW5kKTsKLQotICAgIHJldHVybiBtYXJnaW5TdGFydCArIG1hcmdp
bkVuZDsKLX0KLQogLy8gRklYTUU6IHdlIGJvcnJvd2VkIHRoaXMgZnJvbSBSZW5kZXJCbG9jay4g
V2UgY2Fubm90IGNhbGwgaXQgZnJvbSBoZXJlIGJlY2F1c2UgaXQncyBwcm90ZWN0ZWQgZm9yIFJl
bmRlck9iamVjdHMuCiBzdGF0aWMgTGF5b3V0VW5pdCBtYXJnaW5JbnRyaW5zaWNMb2dpY2FsV2lk
dGhGb3JDaGlsZChjb25zdCBSZW5kZXJHcmlkKiByZW5kZXJHcmlkLCBSZW5kZXJCb3gmIGNoaWxk
KQogewpAQCAtNTY0LDcgKzU0Myw3IEBAIHZvaWQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpk
aXN0cmlidXRlU3BhY2VUb1RyYWNrcyhWZWN0b3I8R3JpZFRyYWNrKj4mIHRyYWNrCiAKIExheW91
dFVuaXQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjphc3N1bWVkUm93c1NpemVGb3JPcnRob2dv
bmFsQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9y
ZW5kZXJHcmlkLT5pc09ydGhvZ29uYWxDaGlsZChjaGlsZCkpOworICAgIEFTU0VSVChHcmlkTGF5
b3V0VXRpbHM6OmlzT3J0aG9nb25hbENoaWxkKCptX3JlbmRlckdyaWQsIGNoaWxkKSk7CiAgICAg
Y29uc3QgR3JpZFNwYW4mIHNwYW4gPSBtX2dyaWQuZ3JpZEl0ZW1TcGFuKGNoaWxkLCBGb3JSb3dz
KTsKICAgICBMYXlvdXRVbml0IGdyaWRBcmVhU2l6ZTsKICAgICBib29sIGdyaWRBcmVhSXNJbmRl
ZmluaXRlID0gZmFsc2U7CkBAIC03MjIsNyArNzAxLDcgQEAgdm9pZCBHcmlkVHJhY2tTaXppbmdB
bGdvcml0aG06OmNvbXB1dGVHcmlkQ29udGFpbmVySW50cmluc2ljU2l6ZXMoKQogLy8gR3JpZFRy
YWNrU2l6aW5nQWxnb3JpdGhtU3RyYXRlZ3kuCiBMYXlvdXRVbml0IEdyaWRUcmFja1NpemluZ0Fs
Z29yaXRobVN0cmF0ZWd5Ojpsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCkg
Y29uc3QKIHsKLSAgICBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gY2hpbGRCbG9ja0RpcmVjdGlv
biA9IGZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKHJlbmRlckdyaWQoKSwgY2hpbGQsIEZvclJv
d3MpOworICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBjaGlsZEJsb2NrRGlyZWN0aW9uID0g
R3JpZExheW91dFV0aWxzOjpmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZCgqcmVuZGVyR3JpZCgp
LCBjaGlsZCwgRm9yUm93cyk7CiAgICAgLy8gSWYgfGNoaWxkfCBoYXMgYSByZWxhdGl2ZSBsb2dp
Y2FsIGhlaWdodCwgd2Ugc2hvdWxkbid0IGxldCBpdCBvdmVycmlkZSBpdHMgaW50cmluc2ljIGhl
aWdodCwgd2hpY2ggaXMKICAgICAvLyB3aGF0IHdlIGFyZSBpbnRlcmVzdGVkIGluIGhlcmUuIFRo
dXMgd2UgbmVlZCB0byBzZXQgdGhlIGJsb2NrLWF4aXMgb3ZlcnJpZGUgc2l6ZSB0byAtMSAobm8g
cG9zc2libGUgcmVzb2x1dGlvbikuCiAgICAgaWYgKHNob3VsZENsZWFyT3ZlcnJpZGVDb250YWlu
aW5nQmxvY2tDb250ZW50U2l6ZUZvckNoaWxkKGNoaWxkLCBGb3JSb3dzKSkgewpAQCAtNzM1LDE3
ICs3MTQsMTYgQEAgTGF5b3V0VW5pdCBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG1TdHJhdGVneTo6
bG9naWNhbEhlaWdodEZvckNoaWxkKFJlbmRlckJveCYgY2gKICAgICAgICAgY2hpbGQuY2xlYXJP
dmVycmlkZUxvZ2ljYWxDb250ZW50SGVpZ2h0KCk7CiAKICAgICBjaGlsZC5sYXlvdXRJZk5lZWRl
ZCgpOwotICAgIHJldHVybiBjaGlsZC5sb2dpY2FsSGVpZ2h0KCkgKyBjaGlsZC5tYXJnaW5Mb2dp
Y2FsSGVpZ2h0KCk7CisgICAgcmV0dXJuIGNoaWxkLmxvZ2ljYWxIZWlnaHQoKSArIEdyaWRMYXlv
dXRVdGlsczo6bWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZCgqcmVuZGVyR3JpZCgpLCBjaGlsZEJs
b2NrRGlyZWN0aW9uLCBjaGlsZCk7CiB9CiAKIExheW91dFVuaXQgR3JpZFRyYWNrU2l6aW5nQWxn
b3JpdGhtU3RyYXRlZ3k6Om1pbkNvbnRlbnRGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkKSBjb25z
dAogewotICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBjaGlsZElubGluZURpcmVjdGlvbiA9
IGZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKHJlbmRlckdyaWQoKSwgY2hpbGQsIEZvckNvbHVt
bnMpOworICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBjaGlsZElubGluZURpcmVjdGlvbiA9
IEdyaWRMYXlvdXRVdGlsczo6Zmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQoKnJlbmRlckdyaWQo
KSwgY2hpbGQsIEZvckNvbHVtbnMpOwogICAgIGlmIChkaXJlY3Rpb24oKSA9PSBjaGlsZElubGlu
ZURpcmVjdGlvbikgewogICAgICAgICAvLyBGSVhNRTogSXQncyB1bmNsZWFyIGlmIHdlIHNob3Vs
ZCByZXR1cm4gdGhlIGludHJpbnNpYyB3aWR0aCBvciB0aGUgcHJlZmVycmVkIHdpZHRoLgogICAg
ICAgICAvLyBTZWUgaHR0cDovL2xpc3RzLnczLm9yZy9BcmNoaXZlcy9QdWJsaWMvd3d3LXN0eWxl
LzIwMTNKYW4vMDI0NS5odG1sCi0gICAgICAgIExheW91dFVuaXQgbWFyZ2luTG9naWNhbFdpZHRo
ID0gY2hpbGQubmVlZHNMYXlvdXQoKSA/IGNvbXB1dGVNYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxk
KGNoaWxkSW5saW5lRGlyZWN0aW9uLCAqcmVuZGVyR3JpZCgpLCBjaGlsZCkgOiBjaGlsZC5tYXJn
aW5Mb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgcmV0dXJuIGNoaWxkLm1pblByZWZlcnJlZExvZ2lj
YWxXaWR0aCgpICsgbWFyZ2luTG9naWNhbFdpZHRoOworICAgICAgICByZXR1cm4gY2hpbGQubWlu
UHJlZmVycmVkTG9naWNhbFdpZHRoKCkgKyBHcmlkTGF5b3V0VXRpbHM6Om1hcmdpbkxvZ2ljYWxT
aXplRm9yQ2hpbGQoKnJlbmRlckdyaWQoKSwgY2hpbGRJbmxpbmVEaXJlY3Rpb24sIGNoaWxkKTsK
ICAgICB9CiAKICAgICBpZiAodXBkYXRlT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50U2l6
ZUZvckNoaWxkKGNoaWxkLCBjaGlsZElubGluZURpcmVjdGlvbikpCkBAIC03NTUsMTIgKzczMywx
MSBAQCBMYXlvdXRVbml0IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobVN0cmF0ZWd5OjptaW5Db250
ZW50Rm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZAogCiBMYXlvdXRVbml0IEdyaWRUcmFja1Npemlu
Z0FsZ29yaXRobVN0cmF0ZWd5OjptYXhDb250ZW50Rm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCkg
Y29uc3QKIHsKLSAgICBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gY2hpbGRJbmxpbmVEaXJlY3Rp
b24gPSBmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChyZW5kZXJHcmlkKCksIGNoaWxkLCBGb3JD
b2x1bW5zKTsKKyAgICBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gY2hpbGRJbmxpbmVEaXJlY3Rp
b24gPSBHcmlkTGF5b3V0VXRpbHM6OmZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKCpyZW5kZXJH
cmlkKCksIGNoaWxkLCBGb3JDb2x1bW5zKTsKICAgICBpZiAoZGlyZWN0aW9uKCkgPT0gY2hpbGRJ
bmxpbmVEaXJlY3Rpb24pIHsKICAgICAgICAgLy8gRklYTUU6IEl0J3MgdW5jbGVhciBpZiB3ZSBz
aG91bGQgcmV0dXJuIHRoZSBpbnRyaW5zaWMgd2lkdGggb3IgdGhlIHByZWZlcnJlZCB3aWR0aC4K
ICAgICAgICAgLy8gU2VlIGh0dHA6Ly9saXN0cy53My5vcmcvQXJjaGl2ZXMvUHVibGljL3d3dy1z
dHlsZS8yMDEzSmFuLzAyNDUuaHRtbAotICAgICAgICBMYXlvdXRVbml0IG1hcmdpbkxvZ2ljYWxX
aWR0aCA9IGNoaWxkLm5lZWRzTGF5b3V0KCkgPyBjb21wdXRlTWFyZ2luTG9naWNhbFNpemVGb3JD
aGlsZChjaGlsZElubGluZURpcmVjdGlvbiwgKnJlbmRlckdyaWQoKSwgY2hpbGQpIDogY2hpbGQu
bWFyZ2luTG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIHJldHVybiBjaGlsZC5tYXhQcmVmZXJyZWRM
b2dpY2FsV2lkdGgoKSArIG1hcmdpbkxvZ2ljYWxXaWR0aDsKKyAgICAgICAgcmV0dXJuIGNoaWxk
Lm1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpICsgR3JpZExheW91dFV0aWxzOjptYXJnaW5Mb2dp
Y2FsU2l6ZUZvckNoaWxkKCpyZW5kZXJHcmlkKCksIGNoaWxkSW5saW5lRGlyZWN0aW9uLCBjaGls
ZCk7CiAgICAgfQogCiAgICAgaWYgKHVwZGF0ZU92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVu
dFNpemVGb3JDaGlsZChjaGlsZCwgY2hpbGRJbmxpbmVEaXJlY3Rpb24pKQpAQCAtNzcwLDcgKzc0
Nyw3IEBAIExheW91dFVuaXQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtU3RyYXRlZ3k6Om1heENv
bnRlbnRGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkCiAKIExheW91dFVuaXQgR3JpZFRyYWNrU2l6
aW5nQWxnb3JpdGhtU3RyYXRlZ3k6Om1pblNpemVGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkKSBj
b25zdAogewotICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBjaGlsZElubGluZURpcmVjdGlv
biA9IGZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKHJlbmRlckdyaWQoKSwgY2hpbGQsIEZvckNv
bHVtbnMpOworICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBjaGlsZElubGluZURpcmVjdGlv
biA9IEdyaWRMYXlvdXRVdGlsczo6Zmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQoKnJlbmRlckdy
aWQoKSwgY2hpbGQsIEZvckNvbHVtbnMpOwogICAgIGJvb2wgaXNSb3dBeGlzID0gZGlyZWN0aW9u
KCkgPT0gY2hpbGRJbmxpbmVEaXJlY3Rpb247CiAgICAgY29uc3QgTGVuZ3RoJiBjaGlsZE1pblNp
emUgPSBpc1Jvd0F4aXMgPyBjaGlsZC5zdHlsZSgpLmxvZ2ljYWxNaW5XaWR0aCgpIDogY2hpbGQu
c3R5bGUoKS5sb2dpY2FsTWluSGVpZ2h0KCk7CiAgICAgY29uc3QgTGVuZ3RoJiBjaGlsZFNpemUg
PSBpc1Jvd0F4aXMgPyBjaGlsZC5zdHlsZSgpLmxvZ2ljYWxXaWR0aCgpIDogY2hpbGQuc3R5bGUo
KS5sb2dpY2FsSGVpZ2h0KCk7CkBAIC05MTMsNyArODkwLDcgQEAgcHJpdmF0ZToKIExheW91dFVu
aXQgRGVmaW5pdGVTaXplU3RyYXRlZ3k6Om1pbkxvZ2ljYWxXaWR0aEZvckNoaWxkKFJlbmRlckJv
eCYgY2hpbGQsIExlbmd0aCBjaGlsZE1pblNpemUsIExheW91dFVuaXQgYXZhaWxhYmxlU2l6ZSkg
Y29uc3QKIHsKICAgICBMYXlvdXRVbml0IG1hcmdpbkxvZ2ljYWxXaWR0aCA9Ci0gICAgICAgIGNv
bXB1dGVNYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKGZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxk
KHJlbmRlckdyaWQoKSwgY2hpbGQsIEZvckNvbHVtbnMpLCAqcmVuZGVyR3JpZCgpLCBjaGlsZCk7
CisgICAgICAgIEdyaWRMYXlvdXRVdGlsczo6Y29tcHV0ZU1hcmdpbkxvZ2ljYWxTaXplRm9yQ2hp
bGQoKnJlbmRlckdyaWQoKSwgR3JpZExheW91dFV0aWxzOjpmbG93QXdhcmVEaXJlY3Rpb25Gb3JD
aGlsZCgqcmVuZGVyR3JpZCgpLCBjaGlsZCwgRm9yQ29sdW1ucyksIGNoaWxkKTsKICAgICByZXR1
cm4gY2hpbGQuY29tcHV0ZUxvZ2ljYWxXaWR0aEluRnJhZ21lbnRVc2luZyhNaW5TaXplLCBjaGls
ZE1pblNpemUsIGF2YWlsYWJsZVNpemUsICpyZW5kZXJHcmlkKCksIG51bGxwdHIpICsgbWFyZ2lu
TG9naWNhbFdpZHRoOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyR3JpZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAK
aW5kZXggOWE2ODFmYjg4NTMzNDNiMTI3NWVkZGZkZDA2ZWQ5NWNlM2UyNzdiNi4uMmZiODE0NmE5
YWIzODMxMGU4ZGEwYjY1MTYyMzI0NTE5ZDRlZTAzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJHcmlkLmNwcApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIlJlbmRlckdyaWQu
aCIKIAogI2luY2x1ZGUgIkdyaWRBcmVhLmgiCisjaW5jbHVkZSAiR3JpZExheW91dFV0aWxzLmgi
CiAjaW5jbHVkZSAiR3JpZFBvc2l0aW9uc1Jlc29sdmVyLmgiCiAjaW5jbHVkZSAiR3JpZFRyYWNr
U2l6aW5nQWxnb3JpdGhtLmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVwYWludGVyLmgiCkBAIC0yNDcs
NyArMjQ4LDcgQEAgdm9pZCBSZW5kZXJHcmlkOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hp
bGRyZW4sIExheW91dFVuaXQpCiAgICAgICAgIC8vIHNhbWUgcmVzdWx0IHdoZW4gZ3JpZCdzIGlu
dHJpbnNpYyBzaXplIGlzIGNvbXB1dGVkIGFnYWluIGluIHRoZSB1cGRhdGVMb2dpY2FsV2lkdGgg
Y2FsbCBiZWxsb3cuCiAgICAgICAgIGlmIChzaXplc0xvZ2ljYWxXaWR0aFRvRml0Q29udGVudChN
YXhTaXplKSB8fCBzdHlsZSgpLmxvZ2ljYWxXaWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpIHsK
ICAgICAgICAgICAgIGZvciAoYXV0byogY2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNo
aWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCAhaXNPcnRob2dvbmFsQ2hpbGQoKmNoaWxk
KSkKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8
ICFHcmlkTGF5b3V0VXRpbHM6OmlzT3J0aG9nb25hbENoaWxkKCp0aGlzLCAqY2hpbGQpKQogICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBjaGlsZC0+Y2xlYXJP
dmVycmlkZVNpemUoKTsKICAgICAgICAgICAgICAgICBjaGlsZC0+Y2xlYXJDb250YWluaW5nQmxv
Y2tPdmVycmlkZVNpemUoKTsKQEAgLTQ2NywxNiArNDY4LDYgQEAgc3RhdGljIHN0ZDo6b3B0aW9u
YWw8TGF5b3V0VW5pdD4gb3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50U2l6ZUZvckNoaWxk
KGNvbnMKICAgICByZXR1cm4gZGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyBjaGlsZC5vdmVycmlk
ZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGgoKSA6IGNoaWxkLm92ZXJyaWRlQ29u
dGFpbmluZ0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQoKTsKIH0KIAotYm9vbCBSZW5kZXJHcmlk
Ojppc09ydGhvZ29uYWxDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAotewotICAg
IHJldHVybiBjaGlsZC5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICE9IGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCk7Ci19Ci0KLUdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBSZW5kZXJHcmlkOjpm
bG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBHcmlkVHJh
Y2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdAotewotICAgIHJldHVybiAhaXNPcnRo
b2dvbmFsQ2hpbGQoY2hpbGQpID8gZGlyZWN0aW9uIDogKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5z
ID8gRm9yUm93cyA6IEZvckNvbHVtbnMpOwotfQotCiB1bnNpZ25lZCBSZW5kZXJHcmlkOjpjb21w
dXRlQXV0b1JlcGVhdFRyYWNrc0NvdW50KEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rp
b24sIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gYXZhaWxhYmxlU2l6ZSkgY29uc3QKIHsKICAg
ICBBU1NFUlQoIWF2YWlsYWJsZVNpemUgfHwgYXZhaWxhYmxlU2l6ZS52YWx1ZSgpICE9IC0xKTsK
QEAgLTYyNiw3ICs2MTcsNyBAQCB2b2lkIFJlbmRlckdyaWQ6OnBsYWNlSXRlbXNPbkdyaWQoR3Jp
ZCYgZ3JpZCwgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBhdmFpbGFibAogICAgICAgICBpZiAo
Z3JpZC5vcmRlckl0ZXJhdG9yKCkuc2hvdWxkU2tpcENoaWxkKCpjaGlsZCkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICBoYXNBbnlPcnRob2dvbmFsR3JpZEl0ZW0gPSBoYXNBbnlP
cnRob2dvbmFsR3JpZEl0ZW0gfHwgaXNPcnRob2dvbmFsQ2hpbGQoKmNoaWxkKTsKKyAgICAgICAg
aGFzQW55T3J0aG9nb25hbEdyaWRJdGVtID0gaGFzQW55T3J0aG9nb25hbEdyaWRJdGVtIHx8IEdy
aWRMYXlvdXRVdGlsczo6aXNPcnRob2dvbmFsQ2hpbGQoKnRoaXMsICpjaGlsZCk7CiAKICAgICAg
ICAgR3JpZEFyZWEgYXJlYSA9IGdyaWQuZ3JpZEl0ZW1BcmVhKCpjaGlsZCk7CiAgICAgICAgIGlm
ICghYXJlYS5yb3dzLmlzSW5kZWZpbml0ZSgpKQpAQCAtOTY4LDcgKzk1OSw3IEBAIHZvaWQgUmVu
ZGVyR3JpZDo6bGF5b3V0UG9zaXRpb25lZE9iamVjdChSZW5kZXJCb3gmIGNoaWxkLCBib29sIHJl
bGF5b3V0Q2hpbGRyZW4sCiAgICAgLy8gRklYTUU6IElmIHBvc3NpYmxlIGl0J2QgYmUgbmljZSB0
byBhdm9pZCB0aGlzIGxheW91dCBoZXJlIHdoZW4gaXQncyBub3QgbmVlZGVkLgogICAgIFJlbmRl
ckJsb2NrOjpsYXlvdXRQb3NpdGlvbmVkT2JqZWN0KGNoaWxkLCByZWxheW91dENoaWxkcmVuLCBm
aXhlZFBvc2l0aW9uT2JqZWN0c09ubHkpOwogCi0gICAgYm9vbCBpc09ydGhvZ29uYWwgPSBpc09y
dGhvZ29uYWxDaGlsZChjaGlsZCk7CisgICAgYm9vbCBpc09ydGhvZ29uYWwgPSBHcmlkTGF5b3V0
VXRpbHM6OmlzT3J0aG9nb25hbENoaWxkKCp0aGlzLCBjaGlsZCk7CiAgICAgTGF5b3V0VW5pdCBs
b2dpY2FsTGVmdCA9IGNoaWxkLmxvZ2ljYWxMZWZ0KCkgKyAoaXNPcnRob2dvbmFsID8gcm93T2Zm
c2V0IDogY29sdW1uT2Zmc2V0KTsKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3AgPSBjaGlsZC5s
b2dpY2FsVG9wKCkgKyAoaXNPcnRob2dvbmFsID8gY29sdW1uT2Zmc2V0IDogcm93T2Zmc2V0KTsK
ICAgICBjaGlsZC5zZXRMb2dpY2FsTG9jYXRpb24oTGF5b3V0UG9pbnQobG9naWNhbExlZnQsIGxv
Z2ljYWxUb3ApKTsKQEAgLTExNDYsMzMgKzExMzcsMTMgQEAgc3RhdGljIExheW91dFVuaXQgY29t
cHV0ZU92ZXJmbG93QWxpZ25tZW50T2Zmc2V0KE92ZXJmbG93QWxpZ25tZW50IG92ZXJmbG93LCBM
YXkKICAgICByZXR1cm4gMDsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJHcmlkOjptYXJnaW5Mb2dp
Y2FsU2l6ZUZvckNoaWxkKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0
IFJlbmRlckJveCYgY2hpbGQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZsb3dBd2FyZURpcmVjdGlv
bkZvckNoaWxkKGNoaWxkLCBkaXJlY3Rpb24pID09IEZvckNvbHVtbnMgPyBjaGlsZC5tYXJnaW5M
b2dpY2FsV2lkdGgoKSA6IGNoaWxkLm1hcmdpbkxvZ2ljYWxIZWlnaHQoKTsKLX0KLQotTGF5b3V0
VW5pdCBSZW5kZXJHcmlkOjpjb21wdXRlTWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZChHcmlkVHJh
Y2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBSZW5kZXJCb3gmIGNoaWxkKSBjb25z
dAotewotICAgIGlmICghY2hpbGQuc3R5bGUoKS5oYXNNYXJnaW4oKSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0KLSAgICBMYXlvdXRVbml0IG1hcmdpblN0YXJ0OwotICAgIExheW91dFVuaXQgbWFyZ2lu
RW5kOwotICAgIGlmIChkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykKLSAgICAgICAgY2hpbGQuY29t
cHV0ZUlubGluZURpcmVjdGlvbk1hcmdpbnMoKnRoaXMsIGNoaWxkLmNvbnRhaW5pbmdCbG9ja0xv
Z2ljYWxXaWR0aEZvckNvbnRlbnRJbkZyYWdtZW50KG51bGxwdHIpLCBjaGlsZC5sb2dpY2FsV2lk
dGgoKSwgbWFyZ2luU3RhcnQsIG1hcmdpbkVuZCk7Ci0gICAgZWxzZQotICAgICAgICBjaGlsZC5j
b21wdXRlQmxvY2tEaXJlY3Rpb25NYXJnaW5zKCp0aGlzLCBtYXJnaW5TdGFydCwgbWFyZ2luRW5k
KTsKLQotICAgIHJldHVybiBtYXJnaW5TdGFydCArIG1hcmdpbkVuZDsKLX0KLQogTGF5b3V0VW5p
dCBSZW5kZXJHcmlkOjphdmFpbGFibGVBbGlnbm1lbnRTcGFjZUZvckNoaWxkQmVmb3JlU3RyZXRj
aGluZyhMYXlvdXRVbml0IGdyaWRBcmVhQnJlYWR0aEZvckNoaWxkLCBjb25zdCBSZW5kZXJCb3gm
IGNoaWxkKSBjb25zdAogewogICAgIC8vIEJlY2F1c2Ugd2Ugd2FudCB0byBhdm9pZCBtdWx0aXBs
ZSBsYXlvdXRzLCBzdHJldGNoaW5nIGxvZ2ljIG1pZ2h0IGJlIHBlcmZvcm1lZCBiZWZvcmUKICAg
ICAvLyBjaGlsZHJlbiBhcmUgbGFpZCBvdXQsIHNvIHdlIGNhbid0IHVzZSB0aGUgY2hpbGQgY2Fj
aGVkIHZhbHVlcy4gSGVuY2UsIHdlIG5lZWQgdG8KICAgICAvLyBjb21wdXRlIG1hcmdpbnMgaW4g
b3JkZXIgdG8gZGV0ZXJtaW5lIHRoZSBhdmFpbGFibGUgaGVpZ2h0IGJlZm9yZSBzdHJldGNoaW5n
LgotICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBjaGlsZEJsb2NrRmxvd0RpcmVjdGlvbiA9
IGZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKGNoaWxkLCBGb3JSb3dzKTsKLSAgICByZXR1cm4g
Z3JpZEFyZWFCcmVhZHRoRm9yQ2hpbGQgLSAoY2hpbGQubmVlZHNMYXlvdXQoKSA/IGNvbXB1dGVN
YXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKGNoaWxkQmxvY2tGbG93RGlyZWN0aW9uLCBjaGlsZCkg
OiBtYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKGNoaWxkQmxvY2tGbG93RGlyZWN0aW9uLCBjaGls
ZCkpOworICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBjaGlsZEJsb2NrRmxvd0RpcmVjdGlv
biA9IEdyaWRMYXlvdXRVdGlsczo6Zmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQoKnRoaXMsIGNo
aWxkLCBGb3JSb3dzKTsKKyAgICByZXR1cm4gZ3JpZEFyZWFCcmVhZHRoRm9yQ2hpbGQgLSBHcmlk
TGF5b3V0VXRpbHM6Om1hcmdpbkxvZ2ljYWxTaXplRm9yQ2hpbGQoKnRoaXMsIGNoaWxkQmxvY2tG
bG93RGlyZWN0aW9uLCBjaGlsZCk7CiB9CiAKIFN0eWxlU2VsZkFsaWdubWVudERhdGEgUmVuZGVy
R3JpZDo6YWxpZ25TZWxmRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCwgY29uc3QgUmVu
ZGVyU3R5bGUqIGdyaWRTdHlsZSkgY29uc3QKQEAgLTExOTgsNyArMTE2OSw3IEBAIHZvaWQgUmVu
ZGVyR3JpZDo6YXBwbHlTdHJldGNoQWxpZ25tZW50VG9DaGlsZElmTmVlZGVkKFJlbmRlckJveCYg
Y2hpbGQpCiAgICAgLy8gbm90LCBldmFsdWF0aW5nIHRoZSBjb25kaXRpb25zIHdoaWNoIG1pZ2h0
IGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgb2xkIHZhbHVlcyB3ZXJlIHNldC4KICAgICBjaGlsZC5j
bGVhck92ZXJyaWRlTG9naWNhbENvbnRlbnRIZWlnaHQoKTsKIAotICAgIEdyaWRUcmFja1Npemlu
Z0RpcmVjdGlvbiBjaGlsZEJsb2NrRGlyZWN0aW9uID0gZmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hp
bGQoY2hpbGQsIEZvclJvd3MpOworICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBjaGlsZEJs
b2NrRGlyZWN0aW9uID0gR3JpZExheW91dFV0aWxzOjpmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGls
ZCgqdGhpcywgY2hpbGQsIEZvclJvd3MpOwogICAgIGJvb2wgYmxvY2tGbG93SXNDb2x1bW5BeGlz
ID0gY2hpbGRCbG9ja0RpcmVjdGlvbiA9PSBGb3JSb3dzOwogICAgIGJvb2wgYWxsb3dlZFRvU3Ry
ZXRjaENoaWxkQmxvY2tTaXplID0gYmxvY2tGbG93SXNDb2x1bW5BeGlzID8gYWxsb3dlZFRvU3Ry
ZXRjaENoaWxkQWxvbmdDb2x1bW5BeGlzKGNoaWxkKSA6IGFsbG93ZWRUb1N0cmV0Y2hDaGlsZEFs
b25nUm93QXhpcyhjaGlsZCk7CiAgICAgaWYgKGFsbG93ZWRUb1N0cmV0Y2hDaGlsZEJsb2NrU2l6
ZSkgewpAQCAtMTI4MSw3ICsxMjUyLDcgQEAgc3RhdGljIGludCBzeW50aGVzaXplZEJhc2VsaW5l
RnJvbUJvcmRlckJveChjb25zdCBSZW5kZXJCb3gmIGJveCwgTGluZURpcmVjdGlvbk0KIAogYm9v
bCBSZW5kZXJHcmlkOjppc0lubGluZUJhc2VsaW5lQWxpZ25lZENoaWxkKGNvbnN0IFJlbmRlckJv
eCYgY2hpbGQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFsaWduU2VsZkZvckNoaWxkKGNoaWxkKS5w
b3NpdGlvbigpID09IEl0ZW1Qb3NpdGlvbkJhc2VsaW5lICYmICFpc09ydGhvZ29uYWxDaGlsZChj
aGlsZCkgJiYgIWhhc0F1dG9NYXJnaW5zSW5Db2x1bW5BeGlzKGNoaWxkKTsKKyAgICByZXR1cm4g
YWxpZ25TZWxmRm9yQ2hpbGQoY2hpbGQpLnBvc2l0aW9uKCkgPT0gSXRlbVBvc2l0aW9uQmFzZWxp
bmUgJiYgIUdyaWRMYXlvdXRVdGlsczo6aXNPcnRob2dvbmFsQ2hpbGQoKnRoaXMsIGNoaWxkKSAm
JiAhaGFzQXV0b01hcmdpbnNJbkNvbHVtbkF4aXMoY2hpbGQpOwogfQogCiAvLyBGSVhNRTogVGhp
cyBsb2dpYyBpcyBzaGFyZWQgYnkgUmVuZGVyRmxleGlibGVCb3gsIHNvIGl0IG1pZ2h0IGJlIHJl
ZmFjdG9yZWQgc29tZWhvdy4KQEAgLTEzMjIsNyArMTI5Myw3IEBAIHN0ZDo6b3B0aW9uYWw8aW50
PiBSZW5kZXJHcmlkOjpmaXJzdExpbmVCYXNlbGluZSgpIGNvbnN0CiAgICAgaWYgKCFiYXNlbGlu
ZUNoaWxkKQogICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogCi0gICAgYXV0byBiYXNlbGlu
ZSA9IGlzT3J0aG9nb25hbENoaWxkKCpiYXNlbGluZUNoaWxkKSA/IHN0ZDo6bnVsbG9wdCA6IGJh
c2VsaW5lQ2hpbGQtPmZpcnN0TGluZUJhc2VsaW5lKCk7CisgICAgYXV0byBiYXNlbGluZSA9IEdy
aWRMYXlvdXRVdGlsczo6aXNPcnRob2dvbmFsQ2hpbGQoKnRoaXMsICpiYXNlbGluZUNoaWxkKSA/
IHN0ZDo6bnVsbG9wdCA6IGJhc2VsaW5lQ2hpbGQtPmZpcnN0TGluZUJhc2VsaW5lKCk7CiAgICAg
Ly8gV2UgdGFrZSBib3JkZXItYm94J3MgYm90dG9tIGlmIG5vIHZhbGlkIGJhc2VsaW5lLgogICAg
IGlmICghYmFzZWxpbmUpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwYXNzIHxkaXJl
Y3Rpb258IGludG8gZmlyc3RMaW5lQmFzZWxpbmUgYW5kIHN0b3AgYmFpbGluZyBvdXQgaWYgd2Un
cmUgYSB3cml0aW5nCkBAIC0xMzUyLDcgKzEzMjMsNyBAQCBHcmlkQXhpc1Bvc2l0aW9uIFJlbmRl
ckdyaWQ6OmNvbHVtbkF4aXNQb3NpdGlvbkZvckNoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQp
CiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgaW1wbGVtZW50IHRoaXMgbG9naWMgaW4gYSBn
ZW5lcmljIHV0aWxpdHkgZnVuY3Rpb24gPwogICAgICAgICAvLyBBbGlnbnMgdGhlIGFsaWdubWVu
dCBzdWJqZWN0IHRvIGJlIGZsdXNoIHdpdGggdGhlIGVkZ2Ugb2YgdGhlIGFsaWdubWVudCBjb250
YWluZXIKICAgICAgICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgYWxpZ25tZW50IHN1YmplY3Qn
cyAnc3RhcnQnIHNpZGUgaW4gdGhlIGNvbHVtbiBheGlzLgotICAgICAgICBpZiAoaXNPcnRob2dv
bmFsQ2hpbGQoY2hpbGQpKSB7CisgICAgICAgIGlmIChHcmlkTGF5b3V0VXRpbHM6OmlzT3J0aG9n
b25hbENoaWxkKCp0aGlzLCBjaGlsZCkpIHsKICAgICAgICAgICAgIC8vIElmIG9ydGhvZ29uYWwg
d3JpdGluZy1tb2Rlcywgc2VsZi1zdGFydCB3aWxsIGJlIGJhc2VkIG9uIHRoZSBjaGlsZCdzIGlu
bGluZS1heGlzCiAgICAgICAgICAgICAvLyBkaXJlY3Rpb24gKGlubGluZS1zdGFydCksIGJlY2F1
c2UgaXQncyB0aGUgb25lIHBhcmFsbGVsIHRvIHRoZSBjb2x1bW4gYXhpcy4KICAgICAgICAgICAg
IGlmIChzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpCkBAIC0xMzY1LDcgKzEz
MzYsNyBAQCBHcmlkQXhpc1Bvc2l0aW9uIFJlbmRlckdyaWQ6OmNvbHVtbkF4aXNQb3NpdGlvbkZv
ckNoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQpCiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQg
d2UgaW1wbGVtZW50IHRoaXMgbG9naWMgaW4gYSBnZW5lcmljIHV0aWxpdHkgZnVuY3Rpb24gPwog
ICAgICAgICAvLyBBbGlnbnMgdGhlIGFsaWdubWVudCBzdWJqZWN0IHRvIGJlIGZsdXNoIHdpdGgg
dGhlIGVkZ2Ugb2YgdGhlIGFsaWdubWVudCBjb250YWluZXIKICAgICAgICAgLy8gY29ycmVzcG9u
ZGluZyB0byB0aGUgYWxpZ25tZW50IHN1YmplY3QncyAnZW5kJyBzaWRlIGluIHRoZSBjb2x1bW4g
YXhpcy4KLSAgICAgICAgaWYgKGlzT3J0aG9nb25hbENoaWxkKGNoaWxkKSkgeworICAgICAgICBp
ZiAoR3JpZExheW91dFV0aWxzOjppc09ydGhvZ29uYWxDaGlsZCgqdGhpcywgY2hpbGQpKSB7CiAg
ICAgICAgICAgICAvLyBJZiBvcnRob2dvbmFsIHdyaXRpbmctbW9kZXMsIHNlbGYtZW5kIHdpbGwg
YmUgYmFzZWQgb24gdGhlIGNoaWxkJ3MgaW5saW5lLWF4aXMKICAgICAgICAgICAgIC8vIGRpcmVj
dGlvbiwgKGlubGluZS1lbmQpIGJlY2F1c2UgaXQncyB0aGUgb25lIHBhcmFsbGVsIHRvIHRoZSBj
b2x1bW4gYXhpcy4KICAgICAgICAgICAgIGlmIChzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRp
bmdNb2RlKCkpCkBAIC0xNDE3LDcgKzEzODgsNyBAQCBHcmlkQXhpc1Bvc2l0aW9uIFJlbmRlckdy
aWQ6OnJvd0F4aXNQb3NpdGlvbkZvckNoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQpIGNvbgog
ICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGltcGxlbWVudCB0aGlzIGxvZ2ljIGluIGEgZ2Vu
ZXJpYyB1dGlsaXR5IGZ1bmN0aW9uID8KICAgICAgICAgLy8gQWxpZ25zIHRoZSBhbGlnbm1lbnQg
c3ViamVjdCB0byBiZSBmbHVzaCB3aXRoIHRoZSBlZGdlIG9mIHRoZSBhbGlnbm1lbnQgY29udGFp
bmVyCiAgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFsaWdubWVudCBzdWJqZWN0J3Mg
J3N0YXJ0JyBzaWRlIGluIHRoZSByb3cgYXhpcy4KLSAgICAgICAgaWYgKGlzT3J0aG9nb25hbENo
aWxkKGNoaWxkKSkgeworICAgICAgICBpZiAoR3JpZExheW91dFV0aWxzOjppc09ydGhvZ29uYWxD
aGlsZCgqdGhpcywgY2hpbGQpKSB7CiAgICAgICAgICAgICAvLyBJZiBvcnRob2dvbmFsIHdyaXRp
bmctbW9kZXMsIHNlbGYtc3RhcnQgd2lsbCBiZSBiYXNlZCBvbiB0aGUgY2hpbGQncyBibG9jay1h
eGlzCiAgICAgICAgICAgICAvLyBkaXJlY3Rpb24sIGJlY2F1c2UgaXQncyB0aGUgb25lIHBhcmFs
bGVsIHRvIHRoZSByb3cgYXhpcy4KICAgICAgICAgICAgIGlmIChjaGlsZC5zdHlsZSgpLmlzRmxp
cHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpCkBAIC0xNDMwLDcgKzE0MDEsNyBAQCBHcmlkQXhpc1Bv
c2l0aW9uIFJlbmRlckdyaWQ6OnJvd0F4aXNQb3NpdGlvbkZvckNoaWxkKGNvbnN0IFJlbmRlckJv
eCYgY2hpbGQpIGNvbgogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGltcGxlbWVudCB0aGlz
IGxvZ2ljIGluIGEgZ2VuZXJpYyB1dGlsaXR5IGZ1bmN0aW9uID8KICAgICAgICAgLy8gQWxpZ25z
IHRoZSBhbGlnbm1lbnQgc3ViamVjdCB0byBiZSBmbHVzaCB3aXRoIHRoZSBlZGdlIG9mIHRoZSBh
bGlnbm1lbnQgY29udGFpbmVyCiAgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGFsaWdu
bWVudCBzdWJqZWN0J3MgJ2VuZCcgc2lkZSBpbiB0aGUgcm93IGF4aXMuCi0gICAgICAgIGlmIChp
c09ydGhvZ29uYWxDaGlsZChjaGlsZCkpIHsKKyAgICAgICAgaWYgKEdyaWRMYXlvdXRVdGlsczo6
aXNPcnRob2dvbmFsQ2hpbGQoKnRoaXMsIGNoaWxkKSkgewogICAgICAgICAgICAgLy8gSWYgb3J0
aG9nb25hbCB3cml0aW5nLW1vZGVzLCBzZWxmLWVuZCB3aWxsIGJlIGJhc2VkIG9uIHRoZSBjaGls
ZCdzIGJsb2NrLWF4aXMKICAgICAgICAgICAgIC8vIGRpcmVjdGlvbiwgYmVjYXVzZSBpdCdzIHRo
ZSBvbmUgcGFyYWxsZWwgdG8gdGhlIHJvdyBheGlzLgogICAgICAgICAgICAgaWYgKGNoaWxkLnN0
eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkKQEAgLTE0OTMsNyArMTQ2NCw3IEBA
IExheW91dFVuaXQgUmVuZGVyR3JpZDo6Y29sdW1uQXhpc09mZnNldEZvckNoaWxkKGNvbnN0IFJl
bmRlckJveCYgY2hpbGQpIGNvbnN0CiAgICAgICAgIC8vICh0aGlzIGRvZXMgbm90IGhhdmUgdG8g
YmUgZG9uZSBmb3IgdGhlIGxhc3QgdHJhY2sgYXMgdGhlcmUgYXJlIG5vIG1vcmUgbV9yb3dQb3Np
dGlvbnMgYWZ0ZXIgaXQpLgogICAgICAgICBpZiAoY2hpbGRFbmRMaW5lIDwgbV9yb3dQb3NpdGlv
bnMuc2l6ZSgpIC0gMSkKICAgICAgICAgICAgIGVuZE9mUm93IC09IGdyaWRHYXAoRm9yUm93cykg
KyBtX29mZnNldEJldHdlZW5Sb3dzOwotICAgICAgICBMYXlvdXRVbml0IGNvbHVtbkF4aXNDaGls
ZFNpemUgPSBpc09ydGhvZ29uYWxDaGlsZChjaGlsZCkgPyBjaGlsZC5sb2dpY2FsV2lkdGgoKSAr
IGNoaWxkLm1hcmdpbkxvZ2ljYWxXaWR0aCgpIDogY2hpbGQubG9naWNhbEhlaWdodCgpICsgY2hp
bGQubWFyZ2luTG9naWNhbEhlaWdodCgpOworICAgICAgICBMYXlvdXRVbml0IGNvbHVtbkF4aXND
aGlsZFNpemUgPSBHcmlkTGF5b3V0VXRpbHM6OmlzT3J0aG9nb25hbENoaWxkKCp0aGlzLCBjaGls
ZCkgPyBjaGlsZC5sb2dpY2FsV2lkdGgoKSArIGNoaWxkLm1hcmdpbkxvZ2ljYWxXaWR0aCgpIDog
Y2hpbGQubG9naWNhbEhlaWdodCgpICsgY2hpbGQubWFyZ2luTG9naWNhbEhlaWdodCgpOwogICAg
ICAgICBhdXRvIG92ZXJmbG93ID0gYWxpZ25TZWxmRm9yQ2hpbGQoY2hpbGQpLm92ZXJmbG93KCk7
CiAgICAgICAgIExheW91dFVuaXQgb2Zmc2V0RnJvbVN0YXJ0UG9zaXRpb24gPSBjb21wdXRlT3Zl
cmZsb3dBbGlnbm1lbnRPZmZzZXQob3ZlcmZsb3csIGVuZE9mUm93IC0gc3RhcnRPZlJvdywgY29s
dW1uQXhpc0NoaWxkU2l6ZSk7CiAgICAgICAgIHJldHVybiBzdGFydFBvc2l0aW9uICsgKGF4aXNQ
b3NpdGlvbiA9PSBHcmlkQXhpc0VuZCA/IG9mZnNldEZyb21TdGFydFBvc2l0aW9uIDogb2Zmc2V0
RnJvbVN0YXJ0UG9zaXRpb24gLyAyKTsKQEAgLTE1MjUsNyArMTQ5Niw3IEBAIExheW91dFVuaXQg
UmVuZGVyR3JpZDo6cm93QXhpc09mZnNldEZvckNoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQp
IGNvbnN0CiAgICAgICAgIC8vICh0aGlzIGRvZXMgbm90IGhhdmUgdG8gYmUgZG9uZSBmb3IgdGhl
IGxhc3QgdHJhY2sgYXMgdGhlcmUgYXJlIG5vIG1vcmUgbV9jb2x1bW5Qb3NpdGlvbnMgYWZ0ZXIg
aXQpLgogICAgICAgICBpZiAoY2hpbGRFbmRMaW5lIDwgbV9jb2x1bW5Qb3NpdGlvbnMuc2l6ZSgp
IC0gMSkKICAgICAgICAgICAgIGVuZE9mQ29sdW1uIC09IGdyaWRHYXAoRm9yQ29sdW1ucykgKyBt
X29mZnNldEJldHdlZW5Db2x1bW5zOwotICAgICAgICBMYXlvdXRVbml0IHJvd0F4aXNDaGlsZFNp
emUgPSBpc09ydGhvZ29uYWxDaGlsZChjaGlsZCkgPyBjaGlsZC5sb2dpY2FsSGVpZ2h0KCkgKyBj
aGlsZC5tYXJnaW5Mb2dpY2FsSGVpZ2h0KCkgOiBjaGlsZC5sb2dpY2FsV2lkdGgoKSArIGNoaWxk
Lm1hcmdpbkxvZ2ljYWxXaWR0aCgpOworICAgICAgICBMYXlvdXRVbml0IHJvd0F4aXNDaGlsZFNp
emUgPSBHcmlkTGF5b3V0VXRpbHM6OmlzT3J0aG9nb25hbENoaWxkKCp0aGlzLCBjaGlsZCkgPyBj
aGlsZC5sb2dpY2FsSGVpZ2h0KCkgKyBjaGlsZC5tYXJnaW5Mb2dpY2FsSGVpZ2h0KCkgOiBjaGls
ZC5sb2dpY2FsV2lkdGgoKSArIGNoaWxkLm1hcmdpbkxvZ2ljYWxXaWR0aCgpOwogICAgICAgICBh
dXRvIG92ZXJmbG93ID0ganVzdGlmeVNlbGZGb3JDaGlsZChjaGlsZCkub3ZlcmZsb3coKTsKICAg
ICAgICAgTGF5b3V0VW5pdCBvZmZzZXRGcm9tU3RhcnRQb3NpdGlvbiA9IGNvbXB1dGVPdmVyZmxv
d0FsaWdubWVudE9mZnNldChvdmVyZmxvdywgZW5kT2ZDb2x1bW4gLSBzdGFydE9mQ29sdW1uLCBy
b3dBeGlzQ2hpbGRTaXplKTsKICAgICAgICAgcmV0dXJuIHN0YXJ0UG9zaXRpb24gKyAoYXhpc1Bv
c2l0aW9uID09IEdyaWRBeGlzRW5kID8gb2Zmc2V0RnJvbVN0YXJ0UG9zaXRpb24gOiBvZmZzZXRG
cm9tU3RhcnRQb3NpdGlvbiAvIDIpOwpAQCAtMTY1NCwxOCArMTYyNSwxOSBAQCBMYXlvdXRQb2lu
dCBSZW5kZXJHcmlkOjpmaW5kQ2hpbGRMb2dpY2FsUG9zaXRpb24oY29uc3QgUmVuZGVyQm94JiBj
aGlsZCkgY29uc3QKIHsKICAgICBMYXlvdXRVbml0IGNvbHVtbkF4aXNPZmZzZXQgPSBjb2x1bW5B
eGlzT2Zmc2V0Rm9yQ2hpbGQoY2hpbGQpOwogICAgIExheW91dFVuaXQgcm93QXhpc09mZnNldCA9
IHJvd0F4aXNPZmZzZXRGb3JDaGlsZChjaGlsZCk7CisgICAgYm9vbCBpc09ydGhvZ29uYWxDaGls
ZCA9IEdyaWRMYXlvdXRVdGlsczo6aXNPcnRob2dvbmFsQ2hpbGQoKnRoaXMsIGNoaWxkKTsKIAog
ICAgIC8vIFdlIHN0b3JlZCBtX2NvbHVtblBvc2l0aW9ucydzIGRhdGEgaWdub3JpbmcgdGhlIGRp
cmVjdGlvbiwgaGVuY2Ugd2UgbWlnaHQgbmVlZCBub3cKICAgICAvLyB0byB0cmFuc2xhdGUgcG9z
aXRpb25zIGZyb20gUlRMIHRvIExUUiwgYXMgaXQncyBtb3JlIGNvbnZlbmllbnQgZm9yIHBhaW50
aW5nLgogICAgIGlmICghc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAg
IHJvd0F4aXNPZmZzZXQgPSB0cmFuc2xhdGVSVExDb29yZGluYXRlKHJvd0F4aXNPZmZzZXQpIC0g
KGlzT3J0aG9nb25hbENoaWxkKGNoaWxkKSA/IGNoaWxkLmxvZ2ljYWxIZWlnaHQoKSAgOiBjaGls
ZC5sb2dpY2FsV2lkdGgoKSk7CisgICAgICAgIHJvd0F4aXNPZmZzZXQgPSB0cmFuc2xhdGVSVExD
b29yZGluYXRlKHJvd0F4aXNPZmZzZXQpIC0gKGlzT3J0aG9nb25hbENoaWxkID8gY2hpbGQubG9n
aWNhbEhlaWdodCgpICA6IGNoaWxkLmxvZ2ljYWxXaWR0aCgpKTsKIAogICAgIC8vICJJbiB0aGUg
cG9zaXRpb25pbmcgcGhhc2UgWy4uLl0gY2FsY3VsYXRpb25zIGFyZSBwZXJmb3JtZWQgYWNjb3Jk
aW5nIHRvIHRoZSB3cml0aW5nIG1vZGUKICAgICAvLyBvZiB0aGUgY29udGFpbmluZyBibG9jayBv
ZiB0aGUgYm94IGVzdGFibGlzaGluZyB0aGUgb3J0aG9nb25hbCBmbG93LiIgSG93ZXZlciwgdGhl
CiAgICAgLy8gcmVzdWx0aW5nIExheW91dFBvaW50IHdpbGwgYmUgdXNlZCBpbiAnc2V0TG9naWNh
bFBvc2l0aW9uJyBpbiBvcmRlciB0byBzZXQgdGhlIGNoaWxkJ3MKICAgICAvLyBsb2dpY2FsIHBv
c2l0aW9uLCB3aGljaCB3aWxsIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIGNoaWxkJ3Mgd3Jp
dGluZy1tb2RlLgogICAgIExheW91dFBvaW50IGNoaWxkTG9jYXRpb24ocm93QXhpc09mZnNldCwg
Y29sdW1uQXhpc09mZnNldCk7Ci0gICAgcmV0dXJuIGlzT3J0aG9nb25hbENoaWxkKGNoaWxkKSA/
IGNoaWxkTG9jYXRpb24udHJhbnNwb3NlZFBvaW50KCkgOiBjaGlsZExvY2F0aW9uOworICAgIHJl
dHVybiBpc09ydGhvZ29uYWxDaGlsZCA/IGNoaWxkTG9jYXRpb24udHJhbnNwb3NlZFBvaW50KCkg
OiBjaGlsZExvY2F0aW9uOwogfQogCiB1bnNpZ25lZCBSZW5kZXJHcmlkOjpudW1UcmFja3MoR3Jp
ZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgR3JpZCYgZ3JpZCkgY29uc3QK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327373</attachid>
            <date>2017-11-20 14:12:04 -0800</date>
            <delta_ts>2017-11-21 06:33:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179633-20171120231203.patch</filename>
            <type>text/plain</type>
            <size>28949</size>
            <attacher name="Javier Fernandez">jfernandez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI0OTExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzUwODVhOWU3ODU3NjZm
N2E0MjEwMDRlYmJmYTcyYWUzNzYwN2UzOS4uZDJhNzAzZWEwNzc4ZGIzZjY1MzgyZTY0NmJmMGU1
YThkOTA2MTU4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE3LTExLTEzICBKYXZp
ZXIgRmVybmFuZGV6ICA8amZlcm5hbmRlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtjc3MtZ3Jp
ZF0gUmVmYWN0b3JpbmcgYW5kIG5ldyBncmlkIHV0aWxpdHkgY2xhc3MKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTYzMworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGEgbmV3IGNsYXNzIHdpdGgg
c2V2ZXJhbCB1dGlsaXR5IGZ1bmN0aW9ucyB0byBzaGFyZSBsb2dpYworICAgICAgICBiZXR3ZWVu
IFJlbmRlckdyaWQgYW5kIEdyaWRUcmFja1NpemluZ0FsZ29yaXRobS4KKworICAgICAgICBObyBu
ZXcgdGVzdHMsIHNpbmNlIG5vIG5ldyBmdW5jdGlvbmFsaXR5IGlzIGFkZGVkLgorCisgICAgICAg
ICogU291cmNlcy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIHJlbmRlcmluZy9HcmlkTGF5b3V0VXRpbHMuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyaWRMYXlvdXRVdGlsczo6Y29tcHV0ZU1hcmdpbkxvZ2ljYWxTaXpl
Rm9yQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6R3JpZExheW91dFV0aWxzOjptYXJnaW5Mb2dp
Y2FsU2l6ZUZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRMYXlvdXRVdGlsczo6aXNP
cnRob2dvbmFsQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6R3JpZExheW91dFV0aWxzOjpmbG93
QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZCk6CisgICAgICAgICogcmVuZGVyaW5nL0dyaWRMYXlvdXRV
dGlscy5oOiBBZGRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3Jp
dGhtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyaWRUcmFja1NpemluZ0FsZ29yaXRobTo6YXNz
dW1lZFJvd3NTaXplRm9yT3J0aG9nb25hbENoaWxkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyaWRUcmFja1NpemluZ0FsZ29yaXRobVN0cmF0ZWd5Ojpsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtU3RyYXRl
Z3k6Om1pbkNvbnRlbnRGb3JDaGlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmlkVHJh
Y2tTaXppbmdBbGdvcml0aG1TdHJhdGVneTo6bWF4Q29udGVudEZvckNoaWxkIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyaWRUcmFja1NpemluZ0FsZ29yaXRobVN0cmF0ZWd5OjptaW5TaXpl
Rm9yQ2hpbGQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGVmaW5pdGVTaXplU3RyYXRlZ3k6
Om1pbkxvZ2ljYWxXaWR0aEZvckNoaWxkIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyR3JpZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpsYXlvdXRCbG9jayk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpwbGFjZUl0ZW1zT25HcmlkIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmxheW91dFBvc2l0aW9uZWRPYmplY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6YXZhaWxhYmxlQWxpZ25tZW50U3BhY2VGb3JD
aGlsZEJlZm9yZVN0cmV0Y2hpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3Jp
ZDo6YXBwbHlTdHJldGNoQWxpZ25tZW50VG9DaGlsZElmTmVlZGVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckdyaWQ6OmlzSW5saW5lQmFzZWxpbmVBbGlnbmVkQ2hpbGQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6Zmlyc3RMaW5lQmFzZWxpbmUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6Y29sdW1uQXhpc1Bvc2l0aW9uRm9yQ2hpbGQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6cm93QXhpc1Bvc2l0aW9uRm9yQ2hp
bGQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6Y29sdW1uQXhpc09mZnNl
dEZvckNoaWxkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnJvd0F4aXNP
ZmZzZXRGb3JDaGlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpmaW5k
Q2hpbGRMb2dpY2FsUG9zaXRpb24gY29uc3QpOgorCiAyMDE3LTExLTE2ICBGcmVkZXJpYyBXYW5n
ICA8ZndhbmdAaWdhbGlhLmNvbT4KIAogICAgICAgICBBU1NFUlRJT04gRkFJTEVEOiAhaXNBbm9u
eW1vdXMoKSBpbiBXZWJDb3JlOjpSZW5kZXJNYXRoTUxPcGVyYXRvcjo6dXBkYXRlVG9rZW5Db250
ZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0CmluZGV4IGZjNjdjZjVkMWFhMzRlNmY5NmZkNDI1MTNjNGJmNjFkZTBm
NzMxNGIuLjU3MzJkOGU5YWRjYzg0YzU0N2YyMzc0MGQ4YjlmYThiMmRmMDk3NTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CkBAIC0xNzI4LDYgKzE3MjgsNyBAQCByZW5kZXJpbmcvRmxleGlibGVCb3hBbGdvcml0
aG0uY3BwCiByZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAKIHJlbmRlcmluZy9GbG9hdGlu
Z09iamVjdHMuY3BwCiByZW5kZXJpbmcvR3JpZC5jcHAKK3JlbmRlcmluZy9HcmlkTGF5b3V0VXRp
bHMuY3BwCiByZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmNwcAogcmVuZGVyaW5n
L0hpdFRlc3RMb2NhdGlvbi5jcHAKIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRMYXlvdXRVdGlscy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZExheW91dFV0aWxzLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYjA1
MDkxNmQ1ZDU3YmJlOWFjOTcyOWNkMDRjNmExYjU1NDgxYzFmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRMYXlvdXRVdGlscy5jcHAKQEAgLTAsMCArMSw2
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkdyaWRMYXlvdXRVdGlscy5oIgorCisjaW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworTGF5b3V0VW5pdCBHcmlkTGF5b3V0VXRpbHM6OmNvbXB1
dGVNYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKGNvbnN0IFJlbmRlckdyaWQmIGdyaWQsIEdyaWRU
cmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IFJlbmRlckJveCYgY2hpbGQpCit7
CisgICAgaWYgKCFjaGlsZC5zdHlsZSgpLmhhc01hcmdpbigpKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIExheW91dFVuaXQgbWFyZ2luU3RhcnQ7CisgICAgTGF5b3V0VW5pdCBtYXJnaW5FbmQ7
CisgICAgaWYgKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKQorICAgICAgICBjaGlsZC5jb21wdXRl
SW5saW5lRGlyZWN0aW9uTWFyZ2lucyhncmlkLCBjaGlsZC5jb250YWluaW5nQmxvY2tMb2dpY2Fs
V2lkdGhGb3JDb250ZW50SW5GcmFnbWVudChudWxscHRyKSwgY2hpbGQubG9naWNhbFdpZHRoKCks
IG1hcmdpblN0YXJ0LCBtYXJnaW5FbmQpOworICAgIGVsc2UKKyAgICAgICAgY2hpbGQuY29tcHV0
ZUJsb2NrRGlyZWN0aW9uTWFyZ2lucyhncmlkLCBtYXJnaW5TdGFydCwgbWFyZ2luRW5kKTsKKwor
ICAgIHJldHVybiBtYXJnaW5TdGFydCArIG1hcmdpbkVuZDsKK30KKworTGF5b3V0VW5pdCBHcmlk
TGF5b3V0VXRpbHM6Om1hcmdpbkxvZ2ljYWxTaXplRm9yQ2hpbGQoY29uc3QgUmVuZGVyR3JpZCYg
Z3JpZCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgUmVuZGVyQm94
JiBjaGlsZCkKK3sKKyAgICBpZiAoY2hpbGQubmVlZHNMYXlvdXQoKSkKKyAgICAgICAgcmV0dXJu
IGNvbXB1dGVNYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKGdyaWQsIGRpcmVjdGlvbiwgY2hpbGQp
OworICAgIHJldHVybiBmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChncmlkLCBjaGlsZCwgZGly
ZWN0aW9uKSA9PSBGb3JDb2x1bW5zID8gY2hpbGQubWFyZ2luTG9naWNhbFdpZHRoKCkgOiBjaGls
ZC5tYXJnaW5Mb2dpY2FsSGVpZ2h0KCk7Cit9CisKK2Jvb2wgR3JpZExheW91dFV0aWxzOjppc09y
dGhvZ29uYWxDaGlsZChjb25zdCBSZW5kZXJHcmlkJiBncmlkLCBjb25zdCBSZW5kZXJCb3gmIGNo
aWxkKQoreworICAgIHJldHVybiBjaGlsZC5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpICE9IGdy
aWQuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKTsKK30KKworR3JpZFRyYWNrU2l6aW5nRGlyZWN0
aW9uIEdyaWRMYXlvdXRVdGlsczo6Zmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQoY29uc3QgUmVu
ZGVyR3JpZCYgZ3JpZCwgY29uc3QgUmVuZGVyQm94JiBjaGlsZCwgR3JpZFRyYWNrU2l6aW5nRGly
ZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICByZXR1cm4gIWlzT3J0aG9nb25hbENoaWxkKGdyaWQs
IGNoaWxkKSA/IGRpcmVjdGlvbiA6IChkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucyA/IEZvclJvd3Mg
OiBGb3JDb2x1bW5zKTsKK30KKworfSAvLyBuYW1lc3BhY2UgYmxpbmsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkTGF5b3V0VXRpbHMuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9HcmlkTGF5b3V0VXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kOTg5MDc0NTM4N2FkNjU2
MzJlYjg1OGYwOTVkZGRiNjA2NDI0MDA4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0dyaWRMYXlvdXRVdGlscy5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiTGF5b3V0VW5pdC5oIgor
I2luY2x1ZGUgIlJlbmRlckdyaWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBH
cmlkTGF5b3V0VXRpbHMgeworcHVibGljOgorICAgIHN0YXRpYyBMYXlvdXRVbml0IGNvbXB1dGVN
YXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKGNvbnN0IFJlbmRlckdyaWQmLCBHcmlkVHJhY2tTaXpp
bmdEaXJlY3Rpb24sIGNvbnN0IFJlbmRlckJveCYpOworICAgIHN0YXRpYyBMYXlvdXRVbml0IG1h
cmdpbkxvZ2ljYWxTaXplRm9yQ2hpbGQoY29uc3QgUmVuZGVyR3JpZCYsIEdyaWRUcmFja1Npemlu
Z0RpcmVjdGlvbiwgY29uc3QgUmVuZGVyQm94Jik7CisgICAgc3RhdGljIGJvb2wgaXNPcnRob2dv
bmFsQ2hpbGQoY29uc3QgUmVuZGVyR3JpZCYsIGNvbnN0IFJlbmRlckJveCYpOworICAgIHN0YXRp
YyBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQoY29u
c3QgUmVuZGVyR3JpZCYsIGNvbnN0IFJlbmRlckJveCYsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlv
bik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBibGluaworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9HcmlkVHJhY2tTaXppbmdBbGdvcml0aG0uY3BwCmluZGV4IDI5NjllZGU0
YTdhN2NlODIwMDk1ZTdjNTJjZmJiMTU2MmE4ZjdkNzQuLjIxMmM2M2ZjN2E2OTUyYWU0YjJlNTA4
YTYyNzBmMmQ0YzBjOGE1NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9H
cmlkVHJhY2tTaXppbmdBbGdvcml0aG0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9HcmlkVHJhY2tTaXppbmdBbGdvcml0aG0uY3BwCkBAIC0xMTAsMzIgKzExMCwxMSBAQCBzdGF0
aWMgdm9pZCBzZXRPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoUmVu
ZGVyQm94JiBjaGlsZCwgR3JpZAogICAgICAgICBjaGlsZC5zZXRPdmVycmlkZUNvbnRhaW5pbmdC
bG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KHNpemUpOwogfQogCi1zdGF0aWMgR3JpZFRyYWNrU2l6
aW5nRGlyZWN0aW9uIGZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKGNvbnN0IFJlbmRlckdyaWQq
IGdyaWQsIGNvbnN0IFJlbmRlckJveCYgY2hpbGQsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBk
aXJlY3Rpb24pCi17Ci0gICAgQVNTRVJUKGdyaWQpOwotICAgIHJldHVybiAhZ3JpZC0+aXNPcnRo
b2dvbmFsQ2hpbGQoY2hpbGQpID8gZGlyZWN0aW9uIDogKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5z
ID8gRm9yUm93cyA6IEZvckNvbHVtbnMpOwotfQotCiBzdGF0aWMgc3RkOjpvcHRpb25hbDxMYXlv
dXRVbml0PiBvdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY29uc3Qg
UmVuZGVyQm94JiBjaGlsZCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsK
ICAgICByZXR1cm4gZGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyBjaGlsZC5vdmVycmlkZUNvbnRh
aW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsV2lkdGgoKSA6IGNoaWxkLm92ZXJyaWRlQ29udGFpbmlu
Z0Jsb2NrQ29udGVudExvZ2ljYWxIZWlnaHQoKTsKIH0KIAotc3RhdGljIExheW91dFVuaXQgY29t
cHV0ZU1hcmdpbkxvZ2ljYWxTaXplRm9yQ2hpbGQoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRp
cmVjdGlvbiwgY29uc3QgUmVuZGVyR3JpZCYgcmVuZGVyR3JpZCwgY29uc3QgUmVuZGVyQm94JiBj
aGlsZCkKLXsKLSAgICBpZiAoIWNoaWxkLnN0eWxlKCkuaGFzTWFyZ2luKCkpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgTGF5b3V0VW5pdCBtYXJnaW5TdGFydDsKLSAgICBMYXlvdXRVbml0IG1h
cmdpbkVuZDsKLSAgICBpZiAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMpCi0gICAgICAgIGNoaWxk
LmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25NYXJnaW5zKHJlbmRlckdyaWQsIGNoaWxkLmNvbnRhaW5p
bmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnRJbkZyYWdtZW50KG51bGxwdHIpLCBjaGlsZC5s
b2dpY2FsV2lkdGgoKSwgbWFyZ2luU3RhcnQsIG1hcmdpbkVuZCk7Ci0gICAgZWxzZQotICAgICAg
ICBjaGlsZC5jb21wdXRlQmxvY2tEaXJlY3Rpb25NYXJnaW5zKHJlbmRlckdyaWQsIG1hcmdpblN0
YXJ0LCBtYXJnaW5FbmQpOwotCi0gICAgcmV0dXJuIG1hcmdpblN0YXJ0ICsgbWFyZ2luRW5kOwot
fQotCiAvLyBGSVhNRTogd2UgYm9ycm93ZWQgdGhpcyBmcm9tIFJlbmRlckJsb2NrLiBXZSBjYW5u
b3QgY2FsbCBpdCBmcm9tIGhlcmUgYmVjYXVzZSBpdCdzIHByb3RlY3RlZCBmb3IgUmVuZGVyT2Jq
ZWN0cy4KIHN0YXRpYyBMYXlvdXRVbml0IG1hcmdpbkludHJpbnNpY0xvZ2ljYWxXaWR0aEZvckNo
aWxkKGNvbnN0IFJlbmRlckdyaWQqIHJlbmRlckdyaWQsIFJlbmRlckJveCYgY2hpbGQpCiB7CkBA
IC01NjQsNyArNTQzLDcgQEAgdm9pZCBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmRpc3RyaWJ1
dGVTcGFjZVRvVHJhY2tzKFZlY3RvcjxHcmlkVHJhY2sqPiYgdHJhY2sKIAogTGF5b3V0VW5pdCBH
cmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmFzc3VtZWRSb3dzU2l6ZUZvck9ydGhvZ29uYWxDaGls
ZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAogewotICAgIEFTU0VSVChtX3JlbmRlckdy
aWQtPmlzT3J0aG9nb25hbENoaWxkKGNoaWxkKSk7CisgICAgQVNTRVJUKEdyaWRMYXlvdXRVdGls
czo6aXNPcnRob2dvbmFsQ2hpbGQoKm1fcmVuZGVyR3JpZCwgY2hpbGQpKTsKICAgICBjb25zdCBH
cmlkU3BhbiYgc3BhbiA9IG1fZ3JpZC5ncmlkSXRlbVNwYW4oY2hpbGQsIEZvclJvd3MpOwogICAg
IExheW91dFVuaXQgZ3JpZEFyZWFTaXplOwogICAgIGJvb2wgZ3JpZEFyZWFJc0luZGVmaW5pdGUg
PSBmYWxzZTsKQEAgLTcyMiw3ICs3MDEsNyBAQCB2b2lkIEdyaWRUcmFja1NpemluZ0FsZ29yaXRo
bTo6Y29tcHV0ZUdyaWRDb250YWluZXJJbnRyaW5zaWNTaXplcygpCiAvLyBHcmlkVHJhY2tTaXpp
bmdBbGdvcml0aG1TdHJhdGVneS4KIExheW91dFVuaXQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGht
U3RyYXRlZ3k6OmxvZ2ljYWxIZWlnaHRGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAog
ewotICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBjaGlsZEJsb2NrRGlyZWN0aW9uID0gZmxv
d0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQocmVuZGVyR3JpZCgpLCBjaGlsZCwgRm9yUm93cyk7Cisg
ICAgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGNoaWxkQmxvY2tEaXJlY3Rpb24gPSBHcmlkTGF5
b3V0VXRpbHM6OmZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKCpyZW5kZXJHcmlkKCksIGNoaWxk
LCBGb3JSb3dzKTsKICAgICAvLyBJZiB8Y2hpbGR8IGhhcyBhIHJlbGF0aXZlIGxvZ2ljYWwgaGVp
Z2h0LCB3ZSBzaG91bGRuJ3QgbGV0IGl0IG92ZXJyaWRlIGl0cyBpbnRyaW5zaWMgaGVpZ2h0LCB3
aGljaCBpcwogICAgIC8vIHdoYXQgd2UgYXJlIGludGVyZXN0ZWQgaW4gaGVyZS4gVGh1cyB3ZSBu
ZWVkIHRvIHNldCB0aGUgYmxvY2stYXhpcyBvdmVycmlkZSBzaXplIHRvIC0xIChubyBwb3NzaWJs
ZSByZXNvbHV0aW9uKS4KICAgICBpZiAoc2hvdWxkQ2xlYXJPdmVycmlkZUNvbnRhaW5pbmdCbG9j
a0NvbnRlbnRTaXplRm9yQ2hpbGQoY2hpbGQsIEZvclJvd3MpKSB7CkBAIC03MzUsMTcgKzcxNCwx
NiBAQCBMYXlvdXRVbml0IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobVN0cmF0ZWd5Ojpsb2dpY2Fs
SGVpZ2h0Rm9yQ2hpbGQoUmVuZGVyQm94JiBjaAogICAgICAgICBjaGlsZC5jbGVhck92ZXJyaWRl
TG9naWNhbENvbnRlbnRIZWlnaHQoKTsKIAogICAgIGNoaWxkLmxheW91dElmTmVlZGVkKCk7Ci0g
ICAgcmV0dXJuIGNoaWxkLmxvZ2ljYWxIZWlnaHQoKSArIGNoaWxkLm1hcmdpbkxvZ2ljYWxIZWln
aHQoKTsKKyAgICByZXR1cm4gY2hpbGQubG9naWNhbEhlaWdodCgpICsgR3JpZExheW91dFV0aWxz
OjptYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKCpyZW5kZXJHcmlkKCksIGNoaWxkQmxvY2tEaXJl
Y3Rpb24sIGNoaWxkKTsKIH0KIAogTGF5b3V0VW5pdCBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG1T
dHJhdGVneTo6bWluQ29udGVudEZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQpIGNvbnN0CiB7Ci0g
ICAgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGNoaWxkSW5saW5lRGlyZWN0aW9uID0gZmxvd0F3
YXJlRGlyZWN0aW9uRm9yQ2hpbGQocmVuZGVyR3JpZCgpLCBjaGlsZCwgRm9yQ29sdW1ucyk7Cisg
ICAgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGNoaWxkSW5saW5lRGlyZWN0aW9uID0gR3JpZExh
eW91dFV0aWxzOjpmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZCgqcmVuZGVyR3JpZCgpLCBjaGls
ZCwgRm9yQ29sdW1ucyk7CiAgICAgaWYgKGRpcmVjdGlvbigpID09IGNoaWxkSW5saW5lRGlyZWN0
aW9uKSB7CiAgICAgICAgIC8vIEZJWE1FOiBJdCdzIHVuY2xlYXIgaWYgd2Ugc2hvdWxkIHJldHVy
biB0aGUgaW50cmluc2ljIHdpZHRoIG9yIHRoZSBwcmVmZXJyZWQgd2lkdGguCiAgICAgICAgIC8v
IFNlZSBodHRwOi8vbGlzdHMudzMub3JnL0FyY2hpdmVzL1B1YmxpYy93d3ctc3R5bGUvMjAxM0ph
bi8wMjQ1Lmh0bWwKLSAgICAgICAgTGF5b3V0VW5pdCBtYXJnaW5Mb2dpY2FsV2lkdGggPSBjaGls
ZC5uZWVkc0xheW91dCgpID8gY29tcHV0ZU1hcmdpbkxvZ2ljYWxTaXplRm9yQ2hpbGQoY2hpbGRJ
bmxpbmVEaXJlY3Rpb24sICpyZW5kZXJHcmlkKCksIGNoaWxkKSA6IGNoaWxkLm1hcmdpbkxvZ2lj
YWxXaWR0aCgpOwotICAgICAgICByZXR1cm4gY2hpbGQubWluUHJlZmVycmVkTG9naWNhbFdpZHRo
KCkgKyBtYXJnaW5Mb2dpY2FsV2lkdGg7CisgICAgICAgIHJldHVybiBjaGlsZC5taW5QcmVmZXJy
ZWRMb2dpY2FsV2lkdGgoKSArIEdyaWRMYXlvdXRVdGlsczo6bWFyZ2luTG9naWNhbFNpemVGb3JD
aGlsZCgqcmVuZGVyR3JpZCgpLCBjaGlsZElubGluZURpcmVjdGlvbiwgY2hpbGQpOwogICAgIH0K
IAogICAgIGlmICh1cGRhdGVPdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hp
bGQoY2hpbGQsIGNoaWxkSW5saW5lRGlyZWN0aW9uKSkKQEAgLTc1NSwxMiArNzMzLDExIEBAIExh
eW91dFVuaXQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtU3RyYXRlZ3k6Om1pbkNvbnRlbnRGb3JD
aGlsZChSZW5kZXJCb3gmIGNoaWxkCiAKIExheW91dFVuaXQgR3JpZFRyYWNrU2l6aW5nQWxnb3Jp
dGhtU3RyYXRlZ3k6Om1heENvbnRlbnRGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAog
ewotICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBjaGlsZElubGluZURpcmVjdGlvbiA9IGZs
b3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKHJlbmRlckdyaWQoKSwgY2hpbGQsIEZvckNvbHVtbnMp
OworICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBjaGlsZElubGluZURpcmVjdGlvbiA9IEdy
aWRMYXlvdXRVdGlsczo6Zmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQoKnJlbmRlckdyaWQoKSwg
Y2hpbGQsIEZvckNvbHVtbnMpOwogICAgIGlmIChkaXJlY3Rpb24oKSA9PSBjaGlsZElubGluZURp
cmVjdGlvbikgewogICAgICAgICAvLyBGSVhNRTogSXQncyB1bmNsZWFyIGlmIHdlIHNob3VsZCBy
ZXR1cm4gdGhlIGludHJpbnNpYyB3aWR0aCBvciB0aGUgcHJlZmVycmVkIHdpZHRoLgogICAgICAg
ICAvLyBTZWUgaHR0cDovL2xpc3RzLnczLm9yZy9BcmNoaXZlcy9QdWJsaWMvd3d3LXN0eWxlLzIw
MTNKYW4vMDI0NS5odG1sCi0gICAgICAgIExheW91dFVuaXQgbWFyZ2luTG9naWNhbFdpZHRoID0g
Y2hpbGQubmVlZHNMYXlvdXQoKSA/IGNvbXB1dGVNYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKGNo
aWxkSW5saW5lRGlyZWN0aW9uLCAqcmVuZGVyR3JpZCgpLCBjaGlsZCkgOiBjaGlsZC5tYXJnaW5M
b2dpY2FsV2lkdGgoKTsKLSAgICAgICAgcmV0dXJuIGNoaWxkLm1heFByZWZlcnJlZExvZ2ljYWxX
aWR0aCgpICsgbWFyZ2luTG9naWNhbFdpZHRoOworICAgICAgICByZXR1cm4gY2hpbGQubWF4UHJl
ZmVycmVkTG9naWNhbFdpZHRoKCkgKyBHcmlkTGF5b3V0VXRpbHM6Om1hcmdpbkxvZ2ljYWxTaXpl
Rm9yQ2hpbGQoKnJlbmRlckdyaWQoKSwgY2hpbGRJbmxpbmVEaXJlY3Rpb24sIGNoaWxkKTsKICAg
ICB9CiAKICAgICBpZiAodXBkYXRlT3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50U2l6ZUZv
ckNoaWxkKGNoaWxkLCBjaGlsZElubGluZURpcmVjdGlvbikpCkBAIC03NzAsNyArNzQ3LDcgQEAg
TGF5b3V0VW5pdCBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG1TdHJhdGVneTo6bWF4Q29udGVudEZv
ckNoaWxkKFJlbmRlckJveCYgY2hpbGQKIAogTGF5b3V0VW5pdCBHcmlkVHJhY2tTaXppbmdBbGdv
cml0aG1TdHJhdGVneTo6bWluU2l6ZUZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQpIGNvbnN0CiB7
Ci0gICAgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGNoaWxkSW5saW5lRGlyZWN0aW9uID0gZmxv
d0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQocmVuZGVyR3JpZCgpLCBjaGlsZCwgRm9yQ29sdW1ucyk7
CisgICAgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGNoaWxkSW5saW5lRGlyZWN0aW9uID0gR3Jp
ZExheW91dFV0aWxzOjpmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZCgqcmVuZGVyR3JpZCgpLCBj
aGlsZCwgRm9yQ29sdW1ucyk7CiAgICAgYm9vbCBpc1Jvd0F4aXMgPSBkaXJlY3Rpb24oKSA9PSBj
aGlsZElubGluZURpcmVjdGlvbjsKICAgICBjb25zdCBMZW5ndGgmIGNoaWxkTWluU2l6ZSA9IGlz
Um93QXhpcyA/IGNoaWxkLnN0eWxlKCkubG9naWNhbE1pbldpZHRoKCkgOiBjaGlsZC5zdHlsZSgp
LmxvZ2ljYWxNaW5IZWlnaHQoKTsKICAgICBjb25zdCBMZW5ndGgmIGNoaWxkU2l6ZSA9IGlzUm93
QXhpcyA/IGNoaWxkLnN0eWxlKCkubG9naWNhbFdpZHRoKCkgOiBjaGlsZC5zdHlsZSgpLmxvZ2lj
YWxIZWlnaHQoKTsKQEAgLTkxMyw3ICs4OTAsNyBAQCBwcml2YXRlOgogTGF5b3V0VW5pdCBEZWZp
bml0ZVNpemVTdHJhdGVneTo6bWluTG9naWNhbFdpZHRoRm9yQ2hpbGQoUmVuZGVyQm94JiBjaGls
ZCwgTGVuZ3RoIGNoaWxkTWluU2l6ZSwgTGF5b3V0VW5pdCBhdmFpbGFibGVTaXplKSBjb25zdAog
ewogICAgIExheW91dFVuaXQgbWFyZ2luTG9naWNhbFdpZHRoID0KLSAgICAgICAgY29tcHV0ZU1h
cmdpbkxvZ2ljYWxTaXplRm9yQ2hpbGQoZmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQocmVuZGVy
R3JpZCgpLCBjaGlsZCwgRm9yQ29sdW1ucyksICpyZW5kZXJHcmlkKCksIGNoaWxkKTsKKyAgICAg
ICAgR3JpZExheW91dFV0aWxzOjpjb21wdXRlTWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZCgqcmVu
ZGVyR3JpZCgpLCBHcmlkTGF5b3V0VXRpbHM6OmZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKCpy
ZW5kZXJHcmlkKCksIGNoaWxkLCBGb3JDb2x1bW5zKSwgY2hpbGQpOwogICAgIHJldHVybiBjaGls
ZC5jb21wdXRlTG9naWNhbFdpZHRoSW5GcmFnbWVudFVzaW5nKE1pblNpemUsIGNoaWxkTWluU2l6
ZSwgYXZhaWxhYmxlU2l6ZSwgKnJlbmRlckdyaWQoKSwgbnVsbHB0cikgKyBtYXJnaW5Mb2dpY2Fs
V2lkdGg7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJH
cmlkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcAppbmRleCA5
YTY4MWZiODg1MzM0M2IxMjc1ZWRkZmRkMDZlZDk1Y2UzZTI3N2I2Li4yZmI4MTQ2YTlhYjM4MzEw
ZThkYTBiNjUxNjIzMjQ1MTlkNGVlMDM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyR3JpZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckdyaWQuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyR3JpZC5oIgogCiAj
aW5jbHVkZSAiR3JpZEFyZWEuaCIKKyNpbmNsdWRlICJHcmlkTGF5b3V0VXRpbHMuaCIKICNpbmNs
dWRlICJHcmlkUG9zaXRpb25zUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJHcmlkVHJhY2tTaXppbmdB
bGdvcml0aG0uaCIKICNpbmNsdWRlICJMYXlvdXRSZXBhaW50ZXIuaCIKQEAgLTI0Nyw3ICsyNDgs
NyBAQCB2b2lkIFJlbmRlckdyaWQ6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwg
TGF5b3V0VW5pdCkKICAgICAgICAgLy8gc2FtZSByZXN1bHQgd2hlbiBncmlkJ3MgaW50cmluc2lj
IHNpemUgaXMgY29tcHV0ZWQgYWdhaW4gaW4gdGhlIHVwZGF0ZUxvZ2ljYWxXaWR0aCBjYWxsIGJl
bGxvdy4KICAgICAgICAgaWYgKHNpemVzTG9naWNhbFdpZHRoVG9GaXRDb250ZW50KE1heFNpemUp
IHx8IHN0eWxlKCkubG9naWNhbFdpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKSkgewogICAgICAg
ICAgICAgZm9yIChhdXRvKiBjaGlsZCA9IGZpcnN0Q2hpbGRCb3goKTsgY2hpbGQ7IGNoaWxkID0g
Y2hpbGQtPm5leHRTaWJsaW5nQm94KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlz
T3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8ICFpc09ydGhvZ29uYWxDaGlsZCgqY2hpbGQpKQorICAg
ICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgfHwgIUdyaWRM
YXlvdXRVdGlsczo6aXNPcnRob2dvbmFsQ2hpbGQoKnRoaXMsICpjaGlsZCkpCiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGNoaWxkLT5jbGVhck92ZXJyaWRl
U2l6ZSgpOwogICAgICAgICAgICAgICAgIGNoaWxkLT5jbGVhckNvbnRhaW5pbmdCbG9ja092ZXJy
aWRlU2l6ZSgpOwpAQCAtNDY3LDE2ICs0NjgsNiBAQCBzdGF0aWMgc3RkOjpvcHRpb25hbDxMYXlv
dXRVbml0PiBvdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY29ucwog
ICAgIHJldHVybiBkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucyA/IGNoaWxkLm92ZXJyaWRlQ29udGFp
bmluZ0Jsb2NrQ29udGVudExvZ2ljYWxXaWR0aCgpIDogY2hpbGQub3ZlcnJpZGVDb250YWluaW5n
QmxvY2tDb250ZW50TG9naWNhbEhlaWdodCgpOwogfQogCi1ib29sIFJlbmRlckdyaWQ6OmlzT3J0
aG9nb25hbENoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGNoaWxkLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgIT0gaXNIb3Jpem9udGFsV3JpdGluZ01v
ZGUoKTsKLX0KLQotR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIFJlbmRlckdyaWQ6OmZsb3dBd2Fy
ZURpcmVjdGlvbkZvckNoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQsIEdyaWRUcmFja1Npemlu
Z0RpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0Ci17Ci0gICAgcmV0dXJuICFpc09ydGhvZ29uYWxD
aGlsZChjaGlsZCkgPyBkaXJlY3Rpb24gOiAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMgPyBGb3JS
b3dzIDogRm9yQ29sdW1ucyk7Ci19Ci0KIHVuc2lnbmVkIFJlbmRlckdyaWQ6OmNvbXB1dGVBdXRv
UmVwZWF0VHJhY2tzQ291bnQoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgc3Rk
OjpvcHRpb25hbDxMYXlvdXRVbml0PiBhdmFpbGFibGVTaXplKSBjb25zdAogewogICAgIEFTU0VS
VCghYXZhaWxhYmxlU2l6ZSB8fCBhdmFpbGFibGVTaXplLnZhbHVlKCkgIT0gLTEpOwpAQCAtNjI2
LDcgKzYxNyw3IEBAIHZvaWQgUmVuZGVyR3JpZDo6cGxhY2VJdGVtc09uR3JpZChHcmlkJiBncmlk
LCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGF2YWlsYWJsCiAgICAgICAgIGlmIChncmlkLm9y
ZGVySXRlcmF0b3IoKS5zaG91bGRTa2lwQ2hpbGQoKmNoaWxkKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgIGhhc0FueU9ydGhvZ29uYWxHcmlkSXRlbSA9IGhhc0FueU9ydGhvZ29u
YWxHcmlkSXRlbSB8fCBpc09ydGhvZ29uYWxDaGlsZCgqY2hpbGQpOworICAgICAgICBoYXNBbnlP
cnRob2dvbmFsR3JpZEl0ZW0gPSBoYXNBbnlPcnRob2dvbmFsR3JpZEl0ZW0gfHwgR3JpZExheW91
dFV0aWxzOjppc09ydGhvZ29uYWxDaGlsZCgqdGhpcywgKmNoaWxkKTsKIAogICAgICAgICBHcmlk
QXJlYSBhcmVhID0gZ3JpZC5ncmlkSXRlbUFyZWEoKmNoaWxkKTsKICAgICAgICAgaWYgKCFhcmVh
LnJvd3MuaXNJbmRlZmluaXRlKCkpCkBAIC05NjgsNyArOTU5LDcgQEAgdm9pZCBSZW5kZXJHcmlk
OjpsYXlvdXRQb3NpdGlvbmVkT2JqZWN0KFJlbmRlckJveCYgY2hpbGQsIGJvb2wgcmVsYXlvdXRD
aGlsZHJlbiwKICAgICAvLyBGSVhNRTogSWYgcG9zc2libGUgaXQnZCBiZSBuaWNlIHRvIGF2b2lk
IHRoaXMgbGF5b3V0IGhlcmUgd2hlbiBpdCdzIG5vdCBuZWVkZWQuCiAgICAgUmVuZGVyQmxvY2s6
OmxheW91dFBvc2l0aW9uZWRPYmplY3QoY2hpbGQsIHJlbGF5b3V0Q2hpbGRyZW4sIGZpeGVkUG9z
aXRpb25PYmplY3RzT25seSk7CiAKLSAgICBib29sIGlzT3J0aG9nb25hbCA9IGlzT3J0aG9nb25h
bENoaWxkKGNoaWxkKTsKKyAgICBib29sIGlzT3J0aG9nb25hbCA9IEdyaWRMYXlvdXRVdGlsczo6
aXNPcnRob2dvbmFsQ2hpbGQoKnRoaXMsIGNoaWxkKTsKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxM
ZWZ0ID0gY2hpbGQubG9naWNhbExlZnQoKSArIChpc09ydGhvZ29uYWwgPyByb3dPZmZzZXQgOiBj
b2x1bW5PZmZzZXQpOwogICAgIExheW91dFVuaXQgbG9naWNhbFRvcCA9IGNoaWxkLmxvZ2ljYWxU
b3AoKSArIChpc09ydGhvZ29uYWwgPyBjb2x1bW5PZmZzZXQgOiByb3dPZmZzZXQpOwogICAgIGNo
aWxkLnNldExvZ2ljYWxMb2NhdGlvbihMYXlvdXRQb2ludChsb2dpY2FsTGVmdCwgbG9naWNhbFRv
cCkpOwpAQCAtMTE0NiwzMyArMTEzNywxMyBAQCBzdGF0aWMgTGF5b3V0VW5pdCBjb21wdXRlT3Zl
cmZsb3dBbGlnbm1lbnRPZmZzZXQoT3ZlcmZsb3dBbGlnbm1lbnQgb3ZlcmZsb3csIExheQogICAg
IHJldHVybiAwOwogfQogCi1MYXlvdXRVbml0IFJlbmRlckdyaWQ6Om1hcmdpbkxvZ2ljYWxTaXpl
Rm9yQ2hpbGQoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgUmVuZGVy
Qm94JiBjaGlsZCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hp
bGQoY2hpbGQsIGRpcmVjdGlvbikgPT0gRm9yQ29sdW1ucyA/IGNoaWxkLm1hcmdpbkxvZ2ljYWxX
aWR0aCgpIDogY2hpbGQubWFyZ2luTG9naWNhbEhlaWdodCgpOwotfQotCi1MYXlvdXRVbml0IFJl
bmRlckdyaWQ6OmNvbXB1dGVNYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKEdyaWRUcmFja1Npemlu
Z0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IFJlbmRlckJveCYgY2hpbGQpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFjaGlsZC5zdHlsZSgpLmhhc01hcmdpbigpKQotICAgICAgICByZXR1cm4gMDsKLQot
ICAgIExheW91dFVuaXQgbWFyZ2luU3RhcnQ7Ci0gICAgTGF5b3V0VW5pdCBtYXJnaW5FbmQ7Ci0g
ICAgaWYgKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKQotICAgICAgICBjaGlsZC5jb21wdXRlSW5s
aW5lRGlyZWN0aW9uTWFyZ2lucygqdGhpcywgY2hpbGQuY29udGFpbmluZ0Jsb2NrTG9naWNhbFdp
ZHRoRm9yQ29udGVudEluRnJhZ21lbnQobnVsbHB0ciksIGNoaWxkLmxvZ2ljYWxXaWR0aCgpLCBt
YXJnaW5TdGFydCwgbWFyZ2luRW5kKTsKLSAgICBlbHNlCi0gICAgICAgIGNoaWxkLmNvbXB1dGVC
bG9ja0RpcmVjdGlvbk1hcmdpbnMoKnRoaXMsIG1hcmdpblN0YXJ0LCBtYXJnaW5FbmQpOwotCi0g
ICAgcmV0dXJuIG1hcmdpblN0YXJ0ICsgbWFyZ2luRW5kOwotfQotCiBMYXlvdXRVbml0IFJlbmRl
ckdyaWQ6OmF2YWlsYWJsZUFsaWdubWVudFNwYWNlRm9yQ2hpbGRCZWZvcmVTdHJldGNoaW5nKExh
eW91dFVuaXQgZ3JpZEFyZWFCcmVhZHRoRm9yQ2hpbGQsIGNvbnN0IFJlbmRlckJveCYgY2hpbGQp
IGNvbnN0CiB7CiAgICAgLy8gQmVjYXVzZSB3ZSB3YW50IHRvIGF2b2lkIG11bHRpcGxlIGxheW91
dHMsIHN0cmV0Y2hpbmcgbG9naWMgbWlnaHQgYmUgcGVyZm9ybWVkIGJlZm9yZQogICAgIC8vIGNo
aWxkcmVuIGFyZSBsYWlkIG91dCwgc28gd2UgY2FuJ3QgdXNlIHRoZSBjaGlsZCBjYWNoZWQgdmFs
dWVzLiBIZW5jZSwgd2UgbmVlZCB0bwogICAgIC8vIGNvbXB1dGUgbWFyZ2lucyBpbiBvcmRlciB0
byBkZXRlcm1pbmUgdGhlIGF2YWlsYWJsZSBoZWlnaHQgYmVmb3JlIHN0cmV0Y2hpbmcuCi0gICAg
R3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGNoaWxkQmxvY2tGbG93RGlyZWN0aW9uID0gZmxvd0F3
YXJlRGlyZWN0aW9uRm9yQ2hpbGQoY2hpbGQsIEZvclJvd3MpOwotICAgIHJldHVybiBncmlkQXJl
YUJyZWFkdGhGb3JDaGlsZCAtIChjaGlsZC5uZWVkc0xheW91dCgpID8gY29tcHV0ZU1hcmdpbkxv
Z2ljYWxTaXplRm9yQ2hpbGQoY2hpbGRCbG9ja0Zsb3dEaXJlY3Rpb24sIGNoaWxkKSA6IG1hcmdp
bkxvZ2ljYWxTaXplRm9yQ2hpbGQoY2hpbGRCbG9ja0Zsb3dEaXJlY3Rpb24sIGNoaWxkKSk7Cisg
ICAgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGNoaWxkQmxvY2tGbG93RGlyZWN0aW9uID0gR3Jp
ZExheW91dFV0aWxzOjpmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZCgqdGhpcywgY2hpbGQsIEZv
clJvd3MpOworICAgIHJldHVybiBncmlkQXJlYUJyZWFkdGhGb3JDaGlsZCAtIEdyaWRMYXlvdXRV
dGlsczo6bWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZCgqdGhpcywgY2hpbGRCbG9ja0Zsb3dEaXJl
Y3Rpb24sIGNoaWxkKTsKIH0KIAogU3R5bGVTZWxmQWxpZ25tZW50RGF0YSBSZW5kZXJHcmlkOjph
bGlnblNlbGZGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBjb25zdCBSZW5kZXJTdHls
ZSogZ3JpZFN0eWxlKSBjb25zdApAQCAtMTE5OCw3ICsxMTY5LDcgQEAgdm9pZCBSZW5kZXJHcmlk
OjphcHBseVN0cmV0Y2hBbGlnbm1lbnRUb0NoaWxkSWZOZWVkZWQoUmVuZGVyQm94JiBjaGlsZCkK
ICAgICAvLyBub3QsIGV2YWx1YXRpbmcgdGhlIGNvbmRpdGlvbnMgd2hpY2ggbWlnaHQgaGF2ZSBj
aGFuZ2VkIHNpbmNlIHRoZSBvbGQgdmFsdWVzIHdlcmUgc2V0LgogICAgIGNoaWxkLmNsZWFyT3Zl
cnJpZGVMb2dpY2FsQ29udGVudEhlaWdodCgpOwogCi0gICAgR3JpZFRyYWNrU2l6aW5nRGlyZWN0
aW9uIGNoaWxkQmxvY2tEaXJlY3Rpb24gPSBmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChjaGls
ZCwgRm9yUm93cyk7CisgICAgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGNoaWxkQmxvY2tEaXJl
Y3Rpb24gPSBHcmlkTGF5b3V0VXRpbHM6OmZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKCp0aGlz
LCBjaGlsZCwgRm9yUm93cyk7CiAgICAgYm9vbCBibG9ja0Zsb3dJc0NvbHVtbkF4aXMgPSBjaGls
ZEJsb2NrRGlyZWN0aW9uID09IEZvclJvd3M7CiAgICAgYm9vbCBhbGxvd2VkVG9TdHJldGNoQ2hp
bGRCbG9ja1NpemUgPSBibG9ja0Zsb3dJc0NvbHVtbkF4aXMgPyBhbGxvd2VkVG9TdHJldGNoQ2hp
bGRBbG9uZ0NvbHVtbkF4aXMoY2hpbGQpIDogYWxsb3dlZFRvU3RyZXRjaENoaWxkQWxvbmdSb3dB
eGlzKGNoaWxkKTsKICAgICBpZiAoYWxsb3dlZFRvU3RyZXRjaENoaWxkQmxvY2tTaXplKSB7CkBA
IC0xMjgxLDcgKzEyNTIsNyBAQCBzdGF0aWMgaW50IHN5bnRoZXNpemVkQmFzZWxpbmVGcm9tQm9y
ZGVyQm94KGNvbnN0IFJlbmRlckJveCYgYm94LCBMaW5lRGlyZWN0aW9uTQogCiBib29sIFJlbmRl
ckdyaWQ6OmlzSW5saW5lQmFzZWxpbmVBbGlnbmVkQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGls
ZCkgY29uc3QKIHsKLSAgICByZXR1cm4gYWxpZ25TZWxmRm9yQ2hpbGQoY2hpbGQpLnBvc2l0aW9u
KCkgPT0gSXRlbVBvc2l0aW9uQmFzZWxpbmUgJiYgIWlzT3J0aG9nb25hbENoaWxkKGNoaWxkKSAm
JiAhaGFzQXV0b01hcmdpbnNJbkNvbHVtbkF4aXMoY2hpbGQpOworICAgIHJldHVybiBhbGlnblNl
bGZGb3JDaGlsZChjaGlsZCkucG9zaXRpb24oKSA9PSBJdGVtUG9zaXRpb25CYXNlbGluZSAmJiAh
R3JpZExheW91dFV0aWxzOjppc09ydGhvZ29uYWxDaGlsZCgqdGhpcywgY2hpbGQpICYmICFoYXNB
dXRvTWFyZ2luc0luQ29sdW1uQXhpcyhjaGlsZCk7CiB9CiAKIC8vIEZJWE1FOiBUaGlzIGxvZ2lj
IGlzIHNoYXJlZCBieSBSZW5kZXJGbGV4aWJsZUJveCwgc28gaXQgbWlnaHQgYmUgcmVmYWN0b3Jl
ZCBzb21laG93LgpAQCAtMTMyMiw3ICsxMjkzLDcgQEAgc3RkOjpvcHRpb25hbDxpbnQ+IFJlbmRl
ckdyaWQ6OmZpcnN0TGluZUJhc2VsaW5lKCkgY29uc3QKICAgICBpZiAoIWJhc2VsaW5lQ2hpbGQp
CiAgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CiAKLSAgICBhdXRvIGJhc2VsaW5lID0gaXNP
cnRob2dvbmFsQ2hpbGQoKmJhc2VsaW5lQ2hpbGQpID8gc3RkOjpudWxsb3B0IDogYmFzZWxpbmVD
aGlsZC0+Zmlyc3RMaW5lQmFzZWxpbmUoKTsKKyAgICBhdXRvIGJhc2VsaW5lID0gR3JpZExheW91
dFV0aWxzOjppc09ydGhvZ29uYWxDaGlsZCgqdGhpcywgKmJhc2VsaW5lQ2hpbGQpID8gc3RkOjpu
dWxsb3B0IDogYmFzZWxpbmVDaGlsZC0+Zmlyc3RMaW5lQmFzZWxpbmUoKTsKICAgICAvLyBXZSB0
YWtlIGJvcmRlci1ib3gncyBib3R0b20gaWYgbm8gdmFsaWQgYmFzZWxpbmUuCiAgICAgaWYgKCFi
YXNlbGluZSkgewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHBhc3MgfGRpcmVjdGlvbnwg
aW50byBmaXJzdExpbmVCYXNlbGluZSBhbmQgc3RvcCBiYWlsaW5nIG91dCBpZiB3ZSdyZSBhIHdy
aXRpbmcKQEAgLTEzNTIsNyArMTMyMyw3IEBAIEdyaWRBeGlzUG9zaXRpb24gUmVuZGVyR3JpZDo6
Y29sdW1uQXhpc1Bvc2l0aW9uRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCkKICAgICAg
ICAgLy8gRklYTUU6IFNob3VsZCB3ZSBpbXBsZW1lbnQgdGhpcyBsb2dpYyBpbiBhIGdlbmVyaWMg
dXRpbGl0eSBmdW5jdGlvbiA/CiAgICAgICAgIC8vIEFsaWducyB0aGUgYWxpZ25tZW50IHN1Ympl
Y3QgdG8gYmUgZmx1c2ggd2l0aCB0aGUgZWRnZSBvZiB0aGUgYWxpZ25tZW50IGNvbnRhaW5lcgog
ICAgICAgICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbGlnbm1lbnQgc3ViamVjdCdzICdzdGFy
dCcgc2lkZSBpbiB0aGUgY29sdW1uIGF4aXMuCi0gICAgICAgIGlmIChpc09ydGhvZ29uYWxDaGls
ZChjaGlsZCkpIHsKKyAgICAgICAgaWYgKEdyaWRMYXlvdXRVdGlsczo6aXNPcnRob2dvbmFsQ2hp
bGQoKnRoaXMsIGNoaWxkKSkgewogICAgICAgICAgICAgLy8gSWYgb3J0aG9nb25hbCB3cml0aW5n
LW1vZGVzLCBzZWxmLXN0YXJ0IHdpbGwgYmUgYmFzZWQgb24gdGhlIGNoaWxkJ3MgaW5saW5lLWF4
aXMKICAgICAgICAgICAgIC8vIGRpcmVjdGlvbiAoaW5saW5lLXN0YXJ0KSwgYmVjYXVzZSBpdCdz
IHRoZSBvbmUgcGFyYWxsZWwgdG8gdGhlIGNvbHVtbiBheGlzLgogICAgICAgICAgICAgaWYgKHN0
eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkKQEAgLTEzNjUsNyArMTMzNiw3IEBA
IEdyaWRBeGlzUG9zaXRpb24gUmVuZGVyR3JpZDo6Y29sdW1uQXhpc1Bvc2l0aW9uRm9yQ2hpbGQo
Y29uc3QgUmVuZGVyQm94JiBjaGlsZCkKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBpbXBs
ZW1lbnQgdGhpcyBsb2dpYyBpbiBhIGdlbmVyaWMgdXRpbGl0eSBmdW5jdGlvbiA/CiAgICAgICAg
IC8vIEFsaWducyB0aGUgYWxpZ25tZW50IHN1YmplY3QgdG8gYmUgZmx1c2ggd2l0aCB0aGUgZWRn
ZSBvZiB0aGUgYWxpZ25tZW50IGNvbnRhaW5lcgogICAgICAgICAvLyBjb3JyZXNwb25kaW5nIHRv
IHRoZSBhbGlnbm1lbnQgc3ViamVjdCdzICdlbmQnIHNpZGUgaW4gdGhlIGNvbHVtbiBheGlzLgot
ICAgICAgICBpZiAoaXNPcnRob2dvbmFsQ2hpbGQoY2hpbGQpKSB7CisgICAgICAgIGlmIChHcmlk
TGF5b3V0VXRpbHM6OmlzT3J0aG9nb25hbENoaWxkKCp0aGlzLCBjaGlsZCkpIHsKICAgICAgICAg
ICAgIC8vIElmIG9ydGhvZ29uYWwgd3JpdGluZy1tb2Rlcywgc2VsZi1lbmQgd2lsbCBiZSBiYXNl
ZCBvbiB0aGUgY2hpbGQncyBpbmxpbmUtYXhpcwogICAgICAgICAgICAgLy8gZGlyZWN0aW9uLCAo
aW5saW5lLWVuZCkgYmVjYXVzZSBpdCdzIHRoZSBvbmUgcGFyYWxsZWwgdG8gdGhlIGNvbHVtbiBh
eGlzLgogICAgICAgICAgICAgaWYgKHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUo
KSkKQEAgLTE0MTcsNyArMTM4OCw3IEBAIEdyaWRBeGlzUG9zaXRpb24gUmVuZGVyR3JpZDo6cm93
QXhpc1Bvc2l0aW9uRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCkgY29uCiAgICAgICAg
IC8vIEZJWE1FOiBTaG91bGQgd2UgaW1wbGVtZW50IHRoaXMgbG9naWMgaW4gYSBnZW5lcmljIHV0
aWxpdHkgZnVuY3Rpb24gPwogICAgICAgICAvLyBBbGlnbnMgdGhlIGFsaWdubWVudCBzdWJqZWN0
IHRvIGJlIGZsdXNoIHdpdGggdGhlIGVkZ2Ugb2YgdGhlIGFsaWdubWVudCBjb250YWluZXIKICAg
ICAgICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgYWxpZ25tZW50IHN1YmplY3QncyAnc3RhcnQn
IHNpZGUgaW4gdGhlIHJvdyBheGlzLgotICAgICAgICBpZiAoaXNPcnRob2dvbmFsQ2hpbGQoY2hp
bGQpKSB7CisgICAgICAgIGlmIChHcmlkTGF5b3V0VXRpbHM6OmlzT3J0aG9nb25hbENoaWxkKCp0
aGlzLCBjaGlsZCkpIHsKICAgICAgICAgICAgIC8vIElmIG9ydGhvZ29uYWwgd3JpdGluZy1tb2Rl
cywgc2VsZi1zdGFydCB3aWxsIGJlIGJhc2VkIG9uIHRoZSBjaGlsZCdzIGJsb2NrLWF4aXMKICAg
ICAgICAgICAgIC8vIGRpcmVjdGlvbiwgYmVjYXVzZSBpdCdzIHRoZSBvbmUgcGFyYWxsZWwgdG8g
dGhlIHJvdyBheGlzLgogICAgICAgICAgICAgaWYgKGNoaWxkLnN0eWxlKCkuaXNGbGlwcGVkQmxv
Y2tzV3JpdGluZ01vZGUoKSkKQEAgLTE0MzAsNyArMTQwMSw3IEBAIEdyaWRBeGlzUG9zaXRpb24g
UmVuZGVyR3JpZDo6cm93QXhpc1Bvc2l0aW9uRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGls
ZCkgY29uCiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgaW1wbGVtZW50IHRoaXMgbG9naWMg
aW4gYSBnZW5lcmljIHV0aWxpdHkgZnVuY3Rpb24gPwogICAgICAgICAvLyBBbGlnbnMgdGhlIGFs
aWdubWVudCBzdWJqZWN0IHRvIGJlIGZsdXNoIHdpdGggdGhlIGVkZ2Ugb2YgdGhlIGFsaWdubWVu
dCBjb250YWluZXIKICAgICAgICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgYWxpZ25tZW50IHN1
YmplY3QncyAnZW5kJyBzaWRlIGluIHRoZSByb3cgYXhpcy4KLSAgICAgICAgaWYgKGlzT3J0aG9n
b25hbENoaWxkKGNoaWxkKSkgeworICAgICAgICBpZiAoR3JpZExheW91dFV0aWxzOjppc09ydGhv
Z29uYWxDaGlsZCgqdGhpcywgY2hpbGQpKSB7CiAgICAgICAgICAgICAvLyBJZiBvcnRob2dvbmFs
IHdyaXRpbmctbW9kZXMsIHNlbGYtZW5kIHdpbGwgYmUgYmFzZWQgb24gdGhlIGNoaWxkJ3MgYmxv
Y2stYXhpcwogICAgICAgICAgICAgLy8gZGlyZWN0aW9uLCBiZWNhdXNlIGl0J3MgdGhlIG9uZSBw
YXJhbGxlbCB0byB0aGUgcm93IGF4aXMuCiAgICAgICAgICAgICBpZiAoY2hpbGQuc3R5bGUoKS5p
c0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKQpAQCAtMTQ5Myw3ICsxNDY0LDcgQEAgTGF5b3V0
VW5pdCBSZW5kZXJHcmlkOjpjb2x1bW5BeGlzT2Zmc2V0Rm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94
JiBjaGlsZCkgY29uc3QKICAgICAgICAgLy8gKHRoaXMgZG9lcyBub3QgaGF2ZSB0byBiZSBkb25l
IGZvciB0aGUgbGFzdCB0cmFjayBhcyB0aGVyZSBhcmUgbm8gbW9yZSBtX3Jvd1Bvc2l0aW9ucyBh
ZnRlciBpdCkuCiAgICAgICAgIGlmIChjaGlsZEVuZExpbmUgPCBtX3Jvd1Bvc2l0aW9ucy5zaXpl
KCkgLSAxKQogICAgICAgICAgICAgZW5kT2ZSb3cgLT0gZ3JpZEdhcChGb3JSb3dzKSArIG1fb2Zm
c2V0QmV0d2VlblJvd3M7Ci0gICAgICAgIExheW91dFVuaXQgY29sdW1uQXhpc0NoaWxkU2l6ZSA9
IGlzT3J0aG9nb25hbENoaWxkKGNoaWxkKSA/IGNoaWxkLmxvZ2ljYWxXaWR0aCgpICsgY2hpbGQu
bWFyZ2luTG9naWNhbFdpZHRoKCkgOiBjaGlsZC5sb2dpY2FsSGVpZ2h0KCkgKyBjaGlsZC5tYXJn
aW5Mb2dpY2FsSGVpZ2h0KCk7CisgICAgICAgIExheW91dFVuaXQgY29sdW1uQXhpc0NoaWxkU2l6
ZSA9IEdyaWRMYXlvdXRVdGlsczo6aXNPcnRob2dvbmFsQ2hpbGQoKnRoaXMsIGNoaWxkKSA/IGNo
aWxkLmxvZ2ljYWxXaWR0aCgpICsgY2hpbGQubWFyZ2luTG9naWNhbFdpZHRoKCkgOiBjaGlsZC5s
b2dpY2FsSGVpZ2h0KCkgKyBjaGlsZC5tYXJnaW5Mb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAgIGF1
dG8gb3ZlcmZsb3cgPSBhbGlnblNlbGZGb3JDaGlsZChjaGlsZCkub3ZlcmZsb3coKTsKICAgICAg
ICAgTGF5b3V0VW5pdCBvZmZzZXRGcm9tU3RhcnRQb3NpdGlvbiA9IGNvbXB1dGVPdmVyZmxvd0Fs
aWdubWVudE9mZnNldChvdmVyZmxvdywgZW5kT2ZSb3cgLSBzdGFydE9mUm93LCBjb2x1bW5BeGlz
Q2hpbGRTaXplKTsKICAgICAgICAgcmV0dXJuIHN0YXJ0UG9zaXRpb24gKyAoYXhpc1Bvc2l0aW9u
ID09IEdyaWRBeGlzRW5kID8gb2Zmc2V0RnJvbVN0YXJ0UG9zaXRpb24gOiBvZmZzZXRGcm9tU3Rh
cnRQb3NpdGlvbiAvIDIpOwpAQCAtMTUyNSw3ICsxNDk2LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJH
cmlkOjpyb3dBeGlzT2Zmc2V0Rm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCkgY29uc3QK
ICAgICAgICAgLy8gKHRoaXMgZG9lcyBub3QgaGF2ZSB0byBiZSBkb25lIGZvciB0aGUgbGFzdCB0
cmFjayBhcyB0aGVyZSBhcmUgbm8gbW9yZSBtX2NvbHVtblBvc2l0aW9ucyBhZnRlciBpdCkuCiAg
ICAgICAgIGlmIChjaGlsZEVuZExpbmUgPCBtX2NvbHVtblBvc2l0aW9ucy5zaXplKCkgLSAxKQog
ICAgICAgICAgICAgZW5kT2ZDb2x1bW4gLT0gZ3JpZEdhcChGb3JDb2x1bW5zKSArIG1fb2Zmc2V0
QmV0d2VlbkNvbHVtbnM7Ci0gICAgICAgIExheW91dFVuaXQgcm93QXhpc0NoaWxkU2l6ZSA9IGlz
T3J0aG9nb25hbENoaWxkKGNoaWxkKSA/IGNoaWxkLmxvZ2ljYWxIZWlnaHQoKSArIGNoaWxkLm1h
cmdpbkxvZ2ljYWxIZWlnaHQoKSA6IGNoaWxkLmxvZ2ljYWxXaWR0aCgpICsgY2hpbGQubWFyZ2lu
TG9naWNhbFdpZHRoKCk7CisgICAgICAgIExheW91dFVuaXQgcm93QXhpc0NoaWxkU2l6ZSA9IEdy
aWRMYXlvdXRVdGlsczo6aXNPcnRob2dvbmFsQ2hpbGQoKnRoaXMsIGNoaWxkKSA/IGNoaWxkLmxv
Z2ljYWxIZWlnaHQoKSArIGNoaWxkLm1hcmdpbkxvZ2ljYWxIZWlnaHQoKSA6IGNoaWxkLmxvZ2lj
YWxXaWR0aCgpICsgY2hpbGQubWFyZ2luTG9naWNhbFdpZHRoKCk7CiAgICAgICAgIGF1dG8gb3Zl
cmZsb3cgPSBqdXN0aWZ5U2VsZkZvckNoaWxkKGNoaWxkKS5vdmVyZmxvdygpOwogICAgICAgICBM
YXlvdXRVbml0IG9mZnNldEZyb21TdGFydFBvc2l0aW9uID0gY29tcHV0ZU92ZXJmbG93QWxpZ25t
ZW50T2Zmc2V0KG92ZXJmbG93LCBlbmRPZkNvbHVtbiAtIHN0YXJ0T2ZDb2x1bW4sIHJvd0F4aXND
aGlsZFNpemUpOwogICAgICAgICByZXR1cm4gc3RhcnRQb3NpdGlvbiArIChheGlzUG9zaXRpb24g
PT0gR3JpZEF4aXNFbmQgPyBvZmZzZXRGcm9tU3RhcnRQb3NpdGlvbiA6IG9mZnNldEZyb21TdGFy
dFBvc2l0aW9uIC8gMik7CkBAIC0xNjU0LDE4ICsxNjI1LDE5IEBAIExheW91dFBvaW50IFJlbmRl
ckdyaWQ6OmZpbmRDaGlsZExvZ2ljYWxQb3NpdGlvbihjb25zdCBSZW5kZXJCb3gmIGNoaWxkKSBj
b25zdAogewogICAgIExheW91dFVuaXQgY29sdW1uQXhpc09mZnNldCA9IGNvbHVtbkF4aXNPZmZz
ZXRGb3JDaGlsZChjaGlsZCk7CiAgICAgTGF5b3V0VW5pdCByb3dBeGlzT2Zmc2V0ID0gcm93QXhp
c09mZnNldEZvckNoaWxkKGNoaWxkKTsKKyAgICBib29sIGlzT3J0aG9nb25hbENoaWxkID0gR3Jp
ZExheW91dFV0aWxzOjppc09ydGhvZ29uYWxDaGlsZCgqdGhpcywgY2hpbGQpOwogCiAgICAgLy8g
V2Ugc3RvcmVkIG1fY29sdW1uUG9zaXRpb25zJ3MgZGF0YSBpZ25vcmluZyB0aGUgZGlyZWN0aW9u
LCBoZW5jZSB3ZSBtaWdodCBuZWVkIG5vdwogICAgIC8vIHRvIHRyYW5zbGF0ZSBwb3NpdGlvbnMg
ZnJvbSBSVEwgdG8gTFRSLCBhcyBpdCdzIG1vcmUgY29udmVuaWVudCBmb3IgcGFpbnRpbmcuCiAg
ICAgaWYgKCFzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKLSAgICAgICAgcm93QXhp
c09mZnNldCA9IHRyYW5zbGF0ZVJUTENvb3JkaW5hdGUocm93QXhpc09mZnNldCkgLSAoaXNPcnRo
b2dvbmFsQ2hpbGQoY2hpbGQpID8gY2hpbGQubG9naWNhbEhlaWdodCgpICA6IGNoaWxkLmxvZ2lj
YWxXaWR0aCgpKTsKKyAgICAgICAgcm93QXhpc09mZnNldCA9IHRyYW5zbGF0ZVJUTENvb3JkaW5h
dGUocm93QXhpc09mZnNldCkgLSAoaXNPcnRob2dvbmFsQ2hpbGQgPyBjaGlsZC5sb2dpY2FsSGVp
Z2h0KCkgIDogY2hpbGQubG9naWNhbFdpZHRoKCkpOwogCiAgICAgLy8gIkluIHRoZSBwb3NpdGlv
bmluZyBwaGFzZSBbLi4uXSBjYWxjdWxhdGlvbnMgYXJlIHBlcmZvcm1lZCBhY2NvcmRpbmcgdG8g
dGhlIHdyaXRpbmcgbW9kZQogICAgIC8vIG9mIHRoZSBjb250YWluaW5nIGJsb2NrIG9mIHRoZSBi
b3ggZXN0YWJsaXNoaW5nIHRoZSBvcnRob2dvbmFsIGZsb3cuIiBIb3dldmVyLCB0aGUKICAgICAv
LyByZXN1bHRpbmcgTGF5b3V0UG9pbnQgd2lsbCBiZSB1c2VkIGluICdzZXRMb2dpY2FsUG9zaXRp
b24nIGluIG9yZGVyIHRvIHNldCB0aGUgY2hpbGQncwogICAgIC8vIGxvZ2ljYWwgcG9zaXRpb24s
IHdoaWNoIHdpbGwgb25seSB0YWtlIGludG8gYWNjb3VudCB0aGUgY2hpbGQncyB3cml0aW5nLW1v
ZGUuCiAgICAgTGF5b3V0UG9pbnQgY2hpbGRMb2NhdGlvbihyb3dBeGlzT2Zmc2V0LCBjb2x1bW5B
eGlzT2Zmc2V0KTsKLSAgICByZXR1cm4gaXNPcnRob2dvbmFsQ2hpbGQoY2hpbGQpID8gY2hpbGRM
b2NhdGlvbi50cmFuc3Bvc2VkUG9pbnQoKSA6IGNoaWxkTG9jYXRpb247CisgICAgcmV0dXJuIGlz
T3J0aG9nb25hbENoaWxkID8gY2hpbGRMb2NhdGlvbi50cmFuc3Bvc2VkUG9pbnQoKSA6IGNoaWxk
TG9jYXRpb247CiB9CiAKIHVuc2lnbmVkIFJlbmRlckdyaWQ6Om51bVRyYWNrcyhHcmlkVHJhY2tT
aXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBHcmlkJiBncmlkKSBjb25zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327406</attachid>
            <date>2017-11-21 06:33:35 -0800</date>
            <delta_ts>2017-11-21 07:21:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179633-20171121153333.patch</filename>
            <type>text/plain</type>
            <size>31018</size>
            <attacher name="Javier Fernandez">jfernandez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI0OTExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzUwODVhOWU3ODU3NjZm
N2E0MjEwMDRlYmJmYTcyYWUzNzYwN2UzOS4uYmQ5ZTJjZjcwNWE2YjlkZWVlMTdmOTk0ODFjZTRm
ZTAyMDU0N2M4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE3LTExLTEzICBKYXZp
ZXIgRmVybmFuZGV6ICA8amZlcm5hbmRlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtjc3MtZ3Jp
ZF0gUmVmYWN0b3JpbmcgYW5kIG5ldyBuYW1lc3BhY2Ugd2l0aCBncmlkIHJlbGF0ZWQgdXRpbGl0
eSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3OTYzMworCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAg
IEFkZGVkIGEgbmV3IG5hbWVzcGFjZSB3aXRoIHNldmVyYWwgdXRpbGl0eSBmdW5jdGlvbnMgdG8g
c2hhcmUgbG9naWMKKyAgICAgICAgYmV0d2VlbiBSZW5kZXJHcmlkIGFuZCBHcmlkVHJhY2tTaXpp
bmdBbGdvcml0aG0uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBzaW5jZSBubyBuZXcgZnVuY3Rp
b25hbGl0eSBpcyBhZGRlZC4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcvR3Jp
ZExheW91dFV0aWxzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmlkTGF5b3V0VXRp
bHM6OmNvbXB1dGVNYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyaWRMYXlvdXRVdGlsczo6bWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmlkTGF5b3V0VXRpbHM6OmlzT3J0aG9nb25hbENoaWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyaWRMYXlvdXRVdGlsczo6Zmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9HcmlkTGF5b3V0VXRpbHMuaDogQWRkZWQuCisgICAgICAgICogcmVu
ZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmFzc3VtZWRSb3dzU2l6ZUZvck9ydGhvZ29uYWxDaGls
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmlkVHJhY2tTaXppbmdBbGdvcml0aG1TdHJh
dGVneTo6bG9naWNhbEhlaWdodEZvckNoaWxkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
aWRUcmFja1NpemluZ0FsZ29yaXRobVN0cmF0ZWd5OjptaW5Db250ZW50Rm9yQ2hpbGQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtU3RyYXRlZ3k6Om1h
eENvbnRlbnRGb3JDaGlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmlkVHJhY2tTaXpp
bmdBbGdvcml0aG1TdHJhdGVneTo6bWluU2l6ZUZvckNoaWxkIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRlZmluaXRlU2l6ZVN0cmF0ZWd5OjptaW5Mb2dpY2FsV2lkdGhGb3JDaGlsZCBjb25z
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyR3JpZDo6bGF5b3V0QmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3Jp
ZDo6cGxhY2VJdGVtc09uR3JpZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlk
OjpsYXlvdXRQb3NpdGlvbmVkT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6
OmF2YWlsYWJsZUFsaWdubWVudFNwYWNlRm9yQ2hpbGRCZWZvcmVTdHJldGNoaW5nIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmFwcGx5U3RyZXRjaEFsaWdubWVudFRvQ2hp
bGRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjppc0lubGluZUJhc2Vs
aW5lQWxpZ25lZENoaWxkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmZp
cnN0TGluZUJhc2VsaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmNv
bHVtbkF4aXNQb3NpdGlvbkZvckNoaWxkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckdyaWQ6OnJvd0F4aXNQb3NpdGlvbkZvckNoaWxkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckdyaWQ6OmNvbHVtbkF4aXNPZmZzZXRGb3JDaGlsZCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJHcmlkOjpyb3dBeGlzT2Zmc2V0Rm9yQ2hpbGQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6ZmluZENoaWxkTG9naWNhbFBvc2l0aW9uIGNvbnN0KToK
KwogMjAxNy0xMS0xNiAgRnJlZGVyaWMgV2FuZyAgPGZ3YW5nQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgQVNTRVJUSU9OIEZBSUxFRDogIWlzQW5vbnltb3VzKCkgaW4gV2ViQ29yZTo6UmVuZGVyTWF0
aE1MT3BlcmF0b3I6OnVwZGF0ZVRva2VuQ29udGVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBmYzY3Y2Y1
ZDFhYTM0ZTZmOTZmZDQyNTEzYzRiZjYxZGUwZjczMTRiLi43ZTI2YTgyZGUwMjc2YjdkMzlkMzUy
OTk0M2MyMmU0NzhkYzY4OWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTcyOCw2ICsxNzI4LDcgQEAg
cmVuZGVyaW5nL0ZsZXhpYmxlQm94QWxnb3JpdGhtLmNwcAogcmVuZGVyaW5nL0ZpeGVkVGFibGVM
YXlvdXQuY3BwCiByZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmNwcAogcmVuZGVyaW5nL0dyaWQu
Y3BwCityZW5kZXJpbmcvR3JpZExheW91dEZ1bmN0aW9ucy5jcHAKIHJlbmRlcmluZy9HcmlkVHJh
Y2tTaXppbmdBbGdvcml0aG0uY3BwCiByZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmNwcAogcmVu
ZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvR3JpZExheW91dEZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
R3JpZExheW91dEZ1bmN0aW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGUyMzJlNmZjMDMyNTAxZDYyYjE1
MTc5YTIyYTM2ZDY0YzRlZjJhZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9HcmlkTGF5b3V0RnVuY3Rpb25zLmNwcApAQCAtMCwwICsxLDY5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmlkTGF5
b3V0RnVuY3Rpb25zLmgiCisKKyNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgR3JpZExheW91dEZ1bmN0aW9ucyB7CisKK0xheW91
dFVuaXQgY29tcHV0ZU1hcmdpbkxvZ2ljYWxTaXplRm9yQ2hpbGQoY29uc3QgUmVuZGVyR3JpZCYg
Z3JpZCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgUmVuZGVyQm94
JiBjaGlsZCkKK3sKKyAgICBpZiAoIWNoaWxkLnN0eWxlKCkuaGFzTWFyZ2luKCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgTGF5b3V0VW5pdCBtYXJnaW5TdGFydDsKKyAgICBMYXlvdXRVbml0
IG1hcmdpbkVuZDsKKyAgICBpZiAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMpCisgICAgICAgIGNo
aWxkLmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25NYXJnaW5zKGdyaWQsIGNoaWxkLmNvbnRhaW5pbmdC
bG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnRJbkZyYWdtZW50KG51bGxwdHIpLCBjaGlsZC5sb2dp
Y2FsV2lkdGgoKSwgbWFyZ2luU3RhcnQsIG1hcmdpbkVuZCk7CisgICAgZWxzZQorICAgICAgICBj
aGlsZC5jb21wdXRlQmxvY2tEaXJlY3Rpb25NYXJnaW5zKGdyaWQsIG1hcmdpblN0YXJ0LCBtYXJn
aW5FbmQpOworCisgICAgcmV0dXJuIG1hcmdpblN0YXJ0ICsgbWFyZ2luRW5kOworfQorCitMYXlv
dXRVbml0IG1hcmdpbkxvZ2ljYWxTaXplRm9yQ2hpbGQoY29uc3QgUmVuZGVyR3JpZCYgZ3JpZCwg
R3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgUmVuZGVyQm94JiBjaGls
ZCkKK3sKKyAgICBpZiAoY2hpbGQubmVlZHNMYXlvdXQoKSkKKyAgICAgICAgcmV0dXJuIGNvbXB1
dGVNYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKGdyaWQsIGRpcmVjdGlvbiwgY2hpbGQpOworICAg
IHJldHVybiBmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChncmlkLCBjaGlsZCwgZGlyZWN0aW9u
KSA9PSBGb3JDb2x1bW5zID8gY2hpbGQubWFyZ2luTG9naWNhbFdpZHRoKCkgOiBjaGlsZC5tYXJn
aW5Mb2dpY2FsSGVpZ2h0KCk7Cit9CisKK2Jvb2wgaXNPcnRob2dvbmFsQ2hpbGQoY29uc3QgUmVu
ZGVyR3JpZCYgZ3JpZCwgY29uc3QgUmVuZGVyQm94JiBjaGlsZCkKK3sKKyAgICByZXR1cm4gY2hp
bGQuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAhPSBncmlkLmlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCk7Cit9CisKK0dyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBmbG93QXdhcmVEaXJlY3Rpb25G
b3JDaGlsZChjb25zdCBSZW5kZXJHcmlkJiBncmlkLCBjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBH
cmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIHJldHVybiAhaXNPcnRo
b2dvbmFsQ2hpbGQoZ3JpZCwgY2hpbGQpID8gZGlyZWN0aW9uIDogKGRpcmVjdGlvbiA9PSBGb3JD
b2x1bW5zID8gRm9yUm93cyA6IEZvckNvbHVtbnMpOworfQorCit9IC8vIG5hbWVzcGFjZSBHcmlk
TGF5b3V0RnVuY3Rpb25zCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkTGF5b3V0RnVuY3Rpb25zLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvR3JpZExheW91dEZ1bmN0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ0YTc4ODYx
MTQ5M2Q1YTAyNWYwOTgwM2VlYWYyOTI5YzlkMThiNjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZExheW91dEZ1bmN0aW9ucy5oCkBAIC0wLDAgKzEsNDMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJM
YXlvdXRVbml0LmgiCisjaW5jbHVkZSAiUmVuZGVyR3JpZC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK25hbWVzcGFjZSBHcmlkTGF5b3V0RnVuY3Rpb25zIHsKKworTGF5b3V0VW5pdCBjb21w
dXRlTWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZChjb25zdCBSZW5kZXJHcmlkJiwgR3JpZFRyYWNr
U2l6aW5nRGlyZWN0aW9uLCBjb25zdCBSZW5kZXJCb3gmKTsKK0xheW91dFVuaXQgbWFyZ2luTG9n
aWNhbFNpemVGb3JDaGlsZChjb25zdCBSZW5kZXJHcmlkJiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0
aW9uLCBjb25zdCBSZW5kZXJCb3gmKTsKK2Jvb2wgaXNPcnRob2dvbmFsQ2hpbGQoY29uc3QgUmVu
ZGVyR3JpZCYsIGNvbnN0IFJlbmRlckJveCYpOworR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGZs
b3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKGNvbnN0IFJlbmRlckdyaWQmLCBjb25zdCBSZW5kZXJC
b3gmLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24pOworCit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1Np
emluZ0FsZ29yaXRobS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6
aW5nQWxnb3JpdGhtLmNwcAppbmRleCAyOTY5ZWRlNGE3YTdjZTgyMDA5NWU3YzUyY2ZiYjE1NjJh
OGY3ZDc0Li5hYjBlYzllMDdjOTI5MjE2N2U5MmUyOWM0MGI4ZjFlYzY4ODRjNmJjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGht
LmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiR3JpZC5oIgogI2luY2x1ZGUgIkdy
aWRBcmVhLmgiCisjaW5jbHVkZSAiR3JpZExheW91dEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlJl
bmRlckdyaWQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTEwLDMyICsxMTEsMTEgQEAg
c3RhdGljIHZvaWQgc2V0T3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50U2l6ZUZvckNoaWxk
KFJlbmRlckJveCYgY2hpbGQsIEdyaWQKICAgICAgICAgY2hpbGQuc2V0T3ZlcnJpZGVDb250YWlu
aW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodChzaXplKTsKIH0KIAotc3RhdGljIEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbiBmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChjb25zdCBSZW5kZXJH
cmlkKiBncmlkLCBjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rp
b24gZGlyZWN0aW9uKQotewotICAgIEFTU0VSVChncmlkKTsKLSAgICByZXR1cm4gIWdyaWQtPmlz
T3J0aG9nb25hbENoaWxkKGNoaWxkKSA/IGRpcmVjdGlvbiA6IChkaXJlY3Rpb24gPT0gRm9yQ29s
dW1ucyA/IEZvclJvd3MgOiBGb3JDb2x1bW5zKTsKLX0KLQogc3RhdGljIHN0ZDo6b3B0aW9uYWw8
TGF5b3V0VW5pdD4gb3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50U2l6ZUZvckNoaWxkKGNv
bnN0IFJlbmRlckJveCYgY2hpbGQsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24p
CiB7CiAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gY2hpbGQub3ZlcnJpZGVD
b250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoKCkgOiBjaGlsZC5vdmVycmlkZUNvbnRh
aW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCk7CiB9CiAKLXN0YXRpYyBMYXlvdXRVbml0
IGNvbXB1dGVNYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKEdyaWRUcmFja1NpemluZ0RpcmVjdGlv
biBkaXJlY3Rpb24sIGNvbnN0IFJlbmRlckdyaWQmIHJlbmRlckdyaWQsIGNvbnN0IFJlbmRlckJv
eCYgY2hpbGQpCi17Ci0gICAgaWYgKCFjaGlsZC5zdHlsZSgpLmhhc01hcmdpbigpKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIExheW91dFVuaXQgbWFyZ2luU3RhcnQ7Ci0gICAgTGF5b3V0VW5p
dCBtYXJnaW5FbmQ7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKQotICAgICAgICBj
aGlsZC5jb21wdXRlSW5saW5lRGlyZWN0aW9uTWFyZ2lucyhyZW5kZXJHcmlkLCBjaGlsZC5jb250
YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50SW5GcmFnbWVudChudWxscHRyKSwgY2hp
bGQubG9naWNhbFdpZHRoKCksIG1hcmdpblN0YXJ0LCBtYXJnaW5FbmQpOwotICAgIGVsc2UKLSAg
ICAgICAgY2hpbGQuY29tcHV0ZUJsb2NrRGlyZWN0aW9uTWFyZ2lucyhyZW5kZXJHcmlkLCBtYXJn
aW5TdGFydCwgbWFyZ2luRW5kKTsKLQotICAgIHJldHVybiBtYXJnaW5TdGFydCArIG1hcmdpbkVu
ZDsKLX0KLQogLy8gRklYTUU6IHdlIGJvcnJvd2VkIHRoaXMgZnJvbSBSZW5kZXJCbG9jay4gV2Ug
Y2Fubm90IGNhbGwgaXQgZnJvbSBoZXJlIGJlY2F1c2UgaXQncyBwcm90ZWN0ZWQgZm9yIFJlbmRl
ck9iamVjdHMuCiBzdGF0aWMgTGF5b3V0VW5pdCBtYXJnaW5JbnRyaW5zaWNMb2dpY2FsV2lkdGhG
b3JDaGlsZChjb25zdCBSZW5kZXJHcmlkKiByZW5kZXJHcmlkLCBSZW5kZXJCb3gmIGNoaWxkKQog
ewpAQCAtNTY0LDcgKzU0NCw3IEBAIHZvaWQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpkaXN0
cmlidXRlU3BhY2VUb1RyYWNrcyhWZWN0b3I8R3JpZFRyYWNrKj4mIHRyYWNrCiAKIExheW91dFVu
aXQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjphc3N1bWVkUm93c1NpemVGb3JPcnRob2dvbmFs
Q2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9yZW5k
ZXJHcmlkLT5pc09ydGhvZ29uYWxDaGlsZChjaGlsZCkpOworICAgIEFTU0VSVChHcmlkTGF5b3V0
RnVuY3Rpb25zOjppc09ydGhvZ29uYWxDaGlsZCgqbV9yZW5kZXJHcmlkLCBjaGlsZCkpOwogICAg
IGNvbnN0IEdyaWRTcGFuJiBzcGFuID0gbV9ncmlkLmdyaWRJdGVtU3BhbihjaGlsZCwgRm9yUm93
cyk7CiAgICAgTGF5b3V0VW5pdCBncmlkQXJlYVNpemU7CiAgICAgYm9vbCBncmlkQXJlYUlzSW5k
ZWZpbml0ZSA9IGZhbHNlOwpAQCAtNzIyLDcgKzcwMiw3IEBAIHZvaWQgR3JpZFRyYWNrU2l6aW5n
QWxnb3JpdGhtOjpjb21wdXRlR3JpZENvbnRhaW5lckludHJpbnNpY1NpemVzKCkKIC8vIEdyaWRU
cmFja1NpemluZ0FsZ29yaXRobVN0cmF0ZWd5LgogTGF5b3V0VW5pdCBHcmlkVHJhY2tTaXppbmdB
bGdvcml0aG1TdHJhdGVneTo6bG9naWNhbEhlaWdodEZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQp
IGNvbnN0CiB7Ci0gICAgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGNoaWxkQmxvY2tEaXJlY3Rp
b24gPSBmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChyZW5kZXJHcmlkKCksIGNoaWxkLCBGb3JS
b3dzKTsKKyAgICBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gY2hpbGRCbG9ja0RpcmVjdGlvbiA9
IEdyaWRMYXlvdXRGdW5jdGlvbnM6OmZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKCpyZW5kZXJH
cmlkKCksIGNoaWxkLCBGb3JSb3dzKTsKICAgICAvLyBJZiB8Y2hpbGR8IGhhcyBhIHJlbGF0aXZl
IGxvZ2ljYWwgaGVpZ2h0LCB3ZSBzaG91bGRuJ3QgbGV0IGl0IG92ZXJyaWRlIGl0cyBpbnRyaW5z
aWMgaGVpZ2h0LCB3aGljaCBpcwogICAgIC8vIHdoYXQgd2UgYXJlIGludGVyZXN0ZWQgaW4gaGVy
ZS4gVGh1cyB3ZSBuZWVkIHRvIHNldCB0aGUgYmxvY2stYXhpcyBvdmVycmlkZSBzaXplIHRvIC0x
IChubyBwb3NzaWJsZSByZXNvbHV0aW9uKS4KICAgICBpZiAoc2hvdWxkQ2xlYXJPdmVycmlkZUNv
bnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY2hpbGQsIEZvclJvd3MpKSB7CkBAIC03
MzUsMTcgKzcxNSwxNiBAQCBMYXlvdXRVbml0IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobVN0cmF0
ZWd5Ojpsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoUmVuZGVyQm94JiBjaAogICAgICAgICBjaGlsZC5j
bGVhck92ZXJyaWRlTG9naWNhbENvbnRlbnRIZWlnaHQoKTsKIAogICAgIGNoaWxkLmxheW91dElm
TmVlZGVkKCk7Ci0gICAgcmV0dXJuIGNoaWxkLmxvZ2ljYWxIZWlnaHQoKSArIGNoaWxkLm1hcmdp
bkxvZ2ljYWxIZWlnaHQoKTsKKyAgICByZXR1cm4gY2hpbGQubG9naWNhbEhlaWdodCgpICsgR3Jp
ZExheW91dEZ1bmN0aW9uczo6bWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZCgqcmVuZGVyR3JpZCgp
LCBjaGlsZEJsb2NrRGlyZWN0aW9uLCBjaGlsZCk7CiB9CiAKIExheW91dFVuaXQgR3JpZFRyYWNr
U2l6aW5nQWxnb3JpdGhtU3RyYXRlZ3k6Om1pbkNvbnRlbnRGb3JDaGlsZChSZW5kZXJCb3gmIGNo
aWxkKSBjb25zdAogewotICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBjaGlsZElubGluZURp
cmVjdGlvbiA9IGZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKHJlbmRlckdyaWQoKSwgY2hpbGQs
IEZvckNvbHVtbnMpOworICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBjaGlsZElubGluZURp
cmVjdGlvbiA9IEdyaWRMYXlvdXRGdW5jdGlvbnM6OmZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxk
KCpyZW5kZXJHcmlkKCksIGNoaWxkLCBGb3JDb2x1bW5zKTsKICAgICBpZiAoZGlyZWN0aW9uKCkg
PT0gY2hpbGRJbmxpbmVEaXJlY3Rpb24pIHsKICAgICAgICAgLy8gRklYTUU6IEl0J3MgdW5jbGVh
ciBpZiB3ZSBzaG91bGQgcmV0dXJuIHRoZSBpbnRyaW5zaWMgd2lkdGggb3IgdGhlIHByZWZlcnJl
ZCB3aWR0aC4KICAgICAgICAgLy8gU2VlIGh0dHA6Ly9saXN0cy53My5vcmcvQXJjaGl2ZXMvUHVi
bGljL3d3dy1zdHlsZS8yMDEzSmFuLzAyNDUuaHRtbAotICAgICAgICBMYXlvdXRVbml0IG1hcmdp
bkxvZ2ljYWxXaWR0aCA9IGNoaWxkLm5lZWRzTGF5b3V0KCkgPyBjb21wdXRlTWFyZ2luTG9naWNh
bFNpemVGb3JDaGlsZChjaGlsZElubGluZURpcmVjdGlvbiwgKnJlbmRlckdyaWQoKSwgY2hpbGQp
IDogY2hpbGQubWFyZ2luTG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIHJldHVybiBjaGlsZC5taW5Q
cmVmZXJyZWRMb2dpY2FsV2lkdGgoKSArIG1hcmdpbkxvZ2ljYWxXaWR0aDsKKyAgICAgICAgcmV0
dXJuIGNoaWxkLm1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpICsgR3JpZExheW91dEZ1bmN0aW9u
czo6bWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZCgqcmVuZGVyR3JpZCgpLCBjaGlsZElubGluZURp
cmVjdGlvbiwgY2hpbGQpOwogICAgIH0KIAogICAgIGlmICh1cGRhdGVPdmVycmlkZUNvbnRhaW5p
bmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY2hpbGQsIGNoaWxkSW5saW5lRGlyZWN0aW9uKSkK
QEAgLTc1NSwxMiArNzM0LDExIEBAIExheW91dFVuaXQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGht
U3RyYXRlZ3k6Om1pbkNvbnRlbnRGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkCiAKIExheW91dFVu
aXQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtU3RyYXRlZ3k6Om1heENvbnRlbnRGb3JDaGlsZChS
ZW5kZXJCb3gmIGNoaWxkKSBjb25zdAogewotICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBj
aGlsZElubGluZURpcmVjdGlvbiA9IGZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKHJlbmRlckdy
aWQoKSwgY2hpbGQsIEZvckNvbHVtbnMpOworICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBj
aGlsZElubGluZURpcmVjdGlvbiA9IEdyaWRMYXlvdXRGdW5jdGlvbnM6OmZsb3dBd2FyZURpcmVj
dGlvbkZvckNoaWxkKCpyZW5kZXJHcmlkKCksIGNoaWxkLCBGb3JDb2x1bW5zKTsKICAgICBpZiAo
ZGlyZWN0aW9uKCkgPT0gY2hpbGRJbmxpbmVEaXJlY3Rpb24pIHsKICAgICAgICAgLy8gRklYTUU6
IEl0J3MgdW5jbGVhciBpZiB3ZSBzaG91bGQgcmV0dXJuIHRoZSBpbnRyaW5zaWMgd2lkdGggb3Ig
dGhlIHByZWZlcnJlZCB3aWR0aC4KICAgICAgICAgLy8gU2VlIGh0dHA6Ly9saXN0cy53My5vcmcv
QXJjaGl2ZXMvUHVibGljL3d3dy1zdHlsZS8yMDEzSmFuLzAyNDUuaHRtbAotICAgICAgICBMYXlv
dXRVbml0IG1hcmdpbkxvZ2ljYWxXaWR0aCA9IGNoaWxkLm5lZWRzTGF5b3V0KCkgPyBjb21wdXRl
TWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZChjaGlsZElubGluZURpcmVjdGlvbiwgKnJlbmRlckdy
aWQoKSwgY2hpbGQpIDogY2hpbGQubWFyZ2luTG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIHJldHVy
biBjaGlsZC5tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSArIG1hcmdpbkxvZ2ljYWxXaWR0aDsK
KyAgICAgICAgcmV0dXJuIGNoaWxkLm1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpICsgR3JpZExh
eW91dEZ1bmN0aW9uczo6bWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZCgqcmVuZGVyR3JpZCgpLCBj
aGlsZElubGluZURpcmVjdGlvbiwgY2hpbGQpOwogICAgIH0KIAogICAgIGlmICh1cGRhdGVPdmVy
cmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY2hpbGQsIGNoaWxkSW5saW5l
RGlyZWN0aW9uKSkKQEAgLTc3MCw3ICs3NDgsNyBAQCBMYXlvdXRVbml0IEdyaWRUcmFja1Npemlu
Z0FsZ29yaXRobVN0cmF0ZWd5OjptYXhDb250ZW50Rm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZAog
CiBMYXlvdXRVbml0IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobVN0cmF0ZWd5OjptaW5TaXplRm9y
Q2hpbGQoUmVuZGVyQm94JiBjaGlsZCkgY29uc3QKIHsKLSAgICBHcmlkVHJhY2tTaXppbmdEaXJl
Y3Rpb24gY2hpbGRJbmxpbmVEaXJlY3Rpb24gPSBmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChy
ZW5kZXJHcmlkKCksIGNoaWxkLCBGb3JDb2x1bW5zKTsKKyAgICBHcmlkVHJhY2tTaXppbmdEaXJl
Y3Rpb24gY2hpbGRJbmxpbmVEaXJlY3Rpb24gPSBHcmlkTGF5b3V0RnVuY3Rpb25zOjpmbG93QXdh
cmVEaXJlY3Rpb25Gb3JDaGlsZCgqcmVuZGVyR3JpZCgpLCBjaGlsZCwgRm9yQ29sdW1ucyk7CiAg
ICAgYm9vbCBpc1Jvd0F4aXMgPSBkaXJlY3Rpb24oKSA9PSBjaGlsZElubGluZURpcmVjdGlvbjsK
ICAgICBjb25zdCBMZW5ndGgmIGNoaWxkTWluU2l6ZSA9IGlzUm93QXhpcyA/IGNoaWxkLnN0eWxl
KCkubG9naWNhbE1pbldpZHRoKCkgOiBjaGlsZC5zdHlsZSgpLmxvZ2ljYWxNaW5IZWlnaHQoKTsK
ICAgICBjb25zdCBMZW5ndGgmIGNoaWxkU2l6ZSA9IGlzUm93QXhpcyA/IGNoaWxkLnN0eWxlKCku
bG9naWNhbFdpZHRoKCkgOiBjaGlsZC5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKTsKQEAgLTkxMyw3
ICs4OTEsNyBAQCBwcml2YXRlOgogTGF5b3V0VW5pdCBEZWZpbml0ZVNpemVTdHJhdGVneTo6bWlu
TG9naWNhbFdpZHRoRm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCwgTGVuZ3RoIGNoaWxkTWluU2l6
ZSwgTGF5b3V0VW5pdCBhdmFpbGFibGVTaXplKSBjb25zdAogewogICAgIExheW91dFVuaXQgbWFy
Z2luTG9naWNhbFdpZHRoID0KLSAgICAgICAgY29tcHV0ZU1hcmdpbkxvZ2ljYWxTaXplRm9yQ2hp
bGQoZmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQocmVuZGVyR3JpZCgpLCBjaGlsZCwgRm9yQ29s
dW1ucyksICpyZW5kZXJHcmlkKCksIGNoaWxkKTsKKyAgICAgICAgR3JpZExheW91dEZ1bmN0aW9u
czo6Y29tcHV0ZU1hcmdpbkxvZ2ljYWxTaXplRm9yQ2hpbGQoKnJlbmRlckdyaWQoKSwgRm9yQ29s
dW1ucywgY2hpbGQpOwogICAgIHJldHVybiBjaGlsZC5jb21wdXRlTG9naWNhbFdpZHRoSW5GcmFn
bWVudFVzaW5nKE1pblNpemUsIGNoaWxkTWluU2l6ZSwgYXZhaWxhYmxlU2l6ZSwgKnJlbmRlckdy
aWQoKSwgbnVsbHB0cikgKyBtYXJnaW5Mb2dpY2FsV2lkdGg7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJHcmlkLmNwcAppbmRleCA5YTY4MWZiODg1MzM0M2IxMjc1ZWRkZmRkMDZl
ZDk1Y2UzZTI3N2I2Li43MzJhOWE0ZWFjYmQ5YjBhZDM2MDViOTBlYzQ4NDA5MjgwMDhkYzFkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCkBAIC0yOCw2ICsyOCw3IEBA
CiAjaW5jbHVkZSAiUmVuZGVyR3JpZC5oIgogCiAjaW5jbHVkZSAiR3JpZEFyZWEuaCIKKyNpbmNs
dWRlICJHcmlkTGF5b3V0RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiR3JpZFBvc2l0aW9uc1Jlc29s
dmVyLmgiCiAjaW5jbHVkZSAiR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmgiCiAjaW5jbHVkZSAi
TGF5b3V0UmVwYWludGVyLmgiCkBAIC0yNDcsNyArMjQ4LDcgQEAgdm9pZCBSZW5kZXJHcmlkOjps
YXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQpCiAgICAgICAgIC8v
IHNhbWUgcmVzdWx0IHdoZW4gZ3JpZCdzIGludHJpbnNpYyBzaXplIGlzIGNvbXB1dGVkIGFnYWlu
IGluIHRoZSB1cGRhdGVMb2dpY2FsV2lkdGggY2FsbCBiZWxsb3cuCiAgICAgICAgIGlmIChzaXpl
c0xvZ2ljYWxXaWR0aFRvRml0Q29udGVudChNYXhTaXplKSB8fCBzdHlsZSgpLmxvZ2ljYWxXaWR0
aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpIHsKICAgICAgICAgICAgIGZvciAoYXV0byogY2hpbGQg
PSBmaXJzdENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSB8
fCAhaXNPcnRob2dvbmFsQ2hpbGQoKmNoaWxkKSkKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQt
PmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8ICFHcmlkTGF5b3V0RnVuY3Rpb25zOjppc09ydGhv
Z29uYWxDaGlsZCgqdGhpcywgKmNoaWxkKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAgICAgY2hpbGQtPmNsZWFyT3ZlcnJpZGVTaXplKCk7CiAgICAgICAgICAg
ICAgICAgY2hpbGQtPmNsZWFyQ29udGFpbmluZ0Jsb2NrT3ZlcnJpZGVTaXplKCk7CkBAIC00Njcs
MTYgKzQ2OCw2IEBAIHN0YXRpYyBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IG92ZXJyaWRlQ29u
dGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JDaGlsZChjb25zCiAgICAgcmV0dXJuIGRpcmVjdGlv
biA9PSBGb3JDb2x1bW5zID8gY2hpbGQub3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9n
aWNhbFdpZHRoKCkgOiBjaGlsZC5vdmVycmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2Fs
SGVpZ2h0KCk7CiB9CiAKLWJvb2wgUmVuZGVyR3JpZDo6aXNPcnRob2dvbmFsQ2hpbGQoY29uc3Qg
UmVuZGVyQm94JiBjaGlsZCkgY29uc3QKLXsKLSAgICByZXR1cm4gY2hpbGQuaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSAhPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpOwotfQotCi1HcmlkVHJh
Y2tTaXppbmdEaXJlY3Rpb24gUmVuZGVyR3JpZDo6Zmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQo
Y29uc3QgUmVuZGVyQm94JiBjaGlsZCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlv
bikgY29uc3QKLXsKLSAgICByZXR1cm4gIWlzT3J0aG9nb25hbENoaWxkKGNoaWxkKSA/IGRpcmVj
dGlvbiA6IChkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucyA/IEZvclJvd3MgOiBGb3JDb2x1bW5zKTsK
LX0KLQogdW5zaWduZWQgUmVuZGVyR3JpZDo6Y29tcHV0ZUF1dG9SZXBlYXRUcmFja3NDb3VudChH
cmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uLCBzdGQ6Om9wdGlvbmFsPExheW91dFVu
aXQ+IGF2YWlsYWJsZVNpemUpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFhdmFpbGFibGVTaXplIHx8
IGF2YWlsYWJsZVNpemUudmFsdWUoKSAhPSAtMSk7CkBAIC02MjYsNyArNjE3LDcgQEAgdm9pZCBS
ZW5kZXJHcmlkOjpwbGFjZUl0ZW1zT25HcmlkKEdyaWQmIGdyaWQsIHN0ZDo6b3B0aW9uYWw8TGF5
b3V0VW5pdD4gYXZhaWxhYmwKICAgICAgICAgaWYgKGdyaWQub3JkZXJJdGVyYXRvcigpLnNob3Vs
ZFNraXBDaGlsZCgqY2hpbGQpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaGFz
QW55T3J0aG9nb25hbEdyaWRJdGVtID0gaGFzQW55T3J0aG9nb25hbEdyaWRJdGVtIHx8IGlzT3J0
aG9nb25hbENoaWxkKCpjaGlsZCk7CisgICAgICAgIGhhc0FueU9ydGhvZ29uYWxHcmlkSXRlbSA9
IGhhc0FueU9ydGhvZ29uYWxHcmlkSXRlbSB8fCBHcmlkTGF5b3V0RnVuY3Rpb25zOjppc09ydGhv
Z29uYWxDaGlsZCgqdGhpcywgKmNoaWxkKTsKIAogICAgICAgICBHcmlkQXJlYSBhcmVhID0gZ3Jp
ZC5ncmlkSXRlbUFyZWEoKmNoaWxkKTsKICAgICAgICAgaWYgKCFhcmVhLnJvd3MuaXNJbmRlZmlu
aXRlKCkpCkBAIC05NjgsNyArOTU5LDcgQEAgdm9pZCBSZW5kZXJHcmlkOjpsYXlvdXRQb3NpdGlv
bmVkT2JqZWN0KFJlbmRlckJveCYgY2hpbGQsIGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwKICAgICAv
LyBGSVhNRTogSWYgcG9zc2libGUgaXQnZCBiZSBuaWNlIHRvIGF2b2lkIHRoaXMgbGF5b3V0IGhl
cmUgd2hlbiBpdCdzIG5vdCBuZWVkZWQuCiAgICAgUmVuZGVyQmxvY2s6OmxheW91dFBvc2l0aW9u
ZWRPYmplY3QoY2hpbGQsIHJlbGF5b3V0Q2hpbGRyZW4sIGZpeGVkUG9zaXRpb25PYmplY3RzT25s
eSk7CiAKLSAgICBib29sIGlzT3J0aG9nb25hbCA9IGlzT3J0aG9nb25hbENoaWxkKGNoaWxkKTsK
KyAgICBib29sIGlzT3J0aG9nb25hbCA9IEdyaWRMYXlvdXRGdW5jdGlvbnM6OmlzT3J0aG9nb25h
bENoaWxkKCp0aGlzLCBjaGlsZCk7CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCA9IGNoaWxk
LmxvZ2ljYWxMZWZ0KCkgKyAoaXNPcnRob2dvbmFsID8gcm93T2Zmc2V0IDogY29sdW1uT2Zmc2V0
KTsKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3AgPSBjaGlsZC5sb2dpY2FsVG9wKCkgKyAoaXNP
cnRob2dvbmFsID8gY29sdW1uT2Zmc2V0IDogcm93T2Zmc2V0KTsKICAgICBjaGlsZC5zZXRMb2dp
Y2FsTG9jYXRpb24oTGF5b3V0UG9pbnQobG9naWNhbExlZnQsIGxvZ2ljYWxUb3ApKTsKQEAgLTEx
NDYsMzMgKzExMzcsMTMgQEAgc3RhdGljIExheW91dFVuaXQgY29tcHV0ZU92ZXJmbG93QWxpZ25t
ZW50T2Zmc2V0KE92ZXJmbG93QWxpZ25tZW50IG92ZXJmbG93LCBMYXkKICAgICByZXR1cm4gMDsK
IH0KIAotTGF5b3V0VW5pdCBSZW5kZXJHcmlkOjptYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKEdy
aWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IFJlbmRlckJveCYgY2hpbGQp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKGNoaWxkLCBk
aXJlY3Rpb24pID09IEZvckNvbHVtbnMgPyBjaGlsZC5tYXJnaW5Mb2dpY2FsV2lkdGgoKSA6IGNo
aWxkLm1hcmdpbkxvZ2ljYWxIZWlnaHQoKTsKLX0KLQotTGF5b3V0VW5pdCBSZW5kZXJHcmlkOjpj
b21wdXRlTWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZChHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24g
ZGlyZWN0aW9uLCBjb25zdCBSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAotewotICAgIGlmICghY2hp
bGQuc3R5bGUoKS5oYXNNYXJnaW4oKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBMYXlvdXRV
bml0IG1hcmdpblN0YXJ0OwotICAgIExheW91dFVuaXQgbWFyZ2luRW5kOwotICAgIGlmIChkaXJl
Y3Rpb24gPT0gRm9yQ29sdW1ucykKLSAgICAgICAgY2hpbGQuY29tcHV0ZUlubGluZURpcmVjdGlv
bk1hcmdpbnMoKnRoaXMsIGNoaWxkLmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRl
bnRJbkZyYWdtZW50KG51bGxwdHIpLCBjaGlsZC5sb2dpY2FsV2lkdGgoKSwgbWFyZ2luU3RhcnQs
IG1hcmdpbkVuZCk7Ci0gICAgZWxzZQotICAgICAgICBjaGlsZC5jb21wdXRlQmxvY2tEaXJlY3Rp
b25NYXJnaW5zKCp0aGlzLCBtYXJnaW5TdGFydCwgbWFyZ2luRW5kKTsKLQotICAgIHJldHVybiBt
YXJnaW5TdGFydCArIG1hcmdpbkVuZDsKLX0KLQogTGF5b3V0VW5pdCBSZW5kZXJHcmlkOjphdmFp
bGFibGVBbGlnbm1lbnRTcGFjZUZvckNoaWxkQmVmb3JlU3RyZXRjaGluZyhMYXlvdXRVbml0IGdy
aWRBcmVhQnJlYWR0aEZvckNoaWxkLCBjb25zdCBSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAogewog
ICAgIC8vIEJlY2F1c2Ugd2Ugd2FudCB0byBhdm9pZCBtdWx0aXBsZSBsYXlvdXRzLCBzdHJldGNo
aW5nIGxvZ2ljIG1pZ2h0IGJlIHBlcmZvcm1lZCBiZWZvcmUKICAgICAvLyBjaGlsZHJlbiBhcmUg
bGFpZCBvdXQsIHNvIHdlIGNhbid0IHVzZSB0aGUgY2hpbGQgY2FjaGVkIHZhbHVlcy4gSGVuY2Us
IHdlIG5lZWQgdG8KICAgICAvLyBjb21wdXRlIG1hcmdpbnMgaW4gb3JkZXIgdG8gZGV0ZXJtaW5l
IHRoZSBhdmFpbGFibGUgaGVpZ2h0IGJlZm9yZSBzdHJldGNoaW5nLgotICAgIEdyaWRUcmFja1Np
emluZ0RpcmVjdGlvbiBjaGlsZEJsb2NrRmxvd0RpcmVjdGlvbiA9IGZsb3dBd2FyZURpcmVjdGlv
bkZvckNoaWxkKGNoaWxkLCBGb3JSb3dzKTsKLSAgICByZXR1cm4gZ3JpZEFyZWFCcmVhZHRoRm9y
Q2hpbGQgLSAoY2hpbGQubmVlZHNMYXlvdXQoKSA/IGNvbXB1dGVNYXJnaW5Mb2dpY2FsU2l6ZUZv
ckNoaWxkKGNoaWxkQmxvY2tGbG93RGlyZWN0aW9uLCBjaGlsZCkgOiBtYXJnaW5Mb2dpY2FsU2l6
ZUZvckNoaWxkKGNoaWxkQmxvY2tGbG93RGlyZWN0aW9uLCBjaGlsZCkpOworICAgIEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbiBjaGlsZEJsb2NrRmxvd0RpcmVjdGlvbiA9IEdyaWRMYXlvdXRGdW5j
dGlvbnM6OmZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKCp0aGlzLCBjaGlsZCwgRm9yUm93cyk7
CisgICAgcmV0dXJuIGdyaWRBcmVhQnJlYWR0aEZvckNoaWxkIC0gR3JpZExheW91dEZ1bmN0aW9u
czo6bWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZCgqdGhpcywgY2hpbGRCbG9ja0Zsb3dEaXJlY3Rp
b24sIGNoaWxkKTsKIH0KIAogU3R5bGVTZWxmQWxpZ25tZW50RGF0YSBSZW5kZXJHcmlkOjphbGln
blNlbGZGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBjb25zdCBSZW5kZXJTdHlsZSog
Z3JpZFN0eWxlKSBjb25zdApAQCAtMTE5OCw3ICsxMTY5LDcgQEAgdm9pZCBSZW5kZXJHcmlkOjph
cHBseVN0cmV0Y2hBbGlnbm1lbnRUb0NoaWxkSWZOZWVkZWQoUmVuZGVyQm94JiBjaGlsZCkKICAg
ICAvLyBub3QsIGV2YWx1YXRpbmcgdGhlIGNvbmRpdGlvbnMgd2hpY2ggbWlnaHQgaGF2ZSBjaGFu
Z2VkIHNpbmNlIHRoZSBvbGQgdmFsdWVzIHdlcmUgc2V0LgogICAgIGNoaWxkLmNsZWFyT3ZlcnJp
ZGVMb2dpY2FsQ29udGVudEhlaWdodCgpOwogCi0gICAgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9u
IGNoaWxkQmxvY2tEaXJlY3Rpb24gPSBmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChjaGlsZCwg
Rm9yUm93cyk7CisgICAgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGNoaWxkQmxvY2tEaXJlY3Rp
b24gPSBHcmlkTGF5b3V0RnVuY3Rpb25zOjpmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZCgqdGhp
cywgY2hpbGQsIEZvclJvd3MpOwogICAgIGJvb2wgYmxvY2tGbG93SXNDb2x1bW5BeGlzID0gY2hp
bGRCbG9ja0RpcmVjdGlvbiA9PSBGb3JSb3dzOwogICAgIGJvb2wgYWxsb3dlZFRvU3RyZXRjaENo
aWxkQmxvY2tTaXplID0gYmxvY2tGbG93SXNDb2x1bW5BeGlzID8gYWxsb3dlZFRvU3RyZXRjaENo
aWxkQWxvbmdDb2x1bW5BeGlzKGNoaWxkKSA6IGFsbG93ZWRUb1N0cmV0Y2hDaGlsZEFsb25nUm93
QXhpcyhjaGlsZCk7CiAgICAgaWYgKGFsbG93ZWRUb1N0cmV0Y2hDaGlsZEJsb2NrU2l6ZSkgewpA
QCAtMTI4MSw3ICsxMjUyLDcgQEAgc3RhdGljIGludCBzeW50aGVzaXplZEJhc2VsaW5lRnJvbUJv
cmRlckJveChjb25zdCBSZW5kZXJCb3gmIGJveCwgTGluZURpcmVjdGlvbk0KIAogYm9vbCBSZW5k
ZXJHcmlkOjppc0lubGluZUJhc2VsaW5lQWxpZ25lZENoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hp
bGQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFsaWduU2VsZkZvckNoaWxkKGNoaWxkKS5wb3NpdGlv
bigpID09IEl0ZW1Qb3NpdGlvbkJhc2VsaW5lICYmICFpc09ydGhvZ29uYWxDaGlsZChjaGlsZCkg
JiYgIWhhc0F1dG9NYXJnaW5zSW5Db2x1bW5BeGlzKGNoaWxkKTsKKyAgICByZXR1cm4gYWxpZ25T
ZWxmRm9yQ2hpbGQoY2hpbGQpLnBvc2l0aW9uKCkgPT0gSXRlbVBvc2l0aW9uQmFzZWxpbmUgJiYg
IUdyaWRMYXlvdXRGdW5jdGlvbnM6OmlzT3J0aG9nb25hbENoaWxkKCp0aGlzLCBjaGlsZCkgJiYg
IWhhc0F1dG9NYXJnaW5zSW5Db2x1bW5BeGlzKGNoaWxkKTsKIH0KIAogLy8gRklYTUU6IFRoaXMg
bG9naWMgaXMgc2hhcmVkIGJ5IFJlbmRlckZsZXhpYmxlQm94LCBzbyBpdCBtaWdodCBiZSByZWZh
Y3RvcmVkIHNvbWVob3cuCkBAIC0xMzIyLDcgKzEyOTMsNyBAQCBzdGQ6Om9wdGlvbmFsPGludD4g
UmVuZGVyR3JpZDo6Zmlyc3RMaW5lQmFzZWxpbmUoKSBjb25zdAogICAgIGlmICghYmFzZWxpbmVD
aGlsZCkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIAotICAgIGF1dG8gYmFzZWxpbmUg
PSBpc09ydGhvZ29uYWxDaGlsZCgqYmFzZWxpbmVDaGlsZCkgPyBzdGQ6Om51bGxvcHQgOiBiYXNl
bGluZUNoaWxkLT5maXJzdExpbmVCYXNlbGluZSgpOworICAgIGF1dG8gYmFzZWxpbmUgPSBHcmlk
TGF5b3V0RnVuY3Rpb25zOjppc09ydGhvZ29uYWxDaGlsZCgqdGhpcywgKmJhc2VsaW5lQ2hpbGQp
ID8gc3RkOjpudWxsb3B0IDogYmFzZWxpbmVDaGlsZC0+Zmlyc3RMaW5lQmFzZWxpbmUoKTsKICAg
ICAvLyBXZSB0YWtlIGJvcmRlci1ib3gncyBib3R0b20gaWYgbm8gdmFsaWQgYmFzZWxpbmUuCiAg
ICAgaWYgKCFiYXNlbGluZSkgewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHBhc3MgfGRp
cmVjdGlvbnwgaW50byBmaXJzdExpbmVCYXNlbGluZSBhbmQgc3RvcCBiYWlsaW5nIG91dCBpZiB3
ZSdyZSBhIHdyaXRpbmcKQEAgLTEzNTIsNyArMTMyMyw3IEBAIEdyaWRBeGlzUG9zaXRpb24gUmVu
ZGVyR3JpZDo6Y29sdW1uQXhpc1Bvc2l0aW9uRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGls
ZCkKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBpbXBsZW1lbnQgdGhpcyBsb2dpYyBpbiBh
IGdlbmVyaWMgdXRpbGl0eSBmdW5jdGlvbiA/CiAgICAgICAgIC8vIEFsaWducyB0aGUgYWxpZ25t
ZW50IHN1YmplY3QgdG8gYmUgZmx1c2ggd2l0aCB0aGUgZWRnZSBvZiB0aGUgYWxpZ25tZW50IGNv
bnRhaW5lcgogICAgICAgICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbGlnbm1lbnQgc3ViamVj
dCdzICdzdGFydCcgc2lkZSBpbiB0aGUgY29sdW1uIGF4aXMuCi0gICAgICAgIGlmIChpc09ydGhv
Z29uYWxDaGlsZChjaGlsZCkpIHsKKyAgICAgICAgaWYgKEdyaWRMYXlvdXRGdW5jdGlvbnM6Omlz
T3J0aG9nb25hbENoaWxkKCp0aGlzLCBjaGlsZCkpIHsKICAgICAgICAgICAgIC8vIElmIG9ydGhv
Z29uYWwgd3JpdGluZy1tb2Rlcywgc2VsZi1zdGFydCB3aWxsIGJlIGJhc2VkIG9uIHRoZSBjaGls
ZCdzIGlubGluZS1heGlzCiAgICAgICAgICAgICAvLyBkaXJlY3Rpb24gKGlubGluZS1zdGFydCks
IGJlY2F1c2UgaXQncyB0aGUgb25lIHBhcmFsbGVsIHRvIHRoZSBjb2x1bW4gYXhpcy4KICAgICAg
ICAgICAgIGlmIChzdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpCkBAIC0xMzY1
LDcgKzEzMzYsNyBAQCBHcmlkQXhpc1Bvc2l0aW9uIFJlbmRlckdyaWQ6OmNvbHVtbkF4aXNQb3Np
dGlvbkZvckNoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQpCiAgICAgICAgIC8vIEZJWE1FOiBT
aG91bGQgd2UgaW1wbGVtZW50IHRoaXMgbG9naWMgaW4gYSBnZW5lcmljIHV0aWxpdHkgZnVuY3Rp
b24gPwogICAgICAgICAvLyBBbGlnbnMgdGhlIGFsaWdubWVudCBzdWJqZWN0IHRvIGJlIGZsdXNo
IHdpdGggdGhlIGVkZ2Ugb2YgdGhlIGFsaWdubWVudCBjb250YWluZXIKICAgICAgICAgLy8gY29y
cmVzcG9uZGluZyB0byB0aGUgYWxpZ25tZW50IHN1YmplY3QncyAnZW5kJyBzaWRlIGluIHRoZSBj
b2x1bW4gYXhpcy4KLSAgICAgICAgaWYgKGlzT3J0aG9nb25hbENoaWxkKGNoaWxkKSkgeworICAg
ICAgICBpZiAoR3JpZExheW91dEZ1bmN0aW9uczo6aXNPcnRob2dvbmFsQ2hpbGQoKnRoaXMsIGNo
aWxkKSkgewogICAgICAgICAgICAgLy8gSWYgb3J0aG9nb25hbCB3cml0aW5nLW1vZGVzLCBzZWxm
LWVuZCB3aWxsIGJlIGJhc2VkIG9uIHRoZSBjaGlsZCdzIGlubGluZS1heGlzCiAgICAgICAgICAg
ICAvLyBkaXJlY3Rpb24sIChpbmxpbmUtZW5kKSBiZWNhdXNlIGl0J3MgdGhlIG9uZSBwYXJhbGxl
bCB0byB0aGUgY29sdW1uIGF4aXMuCiAgICAgICAgICAgICBpZiAoc3R5bGUoKS5pc0ZsaXBwZWRC
bG9ja3NXcml0aW5nTW9kZSgpKQpAQCAtMTQxNyw3ICsxMzg4LDcgQEAgR3JpZEF4aXNQb3NpdGlv
biBSZW5kZXJHcmlkOjpyb3dBeGlzUG9zaXRpb25Gb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNo
aWxkKSBjb24KICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBpbXBsZW1lbnQgdGhpcyBsb2dp
YyBpbiBhIGdlbmVyaWMgdXRpbGl0eSBmdW5jdGlvbiA/CiAgICAgICAgIC8vIEFsaWducyB0aGUg
YWxpZ25tZW50IHN1YmplY3QgdG8gYmUgZmx1c2ggd2l0aCB0aGUgZWRnZSBvZiB0aGUgYWxpZ25t
ZW50IGNvbnRhaW5lcgogICAgICAgICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBhbGlnbm1lbnQg
c3ViamVjdCdzICdzdGFydCcgc2lkZSBpbiB0aGUgcm93IGF4aXMuCi0gICAgICAgIGlmIChpc09y
dGhvZ29uYWxDaGlsZChjaGlsZCkpIHsKKyAgICAgICAgaWYgKEdyaWRMYXlvdXRGdW5jdGlvbnM6
OmlzT3J0aG9nb25hbENoaWxkKCp0aGlzLCBjaGlsZCkpIHsKICAgICAgICAgICAgIC8vIElmIG9y
dGhvZ29uYWwgd3JpdGluZy1tb2Rlcywgc2VsZi1zdGFydCB3aWxsIGJlIGJhc2VkIG9uIHRoZSBj
aGlsZCdzIGJsb2NrLWF4aXMKICAgICAgICAgICAgIC8vIGRpcmVjdGlvbiwgYmVjYXVzZSBpdCdz
IHRoZSBvbmUgcGFyYWxsZWwgdG8gdGhlIHJvdyBheGlzLgogICAgICAgICAgICAgaWYgKGNoaWxk
LnN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkKQEAgLTE0MzAsNyArMTQwMSw3
IEBAIEdyaWRBeGlzUG9zaXRpb24gUmVuZGVyR3JpZDo6cm93QXhpc1Bvc2l0aW9uRm9yQ2hpbGQo
Y29uc3QgUmVuZGVyQm94JiBjaGlsZCkgY29uCiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2Ug
aW1wbGVtZW50IHRoaXMgbG9naWMgaW4gYSBnZW5lcmljIHV0aWxpdHkgZnVuY3Rpb24gPwogICAg
ICAgICAvLyBBbGlnbnMgdGhlIGFsaWdubWVudCBzdWJqZWN0IHRvIGJlIGZsdXNoIHdpdGggdGhl
IGVkZ2Ugb2YgdGhlIGFsaWdubWVudCBjb250YWluZXIKICAgICAgICAgLy8gY29ycmVzcG9uZGlu
ZyB0byB0aGUgYWxpZ25tZW50IHN1YmplY3QncyAnZW5kJyBzaWRlIGluIHRoZSByb3cgYXhpcy4K
LSAgICAgICAgaWYgKGlzT3J0aG9nb25hbENoaWxkKGNoaWxkKSkgeworICAgICAgICBpZiAoR3Jp
ZExheW91dEZ1bmN0aW9uczo6aXNPcnRob2dvbmFsQ2hpbGQoKnRoaXMsIGNoaWxkKSkgewogICAg
ICAgICAgICAgLy8gSWYgb3J0aG9nb25hbCB3cml0aW5nLW1vZGVzLCBzZWxmLWVuZCB3aWxsIGJl
IGJhc2VkIG9uIHRoZSBjaGlsZCdzIGJsb2NrLWF4aXMKICAgICAgICAgICAgIC8vIGRpcmVjdGlv
biwgYmVjYXVzZSBpdCdzIHRoZSBvbmUgcGFyYWxsZWwgdG8gdGhlIHJvdyBheGlzLgogICAgICAg
ICAgICAgaWYgKGNoaWxkLnN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkKQEAg
LTE0OTMsNyArMTQ2NCw3IEBAIExheW91dFVuaXQgUmVuZGVyR3JpZDo6Y29sdW1uQXhpc09mZnNl
dEZvckNoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQpIGNvbnN0CiAgICAgICAgIC8vICh0aGlz
IGRvZXMgbm90IGhhdmUgdG8gYmUgZG9uZSBmb3IgdGhlIGxhc3QgdHJhY2sgYXMgdGhlcmUgYXJl
IG5vIG1vcmUgbV9yb3dQb3NpdGlvbnMgYWZ0ZXIgaXQpLgogICAgICAgICBpZiAoY2hpbGRFbmRM
aW5lIDwgbV9yb3dQb3NpdGlvbnMuc2l6ZSgpIC0gMSkKICAgICAgICAgICAgIGVuZE9mUm93IC09
IGdyaWRHYXAoRm9yUm93cykgKyBtX29mZnNldEJldHdlZW5Sb3dzOwotICAgICAgICBMYXlvdXRV
bml0IGNvbHVtbkF4aXNDaGlsZFNpemUgPSBpc09ydGhvZ29uYWxDaGlsZChjaGlsZCkgPyBjaGls
ZC5sb2dpY2FsV2lkdGgoKSArIGNoaWxkLm1hcmdpbkxvZ2ljYWxXaWR0aCgpIDogY2hpbGQubG9n
aWNhbEhlaWdodCgpICsgY2hpbGQubWFyZ2luTG9naWNhbEhlaWdodCgpOworICAgICAgICBMYXlv
dXRVbml0IGNvbHVtbkF4aXNDaGlsZFNpemUgPSBHcmlkTGF5b3V0RnVuY3Rpb25zOjppc09ydGhv
Z29uYWxDaGlsZCgqdGhpcywgY2hpbGQpID8gY2hpbGQubG9naWNhbFdpZHRoKCkgKyBjaGlsZC5t
YXJnaW5Mb2dpY2FsV2lkdGgoKSA6IGNoaWxkLmxvZ2ljYWxIZWlnaHQoKSArIGNoaWxkLm1hcmdp
bkxvZ2ljYWxIZWlnaHQoKTsKICAgICAgICAgYXV0byBvdmVyZmxvdyA9IGFsaWduU2VsZkZvckNo
aWxkKGNoaWxkKS5vdmVyZmxvdygpOwogICAgICAgICBMYXlvdXRVbml0IG9mZnNldEZyb21TdGFy
dFBvc2l0aW9uID0gY29tcHV0ZU92ZXJmbG93QWxpZ25tZW50T2Zmc2V0KG92ZXJmbG93LCBlbmRP
ZlJvdyAtIHN0YXJ0T2ZSb3csIGNvbHVtbkF4aXNDaGlsZFNpemUpOwogICAgICAgICByZXR1cm4g
c3RhcnRQb3NpdGlvbiArIChheGlzUG9zaXRpb24gPT0gR3JpZEF4aXNFbmQgPyBvZmZzZXRGcm9t
U3RhcnRQb3NpdGlvbiA6IG9mZnNldEZyb21TdGFydFBvc2l0aW9uIC8gMik7CkBAIC0xNTI1LDcg
KzE0OTYsNyBAQCBMYXlvdXRVbml0IFJlbmRlckdyaWQ6OnJvd0F4aXNPZmZzZXRGb3JDaGlsZChj
b25zdCBSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAogICAgICAgICAvLyAodGhpcyBkb2VzIG5vdCBo
YXZlIHRvIGJlIGRvbmUgZm9yIHRoZSBsYXN0IHRyYWNrIGFzIHRoZXJlIGFyZSBubyBtb3JlIG1f
Y29sdW1uUG9zaXRpb25zIGFmdGVyIGl0KS4KICAgICAgICAgaWYgKGNoaWxkRW5kTGluZSA8IG1f
Y29sdW1uUG9zaXRpb25zLnNpemUoKSAtIDEpCiAgICAgICAgICAgICBlbmRPZkNvbHVtbiAtPSBn
cmlkR2FwKEZvckNvbHVtbnMpICsgbV9vZmZzZXRCZXR3ZWVuQ29sdW1uczsKLSAgICAgICAgTGF5
b3V0VW5pdCByb3dBeGlzQ2hpbGRTaXplID0gaXNPcnRob2dvbmFsQ2hpbGQoY2hpbGQpID8gY2hp
bGQubG9naWNhbEhlaWdodCgpICsgY2hpbGQubWFyZ2luTG9naWNhbEhlaWdodCgpIDogY2hpbGQu
bG9naWNhbFdpZHRoKCkgKyBjaGlsZC5tYXJnaW5Mb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgTGF5
b3V0VW5pdCByb3dBeGlzQ2hpbGRTaXplID0gR3JpZExheW91dEZ1bmN0aW9uczo6aXNPcnRob2dv
bmFsQ2hpbGQoKnRoaXMsIGNoaWxkKSA/IGNoaWxkLmxvZ2ljYWxIZWlnaHQoKSArIGNoaWxkLm1h
cmdpbkxvZ2ljYWxIZWlnaHQoKSA6IGNoaWxkLmxvZ2ljYWxXaWR0aCgpICsgY2hpbGQubWFyZ2lu
TG9naWNhbFdpZHRoKCk7CiAgICAgICAgIGF1dG8gb3ZlcmZsb3cgPSBqdXN0aWZ5U2VsZkZvckNo
aWxkKGNoaWxkKS5vdmVyZmxvdygpOwogICAgICAgICBMYXlvdXRVbml0IG9mZnNldEZyb21TdGFy
dFBvc2l0aW9uID0gY29tcHV0ZU92ZXJmbG93QWxpZ25tZW50T2Zmc2V0KG92ZXJmbG93LCBlbmRP
ZkNvbHVtbiAtIHN0YXJ0T2ZDb2x1bW4sIHJvd0F4aXNDaGlsZFNpemUpOwogICAgICAgICByZXR1
cm4gc3RhcnRQb3NpdGlvbiArIChheGlzUG9zaXRpb24gPT0gR3JpZEF4aXNFbmQgPyBvZmZzZXRG
cm9tU3RhcnRQb3NpdGlvbiA6IG9mZnNldEZyb21TdGFydFBvc2l0aW9uIC8gMik7CkBAIC0xNjU0
LDE4ICsxNjI1LDE5IEBAIExheW91dFBvaW50IFJlbmRlckdyaWQ6OmZpbmRDaGlsZExvZ2ljYWxQ
b3NpdGlvbihjb25zdCBSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAogewogICAgIExheW91dFVuaXQg
Y29sdW1uQXhpc09mZnNldCA9IGNvbHVtbkF4aXNPZmZzZXRGb3JDaGlsZChjaGlsZCk7CiAgICAg
TGF5b3V0VW5pdCByb3dBeGlzT2Zmc2V0ID0gcm93QXhpc09mZnNldEZvckNoaWxkKGNoaWxkKTsK
KyAgICBib29sIGlzT3J0aG9nb25hbENoaWxkID0gR3JpZExheW91dEZ1bmN0aW9uczo6aXNPcnRo
b2dvbmFsQ2hpbGQoKnRoaXMsIGNoaWxkKTsKIAogICAgIC8vIFdlIHN0b3JlZCBtX2NvbHVtblBv
c2l0aW9ucydzIGRhdGEgaWdub3JpbmcgdGhlIGRpcmVjdGlvbiwgaGVuY2Ugd2UgbWlnaHQgbmVl
ZCBub3cKICAgICAvLyB0byB0cmFuc2xhdGUgcG9zaXRpb25zIGZyb20gUlRMIHRvIExUUiwgYXMg
aXQncyBtb3JlIGNvbnZlbmllbnQgZm9yIHBhaW50aW5nLgogICAgIGlmICghc3R5bGUoKS5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgIHJvd0F4aXNPZmZzZXQgPSB0cmFuc2xhdGVS
VExDb29yZGluYXRlKHJvd0F4aXNPZmZzZXQpIC0gKGlzT3J0aG9nb25hbENoaWxkKGNoaWxkKSA/
IGNoaWxkLmxvZ2ljYWxIZWlnaHQoKSAgOiBjaGlsZC5sb2dpY2FsV2lkdGgoKSk7CisgICAgICAg
IHJvd0F4aXNPZmZzZXQgPSB0cmFuc2xhdGVSVExDb29yZGluYXRlKHJvd0F4aXNPZmZzZXQpIC0g
KGlzT3J0aG9nb25hbENoaWxkID8gY2hpbGQubG9naWNhbEhlaWdodCgpICA6IGNoaWxkLmxvZ2lj
YWxXaWR0aCgpKTsKIAogICAgIC8vICJJbiB0aGUgcG9zaXRpb25pbmcgcGhhc2UgWy4uLl0gY2Fs
Y3VsYXRpb25zIGFyZSBwZXJmb3JtZWQgYWNjb3JkaW5nIHRvIHRoZSB3cml0aW5nIG1vZGUKICAg
ICAvLyBvZiB0aGUgY29udGFpbmluZyBibG9jayBvZiB0aGUgYm94IGVzdGFibGlzaGluZyB0aGUg
b3J0aG9nb25hbCBmbG93LiIgSG93ZXZlciwgdGhlCiAgICAgLy8gcmVzdWx0aW5nIExheW91dFBv
aW50IHdpbGwgYmUgdXNlZCBpbiAnc2V0TG9naWNhbFBvc2l0aW9uJyBpbiBvcmRlciB0byBzZXQg
dGhlIGNoaWxkJ3MKICAgICAvLyBsb2dpY2FsIHBvc2l0aW9uLCB3aGljaCB3aWxsIG9ubHkgdGFr
ZSBpbnRvIGFjY291bnQgdGhlIGNoaWxkJ3Mgd3JpdGluZy1tb2RlLgogICAgIExheW91dFBvaW50
IGNoaWxkTG9jYXRpb24ocm93QXhpc09mZnNldCwgY29sdW1uQXhpc09mZnNldCk7Ci0gICAgcmV0
dXJuIGlzT3J0aG9nb25hbENoaWxkKGNoaWxkKSA/IGNoaWxkTG9jYXRpb24udHJhbnNwb3NlZFBv
aW50KCkgOiBjaGlsZExvY2F0aW9uOworICAgIHJldHVybiBpc09ydGhvZ29uYWxDaGlsZCA/IGNo
aWxkTG9jYXRpb24udHJhbnNwb3NlZFBvaW50KCkgOiBjaGlsZExvY2F0aW9uOwogfQogCiB1bnNp
Z25lZCBSZW5kZXJHcmlkOjpudW1UcmFja3MoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVj
dGlvbiwgY29uc3QgR3JpZCYgZ3JpZCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJHcmlkLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
R3JpZC5oCmluZGV4IDZjYWFmZmEyNzhlOWI4YjllMmFhNWRkNjNjNWVhOTNkYWU5YjY3YTIuLjkz
NjY2ZmY2YWIwMWNmOWU1NzZhMDI5Mzk3NmZlYTg0YjY0MDNjZmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckdyaWQuaApAQCAtNjMsNyArNjMsNiBAQCBwdWJsaWM6CiAgICAgdW5zaWdu
ZWQgYXV0b1JlcGVhdENvdW50Rm9yRGlyZWN0aW9uKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBk
aXJlY3Rpb24pIGNvbnN0IHsgcmV0dXJuIG1fZ3JpZC5hdXRvUmVwZWF0VHJhY2tzKGRpcmVjdGlv
bik7IH0KIAogICAgIC8vIFJlcXVpcmVkIGJ5IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobS4gS2Vl
cCB0aGVtIHVuZGVyIGNvbnRyb2wuCi0gICAgYm9vbCBpc09ydGhvZ29uYWxDaGlsZChjb25zdCBS
ZW5kZXJCb3gmKSBjb25zdDsKICAgICBMYXlvdXRVbml0IGd1dHRlcnNTaXplKGNvbnN0IEdyaWQm
LCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24sIHVuc2lnbmVkIHN0YXJ0TGluZSwgdW5zaWduZWQg
c3Bhbiwgc3RkOjpvcHRpb25hbDxMYXlvdXRVbml0PiBhdmFpbGFibGVTaXplKSBjb25zdDsKIAog
ICAgIFN0eWxlQ29udGVudEFsaWdubWVudERhdGEgY29udGVudEFsaWdubWVudChHcmlkVHJhY2tT
aXppbmdEaXJlY3Rpb24pIGNvbnN0OwpAQCAtMTM2LDggKzEzNSw2IEBAIHByaXZhdGU6CiAgICAg
TGF5b3V0VW5pdCBncmlkQXJlYUJyZWFkdGhGb3JDaGlsZEluY2x1ZGluZ0FsaWdubWVudE9mZnNl
dHMoY29uc3QgUmVuZGVyQm94JiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uKSBjb25zdDsKIAog
ICAgIHZvaWQgcGFpbnRDaGlsZHJlbihQYWludEluZm8mIGZvclNlbGYsIGNvbnN0IExheW91dFBv
aW50JiBwYWludE9mZnNldCwgUGFpbnRJbmZvJiBmb3JDaGlsZCwgYm9vbCB1c2VQcmludFJlY3Qp
IG92ZXJyaWRlOwotICAgIExheW91dFVuaXQgbWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZChHcmlk
VHJhY2tTaXppbmdEaXJlY3Rpb24sIGNvbnN0IFJlbmRlckJveCYpIGNvbnN0OwotICAgIExheW91
dFVuaXQgY29tcHV0ZU1hcmdpbkxvZ2ljYWxTaXplRm9yQ2hpbGQoR3JpZFRyYWNrU2l6aW5nRGly
ZWN0aW9uLCBjb25zdCBSZW5kZXJCb3gmKSBjb25zdDsKICAgICBMYXlvdXRVbml0IGF2YWlsYWJs
ZUFsaWdubWVudFNwYWNlRm9yQ2hpbGRCZWZvcmVTdHJldGNoaW5nKExheW91dFVuaXQgZ3JpZEFy
ZWFCcmVhZHRoRm9yQ2hpbGQsIGNvbnN0IFJlbmRlckJveCYpIGNvbnN0OwogICAgIFN0eWxlU2Vs
ZkFsaWdubWVudERhdGEganVzdGlmeVNlbGZGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmLCBjb25z
dCBSZW5kZXJTdHlsZSogPSBudWxscHRyKSBjb25zdDsKICAgICBTdHlsZVNlbGZBbGlnbm1lbnRE
YXRhIGFsaWduU2VsZkZvckNoaWxkKGNvbnN0IFJlbmRlckJveCYsIGNvbnN0IFJlbmRlclN0eWxl
KiA9IG51bGxwdHIpIGNvbnN0OwpAQCAtMTY0LDggKzE2MSw2IEBAIHByaXZhdGU6CiAKICAgICBM
YXlvdXRVbml0IHRyYW5zbGF0ZVJUTENvb3JkaW5hdGUoTGF5b3V0VW5pdCkgY29uc3Q7CiAKLSAg
ICBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQoY29u
c3QgUmVuZGVyQm94JiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uKSBjb25zdDsKLQogICAgIEdy
aWQgbV9ncmlkOwogCiAgICAgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtIG1fdHJhY2tTaXppbmdB
bGdvcml0aG07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327409</attachid>
            <date>2017-11-21 07:21:45 -0800</date>
            <delta_ts>2017-11-22 12:35:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179633-20171121162143.patch</filename>
            <type>text/plain</type>
            <size>32088</size>
            <attacher name="Javier Fernandez">jfernandez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI0OTExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzUwODVhOWU3ODU3NjZm
N2E0MjEwMDRlYmJmYTcyYWUzNzYwN2UzOS4uYmQ5ZTJjZjcwNWE2YjlkZWVlMTdmOTk0ODFjZTRm
ZTAyMDU0N2M4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE3LTExLTEzICBKYXZp
ZXIgRmVybmFuZGV6ICA8amZlcm5hbmRlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtjc3MtZ3Jp
ZF0gUmVmYWN0b3JpbmcgYW5kIG5ldyBuYW1lc3BhY2Ugd2l0aCBncmlkIHJlbGF0ZWQgdXRpbGl0
eSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3OTYzMworCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAg
IEFkZGVkIGEgbmV3IG5hbWVzcGFjZSB3aXRoIHNldmVyYWwgdXRpbGl0eSBmdW5jdGlvbnMgdG8g
c2hhcmUgbG9naWMKKyAgICAgICAgYmV0d2VlbiBSZW5kZXJHcmlkIGFuZCBHcmlkVHJhY2tTaXpp
bmdBbGdvcml0aG0uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBzaW5jZSBubyBuZXcgZnVuY3Rp
b25hbGl0eSBpcyBhZGRlZC4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcvR3Jp
ZExheW91dFV0aWxzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmlkTGF5b3V0VXRp
bHM6OmNvbXB1dGVNYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyaWRMYXlvdXRVdGlsczo6bWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmlkTGF5b3V0VXRpbHM6OmlzT3J0aG9nb25hbENoaWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyaWRMYXlvdXRVdGlsczo6Zmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9HcmlkTGF5b3V0VXRpbHMuaDogQWRkZWQuCisgICAgICAgICogcmVu
ZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmFzc3VtZWRSb3dzU2l6ZUZvck9ydGhvZ29uYWxDaGls
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmlkVHJhY2tTaXppbmdBbGdvcml0aG1TdHJh
dGVneTo6bG9naWNhbEhlaWdodEZvckNoaWxkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
aWRUcmFja1NpemluZ0FsZ29yaXRobVN0cmF0ZWd5OjptaW5Db250ZW50Rm9yQ2hpbGQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtU3RyYXRlZ3k6Om1h
eENvbnRlbnRGb3JDaGlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmlkVHJhY2tTaXpp
bmdBbGdvcml0aG1TdHJhdGVneTo6bWluU2l6ZUZvckNoaWxkIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRlZmluaXRlU2l6ZVN0cmF0ZWd5OjptaW5Mb2dpY2FsV2lkdGhGb3JDaGlsZCBjb25z
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyR3JpZDo6bGF5b3V0QmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3Jp
ZDo6cGxhY2VJdGVtc09uR3JpZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlk
OjpsYXlvdXRQb3NpdGlvbmVkT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6
OmF2YWlsYWJsZUFsaWdubWVudFNwYWNlRm9yQ2hpbGRCZWZvcmVTdHJldGNoaW5nIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmFwcGx5U3RyZXRjaEFsaWdubWVudFRvQ2hp
bGRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjppc0lubGluZUJhc2Vs
aW5lQWxpZ25lZENoaWxkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmZp
cnN0TGluZUJhc2VsaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmNv
bHVtbkF4aXNQb3NpdGlvbkZvckNoaWxkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckdyaWQ6OnJvd0F4aXNQb3NpdGlvbkZvckNoaWxkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckdyaWQ6OmNvbHVtbkF4aXNPZmZzZXRGb3JDaGlsZCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJHcmlkOjpyb3dBeGlzT2Zmc2V0Rm9yQ2hpbGQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6ZmluZENoaWxkTG9naWNhbFBvc2l0aW9uIGNvbnN0KToK
KwogMjAxNy0xMS0xNiAgRnJlZGVyaWMgV2FuZyAgPGZ3YW5nQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgQVNTRVJUSU9OIEZBSUxFRDogIWlzQW5vbnltb3VzKCkgaW4gV2ViQ29yZTo6UmVuZGVyTWF0
aE1MT3BlcmF0b3I6OnVwZGF0ZVRva2VuQ29udGVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBmYzY3Y2Y1
ZDFhYTM0ZTZmOTZmZDQyNTEzYzRiZjYxZGUwZjczMTRiLi43ZTI2YTgyZGUwMjc2YjdkMzlkMzUy
OTk0M2MyMmU0NzhkYzY4OWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTcyOCw2ICsxNzI4LDcgQEAg
cmVuZGVyaW5nL0ZsZXhpYmxlQm94QWxnb3JpdGhtLmNwcAogcmVuZGVyaW5nL0ZpeGVkVGFibGVM
YXlvdXQuY3BwCiByZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmNwcAogcmVuZGVyaW5nL0dyaWQu
Y3BwCityZW5kZXJpbmcvR3JpZExheW91dEZ1bmN0aW9ucy5jcHAKIHJlbmRlcmluZy9HcmlkVHJh
Y2tTaXppbmdBbGdvcml0aG0uY3BwCiByZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmNwcAogcmVu
ZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvR3JpZExheW91dEZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
R3JpZExheW91dEZ1bmN0aW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGUyMzJlNmZjMDMyNTAxZDYyYjE1
MTc5YTIyYTM2ZDY0YzRlZjJhZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9HcmlkTGF5b3V0RnVuY3Rpb25zLmNwcApAQCAtMCwwICsxLDY5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmlkTGF5
b3V0RnVuY3Rpb25zLmgiCisKKyNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgR3JpZExheW91dEZ1bmN0aW9ucyB7CisKK0xheW91
dFVuaXQgY29tcHV0ZU1hcmdpbkxvZ2ljYWxTaXplRm9yQ2hpbGQoY29uc3QgUmVuZGVyR3JpZCYg
Z3JpZCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgUmVuZGVyQm94
JiBjaGlsZCkKK3sKKyAgICBpZiAoIWNoaWxkLnN0eWxlKCkuaGFzTWFyZ2luKCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgTGF5b3V0VW5pdCBtYXJnaW5TdGFydDsKKyAgICBMYXlvdXRVbml0
IG1hcmdpbkVuZDsKKyAgICBpZiAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMpCisgICAgICAgIGNo
aWxkLmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25NYXJnaW5zKGdyaWQsIGNoaWxkLmNvbnRhaW5pbmdC
bG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnRJbkZyYWdtZW50KG51bGxwdHIpLCBjaGlsZC5sb2dp
Y2FsV2lkdGgoKSwgbWFyZ2luU3RhcnQsIG1hcmdpbkVuZCk7CisgICAgZWxzZQorICAgICAgICBj
aGlsZC5jb21wdXRlQmxvY2tEaXJlY3Rpb25NYXJnaW5zKGdyaWQsIG1hcmdpblN0YXJ0LCBtYXJn
aW5FbmQpOworCisgICAgcmV0dXJuIG1hcmdpblN0YXJ0ICsgbWFyZ2luRW5kOworfQorCitMYXlv
dXRVbml0IG1hcmdpbkxvZ2ljYWxTaXplRm9yQ2hpbGQoY29uc3QgUmVuZGVyR3JpZCYgZ3JpZCwg
R3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgUmVuZGVyQm94JiBjaGls
ZCkKK3sKKyAgICBpZiAoY2hpbGQubmVlZHNMYXlvdXQoKSkKKyAgICAgICAgcmV0dXJuIGNvbXB1
dGVNYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKGdyaWQsIGRpcmVjdGlvbiwgY2hpbGQpOworICAg
IHJldHVybiBmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChncmlkLCBjaGlsZCwgZGlyZWN0aW9u
KSA9PSBGb3JDb2x1bW5zID8gY2hpbGQubWFyZ2luTG9naWNhbFdpZHRoKCkgOiBjaGlsZC5tYXJn
aW5Mb2dpY2FsSGVpZ2h0KCk7Cit9CisKK2Jvb2wgaXNPcnRob2dvbmFsQ2hpbGQoY29uc3QgUmVu
ZGVyR3JpZCYgZ3JpZCwgY29uc3QgUmVuZGVyQm94JiBjaGlsZCkKK3sKKyAgICByZXR1cm4gY2hp
bGQuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAhPSBncmlkLmlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCk7Cit9CisKK0dyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBmbG93QXdhcmVEaXJlY3Rpb25G
b3JDaGlsZChjb25zdCBSZW5kZXJHcmlkJiBncmlkLCBjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBH
cmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIHJldHVybiAhaXNPcnRo
b2dvbmFsQ2hpbGQoZ3JpZCwgY2hpbGQpID8gZGlyZWN0aW9uIDogKGRpcmVjdGlvbiA9PSBGb3JD
b2x1bW5zID8gRm9yUm93cyA6IEZvckNvbHVtbnMpOworfQorCit9IC8vIG5hbWVzcGFjZSBHcmlk
TGF5b3V0RnVuY3Rpb25zCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkTGF5b3V0RnVuY3Rpb25zLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvR3JpZExheW91dEZ1bmN0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ0YTc4ODYx
MTQ5M2Q1YTAyNWYwOTgwM2VlYWYyOTI5YzlkMThiNjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZExheW91dEZ1bmN0aW9ucy5oCkBAIC0wLDAgKzEsNDMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJM
YXlvdXRVbml0LmgiCisjaW5jbHVkZSAiUmVuZGVyR3JpZC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK25hbWVzcGFjZSBHcmlkTGF5b3V0RnVuY3Rpb25zIHsKKworTGF5b3V0VW5pdCBjb21w
dXRlTWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZChjb25zdCBSZW5kZXJHcmlkJiwgR3JpZFRyYWNr
U2l6aW5nRGlyZWN0aW9uLCBjb25zdCBSZW5kZXJCb3gmKTsKK0xheW91dFVuaXQgbWFyZ2luTG9n
aWNhbFNpemVGb3JDaGlsZChjb25zdCBSZW5kZXJHcmlkJiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0
aW9uLCBjb25zdCBSZW5kZXJCb3gmKTsKK2Jvb2wgaXNPcnRob2dvbmFsQ2hpbGQoY29uc3QgUmVu
ZGVyR3JpZCYsIGNvbnN0IFJlbmRlckJveCYpOworR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGZs
b3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKGNvbnN0IFJlbmRlckdyaWQmLCBjb25zdCBSZW5kZXJC
b3gmLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24pOworCit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1Np
emluZ0FsZ29yaXRobS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6
aW5nQWxnb3JpdGhtLmNwcAppbmRleCAyOTY5ZWRlNGE3YTdjZTgyMDA5NWU3YzUyY2ZiYjE1NjJh
OGY3ZDc0Li5hYjBlYzllMDdjOTI5MjE2N2U5MmUyOWM0MGI4ZjFlYzY4ODRjNmJjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGht
LmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiR3JpZC5oIgogI2luY2x1ZGUgIkdy
aWRBcmVhLmgiCisjaW5jbHVkZSAiR3JpZExheW91dEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlJl
bmRlckdyaWQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTEwLDMyICsxMTEsMTEgQEAg
c3RhdGljIHZvaWQgc2V0T3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50U2l6ZUZvckNoaWxk
KFJlbmRlckJveCYgY2hpbGQsIEdyaWQKICAgICAgICAgY2hpbGQuc2V0T3ZlcnJpZGVDb250YWlu
aW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodChzaXplKTsKIH0KIAotc3RhdGljIEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbiBmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChjb25zdCBSZW5kZXJH
cmlkKiBncmlkLCBjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rp
b24gZGlyZWN0aW9uKQotewotICAgIEFTU0VSVChncmlkKTsKLSAgICByZXR1cm4gIWdyaWQtPmlz
T3J0aG9nb25hbENoaWxkKGNoaWxkKSA/IGRpcmVjdGlvbiA6IChkaXJlY3Rpb24gPT0gRm9yQ29s
dW1ucyA/IEZvclJvd3MgOiBGb3JDb2x1bW5zKTsKLX0KLQogc3RhdGljIHN0ZDo6b3B0aW9uYWw8
TGF5b3V0VW5pdD4gb3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50U2l6ZUZvckNoaWxkKGNv
bnN0IFJlbmRlckJveCYgY2hpbGQsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24p
CiB7CiAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gY2hpbGQub3ZlcnJpZGVD
b250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoKCkgOiBjaGlsZC5vdmVycmlkZUNvbnRh
aW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCk7CiB9CiAKLXN0YXRpYyBMYXlvdXRVbml0
IGNvbXB1dGVNYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKEdyaWRUcmFja1NpemluZ0RpcmVjdGlv
biBkaXJlY3Rpb24sIGNvbnN0IFJlbmRlckdyaWQmIHJlbmRlckdyaWQsIGNvbnN0IFJlbmRlckJv
eCYgY2hpbGQpCi17Ci0gICAgaWYgKCFjaGlsZC5zdHlsZSgpLmhhc01hcmdpbigpKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIExheW91dFVuaXQgbWFyZ2luU3RhcnQ7Ci0gICAgTGF5b3V0VW5p
dCBtYXJnaW5FbmQ7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKQotICAgICAgICBj
aGlsZC5jb21wdXRlSW5saW5lRGlyZWN0aW9uTWFyZ2lucyhyZW5kZXJHcmlkLCBjaGlsZC5jb250
YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50SW5GcmFnbWVudChudWxscHRyKSwgY2hp
bGQubG9naWNhbFdpZHRoKCksIG1hcmdpblN0YXJ0LCBtYXJnaW5FbmQpOwotICAgIGVsc2UKLSAg
ICAgICAgY2hpbGQuY29tcHV0ZUJsb2NrRGlyZWN0aW9uTWFyZ2lucyhyZW5kZXJHcmlkLCBtYXJn
aW5TdGFydCwgbWFyZ2luRW5kKTsKLQotICAgIHJldHVybiBtYXJnaW5TdGFydCArIG1hcmdpbkVu
ZDsKLX0KLQogLy8gRklYTUU6IHdlIGJvcnJvd2VkIHRoaXMgZnJvbSBSZW5kZXJCbG9jay4gV2Ug
Y2Fubm90IGNhbGwgaXQgZnJvbSBoZXJlIGJlY2F1c2UgaXQncyBwcm90ZWN0ZWQgZm9yIFJlbmRl
ck9iamVjdHMuCiBzdGF0aWMgTGF5b3V0VW5pdCBtYXJnaW5JbnRyaW5zaWNMb2dpY2FsV2lkdGhG
b3JDaGlsZChjb25zdCBSZW5kZXJHcmlkKiByZW5kZXJHcmlkLCBSZW5kZXJCb3gmIGNoaWxkKQog
ewpAQCAtNTY0LDcgKzU0NCw3IEBAIHZvaWQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpkaXN0
cmlidXRlU3BhY2VUb1RyYWNrcyhWZWN0b3I8R3JpZFRyYWNrKj4mIHRyYWNrCiAKIExheW91dFVu
aXQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjphc3N1bWVkUm93c1NpemVGb3JPcnRob2dvbmFs
Q2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9yZW5k
ZXJHcmlkLT5pc09ydGhvZ29uYWxDaGlsZChjaGlsZCkpOworICAgIEFTU0VSVChHcmlkTGF5b3V0
RnVuY3Rpb25zOjppc09ydGhvZ29uYWxDaGlsZCgqbV9yZW5kZXJHcmlkLCBjaGlsZCkpOwogICAg
IGNvbnN0IEdyaWRTcGFuJiBzcGFuID0gbV9ncmlkLmdyaWRJdGVtU3BhbihjaGlsZCwgRm9yUm93
cyk7CiAgICAgTGF5b3V0VW5pdCBncmlkQXJlYVNpemU7CiAgICAgYm9vbCBncmlkQXJlYUlzSW5k
ZWZpbml0ZSA9IGZhbHNlOwpAQCAtNzIyLDcgKzcwMiw3IEBAIHZvaWQgR3JpZFRyYWNrU2l6aW5n
QWxnb3JpdGhtOjpjb21wdXRlR3JpZENvbnRhaW5lckludHJpbnNpY1NpemVzKCkKIC8vIEdyaWRU
cmFja1NpemluZ0FsZ29yaXRobVN0cmF0ZWd5LgogTGF5b3V0VW5pdCBHcmlkVHJhY2tTaXppbmdB
bGdvcml0aG1TdHJhdGVneTo6bG9naWNhbEhlaWdodEZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQp
IGNvbnN0CiB7Ci0gICAgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGNoaWxkQmxvY2tEaXJlY3Rp
b24gPSBmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChyZW5kZXJHcmlkKCksIGNoaWxkLCBGb3JS
b3dzKTsKKyAgICBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gY2hpbGRCbG9ja0RpcmVjdGlvbiA9
IEdyaWRMYXlvdXRGdW5jdGlvbnM6OmZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKCpyZW5kZXJH
cmlkKCksIGNoaWxkLCBGb3JSb3dzKTsKICAgICAvLyBJZiB8Y2hpbGR8IGhhcyBhIHJlbGF0aXZl
IGxvZ2ljYWwgaGVpZ2h0LCB3ZSBzaG91bGRuJ3QgbGV0IGl0IG92ZXJyaWRlIGl0cyBpbnRyaW5z
aWMgaGVpZ2h0LCB3aGljaCBpcwogICAgIC8vIHdoYXQgd2UgYXJlIGludGVyZXN0ZWQgaW4gaGVy
ZS4gVGh1cyB3ZSBuZWVkIHRvIHNldCB0aGUgYmxvY2stYXhpcyBvdmVycmlkZSBzaXplIHRvIC0x
IChubyBwb3NzaWJsZSByZXNvbHV0aW9uKS4KICAgICBpZiAoc2hvdWxkQ2xlYXJPdmVycmlkZUNv
bnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY2hpbGQsIEZvclJvd3MpKSB7CkBAIC03
MzUsMTcgKzcxNSwxNiBAQCBMYXlvdXRVbml0IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobVN0cmF0
ZWd5Ojpsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoUmVuZGVyQm94JiBjaAogICAgICAgICBjaGlsZC5j
bGVhck92ZXJyaWRlTG9naWNhbENvbnRlbnRIZWlnaHQoKTsKIAogICAgIGNoaWxkLmxheW91dElm
TmVlZGVkKCk7Ci0gICAgcmV0dXJuIGNoaWxkLmxvZ2ljYWxIZWlnaHQoKSArIGNoaWxkLm1hcmdp
bkxvZ2ljYWxIZWlnaHQoKTsKKyAgICByZXR1cm4gY2hpbGQubG9naWNhbEhlaWdodCgpICsgR3Jp
ZExheW91dEZ1bmN0aW9uczo6bWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZCgqcmVuZGVyR3JpZCgp
LCBjaGlsZEJsb2NrRGlyZWN0aW9uLCBjaGlsZCk7CiB9CiAKIExheW91dFVuaXQgR3JpZFRyYWNr
U2l6aW5nQWxnb3JpdGhtU3RyYXRlZ3k6Om1pbkNvbnRlbnRGb3JDaGlsZChSZW5kZXJCb3gmIGNo
aWxkKSBjb25zdAogewotICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBjaGlsZElubGluZURp
cmVjdGlvbiA9IGZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKHJlbmRlckdyaWQoKSwgY2hpbGQs
IEZvckNvbHVtbnMpOworICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBjaGlsZElubGluZURp
cmVjdGlvbiA9IEdyaWRMYXlvdXRGdW5jdGlvbnM6OmZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxk
KCpyZW5kZXJHcmlkKCksIGNoaWxkLCBGb3JDb2x1bW5zKTsKICAgICBpZiAoZGlyZWN0aW9uKCkg
PT0gY2hpbGRJbmxpbmVEaXJlY3Rpb24pIHsKICAgICAgICAgLy8gRklYTUU6IEl0J3MgdW5jbGVh
ciBpZiB3ZSBzaG91bGQgcmV0dXJuIHRoZSBpbnRyaW5zaWMgd2lkdGggb3IgdGhlIHByZWZlcnJl
ZCB3aWR0aC4KICAgICAgICAgLy8gU2VlIGh0dHA6Ly9saXN0cy53My5vcmcvQXJjaGl2ZXMvUHVi
bGljL3d3dy1zdHlsZS8yMDEzSmFuLzAyNDUuaHRtbAotICAgICAgICBMYXlvdXRVbml0IG1hcmdp
bkxvZ2ljYWxXaWR0aCA9IGNoaWxkLm5lZWRzTGF5b3V0KCkgPyBjb21wdXRlTWFyZ2luTG9naWNh
bFNpemVGb3JDaGlsZChjaGlsZElubGluZURpcmVjdGlvbiwgKnJlbmRlckdyaWQoKSwgY2hpbGQp
IDogY2hpbGQubWFyZ2luTG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIHJldHVybiBjaGlsZC5taW5Q
cmVmZXJyZWRMb2dpY2FsV2lkdGgoKSArIG1hcmdpbkxvZ2ljYWxXaWR0aDsKKyAgICAgICAgcmV0
dXJuIGNoaWxkLm1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpICsgR3JpZExheW91dEZ1bmN0aW9u
czo6bWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZCgqcmVuZGVyR3JpZCgpLCBjaGlsZElubGluZURp
cmVjdGlvbiwgY2hpbGQpOwogICAgIH0KIAogICAgIGlmICh1cGRhdGVPdmVycmlkZUNvbnRhaW5p
bmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY2hpbGQsIGNoaWxkSW5saW5lRGlyZWN0aW9uKSkK
QEAgLTc1NSwxMiArNzM0LDExIEBAIExheW91dFVuaXQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGht
U3RyYXRlZ3k6Om1pbkNvbnRlbnRGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkCiAKIExheW91dFVu
aXQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtU3RyYXRlZ3k6Om1heENvbnRlbnRGb3JDaGlsZChS
ZW5kZXJCb3gmIGNoaWxkKSBjb25zdAogewotICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBj
aGlsZElubGluZURpcmVjdGlvbiA9IGZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKHJlbmRlckdy
aWQoKSwgY2hpbGQsIEZvckNvbHVtbnMpOworICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBj
aGlsZElubGluZURpcmVjdGlvbiA9IEdyaWRMYXlvdXRGdW5jdGlvbnM6OmZsb3dBd2FyZURpcmVj
dGlvbkZvckNoaWxkKCpyZW5kZXJHcmlkKCksIGNoaWxkLCBGb3JDb2x1bW5zKTsKICAgICBpZiAo
ZGlyZWN0aW9uKCkgPT0gY2hpbGRJbmxpbmVEaXJlY3Rpb24pIHsKICAgICAgICAgLy8gRklYTUU6
IEl0J3MgdW5jbGVhciBpZiB3ZSBzaG91bGQgcmV0dXJuIHRoZSBpbnRyaW5zaWMgd2lkdGggb3Ig
dGhlIHByZWZlcnJlZCB3aWR0aC4KICAgICAgICAgLy8gU2VlIGh0dHA6Ly9saXN0cy53My5vcmcv
QXJjaGl2ZXMvUHVibGljL3d3dy1zdHlsZS8yMDEzSmFuLzAyNDUuaHRtbAotICAgICAgICBMYXlv
dXRVbml0IG1hcmdpbkxvZ2ljYWxXaWR0aCA9IGNoaWxkLm5lZWRzTGF5b3V0KCkgPyBjb21wdXRl
TWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZChjaGlsZElubGluZURpcmVjdGlvbiwgKnJlbmRlckdy
aWQoKSwgY2hpbGQpIDogY2hpbGQubWFyZ2luTG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIHJldHVy
biBjaGlsZC5tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSArIG1hcmdpbkxvZ2ljYWxXaWR0aDsK
KyAgICAgICAgcmV0dXJuIGNoaWxkLm1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpICsgR3JpZExh
eW91dEZ1bmN0aW9uczo6bWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZCgqcmVuZGVyR3JpZCgpLCBj
aGlsZElubGluZURpcmVjdGlvbiwgY2hpbGQpOwogICAgIH0KIAogICAgIGlmICh1cGRhdGVPdmVy
cmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY2hpbGQsIGNoaWxkSW5saW5l
RGlyZWN0aW9uKSkKQEAgLTc3MCw3ICs3NDgsNyBAQCBMYXlvdXRVbml0IEdyaWRUcmFja1Npemlu
Z0FsZ29yaXRobVN0cmF0ZWd5OjptYXhDb250ZW50Rm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZAog
CiBMYXlvdXRVbml0IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobVN0cmF0ZWd5OjptaW5TaXplRm9y
Q2hpbGQoUmVuZGVyQm94JiBjaGlsZCkgY29uc3QKIHsKLSAgICBHcmlkVHJhY2tTaXppbmdEaXJl
Y3Rpb24gY2hpbGRJbmxpbmVEaXJlY3Rpb24gPSBmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChy
ZW5kZXJHcmlkKCksIGNoaWxkLCBGb3JDb2x1bW5zKTsKKyAgICBHcmlkVHJhY2tTaXppbmdEaXJl
Y3Rpb24gY2hpbGRJbmxpbmVEaXJlY3Rpb24gPSBHcmlkTGF5b3V0RnVuY3Rpb25zOjpmbG93QXdh
cmVEaXJlY3Rpb25Gb3JDaGlsZCgqcmVuZGVyR3JpZCgpLCBjaGlsZCwgRm9yQ29sdW1ucyk7CiAg
ICAgYm9vbCBpc1Jvd0F4aXMgPSBkaXJlY3Rpb24oKSA9PSBjaGlsZElubGluZURpcmVjdGlvbjsK
ICAgICBjb25zdCBMZW5ndGgmIGNoaWxkTWluU2l6ZSA9IGlzUm93QXhpcyA/IGNoaWxkLnN0eWxl
KCkubG9naWNhbE1pbldpZHRoKCkgOiBjaGlsZC5zdHlsZSgpLmxvZ2ljYWxNaW5IZWlnaHQoKTsK
ICAgICBjb25zdCBMZW5ndGgmIGNoaWxkU2l6ZSA9IGlzUm93QXhpcyA/IGNoaWxkLnN0eWxlKCku
bG9naWNhbFdpZHRoKCkgOiBjaGlsZC5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKTsKQEAgLTkxMyw3
ICs4OTEsNyBAQCBwcml2YXRlOgogTGF5b3V0VW5pdCBEZWZpbml0ZVNpemVTdHJhdGVneTo6bWlu
TG9naWNhbFdpZHRoRm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCwgTGVuZ3RoIGNoaWxkTWluU2l6
ZSwgTGF5b3V0VW5pdCBhdmFpbGFibGVTaXplKSBjb25zdAogewogICAgIExheW91dFVuaXQgbWFy
Z2luTG9naWNhbFdpZHRoID0KLSAgICAgICAgY29tcHV0ZU1hcmdpbkxvZ2ljYWxTaXplRm9yQ2hp
bGQoZmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQocmVuZGVyR3JpZCgpLCBjaGlsZCwgRm9yQ29s
dW1ucyksICpyZW5kZXJHcmlkKCksIGNoaWxkKTsKKyAgICAgICAgR3JpZExheW91dEZ1bmN0aW9u
czo6Y29tcHV0ZU1hcmdpbkxvZ2ljYWxTaXplRm9yQ2hpbGQoKnJlbmRlckdyaWQoKSwgRm9yQ29s
dW1ucywgY2hpbGQpOwogICAgIHJldHVybiBjaGlsZC5jb21wdXRlTG9naWNhbFdpZHRoSW5GcmFn
bWVudFVzaW5nKE1pblNpemUsIGNoaWxkTWluU2l6ZSwgYXZhaWxhYmxlU2l6ZSwgKnJlbmRlckdy
aWQoKSwgbnVsbHB0cikgKyBtYXJnaW5Mb2dpY2FsV2lkdGg7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKaW5kZXggYjczNmQ0
YzFkYjI3Y2ZkZTBmOTVjMjFkZTAyOWQ2OGVkMWU2ZWIwNi4uYjJkMmU1OTRkN2E4MGNiNDMzMGI3
ZjY0OGFmZjU0N2JlNzEyZWMwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJJ
bmxpbmVJdGVyYXRvci5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJJ
bmxpbmVUZXh0Qm94U3R5bGUuaCIKKyNpbmNsdWRlICJMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUg
IkxpbmVMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJSZW5k
ZXJCbG9ja0Zsb3cuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJHcmlkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcAppbmRl
eCA5YTY4MWZiODg1MzM0M2IxMjc1ZWRkZmRkMDZlZDk1Y2UzZTI3N2I2Li43MzJhOWE0ZWFjYmQ5
YjBhZDM2MDViOTBlYzQ4NDA5MjgwMDhkYzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckdyaWQuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyR3JpZC5oIgog
CiAjaW5jbHVkZSAiR3JpZEFyZWEuaCIKKyNpbmNsdWRlICJHcmlkTGF5b3V0RnVuY3Rpb25zLmgi
CiAjaW5jbHVkZSAiR3JpZFBvc2l0aW9uc1Jlc29sdmVyLmgiCiAjaW5jbHVkZSAiR3JpZFRyYWNr
U2l6aW5nQWxnb3JpdGhtLmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVwYWludGVyLmgiCkBAIC0yNDcs
NyArMjQ4LDcgQEAgdm9pZCBSZW5kZXJHcmlkOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hp
bGRyZW4sIExheW91dFVuaXQpCiAgICAgICAgIC8vIHNhbWUgcmVzdWx0IHdoZW4gZ3JpZCdzIGlu
dHJpbnNpYyBzaXplIGlzIGNvbXB1dGVkIGFnYWluIGluIHRoZSB1cGRhdGVMb2dpY2FsV2lkdGgg
Y2FsbCBiZWxsb3cuCiAgICAgICAgIGlmIChzaXplc0xvZ2ljYWxXaWR0aFRvRml0Q29udGVudChN
YXhTaXplKSB8fCBzdHlsZSgpLmxvZ2ljYWxXaWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpIHsK
ICAgICAgICAgICAgIGZvciAoYXV0byogY2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNo
aWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCAhaXNPcnRob2dvbmFsQ2hpbGQoKmNoaWxk
KSkKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8
ICFHcmlkTGF5b3V0RnVuY3Rpb25zOjppc09ydGhvZ29uYWxDaGlsZCgqdGhpcywgKmNoaWxkKSkK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgY2hpbGQtPmNs
ZWFyT3ZlcnJpZGVTaXplKCk7CiAgICAgICAgICAgICAgICAgY2hpbGQtPmNsZWFyQ29udGFpbmlu
Z0Jsb2NrT3ZlcnJpZGVTaXplKCk7CkBAIC00NjcsMTYgKzQ2OCw2IEBAIHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPExheW91dFVuaXQ+IG92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JD
aGlsZChjb25zCiAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gY2hpbGQub3Zl
cnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoKCkgOiBjaGlsZC5vdmVycmlk
ZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCk7CiB9CiAKLWJvb2wgUmVuZGVy
R3JpZDo6aXNPcnRob2dvbmFsQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCkgY29uc3QKLXsK
LSAgICByZXR1cm4gY2hpbGQuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAhPSBpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpOwotfQotCi1HcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gUmVuZGVyR3Jp
ZDo6Zmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCwgR3Jp
ZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikgY29uc3QKLXsKLSAgICByZXR1cm4gIWlz
T3J0aG9nb25hbENoaWxkKGNoaWxkKSA/IGRpcmVjdGlvbiA6IChkaXJlY3Rpb24gPT0gRm9yQ29s
dW1ucyA/IEZvclJvd3MgOiBGb3JDb2x1bW5zKTsKLX0KLQogdW5zaWduZWQgUmVuZGVyR3JpZDo6
Y29tcHV0ZUF1dG9SZXBlYXRUcmFja3NDb3VudChHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGly
ZWN0aW9uLCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGF2YWlsYWJsZVNpemUpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKCFhdmFpbGFibGVTaXplIHx8IGF2YWlsYWJsZVNpemUudmFsdWUoKSAhPSAt
MSk7CkBAIC02MjYsNyArNjE3LDcgQEAgdm9pZCBSZW5kZXJHcmlkOjpwbGFjZUl0ZW1zT25Hcmlk
KEdyaWQmIGdyaWQsIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gYXZhaWxhYmwKICAgICAgICAg
aWYgKGdyaWQub3JkZXJJdGVyYXRvcigpLnNob3VsZFNraXBDaGlsZCgqY2hpbGQpKQogICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgaGFzQW55T3J0aG9nb25hbEdyaWRJdGVtID0gaGFz
QW55T3J0aG9nb25hbEdyaWRJdGVtIHx8IGlzT3J0aG9nb25hbENoaWxkKCpjaGlsZCk7CisgICAg
ICAgIGhhc0FueU9ydGhvZ29uYWxHcmlkSXRlbSA9IGhhc0FueU9ydGhvZ29uYWxHcmlkSXRlbSB8
fCBHcmlkTGF5b3V0RnVuY3Rpb25zOjppc09ydGhvZ29uYWxDaGlsZCgqdGhpcywgKmNoaWxkKTsK
IAogICAgICAgICBHcmlkQXJlYSBhcmVhID0gZ3JpZC5ncmlkSXRlbUFyZWEoKmNoaWxkKTsKICAg
ICAgICAgaWYgKCFhcmVhLnJvd3MuaXNJbmRlZmluaXRlKCkpCkBAIC05NjgsNyArOTU5LDcgQEAg
dm9pZCBSZW5kZXJHcmlkOjpsYXlvdXRQb3NpdGlvbmVkT2JqZWN0KFJlbmRlckJveCYgY2hpbGQs
IGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwKICAgICAvLyBGSVhNRTogSWYgcG9zc2libGUgaXQnZCBi
ZSBuaWNlIHRvIGF2b2lkIHRoaXMgbGF5b3V0IGhlcmUgd2hlbiBpdCdzIG5vdCBuZWVkZWQuCiAg
ICAgUmVuZGVyQmxvY2s6OmxheW91dFBvc2l0aW9uZWRPYmplY3QoY2hpbGQsIHJlbGF5b3V0Q2hp
bGRyZW4sIGZpeGVkUG9zaXRpb25PYmplY3RzT25seSk7CiAKLSAgICBib29sIGlzT3J0aG9nb25h
bCA9IGlzT3J0aG9nb25hbENoaWxkKGNoaWxkKTsKKyAgICBib29sIGlzT3J0aG9nb25hbCA9IEdy
aWRMYXlvdXRGdW5jdGlvbnM6OmlzT3J0aG9nb25hbENoaWxkKCp0aGlzLCBjaGlsZCk7CiAgICAg
TGF5b3V0VW5pdCBsb2dpY2FsTGVmdCA9IGNoaWxkLmxvZ2ljYWxMZWZ0KCkgKyAoaXNPcnRob2dv
bmFsID8gcm93T2Zmc2V0IDogY29sdW1uT2Zmc2V0KTsKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxU
b3AgPSBjaGlsZC5sb2dpY2FsVG9wKCkgKyAoaXNPcnRob2dvbmFsID8gY29sdW1uT2Zmc2V0IDog
cm93T2Zmc2V0KTsKICAgICBjaGlsZC5zZXRMb2dpY2FsTG9jYXRpb24oTGF5b3V0UG9pbnQobG9n
aWNhbExlZnQsIGxvZ2ljYWxUb3ApKTsKQEAgLTExNDYsMzMgKzExMzcsMTMgQEAgc3RhdGljIExh
eW91dFVuaXQgY29tcHV0ZU92ZXJmbG93QWxpZ25tZW50T2Zmc2V0KE92ZXJmbG93QWxpZ25tZW50
IG92ZXJmbG93LCBMYXkKICAgICByZXR1cm4gMDsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJHcmlk
OjptYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJl
Y3Rpb24sIGNvbnN0IFJlbmRlckJveCYgY2hpbGQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZsb3dB
d2FyZURpcmVjdGlvbkZvckNoaWxkKGNoaWxkLCBkaXJlY3Rpb24pID09IEZvckNvbHVtbnMgPyBj
aGlsZC5tYXJnaW5Mb2dpY2FsV2lkdGgoKSA6IGNoaWxkLm1hcmdpbkxvZ2ljYWxIZWlnaHQoKTsK
LX0KLQotTGF5b3V0VW5pdCBSZW5kZXJHcmlkOjpjb21wdXRlTWFyZ2luTG9naWNhbFNpemVGb3JD
aGlsZChHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBSZW5kZXJCb3gm
IGNoaWxkKSBjb25zdAotewotICAgIGlmICghY2hpbGQuc3R5bGUoKS5oYXNNYXJnaW4oKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBMYXlvdXRVbml0IG1hcmdpblN0YXJ0OwotICAgIExheW91
dFVuaXQgbWFyZ2luRW5kOwotICAgIGlmIChkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykKLSAgICAg
ICAgY2hpbGQuY29tcHV0ZUlubGluZURpcmVjdGlvbk1hcmdpbnMoKnRoaXMsIGNoaWxkLmNvbnRh
aW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnRJbkZyYWdtZW50KG51bGxwdHIpLCBjaGls
ZC5sb2dpY2FsV2lkdGgoKSwgbWFyZ2luU3RhcnQsIG1hcmdpbkVuZCk7Ci0gICAgZWxzZQotICAg
ICAgICBjaGlsZC5jb21wdXRlQmxvY2tEaXJlY3Rpb25NYXJnaW5zKCp0aGlzLCBtYXJnaW5TdGFy
dCwgbWFyZ2luRW5kKTsKLQotICAgIHJldHVybiBtYXJnaW5TdGFydCArIG1hcmdpbkVuZDsKLX0K
LQogTGF5b3V0VW5pdCBSZW5kZXJHcmlkOjphdmFpbGFibGVBbGlnbm1lbnRTcGFjZUZvckNoaWxk
QmVmb3JlU3RyZXRjaGluZyhMYXlvdXRVbml0IGdyaWRBcmVhQnJlYWR0aEZvckNoaWxkLCBjb25z
dCBSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAogewogICAgIC8vIEJlY2F1c2Ugd2Ugd2FudCB0byBh
dm9pZCBtdWx0aXBsZSBsYXlvdXRzLCBzdHJldGNoaW5nIGxvZ2ljIG1pZ2h0IGJlIHBlcmZvcm1l
ZCBiZWZvcmUKICAgICAvLyBjaGlsZHJlbiBhcmUgbGFpZCBvdXQsIHNvIHdlIGNhbid0IHVzZSB0
aGUgY2hpbGQgY2FjaGVkIHZhbHVlcy4gSGVuY2UsIHdlIG5lZWQgdG8KICAgICAvLyBjb21wdXRl
IG1hcmdpbnMgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIHRoZSBhdmFpbGFibGUgaGVpZ2h0IGJlZm9y
ZSBzdHJldGNoaW5nLgotICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBjaGlsZEJsb2NrRmxv
d0RpcmVjdGlvbiA9IGZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKGNoaWxkLCBGb3JSb3dzKTsK
LSAgICByZXR1cm4gZ3JpZEFyZWFCcmVhZHRoRm9yQ2hpbGQgLSAoY2hpbGQubmVlZHNMYXlvdXQo
KSA/IGNvbXB1dGVNYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKGNoaWxkQmxvY2tGbG93RGlyZWN0
aW9uLCBjaGlsZCkgOiBtYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKGNoaWxkQmxvY2tGbG93RGly
ZWN0aW9uLCBjaGlsZCkpOworICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBjaGlsZEJsb2Nr
Rmxvd0RpcmVjdGlvbiA9IEdyaWRMYXlvdXRGdW5jdGlvbnM6OmZsb3dBd2FyZURpcmVjdGlvbkZv
ckNoaWxkKCp0aGlzLCBjaGlsZCwgRm9yUm93cyk7CisgICAgcmV0dXJuIGdyaWRBcmVhQnJlYWR0
aEZvckNoaWxkIC0gR3JpZExheW91dEZ1bmN0aW9uczo6bWFyZ2luTG9naWNhbFNpemVGb3JDaGls
ZCgqdGhpcywgY2hpbGRCbG9ja0Zsb3dEaXJlY3Rpb24sIGNoaWxkKTsKIH0KIAogU3R5bGVTZWxm
QWxpZ25tZW50RGF0YSBSZW5kZXJHcmlkOjphbGlnblNlbGZGb3JDaGlsZChjb25zdCBSZW5kZXJC
b3gmIGNoaWxkLCBjb25zdCBSZW5kZXJTdHlsZSogZ3JpZFN0eWxlKSBjb25zdApAQCAtMTE5OCw3
ICsxMTY5LDcgQEAgdm9pZCBSZW5kZXJHcmlkOjphcHBseVN0cmV0Y2hBbGlnbm1lbnRUb0NoaWxk
SWZOZWVkZWQoUmVuZGVyQm94JiBjaGlsZCkKICAgICAvLyBub3QsIGV2YWx1YXRpbmcgdGhlIGNv
bmRpdGlvbnMgd2hpY2ggbWlnaHQgaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZSBvbGQgdmFsdWVzIHdl
cmUgc2V0LgogICAgIGNoaWxkLmNsZWFyT3ZlcnJpZGVMb2dpY2FsQ29udGVudEhlaWdodCgpOwog
Ci0gICAgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGNoaWxkQmxvY2tEaXJlY3Rpb24gPSBmbG93
QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChjaGlsZCwgRm9yUm93cyk7CisgICAgR3JpZFRyYWNrU2l6
aW5nRGlyZWN0aW9uIGNoaWxkQmxvY2tEaXJlY3Rpb24gPSBHcmlkTGF5b3V0RnVuY3Rpb25zOjpm
bG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZCgqdGhpcywgY2hpbGQsIEZvclJvd3MpOwogICAgIGJv
b2wgYmxvY2tGbG93SXNDb2x1bW5BeGlzID0gY2hpbGRCbG9ja0RpcmVjdGlvbiA9PSBGb3JSb3dz
OwogICAgIGJvb2wgYWxsb3dlZFRvU3RyZXRjaENoaWxkQmxvY2tTaXplID0gYmxvY2tGbG93SXND
b2x1bW5BeGlzID8gYWxsb3dlZFRvU3RyZXRjaENoaWxkQWxvbmdDb2x1bW5BeGlzKGNoaWxkKSA6
IGFsbG93ZWRUb1N0cmV0Y2hDaGlsZEFsb25nUm93QXhpcyhjaGlsZCk7CiAgICAgaWYgKGFsbG93
ZWRUb1N0cmV0Y2hDaGlsZEJsb2NrU2l6ZSkgewpAQCAtMTI4MSw3ICsxMjUyLDcgQEAgc3RhdGlj
IGludCBzeW50aGVzaXplZEJhc2VsaW5lRnJvbUJvcmRlckJveChjb25zdCBSZW5kZXJCb3gmIGJv
eCwgTGluZURpcmVjdGlvbk0KIAogYm9vbCBSZW5kZXJHcmlkOjppc0lubGluZUJhc2VsaW5lQWxp
Z25lZENoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFs
aWduU2VsZkZvckNoaWxkKGNoaWxkKS5wb3NpdGlvbigpID09IEl0ZW1Qb3NpdGlvbkJhc2VsaW5l
ICYmICFpc09ydGhvZ29uYWxDaGlsZChjaGlsZCkgJiYgIWhhc0F1dG9NYXJnaW5zSW5Db2x1bW5B
eGlzKGNoaWxkKTsKKyAgICByZXR1cm4gYWxpZ25TZWxmRm9yQ2hpbGQoY2hpbGQpLnBvc2l0aW9u
KCkgPT0gSXRlbVBvc2l0aW9uQmFzZWxpbmUgJiYgIUdyaWRMYXlvdXRGdW5jdGlvbnM6OmlzT3J0
aG9nb25hbENoaWxkKCp0aGlzLCBjaGlsZCkgJiYgIWhhc0F1dG9NYXJnaW5zSW5Db2x1bW5BeGlz
KGNoaWxkKTsKIH0KIAogLy8gRklYTUU6IFRoaXMgbG9naWMgaXMgc2hhcmVkIGJ5IFJlbmRlckZs
ZXhpYmxlQm94LCBzbyBpdCBtaWdodCBiZSByZWZhY3RvcmVkIHNvbWVob3cuCkBAIC0xMzIyLDcg
KzEyOTMsNyBAQCBzdGQ6Om9wdGlvbmFsPGludD4gUmVuZGVyR3JpZDo6Zmlyc3RMaW5lQmFzZWxp
bmUoKSBjb25zdAogICAgIGlmICghYmFzZWxpbmVDaGlsZCkKICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKIAotICAgIGF1dG8gYmFzZWxpbmUgPSBpc09ydGhvZ29uYWxDaGlsZCgqYmFzZWxp
bmVDaGlsZCkgPyBzdGQ6Om51bGxvcHQgOiBiYXNlbGluZUNoaWxkLT5maXJzdExpbmVCYXNlbGlu
ZSgpOworICAgIGF1dG8gYmFzZWxpbmUgPSBHcmlkTGF5b3V0RnVuY3Rpb25zOjppc09ydGhvZ29u
YWxDaGlsZCgqdGhpcywgKmJhc2VsaW5lQ2hpbGQpID8gc3RkOjpudWxsb3B0IDogYmFzZWxpbmVD
aGlsZC0+Zmlyc3RMaW5lQmFzZWxpbmUoKTsKICAgICAvLyBXZSB0YWtlIGJvcmRlci1ib3gncyBi
b3R0b20gaWYgbm8gdmFsaWQgYmFzZWxpbmUuCiAgICAgaWYgKCFiYXNlbGluZSkgewogICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIHBhc3MgfGRpcmVjdGlvbnwgaW50byBmaXJzdExpbmVCYXNl
bGluZSBhbmQgc3RvcCBiYWlsaW5nIG91dCBpZiB3ZSdyZSBhIHdyaXRpbmcKQEAgLTEzNTIsNyAr
MTMyMyw3IEBAIEdyaWRBeGlzUG9zaXRpb24gUmVuZGVyR3JpZDo6Y29sdW1uQXhpc1Bvc2l0aW9u
Rm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCkKICAgICAgICAgLy8gRklYTUU6IFNob3Vs
ZCB3ZSBpbXBsZW1lbnQgdGhpcyBsb2dpYyBpbiBhIGdlbmVyaWMgdXRpbGl0eSBmdW5jdGlvbiA/
CiAgICAgICAgIC8vIEFsaWducyB0aGUgYWxpZ25tZW50IHN1YmplY3QgdG8gYmUgZmx1c2ggd2l0
aCB0aGUgZWRnZSBvZiB0aGUgYWxpZ25tZW50IGNvbnRhaW5lcgogICAgICAgICAvLyBjb3JyZXNw
b25kaW5nIHRvIHRoZSBhbGlnbm1lbnQgc3ViamVjdCdzICdzdGFydCcgc2lkZSBpbiB0aGUgY29s
dW1uIGF4aXMuCi0gICAgICAgIGlmIChpc09ydGhvZ29uYWxDaGlsZChjaGlsZCkpIHsKKyAgICAg
ICAgaWYgKEdyaWRMYXlvdXRGdW5jdGlvbnM6OmlzT3J0aG9nb25hbENoaWxkKCp0aGlzLCBjaGls
ZCkpIHsKICAgICAgICAgICAgIC8vIElmIG9ydGhvZ29uYWwgd3JpdGluZy1tb2Rlcywgc2VsZi1z
dGFydCB3aWxsIGJlIGJhc2VkIG9uIHRoZSBjaGlsZCdzIGlubGluZS1heGlzCiAgICAgICAgICAg
ICAvLyBkaXJlY3Rpb24gKGlubGluZS1zdGFydCksIGJlY2F1c2UgaXQncyB0aGUgb25lIHBhcmFs
bGVsIHRvIHRoZSBjb2x1bW4gYXhpcy4KICAgICAgICAgICAgIGlmIChzdHlsZSgpLmlzRmxpcHBl
ZEJsb2Nrc1dyaXRpbmdNb2RlKCkpCkBAIC0xMzY1LDcgKzEzMzYsNyBAQCBHcmlkQXhpc1Bvc2l0
aW9uIFJlbmRlckdyaWQ6OmNvbHVtbkF4aXNQb3NpdGlvbkZvckNoaWxkKGNvbnN0IFJlbmRlckJv
eCYgY2hpbGQpCiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgaW1wbGVtZW50IHRoaXMgbG9n
aWMgaW4gYSBnZW5lcmljIHV0aWxpdHkgZnVuY3Rpb24gPwogICAgICAgICAvLyBBbGlnbnMgdGhl
IGFsaWdubWVudCBzdWJqZWN0IHRvIGJlIGZsdXNoIHdpdGggdGhlIGVkZ2Ugb2YgdGhlIGFsaWdu
bWVudCBjb250YWluZXIKICAgICAgICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgYWxpZ25tZW50
IHN1YmplY3QncyAnZW5kJyBzaWRlIGluIHRoZSBjb2x1bW4gYXhpcy4KLSAgICAgICAgaWYgKGlz
T3J0aG9nb25hbENoaWxkKGNoaWxkKSkgeworICAgICAgICBpZiAoR3JpZExheW91dEZ1bmN0aW9u
czo6aXNPcnRob2dvbmFsQ2hpbGQoKnRoaXMsIGNoaWxkKSkgewogICAgICAgICAgICAgLy8gSWYg
b3J0aG9nb25hbCB3cml0aW5nLW1vZGVzLCBzZWxmLWVuZCB3aWxsIGJlIGJhc2VkIG9uIHRoZSBj
aGlsZCdzIGlubGluZS1heGlzCiAgICAgICAgICAgICAvLyBkaXJlY3Rpb24sIChpbmxpbmUtZW5k
KSBiZWNhdXNlIGl0J3MgdGhlIG9uZSBwYXJhbGxlbCB0byB0aGUgY29sdW1uIGF4aXMuCiAgICAg
ICAgICAgICBpZiAoc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKQpAQCAtMTQx
Nyw3ICsxMzg4LDcgQEAgR3JpZEF4aXNQb3NpdGlvbiBSZW5kZXJHcmlkOjpyb3dBeGlzUG9zaXRp
b25Gb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkKSBjb24KICAgICAgICAgLy8gRklYTUU6
IFNob3VsZCB3ZSBpbXBsZW1lbnQgdGhpcyBsb2dpYyBpbiBhIGdlbmVyaWMgdXRpbGl0eSBmdW5j
dGlvbiA/CiAgICAgICAgIC8vIEFsaWducyB0aGUgYWxpZ25tZW50IHN1YmplY3QgdG8gYmUgZmx1
c2ggd2l0aCB0aGUgZWRnZSBvZiB0aGUgYWxpZ25tZW50IGNvbnRhaW5lcgogICAgICAgICAvLyBj
b3JyZXNwb25kaW5nIHRvIHRoZSBhbGlnbm1lbnQgc3ViamVjdCdzICdzdGFydCcgc2lkZSBpbiB0
aGUgcm93IGF4aXMuCi0gICAgICAgIGlmIChpc09ydGhvZ29uYWxDaGlsZChjaGlsZCkpIHsKKyAg
ICAgICAgaWYgKEdyaWRMYXlvdXRGdW5jdGlvbnM6OmlzT3J0aG9nb25hbENoaWxkKCp0aGlzLCBj
aGlsZCkpIHsKICAgICAgICAgICAgIC8vIElmIG9ydGhvZ29uYWwgd3JpdGluZy1tb2Rlcywgc2Vs
Zi1zdGFydCB3aWxsIGJlIGJhc2VkIG9uIHRoZSBjaGlsZCdzIGJsb2NrLWF4aXMKICAgICAgICAg
ICAgIC8vIGRpcmVjdGlvbiwgYmVjYXVzZSBpdCdzIHRoZSBvbmUgcGFyYWxsZWwgdG8gdGhlIHJv
dyBheGlzLgogICAgICAgICAgICAgaWYgKGNoaWxkLnN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3Jp
dGluZ01vZGUoKSkKQEAgLTE0MzAsNyArMTQwMSw3IEBAIEdyaWRBeGlzUG9zaXRpb24gUmVuZGVy
R3JpZDo6cm93QXhpc1Bvc2l0aW9uRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCkgY29u
CiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgaW1wbGVtZW50IHRoaXMgbG9naWMgaW4gYSBn
ZW5lcmljIHV0aWxpdHkgZnVuY3Rpb24gPwogICAgICAgICAvLyBBbGlnbnMgdGhlIGFsaWdubWVu
dCBzdWJqZWN0IHRvIGJlIGZsdXNoIHdpdGggdGhlIGVkZ2Ugb2YgdGhlIGFsaWdubWVudCBjb250
YWluZXIKICAgICAgICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgYWxpZ25tZW50IHN1YmplY3Qn
cyAnZW5kJyBzaWRlIGluIHRoZSByb3cgYXhpcy4KLSAgICAgICAgaWYgKGlzT3J0aG9nb25hbENo
aWxkKGNoaWxkKSkgeworICAgICAgICBpZiAoR3JpZExheW91dEZ1bmN0aW9uczo6aXNPcnRob2dv
bmFsQ2hpbGQoKnRoaXMsIGNoaWxkKSkgewogICAgICAgICAgICAgLy8gSWYgb3J0aG9nb25hbCB3
cml0aW5nLW1vZGVzLCBzZWxmLWVuZCB3aWxsIGJlIGJhc2VkIG9uIHRoZSBjaGlsZCdzIGJsb2Nr
LWF4aXMKICAgICAgICAgICAgIC8vIGRpcmVjdGlvbiwgYmVjYXVzZSBpdCdzIHRoZSBvbmUgcGFy
YWxsZWwgdG8gdGhlIHJvdyBheGlzLgogICAgICAgICAgICAgaWYgKGNoaWxkLnN0eWxlKCkuaXNG
bGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkKQEAgLTE0OTMsNyArMTQ2NCw3IEBAIExheW91dFVu
aXQgUmVuZGVyR3JpZDo6Y29sdW1uQXhpc09mZnNldEZvckNoaWxkKGNvbnN0IFJlbmRlckJveCYg
Y2hpbGQpIGNvbnN0CiAgICAgICAgIC8vICh0aGlzIGRvZXMgbm90IGhhdmUgdG8gYmUgZG9uZSBm
b3IgdGhlIGxhc3QgdHJhY2sgYXMgdGhlcmUgYXJlIG5vIG1vcmUgbV9yb3dQb3NpdGlvbnMgYWZ0
ZXIgaXQpLgogICAgICAgICBpZiAoY2hpbGRFbmRMaW5lIDwgbV9yb3dQb3NpdGlvbnMuc2l6ZSgp
IC0gMSkKICAgICAgICAgICAgIGVuZE9mUm93IC09IGdyaWRHYXAoRm9yUm93cykgKyBtX29mZnNl
dEJldHdlZW5Sb3dzOwotICAgICAgICBMYXlvdXRVbml0IGNvbHVtbkF4aXNDaGlsZFNpemUgPSBp
c09ydGhvZ29uYWxDaGlsZChjaGlsZCkgPyBjaGlsZC5sb2dpY2FsV2lkdGgoKSArIGNoaWxkLm1h
cmdpbkxvZ2ljYWxXaWR0aCgpIDogY2hpbGQubG9naWNhbEhlaWdodCgpICsgY2hpbGQubWFyZ2lu
TG9naWNhbEhlaWdodCgpOworICAgICAgICBMYXlvdXRVbml0IGNvbHVtbkF4aXNDaGlsZFNpemUg
PSBHcmlkTGF5b3V0RnVuY3Rpb25zOjppc09ydGhvZ29uYWxDaGlsZCgqdGhpcywgY2hpbGQpID8g
Y2hpbGQubG9naWNhbFdpZHRoKCkgKyBjaGlsZC5tYXJnaW5Mb2dpY2FsV2lkdGgoKSA6IGNoaWxk
LmxvZ2ljYWxIZWlnaHQoKSArIGNoaWxkLm1hcmdpbkxvZ2ljYWxIZWlnaHQoKTsKICAgICAgICAg
YXV0byBvdmVyZmxvdyA9IGFsaWduU2VsZkZvckNoaWxkKGNoaWxkKS5vdmVyZmxvdygpOwogICAg
ICAgICBMYXlvdXRVbml0IG9mZnNldEZyb21TdGFydFBvc2l0aW9uID0gY29tcHV0ZU92ZXJmbG93
QWxpZ25tZW50T2Zmc2V0KG92ZXJmbG93LCBlbmRPZlJvdyAtIHN0YXJ0T2ZSb3csIGNvbHVtbkF4
aXNDaGlsZFNpemUpOwogICAgICAgICByZXR1cm4gc3RhcnRQb3NpdGlvbiArIChheGlzUG9zaXRp
b24gPT0gR3JpZEF4aXNFbmQgPyBvZmZzZXRGcm9tU3RhcnRQb3NpdGlvbiA6IG9mZnNldEZyb21T
dGFydFBvc2l0aW9uIC8gMik7CkBAIC0xNTI1LDcgKzE0OTYsNyBAQCBMYXlvdXRVbml0IFJlbmRl
ckdyaWQ6OnJvd0F4aXNPZmZzZXRGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkKSBjb25z
dAogICAgICAgICAvLyAodGhpcyBkb2VzIG5vdCBoYXZlIHRvIGJlIGRvbmUgZm9yIHRoZSBsYXN0
IHRyYWNrIGFzIHRoZXJlIGFyZSBubyBtb3JlIG1fY29sdW1uUG9zaXRpb25zIGFmdGVyIGl0KS4K
ICAgICAgICAgaWYgKGNoaWxkRW5kTGluZSA8IG1fY29sdW1uUG9zaXRpb25zLnNpemUoKSAtIDEp
CiAgICAgICAgICAgICBlbmRPZkNvbHVtbiAtPSBncmlkR2FwKEZvckNvbHVtbnMpICsgbV9vZmZz
ZXRCZXR3ZWVuQ29sdW1uczsKLSAgICAgICAgTGF5b3V0VW5pdCByb3dBeGlzQ2hpbGRTaXplID0g
aXNPcnRob2dvbmFsQ2hpbGQoY2hpbGQpID8gY2hpbGQubG9naWNhbEhlaWdodCgpICsgY2hpbGQu
bWFyZ2luTG9naWNhbEhlaWdodCgpIDogY2hpbGQubG9naWNhbFdpZHRoKCkgKyBjaGlsZC5tYXJn
aW5Mb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgTGF5b3V0VW5pdCByb3dBeGlzQ2hpbGRTaXplID0g
R3JpZExheW91dEZ1bmN0aW9uczo6aXNPcnRob2dvbmFsQ2hpbGQoKnRoaXMsIGNoaWxkKSA/IGNo
aWxkLmxvZ2ljYWxIZWlnaHQoKSArIGNoaWxkLm1hcmdpbkxvZ2ljYWxIZWlnaHQoKSA6IGNoaWxk
LmxvZ2ljYWxXaWR0aCgpICsgY2hpbGQubWFyZ2luTG9naWNhbFdpZHRoKCk7CiAgICAgICAgIGF1
dG8gb3ZlcmZsb3cgPSBqdXN0aWZ5U2VsZkZvckNoaWxkKGNoaWxkKS5vdmVyZmxvdygpOwogICAg
ICAgICBMYXlvdXRVbml0IG9mZnNldEZyb21TdGFydFBvc2l0aW9uID0gY29tcHV0ZU92ZXJmbG93
QWxpZ25tZW50T2Zmc2V0KG92ZXJmbG93LCBlbmRPZkNvbHVtbiAtIHN0YXJ0T2ZDb2x1bW4sIHJv
d0F4aXNDaGlsZFNpemUpOwogICAgICAgICByZXR1cm4gc3RhcnRQb3NpdGlvbiArIChheGlzUG9z
aXRpb24gPT0gR3JpZEF4aXNFbmQgPyBvZmZzZXRGcm9tU3RhcnRQb3NpdGlvbiA6IG9mZnNldEZy
b21TdGFydFBvc2l0aW9uIC8gMik7CkBAIC0xNjU0LDE4ICsxNjI1LDE5IEBAIExheW91dFBvaW50
IFJlbmRlckdyaWQ6OmZpbmRDaGlsZExvZ2ljYWxQb3NpdGlvbihjb25zdCBSZW5kZXJCb3gmIGNo
aWxkKSBjb25zdAogewogICAgIExheW91dFVuaXQgY29sdW1uQXhpc09mZnNldCA9IGNvbHVtbkF4
aXNPZmZzZXRGb3JDaGlsZChjaGlsZCk7CiAgICAgTGF5b3V0VW5pdCByb3dBeGlzT2Zmc2V0ID0g
cm93QXhpc09mZnNldEZvckNoaWxkKGNoaWxkKTsKKyAgICBib29sIGlzT3J0aG9nb25hbENoaWxk
ID0gR3JpZExheW91dEZ1bmN0aW9uczo6aXNPcnRob2dvbmFsQ2hpbGQoKnRoaXMsIGNoaWxkKTsK
IAogICAgIC8vIFdlIHN0b3JlZCBtX2NvbHVtblBvc2l0aW9ucydzIGRhdGEgaWdub3JpbmcgdGhl
IGRpcmVjdGlvbiwgaGVuY2Ugd2UgbWlnaHQgbmVlZCBub3cKICAgICAvLyB0byB0cmFuc2xhdGUg
cG9zaXRpb25zIGZyb20gUlRMIHRvIExUUiwgYXMgaXQncyBtb3JlIGNvbnZlbmllbnQgZm9yIHBh
aW50aW5nLgogICAgIGlmICghc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAg
ICAgIHJvd0F4aXNPZmZzZXQgPSB0cmFuc2xhdGVSVExDb29yZGluYXRlKHJvd0F4aXNPZmZzZXQp
IC0gKGlzT3J0aG9nb25hbENoaWxkKGNoaWxkKSA/IGNoaWxkLmxvZ2ljYWxIZWlnaHQoKSAgOiBj
aGlsZC5sb2dpY2FsV2lkdGgoKSk7CisgICAgICAgIHJvd0F4aXNPZmZzZXQgPSB0cmFuc2xhdGVS
VExDb29yZGluYXRlKHJvd0F4aXNPZmZzZXQpIC0gKGlzT3J0aG9nb25hbENoaWxkID8gY2hpbGQu
bG9naWNhbEhlaWdodCgpICA6IGNoaWxkLmxvZ2ljYWxXaWR0aCgpKTsKIAogICAgIC8vICJJbiB0
aGUgcG9zaXRpb25pbmcgcGhhc2UgWy4uLl0gY2FsY3VsYXRpb25zIGFyZSBwZXJmb3JtZWQgYWNj
b3JkaW5nIHRvIHRoZSB3cml0aW5nIG1vZGUKICAgICAvLyBvZiB0aGUgY29udGFpbmluZyBibG9j
ayBvZiB0aGUgYm94IGVzdGFibGlzaGluZyB0aGUgb3J0aG9nb25hbCBmbG93LiIgSG93ZXZlciwg
dGhlCiAgICAgLy8gcmVzdWx0aW5nIExheW91dFBvaW50IHdpbGwgYmUgdXNlZCBpbiAnc2V0TG9n
aWNhbFBvc2l0aW9uJyBpbiBvcmRlciB0byBzZXQgdGhlIGNoaWxkJ3MKICAgICAvLyBsb2dpY2Fs
IHBvc2l0aW9uLCB3aGljaCB3aWxsIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIGNoaWxkJ3Mg
d3JpdGluZy1tb2RlLgogICAgIExheW91dFBvaW50IGNoaWxkTG9jYXRpb24ocm93QXhpc09mZnNl
dCwgY29sdW1uQXhpc09mZnNldCk7Ci0gICAgcmV0dXJuIGlzT3J0aG9nb25hbENoaWxkKGNoaWxk
KSA/IGNoaWxkTG9jYXRpb24udHJhbnNwb3NlZFBvaW50KCkgOiBjaGlsZExvY2F0aW9uOworICAg
IHJldHVybiBpc09ydGhvZ29uYWxDaGlsZCA/IGNoaWxkTG9jYXRpb24udHJhbnNwb3NlZFBvaW50
KCkgOiBjaGlsZExvY2F0aW9uOwogfQogCiB1bnNpZ25lZCBSZW5kZXJHcmlkOjpudW1UcmFja3Mo
R3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgR3JpZCYgZ3JpZCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCmluZGV4IDZjYWFmZmEyNzhlOWI4
YjllMmFhNWRkNjNjNWVhOTNkYWU5YjY3YTIuLjkzNjY2ZmY2YWIwMWNmOWU1NzZhMDI5Mzk3NmZl
YTg0YjY0MDNjZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJH
cmlkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuaApAQCAtNjMs
NyArNjMsNiBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgYXV0b1JlcGVhdENvdW50Rm9yRGlyZWN0
aW9uKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0IHsgcmV0dXJuIG1f
Z3JpZC5hdXRvUmVwZWF0VHJhY2tzKGRpcmVjdGlvbik7IH0KIAogICAgIC8vIFJlcXVpcmVkIGJ5
IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobS4gS2VlcCB0aGVtIHVuZGVyIGNvbnRyb2wuCi0gICAg
Ym9vbCBpc09ydGhvZ29uYWxDaGlsZChjb25zdCBSZW5kZXJCb3gmKSBjb25zdDsKICAgICBMYXlv
dXRVbml0IGd1dHRlcnNTaXplKGNvbnN0IEdyaWQmLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24s
IHVuc2lnbmVkIHN0YXJ0TGluZSwgdW5zaWduZWQgc3Bhbiwgc3RkOjpvcHRpb25hbDxMYXlvdXRV
bml0PiBhdmFpbGFibGVTaXplKSBjb25zdDsKIAogICAgIFN0eWxlQ29udGVudEFsaWdubWVudERh
dGEgY29udGVudEFsaWdubWVudChHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24pIGNvbnN0OwpAQCAt
MTM2LDggKzEzNSw2IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBncmlkQXJlYUJyZWFkdGhG
b3JDaGlsZEluY2x1ZGluZ0FsaWdubWVudE9mZnNldHMoY29uc3QgUmVuZGVyQm94JiwgR3JpZFRy
YWNrU2l6aW5nRGlyZWN0aW9uKSBjb25zdDsKIAogICAgIHZvaWQgcGFpbnRDaGlsZHJlbihQYWlu
dEluZm8mIGZvclNlbGYsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgUGFpbnRJbmZv
JiBmb3JDaGlsZCwgYm9vbCB1c2VQcmludFJlY3QpIG92ZXJyaWRlOwotICAgIExheW91dFVuaXQg
bWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZChHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24sIGNvbnN0
IFJlbmRlckJveCYpIGNvbnN0OwotICAgIExheW91dFVuaXQgY29tcHV0ZU1hcmdpbkxvZ2ljYWxT
aXplRm9yQ2hpbGQoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uLCBjb25zdCBSZW5kZXJCb3gmKSBj
b25zdDsKICAgICBMYXlvdXRVbml0IGF2YWlsYWJsZUFsaWdubWVudFNwYWNlRm9yQ2hpbGRCZWZv
cmVTdHJldGNoaW5nKExheW91dFVuaXQgZ3JpZEFyZWFCcmVhZHRoRm9yQ2hpbGQsIGNvbnN0IFJl
bmRlckJveCYpIGNvbnN0OwogICAgIFN0eWxlU2VsZkFsaWdubWVudERhdGEganVzdGlmeVNlbGZG
b3JDaGlsZChjb25zdCBSZW5kZXJCb3gmLCBjb25zdCBSZW5kZXJTdHlsZSogPSBudWxscHRyKSBj
b25zdDsKICAgICBTdHlsZVNlbGZBbGlnbm1lbnREYXRhIGFsaWduU2VsZkZvckNoaWxkKGNvbnN0
IFJlbmRlckJveCYsIGNvbnN0IFJlbmRlclN0eWxlKiA9IG51bGxwdHIpIGNvbnN0OwpAQCAtMTY0
LDggKzE2MSw2IEBAIHByaXZhdGU6CiAKICAgICBMYXlvdXRVbml0IHRyYW5zbGF0ZVJUTENvb3Jk
aW5hdGUoTGF5b3V0VW5pdCkgY29uc3Q7CiAKLSAgICBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24g
Zmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiwgR3JpZFRyYWNrU2l6
aW5nRGlyZWN0aW9uKSBjb25zdDsKLQogICAgIEdyaWQgbV9ncmlkOwogCiAgICAgR3JpZFRyYWNr
U2l6aW5nQWxnb3JpdGhtIG1fdHJhY2tTaXppbmdBbGdvcml0aG07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKaW5kZXggNmMwNjI3MWQ3Y2I4YWQzODQ4MGQxYzY1
MjQ2OWJmYTA0Y2Q0NDJlYy4uMDEwYWYxNmY5ZmFlZDAzMTNkZmE0MDZjMmU2MTNmZDEwODhjN2E1
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcApAQCAtMjks
NiArMjksNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkhpdFRl
c3RSZXN1bHQuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCisjaW5jbHVkZSAiTGF5b3V0
U3RhdGUuaCIKICNpbmNsdWRlICJMb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzLmgiCiAjaW5j
bHVkZSAiUGFpbnRJbmZvLmgiCiAjaW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRlZEZsb3cuaCIK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327469</attachid>
            <date>2017-11-22 12:36:03 -0800</date>
            <delta_ts>2017-11-22 15:46:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179633-20171122213602.patch</filename>
            <type>text/plain</type>
            <size>32639</size>
            <attacher name="Javier Fernandez">jfernandez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI0OTExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzUwODVhOWU3ODU3NjZm
N2E0MjEwMDRlYmJmYTcyYWUzNzYwN2UzOS4uYmQ5ZTJjZjcwNWE2YjlkZWVlMTdmOTk0ODFjZTRm
ZTAyMDU0N2M4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE3LTExLTEzICBKYXZp
ZXIgRmVybmFuZGV6ICA8amZlcm5hbmRlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtjc3MtZ3Jp
ZF0gUmVmYWN0b3JpbmcgYW5kIG5ldyBuYW1lc3BhY2Ugd2l0aCBncmlkIHJlbGF0ZWQgdXRpbGl0
eSBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3OTYzMworCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAg
IEFkZGVkIGEgbmV3IG5hbWVzcGFjZSB3aXRoIHNldmVyYWwgdXRpbGl0eSBmdW5jdGlvbnMgdG8g
c2hhcmUgbG9naWMKKyAgICAgICAgYmV0d2VlbiBSZW5kZXJHcmlkIGFuZCBHcmlkVHJhY2tTaXpp
bmdBbGdvcml0aG0uCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBzaW5jZSBubyBuZXcgZnVuY3Rp
b25hbGl0eSBpcyBhZGRlZC4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcvR3Jp
ZExheW91dFV0aWxzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmlkTGF5b3V0VXRp
bHM6OmNvbXB1dGVNYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyaWRMYXlvdXRVdGlsczo6bWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmlkTGF5b3V0VXRpbHM6OmlzT3J0aG9nb25hbENoaWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyaWRMYXlvdXRVdGlsczo6Zmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9HcmlkTGF5b3V0VXRpbHMuaDogQWRkZWQuCisgICAgICAgICogcmVu
ZGVyaW5nL0dyaWRUcmFja1NpemluZ0FsZ29yaXRobS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmlkVHJhY2tTaXppbmdBbGdvcml0aG06OmFzc3VtZWRSb3dzU2l6ZUZvck9ydGhvZ29uYWxDaGls
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmlkVHJhY2tTaXppbmdBbGdvcml0aG1TdHJh
dGVneTo6bG9naWNhbEhlaWdodEZvckNoaWxkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
aWRUcmFja1NpemluZ0FsZ29yaXRobVN0cmF0ZWd5OjptaW5Db250ZW50Rm9yQ2hpbGQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtU3RyYXRlZ3k6Om1h
eENvbnRlbnRGb3JDaGlsZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmlkVHJhY2tTaXpp
bmdBbGdvcml0aG1TdHJhdGVneTo6bWluU2l6ZUZvckNoaWxkIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRlZmluaXRlU2l6ZVN0cmF0ZWd5OjptaW5Mb2dpY2FsV2lkdGhGb3JDaGlsZCBjb25z
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyR3JpZDo6bGF5b3V0QmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3Jp
ZDo6cGxhY2VJdGVtc09uR3JpZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlk
OjpsYXlvdXRQb3NpdGlvbmVkT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6
OmF2YWlsYWJsZUFsaWdubWVudFNwYWNlRm9yQ2hpbGRCZWZvcmVTdHJldGNoaW5nIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmFwcGx5U3RyZXRjaEFsaWdubWVudFRvQ2hp
bGRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjppc0lubGluZUJhc2Vs
aW5lQWxpZ25lZENoaWxkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmZp
cnN0TGluZUJhc2VsaW5lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmNv
bHVtbkF4aXNQb3NpdGlvbkZvckNoaWxkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckdyaWQ6OnJvd0F4aXNQb3NpdGlvbkZvckNoaWxkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckdyaWQ6OmNvbHVtbkF4aXNPZmZzZXRGb3JDaGlsZCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJHcmlkOjpyb3dBeGlzT2Zmc2V0Rm9yQ2hpbGQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6ZmluZENoaWxkTG9naWNhbFBvc2l0aW9uIGNvbnN0KToK
KwogMjAxNy0xMS0xNiAgRnJlZGVyaWMgV2FuZyAgPGZ3YW5nQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgQVNTRVJUSU9OIEZBSUxFRDogIWlzQW5vbnltb3VzKCkgaW4gV2ViQ29yZTo6UmVuZGVyTWF0
aE1MT3BlcmF0b3I6OnVwZGF0ZVRva2VuQ29udGVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBmYzY3Y2Y1
ZDFhYTM0ZTZmOTZmZDQyNTEzYzRiZjYxZGUwZjczMTRiLi43ZTI2YTgyZGUwMjc2YjdkMzlkMzUy
OTk0M2MyMmU0NzhkYzY4OWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTcyOCw2ICsxNzI4LDcgQEAg
cmVuZGVyaW5nL0ZsZXhpYmxlQm94QWxnb3JpdGhtLmNwcAogcmVuZGVyaW5nL0ZpeGVkVGFibGVM
YXlvdXQuY3BwCiByZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmNwcAogcmVuZGVyaW5nL0dyaWQu
Y3BwCityZW5kZXJpbmcvR3JpZExheW91dEZ1bmN0aW9ucy5jcHAKIHJlbmRlcmluZy9HcmlkVHJh
Y2tTaXppbmdBbGdvcml0aG0uY3BwCiByZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmNwcAogcmVu
ZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvR3JpZExheW91dEZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
R3JpZExheW91dEZ1bmN0aW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGUyMzJlNmZjMDMyNTAxZDYyYjE1
MTc5YTIyYTM2ZDY0YzRlZjJhZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9HcmlkTGF5b3V0RnVuY3Rpb25zLmNwcApAQCAtMCwwICsxLDY5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHcmlkTGF5
b3V0RnVuY3Rpb25zLmgiCisKKyNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgR3JpZExheW91dEZ1bmN0aW9ucyB7CisKK0xheW91
dFVuaXQgY29tcHV0ZU1hcmdpbkxvZ2ljYWxTaXplRm9yQ2hpbGQoY29uc3QgUmVuZGVyR3JpZCYg
Z3JpZCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgUmVuZGVyQm94
JiBjaGlsZCkKK3sKKyAgICBpZiAoIWNoaWxkLnN0eWxlKCkuaGFzTWFyZ2luKCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgTGF5b3V0VW5pdCBtYXJnaW5TdGFydDsKKyAgICBMYXlvdXRVbml0
IG1hcmdpbkVuZDsKKyAgICBpZiAoZGlyZWN0aW9uID09IEZvckNvbHVtbnMpCisgICAgICAgIGNo
aWxkLmNvbXB1dGVJbmxpbmVEaXJlY3Rpb25NYXJnaW5zKGdyaWQsIGNoaWxkLmNvbnRhaW5pbmdC
bG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnRJbkZyYWdtZW50KG51bGxwdHIpLCBjaGlsZC5sb2dp
Y2FsV2lkdGgoKSwgbWFyZ2luU3RhcnQsIG1hcmdpbkVuZCk7CisgICAgZWxzZQorICAgICAgICBj
aGlsZC5jb21wdXRlQmxvY2tEaXJlY3Rpb25NYXJnaW5zKGdyaWQsIG1hcmdpblN0YXJ0LCBtYXJn
aW5FbmQpOworCisgICAgcmV0dXJuIG1hcmdpblN0YXJ0ICsgbWFyZ2luRW5kOworfQorCitMYXlv
dXRVbml0IG1hcmdpbkxvZ2ljYWxTaXplRm9yQ2hpbGQoY29uc3QgUmVuZGVyR3JpZCYgZ3JpZCwg
R3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgUmVuZGVyQm94JiBjaGls
ZCkKK3sKKyAgICBpZiAoY2hpbGQubmVlZHNMYXlvdXQoKSkKKyAgICAgICAgcmV0dXJuIGNvbXB1
dGVNYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKGdyaWQsIGRpcmVjdGlvbiwgY2hpbGQpOworICAg
IHJldHVybiBmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChncmlkLCBjaGlsZCwgZGlyZWN0aW9u
KSA9PSBGb3JDb2x1bW5zID8gY2hpbGQubWFyZ2luTG9naWNhbFdpZHRoKCkgOiBjaGlsZC5tYXJn
aW5Mb2dpY2FsSGVpZ2h0KCk7Cit9CisKK2Jvb2wgaXNPcnRob2dvbmFsQ2hpbGQoY29uc3QgUmVu
ZGVyR3JpZCYgZ3JpZCwgY29uc3QgUmVuZGVyQm94JiBjaGlsZCkKK3sKKyAgICByZXR1cm4gY2hp
bGQuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAhPSBncmlkLmlzSG9yaXpvbnRhbFdyaXRpbmdN
b2RlKCk7Cit9CisKK0dyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBmbG93QXdhcmVEaXJlY3Rpb25G
b3JDaGlsZChjb25zdCBSZW5kZXJHcmlkJiBncmlkLCBjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBH
cmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIHJldHVybiAhaXNPcnRo
b2dvbmFsQ2hpbGQoZ3JpZCwgY2hpbGQpID8gZGlyZWN0aW9uIDogKGRpcmVjdGlvbiA9PSBGb3JD
b2x1bW5zID8gRm9yUm93cyA6IEZvckNvbHVtbnMpOworfQorCit9IC8vIG5hbWVzcGFjZSBHcmlk
TGF5b3V0RnVuY3Rpb25zCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9HcmlkTGF5b3V0RnVuY3Rpb25zLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvR3JpZExheW91dEZ1bmN0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ0YTc4ODYx
MTQ5M2Q1YTAyNWYwOTgwM2VlYWYyOTI5YzlkMThiNjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZExheW91dEZ1bmN0aW9ucy5oCkBAIC0wLDAgKzEsNDMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJM
YXlvdXRVbml0LmgiCisjaW5jbHVkZSAiUmVuZGVyR3JpZC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK25hbWVzcGFjZSBHcmlkTGF5b3V0RnVuY3Rpb25zIHsKKworTGF5b3V0VW5pdCBjb21w
dXRlTWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZChjb25zdCBSZW5kZXJHcmlkJiwgR3JpZFRyYWNr
U2l6aW5nRGlyZWN0aW9uLCBjb25zdCBSZW5kZXJCb3gmKTsKK0xheW91dFVuaXQgbWFyZ2luTG9n
aWNhbFNpemVGb3JDaGlsZChjb25zdCBSZW5kZXJHcmlkJiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0
aW9uLCBjb25zdCBSZW5kZXJCb3gmKTsKK2Jvb2wgaXNPcnRob2dvbmFsQ2hpbGQoY29uc3QgUmVu
ZGVyR3JpZCYsIGNvbnN0IFJlbmRlckJveCYpOworR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGZs
b3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKGNvbnN0IFJlbmRlckdyaWQmLCBjb25zdCBSZW5kZXJC
b3gmLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24pOworCit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0dyaWRUcmFja1Np
emluZ0FsZ29yaXRobS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6
aW5nQWxnb3JpdGhtLmNwcAppbmRleCAyOTY5ZWRlNGE3YTdjZTgyMDA5NWU3YzUyY2ZiYjE1NjJh
OGY3ZDc0Li5hYjBlYzllMDdjOTI5MjE2N2U5MmUyOWM0MGI4ZjFlYzY4ODRjNmJjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGht
LmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiR3JpZC5oIgogI2luY2x1ZGUgIkdy
aWRBcmVhLmgiCisjaW5jbHVkZSAiR3JpZExheW91dEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlJl
bmRlckdyaWQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTEwLDMyICsxMTEsMTEgQEAg
c3RhdGljIHZvaWQgc2V0T3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50U2l6ZUZvckNoaWxk
KFJlbmRlckJveCYgY2hpbGQsIEdyaWQKICAgICAgICAgY2hpbGQuc2V0T3ZlcnJpZGVDb250YWlu
aW5nQmxvY2tDb250ZW50TG9naWNhbEhlaWdodChzaXplKTsKIH0KIAotc3RhdGljIEdyaWRUcmFj
a1NpemluZ0RpcmVjdGlvbiBmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChjb25zdCBSZW5kZXJH
cmlkKiBncmlkLCBjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rp
b24gZGlyZWN0aW9uKQotewotICAgIEFTU0VSVChncmlkKTsKLSAgICByZXR1cm4gIWdyaWQtPmlz
T3J0aG9nb25hbENoaWxkKGNoaWxkKSA/IGRpcmVjdGlvbiA6IChkaXJlY3Rpb24gPT0gRm9yQ29s
dW1ucyA/IEZvclJvd3MgOiBGb3JDb2x1bW5zKTsKLX0KLQogc3RhdGljIHN0ZDo6b3B0aW9uYWw8
TGF5b3V0VW5pdD4gb3ZlcnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50U2l6ZUZvckNoaWxkKGNv
bnN0IFJlbmRlckJveCYgY2hpbGQsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24p
CiB7CiAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gY2hpbGQub3ZlcnJpZGVD
b250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoKCkgOiBjaGlsZC5vdmVycmlkZUNvbnRh
aW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCk7CiB9CiAKLXN0YXRpYyBMYXlvdXRVbml0
IGNvbXB1dGVNYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKEdyaWRUcmFja1NpemluZ0RpcmVjdGlv
biBkaXJlY3Rpb24sIGNvbnN0IFJlbmRlckdyaWQmIHJlbmRlckdyaWQsIGNvbnN0IFJlbmRlckJv
eCYgY2hpbGQpCi17Ci0gICAgaWYgKCFjaGlsZC5zdHlsZSgpLmhhc01hcmdpbigpKQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIExheW91dFVuaXQgbWFyZ2luU3RhcnQ7Ci0gICAgTGF5b3V0VW5p
dCBtYXJnaW5FbmQ7Ci0gICAgaWYgKGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zKQotICAgICAgICBj
aGlsZC5jb21wdXRlSW5saW5lRGlyZWN0aW9uTWFyZ2lucyhyZW5kZXJHcmlkLCBjaGlsZC5jb250
YWluaW5nQmxvY2tMb2dpY2FsV2lkdGhGb3JDb250ZW50SW5GcmFnbWVudChudWxscHRyKSwgY2hp
bGQubG9naWNhbFdpZHRoKCksIG1hcmdpblN0YXJ0LCBtYXJnaW5FbmQpOwotICAgIGVsc2UKLSAg
ICAgICAgY2hpbGQuY29tcHV0ZUJsb2NrRGlyZWN0aW9uTWFyZ2lucyhyZW5kZXJHcmlkLCBtYXJn
aW5TdGFydCwgbWFyZ2luRW5kKTsKLQotICAgIHJldHVybiBtYXJnaW5TdGFydCArIG1hcmdpbkVu
ZDsKLX0KLQogLy8gRklYTUU6IHdlIGJvcnJvd2VkIHRoaXMgZnJvbSBSZW5kZXJCbG9jay4gV2Ug
Y2Fubm90IGNhbGwgaXQgZnJvbSBoZXJlIGJlY2F1c2UgaXQncyBwcm90ZWN0ZWQgZm9yIFJlbmRl
ck9iamVjdHMuCiBzdGF0aWMgTGF5b3V0VW5pdCBtYXJnaW5JbnRyaW5zaWNMb2dpY2FsV2lkdGhG
b3JDaGlsZChjb25zdCBSZW5kZXJHcmlkKiByZW5kZXJHcmlkLCBSZW5kZXJCb3gmIGNoaWxkKQog
ewpAQCAtNTY0LDcgKzU0NCw3IEBAIHZvaWQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjpkaXN0
cmlidXRlU3BhY2VUb1RyYWNrcyhWZWN0b3I8R3JpZFRyYWNrKj4mIHRyYWNrCiAKIExheW91dFVu
aXQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtOjphc3N1bWVkUm93c1NpemVGb3JPcnRob2dvbmFs
Q2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9yZW5k
ZXJHcmlkLT5pc09ydGhvZ29uYWxDaGlsZChjaGlsZCkpOworICAgIEFTU0VSVChHcmlkTGF5b3V0
RnVuY3Rpb25zOjppc09ydGhvZ29uYWxDaGlsZCgqbV9yZW5kZXJHcmlkLCBjaGlsZCkpOwogICAg
IGNvbnN0IEdyaWRTcGFuJiBzcGFuID0gbV9ncmlkLmdyaWRJdGVtU3BhbihjaGlsZCwgRm9yUm93
cyk7CiAgICAgTGF5b3V0VW5pdCBncmlkQXJlYVNpemU7CiAgICAgYm9vbCBncmlkQXJlYUlzSW5k
ZWZpbml0ZSA9IGZhbHNlOwpAQCAtNzIyLDcgKzcwMiw3IEBAIHZvaWQgR3JpZFRyYWNrU2l6aW5n
QWxnb3JpdGhtOjpjb21wdXRlR3JpZENvbnRhaW5lckludHJpbnNpY1NpemVzKCkKIC8vIEdyaWRU
cmFja1NpemluZ0FsZ29yaXRobVN0cmF0ZWd5LgogTGF5b3V0VW5pdCBHcmlkVHJhY2tTaXppbmdB
bGdvcml0aG1TdHJhdGVneTo6bG9naWNhbEhlaWdodEZvckNoaWxkKFJlbmRlckJveCYgY2hpbGQp
IGNvbnN0CiB7Ci0gICAgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGNoaWxkQmxvY2tEaXJlY3Rp
b24gPSBmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChyZW5kZXJHcmlkKCksIGNoaWxkLCBGb3JS
b3dzKTsKKyAgICBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gY2hpbGRCbG9ja0RpcmVjdGlvbiA9
IEdyaWRMYXlvdXRGdW5jdGlvbnM6OmZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKCpyZW5kZXJH
cmlkKCksIGNoaWxkLCBGb3JSb3dzKTsKICAgICAvLyBJZiB8Y2hpbGR8IGhhcyBhIHJlbGF0aXZl
IGxvZ2ljYWwgaGVpZ2h0LCB3ZSBzaG91bGRuJ3QgbGV0IGl0IG92ZXJyaWRlIGl0cyBpbnRyaW5z
aWMgaGVpZ2h0LCB3aGljaCBpcwogICAgIC8vIHdoYXQgd2UgYXJlIGludGVyZXN0ZWQgaW4gaGVy
ZS4gVGh1cyB3ZSBuZWVkIHRvIHNldCB0aGUgYmxvY2stYXhpcyBvdmVycmlkZSBzaXplIHRvIC0x
IChubyBwb3NzaWJsZSByZXNvbHV0aW9uKS4KICAgICBpZiAoc2hvdWxkQ2xlYXJPdmVycmlkZUNv
bnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY2hpbGQsIEZvclJvd3MpKSB7CkBAIC03
MzUsMTcgKzcxNSwxNiBAQCBMYXlvdXRVbml0IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobVN0cmF0
ZWd5Ojpsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoUmVuZGVyQm94JiBjaAogICAgICAgICBjaGlsZC5j
bGVhck92ZXJyaWRlTG9naWNhbENvbnRlbnRIZWlnaHQoKTsKIAogICAgIGNoaWxkLmxheW91dElm
TmVlZGVkKCk7Ci0gICAgcmV0dXJuIGNoaWxkLmxvZ2ljYWxIZWlnaHQoKSArIGNoaWxkLm1hcmdp
bkxvZ2ljYWxIZWlnaHQoKTsKKyAgICByZXR1cm4gY2hpbGQubG9naWNhbEhlaWdodCgpICsgR3Jp
ZExheW91dEZ1bmN0aW9uczo6bWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZCgqcmVuZGVyR3JpZCgp
LCBjaGlsZEJsb2NrRGlyZWN0aW9uLCBjaGlsZCk7CiB9CiAKIExheW91dFVuaXQgR3JpZFRyYWNr
U2l6aW5nQWxnb3JpdGhtU3RyYXRlZ3k6Om1pbkNvbnRlbnRGb3JDaGlsZChSZW5kZXJCb3gmIGNo
aWxkKSBjb25zdAogewotICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBjaGlsZElubGluZURp
cmVjdGlvbiA9IGZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKHJlbmRlckdyaWQoKSwgY2hpbGQs
IEZvckNvbHVtbnMpOworICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBjaGlsZElubGluZURp
cmVjdGlvbiA9IEdyaWRMYXlvdXRGdW5jdGlvbnM6OmZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxk
KCpyZW5kZXJHcmlkKCksIGNoaWxkLCBGb3JDb2x1bW5zKTsKICAgICBpZiAoZGlyZWN0aW9uKCkg
PT0gY2hpbGRJbmxpbmVEaXJlY3Rpb24pIHsKICAgICAgICAgLy8gRklYTUU6IEl0J3MgdW5jbGVh
ciBpZiB3ZSBzaG91bGQgcmV0dXJuIHRoZSBpbnRyaW5zaWMgd2lkdGggb3IgdGhlIHByZWZlcnJl
ZCB3aWR0aC4KICAgICAgICAgLy8gU2VlIGh0dHA6Ly9saXN0cy53My5vcmcvQXJjaGl2ZXMvUHVi
bGljL3d3dy1zdHlsZS8yMDEzSmFuLzAyNDUuaHRtbAotICAgICAgICBMYXlvdXRVbml0IG1hcmdp
bkxvZ2ljYWxXaWR0aCA9IGNoaWxkLm5lZWRzTGF5b3V0KCkgPyBjb21wdXRlTWFyZ2luTG9naWNh
bFNpemVGb3JDaGlsZChjaGlsZElubGluZURpcmVjdGlvbiwgKnJlbmRlckdyaWQoKSwgY2hpbGQp
IDogY2hpbGQubWFyZ2luTG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIHJldHVybiBjaGlsZC5taW5Q
cmVmZXJyZWRMb2dpY2FsV2lkdGgoKSArIG1hcmdpbkxvZ2ljYWxXaWR0aDsKKyAgICAgICAgcmV0
dXJuIGNoaWxkLm1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpICsgR3JpZExheW91dEZ1bmN0aW9u
czo6bWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZCgqcmVuZGVyR3JpZCgpLCBjaGlsZElubGluZURp
cmVjdGlvbiwgY2hpbGQpOwogICAgIH0KIAogICAgIGlmICh1cGRhdGVPdmVycmlkZUNvbnRhaW5p
bmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY2hpbGQsIGNoaWxkSW5saW5lRGlyZWN0aW9uKSkK
QEAgLTc1NSwxMiArNzM0LDExIEBAIExheW91dFVuaXQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGht
U3RyYXRlZ3k6Om1pbkNvbnRlbnRGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxkCiAKIExheW91dFVu
aXQgR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtU3RyYXRlZ3k6Om1heENvbnRlbnRGb3JDaGlsZChS
ZW5kZXJCb3gmIGNoaWxkKSBjb25zdAogewotICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBj
aGlsZElubGluZURpcmVjdGlvbiA9IGZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKHJlbmRlckdy
aWQoKSwgY2hpbGQsIEZvckNvbHVtbnMpOworICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBj
aGlsZElubGluZURpcmVjdGlvbiA9IEdyaWRMYXlvdXRGdW5jdGlvbnM6OmZsb3dBd2FyZURpcmVj
dGlvbkZvckNoaWxkKCpyZW5kZXJHcmlkKCksIGNoaWxkLCBGb3JDb2x1bW5zKTsKICAgICBpZiAo
ZGlyZWN0aW9uKCkgPT0gY2hpbGRJbmxpbmVEaXJlY3Rpb24pIHsKICAgICAgICAgLy8gRklYTUU6
IEl0J3MgdW5jbGVhciBpZiB3ZSBzaG91bGQgcmV0dXJuIHRoZSBpbnRyaW5zaWMgd2lkdGggb3Ig
dGhlIHByZWZlcnJlZCB3aWR0aC4KICAgICAgICAgLy8gU2VlIGh0dHA6Ly9saXN0cy53My5vcmcv
QXJjaGl2ZXMvUHVibGljL3d3dy1zdHlsZS8yMDEzSmFuLzAyNDUuaHRtbAotICAgICAgICBMYXlv
dXRVbml0IG1hcmdpbkxvZ2ljYWxXaWR0aCA9IGNoaWxkLm5lZWRzTGF5b3V0KCkgPyBjb21wdXRl
TWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZChjaGlsZElubGluZURpcmVjdGlvbiwgKnJlbmRlckdy
aWQoKSwgY2hpbGQpIDogY2hpbGQubWFyZ2luTG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIHJldHVy
biBjaGlsZC5tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSArIG1hcmdpbkxvZ2ljYWxXaWR0aDsK
KyAgICAgICAgcmV0dXJuIGNoaWxkLm1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpICsgR3JpZExh
eW91dEZ1bmN0aW9uczo6bWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZCgqcmVuZGVyR3JpZCgpLCBj
aGlsZElubGluZURpcmVjdGlvbiwgY2hpbGQpOwogICAgIH0KIAogICAgIGlmICh1cGRhdGVPdmVy
cmlkZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRTaXplRm9yQ2hpbGQoY2hpbGQsIGNoaWxkSW5saW5l
RGlyZWN0aW9uKSkKQEAgLTc3MCw3ICs3NDgsNyBAQCBMYXlvdXRVbml0IEdyaWRUcmFja1Npemlu
Z0FsZ29yaXRobVN0cmF0ZWd5OjptYXhDb250ZW50Rm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZAog
CiBMYXlvdXRVbml0IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobVN0cmF0ZWd5OjptaW5TaXplRm9y
Q2hpbGQoUmVuZGVyQm94JiBjaGlsZCkgY29uc3QKIHsKLSAgICBHcmlkVHJhY2tTaXppbmdEaXJl
Y3Rpb24gY2hpbGRJbmxpbmVEaXJlY3Rpb24gPSBmbG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChy
ZW5kZXJHcmlkKCksIGNoaWxkLCBGb3JDb2x1bW5zKTsKKyAgICBHcmlkVHJhY2tTaXppbmdEaXJl
Y3Rpb24gY2hpbGRJbmxpbmVEaXJlY3Rpb24gPSBHcmlkTGF5b3V0RnVuY3Rpb25zOjpmbG93QXdh
cmVEaXJlY3Rpb25Gb3JDaGlsZCgqcmVuZGVyR3JpZCgpLCBjaGlsZCwgRm9yQ29sdW1ucyk7CiAg
ICAgYm9vbCBpc1Jvd0F4aXMgPSBkaXJlY3Rpb24oKSA9PSBjaGlsZElubGluZURpcmVjdGlvbjsK
ICAgICBjb25zdCBMZW5ndGgmIGNoaWxkTWluU2l6ZSA9IGlzUm93QXhpcyA/IGNoaWxkLnN0eWxl
KCkubG9naWNhbE1pbldpZHRoKCkgOiBjaGlsZC5zdHlsZSgpLmxvZ2ljYWxNaW5IZWlnaHQoKTsK
ICAgICBjb25zdCBMZW5ndGgmIGNoaWxkU2l6ZSA9IGlzUm93QXhpcyA/IGNoaWxkLnN0eWxlKCku
bG9naWNhbFdpZHRoKCkgOiBjaGlsZC5zdHlsZSgpLmxvZ2ljYWxIZWlnaHQoKTsKQEAgLTkxMyw3
ICs4OTEsNyBAQCBwcml2YXRlOgogTGF5b3V0VW5pdCBEZWZpbml0ZVNpemVTdHJhdGVneTo6bWlu
TG9naWNhbFdpZHRoRm9yQ2hpbGQoUmVuZGVyQm94JiBjaGlsZCwgTGVuZ3RoIGNoaWxkTWluU2l6
ZSwgTGF5b3V0VW5pdCBhdmFpbGFibGVTaXplKSBjb25zdAogewogICAgIExheW91dFVuaXQgbWFy
Z2luTG9naWNhbFdpZHRoID0KLSAgICAgICAgY29tcHV0ZU1hcmdpbkxvZ2ljYWxTaXplRm9yQ2hp
bGQoZmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQocmVuZGVyR3JpZCgpLCBjaGlsZCwgRm9yQ29s
dW1ucyksICpyZW5kZXJHcmlkKCksIGNoaWxkKTsKKyAgICAgICAgR3JpZExheW91dEZ1bmN0aW9u
czo6Y29tcHV0ZU1hcmdpbkxvZ2ljYWxTaXplRm9yQ2hpbGQoKnJlbmRlckdyaWQoKSwgRm9yQ29s
dW1ucywgY2hpbGQpOwogICAgIHJldHVybiBjaGlsZC5jb21wdXRlTG9naWNhbFdpZHRoSW5GcmFn
bWVudFVzaW5nKE1pblNpemUsIGNoaWxkTWluU2l6ZSwgYXZhaWxhYmxlU2l6ZSwgKnJlbmRlckdy
aWQoKSwgbnVsbHB0cikgKyBtYXJnaW5Mb2dpY2FsV2lkdGg7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKaW5kZXggYjczNmQ0
YzFkYjI3Y2ZkZTBmOTVjMjFkZTAyOWQ2OGVkMWU2ZWIwNi4uYjJkMmU1OTRkN2E4MGNiNDMzMGI3
ZjY0OGFmZjU0N2JlNzEyZWMwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJJ
bmxpbmVJdGVyYXRvci5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKICNpbmNsdWRlICJJ
bmxpbmVUZXh0Qm94U3R5bGUuaCIKKyNpbmNsdWRlICJMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUg
IkxpbmVMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJSZW5k
ZXJCbG9ja0Zsb3cuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJHcmlkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcAppbmRl
eCA5YTY4MWZiODg1MzM0M2IxMjc1ZWRkZmRkMDZlZDk1Y2UzZTI3N2I2Li43MzJhOWE0ZWFjYmQ5
YjBhZDM2MDViOTBlYzQ4NDA5MjgwMDhkYzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckdyaWQuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyR3JpZC5oIgog
CiAjaW5jbHVkZSAiR3JpZEFyZWEuaCIKKyNpbmNsdWRlICJHcmlkTGF5b3V0RnVuY3Rpb25zLmgi
CiAjaW5jbHVkZSAiR3JpZFBvc2l0aW9uc1Jlc29sdmVyLmgiCiAjaW5jbHVkZSAiR3JpZFRyYWNr
U2l6aW5nQWxnb3JpdGhtLmgiCiAjaW5jbHVkZSAiTGF5b3V0UmVwYWludGVyLmgiCkBAIC0yNDcs
NyArMjQ4LDcgQEAgdm9pZCBSZW5kZXJHcmlkOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hp
bGRyZW4sIExheW91dFVuaXQpCiAgICAgICAgIC8vIHNhbWUgcmVzdWx0IHdoZW4gZ3JpZCdzIGlu
dHJpbnNpYyBzaXplIGlzIGNvbXB1dGVkIGFnYWluIGluIHRoZSB1cGRhdGVMb2dpY2FsV2lkdGgg
Y2FsbCBiZWxsb3cuCiAgICAgICAgIGlmIChzaXplc0xvZ2ljYWxXaWR0aFRvRml0Q29udGVudChN
YXhTaXplKSB8fCBzdHlsZSgpLmxvZ2ljYWxXaWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCkpIHsK
ICAgICAgICAgICAgIGZvciAoYXV0byogY2hpbGQgPSBmaXJzdENoaWxkQm94KCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNo
aWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSB8fCAhaXNPcnRob2dvbmFsQ2hpbGQoKmNoaWxk
KSkKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpIHx8
ICFHcmlkTGF5b3V0RnVuY3Rpb25zOjppc09ydGhvZ29uYWxDaGlsZCgqdGhpcywgKmNoaWxkKSkK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgY2hpbGQtPmNs
ZWFyT3ZlcnJpZGVTaXplKCk7CiAgICAgICAgICAgICAgICAgY2hpbGQtPmNsZWFyQ29udGFpbmlu
Z0Jsb2NrT3ZlcnJpZGVTaXplKCk7CkBAIC00NjcsMTYgKzQ2OCw2IEBAIHN0YXRpYyBzdGQ6Om9w
dGlvbmFsPExheW91dFVuaXQ+IG92ZXJyaWRlQ29udGFpbmluZ0Jsb2NrQ29udGVudFNpemVGb3JD
aGlsZChjb25zCiAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zID8gY2hpbGQub3Zl
cnJpZGVDb250YWluaW5nQmxvY2tDb250ZW50TG9naWNhbFdpZHRoKCkgOiBjaGlsZC5vdmVycmlk
ZUNvbnRhaW5pbmdCbG9ja0NvbnRlbnRMb2dpY2FsSGVpZ2h0KCk7CiB9CiAKLWJvb2wgUmVuZGVy
R3JpZDo6aXNPcnRob2dvbmFsQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCkgY29uc3QKLXsK
LSAgICByZXR1cm4gY2hpbGQuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSAhPSBpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpOwotfQotCi1HcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gUmVuZGVyR3Jp
ZDo6Zmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCwgR3Jp
ZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbikgY29uc3QKLXsKLSAgICByZXR1cm4gIWlz
T3J0aG9nb25hbENoaWxkKGNoaWxkKSA/IGRpcmVjdGlvbiA6IChkaXJlY3Rpb24gPT0gRm9yQ29s
dW1ucyA/IEZvclJvd3MgOiBGb3JDb2x1bW5zKTsKLX0KLQogdW5zaWduZWQgUmVuZGVyR3JpZDo6
Y29tcHV0ZUF1dG9SZXBlYXRUcmFja3NDb3VudChHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGly
ZWN0aW9uLCBzdGQ6Om9wdGlvbmFsPExheW91dFVuaXQ+IGF2YWlsYWJsZVNpemUpIGNvbnN0CiB7
CiAgICAgQVNTRVJUKCFhdmFpbGFibGVTaXplIHx8IGF2YWlsYWJsZVNpemUudmFsdWUoKSAhPSAt
MSk7CkBAIC02MjYsNyArNjE3LDcgQEAgdm9pZCBSZW5kZXJHcmlkOjpwbGFjZUl0ZW1zT25Hcmlk
KEdyaWQmIGdyaWQsIHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4gYXZhaWxhYmwKICAgICAgICAg
aWYgKGdyaWQub3JkZXJJdGVyYXRvcigpLnNob3VsZFNraXBDaGlsZCgqY2hpbGQpKQogICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgaGFzQW55T3J0aG9nb25hbEdyaWRJdGVtID0gaGFz
QW55T3J0aG9nb25hbEdyaWRJdGVtIHx8IGlzT3J0aG9nb25hbENoaWxkKCpjaGlsZCk7CisgICAg
ICAgIGhhc0FueU9ydGhvZ29uYWxHcmlkSXRlbSA9IGhhc0FueU9ydGhvZ29uYWxHcmlkSXRlbSB8
fCBHcmlkTGF5b3V0RnVuY3Rpb25zOjppc09ydGhvZ29uYWxDaGlsZCgqdGhpcywgKmNoaWxkKTsK
IAogICAgICAgICBHcmlkQXJlYSBhcmVhID0gZ3JpZC5ncmlkSXRlbUFyZWEoKmNoaWxkKTsKICAg
ICAgICAgaWYgKCFhcmVhLnJvd3MuaXNJbmRlZmluaXRlKCkpCkBAIC05NjgsNyArOTU5LDcgQEAg
dm9pZCBSZW5kZXJHcmlkOjpsYXlvdXRQb3NpdGlvbmVkT2JqZWN0KFJlbmRlckJveCYgY2hpbGQs
IGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwKICAgICAvLyBGSVhNRTogSWYgcG9zc2libGUgaXQnZCBi
ZSBuaWNlIHRvIGF2b2lkIHRoaXMgbGF5b3V0IGhlcmUgd2hlbiBpdCdzIG5vdCBuZWVkZWQuCiAg
ICAgUmVuZGVyQmxvY2s6OmxheW91dFBvc2l0aW9uZWRPYmplY3QoY2hpbGQsIHJlbGF5b3V0Q2hp
bGRyZW4sIGZpeGVkUG9zaXRpb25PYmplY3RzT25seSk7CiAKLSAgICBib29sIGlzT3J0aG9nb25h
bCA9IGlzT3J0aG9nb25hbENoaWxkKGNoaWxkKTsKKyAgICBib29sIGlzT3J0aG9nb25hbCA9IEdy
aWRMYXlvdXRGdW5jdGlvbnM6OmlzT3J0aG9nb25hbENoaWxkKCp0aGlzLCBjaGlsZCk7CiAgICAg
TGF5b3V0VW5pdCBsb2dpY2FsTGVmdCA9IGNoaWxkLmxvZ2ljYWxMZWZ0KCkgKyAoaXNPcnRob2dv
bmFsID8gcm93T2Zmc2V0IDogY29sdW1uT2Zmc2V0KTsKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxU
b3AgPSBjaGlsZC5sb2dpY2FsVG9wKCkgKyAoaXNPcnRob2dvbmFsID8gY29sdW1uT2Zmc2V0IDog
cm93T2Zmc2V0KTsKICAgICBjaGlsZC5zZXRMb2dpY2FsTG9jYXRpb24oTGF5b3V0UG9pbnQobG9n
aWNhbExlZnQsIGxvZ2ljYWxUb3ApKTsKQEAgLTExNDYsMzMgKzExMzcsMTMgQEAgc3RhdGljIExh
eW91dFVuaXQgY29tcHV0ZU92ZXJmbG93QWxpZ25tZW50T2Zmc2V0KE92ZXJmbG93QWxpZ25tZW50
IG92ZXJmbG93LCBMYXkKICAgICByZXR1cm4gMDsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJHcmlk
OjptYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJl
Y3Rpb24sIGNvbnN0IFJlbmRlckJveCYgY2hpbGQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZsb3dB
d2FyZURpcmVjdGlvbkZvckNoaWxkKGNoaWxkLCBkaXJlY3Rpb24pID09IEZvckNvbHVtbnMgPyBj
aGlsZC5tYXJnaW5Mb2dpY2FsV2lkdGgoKSA6IGNoaWxkLm1hcmdpbkxvZ2ljYWxIZWlnaHQoKTsK
LX0KLQotTGF5b3V0VW5pdCBSZW5kZXJHcmlkOjpjb21wdXRlTWFyZ2luTG9naWNhbFNpemVGb3JD
aGlsZChHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uLCBjb25zdCBSZW5kZXJCb3gm
IGNoaWxkKSBjb25zdAotewotICAgIGlmICghY2hpbGQuc3R5bGUoKS5oYXNNYXJnaW4oKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBMYXlvdXRVbml0IG1hcmdpblN0YXJ0OwotICAgIExheW91
dFVuaXQgbWFyZ2luRW5kOwotICAgIGlmIChkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykKLSAgICAg
ICAgY2hpbGQuY29tcHV0ZUlubGluZURpcmVjdGlvbk1hcmdpbnMoKnRoaXMsIGNoaWxkLmNvbnRh
aW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnRJbkZyYWdtZW50KG51bGxwdHIpLCBjaGls
ZC5sb2dpY2FsV2lkdGgoKSwgbWFyZ2luU3RhcnQsIG1hcmdpbkVuZCk7Ci0gICAgZWxzZQotICAg
ICAgICBjaGlsZC5jb21wdXRlQmxvY2tEaXJlY3Rpb25NYXJnaW5zKCp0aGlzLCBtYXJnaW5TdGFy
dCwgbWFyZ2luRW5kKTsKLQotICAgIHJldHVybiBtYXJnaW5TdGFydCArIG1hcmdpbkVuZDsKLX0K
LQogTGF5b3V0VW5pdCBSZW5kZXJHcmlkOjphdmFpbGFibGVBbGlnbm1lbnRTcGFjZUZvckNoaWxk
QmVmb3JlU3RyZXRjaGluZyhMYXlvdXRVbml0IGdyaWRBcmVhQnJlYWR0aEZvckNoaWxkLCBjb25z
dCBSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAogewogICAgIC8vIEJlY2F1c2Ugd2Ugd2FudCB0byBh
dm9pZCBtdWx0aXBsZSBsYXlvdXRzLCBzdHJldGNoaW5nIGxvZ2ljIG1pZ2h0IGJlIHBlcmZvcm1l
ZCBiZWZvcmUKICAgICAvLyBjaGlsZHJlbiBhcmUgbGFpZCBvdXQsIHNvIHdlIGNhbid0IHVzZSB0
aGUgY2hpbGQgY2FjaGVkIHZhbHVlcy4gSGVuY2UsIHdlIG5lZWQgdG8KICAgICAvLyBjb21wdXRl
IG1hcmdpbnMgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIHRoZSBhdmFpbGFibGUgaGVpZ2h0IGJlZm9y
ZSBzdHJldGNoaW5nLgotICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBjaGlsZEJsb2NrRmxv
d0RpcmVjdGlvbiA9IGZsb3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKGNoaWxkLCBGb3JSb3dzKTsK
LSAgICByZXR1cm4gZ3JpZEFyZWFCcmVhZHRoRm9yQ2hpbGQgLSAoY2hpbGQubmVlZHNMYXlvdXQo
KSA/IGNvbXB1dGVNYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKGNoaWxkQmxvY2tGbG93RGlyZWN0
aW9uLCBjaGlsZCkgOiBtYXJnaW5Mb2dpY2FsU2l6ZUZvckNoaWxkKGNoaWxkQmxvY2tGbG93RGly
ZWN0aW9uLCBjaGlsZCkpOworICAgIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBjaGlsZEJsb2Nr
Rmxvd0RpcmVjdGlvbiA9IEdyaWRMYXlvdXRGdW5jdGlvbnM6OmZsb3dBd2FyZURpcmVjdGlvbkZv
ckNoaWxkKCp0aGlzLCBjaGlsZCwgRm9yUm93cyk7CisgICAgcmV0dXJuIGdyaWRBcmVhQnJlYWR0
aEZvckNoaWxkIC0gR3JpZExheW91dEZ1bmN0aW9uczo6bWFyZ2luTG9naWNhbFNpemVGb3JDaGls
ZCgqdGhpcywgY2hpbGRCbG9ja0Zsb3dEaXJlY3Rpb24sIGNoaWxkKTsKIH0KIAogU3R5bGVTZWxm
QWxpZ25tZW50RGF0YSBSZW5kZXJHcmlkOjphbGlnblNlbGZGb3JDaGlsZChjb25zdCBSZW5kZXJC
b3gmIGNoaWxkLCBjb25zdCBSZW5kZXJTdHlsZSogZ3JpZFN0eWxlKSBjb25zdApAQCAtMTE5OCw3
ICsxMTY5LDcgQEAgdm9pZCBSZW5kZXJHcmlkOjphcHBseVN0cmV0Y2hBbGlnbm1lbnRUb0NoaWxk
SWZOZWVkZWQoUmVuZGVyQm94JiBjaGlsZCkKICAgICAvLyBub3QsIGV2YWx1YXRpbmcgdGhlIGNv
bmRpdGlvbnMgd2hpY2ggbWlnaHQgaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZSBvbGQgdmFsdWVzIHdl
cmUgc2V0LgogICAgIGNoaWxkLmNsZWFyT3ZlcnJpZGVMb2dpY2FsQ29udGVudEhlaWdodCgpOwog
Ci0gICAgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGNoaWxkQmxvY2tEaXJlY3Rpb24gPSBmbG93
QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZChjaGlsZCwgRm9yUm93cyk7CisgICAgR3JpZFRyYWNrU2l6
aW5nRGlyZWN0aW9uIGNoaWxkQmxvY2tEaXJlY3Rpb24gPSBHcmlkTGF5b3V0RnVuY3Rpb25zOjpm
bG93QXdhcmVEaXJlY3Rpb25Gb3JDaGlsZCgqdGhpcywgY2hpbGQsIEZvclJvd3MpOwogICAgIGJv
b2wgYmxvY2tGbG93SXNDb2x1bW5BeGlzID0gY2hpbGRCbG9ja0RpcmVjdGlvbiA9PSBGb3JSb3dz
OwogICAgIGJvb2wgYWxsb3dlZFRvU3RyZXRjaENoaWxkQmxvY2tTaXplID0gYmxvY2tGbG93SXND
b2x1bW5BeGlzID8gYWxsb3dlZFRvU3RyZXRjaENoaWxkQWxvbmdDb2x1bW5BeGlzKGNoaWxkKSA6
IGFsbG93ZWRUb1N0cmV0Y2hDaGlsZEFsb25nUm93QXhpcyhjaGlsZCk7CiAgICAgaWYgKGFsbG93
ZWRUb1N0cmV0Y2hDaGlsZEJsb2NrU2l6ZSkgewpAQCAtMTI4MSw3ICsxMjUyLDcgQEAgc3RhdGlj
IGludCBzeW50aGVzaXplZEJhc2VsaW5lRnJvbUJvcmRlckJveChjb25zdCBSZW5kZXJCb3gmIGJv
eCwgTGluZURpcmVjdGlvbk0KIAogYm9vbCBSZW5kZXJHcmlkOjppc0lubGluZUJhc2VsaW5lQWxp
Z25lZENoaWxkKGNvbnN0IFJlbmRlckJveCYgY2hpbGQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGFs
aWduU2VsZkZvckNoaWxkKGNoaWxkKS5wb3NpdGlvbigpID09IEl0ZW1Qb3NpdGlvbkJhc2VsaW5l
ICYmICFpc09ydGhvZ29uYWxDaGlsZChjaGlsZCkgJiYgIWhhc0F1dG9NYXJnaW5zSW5Db2x1bW5B
eGlzKGNoaWxkKTsKKyAgICByZXR1cm4gYWxpZ25TZWxmRm9yQ2hpbGQoY2hpbGQpLnBvc2l0aW9u
KCkgPT0gSXRlbVBvc2l0aW9uQmFzZWxpbmUgJiYgIUdyaWRMYXlvdXRGdW5jdGlvbnM6OmlzT3J0
aG9nb25hbENoaWxkKCp0aGlzLCBjaGlsZCkgJiYgIWhhc0F1dG9NYXJnaW5zSW5Db2x1bW5BeGlz
KGNoaWxkKTsKIH0KIAogLy8gRklYTUU6IFRoaXMgbG9naWMgaXMgc2hhcmVkIGJ5IFJlbmRlckZs
ZXhpYmxlQm94LCBzbyBpdCBtaWdodCBiZSByZWZhY3RvcmVkIHNvbWVob3cuCkBAIC0xMzIyLDcg
KzEyOTMsNyBAQCBzdGQ6Om9wdGlvbmFsPGludD4gUmVuZGVyR3JpZDo6Zmlyc3RMaW5lQmFzZWxp
bmUoKSBjb25zdAogICAgIGlmICghYmFzZWxpbmVDaGlsZCkKICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKIAotICAgIGF1dG8gYmFzZWxpbmUgPSBpc09ydGhvZ29uYWxDaGlsZCgqYmFzZWxp
bmVDaGlsZCkgPyBzdGQ6Om51bGxvcHQgOiBiYXNlbGluZUNoaWxkLT5maXJzdExpbmVCYXNlbGlu
ZSgpOworICAgIGF1dG8gYmFzZWxpbmUgPSBHcmlkTGF5b3V0RnVuY3Rpb25zOjppc09ydGhvZ29u
YWxDaGlsZCgqdGhpcywgKmJhc2VsaW5lQ2hpbGQpID8gc3RkOjpudWxsb3B0IDogYmFzZWxpbmVD
aGlsZC0+Zmlyc3RMaW5lQmFzZWxpbmUoKTsKICAgICAvLyBXZSB0YWtlIGJvcmRlci1ib3gncyBi
b3R0b20gaWYgbm8gdmFsaWQgYmFzZWxpbmUuCiAgICAgaWYgKCFiYXNlbGluZSkgewogICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIHBhc3MgfGRpcmVjdGlvbnwgaW50byBmaXJzdExpbmVCYXNl
bGluZSBhbmQgc3RvcCBiYWlsaW5nIG91dCBpZiB3ZSdyZSBhIHdyaXRpbmcKQEAgLTEzNTIsNyAr
MTMyMyw3IEBAIEdyaWRBeGlzUG9zaXRpb24gUmVuZGVyR3JpZDo6Y29sdW1uQXhpc1Bvc2l0aW9u
Rm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCkKICAgICAgICAgLy8gRklYTUU6IFNob3Vs
ZCB3ZSBpbXBsZW1lbnQgdGhpcyBsb2dpYyBpbiBhIGdlbmVyaWMgdXRpbGl0eSBmdW5jdGlvbiA/
CiAgICAgICAgIC8vIEFsaWducyB0aGUgYWxpZ25tZW50IHN1YmplY3QgdG8gYmUgZmx1c2ggd2l0
aCB0aGUgZWRnZSBvZiB0aGUgYWxpZ25tZW50IGNvbnRhaW5lcgogICAgICAgICAvLyBjb3JyZXNw
b25kaW5nIHRvIHRoZSBhbGlnbm1lbnQgc3ViamVjdCdzICdzdGFydCcgc2lkZSBpbiB0aGUgY29s
dW1uIGF4aXMuCi0gICAgICAgIGlmIChpc09ydGhvZ29uYWxDaGlsZChjaGlsZCkpIHsKKyAgICAg
ICAgaWYgKEdyaWRMYXlvdXRGdW5jdGlvbnM6OmlzT3J0aG9nb25hbENoaWxkKCp0aGlzLCBjaGls
ZCkpIHsKICAgICAgICAgICAgIC8vIElmIG9ydGhvZ29uYWwgd3JpdGluZy1tb2Rlcywgc2VsZi1z
dGFydCB3aWxsIGJlIGJhc2VkIG9uIHRoZSBjaGlsZCdzIGlubGluZS1heGlzCiAgICAgICAgICAg
ICAvLyBkaXJlY3Rpb24gKGlubGluZS1zdGFydCksIGJlY2F1c2UgaXQncyB0aGUgb25lIHBhcmFs
bGVsIHRvIHRoZSBjb2x1bW4gYXhpcy4KICAgICAgICAgICAgIGlmIChzdHlsZSgpLmlzRmxpcHBl
ZEJsb2Nrc1dyaXRpbmdNb2RlKCkpCkBAIC0xMzY1LDcgKzEzMzYsNyBAQCBHcmlkQXhpc1Bvc2l0
aW9uIFJlbmRlckdyaWQ6OmNvbHVtbkF4aXNQb3NpdGlvbkZvckNoaWxkKGNvbnN0IFJlbmRlckJv
eCYgY2hpbGQpCiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgaW1wbGVtZW50IHRoaXMgbG9n
aWMgaW4gYSBnZW5lcmljIHV0aWxpdHkgZnVuY3Rpb24gPwogICAgICAgICAvLyBBbGlnbnMgdGhl
IGFsaWdubWVudCBzdWJqZWN0IHRvIGJlIGZsdXNoIHdpdGggdGhlIGVkZ2Ugb2YgdGhlIGFsaWdu
bWVudCBjb250YWluZXIKICAgICAgICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgYWxpZ25tZW50
IHN1YmplY3QncyAnZW5kJyBzaWRlIGluIHRoZSBjb2x1bW4gYXhpcy4KLSAgICAgICAgaWYgKGlz
T3J0aG9nb25hbENoaWxkKGNoaWxkKSkgeworICAgICAgICBpZiAoR3JpZExheW91dEZ1bmN0aW9u
czo6aXNPcnRob2dvbmFsQ2hpbGQoKnRoaXMsIGNoaWxkKSkgewogICAgICAgICAgICAgLy8gSWYg
b3J0aG9nb25hbCB3cml0aW5nLW1vZGVzLCBzZWxmLWVuZCB3aWxsIGJlIGJhc2VkIG9uIHRoZSBj
aGlsZCdzIGlubGluZS1heGlzCiAgICAgICAgICAgICAvLyBkaXJlY3Rpb24sIChpbmxpbmUtZW5k
KSBiZWNhdXNlIGl0J3MgdGhlIG9uZSBwYXJhbGxlbCB0byB0aGUgY29sdW1uIGF4aXMuCiAgICAg
ICAgICAgICBpZiAoc3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKQpAQCAtMTQx
Nyw3ICsxMzg4LDcgQEAgR3JpZEF4aXNQb3NpdGlvbiBSZW5kZXJHcmlkOjpyb3dBeGlzUG9zaXRp
b25Gb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkKSBjb24KICAgICAgICAgLy8gRklYTUU6
IFNob3VsZCB3ZSBpbXBsZW1lbnQgdGhpcyBsb2dpYyBpbiBhIGdlbmVyaWMgdXRpbGl0eSBmdW5j
dGlvbiA/CiAgICAgICAgIC8vIEFsaWducyB0aGUgYWxpZ25tZW50IHN1YmplY3QgdG8gYmUgZmx1
c2ggd2l0aCB0aGUgZWRnZSBvZiB0aGUgYWxpZ25tZW50IGNvbnRhaW5lcgogICAgICAgICAvLyBj
b3JyZXNwb25kaW5nIHRvIHRoZSBhbGlnbm1lbnQgc3ViamVjdCdzICdzdGFydCcgc2lkZSBpbiB0
aGUgcm93IGF4aXMuCi0gICAgICAgIGlmIChpc09ydGhvZ29uYWxDaGlsZChjaGlsZCkpIHsKKyAg
ICAgICAgaWYgKEdyaWRMYXlvdXRGdW5jdGlvbnM6OmlzT3J0aG9nb25hbENoaWxkKCp0aGlzLCBj
aGlsZCkpIHsKICAgICAgICAgICAgIC8vIElmIG9ydGhvZ29uYWwgd3JpdGluZy1tb2Rlcywgc2Vs
Zi1zdGFydCB3aWxsIGJlIGJhc2VkIG9uIHRoZSBjaGlsZCdzIGJsb2NrLWF4aXMKICAgICAgICAg
ICAgIC8vIGRpcmVjdGlvbiwgYmVjYXVzZSBpdCdzIHRoZSBvbmUgcGFyYWxsZWwgdG8gdGhlIHJv
dyBheGlzLgogICAgICAgICAgICAgaWYgKGNoaWxkLnN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3Jp
dGluZ01vZGUoKSkKQEAgLTE0MzAsNyArMTQwMSw3IEBAIEdyaWRBeGlzUG9zaXRpb24gUmVuZGVy
R3JpZDo6cm93QXhpc1Bvc2l0aW9uRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiBjaGlsZCkgY29u
CiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgaW1wbGVtZW50IHRoaXMgbG9naWMgaW4gYSBn
ZW5lcmljIHV0aWxpdHkgZnVuY3Rpb24gPwogICAgICAgICAvLyBBbGlnbnMgdGhlIGFsaWdubWVu
dCBzdWJqZWN0IHRvIGJlIGZsdXNoIHdpdGggdGhlIGVkZ2Ugb2YgdGhlIGFsaWdubWVudCBjb250
YWluZXIKICAgICAgICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgYWxpZ25tZW50IHN1YmplY3Qn
cyAnZW5kJyBzaWRlIGluIHRoZSByb3cgYXhpcy4KLSAgICAgICAgaWYgKGlzT3J0aG9nb25hbENo
aWxkKGNoaWxkKSkgeworICAgICAgICBpZiAoR3JpZExheW91dEZ1bmN0aW9uczo6aXNPcnRob2dv
bmFsQ2hpbGQoKnRoaXMsIGNoaWxkKSkgewogICAgICAgICAgICAgLy8gSWYgb3J0aG9nb25hbCB3
cml0aW5nLW1vZGVzLCBzZWxmLWVuZCB3aWxsIGJlIGJhc2VkIG9uIHRoZSBjaGlsZCdzIGJsb2Nr
LWF4aXMKICAgICAgICAgICAgIC8vIGRpcmVjdGlvbiwgYmVjYXVzZSBpdCdzIHRoZSBvbmUgcGFy
YWxsZWwgdG8gdGhlIHJvdyBheGlzLgogICAgICAgICAgICAgaWYgKGNoaWxkLnN0eWxlKCkuaXNG
bGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkKQEAgLTE0OTMsNyArMTQ2NCw3IEBAIExheW91dFVu
aXQgUmVuZGVyR3JpZDo6Y29sdW1uQXhpc09mZnNldEZvckNoaWxkKGNvbnN0IFJlbmRlckJveCYg
Y2hpbGQpIGNvbnN0CiAgICAgICAgIC8vICh0aGlzIGRvZXMgbm90IGhhdmUgdG8gYmUgZG9uZSBm
b3IgdGhlIGxhc3QgdHJhY2sgYXMgdGhlcmUgYXJlIG5vIG1vcmUgbV9yb3dQb3NpdGlvbnMgYWZ0
ZXIgaXQpLgogICAgICAgICBpZiAoY2hpbGRFbmRMaW5lIDwgbV9yb3dQb3NpdGlvbnMuc2l6ZSgp
IC0gMSkKICAgICAgICAgICAgIGVuZE9mUm93IC09IGdyaWRHYXAoRm9yUm93cykgKyBtX29mZnNl
dEJldHdlZW5Sb3dzOwotICAgICAgICBMYXlvdXRVbml0IGNvbHVtbkF4aXNDaGlsZFNpemUgPSBp
c09ydGhvZ29uYWxDaGlsZChjaGlsZCkgPyBjaGlsZC5sb2dpY2FsV2lkdGgoKSArIGNoaWxkLm1h
cmdpbkxvZ2ljYWxXaWR0aCgpIDogY2hpbGQubG9naWNhbEhlaWdodCgpICsgY2hpbGQubWFyZ2lu
TG9naWNhbEhlaWdodCgpOworICAgICAgICBMYXlvdXRVbml0IGNvbHVtbkF4aXNDaGlsZFNpemUg
PSBHcmlkTGF5b3V0RnVuY3Rpb25zOjppc09ydGhvZ29uYWxDaGlsZCgqdGhpcywgY2hpbGQpID8g
Y2hpbGQubG9naWNhbFdpZHRoKCkgKyBjaGlsZC5tYXJnaW5Mb2dpY2FsV2lkdGgoKSA6IGNoaWxk
LmxvZ2ljYWxIZWlnaHQoKSArIGNoaWxkLm1hcmdpbkxvZ2ljYWxIZWlnaHQoKTsKICAgICAgICAg
YXV0byBvdmVyZmxvdyA9IGFsaWduU2VsZkZvckNoaWxkKGNoaWxkKS5vdmVyZmxvdygpOwogICAg
ICAgICBMYXlvdXRVbml0IG9mZnNldEZyb21TdGFydFBvc2l0aW9uID0gY29tcHV0ZU92ZXJmbG93
QWxpZ25tZW50T2Zmc2V0KG92ZXJmbG93LCBlbmRPZlJvdyAtIHN0YXJ0T2ZSb3csIGNvbHVtbkF4
aXNDaGlsZFNpemUpOwogICAgICAgICByZXR1cm4gc3RhcnRQb3NpdGlvbiArIChheGlzUG9zaXRp
b24gPT0gR3JpZEF4aXNFbmQgPyBvZmZzZXRGcm9tU3RhcnRQb3NpdGlvbiA6IG9mZnNldEZyb21T
dGFydFBvc2l0aW9uIC8gMik7CkBAIC0xNTI1LDcgKzE0OTYsNyBAQCBMYXlvdXRVbml0IFJlbmRl
ckdyaWQ6OnJvd0F4aXNPZmZzZXRGb3JDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkKSBjb25z
dAogICAgICAgICAvLyAodGhpcyBkb2VzIG5vdCBoYXZlIHRvIGJlIGRvbmUgZm9yIHRoZSBsYXN0
IHRyYWNrIGFzIHRoZXJlIGFyZSBubyBtb3JlIG1fY29sdW1uUG9zaXRpb25zIGFmdGVyIGl0KS4K
ICAgICAgICAgaWYgKGNoaWxkRW5kTGluZSA8IG1fY29sdW1uUG9zaXRpb25zLnNpemUoKSAtIDEp
CiAgICAgICAgICAgICBlbmRPZkNvbHVtbiAtPSBncmlkR2FwKEZvckNvbHVtbnMpICsgbV9vZmZz
ZXRCZXR3ZWVuQ29sdW1uczsKLSAgICAgICAgTGF5b3V0VW5pdCByb3dBeGlzQ2hpbGRTaXplID0g
aXNPcnRob2dvbmFsQ2hpbGQoY2hpbGQpID8gY2hpbGQubG9naWNhbEhlaWdodCgpICsgY2hpbGQu
bWFyZ2luTG9naWNhbEhlaWdodCgpIDogY2hpbGQubG9naWNhbFdpZHRoKCkgKyBjaGlsZC5tYXJn
aW5Mb2dpY2FsV2lkdGgoKTsKKyAgICAgICAgTGF5b3V0VW5pdCByb3dBeGlzQ2hpbGRTaXplID0g
R3JpZExheW91dEZ1bmN0aW9uczo6aXNPcnRob2dvbmFsQ2hpbGQoKnRoaXMsIGNoaWxkKSA/IGNo
aWxkLmxvZ2ljYWxIZWlnaHQoKSArIGNoaWxkLm1hcmdpbkxvZ2ljYWxIZWlnaHQoKSA6IGNoaWxk
LmxvZ2ljYWxXaWR0aCgpICsgY2hpbGQubWFyZ2luTG9naWNhbFdpZHRoKCk7CiAgICAgICAgIGF1
dG8gb3ZlcmZsb3cgPSBqdXN0aWZ5U2VsZkZvckNoaWxkKGNoaWxkKS5vdmVyZmxvdygpOwogICAg
ICAgICBMYXlvdXRVbml0IG9mZnNldEZyb21TdGFydFBvc2l0aW9uID0gY29tcHV0ZU92ZXJmbG93
QWxpZ25tZW50T2Zmc2V0KG92ZXJmbG93LCBlbmRPZkNvbHVtbiAtIHN0YXJ0T2ZDb2x1bW4sIHJv
d0F4aXNDaGlsZFNpemUpOwogICAgICAgICByZXR1cm4gc3RhcnRQb3NpdGlvbiArIChheGlzUG9z
aXRpb24gPT0gR3JpZEF4aXNFbmQgPyBvZmZzZXRGcm9tU3RhcnRQb3NpdGlvbiA6IG9mZnNldEZy
b21TdGFydFBvc2l0aW9uIC8gMik7CkBAIC0xNjU0LDE4ICsxNjI1LDE5IEBAIExheW91dFBvaW50
IFJlbmRlckdyaWQ6OmZpbmRDaGlsZExvZ2ljYWxQb3NpdGlvbihjb25zdCBSZW5kZXJCb3gmIGNo
aWxkKSBjb25zdAogewogICAgIExheW91dFVuaXQgY29sdW1uQXhpc09mZnNldCA9IGNvbHVtbkF4
aXNPZmZzZXRGb3JDaGlsZChjaGlsZCk7CiAgICAgTGF5b3V0VW5pdCByb3dBeGlzT2Zmc2V0ID0g
cm93QXhpc09mZnNldEZvckNoaWxkKGNoaWxkKTsKKyAgICBib29sIGlzT3J0aG9nb25hbENoaWxk
ID0gR3JpZExheW91dEZ1bmN0aW9uczo6aXNPcnRob2dvbmFsQ2hpbGQoKnRoaXMsIGNoaWxkKTsK
IAogICAgIC8vIFdlIHN0b3JlZCBtX2NvbHVtblBvc2l0aW9ucydzIGRhdGEgaWdub3JpbmcgdGhl
IGRpcmVjdGlvbiwgaGVuY2Ugd2UgbWlnaHQgbmVlZCBub3cKICAgICAvLyB0byB0cmFuc2xhdGUg
cG9zaXRpb25zIGZyb20gUlRMIHRvIExUUiwgYXMgaXQncyBtb3JlIGNvbnZlbmllbnQgZm9yIHBh
aW50aW5nLgogICAgIGlmICghc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAg
ICAgIHJvd0F4aXNPZmZzZXQgPSB0cmFuc2xhdGVSVExDb29yZGluYXRlKHJvd0F4aXNPZmZzZXQp
IC0gKGlzT3J0aG9nb25hbENoaWxkKGNoaWxkKSA/IGNoaWxkLmxvZ2ljYWxIZWlnaHQoKSAgOiBj
aGlsZC5sb2dpY2FsV2lkdGgoKSk7CisgICAgICAgIHJvd0F4aXNPZmZzZXQgPSB0cmFuc2xhdGVS
VExDb29yZGluYXRlKHJvd0F4aXNPZmZzZXQpIC0gKGlzT3J0aG9nb25hbENoaWxkID8gY2hpbGQu
bG9naWNhbEhlaWdodCgpICA6IGNoaWxkLmxvZ2ljYWxXaWR0aCgpKTsKIAogICAgIC8vICJJbiB0
aGUgcG9zaXRpb25pbmcgcGhhc2UgWy4uLl0gY2FsY3VsYXRpb25zIGFyZSBwZXJmb3JtZWQgYWNj
b3JkaW5nIHRvIHRoZSB3cml0aW5nIG1vZGUKICAgICAvLyBvZiB0aGUgY29udGFpbmluZyBibG9j
ayBvZiB0aGUgYm94IGVzdGFibGlzaGluZyB0aGUgb3J0aG9nb25hbCBmbG93LiIgSG93ZXZlciwg
dGhlCiAgICAgLy8gcmVzdWx0aW5nIExheW91dFBvaW50IHdpbGwgYmUgdXNlZCBpbiAnc2V0TG9n
aWNhbFBvc2l0aW9uJyBpbiBvcmRlciB0byBzZXQgdGhlIGNoaWxkJ3MKICAgICAvLyBsb2dpY2Fs
IHBvc2l0aW9uLCB3aGljaCB3aWxsIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIGNoaWxkJ3Mg
d3JpdGluZy1tb2RlLgogICAgIExheW91dFBvaW50IGNoaWxkTG9jYXRpb24ocm93QXhpc09mZnNl
dCwgY29sdW1uQXhpc09mZnNldCk7Ci0gICAgcmV0dXJuIGlzT3J0aG9nb25hbENoaWxkKGNoaWxk
KSA/IGNoaWxkTG9jYXRpb24udHJhbnNwb3NlZFBvaW50KCkgOiBjaGlsZExvY2F0aW9uOworICAg
IHJldHVybiBpc09ydGhvZ29uYWxDaGlsZCA/IGNoaWxkTG9jYXRpb24udHJhbnNwb3NlZFBvaW50
KCkgOiBjaGlsZExvY2F0aW9uOwogfQogCiB1bnNpZ25lZCBSZW5kZXJHcmlkOjpudW1UcmFja3Mo
R3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgY29uc3QgR3JpZCYgZ3JpZCkgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCmluZGV4IDZjYWFmZmEyNzhlOWI4
YjllMmFhNWRkNjNjNWVhOTNkYWU5YjY3YTIuLjkzNjY2ZmY2YWIwMWNmOWU1NzZhMDI5Mzk3NmZl
YTg0YjY0MDNjZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJH
cmlkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuaApAQCAtNjMs
NyArNjMsNiBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgYXV0b1JlcGVhdENvdW50Rm9yRGlyZWN0
aW9uKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0IHsgcmV0dXJuIG1f
Z3JpZC5hdXRvUmVwZWF0VHJhY2tzKGRpcmVjdGlvbik7IH0KIAogICAgIC8vIFJlcXVpcmVkIGJ5
IEdyaWRUcmFja1NpemluZ0FsZ29yaXRobS4gS2VlcCB0aGVtIHVuZGVyIGNvbnRyb2wuCi0gICAg
Ym9vbCBpc09ydGhvZ29uYWxDaGlsZChjb25zdCBSZW5kZXJCb3gmKSBjb25zdDsKICAgICBMYXlv
dXRVbml0IGd1dHRlcnNTaXplKGNvbnN0IEdyaWQmLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24s
IHVuc2lnbmVkIHN0YXJ0TGluZSwgdW5zaWduZWQgc3Bhbiwgc3RkOjpvcHRpb25hbDxMYXlvdXRV
bml0PiBhdmFpbGFibGVTaXplKSBjb25zdDsKIAogICAgIFN0eWxlQ29udGVudEFsaWdubWVudERh
dGEgY29udGVudEFsaWdubWVudChHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24pIGNvbnN0OwpAQCAt
MTM2LDggKzEzNSw2IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBncmlkQXJlYUJyZWFkdGhG
b3JDaGlsZEluY2x1ZGluZ0FsaWdubWVudE9mZnNldHMoY29uc3QgUmVuZGVyQm94JiwgR3JpZFRy
YWNrU2l6aW5nRGlyZWN0aW9uKSBjb25zdDsKIAogICAgIHZvaWQgcGFpbnRDaGlsZHJlbihQYWlu
dEluZm8mIGZvclNlbGYsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgUGFpbnRJbmZv
JiBmb3JDaGlsZCwgYm9vbCB1c2VQcmludFJlY3QpIG92ZXJyaWRlOwotICAgIExheW91dFVuaXQg
bWFyZ2luTG9naWNhbFNpemVGb3JDaGlsZChHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24sIGNvbnN0
IFJlbmRlckJveCYpIGNvbnN0OwotICAgIExheW91dFVuaXQgY29tcHV0ZU1hcmdpbkxvZ2ljYWxT
aXplRm9yQ2hpbGQoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uLCBjb25zdCBSZW5kZXJCb3gmKSBj
b25zdDsKICAgICBMYXlvdXRVbml0IGF2YWlsYWJsZUFsaWdubWVudFNwYWNlRm9yQ2hpbGRCZWZv
cmVTdHJldGNoaW5nKExheW91dFVuaXQgZ3JpZEFyZWFCcmVhZHRoRm9yQ2hpbGQsIGNvbnN0IFJl
bmRlckJveCYpIGNvbnN0OwogICAgIFN0eWxlU2VsZkFsaWdubWVudERhdGEganVzdGlmeVNlbGZG
b3JDaGlsZChjb25zdCBSZW5kZXJCb3gmLCBjb25zdCBSZW5kZXJTdHlsZSogPSBudWxscHRyKSBj
b25zdDsKICAgICBTdHlsZVNlbGZBbGlnbm1lbnREYXRhIGFsaWduU2VsZkZvckNoaWxkKGNvbnN0
IFJlbmRlckJveCYsIGNvbnN0IFJlbmRlclN0eWxlKiA9IG51bGxwdHIpIGNvbnN0OwpAQCAtMTY0
LDggKzE2MSw2IEBAIHByaXZhdGU6CiAKICAgICBMYXlvdXRVbml0IHRyYW5zbGF0ZVJUTENvb3Jk
aW5hdGUoTGF5b3V0VW5pdCkgY29uc3Q7CiAKLSAgICBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24g
Zmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiwgR3JpZFRyYWNrU2l6
aW5nRGlyZWN0aW9uKSBjb25zdDsKLQogICAgIEdyaWQgbV9ncmlkOwogCiAgICAgR3JpZFRyYWNr
U2l6aW5nQWxnb3JpdGhtIG1fdHJhY2tTaXppbmdBbGdvcml0aG07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWFDb250cm9scy5jcHAKaW5kZXggMTg0YWM2ZDNhMDE2
ZDgxNDc4ODE2MGUwOTMzYzViYzNiMWZiZGM4Yy4uMmQ2ODJmOTdmMjIzYjc0NTkzNTRjYjlhMDI3
NzFhNWQzOTEwN2EyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck1lZGlhQ29udHJvbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
ZWRpYUNvbnRyb2xzLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKFZJREVPKSAm
JiBQTEFURk9STShXSU4pICYmIFVTRShDRykKIAorI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1l
bnRUeXBlcy5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBo
aWNzL0NvcmVHcmFwaGljcy5oPgogI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJL
aXRTeXN0ZW1JbnRlcmZhY2UuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9Sb290SW5saW5lQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5l
Qm94LmNwcAppbmRleCA2YzA2MjcxZDdjYjhhZDM4NDgwZDFjNjUyNDY5YmZhMDRjZDQ0MmVjLi4w
MTBhZjE2ZjlmYWVkMDMxM2RmYTQwNmMyZTYxM2ZkMTA4OGM3YTViIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1
ZGUgIklubGluZVRleHRCb3guaCIKKyNpbmNsdWRlICJMYXlvdXRTdGF0ZS5oIgogI2luY2x1ZGUg
IkxvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMuaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIK
ICNpbmNsdWRlICJSZW5kZXJGcmFnbWVudGVkRmxvdy5oIgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>