<?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>45624</bug_id>
          
          <creation_ts>2010-09-12 16:37:43 -0700</creation_ts>
          <short_desc>Move functions of StyledMarkupAccumulator below that of MarkupAccumulator</short_desc>
          <delta_ts>2010-09-13 11:42:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>44854</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>ojan</cc>
    
    <cc>tkent</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>277914</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-12 16:37:43 -0700</bug_when>
    <thetext>Right now, the definitions of functions of MarkupAccumulator and StyledMarkupAccumulator are interleaving each other.  We should move the definitions of StyledMarkupAccumulator and its function below that of MarkupAccumulator for a better readability.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277915</commentid>
    <comment_count>1</comment_count>
      <attachid>67347</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-12 16:41:41 -0700</bug_when>
    <thetext>Created attachment 67347
cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277943</commentid>
    <comment_count>2</comment_count>
      <attachid>67347</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-09-12 18:50:16 -0700</bug_when>
    <thetext>Comment on attachment 67347
cleanup

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278349</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-09-13 11:42:08 -0700</bug_when>
    <thetext>Committed r67399: &lt;http://trac.webkit.org/changeset/67399&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67347</attachid>
            <date>2010-09-12 16:41:41 -0700</date>
            <delta_ts>2010-09-12 18:50:16 -0700</delta_ts>
            <desc>cleanup</desc>
            <filename>bug-45624-20100912164140.patch</filename>
            <type>text/plain</type>
            <size>28144</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NzM1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMTAtMDktMTIgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92
