<?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>143320</bug_id>
          
          <creation_ts>2015-04-01 15:02:48 -0700</creation_ts>
          <short_desc>[New Block-Inside-Inline Model] Implement the correct painting order for blocks inside inlines</short_desc>
          <delta_ts>2015-04-02 11:35:57 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1082110</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2015-04-01 15:02:48 -0700</bug_when>
    <thetext>The painting order has to match the old continuation-based model.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082111</commentid>
    <comment_count>1</comment_count>
      <attachid>249944</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2015-04-01 15:03:15 -0700</bug_when>
    <thetext>Created attachment 249944
Patch (just for ews)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082112</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-01 15:06:09 -0700</bug_when>
    <thetext>Attachment 249944 did not pass style-queue:


ERROR: Source/WebCore/rendering/InlineFlowBox.cpp:1135:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082239</commentid>
    <comment_count>3</comment_count>
      <attachid>249984</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2015-04-02 09:19:22 -0700</bug_when>
    <thetext>Created attachment 249984
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082249</commentid>
    <comment_count>4</comment_count>
      <attachid>249984</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-04-02 09:40:26 -0700</bug_when>
    <thetext>Comment on attachment 249984
Patch

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

Is this enough testing to cover all the code?

&gt; Source/WebCore/rendering/EllipsisBox.cpp:143
&gt; +bool EllipsisBox::nodeAtPoint(const HitTestRequest&amp; request, HitTestResult&amp; result, const HitTestLocation&amp; locationInContainer, const LayoutPoint&amp; accumulatedOffset, LayoutUnit lineTop, LayoutUnit lineBottom, HitTestAction hitTestAction)

Argument list here is getting out of hand. Can we further merge some of these intro structs and classes?

&gt; Source/WebCore/rendering/InlineElementBox.cpp:74
&gt; +        PaintPhase newPhase = (paintInfo.phase == PaintPhaseChildOutlines) ? PaintPhaseOutline : paintInfo.phase;
&gt; +        newPhase = (newPhase == PaintPhaseChildBlockBackgrounds) ? PaintPhaseChildBlockBackground : newPhase;

This seems like a strange way to write it. How about a switch?

    PaintInfo subtreePaintInfo = paintInfo;
    switch (subtreePaintInfo.phase) {
    case PaintPhaseChildOutlines:
        subtreePaintInfo.phase = PaintPhaseOutline;
        break;
    case PaintPhaseChildBlockBackgrounds:
        subtreePaintInfo.phase = PaintPhaseChildBlockBackground;
        break;
    default:
        break;
    }

Or if you want it to look more compact, you can use this kind of formatting (and we can change the coding style guidelines to allow it).

    switch (subtreePaintInfo.phase) {
    case PaintPhaseChildOutlines: subtreePaintInfo.phase = PaintPhaseOutline; break;
    case PaintPhaseChildBlockBackgrounds: subtreePaintInfo.phase = PaintPhaseChildBlockBackground; break;
    default: break;
    }

The ? : seem harder to read.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082287</commentid>
    <comment_count>5</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2015-04-02 11:35:57 -0700</bug_when>
    <thetext>Fixed in r182279.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249944</attachid>
            <date>2015-04-01 15:03:15 -0700</date>
            <delta_ts>2015-04-02 09:19:22 -0700</delta_ts>
            <desc>Patch (just for ews)</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>20758</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAkocmV2aXNpb24g
MTgyMjQwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTQwLDcgKzE0MCw3IEBAIHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50U2Vs
ZWN0aW9uKEdyYXBoaWMKICAgICBjb250ZXh0LT5maWxsUmVjdChzbmFwUmVjdFRvRGV2aWNlUGl4
ZWxzV2l0aFdyaXRpbmdEaXJlY3Rpb24oc2VsZWN0aW9uUmVjdCwgcmVuZGVyZXIoKS5kb2N1bWVu
dCgpLmRldmljZVNjYWxlRmFjdG9yKCksIHJ1bi5sdHIoKSksIGMsIHN0eWxlLmNvbG9yU3BhY2Uo
KSk7CiB9CiAKLWJvb2wgRWxsaXBzaXNCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RMb2NhdGlv
biYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkKK2Jvb2wgRWxs
aXBzaXNCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRU
ZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRh
aW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxp
bmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9u
KQogewogICAgIExheW91dFBvaW50IGFkanVzdGVkTG9jYXRpb24gPSBhY2N1bXVsYXRlZE9mZnNl
dCArIExheW91dFBvaW50KHRvcExlZnQoKSk7CiAKQEAgLTE0OSw3ICsxNDksNyBAQCBib29sIEVs
bGlwc2lzQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUCiAgICAgICAgIGNvbnN0IFJlbmRlclN0
eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKICAgICAgICAgTGF5b3V0VW5pdCBt
dHggPSBhZGp1c3RlZExvY2F0aW9uLngoKSArIG1fbG9naWNhbFdpZHRoIC0gbWFya3VwQm94LT54
KCk7CiAgICAgICAgIExheW91dFVuaXQgbXR5ID0gYWRqdXN0ZWRMb2NhdGlvbi55KCkgKyBsaW5l
U3R5bGUuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIChtYXJrdXBCb3gtPnkoKSArIG1hcmt1cEJv
eC0+bGluZVN0eWxlKCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7Ci0gICAgICAgIGlmIChtYXJr
dXBCb3gtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwg
TGF5b3V0UG9pbnQobXR4LCBtdHkpLCBsaW5lVG9wLCBsaW5lQm90dG9tKSkgeworICAgICAgICBp
ZiAobWFya3VwQm94LT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGxvY2F0aW9uSW5Db250
YWluZXIsIExheW91dFBvaW50KG10eCwgbXR5KSwgbGluZVRvcCwgbGluZUJvdHRvbSwgaGl0VGVz
dEFjdGlvbikpIHsKICAgICAgICAgICAgIGJsb2NrRmxvdygpLnVwZGF0ZUhpdFRlc3RSZXN1bHQo
cmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCkgLSBMYXlvdXRTaXplKG10eCwgbXR5
KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgJKHJldmlzaW9uIDE4MjI0MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICsz
Miw3IEBAIGNsYXNzIEVsbGlwc2lzQm94IGZpbmFsIDogcHVibGljIElubGluZUUKIHB1YmxpYzoK
ICAgICBFbGxpcHNpc0JveChSZW5kZXJCbG9ja0Zsb3cmLCBjb25zdCBBdG9taWNTdHJpbmcmIGVs
bGlwc2lzU3RyLCBJbmxpbmVGbG93Qm94KiBwYXJlbnQsIGludCB3aWR0aCwgaW50IGhlaWdodCwg
aW50IHksIGJvb2wgZmlyc3RMaW5lLCBib29sIGlzVmVydGljYWwsIElubGluZUJveCogbWFya3Vw
Qm94KTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9p
bnQmLCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwg
Y29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3As
IExheW91dFVuaXQgbGluZUJvdHRvbSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIG5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRl
c3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSwg
SGl0VGVzdEFjdGlvbikgb3ZlcnJpZGUgZmluYWw7CiAgICAgdm9pZCBzZXRTZWxlY3Rpb25TdGF0
ZShSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIHMpIHsgbV9zZWxlY3Rpb25TdGF0ZSA9IHM7
IH0KICAgICBJbnRSZWN0IHNlbGVjdGlvblJlY3QoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVCb3guaAkocmV2aXNpb24gMTgyMjQwKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5
b3V0UG9pbnQmLCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkgPSAw
OwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhp
dFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIs
IGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9w
LCBMYXlvdXRVbml0IGxpbmVCb3R0b20pID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExv
Y2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0
ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tLCBIaXRU
ZXN0QWN0aW9uKSA9IDA7CiAKICNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCiAgICAgdm9pZCBz
aG93Tm9kZVRyZWVGb3JUaGlzKCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lRWxlbWVudEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUVsZW1lbnRCb3guY3BwCShyZXZpc2lvbiAxODIyNDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRWxlbWVudEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY1LDcgKzY1LDIzIEBAIHZvaWQgSW5saW5lRWxlbWVudEJveDo6YXR0YWNoTGluZSgpCiAKIHZv
aWQgSW5saW5lRWxlbWVudEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExh
eW91dFBvaW50JiBwYWludE9mZnNldCwgTGF5b3V0VW5pdCAvKiBsaW5lVG9wICovLCBMYXlvdXRV
bml0IC8qbGluZUJvdHRvbSovKQogewotICAgIGlmICghcGFpbnRJbmZvLnNob3VsZFBhaW50V2l0
aGluUm9vdChyZW5kZXJlcigpKSB8fCAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3Jl
Z3JvdW5kICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlU2VsZWN0aW9uKSkKKyAgICBp
ZiAoIXBhaW50SW5mby5zaG91bGRQYWludFdpdGhpblJvb3QocmVuZGVyZXIoKSkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChyZW5kZXJlcigpLmlzQW5vbnltb3VzSW5saW5lQmxvY2soKSkg
eworICAgICAgICAvLyBUcmVhdCBwYWludGluZyBvZiBhIHNwZWNpYWwgaW5saW5lLWJsb2NrIGxp
bmUgbGlrZSB0aGUgcGFpbnRpbmcgb2YgYSBub3JtYWwgYmxvY2sgYW5kIGdvIHRocm91Z2ggYWxs
IHBoYXNlcy4KKyAgICAgICAgUGFpbnRQaGFzZSBuZXdQaGFzZSA9IChwYWludEluZm8ucGhhc2Ug
PT0gUGFpbnRQaGFzZUNoaWxkT3V0bGluZXMpID8gUGFpbnRQaGFzZU91dGxpbmUgOiBwYWludElu
Zm8ucGhhc2U7CisgICAgICAgIG5ld1BoYXNlID0gKG5ld1BoYXNlID09IFBhaW50UGhhc2VDaGls
ZEJsb2NrQmFja2dyb3VuZHMpID8gUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kIDogbmV3
UGhhc2U7CisgICAgICAgIAorICAgICAgICBQYWludEluZm8gaW5mbyhwYWludEluZm8pOworICAg
ICAgICBpbmZvLnBoYXNlID0gbmV3UGhhc2U7CisgICAgICAgIGluZm8udXBkYXRlU3VidHJlZVBh
aW50Um9vdEZvckNoaWxkcmVuKCZyZW5kZXJlcigpKTsKKyAgICAgICAgQVNTRVJUKCFyZW5kZXJl
cigpLmhhc1NlbGZQYWludGluZ0xheWVyKCkpOworICAgICAgICByZW5kZXJlcigpLnBhaW50KGlu
Zm8sIHBhaW50T2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChwYWlu
dEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQgJiYgcGFpbnRJbmZvLnBoYXNlICE9
IFBhaW50UGhhc2VTZWxlY3Rpb24pCiAgICAgICAgIHJldHVybjsKIAogICAgIExheW91dFBvaW50
IGNoaWxkUG9pbnQgPSBwYWludE9mZnNldDsKQEAgLTc1LDkgKzkxLDE4IEBAIHZvaWQgSW5saW5l
RWxlbWVudEJveDo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICByZW5kZXJlcigpLnBhaW50QXNJbmxp
bmVCbG9jayhwYWludEluZm8sIGNoaWxkUG9pbnQpOwogfQogCi1ib29sIElubGluZUVsZW1lbnRC
b3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVz
dWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwg
Y29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IC8qIGxpbmVU
b3AgKi8sIExheW91dFVuaXQgLypsaW5lQm90dG9tKi8pCitib29sIElubGluZUVsZW1lbnRCb3g6
Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29u
c3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IC8qIGxpbmVUb3Ag
Ki8sIExheW91dFVuaXQgLypsaW5lQm90dG9tKi8sCisgICAgSGl0VGVzdEFjdGlvbiBoaXRUZXN0
QWN0aW9uKQogewotICAgIC8vIEhpdCB0ZXN0IGFsbCBwaGFzZXMgb2YgcmVwbGFjZWQgZWxlbWVu
dHMgYXRvbWljYWxseSwgYXMgdGhvdWdoIHRoZSByZXBsYWNlZCBlbGVtZW50IGVzdGFibGlzaGVk
IGl0cworICAgIC8vIElmIHdlIGFyZSBhbiBhbm9ueW1vdXMgaW5saW5lIGJsb2NrLCBob25vciBo
aXQgdGVzdCBwaGFzZXMuCisgICAgaWYgKHJlbmRlcmVyKCkuaXNBbm9ueW1vdXNJbmxpbmVCbG9j
aygpKSB7CisgICAgICAgIEhpdFRlc3RBY3Rpb24gY2hpbGRIaXRUZXN0ID0gaGl0VGVzdEFjdGlv
bjsKKyAgICAgICAgaWYgKGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdENoaWxkQmxvY2tCYWNrZ3Jv
dW5kcykKKyAgICAgICAgICAgIGNoaWxkSGl0VGVzdCA9IEhpdFRlc3RDaGlsZEJsb2NrQmFja2dy
b3VuZDsKKyAgICAgICAgcmV0dXJuIHJlbmRlcmVyKCkubm9kZUF0UG9pbnQocmVxdWVzdCwgcmVz
dWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgY2hpbGRIaXRUZXN0
KTsKKyAgICB9CisKKyAgICAvLyBPdGhlcndpc2UgaGl0IHRlc3QgYWxsIHBoYXNlcyBvZiByZXBs
YWNlZCBlbGVtZW50cyBhdG9taWNhbGx5LCBhcyB0aG91Z2ggdGhlIHJlcGxhY2VkIGVsZW1lbnQg
ZXN0YWJsaXNoZWQgaXRzCiAgICAgLy8gb3duIHN0YWNraW5nIGNvbnRleHQuICAoU2VlIEFwcGVu
ZGl4IEUuMiwgc2VjdGlvbiA2LjQgb24gaW5saW5lIGJsb2NrL3RhYmxlIGVsZW1lbnRzIGluIHRo
ZSBDU1MyLjEKICAgICAvLyBzcGVjaWZpY2F0aW9uLikKICAgICBMYXlvdXRQb2ludCBjaGlsZFBv
aW50ID0gYWNjdW11bGF0ZWRPZmZzZXQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lRWxlbWVudEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVFbGVtZW50Qm94LmgJKHJldmlzaW9uIDE4MjI0MCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVFbGVtZW50Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hMaW5lKCkgb3ZlcnJpZGUgZmlu
YWw7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9p
bnQmLCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwg
Y29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3As
IExheW91dFVuaXQgbGluZUJvdHRvbSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIG5vZGVB
dFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRl
c3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3Vt
dWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSwg
SGl0VGVzdEFjdGlvbikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlz
SW5saW5lRWxlbWVudEJveCgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHJldmlz
aW9uIDE4MjI0MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTAzMiw4ICsxMDMyLDEyIEBAIHZvaWQgSW5saW5lRmxvd0Jv
eDo6c2V0T3ZlcmZsb3dGcm9tTG9naWMKICAgICBzZXRWaXN1YWxPdmVyZmxvdyh2aXN1YWxPdmVy
ZmxvdywgbGluZVRvcCwgbGluZUJvdHRvbSk7CiB9CiAKLWJvb2wgSW5saW5lRmxvd0JveDo6bm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJl
c3VsdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBM
YXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0
VW5pdCBsaW5lQm90dG9tKQorYm9vbCBJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRU
ZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20s
IEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlvbikKIHsKKyAgICAvLyBBcyBsb25nIGFzIHdlIGRv
bid0IGhhdmUgYW4gYW5vbnltb3VzIGlubGluZSBibG9jayBvbiBvdXIgbGluZSwgd2UgcmVzdHJp
Y3Qgb3VyIGhpdCB0ZXN0aW5nIG9ubHkgdG8gdGhlIGZvcmVncm91bmQgcGhhc2UuCisgICAgaWYg
KCFoYXNBbm9ueW1vdXNJbmxpbmVCbG9jaygpICYmIGhpdFRlc3RBY3Rpb24gIT0gSGl0VGVzdEZv
cmVncm91bmQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIExheW91dFJlY3Qgb3ZlcmZs
b3dSZWN0KHZpc3VhbE92ZXJmbG93UmVjdChsaW5lVG9wLCBsaW5lQm90dG9tKSk7CiAgICAgZmxp
cEZvcldyaXRpbmdNb2RlKG92ZXJmbG93UmVjdCk7CiAgICAgb3ZlcmZsb3dSZWN0Lm1vdmVCeShh
Y2N1bXVsYXRlZE9mZnNldCk7CkBAIC0xMDY0LDcgKzEwNjgsNyBAQCBib29sIElubGluZUZsb3dC
b3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIGN1bGxlZFBhcmVudCA9IG5ld1BhcmVudDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGlmIChjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBsb2NhdGlvbkluQ29udGFp
bmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgbGluZVRvcCwgbGluZUJvdHRvbSkpIHsKKyAgICAgICAg
ICAgIGlmIChjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBsb2NhdGlvbkluQ29u
dGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNldCwgbGluZVRvcCwgbGluZUJvdHRvbSwgaGl0VGVzdEFj
dGlvbikpIHsKICAgICAgICAgICAgICAgICByZW5kZXJlcigpLnVwZGF0ZUhpdFRlc3RSZXN1bHQo
cmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWNjdW11
bGF0ZWRPZmZzZXQpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAg
IH0KQEAgLTExMjUsNiArMTEyOSwxMCBAQCBib29sIElubGluZUZsb3dCb3g6Om5vZGVBdFBvaW50
KGNvbnN0IEhpCiAKIHZvaWQgSW5saW5lRmxvd0JveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBM
YXlvdXRVbml0IGxpbmVCb3R0b20pCiB7CisgICAgLy8gQXMgbG9uZyBhcyB3ZSBkb24ndCBoYXZl
IGFuIGFub255bW91cyBpbmxpbmUgYmxvY2sgb24gb3VyIGxpbmUsIHdlIHJlc3RyaWN0IG91ciBw
YWludGluZyBvbmx5IHRvIGEgZmV3IHBoYXNlcy4KKyAgICBpZiAoIWhhc0Fub255bW91c0lubGlu
ZUJsb2NrKCkgJiYgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlRm9yZWdyb3VuZCAmJiBw
YWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbiAmJiBwYWludEluZm8ucGhhc2Ug
IT0gUGFpbnRQaGFzZU91dGxpbmUgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VTZWxm
T3V0bGluZSAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUNoaWxkT3V0bGluZXMgJiYg
cGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VUZXh0Q2xpcCAmJiBwYWludEluZm8ucGhhc2Ug
IT0gUGFpbnRQaGFzZU1hc2spKQorICAgICAgICByZXR1cm47CisgCiAgICAgTGF5b3V0UmVjdCBv
dmVyZmxvd1JlY3QodmlzdWFsT3ZlcmZsb3dSZWN0KGxpbmVUb3AsIGxpbmVCb3R0b20pKTsKICAg
ICBvdmVyZmxvd1JlY3QuaW5mbGF0ZShyZW5kZXJlcigpLm1heGltYWxPdXRsaW5lU2l6ZShwYWlu
dEluZm8ucGhhc2UpKTsKICAgICBmbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0KTsKQEAg
LTExNjgsMTEgKzExNzYsMTMgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludChQYWludEluZm8m
IHBhaQogICAgICAgICAgICAgICAgICAgICBwYWludEluZm8ub3V0bGluZU9iamVjdHMtPmFkZCgm
aW5saW5lRmxvdyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAocGFpbnRJbmZv
LnBoYXNlID09IFBhaW50UGhhc2VNYXNrKSB7Ci0gICAgICAgICAgICBwYWludE1hc2socGFpbnRJ
bmZvLCBwYWludE9mZnNldCk7CisgICAgICAgICAgICBpZiAoIWhhc0Fub255bW91c0lubGluZUJs
b2NrKCkpCisgICAgICAgICAgICAgICAgcGFpbnRNYXNrKHBhaW50SW5mbywgcGFpbnRPZmZzZXQp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8g
UGFpbnQgb3VyIGJhY2tncm91bmQsIGJvcmRlciBhbmQgYm94LXNoYWRvdy4KLSAgICAgICAgICAg
IHBhaW50Qm94RGVjb3JhdGlvbnMocGFpbnRJbmZvLCBwYWludE9mZnNldCk7CisgICAgICAgICAg
ICBpZiAoIWhhc0Fub255bW91c0lubGluZUJsb2NrKCkpCisgICAgICAgICAgICAgICAgcGFpbnRC
b3hEZWNvcmF0aW9ucyhwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKICAgICAgICAgfQogICAgIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCShyZXZpc2lv
biAxODIyNDApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjAsNyArMTIwLDcgQEAgcHVibGljOgogICAgIHZvaWQgcGFpbnRG
aWxsTGF5ZXIoY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgQ29sb3ImLCBjb25zdCBGaWxsTGF5ZXIq
LCBjb25zdCBMYXlvdXRSZWN0JiwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VP
dmVyKTsKICAgICB2b2lkIHBhaW50Qm94U2hhZG93KGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IFJl
bmRlclN0eWxlJiwgU2hhZG93U3R5bGUsIGNvbnN0IExheW91dFJlY3QmKTsKICAgICB2aXJ0dWFs
IHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBMYXlvdXRVbml0IGxp
bmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBib29s
IG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQm
IGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJv
dHRvbSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRp
b25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlv
dXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSwgSGl0VGVzdEFjdGlvbikgb3Zl
cnJpZGU7CiAKICAgICBib29sIGJveFNoYWRvd0NhbkJlQXBwbGllZFRvQmFja2dyb3VuZChjb25z
dCBGaWxsTGF5ZXImKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gMTgyMjQwKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODksNyArMzg5LDgg
QEAgYm9vbCBJbmxpbmVUZXh0Qm94Ojppc0xpbmVCcmVhaygpIGNvbnN0CiAgICAgcmV0dXJuIHJl
bmRlcmVyKCkuc3R5bGUoKS5wcmVzZXJ2ZU5ld2xpbmUoKSAmJiBsZW4oKSA9PSAxICYmICgqcmVu
ZGVyZXIoKS50ZXh0KCkpW3N0YXJ0KCldID09ICdcbic7CiB9CiAKLWJvb2wgSW5saW5lVGV4dEJv
eDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBj
b25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgLyogbGluZVRv
cCAqLywgTGF5b3V0VW5pdCAvKmxpbmVCb3R0b20qLykKK2Jvb2wgSW5saW5lVGV4dEJveDo6bm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJl
c3VsdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBM
YXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgLyogbGluZVRvcCAqLywg
TGF5b3V0VW5pdCAvKmxpbmVCb3R0b20qLywKKyAgICBIaXRUZXN0QWN0aW9uIC8qaGl0VGVzdEFj
dGlvbiovKQogewogICAgIGlmICghdmlzaWJsZVRvSGl0VGVzdGluZygpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJ
KHJldmlzaW9uIDE4MjI0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw3ICsxMjIsNyBAQCBwdWJsaWM6CiAKIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9p
bnQmLCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSk7Ci0gICAgdmly
dHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5
b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVu
aXQgbGluZUJvdHRvbSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlv
biYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSwgSGl0VGVzdEFj
dGlvbikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUxpbmUo
KSBvdmVycmlkZSBmaW5hbDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aW5lQm94TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpbmVCb3hMaXN0LmNwcAkocmV2aXNpb24gMTgyMjQwKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpbmVCb3hMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDEy
ICsyMDYsNiBAQCBib29sIFJlbmRlckxpbmVCb3hMaXN0OjpsaW5lSW50ZXJzZWN0c0RpCiAKIHZv
aWQgUmVuZGVyTGluZUJveExpc3Q6OnBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJl
ciwgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkg
Y29uc3QKIHsKLSAgICAvLyBPbmx5IHBhaW50IGR1cmluZyB0aGUgZm9yZWdyb3VuZC9zZWxlY3Rp
b24gcGhhc2VzLgotICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91
bmQgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VTZWxlY3Rpb24gJiYgcGFpbnRJbmZv
LnBoYXNlICE9IFBhaW50UGhhc2VPdXRsaW5lIAotICAgICAgICAmJiBwYWludEluZm8ucGhhc2Ug
IT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNl
Q2hpbGRPdXRsaW5lcyAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVRleHRDbGlwCi0g
ICAgICAgICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlTWFzaykKLSAgICAgICAgcmV0
dXJuOwotCiAgICAgQVNTRVJUKHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkgfHwgKHJlbmRlcmVy
LT5pc1JlbmRlcklubGluZSgpICYmIHJlbmRlcmVyLT5oYXNMYXllcigpKSk7IC8vIFRoZSBvbmx5
IHdheSBhbiBpbmxpbmUgY291bGQgcGFpbnQgbGlrZSB0aGlzIGlzIGlmIGl0IGhhcyBhIGxheWVy
LgogCiAgICAgLy8gSWYgd2UgaGF2ZSBubyBsaW5lcyB0aGVuIHdlIGhhdmUgbm8gd29yayB0byBk
by4KQEAgLTI3OSw5ICsyNzMsNiBAQCB2b2lkIFJlbmRlckxpbmVCb3hMaXN0OjpwYWludChSZW5k
ZXJCb3hNCiAKIGJvb2wgUmVuZGVyTGluZUJveExpc3Q6OmhpdFRlc3QoUmVuZGVyQm94TW9kZWxP
YmplY3QqIHJlbmRlcmVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJl
c3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIs
IGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRU
ZXN0QWN0aW9uKSBjb25zdAogewotICAgIGlmIChoaXRUZXN0QWN0aW9uICE9IEhpdFRlc3RGb3Jl
Z3JvdW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICBBU1NFUlQocmVuZGVyZXItPmlz
UmVuZGVyQmxvY2soKSB8fCAocmVuZGVyZXItPmlzUmVuZGVySW5saW5lKCkgJiYgcmVuZGVyZXIt
Pmhhc0xheWVyKCkpKTsgLy8gVGhlIG9ubHkgd2F5IGFuIGlubGluZSBjb3VsZCBoaXQgdGVzdCBs
aWtlIHRoaXMgaXMgaWYgaXQgaGFzIGEgbGF5ZXIuCiAKICAgICAvLyBJZiB3ZSBoYXZlIG5vIGxp
bmVzIHRoZW4gd2UgaGF2ZSBubyB3b3JrIHRvIGRvLgpAQCAtMzAyLDcgKzI5Myw3IEBAIGJvb2wg
UmVuZGVyTGluZUJveExpc3Q6OmhpdFRlc3QoUmVuZGVyQm8KICAgICBmb3IgKElubGluZUZsb3dC
b3gqIGN1cnIgPSBsYXN0TGluZUJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+cHJldkxpbmVCb3go
KSkgewogICAgICAgICBjb25zdCBSb290SW5saW5lQm94JiByb290Qm94ID0gY3Vyci0+cm9vdCgp
OwogICAgICAgICBpZiAocmFuZ2VJbnRlcnNlY3RzUmVjdChyZW5kZXJlciwgY3Vyci0+bG9naWNh
bFRvcFZpc3VhbE92ZXJmbG93KHJvb3RCb3gubGluZVRvcCgpKSwgY3Vyci0+bG9naWNhbEJvdHRv
bVZpc3VhbE92ZXJmbG93KHJvb3RCb3gubGluZUJvdHRvbSgpKSwgcmVjdCwgYWNjdW11bGF0ZWRP
ZmZzZXQpKSB7Ci0gICAgICAgICAgICBib29sIGluc2lkZSA9IGN1cnItPm5vZGVBdFBvaW50KHJl
cXVlc3QsIHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIHJv
b3RCb3gubGluZVRvcCgpLCByb290Qm94LmxpbmVCb3R0b20oKSk7CisgICAgICAgICAgICBib29s
IGluc2lkZSA9IGN1cnItPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRpb25JbkNv
bnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIHJvb3RCb3gubGluZVRvcCgpLCByb290Qm94Lmxp
bmVCb3R0b20oKSwgaGl0VGVzdEFjdGlvbik7CiAgICAgICAgICAgICBpZiAoaW5zaWRlKSB7CiAg
ICAgICAgICAgICAgICAgcmVuZGVyZXItPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBsb2Nh
dGlvbkluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQp
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9Sb290SW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAJKHJldmlzaW9uIDE4MjI0MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg3
LDE1ICsxODcsMTUgQEAgdm9pZCBSb290SW5saW5lQm94OjpwYWludChQYWludEluZm8mIHBhaQog
ICAgIHBhaW50RWxsaXBzaXNCb3gocGFpbnRJbmZvLCBwYWludE9mZnNldCwgbGluZVRvcCwgbGlu
ZUJvdHRvbSk7CiB9CiAKLWJvb2wgUm9vdElubGluZUJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVz
dExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11
bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKQor
Ym9vbCBSb290SW5saW5lQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVx
dWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0
aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5
b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20sIEhpdFRlc3RBY3Rpb24gaGl0
VGVzdEFjdGlvbikKIHsKICAgICBpZiAoaGFzRWxsaXBzaXNCb3goKSAmJiB2aXNpYmxlVG9IaXRU
ZXN0aW5nKCkpIHsKLSAgICAgICAgaWYgKGVsbGlwc2lzQm94KCktPm5vZGVBdFBvaW50KHJlcXVl
c3QsIHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGxpbmVU
b3AsIGxpbmVCb3R0b20pKSB7CisgICAgICAgIGlmIChlbGxpcHNpc0JveCgpLT5ub2RlQXRQb2lu
dChyZXF1ZXN0LCByZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0
LCBsaW5lVG9wLCBsaW5lQm90dG9tLCBoaXRUZXN0QWN0aW9uKSkgewogICAgICAgICAgICAgcmVu
ZGVyZXIoKS51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lci5w
b2ludCgpIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSk7CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gSW5saW5lRmxvd0JveDo6
bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBhY2N1bXVs
YXRlZE9mZnNldCwgbGluZVRvcCwgbGluZUJvdHRvbSk7CisgICAgcmV0dXJuIElubGluZUZsb3dC
b3g6Om5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgYWNj
dW11bGF0ZWRPZmZzZXQsIGxpbmVUb3AsIGxpbmVCb3R0b20sIGhpdFRlc3RBY3Rpb24pOwogfQog
CiB2b2lkIFJvb3RJbmxpbmVCb3g6OmFkanVzdFBvc2l0aW9uKGZsb2F0IGR4LCBmbG9hdCBkeSkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAkocmV2aXNpb24g
MTgyMjQwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAkod29y
a2luZyBjb3B5KQpAQCAtMTE5LDcgKzExOSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIExheW91
dFVuaXQgbGluZUhlaWdodCgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwogCiAgICAgdmlydHVhbCB2
b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiwgTGF5b3V0VW5pdCBsaW5l
VG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBI
aXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBh
Y2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0
b20pIG92ZXJyaWRlIGZpbmFsOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxv
Y2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwg
TGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20sIEhpdFRlc3RBY3Rpb24p
IG92ZXJyaWRlIGZpbmFsOwogCiAgICAgdXNpbmcgSW5saW5lQm94OjpoYXNTZWxlY3RlZENoaWxk
cmVuOwogICAgIHVzaW5nIElubGluZUJveDo6c2V0SGFzU2VsZWN0ZWRDaGlsZHJlbjsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNw
cAkocmV2aXNpb24gMTgyMjQwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJ
bmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcxLDcgKzY3MSw3IEBAIEZsb2F0
UmVjdCBTVkdJbmxpbmVUZXh0Qm94OjpjYWxjdWxhdGVCb3UKICAgICByZXR1cm4gdGV4dFJlY3Q7
CiB9CiAKLWJvb2wgU1ZHSW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdExvY2F0
aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRP
ZmZzZXQsIExheW91dFVuaXQsIExheW91dFVuaXQpCitib29sIFNWR0lubGluZVRleHRCb3g6Om5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiBy
ZXN1bHQsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3Qg
TGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0LCBMYXlvdXRVbml0LCBI
aXRUZXN0QWN0aW9uKQogewogICAgIC8vIEZJWE1FOiBpbnRlZ3JhdGUgd2l0aCBJbmxpbmVUZXh0
Qm94Ojpub2RlQXRQb2ludCBiZXR0ZXIuCiAgICAgQVNTRVJUKCFpc0xpbmVCcmVhaygpKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5o
CShyZXZpc2lvbiAxODIyNDApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lu
bGluZVRleHRCb3guaAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgcGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0KiwgUmVuZGVyU3R5
bGUqLCBUZXh0UnVuJiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgaW50IHN0YXJ0UG9zaXRpb24s
IGludCBlbmRQb3NpdGlvbik7CiAgICAgdm9pZCBwYWludFRleHQoR3JhcGhpY3NDb250ZXh0Kiwg
UmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogc2VsZWN0aW9uU3R5bGUsIGNvbnN0IFNWR1RleHRG
cmFnbWVudCYsIGJvb2wgaGFzU2VsZWN0aW9uLCBib29sIHBhaW50U2VsZWN0ZWRUZXh0T25seSk7
CiAKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVy
LCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRv
cCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9k
ZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0
VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNj
dW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9t
LCBIaXRUZXN0QWN0aW9uKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBmbG9hdCBtX2xvZ2lj
YWxIZWlnaHQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249984</attachid>
            <date>2015-04-02 09:19:22 -0700</date>
            <delta_ts>2015-04-02 09:40:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>32791</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjI3MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUzIEBACisyMDE1LTA0LTAyICBEYXZpZCBI
eWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBbTmV3IEJsb2NrLUluc2lkZS1Jbmxp
bmUgTW9kZWxdIEltcGxlbWVudCB0aGUgY29ycmVjdCBwYWludCBvcmRlciBmb3IgYmxvY2tzIGlu
c2lkZSBpbmxpbmVzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTQzMzIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQWRkZWQgbmV3IHRlc3RzIGluIGZhc3QvYmxvY2svaW5zaWRlLWlubGluZXMuCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxs
aXBzaXNCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvRWxsaXBzaXNCb3gu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L0lubGluZUVsZW1lbnRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRWxlbWVudEJv
eDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRWxlbWVudEJveDo6bm9kZUF0UG9p
bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVFbGVtZW50Qm94Lmg6CisgICAgICAgICog
cmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxv
d0JveDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6cGFp
bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94Lmg6CisgICAgICAgICogcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJv
eDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94Lmg6Cisg
ICAgICAgIFRoZSBIaXRUZXN0QWN0aW9uIGhhcyB0byBiZSBwYXNzZWQgdG8gbm9kZUF0UG9pbnQg
c28gdGhhdCBoaXQgdGVzdCBhY3Rpb25zIGNhbiBiZSBob25vcmVkLiBBbGwgdGhlIG5vZGVBdFBv
aW50CisgICAgICAgIGZ1bmN0aW9ucyBoYXZlIGJlZW4gcGF0Y2hlZCB0byBpbmNsdWRlIHRoaXMg
YXJndW1lbnQuIFBhaW50aW5nIGFuZCBoaXQgdGVzdGluZyBoYXZlIGJlZW4gcGF0Y2hlZCBmb3Ig
SW5saW5lRWxlbWVudEJveAorICAgICAgICB0byBob25vciBwaGFzZXMvYWN0aW9ucyB3aGVuIHRo
ZSBlbGVtZW50IGlzIGFuIGFub255bW91cyBpbmxpbmUgYmxvY2suCisKKyAgICAgICAgVGhlIHBo
YXNlIGZpbHRlciBvbiBSZW5kZXJMaW5lQm94TGlzdCBoYXMgYmVlbiBwdXNoZWQgaW4gdG8gSW5s
aW5lRmxvd0JveDo6cGFpbnQgYW5kIElubGluZUZsb3dCb3g6Om5vZGVBdFBvaW50IHNvIHRoYXQK
KyAgICAgICAgd2UgY2FuIHJlc3BlY3QgaXQgcHJvcGVybHkgd2hlbiBpbmxpbmVzIGFyZSBwYWlu
dGluZyBieSB0aGVtc2VsdmVzIChlLmcuLCBiZWNhdXNlIHRoZXkgaGF2ZSBhIGxheWVyKS4KKwor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpjcmVhdGVMaW5lQm94ZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2tGbG93Ojpjb25zdHJ1Y3RMaW5lKToKKyAgICAgICAgR28gYWhlYWQg
YW5kIGluY2x1ZGUgYWxsIG9mIHRoZSBpbmxpbmUgZmxvdyBib3hlcyBiZXR3ZWVuIHRoZSByb290
IGFuZCB0aGUgYW5vbnltb3VzIGlubGluZSBibG9jayBpZiBpdCB0dXJucyBvdXQgdGhleQorICAg
ICAgICBuZWVkIHRvIGJlIGNvbnN0cnVjdGVkLiBUaGlzIHdpbGwgZW5kIHVwIGJlaW5nIHJlbGV2
YW50IGZvciBvdXRsaW5lcyBhbmQgZm9yIHNlbGYtcGFpbnRpbmcgbGF5ZXJzIChlLmcuLCBvcGFj
aXR5KS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlzdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMaW5lQm94TGlzdDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGluZUJveExpc3Q6OmhpdFRlc3QpOgorICAgICAgICBSZW1vdmUgdGhlIGZpbHRl
cnMgaGVyZSwgc2luY2UgdGhleSBnZXQgcHVzaGVkIGluIHRvIElubGluZUZsb3dCb3guCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
b290SW5saW5lQm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jvb3RJbmxp
bmVCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oOgorICAgICAgICBNb3JlIHBhdGNo
aW5nIHRvIHBhc3MgdGhlIEhpdFRlc3RBY3Rpb24gaW50byBub2RlQXRQb2ludC4KKwogMjAxNS0w
NC0wMSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIHN0
ZDo6Y2hyb25vIHR5cGVzIHRvIHJlcHJlc2VudCB0aW1lIGluIHJlc3BvbnNlIGFuZCBjYWNoZSBj
bGFzc2VzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAJKHJl
dmlzaW9uIDE4MjI0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsxNDAsNyBAQCB2b2lkIEVsbGlwc2lzQm94Ojpw
YWludFNlbGVjdGlvbihHcmFwaGljCiAgICAgY29udGV4dC0+ZmlsbFJlY3Qoc25hcFJlY3RUb0Rl
dmljZVBpeGVsc1dpdGhXcml0aW5nRGlyZWN0aW9uKHNlbGVjdGlvblJlY3QsIHJlbmRlcmVyKCku
ZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpLCBydW4ubHRyKCkpLCBjLCBzdHlsZS5jb2xv
clNwYWNlKCkpOwogfQogCi1ib29sIEVsbGlwc2lzQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0
TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVs
YXRlZE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pCiti
b29sIEVsbGlwc2lzQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9u
SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0
VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20sIEhpdFRlc3RBY3Rpb24gaGl0VGVz
dEFjdGlvbikKIHsKICAgICBMYXlvdXRQb2ludCBhZGp1c3RlZExvY2F0aW9uID0gYWNjdW11bGF0
ZWRPZmZzZXQgKyBMYXlvdXRQb2ludCh0b3BMZWZ0KCkpOwogCkBAIC0xNDksNyArMTQ5LDcgQEAg
Ym9vbCBFbGxpcHNpc0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VAogICAgICAgICBjb25zdCBS
ZW5kZXJTdHlsZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7CiAgICAgICAgIExheW91
dFVuaXQgbXR4ID0gYWRqdXN0ZWRMb2NhdGlvbi54KCkgKyBtX2xvZ2ljYWxXaWR0aCAtIG1hcmt1
cEJveC0+eCgpOwogICAgICAgICBMYXlvdXRVbml0IG10eSA9IGFkanVzdGVkTG9jYXRpb24ueSgp
ICsgbGluZVN0eWxlLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSAobWFya3VwQm94LT55KCkgKyBt
YXJrdXBCb3gtPmxpbmVTdHlsZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwotICAgICAgICBp
ZiAobWFya3VwQm94LT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIGxvY2F0aW9uSW5Db250
YWluZXIsIExheW91dFBvaW50KG10eCwgbXR5KSwgbGluZVRvcCwgbGluZUJvdHRvbSkpIHsKKyAg
ICAgICAgaWYgKG1hcmt1cEJveC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCBsb2NhdGlv
bkluQ29udGFpbmVyLCBMYXlvdXRQb2ludChtdHgsIG10eSksIGxpbmVUb3AsIGxpbmVCb3R0b20s
IGhpdFRlc3RBY3Rpb24pKSB7CiAgICAgICAgICAgICBibG9ja0Zsb3coKS51cGRhdGVIaXRUZXN0
UmVzdWx0KHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lci5wb2ludCgpIC0gTGF5b3V0U2l6ZSht
dHgsIG10eSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5oCShyZXZpc2lvbiAxODIyNDApCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guaAkod29ya2luZyBjb3B5KQpAQCAt
MzIsNyArMzIsNyBAQCBjbGFzcyBFbGxpcHNpc0JveCBmaW5hbCA6IHB1YmxpYyBJbmxpbmVFCiBw
dWJsaWM6CiAgICAgRWxsaXBzaXNCb3goUmVuZGVyQmxvY2tGbG93JiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBlbGxpcHNpc1N0ciwgSW5saW5lRmxvd0JveCogcGFyZW50LCBpbnQgd2lkdGgsIGludCBo
ZWlnaHQsIGludCB5LCBib29sIGZpcnN0TGluZSwgYm9vbCBpc1ZlcnRpY2FsLCBJbmxpbmVCb3gq
IG1hcmt1cEJveCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExh
eW91dFBvaW50JiwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250
YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCBs
aW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50
JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVC
b3R0b20sIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRlIGZpbmFsOwogICAgIHZvaWQgc2V0U2VsZWN0
aW9uU3RhdGUoUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBzKSB7IG1fc2VsZWN0aW9uU3Rh
dGUgPSBzOyB9CiAgICAgSW50UmVjdCBzZWxlY3Rpb25SZWN0KCk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lQm94LmgJKHJldmlzaW9uIDE4MjI0MCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBA
QCBwdWJsaWM6CiAgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNv
bnN0IExheW91dFBvaW50JiwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0
b20pID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29u
dGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQg
bGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKSA9IDA7CisgICAgdmlydHVhbCBib29sIG5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhp
dFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFj
Y3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRv
bSwgSGl0VGVzdEFjdGlvbikgPSAwOwogCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQogICAg
IHZvaWQgc2hvd05vZGVUcmVlRm9yVGhpcygpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUVsZW1lbnRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVFbGVtZW50Qm94LmNwcAkocmV2aXNpb24gMTgyMjQwKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUVsZW1lbnRCb3guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NSw3ICs2NSwyMyBAQCB2b2lkIElubGluZUVsZW1lbnRCb3g6OmF0dGFjaExpbmUo
KQogCiB2b2lkIElubGluZUVsZW1lbnRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBj
b25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIExheW91dFVuaXQgLyogbGluZVRvcCAqLywg
TGF5b3V0VW5pdCAvKmxpbmVCb3R0b20qLykKIHsKLSAgICBpZiAoIXBhaW50SW5mby5zaG91bGRQ
YWludFdpdGhpblJvb3QocmVuZGVyZXIoKSkgfHwgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBo
YXNlRm9yZWdyb3VuZCAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVNlbGVjdGlvbikp
CisgICAgaWYgKCFwYWludEluZm8uc2hvdWxkUGFpbnRXaXRoaW5Sb290KHJlbmRlcmVyKCkpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAocmVuZGVyZXIoKS5pc0Fub255bW91c0lubGluZUJs
b2NrKCkpIHsKKyAgICAgICAgLy8gVHJlYXQgcGFpbnRpbmcgb2YgYSBzcGVjaWFsIGlubGluZS1i
bG9jayBsaW5lIGxpa2UgdGhlIHBhaW50aW5nIG9mIGEgbm9ybWFsIGJsb2NrIGFuZCBnbyB0aHJv
dWdoIGFsbCBwaGFzZXMuCisgICAgICAgIFBhaW50UGhhc2UgbmV3UGhhc2UgPSAocGFpbnRJbmZv
LnBoYXNlID09IFBhaW50UGhhc2VDaGlsZE91dGxpbmVzKSA/IFBhaW50UGhhc2VPdXRsaW5lIDog
cGFpbnRJbmZvLnBoYXNlOworICAgICAgICBuZXdQaGFzZSA9IChuZXdQaGFzZSA9PSBQYWludFBo
YXNlQ2hpbGRCbG9ja0JhY2tncm91bmRzKSA/IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3Vu
ZCA6IG5ld1BoYXNlOworICAgICAgICAKKyAgICAgICAgUGFpbnRJbmZvIGluZm8ocGFpbnRJbmZv
KTsKKyAgICAgICAgaW5mby5waGFzZSA9IG5ld1BoYXNlOworICAgICAgICBpbmZvLnVwZGF0ZVN1
YnRyZWVQYWludFJvb3RGb3JDaGlsZHJlbigmcmVuZGVyZXIoKSk7CisgICAgICAgIEFTU0VSVCgh
cmVuZGVyZXIoKS5oYXNTZWxmUGFpbnRpbmdMYXllcigpKTsKKyAgICAgICAgcmVuZGVyZXIoKS5w
YWludChpbmZvLCBwYWludE9mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kICYmIHBhaW50SW5mby5w
aGFzZSAhPSBQYWludFBoYXNlU2VsZWN0aW9uKQogICAgICAgICByZXR1cm47CiAKICAgICBMYXlv
dXRQb2ludCBjaGlsZFBvaW50ID0gcGFpbnRPZmZzZXQ7CkBAIC03NSw5ICs5MSwxOCBAQCB2b2lk
IElubGluZUVsZW1lbnRCb3g6OnBhaW50KFBhaW50SW5mbyYgCiAgICAgcmVuZGVyZXIoKS5wYWlu
dEFzSW5saW5lQmxvY2socGFpbnRJbmZvLCBjaGlsZFBvaW50KTsKIH0KIAotYm9vbCBJbmxpbmVF
bGVtZW50Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250
YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCAv
KiBsaW5lVG9wICovLCBMYXlvdXRVbml0IC8qbGluZUJvdHRvbSovKQorYm9vbCBJbmxpbmVFbGVt
ZW50Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWlu
ZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCAvKiBs
aW5lVG9wICovLCBMYXlvdXRVbml0IC8qbGluZUJvdHRvbSovLAorICAgIEhpdFRlc3RBY3Rpb24g
aGl0VGVzdEFjdGlvbikKIHsKLSAgICAvLyBIaXQgdGVzdCBhbGwgcGhhc2VzIG9mIHJlcGxhY2Vk
IGVsZW1lbnRzIGF0b21pY2FsbHksIGFzIHRob3VnaCB0aGUgcmVwbGFjZWQgZWxlbWVudCBlc3Rh
Ymxpc2hlZCBpdHMKKyAgICAvLyBJZiB3ZSBhcmUgYW4gYW5vbnltb3VzIGlubGluZSBibG9jaywg
aG9ub3IgaGl0IHRlc3QgcGhhc2VzLgorICAgIGlmIChyZW5kZXJlcigpLmlzQW5vbnltb3VzSW5s
aW5lQmxvY2soKSkgeworICAgICAgICBIaXRUZXN0QWN0aW9uIGNoaWxkSGl0VGVzdCA9IGhpdFRl
c3RBY3Rpb247CisgICAgICAgIGlmIChoaXRUZXN0QWN0aW9uID09IEhpdFRlc3RDaGlsZEJsb2Nr
QmFja2dyb3VuZHMpCisgICAgICAgICAgICBjaGlsZEhpdFRlc3QgPSBIaXRUZXN0Q2hpbGRCbG9j
a0JhY2tncm91bmQ7CisgICAgICAgIHJldHVybiByZW5kZXJlcigpLm5vZGVBdFBvaW50KHJlcXVl
c3QsIHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGNoaWxk
SGl0VGVzdCk7CisgICAgfQorCisgICAgLy8gT3RoZXJ3aXNlIGhpdCB0ZXN0IGFsbCBwaGFzZXMg
b2YgcmVwbGFjZWQgZWxlbWVudHMgYXRvbWljYWxseSwgYXMgdGhvdWdoIHRoZSByZXBsYWNlZCBl
bGVtZW50IGVzdGFibGlzaGVkIGl0cwogICAgIC8vIG93biBzdGFja2luZyBjb250ZXh0LiAgKFNl
ZSBBcHBlbmRpeCBFLjIsIHNlY3Rpb24gNi40IG9uIGlubGluZSBibG9jay90YWJsZSBlbGVtZW50
cyBpbiB0aGUgQ1NTMi4xCiAgICAgLy8gc3BlY2lmaWNhdGlvbi4pCiAgICAgTGF5b3V0UG9pbnQg
Y2hpbGRQb2ludCA9IGFjY3VtdWxhdGVkT2Zmc2V0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUVsZW1lbnRCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lRWxlbWVudEJveC5oCShyZXZpc2lvbiAxODIyNDApCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRWxlbWVudEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoTGluZSgpIG92ZXJy
aWRlIGZpbmFsOwogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExh
eW91dFBvaW50JiwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250
YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCBs
aW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pIG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9v
bCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25z
dCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50
JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVC
b3R0b20sIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwg
Ym9vbCBpc0lubGluZUVsZW1lbnRCb3goKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiB0
cnVlOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3Bw
CShyZXZpc2lvbiAxODIyNDEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxv
d0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMzIsOCArMTAzMiwxMiBAQCB2b2lkIElubGlu
ZUZsb3dCb3g6OnNldE92ZXJmbG93RnJvbUxvZ2ljCiAgICAgc2V0VmlzdWFsT3ZlcmZsb3codmlz
dWFsT3ZlcmZsb3csIGxpbmVUb3AsIGxpbmVCb3R0b20pOwogfQogCi1ib29sIElubGluZUZsb3dC
b3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVz
dWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwg
Y29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3As
IExheW91dFVuaXQgbGluZUJvdHRvbSkKK2Jvb2wgSW5saW5lRmxvd0JveDo6bm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29u
c3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2lu
dCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5l
Qm90dG9tLCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCiB7CisgICAgLy8gQXMgbG9uZyBh
cyB3ZSBkb24ndCBoYXZlIGFuIGFub255bW91cyBpbmxpbmUgYmxvY2sgb24gb3VyIGxpbmUsIHdl
IHJlc3RyaWN0IG91ciBoaXQgdGVzdGluZyBvbmx5IHRvIHRoZSBmb3JlZ3JvdW5kIHBoYXNlLgor
ICAgIGlmICghaGFzQW5vbnltb3VzSW5saW5lQmxvY2soKSAmJiBoaXRUZXN0QWN0aW9uICE9IEhp
dFRlc3RGb3JlZ3JvdW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBMYXlvdXRSZWN0
IG92ZXJmbG93UmVjdCh2aXN1YWxPdmVyZmxvd1JlY3QobGluZVRvcCwgbGluZUJvdHRvbSkpOwog
ICAgIGZsaXBGb3JXcml0aW5nTW9kZShvdmVyZmxvd1JlY3QpOwogICAgIG92ZXJmbG93UmVjdC5t
b3ZlQnkoYWNjdW11bGF0ZWRPZmZzZXQpOwpAQCAtMTA2NCw3ICsxMDY4LDcgQEAgYm9vbCBJbmxp
bmVGbG93Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaQogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBjdWxsZWRQYXJlbnQgPSBuZXdQYXJlbnQ7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRpb25J
bkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGxpbmVUb3AsIGxpbmVCb3R0b20pKSB7Cisg
ICAgICAgICAgICBpZiAoY2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRp
b25JbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGxpbmVUb3AsIGxpbmVCb3R0b20sIGhp
dFRlc3RBY3Rpb24pKSB7CiAgICAgICAgICAgICAgICAgcmVuZGVyZXIoKS51cGRhdGVIaXRUZXN0
UmVzdWx0KHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXpl
KGFjY3VtdWxhdGVkT2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICB9CkBAIC0xMTI1LDYgKzExMjksMTAgQEAgYm9vbCBJbmxpbmVGbG93Qm94Ojpub2Rl
QXRQb2ludChjb25zdCBIaQogCiB2b2lkIElubGluZUZsb3dCb3g6OnBhaW50KFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIExheW91dFVuaXQgbGlu
ZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKQogeworICAgIC8vIEFzIGxvbmcgYXMgd2UgZG9u
J3QgaGF2ZSBhbiBhbm9ueW1vdXMgaW5saW5lIGJsb2NrIG9uIG91ciBsaW5lLCB3ZSByZXN0cmlj
dCBvdXIgcGFpbnRpbmcgb25seSB0byBhIGZldyBwaGFzZXMuCisgICAgaWYgKCFoYXNBbm9ueW1v
dXNJbmxpbmVCbG9jaygpICYmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91
bmQgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VTZWxlY3Rpb24gJiYgcGFpbnRJbmZv
LnBoYXNlICE9IFBhaW50UGhhc2VPdXRsaW5lICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBo
YXNlU2VsZk91dGxpbmUgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VDaGlsZE91dGxp
bmVzICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlVGV4dENsaXAgJiYgcGFpbnRJbmZv
LnBoYXNlICE9IFBhaW50UGhhc2VNYXNrKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgTGF5b3V0
UmVjdCBvdmVyZmxvd1JlY3QodmlzdWFsT3ZlcmZsb3dSZWN0KGxpbmVUb3AsIGxpbmVCb3R0b20p
KTsKICAgICBvdmVyZmxvd1JlY3QuaW5mbGF0ZShyZW5kZXJlcigpLm1heGltYWxPdXRsaW5lU2l6
ZShwYWludEluZm8ucGhhc2UpKTsKICAgICBmbGlwRm9yV3JpdGluZ01vZGUob3ZlcmZsb3dSZWN0
KTsKQEAgLTExNjgsMTEgKzExNzYsMTMgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludChQYWlu
dEluZm8mIHBhaQogICAgICAgICAgICAgICAgICAgICBwYWludEluZm8ub3V0bGluZU9iamVjdHMt
PmFkZCgmaW5saW5lRmxvdyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAocGFp
bnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VNYXNrKSB7Ci0gICAgICAgICAgICBwYWludE1hc2so
cGFpbnRJbmZvLCBwYWludE9mZnNldCk7CisgICAgICAgICAgICBpZiAoIWhhc0Fub255bW91c0lu
bGluZUJsb2NrKCkpCisgICAgICAgICAgICAgICAgcGFpbnRNYXNrKHBhaW50SW5mbywgcGFpbnRP
ZmZzZXQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgLy8gUGFpbnQgb3VyIGJhY2tncm91bmQsIGJvcmRlciBhbmQgYm94LXNoYWRvdy4KLSAgICAg
ICAgICAgIHBhaW50Qm94RGVjb3JhdGlvbnMocGFpbnRJbmZvLCBwYWludE9mZnNldCk7CisgICAg
ICAgICAgICBpZiAoIWhhc0Fub255bW91c0lubGluZUJsb2NrKCkpCisgICAgICAgICAgICAgICAg
cGFpbnRCb3hEZWNvcmF0aW9ucyhwYWludEluZm8sIHBhaW50T2Zmc2V0KTsKICAgICAgICAgfQog
ICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCShy
ZXZpc2lvbiAxODIyNDApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0Jv
eC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNyArMTIwLDcgQEAgcHVibGljOgogICAgIHZvaWQg
cGFpbnRGaWxsTGF5ZXIoY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgQ29sb3ImLCBjb25zdCBGaWxs
TGF5ZXIqLCBjb25zdCBMYXlvdXRSZWN0JiwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVT
b3VyY2VPdmVyKTsKICAgICB2b2lkIHBhaW50Qm94U2hhZG93KGNvbnN0IFBhaW50SW5mbyYsIGNv
bnN0IFJlbmRlclN0eWxlJiwgU2hhZG93U3R5bGUsIGNvbnN0IExheW91dFJlY3QmKTsKICAgICB2
aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBMYXlvdXRV
bml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkgb3ZlcnJpZGU7Ci0gICAgdmlydHVh
bCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYs
IGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0
UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQg
bGluZUJvdHRvbSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYg
bG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0
LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSwgSGl0VGVzdEFjdGlv
bikgb3ZlcnJpZGU7CiAKICAgICBib29sIGJveFNoYWRvd0NhbkJlQXBwbGllZFRvQmFja2dyb3Vu
ZChjb25zdCBGaWxsTGF5ZXImKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gMTgyMjQwKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODksNyAr
Mzg5LDggQEAgYm9vbCBJbmxpbmVUZXh0Qm94Ojppc0xpbmVCcmVhaygpIGNvbnN0CiAgICAgcmV0
dXJuIHJlbmRlcmVyKCkuc3R5bGUoKS5wcmVzZXJ2ZU5ld2xpbmUoKSAmJiBsZW4oKSA9PSAxICYm
ICgqcmVuZGVyZXIoKS50ZXh0KCkpW3N0YXJ0KCldID09ICdcbic7CiB9CiAKLWJvb2wgSW5saW5l
VGV4dEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRl
c3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFp
bmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgLyog
bGluZVRvcCAqLywgTGF5b3V0VW5pdCAvKmxpbmVCb3R0b20qLykKK2Jvb2wgSW5saW5lVGV4dEJv
eDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1
bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBj
b25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgLyogbGluZVRv
cCAqLywgTGF5b3V0VW5pdCAvKmxpbmVCb3R0b20qLywKKyAgICBIaXRUZXN0QWN0aW9uIC8qaGl0
VGVzdEFjdGlvbiovKQogewogICAgIGlmICghdmlzaWJsZVRvSGl0VGVzdGluZygpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmgJKHJldmlzaW9uIDE4MjI0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw3ICsxMjIsNyBAQCBwdWJsaWM6CiAK
IHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5
b3V0UG9pbnQmLCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSk7Ci0g
ICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVz
dFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29u
c3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExh
eW91dFVuaXQgbGluZUJvdHRvbSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIG5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEhpdFRlc3RM
b2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxh
dGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSwgSGl0
VGVzdEFjdGlvbikgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0
ZUxpbmUoKSBvdmVycmlkZSBmaW5hbDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiAxODIyNDEpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTkzLDYgKzE5Myw3IEBAIElubGluZUZsb3dCb3gqIFJlbmRlckJsb2NrRmxv
dzo6Y3JlYXRlTGkKICAgICBJbmxpbmVGbG93Qm94KiBwYXJlbnRCb3ggPSBudWxscHRyOwogICAg
IElubGluZUZsb3dCb3gqIHJlc3VsdCA9IG51bGxwdHI7CiAgICAgYm9vbCBoYXNEZWZhdWx0TGlu
ZUJveENvbnRhaW4gPSBzdHlsZSgpLmxpbmVCb3hDb250YWluKCkgPT0gUmVuZGVyU3R5bGU6Omlu
aXRpYWxMaW5lQm94Q29udGFpbigpOworICAgIGJvb2wgaXNCbG9ja0luc2lkZUlubGluZSA9IGNo
aWxkQm94LT5yZW5kZXJlcigpLmlzQW5vbnltb3VzSW5saW5lQmxvY2soKTsKICAgICBkbyB7CiAg
ICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGlzPFJlbmRlcklubGluZT4o
Km9iaikgfHwgb2JqID09IHRoaXMpOwogCkBAIC0yMTYsNiArMjE3LDcgQEAgSW5saW5lRmxvd0Jv
eCogUmVuZGVyQmxvY2tGbG93OjpjcmVhdGVMaQogICAgICAgICAgICAgcGFyZW50Qm94ID0gZG93
bmNhc3Q8SW5saW5lRmxvd0JveD4obmV3Qm94KTsKICAgICAgICAgICAgIHBhcmVudEJveC0+c2V0
SXNGaXJzdExpbmUobGluZUluZm8uaXNGaXJzdExpbmUoKSk7CiAgICAgICAgICAgICBwYXJlbnRC
b3gtPnNldElzSG9yaXpvbnRhbChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKTsKKyAgICAgICAg
ICAgIHBhcmVudEJveC0+c2V0SGFzQW5vbnltb3VzSW5saW5lQmxvY2soaXNCbG9ja0luc2lkZUlu
bGluZSk7CiAgICAgICAgICAgICBpZiAoIWhhc0RlZmF1bHRMaW5lQm94Q29udGFpbikKICAgICAg
ICAgICAgICAgICBwYXJlbnRCb3gtPmNsZWFyRGVzY2VuZGFudHNIYXZlU2FtZUxpbmVIZWlnaHRB
bmRCYXNlbGluZSgpOwogICAgICAgICAgICAgY29uc3RydWN0ZWROZXdCb3ggPSB0cnVlOwpAQCAt
Mjg0LDcgKzI4Niw2IEBAIFJvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2NrRmxvdzo6Y29uc3RydWMK
ICAgICBJbmxpbmVGbG93Qm94KiBwYXJlbnRCb3ggPSAwOwogICAgIGludCBydW5Db3VudCA9IGJp
ZGlSdW5zLnJ1bkNvdW50KCkgLSBsaW5lSW5mby5ydW5zRnJvbUxlYWRpbmdXaGl0ZXNwYWNlKCk7
CiAgICAgCi0gICAgYm9vbCBpc0Fub255bW91c0lubGluZUJsb2NrID0gZmFsc2U7CiAgICAgZm9y
IChCaWRpUnVuKiByID0gYmlkaVJ1bnMuZmlyc3RSdW4oKTsgcjsgciA9IHItPm5leHQoKSkgewog
ICAgICAgICAvLyBDcmVhdGUgYSBib3ggZm9yIG91ciBvYmplY3QuCiAgICAgICAgIGJvb2wgaXNP
bmx5UnVuID0gKHJ1bkNvdW50ID09IDEpOwpAQCAtMjk5LDggKzMwMCw2IEBAIFJvb3RJbmxpbmVC
b3gqIFJlbmRlckJsb2NrRmxvdzo6Y29uc3RydWMKIAogICAgICAgICBpZiAoIXJvb3RIYXNTZWxl
Y3RlZENoaWxkcmVuICYmIGJveC0+cmVuZGVyZXIoKS5zZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRl
ck9iamVjdDo6U2VsZWN0aW9uTm9uZSkKICAgICAgICAgICAgIHJvb3RIYXNTZWxlY3RlZENoaWxk
cmVuID0gdHJ1ZTsKLSAgICAKLSAgICAgICAgaXNBbm9ueW1vdXNJbmxpbmVCbG9jayA9IHItPnJl
bmRlcmVyKCkuaXNBbm9ueW1vdXNJbmxpbmVCbG9jaygpOwogICAgICAgICAKICAgICAgICAgLy8g
SWYgd2UgaGF2ZSBubyBwYXJlbnQgYm94IHlldCwgb3IgaWYgdGhlIHJ1biBpcyBub3Qgc2ltcGx5
IGEgc2libGluZywKICAgICAgICAgLy8gdGhlbiB3ZSBuZWVkIHRvIGNvbnN0cnVjdCBpbmxpbmUg
Ym94ZXMgYXMgbmVjZXNzYXJ5IHRvIHByb3Blcmx5IGVuY2xvc2UgdGhlCkBAIC0zMDgsOSArMzA3
LDcgQEAgUm9vdElubGluZUJveCogUmVuZGVyQmxvY2tGbG93Ojpjb25zdHJ1YwogICAgICAgICAv
LyB0aGV5IGFyZSBwb3NpdGlvbmVkIHNlcGFyYXRlbHkuCiAgICAgICAgIGlmICghcGFyZW50Qm94
IHx8ICZwYXJlbnRCb3gtPnJlbmRlcmVyKCkgIT0gci0+cmVuZGVyZXIoKS5wYXJlbnQoKSkgewog
ICAgICAgICAgICAgLy8gQ3JlYXRlIG5ldyBpbmxpbmUgYm94ZXMgYWxsIHRoZSB3YXkgYmFjayB0
byB0aGUgYXBwcm9wcmlhdGUgaW5zZXJ0aW9uIHBvaW50LgotICAgICAgICAgICAgLy8gRm9yIGFu
b255bW91cyBpbmxpbmUgYmxvY2tzLCB3ZSBuZXZlciBjcmVhdGUgaW50ZXJtZWRpYXRlIGxpbmUg
Ym94ZXMgZm9yIHRoZSBpbmxpbmVzLCBzaW5jZQotICAgICAgICAgICAgLy8gd2Ugd2FudCB0byBw
cmV0ZW5kIGxpa2UgdGhleSBkb24ndCBleGlzdCBvbiB0aGUgbGluZS4KLSAgICAgICAgICAgIFJl
bmRlck9iamVjdCogcGFyZW50VG9Vc2UgPSBpc0Fub255bW91c0lubGluZUJsb2NrID8gdGhpcyA6
IHItPnJlbmRlcmVyKCkucGFyZW50KCk7CisgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHBhcmVu
dFRvVXNlID0gci0+cmVuZGVyZXIoKS5wYXJlbnQoKTsKICAgICAgICAgICAgIHBhcmVudEJveCA9
IGNyZWF0ZUxpbmVCb3hlcyhwYXJlbnRUb1VzZSwgbGluZUluZm8sIGJveCk7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAvLyBBcHBlbmQgdGhlIGlubGluZSBib3ggdG8gdGhpcyBsaW5l
LgpAQCAtMzQ4LDggKzM0NSw2IEBAIFJvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2NrRmxvdzo6Y29u
c3RydWMKIAogICAgIC8vIE5vdyBtYXJrIHRoZSBsaW5lIGJveGVzIGFzIGJlaW5nIGNvbnN0cnVj
dGVkLgogICAgIGxhc3RSb290Qm94KCktPnNldENvbnN0cnVjdGVkKCk7Ci0gICAgCi0gICAgbGFz
dFJvb3RCb3goKS0+c2V0SGFzQW5vbnltb3VzSW5saW5lQmxvY2soaXNBbm9ueW1vdXNJbmxpbmVC
bG9jayk7CiAKICAgICAvLyBSZXR1cm4gdGhlIGxhc3QgbGluZS4KICAgICByZXR1cm4gbGFzdFJv
b3RCb3goKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQm94TGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVC
b3hMaXN0LmNwcAkocmV2aXNpb24gMTgyMjQwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpbmVCb3hMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDEyICsyMDYsNiBA
QCBib29sIFJlbmRlckxpbmVCb3hMaXN0OjpsaW5lSW50ZXJzZWN0c0RpCiAKIHZvaWQgUmVuZGVy
TGluZUJveExpc3Q6OnBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciwgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkgY29uc3QKIHsK
LSAgICAvLyBPbmx5IHBhaW50IGR1cmluZyB0aGUgZm9yZWdyb3VuZC9zZWxlY3Rpb24gcGhhc2Vz
LgotICAgIGlmIChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQgJiYgcGFp
bnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VTZWxlY3Rpb24gJiYgcGFpbnRJbmZvLnBoYXNlICE9
IFBhaW50UGhhc2VPdXRsaW5lIAotICAgICAgICAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQ
aGFzZVNlbGZPdXRsaW5lICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlQ2hpbGRPdXRs
aW5lcyAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZVRleHRDbGlwCi0gICAgICAgICYm
IHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlTWFzaykKLSAgICAgICAgcmV0dXJuOwotCiAg
ICAgQVNTRVJUKHJlbmRlcmVyLT5pc1JlbmRlckJsb2NrKCkgfHwgKHJlbmRlcmVyLT5pc1JlbmRl
cklubGluZSgpICYmIHJlbmRlcmVyLT5oYXNMYXllcigpKSk7IC8vIFRoZSBvbmx5IHdheSBhbiBp
bmxpbmUgY291bGQgcGFpbnQgbGlrZSB0aGlzIGlzIGlmIGl0IGhhcyBhIGxheWVyLgogCiAgICAg
Ly8gSWYgd2UgaGF2ZSBubyBsaW5lcyB0aGVuIHdlIGhhdmUgbm8gd29yayB0byBkby4KQEAgLTI3
OSw5ICsyNzMsNiBAQCB2b2lkIFJlbmRlckxpbmVCb3hMaXN0OjpwYWludChSZW5kZXJCb3hNCiAK
IGJvb2wgUmVuZGVyTGluZUJveExpc3Q6OmhpdFRlc3QoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJl
bmRlcmVyLCBjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExh
eW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9u
KSBjb25zdAogewotICAgIGlmIChoaXRUZXN0QWN0aW9uICE9IEhpdFRlc3RGb3JlZ3JvdW5kKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICBBU1NFUlQocmVuZGVyZXItPmlzUmVuZGVyQmxv
Y2soKSB8fCAocmVuZGVyZXItPmlzUmVuZGVySW5saW5lKCkgJiYgcmVuZGVyZXItPmhhc0xheWVy
KCkpKTsgLy8gVGhlIG9ubHkgd2F5IGFuIGlubGluZSBjb3VsZCBoaXQgdGVzdCBsaWtlIHRoaXMg
aXMgaWYgaXQgaGFzIGEgbGF5ZXIuCiAKICAgICAvLyBJZiB3ZSBoYXZlIG5vIGxpbmVzIHRoZW4g
d2UgaGF2ZSBubyB3b3JrIHRvIGRvLgpAQCAtMzAyLDcgKzI5Myw3IEBAIGJvb2wgUmVuZGVyTGlu
ZUJveExpc3Q6OmhpdFRlc3QoUmVuZGVyQm8KICAgICBmb3IgKElubGluZUZsb3dCb3gqIGN1cnIg
PSBsYXN0TGluZUJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+cHJldkxpbmVCb3goKSkgewogICAg
ICAgICBjb25zdCBSb290SW5saW5lQm94JiByb290Qm94ID0gY3Vyci0+cm9vdCgpOwogICAgICAg
ICBpZiAocmFuZ2VJbnRlcnNlY3RzUmVjdChyZW5kZXJlciwgY3Vyci0+bG9naWNhbFRvcFZpc3Vh
bE92ZXJmbG93KHJvb3RCb3gubGluZVRvcCgpKSwgY3Vyci0+bG9naWNhbEJvdHRvbVZpc3VhbE92
ZXJmbG93KHJvb3RCb3gubGluZUJvdHRvbSgpKSwgcmVjdCwgYWNjdW11bGF0ZWRPZmZzZXQpKSB7
Ci0gICAgICAgICAgICBib29sIGluc2lkZSA9IGN1cnItPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJl
c3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIHJvb3RCb3gubGlu
ZVRvcCgpLCByb290Qm94LmxpbmVCb3R0b20oKSk7CisgICAgICAgICAgICBib29sIGluc2lkZSA9
IGN1cnItPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwg
YWNjdW11bGF0ZWRPZmZzZXQsIHJvb3RCb3gubGluZVRvcCgpLCByb290Qm94LmxpbmVCb3R0b20o
KSwgaGl0VGVzdEFjdGlvbik7CiAgICAgICAgICAgICBpZiAoaW5zaWRlKSB7CiAgICAgICAgICAg
ICAgICAgcmVuZGVyZXItPnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBsb2NhdGlvbkluQ29u
dGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWNjdW11bGF0ZWRPZmZzZXQpKTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
b290SW5saW5lQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Um9vdElubGluZUJveC5jcHAJKHJldmlzaW9uIDE4MjI0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9Sb290SW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg3LDE1ICsxODcs
MTUgQEAgdm9pZCBSb290SW5saW5lQm94OjpwYWludChQYWludEluZm8mIHBhaQogICAgIHBhaW50
RWxsaXBzaXNCb3gocGFpbnRJbmZvLCBwYWludE9mZnNldCwgbGluZVRvcCwgbGluZUJvdHRvbSk7
CiB9CiAKLWJvb2wgUm9vdElubGluZUJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdExvY2F0aW9u
JiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZz
ZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKQorYm9vbCBSb290
SW5saW5lQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0
VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250
YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCBs
aW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20sIEhpdFRlc3RBY3Rpb24gaGl0VGVzdEFjdGlv
bikKIHsKICAgICBpZiAoaGFzRWxsaXBzaXNCb3goKSAmJiB2aXNpYmxlVG9IaXRUZXN0aW5nKCkp
IHsKLSAgICAgICAgaWYgKGVsbGlwc2lzQm94KCktPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3Vs
dCwgbG9jYXRpb25JbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRPZmZzZXQsIGxpbmVUb3AsIGxpbmVC
b3R0b20pKSB7CisgICAgICAgIGlmIChlbGxpcHNpc0JveCgpLT5ub2RlQXRQb2ludChyZXF1ZXN0
LCByZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIsIGFjY3VtdWxhdGVkT2Zmc2V0LCBsaW5lVG9w
LCBsaW5lQm90dG9tLCBoaXRUZXN0QWN0aW9uKSkgewogICAgICAgICAgICAgcmVuZGVyZXIoKS51
cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lci5wb2ludCgpIC0g
dG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gSW5saW5lRmxvd0JveDo6bm9kZUF0UG9p
bnQocmVxdWVzdCwgcmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBhY2N1bXVsYXRlZE9mZnNl
dCwgbGluZVRvcCwgbGluZUJvdHRvbSk7CisgICAgcmV0dXJuIElubGluZUZsb3dCb3g6Om5vZGVB
dFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgYWNjdW11bGF0ZWRP
ZmZzZXQsIGxpbmVUb3AsIGxpbmVCb3R0b20sIGhpdFRlc3RBY3Rpb24pOwogfQogCiB2b2lkIFJv
b3RJbmxpbmVCb3g6OmFkanVzdFBvc2l0aW9uKGZsb2F0IGR4LCBmbG9hdCBkeSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAkocmV2aXNpb24gMTgyMjQwKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAkod29ya2luZyBjb3B5
KQpAQCAtMTE5LDcgKzExOSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIExheW91dFVuaXQgbGlu
ZUhlaWdodCgpIGNvbnN0IG92ZXJyaWRlIGZpbmFsOwogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50
KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlv
dXRVbml0IGxpbmVCb3R0b20pIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2lu
dChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9j
YXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRl
ZE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pIG92ZXJy
aWRlIGZpbmFsOworICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5D
b250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5p
dCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20sIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRl
IGZpbmFsOwogCiAgICAgdXNpbmcgSW5saW5lQm94OjpoYXNTZWxlY3RlZENoaWxkcmVuOwogICAg
IHVzaW5nIElubGluZUJveDo6c2V0SGFzU2VsZWN0ZWRDaGlsZHJlbjsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNp
b24gMTgyMjQwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0
Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcxLDcgKzY3MSw3IEBAIEZsb2F0UmVjdCBTVkdJ
bmxpbmVUZXh0Qm94OjpjYWxjdWxhdGVCb3UKICAgICByZXR1cm4gdGV4dFJlY3Q7CiB9CiAKLWJv
b2wgU1ZHSW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2Nh
dGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExh
eW91dFVuaXQsIExheW91dFVuaXQpCitib29sIFNWR0lubGluZVRleHRCb3g6Om5vZGVBdFBvaW50
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNv
bnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9p
bnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0LCBMYXlvdXRVbml0LCBIaXRUZXN0QWN0
aW9uKQogewogICAgIC8vIEZJWE1FOiBpbnRlZ3JhdGUgd2l0aCBJbmxpbmVUZXh0Qm94Ojpub2Rl
QXRQb2ludCBiZXR0ZXIuCiAgICAgQVNTRVJUKCFpc0xpbmVCcmVhaygpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oCShyZXZpc2lv
biAxODIyNDApCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRC
b3guaAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
cGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0KiwgUmVuZGVyU3R5bGUqLCBUZXh0
UnVuJiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQ
b3NpdGlvbik7CiAgICAgdm9pZCBwYWludFRleHQoR3JhcGhpY3NDb250ZXh0KiwgUmVuZGVyU3R5
bGUqLCBSZW5kZXJTdHlsZSogc2VsZWN0aW9uU3R5bGUsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYs
IGJvb2wgaGFzU2VsZWN0aW9uLCBib29sIHBhaW50U2VsZWN0ZWRUZXh0T25seSk7CiAKLSAgICB2
aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVz
dWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBM
YXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0
VW5pdCBsaW5lQm90dG9tKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0
aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRP
ZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tLCBIaXRUZXN0
QWN0aW9uKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICBmbG9hdCBtX2xvZ2ljYWxIZWlnaHQ7
CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAxODIyNzEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxNS0wNC0wMiAgRGF2aWQgSHlhdHQgIDxo
eWF0dEBhcHBsZS5jb20+CisKKyAgICAgICAgW05ldyBCbG9jay1JbnNpZGUtSW5saW5lIE1vZGVs
XSBJbXBsZW1lbnQgdGhlIGNvcnJlY3QgcGFpbnQgb3JkZXIgZm9yIGJsb2NrcyBpbnNpZGUgaW5s
aW5lcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
MzMyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
ZmFzdC9ibG9jay9pbnNpZGUtaW5saW5lcy9uZXctbW9kZWwvcGFpbnQtb3JkZXItZXhwZWN0ZWQu
aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9ibG9jay9pbnNpZGUtaW5saW5lcy9uZXctbW9k
ZWwvcGFpbnQtb3JkZXIuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9ibG9jay9pbnNpZGUt
aW5saW5lcy9vcGFjaXR5LW9uLWlubGluZS1leHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2Jsb2NrL2luc2lkZS1pbmxpbmVzL29wYWNpdHktb24taW5saW5lLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvYmxvY2svaW5zaWRlLWlubGluZXMvcGFpbnQtb3JkZXItZXhwZWN0
ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9ibG9jay9pbnNpZGUtaW5saW5lcy9wYWlu
dC1vcmRlci5odG1sOiBBZGRlZC4KKwogMjAxNS0wNC0wMiAgSm9vbmdodW4gUGFyayAgPGpoNzE4
LnBhcmtAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0NTUyBNdWx0aUNvbHVtbl0gUGFyc2UgImNv
bHVtbnM6IGF1dG8gPGxlbmd0aD4iIHNob3J0aGFuZCBwcm9wZXJ0eSB2YWx1ZSBwcm9wZXJseQpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9ibG9jay9pbnNpZGUtaW5saW5lcy9vcGFjaXR5LW9uLWlu
bGluZS1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvYmxvY2sv
aW5zaWRlLWlubGluZXMvb3BhY2l0eS1vbi1pbmxpbmUtZXhwZWN0ZWQuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvYmxvY2svaW5zaWRlLWlubGluZXMvb3BhY2l0eS1vbi1p
bmxpbmUtZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkgQEAKKzwhZG9j
dHlwZSBodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisuYm94IHsgcGFkZGluZzozcHg7IG1hcmdpbjoz
cHggfQorLmJveCBkaXYgeyBoZWlnaHQ6NDBweDsgYm9yZGVyOjJweCBzb2xpZCBibGFjazsgYmFj
a2dyb3VuZC1jb2xvcjpvcmFuZ2UgfQorPC9zdHlsZT4KKzxib2R5PgorCis8ZGl2IGNsYXNzPSJi
b3giPjxkaXYgc3R5bGU9Im9wYWNpdHk6MC41Ij5UaGlzIGJsb2NrIHNob3VsZCBiZSBwYXJ0aWFs
bHkgdHJhbnNwYXJlbnQuPC9kaXY+PC9hPjwvZGl2PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9i
bG9jay9pbnNpZGUtaW5saW5lcy9vcGFjaXR5LW9uLWlubGluZS5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvYmxvY2svaW5zaWRlLWlubGluZXMvb3BhY2l0eS1vbi1pbmxpbmUu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvYmxvY2svaW5zaWRlLWlubGlu
ZXMvb3BhY2l0eS1vbi1pbmxpbmUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0IEBA
Cis8IWRvY3R5cGUgaHRtbD4KKzxoZWFkPgorPHN0eWxlPgorLmJveCB7IHBhZGRpbmc6M3B4OyBt
YXJnaW46M3B4IH0KKy5ib3ggZGl2IHsgaGVpZ2h0OjQwcHg7IGJvcmRlcjoycHggc29saWQgYmxh
Y2s7IGJhY2tncm91bmQtY29sb3I6b3JhbmdlIH0KK2EgeyBvcGFjaXR5OjAuNSB9Cis8L3N0eWxl
PgorPHNjcmlwdD4KK2lmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgIHdpbmRvdy5pbnRlcm5hbHMu
c2V0dGluZ3Muc2V0TmV3QmxvY2tJbnNpZGVJbmxpbmVNb2RlbEVuYWJsZWQodHJ1ZSkKKzwvc2Ny
aXB0PgorPGJvZHk+CisKKzxkaXYgY2xhc3M9ImJveCI+PGE+PGRpdj5UaGlzIGJsb2NrIHNob3Vs
ZCBiZSBwYXJ0aWFsbHkgdHJhbnNwYXJlbnQuPC9kaXY+PC9hPjwvZGl2PgpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9ibG9jay9pbnNpZGUtaW5saW5lcy9wYWludC1vcmRlci1leHBlY3RlZC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvYmxvY2svaW5zaWRlLWlubGluZXMvcGFp
bnQtb3JkZXItZXhwZWN0ZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
YmxvY2svaW5zaWRlLWlubGluZXMvcGFpbnQtb3JkZXItZXhwZWN0ZWQuaHRtbAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE2IEBACis8IWRvY3R5cGUgaHRtbD4KKzxoZWFkPgorPHN0eWxlPgor
LmJveCB7IHBhZGRpbmc6M3B4OyBtYXJnaW46M3B4IH0KKy5ub3dyYXAgeyB3aGl0ZS1zcGFjZTog
bm93cmFwOyB9CisuZmxvYXQgeyBmbG9hdDogbGVmdDsgfQorLmJveCBkaXYgeyBoZWlnaHQ6NDBw
eDsgYm9yZGVyOjJweCBzb2xpZCBibGFjazsgfQorLmZsb2F0IHsgd2lkdGg6MTAwcHg7IGhlaWdo
dDoxMDBweDsgYmFja2dyb3VuZC1jb2xvcjp5ZWxsb3cgfQorLnNoaWZ0IHsgbWFyZ2luLXRvcDot
NDhweDsgaGVpZ2h0OjQwcHg7IGJhY2tncm91bmQtY29sb3I6b3JhbmdlOyBtYXJnaW4tcmlnaHQ6
OHB4IH0KKzwvc3R5bGU+Cis8Ym9keT4KKworPGRpdiBjbGFzcz0iZmxvYXQiPjwvZGl2PgorCis8
ZGl2IGNsYXNzPSJib3giPjxkaXY+VGhpcyBsaW5lIG9mIHRleHQgc2hvdWxkIGF2b2lkIHRoZSBm
bG9hdCBhbmQgcGFpbnQgb24gdG9wIG9mIHRoZSBvcmFuZ2UgYmFja2dyb3VuZC4gIFRoZSBibGFj
ayBib3JkZXIgc2hvdWxkIHBhaW50IGJlaGluZCB0aGUgZmxvYXQuPC9kaXY+PC9kaXY+Cis8ZGl2
IGNsYXNzPSJzaGlmdCI+PC9kaXY+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9ibG9jay9pbnNpZGUtaW5saW5lcy9wYWludC1vcmRlci5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvYmxvY2svaW5zaWRlLWlubGluZXMvcGFpbnQt
b3JkZXIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvYmxvY2svaW5zaWRl
LWlubGluZXMvcGFpbnQtb3JkZXIuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2IEBA
Cis8IWRvY3R5cGUgaHRtbD4KKzxoZWFkPgorPHN0eWxlPgorLmJveCB7IHBhZGRpbmc6M3B4OyBt
YXJnaW46M3B4IH0KKy5ub3dyYXAgeyB3aGl0ZS1zcGFjZTogbm93cmFwOyB9CisuZmxvYXQgeyBm
bG9hdDogbGVmdDsgfQorLmJveCBkaXYgeyBoZWlnaHQ6NDBweDsgYm9yZGVyOjJweCBzb2xpZCBi
bGFjazsgYmFja2dyb3VuZC1jb2xvcjpyZWQgfQorLmZsb2F0IHsgd2lkdGg6MTAwcHg7IGhlaWdo
dDoxMDBweDsgYmFja2dyb3VuZC1jb2xvcjp5ZWxsb3cgfQorLnNoaWZ0IHsgbWFyZ2luLXRvcDot
NDhweDsgaGVpZ2h0OjQwcHg7IGJhY2tncm91bmQtY29sb3I6b3JhbmdlOyBtYXJnaW4tcmlnaHQ6
OHB4IH0KKzwvc3R5bGU+Cis8Ym9keT4KKworPGRpdiBjbGFzcz0iZmxvYXQiPjwvZGl2PgorCis8
ZGl2IGNsYXNzPSJib3giPjxhPjxkaXY+VGhpcyBsaW5lIG9mIHRleHQgc2hvdWxkIGF2b2lkIHRo
ZSBmbG9hdCBhbmQgcGFpbnQgb24gdG9wIG9mIHRoZSBvcmFuZ2UgYmFja2dyb3VuZC4gVGhlIGJs
YWNrIGJvcmRlciBzaG91bGQgcGFpbnQgYmVoaW5kIHRoZSBmbG9hdC48L2Rpdj48L2E+PC9kaXY+
Cis8ZGl2IGNsYXNzPSJzaGlmdCI+PC9kaXY+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9ibG9jay9pbnNpZGUtaW5saW5lcy9uZXctbW9kZWwvcGFp
bnQtb3JkZXItZXhwZWN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Js
b2NrL2luc2lkZS1pbmxpbmVzL25ldy1tb2RlbC9wYWludC1vcmRlci1leHBlY3RlZC5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ibG9jay9pbnNpZGUtaW5saW5lcy9uZXct
bW9kZWwvcGFpbnQtb3JkZXItZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE2IEBACis8IWRvY3R5cGUgaHRtbD4KKzxoZWFkPgorPHN0eWxlPgorLmJveCB7IHBhZGRpbmc6
M3B4OyBtYXJnaW46M3B4IH0KKy5ub3dyYXAgeyB3aGl0ZS1zcGFjZTogbm93cmFwOyB9CisuZmxv
YXQgeyBmbG9hdDogbGVmdDsgfQorLmJveCBkaXYgeyBoZWlnaHQ6NDBweDsgYm9yZGVyOjJweCBz
b2xpZCBibGFjayB9CisuZmxvYXQgeyB3aWR0aDoxMDBweDsgaGVpZ2h0OjEwMHB4OyBiYWNrZ3Jv
dW5kLWNvbG9yOnllbGxvdyB9Cisuc2hpZnQgeyBtYXJnaW4tdG9wOi00OHB4OyBoZWlnaHQ6NDBw
eDsgYmFja2dyb3VuZC1jb2xvcjpvcmFuZ2U7IG1hcmdpbi1yaWdodDo4cHggfQorPC9zdHlsZT4K
Kzxib2R5PgorCis8ZGl2IGNsYXNzPSJmbG9hdCI+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImJveCI+
PGRpdj5UaGlzIGxpbmUgb2YgdGV4dCBzaG91bGQgYXZvaWQgdGhlIGZsb2F0IGFuZCBwYWludCBv
biB0b3Agb2YgdGhlIG9yYW5nZSBiYWNrZ3JvdW5kLiAgVGhlIGJsYWNrIGJvcmRlciBzaG91bGQg
cGFpbnQgYmVoaW5kIHRoZSBmbG9hdC48L2Rpdj48L2Rpdj4KKzxkaXYgY2xhc3M9InNoaWZ0Ij48
L2Rpdj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2Jsb2NrL2luc2lkZS1pbmxpbmVzL25ldy1tb2RlbC9wYWludC1vcmRlci5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvYmxvY2svaW5zaWRlLWlubGluZXMvbmV3LW1vZGVsL3Bh
aW50LW9yZGVyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Jsb2NrL2lu
c2lkZS1pbmxpbmVzL25ldy1tb2RlbC9wYWludC1vcmRlci5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjAgQEAKKzwhZG9jdHlwZSBodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisuYm94IHsg
cGFkZGluZzozcHg7IG1hcmdpbjozcHggfQorLm5vd3JhcCB7IHdoaXRlLXNwYWNlOiBub3dyYXA7
IH0KKy5mbG9hdCB7IGZsb2F0OiBsZWZ0OyB9CisuYm94IGRpdiB7IGhlaWdodDo0MHB4OyBib3Jk
ZXI6MnB4IHNvbGlkIGJsYWNrOyBiYWNrZ3JvdW5kLWNvbG9yOnJlZCB9CisuZmxvYXQgeyB3aWR0
aDoxMDBweDsgaGVpZ2h0OjEwMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOnllbGxvdyB9Cisuc2hpZnQg
eyBtYXJnaW4tdG9wOi00OHB4OyBoZWlnaHQ6NDBweDsgYmFja2dyb3VuZC1jb2xvcjpvcmFuZ2U7
IG1hcmdpbi1yaWdodDo4cHggfQorPC9zdHlsZT4KKzxzY3JpcHQ+CitpZiAod2luZG93LmludGVy
bmFscykKKyAgICB3aW5kb3cuaW50ZXJuYWxzLnNldHRpbmdzLnNldE5ld0Jsb2NrSW5zaWRlSW5s
aW5lTW9kZWxFbmFibGVkKHRydWUpCis8L3NjcmlwdD4KKzxib2R5PgorCis8ZGl2IGNsYXNzPSJm
bG9hdCI+PC9kaXY+CisKKzxkaXYgY2xhc3M9ImJveCI+PGE+PGRpdj5UaGlzIGxpbmUgb2YgdGV4
dCBzaG91bGQgYXZvaWQgdGhlIGZsb2F0IGFuZCBwYWludCBvbiB0b3Agb2YgdGhlIG9yYW5nZSBi
YWNrZ3JvdW5kLiBUaGUgYmxhY2sgYm9yZGVyIHNob3VsZCBwYWludCBiZWhpbmQgdGhlIGZsb2F0
LjwvZGl2PjwvYT48L2Rpdj4KKzxkaXYgY2xhc3M9InNoaWZ0Ij48L2Rpdj4KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCg==
</data>
<flag name="review"
          id="274821"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>