<?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>41716</bug_id>
          
          <creation_ts>2010-07-06 15:02:11 -0700</creation_ts>
          <short_desc>Factor HTMLConstructionSite out of HTMLTreeBuilder</short_desc>
          <delta_ts>2010-07-06 15:51:29 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>41123</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>247212</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-06 15:02:11 -0700</bug_when>
    <thetext>Factor HTMLConstructionSite out of HTMLTreeBuilder</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247213</commentid>
    <comment_count>1</comment_count>
      <attachid>60655</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-06 15:03:59 -0700</bug_when>
    <thetext>Created attachment 60655
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247220</commentid>
    <comment_count>2</comment_count>
      <attachid>60655</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-07-06 15:34:50 -0700</bug_when>
    <thetext>Comment on attachment 60655
Patch

WebCore/html/HTMLTreeBuilder.h: 
 +      // FIXME: FragmentScriptingPermission is a HACK for platform/Pasteboard.
I recommend leaving this code and FIXME in  the TreeBuilder.  It exists to support the legacy treebuilder usage and can be removed from the base class when we either factor our the legacy shim, or remove the legacy shim entirely.

WebCore/html/HTMLTreeBuilder.h:113
 +      // FIXME: FragmentScriptingPermission is a HACK for platform/Pasteboard.
This FIXME doesn&apos;t apply to this usage, only to the old usage for the legacy shim, since the legacy shim was emulating hackish behavior of the old tokenizer.

WebCore/html/HTMLTreeBuilder.h:110
 +      mutable HTMLElementStack m_openElements;
Confused why these are mutable?

WebCore/html/HTMLTreeBuilder.h:91
 +      PassRefPtr&lt;ChildType&gt; attach(Node* parent, PassRefPtr&lt;ChildType&gt; prpChild)
This doesn&apos;t need to be in the header since its only used from this class.

WebCore/html/HTMLTreeBuilder.h:86
 +      // FIXME: Remove this method.  It exists only to service the legacy tree builder.
I think we should leave this hack on the TreeBuilder instead of moving it here.  HTMLContructionSite has valid reasons to know the m_fragmentScriptingPermission.  The FIXME from before was about the shim needing to do hacky things.

WebCore/html/HTMLTreeBuilder.h:84
 +      void setForm(Element* form) { m_form = form; }
PassRefPtr&lt;Element&gt;?

WebCore/html/HTMLTreeBuilder.h:82
 +      PassRefPtr&lt;Element&gt; releaseForm() { return m_form.release(); }
We&apos;re inconsistent about take vs. release.

WebCore/html/HTMLTreeBuilder.cpp:2313
 +  void HTMLTreeBuilder::generateImpliedEndTags()
Seems this should move onto the site, no?

WebCore/html/HTMLTreeBuilder.cpp:2307
 +  void HTMLTreeBuilder::generateImpliedEndTagsWithExclusion(const AtomicString&amp; tagName)
Seems this should move onto site, no?

WebCore/html/HTMLTreeBuilder.cpp:@
 +  void HTMLTreeBuilder::reconstructTheActiveFormattingElements()
Seems this belongs on the site as well.

WebCore/html/HTMLTreeBuilder.cpp:2257
 +  bool HTMLTreeBuilder::indexOfFirstUnopenFormattingElement(unsigned&amp; firstUnopenElementIndex) const
And this...

WebCore/html/HTMLTreeBuilder.cpp:1784
 +              ASSERT(m_site.currentElement()-&gt;tagQName() == noscriptTag);
These shoudl be hasTagName(...)

Please consider the above comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247228</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-06 15:51:29 -0700</bug_when>
    <thetext>Committed r62599: &lt;http://trac.webkit.org/changeset/62599&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60655</attachid>
            <date>2010-07-06 15:03:59 -0700</date>
            <delta_ts>2010-07-06 15:34:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-41716-20100706150358.patch</filename>
            <type>text/plain</type>
            <size>82021</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MzhlMGJkNzk4YTM2OGQ2NzNlMGQ3ODUzYmE2Yzc0YmE0MDMyY2ZhZC4uZDIxNDI4MDVhOTdkODY5
