<?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>122737</bug_id>
          
          <creation_ts>2013-10-13 19:55:42 -0700</creation_ts>
          <short_desc>CTTE: Add more node conversion helpers</short_desc>
          <delta_ts>2013-10-14 11:44:22 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>bfulgham</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>939342</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-10-13 19:55:42 -0700</bug_when>
    <thetext>CTTE: Add more node conversion helpers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939343</commentid>
    <comment_count>1</comment_count>
      <attachid>214122</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-10-13 20:00:05 -0700</bug_when>
    <thetext>Created attachment 214122
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939344</commentid>
    <comment_count>2</comment_count>
      <attachid>214122</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-10-13 20:37:53 -0700</bug_when>
    <thetext>Comment on attachment 214122
Patch

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

Way to many of these casts are being done on pointers when we know the pointer is non-null and the cast should be on a reference. I would have made that change in many of the call sites you touched here.

&gt; Source/WebCore/dom/Attr.h:106
&gt; +inline bool isAttr(const Node&amp; node) { return node.isAttributeNode(); }
&gt; +void isAttr(const Attr&amp;); // Catch unnecessary runtime check of type known at compile time.

For some reason, when adding these for the various element classes I always put these in the opposite order, with the most specific class first and heading down to less and less specific ones afterward.

&gt; Source/WebCore/dom/CDATASection.h:46
&gt; +void isCDATASection(const ContainerNode&amp;); // Catch unnecessary runtime check of type known at compile time.

Wonder how many other ones like this we should do? Clearly we could have a ton of these.

&gt; Source/WebCore/dom/Document.h:1627
&gt; +inline bool isDocument(const Node&amp; node) { return node.isDocumentNode(); }
&gt; +void isDocument(const Document&amp;); // Catch unnecessary runtime check of type known at compile time.
&gt;  NODE_TYPE_CASTS(Document)

In other places we left a blank line before NODE_TYPE_CASTS.

&gt; Source/WebCore/dom/Node.h:721
&gt; +#define TYPE_CASTS_IMPL(ToClassName, FromClassName) \

IMPL is so ugly. Maybe TYPE_CASTS_SUITE? I dunno.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939478</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-10-14 09:50:44 -0700</bug_when>
    <thetext>Committed r157405: &lt;http://trac.webkit.org/changeset/157405&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>939571</commentid>
    <comment_count>4</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2013-10-14 11:44:22 -0700</bug_when>
    <thetext>A follow-up patch to resolve a build error on Windows was landed here:

Committed r157410: &lt;http://trac.webkit.org/changeset/157410&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>214122</attachid>
            <date>2013-10-13 20:00:05 -0700</date>
            <delta_ts>2013-10-13 20:37:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-122737-20131013200004.patch</filename>
            <type>text/plain</type>
            <size>35421</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NzM4NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEzLTEwLTEzICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ1RURTogQWRkIG1vcmUgbm9kZSBjb252
