<?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>58049</bug_id>
          
          <creation_ts>2011-04-07 09:22:45 -0700</creation_ts>
          <short_desc>[Mac] Editor::setComposition() should not trigger correction panel timer.</short_desc>
          <delta_ts>2011-04-07 20:59:58 -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>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac (Intel)</rep_platform>
          <op_sys>OS X 10.6</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jia Pu">jiapu.mail</reporter>
          <assigned_to name="Jia Pu">jiapu.mail</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ddavidso</cc>
    
    <cc>morrita</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>381400</commentid>
    <comment_count>0</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2011-04-07 09:22:45 -0700</bug_when>
    <thetext>When using Japanese or Chinese input method on Mac OS X that supports autocorrection panel,  Editor::setComposition() shouldn&apos;t not trigger the correction panel timer. 
&lt;rdar://problem/9226305&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381449</commentid>
    <comment_count>1</comment_count>
      <attachid>88656</attachid>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2011-04-07 10:12:23 -0700</bug_when>
    <thetext>Created attachment 88656
Patch (v1)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381501</commentid>
    <comment_count>2</comment_count>
      <attachid>88656</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-04-07 11:11:22 -0700</bug_when>
    <thetext>Comment on attachment 88656
Patch (v1)

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

This looks good. Is there any way to add some kind of test coverage?

&gt; Source/WebCore/editing/TypingCommand.cpp:139
&gt;      RefPtr&lt;TypingCommand&gt; typingCommand = TypingCommand::create(document, ForwardDeleteKey, &quot;&quot;, options, granularity);
&gt; -    typingCommand-&gt;setSmartDelete(smartDelete);
&gt;      typingCommand-&gt;apply();

I don’t think you need a local variable here any more. You can just create and apply the command all on one line.

&gt; Source/WebCore/editing/TypingCommand.h:58
&gt;      enum TypingCommandOption {
&gt;          SelectInsertedText = 1 &lt;&lt; 0,
&gt;          KillRing = 1 &lt;&lt; 1,
&gt; -        RetainAutocorrectionIndicator = 1 &lt;&lt; 2
&gt; +        RetainAutocorrectionIndicator = 1 &lt;&lt; 2,
&gt; +        PreventSpellChecking = 1 &lt;&lt; 3,
&gt; +        SmartDelete = 1 &lt;&lt; 4
&gt;      };
&gt;      typedef unsigned TypingCommandOptions;

It’s annoying that these have such long names. They should be named just Option and Options since they are class members already.

&gt; Source/WebCore/editing/TypingCommand.h:62
&gt; -    static void deleteSelection(Document*, bool smartDelete = false);
&gt; -    static void deleteKeyPressed(Document*, bool smartDelete = false, TextGranularity = CharacterGranularity, bool killRing = false);
&gt; -    static void forwardDeleteKeyPressed(Document*, bool smartDelete = false, TextGranularity = CharacterGranularity, bool killRing = false);
&gt; +    static void deleteSelection(Document*, TypingCommandOptions);
&gt; +    static void deleteKeyPressed(Document*, TypingCommandOptions, TextGranularity = CharacterGranularity);
&gt; +    static void forwardDeleteKeyPressed(Document*, TypingCommandOptions, TextGranularity = CharacterGranularity);

Since the options had default values before, I think TypingCommandOptions should still have a default of 0 after.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381509</commentid>
    <comment_count>3</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2011-04-07 11:17:20 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 88656 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=88656&amp;action=review
&gt; 
&gt; This looks good. Is there any way to add some kind of test coverage?
&gt; 
Automated test is difficult since this involves the timer. We have yet to identify a particular input sequence that triggers the recursive call. The patch is based on analyzing one available backtrace. I will try a little bit to see if I can find a deterministically reproducible case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381526</commentid>
    <comment_count>4</comment_count>
      <attachid>88656</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-04-07 11:37:10 -0700</bug_when>
    <thetext>Comment on attachment 88656
Patch (v1)

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

&gt; Source/WebCore/editing/Editor.cpp:1706
&gt; +        TypingCommand::deleteSelection(m_frame-&gt;document(), TypingCommand::PreventSpellChecking);

Do we really need these #if s?
I think we don&apos;t need spellchecking during the spell-checking anyway
and I want to have as small number of #if as possible.
In addition, this looks to change the behavior even if the panel is disabled at the runtime.
What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381539</commentid>
    <comment_count>5</comment_count>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2011-04-07 11:49:50 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 88656 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=88656&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/Editor.cpp:1706
&gt; &gt; +        TypingCommand::deleteSelection(m_frame-&gt;document(), TypingCommand::PreventSpellChecking);
&gt; 
&gt; Do we really need these #if s?

I agree that we probably should prevent spell checking here across the board. I was playing safe. 

&gt; I think we don&apos;t need spellchecking during the spell-checking anyway
&gt; and I want to have as small number of #if as possible.
&gt; In addition, this looks to change the behavior even if the panel is disabled at the runtime.
&gt; What do you think?

If we decide to always use PreventSpellChecking here, then I suppose the last pony is irrelevant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381598</commentid>
    <comment_count>6</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-04-07 12:58:44 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; 
&gt; If we decide to always use PreventSpellChecking here, then I suppose the last pony is irrelevant.
Yes, always using PreventSpellChecking sounds good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381667</commentid>
    <comment_count>7</comment_count>
      <attachid>88688</attachid>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2011-04-07 13:51:57 -0700</bug_when>
    <thetext>Created attachment 88688
Patch (v2)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381669</commentid>
    <comment_count>8</comment_count>
      <attachid>88688</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-04-07 13:53:38 -0700</bug_when>
    <thetext>Comment on attachment 88688
Patch (v2)

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

&gt; Source/WebCore/ChangeLog:14
&gt; +        No new tests. (OOPS!)

Can’t land a patch with this line in it. Please replace with an explanation of why there are no new tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381680</commentid>
    <comment_count>9</comment_count>
      <attachid>88692</attachid>
    <who name="Jia Pu">jiapu.mail</who>
    <bug_when>2011-04-07 14:02:48 -0700</bug_when>
    <thetext>Created attachment 88692
Path (v3)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381967</commentid>
    <comment_count>10</comment_count>
      <attachid>88692</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-07 20:59:52 -0700</bug_when>
    <thetext>Comment on attachment 88692
Path (v3)

Clearing flags on attachment: 88692

Committed r83245: &lt;http://trac.webkit.org/changeset/83245&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381968</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-07 20:59:58 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88656</attachid>
            <date>2011-04-07 10:12:23 -0700</date>
            <delta_ts>2011-04-07 13:51:54 -0700</delta_ts>
            <desc>Patch (v1)</desc>
            <filename>bug-58049-20110407101222.patch</filename>
            <type>text/plain</type>
            <size>15624</size>
            <attacher name="Jia Pu">jiapu.mail</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMwNjcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwNjIwOTljMzA2Y2NlNWQ4
