<?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>144196</bug_id>
          
          <creation_ts>2015-04-25 14:21:31 -0700</creation_ts>
          <short_desc>Modernize animations code</short_desc>
          <delta_ts>2015-04-26 13:39:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>dstockwell</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1088580</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-04-25 14:21:31 -0700</bug_when>
    <thetext>Modernize animations code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088581</commentid>
    <comment_count>1</comment_count>
      <attachid>251648</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-04-25 14:24:40 -0700</bug_when>
    <thetext>Created attachment 251648
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088582</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-25 14:27:16 -0700</bug_when>
    <thetext>Attachment 251648 did not pass style-queue:


ERROR: Source/WebCore/page/animation/CompositeAnimation.cpp:89:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088613</commentid>
    <comment_count>3</comment_count>
      <attachid>251648</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-04-25 17:37:08 -0700</bug_when>
    <thetext>Comment on attachment 251648
Patch

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

&gt; Source/WebCore/page/animation/AnimationBase.cpp:73
&gt; +AnimationBase::AnimationBase(const Animation&amp; animation, RenderElement* renderer, CompositeAnimation* compositeAnimation)

Can either of those be references instead of pointers?

&gt; Source/WebCore/page/animation/AnimationBase.cpp:76
&gt; +    , m_animation(const_cast&lt;Animation&amp;&gt;(animation))

If we are keeping a reference, maybe we should be taking a reference, not a const reference.

&gt; Source/WebCore/page/animation/AnimationBase.h:53
&gt; +    WTF_MAKE_FAST_ALLOCATED;

What changed here? Are we now allocating these on the heap for the first time? Or were we using the wrong alloc?

&gt; Source/WebCore/page/animation/AnimationBase.h:150
&gt; +    void setAnimation(const Animation&amp; animation) { m_animation = const_cast&lt;Animation&amp;&gt;(animation); }

I don’t understand why this takes a const Animation&amp; and not an Animation&amp;.