ZXJzaW9uIGhlbHBlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyMjczNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIC0gRmFjdG9yIE5PREVfVFlQRV9DQVNUUyBpbnRvIFRZUEVfQ0FTVFNfSU1QTChUb0Ns
YXNzTmFtZSwgRnJvbUNsYXNzTmFtZSkKKyAgICAgICAgICB0byBhbGxvdyBmb3IgRE9DVU1FTlRf
VFlQRV9DQVNUUy4KKyAgICAgICAgLSBSZXBsYWNlIG1vcmUgc3RhdGljX2Nhc3RzPD4uCisKIDIw
MTMtMTAtMTMgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBNZXJnZSBO
T0RFX1RZUEVfQ0FTVFMgYW5kIEVMRU1FTlRfVFlQRV9DQVNUUwpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0F0dHIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5oCShy
ZXZpc2lvbiAxNTczODQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDIsNiArMTAyLDExIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3NwZWNpZmllZCA6
IDE7CiB9OwogCitpbmxpbmUgYm9vbCBpc0F0dHIoY29uc3QgTm9kZSYgbm9kZSkgeyByZXR1cm4g
bm9kZS5pc0F0dHJpYnV0ZU5vZGUoKTsgfQordm9pZCBpc0F0dHIoY29uc3QgQXR0ciYpOyAvLyBD
YXRjaCB1bm5lY2Vzc2FyeSBydW50aW1lIGNoZWNrIG9mIHR5cGUga25vd24gYXQgY29tcGlsZSB0
aW1lLgorCitOT0RFX1RZUEVfQ0FTVFMoQXR0cikKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gQXR0cl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ0RBVEFTZWN0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NEQVRBU2VjdGlvbi5oCShyZXZp
c2lvbiAxNTczODQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ0RBVEFTZWN0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQxLDEwICs0MSw5IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPFRleHQ+IHZpcnR1YWxDcmVhdGUoY29uc3QgU3RyaW5nJikgT1ZFUlJJREU7CiB9OwogCi1p
bmxpbmUgYm9vbCBpc0NEQVRBU2VjdGlvbihjb25zdCBOb2RlJiBub2RlKQotewotICAgIHJldHVy
biBub2RlLm5vZGVUeXBlKCkgPT0gTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFOwotfQoraW5saW5l
IGJvb2wgaXNDREFUQVNlY3Rpb24oY29uc3QgTm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5ub2Rl
VHlwZSgpID09IE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERTsgfQordm9pZCBpc0NEQVRBU2VjdGlv
bihjb25zdCBDREFUQVNlY3Rpb24mKTsgLy8gQ2F0Y2ggdW5uZWNlc3NhcnkgcnVudGltZSBjaGVj
ayBvZiB0eXBlIGtub3duIGF0IGNvbXBpbGUgdGltZS4KK3ZvaWQgaXNDREFUQVNlY3Rpb24oY29u
c3QgQ29udGFpbmVyTm9kZSYpOyAvLyBDYXRjaCB1bm5lY2Vzc2FyeSBydW50aW1lIGNoZWNrIG9m
IHR5cGUga25vd24gYXQgY29tcGlsZSB0aW1lLgogCiBOT0RFX1RZUEVfQ0FTVFMoQ0RBVEFTZWN0
aW9uKQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmgJKHJldmlzaW9uIDE1NzM4
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTc0LDYgKzc0LDEyIEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fZGF0YTsKIH07CiAKK2lu
bGluZSBib29sIGlzQ2hhcmFjdGVyRGF0YShjb25zdCBOb2RlJiBub2RlKSB7IHJldHVybiBub2Rl
LmlzQ2hhcmFjdGVyRGF0YU5vZGUoKTsgfQordm9pZCBpc0NoYXJhY3RlckRhdGEoY29uc3QgQ2hh
cmFjdGVyRGF0YSYpOyAvLyBDYXRjaCB1bm5lY2Vzc2FyeSBydW50aW1lIGNoZWNrIG9mIHR5cGUg
a25vd24gYXQgY29tcGlsZSB0aW1lLgordm9pZCBpc0NoYXJhY3RlckRhdGEoY29uc3QgQ29udGFp
bmVyTm9kZSYpOyAvLyBDYXRjaCB1bm5lY2Vzc2FyeSBydW50aW1lIGNoZWNrIG9mIHR5cGUga25v
d24gYXQgY29tcGlsZSB0aW1lLgorCitOT0RFX1RZUEVfQ0FTVFMoQ2hhcmFjdGVyRGF0YSkKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gQ2hhcmFjdGVyRGF0YV9oCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29tbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9Db21tZW50LmgJKHJldmlzaW9uIDE1NzM4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Db21tZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDEwICs0MCw5IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCBib29sIGNoaWxkVHlwZUFsbG93ZWQoTm9kZVR5cGUpIGNvbnN0OwogfTsKIAot
aW5saW5lIGJvb2wgaXNDb21tZW50KGNvbnN0IE5vZGUmIG5vZGUpCi17Ci0gICAgcmV0dXJuIG5v
ZGUubm9kZVR5cGUoKSA9PSBOb2RlOjpDT01NRU5UX05PREU7Ci19CitpbmxpbmUgYm9vbCBpc0Nv
bW1lbnQoY29uc3QgTm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5ub2RlVHlwZSgpID09IE5vZGU6
OkNPTU1FTlRfTk9ERTsgfQordm9pZCBpc0NvbW1lbnQoY29uc3QgQ29tbWVudCYpOyAvLyBDYXRj
aCB1bm5lY2Vzc2FyeSBydW50aW1lIGNoZWNrIG9mIHR5cGUga25vd24gYXQgY29tcGlsZSB0aW1l
Lgordm9pZCBpc0NvbW1lbnQoY29uc3QgQ29udGFpbmVyTm9kZSYpOyAvLyBDYXRjaCB1bm5lY2Vz
c2FyeSBydW50aW1lIGNoZWNrIG9mIHR5cGUga25vd24gYXQgY29tcGlsZSB0aW1lLgogCiBOT0RF
X1RZUEVfQ0FTVFMoQ29tbWVudCkKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5l
ck5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5o
CShyZXZpc2lvbiAxNTczODQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsMzIgKzE3MCwxMCBAQCBwcml2YXRlOgogICAgIE5vZGUq
IG1fbGFzdENoaWxkOwogfTsKIAotaW5saW5lIENvbnRhaW5lck5vZGUqIHRvQ29udGFpbmVyTm9k
ZShOb2RlKiBub2RlKQotewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFu
b2RlIHx8IG5vZGUtPmlzQ29udGFpbmVyTm9kZSgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Q29udGFpbmVyTm9kZSo+KG5vZGUpOwotfQotCi1pbmxpbmUgY29uc3QgQ29udGFpbmVyTm9kZSog
dG9Db250YWluZXJOb2RlKGNvbnN0IE5vZGUqIG5vZGUpCi17Ci0gICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oIW5vZGUgfHwgbm9kZS0+aXNDb250YWluZXJOb2RlKCkpOwotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDb250YWluZXJOb2RlKj4obm9kZSk7Ci19Ci0KLWlu
bGluZSBDb250YWluZXJOb2RlJiB0b0NvbnRhaW5lck5vZGUoTm9kZSYgbm9kZSkKLXsKLSAgICBB
U1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihub2RlLmlzQ29udGFpbmVyTm9kZSgpKTsK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29udGFpbmVyTm9kZSY+KG5vZGUpOwotfQotaW5saW5l
IGNvbnN0IENvbnRhaW5lck5vZGUmIHRvQ29udGFpbmVyTm9kZShjb25zdCBOb2RlJiBub2RlKQot
ewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG5vZGUuaXNDb250YWluZXJO
b2RlKCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDb250YWluZXJOb2RlJj4obm9k
ZSk7Ci19CitpbmxpbmUgYm9vbCBpc0NvbnRhaW5lck5vZGUoY29uc3QgTm9kZSYgbm9kZSkgeyBy
ZXR1cm4gbm9kZS5pc0NvbnRhaW5lck5vZGUoKTsgfQordm9pZCBpc0NvbnRhaW5lck5vZGUoY29u
c3QgQ29udGFpbmVyTm9kZSYpOyAvLyBDYXRjaCB1bm5lY2Vzc2FyeSBydW50aW1lIGNoZWNrIG9m
IHR5cGUga25vd24gYXQgY29tcGlsZSB0aW1lLgogCi0vLyBUaGlzIHdpbGwgY2F0Y2ggYW55b25l
IGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCi12b2lkIHRvQ29udGFpbmVyTm9kZShjb25zdCBD
b250YWluZXJOb2RlKik7Ci12b2lkIHRvQ29udGFpbmVyTm9kZShjb25zdCBDb250YWluZXJOb2Rl
Jik7CitOT0RFX1RZUEVfQ0FTVFMoQ29udGFpbmVyTm9kZSkKIAogaW5saW5lIENvbnRhaW5lck5v
ZGU6OkNvbnRhaW5lck5vZGUoRG9jdW1lbnQqIGRvY3VtZW50LCBDb25zdHJ1Y3Rpb25UeXBlIHR5
cGUpCiAgICAgOiBOb2RlKGRvY3VtZW50LCB0eXBlKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCShyZXZpc2lvbiAxNTczODQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04OTksMTkgKzg5OSwxOSBAQCBQYXNzUmVmUHRyPE5vZGU+IERv
Y3VtZW50OjppbXBvcnROb2RlKE5vCiAgICAgY2FzZSBDT01NRU5UX05PREU6CiAgICAgICAgIHJl
dHVybiBjcmVhdGVDb21tZW50KGltcG9ydGVkTm9kZS0+bm9kZVZhbHVlKCkpOwogICAgIGNhc2Ug
RUxFTUVOVF9OT0RFOiB7Ci0gICAgICAgIEVsZW1lbnQqIG9sZEVsZW1lbnQgPSB0b0VsZW1lbnQo
aW1wb3J0ZWROb2RlKTsKKyAgICAgICAgRWxlbWVudCYgb2xkRWxlbWVudCA9IHRvRWxlbWVudCgq
aW1wb3J0ZWROb2RlKTsKICAgICAgICAgLy8gRklYTUU6IFRoZSBmb2xsb3dpbmcgY2hlY2sgbWln
aHQgYmUgdW5uZWNlc3NhcnkuIElzIGl0IHBvc3NpYmxlIHRoYXQKICAgICAgICAgLy8gb2xkRWxl
bWVudCBoYXMgbWlzbWF0Y2hlZCBwcmVmaXgvbmFtZXNwYWNlPwotICAgICAgICBpZiAoIWhhc1Zh
bGlkTmFtZXNwYWNlRm9yRWxlbWVudHMob2xkRWxlbWVudC0+dGFnUU5hbWUoKSkpIHsKKyAgICAg
ICAgaWYgKCFoYXNWYWxpZE5hbWVzcGFjZUZvckVsZW1lbnRzKG9sZEVsZW1lbnQudGFnUU5hbWUo
KSkpIHsKICAgICAgICAgICAgIGVjID0gTkFNRVNQQUNFX0VSUjsKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxFbGVtZW50PiBuZXdFbGVtZW50
ID0gY3JlYXRlRWxlbWVudChvbGRFbGVtZW50LT50YWdRTmFtZSgpLCBmYWxzZSk7CiAKLSAgICAg
ICAgbmV3RWxlbWVudC0+Y2xvbmVEYXRhRnJvbUVsZW1lbnQoKm9sZEVsZW1lbnQpOworICAgICAg
ICBSZWZQdHI8RWxlbWVudD4gbmV3RWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQob2xkRWxlbWVudC50
YWdRTmFtZSgpLCBmYWxzZSk7CisgICAgICAgIG5ld0VsZW1lbnQtPmNsb25lRGF0YUZyb21FbGVt
ZW50KG9sZEVsZW1lbnQpOwogCiAgICAgICAgIGlmIChkZWVwKSB7Ci0gICAgICAgICAgICBmb3Ig
KE5vZGUqIG9sZENoaWxkID0gb2xkRWxlbWVudC0+Zmlyc3RDaGlsZCgpOyBvbGRDaGlsZDsgb2xk
Q2hpbGQgPSBvbGRDaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICAgICAgZm9yIChOb2Rl
KiBvbGRDaGlsZCA9IG9sZEVsZW1lbnQuZmlyc3RDaGlsZCgpOyBvbGRDaGlsZDsgb2xkQ2hpbGQg
PSBvbGRDaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICAgICAgICAgIFJlZlB0cjxOb2Rl
PiBuZXdDaGlsZCA9IGltcG9ydE5vZGUob2xkQ2hpbGQsIHRydWUsIGVjKTsKICAgICAgICAgICAg
ICAgICBpZiAoZWMpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtOTI0
LDE3ICs5MjQsMTcgQEAgUGFzc1JlZlB0cjxOb2RlPiBEb2N1bWVudDo6aW1wb3J0Tm9kZShObwog
ICAgICAgICByZXR1cm4gbmV3RWxlbWVudC5yZWxlYXNlKCk7CiAgICAgfQogICAgIGNhc2UgQVRU
UklCVVRFX05PREU6Ci0gICAgICAgIHJldHVybiBBdHRyOjpjcmVhdGUoKnRoaXMsIFF1YWxpZmll
ZE5hbWUobnVsbEF0b20sIHN0YXRpY19jYXN0PEF0dHIqPihpbXBvcnRlZE5vZGUpLT5uYW1lKCks
IG51bGxBdG9tKSwgc3RhdGljX2Nhc3Q8QXR0cio+KGltcG9ydGVkTm9kZSktPnZhbHVlKCkpOwor
ICAgICAgICByZXR1cm4gQXR0cjo6Y3JlYXRlKCp0aGlzLCBRdWFsaWZpZWROYW1lKG51bGxBdG9t
LCB0b0F0dHIoKmltcG9ydGVkTm9kZSkubmFtZSgpLCBudWxsQXRvbSksIHRvQXR0cigqaW1wb3J0
ZWROb2RlKS52YWx1ZSgpKTsKICAgICBjYXNlIERPQ1VNRU5UX0ZSQUdNRU5UX05PREU6IHsKICAg
ICAgICAgaWYgKGltcG9ydGVkTm9kZS0+aXNTaGFkb3dSb290KCkpIHsKICAgICAgICAgICAgIC8v
IFNoYWRvd1Jvb3Qgbm9kZXMgc2hvdWxkIG5vdCBiZSBleHBsaWNpdGx5IGltcG9ydGFibGUuCiAg
ICAgICAgICAgICAvLyBFaXRoZXIgdGhleSBhcmUgaW1wb3J0ZWQgYWxvbmcgd2l0aCB0aGVpciBo
b3N0IG5vZGUsIG9yIGNyZWF0ZWQgaW1wbGljaXRseS4KICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9Ci0gICAgICAgIERvY3VtZW50RnJhZ21lbnQqIG9sZEZyYWdtZW50ID0gc3RhdGljX2Nh
c3Q8RG9jdW1lbnRGcmFnbWVudCo+KGltcG9ydGVkTm9kZSk7CisgICAgICAgIERvY3VtZW50RnJh
Z21lbnQmIG9sZEZyYWdtZW50ID0gdG9Eb2N1bWVudEZyYWdtZW50KCppbXBvcnRlZE5vZGUpOwog
ICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gbmV3RnJhZ21lbnQgPSBjcmVhdGVEb2N1
bWVudEZyYWdtZW50KCk7CiAgICAgICAgIGlmIChkZWVwKSB7Ci0gICAgICAgICAgICBmb3IgKE5v
ZGUqIG9sZENoaWxkID0gb2xkRnJhZ21lbnQtPmZpcnN0Q2hpbGQoKTsgb2xkQ2hpbGQ7IG9sZENo
aWxkID0gb2xkQ2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9kZSog
b2xkQ2hpbGQgPSBvbGRGcmFnbWVudC5maXJzdENoaWxkKCk7IG9sZENoaWxkOyBvbGRDaGlsZCA9
IG9sZENoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgICAgICAgICAgUmVmUHRyPE5vZGU+
IG5ld0NoaWxkID0gaW1wb3J0Tm9kZShvbGRDaGlsZCwgdHJ1ZSwgZWMpOwogICAgICAgICAgICAg
ICAgIGlmIChlYykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC05ODMs
NyArOTgzLDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBEb2N1bWVudDo6YWRvcHROb2RlKFBhcwogICAg
ICAgICBlYyA9IE5PVF9TVVBQT1JURURfRVJSOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICBjYXNlIEFUVFJJQlVURV9OT0RFOiB7ICAgICAgICAgICAgICAgICAgIAotICAgICAgICBBdHRy
JiBhdHRyID0gc3RhdGljX2Nhc3Q8QXR0ciY+KCpzb3VyY2UpOworICAgICAgICBBdHRyJiBhdHRy
ID0gdG9BdHRyKCpzb3VyY2UpOwogICAgICAgICBpZiAoYXR0ci5vd25lckVsZW1lbnQoKSkKICAg
ICAgICAgICAgIGF0dHIub3duZXJFbGVtZW50KCktPnJlbW92ZUF0dHJpYnV0ZU5vZGUoJmF0dHIs
IGVjKTsKICAgICAgICAgYXR0ci5zZXRTcGVjaWZpZWQodHJ1ZSk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuaAkocmV2aXNpb24gMTU3Mzg0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MjIsMTMgKzE2MjIsMTIgQEAgaW5saW5lIGNvbnN0IERv
Y3VtZW50KiB0b0RvY3VtZW50KGNvbnN0IAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBE
b2N1bWVudCo+KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOwogfQogCi1pbmxpbmUgYm9vbCBpc0Rv
Y3VtZW50KGNvbnN0IE5vZGUmIG5vZGUpCi17Ci0gICAgcmV0dXJuIG5vZGUuaXNEb2N1bWVudE5v
ZGUoKTsKLX0KLQoraW5saW5lIGJvb2wgaXNEb2N1bWVudChjb25zdCBOb2RlJiBub2RlKSB7IHJl
dHVybiBub2RlLmlzRG9jdW1lbnROb2RlKCk7IH0KK3ZvaWQgaXNEb2N1bWVudChjb25zdCBEb2N1
bWVudCYpOyAvLyBDYXRjaCB1bm5lY2Vzc2FyeSBydW50aW1lIGNoZWNrIG9mIHR5cGUga25vd24g
YXQgY29tcGlsZSB0aW1lLgogTk9ERV9UWVBFX0NBU1RTKERvY3VtZW50KQogCisjZGVmaW5lIERP
Q1VNRU5UX1RZUEVfQ0FTVFMoVG9DbGFzc05hbWUpIFRZUEVfQ0FTVFNfSU1QTChUb0NsYXNzTmFt
ZSwgRG9jdW1lbnQpCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogbmFtZXNwYWNlIFdURiB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRGcmFnbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEZyYWdtZW50LmgJKHJldmlzaW9uIDE1NzM4
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEZyYWdtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDYgKzQ5LDExIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGNoaWxkVHlw
ZUFsbG93ZWQoTm9kZVR5cGUpIGNvbnN0IE9WRVJSSURFOwogfTsKIAoraW5saW5lIGJvb2wgaXNE
b2N1bWVudEZyYWdtZW50KGNvbnN0IE5vZGUmIG5vZGUpIHsgcmV0dXJuIG5vZGUuaXNEb2N1bWVu
dEZyYWdtZW50KCk7IH0KK3ZvaWQgaXNEb2N1bWVudEZyYWdtZW50KGNvbnN0IERvY3VtZW50RnJh
Z21lbnQmKTsgLy8gQ2F0Y2ggdW5uZWNlc3NhcnkgcnVudGltZSBjaGVjayBvZiB0eXBlIGtub3du
IGF0IGNvbXBpbGUgdGltZS4KKworTk9ERV9UWVBFX0NBU1RTKERvY3VtZW50RnJhZ21lbnQpCisK
IH0gLy9uYW1lc3BhY2UKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwCShyZXZpc2lvbiAxNTczODQpCisr
KyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2OCw3ICsyNjgsNyBAQCB2b2lkIERvY3VtZW50U3R5bGVTaGVldENv
bGxlY3Rpb246OmNvbGxlCiAgICAgICAgIGlmIChuLT5ub2RlVHlwZSgpID09IE5vZGU6OlBST0NF
U1NJTkdfSU5TVFJVQ1RJT05fTk9ERSkgewogICAgICAgICAgICAgLy8gUHJvY2Vzc2luZyBpbnN0
cnVjdGlvbiAoWE1MIGRvY3VtZW50cyBvbmx5KS4KICAgICAgICAgICAgIC8vIFdlIGRvbid0IHN1
cHBvcnQgbGlua2luZyB0byBlbWJlZGRlZCBDU1Mgc3R5bGVzaGVldHMsIHNlZSA8aHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MjgxPiBmb3IgZGlzY3Vzc2lvbi4KLSAg
ICAgICAgICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiogcGkgPSBzdGF0aWNfY2FzdDxQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24qPihuKTsKKyAgICAgICAgICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlvbiog
cGkgPSB0b1Byb2Nlc3NpbmdJbnN0cnVjdGlvbihuKTsKICAgICAgICAgICAgIHNoZWV0ID0gcGkt
PnNoZWV0KCk7CiAjaWYgRU5BQkxFKFhTTFQpCiAgICAgICAgICAgICAvLyBEb24ndCBhcHBseSBY
U0wgdHJhbnNmb3JtcyB0byBhbHJlYWR5IHRyYW5zZm9ybWVkIGRvY3VtZW50cyAtLSA8cmRhcjov
L3Byb2JsZW0vNDEzMjgwNj4KQEAgLTMxNSwxMSArMzE1LDEyIEBAIHZvaWQgRG9jdW1lbnRTdHls
ZVNoZWV0Q29sbGVjdGlvbjo6Y29sbGUKICAgICAgICAgICAgIGVsc2UKICNlbmRpZgogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGlmIChlLT5oYXNUYWdOYW1lKGxpbmtUYWcpKQotICAg
ICAgICAgICAgICAgICAgICBzaGVldCA9IHN0YXRpY19jYXN0PEhUTUxMaW5rRWxlbWVudCo+KG4p
LT5zaGVldCgpOwotICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpZiAoaXNI
VE1MTGlua0VsZW1lbnQoZSkpCisgICAgICAgICAgICAgICAgICAgIHNoZWV0ID0gdG9IVE1MTGlu
a0VsZW1lbnQobiktPnNoZWV0KCk7CisgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgIC8vIDxTVFlMRT4gZWxlbWVudAogICAgICAgICAgICAgICAgICAgICBzaGVldCA9
IHRvSFRNTFN0eWxlRWxlbWVudChlKS0+c2hlZXQoKTsKKyAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhpcyBzaGVldCBiZWxv
bmdzIHRvIGEgc3R5bGVzZXQKICAgICAgICAgICAgIC8vICh0aHVzIG1ha2luZyBpdCBQUkVGRVJS
RUQgb3IgQUxURVJOQVRFIHJhdGhlciB0aGFuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTmFt
ZWROb2RlTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTmFtZWROb2Rl
TWFwLmNwcAkocmV2aXNpb24gMTU3Mzg0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05hbWVkTm9k
ZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAgUGFzc1JlZlB0cjxOb2Rl
PiBOYW1lZE5vZGVNYXA6OnNldE5hbWVkSQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAg
ICByZXR1cm4gbV9lbGVtZW50LT5zZXRBdHRyaWJ1dGVOb2RlKHN0YXRpY19jYXN0PEF0dHIqPihu
b2RlKSwgZWMpOworICAgIHJldHVybiBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZU5vZGUodG9BdHRy
KG5vZGUpLCBlYyk7CiB9CiAKIFBhc3NSZWZQdHI8Tm9kZT4gTmFtZWROb2RlTWFwOjpzZXROYW1l
ZEl0ZW1OUyhOb2RlKiBub2RlLCBFeGNlcHRpb25Db2RlJiBlYykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5j
cHAJKHJldmlzaW9uIDE1NzM4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTQ0Niw4ICsxNDQ2LDggQEAgdW5zaWduZWQgc2hvcnQgTm9kZTo6Y29t
cGFyZURvY3VtZW50UG9zaQogICAgIGlmIChvdGhlck5vZGUgPT0gdGhpcykKICAgICAgICAgcmV0
dXJuIERPQ1VNRU5UX1BPU0lUSU9OX0VRVUlWQUxFTlQ7CiAgICAgCi0gICAgQXR0ciogYXR0cjEg
PSBub2RlVHlwZSgpID09IEFUVFJJQlVURV9OT0RFID8gc3RhdGljX2Nhc3Q8QXR0cio+KHRoaXMp
IDogMDsKLSAgICBBdHRyKiBhdHRyMiA9IG90aGVyTm9kZS0+bm9kZVR5cGUoKSA9PSBBVFRSSUJV
VEVfTk9ERSA/IHN0YXRpY19jYXN0PEF0dHIqPihvdGhlck5vZGUpIDogMDsKKyAgICBBdHRyKiBh
dHRyMSA9IGlzQXR0cmlidXRlTm9kZSgpID8gdG9BdHRyKHRoaXMpIDogbnVsbHB0cjsKKyAgICBB
dHRyKiBhdHRyMiA9IG90aGVyTm9kZS0+aXNBdHRyaWJ1dGVOb2RlKCkgPyB0b0F0dHIob3RoZXJO
b2RlKSA6IG51bGxwdHI7CiAgICAgCiAgICAgTm9kZSogc3RhcnQxID0gYXR0cjEgPyBhdHRyMS0+
b3duZXJFbGVtZW50KCkgOiB0aGlzOwogICAgIE5vZGUqIHN0YXJ0MiA9IGF0dHIyID8gYXR0cjIt
Pm93bmVyRWxlbWVudCgpIDogb3RoZXJOb2RlOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiAx
NTczODQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03
MTgsMjkgKzcxOCwzMSBAQCBpbmxpbmUgQ29udGFpbmVyTm9kZSogTm9kZTo6cGFyZW50Tm9kZUd1
CiAgICAgcmV0dXJuIHBhcmVudE5vZGUoKTsKIH0KIAotI2RlZmluZSBOT0RFX1RZUEVfQ0FTVFMo
Tm9kZUNsYXNzTmFtZSkgXAotaW5saW5lIGNvbnN0IE5vZGVDbGFzc05hbWUqIHRvIyNOb2RlQ2xh
c3NOYW1lKGNvbnN0IE5vZGUqIG5vZGUpIFwKKyNkZWZpbmUgVFlQRV9DQVNUU19JTVBMKFRvQ2xh
c3NOYW1lLCBGcm9tQ2xhc3NOYW1lKSBcCitpbmxpbmUgY29uc3QgVG9DbGFzc05hbWUqIHRvIyNU
b0NsYXNzTmFtZShjb25zdCBGcm9tQ2xhc3NOYW1lKiBvYmplY3QpIFwKIHsgXAotICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFub2RlIHx8IGlzIyNOb2RlQ2xhc3NOYW1lKCpu
b2RlKSk7IFwKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgTm9kZUNsYXNzTmFtZSo+KG5v
ZGUpOyBcCisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIW9iamVjdCB8fCBp
cyMjVG9DbGFzc05hbWUoKm9iamVjdCkpOyBcCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IFRvQ2xhc3NOYW1lKj4ob2JqZWN0KTsgXAogfSBcCi1pbmxpbmUgTm9kZUNsYXNzTmFtZSogdG8j
I05vZGVDbGFzc05hbWUoTm9kZSogbm9kZSkgXAoraW5saW5lIFRvQ2xhc3NOYW1lKiB0byMjVG9D
bGFzc05hbWUoRnJvbUNsYXNzTmFtZSogb2JqZWN0KSBcCiB7IFwKLSAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTighbm9kZSB8fCBpcyMjTm9kZUNsYXNzTmFtZSgqbm9kZSkpOyBc
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PE5vZGVDbGFzc05hbWUqPihub2RlKTsgXAorICAgIEFT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFvYmplY3QgfHwgaXMjI1RvQ2xhc3NOYW1l
KCpvYmplY3QpKTsgXAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxUb0NsYXNzTmFtZSo+KG9iamVj
dCk7IFwKIH0gXAotaW5saW5lIGNvbnN0IE5vZGVDbGFzc05hbWUmIHRvIyNOb2RlQ2xhc3NOYW1l
KGNvbnN0IE5vZGUmIG5vZGUpIFwKK2lubGluZSBjb25zdCBUb0NsYXNzTmFtZSYgdG8jI1RvQ2xh
c3NOYW1lKGNvbnN0IEZyb21DbGFzc05hbWUmIG9iamVjdCkgXAogeyBcCi0gICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXMjI05vZGVDbGFzc05hbWUobm9kZSkpOyBcCi0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IE5vZGVDbGFzc05hbWUmPihub2RlKTsgXAorICAgIEFT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGlzIyNUb0NsYXNzTmFtZShvYmplY3QpKTsg
XAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBUb0NsYXNzTmFtZSY+KG9iamVjdCk7IFwK
IH0gXAotaW5saW5lIE5vZGVDbGFzc05hbWUmIHRvIyNOb2RlQ2xhc3NOYW1lKE5vZGUmIG5vZGUp
IFwKK2lubGluZSBUb0NsYXNzTmFtZSYgdG8jI1RvQ2xhc3NOYW1lKEZyb21DbGFzc05hbWUmIG9i
amVjdCkgXAogeyBcCi0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXMjI05v
ZGVDbGFzc05hbWUobm9kZSkpOyBcCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PE5vZGVDbGFzc05h
bWUmPihub2RlKTsgXAorICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGlzIyNU
b0NsYXNzTmFtZShvYmplY3QpKTsgXAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxUb0NsYXNzTmFt
ZSY+KG9iamVjdCk7IFwKIH0gXAotdm9pZCB0byMjTm9kZUNsYXNzTmFtZShjb25zdCBOb2RlQ2xh
c3NOYW1lKik7IFwKLXZvaWQgdG8jI05vZGVDbGFzc05hbWUoY29uc3QgTm9kZUNsYXNzTmFtZSYp
Owordm9pZCB0byMjVG9DbGFzc05hbWUoY29uc3QgVG9DbGFzc05hbWUqKTsgXAordm9pZCB0byMj
VG9DbGFzc05hbWUoY29uc3QgVG9DbGFzc05hbWUmKTsKKworI2RlZmluZSBOT0RFX1RZUEVfQ0FT
VFMoVG9DbGFzc05hbWUpIFRZUEVfQ0FTVFNfSU1QTChUb0NsYXNzTmFtZSwgTm9kZSkKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAJKHJldmlzaW9uIDE1
NzM4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY1MCw5ICs2NTAsOSBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxlbmd0aE9mQ29udGVudHNJ
CiAgICAgY2FzZSBOb2RlOjpURVhUX05PREU6CiAgICAgY2FzZSBOb2RlOjpDREFUQV9TRUNUSU9O
X05PREU6CiAgICAgY2FzZSBOb2RlOjpDT01NRU5UX05PREU6Ci0gICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxDaGFyYWN0ZXJEYXRhKj4obm9kZSktPmxlbmd0aCgpOworICAgICAgICByZXR1cm4g
dG9DaGFyYWN0ZXJEYXRhKG5vZGUpLT5sZW5ndGgoKTsKICAgICBjYXNlIE5vZGU6OlBST0NFU1NJ
TkdfSU5TVFJVQ1RJT05fTk9ERToKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFByb2Nlc3Np
bmdJbnN0cnVjdGlvbio+KG5vZGUpLT5kYXRhKCkubGVuZ3RoKCk7CisgICAgICAgIHJldHVybiB0
b1Byb2Nlc3NpbmdJbnN0cnVjdGlvbihub2RlKS0+ZGF0YSgpLmxlbmd0aCgpOwogICAgIGNhc2Ug
Tm9kZTo6RUxFTUVOVF9OT0RFOgogICAgIGNhc2UgTm9kZTo6QVRUUklCVVRFX05PREU6CiAgICAg
Y2FzZSBOb2RlOjpFTlRJVFlfUkVGRVJFTkNFX05PREU6CkBAIC03NzYsOCArNzc2LDcgQEAgc3Rh
dGljIGlubGluZSB2b2lkIGRlbGV0ZUNoYXJhY3RlckRhdGEoUAogICAgICAgICBkYXRhLT5kZWxl
dGVEYXRhKDAsIHN0YXJ0T2Zmc2V0LCBlYyk7CiB9CiAKLVBhc3NSZWZQdHI8Tm9kZT4gUmFuZ2U6
OnByb2Nlc3NDb250ZW50c0JldHdlZW5PZmZzZXRzKEFjdGlvblR5cGUgYWN0aW9uLCBQYXNzUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50LAotICAgIE5vZGUqIGNvbnRhaW5lciwgdW5z
aWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMp
CitQYXNzUmVmUHRyPE5vZGU+IFJhbmdlOjpwcm9jZXNzQ29udGVudHNCZXR3ZWVuT2Zmc2V0cyhB
Y3Rpb25UeXBlIGFjdGlvbiwgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCwg
Tm9kZSogY29udGFpbmVyLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NFUlQoY29udGFpbmVyKTsKICAgICBBU1NF
UlQoc3RhcnRPZmZzZXQgPD0gZW5kT2Zmc2V0KTsKQEAgLTc4OCw3ICs3ODcsNyBAQCBQYXNzUmVm
UHRyPE5vZGU+IFJhbmdlOjpwcm9jZXNzQ29udGVudHNCCiAgICAgY2FzZSBOb2RlOjpURVhUX05P
REU6CiAgICAgY2FzZSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREU6CiAgICAgY2FzZSBOb2RlOjpD
T01NRU5UX05PREU6Ci0gICAgICAgIEFTU0VSVChlbmRPZmZzZXQgPD0gc3RhdGljX2Nhc3Q8Q2hh
cmFjdGVyRGF0YSo+KGNvbnRhaW5lciktPmxlbmd0aCgpKTsKKyAgICAgICAgQVNTRVJUKGVuZE9m
ZnNldCA8PSB0b0NoYXJhY3RlckRhdGEoY29udGFpbmVyKS0+bGVuZ3RoKCkpOwogICAgICAgICBp
ZiAoYWN0aW9uID09IEV4dHJhY3QgfHwgYWN0aW9uID09IENsb25lKSB7CiAgICAgICAgICAgICBS
ZWZQdHI8Q2hhcmFjdGVyRGF0YT4gYyA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8Q2hhcmFjdGVyRGF0
YT4oY29udGFpbmVyLT5jbG9uZU5vZGUodHJ1ZSkpOwogICAgICAgICAgICAgZGVsZXRlQ2hhcmFj
dGVyRGF0YShjLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBlYyk7CkBAIC03OTksMTAgKzc5OCwx
MCBAQCBQYXNzUmVmUHRyPE5vZGU+IFJhbmdlOjpwcm9jZXNzQ29udGVudHNCCiAgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gYy5yZWxlYXNlKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGFjdGlv
biA9PSBFeHRyYWN0IHx8IGFjdGlvbiA9PSBEZWxldGUpCi0gICAgICAgICAgICBzdGF0aWNfY2Fz
dDxDaGFyYWN0ZXJEYXRhKj4oY29udGFpbmVyKS0+ZGVsZXRlRGF0YShzdGFydE9mZnNldCwgZW5k
T2Zmc2V0IC0gc3RhcnRPZmZzZXQsIGVjKTsKKyAgICAgICAgICAgIHRvQ2hhcmFjdGVyRGF0YShj
b250YWluZXIpLT5kZWxldGVEYXRhKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNl
dCwgZWMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE5vZGU6OlBST0NFU1NJTkdfSU5TVFJV
Q1RJT05fTk9ERToKLSAgICAgICAgQVNTRVJUKGVuZE9mZnNldCA8PSBzdGF0aWNfY2FzdDxQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24qPihjb250YWluZXIpLT5kYXRhKCkubGVuZ3RoKCkpOworICAgICAg
ICBBU1NFUlQoZW5kT2Zmc2V0IDw9IHRvUHJvY2Vzc2luZ0luc3RydWN0aW9uKGNvbnRhaW5lcikt
PmRhdGEoKS5sZW5ndGgoKSk7CiAgICAgICAgIGlmIChhY3Rpb24gPT0gRXh0cmFjdCB8fCBhY3Rp
b24gPT0gQ2xvbmUpIHsKICAgICAgICAgICAgIFJlZlB0cjxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24+
IGMgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4oY29udGFpbmVy
LT5jbG9uZU5vZGUodHJ1ZSkpOwogICAgICAgICAgICAgYy0+c2V0RGF0YShjLT5kYXRhKCkuc3Vi
c3RyaW5nKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCksIGVjKTsKQEAgLTgx
Myw3ICs4MTIsNyBAQCBQYXNzUmVmUHRyPE5vZGU+IFJhbmdlOjpwcm9jZXNzQ29udGVudHNCCiAg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gYy5yZWxlYXNlKCk7CiAgICAgICAgIH0KICAgICAgICAg
aWYgKGFjdGlvbiA9PSBFeHRyYWN0IHx8IGFjdGlvbiA9PSBEZWxldGUpIHsKLSAgICAgICAgICAg
IFByb2Nlc3NpbmdJbnN0cnVjdGlvbiogcGkgPSBzdGF0aWNfY2FzdDxQcm9jZXNzaW5nSW5zdHJ1
Y3Rpb24qPihjb250YWluZXIpOworICAgICAgICAgICAgUHJvY2Vzc2luZ0luc3RydWN0aW9uKiBw
aSA9IHRvUHJvY2Vzc2luZ0luc3RydWN0aW9uKGNvbnRhaW5lcik7CiAgICAgICAgICAgICBTdHJp
bmcgZGF0YShwaS0+ZGF0YSgpKTsKICAgICAgICAgICAgIGRhdGEucmVtb3ZlKHN0YXJ0T2Zmc2V0
LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCk7CiAgICAgICAgICAgICBwaS0+c2V0RGF0YShkYXRh
LCBlYyk7CkBAIC04MzcsNyArODM2LDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBSYW5nZTo6cHJvY2Vz
c0NvbnRlbnRzQgogICAgICAgICB9CiAKICAgICAgICAgTm9kZSogbiA9IGNvbnRhaW5lci0+Zmly
c3RDaGlsZCgpOwotICAgICAgICBWZWN0b3I8UmVmUHRyPE5vZGU+ID4gbm9kZXM7CisgICAgICAg
IFZlY3RvcjxSZWZQdHI8Tm9kZT4+IG5vZGVzOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBz
dGFydE9mZnNldDsgbiAmJiBpOyBpLS0pCiAgICAgICAgICAgICBuID0gbi0+bmV4dFNpYmxpbmco
KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhcnRPZmZzZXQ7IG4gJiYgaSA8IGVuZE9m
ZnNldDsgaSsrLCBuID0gbi0+bmV4dFNpYmxpbmcoKSkKQEAgLTExNDMsMTEgKzExNDIsMTEgQEAg
Tm9kZSogUmFuZ2U6OmNoZWNrTm9kZVdPZmZzZXQoTm9kZSogbiwgaQogICAgICAgICBjYXNlIE5v
ZGU6OkNEQVRBX1NFQ1RJT05fTk9ERToKICAgICAgICAgY2FzZSBOb2RlOjpDT01NRU5UX05PREU6
CiAgICAgICAgIGNhc2UgTm9kZTo6VEVYVF9OT0RFOgotICAgICAgICAgICAgaWYgKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihvZmZzZXQpID4gc3RhdGljX2Nhc3Q8Q2hhcmFjdGVyRGF0YSo+KG4pLT5s
ZW5ndGgoKSkKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob2Zmc2V0KSA+
IHRvQ2hhcmFjdGVyRGF0YShuKS0+bGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgZWMgPSBJTkRF
WF9TSVpFX0VSUjsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBjYXNlIE5vZGU6OlBS
T0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERToKLSAgICAgICAgICAgIGlmIChzdGF0aWNfY2FzdDx1
bnNpZ25lZD4ob2Zmc2V0KSA+IHN0YXRpY19jYXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbio+KG4p
LT5kYXRhKCkubGVuZ3RoKCkpCisgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KG9mZnNldCkgPiB0b1Byb2Nlc3NpbmdJbnN0cnVjdGlvbihuKS0+ZGF0YSgpLmxlbmd0aCgpKQog
ICAgICAgICAgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CiAgICAgICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9ERToKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9UZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1RleHQuaAko
cmV2aXNpb24gMTU3Mzg0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RleHQuaAkod29ya2luZyBj
b3B5KQpAQCAtNzIsOSArNzIsOSBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCitpbmxpbmUgYm9v
bCBpc1RleHQoY29uc3QgTm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5pc1RleHROb2RlKCk7IH0K
IHZvaWQgaXNUZXh0KGNvbnN0IFRleHQmKTsgLy8gQ2F0Y2ggdW5uZWNlc3NhcnkgcnVudGltZSBj
aGVjayBvZiB0eXBlIGtub3duIGF0IGNvbXBpbGUgdGltZS4KIHZvaWQgaXNUZXh0KGNvbnN0IENv
bnRhaW5lck5vZGUmKTsgLy8gQ2F0Y2ggdW5uZWNlc3NhcnkgcnVudGltZSBjaGVjayBvZiB0eXBl
IGtub3duIGF0IGNvbXBpbGUgdGltZS4KLWlubGluZSBib29sIGlzVGV4dChjb25zdCBOb2RlJiBu
b2RlKSB7IHJldHVybiBub2RlLmlzVGV4dE5vZGUoKTsgfQogCiBOT0RFX1RZUEVfQ0FTVFMoVGV4
dCkKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5j
cHAJKHJldmlzaW9uIDE1NzM4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHls
ZUNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzI1LDggKzEzMjUsOCBAQCBib29sIEFw
cGx5U3R5bGVDb21tYW5kOjptZXJnZUVuZFdpdGhOZXh0CiAKICAgICBOb2RlKiBuZXh0U2libGlu
ZyA9IGVuZE5vZGUtPm5leHRTaWJsaW5nKCk7CiAgICAgaWYgKG5leHRTaWJsaW5nICYmIGFyZUlk
ZW50aWNhbEVsZW1lbnRzKGVuZE5vZGUsIG5leHRTaWJsaW5nKSkgewotICAgICAgICBFbGVtZW50
KiBuZXh0RWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQgKj4obmV4dFNpYmxpbmcpOwotICAg
ICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCAqPihlbmROb2RlKTsK
KyAgICAgICAgRWxlbWVudCogbmV4dEVsZW1lbnQgPSB0b0VsZW1lbnQobmV4dFNpYmxpbmcpOwor
ICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KGVuZE5vZGUpOwogICAgICAgICBO
b2RlKiBuZXh0Q2hpbGQgPSBuZXh0RWxlbWVudC0+Zmlyc3RDaGlsZCgpOwogCiAgICAgICAgIG1l
cmdlSWRlbnRpY2FsRWxlbWVudHMoZWxlbWVudCwgbmV4dEVsZW1lbnQpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9u
IDE1NzM4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEwLDcgKzEwMTAsNyBAQCB2b2lkIENvbXBvc2l0ZUVk
aXRDb21tYW5kOjpjbG9uZVBhcmFncmFwCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBhbmNlc3Rv
cnMuc2l6ZSgpOyBpICE9IDA7IC0taSkgewogICAgICAgICAgICAgTm9kZSogaXRlbSA9IGFuY2Vz
dG9yc1tpIC0gMV0uZ2V0KCk7CiAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gY2hpbGQgPSBpdGVt
LT5jbG9uZU5vZGUoaXNUYWJsZUVsZW1lbnQoaXRlbSkpOwotICAgICAgICAgICAgYXBwZW5kTm9k
ZShjaGlsZCwgc3RhdGljX2Nhc3Q8RWxlbWVudCAqPihsYXN0Tm9kZS5nZXQoKSkpOworICAgICAg
ICAgICAgYXBwZW5kTm9kZShjaGlsZCwgdG9FbGVtZW50KGxhc3ROb2RlLmdldCgpKSk7CiAgICAg
ICAgICAgICBsYXN0Tm9kZSA9IGNoaWxkLnJlbGVhc2UoKTsKICAgICAgICAgfQogICAgIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAJKHJldmlzaW9uIDE1NzM4NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYzLDcgKzQ2
Myw3IEBAIGJvb2wgRWRpdG9yOjpzaG91bGRJbnNlcnRGcmFnbWVudChQYXNzUmUKICAgICBpZiAo
ZnJhZ21lbnQpIHsKICAgICAgICAgTm9kZSogY2hpbGQgPSBmcmFnbWVudC0+Zmlyc3RDaGlsZCgp
OwogICAgICAgICBpZiAoY2hpbGQgJiYgZnJhZ21lbnQtPmxhc3RDaGlsZCgpID09IGNoaWxkICYm
IGNoaWxkLT5pc0NoYXJhY3RlckRhdGFOb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gY2xpZW50
KCktPnNob3VsZEluc2VydFRleHQoc3RhdGljX2Nhc3Q8Q2hhcmFjdGVyRGF0YSo+KGNoaWxkKS0+
ZGF0YSgpLCByZXBsYWNpbmdET01SYW5nZS5nZXQoKSwgZ2l2ZW5BY3Rpb24pOyAgICAgICAgCisg
ICAgICAgICAgICByZXR1cm4gY2xpZW50KCktPnNob3VsZEluc2VydFRleHQodG9DaGFyYWN0ZXJE
YXRhKGNoaWxkKS0+ZGF0YSgpLCByZXBsYWNpbmdET01SYW5nZS5nZXQoKSwgZ2l2ZW5BY3Rpb24p
OwogICAgIH0KIAogICAgIHJldHVybiBjbGllbnQoKS0+c2hvdWxkSW5zZXJ0Tm9kZShmcmFnbWVu
dC5nZXQoKSwgcmVwbGFjaW5nRE9NUmFuZ2UuZ2V0KCksIGdpdmVuQWN0aW9uKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCShyZXZpc2lvbiAxNTczODQp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQ2NCwxMCArMTQ2NCwxMCBAQCB2b2lkIENhcmV0QmFzZTo6cGFpbnRDYXJldChO
b2RlKiBub2RlLCBHCiAjZW5kaWYKIH0KIAotdm9pZCBGcmFtZVNlbGVjdGlvbjo6ZGVidWdSZW5k
ZXJlcihSZW5kZXJPYmplY3QgKnIsIGJvb2wgc2VsZWN0ZWQpIGNvbnN0Cit2b2lkIEZyYW1lU2Vs
ZWN0aW9uOjpkZWJ1Z1JlbmRlcmVyKFJlbmRlck9iamVjdCogciwgYm9vbCBzZWxlY3RlZCkgY29u
c3QKIHsKICAgICBpZiAoci0+bm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpIHsKLSAgICAgICAgRWxl
bWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQgKj4oci0+bm9kZSgpKTsKKyAgICAg
ICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChyLT5ub2RlKCkpOwogICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIiVzJXNcbiIsIHNlbGVjdGVkID8gIj09PiAiIDogIiAgICAiLCBlbGVtZW50
LT5sb2NhbE5hbWUoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICB9IGVsc2UgaWYgKHIt
PmlzVGV4dCgpKSB7CiAgICAgICAgIFJlbmRlclRleHQqIHRleHRSZW5kZXJlciA9IHRvUmVuZGVy
VGV4dChyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaAkocmV2aXNpb24gMTU3
Mzg0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtOTIsMzIgKzkyLDEwIEBAIHByaXZhdGU6CiAgICAgRG9jdW1lbnRPcmRlcmVkTWFwIG1f
d2luZG93TmFtZWRJdGVtOwogfTsKIAotaW5saW5lIEhUTUxEb2N1bWVudCogdG9IVE1MRG9jdW1l
bnQoRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKCFkb2N1bWVudCB8fCBkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSk7Ci0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGRvY3VtZW50KTsKLX0KK2lubGluZSBib29s
IGlzSFRNTERvY3VtZW50KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkgeyByZXR1cm4gZG9jdW1l
bnQuaXNIVE1MRG9jdW1lbnQoKTsgfQordm9pZCBpc0hUTUxEb2N1bWVudChjb25zdCBIVE1MRG9j
dW1lbnQmKTsgLy8gQ2F0Y2ggdW5uZWNlc3NhcnkgcnVudGltZSBjaGVjayBvZiB0eXBlIGtub3du
IGF0IGNvbXBpbGUgdGltZS4KIAotaW5saW5lIGNvbnN0IEhUTUxEb2N1bWVudCogdG9IVE1MRG9j
dW1lbnQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKCFkb2N1bWVudCB8fCBkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSk7
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEhUTUxEb2N1bWVudCo+KGRvY3VtZW50KTsK
LX0KLQotaW5saW5lIEhUTUxEb2N1bWVudCYgdG9IVE1MRG9jdW1lbnQoRG9jdW1lbnQmIGRvY3Vt
ZW50KQotewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGRvY3VtZW50Lmlz
SFRNTERvY3VtZW50KCkpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQmPihk
b2N1bWVudCk7Ci19Ci0KLWlubGluZSBjb25zdCBIVE1MRG9jdW1lbnQmIHRvSFRNTERvY3VtZW50
KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihkb2N1bWVudC5pc0hUTUxEb2N1bWVudCgpKTsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgSFRNTERvY3VtZW50Jj4oZG9jdW1lbnQpOwotfQotLy8gVGhpcyB3aWxsIGNh
dGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgotdm9pZCB0b0hUTUxEb2N1bWVu
dChjb25zdCBIVE1MRG9jdW1lbnQqKTsKLXZvaWQgdG9IVE1MRG9jdW1lbnQoY29uc3QgSFRNTERv
Y3VtZW50Jik7CitET0NVTUVOVF9UWVBFX0NBU1RTKEhUTUxEb2N1bWVudCkKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmgJ
KHJldmlzaW9uIDE1NzM4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw2ICsxMzcsOCBAQCBwcml2YXRlOgogICAgIFBlbmRp
bmdTaGVldFR5cGUgbV9wZW5kaW5nU2hlZXRUeXBlOwogfTsKIAorTk9ERV9UWVBFX0NBU1RTKEhU
TUxMaW5rRWxlbWVudCkKKwogfSAvL25hbWVzcGFjZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFRhZ05hbWVzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFRhZ05hbWVzLmluCShyZXZpc2lvbiAxNTczODQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxUYWdOYW1lcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBs
YWJlbCBnZW5lcmF0ZVR5cGVIZWxwZXJzCiBsYXllciBpbnRlcmZhY2VOYW1lPUhUTUxFbGVtZW50
CiBsZWdlbmQgZ2VuZXJhdGVUeXBlSGVscGVycwogbGkgaW50ZXJmYWNlTmFtZT1IVE1MTElFbGVt
ZW50Ci1saW5rIGNvbnN0cnVjdG9yTmVlZHNDcmVhdGVkQnlQYXJzZXIKK2xpbmsgY29uc3RydWN0
b3JOZWVkc0NyZWF0ZWRCeVBhcnNlciwgZ2VuZXJhdGVUeXBlSGVscGVycwogbGlzdGluZyBpbnRl
cmZhY2VOYW1lPUhUTUxQcmVFbGVtZW50CiBtYWluIGludGVyZmFjZU5hbWU9SFRNTEVsZW1lbnQK
IG1hcCBnZW5lcmF0ZVR5cGVIZWxwZXJzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdl
RG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlRG9jdW1l
bnQuaAkocmV2aXNpb24gMTU3Mzg0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZURvY3Vt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDIwICs3MSwxMCBAQCBwcml2YXRlOgogICAgIGJv
b2wgbV9zaG91bGRTaHJpbmtJbWFnZTsKIH07CiAKLWlubGluZSBJbWFnZURvY3VtZW50KiB0b0lt
YWdlRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKCFkb2N1bWVudCB8fCBkb2N1bWVudC0+aXNJbWFnZURvY3VtZW50KCkp
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbWFnZURvY3VtZW50Kj4oZG9jdW1lbnQpOwotfQot
Ci1pbmxpbmUgY29uc3QgSW1hZ2VEb2N1bWVudCogdG9JbWFnZURvY3VtZW50KGNvbnN0IERvY3Vt
ZW50KiBkb2N1bWVudCkKLXsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTigh
ZG9jdW1lbnQgfHwgZG9jdW1lbnQtPmlzSW1hZ2VEb2N1bWVudCgpKTsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Y29uc3QgSW1hZ2VEb2N1bWVudCo+KGRvY3VtZW50KTsKLX0KK2lubGluZSBib29s
IGlzSW1hZ2VEb2N1bWVudChjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpIHsgcmV0dXJuIGRvY3Vt
ZW50LmlzSW1hZ2VEb2N1bWVudCgpOyB9Cit2b2lkIGlzSW1hZ2VEb2N1bWVudChjb25zdCBJbWFn
ZURvY3VtZW50Jik7IC8vIENhdGNoIHVubmVjZXNzYXJ5IHJ1bnRpbWUgY2hlY2sgb2YgdHlwZSBr
bm93biBhdCBjb21waWxlIHRpbWUuCiAKLS8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcg
YW4gdW5uZWNlc3NhcnkgY2FzdC4KLXZvaWQgdG9JbWFnZURvY3VtZW50KGNvbnN0IEltYWdlRG9j
dW1lbnQqKTsKK0RPQ1VNRU5UX1RZUEVfQ0FTVFMoSW1hZ2VEb2N1bWVudCkKIAogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL01lZGlhRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL01lZGlhRG9jdW1lbnQuaAkocmV2aXNpb24gMTU3Mzg0KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9NZWRpYURvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDMz
ICs1NCwxMCBAQCBwcml2YXRlOgogICAgIFRpbWVyPE1lZGlhRG9jdW1lbnQ+IG1fcmVwbGFjZU1l
ZGlhRWxlbWVudFRpbWVyOwogfTsKIAotaW5saW5lIE1lZGlhRG9jdW1lbnQqIHRvTWVkaWFEb2N1
bWVudChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04oIWRvY3VtZW50IHx8IGRvY3VtZW50LT5pc01lZGlhRG9jdW1lbnQoKSk7Ci0gICAg
cmV0dXJuIHN0YXRpY19jYXN0PE1lZGlhRG9jdW1lbnQqPihkb2N1bWVudCk7Ci19Ci0KLWlubGlu
ZSBjb25zdCBNZWRpYURvY3VtZW50KiB0b01lZGlhRG9jdW1lbnQoY29uc3QgRG9jdW1lbnQqIGRv
Y3VtZW50KQotewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFkb2N1bWVu
dCB8fCBkb2N1bWVudC0+aXNNZWRpYURvY3VtZW50KCkpOwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxjb25zdCBNZWRpYURvY3VtZW50Kj4oZG9jdW1lbnQpOwotfQotCi1pbmxpbmUgTWVkaWFEb2N1
bWVudCYgdG9NZWRpYURvY3VtZW50KERvY3VtZW50JiBkb2N1bWVudCkKLXsKLSAgICBBU1NFUlRf
V0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihkb2N1bWVudC5pc01lZGlhRG9jdW1lbnQoKSk7Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PE1lZGlhRG9jdW1lbnQmPihkb2N1bWVudCk7Ci19Ci0KLWlu
bGluZSBjb25zdCBNZWRpYURvY3VtZW50JiB0b01lZGlhRG9jdW1lbnQoY29uc3QgRG9jdW1lbnQm
IGRvY3VtZW50KQotewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGRvY3Vt
ZW50LmlzTWVkaWFEb2N1bWVudCgpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgTWVk
aWFEb2N1bWVudCY+KGRvY3VtZW50KTsKLX0KK2lubGluZSBib29sIGlzTWVkaWFEb2N1bWVudChj
b25zdCBEb2N1bWVudCYgZG9jdW1lbnQpIHsgcmV0dXJuIGRvY3VtZW50LmlzTWVkaWFEb2N1bWVu
dCgpOyB9Cit2b2lkIGlzTWVkaWFEb2N1bWVudChjb25zdCBNZWRpYURvY3VtZW50Jik7IC8vIENh
dGNoIHVubmVjZXNzYXJ5IHJ1bnRpbWUgY2hlY2sgb2YgdHlwZSBrbm93biBhdCBjb21waWxlIHRp
bWUuCiAKLS8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2Fz
dC4KLXZvaWQgdG9NZWRpYURvY3VtZW50KGNvbnN0IE1lZGlhRG9jdW1lbnQqKTsKLXZvaWQgdG9N
ZWRpYURvY3VtZW50KGNvbnN0IE1lZGlhRG9jdW1lbnQmKTsKK0RPQ1VNRU5UX1RZUEVfQ0FTVFMo
TWVkaWFEb2N1bWVudCkKIAogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL1BsdWdpbkRv
Y3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9QbHVnaW5Eb2N1bWVu
dC5oCShyZXZpc2lvbiAxNTczODQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL1BsdWdpbkRvY3Vt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDIxICs2MSwxMSBAQCBwcml2YXRlOgogICAgIFJl
ZlB0cjxIVE1MUGx1Z0luRWxlbWVudD4gbV9wbHVnaW5FbGVtZW50OwogfTsKIAotaW5saW5lIFBs
dWdpbkRvY3VtZW50KiB0b1BsdWdpbkRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAg
ICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighZG9jdW1lbnQgfHwgZG9jdW1lbnQt
PmlzUGx1Z2luRG9jdW1lbnQoKSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFBsdWdpbkRvY3Vt
ZW50Kj4oZG9jdW1lbnQpOwotfQoraW5saW5lIGJvb2wgaXNQbHVnaW5Eb2N1bWVudChjb25zdCBE
b2N1bWVudCYgZG9jdW1lbnQpIHsgcmV0dXJuIGRvY3VtZW50LmlzUGx1Z2luRG9jdW1lbnQoKTsg
fQordm9pZCBpc1BsdWdpbkRvY3VtZW50KGNvbnN0IFBsdWdpbkRvY3VtZW50Jik7IC8vIENhdGNo
IHVubmVjZXNzYXJ5IHJ1bnRpbWUgY2hlY2sgb2YgdHlwZSBrbm93biBhdCBjb21waWxlIHRpbWUu
CiAKLWlubGluZSBjb25zdCBQbHVnaW5Eb2N1bWVudCogdG9QbHVnaW5Eb2N1bWVudChjb25zdCBE
b2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oIWRvY3VtZW50IHx8IGRvY3VtZW50LT5pc1BsdWdpbkRvY3VtZW50KCkpOwotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBQbHVnaW5Eb2N1bWVudCo+KGRvY3VtZW50KTsKLX0KK0RPQ1VN
RU5UX1RZUEVfQ0FTVFMoUGx1Z2luRG9jdW1lbnQpCiAKLS8vIFRoaXMgd2lsbCBjYXRjaCBhbnlv
bmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KLXZvaWQgdG9QbHVnaW5Eb2N1bWVudChjb25z
dCBQbHVnaW5Eb2N1bWVudCopOwotICAgIAogfQogCiAjZW5kaWYgLy8gUGx1Z2luRG9jdW1lbnRf
aApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1
Y3Rpb25TaXRlLmNwcAkocmV2aXNpb24gMTU3Mzg0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDUsNyAr
NTA1LDcgQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0VGV4dE5vZAogICAgIGlm
IChwcmV2aW91c0NoaWxkICYmIHByZXZpb3VzQ2hpbGQtPmlzVGV4dE5vZGUoKSkgewogICAgICAg
ICAvLyBGSVhNRTogV2UncmUgb25seSBzdXBwb3NlZCB0byBhcHBlbmQgdG8gdGhpcyB0ZXh0IG5v
ZGUgaWYgaXQKICAgICAgICAgLy8gd2FzIHRoZSBsYXN0IHRleHQgbm9kZSBpbnNlcnRlZCBieSB0
aGUgcGFyc2VyLgotICAgICAgICBDaGFyYWN0ZXJEYXRhKiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0
PENoYXJhY3RlckRhdGEqPihwcmV2aW91c0NoaWxkKTsKKyAgICAgICAgVGV4dCogdGV4dE5vZGUg
PSB0b1RleHQocHJldmlvdXNDaGlsZCk7CiAgICAgICAgIGN1cnJlbnRQb3NpdGlvbiA9IHRleHRO
b2RlLT5wYXJzZXJBcHBlbmREYXRhKGNoYXJhY3RlcnMsIDAsIGxlbmd0aExpbWl0KTsKICAgICB9
CiAKQEAgLTYzNyw3ICs2MzcsNyBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpmaW5kRm9z
dGVyU2l0CiAgICAgICAgIC8vIGFuZCBpbnN0ZWFkIHVzZSB0aGUgRG9jdW1lbnRGcmFnbWVudCBh
cyBhIHJvb3Qgbm9kZS4gU28gd2UgbXVzdCB0cmVhdCB0aGUgcm9vdCBub2RlIChEb2N1bWVudEZy
YWdtZW50KSBhcyBpZiBpdCBpcyBhIGh0bWwgZWxlbWVudCBoZXJlLgogICAgICAgICBib29sIHBh
cmVudENhbkJlRm9zdGVyUGFyZW50ID0gcGFyZW50ICYmIChwYXJlbnQtPmlzRWxlbWVudE5vZGUo
KSB8fCAobV9pc1BhcnNpbmdGcmFnbWVudCAmJiBwYXJlbnQgPT0gbV9vcGVuRWxlbWVudHMucm9v
dE5vZGUoKSkpOwogI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQotICAgICAgICBwYXJlbnRD
YW5CZUZvc3RlclBhcmVudCA9IHBhcmVudENhbkJlRm9zdGVyUGFyZW50IHx8IChwYXJlbnQgJiYg
cGFyZW50LT5pc0RvY3VtZW50RnJhZ21lbnQoKSAmJiBzdGF0aWNfY2FzdDxEb2N1bWVudEZyYWdt
ZW50Kj4ocGFyZW50KS0+aXNUZW1wbGF0ZUNvbnRlbnQoKSk7CisgICAgICAgIHBhcmVudENhbkJl
Rm9zdGVyUGFyZW50ID0gcGFyZW50Q2FuQmVGb3N0ZXJQYXJlbnQgfHwgKHBhcmVudCAmJiBwYXJl
bnQtPmlzRG9jdW1lbnRGcmFnbWVudCgpICYmIHRvRG9jdW1lbnRGcmFnbWVudChwYXJlbnQpLT5p
c1RlbXBsYXRlQ29udGVudCgpKTsKICNlbmRpZgogICAgICAgICBpZiAocGFyZW50Q2FuQmVGb3N0
ZXJQYXJlbnQpIHsKICAgICAgICAgICAgIHRhc2sucGFyZW50ID0gcGFyZW50OwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNw
cAkocmV2aXNpb24gMTU3Mzg0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFD
b250cm9sRWxlbWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjQsNyArMzI0LDcgQEAgdm9p
ZCBNZWRpYUNvbnRyb2xUaW1lbGluZUNvbnRhaW5lckVsZW1lbgogICAgICAgICBOb2RlKiBjaGls
ZCA9IGNoaWxkTm9kZShpKTsKICAgICAgICAgaWYgKCFjaGlsZCB8fCAhY2hpbGQtPmlzRWxlbWVu
dE5vZGUoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBFbGVtZW50KiBlbGVtZW50
ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGNoaWxkKTsKKyAgICAgICAgRWxlbWVudCogZWxlbWVu
dCA9IHRvRWxlbWVudChjaGlsZCk7CiAgICAgICAgIGlmIChlbGVtZW50LT5zaGFkb3dQc2V1ZG9J
ZCgpICE9IGdldE1lZGlhQ29udHJvbFRpbWVSZW1haW5pbmdEaXNwbGF5RWxlbWVudFNoYWRvd1Bz
ZXVkb0lkKCkKICAgICAgICAgICAgICYmIGVsZW1lbnQtPnNoYWRvd1BzZXVkb0lkKCkgIT0gZ2V0
TWVkaWFDb250cm9sQ3VycmVudFRpbWVEaXNwbGF5RWxlbWVudFNoYWRvd1BzZXVkb0lkKCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01BZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50LmNwcAkocmV2aXNpb24gMTU3Mzg0KQorKysgU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTg3
LDggKzk4Nyw4IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2goRXIKICAg
ICAgICAgICAgICAgICBpZiAoZWMpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6QVRUUklCVVRFX05PREUp
Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUgPSBzdGF0aWNfY2FzdDxBdHRyKj4obm9kZSktPm93
bmVyRWxlbWVudCgpOworICAgICAgICAgICAgICAgIGlmIChub2RlLT5pc0F0dHJpYnV0ZU5vZGUo
KSkKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHRvQXR0cihub2RlKS0+b3duZXJFbGVtZW50
KCk7CiAgICAgICAgICAgICAgICAgcmVzdWx0Q29sbGVjdG9yLmFkZChub2RlKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQpAQCAtMTQyNywxMiArMTQyNywxMiBAQCBQYXNzUmVmUHRyPFR5cGVC
dWlsZGVyOjpET006Ok5vZGU+IEluc3BlCiAgICAgICAgIHZhbHVlLT5zZXRCYXNlVVJMKGRvY3Vt
ZW50QmFzZVVSTFN0cmluZyhkb2N1bWVudCkpOwogICAgICAgICB2YWx1ZS0+c2V0WG1sVmVyc2lv
bihkb2N1bWVudC0+eG1sVmVyc2lvbigpKTsKICAgICB9IGVsc2UgaWYgKG5vZGUtPm5vZGVUeXBl
KCkgPT0gTm9kZTo6RE9DVU1FTlRfVFlQRV9OT0RFKSB7Ci0gICAgICAgIERvY3VtZW50VHlwZSog
ZG9jVHlwZSA9IHN0YXRpY19jYXN0PERvY3VtZW50VHlwZSo+KG5vZGUpOworICAgICAgICBEb2N1
bWVudFR5cGUqIGRvY1R5cGUgPSB0b0RvY3VtZW50VHlwZShub2RlKTsKICAgICAgICAgdmFsdWUt
PnNldFB1YmxpY0lkKGRvY1R5cGUtPnB1YmxpY0lkKCkpOwogICAgICAgICB2YWx1ZS0+c2V0U3lz
dGVtSWQoZG9jVHlwZS0+c3lzdGVtSWQoKSk7CiAgICAgICAgIHZhbHVlLT5zZXRJbnRlcm5hbFN1
YnNldChkb2NUeXBlLT5pbnRlcm5hbFN1YnNldCgpKTsKICAgICB9IGVsc2UgaWYgKG5vZGUtPmlz
QXR0cmlidXRlTm9kZSgpKSB7Ci0gICAgICAgIEF0dHIqIGF0dHJpYnV0ZSA9IHN0YXRpY19jYXN0
PEF0dHIqPihub2RlKTsKKyAgICAgICAgQXR0ciogYXR0cmlidXRlID0gdG9BdHRyKG5vZGUpOwog
ICAgICAgICB2YWx1ZS0+c2V0TmFtZShhdHRyaWJ1dGUtPm5hbWUoKSk7CiAgICAgICAgIHZhbHVl
LT5zZXRWYWx1ZShhdHRyaWJ1dGUtPnZhbHVlKCkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdEb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdEb2N1bWVudC5oCShyZXZpc2lvbiAxNTczODQpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsMjAgKzU2LDEwIEBAIHByaXZhdGU6CiAg
ICAgRmxvYXRQb2ludCBtX3RyYW5zbGF0ZTsKIH07CiAKLWlubGluZSBTVkdEb2N1bWVudCogdG9T
VkdEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJ
VFlfSU1QTElDQVRJT04oIWRvY3VtZW50IHx8IGRvY3VtZW50LT5pc1NWR0RvY3VtZW50KCkpOwot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxTVkdEb2N1bWVudCo+KGRvY3VtZW50KTsKLX0KK2lubGlu
ZSBib29sIGlzU1ZHRG9jdW1lbnQoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KSB7IHJldHVybiBk
b2N1bWVudC5pc1NWR0RvY3VtZW50KCk7IH0KK3ZvaWQgaXNTVkdEb2N1bWVudChjb25zdCBTVkdE
b2N1bWVudCYpOyAvLyBDYXRjaCB1bm5lY2Vzc2FyeSBydW50aW1lIGNoZWNrIG9mIHR5cGUga25v
d24gYXQgY29tcGlsZSB0aW1lLgogCi1pbmxpbmUgY29uc3QgU1ZHRG9jdW1lbnQqIHRvU1ZHRG9j
dW1lbnQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKCFkb2N1bWVudCB8fCBkb2N1bWVudC0+aXNTVkdEb2N1bWVudCgpKTsK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHRG9jdW1lbnQqPihkb2N1bWVudCk7Ci19
Ci0KLS8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4K
LXZvaWQgdG9TVkdEb2N1bWVudChjb25zdCBTVkdEb2N1bWVudCopOworRE9DVU1FTlRfVFlQRV9D
QVNUUyhTVkdEb2N1bWVudCkKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS94bWwvWFBhdGhGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDE1NzM4NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3htbC9YUGF0aEZ1bmN0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OCw3
ICszNTgsNyBAQCBzdGF0aWMgaW5saW5lIFN0cmluZyBleHBhbmRlZE5hbWVMb2NhbFBhCiAgICAg
Ly8gVGhlIGxvY2FsIHBhcnQgb2YgYW4gWFBhdGggZXhwYW5kZWQtbmFtZSBtYXRjaGVzIERPTSBs
b2NhbCBuYW1lIGZvciBtb3N0IG5vZGUgdHlwZXMsIGV4Y2VwdCBmb3IgbmFtZXNwYWNlIG5vZGVz
IGFuZCBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5vZGVzLgogICAgIEFTU0VSVChub2RlLT5ub2Rl
VHlwZSgpICE9IE5vZGU6OlhQQVRIX05BTUVTUEFDRV9OT0RFKTsgLy8gTm90IHN1cHBvcnRlZCB5
ZXQuCiAgICAgaWYgKG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVD
VElPTl9OT0RFKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8UHJvY2Vzc2luZ0luc3RydWN0
aW9uKj4obm9kZSktPnRhcmdldCgpOworICAgICAgICByZXR1cm4gdG9Qcm9jZXNzaW5nSW5zdHJ1
Y3Rpb24obm9kZSktPnRhcmdldCgpOwogICAgIHJldHVybiBub2RlLT5sb2NhbE5hbWUoKS5zdHJp
bmcoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hQYXRoTm9kZVNldC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hQYXRoTm9kZVNldC5jcHAJKHJldmlzaW9u
IDE1NzM4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9YUGF0aE5vZGVTZXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHN0YXRpYyB2b2lkIHNvcnRCbG9jayh1bnNpZ25lZCBm
cm9tLCB1bnMKICAgICAgICAgLy8gRklYTUU6IG5hbWVzcGFjZSBub2RlcyBhcmUgbm90IGltcGxl
bWVudGVkLgogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzb3J0ZWRFbmQ7IGkgPCB0bzsgKytp
KSB7CiAgICAgICAgICAgICBOb2RlKiBuID0gcGFyZW50TWF0cml4W2ldWzBdOwotICAgICAgICAg
ICAgaWYgKG4tPmlzQXR0cmlidXRlTm9kZSgpICYmIHN0YXRpY19jYXN0PEF0dHIqPihuKS0+b3du
ZXJFbGVtZW50KCkgPT0gY29tbW9uQW5jZXN0b3IpCisgICAgICAgICAgICBpZiAobi0+aXNBdHRy
aWJ1dGVOb2RlKCkgJiYgdG9BdHRyKG4pLT5vd25lckVsZW1lbnQoKSA9PSBjb21tb25BbmNlc3Rv
cikKICAgICAgICAgICAgICAgICBwYXJlbnRNYXRyaXhbaV0uc3dhcChwYXJlbnRNYXRyaXhbc29y
dGVkRW5kKytdKTsKICAgICAgICAgfQogICAgICAgICBpZiAoc29ydGVkRW5kICE9IGZyb20pIHsK
QEAgLTE1OSw3ICsxNTksNyBAQCB2b2lkIE5vZGVTZXQ6OnNvcnQoKSBjb25zdAogICAgICAgICBO
b2RlKiBuID0gbV9ub2Rlc1tpXS5nZXQoKTsKICAgICAgICAgcGFyZW50c1ZlY3Rvci5hcHBlbmQo
bik7CiAgICAgICAgIGlmIChuLT5pc0F0dHJpYnV0ZU5vZGUoKSkgewotICAgICAgICAgICAgbiA9
IHN0YXRpY19jYXN0PEF0dHIqPihuKS0+b3duZXJFbGVtZW50KCk7CisgICAgICAgICAgICBuID0g
dG9BdHRyKG4pLT5vd25lckVsZW1lbnQoKTsKICAgICAgICAgICAgIHBhcmVudHNWZWN0b3IuYXBw
ZW5kKG4pOwogICAgICAgICAgICAgY29udGFpbnNBdHRyaWJ1dGVOb2RlcyA9IHRydWU7CiAgICAg
ICAgIH0KQEAgLTE4MSw3ICsxODEsNyBAQCB2b2lkIE5vZGVTZXQ6OnNvcnQoKSBjb25zdAogc3Rh
dGljIE5vZGUqIGZpbmRSb290Tm9kZShOb2RlKiBub2RlKQogewogICAgIGlmIChub2RlLT5pc0F0
dHJpYnV0ZU5vZGUoKSkKLSAgICAgICAgbm9kZSA9IHN0YXRpY19jYXN0PEF0dHIqPihub2RlKS0+
b3duZXJFbGVtZW50KCk7CisgICAgICAgIG5vZGUgPSB0b0F0dHIobm9kZSktPm93bmVyRWxlbWVu
dCgpOwogICAgIGlmIChub2RlLT5pbkRvY3VtZW50KCkpCiAgICAgICAgIG5vZGUgPSAmbm9kZS0+
ZG9jdW1lbnQoKTsKICAgICBlbHNlIHsK
</data>
<flag name="review"
          id="236624"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>