<?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>131631</bug_id>
          
          <creation_ts>2014-04-14 13:40:12 -0700</creation_ts>
          <short_desc>[Win] Eliminate use of deleteAllValues in Windows Files</short_desc>
          <delta_ts>2014-04-16 19:54:45 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>73757</blocked>
    
    <blocked>131784</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>andersca</cc>
    
    <cc>bfulgham</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1000590</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-04-14 13:40:12 -0700</bug_when>
    <thetext>Now that HashMap works with unique_ptr mapped values, we want to go through all the sites using deleteAllValues on a HashMap and change them to use unique_ptr instead.

This patch makes this change to the following Windows files:

Source/WebCore/platform/win/WCDataObject.cpp:    WTF::deleteAllValues(m_formats);
Source/WebKit2/Shared/Plugins/NPRemoteObjectMap.cpp:    deleteAllValues(messageReceivers);
Tools/DumpRenderTree/win/DRTDataObject.cpp:    WTF::deleteAllValues(m_formats);
Tools/DumpRenderTree/win/UIDelegate.cpp:    ~DRTUndoStack() { deleteAllValues(m_undoVector); }
Tools/DumpRenderTree/win/UIDelegate.cpp:    void clear() { deleteAllValues(m_undoVector); m_undoVector.clear(); }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000621</commentid>
    <comment_count>1</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-04-14 15:27:14 -0700</bug_when>
    <thetext>Note: This patch will not touch Source/WebKit2/Shared/Plugins/NPRemoteObjectMap.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000627</commentid>
    <comment_count>2</comment_count>
      <attachid>229314</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-04-14 15:32:11 -0700</bug_when>
    <thetext>Created attachment 229314
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000632</commentid>
    <comment_count>3</comment_count>
      <attachid>229316</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-04-14 15:38:28 -0700</bug_when>
    <thetext>Created attachment 229316
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1000849</commentid>
    <comment_count>4</comment_count>
      <attachid>229316</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-04-15 07:49:27 -0700</bug_when>
    <thetext>Comment on attachment 229316
Patch

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

&gt; Source/WebCore/platform/win/WCDataObject.cpp:72
&gt; +    for (const auto&amp; format : formats)

auto&amp; would do just as well as const auto&amp;; since the Vector reference is already const the format would be const automatically without stating it

&gt; Source/WebCore/platform/win/WCDataObject.cpp:184
&gt; +    for (auto&amp; medium : m_medium)
&gt; +        ReleaseStgMedium(medium.get());

Could make this even better by using a std::unique_ptr with a custom deleter that calls ReleaseStgMedium. No rush to do so, though.