&gt; Source/WebCore/page/animation/CompositeAnimation.cpp:66
&gt; +        for (auto&amp; it : m_transitions) {
&gt; +            ImplicitAnimation* transition = it.value.get();

This should be:

    for (auto&amp; transition : m_transitions.values()) {

&gt; Source/WebCore/page/animation/CompositeAnimation.cpp:67
&gt; +            animationController().animationWillBeRemoved(transition);

This will need to do transition.get(), but otherwise should be fine. Of course, animationWillBeRemoved should take a reference, and then it would be *transition.

&gt; Source/WebCore/page/animation/CompositeAnimation.cpp:74
&gt; +        for (auto&amp; it : m_keyframeAnimations) {
&gt; +            KeyframeAnimation* anim = it.value.get();

for (auto* animation : m_keyframeAnimations.values() {

&gt; Source/WebCore/page/animation/CompositeAnimation.cpp:89
&gt; +    for (auto&amp; it : m_transitions)

for (auto&amp; transition : m_transitions.values())

&gt; Source/WebCore/page/animation/CompositeAnimation.cpp:187
&gt; +    for (auto&amp; it : m_transitions) {
&gt; +        ImplicitAnimation* anim = it.value.get();

for (auto&amp; animation : m_transitions.values()) {

&gt; Source/WebCore/page/animation/CompositeAnimation.cpp:211
&gt; +        for (auto&amp; it : m_keyframeAnimations) {

for (auto&amp; animation : m_keyframeAnimations.values()) {

&gt; Source/WebCore/page/animation/CompositeAnimation.cpp:217
&gt; +        for (auto&amp; it : m_keyframeAnimations)

for (auto&amp; animation : m_keyframeAnimations.values())

&gt; Source/WebCore/page/animation/CompositeAnimation.cpp:290
&gt; +    for (auto&amp; it : m_keyframeAnimations) {
&gt; +        KeyframeAnimation* keyframeAnim = it.value.get();

for (auto&amp; animation : m_keyframeAnimations.values()) {

&gt; Source/WebCore/page/animation/CompositeAnimation.cpp:317
&gt; +            for (auto&amp; it : m_transitions) {

for (auto&amp; animation : m_transitions.values()) {

&gt; Source/WebCore/page/animation/CompositeAnimation.cpp:326
&gt; +    for (auto&amp; it : m_keyframeAnimationOrderMap) {

The string here should be named something other than &quot;it&quot;. It’s not an iterator. Its type is AtomicStringImpl*, so I think maybe it’s animationName?

&gt; Source/WebCore/page/animation/CompositeAnimation.cpp:340
&gt; +    for (auto&amp; it : m_transitions) {

for (auto&amp; animation : m_transitions.values()) {

&gt; Source/WebCore/page/animation/CompositeAnimation.cpp:364
&gt; +        for (auto&amp; it : m_transitions) {
&gt; +            ImplicitAnimation* transition = it.value.get();

for (auto&amp; animation : m_transitions.values()) {

&gt; Source/WebCore/page/animation/CompositeAnimation.cpp:396
&gt; +        for (auto&amp; it : m_keyframeAnimations) {
&gt; +            RefPtr&lt;KeyframeAnimation&gt; anim = it.value;

for (auto&amp; animation : m_keyframeAnimations.values()) {

&gt; Source/WebCore/page/animation/CompositeAnimation.cpp:451
&gt; +        for (auto&amp; it : m_keyframeAnimations) {
&gt; +            if (KeyframeAnimation* anim = it.value.get())

for (auto&amp; animation : m_keyframeAnimations.values()) {

&gt; Source/WebCore/page/animation/CompositeAnimation.cpp:474
&gt; +        for (auto&amp; it : m_keyframeAnimations) {
&gt; +            KeyframeAnimation* anim = it.value.get();

for (auto&amp; animation : m_keyframeAnimations.values()) {for (auto&amp; animation : m_keyframeAnimations.values()) {

&gt; Source/WebCore/page/animation/CompositeAnimation.cpp:482
&gt; +        for (auto&amp; it : m_transitions) {
&gt; +            ImplicitAnimation* anim = it.value.get();

for (auto&amp; animation : m_transitions.values()) {

&gt; Source/WebCore/page/animation/CompositeAnimation.cpp:493
&gt; +        for (auto&amp; it : m_transitions) {
&gt; +            ImplicitAnimation* anim = it.value.get();

for (auto&amp; animation : m_transitions.values()) {

&gt; Source/WebCore/page/animation/CompositeAnimation.cpp:516
&gt; +        for (auto&amp; it : m_keyframeAnimations) {
&gt; +            KeyframeAnimation* anim = it.value.get();

for (auto&amp; animation : m_transitions.values()) {

&gt; Source/WebCore/page/animation/CompositeAnimation.cpp:524
&gt; +        for (auto&amp; it : m_transitions) {
&gt; +            ImplicitAnimation* anim = it.value.get();

for (auto&amp; animation : m_transitions.values()) {

&gt; Source/WebCore/page/animation/CompositeAnimation.cpp:585
&gt; +        for (auto&amp; it : m_keyframeAnimations) {
&gt; +            KeyframeAnimation* anim = it.value.get();

for (auto&amp; animation : m_keyframeAnimations.values()) {

&gt; Source/WebCore/page/animation/CompositeAnimation.cpp:593
&gt; +        for (auto&amp; it : m_transitions) {
&gt; +            ImplicitAnimation* anim = it.value.get();

for (auto&amp; animation : m_transitions.values()) {

&gt; Source/WebCore/page/animation/KeyframeAnimation.cpp:241
&gt; +        return downcast&lt;RenderBoxModelObject&gt;(*m_object).startAnimation(timeOffset, &amp;m_animation.get(), m_keyframes);

Not sure about the types here, but I think this can use m_animation.ptr() instead of &amp;m_animation.get().

&gt; Source/WebCore/rendering/RenderLayer.cpp:3753
&gt; +    for (auto&amp; it : overlapTestRequests)

for (auto&amp; widget : overlapTestRequests.keys())

&gt; Source/WebCore/rendering/RenderLayer.cpp:3823
&gt; +    for (auto&amp; it : overlapTestRequests) {

Probably should name this &quot;request&quot; rather than &quot;it&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088781</commentid>
    <comment_count>4</comment_count>
      <attachid>251699</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-04-26 11:08:54 -0700</bug_when>
    <thetext>Created attachment 251699
For EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088782</commentid>
    <comment_count>5</comment_count>
      <attachid>251699</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-04-26 11:09:25 -0700</bug_when>
    <thetext>Comment on attachment 251699
For EWS

Bring Darin review forward.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088783</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-26 11:11:33 -0700</bug_when>
    <thetext>Attachment 251699 did not pass style-queue:


ERROR: Source/WebCore/page/animation/CompositeAnimation.cpp:87:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088826</commentid>
    <comment_count>7</comment_count>
      <attachid>251699</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-26 13:39:33 -0700</bug_when>
    <thetext>Comment on attachment 251699
For EWS

Clearing flags on attachment: 251699

Committed r183364: &lt;http://trac.webkit.org/changeset/183364&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1088827</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-26 13:39:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251648</attachid>
            <date>2015-04-25 14:24:40 -0700</date>
            <delta_ts>2015-04-26 11:08:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-144196-20150425142333.patch</filename>
            <type>text/plain</type>
            <size>57107</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgzMzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWM3ZTRkMDhhODNiYjg0
ZWExYWU3ZjZkN2YyZGU4NTlkNjVjMTU0OC4uMTQwMDUxMzY5OTBlYWFhNjVhYzM1OGI4YmZhMDFj
MmYwYWExYTQ4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4IEBACisyMDE1LTA0LTI1ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybml6ZSBh
bmltYXRpb25zIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0NDE5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgR2VuZXJhbCBjbGVhbnVwIGluIGFuaW1hdGlvbi1yZWxhdGVkIGNvZGUu
CisgICAgICAgIAorICAgICAgICBVc2UgQysrIHJlZmVyZW5jZXMgd2hlcmUgcG9zc2libGUuIFVz
ZSBtb2Rlcm4gbG9vcHMuIE1ha2UgY2xhc3NlcyBmYXN0LWFsbG9jYXRlZC4KKyAgICAgICAgVXNl
IEMrKzExIG1lbWJlciBpbml0aWFsaXphdGlvbi4gT3JkZXIgbWVtYmVyIHZhcmlhYmxlcyB0byBv
cHRpbWl6ZSBwYWNraW5nLgorICAgICAgICAKKyAgICAgICAgTm8gYmVoYXZpb3IgY2hhbmdlLgor
CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBbmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFuaW1hdGlvbkJhc2U6OmFuaW1hdGlvbnNNYXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpBbmlt
YXRpb25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0
aW9uQmFzZTo6ZmlyZUFuaW1hdGlvbkV2ZW50c0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OkFuaW1hdGlvbkJhc2U6OmJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSk6CisgICAgICAgIChXZWJD
b3JlOjpBbmltYXRpb25CYXNlOjpnZXRFbGFwc2VkVGltZSk6CisgICAgICAgICogcGFnZS9hbmlt
YXRpb24vQW5pbWF0aW9uQmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6
YW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkJhc2U6OnNldEFuaW1hdGlv
bik6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6ZW5zdXJlQ29tcG9z
aXRlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOjphZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UpOgorICAgICAg
ICAqIHBhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDb21wb3NpdGVBbmltYXRpb246OkNvbXBvc2l0ZUFuaW1hdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OmNsZWFyUmVuZGVyZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW9ucyk6CisgICAgICAgIChX
ZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGUpOgorICAgICAgICAo
V2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpnZXRBbmltYXRlZFN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6dGltZVRvTmV4dFNlcnZpY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpnZXRBbmltYXRpb25Gb3JQcm9wZXJ0eSk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnN1c3BlbmRBbmltYXRpb25z
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6cmVzdW1lQW5pbWF0aW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246Om92ZXJyaWRlSW1wbGlj
aXRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6cmVz
dW1lT3ZlcnJpZGRlbkltcGxpY2l0QW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDb21w
b3NpdGVBbmltYXRpb246OmlzQW5pbWF0aW5nUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRlQW5pbWF0aW9uOjpwYXVzZVRyYW5zaXRpb25BdFRpbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMpOgorICAg
ICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oOgorICAgICAgICAoV2Vi
Q29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29t
cG9zaXRlQW5pbWF0aW9uOjphbmltYXRpb25Db250cm9sbGVyKToKKyAgICAgICAgKiBwYWdlL2Fu
aW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbXBsaWNp
dEFuaW1hdGlvbjo6SW1wbGljaXRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1wbGlj
aXRBbmltYXRpb246OnNlbmRUcmFuc2l0aW9uRXZlbnQpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0
aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmg6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vS2V5ZnJh
bWVBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246Oktl
eWZyYW1lQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lQW5pbWF0aW9uOjph
bmltYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lQW5pbWF0aW9uOjpnZXRBbmltYXRl
ZFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lQW5pbWF0aW9uOjpjb21wdXRlRXh0
ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmlt
YXRpb246OnN0YXJ0QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lQW5pbWF0
aW9uOjpzZW5kQW5pbWF0aW9uRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmlt
YXRpb246Om92ZXJyaWRlQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpLZXlmcmFtZUFu
aW1hdGlvbjo6cmVzdW1lT3ZlcnJpZGRlbkFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
S2V5ZnJhbWVBbmltYXRpb246OnRpbWVUb05leHRTZXJ2aWNlKToKKyAgICAgICAgKiBwYWdlL2Fu
aW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2FuaW1hdGlv
bi9BbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uOjphbmltYXRpb25z
TWF0Y2gpOgorICAgICAgICAqIHBsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb24uaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXI6OnBhaW50KTogVXNlIGF1dG8mIHRvIGF2b2lkIGNvcHlpbmcgdGhlIGtleS12YWx1ZQor
ICAgICAgICBwYWlycy4KKyAgICAgICAgKFdlYkNvcmU6OnBlcmZvcm1PdmVybGFwVGVzdHMpOiBE
aXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvS2V5ZnJhbWVMaXN0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpLZXlmcmFtZUxpc3Q6OnByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6
S2V5ZnJhbWVMaXN0OjprZXlmcmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVMaXN0
OjpiZWdpblByb3BlcnRpZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVM
aXN0OjplbmRQcm9wZXJ0aWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1l
TGlzdDo6b3BlcmF0b3JbXSk6IERlbGV0ZWQuCisKIDIwMTUtMDQtMjQgIE15bGVzIEMuIE1heGZp
ZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2FdIEZvbnRQbGF0Zm9y
bURhdGEncyBlcXVhbGl0eSBjaGVjayBzaG91bGQgYWx3YXlzIHVzZSByZWZlcmVuY2UgVVJMcwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAppbmRl
eCA4ZjVmOTdlMDQyY2M5OWYwNTI4YTVlNDdjZDRjYjQxNDdlOWQxM2I0Li41YTY1NjI3NDNhMzAz
MGM2MmIxMTgzZTIwZTcxZGFjMGQwMTFhZjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcApAQCAtNzAsMTkgKzcwLDEwIEBAIHN0YXRpYyBp
bmxpbmUgZG91YmxlIHNvbHZlU3RlcHNGdW5jdGlvbihpbnQgbnVtU3RlcHMsIGJvb2wgc3RlcEF0
U3RhcnQsIGRvdWJsZSB0CiAgICAgcmV0dXJuIGZsb29yKG51bVN0ZXBzICogdCkgLyBudW1TdGVw
czsKIH0KIAotQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uQmFzZShjb25zdCBBbmltYXRpb24mIHRy
YW5zaXRpb24sIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNv
bXBvc2l0ZUFuaW1hdGlvbikKLSAgICA6IG1fYW5pbWF0aW9uU3RhdGUoQW5pbWF0aW9uU3RhdGU6
Ok5ldykKLSAgICAsIG1faXNBY2NlbGVyYXRlZChmYWxzZSkKLSAgICAsIG1fdHJhbnNmb3JtRnVu
Y3Rpb25MaXN0VmFsaWQoZmFsc2UpCi0gICAgLCBtX2ZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaChm
YWxzZSkKLSAgICAsIG1fc3RhcnRUaW1lKDApCi0gICAgLCBtX3BhdXNlVGltZSgtMSkKLSAgICAs
IG1fcmVxdWVzdGVkU3RhcnRUaW1lKDApCi0gICAgLCBtX3RvdGFsRHVyYXRpb24oLTEpCi0gICAg
LCBtX25leHRJdGVyYXRpb25EdXJhdGlvbigtMSkKLSAgICAsIG1fb2JqZWN0KHJlbmRlcmVyKQot
ICAgICwgbV9hbmltYXRpb24oY29uc3RfY2FzdDxBbmltYXRpb24qPigmdHJhbnNpdGlvbikpCitB
bmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNlKGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBS
ZW5kZXJFbGVtZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmlt
YXRpb24pCisgICAgOiBtX29iamVjdChyZW5kZXJlcikKICAgICAsIG1fY29tcG9zaXRlQW5pbWF0
aW9uKGNvbXBvc2l0ZUFuaW1hdGlvbikKKyAgICAsIG1fYW5pbWF0aW9uKGNvbnN0X2Nhc3Q8QW5p
bWF0aW9uJj4oYW5pbWF0aW9uKSkKIHsKICAgICAvLyBDb21wdXRlIHRoZSB0b3RhbCBkdXJhdGlv
bgogICAgIGlmIChtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSA+IDApCkBAIC0xMDYsOSAr
OTcsOSBAQCBib29sIEFuaW1hdGlvbkJhc2U6OnBsYXlTdGF0ZVBsYXlpbmcoKSBjb25zdAogICAg
IHJldHVybiBtX2FuaW1hdGlvbi0+cGxheVN0YXRlKCkgPT0gQW5pbVBsYXlTdGF0ZVBsYXlpbmc7
CiB9CiAKLWJvb2wgQW5pbWF0aW9uQmFzZTo6YW5pbWF0aW9uc01hdGNoKGNvbnN0IEFuaW1hdGlv
biogYW5pbSkgY29uc3QKK2Jvb2wgQW5pbWF0aW9uQmFzZTo6YW5pbWF0aW9uc01hdGNoKGNvbnN0
IEFuaW1hdGlvbiYgYW5pbWF0aW9uKSBjb25zdAogewotICAgIHJldHVybiBtX2FuaW1hdGlvbi0+
YW5pbWF0aW9uc01hdGNoKGFuaW0pOworICAgIHJldHVybiBtX2FuaW1hdGlvbi0+YW5pbWF0aW9u
c01hdGNoKGFuaW1hdGlvbik7CiB9CiAKICNpZiAhTE9HX0RJU0FCTEVECkBAIC0xNjEsNyArMTUy
LDcgQEAgdm9pZCBBbmltYXRpb25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3Rh
dGVJbnB1dCBpbnB1dCwgZG91YmxlIHBhcmFtKQogICAgIC8vIElmIHdlIGdldCBBbmltYXRpb25T
dGF0ZUlucHV0OjpSZXN0YXJ0QW5pbWF0aW9uIHRoZW4gd2UgZm9yY2UgYSBuZXcgYW5pbWF0aW9u
LCByZWdhcmRsZXNzIG9mIHN0YXRlLgogICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlu
cHV0OjpNYWtlTmV3KSB7CiAgICAgICAgIGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlv
blN0YXRlOjpTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSkKLSAgICAgICAgICAgIG1fY29tcG9zaXRl
QW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCktPnJlbW92ZUZyb21BbmltYXRpb25zV2Fp
dGluZ0ZvclN0eWxlKHRoaXMpOworICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFu
aW1hdGlvbkNvbnRyb2xsZXIoKS5yZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSh0
aGlzKTsKICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBO
ZXciLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwogICAgICAgICBtX2Fu
aW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6Ok5ldzsKICAgICAgICAgbV9zdGFydFRpbWUg
PSAwOwpAQCAtMTc0LDcgKzE2NSw3IEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlU3RhdGVN
YWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQgaW5wdXQsIGRvdWJsZSBwYXJhbSkKIAogICAgIGlm
IChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpSZXN0YXJ0QW5pbWF0aW9uKSB7CiAgICAg
ICAgIGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRTdHls
ZUF2YWlsYWJsZSkKLSAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25D
b250cm9sbGVyKCktPnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKHRoaXMpOwor
ICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5y
ZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSh0aGlzKTsKICAgICAgICAgTE9HKEFu
aW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBOZXciLCB0aGlzLCBuYW1lRm9yU3Rh
dGUobV9hbmltYXRpb25TdGF0ZSkpOwogICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0
aW9uU3RhdGU6Ok5ldzsKICAgICAgICAgbV9zdGFydFRpbWUgPSAwOwpAQCAtMTkwLDcgKzE4MSw3
IEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRl
SW5wdXQgaW5wdXQsIGRvdWJsZSBwYXJhbSkKIAogICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25T
dGF0ZUlucHV0OjpFbmRBbmltYXRpb24pIHsKICAgICAgICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUg
PT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxlKQotICAgICAgICAgICAg
bV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+cmVtb3ZlRnJvbUFu
aW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUodGhpcyk7CisgICAgICAgICAgICBtX2NvbXBvc2l0ZUFu
aW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGlu
Z0ZvclN0eWxlKHRoaXMpOwogICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0
YXRlICVzIC0+IERvbmUiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwog
ICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OkRvbmU7CiAgICAgICAg
IGVuZEFuaW1hdGlvbigpOwpAQCAtMjMyLDcgKzIyMyw3IEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6
dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQgaW5wdXQsIGRvdWJsZSBwYXJh
bSkKIAogI2lmIEVOQUJMRShDU1NfQU5JTUFUSU9OU19MRVZFTF8yKQogICAgICAgICAgICAgaWYg
KG1fYW5pbWF0aW9uLT50cmlnZ2VyKCkgJiYgbV9hbmltYXRpb24tPnRyaWdnZXIoKS0+aXNTY3Jv
bGxBbmltYXRpb25UcmlnZ2VyKCkpCi0gICAgICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRp
b24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YWRkVG9BbmltYXRpb25zRGVwZW5kZW50T25TY3Jv
bGwodGhpcyk7CisgICAgICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlv
bkNvbnRyb2xsZXIoKS5hZGRUb0FuaW1hdGlvbnNEZXBlbmRlbnRPblNjcm9sbCh0aGlzKTsKICNl
bmRpZgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQW5pbWF0aW9uU3RhdGU6OlN0
YXJ0V2FpdFRpbWVyOgpAQCAtMjQzLDExICsyMzQsMTEgQEAgdm9pZCBBbmltYXRpb25CYXNlOjp1
cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dCBpbnB1dCwgZG91YmxlIHBhcmFt
KQogICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRpbWVyIGhhcyBmaXJlZCwgdGVsbCB0aGUgYW5p
bWF0aW9uIHRvIHN0YXJ0IGFuZCB3YWl0IGZvciBpdCB0byByZXNwb25kIHdpdGggc3RhcnQgdGlt
ZQogICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMg
LT4gU3RhcnRXYWl0U3R5bGVBdmFpbGFibGUiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRp
b25TdGF0ZSkpOwogICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25T
dGF0ZTo6U3RhcnRXYWl0U3R5bGVBdmFpbGFibGU7Ci0gICAgICAgICAgICAgICAgbV9jb21wb3Np
dGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YWRkVG9BbmltYXRpb25zV2FpdGlu
Z0ZvclN0eWxlKHRoaXMpOworICAgICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5h
bmltYXRpb25Db250cm9sbGVyKCkuYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKHRoaXMp
OwogCiAgICAgICAgICAgICAgICAgLy8gVHJpZ2dlciBhIHJlbmRlciBzbyB3ZSBjYW4gc3RhcnQg
dGhlIGFuaW1hdGlvbgogICAgICAgICAgICAgICAgIGlmIChtX29iamVjdCAmJiBtX29iamVjdC0+
ZWxlbWVudCgpKQotICAgICAgICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5p
bWF0aW9uQ29udHJvbGxlcigpLT5hZGRFbGVtZW50Q2hhbmdlVG9EaXNwYXRjaCgqbV9vYmplY3Qt
PmVsZW1lbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5h
bmltYXRpb25Db250cm9sbGVyKCkuYWRkRWxlbWVudENoYW5nZVRvRGlzcGF0Y2goKm1fb2JqZWN0
LT5lbGVtZW50KCkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBBU1NF
UlQoIXBhdXNlZCgpKTsKICAgICAgICAgICAgICAgICAvLyBXZSdyZSB3YWl0aW5nIGZvciB0aGUg
c3RhcnQgdGltZXIgdG8gZmlyZSBhbmQgd2UgZ290IGEgcGF1c2UuIENhbmNlbCB0aGUgdGltZXIs
IHBhdXNlIGFuZCB3YWl0CkBAIC0yODEsNyArMjcyLDcgQEAgdm9pZCBBbmltYXRpb25CYXNlOjp1
cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dCBpbnB1dCwgZG91YmxlIHBhcmFt
KQogICAgICAgICAgICAgICAgICAgICAgICAgdGltZU9mZnNldCA9IC1tX2FuaW1hdGlvbi0+ZGVs
YXkoKTsKICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdGFydGVkID0gc3RhcnRBbmltYXRpb24o
dGltZU9mZnNldCk7CiAKLSAgICAgICAgICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24t
PmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGlt
ZVJlc3BvbnNlKHRoaXMsIHN0YXJ0ZWQpOworICAgICAgICAgICAgICAgICAgICBtX2NvbXBvc2l0
ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZFRvQW5pbWF0aW9uc1dhaXRpbmdG
b3JTdGFydFRpbWVSZXNwb25zZSh0aGlzLCBzdGFydGVkKTsKICAgICAgICAgICAgICAgICAgICAg
bV9pc0FjY2VsZXJhdGVkID0gc3RhcnRlZDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9IGVsc2UgewpAQCAtMzEyLDcgKzMwMyw3IEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRl
U3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQgaW5wdXQsIGRvdWJsZSBwYXJhbSkKIAog
ICAgICAgICAgICAgICAgIC8vIERpc3BhdGNoIHVwZGF0ZVN0eWxlSWZOZWVkZWQgc28gd2UgY2Fu
IHN0YXJ0IHRoZSBhbmltYXRpb24KICAgICAgICAgICAgICAgICBpZiAobV9vYmplY3QgJiYgbV9v
YmplY3QtPmVsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRp
b24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YWRkRWxlbWVudENoYW5nZVRvRGlzcGF0Y2goKm1f
b2JqZWN0LT5lbGVtZW50KCkpOworICAgICAgICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1h
dGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZEVsZW1lbnRDaGFuZ2VUb0Rpc3BhdGNoKCpt
X29iamVjdC0+ZWxlbWVudCgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgLy8gV2UgYXJlIHBhdXNpbmcgd2hpbGUgd2FpdGluZyBmb3IgYSBzdGFydCByZXNwb25zZS4g
Q2FuY2VsIHRoZSBhbmltYXRpb24gYW5kIHdhaXQuIFdoZW4gCiAgICAgICAgICAgICAgICAgLy8g
d2UgdW5wYXVzZSwgd2Ugd2lsbCBhY3QgYXMgdGhvdWdoIHRoZSBzdGFydCB0aW1lciBqdXN0IGZp
cmVkCkBAIC0zNjMsNyArMzU0LDcgQEAgdm9pZCBBbmltYXRpb25CYXNlOjp1cGRhdGVTdGF0ZU1h
Y2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dCBpbnB1dCwgZG91YmxlIHBhcmFtKQogCiAgICAgICAg
ICAgICAgICAgICAgIC8vIEZpcmUgb2ZmIGFub3RoZXIgc3R5bGUgY2hhbmdlIHNvIHdlIGNhbiBz
ZXQgdGhlIGZpbmFsIHZhbHVlCiAgICAgICAgICAgICAgICAgICAgIGlmIChtX29iamVjdC0+ZWxl
bWVudCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFu
aW1hdGlvbkNvbnRyb2xsZXIoKS0+YWRkRWxlbWVudENoYW5nZVRvRGlzcGF0Y2goKm1fb2JqZWN0
LT5lbGVtZW50KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRp
b24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRFbGVtZW50Q2hhbmdlVG9EaXNwYXRjaCgqbV9v
YmplY3QtPmVsZW1lbnQoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAvLyBXZSBhcmUgcGF1c2luZyB3aGlsZSBydW5uaW5nLiBDYW5j
ZWwgdGhlIGFuaW1hdGlvbiBhbmQgd2FpdApAQCAtNDMyLDcgKzQyMyw3IEBAIHZvaWQgQW5pbWF0
aW9uQmFzZTo6dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQgaW5wdXQsIGRv
dWJsZSBwYXJhbSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRlZCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIHN0YXJ0ZWQgPSBzdGFydEFuaW1hdGlvbihiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUo
KSAtIG1fc3RhcnRUaW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5p
bWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCktPmFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JT
dGFydFRpbWVSZXNwb25zZSh0aGlzLCBzdGFydGVkKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkuYWRkVG9BbmltYXRp
b25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKHRoaXMsIHN0YXJ0ZWQpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkID0gc3RhcnRlZDsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTQ4Nyw3ICs0NzgsNyBAQCB2b2lkIEFuaW1h
dGlvbkJhc2U6OmZpcmVBbmltYXRpb25FdmVudHNJZk5lZWRlZCgpCiAjaWYgRU5BQkxFKENTU19B
TklNQVRJT05TX0xFVkVMXzIpCiAgICAgICAgIGlmIChtX2FuaW1hdGlvbi0+dHJpZ2dlcigpICYm
IG1fYW5pbWF0aW9uLT50cmlnZ2VyKCktPmlzU2Nyb2xsQW5pbWF0aW9uVHJpZ2dlcigpKSB7CiAg
ICAgICAgICAgICBpZiAobV9vYmplY3QpIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBvZmZzZXQg
PSBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5zY3JvbGxQb3Np
dGlvbigpOworICAgICAgICAgICAgICAgIGZsb2F0IG9mZnNldCA9IG1fY29tcG9zaXRlQW5pbWF0
aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkuc2Nyb2xsUG9zaXRpb24oKTsKICAgICAgICAgICAg
ICAgICBTY3JvbGxBbmltYXRpb25UcmlnZ2VyJiBzY3JvbGxUcmlnZ2VyID0gZG93bmNhc3Q8U2Ny
b2xsQW5pbWF0aW9uVHJpZ2dlcj4oKm1fYW5pbWF0aW9uLT50cmlnZ2VyKCkuZ2V0KCkpOwogICAg
ICAgICAgICAgICAgIGlmIChvZmZzZXQgPiBzY3JvbGxUcmlnZ2VyLnN0YXJ0VmFsdWUoKS52YWx1
ZSgpKQogICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3Rh
dGVJbnB1dDo6U3RhcnRUaW1lckZpcmVkLCAwKTsKQEAgLTcyNCw3ICs3MTUsNyBAQCBkb3VibGUg
QW5pbWF0aW9uQmFzZTo6YmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkgY29uc3QKICAgICBpZiAo
IW1fY29tcG9zaXRlQW5pbWF0aW9uKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBt
X2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5iZWdpbkFuaW1hdGlv
blVwZGF0ZVRpbWUoKTsKKyAgICByZXR1cm4gbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlv
bkNvbnRyb2xsZXIoKS5iZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKTsKIH0KIAogZG91YmxlIEFu
aW1hdGlvbkJhc2U6OmdldEVsYXBzZWRUaW1lKCkgY29uc3QKQEAgLTczMyw3ICs3MjQsNyBAQCBk
b3VibGUgQW5pbWF0aW9uQmFzZTo6Z2V0RWxhcHNlZFRpbWUoKSBjb25zdAogICAgIGlmIChtX2Fu
aW1hdGlvbi0+dHJpZ2dlcigpICYmIG1fYW5pbWF0aW9uLT50cmlnZ2VyKCktPmlzU2Nyb2xsQW5p
bWF0aW9uVHJpZ2dlcigpKSB7CiAgICAgICAgIFNjcm9sbEFuaW1hdGlvblRyaWdnZXImIHNjcm9s
bFRyaWdnZXIgPSBkb3duY2FzdDxTY3JvbGxBbmltYXRpb25UcmlnZ2VyPigqbV9hbmltYXRpb24t
PnRyaWdnZXIoKS5nZXQoKSk7CiAgICAgICAgIGlmIChzY3JvbGxUcmlnZ2VyLmhhc0VuZFZhbHVl
KCkgJiYgbV9vYmplY3QpIHsKLSAgICAgICAgICAgIGZsb2F0IG9mZnNldCA9IG1fY29tcG9zaXRl
QW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCktPnNjcm9sbFBvc2l0aW9uKCk7CisgICAg
ICAgICAgICBmbG9hdCBvZmZzZXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29u
dHJvbGxlcigpLnNjcm9sbFBvc2l0aW9uKCk7CiAgICAgICAgICAgICBmbG9hdCBzdGFydFZhbHVl
ID0gc2Nyb2xsVHJpZ2dlci5zdGFydFZhbHVlKCkudmFsdWUoKTsKICAgICAgICAgICAgIGlmIChv
ZmZzZXQgPCBzdGFydFZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCmluZGV4IGVmYzkyOGQ0NDkx
Njk1YWUwM2I3OGM4ODk2ZjM4Zjk2MWY3MDk2NzcuLjA3ZGE3ODE2Mjg4YjA0NmVmYTdjYjQ1ODY3
MmQ4MGI0NjA0Njg4YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9u
L0FuaW1hdGlvbkJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Bbmlt
YXRpb25CYXNlLmgKQEAgLTUwLDcgKzUwLDcgQEAgY2xhc3MgVGltaW5nRnVuY3Rpb247CiBjbGFz
cyBBbmltYXRpb25CYXNlIDogcHVibGljIFJlZkNvdW50ZWQ8QW5pbWF0aW9uQmFzZT4gewogICAg
IGZyaWVuZCBjbGFzcyBDb21wb3NpdGVBbmltYXRpb247CiAgICAgZnJpZW5kIGNsYXNzIENTU1By
b3BlcnR5QW5pbWF0aW9uOwotCisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
CiAgICAgQW5pbWF0aW9uQmFzZShjb25zdCBBbmltYXRpb24mIHRyYW5zaXRpb24sIFJlbmRlckVs
ZW1lbnQqLCBDb21wb3NpdGVBbmltYXRpb24qKTsKICAgICB2aXJ0dWFsIH5BbmltYXRpb25CYXNl
KCkgeyB9CkBAIC0xNDQsOSArMTQ0LDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZmlyZUFuaW1h
dGlvbkV2ZW50c0lmTmVlZGVkKCk7CiAKLSAgICBib29sIGFuaW1hdGlvbnNNYXRjaChjb25zdCBB
bmltYXRpb24qKSBjb25zdDsKKyAgICBib29sIGFuaW1hdGlvbnNNYXRjaChjb25zdCBBbmltYXRp
b24mKSBjb25zdDsKIAotICAgIHZvaWQgc2V0QW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYgYW5p
bWF0aW9uKSB7IG1fYW5pbWF0aW9uID0gY29uc3RfY2FzdDxBbmltYXRpb24qPigmYW5pbWF0aW9u
KTsgfQorICAgIGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9h
bmltYXRpb247IH0KKyAgICB2b2lkIHNldEFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mIGFuaW1h
dGlvbikgeyBtX2FuaW1hdGlvbiA9IGNvbnN0X2Nhc3Q8QW5pbWF0aW9uJj4oYW5pbWF0aW9uKTsg
fQogCiAgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhpcyBhbmltYXRpb24gaXMgb3ZlcnJpZGRlbi4g
VGhpcyB3aWxsIG9ubHkgYmUgdGhlIGNhc2UgZm9yCiAgICAgLy8gSW1wbGljaXRBbmltYXRpb25z
IGFuZCBpcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgZm9yY2UK
QEAgLTIxMCw4ICsyMTEsNiBAQCBwdWJsaWM6CiAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShB
bmltYXRpb25TdGF0ZUlucHV0OjpTdHlsZUF2YWlsYWJsZSwgLTEpOwogICAgIH0KIAotICAgIGNv
bnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uKCkgY29uc3QgeyByZXR1cm4gKm1fYW5pbWF0aW9uOyB9
Ci0KIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgb3ZlcnJpZGVBbmltYXRpb25zKCkgeyB9
CiAgICAgdmlydHVhbCB2b2lkIHJlc3VtZU92ZXJyaWRkZW5BbmltYXRpb25zKCkgeyB9CkBAIC0y
NDQsMjIgKzI0MywyMCBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBjb21wdXRlVHJhbnNmb3JtZWRF
eHRlbnRWaWFUcmFuc2Zvcm1MaXN0KGNvbnN0IEZsb2F0UmVjdCYgcmVuZGVyZXJCb3gsIGNvbnN0
IFJlbmRlclN0eWxlJiwgTGF5b3V0UmVjdCYgYm91bmRzKSBjb25zdDsKICAgICBib29sIGNvbXB1
dGVUcmFuc2Zvcm1lZEV4dGVudFZpYU1hdHJpeChjb25zdCBGbG9hdFJlY3QmIHJlbmRlcmVyQm94
LCBjb25zdCBSZW5kZXJTdHlsZSYsIExheW91dFJlY3QmIGJvdW5kcykgY29uc3Q7CiAKLSAgICBB
bmltYXRpb25TdGF0ZSBtX2FuaW1hdGlvblN0YXRlOwotCi0gICAgYm9vbCBtX2lzQWNjZWxlcmF0
ZWQ7Ci0gICAgYm9vbCBtX3RyYW5zZm9ybUZ1bmN0aW9uTGlzdFZhbGlkOwotICAgIGJvb2wgbV9m
aWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2g7Ci0gICAgZG91YmxlIG1fc3RhcnRUaW1lOwotICAgIGRv
dWJsZSBtX3BhdXNlVGltZTsKLSAgICBkb3VibGUgbV9yZXF1ZXN0ZWRTdGFydFRpbWU7Ci0KLSAg
ICBkb3VibGUgbV90b3RhbER1cmF0aW9uOwotICAgIGRvdWJsZSBtX25leHRJdGVyYXRpb25EdXJh
dGlvbjsKLQogICAgIFJlbmRlckVsZW1lbnQqIG1fb2JqZWN0OwotCi0gICAgUmVmUHRyPEFuaW1h
dGlvbj4gbV9hbmltYXRpb247Ci0gICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBtX2NvbXBvc2l0ZUFu
aW1hdGlvbjsKKyAgICBDb21wb3NpdGVBbmltYXRpb24qIG1fY29tcG9zaXRlQW5pbWF0aW9uOyAv
LyBJZGVhbGx5IHRoaXMgd291bGQgYmUgYSByZWZlcmVuY2UsIGJ1dCBpdCBoYXMgdG8gYmUgY2xl
YXJlZCBpZiBhbiBhbmltYXRpb24gaXMgZGVzdHJveWVkIGluc2lkZSBhbiBldmVudCBjYWxsYmFj
ay4KKyAgICBSZWY8QW5pbWF0aW9uPiBtX2FuaW1hdGlvbjsKKworICAgIGRvdWJsZSBtX3N0YXJ0
VGltZSB7IDAgfTsKKyAgICBkb3VibGUgbV9wYXVzZVRpbWUgeyAtMSB9OworICAgIGRvdWJsZSBt
X3JlcXVlc3RlZFN0YXJ0VGltZSB7IDAgfTsKKyAgICBkb3VibGUgbV90b3RhbER1cmF0aW9uIHsg
LTEgfTsKKyAgICBkb3VibGUgbV9uZXh0SXRlcmF0aW9uRHVyYXRpb24geyAtMSB9OworCisgICAg
QW5pbWF0aW9uU3RhdGUgbV9hbmltYXRpb25TdGF0ZSB7IEFuaW1hdGlvblN0YXRlOjpOZXcgfTsK
KyAgICBib29sIG1faXNBY2NlbGVyYXRlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX3RyYW5zZm9y
bUZ1bmN0aW9uTGlzdFZhbGlkIHsgZmFsc2UgfTsKKyAgICBib29sIG1fZmlsdGVyRnVuY3Rpb25M
aXN0c01hdGNoIHsgZmFsc2UgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5j
cHAKaW5kZXggZjk0NzM4YTgwNjNiOWVkODJjNmNlOGE2ZjM5MzliY2E4ZTMyMDRiYy4uMmE4NDAz
ZjA1NTE5MTRmNGNkODRlZGJhODA3Y2EwN2ZjOTZiYzJkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKQEAgLTg5LDcg
Kzg5LDcgQEAgQ29tcG9zaXRlQW5pbWF0aW9uJiBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6
ZW5zdXJlQ29tcG9zaXRlQW5pbWF0aW9uKFJlbmRlckUKIHsKICAgICBhdXRvIHJlc3VsdCA9IG1f
Y29tcG9zaXRlQW5pbWF0aW9ucy5hZGQoJnJlbmRlcmVyLCBudWxscHRyKTsKICAgICBpZiAocmVz
dWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IENvbXBv
c2l0ZUFuaW1hdGlvbjo6Y3JlYXRlKHRoaXMpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlID0gQ29tcG9zaXRlQW5pbWF0aW9uOjpjcmVhdGUoKnRoaXMpOwogICAgICAgICByZW5kZXJl
ci5zZXRJc0NTU0FuaW1hdGluZyh0cnVlKTsKICAgICB9CiAKQEAgLTQ4Nyw3ICs0ODcsNyBAQCB2
b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9y
U3RhcnRUaW1lUmVzcG9uc2UoQW5pbQogICAgIAogICAgIGlmICh3aWxsR2V0UmVzcG9uc2UpCiAg
ICAgICAgIG1fd2FpdGluZ0ZvckFzeW5jU3RhcnROb3RpZmljYXRpb24gPSB0cnVlOwotICAgIAor
CiAgICAgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlLmFkZChhbmltYXRp
b24pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21w
b3NpdGVBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9z
aXRlQW5pbWF0aW9uLmNwcAppbmRleCBjODBjMGZmM2U0MjU4MjAxZTc4OWQ0MWE0NWRkNDkzMDMx
ODk1YTYyLi5hMDBkOTVkZDZhNjc5ODY2YWY1MDhjMDAyODhkZmE3M2UyMTUzOTE0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5j
cHAKQEAgLTQxLDEzICs0MSwxMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNvbXBvc2l0
ZUFuaW1hdGlvbjo6Q29tcG9zaXRlQW5pbWF0aW9uKEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
KiBhbmltYXRpb25Db250cm9sbGVyKQorQ29tcG9zaXRlQW5pbWF0aW9uOjpDb21wb3NpdGVBbmlt
YXRpb24oQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUmIGFuaW1hdGlvbkNvbnRyb2xsZXIpCiAg
ICAgOiBtX2FuaW1hdGlvbkNvbnRyb2xsZXIoYW5pbWF0aW9uQ29udHJvbGxlcikKLSNpZiBFTkFC
TEUoQ1NTX0FOSU1BVElPTlNfTEVWRUxfMikKLSAgICAsIG1faGFzU2Nyb2xsVHJpZ2dlcmVkQW5p
bWF0aW9uKGZhbHNlKQotI2VuZGlmCiB7Ci0gICAgbV9zdXNwZW5kZWQgPSBhbmltYXRpb25Db250
cm9sbGVyLT5pc1N1c3BlbmRlZCgpICYmICFhbmltYXRpb25Db250cm9sbGVyLT5hbGxvd3NOZXdB
bmltYXRpb25zV2hpbGVTdXNwZW5kZWQoKTsKKyAgICBtX3N1c3BlbmRlZCA9IG1fYW5pbWF0aW9u
Q29udHJvbGxlci5pc1N1c3BlbmRlZCgpICYmICFtX2FuaW1hdGlvbkNvbnRyb2xsZXIuYWxsb3dz
TmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkKCk7CiB9CiAKIENvbXBvc2l0ZUFuaW1hdGlvbjo6
fkNvbXBvc2l0ZUFuaW1hdGlvbigpCkBAIC02NSwxOSArNjIsMTcgQEAgdm9pZCBDb21wb3NpdGVB
bmltYXRpb246OmNsZWFyUmVuZGVyZXIoKQogICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5
KCkpIHsKICAgICAgICAgLy8gQ2xlYXIgdGhlIHJlbmRlcmVycyBmcm9tIGFsbCBydW5uaW5nIGFu
aW1hdGlvbnMsIGluIGNhc2Ugd2UgYXJlIGluIHRoZSBtaWRkbGUgb2YKICAgICAgICAgLy8gYW4g
YW5pbWF0aW9uIGNhbGxiYWNrIChzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyMDUyKQotICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9p
dGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7Ci0gICAgICAgIGZv
ciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5z
aXRpb25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zaXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAg
ICBJbXBsaWNpdEFuaW1hdGlvbiogdHJhbnNpdGlvbiA9IGl0LT52YWx1ZS5nZXQoKTsKLSAgICAg
ICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YW5pbWF0aW9uV2lsbEJlUmVtb3ZlZCh0cmFu
c2l0aW9uKTsKKyAgICAgICAgZm9yIChhdXRvJiBpdCA6IG1fdHJhbnNpdGlvbnMpIHsKKyAgICAg
ICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiB0cmFuc2l0aW9uID0gaXQudmFsdWUuZ2V0KCk7Cisg
ICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCkuYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZCh0
cmFuc2l0aW9uKTsKICAgICAgICAgICAgIHRyYW5zaXRpb24tPmNsZWFyKCk7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgaWYgKCFtX2tleWZyYW1lQW5pbWF0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAg
ICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAgICBBbmlt
YXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFtZUFu
aW1hdGlvbnMuZW5kKCk7Ci0gICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25z
RW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT52
YWx1ZS5nZXQoKTsKLSAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YW5pbWF0aW9u
V2lsbEJlUmVtb3ZlZChhbmltKTsKKyAgICAgICAgZm9yIChhdXRvJiBpdCA6IG1fa2V5ZnJhbWVB
bmltYXRpb25zKSB7CisgICAgICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LnZh
bHVlLmdldCgpOworICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldp
bGxCZVJlbW92ZWQoYW5pbSk7CiAgICAgICAgICAgICBhbmltLT5jbGVhcigpOwogICAgICAgICB9
CiAgICAgfQpAQCAtOTEsOSArODYsOCBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRl
VHJhbnNpdGlvbnMoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKgogCiAgICAg
Ly8gTWFyayBhbGwgZXhpc3RpbmcgdHJhbnNpdGlvbnMgYXMgbm8gbG9uZ2VyIGFjdGl2ZS4gV2Ug
d2lsbCBtYXJrIHRoZSBzdGlsbCBhY3RpdmUgb25lcwogICAgIC8vIGluIHRoZSBuZXh0IGxvb3Ag
YW5kIHRoZW4gdG9zcyB0aGUgb25lcyB0aGF0IGRpZG4ndCBnZXQgbWFya2VkLgotICAgIENTU1By
b3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMu
ZW5kKCk7Ci0gICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBp
dC0+dmFsdWUtPnNldEFjdGl2ZShmYWxzZSk7CisgICAgZm9yIChhdXRvJiBpdCA6IG1fdHJhbnNp
dGlvbnMpCisgICAgICAgIGl0LnZhbHVlLT5zZXRBY3RpdmUoZmFsc2UpOwogICAgICAgICAKICAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1vZGlmaWVkQ3VycmVudFN0eWxlOwogICAgIApAQCAtMTYw
LDcgKzE1NCw3IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW9ucyhS
ZW5kZXJFbGVtZW50KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW1wbEFuaW0tPmJsZW5kUHJvcGVydHlWYWx1ZUluU3R5bGUocHJvcCwgbW9kaWZp
ZWRDdXJyZW50U3R5bGUuZ2V0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICJSZW1vdmluZyBleGlzdGluZyBJbXBs
aWNpdEFuaW1hdGlvbiAlcCBmb3IgcHJvcGVydHkgJXMiLCBpbXBsQW5pbSwgZ2V0UHJvcGVydHlO
YW1lKHByb3ApKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIo
KS0+YW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChpbXBsQW5pbSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBhbmltYXRpb25Db250cm9sbGVyKCkuYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChpbXBsQW5p
bSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3RyYW5zaXRpb25zLnJlbW92ZShwcm9wKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFsID0gZmFsc2U7CiAgICAgICAgICAgICAgICAg
ICAgIH0KQEAgLTE4OSwxOSArMTgzLDE4IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRh
dGVUcmFuc2l0aW9ucyhSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqCiAKICAg
ICAvLyBNYWtlIGEgbGlzdCBvZiB0cmFuc2l0aW9ucyB0byBiZSByZW1vdmVkCiAgICAgVmVjdG9y
PGludD4gdG9CZVJlbW92ZWQ7Ci0gICAgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKLSAgICBm
b3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFu
c2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgSW1wbGljaXRBbmlt
YXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CisgICAgZm9yIChhdXRvJiBpdCA6IG1fdHJh
bnNpdGlvbnMpIHsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC52YWx1ZS5n
ZXQoKTsKICAgICAgICAgaWYgKCFhbmltLT5hY3RpdmUoKSkgewotICAgICAgICAgICAgYW5pbWF0
aW9uQ29udHJvbGxlcigpLT5hbmltYXRpb25XaWxsQmVSZW1vdmVkKGFuaW0pOworICAgICAgICAg
ICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoYW5pbSk7CiAg
ICAgICAgICAgICB0b0JlUmVtb3ZlZC5hcHBlbmQoYW5pbS0+YW5pbWF0aW5nUHJvcGVydHkoKSk7
CiAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIlJlbW92aW5nIEltcGxpY2l0QW5pbWF0aW9u
ICVwIGZvciBwcm9wZXJ0eSAlcyIsIGFuaW0sIGdldFByb3BlcnR5TmFtZShhbmltLT5hbmltYXRp
bmdQcm9wZXJ0eSgpKSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBOb3cgcmVtb3ZlIHRo
ZSB0cmFuc2l0aW9ucyBmcm9tIHRoZSBsaXN0Ci0gICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB0
b0JlUmVtb3ZlZC5zaXplKCk7ICsraikKLSAgICAgICAgbV90cmFuc2l0aW9ucy5yZW1vdmUodG9C
ZVJlbW92ZWRbal0pOworICAgIGZvciAoYXV0byBwcm9wZXJ0eVRvUmVtb3ZlIDogdG9CZVJlbW92
ZWQpCisgICAgICAgIG1fdHJhbnNpdGlvbnMucmVtb3ZlKHByb3BlcnR5VG9SZW1vdmUpOwogfQog
CiB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRl
ckVsZW1lbnQqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHls
ZSogdGFyZ2V0U3R5bGUpCkBAIC0yMTEsMjAgKzIwNCwxOCBAQCB2b2lkIENvbXBvc2l0ZUFuaW1h
dGlvbjo6dXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBS
ZW5kZQogICAgICAgICByZXR1cm47CiAKICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0Nv
bnNpc3RlbmN5KCk7Ci0KLSAgICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBrZmVu
ZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwogICAgIAogICAgIGlmIChjdXJyZW50U3R5
bGUgJiYgY3VycmVudFN0eWxlLT5oYXNBbmltYXRpb25zKCkgJiYgdGFyZ2V0U3R5bGUtPmhhc0Fu
aW1hdGlvbnMoKSAmJiAqKGN1cnJlbnRTdHlsZS0+YW5pbWF0aW9ucygpKSA9PSAqKHRhcmdldFN0
eWxlLT5hbmltYXRpb25zKCkpKSB7CiAgICAgICAgIC8vIFRoZSBjdXJyZW50IGFuZCB0YXJnZXQg
YW5pbWF0aW9ucyBhcmUgdGhlIHNhbWUgc28gd2UganVzdCBuZWVkIHRvIHRvc3MgYW55IAogICAg
ICAgICAvLyBhbmltYXRpb24gd2hpY2ggaXMgZmluaXNoZWQgKHBvc3RBY3RpdmUpLgotICAgICAg
ICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFu
aW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0ga2ZlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChp
dC0+dmFsdWUtPnBvc3RBY3RpdmUoKSkKLSAgICAgICAgICAgICAgICBpdC0+dmFsdWUtPnNldElu
ZGV4KC0xKTsKKyAgICAgICAgZm9yIChhdXRvJiBpdCA6IG1fa2V5ZnJhbWVBbmltYXRpb25zKSB7
CisgICAgICAgICAgICBpZiAoaXQudmFsdWUtPnBvc3RBY3RpdmUoKSkKKyAgICAgICAgICAgICAg
ICBpdC52YWx1ZS0+c2V0SW5kZXgoLTEpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgLy8gTWFyayBhbGwgZXhpc3RpbmcgYW5pbWF0aW9ucyBhcyBubyBsb25nZXIgYWN0aXZlLgot
ICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlm
cmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0ga2ZlbmQ7ICsraXQpCi0gICAgICAgICAgICBp
dC0+dmFsdWUtPnNldEluZGV4KC0xKTsKKyAgICAgICAgZm9yIChhdXRvJiBpdCA6IG1fa2V5ZnJh
bWVBbmltYXRpb25zKQorICAgICAgICAgICAgaXQudmFsdWUtPnNldEluZGV4KC0xKTsKIAogI2lm
IEVOQUJMRShDU1NfQU5JTUFUSU9OU19MRVZFTF8yKQogICAgICAgICBtX2hhc1Njcm9sbFRyaWdn
ZXJlZEFuaW1hdGlvbiA9IGZhbHNlOwpAQCAtMjc0LDggKzI2NSw4IEBAIHZvaWQgQ29tcG9zaXRl
QW5pbWF0aW9uOjp1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCogcmVuZGVy
ZXIsIFJlbmRlCiAgICAgICAgICAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiAgKGNy
ZWF0ZWQgaW4gc3VzcGVuZGVkL3BhdXNlZCBzdGF0ZSkiKTsKICAgICAgICAgICAgICAgICAgICAg
fQogI2lmICFMT0dfRElTQUJMRUQKLSAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvIGl0ID0g
a2V5ZnJhbWVBbmltLT5rZXlmcmFtZXMoKS5iZWdpblByb3BlcnRpZXMoKSwgZW5kID0ga2V5ZnJh
bWVBbmltLT5rZXlmcmFtZXMoKS5lbmRQcm9wZXJ0aWVzKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiICBwcm9wZXJ0eSAlcyIsIGdl
dFByb3BlcnR5TmFtZSgqaXQpKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvIHByb3Bl
cnR5SUQgOiBrZXlmcmFtZUFuaW0tPmtleWZyYW1lcygpLnByb3BlcnRpZXMoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiICBwcm9wZXJ0eSAlcyIsIGdldFByb3Bl
cnR5TmFtZShwcm9wZXJ0eUlEKSk7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShDU1NfQU5JTUFUSU9O
U19MRVZFTF8yKQpAQCAtMjk1LDIwICsyODYsMTkgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246
OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgUmVuZGUK
ICAgICAKICAgICAvLyBNYWtlIGEgbGlzdCBvZiBhbmltYXRpb25zIHRvIGJlIHJlbW92ZWQuCiAg
ICAgVmVjdG9yPEF0b21pY1N0cmluZ0ltcGwqPiBhbmltc1RvQmVSZW1vdmVkOwotICAgIGtmZW5k
ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7Ci0gICAgZm9yIChBbmltYXRpb25OYW1lTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9
IGtmZW5kOyArK2l0KSB7Ci0gICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBrZXlmcmFtZUFuaW0g
PSBpdC0+dmFsdWUuZ2V0KCk7CisgICAgZm9yIChhdXRvJiBpdCA6IG1fa2V5ZnJhbWVBbmltYXRp
b25zKSB7CisgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBrZXlmcmFtZUFuaW0gPSBpdC52YWx1
ZS5nZXQoKTsKICAgICAgICAgaWYgKGtleWZyYW1lQW5pbS0+aW5kZXgoKSA8IDApIHsKICAgICAg
ICAgICAgIGFuaW1zVG9CZVJlbW92ZWQuYXBwZW5kKGtleWZyYW1lQW5pbS0+bmFtZSgpLmltcGwo
KSk7Ci0gICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCktPmFuaW1hdGlvbldpbGxCZVJl
bW92ZWQoa2V5ZnJhbWVBbmltKTsKKyAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5h
bmltYXRpb25XaWxsQmVSZW1vdmVkKGtleWZyYW1lQW5pbSk7CiAgICAgICAgICAgICBrZXlmcmFt
ZUFuaW0tPmNsZWFyKCk7CiAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIlJlbW92aW5nIEtl
eWZyYW1lQW5pbWF0aW9uICVwIiwga2V5ZnJhbWVBbmltKTsKICAgICAgICAgfQogICAgIH0KICAg
ICAKICAgICAvLyBOb3cgcmVtb3ZlIHRoZSBhbmltYXRpb25zIGZyb20gdGhlIGxpc3QuCi0gICAg
Zm9yIChzaXplX3QgaiA9IDA7IGogPCBhbmltc1RvQmVSZW1vdmVkLnNpemUoKTsgKytqKQotICAg
ICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5yZW1vdmUoYW5pbXNUb0JlUmVtb3ZlZFtqXSk7Cisg
ICAgZm9yIChhdXRvIG5hbWVGb3JSZW1vdmFsIDogYW5pbXNUb0JlUmVtb3ZlZCkKKyAgICAgICAg
bV9rZXlmcmFtZUFuaW1hdGlvbnMucmVtb3ZlKG5hbWVGb3JSZW1vdmFsKTsKIH0KIAogUmVmPFJl
bmRlclN0eWxlPiBDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGUoUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIsIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlJiB0YXJnZXRTdHls
ZSkKQEAgLTMyNCw5ICszMTQsOCBAQCBSZWY8UmVuZGVyU3R5bGU+IENvbXBvc2l0ZUFuaW1hdGlv
bjo6YW5pbWF0ZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgUmVuZGVyU3R5bAogICAgICAgICAv
LyBOb3cgdGhhdCB3ZSBoYXZlIHRyYW5zaXRpb24gb2JqZWN0cyByZWFkeSwgbGV0IHRoZW0ga25v
dyBhYm91dCB0aGUgbmV3IGdvYWwgc3RhdGUuICBXZSB3YW50IHRoZW0KICAgICAgICAgLy8gdG8g
ZmlsbCBpbiBhIFJlbmRlclN0eWxlKiYgb25seSBpZiBuZWVkZWQuCiAgICAgICAgIGlmICghbV90
cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7Ci0gICAgICAg
ICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCkpCisgICAgICAg
ICAgICBmb3IgKGF1dG8mIGl0IDogbV90cmFuc2l0aW9ucykgeworICAgICAgICAgICAgICAgIGlm
IChJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LnZhbHVlLmdldCgpKQogICAgICAgICAgICAg
ICAgICAgICBhbmltLT5hbmltYXRlKHRoaXMsICZyZW5kZXJlciwgY3VycmVudFN0eWxlLCAmdGFy
Z2V0U3R5bGUsIHJlc3VsdFN0eWxlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzM0
LDggKzMyMyw4IEBAIFJlZjxSZW5kZXJTdHlsZT4gQ29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRl
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBSZW5kZXJTdHlsCiAKICAgICAvLyBOb3cgdGhhdCB3
ZSBoYXZlIGFuaW1hdGlvbiBvYmplY3RzIHJlYWR5LCBsZXQgdGhlbSBrbm93IGFib3V0IHRoZSBu
ZXcgZ29hbCBzdGF0ZS4gIFdlIHdhbnQgdGhlbQogICAgIC8vIHRvIGZpbGwgaW4gYSBSZW5kZXJT
dHlsZSomIG9ubHkgaWYgbmVlZGVkLgotICAgIGZvciAoVmVjdG9yPEF0b21pY1N0cmluZ0ltcGwq
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9uT3JkZXJNYXAuYmVnaW4o
KTsgaXQgIT0gbV9rZXlmcmFtZUFuaW1hdGlvbk9yZGVyTWFwLmVuZCgpOyArK2l0KSB7Ci0gICAg
ICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4ga2V5ZnJhbWVBbmltID0gbV9rZXlmcmFtZUFu
aW1hdGlvbnMuZ2V0KCppdCk7CisgICAgZm9yIChhdXRvJiBpdCA6IG1fa2V5ZnJhbWVBbmltYXRp
b25PcmRlck1hcCkgeworICAgICAgICBSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IGtleWZyYW1l
QW5pbSA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmdldChpdCk7CiAgICAgICAgIGlmIChrZXlmcmFt
ZUFuaW0pCiAgICAgICAgICAgICBrZXlmcmFtZUFuaW0tPmFuaW1hdGUodGhpcywgJnJlbmRlcmVy
LCBjdXJyZW50U3R5bGUsICZ0YXJnZXRTdHlsZSwgcmVzdWx0U3R5bGUpOwogICAgIH0KQEAgLTM0
OCwxNiArMzM3LDE1IEBAIFJlZjxSZW5kZXJTdHlsZT4gQ29tcG9zaXRlQW5pbWF0aW9uOjphbmlt
YXRlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBSZW5kZXJTdHlsCiBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBDb21wb3NpdGVBbmltYXRpb246OmdldEFuaW1hdGVkU3R5bGUoKSBjb25zdAogewog
ICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcmVzdWx0U3R5bGU7Ci0gICAgQ1NTUHJvcGVydHlUcmFu
c2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKLSAg
ICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90
cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKEltcGxp
Y2l0QW5pbWF0aW9uKiBpbXBsaWNpdEFuaW1hdGlvbiA9IGl0LT52YWx1ZS5nZXQoKSkKKyAgICBm
b3IgKGF1dG8mIGl0IDogbV90cmFuc2l0aW9ucykgeworICAgICAgICBpZiAoSW1wbGljaXRBbmlt
YXRpb24qIGltcGxpY2l0QW5pbWF0aW9uID0gaXQudmFsdWUuZ2V0KCkpCiAgICAgICAgICAgICBp
bXBsaWNpdEFuaW1hdGlvbi0+Z2V0QW5pbWF0ZWRTdHlsZShyZXN1bHRTdHlsZSk7CiAgICAgfQog
CiAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwogCi0gICAgZm9y
IChWZWN0b3I8QXRvbWljU3RyaW5nSW1wbCo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJh
bWVBbmltYXRpb25PcmRlck1hcC5iZWdpbigpOyBpdCAhPSBtX2tleWZyYW1lQW5pbWF0aW9uT3Jk
ZXJNYXAuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBr
ZXlmcmFtZUFuaW1hdGlvbiA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmdldCgqaXQpOworICAgIGZv
ciAoYXV0byYgaXQgOiBtX2tleWZyYW1lQW5pbWF0aW9uT3JkZXJNYXApIHsKKyAgICAgICAgUmVm
UHRyPEtleWZyYW1lQW5pbWF0aW9uPiBrZXlmcmFtZUFuaW1hdGlvbiA9IG1fa2V5ZnJhbWVBbmlt
YXRpb25zLmdldChpdCk7CiAgICAgICAgIGlmIChrZXlmcmFtZUFuaW1hdGlvbikKICAgICAgICAg
ICAgIGtleWZyYW1lQW5pbWF0aW9uLT5nZXRBbmltYXRlZFN0eWxlKHJlc3VsdFN0eWxlKTsKICAg
ICB9CkBAIC0zNzIsOSArMzYwLDggQEAgZG91YmxlIENvbXBvc2l0ZUFuaW1hdGlvbjo6dGltZVRv
TmV4dFNlcnZpY2UoKSBjb25zdAogICAgIGRvdWJsZSBtaW5UID0gLTE7CiAgICAgCiAgICAgaWYg
KCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRp
b25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMuZW5k
KCk7Ci0gICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zaXRpb25zRW5kOyArK2l0
KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogdHJhbnNpdGlvbiA9IGl0LT52YWx1
ZS5nZXQoKTsKKyAgICAgICAgZm9yIChhdXRvJiBpdCA6IG1fdHJhbnNpdGlvbnMpIHsKKyAgICAg
ICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiB0cmFuc2l0aW9uID0gaXQudmFsdWUuZ2V0KCk7CiAg
ICAgICAgICAgICBkb3VibGUgdCA9IHRyYW5zaXRpb24gPyB0cmFuc2l0aW9uLT50aW1lVG9OZXh0
U2VydmljZSgpIDogLTE7CiAgICAgICAgICAgICBpZiAodCA8IG1pblQgfHwgbWluVCA9PSAtMSkK
ICAgICAgICAgICAgICAgICBtaW5UID0gdDsKQEAgLTM4NCw5ICszNzEsOCBAQCBkb3VibGUgQ29t
cG9zaXRlQW5pbWF0aW9uOjp0aW1lVG9OZXh0U2VydmljZSgpIGNvbnN0CiAgICAgfQogICAgIGlm
ICghbV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1fa2V5ZnJhbWVB
bmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6
Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgp
OwotICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9r
ZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewot
ICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW1hdGlvbiA9IGl0LT52YWx1ZS5nZXQo
KTsKKyAgICAgICAgZm9yIChhdXRvJiBpdCA6IG1fa2V5ZnJhbWVBbmltYXRpb25zKSB7CisgICAg
ICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbWF0aW9uID0gaXQudmFsdWUuZ2V0KCk7CiAg
ICAgICAgICAgICBkb3VibGUgdCA9IGFuaW1hdGlvbiA/IGFuaW1hdGlvbi0+dGltZVRvTmV4dFNl
cnZpY2UoKSA6IC0xOwogICAgICAgICAgICAgaWYgKHQgPCBtaW5UIHx8IG1pblQgPT0gLTEpCiAg
ICAgICAgICAgICAgICAgbWluVCA9IHQ7CkBAIC00MDYsOSArMzkyLDggQEAgUGFzc1JlZlB0cjxL
ZXlmcmFtZUFuaW1hdGlvbj4gQ29tcG9zaXRlQW5pbWF0aW9uOjpnZXRBbmltYXRpb25Gb3JQcm9w
ZXJ0eShDU1NQcm8KICAgICAvLyBTbyB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCBhbGwgYW5p
bWF0aW9ucwogICAgIGlmICghbV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgQW5p
bWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVB
bmltYXRpb25zLmVuZCgpOwotICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9u
c0VuZDsgKytpdCkgewotICAgICAgICAgICAgUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBhbmlt
ID0gaXQtPnZhbHVlOworICAgICAgICBmb3IgKGF1dG8mIGl0IDogbV9rZXlmcmFtZUFuaW1hdGlv
bnMpIHsKKyAgICAgICAgICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4gYW5pbSA9IGl0LnZh
bHVlOwogICAgICAgICAgICAgaWYgKGFuaW0tPmhhc0FuaW1hdGlvbkZvclByb3BlcnR5KHByb3Bl
cnR5KSkKICAgICAgICAgICAgICAgICByZXR2YWwgPSBhbmltOwogICAgICAgICB9CkBAIC00NjIs
MTYgKzQ0NywxNCBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6c3VzcGVuZEFuaW1hdGlvbnMo
KQogCiAgICAgaWYgKCFtX2tleWZyYW1lQW5pbWF0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAg
bV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAgICBBbmltYXRp
b25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFtZUFuaW1h
dGlvbnMuZW5kKCk7Ci0gICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5k
OyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+
dmFsdWUuZ2V0KCkpCisgICAgICAgIGZvciAoYXV0byYgaXQgOiBtX2tleWZyYW1lQW5pbWF0aW9u
cykgeworICAgICAgICAgICAgaWYgKEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQudmFsdWUu
Z2V0KCkpCiAgICAgICAgICAgICAgICAgYW5pbS0+dXBkYXRlUGxheVN0YXRlKEFuaW1QbGF5U3Rh
dGVQYXVzZWQpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgdHJhbnNpdGlvbnNFbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwotICAgICAgICBmb3IgKENT
U1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9u
cy5iZWdpbigpOyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgSW1w
bGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CisgICAgICAgIGZvciAoYXV0
byYgaXQgOiBtX3RyYW5zaXRpb25zKSB7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiog
YW5pbSA9IGl0LnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+aGFz
U3R5bGUoKSkKICAgICAgICAgICAgICAgICBhbmltLT51cGRhdGVQbGF5U3RhdGUoQW5pbVBsYXlT
dGF0ZVBhdXNlZCk7CiAgICAgICAgIH0KQEAgLTQ4NywxOCArNDcwLDE2IEBAIHZvaWQgQ29tcG9z
aXRlQW5pbWF0aW9uOjpyZXN1bWVBbmltYXRpb25zKCkKIAogICAgIGlmICghbV9rZXlmcmFtZUFu
aW1hdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNr
Q29uc2lzdGVuY3koKTsKLSAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
YW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwotICAgICAgICBmb3Ig
KEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlv
bnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgS2V5
ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7CisgICAgICAgIGZvciAoYXV0
byYgaXQgOiBtX2tleWZyYW1lQW5pbWF0aW9ucykgeworICAgICAgICAgICAgS2V5ZnJhbWVBbmlt
YXRpb24qIGFuaW0gPSBpdC52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChhbmltICYmIGFu
aW0tPnBsYXlTdGF0ZVBsYXlpbmcoKSkKICAgICAgICAgICAgICAgICBhbmltLT51cGRhdGVQbGF5
U3RhdGUoQW5pbVBsYXlTdGF0ZVBsYXlpbmcpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYg
KCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRp
b25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMuZW5k
KCk7Ci0gICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zaXRpb25zRW5kOyArK2l0
KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQo
KTsKKyAgICAgICAgZm9yIChhdXRvJiBpdCA6IG1fdHJhbnNpdGlvbnMpIHsKKyAgICAgICAgICAg
IEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQudmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBp
ZiAoYW5pbSAmJiBhbmltLT5oYXNTdHlsZSgpKQogICAgICAgICAgICAgICAgIGFuaW0tPnVwZGF0
ZVBsYXlTdGF0ZShBbmltUGxheVN0YXRlUGxheWluZyk7CiAgICAgICAgIH0KQEAgLTUwNywxMCAr
NDg4LDkgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnJlc3VtZUFuaW1hdGlvbnMoKQogCiB2
b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6b3ZlcnJpZGVJbXBsaWNpdEFuaW1hdGlvbnMoQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eSkKIHsKLSAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwogICAgIGlmICghbV90cmFuc2l0
aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5n
ZXQoKTsKKyAgICAgICAgZm9yIChhdXRvJiBpdCA6IG1fdHJhbnNpdGlvbnMpIHsKKyAgICAgICAg
ICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQudmFsdWUuZ2V0KCk7CiAgICAgICAgICAg
ICBpZiAoYW5pbSAmJiBhbmltLT5hbmltYXRpbmdQcm9wZXJ0eSgpID09IHByb3BlcnR5KQogICAg
ICAgICAgICAgICAgIGFuaW0tPnNldE92ZXJyaWRkZW4odHJ1ZSk7CiAgICAgICAgIH0KQEAgLTUy
MCw5ICs1MDAsOCBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6b3ZlcnJpZGVJbXBsaWNpdEFu
aW1hdGlvbnMoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkKIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9u
OjpyZXN1bWVPdmVycmlkZGVuSW1wbGljaXRBbmltYXRpb25zKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHkpCiB7CiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBDU1NQ
cm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25z
LmVuZCgpOwotICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOworICAg
ICAgICBmb3IgKGF1dG8mIGl0IDogbV90cmFuc2l0aW9ucykgeworICAgICAgICAgICAgSW1wbGlj
aXRBbmltYXRpb24qIGFuaW0gPSBpdC52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChhbmlt
ICYmIGFuaW0tPmFuaW1hdGluZ1Byb3BlcnR5KCkgPT0gcHJvcGVydHkpCiAgICAgICAgICAgICAg
ICAgYW5pbS0+c2V0T3ZlcnJpZGRlbihmYWxzZSk7CiAgICAgICAgIH0KQEAgLTUzMywxOCArNTEy
LDE2IEBAIGJvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjppc0FuaW1hdGluZ1Byb3BlcnR5KENTU1By
b3BlcnR5SUQgcHJvcGVydHksIGJvb2wgYWNjZWxlCiB7CiAgICAgaWYgKCFtX2tleWZyYW1lQW5p
bWF0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tD
b25zaXN0ZW5jeSgpOwotICAgICAgICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBh
bmltYXRpb25zRW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7Ci0gICAgICAgIGZvciAo
QW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9u
cy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBLZXlm
cmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsKKyAgICAgICAgZm9yIChhdXRv
JiBpdCA6IG1fa2V5ZnJhbWVBbmltYXRpb25zKSB7CisgICAgICAgICAgICBLZXlmcmFtZUFuaW1h
dGlvbiogYW5pbSA9IGl0LnZhbHVlLmdldCgpOwogICAgICAgICAgICAgaWYgKGFuaW0gJiYgYW5p
bS0+aXNBbmltYXRpbmdQcm9wZXJ0eShwcm9wZXJ0eSwgYWNjZWxlcmF0ZWRPbmx5LCBydW5uaW5n
U3RhdGUpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQog
CiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBDU1NQcm9wZXJ0
eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNp
dGlvbnMuZW5kKCk7Ci0gICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zaXRpb25z
RW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT52
YWx1ZS5nZXQoKTsKKyAgICAgICAgZm9yIChhdXRvJiBpdCA6IG1fdHJhbnNpdGlvbnMpIHsKKyAg
ICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQudmFsdWUuZ2V0KCk7CiAgICAg
ICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBh
Y2NlbGVyYXRlZE9ubHksIHJ1bm5pbmdTdGF0ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KQEAgLTU4MCw5ICs1NTcsOCBAQCBib29sIENvbXBvc2l0ZUFuaW1hdGlv
bjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGRvdWJsZSB0
KQogICAgICAgICAvLyBUaGlzIGNvZGUgaXMgb25seSB1c2VkIGZvciB0ZXN0aW5nLCBzbyBwZXJm
b3JtYW5jZSBpcyBub3QgY3JpdGljYWwgaGVyZS4KICAgICAgICAgSGFzaFNldDxDU1NQcm9wZXJ0
eUlEPiBzaG9ydGhhbmRQcm9wZXJ0aWVzID0gQ1NTUHJvcGVydHlBbmltYXRpb246OmFuaW1hdGFi
bGVTaG9ydGhhbmRzQWZmZWN0aW5nUHJvcGVydHkocHJvcGVydHkpOwogICAgICAgICBib29sIGFu
eVBhdXNlZCA9IGZhbHNlOwotICAgICAgICBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBzaG9ydGhhbmRQcm9wZXJ0aWVzLmVuZCgpOwotICAgICAgICBmb3IgKEhh
c2hTZXQ8Q1NTUHJvcGVydHlJRD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gc2hvcnRoYW5kUHJvcGVy
dGllcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChwYXVzZVRy
YW5zaXRpb25BdFRpbWUoKml0LCB0KSkKKyAgICAgICAgZm9yIChhdXRvIHByb3BlcnR5SUQgOiBz
aG9ydGhhbmRQcm9wZXJ0aWVzKSB7CisgICAgICAgICAgICBpZiAocGF1c2VUcmFuc2l0aW9uQXRU
aW1lKHByb3BlcnR5SUQsIHQpKQogICAgICAgICAgICAgICAgIGFueVBhdXNlZCA9IHRydWU7CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuIGFueVBhdXNlZDsKQEAgLTYwNSwxOCArNTgxLDE2IEBA
IHVuc2lnbmVkIENvbXBvc2l0ZUFuaW1hdGlvbjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkg
Y29uc3QKICAgICAKICAgICBpZiAoIW1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSkgewog
ICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAg
IEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tleWZy
YW1lQW5pbWF0aW9ucy5lbmQoKTsKLSAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1h
dGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0g
aXQtPnZhbHVlLmdldCgpOworICAgICAgICBmb3IgKGF1dG8mIGl0IDogbV9rZXlmcmFtZUFuaW1h
dGlvbnMpIHsKKyAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQudmFsdWUu
Z2V0KCk7CiAgICAgICAgICAgICBpZiAoYW5pbS0+cnVubmluZygpKQogICAgICAgICAgICAgICAg
ICsrY291bnQ7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJh
dG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKLSAgICAgICAgZm9yIChD
U1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlv
bnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIElt
cGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOworICAgICAgICBmb3IgKGF1
dG8mIGl0IDogbV90cmFuc2l0aW9ucykgeworICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24q
IGFuaW0gPSBpdC52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmIChhbmltLT5ydW5uaW5nKCkp
CiAgICAgICAgICAgICAgICAgKytjb3VudDsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaAppbmRleCA1MDNmYzM0ZTBm
NTYwYWJjNmQ0YWE5ODlmZDY1ZTU2M2MyNjE4YTFmLi5hNTUzZmZjMDE1ZTY4ZjYwOTQ3NDM0ODhh
ZjIyYjAyMjYxYWMyZTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9Db21wb3NpdGVBbmltYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9Db21wb3NpdGVBbmltYXRpb24uaApAQCAtNDUsOCArNDUsOSBAQCBjbGFzcyBSZW5kZXJTdHls
ZTsKIC8vIEEgQ29tcG9zaXRlQW5pbWF0aW9uIHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGFu
aW1hdGlvbnMgdGhhdCBhcmUgcnVubmluZwogLy8gb24gYSBzaW5nbGUgUmVuZGVyRWxlbWVudCwg
c3VjaCBhcyBhIG51bWJlciBvZiBwcm9wZXJ0aWVzIHRyYW5zaXRpb25pbmcgYXQgb25jZS4KIGNs
YXNzIENvbXBvc2l0ZUFuaW1hdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPENvbXBvc2l0ZUFuaW1h
dGlvbj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8Q29tcG9zaXRlQW5pbWF0aW9uPiBjcmVhdGUoQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGUqIGFuaW1hdGlvbkNvbnRyb2xsZXIpCisgICAgc3RhdGljIFJlZjxDb21wb3NpdGVBbmltYXRp
b24+IGNyZWF0ZShBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYgYW5pbWF0aW9uQ29udHJvbGxl
cikKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbXBvc2l0ZUFuaW1hdGlv
bihhbmltYXRpb25Db250cm9sbGVyKSk7CiAgICAgfTsKQEAgLTYxLDcgKzYyLDcgQEAgcHVibGlj
OgogCiAgICAgZG91YmxlIHRpbWVUb05leHRTZXJ2aWNlKCkgY29uc3Q7CiAgICAgCi0gICAgQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGUqIGFuaW1hdGlvbkNvbnRyb2xsZXIoKSBjb25zdCB7IHJl
dHVybiBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7IH0KKyAgICBBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZSYgYW5pbWF0aW9uQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uQ29u
dHJvbGxlcjsgfQogCiAgICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucygpOwogICAgIHZvaWQgcmVz
dW1lQW5pbWF0aW9ucygpOwpAQCAtODUsNyArODYsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJp
dmF0ZToKLSAgICBDb21wb3NpdGVBbmltYXRpb24oQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUq
KTsKKyAgICBDb21wb3NpdGVBbmltYXRpb24oQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUmKTsK
IAogICAgIHZvaWQgdXBkYXRlVHJhbnNpdGlvbnMoUmVuZGVyRWxlbWVudCosIFJlbmRlclN0eWxl
KiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7CiAgICAgdm9pZCB1cGRh
dGVLZXlmcmFtZUFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCosIFJlbmRlclN0eWxlKiBjdXJyZW50
U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7CkBAIC05MywxMyArOTQsMTMgQEAgcHJp
dmF0ZToKICAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8SW1wbGljaXRBbmltYXRpb24+
PiBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNT
dHJpbmdJbXBsKiwgUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPj4gQW5pbWF0aW9uTmFtZU1hcDsK
IAotICAgIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKiBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7
CisgICAgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUmIG1fYW5pbWF0aW9uQ29udHJvbGxlcjsK
ICAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwIG1fdHJhbnNpdGlvbnM7CiAgICAgQW5pbWF0
aW9uTmFtZU1hcCBtX2tleWZyYW1lQW5pbWF0aW9uczsKICAgICBWZWN0b3I8QXRvbWljU3RyaW5n
SW1wbCo+IG1fa2V5ZnJhbWVBbmltYXRpb25PcmRlck1hcDsKICAgICBib29sIG1fc3VzcGVuZGVk
OwogI2lmIEVOQUJMRShDU1NfQU5JTUFUSU9OU19MRVZFTF8yKQotICAgIGJvb2wgbV9oYXNTY3Jv
bGxUcmlnZ2VyZWRBbmltYXRpb247CisgICAgYm9vbCBtX2hhc1Njcm9sbFRyaWdnZXJlZEFuaW1h
dGlvbiB7IGZhbHNlIH07CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcAppbmRleCA4NGEyNGRlMzc5MjkzYjc5
YTc4YWQ1OGEwMjMyODI0ODNiMDQ5ZWFhLi4wYzQ0MGFlZjRlZGMyOGU1MGMyYmRkODVkYmQ3ZDA5
MjVlZGVjMzg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBs
aWNpdEFuaW1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1w
bGljaXRBbmltYXRpb24uY3BwCkBAIC00MSwxMSArNDEsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIEltcGxpY2l0QW5pbWF0aW9uOjpJbXBsaWNpdEFuaW1hdGlvbihjb25zdCBBbmltYXRpb24m
IHRyYW5zaXRpb24sIENTU1Byb3BlcnR5SUQgYW5pbWF0aW5nUHJvcGVydHksIFJlbmRlckVsZW1l
bnQqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltLCBSZW5kZXJTdHlsZSog
ZnJvbVN0eWxlKQogICAgIDogQW5pbWF0aW9uQmFzZSh0cmFuc2l0aW9uLCByZW5kZXJlciwgY29t
cEFuaW0pCisgICAgLCBtX2Zyb21TdHlsZShmcm9tU3R5bGUpCiAgICAgLCBtX3RyYW5zaXRpb25Q
cm9wZXJ0eSh0cmFuc2l0aW9uLnByb3BlcnR5KCkpCiAgICAgLCBtX2FuaW1hdGluZ1Byb3BlcnR5
KGFuaW1hdGluZ1Byb3BlcnR5KQotICAgICwgbV9vdmVycmlkZGVuKGZhbHNlKQotICAgICwgbV9h
Y3RpdmUodHJ1ZSkKLSAgICAsIG1fZnJvbVN0eWxlKGZyb21TdHlsZSkKIHsKICAgICBBU1NFUlQo
YW5pbWF0aW5nUHJvcGVydHkgIT0gQ1NTUHJvcGVydHlJbnZhbGlkKTsKIH0KQEAgLTE4OSw3ICsx
ODcsNyBAQCBib29sIEltcGxpY2l0QW5pbWF0aW9uOjpzZW5kVHJhbnNpdGlvbkV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBkb3VibAogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgICAgICAgICAgLy8gU2NoZWR1bGUgZXZlbnQgaGFuZGxpbmcKLSAgICAgICAg
ICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCktPmFkZEV2ZW50
VG9EaXNwYXRjaChlbGVtZW50LCBldmVudFR5cGUsIHByb3BlcnR5TmFtZSwgZWxhcHNlZFRpbWUp
OworICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIo
KS5hZGRFdmVudFRvRGlzcGF0Y2goZWxlbWVudCwgZXZlbnRUeXBlLCBwcm9wZXJ0eU5hbWUsIGVs
YXBzZWRUaW1lKTsKIAogICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgKHVuYW5p
bWF0ZWQpIHN0eWxlCiAgICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS50
cmFuc2l0aW9uZW5kRXZlbnQgJiYgZWxlbWVudC0+cmVuZGVyZXIoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oCmluZGV4IDUxNGFjZDZm
YjFkMjQwOTE1NDE0ZmFhZTc5MjQ5ZDI0NThkZWY2NjcuLjBkODNhNDc2M2Q5YTVkNzNhMzM5ZmJm
YjY4OTE2ZDQ2OGYzYWFjYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRp
b24vSW1wbGljaXRBbmltYXRpb24uaApAQCAtODcsMTQgKzg3LDE1IEBAIHByaXZhdGU6CiAgICAg
SW1wbGljaXRBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiwgQ1NTUHJvcGVydHlJRCwgUmVuZGVy
RWxlbWVudCosIENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlclN0eWxlKik7CiAgICAgdmlydHVh
bCB+SW1wbGljaXRBbmltYXRpb24oKTsKIAotICAgIENTU1Byb3BlcnR5SUQgbV90cmFuc2l0aW9u
UHJvcGVydHk7IC8vIFRyYW5zaXRpb24gcHJvcGVydHkgYXMgc3BlY2lmaWVkIGluIHRoZSBSZW5k
ZXJTdHlsZS4KLSAgICBDU1NQcm9wZXJ0eUlEIG1fYW5pbWF0aW5nUHJvcGVydHk7IC8vIFNwZWNp
ZmljIHByb3BlcnR5IGZvciB0aGlzIEltcGxpY2l0QW5pbWF0aW9uCi0gICAgYm9vbCBtX292ZXJy
aWRkZW47ICAgICAgICAgIC8vIHRydWUgd2hlbiB0aGVyZSBpcyBhIGtleWZyYW1lIGFuaW1hdGlv
biB0aGF0IG92ZXJyaWRlcyB0aGUgdHJhbnNpdGlvbmluZyBwcm9wZXJ0eQotICAgIGJvb2wgbV9h
Y3RpdmU7ICAgICAgICAgICAgICAvLyB1c2VkIGZvciBjdWxsaW5nIHRoZSBsaXN0IG9mIHRyYW5z
aXRpb25zCi0KICAgICAvLyBUaGUgdHdvIHN0eWxlcyB0aGF0IHdlIGFyZSBibGVuZGluZy4KICAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IG1fZnJvbVN0eWxlOwogICAgIFJlZlB0cjxSZW5kZXJTdHls
ZT4gbV90b1N0eWxlOworCisgICAgQ1NTUHJvcGVydHlJRCBtX3RyYW5zaXRpb25Qcm9wZXJ0eTsg
Ly8gVHJhbnNpdGlvbiBwcm9wZXJ0eSBhcyBzcGVjaWZpZWQgaW4gdGhlIFJlbmRlclN0eWxlLgor
ICAgIENTU1Byb3BlcnR5SUQgbV9hbmltYXRpbmdQcm9wZXJ0eTsgLy8gU3BlY2lmaWMgcHJvcGVy
dHkgZm9yIHRoaXMgSW1wbGljaXRBbmltYXRpb24KKworICAgIGJvb2wgbV9hY3RpdmUgeyB0cnVl
IH07IC8vIFVzZWQgZm9yIGN1bGxpbmcgdGhlIGxpc3Qgb2YgdHJhbnNpdGlvbnMuCisgICAgYm9v
bCBtX292ZXJyaWRkZW4geyBmYWxzZSB9OyAvLyBUcnVlIHdoZW4gdGhlcmUgaXMgYSBrZXlmcmFt
ZSBhbmltYXRpb24gdGhhdCBvdmVycmlkZXMgdGhlIHRyYW5zaXRpb25pbmcgcHJvcGVydHkKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNwcAppbmRleCBkYjZiMzc4OTQyNzU2MGY2NDZk
MzNhYzI1NzJhNDVmZTRmM2U5OGYxLi5kZWUxNzY2Zjg4MDgyY2QyZDNmMTNiYzE0ZjQzODk3OTRh
ZmMzZTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFt
ZUFuaW1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJh
bWVBbmltYXRpb24uY3BwCkBAIC00NCw5ICs0NCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIEtl
eWZyYW1lQW5pbWF0aW9uOjpLZXlmcmFtZUFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mIGFuaW1h
dGlvbiwgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIGludCBpbmRleCwgQ29tcG9zaXRlQW5pbWF0
aW9uKiBjb21wb3NpdGVBbmltYXRpb24sIFJlbmRlclN0eWxlKiB1bmFuaW1hdGVkU3R5bGUpCiAg
ICAgOiBBbmltYXRpb25CYXNlKGFuaW1hdGlvbiwgcmVuZGVyZXIsIGNvbXBvc2l0ZUFuaW1hdGlv
bikKICAgICAsIG1fa2V5ZnJhbWVzKGFuaW1hdGlvbi5uYW1lKCkpCi0gICAgLCBtX2luZGV4KGlu
ZGV4KQotICAgICwgbV9zdGFydEV2ZW50RGlzcGF0Y2hlZChmYWxzZSkKICAgICAsIG1fdW5hbmlt
YXRlZFN0eWxlKHVuYW5pbWF0ZWRTdHlsZSkKKyAgICAsIG1faW5kZXgoaW5kZXgpCiB7CiAgICAg
Ly8gR2V0IHRoZSBrZXlmcmFtZSBSZW5kZXJTdHlsZXMKICAgICBpZiAobV9vYmplY3QgJiYgbV9v
YmplY3QtPmVsZW1lbnQoKSkKQEAgLTE1NywxNSArMTU2LDE0IEBAIHZvaWQgS2V5ZnJhbWVBbmlt
YXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24sIFJl
bmRlckVsCiAKICAgICAvLyBGSVhNRTogd2UgbmVlZCB0byBiZSBtb3JlIGVmZmljaWVudCBhYm91
dCBkZXRlcm1pbmluZyB3aGljaCBrZXlmcmFtZXMgd2UgYXJlIGFuaW1hdGluZyBiZXR3ZWVuLgog
ICAgIC8vIFdlIHNob3VsZCBjYWNoZSB0aGUgbGFzdCBwYWlyIG9yIHNvbWV0aGluZy4KLSAgICBI
YXNoU2V0PENTU1Byb3BlcnR5SUQ+Ojpjb25zdF9pdGVyYXRvciBlbmRQcm9wZXJ0aWVzID0gbV9r
ZXlmcmFtZXMuZW5kUHJvcGVydGllcygpOwotICAgIGZvciAoSGFzaFNldDxDU1NQcm9wZXJ0eUlE
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lcy5iZWdpblByb3BlcnRpZXMoKTsgaXQg
IT0gZW5kUHJvcGVydGllczsgKytpdCkgeworICAgIGZvciAoYXV0byBwcm9wZXJ0eUlEIDogbV9r
ZXlmcmFtZXMucHJvcGVydGllcygpKSB7CiAgICAgICAgIC8vIEdldCB0aGUgZnJvbS90byBzdHls
ZXMgYW5kIHByb2dyZXNzIGJldHdlZW4KICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIGZyb21T
dHlsZSA9IG51bGxwdHI7CiAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiB0b1N0eWxlID0gbnVs
bHB0cjsKICAgICAgICAgZG91YmxlIHByb2dyZXNzID0gMDsKLSAgICAgICAgZmV0Y2hJbnRlcnZh
bEVuZHBvaW50c0ZvclByb3BlcnR5KCppdCwgZnJvbVN0eWxlLCB0b1N0eWxlLCBwcm9ncmVzcyk7
CisgICAgICAgIGZldGNoSW50ZXJ2YWxFbmRwb2ludHNGb3JQcm9wZXJ0eShwcm9wZXJ0eUlELCBm
cm9tU3R5bGUsIHRvU3R5bGUsIHByb2dyZXNzKTsKIAotICAgICAgICBib29sIG5lZWRzQW5pbSA9
IENTU1Byb3BlcnR5QW5pbWF0aW9uOjpibGVuZFByb3BlcnRpZXModGhpcywgKml0LCBhbmltYXRl
ZFN0eWxlLmdldCgpLCBmcm9tU3R5bGUsIHRvU3R5bGUsIHByb2dyZXNzKTsKKyAgICAgICAgYm9v
bCBuZWVkc0FuaW0gPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQcm9wZXJ0aWVzKHRoaXMs
IHByb3BlcnR5SUQsIGFuaW1hdGVkU3R5bGUuZ2V0KCksIGZyb21TdHlsZSwgdG9TdHlsZSwgcHJv
Z3Jlc3MpOwogICAgICAgICBpZiAoIW5lZWRzQW5pbSkKICAgICAgICAgICAgIC8vIElmIHdlIGFy
ZSBydW5uaW5nIGFuIGFjY2VsZXJhdGVkIGFuaW1hdGlvbiwgc2V0IGEgZmxhZyBpbiB0aGUgc3R5
bGUKICAgICAgICAgICAgIC8vIHRvIGluZGljYXRlIGl0LiBUaGlzIGNhbiBiZSB1c2VkIHRvIG1h
a2Ugc3VyZSB3ZSBnZXQgYW4gdXBkYXRlZApAQCAtMTg3LDE1ICsxODUsMTQgQEAgdm9pZCBLZXlm
cmFtZUFuaW1hdGlvbjo6Z2V0QW5pbWF0ZWRTdHlsZShSZWZQdHI8UmVuZGVyU3R5bGU+JiBhbmlt
YXRlZFN0eWxlKQogICAgIGlmICghYW5pbWF0ZWRTdHlsZSkKICAgICAgICAgYW5pbWF0ZWRTdHls
ZSA9IFJlbmRlclN0eWxlOjpjbG9uZSgmbV9vYmplY3QtPnN0eWxlKCkpOwogCi0gICAgSGFzaFNl
dDxDU1NQcm9wZXJ0eUlEPjo6Y29uc3RfaXRlcmF0b3IgZW5kUHJvcGVydGllcyA9IG1fa2V5ZnJh
bWVzLmVuZFByb3BlcnRpZXMoKTsKLSAgICBmb3IgKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZXMuYmVnaW5Qcm9wZXJ0aWVzKCk7IGl0ICE9IGVu
ZFByb3BlcnRpZXM7ICsraXQpIHsKKyAgICBmb3IgKGF1dG8gcHJvcGVydHlJRCA6IG1fa2V5ZnJh
bWVzLnByb3BlcnRpZXMoKSkgewogICAgICAgICAvLyBHZXQgdGhlIGZyb20vdG8gc3R5bGVzIGFu
ZCBwcm9ncmVzcyBiZXR3ZWVuCiAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5bGUg
PSBudWxscHRyOwogICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogdG9TdHlsZSA9IG51bGxwdHI7
CiAgICAgICAgIGRvdWJsZSBwcm9ncmVzcyA9IDA7Ci0gICAgICAgIGZldGNoSW50ZXJ2YWxFbmRw
b2ludHNGb3JQcm9wZXJ0eSgqaXQsIGZyb21TdHlsZSwgdG9TdHlsZSwgcHJvZ3Jlc3MpOworICAg
ICAgICBmZXRjaEludGVydmFsRW5kcG9pbnRzRm9yUHJvcGVydHkocHJvcGVydHlJRCwgZnJvbVN0
eWxlLCB0b1N0eWxlLCBwcm9ncmVzcyk7CiAKLSAgICAgICAgQ1NTUHJvcGVydHlBbmltYXRpb246
OmJsZW5kUHJvcGVydGllcyh0aGlzLCAqaXQsIGFuaW1hdGVkU3R5bGUuZ2V0KCksIGZyb21TdHls
ZSwgdG9TdHlsZSwgcHJvZ3Jlc3MpOworICAgICAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Ymxl
bmRQcm9wZXJ0aWVzKHRoaXMsIHByb3BlcnR5SUQsIGFuaW1hdGVkU3R5bGUuZ2V0KCksIGZyb21T
dHlsZSwgdG9TdHlsZSwgcHJvZ3Jlc3MpOwogICAgIH0KIH0KIApAQCAtMjExLDIwICsyMDgsMTcg
QEAgYm9vbCBLZXlmcmFtZUFuaW1hdGlvbjo6Y29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0
aW9uKExheW91dFJlY3QmIGJvdW5kcykgY28KIAogICAgIEZsb2F0UmVjdCBjdW11bGF0aXZlQm91
bmRzID0gYm91bmRzOwogCi0gICAgc2l6ZV90IG51bUtleWZyYW1lcyA9IG1fa2V5ZnJhbWVzLnNp
emUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUtleWZyYW1lczsgKytpKSB7Ci0g
ICAgICAgIGNvbnN0IEtleWZyYW1lVmFsdWUmIGN1cnJLZXlGcmFtZSA9IG1fa2V5ZnJhbWVzW2ld
OwotCi0gICAgICAgIGlmICghY3VycktleUZyYW1lLmNvbnRhaW5zUHJvcGVydHkoQ1NTUHJvcGVy
dHlUcmFuc2Zvcm0pKQorICAgIGZvciAoYXV0byYga2V5ZnJhbWUgOiBtX2tleWZyYW1lcy5rZXlm
cmFtZXMoKSkgeworICAgICAgICBpZiAoIWtleWZyYW1lLmNvbnRhaW5zUHJvcGVydHkoQ1NTUHJv
cGVydHlUcmFuc2Zvcm0pKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgTGF5b3V0
UmVjdCBrZXlmcmFtZUJvdW5kcyA9IGJvdW5kczsKICAgICAgICAgCiAgICAgICAgIGJvb2wgY2Fu
Q29tcHV0ZTsKICAgICAgICAgaWYgKGlzVHJhbnNmb3JtRnVuY3Rpb25MaXN0VmFsaWQoKSkKLSAg
ICAgICAgICAgIGNhbkNvbXB1dGUgPSBjb21wdXRlVHJhbnNmb3JtZWRFeHRlbnRWaWFUcmFuc2Zv
cm1MaXN0KHJlbmRlcmVyQm94LCAqY3VycktleUZyYW1lLnN0eWxlKCksIGtleWZyYW1lQm91bmRz
KTsKKyAgICAgICAgICAgIGNhbkNvbXB1dGUgPSBjb21wdXRlVHJhbnNmb3JtZWRFeHRlbnRWaWFU
cmFuc2Zvcm1MaXN0KHJlbmRlcmVyQm94LCAqa2V5ZnJhbWUuc3R5bGUoKSwga2V5ZnJhbWVCb3Vu
ZHMpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYW5Db21wdXRlID0gY29tcHV0ZVRyYW5z
Zm9ybWVkRXh0ZW50VmlhTWF0cml4KHJlbmRlcmVyQm94LCAqY3VycktleUZyYW1lLnN0eWxlKCks
IGtleWZyYW1lQm91bmRzKTsKKyAgICAgICAgICAgIGNhbkNvbXB1dGUgPSBjb21wdXRlVHJhbnNm
b3JtZWRFeHRlbnRWaWFNYXRyaXgocmVuZGVyZXJCb3gsICprZXlmcmFtZS5zdHlsZSgpLCBrZXlm
cmFtZUJvdW5kcyk7CiAgICAgICAgIAogICAgICAgICBpZiAoIWNhbkNvbXB1dGUpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNDQsNyArMjM4LDcgQEAgYm9vbCBLZXlmcmFtZUFuaW1h
dGlvbjo6aGFzQW5pbWF0aW9uRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkgY29u
c3QKIGJvb2wgS2V5ZnJhbWVBbmltYXRpb246OnN0YXJ0QW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zm
c2V0KQogewogICAgIGlmIChtX29iamVjdCAmJiBtX29iamVjdC0+aXNDb21wb3NpdGVkKCkpCi0g
ICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oKm1fb2JqZWN0KS5z
dGFydEFuaW1hdGlvbih0aW1lT2Zmc2V0LCBtX2FuaW1hdGlvbi5nZXQoKSwgbV9rZXlmcmFtZXMp
OworICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94TW9kZWxPYmplY3Q+KCptX29iamVj
dCkuc3RhcnRBbmltYXRpb24odGltZU9mZnNldCwgJm1fYW5pbWF0aW9uLmdldCgpLCBtX2tleWZy
YW1lcyk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0zMjIsNyArMzE2LDcgQEAgYm9vbCBL
ZXlmcmFtZUFuaW1hdGlvbjo6c2VuZEFuaW1hdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYg
ZXZlbnRUeXBlLCBkb3VibGUKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAv
LyBTY2hlZHVsZSBldmVudCBoYW5kbGluZwotICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+
YW5pbWF0aW9uQ29udHJvbGxlcigpLT5hZGRFdmVudFRvRGlzcGF0Y2goZWxlbWVudCwgZXZlbnRU
eXBlLCBtX2tleWZyYW1lcy5hbmltYXRpb25OYW1lKCksIGVsYXBzZWRUaW1lKTsKKyAgICAgICAg
bV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRFdmVudFRvRGlz
cGF0Y2goZWxlbWVudCwgZXZlbnRUeXBlLCBtX2tleWZyYW1lcy5hbmltYXRpb25OYW1lKCksIGVs
YXBzZWRUaW1lKTsKIAogICAgICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCAodW5hbmltYXRl
ZCkgc3R5bGUKICAgICAgICAgaWYgKChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLndlYmtpdEFu
aW1hdGlvbkVuZEV2ZW50IHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuYW5pbWF0aW9uZW5k
RXZlbnQpICYmIGVsZW1lbnQtPnJlbmRlcmVyKCkpCkBAIC0zMzcsMTcgKzMzMSwxNSBAQCBib29s
IEtleWZyYW1lQW5pbWF0aW9uOjpzZW5kQW5pbWF0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5n
JiBldmVudFR5cGUsIGRvdWJsZQogdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6b3ZlcnJpZGVBbmlt
YXRpb25zKCkKIHsKICAgICAvLyBUaGlzIHdpbGwgb3ZlcnJpZGUgaW1wbGljaXQgYW5pbWF0aW9u
cyB0aGF0IG1hdGNoIHRoZSBwcm9wZXJ0aWVzIGluIHRoZSBrZXlmcmFtZSBhbmltYXRpb24KLSAg
ICBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2tleWZyYW1l
cy5lbmRQcm9wZXJ0aWVzKCk7Ci0gICAgZm9yIChIYXNoU2V0PENTU1Byb3BlcnR5SUQ+Ojpjb25z
dF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVzLmJlZ2luUHJvcGVydGllcygpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgIGNvbXBvc2l0ZUFuaW1hdGlvbigpLT5vdmVycmlkZUltcGxpY2l0QW5p
bWF0aW9ucygqaXQpOworICAgIGZvciAoYXV0byBwcm9wZXJ0eUlEIDogbV9rZXlmcmFtZXMucHJv
cGVydGllcygpKQorICAgICAgICBjb21wb3NpdGVBbmltYXRpb24oKS0+b3ZlcnJpZGVJbXBsaWNp
dEFuaW1hdGlvbnMocHJvcGVydHlJRCk7CiB9CiAKIHZvaWQgS2V5ZnJhbWVBbmltYXRpb246OnJl
c3VtZU92ZXJyaWRkZW5BbmltYXRpb25zKCkKIHsKICAgICAvLyBUaGlzIHdpbGwgcmVzdW1lIG92
ZXJyaWRkZW4gaW1wbGljaXQgYW5pbWF0aW9ucwotICAgIEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD46
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fa2V5ZnJhbWVzLmVuZFByb3BlcnRpZXMoKTsKLSAgICBm
b3IgKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFt
ZXMuYmVnaW5Qcm9wZXJ0aWVzKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgY29tcG9zaXRl
QW5pbWF0aW9uKCktPnJlc3VtZU92ZXJyaWRkZW5JbXBsaWNpdEFuaW1hdGlvbnMoKml0KTsKKyAg
ICBmb3IgKGF1dG8gcHJvcGVydHlJRCA6IG1fa2V5ZnJhbWVzLnByb3BlcnRpZXMoKSkKKyAgICAg
ICAgY29tcG9zaXRlQW5pbWF0aW9uKCktPnJlc3VtZU92ZXJyaWRkZW5JbXBsaWNpdEFuaW1hdGlv
bnMocHJvcGVydHlJRCk7CiB9CiAKIGJvb2wgS2V5ZnJhbWVBbmltYXRpb246OmFmZmVjdHNQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KSBjb25zdApAQCAtNDQ3LDExICs0MzksMTAgQEAg
ZG91YmxlIEtleWZyYW1lQW5pbWF0aW9uOjp0aW1lVG9OZXh0U2VydmljZSgpCiAgICAgICAgIAog
ICAgIC8vIEEgcmV0dXJuIHZhbHVlIG9mIDAgbWVhbnMgd2UgbmVlZCBzZXJ2aWNlLiBCdXQgaWYg
d2Ugb25seSBoYXZlIGFjY2VsZXJhdGVkIGFuaW1hdGlvbnMgd2UgCiAgICAgLy8gb25seSBuZWVk
IHNlcnZpY2UgYXQgdGhlIGVuZCBvZiB0aGUgdHJhbnNpdGlvbgotICAgIEhhc2hTZXQ8Q1NTUHJv
cGVydHlJRD46OmNvbnN0X2l0ZXJhdG9yIGVuZFByb3BlcnRpZXMgPSBtX2tleWZyYW1lcy5lbmRQ
cm9wZXJ0aWVzKCk7CiAgICAgYm9vbCBhY2NlbGVyYXRlZFByb3BlcnRpZXNPbmx5ID0gdHJ1ZTsK
ICAgICAKLSAgICBmb3IgKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9rZXlmcmFtZXMuYmVnaW5Qcm9wZXJ0aWVzKCk7IGl0ICE9IGVuZFByb3BlcnRpZXM7ICsr
aXQpIHsKLSAgICAgICAgaWYgKCFDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0aW9uT2ZQcm9w
ZXJ0eUlzQWNjZWxlcmF0ZWQoKml0KSB8fCAhaXNBY2NlbGVyYXRlZCgpKSB7CisgICAgZm9yIChh
dXRvIHByb3BlcnR5SUQgOiBtX2tleWZyYW1lcy5wcm9wZXJ0aWVzKCkpIHsKKyAgICAgICAgaWYg
KCFDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0aW9uT2ZQcm9wZXJ0eUlzQWNjZWxlcmF0ZWQo
cHJvcGVydHlJRCkgfHwgIWlzQWNjZWxlcmF0ZWQoKSkgewogICAgICAgICAgICAgYWNjZWxlcmF0
ZWRQcm9wZXJ0aWVzT25seSA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0
aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5o
CmluZGV4IDJlZGRkNzE3OWM5YWUyYmY3YzlmZjk1NDhkNGFjY2MzZThmNmUyMjEuLjBiNTUyODc0
OWEyMTZlNGQ1NTkxMjBlNjhkMGQ5OTA3MWJhMzRiMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaApAQCAtOTMsMTUgKzkzLDExIEBA
IHByaXZhdGU6CiAgICAgLy8gR2V0IHRoZSBzdHlsZXMgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSBz
dXJyb3VuZGluZyB0aGUgY3VycmVudCBhbmltYXRpb24gdGltZSBhbmQgdGhlIHByb2dyZXNzIGJl
dHdlZW4gdGhlbS4KICAgICB2b2lkIGZldGNoSW50ZXJ2YWxFbmRwb2ludHNGb3JQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSomIGZyb21TdHlsZSwgY29uc3QgUmVuZGVy
U3R5bGUqJiB0b1N0eWxlLCBkb3VibGUmIHByb2dyZXNzKSBjb25zdDsKIAotICAgIC8vIFRoZSBr
ZXlmcmFtZXMgdGhhdCB3ZSBhcmUgYmxlbmRpbmcuCiAgICAgS2V5ZnJhbWVMaXN0IG1fa2V5ZnJh
bWVzOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV91bmFuaW1hdGVkU3R5bGU7IC8vIFRoZSBz
dHlsZSBqdXN0IGJlZm9yZSB3ZSBzdGFydGVkIGFuaW1hdGlvbgogCi0gICAgLy8gVGhlIG9yZGVy
IGluIHdoaWNoIHRoaXMgYW5pbWF0aW9uIGFwcGVhcnMgaW4gdGhlIGFuaW1hdGlvbi1uYW1lIHN0
eWxlLgotICAgIGludCBtX2luZGV4OwotICAgIGJvb2wgbV9zdGFydEV2ZW50RGlzcGF0Y2hlZDsK
LQotICAgIC8vIFRoZSBzdHlsZSBqdXN0IGJlZm9yZSB3ZSBzdGFydGVkIGFuaW1hdGlvbgotICAg
IFJlZlB0cjxSZW5kZXJTdHlsZT4gbV91bmFuaW1hdGVkU3R5bGU7CisgICAgaW50IG1faW5kZXg7
IC8vIFRoZSBvcmRlciBpbiB3aGljaCB0aGlzIGFuaW1hdGlvbiBhcHBlYXJzIGluIHRoZSBhbmlt
YXRpb24tbmFtZSBzdHlsZS4KKyAgICBib29sIG1fc3RhcnRFdmVudERpc3BhdGNoZWQgeyBmYWxz
ZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uLmNwcAppbmRleCAxODk2Y2IzYmViOTY5MmYxODY0
MWYwNDI0MzgxMjU2ZGQ3ZjY5YWI0Li5kNjc3MGE0NTMwNjM4NDJlMzM2Nzg0ZDRjNThiMzM5NGI0
OTA3YTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vQW5p
bWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0
aW9uLmNwcApAQCAtMTI1LDQwICsxMjUsMzcgQEAgQW5pbWF0aW9uOjp+QW5pbWF0aW9uKCkKIHsK
IH0KIAotYm9vbCBBbmltYXRpb246OmFuaW1hdGlvbnNNYXRjaChjb25zdCBBbmltYXRpb24qIG8s
IGJvb2wgbWF0Y2hQbGF5U3RhdGVzKSBjb25zdAorYm9vbCBBbmltYXRpb246OmFuaW1hdGlvbnNN
YXRjaChjb25zdCBBbmltYXRpb24mIG90aGVyLCBib29sIG1hdGNoUGxheVN0YXRlcykgY29uc3QK
IHsKLSAgICBpZiAoIW8pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBib29sIHJl
c3VsdCA9IG1fbmFtZSA9PSBvLT5tX25hbWUKLSAgICAgICAgICAgICAgICAgICYmIG1fcHJvcGVy
dHkgPT0gby0+bV9wcm9wZXJ0eSAKLSAgICAgICAgICAgICAgICAgICYmIG1fbW9kZSA9PSBvLT5t
X21vZGUKLSAgICAgICAgICAgICAgICAgICYmIG1faXRlcmF0aW9uQ291bnQgPT0gby0+bV9pdGVy
YXRpb25Db3VudAotICAgICAgICAgICAgICAgICAgJiYgbV9kZWxheSA9PSBvLT5tX2RlbGF5Ci0g
ICAgICAgICAgICAgICAgICAmJiBtX2R1cmF0aW9uID09IG8tPm1fZHVyYXRpb24KLSAgICAgICAg
ICAgICAgICAgICYmICoobV90aW1pbmdGdW5jdGlvbi5nZXQoKSkgPT0gKihvLT5tX3RpbWluZ0Z1
bmN0aW9uLmdldCgpKQorICAgIGJvb2wgcmVzdWx0ID0gbV9uYW1lID09IG90aGVyLm1fbmFtZQor
ICAgICAgICAmJiBtX3Byb3BlcnR5ID09IG90aGVyLm1fcHJvcGVydHkKKyAgICAgICAgJiYgbV9t
b2RlID09IG90aGVyLm1fbW9kZQorICAgICAgICAmJiBtX2l0ZXJhdGlvbkNvdW50ID09IG90aGVy
Lm1faXRlcmF0aW9uQ291bnQKKyAgICAgICAgJiYgbV9kZWxheSA9PSBvdGhlci5tX2RlbGF5Cisg
ICAgICAgICYmIG1fZHVyYXRpb24gPT0gb3RoZXIubV9kdXJhdGlvbgorICAgICAgICAmJiAqKG1f
dGltaW5nRnVuY3Rpb24uZ2V0KCkpID09ICoob3RoZXIubV90aW1pbmdGdW5jdGlvbi5nZXQoKSkK
ICNpZiBFTkFCTEUoQ1NTX0FOSU1BVElPTlNfTEVWRUxfMikKLSAgICAgICAgICAgICAgICAgICYm
ICoobV90cmlnZ2VyLmdldCgpKSA9PSAqKG8tPm1fdHJpZ2dlci5nZXQoKSkKKyAgICAgICAgJiYg
KihtX3RyaWdnZXIuZ2V0KCkpID09ICoob3RoZXIubV90cmlnZ2VyLmdldCgpKQogI2VuZGlmCi0g
ICAgICAgICAgICAgICAgICAmJiBtX2RpcmVjdGlvbiA9PSBvLT5tX2RpcmVjdGlvbgotICAgICAg
ICAgICAgICAgICAgJiYgbV9maWxsTW9kZSA9PSBvLT5tX2ZpbGxNb2RlCi0gICAgICAgICAgICAg
ICAgICAmJiBtX2RlbGF5U2V0ID09IG8tPm1fZGVsYXlTZXQKLSAgICAgICAgICAgICAgICAgICYm
IG1fZGlyZWN0aW9uU2V0ID09IG8tPm1fZGlyZWN0aW9uU2V0Ci0gICAgICAgICAgICAgICAgICAm
JiBtX2R1cmF0aW9uU2V0ID09IG8tPm1fZHVyYXRpb25TZXQKLSAgICAgICAgICAgICAgICAgICYm
IG1fZmlsbE1vZGVTZXQgPT0gby0+bV9maWxsTW9kZVNldAotICAgICAgICAgICAgICAgICAgJiYg
bV9pdGVyYXRpb25Db3VudFNldCA9PSBvLT5tX2l0ZXJhdGlvbkNvdW50U2V0Ci0gICAgICAgICAg
ICAgICAgICAmJiBtX25hbWVTZXQgPT0gby0+bV9uYW1lU2V0Ci0gICAgICAgICAgICAgICAgICAm
JiBtX3Byb3BlcnR5U2V0ID09IG8tPm1fcHJvcGVydHlTZXQKLSAgICAgICAgICAgICAgICAgICYm
IG1fdGltaW5nRnVuY3Rpb25TZXQgPT0gby0+bV90aW1pbmdGdW5jdGlvblNldAorICAgICAgICAm
JiBtX2RpcmVjdGlvbiA9PSBvdGhlci5tX2RpcmVjdGlvbgorICAgICAgICAmJiBtX2ZpbGxNb2Rl
ID09IG90aGVyLm1fZmlsbE1vZGUKKyAgICAgICAgJiYgbV9kZWxheVNldCA9PSBvdGhlci5tX2Rl
bGF5U2V0CisgICAgICAgICYmIG1fZGlyZWN0aW9uU2V0ID09IG90aGVyLm1fZGlyZWN0aW9uU2V0
CisgICAgICAgICYmIG1fZHVyYXRpb25TZXQgPT0gb3RoZXIubV9kdXJhdGlvblNldAorICAgICAg
ICAmJiBtX2ZpbGxNb2RlU2V0ID09IG90aGVyLm1fZmlsbE1vZGVTZXQKKyAgICAgICAgJiYgbV9p
dGVyYXRpb25Db3VudFNldCA9PSBvdGhlci5tX2l0ZXJhdGlvbkNvdW50U2V0CisgICAgICAgICYm
IG1fbmFtZVNldCA9PSBvdGhlci5tX25hbWVTZXQKKyAgICAgICAgJiYgbV9wcm9wZXJ0eVNldCA9
PSBvdGhlci5tX3Byb3BlcnR5U2V0CisgICAgICAgICYmIG1fdGltaW5nRnVuY3Rpb25TZXQgPT0g
b3RoZXIubV90aW1pbmdGdW5jdGlvblNldAogI2lmIEVOQUJMRShDU1NfQU5JTUFUSU9OU19MRVZF
TF8yKQotICAgICAgICAgICAgICAgICAgJiYgbV90cmlnZ2VyU2V0ID09IG8tPm1fdHJpZ2dlclNl
dAorICAgICAgICAmJiBtX3RyaWdnZXJTZXQgPT0gb3RoZXIubV90cmlnZ2VyU2V0CiAjZW5kaWYK
LSAgICAgICAgICAgICAgICAgICYmIG1faXNOb25lID09IG8tPm1faXNOb25lOworICAgICAgICAm
JiBtX2lzTm9uZSA9PSBvdGhlci5tX2lzTm9uZTsKIAogICAgIGlmICghcmVzdWx0KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gIW1hdGNoUGxheVN0YXRlcyB8fCAobV9wbGF5
U3RhdGUgPT0gby0+bV9wbGF5U3RhdGUgJiYgbV9wbGF5U3RhdGVTZXQgPT0gby0+bV9wbGF5U3Rh
dGVTZXQpOworICAgIHJldHVybiAhbWF0Y2hQbGF5U3RhdGVzIHx8IChtX3BsYXlTdGF0ZSA9PSBv
dGhlci5tX3BsYXlTdGF0ZSAmJiBtX3BsYXlTdGF0ZVNldCA9PSBvdGhlci5tX3BsYXlTdGF0ZVNl
dCk7CiB9CiAKIGNvbnN0IFN0cmluZyYgQW5pbWF0aW9uOjppbml0aWFsTmFtZSgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uLmgKaW5kZXggYzY5NThmNDNi
YzlmMDEzMzUwZTQxOGVlOTYyMDg0ODNhZTFhMjQwNS4uNzE4MmM3YzAyYWY3N2FlOTMwYjQ1OThk
N2U2MGM4Nzk0MWI3NjI0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5p
bWF0aW9uL0FuaW1hdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuaW1hdGlv
bi9BbmltYXRpb24uaApAQCAtMTYwLDEwICsxNjAsMTAgQEAgcHVibGljOgogICAgIEFuaW1hdGlv
biYgb3BlcmF0b3I9KGNvbnN0IEFuaW1hdGlvbiYgbyk7CiAKICAgICAvLyByZXR1cm4gdHJ1ZSBp
ZiBhbGwgbWVtYmVycyBvZiB0aGlzIGNsYXNzIG1hdGNoIChleGNsdWRpbmcgbV9uZXh0KQotICAg
IGJvb2wgYW5pbWF0aW9uc01hdGNoKGNvbnN0IEFuaW1hdGlvbiosIGJvb2wgbWF0Y2hQbGF5U3Rh
dGVzID0gdHJ1ZSkgY29uc3Q7CisgICAgYm9vbCBhbmltYXRpb25zTWF0Y2goY29uc3QgQW5pbWF0
aW9uJiwgYm9vbCBtYXRjaFBsYXlTdGF0ZXMgPSB0cnVlKSBjb25zdDsKIAogICAgIC8vIHJldHVy
biB0cnVlIGV2ZXJ5IEFuaW1hdGlvbiBpbiB0aGUgY2hhaW4gKGRlZmluZWQgYnkgbV9uZXh0KSBt
YXRjaCAKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQW5pbWF0aW9uJiBvKSBjb25zdCB7IHJl
dHVybiBhbmltYXRpb25zTWF0Y2goJm8pOyB9CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFu
aW1hdGlvbiYgbykgY29uc3QgeyByZXR1cm4gYW5pbWF0aW9uc01hdGNoKG8pOyB9CiAgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IEFuaW1hdGlvbiYgbykgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9
PSBvKTsgfQogCiAgICAgYm9vbCBmaWxsc0JhY2t3YXJkcygpIGNvbnN0IHsgcmV0dXJuIG1fZmls
bE1vZGVTZXQgJiYgKG1fZmlsbE1vZGUgPT0gQW5pbWF0aW9uRmlsbE1vZGVCYWNrd2FyZHMgfHwg
bV9maWxsTW9kZSA9PSBBbmltYXRpb25GaWxsTW9kZUJvdGgpOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCBkNmM5YzE0MWIxNTVmOGRmNGE0OGRmYjg0ZTQw
MjYxNGU4YmNkNzkxLi43OGY4NDk1Yjg2NTA1MGY1ODdhZjgwNjEwNTRlYzNlMzYyN2FjYWQ4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTM3NTAsNyArMzc1
MCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwKICAgICBMYXllclBhaW50aW5nSW5mbyBwYWlu
dGluZ0luZm8odGhpcywgZW5jbG9zaW5nSW50UmVjdChkYW1hZ2VSZWN0KSwgcGFpbnRCZWhhdmlv
ciwgc3VicGl4ZWxBY2N1bXVsYXRpb24sIHN1YnRyZWVQYWludFJvb3QsICZvdmVybGFwVGVzdFJl
cXVlc3RzKTsKICAgICBwYWludExheWVyKGNvbnRleHQsIHBhaW50aW5nSW5mbywgcGFpbnRGbGFn
cyk7CiAKLSAgICBmb3IgKGF1dG8gaXQgOiBvdmVybGFwVGVzdFJlcXVlc3RzKQorICAgIGZvciAo
YXV0byYgaXQgOiBvdmVybGFwVGVzdFJlcXVlc3RzKQogICAgICAgICBpdC5rZXktPnNldE92ZXJs
YXBUZXN0UmVzdWx0KGZhbHNlKTsKIH0KIApAQCAtMzgyMCw3ICszODIwLDcgQEAgc3RhdGljIHZv
aWQgcGVyZm9ybU92ZXJsYXBUZXN0cyhPdmVybGFwVGVzdFJlcXVlc3RNYXAmIG92ZXJsYXBUZXN0
UmVxdWVzdHMsIGNvbnMKIHsKICAgICBWZWN0b3I8T3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50Kj4g
b3ZlcmxhcHBlZFJlcXVlc3RDbGllbnRzOwogICAgIExheW91dFJlY3QgYm91bmRpbmdCb3ggPSBs
YXllci0+Ym91bmRpbmdCb3gocm9vdExheWVyLCBsYXllci0+b2Zmc2V0RnJvbUFuY2VzdG9yKHJv
b3RMYXllcikpOwotICAgIGZvciAoYXV0byBpdCA6IG92ZXJsYXBUZXN0UmVxdWVzdHMpIHsKKyAg
ICBmb3IgKGF1dG8mIGl0IDogb3ZlcmxhcFRlc3RSZXF1ZXN0cykgewogICAgICAgICBpZiAoIWJv
dW5kaW5nQm94LmludGVyc2VjdHMoaXQudmFsdWUpKQogICAgICAgICAgICAgY29udGludWU7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9LZXlmcmFtZUxpc3Qu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9LZXlmcmFtZUxpc3QuaAppbmRleCBk
ZjJlZDgxNGVjM2JhMjYxNDkzZTYwNTUyY2I2OWQzNGJlYWQ3NWFkLi40ZGY1ZjRkYjY1ZDc5YmY0
YWVlMjcyOTQ5MjE0NTVhZWJiZmI3OGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvS2V5ZnJhbWVMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL0tleWZyYW1lTGlzdC5oCkBAIC04MiwxMyArODIsMTMgQEAgcHVibGljOgogICAgIAog
ICAgIHZvaWQgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wKSB7IG1fcHJvcGVydGllcy5h
ZGQocHJvcCk7IH0KICAgICBib29sIGNvbnRhaW5zUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9w
KSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXMuY29udGFpbnMocHJvcCk7IH0KLSAgICBIYXNo
U2V0PENTU1Byb3BlcnR5SUQ+Ojpjb25zdF9pdGVyYXRvciBiZWdpblByb3BlcnRpZXMoKSBjb25z
dCB7IHJldHVybiBtX3Byb3BlcnRpZXMuYmVnaW4oKTsgfQotICAgIEhhc2hTZXQ8Q1NTUHJvcGVy
dHlJRD46OmNvbnN0X2l0ZXJhdG9yIGVuZFByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX3By
b3BlcnRpZXMuZW5kKCk7IH0KKyAgICBjb25zdCBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiBwcm9w
ZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0aWVzOyB9CiAgICAgCiAgICAgdm9pZCBj
bGVhcigpOwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5ZnJhbWVzLmlz
RW1wdHkoKTsgfQogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9rZXlmcmFtZXMu
c2l6ZSgpOyB9CiAgICAgY29uc3QgS2V5ZnJhbWVWYWx1ZSYgb3BlcmF0b3JbXShzaXplX3QgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5ZnJhbWVzW2luZGV4XTsgfQorICAgIGNvbnN0IFZlY3Rv
cjxLZXlmcmFtZVZhbHVlPiYga2V5ZnJhbWVzKCkgY29uc3QgeyByZXR1cm4gbV9rZXlmcmFtZXM7
IH0KIAogcHJpdmF0ZToKICAgICBBdG9taWNTdHJpbmcgbV9hbmltYXRpb25OYW1lOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251699</attachid>
            <date>2015-04-26 11:08:54 -0700</date>
            <delta_ts>2015-04-26 13:39:33 -0700</delta_ts>
            <desc>For EWS</desc>
            <filename>bug-144196-20150426110746.patch</filename>
            <type>text/plain</type>
            <size>64984</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgzMzU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODAxMmMwYWYyMzQ3N2Fm
ZjI3OGZiMTc0OTBhMWQxMTBjMTliMzFmZi4uMDllYzY2ZDcxNmUzNThhZDk3MzJjMzE2MzQ3N2Jk
MDc1ZmM5YWU5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgzIEBACisyMDE1LTA0LTI2ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIE1vZGVybml6ZSBh
bmltYXRpb25zIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0NDE5NgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorICAgICAg
ICAKKyAgICAgICAgR2VuZXJhbCBjbGVhbnVwIGluIGFuaW1hdGlvbi1yZWxhdGVkIGNvZGUuCisg
ICAgICAgIAorICAgICAgICBVc2UgQysrIHJlZmVyZW5jZXMgd2hlcmUgcG9zc2libGUuIFVzZSBt
b2Rlcm4gbG9vcHMuIE1ha2UgY2xhc3NlcyBmYXN0LWFsbG9jYXRlZC4KKyAgICAgICAgVXNlIEMr
KzExIG1lbWJlciBpbml0aWFsaXphdGlvbi4gT3JkZXIgbWVtYmVyIHZhcmlhYmxlcyB0byBvcHRp
bWl6ZSBwYWNraW5nLgorICAgICAgICAKKyAgICAgICAgVGhpcyByZW1vdmVzIHNvbWUgbnVsbCBj
aGVja3MgaW4gQ29tcG9zaXRlQW5pbWF0aW9uLCBidXQgdGhlIHZhbHVlcyBpbiBtX3RyYW5zaXRp
b25zCisgICAgICAgIGFuZCBtX2tleWZyYW1lQW5pbWF0aW9ucyBjYW4gbmV2ZXIgYmUgbnVsbC4K
KyAgICAgICAgCisgICAgICAgIE5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIHBhZ2Uv
YW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9u
QmFzZTo6QW5pbWF0aW9uQmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25CYXNlOjph
bmltYXRpb25zTWF0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6dXBkYXRl
U3RhdGVNYWNoaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkJhc2U6OmZpcmVBbmlt
YXRpb25FdmVudHNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25CYXNlOjpi
ZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFz
ZTo6Z2V0RWxhcHNlZFRpbWUpOgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJh
c2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkJhc2U6OmFuaW1hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpBbmltYXRpb25CYXNlOjpzZXRBbmltYXRpb24pOgorICAgICAgICAqIHBh
Z2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmVuc3VyZUNvbXBvc2l0ZUFuaW1hdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRkVG9BbmltYXRp
b25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlv
bi9Db21wb3NpdGVBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5p
bWF0aW9uOjpDb21wb3NpdGVBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRl
QW5pbWF0aW9uOjpjbGVhclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFu
aW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRl
QW5pbWF0aW9uOjp1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
ZUFuaW1hdGlvbjo6Z2V0QW5pbWF0ZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3Np
dGVBbmltYXRpb246OnRpbWVUb05leHRTZXJ2aWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0ZUFuaW1hdGlvbjo6Z2V0QW5pbWF0aW9uRm9yUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpjb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpzdXNwZW5kQW5pbWF0aW9u
cyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnJlc3VtZUFuaW1hdGlv
bnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjpvdmVycmlkZUltcGxp
Y2l0QW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnJl
c3VtZU92ZXJyaWRkZW5JbXBsaWNpdEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29t
cG9zaXRlQW5pbWF0aW9uOjppc0FuaW1hdGluZ1Byb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbXBvc2l0ZUFuaW1hdGlvbjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKToKKyAg
ICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0aW9uQ29udHJvbGxlcik6CisgICAgICAgICogcGFnZS9h
bmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1wbGlj
aXRBbmltYXRpb246OkltcGxpY2l0QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltcGxp
Y2l0QW5pbWF0aW9uOjpzZW5kVHJhbnNpdGlvbkV2ZW50KToKKyAgICAgICAgKiBwYWdlL2FuaW1h
dGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SW1wbGljaXRBbmlt
YXRpb246OmNyZWF0ZSk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246OktleWZyYW1lQW5p
bWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lQW5pbWF0aW9uOjphbmltYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lQW5pbWF0aW9uOjpnZXRBbmltYXRlZFN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lQW5pbWF0aW9uOjpjb21wdXRlRXh0ZW50T2ZUcmFu
c2Zvcm1BbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246OnN0
YXJ0QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OktleWZyYW1lQW5pbWF0aW9uOjpzZW5k
QW5pbWF0aW9uRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVBbmltYXRpb246Om92
ZXJyaWRlQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpLZXlmcmFtZUFuaW1hdGlvbjo6
cmVzdW1lT3ZlcnJpZGRlbkFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVB
bmltYXRpb246OnRpbWVUb05leHRTZXJ2aWNlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9L
ZXlmcmFtZUFuaW1hdGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRp
b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uOjphbmltYXRpb25zTWF0Y2gpOgor
ICAgICAgICAqIHBsYXRmb3JtL2FuaW1hdGlvbi9BbmltYXRpb24uaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBh
aW50KToKKyAgICAgICAgKFdlYkNvcmU6OnBlcmZvcm1PdmVybGFwVGVzdHMpOgorICAgICAgICAq
IHJlbmRlcmluZy9zdHlsZS9LZXlmcmFtZUxpc3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OktleWZy
YW1lTGlzdDo6cHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpLZXlmcmFtZUxpc3Q6Omtl
eWZyYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpLZXlmcmFtZUxpc3Q6OmJlZ2luUHJvcGVydGll
cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpLZXlmcmFtZUxpc3Q6OmVuZFByb3BlcnRp
ZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6S2V5ZnJhbWVMaXN0OjpvcGVyYXRvcltd
KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaDoKKwog
MjAxNS0wNC0yNSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAg
ICAgICBFeHBhbmQgY29tcG9zaXRpbmcgY292ZXJhZ2UgcmVjdCB3aGVuIHNjcm9sbGluZyBhbmQg
YW5pbWF0aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Bbmlt
YXRpb25CYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJh
c2UuY3BwCmluZGV4IDhmNWY5N2UwNDJjYzk5ZjA1MjhhNWU0N2NkNGNiNDE0N2U5ZDEzYjQuLjUy
MGM3NzExZDk0ODg4YjNmYTJhYTliMjEyYmQwOTJkNzU1ZmY1YzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCkBAIC03MCwxOSArNzAsMTAg
QEAgc3RhdGljIGlubGluZSBkb3VibGUgc29sdmVTdGVwc0Z1bmN0aW9uKGludCBudW1TdGVwcywg
Ym9vbCBzdGVwQXRTdGFydCwgZG91YmxlIHQKICAgICByZXR1cm4gZmxvb3IobnVtU3RlcHMgKiB0
KSAvIG51bVN0ZXBzOwogfQogCi1BbmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNlKGNvbnN0IEFu
aW1hdGlvbiYgdHJhbnNpdGlvbiwgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIENvbXBvc2l0ZUFu
aW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9uKQotICAgIDogbV9hbmltYXRpb25TdGF0ZShBbmlt
YXRpb25TdGF0ZTo6TmV3KQotICAgICwgbV9pc0FjY2VsZXJhdGVkKGZhbHNlKQotICAgICwgbV90
cmFuc2Zvcm1GdW5jdGlvbkxpc3RWYWxpZChmYWxzZSkKLSAgICAsIG1fZmlsdGVyRnVuY3Rpb25M
aXN0c01hdGNoKGZhbHNlKQotICAgICwgbV9zdGFydFRpbWUoMCkKLSAgICAsIG1fcGF1c2VUaW1l
KC0xKQotICAgICwgbV9yZXF1ZXN0ZWRTdGFydFRpbWUoMCkKLSAgICAsIG1fdG90YWxEdXJhdGlv
bigtMSkKLSAgICAsIG1fbmV4dEl0ZXJhdGlvbkR1cmF0aW9uKC0xKQotICAgICwgbV9vYmplY3Qo
cmVuZGVyZXIpCi0gICAgLCBtX2FuaW1hdGlvbihjb25zdF9jYXN0PEFuaW1hdGlvbio+KCZ0cmFu
c2l0aW9uKSkKK0FuaW1hdGlvbkJhc2U6OkFuaW1hdGlvbkJhc2UoQW5pbWF0aW9uJiBhbmltYXRp
b24sIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0
ZUFuaW1hdGlvbikKKyAgICA6IG1fb2JqZWN0KHJlbmRlcmVyKQogICAgICwgbV9jb21wb3NpdGVB
bmltYXRpb24oY29tcG9zaXRlQW5pbWF0aW9uKQorICAgICwgbV9hbmltYXRpb24oYW5pbWF0aW9u
KQogewogICAgIC8vIENvbXB1dGUgdGhlIHRvdGFsIGR1cmF0aW9uCiAgICAgaWYgKG1fYW5pbWF0
aW9uLT5pdGVyYXRpb25Db3VudCgpID4gMCkKQEAgLTEwNiw5ICs5Nyw5IEBAIGJvb2wgQW5pbWF0
aW9uQmFzZTo6cGxheVN0YXRlUGxheWluZygpIGNvbnN0CiAgICAgcmV0dXJuIG1fYW5pbWF0aW9u
LT5wbGF5U3RhdGUoKSA9PSBBbmltUGxheVN0YXRlUGxheWluZzsKIH0KIAotYm9vbCBBbmltYXRp
b25CYXNlOjphbmltYXRpb25zTWF0Y2goY29uc3QgQW5pbWF0aW9uKiBhbmltKSBjb25zdAorYm9v
bCBBbmltYXRpb25CYXNlOjphbmltYXRpb25zTWF0Y2goY29uc3QgQW5pbWF0aW9uJiBhbmltYXRp
b24pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fYW5pbWF0aW9uLT5hbmltYXRpb25zTWF0Y2goYW5p
bSk7CisgICAgcmV0dXJuIG1fYW5pbWF0aW9uLT5hbmltYXRpb25zTWF0Y2goYW5pbWF0aW9uKTsK
IH0KIAogI2lmICFMT0dfRElTQUJMRUQKQEAgLTE2MSw3ICsxNTIsNyBAQCB2b2lkIEFuaW1hdGlv
bkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0IGlucHV0LCBkb3Vi
bGUgcGFyYW0pCiAgICAgLy8gSWYgd2UgZ2V0IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlJlc3RhcnRB
bmltYXRpb24gdGhlbiB3ZSBmb3JjZSBhIG5ldyBhbmltYXRpb24sIHJlZ2FyZGxlc3Mgb2Ygc3Rh
dGUuCiAgICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6Ok1ha2VOZXcpIHsKICAg
ICAgICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0
eWxlQXZhaWxhYmxlKQotICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlv
bkNvbnRyb2xsZXIoKS0+cmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUodGhpcyk7
CisgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigp
LnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKHRoaXMpOwogICAgICAgICBMT0co
QW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IE5ldyIsIHRoaXMsIG5hbWVGb3JT
dGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7CiAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmlt
YXRpb25TdGF0ZTo6TmV3OwogICAgICAgICBtX3N0YXJ0VGltZSA9IDA7CkBAIC0xNzQsNyArMTY1
LDcgQEAgdm9pZCBBbmltYXRpb25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3Rh
dGVJbnB1dCBpbnB1dCwgZG91YmxlIHBhcmFtKQogCiAgICAgaWYgKGlucHV0ID09IEFuaW1hdGlv
blN0YXRlSW5wdXQ6OlJlc3RhcnRBbmltYXRpb24pIHsKICAgICAgICAgaWYgKG1fYW5pbWF0aW9u
U3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxlKQotICAgICAg
ICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+cmVtb3Zl
RnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUodGhpcyk7CisgICAgICAgICAgICBtX2NvbXBv
c2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLnJlbW92ZUZyb21BbmltYXRpb25z
V2FpdGluZ0ZvclN0eWxlKHRoaXMpOwogICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1h
dGlvblN0YXRlICVzIC0+IE5ldyIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRl
KSk7CiAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6TmV3OwogICAg
ICAgICBtX3N0YXJ0VGltZSA9IDA7CkBAIC0xOTAsNyArMTgxLDcgQEAgdm9pZCBBbmltYXRpb25C
YXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dCBpbnB1dCwgZG91Ymxl
IHBhcmFtKQogCiAgICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OkVuZEFuaW1h
dGlvbikgewogICAgICAgICBpZiAobV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6
U3RhcnRXYWl0U3R5bGVBdmFpbGFibGUpCi0gICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlv
bi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5yZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JT
dHlsZSh0aGlzKTsKKyAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25D
b250cm9sbGVyKCkucmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUodGhpcyk7CiAg
ICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gRG9uZSIsIHRo
aXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7CiAgICAgICAgIG1fYW5pbWF0aW9u
U3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6RG9uZTsKICAgICAgICAgZW5kQW5pbWF0aW9uKCk7CkBA
IC0yMzIsNyArMjIzLDcgQEAgdm9pZCBBbmltYXRpb25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUo
QW5pbWF0aW9uU3RhdGVJbnB1dCBpbnB1dCwgZG91YmxlIHBhcmFtKQogCiAjaWYgRU5BQkxFKENT
U19BTklNQVRJT05TX0xFVkVMXzIpCiAgICAgICAgICAgICBpZiAobV9hbmltYXRpb24tPnRyaWdn
ZXIoKSAmJiBtX2FuaW1hdGlvbi0+dHJpZ2dlcigpLT5pc1Njcm9sbEFuaW1hdGlvblRyaWdnZXIo
KSkKLSAgICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJv
bGxlcigpLT5hZGRUb0FuaW1hdGlvbnNEZXBlbmRlbnRPblNjcm9sbCh0aGlzKTsKKyAgICAgICAg
ICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZFRv
QW5pbWF0aW9uc0RlcGVuZGVudE9uU2Nyb2xsKHRoaXMpOwogI2VuZGlmCiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0VGltZXI6CkBAIC0y
NDMsMTEgKzIzNCwxMSBAQCB2b2lkIEFuaW1hdGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShB
bmltYXRpb25TdGF0ZUlucHV0IGlucHV0LCBkb3VibGUgcGFyYW0pCiAgICAgICAgICAgICAgICAg
Ly8gU3RhcnQgdGltZXIgaGFzIGZpcmVkLCB0ZWxsIHRoZSBhbmltYXRpb24gdG8gc3RhcnQgYW5k
IHdhaXQgZm9yIGl0IHRvIHJlc3BvbmQgd2l0aCBzdGFydCB0aW1lCiAgICAgICAgICAgICAgICAg
TE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBTdGFydFdhaXRTdHlsZUF2
YWlsYWJsZSIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7CiAgICAgICAg
ICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRTdHls
ZUF2YWlsYWJsZTsKLSAgICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0
aW9uQ29udHJvbGxlcigpLT5hZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUodGhpcyk7Cisg
ICAgICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIo
KS5hZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUodGhpcyk7CiAKICAgICAgICAgICAgICAg
ICAvLyBUcmlnZ2VyIGEgcmVuZGVyIHNvIHdlIGNhbiBzdGFydCB0aGUgYW5pbWF0aW9uCiAgICAg
ICAgICAgICAgICAgaWYgKG1fb2JqZWN0ICYmIG1fb2JqZWN0LT5lbGVtZW50KCkpCi0gICAgICAg
ICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkt
PmFkZEVsZW1lbnRDaGFuZ2VUb0Rpc3BhdGNoKCptX29iamVjdC0+ZWxlbWVudCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIo
KS5hZGRFbGVtZW50Q2hhbmdlVG9EaXNwYXRjaCgqbV9vYmplY3QtPmVsZW1lbnQoKSk7CiAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIEFTU0VSVCghcGF1c2VkKCkpOwogICAg
ICAgICAgICAgICAgIC8vIFdlJ3JlIHdhaXRpbmcgZm9yIHRoZSBzdGFydCB0aW1lciB0byBmaXJl
IGFuZCB3ZSBnb3QgYSBwYXVzZS4gQ2FuY2VsIHRoZSB0aW1lciwgcGF1c2UgYW5kIHdhaXQKQEAg
LTI4MSw3ICsyNzIsNyBAQCB2b2lkIEFuaW1hdGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShB
bmltYXRpb25TdGF0ZUlucHV0IGlucHV0LCBkb3VibGUgcGFyYW0pCiAgICAgICAgICAgICAgICAg
ICAgICAgICB0aW1lT2Zmc2V0ID0gLW1fYW5pbWF0aW9uLT5kZWxheSgpOwogICAgICAgICAgICAg
ICAgICAgICBib29sIHN0YXJ0ZWQgPSBzdGFydEFuaW1hdGlvbih0aW1lT2Zmc2V0KTsKIAotICAg
ICAgICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxl
cigpLT5hZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UodGhpcywgc3Rh
cnRlZCk7CisgICAgICAgICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRp
b25Db250cm9sbGVyKCkuYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNl
KHRoaXMsIHN0YXJ0ZWQpOwogICAgICAgICAgICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWQgPSBz
dGFydGVkOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0zMTIs
NyArMzAzLDcgQEAgdm9pZCBBbmltYXRpb25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0
aW9uU3RhdGVJbnB1dCBpbnB1dCwgZG91YmxlIHBhcmFtKQogCiAgICAgICAgICAgICAgICAgLy8g
RGlzcGF0Y2ggdXBkYXRlU3R5bGVJZk5lZWRlZCBzbyB3ZSBjYW4gc3RhcnQgdGhlIGFuaW1hdGlv
bgogICAgICAgICAgICAgICAgIGlmIChtX29iamVjdCAmJiBtX29iamVjdC0+ZWxlbWVudCgpKQot
ICAgICAgICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJv
bGxlcigpLT5hZGRFbGVtZW50Q2hhbmdlVG9EaXNwYXRjaCgqbV9vYmplY3QtPmVsZW1lbnQoKSk7
CisgICAgICAgICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250
cm9sbGVyKCkuYWRkRWxlbWVudENoYW5nZVRvRGlzcGF0Y2goKm1fb2JqZWN0LT5lbGVtZW50KCkp
OwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBXZSBhcmUgcGF1c2lu
ZyB3aGlsZSB3YWl0aW5nIGZvciBhIHN0YXJ0IHJlc3BvbnNlLiBDYW5jZWwgdGhlIGFuaW1hdGlv
biBhbmQgd2FpdC4gV2hlbiAKICAgICAgICAgICAgICAgICAvLyB3ZSB1bnBhdXNlLCB3ZSB3aWxs
IGFjdCBhcyB0aG91Z2ggdGhlIHN0YXJ0IHRpbWVyIGp1c3QgZmlyZWQKQEAgLTM2Myw3ICszNTQs
NyBAQCB2b2lkIEFuaW1hdGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0
ZUlucHV0IGlucHV0LCBkb3VibGUgcGFyYW0pCiAKICAgICAgICAgICAgICAgICAgICAgLy8gRmly
ZSBvZmYgYW5vdGhlciBzdHlsZSBjaGFuZ2Ugc28gd2UgY2FuIHNldCB0aGUgZmluYWwgdmFsdWUK
ICAgICAgICAgICAgICAgICAgICAgaWYgKG1fb2JqZWN0LT5lbGVtZW50KCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigp
LT5hZGRFbGVtZW50Q2hhbmdlVG9EaXNwYXRjaCgqbV9vYmplY3QtPmVsZW1lbnQoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJv
bGxlcigpLmFkZEVsZW1lbnRDaGFuZ2VUb0Rpc3BhdGNoKCptX29iamVjdC0+ZWxlbWVudCgpKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
IC8vIFdlIGFyZSBwYXVzaW5nIHdoaWxlIHJ1bm5pbmcuIENhbmNlbCB0aGUgYW5pbWF0aW9uIGFu
ZCB3YWl0CkBAIC00MzIsNyArNDIzLDcgQEAgdm9pZCBBbmltYXRpb25CYXNlOjp1cGRhdGVTdGF0
ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dCBpbnB1dCwgZG91YmxlIHBhcmFtKQogICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3RhcnRlZCA9IHN0
YXJ0QW5pbWF0aW9uKGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9zdGFydFRpbWUpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNv
bnRyb2xsZXIoKS0+YWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKHRo
aXMsIHN0YXJ0ZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRp
b24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRU
aW1lUmVzcG9uc2UodGhpcywgc3RhcnRlZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2lz
QWNjZWxlcmF0ZWQgPSBzdGFydGVkOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfQpAQCAtNDg3LDcgKzQ3OCw3IEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6ZmlyZUFuaW1h
dGlvbkV2ZW50c0lmTmVlZGVkKCkKICNpZiBFTkFCTEUoQ1NTX0FOSU1BVElPTlNfTEVWRUxfMikK
ICAgICAgICAgaWYgKG1fYW5pbWF0aW9uLT50cmlnZ2VyKCkgJiYgbV9hbmltYXRpb24tPnRyaWdn
ZXIoKS0+aXNTY3JvbGxBbmltYXRpb25UcmlnZ2VyKCkpIHsKICAgICAgICAgICAgIGlmIChtX29i
amVjdCkgewotICAgICAgICAgICAgICAgIGZsb2F0IG9mZnNldCA9IG1fY29tcG9zaXRlQW5pbWF0
aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCktPnNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgICAg
ICAgICAgZmxvYXQgb2Zmc2V0ID0gbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRy
b2xsZXIoKS5zY3JvbGxQb3NpdGlvbigpOwogICAgICAgICAgICAgICAgIFNjcm9sbEFuaW1hdGlv
blRyaWdnZXImIHNjcm9sbFRyaWdnZXIgPSBkb3duY2FzdDxTY3JvbGxBbmltYXRpb25UcmlnZ2Vy
PigqbV9hbmltYXRpb24tPnRyaWdnZXIoKS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgaWYgKG9m
ZnNldCA+IHNjcm9sbFRyaWdnZXIuc3RhcnRWYWx1ZSgpLnZhbHVlKCkpCiAgICAgICAgICAgICAg
ICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydFRpbWVy
RmlyZWQsIDApOwpAQCAtNzI0LDcgKzcxNSw3IEBAIGRvdWJsZSBBbmltYXRpb25CYXNlOjpiZWdp
bkFuaW1hdGlvblVwZGF0ZVRpbWUoKSBjb25zdAogICAgIGlmICghbV9jb21wb3NpdGVBbmltYXRp
b24pCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIG1fY29tcG9zaXRlQW5pbWF0aW9u
LT5hbmltYXRpb25Db250cm9sbGVyKCktPmJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpOworICAg
IHJldHVybiBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmJlZ2lu
QW5pbWF0aW9uVXBkYXRlVGltZSgpOwogfQogCiBkb3VibGUgQW5pbWF0aW9uQmFzZTo6Z2V0RWxh
cHNlZFRpbWUoKSBjb25zdApAQCAtNzMzLDcgKzcyNCw3IEBAIGRvdWJsZSBBbmltYXRpb25CYXNl
OjpnZXRFbGFwc2VkVGltZSgpIGNvbnN0CiAgICAgaWYgKG1fYW5pbWF0aW9uLT50cmlnZ2VyKCkg
JiYgbV9hbmltYXRpb24tPnRyaWdnZXIoKS0+aXNTY3JvbGxBbmltYXRpb25UcmlnZ2VyKCkpIHsK
ICAgICAgICAgU2Nyb2xsQW5pbWF0aW9uVHJpZ2dlciYgc2Nyb2xsVHJpZ2dlciA9IGRvd25jYXN0
PFNjcm9sbEFuaW1hdGlvblRyaWdnZXI+KCptX2FuaW1hdGlvbi0+dHJpZ2dlcigpLmdldCgpKTsK
ICAgICAgICAgaWYgKHNjcm9sbFRyaWdnZXIuaGFzRW5kVmFsdWUoKSAmJiBtX29iamVjdCkgewot
ICAgICAgICAgICAgZmxvYXQgb2Zmc2V0ID0gbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlv
bkNvbnRyb2xsZXIoKS0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICAgICAgICAgIGZsb2F0IG9mZnNl
dCA9IG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkuc2Nyb2xsUG9z
aXRpb24oKTsKICAgICAgICAgICAgIGZsb2F0IHN0YXJ0VmFsdWUgPSBzY3JvbGxUcmlnZ2VyLnN0
YXJ0VmFsdWUoKS52YWx1ZSgpOwogICAgICAgICAgICAgaWYgKG9mZnNldCA8IHN0YXJ0VmFsdWUp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9BbmltYXRpb25CYXNlLmgKaW5kZXggZWZjOTI4ZDQ0OTE2OTVhZTAzYjc4Yzg4OTZmMzhm
OTYxZjcwOTY3Ny4uMzU0ZGE0MDQ0NmFkMGM3ZjA5Njg4MThhOWE5N2FkYTFmMmJjNzU2NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaApAQCAtNTAs
OSArNTAsOSBAQCBjbGFzcyBUaW1pbmdGdW5jdGlvbjsKIGNsYXNzIEFuaW1hdGlvbkJhc2UgOiBw
dWJsaWMgUmVmQ291bnRlZDxBbmltYXRpb25CYXNlPiB7CiAgICAgZnJpZW5kIGNsYXNzIENvbXBv
c2l0ZUFuaW1hdGlvbjsKICAgICBmcmllbmQgY2xhc3MgQ1NTUHJvcGVydHlBbmltYXRpb247Ci0K
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBBbmltYXRpb25CYXNl
KGNvbnN0IEFuaW1hdGlvbiYgdHJhbnNpdGlvbiwgUmVuZGVyRWxlbWVudCosIENvbXBvc2l0ZUFu
aW1hdGlvbiopOworICAgIEFuaW1hdGlvbkJhc2UoQW5pbWF0aW9uJiB0cmFuc2l0aW9uLCBSZW5k
ZXJFbGVtZW50KiwgQ29tcG9zaXRlQW5pbWF0aW9uKik7CiAgICAgdmlydHVhbCB+QW5pbWF0aW9u
QmFzZSgpIHsgfQogCiAgICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIoKSBjb25zdCB7IHJldHVy
biBtX29iamVjdDsgfQpAQCAtMTQ0LDkgKzE0NCwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZp
cmVBbmltYXRpb25FdmVudHNJZk5lZWRlZCgpOwogCi0gICAgYm9vbCBhbmltYXRpb25zTWF0Y2go
Y29uc3QgQW5pbWF0aW9uKikgY29uc3Q7CisgICAgYm9vbCBhbmltYXRpb25zTWF0Y2goY29uc3Qg
QW5pbWF0aW9uJikgY29uc3Q7CiAKLSAgICB2b2lkIHNldEFuaW1hdGlvbihjb25zdCBBbmltYXRp
b24mIGFuaW1hdGlvbikgeyBtX2FuaW1hdGlvbiA9IGNvbnN0X2Nhc3Q8QW5pbWF0aW9uKj4oJmFu
aW1hdGlvbik7IH0KKyAgICBjb25zdCBBbmltYXRpb24mIGFuaW1hdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1fYW5pbWF0aW9uOyB9CisgICAgdm9pZCBzZXRBbmltYXRpb24oQW5pbWF0aW9uJiBhbmlt
YXRpb24pIHsgbV9hbmltYXRpb24gPSBhbmltYXRpb247IH0KIAogICAgIC8vIFJldHVybiB0cnVl
IGlmIHRoaXMgYW5pbWF0aW9uIGlzIG92ZXJyaWRkZW4uIFRoaXMgd2lsbCBvbmx5IGJlIHRoZSBj
YXNlIGZvcgogICAgIC8vIEltcGxpY2l0QW5pbWF0aW9ucyBhbmQgaXMgdXNlZCB0byBkZXRlcm1p
bmUgd2hldGhlciBvciBub3Qgd2Ugc2hvdWxkIGZvcmNlCkBAIC0yMTAsOCArMjExLDYgQEAgcHVi
bGljOgogICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3R5
bGVBdmFpbGFibGUsIC0xKTsKICAgICB9CiAKLSAgICBjb25zdCBBbmltYXRpb24mIGFuaW1hdGlv
bigpIGNvbnN0IHsgcmV0dXJuICptX2FuaW1hdGlvbjsgfQotCiBwcm90ZWN0ZWQ6CiAgICAgdmly
dHVhbCB2b2lkIG92ZXJyaWRlQW5pbWF0aW9ucygpIHsgfQogICAgIHZpcnR1YWwgdm9pZCByZXN1
bWVPdmVycmlkZGVuQW5pbWF0aW9ucygpIHsgfQpAQCAtMjQ0LDIyICsyNDMsMjAgQEAgcHJvdGVj
dGVkOgogICAgIGJvb2wgY29tcHV0ZVRyYW5zZm9ybWVkRXh0ZW50VmlhVHJhbnNmb3JtTGlzdChj
b25zdCBGbG9hdFJlY3QmIHJlbmRlcmVyQm94LCBjb25zdCBSZW5kZXJTdHlsZSYsIExheW91dFJl
Y3QmIGJvdW5kcykgY29uc3Q7CiAgICAgYm9vbCBjb21wdXRlVHJhbnNmb3JtZWRFeHRlbnRWaWFN
YXRyaXgoY29uc3QgRmxvYXRSZWN0JiByZW5kZXJlckJveCwgY29uc3QgUmVuZGVyU3R5bGUmLCBM
YXlvdXRSZWN0JiBib3VuZHMpIGNvbnN0OwogCi0gICAgQW5pbWF0aW9uU3RhdGUgbV9hbmltYXRp
b25TdGF0ZTsKLQotICAgIGJvb2wgbV9pc0FjY2VsZXJhdGVkOwotICAgIGJvb2wgbV90cmFuc2Zv
cm1GdW5jdGlvbkxpc3RWYWxpZDsKLSAgICBib29sIG1fZmlsdGVyRnVuY3Rpb25MaXN0c01hdGNo
OwotICAgIGRvdWJsZSBtX3N0YXJ0VGltZTsKLSAgICBkb3VibGUgbV9wYXVzZVRpbWU7Ci0gICAg
ZG91YmxlIG1fcmVxdWVzdGVkU3RhcnRUaW1lOwotCi0gICAgZG91YmxlIG1fdG90YWxEdXJhdGlv
bjsKLSAgICBkb3VibGUgbV9uZXh0SXRlcmF0aW9uRHVyYXRpb247Ci0KICAgICBSZW5kZXJFbGVt
ZW50KiBtX29iamVjdDsKLQotICAgIFJlZlB0cjxBbmltYXRpb24+IG1fYW5pbWF0aW9uOwotICAg
IENvbXBvc2l0ZUFuaW1hdGlvbiogbV9jb21wb3NpdGVBbmltYXRpb247CisgICAgQ29tcG9zaXRl
QW5pbWF0aW9uKiBtX2NvbXBvc2l0ZUFuaW1hdGlvbjsgLy8gSWRlYWxseSB0aGlzIHdvdWxkIGJl
IGEgcmVmZXJlbmNlLCBidXQgaXQgaGFzIHRvIGJlIGNsZWFyZWQgaWYgYW4gYW5pbWF0aW9uIGlz
IGRlc3Ryb3llZCBpbnNpZGUgYW4gZXZlbnQgY2FsbGJhY2suCisgICAgUmVmPEFuaW1hdGlvbj4g
bV9hbmltYXRpb247CisKKyAgICBkb3VibGUgbV9zdGFydFRpbWUgeyAwIH07CisgICAgZG91Ymxl
IG1fcGF1c2VUaW1lIHsgLTEgfTsKKyAgICBkb3VibGUgbV9yZXF1ZXN0ZWRTdGFydFRpbWUgeyAw
IH07CisgICAgZG91YmxlIG1fdG90YWxEdXJhdGlvbiB7IC0xIH07CisgICAgZG91YmxlIG1fbmV4
dEl0ZXJhdGlvbkR1cmF0aW9uIHsgLTEgfTsKKworICAgIEFuaW1hdGlvblN0YXRlIG1fYW5pbWF0
aW9uU3RhdGUgeyBBbmltYXRpb25TdGF0ZTo6TmV3IH07CisgICAgYm9vbCBtX2lzQWNjZWxlcmF0
ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV90cmFuc2Zvcm1GdW5jdGlvbkxpc3RWYWxpZCB7IGZh
bHNlIH07CisgICAgYm9vbCBtX2ZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCB7IGZhbHNlIH07CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IGY5NDczOGE4MDYzYjll
ZDgyYzZjZThhNmYzOTM5YmNhOGUzMjA0YmMuLjJhODQwM2YwNTUxOTE0ZjRjZDg0ZWRiYTgwN2Nh
MDdmYzk2YmMyZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0Fu
aW1hdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9u
L0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC04OSw3ICs4OSw3IEBAIENvbXBvc2l0ZUFuaW1h
dGlvbiYgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmVuc3VyZUNvbXBvc2l0ZUFuaW1hdGlv
bihSZW5kZXJFCiB7CiAgICAgYXV0byByZXN1bHQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYWRk
KCZyZW5kZXJlciwgbnVsbHB0cik7CiAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAg
ICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBDb21wb3NpdGVBbmltYXRpb246OmNyZWF0ZSh0
aGlzKTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IENvbXBvc2l0ZUFuaW1hdGlv
bjo6Y3JlYXRlKCp0aGlzKTsKICAgICAgICAgcmVuZGVyZXIuc2V0SXNDU1NBbmltYXRpbmcodHJ1
ZSk7CiAgICAgfQogCkBAIC00ODcsNyArNDg3LDcgQEAgdm9pZCBBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZTo6YWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKEFuaW0K
ICAgICAKICAgICBpZiAod2lsbEdldFJlc3BvbnNlKQogICAgICAgICBtX3dhaXRpbmdGb3JBc3lu
Y1N0YXJ0Tm90aWZpY2F0aW9uID0gdHJ1ZTsKLSAgICAKKwogICAgIG1fYW5pbWF0aW9uc1dhaXRp
bmdGb3JTdGFydFRpbWVSZXNwb25zZS5hZGQoYW5pbWF0aW9uKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKaW5kZXgg
YzgwYzBmZjNlNDI1ODIwMWU3ODlkNDFhNDVkZDQ5MzAzMTg5NWE2Mi4uY2ExZWQxNGVkMjA3Njlh
NmE1ODg3OGE1NjExNmRhZjE4ZmI3NTY0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCkBAIC00MSwxMyArNDEsMTAgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Db21wb3NpdGVBbmltYXRpb246OkNvbXBvc2l0ZUFu
aW1hdGlvbihBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSogYW5pbWF0aW9uQ29udHJvbGxlcikK
K0NvbXBvc2l0ZUFuaW1hdGlvbjo6Q29tcG9zaXRlQW5pbWF0aW9uKEFuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlJiBhbmltYXRpb25Db250cm9sbGVyKQogICAgIDogbV9hbmltYXRpb25Db250cm9s
bGVyKGFuaW1hdGlvbkNvbnRyb2xsZXIpCi0jaWYgRU5BQkxFKENTU19BTklNQVRJT05TX0xFVkVM
XzIpCi0gICAgLCBtX2hhc1Njcm9sbFRyaWdnZXJlZEFuaW1hdGlvbihmYWxzZSkKLSNlbmRpZgog
ewotICAgIG1fc3VzcGVuZGVkID0gYW5pbWF0aW9uQ29udHJvbGxlci0+aXNTdXNwZW5kZWQoKSAm
JiAhYW5pbWF0aW9uQ29udHJvbGxlci0+YWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVk
KCk7CisgICAgbV9zdXNwZW5kZWQgPSBtX2FuaW1hdGlvbkNvbnRyb2xsZXIuaXNTdXNwZW5kZWQo
KSAmJiAhbV9hbmltYXRpb25Db250cm9sbGVyLmFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3Bl
bmRlZCgpOwogfQogCiBDb21wb3NpdGVBbmltYXRpb246On5Db21wb3NpdGVBbmltYXRpb24oKQpA
QCAtNjUsMjAgKzYyLDE2IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpjbGVhclJlbmRlcmVy
KCkKICAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIENsZWFy
IHRoZSByZW5kZXJlcnMgZnJvbSBhbGwgcnVubmluZyBhbmltYXRpb25zLCBpbiBjYXNlIHdlIGFy
ZSBpbiB0aGUgbWlkZGxlIG9mCiAgICAgICAgIC8vIGFuIGFuaW1hdGlvbiBjYWxsYmFjayAoc2Vl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA1MikKLSAgICAgICAg
Q1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgdHJhbnNpdGlvbnNFbmQg
PSBtX3RyYW5zaXRpb25zLmVuZCgpOwotICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSB0
cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIHRy
YW5zaXRpb24gPSBpdC0+dmFsdWUuZ2V0KCk7Ci0gICAgICAgICAgICBhbmltYXRpb25Db250cm9s
bGVyKCktPmFuaW1hdGlvbldpbGxCZVJlbW92ZWQodHJhbnNpdGlvbik7CisgICAgICAgIGZvciAo
YXV0byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKKyAgICAgICAgICAg
IGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKHRyYW5zaXRpb24u
Z2V0KCkpOwogICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y2xlYXIoKTsKICAgICAgICAgfQogICAg
IH0KICAgICBpZiAoIW1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSkgewogICAgICAgICBt
X2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIEFuaW1hdGlv
bk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2tleWZyYW1lQW5pbWF0
aW9ucy5lbmQoKTsKLSAgICAgICAgZm9yIChBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGFuaW1hdGlvbnNFbmQ7
ICsraXQpIHsKLSAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVl
LmdldCgpOwotICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLT5hbmltYXRpb25XaWxs
QmVSZW1vdmVkKGFuaW0pOwotICAgICAgICAgICAgYW5pbS0+Y2xlYXIoKTsKKyAgICAgICAgZm9y
IChhdXRvJiBhbmltYXRpb24gOiBtX2tleWZyYW1lQW5pbWF0aW9ucy52YWx1ZXMoKSkgeworICAg
ICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoYW5p
bWF0aW9uLmdldCgpKTsKKyAgICAgICAgICAgIGFuaW1hdGlvbi0+Y2xlYXIoKTsKICAgICAgICAg
fQogICAgIH0KIH0KQEAgLTkxLDE2ICs4NCwxNSBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6
dXBkYXRlVHJhbnNpdGlvbnMoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKgog
CiAgICAgLy8gTWFyayBhbGwgZXhpc3RpbmcgdHJhbnNpdGlvbnMgYXMgbm8gbG9uZ2VyIGFjdGl2
ZS4gV2Ugd2lsbCBtYXJrIHRoZSBzdGlsbCBhY3RpdmUgb25lcwogICAgIC8vIGluIHRoZSBuZXh0
IGxvb3AgYW5kIHRoZW4gdG9zcyB0aGUgb25lcyB0aGF0IGRpZG4ndCBnZXQgbWFya2VkLgotICAg
IENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNp
dGlvbnMuZW5kKCk7Ci0gICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICBpdC0+dmFsdWUtPnNldEFjdGl2ZShmYWxzZSk7CisgICAgZm9yIChhdXRvJiB0cmFuc2l0
aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkKKyAgICAgICAgdHJhbnNpdGlvbi0+c2V0QWN0
aXZlKGZhbHNlKTsKICAgICAgICAgCiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtb2RpZmllZEN1
cnJlbnRTdHlsZTsKICAgICAKICAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byB1cGRh
dGUgdGhlIGFjdGl2ZSB0cmFuc2l0aW9ucwogICAgIGlmICh0YXJnZXRTdHlsZS0+dHJhbnNpdGlv
bnMoKSkgewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldFN0eWxlLT50cmFu
c2l0aW9ucygpLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgY29uc3QgQW5pbWF0aW9uJiBh
bmltYXRpb24gPSB0YXJnZXRTdHlsZS0+dHJhbnNpdGlvbnMoKS0+YW5pbWF0aW9uKGkpOworICAg
ICAgICAgICAgQW5pbWF0aW9uJiBhbmltYXRpb24gPSB0YXJnZXRTdHlsZS0+dHJhbnNpdGlvbnMo
KS0+YW5pbWF0aW9uKGkpOwogICAgICAgICAgICAgYm9vbCBpc0FjdGl2ZVRyYW5zaXRpb24gPSAh
bV9zdXNwZW5kZWQgJiYgKGFuaW1hdGlvbi5kdXJhdGlvbigpIHx8IGFuaW1hdGlvbi5kZWxheSgp
ID4gMCk7CiAKICAgICAgICAgICAgIEFuaW1hdGlvbjo6QW5pbWF0aW9uTW9kZSBtb2RlID0gYW5p
bWF0aW9uLmFuaW1hdGlvbk1vZGUoKTsKQEAgLTE2MCw3ICsxNTIsNyBAQCB2b2lkIENvbXBvc2l0
ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIFJl
bmRlclN0eWxlKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxBbmltLT5ibGVuZFBy
b3BlcnR5VmFsdWVJblN0eWxlKHByb3AsIG1vZGlmaWVkQ3VycmVudFN0eWxlLmdldCgpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIExPRyhBbmlt
YXRpb25zLCAiUmVtb3ZpbmcgZXhpc3RpbmcgSW1wbGljaXRBbmltYXRpb24gJXAgZm9yIHByb3Bl
cnR5ICVzIiwgaW1wbEFuaW0sIGdldFByb3BlcnR5TmFtZShwcm9wKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCktPmFuaW1hdGlvbldpbGxCZVJlbW92ZWQo
aW1wbEFuaW0pOworICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigp
LmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoaW1wbEFuaW0pOwogICAgICAgICAgICAgICAgICAgICAg
ICAgbV90cmFuc2l0aW9ucy5yZW1vdmUocHJvcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBl
cXVhbCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0xODksMTkgKzE4MSwxNyBA
QCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMoUmVuZGVyRWxlbWVu
dCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKgogCiAgICAgLy8gTWFrZSBhIGxpc3Qgb2YgdHJhbnNp
dGlvbnMgdG8gYmUgcmVtb3ZlZAogICAgIFZlY3RvcjxpbnQ+IHRvQmVSZW1vdmVkOwotICAgIGVu
ZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7Ci0gICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25z
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdl
dCgpOwotICAgICAgICBpZiAoIWFuaW0tPmFjdGl2ZSgpKSB7Ci0gICAgICAgICAgICBhbmltYXRp
b25Db250cm9sbGVyKCktPmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoYW5pbSk7Ci0gICAgICAgICAg
ICB0b0JlUmVtb3ZlZC5hcHBlbmQoYW5pbS0+YW5pbWF0aW5nUHJvcGVydHkoKSk7Ci0gICAgICAg
ICAgICBMT0coQW5pbWF0aW9ucywgIlJlbW92aW5nIEltcGxpY2l0QW5pbWF0aW9uICVwIGZvciBw
cm9wZXJ0eSAlcyIsIGFuaW0sIGdldFByb3BlcnR5TmFtZShhbmltLT5hbmltYXRpbmdQcm9wZXJ0
eSgpKSk7CisgICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMo
KSkgeworICAgICAgICBpZiAoIXRyYW5zaXRpb24tPmFjdGl2ZSgpKSB7CisgICAgICAgICAgICBh
bmltYXRpb25Db250cm9sbGVyKCkuYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZCh0cmFuc2l0aW9uLmdl
dCgpKTsKKyAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZCh0cmFuc2l0aW9uLT5hbmltYXRp
bmdQcm9wZXJ0eSgpKTsKKyAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiUmVtb3ZpbmcgSW1w
bGljaXRBbmltYXRpb24gJXAgZm9yIHByb3BlcnR5ICVzIiwgdHJhbnNpdGlvbi5nZXQoKSwgZ2V0
UHJvcGVydHlOYW1lKHRyYW5zaXRpb24tPmFuaW1hdGluZ1Byb3BlcnR5KCkpKTsKICAgICAgICAg
fQogICAgIH0KIAogICAgIC8vIE5vdyByZW1vdmUgdGhlIHRyYW5zaXRpb25zIGZyb20gdGhlIGxp
c3QKLSAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHRvQmVSZW1vdmVkLnNpemUoKTsgKytqKQot
ICAgICAgICBtX3RyYW5zaXRpb25zLnJlbW92ZSh0b0JlUmVtb3ZlZFtqXSk7CisgICAgZm9yIChh
dXRvIHByb3BlcnR5VG9SZW1vdmUgOiB0b0JlUmVtb3ZlZCkKKyAgICAgICAgbV90cmFuc2l0aW9u
cy5yZW1vdmUocHJvcGVydHlUb1JlbW92ZSk7CiB9CiAKIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9u
Ojp1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIFJlbmRl
clN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSkKQEAgLTIxMSwy
MCArMjAxLDE4IEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVLZXlmcmFtZUFuaW1h
dGlvbnMoUmVuZGVyRWxlbWVudCogcmVuZGVyZXIsIFJlbmRlCiAgICAgICAgIHJldHVybjsKIAog
ICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIEFuaW1h
dGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGtmZW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMu
ZW5kKCk7CiAgICAgCiAgICAgaWYgKGN1cnJlbnRTdHlsZSAmJiBjdXJyZW50U3R5bGUtPmhhc0Fu
aW1hdGlvbnMoKSAmJiB0YXJnZXRTdHlsZS0+aGFzQW5pbWF0aW9ucygpICYmICooY3VycmVudFN0
eWxlLT5hbmltYXRpb25zKCkpID09ICoodGFyZ2V0U3R5bGUtPmFuaW1hdGlvbnMoKSkpIHsKICAg
ICAgICAgLy8gVGhlIGN1cnJlbnQgYW5kIHRhcmdldCBhbmltYXRpb25zIGFyZSB0aGUgc2FtZSBz
byB3ZSBqdXN0IG5lZWQgdG8gdG9zcyBhbnkgCiAgICAgICAgIC8vIGFuaW1hdGlvbiB3aGljaCBp
cyBmaW5pc2hlZCAocG9zdEFjdGl2ZSkuCi0gICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBr
ZmVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS0+cG9zdEFjdGl2ZSgpKQot
ICAgICAgICAgICAgICAgIGl0LT52YWx1ZS0+c2V0SW5kZXgoLTEpOworICAgICAgICBmb3IgKGF1
dG8mIGFuaW1hdGlvbiA6IG1fa2V5ZnJhbWVBbmltYXRpb25zLnZhbHVlcygpKSB7CisgICAgICAg
ICAgICBpZiAoYW5pbWF0aW9uLT5wb3N0QWN0aXZlKCkpCisgICAgICAgICAgICAgICAgYW5pbWF0
aW9uLT5zZXRJbmRleCgtMSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICAvLyBN
YXJrIGFsbCBleGlzdGluZyBhbmltYXRpb25zIGFzIG5vIGxvbmdlciBhY3RpdmUuCi0gICAgICAg
IGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5p
bWF0aW9ucy5iZWdpbigpOyBpdCAhPSBrZmVuZDsgKytpdCkKLSAgICAgICAgICAgIGl0LT52YWx1
ZS0+c2V0SW5kZXgoLTEpOworICAgICAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fa2V5ZnJh
bWVBbmltYXRpb25zLnZhbHVlcygpKQorICAgICAgICAgICAgYW5pbWF0aW9uLT5zZXRJbmRleCgt
MSk7CiAKICNpZiBFTkFCTEUoQ1NTX0FOSU1BVElPTlNfTEVWRUxfMikKICAgICAgICAgbV9oYXNT
Y3JvbGxUcmlnZ2VyZWRBbmltYXRpb24gPSBmYWxzZTsKQEAgLTIzOSw3ICsyMjcsNyBAQCB2b2lk
IENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlckVsZW1l
bnQqIHJlbmRlcmVyLCBSZW5kZQogICAgICAgICBpZiAodGFyZ2V0U3R5bGUtPmFuaW1hdGlvbnMo
KSkgewogICAgICAgICAgICAgaW50IG51bUFuaW1zID0gdGFyZ2V0U3R5bGUtPmFuaW1hdGlvbnMo
KS0+c2l6ZSgpOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1BbmltczsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24gPSB0YXJnZXRT
dHlsZS0+YW5pbWF0aW9ucygpLT5hbmltYXRpb24oaSk7CisgICAgICAgICAgICAgICAgQW5pbWF0
aW9uJiBhbmltYXRpb24gPSB0YXJnZXRTdHlsZS0+YW5pbWF0aW9ucygpLT5hbmltYXRpb24oaSk7
CiAgICAgICAgICAgICAgICAgQXRvbWljU3RyaW5nIGFuaW1hdGlvbk5hbWUoYW5pbWF0aW9uLm5h
bWUoKSk7CiAKICAgICAgICAgICAgICAgICBpZiAoIWFuaW1hdGlvbi5pc1ZhbGlkQW5pbWF0aW9u
KCkpCkBAIC0yNzQsOCArMjYyLDggQEAgdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZUtl
eWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50KiByZW5kZXJlciwgUmVuZGUKICAgICAgICAg
ICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiICAoY3JlYXRlZCBpbiBzdXNwZW5kZWQv
cGF1c2VkIHN0YXRlKSIpOwogICAgICAgICAgICAgICAgICAgICB9CiAjaWYgIUxPR19ESVNBQkxF
RAotICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8gaXQgPSBrZXlmcmFtZUFuaW0tPmtleWZy
YW1lcygpLmJlZ2luUHJvcGVydGllcygpLCBlbmQgPSBrZXlmcmFtZUFuaW0tPmtleWZyYW1lcygp
LmVuZFByb3BlcnRpZXMoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAgICAgICAgICAg
ICAgTE9HKEFuaW1hdGlvbnMsICIgIHByb3BlcnR5ICVzIiwgZ2V0UHJvcGVydHlOYW1lKCppdCkp
OworICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8gcHJvcGVydHlJRCA6IGtleWZyYW1lQW5p
bS0+a2V5ZnJhbWVzKCkucHJvcGVydGllcygpKQorICAgICAgICAgICAgICAgICAgICAgICAgTE9H
KEFuaW1hdGlvbnMsICIgIHByb3BlcnR5ICVzIiwgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5SUQp
KTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKENTU19BTklNQVRJT05TX0xFVkVMXzIpCkBAIC0yOTUs
MjAgKzI4MywxOCBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVBbmlt
YXRpb25zKFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBSZW5kZQogICAgIAogICAgIC8vIE1ha2Ug
YSBsaXN0IG9mIGFuaW1hdGlvbnMgdG8gYmUgcmVtb3ZlZC4KICAgICBWZWN0b3I8QXRvbWljU3Ry
aW5nSW1wbCo+IGFuaW1zVG9CZVJlbW92ZWQ7Ci0gICAga2ZlbmQgPSBtX2tleWZyYW1lQW5pbWF0
aW9ucy5lbmQoKTsKLSAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0ga2ZlbmQ7ICsraXQpIHsKLSAg
ICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGtleWZyYW1lQW5pbSA9IGl0LT52YWx1ZS5nZXQoKTsK
LSAgICAgICAgaWYgKGtleWZyYW1lQW5pbS0+aW5kZXgoKSA8IDApIHsKLSAgICAgICAgICAgIGFu
aW1zVG9CZVJlbW92ZWQuYXBwZW5kKGtleWZyYW1lQW5pbS0+bmFtZSgpLmltcGwoKSk7Ci0gICAg
ICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCktPmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoa2V5
ZnJhbWVBbmltKTsKLSAgICAgICAgICAgIGtleWZyYW1lQW5pbS0+Y2xlYXIoKTsKLSAgICAgICAg
ICAgIExPRyhBbmltYXRpb25zLCAiUmVtb3ZpbmcgS2V5ZnJhbWVBbmltYXRpb24gJXAiLCBrZXlm
cmFtZUFuaW0pOworICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9rZXlmcmFtZUFuaW1hdGlv
bnMudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKGFuaW1hdGlvbi0+aW5kZXgoKSA8IDApIHsKKyAg
ICAgICAgICAgIGFuaW1zVG9CZVJlbW92ZWQuYXBwZW5kKGFuaW1hdGlvbi0+bmFtZSgpLmltcGwo
KSk7CisgICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCkuYW5pbWF0aW9uV2lsbEJlUmVt
b3ZlZChhbmltYXRpb24uZ2V0KCkpOworICAgICAgICAgICAgYW5pbWF0aW9uLT5jbGVhcigpOwor
ICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICJSZW1vdmluZyBLZXlmcmFtZUFuaW1hdGlvbiAl
cCIsIGFuaW1hdGlvbi5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgLy8gTm93
IHJlbW92ZSB0aGUgYW5pbWF0aW9ucyBmcm9tIHRoZSBsaXN0LgotICAgIGZvciAoc2l6ZV90IGog
PSAwOyBqIDwgYW5pbXNUb0JlUmVtb3ZlZC5zaXplKCk7ICsraikKLSAgICAgICAgbV9rZXlmcmFt
ZUFuaW1hdGlvbnMucmVtb3ZlKGFuaW1zVG9CZVJlbW92ZWRbal0pOworICAgIGZvciAoYXV0byBu
YW1lRm9yUmVtb3ZhbCA6IGFuaW1zVG9CZVJlbW92ZWQpCisgICAgICAgIG1fa2V5ZnJhbWVBbmlt
YXRpb25zLnJlbW92ZShuYW1lRm9yUmVtb3ZhbCk7CiB9CiAKIFJlZjxSZW5kZXJTdHlsZT4gQ29t
cG9zaXRlQW5pbWF0aW9uOjphbmltYXRlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBSZW5kZXJT
dHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUpCkBAIC0zMjQsNDAg
KzMxMCwzNSBAQCBSZWY8UmVuZGVyU3R5bGU+IENvbXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0ZShS
ZW5kZXJFbGVtZW50JiByZW5kZXJlciwgUmVuZGVyU3R5bAogICAgICAgICAvLyBOb3cgdGhhdCB3
ZSBoYXZlIHRyYW5zaXRpb24gb2JqZWN0cyByZWFkeSwgbGV0IHRoZW0ga25vdyBhYm91dCB0aGUg
bmV3IGdvYWwgc3RhdGUuICBXZSB3YW50IHRoZW0KICAgICAgICAgLy8gdG8gZmlsbCBpbiBhIFJl
bmRlclN0eWxlKiYgb25seSBpZiBuZWVkZWQuCiAgICAgICAgIGlmICghbV90cmFuc2l0aW9ucy5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKENT
U1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9u
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgICAgICBpZiAoSW1wbGlj
aXRBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCkpCi0gICAgICAgICAgICAgICAgICAg
IGFuaW0tPmFuaW1hdGUodGhpcywgJnJlbmRlcmVyLCBjdXJyZW50U3R5bGUsICZ0YXJnZXRTdHls
ZSwgcmVzdWx0U3R5bGUpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChhdXRvJiB0
cmFuc2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkKKyAgICAgICAgICAgICAgICB0cmFu
c2l0aW9uLT5hbmltYXRlKHRoaXMsICZyZW5kZXJlciwgY3VycmVudFN0eWxlLCAmdGFyZ2V0U3R5
bGUsIHJlc3VsdFN0eWxlKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8vIE5vdyB0aGF0IHdl
IGhhdmUgYW5pbWF0aW9uIG9iamVjdHMgcmVhZHksIGxldCB0aGVtIGtub3cgYWJvdXQgdGhlIG5l
dyBnb2FsIHN0YXRlLiAgV2Ugd2FudCB0aGVtCiAgICAgLy8gdG8gZmlsbCBpbiBhIFJlbmRlclN0
eWxlKiYgb25seSBpZiBuZWVkZWQuCi0gICAgZm9yIChWZWN0b3I8QXRvbWljU3RyaW5nSW1wbCo+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25PcmRlck1hcC5iZWdpbigp
OyBpdCAhPSBtX2tleWZyYW1lQW5pbWF0aW9uT3JkZXJNYXAuZW5kKCk7ICsraXQpIHsKLSAgICAg
ICAgUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBrZXlmcmFtZUFuaW0gPSBtX2tleWZyYW1lQW5p
bWF0aW9ucy5nZXQoKml0KTsKKyAgICBmb3IgKGF1dG8mIG5hbWUgOiBtX2tleWZyYW1lQW5pbWF0
aW9uT3JkZXJNYXApIHsKKyAgICAgICAgUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBrZXlmcmFt
ZUFuaW0gPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5nZXQobmFtZSk7CiAgICAgICAgIGlmIChrZXlm
cmFtZUFuaW0pCiAgICAgICAgICAgICBrZXlmcmFtZUFuaW0tPmFuaW1hdGUodGhpcywgJnJlbmRl
cmVyLCBjdXJyZW50U3R5bGUsICZ0YXJnZXRTdHlsZSwgcmVzdWx0U3R5bGUpOwogICAgIH0KIAog
ICAgIGlmIChyZXN1bHRTdHlsZSkKICAgICAgICAgcmV0dXJuIHJlc3VsdFN0eWxlLnJlbGVhc2VO
b25OdWxsKCk7CisKICAgICByZXR1cm4gdGFyZ2V0U3R5bGU7CiB9CiAKIFBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IENvbXBvc2l0ZUFuaW1hdGlvbjo6Z2V0QW5pbWF0ZWRTdHlsZSgpIGNvbnN0CiB7
CiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiByZXN1bHRTdHlsZTsKLSAgICBDU1NQcm9wZXJ0eVRy
YW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwot
ICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoSW1w
bGljaXRBbmltYXRpb24qIGltcGxpY2l0QW5pbWF0aW9uID0gaXQtPnZhbHVlLmdldCgpKQotICAg
ICAgICAgICAgaW1wbGljaXRBbmltYXRpb24tPmdldEFuaW1hdGVkU3R5bGUocmVzdWx0U3R5bGUp
OwotICAgIH0KKyAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBtX3RyYW5zaXRpb25zLnZhbHVl
cygpKQorICAgICAgICB0cmFuc2l0aW9uLT5nZXRBbmltYXRlZFN0eWxlKHJlc3VsdFN0eWxlKTsK
IAogICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKIAotICAgIGZv
ciAoVmVjdG9yPEF0b21pY1N0cmluZ0ltcGwqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZy
YW1lQW5pbWF0aW9uT3JkZXJNYXAuYmVnaW4oKTsgaXQgIT0gbV9rZXlmcmFtZUFuaW1hdGlvbk9y
ZGVyTWFwLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4g
a2V5ZnJhbWVBbmltYXRpb24gPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5nZXQoKml0KTsKKyAgICBm
b3IgKGF1dG8mIG5hbWUgOiBtX2tleWZyYW1lQW5pbWF0aW9uT3JkZXJNYXApIHsKKyAgICAgICAg
UmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBrZXlmcmFtZUFuaW1hdGlvbiA9IG1fa2V5ZnJhbWVB
bmltYXRpb25zLmdldChuYW1lKTsKICAgICAgICAgaWYgKGtleWZyYW1lQW5pbWF0aW9uKQogICAg
ICAgICAgICAga2V5ZnJhbWVBbmltYXRpb24tPmdldEFuaW1hdGVkU3R5bGUocmVzdWx0U3R5bGUp
OwogICAgIH0KQEAgLTM3MiwxMCArMzUzLDggQEAgZG91YmxlIENvbXBvc2l0ZUFuaW1hdGlvbjo6
dGltZVRvTmV4dFNlcnZpY2UoKSBjb25zdAogICAgIGRvdWJsZSBtaW5UID0gLTE7CiAgICAgCiAg
ICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBDU1NQcm9wZXJ0eVRy
YW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlv
bnMuZW5kKCk7Ci0gICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zaXRpb25zRW5k
OyArK2l0KSB7Ci0gICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogdHJhbnNpdGlvbiA9IGl0
LT52YWx1ZS5nZXQoKTsKLSAgICAgICAgICAgIGRvdWJsZSB0ID0gdHJhbnNpdGlvbiA/IHRyYW5z
aXRpb24tPnRpbWVUb05leHRTZXJ2aWNlKCkgOiAtMTsKKyAgICAgICAgZm9yIChhdXRvJiB0cmFu
c2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgeworICAgICAgICAgICAgZG91YmxlIHQg
PSB0cmFuc2l0aW9uLT50aW1lVG9OZXh0U2VydmljZSgpOwogICAgICAgICAgICAgaWYgKHQgPCBt
aW5UIHx8IG1pblQgPT0gLTEpCiAgICAgICAgICAgICAgICAgbWluVCA9IHQ7CiAgICAgICAgICAg
ICBpZiAobWluVCA9PSAwKQpAQCAtMzg0LDEwICszNjMsOCBAQCBkb3VibGUgQ29tcG9zaXRlQW5p
bWF0aW9uOjp0aW1lVG9OZXh0U2VydmljZSgpIGNvbnN0CiAgICAgfQogICAgIGlmICghbV9rZXlm
cmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25z
LmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRl
cmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwotICAgICAg
ICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFu
aW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAg
ICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW1hdGlvbiA9IGl0LT52YWx1ZS5nZXQoKTsKLSAgICAg
ICAgICAgIGRvdWJsZSB0ID0gYW5pbWF0aW9uID8gYW5pbWF0aW9uLT50aW1lVG9OZXh0U2Vydmlj
ZSgpIDogLTE7CisgICAgICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9rZXlmcmFtZUFuaW1h
dGlvbnMudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGRvdWJsZSB0ID0gYW5pbWF0aW9uLT50aW1l
VG9OZXh0U2VydmljZSgpOwogICAgICAgICAgICAgaWYgKHQgPCBtaW5UIHx8IG1pblQgPT0gLTEp
CiAgICAgICAgICAgICAgICAgbWluVCA9IHQ7CiAgICAgICAgICAgICBpZiAobWluVCA9PSAwKQpA
QCAtNDA2LDExICszODMsOSBAQCBQYXNzUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBDb21wb3Np
dGVBbmltYXRpb246OmdldEFuaW1hdGlvbkZvclByb3BlcnR5KENTU1BybwogICAgIC8vIFNvIHdl
IG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIGFsbCBhbmltYXRpb25zCiAgICAgaWYgKCFtX2tleWZy
YW1lQW5pbWF0aW9ucy5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMu
Y2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAgICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVy
YXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7Ci0gICAgICAg
IGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5p
bWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAg
ICBSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IGFuaW0gPSBpdC0+dmFsdWU7Ci0gICAgICAgICAg
ICBpZiAoYW5pbS0+aGFzQW5pbWF0aW9uRm9yUHJvcGVydHkocHJvcGVydHkpKQotICAgICAgICAg
ICAgICAgIHJldHZhbCA9IGFuaW07CisgICAgICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9r
ZXlmcmFtZUFuaW1hdGlvbnMudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGlmIChhbmltYXRpb24t
Pmhhc0FuaW1hdGlvbkZvclByb3BlcnR5KHByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICByZXR2
YWwgPSBhbmltYXRpb247CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC00MjIsMzIgKzM5Nywy
OCBAQCBib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6Y29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5p
bWF0aW9uKExheW91dFJlY3QmIGJvdW5kcykgYwogICAgIC8vIElmIG1vcmUgdGhhbiBvbmUgdHJh
bnNpdGlvbiBhbmQgYW5pbWF0aW9uIGFmZmVjdCB0cmFuc2Zvcm0sIGdpdmUgdXAuCiAgICAgYm9v
bCBzZWVuVHJhbnNmb3JtQW5pbWF0aW9uID0gZmFsc2U7CiAgICAgCi0gICAgZm9yIChhdXRvJiBp
dCA6IG1fa2V5ZnJhbWVBbmltYXRpb25zKSB7Ci0gICAgICAgIGlmIChLZXlmcmFtZUFuaW1hdGlv
biogYW5pbSA9IGl0LnZhbHVlLmdldCgpKSB7Ci0gICAgICAgICAgICBpZiAoIWFuaW0tPmhhc0Fu
aW1hdGlvbkZvclByb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtKSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fa2V5ZnJhbWVBbmltYXRp
b25zLnZhbHVlcygpKSB7CisgICAgICAgIGlmICghYW5pbWF0aW9uLT5oYXNBbmltYXRpb25Gb3JQ
cm9wZXJ0eShDU1NQcm9wZXJ0eVRyYW5zZm9ybSkpCisgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICAgICAgaWYgKHNlZW5UcmFuc2Zvcm1BbmltYXRpb24pCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoc2VlblRyYW5zZm9ybUFuaW1hdGlvbikKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgc2VlblRyYW5zZm9ybUFuaW1hdGlv
biA9IHRydWU7CisgICAgICAgIHNlZW5UcmFuc2Zvcm1BbmltYXRpb24gPSB0cnVlOwogCi0gICAg
ICAgICAgICBpZiAoIWFuaW0tPmNvbXB1dGVFeHRlbnRPZlRyYW5zZm9ybUFuaW1hdGlvbihib3Vu
ZHMpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAgICAgICBp
ZiAoIWFuaW1hdGlvbi0+Y29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9uKGJvdW5kcykp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgZm9yIChhdXRvJiBpdCA6
IG1fdHJhbnNpdGlvbnMpIHsKLSAgICAgICAgaWYgKEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0g
aXQudmFsdWUuZ2V0KCkpIHsKLSAgICAgICAgICAgIGlmIChhbmltLT5hbmltYXRpbmdQcm9wZXJ0
eSgpICE9IENTU1Byb3BlcnR5VHJhbnNmb3JtIHx8ICFhbmltLT5oYXNTdHlsZSgpKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNp
dGlvbnMudmFsdWVzKCkpIHsKKyAgICAgICAgaWYgKHRyYW5zaXRpb24tPmFuaW1hdGluZ1Byb3Bl
cnR5KCkgIT0gQ1NTUHJvcGVydHlUcmFuc2Zvcm0gfHwgIXRyYW5zaXRpb24tPmhhc1N0eWxlKCkp
CisgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgaWYgKHNlZW5UcmFuc2Zvcm1B
bmltYXRpb24pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoc2Vl
blRyYW5zZm9ybUFuaW1hdGlvbikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAg
ICAgICAgaWYgKCFhbmltLT5jb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oYm91bmRz
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgICAgaWYg
KCF0cmFuc2l0aW9uLT5jb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oYm91bmRzKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHRydWU7
CkBAIC00NjIsMTggKzQzMywxNCBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6c3VzcGVuZEFu
aW1hdGlvbnMoKQogCiAgICAgaWYgKCFtX2tleWZyYW1lQW5pbWF0aW9ucy5pc0VtcHR5KCkpIHsK
ICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAg
ICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlm
cmFtZUFuaW1hdGlvbnMuZW5kKCk7Ci0gICAgICAgIGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmlt
YXRpb25zRW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoS2V5ZnJhbWVBbmltYXRpb24qIGFu
aW0gPSBpdC0+dmFsdWUuZ2V0KCkpCi0gICAgICAgICAgICAgICAgYW5pbS0+dXBkYXRlUGxheVN0
YXRlKEFuaW1QbGF5U3RhdGVQYXVzZWQpOwotICAgICAgICB9CisgICAgICAgIGZvciAoYXV0byYg
YW5pbWF0aW9uIDogbV9rZXlmcmFtZUFuaW1hdGlvbnMudmFsdWVzKCkpCisgICAgICAgICAgICBh
bmltYXRpb24tPnVwZGF0ZVBsYXlTdGF0ZShBbmltUGxheVN0YXRlUGF1c2VkKTsKICAgICB9CisK
ICAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIENTU1Byb3BlcnR5
VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0
aW9ucy5lbmQoKTsKLSAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNF
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZh
bHVlLmdldCgpOwotICAgICAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+aGFzU3R5bGUoKSkKLSAg
ICAgICAgICAgICAgICBhbmltLT51cGRhdGVQbGF5U3RhdGUoQW5pbVBsYXlTdGF0ZVBhdXNlZCk7
CisgICAgICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkp
IHsKKyAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uLT5oYXNTdHlsZSgpKQorICAgICAgICAgICAg
ICAgIHRyYW5zaXRpb24tPnVwZGF0ZVBsYXlTdGF0ZShBbmltUGxheVN0YXRlUGF1c2VkKTsKICAg
ICAgICAgfQogICAgIH0KIH0KQEAgLTQ4NywzMiArNDU0LDI2IEBAIHZvaWQgQ29tcG9zaXRlQW5p
bWF0aW9uOjpyZXN1bWVBbmltYXRpb25zKCkKIAogICAgIGlmICghbV9rZXlmcmFtZUFuaW1hdGlv
bnMuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lz
dGVuY3koKTsKLSAgICAgICAgQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0
aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOwotICAgICAgICBmb3IgKEFuaW1h
dGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVn
aW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgS2V5ZnJhbWVB
bmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoYW5pbSAm
JiBhbmltLT5wbGF5U3RhdGVQbGF5aW5nKCkpCi0gICAgICAgICAgICAgICAgYW5pbS0+dXBkYXRl
UGxheVN0YXRlKEFuaW1QbGF5U3RhdGVQbGF5aW5nKTsKKyAgICAgICAgZm9yIChhdXRvJiBhbmlt
YXRpb24gOiBtX2tleWZyYW1lQW5pbWF0aW9ucy52YWx1ZXMoKSkgeworICAgICAgICAgICAgaWYg
KGFuaW1hdGlvbi0+cGxheVN0YXRlUGxheWluZygpKQorICAgICAgICAgICAgICAgIGFuaW1hdGlv
bi0+dXBkYXRlUGxheVN0YXRlKEFuaW1QbGF5U3RhdGVQbGF5aW5nKTsKICAgICAgICAgfQogICAg
IH0KIAogICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgQ1NTUHJv
cGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgdHJhbnNpdGlvbnNFbmQgPSBtX3Ry
YW5zaXRpb25zLmVuZCgpOwotICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSB0cmFuc2l0
aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBp
dC0+dmFsdWUuZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5oYXNTdHlsZSgp
KQotICAgICAgICAgICAgICAgIGFuaW0tPnVwZGF0ZVBsYXlTdGF0ZShBbmltUGxheVN0YXRlUGxh
eWluZyk7CisgICAgICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFs
dWVzKCkpIHsKKyAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uLT5oYXNTdHlsZSgpKQorICAgICAg
ICAgICAgICAgIHRyYW5zaXRpb24tPnVwZGF0ZVBsYXlTdGF0ZShBbmltUGxheVN0YXRlUGxheWlu
Zyk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpvdmVy
cmlkZUltcGxpY2l0QW5pbWF0aW9ucyhDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KQogewotICAgIENT
U1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlv
bnMuZW5kKCk7CiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBm
b3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFu
c2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEltcGxpY2l0
QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwotICAgICAgICAgICAgaWYgKGFuaW0g
JiYgYW5pbS0+YW5pbWF0aW5nUHJvcGVydHkoKSA9PSBwcm9wZXJ0eSkKLSAgICAgICAgICAgICAg
ICBhbmltLT5zZXRPdmVycmlkZGVuKHRydWUpOworICAgICAgICBmb3IgKGF1dG8mIHRyYW5zaXRp
b24gOiBtX3RyYW5zaXRpb25zLnZhbHVlcygpKSB7CisgICAgICAgICAgICBpZiAodHJhbnNpdGlv
bi0+YW5pbWF0aW5nUHJvcGVydHkoKSA9PSBwcm9wZXJ0eSkKKyAgICAgICAgICAgICAgICB0cmFu
c2l0aW9uLT5zZXRPdmVycmlkZGVuKHRydWUpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNTIw
LDExICs0ODEsOSBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6b3ZlcnJpZGVJbXBsaWNpdEFu
aW1hdGlvbnMoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkKIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9u
OjpyZXN1bWVPdmVycmlkZGVuSW1wbGljaXRBbmltYXRpb25zKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHkpCiB7CiAgICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBDU1NQ
cm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25z
LmVuZCgpOwotICAgICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAg
ICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnZhbHVlLmdldCgpOwotICAg
ICAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+YW5pbWF0aW5nUHJvcGVydHkoKSA9PSBwcm9wZXJ0
eSkKLSAgICAgICAgICAgICAgICBhbmltLT5zZXRPdmVycmlkZGVuKGZhbHNlKTsKKyAgICAgICAg
Zm9yIChhdXRvJiB0cmFuc2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgeworICAgICAg
ICAgICAgaWYgKHRyYW5zaXRpb24tPmFuaW1hdGluZ1Byb3BlcnR5KCkgPT0gcHJvcGVydHkpCisg
ICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+c2V0T3ZlcnJpZGRlbihmYWxzZSk7CiAgICAgICAg
IH0KICAgICB9CiB9CkBAIC01MzMsMTkgKzQ5MiwxNSBAQCBib29sIENvbXBvc2l0ZUFuaW1hdGlv
bjo6aXNBbmltYXRpbmdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBib29sIGFjY2Vs
ZQogewogICAgIGlmICghbV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpKSB7CiAgICAgICAg
IG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgQW5pbWF0
aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmlt
YXRpb25zLmVuZCgpOwotICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0Vu
ZDsgKytpdCkgewotICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFs
dWUuZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5pc0FuaW1hdGluZ1Byb3Bl
cnR5KHByb3BlcnR5LCBhY2NlbGVyYXRlZE9ubHksIHJ1bm5pbmdTdGF0ZSkpCisgICAgICAgIGZv
ciAoYXV0byYgYW5pbWF0aW9uIDogbV9rZXlmcmFtZUFuaW1hdGlvbnMudmFsdWVzKCkpIHsKKyAg
ICAgICAgICAgIGlmIChhbmltYXRpb24tPmlzQW5pbWF0aW5nUHJvcGVydHkocHJvcGVydHksIGFj
Y2VsZXJhdGVkT25seSwgcnVubmluZ1N0YXRlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkp
IHsKLSAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgdHJh
bnNpdGlvbnNFbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwotICAgICAgICBmb3IgKENTU1Byb3Bl
cnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdp
bigpOyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgSW1wbGljaXRB
bmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoYW5pbSAm
JiBhbmltLT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBhY2NlbGVyYXRlZE9ubHksIHJ1
bm5pbmdTdGF0ZSkpCisgICAgICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlv
bnMudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uLT5pc0FuaW1hdGluZ1By
b3BlcnR5KHByb3BlcnR5LCBhY2NlbGVyYXRlZE9ubHksIHJ1bm5pbmdTdGF0ZSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CkBAIC01ODAsOSArNTM1LDgg
QEAgYm9vbCBDb21wb3NpdGVBbmltYXRpb246OnBhdXNlVHJhbnNpdGlvbkF0VGltZShDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5LCBkb3VibGUgdCkKICAgICAgICAgLy8gVGhpcyBjb2RlIGlzIG9ubHkg
dXNlZCBmb3IgdGVzdGluZywgc28gcGVyZm9ybWFuY2UgaXMgbm90IGNyaXRpY2FsIGhlcmUuCiAg
ICAgICAgIEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4gc2hvcnRoYW5kUHJvcGVydGllcyA9IENTU1By
b3BlcnR5QW5pbWF0aW9uOjphbmltYXRhYmxlU2hvcnRoYW5kc0FmZmVjdGluZ1Byb3BlcnR5KHBy
b3BlcnR5KTsKICAgICAgICAgYm9vbCBhbnlQYXVzZWQgPSBmYWxzZTsKLSAgICAgICAgSGFzaFNl
dDxDU1NQcm9wZXJ0eUlEPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc2hvcnRoYW5kUHJvcGVydGll
cy5lbmQoKTsKLSAgICAgICAgZm9yIChIYXNoU2V0PENTU1Byb3BlcnR5SUQ+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IHNob3J0aGFuZFByb3BlcnRpZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgICAgICBpZiAocGF1c2VUcmFuc2l0aW9uQXRUaW1lKCppdCwgdCkpCisgICAgICAg
IGZvciAoYXV0byBwcm9wZXJ0eUlEIDogc2hvcnRoYW5kUHJvcGVydGllcykgeworICAgICAgICAg
ICAgaWYgKHBhdXNlVHJhbnNpdGlvbkF0VGltZShwcm9wZXJ0eUlELCB0KSkKICAgICAgICAgICAg
ICAgICBhbnlQYXVzZWQgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBhbnlQYXVz
ZWQ7CkBAIC02MDMsMjMgKzU1NywxNSBAQCB1bnNpZ25lZCBDb21wb3NpdGVBbmltYXRpb246Om51
bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgY291bnQgPSAw
OwogICAgIAotICAgIGlmICghbV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgQW5p
bWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVB
bmltYXRpb25zLmVuZCgpOwotICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9u
c0VuZDsgKytpdCkgewotICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+
dmFsdWUuZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoYW5pbS0+cnVubmluZygpKQotICAgICAgICAg
ICAgICAgICsrY291bnQ7Ci0gICAgICAgIH0KKyAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVj
a0NvbnNpc3RlbmN5KCk7CisgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2tleWZyYW1lQW5p
bWF0aW9ucy52YWx1ZXMoKSkgeworICAgICAgICBpZiAoYW5pbWF0aW9uLT5ydW5uaW5nKCkpCisg
ICAgICAgICAgICArK2NvdW50OwogICAgIH0KIAotICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgdHJhbnNpdGlvbnNFbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwotICAgICAgICBmb3IgKENT
U1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9u
cy5iZWdpbigpOyBpdCAhPSB0cmFuc2l0aW9uc0VuZDsgKytpdCkgewotICAgICAgICAgICAgSW1w
bGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+dmFsdWUuZ2V0KCk7Ci0gICAgICAgICAgICBpZiAo
YW5pbS0+cnVubmluZygpKQotICAgICAgICAgICAgICAgICsrY291bnQ7Ci0gICAgICAgIH0KKyAg
ICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBtX3RyYW5zaXRpb25zLnZhbHVlcygpKSB7CisgICAg
ICAgIGlmICh0cmFuc2l0aW9uLT5ydW5uaW5nKCkpCisgICAgICAgICAgICArK2NvdW50OwogICAg
IH0KICAgICAKICAgICByZXR1cm4gY291bnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oCmluZGV4IDUwM2ZjMzRlMGY1NjBhYmM2ZDRh
YTk4OWZkNjVlNTYzYzI2MThhMWYuLmE1NTNmZmMwMTVlNjhmNjA5NDc0MzQ4OGFmMjJiMDIyNjFh
YzJlMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0
ZUFuaW1hdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0
ZUFuaW1hdGlvbi5oCkBAIC00NSw4ICs0NSw5IEBAIGNsYXNzIFJlbmRlclN0eWxlOwogLy8gQSBD
b21wb3NpdGVBbmltYXRpb24gcmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgYW5pbWF0aW9ucyB0
aGF0IGFyZSBydW5uaW5nCiAvLyBvbiBhIHNpbmdsZSBSZW5kZXJFbGVtZW50LCBzdWNoIGFzIGEg
bnVtYmVyIG9mIHByb3BlcnRpZXMgdHJhbnNpdGlvbmluZyBhdCBvbmNlLgogY2xhc3MgQ29tcG9z
aXRlQW5pbWF0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8Q29tcG9zaXRlQW5pbWF0aW9uPiB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDb21w
b3NpdGVBbmltYXRpb24+IGNyZWF0ZShBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSogYW5pbWF0
aW9uQ29udHJvbGxlcikKKyAgICBzdGF0aWMgUmVmPENvbXBvc2l0ZUFuaW1hdGlvbj4gY3JlYXRl
KEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlJiBhbmltYXRpb25Db250cm9sbGVyKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29tcG9zaXRlQW5pbWF0aW9uKGFuaW1hdGlv
bkNvbnRyb2xsZXIpKTsKICAgICB9OwpAQCAtNjEsNyArNjIsNyBAQCBwdWJsaWM6CiAKICAgICBk
b3VibGUgdGltZVRvTmV4dFNlcnZpY2UoKSBjb25zdDsKICAgICAKLSAgICBBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZSogYW5pbWF0aW9uQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fYW5p
bWF0aW9uQ29udHJvbGxlcjsgfQorICAgIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlJiBhbmlt
YXRpb25Db250cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25Db250cm9sbGVyOyB9
CiAKICAgICB2b2lkIHN1c3BlbmRBbmltYXRpb25zKCk7CiAgICAgdm9pZCByZXN1bWVBbmltYXRp
b25zKCk7CkBAIC04NSw3ICs4Niw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgotICAg
IENvbXBvc2l0ZUFuaW1hdGlvbihBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSopOworICAgIENv
bXBvc2l0ZUFuaW1hdGlvbihBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYpOwogCiAgICAgdm9p
ZCB1cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJFbGVtZW50KiwgUmVuZGVyU3R5bGUqIGN1cnJlbnRT
dHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKTsKICAgICB2b2lkIHVwZGF0ZUtleWZyYW1l
QW5pbWF0aW9ucyhSZW5kZXJFbGVtZW50KiwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVu
ZGVyU3R5bGUqIHRhcmdldFN0eWxlKTsKQEAgLTkzLDEzICs5NCwxMyBAQCBwcml2YXRlOgogICAg
IHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxJbXBsaWNpdEFuaW1hdGlvbj4+IENTU1Byb3Bl
cnR5VHJhbnNpdGlvbnNNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwq
LCBSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+PiBBbmltYXRpb25OYW1lTWFwOwogCi0gICAgQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGUqIG1fYW5pbWF0aW9uQ29udHJvbGxlcjsKKyAgICBBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZSYgbV9hbmltYXRpb25Db250cm9sbGVyOwogICAgIENTU1By
b3BlcnR5VHJhbnNpdGlvbnNNYXAgbV90cmFuc2l0aW9uczsKICAgICBBbmltYXRpb25OYW1lTWFw
IG1fa2V5ZnJhbWVBbmltYXRpb25zOwogICAgIFZlY3RvcjxBdG9taWNTdHJpbmdJbXBsKj4gbV9r
ZXlmcmFtZUFuaW1hdGlvbk9yZGVyTWFwOwogICAgIGJvb2wgbV9zdXNwZW5kZWQ7CiAjaWYgRU5B
QkxFKENTU19BTklNQVRJT05TX0xFVkVMXzIpCi0gICAgYm9vbCBtX2hhc1Njcm9sbFRyaWdnZXJl
ZEFuaW1hdGlvbjsKKyAgICBib29sIG1faGFzU2Nyb2xsVHJpZ2dlcmVkQW5pbWF0aW9uIHsgZmFs
c2UgfTsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vSW1wbGljaXRBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRp
b24vSW1wbGljaXRBbmltYXRpb24uY3BwCmluZGV4IDg0YTI0ZGUzNzkyOTNiNzlhNzhhZDU4YTAy
MzI4MjQ4M2IwNDllYWEuLmQwMjE1OTcxMjRiMjA3YmRmMjc4NWI5M2Y3Yjc1NzhkOGIyMTQzMGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1h
dGlvbi5jcHAKQEAgLTM5LDEzICszOSwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUlt
cGxpY2l0QW5pbWF0aW9uOjpJbXBsaWNpdEFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mIHRyYW5z
aXRpb24sIENTU1Byb3BlcnR5SUQgYW5pbWF0aW5nUHJvcGVydHksIFJlbmRlckVsZW1lbnQqIHJl
bmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltLCBSZW5kZXJTdHlsZSogZnJvbVN0
eWxlKQorSW1wbGljaXRBbmltYXRpb246OkltcGxpY2l0QW5pbWF0aW9uKEFuaW1hdGlvbiYgdHJh
bnNpdGlvbiwgQ1NTUHJvcGVydHlJRCBhbmltYXRpbmdQcm9wZXJ0eSwgUmVuZGVyRWxlbWVudCog
cmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0sIFJlbmRlclN0eWxlKiBmcm9t
U3R5bGUpCiAgICAgOiBBbmltYXRpb25CYXNlKHRyYW5zaXRpb24sIHJlbmRlcmVyLCBjb21wQW5p
bSkKKyAgICAsIG1fZnJvbVN0eWxlKGZyb21TdHlsZSkKICAgICAsIG1fdHJhbnNpdGlvblByb3Bl
cnR5KHRyYW5zaXRpb24ucHJvcGVydHkoKSkKICAgICAsIG1fYW5pbWF0aW5nUHJvcGVydHkoYW5p
bWF0aW5nUHJvcGVydHkpCi0gICAgLCBtX292ZXJyaWRkZW4oZmFsc2UpCi0gICAgLCBtX2FjdGl2
ZSh0cnVlKQotICAgICwgbV9mcm9tU3R5bGUoZnJvbVN0eWxlKQogewogICAgIEFTU0VSVChhbmlt
YXRpbmdQcm9wZXJ0eSAhPSBDU1NQcm9wZXJ0eUludmFsaWQpOwogfQpAQCAtMTg5LDcgKzE4Nyw3
IEBAIGJvb2wgSW1wbGljaXRBbmltYXRpb246OnNlbmRUcmFuc2l0aW9uRXZlbnQoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIGRvdWJsCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgICAgICAgICAvLyBTY2hlZHVsZSBldmVudCBoYW5kbGluZwotICAgICAgICAgICAg
bV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YWRkRXZlbnRUb0Rp
c3BhdGNoKGVsZW1lbnQsIGV2ZW50VHlwZSwgcHJvcGVydHlOYW1lLCBlbGFwc2VkVGltZSk7Cisg
ICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFk
ZEV2ZW50VG9EaXNwYXRjaChlbGVtZW50LCBldmVudFR5cGUsIHByb3BlcnR5TmFtZSwgZWxhcHNl
ZFRpbWUpOwogCiAgICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCAodW5hbmltYXRl
ZCkgc3R5bGUKICAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnRyYW5z
aXRpb25lbmRFdmVudCAmJiBlbGVtZW50LT5yZW5kZXJlcigpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgKaW5kZXggNTE0YWNkNmZiMWQy
NDA5MTU0MTRmYWFlNzkyNDlkMjQ1OGRlZjY2Ny4uM2YyOWJkOTllMzY5ZmZhMzc0YjdkZjM5ZjI0
ZjE0YzEwMDEyODc0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
SW1wbGljaXRBbmltYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9J
bXBsaWNpdEFuaW1hdGlvbi5oCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIFJlbmRlckVsZW1lbnQ7
CiAvLyBmb3IgYSBzaW5nbGUgUmVuZGVyRWxlbWVudC4KIGNsYXNzIEltcGxpY2l0QW5pbWF0aW9u
IDogcHVibGljIEFuaW1hdGlvbkJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEltcGxpY2l0QW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24sIENT
U1Byb3BlcnR5SUQgYW5pbWF0aW5nUHJvcGVydHksIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBD
b21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiwgUmVuZGVyU3R5bGUqIGZyb21T
dHlsZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbXBsaWNpdEFuaW1hdGlvbj4gY3JlYXRlKEFu
aW1hdGlvbiYgYW5pbWF0aW9uLCBDU1NQcm9wZXJ0eUlEIGFuaW1hdGluZ1Byb3BlcnR5LCBSZW5k
ZXJFbGVtZW50KiByZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRp
b24sIFJlbmRlclN0eWxlKiBmcm9tU3R5bGUpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEltcGxpY2l0QW5pbWF0aW9uKGFuaW1hdGlvbiwgYW5pbWF0aW5nUHJvcGVydHksIHJl
bmRlcmVyLCBjb21wb3NpdGVBbmltYXRpb24sIGZyb21TdHlsZSkpOwogICAgIH07CkBAIC04NCwx
NyArODQsMTggQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgY2hlY2tGb3JNYXRjaGluZ0ZpbHRlckZ1
bmN0aW9uTGlzdHMoKTsKIAogcHJpdmF0ZToKLSAgICBJbXBsaWNpdEFuaW1hdGlvbihjb25zdCBB
bmltYXRpb24mLCBDU1NQcm9wZXJ0eUlELCBSZW5kZXJFbGVtZW50KiwgQ29tcG9zaXRlQW5pbWF0
aW9uKiwgUmVuZGVyU3R5bGUqKTsKKyAgICBJbXBsaWNpdEFuaW1hdGlvbihBbmltYXRpb24mLCBD
U1NQcm9wZXJ0eUlELCBSZW5kZXJFbGVtZW50KiwgQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVy
U3R5bGUqKTsKICAgICB2aXJ0dWFsIH5JbXBsaWNpdEFuaW1hdGlvbigpOwogCi0gICAgQ1NTUHJv
cGVydHlJRCBtX3RyYW5zaXRpb25Qcm9wZXJ0eTsgLy8gVHJhbnNpdGlvbiBwcm9wZXJ0eSBhcyBz
cGVjaWZpZWQgaW4gdGhlIFJlbmRlclN0eWxlLgotICAgIENTU1Byb3BlcnR5SUQgbV9hbmltYXRp
bmdQcm9wZXJ0eTsgLy8gU3BlY2lmaWMgcHJvcGVydHkgZm9yIHRoaXMgSW1wbGljaXRBbmltYXRp
b24KLSAgICBib29sIG1fb3ZlcnJpZGRlbjsgICAgICAgICAgLy8gdHJ1ZSB3aGVuIHRoZXJlIGlz
IGEga2V5ZnJhbWUgYW5pbWF0aW9uIHRoYXQgb3ZlcnJpZGVzIHRoZSB0cmFuc2l0aW9uaW5nIHBy
b3BlcnR5Ci0gICAgYm9vbCBtX2FjdGl2ZTsgICAgICAgICAgICAgIC8vIHVzZWQgZm9yIGN1bGxp
bmcgdGhlIGxpc3Qgb2YgdHJhbnNpdGlvbnMKLQogICAgIC8vIFRoZSB0d28gc3R5bGVzIHRoYXQg
d2UgYXJlIGJsZW5kaW5nLgogICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV9mcm9tU3R5bGU7CiAg
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiBtX3RvU3R5bGU7CisKKyAgICBDU1NQcm9wZXJ0eUlEIG1f
dHJhbnNpdGlvblByb3BlcnR5OyAvLyBUcmFuc2l0aW9uIHByb3BlcnR5IGFzIHNwZWNpZmllZCBp
biB0aGUgUmVuZGVyU3R5bGUuCisgICAgQ1NTUHJvcGVydHlJRCBtX2FuaW1hdGluZ1Byb3BlcnR5
OyAvLyBTcGVjaWZpYyBwcm9wZXJ0eSBmb3IgdGhpcyBJbXBsaWNpdEFuaW1hdGlvbgorCisgICAg
Ym9vbCBtX2FjdGl2ZSB7IHRydWUgfTsgLy8gVXNlZCBmb3IgY3VsbGluZyB0aGUgbGlzdCBvZiB0
cmFuc2l0aW9ucy4KKyAgICBib29sIG1fb3ZlcnJpZGRlbiB7IGZhbHNlIH07IC8vIFRydWUgd2hl
biB0aGVyZSBpcyBhIGtleWZyYW1lIGFuaW1hdGlvbiB0aGF0IG92ZXJyaWRlcyB0aGUgdHJhbnNp
dGlvbmluZyBwcm9wZXJ0eQogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCmluZGV4
IGRiNmIzNzg5NDI3NTYwZjY0NmQzM2FjMjU3MmE0NWZlNGYzZTk4ZjEuLjlhYmI4ZjNlYzhjYzYz
YmU1M2I0MDI1NjY1ZjBhYjQxOGFlZGI0ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAKQEAgLTQxLDEyICs0MSwxMSBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUtleWZyYW1lQW5pbWF0aW9uOjpLZXlmcmFtZUFuaW1h
dGlvbihjb25zdCBBbmltYXRpb24mIGFuaW1hdGlvbiwgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIs
IGludCBpbmRleCwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24sIFJlbmRl
clN0eWxlKiB1bmFuaW1hdGVkU3R5bGUpCitLZXlmcmFtZUFuaW1hdGlvbjo6S2V5ZnJhbWVBbmlt
YXRpb24oQW5pbWF0aW9uJiBhbmltYXRpb24sIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyLCBpbnQg
aW5kZXgsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9uLCBSZW5kZXJTdHls
ZSogdW5hbmltYXRlZFN0eWxlKQogICAgIDogQW5pbWF0aW9uQmFzZShhbmltYXRpb24sIHJlbmRl
cmVyLCBjb21wb3NpdGVBbmltYXRpb24pCiAgICAgLCBtX2tleWZyYW1lcyhhbmltYXRpb24ubmFt
ZSgpKQotICAgICwgbV9pbmRleChpbmRleCkKLSAgICAsIG1fc3RhcnRFdmVudERpc3BhdGNoZWQo
ZmFsc2UpCiAgICAgLCBtX3VuYW5pbWF0ZWRTdHlsZSh1bmFuaW1hdGVkU3R5bGUpCisgICAgLCBt
X2luZGV4KGluZGV4KQogewogICAgIC8vIEdldCB0aGUga2V5ZnJhbWUgUmVuZGVyU3R5bGVzCiAg
ICAgaWYgKG1fb2JqZWN0ICYmIG1fb2JqZWN0LT5lbGVtZW50KCkpCkBAIC0xNTcsMTUgKzE1Niwx
NCBAQCB2b2lkIEtleWZyYW1lQW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiog
Y29tcG9zaXRlQW5pbWF0aW9uLCBSZW5kZXJFbAogCiAgICAgLy8gRklYTUU6IHdlIG5lZWQgdG8g
YmUgbW9yZSBlZmZpY2llbnQgYWJvdXQgZGV0ZXJtaW5pbmcgd2hpY2gga2V5ZnJhbWVzIHdlIGFy
ZSBhbmltYXRpbmcgYmV0d2Vlbi4KICAgICAvLyBXZSBzaG91bGQgY2FjaGUgdGhlIGxhc3QgcGFp
ciBvciBzb21ldGhpbmcuCi0gICAgSGFzaFNldDxDU1NQcm9wZXJ0eUlEPjo6Y29uc3RfaXRlcmF0
b3IgZW5kUHJvcGVydGllcyA9IG1fa2V5ZnJhbWVzLmVuZFByb3BlcnRpZXMoKTsKLSAgICBmb3Ig
KEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZXMu
YmVnaW5Qcm9wZXJ0aWVzKCk7IGl0ICE9IGVuZFByb3BlcnRpZXM7ICsraXQpIHsKKyAgICBmb3Ig
KGF1dG8gcHJvcGVydHlJRCA6IG1fa2V5ZnJhbWVzLnByb3BlcnRpZXMoKSkgewogICAgICAgICAv
LyBHZXQgdGhlIGZyb20vdG8gc3R5bGVzIGFuZCBwcm9ncmVzcyBiZXR3ZWVuCiAgICAgICAgIGNv
bnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5bGUgPSBudWxscHRyOwogICAgICAgICBjb25zdCBSZW5k
ZXJTdHlsZSogdG9TdHlsZSA9IG51bGxwdHI7CiAgICAgICAgIGRvdWJsZSBwcm9ncmVzcyA9IDA7
Ci0gICAgICAgIGZldGNoSW50ZXJ2YWxFbmRwb2ludHNGb3JQcm9wZXJ0eSgqaXQsIGZyb21TdHls
ZSwgdG9TdHlsZSwgcHJvZ3Jlc3MpOworICAgICAgICBmZXRjaEludGVydmFsRW5kcG9pbnRzRm9y
UHJvcGVydHkocHJvcGVydHlJRCwgZnJvbVN0eWxlLCB0b1N0eWxlLCBwcm9ncmVzcyk7CiAKLSAg
ICAgICAgYm9vbCBuZWVkc0FuaW0gPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQcm9wZXJ0
aWVzKHRoaXMsICppdCwgYW5pbWF0ZWRTdHlsZS5nZXQoKSwgZnJvbVN0eWxlLCB0b1N0eWxlLCBw
cm9ncmVzcyk7CisgICAgICAgIGJvb2wgbmVlZHNBbmltID0gQ1NTUHJvcGVydHlBbmltYXRpb246
OmJsZW5kUHJvcGVydGllcyh0aGlzLCBwcm9wZXJ0eUlELCBhbmltYXRlZFN0eWxlLmdldCgpLCBm
cm9tU3R5bGUsIHRvU3R5bGUsIHByb2dyZXNzKTsKICAgICAgICAgaWYgKCFuZWVkc0FuaW0pCiAg
ICAgICAgICAgICAvLyBJZiB3ZSBhcmUgcnVubmluZyBhbiBhY2NlbGVyYXRlZCBhbmltYXRpb24s
IHNldCBhIGZsYWcgaW4gdGhlIHN0eWxlCiAgICAgICAgICAgICAvLyB0byBpbmRpY2F0ZSBpdC4g
VGhpcyBjYW4gYmUgdXNlZCB0byBtYWtlIHN1cmUgd2UgZ2V0IGFuIHVwZGF0ZWQKQEAgLTE4Nywx
NSArMTg1LDE0IEBAIHZvaWQgS2V5ZnJhbWVBbmltYXRpb246OmdldEFuaW1hdGVkU3R5bGUoUmVm
UHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKICAgICBpZiAoIWFuaW1hdGVkU3R5bGUp
CiAgICAgICAgIGFuaW1hdGVkU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUoJm1fb2JqZWN0LT5z
dHlsZSgpKTsKIAotICAgIEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD46OmNvbnN0X2l0ZXJhdG9yIGVu
ZFByb3BlcnRpZXMgPSBtX2tleWZyYW1lcy5lbmRQcm9wZXJ0aWVzKCk7Ci0gICAgZm9yIChIYXNo
U2V0PENTU1Byb3BlcnR5SUQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVzLmJlZ2lu
UHJvcGVydGllcygpOyBpdCAhPSBlbmRQcm9wZXJ0aWVzOyArK2l0KSB7CisgICAgZm9yIChhdXRv
IHByb3BlcnR5SUQgOiBtX2tleWZyYW1lcy5wcm9wZXJ0aWVzKCkpIHsKICAgICAgICAgLy8gR2V0
IHRoZSBmcm9tL3RvIHN0eWxlcyBhbmQgcHJvZ3Jlc3MgYmV0d2VlbgogICAgICAgICBjb25zdCBS
ZW5kZXJTdHlsZSogZnJvbVN0eWxlID0gbnVsbHB0cjsKICAgICAgICAgY29uc3QgUmVuZGVyU3R5
bGUqIHRvU3R5bGUgPSBudWxscHRyOwogICAgICAgICBkb3VibGUgcHJvZ3Jlc3MgPSAwOwotICAg
ICAgICBmZXRjaEludGVydmFsRW5kcG9pbnRzRm9yUHJvcGVydHkoKml0LCBmcm9tU3R5bGUsIHRv
U3R5bGUsIHByb2dyZXNzKTsKKyAgICAgICAgZmV0Y2hJbnRlcnZhbEVuZHBvaW50c0ZvclByb3Bl
cnR5KHByb3BlcnR5SUQsIGZyb21TdHlsZSwgdG9TdHlsZSwgcHJvZ3Jlc3MpOwogCi0gICAgICAg
IENTU1Byb3BlcnR5QW5pbWF0aW9uOjpibGVuZFByb3BlcnRpZXModGhpcywgKml0LCBhbmltYXRl
ZFN0eWxlLmdldCgpLCBmcm9tU3R5bGUsIHRvU3R5bGUsIHByb2dyZXNzKTsKKyAgICAgICAgQ1NT
UHJvcGVydHlBbmltYXRpb246OmJsZW5kUHJvcGVydGllcyh0aGlzLCBwcm9wZXJ0eUlELCBhbmlt
YXRlZFN0eWxlLmdldCgpLCBmcm9tU3R5bGUsIHRvU3R5bGUsIHByb2dyZXNzKTsKICAgICB9CiB9
CiAKQEAgLTIxMSwyMCArMjA4LDE3IEBAIGJvb2wgS2V5ZnJhbWVBbmltYXRpb246OmNvbXB1dGVF
eHRlbnRPZlRyYW5zZm9ybUFuaW1hdGlvbihMYXlvdXRSZWN0JiBib3VuZHMpIGNvCiAKICAgICBG
bG9hdFJlY3QgY3VtdWxhdGl2ZUJvdW5kcyA9IGJvdW5kczsKIAotICAgIHNpemVfdCBudW1LZXlm
cmFtZXMgPSBtX2tleWZyYW1lcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1LZXlmcmFtZXM7ICsraSkgewotICAgICAgICBjb25zdCBLZXlmcmFtZVZhbHVlJiBjdXJyS2V5
RnJhbWUgPSBtX2tleWZyYW1lc1tpXTsKLQotICAgICAgICBpZiAoIWN1cnJLZXlGcmFtZS5jb250
YWluc1Byb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtKSkKKyAgICBmb3IgKGF1dG8mIGtleWZy
YW1lIDogbV9rZXlmcmFtZXMua2V5ZnJhbWVzKCkpIHsKKyAgICAgICAgaWYgKCFrZXlmcmFtZS5j
b250YWluc1Byb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCiAgICAgICAgIExheW91dFJlY3Qga2V5ZnJhbWVCb3VuZHMgPSBib3VuZHM7CiAgICAg
ICAgIAogICAgICAgICBib29sIGNhbkNvbXB1dGU7CiAgICAgICAgIGlmIChpc1RyYW5zZm9ybUZ1
bmN0aW9uTGlzdFZhbGlkKCkpCi0gICAgICAgICAgICBjYW5Db21wdXRlID0gY29tcHV0ZVRyYW5z
Zm9ybWVkRXh0ZW50VmlhVHJhbnNmb3JtTGlzdChyZW5kZXJlckJveCwgKmN1cnJLZXlGcmFtZS5z
dHlsZSgpLCBrZXlmcmFtZUJvdW5kcyk7CisgICAgICAgICAgICBjYW5Db21wdXRlID0gY29tcHV0
ZVRyYW5zZm9ybWVkRXh0ZW50VmlhVHJhbnNmb3JtTGlzdChyZW5kZXJlckJveCwgKmtleWZyYW1l
LnN0eWxlKCksIGtleWZyYW1lQm91bmRzKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2Fu
Q29tcHV0ZSA9IGNvbXB1dGVUcmFuc2Zvcm1lZEV4dGVudFZpYU1hdHJpeChyZW5kZXJlckJveCwg
KmN1cnJLZXlGcmFtZS5zdHlsZSgpLCBrZXlmcmFtZUJvdW5kcyk7CisgICAgICAgICAgICBjYW5D
b21wdXRlID0gY29tcHV0ZVRyYW5zZm9ybWVkRXh0ZW50VmlhTWF0cml4KHJlbmRlcmVyQm94LCAq
a2V5ZnJhbWUuc3R5bGUoKSwga2V5ZnJhbWVCb3VuZHMpOwogICAgICAgICAKICAgICAgICAgaWYg
KCFjYW5Db21wdXRlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjQ0LDcgKzIzOCw3
IEBAIGJvb2wgS2V5ZnJhbWVBbmltYXRpb246Omhhc0FuaW1hdGlvbkZvclByb3BlcnR5KENTU1By
b3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0CiBib29sIEtleWZyYW1lQW5pbWF0aW9uOjpzdGFydEFu
aW1hdGlvbihkb3VibGUgdGltZU9mZnNldCkKIHsKICAgICBpZiAobV9vYmplY3QgJiYgbV9vYmpl
Y3QtPmlzQ29tcG9zaXRlZCgpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQm94TW9k
ZWxPYmplY3Q+KCptX29iamVjdCkuc3RhcnRBbmltYXRpb24odGltZU9mZnNldCwgbV9hbmltYXRp
b24uZ2V0KCksIG1fa2V5ZnJhbWVzKTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJv
eE1vZGVsT2JqZWN0PigqbV9vYmplY3QpLnN0YXJ0QW5pbWF0aW9uKHRpbWVPZmZzZXQsIG1fYW5p
bWF0aW9uLnB0cigpLCBtX2tleWZyYW1lcyk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0z
MjIsNyArMzE2LDcgQEAgYm9vbCBLZXlmcmFtZUFuaW1hdGlvbjo6c2VuZEFuaW1hdGlvbkV2ZW50
KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBkb3VibGUKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgICAgICAvLyBTY2hlZHVsZSBldmVudCBoYW5kbGluZwotICAgICAgICBt
X2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5hZGRFdmVudFRvRGlz
cGF0Y2goZWxlbWVudCwgZXZlbnRUeXBlLCBtX2tleWZyYW1lcy5hbmltYXRpb25OYW1lKCksIGVs
YXBzZWRUaW1lKTsKKyAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRy
b2xsZXIoKS5hZGRFdmVudFRvRGlzcGF0Y2goZWxlbWVudCwgZXZlbnRUeXBlLCBtX2tleWZyYW1l
cy5hbmltYXRpb25OYW1lKCksIGVsYXBzZWRUaW1lKTsKIAogICAgICAgICAvLyBSZXN0b3JlIHRo
ZSBvcmlnaW5hbCAodW5hbmltYXRlZCkgc3R5bGUKICAgICAgICAgaWYgKChldmVudFR5cGUgPT0g
ZXZlbnROYW1lcygpLndlYmtpdEFuaW1hdGlvbkVuZEV2ZW50IHx8IGV2ZW50VHlwZSA9PSBldmVu
dE5hbWVzKCkuYW5pbWF0aW9uZW5kRXZlbnQpICYmIGVsZW1lbnQtPnJlbmRlcmVyKCkpCkBAIC0z
MzcsMTcgKzMzMSwxNSBAQCBib29sIEtleWZyYW1lQW5pbWF0aW9uOjpzZW5kQW5pbWF0aW9uRXZl
bnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGRvdWJsZQogdm9pZCBLZXlmcmFtZUFu
aW1hdGlvbjo6b3ZlcnJpZGVBbmltYXRpb25zKCkKIHsKICAgICAvLyBUaGlzIHdpbGwgb3ZlcnJp
ZGUgaW1wbGljaXQgYW5pbWF0aW9ucyB0aGF0IG1hdGNoIHRoZSBwcm9wZXJ0aWVzIGluIHRoZSBr
ZXlmcmFtZSBhbmltYXRpb24KLSAgICBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX2tleWZyYW1lcy5lbmRQcm9wZXJ0aWVzKCk7Ci0gICAgZm9yIChIYXNoU2V0
PENTU1Byb3BlcnR5SUQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVzLmJlZ2luUHJv
cGVydGllcygpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGNvbXBvc2l0ZUFuaW1hdGlvbigp
LT5vdmVycmlkZUltcGxpY2l0QW5pbWF0aW9ucygqaXQpOworICAgIGZvciAoYXV0byBwcm9wZXJ0
eUlEIDogbV9rZXlmcmFtZXMucHJvcGVydGllcygpKQorICAgICAgICBjb21wb3NpdGVBbmltYXRp
b24oKS0+b3ZlcnJpZGVJbXBsaWNpdEFuaW1hdGlvbnMocHJvcGVydHlJRCk7CiB9CiAKIHZvaWQg
S2V5ZnJhbWVBbmltYXRpb246OnJlc3VtZU92ZXJyaWRkZW5BbmltYXRpb25zKCkKIHsKICAgICAv
LyBUaGlzIHdpbGwgcmVzdW1lIG92ZXJyaWRkZW4gaW1wbGljaXQgYW5pbWF0aW9ucwotICAgIEhh
c2hTZXQ8Q1NTUHJvcGVydHlJRD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fa2V5ZnJhbWVzLmVu
ZFByb3BlcnRpZXMoKTsKLSAgICBmb3IgKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD46OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZXMuYmVnaW5Qcm9wZXJ0aWVzKCk7IGl0ICE9IGVuZDsgKytp
dCkKLSAgICAgICAgY29tcG9zaXRlQW5pbWF0aW9uKCktPnJlc3VtZU92ZXJyaWRkZW5JbXBsaWNp
dEFuaW1hdGlvbnMoKml0KTsKKyAgICBmb3IgKGF1dG8gcHJvcGVydHlJRCA6IG1fa2V5ZnJhbWVz
LnByb3BlcnRpZXMoKSkKKyAgICAgICAgY29tcG9zaXRlQW5pbWF0aW9uKCktPnJlc3VtZU92ZXJy
aWRkZW5JbXBsaWNpdEFuaW1hdGlvbnMocHJvcGVydHlJRCk7CiB9CiAKIGJvb2wgS2V5ZnJhbWVB
bmltYXRpb246OmFmZmVjdHNQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KSBjb25zdApA
QCAtNDQ3LDExICs0MzksMTAgQEAgZG91YmxlIEtleWZyYW1lQW5pbWF0aW9uOjp0aW1lVG9OZXh0
U2VydmljZSgpCiAgICAgICAgIAogICAgIC8vIEEgcmV0dXJuIHZhbHVlIG9mIDAgbWVhbnMgd2Ug
bmVlZCBzZXJ2aWNlLiBCdXQgaWYgd2Ugb25seSBoYXZlIGFjY2VsZXJhdGVkIGFuaW1hdGlvbnMg
d2UgCiAgICAgLy8gb25seSBuZWVkIHNlcnZpY2UgYXQgdGhlIGVuZCBvZiB0aGUgdHJhbnNpdGlv
bgotICAgIEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD46OmNvbnN0X2l0ZXJhdG9yIGVuZFByb3BlcnRp
ZXMgPSBtX2tleWZyYW1lcy5lbmRQcm9wZXJ0aWVzKCk7CiAgICAgYm9vbCBhY2NlbGVyYXRlZFBy
b3BlcnRpZXNPbmx5ID0gdHJ1ZTsKICAgICAKLSAgICBmb3IgKEhhc2hTZXQ8Q1NTUHJvcGVydHlJ
RD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZXMuYmVnaW5Qcm9wZXJ0aWVzKCk7IGl0
ICE9IGVuZFByb3BlcnRpZXM7ICsraXQpIHsKLSAgICAgICAgaWYgKCFDU1NQcm9wZXJ0eUFuaW1h
dGlvbjo6YW5pbWF0aW9uT2ZQcm9wZXJ0eUlzQWNjZWxlcmF0ZWQoKml0KSB8fCAhaXNBY2NlbGVy
YXRlZCgpKSB7CisgICAgZm9yIChhdXRvIHByb3BlcnR5SUQgOiBtX2tleWZyYW1lcy5wcm9wZXJ0
aWVzKCkpIHsKKyAgICAgICAgaWYgKCFDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0aW9uT2ZQ
cm9wZXJ0eUlzQWNjZWxlcmF0ZWQocHJvcGVydHlJRCkgfHwgIWlzQWNjZWxlcmF0ZWQoKSkgewog
ICAgICAgICAgICAgYWNjZWxlcmF0ZWRQcm9wZXJ0aWVzT25seSA9IGZhbHNlOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9LZXlmcmFtZUFuaW1hdGlvbi5oCmluZGV4IDJlZGRkNzE3OWM5YWUyYmY3YzlmZjk1NDhkNGFj
Y2MzZThmNmUyMjEuLjE0OWEzY2IwNjcxNWJhYjg1OTU2NjMwZGMyNWNjMDQzMzdhMTg5MzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9u
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24u
aApAQCAtNDAsNyArNDAsNyBAQCBjbGFzcyBSZW5kZXJTdHlsZTsKIC8vIEEgS2V5ZnJhbWVBbmlt
YXRpb24gdHJhY2tzIHRoZSBzdGF0ZSBvZiBhbiBleHBsaWNpdCBhbmltYXRpb24gZm9yIGEgc2lu
Z2xlIFJlbmRlckVsZW1lbnQuCiBjbGFzcyBLZXlmcmFtZUFuaW1hdGlvbiBmaW5hbCA6IHB1Ymxp
YyBBbmltYXRpb25CYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPEtleWZyYW1lQW5p
bWF0aW9uPiBjcmVhdGUoY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24sIFJlbmRlckVsZW1lbnQq
IHJlbmRlcmVyLCBpbnQgaW5kZXgsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0
aW9uLCBSZW5kZXJTdHlsZSogdW5hbmltYXRlZFN0eWxlKQorICAgIHN0YXRpYyBSZWZQdHI8S2V5
ZnJhbWVBbmltYXRpb24+IGNyZWF0ZShBbmltYXRpb24mIGFuaW1hdGlvbiwgUmVuZGVyRWxlbWVu
dCogcmVuZGVyZXIsIGludCBpbmRleCwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmlt
YXRpb24sIFJlbmRlclN0eWxlKiB1bmFuaW1hdGVkU3R5bGUpCiAgICAgewogICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEtleWZyYW1lQW5pbWF0aW9uKGFuaW1hdGlvbiwgcmVuZGVyZXIsIGlu
ZGV4LCBjb21wb3NpdGVBbmltYXRpb24sIHVuYW5pbWF0ZWRTdHlsZSkpOwogICAgIH0KQEAgLTg3
LDIxICs4NywxNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBjaGVja0Zvck1hdGNoaW5nRmlsdGVy
RnVuY3Rpb25MaXN0cygpOwogCiBwcml2YXRlOgotICAgIEtleWZyYW1lQW5pbWF0aW9uKGNvbnN0
IEFuaW1hdGlvbiYsIFJlbmRlckVsZW1lbnQqLCBpbnQgaW5kZXgsIENvbXBvc2l0ZUFuaW1hdGlv
biosIFJlbmRlclN0eWxlKiB1bmFuaW1hdGVkU3R5bGUpOworICAgIEtleWZyYW1lQW5pbWF0aW9u
KEFuaW1hdGlvbiYsIFJlbmRlckVsZW1lbnQqLCBpbnQgaW5kZXgsIENvbXBvc2l0ZUFuaW1hdGlv
biosIFJlbmRlclN0eWxlKiB1bmFuaW1hdGVkU3R5bGUpOwogICAgIHZpcnR1YWwgfktleWZyYW1l
QW5pbWF0aW9uKCk7CiAgICAgCiAgICAgLy8gR2V0IHRoZSBzdHlsZXMgZm9yIHRoZSBnaXZlbiBw
cm9wZXJ0eSBzdXJyb3VuZGluZyB0aGUgY3VycmVudCBhbmltYXRpb24gdGltZSBhbmQgdGhlIHBy
b2dyZXNzIGJldHdlZW4gdGhlbS4KICAgICB2b2lkIGZldGNoSW50ZXJ2YWxFbmRwb2ludHNGb3JQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSomIGZyb21TdHlsZSwgY29u
c3QgUmVuZGVyU3R5bGUqJiB0b1N0eWxlLCBkb3VibGUmIHByb2dyZXNzKSBjb25zdDsKIAotICAg
IC8vIFRoZSBrZXlmcmFtZXMgdGhhdCB3ZSBhcmUgYmxlbmRpbmcuCiAgICAgS2V5ZnJhbWVMaXN0
IG1fa2V5ZnJhbWVzOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV91bmFuaW1hdGVkU3R5bGU7
IC8vIFRoZSBzdHlsZSBqdXN0IGJlZm9yZSB3ZSBzdGFydGVkIGFuaW1hdGlvbgogCi0gICAgLy8g
VGhlIG9yZGVyIGluIHdoaWNoIHRoaXMgYW5pbWF0aW9uIGFwcGVhcnMgaW4gdGhlIGFuaW1hdGlv
bi1uYW1lIHN0eWxlLgotICAgIGludCBtX2luZGV4OwotICAgIGJvb2wgbV9zdGFydEV2ZW50RGlz
cGF0Y2hlZDsKLQotICAgIC8vIFRoZSBzdHlsZSBqdXN0IGJlZm9yZSB3ZSBzdGFydGVkIGFuaW1h
dGlvbgotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gbV91bmFuaW1hdGVkU3R5bGU7CisgICAgaW50
IG1faW5kZXg7IC8vIFRoZSBvcmRlciBpbiB3aGljaCB0aGlzIGFuaW1hdGlvbiBhcHBlYXJzIGlu
IHRoZSBhbmltYXRpb24tbmFtZSBzdHlsZS4KKyAgICBib29sIG1fc3RhcnRFdmVudERpc3BhdGNo
ZWQgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uLmNwcAppbmRleCAxODk2Y2IzYmVi
OTY5MmYxODY0MWYwNDI0MzgxMjU2ZGQ3ZjY5YWI0Li5kNjc3MGE0NTMwNjM4NDJlMzM2Nzg0ZDRj
NThiMzM5NGI0OTA3YTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmlt
YXRpb24vQW5pbWF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRp
b24vQW5pbWF0aW9uLmNwcApAQCAtMTI1LDQwICsxMjUsMzcgQEAgQW5pbWF0aW9uOjp+QW5pbWF0
aW9uKCkKIHsKIH0KIAotYm9vbCBBbmltYXRpb246OmFuaW1hdGlvbnNNYXRjaChjb25zdCBBbmlt
YXRpb24qIG8sIGJvb2wgbWF0Y2hQbGF5U3RhdGVzKSBjb25zdAorYm9vbCBBbmltYXRpb246OmFu
aW1hdGlvbnNNYXRjaChjb25zdCBBbmltYXRpb24mIG90aGVyLCBib29sIG1hdGNoUGxheVN0YXRl
cykgY29uc3QKIHsKLSAgICBpZiAoIW8pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAg
ICBib29sIHJlc3VsdCA9IG1fbmFtZSA9PSBvLT5tX25hbWUKLSAgICAgICAgICAgICAgICAgICYm
IG1fcHJvcGVydHkgPT0gby0+bV9wcm9wZXJ0eSAKLSAgICAgICAgICAgICAgICAgICYmIG1fbW9k
ZSA9PSBvLT5tX21vZGUKLSAgICAgICAgICAgICAgICAgICYmIG1faXRlcmF0aW9uQ291bnQgPT0g
by0+bV9pdGVyYXRpb25Db3VudAotICAgICAgICAgICAgICAgICAgJiYgbV9kZWxheSA9PSBvLT5t
X2RlbGF5Ci0gICAgICAgICAgICAgICAgICAmJiBtX2R1cmF0aW9uID09IG8tPm1fZHVyYXRpb24K
LSAgICAgICAgICAgICAgICAgICYmICoobV90aW1pbmdGdW5jdGlvbi5nZXQoKSkgPT0gKihvLT5t
X3RpbWluZ0Z1bmN0aW9uLmdldCgpKQorICAgIGJvb2wgcmVzdWx0ID0gbV9uYW1lID09IG90aGVy
Lm1fbmFtZQorICAgICAgICAmJiBtX3Byb3BlcnR5ID09IG90aGVyLm1fcHJvcGVydHkKKyAgICAg
ICAgJiYgbV9tb2RlID09IG90aGVyLm1fbW9kZQorICAgICAgICAmJiBtX2l0ZXJhdGlvbkNvdW50
ID09IG90aGVyLm1faXRlcmF0aW9uQ291bnQKKyAgICAgICAgJiYgbV9kZWxheSA9PSBvdGhlci5t
X2RlbGF5CisgICAgICAgICYmIG1fZHVyYXRpb24gPT0gb3RoZXIubV9kdXJhdGlvbgorICAgICAg
ICAmJiAqKG1fdGltaW5nRnVuY3Rpb24uZ2V0KCkpID09ICoob3RoZXIubV90aW1pbmdGdW5jdGlv
bi5nZXQoKSkKICNpZiBFTkFCTEUoQ1NTX0FOSU1BVElPTlNfTEVWRUxfMikKLSAgICAgICAgICAg
ICAgICAgICYmICoobV90cmlnZ2VyLmdldCgpKSA9PSAqKG8tPm1fdHJpZ2dlci5nZXQoKSkKKyAg
ICAgICAgJiYgKihtX3RyaWdnZXIuZ2V0KCkpID09ICoob3RoZXIubV90cmlnZ2VyLmdldCgpKQog
I2VuZGlmCi0gICAgICAgICAgICAgICAgICAmJiBtX2RpcmVjdGlvbiA9PSBvLT5tX2RpcmVjdGlv
bgotICAgICAgICAgICAgICAgICAgJiYgbV9maWxsTW9kZSA9PSBvLT5tX2ZpbGxNb2RlCi0gICAg
ICAgICAgICAgICAgICAmJiBtX2RlbGF5U2V0ID09IG8tPm1fZGVsYXlTZXQKLSAgICAgICAgICAg
ICAgICAgICYmIG1fZGlyZWN0aW9uU2V0ID09IG8tPm1fZGlyZWN0aW9uU2V0Ci0gICAgICAgICAg
ICAgICAgICAmJiBtX2R1cmF0aW9uU2V0ID09IG8tPm1fZHVyYXRpb25TZXQKLSAgICAgICAgICAg
ICAgICAgICYmIG1fZmlsbE1vZGVTZXQgPT0gby0+bV9maWxsTW9kZVNldAotICAgICAgICAgICAg
ICAgICAgJiYgbV9pdGVyYXRpb25Db3VudFNldCA9PSBvLT5tX2l0ZXJhdGlvbkNvdW50U2V0Ci0g
ICAgICAgICAgICAgICAgICAmJiBtX25hbWVTZXQgPT0gby0+bV9uYW1lU2V0Ci0gICAgICAgICAg
ICAgICAgICAmJiBtX3Byb3BlcnR5U2V0ID09IG8tPm1fcHJvcGVydHlTZXQKLSAgICAgICAgICAg
ICAgICAgICYmIG1fdGltaW5nRnVuY3Rpb25TZXQgPT0gby0+bV90aW1pbmdGdW5jdGlvblNldAor
ICAgICAgICAmJiBtX2RpcmVjdGlvbiA9PSBvdGhlci5tX2RpcmVjdGlvbgorICAgICAgICAmJiBt
X2ZpbGxNb2RlID09IG90aGVyLm1fZmlsbE1vZGUKKyAgICAgICAgJiYgbV9kZWxheVNldCA9PSBv
dGhlci5tX2RlbGF5U2V0CisgICAgICAgICYmIG1fZGlyZWN0aW9uU2V0ID09IG90aGVyLm1fZGly
ZWN0aW9uU2V0CisgICAgICAgICYmIG1fZHVyYXRpb25TZXQgPT0gb3RoZXIubV9kdXJhdGlvblNl
dAorICAgICAgICAmJiBtX2ZpbGxNb2RlU2V0ID09IG90aGVyLm1fZmlsbE1vZGVTZXQKKyAgICAg
ICAgJiYgbV9pdGVyYXRpb25Db3VudFNldCA9PSBvdGhlci5tX2l0ZXJhdGlvbkNvdW50U2V0Cisg
ICAgICAgICYmIG1fbmFtZVNldCA9PSBvdGhlci5tX25hbWVTZXQKKyAgICAgICAgJiYgbV9wcm9w
ZXJ0eVNldCA9PSBvdGhlci5tX3Byb3BlcnR5U2V0CisgICAgICAgICYmIG1fdGltaW5nRnVuY3Rp
b25TZXQgPT0gb3RoZXIubV90aW1pbmdGdW5jdGlvblNldAogI2lmIEVOQUJMRShDU1NfQU5JTUFU
SU9OU19MRVZFTF8yKQotICAgICAgICAgICAgICAgICAgJiYgbV90cmlnZ2VyU2V0ID09IG8tPm1f
dHJpZ2dlclNldAorICAgICAgICAmJiBtX3RyaWdnZXJTZXQgPT0gb3RoZXIubV90cmlnZ2VyU2V0
CiAjZW5kaWYKLSAgICAgICAgICAgICAgICAgICYmIG1faXNOb25lID09IG8tPm1faXNOb25lOwor
ICAgICAgICAmJiBtX2lzTm9uZSA9PSBvdGhlci5tX2lzTm9uZTsKIAogICAgIGlmICghcmVzdWx0
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gIW1hdGNoUGxheVN0YXRlcyB8
fCAobV9wbGF5U3RhdGUgPT0gby0+bV9wbGF5U3RhdGUgJiYgbV9wbGF5U3RhdGVTZXQgPT0gby0+
bV9wbGF5U3RhdGVTZXQpOworICAgIHJldHVybiAhbWF0Y2hQbGF5U3RhdGVzIHx8IChtX3BsYXlT
dGF0ZSA9PSBvdGhlci5tX3BsYXlTdGF0ZSAmJiBtX3BsYXlTdGF0ZVNldCA9PSBvdGhlci5tX3Bs
YXlTdGF0ZVNldCk7CiB9CiAKIGNvbnN0IFN0cmluZyYgQW5pbWF0aW9uOjppbml0aWFsTmFtZSgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmltYXRpb24vQW5pbWF0aW9uLmgKaW5kZXgg
YzY5NThmNDNiYzlmMDEzMzUwZTQxOGVlOTYyMDg0ODNhZTFhMjQwNS4uNzE4MmM3YzAyYWY3N2Fl
OTMwYjQ1OThkN2U2MGM4Nzk0MWI3NjI0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYW5pbWF0aW9uL0FuaW1hdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2FuaW1hdGlvbi9BbmltYXRpb24uaApAQCAtMTYwLDEwICsxNjAsMTAgQEAgcHVibGljOgogICAg
IEFuaW1hdGlvbiYgb3BlcmF0b3I9KGNvbnN0IEFuaW1hdGlvbiYgbyk7CiAKICAgICAvLyByZXR1
cm4gdHJ1ZSBpZiBhbGwgbWVtYmVycyBvZiB0aGlzIGNsYXNzIG1hdGNoIChleGNsdWRpbmcgbV9u
ZXh0KQotICAgIGJvb2wgYW5pbWF0aW9uc01hdGNoKGNvbnN0IEFuaW1hdGlvbiosIGJvb2wgbWF0
Y2hQbGF5U3RhdGVzID0gdHJ1ZSkgY29uc3Q7CisgICAgYm9vbCBhbmltYXRpb25zTWF0Y2goY29u
c3QgQW5pbWF0aW9uJiwgYm9vbCBtYXRjaFBsYXlTdGF0ZXMgPSB0cnVlKSBjb25zdDsKIAogICAg
IC8vIHJldHVybiB0cnVlIGV2ZXJ5IEFuaW1hdGlvbiBpbiB0aGUgY2hhaW4gKGRlZmluZWQgYnkg
bV9uZXh0KSBtYXRjaCAKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQW5pbWF0aW9uJiBvKSBj
b25zdCB7IHJldHVybiBhbmltYXRpb25zTWF0Y2goJm8pOyB9CisgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEFuaW1hdGlvbiYgbykgY29uc3QgeyByZXR1cm4gYW5pbWF0aW9uc01hdGNoKG8pOyB9
CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEFuaW1hdGlvbiYgbykgY29uc3QgeyByZXR1cm4g
ISgqdGhpcyA9PSBvKTsgfQogCiAgICAgYm9vbCBmaWxsc0JhY2t3YXJkcygpIGNvbnN0IHsgcmV0
dXJuIG1fZmlsbE1vZGVTZXQgJiYgKG1fZmlsbE1vZGUgPT0gQW5pbWF0aW9uRmlsbE1vZGVCYWNr
d2FyZHMgfHwgbV9maWxsTW9kZSA9PSBBbmltYXRpb25GaWxsTW9kZUJvdGgpOyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCBkMTU4NmQ4ZjQyOTZjMjhiNWJi
MWJhNTJmZTI2ZjQ2ZjdjNzg0ZTE0Li5mY2MzMWU3NjhmZGEyNTgzMmUyZDRjZDg0NGQ0OTlmOWZi
OTIyYzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTM3
NTAsOCArMzc1MCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgTGF5b3V0UmVjdCYgZGFtYWdlUmVjdCwKICAgICBMYXllclBhaW50aW5n
SW5mbyBwYWludGluZ0luZm8odGhpcywgZW5jbG9zaW5nSW50UmVjdChkYW1hZ2VSZWN0KSwgcGFp
bnRCZWhhdmlvciwgc3VicGl4ZWxBY2N1bXVsYXRpb24sIHN1YnRyZWVQYWludFJvb3QsICZvdmVy
bGFwVGVzdFJlcXVlc3RzKTsKICAgICBwYWludExheWVyKGNvbnRleHQsIHBhaW50aW5nSW5mbywg
cGFpbnRGbGFncyk7CiAKLSAgICBmb3IgKGF1dG8gaXQgOiBvdmVybGFwVGVzdFJlcXVlc3RzKQot
ICAgICAgICBpdC5rZXktPnNldE92ZXJsYXBUZXN0UmVzdWx0KGZhbHNlKTsKKyAgICBmb3IgKGF1
dG8mIHdpZGdldCA6IG92ZXJsYXBUZXN0UmVxdWVzdHMua2V5cygpKQorICAgICAgICB3aWRnZXQt
PnNldE92ZXJsYXBUZXN0UmVzdWx0KGZhbHNlKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6cGFp
bnRPdmVybGF5U2Nyb2xsYmFycyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IExheW91
dFJlY3QmIGRhbWFnZVJlY3QsIFBhaW50QmVoYXZpb3IgcGFpbnRCZWhhdmlvciwgUmVuZGVyT2Jq
ZWN0KiBzdWJ0cmVlUGFpbnRSb290KQpAQCAtMzgyMCwxMiArMzgyMCwxMiBAQCBzdGF0aWMgdm9p
ZCBwZXJmb3JtT3ZlcmxhcFRlc3RzKE92ZXJsYXBUZXN0UmVxdWVzdE1hcCYgb3ZlcmxhcFRlc3RS
ZXF1ZXN0cywgY29ucwogewogICAgIFZlY3RvcjxPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQqPiBv
dmVybGFwcGVkUmVxdWVzdENsaWVudHM7CiAgICAgTGF5b3V0UmVjdCBib3VuZGluZ0JveCA9IGxh
eWVyLT5ib3VuZGluZ0JveChyb290TGF5ZXIsIGxheWVyLT5vZmZzZXRGcm9tQW5jZXN0b3Iocm9v
dExheWVyKSk7Ci0gICAgZm9yIChhdXRvIGl0IDogb3ZlcmxhcFRlc3RSZXF1ZXN0cykgewotICAg
ICAgICBpZiAoIWJvdW5kaW5nQm94LmludGVyc2VjdHMoaXQudmFsdWUpKQorICAgIGZvciAoYXV0
byYgcmVxdWVzdCA6IG92ZXJsYXBUZXN0UmVxdWVzdHMpIHsKKyAgICAgICAgaWYgKCFib3VuZGlu
Z0JveC5pbnRlcnNlY3RzKHJlcXVlc3QudmFsdWUpKQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgaXQua2V5LT5zZXRPdmVybGFwVGVzdFJlc3VsdCh0cnVlKTsKLSAgICAgICAgb3Zl
cmxhcHBlZFJlcXVlc3RDbGllbnRzLmFwcGVuZChpdC5rZXkpOworICAgICAgICByZXF1ZXN0Lmtl
eS0+c2V0T3ZlcmxhcFRlc3RSZXN1bHQodHJ1ZSk7CisgICAgICAgIG92ZXJsYXBwZWRSZXF1ZXN0
Q2xpZW50cy5hcHBlbmQocmVxdWVzdC5rZXkpOwogICAgIH0KICAgICBmb3IgKGF1dG8gY2xpZW50
IDogb3ZlcmxhcHBlZFJlcXVlc3RDbGllbnRzKQogICAgICAgICBvdmVybGFwVGVzdFJlcXVlc3Rz
LnJlbW92ZShjbGllbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL0tleWZyYW1lTGlzdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0tleWZy
YW1lTGlzdC5oCmluZGV4IGRmMmVkODE0ZWMzYmEyNjE0OTNlNjA1NTJjYjY5ZDM0YmVhZDc1YWQu
LjRkZjVmNGRiNjVkNzliZjRhZWUyNzI5NDkyMTQ1NWFlYmJmYjc4ZTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9LZXlmcmFtZUxpc3QuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvS2V5ZnJhbWVMaXN0LmgKQEAgLTgyLDEzICs4MiwxMyBA
QCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3Ap
IHsgbV9wcm9wZXJ0aWVzLmFkZChwcm9wKTsgfQogICAgIGJvb2wgY29udGFpbnNQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIHByb3ApIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGllcy5jb250YWlucyhw
cm9wKTsgfQotICAgIEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD46OmNvbnN0X2l0ZXJhdG9yIGJlZ2lu
UHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGllcy5iZWdpbigpOyB9Ci0gICAg
SGFzaFNldDxDU1NQcm9wZXJ0eUlEPjo6Y29uc3RfaXRlcmF0b3IgZW5kUHJvcGVydGllcygpIGNv
bnN0IHsgcmV0dXJuIG1fcHJvcGVydGllcy5lbmQoKTsgfQorICAgIGNvbnN0IEhhc2hTZXQ8Q1NT
UHJvcGVydHlJRD4mIHByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXM7IH0K
ICAgICAKICAgICB2b2lkIGNsZWFyKCk7CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gbV9rZXlmcmFtZXMuaXNFbXB0eSgpOyB9CiAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2tleWZyYW1lcy5zaXplKCk7IH0KICAgICBjb25zdCBLZXlmcmFtZVZhbHVlJiBvcGVy
YXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9rZXlmcmFtZXNbaW5kZXhdOyB9
CisgICAgY29uc3QgVmVjdG9yPEtleWZyYW1lVmFsdWU+JiBrZXlmcmFtZXMoKSBjb25zdCB7IHJl
dHVybiBtX2tleWZyYW1lczsgfQogCiBwcml2YXRlOgogICAgIEF0b21pY1N0cmluZyBtX2FuaW1h
dGlvbk5hbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVu
ZGVyU3R5bGUuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5o
CmluZGV4IDI3YTgwZDY5M2NmY2Q1MmQyMWQ1NWVkMjg3ZDE1MzVjZDdlOWVmYzMuLjMzZWFjNWI3
YjFmZGZhNGVjZDg3M2NjMmY1MzM0NzVlNGU1OWFjYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCkBAIC0xMDYwLDYgKzEwNjAsOSBAQCBwdWJsaWM6
CiAgICAgY29uc3QgQW5pbWF0aW9uTGlzdCogYW5pbWF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIHJh
cmVOb25Jbmhlcml0ZWREYXRhLT5tX2FuaW1hdGlvbnMuZ2V0KCk7IH0KICAgICBjb25zdCBBbmlt
YXRpb25MaXN0KiB0cmFuc2l0aW9ucygpIGNvbnN0IHsgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWRE
YXRhLT5tX3RyYW5zaXRpb25zLmdldCgpOyB9CiAKKyAgICBBbmltYXRpb25MaXN0KiBhbmltYXRp
b25zKCkgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fYW5pbWF0aW9ucy5nZXQoKTsg
fQorICAgIEFuaW1hdGlvbkxpc3QqIHRyYW5zaXRpb25zKCkgeyByZXR1cm4gcmFyZU5vbkluaGVy
aXRlZERhdGEtPm1fdHJhbnNpdGlvbnMuZ2V0KCk7IH0KKwogICAgIEFuaW1hdGlvbkxpc3QmIGVu
c3VyZUFuaW1hdGlvbnMoKTsKICAgICBBbmltYXRpb25MaXN0JiBlbnN1cmVUcmFuc2l0aW9ucygp
OwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>