YmIxNmE4MWRlNTgyZmExNTE5NTBiZDEyLi4wOGQwMDM2NjkwZTAxNzY4ZmNmYzIzN2M3OWQwMWIz
ZWUyNWIxNzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMDQtMDcgIEppYSBQ
dSAgPGpwdUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW01hY10gRWRpdG9yOjpzZXRDb21wb3NpdGlvbigpIHNob3VsZCBub3QgdHJp
Z2dlciBjb3JyZWN0aW9uIHBhbmVsIHRpbWVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTgwNDkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzkyMjYz
MDU+CisKKyAgICAgICAgT24gTWFjIE9TIFggdGhhdCBzdXBwb3J0cyBhdXRvY29ycmVjdGlvbiBw
YW5lbCwgdHlwaW5nIHVuY29uZmlybWVkIGNvbXBvc2l0aW9uIChpLmUuIHVuY29uZmlybWVkIEph
cGFuZXNlIG9yIENoaW5lc2UgaW5wdXQpCisgICAgICAgIHNob3VsZCBub3Qgc3RhcnQgYXV0b2Nv
cnJlY3Rpb24gdGltZXIuIFdlIGFkZGVkIGEgbWVtYmVyIHZhcmlhYmxlLCBtX3Nob3VsZFByZXZl
bnRTcGVsbENoZWNraW5nLCB0byBUeXBpbmdDb21tYW5kLiAKKyAgICAgICAgV2hlbiB0aGlzIHZh
bHVlIGlzIHRydWUsIG1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZygpIHdpbGwgbm90IGJlIGNh
bGxlZCBpbiBUeXBpbmdDb21tYW5kOjp0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoKS4KKyAgICAg
ICAgbV9zaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZyBpcyBzZXQgdG8gdHJ1ZSBpbiB0aGUgVHlw
aW5nQ29tbWFuZCBvYmplY3RzIGNyZWF0ZWQgYnkgRWRpdG9yOjpzZXRDb21wb3NpdGlvbigpLgor
CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
OjpkZWxldGVXaXRoRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y29uZmly
bUNvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2V0Q29tcG9zaXRpb24p
OgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpleGVjdXRlRGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmV4ZWN1dGVGb3J3YXJkRGVsZXRl
KToKKyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VHlwaW5nQ29tbWFuZDo6VHlwaW5nQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpUeXBp
bmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29t
bWFuZDo6ZGVsZXRlS2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5k
Ojpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21t
YW5kOjppbnNlcnRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OnR5cGlu
Z0FkZGVkVG9PcGVuQ29tbWFuZCk6CisgICAgICAgICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmg6
CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpzZXRTaG91bGRQcmV2ZW50U3BlbGxD
aGVja2luZyk6CisKIDIwMTEtMDQtMDYgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbi5wb3Vs
YWluQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCA5MGViODI1YzA0NzQ5YzVkM2VjZWFkMzMyYjJjMDA1
YzdiN2JmYzFiLi5iZjE2Mjc5NTM1NzZiYzlmMTYwNzUwZTY4ZDljZWI5MmRjY2U0NTA1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC0zMzksNyArMzM5LDcgQEAgYm9vbCBFZGl0b3I6
OmRlbGV0ZVdpdGhEaXJlY3Rpb24oU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgVGV4dEdy
YW51bGFyaXR5IGcKIAogICAgIGlmIChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+aXNSYW5nZSgpKSB7
CiAgICAgICAgIGlmIChpc1R5cGluZ0FjdGlvbikgewotICAgICAgICAgICAgVHlwaW5nQ29tbWFu
ZDo6ZGVsZXRlS2V5UHJlc3NlZChtX2ZyYW1lLT5kb2N1bWVudCgpLCBjYW5TbWFydENvcHlPckRl
bGV0ZSgpLCBncmFudWxhcml0eSk7CisgICAgICAgICAgICBUeXBpbmdDb21tYW5kOjpkZWxldGVL
ZXlQcmVzc2VkKG1fZnJhbWUtPmRvY3VtZW50KCksIGNhblNtYXJ0Q29weU9yRGVsZXRlKCkgPyBU
eXBpbmdDb21tYW5kOjpTbWFydERlbGV0ZSA6IDAsIGdyYW51bGFyaXR5KTsKICAgICAgICAgICAg
IHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgaWYgKGtpbGxSaW5nKQpAQCAtMzQ4LDE0ICszNDgsMTkgQEAgYm9vbCBF
ZGl0b3I6OmRlbGV0ZVdpdGhEaXJlY3Rpb24oU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwg
VGV4dEdyYW51bGFyaXR5IGcKICAgICAgICAgICAgIC8vIEltcGxpY2l0bHkgY2FsbHMgcmV2ZWFs
U2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCkuCiAgICAgICAgIH0KICAgICB9IGVsc2Ug
eworICAgICAgICBUeXBpbmdDb21tYW5kOjpUeXBpbmdDb21tYW5kT3B0aW9ucyBvcHRpb25zID0g
MDsKKyAgICAgICAgaWYgKGNhblNtYXJ0Q29weU9yRGVsZXRlKCkpCisgICAgICAgICAgICBvcHRp
b25zIHw9IFR5cGluZ0NvbW1hbmQ6OlNtYXJ0RGVsZXRlOworICAgICAgICBpZiAoa2lsbFJpbmcp
CisgICAgICAgICAgICBvcHRpb25zIHw9IFR5cGluZ0NvbW1hbmQ6OktpbGxSaW5nOwogICAgICAg
ICBzd2l0Y2ggKGRpcmVjdGlvbikgewogICAgICAgICBjYXNlIERpcmVjdGlvbkZvcndhcmQ6CiAg
ICAgICAgIGNhc2UgRGlyZWN0aW9uUmlnaHQ6Ci0gICAgICAgICAgICBUeXBpbmdDb21tYW5kOjpm
b3J3YXJkRGVsZXRlS2V5UHJlc3NlZChtX2ZyYW1lLT5kb2N1bWVudCgpLCBjYW5TbWFydENvcHlP
ckRlbGV0ZSgpLCBncmFudWxhcml0eSwga2lsbFJpbmcpOworICAgICAgICAgICAgVHlwaW5nQ29t
bWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQobV9mcmFtZS0+ZG9jdW1lbnQoKSwgb3B0aW9u
cywgZ3JhbnVsYXJpdHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRGlyZWN0
aW9uQmFja3dhcmQ6CiAgICAgICAgIGNhc2UgRGlyZWN0aW9uTGVmdDoKLSAgICAgICAgICAgIFR5
cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQobV9mcmFtZS0+ZG9jdW1lbnQoKSwgY2FuU21h
cnRDb3B5T3JEZWxldGUoKSwgZ3JhbnVsYXJpdHksIGtpbGxSaW5nKTsKKyAgICAgICAgICAgIFR5
cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQobV9mcmFtZS0+ZG9jdW1lbnQoKSwgb3B0aW9u
cywgZ3JhbnVsYXJpdHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
cmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CkBAIC0xNjI5LDcgKzE2MzQs
NyBAQCB2b2lkIEVkaXRvcjo6Y29uZmlybUNvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwg
Ym9vbCBwcmVzZXJ2ZVNlbGVjdGlvbikKICAgICAvLyBJZiB0ZXh0IGlzIGVtcHR5LCB0aGVuIGRl
bGV0ZSB0aGUgb2xkIGNvbXBvc2l0aW9uIGhlcmUuICBJZiB0ZXh0IGlzIG5vbi1lbXB0eSwgSW5z
ZXJ0VGV4dENvbW1hbmQ6OmlucHV0CiAgICAgLy8gd2lsbCBkZWxldGUgdGhlIG9sZCBjb21wb3Np
dGlvbiB3aXRoIGFuIG9wdGltaXplZCByZXBsYWNlIG9wZXJhdGlvbi4KICAgICBpZiAodGV4dC5p
c0VtcHR5KCkpCi0gICAgICAgIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZVNlbGVjdGlvbihtX2ZyYW1l
LT5kb2N1bWVudCgpLCBmYWxzZSk7CisgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZVNlbGVj
dGlvbihtX2ZyYW1lLT5kb2N1bWVudCgpLCAwKTsKIAogICAgIG1fY29tcG9zaXRpb25Ob2RlID0g
MDsKICAgICBtX2N1c3RvbUNvbXBvc2l0aW9uVW5kZXJsaW5lcy5jbGVhcigpOwpAQCAtMTY5Niwx
NCArMTcwMSwyMyBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0
ZXh0LCBjb25zdCBWZWN0b3I8Q29tcG9zaXRpb25VbmRlcmxpbgogCiAgICAgLy8gSWYgdGV4dCBp
cyBlbXB0eSwgdGhlbiBkZWxldGUgdGhlIG9sZCBjb21wb3NpdGlvbiBoZXJlLiAgSWYgdGV4dCBp
cyBub24tZW1wdHksIEluc2VydFRleHRDb21tYW5kOjppbnB1dAogICAgIC8vIHdpbGwgZGVsZXRl
IHRoZSBvbGQgY29tcG9zaXRpb24gd2l0aCBhbiBvcHRpbWl6ZWQgcmVwbGFjZSBvcGVyYXRpb24u
Ci0gICAgaWYgKHRleHQuaXNFbXB0eSgpKQotICAgICAgICBUeXBpbmdDb21tYW5kOjpkZWxldGVT
ZWxlY3Rpb24obV9mcmFtZS0+ZG9jdW1lbnQoKSwgZmFsc2UpOworICAgIGlmICh0ZXh0LmlzRW1w
dHkoKSkgeworI2lmIFNVUFBPUlRfQVVUT0NPUlJFQ1RJT05fUEFORUwKKyAgICAgICAgVHlwaW5n
Q29tbWFuZDo6ZGVsZXRlU2VsZWN0aW9uKG1fZnJhbWUtPmRvY3VtZW50KCksIFR5cGluZ0NvbW1h
bmQ6OlByZXZlbnRTcGVsbENoZWNraW5nKTsKKyNlbHNlCisgICAgICAgIFR5cGluZ0NvbW1hbmQ6
OmRlbGV0ZVNlbGVjdGlvbihtX2ZyYW1lLT5kb2N1bWVudCgpLCAwKTsKKyNlbmRpZgorICAgIH0K
IAogICAgIG1fY29tcG9zaXRpb25Ob2RlID0gMDsKICAgICBtX2N1c3RvbUNvbXBvc2l0aW9uVW5k
ZXJsaW5lcy5jbGVhcigpOwogCiAgICAgaWYgKCF0ZXh0LmlzRW1wdHkoKSkgewotICAgICAgICBU
eXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KG1fZnJhbWUtPmRvY3VtZW50KCksIHRleHQsIHRydWUs
IFR5cGluZ0NvbW1hbmQ6OlRleHRDb21wb3NpdGlvblVwZGF0ZSk7CisjaWYgU1VQUE9SVF9BVVRP
Q09SUkVDVElPTl9QQU5FTAorICAgICAgICBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KG1fZnJh
bWUtPmRvY3VtZW50KCksIHRleHQsIFR5cGluZ0NvbW1hbmQ6OlNlbGVjdEluc2VydGVkVGV4dCB8
IFR5cGluZ0NvbW1hbmQ6OlByZXZlbnRTcGVsbENoZWNraW5nLCBUeXBpbmdDb21tYW5kOjpUZXh0
Q29tcG9zaXRpb25VcGRhdGUpOworI2Vsc2UKKyAgICAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0
VGV4dChtX2ZyYW1lLT5kb2N1bWVudCgpLCB0ZXh0LCBUeXBpbmdDb21tYW5kOjpTZWxlY3RJbnNl
cnRlZFRleHQsIFR5cGluZ0NvbW1hbmQ6OlRleHRDb21wb3NpdGlvblVwZGF0ZSk7CisjZW5kaWYK
IAogICAgICAgICAvLyBGaW5kIG91dCB3aGF0IG5vZGUgaGFzIHRoZSBjb21wb3NpdGlvbiBub3cu
CiAgICAgICAgIFBvc2l0aW9uIGJhc2UgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+YmFzZSgpLmRv
d25zdHJlYW0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29t
bWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCmluZGV4
IDc1YTIwZDdhMDI1ZTkwYWRkNGE4ZjAxZjYzZTg4YzM5NmIwNTRmMjUuLmMyYTViNTk1MDcwYmRl
NmEzZDZkNmUyOGVjMDQ3MDEwN2IwZWViNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3JDb21tYW5kLmNwcApAQCAtMzE4LDcgKzMxOCw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVEZWxl
dGUoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmNlLCBjb25z
CiAgICAgY2FzZSBDb21tYW5kRnJvbURPTVdpdGhVc2VySW50ZXJmYWNlOgogICAgICAgICAvLyBJ
ZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gaXMgYSBjYXJldCwgZGVsZXRlIHRoZSBwcmVjZWRpbmcg
Y2hhcmFjdGVyLiBJRSBwZXJmb3JtcyBmb3J3YXJkRGVsZXRlLCBidXQgd2UgY3VycmVudGx5IHNp
ZGUgd2l0aCBGaXJlZm94LgogICAgICAgICAvLyBEb2Vzbid0IHNjcm9sbCB0byBtYWtlIHRoZSBz
ZWxlY3Rpb24gdmlzaWJsZSwgb3IgbW9kaWZ5IHRoZSBraWxsIHJpbmcgKHRoaXMgdGltZSwgc2lk
aW5nIHdpdGggSUUsIG5vdCBGaXJlZm94KS4KLSAgICAgICAgVHlwaW5nQ29tbWFuZDo6ZGVsZXRl
S2V5UHJlc3NlZChmcmFtZS0+ZG9jdW1lbnQoKSwgZnJhbWUtPnNlbGVjdGlvbigpLT5ncmFudWxh
cml0eSgpID09IFdvcmRHcmFudWxhcml0eSk7CisgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmRlbGV0
ZUtleVByZXNzZWQoZnJhbWUtPmRvY3VtZW50KCksIGZyYW1lLT5zZWxlY3Rpb24oKS0+Z3JhbnVs
YXJpdHkoKSA9PSBXb3JkR3JhbnVsYXJpdHkgPyBUeXBpbmdDb21tYW5kOjpTbWFydERlbGV0ZSA6
IDApOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkBAIC00NTUsNyArNDU1LDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZUZvcndhcmREZWxldGUo
RnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291cmMKICAgICAgICAg
Ly8gRG9lc24ndCBzY3JvbGwgdG8gbWFrZSB0aGUgc2VsZWN0aW9uIHZpc2libGUsIG9yIG1vZGlm
eSB0aGUga2lsbCByaW5nLgogICAgICAgICAvLyBGb3J3YXJkRGVsZXRlIGlzIG5vdCBpbXBsZW1l
bnRlZCBpbiBJRSBvciBGaXJlZm94LCBzbyB0aGlzIGJlaGF2aW9yIGlzIG9ubHkgbmVlZGVkIGZv
cgogICAgICAgICAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggb3Vyc2VsdmVzLCBhbmQg
Zm9yIGNvbnNpc3RlbmN5IHdpdGggRGVsZXRlLgotICAgICAgICBUeXBpbmdDb21tYW5kOjpmb3J3
YXJkRGVsZXRlS2V5UHJlc3NlZChmcmFtZS0+ZG9jdW1lbnQoKSk7CisgICAgICAgIFR5cGluZ0Nv
bW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKGZyYW1lLT5kb2N1bWVudCgpLCAwKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKaW5kZXggZGYxNTBlZTAwMzk1MDhk
NjM0MjdhY2I0ZWNiY2Q1MGZlNmY0MjYwOC4uNmFjNDlhNWQxOTk5NjAzNDJkOWI5ZDU5MjM5ZDk5
MDNlMDM2YjRlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21t
YW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBA
IC02NSwxNyArNjUsMTggQEAgVHlwaW5nQ29tbWFuZDo6VHlwaW5nQ29tbWFuZChEb2N1bWVudCAq
ZG9jdW1lbnQsIEVUeXBpbmdDb21tYW5kIGNvbW1hbmRUeXBlLCBjb24KICAgICAsIG1fdGV4dFRv
SW5zZXJ0KHRleHRUb0luc2VydCkKICAgICAsIG1fb3BlbkZvck1vcmVUeXBpbmcodHJ1ZSkKICAg
ICAsIG1fc2VsZWN0SW5zZXJ0ZWRUZXh0KG9wdGlvbnMgJiBTZWxlY3RJbnNlcnRlZFRleHQpCi0g
ICAgLCBtX3NtYXJ0RGVsZXRlKGZhbHNlKQorICAgICwgbV9zbWFydERlbGV0ZShvcHRpb25zICYg
U21hcnREZWxldGUpCiAgICAgLCBtX2dyYW51bGFyaXR5KGdyYW51bGFyaXR5KQogICAgICwgbV9j
b21wb3NpdGlvblR5cGUoY29tcG9zaXRpb25UeXBlKQogICAgICwgbV9raWxsUmluZyhvcHRpb25z
ICYgS2lsbFJpbmcpCiAgICAgLCBtX29wZW5lZEJ5QmFja3dhcmREZWxldGUoZmFsc2UpCiAgICAg
LCBtX3Nob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKG9wdGlvbnMgJiBSZXRhaW5B
dXRvY29ycmVjdGlvbkluZGljYXRvcikKKyAgICAsIG1fc2hvdWxkUHJldmVudFNwZWxsQ2hlY2tp
bmcob3B0aW9ucyAmIFByZXZlbnRTcGVsbENoZWNraW5nKQogewogICAgIHVwZGF0ZVByZXNlcnZl
c1R5cGluZ1N0eWxlKG1fY29tbWFuZFR5cGUpOwogfQogCi12b2lkIFR5cGluZ0NvbW1hbmQ6OmRl
bGV0ZVNlbGVjdGlvbihEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgc21hcnREZWxldGUpCit2b2lk
IFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZVNlbGVjdGlvbihEb2N1bWVudCogZG9jdW1lbnQsIFR5cGlu
Z0NvbW1hbmRPcHRpb25zIG9wdGlvbnMpCiB7CiAgICAgQVNTRVJUKGRvY3VtZW50KTsKICAgICAK
QEAgLTg3LDE2ICs4OCwxNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZVNlbGVjdGlvbihE
b2N1bWVudCogZG9jdW1lbnQsIGJvb2wgc21hcnREZWxldGUpCiAgICAgCiAgICAgRWRpdENvbW1h
bmQqIGxhc3RFZGl0Q29tbWFuZCA9IGZyYW1lLT5lZGl0b3IoKS0+bGFzdEVkaXRDb21tYW5kKCk7
CiAgICAgaWYgKGlzT3BlbkZvck1vcmVUeXBpbmdDb21tYW5kKGxhc3RFZGl0Q29tbWFuZCkpIHsK
LSAgICAgICAgc3RhdGljX2Nhc3Q8VHlwaW5nQ29tbWFuZCo+KGxhc3RFZGl0Q29tbWFuZCktPmRl
bGV0ZVNlbGVjdGlvbihzbWFydERlbGV0ZSk7CisgICAgICAgIFR5cGluZ0NvbW1hbmQqIGxhc3RU
eXBpbmdDb21tYW5kID0gc3RhdGljX2Nhc3Q8VHlwaW5nQ29tbWFuZCo+KGxhc3RFZGl0Q29tbWFu
ZCk7CisgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5zZXRTaG91bGRQcmV2ZW50U3BlbGxDaGVj
a2luZyhvcHRpb25zICYgUHJldmVudFNwZWxsQ2hlY2tpbmcpOworICAgICAgICBsYXN0VHlwaW5n
Q29tbWFuZC0+ZGVsZXRlU2VsZWN0aW9uKG9wdGlvbnMgJiBTbWFydERlbGV0ZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8VHlwaW5nQ29tbWFuZD4gdHlwaW5nQ29tbWFu
ZCA9IFR5cGluZ0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCwgRGVsZXRlU2VsZWN0aW9uLCAiIiwg
MCk7Ci0gICAgdHlwaW5nQ29tbWFuZC0+c2V0U21hcnREZWxldGUoc21hcnREZWxldGUpOworICAg
IFJlZlB0cjxUeXBpbmdDb21tYW5kPiB0eXBpbmdDb21tYW5kID0gVHlwaW5nQ29tbWFuZDo6Y3Jl
YXRlKGRvY3VtZW50LCBEZWxldGVTZWxlY3Rpb24sICIiLCBvcHRpb25zKTsKICAgICB0eXBpbmdD
b21tYW5kLT5hcHBseSgpOwogfQogCi12b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNz
ZWQoRG9jdW1lbnQgKmRvY3VtZW50LCBib29sIHNtYXJ0RGVsZXRlLCBUZXh0R3JhbnVsYXJpdHkg
Z3JhbnVsYXJpdHksIGJvb2wga2lsbFJpbmcpCit2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtl
eVByZXNzZWQoRG9jdW1lbnQgKmRvY3VtZW50LCBUeXBpbmdDb21tYW5kT3B0aW9ucyBvcHRpb25z
LCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiB7CiAgICAgQVNTRVJUKGRvY3VtZW50KTsK
ICAgICAKQEAgLTEwNSwxOCArMTA3LDE4IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5
UHJlc3NlZChEb2N1bWVudCAqZG9jdW1lbnQsIGJvb2wgc21hcnREZWxldGUsIFRleHRHCiAgICAg
CiAgICAgRWRpdENvbW1hbmQqIGxhc3RFZGl0Q29tbWFuZCA9IGZyYW1lLT5lZGl0b3IoKS0+bGFz
dEVkaXRDb21tYW5kKCk7CiAgICAgaWYgKGdyYW51bGFyaXR5ID09IENoYXJhY3RlckdyYW51bGFy
aXR5ICYmIGlzT3BlbkZvck1vcmVUeXBpbmdDb21tYW5kKGxhc3RFZGl0Q29tbWFuZCkpIHsKLSAg
ICAgICAgdXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbihzdGF0
aWNfY2FzdDxUeXBpbmdDb21tYW5kKj4obGFzdEVkaXRDb21tYW5kKSwgZnJhbWUpOwotICAgICAg
ICBzdGF0aWNfY2FzdDxUeXBpbmdDb21tYW5kKj4obGFzdEVkaXRDb21tYW5kKS0+ZGVsZXRlS2V5
UHJlc3NlZChncmFudWxhcml0eSwga2lsbFJpbmcpOworICAgICAgICBUeXBpbmdDb21tYW5kKiBs
YXN0VHlwaW5nQ29tbWFuZCA9IHN0YXRpY19jYXN0PFR5cGluZ0NvbW1hbmQqPihsYXN0RWRpdENv
bW1hbmQpOworICAgICAgICB1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2Vs
ZWN0aW9uKGxhc3RUeXBpbmdDb21tYW5kLCBmcmFtZSk7CisgICAgICAgIGxhc3RUeXBpbmdDb21t
YW5kLT5zZXRTaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZyhvcHRpb25zICYgUHJldmVudFNwZWxs
Q2hlY2tpbmcpOworICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+ZGVsZXRlS2V5UHJlc3NlZChn
cmFudWxhcml0eSwgb3B0aW9ucyAmIEtpbGxSaW5nKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIFR5cGluZ0NvbW1hbmRPcHRpb25zIG9wdGlvbnMgPSBraWxsUmluZyA/IEtpbGxSaW5n
IDogMDsKICAgICBSZWZQdHI8VHlwaW5nQ29tbWFuZD4gdHlwaW5nQ29tbWFuZCA9IFR5cGluZ0Nv
bW1hbmQ6OmNyZWF0ZShkb2N1bWVudCwgRGVsZXRlS2V5LCAiIiwgb3B0aW9ucywgZ3JhbnVsYXJp
dHkpOwotICAgIHR5cGluZ0NvbW1hbmQtPnNldFNtYXJ0RGVsZXRlKHNtYXJ0RGVsZXRlKTsKICAg
ICB0eXBpbmdDb21tYW5kLT5hcHBseSgpOwogfQogCi12b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndh
cmREZWxldGVLZXlQcmVzc2VkKERvY3VtZW50ICpkb2N1bWVudCwgYm9vbCBzbWFydERlbGV0ZSwg
VGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIGtpbGxSaW5nKQordm9pZCBUeXBpbmdD
b21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChEb2N1bWVudCAqZG9jdW1lbnQsIFR5cGlu
Z0NvbW1hbmRPcHRpb25zIG9wdGlvbnMsIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKIHsK
ICAgICAvLyBGSVhNRTogRm9yd2FyZCBkZWxldGUgaW4gVGV4dEVkaXQgYXBwZWFycyB0byBvcGVu
IGFuZCBjbG9zZSBhIG5ldyB0eXBpbmcgY29tbWFuZC4KICAgICBBU1NFUlQoZG9jdW1lbnQpOwpA
QCAtMTI2LDE0ICsxMjgsMTQgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5
UHJlc3NlZChEb2N1bWVudCAqZG9jdW1lbnQsIGJvb2wgc21hcnREZWxldGUKICAgICAKICAgICBF
ZGl0Q29tbWFuZCogbGFzdEVkaXRDb21tYW5kID0gZnJhbWUtPmVkaXRvcigpLT5sYXN0RWRpdENv
bW1hbmQoKTsKICAgICBpZiAoZ3JhbnVsYXJpdHkgPT0gQ2hhcmFjdGVyR3JhbnVsYXJpdHkgJiYg
aXNPcGVuRm9yTW9yZVR5cGluZ0NvbW1hbmQobGFzdEVkaXRDb21tYW5kKSkgewotICAgICAgICB1
cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKHN0YXRpY19jYXN0
PFR5cGluZ0NvbW1hbmQqPihsYXN0RWRpdENvbW1hbmQpLCBmcmFtZSk7Ci0gICAgICAgIHN0YXRp
Y19jYXN0PFR5cGluZ0NvbW1hbmQqPihsYXN0RWRpdENvbW1hbmQpLT5mb3J3YXJkRGVsZXRlS2V5
UHJlc3NlZChncmFudWxhcml0eSwga2lsbFJpbmcpOworICAgICAgICBUeXBpbmdDb21tYW5kKiBs
YXN0VHlwaW5nQ29tbWFuZCA9IHN0YXRpY19jYXN0PFR5cGluZ0NvbW1hbmQqPihsYXN0RWRpdENv
bW1hbmQpOworICAgICAgICB1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2Vs
ZWN0aW9uKGxhc3RUeXBpbmdDb21tYW5kLCBmcmFtZSk7CisgICAgICAgIGxhc3RUeXBpbmdDb21t
YW5kLT5zZXRTaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZyhvcHRpb25zICYgUHJldmVudFNwZWxs
Q2hlY2tpbmcpOworICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+Zm9yd2FyZERlbGV0ZUtleVBy
ZXNzZWQoZ3JhbnVsYXJpdHksIG9wdGlvbnMgJiBLaWxsUmluZyk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBUeXBpbmdDb21tYW5kT3B0aW9ucyBvcHRpb25zID0ga2lsbFJpbmcgPyBL
aWxsUmluZyA6IDA7CiAgICAgUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IHR5cGluZ0NvbW1hbmQgPSBU
eXBpbmdDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQsIEZvcndhcmREZWxldGVLZXksICIiLCBvcHRp
b25zLCBncmFudWxhcml0eSk7Ci0gICAgdHlwaW5nQ29tbWFuZC0+c2V0U21hcnREZWxldGUoc21h
cnREZWxldGUpOwogICAgIHR5cGluZ0NvbW1hbmQtPmFwcGx5KCk7CiB9CiAKQEAgLTIwMCw2ICsy
MDIsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZpcwogCiAgICAgICAgIGxhc3RUeXBpbmdDb21t
YW5kLT5zZXRDb21wb3NpdGlvblR5cGUoY29tcG9zaXRpb25UeXBlKTsKICAgICAgICAgbGFzdFR5
cGluZ0NvbW1hbmQtPnNldFNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKG9wdGlv
bnMgJiBSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcik7CisgICAgICAgIGxhc3RUeXBpbmdD
b21tYW5kLT5zZXRTaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZyhvcHRpb25zICYgUHJldmVudFNw
ZWxsQ2hlY2tpbmcpOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+aW5zZXJ0VGV4dChuZXdU
ZXh0LCBvcHRpb25zICYgU2VsZWN0SW5zZXJ0ZWRUZXh0KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTM2MCw3ICszNjMsOCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OnR5cGluZ0FkZGVkVG9P
cGVuQ29tbWFuZChFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZUZvckFkZGVkVAogI2lmIFBMQVRG
T1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05fVElHRVIpICYmICFkZWZpbmVkKEJVSUxE
SU5HX09OX0xFT1BBUkQpCiAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPmFwcGxp
ZWRFZGl0aW5nKHRoaXMpOwogICAgIC8vIFNpbmNlIHRoZSBzcGVsbGNoZWNraW5nIGNvZGUgbWF5
IGFsc28gcGVyZm9ybSBjb3JyZWN0aW9ucyBhbmQgb3RoZXIgcmVwbGFjZW1lbnRzLCBpdCBzaG91
bGQgaGFwcGVuIGFmdGVyIHRoZSB0eXBpbmcgY2hhbmdlcy4KLSAgICBtYXJrTWlzc3BlbGxpbmdz
QWZ0ZXJUeXBpbmcoY29tbWFuZFR5cGVGb3JBZGRlZFR5cGluZyk7CisgICAgaWYgKCFtX3Nob3Vs
ZFByZXZlbnRTcGVsbENoZWNraW5nKQorICAgICAgICBtYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBp
bmcoY29tbWFuZFR5cGVGb3JBZGRlZFR5cGluZyk7CiAjZWxzZQogICAgIC8vIFRoZSBvbGQgc3Bl
bGxjaGVja2luZyBjb2RlIHJlcXVpcmVzIHRoYXQgY2hlY2tpbmcgYmUgZG9uZSBmaXJzdCwgdG8g
cHJldmVudCBpc3N1ZXMgbGlrZSB0aGF0IGluIDY4NjQwNzIsIHdoZXJlIDxkb2Vzbid0PiBpcyBt
YXJrZWQgYXMgbWlzc3BlbGxlZC4KICAgICBtYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoY29t
bWFuZFR5cGVGb3JBZGRlZFR5cGluZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1R5cGluZ0NvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFu
ZC5oCmluZGV4IGJlYjRkMDI0YWZlOGUxNDNhZWRjYzdkMGYxY2Y0NDcyODMzNzU3MzQuLmQwYTFi
NjhlOWRiOGViMDMwM2MxNjdmZjQ3YWVkNzg1ZDVlM2Y0NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVHlwaW5nQ29tbWFuZC5oCkBAIC01MSwxMyArNTEsMTUgQEAgcHVibGljOgogICAgIGVudW0g
VHlwaW5nQ29tbWFuZE9wdGlvbiB7CiAgICAgICAgIFNlbGVjdEluc2VydGVkVGV4dCA9IDEgPDwg
MCwKICAgICAgICAgS2lsbFJpbmcgPSAxIDw8IDEsCi0gICAgICAgIFJldGFpbkF1dG9jb3JyZWN0
aW9uSW5kaWNhdG9yID0gMSA8PCAyCisgICAgICAgIFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNh
dG9yID0gMSA8PCAyLAorICAgICAgICBQcmV2ZW50U3BlbGxDaGVja2luZyA9IDEgPDwgMywKKyAg
ICAgICAgU21hcnREZWxldGUgPSAxIDw8IDQKICAgICB9OwogICAgIHR5cGVkZWYgdW5zaWduZWQg
VHlwaW5nQ29tbWFuZE9wdGlvbnM7CiAKLSAgICBzdGF0aWMgdm9pZCBkZWxldGVTZWxlY3Rpb24o
RG9jdW1lbnQqLCBib29sIHNtYXJ0RGVsZXRlID0gZmFsc2UpOwotICAgIHN0YXRpYyB2b2lkIGRl
bGV0ZUtleVByZXNzZWQoRG9jdW1lbnQqLCBib29sIHNtYXJ0RGVsZXRlID0gZmFsc2UsIFRleHRH
cmFudWxhcml0eSA9IENoYXJhY3RlckdyYW51bGFyaXR5LCBib29sIGtpbGxSaW5nID0gZmFsc2Up
OwotICAgIHN0YXRpYyB2b2lkIGZvcndhcmREZWxldGVLZXlQcmVzc2VkKERvY3VtZW50KiwgYm9v
bCBzbWFydERlbGV0ZSA9IGZhbHNlLCBUZXh0R3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxh
cml0eSwgYm9vbCBraWxsUmluZyA9IGZhbHNlKTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVTZWxl
Y3Rpb24oRG9jdW1lbnQqLCBUeXBpbmdDb21tYW5kT3B0aW9ucyk7CisgICAgc3RhdGljIHZvaWQg
ZGVsZXRlS2V5UHJlc3NlZChEb2N1bWVudCosIFR5cGluZ0NvbW1hbmRPcHRpb25zLCBUZXh0R3Jh
bnVsYXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgc3RhdGljIHZvaWQgZm9yd2Fy
ZERlbGV0ZUtleVByZXNzZWQoRG9jdW1lbnQqLCBUeXBpbmdDb21tYW5kT3B0aW9ucywgVGV4dEdy
YW51bGFyaXR5ID0gQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwogICAgIHN0YXRpYyB2b2lkIGluc2Vy
dFRleHQoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmLCBUeXBpbmdDb21tYW5kT3B0aW9ucywgVGV4
dENvbXBvc2l0aW9uVHlwZSA9IFRleHRDb21wb3NpdGlvbk5vbmUpOwogICAgIHN0YXRpYyB2b2lk
IGluc2VydFRleHQoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiwgVHlwaW5nQ29tbWFuZE9wdGlvbnMsIFRleHRDb21wb3NpdGlvblR5cGUgPSBUZXh0Q29t
cG9zaXRpb25Ob25lKTsKICAgICBzdGF0aWMgdm9pZCBpbnNlcnRMaW5lQnJlYWsoRG9jdW1lbnQq
LCBUeXBpbmdDb21tYW5kT3B0aW9ucyk7CkBAIC0xMDEsNiArMTAzLDcgQEAgcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIGJvb2wgcHJlc2VydmVzVHlwaW5nU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3By
ZXNlcnZlc1R5cGluZ1N0eWxlOyB9CiAgICAgdmlydHVhbCBib29sIHNob3VsZFJldGFpbkF1dG9j
b3JyZWN0aW9uSW5kaWNhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRSZXRhaW5BdXRvY29y
cmVjdGlvbkluZGljYXRvcjsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRTaG91bGRSZXRhaW5BdXRv
Y29ycmVjdGlvbkluZGljYXRvcihib29sIHJldGFpbikgeyBtX3Nob3VsZFJldGFpbkF1dG9jb3Jy
ZWN0aW9uSW5kaWNhdG9yID0gcmV0YWluOyB9CisgICAgdm9pZCBzZXRTaG91bGRQcmV2ZW50U3Bl
bGxDaGVja2luZyhib29sIHByZXZlbnQpIHsgbV9zaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZyA9
IHByZXZlbnQ7IH0KIAogICAgIHN0YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50
RnJvbUN1cnJlbnRTZWxlY3Rpb24oVHlwaW5nQ29tbWFuZCosIEZyYW1lKik7CiAKQEAgLTEyNSw2
ICsxMjgsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9vcGVuZWRCeUJhY2t3YXJkRGVsZXRlOwog
CiAgICAgYm9vbCBtX3Nob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yOworICAgIGJv
b2wgbV9zaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZzsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88688</attachid>
            <date>2011-04-07 13:51:57 -0700</date>
            <delta_ts>2011-04-07 14:02:44 -0700</delta_ts>
            <desc>Patch (v2)</desc>
            <filename>bug-58049-20110407135156.patch</filename>
            <type>text/plain</type>
            <size>20037</size>
            <attacher name="Jia Pu">jiapu.mail</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMwNjcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwNjIwOTljMzA2Y2NlNWQ4