ZSBmdW5jdGlvbnMgb2YgU3R5bGVkTWFya3VwQWNjdW11bGF0b3IgYmVsb3cgdGhhdCBvZiBNYXJr
dXBBY2N1bXVsYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDU2MjQKKworICAgICAgICBNb3ZlZCB0aGUgZGVjbGFyYXRpb24gb2YgU3R5bGVkTWFy
a3VwQWNjdW11bGF0b3IgYW5kIHRoZSBkZWZpbml0aW9ucyBvZiBpdHMgbWVtYmVyIGZ1bmN0aW9u
cworICAgICAgICB0byBiZWxvdyB0aGUgZGVmaW5pdGlvbnMgb2YgTWFya3VwQWNjdW11bGF0b3In
cyBtZW1iZXIgZnVuY3Rpb25zLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBhcmUgYWRkZWQgc2lu
Y2UgdGhpcyBpcyBhIGNsZWFudXAuCisKKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6U3R5bGVkTWFya3VwQWNj
dW11bGF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6
OnNob3VsZEFubm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1cEFjY3VtdWxh
dG9yOjp3cmFwV2l0aE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11
bGF0b3I6OndyYXBXaXRoU3R5bGVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1
cEFjY3VtdWxhdG9yOjp0YWtlUmVzdWx0cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRNYXJr
dXBBY2N1bXVsYXRvcjo6cmVuZGVyZWRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZE1h
cmt1cEFjY3VtdWxhdG9yOjpzdHJpbmdWYWx1ZUZvclJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OnN0eWxlRnJvbU1hdGNoZWRSdWxlc0ZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVkTWFya3VwQWNjdW11bGF0b3I6OnJlbW92ZUV4dGVyaW9yU3R5bGVzKToKKyAgICAgICAgKFdl
YkNvcmU6Om5lZWRJbnRlcmNoYW5nZU5ld2xpbmVBZnRlcik6CisgICAgICAgIChXZWJDb3JlOjpz
dHlsZUZyb21NYXRjaGVkUnVsZXNBbmRJbmxpbmVEZWNsKToKKyAgICAgICAgKFdlYkNvcmU6OnJl
bW92ZUVuY2xvc2luZ01haWxCbG9ja3F1b3RlU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6cmVt
b3ZlRGVmYXVsdFN0eWxlcyk6CisKIDIwMTAtMDktMTIgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGVsZSBQZXRlcnNvbi4KSW5kZXg6IFdl
YkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9t
YXJrdXAuY3BwCShyZXZpc2lvbiA2NzI1MSkKKysrIFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsMzQgKzE5MCw2IEBAIHByaXZhdGU6CiAgICAgY29uc3Qg
Ym9vbCBtX3Nob3VsZFJlc29sdmVVUkxzOwogfTsKIAotY2xhc3MgU3R5bGVkTWFya3VwQWNjdW11
bGF0b3IgOiBwdWJsaWMgTWFya3VwQWNjdW11bGF0b3IgewotcHVibGljOgotICAgIGVudW0gUmFu
Z2VGdWxseVNlbGVjdHNOb2RlIHsgRG9lc0Z1bGx5U2VsZWN0Tm9kZSwgRG9lc05vdEZ1bGx5U2Vs
ZWN0Tm9kZSB9OwotCi0gICAgU3R5bGVkTWFya3VwQWNjdW11bGF0b3IoVmVjdG9yPE5vZGUqPiog
bm9kZXMsIEVBYnNvbHV0ZVVSTHMgc2hvdWxkUmVzb2x2ZVVSTHMsIEVBbm5vdGF0ZUZvckludGVy
Y2hhbmdlIHNob3VsZEFubm90YXRlLCBjb25zdCBSYW5nZSogcmFuZ2UpCi0gICAgICAgIDogTWFy
a3VwQWNjdW11bGF0b3Iobm9kZXMsIHNob3VsZFJlc29sdmVVUkxzLCByYW5nZSkKLSAgICAgICAg
LCBtX3Nob3VsZEFubm90YXRlKHNob3VsZEFubm90YXRlKQotICAgIHsKLSAgICB9Ci0gICAgdm9p
ZCB3cmFwV2l0aE5vZGUoTm9kZSosIGJvb2wgY29udmVydEJsb2Nrc1RvSW5saW5lcyA9IGZhbHNl
LCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUgPSBEb2VzRnVsbHlTZWxlY3ROb2RlKTsKLSAgICB2b2lk
IHdyYXBXaXRoU3R5bGVOb2RlKENTU1N0eWxlRGVjbGFyYXRpb24qLCBEb2N1bWVudCosIGJvb2wg
aXNCbG9jayA9IGZhbHNlKTsKLSAgICBTdHJpbmcgdGFrZVJlc3VsdHMoKTsKLQotcHJvdGVjdGVk
OgotICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRUZXh0KFZlY3RvcjxVQ2hhcj4mIG91dCwgVGV4dCop
OwotICAgIFN0cmluZyByZW5kZXJlZFRleHQoY29uc3QgTm9kZSosIGNvbnN0IFJhbmdlKik7Ci0g
ICAgU3RyaW5nIHN0cmluZ1ZhbHVlRm9yUmFuZ2UoY29uc3QgTm9kZSosIGNvbnN0IFJhbmdlKik7
Ci0gICAgdm9pZCByZW1vdmVFeHRlcmlvclN0eWxlcyhDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
biopOwotICAgIHZvaWQgYXBwZW5kRWxlbWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQq
IGVsZW1lbnQsIGJvb2wgYWRkRGlzcGxheUlubGluZSwgUmFuZ2VGdWxseVNlbGVjdHNOb2RlKTsK
LSAgICB2b2lkIGFwcGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVt
ZW50LCBOYW1lc3BhY2VzKikgeyBhcHBlbmRFbGVtZW50KG91dCwgZWxlbWVudCwgZmFsc2UsIERv
ZXNGdWxseVNlbGVjdE5vZGUpOyB9Ci0KLSAgICBib29sIHNob3VsZEFubm90YXRlKCkgeyByZXR1
cm4gbV9zaG91bGRBbm5vdGF0ZSA9PSBBbm5vdGF0ZUZvckludGVyY2hhbmdlOyB9Ci0KLXByaXZh
dGU6Ci0gICAgVmVjdG9yPFN0cmluZz4gbV9yZXZlcnNlZFByZWNlZGluZ01hcmt1cDsKLSAgICBj
b25zdCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSBtX3Nob3VsZEFubm90YXRlOwotfTsKLQogdm9p
ZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgc3RyaW5nKQog
ewogICAgIG1fc3VjY2VlZGluZ01hcmt1cC5hcHBlbmQoc3RyaW5nKTsKQEAgLTIzOSwzNyArMjEx
LDYgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kVGFnKE5vZAogICAgIG1fc3Vj
Y2VlZGluZ01hcmt1cC5hcHBlbmQoU3RyaW5nOjphZG9wdChtYXJrdXApKTsKIH0KIAotdm9pZCBT
dHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6d3JhcFdpdGhOb2RlKE5vZGUqIG5vZGUsIGJvb2wgY29u
dmVydEJsb2Nrc1RvSW5saW5lcywgUmFuZ2VGdWxseVNlbGVjdHNOb2RlIHJhbmdlRnVsbHlTZWxl
Y3RzTm9kZSkKLXsKLSAgICBWZWN0b3I8VUNoYXI+IG1hcmt1cDsKLSAgICBpZiAobm9kZS0+aXNF
bGVtZW50Tm9kZSgpKQotICAgICAgICBhcHBlbmRFbGVtZW50KG1hcmt1cCwgc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KG5vZGUpLCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzICYmIGlzQmxvY2soY29uc3Rf
Y2FzdDxOb2RlKj4obm9kZSkpLCByYW5nZUZ1bGx5U2VsZWN0c05vZGUpOwotICAgIGVsc2UKLSAg
ICAgICAgYXBwZW5kU3RhcnRNYXJrdXAobWFya3VwLCBub2RlLCAwKTsKLSAgICBtX3JldmVyc2Vk
UHJlY2VkaW5nTWFya3VwLmFwcGVuZChTdHJpbmc6OmFkb3B0KG1hcmt1cCkpOwotICAgIGFwcGVu
ZEVuZFRhZyhub2RlKTsKLSAgICBpZiAobV9ub2RlcykKLSAgICAgICAgbV9ub2Rlcy0+YXBwZW5k
KG5vZGUpOwotfQotCi12b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp3cmFwV2l0aFN0eWxl
Tm9kZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29s
IGlzQmxvY2spCi17Ci0gICAgLy8gQWxsIHRleHQtZGVjb3JhdGlvbi1yZWxhdGVkIGVsZW1lbnRz
IHNob3VsZCBoYXZlIGJlZW4gdHJlYXRlZCBhcyBzcGVjaWFsIGFuY2VzdG9ycwotICAgIC8vIElm
IHdlIGV2ZXIgaGl0IHRoaXMgQVNTRVJULCB3ZSBzaG91bGQgZXhwb3J0IFN0eWxlQ2hhbmdlIGlu
IEFwcGx5U3R5bGVDb21tYW5kIGFuZCB1c2UgaXQgaGVyZQotICAgIEFTU0VSVChwcm9wZXJ0eU1p
c3NpbmdPckVxdWFsVG9Ob25lKHN0eWxlLCBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKSAmJiBw
cm9wZXJ0eU1pc3NpbmdPckVxdWFsVG9Ob25lKHN0eWxlLCBDU1NQcm9wZXJ0eVdlYmtpdFRleHRE
ZWNvcmF0aW9uc0luRWZmZWN0KSk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25zdCBTdHJp
bmcsIGRpdlN0eWxlLCAoIjxkaXYgc3R5bGU9XCIiKSk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NB
TChjb25zdCBTdHJpbmcsIGRpdkNsb3NlLCAoIjwvZGl2PiIpKTsKLSAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKGNvbnN0IFN0cmluZywgc3R5bGVTcGFuT3BlbiwgKCI8c3BhbiBjbGFzcz1cIiIgQXBw
bGVTdHlsZVNwYW5DbGFzcyAiXCIgc3R5bGU9XCIiKSk7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NB
TChjb25zdCBTdHJpbmcsIHN0eWxlU3BhbkNsb3NlLCAoIjwvc3Bhbj4iKSk7Ci0gICAgVmVjdG9y
PFVDaGFyPiBvcGVuVGFnOwotICAgIGFwcGVuZChvcGVuVGFnLCBpc0Jsb2NrID8gZGl2U3R5bGUg
OiBzdHlsZVNwYW5PcGVuKTsKLSAgICBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShvcGVuVGFnLCBzdHls
ZS0+Y3NzVGV4dCgpLCBkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSk7Ci0gICAgb3BlblRhZy5h
cHBlbmQoJ1wiJyk7Ci0gICAgb3BlblRhZy5hcHBlbmQoJz4nKTsKLSAgICBtX3JldmVyc2VkUHJl
Y2VkaW5nTWFya3VwLmFwcGVuZChTdHJpbmc6OmFkb3B0KG9wZW5UYWcpKTsKLSAgICBtX3N1Y2Nl
ZWRpbmdNYXJrdXAuYXBwZW5kKGlzQmxvY2sgPyBkaXZDbG9zZSA6IHN0eWxlU3BhbkNsb3NlKTsK
LX0KLQogLy8gRklYTUU6IFRoaXMgaXMgYSB2ZXJ5IGluZWZmaWNpZW50IHdheSBvZiBhY2N1bXVs
YXRpbmcgdGhlIG1hcmt1cC4KIC8vIFdlJ3JlIGNvbnZlcnRpbmcgcmVzdWx0cyBvZiBhcHBlbmRT
dGFydE1hcmt1cCBhbmQgYXBwZW5kRW5kTWFya3VwIGZyb20gVmVjdG9yPFVDaGFyPiB0byBTdHJp
bmcKIC8vIGFuZCB0aGVuIGJhY2sgdG8gVmVjdG9yPFVDaGFyPiBhbmQgYWdhaW4gdG8gU3RyaW5n
IGhlcmUuCkBAIC0yOTAsMzAgKzIzMSw2IEBAIFN0cmluZyBNYXJrdXBBY2N1bXVsYXRvcjo6dGFr
ZVJlc3VsdHMoKQogICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KHJlc3VsdCk7CiB9CiAKLVN0cmlu
ZyBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6dGFrZVJlc3VsdHMoKQotewotICAgIHNpemVfdCBs
ZW5ndGggPSAwOwotCi0gICAgc2l6ZV90IHByZUNvdW50ID0gbV9yZXZlcnNlZFByZWNlZGluZ01h
cmt1cC5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcmVDb3VudDsgKytpKQot
ICAgICAgICBsZW5ndGggKz0gbV9yZXZlcnNlZFByZWNlZGluZ01hcmt1cFtpXS5sZW5ndGgoKTsK
LQotICAgIHNpemVfdCBwb3N0Q291bnQgPSBtX3N1Y2NlZWRpbmdNYXJrdXAuc2l6ZSgpOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9zdENvdW50OyArK2kpCi0gICAgICAgIGxlbmd0aCAr
PSBtX3N1Y2NlZWRpbmdNYXJrdXBbaV0ubGVuZ3RoKCk7Ci0KLSAgICBWZWN0b3I8VUNoYXI+IHJl
c3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgpOwotCi0gICAg
Zm9yIChzaXplX3QgaSA9IHByZUNvdW50OyBpID4gMDsgLS1pKQotICAgICAgICBhcHBlbmQocmVz
dWx0LCBtX3JldmVyc2VkUHJlY2VkaW5nTWFya3VwW2kgLSAxXSk7Ci0KLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHBvc3RDb3VudDsgKytpKQotICAgICAgICBhcHBlbmQocmVzdWx0LCBtX3N1
Y2NlZWRpbmdNYXJrdXBbaV0pOwotCi0gICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsK
LX0KLQogdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRlVmFsdWUoVmVjdG9y
PFVDaGFyPiYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZSwgYm9vbCBkb2N1bWVudElz
SFRNTCkKIHsKICAgICBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMocmVzdWx0LCBh
dHRyaWJ1dGUuY2hhcmFjdGVycygpLCBhdHRyaWJ1dGUubGVuZ3RoKCksCkBAIC0zNDQsMjAgKzI2
MSw2IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFF1b3RlZFVSTEEKICAgICByZXN1
bHQuYXBwZW5kKHF1b3RlQ2hhcik7CiB9CiAKLVN0cmluZyBTdHlsZWRNYXJrdXBBY2N1bXVsYXRv
cjo6c3RyaW5nVmFsdWVGb3JSYW5nZShjb25zdCBOb2RlKiBub2RlLCBjb25zdCBSYW5nZSogcmFu
Z2UpCi17Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIG5vZGUtPm5vZGVWYWx1ZSgp
OwotCi0gICAgU3RyaW5nIHN0ciA9IG5vZGUtPm5vZGVWYWx1ZSgpOwotICAgIEV4Y2VwdGlvbkNv
ZGUgZWM7Ci0gICAgaWYgKG5vZGUgPT0gcmFuZ2UtPmVuZENvbnRhaW5lcihlYykpCi0gICAgICAg
IHN0ci50cnVuY2F0ZShyYW5nZS0+ZW5kT2Zmc2V0KGVjKSk7Ci0gICAgaWYgKG5vZGUgPT0gcmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKGVjKSkKLSAgICAgICAgc3RyLnJlbW92ZSgwLCByYW5nZS0+c3Rh
cnRPZmZzZXQoZWMpKTsKLSAgICByZXR1cm4gc3RyOwotfQotCiB2b2lkIE1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmROb2RlVmFsdWUoVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBOb2RlKiBub2Rl
LCBjb25zdCBSYW5nZSogcmFuZ2UsIEVudGl0eU1hc2sgZW50aXR5TWFzaykKIHsKICAgICBTdHJp
bmcgc3RyID0gbm9kZS0+bm9kZVZhbHVlKCk7CkBAIC0zNzgsNTkgKzI4MSw2IEBAIHZvaWQgTWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZE5vZGVWYWx1ZSgKICAgICBhcHBlbmRDaGFyYWN0ZXJzUmVw
bGFjaW5nRW50aXRpZXMob3V0LCBjaGFyYWN0ZXJzLCBsZW5ndGgsIGVudGl0eU1hc2spOwogfQog
Ci1TdHJpbmcgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnJlbmRlcmVkVGV4dChjb25zdCBOb2Rl
KiBub2RlLCBjb25zdCBSYW5nZSogcmFuZ2UpCi17Ci0gICAgaWYgKCFub2RlLT5pc1RleHROb2Rl
KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0g
ICAgY29uc3QgVGV4dCogdGV4dE5vZGUgPSBzdGF0aWNfY2FzdDxjb25zdCBUZXh0Kj4obm9kZSk7
Ci0gICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSAwOwotICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9
IHRleHROb2RlLT5sZW5ndGgoKTsKLQotICAgIGlmIChyYW5nZSAmJiBub2RlID09IHJhbmdlLT5z
dGFydENvbnRhaW5lcihlYykpCi0gICAgICAgIHN0YXJ0T2Zmc2V0ID0gcmFuZ2UtPnN0YXJ0T2Zm
c2V0KGVjKTsKLSAgICBpZiAocmFuZ2UgJiYgbm9kZSA9PSByYW5nZS0+ZW5kQ29udGFpbmVyKGVj
KSkKLSAgICAgICAgZW5kT2Zmc2V0ID0gcmFuZ2UtPmVuZE9mZnNldChlYyk7Ci0KLSAgICBQb3Np
dGlvbiBzdGFydChjb25zdF9jYXN0PE5vZGUqPihub2RlKSwgc3RhcnRPZmZzZXQpOwotICAgIFBv
c2l0aW9uIGVuZChjb25zdF9jYXN0PE5vZGUqPihub2RlKSwgZW5kT2Zmc2V0KTsKLSAgICByZXR1
cm4gcGxhaW5UZXh0KFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQoKSwgc3RhcnQsIGVuZCku
Z2V0KCkpOwotfQotCi1zdGF0aWMgUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bj4gc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBib29s
IGF1dGhvck9ubHkgPSB0cnVlKQotewotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbj4gc3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7Ci0gICAg
UmVmUHRyPENTU1J1bGVMaXN0PiBtYXRjaGVkUnVsZXMgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5z
dHlsZVNlbGVjdG9yKCktPnN0eWxlUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQsIGF1dGhvck9ubHkp
OwotICAgIGlmIChtYXRjaGVkUnVsZXMpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1hdGNoZWRSdWxlcy0+bGVuZ3RoKCk7IGkrKykgewotICAgICAgICAgICAgaWYgKG1hdGNo
ZWRSdWxlcy0+aXRlbShpKS0+dHlwZSgpID09IENTU1J1bGU6OlNUWUxFX1JVTEUpIHsKLSAgICAg
ICAgICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHMgPSBzdGF0aWNf
Y2FzdDxDU1NTdHlsZVJ1bGUqPihtYXRjaGVkUnVsZXMtPml0ZW0oaSkpLT5zdHlsZSgpOwotICAg
ICAgICAgICAgICAgIHN0eWxlLT5tZXJnZShzLmdldCgpLCB0cnVlKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc3R5bGUucmVsZWFzZSgpOwotfQot
Ci1zdGF0aWMgdm9pZCByZW1vdmVFbmNsb3NpbmdNYWlsQmxvY2txdW90ZVN0eWxlKENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgTm9kZSogbm9kZSkKLXsKLSAgICBOb2RlKiBibG9j
a3F1b3RlID0gbmVhcmVzdE1haWxCbG9ja3F1b3RlKG5vZGUpOwotICAgIGlmICghYmxvY2txdW90
ZSB8fCAhYmxvY2txdW90ZS0+cGFyZW50Tm9kZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBy
ZW1vdmVTdHlsZXNBZGRlZEJ5Tm9kZShzdHlsZSwgYmxvY2txdW90ZSk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHJlbW92ZURlZmF1bHRTdHlsZXMoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxl
LCBEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQt
PmRvY3VtZW50RWxlbWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcmVwYXJlRWRpdGlu
Z1N0eWxlVG9BcHBseUF0KHN0eWxlLCBQb3NpdGlvbihkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50
KCksIDApKTsKLX0KLQogYm9vbCBNYXJrdXBBY2N1bXVsYXRvcjo6c2hvdWxkQWRkTmFtZXNwYWNl
RWxlbWVudChjb25zdCBFbGVtZW50KiBlbGVtZW50KQogewogICAgIC8vIERvbid0IGFkZCBuYW1l
c3BhY2UgYXR0cmlidXRlIGlmIGl0IGlzIGFscmVhZHkgZGVmaW5lZCBmb3IgdGhpcyBlbGVtLgpA
QCAtNTAwLDIwICszNTAsNiBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KFZl
Y3RvCiAgICAgYXBwZW5kTm9kZVZhbHVlKG91dCwgdGV4dCwgbV9yYW5nZSwgZW50aXR5TWFza0Zv
clRleHQodGV4dCkpOwogfQogCi12b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRU
ZXh0KFZlY3RvcjxVQ2hhcj4mIG91dCwgVGV4dCogdGV4dCkKLXsKLSAgICBpZiAoIXNob3VsZEFu
bm90YXRlKCkgfHwgKHRleHQtPnBhcmVudEVsZW1lbnQoKSAmJiB0ZXh0LT5wYXJlbnRFbGVtZW50
KCktPnRhZ1FOYW1lKCkgPT0gdGV4dGFyZWFUYWcpKSB7Ci0gICAgICAgIE1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRUZXh0KG91dCwgdGV4dCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBib29sIHVzZVJlbmRlcmVkVGV4dCA9ICFlbmNsb3NpbmdOb2RlV2l0aFRhZyhQb3NpdGlvbih0
ZXh0LCAwKSwgc2VsZWN0VGFnKTsKLSAgICBTdHJpbmcgY29udGVudCA9IHVzZVJlbmRlcmVkVGV4
dCA/IHJlbmRlcmVkVGV4dCh0ZXh0LCBtX3JhbmdlKSA6IHN0cmluZ1ZhbHVlRm9yUmFuZ2UodGV4
dCwgbV9yYW5nZSk7Ci0gICAgVmVjdG9yPFVDaGFyPiBidWZmZXI7Ci0gICAgYXBwZW5kQ2hhcmFj
dGVyc1JlcGxhY2luZ0VudGl0aWVzKGJ1ZmZlciwgY29udGVudC5jaGFyYWN0ZXJzKCksIGNvbnRl
bnQubGVuZ3RoKCksIEVudGl0eU1hc2tJblBDREFUQSk7Ci0gICAgYXBwZW5kKG91dCwgY29udmVy
dEhUTUxUZXh0VG9JbnRlcmNoYW5nZUZvcm1hdChTdHJpbmc6OmFkb3B0KGJ1ZmZlciksIHRleHQp
KTsKLX0KLQogdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ29tbWVudChWZWN0b3I8VUNo
YXI+JiBvdXQsIGNvbnN0IFN0cmluZyYgY29tbWVudCkKIHsKICAgICAvLyBGSVhNRTogQ29tbWVu
dCBjb250ZW50IGlzIG5vdCBlc2NhcGVkLCBidXQgWE1MU2VyaWFsaXplciAoYW5kIHBvc3NpYmx5
IG90aGVyIGNhbGxlcnMpIHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24gaWYgaXQgaW5jbHVkZXMg
Ii0tPiIuCkBAIC01NjEsMTEgKzM5Nyw2IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZFByb2Nlc3NpbmcKICAgICBhcHBlbmQob3V0LCAiPz4iKTsKIH0KIAotdm9pZCBTdHlsZWRNYXJr
dXBBY2N1bXVsYXRvcjo6cmVtb3ZlRXh0ZXJpb3JTdHlsZXMoQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24qIHN0eWxlKQotewotICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZs
b2F0KTsKLX0KLQogdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChWZWN0b3I8
VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7
CiAgICAgYXBwZW5kT3BlblRhZyhvdXQsIGVsZW1lbnQsIG5hbWVzcGFjZXMpOwpAQCAtNTc4LDY2
ICs0MDksNiBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFZlCiAgICAg
YXBwZW5kQ2xvc2VUYWcob3V0LCBlbGVtZW50KTsKIH0KIAotdm9pZCBTdHlsZWRNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kRWxlbWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1l
bnQsIGJvb2wgYWRkRGlzcGxheUlubGluZSwgUmFuZ2VGdWxseVNlbGVjdHNOb2RlIHJhbmdlRnVs
bHlTZWxlY3RzTm9kZSkKLXsKLSAgICBib29sIGRvY3VtZW50SXNIVE1MID0gZWxlbWVudC0+ZG9j
dW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKTsKLSAgICBhcHBlbmRPcGVuVGFnKG91dCwgZWxlbWVu
dCwgMCk7Ci0KLSAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSBlbGVtZW50LT5hdHRyaWJ1
dGVzKCk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gYXR0cmlidXRlcy0+bGVuZ3RoKCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBBdHRy
aWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0oaSk7Ci0gICAgICAg
IC8vIFdlJ2xsIGhhbmRsZSB0aGUgc3R5bGUgYXR0cmlidXRlIHNlcGFyYXRlbHksIGJlbG93Lgot
ICAgICAgICBpZiAoYXR0cmlidXRlLT5uYW1lKCkgPT0gc3R5bGVBdHRyICYmIGVsZW1lbnQtPmlz
SFRNTEVsZW1lbnQoKSAmJiAoc2hvdWxkQW5ub3RhdGUoKSB8fCBhZGREaXNwbGF5SW5saW5lKSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhcHBlbmRBdHRyaWJ1dGUob3V0LCBlbGVt
ZW50LCAqYXR0cmlidXRlLCAwKTsKLSAgICB9Ci0KLSAgICBpZiAoZWxlbWVudC0+aXNIVE1MRWxl
bWVudCgpICYmIChzaG91bGRBbm5vdGF0ZSgpIHx8IGFkZERpc3BsYXlJbmxpbmUpKSB7Ci0gICAg
ICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBzdGF0aWNfY2Fz
dDxIVE1MRWxlbWVudCo+KGVsZW1lbnQpLT5nZXRJbmxpbmVTdHlsZURlY2woKS0+Y29weSgpOwot
ICAgICAgICBpZiAoc2hvdWxkQW5ub3RhdGUoKSkgewotICAgICAgICAgICAgUmVmUHRyPENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZUZyb21NYXRjaGVkUnVsZXMgPSBzdHlsZUZyb21N
YXRjaGVkUnVsZXNGb3JFbGVtZW50KGNvbnN0X2Nhc3Q8RWxlbWVudCo+KGVsZW1lbnQpKTsKLSAg
ICAgICAgICAgIC8vIFN0eWxlcyBmcm9tIHRoZSBpbmxpbmUgc3R5bGUgZGVjbGFyYXRpb24sIGhl
bGQgaW4gdGhlIHZhcmlhYmxlICJzdHlsZSIsIHRha2UgcHJlY2VkZW5jZSAKLSAgICAgICAgICAg
IC8vIG92ZXIgdGhvc2UgZnJvbSBtYXRjaGVkIHJ1bGVzLgotICAgICAgICAgICAgc3R5bGVGcm9t
TWF0Y2hlZFJ1bGVzLT5tZXJnZShzdHlsZS5nZXQoKSk7Ci0gICAgICAgICAgICBzdHlsZSA9IHN0
eWxlRnJvbU1hdGNoZWRSdWxlczsKLQotICAgICAgICAgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbj4gY29tcHV0ZWRTdHlsZUZvckVsZW1lbnQgPSBjb21wdXRlZFN0eWxlKGVs
ZW1lbnQpOwotICAgICAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBm
cm9tQ29tcHV0ZWRTdHlsZSA9IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsK
LQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uOjpjb25zdF9pdGVyYXRvciBlbmQgPSBzdHlsZS0+ZW5kKCk7Ci0gICAgICAgICAgICAgICAg
Zm9yIChDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHls
ZS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0
IENTU1Byb3BlcnR5JiBwcm9wZXJ0eSA9ICppdDsKLSAgICAgICAgICAgICAgICAgICAgQ1NTVmFs
dWUqIHZhbHVlID0gcHJvcGVydHkudmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhl
IHByb3BlcnR5IHZhbHVlLCBpZiBpdCdzIGEgcGVyY2VudGFnZSwgbWF5IG5vdCByZWZsZWN0IHRo
ZSBhY3R1YWwgY29tcHV0ZWQgdmFsdWUuICAKLSAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGV4
YW1wbGU6IHN0eWxlPSJoZWlnaHQ6IDElOyBvdmVyZmxvdzogdmlzaWJsZTsiIGluIHF1aXJrc21v
ZGUKLSAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoZXJlIGFyZSBvdGhlcnMgbGlrZSB0
aGlzLCBzZWUgPHJkYXI6Ly9wcm9ibGVtLzUxOTUxMjM+IFNsYXNoZG90IGNvcHkvcGFzdGUgZmlk
ZWxpdHkgcHJvYmxlbQotICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUtPmNzc1ZhbHVlVHlw
ZSgpID09IENTU1ZhbHVlOjpDU1NfUFJJTUlUSVZFX1ZBTFVFKQotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpLT5wcmltaXRp
dmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IGNvbXB1dGVkUHJvcGVydHlW
YWx1ZSA9IGNvbXB1dGVkU3R5bGVGb3JFbGVtZW50LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3Bl
cnR5LmlkKCkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tQ29tcHV0ZWRT
dHlsZS0+YWRkUGFyc2VkUHJvcGVydHkoQ1NTUHJvcGVydHkocHJvcGVydHkuaWQoKSwgY29tcHV0
ZWRQcm9wZXJ0eVZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgc3R5bGUtPm1lcmdlKGZyb21Db21wdXRlZFN0eWxlLmdldCgpKTsKLSAgICAgICAg
fQotICAgICAgICBpZiAoYWRkRGlzcGxheUlubGluZSkKLSAgICAgICAgICAgIHN0eWxlLT5zZXRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eURpc3BsYXksIENTU1ZhbHVlSW5saW5lLCB0cnVlKTsKLSAgICAg
ICAgLy8gSWYgdGhlIG5vZGUgaXMgbm90IGZ1bGx5IHNlbGVjdGVkIGJ5IHRoZSByYW5nZSwgdGhl
biB3ZSBkb24ndCB3YW50IHRvIGtlZXAgc3R5bGVzIHRoYXQgYWZmZWN0IGl0cyByZWxhdGlvbnNo
aXAgdG8gdGhlIG5vZGVzIGFyb3VuZCBpdAotICAgICAgICAvLyBvbmx5IHRoZSBvbmVzIHRoYXQg
YWZmZWN0IGl0IGFuZCB0aGUgbm9kZXMgd2l0aGluIGl0LgotICAgICAgICBpZiAocmFuZ2VGdWxs
eVNlbGVjdHNOb2RlID09IERvZXNOb3RGdWxseVNlbGVjdE5vZGUpCi0gICAgICAgICAgICByZW1v
dmVFeHRlcmlvclN0eWxlcyhzdHlsZS5nZXQoKSk7Ci0gICAgICAgIGlmIChzdHlsZS0+bGVuZ3Ro
KCkgPiAwKSB7Ci0gICAgICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywg
c3R5bGVQcmVmaXgsICgiIHN0eWxlPVwiIikpOwotICAgICAgICAgICAgYXBwZW5kKG91dCwgc3R5
bGVQcmVmaXgpOwotICAgICAgICAgICAgYXBwZW5kQXR0cmlidXRlVmFsdWUob3V0LCBzdHlsZS0+
Y3NzVGV4dCgpLCBkb2N1bWVudElzSFRNTCk7Ci0gICAgICAgICAgICBvdXQuYXBwZW5kKCdcIicp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYXBwZW5kQ2xvc2VUYWcob3V0LCBlbGVtZW50KTsK
LX0KLSAgICAKIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE9wZW5UYWcoVmVjdG9yPFVD
aGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQogewog
ICAgIG91dC5hcHBlbmQoJzwnKTsKQEAgLTc5NCwzMCArNTY1LDIxOSBAQCBzdGF0aWMgdm9pZCBj
b21wbGV0ZVVSTHMoTm9kZSogbm9kZSwgY29uCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1DaGFuZ2VzOyArK2kpCiAgICAgICAgIGNoYW5nZXNbaV0uYXBwbHkoKTsKIH0KKyAgICAKK2Ns
YXNzIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yIDogcHVibGljIE1hcmt1cEFjY3VtdWxhdG9yIHsK
K3B1YmxpYzoKKyAgICBlbnVtIFJhbmdlRnVsbHlTZWxlY3RzTm9kZSB7IERvZXNGdWxseVNlbGVj
dE5vZGUsIERvZXNOb3RGdWxseVNlbGVjdE5vZGUgfTsKIAotc3RhdGljIGJvb2wgbmVlZEludGVy
Y2hhbmdlTmV3bGluZUFmdGVyKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdikKKyAgICBTdHlsZWRN
YXJrdXBBY2N1bXVsYXRvcihWZWN0b3I8Tm9kZSo+KiBub2RlcywgRUFic29sdXRlVVJMcyBzaG91
bGRSZXNvbHZlVVJMcywgRUFubm90YXRlRm9ySW50ZXJjaGFuZ2Ugc2hvdWxkQW5ub3RhdGUsIGNv
bnN0IFJhbmdlKiByYW5nZSkKKyAgICA6IE1hcmt1cEFjY3VtdWxhdG9yKG5vZGVzLCBzaG91bGRS
ZXNvbHZlVVJMcywgcmFuZ2UpCisgICAgLCBtX3Nob3VsZEFubm90YXRlKHNob3VsZEFubm90YXRl
KQorICAgIHsKKyAgICB9CisgICAgdm9pZCB3cmFwV2l0aE5vZGUoTm9kZSosIGJvb2wgY29udmVy
dEJsb2Nrc1RvSW5saW5lcyA9IGZhbHNlLCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUgPSBEb2VzRnVs
bHlTZWxlY3ROb2RlKTsKKyAgICB2b2lkIHdyYXBXaXRoU3R5bGVOb2RlKENTU1N0eWxlRGVjbGFy
YXRpb24qLCBEb2N1bWVudCosIGJvb2wgaXNCbG9jayA9IGZhbHNlKTsKKyAgICBTdHJpbmcgdGFr
ZVJlc3VsdHMoKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRUZXh0KFZl
Y3RvcjxVQ2hhcj4mIG91dCwgVGV4dCopOworICAgIFN0cmluZyByZW5kZXJlZFRleHQoY29uc3Qg
Tm9kZSosIGNvbnN0IFJhbmdlKik7CisgICAgU3RyaW5nIHN0cmluZ1ZhbHVlRm9yUmFuZ2UoY29u
c3QgTm9kZSosIGNvbnN0IFJhbmdlKik7CisgICAgdm9pZCByZW1vdmVFeHRlcmlvclN0eWxlcyhD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiopOworICAgIHZvaWQgYXBwZW5kRWxlbWVudChWZWN0
b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgYWRkRGlzcGxheUlubGluZSwg
UmFuZ2VGdWxseVNlbGVjdHNOb2RlKTsKKyAgICB2b2lkIGFwcGVuZEVsZW1lbnQoVmVjdG9yPFVD
aGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKikgeyBhcHBlbmRFbGVtZW50
KG91dCwgZWxlbWVudCwgZmFsc2UsIERvZXNGdWxseVNlbGVjdE5vZGUpOyB9CisKKyAgICBib29s
IHNob3VsZEFubm90YXRlKCkgeyByZXR1cm4gbV9zaG91bGRBbm5vdGF0ZSA9PSBBbm5vdGF0ZUZv
ckludGVyY2hhbmdlOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFN0cmluZz4gbV9yZXZlcnNl
ZFByZWNlZGluZ01hcmt1cDsKKyAgICBjb25zdCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSBtX3No
b3VsZEFubm90YXRlOworfTsKKwordm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6d3JhcFdp
dGhOb2RlKE5vZGUqIG5vZGUsIGJvb2wgY29udmVydEJsb2Nrc1RvSW5saW5lcywgUmFuZ2VGdWxs
eVNlbGVjdHNOb2RlIHJhbmdlRnVsbHlTZWxlY3RzTm9kZSkKIHsKLSAgICBWaXNpYmxlUG9zaXRp
b24gbmV4dCA9IHYubmV4dCgpOwotICAgIE5vZGUqIHVwc3RyZWFtTm9kZSA9IG5leHQuZGVlcEVx
dWl2YWxlbnQoKS51cHN0cmVhbSgpLm5vZGUoKTsKLSAgICBOb2RlKiBkb3duc3RyZWFtTm9kZSA9
IHYuZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCkubm9kZSgpOwotICAgIC8vIEFkZCBhbiBp
bnRlcmNoYW5nZSBuZXdsaW5lIGlmIGEgcGFyYWdyYXBoIGJyZWFrIGlzIHNlbGVjdGVkIGFuZCBh
IGJyIHdvbid0IGFscmVhZHkgYmUgYWRkZWQgdG8gdGhlIG1hcmt1cCB0byByZXByZXNlbnQgaXQu
Ci0gICAgcmV0dXJuIGlzRW5kT2ZQYXJhZ3JhcGgodikgJiYgaXNTdGFydE9mUGFyYWdyYXBoKG5l
eHQpICYmICEodXBzdHJlYW1Ob2RlLT5oYXNUYWdOYW1lKGJyVGFnKSAmJiB1cHN0cmVhbU5vZGUg
PT0gZG93bnN0cmVhbU5vZGUpOworICAgIFZlY3RvcjxVQ2hhcj4gbWFya3VwOworICAgIGlmIChu
b2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIGFwcGVuZEVsZW1lbnQobWFya3VwLCBzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obm9kZSksIGNvbnZlcnRCbG9ja3NUb0lubGluZXMgJiYgaXNCbG9j
ayhjb25zdF9jYXN0PE5vZGUqPihub2RlKSksIHJhbmdlRnVsbHlTZWxlY3RzTm9kZSk7CisgICAg
ZWxzZQorICAgICAgICBhcHBlbmRTdGFydE1hcmt1cChtYXJrdXAsIG5vZGUsIDApOworICAgIG1f
cmV2ZXJzZWRQcmVjZWRpbmdNYXJrdXAuYXBwZW5kKFN0cmluZzo6YWRvcHQobWFya3VwKSk7Cisg
ICAgYXBwZW5kRW5kVGFnKG5vZGUpOworICAgIGlmIChtX25vZGVzKQorICAgICAgICBtX25vZGVz
LT5hcHBlbmQobm9kZSk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uPiBzdHlsZUZyb21NYXRjaGVkUnVsZXNBbmRJbmxpbmVEZWNsKGNvbnN0IE5vZGUq
IG5vZGUpCit2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp3cmFwV2l0aFN0eWxlTm9kZShD
U1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGlzQmxv
Y2spCiB7Ci0gICAgaWYgKCFub2RlLT5pc0hUTUxFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiAw
OworICAgIC8vIEFsbCB0ZXh0LWRlY29yYXRpb24tcmVsYXRlZCBlbGVtZW50cyBzaG91bGQgaGF2
ZSBiZWVuIHRyZWF0ZWQgYXMgc3BlY2lhbCBhbmNlc3RvcnMKKyAgICAvLyBJZiB3ZSBldmVyIGhp
dCB0aGlzIEFTU0VSVCwgd2Ugc2hvdWxkIGV4cG9ydCBTdHlsZUNoYW5nZSBpbiBBcHBseVN0eWxl
Q29tbWFuZCBhbmQgdXNlIGl0IGhlcmUKKyAgICBBU1NFUlQocHJvcGVydHlNaXNzaW5nT3JFcXVh
bFRvTm9uZShzdHlsZSwgQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbikgJiYgcHJvcGVydHlNaXNz
aW5nT3JFcXVhbFRvTm9uZShzdHlsZSwgQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJ
bkVmZmVjdCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBkaXZTdHls
ZSwgKCI8ZGl2IHN0eWxlPVwiIikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3Ry
aW5nLCBkaXZDbG9zZSwgKCI8L2Rpdj4iKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChjb25z
dCBTdHJpbmcsIHN0eWxlU3Bhbk9wZW4sICgiPHNwYW4gY2xhc3M9XCIiIEFwcGxlU3R5bGVTcGFu
Q2xhc3MgIlwiIHN0eWxlPVwiIikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoY29uc3QgU3Ry
aW5nLCBzdHlsZVNwYW5DbG9zZSwgKCI8L3NwYW4+IikpOworICAgIFZlY3RvcjxVQ2hhcj4gb3Bl
blRhZzsKKyAgICBhcHBlbmQob3BlblRhZywgaXNCbG9jayA/IGRpdlN0eWxlIDogc3R5bGVTcGFu
T3Blbik7CisgICAgYXBwZW5kQXR0cmlidXRlVmFsdWUob3BlblRhZywgc3R5bGUtPmNzc1RleHQo
KSwgZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpOworICAgIG9wZW5UYWcuYXBwZW5kKCdcIicp
OworICAgIG9wZW5UYWcuYXBwZW5kKCc+Jyk7CisgICAgbV9yZXZlcnNlZFByZWNlZGluZ01hcmt1
cC5hcHBlbmQoU3RyaW5nOjphZG9wdChvcGVuVGFnKSk7CisgICAgbV9zdWNjZWVkaW5nTWFya3Vw
LmFwcGVuZChpc0Jsb2NrID8gZGl2Q2xvc2UgOiBzdHlsZVNwYW5DbG9zZSk7Cit9CisKK1N0cmlu
ZyBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6dGFrZVJlc3VsdHMoKQoreworICAgIHNpemVfdCBs
ZW5ndGggPSAwOworCisgICAgc2l6ZV90IHByZUNvdW50ID0gbV9yZXZlcnNlZFByZWNlZGluZ01h
cmt1cC5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcmVDb3VudDsgKytpKQor
ICAgICAgICBsZW5ndGggKz0gbV9yZXZlcnNlZFByZWNlZGluZ01hcmt1cFtpXS5sZW5ndGgoKTsK
KworICAgIHNpemVfdCBwb3N0Q291bnQgPSBtX3N1Y2NlZWRpbmdNYXJrdXAuc2l6ZSgpOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9zdENvdW50OyArK2kpCisgICAgICAgIGxlbmd0aCAr
PSBtX3N1Y2NlZWRpbmdNYXJrdXBbaV0ubGVuZ3RoKCk7CisKKyAgICBWZWN0b3I8VUNoYXI+IHJl
c3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsZW5ndGgpOworCisgICAg
Zm9yIChzaXplX3QgaSA9IHByZUNvdW50OyBpID4gMDsgLS1pKQorICAgICAgICBhcHBlbmQocmVz
dWx0LCBtX3JldmVyc2VkUHJlY2VkaW5nTWFya3VwW2kgLSAxXSk7CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHBvc3RDb3VudDsgKytpKQorICAgICAgICBhcHBlbmQocmVzdWx0LCBtX3N1
Y2NlZWRpbmdNYXJrdXBbaV0pOworCisgICAgcmV0dXJuIFN0cmluZzo6YWRvcHQocmVzdWx0KTsK
K30KKwordm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dChWZWN0b3I8VUNo
YXI+JiBvdXQsIFRleHQqIHRleHQpCit7CisgICAgaWYgKCFzaG91bGRBbm5vdGF0ZSgpIHx8ICh0
ZXh0LT5wYXJlbnRFbGVtZW50KCkgJiYgdGV4dC0+cGFyZW50RWxlbWVudCgpLT50YWdRTmFtZSgp
ID09IHRleHRhcmVhVGFnKSkgeworICAgICAgICBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4
dChvdXQsIHRleHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYm9vbCB1c2VSZW5k
ZXJlZFRleHQgPSAhZW5jbG9zaW5nTm9kZVdpdGhUYWcoUG9zaXRpb24odGV4dCwgMCksIHNlbGVj
dFRhZyk7CisgICAgU3RyaW5nIGNvbnRlbnQgPSB1c2VSZW5kZXJlZFRleHQgPyByZW5kZXJlZFRl
eHQodGV4dCwgbV9yYW5nZSkgOiBzdHJpbmdWYWx1ZUZvclJhbmdlKHRleHQsIG1fcmFuZ2UpOwor
ICAgIFZlY3RvcjxVQ2hhcj4gYnVmZmVyOworICAgIGFwcGVuZENoYXJhY3RlcnNSZXBsYWNpbmdF
bnRpdGllcyhidWZmZXIsIGNvbnRlbnQuY2hhcmFjdGVycygpLCBjb250ZW50Lmxlbmd0aCgpLCBF
bnRpdHlNYXNrSW5QQ0RBVEEpOworICAgIGFwcGVuZChvdXQsIGNvbnZlcnRIVE1MVGV4dFRvSW50
ZXJjaGFuZ2VGb3JtYXQoU3RyaW5nOjphZG9wdChidWZmZXIpLCB0ZXh0KSk7Cit9CiAgICAgCi0g
ICAgLy8gRklYTUU6IEhhdmluZyB0byBjb25zdF9jYXN0IGhlcmUgaXMgdWdseSwgYnV0IGl0IGlz
IHF1aXRlIGEgYml0IG9mIHdvcmsgdG8gdW50YW5nbGUKLSAgICAvLyB0aGUgbm9uLWNvbnN0LW5l
c3Mgb2Ygc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzRm9yRWxlbWVudC4KLSAgICBIVE1MRWxlbWVudCog
ZWxlbWVudCA9IGNvbnN0X2Nhc3Q8SFRNTEVsZW1lbnQqPihzdGF0aWNfY2FzdDxjb25zdCBIVE1M
RWxlbWVudCo+KG5vZGUpKTsKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IHN0eWxlID0gc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzRm9yRWxlbWVudChlbGVtZW50KTsKLSAgICBS
ZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGlubGluZVN0eWxlRGVjbCA9IGVsZW1l
bnQtPmdldElubGluZVN0eWxlRGVjbCgpOwotICAgIHN0eWxlLT5tZXJnZShpbmxpbmVTdHlsZURl
Y2wuZ2V0KCkpOworU3RyaW5nIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpyZW5kZXJlZFRleHQo
Y29uc3QgTm9kZSogbm9kZSwgY29uc3QgUmFuZ2UqIHJhbmdlKQoreworICAgIGlmICghbm9kZS0+
aXNUZXh0Tm9kZSgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBFeGNlcHRpb25D
b2RlIGVjOworICAgIGNvbnN0IFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8Y29uc3QgVGV4
dCo+KG5vZGUpOworICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gMDsKKyAgICB1bnNpZ25lZCBl
bmRPZmZzZXQgPSB0ZXh0Tm9kZS0+bGVuZ3RoKCk7CisKKyAgICBpZiAocmFuZ2UgJiYgbm9kZSA9
PSByYW5nZS0+c3RhcnRDb250YWluZXIoZWMpKQorICAgICAgICBzdGFydE9mZnNldCA9IHJhbmdl
LT5zdGFydE9mZnNldChlYyk7CisgICAgaWYgKHJhbmdlICYmIG5vZGUgPT0gcmFuZ2UtPmVuZENv
bnRhaW5lcihlYykpCisgICAgICAgIGVuZE9mZnNldCA9IHJhbmdlLT5lbmRPZmZzZXQoZWMpOwor
CisgICAgUG9zaXRpb24gc3RhcnQoY29uc3RfY2FzdDxOb2RlKj4obm9kZSksIHN0YXJ0T2Zmc2V0
KTsKKyAgICBQb3NpdGlvbiBlbmQoY29uc3RfY2FzdDxOb2RlKj4obm9kZSksIGVuZE9mZnNldCk7
CisgICAgcmV0dXJuIHBsYWluVGV4dChSYW5nZTo6Y3JlYXRlKG5vZGUtPmRvY3VtZW50KCksIHN0
YXJ0LCBlbmQpLmdldCgpKTsKK30KKworU3RyaW5nIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpz
dHJpbmdWYWx1ZUZvclJhbmdlKGNvbnN0IE5vZGUqIG5vZGUsIGNvbnN0IFJhbmdlKiByYW5nZSkK
K3sKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4gbm9kZS0+bm9kZVZhbHVlKCk7CisK
KyAgICBTdHJpbmcgc3RyID0gbm9kZS0+bm9kZVZhbHVlKCk7CisgICAgRXhjZXB0aW9uQ29kZSBl
YzsKKyAgICBpZiAobm9kZSA9PSByYW5nZS0+ZW5kQ29udGFpbmVyKGVjKSkKKyAgICAgICAgc3Ry
LnRydW5jYXRlKHJhbmdlLT5lbmRPZmZzZXQoZWMpKTsKKyAgICBpZiAobm9kZSA9PSByYW5nZS0+
c3RhcnRDb250YWluZXIoZWMpKQorICAgICAgICBzdHIucmVtb3ZlKDAsIHJhbmdlLT5zdGFydE9m
ZnNldChlYykpOworICAgIHJldHVybiBzdHI7Cit9CisKK3N0YXRpYyBQYXNzUmVmUHRyPENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZUZyb21NYXRjaGVkUnVsZXNGb3JFbGVtZW50KEVs
ZW1lbnQqIGVsZW1lbnQsIGJvb2wgYXV0aG9yT25seSA9IHRydWUpCit7CisgICAgUmVmUHRyPENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IG1hdGNoZWRSdWxlcyA9IGVs
ZW1lbnQtPmRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVSdWxlc0ZvckVsZW1lbnQo
ZWxlbWVudCwgYXV0aG9yT25seSk7CisgICAgaWYgKG1hdGNoZWRSdWxlcykgeworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbWF0Y2hlZFJ1bGVzLT5sZW5ndGgoKTsgaSsrKSB7Cisg
ICAgICAgICAgICBpZiAobWF0Y2hlZFJ1bGVzLT5pdGVtKGkpLT50eXBlKCkgPT0gQ1NTUnVsZTo6
U1RZTEVfUlVMRSkgeworICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbj4gcyA9IHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KG1hdGNoZWRSdWxlcy0+aXRl
bShpKSktPnN0eWxlKCk7CisgICAgICAgICAgICAgICAgc3R5bGUtPm1lcmdlKHMuZ2V0KCksIHRy
dWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCiAgICAgcmV0dXJuIHN0eWxl
LnJlbGVhc2UoKTsKIH0KIAordm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxl
bWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgYWRkRGlzcGxh
eUlubGluZSwgUmFuZ2VGdWxseVNlbGVjdHNOb2RlIHJhbmdlRnVsbHlTZWxlY3RzTm9kZSkKK3sK
KyAgICBib29sIGRvY3VtZW50SXNIVE1MID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9j
dW1lbnQoKTsKKyAgICBhcHBlbmRPcGVuVGFnKG91dCwgZWxlbWVudCwgMCk7CisKKyAgICBOYW1l
ZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSBlbGVtZW50LT5hdHRyaWJ1dGVzKCk7CisgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gYXR0cmlidXRlcy0+bGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9
IGF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0oaSk7CisgICAgICAgIC8vIFdlJ2xsIGhhbmRsZSB0
aGUgc3R5bGUgYXR0cmlidXRlIHNlcGFyYXRlbHksIGJlbG93LgorICAgICAgICBpZiAoYXR0cmli
dXRlLT5uYW1lKCkgPT0gc3R5bGVBdHRyICYmIGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiAo
c2hvdWxkQW5ub3RhdGUoKSB8fCBhZGREaXNwbGF5SW5saW5lKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBhcHBlbmRBdHRyaWJ1dGUob3V0LCBlbGVtZW50LCAqYXR0cmlidXRlLCAw
KTsKKyAgICB9CisKKyAgICBpZiAoZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpICYmIChzaG91bGRB
bm5vdGF0ZSgpIHx8IGFkZERpc3BsYXlJbmxpbmUpKSB7CisgICAgICAgIFJlZlB0cjxDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbj4gc3R5bGUgPSBzdGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KGVs
ZW1lbnQpLT5nZXRJbmxpbmVTdHlsZURlY2woKS0+Y29weSgpOworICAgICAgICBpZiAoc2hvdWxk
QW5ub3RhdGUoKSkgeworICAgICAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uPiBzdHlsZUZyb21NYXRjaGVkUnVsZXMgPSBzdHlsZUZyb21NYXRjaGVkUnVsZXNGb3JFbGVt
ZW50KGNvbnN0X2Nhc3Q8RWxlbWVudCo+KGVsZW1lbnQpKTsKKyAgICAgICAgICAgIC8vIFN0eWxl
cyBmcm9tIHRoZSBpbmxpbmUgc3R5bGUgZGVjbGFyYXRpb24sIGhlbGQgaW4gdGhlIHZhcmlhYmxl
ICJzdHlsZSIsIHRha2UgcHJlY2VkZW5jZSAKKyAgICAgICAgICAgIC8vIG92ZXIgdGhvc2UgZnJv
bSBtYXRjaGVkIHJ1bGVzLgorICAgICAgICAgICAgc3R5bGVGcm9tTWF0Y2hlZFJ1bGVzLT5tZXJn
ZShzdHlsZS5nZXQoKSk7CisgICAgICAgICAgICBzdHlsZSA9IHN0eWxlRnJvbU1hdGNoZWRSdWxl
czsKKworICAgICAgICAgICAgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbj4gY29t
cHV0ZWRTdHlsZUZvckVsZW1lbnQgPSBjb21wdXRlZFN0eWxlKGVsZW1lbnQpOworICAgICAgICAg
ICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBmcm9tQ29tcHV0ZWRTdHlsZSA9
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKTsKKworICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBzdHlsZS0+ZW5kKCk7CisgICAgICAgICAgICAgICAgZm9yIChDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdHlsZS0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5JiBwcm9w
ZXJ0eSA9ICppdDsKKyAgICAgICAgICAgICAgICAgICAgQ1NTVmFsdWUqIHZhbHVlID0gcHJvcGVy
dHkudmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHByb3BlcnR5IHZhbHVlLCBp
ZiBpdCdzIGEgcGVyY2VudGFnZSwgbWF5IG5vdCByZWZsZWN0IHRoZSBhY3R1YWwgY29tcHV0ZWQg
dmFsdWUuICAKKyAgICAgICAgICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGU6IHN0eWxlPSJoZWln
aHQ6IDElOyBvdmVyZmxvdzogdmlzaWJsZTsiIGluIHF1aXJrc21vZGUKKyAgICAgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IFRoZXJlIGFyZSBvdGhlcnMgbGlrZSB0aGlzLCBzZWUgPHJkYXI6Ly9w
cm9ibGVtLzUxOTUxMjM+IFNsYXNoZG90IGNvcHkvcGFzdGUgZmlkZWxpdHkgcHJvYmxlbQorICAg
ICAgICAgICAgICAgICAgICBpZiAodmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpD
U1NfUFJJTUlUSVZFX1ZBTFVFKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChSZWZQdHI8Q1NTVmFsdWU+IGNvbXB1dGVkUHJvcGVydHlWYWx1ZSA9IGNvbXB1dGVkU3R5
bGVGb3JFbGVtZW50LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5LmlkKCkpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tQ29tcHV0ZWRTdHlsZS0+YWRkUGFyc2VkUHJv
cGVydHkoQ1NTUHJvcGVydHkocHJvcGVydHkuaWQoKSwgY29tcHV0ZWRQcm9wZXJ0eVZhbHVlKSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgc3R5bGUtPm1l
cmdlKGZyb21Db21wdXRlZFN0eWxlLmdldCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYWRk
RGlzcGxheUlubGluZSkKKyAgICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0
eURpc3BsYXksIENTU1ZhbHVlSW5saW5lLCB0cnVlKTsKKyAgICAgICAgLy8gSWYgdGhlIG5vZGUg
aXMgbm90IGZ1bGx5IHNlbGVjdGVkIGJ5IHRoZSByYW5nZSwgdGhlbiB3ZSBkb24ndCB3YW50IHRv
IGtlZXAgc3R5bGVzIHRoYXQgYWZmZWN0IGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIG5vZGVzIGFy
b3VuZCBpdAorICAgICAgICAvLyBvbmx5IHRoZSBvbmVzIHRoYXQgYWZmZWN0IGl0IGFuZCB0aGUg
bm9kZXMgd2l0aGluIGl0LgorICAgICAgICBpZiAocmFuZ2VGdWxseVNlbGVjdHNOb2RlID09IERv
ZXNOb3RGdWxseVNlbGVjdE5vZGUpCisgICAgICAgICAgICByZW1vdmVFeHRlcmlvclN0eWxlcyhz
dHlsZS5nZXQoKSk7CisgICAgICAgIGlmIChzdHlsZS0+bGVuZ3RoKCkgPiAwKSB7CisgICAgICAg
ICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0IFN0cmluZywgc3R5bGVQcmVmaXgsICgiIHN0
eWxlPVwiIikpOworICAgICAgICAgICAgYXBwZW5kKG91dCwgc3R5bGVQcmVmaXgpOworICAgICAg
ICAgICAgYXBwZW5kQXR0cmlidXRlVmFsdWUob3V0LCBzdHlsZS0+Y3NzVGV4dCgpLCBkb2N1bWVu
dElzSFRNTCk7CisgICAgICAgICAgICBvdXQuYXBwZW5kKCdcIicpOworICAgICAgICB9CisgICAg
fQorCisgICAgYXBwZW5kQ2xvc2VUYWcob3V0LCBlbGVtZW50KTsKK30KKwordm9pZCBTdHlsZWRN
YXJrdXBBY2N1bXVsYXRvcjo6cmVtb3ZlRXh0ZXJpb3JTdHlsZXMoQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qIHN0eWxlKQoreworICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0
eUZsb2F0KTsKK30KKwogc3RhdGljIE5vZGUqIHNlcmlhbGl6ZU5vZGVzKFN0eWxlZE1hcmt1cEFj
Y3VtdWxhdG9yJiBhY2N1bXVsYXRvciwgTm9kZSogc3RhcnROb2RlLCBOb2RlKiBwYXN0RW5kKQog
ewogICAgIFZlY3RvcjxOb2RlKj4gYW5jZXN0b3JzVG9DbG9zZTsKQEAgLTkzNSw2ICs4OTUsMjkg
QEAgc3RhdGljIGJvb2wgcHJvcGVydHlNaXNzaW5nT3JFcXVhbFRvTm9uZQogICAgIHJldHVybiBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlLmdldCgpKS0+Z2V0SWRlbnQoKSA9
PSBDU1NWYWx1ZU5vbmU7CiB9CiAKK3N0YXRpYyBib29sIG5lZWRJbnRlcmNoYW5nZU5ld2xpbmVB
ZnRlcihjb25zdCBWaXNpYmxlUG9zaXRpb24mIHYpCit7CisgICAgVmlzaWJsZVBvc2l0aW9uIG5l
eHQgPSB2Lm5leHQoKTsKKyAgICBOb2RlKiB1cHN0cmVhbU5vZGUgPSBuZXh0LmRlZXBFcXVpdmFs
ZW50KCkudXBzdHJlYW0oKS5ub2RlKCk7CisgICAgTm9kZSogZG93bnN0cmVhbU5vZGUgPSB2LmRl
ZXBFcXVpdmFsZW50KCkuZG93bnN0cmVhbSgpLm5vZGUoKTsKKyAgICAvLyBBZGQgYW4gaW50ZXJj
aGFuZ2UgbmV3bGluZSBpZiBhIHBhcmFncmFwaCBicmVhayBpcyBzZWxlY3RlZCBhbmQgYSBiciB3
b24ndCBhbHJlYWR5IGJlIGFkZGVkIHRvIHRoZSBtYXJrdXAgdG8gcmVwcmVzZW50IGl0LgorICAg
IHJldHVybiBpc0VuZE9mUGFyYWdyYXBoKHYpICYmIGlzU3RhcnRPZlBhcmFncmFwaChuZXh0KSAm
JiAhKHVwc3RyZWFtTm9kZS0+aGFzVGFnTmFtZShiclRhZykgJiYgdXBzdHJlYW1Ob2RlID09IGRv
d25zdHJlYW1Ob2RlKTsKK30KKworc3RhdGljIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24+IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0FuZElubGluZURlY2woY29uc3QgTm9kZSog
bm9kZSkKK3sKKyAgICBpZiAoIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICAvLyBGSVhNRTogSGF2aW5nIHRvIGNvbnN0X2Nhc3QgaGVyZSBpcyB1Z2x5LCBi
dXQgaXQgaXMgcXVpdGUgYSBiaXQgb2Ygd29yayB0byB1bnRhbmdsZQorICAgIC8vIHRoZSBub24t
Y29uc3QtbmVzcyBvZiBzdHlsZUZyb21NYXRjaGVkUnVsZXNGb3JFbGVtZW50LgorICAgIEhUTUxF
bGVtZW50KiBlbGVtZW50ID0gY29uc3RfY2FzdDxIVE1MRWxlbWVudCo+KHN0YXRpY19jYXN0PGNv
bnN0IEhUTUxFbGVtZW50Kj4obm9kZSkpOworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbj4gc3R5bGUgPSBzdHlsZUZyb21NYXRjaGVkUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQp
OworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gaW5saW5lU3R5bGVEZWNs
ID0gZWxlbWVudC0+Z2V0SW5saW5lU3R5bGVEZWNsKCk7CisgICAgc3R5bGUtPm1lcmdlKGlubGlu
ZVN0eWxlRGVjbC5nZXQoKSk7CisgICAgcmV0dXJuIHN0eWxlLnJlbGVhc2UoKTsKK30KKwogc3Rh
dGljIGJvb2wgaXNFbGVtZW50UHJlc2VudGF0aW9uYWwoY29uc3QgTm9kZSogbm9kZSkKIHsKICAg
ICBpZiAobm9kZS0+aGFzVGFnTmFtZSh1VGFnKSB8fCBub2RlLT5oYXNUYWdOYW1lKHNUYWcpIHx8
IG5vZGUtPmhhc1RhZ05hbWUoc3RyaWtlVGFnKQpAQCAtOTk5LDYgKzk4MiwyMyBAQCBzdGF0aWMg
Tm9kZSogaGlnaGVzdEFuY2VzdG9yVG9XcmFwTWFya3VwCiAgICAgcmV0dXJuIHNwZWNpYWxDb21t
b25BbmNlc3RvcjsKIH0KIAorc3RhdGljIHZvaWQgcmVtb3ZlRW5jbG9zaW5nTWFpbEJsb2NrcXVv
dGVTdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIE5vZGUqIG5vZGUpCit7
CisgICAgTm9kZSogYmxvY2txdW90ZSA9IG5lYXJlc3RNYWlsQmxvY2txdW90ZShub2RlKTsKKyAg
ICBpZiAoIWJsb2NrcXVvdGUgfHwgIWJsb2NrcXVvdGUtPnBhcmVudE5vZGUoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgcmVtb3ZlU3R5bGVzQWRkZWRCeU5vZGUoc3R5bGUsIGJsb2NrcXVvdGUp
OworfQorCitzdGF0aWMgdm9pZCByZW1vdmVEZWZhdWx0U3R5bGVzKENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKiBzdHlsZSwgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIGlmICghZG9jdW1l
bnQgfHwgIWRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgcHJlcGFyZUVkaXRpbmdTdHlsZVRvQXBwbHlBdChzdHlsZSwgUG9zaXRpb24oZG9jdW1lbnQt
PmRvY3VtZW50RWxlbWVudCgpLCAwKSk7Cit9CisKIC8vIEZJWE1FOiBTaG91bGRuJ3Qgd2Ugb21p
dCBzdHlsZSBpbmZvIHdoZW4gYW5ub3RhdGUgPT0gRG9Ob3RBbm5vdGF0ZUZvckludGVyY2hhbmdl
PyAKIC8vIEZJWE1FOiBBdCBsZWFzdCwgYW5ub3RhdGlvbiBhbmQgc3R5bGUgaW5mbyBzaG91bGQg
cHJvYmFibHkgbm90IGJlIGluY2x1ZGVkIGluIHJhbmdlLm1hcmt1cFN0cmluZygpCiBTdHJpbmcg
Y3JlYXRlTWFya3VwKGNvbnN0IFJhbmdlKiByYW5nZSwgVmVjdG9yPE5vZGUqPiogbm9kZXMsIEVB
bm5vdGF0ZUZvckludGVyY2hhbmdlIHNob3VsZEFubm90YXRlLCBib29sIGNvbnZlcnRCbG9ja3NU
b0lubGluZXMsIEVBYnNvbHV0ZVVSTHMgc2hvdWxkUmVzb2x2ZVVSTHMpCg==
</data>
<flag name="review"
          id="56614"
          type_id="1"
          status="+"
          setter="tkent"
    />
          </attachment>
      

    </bug>

</bugzilla>