<?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>159910</bug_id>
          
          <creation_ts>2016-07-18 17:10:45 -0700</creation_ts>
          <short_desc>AX: Incorrect behavior for word related text marker functions when there&apos;s collapsed whitespace</short_desc>
          <delta_ts>2016-07-19 11:15:03 -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>Accessibility</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nan Wang">n_wang</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>mario</cc>
    
    <cc>n_wang</cc>
    
    <cc>samuel_white</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1212204</commentid>
    <comment_count>0</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-07-18 17:10:45 -0700</bug_when>
    <thetext>When there&apos;s collapsed whitespace, we are getting incorrect text marker ranges for words.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1212205</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-07-18 17:11:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/27414506&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1212206</commentid>
    <comment_count>2</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-07-18 17:11:51 -0700</bug_when>
    <thetext>&lt;rdar://problem/26898984&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1212210</commentid>
    <comment_count>3</comment_count>
      <attachid>283964</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-07-18 17:21:25 -0700</bug_when>
    <thetext>Created attachment 283964
Initial patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1212289</commentid>
    <comment_count>4</comment_count>
      <attachid>283964</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2016-07-19 00:11:51 -0700</bug_when>
    <thetext>Comment on attachment 283964
Initial patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        We are getting bad CharacterOffset when there&apos;s collapsed whitespace. Added a TraverseOptionValidateOffset

getting &quot;a&quot; bad

&gt; Source/WebCore/ChangeLog:10
&gt; +        fixed word navigation issue based on that.

fixed &quot;a&quot; word

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:1645
&gt; +    // For replaced node without children, we should inluce itself in the range.

inluce -&gt; include

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:1650
&gt; +    if (ec)

it looks like the ec case is handled directly below</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1212377</commentid>
    <comment_count>5</comment_count>
      <attachid>284009</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-07-19 08:50:50 -0700</bug_when>
    <thetext>Created attachment 284009
patch

update from review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1212378</commentid>
    <comment_count>6</comment_count>
      <attachid>284010</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-07-19 08:52:07 -0700</bug_when>
    <thetext>Created attachment 284010
patch

fixed typo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1212381</commentid>
    <comment_count>7</comment_count>
      <attachid>284009</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2016-07-19 09:08:32 -0700</bug_when>
    <thetext>Comment on attachment 284009
patch

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

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:1590
&gt; +        bool cumulateEnough = validateOffset ? cumulativeOffset + lastStartOffset &gt;= offset : cumulativeOffset &gt;= offset;

the name of this variable is strange: cumulateEnough
what purpose do you want it to serve?

it seems like it could be &quot;bool validOffset&quot;

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:2307
&gt; +    // SimplifiedBackwardsTextIterator ignores replaced element

period after this sentence</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1212388</commentid>
    <comment_count>8</comment_count>
      <attachid>284009</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-07-19 09:12:29 -0700</bug_when>
    <thetext>Comment on attachment 284009
patch

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

&gt;&gt; Source/WebCore/accessibility/AXObjectCache.cpp:1590
&gt;&gt; +        bool cumulateEnough = validateOffset ? cumulativeOffset + lastStartOffset &gt;= offset : cumulativeOffset &gt;= offset;
&gt; 
&gt; the name of this variable is strange: cumulateEnough
&gt; what purpose do you want it to serve?
&gt; 
&gt; it seems like it could be &quot;bool validOffset&quot;

This is to check if we have cumulated enough characters so that we can break early.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1212390</commentid>
    <comment_count>9</comment_count>
      <attachid>284012</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-07-19 09:18:06 -0700</bug_when>
    <thetext>Created attachment 284012
patch

more review comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1212410</commentid>
    <comment_count>10</comment_count>
      <attachid>284009</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2016-07-19 10:16:51 -0700</bug_when>
    <thetext>Comment on attachment 284009
patch

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

&gt;&gt;&gt; Source/WebCore/accessibility/AXObjectCache.cpp:1590
&gt;&gt;&gt; +        bool cumulateEnough = validateOffset ? cumulativeOffset + lastStartOffset &gt;= offset : cumulativeOffset &gt;= offset;
&gt;&gt; 
&gt;&gt; the name of this variable is strange: cumulateEnough
&gt;&gt; what purpose do you want it to serve?
&gt;&gt; 
&gt;&gt; it seems like it could be &quot;bool validOffset&quot;
&gt; 
&gt; This is to check if we have cumulated enough characters so that we can break early.

bool offsetLimitReached</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1212420</commentid>
    <comment_count>11</comment_count>
      <attachid>284018</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-07-19 10:31:24 -0700</bug_when>
    <thetext>Created attachment 284018
patch

Changed variable name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1212436</commentid>
    <comment_count>12</comment_count>
      <attachid>284018</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-19 11:14:58 -0700</bug_when>
    <thetext>Comment on attachment 284018
patch

Clearing flags on attachment: 284018

Committed r203412: &lt;http://trac.webkit.org/changeset/203412&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1212437</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-19 11:15:03 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283964</attachid>
            <date>2016-07-18 17:21:25 -0700</date>
            <delta_ts>2016-07-19 08:50:50 -0700</delta_ts>
            <desc>Initial patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>16299</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzM4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE2LTA3LTE4ICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEluY29ycmVjdCBiZWhhdmlvciBm
b3Igd29yZCByZWxhdGVkIHRleHQgbWFya2VyIGZ1bmN0aW9ucyB3aGVuIHRoZXJlJ3MgY29sbGFw
c2VkIHdoaXRlc3BhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1OTkxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFdlIGFyZSBnZXR0aW5nIGJhZCBDaGFyYWN0ZXJPZmZzZXQgd2hlbiB0aGVyZSdzIGNv
bGxhcHNlZCB3aGl0ZXNwYWNlLiBBZGRlZCBhIFRyYXZlcnNlT3B0aW9uVmFsaWRhdGVPZmZzZXQK
KyAgICAgICAgb3B0aW9uIHRvIG1ha2Ugc3VyZSB3ZSBhcmUgZ2V0dGluZyB0aGUgY29ycmVjdCBD
aGFyYWN0ZXJPZmZzZXQgYmFzZWQgb24gdGhlIGNvcnJlc3BvbmRpbmcgUmFuZ2Ugb2Zmc2V0LiBB
bmQKKyAgICAgICAgZml4ZWQgd29yZCBuYXZpZ2F0aW9uIGlzc3VlIGJhc2VkIG9uIHRoYXQuCisK
KyAgICAgICAgVGVzdDogYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXItd29yZC1uYXYtY29s
bGFwc2VkLXdoaXRlc3BhY2UuaHRtbAorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnRyYXZlcnNlVG9P
ZmZzZXRJblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnJhbmdlRm9y
Tm9kZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnN0YXJ0T3JF
bmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENh
Y2hlOjpjaGFyYWN0ZXJPZmZzZXRGcm9tVmlzaWJsZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkFYT2JqZWN0Q2FjaGU6OnJpZ2h0V29yZFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6OnByZXZpb3VzQm91bmRhcnkpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5oOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6aXNOb2Rl
SW5Vc2UpOgorCiAyMDE2LTA3LTE4ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5j
b20+CiAKICAgICAgICAgV2ViS2l0IG5pZ2h0bHkgZmFpbHMgdG8gYnVpbGQgb24gbWFjT1MgU2ll
cnJhCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNo
ZS5jcHAJKHJldmlzaW9uIDIwMzM3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MDMsNiArMTUwMyw3IEBAIENo
YXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjp0cmF2ZXJzZVQKICAgICAgICAgcmV0dXJuIENo
YXJhY3Rlck9mZnNldCgpOwogICAgIAogICAgIGJvb2wgdG9Ob2RlRW5kID0gb3B0aW9uICYgVHJh
dmVyc2VPcHRpb25Ub05vZGVFbmQ7CisgICAgYm9vbCB2YWxpZGF0ZU9mZnNldCA9IG9wdGlvbiAm
IFRyYXZlcnNlT3B0aW9uVmFsaWRhdGVPZmZzZXQ7CiAgICAgCiAgICAgaW50IG9mZnNldEluQ2hh
cmFjdGVyID0gMDsKICAgICBpbnQgY3VtdWxhdGl2ZU9mZnNldCA9IDA7CkBAIC0xNTM2LDkgKzE1
MzcsNiBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6dHJhdmVyc2VUCiAgICAgLy8g
U29tZXRpbWVzIHRleHQgY29udGVudHMgaW4gYSBub2RlIGFyZSBzcGxpdHRlZCBpbnRvIHNldmVy
YWwgaXRlcmF0aW9ucywgc28gdGhhdCBpdGVyYXRvci5yYW5nZSgpLT5zdGFydE9mZnNldCgpCiAg
ICAgLy8gbWlnaHQgbm90IGJlIHRoZSBjb3JyZWN0IGNoYXJhY3RlciBjb3VudC4gSGVyZSB3ZSB1
c2UgYSBwcmV2aW91c05vZGUgb2JqZWN0IHRvIGtlZXAgdHJhY2sgb2YgdGhhdC4KICAgICBOb2Rl
KiBwcmV2aW91c05vZGUgPSBudWxscHRyOwotICAgIC8vIFdoZW4gdGV4dCBub2RlIGhhcyBjb2xs
YXBzZWQgd2hpdGVzcGFjZXMsIHdlIG5lZWQgdG8gdHJlYXQgaXQgZGlmZmVyZW50bHkgc2luY2Ug
dGV4dCBpdGVyYXRvcgotICAgIC8vIHdpbGwgb21pdCB0aGUgY29sbGFwc2VkIHNwYWNlcyBhbmQg
bWFrZSB0aGUgb2Zmc2V0IGluYWNjdXJhdGUuCi0gICAgTm9kZSogY29sbGFwc2VkV2hpdGVzcGFj
ZU5vZGUgPSBudWxscHRyOwogICAgIGZvciAoOyAhaXRlcmF0b3IuYXRFbmQoKTsgaXRlcmF0b3Iu
YWR2YW5jZSgpKSB7CiAgICAgICAgIGludCBjdXJyZW50TGVuZ3RoID0gaXRlcmF0b3IudGV4dCgp
Lmxlbmd0aCgpOwogICAgICAgICBib29sIGhhc1JlcGxhY2VkTm9kZU9yQlIgPSBmYWxzZTsKQEAg
LTE1NDYsMTAgKzE1NDQsNiBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6dHJhdmVy
c2VUCiAgICAgICAgIE5vZGUmIG5vZGUgPSBpdGVyYXRvci5yYW5nZSgpLT5zdGFydENvbnRhaW5l
cigpOwogICAgICAgICBjdXJyZW50Tm9kZSA9ICZub2RlOwogICAgICAgICAKLSAgICAgICAgLy8g
VGhlIG9mZnNldCBvZiBub2RlIHdpdGggY29sbGFwc2VkIHdoaXRlc3BhY2VzIGhhcyBiZWVuIGNh
bGN1YWx0ZWQgaW4gdGhlIGZpcnN0IGl0ZXJhdGlvbi4KLSAgICAgICAgaWYgKGN1cnJlbnROb2Rl
ID09IGNvbGxhcHNlZFdoaXRlc3BhY2VOb2RlKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIAogICAgICAgICAvLyBXaGVuIGN1cnJlbnRMZW5ndGggPT0gMCwgd2UgY2hlY2sgaWYgdGhl
cmUncyBhbnkgcmVwbGFjZWQgbm9kZS4KICAgICAgICAgLy8gSWYgbm90LCB3ZSBza2lwIHRoZSBu
b2RlIHdpdGggbm8gbGVuZ3RoLgogICAgICAgICBpZiAoIWN1cnJlbnRMZW5ndGgpIHsKQEAgLTE1
NzksNDIgKzE1NzMsMjMgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnRyYXZlcnNl
VAogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnROb2Rl
LT5pc1RleHROb2RlKCkgJiYgY3VycmVudE5vZGUtPnJlbmRlcmVyKCkpIHsKLSAgICAgICAgICAg
ICAgICAvLyBXaGVuIHRoZXJlJ3MgY29sbGFwc2VkIHdoaXRlc3BhY2UsIHRoZSB0ZXh0IGl0ZXJh
dG9yIHdpbGwgb25seSBjb3VudCB0aG9zZSBzcGFjZXMgYXMgb25lIHNpbmdsZSBzcGFjZS4KLSAg
ICAgICAgICAgICAgICAvLyBIZXJlIHdlIHVzZSB0aGUgUmVuZGVyVGV4dCB0byBnZXQgdGhlIGFj
dHVhbCBsZW5ndGguCi0gICAgICAgICAgICAgICAgUmVuZGVyVGV4dCogcmVuZGVyZWRUZXh0ID0g
ZG93bmNhc3Q8UmVuZGVyVGV4dD4oY3VycmVudE5vZGUtPnJlbmRlcmVyKCkpOwotICAgICAgICAg
ICAgICAgIGludCBjdXJyZW50U3RhcnRPZmZzZXQgPSBpdGVyYXRvci5yYW5nZSgpLT5zdGFydE9m
ZnNldCgpOwotICAgICAgICAgICAgICAgIGlmIChyZW5kZXJlZFRleHQtPnN0eWxlKCkuaXNDb2xs
YXBzaWJsZVdoaXRlU3BhY2UoaXRlcmF0b3IudGV4dCgpW2N1cnJlbnRMZW5ndGggLSAxXSkgICYm
IGN1cnJlbnRMZW5ndGggKyBjdXJyZW50U3RhcnRPZmZzZXQgIT0gcmVuZGVyZWRUZXh0LT5jYXJl
dE1heE9mZnNldCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBhcHBlbmRMZW5ndGggPSAo
JnJhbmdlLT5lbmRDb250YWluZXIoKSA9PSBjdXJyZW50Tm9kZSA/IHJhbmdlLT5lbmRPZmZzZXQo
KSA6IChpbnQpcmVuZGVyZWRUZXh0LT50ZXh0KCktPmxlbmd0aCgpKSAtIGN1cnJlbnRTdGFydE9m
ZnNldDsKLSAgICAgICAgICAgICAgICAgICAgbGFzdFN0YXJ0T2Zmc2V0ID0gY3VycmVudFN0YXJ0
T2Zmc2V0OwotICAgICAgICAgICAgICAgICAgICBjdW11bGF0aXZlT2Zmc2V0ICs9IGFwcGVuZExl
bmd0aDsKLSAgICAgICAgICAgICAgICAgICAgbGFzdExlbmd0aCA9IGFwcGVuZExlbmd0aDsKLSAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vIEJyZWFrIGVhcmx5IGlm
IHdlIGhhdmUgYWR2YW5jZWQgZW5vdWdoIGNoYXJhY3RlcnMuCi0gICAgICAgICAgICAgICAgICAg
IGlmICghdG9Ob2RlRW5kICYmIGN1bXVsYXRpdmVPZmZzZXQgPj0gb2Zmc2V0KSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBvZmZzZXRJbkNoYXJhY3RlciA9IG9mZnNldCAtIChjdW11bGF0aXZl
T2Zmc2V0IC0gbGFzdExlbmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hlZCA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY29sbGFwc2Vk
V2hpdGVzcGFjZU5vZGUgPSBjdXJyZW50Tm9kZTsKLSAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgY3VtdWxhdGl2ZU9mZnNldCArPSBjdXJyZW50TGVuZ3RoOwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKGN1cnJlbnROb2RlID09IHByZXZpb3VzTm9kZSkKKyAgICAgICAgaWYg
KGN1cnJlbnROb2RlID09IHByZXZpb3VzTm9kZSkgewogICAgICAgICAgICAgbGFzdExlbmd0aCAr
PSBjdXJyZW50TGVuZ3RoOworICAgICAgICAgICAgbGFzdFN0YXJ0T2Zmc2V0ID0gaXRlcmF0b3Iu
cmFuZ2UoKS0+ZW5kT2Zmc2V0KCkgLSBsYXN0TGVuZ3RoOworICAgICAgICB9CiAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgbGFzdExlbmd0aCA9IGN1cnJlbnRMZW5ndGg7CiAgICAgICAgICAg
ICBsYXN0U3RhcnRPZmZzZXQgPSBoYXNSZXBsYWNlZE5vZGVPckJSID8gMCA6IGl0ZXJhdG9yLnJh
bmdlKCktPnN0YXJ0T2Zmc2V0KCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8vIEJy
ZWFrIGVhcmx5IGlmIHdlIGhhdmUgYWR2YW5jZWQgZW5vdWdoIGNoYXJhY3RlcnMuCi0gICAgICAg
IGlmICghdG9Ob2RlRW5kICYmIGN1bXVsYXRpdmVPZmZzZXQgPj0gb2Zmc2V0KSB7Ci0gICAgICAg
ICAgICBvZmZzZXRJbkNoYXJhY3RlciA9IG9mZnNldCAtIChjdW11bGF0aXZlT2Zmc2V0IC0gbGFz
dExlbmd0aCk7CisgICAgICAgIGJvb2wgY3VtdWxhdGVFbm91Z2ggPSB2YWxpZGF0ZU9mZnNldCA/
IGN1bXVsYXRpdmVPZmZzZXQgKyBsYXN0U3RhcnRPZmZzZXQgPj0gb2Zmc2V0IDogY3VtdWxhdGl2
ZU9mZnNldCA+PSBvZmZzZXQ7CisgICAgICAgIGlmICghdG9Ob2RlRW5kICYmIGN1bXVsYXRlRW5v
dWdoKSB7CisgICAgICAgICAgICBvZmZzZXRJbkNoYXJhY3RlciA9IHZhbGlkYXRlT2Zmc2V0ID8g
c3RkOjptYXgob2Zmc2V0IC0gbGFzdFN0YXJ0T2Zmc2V0LCAwKSA6IG9mZnNldCAtIChjdW11bGF0
aXZlT2Zmc2V0IC0gbGFzdExlbmd0aCk7CiAgICAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTY2Nyw3ICsxNjQyLDE0IEBAIFJlZlB0
cjxSYW5nZT4gQVhPYmplY3RDYWNoZTo6cmFuZ2VGb3JOb2QKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmRvY3VtZW50KTsK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICByYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRz
KCpub2RlLCBlYyk7CisgICAgLy8gRm9yIHJlcGxhY2VkIG5vZGUgd2l0aG91dCBjaGlsZHJlbiwg
d2Ugc2hvdWxkIGlubHVjZSBpdHNlbGYgaW4gdGhlIHJhbmdlLgorICAgIGlmIChBY2Nlc3NpYmls
aXR5T2JqZWN0OjpyZXBsYWNlZE5vZGVOZWVkc0NoYXJhY3Rlcihub2RlKSkKKyAgICAgICAgcmFu
Z2UtPnNlbGVjdE5vZGUoKm5vZGUsIGVjKTsKKyAgICBlbHNlCisgICAgICAgIHJhbmdlLT5zZWxl
Y3ROb2RlQ29udGVudHMoKm5vZGUsIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIAogICAgIHJldHVybiBlYyA/IG51bGxwdHIgOiByYW5nZTsKIH0KICAgICAK
QEAgLTE4MTEsMTUgKzE3OTMsMjAgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnN0
YXJ0T3JFbgogICAgIC8vIElmIGl0J3MgZW5kIHRleHQgbWFya2VyLCB3ZSB3YW50IHRvIGdvIHRv
IHRoZSBlbmQgb2YgdGhlIHJhbmdlLCBhbmQgc3RheSB3aXRoaW4gdGhlIHJhbmdlLgogICAgIGJv
b2wgc3RheVdpdGhpblJhbmdlID0gIWlzU3RhcnQ7CiAgICAgCisgICAgTm9kZSYgZW5kTm9kZSA9
IHJhbmdlLT5lbmRDb250YWluZXIoKTsKKyAgICBpZiAoZW5kTm9kZS5vZmZzZXRJbkNoYXJhY3Rl
cnMoKSAmJiAhaXNTdGFydCkKKyAgICAgICAgcmV0dXJuIHRyYXZlcnNlVG9PZmZzZXRJblJhbmdl
KHJhbmdlRm9yTm9kZUNvbnRlbnRzKCZlbmROb2RlKSwgcmFuZ2UtPmVuZE9mZnNldCgpLCBUcmF2
ZXJzZU9wdGlvblZhbGlkYXRlT2Zmc2V0KTsKKyAgICAKICAgICBSZWY8UmFuZ2U+IGNvcHlSYW5n
ZSA9ICpyYW5nZTsKICAgICAvLyBDaGFuZ2UgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSwgc28gdGhl
IGNoYXJhY3RlciBvZmZzZXQgc3RhcnRzIGZyb20gbm9kZSBiZWdpbm5pbmcuCiAgICAgaW50IG9m
ZnNldCA9IDA7CiAgICAgTm9kZSYgbm9kZSA9IGNvcHlSYW5nZS0+c3RhcnRDb250YWluZXIoKTsK
ICAgICBpZiAobm9kZS5vZmZzZXRJbkNoYXJhY3RlcnMoKSkgewotICAgICAgICBjb3B5UmFuZ2Ug
PSBSYW5nZTo6Y3JlYXRlKHJhbmdlLT5vd25lckRvY3VtZW50KCksICZyYW5nZS0+c3RhcnRDb250
YWluZXIoKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCksICZyYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJh
bmdlLT5lbmRPZmZzZXQoKSk7Ci0gICAgICAgIENoYXJhY3Rlck9mZnNldCBub2RlU3RhcnRPZmZz
ZXQgPSB0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShyYW5nZUZvck5vZGVDb250ZW50cygmbm9kZSks
IDApOwotICAgICAgICBvZmZzZXQgPSBzdGQ6Om1heChjb3B5UmFuZ2UtPnN0YXJ0T2Zmc2V0KCkg
LSBub2RlU3RhcnRPZmZzZXQuc3RhcnRJbmRleCwgMCk7Ci0gICAgICAgIGNvcHlSYW5nZS0+c2V0
U3RhcnQobm9kZSwgbm9kZVN0YXJ0T2Zmc2V0LnN0YXJ0SW5kZXgpOworICAgICAgICBDaGFyYWN0
ZXJPZmZzZXQgbm9kZVN0YXJ0T2Zmc2V0ID0gdHJhdmVyc2VUb09mZnNldEluUmFuZ2UocmFuZ2VG
b3JOb2RlQ29udGVudHMoJm5vZGUpLCByYW5nZS0+c3RhcnRPZmZzZXQoKSwgVHJhdmVyc2VPcHRp
b25WYWxpZGF0ZU9mZnNldCk7CisgICAgICAgIGlmIChpc1N0YXJ0KQorICAgICAgICAgICAgcmV0
dXJuIG5vZGVTdGFydE9mZnNldDsKKyAgICAgICAgY29weVJhbmdlID0gUmFuZ2U6OmNyZWF0ZShy
YW5nZS0+b3duZXJEb2N1bWVudCgpLCAmcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIDAsICZyYW5n
ZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5lbmRPZmZzZXQoKSk7CisgICAgICAgIG9mZnNldCAr
PSBub2RlU3RhcnRPZmZzZXQub2Zmc2V0OwogICAgIH0KICAgICAKICAgICByZXR1cm4gdHJhdmVy
c2VUb09mZnNldEluUmFuZ2UoV1RGTW92ZShjb3B5UmFuZ2UpLCBvZmZzZXQsIGlzU3RhcnQgPyBU
cmF2ZXJzZU9wdGlvbkRlZmF1bHQgOiBUcmF2ZXJzZU9wdGlvblRvTm9kZUVuZCwgc3RheVdpdGhp
blJhbmdlKTsKQEAgLTE5ODQsNyArMTk3MSw3IEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENh
Y2hlOjpjaGFyYWN0ZXIKICAgICBBU1NFUlQoZG9tTm9kZSk7CiAgICAgCiAgICAgaWYgKGRvbU5v
ZGUtPm9mZnNldEluQ2hhcmFjdGVycygpKQotICAgICAgICByZXR1cm4gQ2hhcmFjdGVyT2Zmc2V0
KGRvbU5vZGUsIDAsIGRlZXBQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgMCk7CisgICAg
ICAgIHJldHVybiB0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShyYW5nZUZvck5vZGVDb250ZW50cyhk
b21Ob2RlKSwgZGVlcFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBUcmF2ZXJzZU9wdGlv
blZhbGlkYXRlT2Zmc2V0KTsKICAgICAKICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4g
b2JqID0gdGhpcy0+Z2V0T3JDcmVhdGUoZG9tTm9kZSk7CiAgICAgaWYgKCFvYmopCkBAIC0yMTg2
LDcgKzIxNzMsNyBAQCBSZWZQdHI8UmFuZ2U+IEFYT2JqZWN0Q2FjaGU6OmxlZnRXb3JkUmFuCiAK
IFJlZlB0cjxSYW5nZT4gQVhPYmplY3RDYWNoZTo6cmlnaHRXb3JkUmFuZ2UoY29uc3QgQ2hhcmFj
dGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQpCiB7Ci0gICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0
ID0gc3RhcnRDaGFyYWN0ZXJPZmZzZXRPZldvcmQoY2hhcmFjdGVyT2Zmc2V0KTsKKyAgICBDaGFy
YWN0ZXJPZmZzZXQgc3RhcnQgPSBzdGFydENoYXJhY3Rlck9mZnNldE9mV29yZChjaGFyYWN0ZXJP
ZmZzZXQsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSk7CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IGVuZCA9
IGVuZENoYXJhY3Rlck9mZnNldE9mV29yZChzdGFydCk7CiAgICAgcmV0dXJuIHJhbmdlRm9yVW5v
cmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhzdGFydCwgZW5kKTsKIH0KQEAgLTIzMTksMTAgKzIzMDYs
MTggQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnByZXZpb3VzQgogICAgICAgICBy
ZXR1cm4gaXQuYXRFbmQoKSA/IHN0YXJ0IDogY2hhcmFjdGVyT2Zmc2V0OwogICAgIAogICAgIE5v
ZGUmIG5vZGUgPSBpdC5hdEVuZCgpID8gc2VhcmNoUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgOiBp
dC5yYW5nZSgpLT5zdGFydENvbnRhaW5lcigpOworICAgIAorICAgIC8vIFNpbXBsaWZpZWRCYWNr
d2FyZHNUZXh0SXRlcmF0b3IgaWdub3JlcyByZXBsYWNlZCBlbGVtZW50CisgICAgaWYgKEFjY2Vz
c2liaWxpdHlPYmplY3Q6OnJlcGxhY2VkTm9kZU5lZWRzQ2hhcmFjdGVyKGNoYXJhY3Rlck9mZnNl
dC5ub2RlKSkKKyAgICAgICAgcmV0dXJuIGNoYXJhY3Rlck9mZnNldEZvck5vZGVBbmRPZmZzZXQo
KmNoYXJhY3Rlck9mZnNldC5ub2RlLCAwKTsKKyAgICBOb2RlKiBuZXh0U2libGluZyA9IG5vZGUu
bmV4dFNpYmxpbmcoKTsKKyAgICBpZiAoJm5vZGUgIT0gY2hhcmFjdGVyT2Zmc2V0Lm5vZGUgJiYg
QWNjZXNzaWJpbGl0eU9iamVjdDo6cmVwbGFjZWROb2RlTmVlZHNDaGFyYWN0ZXIobmV4dFNpYmxp
bmcpKQorICAgICAgICByZXR1cm4gc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHJh
bmdlRm9yTm9kZUNvbnRlbnRzKG5leHRTaWJsaW5nKSwgZmFsc2UpOworICAgIAogICAgIGlmICgo
bm9kZS5pc1RleHROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8aW50PihuZXh0KSA8PSBub2RlLm1heENo
YXJhY3Rlck9mZnNldCgpKSB8fCAobm9kZS5yZW5kZXJlcigpICYmIG5vZGUucmVuZGVyZXIoKS0+
aXNCUigpICYmICFuZXh0KSkgewogICAgICAgICAvLyBUaGUgbmV4dCB2YXJpYWJsZSBjb250YWlu
cyBhIHVzYWJsZSBpbmRleCBpbnRvIGEgdGV4dCBub2RlCi0gICAgICAgIGlmICgmbm9kZSA9PSBj
aGFyYWN0ZXJPZmZzZXQubm9kZSkKLSAgICAgICAgICAgIG5leHQgLT0gY2hhcmFjdGVyT2Zmc2V0
LnN0YXJ0SW5kZXg7CisgICAgICAgIGlmIChub2RlLmlzVGV4dE5vZGUoKSkKKyAgICAgICAgICAg
IHJldHVybiB0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShyYW5nZUZvck5vZGVDb250ZW50cygmbm9k
ZSksIG5leHQsIFRyYXZlcnNlT3B0aW9uVmFsaWRhdGVPZmZzZXQpOwogICAgICAgICByZXR1cm4g
Y2hhcmFjdGVyT2Zmc2V0Rm9yTm9kZUFuZE9mZnNldChub2RlLCBuZXh0LCBUcmF2ZXJzZU9wdGlv
bkluY2x1ZGVTdGFydCk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWE9iamVjdENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgJKHJldmlzaW9uIDIwMzM3NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NDgsNyArMzQ4LDcgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgaXNOb2RlSW5Vc2UoTm9kZSogbikg
eyByZXR1cm4gbV90ZXh0TWFya2VyTm9kZXMuY29udGFpbnMobik7IH0KICAgICAKICAgICAvLyBD
aGFyYWN0ZXJPZmZzZXQgZnVuY3Rpb25zLgotICAgIGVudW0gVHJhdmVyc2VPcHRpb24geyBUcmF2
ZXJzZU9wdGlvbkRlZmF1bHQgPSAxIDw8IDAsIFRyYXZlcnNlT3B0aW9uVG9Ob2RlRW5kID0gMSA8
PCAxLCBUcmF2ZXJzZU9wdGlvbkluY2x1ZGVTdGFydCA9IDEgPDwgMiB9OworICAgIGVudW0gVHJh
dmVyc2VPcHRpb24geyBUcmF2ZXJzZU9wdGlvbkRlZmF1bHQgPSAxIDw8IDAsIFRyYXZlcnNlT3B0
aW9uVG9Ob2RlRW5kID0gMSA8PCAxLCBUcmF2ZXJzZU9wdGlvbkluY2x1ZGVTdGFydCA9IDEgPDwg
MiwgVHJhdmVyc2VPcHRpb25WYWxpZGF0ZU9mZnNldCA9IDEgPDwgM307CiAgICAgTm9kZSogbmV4
dE5vZGUoTm9kZSopIGNvbnN0OwogICAgIE5vZGUqIHByZXZpb3VzTm9kZShOb2RlKikgY29uc3Q7
CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IHRyYXZlcnNlVG9PZmZzZXRJblJhbmdlKFJlZlB0cjxSYW5n
ZT4sIGludCwgVHJhdmVyc2VPcHRpb24gPSBUcmF2ZXJzZU9wdGlvbkRlZmF1bHQsIGJvb2wgc3Rh
eVdpdGhpblJhbmdlID0gZmFsc2UpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzMzc1KQorKysgTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTYt
MDctMTggIE5hbiBXYW5nICA8bl93YW5nQGFwcGxlLmNvbT4KKworICAgICAgICBBWDogSW5jb3Jy
ZWN0IGJlaGF2aW9yIGZvciB3b3JkIHJlbGF0ZWQgdGV4dCBtYXJrZXIgZnVuY3Rpb25zIHdoZW4g
dGhlcmUncyBjb2xsYXBzZWQgd2hpdGVzcGFjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5OTEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy90ZXh0LW1hcmtlci13b3Jk
LW5hdi1jb2xsYXBzZWQtd2hpdGVzcGFjZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGFjY2Vzc2liaWxpdHkvbWFjL3RleHQtbWFya2VyLXdvcmQtbmF2LWNvbGxhcHNlZC13aGl0ZXNw
YWNlLmh0bWw6IEFkZGVkLgorCiAyMDE2LTA3LTE4ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1A
YXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyMDMzNzMuCklu
ZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LW1hcmtlci13b3JkLW5hdi1j
b2xsYXBzZWQtd2hpdGVzcGFjZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXItd29yZC1uYXYtY29sbGFwc2VkLXdoaXRl
c3BhY2UtZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2li
aWxpdHkvbWFjL3RleHQtbWFya2VyLXdvcmQtbmF2LWNvbGxhcHNlZC13aGl0ZXNwYWNlLWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwIEBACitUZXN0MSBUZXN0MiBUZXN0
MworVGhpcyB0ZXN0cyB0aGF0IHdvcmQgbmF2aWdhdGlvbiBpcyB3b3JraW5nIGNvcnJlY3RseSB3
aXRoIGNvbGxhcHNlZCB3aGl0ZXNwYWNlcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK0N1cnJlbnQgY2hhcmFjdGVyIGlzOiAxCitMZWZ0IHdvcmQgaXM6IFRlc3QxCitSaWdodCB3
b3JkIGlzOiAgCitQcmUgd29yZCBzdGFydCB0byBuZXh0IHdvcmQgZW5kOiBUZXN0MSAKKworQ3Vy
cmVudCBjaGFyYWN0ZXIgaXM6ICAKK0xlZnQgd29yZCBpczogIAorUmlnaHQgd29yZCBpczogVGVz
dDIKK1ByZSB3b3JkIHN0YXJ0IHRvIG5leHQgd29yZCBlbmQ6ICBUZXN0MgorCitDdXJyZW50IGNo
YXJhY3RlciBpczogMgorTGVmdCB3b3JkIGlzOiBUZXN0MgorUmlnaHQgd29yZCBpczogIAorUHJl
IHdvcmQgc3RhcnQgdG8gbmV4dCB3b3JkIGVuZDogVGVzdDIgCisKK0N1cnJlbnQgY2hhcmFjdGVy
IGlzOiAgCitMZWZ0IHdvcmQgaXM6ICAKK1JpZ2h0IHdvcmQgaXM6IFRlc3QzCitQcmUgd29yZCBz
dGFydCB0byBuZXh0IHdvcmQgZW5kOiAgVGVzdDMKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxp
dHkvbWFjL3RleHQtbWFya2VyLXdvcmQtbmF2LWNvbGxhcHNlZC13aGl0ZXNwYWNlLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXItd29y
ZC1uYXYtY29sbGFwc2VkLXdoaXRlc3BhY2UuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRU
ZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LW1hcmtlci13b3JkLW5hdi1jb2xsYXBzZWQtd2hp
dGVzcGFjZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODEgQEAKKzwhRE9DVFlQRSBI
VE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0
YSBjaGFyc2V0PSJ1dGYtOCI+IAorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBpZD0iYm9keSI+CisKKzxkaXYgaWQ9
InRleHQiPgorVGVzdDEKKworCisKK1Rlc3QyICAgVGVzdDMKKzwvZGl2PgorCis8cCBpZD0iZGVz
Y3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorCisg
ICAgZGVzY3JpcHRpb24oIlRoaXMgdGVzdHMgdGhhdCB3b3JkIG5hdmlnYXRpb24gaXMgd29ya2lu
ZyBjb3JyZWN0bHkgd2l0aCBjb2xsYXBzZWQgd2hpdGVzcGFjZXMuIik7CisgICAgCisgICAgaWYg
KHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgICAgICAKKyAgICAgICAgdmFy
IHRleHQgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoInRl
eHQiKTsKKyAgICAgICAgLy8gR2V0IHRoZSBhY3R1YWwgdGV4dCBub2RlLgorICAgICAgICB0ZXh0
ID0gdGV4dC5jaGlsZEF0SW5kZXgoMCk7CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayB0aGF0
IHdlIGNhbiBnZXQgdGhlIHNlY29uZCB3b3JkICJUZXN0MiIKKyAgICAgICAgdmFyIHRleHRNYXJr
ZXJSYW5nZSA9IHRleHQudGV4dE1hcmtlclJhbmdlRm9yRWxlbWVudCh0ZXh0KTsKKyAgICAgICAg
dmFyIHN0YXJ0TWFya2VyID0gdGV4dC5zdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2Uo
dGV4dE1hcmtlclJhbmdlKTsKKyAgICAgICAgdmFyIGN1cnJlbnRNYXJrZXIgPSBhZHZhbmNlQW5k
VmVyaWZ5KHN0YXJ0TWFya2VyLCA1LCB0ZXh0KTsKKyAgICAgICAgY3VycmVudE1hcmtlciA9IGFk
dmFuY2VBbmRWZXJpZnkoY3VycmVudE1hcmtlciwgMSwgdGV4dCk7CisgICAgICAgIAorICAgICAg
ICAvLyBDaGVjayB0aGF0IHdlIGNhbiBnZXQgdGhlIHRoaXJkIHdvcmQgIlRlc3QzIgorICAgICAg
ICBjdXJyZW50TWFya2VyID0gYWR2YW5jZUFuZFZlcmlmeShjdXJyZW50TWFya2VyLCA1LCB0ZXh0
KTsKKyAgICAgICAgY3VycmVudE1hcmtlciA9IGFkdmFuY2VBbmRWZXJpZnkoY3VycmVudE1hcmtl
ciwgMSwgdGV4dCk7CisgICAgICAgIAorICAgICAgICBmdW5jdGlvbiBhZHZhbmNlQW5kVmVyaWZ5
KGN1cnJlbnRNYXJrZXIsIG9mZnNldCwgb2JqKSB7CisgICAgICAgICAgICB2YXIgcHJldmlvdXNN
YXJrZXIgPSBjdXJyZW50TWFya2VyOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBv
ZmZzZXQ7IGkrKykgeworICAgICAgICAgICAgICAgIHByZXZpb3VzTWFya2VyID0gY3VycmVudE1h
cmtlcjsKKyAgICAgICAgICAgICAgICBjdXJyZW50TWFya2VyID0gb2JqLm5leHRUZXh0TWFya2Vy
KHByZXZpb3VzTWFya2VyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZlcmlmeVdvcmRS
YW5nZUZvclRleHRNYXJrZXIocHJldmlvdXNNYXJrZXIsIGN1cnJlbnRNYXJrZXIsIG9iaik7Cisg
ICAgICAgICAgICByZXR1cm4gY3VycmVudE1hcmtlcjsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgZnVuY3Rpb24gcmVwbGFjZUF0dGFjaG1lbnRJblN0cmluZyhzdHIpIHsKKyAgICAgICAg
ICAgIHZhciBuZXdsaW5lID0gJ1xuJzsKKyAgICAgICAgICAgIHN0ciA9ICBzdHIucmVwbGFjZShT
dHJpbmcuZnJvbUNoYXJDb2RlKDY1NTMyKSwgIltBVFRBQ0hNRU5UXSIpOworICAgICAgICAgICAg
c3RyID0gc3RyLnJlcGxhY2UobmV3bGluZSwgIidsaW5lIGJyZWFrJyIpOworICAgICAgICAgICAg
cmV0dXJuIHN0cjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gdmVyaWZ5
V29yZFJhbmdlRm9yVGV4dE1hcmtlcihwcmVNYXJrZXIsIHRleHRNYXJrZXIsIG9iaikgeworICAg
ICAgICAgICAgdmFyIG1hcmtlclJhbmdlID0gb2JqLnRleHRNYXJrZXJSYW5nZUZvck1hcmtlcnMo
cHJlTWFya2VyLCB0ZXh0TWFya2VyKTsKKyAgICAgICAgICAgIHZhciBjdXJyZW50Q2hhcmFjdGVy
ID0gb2JqLnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShtYXJrZXJSYW5nZSk7CisgICAgICAgICAg
ICBkZWJ1ZygiQ3VycmVudCBjaGFyYWN0ZXIgaXM6ICIgKyBjdXJyZW50Q2hhcmFjdGVyKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgdmFyIHByZXZpb3VzV29yZFJhbmdlID0gb2JqLmxlZnRX
b3JkVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlcih0ZXh0TWFya2VyKTsKKyAgICAgICAgICAg
IHZhciBuZXh0V29yZFJhbmdlID0gb2JqLnJpZ2h0V29yZFRleHRNYXJrZXJSYW5nZUZvclRleHRN
YXJrZXIodGV4dE1hcmtlcik7CisgICAgICAgICAgICB2YXIgcHJlV29yZCA9IG9iai5zdHJpbmdG
b3JUZXh0TWFya2VyUmFuZ2UocHJldmlvdXNXb3JkUmFuZ2UpOworICAgICAgICAgICAgdmFyIG5l
eHRXb3JkID0gb2JqLnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShuZXh0V29yZFJhbmdlKTsKKyAg
ICAgICAgICAgIGRlYnVnKCJMZWZ0IHdvcmQgaXM6ICIgKyBwcmVXb3JkKTsKKyAgICAgICAgICAg
IGRlYnVnKCJSaWdodCB3b3JkIGlzOiAiICsgbmV4dFdvcmQpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICB2YXIgcHJlV29yZFN0YXJ0ID0gb2JqLnByZXZpb3VzV29yZFN0YXJ0VGV4dE1hcmtl
ckZvclRleHRNYXJrZXIodGV4dE1hcmtlcik7CisgICAgICAgICAgICB2YXIgbmV4dFdvcmRFbmQg
PSBvYmoubmV4dFdvcmRFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcih0ZXh0TWFya2VyKTsKKyAg
ICAgICAgICAgIHZhciBwcmVBbmROZXh0V29yZFJhbmdlID0gb2JqLnRleHRNYXJrZXJSYW5nZUZv
ck1hcmtlcnMocHJlV29yZFN0YXJ0LCBuZXh0V29yZEVuZCk7CisgICAgICAgICAgICB2YXIgcHJl
QW5kTmV4dFdvcmQgPSBvYmouc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKHByZUFuZE5leHRXb3Jk
UmFuZ2UpOworICAgICAgICAgICAgZGVidWcoIlByZSB3b3JkIHN0YXJ0IHRvIG5leHQgd29yZCBl
bmQ6ICIgKyBwcmVBbmROZXh0V29yZCArICJcbiIpOworICAgICAgICB9CisgICAgfQorCis8L3Nj
cmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284009</attachid>
            <date>2016-07-19 08:50:50 -0700</date>
            <delta_ts>2016-07-19 08:52:07 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>16321</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE2LTA3LTE5ICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEluY29ycmVjdCBiZWhhdmlvciBm