OTI2ZmYxYjJlMjg5YTNmMGEyMDAyZjdlYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSw4NCBAQAogMjAxMC0wNy0wNiAgQWRh
bSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEZhY3RvciBIVE1MQ29uc3RydWN0aW9uU2l0ZSBvdXQgb2Yg
SFRNTFRyZWVCdWlsZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00MTcxNgorCisgICAgICAgIFRoZSBIVE1MQ29udHJ1Y3Rpb25TaXRlIGlzIHRoZSBt
b2RlbCBvYmplY3Qgb24gd2hpY2ggdGhlCisgICAgICAgIEhUTUxUcmVlQnVpbGRlciAoYSBjb250
cm9sbGVyKSBhY3RzLgorCisgICAgICAgIE5vIGJlaGF2aW9yIGNoYW5nZS4gIEknbGwgbW92ZSB0
aGlzIGNsYXNzIGludG8gaXRzIG93biBmaWxlIGluIGEKKyAgICAgICAgZm9sbG93dXAgcGF0Y2gu
CisKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OmF0KToKKyAgICAgICAgKiBodG1s
L0hUTUxUcmVlQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6
OkhUTUxUcmVlQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0
ZTo6SFRNTENvbnN0cnVjdGlvblNpdGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWls
ZGVyOjpwYXNzVG9rZW5Ub0xlZ2FjeVBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NEb2N0eXBlVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENv
bnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1MKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjptZXJnZUF0dHJpYnV0ZXNGcm9tVG9r
ZW5JbnRvRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6
aW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0luQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29u
c3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEJvZHlTdGFydFRhZ0luQm9keSk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluU2NvcGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzSXNpbmRleFN0YXJ0VGFn
Rm9ySW5Cb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0
YXJ0VGFnRm9ySW5Cb2R5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc0NvbGdyb3VwRW5kVGFnRm9ySW5Db2x1bW5Hcm91cCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MVHJlZUJ1aWxkZXI6OmNsb3NlVGhlQ2VsbCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluVGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzQm9keUVuZFRhZ0ZvckluQm9keSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NBbnlPdGhlckVuZFRhZ0ZvckluQm9keSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmZ1cnRoZXN0QmxvY2tGb3JGb3JtYXR0
aW5nRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OmZpbmRGb3N0
ZXJQYXJlbnRGb3IpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpjYWxsVGhl
QWRvcHRpb25BZ2VuY3kpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpyZXNl
dEluc2VydGlvbk1vZGVBcHByb3ByaWF0ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVl
QnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluQm9keSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
VHJlZUJ1aWxkZXI6OnByb2Nlc3NDYXB0aW9uRW5kVGFnRm9ySW5DYXB0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1RyRW5kVGFnRm9ySW5Sb3cpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5UYWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ29tbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDaGFyYWN0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kT2ZGaWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0RlZmF1bHRGb3JCZWZvcmVIVE1MTW9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0Zvcklu
SGVhZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0RG9j
dHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Q29t
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0Q29t
bWVudE9uRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6
Omluc2VydENvbW1lbnRPbkhUTUxIdG1sRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRlRWxlbWVudEFuZEF0dGFjaFRvQ3VycmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEh0bWxFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MSGVh
ZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2Vy
dEhUTUxCb2R5RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0
ZTo6aW5zZXJ0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0
ZTo6aW5zZXJ0U2VsZkNsb3NpbmdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25z
dHJ1Y3Rpb25TaXRlOjppbnNlcnRGb3JtYXR0aW5nRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NHZW5lcmljUkNEQVRBU3RhcnRUYWcpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzR2VuZXJpY1Jhd1RleHRTdGFydFRh
Zyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0U2NyaXB0
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTY3Jp
cHRTdGFydFRhZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5z
ZXJ0VGV4dE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6OmNy
ZWF0ZUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjppbmRleE9m
Rmlyc3RVbm9wZW5Gb3JtYXR0aW5nRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJl
ZUJ1aWxkZXI6OnJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6Z2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhF
eGNsdXNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVyOjpnZW5lcmF0ZUlt
cGxpZWRFbmRUYWdzKToKKyAgICAgICAgKiBodG1sL0hUTUxUcmVlQnVpbGRlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6OmN1cnJlbnRFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpvcGVuRWxlbWVudHMpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6OmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aGVhZCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Zm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6cmVsZWFzZUZvcm0pOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6OnNldEZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TENvbnN0cnVjdGlvblNpdGU6OmZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbik6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6YXR0YWNoKToKKworMjAxMC0wNy0wNiAg
QWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgorCiAgICAgICAgIFVucmV2aWV3ZWQuCiAK
ICAgICAgICAgTWFrZSB0aGUgcmVtYWluaW5nIGluc2VydGlvbiBtb2RlcyBleHBsaWNpdC4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0LmggYi9XZWJD
b3JlL2h0bWwvSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdC5oCmluZGV4IGE2M2NjZWExM2ZkNzlh
YWZhNGU0MWRlODE1NDg0YmY3YTA5NzU3M2QuLmFjNzVjYzM2MmFmOTYxZGM2MjMzNmMxYjFjOWVi
ZWUwMjk4YWRjNTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybWF0dGluZ0VsZW1l
bnRMaXN0LmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuaApA
QCAtMTAyLDggKzEwMiw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZE1hcmtlcigpOwogICAg
IHZvaWQgY2xlYXJUb0xhc3RNYXJrZXIoKTsKIAotICAgIGNvbnN0IEVudHJ5JiBvcGVyYXRvcltd
KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX2VudHJpZXNbaV07IH0KLSAgICBFbnRyeSYgb3Bl
cmF0b3JbXShzaXplX3QgaSkgeyByZXR1cm4gbV9lbnRyaWVzW2ldOyB9CisgICAgY29uc3QgRW50
cnkmIGF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX2VudHJpZXNbaV07IH0KKyAgICBFbnRy
eSYgYXQoc2l6ZV90IGkpIHsgcmV0dXJuIG1fZW50cmllc1tpXTsgfQogCiBwcml2YXRlOgogICAg
IFZlY3RvcjxFbnRyeT4gbV9lbnRyaWVzOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxU
cmVlQnVpbGRlci5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWlsZGVyLmNwcAppbmRleCBl
MTM2YjNjNzFiNGRkYWQ5OGZhODhiNDUxODYyNzBhMDc5NWY5ODA3Li42NzNkNzFlOGQyNzAwMmVi
YTk1Y2QzODMwNjQyMzYxZmRlYjBmYTZjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTFRy
ZWVCdWlsZGVyLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTFRyZWVCdWlsZGVyLmNwcApAQCAt
MjA3LDYgKzIwNyw3IEBAIGJvb2wgaXNQaHJhc2luZ1RhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRh
Z05hbWUpCiBIVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRlcihIVE1MVG9rZW5pemVyKiB0
b2tlbml6ZXIsIEhUTUxEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgcmVwb3J0RXJyb3JzKQogICAg
IDogbV9mcmFtZXNldE9rKHRydWUpCiAgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQorICAgICwg
bV9zaXRlKGRvY3VtZW50LCBGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpCiAgICAgLCBtX3JlcG9y
dEVycm9ycyhyZXBvcnRFcnJvcnMpCiAgICAgLCBtX2lzUGF1c2VkKGZhbHNlKQogICAgICwgbV9p
bnNlcnRpb25Nb2RlKEluaXRpYWxNb2RlKQpAQCAtMjE2LDcgKzIxNyw2IEBAIEhUTUxUcmVlQnVp
bGRlcjo6SFRNTFRyZWVCdWlsZGVyKEhUTUxUb2tlbml6ZXIqIHRva2VuaXplciwgSFRNTERvY3Vt
ZW50KiBkb2N1bWVuCiAgICAgLCBtX2xlZ2FjeVRyZWVCdWlsZGVyKHNob3VsZFVzZUxlZ2FjeVRy
ZWVCdWlsZGVyKGRvY3VtZW50KSA/IG5ldyBMZWdhY3lIVE1MVHJlZUJ1aWxkZXIoZG9jdW1lbnQs
IHJlcG9ydEVycm9ycykgOiAwKQogICAgICwgbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0TGluZSh1
bmluaXRpYWxpemVkTGluZU51bWJlclZhbHVlKQogICAgICwgbV9zY3JpcHRUb1Byb2Nlc3NTdGFy
dExpbmUodW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZSkKLSAgICAsIG1fZnJhZ21lbnRTY3Jp
cHRpbmdQZXJtaXNzaW9uKEZyYWdtZW50U2NyaXB0aW5nQWxsb3dlZCkKICAgICAsIG1faXNQYXJz
aW5nRnJhZ21lbnQoZmFsc2UpCiB7CiB9CkBAIC0yMjYsNiArMjI2LDcgQEAgSFRNTFRyZWVCdWls
ZGVyOjpIVE1MVHJlZUJ1aWxkZXIoSFRNTFRva2VuaXplciogdG9rZW5pemVyLCBIVE1MRG9jdW1l
bnQqIGRvY3VtZW4KIEhUTUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKEhUTUxUb2tlbml6
ZXIqIHRva2VuaXplciwgRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEZyYWdtZW50U2NyaXB0
aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQogICAgIDogbV9mcmFtZXNldE9rKHRy
dWUpCiAgICAgLCBtX2RvY3VtZW50KGZyYWdtZW50LT5kb2N1bWVudCgpKQorICAgICwgbV9zaXRl
KGZyYWdtZW50LT5kb2N1bWVudCgpLCBzY3JpcHRpbmdQZXJtaXNzaW9uKQogICAgICwgbV9yZXBv
cnRFcnJvcnMoZmFsc2UpIC8vIEZJWE1FOiBXaHkgbm90IHJlcG9ydCBlcnJvcnMgaW4gZnJhZ21l
bnRzPwogICAgICwgbV9pc1BhdXNlZChmYWxzZSkKICAgICAsIG1faW5zZXJ0aW9uTW9kZShJbml0
aWFsTW9kZSkKQEAgLTIzNSwxMSArMjM2LDE2IEBAIEhUTUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVC
dWlsZGVyKEhUTUxUb2tlbml6ZXIqIHRva2VuaXplciwgRG9jdW1lbnRGcmFnbWVudCogZnJhCiAg
ICAgLCBtX2xlZ2FjeVRyZWVCdWlsZGVyKG5ldyBMZWdhY3lIVE1MVHJlZUJ1aWxkZXIoZnJhZ21l
bnQsIHNjcmlwdGluZ1Blcm1pc3Npb24pKQogICAgICwgbV9sYXN0U2NyaXB0RWxlbWVudFN0YXJ0
TGluZSh1bmluaXRpYWxpemVkTGluZU51bWJlclZhbHVlKQogICAgICwgbV9zY3JpcHRUb1Byb2Nl
c3NTdGFydExpbmUodW5pbml0aWFsaXplZExpbmVOdW1iZXJWYWx1ZSkKLSAgICAsIG1fZnJhZ21l
bnRTY3JpcHRpbmdQZXJtaXNzaW9uKHNjcmlwdGluZ1Blcm1pc3Npb24pCiAgICAgLCBtX2lzUGFy
c2luZ0ZyYWdtZW50KHRydWUpCiB7CiB9CiAKK0hUTUxDb25zdHJ1Y3Rpb25TaXRlOjpIVE1MQ29u
c3RydWN0aW9uU2l0ZShEb2N1bWVudCogZG9jdW1lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlz
c2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQorICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKKyAg
ICAsIG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKHNjcmlwdGluZ1Blcm1pc3Npb24pCit7
Cit9CisKIEhUTUxUcmVlQnVpbGRlcjo6fkhUTUxUcmVlQnVpbGRlcigpCiB7CiB9CkBAIC0zNTks
NyArMzY1LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnBhc3NUb2tlblRvTGVnYWN5UGFyc2Vy
KEhUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIGlmIChvbGRTdHlsZVRva2VuLnRhZ05hbWUgPT0g
c2NyaXB0VGFnKSB7CiAgICAgICAgICAgICBpZiAobV9sYXN0U2NyaXB0RWxlbWVudCkgewogICAg
ICAgICAgICAgICAgIEFTU0VSVChtX2xhc3RTY3JpcHRFbGVtZW50U3RhcnRMaW5lICE9IHVuaW5p
dGlhbGl6ZWRMaW5lTnVtYmVyVmFsdWUpOwotICAgICAgICAgICAgICAgIGlmIChtX2ZyYWdtZW50
U2NyaXB0aW5nUGVybWlzc2lvbiA9PSBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQpIHsKKyAg
ICAgICAgICAgICAgICBpZiAobV9zaXRlLmZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbigpID09
IEZyYWdtZW50U2NyaXB0aW5nTm90QWxsb3dlZCkgewogICAgICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogVGhpcyBpcyBhIGhvcnJpYmxlIGhhY2sgZm9yIHBsYXRmb3JtL1Bhc3RlYm9hcmQuCiAg
ICAgICAgICAgICAgICAgICAgIC8vIENsZWFyIHRoZSA8c2NyaXB0PiB0YWcgd2hlbiB1c2luZyB0
aGUgUGFyc2VyIHRvIGNyZWF0ZQogICAgICAgICAgICAgICAgICAgICAvLyBhIERvY3VtZW50RnJh
Z21lbnQgZm9yIHBhc3Rpbmcgc28gdGhhdCBqYXZhc2NyaXB0IGNvbnRlbnQKQEAgLTQxNywyMCAr
NDIzLDIwIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRG9jdHlwZVRva2VuKEF0b21p
Y0hUTUxUb2tlbiYgdG9rZW4pCiB7CiAgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9r
ZW46OkRPQ1RZUEUpOwogICAgIGlmIChpbnNlcnRpb25Nb2RlKCkgPT0gSW5pdGlhbE1vZGUpIHsK
LSAgICAgICAgaW5zZXJ0RG9jdHlwZSh0b2tlbik7CisgICAgICAgIG1fc2l0ZS5pbnNlcnREb2N0
eXBlKHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBwYXJzZUVycm9yKHRva2Vu
KTsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6Omluc2VydEhUTUxTdGFydFRhZ0JlZm9yZUhU
TUwoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omlu
c2VydEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1MKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7
CiAgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBIVE1MSHRtbEVsZW1lbnQ6OmNyZWF0ZSht
X2RvY3VtZW50KTsKICAgICBlbGVtZW50LT5zZXRBdHRyaWJ1dGVNYXAodG9rZW4udGFrZUF0cmli
dXRlcygpLCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbik7CiAgICAgbV9vcGVuRWxlbWVu
dHMucHVzaEhUTUxIdG1sRWxlbWVudChhdHRhY2gobV9kb2N1bWVudCwgZWxlbWVudC5yZWxlYXNl
KCkpKTsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6Om1lcmdlQXR0cmlidXRlc0Zyb21Ub2tl
bkludG9FbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4sIEVsZW1lbnQqIGVsZW1lbnQpCit2
b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjptZXJnZUF0dHJpYnV0ZXNGcm9tVG9rZW5JbnRvRWxl
bWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuLCBFbGVtZW50KiBlbGVtZW50KQogewogICAgIGlm
ICghdG9rZW4uYXR0cmlidXRlcygpKQogICAgICAgICByZXR1cm47CkBAIC00NDMsMTIgKzQ0OSwx
OSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6bWVyZ2VBdHRyaWJ1dGVzRnJvbVRva2VuSW50b0Vs
ZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbgogICAgIH0KIH0KIAotdm9pZCBIVE1MVHJlZUJ1
aWxkZXI6Omluc2VydEhUTUxTdGFydFRhZ0luQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQor
dm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0luQm9keShB
dG9taWNIVE1MVG9rZW4mIHRva2VuKQogewotICAgIHBhcnNlRXJyb3IodG9rZW4pOworICAgIC8v
IEZJWE1FOiBwYXJzZSBlcnJvcgogICAgIG1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbkludG9FbGVt
ZW50KHRva2VuLCBtX29wZW5FbGVtZW50cy5odG1sRWxlbWVudCgpKTsKIH0KIAordm9pZCBIVE1M
Q29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEJvZHlTdGFydFRhZ0luQm9keShBdG9taWNIVE1M
VG9rZW4mIHRva2VuKQoreworICAgIC8vIEZJWE1FOiBwYXJzZSBlcnJvcgorICAgIG5vdEltcGxl
bWVudGVkKCk7IC8vIGZyYWdtZW50IGNhc2UKKyAgICBtZXJnZUF0dHJpYnV0ZXNGcm9tVG9rZW5J
bnRvRWxlbWVudCh0b2tlbiwgbV9vcGVuRWxlbWVudHMuYm9keUVsZW1lbnQoKSk7Cit9CisKIHZv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRmFrZVN0YXJ0VGFnKGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIFBhc3NSZWZQdHI8TmFtZWROb2RlTWFwPiBhdHRyaWJ1dGVzKQogewogICAg
IC8vIEZJWE1FOiBXZSdsbCBuZWVkIGEgZmFuY2llciBjb252ZXJzaW9uIHRoYW4ganVzdCAibG9j
YWxOYW1lIiBmb3IgU1ZHL01hdGhNTCB0YWdzLgpAQCAtNDcxLDcgKzQ4NCw3IEBAIHZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzRmFrZUNoYXJhY3RlcnMoY29uc3QgU3RyaW5nJiBjaGFyYWN0
ZXJzKQogCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Zha2VQRW5kVGFnSWZQSW5TY29w
ZSgpCiB7Ci0gICAgaWYgKCFtX29wZW5FbGVtZW50cy5pblNjb3BlKHBUYWcubG9jYWxOYW1lKCkp
KQorICAgIGlmICghbV9zaXRlLm9wZW5FbGVtZW50cygpLT5pblNjb3BlKHBUYWcubG9jYWxOYW1l
KCkpKQogICAgICAgICByZXR1cm47CiAgICAgQXRvbWljSFRNTFRva2VuIGVuZFAoSFRNTFRva2Vu
OjpFbmRUYWcsIHBUYWcubG9jYWxOYW1lKCkpOwogICAgIHByb2Nlc3NFbmRUYWcoZW5kUCk7CkBA
IC00OTgsMTQgKzUxMSwxNCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0lzaW5kZXhT
dGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgIEFTU0VSVCh0b2tl
bi50eXBlKCkgPT0gSFRNTFRva2VuOjpTdGFydFRhZyk7CiAgICAgQVNTRVJUKHRva2VuLm5hbWUo
KSA9PSBpc2luZGV4VGFnKTsKICAgICBwYXJzZUVycm9yKHRva2VuKTsKLSAgICBpZiAobV9mb3Jt
RWxlbWVudCkKKyAgICBpZiAobV9zaXRlLmZvcm0oKSkKICAgICAgICAgcmV0dXJuOwogICAgIG5v
dEltcGxlbWVudGVkKCk7IC8vIEFja25vd2xlZGdlIHNlbGYtY2xvc2luZyBmbGFnCiAgICAgcHJv
Y2Vzc0Zha2VTdGFydFRhZyhmb3JtVGFnKTsKICAgICBBdHRyaWJ1dGUqIGFjdGlvbkF0dHJpYnV0
ZSA9IHRva2VuLmdldEF0dHJpYnV0ZUl0ZW0oYWN0aW9uQXR0cik7CiAgICAgaWYgKGFjdGlvbkF0
dHJpYnV0ZSkgewotICAgICAgICBBU1NFUlQoY3VycmVudEVsZW1lbnQoKS0+aGFzVGFnTmFtZShm
b3JtVGFnKSk7Ci0gICAgICAgIGN1cnJlbnRFbGVtZW50KCktPnNldEF0dHJpYnV0ZShhY3Rpb25B
dHRyLCBhY3Rpb25BdHRyaWJ1dGUtPnZhbHVlKCkpOworICAgICAgICBBU1NFUlQobV9zaXRlLmN1
cnJlbnRFbGVtZW50KCktPmhhc1RhZ05hbWUoZm9ybVRhZykpOworICAgICAgICBtX3NpdGUuY3Vy
cmVudEVsZW1lbnQoKS0+c2V0QXR0cmlidXRlKGFjdGlvbkF0dHIsIGFjdGlvbkF0dHJpYnV0ZS0+
dmFsdWUoKSk7CiAgICAgfQogICAgIHByb2Nlc3NGYWtlU3RhcnRUYWcoaHJUYWcpOwogICAgIHBy
b2Nlc3NGYWtlU3RhcnRUYWcobGFiZWxUYWcpOwpAQCAtNTI1LDcgKzUzOCw3IEBAIHZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0
b2tlbikKIHsKICAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6U3RhcnRUYWcp
OwogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykgewotICAgICAgICBpbnNlcnRIVE1M
U3RhcnRUYWdJbkJvZHkodG9rZW4pOworICAgICAgICBtX3NpdGUuaW5zZXJ0SFRNTEh0bWxTdGFy
dFRhZ0luQm9keSh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHRva2Vu
Lm5hbWUoKSA9PSBiYXNlVGFnIHx8IHRva2VuLm5hbWUoKSA9PSAiY29tbWFuZCIgfHwgdG9rZW4u
bmFtZSgpID09IGxpbmtUYWcgfHwgdG9rZW4ubmFtZSgpID09IG1ldGFUYWcgfHwgdG9rZW4ubmFt
ZSgpID09IG5vZnJhbWVzVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBzY3JpcHRUYWcgfHwgdG9rZW4u
bmFtZSgpID09IHN0eWxlVGFnIHx8IHRva2VuLm5hbWUoKSA9PSB0aXRsZVRhZykgewpAQCAtNTM0
LDkgKzU0Nyw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJv
ZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBp
ZiAodG9rZW4ubmFtZSgpID09IGJvZHlUYWcpIHsKLSAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7
Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7IC8vIGZyYWdtZW50IGNhc2UKLSAgICAgICAgbWVy
Z2VBdHRyaWJ1dGVzRnJvbVRva2VuSW50b0VsZW1lbnQodG9rZW4sIG1fb3BlbkVsZW1lbnRzLmJv
ZHlFbGVtZW50KCkpOworICAgICAgICBtX3NpdGUuaW5zZXJ0SFRNTEJvZHlTdGFydFRhZ0luQm9k
eSh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHRva2VuLm5hbWUoKSA9
PSBmcmFtZXNldFRhZykgewpAQCAtNTQ1LDMyICs1NTYsMzIgQEAgdm9pZCBIVE1MVHJlZUJ1aWxk
ZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAg
ICAgICBpZiAoIW1fZnJhbWVzZXRPaykKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIG1fb3BlbkVsZW1lbnRzLmJvZHlFbGVtZW50KCkt
PnJlbW92ZShlYyk7CisgICAgICAgIG1fc2l0ZS5vcGVuRWxlbWVudHMoKS0+Ym9keUVsZW1lbnQo
KS0+cmVtb3ZlKGVjKTsKICAgICAgICAgQVNTRVJUKCFlYyk7Ci0gICAgICAgIG1fb3BlbkVsZW1l
bnRzLnBvcFVudGlsKG1fb3BlbkVsZW1lbnRzLmJvZHlFbGVtZW50KCkpOwotICAgICAgICBtX29w
ZW5FbGVtZW50cy5wb3BIVE1MQm9keUVsZW1lbnQoKTsKLSAgICAgICAgQVNTRVJUKG1fb3BlbkVs
ZW1lbnRzLnRvcCgpID09IG1fb3BlbkVsZW1lbnRzLmh0bWxFbGVtZW50KCkpOwotICAgICAgICBp
bnNlcnRFbGVtZW50KHRva2VuKTsKKyAgICAgICAgbV9zaXRlLm9wZW5FbGVtZW50cygpLT5wb3BV
bnRpbChtX3NpdGUub3BlbkVsZW1lbnRzKCktPmJvZHlFbGVtZW50KCkpOworICAgICAgICBtX3Np
dGUub3BlbkVsZW1lbnRzKCktPnBvcEhUTUxCb2R5RWxlbWVudCgpOworICAgICAgICBBU1NFUlQo
bV9zaXRlLm9wZW5FbGVtZW50cygpLT50b3AoKSA9PSBtX3NpdGUub3BlbkVsZW1lbnRzKCktPmh0
bWxFbGVtZW50KCkpOworICAgICAgICBtX3NpdGUuaW5zZXJ0RWxlbWVudCh0b2tlbik7CiAgICAg
ICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluRnJhbWVzZXRNb2RlOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYWRkcmVzc1RhZyB8fCB0b2tlbi5uYW1lKCkg
PT0gYXJ0aWNsZVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gYXNpZGVUYWcgfHwgdG9rZW4ubmFtZSgp
ID09IGJsb2NrcXVvdGVUYWcgfHwgdG9rZW4ubmFtZSgpID09IGNlbnRlclRhZyB8fCB0b2tlbi5u
YW1lKCkgPT0gImRldGFpbHMiIHx8IHRva2VuLm5hbWUoKSA9PSBkaXJUYWcgfHwgdG9rZW4ubmFt
ZSgpID09IGRpdlRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gZGxUYWcgfHwgdG9rZW4ubmFtZSgpID09
IGZpZWxkc2V0VGFnIHx8IHRva2VuLm5hbWUoKSA9PSAiZmlndXJlIiB8fCB0b2tlbi5uYW1lKCkg
PT0gZm9vdGVyVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBoZWFkZXJUYWcgfHwgdG9rZW4ubmFtZSgp
ID09IGhncm91cFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gbWVudVRhZyB8fCB0b2tlbi5uYW1lKCkg
PT0gbmF2VGFnIHx8IHRva2VuLm5hbWUoKSA9PSBvbFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gcFRh
ZyB8fCB0b2tlbi5uYW1lKCkgPT0gc2VjdGlvblRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gdWxUYWcp
IHsKICAgICAgICAgcHJvY2Vzc0Zha2VQRW5kVGFnSWZQSW5TY29wZSgpOwotICAgICAgICBpbnNl
cnRFbGVtZW50KHRva2VuKTsKKyAgICAgICAgbV9zaXRlLmluc2VydEVsZW1lbnQodG9rZW4pOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChpc051bWJlcmVkSGVhZGVyVGFnKHRva2Vu
Lm5hbWUoKSkpIHsKICAgICAgICAgcHJvY2Vzc0Zha2VQRW5kVGFnSWZQSW5TY29wZSgpOwotICAg
ICAgICBpZiAoaXNOdW1iZXJlZEhlYWRlclRhZyhjdXJyZW50RWxlbWVudCgpLT5sb2NhbE5hbWUo
KSkpIHsgCisgICAgICAgIGlmIChpc051bWJlcmVkSGVhZGVyVGFnKG1fc2l0ZS5jdXJyZW50RWxl
bWVudCgpLT5sb2NhbE5hbWUoKSkpIHsgCiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsg
Ci0gICAgICAgICAgICBtX29wZW5FbGVtZW50cy5wb3AoKTsgCisgICAgICAgICAgICBtX3NpdGUu
b3BlbkVsZW1lbnRzKCktPnBvcCgpOyAKICAgICAgICAgfSAKLSAgICAgICAgaW5zZXJ0RWxlbWVu
dCh0b2tlbik7CisgICAgICAgIG1fc2l0ZS5pbnNlcnRFbGVtZW50KHRva2VuKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IHByZVRhZyB8fCB0b2tlbi5u
YW1lKCkgPT0gbGlzdGluZ1RhZykgewogICAgICAgICBwcm9jZXNzRmFrZVBFbmRUYWdJZlBJblNj
b3BlKCk7Ci0gICAgICAgIGluc2VydEVsZW1lbnQodG9rZW4pOworICAgICAgICBtX3NpdGUuaW5z
ZXJ0RWxlbWVudCh0b2tlbik7CiAgICAgICAgIG1fdG9rZW5pemVyLT5za2lwTGVhZGluZ05ld0xp
bmVGb3JMaXN0aW5nKCk7CiAgICAgICAgIG1fZnJhbWVzZXRPayA9IGZhbHNlOwogICAgICAgICBy
ZXR1cm47CkBAIC01NzgsNjkgKzU4OSw2OSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgaWYgKHRva2Vu
Lm5hbWUoKSA9PSBmb3JtVGFnKSB7CiAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgICAg
IHByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluU2NvcGUoKTsKLSAgICAgICAgaW5zZXJ0RWxlbWVudCh0
b2tlbik7Ci0gICAgICAgIG1fZm9ybUVsZW1lbnQgPSBjdXJyZW50RWxlbWVudCgpOworICAgICAg
ICBtX3NpdGUuaW5zZXJ0RWxlbWVudCh0b2tlbik7CisgICAgICAgIG1fc2l0ZS5zZXRGb3JtKG1f
c2l0ZS5jdXJyZW50RWxlbWVudCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAo
dG9rZW4ubmFtZSgpID09IGxpVGFnKSB7CiAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAg
ICAgIHByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluU2NvcGUoKTsKLSAgICAgICAgaW5zZXJ0RWxlbWVu
dCh0b2tlbik7CisgICAgICAgIG1fc2l0ZS5pbnNlcnRFbGVtZW50KHRva2VuKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IGRkVGFnIHx8IHRva2VuLm5h
bWUoKSA9PSBkdFRhZykgewogICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgICAgICBwcm9j
ZXNzRmFrZVBFbmRUYWdJZlBJblNjb3BlKCk7Ci0gICAgICAgIGluc2VydEVsZW1lbnQodG9rZW4p
OworICAgICAgICBtX3NpdGUuaW5zZXJ0RWxlbWVudCh0b2tlbik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBwbGFpbnRleHRUYWcpIHsKICAgICAgICAg
cHJvY2Vzc0Zha2VQRW5kVGFnSWZQSW5TY29wZSgpOwotICAgICAgICBpbnNlcnRFbGVtZW50KHRv
a2VuKTsKKyAgICAgICAgbV9zaXRlLmluc2VydEVsZW1lbnQodG9rZW4pOwogICAgICAgICBtX3Rv
a2VuaXplci0+c2V0U3RhdGUoSFRNTFRva2VuaXplcjo6UExBSU5URVhUU3RhdGUpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYnV0dG9uVGFnKSB7CiAg
ICAgICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgICAgIHJlY29uc3RydWN0VGhlQWN0aXZlRm9y
bWF0dGluZ0VsZW1lbnRzKCk7Ci0gICAgICAgIGluc2VydEVsZW1lbnQodG9rZW4pOworICAgICAg
ICBtX3NpdGUuaW5zZXJ0RWxlbWVudCh0b2tlbik7CiAgICAgICAgIG1fZnJhbWVzZXRPayA9IGZh
bHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYVRh
ZykgewotICAgICAgICBFbGVtZW50KiBhY3RpdmVBVGFnID0gbV9hY3RpdmVGb3JtYXR0aW5nRWxl
bWVudHMuY2xvc2VzdEVsZW1lbnRJblNjb3BlV2l0aE5hbWUoYVRhZy5sb2NhbE5hbWUoKSk7Cisg
ICAgICAgIEVsZW1lbnQqIGFjdGl2ZUFUYWcgPSBtX3NpdGUuYWN0aXZlRm9ybWF0dGluZ0VsZW1l
bnRzKCktPmNsb3Nlc3RFbGVtZW50SW5TY29wZVdpdGhOYW1lKGFUYWcubG9jYWxOYW1lKCkpOwog
ICAgICAgICBpZiAoYWN0aXZlQVRhZykgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7
CiAgICAgICAgICAgICBwcm9jZXNzRmFrZUVuZFRhZyhhVGFnKTsKLSAgICAgICAgICAgIG1fYWN0
aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnJlbW92ZShhY3RpdmVBVGFnKTsKLSAgICAgICAgICAgIGlm
IChtX29wZW5FbGVtZW50cy5jb250YWlucyhhY3RpdmVBVGFnKSkKLSAgICAgICAgICAgICAgICBt
X29wZW5FbGVtZW50cy5yZW1vdmUoYWN0aXZlQVRhZyk7CisgICAgICAgICAgICBtX3NpdGUuYWN0
aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCktPnJlbW92ZShhY3RpdmVBVGFnKTsKKyAgICAgICAgICAg
IGlmIChtX3NpdGUub3BlbkVsZW1lbnRzKCktPmNvbnRhaW5zKGFjdGl2ZUFUYWcpKQorICAgICAg
ICAgICAgICAgIG1fc2l0ZS5vcGVuRWxlbWVudHMoKS0+cmVtb3ZlKGFjdGl2ZUFUYWcpOwogICAg
ICAgICB9CiAgICAgICAgIHJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7
Ci0gICAgICAgIGluc2VydEZvcm1hdHRpbmdFbGVtZW50KHRva2VuKTsKKyAgICAgICAgbV9zaXRl
Lmluc2VydEZvcm1hdHRpbmdFbGVtZW50KHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBpZiAoaXNOb25BbmNob3JGb3JtYXR0aW5nVGFnKHRva2VuLm5hbWUoKSkpIHsKICAgICAg
ICAgcmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKLSAgICAgICAgaW5z
ZXJ0Rm9ybWF0dGluZ0VsZW1lbnQodG9rZW4pOworICAgICAgICBtX3NpdGUuaW5zZXJ0Rm9ybWF0
dGluZ0VsZW1lbnQodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tl
bi5uYW1lKCkgPT0gbm9iclRhZykgewogICAgICAgICByZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1h
dHRpbmdFbGVtZW50cygpOwogICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICBpbnNl
cnRGb3JtYXR0aW5nRWxlbWVudCh0b2tlbik7CisgICAgICAgIG1fc2l0ZS5pbnNlcnRGb3JtYXR0
aW5nRWxlbWVudCh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHRva2Vu
Lm5hbWUoKSA9PSBhcHBsZXRUYWcgfHwgdG9rZW4ubmFtZSgpID09IG1hcnF1ZWVUYWcgfHwgdG9r
ZW4ubmFtZSgpID09IG9iamVjdFRhZykgewogICAgICAgICByZWNvbnN0cnVjdFRoZUFjdGl2ZUZv
cm1hdHRpbmdFbGVtZW50cygpOwotICAgICAgICBpbnNlcnRFbGVtZW50KHRva2VuKTsKLSAgICAg
ICAgbV9hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuYXBwZW5kTWFya2VyKCk7CisgICAgICAgIG1f
c2l0ZS5pbnNlcnRFbGVtZW50KHRva2VuKTsKKyAgICAgICAgbV9zaXRlLmFjdGl2ZUZvcm1hdHRp
bmdFbGVtZW50cygpLT5hcHBlbmRNYXJrZXIoKTsKICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFs
c2U7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0YWJs
ZVRhZykgewogICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICBpbnNlcnRFbGVtZW50
KHRva2VuKTsKKyAgICAgICAgbV9zaXRlLmluc2VydEVsZW1lbnQodG9rZW4pOwogICAgICAgICBt
X2ZyYW1lc2V0T2sgPSBmYWxzZTsKICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5UYWJsZU1v
ZGU7CiAgICAgICAgIHJldHVybjsKQEAgLTY1MywxNyArNjY0LDE3IEBAIHZvaWQgSFRNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
ICAgICB9CiAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBhcmVhVGFnIHx8IHRva2VuLm5hbWUoKSA9
PSBiYXNlZm9udFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gImJnc291bmQiIHx8IHRva2VuLm5hbWUo
KSA9PSBiclRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gZW1iZWRUYWcgfHwgdG9rZW4ubmFtZSgpID09
IGltZ1RhZyB8fCB0b2tlbi5uYW1lKCkgPT0gaW5wdXRUYWcgfHwgdG9rZW4ubmFtZSgpID09IGtl
eWdlblRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gd2JyVGFnKSB7CiAgICAgICAgIHJlY29uc3RydWN0
VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7Ci0gICAgICAgIGluc2VydFNlbGZDbG9zaW5n
RWxlbWVudCh0b2tlbik7CisgICAgICAgIG1fc2l0ZS5pbnNlcnRTZWxmQ2xvc2luZ0VsZW1lbnQo
dG9rZW4pOwogICAgICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IHBhcmFtVGFnIHx8IHRva2VuLm5hbWUoKSA9
PSBzb3VyY2VUYWcgfHwgdG9rZW4ubmFtZSgpID09ICJ0cmFjayIpIHsKLSAgICAgICAgaW5zZXJ0
U2VsZkNsb3NpbmdFbGVtZW50KHRva2VuKTsKKyAgICAgICAgbV9zaXRlLmluc2VydFNlbGZDbG9z
aW5nRWxlbWVudCh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHRva2Vu
Lm5hbWUoKSA9PSBoclRhZykgewogICAgICAgICBwcm9jZXNzRmFrZVBFbmRUYWdJZlBJblNjb3Bl
KCk7Ci0gICAgICAgIGluc2VydFNlbGZDbG9zaW5nRWxlbWVudCh0b2tlbik7CisgICAgICAgIG1f
c2l0ZS5pbnNlcnRTZWxmQ2xvc2luZ0VsZW1lbnQodG9rZW4pOwogICAgICAgICBtX2ZyYW1lc2V0
T2sgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTY3Miw3ICs2ODMsNyBAQCB2
b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxU
b2tlbiYgdG9rZW4pCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHRva2VuLm5hbWUo
KSA9PSB0ZXh0YXJlYVRhZykgewotICAgICAgICBpbnNlcnRFbGVtZW50KHRva2VuKTsKKyAgICAg
ICAgbV9zaXRlLmluc2VydEVsZW1lbnQodG9rZW4pOwogICAgICAgICBtX3Rva2VuaXplci0+c2tp
cExlYWRpbmdOZXdMaW5lRm9yTGlzdGluZygpOwogICAgICAgICBtX3Rva2VuaXplci0+c2V0U3Rh
dGUoSFRNTFRva2VuaXplcjo6UkNEQVRBU3RhdGUpOwogICAgICAgICBtX29yaWdpbmFsSW5zZXJ0
aW9uTW9kZSA9IG1faW5zZXJ0aW9uTW9kZTsKQEAgLTY4NCwyNSArNjk1LDI1IEBAIHZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0
b2tlbikKICAgICAgICAgcHJvY2Vzc0Zha2VQRW5kVGFnSWZQSW5TY29wZSgpOwogICAgICAgICBy
ZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwogICAgICAgICBtX2ZyYW1l
c2V0T2sgPSBmYWxzZTsKLSAgICAgICAgaW5zZXJ0R2VuZXJpY1Jhd1RleHRFbGVtZW50KHRva2Vu
KTsKKyAgICAgICAgcHJvY2Vzc0dlbmVyaWNSYXdUZXh0U3RhcnRUYWcodG9rZW4pOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaWZyYW1lVGFnKSB7CiAg
ICAgICAgIG1fZnJhbWVzZXRPayA9IGZhbHNlOwotICAgICAgICBpbnNlcnRHZW5lcmljUmF3VGV4
dEVsZW1lbnQodG9rZW4pOworICAgICAgICBwcm9jZXNzR2VuZXJpY1Jhd1RleHRTdGFydFRhZyh0
b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBu
b2VtYmVkVGFnKSB7Ci0gICAgICAgIGluc2VydEdlbmVyaWNSYXdUZXh0RWxlbWVudCh0b2tlbik7
CisgICAgICAgIHByb2Nlc3NHZW5lcmljUmF3VGV4dFN0YXJ0VGFnKHRva2VuKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IG5vc2NyaXB0VGFnICYmIGlz
U2NyaXB0aW5nRmxhZ0VuYWJsZWQobV9kb2N1bWVudC0+ZnJhbWUoKSkpIHsKLSAgICAgICAgaW5z
ZXJ0R2VuZXJpY1Jhd1RleHRFbGVtZW50KHRva2VuKTsKKyAgICAgICAgcHJvY2Vzc0dlbmVyaWNS
YXdUZXh0U3RhcnRUYWcodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0
b2tlbi5uYW1lKCkgPT0gc2VsZWN0VGFnKSB7CiAgICAgICAgIHJlY29uc3RydWN0VGhlQWN0aXZl
Rm9ybWF0dGluZ0VsZW1lbnRzKCk7Ci0gICAgICAgIGluc2VydEVsZW1lbnQodG9rZW4pOworICAg
ICAgICBtX3NpdGUuaW5zZXJ0RWxlbWVudCh0b2tlbik7CiAgICAgICAgIG1fZnJhbWVzZXRPayA9
IGZhbHNlOwogICAgICAgICBpZiAobV9pbnNlcnRpb25Nb2RlID09IEluVGFibGVNb2RlIHx8IG1f
aW5zZXJ0aW9uTW9kZSA9PSBJbkNhcHRpb25Nb2RlIHx8IG1faW5zZXJ0aW9uTW9kZSA9PSBJbkNv
bHVtbkdyb3VwTW9kZSB8fCBtX2luc2VydGlvbk1vZGUgPT0gSW5UYWJsZUJvZHlNb2RlIHx8IG1f
aW5zZXJ0aW9uTW9kZSA9PSBJblJvd01vZGUgfHwgbV9pbnNlcnRpb25Nb2RlID09IEluQ2VsbE1v
ZGUpCiAgICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJblNlbGVjdEluVGFibGVNb2RlOwpA
QCAtNzExLDIzICs3MjIsMjMgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRh
Z0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gb3B0Z3JvdXBUYWcgfHwgdG9rZW4ubmFtZSgpID09
IG9wdGlvblRhZykgewotICAgICAgICBpZiAobV9vcGVuRWxlbWVudHMuaW5TY29wZShvcHRpb25U
YWcubG9jYWxOYW1lKCkpKSB7CisgICAgICAgIGlmIChtX3NpdGUub3BlbkVsZW1lbnRzKCktPmlu
U2NvcGUob3B0aW9uVGFnLmxvY2FsTmFtZSgpKSkgewogICAgICAgICAgICAgQXRvbWljSFRNTFRv
a2VuIGVuZE9wdGlvbihIVE1MVG9rZW46OkVuZFRhZywgb3B0aW9uVGFnLmxvY2FsTmFtZSgpKTsK
ICAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoZW5kT3B0aW9uKTsKICAgICAgICAgfQogICAgICAg
ICByZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwotICAgICAgICBpbnNl
cnRFbGVtZW50KHRva2VuKTsKKyAgICAgICAgbV9zaXRlLmluc2VydEVsZW1lbnQodG9rZW4pOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gcnBUYWcgfHwg
dG9rZW4ubmFtZSgpID09IHJ0VGFnKSB7Ci0gICAgICAgIGlmIChtX29wZW5FbGVtZW50cy5pblNj
b3BlKHJ1YnlUYWcubG9jYWxOYW1lKCkpKSB7CisgICAgICAgIGlmIChtX3NpdGUub3BlbkVsZW1l
bnRzKCktPmluU2NvcGUocnVieVRhZy5sb2NhbE5hbWUoKSkpIHsKICAgICAgICAgICAgIGdlbmVy
YXRlSW1wbGllZEVuZFRhZ3MoKTsKLSAgICAgICAgICAgIGlmICghY3VycmVudEVsZW1lbnQoKS0+
aGFzVGFnTmFtZShydWJ5VGFnKSkgeworICAgICAgICAgICAgaWYgKCFtX3NpdGUuY3VycmVudEVs
ZW1lbnQoKS0+aGFzVGFnTmFtZShydWJ5VGFnKSkgewogICAgICAgICAgICAgICAgIHBhcnNlRXJy
b3IodG9rZW4pOwotICAgICAgICAgICAgICAgIG1fb3BlbkVsZW1lbnRzLnBvcFVudGlsKHJ1YnlU
YWcubG9jYWxOYW1lKCkpOworICAgICAgICAgICAgICAgIG1fc2l0ZS5vcGVuRWxlbWVudHMoKS0+
cG9wVW50aWwocnVieVRhZy5sb2NhbE5hbWUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICAgICAgaW5zZXJ0RWxlbWVudCh0b2tlbik7CisgICAgICAgIG1fc2l0ZS5pbnNlcnRFbGVt
ZW50KHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAodG9rZW4ubmFtZSgp
ID09ICJtYXRoIikgewpAQCAtNzQzLDE3ICs3NTQsMTcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6
OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIHJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1l
bnRzKCk7Ci0gICAgaW5zZXJ0RWxlbWVudCh0b2tlbik7CisgICAgbV9zaXRlLmluc2VydEVsZW1l
bnQodG9rZW4pOwogfQogCiBib29sIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0NvbGdyb3VwRW5k
VGFnRm9ySW5Db2x1bW5Hcm91cCgpCiB7Ci0gICAgaWYgKGN1cnJlbnRFbGVtZW50KCkgPT0gbV9v
cGVuRWxlbWVudHMuaHRtbEVsZW1lbnQoKSkgeworICAgIGlmIChtX3NpdGUuY3VycmVudEVsZW1l
bnQoKSA9PSBtX3NpdGUub3BlbkVsZW1lbnRzKCktPmh0bWxFbGVtZW50KCkpIHsKICAgICAgICAg
QVNTRVJUKG1faXNQYXJzaW5nRnJhZ21lbnQpOwogICAgICAgICAvLyBGSVhNRTogcGFyc2UgZXJy
b3IKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBtX29wZW5FbGVtZW50cy5wb3Ao
KTsKKyAgICBtX3NpdGUub3BlbkVsZW1lbnRzKCktPnBvcCgpOwogICAgIG1faW5zZXJ0aW9uTW9k
ZSA9IEluVGFibGVNb2RlOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtNzYyLDEyICs3NzMsMTIg
QEAgYm9vbCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDb2xncm91cEVuZFRhZ0ZvckluQ29sdW1u
R3JvdXAoKQogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNsb3NlVGhlQ2VsbCgpCiB7CiAgICAgQVNT
RVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbkNlbGxNb2RlKTsKLSAgICBpZiAobV9vcGVuRWxlbWVu
dHMuaW5TY29wZSh0ZFRhZykpIHsKLSAgICAgICAgQVNTRVJUKCFtX29wZW5FbGVtZW50cy5pblNj
b3BlKHRoVGFnKSk7CisgICAgaWYgKG1fc2l0ZS5vcGVuRWxlbWVudHMoKS0+aW5TY29wZSh0ZFRh
ZykpIHsKKyAgICAgICAgQVNTRVJUKCFtX3NpdGUub3BlbkVsZW1lbnRzKCktPmluU2NvcGUodGhU
YWcpKTsKICAgICAgICAgcHJvY2Vzc0Zha2VFbmRUYWcodGRUYWcpOwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAgIEFTU0VSVChtX29wZW5FbGVtZW50cy5pblNjb3BlKHRoVGFnKSk7CisgICAg
QVNTRVJUKG1fc2l0ZS5vcGVuRWxlbWVudHMoKS0+aW5TY29wZSh0aFRhZykpOwogICAgIHByb2Nl
c3NGYWtlRW5kVGFnKHRoVGFnKTsKICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluUm93
TW9kZSk7CiB9CkBAIC03NzYsMTUgKzc4NywxNSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc1N0YXJ0VGFnRm9ySW5UYWJsZShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewogICAgIEFT
U0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpTdGFydFRhZyk7CiAgICAgaWYgKHRva2Vu
Lm5hbWUoKSA9PSBjYXB0aW9uVGFnKSB7Ci0gICAgICAgIG1fb3BlbkVsZW1lbnRzLnBvcFVudGls
VGFibGVTY29wZU1hcmtlcigpOwotICAgICAgICBtX2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5h
cHBlbmRNYXJrZXIoKTsKLSAgICAgICAgaW5zZXJ0RWxlbWVudCh0b2tlbik7CisgICAgICAgIG1f
c2l0ZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxUYWJsZVNjb3BlTWFya2VyKCk7CisgICAgICAg
IG1fc2l0ZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+YXBwZW5kTWFya2VyKCk7CisgICAg
ICAgIG1fc2l0ZS5pbnNlcnRFbGVtZW50KHRva2VuKTsKICAgICAgICAgbV9pbnNlcnRpb25Nb2Rl
ID0gSW5DYXB0aW9uTW9kZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAodG9rZW4u
bmFtZSgpID09IGNvbGdyb3VwVGFnKSB7Ci0gICAgICAgIG1fb3BlbkVsZW1lbnRzLnBvcFVudGls
VGFibGVTY29wZU1hcmtlcigpOwotICAgICAgICBpbnNlcnRFbGVtZW50KHRva2VuKTsKKyAgICAg
ICAgbV9zaXRlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbFRhYmxlU2NvcGVNYXJrZXIoKTsKKyAg
ICAgICAgbV9zaXRlLmluc2VydEVsZW1lbnQodG9rZW4pOwogICAgICAgICBtX2luc2VydGlvbk1v
ZGUgPSBJbkNvbHVtbkdyb3VwTW9kZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTc5NSw4
ICs4MDYsOCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5UYWJs
ZShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlm
IChpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4ubmFtZSgpKSkgewotICAgICAgICBtX29wZW5F
bGVtZW50cy5wb3BVbnRpbFRhYmxlU2NvcGVNYXJrZXIoKTsKLSAgICAgICAgaW5zZXJ0RWxlbWVu
dCh0b2tlbik7CisgICAgICAgIG1fc2l0ZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxUYWJsZVNj
b3BlTWFya2VyKCk7CisgICAgICAgIG1fc2l0ZS5pbnNlcnRFbGVtZW50KHRva2VuKTsKICAgICAg
ICAgbV9pbnNlcnRpb25Nb2RlID0gSW5UYWJsZUJvZHlNb2RlOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtODIwLDEzICs4MzEsMTMgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NT
dGFydFRhZ0ZvckluVGFibGUoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICB9CiAgICAgaWYg
KHRva2VuLm5hbWUoKSA9PSBmb3JtVGFnKSB7CiAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwot
ICAgICAgICBpZiAobV9mb3JtRWxlbWVudCkKKyAgICAgICAgaWYgKG1fc2l0ZS5mb3JtKCkpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGluc2VydFNlbGZDbG9zaW5nRWxlbWVudCh0b2tl
bik7CisgICAgICAgIG1fc2l0ZS5pbnNlcnRTZWxmQ2xvc2luZ0VsZW1lbnQodG9rZW4pOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIHBhcnNlRXJyb3IodG9rZW4pOwotICAgIGlmIChjdXJy
ZW50RWxlbWVudCgpLT5oYXNUYWdOYW1lKHRhYmxlVGFnKSB8fCBpc1RhYmxlQm9keUNvbnRleHRU
YWcoY3VycmVudEVsZW1lbnQoKS0+bG9jYWxOYW1lKCkpIHx8IGN1cnJlbnRFbGVtZW50KCktPmhh
c1RhZ05hbWUodHJUYWcpKQorICAgIGlmIChtX3NpdGUuY3VycmVudEVsZW1lbnQoKS0+aGFzVGFn
TmFtZSh0YWJsZVRhZykgfHwgaXNUYWJsZUJvZHlDb250ZXh0VGFnKG1fc2l0ZS5jdXJyZW50RWxl
bWVudCgpLT5sb2NhbE5hbWUoKSkgfHwgbV9zaXRlLmN1cnJlbnRFbGVtZW50KCktPmhhc1RhZ05h
bWUodHJUYWcpKQogICAgICAgICBub3RJbXBsZW1lbnRlZCgpOyAvLyAid2hlbmV2ZXIgYSBub2Rl
IHdvdWxkIGJlIGluc2VydGVkIGludG8gdGhlIGN1cnJlbnQgbm9kZSwgaXQgbXVzdCBpbnN0ZWFk
IGJlIGZvc3RlciBwYXJlbnRlZC4iCiAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KHRva2Vu
KTsKIH0KQEAgLTg0Miw3ICs4NTMsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0
YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgY2FzZSBCZWZvcmVIVE1MTW9kZToK
ICAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBCZWZvcmVIVE1MTW9kZSk7CiAgICAg
ICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykgewotICAgICAgICAgICAgaW5zZXJ0SFRN
TFN0YXJ0VGFnQmVmb3JlSFRNTCh0b2tlbik7CisgICAgICAgICAgICBtX3NpdGUuaW5zZXJ0SFRN
TEh0bWxTdGFydFRhZ0JlZm9yZUhUTUwodG9rZW4pOwogICAgICAgICAgICAgc2V0SW5zZXJ0aW9u
TW9kZShCZWZvcmVIZWFkTW9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAg
LTg1MSwxMSArODYyLDExIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWco
QXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICBjYXNlIEJlZm9yZUhlYWRNb2RlOgogICAgICAg
ICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEJlZm9yZUhlYWRNb2RlKTsKICAgICAgICAgaWYg
KHRva2VuLm5hbWUoKSA9PSBodG1sVGFnKSB7Ci0gICAgICAgICAgICBpbnNlcnRIVE1MU3RhcnRU
YWdJbkJvZHkodG9rZW4pOworICAgICAgICAgICAgbV9zaXRlLmluc2VydEhUTUxIdG1sU3RhcnRU
YWdJbkJvZHkodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAg
IGlmICh0b2tlbi5uYW1lKCkgPT0gaGVhZFRhZykgewotICAgICAgICAgICAgaW5zZXJ0SFRNTEhl
YWRFbGVtZW50KHRva2VuKTsKKyAgICAgICAgICAgIG1fc2l0ZS5pbnNlcnRIVE1MSGVhZEVsZW1l
bnQodG9rZW4pOwogICAgICAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJbkhlYWRNb2RlKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtODcwLDI2ICs4ODEsMjYgQEAgdm9pZCBI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQog
ICAgIGNhc2UgQWZ0ZXJIZWFkTW9kZToKICAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9
PSBBZnRlckhlYWRNb2RlKTsKICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBodG1sVGFnKSB7
Ci0gICAgICAgICAgICBpbnNlcnRIVE1MU3RhcnRUYWdJbkJvZHkodG9rZW4pOworICAgICAgICAg
ICAgbV9zaXRlLmluc2VydEhUTUxIdG1sU3RhcnRUYWdJbkJvZHkodG9rZW4pOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYm9keVRh
ZykgewogICAgICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7Ci0gICAgICAgICAgICBpbnNl
cnRIVE1MQm9keUVsZW1lbnQodG9rZW4pOworICAgICAgICAgICAgbV9zaXRlLmluc2VydEhUTUxC
b2R5RWxlbWVudCh0b2tlbik7CiAgICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbkJvZHlN
b2RlOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICh0b2tlbi5u
YW1lKCkgPT0gZnJhbWVzZXRUYWcpIHsKLSAgICAgICAgICAgIGluc2VydEVsZW1lbnQodG9rZW4p
OworICAgICAgICAgICAgbV9zaXRlLmluc2VydEVsZW1lbnQodG9rZW4pOwogICAgICAgICAgICAg
c2V0SW5zZXJ0aW9uTW9kZShJbkZyYW1lc2V0TW9kZSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBiYXNlVGFnIHx8IHRva2VuLm5h
bWUoKSA9PSBsaW5rVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBtZXRhVGFnIHx8IHRva2VuLm5hbWUo
KSA9PSBub2ZyYW1lc1RhZyB8fCB0b2tlbi5uYW1lKCkgPT0gc2NyaXB0VGFnIHx8IHRva2VuLm5h
bWUoKSA9PSBzdHlsZVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gdGl0bGVUYWcpIHsKICAgICAgICAg
ICAgIHBhcnNlRXJyb3IodG9rZW4pOwotICAgICAgICAgICAgQVNTRVJUKG1faGVhZEVsZW1lbnQp
OwotICAgICAgICAgICAgbV9vcGVuRWxlbWVudHMucHVzaEhUTUxIZWFkRWxlbWVudChtX2hlYWRF
bGVtZW50KTsKKyAgICAgICAgICAgIEFTU0VSVChtX3NpdGUuaGVhZCgpKTsKKyAgICAgICAgICAg
IG1fc2l0ZS5vcGVuRWxlbWVudHMoKS0+cHVzaEhUTUxIZWFkRWxlbWVudChtX3NpdGUuaGVhZCgp
KTsKICAgICAgICAgICAgIHByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZCh0b2tlbik7Ci0gICAgICAg
ICAgICBtX29wZW5FbGVtZW50cy5yZW1vdmVIVE1MSGVhZEVsZW1lbnQobV9oZWFkRWxlbWVudC5n
ZXQoKSk7CisgICAgICAgICAgICBtX3NpdGUub3BlbkVsZW1lbnRzKCktPnJlbW92ZUhUTUxIZWFk
RWxlbWVudChtX3NpdGUuaGVhZCgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGhlYWRUYWcpIHsKQEAgLTkyMiwxMSArOTMzLDEx
IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2Vu
JiB0b2tlbikKICAgICBjYXNlIEluQ29sdW1uR3JvdXBNb2RlOgogICAgICAgICBBU1NFUlQoaW5z
ZXJ0aW9uTW9kZSgpID09IEluQ29sdW1uR3JvdXBNb2RlKTsKICAgICAgICAgaWYgKHRva2VuLm5h
bWUoKSA9PSBodG1sVGFnKSB7Ci0gICAgICAgICAgICBpbnNlcnRIVE1MU3RhcnRUYWdJbkJvZHko
dG9rZW4pOworICAgICAgICAgICAgbV9zaXRlLmluc2VydEhUTUxIdG1sU3RhcnRUYWdJbkJvZHko
dG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICh0b2tl
bi5uYW1lKCkgPT0gY29sVGFnKSB7Ci0gICAgICAgICAgICBpbnNlcnRTZWxmQ2xvc2luZ0VsZW1l
bnQodG9rZW4pOworICAgICAgICAgICAgbV9zaXRlLmluc2VydFNlbGZDbG9zaW5nRWxlbWVudCh0
b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFwcm9j
ZXNzQ29sZ3JvdXBFbmRUYWdGb3JJbkNvbHVtbkdyb3VwKCkpIHsKQEAgLTkzOCw4ICs5NDksOCBA
QCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYg
dG9rZW4pCiAgICAgY2FzZSBJblRhYmxlQm9keU1vZGU6CiAgICAgICAgIEFTU0VSVChpbnNlcnRp
b25Nb2RlKCkgPT0gSW5UYWJsZUJvZHlNb2RlKTsKICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9
PSB0clRhZykgewotICAgICAgICAgICAgbV9vcGVuRWxlbWVudHMucG9wVW50aWxUYWJsZUJvZHlT
Y29wZU1hcmtlcigpOyAvLyBIb3cgaXMgdGhlcmUgZXZlciBhbnl0aGluZyB0byBwb3A/Ci0gICAg
ICAgICAgICBpbnNlcnRFbGVtZW50KHRva2VuKTsKKyAgICAgICAgICAgIG1fc2l0ZS5vcGVuRWxl
bWVudHMoKS0+cG9wVW50aWxUYWJsZUJvZHlTY29wZU1hcmtlcigpOyAvLyBIb3cgaXMgdGhlcmUg
ZXZlciBhbnl0aGluZyB0byBwb3A/CisgICAgICAgICAgICBtX3NpdGUuaW5zZXJ0RWxlbWVudCh0
b2tlbik7CiAgICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJblJvd01vZGU7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTk1MiwxNCArOTYzLDE0IEBAIHZvaWQgSFRNTFRy
ZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAg
ICAgfQogICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGNhcHRpb25UYWcgfHwgdG9rZW4ubmFt
ZSgpID09IGNvbFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gY29sZ3JvdXBUYWcgfHwgaXNUYWJsZUJv
ZHlDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlz
IGlzIHNsb3cuCi0gICAgICAgICAgICBpZiAoIW1fb3BlbkVsZW1lbnRzLmluVGFibGVTY29wZSh0
Ym9keVRhZy5sb2NhbE5hbWUoKSkgJiYgIW1fb3BlbkVsZW1lbnRzLmluVGFibGVTY29wZSh0aGVh
ZFRhZy5sb2NhbE5hbWUoKSkgJiYgIW1fb3BlbkVsZW1lbnRzLmluVGFibGVTY29wZSh0Zm9vdFRh
Zy5sb2NhbE5hbWUoKSkpIHsKKyAgICAgICAgICAgIGlmICghbV9zaXRlLm9wZW5FbGVtZW50cygp
LT5pblRhYmxlU2NvcGUodGJvZHlUYWcubG9jYWxOYW1lKCkpICYmICFtX3NpdGUub3BlbkVsZW1l
bnRzKCktPmluVGFibGVTY29wZSh0aGVhZFRhZy5sb2NhbE5hbWUoKSkgJiYgIW1fc2l0ZS5vcGVu
RWxlbWVudHMoKS0+aW5UYWJsZVNjb3BlKHRmb290VGFnLmxvY2FsTmFtZSgpKSkgewogICAgICAg
ICAgICAgICAgIEFTU0VSVChtX2lzUGFyc2luZ0ZyYWdtZW50KTsKICAgICAgICAgICAgICAgICBw
YXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBtX29wZW5FbGVtZW50cy5wb3BVbnRpbFRhYmxlQm9keVNjb3BlTWFya2Vy
KCk7Ci0gICAgICAgICAgICBBU1NFUlQoaXNUYWJsZUJvZHlDb250ZXh0VGFnKGN1cnJlbnRFbGVt
ZW50KCktPmxvY2FsTmFtZSgpKSk7Ci0gICAgICAgICAgICBwcm9jZXNzRmFrZUVuZFRhZyhjdXJy
ZW50RWxlbWVudCgpLT50YWdRTmFtZSgpKTsKKyAgICAgICAgICAgIG1fc2l0ZS5vcGVuRWxlbWVu
dHMoKS0+cG9wVW50aWxUYWJsZUJvZHlTY29wZU1hcmtlcigpOworICAgICAgICAgICAgQVNTRVJU
KGlzVGFibGVCb2R5Q29udGV4dFRhZyhtX3NpdGUuY3VycmVudEVsZW1lbnQoKS0+bG9jYWxOYW1l
KCkpKTsKKyAgICAgICAgICAgIHByb2Nlc3NGYWtlRW5kVGFnKG1fc2l0ZS5jdXJyZW50RWxlbWVu
dCgpLT50YWdRTmFtZSgpKTsKICAgICAgICAgICAgIHByb2Nlc3NTdGFydFRhZyh0b2tlbik7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTk2OCwxMCArOTc5LDEwIEBAIHZvaWQg
SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
ICAgICBjYXNlIEluUm93TW9kZToKICAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJ
blJvd01vZGUpOwogICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IHRoVGFnIHx8IHRva2VuLm5h
bWUoKSA9PSB0ZFRhZykgewotICAgICAgICAgICAgbV9vcGVuRWxlbWVudHMucG9wVW50aWxUYWJs
ZVJvd1Njb3BlTWFya2VyKCk7Ci0gICAgICAgICAgICBpbnNlcnRFbGVtZW50KHRva2VuKTsKKyAg
ICAgICAgICAgIG1fc2l0ZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxUYWJsZVJvd1Njb3BlTWFy
a2VyKCk7CisgICAgICAgICAgICBtX3NpdGUuaW5zZXJ0RWxlbWVudCh0b2tlbik7CiAgICAgICAg
ICAgICBtX2luc2VydGlvbk1vZGUgPSBJbkNlbGxNb2RlOwotICAgICAgICAgICAgbV9hY3RpdmVG
b3JtYXR0aW5nRWxlbWVudHMuYXBwZW5kTWFya2VyKCk7CisgICAgICAgICAgICBtX3NpdGUuYWN0
aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCktPmFwcGVuZE1hcmtlcigpOwogICAgICAgICB9CiAgICAg
ICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gY2FwdGlvblRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gY29s
VGFnIHx8IHRva2VuLm5hbWUoKSA9PSBjb2xncm91cFRhZyB8fCBpc1RhYmxlQm9keUNvbnRleHRU
YWcodG9rZW4ubmFtZSgpKSkgewogICAgICAgICAgICAgaWYgKCFwcm9jZXNzVHJFbmRUYWdGb3JJ
blJvdygpKSB7CkBAIC05ODgsNyArOTk5LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nl
c3NTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBBU1NFUlQoaW5zZXJ0
aW9uTW9kZSgpID09IEluQ2VsbE1vZGUpOwogICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGNh
cHRpb25UYWcgfHwgdG9rZW4ubmFtZSgpID09IGNvbFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gY29s
Z3JvdXBUYWcgfHwgdG9rZW4ubmFtZSgpID09IHRoVGFnIHx8IHRva2VuLm5hbWUoKSA9PSB0ZFRh
ZyB8fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4ubmFtZSgpKSkgewogICAgICAgICAgICAg
Ly8gRklYTUU6IFRoaXMgY291bGQgYmUgbW9yZSBlZmZpY2llbnQuCi0gICAgICAgICAgICBpZiAo
IW1fb3BlbkVsZW1lbnRzLmluVGFibGVTY29wZSh0ZFRhZykgfHwgIW1fb3BlbkVsZW1lbnRzLmlu
VGFibGVTY29wZSh0aFRhZykpIHsKKyAgICAgICAgICAgIGlmICghbV9zaXRlLm9wZW5FbGVtZW50
cygpLT5pblRhYmxlU2NvcGUodGRUYWcpIHx8ICFtX3NpdGUub3BlbkVsZW1lbnRzKCktPmluVGFi
bGVTY29wZSh0aFRhZykpIHsKICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC0xMDAxLDcgKzEwMTIsNyBA
QCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYg
dG9rZW4pCiAgICAgY2FzZSBBZnRlckFmdGVyQm9keU1vZGU6CiAgICAgICAgIEFTU0VSVChpbnNl
cnRpb25Nb2RlKCkgPT0gQWZ0ZXJCb2R5TW9kZSB8fCBpbnNlcnRpb25Nb2RlKCkgPT0gQWZ0ZXJB
ZnRlckJvZHlNb2RlKTsKICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBodG1sVGFnKSB7Ci0g
ICAgICAgICAgICBpbnNlcnRIVE1MU3RhcnRUYWdJbkJvZHkodG9rZW4pOworICAgICAgICAgICAg
bV9zaXRlLmluc2VydEhUTUxIdG1sU3RhcnRUYWdJbkJvZHkodG9rZW4pOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluQm9keU1vZGU7
CkBAIC0xMDEwLDcgKzEwMjEsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0
VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgY2FzZSBJbkhlYWROb3NjcmlwdE1vZGU6
CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5IZWFkTm9zY3JpcHRNb2RlKTsK
ICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBodG1sVGFnKSB7Ci0gICAgICAgICAgICBpbnNl
cnRIVE1MU3RhcnRUYWdJbkJvZHkodG9rZW4pOworICAgICAgICAgICAgbV9zaXRlLmluc2VydEhU
TUxIdG1sU3RhcnRUYWdJbkJvZHkodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gbGlua1RhZyB8fCB0b2tlbi5uYW1lKCkg
PT0gbWV0YVRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gbm9mcmFtZXNUYWcgfHwgdG9rZW4ubmFtZSgp
ID09IHN0eWxlVGFnKSB7CkBAIC0xMDI4LDE1ICsxMDM5LDE1IEBAIHZvaWQgSFRNTFRyZWVCdWls
ZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICBjYXNlIElu
RnJhbWVzZXRNb2RlOgogICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluRnJhbWVz
ZXRNb2RlKTsKICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBodG1sVGFnKSB7Ci0gICAgICAg
ICAgICBpbnNlcnRIVE1MU3RhcnRUYWdJbkJvZHkodG9rZW4pOworICAgICAgICAgICAgbV9zaXRl
Lmluc2VydEhUTUxIdG1sU3RhcnRUYWdJbkJvZHkodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gZnJhbWVzZXRUYWcpIHsK
LSAgICAgICAgICAgIGluc2VydEVsZW1lbnQodG9rZW4pOworICAgICAgICAgICAgbV9zaXRlLmlu
c2VydEVsZW1lbnQodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gZnJhbWVUYWcpIHsKLSAgICAgICAgICAgIGluc2VydFNl
bGZDbG9zaW5nRWxlbWVudCh0b2tlbik7CisgICAgICAgICAgICBtX3NpdGUuaW5zZXJ0U2VsZkNs
b3NpbmdFbGVtZW50KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
ICAgICBpZiAodG9rZW4ubmFtZSgpID09IG5vZnJhbWVzVGFnKSB7CkBAIC0xMDQ5LDcgKzEwNjAs
NyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tl
biYgdG9rZW4pCiAgICAgY2FzZSBBZnRlckFmdGVyRnJhbWVzZXRNb2RlOgogICAgICAgICBBU1NF
UlQoaW5zZXJ0aW9uTW9kZSgpID09IEFmdGVyRnJhbWVzZXRNb2RlIHx8IGluc2VydGlvbk1vZGUo
KSA9PSBBZnRlckFmdGVyRnJhbWVzZXRNb2RlKTsKICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9
PSBodG1sVGFnKSB7Ci0gICAgICAgICAgICBpbnNlcnRIVE1MU3RhcnRUYWdJbkJvZHkodG9rZW4p
OworICAgICAgICAgICAgbV9zaXRlLmluc2VydEhUTUxIdG1sU3RhcnRUYWdJbkJvZHkodG9rZW4p
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICh0b2tlbi5uYW1l
KCkgPT0gbm9mcmFtZXNUYWcpIHsKQEAgLTEwNzEsMjcgKzEwODIsMjcgQEAgdm9pZCBIVE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgIGNh
c2UgSW5TZWxlY3RNb2RlOgogICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluU2Vs
ZWN0TW9kZSB8fCBpbnNlcnRpb25Nb2RlKCkgPT0gSW5TZWxlY3RJblRhYmxlTW9kZSk7CiAgICAg
ICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykgewotICAgICAgICAgICAgaW5zZXJ0SFRN
TFN0YXJ0VGFnSW5Cb2R5KHRva2VuKTsKKyAgICAgICAgICAgIG1fc2l0ZS5pbnNlcnRIVE1MSHRt
bFN0YXJ0VGFnSW5Cb2R5KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IG9wdGlvblRhZykgewotICAgICAgICAgICAgaWYg
KGN1cnJlbnRFbGVtZW50KCktPmhhc1RhZ05hbWUob3B0aW9uVGFnKSkgeworICAgICAgICAgICAg
aWYgKG1fc2l0ZS5jdXJyZW50RWxlbWVudCgpLT5oYXNUYWdOYW1lKG9wdGlvblRhZykpIHsKICAg
ICAgICAgICAgICAgICBBdG9taWNIVE1MVG9rZW4gZW5kT3B0aW9uKEhUTUxUb2tlbjo6RW5kVGFn
LCBvcHRpb25UYWcubG9jYWxOYW1lKCkpOwogICAgICAgICAgICAgICAgIHByb2Nlc3NFbmRUYWco
ZW5kT3B0aW9uKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGluc2VydEVsZW1lbnQodG9r
ZW4pOworICAgICAgICAgICAgbV9zaXRlLmluc2VydEVsZW1lbnQodG9rZW4pOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gb3B0Z3Jv
dXBUYWcpIHsKLSAgICAgICAgICAgIGlmIChjdXJyZW50RWxlbWVudCgpLT5oYXNUYWdOYW1lKG9w
dGlvblRhZykpIHsKKyAgICAgICAgICAgIGlmIChtX3NpdGUuY3VycmVudEVsZW1lbnQoKS0+aGFz
VGFnTmFtZShvcHRpb25UYWcpKSB7CiAgICAgICAgICAgICAgICAgQXRvbWljSFRNTFRva2VuIGVu
ZE9wdGlvbihIVE1MVG9rZW46OkVuZFRhZywgb3B0aW9uVGFnLmxvY2FsTmFtZSgpKTsKICAgICAg
ICAgICAgICAgICBwcm9jZXNzRW5kVGFnKGVuZE9wdGlvbik7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQoKS0+aGFzVGFnTmFtZShvcHRncm91cFRhZykpIHsK
KyAgICAgICAgICAgIGlmIChtX3NpdGUuY3VycmVudEVsZW1lbnQoKS0+aGFzVGFnTmFtZShvcHRn
cm91cFRhZykpIHsKICAgICAgICAgICAgICAgICBBdG9taWNIVE1MVG9rZW4gZW5kT3B0Z3JvdXAo
SFRNTFRva2VuOjpFbmRUYWcsIG9wdGdyb3VwVGFnLmxvY2FsTmFtZSgpKTsKICAgICAgICAgICAg
ICAgICBwcm9jZXNzRW5kVGFnKGVuZE9wdGdyb3VwKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGluc2VydEVsZW1lbnQodG9rZW4pOworICAgICAgICAgICAgbV9zaXRlLmluc2VydEVsZW1l
bnQodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICh0
b2tlbi5uYW1lKCkgPT0gc2VsZWN0VGFnKSB7CkBAIC0xMTI2LDcgKzExMzcsNyBAQCBib29sIEhU
TUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0JvZHlFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2Vu
JiB0b2tlbikKIHsKICAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6RW5kVGFn
KTsKICAgICBBU1NFUlQodG9rZW4ubmFtZSgpID09IGJvZHlUYWcpOwotICAgIGlmICghbV9vcGVu
RWxlbWVudHMuaW5TY29wZShib2R5VGFnLmxvY2FsTmFtZSgpKSkgeworICAgIGlmICghbV9zaXRl
Lm9wZW5FbGVtZW50cygpLT5pblNjb3BlKGJvZHlUYWcubG9jYWxOYW1lKCkpKSB7CiAgICAgICAg
IHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMTEz
OCwyMyArMTE0OSwyMyBAQCBib29sIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0JvZHlFbmRUYWdG
b3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpw
cm9jZXNzQW55T3RoZXJFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsK
ICAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6RW5kVGFnKTsKLSAgICBIVE1M
RWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkKiByZWNvcmQgPSBtX29wZW5FbGVtZW50cy50b3BS
ZWNvcmQoKTsKKyAgICBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkKiByZWNvcmQgPSBt
X3NpdGUub3BlbkVsZW1lbnRzKCktPnRvcFJlY29yZCgpOwogICAgIHdoaWxlICgxKSB7CiAgICAg
ICAgIEVsZW1lbnQqIG5vZGUgPSByZWNvcmQtPmVsZW1lbnQoKTsKICAgICAgICAgaWYgKG5vZGUt
Pmhhc0xvY2FsTmFtZSh0b2tlbi5uYW1lKCkpKSB7CiAgICAgICAgICAgICBnZW5lcmF0ZUltcGxp
ZWRFbmRUYWdzKCk7Ci0gICAgICAgICAgICBpZiAoIWN1cnJlbnRFbGVtZW50KCktPmhhc0xvY2Fs
TmFtZSh0b2tlbi5uYW1lKCkpKSB7CisgICAgICAgICAgICBpZiAoIW1fc2l0ZS5jdXJyZW50RWxl
bWVudCgpLT5oYXNMb2NhbE5hbWUodG9rZW4ubmFtZSgpKSkgewogICAgICAgICAgICAgICAgIHBh
cnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGVpdGhl
ciBhIGJ1ZyBpbiB0aGUgc3BlYywgb3IgYSBidWcgaW4gb3VyCiAgICAgICAgICAgICAgICAgLy8g
aW1wbGVtZW50YXRpb24uICBGaWxlZCBhIGJ1ZyB3aXRoIEhUTUw1OgogICAgICAgICAgICAgICAg
IC8vIGh0dHA6Ly93d3cudzMub3JnL0J1Z3MvUHVibGljL3Nob3dfYnVnLmNnaT9pZD0xMDA4MAog
ICAgICAgICAgICAgICAgIC8vIFdlIG1pZ2h0IGhhdmUgYWxyZWFkeSBwb3BwZWQgdGhlIG5vZGUg
Zm9yIHRoZSB0b2tlbiBpbgogICAgICAgICAgICAgICAgIC8vIGdlbmVyYXRlSW1wbGllZEVuZFRh
Z3MsIGp1c3QgYWJvcnQuCi0gICAgICAgICAgICAgICAgaWYgKCFtX29wZW5FbGVtZW50cy5jb250
YWlucyhub2RlKSkKKyAgICAgICAgICAgICAgICBpZiAoIW1fc2l0ZS5vcGVuRWxlbWVudHMoKS0+
Y29udGFpbnMobm9kZSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIG1fb3BlbkVsZW1lbnRzLnBvcFVudGlsKG5vZGUpOwotICAgICAgICAg
ICAgbV9vcGVuRWxlbWVudHMucG9wKCk7CisgICAgICAgICAgICBtX3NpdGUub3BlbkVsZW1lbnRz
KCktPnBvcFVudGlsKG5vZGUpOworICAgICAgICAgICAgbV9zaXRlLm9wZW5FbGVtZW50cygpLT5w
b3AoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAvLyAhcGhyYXNp
bmcgJiYgIWZvcm1hdHRpbmcgPT0gc2NvcGluZyB8fCBzcGVjaWFsCkBAIC0xMTcxLDcgKzExODIs
NyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0FueU90aGVyRW5kVGFnRm9ySW5Cb2R5
KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3Jk
KiBIVE1MVHJlZUJ1aWxkZXI6OmZ1cnRoZXN0QmxvY2tGb3JGb3JtYXR0aW5nRWxlbWVudChFbGVt
ZW50KiBmb3JtYXR0aW5nRWxlbWVudCkKIHsKICAgICBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50
UmVjb3JkKiBmdXJ0aGVzdEJsb2NrID0gMDsKLSAgICBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50
UmVjb3JkKiByZWNvcmQgPSBtX29wZW5FbGVtZW50cy50b3BSZWNvcmQoKTsKKyAgICBIVE1MRWxl
bWVudFN0YWNrOjpFbGVtZW50UmVjb3JkKiByZWNvcmQgPSBtX3NpdGUub3BlbkVsZW1lbnRzKCkt
PnRvcFJlY29yZCgpOwogICAgIGZvciAoOyByZWNvcmQ7IHJlY29yZCA9IHJlY29yZC0+bmV4dCgp
KSB7CiAgICAgICAgIGlmIChyZWNvcmQtPmVsZW1lbnQoKSA9PSBmb3JtYXR0aW5nRWxlbWVudCkK
ICAgICAgICAgICAgIHJldHVybiBmdXJ0aGVzdEJsb2NrOwpAQCAtMTE4Nyw3ICsxMTk4LDcgQEAg
SFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogSFRNTFRyZWVCdWlsZGVyOjpmdXJ0aGVz
dEJsb2NrRm9yRm9ybWF0dGluZ0VsZW0KIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpmaW5kRm9zdGVy
UGFyZW50Rm9yKEVsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgRWxlbWVudCogZm9zdGVyUGFyZW50
RWxlbWVudCA9IDA7Ci0gICAgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCogbGFzdFRh
YmxlRWxlbWVudFJlY29yZCA9IG1fb3BlbkVsZW1lbnRzLnRvcG1vc3QodGFibGVUYWcubG9jYWxO
YW1lKCkpOworICAgIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIGxhc3RUYWJsZUVs
ZW1lbnRSZWNvcmQgPSBtX3NpdGUub3BlbkVsZW1lbnRzKCktPnRvcG1vc3QodGFibGVUYWcubG9j
YWxOYW1lKCkpOwogICAgIGlmIChsYXN0VGFibGVFbGVtZW50UmVjb3JkKSB7CiAgICAgICAgIEVs
ZW1lbnQqIGxhc3RUYWJsZUVsZW1lbnQgPSBsYXN0VGFibGVFbGVtZW50UmVjb3JkLT5lbGVtZW50
KCk7CiAgICAgICAgIGlmIChsYXN0VGFibGVFbGVtZW50LT5wYXJlbnQoKSkgewpAQCAtMTIwMCw3
ICsxMjExLDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmZpbmRGb3N0ZXJQYXJlbnRGb3IoRWxl
bWVudCogZWxlbWVudCkKICAgICAgICAgZm9zdGVyUGFyZW50RWxlbWVudCA9IGxhc3RUYWJsZUVs
ZW1lbnRSZWNvcmQtPm5leHQoKS0+ZWxlbWVudCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFT
U0VSVChtX2lzUGFyc2luZ0ZyYWdtZW50KTsKLSAgICAgICAgZm9zdGVyUGFyZW50RWxlbWVudCA9
IG1fb3BlbkVsZW1lbnRzLmJvdHRvbSgpOyAvLyA8aHRtbD4gZWxlbWVudAorICAgICAgICBmb3N0
ZXJQYXJlbnRFbGVtZW50ID0gbV9zaXRlLm9wZW5FbGVtZW50cygpLT5ib3R0b20oKTsgLy8gPGh0
bWw+IGVsZW1lbnQKICAgICB9CiAKICAgICBmb3N0ZXJQYXJlbnRFbGVtZW50LT5wYXJzZXJBZGRD
aGlsZChlbGVtZW50KTsKQEAgLTEyMjUsMzQgKzEyMzYsMzQgQEAgdm9pZCBIVE1MVHJlZUJ1aWxk
ZXI6OmNhbGxUaGVBZG9wdGlvbkFnZW5jeShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewogICAg
IHdoaWxlICgxKSB7CiAgICAgICAgIC8vIDEuCi0gICAgICAgIEVsZW1lbnQqIGZvcm1hdHRpbmdF
bGVtZW50ID0gbV9hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuY2xvc2VzdEVsZW1lbnRJblNjb3Bl
V2l0aE5hbWUodG9rZW4ubmFtZSgpKTsKLSAgICAgICAgaWYgKCFmb3JtYXR0aW5nRWxlbWVudCB8
fCAhbV9vcGVuRWxlbWVudHMuaW5TY29wZShmb3JtYXR0aW5nRWxlbWVudCkpIHsKKyAgICAgICAg
RWxlbWVudCogZm9ybWF0dGluZ0VsZW1lbnQgPSBtX3NpdGUuYWN0aXZlRm9ybWF0dGluZ0VsZW1l
bnRzKCktPmNsb3Nlc3RFbGVtZW50SW5TY29wZVdpdGhOYW1lKHRva2VuLm5hbWUoKSk7CisgICAg
ICAgIGlmICghZm9ybWF0dGluZ0VsZW1lbnQgfHwgIW1fc2l0ZS5vcGVuRWxlbWVudHMoKS0+aW5T
Y29wZShmb3JtYXR0aW5nRWxlbWVudCkpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4p
OwogICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsgLy8gQ2hlY2sgdGhlIHN0YWNrIG9mIG9w
ZW4gZWxlbWVudHMgZm9yIGEgbW9yZSBzcGVjaWZpYyBwYXJzZSBlcnJvci4KICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQotICAgICAgICBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVj
b3JkKiBmb3JtYXR0aW5nRWxlbWVudFJlY29yZCA9IG1fb3BlbkVsZW1lbnRzLmZpbmQoZm9ybWF0
dGluZ0VsZW1lbnQpOworICAgICAgICBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkKiBm
b3JtYXR0aW5nRWxlbWVudFJlY29yZCA9IG1fc2l0ZS5vcGVuRWxlbWVudHMoKS0+ZmluZChmb3Jt
YXR0aW5nRWxlbWVudCk7CiAgICAgICAgIGlmICghZm9ybWF0dGluZ0VsZW1lbnRSZWNvcmQpIHsK
ICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwotICAgICAgICAgICAgbV9hY3RpdmVGb3Jt
YXR0aW5nRWxlbWVudHMucmVtb3ZlKGZvcm1hdHRpbmdFbGVtZW50KTsKKyAgICAgICAgICAgIG1f
c2l0ZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+cmVtb3ZlKGZvcm1hdHRpbmdFbGVtZW50
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAoZm9ybWF0dGlu
Z0VsZW1lbnQgIT0gY3VycmVudEVsZW1lbnQoKSkKKyAgICAgICAgaWYgKGZvcm1hdHRpbmdFbGVt
ZW50ICE9IG1fc2l0ZS5jdXJyZW50RWxlbWVudCgpKQogICAgICAgICAgICAgcGFyc2VFcnJvcih0
b2tlbik7CiAgICAgICAgIC8vIDIuCiAgICAgICAgIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRS
ZWNvcmQqIGZ1cnRoZXN0QmxvY2sgPSBmdXJ0aGVzdEJsb2NrRm9yRm9ybWF0dGluZ0VsZW1lbnQo
Zm9ybWF0dGluZ0VsZW1lbnQpOwogICAgICAgICAvLyAzLgogICAgICAgICBpZiAoIWZ1cnRoZXN0
QmxvY2spIHsKLSAgICAgICAgICAgIG1fb3BlbkVsZW1lbnRzLnBvcFVudGlsKGZvcm1hdHRpbmdF
bGVtZW50KTsKLSAgICAgICAgICAgIG1fb3BlbkVsZW1lbnRzLnBvcCgpOwotICAgICAgICAgICAg
bV9hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucmVtb3ZlKGZvcm1hdHRpbmdFbGVtZW50KTsKKyAg
ICAgICAgICAgIG1fc2l0ZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWwoZm9ybWF0dGluZ0VsZW1l
bnQpOworICAgICAgICAgICAgbV9zaXRlLm9wZW5FbGVtZW50cygpLT5wb3AoKTsKKyAgICAgICAg
ICAgIG1fc2l0ZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+cmVtb3ZlKGZvcm1hdHRpbmdF
bGVtZW50KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAvLyA0Lgog
ICAgICAgICBBU1NFUlQoZnVydGhlc3RCbG9jay0+aXNBYm92ZShmb3JtYXR0aW5nRWxlbWVudFJl
Y29yZCkpOwogICAgICAgICBFbGVtZW50KiBjb21tb25BbmNlc3RvciA9IGZvcm1hdHRpbmdFbGVt
ZW50UmVjb3JkLT5uZXh0KCktPmVsZW1lbnQoKTsKICAgICAgICAgLy8gNS4KLSAgICAgICAgSFRN
TEZvcm1hdHRpbmdFbGVtZW50TGlzdDo6Qm9va21hcmsgYm9va21hcmsgPSBtX2FjdGl2ZUZvcm1h
dHRpbmdFbGVtZW50cy5ib29rbWFya0Zvcihmb3JtYXR0aW5nRWxlbWVudCk7CisgICAgICAgIEhU
TUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OkJvb2ttYXJrIGJvb2ttYXJrID0gbV9zaXRlLmFjdGl2
ZUZvcm1hdHRpbmdFbGVtZW50cygpLT5ib29rbWFya0Zvcihmb3JtYXR0aW5nRWxlbWVudCk7CiAg
ICAgICAgIC8vIDYuCiAgICAgICAgIEhUTUxFbGVtZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIG5v
ZGUgPSBmdXJ0aGVzdEJsb2NrOwogICAgICAgICBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVj
b3JkKiBuZXh0Tm9kZSA9IG5vZGUtPm5leHQoKTsKQEAgLTEyNjMsOCArMTI3NCw4IEBAIHZvaWQg
SFRNTFRyZWVCdWlsZGVyOjpjYWxsVGhlQWRvcHRpb25BZ2VuY3koQXRvbWljSFRNTFRva2VuJiB0
b2tlbikKICAgICAgICAgICAgIEFTU0VSVChub2RlKTsKICAgICAgICAgICAgIG5leHROb2RlID0g
bm9kZS0+bmV4dCgpOyAvLyBTYXZlIG5vZGUtPm5leHQoKSBmb3IgdGhlIG5leHQgaXRlcmF0aW9u
IGluIGNhc2Ugbm9kZSBpcyBkZWxldGVkIGluIDYuMi4KICAgICAgICAgICAgIC8vIDYuMgotICAg
ICAgICAgICAgaWYgKCFtX2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jb250YWlucyhub2RlLT5l
bGVtZW50KCkpKSB7Ci0gICAgICAgICAgICAgICAgbV9vcGVuRWxlbWVudHMucmVtb3ZlKG5vZGUt
PmVsZW1lbnQoKSk7CisgICAgICAgICAgICBpZiAoIW1fc2l0ZS5hY3RpdmVGb3JtYXR0aW5nRWxl
bWVudHMoKS0+Y29udGFpbnMobm9kZS0+ZWxlbWVudCgpKSkgeworICAgICAgICAgICAgICAgIG1f
c2l0ZS5vcGVuRWxlbWVudHMoKS0+cmVtb3ZlKG5vZGUtPmVsZW1lbnQoKSk7CiAgICAgICAgICAg
ICAgICAgbm9kZSA9IDA7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9
CkBAIC0xMjc2LDggKzEyODcsOCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6Y2FsbFRoZUFkb3B0
aW9uQWdlbmN5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICBBdG9taWNIVE1M
VG9rZW4gZmFrZVRva2VuKEhUTUxUb2tlbjo6U3RhcnRUYWcsIG5vZGUtPmVsZW1lbnQoKS0+bG9j
YWxOYW1lKCkpOwogICAgICAgICAgICAgLy8gSXMgY3JlYXRlRWxlbWVudCBjb3JyZWN0PyAoaW5z
dGVhZCBvZiBpbnNlcnRFbGVtZW50KQogICAgICAgICAgICAgLy8gRG9lcyB0aGlzIGNvZGUgZXZl
ciBsZWF2ZSBuZXdFbGVtZW50IHVuYXR0YWNoZWQ/Ci0gICAgICAgICAgICBSZWZQdHI8RWxlbWVu
dD4gbmV3RWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoZmFrZVRva2VuKTsKLSAgICAgICAgICAgIEhU
TUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OkVudHJ5KiBub2RlRW50cnkgPSBtX2FjdGl2ZUZvcm1h
dHRpbmdFbGVtZW50cy5maW5kKG5vZGUtPmVsZW1lbnQoKSk7CisgICAgICAgICAgICBSZWZQdHI8
RWxlbWVudD4gbmV3RWxlbWVudCA9IG1fc2l0ZS5jcmVhdGVFbGVtZW50KGZha2VUb2tlbik7Cisg
ICAgICAgICAgICBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0OjpFbnRyeSogbm9kZUVudHJ5ID0g
bV9zaXRlLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLT5maW5kKG5vZGUtPmVsZW1lbnQoKSk7
CiAgICAgICAgICAgICBub2RlRW50cnktPnJlcGxhY2VFbGVtZW50KG5ld0VsZW1lbnQuZ2V0KCkp
OwogICAgICAgICAgICAgbm9kZS0+cmVwbGFjZUVsZW1lbnQobmV3RWxlbWVudC5yZWxlYXNlKCkp
OwogICAgICAgICAgICAgLy8gNi40IC0tIEludGVudGlvbmFsbHkgb3V0IG9mIG9yZGVyIHRvIGhh
bmRsZSB0aGUgY2FzZSB3aGVyZSBub2RlCkBAIC0xMzA3LDE3ICsxMzE4LDE3IEBAIHZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpjYWxsVGhlQWRvcHRpb25BZ2VuY3koQXRvbWljSFRNTFRva2VuJiB0b2tl
bikKICAgICAgICAgLy8gOAogICAgICAgICAvLyBGSVhNRTogV2UncmUgc3VwcG9zZWQgdG8gc2F2
ZSB0aGUgb3JpZ2luYWwgdG9rZW4gaW4gdGhlIGVudHJ5LgogICAgICAgICBBdG9taWNIVE1MVG9r
ZW4gZmFrZVRva2VuKEhUTUxUb2tlbjo6U3RhcnRUYWcsIGZvcm1hdHRpbmdFbGVtZW50LT5sb2Nh
bE5hbWUoKSk7Ci0gICAgICAgIFJlZlB0cjxFbGVtZW50PiBuZXdFbGVtZW50ID0gY3JlYXRlRWxl
bWVudChmYWtlVG9rZW4pOworICAgICAgICBSZWZQdHI8RWxlbWVudD4gbmV3RWxlbWVudCA9IG1f
c2l0ZS5jcmVhdGVFbGVtZW50KGZha2VUb2tlbik7CiAgICAgICAgIC8vIDkKICAgICAgICAgcmVw
YXJlbnRDaGlsZHJlbihmdXJ0aGVzdEJsb2NrLT5lbGVtZW50KCksIG5ld0VsZW1lbnQuZ2V0KCkp
OwogICAgICAgICAvLyAxMAogICAgICAgICBmdXJ0aGVzdEJsb2NrLT5lbGVtZW50KCktPnBhcnNl
ckFkZENoaWxkKG5ld0VsZW1lbnQpOwogICAgICAgICAvLyAxMQotICAgICAgICBtX2FjdGl2ZUZv
cm1hdHRpbmdFbGVtZW50cy5yZW1vdmUoZm9ybWF0dGluZ0VsZW1lbnQpOwotICAgICAgICBtX2Fj
dGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5pbnNlcnRBdChuZXdFbGVtZW50LmdldCgpLCBib29rbWFy
ayk7CisgICAgICAgIG1fc2l0ZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+cmVtb3ZlKGZv
cm1hdHRpbmdFbGVtZW50KTsKKyAgICAgICAgbV9zaXRlLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50
cygpLT5pbnNlcnRBdChuZXdFbGVtZW50LmdldCgpLCBib29rbWFyayk7CiAgICAgICAgIC8vIDEy
Ci0gICAgICAgIG1fb3BlbkVsZW1lbnRzLnJlbW92ZShmb3JtYXR0aW5nRWxlbWVudCk7Ci0gICAg
ICAgIG1fb3BlbkVsZW1lbnRzLmluc2VydEFib3ZlKG5ld0VsZW1lbnQsIGZ1cnRoZXN0QmxvY2sp
OworICAgICAgICBtX3NpdGUub3BlbkVsZW1lbnRzKCktPnJlbW92ZShmb3JtYXR0aW5nRWxlbWVu
dCk7CisgICAgICAgIG1fc2l0ZS5vcGVuRWxlbWVudHMoKS0+aW5zZXJ0QWJvdmUobmV3RWxlbWVu
dCwgZnVydGhlc3RCbG9jayk7CiAgICAgfQogfQogCkBAIC0xMzM1LDEwICsxMzQ2LDEwIEBAIHZv
aWQgSFRNTFRyZWVCdWlsZGVyOjpyZXNldEluc2VydGlvbk1vZGVBcHByb3ByaWF0ZWx5KCkKICAg
ICAvLyBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211
bHRpcGFnZS9wYXJzaW5nLmh0bWwjcmVzZXQtdGhlLWluc2VydGlvbi1tb2RlLWFwcHJvcHJpYXRl
bHkKICAgICBib29sIGxhc3QgPSBmYWxzZTsKICAgICBib29sIGZvcmVpZ24gPSBmYWxzZTsKLSAg
ICBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkKiBub2RlUmVjb3JkID0gbV9vcGVuRWxl
bWVudHMudG9wUmVjb3JkKCk7CisgICAgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVudFJlY29yZCog
bm9kZVJlY29yZCA9IG1fc2l0ZS5vcGVuRWxlbWVudHMoKS0+dG9wUmVjb3JkKCk7CiAgICAgd2hp
bGUgKDEpIHsKICAgICAgICAgRWxlbWVudCogbm9kZSA9IG5vZGVSZWNvcmQtPmVsZW1lbnQoKTsK
LSAgICAgICAgaWYgKG5vZGUgPT0gbV9vcGVuRWxlbWVudHMuYm90dG9tKCkpIHsKKyAgICAgICAg
aWYgKG5vZGUgPT0gbV9zaXRlLm9wZW5FbGVtZW50cygpLT5ib3R0b20oKSkgewogICAgICAgICAg
ICAgQVNTRVJUKG1faXNQYXJzaW5nRnJhZ21lbnQpOwogICAgICAgICAgICAgbGFzdCA9IHRydWU7
CiAgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOyAvLyBub2RlID0gbV9jb250ZXh0RWxlbWVu
dDsKQEAgLTE0MDYsNzYgKzE0MTcsNzYgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NF
bmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBpZiAodG9rZW4ubmFtZSgpID09IGFkZHJlc3NUYWcgfHwgdG9rZW4ubmFtZSgp
ID09IGFydGljbGVUYWcgfHwgdG9rZW4ubmFtZSgpID09IGFzaWRlVGFnIHx8IHRva2VuLm5hbWUo
KSA9PSBibG9ja3F1b3RlVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBidXR0b25UYWcgfHwgdG9rZW4u
bmFtZSgpID09IGNlbnRlclRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gImRldGFpbHMiIHx8IHRva2Vu
Lm5hbWUoKSA9PSBkaXJUYWcgfHwgdG9rZW4ubmFtZSgpID09IGRpdlRhZyB8fCB0b2tlbi5uYW1l
KCkgPT0gZGxUYWcgfHwgdG9rZW4ubmFtZSgpID09IGZpZWxkc2V0VGFnIHx8IHRva2VuLm5hbWUo
KSA9PSAiZmlndXJlIiB8fCB0b2tlbi5uYW1lKCkgPT0gZm9vdGVyVGFnIHx8IHRva2VuLm5hbWUo
KSA9PSBoZWFkZXJUYWcgfHwgdG9rZW4ubmFtZSgpID09IGhncm91cFRhZyB8fCB0b2tlbi5uYW1l
KCkgPT0gbGlzdGluZ1RhZyB8fCB0b2tlbi5uYW1lKCkgPT0gbWVudVRhZyB8fCB0b2tlbi5uYW1l
KCkgPT0gbmF2VGFnIHx8IHRva2VuLm5hbWUoKSA9PSBvbFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0g
cHJlVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBzZWN0aW9uVGFnIHx8IHRva2VuLm5hbWUoKSA9PSB1
bFRhZykgewotICAgICAgICBpZiAoIW1fb3BlbkVsZW1lbnRzLmluU2NvcGUodG9rZW4ubmFtZSgp
KSkgeworICAgICAgICBpZiAoIW1fc2l0ZS5vcGVuRWxlbWVudHMoKS0+aW5TY29wZSh0b2tlbi5u
YW1lKCkpKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICBnZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCk7Ci0gICAg
ICAgIGlmIChjdXJyZW50RWxlbWVudCgpLT50YWdRTmFtZSgpICE9IHRva2VuLm5hbWUoKSkKKyAg
ICAgICAgaWYgKG1fc2l0ZS5jdXJyZW50RWxlbWVudCgpLT50YWdRTmFtZSgpICE9IHRva2VuLm5h
bWUoKSkKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwotICAgICAgICBtX29wZW5FbGVt
ZW50cy5wb3BVbnRpbCh0b2tlbi5uYW1lKCkpOwotICAgICAgICBtX29wZW5FbGVtZW50cy5wb3Ao
KTsKKyAgICAgICAgbV9zaXRlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbCh0b2tlbi5uYW1lKCkp
OworICAgICAgICBtX3NpdGUub3BlbkVsZW1lbnRzKCktPnBvcCgpOwogICAgIH0KICAgICBpZiAo
dG9rZW4ubmFtZSgpID09IGZvcm1UYWcpIHsKLSAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IG5vZGUg
PSBtX2Zvcm1FbGVtZW50LnJlbGVhc2UoKTsKLSAgICAgICAgaWYgKCFub2RlIHx8ICFtX29wZW5F
bGVtZW50cy5pblNjb3BlKG5vZGUuZ2V0KCkpKSB7CisgICAgICAgIFJlZlB0cjxFbGVtZW50PiBu
b2RlID0gbV9zaXRlLnJlbGVhc2VGb3JtKCk7CisgICAgICAgIGlmICghbm9kZSB8fCAhbV9zaXRl
Lm9wZW5FbGVtZW50cygpLT5pblNjb3BlKG5vZGUuZ2V0KCkpKSB7CiAgICAgICAgICAgICBwYXJz
ZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBn
ZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCk7Ci0gICAgICAgIGlmIChjdXJyZW50RWxlbWVudCgpICE9
IG5vZGUuZ2V0KCkpCisgICAgICAgIGlmIChtX3NpdGUuY3VycmVudEVsZW1lbnQoKSAhPSBub2Rl
LmdldCgpKQogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7Ci0gICAgICAgIG1fb3BlbkVs
ZW1lbnRzLnJlbW92ZShub2RlLmdldCgpKTsKKyAgICAgICAgbV9zaXRlLm9wZW5FbGVtZW50cygp
LT5yZW1vdmUobm9kZS5nZXQoKSk7CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gcFRh
ZykgewotICAgICAgICBpZiAoIW1fb3BlbkVsZW1lbnRzLmluU2NvcGUodG9rZW4ubmFtZSgpKSkg
eworICAgICAgICBpZiAoIW1fc2l0ZS5vcGVuRWxlbWVudHMoKS0+aW5TY29wZSh0b2tlbi5uYW1l
KCkpKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHByb2Nl
c3NGYWtlU3RhcnRUYWcocFRhZyk7Ci0gICAgICAgICAgICBBU1NFUlQobV9vcGVuRWxlbWVudHMu
aW5TY29wZSh0b2tlbi5uYW1lKCkpKTsKKyAgICAgICAgICAgIEFTU0VSVChtX3NpdGUub3BlbkVs
ZW1lbnRzKCktPmluU2NvcGUodG9rZW4ubmFtZSgpKSk7CiAgICAgICAgICAgICBwcm9jZXNzRW5k
VGFnKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBnZW5l
cmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbih0b2tlbi5uYW1lKCkpOwotICAgICAgICBp
ZiAoIWN1cnJlbnRFbGVtZW50KCktPmhhc0xvY2FsTmFtZSh0b2tlbi5uYW1lKCkpKQorICAgICAg
ICBpZiAoIW1fc2l0ZS5jdXJyZW50RWxlbWVudCgpLT5oYXNMb2NhbE5hbWUodG9rZW4ubmFtZSgp
KSkKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwotICAgICAgICBtX29wZW5FbGVtZW50
cy5wb3BVbnRpbCh0b2tlbi5uYW1lKCkpOwotICAgICAgICBtX29wZW5FbGVtZW50cy5wb3AoKTsK
KyAgICAgICAgbV9zaXRlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbCh0b2tlbi5uYW1lKCkpOwor
ICAgICAgICBtX3NpdGUub3BlbkVsZW1lbnRzKCktPnBvcCgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gbGlUYWcpIHsKLSAgICAgICAgaWYgKCFtX29w
ZW5FbGVtZW50cy5pbkxpc3RJdGVtU2NvcGUodG9rZW4ubmFtZSgpKSkgeworICAgICAgICBpZiAo
IW1fc2l0ZS5vcGVuRWxlbWVudHMoKS0+aW5MaXN0SXRlbVNjb3BlKHRva2VuLm5hbWUoKSkpIHsK
ICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgICAgIGdlbmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRoRXhjbHVzaW9uKHRva2Vu
Lm5hbWUoKSk7Ci0gICAgICAgIGlmICghY3VycmVudEVsZW1lbnQoKS0+aGFzTG9jYWxOYW1lKHRv
a2VuLm5hbWUoKSkpCisgICAgICAgIGlmICghbV9zaXRlLmN1cnJlbnRFbGVtZW50KCktPmhhc0xv
Y2FsTmFtZSh0b2tlbi5uYW1lKCkpKQogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7Ci0g
ICAgICAgIG1fb3BlbkVsZW1lbnRzLnBvcFVudGlsKHRva2VuLm5hbWUoKSk7Ci0gICAgICAgIG1f
b3BlbkVsZW1lbnRzLnBvcCgpOworICAgICAgICBtX3NpdGUub3BlbkVsZW1lbnRzKCktPnBvcFVu
dGlsKHRva2VuLm5hbWUoKSk7CisgICAgICAgIG1fc2l0ZS5vcGVuRWxlbWVudHMoKS0+cG9wKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBkZFRhZyB8
fCB0b2tlbi5uYW1lKCkgPT0gZHRUYWcpIHsKLSAgICAgICAgaWYgKCFtX29wZW5FbGVtZW50cy5p
blNjb3BlKHRva2VuLm5hbWUoKSkpIHsKKyAgICAgICAgaWYgKCFtX3NpdGUub3BlbkVsZW1lbnRz
KCktPmluU2NvcGUodG9rZW4ubmFtZSgpKSkgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tl
bik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgZ2VuZXJhdGVJbXBs
aWVkRW5kVGFnc1dpdGhFeGNsdXNpb24odG9rZW4ubmFtZSgpKTsKLSAgICAgICAgaWYgKCFjdXJy
ZW50RWxlbWVudCgpLT5oYXNMb2NhbE5hbWUodG9rZW4ubmFtZSgpKSkKKyAgICAgICAgaWYgKCFt
X3NpdGUuY3VycmVudEVsZW1lbnQoKS0+aGFzTG9jYWxOYW1lKHRva2VuLm5hbWUoKSkpCiAgICAg
ICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKLSAgICAgICAgbV9vcGVuRWxlbWVudHMucG9wVW50
aWwodG9rZW4ubmFtZSgpKTsKLSAgICAgICAgbV9vcGVuRWxlbWVudHMucG9wKCk7CisgICAgICAg
IG1fc2l0ZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWwodG9rZW4ubmFtZSgpKTsKKyAgICAgICAg
bV9zaXRlLm9wZW5FbGVtZW50cygpLT5wb3AoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBpZiAoaXNOdW1iZXJlZEhlYWRlclRhZyh0b2tlbi5uYW1lKCkpKSB7Ci0gICAgICAgIGlmICgh
bV9vcGVuRWxlbWVudHMuaW5TY29wZSh0b2tlbi5uYW1lKCkpKSB7CisgICAgICAgIGlmICghbV9z
aXRlLm9wZW5FbGVtZW50cygpLT5pblNjb3BlKHRva2VuLm5hbWUoKSkpIHsKICAgICAgICAgICAg
IHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgIGdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTsKLSAgICAgICAgaWYgKCFjdXJyZW50RWxlbWVu
dCgpLT5oYXNMb2NhbE5hbWUodG9rZW4ubmFtZSgpKSkKKyAgICAgICAgaWYgKCFtX3NpdGUuY3Vy
cmVudEVsZW1lbnQoKS0+aGFzTG9jYWxOYW1lKHRva2VuLm5hbWUoKSkpCiAgICAgICAgICAgICBw
YXJzZUVycm9yKHRva2VuKTsKLSAgICAgICAgbV9vcGVuRWxlbWVudHMucG9wVW50aWwodG9rZW4u
bmFtZSgpKTsKLSAgICAgICAgbV9vcGVuRWxlbWVudHMucG9wKCk7CisgICAgICAgIG1fc2l0ZS5v
cGVuRWxlbWVudHMoKS0+cG9wVW50aWwodG9rZW4ubmFtZSgpKTsKKyAgICAgICAgbV9zaXRlLm9w
ZW5FbGVtZW50cygpLT5wb3AoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAodG9r
ZW4ubmFtZSgpID09ICJzYXJjYXNtIikgewpAQCAtMTQ4NywxNiArMTQ5OCwxNiBAQCB2b2lkIEhU
TUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRv
a2VuKQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYXBw
bGV0VGFnIHx8IHRva2VuLm5hbWUoKSA9PSBtYXJxdWVlVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBv
YmplY3RUYWcpIHsKLSAgICAgICAgaWYgKCFtX29wZW5FbGVtZW50cy5pblNjb3BlKHRva2VuLm5h
bWUoKSkpIHsKKyAgICAgICAgaWYgKCFtX3NpdGUub3BlbkVsZW1lbnRzKCktPmluU2NvcGUodG9r
ZW4ubmFtZSgpKSkgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpOwot
ICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQoKS0+dGFnUU5hbWUoKSAhPSB0b2tlbi5uYW1lKCkp
CisgICAgICAgIGlmIChtX3NpdGUuY3VycmVudEVsZW1lbnQoKS0+dGFnUU5hbWUoKSAhPSB0b2tl
bi5uYW1lKCkpCiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKLSAgICAgICAgbV9vcGVu
RWxlbWVudHMucG9wVW50aWwodG9rZW4ubmFtZSgpKTsKLSAgICAgICAgbV9vcGVuRWxlbWVudHMu
cG9wKCk7Ci0gICAgICAgIG1fYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmNsZWFyVG9MYXN0TWFy
a2VyKCk7CisgICAgICAgIG1fc2l0ZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWwodG9rZW4ubmFt
ZSgpKTsKKyAgICAgICAgbV9zaXRlLm9wZW5FbGVtZW50cygpLT5wb3AoKTsKKyAgICAgICAgbV9z
aXRlLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLT5jbGVhclRvTGFzdE1hcmtlcigpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYnJUYWcpIHsKQEAg
LTE1MDQsNyArMTUxNSw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9y
SW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIHJlY29uc3RydWN0VGhlQWN0
aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7CiAgICAgICAgIC8vIE5vdGljZSB0aGF0IHdlIGxvc2Ug
dGhlIGF0dHJpYnV0ZXMuCiAgICAgICAgIEF0b21pY0hUTUxUb2tlbiBzdGFydEJyKEhUTUxUb2tl
bjo6U3RhcnRUYWcsIHRva2VuLm5hbWUoKSk7Ci0gICAgICAgIGluc2VydFNlbGZDbG9zaW5nRWxl
bWVudChzdGFydEJyKTsKKyAgICAgICAgbV9zaXRlLmluc2VydFNlbGZDbG9zaW5nRWxlbWVudChz
dGFydEJyKTsKICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC0xNTEzLDMwICsxNTI0LDMwIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9j
ZXNzRW5kVGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAKIGJvb2wgSFRNTFRy
ZWVCdWlsZGVyOjpwcm9jZXNzQ2FwdGlvbkVuZFRhZ0ZvckluQ2FwdGlvbigpCiB7Ci0gICAgaWYg
KCFtX29wZW5FbGVtZW50cy5pblRhYmxlU2NvcGUoY2FwdGlvblRhZy5sb2NhbE5hbWUoKSkpIHsK
KyAgICBpZiAoIW1fc2l0ZS5vcGVuRWxlbWVudHMoKS0+aW5UYWJsZVNjb3BlKGNhcHRpb25UYWcu
bG9jYWxOYW1lKCkpKSB7CiAgICAgICAgIEFTU0VSVChtX2lzUGFyc2luZ0ZyYWdtZW50KTsKICAg
ICAgICAgLy8gRklYTUU6IHBhcnNlIGVycm9yCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAgICAgZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpOwotICAgIC8vIEZJWE1FOiBwYXJzZSBlcnJv
ciBpZiAoIWN1cnJlbnRFbGVtZW50KCktPmhhc1RhZ05hbWUoY2FwdGlvblRhZykpCi0gICAgbV9v
cGVuRWxlbWVudHMucG9wVW50aWwoY2FwdGlvblRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgbV9vcGVu
RWxlbWVudHMucG9wKCk7Ci0gICAgbV9hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuY2xlYXJUb0xh
c3RNYXJrZXIoKTsKKyAgICAvLyBGSVhNRTogcGFyc2UgZXJyb3IgaWYgKCFtX3NpdGUuY3VycmVu
dEVsZW1lbnQoKS0+aGFzVGFnTmFtZShjYXB0aW9uVGFnKSkKKyAgICBtX3NpdGUub3BlbkVsZW1l
bnRzKCktPnBvcFVudGlsKGNhcHRpb25UYWcubG9jYWxOYW1lKCkpOworICAgIG1fc2l0ZS5vcGVu
RWxlbWVudHMoKS0+cG9wKCk7CisgICAgbV9zaXRlLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygp
LT5jbGVhclRvTGFzdE1hcmtlcigpOwogICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluVGFibGVNb2Rl
OwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Ry
RW5kVGFnRm9ySW5Sb3coKQogewotICAgIGlmICghbV9vcGVuRWxlbWVudHMuaW5UYWJsZVNjb3Bl
KHRyVGFnLmxvY2FsTmFtZSgpKSkgeworICAgIGlmICghbV9zaXRlLm9wZW5FbGVtZW50cygpLT5p
blRhYmxlU2NvcGUodHJUYWcubG9jYWxOYW1lKCkpKSB7CiAgICAgICAgIEFTU0VSVChtX2lzUGFy
c2luZ0ZyYWdtZW50KTsKICAgICAgICAgLy8gRklYTUU6IHBhcnNlIGVycm9yCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9Ci0gICAgbV9vcGVuRWxlbWVudHMucG9wVW50aWxUYWJsZVJvd1Nj
b3BlTWFya2VyKCk7Ci0gICAgQVNTRVJUKGN1cnJlbnRFbGVtZW50KCktPmhhc1RhZ05hbWUodHJU
YWcpKTsKLSAgICBtX29wZW5FbGVtZW50cy5wb3AoKTsKKyAgICBtX3NpdGUub3BlbkVsZW1lbnRz
KCktPnBvcFVudGlsVGFibGVSb3dTY29wZU1hcmtlcigpOworICAgIEFTU0VSVChtX3NpdGUuY3Vy
cmVudEVsZW1lbnQoKS0+aGFzVGFnTmFtZSh0clRhZykpOworICAgIG1fc2l0ZS5vcGVuRWxlbWVu
dHMoKS0+cG9wKCk7CiAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5UYWJsZUJvZHlNb2RlOwogICAg
IHJldHVybiB0cnVlOwogfQpAQCAtMTU0NSwxMyArMTU1NiwxMyBAQCB2b2lkIEhUTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluVGFibGUoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsK
ICAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6RW5kVGFnKTsKICAgICBpZiAo
dG9rZW4ubmFtZSgpID09IHRhYmxlVGFnKSB7Ci0gICAgICAgIGlmICghbV9vcGVuRWxlbWVudHMu
aW5UYWJsZVNjb3BlKHRva2VuLm5hbWUoKSkpIHsKKyAgICAgICAgaWYgKCFtX3NpdGUub3BlbkVs
ZW1lbnRzKCktPmluVGFibGVTY29wZSh0b2tlbi5uYW1lKCkpKSB7CiAgICAgICAgICAgICBBU1NF
UlQobV9pc1BhcnNpbmdGcmFnbWVudCk7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBtX29wZW5FbGVtZW50cy5w
b3BVbnRpbCh0YWJsZVRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgIG1fb3BlbkVsZW1lbnRzLnBv
cCgpOworICAgICAgICBtX3NpdGUub3BlbkVsZW1lbnRzKCktPnBvcFVudGlsKHRhYmxlVGFnLmxv
Y2FsTmFtZSgpKTsKKyAgICAgICAgbV9zaXRlLm9wZW5FbGVtZW50cygpLT5wb3AoKTsKICAgICAg
ICAgcmVzZXRJbnNlcnRpb25Nb2RlQXBwcm9wcmlhdGVseSgpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtMTU5MCw3ICsxNjAxLDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NF
bmRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICBjYXNlIEluSGVhZE1vZGU6CiAgICAg
ICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5IZWFkTW9kZSk7CiAgICAgICAgIGlmICh0
b2tlbi5uYW1lKCkgPT0gaGVhZFRhZykgewotICAgICAgICAgICAgbV9vcGVuRWxlbWVudHMucG9w
SFRNTEhlYWRFbGVtZW50KCk7CisgICAgICAgICAgICBtX3NpdGUub3BlbkVsZW1lbnRzKCktPnBv
cEhUTUxIZWFkRWxlbWVudCgpOwogICAgICAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShBZnRlckhl
YWRNb2RlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTY2OSw3ICsxNjgw
LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2Vu
JiB0b2tlbikKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAoaXNU
YWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkpIHsKLSAgICAgICAgICAgIGlmICghbV9v
cGVuRWxlbWVudHMuaW5UYWJsZVNjb3BlKHRva2VuLm5hbWUoKSkpIHsKKyAgICAgICAgICAgIGlm
ICghbV9zaXRlLm9wZW5FbGVtZW50cygpLT5pblRhYmxlU2NvcGUodG9rZW4ubmFtZSgpKSkgewog
ICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KQEAgLTE2ODcsMTggKzE2OTgsMTggQEAgdm9pZCBIVE1MVHJlZUJ1
aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICBjYXNlIElu
Q2VsbE1vZGU6CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5DZWxsTW9kZSk7
CiAgICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGhUYWcgfHwgdG9rZW4ubmFtZSgpID09IHRk
VGFnKSB7Ci0gICAgICAgICAgICBpZiAoIW1fb3BlbkVsZW1lbnRzLmluVGFibGVTY29wZSh0b2tl
bi5uYW1lKCkpKSB7CisgICAgICAgICAgICBpZiAoIW1fc2l0ZS5vcGVuRWxlbWVudHMoKS0+aW5U
YWJsZVNjb3BlKHRva2VuLm5hbWUoKSkpIHsKICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKHRv
a2VuKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBnZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCk7Ci0gICAgICAgICAgICBpZiAoIWN1cnJlbnRFbGVt
ZW50KCktPmhhc0xvY2FsTmFtZSh0b2tlbi5uYW1lKCkpKQorICAgICAgICAgICAgaWYgKCFtX3Np
dGUuY3VycmVudEVsZW1lbnQoKS0+aGFzTG9jYWxOYW1lKHRva2VuLm5hbWUoKSkpCiAgICAgICAg
ICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7Ci0gICAgICAgICAgICBtX29wZW5FbGVtZW50cy5w
b3BVbnRpbCh0b2tlbi5uYW1lKCkpOwotICAgICAgICAgICAgbV9vcGVuRWxlbWVudHMucG9wKCk7
Ci0gICAgICAgICAgICBtX2FjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jbGVhclRvTGFzdE1hcmtl
cigpOworICAgICAgICAgICAgbV9zaXRlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbCh0b2tlbi5u
YW1lKCkpOworICAgICAgICAgICAgbV9zaXRlLm9wZW5FbGVtZW50cygpLT5wb3AoKTsKKyAgICAg
ICAgICAgIG1fc2l0ZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+Y2xlYXJUb0xhc3RNYXJr
ZXIoKTsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluUm93TW9kZTsKLSAgICAgICAg
ICAgIEFTU0VSVChjdXJyZW50RWxlbWVudCgpLT5oYXNUYWdOYW1lKHRyVGFnKSk7CisgICAgICAg
ICAgICBBU1NFUlQobV9zaXRlLmN1cnJlbnRFbGVtZW50KCktPmhhc1RhZ05hbWUodHJUYWcpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpZiAodG9rZW4ubmFtZSgp
ID09IGJvZHlUYWcgfHwgdG9rZW4ubmFtZSgpID09IGNhcHRpb25UYWcgfHwgdG9rZW4ubmFtZSgp
ID09IGNvbFRhZyB8fCB0b2tlbi5uYW1lKCkgPT0gY29sZ3JvdXBUYWcgfHwgdG9rZW4ubmFtZSgp
ID09IGh0bWxUYWcpIHsKQEAgLTE3MDYsNyArMTcxNyw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVy
Ojpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0YWJsZVRhZyB8fCB0
b2tlbi5uYW1lKCkgPT0gdHJUYWcgfHwgaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLm5hbWUo
KSkpIHsKLSAgICAgICAgICAgIGlmICghbV9vcGVuRWxlbWVudHMuaW5UYWJsZVNjb3BlKHRva2Vu
Lm5hbWUoKSkpIHsKKyAgICAgICAgICAgIGlmICghbV9zaXRlLm9wZW5FbGVtZW50cygpLT5pblRh
YmxlU2NvcGUodG9rZW4ubmFtZSgpKSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChtX2lzUGFy
c2luZ0ZyYWdtZW50KTsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogSXQgaXMgdW5jbGVhciB3
aGF0IHRoZSBleGFjdCBBU1NFUlQgc2hvdWxkIGJlLgogICAgICAgICAgICAgICAgIC8vIGh0dHA6
Ly93d3cudzMub3JnL0J1Z3MvUHVibGljL3Nob3dfYnVnLmNnaT9pZD0xMDA5OApAQCAtMTcyMiwy
NSArMTczMywyNSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNI
VE1MVG9rZW4mIHRva2VuKQogICAgIGNhc2UgSW5UYWJsZUJvZHlNb2RlOgogICAgICAgICBBU1NF
UlQoaW5zZXJ0aW9uTW9kZSgpID09IEluVGFibGVCb2R5TW9kZSk7CiAgICAgICAgIGlmIChpc1Rh
YmxlQm9keUNvbnRleHRUYWcodG9rZW4ubmFtZSgpKSkgewotICAgICAgICAgICAgaWYgKCFtX29w
ZW5FbGVtZW50cy5pblRhYmxlU2NvcGUodG9rZW4ubmFtZSgpKSkgeworICAgICAgICAgICAgaWYg
KCFtX3NpdGUub3BlbkVsZW1lbnRzKCktPmluVGFibGVTY29wZSh0b2tlbi5uYW1lKCkpKSB7CiAg
ICAgICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9vcGVuRWxlbWVudHMucG9wVW50aWxUYWJs
ZUJvZHlTY29wZU1hcmtlcigpOwotICAgICAgICAgICAgbV9vcGVuRWxlbWVudHMucG9wKCk7Cisg
ICAgICAgICAgICBtX3NpdGUub3BlbkVsZW1lbnRzKCktPnBvcFVudGlsVGFibGVCb2R5U2NvcGVN
YXJrZXIoKTsKKyAgICAgICAgICAgIG1fc2l0ZS5vcGVuRWxlbWVudHMoKS0+cG9wKCk7CiAgICAg
ICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJblRhYmxlTW9kZTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IHRhYmxlVGFnKSB7CiAg
ICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBzbG93LgotICAgICAgICAgICAgaWYgKCFtX29w
ZW5FbGVtZW50cy5pblRhYmxlU2NvcGUodGJvZHlUYWcubG9jYWxOYW1lKCkpICYmICFtX29wZW5F
bGVtZW50cy5pblRhYmxlU2NvcGUodGhlYWRUYWcubG9jYWxOYW1lKCkpICYmICFtX29wZW5FbGVt
ZW50cy5pblRhYmxlU2NvcGUodGZvb3RUYWcubG9jYWxOYW1lKCkpKSB7CisgICAgICAgICAgICBp
ZiAoIW1fc2l0ZS5vcGVuRWxlbWVudHMoKS0+aW5UYWJsZVNjb3BlKHRib2R5VGFnLmxvY2FsTmFt
ZSgpKSAmJiAhbV9zaXRlLm9wZW5FbGVtZW50cygpLT5pblRhYmxlU2NvcGUodGhlYWRUYWcubG9j
YWxOYW1lKCkpICYmICFtX3NpdGUub3BlbkVsZW1lbnRzKCktPmluVGFibGVTY29wZSh0Zm9vdFRh
Zy5sb2NhbE5hbWUoKSkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQobV9pc1BhcnNpbmdGcmFn
bWVudCk7CiAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9vcGVuRWxlbWVudHMucG9w
VW50aWxUYWJsZUJvZHlTY29wZU1hcmtlcigpOwotICAgICAgICAgICAgQVNTRVJUKGlzVGFibGVC
b2R5Q29udGV4dFRhZyhjdXJyZW50RWxlbWVudCgpLT5sb2NhbE5hbWUoKSkpOwotICAgICAgICAg
ICAgcHJvY2Vzc0Zha2VFbmRUYWcoY3VycmVudEVsZW1lbnQoKS0+dGFnUU5hbWUoKSk7CisgICAg
ICAgICAgICBtX3NpdGUub3BlbkVsZW1lbnRzKCktPnBvcFVudGlsVGFibGVCb2R5U2NvcGVNYXJr
ZXIoKTsKKyAgICAgICAgICAgIEFTU0VSVChpc1RhYmxlQm9keUNvbnRleHRUYWcobV9zaXRlLmN1
cnJlbnRFbGVtZW50KCktPmxvY2FsTmFtZSgpKSk7CisgICAgICAgICAgICBwcm9jZXNzRmFrZUVu
ZFRhZyhtX3NpdGUuY3VycmVudEVsZW1lbnQoKS0+dGFnUU5hbWUoKSk7CiAgICAgICAgICAgICBw
cm9jZXNzRW5kVGFnKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAt
MTc3MCw5ICsxNzgxLDkgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRv
bWljSFRNTFRva2VuJiB0b2tlbikKICAgICBjYXNlIEluSGVhZE5vc2NyaXB0TW9kZToKICAgICAg
ICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbkhlYWROb3NjcmlwdE1vZGUpOwogICAgICAg
ICBpZiAodG9rZW4ubmFtZSgpID09IG5vc2NyaXB0VGFnKSB7Ci0gICAgICAgICAgICBBU1NFUlQo
Y3VycmVudEVsZW1lbnQoKS0+dGFnUU5hbWUoKSA9PSBub3NjcmlwdFRhZyk7Ci0gICAgICAgICAg
ICBtX29wZW5FbGVtZW50cy5wb3AoKTsKLSAgICAgICAgICAgIEFTU0VSVChjdXJyZW50RWxlbWVu
dCgpLT50YWdRTmFtZSgpID09IGhlYWRUYWcpOworICAgICAgICAgICAgQVNTRVJUKG1fc2l0ZS5j
dXJyZW50RWxlbWVudCgpLT50YWdRTmFtZSgpID09IG5vc2NyaXB0VGFnKTsKKyAgICAgICAgICAg
IG1fc2l0ZS5vcGVuRWxlbWVudHMoKS0+cG9wKCk7CisgICAgICAgICAgICBBU1NFUlQobV9zaXRl
LmN1cnJlbnRFbGVtZW50KCktPnRhZ1FOYW1lKCkgPT0gaGVhZFRhZyk7CiAgICAgICAgICAgICBz
ZXRJbnNlcnRpb25Nb2RlKEluSGVhZE1vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CkBAIC0xNzg3LDI0ICsxNzk4LDI0IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNz
RW5kVGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIGlmICh0b2tlbi5uYW1lKCkg
PT0gc2NyaXB0VGFnKSB7CiAgICAgICAgICAgICAvLyBQYXVzZSBvdXJzZWx2ZXMgc28gdGhhdCBw
YXJzaW5nIHN0b3BzIHVudGlsIHRoZSBzY3JpcHQgY2FuIGJlIHByb2Nlc3NlZCBieSB0aGUgY2Fs
bGVyLgogICAgICAgICAgICAgbV9pc1BhdXNlZCA9IHRydWU7Ci0gICAgICAgICAgICBBU1NFUlQo
Y3VycmVudEVsZW1lbnQoKS0+dGFnUU5hbWUoKSA9PSBzY3JpcHRUYWcpOwotICAgICAgICAgICAg
bV9zY3JpcHRUb1Byb2Nlc3MgPSBjdXJyZW50RWxlbWVudCgpOwotICAgICAgICAgICAgbV9vcGVu
RWxlbWVudHMucG9wKCk7CisgICAgICAgICAgICBBU1NFUlQobV9zaXRlLmN1cnJlbnRFbGVtZW50
KCktPnRhZ1FOYW1lKCkgPT0gc2NyaXB0VGFnKTsKKyAgICAgICAgICAgIG1fc2NyaXB0VG9Qcm9j
ZXNzID0gbV9zaXRlLmN1cnJlbnRFbGVtZW50KCk7CisgICAgICAgICAgICBtX3NpdGUub3BlbkVs
ZW1lbnRzKCktPnBvcCgpOwogICAgICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gbV9vcmlnaW5h
bEluc2VydGlvbk1vZGU7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAg
bV9vcGVuRWxlbWVudHMucG9wKCk7CisgICAgICAgIG1fc2l0ZS5vcGVuRWxlbWVudHMoKS0+cG9w
KCk7CiAgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEluRnJhbWVzZXRNb2RlOgogICAgICAgICBBU1NFUlQo
aW5zZXJ0aW9uTW9kZSgpID09IEluRnJhbWVzZXRNb2RlKTsKICAgICAgICAgaWYgKHRva2VuLm5h
bWUoKSA9PSBmcmFtZXNldFRhZykgewotICAgICAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50KCkg
PT0gbV9vcGVuRWxlbWVudHMuaHRtbEVsZW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKG1fc2l0
ZS5jdXJyZW50RWxlbWVudCgpID09IG1fc2l0ZS5vcGVuRWxlbWVudHMoKS0+aHRtbEVsZW1lbnQo
KSkgewogICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fb3BlbkVsZW1lbnRzLnBvcCgp
OwotICAgICAgICAgICAgaWYgKCFtX2lzUGFyc2luZ0ZyYWdtZW50ICYmICFjdXJyZW50RWxlbWVu
dCgpLT5oYXNUYWdOYW1lKGZyYW1lc2V0VGFnKSkKKyAgICAgICAgICAgIG1fc2l0ZS5vcGVuRWxl
bWVudHMoKS0+cG9wKCk7CisgICAgICAgICAgICBpZiAoIW1faXNQYXJzaW5nRnJhZ21lbnQgJiYg
IW1fc2l0ZS5jdXJyZW50RWxlbWVudCgpLT5oYXNUYWdOYW1lKGZyYW1lc2V0VGFnKSkKICAgICAg
ICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBBZnRlckZyYW1lc2V0TW9kZTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTgyNCw3ICsxODM1LDcgQEAgdm9pZCBIVE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAg
QVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJblNlbGVjdEluVGFibGVNb2RlKTsKICAgICAgICAg
aWYgKHRva2VuLm5hbWUoKSA9PSBjYXB0aW9uVGFnIHx8IHRva2VuLm5hbWUoKSA9PSB0YWJsZVRh
ZyB8fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4ubmFtZSgpKSB8fCB0b2tlbi5uYW1lKCkg
PT0gdHJUYWcgfHwgdG9rZW4ubmFtZSgpID09IHRkVGFnIHx8IHRva2VuLm5hbWUoKSA9PSB0aFRh
ZykgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7Ci0gICAgICAgICAgICBpZiAobV9v
cGVuRWxlbWVudHMuaW5UYWJsZVNjb3BlKHRva2VuLm5hbWUoKSkpIHsKKyAgICAgICAgICAgIGlm
IChtX3NpdGUub3BlbkVsZW1lbnRzKCktPmluVGFibGVTY29wZSh0b2tlbi5uYW1lKCkpKSB7CiAg
ICAgICAgICAgICAgICAgQXRvbWljSFRNTFRva2VuIGVuZFNlbGVjdChIVE1MVG9rZW46OkVuZFRh
Zywgc2VsZWN0VGFnLmxvY2FsTmFtZSgpKTsKICAgICAgICAgICAgICAgICBwcm9jZXNzRW5kVGFn
KGVuZFNlbGVjdCk7CiAgICAgICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyh0b2tlbik7CkBAIC0x
ODM1LDE4ICsxODQ2LDE4IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKEF0
b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgY2FzZSBJblNlbGVjdE1vZGU6CiAgICAgICAgIEFT
U0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5TZWxlY3RNb2RlIHx8IGluc2VydGlvbk1vZGUoKSA9
PSBJblNlbGVjdEluVGFibGVNb2RlKTsKICAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBvcHRn
cm91cFRhZykgewotICAgICAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50KCktPmhhc1RhZ05hbWUo
b3B0aW9uVGFnKSkKKyAgICAgICAgICAgIGlmIChtX3NpdGUuY3VycmVudEVsZW1lbnQoKS0+aGFz
VGFnTmFtZShvcHRpb25UYWcpKQogICAgICAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQoKS0+aGFzVGFnTmFtZShvcHRncm91cFRhZykp
IHsKLSAgICAgICAgICAgICAgICBtX29wZW5FbGVtZW50cy5wb3AoKTsKKyAgICAgICAgICAgIGlm
IChtX3NpdGUuY3VycmVudEVsZW1lbnQoKS0+aGFzVGFnTmFtZShvcHRncm91cFRhZykpIHsKKyAg
ICAgICAgICAgICAgICBtX3NpdGUub3BlbkVsZW1lbnRzKCktPnBvcCgpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4p
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGlmICh0b2tlbi5uYW1l
KCkgPT0gb3B0aW9uVGFnKSB7Ci0gICAgICAgICAgICBpZiAoY3VycmVudEVsZW1lbnQoKS0+aGFz
VGFnTmFtZShvcHRpb25UYWcpKSB7Ci0gICAgICAgICAgICAgICAgbV9vcGVuRWxlbWVudHMucG9w
KCk7CisgICAgICAgICAgICBpZiAobV9zaXRlLmN1cnJlbnRFbGVtZW50KCktPmhhc1RhZ05hbWUo
b3B0aW9uVGFnKSkgeworICAgICAgICAgICAgICAgIG1fc2l0ZS5vcGVuRWxlbWVudHMoKS0+cG9w
KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
cGFyc2VFcnJvcih0b2tlbik7CkBAIC0xODU0LDggKzE4NjUsOCBAQCB2b2lkIEhUTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICB9CiAg
ICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gc2VsZWN0VGFnKSB7CiAgICAgICAgICAgICBub3RJ
bXBsZW1lbnRlZCgpOyAvLyBmcmFnbWVudCBjYXNlCi0gICAgICAgICAgICBtX29wZW5FbGVtZW50
cy5wb3BVbnRpbChzZWxlY3RUYWcubG9jYWxOYW1lKCkpOwotICAgICAgICAgICAgbV9vcGVuRWxl
bWVudHMucG9wKCk7CisgICAgICAgICAgICBtX3NpdGUub3BlbkVsZW1lbnRzKCktPnBvcFVudGls
KHNlbGVjdFRhZy5sb2NhbE5hbWUoKSk7CisgICAgICAgICAgICBtX3NpdGUub3BlbkVsZW1lbnRz
KCktPnBvcCgpOwogICAgICAgICAgICAgcmVzZXRJbnNlcnRpb25Nb2RlQXBwcm9wcmlhdGVseSgp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xODcxLDE0ICsxODgyLDE0IEBA
IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ29tbWVudChBdG9taWNIVE1MVG9rZW4mIHRv
a2VuKQogewogICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpDb21tZW50KTsK
ICAgICBpZiAobV9pbnNlcnRpb25Nb2RlID09IEluaXRpYWxNb2RlIHx8IG1faW5zZXJ0aW9uTW9k
ZSA9PSBCZWZvcmVIVE1MTW9kZSB8fCBtX2luc2VydGlvbk1vZGUgPT0gQWZ0ZXJBZnRlckJvZHlN
b2RlIHx8IG1faW5zZXJ0aW9uTW9kZSA9PSBBZnRlckFmdGVyRnJhbWVzZXRNb2RlKSB7Ci0gICAg
ICAgIGluc2VydENvbW1lbnRPbkRvY3VtZW50KHRva2VuKTsKKyAgICAgICAgbV9zaXRlLmluc2Vy
dENvbW1lbnRPbkRvY3VtZW50KHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBp
ZiAobV9pbnNlcnRpb25Nb2RlID09IEFmdGVyQm9keU1vZGUpIHsKLSAgICAgICAgaW5zZXJ0Q29t
bWVudE9uSFRNTEh0bWxFbGVtZW50KHRva2VuKTsKKyAgICAgICAgbV9zaXRlLmluc2VydENvbW1l
bnRPbkhUTUxIdG1sRWxlbWVudCh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
aW5zZXJ0Q29tbWVudCh0b2tlbik7CisgICAgbV9zaXRlLmluc2VydENvbW1lbnQodG9rZW4pOwog
fQogCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0NoYXJhY3RlcihBdG9taWNIVE1MVG9r
ZW4mIHRva2VuKQpAQCAtMTkxNiwxNCArMTkyNywxNCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc0NoYXJhY3RlcihBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgIGNhc2UgSW5DZWxs
TW9kZToKICAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbkJvZHlNb2RlIHx8IGlu
c2VydGlvbk1vZGUoKSA9PSBJbkNhcHRpb25Nb2RlIHx8IGluc2VydGlvbk1vZGUoKSA9PSBJbkNl
bGxNb2RlKTsKICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgaW5zZXJ0VGV4dE5v
ZGUodG9rZW4pOworICAgICAgICBtX3NpdGUuaW5zZXJ0VGV4dE5vZGUodG9rZW4pOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIEluVGFibGVNb2RlOgogICAgIGNhc2UgSW5UYWJsZUJvZHlNb2Rl
OgogICAgIGNhc2UgSW5Sb3dNb2RlOgogICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09
IEluVGFibGVNb2RlIHx8IGluc2VydGlvbk1vZGUoKSA9PSBJblRhYmxlQm9keU1vZGUgfHwgaW5z
ZXJ0aW9uTW9kZSgpID09IEluUm93TW9kZSk7CiAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7IC8v
IENyYXp5IHBlbmRpbmcgY2hhcmFjdGVycy4KLSAgICAgICAgaW5zZXJ0VGV4dE5vZGUodG9rZW4p
OworICAgICAgICBtX3NpdGUuaW5zZXJ0VGV4dE5vZGUodG9rZW4pOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIEluQ29sdW1uR3JvdXBNb2RlOgogICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9k
ZSgpID09IEluQ29sdW1uR3JvdXBNb2RlKTsKQEAgLTE5MzgsNyArMTk0OSw3IEBAIHZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2hhcmFjdGVyKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgVGV4dE1vZGU6CiAgICAgICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgICAgIGluc2VydFRleHROb2RlKHRva2VuKTsKKyAgICAgICAgbV9zaXRlLmluc2Vy
dFRleHROb2RlKHRva2VuKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbkhlYWROb3Njcmlw
dE1vZGU6CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5IZWFkTm9zY3JpcHRN
b2RlKTsKQEAgLTE5NTQsNyArMTk2NSw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNz
Q2hhcmFjdGVyKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgY2FzZSBJblNlbGVjdEluVGFi
bGVNb2RlOgogICAgIGNhc2UgSW5TZWxlY3RNb2RlOgogICAgICAgICBBU1NFUlQoaW5zZXJ0aW9u
TW9kZSgpID09IEluU2VsZWN0TW9kZSB8fCBpbnNlcnRpb25Nb2RlKCkgPT0gSW5TZWxlY3RJblRh
YmxlTW9kZSk7Ci0gICAgICAgIGluc2VydFRleHROb2RlKHRva2VuKTsKKyAgICAgICAgbV9zaXRl
Lmluc2VydFRleHROb2RlKHRva2VuKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJblRhYmxl
VGV4dE1vZGU6CiAgICAgY2FzZSBJbkZvcmVpZ25Db250ZW50TW9kZToKQEAgLTIwMTIsMTEgKzIw
MjMsMTEgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRPZkZpbGUoQXRvbWljSFRN
TFRva2VuJiB0b2tlbikKICAgICBjYXNlIEluU2VsZWN0SW5UYWJsZU1vZGU6CiAgICAgY2FzZSBJ
blNlbGVjdE1vZGU6CiAgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5TZWxlY3RN
b2RlIHx8IGluc2VydGlvbk1vZGUoKSA9PSBJblNlbGVjdEluVGFibGVNb2RlIHx8IGluc2VydGlv
bk1vZGUoKSA9PSBJblRhYmxlTW9kZSB8fCBpbnNlcnRpb25Nb2RlKCkgPT0gSW5GcmFtZXNldE1v
ZGUgfHwgaW5zZXJ0aW9uTW9kZSgpID09IEluVGFibGVCb2R5TW9kZSk7Ci0gICAgICAgIGlmIChj
dXJyZW50RWxlbWVudCgpICE9IG1fb3BlbkVsZW1lbnRzLmh0bWxFbGVtZW50KCkpCisgICAgICAg
IGlmIChtX3NpdGUuY3VycmVudEVsZW1lbnQoKSAhPSBtX3NpdGUub3BlbkVsZW1lbnRzKCktPmh0
bWxFbGVtZW50KCkpCiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBJbkNvbHVtbkdyb3VwTW9kZToKLSAgICAgICAgaWYgKGN1cnJlbnRFbGVt
ZW50KCkgPT0gbV9vcGVuRWxlbWVudHMuaHRtbEVsZW1lbnQoKSkgeworICAgICAgICBpZiAobV9z
aXRlLmN1cnJlbnRFbGVtZW50KCkgPT0gbV9zaXRlLm9wZW5FbGVtZW50cygpLT5odG1sRWxlbWVu
dCgpKSB7CiAgICAgICAgICAgICBBU1NFUlQobV9pc1BhcnNpbmdGcmFnbWVudCk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTIwNDYsNyArMjA1Nyw3IEBAIHZvaWQgSFRNTFRy
ZWVCdWlsZGVyOjpwcm9jZXNzRGVmYXVsdEZvckluaXRpYWxNb2RlKEF0b21pY0hUTUxUb2tlbiYg
dG9rZW4pCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0RlZmF1bHRGb3JCZWZvcmVIVE1M
TW9kZShBdG9taWNIVE1MVG9rZW4mKQogewogICAgIEF0b21pY0hUTUxUb2tlbiBzdGFydEhUTUwo
SFRNTFRva2VuOjpTdGFydFRhZywgaHRtbFRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgaW5zZXJ0SFRN
TFN0YXJ0VGFnQmVmb3JlSFRNTChzdGFydEhUTUwpOworICAgIG1fc2l0ZS5pbnNlcnRIVE1MSHRt
bFN0YXJ0VGFnQmVmb3JlSFRNTChzdGFydEhUTUwpOwogICAgIHNldEluc2VydGlvbk1vZGUoQmVm
b3JlSGVhZE1vZGUpOwogfQogCkBAIC0yMDc5LDM0ICsyMDkwLDM0IEBAIGJvb2wgSFRNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
IHsKICAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6U3RhcnRUYWcpOwogICAg
IGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykgewotICAgICAgICBpbnNlcnRIVE1MU3RhcnRU
YWdJbkJvZHkodG9rZW4pOworICAgICAgICBtX3NpdGUuaW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0lu
Qm9keSh0b2tlbik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAvLyBGSVhNRTog
QXRvbWl6ZSAiY29tbWFuZCIuCiAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBiYXNlVGFnIHx8IHRv
a2VuLm5hbWUoKSA9PSAiY29tbWFuZCIgfHwgdG9rZW4ubmFtZSgpID09IGxpbmtUYWcgfHwgdG9r
ZW4ubmFtZSgpID09IG1ldGFUYWcpIHsKLSAgICAgICAgaW5zZXJ0U2VsZkNsb3NpbmdFbGVtZW50
KHRva2VuKTsKKyAgICAgICAgbV9zaXRlLmluc2VydFNlbGZDbG9zaW5nRWxlbWVudCh0b2tlbik7
CiAgICAgICAgIC8vIE5vdGU6IFRoZSBjdXN0b20gcHJvY2Vzc2luZyBmb3IgdGhlIDxtZXRhPiB0
YWcgaXMgZG9uZSBpbiBIVE1MTWV0YUVsZW1lbnQ6OnByb2Nlc3MoKS4KICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGl0bGVUYWcpIHsKLSAgICAg
ICAgaW5zZXJ0R2VuZXJpY1JDREFUQUVsZW1lbnQodG9rZW4pOworICAgICAgICBwcm9jZXNzR2Vu
ZXJpY1JDREFUQVN0YXJ0VGFnKHRva2VuKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gbm9zY3JpcHRUYWcpIHsKICAgICAgICAgaWYgKGlzU2Ny
aXB0aW5nRmxhZ0VuYWJsZWQobV9kb2N1bWVudC0+ZnJhbWUoKSkpIHsKLSAgICAgICAgICAgIGlu
c2VydEdlbmVyaWNSYXdUZXh0RWxlbWVudCh0b2tlbik7CisgICAgICAgICAgICBwcm9jZXNzR2Vu
ZXJpY1Jhd1RleHRTdGFydFRhZyh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQotICAgICAgICBpbnNlcnRFbGVtZW50KHRva2VuKTsKKyAgICAgICAgbV9zaXRlLmlu
c2VydEVsZW1lbnQodG9rZW4pOwogICAgICAgICBzZXRJbnNlcnRpb25Nb2RlKEluSGVhZE5vc2Ny
aXB0TW9kZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAodG9rZW4ubmFt
ZSgpID09IG5vZnJhbWVzVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBzdHlsZVRhZykgewotICAgICAg
ICBpbnNlcnRHZW5lcmljUmF3VGV4dEVsZW1lbnQodG9rZW4pOworICAgICAgICBwcm9jZXNzR2Vu
ZXJpY1Jhd1RleHRTdGFydFRhZyh0b2tlbik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICBpZiAodG9rZW4ubmFtZSgpID09IHNjcmlwdFRhZykgewotICAgICAgICBpbnNlcnRTY3Jp
cHRFbGVtZW50KHRva2VuKTsKKyAgICAgICAgcHJvY2Vzc1NjcmlwdFN0YXJ0VGFnKHRva2VuKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaGVh
ZFRhZykgewpAQCAtMjExNiw3ICsyMTI3LDcgQEAgYm9vbCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nl
c3NTdGFydFRhZ0ZvckluSGVhZChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6Omluc2VydERvY3R5cGUoQXRvbWljSFRN
TFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydERvY3R5cGUo
QXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKICAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhU
TUxUb2tlbjo6RE9DVFlQRSk7CiAgICAgYXR0YWNoKG1fZG9jdW1lbnQsIERvY3VtZW50VHlwZTo6
Y3JlYXRlKG1fZG9jdW1lbnQsIHRva2VuLm5hbWUoKSwgU3RyaW5nOjphZG9wdCh0b2tlbi5wdWJs
aWNJZGVudGlmaWVyKCkpLCBTdHJpbmc6OmFkb3B0KHRva2VuLnN5c3RlbUlkZW50aWZpZXIoKSkp
KTsKQEAgLTIxMjYsNTIgKzIxMzcsNTIgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6Omluc2VydERv
Y3R5cGUoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgbV9kb2N1bWVudC0+c2V0UGFy
c2VNb2RlKERvY3VtZW50OjpDb21wYXQpOwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6aW5z
ZXJ0Q29tbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MQ29uc3RydWN0aW9u
U2l0ZTo6aW5zZXJ0Q29tbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewogICAgIEFTU0VS
VCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpDb21tZW50KTsKICAgICBhdHRhY2goY3VycmVu
dEVsZW1lbnQoKSwgQ29tbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQsIHRva2VuLmNvbW1lbnQoKSkp
OwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6aW5zZXJ0Q29tbWVudE9uRG9jdW1lbnQoQXRv
bWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydENv
bW1lbnRPbkRvY3VtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7CiAgICAgQVNTRVJUKHRv
a2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkNvbW1lbnQpOwogICAgIGF0dGFjaChtX2RvY3VtZW50
LCBDb21tZW50OjpjcmVhdGUobV9kb2N1bWVudCwgdG9rZW4uY29tbWVudCgpKSk7CiB9CiAKLXZv
aWQgSFRNTFRyZWVCdWlsZGVyOjppbnNlcnRDb21tZW50T25IVE1MSHRtbEVsZW1lbnQoQXRvbWlj
SFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydENvbW1l
bnRPbkhUTUxIdG1sRWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewogICAgIEFTU0VS
VCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpDb21tZW50KTsKICAgICBhdHRhY2gobV9vcGVu
RWxlbWVudHMuaHRtbEVsZW1lbnQoKSwgQ29tbWVudDo6Y3JlYXRlKG1fZG9jdW1lbnQsIHRva2Vu
LmNvbW1lbnQoKSkpOwogfQogCi1QYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxUcmVlQnVpbGRlcjo6
Y3JlYXRlRWxlbWVudEFuZEF0dGFjaFRvQ3VycmVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQor
UGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRlRWxlbWVudEFu
ZEF0dGFjaFRvQ3VycmVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewogICAgIEFTU0VSVCh0
b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpTdGFydFRhZyk7CiAgICAgcmV0dXJuIGF0dGFjaChj
dXJyZW50RWxlbWVudCgpLCBjcmVhdGVFbGVtZW50KHRva2VuKSk7CiB9CiAKLXZvaWQgSFRNTFRy
ZWVCdWlsZGVyOjppbnNlcnRIVE1MSHRtbEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
K3ZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Omluc2VydEhUTUxIdG1sRWxlbWVudChBdG9taWNI
VE1MVG9rZW4mIHRva2VuKQogewogICAgIG1fb3BlbkVsZW1lbnRzLnB1c2hIVE1MSHRtbEVsZW1l
bnQoY3JlYXRlRWxlbWVudEFuZEF0dGFjaFRvQ3VycmVudCh0b2tlbikpOwogfQogCi12b2lkIEhU
TUxUcmVlQnVpbGRlcjo6aW5zZXJ0SFRNTEhlYWRFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9r
ZW4pCit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRIVE1MSGVhZEVsZW1lbnQoQXRv
bWljSFRNTFRva2VuJiB0b2tlbikKIHsKLSAgICBtX2hlYWRFbGVtZW50ID0gY3JlYXRlRWxlbWVu
dEFuZEF0dGFjaFRvQ3VycmVudCh0b2tlbik7Ci0gICAgbV9vcGVuRWxlbWVudHMucHVzaEhUTUxI
ZWFkRWxlbWVudChtX2hlYWRFbGVtZW50KTsKKyAgICBtX2hlYWQgPSBjcmVhdGVFbGVtZW50QW5k
QXR0YWNoVG9DdXJyZW50KHRva2VuKTsKKyAgICBtX29wZW5FbGVtZW50cy5wdXNoSFRNTEhlYWRF
bGVtZW50KG1faGVhZCk7CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjppbnNlcnRIVE1MQm9k
eUVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTENvbnN0cnVjdGlvblNp
dGU6Omluc2VydEhUTUxCb2R5RWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewogICAg
IG1fb3BlbkVsZW1lbnRzLnB1c2hIVE1MQm9keUVsZW1lbnQoY3JlYXRlRWxlbWVudEFuZEF0dGFj
aFRvQ3VycmVudCh0b2tlbikpOwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6aW5zZXJ0RWxl
bWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6
aW5zZXJ0RWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewogICAgIG1fb3BlbkVsZW1l
bnRzLnB1c2goY3JlYXRlRWxlbWVudEFuZEF0dGFjaFRvQ3VycmVudCh0b2tlbikpOwogfQogCi12
b2lkIEhUTUxUcmVlQnVpbGRlcjo6aW5zZXJ0U2VsZkNsb3NpbmdFbGVtZW50KEF0b21pY0hUTUxU
b2tlbiYgdG9rZW4pCit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRTZWxmQ2xvc2lu
Z0VsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIHsKICAgICBBU1NFUlQodG9rZW4udHlw
ZSgpID09IEhUTUxUb2tlbjo6U3RhcnRUYWcpOwogICAgIGF0dGFjaChjdXJyZW50RWxlbWVudCgp
LCBjcmVhdGVFbGVtZW50KHRva2VuKSk7CkBAIC0yMTc5LDcgKzIxOTAsNyBAQCB2b2lkIEhUTUxU
cmVlQnVpbGRlcjo6aW5zZXJ0U2VsZkNsb3NpbmdFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9r
ZW4pCiAgICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQt
d29yay9tdWx0aXBhZ2UvdG9rZW5pemF0aW9uLmh0bWwjYWNrbm93bGVkZ2Utc2VsZi1jbG9zaW5n
LWZsYWcKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6Omluc2VydEZvcm1hdHRpbmdFbGVtZW50
KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNl
cnRGb3JtYXR0aW5nRWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewogICAgIC8vIGh0
dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdl
L3BhcnNpbmcuaHRtbCN0aGUtc3RhY2stb2Ytb3Blbi1lbGVtZW50cwogICAgIC8vIFBvc3NpYmxl
IGFjdGl2ZSBmb3JtYXR0aW5nIGVsZW1lbnRzIGluY2x1ZGU6CkBAIC0yMTg4LDM0ICsyMTk5LDQx
IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjppbnNlcnRGb3JtYXR0aW5nRWxlbWVudChBdG9taWNI
VE1MVG9rZW4mIHRva2VuKQogICAgIG1fYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmFwcGVuZChj
dXJyZW50RWxlbWVudCgpKTsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6Omluc2VydEdlbmVy
aWNSQ0RBVEFFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc0dlbmVyaWNSQ0RBVEFTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2Vu
KQogewotICAgIGluc2VydEVsZW1lbnQodG9rZW4pOworICAgIEFTU0VSVCh0b2tlbi50eXBlKCkg
PT0gSFRNTFRva2VuOjpTdGFydFRhZyk7CisgICAgbV9zaXRlLmluc2VydEVsZW1lbnQodG9rZW4p
OwogICAgIG1fdG9rZW5pemVyLT5zZXRTdGF0ZShIVE1MVG9rZW5pemVyOjpSQ0RBVEFTdGF0ZSk7
CiAgICAgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUgPSBtX2luc2VydGlvbk1vZGU7CiAgICAgbV9p
bnNlcnRpb25Nb2RlID0gVGV4dE1vZGU7CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjppbnNl
cnRHZW5lcmljUmF3VGV4dEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzR2VuZXJpY1Jhd1RleHRTdGFydFRhZyhBdG9taWNIVE1MVG9r
ZW4mIHRva2VuKQogewotICAgIGluc2VydEVsZW1lbnQodG9rZW4pOworICAgIEFTU0VSVCh0b2tl
bi50eXBlKCkgPT0gSFRNTFRva2VuOjpTdGFydFRhZyk7CisgICAgbV9zaXRlLmluc2VydEVsZW1l
bnQodG9rZW4pOwogICAgIG1fdG9rZW5pemVyLT5zZXRTdGF0ZShIVE1MVG9rZW5pemVyOjpSQVdU
RVhUU3RhdGUpOwogICAgIG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gbV9pbnNlcnRpb25Nb2Rl
OwogICAgIG1faW5zZXJ0aW9uTW9kZSA9IFRleHRNb2RlOwogfQogCi12b2lkIEhUTUxUcmVlQnVp
bGRlcjo6aW5zZXJ0U2NyaXB0RWxlbWVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBI
VE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0U2NyaXB0RWxlbWVudChBdG9taWNIVE1MVG9rZW4m
IHRva2VuKQogewotICAgIEFTU0VSVF9VTlVTRUQodG9rZW4sIHRva2VuLnR5cGUoKSA9PSBIVE1M
VG9rZW46OlN0YXJ0VGFnKTsKICAgICBSZWZQdHI8SFRNTFNjcmlwdEVsZW1lbnQ+IGVsZW1lbnQg
PSBIVE1MU2NyaXB0RWxlbWVudDo6Y3JlYXRlKHNjcmlwdFRhZywgbV9kb2N1bWVudCwgdHJ1ZSk7
CiAgICAgZWxlbWVudC0+c2V0QXR0cmlidXRlTWFwKHRva2VuLnRha2VBdHJpYnV0ZXMoKSwgbV9m
cmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOwogICAgIG1fb3BlbkVsZW1lbnRzLnB1c2goYXR0
YWNoKGN1cnJlbnRFbGVtZW50KCksIGVsZW1lbnQucmVsZWFzZSgpKSk7Cit9CisKK3ZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzU2NyaXB0U3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tl
bikKK3sKKyAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6U3RhcnRUYWcpOwor
ICAgIG1fc2l0ZS5pbnNlcnRTY3JpcHRFbGVtZW50KHRva2VuKTsKICAgICBtX3Rva2VuaXplci0+
c2V0U3RhdGUoSFRNTFRva2VuaXplcjo6U2NyaXB0RGF0YVN0YXRlKTsKICAgICBtX29yaWdpbmFs
SW5zZXJ0aW9uTW9kZSA9IG1faW5zZXJ0aW9uTW9kZTsKICAgICBtX2luc2VydGlvbk1vZGUgPSBU
ZXh0TW9kZTsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6Omluc2VydFRleHROb2RlKEF0b21p
Y0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRUZXh0
Tm9kZShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogewogICAgIGlmIChOb2RlKiBsYXN0Q2hpbGQg
PSBjdXJyZW50RWxlbWVudCgpLT5sYXN0Q2hpbGQoKSkgewogICAgICAgICBpZiAobGFzdENoaWxk
LT5pc1RleHROb2RlKCkpIHsKQEAgLTIyMjksNyArMjI0Nyw3IEBAIHZvaWQgSFRNTFRyZWVCdWls
ZGVyOjppbnNlcnRUZXh0Tm9kZShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgIGF0dGFjaChj
dXJyZW50RWxlbWVudCgpLCBUZXh0OjpjcmVhdGUobV9kb2N1bWVudCwgdG9rZW4uY2hhcmFjdGVy
cygpKSk7CiB9CiAKLVBhc3NSZWZQdHI8RWxlbWVudD4gSFRNTFRyZWVCdWlsZGVyOjpjcmVhdGVF
bGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCitQYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxD
b25zdHJ1Y3Rpb25TaXRlOjpjcmVhdGVFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiB7
CiAgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBIVE1MRWxlbWVudEZhY3Rvcnk6OmNyZWF0
ZUhUTUxFbGVtZW50KFF1YWxpZmllZE5hbWUobnVsbEF0b20sIHRva2VuLm5hbWUoKSwgeGh0bWxO
YW1lc3BhY2VVUkkpLCBtX2RvY3VtZW50LCAwKTsKICAgICBlbGVtZW50LT5zZXRBdHRyaWJ1dGVN
YXAodG9rZW4udGFrZUF0cmlidXRlcygpLCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbik7
CkBAIC0yMjM4LDE1ICsyMjU2LDE1IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gSFRNTFRyZWVCdWls
ZGVyOjpjcmVhdGVFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAKIGJvb2wgSFRNTFRy
ZWVCdWlsZGVyOjppbmRleE9mRmlyc3RVbm9wZW5Gb3JtYXR0aW5nRWxlbWVudCh1bnNpZ25lZCYg
Zmlyc3RVbm9wZW5FbGVtZW50SW5kZXgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fYWN0aXZlRm9ybWF0
dGluZ0VsZW1lbnRzLmlzRW1wdHkoKSkKKyAgICBpZiAobV9zaXRlLmFjdGl2ZUZvcm1hdHRpbmdF
bGVtZW50cygpLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB1bnNpZ25l
ZCBpbmRleCA9IG1fYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnNpemUoKTsKKyAgICB1bnNpZ25l
ZCBpbmRleCA9IG1fc2l0ZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+c2l6ZSgpOwogICAg
IGRvIHsKICAgICAgICAgLS1pbmRleDsKLSAgICAgICAgY29uc3QgSFRNTEZvcm1hdHRpbmdFbGVt
ZW50TGlzdDo6RW50cnkmIGVudHJ5ID0gbV9hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHNbaW5kZXhd
OwotICAgICAgICBpZiAoZW50cnkuaXNNYXJrZXIoKSB8fCBtX29wZW5FbGVtZW50cy5jb250YWlu
cyhlbnRyeS5lbGVtZW50KCkpKSB7CisgICAgICAgIGNvbnN0IEhUTUxGb3JtYXR0aW5nRWxlbWVu
dExpc3Q6OkVudHJ5JiBlbnRyeSA9IG1fc2l0ZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+
YXQoaW5kZXgpOworICAgICAgICBpZiAoZW50cnkuaXNNYXJrZXIoKSB8fCBtX3NpdGUub3BlbkVs
ZW1lbnRzKCktPmNvbnRhaW5zKGVudHJ5LmVsZW1lbnQoKSkpIHsKICAgICAgICAgICAgIGZpcnN0
VW5vcGVuRWxlbWVudEluZGV4ID0gaW5kZXggKyAxOwotICAgICAgICAgICAgcmV0dXJuIGZpcnN0
VW5vcGVuRWxlbWVudEluZGV4IDwgbV9hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuc2l6ZSgpOwor
ICAgICAgICAgICAgcmV0dXJuIGZpcnN0VW5vcGVuRWxlbWVudEluZGV4IDwgbV9zaXRlLmFjdGl2
ZUZvcm1hdHRpbmdFbGVtZW50cygpLT5zaXplKCk7CiAgICAgICAgIH0KICAgICB9IHdoaWxlIChp
bmRleCk7CiAgICAgZmlyc3RVbm9wZW5FbGVtZW50SW5kZXggPSBpbmRleDsKQEAgLTIyNjAsMTMg
KzIyNzgsMTMgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnJlY29uc3RydWN0VGhlQWN0aXZlRm9y
bWF0dGluZ0VsZW1lbnRzKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQgdW5vcGVu
RW50cnlJbmRleCA9IGZpcnN0VW5vcGVuRWxlbWVudEluZGV4OwotICAgIEFTU0VSVCh1bm9wZW5F
bnRyeUluZGV4IDwgbV9hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuc2l6ZSgpKTsKLSAgICBmb3Ig
KDsgdW5vcGVuRW50cnlJbmRleCA8IG1fYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnNpemUoKTsg
Kyt1bm9wZW5FbnRyeUluZGV4KSB7Ci0gICAgICAgIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6
OkVudHJ5JiB1bm9wZW5lZEVudHJ5ID0gbV9hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHNbdW5vcGVu
RW50cnlJbmRleF07CisgICAgQVNTRVJUKHVub3BlbkVudHJ5SW5kZXggPCBtX3NpdGUuYWN0aXZl
Rm9ybWF0dGluZ0VsZW1lbnRzKCktPnNpemUoKSk7CisgICAgZm9yICg7IHVub3BlbkVudHJ5SW5k
ZXggPCBtX3NpdGUuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCktPnNpemUoKTsgKyt1bm9wZW5F
bnRyeUluZGV4KSB7CisgICAgICAgIEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OkVudHJ5JiB1
bm9wZW5lZEVudHJ5ID0gbV9zaXRlLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLT5hdCh1bm9w
ZW5FbnRyeUluZGV4KTsKICAgICAgICAgLy8gRklYTUU6IFdlJ3JlIHN1cHBvc2VkIHRvIHNhdmUg
dGhlIG9yaWdpbmFsIHRva2VuIGluIHRoZSBlbnRyeS4KICAgICAgICAgQXRvbWljSFRNTFRva2Vu
IGZha2VUb2tlbihIVE1MVG9rZW46OlN0YXJ0VGFnLCB1bm9wZW5lZEVudHJ5LmVsZW1lbnQoKS0+
bG9jYWxOYW1lKCkpOwotICAgICAgICBpbnNlcnRFbGVtZW50KGZha2VUb2tlbik7Ci0gICAgICAg
IHVub3BlbmVkRW50cnkucmVwbGFjZUVsZW1lbnQoY3VycmVudEVsZW1lbnQoKSk7CisgICAgICAg
IG1fc2l0ZS5pbnNlcnRFbGVtZW50KGZha2VUb2tlbik7CisgICAgICAgIHVub3BlbmVkRW50cnku
cmVwbGFjZUVsZW1lbnQobV9zaXRlLmN1cnJlbnRFbGVtZW50KCkpOwogICAgIH0KIH0KIApAQCAt
MjI4OCwxNCArMjMwNiwxNCBAQCBib29sIGhhc0ltcGxpZWRFbmRUYWcoRWxlbWVudCogZWxlbWVu
dCkKIAogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmdlbmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRoRXhj
bHVzaW9uKGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSkKIHsKLSAgICB3aGlsZSAoaGFzSW1w
bGllZEVuZFRhZyhjdXJyZW50RWxlbWVudCgpKSAmJiAhY3VycmVudEVsZW1lbnQoKS0+aGFzTG9j
YWxOYW1lKHRhZ05hbWUpKQotICAgICAgICBtX29wZW5FbGVtZW50cy5wb3AoKTsKKyAgICB3aGls
ZSAoaGFzSW1wbGllZEVuZFRhZyhtX3NpdGUuY3VycmVudEVsZW1lbnQoKSkgJiYgIW1fc2l0ZS5j
dXJyZW50RWxlbWVudCgpLT5oYXNMb2NhbE5hbWUodGFnTmFtZSkpCisgICAgICAgIG1fc2l0ZS5v
cGVuRWxlbWVudHMoKS0+cG9wKCk7CiB9CiAKIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpnZW5lcmF0
ZUltcGxpZWRFbmRUYWdzKCkKIHsKLSAgICB3aGlsZSAoaGFzSW1wbGllZEVuZFRhZyhjdXJyZW50
RWxlbWVudCgpKSkKLSAgICAgICAgbV9vcGVuRWxlbWVudHMucG9wKCk7CisgICAgd2hpbGUgKGhh
c0ltcGxpZWRFbmRUYWcobV9zaXRlLmN1cnJlbnRFbGVtZW50KCkpKQorICAgICAgICBtX3NpdGUu
b3BlbkVsZW1lbnRzKCktPnBvcCgpOwogfQogCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6ZmluaXNo
ZWQoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxUcmVlQnVpbGRlci5oIGIvV2ViQ29y
ZS9odG1sL0hUTUxUcmVlQnVpbGRlci5oCmluZGV4IDIwM2Y1ODY0M2M5ZGI5MzNlMzVmMjU1ZTVj
ZDVkNGQyOTYzNTk5MTguLjliYTg5ZTExYTJjNDNjYTVjODYyM2IxZWI4MTQxN2E1ZTRkYjVhOWIg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MVHJlZUJ1aWxkZXIuaAorKysgYi9XZWJDb3Jl
L2h0bWwvSFRNTFRyZWVCdWlsZGVyLmgKQEAgLTQ5LDYgKzQ5LDczIEBAIGNsYXNzIEhUTUxEb2N1
bWVudDsKIGNsYXNzIExlZ2FjeUhUTUxUcmVlQnVpbGRlcjsKIGNsYXNzIE5vZGU7CiAKK2NsYXNz
IEhUTUxDb25zdHJ1Y3Rpb25TaXRlIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAg
ICBIVE1MQ29uc3RydWN0aW9uU2l0ZShEb2N1bWVudCosIEZyYWdtZW50U2NyaXB0aW5nUGVybWlz
c2lvbik7CisKKyAgICB2b2lkIGluc2VydERvY3R5cGUoQXRvbWljSFRNTFRva2VuJik7CisgICAg
dm9pZCBpbnNlcnRDb21tZW50KEF0b21pY0hUTUxUb2tlbiYpOworICAgIHZvaWQgaW5zZXJ0Q29t
bWVudE9uRG9jdW1lbnQoQXRvbWljSFRNTFRva2VuJik7CisgICAgdm9pZCBpbnNlcnRDb21tZW50
T25IVE1MSHRtbEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJik7CisgICAgdm9pZCBpbnNlcnRFbGVt
ZW50KEF0b21pY0hUTUxUb2tlbiYpOworICAgIHZvaWQgaW5zZXJ0U2VsZkNsb3NpbmdFbGVtZW50
KEF0b21pY0hUTUxUb2tlbiYpOworICAgIHZvaWQgaW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQoQXRv
bWljSFRNTFRva2VuJik7CisgICAgdm9pZCBpbnNlcnRIVE1MSHRtbEVsZW1lbnQoQXRvbWljSFRN
TFRva2VuJik7CisgICAgdm9pZCBpbnNlcnRIVE1MSGVhZEVsZW1lbnQoQXRvbWljSFRNTFRva2Vu
Jik7CisgICAgdm9pZCBpbnNlcnRIVE1MQm9keUVsZW1lbnQoQXRvbWljSFRNTFRva2VuJik7Cisg
ICAgdm9pZCBpbnNlcnRTY3JpcHRFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYpOworICAgIHZvaWQg
aW5zZXJ0VGV4dE5vZGUoQXRvbWljSFRNTFRva2VuJik7CisKKyAgICB2b2lkIGluc2VydEhUTUxI
dG1sU3RhcnRUYWdCZWZvcmVIVE1MKEF0b21pY0hUTUxUb2tlbiYpOworICAgIHZvaWQgaW5zZXJ0
SFRNTEh0bWxTdGFydFRhZ0luQm9keShBdG9taWNIVE1MVG9rZW4mKTsKKyAgICB2b2lkIGluc2Vy
dEhUTUxCb2R5U3RhcnRUYWdJbkJvZHkoQXRvbWljSFRNTFRva2VuJik7CisKKyAgICBQYXNzUmVm
UHRyPEVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnQoQXRvbWljSFRNTFRva2VuJik7CisKKyAgICBFbGVt
ZW50KiBjdXJyZW50RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlbkVsZW1lbnRzLnRvcCgp
OyB9CisgICAgSFRNTEVsZW1lbnRTdGFjayogb3BlbkVsZW1lbnRzKCkgY29uc3QgeyByZXR1cm4g
Jm1fb3BlbkVsZW1lbnRzOyB9CisgICAgSFRNTEZvcm1hdHRpbmdFbGVtZW50TGlzdCogYWN0aXZl
Rm9ybWF0dGluZ0VsZW1lbnRzKCkgY29uc3QgeyByZXR1cm4gJm1fYWN0aXZlRm9ybWF0dGluZ0Vs
ZW1lbnRzOyB9CisKKyAgICBFbGVtZW50KiBoZWFkKCkgY29uc3QgeyByZXR1cm4gbV9oZWFkLmdl
dCgpOyB9CisKKyAgICBFbGVtZW50KiBmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9mb3JtLmdldCgp
OyB9CisgICAgUGFzc1JlZlB0cjxFbGVtZW50PiByZWxlYXNlRm9ybSgpIHsgcmV0dXJuIG1fZm9y
bS5yZWxlYXNlKCk7IH0KKworICAgIHZvaWQgc2V0Rm9ybShFbGVtZW50KiBmb3JtKSB7IG1fZm9y
bSA9IGZvcm07IH0KKworICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBtZXRob2QuICBJdCBleGlz
dHMgb25seSB0byBzZXJ2aWNlIHRoZSBsZWdhY3kgdHJlZSBidWlsZGVyLgorICAgIEZyYWdtZW50
U2NyaXB0aW5nUGVybWlzc2lvbiBmcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24oKSBjb25zdCB7
IHJldHVybiBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbjsgfQorCitwcml2YXRlOgorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENoaWxkVHlwZT4KKyAgICBQYXNzUmVmUHRyPENoaWxkVHlwZT4g
YXR0YWNoKE5vZGUqIHBhcmVudCwgUGFzc1JlZlB0cjxDaGlsZFR5cGU+IHBycENoaWxkKQorICAg
IHsKKyAgICAgICAgUmVmUHRyPENoaWxkVHlwZT4gY2hpbGQgPSBwcnBDaGlsZDsKKyAgICAgICAg
cGFyZW50LT5wYXJzZXJBZGRDaGlsZChjaGlsZCk7CisgICAgICAgIC8vIEl0J3Mgc2xpZ2h0bHkg
dW5mb3J0dW5hdGUgdGhhdCB3ZSBuZWVkIHRvIGhvbGQgYSByZWZlcmVuY2UgdG8gY2hpbGQKKyAg
ICAgICAgLy8gaGVyZSB0byBjYWxsIGF0dGFjaCgpLiAgV2Ugc2hvdWxkIGludmVzdGlnYXRlIHdo
ZXRoZXIgd2UgY2FuIHJlbHkgb24KKyAgICAgICAgLy8gfHBhcmVudHwgdG8gaG9sZCBhIHJlZiBh
dCB0aGlzIHBvaW50LiAgSW4gdGhlIGNvbW1vbiBjYXNlIChhdCBsZWFzdAorICAgICAgICAvLyBm
b3IgZWxlbWVudHMpLCBob3dldmVyLCB3ZSdsbCBnZXQgdG8gdXNlIHRoaXMgcmVmIGluIHRoZSBz
dGFjayBvZgorICAgICAgICAvLyBvcGVuIGVsZW1lbnRzLgorICAgICAgICBjaGlsZC0+YXR0YWNo
KCk7CisgICAgICAgIHJldHVybiBjaGlsZC5yZWxlYXNlKCk7CisgICAgfQorCisgICAgUGFzc1Jl
ZlB0cjxFbGVtZW50PiBjcmVhdGVFbGVtZW50QW5kQXR0YWNoVG9DdXJyZW50KEF0b21pY0hUTUxU
b2tlbiYpOworICAgIHZvaWQgbWVyZ2VBdHRyaWJ1dGVzRnJvbVRva2VuSW50b0VsZW1lbnQoQXRv
bWljSFRNTFRva2VuJiwgRWxlbWVudCopOworCisgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7Cisg
ICAgUmVmUHRyPEVsZW1lbnQ+IG1faGVhZDsKKyAgICBSZWZQdHI8RWxlbWVudD4gbV9mb3JtOwor
ICAgIG11dGFibGUgSFRNTEVsZW1lbnRTdGFjayBtX29wZW5FbGVtZW50czsKKyAgICBtdXRhYmxl
IEhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QgbV9hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHM7CisK
KyAgICAvLyBGSVhNRTogRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIGlzIGEgSEFDSyBmb3Ig
cGxhdGZvcm0vUGFzdGVib2FyZC4KKyAgICAvLyBGcmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQg
Y2F1c2VzIHRoZSBQYXJzZXIgdG8gcmVtb3ZlIGNoaWxkcmVuCisgICAgLy8gZnJvbSA8c2NyaXB0
PiB0YWdzIChzbyBqYXZhc2NyaXB0IGRvZXNuJ3Qgc2hvdyB1cCBpbiBwYXN0ZXMpLgorICAgIEZy
YWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbjsK
K307CisKIGNsYXNzIEhUTUxUcmVlQnVpbGRlciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJs
aWM6CiAgICAgLy8gRklYTUU6IFJlcGxhY2UgY29uc3RydWN0b3JzIHdpdGggY3JlYXRlKCkgZnVu
Y3Rpb25zIHJldHVybmluZyBQYXNzT3duUHRycwpAQCAtMTMzLDYgKzIwMCwxMCBAQCBwcml2YXRl
OgogICAgIHZvaWQgcHJvY2Vzc0Zha2VDaGFyYWN0ZXJzKGNvbnN0IFN0cmluZyYpOwogICAgIHZv
aWQgcHJvY2Vzc0Zha2VQRW5kVGFnSWZQSW5TY29wZSgpOwogCisgICAgdm9pZCBwcm9jZXNzR2Vu
ZXJpY1JDREFUQVN0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYpOworICAgIHZvaWQgcHJvY2Vzc0dl
bmVyaWNSYXdUZXh0U3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJik7CisgICAgdm9pZCBwcm9jZXNz
U2NyaXB0U3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJik7CisKICAgICAvLyBEZWZhdWx0IHByb2Nl
c3NpbmcgZm9yIHRoZSBkaWZmZXJlbnQgaW5zZXJ0aW9uIG1vZGVzLgogICAgIC8vIEZJWE1FOiBU
aGVzZSBmdW5jdGlvbnMgbmVlZCB0byBiZSByZW5hbWVkIHRvIHJlbW92ZSAicHJvY2VzcyIgZnJv
bSB0aGVpciBuYW1lcy4KICAgICB2b2lkIHByb2Nlc3NEZWZhdWx0Rm9ySW5pdGlhbE1vZGUoQXRv
bWljSFRNTFRva2VuJik7CkBAIC0xNTEsNTUgKzIyMiwxMiBAQCBwcml2YXRlOgogCiAgICAgdm9p
ZCBjbG9zZVRoZUNlbGwoKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoaWxkVHlwZT4KLSAg
ICBQYXNzUmVmUHRyPENoaWxkVHlwZT4gYXR0YWNoKE5vZGUqIHBhcmVudCwgUGFzc1JlZlB0cjxD
aGlsZFR5cGU+IHBycENoaWxkKQotICAgIHsKLSAgICAgICAgUmVmUHRyPENoaWxkVHlwZT4gY2hp
bGQgPSBwcnBDaGlsZDsKLSAgICAgICAgcGFyZW50LT5wYXJzZXJBZGRDaGlsZChjaGlsZCk7Ci0g
ICAgICAgIC8vIEl0J3Mgc2xpZ2h0bHkgdW5mb3J0dW5hdGUgdGhhdCB3ZSBuZWVkIHRvIGhvbGQg
YSByZWZlcmVuY2UgdG8gY2hpbGQKLSAgICAgICAgLy8gaGVyZSB0byBjYWxsIGF0dGFjaCgpLiAg
V2Ugc2hvdWxkIGludmVzdGlnYXRlIHdoZXRoZXIgd2UgY2FuIHJlbHkgb24KLSAgICAgICAgLy8g
fHBhcmVudHwgdG8gaG9sZCBhIHJlZiBhdCB0aGlzIHBvaW50LiAgSW4gdGhlIGNvbW1vbiBjYXNl
IChhdCBsZWFzdAotICAgICAgICAvLyBmb3IgZWxlbWVudHMpLCBob3dldmVyLCB3ZSdsbCBnZXQg
dG8gdXNlIHRoaXMgcmVmIGluIHRoZSBzdGFjayBvZgotICAgICAgICAvLyBvcGVuIGVsZW1lbnRz
LgotICAgICAgICBjaGlsZC0+YXR0YWNoKCk7Ci0gICAgICAgIHJldHVybiBjaGlsZC5yZWxlYXNl
KCk7Ci0gICAgfQotCi0gICAgdm9pZCBpbnNlcnREb2N0eXBlKEF0b21pY0hUTUxUb2tlbiYpOwot
ICAgIHZvaWQgaW5zZXJ0Q29tbWVudChBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIGluc2Vy
dENvbW1lbnRPbkRvY3VtZW50KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgaW5zZXJ0Q29t
bWVudE9uSFRNTEh0bWxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgaW5zZXJ0
SFRNTEh0bWxFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgaW5zZXJ0SFRNTEhl
YWRFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgaW5zZXJ0SFRNTEJvZHlFbGVt
ZW50KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZvaWQgaW5zZXJ0RWxlbWVudChBdG9taWNIVE1M
VG9rZW4mKTsKLSAgICB2b2lkIGluc2VydFNlbGZDbG9zaW5nRWxlbWVudChBdG9taWNIVE1MVG9r
ZW4mKTsKLSAgICB2b2lkIGluc2VydEZvcm1hdHRpbmdFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYp
OwotICAgIHZvaWQgaW5zZXJ0R2VuZXJpY1JDREFUQUVsZW1lbnQoQXRvbWljSFRNTFRva2VuJik7
Ci0gICAgdm9pZCBpbnNlcnRHZW5lcmljUmF3VGV4dEVsZW1lbnQoQXRvbWljSFRNTFRva2VuJik7
Ci0gICAgdm9pZCBpbnNlcnRTY3JpcHRFbGVtZW50KEF0b21pY0hUTUxUb2tlbiYpOwotICAgIHZv
aWQgaW5zZXJ0VGV4dE5vZGUoQXRvbWljSFRNTFRva2VuJik7Ci0KLSAgICB2b2lkIGluc2VydEhU
TUxTdGFydFRhZ0JlZm9yZUhUTUwoQXRvbWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBpbnNlcnRI
VE1MU3RhcnRUYWdJbkJvZHkoQXRvbWljSFRNTFRva2VuJik7Ci0KLSAgICBQYXNzUmVmUHRyPEVs
ZW1lbnQ+IGNyZWF0ZUVsZW1lbnQoQXRvbWljSFRNTFRva2VuJik7Ci0gICAgUGFzc1JlZlB0cjxF
bGVtZW50PiBjcmVhdGVFbGVtZW50QW5kQXR0YWNoVG9DdXJyZW50KEF0b21pY0hUTUxUb2tlbiYp
OwotCi0gICAgdm9pZCBtZXJnZUF0dHJpYnV0ZXNGcm9tVG9rZW5JbnRvRWxlbWVudChBdG9taWNI
VE1MVG9rZW4mLCBFbGVtZW50Kik7Ci0KICAgICBib29sIGluZGV4T2ZGaXJzdFVub3BlbkZvcm1h
dHRpbmdFbGVtZW50KHVuc2lnbmVkJiBmaXJzdFVub3BlbkVsZW1lbnRJbmRleCkgY29uc3Q7CiAg
ICAgdm9pZCByZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwogCiAgICAg
dm9pZCBnZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCk7CiAgICAgdm9pZCBnZW5lcmF0ZUltcGxpZWRF
bmRUYWdzV2l0aEV4Y2x1c2lvbihjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpOwogCi0gICAg
RWxlbWVudCogY3VycmVudEVsZW1lbnQoKSB7IHJldHVybiBtX29wZW5FbGVtZW50cy50b3AoKTsg
fQotCi0gICAgUmVmUHRyPEVsZW1lbnQ+IG1faGVhZEVsZW1lbnQ7Ci0gICAgUmVmUHRyPEVsZW1l
bnQ+IG1fZm9ybUVsZW1lbnQ7Ci0gICAgSFRNTEVsZW1lbnRTdGFjayBtX29wZW5FbGVtZW50czsK
LSAgICBIVE1MRm9ybWF0dGluZ0VsZW1lbnRMaXN0IG1fYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRz
OwogICAgIGJvb2wgbV9mcmFtZXNldE9rOwogCiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBlcnJv
ciByZXBvcnRpbmcuCkBAIC0yMTYsNyArMjQ0LDkgQEAgcHJpdmF0ZToKIAogICAgIHN0YXRpYyBi
b29sIGlzU2NyaXB0aW5nRmxhZ0VuYWJsZWQoRnJhbWUqIGZyYW1lKTsKIAotICAgIERvY3VtZW50
KiBtX2RvY3VtZW50OyAvLyBUaGlzIGlzIG9ubHkgdXNlZCBieSB0aGUgbV9sZWdhY3lQYXJzZXIg
Zm9yIG5vdy4KKyAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKKyAgICBIVE1MQ29uc3RydWN0aW9u
U2l0ZSBtX3NpdGU7CisKICAgICBib29sIG1fcmVwb3J0RXJyb3JzOwogICAgIGJvb2wgbV9pc1Bh
dXNlZDsKIApAQCAtMjM5LDEwICsyNjksNiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxFbGVtZW50
PiBtX3NjcmlwdFRvUHJvY2VzczsgLy8gPHNjcmlwdD4gdGFnIHdoaWNoIG5lZWRzIHByb2Nlc3Np
bmcgYmVmb3JlIHJlc3VtaW5nIHRoZSBwYXJzZXIuCiAgICAgaW50IG1fc2NyaXB0VG9Qcm9jZXNz
U3RhcnRMaW5lOyAvLyBTdGFydGluZyBsaW5lIG51bWJlciBvZiB0aGUgc2NyaXB0IHRhZyBuZWVk
aW5nIHByb2Nlc3NpbmcuCiAKLSAgICAvLyBGSVhNRTogRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNz
aW9uIGlzIGEgSEFDSyBmb3IgcGxhdGZvcm0vUGFzdGVib2FyZC4KLSAgICAvLyBGcmFnbWVudFNj
cmlwdGluZ05vdEFsbG93ZWQgY2F1c2VzIHRoZSBQYXJzZXIgdG8gcmVtb3ZlIGNoaWxkcmVuCi0g
ICAgLy8gZnJvbSA8c2NyaXB0PiB0YWdzIChzbyBqYXZhc2NyaXB0IGRvZXNuJ3Qgc2hvdyB1cCBp
biBwYXN0ZXMpLgotICAgIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBtX2ZyYWdtZW50U2Ny
aXB0aW5nUGVybWlzc2lvbjsKICAgICBib29sIG1faXNQYXJzaW5nRnJhZ21lbnQ7CiB9OwogCg==
</data>
<flag name="review"
          id="48298"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>