<?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>122957</bug_id>
          
          <creation_ts>2013-10-17 05:25:54 -0700</creation_ts>
          <short_desc>[CSSRegions] Move region styling code into RenderNamedFlowFragment</short_desc>
          <delta_ts>2013-11-20 00:45:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>AdobeTracked</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>57312</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Mihnea Ovidenie">mihnea</reporter>
          <assigned_to name="Andrei Bucur">abucur</assigned_to>
          <cc>abucur</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mibalan</cc>
    
    <cc>WebkitBugTracker</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>940734</commentid>
    <comment_count>0</comment_count>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2013-10-17 05:25:54 -0700</bug_when>
    <thetext>After https://bugs.webkit.org/show_bug.cgi?id=119135, the region styling code should be moved from RenderRegion class to the new RenderNamedFlowFragment class. RenderNamedFlowFragment will contain functionality specific to CSSRegions only, as it is the case for region styling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952056</commentid>
    <comment_count>1</comment_count>
      <attachid>217295</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-11-19 06:50:21 -0800</bug_when>
    <thetext>Created attachment 217295
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952070</commentid>
    <comment_count>2</comment_count>
      <attachid>217295</attachid>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2013-11-19 08:17:58 -0800</bug_when>
    <thetext>Comment on attachment 217295
Patch

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

Looks good, but i have some comments before i r+ it.

&gt; Source/WebCore/ChangeLog:8
&gt; +        The patch moves all the region styling functionality outside of RenderRegion

You are also moving painting from RenderRegion to RenderNamedFlowFragment and you should mention that in changelog.

&gt; Source/WebCore/ChangeLog:11
&gt; +        when everything CSS Regions specific will be located inside RenderNamedFlowThread

It may be nice to specify what other functionality you have in mind here.

&gt; Source/WebCore/rendering/RenderNamedFlowFragment.cpp:289
&gt; +    m_flowThread-&gt;paintFlowThreadPortionInRegion(paintInfo, this, flowThreadPortionRect(), flowThreadPortionOverflowRect(), LayoutPoint(paintOffset.x() + borderLeft() + paddingLeft(), paintOffset.y() + borderTop() + paddingTop()));

Do we still need to add borderLeft(), paddingLeft, borderTop and paddingTop? Are they not null for the anonymous regions?

&gt; Source/WebCore/rendering/RenderNamedFlowFragment.h:75
&gt; +// FIXME: Temporarily public until we move all the CSSRegions functionality from RenderRegion to here.

I dislike this but i do not have a better solution. I guess it does not make sense to virtualize the method to avoid the change of accessibility.

&gt; Source/WebCore/rendering/RenderRegion.cpp:298
&gt; +    if (m_flowThread &amp;&amp; oldStyle &amp;&amp; oldStyle-&gt;writingMode() != style().writingMode())

You do not need to check m_flowThread here as you tested already above.

&gt; Source/WebCore/rendering/RenderRegion.cpp:431
&gt; +        toRenderNamedFlowFragment(this)-&gt;checkRegionStyle();

It&apos;s a pity you had to include a file &quot;RenderNamedFlowFragment.h&quot; just for this check.

&gt; Source/WebCore/rendering/RenderTreeAsText.cpp:661
&gt; +        RenderNamedFlowFragment* renderRegion = toRenderNamedFlowFragment(*itRR);

If you cast it here, it means this function cannot be used in the future for dumping regions for other functionalities that use regions and flow threads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952095</commentid>
    <comment_count>3</comment_count>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-11-19 09:26:17 -0800</bug_when>
    <thetext>Thanks for the review, patch incorporating feedback on its way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952108</commentid>
    <comment_count>4</comment_count>
      <attachid>217306</attachid>
    <who name="Andrei Bucur">abucur</who>
    <bug_when>2013-11-19 09:42:58 -0800</bug_when>
    <thetext>Created attachment 217306
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952119</commentid>
    <comment_count>5</comment_count>
      <attachid>217306</attachid>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2013-11-19 10:07:53 -0800</bug_when>
    <thetext>Comment on attachment 217306
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952475</commentid>
    <comment_count>6</comment_count>
      <attachid>217306</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-20 00:45:12 -0800</bug_when>
    <thetext>Comment on attachment 217306
Patch

Clearing flags on attachment: 217306

Committed r159553: &lt;http://trac.webkit.org/changeset/159553&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>952476</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-20 00:45:14 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217295</attachid>
            <date>2013-11-19 06:50:21 -0800</date>
            <delta_ts>2013-11-19 09:42:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-122957-20131119165031.patch</filename>
            <type>text/plain</type>
            <size>40138</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmODIwNDNjMzQyZWM5ZDVjYmE5MmIyY2ExZThhZjhhMmVkNTVlNTg1Li5l