b3Igd29yZCByZWxhdGVkIHRleHQgbWFya2VyIGZ1bmN0aW9ucyB3aGVuIHRoZXJlJ3MgY29sbGFw
c2VkIHdoaXRlc3BhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1OTkxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFdlIGFyZSBnZXR0aW5nIGEgQ2hhcmFjdGVyT2Zmc2V0IHdoZW4gdGhlcmUncyBjb2xs
YXBzZWQgd2hpdGVzcGFjZS4gQWRkZWQgYSBUcmF2ZXJzZU9wdGlvblZhbGlkYXRlT2Zmc2V0Cisg
ICAgICAgIG9wdGlvbiB0byBtYWtlIHN1cmUgd2UgYXJlIGdldHRpbmcgdGhlIGNvcnJlY3QgQ2hh
cmFjdGVyT2Zmc2V0IGJhc2VkIG9uIHRoZSBjb3JyZXNwb25kaW5nIFJhbmdlIG9mZnNldC4gQW5k
CisgICAgICAgIGZpeGVkIGEgd29yZCBuYXZpZ2F0aW9uIGlzc3VlIGJhc2VkIG9uIHRoYXQuCisK
KyAgICAgICAgVGVzdDogYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXItd29yZC1uYXYtY29s
bGFwc2VkLXdoaXRlc3BhY2UuaHRtbAorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnRyYXZlcnNlVG9P
ZmZzZXRJblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnJhbmdlRm9y
Tm9kZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnN0YXJ0T3JF
bmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENh
Y2hlOjpjaGFyYWN0ZXJPZmZzZXRGcm9tVmlzaWJsZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkFYT2JqZWN0Q2FjaGU6OnJpZ2h0V29yZFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFY
T2JqZWN0Q2FjaGU6OnByZXZpb3VzQm91bmRhcnkpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
QVhPYmplY3RDYWNoZS5oOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6aXNOb2Rl
SW5Vc2UpOgorCiAyMDE2LTA3LTE5ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAK
ICAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI3NDIwMzA4PiBXZWJDb3JlLTc2MDIuMS40MiBmYWls
cyB0byBidWlsZDogZXJyb3I6IHVudXNlZCBwYXJhbWV0ZXIgJ3ZtJwpJbmRleDogU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCShyZXZpc2lvbiAyMDMz
MzgpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTAzLDYgKzE1MDMsNyBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmpl
Y3RDYWNoZTo6dHJhdmVyc2VUCiAgICAgICAgIHJldHVybiBDaGFyYWN0ZXJPZmZzZXQoKTsKICAg
ICAKICAgICBib29sIHRvTm9kZUVuZCA9IG9wdGlvbiAmIFRyYXZlcnNlT3B0aW9uVG9Ob2RlRW5k
OworICAgIGJvb2wgdmFsaWRhdGVPZmZzZXQgPSBvcHRpb24gJiBUcmF2ZXJzZU9wdGlvblZhbGlk
YXRlT2Zmc2V0OwogICAgIAogICAgIGludCBvZmZzZXRJbkNoYXJhY3RlciA9IDA7CiAgICAgaW50
IGN1bXVsYXRpdmVPZmZzZXQgPSAwOwpAQCAtMTUzNiw5ICsxNTM3LDYgQEAgQ2hhcmFjdGVyT2Zm
c2V0IEFYT2JqZWN0Q2FjaGU6OnRyYXZlcnNlVAogICAgIC8vIFNvbWV0aW1lcyB0ZXh0IGNvbnRl
bnRzIGluIGEgbm9kZSBhcmUgc3BsaXR0ZWQgaW50byBzZXZlcmFsIGl0ZXJhdGlvbnMsIHNvIHRo
YXQgaXRlcmF0b3IucmFuZ2UoKS0+c3RhcnRPZmZzZXQoKQogICAgIC8vIG1pZ2h0IG5vdCBiZSB0
aGUgY29ycmVjdCBjaGFyYWN0ZXIgY291bnQuIEhlcmUgd2UgdXNlIGEgcHJldmlvdXNOb2RlIG9i
amVjdCB0byBrZWVwIHRyYWNrIG9mIHRoYXQuCiAgICAgTm9kZSogcHJldmlvdXNOb2RlID0gbnVs
bHB0cjsKLSAgICAvLyBXaGVuIHRleHQgbm9kZSBoYXMgY29sbGFwc2VkIHdoaXRlc3BhY2VzLCB3
ZSBuZWVkIHRvIHRyZWF0IGl0IGRpZmZlcmVudGx5IHNpbmNlIHRleHQgaXRlcmF0b3IKLSAgICAv
LyB3aWxsIG9taXQgdGhlIGNvbGxhcHNlZCBzcGFjZXMgYW5kIG1ha2UgdGhlIG9mZnNldCBpbmFj
Y3VyYXRlLgotICAgIE5vZGUqIGNvbGxhcHNlZFdoaXRlc3BhY2VOb2RlID0gbnVsbHB0cjsKICAg
ICBmb3IgKDsgIWl0ZXJhdG9yLmF0RW5kKCk7IGl0ZXJhdG9yLmFkdmFuY2UoKSkgewogICAgICAg
ICBpbnQgY3VycmVudExlbmd0aCA9IGl0ZXJhdG9yLnRleHQoKS5sZW5ndGgoKTsKICAgICAgICAg
Ym9vbCBoYXNSZXBsYWNlZE5vZGVPckJSID0gZmFsc2U7CkBAIC0xNTQ2LDEwICsxNTQ0LDYgQEAg
Q2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnRyYXZlcnNlVAogICAgICAgICBOb2RlJiBu
b2RlID0gaXRlcmF0b3IucmFuZ2UoKS0+c3RhcnRDb250YWluZXIoKTsKICAgICAgICAgY3VycmVu
dE5vZGUgPSAmbm9kZTsKICAgICAgICAgCi0gICAgICAgIC8vIFRoZSBvZmZzZXQgb2Ygbm9kZSB3
aXRoIGNvbGxhcHNlZCB3aGl0ZXNwYWNlcyBoYXMgYmVlbiBjYWxjdWFsdGVkIGluIHRoZSBmaXJz
dCBpdGVyYXRpb24uCi0gICAgICAgIGlmIChjdXJyZW50Tm9kZSA9PSBjb2xsYXBzZWRXaGl0ZXNw
YWNlTm9kZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKICAgICAgICAgLy8gV2hl
biBjdXJyZW50TGVuZ3RoID09IDAsIHdlIGNoZWNrIGlmIHRoZXJlJ3MgYW55IHJlcGxhY2VkIG5v
ZGUuCiAgICAgICAgIC8vIElmIG5vdCwgd2Ugc2tpcCB0aGUgbm9kZSB3aXRoIG5vIGxlbmd0aC4K
ICAgICAgICAgaWYgKCFjdXJyZW50TGVuZ3RoKSB7CkBAIC0xNTc5LDQyICsxNTczLDIzIEBAIENo
YXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjp0cmF2ZXJzZVQKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50Tm9kZS0+aXNUZXh0Tm9kZSgpICYmIGN1
cnJlbnROb2RlLT5yZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2hlbiB0aGVyZSdz
IGNvbGxhcHNlZCB3aGl0ZXNwYWNlLCB0aGUgdGV4dCBpdGVyYXRvciB3aWxsIG9ubHkgY291bnQg
dGhvc2Ugc3BhY2VzIGFzIG9uZSBzaW5nbGUgc3BhY2UuCi0gICAgICAgICAgICAgICAgLy8gSGVy
ZSB3ZSB1c2UgdGhlIFJlbmRlclRleHQgdG8gZ2V0IHRoZSBhY3R1YWwgbGVuZ3RoLgotICAgICAg
ICAgICAgICAgIFJlbmRlclRleHQqIHJlbmRlcmVkVGV4dCA9IGRvd25jYXN0PFJlbmRlclRleHQ+
KGN1cnJlbnROb2RlLT5yZW5kZXJlcigpKTsKLSAgICAgICAgICAgICAgICBpbnQgY3VycmVudFN0
YXJ0T2Zmc2V0ID0gaXRlcmF0b3IucmFuZ2UoKS0+c3RhcnRPZmZzZXQoKTsKLSAgICAgICAgICAg
ICAgICBpZiAocmVuZGVyZWRUZXh0LT5zdHlsZSgpLmlzQ29sbGFwc2libGVXaGl0ZVNwYWNlKGl0
ZXJhdG9yLnRleHQoKVtjdXJyZW50TGVuZ3RoIC0gMV0pICAmJiBjdXJyZW50TGVuZ3RoICsgY3Vy
cmVudFN0YXJ0T2Zmc2V0ICE9IHJlbmRlcmVkVGV4dC0+Y2FyZXRNYXhPZmZzZXQoKSkgewotICAg
ICAgICAgICAgICAgICAgICBpbnQgYXBwZW5kTGVuZ3RoID0gKCZyYW5nZS0+ZW5kQ29udGFpbmVy
KCkgPT0gY3VycmVudE5vZGUgPyByYW5nZS0+ZW5kT2Zmc2V0KCkgOiAoaW50KXJlbmRlcmVkVGV4
dC0+dGV4dCgpLT5sZW5ndGgoKSkgLSBjdXJyZW50U3RhcnRPZmZzZXQ7Ci0gICAgICAgICAgICAg
ICAgICAgIGxhc3RTdGFydE9mZnNldCA9IGN1cnJlbnRTdGFydE9mZnNldDsKLSAgICAgICAgICAg
ICAgICAgICAgY3VtdWxhdGl2ZU9mZnNldCArPSBhcHBlbmRMZW5ndGg7Ci0gICAgICAgICAgICAg
ICAgICAgIGxhc3RMZW5ndGggPSBhcHBlbmRMZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICAvLyBCcmVhayBlYXJseSBpZiB3ZSBoYXZlIGFkdmFuY2VkIGVu
b3VnaCBjaGFyYWN0ZXJzLgotICAgICAgICAgICAgICAgICAgICBpZiAoIXRvTm9kZUVuZCAmJiBj
dW11bGF0aXZlT2Zmc2V0ID49IG9mZnNldCkgewotICAgICAgICAgICAgICAgICAgICAgICAgb2Zm
c2V0SW5DaGFyYWN0ZXIgPSBvZmZzZXQgLSAoY3VtdWxhdGl2ZU9mZnNldCAtIGxhc3RMZW5ndGgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoZWQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlZFdoaXRlc3BhY2VOb2RlID0gY3Vy
cmVudE5vZGU7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGN1bXVsYXRp
dmVPZmZzZXQgKz0gY3VycmVudExlbmd0aDsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChjdXJy
ZW50Tm9kZSA9PSBwcmV2aW91c05vZGUpCisgICAgICAgIGlmIChjdXJyZW50Tm9kZSA9PSBwcmV2
aW91c05vZGUpIHsKICAgICAgICAgICAgIGxhc3RMZW5ndGggKz0gY3VycmVudExlbmd0aDsKKyAg
ICAgICAgICAgIGxhc3RTdGFydE9mZnNldCA9IGl0ZXJhdG9yLnJhbmdlKCktPmVuZE9mZnNldCgp
IC0gbGFzdExlbmd0aDsKKyAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGxh
c3RMZW5ndGggPSBjdXJyZW50TGVuZ3RoOwogICAgICAgICAgICAgbGFzdFN0YXJ0T2Zmc2V0ID0g
aGFzUmVwbGFjZWROb2RlT3JCUiA/IDAgOiBpdGVyYXRvci5yYW5nZSgpLT5zdGFydE9mZnNldCgp
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBCcmVhayBlYXJseSBpZiB3ZSBoYXZl
IGFkdmFuY2VkIGVub3VnaCBjaGFyYWN0ZXJzLgotICAgICAgICBpZiAoIXRvTm9kZUVuZCAmJiBj
dW11bGF0aXZlT2Zmc2V0ID49IG9mZnNldCkgewotICAgICAgICAgICAgb2Zmc2V0SW5DaGFyYWN0
ZXIgPSBvZmZzZXQgLSAoY3VtdWxhdGl2ZU9mZnNldCAtIGxhc3RMZW5ndGgpOworICAgICAgICBi
b29sIGN1bXVsYXRlRW5vdWdoID0gdmFsaWRhdGVPZmZzZXQgPyBjdW11bGF0aXZlT2Zmc2V0ICsg
bGFzdFN0YXJ0T2Zmc2V0ID49IG9mZnNldCA6IGN1bXVsYXRpdmVPZmZzZXQgPj0gb2Zmc2V0Owor
ICAgICAgICBpZiAoIXRvTm9kZUVuZCAmJiBjdW11bGF0ZUVub3VnaCkgeworICAgICAgICAgICAg
b2Zmc2V0SW5DaGFyYWN0ZXIgPSB2YWxpZGF0ZU9mZnNldCA/IHN0ZDo6bWF4KG9mZnNldCAtIGxh
c3RTdGFydE9mZnNldCwgMCkgOiBvZmZzZXQgLSAoY3VtdWxhdGl2ZU9mZnNldCAtIGxhc3RMZW5n
dGgpOwogICAgICAgICAgICAgZmluaXNoZWQgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KQEAgLTE2NjcsNyArMTY0MiwxMSBAQCBSZWZQdHI8UmFuZ2U+IEFYT2JqZWN0Q2Fj
aGU6OnJhbmdlRm9yTm9kCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpkb2N1bWVudCk7CiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cygqbm9kZSwgZWMpOworICAgIC8v
IEZvciByZXBsYWNlZCBub2RlIHdpdGhvdXQgY2hpbGRyZW4sIHdlIHNob3VsZCBpbmNsdWNlIGl0
c2VsZiBpbiB0aGUgcmFuZ2UuCisgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmplY3Q6OnJlcGxhY2Vk
Tm9kZU5lZWRzQ2hhcmFjdGVyKG5vZGUpKQorICAgICAgICByYW5nZS0+c2VsZWN0Tm9kZSgqbm9k
ZSwgZWMpOworICAgIGVsc2UKKyAgICAgICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cygqbm9k
ZSwgZWMpOwogICAgIHJldHVybiBlYyA/IG51bGxwdHIgOiByYW5nZTsKIH0KICAgICAKQEAgLTE4
MTEsMTUgKzE3OTAsMjAgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnN0YXJ0T3JF
bgogICAgIC8vIElmIGl0J3MgZW5kIHRleHQgbWFya2VyLCB3ZSB3YW50IHRvIGdvIHRvIHRoZSBl
bmQgb2YgdGhlIHJhbmdlLCBhbmQgc3RheSB3aXRoaW4gdGhlIHJhbmdlLgogICAgIGJvb2wgc3Rh
eVdpdGhpblJhbmdlID0gIWlzU3RhcnQ7CiAgICAgCisgICAgTm9kZSYgZW5kTm9kZSA9IHJhbmdl
LT5lbmRDb250YWluZXIoKTsKKyAgICBpZiAoZW5kTm9kZS5vZmZzZXRJbkNoYXJhY3RlcnMoKSAm
JiAhaXNTdGFydCkKKyAgICAgICAgcmV0dXJuIHRyYXZlcnNlVG9PZmZzZXRJblJhbmdlKHJhbmdl
Rm9yTm9kZUNvbnRlbnRzKCZlbmROb2RlKSwgcmFuZ2UtPmVuZE9mZnNldCgpLCBUcmF2ZXJzZU9w
dGlvblZhbGlkYXRlT2Zmc2V0KTsKKyAgICAKICAgICBSZWY8UmFuZ2U+IGNvcHlSYW5nZSA9ICpy
YW5nZTsKICAgICAvLyBDaGFuZ2UgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSwgc28gdGhlIGNoYXJh
Y3RlciBvZmZzZXQgc3RhcnRzIGZyb20gbm9kZSBiZWdpbm5pbmcuCiAgICAgaW50IG9mZnNldCA9
IDA7CiAgICAgTm9kZSYgbm9kZSA9IGNvcHlSYW5nZS0+c3RhcnRDb250YWluZXIoKTsKICAgICBp
ZiAobm9kZS5vZmZzZXRJbkNoYXJhY3RlcnMoKSkgewotICAgICAgICBjb3B5UmFuZ2UgPSBSYW5n
ZTo6Y3JlYXRlKHJhbmdlLT5vd25lckRvY3VtZW50KCksICZyYW5nZS0+c3RhcnRDb250YWluZXIo
KSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCksICZyYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5l
bmRPZmZzZXQoKSk7Ci0gICAgICAgIENoYXJhY3Rlck9mZnNldCBub2RlU3RhcnRPZmZzZXQgPSB0
cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShyYW5nZUZvck5vZGVDb250ZW50cygmbm9kZSksIDApOwot
ICAgICAgICBvZmZzZXQgPSBzdGQ6Om1heChjb3B5UmFuZ2UtPnN0YXJ0T2Zmc2V0KCkgLSBub2Rl
U3RhcnRPZmZzZXQuc3RhcnRJbmRleCwgMCk7Ci0gICAgICAgIGNvcHlSYW5nZS0+c2V0U3RhcnQo
bm9kZSwgbm9kZVN0YXJ0T2Zmc2V0LnN0YXJ0SW5kZXgpOworICAgICAgICBDaGFyYWN0ZXJPZmZz
ZXQgbm9kZVN0YXJ0T2Zmc2V0ID0gdHJhdmVyc2VUb09mZnNldEluUmFuZ2UocmFuZ2VGb3JOb2Rl
Q29udGVudHMoJm5vZGUpLCByYW5nZS0+c3RhcnRPZmZzZXQoKSwgVHJhdmVyc2VPcHRpb25WYWxp
ZGF0ZU9mZnNldCk7CisgICAgICAgIGlmIChpc1N0YXJ0KQorICAgICAgICAgICAgcmV0dXJuIG5v
ZGVTdGFydE9mZnNldDsKKyAgICAgICAgY29weVJhbmdlID0gUmFuZ2U6OmNyZWF0ZShyYW5nZS0+
b3duZXJEb2N1bWVudCgpLCAmcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIDAsICZyYW5nZS0+ZW5k
Q29udGFpbmVyKCksIHJhbmdlLT5lbmRPZmZzZXQoKSk7CisgICAgICAgIG9mZnNldCArPSBub2Rl
U3RhcnRPZmZzZXQub2Zmc2V0OwogICAgIH0KICAgICAKICAgICByZXR1cm4gdHJhdmVyc2VUb09m
ZnNldEluUmFuZ2UoV1RGTW92ZShjb3B5UmFuZ2UpLCBvZmZzZXQsIGlzU3RhcnQgPyBUcmF2ZXJz
ZU9wdGlvbkRlZmF1bHQgOiBUcmF2ZXJzZU9wdGlvblRvTm9kZUVuZCwgc3RheVdpdGhpblJhbmdl
KTsKQEAgLTE5ODQsNyArMTk2OCw3IEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpj
aGFyYWN0ZXIKICAgICBBU1NFUlQoZG9tTm9kZSk7CiAgICAgCiAgICAgaWYgKGRvbU5vZGUtPm9m
ZnNldEluQ2hhcmFjdGVycygpKQotICAgICAgICByZXR1cm4gQ2hhcmFjdGVyT2Zmc2V0KGRvbU5v
ZGUsIDAsIGRlZXBQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgMCk7CisgICAgICAgIHJl
dHVybiB0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShyYW5nZUZvck5vZGVDb250ZW50cyhkb21Ob2Rl
KSwgZGVlcFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBUcmF2ZXJzZU9wdGlvblZhbGlk
YXRlT2Zmc2V0KTsKICAgICAKICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4gb2JqID0g
dGhpcy0+Z2V0T3JDcmVhdGUoZG9tTm9kZSk7CiAgICAgaWYgKCFvYmopCkBAIC0yMTg2LDcgKzIx
NzAsNyBAQCBSZWZQdHI8UmFuZ2U+IEFYT2JqZWN0Q2FjaGU6OmxlZnRXb3JkUmFuCiAKIFJlZlB0
cjxSYW5nZT4gQVhPYmplY3RDYWNoZTo6cmlnaHRXb3JkUmFuZ2UoY29uc3QgQ2hhcmFjdGVyT2Zm
c2V0JiBjaGFyYWN0ZXJPZmZzZXQpCiB7Ci0gICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0ID0gc3Rh
cnRDaGFyYWN0ZXJPZmZzZXRPZldvcmQoY2hhcmFjdGVyT2Zmc2V0KTsKKyAgICBDaGFyYWN0ZXJP
ZmZzZXQgc3RhcnQgPSBzdGFydENoYXJhY3Rlck9mZnNldE9mV29yZChjaGFyYWN0ZXJPZmZzZXQs
IFJpZ2h0V29yZElmT25Cb3VuZGFyeSk7CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IGVuZCA9IGVuZENo
YXJhY3Rlck9mZnNldE9mV29yZChzdGFydCk7CiAgICAgcmV0dXJuIHJhbmdlRm9yVW5vcmRlcmVk
Q2hhcmFjdGVyT2Zmc2V0cyhzdGFydCwgZW5kKTsKIH0KQEAgLTIzMTksMTAgKzIzMDMsMTggQEAg
Q2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnByZXZpb3VzQgogICAgICAgICByZXR1cm4g
aXQuYXRFbmQoKSA/IHN0YXJ0IDogY2hhcmFjdGVyT2Zmc2V0OwogICAgIAogICAgIE5vZGUmIG5v
ZGUgPSBpdC5hdEVuZCgpID8gc2VhcmNoUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkgOiBpdC5yYW5n
ZSgpLT5zdGFydENvbnRhaW5lcigpOworICAgIAorICAgIC8vIFNpbXBsaWZpZWRCYWNrd2FyZHNU
ZXh0SXRlcmF0b3IgaWdub3JlcyByZXBsYWNlZCBlbGVtZW50CisgICAgaWYgKEFjY2Vzc2liaWxp
dHlPYmplY3Q6OnJlcGxhY2VkTm9kZU5lZWRzQ2hhcmFjdGVyKGNoYXJhY3Rlck9mZnNldC5ub2Rl
KSkKKyAgICAgICAgcmV0dXJuIGNoYXJhY3Rlck9mZnNldEZvck5vZGVBbmRPZmZzZXQoKmNoYXJh
Y3Rlck9mZnNldC5ub2RlLCAwKTsKKyAgICBOb2RlKiBuZXh0U2libGluZyA9IG5vZGUubmV4dFNp
YmxpbmcoKTsKKyAgICBpZiAoJm5vZGUgIT0gY2hhcmFjdGVyT2Zmc2V0Lm5vZGUgJiYgQWNjZXNz
aWJpbGl0eU9iamVjdDo6cmVwbGFjZWROb2RlTmVlZHNDaGFyYWN0ZXIobmV4dFNpYmxpbmcpKQor
ICAgICAgICByZXR1cm4gc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHJhbmdlRm9y
Tm9kZUNvbnRlbnRzKG5leHRTaWJsaW5nKSwgZmFsc2UpOworICAgIAogICAgIGlmICgobm9kZS5p
c1RleHROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8aW50PihuZXh0KSA8PSBub2RlLm1heENoYXJhY3Rl
ck9mZnNldCgpKSB8fCAobm9kZS5yZW5kZXJlcigpICYmIG5vZGUucmVuZGVyZXIoKS0+aXNCUigp
ICYmICFuZXh0KSkgewogICAgICAgICAvLyBUaGUgbmV4dCB2YXJpYWJsZSBjb250YWlucyBhIHVz
YWJsZSBpbmRleCBpbnRvIGEgdGV4dCBub2RlCi0gICAgICAgIGlmICgmbm9kZSA9PSBjaGFyYWN0
ZXJPZmZzZXQubm9kZSkKLSAgICAgICAgICAgIG5leHQgLT0gY2hhcmFjdGVyT2Zmc2V0LnN0YXJ0
SW5kZXg7CisgICAgICAgIGlmIChub2RlLmlzVGV4dE5vZGUoKSkKKyAgICAgICAgICAgIHJldHVy
biB0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShyYW5nZUZvck5vZGVDb250ZW50cygmbm9kZSksIG5l
eHQsIFRyYXZlcnNlT3B0aW9uVmFsaWRhdGVPZmZzZXQpOwogICAgICAgICByZXR1cm4gY2hhcmFj
dGVyT2Zmc2V0Rm9yTm9kZUFuZE9mZnNldChub2RlLCBuZXh0LCBUcmF2ZXJzZU9wdGlvbkluY2x1
ZGVTdGFydCk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmgJKHJldmlzaW9uIDIwMzMzOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNyAr
MzQ4LDcgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgaXNOb2RlSW5Vc2UoTm9kZSogbikgeyByZXR1
cm4gbV90ZXh0TWFya2VyTm9kZXMuY29udGFpbnMobik7IH0KICAgICAKICAgICAvLyBDaGFyYWN0
ZXJPZmZzZXQgZnVuY3Rpb25zLgotICAgIGVudW0gVHJhdmVyc2VPcHRpb24geyBUcmF2ZXJzZU9w
dGlvbkRlZmF1bHQgPSAxIDw8IDAsIFRyYXZlcnNlT3B0aW9uVG9Ob2RlRW5kID0gMSA8PCAxLCBU
cmF2ZXJzZU9wdGlvbkluY2x1ZGVTdGFydCA9IDEgPDwgMiB9OworICAgIGVudW0gVHJhdmVyc2VP
cHRpb24geyBUcmF2ZXJzZU9wdGlvbkRlZmF1bHQgPSAxIDw8IDAsIFRyYXZlcnNlT3B0aW9uVG9O
b2RlRW5kID0gMSA8PCAxLCBUcmF2ZXJzZU9wdGlvbkluY2x1ZGVTdGFydCA9IDEgPDwgMiwgVHJh
dmVyc2VPcHRpb25WYWxpZGF0ZU9mZnNldCA9IDEgPDwgMyB9OwogICAgIE5vZGUqIG5leHROb2Rl
KE5vZGUqKSBjb25zdDsKICAgICBOb2RlKiBwcmV2aW91c05vZGUoTm9kZSopIGNvbnN0OwogICAg
IENoYXJhY3Rlck9mZnNldCB0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShSZWZQdHI8UmFuZ2U+LCBp
bnQsIFRyYXZlcnNlT3B0aW9uID0gVHJhdmVyc2VPcHRpb25EZWZhdWx0LCBib29sIHN0YXlXaXRo
aW5SYW5nZSA9IGZhbHNlKTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzMzOCkKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE2LTA3LTE5
ICBOYW4gV2FuZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEluY29ycmVjdCBi
ZWhhdmlvciBmb3Igd29yZCByZWxhdGVkIHRleHQgbWFya2VyIGZ1bmN0aW9ucyB3aGVuIHRoZXJl
J3MgY29sbGFwc2VkIHdoaXRlc3BhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1OTkxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXItd29yZC1uYXYt
Y29sbGFwc2VkLXdoaXRlc3BhY2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L21hYy90ZXh0LW1hcmtlci13b3JkLW5hdi1jb2xsYXBzZWQtd2hpdGVzcGFjZS5o
dG1sOiBBZGRlZC4KKwogMjAxNi0wNy0xNyAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5j
b20+CiAKICAgICAgICAgVXBkYXRlIERPTUNvcmVFeGNlcHRpb24gdG8gdXNlIHRoZSBkZXNjcmlw
dGlvbiBpbiB0b1N0cmluZygpLgpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMv
dGV4dC1tYXJrZXItd29yZC1uYXYtY29sbGFwc2VkLXdoaXRlc3BhY2UtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtbWFya2VyLXdv
cmQtbmF2LWNvbGxhcHNlZC13aGl0ZXNwYWNlLWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQpCisr
KyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LW1hcmtlci13b3JkLW5hdi1jb2xs
YXBzZWQtd2hpdGVzcGFjZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
MCBAQAorVGVzdDEgVGVzdDIgVGVzdDMKK1RoaXMgdGVzdHMgdGhhdCB3b3JkIG5hdmlnYXRpb24g
aXMgd29ya2luZyBjb3JyZWN0bHkgd2l0aCBjb2xsYXBzZWQgd2hpdGVzcGFjZXMuCisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitDdXJyZW50IGNoYXJhY3RlciBpczogMQorTGVmdCB3
b3JkIGlzOiBUZXN0MQorUmlnaHQgd29yZCBpczogIAorUHJlIHdvcmQgc3RhcnQgdG8gbmV4dCB3
b3JkIGVuZDogVGVzdDEgCisKK0N1cnJlbnQgY2hhcmFjdGVyIGlzOiAgCitMZWZ0IHdvcmQgaXM6
ICAKK1JpZ2h0IHdvcmQgaXM6IFRlc3QyCitQcmUgd29yZCBzdGFydCB0byBuZXh0IHdvcmQgZW5k
OiAgVGVzdDIKKworQ3VycmVudCBjaGFyYWN0ZXIgaXM6IDIKK0xlZnQgd29yZCBpczogVGVzdDIK
K1JpZ2h0IHdvcmQgaXM6ICAKK1ByZSB3b3JkIHN0YXJ0IHRvIG5leHQgd29yZCBlbmQ6IFRlc3Qy
IAorCitDdXJyZW50IGNoYXJhY3RlciBpczogIAorTGVmdCB3b3JkIGlzOiAgCitSaWdodCB3b3Jk
IGlzOiBUZXN0MworUHJlIHdvcmQgc3RhcnQgdG8gbmV4dCB3b3JkIGVuZDogIFRlc3QzCisKK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBM
YXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LW1hcmtlci13b3JkLW5hdi1jb2xsYXBz
ZWQtd2hpdGVzcGFjZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxp
dHkvbWFjL3RleHQtbWFya2VyLXdvcmQtbmF2LWNvbGxhcHNlZC13aGl0ZXNwYWNlLmh0bWwJKG5v
bmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXIt
d29yZC1uYXYtY29sbGFwc2VkLXdoaXRlc3BhY2UuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDgxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+
Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD0idXRmLTgiPiAKKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkg
aWQ9ImJvZHkiPgorCis8ZGl2IGlkPSJ0ZXh0Ij4KK1Rlc3QxCisKKworCitUZXN0MiAgIFRlc3Qz
Cis8L2Rpdj4KKworPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48
L2Rpdj4KKworPHNjcmlwdD4KKworICAgIGRlc2NyaXB0aW9uKCJUaGlzIHRlc3RzIHRoYXQgd29y
ZCBuYXZpZ2F0aW9uIGlzIHdvcmtpbmcgY29ycmVjdGx5IHdpdGggY29sbGFwc2VkIHdoaXRlc3Bh
Y2VzLiIpOworICAgIAorICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsK
KyAgICAgICAgCisgICAgICAgIHZhciB0ZXh0ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNj
ZXNzaWJsZUVsZW1lbnRCeUlkKCJ0ZXh0Iik7CisgICAgICAgIC8vIEdldCB0aGUgYWN0dWFsIHRl
eHQgbm9kZS4KKyAgICAgICAgdGV4dCA9IHRleHQuY2hpbGRBdEluZGV4KDApOworICAgICAgICAK
KyAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBjYW4gZ2V0IHRoZSBzZWNvbmQgd29yZCAiVGVzdDIi
CisgICAgICAgIHZhciB0ZXh0TWFya2VyUmFuZ2UgPSB0ZXh0LnRleHRNYXJrZXJSYW5nZUZvckVs
ZW1lbnQodGV4dCk7CisgICAgICAgIHZhciBzdGFydE1hcmtlciA9IHRleHQuc3RhcnRUZXh0TWFy
a2VyRm9yVGV4dE1hcmtlclJhbmdlKHRleHRNYXJrZXJSYW5nZSk7CisgICAgICAgIHZhciBjdXJy
ZW50TWFya2VyID0gYWR2YW5jZUFuZFZlcmlmeShzdGFydE1hcmtlciwgNSwgdGV4dCk7CisgICAg
ICAgIGN1cnJlbnRNYXJrZXIgPSBhZHZhbmNlQW5kVmVyaWZ5KGN1cnJlbnRNYXJrZXIsIDEsIHRl
eHQpOworICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBjYW4gZ2V0IHRoZSB0aGly
ZCB3b3JkICJUZXN0MyIKKyAgICAgICAgY3VycmVudE1hcmtlciA9IGFkdmFuY2VBbmRWZXJpZnko
Y3VycmVudE1hcmtlciwgNSwgdGV4dCk7CisgICAgICAgIGN1cnJlbnRNYXJrZXIgPSBhZHZhbmNl
QW5kVmVyaWZ5KGN1cnJlbnRNYXJrZXIsIDEsIHRleHQpOworICAgICAgICAKKyAgICAgICAgZnVu
Y3Rpb24gYWR2YW5jZUFuZFZlcmlmeShjdXJyZW50TWFya2VyLCBvZmZzZXQsIG9iaikgeworICAg
ICAgICAgICAgdmFyIHByZXZpb3VzTWFya2VyID0gY3VycmVudE1hcmtlcjsKKyAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgb2Zmc2V0OyBpKyspIHsKKyAgICAgICAgICAgICAgICBwcmV2
aW91c01hcmtlciA9IGN1cnJlbnRNYXJrZXI7CisgICAgICAgICAgICAgICAgY3VycmVudE1hcmtl
ciA9IG9iai5uZXh0VGV4dE1hcmtlcihwcmV2aW91c01hcmtlcik7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB2ZXJpZnlXb3JkUmFuZ2VGb3JUZXh0TWFya2VyKHByZXZpb3VzTWFya2VyLCBj
dXJyZW50TWFya2VyLCBvYmopOworICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRNYXJrZXI7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZ1bmN0aW9uIHJlcGxhY2VBdHRhY2htZW50SW5T
dHJpbmcoc3RyKSB7CisgICAgICAgICAgICB2YXIgbmV3bGluZSA9ICdcbic7CisgICAgICAgICAg
ICBzdHIgPSAgc3RyLnJlcGxhY2UoU3RyaW5nLmZyb21DaGFyQ29kZSg2NTUzMiksICJbQVRUQUNI
TUVOVF0iKTsKKyAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKG5ld2xpbmUsICInbGluZSBi
cmVhayciKTsKKyAgICAgICAgICAgIHJldHVybiBzdHI7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGZ1bmN0aW9uIHZlcmlmeVdvcmRSYW5nZUZvclRleHRNYXJrZXIocHJlTWFya2VyLCB0
ZXh0TWFya2VyLCBvYmopIHsKKyAgICAgICAgICAgIHZhciBtYXJrZXJSYW5nZSA9IG9iai50ZXh0
TWFya2VyUmFuZ2VGb3JNYXJrZXJzKHByZU1hcmtlciwgdGV4dE1hcmtlcik7CisgICAgICAgICAg
ICB2YXIgY3VycmVudENoYXJhY3RlciA9IG9iai5zdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UobWFy
a2VyUmFuZ2UpOworICAgICAgICAgICAgZGVidWcoIkN1cnJlbnQgY2hhcmFjdGVyIGlzOiAiICsg
Y3VycmVudENoYXJhY3Rlcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHZhciBwcmV2aW91
c1dvcmRSYW5nZSA9IG9iai5sZWZ0V29yZFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIodGV4
dE1hcmtlcik7CisgICAgICAgICAgICB2YXIgbmV4dFdvcmRSYW5nZSA9IG9iai5yaWdodFdvcmRU
ZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyKHRleHRNYXJrZXIpOworICAgICAgICAgICAgdmFy
IHByZVdvcmQgPSBvYmouc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKHByZXZpb3VzV29yZFJhbmdl
KTsKKyAgICAgICAgICAgIHZhciBuZXh0V29yZCA9IG9iai5zdHJpbmdGb3JUZXh0TWFya2VyUmFu
Z2UobmV4dFdvcmRSYW5nZSk7CisgICAgICAgICAgICBkZWJ1ZygiTGVmdCB3b3JkIGlzOiAiICsg
cHJlV29yZCk7CisgICAgICAgICAgICBkZWJ1ZygiUmlnaHQgd29yZCBpczogIiArIG5leHRXb3Jk
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdmFyIHByZVdvcmRTdGFydCA9IG9iai5wcmV2
aW91c1dvcmRTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKHRleHRNYXJrZXIpOworICAgICAg
ICAgICAgdmFyIG5leHRXb3JkRW5kID0gb2JqLm5leHRXb3JkRW5kVGV4dE1hcmtlckZvclRleHRN
YXJrZXIodGV4dE1hcmtlcik7CisgICAgICAgICAgICB2YXIgcHJlQW5kTmV4dFdvcmRSYW5nZSA9
IG9iai50ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJzKHByZVdvcmRTdGFydCwgbmV4dFdvcmRFbmQp
OworICAgICAgICAgICAgdmFyIHByZUFuZE5leHRXb3JkID0gb2JqLnN0cmluZ0ZvclRleHRNYXJr
ZXJSYW5nZShwcmVBbmROZXh0V29yZFJhbmdlKTsKKyAgICAgICAgICAgIGRlYnVnKCJQcmUgd29y
ZCBzdGFydCB0byBuZXh0IHdvcmQgZW5kOiAiICsgcHJlQW5kTmV4dFdvcmQgKyAiXG4iKTsKKyAg
ICAgICAgfQorICAgIH0KKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284010</attachid>
            <date>2016-07-19 08:52:07 -0700</date>
            <delta_ts>2016-07-19 09:18:06 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>16325</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE2LTA3LTE5ICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEluY29ycmVjdCBiZWhhdmlvciBm