&gt; Source/WebCore/platform/win/WCDataObject.cpp:245
&gt; +    for (const auto&amp; format : m_formats) {

Same comment about unneeded const.

&gt; Source/WebCore/platform/win/WCDataObject.cpp:268
&gt; +    std::unique_ptr&lt;FORMATETC&gt; fetc = std::make_unique&lt;FORMATETC&gt;();

I like to use auto in cases like this to avoid repeating the typename twice on the same line.

&gt; Source/WebCore/platform/win/WCDataObject.cpp:270
&gt;      if (!fetc)
&gt;          return E_OUTOFMEMORY;

Does make_unique ever return null? I think it raises an exception instead of returning null, or maybe in WebKit just aborts the entire process, so I think this null check is dead code.

&gt; Source/WebCore/platform/win/WCDataObject.cpp:374
&gt; +            m_formats[m_formats.size() - 1] = nullptr;

This line of code is not needed. The std::move on the line above will make this null.

&gt; Source/WebCore/platform/win/WCDataObject.cpp:376
&gt; +            std::unique_ptr&lt;STGMEDIUM&gt; medium = std::move(m_medium[ptr]);

If we used a std::unique_ptr with a custom deleter, then we would not need this line of code, or the ReleaseStgMedium below, at all.

&gt; Source/WebCore/platform/win/WCDataObject.cpp:378
&gt; +            m_medium[m_medium.size() - 1] = nullptr;

This line of code is not needed. The std::move on the line above will make this null.

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:53
&gt; -    explicit WCEnumFormatEtc(const Vector&lt;FORMATETC*&gt;&amp; formats);
&gt; +    explicit WCEnumFormatEtc(const Vector&lt;std::unique_ptr&lt;FORMATETC&gt;&gt;&amp; formats);

Since this is copied and pasted code, all the same comments apply here as above.

&gt; Tools/DumpRenderTree/win/UIDelegate.cpp:75
&gt; +    ~DRTUndoStack() { }

I think you could just delete this.

&gt; Tools/DumpRenderTree/win/UIDelegate.cpp:81
&gt; +    std::unique_ptr&lt;DRTUndoObject&gt; pop() { std::unique_ptr&lt;DRTUndoObject&gt; top = std::move(m_undoVector.last()); m_undoVector.removeLast(); return std::move(top); }

This should really use takeLast, but to do that I think we’d need to fix Vector::takeLast’s implementation to work properly with move semantics. Currently it seems to be copy-based.

&gt; Tools/DumpRenderTree/win/UIDelegate.cpp:136
&gt; +    std::unique_ptr&lt;DRTUndoObject&gt; redoObject = m_redoStack-&gt;pop();
&gt;      redoObject-&gt;invoke();

We don’t even need a local variable for this any more.  Just write:

    m_redoStack-&gt;pop()-&gt;invoke();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1001083</commentid>
    <comment_count>5</comment_count>
      <attachid>229426</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-04-15 21:14:17 -0700</bug_when>
    <thetext>Created attachment 229426
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1001153</commentid>
    <comment_count>6</comment_count>
      <attachid>229426</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-04-16 09:12:26 -0700</bug_when>
    <thetext>Comment on attachment 229426
Patch

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

Great! I suggest landing this as is.

I think there’s a way to do this without declaring the StgMediumDeleter struct; I think the type can just be a function pointer and we can use the ReleaseStgMedium itself as the deleter. But I don’t think that additional refinement is important enough to spend time on.

I also looked into the takeLast thing, and all we’d have to do is add a single std::move to make it work with move-only types.

&gt; Tools/DumpRenderTree/win/DRTDataObject.cpp:349
&gt; +            m_formats[position] = std::move(m_formats[m_formats.size() - 1]);

Could be m_formats.last() instead of m_formats[m_formats.size() - 1].</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1001236</commentid>
    <comment_count>7</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-04-16 11:18:59 -0700</bug_when>
    <thetext>Landed in r167365 &lt;http://trac.webkit.org/changeset/167365&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229314</attachid>
            <date>2014-04-14 15:32:11 -0700</date>
            <delta_ts>2014-04-14 15:38:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-131631-20140414153150.patch</filename>
            <type>text/plain</type>
            <size>18653</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NzI3MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE0LTA0LTE0ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dIEVsaW1pbmF0ZSB1
c2Ugb2YgZGVsZXRlQWxsVmFsdWVzIGluIFdpbmRvd3MgRmlsZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTYzMQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSB0byB1c2Ugc3RkOjp1bmlxdWVf
cHRyIGZvciBvYmplY3QgbGlmZXRpbWUuIEdldCByaWQgb2YKKyAgICAgICAgZGVsZXRlQWxsVmFs
dWVzIG5vdyB0aGF0IGl0IGlzIG5vIGxvbmVyIG5lZWRlZC4gVXNlIHJhbmdlZCBmb3IKKyAgICAg
ICAgbG9vcHMgd2hlcmUgcG9zc2libGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vV0NEYXRh
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldDRW51bUZvcm1hdEV0Yzo6V0NFbnVtRm9y
bWF0RXRjKToKKyAgICAgICAgKFdlYkNvcmU6OldDRGF0YU9iamVjdDo6fldDRGF0YU9iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpXQ0RhdGFPYmplY3Q6OkdldERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6V0NEYXRhT2JqZWN0OjpRdWVyeUdldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V0NE
YXRhT2JqZWN0OjpTZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldDRGF0YU9iamVjdDo6Y2xl
YXJEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0Lmg6CisKIDIwMTQt
MDQtMTQgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmRlckxh
eWVyQ29tcG9zaXRvcidzIG1fbGF5ZXJGb3JPdmVyaGFuZ0FyZWFzIHNob3VsZCBiZSBvZmZzZXQg
YnkgdGhlIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dDRGF0YU9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dDRGF0YU9iamVj
dC5jcHAJKHJldmlzaW9uIDE2NzI3MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9X
Q0RhdGFPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA3LCAyMDE0IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgV0NF
bnVtRm9ybWF0RXRjIDogcHVibGljIElFbnVtRk9STQogewogcHVibGljOgogICAgIFdDRW51bUZv
cm1hdEV0Yyhjb25zdCBWZWN0b3I8Rk9STUFURVRDPiYgZm9ybWF0cyk7Ci0gICAgV0NFbnVtRm9y
bWF0RXRjKGNvbnN0IFZlY3RvcjxGT1JNQVRFVEMqPiYgZm9ybWF0cyk7CisgICAgV0NFbnVtRm9y
bWF0RXRjKGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Rk9STUFURVRDPj4mIGZvcm1hdHMp
OwogCiAgICAgLy9JVW5rbm93biBtZW1iZXJzCiAgICAgU1RETUVUSE9EKFF1ZXJ5SW50ZXJmYWNl
KShSRUZJSUQsIHZvaWQqKik7CkBAIC02NSwxMiArNjUsMTIgQEAgV0NFbnVtRm9ybWF0RXRjOjpX
Q0VudW1Gb3JtYXRFdGMoY29uc3QgVgogICAgICAgICBtX2Zvcm1hdHMuYXBwZW5kKGZvcm1hdHNb
aV0pOwogfQogCi1XQ0VudW1Gb3JtYXRFdGM6OldDRW51bUZvcm1hdEV0Yyhjb25zdCBWZWN0b3I8
Rk9STUFURVRDKj4mIGZvcm1hdHMpCi06IG1fcmVmKDEpCi0sIG1fY3VycmVudCgwKQorV0NFbnVt
Rm9ybWF0RXRjOjpXQ0VudW1Gb3JtYXRFdGMoY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxG
T1JNQVRFVEM+PiYgZm9ybWF0cykKKyAgICA6IG1fcmVmKDEpCisgICAgLCBtX2N1cnJlbnQoMCkK
IHsKLSAgICBmb3Ioc2l6ZV90IGkgPSAwOyBpIDwgZm9ybWF0cy5zaXplKCk7ICsraSkKLSAgICAg
ICAgbV9mb3JtYXRzLmFwcGVuZCgqZm9ybWF0c1tpXSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBm
b3JtYXQgOiBmb3JtYXRzKQorICAgICAgICBtX2Zvcm1hdHMuYXBwZW5kKCpmb3JtYXQpOwogfQog
CiBTVERNRVRIT0RJTVAgIFdDRW51bUZvcm1hdEV0Yzo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJp
aWQsIHZvaWQqKiBwcHZPYmplY3QpCkBAIC0xODAsMTEgKzE4MCw4IEBAIFdDRGF0YU9iamVjdDo6
V0NEYXRhT2JqZWN0KCkKIAogV0NEYXRhT2JqZWN0Ojp+V0NEYXRhT2JqZWN0KCkKIHsKLSAgICBm
b3Ioc2l6ZV90IGkgPSAwOyBpIDwgbV9tZWRpdW0uc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgUmVs
ZWFzZVN0Z01lZGl1bShtX21lZGl1bVtpXSk7Ci0gICAgICAgIGRlbGV0ZSBtX21lZGl1bVtpXTsK
LSAgICB9Ci0gICAgV1RGOjpkZXByZWNhdGVkRGVsZXRlQWxsVmFsdWVzKG1fZm9ybWF0cyk7Cisg
ICAgZm9yIChhdXRvJiBtZWRpdW0gOiBtX21lZGl1bSkKKyAgICAgICAgUmVsZWFzZVN0Z01lZGl1
bShtZWRpdW0uZ2V0KCkpOwogfQogCiBTVERNRVRIT0RJTVAgV0NEYXRhT2JqZWN0OjpRdWVyeUlu
dGVyZmFjZShSRUZJSUQgcmlpZCx2b2lkKiogcHB2T2JqZWN0KQpAQCAtMjIwLDEyICsyMTcsMTIg
QEAgU1RETUVUSE9ESU1QIFdDRGF0YU9iamVjdDo6R2V0RGF0YShGT1JNQQogICAgICAgICByZXR1
cm4gRV9QT0lOVEVSOwogICAgIHBtZWRpdW0tPmhHbG9iYWwgPSAwOwogCi0gICAgZm9yKHNpemVf
dCBpPTA7IGkgPCBtX2Zvcm1hdHMuc2l6ZSgpOyArK2kpIHsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fZm9ybWF0cy5zaXplKCk7ICsraSkgewogICAgICAgICBpZigvKnBmb3JtYXRldGNJ
bi0+dHltZWQgJiBtX2Zvcm1hdHNbaV0tPnR5bWVkICYmKi8gICAgIC8vIHR5bWVkIGNhbiBiZSAw
IChUWU1FRF9OVUxMKSAtIGJ1dCBpdCBjYW4gaGF2ZSBhIG1lZGl1bSB0aGF0IGNvbnRhaW5zIGFu
IHBVbmtGb3JSZWxlYXNlCiAgICAgICAgICAgICBwZm9ybWF0ZXRjSW4tPmxpbmRleCA9PSBtX2Zv
cm1hdHNbaV0tPmxpbmRleCAmJgogICAgICAgICAgICAgcGZvcm1hdGV0Y0luLT5kd0FzcGVjdCA9
PSBtX2Zvcm1hdHNbaV0tPmR3QXNwZWN0ICYmCiAgICAgICAgICAgICBwZm9ybWF0ZXRjSW4tPmNm
Rm9ybWF0ID09IG1fZm9ybWF0c1tpXS0+Y2ZGb3JtYXQpIHsKLSAgICAgICAgICAgIENvcHlNZWRp
dW0ocG1lZGl1bSwgbV9tZWRpdW1baV0sIG1fZm9ybWF0c1tpXSk7CisgICAgICAgICAgICBDb3B5
TWVkaXVtKHBtZWRpdW0sIG1fbWVkaXVtW2ldLmdldCgpLCBtX2Zvcm1hdHNbaV0uZ2V0KCkpOwog
ICAgICAgICAgICAgcmV0dXJuIFNfT0s7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNDUsMTIgKzI0
MiwxMiBAQCBTVERNRVRIT0RJTVAgV0NEYXRhT2JqZWN0OjpRdWVyeUdldERhdGEoCiAgICAgaWYg
KCEoRFZBU1BFQ1RfQ09OVEVOVCAmIHBmb3JtYXRldGMtPmR3QXNwZWN0KSkKICAgICAgICAgcmV0
dXJuIChEVl9FX0RWQVNQRUNUKTsKICAgICBIUkVTVUxUICBociA9IERWX0VfVFlNRUQ7Ci0gICAg
Zm9yKHNpemVfdCBpID0gMDsgaSA8IG1fZm9ybWF0cy5zaXplKCk7ICsraSkgewotICAgICAgICBp
ZihwZm9ybWF0ZXRjLT50eW1lZCAmIG1fZm9ybWF0c1tpXS0+dHltZWQpIHsKLSAgICAgICAgICAg
IGlmKHBmb3JtYXRldGMtPmNmRm9ybWF0ID09IG1fZm9ybWF0c1tpXS0+Y2ZGb3JtYXQpCisgICAg
Zm9yIChjb25zdCBhdXRvJiBmb3JtYXQgOiBtX2Zvcm1hdHMpIHsKKyAgICAgICAgaWYgKHBmb3Jt
YXRldGMtPnR5bWVkICYgZm9ybWF0LT50eW1lZCkgeworICAgICAgICAgICAgaWYgKHBmb3JtYXRl
dGMtPmNmRm9ybWF0ID09IGZvcm1hdC0+Y2ZGb3JtYXQpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IFNfT0s7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaHIgPSBEVl9FX0NMSVBG
T1JNQVQ7CisKKyAgICAgICAgICAgIGhyID0gRFZfRV9DTElQRk9STUFUOwogICAgICAgICB9CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIGhyID0gRFZfRV9UWU1FRDsKQEAgLTI2OCwyOCArMjY1
LDI1IEBAIFNURE1FVEhPRElNUCBXQ0RhdGFPYmplY3Q6OlNldERhdGEoRk9STUEKICAgICBpZigh
cGZvcm1hdGV0YyB8fCAhcG1lZGl1bSkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAg
IEZPUk1BVEVUQyogZmV0Yz1uZXcgRk9STUFURVRDOworICAgIHN0ZDo6dW5pcXVlX3B0cjxGT1JN
QVRFVEM+IGZldGMgPSBzdGQ6Om1ha2VfdW5pcXVlPEZPUk1BVEVUQz4oKTsKICAgICBpZiAoIWZl
dGMpCiAgICAgICAgIHJldHVybiBFX09VVE9GTUVNT1JZOwogCi0gICAgU1RHTUVESVVNKiBwU3Rn
TWVkID0gbmV3IFNUR01FRElVTTsKLQotICAgIGlmKCFwU3RnTWVkKSB7Ci0gICAgICAgIGRlbGV0
ZSBmZXRjOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTVEdNRURJVU0+IHBTdGdNZWQgPSBzdGQ6Om1h
a2VfdW5pcXVlPFNUR01FRElVTT4oKTsKKyAgICBpZiAoIXBTdGdNZWQpCiAgICAgICAgIHJldHVy
biBFX09VVE9GTUVNT1JZOwotICAgIH0KIAotICAgIFplcm9NZW1vcnkoZmV0YyxzaXplb2YoRk9S
TUFURVRDKSk7Ci0gICAgWmVyb01lbW9yeShwU3RnTWVkLHNpemVvZihTVEdNRURJVU0pKTsKKyAg
ICBaZXJvTWVtb3J5KGZldGMuZ2V0KCksIHNpemVvZihGT1JNQVRFVEMpKTsKKyAgICBaZXJvTWVt
b3J5KHBTdGdNZWQuZ2V0KCksIHNpemVvZihTVEdNRURJVU0pKTsKIAogICAgICpmZXRjID0gKnBm
b3JtYXRldGM7Ci0gICAgbV9mb3JtYXRzLmFwcGVuZChmZXRjKTsKKyAgICBtX2Zvcm1hdHMuYXBw
ZW5kKHN0ZDo6bW92ZShmZXRjKSk7CiAKICAgICBpZihmUmVsZWFzZSkKICAgICAgICAgKnBTdGdN
ZWQgPSAqcG1lZGl1bTsKICAgICBlbHNlCi0gICAgICAgIENvcHlNZWRpdW0ocFN0Z01lZCwgcG1l
ZGl1bSwgcGZvcm1hdGV0Yyk7Ci0gICAgbV9tZWRpdW0uYXBwZW5kKHBTdGdNZWQpOworICAgICAg
ICBDb3B5TWVkaXVtKHBTdGdNZWQuZ2V0KCksIHBtZWRpdW0sIHBmb3JtYXRldGMpOworICAgIG1f
bWVkaXVtLmFwcGVuZChzdGQ6Om1vdmUocFN0Z01lZCkpOwogCiAgICAgcmV0dXJuIFNfT0s7CiB9
CkBAIC0zNzYsMTcgKzM3MCwxNCBAQCB2b2lkIFdDRGF0YU9iamVjdDo6Y2xlYXJEYXRhKENMSVBG
T1JNQVQKICAgICBzaXplX3QgcHRyID0gMDsKICAgICB3aGlsZSAocHRyIDwgbV9mb3JtYXRzLnNp
emUoKSkgewogICAgICAgICBpZiAobV9mb3JtYXRzW3B0cl0tPmNmRm9ybWF0ID09IGZvcm1hdCkg
ewotICAgICAgICAgICAgRk9STUFURVRDKiBjdXJyZW50ID0gbV9mb3JtYXRzW3B0cl07Ci0gICAg
ICAgICAgICBtX2Zvcm1hdHNbcHRyXSA9IG1fZm9ybWF0c1ttX2Zvcm1hdHMuc2l6ZSgpIC0gMV07
Ci0gICAgICAgICAgICBtX2Zvcm1hdHNbbV9mb3JtYXRzLnNpemUoKSAtIDFdID0gMDsKKyAgICAg
ICAgICAgIG1fZm9ybWF0c1twdHJdID0gc3RkOjptb3ZlKG1fZm9ybWF0c1ttX2Zvcm1hdHMuc2l6
ZSgpIC0gMV0pOworICAgICAgICAgICAgbV9mb3JtYXRzW21fZm9ybWF0cy5zaXplKCkgLSAxXSA9
IG51bGxwdHI7CiAgICAgICAgICAgICBtX2Zvcm1hdHMucmVtb3ZlTGFzdCgpOwotICAgICAgICAg
ICAgZGVsZXRlIGN1cnJlbnQ7Ci0gICAgICAgICAgICBTVEdNRURJVU0qIG1lZGl1bSA9IG1fbWVk
aXVtW3B0cl07Ci0gICAgICAgICAgICBtX21lZGl1bVtwdHJdID0gbV9tZWRpdW1bbV9tZWRpdW0u
c2l6ZSgpIC0gMV07CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U1RHTUVESVVNPiBtZWRp
dW0gPSBzdGQ6Om1vdmUobV9tZWRpdW1bcHRyXSk7CisgICAgICAgICAgICBtX21lZGl1bVtwdHJd
ID0gc3RkOjptb3ZlKG1fbWVkaXVtW21fbWVkaXVtLnNpemUoKSAtIDFdKTsKICAgICAgICAgICAg
IG1fbWVkaXVtW21fbWVkaXVtLnNpemUoKSAtIDFdID0gMDsKICAgICAgICAgICAgIG1fbWVkaXVt
LnJlbW92ZUxhc3QoKTsKLSAgICAgICAgICAgIFJlbGVhc2VTdGdNZWRpdW0obWVkaXVtKTsKLSAg
ICAgICAgICAgIGRlbGV0ZSBtZWRpdW07CisgICAgICAgICAgICBSZWxlYXNlU3RnTWVkaXVtKG1l
ZGl1bS5nZXQoKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBw
dHIrKzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmgJ
KHJldmlzaW9uIDE2NzI3MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XQ0RhdGFP
YmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAxNCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Miw4ICs2Miw4IEBAIHByaXZhdGU6CiAgICAgV0NE
YXRhT2JqZWN0KCk7CiAgICAgdmlydHVhbCB+V0NEYXRhT2JqZWN0KCk7CiAgICAgbG9uZyBtX3Jl
ZjsKLSAgICBWZWN0b3I8Rk9STUFURVRDKj4gbV9mb3JtYXRzOwotICAgIFZlY3RvcjxTVEdNRURJ
VU0qPiBtX21lZGl1bTsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEZPUk1BVEVUQz4+IG1f
Zm9ybWF0czsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFNUR01FRElVTT4+IG1fbWVkaXVt
OwogfTsKIAogfQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0No
YW5nZUxvZwkocmV2aXNpb24gMTY3MjcyKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMzUgQEAKKzIwMTQtMDQtMTQgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hh
bUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dpbl0gRWxpbWluYXRlIHVzZSBvZiBkZWxldGVBbGxW
YWx1ZXMgaW4gV2luZG93cyBGaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTMxNjMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgU3dpdGNoIHRvIHN0ZDo6dW5pcXVlX3B0ciBmb3IgbWVtb3J5IGxpZmV0
aW1lLiBHZXQgcmlkIG9mCisgICAgICAgIGRlbGV0ZUFsbFZhbHVlcyBub3cgdGhhdCBpdCBpcyBu
byBsb25nZXIgbmVlZGVkLiBVc2UgcmFuZ2VkCisgICAgICAgIGZvciBsb29wcyB3aGVyZSBwb3Nz
aWJsZS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmNwcDoK
KyAgICAgICAgKFdDRW51bUZvcm1hdEV0Yzo6V0NFbnVtRm9ybWF0RXRjKToKKyAgICAgICAgKERS
VERhdGFPYmplY3Q6On5EUlREYXRhT2JqZWN0KToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6Okdl
dERhdGEpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6UXVlcnlHZXREYXRhKToKKyAgICAgICAg
KERSVERhdGFPYmplY3Q6OlNldERhdGEpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6Y2xlYXJE
YXRhKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVjdC5oOgorICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9VSURlbGVnYXRlLmNwcDoKKyAgICAgICAgKERSVFVu
ZG9PYmplY3Q6OkRSVFVuZG9PYmplY3QpOgorICAgICAgICAoRFJUVW5kb09iamVjdDo6fkRSVFVu
ZG9PYmplY3QpOgorICAgICAgICAoRFJUVW5kb1N0YWNrOjp+RFJUVW5kb1N0YWNrKToKKyAgICAg
ICAgKERSVFVuZG9TdGFjazo6Y2xlYXIpOgorICAgICAgICAoRFJUVW5kb1N0YWNrOjpwb3ApOgor
ICAgICAgICAoRFJUVW5kb01hbmFnZXI6OkRSVFVuZG9NYW5hZ2VyKToKKyAgICAgICAgKERSVFVu
ZG9NYW5hZ2VyOjpyZWRvKToKKyAgICAgICAgKERSVFVuZG9NYW5hZ2VyOjp1bmRvKToKKyAgICAg
ICAgKFVJRGVsZWdhdGU6OlVJRGVsZWdhdGUpOgorICAgICAgICAoVUlEZWxlZ2F0ZTo6cmVzZXRV
bmRvTWFuYWdlcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL1VJRGVsZWdhdGUuaDoK
KwogMjAxNC0wNC0xNCAgSm96c2VmIEJlcnRhICA8amJlcnRhLnUtc3plZ2VkQHBhcnRuZXIuc2Ft
c3VuZy5jb20+CiAKICAgICAgICAgRml4IGNvbW1pdC1sb2ctZWRpdG9yIGJ1ZyByZXZlYWxlZCBi
eSByMTY1NDQ3CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3Qu
Y3BwCShyZXZpc2lvbiAxNjcyNzIpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0
YU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMTQgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAxMiBCYWlkdSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtNTAsNyArNTAsNyBAQCBGT1JNQVRFVEMqIGNmVXJsV0Zvcm1hdCgpCiBj
bGFzcyBXQ0VudW1Gb3JtYXRFdGMgOiBwdWJsaWMgSUVudW1GT1JNQVRFVEMgewogcHVibGljOgog
ICAgIGV4cGxpY2l0IFdDRW51bUZvcm1hdEV0Yyhjb25zdCBWZWN0b3I8Rk9STUFURVRDPiYgZm9y
bWF0cyk7Ci0gICAgZXhwbGljaXQgV0NFbnVtRm9ybWF0RXRjKGNvbnN0IFZlY3RvcjxGT1JNQVRF
VEMqPiYgZm9ybWF0cyk7CisgICAgZXhwbGljaXQgV0NFbnVtRm9ybWF0RXRjKGNvbnN0IFZlY3Rv
cjxzdGQ6OnVuaXF1ZV9wdHI8Rk9STUFURVRDPj4mIGZvcm1hdHMpOwogCiAgICAgLy8gSVVua25v
d24gbWVtYmVycwogICAgIFNURE1FVEhPRChRdWVyeUludGVyZmFjZSkoUkVGSUlELCB2b2lkKiop
OwpAQCAtNzYsMTIgKzc2LDEyIEBAIFdDRW51bUZvcm1hdEV0Yzo6V0NFbnVtRm9ybWF0RXRjKGNv
bnN0IFYKIHsKIH0KIAotV0NFbnVtRm9ybWF0RXRjOjpXQ0VudW1Gb3JtYXRFdGMoY29uc3QgVmVj
dG9yPEZPUk1BVEVUQyo+JiBmb3JtYXRzKQorV0NFbnVtRm9ybWF0RXRjOjpXQ0VudW1Gb3JtYXRF
dGMoY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxGT1JNQVRFVEM+PiYgZm9ybWF0cykKICAg
ICA6IG1fcmVmKDEpCiAgICAgLCBtX2N1cnJlbnQoMCkKIHsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGZvcm1hdHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fZm9ybWF0cy5hcHBlbmQoKmZv
cm1hdHNbaV0pOworICAgIGZvciAoY29uc3QgYXV0byYgZm9ybWF0IDogZm9ybWF0cykKKyAgICAg
ICAgbV9mb3JtYXRzLmFwcGVuZCgqZm9ybWF0KTsKIH0KIAogU1RETUVUSE9ESU1QIFdDRW51bUZv
cm1hdEV0Yzo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpCkBA
IC0xNzcsMTEgKzE3Nyw4IEBAIERSVERhdGFPYmplY3Q6OkRSVERhdGFPYmplY3QoKQogCiBEUlRE
YXRhT2JqZWN0Ojp+RFJURGF0YU9iamVjdCgpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX21lZGl1bS5zaXplKCk7ICsraSkgewotICAgICAgICBSZWxlYXNlU3RnTWVkaXVtKG1fbWVk
aXVtW2ldKTsKLSAgICAgICAgZGVsZXRlIG1fbWVkaXVtW2ldOwotICAgIH0KLSAgICBXVEY6OmRl
cHJlY2F0ZWREZWxldGVBbGxWYWx1ZXMobV9mb3JtYXRzKTsKKyAgICBmb3IgKGF1dG8mIG1lZGl1
bSA6IG1fbWVkaXVtKQorICAgICAgICBSZWxlYXNlU3RnTWVkaXVtKG1lZGl1bS5nZXQoKSk7CiB9
CiAKIFNURE1FVEhPRElNUCBEUlREYXRhT2JqZWN0OjpRdWVyeUludGVyZmFjZShSRUZJSUQgcmlp
ZCwgdm9pZCoqIHBwdk9iamVjdCkKQEAgLTIxOCw3ICsyMTUsNyBAQCBTVERNRVRIT0RJTVAgRFJU
RGF0YU9iamVjdDo6R2V0RGF0YShGT1JNCiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
Zm9ybWF0cy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAocGZvcm1hdGV0Y0luLT5saW5kZXgg
PT0gbV9mb3JtYXRzW2ldLT5saW5kZXggJiYgcGZvcm1hdGV0Y0luLT5kd0FzcGVjdCA9PSBtX2Zv
cm1hdHNbaV0tPmR3QXNwZWN0ICYmIHBmb3JtYXRldGNJbi0+Y2ZGb3JtYXQgPT0gbV9mb3JtYXRz
W2ldLT5jZkZvcm1hdCkgewotICAgICAgICAgICAgQ29weU1lZGl1bShwbWVkaXVtLCBtX21lZGl1
bVtpXSwgbV9mb3JtYXRzW2ldKTsKKyAgICAgICAgICAgIENvcHlNZWRpdW0ocG1lZGl1bSwgbV9t
ZWRpdW1baV0uZ2V0KCksIG1fZm9ybWF0c1tpXS5nZXQoKSk7CiAgICAgICAgICAgICByZXR1cm4g
U19PSzsKICAgICAgICAgfQogICAgIH0KQEAgLTIzOCw5ICsyMzUsOSBAQCBTVERNRVRIT0RJTVAg
RFJURGF0YU9iamVjdDo6UXVlcnlHZXREYXRhCiAgICAgaWYgKCEoRFZBU1BFQ1RfQ09OVEVOVCAm
IHBmb3JtYXRldGMtPmR3QXNwZWN0KSkKICAgICAgICAgcmV0dXJuIChEVl9FX0RWQVNQRUNUKTsK
IAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mb3JtYXRzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIGlmIChwZm9ybWF0ZXRjLT50eW1lZCAmIG1fZm9ybWF0c1tpXS0+dHltZWQpIHsKLSAg
ICAgICAgICAgIGlmIChwZm9ybWF0ZXRjLT5jZkZvcm1hdCA9PSBtX2Zvcm1hdHNbaV0tPmNmRm9y
bWF0KQorICAgIGZvciAoY29uc3QgYXV0byYgZm9ybWF0IDogbV9mb3JtYXRzKSB7CisgICAgICAg
IGlmIChwZm9ybWF0ZXRjLT50eW1lZCAmIGZvcm1hdC0+dHltZWQpIHsKKyAgICAgICAgICAgIGlm
IChwZm9ybWF0ZXRjLT5jZkZvcm1hdCA9PSBmb3JtYXQtPmNmRm9ybWF0KQogICAgICAgICAgICAg
ICAgIHJldHVybiBTX09LOwogICAgICAgICB9CiAgICAgfQpAQCAtMjU3LDI4ICsyNTQsMjUgQEAg
U1RETUVUSE9ESU1QIERSVERhdGFPYmplY3Q6OlNldERhdGEoRk9STQogICAgIGlmICghcGZvcm1h
dGV0YyB8fCAhcG1lZGl1bSkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIEZPUk1B
VEVUQyogZm9ybWF0ZXRjID0gbmV3IEZPUk1BVEVUQzsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Rk9S
TUFURVRDPiBmb3JtYXRldGMgPSBzdGQ6Om1ha2VfdW5pcXVlPEZPUk1BVEVUQz4oKTsKICAgICBp
ZiAoIWZvcm1hdGV0YykKICAgICAgICAgcmV0dXJuIEVfT1VUT0ZNRU1PUlk7CiAKLSAgICBTVEdN
RURJVU0qIHBTdGdNZWQgPSBuZXcgU1RHTUVESVVNOwotCi0gICAgaWYgKCFwU3RnTWVkKSB7Ci0g
ICAgICAgIGRlbGV0ZSBmb3JtYXRldGM7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNUR01FRElVTT4g
cFN0Z01lZCA9IHN0ZDo6bWFrZV91bmlxdWU8U1RHTUVESVVNPigpOworICAgIGlmICghcFN0Z01l
ZCkKICAgICAgICAgcmV0dXJuIEVfT1VUT0ZNRU1PUlk7Ci0gICAgfQogCi0gICAgWmVyb01lbW9y
eShmb3JtYXRldGMsIHNpemVvZihGT1JNQVRFVEMpKTsKLSAgICBaZXJvTWVtb3J5KHBTdGdNZWQs
IHNpemVvZihTVEdNRURJVU0pKTsKKyAgICBaZXJvTWVtb3J5KGZvcm1hdGV0Yy5nZXQoKSwgc2l6
ZW9mKEZPUk1BVEVUQykpOworICAgIFplcm9NZW1vcnkocFN0Z01lZC5nZXQoKSwgc2l6ZW9mKFNU
R01FRElVTSkpOwogCiAgICAgKmZvcm1hdGV0YyA9ICpwZm9ybWF0ZXRjOwotICAgIG1fZm9ybWF0
cy5hcHBlbmQoZm9ybWF0ZXRjKTsKKyAgICBtX2Zvcm1hdHMuYXBwZW5kKHN0ZDo6bW92ZShmb3Jt
YXRldGMpKTsKIAogICAgIGlmIChmUmVsZWFzZSkKICAgICAgICAgKnBTdGdNZWQgPSAqcG1lZGl1
bTsKICAgICBlbHNlCi0gICAgICAgIENvcHlNZWRpdW0ocFN0Z01lZCwgcG1lZGl1bSwgcGZvcm1h
dGV0Yyk7Ci0gICAgbV9tZWRpdW0uYXBwZW5kKHBTdGdNZWQpOworICAgICAgICBDb3B5TWVkaXVt
KHBTdGdNZWQuZ2V0KCksIHBtZWRpdW0sIHBmb3JtYXRldGMpOworICAgIG1fbWVkaXVtLmFwcGVu
ZChzdGQ6Om1vdmUocFN0Z01lZCkpOwogCiAgICAgcmV0dXJuIFNfT0s7CiB9CkBAIC0zNjMsMTcg
KzM1NywxNCBAQCB2b2lkIERSVERhdGFPYmplY3Q6OmNsZWFyRGF0YShDTElQRk9STUFUCiAgICAg
c2l6ZV90IHBvc2l0aW9uID0gMDsKICAgICB3aGlsZSAocG9zaXRpb24gPCBtX2Zvcm1hdHMuc2l6
ZSgpKSB7CiAgICAgICAgIGlmIChtX2Zvcm1hdHNbcG9zaXRpb25dLT5jZkZvcm1hdCA9PSBmb3Jt
YXQpIHsKLSAgICAgICAgICAgIEZPUk1BVEVUQyogY3VycmVudCA9IG1fZm9ybWF0c1twb3NpdGlv
bl07Ci0gICAgICAgICAgICBtX2Zvcm1hdHNbcG9zaXRpb25dID0gbV9mb3JtYXRzW21fZm9ybWF0
cy5zaXplKCkgLSAxXTsKLSAgICAgICAgICAgIG1fZm9ybWF0c1ttX2Zvcm1hdHMuc2l6ZSgpIC0g
MV0gPSAwOworICAgICAgICAgICAgbV9mb3JtYXRzW3Bvc2l0aW9uXSA9IHN0ZDo6bW92ZShtX2Zv
cm1hdHNbbV9mb3JtYXRzLnNpemUoKSAtIDFdKTsKKyAgICAgICAgICAgIG1fZm9ybWF0c1ttX2Zv
cm1hdHMuc2l6ZSgpIC0gMV0gPSBudWxscHRyOwogICAgICAgICAgICAgbV9mb3JtYXRzLnJlbW92
ZUxhc3QoKTsKLSAgICAgICAgICAgIGRlbGV0ZSBjdXJyZW50OwotICAgICAgICAgICAgU1RHTUVE
SVVNKiBtZWRpdW0gPSBtX21lZGl1bVtwb3NpdGlvbl07Ci0gICAgICAgICAgICBtX21lZGl1bVtw
b3NpdGlvbl0gPSBtX21lZGl1bVttX21lZGl1bS5zaXplKCkgLSAxXTsKLSAgICAgICAgICAgIG1f
bWVkaXVtW21fbWVkaXVtLnNpemUoKSAtIDFdID0gMDsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxTVEdNRURJVU0+IG1lZGl1bSA9IHN0ZDo6bW92ZShtX21lZGl1bVtwb3NpdGlvbl0pOwor
ICAgICAgICAgICAgbV9tZWRpdW1bcG9zaXRpb25dID0gc3RkOjptb3ZlKG1fbWVkaXVtW21fbWVk
aXVtLnNpemUoKSAtIDFdKTsKKyAgICAgICAgICAgIG1fbWVkaXVtW21fbWVkaXVtLnNpemUoKSAt
IDFdID0gbnVsbHB0cjsKICAgICAgICAgICAgIG1fbWVkaXVtLnJlbW92ZUxhc3QoKTsKLSAgICAg
ICAgICAgIFJlbGVhc2VTdGdNZWRpdW0obWVkaXVtKTsKLSAgICAgICAgICAgIGRlbGV0ZSBtZWRp
dW07CisgICAgICAgICAgICBSZWxlYXNlU3RnTWVkaXVtKG1lZGl1bS5nZXQoKSk7CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBwb3NpdGlvbisrOwpJbmRleDogVG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9EdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVjdC5oCShyZXZpc2lvbiAxNjcyNzIpCisr
KyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDE0IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQmFpZHUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTY0LDggKzY0LDgg
QEAgcHJpdmF0ZToKICAgICBEUlREYXRhT2JqZWN0KCk7CiAgICAgfkRSVERhdGFPYmplY3QoKTsK
ICAgICBsb25nIG1fcmVmOwotICAgIFZlY3RvcjxGT1JNQVRFVEMqPiBtX2Zvcm1hdHM7Ci0gICAg
VmVjdG9yPFNUR01FRElVTSo+IG1fbWVkaXVtOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
Rk9STUFURVRDPj4gbV9mb3JtYXRzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U1RHTUVE
SVVNPj4gbV9tZWRpdW07CiB9OwogCiAjZW5kaWYgLy8gRFJURGF0YU9iamVjdF9oCkluZGV4OiBU
b29scy9EdW1wUmVuZGVyVHJlZS93aW4vVUlEZWxlZ2F0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL1VJRGVsZWdhdGUuY3BwCShyZXZpc2lvbiAxNjcyNzIpCisr
KyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vVUlEZWxlZ2F0ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJUZXN0UnVubmVyLmgiCiAjaW5jbHVkZSA8V2Vi
Q29yZS9DT01QdHIuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CkBA
IC01MSwxNCArNTAsMTMgQEAgY2xhc3MgRFJUVW5kb09iamVjdCB7CiBwdWJsaWM6CiAgICAgRFJU
VW5kb09iamVjdChJV2ViVW5kb1RhcmdldCogdGFyZ2V0LCBCU1RSIGFjdGlvbk5hbWUsIElVbmtu
b3duKiBvYmopCiAgICAgICAgIDogbV90YXJnZXQodGFyZ2V0KQotICAgICAgICAsIG1fYWN0aW9u
TmFtZShTeXNBbGxvY1N0cmluZyhhY3Rpb25OYW1lKSkKKyAgICAgICAgLCBtX2FjdGlvbk5hbWUo
YWN0aW9uTmFtZSkKICAgICAgICAgLCBtX29iaihvYmopCiAgICAgewogICAgIH0KIAogICAgIH5E
UlRVbmRvT2JqZWN0KCkKICAgICB7Ci0gICAgICAgIFN5c0ZyZWVTdHJpbmcobV9hY3Rpb25OYW1l
KTsKICAgICB9CiAKICAgICB2b2lkIGludm9rZSgpCkBAIC02OCwyMiArNjYsMjIgQEAgcHVibGlj
OgogCiBwcml2YXRlOgogICAgIElXZWJVbmRvVGFyZ2V0KiBtX3RhcmdldDsKLSAgICBCU1RSIG1f
YWN0aW9uTmFtZTsKKyAgICBfYnN0cl90IG1fYWN0aW9uTmFtZTsKICAgICBDT01QdHI8SVVua25v
d24+IG1fb2JqOwogfTsKIAogY2xhc3MgRFJUVW5kb1N0YWNrIHsKIHB1YmxpYzoKLSAgICB+RFJU
VW5kb1N0YWNrKCkgeyBkZXByZWNhdGVkRGVsZXRlQWxsVmFsdWVzKG1fdW5kb1ZlY3Rvcik7IH0K
KyAgICB+RFJUVW5kb1N0YWNrKCkgeyB9CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJl
dHVybiBtX3VuZG9WZWN0b3IuaXNFbXB0eSgpOyB9Ci0gICAgdm9pZCBjbGVhcigpIHsgZGVwcmVj
YXRlZERlbGV0ZUFsbFZhbHVlcyhtX3VuZG9WZWN0b3IpOyBtX3VuZG9WZWN0b3IuY2xlYXIoKTsg
fQorICAgIHZvaWQgY2xlYXIoKSB7IG1fdW5kb1ZlY3Rvci5jbGVhcigpOyB9CiAKICAgICB2b2lk
IHB1c2goRFJUVW5kb09iamVjdCogdW5kb09iamVjdCkgeyBtX3VuZG9WZWN0b3IuYXBwZW5kKHVu
ZG9PYmplY3QpOyB9Ci0gICAgRFJUVW5kb09iamVjdCogcG9wKCkgeyBEUlRVbmRvT2JqZWN0KiB0
b3AgPSBtX3VuZG9WZWN0b3IubGFzdCgpOyBtX3VuZG9WZWN0b3IucmVtb3ZlTGFzdCgpOyByZXR1
cm4gdG9wOyB9CisgICAgc3RkOjp1bmlxdWVfcHRyPERSVFVuZG9PYmplY3Q+IHBvcCgpIHsgc3Rk
Ojp1bmlxdWVfcHRyPERSVFVuZG9PYmplY3Q+IHRvcCA9IHN0ZDo6bW92ZShtX3VuZG9WZWN0b3Iu
bGFzdCgpKTsgbV91bmRvVmVjdG9yLnJlbW92ZUxhc3QoKTsgcmV0dXJuIHN0ZDo6bW92ZSh0b3Ap
OyB9CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9yPERSVFVuZG9PYmplY3QqPiBtX3VuZG9WZWN0b3I7
CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxEUlRVbmRvT2JqZWN0Pj4gbV91bmRvVmVjdG9y
OwogfTsKIAogY2xhc3MgRFJUVW5kb01hbmFnZXIgewpAQCAtOTgsMTUgKzk2LDE1IEBAIHB1Ymxp
YzoKICAgICBib29sIGNhblVuZG8oKSB7IHJldHVybiAhbV91bmRvU3RhY2stPmlzRW1wdHkoKTsg
fQogCiBwcml2YXRlOgotICAgIE93blB0cjxEUlRVbmRvU3RhY2s+IG1fcmVkb1N0YWNrOwotICAg
IE93blB0cjxEUlRVbmRvU3RhY2s+IG1fdW5kb1N0YWNrOworICAgIHN0ZDo6dW5pcXVlX3B0cjxE
UlRVbmRvU3RhY2s+IG1fcmVkb1N0YWNrOworICAgIHN0ZDo6dW5pcXVlX3B0cjxEUlRVbmRvU3Rh
Y2s+IG1fdW5kb1N0YWNrOwogICAgIGJvb2wgbV9pc1JlZG9pbmc7CiAgICAgYm9vbCBtX2lzVW5k
b2luZzsKIH07CiAKIERSVFVuZG9NYW5hZ2VyOjpEUlRVbmRvTWFuYWdlcigpCi0gICAgOiBtX3Jl
ZG9TdGFjayhhZG9wdFB0cihuZXcgRFJUVW5kb1N0YWNrKSkKLSAgICAsIG1fdW5kb1N0YWNrKGFk
b3B0UHRyKG5ldyBEUlRVbmRvU3RhY2spKQorICAgIDogbV9yZWRvU3RhY2soc3RkOjptYWtlX3Vu
aXF1ZTxEUlRVbmRvU3RhY2s+KCkpCisgICAgLCBtX3VuZG9TdGFjayhzdGQ6Om1ha2VfdW5pcXVl
PERSVFVuZG9TdGFjaz4oKSkKICAgICAsIG1faXNSZWRvaW5nKGZhbHNlKQogICAgICwgbV9pc1Vu
ZG9pbmcoZmFsc2UpCiB7CkBAIC0xMzQsOSArMTMyLDggQEAgdm9pZCBEUlRVbmRvTWFuYWdlcjo6
cmVkbygpCiAKICAgICBtX2lzUmVkb2luZyA9IHRydWU7CiAKLSAgICBEUlRVbmRvT2JqZWN0KiBy
ZWRvT2JqZWN0ID0gbV9yZWRvU3RhY2stPnBvcCgpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxEUlRV
bmRvT2JqZWN0PiByZWRvT2JqZWN0ID0gbV9yZWRvU3RhY2stPnBvcCgpOwogICAgIHJlZG9PYmpl
Y3QtPmludm9rZSgpOwotICAgIGRlbGV0ZSByZWRvT2JqZWN0OwogCiAgICAgbV9pc1JlZG9pbmcg
PSBmYWxzZTsKIH0KQEAgLTE0OCwxNyArMTQ1LDE2IEBAIHZvaWQgRFJUVW5kb01hbmFnZXI6OnVu
ZG8oKQogCiAgICAgbV9pc1VuZG9pbmcgPSB0cnVlOwogCi0gICAgRFJUVW5kb09iamVjdCogdW5k
b09iamVjdCA9IG1fdW5kb1N0YWNrLT5wb3AoKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RFJUVW5k
b09iamVjdD4gdW5kb09iamVjdCA9IG1fdW5kb1N0YWNrLT5wb3AoKTsKICAgICB1bmRvT2JqZWN0
LT5pbnZva2UoKTsKLSAgICBkZWxldGUgdW5kb09iamVjdDsKIAogICAgIG1faXNVbmRvaW5nID0g
ZmFsc2U7CiB9CiAKIFVJRGVsZWdhdGU6OlVJRGVsZWdhdGUoKQogICAgIDogbV9yZWZDb3VudCgx
KQotICAgICwgbV91bmRvTWFuYWdlcihhZG9wdFB0cihuZXcgRFJUVW5kb01hbmFnZXIpKQotICAg
ICwgbV9kZXNrdG9wTm90aWZpY2F0aW9ucyhuZXcgRFJURGVza3RvcE5vdGlmaWNhdGlvblByZXNl
bnRlcikKKyAgICAsIG1fdW5kb01hbmFnZXIoc3RkOjptYWtlX3VuaXF1ZTxEUlRVbmRvTWFuYWdl
cj4oKSkKKyAgICAsIG1fZGVza3RvcE5vdGlmaWNhdGlvbnMoc3RkOjptYWtlX3VuaXF1ZTxEUlRE
ZXNrdG9wTm90aWZpY2F0aW9uUHJlc2VudGVyPigpKQogewogICAgIG1fZnJhbWUuYm90dG9tID0g
MDsKICAgICBtX2ZyYW1lLnRvcCA9IDA7CkBAIC0xNjgsNyArMTY0LDcgQEAgVUlEZWxlZ2F0ZTo6
VUlEZWxlZ2F0ZSgpCiAKIHZvaWQgVUlEZWxlZ2F0ZTo6cmVzZXRVbmRvTWFuYWdlcigpCiB7Ci0g
ICAgbV91bmRvTWFuYWdlciA9IGFkb3B0UHRyKG5ldyBEUlRVbmRvTWFuYWdlcik7CisgICAgbV91
bmRvTWFuYWdlciA9IHN0ZDo6bWFrZV91bmlxdWU8RFJUVW5kb01hbmFnZXI+KCk7CiB9CiAKIEhS
RVNVTFQgVUlEZWxlZ2F0ZTo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZP
YmplY3QpCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vVUlEZWxlZ2F0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9VSURlbGVnYXRlLmgJKHJldmlzaW9u
IDE2NzI3MikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9VSURlbGVnYXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwNyw3ICs0MDcsNyBAQCBwcm90ZWN0ZWQ6CiAKIHByaXZhdGU6CiAgICAg
UkVDVCBtX2ZyYW1lOwotICAgIE93blB0cjxEUlRVbmRvTWFuYWdlcj4gbV91bmRvTWFuYWdlcjsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8RFJUVW5kb01hbmFnZXI+IG1fdW5kb01hbmFnZXI7CiAKICAg
ICBDT01QdHI8SVdlYkRlc2t0b3BOb3RpZmljYXRpb25zRGVsZWdhdGU+IG1fZGVza3RvcE5vdGlm
aWNhdGlvbnM7CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229316</attachid>
            <date>2014-04-14 15:38:28 -0700</date>
            <delta_ts>2014-04-15 21:14:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-131631-20140414153807.patch</filename>
            <type>text/plain</type>
            <size>18602</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NzI3MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE0LTA0LTE0ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dIEVsaW1pbmF0ZSB1
c2Ugb2YgZGVsZXRlQWxsVmFsdWVzIGluIFdpbmRvd3MgRmlsZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTYzMQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSB0byB1c2Ugc3RkOjp1bmlxdWVf
cHRyIGZvciBvYmplY3QgbGlmZXRpbWUuIEdldCByaWQgb2YKKyAgICAgICAgZGVsZXRlQWxsVmFs
dWVzIG5vdyB0aGF0IGl0IGlzIG5vIGxvbmVyIG5lZWRlZC4gVXNlIHJhbmdlZCBmb3IKKyAgICAg
ICAgbG9vcHMgd2hlcmUgcG9zc2libGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vV0NEYXRh
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldDRW51bUZvcm1hdEV0Yzo6V0NFbnVtRm9y
bWF0RXRjKToKKyAgICAgICAgKFdlYkNvcmU6OldDRGF0YU9iamVjdDo6fldDRGF0YU9iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpXQ0RhdGFPYmplY3Q6OkdldERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6V0NEYXRhT2JqZWN0OjpRdWVyeUdldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V0NE
YXRhT2JqZWN0OjpTZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldDRGF0YU9iamVjdDo6Y2xl
YXJEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0Lmg6CisKIDIwMTQt
MDQtMTQgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmRlckxh
eWVyQ29tcG9zaXRvcidzIG1fbGF5ZXJGb3JPdmVyaGFuZ0FyZWFzIHNob3VsZCBiZSBvZmZzZXQg
YnkgdGhlIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dDRGF0YU9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1dDRGF0YU9iamVj
dC5jcHAJKHJldmlzaW9uIDE2NzI3MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9X
Q0RhdGFPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA3LCAyMDE0IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgV0NF
bnVtRm9ybWF0RXRjIDogcHVibGljIElFbnVtRk9STQogewogcHVibGljOgogICAgIFdDRW51bUZv
cm1hdEV0Yyhjb25zdCBWZWN0b3I8Rk9STUFURVRDPiYgZm9ybWF0cyk7Ci0gICAgV0NFbnVtRm9y
bWF0RXRjKGNvbnN0IFZlY3RvcjxGT1JNQVRFVEMqPiYgZm9ybWF0cyk7CisgICAgV0NFbnVtRm9y
bWF0RXRjKGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Rk9STUFURVRDPj4mIGZvcm1hdHMp
OwogCiAgICAgLy9JVW5rbm93biBtZW1iZXJzCiAgICAgU1RETUVUSE9EKFF1ZXJ5SW50ZXJmYWNl
KShSRUZJSUQsIHZvaWQqKik7CkBAIC02NSwxMiArNjUsMTIgQEAgV0NFbnVtRm9ybWF0RXRjOjpX
Q0VudW1Gb3JtYXRFdGMoY29uc3QgVgogICAgICAgICBtX2Zvcm1hdHMuYXBwZW5kKGZvcm1hdHNb
aV0pOwogfQogCi1XQ0VudW1Gb3JtYXRFdGM6OldDRW51bUZvcm1hdEV0Yyhjb25zdCBWZWN0b3I8
Rk9STUFURVRDKj4mIGZvcm1hdHMpCi06IG1fcmVmKDEpCi0sIG1fY3VycmVudCgwKQorV0NFbnVt
Rm9ybWF0RXRjOjpXQ0VudW1Gb3JtYXRFdGMoY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxG
T1JNQVRFVEM+PiYgZm9ybWF0cykKKyAgICA6IG1fcmVmKDEpCisgICAgLCBtX2N1cnJlbnQoMCkK
IHsKLSAgICBmb3Ioc2l6ZV90IGkgPSAwOyBpIDwgZm9ybWF0cy5zaXplKCk7ICsraSkKLSAgICAg
ICAgbV9mb3JtYXRzLmFwcGVuZCgqZm9ybWF0c1tpXSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBm
b3JtYXQgOiBmb3JtYXRzKQorICAgICAgICBtX2Zvcm1hdHMuYXBwZW5kKCpmb3JtYXQpOwogfQog
CiBTVERNRVRIT0RJTVAgIFdDRW51bUZvcm1hdEV0Yzo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJp
aWQsIHZvaWQqKiBwcHZPYmplY3QpCkBAIC0xODAsMTEgKzE4MCw4IEBAIFdDRGF0YU9iamVjdDo6
V0NEYXRhT2JqZWN0KCkKIAogV0NEYXRhT2JqZWN0Ojp+V0NEYXRhT2JqZWN0KCkKIHsKLSAgICBm
b3Ioc2l6ZV90IGkgPSAwOyBpIDwgbV9tZWRpdW0uc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgUmVs
ZWFzZVN0Z01lZGl1bShtX21lZGl1bVtpXSk7Ci0gICAgICAgIGRlbGV0ZSBtX21lZGl1bVtpXTsK
LSAgICB9Ci0gICAgV1RGOjpkZXByZWNhdGVkRGVsZXRlQWxsVmFsdWVzKG1fZm9ybWF0cyk7Cisg
ICAgZm9yIChhdXRvJiBtZWRpdW0gOiBtX21lZGl1bSkKKyAgICAgICAgUmVsZWFzZVN0Z01lZGl1
bShtZWRpdW0uZ2V0KCkpOwogfQogCiBTVERNRVRIT0RJTVAgV0NEYXRhT2JqZWN0OjpRdWVyeUlu
dGVyZmFjZShSRUZJSUQgcmlpZCx2b2lkKiogcHB2T2JqZWN0KQpAQCAtMjIwLDEyICsyMTcsMTIg
QEAgU1RETUVUSE9ESU1QIFdDRGF0YU9iamVjdDo6R2V0RGF0YShGT1JNQQogICAgICAgICByZXR1
cm4gRV9QT0lOVEVSOwogICAgIHBtZWRpdW0tPmhHbG9iYWwgPSAwOwogCi0gICAgZm9yKHNpemVf
dCBpPTA7IGkgPCBtX2Zvcm1hdHMuc2l6ZSgpOyArK2kpIHsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fZm9ybWF0cy5zaXplKCk7ICsraSkgewogICAgICAgICBpZigvKnBmb3JtYXRldGNJ
bi0+dHltZWQgJiBtX2Zvcm1hdHNbaV0tPnR5bWVkICYmKi8gICAgIC8vIHR5bWVkIGNhbiBiZSAw
IChUWU1FRF9OVUxMKSAtIGJ1dCBpdCBjYW4gaGF2ZSBhIG1lZGl1bSB0aGF0IGNvbnRhaW5zIGFu
IHBVbmtGb3JSZWxlYXNlCiAgICAgICAgICAgICBwZm9ybWF0ZXRjSW4tPmxpbmRleCA9PSBtX2Zv
cm1hdHNbaV0tPmxpbmRleCAmJgogICAgICAgICAgICAgcGZvcm1hdGV0Y0luLT5kd0FzcGVjdCA9
PSBtX2Zvcm1hdHNbaV0tPmR3QXNwZWN0ICYmCiAgICAgICAgICAgICBwZm9ybWF0ZXRjSW4tPmNm
Rm9ybWF0ID09IG1fZm9ybWF0c1tpXS0+Y2ZGb3JtYXQpIHsKLSAgICAgICAgICAgIENvcHlNZWRp
dW0ocG1lZGl1bSwgbV9tZWRpdW1baV0sIG1fZm9ybWF0c1tpXSk7CisgICAgICAgICAgICBDb3B5
TWVkaXVtKHBtZWRpdW0sIG1fbWVkaXVtW2ldLmdldCgpLCBtX2Zvcm1hdHNbaV0uZ2V0KCkpOwog
ICAgICAgICAgICAgcmV0dXJuIFNfT0s7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNDUsMTIgKzI0
MiwxMiBAQCBTVERNRVRIT0RJTVAgV0NEYXRhT2JqZWN0OjpRdWVyeUdldERhdGEoCiAgICAgaWYg
KCEoRFZBU1BFQ1RfQ09OVEVOVCAmIHBmb3JtYXRldGMtPmR3QXNwZWN0KSkKICAgICAgICAgcmV0
dXJuIChEVl9FX0RWQVNQRUNUKTsKICAgICBIUkVTVUxUICBociA9IERWX0VfVFlNRUQ7Ci0gICAg
Zm9yKHNpemVfdCBpID0gMDsgaSA8IG1fZm9ybWF0cy5zaXplKCk7ICsraSkgewotICAgICAgICBp
ZihwZm9ybWF0ZXRjLT50eW1lZCAmIG1fZm9ybWF0c1tpXS0+dHltZWQpIHsKLSAgICAgICAgICAg
IGlmKHBmb3JtYXRldGMtPmNmRm9ybWF0ID09IG1fZm9ybWF0c1tpXS0+Y2ZGb3JtYXQpCisgICAg
Zm9yIChjb25zdCBhdXRvJiBmb3JtYXQgOiBtX2Zvcm1hdHMpIHsKKyAgICAgICAgaWYgKHBmb3Jt
YXRldGMtPnR5bWVkICYgZm9ybWF0LT50eW1lZCkgeworICAgICAgICAgICAgaWYgKHBmb3JtYXRl
dGMtPmNmRm9ybWF0ID09IGZvcm1hdC0+Y2ZGb3JtYXQpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IFNfT0s7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaHIgPSBEVl9FX0NMSVBG
T1JNQVQ7CisKKyAgICAgICAgICAgIGhyID0gRFZfRV9DTElQRk9STUFUOwogICAgICAgICB9CiAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgIGhyID0gRFZfRV9UWU1FRDsKQEAgLTI2OCwyOCArMjY1
LDI1IEBAIFNURE1FVEhPRElNUCBXQ0RhdGFPYmplY3Q6OlNldERhdGEoRk9STUEKICAgICBpZigh
cGZvcm1hdGV0YyB8fCAhcG1lZGl1bSkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAg
IEZPUk1BVEVUQyogZmV0Yz1uZXcgRk9STUFURVRDOworICAgIHN0ZDo6dW5pcXVlX3B0cjxGT1JN
QVRFVEM+IGZldGMgPSBzdGQ6Om1ha2VfdW5pcXVlPEZPUk1BVEVUQz4oKTsKICAgICBpZiAoIWZl
dGMpCiAgICAgICAgIHJldHVybiBFX09VVE9GTUVNT1JZOwogCi0gICAgU1RHTUVESVVNKiBwU3Rn
TWVkID0gbmV3IFNUR01FRElVTTsKLQotICAgIGlmKCFwU3RnTWVkKSB7Ci0gICAgICAgIGRlbGV0
ZSBmZXRjOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTVEdNRURJVU0+IHBTdGdNZWQgPSBzdGQ6Om1h
a2VfdW5pcXVlPFNUR01FRElVTT4oKTsKKyAgICBpZiAoIXBTdGdNZWQpCiAgICAgICAgIHJldHVy
biBFX09VVE9GTUVNT1JZOwotICAgIH0KIAotICAgIFplcm9NZW1vcnkoZmV0YyxzaXplb2YoRk9S
TUFURVRDKSk7Ci0gICAgWmVyb01lbW9yeShwU3RnTWVkLHNpemVvZihTVEdNRURJVU0pKTsKKyAg
ICBaZXJvTWVtb3J5KGZldGMuZ2V0KCksIHNpemVvZihGT1JNQVRFVEMpKTsKKyAgICBaZXJvTWVt
b3J5KHBTdGdNZWQuZ2V0KCksIHNpemVvZihTVEdNRURJVU0pKTsKIAogICAgICpmZXRjID0gKnBm
b3JtYXRldGM7Ci0gICAgbV9mb3JtYXRzLmFwcGVuZChmZXRjKTsKKyAgICBtX2Zvcm1hdHMuYXBw
ZW5kKHN0ZDo6bW92ZShmZXRjKSk7CiAKICAgICBpZihmUmVsZWFzZSkKICAgICAgICAgKnBTdGdN
ZWQgPSAqcG1lZGl1bTsKICAgICBlbHNlCi0gICAgICAgIENvcHlNZWRpdW0ocFN0Z01lZCwgcG1l
ZGl1bSwgcGZvcm1hdGV0Yyk7Ci0gICAgbV9tZWRpdW0uYXBwZW5kKHBTdGdNZWQpOworICAgICAg
ICBDb3B5TWVkaXVtKHBTdGdNZWQuZ2V0KCksIHBtZWRpdW0sIHBmb3JtYXRldGMpOworICAgIG1f
bWVkaXVtLmFwcGVuZChzdGQ6Om1vdmUocFN0Z01lZCkpOwogCiAgICAgcmV0dXJuIFNfT0s7CiB9
CkBAIC0zNzYsMTcgKzM3MCwxNCBAQCB2b2lkIFdDRGF0YU9iamVjdDo6Y2xlYXJEYXRhKENMSVBG
T1JNQVQKICAgICBzaXplX3QgcHRyID0gMDsKICAgICB3aGlsZSAocHRyIDwgbV9mb3JtYXRzLnNp
emUoKSkgewogICAgICAgICBpZiAobV9mb3JtYXRzW3B0cl0tPmNmRm9ybWF0ID09IGZvcm1hdCkg
ewotICAgICAgICAgICAgRk9STUFURVRDKiBjdXJyZW50ID0gbV9mb3JtYXRzW3B0cl07Ci0gICAg
ICAgICAgICBtX2Zvcm1hdHNbcHRyXSA9IG1fZm9ybWF0c1ttX2Zvcm1hdHMuc2l6ZSgpIC0gMV07
Ci0gICAgICAgICAgICBtX2Zvcm1hdHNbbV9mb3JtYXRzLnNpemUoKSAtIDFdID0gMDsKKyAgICAg
ICAgICAgIG1fZm9ybWF0c1twdHJdID0gc3RkOjptb3ZlKG1fZm9ybWF0c1ttX2Zvcm1hdHMuc2l6
ZSgpIC0gMV0pOworICAgICAgICAgICAgbV9mb3JtYXRzW21fZm9ybWF0cy5zaXplKCkgLSAxXSA9
IG51bGxwdHI7CiAgICAgICAgICAgICBtX2Zvcm1hdHMucmVtb3ZlTGFzdCgpOwotICAgICAgICAg
ICAgZGVsZXRlIGN1cnJlbnQ7Ci0gICAgICAgICAgICBTVEdNRURJVU0qIG1lZGl1bSA9IG1fbWVk
aXVtW3B0cl07Ci0gICAgICAgICAgICBtX21lZGl1bVtwdHJdID0gbV9tZWRpdW1bbV9tZWRpdW0u
c2l6ZSgpIC0gMV07Ci0gICAgICAgICAgICBtX21lZGl1bVttX21lZGl1bS5zaXplKCkgLSAxXSA9
IDA7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U1RHTUVESVVNPiBtZWRpdW0gPSBzdGQ6
Om1vdmUobV9tZWRpdW1bcHRyXSk7CisgICAgICAgICAgICBtX21lZGl1bVtwdHJdID0gc3RkOjpt
b3ZlKG1fbWVkaXVtW21fbWVkaXVtLnNpemUoKSAtIDFdKTsKKyAgICAgICAgICAgIG1fbWVkaXVt
W21fbWVkaXVtLnNpemUoKSAtIDFdID0gbnVsbHB0cjsKICAgICAgICAgICAgIG1fbWVkaXVtLnJl
bW92ZUxhc3QoKTsKLSAgICAgICAgICAgIFJlbGVhc2VTdGdNZWRpdW0obWVkaXVtKTsKLSAgICAg
ICAgICAgIGRlbGV0ZSBtZWRpdW07CisgICAgICAgICAgICBSZWxlYXNlU3RnTWVkaXVtKG1lZGl1
bS5nZXQoKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBwdHIr
KzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmgJKHJl
dmlzaW9uIDE2NzI3MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XQ0RhdGFPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNywgMjAxNCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC02Miw4ICs2Miw4IEBAIHByaXZhdGU6CiAgICAgV0NEYXRh
T2JqZWN0KCk7CiAgICAgdmlydHVhbCB+V0NEYXRhT2JqZWN0KCk7CiAgICAgbG9uZyBtX3JlZjsK
LSAgICBWZWN0b3I8Rk9STUFURVRDKj4gbV9mb3JtYXRzOwotICAgIFZlY3RvcjxTVEdNRURJVU0q
PiBtX21lZGl1bTsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEZPUk1BVEVUQz4+IG1fZm9y
bWF0czsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFNUR01FRElVTT4+IG1fbWVkaXVtOwog
fTsKIAogfQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTY3MjcyKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMzUgQEAKKzIwMTQtMDQtMTQgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBh
cHBsZS5jb20+CisKKyAgICAgICAgW1dpbl0gRWxpbWluYXRlIHVzZSBvZiBkZWxldGVBbGxWYWx1
ZXMgaW4gV2luZG93cyBGaWxlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTMxNjMxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgU3dpdGNoIHRvIHN0ZDo6dW5pcXVlX3B0ciBmb3IgbWVtb3J5IGxpZmV0aW1l
LiBHZXQgcmlkIG9mCisgICAgICAgIGRlbGV0ZUFsbFZhbHVlcyBub3cgdGhhdCBpdCBpcyBubyBs
b25nZXIgbmVlZGVkLiBVc2UgcmFuZ2VkCisgICAgICAgIGZvciBsb29wcyB3aGVyZSBwb3NzaWJs
ZS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EUlREYXRhT2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdDRW51bUZvcm1hdEV0Yzo6V0NFbnVtRm9ybWF0RXRjKToKKyAgICAgICAgKERSVERh
dGFPYmplY3Q6On5EUlREYXRhT2JqZWN0KToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OkdldERh
dGEpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6UXVlcnlHZXREYXRhKToKKyAgICAgICAgKERS
VERhdGFPYmplY3Q6OlNldERhdGEpOgorICAgICAgICAoRFJURGF0YU9iamVjdDo6Y2xlYXJEYXRh
KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVjdC5oOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL3dpbi9VSURlbGVnYXRlLmNwcDoKKyAgICAgICAgKERSVFVuZG9P
YmplY3Q6OkRSVFVuZG9PYmplY3QpOgorICAgICAgICAoRFJUVW5kb09iamVjdDo6fkRSVFVuZG9P
YmplY3QpOgorICAgICAgICAoRFJUVW5kb1N0YWNrOjp+RFJUVW5kb1N0YWNrKToKKyAgICAgICAg
KERSVFVuZG9TdGFjazo6Y2xlYXIpOgorICAgICAgICAoRFJUVW5kb1N0YWNrOjpwb3ApOgorICAg
ICAgICAoRFJUVW5kb01hbmFnZXI6OkRSVFVuZG9NYW5hZ2VyKToKKyAgICAgICAgKERSVFVuZG9N
YW5hZ2VyOjpyZWRvKToKKyAgICAgICAgKERSVFVuZG9NYW5hZ2VyOjp1bmRvKToKKyAgICAgICAg
KFVJRGVsZWdhdGU6OlVJRGVsZWdhdGUpOgorICAgICAgICAoVUlEZWxlZ2F0ZTo6cmVzZXRVbmRv
TWFuYWdlcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL1VJRGVsZWdhdGUuaDoKKwog
MjAxNC0wNC0xNCAgSm96c2VmIEJlcnRhICA8amJlcnRhLnUtc3plZ2VkQHBhcnRuZXIuc2Ftc3Vu
Zy5jb20+CiAKICAgICAgICAgRml4IGNvbW1pdC1sb2ctZWRpdG9yIGJ1ZyByZXZlYWxlZCBieSBy
MTY1NDQ3CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuY3Bw
CShyZXZpc2lvbiAxNjcyNzIpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcsIDIwMTQgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAxMiBCYWlkdSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dApAQCAtNTAsNyArNTAsNyBAQCBGT1JNQVRFVEMqIGNmVXJsV0Zvcm1hdCgpCiBjbGFz
cyBXQ0VudW1Gb3JtYXRFdGMgOiBwdWJsaWMgSUVudW1GT1JNQVRFVEMgewogcHVibGljOgogICAg
IGV4cGxpY2l0IFdDRW51bUZvcm1hdEV0Yyhjb25zdCBWZWN0b3I8Rk9STUFURVRDPiYgZm9ybWF0
cyk7Ci0gICAgZXhwbGljaXQgV0NFbnVtRm9ybWF0RXRjKGNvbnN0IFZlY3RvcjxGT1JNQVRFVEMq
PiYgZm9ybWF0cyk7CisgICAgZXhwbGljaXQgV0NFbnVtRm9ybWF0RXRjKGNvbnN0IFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8Rk9STUFURVRDPj4mIGZvcm1hdHMpOwogCiAgICAgLy8gSVVua25vd24g
bWVtYmVycwogICAgIFNURE1FVEhPRChRdWVyeUludGVyZmFjZSkoUkVGSUlELCB2b2lkKiopOwpA
QCAtNzYsMTIgKzc2LDEyIEBAIFdDRW51bUZvcm1hdEV0Yzo6V0NFbnVtRm9ybWF0RXRjKGNvbnN0
IFYKIHsKIH0KIAotV0NFbnVtRm9ybWF0RXRjOjpXQ0VudW1Gb3JtYXRFdGMoY29uc3QgVmVjdG9y
PEZPUk1BVEVUQyo+JiBmb3JtYXRzKQorV0NFbnVtRm9ybWF0RXRjOjpXQ0VudW1Gb3JtYXRFdGMo
Y29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxGT1JNQVRFVEM+PiYgZm9ybWF0cykKICAgICA6
IG1fcmVmKDEpCiAgICAgLCBtX2N1cnJlbnQoMCkKIHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGZvcm1hdHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fZm9ybWF0cy5hcHBlbmQoKmZvcm1h
dHNbaV0pOworICAgIGZvciAoY29uc3QgYXV0byYgZm9ybWF0IDogZm9ybWF0cykKKyAgICAgICAg
bV9mb3JtYXRzLmFwcGVuZCgqZm9ybWF0KTsKIH0KIAogU1RETUVUSE9ESU1QIFdDRW51bUZvcm1h
dEV0Yzo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmplY3QpCkBAIC0x
NzcsMTEgKzE3Nyw4IEBAIERSVERhdGFPYmplY3Q6OkRSVERhdGFPYmplY3QoKQogCiBEUlREYXRh
T2JqZWN0Ojp+RFJURGF0YU9iamVjdCgpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X21lZGl1bS5zaXplKCk7ICsraSkgewotICAgICAgICBSZWxlYXNlU3RnTWVkaXVtKG1fbWVkaXVt
W2ldKTsKLSAgICAgICAgZGVsZXRlIG1fbWVkaXVtW2ldOwotICAgIH0KLSAgICBXVEY6OmRlcHJl
Y2F0ZWREZWxldGVBbGxWYWx1ZXMobV9mb3JtYXRzKTsKKyAgICBmb3IgKGF1dG8mIG1lZGl1bSA6
IG1fbWVkaXVtKQorICAgICAgICBSZWxlYXNlU3RnTWVkaXVtKG1lZGl1bS5nZXQoKSk7CiB9CiAK
IFNURE1FVEhPRElNUCBEUlREYXRhT2JqZWN0OjpRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCwg
dm9pZCoqIHBwdk9iamVjdCkKQEAgLTIxOCw3ICsyMTUsNyBAQCBTVERNRVRIT0RJTVAgRFJURGF0
YU9iamVjdDo6R2V0RGF0YShGT1JNCiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZm9y
bWF0cy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAocGZvcm1hdGV0Y0luLT5saW5kZXggPT0g
bV9mb3JtYXRzW2ldLT5saW5kZXggJiYgcGZvcm1hdGV0Y0luLT5kd0FzcGVjdCA9PSBtX2Zvcm1h
dHNbaV0tPmR3QXNwZWN0ICYmIHBmb3JtYXRldGNJbi0+Y2ZGb3JtYXQgPT0gbV9mb3JtYXRzW2ld
LT5jZkZvcm1hdCkgewotICAgICAgICAgICAgQ29weU1lZGl1bShwbWVkaXVtLCBtX21lZGl1bVtp
XSwgbV9mb3JtYXRzW2ldKTsKKyAgICAgICAgICAgIENvcHlNZWRpdW0ocG1lZGl1bSwgbV9tZWRp
dW1baV0uZ2V0KCksIG1fZm9ybWF0c1tpXS5nZXQoKSk7CiAgICAgICAgICAgICByZXR1cm4gU19P
SzsKICAgICAgICAgfQogICAgIH0KQEAgLTIzOCw5ICsyMzUsOSBAQCBTVERNRVRIT0RJTVAgRFJU
RGF0YU9iamVjdDo6UXVlcnlHZXREYXRhCiAgICAgaWYgKCEoRFZBU1BFQ1RfQ09OVEVOVCAmIHBm
b3JtYXRldGMtPmR3QXNwZWN0KSkKICAgICAgICAgcmV0dXJuIChEVl9FX0RWQVNQRUNUKTsKIAot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mb3JtYXRzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGlmIChwZm9ybWF0ZXRjLT50eW1lZCAmIG1fZm9ybWF0c1tpXS0+dHltZWQpIHsKLSAgICAg
ICAgICAgIGlmIChwZm9ybWF0ZXRjLT5jZkZvcm1hdCA9PSBtX2Zvcm1hdHNbaV0tPmNmRm9ybWF0
KQorICAgIGZvciAoY29uc3QgYXV0byYgZm9ybWF0IDogbV9mb3JtYXRzKSB7CisgICAgICAgIGlm
IChwZm9ybWF0ZXRjLT50eW1lZCAmIGZvcm1hdC0+dHltZWQpIHsKKyAgICAgICAgICAgIGlmIChw
Zm9ybWF0ZXRjLT5jZkZvcm1hdCA9PSBmb3JtYXQtPmNmRm9ybWF0KQogICAgICAgICAgICAgICAg
IHJldHVybiBTX09LOwogICAgICAgICB9CiAgICAgfQpAQCAtMjU3LDI4ICsyNTQsMjUgQEAgU1RE
TUVUSE9ESU1QIERSVERhdGFPYmplY3Q6OlNldERhdGEoRk9STQogICAgIGlmICghcGZvcm1hdGV0
YyB8fCAhcG1lZGl1bSkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIEZPUk1BVEVU
QyogZm9ybWF0ZXRjID0gbmV3IEZPUk1BVEVUQzsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Rk9STUFU
RVRDPiBmb3JtYXRldGMgPSBzdGQ6Om1ha2VfdW5pcXVlPEZPUk1BVEVUQz4oKTsKICAgICBpZiAo
IWZvcm1hdGV0YykKICAgICAgICAgcmV0dXJuIEVfT1VUT0ZNRU1PUlk7CiAKLSAgICBTVEdNRURJ
VU0qIHBTdGdNZWQgPSBuZXcgU1RHTUVESVVNOwotCi0gICAgaWYgKCFwU3RnTWVkKSB7Ci0gICAg
ICAgIGRlbGV0ZSBmb3JtYXRldGM7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNUR01FRElVTT4gcFN0
Z01lZCA9IHN0ZDo6bWFrZV91bmlxdWU8U1RHTUVESVVNPigpOworICAgIGlmICghcFN0Z01lZCkK
ICAgICAgICAgcmV0dXJuIEVfT1VUT0ZNRU1PUlk7Ci0gICAgfQogCi0gICAgWmVyb01lbW9yeShm
b3JtYXRldGMsIHNpemVvZihGT1JNQVRFVEMpKTsKLSAgICBaZXJvTWVtb3J5KHBTdGdNZWQsIHNp
emVvZihTVEdNRURJVU0pKTsKKyAgICBaZXJvTWVtb3J5KGZvcm1hdGV0Yy5nZXQoKSwgc2l6ZW9m
KEZPUk1BVEVUQykpOworICAgIFplcm9NZW1vcnkocFN0Z01lZC5nZXQoKSwgc2l6ZW9mKFNUR01F
RElVTSkpOwogCiAgICAgKmZvcm1hdGV0YyA9ICpwZm9ybWF0ZXRjOwotICAgIG1fZm9ybWF0cy5h
cHBlbmQoZm9ybWF0ZXRjKTsKKyAgICBtX2Zvcm1hdHMuYXBwZW5kKHN0ZDo6bW92ZShmb3JtYXRl
dGMpKTsKIAogICAgIGlmIChmUmVsZWFzZSkKICAgICAgICAgKnBTdGdNZWQgPSAqcG1lZGl1bTsK
ICAgICBlbHNlCi0gICAgICAgIENvcHlNZWRpdW0ocFN0Z01lZCwgcG1lZGl1bSwgcGZvcm1hdGV0
Yyk7Ci0gICAgbV9tZWRpdW0uYXBwZW5kKHBTdGdNZWQpOworICAgICAgICBDb3B5TWVkaXVtKHBT
dGdNZWQuZ2V0KCksIHBtZWRpdW0sIHBmb3JtYXRldGMpOworICAgIG1fbWVkaXVtLmFwcGVuZChz
dGQ6Om1vdmUocFN0Z01lZCkpOwogCiAgICAgcmV0dXJuIFNfT0s7CiB9CkBAIC0zNjMsMTcgKzM1
NywxNCBAQCB2b2lkIERSVERhdGFPYmplY3Q6OmNsZWFyRGF0YShDTElQRk9STUFUCiAgICAgc2l6
ZV90IHBvc2l0aW9uID0gMDsKICAgICB3aGlsZSAocG9zaXRpb24gPCBtX2Zvcm1hdHMuc2l6ZSgp
KSB7CiAgICAgICAgIGlmIChtX2Zvcm1hdHNbcG9zaXRpb25dLT5jZkZvcm1hdCA9PSBmb3JtYXQp
IHsKLSAgICAgICAgICAgIEZPUk1BVEVUQyogY3VycmVudCA9IG1fZm9ybWF0c1twb3NpdGlvbl07
Ci0gICAgICAgICAgICBtX2Zvcm1hdHNbcG9zaXRpb25dID0gbV9mb3JtYXRzW21fZm9ybWF0cy5z
aXplKCkgLSAxXTsKLSAgICAgICAgICAgIG1fZm9ybWF0c1ttX2Zvcm1hdHMuc2l6ZSgpIC0gMV0g
PSAwOworICAgICAgICAgICAgbV9mb3JtYXRzW3Bvc2l0aW9uXSA9IHN0ZDo6bW92ZShtX2Zvcm1h
dHNbbV9mb3JtYXRzLnNpemUoKSAtIDFdKTsKKyAgICAgICAgICAgIG1fZm9ybWF0c1ttX2Zvcm1h
dHMuc2l6ZSgpIC0gMV0gPSBudWxscHRyOwogICAgICAgICAgICAgbV9mb3JtYXRzLnJlbW92ZUxh
c3QoKTsKLSAgICAgICAgICAgIGRlbGV0ZSBjdXJyZW50OwotICAgICAgICAgICAgU1RHTUVESVVN
KiBtZWRpdW0gPSBtX21lZGl1bVtwb3NpdGlvbl07Ci0gICAgICAgICAgICBtX21lZGl1bVtwb3Np
dGlvbl0gPSBtX21lZGl1bVttX21lZGl1bS5zaXplKCkgLSAxXTsKLSAgICAgICAgICAgIG1fbWVk
aXVtW21fbWVkaXVtLnNpemUoKSAtIDFdID0gMDsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxTVEdNRURJVU0+IG1lZGl1bSA9IHN0ZDo6bW92ZShtX21lZGl1bVtwb3NpdGlvbl0pOworICAg
ICAgICAgICAgbV9tZWRpdW1bcG9zaXRpb25dID0gc3RkOjptb3ZlKG1fbWVkaXVtW21fbWVkaXVt
LnNpemUoKSAtIDFdKTsKKyAgICAgICAgICAgIG1fbWVkaXVtW21fbWVkaXVtLnNpemUoKSAtIDFd
ID0gbnVsbHB0cjsKICAgICAgICAgICAgIG1fbWVkaXVtLnJlbW92ZUxhc3QoKTsKLSAgICAgICAg
ICAgIFJlbGVhc2VTdGdNZWRpdW0obWVkaXVtKTsKLSAgICAgICAgICAgIGRlbGV0ZSBtZWRpdW07
CisgICAgICAgICAgICBSZWxlYXNlU3RnTWVkaXVtKG1lZGl1bS5nZXQoKSk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBwb3NpdGlvbisrOwpJbmRleDogVG9vbHMv
RHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9E
dW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVjdC5oCShyZXZpc2lvbiAxNjcyNzIpCisrKyBU
b29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDE0IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQmFpZHUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTY0LDggKzY0LDggQEAg
cHJpdmF0ZToKICAgICBEUlREYXRhT2JqZWN0KCk7CiAgICAgfkRSVERhdGFPYmplY3QoKTsKICAg
ICBsb25nIG1fcmVmOwotICAgIFZlY3RvcjxGT1JNQVRFVEMqPiBtX2Zvcm1hdHM7Ci0gICAgVmVj
dG9yPFNUR01FRElVTSo+IG1fbWVkaXVtOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Rk9S
TUFURVRDPj4gbV9mb3JtYXRzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U1RHTUVESVVN
Pj4gbV9tZWRpdW07CiB9OwogCiAjZW5kaWYgLy8gRFJURGF0YU9iamVjdF9oCkluZGV4OiBUb29s
cy9EdW1wUmVuZGVyVHJlZS93aW4vVUlEZWxlZ2F0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
RHVtcFJlbmRlclRyZWUvd2luL1VJRGVsZWdhdGUuY3BwCShyZXZpc2lvbiAxNjcyNzIpCisrKyBU
b29scy9EdW1wUmVuZGVyVHJlZS93aW4vVUlEZWxlZ2F0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlICJUZXN0UnVubmVyLmgiCiAjaW5jbHVkZSA8V2ViQ29y
ZS9DT01QdHIuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmg+CkBAIC01
MSwxNCArNTAsMTMgQEAgY2xhc3MgRFJUVW5kb09iamVjdCB7CiBwdWJsaWM6CiAgICAgRFJUVW5k
b09iamVjdChJV2ViVW5kb1RhcmdldCogdGFyZ2V0LCBCU1RSIGFjdGlvbk5hbWUsIElVbmtub3du
KiBvYmopCiAgICAgICAgIDogbV90YXJnZXQodGFyZ2V0KQotICAgICAgICAsIG1fYWN0aW9uTmFt
ZShTeXNBbGxvY1N0cmluZyhhY3Rpb25OYW1lKSkKKyAgICAgICAgLCBtX2FjdGlvbk5hbWUoYWN0
aW9uTmFtZSkKICAgICAgICAgLCBtX29iaihvYmopCiAgICAgewogICAgIH0KIAogICAgIH5EUlRV
bmRvT2JqZWN0KCkKICAgICB7Ci0gICAgICAgIFN5c0ZyZWVTdHJpbmcobV9hY3Rpb25OYW1lKTsK
ICAgICB9CiAKICAgICB2b2lkIGludm9rZSgpCkBAIC02OCwyMiArNjYsMjIgQEAgcHVibGljOgog
CiBwcml2YXRlOgogICAgIElXZWJVbmRvVGFyZ2V0KiBtX3RhcmdldDsKLSAgICBCU1RSIG1fYWN0
aW9uTmFtZTsKKyAgICBfYnN0cl90IG1fYWN0aW9uTmFtZTsKICAgICBDT01QdHI8SVVua25vd24+
IG1fb2JqOwogfTsKIAogY2xhc3MgRFJUVW5kb1N0YWNrIHsKIHB1YmxpYzoKLSAgICB+RFJUVW5k
b1N0YWNrKCkgeyBkZXByZWNhdGVkRGVsZXRlQWxsVmFsdWVzKG1fdW5kb1ZlY3Rvcik7IH0KKyAg
ICB+RFJUVW5kb1N0YWNrKCkgeyB9CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVy
biBtX3VuZG9WZWN0b3IuaXNFbXB0eSgpOyB9Ci0gICAgdm9pZCBjbGVhcigpIHsgZGVwcmVjYXRl
ZERlbGV0ZUFsbFZhbHVlcyhtX3VuZG9WZWN0b3IpOyBtX3VuZG9WZWN0b3IuY2xlYXIoKTsgfQor
ICAgIHZvaWQgY2xlYXIoKSB7IG1fdW5kb1ZlY3Rvci5jbGVhcigpOyB9CiAKICAgICB2b2lkIHB1
c2goRFJUVW5kb09iamVjdCogdW5kb09iamVjdCkgeyBtX3VuZG9WZWN0b3IuYXBwZW5kKHVuZG9P
YmplY3QpOyB9Ci0gICAgRFJUVW5kb09iamVjdCogcG9wKCkgeyBEUlRVbmRvT2JqZWN0KiB0b3Ag
PSBtX3VuZG9WZWN0b3IubGFzdCgpOyBtX3VuZG9WZWN0b3IucmVtb3ZlTGFzdCgpOyByZXR1cm4g
dG9wOyB9CisgICAgc3RkOjp1bmlxdWVfcHRyPERSVFVuZG9PYmplY3Q+IHBvcCgpIHsgc3RkOjp1
bmlxdWVfcHRyPERSVFVuZG9PYmplY3Q+IHRvcCA9IHN0ZDo6bW92ZShtX3VuZG9WZWN0b3IubGFz
dCgpKTsgbV91bmRvVmVjdG9yLnJlbW92ZUxhc3QoKTsgcmV0dXJuIHN0ZDo6bW92ZSh0b3ApOyB9
CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9yPERSVFVuZG9PYmplY3QqPiBtX3VuZG9WZWN0b3I7Cisg
ICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxEUlRVbmRvT2JqZWN0Pj4gbV91bmRvVmVjdG9yOwog
fTsKIAogY2xhc3MgRFJUVW5kb01hbmFnZXIgewpAQCAtOTgsMTUgKzk2LDE1IEBAIHB1YmxpYzoK
ICAgICBib29sIGNhblVuZG8oKSB7IHJldHVybiAhbV91bmRvU3RhY2stPmlzRW1wdHkoKTsgfQog
CiBwcml2YXRlOgotICAgIE93blB0cjxEUlRVbmRvU3RhY2s+IG1fcmVkb1N0YWNrOwotICAgIE93
blB0cjxEUlRVbmRvU3RhY2s+IG1fdW5kb1N0YWNrOworICAgIHN0ZDo6dW5pcXVlX3B0cjxEUlRV
bmRvU3RhY2s+IG1fcmVkb1N0YWNrOworICAgIHN0ZDo6dW5pcXVlX3B0cjxEUlRVbmRvU3RhY2s+
IG1fdW5kb1N0YWNrOwogICAgIGJvb2wgbV9pc1JlZG9pbmc7CiAgICAgYm9vbCBtX2lzVW5kb2lu
ZzsKIH07CiAKIERSVFVuZG9NYW5hZ2VyOjpEUlRVbmRvTWFuYWdlcigpCi0gICAgOiBtX3JlZG9T
dGFjayhhZG9wdFB0cihuZXcgRFJUVW5kb1N0YWNrKSkKLSAgICAsIG1fdW5kb1N0YWNrKGFkb3B0
UHRyKG5ldyBEUlRVbmRvU3RhY2spKQorICAgIDogbV9yZWRvU3RhY2soc3RkOjptYWtlX3VuaXF1
ZTxEUlRVbmRvU3RhY2s+KCkpCisgICAgLCBtX3VuZG9TdGFjayhzdGQ6Om1ha2VfdW5pcXVlPERS
VFVuZG9TdGFjaz4oKSkKICAgICAsIG1faXNSZWRvaW5nKGZhbHNlKQogICAgICwgbV9pc1VuZG9p
bmcoZmFsc2UpCiB7CkBAIC0xMzQsOSArMTMyLDggQEAgdm9pZCBEUlRVbmRvTWFuYWdlcjo6cmVk
bygpCiAKICAgICBtX2lzUmVkb2luZyA9IHRydWU7CiAKLSAgICBEUlRVbmRvT2JqZWN0KiByZWRv
T2JqZWN0ID0gbV9yZWRvU3RhY2stPnBvcCgpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxEUlRVbmRv
T2JqZWN0PiByZWRvT2JqZWN0ID0gbV9yZWRvU3RhY2stPnBvcCgpOwogICAgIHJlZG9PYmplY3Qt
Pmludm9rZSgpOwotICAgIGRlbGV0ZSByZWRvT2JqZWN0OwogCiAgICAgbV9pc1JlZG9pbmcgPSBm
YWxzZTsKIH0KQEAgLTE0OCwxNiArMTQ1LDE1IEBAIHZvaWQgRFJUVW5kb01hbmFnZXI6OnVuZG8o
KQogCiAgICAgbV9pc1VuZG9pbmcgPSB0cnVlOwogCi0gICAgRFJUVW5kb09iamVjdCogdW5kb09i
amVjdCA9IG1fdW5kb1N0YWNrLT5wb3AoKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RFJUVW5kb09i
amVjdD4gdW5kb09iamVjdCA9IG1fdW5kb1N0YWNrLT5wb3AoKTsKICAgICB1bmRvT2JqZWN0LT5p
bnZva2UoKTsKLSAgICBkZWxldGUgdW5kb09iamVjdDsKIAogICAgIG1faXNVbmRvaW5nID0gZmFs
c2U7CiB9CiAKIFVJRGVsZWdhdGU6OlVJRGVsZWdhdGUoKQogICAgIDogbV9yZWZDb3VudCgxKQot
ICAgICwgbV91bmRvTWFuYWdlcihhZG9wdFB0cihuZXcgRFJUVW5kb01hbmFnZXIpKQorICAgICwg
bV91bmRvTWFuYWdlcihzdGQ6Om1ha2VfdW5pcXVlPERSVFVuZG9NYW5hZ2VyPigpKQogICAgICwg
bV9kZXNrdG9wTm90aWZpY2F0aW9ucyhuZXcgRFJURGVza3RvcE5vdGlmaWNhdGlvblByZXNlbnRl
cikKIHsKICAgICBtX2ZyYW1lLmJvdHRvbSA9IDA7CkBAIC0xNjgsNyArMTY0LDcgQEAgVUlEZWxl
Z2F0ZTo6VUlEZWxlZ2F0ZSgpCiAKIHZvaWQgVUlEZWxlZ2F0ZTo6cmVzZXRVbmRvTWFuYWdlcigp
CiB7Ci0gICAgbV91bmRvTWFuYWdlciA9IGFkb3B0UHRyKG5ldyBEUlRVbmRvTWFuYWdlcik7Cisg
ICAgbV91bmRvTWFuYWdlciA9IHN0ZDo6bWFrZV91bmlxdWU8RFJUVW5kb01hbmFnZXI+KCk7CiB9
CiAKIEhSRVNVTFQgVUlEZWxlZ2F0ZTo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQq
KiBwcHZPYmplY3QpCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vVUlEZWxlZ2F0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9VSURlbGVnYXRlLmgJKHJl
dmlzaW9uIDE2NzI3MikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9VSURlbGVnYXRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQwNyw3ICs0MDcsNyBAQCBwcm90ZWN0ZWQ6CiAKIHByaXZhdGU6
CiAgICAgUkVDVCBtX2ZyYW1lOwotICAgIE93blB0cjxEUlRVbmRvTWFuYWdlcj4gbV91bmRvTWFu
YWdlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RFJUVW5kb01hbmFnZXI+IG1fdW5kb01hbmFnZXI7
CiAKICAgICBDT01QdHI8SVdlYkRlc2t0b3BOb3RpZmljYXRpb25zRGVsZWdhdGU+IG1fZGVza3Rv
cE5vdGlmaWNhdGlvbnM7CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229426</attachid>
            <date>2014-04-15 21:14:17 -0700</date>
            <delta_ts>2014-04-16 09:12:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-131631-20140415211356.patch</filename>
            <type>text/plain</type>
            <size>18843</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NzM0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE0LTA0LTE1ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dIEVsaW1pbmF0ZSB1
c2Ugb2YgZGVsZXRlQWxsVmFsdWVzIGluIFdpbmRvd3MgRmlsZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMTYzMQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSB0byB1c2Ugc3RkOjp1bmlxdWVf
cHRyIGZvciBvYmplY3QgbGlmZXRpbWUuIEdldCByaWQgb2YKKyAgICAgICAgZGVsZXRlQWxsVmFs
dWVzIG5vdyB0aGF0IGl0IGlzIG5vIGxvbmVyIG5lZWRlZC4gVXNlIHJhbmdlZCBmb3IKKyAgICAg
ICAgbG9vcHMgd2hlcmUgcG9zc2libGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vV0NEYXRh
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldDRW51bUZvcm1hdEV0Yzo6V0NFbnVtRm9y
bWF0RXRjKToKKyAgICAgICAgKFdlYkNvcmU6OldDRGF0YU9iamVjdDo6fldDRGF0YU9iamVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpXQ0RhdGFPYmplY3Q6OkdldERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6V0NEYXRhT2JqZWN0OjpRdWVyeUdldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V0NE
YXRhT2JqZWN0OjpTZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldDRGF0YU9iamVjdDo6Y2xl
YXJEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0Lmg6CisKIDIwMTQt
MDQtMTUgIEh5b3dvbiBLaW0gIDxodzEwMDgua2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIE1h
a2UgcGFnZSBvdmVybGF5IGZ1bmN0aW9uYWxpdHkgd29ya2luZyBvbiBjb29yZGluYXRlZCBncmFw
aGljcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3Qu
Y3BwCShyZXZpc2lvbiAxNjczNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV0NE
YXRhT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNywgMjAxNCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiw3ICszNiw3IEBAIGNsYXNzIFdDRW51
bUZvcm1hdEV0YyA6IHB1YmxpYyBJRW51bUZPUk0KIHsKIHB1YmxpYzoKICAgICBXQ0VudW1Gb3Jt
YXRFdGMoY29uc3QgVmVjdG9yPEZPUk1BVEVUQz4mIGZvcm1hdHMpOwotICAgIFdDRW51bUZvcm1h
dEV0Yyhjb25zdCBWZWN0b3I8Rk9STUFURVRDKj4mIGZvcm1hdHMpOworICAgIFdDRW51bUZvcm1h
dEV0Yyhjb25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEZPUk1BVEVUQz4+JiBmb3JtYXRzKTsK
IAogICAgIC8vSVVua25vd24gbWVtYmVycwogICAgIFNURE1FVEhPRChRdWVyeUludGVyZmFjZSko
UkVGSUlELCB2b2lkKiopOwpAQCAtNTUsOCArNTUsNiBAQCBwcml2YXRlOgogICAgIHNpemVfdCBt
X2N1cnJlbnQ7CiB9OwogCi0KLQogV0NFbnVtRm9ybWF0RXRjOjpXQ0VudW1Gb3JtYXRFdGMoY29u
c3QgVmVjdG9yPEZPUk1BVEVUQz4mIGZvcm1hdHMpCiA6IG1fcmVmKDEpCiAsIG1fY3VycmVudCgw
KQpAQCAtNjUsMTIgKzYzLDEyIEBAIFdDRW51bUZvcm1hdEV0Yzo6V0NFbnVtRm9ybWF0RXRjKGNv
bnN0IFYKICAgICAgICAgbV9mb3JtYXRzLmFwcGVuZChmb3JtYXRzW2ldKTsKIH0KIAotV0NFbnVt
Rm9ybWF0RXRjOjpXQ0VudW1Gb3JtYXRFdGMoY29uc3QgVmVjdG9yPEZPUk1BVEVUQyo+JiBmb3Jt
YXRzKQotOiBtX3JlZigxKQotLCBtX2N1cnJlbnQoMCkKK1dDRW51bUZvcm1hdEV0Yzo6V0NFbnVt
Rm9ybWF0RXRjKGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Rk9STUFURVRDPj4mIGZvcm1h
dHMpCisgICAgOiBtX3JlZigxKQorICAgICwgbV9jdXJyZW50KDApCiB7Ci0gICAgZm9yKHNpemVf
dCBpID0gMDsgaSA8IGZvcm1hdHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fZm9ybWF0cy5hcHBl
bmQoKmZvcm1hdHNbaV0pOworICAgIGZvciAoYXV0byYgZm9ybWF0IDogZm9ybWF0cykKKyAgICAg
ICAgbV9mb3JtYXRzLmFwcGVuZCgqZm9ybWF0KTsKIH0KIAogU1RETUVUSE9ESU1QICBXQ0VudW1G
b3JtYXRFdGM6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KQpA
QCAtMTc4LDE1ICsxNzYsNiBAQCBXQ0RhdGFPYmplY3Q6OldDRGF0YU9iamVjdCgpCiB7CiB9CiAK
LVdDRGF0YU9iamVjdDo6fldDRGF0YU9iamVjdCgpCi17Ci0gICAgZm9yKHNpemVfdCBpID0gMDsg
aSA8IG1fbWVkaXVtLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIFJlbGVhc2VTdGdNZWRpdW0obV9t
ZWRpdW1baV0pOwotICAgICAgICBkZWxldGUgbV9tZWRpdW1baV07Ci0gICAgfQotICAgIFdURjo6
ZGVwcmVjYXRlZERlbGV0ZUFsbFZhbHVlcyhtX2Zvcm1hdHMpOwotfQotCiBTVERNRVRIT0RJTVAg
V0NEYXRhT2JqZWN0OjpRdWVyeUludGVyZmFjZShSRUZJSUQgcmlpZCx2b2lkKiogcHB2T2JqZWN0
KQogewogICAgICpwcHZPYmplY3QgPSAwOwpAQCAtMjIwLDEyICsyMDksMTIgQEAgU1RETUVUSE9E
SU1QIFdDRGF0YU9iamVjdDo6R2V0RGF0YShGT1JNQQogICAgICAgICByZXR1cm4gRV9QT0lOVEVS
OwogICAgIHBtZWRpdW0tPmhHbG9iYWwgPSAwOwogCi0gICAgZm9yKHNpemVfdCBpPTA7IGkgPCBt
X2Zvcm1hdHMuc2l6ZSgpOyArK2kpIHsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZm9y
bWF0cy5zaXplKCk7ICsraSkgewogICAgICAgICBpZigvKnBmb3JtYXRldGNJbi0+dHltZWQgJiBt
X2Zvcm1hdHNbaV0tPnR5bWVkICYmKi8gICAgIC8vIHR5bWVkIGNhbiBiZSAwIChUWU1FRF9OVUxM
KSAtIGJ1dCBpdCBjYW4gaGF2ZSBhIG1lZGl1bSB0aGF0IGNvbnRhaW5zIGFuIHBVbmtGb3JSZWxl
YXNlCiAgICAgICAgICAgICBwZm9ybWF0ZXRjSW4tPmxpbmRleCA9PSBtX2Zvcm1hdHNbaV0tPmxp
bmRleCAmJgogICAgICAgICAgICAgcGZvcm1hdGV0Y0luLT5kd0FzcGVjdCA9PSBtX2Zvcm1hdHNb
aV0tPmR3QXNwZWN0ICYmCiAgICAgICAgICAgICBwZm9ybWF0ZXRjSW4tPmNmRm9ybWF0ID09IG1f
Zm9ybWF0c1tpXS0+Y2ZGb3JtYXQpIHsKLSAgICAgICAgICAgIENvcHlNZWRpdW0ocG1lZGl1bSwg
bV9tZWRpdW1baV0sIG1fZm9ybWF0c1tpXSk7CisgICAgICAgICAgICBDb3B5TWVkaXVtKHBtZWRp
dW0sIG1fbWVkaXVtW2ldLmdldCgpLCBtX2Zvcm1hdHNbaV0uZ2V0KCkpOwogICAgICAgICAgICAg
cmV0dXJuIFNfT0s7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNDUsMTIgKzIzNCwxMiBAQCBTVERN
RVRIT0RJTVAgV0NEYXRhT2JqZWN0OjpRdWVyeUdldERhdGEoCiAgICAgaWYgKCEoRFZBU1BFQ1Rf
Q09OVEVOVCAmIHBmb3JtYXRldGMtPmR3QXNwZWN0KSkKICAgICAgICAgcmV0dXJuIChEVl9FX0RW
QVNQRUNUKTsKICAgICBIUkVTVUxUICBociA9IERWX0VfVFlNRUQ7Ci0gICAgZm9yKHNpemVfdCBp
ID0gMDsgaSA8IG1fZm9ybWF0cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZihwZm9ybWF0ZXRj
LT50eW1lZCAmIG1fZm9ybWF0c1tpXS0+dHltZWQpIHsKLSAgICAgICAgICAgIGlmKHBmb3JtYXRl
dGMtPmNmRm9ybWF0ID09IG1fZm9ybWF0c1tpXS0+Y2ZGb3JtYXQpCisgICAgZm9yIChhdXRvJiBm
b3JtYXQgOiBtX2Zvcm1hdHMpIHsKKyAgICAgICAgaWYgKHBmb3JtYXRldGMtPnR5bWVkICYgZm9y
bWF0LT50eW1lZCkgeworICAgICAgICAgICAgaWYgKHBmb3JtYXRldGMtPmNmRm9ybWF0ID09IGZv
cm1hdC0+Y2ZGb3JtYXQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFNfT0s7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgaHIgPSBEVl9FX0NMSVBGT1JNQVQ7CisKKyAgICAgICAg
ICAgIGhyID0gRFZfRV9DTElQRk9STUFUOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIGhyID0gRFZfRV9UWU1FRDsKQEAgLTI2OCwyOCArMjU3LDIwIEBAIFNURE1FVEhPRElN
UCBXQ0RhdGFPYmplY3Q6OlNldERhdGEoRk9STUEKICAgICBpZighcGZvcm1hdGV0YyB8fCAhcG1l
ZGl1bSkKICAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKIAotICAgIEZPUk1BVEVUQyogZmV0Yz1u
ZXcgRk9STUFURVRDOwotICAgIGlmICghZmV0YykKLSAgICAgICAgcmV0dXJuIEVfT1VUT0ZNRU1P
Ulk7Ci0KLSAgICBTVEdNRURJVU0qIHBTdGdNZWQgPSBuZXcgU1RHTUVESVVNOwotCi0gICAgaWYo
IXBTdGdNZWQpIHsKLSAgICAgICAgZGVsZXRlIGZldGM7Ci0gICAgICAgIHJldHVybiBFX09VVE9G
TUVNT1JZOwotICAgIH0KKyAgICBhdXRvIGZldGMgPSBzdGQ6Om1ha2VfdW5pcXVlPEZPUk1BVEVU
Qz4oKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U1RHTUVESVVNLCBTdGdNZWRpdW1EZWxldGVyPiBw
U3RnTWVkKG5ldyBTVEdNRURJVU0pOwogCi0gICAgWmVyb01lbW9yeShmZXRjLHNpemVvZihGT1JN
QVRFVEMpKTsKLSAgICBaZXJvTWVtb3J5KHBTdGdNZWQsc2l6ZW9mKFNUR01FRElVTSkpOworICAg
IFplcm9NZW1vcnkoZmV0Yy5nZXQoKSwgc2l6ZW9mKEZPUk1BVEVUQykpOworICAgIFplcm9NZW1v
cnkocFN0Z01lZC5nZXQoKSwgc2l6ZW9mKFNUR01FRElVTSkpOwogCiAgICAgKmZldGMgPSAqcGZv
cm1hdGV0YzsKLSAgICBtX2Zvcm1hdHMuYXBwZW5kKGZldGMpOworICAgIG1fZm9ybWF0cy5hcHBl
bmQoc3RkOjptb3ZlKGZldGMpKTsKIAogICAgIGlmKGZSZWxlYXNlKQogICAgICAgICAqcFN0Z01l
ZCA9ICpwbWVkaXVtOwogICAgIGVsc2UKLSAgICAgICAgQ29weU1lZGl1bShwU3RnTWVkLCBwbWVk
aXVtLCBwZm9ybWF0ZXRjKTsKLSAgICBtX21lZGl1bS5hcHBlbmQocFN0Z01lZCk7CisgICAgICAg
IENvcHlNZWRpdW0ocFN0Z01lZC5nZXQoKSwgcG1lZGl1bSwgcGZvcm1hdGV0Yyk7CisgICAgbV9t
ZWRpdW0uYXBwZW5kKHN0ZDo6bW92ZShwU3RnTWVkKSk7CiAKICAgICByZXR1cm4gU19PSzsKIH0K
QEAgLTM3NiwxNyArMzU3LDEwIEBAIHZvaWQgV0NEYXRhT2JqZWN0OjpjbGVhckRhdGEoQ0xJUEZP
Uk1BVAogICAgIHNpemVfdCBwdHIgPSAwOwogICAgIHdoaWxlIChwdHIgPCBtX2Zvcm1hdHMuc2l6
ZSgpKSB7CiAgICAgICAgIGlmIChtX2Zvcm1hdHNbcHRyXS0+Y2ZGb3JtYXQgPT0gZm9ybWF0KSB7
Ci0gICAgICAgICAgICBGT1JNQVRFVEMqIGN1cnJlbnQgPSBtX2Zvcm1hdHNbcHRyXTsKLSAgICAg
ICAgICAgIG1fZm9ybWF0c1twdHJdID0gbV9mb3JtYXRzW21fZm9ybWF0cy5zaXplKCkgLSAxXTsK
LSAgICAgICAgICAgIG1fZm9ybWF0c1ttX2Zvcm1hdHMuc2l6ZSgpIC0gMV0gPSAwOworICAgICAg
ICAgICAgbV9mb3JtYXRzW3B0cl0gPSBzdGQ6Om1vdmUobV9mb3JtYXRzW21fZm9ybWF0cy5zaXpl
KCkgLSAxXSk7CiAgICAgICAgICAgICBtX2Zvcm1hdHMucmVtb3ZlTGFzdCgpOwotICAgICAgICAg
ICAgZGVsZXRlIGN1cnJlbnQ7Ci0gICAgICAgICAgICBTVEdNRURJVU0qIG1lZGl1bSA9IG1fbWVk
aXVtW3B0cl07Ci0gICAgICAgICAgICBtX21lZGl1bVtwdHJdID0gbV9tZWRpdW1bbV9tZWRpdW0u
c2l6ZSgpIC0gMV07Ci0gICAgICAgICAgICBtX21lZGl1bVttX21lZGl1bS5zaXplKCkgLSAxXSA9
IDA7CisgICAgICAgICAgICBtX21lZGl1bVtwdHJdID0gc3RkOjptb3ZlKG1fbWVkaXVtW21fbWVk
aXVtLnNpemUoKSAtIDFdKTsKICAgICAgICAgICAgIG1fbWVkaXVtLnJlbW92ZUxhc3QoKTsKLSAg
ICAgICAgICAgIFJlbGVhc2VTdGdNZWRpdW0obWVkaXVtKTsKLSAgICAgICAgICAgIGRlbGV0ZSBt
ZWRpdW07CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBwdHIrKzsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vV0NEYXRhT2JqZWN0LmgJKHJldmlz
aW9uIDE2NzM0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9XQ0RhdGFPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAxNCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0zNCw2ICszNCwxMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK3N0cnVjdCBTdGdNZWRpdW1EZWxldGVyIHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoU1RHTUVE
SVVNKiBtZWRpdW0pCisgICAgeworICAgICAgICA6OlJlbGVhc2VTdGdNZWRpdW0obWVkaXVtKTsK
KyAgICB9Cit9OworCiBjbGFzcyBXQ0RhdGFPYmplY3QgOiBwdWJsaWMgSURhdGFPYmplY3Qgewog
cHVibGljOgogICAgIHZvaWQgQ29weU1lZGl1bShTVEdNRURJVU0qIHBNZWREZXN0LCBTVEdNRURJ
VU0qIHBNZWRTcmMsIEZPUk1BVEVUQyogcEZtdFNyYyk7CkBAIC02MCwxMCArNjcsOSBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIEhSRVNVTFQgY3JlYXRlSW5zdGFuY2UoV0NEYXRhT2JqZWN0KiosIGNv
bnN0IERyYWdEYXRhTWFwJik7CiBwcml2YXRlOgogICAgIFdDRGF0YU9iamVjdCgpOwotICAgIHZp
cnR1YWwgfldDRGF0YU9iamVjdCgpOwogICAgIGxvbmcgbV9yZWY7Ci0gICAgVmVjdG9yPEZPUk1B
VEVUQyo+IG1fZm9ybWF0czsKLSAgICBWZWN0b3I8U1RHTUVESVVNKj4gbV9tZWRpdW07CisgICAg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxGT1JNQVRFVEM+PiBtX2Zvcm1hdHM7CisgICAgVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxTVEdNRURJVU0sIFN0Z01lZGl1bURlbGV0ZXI+PiBtX21lZGl1bTsK
IH07CiAKIH0KSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDE2NzM0MSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDM1IEBACisyMDE0LTA0LTE1ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1A
YXBwbGUuY29tPgorCisgICAgICAgIFtXaW5dIEVsaW1pbmF0ZSB1c2Ugb2YgZGVsZXRlQWxsVmFs
dWVzIGluIFdpbmRvd3MgRmlsZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzMTYzMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFN3aXRjaCB0byBzdGQ6OnVuaXF1ZV9wdHIgZm9yIG1lbW9yeSBsaWZldGlt
ZS4gR2V0IHJpZCBvZgorICAgICAgICBkZWxldGVBbGxWYWx1ZXMgbm93IHRoYXQgaXQgaXMgbm8g
bG9uZ2VyIG5lZWRlZC4gVXNlIHJhbmdlZAorICAgICAgICBmb3IgbG9vcHMgd2hlcmUgcG9zc2li
bGUuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVjdC5jcHA6Cisg
ICAgICAgIChXQ0VudW1Gb3JtYXRFdGM6OldDRW51bUZvcm1hdEV0Yyk6CisgICAgICAgIChEUlRE
YXRhT2JqZWN0Ojp+RFJURGF0YU9iamVjdCk6CisgICAgICAgIChEUlREYXRhT2JqZWN0OjpHZXRE
YXRhKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OlF1ZXJ5R2V0RGF0YSk6CisgICAgICAgIChE
UlREYXRhT2JqZWN0OjpTZXREYXRhKToKKyAgICAgICAgKERSVERhdGFPYmplY3Q6OmNsZWFyRGF0
YSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3QuaDoKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vVUlEZWxlZ2F0ZS5jcHA6CisgICAgICAgIChEUlRVbmRv
T2JqZWN0OjpEUlRVbmRvT2JqZWN0KToKKyAgICAgICAgKERSVFVuZG9PYmplY3Q6On5EUlRVbmRv
T2JqZWN0KToKKyAgICAgICAgKERSVFVuZG9TdGFjazo6fkRSVFVuZG9TdGFjayk6CisgICAgICAg
IChEUlRVbmRvU3RhY2s6OmNsZWFyKToKKyAgICAgICAgKERSVFVuZG9TdGFjazo6cG9wKToKKyAg
ICAgICAgKERSVFVuZG9NYW5hZ2VyOjpEUlRVbmRvTWFuYWdlcik6CisgICAgICAgIChEUlRVbmRv
TWFuYWdlcjo6cmVkbyk6CisgICAgICAgIChEUlRVbmRvTWFuYWdlcjo6dW5kbyk6CisgICAgICAg
IChVSURlbGVnYXRlOjpVSURlbGVnYXRlKToKKyAgICAgICAgKFVJRGVsZWdhdGU6OnJlc2V0VW5k
b01hbmFnZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9VSURlbGVnYXRlLmg6CisK
IDIwMTQtMDQtMTUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBV
cGRhdGUgTExWTSBleHBvcnQgc2NycHQgdG8gaGFuZGxlIHRoZSBidWlsZCBkaXJlY3RvcnkgYmVp
bmcgZGlmZmVyZW50IGZyb20gdGhlCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJU
RGF0YU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RS
VERhdGFPYmplY3QuY3BwCShyZXZpc2lvbiAxNjczNDEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJl
ZS93aW4vRFJURGF0YU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMTQgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMiBCYWlkdSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtNTAsNyArNTAsNyBAQCBGT1JNQVRFVEMqIGNmVXJs
V0Zvcm1hdCgpCiBjbGFzcyBXQ0VudW1Gb3JtYXRFdGMgOiBwdWJsaWMgSUVudW1GT1JNQVRFVEMg
ewogcHVibGljOgogICAgIGV4cGxpY2l0IFdDRW51bUZvcm1hdEV0Yyhjb25zdCBWZWN0b3I8Rk9S
TUFURVRDPiYgZm9ybWF0cyk7Ci0gICAgZXhwbGljaXQgV0NFbnVtRm9ybWF0RXRjKGNvbnN0IFZl
Y3RvcjxGT1JNQVRFVEMqPiYgZm9ybWF0cyk7CisgICAgZXhwbGljaXQgV0NFbnVtRm9ybWF0RXRj
KGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Rk9STUFURVRDPj4mIGZvcm1hdHMpOwogCiAg
ICAgLy8gSVVua25vd24gbWVtYmVycwogICAgIFNURE1FVEhPRChRdWVyeUludGVyZmFjZSkoUkVG
SUlELCB2b2lkKiopOwpAQCAtNzYsMTIgKzc2LDEyIEBAIFdDRW51bUZvcm1hdEV0Yzo6V0NFbnVt
Rm9ybWF0RXRjKGNvbnN0IFYKIHsKIH0KIAotV0NFbnVtRm9ybWF0RXRjOjpXQ0VudW1Gb3JtYXRF
dGMoY29uc3QgVmVjdG9yPEZPUk1BVEVUQyo+JiBmb3JtYXRzKQorV0NFbnVtRm9ybWF0RXRjOjpX
Q0VudW1Gb3JtYXRFdGMoY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxGT1JNQVRFVEM+PiYg
Zm9ybWF0cykKICAgICA6IG1fcmVmKDEpCiAgICAgLCBtX2N1cnJlbnQoMCkKIHsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGZvcm1hdHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fZm9ybWF0
cy5hcHBlbmQoKmZvcm1hdHNbaV0pOworICAgIGZvciAoYXV0byYgZm9ybWF0IDogZm9ybWF0cykK
KyAgICAgICAgbV9mb3JtYXRzLmFwcGVuZCgqZm9ybWF0KTsKIH0KIAogU1RETUVUSE9ESU1QIFdD
RW51bUZvcm1hdEV0Yzo6UXVlcnlJbnRlcmZhY2UoUkVGSUlEIHJpaWQsIHZvaWQqKiBwcHZPYmpl
Y3QpCkBAIC0xNzUsMTUgKzE3NSw2IEBAIERSVERhdGFPYmplY3Q6OkRSVERhdGFPYmplY3QoKQog
ewogfQogCi1EUlREYXRhT2JqZWN0Ojp+RFJURGF0YU9iamVjdCgpCi17Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX21lZGl1bS5zaXplKCk7ICsraSkgewotICAgICAgICBSZWxlYXNlU3Rn
TWVkaXVtKG1fbWVkaXVtW2ldKTsKLSAgICAgICAgZGVsZXRlIG1fbWVkaXVtW2ldOwotICAgIH0K
LSAgICBXVEY6OmRlcHJlY2F0ZWREZWxldGVBbGxWYWx1ZXMobV9mb3JtYXRzKTsKLX0KLQogU1RE
TUVUSE9ESU1QIERSVERhdGFPYmplY3Q6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJRCByaWlkLCB2b2lk
KiogcHB2T2JqZWN0KQogewogICAgICpwcHZPYmplY3QgPSAwOwpAQCAtMjE4LDcgKzIwOSw3IEBA
IFNURE1FVEhPRElNUCBEUlREYXRhT2JqZWN0OjpHZXREYXRhKEZPUk0KIAogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9mb3JtYXRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmIChwZm9y
bWF0ZXRjSW4tPmxpbmRleCA9PSBtX2Zvcm1hdHNbaV0tPmxpbmRleCAmJiBwZm9ybWF0ZXRjSW4t
PmR3QXNwZWN0ID09IG1fZm9ybWF0c1tpXS0+ZHdBc3BlY3QgJiYgcGZvcm1hdGV0Y0luLT5jZkZv
cm1hdCA9PSBtX2Zvcm1hdHNbaV0tPmNmRm9ybWF0KSB7Ci0gICAgICAgICAgICBDb3B5TWVkaXVt
KHBtZWRpdW0sIG1fbWVkaXVtW2ldLCBtX2Zvcm1hdHNbaV0pOworICAgICAgICAgICAgQ29weU1l
ZGl1bShwbWVkaXVtLCBtX21lZGl1bVtpXS5nZXQoKSwgbV9mb3JtYXRzW2ldLmdldCgpKTsKICAg
ICAgICAgICAgIHJldHVybiBTX09LOwogICAgICAgICB9CiAgICAgfQpAQCAtMjM4LDkgKzIyOSw5
IEBAIFNURE1FVEhPRElNUCBEUlREYXRhT2JqZWN0OjpRdWVyeUdldERhdGEKICAgICBpZiAoIShE
VkFTUEVDVF9DT05URU5UICYgcGZvcm1hdGV0Yy0+ZHdBc3BlY3QpKQogICAgICAgICByZXR1cm4g
KERWX0VfRFZBU1BFQ1QpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2Zvcm1hdHMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKHBmb3JtYXRldGMtPnR5bWVkICYgbV9mb3JtYXRz
W2ldLT50eW1lZCkgewotICAgICAgICAgICAgaWYgKHBmb3JtYXRldGMtPmNmRm9ybWF0ID09IG1f
Zm9ybWF0c1tpXS0+Y2ZGb3JtYXQpCisgICAgZm9yIChhdXRvJiBmb3JtYXQgOiBtX2Zvcm1hdHMp
IHsKKyAgICAgICAgaWYgKHBmb3JtYXRldGMtPnR5bWVkICYgZm9ybWF0LT50eW1lZCkgeworICAg
ICAgICAgICAgaWYgKHBmb3JtYXRldGMtPmNmRm9ybWF0ID09IGZvcm1hdC0+Y2ZGb3JtYXQpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIFNfT0s7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNTcsMjgg
KzI0OCwyMCBAQCBTVERNRVRIT0RJTVAgRFJURGF0YU9iamVjdDo6U2V0RGF0YShGT1JNCiAgICAg
aWYgKCFwZm9ybWF0ZXRjIHx8ICFwbWVkaXVtKQogICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwog
Ci0gICAgRk9STUFURVRDKiBmb3JtYXRldGMgPSBuZXcgRk9STUFURVRDOwotICAgIGlmICghZm9y
bWF0ZXRjKQotICAgICAgICByZXR1cm4gRV9PVVRPRk1FTU9SWTsKLQotICAgIFNUR01FRElVTSog
cFN0Z01lZCA9IG5ldyBTVEdNRURJVU07Ci0KLSAgICBpZiAoIXBTdGdNZWQpIHsKLSAgICAgICAg
ZGVsZXRlIGZvcm1hdGV0YzsKLSAgICAgICAgcmV0dXJuIEVfT1VUT0ZNRU1PUlk7Ci0gICAgfQor
ICAgIGF1dG8gZm9ybWF0ZXRjID0gc3RkOjptYWtlX3VuaXF1ZTxGT1JNQVRFVEM+KCk7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFNUR01FRElVTSwgU3RnTWVkaXVtRGVsZXRlcj4gcFN0Z01lZChuZXcg
U1RHTUVESVVNKTsKIAotICAgIFplcm9NZW1vcnkoZm9ybWF0ZXRjLCBzaXplb2YoRk9STUFURVRD
KSk7Ci0gICAgWmVyb01lbW9yeShwU3RnTWVkLCBzaXplb2YoU1RHTUVESVVNKSk7CisgICAgWmVy
b01lbW9yeShmb3JtYXRldGMuZ2V0KCksIHNpemVvZihGT1JNQVRFVEMpKTsKKyAgICBaZXJvTWVt
b3J5KHBTdGdNZWQuZ2V0KCksIHNpemVvZihTVEdNRURJVU0pKTsKIAogICAgICpmb3JtYXRldGMg
PSAqcGZvcm1hdGV0YzsKLSAgICBtX2Zvcm1hdHMuYXBwZW5kKGZvcm1hdGV0Yyk7CisgICAgbV9m
b3JtYXRzLmFwcGVuZChzdGQ6Om1vdmUoZm9ybWF0ZXRjKSk7CiAKICAgICBpZiAoZlJlbGVhc2Up
CiAgICAgICAgICpwU3RnTWVkID0gKnBtZWRpdW07CiAgICAgZWxzZQotICAgICAgICBDb3B5TWVk
aXVtKHBTdGdNZWQsIHBtZWRpdW0sIHBmb3JtYXRldGMpOwotICAgIG1fbWVkaXVtLmFwcGVuZChw
U3RnTWVkKTsKKyAgICAgICAgQ29weU1lZGl1bShwU3RnTWVkLmdldCgpLCBwbWVkaXVtLCBwZm9y
bWF0ZXRjKTsKKyAgICBtX21lZGl1bS5hcHBlbmQoc3RkOjptb3ZlKHBTdGdNZWQpKTsKIAogICAg
IHJldHVybiBTX09LOwogfQpAQCAtMzYzLDE3ICszNDYsMTAgQEAgdm9pZCBEUlREYXRhT2JqZWN0
OjpjbGVhckRhdGEoQ0xJUEZPUk1BVAogICAgIHNpemVfdCBwb3NpdGlvbiA9IDA7CiAgICAgd2hp
bGUgKHBvc2l0aW9uIDwgbV9mb3JtYXRzLnNpemUoKSkgewogICAgICAgICBpZiAobV9mb3JtYXRz
W3Bvc2l0aW9uXS0+Y2ZGb3JtYXQgPT0gZm9ybWF0KSB7Ci0gICAgICAgICAgICBGT1JNQVRFVEMq
IGN1cnJlbnQgPSBtX2Zvcm1hdHNbcG9zaXRpb25dOwotICAgICAgICAgICAgbV9mb3JtYXRzW3Bv
c2l0aW9uXSA9IG1fZm9ybWF0c1ttX2Zvcm1hdHMuc2l6ZSgpIC0gMV07Ci0gICAgICAgICAgICBt
X2Zvcm1hdHNbbV9mb3JtYXRzLnNpemUoKSAtIDFdID0gMDsKKyAgICAgICAgICAgIG1fZm9ybWF0
c1twb3NpdGlvbl0gPSBzdGQ6Om1vdmUobV9mb3JtYXRzW21fZm9ybWF0cy5zaXplKCkgLSAxXSk7
CiAgICAgICAgICAgICBtX2Zvcm1hdHMucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgZGVsZXRl
IGN1cnJlbnQ7Ci0gICAgICAgICAgICBTVEdNRURJVU0qIG1lZGl1bSA9IG1fbWVkaXVtW3Bvc2l0
aW9uXTsKLSAgICAgICAgICAgIG1fbWVkaXVtW3Bvc2l0aW9uXSA9IG1fbWVkaXVtW21fbWVkaXVt
LnNpemUoKSAtIDFdOwotICAgICAgICAgICAgbV9tZWRpdW1bbV9tZWRpdW0uc2l6ZSgpIC0gMV0g
PSAwOworICAgICAgICAgICAgbV9tZWRpdW1bcG9zaXRpb25dID0gc3RkOjptb3ZlKG1fbWVkaXVt
W21fbWVkaXVtLnNpemUoKSAtIDFdKTsKICAgICAgICAgICAgIG1fbWVkaXVtLnJlbW92ZUxhc3Qo
KTsKLSAgICAgICAgICAgIFJlbGVhc2VTdGdNZWRpdW0obWVkaXVtKTsKLSAgICAgICAgICAgIGRl
bGV0ZSBtZWRpdW07CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBw
b3NpdGlvbisrOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0RSVERhdGFPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9iamVjdC5o
CShyZXZpc2lvbiAxNjczNDEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vRFJURGF0YU9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA3LCAyMDE0IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMTIgQmFpZHUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKQEAgLTM3LDYgKzM3LDEzIEBAIEZPUk1BVEVUQyogY2ZGaWxlTmFtZVdGb3JtYXQoKTsK
IAogRk9STUFURVRDKiBjZlVybFdGb3JtYXQoKTsKIAorc3RydWN0IFN0Z01lZGl1bURlbGV0ZXIg
eworICAgIHZvaWQgb3BlcmF0b3IoKShTVEdNRURJVU0qIG1lZGl1bSkKKyAgICB7CisgICAgICAg
IDo6UmVsZWFzZVN0Z01lZGl1bShtZWRpdW0pOworICAgIH0KK307CisKIGNsYXNzIERSVERhdGFP
YmplY3QgOiBwdWJsaWMgSURhdGFPYmplY3QgewogcHVibGljOgogICAgIHZvaWQgQ29weU1lZGl1
bShTVEdNRURJVU0qIHBNZWREZXN0LCBTVEdNRURJVU0qIHBNZWRTcmMsIEZPUk1BVEVUQyogcEZt
dFNyYyk7CkBAIC02MiwxMCArNjksOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEhSRVNVTFQgY3Jl
YXRlSW5zdGFuY2UoRFJURGF0YU9iamVjdCoqKTsKIHByaXZhdGU6CiAgICAgRFJURGF0YU9iamVj
dCgpOwotICAgIH5EUlREYXRhT2JqZWN0KCk7CiAgICAgbG9uZyBtX3JlZjsKLSAgICBWZWN0b3I8
Rk9STUFURVRDKj4gbV9mb3JtYXRzOwotICAgIFZlY3RvcjxTVEdNRURJVU0qPiBtX21lZGl1bTsK
KyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEZPUk1BVEVUQz4+IG1fZm9ybWF0czsKKyAgICBW
ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFNUR01FRElVTSwgU3RnTWVkaXVtRGVsZXRlcj4+IG1fbWVk
aXVtOwogfTsKIAogI2VuZGlmIC8vIERSVERhdGFPYmplY3RfaApJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvd2luL1VJRGVsZWdhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3dpbi9VSURlbGVnYXRlLmNwcAkocmV2aXNpb24gMTY3MzQxKQorKysgVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL1VJRGVsZWdhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICsz
Niw2IEBACiAjaW5jbHVkZSAiVGVzdFJ1bm5lci5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ09NUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgpAQCAtNTEsMTQgKzUw
LDEzIEBAIGNsYXNzIERSVFVuZG9PYmplY3QgewogcHVibGljOgogICAgIERSVFVuZG9PYmplY3Qo
SVdlYlVuZG9UYXJnZXQqIHRhcmdldCwgQlNUUiBhY3Rpb25OYW1lLCBJVW5rbm93biogb2JqKQog
ICAgICAgICA6IG1fdGFyZ2V0KHRhcmdldCkKLSAgICAgICAgLCBtX2FjdGlvbk5hbWUoU3lzQWxs
b2NTdHJpbmcoYWN0aW9uTmFtZSkpCisgICAgICAgICwgbV9hY3Rpb25OYW1lKGFjdGlvbk5hbWUp
CiAgICAgICAgICwgbV9vYmoob2JqKQogICAgIHsKICAgICB9CiAKICAgICB+RFJUVW5kb09iamVj
dCgpCiAgICAgewotICAgICAgICBTeXNGcmVlU3RyaW5nKG1fYWN0aW9uTmFtZSk7CiAgICAgfQog
CiAgICAgdm9pZCBpbnZva2UoKQpAQCAtNjgsMjIgKzY2LDIwIEBAIHB1YmxpYzoKIAogcHJpdmF0
ZToKICAgICBJV2ViVW5kb1RhcmdldCogbV90YXJnZXQ7Ci0gICAgQlNUUiBtX2FjdGlvbk5hbWU7
CisgICAgX2JzdHJfdCBtX2FjdGlvbk5hbWU7CiAgICAgQ09NUHRyPElVbmtub3duPiBtX29iajsK
IH07CiAKIGNsYXNzIERSVFVuZG9TdGFjayB7CiBwdWJsaWM6Ci0gICAgfkRSVFVuZG9TdGFjaygp
IHsgZGVwcmVjYXRlZERlbGV0ZUFsbFZhbHVlcyhtX3VuZG9WZWN0b3IpOyB9Ci0KICAgICBib29s
IGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX3VuZG9WZWN0b3IuaXNFbXB0eSgpOyB9Ci0gICAg
dm9pZCBjbGVhcigpIHsgZGVwcmVjYXRlZERlbGV0ZUFsbFZhbHVlcyhtX3VuZG9WZWN0b3IpOyBt
X3VuZG9WZWN0b3IuY2xlYXIoKTsgfQorICAgIHZvaWQgY2xlYXIoKSB7IG1fdW5kb1ZlY3Rvci5j
bGVhcigpOyB9CiAKICAgICB2b2lkIHB1c2goRFJUVW5kb09iamVjdCogdW5kb09iamVjdCkgeyBt
X3VuZG9WZWN0b3IuYXBwZW5kKHVuZG9PYmplY3QpOyB9Ci0gICAgRFJUVW5kb09iamVjdCogcG9w
KCkgeyBEUlRVbmRvT2JqZWN0KiB0b3AgPSBtX3VuZG9WZWN0b3IubGFzdCgpOyBtX3VuZG9WZWN0
b3IucmVtb3ZlTGFzdCgpOyByZXR1cm4gdG9wOyB9CisgICAgc3RkOjp1bmlxdWVfcHRyPERSVFVu
ZG9PYmplY3Q+IHBvcCgpIHsgc3RkOjp1bmlxdWVfcHRyPERSVFVuZG9PYmplY3Q+IHRvcCA9IHN0
ZDo6bW92ZShtX3VuZG9WZWN0b3IubGFzdCgpKTsgbV91bmRvVmVjdG9yLnJlbW92ZUxhc3QoKTsg
cmV0dXJuIHN0ZDo6bW92ZSh0b3ApOyB9CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9yPERSVFVuZG9P
YmplY3QqPiBtX3VuZG9WZWN0b3I7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxEUlRVbmRv
T2JqZWN0Pj4gbV91bmRvVmVjdG9yOwogfTsKIAogY2xhc3MgRFJUVW5kb01hbmFnZXIgewpAQCAt
OTgsMTUgKzk0LDE1IEBAIHB1YmxpYzoKICAgICBib29sIGNhblVuZG8oKSB7IHJldHVybiAhbV91
bmRvU3RhY2stPmlzRW1wdHkoKTsgfQogCiBwcml2YXRlOgotICAgIE93blB0cjxEUlRVbmRvU3Rh
Y2s+IG1fcmVkb1N0YWNrOwotICAgIE93blB0cjxEUlRVbmRvU3RhY2s+IG1fdW5kb1N0YWNrOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxEUlRVbmRvU3RhY2s+IG1fcmVkb1N0YWNrOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxEUlRVbmRvU3RhY2s+IG1fdW5kb1N0YWNrOwogICAgIGJvb2wgbV9pc1JlZG9p
bmc7CiAgICAgYm9vbCBtX2lzVW5kb2luZzsKIH07CiAKIERSVFVuZG9NYW5hZ2VyOjpEUlRVbmRv
TWFuYWdlcigpCi0gICAgOiBtX3JlZG9TdGFjayhhZG9wdFB0cihuZXcgRFJUVW5kb1N0YWNrKSkK
LSAgICAsIG1fdW5kb1N0YWNrKGFkb3B0UHRyKG5ldyBEUlRVbmRvU3RhY2spKQorICAgIDogbV9y
ZWRvU3RhY2soc3RkOjptYWtlX3VuaXF1ZTxEUlRVbmRvU3RhY2s+KCkpCisgICAgLCBtX3VuZG9T
dGFjayhzdGQ6Om1ha2VfdW5pcXVlPERSVFVuZG9TdGFjaz4oKSkKICAgICAsIG1faXNSZWRvaW5n
KGZhbHNlKQogICAgICwgbV9pc1VuZG9pbmcoZmFsc2UpCiB7CkBAIC0xMzQsOSArMTMwLDcgQEAg
dm9pZCBEUlRVbmRvTWFuYWdlcjo6cmVkbygpCiAKICAgICBtX2lzUmVkb2luZyA9IHRydWU7CiAK
LSAgICBEUlRVbmRvT2JqZWN0KiByZWRvT2JqZWN0ID0gbV9yZWRvU3RhY2stPnBvcCgpOwotICAg
IHJlZG9PYmplY3QtPmludm9rZSgpOwotICAgIGRlbGV0ZSByZWRvT2JqZWN0OworICAgIG1fcmVk
b1N0YWNrLT5wb3AoKS0+aW52b2tlKCk7CiAKICAgICBtX2lzUmVkb2luZyA9IGZhbHNlOwogfQpA
QCAtMTQ4LDE2ICsxNDIsMTQgQEAgdm9pZCBEUlRVbmRvTWFuYWdlcjo6dW5kbygpCiAKICAgICBt
X2lzVW5kb2luZyA9IHRydWU7CiAKLSAgICBEUlRVbmRvT2JqZWN0KiB1bmRvT2JqZWN0ID0gbV91
bmRvU3RhY2stPnBvcCgpOwotICAgIHVuZG9PYmplY3QtPmludm9rZSgpOwotICAgIGRlbGV0ZSB1
bmRvT2JqZWN0OworICAgIG1fdW5kb1N0YWNrLT5wb3AoKS0+aW52b2tlKCk7CiAKICAgICBtX2lz
VW5kb2luZyA9IGZhbHNlOwogfQogCiBVSURlbGVnYXRlOjpVSURlbGVnYXRlKCkKICAgICA6IG1f
cmVmQ291bnQoMSkKLSAgICAsIG1fdW5kb01hbmFnZXIoYWRvcHRQdHIobmV3IERSVFVuZG9NYW5h
Z2VyKSkKKyAgICAsIG1fdW5kb01hbmFnZXIoc3RkOjptYWtlX3VuaXF1ZTxEUlRVbmRvTWFuYWdl
cj4oKSkKICAgICAsIG1fZGVza3RvcE5vdGlmaWNhdGlvbnMobmV3IERSVERlc2t0b3BOb3RpZmlj
YXRpb25QcmVzZW50ZXIpCiB7CiAgICAgbV9mcmFtZS5ib3R0b20gPSAwOwpAQCAtMTY4LDcgKzE2
MCw3IEBAIFVJRGVsZWdhdGU6OlVJRGVsZWdhdGUoKQogCiB2b2lkIFVJRGVsZWdhdGU6OnJlc2V0
VW5kb01hbmFnZXIoKQogewotICAgIG1fdW5kb01hbmFnZXIgPSBhZG9wdFB0cihuZXcgRFJUVW5k
b01hbmFnZXIpOworICAgIG1fdW5kb01hbmFnZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPERSVFVuZG9N
YW5hZ2VyPigpOwogfQogCiBIUkVTVUxUIFVJRGVsZWdhdGU6OlF1ZXJ5SW50ZXJmYWNlKFJFRklJ
RCByaWlkLCB2b2lkKiogcHB2T2JqZWN0KQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L1VJRGVsZWdhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vVUlE
ZWxlZ2F0ZS5oCShyZXZpc2lvbiAxNjczNDEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4v
VUlEZWxlZ2F0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MDcsNyArNDA3LDcgQEAgcHJvdGVjdGVk
OgogCiBwcml2YXRlOgogICAgIFJFQ1QgbV9mcmFtZTsKLSAgICBPd25QdHI8RFJUVW5kb01hbmFn
ZXI+IG1fdW5kb01hbmFnZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPERSVFVuZG9NYW5hZ2VyPiBt
X3VuZG9NYW5hZ2VyOwogCiAgICAgQ09NUHRyPElXZWJEZXNrdG9wTm90aWZpY2F0aW9uc0RlbGVn
YXRlPiBtX2Rlc2t0b3BOb3RpZmljYXRpb25zOwogfTsK
</data>
<flag name="review"
          id="253795"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>