MTE2MjVjZThiNDE3YmY4ZTRlNWQ3YTZjMTY1MjlmNGRkNWRjZjFlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNTIgQEAKKzIwMTMtMTEtMTkgIEFuZHJlaSBCdWN1ciAgPGFidWN1ckBhZG9iZS5jb20+
CisKKyAgICAgICAgW0NTU1JlZ2lvbnNdIE1vdmUgcmVnaW9uIHN0eWxpbmcgY29kZSBpbnRvIFJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMjI5NTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGUgcGF0Y2ggbW92ZXMgYWxsIHRoZSByZWdpb24gc3R5bGluZyBmdW5j
dGlvbmFsaXR5IG91dHNpZGUgb2YgUmVuZGVyUmVnaW9uCisgICAgICAgIHRvIFJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50IGFuZCBvdXRzaWRlIG9mIFJlbmRlckZsb3dUaHJlYWQgdG8gUmVuZGVyTmFt
ZWRGbG93VGhyZWFkLgorICAgICAgICBUaGlzIGdlbmVyYXRlcyBhIGNvdXBsZSBvZiB1bmRlc2ly
ZWQgY2FzdHMgdGhhdCB3aWxsIGJlIHJlbW92ZWQgaW4gbGF0ZXIgcGF0Y2hlcworICAgICAgICB3
aGVuIGV2ZXJ5dGhpbmcgQ1NTIFJlZ2lvbnMgc3BlY2lmaWMgd2lsbCBiZSBsb2NhdGVkIGluc2lk
ZSBSZW5kZXJOYW1lZEZsb3dUaHJlYWQKKyAgICAgICAgYW5kIFJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50LgorCisgICAgICAgIFRlc3RzOiBObyBjaGFuZ2VkIGZ1bmN0aW9uYWxpdHksIGp1c3QgcmVm
YWN0b3JpbmdzLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6UmVuZGVyRmxvd1RocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpyZW1vdmVGbG93Q2hpbGRJbmZvKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmNsZWFyUmVuZGVyQm94UmVnaW9u
SW5mb0FuZEN1c3RvbVN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVh
ZC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVySW5saW5lOjp1cGRhdGVBbHdheXNDcmVhdGVMaW5lQm94ZXMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OnN0eWxlRGlkQ2hhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjpjaGVja1JlZ2lv
blN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Ojpjb21w
dXRlU3R5bGVJblJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudDo6Y29tcHV0ZUNoaWxkcmVuU3R5bGVJblJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6c2V0T2JqZWN0U3R5bGVJblJlZ2lvbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6Y2xlYXJPYmplY3RTdHlsZUluUmVn
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjpzZXRSZWdp
b25PYmplY3RzUmVnaW9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQ6OnJlc3RvcmVSZWdpb25PYmplY3RzT3JpZ2luYWxTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpzaG91bGRQYWludFJlZ2lvbkNvbnRlbnRzSW5QaGFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6cGFpbnRPYmplY3QpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRG
bG93VGhyZWFkOjpSZW5kZXJOYW1lZEZsb3dUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTmFtZWRGbG93VGhyZWFkOjpjaGVja1JlZ2lvbnNXaXRoU3R5bGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmNsZWFyUmVuZGVyT2JqZWN0Q3VzdG9tU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpyZW1vdmVGbG93
Q2hpbGRJbmZvKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmg6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJSZWdpb246OlJlbmRlclJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJS
ZWdpb246OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6
YXR0YWNoUmVnaW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
d3JpdGVSZW5kZXJSZWdpb25MaXN0KToKKwogMjAxMy0xMS0xOSAgUnlvc3VrZSBOaXdhICA8cm5p
d2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgbW9yZSBhc3NlcnRpb25zIHdpdGggc2VjdXJp
dHkgaW1wbGljYXRpb25zIGluIERvY3VtZW50T3JkZXJlZE1hcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCmluZGV4IDg0NzllNjZkYTI0MzQ2YjAwMGRm
YzRiYWRjNzFlNTQxMDA2OWQwODYuLjQ1YmNkZmFlMzk3OTEwMjcyNGNjNmE0NTgzY2EzMTEyNzgx
ZTgwYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhy
ZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5j
cHAKQEAgLTU4LDcgKzU4LDYgQEAgUmVuZGVyRmxvd1RocmVhZDo6UmVuZGVyRmxvd1RocmVhZChE
b2N1bWVudCYgZG9jdW1lbnQsIFBhc3NSZWY8UmVuZGVyU3R5bGU+IHN0eWwKICAgICAsIG1fcmVn
aW9uc0ludmFsaWRhdGVkKGZhbHNlKQogICAgICwgbV9yZWdpb25zSGF2ZVVuaWZvcm1Mb2dpY2Fs
V2lkdGgodHJ1ZSkKICAgICAsIG1fcmVnaW9uc0hhdmVVbmlmb3JtTG9naWNhbEhlaWdodCh0cnVl
KQotICAgICwgbV9oYXNSZWdpb25zV2l0aFN0eWxpbmcoZmFsc2UpCiAgICAgLCBtX2Rpc3BhdGNo
UmVnaW9uTGF5b3V0VXBkYXRlRXZlbnQoZmFsc2UpCiAgICAgLCBtX2Rpc3BhdGNoUmVnaW9uT3Zl
cnNldENoYW5nZUV2ZW50KGZhbHNlKQogICAgICwgbV9wYWdlTG9naWNhbFNpemVDaGFuZ2VkKGZh
bHNlKQpAQCAtOTgsNyArOTcsNiBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnJlbW92ZUZsb3dD
aGlsZEluZm8oUmVuZGVyT2JqZWN0KiBjaGlsZCkKIHsKICAgICBpZiAoY2hpbGQtPmlzQm94KCkp
CiAgICAgICAgIHJlbW92ZVJlbmRlckJveFJlZ2lvbkluZm8odG9SZW5kZXJCb3goY2hpbGQpKTsK
LSAgICBjbGVhclJlbmRlck9iamVjdEN1c3RvbVN0eWxlKGNoaWxkKTsKIH0KIAogdm9pZCBSZW5k
ZXJGbG93VGhyZWFkOjphZGRSZWdpb25Ub1RocmVhZChSZW5kZXJSZWdpb24qIHJlbmRlclJlZ2lv
bikKQEAgLTgxNywxNiArODE1LDYgQEAgUmVuZGVyUmVnaW9uKiBSZW5kZXJGbG93VGhyZWFkOjps
YXN0UmVnaW9uKCkgY29uc3QKICAgICByZXR1cm4gbV9yZWdpb25MaXN0Lmxhc3QoKTsKIH0KIAot
dm9pZCBSZW5kZXJGbG93VGhyZWFkOjpjbGVhclJlbmRlck9iamVjdEN1c3RvbVN0eWxlKGNvbnN0
IFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIC8vIENsZWFyIHRoZSBzdHlsZXMgZm9yIHRo
ZSBvYmplY3QgaW4gdGhlIHJlZ2lvbnMuCi0gICAgLy8gRklYTUU6IFJlZ2lvbiBzdHlsaW5nIGlz
IG5vdCBjb21wdXRlZCBvbmx5IGZvciB0aGUgcmVnaW9uIHJhbmdlIG9mIHRoZSBvYmplY3Qgc28g
dGhpcyBpcyB3aHkgd2UgbmVlZCB0byB3YWxrIHRoZSB3aG9sZSBjaGFpbi4KLSAgICBmb3IgKGF1
dG8gaXRlciA9IG1fcmVnaW9uTGlzdC5iZWdpbigpLCBlbmQgPSBtX3JlZ2lvbkxpc3QuZW5kKCk7
IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSAq
aXRlcjsKLSAgICAgICAgcmVnaW9uLT5jbGVhck9iamVjdFN0eWxlSW5SZWdpb24ob2JqZWN0KTsK
LSAgICB9Ci19Ci0KIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6Y2xlYXJSZW5kZXJCb3hSZWdpb25J
bmZvQW5kQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyQm94KiBib3gsCiAgICAgY29uc3QgUmVuZGVy
UmVnaW9uKiBuZXdTdGFydFJlZ2lvbiwgY29uc3QgUmVuZGVyUmVnaW9uKiBuZXdFbmRSZWdpb24s
CiAgICAgY29uc3QgUmVuZGVyUmVnaW9uKiBvbGRTdGFydFJlZ2lvbiwgY29uc3QgUmVuZGVyUmVn
aW9uKiBvbGRFbmRSZWdpb24pCkBAIC04NDQsNyArODMyLDggQEAgdm9pZCBSZW5kZXJGbG93VGhy
ZWFkOjpjbGVhclJlbmRlckJveFJlZ2lvbkluZm9BbmRDdXN0b21TdHlsZShjb25zdCBSZW5kZXJC
b3gqIGIKICAgICAgICAgICAgIGluc2lkZU5ld1JlZ2lvblJhbmdlID0gdHJ1ZTsKIAogICAgICAg
ICBpZiAoIShpbnNpZGVPbGRSZWdpb25SYW5nZSAmJiBpbnNpZGVOZXdSZWdpb25SYW5nZSkpIHsK
LSAgICAgICAgICAgIHJlZ2lvbi0+Y2xlYXJPYmplY3RTdHlsZUluUmVnaW9uKGJveCk7CisgICAg
ICAgICAgICBpZiAocmVnaW9uLT5pc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkpCisgICAgICAg
ICAgICAgICAgdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChyZWdpb24pLT5jbGVhck9iamVjdFN0
eWxlSW5SZWdpb24oYm94KTsKICAgICAgICAgICAgIGlmIChyZWdpb24tPnJlbmRlckJveFJlZ2lv
bkluZm8oYm94KSkKICAgICAgICAgICAgICAgICByZWdpb24tPnJlbW92ZVJlbmRlckJveFJlZ2lv
bkluZm8oYm94KTsKICAgICAgICAgfQpAQCAtOTEyLDIwICs5MDEsNiBAQCBib29sIFJlbmRlckZs
b3dUaHJlYWQ6OnJlZ2lvbkluUmFuZ2UoY29uc3QgUmVuZGVyUmVnaW9uKiB0YXJnZXRSZWdpb24s
IGNvbnN0IFJlbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotLy8gQ2hlY2sgaWYgdGhlIGNvbnRl
bnQgaXMgZmxvd24gaW50byBhdCBsZWFzdCBhIHJlZ2lvbiB3aXRoIHJlZ2lvbiBzdHlsaW5nIHJ1
bGVzLgotdm9pZCBSZW5kZXJGbG93VGhyZWFkOjpjaGVja1JlZ2lvbnNXaXRoU3R5bGluZygpCi17
Ci0gICAgYm9vbCBoYXNSZWdpb25zV2l0aFN0eWxpbmcgPSBmYWxzZTsKLSAgICBmb3IgKGF1dG8g
aXRlciA9IG1fcmVnaW9uTGlzdC5iZWdpbigpLCBlbmQgPSBtX3JlZ2lvbkxpc3QuZW5kKCk7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSAqaXRl
cjsKLSAgICAgICAgaWYgKHJlZ2lvbi0+aGFzQ3VzdG9tUmVnaW9uU3R5bGUoKSkgewotICAgICAg
ICAgICAgaGFzUmVnaW9uc1dpdGhTdHlsaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgfQotICAgIG1faGFzUmVnaW9uc1dpdGhTdHlsaW5nID0gaGFzUmVnaW9u
c1dpdGhTdHlsaW5nOwotfQotCiBib29sIFJlbmRlckZsb3dUaHJlYWQ6Om9iamVjdEluRmxvd1Jl
Z2lvbihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdp
b24pIGNvbnN0CiB7CiAgICAgQVNTRVJUKG9iamVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZsb3dUaHJlYWQuaAppbmRleCBlNjJmZGUzMzRkNGJjMDBiYmE0MWM0YWM5NTky
ZTYwYjNkM2EzMDM0Li40NzUzNzc0NzBhMzMzNTUwM2E3NTFkNjVlNTQ5NTUzMzMxMWFlODgzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmgKQEAgLTcxLDcg
KzcxLDcgQEAgcHVibGljOgogICAgIC8vIGNhbiBlYXNpbHkgYXZvaWQgZHJhd2luZyB0aGUgY2hp
bGRyZW4gZGlyZWN0bHkuCiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKSBjb25zdCBP
VkVSUklERSBGSU5BTCB7IHJldHVybiB0cnVlOyB9CiAgICAgCi0gICAgdm9pZCByZW1vdmVGbG93
Q2hpbGRJbmZvKFJlbmRlck9iamVjdCopOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVGbG93Q2hp
bGRJbmZvKFJlbmRlck9iamVjdCopOwogI2lmbmRlZiBOREVCVUcKICAgICBib29sIGhhc0NoaWxk
SW5mbyhSZW5kZXJPYmplY3QqIGNoaWxkKSBjb25zdCB7IHJldHVybiBjaGlsZCAmJiBjaGlsZC0+
aXNCb3goKSAmJiBtX3JlZ2lvblJhbmdlTWFwLmNvbnRhaW5zKHRvUmVuZGVyQm94KGNoaWxkKSk7
IH0KICNlbmRpZgpAQCAtODgsOSArODgsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIG5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhp
dFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKIAogICAgIGJvb2wgaGFz
UmVnaW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaW9uTGlzdC5zaXplKCk7IH0KLSAgICAvLyBD
aGVjayBpZiB0aGUgY29udGVudCBpcyBmbG93biBpbnRvIGF0IGxlYXN0IGEgcmVnaW9uIHdpdGgg
cmVnaW9uIHN0eWxpbmcgcnVsZXMuCi0gICAgYm9vbCBoYXNSZWdpb25zV2l0aFN0eWxpbmcoKSBj
b25zdCB7IHJldHVybiBtX2hhc1JlZ2lvbnNXaXRoU3R5bGluZzsgfQotICAgIHZvaWQgY2hlY2tS
ZWdpb25zV2l0aFN0eWxpbmcoKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVnaW9uQ2hhbmdlZFdyaXRp
bmdNb2RlKFJlbmRlclJlZ2lvbiopIHsgfQogCiAgICAgdm9pZCB2YWxpZGF0ZVJlZ2lvbnMoKTsK
QEAgLTE0MSw4ICsxMzgsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSZWdpb25SYW5nZUZvckJv
eChjb25zdCBSZW5kZXJCb3gqLCBSZW5kZXJSZWdpb24qLCBSZW5kZXJSZWdpb24qKTsKICAgICB2
b2lkIGdldFJlZ2lvblJhbmdlRm9yQm94KGNvbnN0IFJlbmRlckJveCosIFJlbmRlclJlZ2lvbiom
IHN0YXJ0UmVnaW9uLCBSZW5kZXJSZWdpb24qJiBlbmRSZWdpb24pIGNvbnN0OwogCi0gICAgdm9p
ZCBjbGVhclJlbmRlck9iamVjdEN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlck9iamVjdCopOwotCiAg
ICAgLy8gQ2hlY2sgaWYgdGhlIG9iamVjdCBpcyBpbiByZWdpb24gYW5kIHRoZSByZWdpb24gaXMg
cGFydCBvZiB0aGlzIGZsb3cgdGhyZWFkLgogICAgIGJvb2wgb2JqZWN0SW5GbG93UmVnaW9uKGNv
bnN0IFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlclJlZ2lvbiopIGNvbnN0OwogCkBAIC0zNDgs
NyArMzQzLDYgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgbV9yZWdpb25zSW52YWxpZGF0ZWQgOiAx
OwogICAgIGJvb2wgbV9yZWdpb25zSGF2ZVVuaWZvcm1Mb2dpY2FsV2lkdGggOiAxOwogICAgIGJv
b2wgbV9yZWdpb25zSGF2ZVVuaWZvcm1Mb2dpY2FsSGVpZ2h0IDogMTsKLSAgICBib29sIG1faGFz
UmVnaW9uc1dpdGhTdHlsaW5nIDogMTsKICAgICBib29sIG1fZGlzcGF0Y2hSZWdpb25MYXlvdXRV
cGRhdGVFdmVudCA6IDE7CiAgICAgYm9vbCBtX2Rpc3BhdGNoUmVnaW9uT3ZlcnNldENoYW5nZUV2
ZW50IDogMTsKICAgICBib29sIG1fcGFnZUxvZ2ljYWxTaXplQ2hhbmdlZCA6IDE7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCmluZGV4IGI0Y2E3M2Y0Y2E5YzU2ZDgx
NWM3NDcwODY3ODc2OTU0NjM3NWU3NjguLjI5YzViNzM5YjQ0Mjc2NmViM2M2ODAzYWMwNzdkMDZh
NjQzNGQ0YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCkBA
IC0zMSwxMiArMzEsMTIgQEAKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCiAjaW5jbHVkZSAi
UGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCi0jaW5jbHVkZSAiUmVuZGVyRmxvd1Ro
cmVhZC5oIgogI2luY2x1ZGUgIlJlbmRlckZ1bGxTY3JlZW4uaCIKICNpbmNsdWRlICJSZW5kZXJH
ZW9tZXRyeU1hcC5oIgogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMaW5lQnJlYWsuaCIKKyNpbmNsdWRlICJSZW5k
ZXJOYW1lZEZsb3dUaHJlYWQuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUg
IlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTdHlsZUluaGVyaXRlZERhdGEuaCIKQEAgLTIxNyw3
ICsyMTcsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6dXBkYXRlQWx3YXlzQ3JlYXRlTGluZUJveGVz
KGJvb2wgZnVsbExheW91dCkKICAgICAgICAgfHwgc3R5bGUoKS50ZXh0RW1waGFzaXNNYXJrKCkg
IT0gVGV4dEVtcGhhc2lzTWFya05vbmUKICAgICAgICAgfHwgKGNoZWNrRm9udHMgJiYgKCFwYXJl
bnRTdHlsZS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuaGFzSWRlbnRpY2FsQXNjZW50RGVzY2VudEFu
ZExpbmVHYXAoc3R5bGUoKS5mb250KCkuZm9udE1ldHJpY3MoKSkKICAgICAgICAgfHwgcGFyZW50
U3R5bGUtPmxpbmVIZWlnaHQoKSAhPSBzdHlsZSgpLmxpbmVIZWlnaHQoKSkpCi0gICAgICAgIHx8
IChmbG93VGhyZWFkICYmIGZsb3dUaHJlYWQtPmhhc1JlZ2lvbnNXaXRoU3R5bGluZygpKTsKKyAg
ICAgICAgfHwgKGZsb3dUaHJlYWQgJiYgZmxvd1RocmVhZC0+aXNSZW5kZXJOYW1lZEZsb3dUaHJl
YWQoKSAmJiB0b1JlbmRlck5hbWVkRmxvd1RocmVhZChmbG93VGhyZWFkKS0+aGFzUmVnaW9uc1dp
dGhTdHlsaW5nKCkpOwogCiAgICAgaWYgKCFhbHdheXNDcmVhdGVMaW5lQm94ZXMgJiYgY2hlY2tG
b250cyAmJiBkb2N1bWVudCgpLnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkudXNlc0ZpcnN0TGluZVJ1
bGVzKCkpIHsKICAgICAgICAgLy8gSGF2ZSB0byBjaGVjayB0aGUgZmlyc3QgbGluZSBzdHlsZSBh
cyB3ZWxsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZs
b3dGcmFnbWVudC5jcHAKaW5kZXggMzFhMTNjMDU3MTQ2ZDZkNWY5YjQzMTg4MDgxMTFhYTY4ZjQ4
ZjgzMC4uMWFlYzk3NDY0NzdmMmYzOGFiYThiMmYyZDdiNTQ2ZDFmNDI1NTliMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuY3Bw
CkBAIC00Miw2ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQ6OlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KERvY3VtZW50JiBkb2N1bWVudCwgUGFz
c1JlZjxSZW5kZXJTdHlsZT4gc3R5bGUpCiAgICAgOiBSZW5kZXJSZWdpb24oZG9jdW1lbnQsIHN0
ZDo6bW92ZShzdHlsZSksIG51bGxwdHIpCisgICAgLCBtX2hhc0N1c3RvbVJlZ2lvblN0eWxlKGZh
bHNlKQogewogfQogCkBAIC02Niw4ICs2NywxNiBAQCBQYXNzUmVmPFJlbmRlclN0eWxlPiBSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudDo6Y3JlYXRlU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHBhcgog
dm9pZCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJl
bmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsKICAgICBSZW5kZXJSZWdp
b246OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKLSAgICBpZiAoIW1fZmxvd1RocmVh
ZCkKKworICAgIC8vIElmIHRoZSByZWdpb24gaXMgbm90IGF0dGFjaGVkIHRvIGFueSB0aHJlYWQs
IHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sKKyAgICAvLyB3aGV0aGVyIHRoZSByZWdpb24gaGFz
IHJlZ2lvbiBzdHlsaW5nIHNpbmNlIG5vIGNvbnRlbnQgd2lsbCBiZSBkaXNwbGF5ZWQKKyAgICAv
LyBpbnRvIHRoZSByZWdpb24uCisgICAgaWYgKCFtX2Zsb3dUaHJlYWQpIHsKKyAgICAgICAgc2V0
SGFzQ3VzdG9tUmVnaW9uU3R5bGUoZmFsc2UpOwogICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgY2hlY2tSZWdpb25TdHlsZSgpOwogCiAgICAgaWYgKHBhcmVudCgpICYmIHBhcmVudCgpLT5u
ZWVkc0xheW91dCgpKQogICAgICAgICBzZXROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwpAQCAt
OTQsNCArMTAzLDE5MSBAQCBMYXlvdXRVbml0IFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjptYXhQ
YWdlTG9naWNhbEhlaWdodCgpIGNvbnN0CiAgICAgcmV0dXJuIHN0eWxlVG9Vc2UubG9naWNhbE1h
eEhlaWdodCgpLmlzVW5kZWZpbmVkKCkgPyBSZW5kZXJGbG93VGhyZWFkOjptYXhMb2dpY2FsSGVp
Z2h0KCkgOiB0b1JlbmRlckJsb2NrKHBhcmVudCgpKS0+Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhl
aWdodFVzaW5nKHN0eWxlVG9Vc2UubG9naWNhbE1heEhlaWdodCgpKTsKIH0KIAordm9pZCBSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudDo6Y2hlY2tSZWdpb25TdHlsZSgpCit7CisgICAgQVNTRVJUKG1f
Zmxvd1RocmVhZCk7CisgICAgYm9vbCBjdXN0b21SZWdpb25TdHlsZSA9IGZhbHNlOworCisgICAg
Ly8gRklYTUU6IFJlZ2lvbiBzdHlsaW5nIGRvZXNuJ3Qgd29yayBmb3IgcHNldWRvIGVsZW1lbnRz
LgorICAgIGlmICghaXNQc2V1ZG9FbGVtZW50KCkpCisgICAgICAgIGN1c3RvbVJlZ2lvblN0eWxl
ID0gdmlldygpLmRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmNoZWNrUmVnaW9uU3R5
bGUoZ2VuZXJhdGluZ0VsZW1lbnQoKSk7CisgICAgc2V0SGFzQ3VzdG9tUmVnaW9uU3R5bGUoY3Vz
dG9tUmVnaW9uU3R5bGUpOworICAgIHRvUmVuZGVyTmFtZWRGbG93VGhyZWFkKG1fZmxvd1RocmVh
ZCktPmNoZWNrUmVnaW9uc1dpdGhTdHlsaW5nKCk7Cit9CisKK1Bhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Ojpjb21wdXRlU3R5bGVJblJlZ2lvbihjb25zdCBS
ZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICBBU1NFUlQob2JqZWN0KTsKKyAgICBBU1NFUlQo
IW9iamVjdC0+aXNBbm9ueW1vdXMoKSk7CisgICAgQVNTRVJUKG9iamVjdC0+bm9kZSgpICYmIG9i
amVjdC0+bm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpOworCisgICAgLy8gRklYTUU6IFJlZ2lvbiBz
dHlsaW5nIGZhaWxzIGZvciBwc2V1ZG8tZWxlbWVudHMgYmVjYXVzZSB0aGUgcmVuZGVyZXJzIGRv
bid0IGhhdmUgYSBub2RlLgorICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQob2JqZWN0
LT5ub2RlKCkpOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcmVuZGVyT2JqZWN0UmVnaW9uU3R5
bGUgPSBvYmplY3QtPnZpZXcoKS5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5zdHls
ZUZvckVsZW1lbnQoZWxlbWVudCwgMCwgRGlzYWxsb3dTdHlsZVNoYXJpbmcsIE1hdGNoQWxsUnVs
ZXMsIHRoaXMpOworCisgICAgcmV0dXJuIHJlbmRlck9iamVjdFJlZ2lvblN0eWxlLnJlbGVhc2Uo
KTsKK30KKwordm9pZCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6Y29tcHV0ZUNoaWxkcmVuU3R5
bGVJblJlZ2lvbihjb25zdCBSZW5kZXJFbGVtZW50KiBvYmplY3QpCit7CisgICAgZm9yIChSZW5k
ZXJPYmplY3QqIGNoaWxkID0gb2JqZWN0LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT5uZXh0U2libGluZygpKSB7CisKKyAgICAgICAgYXV0byBpdCA9IG1fcmVuZGVyT2JqZWN0
UmVnaW9uU3R5bGUuZmluZChjaGlsZCk7CisKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBj
aGlsZFN0eWxlSW5SZWdpb247CisgICAgICAgIGJvb2wgb2JqZWN0UmVnaW9uU3R5bGVDYWNoZWQg
PSBmYWxzZTsKKyAgICAgICAgaWYgKGl0ICE9IG1fcmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUuZW5k
KCkpIHsKKyAgICAgICAgICAgIGNoaWxkU3R5bGVJblJlZ2lvbiA9IGl0LT52YWx1ZS5zdHlsZTsK
KyAgICAgICAgICAgIG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVkID0gdHJ1ZTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGlmIChjaGlsZC0+aXNBbm9ueW1vdXMoKSB8fCBjaGlsZC0+aXNJ
bkZsb3dSZW5kZXJGbG93VGhyZWFkKCkpCisgICAgICAgICAgICAgICAgY2hpbGRTdHlsZUluUmVn
aW9uID0gUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkoJm9iamVj
dC0+c3R5bGUoKSwgY2hpbGQtPnN0eWxlKCkuZGlzcGxheSgpKTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKGNoaWxkLT5pc1RleHQoKSkKKyAgICAgICAgICAgICAgICBjaGlsZFN0eWxlSW5SZWdpb24g
PSBSZW5kZXJTdHlsZTo6Y2xvbmUoJm9iamVjdC0+c3R5bGUoKSk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgY2hpbGRTdHlsZUluUmVnaW9uID0gY29tcHV0ZVN0eWxlSW5SZWdp
b24oY2hpbGQpOworICAgICAgICB9CisKKyAgICAgICAgc2V0T2JqZWN0U3R5bGVJblJlZ2lvbihj
aGlsZCwgY2hpbGRTdHlsZUluUmVnaW9uLCBvYmplY3RSZWdpb25TdHlsZUNhY2hlZCk7CisKKyAg
ICAgICAgaWYgKGNoaWxkLT5pc1JlbmRlckVsZW1lbnQoKSkKKyAgICAgICAgICAgIGNvbXB1dGVD
aGlsZHJlblN0eWxlSW5SZWdpb24odG9SZW5kZXJFbGVtZW50KGNoaWxkKSk7CisgICAgfQorfQor
Cit2b2lkIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjpzZXRPYmplY3RTdHlsZUluUmVnaW9uKFJl
bmRlck9iamVjdCogb2JqZWN0LCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHlsZUluUmVnaW9u
LCBib29sIG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVkKQoreworICAgIEFTU0VSVChvYmplY3QtPmZs
b3dUaHJlYWRDb250YWluaW5nQmxvY2soKSk7CisKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG9i
amVjdE9yaWdpbmFsU3R5bGUgPSAmb2JqZWN0LT5zdHlsZSgpOworICAgIGlmIChvYmplY3QtPmlz
UmVuZGVyRWxlbWVudCgpKQorICAgICAgICB0b1JlbmRlckVsZW1lbnQob2JqZWN0KS0+c2V0U3R5
bGVJbnRlcm5hbCgqc3R5bGVJblJlZ2lvbik7CisKKyAgICBpZiAob2JqZWN0LT5pc0JveE1vZGVs
T2JqZWN0KCkgJiYgIW9iamVjdC0+aGFzQm94RGVjb3JhdGlvbnMoKSkgeworICAgICAgICBib29s
IGhhc0JveERlY29yYXRpb25zID0gb2JqZWN0LT5pc1RhYmxlQ2VsbCgpCisgICAgICAgIHx8IG9i
amVjdC0+c3R5bGUoKS5oYXNCYWNrZ3JvdW5kKCkKKyAgICAgICAgfHwgb2JqZWN0LT5zdHlsZSgp
Lmhhc0JvcmRlcigpCisgICAgICAgIHx8IG9iamVjdC0+c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkK
KyAgICAgICAgfHwgb2JqZWN0LT5zdHlsZSgpLmJveFNoYWRvdygpOworICAgICAgICBvYmplY3Qt
PnNldEhhc0JveERlY29yYXRpb25zKGhhc0JveERlY29yYXRpb25zKTsKKyAgICB9CisKKyAgICBP
YmplY3RSZWdpb25TdHlsZUluZm8gc3R5bGVJbmZvOworICAgIHN0eWxlSW5mby5zdHlsZSA9IG9i
amVjdE9yaWdpbmFsU3R5bGU7CisgICAgc3R5bGVJbmZvLmNhY2hlZCA9IG9iamVjdFJlZ2lvblN0
eWxlQ2FjaGVkOworICAgIG1fcmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUuc2V0KG9iamVjdCwgc3R5
bGVJbmZvKTsKK30KKwordm9pZCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6Y2xlYXJPYmplY3RT
dHlsZUluUmVnaW9uKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAgIEFTU0VSVChv
YmplY3QpOworICAgIG1fcmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUucmVtb3ZlKG9iamVjdCk7CisK
KyAgICAvLyBDbGVhciB0aGUgc3R5bGUgZm9yIHRoZSBjaGlsZHJlbiBvZiB0aGlzIG9iamVjdC4K
KyAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBvYmplY3QtPmZpcnN0Q2hpbGRTbG93KCk7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgICAgICBjbGVhck9iamVj
dFN0eWxlSW5SZWdpb24oY2hpbGQpOworfQorCit2b2lkIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
OjpzZXRSZWdpb25PYmplY3RzUmVnaW9uU3R5bGUoKQoreworICAgIGlmICghaGFzQ3VzdG9tUmVn
aW9uU3R5bGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gU3RhcnQgZnJvbSBjb250ZW50
IG5vZGVzIGFuZCByZWN1cnNpdmVseSBjb21wdXRlIHRoZSBzdHlsZSBpbiByZWdpb24gZm9yIHRo
ZSByZW5kZXIgb2JqZWN0cyBiZWxvdy4KKyAgICAvLyBJZiB0aGUgc3R5bGUgaW4gcmVnaW9uIHdh
cyBhbHJlYWR5IGNvbXB1dGVkLCB1c2VkIHRoYXQgc3R5bGUgaW5zdGVhZCBvZiBjb21wdXRpbmcg
YSBuZXcgb25lLgorICAgIGNvbnN0IFJlbmRlck5hbWVkRmxvd1RocmVhZCYgbmFtZWRGbG93ID0g
dmlldygpLmZsb3dUaHJlYWRDb250cm9sbGVyKCkuZW5zdXJlUmVuZGVyRmxvd1RocmVhZFdpdGhO
YW1lKHN0eWxlKCkucmVnaW9uVGhyZWFkKCkpOworICAgIGNvbnN0IE5hbWVkRmxvd0NvbnRlbnRF
bGVtZW50cyYgY29udGVudEVsZW1lbnRzID0gbmFtZWRGbG93LmNvbnRlbnRFbGVtZW50cygpOwor
CisgICAgZm9yIChhdXRvIGl0ZXIgPSBjb250ZW50RWxlbWVudHMuYmVnaW4oKSwgZW5kID0gY29u
dGVudEVsZW1lbnRzLmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIGNvbnN0
IEVsZW1lbnQqIGVsZW1lbnQgPSAqaXRlcjsKKyAgICAgICAgLy8gVGhlIGxpc3Qgb2YgY29udGVu
dCBub2RlcyBjb250YWlucyBhbHNvIHRoZSBub2RlcyB3aXRoIGRpc3BsYXk6bm9uZS4KKyAgICAg
ICAgaWYgKCFlbGVtZW50LT5yZW5kZXJlcigpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgUmVuZGVyRWxlbWVudCogb2JqZWN0ID0gZWxlbWVudC0+cmVuZGVyZXIoKTsKKyAgICAg
ICAgLy8gSWYgdGhlIGNvbnRlbnQgbm9kZSBkb2VzIG5vdCBmbG93IGFueSBvZiBpdHMgY2hpbGRy
ZW4gaW4gdGhpcyByZWdpb24sCisgICAgICAgIC8vIHdlIGRvIG5vdCBjb21wdXRlIGFueSBzdHls
ZSBmb3IgdGhlbSBpbiB0aGlzIHJlZ2lvbi4KKyAgICAgICAgaWYgKCFmbG93VGhyZWFkKCktPm9i
amVjdEluRmxvd1JlZ2lvbihvYmplY3QsIHRoaXMpKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgLy8gSWYgdGhlIG9iamVjdCBoYXMgc3R5bGUgaW4gcmVnaW9uLCB1c2UgdGhhdCBp
bnN0ZWFkIG9mIGNvbXB1dGluZyBhIG5ldyBvbmUuCisgICAgICAgIGF1dG8gaXQgPSBtX3JlbmRl
ck9iamVjdFJlZ2lvblN0eWxlLmZpbmQob2JqZWN0KTsKKyAgICAgICAgUmVmUHRyPFJlbmRlclN0
eWxlPiBvYmplY3RTdHlsZUluUmVnaW9uOworICAgICAgICBib29sIG9iamVjdFJlZ2lvblN0eWxl
Q2FjaGVkID0gZmFsc2U7CisgICAgICAgIGlmIChpdCAhPSBtX3JlbmRlck9iamVjdFJlZ2lvblN0
eWxlLmVuZCgpKSB7CisgICAgICAgICAgICBvYmplY3RTdHlsZUluUmVnaW9uID0gaXQtPnZhbHVl
LnN0eWxlOworICAgICAgICAgICAgQVNTRVJUKGl0LT52YWx1ZS5jYWNoZWQpOworICAgICAgICAg
ICAgb2JqZWN0UmVnaW9uU3R5bGVDYWNoZWQgPSB0cnVlOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIG9iamVjdFN0eWxlSW5SZWdpb24gPSBjb21wdXRlU3R5bGVJblJlZ2lvbihvYmplY3Qp
OworCisgICAgICAgIHNldE9iamVjdFN0eWxlSW5SZWdpb24ob2JqZWN0LCBvYmplY3RTdHlsZUlu
UmVnaW9uLCBvYmplY3RSZWdpb25TdHlsZUNhY2hlZCk7CisKKyAgICAgICAgY29tcHV0ZUNoaWxk
cmVuU3R5bGVJblJlZ2lvbihvYmplY3QpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudDo6cmVzdG9yZVJlZ2lvbk9iamVjdHNPcmlnaW5hbFN0eWxlKCkKK3sKKyAgICBp
ZiAoIWhhc0N1c3RvbVJlZ2lvblN0eWxlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRl
ck9iamVjdFJlZ2lvblN0eWxlTWFwIHRlbXA7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBtX3JlbmRl
ck9iamVjdFJlZ2lvblN0eWxlLmJlZ2luKCksIGVuZCA9IG1fcmVuZGVyT2JqZWN0UmVnaW9uU3R5
bGUuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBv
YmplY3QgPSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGl0ZXItPmtleSk7CisgICAgICAgIFJl
ZlB0cjxSZW5kZXJTdHlsZT4gb2JqZWN0UmVnaW9uU3R5bGUgPSAmb2JqZWN0LT5zdHlsZSgpOwor
ICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG9iamVjdE9yaWdpbmFsU3R5bGUgPSBpdGVyLT52
YWx1ZS5zdHlsZTsKKyAgICAgICAgaWYgKG9iamVjdC0+aXNSZW5kZXJFbGVtZW50KCkpCisgICAg
ICAgICAgICB0b1JlbmRlckVsZW1lbnQob2JqZWN0KS0+c2V0U3R5bGVJbnRlcm5hbCgqb2JqZWN0
T3JpZ2luYWxTdHlsZSk7CisKKyAgICAgICAgYm9vbCBzaG91bGRDYWNoZVJlZ2lvblN0eWxlID0g
aXRlci0+dmFsdWUuY2FjaGVkOworICAgICAgICBpZiAoIXNob3VsZENhY2hlUmVnaW9uU3R5bGUp
IHsKKyAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgd2Ugc2hvdWxkIGNhY2hlIHRoZSBjb21w
dXRlZCBzdHlsZSBpbiByZWdpb24uCisgICAgICAgICAgICB1bnNpZ25lZCBjaGFuZ2VkQ29udGV4
dFNlbnNpdGl2ZVByb3BlcnRpZXMgPSBDb250ZXh0U2Vuc2l0aXZlUHJvcGVydHlOb25lOworICAg
ICAgICAgICAgU3R5bGVEaWZmZXJlbmNlIHN0eWxlRGlmZiA9IG9iamVjdE9yaWdpbmFsU3R5bGUt
PmRpZmYob2JqZWN0UmVnaW9uU3R5bGUuZ2V0KCksIGNoYW5nZWRDb250ZXh0U2Vuc2l0aXZlUHJv
cGVydGllcyk7CisgICAgICAgICAgICBpZiAoc3R5bGVEaWZmIDwgU3R5bGVEaWZmZXJlbmNlTGF5
b3V0UG9zaXRpb25lZE1vdmVtZW50T25seSkKKyAgICAgICAgICAgICAgICBzaG91bGRDYWNoZVJl
Z2lvblN0eWxlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2hvdWxkQ2FjaGVSZWdp
b25TdHlsZSkgeworICAgICAgICAgICAgT2JqZWN0UmVnaW9uU3R5bGVJbmZvIHN0eWxlSW5mbzsK
KyAgICAgICAgICAgIHN0eWxlSW5mby5zdHlsZSA9IG9iamVjdFJlZ2lvblN0eWxlOworICAgICAg
ICAgICAgc3R5bGVJbmZvLmNhY2hlZCA9IHRydWU7CisgICAgICAgICAgICB0ZW1wLnNldChvYmpl
Y3QsIHN0eWxlSW5mbyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX3JlbmRlck9iamVjdFJl
Z2lvblN0eWxlLnN3YXAodGVtcCk7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZFBhaW50UmVnaW9u
Q29udGVudHNJblBoYXNlKFBhaW50UGhhc2UgcGhhc2UpCit7CisgICAgcmV0dXJuIHBoYXNlID09
IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQKKyAgICAgICAgfHwgcGhhc2UgPT0gUGFpbnRQaGFz
ZUNoaWxkQmxvY2tCYWNrZ3JvdW5kCisgICAgICAgIHx8IHBoYXNlID09IFBhaW50UGhhc2VTZWxl
Y3Rpb24KKyAgICAgICAgfHwgcGhhc2UgPT0gUGFpbnRQaGFzZVRleHRDbGlwOworfQorCit2b2lk
IFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjpwYWludE9iamVjdChQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQoreworICAgIGlmIChzdHlsZSgpLnZp
c2liaWxpdHkoKSAhPSBWSVNJQkxFKQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5kZXJSZWdp
b246OnBhaW50T2JqZWN0KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOworCisgICAgaWYgKCFpc1Zh
bGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIGRvIG5vdCB3YW50IHRvIHBhaW50
IGEgcmVnaW9uJ3MgY29udGVudHMgbXVsdGlwbGUgdGltZXMgKGZvciBlYWNoIHBhaW50IHBoYXNl
IG9mIHRoZSByZWdpb24gb2JqZWN0KS4KKyAgICAvLyBUaHVzLCB3ZSBvbmx5IHBhaW50IHRoZSBy
ZWdpb24ncyBjb250ZW50cyBpbiBjZXJ0YWluIHBoYXNlcy4KKyAgICBpZiAoIXNob3VsZFBhaW50
UmVnaW9uQ29udGVudHNJblBoYXNlKHBhaW50SW5mby5waGFzZSkpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIERlbGVnYXRlIHRoZSBwYWludGluZyBvZiBhIHJlZ2lvbidzIGNvbnRlbnRzIHRv
IFJlbmRlckZsb3dUaHJlYWQuCisgICAgLy8gUmVuZGVyRmxvd1RocmVhZCBpcyBhIHNlbGYgcGFp
bnRpbmcgbGF5ZXIgYmVjYXVzZSBpdCdzIGEgcG9zaXRpb25lZCBvYmplY3QuCisgICAgLy8gUmVu
ZGVyRmxvd1RocmVhZCBwYWludHMgaXRzIGNoaWxkcmVuLCB0aGUgY29sbGVjdGVkIG9iamVjdHMu
CisgICAgc2V0UmVnaW9uT2JqZWN0c1JlZ2lvblN0eWxlKCk7CisgICAgbV9mbG93VGhyZWFkLT5w
YWludEZsb3dUaHJlYWRQb3J0aW9uSW5SZWdpb24ocGFpbnRJbmZvLCB0aGlzLCBmbG93VGhyZWFk
UG9ydGlvblJlY3QoKSwgZmxvd1RocmVhZFBvcnRpb25PdmVyZmxvd1JlY3QoKSwgTGF5b3V0UG9p
bnQocGFpbnRPZmZzZXQueCgpICsgYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKSwgcGFpbnRP
ZmZzZXQueSgpICsgYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9wKCkpKTsKKyAgICByZXN0b3JlUmVn
aW9uT2JqZWN0c09yaWdpbmFsU3R5bGUoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQu
aAppbmRleCAwYjY4MzYyOGQ1OWYzNzAzMzNjYjM2ZDM4M2ZiZjZhNDFlNmQ3NjI4Li4yYmFhYzhl
ZDU1MDRhYmMyZjY4ODM2MmNjYjQ4NjM4YzYxNmIzYjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaApAQCAtNjgsOSArNjgsNDIg
QEAgcHVibGljOgogICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGxheWVyT3duZXIoKSBjb25z
dCB7IHJldHVybiBwYXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNSZW5kZXJMYXllck1vZGVsT2JqZWN0
KCkgPwogICAgICAgICB0b1JlbmRlckxheWVyTW9kZWxPYmplY3QocGFyZW50KCkpIDogbnVsbHB0
cjsgfQogCisgICAgYm9vbCBoYXNDdXN0b21SZWdpb25TdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzQ3VzdG9tUmVnaW9uU3R5bGU7IH0KKyAgICB2b2lkIHNldEhhc0N1c3RvbVJlZ2lvblN0eWxl
KGJvb2wgaGFzQ3VzdG9tUmVnaW9uU3R5bGUpIHsgbV9oYXNDdXN0b21SZWdpb25TdHlsZSA9IGhh
c0N1c3RvbVJlZ2lvblN0eWxlOyB9CisgICAgdm9pZCBjbGVhck9iamVjdFN0eWxlSW5SZWdpb24o
Y29uc3QgUmVuZGVyT2JqZWN0Kik7CisKKy8vIEZJWE1FOiBUZW1wb3JhcmlseSBwdWJsaWMgdW50
aWwgd2UgbW92ZSBhbGwgdGhlIENTU1JlZ2lvbnMgZnVuY3Rpb25hbGl0eSBmcm9tIFJlbmRlclJl
Z2lvbiB0byBoZXJlLgorcHVibGljOgorICAgIHZvaWQgY2hlY2tSZWdpb25TdHlsZSgpOworCiBw
cml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRIYXZlQXV0b0xvZ2ljYWxIZWlnaHQoKSBj
b25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25z
dCBPVkVSUklERSB7IHJldHVybiAiUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQiOyB9CisKKyAgICB2
b2lkIHNldFJlZ2lvbk9iamVjdHNSZWdpb25TdHlsZSgpOworICAgIHZvaWQgcmVzdG9yZVJlZ2lv
bk9iamVjdHNPcmlnaW5hbFN0eWxlKCk7CisKKyAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBj
b21wdXRlU3R5bGVJblJlZ2lvbihjb25zdCBSZW5kZXJPYmplY3QqKTsKKyAgICB2b2lkIGNvbXB1
dGVDaGlsZHJlblN0eWxlSW5SZWdpb24oY29uc3QgUmVuZGVyRWxlbWVudCopOworICAgIHZvaWQg
c2V0T2JqZWN0U3R5bGVJblJlZ2lvbihSZW5kZXJPYmplY3QqLCBQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiwgYm9vbCBvYmplY3RSZWdpb25TdHlsZUNhY2hlZCk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRPYmplY3QoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKSBPVkVSUklERTsKKwor
ICAgIHN0cnVjdCBPYmplY3RSZWdpb25TdHlsZUluZm8geworICAgICAgICAvLyBVc2VkIHRvIHN0
b3JlIHRoZSBvcmlnaW5hbCBzdHlsZSBvZiB0aGUgb2JqZWN0IGluIHJlZ2lvbgorICAgICAgICAv
LyBzbyB0aGF0IHRoZSBvcmlnaW5hbCBzdHlsZSBpcyBwcm9wZXJseSByZXN0b3JlZCBhZnRlciBw
YWludC4KKyAgICAgICAgLy8gQWxzbyB1c2VkIHRvIHN0b3JlIGNvbXB1dGVkIHN0eWxlIG9mIHRo
ZSBvYmplY3QgaW4gcmVnaW9uIGJldHdlZW4KKyAgICAgICAgLy8gcmVnaW9uIHBhaW50aW5ncywg
c28gdGhhdCB0aGUgc3R5bGUgaW4gcmVnaW9uIGlzIGNvbXB1dGVkIG9ubHkKKyAgICAgICAgLy8g
d2hlbiBuZWNlc3NhcnkuCisgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGU7CisgICAg
ICAgIC8vIFRydWUgaWYgdGhlIGNvbXB1dGVkIHN0eWxlIGluIHJlZ2lvbiBpcyBjYWNoZWQuCisg
ICAgICAgIGJvb2wgY2FjaGVkOworICAgIH07CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3Qg
UmVuZGVyT2JqZWN0KiwgT2JqZWN0UmVnaW9uU3R5bGVJbmZvID4gUmVuZGVyT2JqZWN0UmVnaW9u
U3R5bGVNYXA7CisgICAgUmVuZGVyT2JqZWN0UmVnaW9uU3R5bGVNYXAgbV9yZW5kZXJPYmplY3RS
ZWdpb25TdHlsZTsKKworICAgIGJvb2wgbV9oYXNDdXN0b21SZWdpb25TdHlsZSA6IDE7CiB9Owog
CiBSRU5ERVJfT0JKRUNUX1RZUEVfQ0FTVFMoUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQsIGlzUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKaW5kZXggMWRhY2JmNjlkYjc3YmJiYmFhZDVmMWUw
NWRhOTRjNjA4MTFmYzU0Ni4uZjBhMjgxNTM5YTRhZDI2YjA4MTE0NjZlMWUxMDM2YTQ3ZGJmNTA1
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1Ro
cmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1Ro
cmVhZC5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJQb3NpdGlvbi5oIgogI2luY2x1
ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCisjaW5jbHVkZSAiUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKICNpbmNsdWRl
ICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtNDgsNiArNDksNyBA
QCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OlJlbmRlck5hbWVkRmxvd1RocmVhZChEb2N1bWVudCYg
ZG9jdW1lbnQsIFBhc3NSZWY8UmVuZGVyUwogICAgIDogUmVuZGVyRmxvd1RocmVhZChkb2N1bWVu
dCwgc3RkOjptb3ZlKHN0eWxlKSkKICAgICAsIG1fZmxvd1RocmVhZENoaWxkTGlzdChhZG9wdFB0
cihuZXcgRmxvd1RocmVhZENoaWxkTGlzdCgpKSkKICAgICAsIG1fb3ZlcnNldCh0cnVlKQorICAg
ICwgbV9oYXNSZWdpb25zV2l0aFN0eWxpbmcoZmFsc2UpCiAgICAgLCBtX25hbWVkRmxvdyhuYW1l
ZEZsb3cpCiAgICAgLCBtX3JlZ2lvbkxheW91dFVwZGF0ZUV2ZW50VGltZXIodGhpcywgJlJlbmRl
ck5hbWVkRmxvd1RocmVhZDo6cmVnaW9uTGF5b3V0VXBkYXRlRXZlbnRUaW1lckZpcmVkKQogICAg
ICwgbV9yZWdpb25PdmVyc2V0Q2hhbmdlRXZlbnRUaW1lcih0aGlzLCAmUmVuZGVyTmFtZWRGbG93
VGhyZWFkOjpyZWdpb25PdmVyc2V0Q2hhbmdlRXZlbnRUaW1lckZpcmVkKQpAQCAtNzM4LDQgKzc0
MCwzNCBAQCBib29sIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6Y29sbGVjdHNHcmFwaGljc0xheWVy
c1VuZGVyUmVnaW9ucygpIGNvbnN0CiB9CiAjZW5kaWYKIAorLy8gQ2hlY2sgaWYgdGhlIGNvbnRl
bnQgaXMgZmxvd24gaW50byBhdCBsZWFzdCBhIHJlZ2lvbiB3aXRoIHJlZ2lvbiBzdHlsaW5nIHJ1
bGVzLgordm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmNoZWNrUmVnaW9uc1dpdGhTdHlsaW5n
KCkKK3sKKyAgICBib29sIGhhc1JlZ2lvbnNXaXRoU3R5bGluZyA9IGZhbHNlOworICAgIGZvciAo
YXV0byBpdGVyID0gbV9yZWdpb25MaXN0LmJlZ2luKCksIGVuZCA9IG1fcmVnaW9uTGlzdC5lbmQo
KTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dCogcmVnaW9uID0gdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgqaXRlcik7CisgICAgICAgIGlm
IChyZWdpb24tPmhhc0N1c3RvbVJlZ2lvblN0eWxlKCkpIHsKKyAgICAgICAgICAgIGhhc1JlZ2lv
bnNXaXRoU3R5bGluZyA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKyAgICBtX2hhc1JlZ2lvbnNXaXRoU3R5bGluZyA9IGhhc1JlZ2lvbnNXaXRoU3R5bGluZzsK
K30KKwordm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmNsZWFyUmVuZGVyT2JqZWN0Q3VzdG9t
U3R5bGUoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgLy8gQ2xlYXIgdGhlIHN0
eWxlcyBmb3IgdGhlIG9iamVjdCBpbiB0aGUgcmVnaW9ucy4KKyAgICAvLyBGSVhNRTogUmVnaW9u
IHN0eWxpbmcgaXMgbm90IGNvbXB1dGVkIG9ubHkgZm9yIHRoZSByZWdpb24gcmFuZ2Ugb2YgdGhl
IG9iamVjdCBzbyB0aGlzIGlzIHdoeSB3ZSBuZWVkIHRvIHdhbGsgdGhlIHdob2xlIGNoYWluLgor
ICAgIGZvciAoYXV0byBpdGVyID0gbV9yZWdpb25MaXN0LmJlZ2luKCksIGVuZCA9IG1fcmVnaW9u
TGlzdC5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudCogcmVnaW9uID0gdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgqaXRlcik7Cisg
ICAgICAgIHJlZ2lvbi0+Y2xlYXJPYmplY3RTdHlsZUluUmVnaW9uKG9iamVjdCk7CisgICAgfQor
fQorCit2b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6cmVtb3ZlRmxvd0NoaWxkSW5mbyhSZW5k
ZXJPYmplY3QqIGNoaWxkKQoreworICAgIFJlbmRlckZsb3dUaHJlYWQ6OnJlbW92ZUZsb3dDaGls
ZEluZm8oY2hpbGQpOworICAgIGNsZWFyUmVuZGVyT2JqZWN0Q3VzdG9tU3R5bGUoY2hpbGQpOwor
fQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRG
bG93VGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhy
ZWFkLmgKaW5kZXggZDUwNDMxOWJhOTEwNWZkOTQxMWNiYjFiMGE2ZmY0YjZlNTk4Y2M3Ny4uOGUw
MGZlZDRmODYwZjk2YmRlZGMxYWIxZjYyMDg2Zjg3MDgzNjI1NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuaApAQCAtODQsNiArODQsMTQg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBjb2xsZWN0c0dyYXBoaWNzTGF5ZXJzVW5kZXJS
ZWdpb25zKCkgY29uc3QgT1ZFUlJJREU7CiAjZW5kaWYKIAorICAgIC8vIENoZWNrIGlmIHRoZSBj
b250ZW50IGlzIGZsb3duIGludG8gYXQgbGVhc3QgYSByZWdpb24gd2l0aCByZWdpb24gc3R5bGlu
ZyBydWxlcy4KKyAgICBib29sIGhhc1JlZ2lvbnNXaXRoU3R5bGluZygpIGNvbnN0IHsgcmV0dXJu
IG1faGFzUmVnaW9uc1dpdGhTdHlsaW5nOyB9CisgICAgdm9pZCBjaGVja1JlZ2lvbnNXaXRoU3R5
bGluZygpOworCisgICAgdm9pZCBjbGVhclJlbmRlck9iamVjdEN1c3RvbVN0eWxlKGNvbnN0IFJl
bmRlck9iamVjdCopOworCisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUZsb3dDaGlsZEluZm8oUmVu
ZGVyT2JqZWN0KikgT1ZFUlJJREUgRklOQUw7CisKIHByb3RlY3RlZDoKICAgICB2b2lkIHNldE1h
cmtGb3JEZXN0cnVjdGlvbigpOwogICAgIHZvaWQgcmVzZXRNYXJrRm9yRGVzdHJ1Y3Rpb24oKTsK
QEAgLTEzMCw2ICsxMzgsNyBAQCBwcml2YXRlOgogICAgIFJlbmRlclJlZ2lvbkxpc3QgbV9pbnZh
bGlkUmVnaW9uTGlzdDsKIAogICAgIGJvb2wgbV9vdmVyc2V0IDogMTsKKyAgICBib29sIG1faGFz
UmVnaW9uc1dpdGhTdHlsaW5nIDogMTsKIAogICAgIC8vIFRoZSBET00gT2JqZWN0IHRoYXQgcmVw
cmVzZW50cyBhIG5hbWVkIGZsb3cuCiAgICAgUmVmUHRyPFdlYktpdE5hbWVkRmxvdz4gbV9uYW1l
ZEZsb3c7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCmluZGV4IDVk
Y2EzMzg5MGExOTdjMjBiN2Y5MWU4MDE2MjgxMzZhMTQ4N2JiNGUuLmY4NGU1OGI3Njc4NmVhOWJh
YTQ0NmQ4MTFiZTg4NTMzMjQ3ZjlhODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJSZWdpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJSZWdpb24uY3BwCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyQm94UmVnaW9u
SW5mby5oIgogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5
ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oIgogI2luY2x1ZGUgIlJl
bmRlck5hbWVkRmxvd1RocmVhZC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRl
ICJTdHlsZVJlc29sdmVyLmgiCkBAIC01Miw3ICs1Myw2IEBAIFJlbmRlclJlZ2lvbjo6UmVuZGVy
UmVnaW9uKEVsZW1lbnQmIGVsZW1lbnQsIFBhc3NSZWY8UmVuZGVyU3R5bGU+IHN0eWxlLCBSZW5k
ZXJGCiAgICAgLCBtX2Zsb3dUaHJlYWQoZmxvd1RocmVhZCkKICAgICAsIG1fcGFyZW50TmFtZWRG
bG93VGhyZWFkKDApCiAgICAgLCBtX2lzVmFsaWQoZmFsc2UpCi0gICAgLCBtX2hhc0N1c3RvbVJl
Z2lvblN0eWxlKGZhbHNlKQogICAgICwgbV9oYXNBdXRvTG9naWNhbEhlaWdodChmYWxzZSkKICAg
ICAsIG1faGFzQ29tcHV0ZWRBdXRvSGVpZ2h0KGZhbHNlKQogICAgICwgbV9jb21wdXRlZEF1dG9I
ZWlnaHQoMCkKQEAgLTY0LDcgKzY0LDYgQEAgUmVuZGVyUmVnaW9uOjpSZW5kZXJSZWdpb24oRG9j
dW1lbnQmIGRvY3VtZW50LCBQYXNzUmVmPFJlbmRlclN0eWxlPiBzdHlsZSwgUmVuZGUKICAgICAs
IG1fZmxvd1RocmVhZChmbG93VGhyZWFkKQogICAgICwgbV9wYXJlbnROYW1lZEZsb3dUaHJlYWQo
MCkKICAgICAsIG1faXNWYWxpZChmYWxzZSkKLSAgICAsIG1faGFzQ3VzdG9tUmVnaW9uU3R5bGUo
ZmFsc2UpCiAgICAgLCBtX2hhc0F1dG9Mb2dpY2FsSGVpZ2h0KGZhbHNlKQogICAgICwgbV9oYXND
b21wdXRlZEF1dG9IZWlnaHQoZmFsc2UpCiAgICAgLCBtX2NvbXB1dGVkQXV0b0hlaWdodCgwKQpA
QCAtMjI5LDM3ICsyMjgsNiBAQCBib29sIFJlbmRlclJlZ2lvbjo6aXNMYXN0UmVnaW9uKCkgY29u
c3QKICAgICByZXR1cm4gbV9mbG93VGhyZWFkLT5sYXN0UmVnaW9uKCkgPT0gdGhpczsKIH0KIAot
c3RhdGljIGJvb2wgc2hvdWxkUGFpbnRSZWdpb25Db250ZW50c0luUGhhc2UoUGFpbnRQaGFzZSBw
aGFzZSkKLXsKLSAgICByZXR1cm4gcGhhc2UgPT0gUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZAot
ICAgICAgICB8fCBwaGFzZSA9PSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmQKLSAgICAg
ICAgfHwgcGhhc2UgPT0gUGFpbnRQaGFzZVNlbGVjdGlvbgotICAgICAgICB8fCBwaGFzZSA9PSBQ
YWludFBoYXNlVGV4dENsaXA7Ci19Ci0KLXZvaWQgUmVuZGVyUmVnaW9uOjpwYWludE9iamVjdChQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQotewot
ICAgIGlmIChzdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBSZW5kZXJCbG9ja0Zsb3c6OnBhaW50T2JqZWN0KHBhaW50SW5mbywgcGFpbnRPZmZz
ZXQpOwotCi0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFdl
IGRvIG5vdCB3YW50IHRvIHBhaW50IGEgcmVnaW9uJ3MgY29udGVudHMgbXVsdGlwbGUgdGltZXMg
KGZvciBlYWNoIHBhaW50IHBoYXNlIG9mIHRoZSByZWdpb24gb2JqZWN0KS4KLSAgICAvLyBUaHVz
LCB3ZSBvbmx5IHBhaW50IHRoZSByZWdpb24ncyBjb250ZW50cyBpbiBjZXJ0YWluIHBoYXNlcy4K
LSAgICBpZiAoIXNob3VsZFBhaW50UmVnaW9uQ29udGVudHNJblBoYXNlKHBhaW50SW5mby5waGFz
ZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIERlbGVnYXRlIHRoZSBwYWludGluZyBvZiBh
IHJlZ2lvbidzIGNvbnRlbnRzIHRvIFJlbmRlckZsb3dUaHJlYWQuCi0gICAgLy8gUmVuZGVyRmxv
d1RocmVhZCBpcyBhIHNlbGYgcGFpbnRpbmcgbGF5ZXIgYmVjYXVzZSBpdCdzIGEgcG9zaXRpb25l
ZCBvYmplY3QuCi0gICAgLy8gUmVuZGVyRmxvd1RocmVhZCBwYWludHMgaXRzIGNoaWxkcmVuLCB0
aGUgY29sbGVjdGVkIG9iamVjdHMuCi0gICAgc2V0UmVnaW9uT2JqZWN0c1JlZ2lvblN0eWxlKCk7
Ci0gICAgbV9mbG93VGhyZWFkLT5wYWludEZsb3dUaHJlYWRQb3J0aW9uSW5SZWdpb24ocGFpbnRJ
bmZvLCB0aGlzLCBmbG93VGhyZWFkUG9ydGlvblJlY3QoKSwgZmxvd1RocmVhZFBvcnRpb25PdmVy
Zmxvd1JlY3QoKSwgTGF5b3V0UG9pbnQocGFpbnRPZmZzZXQueCgpICsgYm9yZGVyTGVmdCgpICsg
cGFkZGluZ0xlZnQoKSwgcGFpbnRPZmZzZXQueSgpICsgYm9yZGVyVG9wKCkgKyBwYWRkaW5nVG9w
KCkpKTsKLSAgICByZXN0b3JlUmVnaW9uT2JqZWN0c09yaWdpbmFsU3R5bGUoKTsKLX0KLQogLy8g
SGl0IFRlc3RpbmcKIGJvb2wgUmVuZGVyUmVnaW9uOjpoaXRUZXN0Q29udGVudHMoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVz
dExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11
bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQogewpAQCAtMjc3LDE4ICsyNDUsNiBA
QCBib29sIFJlbmRlclJlZ2lvbjo6aGl0VGVzdENvbnRlbnRzKGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBS
ZW5kZXJSZWdpb246OmNoZWNrUmVnaW9uU3R5bGUoKQotewotICAgIEFTU0VSVChtX2Zsb3dUaHJl
YWQpOwotICAgIGJvb2wgY3VzdG9tUmVnaW9uU3R5bGUgPSBmYWxzZTsKLQotICAgIC8vIEZJWE1F
OiBSZWdpb24gc3R5bGluZyBkb2Vzbid0IHdvcmsgZm9yIHBzZXVkbyBlbGVtZW50cy4KLSAgICBp
ZiAoIWlzUHNldWRvRWxlbWVudCgpKQotICAgICAgICBjdXN0b21SZWdpb25TdHlsZSA9IHZpZXco
KS5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5jaGVja1JlZ2lvblN0eWxlKGdlbmVy
YXRpbmdFbGVtZW50KCkpOwotICAgIHNldEhhc0N1c3RvbVJlZ2lvblN0eWxlKGN1c3RvbVJlZ2lv
blN0eWxlKTsKLSAgICBtX2Zsb3dUaHJlYWQtPmNoZWNrUmVnaW9uc1dpdGhTdHlsaW5nKCk7Ci19
Ci0KIHZvaWQgUmVuZGVyUmVnaW9uOjppbmNyZW1lbnRBdXRvTG9naWNhbEhlaWdodENvdW50KCkK
IHsKICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKQEAgLTMzNCwxOCArMjkwLDEyIEBAIHZvaWQgUmVu
ZGVyUmVnaW9uOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVu
ZGVyU3R5bGUqIG9sZFN0CiB7CiAgICAgUmVuZGVyQmxvY2tGbG93OjpzdHlsZURpZENoYW5nZShk
aWZmLCBvbGRTdHlsZSk7CiAKLSAgICAvLyBJZiB0aGUgcmVnaW9uIGlzIG5vdCBhdHRhY2hlZCB0
byBhbnkgdGhyZWFkLCB0aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrCi0gICAgLy8gd2hldGhlciB0
aGUgcmVnaW9uIGhhcyByZWdpb24gc3R5bGluZyBzaW5jZSBubyBjb250ZW50IHdpbGwgYmUgZGlz
cGxheWVkCi0gICAgLy8gaW50byB0aGUgcmVnaW9uLgotICAgIGlmICghbV9mbG93VGhyZWFkKSB7
Ci0gICAgICAgIHNldEhhc0N1c3RvbVJlZ2lvblN0eWxlKGZhbHNlKTsKKyAgICBpZiAoIW1fZmxv
d1RocmVhZCkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIGNoZWNrUmVnaW9uU3R5bGUo
KTsKICAgICB1cGRhdGVSZWdpb25IYXNBdXRvTG9naWNhbEhlaWdodEZsYWcoKTsKIAotICAgIGlm
IChvbGRTdHlsZSAmJiBvbGRTdHlsZS0+d3JpdGluZ01vZGUoKSAhPSBzdHlsZSgpLndyaXRpbmdN
b2RlKCkpCisgICAgaWYgKG1fZmxvd1RocmVhZCAmJiBvbGRTdHlsZSAmJiBvbGRTdHlsZS0+d3Jp
dGluZ01vZGUoKSAhPSBzdHlsZSgpLndyaXRpbmdNb2RlKCkpCiAgICAgICAgIG1fZmxvd1RocmVh
ZC0+cmVnaW9uQ2hhbmdlZFdyaXRpbmdNb2RlKHRoaXMpOwogfQogCkBAIC00NzYsNyArNDI2LDkg
QEAgdm9pZCBSZW5kZXJSZWdpb246OmF0dGFjaFJlZ2lvbigpCiAKICAgICAvLyBUaGUgcmVnaW9u
IGp1c3QgZ290IGF0dGFjaGVkIHRvIHRoZSBmbG93IHRocmVhZCwgbGV0cyBjaGVjayB3aGV0aGVy
CiAgICAgLy8gaXQgaGFzIHJlZ2lvbiBzdHlsaW5nIHJ1bGVzIGFzc29jaWF0ZWQuCi0gICAgY2hl
Y2tSZWdpb25TdHlsZSgpOworICAgIC8vIEZJWE1FOiBSZW1vdmUgY2FzdCBvbmNlIGF0dGFjaFJl
Z2lvbiBpcyBtb3ZlZCB0byBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC4KKyAgICBpZiAoaXNSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCgpKQorICAgICAgICB0b1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50
KHRoaXMpLT5jaGVja1JlZ2lvblN0eWxlKCk7CiAKICAgICBpZiAoIWlzVmFsaWQoKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtNTM4LDc3ICs0OTAsNiBAQCBMYXlvdXRVbml0IFJlbmRlclJlZ2lvbjo6
bG9naWNhbEJvdHRvbU9mRmxvd1RocmVhZENvbnRlbnRSZWN0KGNvbnN0IExheW91dFJlY3QmCiAg
ICAgcmV0dXJuIGZsb3dUaHJlYWQoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IHJlY3Qu
bWF4WSgpIDogcmVjdC5tYXhYKCk7CiB9CiAKLXZvaWQgUmVuZGVyUmVnaW9uOjpzZXRSZWdpb25P
YmplY3RzUmVnaW9uU3R5bGUoKQotewotICAgIGlmICghaGFzQ3VzdG9tUmVnaW9uU3R5bGUoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gU3RhcnQgZnJvbSBjb250ZW50IG5vZGVzIGFuZCBy
ZWN1cnNpdmVseSBjb21wdXRlIHRoZSBzdHlsZSBpbiByZWdpb24gZm9yIHRoZSByZW5kZXIgb2Jq
ZWN0cyBiZWxvdy4KLSAgICAvLyBJZiB0aGUgc3R5bGUgaW4gcmVnaW9uIHdhcyBhbHJlYWR5IGNv
bXB1dGVkLCB1c2VkIHRoYXQgc3R5bGUgaW5zdGVhZCBvZiBjb21wdXRpbmcgYSBuZXcgb25lLgot
ICAgIGNvbnN0IFJlbmRlck5hbWVkRmxvd1RocmVhZCYgbmFtZWRGbG93ID0gdmlldygpLmZsb3dU
aHJlYWRDb250cm9sbGVyKCkuZW5zdXJlUmVuZGVyRmxvd1RocmVhZFdpdGhOYW1lKHN0eWxlKCku
cmVnaW9uVGhyZWFkKCkpOwotICAgIGNvbnN0IE5hbWVkRmxvd0NvbnRlbnRFbGVtZW50cyYgY29u
dGVudEVsZW1lbnRzID0gbmFtZWRGbG93LmNvbnRlbnRFbGVtZW50cygpOwotCi0gICAgZm9yIChh
dXRvIGl0ZXIgPSBjb250ZW50RWxlbWVudHMuYmVnaW4oKSwgZW5kID0gY29udGVudEVsZW1lbnRz
LmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIGNvbnN0IEVsZW1lbnQqIGVs
ZW1lbnQgPSAqaXRlcjsKLSAgICAgICAgLy8gVGhlIGxpc3Qgb2YgY29udGVudCBub2RlcyBjb250
YWlucyBhbHNvIHRoZSBub2RlcyB3aXRoIGRpc3BsYXk6bm9uZS4KLSAgICAgICAgaWYgKCFlbGVt
ZW50LT5yZW5kZXJlcigpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgUmVuZGVy
RWxlbWVudCogb2JqZWN0ID0gZWxlbWVudC0+cmVuZGVyZXIoKTsKLSAgICAgICAgLy8gSWYgdGhl
IGNvbnRlbnQgbm9kZSBkb2VzIG5vdCBmbG93IGFueSBvZiBpdHMgY2hpbGRyZW4gaW4gdGhpcyBy
ZWdpb24sCi0gICAgICAgIC8vIHdlIGRvIG5vdCBjb21wdXRlIGFueSBzdHlsZSBmb3IgdGhlbSBp
biB0aGlzIHJlZ2lvbi4KLSAgICAgICAgaWYgKCFmbG93VGhyZWFkKCktPm9iamVjdEluRmxvd1Jl
Z2lvbihvYmplY3QsIHRoaXMpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8g
SWYgdGhlIG9iamVjdCBoYXMgc3R5bGUgaW4gcmVnaW9uLCB1c2UgdGhhdCBpbnN0ZWFkIG9mIGNv
bXB1dGluZyBhIG5ldyBvbmUuCi0gICAgICAgIGF1dG8gaXQgPSBtX3JlbmRlck9iamVjdFJlZ2lv
blN0eWxlLmZpbmQob2JqZWN0KTsKLSAgICAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBvYmplY3RT
dHlsZUluUmVnaW9uOwotICAgICAgICBib29sIG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVkID0gZmFs
c2U7Ci0gICAgICAgIGlmIChpdCAhPSBtX3JlbmRlck9iamVjdFJlZ2lvblN0eWxlLmVuZCgpKSB7
Ci0gICAgICAgICAgICBvYmplY3RTdHlsZUluUmVnaW9uID0gaXQtPnZhbHVlLnN0eWxlOwotICAg
ICAgICAgICAgQVNTRVJUKGl0LT52YWx1ZS5jYWNoZWQpOwotICAgICAgICAgICAgb2JqZWN0UmVn
aW9uU3R5bGVDYWNoZWQgPSB0cnVlOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG9iamVj
dFN0eWxlSW5SZWdpb24gPSBjb21wdXRlU3R5bGVJblJlZ2lvbihvYmplY3QpOwotCi0gICAgICAg
IHNldE9iamVjdFN0eWxlSW5SZWdpb24ob2JqZWN0LCBvYmplY3RTdHlsZUluUmVnaW9uLCBvYmpl
Y3RSZWdpb25TdHlsZUNhY2hlZCk7Ci0KLSAgICAgICAgY29tcHV0ZUNoaWxkcmVuU3R5bGVJblJl
Z2lvbihvYmplY3QpOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJSZWdpb246OnJlc3RvcmVSZWdp
b25PYmplY3RzT3JpZ2luYWxTdHlsZSgpCi17Ci0gICAgaWYgKCFoYXNDdXN0b21SZWdpb25TdHls
ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5kZXJPYmplY3RSZWdpb25TdHlsZU1hcCB0
ZW1wOwotICAgIGZvciAoYXV0byBpdGVyID0gbV9yZW5kZXJPYmplY3RSZWdpb25TdHlsZS5iZWdp
bigpLCBlbmQgPSBtX3JlbmRlck9iamVjdFJlZ2lvblN0eWxlLmVuZCgpOyBpdGVyICE9IGVuZDsg
KytpdGVyKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdCogb2JqZWN0ID0gY29uc3RfY2FzdDxSZW5k
ZXJPYmplY3QqPihpdGVyLT5rZXkpOwotICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG9iamVj
dFJlZ2lvblN0eWxlID0gJm9iamVjdC0+c3R5bGUoKTsKLSAgICAgICAgUmVmUHRyPFJlbmRlclN0
eWxlPiBvYmplY3RPcmlnaW5hbFN0eWxlID0gaXRlci0+dmFsdWUuc3R5bGU7Ci0gICAgICAgIGlm
IChvYmplY3QtPmlzUmVuZGVyRWxlbWVudCgpKQotICAgICAgICAgICAgdG9SZW5kZXJFbGVtZW50
KG9iamVjdCktPnNldFN0eWxlSW50ZXJuYWwoKm9iamVjdE9yaWdpbmFsU3R5bGUpOwotCi0gICAg
ICAgIGJvb2wgc2hvdWxkQ2FjaGVSZWdpb25TdHlsZSA9IGl0ZXItPnZhbHVlLmNhY2hlZDsKLSAg
ICAgICAgaWYgKCFzaG91bGRDYWNoZVJlZ2lvblN0eWxlKSB7Ci0gICAgICAgICAgICAvLyBDaGVj
ayB3aGV0aGVyIHdlIHNob3VsZCBjYWNoZSB0aGUgY29tcHV0ZWQgc3R5bGUgaW4gcmVnaW9uLgot
ICAgICAgICAgICAgdW5zaWduZWQgY2hhbmdlZENvbnRleHRTZW5zaXRpdmVQcm9wZXJ0aWVzID0g
Q29udGV4dFNlbnNpdGl2ZVByb3BlcnR5Tm9uZTsKLSAgICAgICAgICAgIFN0eWxlRGlmZmVyZW5j
ZSBzdHlsZURpZmYgPSBvYmplY3RPcmlnaW5hbFN0eWxlLT5kaWZmKG9iamVjdFJlZ2lvblN0eWxl
LmdldCgpLCBjaGFuZ2VkQ29udGV4dFNlbnNpdGl2ZVByb3BlcnRpZXMpOwotICAgICAgICAgICAg
aWYgKHN0eWxlRGlmZiA8IFN0eWxlRGlmZmVyZW5jZUxheW91dFBvc2l0aW9uZWRNb3ZlbWVudE9u
bHkpCi0gICAgICAgICAgICAgICAgc2hvdWxkQ2FjaGVSZWdpb25TdHlsZSA9IHRydWU7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKHNob3VsZENhY2hlUmVnaW9uU3R5bGUpIHsKLSAgICAgICAgICAg
IE9iamVjdFJlZ2lvblN0eWxlSW5mbyBzdHlsZUluZm87Ci0gICAgICAgICAgICBzdHlsZUluZm8u
c3R5bGUgPSBvYmplY3RSZWdpb25TdHlsZTsKLSAgICAgICAgICAgIHN0eWxlSW5mby5jYWNoZWQg
PSB0cnVlOwotICAgICAgICAgICAgdGVtcC5zZXQob2JqZWN0LCBzdHlsZUluZm8pOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgbV9yZW5kZXJPYmplY3RSZWdpb25TdHlsZS5zd2FwKHRlbXApOwot
fQotCiB2b2lkIFJlbmRlclJlZ2lvbjo6aW5zZXJ0ZWRJbnRvVHJlZSgpCiB7CiAgICAgUmVuZGVy
QmxvY2tGbG93OjppbnNlcnRlZEludG9UcmVlKCk7CkBAIC02MjMsNzkgKzUwNCw2IEBAIHZvaWQg
UmVuZGVyUmVnaW9uOjp3aWxsQmVSZW1vdmVkRnJvbVRyZWUoKQogICAgIGRldGFjaFJlZ2lvbigp
OwogfQogCi1QYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJSZWdpb246OmNvbXB1dGVTdHls
ZUluUmVnaW9uKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIEFTU0VSVChvYmpl
Y3QpOwotICAgIEFTU0VSVCghb2JqZWN0LT5pc0Fub255bW91cygpKTsKLSAgICBBU1NFUlQob2Jq
ZWN0LT5ub2RlKCkgJiYgb2JqZWN0LT5ub2RlKCktPmlzRWxlbWVudE5vZGUoKSk7Ci0KLSAgICAv
LyBGSVhNRTogUmVnaW9uIHN0eWxpbmcgZmFpbHMgZm9yIHBzZXVkby1lbGVtZW50cyBiZWNhdXNl
IHRoZSByZW5kZXJlcnMgZG9uJ3QgaGF2ZSBhIG5vZGUuCi0gICAgRWxlbWVudCogZWxlbWVudCA9
IHRvRWxlbWVudChvYmplY3QtPm5vZGUoKSk7Ci0gICAgUmVmUHRyPFJlbmRlclN0eWxlPiByZW5k
ZXJPYmplY3RSZWdpb25TdHlsZSA9IG9iamVjdC0+dmlldygpLmRvY3VtZW50KCkuZW5zdXJlU3R5
bGVSZXNvbHZlcigpLnN0eWxlRm9yRWxlbWVudChlbGVtZW50LCAwLCBEaXNhbGxvd1N0eWxlU2hh
cmluZywgTWF0Y2hBbGxSdWxlcywgdGhpcyk7Ci0KLSAgICByZXR1cm4gcmVuZGVyT2JqZWN0UmVn
aW9uU3R5bGUucmVsZWFzZSgpOwotfQotCi12b2lkIFJlbmRlclJlZ2lvbjo6Y29tcHV0ZUNoaWxk
cmVuU3R5bGVJblJlZ2lvbihjb25zdCBSZW5kZXJFbGVtZW50KiBvYmplY3QpCi17Ci0gICAgZm9y
IChSZW5kZXJPYmplY3QqIGNoaWxkID0gb2JqZWN0LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0KLSAgICAgICAgYXV0byBpdCA9IG1fcmVuZGVy
T2JqZWN0UmVnaW9uU3R5bGUuZmluZChjaGlsZCk7Ci0KLSAgICAgICAgUmVmUHRyPFJlbmRlclN0
eWxlPiBjaGlsZFN0eWxlSW5SZWdpb247Ci0gICAgICAgIGJvb2wgb2JqZWN0UmVnaW9uU3R5bGVD
YWNoZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKGl0ICE9IG1fcmVuZGVyT2JqZWN0UmVnaW9uU3R5
bGUuZW5kKCkpIHsKLSAgICAgICAgICAgIGNoaWxkU3R5bGVJblJlZ2lvbiA9IGl0LT52YWx1ZS5z
dHlsZTsKLSAgICAgICAgICAgIG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVkID0gdHJ1ZTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChjaGlsZC0+aXNBbm9ueW1vdXMoKSB8fCBjaGls
ZC0+aXNJbkZsb3dSZW5kZXJGbG93VGhyZWFkKCkpCi0gICAgICAgICAgICAgICAgY2hpbGRTdHls
ZUluUmVnaW9uID0gUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXko
Jm9iamVjdC0+c3R5bGUoKSwgY2hpbGQtPnN0eWxlKCkuZGlzcGxheSgpKTsKLSAgICAgICAgICAg
IGVsc2UgaWYgKGNoaWxkLT5pc1RleHQoKSkKLSAgICAgICAgICAgICAgICBjaGlsZFN0eWxlSW5S
ZWdpb24gPSBSZW5kZXJTdHlsZTo6Y2xvbmUoJm9iamVjdC0+c3R5bGUoKSk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgY2hpbGRTdHlsZUluUmVnaW9uID0gY29tcHV0ZVN0eWxl
SW5SZWdpb24oY2hpbGQpOwotICAgICAgICB9Ci0KLSAgICAgICAgc2V0T2JqZWN0U3R5bGVJblJl
Z2lvbihjaGlsZCwgY2hpbGRTdHlsZUluUmVnaW9uLCBvYmplY3RSZWdpb25TdHlsZUNhY2hlZCk7
Ci0KLSAgICAgICAgaWYgKGNoaWxkLT5pc1JlbmRlckVsZW1lbnQoKSkKLSAgICAgICAgICAgIGNv
bXB1dGVDaGlsZHJlblN0eWxlSW5SZWdpb24odG9SZW5kZXJFbGVtZW50KGNoaWxkKSk7Ci0gICAg
fQotfQotCi12b2lkIFJlbmRlclJlZ2lvbjo6c2V0T2JqZWN0U3R5bGVJblJlZ2lvbihSZW5kZXJP
YmplY3QqIG9iamVjdCwgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGVJblJlZ2lvbiwgYm9v
bCBvYmplY3RSZWdpb25TdHlsZUNhY2hlZCkKLXsKLSAgICBBU1NFUlQob2JqZWN0LT5mbG93VGhy
ZWFkQ29udGFpbmluZ0Jsb2NrKCkpOwotCi0gICAgUmVmUHRyPFJlbmRlclN0eWxlPiBvYmplY3RP
cmlnaW5hbFN0eWxlID0gJm9iamVjdC0+c3R5bGUoKTsKLSAgICBpZiAob2JqZWN0LT5pc1JlbmRl
ckVsZW1lbnQoKSkKLSAgICAgICAgdG9SZW5kZXJFbGVtZW50KG9iamVjdCktPnNldFN0eWxlSW50
ZXJuYWwoKnN0eWxlSW5SZWdpb24pOwotCi0gICAgaWYgKG9iamVjdC0+aXNCb3hNb2RlbE9iamVj
dCgpICYmICFvYmplY3QtPmhhc0JveERlY29yYXRpb25zKCkpIHsKLSAgICAgICAgYm9vbCBoYXNC
b3hEZWNvcmF0aW9ucyA9IG9iamVjdC0+aXNUYWJsZUNlbGwoKQotICAgICAgICB8fCBvYmplY3Qt
PnN0eWxlKCkuaGFzQmFja2dyb3VuZCgpCi0gICAgICAgIHx8IG9iamVjdC0+c3R5bGUoKS5oYXNC
b3JkZXIoKQotICAgICAgICB8fCBvYmplY3QtPnN0eWxlKCkuaGFzQXBwZWFyYW5jZSgpCi0gICAg
ICAgIHx8IG9iamVjdC0+c3R5bGUoKS5ib3hTaGFkb3coKTsKLSAgICAgICAgb2JqZWN0LT5zZXRI
YXNCb3hEZWNvcmF0aW9ucyhoYXNCb3hEZWNvcmF0aW9ucyk7Ci0gICAgfQotCi0gICAgT2JqZWN0
UmVnaW9uU3R5bGVJbmZvIHN0eWxlSW5mbzsKLSAgICBzdHlsZUluZm8uc3R5bGUgPSBvYmplY3RP
cmlnaW5hbFN0eWxlOwotICAgIHN0eWxlSW5mby5jYWNoZWQgPSBvYmplY3RSZWdpb25TdHlsZUNh
Y2hlZDsKLSAgICBtX3JlbmRlck9iamVjdFJlZ2lvblN0eWxlLnNldChvYmplY3QsIHN0eWxlSW5m
byk7Ci19Ci0KLXZvaWQgUmVuZGVyUmVnaW9uOjpjbGVhck9iamVjdFN0eWxlSW5SZWdpb24oY29u
c3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgQVNTRVJUKG9iamVjdCk7Ci0gICAgbV9y
ZW5kZXJPYmplY3RSZWdpb25TdHlsZS5yZW1vdmUob2JqZWN0KTsKLQotICAgIC8vIENsZWFyIHRo
ZSBzdHlsZSBmb3IgdGhlIGNoaWxkcmVuIG9mIHRoaXMgb2JqZWN0LgotICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBjaGlsZCA9IG9iamVjdC0+Zmlyc3RDaGlsZFNsb3coKTsgY2hpbGQ7IGNoaWxkID0g
Y2hpbGQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGNsZWFyT2JqZWN0U3R5bGVJblJlZ2lvbihj
aGlsZCk7Ci19Ci0KIHZvaWQgUmVuZGVyUmVnaW9uOjpjb21wdXRlSW50cmluc2ljTG9naWNhbFdp
ZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgsIExheW91dFVuaXQmIG1heExvZ2ljYWxX
aWR0aCkgY29uc3QKIHsKICAgICBpZiAoIWlzVmFsaWQoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJlZ2lvbi5oCmluZGV4IDE3Njg2NDYzYmIxMGYwZWM1NjA3NjM4MmE4YWY5MWYy
MDk0MjYxMWUuLjUwYmI1N2E0ZmU5ZmJkNDczZDUxZjVhNTQ3YjM2ZjFjMjBmYjVkZmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmgKQEAgLTY3LDkgKzY3LDYgQEAgcHVi
bGljOgogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNWYWxpZDsgfQogICAg
IHZvaWQgc2V0SXNWYWxpZChib29sIHZhbGlkKSB7IG1faXNWYWxpZCA9IHZhbGlkOyB9CiAKLSAg
ICBib29sIGhhc0N1c3RvbVJlZ2lvblN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9oYXNDdXN0b21S
ZWdpb25TdHlsZTsgfQotICAgIHZvaWQgc2V0SGFzQ3VzdG9tUmVnaW9uU3R5bGUoYm9vbCBoYXND
dXN0b21SZWdpb25TdHlsZSkgeyBtX2hhc0N1c3RvbVJlZ2lvblN0eWxlID0gaGFzQ3VzdG9tUmVn
aW9uU3R5bGU7IH0KLQogICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIHJlbmRlckJveFJlZ2lvbklu
Zm8oY29uc3QgUmVuZGVyQm94KikgY29uc3Q7CiAgICAgUmVuZGVyQm94UmVnaW9uSW5mbyogc2V0
UmVuZGVyQm94UmVnaW9uSW5mbyhjb25zdCBSZW5kZXJCb3gqLCBMYXlvdXRVbml0IGxvZ2ljYWxM
ZWZ0SW5zZXQsIExheW91dFVuaXQgbG9naWNhbFJpZ2h0SW5zZXQsCiAgICAgICAgIGJvb2wgY29u
dGFpbmluZ0Jsb2NrQ2hhaW5Jc0luc2V0KTsKQEAgLTgxLDggKzc4LDYgQEAgcHVibGljOgogICAg
IGJvb2wgaXNGaXJzdFJlZ2lvbigpIGNvbnN0OwogICAgIGJvb2wgaXNMYXN0UmVnaW9uKCkgY29u
c3Q7CiAKLSAgICB2b2lkIGNsZWFyT2JqZWN0U3R5bGVJblJlZ2lvbihjb25zdCBSZW5kZXJPYmpl
Y3QqKTsKLQogICAgIFJlZ2lvbk92ZXJzZXRTdGF0ZSByZWdpb25PdmVyc2V0U3RhdGUoKSBjb25z
dDsKICAgICB2b2lkIHNldFJlZ2lvbk92ZXJzZXRTdGF0ZShSZWdpb25PdmVyc2V0U3RhdGUpOwog
CkBAIC0xNjAsOSArMTU1LDYgQEAgcHJvdGVjdGVkOgogCiAgICAgUmVuZGVyT3ZlcmZsb3cqIGVu
c3VyZU92ZXJmbG93Rm9yQm94KGNvbnN0IFJlbmRlckJveCopOwogCi0gICAgdm9pZCBzZXRSZWdp
b25PYmplY3RzUmVnaW9uU3R5bGUoKTsKLSAgICB2b2lkIHJlc3RvcmVSZWdpb25PYmplY3RzT3Jp
Z2luYWxTdHlsZSgpOwotCiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2Fs
V2lkdGhzKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVJbnRyaW5zaWNMb2dp
Y2FsV2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCYgbWF4TG9n
aWNhbFdpZHRoKSBjb25zdCBPVkVSUklERTsKIApAQCAtMTg2LDE1ICsxNzgsOSBAQCBwcml2YXRl
OgogICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVSZW1vdmVkRnJvbVRyZWUoKSBPVkVSUklERTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91
dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRPYmplY3QoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKSBPVkVSUklERTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBpbnN0YWxsRmxvd1RocmVhZCgpOwogCi0gICAgUGFzc1JlZlB0cjxS
ZW5kZXJTdHlsZT4gY29tcHV0ZVN0eWxlSW5SZWdpb24oY29uc3QgUmVuZGVyT2JqZWN0Kik7Ci0g
ICAgdm9pZCBjb21wdXRlQ2hpbGRyZW5TdHlsZUluUmVnaW9uKGNvbnN0IFJlbmRlckVsZW1lbnQq
KTsKLSAgICB2b2lkIHNldE9iamVjdFN0eWxlSW5SZWdpb24oUmVuZGVyT2JqZWN0KiwgUGFzc1Jl
ZlB0cjxSZW5kZXJTdHlsZT4sIGJvb2wgb2JqZWN0UmVnaW9uU3R5bGVDYWNoZWQpOwotCi0gICAg
dm9pZCBjaGVja1JlZ2lvblN0eWxlKCk7CiAgICAgdm9pZCB1cGRhdGVSZWdpb25IYXNBdXRvTG9n
aWNhbEhlaWdodEZsYWcoKTsKIAogICAgIHZvaWQgaW5jcmVtZW50QXV0b0xvZ2ljYWxIZWlnaHRD
b3VudCgpOwpAQCAtMjE5LDIxICsyMDUsNyBAQCBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFzaE1h
cDxjb25zdCBSZW5kZXJCb3gqLCBPd25QdHI8UmVuZGVyQm94UmVnaW9uSW5mbz4+IFJlbmRlckJv
eFJlZ2lvbkluZm9NYXA7CiAgICAgUmVuZGVyQm94UmVnaW9uSW5mb01hcCBtX3JlbmRlckJveFJl
Z2lvbkluZm87CiAKLSAgICBzdHJ1Y3QgT2JqZWN0UmVnaW9uU3R5bGVJbmZvIHsKLSAgICAgICAg
Ly8gVXNlZCB0byBzdG9yZSB0aGUgb3JpZ2luYWwgc3R5bGUgb2YgdGhlIG9iamVjdCBpbiByZWdp
b24KLSAgICAgICAgLy8gc28gdGhhdCB0aGUgb3JpZ2luYWwgc3R5bGUgaXMgcHJvcGVybHkgcmVz
dG9yZWQgYWZ0ZXIgcGFpbnQuCi0gICAgICAgIC8vIEFsc28gdXNlZCB0byBzdG9yZSBjb21wdXRl
ZCBzdHlsZSBvZiB0aGUgb2JqZWN0IGluIHJlZ2lvbiBiZXR3ZWVuCi0gICAgICAgIC8vIHJlZ2lv
biBwYWludGluZ3MsIHNvIHRoYXQgdGhlIHN0eWxlIGluIHJlZ2lvbiBpcyBjb21wdXRlZCBvbmx5
Ci0gICAgICAgIC8vIHdoZW4gbmVjZXNzYXJ5LgotICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+
IHN0eWxlOwotICAgICAgICAvLyBUcnVlIGlmIHRoZSBjb21wdXRlZCBzdHlsZSBpbiByZWdpb24g
aXMgY2FjaGVkLgotICAgICAgICBib29sIGNhY2hlZDsKLSAgICB9OwotICAgIHR5cGVkZWYgSGFz
aE1hcDxjb25zdCBSZW5kZXJPYmplY3QqLCBPYmplY3RSZWdpb25TdHlsZUluZm8gPiBSZW5kZXJP
YmplY3RSZWdpb25TdHlsZU1hcDsKLSAgICBSZW5kZXJPYmplY3RSZWdpb25TdHlsZU1hcCBtX3Jl
bmRlck9iamVjdFJlZ2lvblN0eWxlOwotCiAgICAgYm9vbCBtX2lzVmFsaWQgOiAxOwotICAgIGJv
b2wgbV9oYXNDdXN0b21SZWdpb25TdHlsZSA6IDE7CiAgICAgYm9vbCBtX2hhc0F1dG9Mb2dpY2Fs
SGVpZ2h0IDogMTsKICAgICBib29sIG1faGFzQ29tcHV0ZWRBdXRvSGVpZ2h0IDogMTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCmluZGV4IDhmNDg0
Zjc5NDRiMDUyZDdlMDU4ZjcyNzNmMDVlNDk0N2U4MjRiMjIuLjhmY2E0YmFkYzFiMzI0NmNiZTYy
NzY0NTY4NmQ0YThkNTc1MWZlMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUcmVlQXNUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHAKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJSZW5kZXJMaW5l
QnJlYWsuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgogI2luY2x1ZGUgIlJlbmRlckxp
c3RNYXJrZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oIgogI2luY2x1
ZGUgIlJlbmRlck5hbWVkRmxvd1RocmVhZC5oIgogI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgog
I2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgpAQCAtNjU3LDcgKzY1OCw3IEBAIHN0YXRpYyB2
b2lkIHdyaXRlKFRleHRTdHJlYW0mIHRzLCBSZW5kZXJMYXllciYgbCwKIHN0YXRpYyB2b2lkIHdy
aXRlUmVuZGVyUmVnaW9uTGlzdChjb25zdCBSZW5kZXJSZWdpb25MaXN0JiBmbG93VGhyZWFkUmVn
aW9uTGlzdCwgVGV4dFN0cmVhbSYgdHMsIGludCBpbmRlbnQpCiB7CiAgICAgZm9yIChSZW5kZXJS
ZWdpb25MaXN0Ojpjb25zdF9pdGVyYXRvciBpdFJSID0gZmxvd1RocmVhZFJlZ2lvbkxpc3QuYmVn
aW4oKTsgaXRSUiAhPSBmbG93VGhyZWFkUmVnaW9uTGlzdC5lbmQoKTsgKytpdFJSKSB7Ci0gICAg
ICAgIFJlbmRlclJlZ2lvbiogcmVuZGVyUmVnaW9uID0gKCppdFJSKTsKKyAgICAgICAgUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQqIHJlbmRlclJlZ2lvbiA9IHRvUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQoKml0UlIpOwogCiAgICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwogICAgICAgICB0
cyA8PCBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJPYmplY3QqPihyZW5kZXJSZWdpb24pLT5yZW5k
ZXJOYW1lKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217306</attachid>
            <date>2013-11-19 09:42:58 -0800</date>
            <delta_ts>2013-11-20 00:45:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-122957-20131119194256.patch</filename>
            <type>text/plain</type>
            <size>40882</size>
            <attacher name="Andrei Bucur">abucur</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmODIwNDNjMzQyZWM5ZDVjYmE5MmIyY2ExZThhZjhhMmVkNTVlNTg1Li5m