b3Igd29yZCByZWxhdGVkIHRleHQgbWFya2VyIGZ1bmN0aW9ucyB3aGVuIHRoZXJlJ3MgY29sbGFw
c2VkIHdoaXRlc3BhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1OTkxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFdlIGFyZSBnZXR0aW5nIGEgYmFkIENoYXJhY3Rlck9mZnNldCB3aGVuIHRoZXJlJ3Mg
Y29sbGFwc2VkIHdoaXRlc3BhY2UuIEFkZGVkIGEgVHJhdmVyc2VPcHRpb25WYWxpZGF0ZU9mZnNl
dAorICAgICAgICBvcHRpb24gdG8gbWFrZSBzdXJlIHdlIGFyZSBnZXR0aW5nIHRoZSBjb3JyZWN0
IENoYXJhY3Rlck9mZnNldCBiYXNlZCBvbiB0aGUgY29ycmVzcG9uZGluZyBSYW5nZSBvZmZzZXQu
IEFuZAorICAgICAgICBmaXhlZCBhIHdvcmQgbmF2aWdhdGlvbiBpc3N1ZSBiYXNlZCBvbiB0aGF0
LgorCisgICAgICAgIFRlc3Q6IGFjY2Vzc2liaWxpdHkvbWFjL3RleHQtbWFya2VyLXdvcmQtbmF2
LWNvbGxhcHNlZC13aGl0ZXNwYWNlLmh0bWwKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjp0cmF2ZXJz
ZVRvT2Zmc2V0SW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpyYW5n
ZUZvck5vZGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpzdGFy
dE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmpl
Y3RDYWNoZTo6Y2hhcmFjdGVyT2Zmc2V0RnJvbVZpc2libGVQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpBWE9iamVjdENhY2hlOjpyaWdodFdvcmRSYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBWE9iamVjdENhY2hlOjpwcmV2aW91c0JvdW5kYXJ5KToKKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Omlz
Tm9kZUluVXNlKToKKwogMjAxNi0wNy0xOSAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29t
PgogCiAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNzQyMDMwOD4gV2ViQ29yZS03NjAyLjEuNDIg
ZmFpbHMgdG8gYnVpbGQ6IGVycm9yOiB1bnVzZWQgcGFyYW1ldGVyICd2bScKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkocmV2aXNpb24g
MjAzMzM4KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTUwMyw2ICsxNTAzLDcgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFY
T2JqZWN0Q2FjaGU6OnRyYXZlcnNlVAogICAgICAgICByZXR1cm4gQ2hhcmFjdGVyT2Zmc2V0KCk7
CiAgICAgCiAgICAgYm9vbCB0b05vZGVFbmQgPSBvcHRpb24gJiBUcmF2ZXJzZU9wdGlvblRvTm9k
ZUVuZDsKKyAgICBib29sIHZhbGlkYXRlT2Zmc2V0ID0gb3B0aW9uICYgVHJhdmVyc2VPcHRpb25W
YWxpZGF0ZU9mZnNldDsKICAgICAKICAgICBpbnQgb2Zmc2V0SW5DaGFyYWN0ZXIgPSAwOwogICAg
IGludCBjdW11bGF0aXZlT2Zmc2V0ID0gMDsKQEAgLTE1MzYsOSArMTUzNyw2IEBAIENoYXJhY3Rl
ck9mZnNldCBBWE9iamVjdENhY2hlOjp0cmF2ZXJzZVQKICAgICAvLyBTb21ldGltZXMgdGV4dCBj
b250ZW50cyBpbiBhIG5vZGUgYXJlIHNwbGl0dGVkIGludG8gc2V2ZXJhbCBpdGVyYXRpb25zLCBz
byB0aGF0IGl0ZXJhdG9yLnJhbmdlKCktPnN0YXJ0T2Zmc2V0KCkKICAgICAvLyBtaWdodCBub3Qg
YmUgdGhlIGNvcnJlY3QgY2hhcmFjdGVyIGNvdW50LiBIZXJlIHdlIHVzZSBhIHByZXZpb3VzTm9k
ZSBvYmplY3QgdG8ga2VlcCB0cmFjayBvZiB0aGF0LgogICAgIE5vZGUqIHByZXZpb3VzTm9kZSA9
IG51bGxwdHI7Ci0gICAgLy8gV2hlbiB0ZXh0IG5vZGUgaGFzIGNvbGxhcHNlZCB3aGl0ZXNwYWNl
cywgd2UgbmVlZCB0byB0cmVhdCBpdCBkaWZmZXJlbnRseSBzaW5jZSB0ZXh0IGl0ZXJhdG9yCi0g
ICAgLy8gd2lsbCBvbWl0IHRoZSBjb2xsYXBzZWQgc3BhY2VzIGFuZCBtYWtlIHRoZSBvZmZzZXQg
aW5hY2N1cmF0ZS4KLSAgICBOb2RlKiBjb2xsYXBzZWRXaGl0ZXNwYWNlTm9kZSA9IG51bGxwdHI7
CiAgICAgZm9yICg7ICFpdGVyYXRvci5hdEVuZCgpOyBpdGVyYXRvci5hZHZhbmNlKCkpIHsKICAg
ICAgICAgaW50IGN1cnJlbnRMZW5ndGggPSBpdGVyYXRvci50ZXh0KCkubGVuZ3RoKCk7CiAgICAg
ICAgIGJvb2wgaGFzUmVwbGFjZWROb2RlT3JCUiA9IGZhbHNlOwpAQCAtMTU0NiwxMCArMTU0NCw2
IEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjp0cmF2ZXJzZVQKICAgICAgICAgTm9k
ZSYgbm9kZSA9IGl0ZXJhdG9yLnJhbmdlKCktPnN0YXJ0Q29udGFpbmVyKCk7CiAgICAgICAgIGN1
cnJlbnROb2RlID0gJm5vZGU7CiAgICAgICAgIAotICAgICAgICAvLyBUaGUgb2Zmc2V0IG9mIG5v
ZGUgd2l0aCBjb2xsYXBzZWQgd2hpdGVzcGFjZXMgaGFzIGJlZW4gY2FsY3VhbHRlZCBpbiB0aGUg
Zmlyc3QgaXRlcmF0aW9uLgotICAgICAgICBpZiAoY3VycmVudE5vZGUgPT0gY29sbGFwc2VkV2hp
dGVzcGFjZU5vZGUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCiAgICAgICAgIC8v
IFdoZW4gY3VycmVudExlbmd0aCA9PSAwLCB3ZSBjaGVjayBpZiB0aGVyZSdzIGFueSByZXBsYWNl
ZCBub2RlLgogICAgICAgICAvLyBJZiBub3QsIHdlIHNraXAgdGhlIG5vZGUgd2l0aCBubyBsZW5n
dGguCiAgICAgICAgIGlmICghY3VycmVudExlbmd0aCkgewpAQCAtMTU3OSw0MiArMTU3MywyMyBA
QCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6dHJhdmVyc2VUCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudE5vZGUtPmlzVGV4dE5vZGUoKSAm
JiBjdXJyZW50Tm9kZS0+cmVuZGVyZXIoKSkgewotICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhl
cmUncyBjb2xsYXBzZWQgd2hpdGVzcGFjZSwgdGhlIHRleHQgaXRlcmF0b3Igd2lsbCBvbmx5IGNv
dW50IHRob3NlIHNwYWNlcyBhcyBvbmUgc2luZ2xlIHNwYWNlLgotICAgICAgICAgICAgICAgIC8v
IEhlcmUgd2UgdXNlIHRoZSBSZW5kZXJUZXh0IHRvIGdldCB0aGUgYWN0dWFsIGxlbmd0aC4KLSAg
ICAgICAgICAgICAgICBSZW5kZXJUZXh0KiByZW5kZXJlZFRleHQgPSBkb3duY2FzdDxSZW5kZXJU
ZXh0PihjdXJyZW50Tm9kZS0+cmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICAgICAgaW50IGN1cnJl
bnRTdGFydE9mZnNldCA9IGl0ZXJhdG9yLnJhbmdlKCktPnN0YXJ0T2Zmc2V0KCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHJlbmRlcmVkVGV4dC0+c3R5bGUoKS5pc0NvbGxhcHNpYmxlV2hpdGVTcGFj
ZShpdGVyYXRvci50ZXh0KClbY3VycmVudExlbmd0aCAtIDFdKSAgJiYgY3VycmVudExlbmd0aCAr
IGN1cnJlbnRTdGFydE9mZnNldCAhPSByZW5kZXJlZFRleHQtPmNhcmV0TWF4T2Zmc2V0KCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgaW50IGFwcGVuZExlbmd0aCA9ICgmcmFuZ2UtPmVuZENvbnRh
aW5lcigpID09IGN1cnJlbnROb2RlID8gcmFuZ2UtPmVuZE9mZnNldCgpIDogKGludClyZW5kZXJl
ZFRleHQtPnRleHQoKS0+bGVuZ3RoKCkpIC0gY3VycmVudFN0YXJ0T2Zmc2V0OwotICAgICAgICAg
ICAgICAgICAgICBsYXN0U3RhcnRPZmZzZXQgPSBjdXJyZW50U3RhcnRPZmZzZXQ7Ci0gICAgICAg
ICAgICAgICAgICAgIGN1bXVsYXRpdmVPZmZzZXQgKz0gYXBwZW5kTGVuZ3RoOwotICAgICAgICAg
ICAgICAgICAgICBsYXN0TGVuZ3RoID0gYXBwZW5kTGVuZ3RoOwotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgLy8gQnJlYWsgZWFybHkgaWYgd2UgaGF2ZSBhZHZhbmNl
ZCBlbm91Z2ggY2hhcmFjdGVycy4KLSAgICAgICAgICAgICAgICAgICAgaWYgKCF0b05vZGVFbmQg
JiYgY3VtdWxhdGl2ZU9mZnNldCA+PSBvZmZzZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG9mZnNldEluQ2hhcmFjdGVyID0gb2Zmc2V0IC0gKGN1bXVsYXRpdmVPZmZzZXQgLSBsYXN0TGVu
Z3RoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZWRXaGl0ZXNwYWNlTm9kZSA9
IGN1cnJlbnROb2RlOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjdW11
bGF0aXZlT2Zmc2V0ICs9IGN1cnJlbnRMZW5ndGg7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
Y3VycmVudE5vZGUgPT0gcHJldmlvdXNOb2RlKQorICAgICAgICBpZiAoY3VycmVudE5vZGUgPT0g
cHJldmlvdXNOb2RlKSB7CiAgICAgICAgICAgICBsYXN0TGVuZ3RoICs9IGN1cnJlbnRMZW5ndGg7
CisgICAgICAgICAgICBsYXN0U3RhcnRPZmZzZXQgPSBpdGVyYXRvci5yYW5nZSgpLT5lbmRPZmZz
ZXQoKSAtIGxhc3RMZW5ndGg7CisgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICBsYXN0TGVuZ3RoID0gY3VycmVudExlbmd0aDsKICAgICAgICAgICAgIGxhc3RTdGFydE9mZnNl
dCA9IGhhc1JlcGxhY2VkTm9kZU9yQlIgPyAwIDogaXRlcmF0b3IucmFuZ2UoKS0+c3RhcnRPZmZz
ZXQoKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gQnJlYWsgZWFybHkgaWYgd2Ug
aGF2ZSBhZHZhbmNlZCBlbm91Z2ggY2hhcmFjdGVycy4KLSAgICAgICAgaWYgKCF0b05vZGVFbmQg
JiYgY3VtdWxhdGl2ZU9mZnNldCA+PSBvZmZzZXQpIHsKLSAgICAgICAgICAgIG9mZnNldEluQ2hh
cmFjdGVyID0gb2Zmc2V0IC0gKGN1bXVsYXRpdmVPZmZzZXQgLSBsYXN0TGVuZ3RoKTsKKyAgICAg
ICAgYm9vbCBjdW11bGF0ZUVub3VnaCA9IHZhbGlkYXRlT2Zmc2V0ID8gY3VtdWxhdGl2ZU9mZnNl
dCArIGxhc3RTdGFydE9mZnNldCA+PSBvZmZzZXQgOiBjdW11bGF0aXZlT2Zmc2V0ID49IG9mZnNl
dDsKKyAgICAgICAgaWYgKCF0b05vZGVFbmQgJiYgY3VtdWxhdGVFbm91Z2gpIHsKKyAgICAgICAg
ICAgIG9mZnNldEluQ2hhcmFjdGVyID0gdmFsaWRhdGVPZmZzZXQgPyBzdGQ6Om1heChvZmZzZXQg
LSBsYXN0U3RhcnRPZmZzZXQsIDApIDogb2Zmc2V0IC0gKGN1bXVsYXRpdmVPZmZzZXQgLSBsYXN0
TGVuZ3RoKTsKICAgICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CkBAIC0xNjY3LDcgKzE2NDIsMTEgQEAgUmVmUHRyPFJhbmdlPiBBWE9iamVj
dENhY2hlOjpyYW5nZUZvck5vZAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBSZWZQdHI8
UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZG9jdW1lbnQpOwogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwotICAgIHJhbmdlLT5zZWxlY3ROb2RlQ29udGVudHMoKm5vZGUsIGVjKTsKKyAg
ICAvLyBGb3IgcmVwbGFjZWQgbm9kZSB3aXRob3V0IGNoaWxkcmVuLCB3ZSBzaG91bGQgaW5jbHVj
ZSBpdHNlbGYgaW4gdGhlIHJhbmdlLgorICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyZXBs
YWNlZE5vZGVOZWVkc0NoYXJhY3Rlcihub2RlKSkKKyAgICAgICAgcmFuZ2UtPnNlbGVjdE5vZGUo
Km5vZGUsIGVjKTsKKyAgICBlbHNlCisgICAgICAgIHJhbmdlLT5zZWxlY3ROb2RlQ29udGVudHMo
Km5vZGUsIGVjKTsKICAgICByZXR1cm4gZWMgPyBudWxscHRyIDogcmFuZ2U7CiB9CiAgICAgCkBA
IC0xODExLDE1ICsxNzkwLDIwIEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpzdGFy
dE9yRW4KICAgICAvLyBJZiBpdCdzIGVuZCB0ZXh0IG1hcmtlciwgd2Ugd2FudCB0byBnbyB0byB0
aGUgZW5kIG9mIHRoZSByYW5nZSwgYW5kIHN0YXkgd2l0aGluIHRoZSByYW5nZS4KICAgICBib29s
IHN0YXlXaXRoaW5SYW5nZSA9ICFpc1N0YXJ0OwogICAgIAorICAgIE5vZGUmIGVuZE5vZGUgPSBy
YW5nZS0+ZW5kQ29udGFpbmVyKCk7CisgICAgaWYgKGVuZE5vZGUub2Zmc2V0SW5DaGFyYWN0ZXJz
KCkgJiYgIWlzU3RhcnQpCisgICAgICAgIHJldHVybiB0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShy
YW5nZUZvck5vZGVDb250ZW50cygmZW5kTm9kZSksIHJhbmdlLT5lbmRPZmZzZXQoKSwgVHJhdmVy
c2VPcHRpb25WYWxpZGF0ZU9mZnNldCk7CisgICAgCiAgICAgUmVmPFJhbmdlPiBjb3B5UmFuZ2Ug
PSAqcmFuZ2U7CiAgICAgLy8gQ2hhbmdlIHRoZSBzdGFydCBvZiB0aGUgcmFuZ2UsIHNvIHRoZSBj
aGFyYWN0ZXIgb2Zmc2V0IHN0YXJ0cyBmcm9tIG5vZGUgYmVnaW5uaW5nLgogICAgIGludCBvZmZz
ZXQgPSAwOwogICAgIE5vZGUmIG5vZGUgPSBjb3B5UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7CiAg
ICAgaWYgKG5vZGUub2Zmc2V0SW5DaGFyYWN0ZXJzKCkpIHsKLSAgICAgICAgY29weVJhbmdlID0g
UmFuZ2U6OmNyZWF0ZShyYW5nZS0+b3duZXJEb2N1bWVudCgpLCAmcmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCksIHJhbmdlLT5zdGFydE9mZnNldCgpLCAmcmFuZ2UtPmVuZENvbnRhaW5lcigpLCByYW5n
ZS0+ZW5kT2Zmc2V0KCkpOwotICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgbm9kZVN0YXJ0T2Zmc2V0
ID0gdHJhdmVyc2VUb09mZnNldEluUmFuZ2UocmFuZ2VGb3JOb2RlQ29udGVudHMoJm5vZGUpLCAw
KTsKLSAgICAgICAgb2Zmc2V0ID0gc3RkOjptYXgoY29weVJhbmdlLT5zdGFydE9mZnNldCgpIC0g
bm9kZVN0YXJ0T2Zmc2V0LnN0YXJ0SW5kZXgsIDApOwotICAgICAgICBjb3B5UmFuZ2UtPnNldFN0
YXJ0KG5vZGUsIG5vZGVTdGFydE9mZnNldC5zdGFydEluZGV4KTsKKyAgICAgICAgQ2hhcmFjdGVy
T2Zmc2V0IG5vZGVTdGFydE9mZnNldCA9IHRyYXZlcnNlVG9PZmZzZXRJblJhbmdlKHJhbmdlRm9y
Tm9kZUNvbnRlbnRzKCZub2RlKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCksIFRyYXZlcnNlT3B0aW9u
VmFsaWRhdGVPZmZzZXQpOworICAgICAgICBpZiAoaXNTdGFydCkKKyAgICAgICAgICAgIHJldHVy
biBub2RlU3RhcnRPZmZzZXQ7CisgICAgICAgIGNvcHlSYW5nZSA9IFJhbmdlOjpjcmVhdGUocmFu
Z2UtPm93bmVyRG9jdW1lbnQoKSwgJnJhbmdlLT5zdGFydENvbnRhaW5lcigpLCAwLCAmcmFuZ2Ut
PmVuZENvbnRhaW5lcigpLCByYW5nZS0+ZW5kT2Zmc2V0KCkpOworICAgICAgICBvZmZzZXQgKz0g
bm9kZVN0YXJ0T2Zmc2V0Lm9mZnNldDsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHRyYXZlcnNl
VG9PZmZzZXRJblJhbmdlKFdURk1vdmUoY29weVJhbmdlKSwgb2Zmc2V0LCBpc1N0YXJ0ID8gVHJh
dmVyc2VPcHRpb25EZWZhdWx0IDogVHJhdmVyc2VPcHRpb25Ub05vZGVFbmQsIHN0YXlXaXRoaW5S
YW5nZSk7CkBAIC0xOTg0LDcgKzE5NjgsNyBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNo
ZTo6Y2hhcmFjdGVyCiAgICAgQVNTRVJUKGRvbU5vZGUpOwogICAgIAogICAgIGlmIChkb21Ob2Rl
LT5vZmZzZXRJbkNoYXJhY3RlcnMoKSkKLSAgICAgICAgcmV0dXJuIENoYXJhY3Rlck9mZnNldChk
b21Ob2RlLCAwLCBkZWVwUG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIDApOworICAgICAg
ICByZXR1cm4gdHJhdmVyc2VUb09mZnNldEluUmFuZ2UocmFuZ2VGb3JOb2RlQ29udGVudHMoZG9t
Tm9kZSksIGRlZXBQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgVHJhdmVyc2VPcHRpb25W
YWxpZGF0ZU9mZnNldCk7CiAgICAgCiAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IG9i
aiA9IHRoaXMtPmdldE9yQ3JlYXRlKGRvbU5vZGUpOwogICAgIGlmICghb2JqKQpAQCAtMjE4Niw3
ICsyMTcwLDcgQEAgUmVmUHRyPFJhbmdlPiBBWE9iamVjdENhY2hlOjpsZWZ0V29yZFJhbgogCiBS
ZWZQdHI8UmFuZ2U+IEFYT2JqZWN0Q2FjaGU6OnJpZ2h0V29yZFJhbmdlKGNvbnN0IENoYXJhY3Rl
ck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0KQogewotICAgIENoYXJhY3Rlck9mZnNldCBzdGFydCA9
IHN0YXJ0Q2hhcmFjdGVyT2Zmc2V0T2ZXb3JkKGNoYXJhY3Rlck9mZnNldCk7CisgICAgQ2hhcmFj
dGVyT2Zmc2V0IHN0YXJ0ID0gc3RhcnRDaGFyYWN0ZXJPZmZzZXRPZldvcmQoY2hhcmFjdGVyT2Zm
c2V0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpOwogICAgIENoYXJhY3Rlck9mZnNldCBlbmQgPSBl
bmRDaGFyYWN0ZXJPZmZzZXRPZldvcmQoc3RhcnQpOwogICAgIHJldHVybiByYW5nZUZvclVub3Jk
ZXJlZENoYXJhY3Rlck9mZnNldHMoc3RhcnQsIGVuZCk7CiB9CkBAIC0yMzE5LDEwICsyMzAzLDE4
IEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpwcmV2aW91c0IKICAgICAgICAgcmV0
dXJuIGl0LmF0RW5kKCkgPyBzdGFydCA6IGNoYXJhY3Rlck9mZnNldDsKICAgICAKICAgICBOb2Rl
JiBub2RlID0gaXQuYXRFbmQoKSA/IHNlYXJjaFJhbmdlLT5zdGFydENvbnRhaW5lcigpIDogaXQu
cmFuZ2UoKS0+c3RhcnRDb250YWluZXIoKTsKKyAgICAKKyAgICAvLyBTaW1wbGlmaWVkQmFja3dh
cmRzVGV4dEl0ZXJhdG9yIGlnbm9yZXMgcmVwbGFjZWQgZWxlbWVudAorICAgIGlmIChBY2Nlc3Np
YmlsaXR5T2JqZWN0OjpyZXBsYWNlZE5vZGVOZWVkc0NoYXJhY3RlcihjaGFyYWN0ZXJPZmZzZXQu
bm9kZSkpCisgICAgICAgIHJldHVybiBjaGFyYWN0ZXJPZmZzZXRGb3JOb2RlQW5kT2Zmc2V0KCpj
aGFyYWN0ZXJPZmZzZXQubm9kZSwgMCk7CisgICAgTm9kZSogbmV4dFNpYmxpbmcgPSBub2RlLm5l
eHRTaWJsaW5nKCk7CisgICAgaWYgKCZub2RlICE9IGNoYXJhY3Rlck9mZnNldC5ub2RlICYmIEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OnJlcGxhY2VkTm9kZU5lZWRzQ2hhcmFjdGVyKG5leHRTaWJsaW5n
KSkKKyAgICAgICAgcmV0dXJuIHN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZShyYW5n
ZUZvck5vZGVDb250ZW50cyhuZXh0U2libGluZyksIGZhbHNlKTsKKyAgICAKICAgICBpZiAoKG5v
ZGUuaXNUZXh0Tm9kZSgpICYmIHN0YXRpY19jYXN0PGludD4obmV4dCkgPD0gbm9kZS5tYXhDaGFy
YWN0ZXJPZmZzZXQoKSkgfHwgKG5vZGUucmVuZGVyZXIoKSAmJiBub2RlLnJlbmRlcmVyKCktPmlz
QlIoKSAmJiAhbmV4dCkpIHsKICAgICAgICAgLy8gVGhlIG5leHQgdmFyaWFibGUgY29udGFpbnMg
YSB1c2FibGUgaW5kZXggaW50byBhIHRleHQgbm9kZQotICAgICAgICBpZiAoJm5vZGUgPT0gY2hh
cmFjdGVyT2Zmc2V0Lm5vZGUpCi0gICAgICAgICAgICBuZXh0IC09IGNoYXJhY3Rlck9mZnNldC5z
dGFydEluZGV4OworICAgICAgICBpZiAobm9kZS5pc1RleHROb2RlKCkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJhdmVyc2VUb09mZnNldEluUmFuZ2UocmFuZ2VGb3JOb2RlQ29udGVudHMoJm5vZGUp
LCBuZXh0LCBUcmF2ZXJzZU9wdGlvblZhbGlkYXRlT2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIGNo
YXJhY3Rlck9mZnNldEZvck5vZGVBbmRPZmZzZXQobm9kZSwgbmV4dCwgVHJhdmVyc2VPcHRpb25J
bmNsdWRlU3RhcnQpOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQVhPYmplY3RDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCShyZXZpc2lvbiAyMDMzMzgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzQ4
LDcgKzM0OCw3IEBAIHByb3RlY3RlZDoKICAgICBib29sIGlzTm9kZUluVXNlKE5vZGUqIG4pIHsg
cmV0dXJuIG1fdGV4dE1hcmtlck5vZGVzLmNvbnRhaW5zKG4pOyB9CiAgICAgCiAgICAgLy8gQ2hh
cmFjdGVyT2Zmc2V0IGZ1bmN0aW9ucy4KLSAgICBlbnVtIFRyYXZlcnNlT3B0aW9uIHsgVHJhdmVy
c2VPcHRpb25EZWZhdWx0ID0gMSA8PCAwLCBUcmF2ZXJzZU9wdGlvblRvTm9kZUVuZCA9IDEgPDwg
MSwgVHJhdmVyc2VPcHRpb25JbmNsdWRlU3RhcnQgPSAxIDw8IDIgfTsKKyAgICBlbnVtIFRyYXZl
cnNlT3B0aW9uIHsgVHJhdmVyc2VPcHRpb25EZWZhdWx0ID0gMSA8PCAwLCBUcmF2ZXJzZU9wdGlv
blRvTm9kZUVuZCA9IDEgPDwgMSwgVHJhdmVyc2VPcHRpb25JbmNsdWRlU3RhcnQgPSAxIDw8IDIs
IFRyYXZlcnNlT3B0aW9uVmFsaWRhdGVPZmZzZXQgPSAxIDw8IDMgfTsKICAgICBOb2RlKiBuZXh0
Tm9kZShOb2RlKikgY29uc3Q7CiAgICAgTm9kZSogcHJldmlvdXNOb2RlKE5vZGUqKSBjb25zdDsK
ICAgICBDaGFyYWN0ZXJPZmZzZXQgdHJhdmVyc2VUb09mZnNldEluUmFuZ2UoUmVmUHRyPFJhbmdl
PiwgaW50LCBUcmF2ZXJzZU9wdGlvbiA9IFRyYXZlcnNlT3B0aW9uRGVmYXVsdCwgYm9vbCBzdGF5
V2l0aGluUmFuZ2UgPSBmYWxzZSk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDMzMzgpCisrKyBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxNi0w
Ny0xOSAgTmFuIFdhbmcgIDxuX3dhbmdAYXBwbGUuY29tPgorCisgICAgICAgIEFYOiBJbmNvcnJl
Y3QgYmVoYXZpb3IgZm9yIHdvcmQgcmVsYXRlZCB0ZXh0IG1hcmtlciBmdW5jdGlvbnMgd2hlbiB0
aGVyZSdzIGNvbGxhcHNlZCB3aGl0ZXNwYWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk5MTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL3RleHQtbWFya2VyLXdvcmQt
bmF2LWNvbGxhcHNlZC13aGl0ZXNwYWNlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXItd29yZC1uYXYtY29sbGFwc2VkLXdoaXRlc3Bh
Y2UuaHRtbDogQWRkZWQuCisKIDIwMTYtMDctMTcgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBw
bGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBET01Db3JlRXhjZXB0aW9uIHRvIHVzZSB0aGUgZGVz
Y3JpcHRpb24gaW4gdG9TdHJpbmcoKS4KSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkv
bWFjL3RleHQtbWFya2VyLXdvcmQtbmF2LWNvbGxhcHNlZC13aGl0ZXNwYWNlLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LW1hcmtl
ci13b3JkLW5hdi1jb2xsYXBzZWQtd2hpdGVzcGFjZS1leHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50
KQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXItd29yZC1uYXYt
Y29sbGFwc2VkLXdoaXRlc3BhY2UtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzAgQEAKK1Rlc3QxIFRlc3QyIFRlc3QzCitUaGlzIHRlc3RzIHRoYXQgd29yZCBuYXZpZ2F0
aW9uIGlzIHdvcmtpbmcgY29ycmVjdGx5IHdpdGggY29sbGFwc2VkIHdoaXRlc3BhY2VzLgorCitP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworQ3VycmVudCBjaGFyYWN0ZXIgaXM6IDEKK0xl
ZnQgd29yZCBpczogVGVzdDEKK1JpZ2h0IHdvcmQgaXM6ICAKK1ByZSB3b3JkIHN0YXJ0IHRvIG5l
eHQgd29yZCBlbmQ6IFRlc3QxIAorCitDdXJyZW50IGNoYXJhY3RlciBpczogIAorTGVmdCB3b3Jk
IGlzOiAgCitSaWdodCB3b3JkIGlzOiBUZXN0MgorUHJlIHdvcmQgc3RhcnQgdG8gbmV4dCB3b3Jk
IGVuZDogIFRlc3QyCisKK0N1cnJlbnQgY2hhcmFjdGVyIGlzOiAyCitMZWZ0IHdvcmQgaXM6IFRl
c3QyCitSaWdodCB3b3JkIGlzOiAgCitQcmUgd29yZCBzdGFydCB0byBuZXh0IHdvcmQgZW5kOiBU
ZXN0MiAKKworQ3VycmVudCBjaGFyYWN0ZXIgaXM6ICAKK0xlZnQgd29yZCBpczogIAorUmlnaHQg
d29yZCBpczogVGVzdDMKK1ByZSB3b3JkIHN0YXJ0IHRvIG5leHQgd29yZCBlbmQ6ICBUZXN0Mwor
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRl
eDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXItd29yZC1uYXYtY29s
bGFwc2VkLXdoaXRlc3BhY2UuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3Np
YmlsaXR5L21hYy90ZXh0LW1hcmtlci13b3JkLW5hdi1jb2xsYXBzZWQtd2hpdGVzcGFjZS5odG1s
CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtbWFy
a2VyLXdvcmQtbmF2LWNvbGxhcHNlZC13aGl0ZXNwYWNlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw4MSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8v
RU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4gCis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5IGlkPSJib2R5Ij4KKworPGRpdiBpZD0idGV4dCI+CitUZXN0MQorCisKKworVGVzdDIgICBU
ZXN0MworPC9kaXY+CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29s
ZSI+PC9kaXY+CisKKzxzY3JpcHQ+CisKKyAgICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyB0aGF0
IHdvcmQgbmF2aWdhdGlvbiBpcyB3b3JraW5nIGNvcnJlY3RseSB3aXRoIGNvbGxhcHNlZCB3aGl0
ZXNwYWNlcy4iKTsKKyAgICAKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVy
KSB7CisgICAgICAgIAorICAgICAgICB2YXIgdGV4dCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVy
LmFjY2Vzc2libGVFbGVtZW50QnlJZCgidGV4dCIpOworICAgICAgICAvLyBHZXQgdGhlIGFjdHVh
bCB0ZXh0IG5vZGUuCisgICAgICAgIHRleHQgPSB0ZXh0LmNoaWxkQXRJbmRleCgwKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgY2FuIGdldCB0aGUgc2Vjb25kIHdvcmQgIlRl
c3QyIgorICAgICAgICB2YXIgdGV4dE1hcmtlclJhbmdlID0gdGV4dC50ZXh0TWFya2VyUmFuZ2VG
b3JFbGVtZW50KHRleHQpOworICAgICAgICB2YXIgc3RhcnRNYXJrZXIgPSB0ZXh0LnN0YXJ0VGV4
dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSh0ZXh0TWFya2VyUmFuZ2UpOworICAgICAgICB2YXIg
Y3VycmVudE1hcmtlciA9IGFkdmFuY2VBbmRWZXJpZnkoc3RhcnRNYXJrZXIsIDUsIHRleHQpOwor
ICAgICAgICBjdXJyZW50TWFya2VyID0gYWR2YW5jZUFuZFZlcmlmeShjdXJyZW50TWFya2VyLCAx
LCB0ZXh0KTsKKyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgY2FuIGdldCB0aGUg
dGhpcmQgd29yZCAiVGVzdDMiCisgICAgICAgIGN1cnJlbnRNYXJrZXIgPSBhZHZhbmNlQW5kVmVy
aWZ5KGN1cnJlbnRNYXJrZXIsIDUsIHRleHQpOworICAgICAgICBjdXJyZW50TWFya2VyID0gYWR2
YW5jZUFuZFZlcmlmeShjdXJyZW50TWFya2VyLCAxLCB0ZXh0KTsKKyAgICAgICAgCisgICAgICAg
IGZ1bmN0aW9uIGFkdmFuY2VBbmRWZXJpZnkoY3VycmVudE1hcmtlciwgb2Zmc2V0LCBvYmopIHsK
KyAgICAgICAgICAgIHZhciBwcmV2aW91c01hcmtlciA9IGN1cnJlbnRNYXJrZXI7CisgICAgICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9mZnNldDsgaSsrKSB7CisgICAgICAgICAgICAgICAg
cHJldmlvdXNNYXJrZXIgPSBjdXJyZW50TWFya2VyOworICAgICAgICAgICAgICAgIGN1cnJlbnRN
YXJrZXIgPSBvYmoubmV4dFRleHRNYXJrZXIocHJldmlvdXNNYXJrZXIpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgdmVyaWZ5V29yZFJhbmdlRm9yVGV4dE1hcmtlcihwcmV2aW91c01hcmtl
ciwgY3VycmVudE1hcmtlciwgb2JqKTsKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50TWFya2Vy
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmdW5jdGlvbiByZXBsYWNlQXR0YWNobWVu
dEluU3RyaW5nKHN0cikgeworICAgICAgICAgICAgdmFyIG5ld2xpbmUgPSAnXG4nOworICAgICAg
ICAgICAgc3RyID0gIHN0ci5yZXBsYWNlKFN0cmluZy5mcm9tQ2hhckNvZGUoNjU1MzIpLCAiW0FU
VEFDSE1FTlRdIik7CisgICAgICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShuZXdsaW5lLCAiJ2xp
bmUgYnJlYWsnIik7CisgICAgICAgICAgICByZXR1cm4gc3RyOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBmdW5jdGlvbiB2ZXJpZnlXb3JkUmFuZ2VGb3JUZXh0TWFya2VyKHByZU1hcmtl
ciwgdGV4dE1hcmtlciwgb2JqKSB7CisgICAgICAgICAgICB2YXIgbWFya2VyUmFuZ2UgPSBvYmou
dGV4dE1hcmtlclJhbmdlRm9yTWFya2VycyhwcmVNYXJrZXIsIHRleHRNYXJrZXIpOworICAgICAg
ICAgICAgdmFyIGN1cnJlbnRDaGFyYWN0ZXIgPSBvYmouc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdl
KG1hcmtlclJhbmdlKTsKKyAgICAgICAgICAgIGRlYnVnKCJDdXJyZW50IGNoYXJhY3RlciBpczog
IiArIGN1cnJlbnRDaGFyYWN0ZXIpOworICAgICAgICAgICAgCisgICAgICAgICAgICB2YXIgcHJl
dmlvdXNXb3JkUmFuZ2UgPSBvYmoubGVmdFdvcmRUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2Vy
KHRleHRNYXJrZXIpOworICAgICAgICAgICAgdmFyIG5leHRXb3JkUmFuZ2UgPSBvYmoucmlnaHRX
b3JkVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlcih0ZXh0TWFya2VyKTsKKyAgICAgICAgICAg
IHZhciBwcmVXb3JkID0gb2JqLnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShwcmV2aW91c1dvcmRS
YW5nZSk7CisgICAgICAgICAgICB2YXIgbmV4dFdvcmQgPSBvYmouc3RyaW5nRm9yVGV4dE1hcmtl
clJhbmdlKG5leHRXb3JkUmFuZ2UpOworICAgICAgICAgICAgZGVidWcoIkxlZnQgd29yZCBpczog
IiArIHByZVdvcmQpOworICAgICAgICAgICAgZGVidWcoIlJpZ2h0IHdvcmQgaXM6ICIgKyBuZXh0
V29yZCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHZhciBwcmVXb3JkU3RhcnQgPSBvYmou
cHJldmlvdXNXb3JkU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcih0ZXh0TWFya2VyKTsKKyAg
ICAgICAgICAgIHZhciBuZXh0V29yZEVuZCA9IG9iai5uZXh0V29yZEVuZFRleHRNYXJrZXJGb3JU
ZXh0TWFya2VyKHRleHRNYXJrZXIpOworICAgICAgICAgICAgdmFyIHByZUFuZE5leHRXb3JkUmFu
Z2UgPSBvYmoudGV4dE1hcmtlclJhbmdlRm9yTWFya2VycyhwcmVXb3JkU3RhcnQsIG5leHRXb3Jk
RW5kKTsKKyAgICAgICAgICAgIHZhciBwcmVBbmROZXh0V29yZCA9IG9iai5zdHJpbmdGb3JUZXh0
TWFya2VyUmFuZ2UocHJlQW5kTmV4dFdvcmRSYW5nZSk7CisgICAgICAgICAgICBkZWJ1ZygiUHJl
IHdvcmQgc3RhcnQgdG8gbmV4dCB3b3JkIGVuZDogIiArIHByZUFuZE5leHRXb3JkICsgIlxuIik7
CisgICAgICAgIH0KKyAgICB9CisKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+ClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284012</attachid>
            <date>2016-07-19 09:18:06 -0700</date>
            <delta_ts>2016-07-19 10:31:24 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>16321</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE2LTA3LTE5ICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEluY29ycmVjdCBiZWhhdmlvciBm