YmIxNmE4MWRlNTgyZmExNTE5NTBiZDEyLi5jMzFmMjUyMDA1N2RjMGM1MWUxNjlkNGQ1ODllMWM2
NTkyYWYwZmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMDQtMDcgIEppYSBQ
dSAgPGpwdUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW01hY10gRWRpdG9yOjpzZXRDb21wb3NpdGlvbigpIHNob3VsZCBub3QgdHJp
Z2dlciBjb3JyZWN0aW9uIHBhbmVsIHRpbWVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTgwNDkKKyAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS85MjI2
MzA1PgorCisgICAgICAgIE9uIE1hYyBPUyBYIHRoYXQgc3VwcG9ydHMgYXV0b2NvcnJlY3Rpb24g
cGFuZWwsIHR5cGluZyB1bmNvbmZpcm1lZCBjb21wb3NpdGlvbiAoaS5lLiB1bmNvbmZpcm1lZCBK
YXBhbmVzZSBvciBDaGluZXNlIGlucHV0KQorICAgICAgICBzaG91bGQgbm90IHN0YXJ0IGF1dG9j
b3JyZWN0aW9uIHRpbWVyLiBXZSBhZGRlZCBhIG1lbWJlciB2YXJpYWJsZSwgbV9zaG91bGRQcmV2
ZW50U3BlbGxDaGVja2luZywgdG8gVHlwaW5nQ29tbWFuZC4gCisgICAgICAgIFdoZW4gdGhpcyB2
YWx1ZSBpcyB0cnVlLCBtYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoKSB3aWxsIG5vdCBiZSBj
YWxsZWQgaW4gVHlwaW5nQ29tbWFuZDo6dHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKCkuCisgICAg
ICAgIG1fc2hvdWxkUHJldmVudFNwZWxsQ2hlY2tpbmcgaXMgc2V0IHRvIHRydWUgaW4gdGhlIFR5
cGluZ0NvbW1hbmQgb2JqZWN0cyBjcmVhdGVkIGJ5IEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oKS4K
KworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAgICAgICAqIGVkaXRpbmcvRWRp
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6ZGVsZXRlV2l0aERpcmVjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNvbmZpcm1Db21wb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldENvbXBvc2l0aW9uKToKKyAgICAgICAgKiBlZGl0
aW5nL0VkaXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXhlY3V0ZURlbGV0ZSk6
CisgICAgICAgICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlR5cGluZ0NvbW1hbmQ6OlR5cGluZ0NvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5n
Q29tbWFuZDo6ZGVsZXRlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1h
bmQ6OmRlbGV0ZUtleVByZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6
Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQpOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFu
ZDo6aW5zZXJ0VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRM
aW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdy
YXBoU2VwYXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OnR5cGluZ0Fk
ZGVkVG9PcGVuQ29tbWFuZCk6CisgICAgICAgICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6VHlwaW5nQ29tbWFuZDo6c2V0U2hvdWxkUHJldmVudFNwZWxsQ2hlY2tpbmcpOgorCiAyMDEx
LTA0LTA2ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW4ucG91bGFpbkBub2tpYS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAKaW5kZXggOTBlYjgyNWMwNDc0OWM1ZDNlY2VhZDMzMmIyYzAwNWM3YjdiZmMxYi4uOGQ1MTAx
YzBiMmFiYzcyNThlMWEzMWFlNDM1ZTUyM2YzNzNiYTkxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcApAQCAtMzM5LDcgKzMzOSw3IEBAIGJvb2wgRWRpdG9yOjpkZWxldGVXaXRoRGlyZWN0
aW9uKFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleHRHcmFudWxhcml0eSBnCiAKICAg
ICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uKCktPmlzUmFuZ2UoKSkgewogICAgICAgICBpZiAoaXNU
eXBpbmdBY3Rpb24pIHsKLSAgICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNz
ZWQobV9mcmFtZS0+ZG9jdW1lbnQoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSwgZ3JhbnVsYXJp
dHkpOworICAgICAgICAgICAgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChtX2ZyYW1l
LT5kb2N1bWVudCgpLCBjYW5TbWFydENvcHlPckRlbGV0ZSgpID8gVHlwaW5nQ29tbWFuZDo6U21h
cnREZWxldGUgOiAwLCBncmFudWxhcml0eSk7CiAgICAgICAgICAgICByZXZlYWxTZWxlY3Rpb25B
ZnRlckVkaXRpbmdPcGVyYXRpb24oKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlm
IChraWxsUmluZykKQEAgLTM0OCwxNCArMzQ4LDE5IEBAIGJvb2wgRWRpdG9yOjpkZWxldGVXaXRo
RGlyZWN0aW9uKFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIFRleHRHcmFudWxhcml0eSBn
CiAgICAgICAgICAgICAvLyBJbXBsaWNpdGx5IGNhbGxzIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRp
dGluZ09wZXJhdGlvbigpLgogICAgICAgICB9CiAgICAgfSBlbHNlIHsKKyAgICAgICAgVHlwaW5n
Q29tbWFuZDo6T3B0aW9ucyBvcHRpb25zID0gMDsKKyAgICAgICAgaWYgKGNhblNtYXJ0Q29weU9y
RGVsZXRlKCkpCisgICAgICAgICAgICBvcHRpb25zIHw9IFR5cGluZ0NvbW1hbmQ6OlNtYXJ0RGVs
ZXRlOworICAgICAgICBpZiAoa2lsbFJpbmcpCisgICAgICAgICAgICBvcHRpb25zIHw9IFR5cGlu
Z0NvbW1hbmQ6OktpbGxSaW5nOwogICAgICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewogICAgICAg
ICBjYXNlIERpcmVjdGlvbkZvcndhcmQ6CiAgICAgICAgIGNhc2UgRGlyZWN0aW9uUmlnaHQ6Ci0g
ICAgICAgICAgICBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChtX2ZyYW1l
LT5kb2N1bWVudCgpLCBjYW5TbWFydENvcHlPckRlbGV0ZSgpLCBncmFudWxhcml0eSwga2lsbFJp
bmcpOworICAgICAgICAgICAgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQo
bV9mcmFtZS0+ZG9jdW1lbnQoKSwgb3B0aW9ucywgZ3JhbnVsYXJpdHkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgRGlyZWN0aW9uQmFja3dhcmQ6CiAgICAgICAgIGNhc2UgRGly
ZWN0aW9uTGVmdDoKLSAgICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQo
bV9mcmFtZS0+ZG9jdW1lbnQoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSwgZ3JhbnVsYXJpdHks
IGtpbGxSaW5nKTsKKyAgICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQo
bV9mcmFtZS0+ZG9jdW1lbnQoKSwgb3B0aW9ucywgZ3JhbnVsYXJpdHkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3Bl
cmF0aW9uKCk7CkBAIC0xMjAyLDcgKzEyMDcsNyBAQCBib29sIEVkaXRvcjo6aW5zZXJ0VGV4dFdp
dGhvdXRTZW5kaW5nVGV4dEV2ZW50KGNvbnN0IFN0cmluZyYgdGV4dCwgYm9vbCBzZWxlY3RJbgog
ICAgICAgICAgICAgUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudCA9IHNlbGVjdGlvblN0YXJ0LT5k
b2N1bWVudCgpOwogCiAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHRleHQKLSAgICAgICAgICAg
IFR5cGluZ0NvbW1hbmQ6OlR5cGluZ0NvbW1hbmRPcHRpb25zIG9wdGlvbnMgPSAwOworICAgICAg
ICAgICAgVHlwaW5nQ29tbWFuZDo6T3B0aW9ucyBvcHRpb25zID0gMDsKICAgICAgICAgICAgIGlm
IChzZWxlY3RJbnNlcnRlZFRleHQpCiAgICAgICAgICAgICAgICAgb3B0aW9ucyB8PSBUeXBpbmdD
b21tYW5kOjpTZWxlY3RJbnNlcnRlZFRleHQ7CiAgICAgICAgICAgICBpZiAoYXV0b2NvcnJlY3Rp
b25XYXNBcHBsaWVkKQpAQCAtMTYyOSw3ICsxNjM0LDcgQEAgdm9pZCBFZGl0b3I6OmNvbmZpcm1D
b21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIGJvb2wgcHJlc2VydmVTZWxlY3Rpb24pCiAg
ICAgLy8gSWYgdGV4dCBpcyBlbXB0eSwgdGhlbiBkZWxldGUgdGhlIG9sZCBjb21wb3NpdGlvbiBo
ZXJlLiAgSWYgdGV4dCBpcyBub24tZW1wdHksIEluc2VydFRleHRDb21tYW5kOjppbnB1dAogICAg
IC8vIHdpbGwgZGVsZXRlIHRoZSBvbGQgY29tcG9zaXRpb24gd2l0aCBhbiBvcHRpbWl6ZWQgcmVw
bGFjZSBvcGVyYXRpb24uCiAgICAgaWYgKHRleHQuaXNFbXB0eSgpKQotICAgICAgICBUeXBpbmdD
b21tYW5kOjpkZWxldGVTZWxlY3Rpb24obV9mcmFtZS0+ZG9jdW1lbnQoKSwgZmFsc2UpOworICAg
ICAgICBUeXBpbmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24obV9mcmFtZS0+ZG9jdW1lbnQoKSwg
MCk7CiAKICAgICBtX2NvbXBvc2l0aW9uTm9kZSA9IDA7CiAgICAgbV9jdXN0b21Db21wb3NpdGlv
blVuZGVybGluZXMuY2xlYXIoKTsKQEAgLTE2OTcsMTMgKzE3MDIsMTMgQEAgdm9pZCBFZGl0b3I6
OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgVmVjdG9yPENvbXBvc2l0
aW9uVW5kZXJsaW4KICAgICAvLyBJZiB0ZXh0IGlzIGVtcHR5LCB0aGVuIGRlbGV0ZSB0aGUgb2xk
IGNvbXBvc2l0aW9uIGhlcmUuICBJZiB0ZXh0IGlzIG5vbi1lbXB0eSwgSW5zZXJ0VGV4dENvbW1h
bmQ6OmlucHV0CiAgICAgLy8gd2lsbCBkZWxldGUgdGhlIG9sZCBjb21wb3NpdGlvbiB3aXRoIGFu
IG9wdGltaXplZCByZXBsYWNlIG9wZXJhdGlvbi4KICAgICBpZiAodGV4dC5pc0VtcHR5KCkpCi0g
ICAgICAgIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZVNlbGVjdGlvbihtX2ZyYW1lLT5kb2N1bWVudCgp
LCBmYWxzZSk7CisgICAgICAgIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZVNlbGVjdGlvbihtX2ZyYW1l
LT5kb2N1bWVudCgpLCBUeXBpbmdDb21tYW5kOjpQcmV2ZW50U3BlbGxDaGVja2luZyk7CiAKICAg
ICBtX2NvbXBvc2l0aW9uTm9kZSA9IDA7CiAgICAgbV9jdXN0b21Db21wb3NpdGlvblVuZGVybGlu
ZXMuY2xlYXIoKTsKIAogICAgIGlmICghdGV4dC5pc0VtcHR5KCkpIHsKLSAgICAgICAgVHlwaW5n
Q29tbWFuZDo6aW5zZXJ0VGV4dChtX2ZyYW1lLT5kb2N1bWVudCgpLCB0ZXh0LCB0cnVlLCBUeXBp
bmdDb21tYW5kOjpUZXh0Q29tcG9zaXRpb25VcGRhdGUpOworICAgICAgICBUeXBpbmdDb21tYW5k
OjppbnNlcnRUZXh0KG1fZnJhbWUtPmRvY3VtZW50KCksIHRleHQsIFR5cGluZ0NvbW1hbmQ6OlNl
bGVjdEluc2VydGVkVGV4dCB8IFR5cGluZ0NvbW1hbmQ6OlByZXZlbnRTcGVsbENoZWNraW5nLCBU
eXBpbmdDb21tYW5kOjpUZXh0Q29tcG9zaXRpb25VcGRhdGUpOwogCiAgICAgICAgIC8vIEZpbmQg
b3V0IHdoYXQgbm9kZSBoYXMgdGhlIGNvbXBvc2l0aW9uIG5vdy4KICAgICAgICAgUG9zaXRpb24g
YmFzZSA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5iYXNlKCkuZG93bnN0cmVhbSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKaW5kZXggNzVhMjBkN2EwMjVlOTBhZGQ0
YThmMDFmNjNlODhjMzk2YjA1NGYyNS4uMjkwZWU0N2MyMDUyYTk5ZjViNzI1OTczNjA2N2FmMmVk
YjM3YjNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5k
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCkBAIC0z
MTgsNyArMzE4LDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZURlbGV0ZShGcmFtZSogZnJhbWUsIEV2
ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSBzb3VyY2UsIGNvbnMKICAgICBjYXNlIENvbW1hbmRG
cm9tRE9NV2l0aFVzZXJJbnRlcmZhY2U6CiAgICAgICAgIC8vIElmIHRoZSBjdXJyZW50IHNlbGVj
dGlvbiBpcyBhIGNhcmV0LCBkZWxldGUgdGhlIHByZWNlZGluZyBjaGFyYWN0ZXIuIElFIHBlcmZv
cm1zIGZvcndhcmREZWxldGUsIGJ1dCB3ZSBjdXJyZW50bHkgc2lkZSB3aXRoIEZpcmVmb3guCiAg
ICAgICAgIC8vIERvZXNuJ3Qgc2Nyb2xsIHRvIG1ha2UgdGhlIHNlbGVjdGlvbiB2aXNpYmxlLCBv
ciBtb2RpZnkgdGhlIGtpbGwgcmluZyAodGhpcyB0aW1lLCBzaWRpbmcgd2l0aCBJRSwgbm90IEZp
cmVmb3gpLgotICAgICAgICBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKGZyYW1lLT5k
b2N1bWVudCgpLCBmcmFtZS0+c2VsZWN0aW9uKCktPmdyYW51bGFyaXR5KCkgPT0gV29yZEdyYW51
bGFyaXR5KTsKKyAgICAgICAgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChmcmFtZS0+
ZG9jdW1lbnQoKSwgZnJhbWUtPnNlbGVjdGlvbigpLT5ncmFudWxhcml0eSgpID09IFdvcmRHcmFu
dWxhcml0eSA/IFR5cGluZ0NvbW1hbmQ6OlNtYXJ0RGVsZXRlIDogMCk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCmluZGV4IGRmMTUwZWUwMDM5NTA4ZDYzNDI3YWNiNGVj
YmNkNTBmZTZmNDI2MDguLjFmZjI1MjQ3ODQ4YTg2ZTZhYjhlNDI1MzU2NmZjODBkZmU1NTlkMDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcApAQCAtNTksMjMgKzU5
LDI0IEBAIHN0YXRpYyBib29sIGNhbkFwcGVuZE5ld0xpbmVGZWVkKGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbikKICAgICByZXR1cm4gZXZlbnQtPnRleHQoKS5sZW5ndGgoKTsKIH0K
IAotVHlwaW5nQ29tbWFuZDo6VHlwaW5nQ29tbWFuZChEb2N1bWVudCAqZG9jdW1lbnQsIEVUeXBp
bmdDb21tYW5kIGNvbW1hbmRUeXBlLCBjb25zdCBTdHJpbmcgJnRleHRUb0luc2VydCwgVHlwaW5n
Q29tbWFuZE9wdGlvbnMgb3B0aW9ucywgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBUZXh0
Q29tcG9zaXRpb25UeXBlIGNvbXBvc2l0aW9uVHlwZSkKK1R5cGluZ0NvbW1hbmQ6OlR5cGluZ0Nv
bW1hbmQoRG9jdW1lbnQgKmRvY3VtZW50LCBFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSwgY29u
c3QgU3RyaW5nICZ0ZXh0VG9JbnNlcnQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5LCBUZXh0Q29tcG9zaXRpb25UeXBlIGNvbXBvc2l0aW9uVHlwZSkKICAgICA6
IENvbXBvc2l0ZUVkaXRDb21tYW5kKGRvY3VtZW50KQogICAgICwgbV9jb21tYW5kVHlwZShjb21t
YW5kVHlwZSkKICAgICAsIG1fdGV4dFRvSW5zZXJ0KHRleHRUb0luc2VydCkKICAgICAsIG1fb3Bl
bkZvck1vcmVUeXBpbmcodHJ1ZSkKICAgICAsIG1fc2VsZWN0SW5zZXJ0ZWRUZXh0KG9wdGlvbnMg
JiBTZWxlY3RJbnNlcnRlZFRleHQpCi0gICAgLCBtX3NtYXJ0RGVsZXRlKGZhbHNlKQorICAgICwg
bV9zbWFydERlbGV0ZShvcHRpb25zICYgU21hcnREZWxldGUpCiAgICAgLCBtX2dyYW51bGFyaXR5
KGdyYW51bGFyaXR5KQogICAgICwgbV9jb21wb3NpdGlvblR5cGUoY29tcG9zaXRpb25UeXBlKQog
ICAgICwgbV9raWxsUmluZyhvcHRpb25zICYgS2lsbFJpbmcpCiAgICAgLCBtX29wZW5lZEJ5QmFj
a3dhcmREZWxldGUoZmFsc2UpCiAgICAgLCBtX3Nob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5k
aWNhdG9yKG9wdGlvbnMgJiBSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcikKKyAgICAsIG1f
c2hvdWxkUHJldmVudFNwZWxsQ2hlY2tpbmcob3B0aW9ucyAmIFByZXZlbnRTcGVsbENoZWNraW5n
KQogewogICAgIHVwZGF0ZVByZXNlcnZlc1R5cGluZ1N0eWxlKG1fY29tbWFuZFR5cGUpOwogfQog
Ci12b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZVNlbGVjdGlvbihEb2N1bWVudCogZG9jdW1lbnQs
IGJvb2wgc21hcnREZWxldGUpCit2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZVNlbGVjdGlvbihE
b2N1bWVudCogZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucykKIHsKICAgICBBU1NFUlQoZG9jdW1l
bnQpOwogICAgIApAQCAtODcsMTYgKzg4LDE2IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRl
U2VsZWN0aW9uKERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBzbWFydERlbGV0ZSkKICAgICAKICAg
ICBFZGl0Q29tbWFuZCogbGFzdEVkaXRDb21tYW5kID0gZnJhbWUtPmVkaXRvcigpLT5sYXN0RWRp
dENvbW1hbmQoKTsKICAgICBpZiAoaXNPcGVuRm9yTW9yZVR5cGluZ0NvbW1hbmQobGFzdEVkaXRD
b21tYW5kKSkgewotICAgICAgICBzdGF0aWNfY2FzdDxUeXBpbmdDb21tYW5kKj4obGFzdEVkaXRD
b21tYW5kKS0+ZGVsZXRlU2VsZWN0aW9uKHNtYXJ0RGVsZXRlKTsKKyAgICAgICAgVHlwaW5nQ29t
bWFuZCogbGFzdFR5cGluZ0NvbW1hbmQgPSBzdGF0aWNfY2FzdDxUeXBpbmdDb21tYW5kKj4obGFz
dEVkaXRDb21tYW5kKTsKKyAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFNob3VsZFByZXZl
bnRTcGVsbENoZWNraW5nKG9wdGlvbnMgJiBQcmV2ZW50U3BlbGxDaGVja2luZyk7CisgICAgICAg
IGxhc3RUeXBpbmdDb21tYW5kLT5kZWxldGVTZWxlY3Rpb24ob3B0aW9ucyAmIFNtYXJ0RGVsZXRl
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxUeXBpbmdDb21tYW5kPiB0
eXBpbmdDb21tYW5kID0gVHlwaW5nQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBEZWxldGVTZWxl
Y3Rpb24sICIiLCAwKTsKLSAgICB0eXBpbmdDb21tYW5kLT5zZXRTbWFydERlbGV0ZShzbWFydERl
bGV0ZSk7Ci0gICAgdHlwaW5nQ29tbWFuZC0+YXBwbHkoKTsKKyAgICBUeXBpbmdDb21tYW5kOjpj
cmVhdGUoZG9jdW1lbnQsIERlbGV0ZVNlbGVjdGlvbiwgIiIsIG9wdGlvbnMpLT5hcHBseSgpOwog
fQogCi12b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoRG9jdW1lbnQgKmRvY3Vt
ZW50LCBib29sIHNtYXJ0RGVsZXRlLCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wg
a2lsbFJpbmcpCit2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoRG9jdW1lbnQg
KmRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMsIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSkK
IHsKICAgICBBU1NFUlQoZG9jdW1lbnQpOwogICAgIApAQCAtMTA1LDE4ICsxMDYsMTcgQEAgdm9p
ZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKERvY3VtZW50ICpkb2N1bWVudCwgYm9v
bCBzbWFydERlbGV0ZSwgVGV4dEcKICAgICAKICAgICBFZGl0Q29tbWFuZCogbGFzdEVkaXRDb21t
YW5kID0gZnJhbWUtPmVkaXRvcigpLT5sYXN0RWRpdENvbW1hbmQoKTsKICAgICBpZiAoZ3JhbnVs
YXJpdHkgPT0gQ2hhcmFjdGVyR3JhbnVsYXJpdHkgJiYgaXNPcGVuRm9yTW9yZVR5cGluZ0NvbW1h
bmQobGFzdEVkaXRDb21tYW5kKSkgewotICAgICAgICB1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVu
dEZyb21DdXJyZW50U2VsZWN0aW9uKHN0YXRpY19jYXN0PFR5cGluZ0NvbW1hbmQqPihsYXN0RWRp
dENvbW1hbmQpLCBmcmFtZSk7Ci0gICAgICAgIHN0YXRpY19jYXN0PFR5cGluZ0NvbW1hbmQqPihs
YXN0RWRpdENvbW1hbmQpLT5kZWxldGVLZXlQcmVzc2VkKGdyYW51bGFyaXR5LCBraWxsUmluZyk7
CisgICAgICAgIFR5cGluZ0NvbW1hbmQqIGxhc3RUeXBpbmdDb21tYW5kID0gc3RhdGljX2Nhc3Q8
VHlwaW5nQ29tbWFuZCo+KGxhc3RFZGl0Q29tbWFuZCk7CisgICAgICAgIHVwZGF0ZVNlbGVjdGlv
bklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24obGFzdFR5cGluZ0NvbW1hbmQsIGZyYW1l
KTsKKyAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFNob3VsZFByZXZlbnRTcGVsbENoZWNr
aW5nKG9wdGlvbnMgJiBQcmV2ZW50U3BlbGxDaGVja2luZyk7CisgICAgICAgIGxhc3RUeXBpbmdD
b21tYW5kLT5kZWxldGVLZXlQcmVzc2VkKGdyYW51bGFyaXR5LCBvcHRpb25zICYgS2lsbFJpbmcp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVHlwaW5nQ29tbWFuZE9wdGlvbnMgb3B0
aW9ucyA9IGtpbGxSaW5nID8gS2lsbFJpbmcgOiAwOwotICAgIFJlZlB0cjxUeXBpbmdDb21tYW5k
PiB0eXBpbmdDb21tYW5kID0gVHlwaW5nQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBEZWxldGVL
ZXksICIiLCBvcHRpb25zLCBncmFudWxhcml0eSk7Ci0gICAgdHlwaW5nQ29tbWFuZC0+c2V0U21h
cnREZWxldGUoc21hcnREZWxldGUpOwotICAgIHR5cGluZ0NvbW1hbmQtPmFwcGx5KCk7CisgICAg
VHlwaW5nQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBEZWxldGVLZXksICIiLCBvcHRpb25zLCBn
cmFudWxhcml0eSktPmFwcGx5KCk7CiB9CiAKLXZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERl
bGV0ZUtleVByZXNzZWQoRG9jdW1lbnQgKmRvY3VtZW50LCBib29sIHNtYXJ0RGVsZXRlLCBUZXh0
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wga2lsbFJpbmcpCit2b2lkIFR5cGluZ0NvbW1h
bmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKERvY3VtZW50ICpkb2N1bWVudCwgT3B0aW9ucyBv
cHRpb25zLCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiB7CiAgICAgLy8gRklYTUU6IEZv
cndhcmQgZGVsZXRlIGluIFRleHRFZGl0IGFwcGVhcnMgdG8gb3BlbiBhbmQgY2xvc2UgYSBuZXcg
dHlwaW5nIGNvbW1hbmQuCiAgICAgQVNTRVJUKGRvY3VtZW50KTsKQEAgLTEyNiwxNSArMTI2LDE0
IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoRG9jdW1lbnQg
KmRvY3VtZW50LCBib29sIHNtYXJ0RGVsZXRlCiAgICAgCiAgICAgRWRpdENvbW1hbmQqIGxhc3RF
ZGl0Q29tbWFuZCA9IGZyYW1lLT5lZGl0b3IoKS0+bGFzdEVkaXRDb21tYW5kKCk7CiAgICAgaWYg
KGdyYW51bGFyaXR5ID09IENoYXJhY3RlckdyYW51bGFyaXR5ICYmIGlzT3BlbkZvck1vcmVUeXBp
bmdDb21tYW5kKGxhc3RFZGl0Q29tbWFuZCkpIHsKLSAgICAgICAgdXBkYXRlU2VsZWN0aW9uSWZE
aWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbihzdGF0aWNfY2FzdDxUeXBpbmdDb21tYW5kKj4o
bGFzdEVkaXRDb21tYW5kKSwgZnJhbWUpOwotICAgICAgICBzdGF0aWNfY2FzdDxUeXBpbmdDb21t
YW5kKj4obGFzdEVkaXRDb21tYW5kKS0+Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoZ3JhbnVsYXJp
dHksIGtpbGxSaW5nKTsKKyAgICAgICAgVHlwaW5nQ29tbWFuZCogbGFzdFR5cGluZ0NvbW1hbmQg
PSBzdGF0aWNfY2FzdDxUeXBpbmdDb21tYW5kKj4obGFzdEVkaXRDb21tYW5kKTsKKyAgICAgICAg
dXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbihsYXN0VHlwaW5n
Q29tbWFuZCwgZnJhbWUpOworICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0U2hvdWxkUHJl
dmVudFNwZWxsQ2hlY2tpbmcob3B0aW9ucyAmIFByZXZlbnRTcGVsbENoZWNraW5nKTsKKyAgICAg
ICAgbGFzdFR5cGluZ0NvbW1hbmQtPmZvcndhcmREZWxldGVLZXlQcmVzc2VkKGdyYW51bGFyaXR5
LCBvcHRpb25zICYgS2lsbFJpbmcpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVHlw
aW5nQ29tbWFuZE9wdGlvbnMgb3B0aW9ucyA9IGtpbGxSaW5nID8gS2lsbFJpbmcgOiAwOwotICAg
IFJlZlB0cjxUeXBpbmdDb21tYW5kPiB0eXBpbmdDb21tYW5kID0gVHlwaW5nQ29tbWFuZDo6Y3Jl
YXRlKGRvY3VtZW50LCBGb3J3YXJkRGVsZXRlS2V5LCAiIiwgb3B0aW9ucywgZ3JhbnVsYXJpdHkp
OwotICAgIHR5cGluZ0NvbW1hbmQtPnNldFNtYXJ0RGVsZXRlKHNtYXJ0RGVsZXRlKTsKLSAgICB0
eXBpbmdDb21tYW5kLT5hcHBseSgpOworICAgIFR5cGluZ0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVu
dCwgRm9yd2FyZERlbGV0ZUtleSwgIiIsIG9wdGlvbnMsIGdyYW51bGFyaXR5KS0+YXBwbHkoKTsK
IH0KIAogdm9pZCBUeXBpbmdDb21tYW5kOjp1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21D
dXJyZW50U2VsZWN0aW9uKFR5cGluZ0NvbW1hbmQqIHR5cGluZ0NvbW1hbmQsIEZyYW1lKiBmcmFt
ZSkKQEAgLTE0OCw3ICsxNDcsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OnVwZGF0ZVNlbGVjdGlv
bklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oVHlwaW5nQ29tbWFuZAogICAgIHR5cGlu
Z0NvbW1hbmQtPnNldEVuZGluZ1NlbGVjdGlvbihjdXJyZW50U2VsZWN0aW9uKTsKIH0KIAotdm9p
ZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3Ry
aW5nJiB0ZXh0LCBUeXBpbmdDb21tYW5kT3B0aW9ucyBvcHRpb25zLCBUZXh0Q29tcG9zaXRpb25U
eXBlIGNvbXBvc2l0aW9uKQordm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBPcHRpb25zIG9wdGlvbnMsIFRleHRDb21w
b3NpdGlvblR5cGUgY29tcG9zaXRpb24pCiB7CiAgICAgQVNTRVJUKGRvY3VtZW50KTsKIApAQCAt
MTY0LDcgKzE2Myw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChEb2N1bWVudCog
ZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgVHlwaW5nQ29tCiB9CiAKIC8vIEZJWE1FOiBX
ZSBzaG91bGRuJ3QgbmVlZCB0byB0YWtlIHNlbGVjdGlvbkZvckluc2VydGlvbi4gSXQgc2hvdWxk
IGJlIGlkZW50aWNhbCB0byBTZWxlY3Rpb25Db250cm9sbGVyJ3MgY3VycmVudCBzZWxlY3Rpb24u
Ci12b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25z
dCBTdHJpbmcmIHRleHQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbkZvckluc2Vy
dGlvbiwgVHlwaW5nQ29tbWFuZE9wdGlvbnMgb3B0aW9ucywgVGV4dENvbXBvc2l0aW9uVHlwZSBj
b21wb3NpdGlvblR5cGUpCit2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbkZvckluc2VydGlvbiwgT3B0aW9ucyBvcHRpb25zLCBUZXh0Q29tcG9zaXRpb25UeXBl
IGNvbXBvc2l0aW9uVHlwZSkKIHsKICAgICBBU1NFUlQoZG9jdW1lbnQpOwogCkBAIC0yMDAsNiAr
MTk5LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWaXMKIAogICAgICAgICBsYXN0VHlwaW5nQ29t
bWFuZC0+c2V0Q29tcG9zaXRpb25UeXBlKGNvbXBvc2l0aW9uVHlwZSk7CiAgICAgICAgIGxhc3RU
eXBpbmdDb21tYW5kLT5zZXRTaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcihvcHRp
b25zICYgUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IpOworICAgICAgICBsYXN0VHlwaW5n
Q29tbWFuZC0+c2V0U2hvdWxkUHJldmVudFNwZWxsQ2hlY2tpbmcob3B0aW9ucyAmIFByZXZlbnRT
cGVsbENoZWNraW5nKTsKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPmluc2VydFRleHQobmV3
VGV4dCwgb3B0aW9ucyAmIFNlbGVjdEluc2VydGVkVGV4dCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC0yMTYsNyArMjE2LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KERv
Y3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWaXMKICAgICB9CiB9
CiAKLXZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKERvY3VtZW50ICpkb2N1bWVu
dCwgVHlwaW5nQ29tbWFuZE9wdGlvbnMgb3B0aW9ucykKK3ZvaWQgVHlwaW5nQ29tbWFuZDo6aW5z
ZXJ0TGluZUJyZWFrKERvY3VtZW50ICpkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zKQogewogICAg
IEFTU0VSVChkb2N1bWVudCk7CiAKQEAgLTI1MCw3ICsyNTAsNyBAQCB2b2lkIFR5cGluZ0NvbW1h
bmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudChEb2N1bWVudCAqZG9j
dW1lbnQpCiAgICAgYXBwbHlDb21tYW5kKFR5cGluZ0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCwg
SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KSk7CiB9CiAKLXZvaWQgVHlw
aW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKERvY3VtZW50ICpkb2N1bWVudCwg
VHlwaW5nQ29tbWFuZE9wdGlvbnMgb3B0aW9ucykKK3ZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9yKERvY3VtZW50ICpkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zKQog
ewogICAgIEFTU0VSVChkb2N1bWVudCk7CiAKQEAgLTM2MCw3ICszNjAsOCBAQCB2b2lkIFR5cGlu
Z0NvbW1hbmQ6OnR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChFVHlwaW5nQ29tbWFuZCBjb21tYW5k
VHlwZUZvckFkZGVkVAogI2lmIFBMQVRGT1JNKE1BQykgJiYgIWRlZmluZWQoQlVJTERJTkdfT05f
VElHRVIpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX0xFT1BBUkQpCiAgICAgZG9jdW1lbnQoKS0+
ZnJhbWUoKS0+ZWRpdG9yKCktPmFwcGxpZWRFZGl0aW5nKHRoaXMpOwogICAgIC8vIFNpbmNlIHRo
ZSBzcGVsbGNoZWNraW5nIGNvZGUgbWF5IGFsc28gcGVyZm9ybSBjb3JyZWN0aW9ucyBhbmQgb3Ro
ZXIgcmVwbGFjZW1lbnRzLCBpdCBzaG91bGQgaGFwcGVuIGFmdGVyIHRoZSB0eXBpbmcgY2hhbmdl
cy4KLSAgICBtYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoY29tbWFuZFR5cGVGb3JBZGRlZFR5
cGluZyk7CisgICAgaWYgKCFtX3Nob3VsZFByZXZlbnRTcGVsbENoZWNraW5nKQorICAgICAgICBt
YXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoY29tbWFuZFR5cGVGb3JBZGRlZFR5cGluZyk7CiAj
ZWxzZQogICAgIC8vIFRoZSBvbGQgc3BlbGxjaGVja2luZyBjb2RlIHJlcXVpcmVzIHRoYXQgY2hl
Y2tpbmcgYmUgZG9uZSBmaXJzdCwgdG8gcHJldmVudCBpc3N1ZXMgbGlrZSB0aGF0IGluIDY4NjQw
NzIsIHdoZXJlIDxkb2Vzbid0PiBpcyBtYXJrZWQgYXMgbWlzc3BlbGxlZC4KICAgICBtYXJrTWlz
c3BlbGxpbmdzQWZ0ZXJUeXBpbmcoY29tbWFuZFR5cGVGb3JBZGRlZFR5cGluZyk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuaCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5oCmluZGV4IGJlYjRkMDI0YWZlOGUxNDNhZWRjYzdk
MGYxY2Y0NDcyODMzNzU3MzQuLmExMDYzNGZhMzgyOTNmNDgxNmZjZjM3Mjc4NDZkYWZlYjU1NGE5
MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5oCkBAIC00OCwyMCArNDgs
MjIgQEAgcHVibGljOgogICAgICAgICBUZXh0Q29tcG9zaXRpb25Db25maXJtCiAgICAgfTsKIAot
ICAgIGVudW0gVHlwaW5nQ29tbWFuZE9wdGlvbiB7CisgICAgZW51bSBPcHRpb24gewogICAgICAg
ICBTZWxlY3RJbnNlcnRlZFRleHQgPSAxIDw8IDAsCiAgICAgICAgIEtpbGxSaW5nID0gMSA8PCAx
LAotICAgICAgICBSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvciA9IDEgPDwgMgorICAgICAg
ICBSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvciA9IDEgPDwgMiwKKyAgICAgICAgUHJldmVu
dFNwZWxsQ2hlY2tpbmcgPSAxIDw8IDMsCisgICAgICAgIFNtYXJ0RGVsZXRlID0gMSA8PCA0CiAg
ICAgfTsKLSAgICB0eXBlZGVmIHVuc2lnbmVkIFR5cGluZ0NvbW1hbmRPcHRpb25zOwotCi0gICAg
c3RhdGljIHZvaWQgZGVsZXRlU2VsZWN0aW9uKERvY3VtZW50KiwgYm9vbCBzbWFydERlbGV0ZSA9
IGZhbHNlKTsKLSAgICBzdGF0aWMgdm9pZCBkZWxldGVLZXlQcmVzc2VkKERvY3VtZW50KiwgYm9v
bCBzbWFydERlbGV0ZSA9IGZhbHNlLCBUZXh0R3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxh
cml0eSwgYm9vbCBraWxsUmluZyA9IGZhbHNlKTsKLSAgICBzdGF0aWMgdm9pZCBmb3J3YXJkRGVs
ZXRlS2V5UHJlc3NlZChEb2N1bWVudCosIGJvb2wgc21hcnREZWxldGUgPSBmYWxzZSwgVGV4dEdy
YW51bGFyaXR5ID0gQ2hhcmFjdGVyR3JhbnVsYXJpdHksIGJvb2wga2lsbFJpbmcgPSBmYWxzZSk7
Ci0gICAgc3RhdGljIHZvaWQgaW5zZXJ0VGV4dChEb2N1bWVudCosIGNvbnN0IFN0cmluZyYsIFR5
cGluZ0NvbW1hbmRPcHRpb25zLCBUZXh0Q29tcG9zaXRpb25UeXBlID0gVGV4dENvbXBvc2l0aW9u
Tm9uZSk7Ci0gICAgc3RhdGljIHZvaWQgaW5zZXJ0VGV4dChEb2N1bWVudCosIGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBUeXBpbmdDb21tYW5kT3B0aW9ucywgVGV4dENv
bXBvc2l0aW9uVHlwZSA9IFRleHRDb21wb3NpdGlvbk5vbmUpOwotICAgIHN0YXRpYyB2b2lkIGlu
c2VydExpbmVCcmVhayhEb2N1bWVudCosIFR5cGluZ0NvbW1hbmRPcHRpb25zKTsKLSAgICBzdGF0
aWMgdm9pZCBpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoRG9jdW1lbnQqLCBUeXBpbmdDb21tYW5k
T3B0aW9ucyk7CisgICAgdHlwZWRlZiB1bnNpZ25lZCBPcHRpb25zOworCisgICAgc3RhdGljIHZv
aWQgZGVsZXRlU2VsZWN0aW9uKERvY3VtZW50KiwgT3B0aW9ucyA9IDApOworICAgIHN0YXRpYyB2
b2lkIGRlbGV0ZUtleVByZXNzZWQoRG9jdW1lbnQqLCBPcHRpb25zID0gMCwgVGV4dEdyYW51bGFy
aXR5ID0gQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOworICAgIHN0YXRpYyB2b2lkIGZvcndhcmREZWxl
dGVLZXlQcmVzc2VkKERvY3VtZW50KiwgT3B0aW9ucyA9IDAsIFRleHRHcmFudWxhcml0eSA9IENo
YXJhY3RlckdyYW51bGFyaXR5KTsKKyAgICBzdGF0aWMgdm9pZCBpbnNlcnRUZXh0KERvY3VtZW50
KiwgY29uc3QgU3RyaW5nJiwgT3B0aW9ucywgVGV4dENvbXBvc2l0aW9uVHlwZSA9IFRleHRDb21w
b3NpdGlvbk5vbmUpOworICAgIHN0YXRpYyB2b2lkIGluc2VydFRleHQoRG9jdW1lbnQqLCBjb25z
dCBTdHJpbmcmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgT3B0aW9ucywgVGV4dENvbXBvc2l0
aW9uVHlwZSA9IFRleHRDb21wb3NpdGlvbk5vbmUpOworICAgIHN0YXRpYyB2b2lkIGluc2VydExp
bmVCcmVhayhEb2N1bWVudCosIE9wdGlvbnMpOworICAgIHN0YXRpYyB2b2lkIGluc2VydFBhcmFn
cmFwaFNlcGFyYXRvcihEb2N1bWVudCosIE9wdGlvbnMpOwogICAgIHN0YXRpYyB2b2lkIGluc2Vy
dFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudChEb2N1bWVudCopOwogICAgIHN0YXRp
YyBib29sIGlzT3BlbkZvck1vcmVUeXBpbmdDb21tYW5kKGNvbnN0IEVkaXRDb21tYW5kKik7CiAg
ICAgc3RhdGljIHZvaWQgY2xvc2VUeXBpbmcoRWRpdENvbW1hbmQqKTsKQEAgLTgwLDE3ICs4Miwx
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDb21wb3NpdGlvblR5cGUoVGV4dENvbXBvc2l0aW9u
VHlwZSB0eXBlKSB7IG1fY29tcG9zaXRpb25UeXBlID0gdHlwZTsgfQogCiBwcml2YXRlOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGNyZWF0ZShEb2N1bWVudCogZG9jdW1l
bnQsIEVUeXBpbmdDb21tYW5kIGNvbW1hbmQsIGNvbnN0IFN0cmluZyYgdGV4dCA9ICIiLCBUeXBp
bmdDb21tYW5kT3B0aW9ucyBvcHRpb25zID0gMCwgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5
ID0gQ2hhcmFjdGVyR3JhbnVsYXJpdHkpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VHlwaW5nQ29t
bWFuZD4gY3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgRVR5cGluZ0NvbW1hbmQgY29tbWFuZCwg
Y29uc3QgU3RyaW5nJiB0ZXh0ID0gIiIsIE9wdGlvbnMgb3B0aW9ucyA9IDAsIFRleHRHcmFudWxh
cml0eSBncmFudWxhcml0eSA9IENoYXJhY3RlckdyYW51bGFyaXR5KQogICAgIHsKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBUeXBpbmdDb21tYW5kKGRvY3VtZW50LCBjb21tYW5kLCB0ZXh0
LCBvcHRpb25zLCBncmFudWxhcml0eSwgVGV4dENvbXBvc2l0aW9uTm9uZSkpOwogICAgIH0KIAot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGNyZWF0ZShEb2N1bWVudCogZG9j
dW1lbnQsIEVUeXBpbmdDb21tYW5kIGNvbW1hbmQsIGNvbnN0IFN0cmluZyYgdGV4dCwgVHlwaW5n
Q29tbWFuZE9wdGlvbnMgb3B0aW9ucywgVGV4dENvbXBvc2l0aW9uVHlwZSBjb21wb3NpdGlvblR5
cGUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8VHlwaW5nQ29tbWFuZD4gY3JlYXRlKERvY3VtZW50
KiBkb2N1bWVudCwgRVR5cGluZ0NvbW1hbmQgY29tbWFuZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBP
cHRpb25zIG9wdGlvbnMsIFRleHRDb21wb3NpdGlvblR5cGUgY29tcG9zaXRpb25UeXBlKQogICAg
IHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUeXBpbmdDb21tYW5kKGRvY3VtZW50LCBj
b21tYW5kLCB0ZXh0LCBvcHRpb25zLCBDaGFyYWN0ZXJHcmFudWxhcml0eSwgY29tcG9zaXRpb25U
eXBlKSk7CiAgICAgfQogCi0gICAgVHlwaW5nQ29tbWFuZChEb2N1bWVudCosIEVUeXBpbmdDb21t
YW5kLCBjb25zdCBTdHJpbmcmIHRleHQsIFR5cGluZ0NvbW1hbmRPcHRpb25zLCBUZXh0R3JhbnVs
YXJpdHksIFRleHRDb21wb3NpdGlvblR5cGUpOworICAgIFR5cGluZ0NvbW1hbmQoRG9jdW1lbnQq
LCBFVHlwaW5nQ29tbWFuZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBPcHRpb25zLCBUZXh0R3JhbnVs
YXJpdHksIFRleHRDb21wb3NpdGlvblR5cGUpOwogCiAgICAgYm9vbCBzbWFydERlbGV0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc21hcnREZWxldGU7IH0KICAgICB2b2lkIHNldFNtYXJ0RGVsZXRlKGJv
b2wgc21hcnREZWxldGUpIHsgbV9zbWFydERlbGV0ZSA9IHNtYXJ0RGVsZXRlOyB9CkBAIC0xMDEs
NiArMTAzLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgcHJlc2VydmVzVHlwaW5nU3R5
bGUoKSBjb25zdCB7IHJldHVybiBtX3ByZXNlcnZlc1R5cGluZ1N0eWxlOyB9CiAgICAgdmlydHVh
bCBib29sIHNob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yKCkgY29uc3QgeyByZXR1
cm4gbV9zaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcjsgfQogICAgIHZpcnR1YWwg
dm9pZCBzZXRTaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcihib29sIHJldGFpbikg
eyBtX3Nob3VsZFJldGFpbkF1dG9jb3JyZWN0aW9uSW5kaWNhdG9yID0gcmV0YWluOyB9CisgICAg
dm9pZCBzZXRTaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZyhib29sIHByZXZlbnQpIHsgbV9zaG91
bGRQcmV2ZW50U3BlbGxDaGVja2luZyA9IHByZXZlbnQ7IH0KIAogICAgIHN0YXRpYyB2b2lkIHVw
ZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24oVHlwaW5nQ29tbWFu
ZCosIEZyYW1lKik7CiAKQEAgLTEyNSw2ICsxMjgsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9v
cGVuZWRCeUJhY2t3YXJkRGVsZXRlOwogCiAgICAgYm9vbCBtX3Nob3VsZFJldGFpbkF1dG9jb3Jy
ZWN0aW9uSW5kaWNhdG9yOworICAgIGJvb2wgbV9zaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZzsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88692</attachid>
            <date>2011-04-07 14:02:48 -0700</date>
            <delta_ts>2011-04-07 20:59:52 -0700</delta_ts>
            <desc>Path (v3)</desc>
            <filename>bug-58049-20110407140247.patch</filename>
            <type>text/plain</type>
            <size>20236</size>
            <attacher name="Jia Pu">jiapu.mail</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMwNjcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwNjIwOTljMzA2Y2NlNWQ4