ZWU3ODUyMzllNmFhYmQ4NmFlNzIwYzJkNDNmNTJlNzNjYTVjNDFhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNTcgQEAKKzIwMTMtMTEtMTkgIEFuZHJlaSBCdWN1ciAgPGFidWN1ckBhZG9iZS5jb20+
CisKKyAgICAgICAgW0NTU1JlZ2lvbnNdIE1vdmUgcmVnaW9uIHN0eWxpbmcgY29kZSBpbnRvIFJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMjI5NTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGUgcGF0Y2ggbW92ZXMgYWxsIHRoZSByZWdpb24gc3R5bGluZyBmdW5j
dGlvbmFsaXR5IG91dHNpZGUgb2YgUmVuZGVyUmVnaW9uCisgICAgICAgIHRvIFJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50IGFuZCBvdXRzaWRlIG9mIFJlbmRlckZsb3dUaHJlYWQgdG8gUmVuZGVyTmFt
ZWRGbG93VGhyZWFkLgorICAgICAgICBUaGlzIGdlbmVyYXRlcyBhIGNvdXBsZSBvZiB1bmRlc2ly
ZWQgY2FzdHMgdGhhdCB3aWxsIGJlIHJlbW92ZWQgaW4gbGF0ZXIgcGF0Y2hlcworICAgICAgICB3
aGVuIGV2ZXJ5dGhpbmcgQ1NTIFJlZ2lvbnMgc3BlY2lmaWMgd2lsbCBiZSBsb2NhdGVkIGluc2lk
ZSBSZW5kZXJOYW1lZEZsb3dUaHJlYWQKKyAgICAgICAgYW5kIFJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50IChlLmcuIHRoZSBtb3ZlIG9mIHRoZSBpc1ZhbGlkIGZsYWcsIHRoZSBhdXRvLWhlaWdodAor
ICAgICAgICBjb2RlIGV0Yy4pLgorCisgICAgICAgIFRoZSBwYWludGluZyBmdW5jdGlvbiB3YXMg
YWxzbyBtb3ZlZCBmcm9tIFJlbmRlclJlZ2lvbiB0byBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC4g
SXQKKyAgICAgICAgd2FzIG9ubHkgdXNlZCBieSB0aGUgQ1NTIFJlZ2lvbnMgY29kZS4gVGhlIG5l
dyBtdWx0aS1jb2x1bW4gaW1wbGVtZW50YXRpb24gaGFzIGl0cyBvd24KKyAgICAgICAgcGFpbnRp
bmcgbWVjaGFuaXNtLgorCisgICAgICAgIFRlc3RzOiBObyBjaGFuZ2VkIGZ1bmN0aW9uYWxpdHks
IGp1c3QgcmVmYWN0b3JpbmdzLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJl
YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6UmVuZGVyRmxvd1Ro
cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpyZW1vdmVGbG93Q2hp
bGRJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmNsZWFyUmVuZGVy
Qm94UmVnaW9uSW5mb0FuZEN1c3RvbVN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
Rmxvd1RocmVhZC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjp1cGRhdGVBbHdheXNDcmVhdGVMaW5lQm94ZXMp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6UmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OnN0eWxl
RGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Ojpj
aGVja1JlZ2lvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50Ojpjb21wdXRlU3R5bGVJblJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudDo6Y29tcHV0ZUNoaWxkcmVuU3R5bGVJblJlZ2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6c2V0T2JqZWN0U3R5bGVJblJlZ2lvbik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6Y2xlYXJPYmplY3RT
dHlsZUluUmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
OjpzZXRSZWdpb25PYmplY3RzUmVnaW9uU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQ6OnJlc3RvcmVSZWdpb25PYmplY3RzT3JpZ2luYWxTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpzaG91bGRQYWludFJlZ2lvbkNvbnRlbnRzSW5QaGFzZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6cGFpbnRPYmplY3QpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTmFtZWRGbG93VGhyZWFkOjpSZW5kZXJOYW1lZEZsb3dUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpjaGVja1JlZ2lvbnNXaXRoU3R5bGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmNsZWFyUmVuZGVyT2JqZWN0
Q3VzdG9tU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpy
ZW1vdmVGbG93Q2hpbGRJbmZvKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93
VGhyZWFkLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJSZWdpb246OlJlbmRlclJlZ2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJSZWdpb246OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clJlZ2lvbjo6YXR0YWNoUmVnaW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUmVnaW9u
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6d3JpdGVSZW5kZXJSZWdpb25MaXN0KToKKwogMjAxMy0xMS0xOSAgUnlvc3VrZSBO
aXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgbW9yZSBhc3NlcnRpb25zIHdp
dGggc2VjdXJpdHkgaW1wbGljYXRpb25zIGluIERvY3VtZW50T3JkZXJlZE1hcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCmluZGV4IDg0NzllNjZkYTI0
MzQ2YjAwMGRmYzRiYWRjNzFlNTQxMDA2OWQwODYuLjQ1YmNkZmFlMzk3OTEwMjcyNGNjNmE0NTgz
Y2EzMTEyNzgxZTgwYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGbG93VGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxv
d1RocmVhZC5jcHAKQEAgLTU4LDcgKzU4LDYgQEAgUmVuZGVyRmxvd1RocmVhZDo6UmVuZGVyRmxv
d1RocmVhZChEb2N1bWVudCYgZG9jdW1lbnQsIFBhc3NSZWY8UmVuZGVyU3R5bGU+IHN0eWwKICAg
ICAsIG1fcmVnaW9uc0ludmFsaWRhdGVkKGZhbHNlKQogICAgICwgbV9yZWdpb25zSGF2ZVVuaWZv
cm1Mb2dpY2FsV2lkdGgodHJ1ZSkKICAgICAsIG1fcmVnaW9uc0hhdmVVbmlmb3JtTG9naWNhbEhl
aWdodCh0cnVlKQotICAgICwgbV9oYXNSZWdpb25zV2l0aFN0eWxpbmcoZmFsc2UpCiAgICAgLCBt
X2Rpc3BhdGNoUmVnaW9uTGF5b3V0VXBkYXRlRXZlbnQoZmFsc2UpCiAgICAgLCBtX2Rpc3BhdGNo
UmVnaW9uT3ZlcnNldENoYW5nZUV2ZW50KGZhbHNlKQogICAgICwgbV9wYWdlTG9naWNhbFNpemVD
aGFuZ2VkKGZhbHNlKQpAQCAtOTgsNyArOTcsNiBAQCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnJl
bW92ZUZsb3dDaGlsZEluZm8oUmVuZGVyT2JqZWN0KiBjaGlsZCkKIHsKICAgICBpZiAoY2hpbGQt
PmlzQm94KCkpCiAgICAgICAgIHJlbW92ZVJlbmRlckJveFJlZ2lvbkluZm8odG9SZW5kZXJCb3go
Y2hpbGQpKTsKLSAgICBjbGVhclJlbmRlck9iamVjdEN1c3RvbVN0eWxlKGNoaWxkKTsKIH0KIAog
dm9pZCBSZW5kZXJGbG93VGhyZWFkOjphZGRSZWdpb25Ub1RocmVhZChSZW5kZXJSZWdpb24qIHJl
bmRlclJlZ2lvbikKQEAgLTgxNywxNiArODE1LDYgQEAgUmVuZGVyUmVnaW9uKiBSZW5kZXJGbG93
VGhyZWFkOjpsYXN0UmVnaW9uKCkgY29uc3QKICAgICByZXR1cm4gbV9yZWdpb25MaXN0Lmxhc3Qo
KTsKIH0KIAotdm9pZCBSZW5kZXJGbG93VGhyZWFkOjpjbGVhclJlbmRlck9iamVjdEN1c3RvbVN0
eWxlKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQotewotICAgIC8vIENsZWFyIHRoZSBzdHls
ZXMgZm9yIHRoZSBvYmplY3QgaW4gdGhlIHJlZ2lvbnMuCi0gICAgLy8gRklYTUU6IFJlZ2lvbiBz
dHlsaW5nIGlzIG5vdCBjb21wdXRlZCBvbmx5IGZvciB0aGUgcmVnaW9uIHJhbmdlIG9mIHRoZSBv
YmplY3Qgc28gdGhpcyBpcyB3aHkgd2UgbmVlZCB0byB3YWxrIHRoZSB3aG9sZSBjaGFpbi4KLSAg
ICBmb3IgKGF1dG8gaXRlciA9IG1fcmVnaW9uTGlzdC5iZWdpbigpLCBlbmQgPSBtX3JlZ2lvbkxp
c3QuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgUmVuZGVyUmVnaW9uKiBy
ZWdpb24gPSAqaXRlcjsKLSAgICAgICAgcmVnaW9uLT5jbGVhck9iamVjdFN0eWxlSW5SZWdpb24o
b2JqZWN0KTsKLSAgICB9Ci19Ci0KIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6Y2xlYXJSZW5kZXJC
b3hSZWdpb25JbmZvQW5kQ3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyQm94KiBib3gsCiAgICAgY29u
c3QgUmVuZGVyUmVnaW9uKiBuZXdTdGFydFJlZ2lvbiwgY29uc3QgUmVuZGVyUmVnaW9uKiBuZXdF
bmRSZWdpb24sCiAgICAgY29uc3QgUmVuZGVyUmVnaW9uKiBvbGRTdGFydFJlZ2lvbiwgY29uc3Qg
UmVuZGVyUmVnaW9uKiBvbGRFbmRSZWdpb24pCkBAIC04NDQsNyArODMyLDggQEAgdm9pZCBSZW5k
ZXJGbG93VGhyZWFkOjpjbGVhclJlbmRlckJveFJlZ2lvbkluZm9BbmRDdXN0b21TdHlsZShjb25z
dCBSZW5kZXJCb3gqIGIKICAgICAgICAgICAgIGluc2lkZU5ld1JlZ2lvblJhbmdlID0gdHJ1ZTsK
IAogICAgICAgICBpZiAoIShpbnNpZGVPbGRSZWdpb25SYW5nZSAmJiBpbnNpZGVOZXdSZWdpb25S
YW5nZSkpIHsKLSAgICAgICAgICAgIHJlZ2lvbi0+Y2xlYXJPYmplY3RTdHlsZUluUmVnaW9uKGJv
eCk7CisgICAgICAgICAgICBpZiAocmVnaW9uLT5pc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkp
CisgICAgICAgICAgICAgICAgdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudChyZWdpb24pLT5jbGVh
ck9iamVjdFN0eWxlSW5SZWdpb24oYm94KTsKICAgICAgICAgICAgIGlmIChyZWdpb24tPnJlbmRl
ckJveFJlZ2lvbkluZm8oYm94KSkKICAgICAgICAgICAgICAgICByZWdpb24tPnJlbW92ZVJlbmRl
ckJveFJlZ2lvbkluZm8oYm94KTsKICAgICAgICAgfQpAQCAtOTEyLDIwICs5MDEsNiBAQCBib29s
IFJlbmRlckZsb3dUaHJlYWQ6OnJlZ2lvbkluUmFuZ2UoY29uc3QgUmVuZGVyUmVnaW9uKiB0YXJn
ZXRSZWdpb24sIGNvbnN0IFJlbgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotLy8gQ2hlY2sgaWYg
dGhlIGNvbnRlbnQgaXMgZmxvd24gaW50byBhdCBsZWFzdCBhIHJlZ2lvbiB3aXRoIHJlZ2lvbiBz
dHlsaW5nIHJ1bGVzLgotdm9pZCBSZW5kZXJGbG93VGhyZWFkOjpjaGVja1JlZ2lvbnNXaXRoU3R5
bGluZygpCi17Ci0gICAgYm9vbCBoYXNSZWdpb25zV2l0aFN0eWxpbmcgPSBmYWxzZTsKLSAgICBm
b3IgKGF1dG8gaXRlciA9IG1fcmVnaW9uTGlzdC5iZWdpbigpLCBlbmQgPSBtX3JlZ2lvbkxpc3Qu
ZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdp
b24gPSAqaXRlcjsKLSAgICAgICAgaWYgKHJlZ2lvbi0+aGFzQ3VzdG9tUmVnaW9uU3R5bGUoKSkg
ewotICAgICAgICAgICAgaGFzUmVnaW9uc1dpdGhTdHlsaW5nID0gdHJ1ZTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIG1faGFzUmVnaW9uc1dpdGhTdHlsaW5nID0g
aGFzUmVnaW9uc1dpdGhTdHlsaW5nOwotfQotCiBib29sIFJlbmRlckZsb3dUaHJlYWQ6Om9iamVj
dEluRmxvd1JlZ2lvbihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgUmVuZGVyUmVn
aW9uKiByZWdpb24pIGNvbnN0CiB7CiAgICAgQVNTRVJUKG9iamVjdCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaAppbmRleCBlNjJmZGUzMzRkNGJjMDBiYmE0
MWM0YWM5NTkyZTYwYjNkM2EzMDM0Li40NzUzNzc0NzBhMzMzNTUwM2E3NTFkNjVlNTQ5NTUzMzMx
MWFlODgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1Ro
cmVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmgK
QEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgogICAgIC8vIGNhbiBlYXNpbHkgYXZvaWQgZHJhd2lu
ZyB0aGUgY2hpbGRyZW4gZGlyZWN0bHkuCiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIo
KSBjb25zdCBPVkVSUklERSBGSU5BTCB7IHJldHVybiB0cnVlOyB9CiAgICAgCi0gICAgdm9pZCBy
ZW1vdmVGbG93Q2hpbGRJbmZvKFJlbmRlck9iamVjdCopOworICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVGbG93Q2hpbGRJbmZvKFJlbmRlck9iamVjdCopOwogI2lmbmRlZiBOREVCVUcKICAgICBib29s
IGhhc0NoaWxkSW5mbyhSZW5kZXJPYmplY3QqIGNoaWxkKSBjb25zdCB7IHJldHVybiBjaGlsZCAm
JiBjaGlsZC0+aXNCb3goKSAmJiBtX3JlZ2lvblJhbmdlTWFwLmNvbnRhaW5zKHRvUmVuZGVyQm94
KGNoaWxkKSk7IH0KICNlbmRpZgpAQCAtODgsOSArODgsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0
UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBPVkVSUklERTsKIAogICAg
IGJvb2wgaGFzUmVnaW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaW9uTGlzdC5zaXplKCk7IH0K
LSAgICAvLyBDaGVjayBpZiB0aGUgY29udGVudCBpcyBmbG93biBpbnRvIGF0IGxlYXN0IGEgcmVn
aW9uIHdpdGggcmVnaW9uIHN0eWxpbmcgcnVsZXMuCi0gICAgYm9vbCBoYXNSZWdpb25zV2l0aFN0
eWxpbmcoKSBjb25zdCB7IHJldHVybiBtX2hhc1JlZ2lvbnNXaXRoU3R5bGluZzsgfQotICAgIHZv
aWQgY2hlY2tSZWdpb25zV2l0aFN0eWxpbmcoKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVnaW9uQ2hh
bmdlZFdyaXRpbmdNb2RlKFJlbmRlclJlZ2lvbiopIHsgfQogCiAgICAgdm9pZCB2YWxpZGF0ZVJl
Z2lvbnMoKTsKQEAgLTE0MSw4ICsxMzgsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSZWdpb25S
YW5nZUZvckJveChjb25zdCBSZW5kZXJCb3gqLCBSZW5kZXJSZWdpb24qLCBSZW5kZXJSZWdpb24q
KTsKICAgICB2b2lkIGdldFJlZ2lvblJhbmdlRm9yQm94KGNvbnN0IFJlbmRlckJveCosIFJlbmRl
clJlZ2lvbiomIHN0YXJ0UmVnaW9uLCBSZW5kZXJSZWdpb24qJiBlbmRSZWdpb24pIGNvbnN0Owog
Ci0gICAgdm9pZCBjbGVhclJlbmRlck9iamVjdEN1c3RvbVN0eWxlKGNvbnN0IFJlbmRlck9iamVj
dCopOwotCiAgICAgLy8gQ2hlY2sgaWYgdGhlIG9iamVjdCBpcyBpbiByZWdpb24gYW5kIHRoZSBy
ZWdpb24gaXMgcGFydCBvZiB0aGlzIGZsb3cgdGhyZWFkLgogICAgIGJvb2wgb2JqZWN0SW5GbG93
UmVnaW9uKGNvbnN0IFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlclJlZ2lvbiopIGNvbnN0Owog
CkBAIC0zNDgsNyArMzQzLDYgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgbV9yZWdpb25zSW52YWxp
ZGF0ZWQgOiAxOwogICAgIGJvb2wgbV9yZWdpb25zSGF2ZVVuaWZvcm1Mb2dpY2FsV2lkdGggOiAx
OwogICAgIGJvb2wgbV9yZWdpb25zSGF2ZVVuaWZvcm1Mb2dpY2FsSGVpZ2h0IDogMTsKLSAgICBi
b29sIG1faGFzUmVnaW9uc1dpdGhTdHlsaW5nIDogMTsKICAgICBib29sIG1fZGlzcGF0Y2hSZWdp
b25MYXlvdXRVcGRhdGVFdmVudCA6IDE7CiAgICAgYm9vbCBtX2Rpc3BhdGNoUmVnaW9uT3ZlcnNl
dENoYW5nZUV2ZW50IDogMTsKICAgICBib29sIG1fcGFnZUxvZ2ljYWxTaXplQ2hhbmdlZCA6IDE7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCmluZGV4IGI0Y2E3M2Y0
Y2E5YzU2ZDgxNWM3NDcwODY3ODc2OTU0NjM3NWU3NjguLjI5YzViNzM5YjQ0Mjc2NmViM2M2ODAz
YWMwNzdkMDZhNjQzNGQ0YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJJbmxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuY3BwCkBAIC0zMSwxMiArMzEsMTIgQEAKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94LmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyRmxvd1RocmVhZC5oIgogI2luY2x1ZGUgIlJlbmRlckZ1bGxTY3JlZW4uaCIKICNpbmNsdWRl
ICJSZW5kZXJHZW9tZXRyeU1hcC5oIgogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMaW5lQnJlYWsuaCIKKyNpbmNs
dWRlICJSZW5kZXJOYW1lZEZsb3dUaHJlYWQuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgog
I2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTdHlsZUluaGVyaXRlZERhdGEuaCIK
QEAgLTIxNyw3ICsyMTcsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6dXBkYXRlQWx3YXlzQ3JlYXRl
TGluZUJveGVzKGJvb2wgZnVsbExheW91dCkKICAgICAgICAgfHwgc3R5bGUoKS50ZXh0RW1waGFz
aXNNYXJrKCkgIT0gVGV4dEVtcGhhc2lzTWFya05vbmUKICAgICAgICAgfHwgKGNoZWNrRm9udHMg
JiYgKCFwYXJlbnRTdHlsZS0+Zm9udCgpLmZvbnRNZXRyaWNzKCkuaGFzSWRlbnRpY2FsQXNjZW50
RGVzY2VudEFuZExpbmVHYXAoc3R5bGUoKS5mb250KCkuZm9udE1ldHJpY3MoKSkKICAgICAgICAg
fHwgcGFyZW50U3R5bGUtPmxpbmVIZWlnaHQoKSAhPSBzdHlsZSgpLmxpbmVIZWlnaHQoKSkpCi0g
ICAgICAgIHx8IChmbG93VGhyZWFkICYmIGZsb3dUaHJlYWQtPmhhc1JlZ2lvbnNXaXRoU3R5bGlu
ZygpKTsKKyAgICAgICAgfHwgKGZsb3dUaHJlYWQgJiYgZmxvd1RocmVhZC0+aXNSZW5kZXJOYW1l
ZEZsb3dUaHJlYWQoKSAmJiB0b1JlbmRlck5hbWVkRmxvd1RocmVhZChmbG93VGhyZWFkKS0+aGFz
UmVnaW9uc1dpdGhTdHlsaW5nKCkpOwogCiAgICAgaWYgKCFhbHdheXNDcmVhdGVMaW5lQm94ZXMg
JiYgY2hlY2tGb250cyAmJiBkb2N1bWVudCgpLnN0eWxlU2hlZXRDb2xsZWN0aW9uKCkudXNlc0Zp
cnN0TGluZVJ1bGVzKCkpIHsKICAgICAgICAgLy8gSGF2ZSB0byBjaGVjayB0aGUgZmlyc3QgbGlu
ZSBzdHlsZSBhcyB3ZWxsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudC5jcHAKaW5kZXggMzFhMTNjMDU3MTQ2ZDZkNWY5YjQzMTg4MDgx
MTFhYTY4ZjQ4ZjgzMC4uY2ZiMTYwODkyOWE0YjA1ZjgzMGUxZWUyYzE1YzNmYTg2MWY0MWQ1ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQuY3BwCkBAIC00Miw2ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQ6OlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KERvY3VtZW50JiBkb2N1
bWVudCwgUGFzc1JlZjxSZW5kZXJTdHlsZT4gc3R5bGUpCiAgICAgOiBSZW5kZXJSZWdpb24oZG9j
dW1lbnQsIHN0ZDo6bW92ZShzdHlsZSksIG51bGxwdHIpCisgICAgLCBtX2hhc0N1c3RvbVJlZ2lv
blN0eWxlKGZhbHNlKQogewogfQogCkBAIC02Niw4ICs2NywxNiBAQCBQYXNzUmVmPFJlbmRlclN0
eWxlPiBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6Y3JlYXRlU3R5bGUoY29uc3QgUmVuZGVyU3R5
bGUmIHBhcgogdm9pZCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6c3R5bGVEaWRDaGFuZ2UoU3R5
bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsKICAgICBS
ZW5kZXJSZWdpb246OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKLSAgICBpZiAoIW1f
Zmxvd1RocmVhZCkKKworICAgIC8vIElmIHRoZSByZWdpb24gaXMgbm90IGF0dGFjaGVkIHRvIGFu
eSB0aHJlYWQsIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sKKyAgICAvLyB3aGV0aGVyIHRoZSBy
ZWdpb24gaGFzIHJlZ2lvbiBzdHlsaW5nIHNpbmNlIG5vIGNvbnRlbnQgd2lsbCBiZSBkaXNwbGF5
ZWQKKyAgICAvLyBpbnRvIHRoZSByZWdpb24uCisgICAgaWYgKCFtX2Zsb3dUaHJlYWQpIHsKKyAg
ICAgICAgc2V0SGFzQ3VzdG9tUmVnaW9uU3R5bGUoZmFsc2UpOwogICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgY2hlY2tSZWdpb25TdHlsZSgpOwogCiAgICAgaWYgKHBhcmVudCgpICYmIHBh
cmVudCgpLT5uZWVkc0xheW91dCgpKQogICAgICAgICBzZXROZWVkc0xheW91dChNYXJrT25seVRo
aXMpOwpAQCAtOTQsNCArMTAzLDE5MSBAQCBMYXlvdXRVbml0IFJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50OjptYXhQYWdlTG9naWNhbEhlaWdodCgpIGNvbnN0CiAgICAgcmV0dXJuIHN0eWxlVG9Vc2Uu
bG9naWNhbE1heEhlaWdodCgpLmlzVW5kZWZpbmVkKCkgPyBSZW5kZXJGbG93VGhyZWFkOjptYXhM
b2dpY2FsSGVpZ2h0KCkgOiB0b1JlbmRlckJsb2NrKHBhcmVudCgpKS0+Y29tcHV0ZVJlcGxhY2Vk
TG9naWNhbEhlaWdodFVzaW5nKHN0eWxlVG9Vc2UubG9naWNhbE1heEhlaWdodCgpKTsKIH0KIAor
dm9pZCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6Y2hlY2tSZWdpb25TdHlsZSgpCit7CisgICAg
QVNTRVJUKG1fZmxvd1RocmVhZCk7CisgICAgYm9vbCBjdXN0b21SZWdpb25TdHlsZSA9IGZhbHNl
OworCisgICAgLy8gRklYTUU6IFJlZ2lvbiBzdHlsaW5nIGRvZXNuJ3Qgd29yayBmb3IgcHNldWRv
IGVsZW1lbnRzLgorICAgIGlmICghaXNQc2V1ZG9FbGVtZW50KCkpCisgICAgICAgIGN1c3RvbVJl
Z2lvblN0eWxlID0gdmlldygpLmRvY3VtZW50KCkuZW5zdXJlU3R5bGVSZXNvbHZlcigpLmNoZWNr
UmVnaW9uU3R5bGUoZ2VuZXJhdGluZ0VsZW1lbnQoKSk7CisgICAgc2V0SGFzQ3VzdG9tUmVnaW9u
U3R5bGUoY3VzdG9tUmVnaW9uU3R5bGUpOworICAgIHRvUmVuZGVyTmFtZWRGbG93VGhyZWFkKG1f
Zmxvd1RocmVhZCktPmNoZWNrUmVnaW9uc1dpdGhTdHlsaW5nKCk7Cit9CisKK1Bhc3NSZWZQdHI8
UmVuZGVyU3R5bGU+IFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Ojpjb21wdXRlU3R5bGVJblJlZ2lv
bihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKK3sKKyAgICBBU1NFUlQob2JqZWN0KTsKKyAg
ICBBU1NFUlQoIW9iamVjdC0+aXNBbm9ueW1vdXMoKSk7CisgICAgQVNTRVJUKG9iamVjdC0+bm9k
ZSgpICYmIG9iamVjdC0+bm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpOworCisgICAgLy8gRklYTUU6
IFJlZ2lvbiBzdHlsaW5nIGZhaWxzIGZvciBwc2V1ZG8tZWxlbWVudHMgYmVjYXVzZSB0aGUgcmVu
ZGVyZXJzIGRvbid0IGhhdmUgYSBub2RlLgorICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1l
bnQob2JqZWN0LT5ub2RlKCkpOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcmVuZGVyT2JqZWN0
UmVnaW9uU3R5bGUgPSBvYmplY3QtPnZpZXcoKS5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2
ZXIoKS5zdHlsZUZvckVsZW1lbnQoZWxlbWVudCwgMCwgRGlzYWxsb3dTdHlsZVNoYXJpbmcsIE1h
dGNoQWxsUnVsZXMsIHRoaXMpOworCisgICAgcmV0dXJuIHJlbmRlck9iamVjdFJlZ2lvblN0eWxl
LnJlbGVhc2UoKTsKK30KKwordm9pZCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6Y29tcHV0ZUNo
aWxkcmVuU3R5bGVJblJlZ2lvbihjb25zdCBSZW5kZXJFbGVtZW50KiBvYmplY3QpCit7CisgICAg
Zm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gb2JqZWN0LT5maXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CisKKyAgICAgICAgYXV0byBpdCA9IG1fcmVu
ZGVyT2JqZWN0UmVnaW9uU3R5bGUuZmluZChjaGlsZCk7CisKKyAgICAgICAgUmVmUHRyPFJlbmRl
clN0eWxlPiBjaGlsZFN0eWxlSW5SZWdpb247CisgICAgICAgIGJvb2wgb2JqZWN0UmVnaW9uU3R5
bGVDYWNoZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKGl0ICE9IG1fcmVuZGVyT2JqZWN0UmVnaW9u
U3R5bGUuZW5kKCkpIHsKKyAgICAgICAgICAgIGNoaWxkU3R5bGVJblJlZ2lvbiA9IGl0LT52YWx1
ZS5zdHlsZTsKKyAgICAgICAgICAgIG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVkID0gdHJ1ZTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChjaGlsZC0+aXNBbm9ueW1vdXMoKSB8fCBj
aGlsZC0+aXNJbkZsb3dSZW5kZXJGbG93VGhyZWFkKCkpCisgICAgICAgICAgICAgICAgY2hpbGRT
dHlsZUluUmVnaW9uID0gUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3Bs
YXkoJm9iamVjdC0+c3R5bGUoKSwgY2hpbGQtPnN0eWxlKCkuZGlzcGxheSgpKTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKGNoaWxkLT5pc1RleHQoKSkKKyAgICAgICAgICAgICAgICBjaGlsZFN0eWxl
SW5SZWdpb24gPSBSZW5kZXJTdHlsZTo6Y2xvbmUoJm9iamVjdC0+c3R5bGUoKSk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgY2hpbGRTdHlsZUluUmVnaW9uID0gY29tcHV0ZVN0
eWxlSW5SZWdpb24oY2hpbGQpOworICAgICAgICB9CisKKyAgICAgICAgc2V0T2JqZWN0U3R5bGVJ
blJlZ2lvbihjaGlsZCwgY2hpbGRTdHlsZUluUmVnaW9uLCBvYmplY3RSZWdpb25TdHlsZUNhY2hl
ZCk7CisKKyAgICAgICAgaWYgKGNoaWxkLT5pc1JlbmRlckVsZW1lbnQoKSkKKyAgICAgICAgICAg
IGNvbXB1dGVDaGlsZHJlblN0eWxlSW5SZWdpb24odG9SZW5kZXJFbGVtZW50KGNoaWxkKSk7Cisg
ICAgfQorfQorCit2b2lkIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjpzZXRPYmplY3RTdHlsZUlu
UmVnaW9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBzdHls
ZUluUmVnaW9uLCBib29sIG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVkKQoreworICAgIEFTU0VSVChv
YmplY3QtPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSk7CisKKyAgICBSZWZQdHI8UmVuZGVy
U3R5bGU+IG9iamVjdE9yaWdpbmFsU3R5bGUgPSAmb2JqZWN0LT5zdHlsZSgpOworICAgIGlmIChv
YmplY3QtPmlzUmVuZGVyRWxlbWVudCgpKQorICAgICAgICB0b1JlbmRlckVsZW1lbnQob2JqZWN0
KS0+c2V0U3R5bGVJbnRlcm5hbCgqc3R5bGVJblJlZ2lvbik7CisKKyAgICBpZiAob2JqZWN0LT5p
c0JveE1vZGVsT2JqZWN0KCkgJiYgIW9iamVjdC0+aGFzQm94RGVjb3JhdGlvbnMoKSkgeworICAg
ICAgICBib29sIGhhc0JveERlY29yYXRpb25zID0gb2JqZWN0LT5pc1RhYmxlQ2VsbCgpCisgICAg
ICAgIHx8IG9iamVjdC0+c3R5bGUoKS5oYXNCYWNrZ3JvdW5kKCkKKyAgICAgICAgfHwgb2JqZWN0
LT5zdHlsZSgpLmhhc0JvcmRlcigpCisgICAgICAgIHx8IG9iamVjdC0+c3R5bGUoKS5oYXNBcHBl
YXJhbmNlKCkKKyAgICAgICAgfHwgb2JqZWN0LT5zdHlsZSgpLmJveFNoYWRvdygpOworICAgICAg
ICBvYmplY3QtPnNldEhhc0JveERlY29yYXRpb25zKGhhc0JveERlY29yYXRpb25zKTsKKyAgICB9
CisKKyAgICBPYmplY3RSZWdpb25TdHlsZUluZm8gc3R5bGVJbmZvOworICAgIHN0eWxlSW5mby5z
dHlsZSA9IG9iamVjdE9yaWdpbmFsU3R5bGU7CisgICAgc3R5bGVJbmZvLmNhY2hlZCA9IG9iamVj
dFJlZ2lvblN0eWxlQ2FjaGVkOworICAgIG1fcmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUuc2V0KG9i
amVjdCwgc3R5bGVJbmZvKTsKK30KKwordm9pZCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6Y2xl
YXJPYmplY3RTdHlsZUluUmVnaW9uKGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0KQoreworICAg
IEFTU0VSVChvYmplY3QpOworICAgIG1fcmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUucmVtb3ZlKG9i
amVjdCk7CisKKyAgICAvLyBDbGVhciB0aGUgc3R5bGUgZm9yIHRoZSBjaGlsZHJlbiBvZiB0aGlz
IG9iamVjdC4KKyAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBvYmplY3QtPmZpcnN0Q2hp
bGRTbG93KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgICAgICBj
bGVhck9iamVjdFN0eWxlSW5SZWdpb24oY2hpbGQpOworfQorCit2b2lkIFJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50OjpzZXRSZWdpb25PYmplY3RzUmVnaW9uU3R5bGUoKQoreworICAgIGlmICghaGFz
Q3VzdG9tUmVnaW9uU3R5bGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gU3RhcnQgZnJv
bSBjb250ZW50IG5vZGVzIGFuZCByZWN1cnNpdmVseSBjb21wdXRlIHRoZSBzdHlsZSBpbiByZWdp
b24gZm9yIHRoZSByZW5kZXIgb2JqZWN0cyBiZWxvdy4KKyAgICAvLyBJZiB0aGUgc3R5bGUgaW4g
cmVnaW9uIHdhcyBhbHJlYWR5IGNvbXB1dGVkLCB1c2VkIHRoYXQgc3R5bGUgaW5zdGVhZCBvZiBj
b21wdXRpbmcgYSBuZXcgb25lLgorICAgIGNvbnN0IFJlbmRlck5hbWVkRmxvd1RocmVhZCYgbmFt
ZWRGbG93ID0gdmlldygpLmZsb3dUaHJlYWRDb250cm9sbGVyKCkuZW5zdXJlUmVuZGVyRmxvd1Ro
cmVhZFdpdGhOYW1lKHN0eWxlKCkucmVnaW9uVGhyZWFkKCkpOworICAgIGNvbnN0IE5hbWVkRmxv
d0NvbnRlbnRFbGVtZW50cyYgY29udGVudEVsZW1lbnRzID0gbmFtZWRGbG93LmNvbnRlbnRFbGVt
ZW50cygpOworCisgICAgZm9yIChhdXRvIGl0ZXIgPSBjb250ZW50RWxlbWVudHMuYmVnaW4oKSwg
ZW5kID0gY29udGVudEVsZW1lbnRzLmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAg
ICAgIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQgPSAqaXRlcjsKKyAgICAgICAgLy8gVGhlIGxpc3Qg
b2YgY29udGVudCBub2RlcyBjb250YWlucyBhbHNvIHRoZSBub2RlcyB3aXRoIGRpc3BsYXk6bm9u
ZS4KKyAgICAgICAgaWYgKCFlbGVtZW50LT5yZW5kZXJlcigpKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgUmVuZGVyRWxlbWVudCogb2JqZWN0ID0gZWxlbWVudC0+cmVuZGVyZXIo
KTsKKyAgICAgICAgLy8gSWYgdGhlIGNvbnRlbnQgbm9kZSBkb2VzIG5vdCBmbG93IGFueSBvZiBp
dHMgY2hpbGRyZW4gaW4gdGhpcyByZWdpb24sCisgICAgICAgIC8vIHdlIGRvIG5vdCBjb21wdXRl
IGFueSBzdHlsZSBmb3IgdGhlbSBpbiB0aGlzIHJlZ2lvbi4KKyAgICAgICAgaWYgKCFmbG93VGhy
ZWFkKCktPm9iamVjdEluRmxvd1JlZ2lvbihvYmplY3QsIHRoaXMpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgLy8gSWYgdGhlIG9iamVjdCBoYXMgc3R5bGUgaW4gcmVnaW9uLCB1
c2UgdGhhdCBpbnN0ZWFkIG9mIGNvbXB1dGluZyBhIG5ldyBvbmUuCisgICAgICAgIGF1dG8gaXQg
PSBtX3JlbmRlck9iamVjdFJlZ2lvblN0eWxlLmZpbmQob2JqZWN0KTsKKyAgICAgICAgUmVmUHRy
PFJlbmRlclN0eWxlPiBvYmplY3RTdHlsZUluUmVnaW9uOworICAgICAgICBib29sIG9iamVjdFJl
Z2lvblN0eWxlQ2FjaGVkID0gZmFsc2U7CisgICAgICAgIGlmIChpdCAhPSBtX3JlbmRlck9iamVj
dFJlZ2lvblN0eWxlLmVuZCgpKSB7CisgICAgICAgICAgICBvYmplY3RTdHlsZUluUmVnaW9uID0g
aXQtPnZhbHVlLnN0eWxlOworICAgICAgICAgICAgQVNTRVJUKGl0LT52YWx1ZS5jYWNoZWQpOwor
ICAgICAgICAgICAgb2JqZWN0UmVnaW9uU3R5bGVDYWNoZWQgPSB0cnVlOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIG9iamVjdFN0eWxlSW5SZWdpb24gPSBjb21wdXRlU3R5bGVJblJlZ2lv
bihvYmplY3QpOworCisgICAgICAgIHNldE9iamVjdFN0eWxlSW5SZWdpb24ob2JqZWN0LCBvYmpl
Y3RTdHlsZUluUmVnaW9uLCBvYmplY3RSZWdpb25TdHlsZUNhY2hlZCk7CisKKyAgICAgICAgY29t
cHV0ZUNoaWxkcmVuU3R5bGVJblJlZ2lvbihvYmplY3QpOworICAgIH0KK30KKwordm9pZCBSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudDo6cmVzdG9yZVJlZ2lvbk9iamVjdHNPcmlnaW5hbFN0eWxlKCkK
K3sKKyAgICBpZiAoIWhhc0N1c3RvbVJlZ2lvblN0eWxlKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFJlbmRlck9iamVjdFJlZ2lvblN0eWxlTWFwIHRlbXA7CisgICAgZm9yIChhdXRvIGl0ZXIg
PSBtX3JlbmRlck9iamVjdFJlZ2lvblN0eWxlLmJlZ2luKCksIGVuZCA9IG1fcmVuZGVyT2JqZWN0
UmVnaW9uU3R5bGUuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgUmVuZGVy
T2JqZWN0KiBvYmplY3QgPSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGl0ZXItPmtleSk7Cisg
ICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gb2JqZWN0UmVnaW9uU3R5bGUgPSAmb2JqZWN0LT5z
dHlsZSgpOworICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG9iamVjdE9yaWdpbmFsU3R5bGUg
PSBpdGVyLT52YWx1ZS5zdHlsZTsKKyAgICAgICAgaWYgKG9iamVjdC0+aXNSZW5kZXJFbGVtZW50
KCkpCisgICAgICAgICAgICB0b1JlbmRlckVsZW1lbnQob2JqZWN0KS0+c2V0U3R5bGVJbnRlcm5h
bCgqb2JqZWN0T3JpZ2luYWxTdHlsZSk7CisKKyAgICAgICAgYm9vbCBzaG91bGRDYWNoZVJlZ2lv
blN0eWxlID0gaXRlci0+dmFsdWUuY2FjaGVkOworICAgICAgICBpZiAoIXNob3VsZENhY2hlUmVn
aW9uU3R5bGUpIHsKKyAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgd2Ugc2hvdWxkIGNhY2hl
IHRoZSBjb21wdXRlZCBzdHlsZSBpbiByZWdpb24uCisgICAgICAgICAgICB1bnNpZ25lZCBjaGFu
Z2VkQ29udGV4dFNlbnNpdGl2ZVByb3BlcnRpZXMgPSBDb250ZXh0U2Vuc2l0aXZlUHJvcGVydHlO
b25lOworICAgICAgICAgICAgU3R5bGVEaWZmZXJlbmNlIHN0eWxlRGlmZiA9IG9iamVjdE9yaWdp
bmFsU3R5bGUtPmRpZmYob2JqZWN0UmVnaW9uU3R5bGUuZ2V0KCksIGNoYW5nZWRDb250ZXh0U2Vu
c2l0aXZlUHJvcGVydGllcyk7CisgICAgICAgICAgICBpZiAoc3R5bGVEaWZmIDwgU3R5bGVEaWZm
ZXJlbmNlTGF5b3V0UG9zaXRpb25lZE1vdmVtZW50T25seSkKKyAgICAgICAgICAgICAgICBzaG91
bGRDYWNoZVJlZ2lvblN0eWxlID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2hvdWxk
Q2FjaGVSZWdpb25TdHlsZSkgeworICAgICAgICAgICAgT2JqZWN0UmVnaW9uU3R5bGVJbmZvIHN0
eWxlSW5mbzsKKyAgICAgICAgICAgIHN0eWxlSW5mby5zdHlsZSA9IG9iamVjdFJlZ2lvblN0eWxl
OworICAgICAgICAgICAgc3R5bGVJbmZvLmNhY2hlZCA9IHRydWU7CisgICAgICAgICAgICB0ZW1w
LnNldChvYmplY3QsIHN0eWxlSW5mbyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX3JlbmRl
ck9iamVjdFJlZ2lvblN0eWxlLnN3YXAodGVtcCk7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZFBh
aW50UmVnaW9uQ29udGVudHNJblBoYXNlKFBhaW50UGhhc2UgcGhhc2UpCit7CisgICAgcmV0dXJu
IHBoYXNlID09IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQKKyAgICAgICAgfHwgcGhhc2UgPT0g
UGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kCisgICAgICAgIHx8IHBoYXNlID09IFBhaW50
UGhhc2VTZWxlY3Rpb24KKyAgICAgICAgfHwgcGhhc2UgPT0gUGFpbnRQaGFzZVRleHRDbGlwOwor
fQorCit2b2lkIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjpwYWludE9iamVjdChQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQoreworICAgIGlmIChz
dHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQorICAgICAgICByZXR1cm47CisKKyAgICBS
ZW5kZXJSZWdpb246OnBhaW50T2JqZWN0KHBhaW50SW5mbywgcGFpbnRPZmZzZXQpOworCisgICAg
aWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIGRvIG5vdCB3YW50
IHRvIHBhaW50IGEgcmVnaW9uJ3MgY29udGVudHMgbXVsdGlwbGUgdGltZXMgKGZvciBlYWNoIHBh
aW50IHBoYXNlIG9mIHRoZSByZWdpb24gb2JqZWN0KS4KKyAgICAvLyBUaHVzLCB3ZSBvbmx5IHBh
aW50IHRoZSByZWdpb24ncyBjb250ZW50cyBpbiBjZXJ0YWluIHBoYXNlcy4KKyAgICBpZiAoIXNo
b3VsZFBhaW50UmVnaW9uQ29udGVudHNJblBoYXNlKHBhaW50SW5mby5waGFzZSkpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vIERlbGVnYXRlIHRoZSBwYWludGluZyBvZiBhIHJlZ2lvbidzIGNv
bnRlbnRzIHRvIFJlbmRlckZsb3dUaHJlYWQuCisgICAgLy8gUmVuZGVyRmxvd1RocmVhZCBpcyBh
IHNlbGYgcGFpbnRpbmcgbGF5ZXIgYmVjYXVzZSBpdCdzIGEgcG9zaXRpb25lZCBvYmplY3QuCisg
ICAgLy8gUmVuZGVyRmxvd1RocmVhZCBwYWludHMgaXRzIGNoaWxkcmVuLCB0aGUgY29sbGVjdGVk
IG9iamVjdHMuCisgICAgc2V0UmVnaW9uT2JqZWN0c1JlZ2lvblN0eWxlKCk7CisgICAgbV9mbG93
VGhyZWFkLT5wYWludEZsb3dUaHJlYWRQb3J0aW9uSW5SZWdpb24ocGFpbnRJbmZvLCB0aGlzLCBm
bG93VGhyZWFkUG9ydGlvblJlY3QoKSwgZmxvd1RocmVhZFBvcnRpb25PdmVyZmxvd1JlY3QoKSwg
TGF5b3V0UG9pbnQocGFpbnRPZmZzZXQueCgpLCBwYWludE9mZnNldC55KCkpKTsKKyAgICByZXN0
b3JlUmVnaW9uT2JqZWN0c09yaWdpbmFsU3R5bGUoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxv
d0ZyYWdtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQuaAppbmRleCAwYjY4MzYyOGQ1OWYzNzAzMzNjYjM2ZDM4M2ZiZjZhNDFlNmQ3NjI4Li4y
YmFhYzhlZDU1MDRhYmMyZjY4ODM2MmNjYjQ4NjM4YzYxNmIzYjQ3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaApAQCAtNjgsOSAr
NjgsNDIgQEAgcHVibGljOgogICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGxheWVyT3duZXIo
KSBjb25zdCB7IHJldHVybiBwYXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNSZW5kZXJMYXllck1vZGVs
T2JqZWN0KCkgPwogICAgICAgICB0b1JlbmRlckxheWVyTW9kZWxPYmplY3QocGFyZW50KCkpIDog
bnVsbHB0cjsgfQogCisgICAgYm9vbCBoYXNDdXN0b21SZWdpb25TdHlsZSgpIGNvbnN0IHsgcmV0
dXJuIG1faGFzQ3VzdG9tUmVnaW9uU3R5bGU7IH0KKyAgICB2b2lkIHNldEhhc0N1c3RvbVJlZ2lv
blN0eWxlKGJvb2wgaGFzQ3VzdG9tUmVnaW9uU3R5bGUpIHsgbV9oYXNDdXN0b21SZWdpb25TdHls
ZSA9IGhhc0N1c3RvbVJlZ2lvblN0eWxlOyB9CisgICAgdm9pZCBjbGVhck9iamVjdFN0eWxlSW5S
ZWdpb24oY29uc3QgUmVuZGVyT2JqZWN0Kik7CisKKy8vIEZJWE1FOiBUZW1wb3JhcmlseSBwdWJs
aWMgdW50aWwgd2UgbW92ZSBhbGwgdGhlIENTU1JlZ2lvbnMgZnVuY3Rpb25hbGl0eSBmcm9tIFJl
bmRlclJlZ2lvbiB0byBoZXJlLgorcHVibGljOgorICAgIHZvaWQgY2hlY2tSZWdpb25TdHlsZSgp
OworCiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRIYXZlQXV0b0xvZ2ljYWxIZWln
aHQoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUo
KSBjb25zdCBPVkVSUklERSB7IHJldHVybiAiUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQiOyB9CisK
KyAgICB2b2lkIHNldFJlZ2lvbk9iamVjdHNSZWdpb25TdHlsZSgpOworICAgIHZvaWQgcmVzdG9y
ZVJlZ2lvbk9iamVjdHNPcmlnaW5hbFN0eWxlKCk7CisKKyAgICBQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBjb21wdXRlU3R5bGVJblJlZ2lvbihjb25zdCBSZW5kZXJPYmplY3QqKTsKKyAgICB2b2lk
IGNvbXB1dGVDaGlsZHJlblN0eWxlSW5SZWdpb24oY29uc3QgUmVuZGVyRWxlbWVudCopOworICAg
IHZvaWQgc2V0T2JqZWN0U3R5bGVJblJlZ2lvbihSZW5kZXJPYmplY3QqLCBQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiwgYm9vbCBvYmplY3RSZWdpb25TdHlsZUNhY2hlZCk7CisKKyAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRPYmplY3QoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKSBPVkVSUklE
RTsKKworICAgIHN0cnVjdCBPYmplY3RSZWdpb25TdHlsZUluZm8geworICAgICAgICAvLyBVc2Vk
IHRvIHN0b3JlIHRoZSBvcmlnaW5hbCBzdHlsZSBvZiB0aGUgb2JqZWN0IGluIHJlZ2lvbgorICAg
ICAgICAvLyBzbyB0aGF0IHRoZSBvcmlnaW5hbCBzdHlsZSBpcyBwcm9wZXJseSByZXN0b3JlZCBh
ZnRlciBwYWludC4KKyAgICAgICAgLy8gQWxzbyB1c2VkIHRvIHN0b3JlIGNvbXB1dGVkIHN0eWxl
IG9mIHRoZSBvYmplY3QgaW4gcmVnaW9uIGJldHdlZW4KKyAgICAgICAgLy8gcmVnaW9uIHBhaW50
aW5ncywgc28gdGhhdCB0aGUgc3R5bGUgaW4gcmVnaW9uIGlzIGNvbXB1dGVkIG9ubHkKKyAgICAg
ICAgLy8gd2hlbiBuZWNlc3NhcnkuCisgICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGU7
CisgICAgICAgIC8vIFRydWUgaWYgdGhlIGNvbXB1dGVkIHN0eWxlIGluIHJlZ2lvbiBpcyBjYWNo
ZWQuCisgICAgICAgIGJvb2wgY2FjaGVkOworICAgIH07CisKKyAgICB0eXBlZGVmIEhhc2hNYXA8
Y29uc3QgUmVuZGVyT2JqZWN0KiwgT2JqZWN0UmVnaW9uU3R5bGVJbmZvID4gUmVuZGVyT2JqZWN0
UmVnaW9uU3R5bGVNYXA7CisgICAgUmVuZGVyT2JqZWN0UmVnaW9uU3R5bGVNYXAgbV9yZW5kZXJP
YmplY3RSZWdpb25TdHlsZTsKKworICAgIGJvb2wgbV9oYXNDdXN0b21SZWdpb25TdHlsZSA6IDE7
CiB9OwogCiBSRU5ERVJfT0JKRUNUX1RZUEVfQ0FTVFMoUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQs
IGlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAKaW5kZXggMWRhY2JmNjlkYjc3YmJiYmFh
ZDVmMWUwNWRhOTRjNjA4MTFmYzU0Ni4uZjBhMjgxNTM5YTRhZDI2YjA4MTE0NjZlMWUxMDM2YTQ3
ZGJmNTA1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVk
Rmxvd1RocmVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVk
Rmxvd1RocmVhZC5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJQb3NpdGlvbi5oIgog
I2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCisjaW5jbHVkZSAi
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKICNp
bmNsdWRlICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtNDgsNiAr
NDksNyBAQCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OlJlbmRlck5hbWVkRmxvd1RocmVhZChEb2N1
bWVudCYgZG9jdW1lbnQsIFBhc3NSZWY8UmVuZGVyUwogICAgIDogUmVuZGVyRmxvd1RocmVhZChk
b2N1bWVudCwgc3RkOjptb3ZlKHN0eWxlKSkKICAgICAsIG1fZmxvd1RocmVhZENoaWxkTGlzdChh
ZG9wdFB0cihuZXcgRmxvd1RocmVhZENoaWxkTGlzdCgpKSkKICAgICAsIG1fb3ZlcnNldCh0cnVl
KQorICAgICwgbV9oYXNSZWdpb25zV2l0aFN0eWxpbmcoZmFsc2UpCiAgICAgLCBtX25hbWVkRmxv
dyhuYW1lZEZsb3cpCiAgICAgLCBtX3JlZ2lvbkxheW91dFVwZGF0ZUV2ZW50VGltZXIodGhpcywg
JlJlbmRlck5hbWVkRmxvd1RocmVhZDo6cmVnaW9uTGF5b3V0VXBkYXRlRXZlbnRUaW1lckZpcmVk
KQogICAgICwgbV9yZWdpb25PdmVyc2V0Q2hhbmdlRXZlbnRUaW1lcih0aGlzLCAmUmVuZGVyTmFt
ZWRGbG93VGhyZWFkOjpyZWdpb25PdmVyc2V0Q2hhbmdlRXZlbnRUaW1lckZpcmVkKQpAQCAtNzM4
LDQgKzc0MCwzNCBAQCBib29sIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6Y29sbGVjdHNHcmFwaGlj
c0xheWVyc1VuZGVyUmVnaW9ucygpIGNvbnN0CiB9CiAjZW5kaWYKIAorLy8gQ2hlY2sgaWYgdGhl
IGNvbnRlbnQgaXMgZmxvd24gaW50byBhdCBsZWFzdCBhIHJlZ2lvbiB3aXRoIHJlZ2lvbiBzdHls
aW5nIHJ1bGVzLgordm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmNoZWNrUmVnaW9uc1dpdGhT
dHlsaW5nKCkKK3sKKyAgICBib29sIGhhc1JlZ2lvbnNXaXRoU3R5bGluZyA9IGZhbHNlOworICAg
IGZvciAoYXV0byBpdGVyID0gbV9yZWdpb25MaXN0LmJlZ2luKCksIGVuZCA9IG1fcmVnaW9uTGlz
dC5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBSZW5kZXJOYW1lZEZsb3dG
cmFnbWVudCogcmVnaW9uID0gdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgqaXRlcik7CisgICAg
ICAgIGlmIChyZWdpb24tPmhhc0N1c3RvbVJlZ2lvblN0eWxlKCkpIHsKKyAgICAgICAgICAgIGhh
c1JlZ2lvbnNXaXRoU3R5bGluZyA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKyAgICBtX2hhc1JlZ2lvbnNXaXRoU3R5bGluZyA9IGhhc1JlZ2lvbnNXaXRoU3R5
bGluZzsKK30KKwordm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmNsZWFyUmVuZGVyT2JqZWN0
Q3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCit7CisgICAgLy8gQ2xlYXIg
dGhlIHN0eWxlcyBmb3IgdGhlIG9iamVjdCBpbiB0aGUgcmVnaW9ucy4KKyAgICAvLyBGSVhNRTog
UmVnaW9uIHN0eWxpbmcgaXMgbm90IGNvbXB1dGVkIG9ubHkgZm9yIHRoZSByZWdpb24gcmFuZ2Ug
b2YgdGhlIG9iamVjdCBzbyB0aGlzIGlzIHdoeSB3ZSBuZWVkIHRvIHdhbGsgdGhlIHdob2xlIGNo
YWluLgorICAgIGZvciAoYXV0byBpdGVyID0gbV9yZWdpb25MaXN0LmJlZ2luKCksIGVuZCA9IG1f
cmVnaW9uTGlzdC5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBSZW5kZXJO
YW1lZEZsb3dGcmFnbWVudCogcmVnaW9uID0gdG9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgqaXRl
cik7CisgICAgICAgIHJlZ2lvbi0+Y2xlYXJPYmplY3RTdHlsZUluUmVnaW9uKG9iamVjdCk7Cisg
ICAgfQorfQorCit2b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6cmVtb3ZlRmxvd0NoaWxkSW5m
byhSZW5kZXJPYmplY3QqIGNoaWxkKQoreworICAgIFJlbmRlckZsb3dUaHJlYWQ6OnJlbW92ZUZs
b3dDaGlsZEluZm8oY2hpbGQpOworICAgIGNsZWFyUmVuZGVyT2JqZWN0Q3VzdG9tU3R5bGUoY2hp
bGQpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TmFtZWRGbG93VGhyZWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRG
bG93VGhyZWFkLmgKaW5kZXggZDUwNDMxOWJhOTEwNWZkOTQxMWNiYjFiMGE2ZmY0YjZlNTk4Y2M3
Ny4uOGUwMGZlZDRmODYwZjk2YmRlZGMxYWIxZjYyMDg2Zjg3MDgzNjI1NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuaApAQCAtODQsNiAr
ODQsMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBjb2xsZWN0c0dyYXBoaWNzTGF5ZXJz
VW5kZXJSZWdpb25zKCkgY29uc3QgT1ZFUlJJREU7CiAjZW5kaWYKIAorICAgIC8vIENoZWNrIGlm
IHRoZSBjb250ZW50IGlzIGZsb3duIGludG8gYXQgbGVhc3QgYSByZWdpb24gd2l0aCByZWdpb24g
c3R5bGluZyBydWxlcy4KKyAgICBib29sIGhhc1JlZ2lvbnNXaXRoU3R5bGluZygpIGNvbnN0IHsg
cmV0dXJuIG1faGFzUmVnaW9uc1dpdGhTdHlsaW5nOyB9CisgICAgdm9pZCBjaGVja1JlZ2lvbnNX
aXRoU3R5bGluZygpOworCisgICAgdm9pZCBjbGVhclJlbmRlck9iamVjdEN1c3RvbVN0eWxlKGNv
bnN0IFJlbmRlck9iamVjdCopOworCisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUZsb3dDaGlsZElu
Zm8oUmVuZGVyT2JqZWN0KikgT1ZFUlJJREUgRklOQUw7CisKIHByb3RlY3RlZDoKICAgICB2b2lk
IHNldE1hcmtGb3JEZXN0cnVjdGlvbigpOwogICAgIHZvaWQgcmVzZXRNYXJrRm9yRGVzdHJ1Y3Rp
b24oKTsKQEAgLTEzMCw2ICsxMzgsNyBAQCBwcml2YXRlOgogICAgIFJlbmRlclJlZ2lvbkxpc3Qg
bV9pbnZhbGlkUmVnaW9uTGlzdDsKIAogICAgIGJvb2wgbV9vdmVyc2V0IDogMTsKKyAgICBib29s
IG1faGFzUmVnaW9uc1dpdGhTdHlsaW5nIDogMTsKIAogICAgIC8vIFRoZSBET00gT2JqZWN0IHRo
YXQgcmVwcmVzZW50cyBhIG5hbWVkIGZsb3cuCiAgICAgUmVmUHRyPFdlYktpdE5hbWVkRmxvdz4g
bV9uYW1lZEZsb3c7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UmVnaW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCmlu
ZGV4IDVkY2EzMzg5MGExOTdjMjBiN2Y5MWU4MDE2MjgxMzZhMTQ4N2JiNGUuLjM0MmE0Yjc1Y2Mx
YzE4MzJmMWE1ZWUyMGNmMzc5YTcwMWExYjhkZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSZWdpb24uY3BwCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyQm94
UmVnaW9uSW5mby5oIgogI2luY2x1ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oIgogI2luY2x1
ZGUgIlJlbmRlck5hbWVkRmxvd1RocmVhZC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNp
bmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCkBAIC01Miw3ICs1Myw2IEBAIFJlbmRlclJlZ2lvbjo6
UmVuZGVyUmVnaW9uKEVsZW1lbnQmIGVsZW1lbnQsIFBhc3NSZWY8UmVuZGVyU3R5bGU+IHN0eWxl
LCBSZW5kZXJGCiAgICAgLCBtX2Zsb3dUaHJlYWQoZmxvd1RocmVhZCkKICAgICAsIG1fcGFyZW50
TmFtZWRGbG93VGhyZWFkKDApCiAgICAgLCBtX2lzVmFsaWQoZmFsc2UpCi0gICAgLCBtX2hhc0N1
c3RvbVJlZ2lvblN0eWxlKGZhbHNlKQogICAgICwgbV9oYXNBdXRvTG9naWNhbEhlaWdodChmYWxz
ZSkKICAgICAsIG1faGFzQ29tcHV0ZWRBdXRvSGVpZ2h0KGZhbHNlKQogICAgICwgbV9jb21wdXRl
ZEF1dG9IZWlnaHQoMCkKQEAgLTY0LDcgKzY0LDYgQEAgUmVuZGVyUmVnaW9uOjpSZW5kZXJSZWdp
b24oRG9jdW1lbnQmIGRvY3VtZW50LCBQYXNzUmVmPFJlbmRlclN0eWxlPiBzdHlsZSwgUmVuZGUK
ICAgICAsIG1fZmxvd1RocmVhZChmbG93VGhyZWFkKQogICAgICwgbV9wYXJlbnROYW1lZEZsb3dU
aHJlYWQoMCkKICAgICAsIG1faXNWYWxpZChmYWxzZSkKLSAgICAsIG1faGFzQ3VzdG9tUmVnaW9u
U3R5bGUoZmFsc2UpCiAgICAgLCBtX2hhc0F1dG9Mb2dpY2FsSGVpZ2h0KGZhbHNlKQogICAgICwg
bV9oYXNDb21wdXRlZEF1dG9IZWlnaHQoZmFsc2UpCiAgICAgLCBtX2NvbXB1dGVkQXV0b0hlaWdo
dCgwKQpAQCAtMjI5LDM3ICsyMjgsNiBAQCBib29sIFJlbmRlclJlZ2lvbjo6aXNMYXN0UmVnaW9u
KCkgY29uc3QKICAgICByZXR1cm4gbV9mbG93VGhyZWFkLT5sYXN0UmVnaW9uKCkgPT0gdGhpczsK
IH0KIAotc3RhdGljIGJvb2wgc2hvdWxkUGFpbnRSZWdpb25Db250ZW50c0luUGhhc2UoUGFpbnRQ
aGFzZSBwaGFzZSkKLXsKLSAgICByZXR1cm4gcGhhc2UgPT0gUGFpbnRQaGFzZUJsb2NrQmFja2dy
b3VuZAotICAgICAgICB8fCBwaGFzZSA9PSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmQK
LSAgICAgICAgfHwgcGhhc2UgPT0gUGFpbnRQaGFzZVNlbGVjdGlvbgotICAgICAgICB8fCBwaGFz
ZSA9PSBQYWludFBoYXNlVGV4dENsaXA7Ci19Ci0KLXZvaWQgUmVuZGVyUmVnaW9uOjpwYWludE9i
amVjdChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0
KQotewotICAgIGlmIChzdHlsZSgpLnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBSZW5kZXJCbG9ja0Zsb3c6OnBhaW50T2JqZWN0KHBhaW50SW5mbywgcGFp
bnRPZmZzZXQpOwotCi0gICAgaWYgKCFpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIFdlIGRvIG5vdCB3YW50IHRvIHBhaW50IGEgcmVnaW9uJ3MgY29udGVudHMgbXVsdGlwbGUg
dGltZXMgKGZvciBlYWNoIHBhaW50IHBoYXNlIG9mIHRoZSByZWdpb24gb2JqZWN0KS4KLSAgICAv
LyBUaHVzLCB3ZSBvbmx5IHBhaW50IHRoZSByZWdpb24ncyBjb250ZW50cyBpbiBjZXJ0YWluIHBo
YXNlcy4KLSAgICBpZiAoIXNob3VsZFBhaW50UmVnaW9uQ29udGVudHNJblBoYXNlKHBhaW50SW5m
by5waGFzZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIERlbGVnYXRlIHRoZSBwYWludGlu
ZyBvZiBhIHJlZ2lvbidzIGNvbnRlbnRzIHRvIFJlbmRlckZsb3dUaHJlYWQuCi0gICAgLy8gUmVu
ZGVyRmxvd1RocmVhZCBpcyBhIHNlbGYgcGFpbnRpbmcgbGF5ZXIgYmVjYXVzZSBpdCdzIGEgcG9z
aXRpb25lZCBvYmplY3QuCi0gICAgLy8gUmVuZGVyRmxvd1RocmVhZCBwYWludHMgaXRzIGNoaWxk
cmVuLCB0aGUgY29sbGVjdGVkIG9iamVjdHMuCi0gICAgc2V0UmVnaW9uT2JqZWN0c1JlZ2lvblN0
eWxlKCk7Ci0gICAgbV9mbG93VGhyZWFkLT5wYWludEZsb3dUaHJlYWRQb3J0aW9uSW5SZWdpb24o
cGFpbnRJbmZvLCB0aGlzLCBmbG93VGhyZWFkUG9ydGlvblJlY3QoKSwgZmxvd1RocmVhZFBvcnRp
b25PdmVyZmxvd1JlY3QoKSwgTGF5b3V0UG9pbnQocGFpbnRPZmZzZXQueCgpICsgYm9yZGVyTGVm
dCgpICsgcGFkZGluZ0xlZnQoKSwgcGFpbnRPZmZzZXQueSgpICsgYm9yZGVyVG9wKCkgKyBwYWRk
aW5nVG9wKCkpKTsKLSAgICByZXN0b3JlUmVnaW9uT2JqZWN0c09yaWdpbmFsU3R5bGUoKTsKLX0K
LQogLy8gSGl0IFRlc3RpbmcKIGJvb2wgUmVuZGVyUmVnaW9uOjpoaXRUZXN0Q29udGVudHMoY29u
c3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3Qg
SGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24gYWN0aW9uKQogewpAQCAtMjc3LDE4ICsy
NDUsNiBAQCBib29sIFJlbmRlclJlZ2lvbjo6aGl0VGVzdENvbnRlbnRzKGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JgogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
dm9pZCBSZW5kZXJSZWdpb246OmNoZWNrUmVnaW9uU3R5bGUoKQotewotICAgIEFTU0VSVChtX2Zs
b3dUaHJlYWQpOwotICAgIGJvb2wgY3VzdG9tUmVnaW9uU3R5bGUgPSBmYWxzZTsKLQotICAgIC8v
IEZJWE1FOiBSZWdpb24gc3R5bGluZyBkb2Vzbid0IHdvcmsgZm9yIHBzZXVkbyBlbGVtZW50cy4K
LSAgICBpZiAoIWlzUHNldWRvRWxlbWVudCgpKQotICAgICAgICBjdXN0b21SZWdpb25TdHlsZSA9
IHZpZXcoKS5kb2N1bWVudCgpLmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5jaGVja1JlZ2lvblN0eWxl
KGdlbmVyYXRpbmdFbGVtZW50KCkpOwotICAgIHNldEhhc0N1c3RvbVJlZ2lvblN0eWxlKGN1c3Rv
bVJlZ2lvblN0eWxlKTsKLSAgICBtX2Zsb3dUaHJlYWQtPmNoZWNrUmVnaW9uc1dpdGhTdHlsaW5n
KCk7Ci19Ci0KIHZvaWQgUmVuZGVyUmVnaW9uOjppbmNyZW1lbnRBdXRvTG9naWNhbEhlaWdodENv
dW50KCkKIHsKICAgICBBU1NFUlQoaXNWYWxpZCgpKTsKQEAgLTMzNCwxNSArMjkwLDkgQEAgdm9p
ZCBSZW5kZXJSZWdpb246OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25z
dCBSZW5kZXJTdHlsZSogb2xkU3QKIHsKICAgICBSZW5kZXJCbG9ja0Zsb3c6OnN0eWxlRGlkQ2hh
bmdlKGRpZmYsIG9sZFN0eWxlKTsKIAotICAgIC8vIElmIHRoZSByZWdpb24gaXMgbm90IGF0dGFj
aGVkIHRvIGFueSB0aHJlYWQsIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sKLSAgICAvLyB3aGV0
aGVyIHRoZSByZWdpb24gaGFzIHJlZ2lvbiBzdHlsaW5nIHNpbmNlIG5vIGNvbnRlbnQgd2lsbCBi
ZSBkaXNwbGF5ZWQKLSAgICAvLyBpbnRvIHRoZSByZWdpb24uCi0gICAgaWYgKCFtX2Zsb3dUaHJl
YWQpIHsKLSAgICAgICAgc2V0SGFzQ3VzdG9tUmVnaW9uU3R5bGUoZmFsc2UpOworICAgIGlmICgh
bV9mbG93VGhyZWFkKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCi0gICAgY2hlY2tSZWdpb25T
dHlsZSgpOwogICAgIHVwZGF0ZVJlZ2lvbkhhc0F1dG9Mb2dpY2FsSGVpZ2h0RmxhZygpOwogCiAg
ICAgaWYgKG9sZFN0eWxlICYmIG9sZFN0eWxlLT53cml0aW5nTW9kZSgpICE9IHN0eWxlKCkud3Jp
dGluZ01vZGUoKSkKQEAgLTQ3Niw3ICs0MjYsOSBAQCB2b2lkIFJlbmRlclJlZ2lvbjo6YXR0YWNo
UmVnaW9uKCkKIAogICAgIC8vIFRoZSByZWdpb24ganVzdCBnb3QgYXR0YWNoZWQgdG8gdGhlIGZs
b3cgdGhyZWFkLCBsZXRzIGNoZWNrIHdoZXRoZXIKICAgICAvLyBpdCBoYXMgcmVnaW9uIHN0eWxp
bmcgcnVsZXMgYXNzb2NpYXRlZC4KLSAgICBjaGVja1JlZ2lvblN0eWxlKCk7CisgICAgLy8gRklY
TUU6IFJlbW92ZSBjYXN0IG9uY2UgYXR0YWNoUmVnaW9uIGlzIG1vdmVkIHRvIFJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50LgorICAgIGlmIChpc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCkpCisgICAg
ICAgIHRvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQodGhpcyktPmNoZWNrUmVnaW9uU3R5bGUoKTsK
IAogICAgIGlmICghaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47CkBAIC01MzgsNzcgKzQ5MCw2
IEBAIExheW91dFVuaXQgUmVuZGVyUmVnaW9uOjpsb2dpY2FsQm90dG9tT2ZGbG93VGhyZWFkQ29u
dGVudFJlY3QoY29uc3QgTGF5b3V0UmVjdCYKICAgICByZXR1cm4gZmxvd1RocmVhZCgpLT5pc0hv
cml6b250YWxXcml0aW5nTW9kZSgpID8gcmVjdC5tYXhZKCkgOiByZWN0Lm1heFgoKTsKIH0KIAot
dm9pZCBSZW5kZXJSZWdpb246OnNldFJlZ2lvbk9iamVjdHNSZWdpb25TdHlsZSgpCi17Ci0gICAg
aWYgKCFoYXNDdXN0b21SZWdpb25TdHlsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBT
dGFydCBmcm9tIGNvbnRlbnQgbm9kZXMgYW5kIHJlY3Vyc2l2ZWx5IGNvbXB1dGUgdGhlIHN0eWxl
IGluIHJlZ2lvbiBmb3IgdGhlIHJlbmRlciBvYmplY3RzIGJlbG93LgotICAgIC8vIElmIHRoZSBz
dHlsZSBpbiByZWdpb24gd2FzIGFscmVhZHkgY29tcHV0ZWQsIHVzZWQgdGhhdCBzdHlsZSBpbnN0
ZWFkIG9mIGNvbXB1dGluZyBhIG5ldyBvbmUuCi0gICAgY29uc3QgUmVuZGVyTmFtZWRGbG93VGhy
ZWFkJiBuYW1lZEZsb3cgPSB2aWV3KCkuZmxvd1RocmVhZENvbnRyb2xsZXIoKS5lbnN1cmVSZW5k
ZXJGbG93VGhyZWFkV2l0aE5hbWUoc3R5bGUoKS5yZWdpb25UaHJlYWQoKSk7Ci0gICAgY29uc3Qg
TmFtZWRGbG93Q29udGVudEVsZW1lbnRzJiBjb250ZW50RWxlbWVudHMgPSBuYW1lZEZsb3cuY29u
dGVudEVsZW1lbnRzKCk7Ci0KLSAgICBmb3IgKGF1dG8gaXRlciA9IGNvbnRlbnRFbGVtZW50cy5i
ZWdpbigpLCBlbmQgPSBjb250ZW50RWxlbWVudHMuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
IHsKLSAgICAgICAgY29uc3QgRWxlbWVudCogZWxlbWVudCA9ICppdGVyOwotICAgICAgICAvLyBU
aGUgbGlzdCBvZiBjb250ZW50IG5vZGVzIGNvbnRhaW5zIGFsc28gdGhlIG5vZGVzIHdpdGggZGlz
cGxheTpub25lLgotICAgICAgICBpZiAoIWVsZW1lbnQtPnJlbmRlcmVyKCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICBSZW5kZXJFbGVtZW50KiBvYmplY3QgPSBlbGVtZW50LT5y
ZW5kZXJlcigpOwotICAgICAgICAvLyBJZiB0aGUgY29udGVudCBub2RlIGRvZXMgbm90IGZsb3cg
YW55IG9mIGl0cyBjaGlsZHJlbiBpbiB0aGlzIHJlZ2lvbiwKLSAgICAgICAgLy8gd2UgZG8gbm90
IGNvbXB1dGUgYW55IHN0eWxlIGZvciB0aGVtIGluIHRoaXMgcmVnaW9uLgotICAgICAgICBpZiAo
IWZsb3dUaHJlYWQoKS0+b2JqZWN0SW5GbG93UmVnaW9uKG9iamVjdCwgdGhpcykpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICAvLyBJZiB0aGUgb2JqZWN0IGhhcyBzdHlsZSBpbiBy
ZWdpb24sIHVzZSB0aGF0IGluc3RlYWQgb2YgY29tcHV0aW5nIGEgbmV3IG9uZS4KLSAgICAgICAg
YXV0byBpdCA9IG1fcmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUuZmluZChvYmplY3QpOwotICAgICAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IG9iamVjdFN0eWxlSW5SZWdpb247Ci0gICAgICAgIGJvb2wg
b2JqZWN0UmVnaW9uU3R5bGVDYWNoZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKGl0ICE9IG1fcmVu
ZGVyT2JqZWN0UmVnaW9uU3R5bGUuZW5kKCkpIHsKLSAgICAgICAgICAgIG9iamVjdFN0eWxlSW5S
ZWdpb24gPSBpdC0+dmFsdWUuc3R5bGU7Ci0gICAgICAgICAgICBBU1NFUlQoaXQtPnZhbHVlLmNh
Y2hlZCk7Ci0gICAgICAgICAgICBvYmplY3RSZWdpb25TdHlsZUNhY2hlZCA9IHRydWU7Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgb2JqZWN0U3R5bGVJblJlZ2lvbiA9IGNvbXB1dGVTdHls
ZUluUmVnaW9uKG9iamVjdCk7Ci0KLSAgICAgICAgc2V0T2JqZWN0U3R5bGVJblJlZ2lvbihvYmpl
Y3QsIG9iamVjdFN0eWxlSW5SZWdpb24sIG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVkKTsKLQotICAg
ICAgICBjb21wdXRlQ2hpbGRyZW5TdHlsZUluUmVnaW9uKG9iamVjdCk7Ci0gICAgfQotfQotCi12
b2lkIFJlbmRlclJlZ2lvbjo6cmVzdG9yZVJlZ2lvbk9iamVjdHNPcmlnaW5hbFN0eWxlKCkKLXsK
LSAgICBpZiAoIWhhc0N1c3RvbVJlZ2lvblN0eWxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFJlbmRlck9iamVjdFJlZ2lvblN0eWxlTWFwIHRlbXA7Ci0gICAgZm9yIChhdXRvIGl0ZXIgPSBt
X3JlbmRlck9iamVjdFJlZ2lvblN0eWxlLmJlZ2luKCksIGVuZCA9IG1fcmVuZGVyT2JqZWN0UmVn
aW9uU3R5bGUuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgUmVuZGVyT2Jq
ZWN0KiBvYmplY3QgPSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGl0ZXItPmtleSk7Ci0gICAg
ICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gb2JqZWN0UmVnaW9uU3R5bGUgPSAmb2JqZWN0LT5zdHls
ZSgpOwotICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IG9iamVjdE9yaWdpbmFsU3R5bGUgPSBp
dGVyLT52YWx1ZS5zdHlsZTsKLSAgICAgICAgaWYgKG9iamVjdC0+aXNSZW5kZXJFbGVtZW50KCkp
Ci0gICAgICAgICAgICB0b1JlbmRlckVsZW1lbnQob2JqZWN0KS0+c2V0U3R5bGVJbnRlcm5hbCgq
b2JqZWN0T3JpZ2luYWxTdHlsZSk7Ci0KLSAgICAgICAgYm9vbCBzaG91bGRDYWNoZVJlZ2lvblN0
eWxlID0gaXRlci0+dmFsdWUuY2FjaGVkOwotICAgICAgICBpZiAoIXNob3VsZENhY2hlUmVnaW9u
U3R5bGUpIHsKLSAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgd2Ugc2hvdWxkIGNhY2hlIHRo
ZSBjb21wdXRlZCBzdHlsZSBpbiByZWdpb24uCi0gICAgICAgICAgICB1bnNpZ25lZCBjaGFuZ2Vk
Q29udGV4dFNlbnNpdGl2ZVByb3BlcnRpZXMgPSBDb250ZXh0U2Vuc2l0aXZlUHJvcGVydHlOb25l
OwotICAgICAgICAgICAgU3R5bGVEaWZmZXJlbmNlIHN0eWxlRGlmZiA9IG9iamVjdE9yaWdpbmFs
U3R5bGUtPmRpZmYob2JqZWN0UmVnaW9uU3R5bGUuZ2V0KCksIGNoYW5nZWRDb250ZXh0U2Vuc2l0
aXZlUHJvcGVydGllcyk7Ci0gICAgICAgICAgICBpZiAoc3R5bGVEaWZmIDwgU3R5bGVEaWZmZXJl
bmNlTGF5b3V0UG9zaXRpb25lZE1vdmVtZW50T25seSkKLSAgICAgICAgICAgICAgICBzaG91bGRD
YWNoZVJlZ2lvblN0eWxlID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoc2hvdWxkQ2Fj
aGVSZWdpb25TdHlsZSkgewotICAgICAgICAgICAgT2JqZWN0UmVnaW9uU3R5bGVJbmZvIHN0eWxl
SW5mbzsKLSAgICAgICAgICAgIHN0eWxlSW5mby5zdHlsZSA9IG9iamVjdFJlZ2lvblN0eWxlOwot
ICAgICAgICAgICAgc3R5bGVJbmZvLmNhY2hlZCA9IHRydWU7Ci0gICAgICAgICAgICB0ZW1wLnNl
dChvYmplY3QsIHN0eWxlSW5mbyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX3JlbmRlck9i
amVjdFJlZ2lvblN0eWxlLnN3YXAodGVtcCk7Ci19Ci0KIHZvaWQgUmVuZGVyUmVnaW9uOjppbnNl
cnRlZEludG9UcmVlKCkKIHsKICAgICBSZW5kZXJCbG9ja0Zsb3c6Omluc2VydGVkSW50b1RyZWUo
KTsKQEAgLTYyMyw3OSArNTA0LDYgQEAgdm9pZCBSZW5kZXJSZWdpb246OndpbGxCZVJlbW92ZWRG
cm9tVHJlZSgpCiAgICAgZGV0YWNoUmVnaW9uKCk7CiB9CiAKLVBhc3NSZWZQdHI8UmVuZGVyU3R5
bGU+IFJlbmRlclJlZ2lvbjo6Y29tcHV0ZVN0eWxlSW5SZWdpb24oY29uc3QgUmVuZGVyT2JqZWN0
KiBvYmplY3QpCi17Ci0gICAgQVNTRVJUKG9iamVjdCk7Ci0gICAgQVNTRVJUKCFvYmplY3QtPmlz
QW5vbnltb3VzKCkpOwotICAgIEFTU0VSVChvYmplY3QtPm5vZGUoKSAmJiBvYmplY3QtPm5vZGUo
KS0+aXNFbGVtZW50Tm9kZSgpKTsKLQotICAgIC8vIEZJWE1FOiBSZWdpb24gc3R5bGluZyBmYWls
cyBmb3IgcHNldWRvLWVsZW1lbnRzIGJlY2F1c2UgdGhlIHJlbmRlcmVycyBkb24ndCBoYXZlIGEg
bm9kZS4KLSAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG9iamVjdC0+bm9kZSgpKTsK
LSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHJlbmRlck9iamVjdFJlZ2lvblN0eWxlID0gb2JqZWN0
LT52aWV3KCkuZG9jdW1lbnQoKS5lbnN1cmVTdHlsZVJlc29sdmVyKCkuc3R5bGVGb3JFbGVtZW50
KGVsZW1lbnQsIDAsIERpc2FsbG93U3R5bGVTaGFyaW5nLCBNYXRjaEFsbFJ1bGVzLCB0aGlzKTsK
LQotICAgIHJldHVybiByZW5kZXJPYmplY3RSZWdpb25TdHlsZS5yZWxlYXNlKCk7Ci19Ci0KLXZv
aWQgUmVuZGVyUmVnaW9uOjpjb21wdXRlQ2hpbGRyZW5TdHlsZUluUmVnaW9uKGNvbnN0IFJlbmRl
ckVsZW1lbnQqIG9iamVjdCkKLXsKLSAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBvYmpl
Y3QtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsK
LQotICAgICAgICBhdXRvIGl0ID0gbV9yZW5kZXJPYmplY3RSZWdpb25TdHlsZS5maW5kKGNoaWxk
KTsKLQotICAgICAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGNoaWxkU3R5bGVJblJlZ2lvbjsKLSAg
ICAgICAgYm9vbCBvYmplY3RSZWdpb25TdHlsZUNhY2hlZCA9IGZhbHNlOwotICAgICAgICBpZiAo
aXQgIT0gbV9yZW5kZXJPYmplY3RSZWdpb25TdHlsZS5lbmQoKSkgewotICAgICAgICAgICAgY2hp
bGRTdHlsZUluUmVnaW9uID0gaXQtPnZhbHVlLnN0eWxlOwotICAgICAgICAgICAgb2JqZWN0UmVn
aW9uU3R5bGVDYWNoZWQgPSB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYg
KGNoaWxkLT5pc0Fub255bW91cygpIHx8IGNoaWxkLT5pc0luRmxvd1JlbmRlckZsb3dUaHJlYWQo
KSkKLSAgICAgICAgICAgICAgICBjaGlsZFN0eWxlSW5SZWdpb24gPSBSZW5kZXJTdHlsZTo6Y3Jl
YXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheSgmb2JqZWN0LT5zdHlsZSgpLCBjaGlsZC0+c3R5
bGUoKS5kaXNwbGF5KCkpOwotICAgICAgICAgICAgZWxzZSBpZiAoY2hpbGQtPmlzVGV4dCgpKQot
ICAgICAgICAgICAgICAgIGNoaWxkU3R5bGVJblJlZ2lvbiA9IFJlbmRlclN0eWxlOjpjbG9uZSgm
b2JqZWN0LT5zdHlsZSgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjaGls
ZFN0eWxlSW5SZWdpb24gPSBjb21wdXRlU3R5bGVJblJlZ2lvbihjaGlsZCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBzZXRPYmplY3RTdHlsZUluUmVnaW9uKGNoaWxkLCBjaGlsZFN0eWxlSW5SZWdp
b24sIG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVkKTsKLQotICAgICAgICBpZiAoY2hpbGQtPmlzUmVu
ZGVyRWxlbWVudCgpKQotICAgICAgICAgICAgY29tcHV0ZUNoaWxkcmVuU3R5bGVJblJlZ2lvbih0
b1JlbmRlckVsZW1lbnQoY2hpbGQpKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyUmVnaW9uOjpz
ZXRPYmplY3RTdHlsZUluUmVnaW9uKFJlbmRlck9iamVjdCogb2JqZWN0LCBQYXNzUmVmUHRyPFJl
bmRlclN0eWxlPiBzdHlsZUluUmVnaW9uLCBib29sIG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVkKQot
ewotICAgIEFTU0VSVChvYmplY3QtPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSk7Ci0KLSAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IG9iamVjdE9yaWdpbmFsU3R5bGUgPSAmb2JqZWN0LT5zdHls
ZSgpOwotICAgIGlmIChvYmplY3QtPmlzUmVuZGVyRWxlbWVudCgpKQotICAgICAgICB0b1JlbmRl
ckVsZW1lbnQob2JqZWN0KS0+c2V0U3R5bGVJbnRlcm5hbCgqc3R5bGVJblJlZ2lvbik7Ci0KLSAg
ICBpZiAob2JqZWN0LT5pc0JveE1vZGVsT2JqZWN0KCkgJiYgIW9iamVjdC0+aGFzQm94RGVjb3Jh
dGlvbnMoKSkgewotICAgICAgICBib29sIGhhc0JveERlY29yYXRpb25zID0gb2JqZWN0LT5pc1Rh
YmxlQ2VsbCgpCi0gICAgICAgIHx8IG9iamVjdC0+c3R5bGUoKS5oYXNCYWNrZ3JvdW5kKCkKLSAg
ICAgICAgfHwgb2JqZWN0LT5zdHlsZSgpLmhhc0JvcmRlcigpCi0gICAgICAgIHx8IG9iamVjdC0+
c3R5bGUoKS5oYXNBcHBlYXJhbmNlKCkKLSAgICAgICAgfHwgb2JqZWN0LT5zdHlsZSgpLmJveFNo
YWRvdygpOwotICAgICAgICBvYmplY3QtPnNldEhhc0JveERlY29yYXRpb25zKGhhc0JveERlY29y
YXRpb25zKTsKLSAgICB9Ci0KLSAgICBPYmplY3RSZWdpb25TdHlsZUluZm8gc3R5bGVJbmZvOwot
ICAgIHN0eWxlSW5mby5zdHlsZSA9IG9iamVjdE9yaWdpbmFsU3R5bGU7Ci0gICAgc3R5bGVJbmZv
LmNhY2hlZCA9IG9iamVjdFJlZ2lvblN0eWxlQ2FjaGVkOwotICAgIG1fcmVuZGVyT2JqZWN0UmVn
aW9uU3R5bGUuc2V0KG9iamVjdCwgc3R5bGVJbmZvKTsKLX0KLQotdm9pZCBSZW5kZXJSZWdpb246
OmNsZWFyT2JqZWN0U3R5bGVJblJlZ2lvbihjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKLXsK
LSAgICBBU1NFUlQob2JqZWN0KTsKLSAgICBtX3JlbmRlck9iamVjdFJlZ2lvblN0eWxlLnJlbW92
ZShvYmplY3QpOwotCi0gICAgLy8gQ2xlYXIgdGhlIHN0eWxlIGZvciB0aGUgY2hpbGRyZW4gb2Yg
dGhpcyBvYmplY3QuCi0gICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gb2JqZWN0LT5maXJz
dENoaWxkU2xvdygpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAg
ICAgY2xlYXJPYmplY3RTdHlsZUluUmVnaW9uKGNoaWxkKTsKLX0KLQogdm9pZCBSZW5kZXJSZWdp
b246OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2ljYWxX
aWR0aCwgTGF5b3V0VW5pdCYgbWF4TG9naWNhbFdpZHRoKSBjb25zdAogewogICAgIGlmICghaXNW
YWxpZCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVn
aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmgKaW5kZXggMTc2
ODY0NjNiYjEwZjBlYzU2MDc2MzgyYThhZjkxZjIwOTQyNjExZS4uNTBiYjU3YTRmZTlmYmQ0NzNk
NTFmNWE1NDdiMzZmMWMyMGZiNWRmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJlZ2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJS
ZWdpb24uaApAQCAtNjcsOSArNjcsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1ZhbGlkKCkgY29u
c3QgeyByZXR1cm4gbV9pc1ZhbGlkOyB9CiAgICAgdm9pZCBzZXRJc1ZhbGlkKGJvb2wgdmFsaWQp
IHsgbV9pc1ZhbGlkID0gdmFsaWQ7IH0KIAotICAgIGJvb2wgaGFzQ3VzdG9tUmVnaW9uU3R5bGUo
KSBjb25zdCB7IHJldHVybiBtX2hhc0N1c3RvbVJlZ2lvblN0eWxlOyB9Ci0gICAgdm9pZCBzZXRI
YXNDdXN0b21SZWdpb25TdHlsZShib29sIGhhc0N1c3RvbVJlZ2lvblN0eWxlKSB7IG1faGFzQ3Vz
dG9tUmVnaW9uU3R5bGUgPSBoYXNDdXN0b21SZWdpb25TdHlsZTsgfQotCiAgICAgUmVuZGVyQm94
UmVnaW9uSW5mbyogcmVuZGVyQm94UmVnaW9uSW5mbyhjb25zdCBSZW5kZXJCb3gqKSBjb25zdDsK
ICAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiBzZXRSZW5kZXJCb3hSZWdpb25JbmZvKGNvbnN0IFJl
bmRlckJveCosIExheW91dFVuaXQgbG9naWNhbExlZnRJbnNldCwgTGF5b3V0VW5pdCBsb2dpY2Fs
UmlnaHRJbnNldCwKICAgICAgICAgYm9vbCBjb250YWluaW5nQmxvY2tDaGFpbklzSW5zZXQpOwpA
QCAtODEsOCArNzgsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0ZpcnN0UmVnaW9uKCkgY29uc3Q7
CiAgICAgYm9vbCBpc0xhc3RSZWdpb24oKSBjb25zdDsKIAotICAgIHZvaWQgY2xlYXJPYmplY3RT
dHlsZUluUmVnaW9uKGNvbnN0IFJlbmRlck9iamVjdCopOwotCiAgICAgUmVnaW9uT3ZlcnNldFN0
YXRlIHJlZ2lvbk92ZXJzZXRTdGF0ZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0UmVnaW9uT3ZlcnNl
dFN0YXRlKFJlZ2lvbk92ZXJzZXRTdGF0ZSk7CiAKQEAgLTE2MCw5ICsxNTUsNiBAQCBwcm90ZWN0
ZWQ6CiAKICAgICBSZW5kZXJPdmVyZmxvdyogZW5zdXJlT3ZlcmZsb3dGb3JCb3goY29uc3QgUmVu
ZGVyQm94Kik7CiAKLSAgICB2b2lkIHNldFJlZ2lvbk9iamVjdHNSZWdpb25TdHlsZSgpOwotICAg
IHZvaWQgcmVzdG9yZVJlZ2lvbk9iamVjdHNPcmlnaW5hbFN0eWxlKCk7Ci0KICAgICB2aXJ0dWFs
IHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKSBPVkVSUklERTsKICAgICB2aXJ0
dWFsIHZvaWQgY29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYgbWluTG9n
aWNhbFdpZHRoLCBMYXlvdXRVbml0JiBtYXhMb2dpY2FsV2lkdGgpIGNvbnN0IE9WRVJSSURFOwog
CkBAIC0xODYsMTUgKzE3OCw5IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxCZVJl
bW92ZWRGcm9tVHJlZSgpIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCB2b2lkIGxheW91dEJsb2Nr
KGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCA9IDAp
IE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBwYWludE9iamVjdChQYWludEluZm8mLCBjb25z
dCBMYXlvdXRQb2ludCYpIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCB2b2lkIGluc3RhbGxGbG93
VGhyZWFkKCk7CiAKLSAgICBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBjb21wdXRlU3R5bGVJblJl
Z2lvbihjb25zdCBSZW5kZXJPYmplY3QqKTsKLSAgICB2b2lkIGNvbXB1dGVDaGlsZHJlblN0eWxl
SW5SZWdpb24oY29uc3QgUmVuZGVyRWxlbWVudCopOwotICAgIHZvaWQgc2V0T2JqZWN0U3R5bGVJ
blJlZ2lvbihSZW5kZXJPYmplY3QqLCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiwgYm9vbCBvYmpl
Y3RSZWdpb25TdHlsZUNhY2hlZCk7Ci0KLSAgICB2b2lkIGNoZWNrUmVnaW9uU3R5bGUoKTsKICAg
ICB2b2lkIHVwZGF0ZVJlZ2lvbkhhc0F1dG9Mb2dpY2FsSGVpZ2h0RmxhZygpOwogCiAgICAgdm9p
ZCBpbmNyZW1lbnRBdXRvTG9naWNhbEhlaWdodENvdW50KCk7CkBAIC0yMTksMjEgKzIwNSw3IEBA
IHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IFJlbmRlckJveCosIE93blB0cjxS
ZW5kZXJCb3hSZWdpb25JbmZvPj4gUmVuZGVyQm94UmVnaW9uSW5mb01hcDsKICAgICBSZW5kZXJC
b3hSZWdpb25JbmZvTWFwIG1fcmVuZGVyQm94UmVnaW9uSW5mbzsKIAotICAgIHN0cnVjdCBPYmpl
Y3RSZWdpb25TdHlsZUluZm8gewotICAgICAgICAvLyBVc2VkIHRvIHN0b3JlIHRoZSBvcmlnaW5h
bCBzdHlsZSBvZiB0aGUgb2JqZWN0IGluIHJlZ2lvbgotICAgICAgICAvLyBzbyB0aGF0IHRoZSBv
cmlnaW5hbCBzdHlsZSBpcyBwcm9wZXJseSByZXN0b3JlZCBhZnRlciBwYWludC4KLSAgICAgICAg
Ly8gQWxzbyB1c2VkIHRvIHN0b3JlIGNvbXB1dGVkIHN0eWxlIG9mIHRoZSBvYmplY3QgaW4gcmVn
aW9uIGJldHdlZW4KLSAgICAgICAgLy8gcmVnaW9uIHBhaW50aW5ncywgc28gdGhhdCB0aGUgc3R5
bGUgaW4gcmVnaW9uIGlzIGNvbXB1dGVkIG9ubHkKLSAgICAgICAgLy8gd2hlbiBuZWNlc3Nhcnku
Ci0gICAgICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGU7Ci0gICAgICAgIC8vIFRydWUgaWYg
dGhlIGNvbXB1dGVkIHN0eWxlIGluIHJlZ2lvbiBpcyBjYWNoZWQuCi0gICAgICAgIGJvb2wgY2Fj
aGVkOwotICAgIH07Ci0gICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IFJlbmRlck9iamVjdCosIE9i
amVjdFJlZ2lvblN0eWxlSW5mbyA+IFJlbmRlck9iamVjdFJlZ2lvblN0eWxlTWFwOwotICAgIFJl
bmRlck9iamVjdFJlZ2lvblN0eWxlTWFwIG1fcmVuZGVyT2JqZWN0UmVnaW9uU3R5bGU7Ci0KICAg
ICBib29sIG1faXNWYWxpZCA6IDE7Ci0gICAgYm9vbCBtX2hhc0N1c3RvbVJlZ2lvblN0eWxlIDog
MTsKICAgICBib29sIG1faGFzQXV0b0xvZ2ljYWxIZWlnaHQgOiAxOwogICAgIGJvb2wgbV9oYXND
b21wdXRlZEF1dG9IZWlnaHQgOiAxOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVHJlZUFzVGV4dC5jcHAKaW5kZXggOGY0ODRmNzk0NGIwNTJkN2UwNThmNzI3M2YwNWU0OTQ3
ZTgyNGIyMi4uZWQ0MDFmZDI3ZTJiYjAwN2I0MjE0MTg1ZmVhODIxOGVhNGVhNTI3OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcApAQCAtNDYsNiAr
NDYsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlckxp
c3RJdGVtLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgorI2luY2x1ZGUgIlJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93VGhyZWFkLmgi
CiAjaW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgi
CkBAIC02NTcsMTkgKzY1OCwxOSBAQCBzdGF0aWMgdm9pZCB3cml0ZShUZXh0U3RyZWFtJiB0cywg
UmVuZGVyTGF5ZXImIGwsCiBzdGF0aWMgdm9pZCB3cml0ZVJlbmRlclJlZ2lvbkxpc3QoY29uc3Qg
UmVuZGVyUmVnaW9uTGlzdCYgZmxvd1RocmVhZFJlZ2lvbkxpc3QsIFRleHRTdHJlYW0mIHRzLCBp
bnQgaW5kZW50KQogewogICAgIGZvciAoUmVuZGVyUmVnaW9uTGlzdDo6Y29uc3RfaXRlcmF0b3Ig
aXRSUiA9IGZsb3dUaHJlYWRSZWdpb25MaXN0LmJlZ2luKCk7IGl0UlIgIT0gZmxvd1RocmVhZFJl
Z2lvbkxpc3QuZW5kKCk7ICsraXRSUikgewotICAgICAgICBSZW5kZXJSZWdpb24qIHJlbmRlclJl
Z2lvbiA9ICgqaXRSUik7CisgICAgICAgIFJlbmRlclJlZ2lvbiogcmVuZGVyUmVnaW9uID0gKml0
UlI7CiAKICAgICAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7CiAgICAgICAgIHRzIDw8IHN0
YXRpY19jYXN0PGNvbnN0IFJlbmRlck9iamVjdCo+KHJlbmRlclJlZ2lvbiktPnJlbmRlck5hbWUo
KTsKIAogICAgICAgICBFbGVtZW50KiBnZW5lcmF0aW5nRWxlbWVudCA9IHJlbmRlclJlZ2lvbi0+
Z2VuZXJhdGluZ0VsZW1lbnQoKTsKICAgICAgICAgaWYgKGdlbmVyYXRpbmdFbGVtZW50KSB7Ci0g
ICAgICAgICAgICBpZiAocmVuZGVyUmVnaW9uLT5oYXNDdXN0b21SZWdpb25TdHlsZSgpKQorICAg
ICAgICAgICAgYm9vbCBpc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50ID0gcmVuZGVyUmVnaW9uLT5p
c1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7CisgICAgICAgICAgICBpZiAoaXNSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudCAmJiB0b1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KHJlbmRlclJlZ2lvbikt
Pmhhc0N1c3RvbVJlZ2lvblN0eWxlKCkpCiAgICAgICAgICAgICAgICAgdHMgPDwgIiByZWdpb24g
c3R5bGU6IDEiOwogICAgICAgICAgICAgaWYgKHJlbmRlclJlZ2lvbi0+aGFzQXV0b0xvZ2ljYWxI
ZWlnaHQoKSkKICAgICAgICAgICAgICAgICB0cyA8PCAiIGhhc0F1dG9Mb2dpY2FsSGVpZ2h0IjsK
IAotICAgICAgICAgICAgYm9vbCBpc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50ID0gcmVuZGVyUmVn
aW9uLT5pc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7CiAgICAgICAgICAgICBpZiAoaXNSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCkKICAgICAgICAgICAgICAgICB0cyA8PCAiIChhbm9ueW1vdXMg
Y2hpbGQgb2YiOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>