b3Igd29yZCByZWxhdGVkIHRleHQgbWFya2VyIGZ1bmN0aW9ucyB3aGVuIHRoZXJlJ3MgY29sbGFw
c2VkIHdoaXRlc3BhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1OTkxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFdlIGFyZSBnZXR0aW5nIGEgYmFkIENoYXJhY3Rlck9mZnNldCB3aGVuIHRoZXJlJ3Mg
Y29sbGFwc2VkIHdoaXRlc3BhY2UuIEFkZGVkIGEgVHJhdmVyc2VPcHRpb25WYWxpZGF0ZU9mZnNl
dAorICAgICAgICBvcHRpb24gdG8gbWFrZSBzdXJlIHdlIGFyZSBnZXR0aW5nIHRoZSBjb3JyZWN0
IENoYXJhY3Rlck9mZnNldCBiYXNlZCBvbiB0aGUgY29ycmVzcG9uZGluZyBSYW5nZSBvZmZzZXQu
IEFuZAorICAgICAgICBmaXhlZCBhIHdvcmQgbmF2aWdhdGlvbiBpc3N1ZSBiYXNlZCBvbiB0aGF0
LgorCisgICAgICAgIFRlc3Q6IGFjY2Vzc2liaWxpdHkvbWFjL3RleHQtbWFya2VyLXdvcmQtbmF2
LWNvbGxhcHNlZC13aGl0ZXNwYWNlLmh0bWwKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjp0cmF2ZXJz
ZVRvT2Zmc2V0SW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpyYW5n
ZUZvck5vZGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpzdGFy
dE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmpl
Y3RDYWNoZTo6Y2hhcmFjdGVyT2Zmc2V0RnJvbVZpc2libGVQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpBWE9iamVjdENhY2hlOjpyaWdodFdvcmRSYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBWE9iamVjdENhY2hlOjpwcmV2aW91c0JvdW5kYXJ5KToKKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Omlz
Tm9kZUluVXNlKToKKwogMjAxNi0wNy0xOSAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29t
PgogCiAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNzQyMDMwOD4gV2ViQ29yZS03NjAyLjEuNDIg
ZmFpbHMgdG8gYnVpbGQ6IGVycm9yOiB1bnVzZWQgcGFyYW1ldGVyICd2bScKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkocmV2aXNpb24g
MjAzMzM4KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTUwMyw2ICsxNTAzLDcgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFY
T2JqZWN0Q2FjaGU6OnRyYXZlcnNlVAogICAgICAgICByZXR1cm4gQ2hhcmFjdGVyT2Zmc2V0KCk7
CiAgICAgCiAgICAgYm9vbCB0b05vZGVFbmQgPSBvcHRpb24gJiBUcmF2ZXJzZU9wdGlvblRvTm9k
ZUVuZDsKKyAgICBib29sIHZhbGlkYXRlT2Zmc2V0ID0gb3B0aW9uICYgVHJhdmVyc2VPcHRpb25W
YWxpZGF0ZU9mZnNldDsKICAgICAKICAgICBpbnQgb2Zmc2V0SW5DaGFyYWN0ZXIgPSAwOwogICAg
IGludCBjdW11bGF0aXZlT2Zmc2V0ID0gMDsKQEAgLTE1MzYsOSArMTUzNyw2IEBAIENoYXJhY3Rl
ck9mZnNldCBBWE9iamVjdENhY2hlOjp0cmF2ZXJzZVQKICAgICAvLyBTb21ldGltZXMgdGV4dCBj
b250ZW50cyBpbiBhIG5vZGUgYXJlIHNwbGl0dGVkIGludG8gc2V2ZXJhbCBpdGVyYXRpb25zLCBz
byB0aGF0IGl0ZXJhdG9yLnJhbmdlKCktPnN0YXJ0T2Zmc2V0KCkKICAgICAvLyBtaWdodCBub3Qg
YmUgdGhlIGNvcnJlY3QgY2hhcmFjdGVyIGNvdW50LiBIZXJlIHdlIHVzZSBhIHByZXZpb3VzTm9k
ZSBvYmplY3QgdG8ga2VlcCB0cmFjayBvZiB0aGF0LgogICAgIE5vZGUqIHByZXZpb3VzTm9kZSA9
IG51bGxwdHI7Ci0gICAgLy8gV2hlbiB0ZXh0IG5vZGUgaGFzIGNvbGxhcHNlZCB3aGl0ZXNwYWNl
cywgd2UgbmVlZCB0byB0cmVhdCBpdCBkaWZmZXJlbnRseSBzaW5jZSB0ZXh0IGl0ZXJhdG9yCi0g
ICAgLy8gd2lsbCBvbWl0IHRoZSBjb2xsYXBzZWQgc3BhY2VzIGFuZCBtYWtlIHRoZSBvZmZzZXQg
aW5hY2N1cmF0ZS4KLSAgICBOb2RlKiBjb2xsYXBzZWRXaGl0ZXNwYWNlTm9kZSA9IG51bGxwdHI7
CiAgICAgZm9yICg7ICFpdGVyYXRvci5hdEVuZCgpOyBpdGVyYXRvci5hZHZhbmNlKCkpIHsKICAg
ICAgICAgaW50IGN1cnJlbnRMZW5ndGggPSBpdGVyYXRvci50ZXh0KCkubGVuZ3RoKCk7CiAgICAg
ICAgIGJvb2wgaGFzUmVwbGFjZWROb2RlT3JCUiA9IGZhbHNlOwpAQCAtMTU0NiwxMCArMTU0NCw2
IEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjp0cmF2ZXJzZVQKICAgICAgICAgTm9k
ZSYgbm9kZSA9IGl0ZXJhdG9yLnJhbmdlKCktPnN0YXJ0Q29udGFpbmVyKCk7CiAgICAgICAgIGN1
cnJlbnROb2RlID0gJm5vZGU7CiAgICAgICAgIAotICAgICAgICAvLyBUaGUgb2Zmc2V0IG9mIG5v
ZGUgd2l0aCBjb2xsYXBzZWQgd2hpdGVzcGFjZXMgaGFzIGJlZW4gY2FsY3VhbHRlZCBpbiB0aGUg
Zmlyc3QgaXRlcmF0aW9uLgotICAgICAgICBpZiAoY3VycmVudE5vZGUgPT0gY29sbGFwc2VkV2hp
dGVzcGFjZU5vZGUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCiAgICAgICAgIC8v
IFdoZW4gY3VycmVudExlbmd0aCA9PSAwLCB3ZSBjaGVjayBpZiB0aGVyZSdzIGFueSByZXBsYWNl
ZCBub2RlLgogICAgICAgICAvLyBJZiBub3QsIHdlIHNraXAgdGhlIG5vZGUgd2l0aCBubyBsZW5n
dGguCiAgICAgICAgIGlmICghY3VycmVudExlbmd0aCkgewpAQCAtMTU3OSw0MiArMTU3MywyMyBA
QCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6dHJhdmVyc2VUCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudE5vZGUtPmlzVGV4dE5vZGUoKSAm
JiBjdXJyZW50Tm9kZS0+cmVuZGVyZXIoKSkgewotICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhl
cmUncyBjb2xsYXBzZWQgd2hpdGVzcGFjZSwgdGhlIHRleHQgaXRlcmF0b3Igd2lsbCBvbmx5IGNv
dW50IHRob3NlIHNwYWNlcyBhcyBvbmUgc2luZ2xlIHNwYWNlLgotICAgICAgICAgICAgICAgIC8v
IEhlcmUgd2UgdXNlIHRoZSBSZW5kZXJUZXh0IHRvIGdldCB0aGUgYWN0dWFsIGxlbmd0aC4KLSAg
ICAgICAgICAgICAgICBSZW5kZXJUZXh0KiByZW5kZXJlZFRleHQgPSBkb3duY2FzdDxSZW5kZXJU
ZXh0PihjdXJyZW50Tm9kZS0+cmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICAgICAgaW50IGN1cnJl
bnRTdGFydE9mZnNldCA9IGl0ZXJhdG9yLnJhbmdlKCktPnN0YXJ0T2Zmc2V0KCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHJlbmRlcmVkVGV4dC0+c3R5bGUoKS5pc0NvbGxhcHNpYmxlV2hpdGVTcGFj
ZShpdGVyYXRvci50ZXh0KClbY3VycmVudExlbmd0aCAtIDFdKSAgJiYgY3VycmVudExlbmd0aCAr
IGN1cnJlbnRTdGFydE9mZnNldCAhPSByZW5kZXJlZFRleHQtPmNhcmV0TWF4T2Zmc2V0KCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgaW50IGFwcGVuZExlbmd0aCA9ICgmcmFuZ2UtPmVuZENvbnRh
aW5lcigpID09IGN1cnJlbnROb2RlID8gcmFuZ2UtPmVuZE9mZnNldCgpIDogKGludClyZW5kZXJl
ZFRleHQtPnRleHQoKS0+bGVuZ3RoKCkpIC0gY3VycmVudFN0YXJ0T2Zmc2V0OwotICAgICAgICAg
ICAgICAgICAgICBsYXN0U3RhcnRPZmZzZXQgPSBjdXJyZW50U3RhcnRPZmZzZXQ7Ci0gICAgICAg
ICAgICAgICAgICAgIGN1bXVsYXRpdmVPZmZzZXQgKz0gYXBwZW5kTGVuZ3RoOwotICAgICAgICAg
ICAgICAgICAgICBsYXN0TGVuZ3RoID0gYXBwZW5kTGVuZ3RoOwotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgLy8gQnJlYWsgZWFybHkgaWYgd2UgaGF2ZSBhZHZhbmNl
ZCBlbm91Z2ggY2hhcmFjdGVycy4KLSAgICAgICAgICAgICAgICAgICAgaWYgKCF0b05vZGVFbmQg
JiYgY3VtdWxhdGl2ZU9mZnNldCA+PSBvZmZzZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG9mZnNldEluQ2hhcmFjdGVyID0gb2Zmc2V0IC0gKGN1bXVsYXRpdmVPZmZzZXQgLSBsYXN0TGVu
Z3RoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZWRXaGl0ZXNwYWNlTm9kZSA9
IGN1cnJlbnROb2RlOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjdW11
bGF0aXZlT2Zmc2V0ICs9IGN1cnJlbnRMZW5ndGg7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
Y3VycmVudE5vZGUgPT0gcHJldmlvdXNOb2RlKQorICAgICAgICBpZiAoY3VycmVudE5vZGUgPT0g
cHJldmlvdXNOb2RlKSB7CiAgICAgICAgICAgICBsYXN0TGVuZ3RoICs9IGN1cnJlbnRMZW5ndGg7
CisgICAgICAgICAgICBsYXN0U3RhcnRPZmZzZXQgPSBpdGVyYXRvci5yYW5nZSgpLT5lbmRPZmZz
ZXQoKSAtIGxhc3RMZW5ndGg7CisgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICBsYXN0TGVuZ3RoID0gY3VycmVudExlbmd0aDsKICAgICAgICAgICAgIGxhc3RTdGFydE9mZnNl
dCA9IGhhc1JlcGxhY2VkTm9kZU9yQlIgPyAwIDogaXRlcmF0b3IucmFuZ2UoKS0+c3RhcnRPZmZz
ZXQoKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gQnJlYWsgZWFybHkgaWYgd2Ug
aGF2ZSBhZHZhbmNlZCBlbm91Z2ggY2hhcmFjdGVycy4KLSAgICAgICAgaWYgKCF0b05vZGVFbmQg
JiYgY3VtdWxhdGl2ZU9mZnNldCA+PSBvZmZzZXQpIHsKLSAgICAgICAgICAgIG9mZnNldEluQ2hh
cmFjdGVyID0gb2Zmc2V0IC0gKGN1bXVsYXRpdmVPZmZzZXQgLSBsYXN0TGVuZ3RoKTsKKyAgICAg
ICAgYm9vbCB2YWxpZE9mZnNldCA9IHZhbGlkYXRlT2Zmc2V0ID8gY3VtdWxhdGl2ZU9mZnNldCAr
IGxhc3RTdGFydE9mZnNldCA+PSBvZmZzZXQgOiBjdW11bGF0aXZlT2Zmc2V0ID49IG9mZnNldDsK
KyAgICAgICAgaWYgKCF0b05vZGVFbmQgJiYgdmFsaWRPZmZzZXQpIHsKKyAgICAgICAgICAgIG9m
ZnNldEluQ2hhcmFjdGVyID0gdmFsaWRhdGVPZmZzZXQgPyBzdGQ6Om1heChvZmZzZXQgLSBsYXN0
U3RhcnRPZmZzZXQsIDApIDogb2Zmc2V0IC0gKGN1bXVsYXRpdmVPZmZzZXQgLSBsYXN0TGVuZ3Ro
KTsKICAgICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CkBAIC0xNjY3LDcgKzE2NDIsMTEgQEAgUmVmUHRyPFJhbmdlPiBBWE9iamVjdENhY2hl
OjpyYW5nZUZvck5vZAogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZG9jdW1lbnQpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgIHJhbmdlLT5zZWxlY3ROb2RlQ29udGVudHMoKm5vZGUsIGVjKTsKKyAgICAvLyBG
b3IgcmVwbGFjZWQgbm9kZSB3aXRob3V0IGNoaWxkcmVuLCB3ZSBzaG91bGQgaW5jbHVjZSBpdHNl
bGYgaW4gdGhlIHJhbmdlLgorICAgIGlmIChBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyZXBsYWNlZE5v
ZGVOZWVkc0NoYXJhY3Rlcihub2RlKSkKKyAgICAgICAgcmFuZ2UtPnNlbGVjdE5vZGUoKm5vZGUs
IGVjKTsKKyAgICBlbHNlCisgICAgICAgIHJhbmdlLT5zZWxlY3ROb2RlQ29udGVudHMoKm5vZGUs
IGVjKTsKICAgICByZXR1cm4gZWMgPyBudWxscHRyIDogcmFuZ2U7CiB9CiAgICAgCkBAIC0xODEx
LDE1ICsxNzkwLDIwIEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpzdGFydE9yRW4K
ICAgICAvLyBJZiBpdCdzIGVuZCB0ZXh0IG1hcmtlciwgd2Ugd2FudCB0byBnbyB0byB0aGUgZW5k
IG9mIHRoZSByYW5nZSwgYW5kIHN0YXkgd2l0aGluIHRoZSByYW5nZS4KICAgICBib29sIHN0YXlX
aXRoaW5SYW5nZSA9ICFpc1N0YXJ0OwogICAgIAorICAgIE5vZGUmIGVuZE5vZGUgPSByYW5nZS0+
ZW5kQ29udGFpbmVyKCk7CisgICAgaWYgKGVuZE5vZGUub2Zmc2V0SW5DaGFyYWN0ZXJzKCkgJiYg
IWlzU3RhcnQpCisgICAgICAgIHJldHVybiB0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShyYW5nZUZv
ck5vZGVDb250ZW50cygmZW5kTm9kZSksIHJhbmdlLT5lbmRPZmZzZXQoKSwgVHJhdmVyc2VPcHRp
b25WYWxpZGF0ZU9mZnNldCk7CisgICAgCiAgICAgUmVmPFJhbmdlPiBjb3B5UmFuZ2UgPSAqcmFu
Z2U7CiAgICAgLy8gQ2hhbmdlIHRoZSBzdGFydCBvZiB0aGUgcmFuZ2UsIHNvIHRoZSBjaGFyYWN0
ZXIgb2Zmc2V0IHN0YXJ0cyBmcm9tIG5vZGUgYmVnaW5uaW5nLgogICAgIGludCBvZmZzZXQgPSAw
OwogICAgIE5vZGUmIG5vZGUgPSBjb3B5UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7CiAgICAgaWYg
KG5vZGUub2Zmc2V0SW5DaGFyYWN0ZXJzKCkpIHsKLSAgICAgICAgY29weVJhbmdlID0gUmFuZ2U6
OmNyZWF0ZShyYW5nZS0+b3duZXJEb2N1bWVudCgpLCAmcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCks
IHJhbmdlLT5zdGFydE9mZnNldCgpLCAmcmFuZ2UtPmVuZENvbnRhaW5lcigpLCByYW5nZS0+ZW5k
T2Zmc2V0KCkpOwotICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgbm9kZVN0YXJ0T2Zmc2V0ID0gdHJh
dmVyc2VUb09mZnNldEluUmFuZ2UocmFuZ2VGb3JOb2RlQ29udGVudHMoJm5vZGUpLCAwKTsKLSAg
ICAgICAgb2Zmc2V0ID0gc3RkOjptYXgoY29weVJhbmdlLT5zdGFydE9mZnNldCgpIC0gbm9kZVN0
YXJ0T2Zmc2V0LnN0YXJ0SW5kZXgsIDApOwotICAgICAgICBjb3B5UmFuZ2UtPnNldFN0YXJ0KG5v
ZGUsIG5vZGVTdGFydE9mZnNldC5zdGFydEluZGV4KTsKKyAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0
IG5vZGVTdGFydE9mZnNldCA9IHRyYXZlcnNlVG9PZmZzZXRJblJhbmdlKHJhbmdlRm9yTm9kZUNv
bnRlbnRzKCZub2RlKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCksIFRyYXZlcnNlT3B0aW9uVmFsaWRh
dGVPZmZzZXQpOworICAgICAgICBpZiAoaXNTdGFydCkKKyAgICAgICAgICAgIHJldHVybiBub2Rl
U3RhcnRPZmZzZXQ7CisgICAgICAgIGNvcHlSYW5nZSA9IFJhbmdlOjpjcmVhdGUocmFuZ2UtPm93
bmVyRG9jdW1lbnQoKSwgJnJhbmdlLT5zdGFydENvbnRhaW5lcigpLCAwLCAmcmFuZ2UtPmVuZENv
bnRhaW5lcigpLCByYW5nZS0+ZW5kT2Zmc2V0KCkpOworICAgICAgICBvZmZzZXQgKz0gbm9kZVN0
YXJ0T2Zmc2V0Lm9mZnNldDsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHRyYXZlcnNlVG9PZmZz
ZXRJblJhbmdlKFdURk1vdmUoY29weVJhbmdlKSwgb2Zmc2V0LCBpc1N0YXJ0ID8gVHJhdmVyc2VP
cHRpb25EZWZhdWx0IDogVHJhdmVyc2VPcHRpb25Ub05vZGVFbmQsIHN0YXlXaXRoaW5SYW5nZSk7
CkBAIC0xOTg0LDcgKzE5NjgsNyBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6Y2hh
cmFjdGVyCiAgICAgQVNTRVJUKGRvbU5vZGUpOwogICAgIAogICAgIGlmIChkb21Ob2RlLT5vZmZz
ZXRJbkNoYXJhY3RlcnMoKSkKLSAgICAgICAgcmV0dXJuIENoYXJhY3Rlck9mZnNldChkb21Ob2Rl
LCAwLCBkZWVwUG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIDApOworICAgICAgICByZXR1
cm4gdHJhdmVyc2VUb09mZnNldEluUmFuZ2UocmFuZ2VGb3JOb2RlQ29udGVudHMoZG9tTm9kZSks
IGRlZXBQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgVHJhdmVyc2VPcHRpb25WYWxpZGF0
ZU9mZnNldCk7CiAgICAgCiAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlPYmplY3Q+IG9iaiA9IHRo
aXMtPmdldE9yQ3JlYXRlKGRvbU5vZGUpOwogICAgIGlmICghb2JqKQpAQCAtMjE4Niw3ICsyMTcw
LDcgQEAgUmVmUHRyPFJhbmdlPiBBWE9iamVjdENhY2hlOjpsZWZ0V29yZFJhbgogCiBSZWZQdHI8
UmFuZ2U+IEFYT2JqZWN0Q2FjaGU6OnJpZ2h0V29yZFJhbmdlKGNvbnN0IENoYXJhY3Rlck9mZnNl
dCYgY2hhcmFjdGVyT2Zmc2V0KQogewotICAgIENoYXJhY3Rlck9mZnNldCBzdGFydCA9IHN0YXJ0
Q2hhcmFjdGVyT2Zmc2V0T2ZXb3JkKGNoYXJhY3Rlck9mZnNldCk7CisgICAgQ2hhcmFjdGVyT2Zm
c2V0IHN0YXJ0ID0gc3RhcnRDaGFyYWN0ZXJPZmZzZXRPZldvcmQoY2hhcmFjdGVyT2Zmc2V0LCBS
aWdodFdvcmRJZk9uQm91bmRhcnkpOwogICAgIENoYXJhY3Rlck9mZnNldCBlbmQgPSBlbmRDaGFy
YWN0ZXJPZmZzZXRPZldvcmQoc3RhcnQpOwogICAgIHJldHVybiByYW5nZUZvclVub3JkZXJlZENo
YXJhY3Rlck9mZnNldHMoc3RhcnQsIGVuZCk7CiB9CkBAIC0yMzE5LDEwICsyMzAzLDE4IEBAIENo
YXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpwcmV2aW91c0IKICAgICAgICAgcmV0dXJuIGl0
LmF0RW5kKCkgPyBzdGFydCA6IGNoYXJhY3Rlck9mZnNldDsKICAgICAKICAgICBOb2RlJiBub2Rl
ID0gaXQuYXRFbmQoKSA/IHNlYXJjaFJhbmdlLT5zdGFydENvbnRhaW5lcigpIDogaXQucmFuZ2Uo
KS0+c3RhcnRDb250YWluZXIoKTsKKyAgICAKKyAgICAvLyBTaW1wbGlmaWVkQmFja3dhcmRzVGV4
dEl0ZXJhdG9yIGlnbm9yZXMgcmVwbGFjZWQgZWxlbWVudHMuCisgICAgaWYgKEFjY2Vzc2liaWxp
dHlPYmplY3Q6OnJlcGxhY2VkTm9kZU5lZWRzQ2hhcmFjdGVyKGNoYXJhY3Rlck9mZnNldC5ub2Rl
KSkKKyAgICAgICAgcmV0dXJuIGNoYXJhY3Rlck9mZnNldEZvck5vZGVBbmRPZmZzZXQoKmNoYXJh
Y3Rlck9mZnNldC5ub2RlLCAwKTsKKyAgICBOb2RlKiBuZXh0U2libGluZyA9IG5vZGUubmV4dFNp
YmxpbmcoKTsKKyAgICBpZiAoJm5vZGUgIT0gY2hhcmFjdGVyT2Zmc2V0Lm5vZGUgJiYgQWNjZXNz
aWJpbGl0eU9iamVjdDo6cmVwbGFjZWROb2RlTmVlZHNDaGFyYWN0ZXIobmV4dFNpYmxpbmcpKQor
ICAgICAgICByZXR1cm4gc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHJhbmdlRm9y
Tm9kZUNvbnRlbnRzKG5leHRTaWJsaW5nKSwgZmFsc2UpOworICAgIAogICAgIGlmICgobm9kZS5p
c1RleHROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8aW50PihuZXh0KSA8PSBub2RlLm1heENoYXJhY3Rl
ck9mZnNldCgpKSB8fCAobm9kZS5yZW5kZXJlcigpICYmIG5vZGUucmVuZGVyZXIoKS0+aXNCUigp
ICYmICFuZXh0KSkgewogICAgICAgICAvLyBUaGUgbmV4dCB2YXJpYWJsZSBjb250YWlucyBhIHVz
YWJsZSBpbmRleCBpbnRvIGEgdGV4dCBub2RlCi0gICAgICAgIGlmICgmbm9kZSA9PSBjaGFyYWN0
ZXJPZmZzZXQubm9kZSkKLSAgICAgICAgICAgIG5leHQgLT0gY2hhcmFjdGVyT2Zmc2V0LnN0YXJ0
SW5kZXg7CisgICAgICAgIGlmIChub2RlLmlzVGV4dE5vZGUoKSkKKyAgICAgICAgICAgIHJldHVy
biB0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShyYW5nZUZvck5vZGVDb250ZW50cygmbm9kZSksIG5l
eHQsIFRyYXZlcnNlT3B0aW9uVmFsaWRhdGVPZmZzZXQpOwogICAgICAgICByZXR1cm4gY2hhcmFj
dGVyT2Zmc2V0Rm9yTm9kZUFuZE9mZnNldChub2RlLCBuZXh0LCBUcmF2ZXJzZU9wdGlvbkluY2x1
ZGVTdGFydCk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmgJKHJldmlzaW9uIDIwMzMzOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDgsNyAr
MzQ4LDcgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgaXNOb2RlSW5Vc2UoTm9kZSogbikgeyByZXR1
cm4gbV90ZXh0TWFya2VyTm9kZXMuY29udGFpbnMobik7IH0KICAgICAKICAgICAvLyBDaGFyYWN0
ZXJPZmZzZXQgZnVuY3Rpb25zLgotICAgIGVudW0gVHJhdmVyc2VPcHRpb24geyBUcmF2ZXJzZU9w
dGlvbkRlZmF1bHQgPSAxIDw8IDAsIFRyYXZlcnNlT3B0aW9uVG9Ob2RlRW5kID0gMSA8PCAxLCBU
cmF2ZXJzZU9wdGlvbkluY2x1ZGVTdGFydCA9IDEgPDwgMiB9OworICAgIGVudW0gVHJhdmVyc2VP
cHRpb24geyBUcmF2ZXJzZU9wdGlvbkRlZmF1bHQgPSAxIDw8IDAsIFRyYXZlcnNlT3B0aW9uVG9O
b2RlRW5kID0gMSA8PCAxLCBUcmF2ZXJzZU9wdGlvbkluY2x1ZGVTdGFydCA9IDEgPDwgMiwgVHJh
dmVyc2VPcHRpb25WYWxpZGF0ZU9mZnNldCA9IDEgPDwgMyB9OwogICAgIE5vZGUqIG5leHROb2Rl
KE5vZGUqKSBjb25zdDsKICAgICBOb2RlKiBwcmV2aW91c05vZGUoTm9kZSopIGNvbnN0OwogICAg
IENoYXJhY3Rlck9mZnNldCB0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShSZWZQdHI8UmFuZ2U+LCBp
bnQsIFRyYXZlcnNlT3B0aW9uID0gVHJhdmVyc2VPcHRpb25EZWZhdWx0LCBib29sIHN0YXlXaXRo
aW5SYW5nZSA9IGZhbHNlKTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzMzOCkKKysrIExheW91dFRl
c3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE2LTA3LTE5
ICBOYW4gV2FuZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEluY29ycmVjdCBi
ZWhhdmlvciBmb3Igd29yZCByZWxhdGVkIHRleHQgbWFya2VyIGZ1bmN0aW9ucyB3aGVuIHRoZXJl
J3MgY29sbGFwc2VkIHdoaXRlc3BhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1OTkxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXItd29yZC1uYXYt
Y29sbGFwc2VkLXdoaXRlc3BhY2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L21hYy90ZXh0LW1hcmtlci13b3JkLW5hdi1jb2xsYXBzZWQtd2hpdGVzcGFjZS5o
dG1sOiBBZGRlZC4KKwogMjAxNi0wNy0xNyAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5j
b20+CiAKICAgICAgICAgVXBkYXRlIERPTUNvcmVFeGNlcHRpb24gdG8gdXNlIHRoZSBkZXNjcmlw
dGlvbiBpbiB0b1N0cmluZygpLgpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMv
dGV4dC1tYXJrZXItd29yZC1uYXYtY29sbGFwc2VkLXdoaXRlc3BhY2UtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtbWFya2VyLXdv
cmQtbmF2LWNvbGxhcHNlZC13aGl0ZXNwYWNlLWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQpCisr
KyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LW1hcmtlci13b3JkLW5hdi1jb2xs
YXBzZWQtd2hpdGVzcGFjZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
MCBAQAorVGVzdDEgVGVzdDIgVGVzdDMKK1RoaXMgdGVzdHMgdGhhdCB3b3JkIG5hdmlnYXRpb24g
aXMgd29ya2luZyBjb3JyZWN0bHkgd2l0aCBjb2xsYXBzZWQgd2hpdGVzcGFjZXMuCisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitDdXJyZW50IGNoYXJhY3RlciBpczogMQorTGVmdCB3
b3JkIGlzOiBUZXN0MQorUmlnaHQgd29yZCBpczogIAorUHJlIHdvcmQgc3RhcnQgdG8gbmV4dCB3
b3JkIGVuZDogVGVzdDEgCisKK0N1cnJlbnQgY2hhcmFjdGVyIGlzOiAgCitMZWZ0IHdvcmQgaXM6
ICAKK1JpZ2h0IHdvcmQgaXM6IFRlc3QyCitQcmUgd29yZCBzdGFydCB0byBuZXh0IHdvcmQgZW5k
OiAgVGVzdDIKKworQ3VycmVudCBjaGFyYWN0ZXIgaXM6IDIKK0xlZnQgd29yZCBpczogVGVzdDIK
K1JpZ2h0IHdvcmQgaXM6ICAKK1ByZSB3b3JkIHN0YXJ0IHRvIG5leHQgd29yZCBlbmQ6IFRlc3Qy
IAorCitDdXJyZW50IGNoYXJhY3RlciBpczogIAorTGVmdCB3b3JkIGlzOiAgCitSaWdodCB3b3Jk
IGlzOiBUZXN0MworUHJlIHdvcmQgc3RhcnQgdG8gbmV4dCB3b3JkIGVuZDogIFRlc3QzCisKK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBM
YXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LW1hcmtlci13b3JkLW5hdi1jb2xsYXBz
ZWQtd2hpdGVzcGFjZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxp
dHkvbWFjL3RleHQtbWFya2VyLXdvcmQtbmF2LWNvbGxhcHNlZC13aGl0ZXNwYWNlLmh0bWwJKG5v
bmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXIt
d29yZC1uYXYtY29sbGFwc2VkLXdoaXRlc3BhY2UuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDgxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+
Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgY2hhcnNldD0idXRmLTgiPiAKKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkg
aWQ9ImJvZHkiPgorCis8ZGl2IGlkPSJ0ZXh0Ij4KK1Rlc3QxCisKKworCitUZXN0MiAgIFRlc3Qz
Cis8L2Rpdj4KKworPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48
L2Rpdj4KKworPHNjcmlwdD4KKworICAgIGRlc2NyaXB0aW9uKCJUaGlzIHRlc3RzIHRoYXQgd29y
ZCBuYXZpZ2F0aW9uIGlzIHdvcmtpbmcgY29ycmVjdGx5IHdpdGggY29sbGFwc2VkIHdoaXRlc3Bh
Y2VzLiIpOworICAgIAorICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsK
KyAgICAgICAgCisgICAgICAgIHZhciB0ZXh0ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNj
ZXNzaWJsZUVsZW1lbnRCeUlkKCJ0ZXh0Iik7CisgICAgICAgIC8vIEdldCB0aGUgYWN0dWFsIHRl
eHQgbm9kZS4KKyAgICAgICAgdGV4dCA9IHRleHQuY2hpbGRBdEluZGV4KDApOworICAgICAgICAK
KyAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBjYW4gZ2V0IHRoZSBzZWNvbmQgd29yZCAiVGVzdDIi
CisgICAgICAgIHZhciB0ZXh0TWFya2VyUmFuZ2UgPSB0ZXh0LnRleHRNYXJrZXJSYW5nZUZvckVs
ZW1lbnQodGV4dCk7CisgICAgICAgIHZhciBzdGFydE1hcmtlciA9IHRleHQuc3RhcnRUZXh0TWFy
a2VyRm9yVGV4dE1hcmtlclJhbmdlKHRleHRNYXJrZXJSYW5nZSk7CisgICAgICAgIHZhciBjdXJy
ZW50TWFya2VyID0gYWR2YW5jZUFuZFZlcmlmeShzdGFydE1hcmtlciwgNSwgdGV4dCk7CisgICAg
ICAgIGN1cnJlbnRNYXJrZXIgPSBhZHZhbmNlQW5kVmVyaWZ5KGN1cnJlbnRNYXJrZXIsIDEsIHRl
eHQpOworICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBjYW4gZ2V0IHRoZSB0aGly
ZCB3b3JkICJUZXN0MyIKKyAgICAgICAgY3VycmVudE1hcmtlciA9IGFkdmFuY2VBbmRWZXJpZnko
Y3VycmVudE1hcmtlciwgNSwgdGV4dCk7CisgICAgICAgIGN1cnJlbnRNYXJrZXIgPSBhZHZhbmNl
QW5kVmVyaWZ5KGN1cnJlbnRNYXJrZXIsIDEsIHRleHQpOworICAgICAgICAKKyAgICAgICAgZnVu
Y3Rpb24gYWR2YW5jZUFuZFZlcmlmeShjdXJyZW50TWFya2VyLCBvZmZzZXQsIG9iaikgeworICAg
ICAgICAgICAgdmFyIHByZXZpb3VzTWFya2VyID0gY3VycmVudE1hcmtlcjsKKyAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgb2Zmc2V0OyBpKyspIHsKKyAgICAgICAgICAgICAgICBwcmV2
aW91c01hcmtlciA9IGN1cnJlbnRNYXJrZXI7CisgICAgICAgICAgICAgICAgY3VycmVudE1hcmtl
ciA9IG9iai5uZXh0VGV4dE1hcmtlcihwcmV2aW91c01hcmtlcik7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB2ZXJpZnlXb3JkUmFuZ2VGb3JUZXh0TWFya2VyKHByZXZpb3VzTWFya2VyLCBj
dXJyZW50TWFya2VyLCBvYmopOworICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRNYXJrZXI7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZ1bmN0aW9uIHJlcGxhY2VBdHRhY2htZW50SW5T
dHJpbmcoc3RyKSB7CisgICAgICAgICAgICB2YXIgbmV3bGluZSA9ICdcbic7CisgICAgICAgICAg
ICBzdHIgPSAgc3RyLnJlcGxhY2UoU3RyaW5nLmZyb21DaGFyQ29kZSg2NTUzMiksICJbQVRUQUNI
TUVOVF0iKTsKKyAgICAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKG5ld2xpbmUsICInbGluZSBi
cmVhayciKTsKKyAgICAgICAgICAgIHJldHVybiBzdHI7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGZ1bmN0aW9uIHZlcmlmeVdvcmRSYW5nZUZvclRleHRNYXJrZXIocHJlTWFya2VyLCB0
ZXh0TWFya2VyLCBvYmopIHsKKyAgICAgICAgICAgIHZhciBtYXJrZXJSYW5nZSA9IG9iai50ZXh0
TWFya2VyUmFuZ2VGb3JNYXJrZXJzKHByZU1hcmtlciwgdGV4dE1hcmtlcik7CisgICAgICAgICAg
ICB2YXIgY3VycmVudENoYXJhY3RlciA9IG9iai5zdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UobWFy
a2VyUmFuZ2UpOworICAgICAgICAgICAgZGVidWcoIkN1cnJlbnQgY2hhcmFjdGVyIGlzOiAiICsg
Y3VycmVudENoYXJhY3Rlcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHZhciBwcmV2aW91
c1dvcmRSYW5nZSA9IG9iai5sZWZ0V29yZFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIodGV4
dE1hcmtlcik7CisgICAgICAgICAgICB2YXIgbmV4dFdvcmRSYW5nZSA9IG9iai5yaWdodFdvcmRU
ZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyKHRleHRNYXJrZXIpOworICAgICAgICAgICAgdmFy
IHByZVdvcmQgPSBvYmouc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKHByZXZpb3VzV29yZFJhbmdl
KTsKKyAgICAgICAgICAgIHZhciBuZXh0V29yZCA9IG9iai5zdHJpbmdGb3JUZXh0TWFya2VyUmFu
Z2UobmV4dFdvcmRSYW5nZSk7CisgICAgICAgICAgICBkZWJ1ZygiTGVmdCB3b3JkIGlzOiAiICsg
cHJlV29yZCk7CisgICAgICAgICAgICBkZWJ1ZygiUmlnaHQgd29yZCBpczogIiArIG5leHRXb3Jk
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdmFyIHByZVdvcmRTdGFydCA9IG9iai5wcmV2
aW91c1dvcmRTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKHRleHRNYXJrZXIpOworICAgICAg
ICAgICAgdmFyIG5leHRXb3JkRW5kID0gb2JqLm5leHRXb3JkRW5kVGV4dE1hcmtlckZvclRleHRN
YXJrZXIodGV4dE1hcmtlcik7CisgICAgICAgICAgICB2YXIgcHJlQW5kTmV4dFdvcmRSYW5nZSA9
IG9iai50ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJzKHByZVdvcmRTdGFydCwgbmV4dFdvcmRFbmQp
OworICAgICAgICAgICAgdmFyIHByZUFuZE5leHRXb3JkID0gb2JqLnN0cmluZ0ZvclRleHRNYXJr
ZXJSYW5nZShwcmVBbmROZXh0V29yZFJhbmdlKTsKKyAgICAgICAgICAgIGRlYnVnKCJQcmUgd29y
ZCBzdGFydCB0byBuZXh0IHdvcmQgZW5kOiAiICsgcHJlQW5kTmV4dFdvcmQgKyAiXG4iKTsKKyAg
ICAgICAgfQorICAgIH0KKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284018</attachid>
            <date>2016-07-19 10:31:24 -0700</date>
            <delta_ts>2016-07-19 11:14:58 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>16335</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwMzQwNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE2LTA3LTE5ICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEluY29ycmVjdCBiZWhhdmlvciBm