YmIxNmE4MWRlNTgyZmExNTE5NTBiZDEyLi5iZDgyNTMyZDAyMzA5OTQ3MjViMjhlN2ExNDU4MGE1
MzBlYjFlYTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMDQtMDcgIEppYSBQ
dSAgPGpwdUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW01hY10gRWRpdG9yOjpzZXRDb21wb3NpdGlvbigpIHNob3VsZCBub3QgdHJp
Z2dlciBjb3JyZWN0aW9uIHBhbmVsIHRpbWVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTgwNDkKKyAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS85MjI2
MzA1PgorCisgICAgICAgIE9uIE1hYyBPUyBYIHRoYXQgc3VwcG9ydHMgYXV0b2NvcnJlY3Rpb24g
cGFuZWwsIHR5cGluZyB1bmNvbmZpcm1lZCBjb21wb3NpdGlvbiAoaS5lLiB1bmNvbmZpcm1lZCBK
YXBhbmVzZSBvciBDaGluZXNlIGlucHV0KQorICAgICAgICBzaG91bGQgbm90IHN0YXJ0IGF1dG9j
b3JyZWN0aW9uIHRpbWVyLiBXZSBhZGRlZCBhIG1lbWJlciB2YXJpYWJsZSwgbV9zaG91bGRQcmV2
ZW50U3BlbGxDaGVja2luZywgdG8gVHlwaW5nQ29tbWFuZC4gCisgICAgICAgIFdoZW4gdGhpcyB2
YWx1ZSBpcyB0cnVlLCBtYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoKSB3aWxsIG5vdCBiZSBj
YWxsZWQgaW4gVHlwaW5nQ29tbWFuZDo6dHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKCkuCisgICAg
ICAgIG1fc2hvdWxkUHJldmVudFNwZWxsQ2hlY2tpbmcgaXMgc2V0IHRvIHRydWUgaW4gdGhlIFR5
cGluZ0NvbW1hbmQgb2JqZWN0cyBjcmVhdGVkIGJ5IEVkaXRvcjo6c2V0Q29tcG9zaXRpb24oKS4K
KworICAgICAgICBObyBuZXcgdGVzdHMuIE5vIGRldGVybWluaXN0aWNhbGx5IHJlcHJvZHVjaWJs
ZSB0ZXN0IGNhc2UuIFBhdGNoIGlzIGJhc2VkIG9uIHN0YXRpYyBjb2RlIGFuYWx5c2lzLiBUZXN0
aW5nIHRoaXMgYWxzbyByZXF1aXJlcyBmaXJpbmcKKyAgICAgICAgYXV0b2NvcnJlY3Rpb24gcGFu
ZWwgdGltZXIsIHdoaWNoIGNhbiBub3QgYmUgZWFzaWx5IGRvbmUgaW4gYXV0b21hdGVkIGZhc2hp
b24uCisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OmRlbGV0ZVdpdGhEaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpp
bnNlcnRUZXh0V2l0aG91dFNlbmRpbmdUZXh0RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWRp
dG9yOjpjb25maXJtQ29tcG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRD
b21wb3NpdGlvbik6CisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmV4ZWN1dGVEZWxldGUpOgorICAgICAgICAqIGVkaXRpbmcvVHlwaW5nQ29t
bWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpUeXBpbmdDb21tYW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmRlbGV0ZVNlbGVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6VHlwaW5nQ29tbWFuZDo6aW5zZXJ0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6
OlR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcik6CisgICAgICAgIChXZWJD
b3JlOjpUeXBpbmdDb21tYW5kOjp0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQpOgorICAgICAgICAq
IGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZTo6VHlwaW5nQ29tbWFu
ZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OnNldFNob3VsZFBy
ZXZlbnRTcGVsbENoZWNraW5nKToKKwogMjAxMS0wNC0wNiAgQmVuamFtaW4gUG91bGFpbiAgPGJl
bmphbWluLnBvdWxhaW5Abm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDkwZWI4MjVjMDQ3NDljNWQzZWNl
YWQzMzJiMmMwMDVjN2I3YmZjMWIuLjhkNTEwMWMwYjJhYmM3MjU4ZTFhMzFhZTQzNWU1MjNmMzcz
YmE5MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTMzOSw3ICszMzksNyBAQCBi
b29sIEVkaXRvcjo6ZGVsZXRlV2l0aERpcmVjdGlvbihTZWxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0
aW9uLCBUZXh0R3JhbnVsYXJpdHkgZwogCiAgICAgaWYgKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5p
c1JhbmdlKCkpIHsKICAgICAgICAgaWYgKGlzVHlwaW5nQWN0aW9uKSB7Ci0gICAgICAgICAgICBU
eXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKG1fZnJhbWUtPmRvY3VtZW50KCksIGNhblNt
YXJ0Q29weU9yRGVsZXRlKCksIGdyYW51bGFyaXR5KTsKKyAgICAgICAgICAgIFR5cGluZ0NvbW1h
bmQ6OmRlbGV0ZUtleVByZXNzZWQobV9mcmFtZS0+ZG9jdW1lbnQoKSwgY2FuU21hcnRDb3B5T3JE
ZWxldGUoKSA/IFR5cGluZ0NvbW1hbmQ6OlNtYXJ0RGVsZXRlIDogMCwgZ3JhbnVsYXJpdHkpOwog
ICAgICAgICAgICAgcmV2ZWFsU2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoa2lsbFJpbmcpCkBAIC0zNDgsMTQgKzM0OCwx
OSBAQCBib29sIEVkaXRvcjo6ZGVsZXRlV2l0aERpcmVjdGlvbihTZWxlY3Rpb25EaXJlY3Rpb24g
ZGlyZWN0aW9uLCBUZXh0R3JhbnVsYXJpdHkgZwogICAgICAgICAgICAgLy8gSW1wbGljaXRseSBj
YWxscyByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRpbmdPcGVyYXRpb24oKS4KICAgICAgICAgfQog
ICAgIH0gZWxzZSB7CisgICAgICAgIFR5cGluZ0NvbW1hbmQ6Ok9wdGlvbnMgb3B0aW9ucyA9IDA7
CisgICAgICAgIGlmIChjYW5TbWFydENvcHlPckRlbGV0ZSgpKQorICAgICAgICAgICAgb3B0aW9u
cyB8PSBUeXBpbmdDb21tYW5kOjpTbWFydERlbGV0ZTsKKyAgICAgICAgaWYgKGtpbGxSaW5nKQor
ICAgICAgICAgICAgb3B0aW9ucyB8PSBUeXBpbmdDb21tYW5kOjpLaWxsUmluZzsKICAgICAgICAg
c3dpdGNoIChkaXJlY3Rpb24pIHsKICAgICAgICAgY2FzZSBEaXJlY3Rpb25Gb3J3YXJkOgogICAg
ICAgICBjYXNlIERpcmVjdGlvblJpZ2h0OgotICAgICAgICAgICAgVHlwaW5nQ29tbWFuZDo6Zm9y
d2FyZERlbGV0ZUtleVByZXNzZWQobV9mcmFtZS0+ZG9jdW1lbnQoKSwgY2FuU21hcnRDb3B5T3JE
ZWxldGUoKSwgZ3JhbnVsYXJpdHksIGtpbGxSaW5nKTsKKyAgICAgICAgICAgIFR5cGluZ0NvbW1h
bmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKG1fZnJhbWUtPmRvY3VtZW50KCksIG9wdGlvbnMs
IGdyYW51bGFyaXR5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERpcmVjdGlv
bkJhY2t3YXJkOgogICAgICAgICBjYXNlIERpcmVjdGlvbkxlZnQ6Ci0gICAgICAgICAgICBUeXBp
bmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKG1fZnJhbWUtPmRvY3VtZW50KCksIGNhblNtYXJ0
Q29weU9yRGVsZXRlKCksIGdyYW51bGFyaXR5LCBraWxsUmluZyk7CisgICAgICAgICAgICBUeXBp
bmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKG1fZnJhbWUtPmRvY3VtZW50KCksIG9wdGlvbnMs
IGdyYW51bGFyaXR5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIHJl
dmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwpAQCAtMTIwMiw3ICsxMjA3LDcg
QEAgYm9vbCBFZGl0b3I6Omluc2VydFRleHRXaXRob3V0U2VuZGluZ1RleHRFdmVudChjb25zdCBT
dHJpbmcmIHRleHQsIGJvb2wgc2VsZWN0SW4KICAgICAgICAgICAgIFJlZlB0cjxEb2N1bWVudD4g
ZG9jdW1lbnQgPSBzZWxlY3Rpb25TdGFydC0+ZG9jdW1lbnQoKTsKIAogICAgICAgICAgICAgLy8g
SW5zZXJ0IHRoZSB0ZXh0Ci0gICAgICAgICAgICBUeXBpbmdDb21tYW5kOjpUeXBpbmdDb21tYW5k
T3B0aW9ucyBvcHRpb25zID0gMDsKKyAgICAgICAgICAgIFR5cGluZ0NvbW1hbmQ6Ok9wdGlvbnMg
b3B0aW9ucyA9IDA7CiAgICAgICAgICAgICBpZiAoc2VsZWN0SW5zZXJ0ZWRUZXh0KQogICAgICAg
ICAgICAgICAgIG9wdGlvbnMgfD0gVHlwaW5nQ29tbWFuZDo6U2VsZWN0SW5zZXJ0ZWRUZXh0Owog
ICAgICAgICAgICAgaWYgKGF1dG9jb3JyZWN0aW9uV2FzQXBwbGllZCkKQEAgLTE2MjksNyArMTYz
NCw3IEBAIHZvaWQgRWRpdG9yOjpjb25maXJtQ29tcG9zaXRpb24oY29uc3QgU3RyaW5nJiB0ZXh0
LCBib29sIHByZXNlcnZlU2VsZWN0aW9uKQogICAgIC8vIElmIHRleHQgaXMgZW1wdHksIHRoZW4g
ZGVsZXRlIHRoZSBvbGQgY29tcG9zaXRpb24gaGVyZS4gIElmIHRleHQgaXMgbm9uLWVtcHR5LCBJ
bnNlcnRUZXh0Q29tbWFuZDo6aW5wdXQKICAgICAvLyB3aWxsIGRlbGV0ZSB0aGUgb2xkIGNvbXBv
c2l0aW9uIHdpdGggYW4gb3B0aW1pemVkIHJlcGxhY2Ugb3BlcmF0aW9uLgogICAgIGlmICh0ZXh0
LmlzRW1wdHkoKSkKLSAgICAgICAgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlU2VsZWN0aW9uKG1fZnJh
bWUtPmRvY3VtZW50KCksIGZhbHNlKTsKKyAgICAgICAgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlU2Vs
ZWN0aW9uKG1fZnJhbWUtPmRvY3VtZW50KCksIDApOwogCiAgICAgbV9jb21wb3NpdGlvbk5vZGUg
PSAwOwogICAgIG1fY3VzdG9tQ29tcG9zaXRpb25VbmRlcmxpbmVzLmNsZWFyKCk7CkBAIC0xNjk3
LDEzICsxNzAyLDEzIEBAIHZvaWQgRWRpdG9yOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcm
IHRleHQsIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluCiAgICAgLy8gSWYgdGV4dCBp
cyBlbXB0eSwgdGhlbiBkZWxldGUgdGhlIG9sZCBjb21wb3NpdGlvbiBoZXJlLiAgSWYgdGV4dCBp
cyBub24tZW1wdHksIEluc2VydFRleHRDb21tYW5kOjppbnB1dAogICAgIC8vIHdpbGwgZGVsZXRl
IHRoZSBvbGQgY29tcG9zaXRpb24gd2l0aCBhbiBvcHRpbWl6ZWQgcmVwbGFjZSBvcGVyYXRpb24u
CiAgICAgaWYgKHRleHQuaXNFbXB0eSgpKQotICAgICAgICBUeXBpbmdDb21tYW5kOjpkZWxldGVT
ZWxlY3Rpb24obV9mcmFtZS0+ZG9jdW1lbnQoKSwgZmFsc2UpOworICAgICAgICBUeXBpbmdDb21t
YW5kOjpkZWxldGVTZWxlY3Rpb24obV9mcmFtZS0+ZG9jdW1lbnQoKSwgVHlwaW5nQ29tbWFuZDo6
UHJldmVudFNwZWxsQ2hlY2tpbmcpOwogCiAgICAgbV9jb21wb3NpdGlvbk5vZGUgPSAwOwogICAg
IG1fY3VzdG9tQ29tcG9zaXRpb25VbmRlcmxpbmVzLmNsZWFyKCk7CiAKICAgICBpZiAoIXRleHQu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQobV9mcmFtZS0+
ZG9jdW1lbnQoKSwgdGV4dCwgdHJ1ZSwgVHlwaW5nQ29tbWFuZDo6VGV4dENvbXBvc2l0aW9uVXBk
YXRlKTsKKyAgICAgICAgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChtX2ZyYW1lLT5kb2N1bWVu
dCgpLCB0ZXh0LCBUeXBpbmdDb21tYW5kOjpTZWxlY3RJbnNlcnRlZFRleHQgfCBUeXBpbmdDb21t
YW5kOjpQcmV2ZW50U3BlbGxDaGVja2luZywgVHlwaW5nQ29tbWFuZDo6VGV4dENvbXBvc2l0aW9u
VXBkYXRlKTsKIAogICAgICAgICAvLyBGaW5kIG91dCB3aGF0IG5vZGUgaGFzIHRoZSBjb21wb3Np
dGlvbiBub3cuCiAgICAgICAgIFBvc2l0aW9uIGJhc2UgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+
YmFzZSgpLmRvd25zdHJlYW0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQu
Y3BwCmluZGV4IDc1YTIwZDdhMDI1ZTkwYWRkNGE4ZjAxZjYzZTg4YzM5NmIwNTRmMjUuLjI5MGVl
NDdjMjA1MmE5OWY1YjcyNTk3MzYwNjdhZjJlZGIzN2IzZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3JDb21tYW5kLmNwcApAQCAtMzE4LDcgKzMxOCw3IEBAIHN0YXRpYyBib29sIGV4
ZWN1dGVEZWxldGUoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2Ugc291
cmNlLCBjb25zCiAgICAgY2FzZSBDb21tYW5kRnJvbURPTVdpdGhVc2VySW50ZXJmYWNlOgogICAg
ICAgICAvLyBJZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gaXMgYSBjYXJldCwgZGVsZXRlIHRoZSBw
cmVjZWRpbmcgY2hhcmFjdGVyLiBJRSBwZXJmb3JtcyBmb3J3YXJkRGVsZXRlLCBidXQgd2UgY3Vy
cmVudGx5IHNpZGUgd2l0aCBGaXJlZm94LgogICAgICAgICAvLyBEb2Vzbid0IHNjcm9sbCB0byBt
YWtlIHRoZSBzZWxlY3Rpb24gdmlzaWJsZSwgb3IgbW9kaWZ5IHRoZSBraWxsIHJpbmcgKHRoaXMg
dGltZSwgc2lkaW5nIHdpdGggSUUsIG5vdCBGaXJlZm94KS4KLSAgICAgICAgVHlwaW5nQ29tbWFu
ZDo6ZGVsZXRlS2V5UHJlc3NlZChmcmFtZS0+ZG9jdW1lbnQoKSwgZnJhbWUtPnNlbGVjdGlvbigp
LT5ncmFudWxhcml0eSgpID09IFdvcmRHcmFudWxhcml0eSk7CisgICAgICAgIFR5cGluZ0NvbW1h
bmQ6OmRlbGV0ZUtleVByZXNzZWQoZnJhbWUtPmRvY3VtZW50KCksIGZyYW1lLT5zZWxlY3Rpb24o
KS0+Z3JhbnVsYXJpdHkoKSA9PSBXb3JkR3JhbnVsYXJpdHkgPyBUeXBpbmdDb21tYW5kOjpTbWFy
dERlbGV0ZSA6IDApOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0Nv
bW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAppbmRl
eCBkZjE1MGVlMDAzOTUwOGQ2MzQyN2FjYjRlY2JjZDUwZmU2ZjQyNjA4Li4xZmYyNTI0Nzg0OGE4
NmU2YWI4ZTQyNTM1NjZmYzgwZGZlNTU5ZDA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlw
aW5nQ29tbWFuZC5jcHAKQEAgLTU5LDIzICs1OSwyNCBAQCBzdGF0aWMgYm9vbCBjYW5BcHBlbmRO
ZXdMaW5lRmVlZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiAgICAgcmV0dXJu
IGV2ZW50LT50ZXh0KCkubGVuZ3RoKCk7CiB9CiAKLVR5cGluZ0NvbW1hbmQ6OlR5cGluZ0NvbW1h
bmQoRG9jdW1lbnQgKmRvY3VtZW50LCBFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSwgY29uc3Qg
U3RyaW5nICZ0ZXh0VG9JbnNlcnQsIFR5cGluZ0NvbW1hbmRPcHRpb25zIG9wdGlvbnMsIFRleHRH
cmFudWxhcml0eSBncmFudWxhcml0eSwgVGV4dENvbXBvc2l0aW9uVHlwZSBjb21wb3NpdGlvblR5
cGUpCitUeXBpbmdDb21tYW5kOjpUeXBpbmdDb21tYW5kKERvY3VtZW50ICpkb2N1bWVudCwgRVR5
cGluZ0NvbW1hbmQgY29tbWFuZFR5cGUsIGNvbnN0IFN0cmluZyAmdGV4dFRvSW5zZXJ0LCBPcHRp
b25zIG9wdGlvbnMsIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgVGV4dENvbXBvc2l0aW9u
VHlwZSBjb21wb3NpdGlvblR5cGUpCiAgICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChkb2N1bWVu
dCkKICAgICAsIG1fY29tbWFuZFR5cGUoY29tbWFuZFR5cGUpCiAgICAgLCBtX3RleHRUb0luc2Vy
dCh0ZXh0VG9JbnNlcnQpCiAgICAgLCBtX29wZW5Gb3JNb3JlVHlwaW5nKHRydWUpCiAgICAgLCBt
X3NlbGVjdEluc2VydGVkVGV4dChvcHRpb25zICYgU2VsZWN0SW5zZXJ0ZWRUZXh0KQotICAgICwg
bV9zbWFydERlbGV0ZShmYWxzZSkKKyAgICAsIG1fc21hcnREZWxldGUob3B0aW9ucyAmIFNtYXJ0
RGVsZXRlKQogICAgICwgbV9ncmFudWxhcml0eShncmFudWxhcml0eSkKICAgICAsIG1fY29tcG9z
aXRpb25UeXBlKGNvbXBvc2l0aW9uVHlwZSkKICAgICAsIG1fa2lsbFJpbmcob3B0aW9ucyAmIEtp
bGxSaW5nKQogICAgICwgbV9vcGVuZWRCeUJhY2t3YXJkRGVsZXRlKGZhbHNlKQogICAgICwgbV9z
aG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcihvcHRpb25zICYgUmV0YWluQXV0b2Nv
cnJlY3Rpb25JbmRpY2F0b3IpCisgICAgLCBtX3Nob3VsZFByZXZlbnRTcGVsbENoZWNraW5nKG9w
dGlvbnMgJiBQcmV2ZW50U3BlbGxDaGVja2luZykKIHsKICAgICB1cGRhdGVQcmVzZXJ2ZXNUeXBp
bmdTdHlsZShtX2NvbW1hbmRUeXBlKTsKIH0KIAotdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVT
ZWxlY3Rpb24oRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIHNtYXJ0RGVsZXRlKQordm9pZCBUeXBp
bmdDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oRG9jdW1lbnQqIGRvY3VtZW50LCBPcHRpb25zIG9w
dGlvbnMpCiB7CiAgICAgQVNTRVJUKGRvY3VtZW50KTsKICAgICAKQEAgLTg3LDE2ICs4OCwxNiBA
QCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZVNlbGVjdGlvbihEb2N1bWVudCogZG9jdW1lbnQs
IGJvb2wgc21hcnREZWxldGUpCiAgICAgCiAgICAgRWRpdENvbW1hbmQqIGxhc3RFZGl0Q29tbWFu
ZCA9IGZyYW1lLT5lZGl0b3IoKS0+bGFzdEVkaXRDb21tYW5kKCk7CiAgICAgaWYgKGlzT3BlbkZv
ck1vcmVUeXBpbmdDb21tYW5kKGxhc3RFZGl0Q29tbWFuZCkpIHsKLSAgICAgICAgc3RhdGljX2Nh
c3Q8VHlwaW5nQ29tbWFuZCo+KGxhc3RFZGl0Q29tbWFuZCktPmRlbGV0ZVNlbGVjdGlvbihzbWFy
dERlbGV0ZSk7CisgICAgICAgIFR5cGluZ0NvbW1hbmQqIGxhc3RUeXBpbmdDb21tYW5kID0gc3Rh
dGljX2Nhc3Q8VHlwaW5nQ29tbWFuZCo+KGxhc3RFZGl0Q29tbWFuZCk7CisgICAgICAgIGxhc3RU
eXBpbmdDb21tYW5kLT5zZXRTaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZyhvcHRpb25zICYgUHJl
dmVudFNwZWxsQ2hlY2tpbmcpOworICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+ZGVsZXRlU2Vs
ZWN0aW9uKG9wdGlvbnMgJiBTbWFydERlbGV0ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBSZWZQdHI8VHlwaW5nQ29tbWFuZD4gdHlwaW5nQ29tbWFuZCA9IFR5cGluZ0NvbW1hbmQ6
OmNyZWF0ZShkb2N1bWVudCwgRGVsZXRlU2VsZWN0aW9uLCAiIiwgMCk7Ci0gICAgdHlwaW5nQ29t
bWFuZC0+c2V0U21hcnREZWxldGUoc21hcnREZWxldGUpOwotICAgIHR5cGluZ0NvbW1hbmQtPmFw
cGx5KCk7CisgICAgVHlwaW5nQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBEZWxldGVTZWxlY3Rp
b24sICIiLCBvcHRpb25zKS0+YXBwbHkoKTsKIH0KIAotdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxl
dGVLZXlQcmVzc2VkKERvY3VtZW50ICpkb2N1bWVudCwgYm9vbCBzbWFydERlbGV0ZSwgVGV4dEdy
YW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIGtpbGxSaW5nKQordm9pZCBUeXBpbmdDb21tYW5k
OjpkZWxldGVLZXlQcmVzc2VkKERvY3VtZW50ICpkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zLCBU
ZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiB7CiAgICAgQVNTRVJUKGRvY3VtZW50KTsKICAg
ICAKQEAgLTEwNSwxOCArMTA2LDE3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJl
c3NlZChEb2N1bWVudCAqZG9jdW1lbnQsIGJvb2wgc21hcnREZWxldGUsIFRleHRHCiAgICAgCiAg
ICAgRWRpdENvbW1hbmQqIGxhc3RFZGl0Q29tbWFuZCA9IGZyYW1lLT5lZGl0b3IoKS0+bGFzdEVk
aXRDb21tYW5kKCk7CiAgICAgaWYgKGdyYW51bGFyaXR5ID09IENoYXJhY3RlckdyYW51bGFyaXR5
ICYmIGlzT3BlbkZvck1vcmVUeXBpbmdDb21tYW5kKGxhc3RFZGl0Q29tbWFuZCkpIHsKLSAgICAg
ICAgdXBkYXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbihzdGF0aWNf
Y2FzdDxUeXBpbmdDb21tYW5kKj4obGFzdEVkaXRDb21tYW5kKSwgZnJhbWUpOwotICAgICAgICBz
dGF0aWNfY2FzdDxUeXBpbmdDb21tYW5kKj4obGFzdEVkaXRDb21tYW5kKS0+ZGVsZXRlS2V5UHJl
c3NlZChncmFudWxhcml0eSwga2lsbFJpbmcpOworICAgICAgICBUeXBpbmdDb21tYW5kKiBsYXN0
VHlwaW5nQ29tbWFuZCA9IHN0YXRpY19jYXN0PFR5cGluZ0NvbW1hbmQqPihsYXN0RWRpdENvbW1h
bmQpOworICAgICAgICB1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0
aW9uKGxhc3RUeXBpbmdDb21tYW5kLCBmcmFtZSk7CisgICAgICAgIGxhc3RUeXBpbmdDb21tYW5k
LT5zZXRTaG91bGRQcmV2ZW50U3BlbGxDaGVja2luZyhvcHRpb25zICYgUHJldmVudFNwZWxsQ2hl
Y2tpbmcpOworICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+ZGVsZXRlS2V5UHJlc3NlZChncmFu
dWxhcml0eSwgb3B0aW9ucyAmIEtpbGxSaW5nKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIFR5cGluZ0NvbW1hbmRPcHRpb25zIG9wdGlvbnMgPSBraWxsUmluZyA/IEtpbGxSaW5nIDog
MDsKLSAgICBSZWZQdHI8VHlwaW5nQ29tbWFuZD4gdHlwaW5nQ29tbWFuZCA9IFR5cGluZ0NvbW1h
bmQ6OmNyZWF0ZShkb2N1bWVudCwgRGVsZXRlS2V5LCAiIiwgb3B0aW9ucywgZ3JhbnVsYXJpdHkp
OwotICAgIHR5cGluZ0NvbW1hbmQtPnNldFNtYXJ0RGVsZXRlKHNtYXJ0RGVsZXRlKTsKLSAgICB0
eXBpbmdDb21tYW5kLT5hcHBseSgpOworICAgIFR5cGluZ0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVu
dCwgRGVsZXRlS2V5LCAiIiwgb3B0aW9ucywgZ3JhbnVsYXJpdHkpLT5hcHBseSgpOwogfQogCi12
b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKERvY3VtZW50ICpkb2N1
bWVudCwgYm9vbCBzbWFydERlbGV0ZSwgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29s
IGtpbGxSaW5nKQordm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChE
b2N1bWVudCAqZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucywgVGV4dEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5KQogewogICAgIC8vIEZJWE1FOiBGb3J3YXJkIGRlbGV0ZSBpbiBUZXh0RWRpdCBhcHBl
YXJzIHRvIG9wZW4gYW5kIGNsb3NlIGEgbmV3IHR5cGluZyBjb21tYW5kLgogICAgIEFTU0VSVChk
b2N1bWVudCk7CkBAIC0xMjYsMTUgKzEyNiwxNCBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndh
cmREZWxldGVLZXlQcmVzc2VkKERvY3VtZW50ICpkb2N1bWVudCwgYm9vbCBzbWFydERlbGV0ZQog
ICAgIAogICAgIEVkaXRDb21tYW5kKiBsYXN0RWRpdENvbW1hbmQgPSBmcmFtZS0+ZWRpdG9yKCkt
Pmxhc3RFZGl0Q29tbWFuZCgpOwogICAgIGlmIChncmFudWxhcml0eSA9PSBDaGFyYWN0ZXJHcmFu
dWxhcml0eSAmJiBpc09wZW5Gb3JNb3JlVHlwaW5nQ29tbWFuZChsYXN0RWRpdENvbW1hbmQpKSB7
Ci0gICAgICAgIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24o
c3RhdGljX2Nhc3Q8VHlwaW5nQ29tbWFuZCo+KGxhc3RFZGl0Q29tbWFuZCksIGZyYW1lKTsKLSAg
ICAgICAgc3RhdGljX2Nhc3Q8VHlwaW5nQ29tbWFuZCo+KGxhc3RFZGl0Q29tbWFuZCktPmZvcndh
cmREZWxldGVLZXlQcmVzc2VkKGdyYW51bGFyaXR5LCBraWxsUmluZyk7CisgICAgICAgIFR5cGlu
Z0NvbW1hbmQqIGxhc3RUeXBpbmdDb21tYW5kID0gc3RhdGljX2Nhc3Q8VHlwaW5nQ29tbWFuZCo+
KGxhc3RFZGl0Q29tbWFuZCk7CisgICAgICAgIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJv
bUN1cnJlbnRTZWxlY3Rpb24obGFzdFR5cGluZ0NvbW1hbmQsIGZyYW1lKTsKKyAgICAgICAgbGFz
dFR5cGluZ0NvbW1hbmQtPnNldFNob3VsZFByZXZlbnRTcGVsbENoZWNraW5nKG9wdGlvbnMgJiBQ
cmV2ZW50U3BlbGxDaGVja2luZyk7CisgICAgICAgIGxhc3RUeXBpbmdDb21tYW5kLT5mb3J3YXJk
RGVsZXRlS2V5UHJlc3NlZChncmFudWxhcml0eSwgb3B0aW9ucyAmIEtpbGxSaW5nKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIFR5cGluZ0NvbW1hbmRPcHRpb25zIG9wdGlvbnMgPSBr
aWxsUmluZyA/IEtpbGxSaW5nIDogMDsKLSAgICBSZWZQdHI8VHlwaW5nQ29tbWFuZD4gdHlwaW5n
Q29tbWFuZCA9IFR5cGluZ0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCwgRm9yd2FyZERlbGV0ZUtl
eSwgIiIsIG9wdGlvbnMsIGdyYW51bGFyaXR5KTsKLSAgICB0eXBpbmdDb21tYW5kLT5zZXRTbWFy
dERlbGV0ZShzbWFydERlbGV0ZSk7Ci0gICAgdHlwaW5nQ29tbWFuZC0+YXBwbHkoKTsKKyAgICBU
eXBpbmdDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQsIEZvcndhcmREZWxldGVLZXksICIiLCBvcHRp
b25zLCBncmFudWxhcml0eSktPmFwcGx5KCk7CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6dXBk
YXRlU2VsZWN0aW9uSWZEaWZmZXJlbnRGcm9tQ3VycmVudFNlbGVjdGlvbihUeXBpbmdDb21tYW5k
KiB0eXBpbmdDb21tYW5kLCBGcmFtZSogZnJhbWUpCkBAIC0xNDgsNyArMTQ3LDcgQEAgdm9pZCBU
eXBpbmdDb21tYW5kOjp1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0
aW9uKFR5cGluZ0NvbW1hbmQKICAgICB0eXBpbmdDb21tYW5kLT5zZXRFbmRpbmdTZWxlY3Rpb24o
Y3VycmVudFNlbGVjdGlvbik7CiB9CiAKLXZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChE
b2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgVHlwaW5nQ29tbWFuZE9wdGlv
bnMgb3B0aW9ucywgVGV4dENvbXBvc2l0aW9uVHlwZSBjb21wb3NpdGlvbikKK3ZvaWQgVHlwaW5n
Q29tbWFuZDo6aW5zZXJ0VGV4dChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4
dCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0Q29tcG9zaXRpb25UeXBlIGNvbXBvc2l0aW9uKQogewog
ICAgIEFTU0VSVChkb2N1bWVudCk7CiAKQEAgLTE2NCw3ICsxNjMsNyBAQCB2b2lkIFR5cGluZ0Nv
bW1hbmQ6Omluc2VydFRleHQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHRleHQs
IFR5cGluZ0NvbQogfQogCiAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IG5lZWQgdG8gdGFrZSBzZWxl
Y3Rpb25Gb3JJbnNlcnRpb24uIEl0IHNob3VsZCBiZSBpZGVudGljYWwgdG8gU2VsZWN0aW9uQ29u
dHJvbGxlcidzIGN1cnJlbnQgc2VsZWN0aW9uLgotdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRU
ZXh0KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBzZWxlY3Rpb25Gb3JJbnNlcnRpb24sIFR5cGluZ0NvbW1hbmRPcHRpb25zIG9w
dGlvbnMsIFRleHRDb21wb3NpdGlvblR5cGUgY29tcG9zaXRpb25UeXBlKQordm9pZCBUeXBpbmdD
b21tYW5kOjppbnNlcnRUZXh0KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0
LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25Gb3JJbnNlcnRpb24sIE9wdGlvbnMg
b3B0aW9ucywgVGV4dENvbXBvc2l0aW9uVHlwZSBjb21wb3NpdGlvblR5cGUpCiB7CiAgICAgQVNT
RVJUKGRvY3VtZW50KTsKIApAQCAtMjAwLDYgKzE5OSw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6
aW5zZXJ0VGV4dChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3Qg
VmlzCiAKICAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldENvbXBvc2l0aW9uVHlwZShjb21w
b3NpdGlvblR5cGUpOwogICAgICAgICBsYXN0VHlwaW5nQ29tbWFuZC0+c2V0U2hvdWxkUmV0YWlu
QXV0b2NvcnJlY3Rpb25JbmRpY2F0b3Iob3B0aW9ucyAmIFJldGFpbkF1dG9jb3JyZWN0aW9uSW5k
aWNhdG9yKTsKKyAgICAgICAgbGFzdFR5cGluZ0NvbW1hbmQtPnNldFNob3VsZFByZXZlbnRTcGVs
bENoZWNraW5nKG9wdGlvbnMgJiBQcmV2ZW50U3BlbGxDaGVja2luZyk7CiAgICAgICAgIGxhc3RU
eXBpbmdDb21tYW5kLT5pbnNlcnRUZXh0KG5ld1RleHQsIG9wdGlvbnMgJiBTZWxlY3RJbnNlcnRl
ZFRleHQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjE2LDcgKzIxNiw3IEBAIHZvaWQg
VHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmlu
ZyYgdGV4dCwgY29uc3QgVmlzCiAgICAgfQogfQogCi12b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2Vy
dExpbmVCcmVhayhEb2N1bWVudCAqZG9jdW1lbnQsIFR5cGluZ0NvbW1hbmRPcHRpb25zIG9wdGlv
bnMpCit2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydExpbmVCcmVhayhEb2N1bWVudCAqZG9jdW1l
bnQsIE9wdGlvbnMgb3B0aW9ucykKIHsKICAgICBBU1NFUlQoZG9jdW1lbnQpOwogCkBAIC0yNTAs
NyArMjUwLDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJ
blF1b3RlZENvbnRlbnQoRG9jdW1lbnQgKmRvY3VtZW50KQogICAgIGFwcGx5Q29tbWFuZChUeXBp
bmdDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQsIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVv
dGVkQ29udGVudCkpOwogfQogCi12b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNl
cGFyYXRvcihEb2N1bWVudCAqZG9jdW1lbnQsIFR5cGluZ0NvbW1hbmRPcHRpb25zIG9wdGlvbnMp
Cit2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvcihEb2N1bWVudCAq
ZG9jdW1lbnQsIE9wdGlvbnMgb3B0aW9ucykKIHsKICAgICBBU1NFUlQoZG9jdW1lbnQpOwogCkBA
IC0zNjAsNyArMzYwLDggQEAgdm9pZCBUeXBpbmdDb21tYW5kOjp0eXBpbmdBZGRlZFRvT3BlbkNv
bW1hbmQoRVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5cGVGb3JBZGRlZFQKICNpZiBQTEFURk9STShN
QUMpICYmICFkZWZpbmVkKEJVSUxESU5HX09OX1RJR0VSKSAmJiAhZGVmaW5lZChCVUlMRElOR19P
Tl9MRU9QQVJEKQogICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmVkaXRvcigpLT5hcHBsaWVkRWRp
dGluZyh0aGlzKTsKICAgICAvLyBTaW5jZSB0aGUgc3BlbGxjaGVja2luZyBjb2RlIG1heSBhbHNv
IHBlcmZvcm0gY29ycmVjdGlvbnMgYW5kIG90aGVyIHJlcGxhY2VtZW50cywgaXQgc2hvdWxkIGhh
cHBlbiBhZnRlciB0aGUgdHlwaW5nIGNoYW5nZXMuCi0gICAgbWFya01pc3NwZWxsaW5nc0FmdGVy
VHlwaW5nKGNvbW1hbmRUeXBlRm9yQWRkZWRUeXBpbmcpOworICAgIGlmICghbV9zaG91bGRQcmV2
ZW50U3BlbGxDaGVja2luZykKKyAgICAgICAgbWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKGNv
bW1hbmRUeXBlRm9yQWRkZWRUeXBpbmcpOwogI2Vsc2UKICAgICAvLyBUaGUgb2xkIHNwZWxsY2hl
Y2tpbmcgY29kZSByZXF1aXJlcyB0aGF0IGNoZWNraW5nIGJlIGRvbmUgZmlyc3QsIHRvIHByZXZl
bnQgaXNzdWVzIGxpa2UgdGhhdCBpbiA2ODY0MDcyLCB3aGVyZSA8ZG9lc24ndD4gaXMgbWFya2Vk
IGFzIG1pc3NwZWxsZWQuCiAgICAgbWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKGNvbW1hbmRU
eXBlRm9yQWRkZWRUeXBpbmcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
eXBpbmdDb21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuaApp
bmRleCBiZWI0ZDAyNGFmZThlMTQzYWVkY2M3ZDBmMWNmNDQ3MjgzMzc1NzM0Li5hMTA2MzRmYTM4
MjkzZjQ4MTZmY2YzNzI3ODQ2ZGFmZWI1NTRhOTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5
cGluZ0NvbW1hbmQuaApAQCAtNDgsMjAgKzQ4LDIyIEBAIHB1YmxpYzoKICAgICAgICAgVGV4dENv
bXBvc2l0aW9uQ29uZmlybQogICAgIH07CiAKLSAgICBlbnVtIFR5cGluZ0NvbW1hbmRPcHRpb24g
eworICAgIGVudW0gT3B0aW9uIHsKICAgICAgICAgU2VsZWN0SW5zZXJ0ZWRUZXh0ID0gMSA8PCAw
LAogICAgICAgICBLaWxsUmluZyA9IDEgPDwgMSwKLSAgICAgICAgUmV0YWluQXV0b2NvcnJlY3Rp
b25JbmRpY2F0b3IgPSAxIDw8IDIKKyAgICAgICAgUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0
b3IgPSAxIDw8IDIsCisgICAgICAgIFByZXZlbnRTcGVsbENoZWNraW5nID0gMSA8PCAzLAorICAg
ICAgICBTbWFydERlbGV0ZSA9IDEgPDwgNAogICAgIH07Ci0gICAgdHlwZWRlZiB1bnNpZ25lZCBU
eXBpbmdDb21tYW5kT3B0aW9uczsKLQotICAgIHN0YXRpYyB2b2lkIGRlbGV0ZVNlbGVjdGlvbihE
b2N1bWVudCosIGJvb2wgc21hcnREZWxldGUgPSBmYWxzZSk7Ci0gICAgc3RhdGljIHZvaWQgZGVs
ZXRlS2V5UHJlc3NlZChEb2N1bWVudCosIGJvb2wgc21hcnREZWxldGUgPSBmYWxzZSwgVGV4dEdy
YW51bGFyaXR5ID0gQ2hhcmFjdGVyR3JhbnVsYXJpdHksIGJvb2wga2lsbFJpbmcgPSBmYWxzZSk7
Ci0gICAgc3RhdGljIHZvaWQgZm9yd2FyZERlbGV0ZUtleVByZXNzZWQoRG9jdW1lbnQqLCBib29s
IHNtYXJ0RGVsZXRlID0gZmFsc2UsIFRleHRHcmFudWxhcml0eSA9IENoYXJhY3RlckdyYW51bGFy
aXR5LCBib29sIGtpbGxSaW5nID0gZmFsc2UpOwotICAgIHN0YXRpYyB2b2lkIGluc2VydFRleHQo
RG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmLCBUeXBpbmdDb21tYW5kT3B0aW9ucywgVGV4dENvbXBv
c2l0aW9uVHlwZSA9IFRleHRDb21wb3NpdGlvbk5vbmUpOwotICAgIHN0YXRpYyB2b2lkIGluc2Vy
dFRleHQoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwg
VHlwaW5nQ29tbWFuZE9wdGlvbnMsIFRleHRDb21wb3NpdGlvblR5cGUgPSBUZXh0Q29tcG9zaXRp
b25Ob25lKTsKLSAgICBzdGF0aWMgdm9pZCBpbnNlcnRMaW5lQnJlYWsoRG9jdW1lbnQqLCBUeXBp
bmdDb21tYW5kT3B0aW9ucyk7Ci0gICAgc3RhdGljIHZvaWQgaW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9yKERvY3VtZW50KiwgVHlwaW5nQ29tbWFuZE9wdGlvbnMpOworICAgIHR5cGVkZWYgdW5zaWdu
ZWQgT3B0aW9uczsKKworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZVNlbGVjdGlvbihEb2N1bWVudCos
IE9wdGlvbnMgPSAwKTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVLZXlQcmVzc2VkKERvY3VtZW50
KiwgT3B0aW9ucyA9IDAsIFRleHRHcmFudWxhcml0eSA9IENoYXJhY3RlckdyYW51bGFyaXR5KTsK
KyAgICBzdGF0aWMgdm9pZCBmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChEb2N1bWVudCosIE9wdGlv
bnMgPSAwLCBUZXh0R3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CisgICAgc3Rh
dGljIHZvaWQgaW5zZXJ0VGV4dChEb2N1bWVudCosIGNvbnN0IFN0cmluZyYsIE9wdGlvbnMsIFRl
eHRDb21wb3NpdGlvblR5cGUgPSBUZXh0Q29tcG9zaXRpb25Ob25lKTsKKyAgICBzdGF0aWMgdm9p
ZCBpbnNlcnRUZXh0KERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiwgY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYsIE9wdGlvbnMsIFRleHRDb21wb3NpdGlvblR5cGUgPSBUZXh0Q29tcG9zaXRpb25Ob25l
KTsKKyAgICBzdGF0aWMgdm9pZCBpbnNlcnRMaW5lQnJlYWsoRG9jdW1lbnQqLCBPcHRpb25zKTsK
KyAgICBzdGF0aWMgdm9pZCBpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IoRG9jdW1lbnQqLCBPcHRp
b25zKTsKICAgICBzdGF0aWMgdm9pZCBpbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1b3RlZENv
bnRlbnQoRG9jdW1lbnQqKTsKICAgICBzdGF0aWMgYm9vbCBpc09wZW5Gb3JNb3JlVHlwaW5nQ29t
bWFuZChjb25zdCBFZGl0Q29tbWFuZCopOwogICAgIHN0YXRpYyB2b2lkIGNsb3NlVHlwaW5nKEVk
aXRDb21tYW5kKik7CkBAIC04MCwxNyArODIsMTcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q29t
cG9zaXRpb25UeXBlKFRleHRDb21wb3NpdGlvblR5cGUgdHlwZSkgeyBtX2NvbXBvc2l0aW9uVHlw
ZSA9IHR5cGU7IH0KIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUeXBpbmdDb21t
YW5kPiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBFVHlwaW5nQ29tbWFuZCBjb21tYW5kLCBj
b25zdCBTdHJpbmcmIHRleHQgPSAiIiwgVHlwaW5nQ29tbWFuZE9wdGlvbnMgb3B0aW9ucyA9IDAs
IFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSA9IENoYXJhY3RlckdyYW51bGFyaXR5KQorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFR5cGluZ0NvbW1hbmQ+IGNyZWF0ZShEb2N1bWVudCogZG9jdW1l
bnQsIEVUeXBpbmdDb21tYW5kIGNvbW1hbmQsIGNvbnN0IFN0cmluZyYgdGV4dCA9ICIiLCBPcHRp
b25zIG9wdGlvbnMgPSAwLCBUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkgPSBDaGFyYWN0ZXJH
cmFudWxhcml0eSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVHlwaW5nQ29t
bWFuZChkb2N1bWVudCwgY29tbWFuZCwgdGV4dCwgb3B0aW9ucywgZ3JhbnVsYXJpdHksIFRleHRD
b21wb3NpdGlvbk5vbmUpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUeXBpbmdD
b21tYW5kPiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBFVHlwaW5nQ29tbWFuZCBjb21tYW5k
LCBjb25zdCBTdHJpbmcmIHRleHQsIFR5cGluZ0NvbW1hbmRPcHRpb25zIG9wdGlvbnMsIFRleHRD
b21wb3NpdGlvblR5cGUgY29tcG9zaXRpb25UeXBlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFR5
cGluZ0NvbW1hbmQ+IGNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQsIEVUeXBpbmdDb21tYW5kIGNv
bW1hbmQsIGNvbnN0IFN0cmluZyYgdGV4dCwgT3B0aW9ucyBvcHRpb25zLCBUZXh0Q29tcG9zaXRp
b25UeXBlIGNvbXBvc2l0aW9uVHlwZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgVHlwaW5nQ29tbWFuZChkb2N1bWVudCwgY29tbWFuZCwgdGV4dCwgb3B0aW9ucywgQ2hhcmFj
dGVyR3JhbnVsYXJpdHksIGNvbXBvc2l0aW9uVHlwZSkpOwogICAgIH0KIAotICAgIFR5cGluZ0Nv
bW1hbmQoRG9jdW1lbnQqLCBFVHlwaW5nQ29tbWFuZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBUeXBp
bmdDb21tYW5kT3B0aW9ucywgVGV4dEdyYW51bGFyaXR5LCBUZXh0Q29tcG9zaXRpb25UeXBlKTsK
KyAgICBUeXBpbmdDb21tYW5kKERvY3VtZW50KiwgRVR5cGluZ0NvbW1hbmQsIGNvbnN0IFN0cmlu
ZyYgdGV4dCwgT3B0aW9ucywgVGV4dEdyYW51bGFyaXR5LCBUZXh0Q29tcG9zaXRpb25UeXBlKTsK
IAogICAgIGJvb2wgc21hcnREZWxldGUoKSBjb25zdCB7IHJldHVybiBtX3NtYXJ0RGVsZXRlOyB9
CiAgICAgdm9pZCBzZXRTbWFydERlbGV0ZShib29sIHNtYXJ0RGVsZXRlKSB7IG1fc21hcnREZWxl
dGUgPSBzbWFydERlbGV0ZTsgfQpAQCAtMTAxLDYgKzEwMyw3IEBAIHByaXZhdGU6CiAgICAgdmly
dHVhbCBib29sIHByZXNlcnZlc1R5cGluZ1N0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9wcmVzZXJ2
ZXNUeXBpbmdTdHlsZTsgfQogICAgIHZpcnR1YWwgYm9vbCBzaG91bGRSZXRhaW5BdXRvY29ycmVj
dGlvbkluZGljYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkUmV0YWluQXV0b2NvcnJlY3Rp
b25JbmRpY2F0b3I7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0U2hvdWxkUmV0YWluQXV0b2NvcnJl
Y3Rpb25JbmRpY2F0b3IoYm9vbCByZXRhaW4pIHsgbV9zaG91bGRSZXRhaW5BdXRvY29ycmVjdGlv
bkluZGljYXRvciA9IHJldGFpbjsgfQorICAgIHZvaWQgc2V0U2hvdWxkUHJldmVudFNwZWxsQ2hl
Y2tpbmcoYm9vbCBwcmV2ZW50KSB7IG1fc2hvdWxkUHJldmVudFNwZWxsQ2hlY2tpbmcgPSBwcmV2
ZW50OyB9CiAKICAgICBzdGF0aWMgdm9pZCB1cGRhdGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21D
dXJyZW50U2VsZWN0aW9uKFR5cGluZ0NvbW1hbmQqLCBGcmFtZSopOwogCkBAIC0xMjUsNiArMTI4
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fb3BlbmVkQnlCYWNrd2FyZERlbGV0ZTsKIAogICAg
IGJvb2wgbV9zaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcjsKKyAgICBib29sIG1f
c2hvdWxkUHJldmVudFNwZWxsQ2hlY2tpbmc7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>