b3Igd29yZCByZWxhdGVkIHRleHQgbWFya2VyIGZ1bmN0aW9ucyB3aGVuIHRoZXJlJ3MgY29sbGFw
c2VkIHdoaXRlc3BhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1OTkxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFdlIGFyZSBnZXR0aW5nIGEgYmFkIENoYXJhY3Rlck9mZnNldCB3aGVuIHRoZXJlJ3Mg
Y29sbGFwc2VkIHdoaXRlc3BhY2UuIEFkZGVkIGEgVHJhdmVyc2VPcHRpb25WYWxpZGF0ZU9mZnNl
dAorICAgICAgICBvcHRpb24gdG8gbWFrZSBzdXJlIHdlIGFyZSBnZXR0aW5nIHRoZSBjb3JyZWN0
IENoYXJhY3Rlck9mZnNldCBiYXNlZCBvbiB0aGUgY29ycmVzcG9uZGluZyBSYW5nZSBvZmZzZXQu
IEFuZAorICAgICAgICBmaXhlZCBhIHdvcmQgbmF2aWdhdGlvbiBpc3N1ZSBiYXNlZCBvbiB0aGF0
LgorCisgICAgICAgIFRlc3Q6IGFjY2Vzc2liaWxpdHkvbWFjL3RleHQtbWFya2VyLXdvcmQtbmF2
LWNvbGxhcHNlZC13aGl0ZXNwYWNlLmh0bWwKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjp0cmF2ZXJz
ZVRvT2Zmc2V0SW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpyYW5n
ZUZvck5vZGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpzdGFy
dE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmpl
Y3RDYWNoZTo6Y2hhcmFjdGVyT2Zmc2V0RnJvbVZpc2libGVQb3NpdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpBWE9iamVjdENhY2hlOjpyaWdodFdvcmRSYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBWE9iamVjdENhY2hlOjpwcmV2aW91c0JvdW5kYXJ5KToKKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L0FYT2JqZWN0Q2FjaGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6Omlz
Tm9kZUluVXNlKToKKwogMjAxNi0wNy0xOSAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29t
PgogCiAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNzQyMDMwOD4gV2ViQ29yZS03NjAyLjEuNDIg
ZmFpbHMgdG8gYnVpbGQ6IGVycm9yOiB1bnVzZWQgcGFyYW1ldGVyICd2bScKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAkocmV2aXNpb24g
MjAzMzM4KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTUwMyw2ICsxNTAzLDcgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFY
T2JqZWN0Q2FjaGU6OnRyYXZlcnNlVAogICAgICAgICByZXR1cm4gQ2hhcmFjdGVyT2Zmc2V0KCk7
CiAgICAgCiAgICAgYm9vbCB0b05vZGVFbmQgPSBvcHRpb24gJiBUcmF2ZXJzZU9wdGlvblRvTm9k
ZUVuZDsKKyAgICBib29sIHZhbGlkYXRlT2Zmc2V0ID0gb3B0aW9uICYgVHJhdmVyc2VPcHRpb25W
YWxpZGF0ZU9mZnNldDsKICAgICAKICAgICBpbnQgb2Zmc2V0SW5DaGFyYWN0ZXIgPSAwOwogICAg
IGludCBjdW11bGF0aXZlT2Zmc2V0ID0gMDsKQEAgLTE1MzYsOSArMTUzNyw2IEBAIENoYXJhY3Rl
ck9mZnNldCBBWE9iamVjdENhY2hlOjp0cmF2ZXJzZVQKICAgICAvLyBTb21ldGltZXMgdGV4dCBj
b250ZW50cyBpbiBhIG5vZGUgYXJlIHNwbGl0dGVkIGludG8gc2V2ZXJhbCBpdGVyYXRpb25zLCBz
byB0aGF0IGl0ZXJhdG9yLnJhbmdlKCktPnN0YXJ0T2Zmc2V0KCkKICAgICAvLyBtaWdodCBub3Qg
YmUgdGhlIGNvcnJlY3QgY2hhcmFjdGVyIGNvdW50LiBIZXJlIHdlIHVzZSBhIHByZXZpb3VzTm9k
ZSBvYmplY3QgdG8ga2VlcCB0cmFjayBvZiB0aGF0LgogICAgIE5vZGUqIHByZXZpb3VzTm9kZSA9
IG51bGxwdHI7Ci0gICAgLy8gV2hlbiB0ZXh0IG5vZGUgaGFzIGNvbGxhcHNlZCB3aGl0ZXNwYWNl
cywgd2UgbmVlZCB0byB0cmVhdCBpdCBkaWZmZXJlbnRseSBzaW5jZSB0ZXh0IGl0ZXJhdG9yCi0g
ICAgLy8gd2lsbCBvbWl0IHRoZSBjb2xsYXBzZWQgc3BhY2VzIGFuZCBtYWtlIHRoZSBvZmZzZXQg
aW5hY2N1cmF0ZS4KLSAgICBOb2RlKiBjb2xsYXBzZWRXaGl0ZXNwYWNlTm9kZSA9IG51bGxwdHI7
CiAgICAgZm9yICg7ICFpdGVyYXRvci5hdEVuZCgpOyBpdGVyYXRvci5hZHZhbmNlKCkpIHsKICAg
ICAgICAgaW50IGN1cnJlbnRMZW5ndGggPSBpdGVyYXRvci50ZXh0KCkubGVuZ3RoKCk7CiAgICAg
ICAgIGJvb2wgaGFzUmVwbGFjZWROb2RlT3JCUiA9IGZhbHNlOwpAQCAtMTU0NiwxMCArMTU0NCw2
IEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjp0cmF2ZXJzZVQKICAgICAgICAgTm9k
ZSYgbm9kZSA9IGl0ZXJhdG9yLnJhbmdlKCktPnN0YXJ0Q29udGFpbmVyKCk7CiAgICAgICAgIGN1
cnJlbnROb2RlID0gJm5vZGU7CiAgICAgICAgIAotICAgICAgICAvLyBUaGUgb2Zmc2V0IG9mIG5v
ZGUgd2l0aCBjb2xsYXBzZWQgd2hpdGVzcGFjZXMgaGFzIGJlZW4gY2FsY3VhbHRlZCBpbiB0aGUg
Zmlyc3QgaXRlcmF0aW9uLgotICAgICAgICBpZiAoY3VycmVudE5vZGUgPT0gY29sbGFwc2VkV2hp
dGVzcGFjZU5vZGUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCiAgICAgICAgIC8v
IFdoZW4gY3VycmVudExlbmd0aCA9PSAwLCB3ZSBjaGVjayBpZiB0aGVyZSdzIGFueSByZXBsYWNl
ZCBub2RlLgogICAgICAgICAvLyBJZiBub3QsIHdlIHNraXAgdGhlIG5vZGUgd2l0aCBubyBsZW5n
dGguCiAgICAgICAgIGlmICghY3VycmVudExlbmd0aCkgewpAQCAtMTU3OSw0MiArMTU3MywyMyBA
QCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6dHJhdmVyc2VUCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudE5vZGUtPmlzVGV4dE5vZGUoKSAm
JiBjdXJyZW50Tm9kZS0+cmVuZGVyZXIoKSkgewotICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhl
cmUncyBjb2xsYXBzZWQgd2hpdGVzcGFjZSwgdGhlIHRleHQgaXRlcmF0b3Igd2lsbCBvbmx5IGNv
dW50IHRob3NlIHNwYWNlcyBhcyBvbmUgc2luZ2xlIHNwYWNlLgotICAgICAgICAgICAgICAgIC8v
IEhlcmUgd2UgdXNlIHRoZSBSZW5kZXJUZXh0IHRvIGdldCB0aGUgYWN0dWFsIGxlbmd0aC4KLSAg
ICAgICAgICAgICAgICBSZW5kZXJUZXh0KiByZW5kZXJlZFRleHQgPSBkb3duY2FzdDxSZW5kZXJU
ZXh0PihjdXJyZW50Tm9kZS0+cmVuZGVyZXIoKSk7Ci0gICAgICAgICAgICAgICAgaW50IGN1cnJl
bnRTdGFydE9mZnNldCA9IGl0ZXJhdG9yLnJhbmdlKCktPnN0YXJ0T2Zmc2V0KCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHJlbmRlcmVkVGV4dC0+c3R5bGUoKS5pc0NvbGxhcHNpYmxlV2hpdGVTcGFj
ZShpdGVyYXRvci50ZXh0KClbY3VycmVudExlbmd0aCAtIDFdKSAgJiYgY3VycmVudExlbmd0aCAr
IGN1cnJlbnRTdGFydE9mZnNldCAhPSByZW5kZXJlZFRleHQtPmNhcmV0TWF4T2Zmc2V0KCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgaW50IGFwcGVuZExlbmd0aCA9ICgmcmFuZ2UtPmVuZENvbnRh
aW5lcigpID09IGN1cnJlbnROb2RlID8gcmFuZ2UtPmVuZE9mZnNldCgpIDogKGludClyZW5kZXJl
ZFRleHQtPnRleHQoKS0+bGVuZ3RoKCkpIC0gY3VycmVudFN0YXJ0T2Zmc2V0OwotICAgICAgICAg
ICAgICAgICAgICBsYXN0U3RhcnRPZmZzZXQgPSBjdXJyZW50U3RhcnRPZmZzZXQ7Ci0gICAgICAg
ICAgICAgICAgICAgIGN1bXVsYXRpdmVPZmZzZXQgKz0gYXBwZW5kTGVuZ3RoOwotICAgICAgICAg
ICAgICAgICAgICBsYXN0TGVuZ3RoID0gYXBwZW5kTGVuZ3RoOwotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgLy8gQnJlYWsgZWFybHkgaWYgd2UgaGF2ZSBhZHZhbmNl
ZCBlbm91Z2ggY2hhcmFjdGVycy4KLSAgICAgICAgICAgICAgICAgICAgaWYgKCF0b05vZGVFbmQg
JiYgY3VtdWxhdGl2ZU9mZnNldCA+PSBvZmZzZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG9mZnNldEluQ2hhcmFjdGVyID0gb2Zmc2V0IC0gKGN1bXVsYXRpdmVPZmZzZXQgLSBsYXN0TGVu
Z3RoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZWRXaGl0ZXNwYWNlTm9kZSA9
IGN1cnJlbnROb2RlOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjdW11
bGF0aXZlT2Zmc2V0ICs9IGN1cnJlbnRMZW5ndGg7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
Y3VycmVudE5vZGUgPT0gcHJldmlvdXNOb2RlKQorICAgICAgICBpZiAoY3VycmVudE5vZGUgPT0g
cHJldmlvdXNOb2RlKSB7CiAgICAgICAgICAgICBsYXN0TGVuZ3RoICs9IGN1cnJlbnRMZW5ndGg7
CisgICAgICAgICAgICBsYXN0U3RhcnRPZmZzZXQgPSBpdGVyYXRvci5yYW5nZSgpLT5lbmRPZmZz
ZXQoKSAtIGxhc3RMZW5ndGg7CisgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICBsYXN0TGVuZ3RoID0gY3VycmVudExlbmd0aDsKICAgICAgICAgICAgIGxhc3RTdGFydE9mZnNl
dCA9IGhhc1JlcGxhY2VkTm9kZU9yQlIgPyAwIDogaXRlcmF0b3IucmFuZ2UoKS0+c3RhcnRPZmZz
ZXQoKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gQnJlYWsgZWFybHkgaWYgd2Ug
aGF2ZSBhZHZhbmNlZCBlbm91Z2ggY2hhcmFjdGVycy4KLSAgICAgICAgaWYgKCF0b05vZGVFbmQg
JiYgY3VtdWxhdGl2ZU9mZnNldCA+PSBvZmZzZXQpIHsKLSAgICAgICAgICAgIG9mZnNldEluQ2hh
cmFjdGVyID0gb2Zmc2V0IC0gKGN1bXVsYXRpdmVPZmZzZXQgLSBsYXN0TGVuZ3RoKTsKKyAgICAg
ICAgYm9vbCBvZmZzZXRMaW1pdFJlYWNoZWQgPSB2YWxpZGF0ZU9mZnNldCA/IGN1bXVsYXRpdmVP
ZmZzZXQgKyBsYXN0U3RhcnRPZmZzZXQgPj0gb2Zmc2V0IDogY3VtdWxhdGl2ZU9mZnNldCA+PSBv
ZmZzZXQ7CisgICAgICAgIGlmICghdG9Ob2RlRW5kICYmIG9mZnNldExpbWl0UmVhY2hlZCkgewor
ICAgICAgICAgICAgb2Zmc2V0SW5DaGFyYWN0ZXIgPSB2YWxpZGF0ZU9mZnNldCA/IHN0ZDo6bWF4
KG9mZnNldCAtIGxhc3RTdGFydE9mZnNldCwgMCkgOiBvZmZzZXQgLSAoY3VtdWxhdGl2ZU9mZnNl
dCAtIGxhc3RMZW5ndGgpOwogICAgICAgICAgICAgZmluaXNoZWQgPSB0cnVlOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTE2NjcsNyArMTY0MiwxMSBAQCBSZWZQdHI8UmFuZ2U+
IEFYT2JqZWN0Q2FjaGU6OnJhbmdlRm9yTm9kCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpkb2N1bWVudCk7CiAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cygqbm9kZSwg
ZWMpOworICAgIC8vIEZvciByZXBsYWNlZCBub2RlIHdpdGhvdXQgY2hpbGRyZW4sIHdlIHNob3Vs
ZCBpbmNsdWNlIGl0c2VsZiBpbiB0aGUgcmFuZ2UuCisgICAgaWYgKEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6OnJlcGxhY2VkTm9kZU5lZWRzQ2hhcmFjdGVyKG5vZGUpKQorICAgICAgICByYW5nZS0+c2Vs
ZWN0Tm9kZSgqbm9kZSwgZWMpOworICAgIGVsc2UKKyAgICAgICAgcmFuZ2UtPnNlbGVjdE5vZGVD
b250ZW50cygqbm9kZSwgZWMpOwogICAgIHJldHVybiBlYyA/IG51bGxwdHIgOiByYW5nZTsKIH0K
ICAgICAKQEAgLTE4MTEsMTUgKzE3OTAsMjAgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2Fj
aGU6OnN0YXJ0T3JFbgogICAgIC8vIElmIGl0J3MgZW5kIHRleHQgbWFya2VyLCB3ZSB3YW50IHRv
IGdvIHRvIHRoZSBlbmQgb2YgdGhlIHJhbmdlLCBhbmQgc3RheSB3aXRoaW4gdGhlIHJhbmdlLgog
ICAgIGJvb2wgc3RheVdpdGhpblJhbmdlID0gIWlzU3RhcnQ7CiAgICAgCisgICAgTm9kZSYgZW5k
Tm9kZSA9IHJhbmdlLT5lbmRDb250YWluZXIoKTsKKyAgICBpZiAoZW5kTm9kZS5vZmZzZXRJbkNo
YXJhY3RlcnMoKSAmJiAhaXNTdGFydCkKKyAgICAgICAgcmV0dXJuIHRyYXZlcnNlVG9PZmZzZXRJ
blJhbmdlKHJhbmdlRm9yTm9kZUNvbnRlbnRzKCZlbmROb2RlKSwgcmFuZ2UtPmVuZE9mZnNldCgp
LCBUcmF2ZXJzZU9wdGlvblZhbGlkYXRlT2Zmc2V0KTsKKyAgICAKICAgICBSZWY8UmFuZ2U+IGNv
cHlSYW5nZSA9ICpyYW5nZTsKICAgICAvLyBDaGFuZ2UgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSwg
c28gdGhlIGNoYXJhY3RlciBvZmZzZXQgc3RhcnRzIGZyb20gbm9kZSBiZWdpbm5pbmcuCiAgICAg
aW50IG9mZnNldCA9IDA7CiAgICAgTm9kZSYgbm9kZSA9IGNvcHlSYW5nZS0+c3RhcnRDb250YWlu
ZXIoKTsKICAgICBpZiAobm9kZS5vZmZzZXRJbkNoYXJhY3RlcnMoKSkgewotICAgICAgICBjb3B5
UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHJhbmdlLT5vd25lckRvY3VtZW50KCksICZyYW5nZS0+c3Rh
cnRDb250YWluZXIoKSwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCksICZyYW5nZS0+ZW5kQ29udGFpbmVy
KCksIHJhbmdlLT5lbmRPZmZzZXQoKSk7Ci0gICAgICAgIENoYXJhY3Rlck9mZnNldCBub2RlU3Rh
cnRPZmZzZXQgPSB0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShyYW5nZUZvck5vZGVDb250ZW50cygm
bm9kZSksIDApOwotICAgICAgICBvZmZzZXQgPSBzdGQ6Om1heChjb3B5UmFuZ2UtPnN0YXJ0T2Zm
c2V0KCkgLSBub2RlU3RhcnRPZmZzZXQuc3RhcnRJbmRleCwgMCk7Ci0gICAgICAgIGNvcHlSYW5n
ZS0+c2V0U3RhcnQobm9kZSwgbm9kZVN0YXJ0T2Zmc2V0LnN0YXJ0SW5kZXgpOworICAgICAgICBD
aGFyYWN0ZXJPZmZzZXQgbm9kZVN0YXJ0T2Zmc2V0ID0gdHJhdmVyc2VUb09mZnNldEluUmFuZ2Uo
cmFuZ2VGb3JOb2RlQ29udGVudHMoJm5vZGUpLCByYW5nZS0+c3RhcnRPZmZzZXQoKSwgVHJhdmVy
c2VPcHRpb25WYWxpZGF0ZU9mZnNldCk7CisgICAgICAgIGlmIChpc1N0YXJ0KQorICAgICAgICAg
ICAgcmV0dXJuIG5vZGVTdGFydE9mZnNldDsKKyAgICAgICAgY29weVJhbmdlID0gUmFuZ2U6OmNy
ZWF0ZShyYW5nZS0+b3duZXJEb2N1bWVudCgpLCAmcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIDAs
ICZyYW5nZS0+ZW5kQ29udGFpbmVyKCksIHJhbmdlLT5lbmRPZmZzZXQoKSk7CisgICAgICAgIG9m
ZnNldCArPSBub2RlU3RhcnRPZmZzZXQub2Zmc2V0OwogICAgIH0KICAgICAKICAgICByZXR1cm4g
dHJhdmVyc2VUb09mZnNldEluUmFuZ2UoV1RGTW92ZShjb3B5UmFuZ2UpLCBvZmZzZXQsIGlzU3Rh
cnQgPyBUcmF2ZXJzZU9wdGlvbkRlZmF1bHQgOiBUcmF2ZXJzZU9wdGlvblRvTm9kZUVuZCwgc3Rh
eVdpdGhpblJhbmdlKTsKQEAgLTE5ODQsNyArMTk2OCw3IEBAIENoYXJhY3Rlck9mZnNldCBBWE9i
amVjdENhY2hlOjpjaGFyYWN0ZXIKICAgICBBU1NFUlQoZG9tTm9kZSk7CiAgICAgCiAgICAgaWYg
KGRvbU5vZGUtPm9mZnNldEluQ2hhcmFjdGVycygpKQotICAgICAgICByZXR1cm4gQ2hhcmFjdGVy
T2Zmc2V0KGRvbU5vZGUsIDAsIGRlZXBQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgMCk7
CisgICAgICAgIHJldHVybiB0cmF2ZXJzZVRvT2Zmc2V0SW5SYW5nZShyYW5nZUZvck5vZGVDb250
ZW50cyhkb21Ob2RlKSwgZGVlcFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpLCBUcmF2ZXJz
ZU9wdGlvblZhbGlkYXRlT2Zmc2V0KTsKICAgICAKICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eU9i
amVjdD4gb2JqID0gdGhpcy0+Z2V0T3JDcmVhdGUoZG9tTm9kZSk7CiAgICAgaWYgKCFvYmopCkBA
IC0yMTg2LDcgKzIxNzAsNyBAQCBSZWZQdHI8UmFuZ2U+IEFYT2JqZWN0Q2FjaGU6OmxlZnRXb3Jk
UmFuCiAKIFJlZlB0cjxSYW5nZT4gQVhPYmplY3RDYWNoZTo6cmlnaHRXb3JkUmFuZ2UoY29uc3Qg
Q2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQpCiB7Ci0gICAgQ2hhcmFjdGVyT2Zmc2V0
IHN0YXJ0ID0gc3RhcnRDaGFyYWN0ZXJPZmZzZXRPZldvcmQoY2hhcmFjdGVyT2Zmc2V0KTsKKyAg
ICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnQgPSBzdGFydENoYXJhY3Rlck9mZnNldE9mV29yZChjaGFy
YWN0ZXJPZmZzZXQsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSk7CiAgICAgQ2hhcmFjdGVyT2Zmc2V0
IGVuZCA9IGVuZENoYXJhY3Rlck9mZnNldE9mV29yZChzdGFydCk7CiAgICAgcmV0dXJuIHJhbmdl
Rm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhzdGFydCwgZW5kKTsKIH0KQEAgLTIzMTksMTAg
KzIzMDMsMTggQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnByZXZpb3VzQgogICAg
ICAgICByZXR1cm4gaXQuYXRFbmQoKSA/IHN0YXJ0IDogY2hhcmFjdGVyT2Zmc2V0OwogICAgIAog
ICAgIE5vZGUmIG5vZGUgPSBpdC5hdEVuZCgpID8gc2VhcmNoUmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KCkgOiBpdC5yYW5nZSgpLT5zdGFydENvbnRhaW5lcigpOworICAgIAorICAgIC8vIFNpbXBsaWZp
ZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IgaWdub3JlcyByZXBsYWNlZCBlbGVtZW50cy4KKyAgICBp
ZiAoQWNjZXNzaWJpbGl0eU9iamVjdDo6cmVwbGFjZWROb2RlTmVlZHNDaGFyYWN0ZXIoY2hhcmFj
dGVyT2Zmc2V0Lm5vZGUpKQorICAgICAgICByZXR1cm4gY2hhcmFjdGVyT2Zmc2V0Rm9yTm9kZUFu
ZE9mZnNldCgqY2hhcmFjdGVyT2Zmc2V0Lm5vZGUsIDApOworICAgIE5vZGUqIG5leHRTaWJsaW5n
ID0gbm9kZS5uZXh0U2libGluZygpOworICAgIGlmICgmbm9kZSAhPSBjaGFyYWN0ZXJPZmZzZXQu
bm9kZSAmJiBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpyZXBsYWNlZE5vZGVOZWVkc0NoYXJhY3Rlcihu
ZXh0U2libGluZykpCisgICAgICAgIHJldHVybiBzdGFydE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9y
UmFuZ2UocmFuZ2VGb3JOb2RlQ29udGVudHMobmV4dFNpYmxpbmcpLCBmYWxzZSk7CisgICAgCiAg
ICAgaWYgKChub2RlLmlzVGV4dE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxpbnQ+KG5leHQpIDw9IG5v
ZGUubWF4Q2hhcmFjdGVyT2Zmc2V0KCkpIHx8IChub2RlLnJlbmRlcmVyKCkgJiYgbm9kZS5yZW5k
ZXJlcigpLT5pc0JSKCkgJiYgIW5leHQpKSB7CiAgICAgICAgIC8vIFRoZSBuZXh0IHZhcmlhYmxl
IGNvbnRhaW5zIGEgdXNhYmxlIGluZGV4IGludG8gYSB0ZXh0IG5vZGUKLSAgICAgICAgaWYgKCZu
b2RlID09IGNoYXJhY3Rlck9mZnNldC5ub2RlKQotICAgICAgICAgICAgbmV4dCAtPSBjaGFyYWN0
ZXJPZmZzZXQuc3RhcnRJbmRleDsKKyAgICAgICAgaWYgKG5vZGUuaXNUZXh0Tm9kZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIHRyYXZlcnNlVG9PZmZzZXRJblJhbmdlKHJhbmdlRm9yTm9kZUNvbnRl
bnRzKCZub2RlKSwgbmV4dCwgVHJhdmVyc2VPcHRpb25WYWxpZGF0ZU9mZnNldCk7CiAgICAgICAg
IHJldHVybiBjaGFyYWN0ZXJPZmZzZXRGb3JOb2RlQW5kT2Zmc2V0KG5vZGUsIG5leHQsIFRyYXZl
cnNlT3B0aW9uSW5jbHVkZVN0YXJ0KTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAkocmV2aXNpb24gMjAzMzM4KQorKysg
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM0OCw3ICszNDgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBpc05vZGVJblVzZShO
b2RlKiBuKSB7IHJldHVybiBtX3RleHRNYXJrZXJOb2Rlcy5jb250YWlucyhuKTsgfQogICAgIAog
ICAgIC8vIENoYXJhY3Rlck9mZnNldCBmdW5jdGlvbnMuCi0gICAgZW51bSBUcmF2ZXJzZU9wdGlv
biB7IFRyYXZlcnNlT3B0aW9uRGVmYXVsdCA9IDEgPDwgMCwgVHJhdmVyc2VPcHRpb25Ub05vZGVF
bmQgPSAxIDw8IDEsIFRyYXZlcnNlT3B0aW9uSW5jbHVkZVN0YXJ0ID0gMSA8PCAyIH07CisgICAg
ZW51bSBUcmF2ZXJzZU9wdGlvbiB7IFRyYXZlcnNlT3B0aW9uRGVmYXVsdCA9IDEgPDwgMCwgVHJh
dmVyc2VPcHRpb25Ub05vZGVFbmQgPSAxIDw8IDEsIFRyYXZlcnNlT3B0aW9uSW5jbHVkZVN0YXJ0
ID0gMSA8PCAyLCBUcmF2ZXJzZU9wdGlvblZhbGlkYXRlT2Zmc2V0ID0gMSA8PCAzIH07CiAgICAg
Tm9kZSogbmV4dE5vZGUoTm9kZSopIGNvbnN0OwogICAgIE5vZGUqIHByZXZpb3VzTm9kZShOb2Rl
KikgY29uc3Q7CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IHRyYXZlcnNlVG9PZmZzZXRJblJhbmdlKFJl
ZlB0cjxSYW5nZT4sIGludCwgVHJhdmVyc2VPcHRpb24gPSBUcmF2ZXJzZU9wdGlvbkRlZmF1bHQs
IGJvb2wgc3RheVdpdGhpblJhbmdlID0gZmFsc2UpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzMzM4
KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMTYtMDctMTkgIE5hbiBXYW5nICA8bl93YW5nQGFwcGxlLmNvbT4KKworICAgICAgICBB
WDogSW5jb3JyZWN0IGJlaGF2aW9yIGZvciB3b3JkIHJlbGF0ZWQgdGV4dCBtYXJrZXIgZnVuY3Rp
b25zIHdoZW4gdGhlcmUncyBjb2xsYXBzZWQgd2hpdGVzcGFjZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5OTEwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy90ZXh0LW1h
cmtlci13b3JkLW5hdi1jb2xsYXBzZWQtd2hpdGVzcGFjZS1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL3RleHQtbWFya2VyLXdvcmQtbmF2LWNvbGxhcHNl
ZC13aGl0ZXNwYWNlLmh0bWw6IEFkZGVkLgorCiAyMDE2LTA3LTE3ICBCcmFkeSBFaWRzb24gIDxi
ZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBVcGRhdGUgRE9NQ29yZUV4Y2VwdGlvbiB0byB1
c2UgdGhlIGRlc2NyaXB0aW9uIGluIHRvU3RyaW5nKCkuCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L21hYy90ZXh0LW1hcmtlci13b3JkLW5hdi1jb2xsYXBzZWQtd2hpdGVzcGFjZS1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMv
dGV4dC1tYXJrZXItd29yZC1uYXYtY29sbGFwc2VkLXdoaXRlc3BhY2UtZXhwZWN0ZWQudHh0CShu
b25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtbWFya2Vy
LXdvcmQtbmF2LWNvbGxhcHNlZC13aGl0ZXNwYWNlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDMwIEBACitUZXN0MSBUZXN0MiBUZXN0MworVGhpcyB0ZXN0cyB0aGF0IHdv
cmQgbmF2aWdhdGlvbiBpcyB3b3JraW5nIGNvcnJlY3RseSB3aXRoIGNvbGxhcHNlZCB3aGl0ZXNw
YWNlcy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0N1cnJlbnQgY2hhcmFjdGVy
IGlzOiAxCitMZWZ0IHdvcmQgaXM6IFRlc3QxCitSaWdodCB3b3JkIGlzOiAgCitQcmUgd29yZCBz
dGFydCB0byBuZXh0IHdvcmQgZW5kOiBUZXN0MSAKKworQ3VycmVudCBjaGFyYWN0ZXIgaXM6ICAK
K0xlZnQgd29yZCBpczogIAorUmlnaHQgd29yZCBpczogVGVzdDIKK1ByZSB3b3JkIHN0YXJ0IHRv
IG5leHQgd29yZCBlbmQ6ICBUZXN0MgorCitDdXJyZW50IGNoYXJhY3RlciBpczogMgorTGVmdCB3
b3JkIGlzOiBUZXN0MgorUmlnaHQgd29yZCBpczogIAorUHJlIHdvcmQgc3RhcnQgdG8gbmV4dCB3
b3JkIGVuZDogVGVzdDIgCisKK0N1cnJlbnQgY2hhcmFjdGVyIGlzOiAgCitMZWZ0IHdvcmQgaXM6
ICAKK1JpZ2h0IHdvcmQgaXM6IFRlc3QzCitQcmUgd29yZCBzdGFydCB0byBuZXh0IHdvcmQgZW5k
OiAgVGVzdDMKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtbWFya2VyLXdv
cmQtbmF2LWNvbGxhcHNlZC13aGl0ZXNwYWNlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXItd29yZC1uYXYtY29sbGFwc2VkLXdoaXRl
c3BhY2UuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21h
Yy90ZXh0LW1hcmtlci13b3JkLW5hdi1jb2xsYXBzZWQtd2hpdGVzcGFjZS5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsODEgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8v
RFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+IAor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keSBpZD0iYm9keSI+CisKKzxkaXYgaWQ9InRleHQiPgorVGVzdDEKKworCisK
K1Rlc3QyICAgVGVzdDMKKzwvZGl2PgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorCisgICAgZGVzY3JpcHRpb24oIlRoaXMg
dGVzdHMgdGhhdCB3b3JkIG5hdmlnYXRpb24gaXMgd29ya2luZyBjb3JyZWN0bHkgd2l0aCBjb2xs
YXBzZWQgd2hpdGVzcGFjZXMuIik7CisgICAgCisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcikgeworICAgICAgICAKKyAgICAgICAgdmFyIHRleHQgPSBhY2Nlc3NpYmlsaXR5
Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoInRleHQiKTsKKyAgICAgICAgLy8gR2V0
IHRoZSBhY3R1YWwgdGV4dCBub2RlLgorICAgICAgICB0ZXh0ID0gdGV4dC5jaGlsZEF0SW5kZXgo
MCk7CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGNhbiBnZXQgdGhlIHNlY29u
ZCB3b3JkICJUZXN0MiIKKyAgICAgICAgdmFyIHRleHRNYXJrZXJSYW5nZSA9IHRleHQudGV4dE1h
cmtlclJhbmdlRm9yRWxlbWVudCh0ZXh0KTsKKyAgICAgICAgdmFyIHN0YXJ0TWFya2VyID0gdGV4
dC5zdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UodGV4dE1hcmtlclJhbmdlKTsKKyAg
ICAgICAgdmFyIGN1cnJlbnRNYXJrZXIgPSBhZHZhbmNlQW5kVmVyaWZ5KHN0YXJ0TWFya2VyLCA1
LCB0ZXh0KTsKKyAgICAgICAgY3VycmVudE1hcmtlciA9IGFkdmFuY2VBbmRWZXJpZnkoY3VycmVu
dE1hcmtlciwgMSwgdGV4dCk7CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGNh
biBnZXQgdGhlIHRoaXJkIHdvcmQgIlRlc3QzIgorICAgICAgICBjdXJyZW50TWFya2VyID0gYWR2
YW5jZUFuZFZlcmlmeShjdXJyZW50TWFya2VyLCA1LCB0ZXh0KTsKKyAgICAgICAgY3VycmVudE1h
cmtlciA9IGFkdmFuY2VBbmRWZXJpZnkoY3VycmVudE1hcmtlciwgMSwgdGV4dCk7CisgICAgICAg
IAorICAgICAgICBmdW5jdGlvbiBhZHZhbmNlQW5kVmVyaWZ5KGN1cnJlbnRNYXJrZXIsIG9mZnNl
dCwgb2JqKSB7CisgICAgICAgICAgICB2YXIgcHJldmlvdXNNYXJrZXIgPSBjdXJyZW50TWFya2Vy
OworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvZmZzZXQ7IGkrKykgeworICAgICAg
ICAgICAgICAgIHByZXZpb3VzTWFya2VyID0gY3VycmVudE1hcmtlcjsKKyAgICAgICAgICAgICAg
ICBjdXJyZW50TWFya2VyID0gb2JqLm5leHRUZXh0TWFya2VyKHByZXZpb3VzTWFya2VyKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHZlcmlmeVdvcmRSYW5nZUZvclRleHRNYXJrZXIocHJl
dmlvdXNNYXJrZXIsIGN1cnJlbnRNYXJrZXIsIG9iaik7CisgICAgICAgICAgICByZXR1cm4gY3Vy
cmVudE1hcmtlcjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gcmVwbGFj
ZUF0dGFjaG1lbnRJblN0cmluZyhzdHIpIHsKKyAgICAgICAgICAgIHZhciBuZXdsaW5lID0gJ1xu
JzsKKyAgICAgICAgICAgIHN0ciA9ICBzdHIucmVwbGFjZShTdHJpbmcuZnJvbUNoYXJDb2RlKDY1
NTMyKSwgIltBVFRBQ0hNRU5UXSIpOworICAgICAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UobmV3
bGluZSwgIidsaW5lIGJyZWFrJyIpOworICAgICAgICAgICAgcmV0dXJuIHN0cjsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gdmVyaWZ5V29yZFJhbmdlRm9yVGV4dE1hcmtl
cihwcmVNYXJrZXIsIHRleHRNYXJrZXIsIG9iaikgeworICAgICAgICAgICAgdmFyIG1hcmtlclJh
bmdlID0gb2JqLnRleHRNYXJrZXJSYW5nZUZvck1hcmtlcnMocHJlTWFya2VyLCB0ZXh0TWFya2Vy
KTsKKyAgICAgICAgICAgIHZhciBjdXJyZW50Q2hhcmFjdGVyID0gb2JqLnN0cmluZ0ZvclRleHRN
YXJrZXJSYW5nZShtYXJrZXJSYW5nZSk7CisgICAgICAgICAgICBkZWJ1ZygiQ3VycmVudCBjaGFy
YWN0ZXIgaXM6ICIgKyBjdXJyZW50Q2hhcmFjdGVyKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgdmFyIHByZXZpb3VzV29yZFJhbmdlID0gb2JqLmxlZnRXb3JkVGV4dE1hcmtlclJhbmdlRm9y
VGV4dE1hcmtlcih0ZXh0TWFya2VyKTsKKyAgICAgICAgICAgIHZhciBuZXh0V29yZFJhbmdlID0g
b2JqLnJpZ2h0V29yZFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIodGV4dE1hcmtlcik7Cisg
ICAgICAgICAgICB2YXIgcHJlV29yZCA9IG9iai5zdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UocHJl
dmlvdXNXb3JkUmFuZ2UpOworICAgICAgICAgICAgdmFyIG5leHRXb3JkID0gb2JqLnN0cmluZ0Zv
clRleHRNYXJrZXJSYW5nZShuZXh0V29yZFJhbmdlKTsKKyAgICAgICAgICAgIGRlYnVnKCJMZWZ0
IHdvcmQgaXM6ICIgKyBwcmVXb3JkKTsKKyAgICAgICAgICAgIGRlYnVnKCJSaWdodCB3b3JkIGlz
OiAiICsgbmV4dFdvcmQpOworICAgICAgICAgICAgCisgICAgICAgICAgICB2YXIgcHJlV29yZFN0
YXJ0ID0gb2JqLnByZXZpb3VzV29yZFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIodGV4dE1h
cmtlcik7CisgICAgICAgICAgICB2YXIgbmV4dFdvcmRFbmQgPSBvYmoubmV4dFdvcmRFbmRUZXh0
TWFya2VyRm9yVGV4dE1hcmtlcih0ZXh0TWFya2VyKTsKKyAgICAgICAgICAgIHZhciBwcmVBbmRO
ZXh0V29yZFJhbmdlID0gb2JqLnRleHRNYXJrZXJSYW5nZUZvck1hcmtlcnMocHJlV29yZFN0YXJ0
LCBuZXh0V29yZEVuZCk7CisgICAgICAgICAgICB2YXIgcHJlQW5kTmV4dFdvcmQgPSBvYmouc3Ry
aW5nRm9yVGV4dE1hcmtlclJhbmdlKHByZUFuZE5leHRXb3JkUmFuZ2UpOworICAgICAgICAgICAg
ZGVidWcoIlByZSB3b3JkIHN0YXJ0IHRvIG5leHQgd29yZCBlbmQ6ICIgKyBwcmVBbmROZXh0V29y
ZCArICJcbiIpOworICAgICAgICB9CisgICAgfQorCis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
      

    </bug>

</bugzilla>