<?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>181895</bug_id>
          
          <creation_ts>2018-01-19 18:12:37 -0800</creation_ts>
          <short_desc>Temporarily restore block selection code conditionally</short_desc>
          <delta_ts>2018-01-22 17:46:28 -0800</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>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Megan Gardner">megan_gardner</reporter>
          <assigned_to name="Megan Gardner">megan_gardner</assigned_to>
          <cc>aestes</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1391320</commentid>
    <comment_count>0</comment_count>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-01-19 18:12:37 -0800</bug_when>
    <thetext>Temporarily restore some selection methods</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1391334</commentid>
    <comment_count>1</comment_count>
      <attachid>331829</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-01-19 19:52:26 -0800</bug_when>
    <thetext>Created attachment 331829
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1391335</commentid>
    <comment_count>2</comment_count>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-01-19 19:53:43 -0800</bug_when>
    <thetext>&lt;rdar://problem/36567325&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1391355</commentid>
    <comment_count>3</comment_count>
      <attachid>331829</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2018-01-19 21:35:10 -0800</bug_when>
    <thetext>Comment on attachment 331829
Patch

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

&gt; Source/WebKit/Platform/spi/ios/UIKitSPI.h:618
&gt; +- (void)changeBlockSelectionWithTouchAt:(CGPoint)point withSelectionTouch:(UIWKSelectionTouch)touch forHandle:(UIWKHandlePosition)handle;

Semicolons and curly braces and stuff oh my!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1391440</commentid>
    <comment_count>4</comment_count>
      <attachid>331855</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-01-20 19:52:08 -0800</bug_when>
    <thetext>Created attachment 331855
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1391486</commentid>
    <comment_count>5</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2018-01-21 11:05:07 -0800</bug_when>
    <thetext>Still doesn’t build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1391500</commentid>
    <comment_count>6</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-01-21 14:06:33 -0800</bug_when>
    <thetext>Looks like we need to re-teach UIKitSPI.h about UIWKHandlePosition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1391700</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-01-22 10:29:52 -0800</bug_when>
    <thetext>Can we add a test?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1391729</commentid>
    <comment_count>8</comment_count>
      <attachid>331945</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-01-22 11:33:02 -0800</bug_when>
    <thetext>Created attachment 331945
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1391753</commentid>
    <comment_count>9</comment_count>
      <attachid>331951</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-01-22 12:55:20 -0800</bug_when>
    <thetext>Created attachment 331951
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1391758</commentid>
    <comment_count>10</comment_count>
      <attachid>331951</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2018-01-22 13:04:21 -0800</bug_when>
    <thetext>Comment on attachment 331951
Patch

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

&gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:2638
&gt; +    // This was only readded to avoid a crash due to incombatabliltiese with certain version of UIKit.

&gt; incombatabliltiese</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1391802</commentid>
    <comment_count>11</comment_count>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-01-22 13:51:53 -0800</bug_when>
    <thetext>https://trac.webkit.org/changeset/227355/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1391919</commentid>
    <comment_count>12</comment_count>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-01-22 17:46:28 -0800</bug_when>
    <thetext>https://trac.webkit.org/changeset/227377/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331829</attachid>
            <date>2018-01-19 19:52:26 -0800</date>
            <delta_ts>2018-01-20 19:52:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-181895-20180119195226.patch</filename>
            <type>text/plain</type>
            <size>33990</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjcyNTcpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE4LTAxLTE5ICBNZWdhbiBHYXJk
bmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgVGVtcG9yYXJpbHkgcmVz
dG9yZSBibG9jayBzZWxlY3Rpb24gY29kZSBjb25kaXRpb25hbGx5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODE4OTUKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzM2NTY3MzI1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFdlIG5lZWQgdG8gcmVzdG9yZSB0aGlzIGNvZGUgdGVtcG9yYXJpbHkgdG8gYXZv
aWQgYSBjcmFzaC4KKworICAgICAgICAqIFBsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAg
ICAgKC1bV0tDb250ZW50VmlldyBjaGFuZ2VCbG9ja1NlbGVjdGlvbldpdGhUb3VjaEF0OndpdGhT
ZWxlY3Rpb25Ub3VjaDpmb3JIYW5kbGU6XSk6CisKIDIwMTgtMDEtMTkgIE1lZ2FuIEdhcmRuZXIg
IDxtZWdhbl9nYXJkbmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBQcmVzZW50IFdLRmlsZVVwbG9h
ZFBhbmVsIG9uIGNvcnJlY3QgVmlld0NvbnRyb2xsZXIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCShyZXZpc2lvbiAyMjcwNzcpCisrKyBTb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaAkod29ya2luZyBjb3B5KQpAQCAtNjE0LDYg
KzYxNCwxMCBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBVSVdLR2VzdHVyZVR5CiAtICh2
b2lkKV9jYW5jZWxMb25nUHJlc3NHZXN0dXJlUmVjb2duaXplcjsKIAogQG9wdGlvbmFsCisjaWYg
X19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA8IDEyMDAwMAorLSAodm9pZCljaGFuZ2VC
bG9ja1NlbGVjdGlvbldpdGhUb3VjaEF0OihDR1BvaW50KXBvaW50IHdpdGhTZWxlY3Rpb25Ub3Vj
aDooVUlXS1NlbGVjdGlvblRvdWNoKXRvdWNoIGZvckhhbmRsZTooVUlXS0hhbmRsZVBvc2l0aW9u
KWhhbmRsZTsKK30KKyNlbmRpZgogCiAtICh2b2lkKWNsZWFyU2VsZWN0aW9uOwogLSAodm9pZCly
ZXBsYWNlRGljdGF0ZWRUZXh0OihOU1N0cmluZyAqKW9sZFRleHQgd2l0aFRleHQ6KE5TU3RyaW5n
ICopbmV3VGV4dDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHJldmlz
aW9uIDIyNzA3NykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjk2LDYgKzI5Niw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wg
aW50ZXJwcmV0S2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIGJvb2wgaXND
aGFyRXZlbnQpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcG9zaXRpb25JbmZvcm1hdGlvbkRpZENo
YW5nZShjb25zdCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiYpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgc2F2ZUltYWdlVG9MaWJyYXJ5KFJlZjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+
JiYpID0gMDsKKyNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01BWF9BTExPV0VEIDwgMTIwMDAwCisg
ICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoKHVpbnQzMl90
IHRvdWNoLCB1aW50MzJfdCBmbGFncywgZmxvYXQgZ3Jvd1RocmVzaG9sZCwgZmxvYXQgc2hyaW5r
VGhyZXNob2xkKSA9IDA7CisjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgc2hvd1BsYXliYWNrVGFy
Z2V0UGlja2VyKGJvb2wgaGFzVmlkZW8sIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGVsZW1lbnRS
ZWN0KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpc2FibGVEb3VibGVUYXBHZXN0dXJlc0R1cmlu
Z1RhcElmTmVjZXNzYXJ5KHVpbnQ2NF90IHJlcXVlc3RJRCkgPSAwOwogICAgIHZpcnR1YWwgZG91
YmxlIG1pbmltdW1ab29tU2NhbGUoKSBjb25zdCA9IDA7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMjI3MDc3KQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzOCw2ICs1MzgsOSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZWxlY3RXaXRoR2VzdHVyZShjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCwgV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5LCB1aW50MzJfdCBnZXN0dXJlVHlwZSwgdWlu
dDMyX3QgZ2VzdHVyZVN0YXRlLCBib29sIGlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2RlLCBX
VEY6OkZ1bmN0aW9uPHZvaWQgKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMyX3QsIHVp
bnQzMl90LCB1aW50MzJfdCwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOwogICAgIHZvaWQgdXBk
YXRlU2VsZWN0aW9uV2l0aFRvdWNoZXMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQsIHVpbnQzMl90
IHRvdWNoZXMsIGJvb2wgYmFzZUlzU3RhcnQsIFdURjo6RnVuY3Rpb248dm9pZCAoY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmLCB1aW50MzJfdCwgdWludDMyX3QsIENhbGxiYWNrQmFzZTo6RXJyb3Ip
PiYmKTsKICAgICB2b2lkIHNlbGVjdFdpdGhUd29Ub3VjaGVzKGNvbnN0IFdlYkNvcmU6OkludFBv
aW50IGZyb20sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50IHRvLCB1aW50MzJfdCBnZXN0dXJlVHlw
ZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCBXVEY6OkZ1bmN0aW9uPHZvaWQgKGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiwgdWludDMyX3QsIHVpbnQzMl90LCB1aW50MzJfdCwgQ2FsbGJhY2tCYXNl
OjpFcnJvcik+JiYpOworI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPCAxMjAw
MDAKKyAgICB2b2lkIHVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoKGNvbnN0IFdlYkNvcmU6
OkludFBvaW50LCB1aW50MzJfdCB0b3VjaCwgdWludDMyX3QgaGFuZGxlUG9zaXRpb24pOworI2Vu
ZGlmCiAgICAgdm9pZCBleHRlbmRTZWxlY3Rpb24oV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5KTsK
ICAgICB2b2lkIHNlbGVjdFdvcmRCYWNrd2FyZCgpOwogICAgIHZvaWQgbW92ZVNlbGVjdGlvbkJ5
T2Zmc2V0KGludDMyX3Qgb2Zmc2V0LCBXVEY6OkZ1bmN0aW9uPHZvaWQgKENhbGxiYWNrQmFzZTo6
RXJyb3IpPiYmKTsKQEAgLTU2Miw2ICs1NjUsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdG9wSW50
ZXJhY3Rpb24oKTsKICAgICB2b2lkIHBlcmZvcm1BY3Rpb25PbkVsZW1lbnQodWludDMyX3QgYWN0
aW9uKTsKICAgICB2b2lkIHNhdmVJbWFnZVRvTGlicmFyeShjb25zdCBTaGFyZWRNZW1vcnk6Okhh
bmRsZSYgaW1hZ2VIYW5kbGUsIHVpbnQ2NF90IGltYWdlU2l6ZSk7CisjaWYgX19JUEhPTkVfT1Nf
VkVSU0lPTl9NQVhfQUxMT1dFRCA8IDEyMDAwMAorICAgIHZvaWQgZGlkVXBkYXRlQmxvY2tTZWxl
Y3Rpb25XaXRoVG91Y2godWludDMyX3QgdG91Y2gsIHVpbnQzMl90IGZsYWdzLCBmbG9hdCBncm93
VGhyZXNob2xkLCBmbG9hdCBzaHJpbmtUaHJlc2hvbGQpOworI2VuZGlmCiAgICAgdm9pZCBmb2N1
c05leHRBc3Npc3RlZE5vZGUoYm9vbCBpc0ZvcndhcmQsIFdURjo6RnVuY3Rpb248dm9pZCAoQ2Fs
bGJhY2tCYXNlOjpFcnJvcik+JiYpOwogICAgIHZvaWQgc2V0QXNzaXN0ZWROb2RlVmFsdWUoY29u
c3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXRBc3Npc3RlZE5vZGVWYWx1ZUFzTnVtYmVyKGRvdWJs
ZSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMu
aW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1l
c3NhZ2VzLmluCShyZXZpc2lvbiAyMjcwNzcpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTE4Miw2ICsxODIsOSBA
QCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogICAgIFNlbGVjdGlvbkNvbnRleHRDYWxsYmFj
ayhTdHJpbmcgc2VsZWN0ZWRUZXh0LCBTdHJpbmcgYmVmb3JlVGV4dCwgU3RyaW5nIGFmdGVyVGV4
dCwgV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiAgICAgSW50ZXJwcmV0S2V5RXZlbnQo
c3RydWN0IFdlYktpdDo6RWRpdG9yU3RhdGUgc3RhdGUsIGJvb2wgaXNDaGFyRXZlbnQpIC0+IChi
b29sIGhhbmRsZWQpCiAgICAgRGlkUmVjZWl2ZVBvc2l0aW9uSW5mb3JtYXRpb24oc3RydWN0IFdl
YktpdDo6SW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24gaW5mb3JtYXRpb24pCisjaWYg
X19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA8IDEyMDAwMAorICAgIERpZFVwZGF0ZUJs
b2NrU2VsZWN0aW9uV2l0aFRvdWNoKHVpbnQzMl90IHRvdWNoLCB1aW50MzJfdCBmbGFncywgZmxv
YXQgZ3Jvd1RocmVzaG9sZCwgZmxvYXQgc2hyaW5rVGhyZXNob2xkKQorI2VuZGlmCiAgICAgU2F2
ZUltYWdlVG9MaWJyYXJ5KFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGUgaGFuZGxlLCB1aW50
NjRfdCBzaXplKQogICAgIFNob3dQbGF5YmFja1RhcmdldFBpY2tlcihib29sIGhhc1ZpZGVvLCBX
ZWJDb3JlOjpJbnRSZWN0IGVsZW1lbnRSZWN0KQogICAgIENvbW1pdFBvdGVudGlhbFRhcEZhaWxl
ZCgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudElt
cGxJT1MuaAkocmV2aXNpb24gMjI3MDc3KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9z
L1BhZ2VDbGllbnRJbXBsSU9TLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw2ICsxMzIsOSBAQCBw
cml2YXRlOgogICAgIGJvb2wgaW50ZXJwcmV0S2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9h
cmRFdmVudCYsIGJvb2wgaXNDaGFyRXZlbnQpIG92ZXJyaWRlOwogICAgIHZvaWQgcG9zaXRpb25J
bmZvcm1hdGlvbkRpZENoYW5nZShjb25zdCBJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlv
biYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2F2ZUltYWdlVG9MaWJyYXJ5KFJlZjxXZWJDb3JlOjpT
aGFyZWRCdWZmZXI+JiYpIG92ZXJyaWRlOworI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FM
TE9XRUQgPCAxMjAwMDAKKyAgICB2b2lkIGRpZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNo
KHVpbnQzMl90IHRvdWNoLCB1aW50MzJfdCBmbGFncywgZmxvYXQgZ3Jvd1RocmVzaG9sZCwgZmxv
YXQgc2hyaW5rVGhyZXNob2xkKSBvdmVycmlkZTsKKyNlbmRpZgogICAgIHZvaWQgc2hvd1BsYXli
YWNrVGFyZ2V0UGlja2VyKGJvb2wgaGFzVmlkZW8sIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGVs
ZW1lbnRSZWN0KSBvdmVycmlkZTsKIAogICAgIGJvb2wgaGFuZGxlUnVuT3BlblBhbmVsKFdlYlBh
Z2VQcm94eSosIFdlYkZyYW1lUHJveHkqLCBBUEk6Ok9wZW5QYW5lbFBhcmFtZXRlcnMqLCBXZWJP
cGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5Kikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCShyZXZpc2lvbiAy
MjcwNzcpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1Mu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTU2MSw2ICs1NjEsMTQgQEAgdm9pZCBQYWdlQ2xpZW50SW1w
bDo6c3RvcEFzc2lzdGluZ05vZGUoKQogewogICAgIFttX2NvbnRlbnRWaWV3IF9zdG9wQXNzaXN0
aW5nTm9kZV07CiB9CisgICAgCisjaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA8
IDEyMDAwMAordm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkVXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRo
VG91Y2godWludDMyX3QgdG91Y2gsIHVpbnQzMl90IGZsYWdzLCBmbG9hdCBncm93VGhyZXNob2xk
LCBmbG9hdCBzaHJpbmtUaHJlc2hvbGQpCit7CisgICAgW21fY29udGVudFZpZXcgX2RpZFVwZGF0
ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoOihTZWxlY3Rpb25Ub3VjaCl0b3VjaCB3aXRoRmxhZ3M6
KFNlbGVjdGlvbkZsYWdzKWZsYWdzIGdyb3dUaHJlc2hvbGQ6Z3Jvd1RocmVzaG9sZCBzaHJpbmtU
aHJlc2hvbGQ6c2hyaW5rVGhyZXNob2xkXTsKK30KKyNlbmRpZgorICAgIAogCiB2b2lkIFBhZ2VD
bGllbnRJbXBsOjpzaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoYm9vbCBoYXNWaWRlbywgY29uc3Qg
SW50UmVjdCYgZWxlbWVudFJlY3QpCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCShyZXZpc2lvbiAyMjcw
NzcpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5NSw2ICsyOTUsOSBAQCBGT1JfRUFDSF9XS0NPTlRF
TlRWSUVXX0FDVElPTihERUNMQVJFX1dLCiAtICh2b2lkKV9kaWRFbmRTY3JvbGxpbmdPclpvb21p
bmc7CiAtICh2b2lkKV9vdmVyZmxvd1Njcm9sbGluZ1dpbGxCZWdpbjsKIC0gKHZvaWQpX292ZXJm
bG93U2Nyb2xsaW5nRGlkRW5kOworI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQg
PCAxMjAwMDAKKy0gKHZvaWQpX2RpZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoOihXZWJL
aXQ6OlNlbGVjdGlvblRvdWNoKXRvdWNoIHdpdGhGbGFnczooV2ViS2l0OjpTZWxlY3Rpb25GbGFn
cylmbGFncyBncm93VGhyZXNob2xkOihDR0Zsb2F0KWdyb3dUaHJlc2hvbGQgc2hyaW5rVGhyZXNo
b2xkOihDR0Zsb2F0KXNocmlua1RocmVzaG9sZDsKKyNlbmRpZgogLSAodm9pZClfc2hvd1BsYXli
YWNrVGFyZ2V0UGlja2VyOihCT09MKWhhc1ZpZGVvIGZyb21SZWN0Oihjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JillbGVtZW50UmVjdDsKIC0gKHZvaWQpX3Nob3dSdW5PcGVuUGFuZWw6KEFQSTo6T3Bl
blBhbmVsUGFyYW1ldGVycyopcGFyYW1ldGVycyByZXN1bHRMaXN0ZW5lcjooV2ViS2l0OjpXZWJP
cGVuUGFuZWxSZXN1bHRMaXN0ZW5lclByb3h5KilsaXN0ZW5lcjsKIC0gKHZvaWQpYWNjZXNzb3J5
RG9uZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50
ZXJhY3Rpb24ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dL
Q29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQkocmV2aXNpb24gMjI3MjQ3KQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQkod29ya2luZyBj
b3B5KQpAQCAtMjUwMiw2ICsyNTAyLDIyIEBAIHN0YXRpYyBpbmxpbmUgVUlXS1NlbGVjdGlvbkZs
YWdzIHRvVUlXS1MKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VUlXS1NlbGVjdGlvbkZsYWdzPih1
aUZsYWdzKTsKIH0KIAorI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPCAxMjAw
MDAKK3N0YXRpYyBpbmxpbmUgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb24gdG9TZWxlY3Rpb25IYW5k
bGVQb3NpdGlvbihVSVdLSGFuZGxlUG9zaXRpb24gcG9zaXRpb24pCit7CisgICAgc3dpdGNoIChw
b3NpdGlvbikgeworICAgIGNhc2UgVUlXS0hhbmRsZVRvcDoKKyAgICAgICAgcmV0dXJuIFNlbGVj
dGlvbkhhbmRsZVBvc2l0aW9uOjpUb3A7CisgICAgY2FzZSBVSVdLSGFuZGxlUmlnaHQ6CisgICAg
ICAgIHJldHVybiBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6UmlnaHQ7CisgICAgY2FzZSBVSVdL
SGFuZGxlQm90dG9tOgorICAgICAgICByZXR1cm4gU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OkJv
dHRvbTsKKyAgICBjYXNlIFVJV0tIYW5kbGVMZWZ0OgorICAgICAgICByZXR1cm4gU2VsZWN0aW9u
SGFuZGxlUG9zaXRpb246OkxlZnQ7CisgICAgfQorfQorI2VuZGlmCisKIHN0YXRpYyBpbmxpbmUg
V2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5IHRvV0tUZXh0R3JhbnVsYXJpdHkoVUlUZXh0R3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHkpCiB7CiAgICAgc3dpdGNoIChncmFudWxhcml0eSkgewpAQCAtMjU2
MCw2ICsyNTc2LDE1IEBAIHN0YXRpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWRXaXRoVG91Y2goV0sK
ICAgICAgICAgWyhVSVdLVGV4dEludGVyYWN0aW9uQXNzaXN0YW50ICopW3ZpZXcgaW50ZXJhY3Rp
b25Bc3Npc3RhbnRdIHNlbGVjdGlvbkNoYW5nZWRXaXRoVG91Y2hBdDooQ0dQb2ludClwb2ludCB3
aXRoU2VsZWN0aW9uVG91Y2g6dG9VSVdLU2VsZWN0aW9uVG91Y2goKFNlbGVjdGlvblRvdWNoKXRv
dWNoKSB3aXRoRmxhZ3M6c3RhdGljX2Nhc3Q8VUlXS1NlbGVjdGlvbkZsYWdzPihmbGFncyldOwog
fQogCisjaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA8IDEyMDAwMAorLSAodm9p
ZClfZGlkVXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2g6KFNlbGVjdGlvblRvdWNoKXRvdWNo
IHdpdGhGbGFnczooU2VsZWN0aW9uRmxhZ3MpZmxhZ3MgZ3Jvd1RocmVzaG9sZDooQ0dGbG9hdCln
cm93VGhyZXNob2xkIHNocmlua1RocmVzaG9sZDooQ0dGbG9hdClzaHJpbmtUaHJlc2hvbGQKK3sK
KyAgICBbX3dlYlNlbGVjdGlvbkFzc2lzdGFudCBibG9ja1NlbGVjdGlvbkNoYW5nZWRXaXRoVG91
Y2g6dG9VSVdLU2VsZWN0aW9uVG91Y2godG91Y2gpIHdpdGhGbGFnczp0b1VJV0tTZWxlY3Rpb25G
bGFncyhmbGFncykgZ3Jvd1RocmVzaG9sZDpncm93VGhyZXNob2xkIHNocmlua1RocmVzaG9sZDpz
aHJpbmtUaHJlc2hvbGRdOworICAgIGlmICh0b3VjaCAhPSBTZWxlY3Rpb25Ub3VjaDo6U3RhcnRl
ZCAmJiB0b3VjaCAhPSBTZWxlY3Rpb25Ub3VjaDo6TW92ZWQpCisgICAgICAgIF91c2luZ0dlc3R1
cmVGb3JTZWxlY3Rpb24gPSBOTzsKK30KKyNlbmRpZgorCiAtIChCT09MKV9pc0ludGVyYWN0aW5n
V2l0aEFzc2lzdGVkTm9kZQogewogICAgIHJldHVybiBfdGV4dFNlbGVjdGlvbkFzc2lzdGFudCAh
PSBuaWw7CkBAIC0yNjA3LDYgKzI2MzIsMTkgQEAgLSAodm9pZCljaGFuZ2VTZWxlY3Rpb25XaXRo
VG91Y2hlc0Zyb206KAogICAgIH0pOwogfQogCisjaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhf
QUxMT1dFRCA8IDEyMDAwMAorLSAodm9pZCljaGFuZ2VCbG9ja1NlbGVjdGlvbldpdGhUb3VjaEF0
OihDR1BvaW50KXBvaW50IHdpdGhTZWxlY3Rpb25Ub3VjaDooVUlXS1NlbGVjdGlvblRvdWNoKXRv
dWNoIGZvckhhbmRsZTooVUlXS0hhbmRsZVBvc2l0aW9uKWhhbmRsZQoreworICAgIC8vIFRoaXMg
d2FzIG9ubHkgcmVhZGRlZCB0byBhdm9pZCBhIGNyYXNoIGR1ZSB0byBpbmNvbWJhdGFibGlsdGll
c2Ugd2l0aCBjZXJ0YWluIHZlcnNpb24gb2YgVUlLaXQuCisgICAgLy8gVGhpcyBzaG91bGQgYmUg
cmVtb3ZlZCBBU0FQLgorICAgIC8vIFRoZSBzZWxlY3Rpb24gd2lsbCBiZSBwcm9wZXJseSB1cGRh
dGVkIHdpdGggdGhlIG5leHQgdXBkYXRlLCBzZWxlY3Rpb24gc3RpbGwgZnVuY3Rpb25zCisgICAg
Ly8gd2l0aG91dCB0aGlzIGZ1bmN0aW9uIGRvaW5nIGFueXRoaW5nLgorICAgIAorICAgIF91c2lu
Z0dlc3R1cmVGb3JTZWxlY3Rpb24gPSBZRVM7CisgICAgX3BhZ2UtPnVwZGF0ZUJsb2NrU2VsZWN0
aW9uV2l0aFRvdWNoKFdlYkNvcmU6OkludFBvaW50KHBvaW50KSwgc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KHRvU2VsZWN0aW9uVG91Y2godG91Y2gpKSwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHRvU2Vs
ZWN0aW9uSGFuZGxlUG9zaXRpb24oaGFuZGxlKSkpOworfQorI2VuZGlmCisKIC0gKHZvaWQpbW92
ZUJ5T2Zmc2V0OihOU0ludGVnZXIpb2Zmc2V0CiB7CiAgICAgaWYgKCFvZmZzZXQpCkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0JKHJldmlz
aW9uIDIyNzA3NykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJ
T1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTY1MSw2ICs2NTEsMTggQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OnNhdmVJbWFnZVRvTGlicmFyeShjbwogICAgIGF1dG8gYnVmZmVyID0gU2hhcmVkQnVmZmVy
OjpjcmVhdGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHNoYXJlZE1lbW9yeUJ1ZmZlci0+
ZGF0YSgpKSwgaW1hZ2VTaXplKTsKICAgICBtX3BhZ2VDbGllbnQuc2F2ZUltYWdlVG9MaWJyYXJ5
KFdURk1vdmUoYnVmZmVyKSk7CiB9CisgICAgCisjaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhf
QUxMT1dFRCA8IDEyMDAwMAordm9pZCBXZWJQYWdlUHJveHk6OnVwZGF0ZUJsb2NrU2VsZWN0aW9u
V2l0aFRvdWNoKGNvbnN0IFdlYkNvcmU6OkludFBvaW50IHBvaW50LCB1aW50MzJfdCB0b3VjaCwg
dWludDMyX3QgaGFuZGxlUG9zaXRpb24pCit7CisgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpVcGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaChwb2ludCwgdG91Y2gsIGhh
bmRsZVBvc2l0aW9uKSwgbV9wYWdlSUQpOworfQorICAgIAordm9pZCBXZWJQYWdlUHJveHk6OmRp
ZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoKHVpbnQzMl90IHRvdWNoLCB1aW50MzJfdCBm
bGFncywgZmxvYXQgZ3Jvd1RocmVzaG9sZCwgZmxvYXQgc2hyaW5rVGhyZXNob2xkKQoreworICAg
IG1fcGFnZUNsaWVudC5kaWRVcGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaCh0b3VjaCwgZmxh
Z3MsIGdyb3dUaHJlc2hvbGQsIHNocmlua1RocmVzaG9sZCk7Cit9CisjZW5kaWYKIAogdm9pZCBX
ZWJQYWdlUHJveHk6OmFwcGxpY2F0aW9uRGlkRW50ZXJCYWNrZ3JvdW5kKCkKIHsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDIyNzA3
NykKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTY5LDYgKzU2OSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGJsdXJBc3Npc3Rl
ZE5vZGUoKTsKICAgICB2b2lkIHNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IFdlYkNvcmU6OkludFBv
aW50JiwgdWludDMyX3QgZ3JhbnVsYXJpdHksIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJf
dCBnZXN0dXJlU3RhdGUsIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUsIENhbGxi
YWNrSUQpOwogICAgIHZvaWQgdXBkYXRlU2VsZWN0aW9uV2l0aFRvdWNoZXMoY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmLCB1aW50MzJfdCB0b3VjaGVzLCBib29sIGJhc2VJc1N0YXJ0LCBDYWxsYmFj
a0lEKTsKKyNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01BWF9BTExPV0VEIDwgMTIwMDAwCisgICAg
dm9pZCB1cGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaChjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYsIHVpbnQzMl90IHRvdWNoLCB1aW50MzJfdCBoYW5kbGVQb3NpdGlvbik7CisjZW5kaWYKICAg
ICB2b2lkIHNlbGVjdFdpdGhUd29Ub3VjaGVzKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBmcm9t
LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgdG8sIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50
MzJfdCBnZXN0dXJlU3RhdGUsIENhbGxiYWNrSUQpOwogICAgIHZvaWQgZXh0ZW5kU2VsZWN0aW9u
KHVpbnQzMl90IGdyYW51bGFyaXR5KTsKICAgICB2b2lkIHNlbGVjdFdvcmRCYWNrd2FyZCgpOwpA
QCAtMTA4NSw2ICsxMDg4LDEyIEBAIHByaXZhdGU6CiAKICAgICBzdGF0aWMgdm9pZCBjb252ZXJ0
U2VsZWN0aW9uUmVjdHNUb1Jvb3RWaWV3KFdlYkNvcmU6OkZyYW1lVmlldyosIFZlY3RvcjxXZWJD
b3JlOjpTZWxlY3Rpb25SZWN0PiYpOwogICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2VG
b3JXZWJTZWxlY3Rpb25BdFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgY29uc3Qg
V2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uJiwgU2VsZWN0aW9uRmxhZ3MmKTsKKyNpZiBfX0lQSE9O
RV9PU19WRVJTSU9OX01BWF9BTExPV0VEIDwgMTIwMDAwCisgICAgUmVmUHRyPFdlYkNvcmU6OlJh
bmdlPiByYW5nZUZvckJsb2NrQXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOworICAg
IHZvaWQgY29tcHV0ZUV4cGFuZEFuZFNocmlua1RocmVzaG9sZHNGb3JIYW5kbGUoY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmLCBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbiwgZmxvYXQmIGdyb3dUaHJl
c2hvbGQsIGZsb2F0JiBzaHJpbmtUaHJlc2hvbGQpOworICAgIFJlZjxXZWJDb3JlOjpSYW5nZT4g
ZXhwYW5kZWRSYW5nZUZyb21IYW5kbGUoV2ViQ29yZTo6UmFuZ2UmLCBTZWxlY3Rpb25IYW5kbGVQ
b3NpdGlvbik7CisgICAgUmVmPFdlYkNvcmU6OlJhbmdlPiBjb250cmFjdGVkUmFuZ2VGcm9tSGFu
ZGxlKFdlYkNvcmU6OlJhbmdlJiBjdXJyZW50UmFuZ2UsIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9u
LCBTZWxlY3Rpb25GbGFncyYpOworI2VuZGlmCiAgICAgdm9pZCBnZXRBc3Npc3RlZE5vZGVJbmZv
cm1hdGlvbihBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbiYpOwogICAgIHZvaWQgcGxhdGZvcm1Jbml0
aWFsaXplQWNjZXNzaWJpbGl0eSgpOwogICAgIHZvaWQgaGFuZGxlU3ludGhldGljQ2xpY2soV2Vi
Q29yZTo6Tm9kZSogbm9kZVJlc3BvbmRpbmdUb0NsaWNrLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50JiBsb2NhdGlvbik7CkBAIC0xMDkzLDYgKzExMDIsOSBAQCBwcml2YXRlOgogICAgIHZvaWQg
cmVzZXRUZXh0QXV0b3NpemluZygpOwogICAgIFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiB2aXNp
YmxlUG9zaXRpb25JbkZvY3VzZWROb2RlRm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6RnJhbWUmLCBj
b25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5v
ZGUpOwogICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2VGb3JHcmFudWxhcml0eUF0UG9p
bnQoV2ViQ29yZTo6RnJhbWUmLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQzMl90IGdy
YW51bGFyaXR5LCBib29sIGlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2RlKTsKKyNpZiBfX0lQ
SE9ORV9PU19WRVJTSU9OX01BWF9BTExPV0VEIDwgMTIwMDAwCisgICAgUmVmUHRyPFdlYkNvcmU6
OlJhbmdlPiBjaGFuZ2VCbG9ja1NlbGVjdGlvbihjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIFNl
bGVjdGlvbkhhbmRsZVBvc2l0aW9uLCBmbG9hdCYgZ3Jvd1RocmVzaG9sZCwgZmxvYXQmIHNocmlu
a1RocmVzaG9sZCwgU2VsZWN0aW9uRmxhZ3MmKTsKKyNlbmRpZgogI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShJT1MpICYmIEVOQUJMRShEQVRBX0lOVEVSQUNUSU9OKQpJbmRleDogU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCShyZXZp
c2lvbiAyMjcwNzcpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw5IEBAIG1lc3NhZ2VzIC0+
IFdlYlBhZ2UgTGVnYWN5UmVjZWl2ZXIgewogICAgIEJsdXJBc3Npc3RlZE5vZGUoKQogICAgIFNl
bGVjdFdpdGhHZXN0dXJlKFdlYkNvcmU6OkludFBvaW50IHBvaW50LCB1aW50MzJfdCBncmFudWxh
cml0eSwgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgYm9vbCBp
c0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSwgV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNr
SUQpCiAgICAgVXBkYXRlU2VsZWN0aW9uV2l0aFRvdWNoZXMoV2ViQ29yZTo6SW50UG9pbnQgcG9p
bnQsIHVpbnQzMl90IHRvdWNoZXMsIGJvb2wgYmFzZUlzU3RhcnQsIFdlYktpdDo6Q2FsbGJhY2tJ
RCBjYWxsYmFja0lEKQorI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPCAxMjAw
MDAKKyAgICBVcGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaChXZWJDb3JlOjpJbnRQb2ludCBw
b2ludCwgdWludDMyX3QgdG91Y2gsIHVpbnQzMl90IGhhbmRsZVBvc2l0aW9uKQorI2VuZGlmCiAg
ICAgU2VsZWN0V2l0aFR3b1RvdWNoZXMoV2ViQ29yZTo6SW50UG9pbnQgZnJvbSwgV2ViQ29yZTo6
SW50UG9pbnQgdG8sIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0dXJlU3RhdGUs
IFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQogICAgIEV4dGVuZFNlbGVjdGlvbih1aW50
MzJfdCBncmFudWxhcml0eSkKICAgICBTZWxlY3RXb3JkQmFja3dhcmQoKQpJbmRleDogU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0JKHJl
dmlzaW9uIDIyNzA3NykKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9X
ZWJQYWdlSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDU1LDYgKzEwNTUsMzY0IEBAIFJlZlB0
cjxSYW5nZT4gV2ViUGFnZTo6cmFuZ2VGb3JXZWJTZWxlY3QKICAgICByZXR1cm4gcmFuZ2UtPmNv
bGxhcHNlZCgpID8gbnVsbHB0ciA6IHJhbmdlOwogfQogCisjaWYgX19JUEhPTkVfT1NfVkVSU0lP
Tl9NQVhfQUxMT1dFRCA8IDEyMDAwMAorc3RhdGljIGJvb2wgY2FuU2hyaW5rVG9UZXh0U2VsZWN0
aW9uKFJhbmdlJiByYW5nZSkKK3sKKyAgICBpZiAocmFuZ2Uuc3RhcnRDb250YWluZXIoKS5pc1Rl
eHROb2RlKCkgJiYgcmFuZ2UuZW5kQ29udGFpbmVyKCkuaXNUZXh0Tm9kZSgpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gY2FuU2hyaW5rVG9UZXh0U2VsZWN0aW9uKHJhbmdlLmNv
bW1vbkFuY2VzdG9yQ29udGFpbmVyKCkpOworfQorc3RhdGljIGNvbnN0IGludCBtYXhIaXRUZXN0
cyA9IDEwOworCitzdGF0aWMgaW5saW5lIGZsb2F0IGRpc3RhbmNlQmV0d2VlblJlY3RzRm9yUG9z
aXRpb24oSW50UmVjdCYgZmlyc3QsIEludFJlY3QmIHNlY29uZCwgU2VsZWN0aW9uSGFuZGxlUG9z
aXRpb24gaGFuZGxlUG9zaXRpb24pCit7CisgICAgc3dpdGNoIChoYW5kbGVQb3NpdGlvbikgewor
ICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OlRvcDoKKyAgICAgICAgcmV0dXJuIGFi
cyhmaXJzdC55KCkgLSBzZWNvbmQueSgpKTsKKyAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0
aW9uOjpSaWdodDoKKyAgICAgICAgcmV0dXJuIGFicyhmaXJzdC5tYXhYKCkgLSBzZWNvbmQubWF4
WCgpKTsKKyAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpCb3R0b206CisgICAgICAg
IHJldHVybiBhYnMoZmlyc3QubWF4WSgpIC0gc2Vjb25kLm1heFkoKSk7CisgICAgY2FzZSBTZWxl
Y3Rpb25IYW5kbGVQb3NpdGlvbjo6TGVmdDoKKyAgICAgICAgcmV0dXJuIGFicyhmaXJzdC54KCkg
LSBzZWNvbmQueCgpKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCByZWN0c0Vzc2Vu
dGlhbGx5VGhlU2FtZShJbnRSZWN0JiBmaXJzdCwgSW50UmVjdCYgc2Vjb25kLCBmbG9hdCBhbGxv
d2FibGVQZXJjZW50RGlmZmVyZW5jZSkKK3sKKyAgICBjb25zdCBmbG9hdCBtaW5NYWduaXR1ZGVS
YXRpbyA9IDEuMCAtIGFsbG93YWJsZVBlcmNlbnREaWZmZXJlbmNlOworICAgIGNvbnN0IGZsb2F0
IG1heERpc3BsYWNlbWVudFJhdGlvID0gYWxsb3dhYmxlUGVyY2VudERpZmZlcmVuY2U7CisgICAg
CisgICAgZmxvYXQgeE9yaWdpblNoaWZ0UmF0aW8gPSBhYnMoZmlyc3QueCgpIC0gc2Vjb25kLngo
KSkgLyBzdGQ6Om1pbihmaXJzdC53aWR0aCgpLCBzZWNvbmQud2lkdGgoKSk7CisgICAgZmxvYXQg
eU9yaWdpblNoaWZ0UmF0aW8gPSBhYnMoZmlyc3QueSgpIC0gc2Vjb25kLnkoKSkgLyBzdGQ6Om1p
bihmaXJzdC5oZWlnaHQoKSwgc2Vjb25kLmhlaWdodCgpKTsKKyAgICAKKyAgICBmbG9hdCB3aWR0
aFJhdGlvID0gc3RkOjptaW4oZmlyc3Qud2lkdGgoKSAvIHNlY29uZC53aWR0aCgpLCBzZWNvbmQu
d2lkdGgoKSAvIGZpcnN0LndpZHRoKCkpOworICAgIGZsb2F0IGhlaWdodFJhdGlvID0gc3RkOjpt
aW4oZmlyc3QuaGVpZ2h0KCkgLyBzZWNvbmQuaGVpZ2h0KCksIHNlY29uZC5oZWlnaHQoKSAvIGZp
cnN0LmhlaWdodCgpKTsKKyAgICByZXR1cm4gKCh3aWR0aFJhdGlvID4gbWluTWFnbml0dWRlUmF0
aW8gJiYgeE9yaWdpblNoaWZ0UmF0aW8gPCBtYXhEaXNwbGFjZW1lbnRSYXRpbykgJiYgKGhlaWdo
dFJhdGlvID4gbWluTWFnbml0dWRlUmF0aW8gJiYgeU9yaWdpblNoaWZ0UmF0aW8gPCBtYXhEaXNw
bGFjZW1lbnRSYXRpbykpOworfQorCitzdGF0aWMgaW5saW5lIFJlZlB0cjxSYW5nZT4gdW5pb25E
T01SYW5nZXMoUmFuZ2UqIHJhbmdlQSwgUmFuZ2UqIHJhbmdlQikKK3sKKyAgICBpZiAoIXJhbmdl
QikKKyAgICAgICAgcmV0dXJuIHJhbmdlQTsKKyAgICBpZiAoIXJhbmdlQSkKKyAgICAgICAgcmV0
dXJuIHJhbmdlQjsKKyAgICAKKyAgICBhdXRvIHN0YXJ0VG9TdGFydENvbXBhcmlzb24gPSByYW5n
ZUEtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6U1RBUlRfVE9fU1RBUlQsICpyYW5nZUIp
OworICAgIGlmIChzdGFydFRvU3RhcnRDb21wYXJpc29uLmhhc0V4Y2VwdGlvbigpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBhdXRvIGVuZFRvRW5kQ29tcGFyaXNvbiA9IHJh
bmdlQS0+Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCAqcmFuZ2VCKTsK
KyAgICBpZiAoZW5kVG9FbmRDb21wYXJpc29uLmhhc0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAKKyAgICBhdXRvKiBzdGFydCA9IHN0YXJ0VG9TdGFydENvbXBhcmlz
b24ucmVsZWFzZVJldHVyblZhbHVlKCkgPD0gMCA/IHJhbmdlQSA6IHJhbmdlQjsKKyAgICBhdXRv
KiBlbmQgPSBlbmRUb0VuZENvbXBhcmlzb24ucmVsZWFzZVJldHVyblZhbHVlKCkgPD0gMCA/IHJh
bmdlQiA6IHJhbmdlQTsKKyAgICAKKyAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShyYW5nZUEtPm93
bmVyRG9jdW1lbnQoKSwgJnN0YXJ0LT5zdGFydENvbnRhaW5lcigpLCBzdGFydC0+c3RhcnRPZmZz
ZXQoKSwgJmVuZC0+ZW5kQ29udGFpbmVyKCksIGVuZC0+ZW5kT2Zmc2V0KCkpOworfQorCitzdGF0
aWMgaW5saW5lIEludFBvaW50IGNvbXB1dGVFZGdlQ2VudGVyKGNvbnN0IEludFJlY3QmIGJveCwg
U2VsZWN0aW9uSGFuZGxlUG9zaXRpb24gaGFuZGxlUG9zaXRpb24pCit7CisgICAgc3dpdGNoICho
YW5kbGVQb3NpdGlvbikgeworICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OlRvcDoK
KyAgICAgICAgcmV0dXJuIEludFBvaW50KGJveC54KCkgKyBib3gud2lkdGgoKSAvIDIsIGJveC55
KCkpOworICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OlJpZ2h0OgorICAgICAgICBy
ZXR1cm4gSW50UG9pbnQoYm94Lm1heFgoKSwgYm94LnkoKSArIGJveC5oZWlnaHQoKSAvIDIpOwor
ICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OkJvdHRvbToKKyAgICAgICAgcmV0dXJu
IEludFBvaW50KGJveC54KCkgKyBib3gud2lkdGgoKSAvIDIsIGJveC5tYXhZKCkpOworICAgIGNh
c2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OkxlZnQ6CisgICAgICAgIHJldHVybiBJbnRQb2lu
dChib3gueCgpLCBib3gueSgpICsgYm94LmhlaWdodCgpIC8gMik7CisgICAgfQorfQorCitSZWY8
UmFuZ2U+IFdlYlBhZ2U6OmV4cGFuZGVkUmFuZ2VGcm9tSGFuZGxlKFJhbmdlJiBjdXJyZW50UmFu
Z2UsIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uIGhhbmRsZVBvc2l0aW9uKQoreworICAgIEludFJl
Y3QgY3VycmVudEJveCA9IHNlbGVjdGlvbkJveEZvclJhbmdlKCZjdXJyZW50UmFuZ2UpOworICAg
IEludFBvaW50IGVkZ2VDZW50ZXIgPSBjb21wdXRlRWRnZUNlbnRlcihjdXJyZW50Qm94LCBoYW5k
bGVQb3NpdGlvbik7CisgICAgc3RhdGljIGNvbnN0IGZsb2F0IG1heERpc3RhbmNlID0gMTAwMDsK
KyAgICBjb25zdCBmbG9hdCBtdWx0aXBsZSA9IHBvd2YobWF4RGlzdGFuY2UsIDEuMCAvIChtYXhI
aXRUZXN0cyAtIDEpKTsKKyAgICBmbG9hdCBkaXN0YW5jZSA9IDE7CisgICAgCisgICAgUmVmUHRy
PFJhbmdlPiBiZXN0UmFuZ2U7CisgICAgSW50UmVjdCBiZXN0UmVjdDsKKyAgICAKKyAgICB3aGls
ZSAoZGlzdGFuY2UgPCBtYXhEaXN0YW5jZSkgeworICAgICAgICBpZiAoYmVzdFJhbmdlKSB7Cisg
ICAgICAgICAgICBpZiAoZGlzdGFuY2VCZXR3ZWVuUmVjdHNGb3JQb3NpdGlvbihiZXN0UmVjdCwg
Y3VycmVudEJveCwgaGFuZGxlUG9zaXRpb24pIDwgZGlzdGFuY2UpIHsKKyAgICAgICAgICAgICAg
ICAvLyBCcmVhayBlYXJseSwgd2UncmUgdW5saWtlbHkgdG8gZG8gYW55IGJldHRlci4KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgSW50UG9pbnQgdGVzdFBvaW50ID0gZWRnZUNlbnRlcjsKKyAgICAgICAgc3dpdGNoICho
YW5kbGVQb3NpdGlvbikgeworICAgICAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpU
b3A6CisgICAgICAgICAgICB0ZXN0UG9pbnQubW92ZSgwLCAtZGlzdGFuY2UpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OlJpZ2h0Ogor
ICAgICAgICAgICAgdGVzdFBvaW50Lm1vdmUoZGlzdGFuY2UsIDApOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OkJvdHRvbToKKyAgICAg
ICAgICAgIHRlc3RQb2ludC5tb3ZlKDAsIGRpc3RhbmNlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpMZWZ0OgorICAgICAgICAgICAg
dGVzdFBvaW50Lm1vdmUoLWRpc3RhbmNlLCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBkaXN0YW5jZSA9IGNlaWxmKGRpc3RhbmNlICogbXVsdGlw
bGUpOworICAgICAgICAKKyAgICAgICAgUmVmUHRyPFJhbmdlPiBuZXdSYW5nZTsKKyAgICAgICAg
UmVmUHRyPFJhbmdlPiByYW5nZUF0UG9zaXRpb24gPSByYW5nZUZvckJsb2NrQXRQb2ludCh0ZXN0
UG9pbnQpOworICAgICAgICBpZiAoIXJhbmdlQXRQb3NpdGlvbiB8fCAmY3VycmVudFJhbmdlLm93
bmVyRG9jdW1lbnQoKSAhPSAmcmFuZ2VBdFBvc2l0aW9uLT5vd25lckRvY3VtZW50KCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChyYW5nZUF0UG9zaXRpb24t
PmNvbnRhaW5zKGN1cnJlbnRSYW5nZSkpCisgICAgICAgICAgICBuZXdSYW5nZSA9IHJhbmdlQXRQ
b3NpdGlvbjsKKyAgICAgICAgZWxzZSBpZiAoY3VycmVudFJhbmdlLmNvbnRhaW5zKCpyYW5nZUF0
UG9zaXRpb24uZ2V0KCkpKQorICAgICAgICAgICAgbmV3UmFuZ2UgPSAmY3VycmVudFJhbmdlOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBuZXdSYW5nZSA9IHVuaW9uRE9NUmFuZ2VzKCZjdXJy
ZW50UmFuZ2UsIHJhbmdlQXRQb3NpdGlvbi5nZXQoKSk7CisgICAgICAgIAorICAgICAgICBJbnRS
ZWN0IGNvcHlSZWN0ID0gc2VsZWN0aW9uQm94Rm9yUmFuZ2UobmV3UmFuZ2UuZ2V0KCkpOworICAg
ICAgICAKKyAgICAgICAgLy8gSXMgaXQgZGlmZmVyZW50IGFuZCBiaWdnZXIgdGhhbiB0aGUgY3Vy
cmVudD8KKyAgICAgICAgYm9vbCBpc0JldHRlckNob2ljZSA9ICEocmVjdHNFc3NlbnRpYWxseVRo
ZVNhbWUoY29weVJlY3QsIGN1cnJlbnRCb3gsIC4wNSkpOworICAgICAgICBpZiAoaXNCZXR0ZXJD
aG9pY2UpIHsKKyAgICAgICAgICAgIHN3aXRjaCAoaGFuZGxlUG9zaXRpb24pIHsKKyAgICAgICAg
ICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OlRvcDoKKyAgICAgICAgICAgIGNhc2Ug
U2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OkJvdHRvbToKKyAgICAgICAgICAgICAgICBpc0JldHRl
ckNob2ljZSA9IChjb3B5UmVjdC5oZWlnaHQoKSA+IGN1cnJlbnRCb3guaGVpZ2h0KCkpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3Np
dGlvbjo6UmlnaHQ6CisgICAgICAgICAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpM
ZWZ0OgorICAgICAgICAgICAgICAgIGlzQmV0dGVyQ2hvaWNlID0gKGNvcHlSZWN0LndpZHRoKCkg
PiBjdXJyZW50Qm94LndpZHRoKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChiZXN0
UmFuZ2UgJiYgaXNCZXR0ZXJDaG9pY2UpIHsKKyAgICAgICAgICAgIC8vIEZ1cnRoZXJvcmUsIGlz
IGl0IHNtYWxsZXIgdGhhbiB0aGUgYmVzdCB3ZSd2ZSBmb3VuZCBzbyBmYXI/CisgICAgICAgICAg
ICBzd2l0Y2ggKGhhbmRsZVBvc2l0aW9uKSB7CisgICAgICAgICAgICBjYXNlIFNlbGVjdGlvbkhh
bmRsZVBvc2l0aW9uOjpUb3A6CisgICAgICAgICAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0
aW9uOjpCb3R0b206CisgICAgICAgICAgICAgICAgaXNCZXR0ZXJDaG9pY2UgPSAoY29weVJlY3Qu
aGVpZ2h0KCkgPCBiZXN0UmVjdC5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpSaWdodDoKKyAgICAgICAg
ICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OkxlZnQ6CisgICAgICAgICAgICAgICAg
aXNCZXR0ZXJDaG9pY2UgPSAoY29weVJlY3Qud2lkdGgoKSA8IGJlc3RSZWN0LndpZHRoKCkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAoaXNCZXR0ZXJDaG9pY2UpIHsKKyAgICAgICAgICAgIGJlc3RSYW5nZSA9
IG5ld1JhbmdlOworICAgICAgICAgICAgYmVzdFJlY3QgPSBjb3B5UmVjdDsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICBpZiAoYmVzdFJhbmdlKQorICAgICAgICByZXR1cm4gYmVzdFJhbmdl
LnJlbGVhc2VOb25OdWxsKCk7CisgICAgCisgICAgcmV0dXJuIGN1cnJlbnRSYW5nZTsKK30KKwor
UmVmPFJhbmdlPiBXZWJQYWdlOjpjb250cmFjdGVkUmFuZ2VGcm9tSGFuZGxlKFJhbmdlJiBjdXJy
ZW50UmFuZ2UsIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uIGhhbmRsZVBvc2l0aW9uLCBTZWxlY3Rp
b25GbGFncyYgZmxhZ3MpCit7CisgICAgLy8gU2hyaW5raW5nIHdpdGggYSBiYXNlIGFuZCBleHRl
bnQgd2lsbCBhbHdheXMgZ2l2ZSBiZXR0ZXIgcmVzdWx0cy4gSWYgd2Ugb25seSBoYXZlIGEgc2lu
Z2xlIGVsZW1lbnQsCisgICAgLy8gc2VlIGlmIHdlIGNhbiBicmVhayB0aGF0IGRvd24gdG8gYSBi
YXNlIGFuZCBleHRlbnQuIFNocmlua2luZyBiYXNlIGFuZCBleHRlbnQgaXMgY29tcGFyYXRpdmVs
eSBzdHJhaWdodGZvcndhcmQuCisgICAgLy8gU2hyaW5raW5nIGRvd24gdG8gYW5vdGhlciBlbGVt
ZW50IGlzIHVubGlrZWx5IHRvIG1vdmUganVzdCBvbmUgZWRnZSwgYnV0IHdlIGNhbiB0cnkgdGhh
dCBhcyBhIGZhbGxiYWNrLgorICAgIAorICAgIEludFJlY3QgY3VycmVudEJveCA9IHNlbGVjdGlv
bkJveEZvclJhbmdlKCZjdXJyZW50UmFuZ2UpOworICAgIEludFBvaW50IGVkZ2VDZW50ZXIgPSBj
b21wdXRlRWRnZUNlbnRlcihjdXJyZW50Qm94LCBoYW5kbGVQb3NpdGlvbik7CisgICAgCisgICAg
ZmxvYXQgbWF4RGlzdGFuY2U7CisgICAgCisgICAgc3dpdGNoIChoYW5kbGVQb3NpdGlvbikgewor
ICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OlRvcDoKKyAgICBjYXNlIFNlbGVjdGlv
bkhhbmRsZVBvc2l0aW9uOjpCb3R0b206CisgICAgICAgIG1heERpc3RhbmNlID0gY3VycmVudEJv
eC5oZWlnaHQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3Np
dGlvbjo6UmlnaHQ6CisgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6TGVmdDoKKyAg
ICAgICAgbWF4RGlzdGFuY2UgPSBjdXJyZW50Qm94LndpZHRoKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAKKyAgICBjb25zdCBmbG9hdCBtdWx0aXBsZSA9IHBvd2YobWF4RGlzdGFuY2Ug
LSAxLCAxLjAgLyAobWF4SGl0VGVzdHMgLSAxKSk7CisgICAgZmxvYXQgZGlzdGFuY2UgPSAxOwor
ICAgIFJlZlB0cjxSYW5nZT4gYmVzdFJhbmdlOworICAgIEludFJlY3QgYmVzdFJlY3Q7CisgICAg
CisgICAgd2hpbGUgKGRpc3RhbmNlIDwgbWF4RGlzdGFuY2UpIHsKKyAgICAgICAgaWYgKGJlc3RS
YW5nZSkgeworICAgICAgICAgICAgZmxvYXQgc2hyYW5rRGlzdGFuY2U7CisgICAgICAgICAgICBz
d2l0Y2ggKGhhbmRsZVBvc2l0aW9uKSB7CisgICAgICAgICAgICBjYXNlIFNlbGVjdGlvbkhhbmRs
ZVBvc2l0aW9uOjpUb3A6CisgICAgICAgICAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9u
OjpCb3R0b206CisgICAgICAgICAgICAgICAgc2hyYW5rRGlzdGFuY2UgPSBhYnMoY3VycmVudEJv
eC5oZWlnaHQoKSAtIGJlc3RSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OlJpZ2h0OgorICAgICAg
ICAgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6TGVmdDoKKyAgICAgICAgICAgICAg
ICBzaHJhbmtEaXN0YW5jZSA9IGFicyhjdXJyZW50Qm94LndpZHRoKCkgLSBiZXN0UmVjdC53aWR0
aCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChzaHJhbmtEaXN0YW5jZSA+IGRpc3RhbmNlKSB7CisgICAgICAgICAgICAgICAgLy8gQ2Vy
dGFpbmx5IG5vdCBnb2luZyB0byBkbyBhbnkgYmV0dGVyIHRoYW4gdGhhdC4KKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
SW50UG9pbnQgdGVzdFBvaW50ID0gZWRnZUNlbnRlcjsKKyAgICAgICAgc3dpdGNoIChoYW5kbGVQ
b3NpdGlvbikgeworICAgICAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpUb3A6Cisg
ICAgICAgICAgICB0ZXN0UG9pbnQubW92ZSgwLCBkaXN0YW5jZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6UmlnaHQ6CisgICAgICAg
ICAgICB0ZXN0UG9pbnQubW92ZSgtZGlzdGFuY2UsIDApOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OkJvdHRvbToKKyAgICAgICAgICAg
IHRlc3RQb2ludC5tb3ZlKDAsIC1kaXN0YW5jZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6TGVmdDoKKyAgICAgICAgICAgIHRlc3RQ
b2ludC5tb3ZlKGRpc3RhbmNlLCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBkaXN0YW5jZSAqPSBtdWx0aXBsZTsKKyAgICAgICAgCisgICAgICAg
IFJlZlB0cjxSYW5nZT4gbmV3UmFuZ2UgPSByYW5nZUZvckJsb2NrQXRQb2ludCh0ZXN0UG9pbnQp
OworICAgICAgICBpZiAoIW5ld1JhbmdlIHx8ICZuZXdSYW5nZS0+b3duZXJEb2N1bWVudCgpICE9
ICZjdXJyZW50UmFuZ2Uub3duZXJEb2N1bWVudCgpKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIAorICAgICAgICBpZiAoaGFuZGxlUG9zaXRpb24gPT0gU2VsZWN0aW9uSGFuZGxlUG9z
aXRpb246OlRvcCB8fCBoYW5kbGVQb3NpdGlvbiA9PSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6
TGVmdCkKKyAgICAgICAgICAgIG5ld1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShuZXdSYW5nZS0+c3Rh
cnRDb250YWluZXIoKS5kb2N1bWVudCgpLCBuZXdSYW5nZS0+ZW5kUG9zaXRpb24oKSwgY3VycmVu
dFJhbmdlLmVuZFBvc2l0aW9uKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZXdSYW5n
ZSA9IFJhbmdlOjpjcmVhdGUobmV3UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKSwg
Y3VycmVudFJhbmdlLnN0YXJ0UG9zaXRpb24oKSwgbmV3UmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSk7
CisgICAgICAgIAorICAgICAgICBJbnRSZWN0IGNvcHlSZWN0ID0gc2VsZWN0aW9uQm94Rm9yUmFu
Z2UobmV3UmFuZ2UuZ2V0KCkpOworICAgICAgICBpZiAoY29weVJlY3QuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICAvLyBJZiB0aGUgbmV3IHJhbmdlIGlzIGFuIGVtcHR5IHJlY3RhbmdsZSwgd2Ug
dHJ5IHRoZSBibG9jayBhdCB0aGUgY3VycmVudCBwb2ludAorICAgICAgICAgICAgLy8gYW5kIHNl
ZSBpZiB0aGF0IGhhcyBhIHJlY3RhbmdsZSB0aGF0IGlzIGEgYmV0dGVyIGNob2ljZS4KKyAgICAg
ICAgICAgIG5ld1JhbmdlID0gcmFuZ2VGb3JCbG9ja0F0UG9pbnQodGVzdFBvaW50KTsKKyAgICAg
ICAgICAgIGNvcHlSZWN0ID0gc2VsZWN0aW9uQm94Rm9yUmFuZ2UobmV3UmFuZ2UuZ2V0KCkpOwor
ICAgICAgICB9CisgICAgICAgIGJvb2wgaXNCZXR0ZXJDaG9pY2U7CisgICAgICAgIHN3aXRjaCAo
aGFuZGxlUG9zaXRpb24pIHsKKyAgICAgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6
VG9wOgorICAgICAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpCb3R0b206CisgICAg
ICAgICAgICBpc0JldHRlckNob2ljZSA9IChjb3B5UmVjdC5oZWlnaHQoKSA8IGN1cnJlbnRCb3gu
aGVpZ2h0KCkpOworICAgICAgICAgICAgaWYgKGNvcHlSZWN0LmhlaWdodCgpID09IGN1cnJlbnRC
b3guaGVpZ2h0KCkpCisgICAgICAgICAgICAgICAgaXNCZXR0ZXJDaG9pY2UgPSBjYW5TaHJpbmtU
b1RleHRTZWxlY3Rpb24oKm5ld1JhbmdlLmdldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpMZWZ0OgorICAgICAgICBjYXNlIFNl
bGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpSaWdodDoKKyAgICAgICAgICAgIGlzQmV0dGVyQ2hvaWNl
ID0gKGNvcHlSZWN0LndpZHRoKCkgPiBiZXN0UmVjdC53aWR0aCgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpc0JldHRlckNob2ljZSA9IGlzQmV0
dGVyQ2hvaWNlICYmICFhcmVSYW5nZXNFcXVhbChuZXdSYW5nZS5nZXQoKSwgJmN1cnJlbnRSYW5n
ZSk7CisgICAgICAgIGlmIChiZXN0UmFuZ2UgJiYgaXNCZXR0ZXJDaG9pY2UpIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAoaGFuZGxlUG9zaXRpb24pIHsKKyAgICAgICAgICAgIGNhc2UgU2VsZWN0aW9u
SGFuZGxlUG9zaXRpb246OlRvcDoKKyAgICAgICAgICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9z
aXRpb246OkJvdHRvbToKKyAgICAgICAgICAgICAgICBpc0JldHRlckNob2ljZSA9IChjb3B5UmVj
dC5oZWlnaHQoKSA+IGJlc3RSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OkxlZnQ6CisgICAgICAg
ICAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpSaWdodDoKKyAgICAgICAgICAgICAg
ICBpc0JldHRlckNob2ljZSA9IChjb3B5UmVjdC53aWR0aCgpID4gYmVzdFJlY3Qud2lkdGgoKSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGlzQmV0dGVyQ2hvaWNlKSB7CisgICAgICAgICAgICBiZXN0UmFuZ2UgPSBuZXdSYW5n
ZTsKKyAgICAgICAgICAgIGJlc3RSZWN0ID0gY29weVJlY3Q7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgfQorICAgIAorICAgIGlmICghYmVzdFJhbmdlKQorICAgICAgICBiZXN0UmFuZ2UgPSAm
Y3VycmVudFJhbmdlOworICAgIAorICAgIC8vIElmIHdlIGNhbiBzaHJpbmsgZG93biB0byB0ZXh0
IG9ubHksIHRoZSBvbmx5IHJlYXNvbiB3ZSB3b3VsZG4ndCBpcyB0aGF0CisgICAgLy8gdGhlcmUg
YXJlIG11bHRpcGxlIHN1Yi1lbGVtZW50IGJsb2NrcyBiZW5lYXRoIHVzLiBJZiB3ZSBkaWRuJ3Qg
ZmluZAorICAgIC8vIG11bHRpcGxlIHN1Yi1lbGVtZW50IGJsb2NrcywgZG9uJ3Qgc2hyaW5rIHRv
IGEgc3ViLWVsZW1lbnQgYmxvY2suCisgICAgCisgICAgaWYgKGNhblNocmlua1RvVGV4dFNlbGVj
dGlvbigqYmVzdFJhbmdlLmdldCgpKSkKKyAgICAgICAgZmxhZ3MgPSBOb25lOworICAgIAorICAg
IHJldHVybiBiZXN0UmFuZ2UucmVsZWFzZU5vbk51bGwoKTsKK30KKwordm9pZCBXZWJQYWdlOjpj
b21wdXRlRXhwYW5kQW5kU2hyaW5rVGhyZXNob2xkc0ZvckhhbmRsZShjb25zdCBJbnRQb2ludCYg
cG9pbnQsIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uIGhhbmRsZVBvc2l0aW9uLCBmbG9hdCYgZ3Jv
d1RocmVzaG9sZCwgZmxvYXQmIHNocmlua1RocmVzaG9sZCkKK3sKKyAgICBGcmFtZSYgZnJhbWUg
PSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIFJl
ZlB0cjxSYW5nZT4gY3VycmVudFJhbmdlID0gbV9jdXJyZW50QmxvY2tTZWxlY3Rpb24gPyBtX2N1
cnJlbnRCbG9ja1NlbGVjdGlvbi5nZXQoKSA6IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgCisgICAgaWYgKCFjdXJyZW50UmFuZ2UpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBSZWY8UmFuZ2U+IGV4cGFuZGVkUmFuZ2UgPSBleHBhbmRl
ZFJhbmdlRnJvbUhhbmRsZSgqY3VycmVudFJhbmdlLCBoYW5kbGVQb3NpdGlvbik7CisgICAgU2Vs
ZWN0aW9uRmxhZ3MgZmxhZ3M7CisgICAgUmVmUHRyPFJhbmdlPiBjb250cmFjdGVkUmFuZ2UgPSBj
b250cmFjdGVkUmFuZ2VGcm9tSGFuZGxlKCpjdXJyZW50UmFuZ2UsIGhhbmRsZVBvc2l0aW9uLCBm
bGFncyk7CisgICAgCisgICAgSW50UmVjdCBjdXJyZW50Qm91bmRzID0gc2VsZWN0aW9uQm94Rm9y
UmFuZ2UoY3VycmVudFJhbmdlLmdldCgpKTsKKyAgICBJbnRSZWN0IGV4cGFuZGVkQm91bmRzID0g
c2VsZWN0aW9uQm94Rm9yUmFuZ2UoZXhwYW5kZWRSYW5nZS5wdHIoKSk7CisgICAgSW50UmVjdCBj
b250cmFjdGVkQm91bmRzID0gc2VsZWN0aW9uQm94Rm9yUmFuZ2UoY29udHJhY3RlZFJhbmdlLmdl
dCgpKTsKKyAgICAKKyAgICBmbG9hdCBjdXJyZW50OworICAgIGZsb2F0IGV4cGFuZGVkOworICAg
IGZsb2F0IGNvbnRyYWN0ZWQ7CisgICAgZmxvYXQgbWF4VGhyZXNob2xkOworICAgIGZsb2F0IG1p
blRocmVzaG9sZDsKKyAgICAKKyAgICBzd2l0Y2ggKGhhbmRsZVBvc2l0aW9uKSB7CisgICAgY2Fz
ZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6VG9wOiB7CisgICAgICAgIGN1cnJlbnQgPSBjdXJy
ZW50Qm91bmRzLnkoKTsKKyAgICAgICAgZXhwYW5kZWQgPSBleHBhbmRlZEJvdW5kcy55KCk7Cisg
ICAgICAgIGNvbnRyYWN0ZWQgPSBjb250cmFjdGVkQm91bmRzLnkoKTsKKyAgICAgICAgbWF4VGhy
ZXNob2xkID0gRkxUX01JTjsKKyAgICAgICAgbWluVGhyZXNob2xkID0gRkxUX01BWDsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OlJpZ2h0
OiB7CisgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Qm91bmRzLm1heFgoKTsKKyAgICAgICAgZXhw
YW5kZWQgPSBleHBhbmRlZEJvdW5kcy5tYXhYKCk7CisgICAgICAgIGNvbnRyYWN0ZWQgPSBjb250
cmFjdGVkQm91bmRzLm1heFgoKTsKKyAgICAgICAgbWF4VGhyZXNob2xkID0gRkxUX01BWDsKKyAg
ICAgICAgbWluVGhyZXNob2xkID0gRkxUX01JTjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OkJvdHRvbTogeworICAgICAgICBjdXJyZW50
ID0gY3VycmVudEJvdW5kcy5tYXhZKCk7CisgICAgICAgIGV4cGFuZGVkID0gZXhwYW5kZWRCb3Vu
ZHMubWF4WSgpOworICAgICAgICBjb250cmFjdGVkID0gY29udHJhY3RlZEJvdW5kcy5tYXhZKCk7
CisgICAgICAgIG1heFRocmVzaG9sZCA9IEZMVF9NQVg7CisgICAgICAgIG1pblRocmVzaG9sZCA9
IEZMVF9NSU47CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFNlbGVjdGlvbkhhbmRs
ZVBvc2l0aW9uOjpMZWZ0OiB7CisgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Qm91bmRzLngoKTsK
KyAgICAgICAgZXhwYW5kZWQgPSBleHBhbmRlZEJvdW5kcy54KCk7CisgICAgICAgIGNvbnRyYWN0
ZWQgPSBjb250cmFjdGVkQm91bmRzLngoKTsKKyAgICAgICAgbWF4VGhyZXNob2xkID0gRkxUX01J
TjsKKyAgICAgICAgbWluVGhyZXNob2xkID0gRkxUX01BWDsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIH0KKyAgICAKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgZnJhY3Rpb25Ub0dyb3cgPSAw
LjM7CisgICAgCisgICAgZ3Jvd1RocmVzaG9sZCA9IGN1cnJlbnQgKyAoZXhwYW5kZWQgLSBjdXJy
ZW50KSAqIGZyYWN0aW9uVG9Hcm93OworICAgIHNocmlua1RocmVzaG9sZCA9IGN1cnJlbnQgKyAo
Y29udHJhY3RlZCAtIGN1cnJlbnQpICogKDEgLSBmcmFjdGlvblRvR3Jvdyk7CisgICAgaWYgKGFy
ZVJhbmdlc0VxdWFsKGV4cGFuZGVkUmFuZ2UucHRyKCksIGN1cnJlbnRSYW5nZS5nZXQoKSkpCisg
ICAgICAgIGdyb3dUaHJlc2hvbGQgPSBtYXhUaHJlc2hvbGQ7CisgICAgCit9CisjZW5kaWYKKwog
dm9pZCBXZWJQYWdlOjpzZWxlY3RXaXRoR2VzdHVyZShjb25zdCBJbnRQb2ludCYgcG9pbnQsIHVp
bnQzMl90IGdyYW51bGFyaXR5LCB1aW50MzJfdCBnZXN0dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVy
ZVN0YXRlLCBib29sIGlzSW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2RlLCBDYWxsYmFja0lEIGNh
bGxiYWNrSUQpCiB7CiAgICAgYXV0byYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigp
LmZvY3VzZWRPck1haW5GcmFtZSgpOwpAQCAtMTI2OSw2ICsxNjI3LDg5IEBAIHN0YXRpYyBSZWZQ
dHI8UmFuZ2U+IHJhbmdlQXRXb3JkQm91bmRhcnkKIAogICAgIHJldHVybiAoYmFzZSA8IGV4dGVu
dCkgPyBSYW5nZTo6Y3JlYXRlKCpmcmFtZS0+ZG9jdW1lbnQoKSwgYmFzZSwgZXh0ZW50KSA6IFJh
bmdlOjpjcmVhdGUoKmZyYW1lLT5kb2N1bWVudCgpLCBleHRlbnQsIGJhc2UpOwogfQorICAgIAor
I2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPCAxMjAwMDAKKworUmVmUHRyPFJh
bmdlPiBXZWJQYWdlOjpyYW5nZUZvckJsb2NrQXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQp
Cit7CisgICAgSGl0VGVzdFJlc3VsdCByZXN1bHQgPSBtX3BhZ2UtPm1haW5GcmFtZSgpLmV2ZW50
SGFuZGxlcigpLmhpdFRlc3RSZXN1bHRBdFBvaW50KChwb2ludCksIEhpdFRlc3RSZXF1ZXN0OjpS
ZWFkT25seSB8IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUgfCBIaXRUZXN0UmVxdWVzdDo6RGlzYWxs
b3dVc2VyQWdlbnRTaGFkb3dDb250ZW50IHwgSGl0VGVzdFJlcXVlc3Q6Oklnbm9yZUNsaXBwaW5n
KTsKKworICAgIE5vZGUqIGN1cnJlbnROb2RlID0gcmVzdWx0LmlubmVyTm9kZSgpOworICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2U7CisKKyAgICBpZiAoY3VycmVudE5vZGUtPmlzVGV4dE5vZGUoKSkg
eworICAgICAgICByYW5nZSA9IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShtX3BhZ2Ut
PmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLnZpc2libGVQb3NpdGlvbkZv
clBvaW50KHBvaW50KSwgUGFyYWdyYXBoR3JhbnVsYXJpdHksIERpcmVjdGlvbkZvcndhcmQpOwor
ICAgICAgICBpZiAocmFuZ2UgJiYgIXJhbmdlLT5jb2xsYXBzZWQoKSkKKyAgICAgICAgICAgIHJl
dHVybiByYW5nZTsKKyAgICB9CisKKyAgICBpZiAoIWN1cnJlbnROb2RlLT5pc0VsZW1lbnROb2Rl
KCkpCisgICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUtPnBhcmVudEVsZW1lbnQoKTsK
KworICAgIGlmICghY3VycmVudE5vZGUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
cmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGN1cnJlbnROb2RlLT5kb2N1bWVudCgpKTsKKyAgICByYW5n
ZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKCpjdXJyZW50Tm9kZSk7CisgICAgcmV0dXJuIHJhbmdlOwor
fQorICAgIAorc3RhdGljIGlubGluZSBib29sIHNob3VsZEV4cGFuZChTZWxlY3Rpb25IYW5kbGVQ
b3NpdGlvbiBoYW5kbGVQb3NpdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50UG9p
bnQmIHBvaW50KQoreworICAgIHN3aXRjaCAoaGFuZGxlUG9zaXRpb24pIHsKKyAgICBjYXNlIFNl
bGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpUb3A6CisgICAgICAgIHJldHVybiAocG9pbnQueSgpIDwg
cmVjdC55KCkpOworICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OkxlZnQ6CisgICAg
ICAgIHJldHVybiAocG9pbnQueCgpIDwgcmVjdC54KCkpOworICAgIGNhc2UgU2VsZWN0aW9uSGFu
ZGxlUG9zaXRpb246OlJpZ2h0OgorICAgICAgICByZXR1cm4gKHBvaW50LngoKSA+IHJlY3QubWF4
WCgpKTsKKyAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpCb3R0b206CisgICAgICAg
IHJldHVybiAocG9pbnQueSgpID4gcmVjdC5tYXhZKCkpOworICAgIH0KK30KKworUmVmUHRyPFdl
YkNvcmU6OlJhbmdlPiBXZWJQYWdlOjpjaGFuZ2VCbG9ja1NlbGVjdGlvbihjb25zdCBJbnRQb2lu
dCYgcG9pbnQsIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uIGhhbmRsZVBvc2l0aW9uLCBmbG9hdCYg
Z3Jvd1RocmVzaG9sZCwgZmxvYXQmIHNocmlua1RocmVzaG9sZCwgU2VsZWN0aW9uRmxhZ3MmIGZs
YWdzKQoreworICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9j
dXNlZE9yTWFpbkZyYW1lKCk7CisgICAgUmVmUHRyPFJhbmdlPiBjdXJyZW50UmFuZ2UgPSBtX2N1
cnJlbnRCbG9ja1NlbGVjdGlvbiA/IG1fY3VycmVudEJsb2NrU2VsZWN0aW9uLmdldCgpIDogZnJh
bWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICBpZiAo
IWN1cnJlbnRSYW5nZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUmVmUHRyPFJhbmdl
PiBuZXdSYW5nZSA9IHNob3VsZEV4cGFuZChoYW5kbGVQb3NpdGlvbiwgc2VsZWN0aW9uQm94Rm9y
UmFuZ2UoY3VycmVudFJhbmdlLmdldCgpKSwgcG9pbnQpID8gZXhwYW5kZWRSYW5nZUZyb21IYW5k
bGUoKmN1cnJlbnRSYW5nZSwgaGFuZGxlUG9zaXRpb24pIDogY29udHJhY3RlZFJhbmdlRnJvbUhh
bmRsZSgqY3VycmVudFJhbmdlLCBoYW5kbGVQb3NpdGlvbiwgZmxhZ3MpOworICAgIAorICAgIGlm
IChuZXdSYW5nZSkgeworICAgICAgICBtX2N1cnJlbnRCbG9ja1NlbGVjdGlvbiA9IG5ld1Jhbmdl
OworICAgICAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3RlZFJhbmdlKG5ld1JhbmdlLmdl
dCgpLCBWUF9ERUZBVUxUX0FGRklOSVRZLCB0cnVlLCBVc2VyVHJpZ2dlcmVkKTsKKyAgICB9Cisg
ICAgCisgICAgY29tcHV0ZUV4cGFuZEFuZFNocmlua1RocmVzaG9sZHNGb3JIYW5kbGUocG9pbnQs
IGhhbmRsZVBvc2l0aW9uLCBncm93VGhyZXNob2xkLCBzaHJpbmtUaHJlc2hvbGQpOworICAgIHJl
dHVybiBuZXdSYW5nZTsKK30KKwordm9pZCBXZWJQYWdlOjp1cGRhdGVCbG9ja1NlbGVjdGlvbldp
dGhUb3VjaChjb25zdCBJbnRQb2ludCYgcG9pbnQsIHVpbnQzMl90IHRvdWNoLCB1aW50MzJfdCBo
YW5kbGVQb3NpdGlvbikKK3sKKyAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIEludFBvaW50IGFkanVzdGVkUG9pbnQg
PSBmcmFtZS52aWV3KCktPnJvb3RWaWV3VG9Db250ZW50cyhwb2ludCk7CisgICAgCisgICAgZmxv
YXQgZ3Jvd1RocmVzaG9sZCA9IDA7CisgICAgZmxvYXQgc2hyaW5rVGhyZXNob2xkID0gMDsKKyAg
ICBTZWxlY3Rpb25GbGFncyBmbGFncyA9IE5vbmU7CisgICAgCisgICAgc3dpdGNoIChzdGF0aWNf
Y2FzdDxTZWxlY3Rpb25Ub3VjaD4odG91Y2gpKSB7CisgICAgY2FzZSBTZWxlY3Rpb25Ub3VjaDo6
U3RhcnRlZDoKKyAgICAgICAgY29tcHV0ZUV4cGFuZEFuZFNocmlua1RocmVzaG9sZHNGb3JIYW5k
bGUoYWRqdXN0ZWRQb2ludCwgc3RhdGljX2Nhc3Q8U2VsZWN0aW9uSGFuZGxlUG9zaXRpb24+KGhh
bmRsZVBvc2l0aW9uKSwgZ3Jvd1RocmVzaG9sZCwgc2hyaW5rVGhyZXNob2xkKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBTZWxlY3Rpb25Ub3VjaDo6RW5kZWQ6CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgU2VsZWN0aW9uVG91Y2g6Ok1vdmVkOgorICAgICAgICBjaGFuZ2VCbG9ja1NlbGVj
dGlvbihhZGp1c3RlZFBvaW50LCBzdGF0aWNfY2FzdDxTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbj4o
aGFuZGxlUG9zaXRpb24pLCBncm93VGhyZXNob2xkLCBzaHJpbmtUaHJlc2hvbGQsIGZsYWdzKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFVwZGF0ZUJsb2NrU2VsZWN0
aW9uV2l0aFRvdWNoKHRvdWNoLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oZmxhZ3MpLCBncm93VGhy
ZXNob2xkLCBzaHJpbmtUaHJlc2hvbGQpKTsKK30KKyNlbmRpZgogCiB2b2lkIFdlYlBhZ2U6OmNs
ZWFyU2VsZWN0aW9uKCkKIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331855</attachid>
            <date>2018-01-20 19:52:08 -0800</date>
            <delta_ts>2018-01-22 11:33:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-181895-20180120195207.patch</filename>
            <type>text/plain</type>
            <size>33986</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjcyNTcpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE4LTAxLTE5ICBNZWdhbiBHYXJk
bmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgVGVtcG9yYXJpbHkgcmVz
dG9yZSBibG9jayBzZWxlY3Rpb24gY29kZSBjb25kaXRpb25hbGx5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODE4OTUKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzM2NTY3MzI1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFdlIG5lZWQgdG8gcmVzdG9yZSB0aGlzIGNvZGUgdGVtcG9yYXJpbHkgdG8gYXZv
aWQgYSBjcmFzaC4KKworICAgICAgICAqIFBsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAg
ICAgKC1bV0tDb250ZW50VmlldyBjaGFuZ2VCbG9ja1NlbGVjdGlvbldpdGhUb3VjaEF0OndpdGhT
ZWxlY3Rpb25Ub3VjaDpmb3JIYW5kbGU6XSk6CisKIDIwMTgtMDEtMTkgIE1lZ2FuIEdhcmRuZXIg
IDxtZWdhbl9nYXJkbmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBQcmVzZW50IFdLRmlsZVVwbG9h
ZFBhbmVsIG9uIGNvcnJlY3QgVmlld0NvbnRyb2xsZXIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCShyZXZpc2lvbiAyMjcwNzcpCisrKyBTb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaAkod29ya2luZyBjb3B5KQpAQCAtNjE0LDYg
KzYxNCw5IEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFVJV0tHZXN0dXJlVHkKIC0gKHZv
aWQpX2NhbmNlbExvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyOwogCiBAb3B0aW9uYWwKKyNpZiBf
X0lQSE9ORV9PU19WRVJTSU9OX01BWF9BTExPV0VEIDwgMTIwMDAwCistICh2b2lkKWNoYW5nZUJs
b2NrU2VsZWN0aW9uV2l0aFRvdWNoQXQ6KENHUG9pbnQpcG9pbnQgd2l0aFNlbGVjdGlvblRvdWNo
OihVSVdLU2VsZWN0aW9uVG91Y2gpdG91Y2ggZm9ySGFuZGxlOihVSVdLSGFuZGxlUG9zaXRpb24p
aGFuZGxlOworI2VuZGlmCiAKIC0gKHZvaWQpY2xlYXJTZWxlY3Rpb247CiAtICh2b2lkKXJlcGxh
Y2VEaWN0YXRlZFRleHQ6KE5TU3RyaW5nICopb2xkVGV4dCB3aXRoVGV4dDooTlNTdHJpbmcgKilu
ZXdUZXh0OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAkocmV2aXNpb24g
MjI3MDc3KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOTYsNiArMjk2LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpbnRl
cnByZXRLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgYm9vbCBpc0NoYXJF
dmVudCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwb3NpdGlvbkluZm9ybWF0aW9uRGlkQ2hhbmdl
KGNvbnN0IEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uJikgPSAwOwogICAgIHZpcnR1
YWwgdm9pZCBzYXZlSW1hZ2VUb0xpYnJhcnkoUmVmPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4mJikg
PSAwOworI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPCAxMjAwMDAKKyAgICB2
aXJ0dWFsIHZvaWQgZGlkVXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2godWludDMyX3QgdG91
Y2gsIHVpbnQzMl90IGZsYWdzLCBmbG9hdCBncm93VGhyZXNob2xkLCBmbG9hdCBzaHJpbmtUaHJl
c2hvbGQpID0gMDsKKyNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBzaG93UGxheWJhY2tUYXJnZXRQ
aWNrZXIoYm9vbCBoYXNWaWRlbywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZWxlbWVudFJlY3Qp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZURvdWJsZVRhcEdlc3R1cmVzRHVyaW5nVGFw
SWZOZWNlc3NhcnkodWludDY0X3QgcmVxdWVzdElEKSA9IDA7CiAgICAgdmlydHVhbCBkb3VibGUg
bWluaW11bVpvb21TY2FsZSgpIGNvbnN0ID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oCShyZXZpc2lvbiAyMjcwNzcpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtNTM4LDYgKzUzOCw5IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IFdlYkNvcmU6OkludFBvaW50
LCBXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHksIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJf
dCBnZXN0dXJlU3RhdGUsIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUsIFdURjo6
RnVuY3Rpb248dm9pZCAoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCB1aW50MzJfdCwgdWludDMy
X3QsIHVpbnQzMl90LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CiAgICAgdm9pZCB1cGRhdGVT
ZWxlY3Rpb25XaXRoVG91Y2hlcyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCwgdWludDMyX3QgdG91
Y2hlcywgYm9vbCBiYXNlSXNTdGFydCwgV1RGOjpGdW5jdGlvbjx2b2lkIChjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYsIHVpbnQzMl90LCB1aW50MzJfdCwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYp
OwogICAgIHZvaWQgc2VsZWN0V2l0aFR3b1RvdWNoZXMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQg
ZnJvbSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgdG8sIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1
aW50MzJfdCBnZXN0dXJlU3RhdGUsIFdURjo6RnVuY3Rpb248dm9pZCAoY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmLCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQzMl90LCBDYWxsYmFja0Jhc2U6OkVy
cm9yKT4mJik7CisjaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA8IDEyMDAwMAor
ICAgIHZvaWQgdXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2goY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQsIHVpbnQzMl90IHRvdWNoLCB1aW50MzJfdCBoYW5kbGVQb3NpdGlvbik7CisjZW5kaWYK
ICAgICB2b2lkIGV4dGVuZFNlbGVjdGlvbihXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkpOwogICAg
IHZvaWQgc2VsZWN0V29yZEJhY2t3YXJkKCk7CiAgICAgdm9pZCBtb3ZlU2VsZWN0aW9uQnlPZmZz
ZXQoaW50MzJfdCBvZmZzZXQsIFdURjo6RnVuY3Rpb248dm9pZCAoQ2FsbGJhY2tCYXNlOjpFcnJv
cik+JiYpOwpAQCAtNTYyLDYgKzU2NSw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0b3BJbnRlcmFj
dGlvbigpOwogICAgIHZvaWQgcGVyZm9ybUFjdGlvbk9uRWxlbWVudCh1aW50MzJfdCBhY3Rpb24p
OwogICAgIHZvaWQgc2F2ZUltYWdlVG9MaWJyYXJ5KGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxl
JiBpbWFnZUhhbmRsZSwgdWludDY0X3QgaW1hZ2VTaXplKTsKKyNpZiBfX0lQSE9ORV9PU19WRVJT
SU9OX01BWF9BTExPV0VEIDwgMTIwMDAwCisgICAgdm9pZCBkaWRVcGRhdGVCbG9ja1NlbGVjdGlv
bldpdGhUb3VjaCh1aW50MzJfdCB0b3VjaCwgdWludDMyX3QgZmxhZ3MsIGZsb2F0IGdyb3dUaHJl
c2hvbGQsIGZsb2F0IHNocmlua1RocmVzaG9sZCk7CisjZW5kaWYKICAgICB2b2lkIGZvY3VzTmV4
dEFzc2lzdGVkTm9kZShib29sIGlzRm9yd2FyZCwgV1RGOjpGdW5jdGlvbjx2b2lkIChDYWxsYmFj
a0Jhc2U6OkVycm9yKT4mJik7CiAgICAgdm9pZCBzZXRBc3Npc3RlZE5vZGVWYWx1ZShjb25zdCBT
dHJpbmcmKTsKICAgICB2b2lkIHNldEFzc2lzdGVkTm9kZVZhbHVlQXNOdW1iZXIoZG91YmxlKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2Fn
ZXMuaW4JKHJldmlzaW9uIDIyNzA3NykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMTgyLDYgKzE4Miw5IEBAIG1l
c3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7CiAgICAgU2VsZWN0aW9uQ29udGV4dENhbGxiYWNrKFN0
cmluZyBzZWxlY3RlZFRleHQsIFN0cmluZyBiZWZvcmVUZXh0LCBTdHJpbmcgYWZ0ZXJUZXh0LCBX
ZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICBJbnRlcnByZXRLZXlFdmVudChzdHJ1
Y3QgV2ViS2l0OjpFZGl0b3JTdGF0ZSBzdGF0ZSwgYm9vbCBpc0NoYXJFdmVudCkgLT4gKGJvb2wg
aGFuZGxlZCkKICAgICBEaWRSZWNlaXZlUG9zaXRpb25JbmZvcm1hdGlvbihzdHJ1Y3QgV2ViS2l0
OjpJbnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiBpbmZvcm1hdGlvbikKKyNpZiBfX0lQ
SE9ORV9PU19WRVJTSU9OX01BWF9BTExPV0VEIDwgMTIwMDAwCisgICAgRGlkVXBkYXRlQmxvY2tT
ZWxlY3Rpb25XaXRoVG91Y2godWludDMyX3QgdG91Y2gsIHVpbnQzMl90IGZsYWdzLCBmbG9hdCBn
cm93VGhyZXNob2xkLCBmbG9hdCBzaHJpbmtUaHJlc2hvbGQpCisjZW5kaWYKICAgICBTYXZlSW1h
Z2VUb0xpYnJhcnkoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZSBoYW5kbGUsIHVpbnQ2NF90
IHNpemUpCiAgICAgU2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKGJvb2wgaGFzVmlkZW8sIFdlYkNv
cmU6OkludFJlY3QgZWxlbWVudFJlY3QpCiAgICAgQ29tbWl0UG90ZW50aWFsVGFwRmFpbGVkKCkK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElP
Uy5oCShyZXZpc2lvbiAyMjcwNzcpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFn
ZUNsaWVudEltcGxJT1MuaAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDYgKzEzMiw5IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBpbnRlcnByZXRLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2
ZW50JiwgYm9vbCBpc0NoYXJFdmVudCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBwb3NpdGlvbkluZm9y
bWF0aW9uRGlkQ2hhbmdlKGNvbnN0IEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uJikg
b3ZlcnJpZGU7CiAgICAgdm9pZCBzYXZlSW1hZ2VUb0xpYnJhcnkoUmVmPFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlcj4mJikgb3ZlcnJpZGU7CisjaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dF
RCA8IDEyMDAwMAorICAgIHZvaWQgZGlkVXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2godWlu
dDMyX3QgdG91Y2gsIHVpbnQzMl90IGZsYWdzLCBmbG9hdCBncm93VGhyZXNob2xkLCBmbG9hdCBz
aHJpbmtUaHJlc2hvbGQpIG92ZXJyaWRlOworI2VuZGlmCiAgICAgdm9pZCBzaG93UGxheWJhY2tU
YXJnZXRQaWNrZXIoYm9vbCBoYXNWaWRlbywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZWxlbWVu
dFJlY3QpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBoYW5kbGVSdW5PcGVuUGFuZWwoV2ViUGFnZVBy
b3h5KiwgV2ViRnJhbWVQcm94eSosIEFQSTo6T3BlblBhbmVsUGFyYW1ldGVycyosIFdlYk9wZW5Q
YW5lbFJlc3VsdExpc3RlbmVyUHJveHkqKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0JKHJldmlzaW9uIDIyNzA3
NykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQko
d29ya2luZyBjb3B5KQpAQCAtNTYxLDYgKzU2MSwxNCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpz
dG9wQXNzaXN0aW5nTm9kZSgpCiB7CiAgICAgW21fY29udGVudFZpZXcgX3N0b3BBc3Npc3RpbmdO
b2RlXTsKIH0KKyAgICAKKyNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01BWF9BTExPV0VEIDwgMTIw
MDAwCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRVcGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3Vj
aCh1aW50MzJfdCB0b3VjaCwgdWludDMyX3QgZmxhZ3MsIGZsb2F0IGdyb3dUaHJlc2hvbGQsIGZs
b2F0IHNocmlua1RocmVzaG9sZCkKK3sKKyAgICBbbV9jb250ZW50VmlldyBfZGlkVXBkYXRlQmxv
Y2tTZWxlY3Rpb25XaXRoVG91Y2g6KFNlbGVjdGlvblRvdWNoKXRvdWNoIHdpdGhGbGFnczooU2Vs
ZWN0aW9uRmxhZ3MpZmxhZ3MgZ3Jvd1RocmVzaG9sZDpncm93VGhyZXNob2xkIHNocmlua1RocmVz
aG9sZDpzaHJpbmtUaHJlc2hvbGRdOworfQorI2VuZGlmCisgICAgCiAKIHZvaWQgUGFnZUNsaWVu
dEltcGw6OnNob3dQbGF5YmFja1RhcmdldFBpY2tlcihib29sIGhhc1ZpZGVvLCBjb25zdCBJbnRS
ZWN0JiBlbGVtZW50UmVjdCkKIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgJKHJldmlzaW9uIDIyNzA3NykK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMjk1LDYgKzI5NSw5IEBAIEZPUl9FQUNIX1dLQ09OVEVOVFZJ
RVdfQUNUSU9OKERFQ0xBUkVfV0sKIC0gKHZvaWQpX2RpZEVuZFNjcm9sbGluZ09yWm9vbWluZzsK
IC0gKHZvaWQpX292ZXJmbG93U2Nyb2xsaW5nV2lsbEJlZ2luOwogLSAodm9pZClfb3ZlcmZsb3dT
Y3JvbGxpbmdEaWRFbmQ7CisjaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA8IDEy
MDAwMAorLSAodm9pZClfZGlkVXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2g6KFdlYktpdDo6
U2VsZWN0aW9uVG91Y2gpdG91Y2ggd2l0aEZsYWdzOihXZWJLaXQ6OlNlbGVjdGlvbkZsYWdzKWZs
YWdzIGdyb3dUaHJlc2hvbGQ6KENHRmxvYXQpZ3Jvd1RocmVzaG9sZCBzaHJpbmtUaHJlc2hvbGQ6
KENHRmxvYXQpc2hyaW5rVGhyZXNob2xkOworI2VuZGlmCiAtICh2b2lkKV9zaG93UGxheWJhY2tU
YXJnZXRQaWNrZXI6KEJPT0wpaGFzVmlkZW8gZnJvbVJlY3Q6KGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmKWVsZW1lbnRSZWN0OwogLSAodm9pZClfc2hvd1J1bk9wZW5QYW5lbDooQVBJOjpPcGVuUGFu
ZWxQYXJhbWV0ZXJzKilwYXJhbWV0ZXJzIHJlc3VsdExpc3RlbmVyOihXZWJLaXQ6OldlYk9wZW5Q
YW5lbFJlc3VsdExpc3RlbmVyUHJveHkqKWxpc3RlbmVyOwogLSAodm9pZClhY2Nlc3NvcnlEb25l
OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFj
dGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250
ZW50Vmlld0ludGVyYWN0aW9uLm1tCShyZXZpc2lvbiAyMjcyNDcpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0yNTAyLDYgKzI1MDIsMjIgQEAgc3RhdGljIGlubGluZSBVSVdLU2VsZWN0aW9uRmxhZ3Mg
dG9VSVdLUwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxVSVdLU2VsZWN0aW9uRmxhZ3M+KHVpRmxh
Z3MpOwogfQogCisjaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA8IDEyMDAwMAor
c3RhdGljIGlubGluZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbiB0b1NlbGVjdGlvbkhhbmRsZVBv
c2l0aW9uKFVJV0tIYW5kbGVQb3NpdGlvbiBwb3NpdGlvbikKK3sKKyAgICBzd2l0Y2ggKHBvc2l0
aW9uKSB7CisgICAgY2FzZSBVSVdLSGFuZGxlVG9wOgorICAgICAgICByZXR1cm4gU2VsZWN0aW9u
SGFuZGxlUG9zaXRpb246OlRvcDsKKyAgICBjYXNlIFVJV0tIYW5kbGVSaWdodDoKKyAgICAgICAg
cmV0dXJuIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpSaWdodDsKKyAgICBjYXNlIFVJV0tIYW5k
bGVCb3R0b206CisgICAgICAgIHJldHVybiBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6Qm90dG9t
OworICAgIGNhc2UgVUlXS0hhbmRsZUxlZnQ6CisgICAgICAgIHJldHVybiBTZWxlY3Rpb25IYW5k
bGVQb3NpdGlvbjo6TGVmdDsKKyAgICB9Cit9CisjZW5kaWYKKwogc3RhdGljIGlubGluZSBXZWJD
b3JlOjpUZXh0R3JhbnVsYXJpdHkgdG9XS1RleHRHcmFudWxhcml0eShVSVRleHRHcmFudWxhcml0
eSBncmFudWxhcml0eSkKIHsKICAgICBzd2l0Y2ggKGdyYW51bGFyaXR5KSB7CkBAIC0yNTYwLDYg
KzI1NzYsMTUgQEAgc3RhdGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZFdpdGhUb3VjaChXSwogICAg
ICAgICBbKFVJV0tUZXh0SW50ZXJhY3Rpb25Bc3Npc3RhbnQgKilbdmlldyBpbnRlcmFjdGlvbkFz
c2lzdGFudF0gc2VsZWN0aW9uQ2hhbmdlZFdpdGhUb3VjaEF0OihDR1BvaW50KXBvaW50IHdpdGhT
ZWxlY3Rpb25Ub3VjaDp0b1VJV0tTZWxlY3Rpb25Ub3VjaCgoU2VsZWN0aW9uVG91Y2gpdG91Y2gp
IHdpdGhGbGFnczpzdGF0aWNfY2FzdDxVSVdLU2VsZWN0aW9uRmxhZ3M+KGZsYWdzKV07CiB9CiAK
KyNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01BWF9BTExPV0VEIDwgMTIwMDAwCistICh2b2lkKV9k
aWRVcGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaDooU2VsZWN0aW9uVG91Y2gpdG91Y2ggd2l0
aEZsYWdzOihTZWxlY3Rpb25GbGFncylmbGFncyBncm93VGhyZXNob2xkOihDR0Zsb2F0KWdyb3dU
aHJlc2hvbGQgc2hyaW5rVGhyZXNob2xkOihDR0Zsb2F0KXNocmlua1RocmVzaG9sZAoreworICAg
IFtfd2ViU2VsZWN0aW9uQXNzaXN0YW50IGJsb2NrU2VsZWN0aW9uQ2hhbmdlZFdpdGhUb3VjaDp0
b1VJV0tTZWxlY3Rpb25Ub3VjaCh0b3VjaCkgd2l0aEZsYWdzOnRvVUlXS1NlbGVjdGlvbkZsYWdz
KGZsYWdzKSBncm93VGhyZXNob2xkOmdyb3dUaHJlc2hvbGQgc2hyaW5rVGhyZXNob2xkOnNocmlu
a1RocmVzaG9sZF07CisgICAgaWYgKHRvdWNoICE9IFNlbGVjdGlvblRvdWNoOjpTdGFydGVkICYm
IHRvdWNoICE9IFNlbGVjdGlvblRvdWNoOjpNb3ZlZCkKKyAgICAgICAgX3VzaW5nR2VzdHVyZUZv
clNlbGVjdGlvbiA9IE5POworfQorI2VuZGlmCisKIC0gKEJPT0wpX2lzSW50ZXJhY3RpbmdXaXRo
QXNzaXN0ZWROb2RlCiB7CiAgICAgcmV0dXJuIF90ZXh0U2VsZWN0aW9uQXNzaXN0YW50ICE9IG5p
bDsKQEAgLTI2MDcsNiArMjYzMiwxOSBAQCAtICh2b2lkKWNoYW5nZVNlbGVjdGlvbldpdGhUb3Vj
aGVzRnJvbTooCiAgICAgfSk7CiB9CiAKKyNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01BWF9BTExP
V0VEIDwgMTIwMDAwCistICh2b2lkKWNoYW5nZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoQXQ6KENH
UG9pbnQpcG9pbnQgd2l0aFNlbGVjdGlvblRvdWNoOihVSVdLU2VsZWN0aW9uVG91Y2gpdG91Y2gg
Zm9ySGFuZGxlOihVSVdLSGFuZGxlUG9zaXRpb24paGFuZGxlCit7CisgICAgLy8gVGhpcyB3YXMg
b25seSByZWFkZGVkIHRvIGF2b2lkIGEgY3Jhc2ggZHVlIHRvIGluY29tYmF0YWJsaWx0aWVzZSB3
aXRoIGNlcnRhaW4gdmVyc2lvbiBvZiBVSUtpdC4KKyAgICAvLyBUaGlzIHNob3VsZCBiZSByZW1v
dmVkIEFTQVAuCisgICAgLy8gVGhlIHNlbGVjdGlvbiB3aWxsIGJlIHByb3Blcmx5IHVwZGF0ZWQg
d2l0aCB0aGUgbmV4dCB1cGRhdGUsIHNlbGVjdGlvbiBzdGlsbCBmdW5jdGlvbnMKKyAgICAvLyB3
aXRob3V0IHRoaXMgZnVuY3Rpb24gZG9pbmcgYW55dGhpbmcuCisgICAgCisgICAgX3VzaW5nR2Vz
dHVyZUZvclNlbGVjdGlvbiA9IFlFUzsKKyAgICBfcGFnZS0+dXBkYXRlQmxvY2tTZWxlY3Rpb25X
aXRoVG91Y2goV2ViQ29yZTo6SW50UG9pbnQocG9pbnQpLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4o
dG9TZWxlY3Rpb25Ub3VjaCh0b3VjaCkpLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4odG9TZWxlY3Rp
b25IYW5kbGVQb3NpdGlvbihoYW5kbGUpKSk7Cit9CisjZW5kaWYKKwogLSAodm9pZCltb3ZlQnlP
ZmZzZXQ6KE5TSW50ZWdlcilvZmZzZXQKIHsKICAgICBpZiAoIW9mZnNldCkKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQkocmV2aXNpb24g
MjI3MDc3KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5t
bQkod29ya2luZyBjb3B5KQpAQCAtNjUxLDYgKzY1MSwxOCBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
c2F2ZUltYWdlVG9MaWJyYXJ5KGNvCiAgICAgYXV0byBidWZmZXIgPSBTaGFyZWRCdWZmZXI6OmNy
ZWF0ZShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oc2hhcmVkTWVtb3J5QnVmZmVyLT5kYXRh
KCkpLCBpbWFnZVNpemUpOwogICAgIG1fcGFnZUNsaWVudC5zYXZlSW1hZ2VUb0xpYnJhcnkoV1RG
TW92ZShidWZmZXIpKTsKIH0KKyAgICAKKyNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01BWF9BTExP
V0VEIDwgMTIwMDAwCit2b2lkIFdlYlBhZ2VQcm94eTo6dXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRo
VG91Y2goY29uc3QgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIHVpbnQzMl90IHRvdWNoLCB1aW50
MzJfdCBoYW5kbGVQb3NpdGlvbikKK3sKKyAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2U6OlVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoKHBvaW50LCB0b3VjaCwgaGFuZGxl
UG9zaXRpb24pLCBtX3BhZ2VJRCk7Cit9CisgICAgCit2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkVXBk
YXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2godWludDMyX3QgdG91Y2gsIHVpbnQzMl90IGZsYWdz
LCBmbG9hdCBncm93VGhyZXNob2xkLCBmbG9hdCBzaHJpbmtUaHJlc2hvbGQpCit7CisgICAgbV9w
YWdlQ2xpZW50LmRpZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoKHRvdWNoLCBmbGFncywg
Z3Jvd1RocmVzaG9sZCwgc2hyaW5rVGhyZXNob2xkKTsKK30KKyNlbmRpZgogCiB2b2lkIFdlYlBh
Z2VQcm94eTo6YXBwbGljYXRpb25EaWRFbnRlckJhY2tncm91bmQoKQogewpJbmRleDogU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkocmV2aXNpb24gMjI3MDc3KQor
KysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01NjksNiArNTY5LDkgQEAgcHVibGljOgogICAgIHZvaWQgYmx1ckFzc2lzdGVkTm9k
ZSgpOwogICAgIHZvaWQgc2VsZWN0V2l0aEdlc3R1cmUoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
LCB1aW50MzJfdCBncmFudWxhcml0eSwgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdl
c3R1cmVTdGF0ZSwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSwgQ2FsbGJhY2tJ
RCk7CiAgICAgdm9pZCB1cGRhdGVTZWxlY3Rpb25XaXRoVG91Y2hlcyhjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYsIHVpbnQzMl90IHRvdWNoZXMsIGJvb2wgYmFzZUlzU3RhcnQsIENhbGxiYWNrSUQp
OworI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPCAxMjAwMDAKKyAgICB2b2lk
IHVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoKGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jiwg
dWludDMyX3QgdG91Y2gsIHVpbnQzMl90IGhhbmRsZVBvc2l0aW9uKTsKKyNlbmRpZgogICAgIHZv
aWQgc2VsZWN0V2l0aFR3b1RvdWNoZXMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGZyb20sIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiB0bywgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90
IGdlc3R1cmVTdGF0ZSwgQ2FsbGJhY2tJRCk7CiAgICAgdm9pZCBleHRlbmRTZWxlY3Rpb24odWlu
dDMyX3QgZ3JhbnVsYXJpdHkpOwogICAgIHZvaWQgc2VsZWN0V29yZEJhY2t3YXJkKCk7CkBAIC0x
MDg1LDYgKzEwODgsMTIgQEAgcHJpdmF0ZToKIAogICAgIHN0YXRpYyB2b2lkIGNvbnZlcnRTZWxl
Y3Rpb25SZWN0c1RvUm9vdFZpZXcoV2ViQ29yZTo6RnJhbWVWaWV3KiwgVmVjdG9yPFdlYkNvcmU6
OlNlbGVjdGlvblJlY3Q+Jik7CiAgICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiByYW5nZUZvcldl
YlNlbGVjdGlvbkF0UG9zaXRpb24oY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBjb25zdCBXZWJD
b3JlOjpWaXNpYmxlUG9zaXRpb24mLCBTZWxlY3Rpb25GbGFncyYpOworI2lmIF9fSVBIT05FX09T
X1ZFUlNJT05fTUFYX0FMTE9XRUQgPCAxMjAwMDAKKyAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+
IHJhbmdlRm9yQmxvY2tBdFBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgdm9p
ZCBjb21wdXRlRXhwYW5kQW5kU2hyaW5rVGhyZXNob2xkc0ZvckhhbmRsZShjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYsIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uLCBmbG9hdCYgZ3Jvd1RocmVzaG9s
ZCwgZmxvYXQmIHNocmlua1RocmVzaG9sZCk7CisgICAgUmVmPFdlYkNvcmU6OlJhbmdlPiBleHBh
bmRlZFJhbmdlRnJvbUhhbmRsZShXZWJDb3JlOjpSYW5nZSYsIFNlbGVjdGlvbkhhbmRsZVBvc2l0
aW9uKTsKKyAgICBSZWY8V2ViQ29yZTo6UmFuZ2U+IGNvbnRyYWN0ZWRSYW5nZUZyb21IYW5kbGUo
V2ViQ29yZTo6UmFuZ2UmIGN1cnJlbnRSYW5nZSwgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb24sIFNl
bGVjdGlvbkZsYWdzJik7CisjZW5kaWYKICAgICB2b2lkIGdldEFzc2lzdGVkTm9kZUluZm9ybWF0
aW9uKEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uJik7CiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxp
emVBY2Nlc3NpYmlsaXR5KCk7CiAgICAgdm9pZCBoYW5kbGVTeW50aGV0aWNDbGljayhXZWJDb3Jl
OjpOb2RlKiBub2RlUmVzcG9uZGluZ1RvQ2xpY2ssIGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQm
IGxvY2F0aW9uKTsKQEAgLTEwOTMsNiArMTEwMiw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZXNl
dFRleHRBdXRvc2l6aW5nKCk7CiAgICAgV2ViQ29yZTo6VmlzaWJsZVBvc2l0aW9uIHZpc2libGVQ
b3NpdGlvbkluRm9jdXNlZE5vZGVGb3JQb2ludChjb25zdCBXZWJDb3JlOjpGcmFtZSYsIGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9kZSk7
CiAgICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiByYW5nZUZvckdyYW51bGFyaXR5QXRQb2ludChX
ZWJDb3JlOjpGcmFtZSYsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMyX3QgZ3JhbnVs
YXJpdHksIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUpOworI2lmIF9fSVBIT05F
X09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPCAxMjAwMDAKKyAgICBSZWZQdHI8V2ViQ29yZTo6UmFu
Z2U+IGNoYW5nZUJsb2NrU2VsZWN0aW9uKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgU2VsZWN0
aW9uSGFuZGxlUG9zaXRpb24sIGZsb2F0JiBncm93VGhyZXNob2xkLCBmbG9hdCYgc2hyaW5rVGhy
ZXNob2xkLCBTZWxlY3Rpb25GbGFncyYpOworI2VuZGlmCiAjZW5kaWYKIAogI2lmIFBMQVRGT1JN
KElPUykgJiYgRU5BQkxFKERBVEFfSU5URVJBQ1RJT04pCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHJldmlzaW9u
IDIyNzA3NykKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVz
c2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDkgQEAgbWVzc2FnZXMgLT4gV2Vi
UGFnZSBMZWdhY3lSZWNlaXZlciB7CiAgICAgQmx1ckFzc2lzdGVkTm9kZSgpCiAgICAgU2VsZWN0
V2l0aEdlc3R1cmUoV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIHVpbnQzMl90IGdyYW51bGFyaXR5
LCB1aW50MzJfdCBnZXN0dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCBib29sIGlzSW50
ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2RlLCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkK
ICAgICBVcGRhdGVTZWxlY3Rpb25XaXRoVG91Y2hlcyhXZWJDb3JlOjpJbnRQb2ludCBwb2ludCwg
dWludDMyX3QgdG91Y2hlcywgYm9vbCBiYXNlSXNTdGFydCwgV2ViS2l0OjpDYWxsYmFja0lEIGNh
bGxiYWNrSUQpCisjaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA8IDEyMDAwMAor
ICAgIFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoKFdlYkNvcmU6OkludFBvaW50IHBvaW50
LCB1aW50MzJfdCB0b3VjaCwgdWludDMyX3QgaGFuZGxlUG9zaXRpb24pCisjZW5kaWYKICAgICBT
ZWxlY3RXaXRoVHdvVG91Y2hlcyhXZWJDb3JlOjpJbnRQb2ludCBmcm9tLCBXZWJDb3JlOjpJbnRQ
b2ludCB0bywgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgV2Vi
S2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiAgICAgRXh0ZW5kU2VsZWN0aW9uKHVpbnQzMl90
IGdyYW51bGFyaXR5KQogICAgIFNlbGVjdFdvcmRCYWNrd2FyZCgpCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQkocmV2aXNp
b24gMjI3MDc3KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTEwNTUsNiArMTA1NSwzNjQgQEAgUmVmUHRyPFJh
bmdlPiBXZWJQYWdlOjpyYW5nZUZvcldlYlNlbGVjdAogICAgIHJldHVybiByYW5nZS0+Y29sbGFw
c2VkKCkgPyBudWxscHRyIDogcmFuZ2U7CiB9CiAKKyNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01B
WF9BTExPV0VEIDwgMTIwMDAwCitzdGF0aWMgYm9vbCBjYW5TaHJpbmtUb1RleHRTZWxlY3Rpb24o
UmFuZ2UmIHJhbmdlKQoreworICAgIGlmIChyYW5nZS5zdGFydENvbnRhaW5lcigpLmlzVGV4dE5v
ZGUoKSAmJiByYW5nZS5lbmRDb250YWluZXIoKS5pc1RleHROb2RlKCkpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBjYW5TaHJpbmtUb1RleHRTZWxlY3Rpb24ocmFuZ2UuY29tbW9u
QW5jZXN0b3JDb250YWluZXIoKSk7Cit9CitzdGF0aWMgY29uc3QgaW50IG1heEhpdFRlc3RzID0g
MTA7CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgZGlzdGFuY2VCZXR3ZWVuUmVjdHNGb3JQb3NpdGlv
bihJbnRSZWN0JiBmaXJzdCwgSW50UmVjdCYgc2Vjb25kLCBTZWxlY3Rpb25IYW5kbGVQb3NpdGlv
biBoYW5kbGVQb3NpdGlvbikKK3sKKyAgICBzd2l0Y2ggKGhhbmRsZVBvc2l0aW9uKSB7CisgICAg
Y2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6VG9wOgorICAgICAgICByZXR1cm4gYWJzKGZp
cnN0LnkoKSAtIHNlY29uZC55KCkpOworICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246
OlJpZ2h0OgorICAgICAgICByZXR1cm4gYWJzKGZpcnN0Lm1heFgoKSAtIHNlY29uZC5tYXhYKCkp
OworICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OkJvdHRvbToKKyAgICAgICAgcmV0
dXJuIGFicyhmaXJzdC5tYXhZKCkgLSBzZWNvbmQubWF4WSgpKTsKKyAgICBjYXNlIFNlbGVjdGlv
bkhhbmRsZVBvc2l0aW9uOjpMZWZ0OgorICAgICAgICByZXR1cm4gYWJzKGZpcnN0LngoKSAtIHNl
Y29uZC54KCkpOworICAgIH0KK30KKworc3RhdGljIGlubGluZSBib29sIHJlY3RzRXNzZW50aWFs
bHlUaGVTYW1lKEludFJlY3QmIGZpcnN0LCBJbnRSZWN0JiBzZWNvbmQsIGZsb2F0IGFsbG93YWJs
ZVBlcmNlbnREaWZmZXJlbmNlKQoreworICAgIGNvbnN0IGZsb2F0IG1pbk1hZ25pdHVkZVJhdGlv
ID0gMS4wIC0gYWxsb3dhYmxlUGVyY2VudERpZmZlcmVuY2U7CisgICAgY29uc3QgZmxvYXQgbWF4
RGlzcGxhY2VtZW50UmF0aW8gPSBhbGxvd2FibGVQZXJjZW50RGlmZmVyZW5jZTsKKyAgICAKKyAg
ICBmbG9hdCB4T3JpZ2luU2hpZnRSYXRpbyA9IGFicyhmaXJzdC54KCkgLSBzZWNvbmQueCgpKSAv
IHN0ZDo6bWluKGZpcnN0LndpZHRoKCksIHNlY29uZC53aWR0aCgpKTsKKyAgICBmbG9hdCB5T3Jp
Z2luU2hpZnRSYXRpbyA9IGFicyhmaXJzdC55KCkgLSBzZWNvbmQueSgpKSAvIHN0ZDo6bWluKGZp
cnN0LmhlaWdodCgpLCBzZWNvbmQuaGVpZ2h0KCkpOworICAgIAorICAgIGZsb2F0IHdpZHRoUmF0
aW8gPSBzdGQ6Om1pbihmaXJzdC53aWR0aCgpIC8gc2Vjb25kLndpZHRoKCksIHNlY29uZC53aWR0
aCgpIC8gZmlyc3Qud2lkdGgoKSk7CisgICAgZmxvYXQgaGVpZ2h0UmF0aW8gPSBzdGQ6Om1pbihm
aXJzdC5oZWlnaHQoKSAvIHNlY29uZC5oZWlnaHQoKSwgc2Vjb25kLmhlaWdodCgpIC8gZmlyc3Qu
aGVpZ2h0KCkpOworICAgIHJldHVybiAoKHdpZHRoUmF0aW8gPiBtaW5NYWduaXR1ZGVSYXRpbyAm
JiB4T3JpZ2luU2hpZnRSYXRpbyA8IG1heERpc3BsYWNlbWVudFJhdGlvKSAmJiAoaGVpZ2h0UmF0
aW8gPiBtaW5NYWduaXR1ZGVSYXRpbyAmJiB5T3JpZ2luU2hpZnRSYXRpbyA8IG1heERpc3BsYWNl
bWVudFJhdGlvKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVmUHRyPFJhbmdlPiB1bmlvbkRPTVJh
bmdlcyhSYW5nZSogcmFuZ2VBLCBSYW5nZSogcmFuZ2VCKQoreworICAgIGlmICghcmFuZ2VCKQor
ICAgICAgICByZXR1cm4gcmFuZ2VBOworICAgIGlmICghcmFuZ2VBKQorICAgICAgICByZXR1cm4g
cmFuZ2VCOworICAgIAorICAgIGF1dG8gc3RhcnRUb1N0YXJ0Q29tcGFyaXNvbiA9IHJhbmdlQS0+
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpTVEFSVF9UT19TVEFSVCwgKnJhbmdlQik7Cisg
ICAgaWYgKHN0YXJ0VG9TdGFydENvbXBhcmlzb24uaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIAorICAgIGF1dG8gZW5kVG9FbmRDb21wYXJpc29uID0gcmFuZ2VB
LT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OkVORF9UT19FTkQsICpyYW5nZUIpOworICAg
IGlmIChlbmRUb0VuZENvbXBhcmlzb24uaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIAorICAgIGF1dG8qIHN0YXJ0ID0gc3RhcnRUb1N0YXJ0Q29tcGFyaXNvbi5y
ZWxlYXNlUmV0dXJuVmFsdWUoKSA8PSAwID8gcmFuZ2VBIDogcmFuZ2VCOworICAgIGF1dG8qIGVu
ZCA9IGVuZFRvRW5kQ29tcGFyaXNvbi5yZWxlYXNlUmV0dXJuVmFsdWUoKSA8PSAwID8gcmFuZ2VC
IDogcmFuZ2VBOworICAgIAorICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHJhbmdlQS0+b3duZXJE
b2N1bWVudCgpLCAmc3RhcnQtPnN0YXJ0Q29udGFpbmVyKCksIHN0YXJ0LT5zdGFydE9mZnNldCgp
LCAmZW5kLT5lbmRDb250YWluZXIoKSwgZW5kLT5lbmRPZmZzZXQoKSk7Cit9CisKK3N0YXRpYyBp
bmxpbmUgSW50UG9pbnQgY29tcHV0ZUVkZ2VDZW50ZXIoY29uc3QgSW50UmVjdCYgYm94LCBTZWxl
Y3Rpb25IYW5kbGVQb3NpdGlvbiBoYW5kbGVQb3NpdGlvbikKK3sKKyAgICBzd2l0Y2ggKGhhbmRs
ZVBvc2l0aW9uKSB7CisgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6VG9wOgorICAg
ICAgICByZXR1cm4gSW50UG9pbnQoYm94LngoKSArIGJveC53aWR0aCgpIC8gMiwgYm94LnkoKSk7
CisgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6UmlnaHQ6CisgICAgICAgIHJldHVy
biBJbnRQb2ludChib3gubWF4WCgpLCBib3gueSgpICsgYm94LmhlaWdodCgpIC8gMik7CisgICAg
Y2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6Qm90dG9tOgorICAgICAgICByZXR1cm4gSW50
UG9pbnQoYm94LngoKSArIGJveC53aWR0aCgpIC8gMiwgYm94Lm1heFkoKSk7CisgICAgY2FzZSBT
ZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6TGVmdDoKKyAgICAgICAgcmV0dXJuIEludFBvaW50KGJv
eC54KCksIGJveC55KCkgKyBib3guaGVpZ2h0KCkgLyAyKTsKKyAgICB9Cit9CisKK1JlZjxSYW5n
ZT4gV2ViUGFnZTo6ZXhwYW5kZWRSYW5nZUZyb21IYW5kbGUoUmFuZ2UmIGN1cnJlbnRSYW5nZSwg
U2VsZWN0aW9uSGFuZGxlUG9zaXRpb24gaGFuZGxlUG9zaXRpb24pCit7CisgICAgSW50UmVjdCBj
dXJyZW50Qm94ID0gc2VsZWN0aW9uQm94Rm9yUmFuZ2UoJmN1cnJlbnRSYW5nZSk7CisgICAgSW50
UG9pbnQgZWRnZUNlbnRlciA9IGNvbXB1dGVFZGdlQ2VudGVyKGN1cnJlbnRCb3gsIGhhbmRsZVBv
c2l0aW9uKTsKKyAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWF4RGlzdGFuY2UgPSAxMDAwOworICAg
IGNvbnN0IGZsb2F0IG11bHRpcGxlID0gcG93ZihtYXhEaXN0YW5jZSwgMS4wIC8gKG1heEhpdFRl
c3RzIC0gMSkpOworICAgIGZsb2F0IGRpc3RhbmNlID0gMTsKKyAgICAKKyAgICBSZWZQdHI8UmFu
Z2U+IGJlc3RSYW5nZTsKKyAgICBJbnRSZWN0IGJlc3RSZWN0OworICAgIAorICAgIHdoaWxlIChk
aXN0YW5jZSA8IG1heERpc3RhbmNlKSB7CisgICAgICAgIGlmIChiZXN0UmFuZ2UpIHsKKyAgICAg
ICAgICAgIGlmIChkaXN0YW5jZUJldHdlZW5SZWN0c0ZvclBvc2l0aW9uKGJlc3RSZWN0LCBjdXJy
ZW50Qm94LCBoYW5kbGVQb3NpdGlvbikgPCBkaXN0YW5jZSkgeworICAgICAgICAgICAgICAgIC8v
IEJyZWFrIGVhcmx5LCB3ZSdyZSB1bmxpa2VseSB0byBkbyBhbnkgYmV0dGVyLgorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBJbnRQb2ludCB0ZXN0UG9pbnQgPSBlZGdlQ2VudGVyOworICAgICAgICBzd2l0Y2ggKGhhbmRs
ZVBvc2l0aW9uKSB7CisgICAgICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OlRvcDoK
KyAgICAgICAgICAgIHRlc3RQb2ludC5tb3ZlKDAsIC1kaXN0YW5jZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6UmlnaHQ6CisgICAg
ICAgICAgICB0ZXN0UG9pbnQubW92ZShkaXN0YW5jZSwgMCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6Qm90dG9tOgorICAgICAgICAg
ICAgdGVzdFBvaW50Lm1vdmUoMCwgZGlzdGFuY2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OkxlZnQ6CisgICAgICAgICAgICB0ZXN0
UG9pbnQubW92ZSgtZGlzdGFuY2UsIDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGRpc3RhbmNlID0gY2VpbGYoZGlzdGFuY2UgKiBtdWx0aXBsZSk7
CisgICAgICAgIAorICAgICAgICBSZWZQdHI8UmFuZ2U+IG5ld1JhbmdlOworICAgICAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlQXRQb3NpdGlvbiA9IHJhbmdlRm9yQmxvY2tBdFBvaW50KHRlc3RQb2lu
dCk7CisgICAgICAgIGlmICghcmFuZ2VBdFBvc2l0aW9uIHx8ICZjdXJyZW50UmFuZ2Uub3duZXJE
b2N1bWVudCgpICE9ICZyYW5nZUF0UG9zaXRpb24tPm93bmVyRG9jdW1lbnQoKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgaWYgKHJhbmdlQXRQb3NpdGlvbi0+Y29u
dGFpbnMoY3VycmVudFJhbmdlKSkKKyAgICAgICAgICAgIG5ld1JhbmdlID0gcmFuZ2VBdFBvc2l0
aW9uOworICAgICAgICBlbHNlIGlmIChjdXJyZW50UmFuZ2UuY29udGFpbnMoKnJhbmdlQXRQb3Np
dGlvbi5nZXQoKSkpCisgICAgICAgICAgICBuZXdSYW5nZSA9ICZjdXJyZW50UmFuZ2U7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG5ld1JhbmdlID0gdW5pb25ET01SYW5nZXMoJmN1cnJlbnRS
YW5nZSwgcmFuZ2VBdFBvc2l0aW9uLmdldCgpKTsKKyAgICAgICAgCisgICAgICAgIEludFJlY3Qg
Y29weVJlY3QgPSBzZWxlY3Rpb25Cb3hGb3JSYW5nZShuZXdSYW5nZS5nZXQoKSk7CisgICAgICAg
IAorICAgICAgICAvLyBJcyBpdCBkaWZmZXJlbnQgYW5kIGJpZ2dlciB0aGFuIHRoZSBjdXJyZW50
PworICAgICAgICBib29sIGlzQmV0dGVyQ2hvaWNlID0gIShyZWN0c0Vzc2VudGlhbGx5VGhlU2Ft
ZShjb3B5UmVjdCwgY3VycmVudEJveCwgLjA1KSk7CisgICAgICAgIGlmIChpc0JldHRlckNob2lj
ZSkgeworICAgICAgICAgICAgc3dpdGNoIChoYW5kbGVQb3NpdGlvbikgeworICAgICAgICAgICAg
Y2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6VG9wOgorICAgICAgICAgICAgY2FzZSBTZWxl
Y3Rpb25IYW5kbGVQb3NpdGlvbjo6Qm90dG9tOgorICAgICAgICAgICAgICAgIGlzQmV0dGVyQ2hv
aWNlID0gKGNvcHlSZWN0LmhlaWdodCgpID4gY3VycmVudEJveC5oZWlnaHQoKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9u
OjpSaWdodDoKKyAgICAgICAgICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OkxlZnQ6
CisgICAgICAgICAgICAgICAgaXNCZXR0ZXJDaG9pY2UgPSAoY29weVJlY3Qud2lkdGgoKSA+IGN1
cnJlbnRCb3gud2lkdGgoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGJlc3RSYW5n
ZSAmJiBpc0JldHRlckNob2ljZSkgeworICAgICAgICAgICAgLy8gRnVydGhlcm9yZSwgaXMgaXQg
c21hbGxlciB0aGFuIHRoZSBiZXN0IHdlJ3ZlIGZvdW5kIHNvIGZhcj8KKyAgICAgICAgICAgIHN3
aXRjaCAoaGFuZGxlUG9zaXRpb24pIHsKKyAgICAgICAgICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxl
UG9zaXRpb246OlRvcDoKKyAgICAgICAgICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246
OkJvdHRvbToKKyAgICAgICAgICAgICAgICBpc0JldHRlckNob2ljZSA9IChjb3B5UmVjdC5oZWln
aHQoKSA8IGJlc3RSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OlJpZ2h0OgorICAgICAgICAgICAg
Y2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6TGVmdDoKKyAgICAgICAgICAgICAgICBpc0Jl
dHRlckNob2ljZSA9IChjb3B5UmVjdC53aWR0aCgpIDwgYmVzdFJlY3Qud2lkdGgoKSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmIChpc0JldHRlckNob2ljZSkgeworICAgICAgICAgICAgYmVzdFJhbmdlID0gbmV3
UmFuZ2U7CisgICAgICAgICAgICBiZXN0UmVjdCA9IGNvcHlSZWN0OworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIGlmIChiZXN0UmFuZ2UpCisgICAgICAgIHJldHVybiBiZXN0UmFuZ2UucmVs
ZWFzZU5vbk51bGwoKTsKKyAgICAKKyAgICByZXR1cm4gY3VycmVudFJhbmdlOworfQorCitSZWY8
UmFuZ2U+IFdlYlBhZ2U6OmNvbnRyYWN0ZWRSYW5nZUZyb21IYW5kbGUoUmFuZ2UmIGN1cnJlbnRS
YW5nZSwgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb24gaGFuZGxlUG9zaXRpb24sIFNlbGVjdGlvbkZs
YWdzJiBmbGFncykKK3sKKyAgICAvLyBTaHJpbmtpbmcgd2l0aCBhIGJhc2UgYW5kIGV4dGVudCB3
aWxsIGFsd2F5cyBnaXZlIGJldHRlciByZXN1bHRzLiBJZiB3ZSBvbmx5IGhhdmUgYSBzaW5nbGUg
ZWxlbWVudCwKKyAgICAvLyBzZWUgaWYgd2UgY2FuIGJyZWFrIHRoYXQgZG93biB0byBhIGJhc2Ug
YW5kIGV4dGVudC4gU2hyaW5raW5nIGJhc2UgYW5kIGV4dGVudCBpcyBjb21wYXJhdGl2ZWx5IHN0
cmFpZ2h0Zm9yd2FyZC4KKyAgICAvLyBTaHJpbmtpbmcgZG93biB0byBhbm90aGVyIGVsZW1lbnQg
aXMgdW5saWtlbHkgdG8gbW92ZSBqdXN0IG9uZSBlZGdlLCBidXQgd2UgY2FuIHRyeSB0aGF0IGFz
IGEgZmFsbGJhY2suCisgICAgCisgICAgSW50UmVjdCBjdXJyZW50Qm94ID0gc2VsZWN0aW9uQm94
Rm9yUmFuZ2UoJmN1cnJlbnRSYW5nZSk7CisgICAgSW50UG9pbnQgZWRnZUNlbnRlciA9IGNvbXB1
dGVFZGdlQ2VudGVyKGN1cnJlbnRCb3gsIGhhbmRsZVBvc2l0aW9uKTsKKyAgICAKKyAgICBmbG9h
dCBtYXhEaXN0YW5jZTsKKyAgICAKKyAgICBzd2l0Y2ggKGhhbmRsZVBvc2l0aW9uKSB7CisgICAg
Y2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6VG9wOgorICAgIGNhc2UgU2VsZWN0aW9uSGFu
ZGxlUG9zaXRpb246OkJvdHRvbToKKyAgICAgICAgbWF4RGlzdGFuY2UgPSBjdXJyZW50Qm94Lmhl
aWdodCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9u
OjpSaWdodDoKKyAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpMZWZ0OgorICAgICAg
ICBtYXhEaXN0YW5jZSA9IGN1cnJlbnRCb3gud2lkdGgoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIAorICAgIGNvbnN0IGZsb2F0IG11bHRpcGxlID0gcG93ZihtYXhEaXN0YW5jZSAtIDEs
IDEuMCAvIChtYXhIaXRUZXN0cyAtIDEpKTsKKyAgICBmbG9hdCBkaXN0YW5jZSA9IDE7CisgICAg
UmVmUHRyPFJhbmdlPiBiZXN0UmFuZ2U7CisgICAgSW50UmVjdCBiZXN0UmVjdDsKKyAgICAKKyAg
ICB3aGlsZSAoZGlzdGFuY2UgPCBtYXhEaXN0YW5jZSkgeworICAgICAgICBpZiAoYmVzdFJhbmdl
KSB7CisgICAgICAgICAgICBmbG9hdCBzaHJhbmtEaXN0YW5jZTsKKyAgICAgICAgICAgIHN3aXRj
aCAoaGFuZGxlUG9zaXRpb24pIHsKKyAgICAgICAgICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9z
aXRpb246OlRvcDoKKyAgICAgICAgICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OkJv
dHRvbToKKyAgICAgICAgICAgICAgICBzaHJhbmtEaXN0YW5jZSA9IGFicyhjdXJyZW50Qm94Lmhl
aWdodCgpIC0gYmVzdFJlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6UmlnaHQ6CisgICAgICAgICAg
ICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpMZWZ0OgorICAgICAgICAgICAgICAgIHNo
cmFua0Rpc3RhbmNlID0gYWJzKGN1cnJlbnRCb3gud2lkdGgoKSAtIGJlc3RSZWN0LndpZHRoKCkp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KHNocmFua0Rpc3RhbmNlID4gZGlzdGFuY2UpIHsKKyAgICAgICAgICAgICAgICAvLyBDZXJ0YWlu
bHkgbm90IGdvaW5nIHRvIGRvIGFueSBiZXR0ZXIgdGhhbiB0aGF0LgorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBJbnRQ
b2ludCB0ZXN0UG9pbnQgPSBlZGdlQ2VudGVyOworICAgICAgICBzd2l0Y2ggKGhhbmRsZVBvc2l0
aW9uKSB7CisgICAgICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OlRvcDoKKyAgICAg
ICAgICAgIHRlc3RQb2ludC5tb3ZlKDAsIGRpc3RhbmNlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpSaWdodDoKKyAgICAgICAgICAg
IHRlc3RQb2ludC5tb3ZlKC1kaXN0YW5jZSwgMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6Qm90dG9tOgorICAgICAgICAgICAgdGVz
dFBvaW50Lm1vdmUoMCwgLWRpc3RhbmNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpMZWZ0OgorICAgICAgICAgICAgdGVzdFBvaW50
Lm1vdmUoZGlzdGFuY2UsIDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGRpc3RhbmNlICo9IG11bHRpcGxlOworICAgICAgICAKKyAgICAgICAgUmVm
UHRyPFJhbmdlPiBuZXdSYW5nZSA9IHJhbmdlRm9yQmxvY2tBdFBvaW50KHRlc3RQb2ludCk7Cisg
ICAgICAgIGlmICghbmV3UmFuZ2UgfHwgJm5ld1JhbmdlLT5vd25lckRvY3VtZW50KCkgIT0gJmN1
cnJlbnRSYW5nZS5vd25lckRvY3VtZW50KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChoYW5kbGVQb3NpdGlvbiA9PSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlv
bjo6VG9wIHx8IGhhbmRsZVBvc2l0aW9uID09IFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpMZWZ0
KQorICAgICAgICAgICAgbmV3UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG5ld1JhbmdlLT5zdGFydENv
bnRhaW5lcigpLmRvY3VtZW50KCksIG5ld1JhbmdlLT5lbmRQb3NpdGlvbigpLCBjdXJyZW50UmFu
Z2UuZW5kUG9zaXRpb24oKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ld1JhbmdlID0g
UmFuZ2U6OmNyZWF0ZShuZXdSYW5nZS0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLCBjdXJy
ZW50UmFuZ2Uuc3RhcnRQb3NpdGlvbigpLCBuZXdSYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKKyAg
ICAgICAgCisgICAgICAgIEludFJlY3QgY29weVJlY3QgPSBzZWxlY3Rpb25Cb3hGb3JSYW5nZShu
ZXdSYW5nZS5nZXQoKSk7CisgICAgICAgIGlmIChjb3B5UmVjdC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIC8vIElmIHRoZSBuZXcgcmFuZ2UgaXMgYW4gZW1wdHkgcmVjdGFuZ2xlLCB3ZSB0cnkg
dGhlIGJsb2NrIGF0IHRoZSBjdXJyZW50IHBvaW50CisgICAgICAgICAgICAvLyBhbmQgc2VlIGlm
IHRoYXQgaGFzIGEgcmVjdGFuZ2xlIHRoYXQgaXMgYSBiZXR0ZXIgY2hvaWNlLgorICAgICAgICAg
ICAgbmV3UmFuZ2UgPSByYW5nZUZvckJsb2NrQXRQb2ludCh0ZXN0UG9pbnQpOworICAgICAgICAg
ICAgY29weVJlY3QgPSBzZWxlY3Rpb25Cb3hGb3JSYW5nZShuZXdSYW5nZS5nZXQoKSk7CisgICAg
ICAgIH0KKyAgICAgICAgYm9vbCBpc0JldHRlckNob2ljZTsKKyAgICAgICAgc3dpdGNoIChoYW5k
bGVQb3NpdGlvbikgeworICAgICAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpUb3A6
CisgICAgICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OkJvdHRvbToKKyAgICAgICAg
ICAgIGlzQmV0dGVyQ2hvaWNlID0gKGNvcHlSZWN0LmhlaWdodCgpIDwgY3VycmVudEJveC5oZWln
aHQoKSk7CisgICAgICAgICAgICBpZiAoY29weVJlY3QuaGVpZ2h0KCkgPT0gY3VycmVudEJveC5o
ZWlnaHQoKSkKKyAgICAgICAgICAgICAgICBpc0JldHRlckNob2ljZSA9IGNhblNocmlua1RvVGV4
dFNlbGVjdGlvbigqbmV3UmFuZ2UuZ2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OkxlZnQ6CisgICAgICAgIGNhc2UgU2VsZWN0
aW9uSGFuZGxlUG9zaXRpb246OlJpZ2h0OgorICAgICAgICAgICAgaXNCZXR0ZXJDaG9pY2UgPSAo
Y29weVJlY3Qud2lkdGgoKSA+IGJlc3RSZWN0LndpZHRoKCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlzQmV0dGVyQ2hvaWNlID0gaXNCZXR0ZXJD
aG9pY2UgJiYgIWFyZVJhbmdlc0VxdWFsKG5ld1JhbmdlLmdldCgpLCAmY3VycmVudFJhbmdlKTsK
KyAgICAgICAgaWYgKGJlc3RSYW5nZSAmJiBpc0JldHRlckNob2ljZSkgeworICAgICAgICAgICAg
c3dpdGNoIChoYW5kbGVQb3NpdGlvbikgeworICAgICAgICAgICAgY2FzZSBTZWxlY3Rpb25IYW5k
bGVQb3NpdGlvbjo6VG9wOgorICAgICAgICAgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlv
bjo6Qm90dG9tOgorICAgICAgICAgICAgICAgIGlzQmV0dGVyQ2hvaWNlID0gKGNvcHlSZWN0Lmhl
aWdodCgpID4gYmVzdFJlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6TGVmdDoKKyAgICAgICAgICAg
IGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OlJpZ2h0OgorICAgICAgICAgICAgICAgIGlz
QmV0dGVyQ2hvaWNlID0gKGNvcHlSZWN0LndpZHRoKCkgPiBiZXN0UmVjdC53aWR0aCgpKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBp
ZiAoaXNCZXR0ZXJDaG9pY2UpIHsKKyAgICAgICAgICAgIGJlc3RSYW5nZSA9IG5ld1JhbmdlOwor
ICAgICAgICAgICAgYmVzdFJlY3QgPSBjb3B5UmVjdDsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICB9CisgICAgCisgICAgaWYgKCFiZXN0UmFuZ2UpCisgICAgICAgIGJlc3RSYW5nZSA9ICZjdXJy
ZW50UmFuZ2U7CisgICAgCisgICAgLy8gSWYgd2UgY2FuIHNocmluayBkb3duIHRvIHRleHQgb25s
eSwgdGhlIG9ubHkgcmVhc29uIHdlIHdvdWxkbid0IGlzIHRoYXQKKyAgICAvLyB0aGVyZSBhcmUg
bXVsdGlwbGUgc3ViLWVsZW1lbnQgYmxvY2tzIGJlbmVhdGggdXMuIElmIHdlIGRpZG4ndCBmaW5k
CisgICAgLy8gbXVsdGlwbGUgc3ViLWVsZW1lbnQgYmxvY2tzLCBkb24ndCBzaHJpbmsgdG8gYSBz
dWItZWxlbWVudCBibG9jay4KKyAgICAKKyAgICBpZiAoY2FuU2hyaW5rVG9UZXh0U2VsZWN0aW9u
KCpiZXN0UmFuZ2UuZ2V0KCkpKQorICAgICAgICBmbGFncyA9IE5vbmU7CisgICAgCisgICAgcmV0
dXJuIGJlc3RSYW5nZS5yZWxlYXNlTm9uTnVsbCgpOworfQorCit2b2lkIFdlYlBhZ2U6OmNvbXB1
dGVFeHBhbmRBbmRTaHJpbmtUaHJlc2hvbGRzRm9ySGFuZGxlKGNvbnN0IEludFBvaW50JiBwb2lu
dCwgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb24gaGFuZGxlUG9zaXRpb24sIGZsb2F0JiBncm93VGhy
ZXNob2xkLCBmbG9hdCYgc2hyaW5rVGhyZXNob2xkKQoreworICAgIEZyYW1lJiBmcmFtZSA9IG1f
cGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgUmVmUHRy
PFJhbmdlPiBjdXJyZW50UmFuZ2UgPSBtX2N1cnJlbnRCbG9ja1NlbGVjdGlvbiA/IG1fY3VycmVu
dEJsb2NrU2VsZWN0aW9uLmdldCgpIDogZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9O
b3JtYWxpemVkUmFuZ2UoKTsKKyAgICAKKyAgICBpZiAoIWN1cnJlbnRSYW5nZSkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIFJlZjxSYW5nZT4gZXhwYW5kZWRSYW5nZSA9IGV4cGFuZGVkUmFu
Z2VGcm9tSGFuZGxlKCpjdXJyZW50UmFuZ2UsIGhhbmRsZVBvc2l0aW9uKTsKKyAgICBTZWxlY3Rp
b25GbGFncyBmbGFnczsKKyAgICBSZWZQdHI8UmFuZ2U+IGNvbnRyYWN0ZWRSYW5nZSA9IGNvbnRy
YWN0ZWRSYW5nZUZyb21IYW5kbGUoKmN1cnJlbnRSYW5nZSwgaGFuZGxlUG9zaXRpb24sIGZsYWdz
KTsKKyAgICAKKyAgICBJbnRSZWN0IGN1cnJlbnRCb3VuZHMgPSBzZWxlY3Rpb25Cb3hGb3JSYW5n
ZShjdXJyZW50UmFuZ2UuZ2V0KCkpOworICAgIEludFJlY3QgZXhwYW5kZWRCb3VuZHMgPSBzZWxl
Y3Rpb25Cb3hGb3JSYW5nZShleHBhbmRlZFJhbmdlLnB0cigpKTsKKyAgICBJbnRSZWN0IGNvbnRy
YWN0ZWRCb3VuZHMgPSBzZWxlY3Rpb25Cb3hGb3JSYW5nZShjb250cmFjdGVkUmFuZ2UuZ2V0KCkp
OworICAgIAorICAgIGZsb2F0IGN1cnJlbnQ7CisgICAgZmxvYXQgZXhwYW5kZWQ7CisgICAgZmxv
YXQgY29udHJhY3RlZDsKKyAgICBmbG9hdCBtYXhUaHJlc2hvbGQ7CisgICAgZmxvYXQgbWluVGhy
ZXNob2xkOworICAgIAorICAgIHN3aXRjaCAoaGFuZGxlUG9zaXRpb24pIHsKKyAgICBjYXNlIFNl
bGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpUb3A6IHsKKyAgICAgICAgY3VycmVudCA9IGN1cnJlbnRC
b3VuZHMueSgpOworICAgICAgICBleHBhbmRlZCA9IGV4cGFuZGVkQm91bmRzLnkoKTsKKyAgICAg
ICAgY29udHJhY3RlZCA9IGNvbnRyYWN0ZWRCb3VuZHMueSgpOworICAgICAgICBtYXhUaHJlc2hv
bGQgPSBGTFRfTUlOOworICAgICAgICBtaW5UaHJlc2hvbGQgPSBGTFRfTUFYOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6UmlnaHQ6IHsK
KyAgICAgICAgY3VycmVudCA9IGN1cnJlbnRCb3VuZHMubWF4WCgpOworICAgICAgICBleHBhbmRl
ZCA9IGV4cGFuZGVkQm91bmRzLm1heFgoKTsKKyAgICAgICAgY29udHJhY3RlZCA9IGNvbnRyYWN0
ZWRCb3VuZHMubWF4WCgpOworICAgICAgICBtYXhUaHJlc2hvbGQgPSBGTFRfTUFYOworICAgICAg
ICBtaW5UaHJlc2hvbGQgPSBGTFRfTUlOOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fz
ZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6Qm90dG9tOiB7CisgICAgICAgIGN1cnJlbnQgPSBj
dXJyZW50Qm91bmRzLm1heFkoKTsKKyAgICAgICAgZXhwYW5kZWQgPSBleHBhbmRlZEJvdW5kcy5t
YXhZKCk7CisgICAgICAgIGNvbnRyYWN0ZWQgPSBjb250cmFjdGVkQm91bmRzLm1heFkoKTsKKyAg
ICAgICAgbWF4VGhyZXNob2xkID0gRkxUX01BWDsKKyAgICAgICAgbWluVGhyZXNob2xkID0gRkxU
X01JTjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9z
aXRpb246OkxlZnQ6IHsKKyAgICAgICAgY3VycmVudCA9IGN1cnJlbnRCb3VuZHMueCgpOworICAg
ICAgICBleHBhbmRlZCA9IGV4cGFuZGVkQm91bmRzLngoKTsKKyAgICAgICAgY29udHJhY3RlZCA9
IGNvbnRyYWN0ZWRCb3VuZHMueCgpOworICAgICAgICBtYXhUaHJlc2hvbGQgPSBGTFRfTUlOOwor
ICAgICAgICBtaW5UaHJlc2hvbGQgPSBGTFRfTUFYOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBjb25zdCBmbG9hdCBmcmFjdGlvblRvR3JvdyA9IDAuMzsK
KyAgICAKKyAgICBncm93VGhyZXNob2xkID0gY3VycmVudCArIChleHBhbmRlZCAtIGN1cnJlbnQp
ICogZnJhY3Rpb25Ub0dyb3c7CisgICAgc2hyaW5rVGhyZXNob2xkID0gY3VycmVudCArIChjb250
cmFjdGVkIC0gY3VycmVudCkgKiAoMSAtIGZyYWN0aW9uVG9Hcm93KTsKKyAgICBpZiAoYXJlUmFu
Z2VzRXF1YWwoZXhwYW5kZWRSYW5nZS5wdHIoKSwgY3VycmVudFJhbmdlLmdldCgpKSkKKyAgICAg
ICAgZ3Jvd1RocmVzaG9sZCA9IG1heFRocmVzaG9sZDsKKyAgICAKK30KKyNlbmRpZgorCiB2b2lk
IFdlYlBhZ2U6OnNlbGVjdFdpdGhHZXN0dXJlKGNvbnN0IEludFBvaW50JiBwb2ludCwgdWludDMy
X3QgZ3JhbnVsYXJpdHksIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0dXJlU3Rh
dGUsIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUsIENhbGxiYWNrSUQgY2FsbGJh
Y2tJRCkKIHsKICAgICBhdXRvJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9j
dXNlZE9yTWFpbkZyYW1lKCk7CkBAIC0xMjY5LDYgKzE2MjcsODkgQEAgc3RhdGljIFJlZlB0cjxS
YW5nZT4gcmFuZ2VBdFdvcmRCb3VuZGFyeQogCiAgICAgcmV0dXJuIChiYXNlIDwgZXh0ZW50KSA/
IFJhbmdlOjpjcmVhdGUoKmZyYW1lLT5kb2N1bWVudCgpLCBiYXNlLCBleHRlbnQpIDogUmFuZ2U6
OmNyZWF0ZSgqZnJhbWUtPmRvY3VtZW50KCksIGV4dGVudCwgYmFzZSk7CiB9CisgICAgCisjaWYg
X19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA8IDEyMDAwMAorCitSZWZQdHI8UmFuZ2U+
IFdlYlBhZ2U6OnJhbmdlRm9yQmxvY2tBdFBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkKK3sK
KyAgICBIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5k
bGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQoKHBvaW50KSwgSGl0VGVzdFJlcXVlc3Q6OlJlYWRP
bmx5IHwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSB8IEhpdFRlc3RSZXF1ZXN0OjpEaXNhbGxvd1Vz
ZXJBZ2VudFNoYWRvd0NvbnRlbnQgfCBIaXRUZXN0UmVxdWVzdDo6SWdub3JlQ2xpcHBpbmcpOwor
CisgICAgTm9kZSogY3VycmVudE5vZGUgPSByZXN1bHQuaW5uZXJOb2RlKCk7CisgICAgUmVmUHRy
PFJhbmdlPiByYW5nZTsKKworICAgIGlmIChjdXJyZW50Tm9kZS0+aXNUZXh0Tm9kZSgpKSB7Cisg
ICAgICAgIHJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KG1fcGFnZS0+Zm9j
dXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkudmlzaWJsZVBvc2l0aW9uRm9yUG9p
bnQocG9pbnQpLCBQYXJhZ3JhcGhHcmFudWxhcml0eSwgRGlyZWN0aW9uRm9yd2FyZCk7CisgICAg
ICAgIGlmIChyYW5nZSAmJiAhcmFuZ2UtPmNvbGxhcHNlZCgpKQorICAgICAgICAgICAgcmV0dXJu
IHJhbmdlOworICAgIH0KKworICAgIGlmICghY3VycmVudE5vZGUtPmlzRWxlbWVudE5vZGUoKSkK
KyAgICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS0+cGFyZW50RWxlbWVudCgpOworCisg
ICAgaWYgKCFjdXJyZW50Tm9kZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByYW5n
ZSA9IFJhbmdlOjpjcmVhdGUoY3VycmVudE5vZGUtPmRvY3VtZW50KCkpOworICAgIHJhbmdlLT5z
ZWxlY3ROb2RlQ29udGVudHMoKmN1cnJlbnROb2RlKTsKKyAgICByZXR1cm4gcmFuZ2U7Cit9Cisg
ICAgCitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkRXhwYW5kKFNlbGVjdGlvbkhhbmRsZVBvc2l0
aW9uIGhhbmRsZVBvc2l0aW9uLCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRQb2ludCYg
cG9pbnQpCit7CisgICAgc3dpdGNoIChoYW5kbGVQb3NpdGlvbikgeworICAgIGNhc2UgU2VsZWN0
aW9uSGFuZGxlUG9zaXRpb246OlRvcDoKKyAgICAgICAgcmV0dXJuIChwb2ludC55KCkgPCByZWN0
LnkoKSk7CisgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6TGVmdDoKKyAgICAgICAg
cmV0dXJuIChwb2ludC54KCkgPCByZWN0LngoKSk7CisgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQ
b3NpdGlvbjo6UmlnaHQ6CisgICAgICAgIHJldHVybiAocG9pbnQueCgpID4gcmVjdC5tYXhYKCkp
OworICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OkJvdHRvbToKKyAgICAgICAgcmV0
dXJuIChwb2ludC55KCkgPiByZWN0Lm1heFkoKSk7CisgICAgfQorfQorCitSZWZQdHI8V2ViQ29y
ZTo6UmFuZ2U+IFdlYlBhZ2U6OmNoYW5nZUJsb2NrU2VsZWN0aW9uKGNvbnN0IEludFBvaW50JiBw
b2ludCwgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb24gaGFuZGxlUG9zaXRpb24sIGZsb2F0JiBncm93
VGhyZXNob2xkLCBmbG9hdCYgc2hyaW5rVGhyZXNob2xkLCBTZWxlY3Rpb25GbGFncyYgZmxhZ3Mp
Cit7CisgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2Vk
T3JNYWluRnJhbWUoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IGN1cnJlbnRSYW5nZSA9IG1fY3VycmVu
dEJsb2NrU2VsZWN0aW9uID8gbV9jdXJyZW50QmxvY2tTZWxlY3Rpb24uZ2V0KCkgOiBmcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghY3Vy
cmVudFJhbmdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSZWZQdHI8UmFuZ2U+IG5l
d1JhbmdlID0gc2hvdWxkRXhwYW5kKGhhbmRsZVBvc2l0aW9uLCBzZWxlY3Rpb25Cb3hGb3JSYW5n
ZShjdXJyZW50UmFuZ2UuZ2V0KCkpLCBwb2ludCkgPyBleHBhbmRlZFJhbmdlRnJvbUhhbmRsZSgq
Y3VycmVudFJhbmdlLCBoYW5kbGVQb3NpdGlvbikgOiBjb250cmFjdGVkUmFuZ2VGcm9tSGFuZGxl
KCpjdXJyZW50UmFuZ2UsIGhhbmRsZVBvc2l0aW9uLCBmbGFncyk7CisgICAgCisgICAgaWYgKG5l
d1JhbmdlKSB7CisgICAgICAgIG1fY3VycmVudEJsb2NrU2VsZWN0aW9uID0gbmV3UmFuZ2U7Cisg
ICAgICAgIGZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGVkUmFuZ2UobmV3UmFuZ2UuZ2V0KCks
IFZQX0RFRkFVTFRfQUZGSU5JVFksIHRydWUsIFVzZXJUcmlnZ2VyZWQpOworICAgIH0KKyAgICAK
KyAgICBjb21wdXRlRXhwYW5kQW5kU2hyaW5rVGhyZXNob2xkc0ZvckhhbmRsZShwb2ludCwgaGFu
ZGxlUG9zaXRpb24sIGdyb3dUaHJlc2hvbGQsIHNocmlua1RocmVzaG9sZCk7CisgICAgcmV0dXJu
IG5ld1JhbmdlOworfQorCit2b2lkIFdlYlBhZ2U6OnVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRv
dWNoKGNvbnN0IEludFBvaW50JiBwb2ludCwgdWludDMyX3QgdG91Y2gsIHVpbnQzMl90IGhhbmRs
ZVBvc2l0aW9uKQoreworICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVy
KCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CisgICAgSW50UG9pbnQgYWRqdXN0ZWRQb2ludCA9IGZy
YW1lLnZpZXcoKS0+cm9vdFZpZXdUb0NvbnRlbnRzKHBvaW50KTsKKyAgICAKKyAgICBmbG9hdCBn
cm93VGhyZXNob2xkID0gMDsKKyAgICBmbG9hdCBzaHJpbmtUaHJlc2hvbGQgPSAwOworICAgIFNl
bGVjdGlvbkZsYWdzIGZsYWdzID0gTm9uZTsKKyAgICAKKyAgICBzd2l0Y2ggKHN0YXRpY19jYXN0
PFNlbGVjdGlvblRvdWNoPih0b3VjaCkpIHsKKyAgICBjYXNlIFNlbGVjdGlvblRvdWNoOjpTdGFy
dGVkOgorICAgICAgICBjb21wdXRlRXhwYW5kQW5kU2hyaW5rVGhyZXNob2xkc0ZvckhhbmRsZShh
ZGp1c3RlZFBvaW50LCBzdGF0aWNfY2FzdDxTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbj4oaGFuZGxl
UG9zaXRpb24pLCBncm93VGhyZXNob2xkLCBzaHJpbmtUaHJlc2hvbGQpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFNlbGVjdGlvblRvdWNoOjpFbmRlZDoKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBTZWxlY3Rpb25Ub3VjaDo6TW92ZWQ6CisgICAgICAgIGNoYW5nZUJsb2NrU2VsZWN0aW9u
KGFkanVzdGVkUG9pbnQsIHN0YXRpY19jYXN0PFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uPihoYW5k
bGVQb3NpdGlvbiksIGdyb3dUaHJlc2hvbGQsIHNocmlua1RocmVzaG9sZCwgZmxhZ3MpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkVXBkYXRlQmxvY2tTZWxlY3Rpb25X
aXRoVG91Y2godG91Y2gsIHN0YXRpY19jYXN0PHVpbnQzMl90PihmbGFncyksIGdyb3dUaHJlc2hv
bGQsIHNocmlua1RocmVzaG9sZCkpOworfQorI2VuZGlmCiAKIHZvaWQgV2ViUGFnZTo6Y2xlYXJT
ZWxlY3Rpb24oKQogewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331945</attachid>
            <date>2018-01-22 11:33:02 -0800</date>
            <delta_ts>2018-01-22 12:55:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-181895-20180122113301.patch</filename>
            <type>text/plain</type>
            <size>34690</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjcyNTcpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE4LTAxLTE5ICBNZWdhbiBHYXJk
bmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgVGVtcG9yYXJpbHkgcmVz
dG9yZSBibG9jayBzZWxlY3Rpb24gY29kZSBjb25kaXRpb25hbGx5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODE4OTUKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzM2NTY3MzI1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFdlIG5lZWQgdG8gcmVzdG9yZSB0aGlzIGNvZGUgdGVtcG9yYXJpbHkgdG8gYXZv
aWQgYSBjcmFzaC4KKworICAgICAgICAqIFBsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAg
ICAgKC1bV0tDb250ZW50VmlldyBjaGFuZ2VCbG9ja1NlbGVjdGlvbldpdGhUb3VjaEF0OndpdGhT
ZWxlY3Rpb25Ub3VjaDpmb3JIYW5kbGU6XSk6CisKIDIwMTgtMDEtMTkgIE1lZ2FuIEdhcmRuZXIg
IDxtZWdhbl9nYXJkbmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBQcmVzZW50IFdLRmlsZVVwbG9h
ZFBhbmVsIG9uIGNvcnJlY3QgVmlld0NvbnRyb2xsZXIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCShyZXZpc2lvbiAyMjcwNzcpCisrKyBTb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaAkod29ya2luZyBjb3B5KQpAQCAtNTkwLDYg
KzU5MCwxNSBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBVSVdLR2VzdHVyZVR5CiBAcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGFzc2lnbikgVUlUYXBHZXN0dXJlUmVjb2duaXpl
ciAqc2luZ2xlVGFwR2VzdHVyZTsKIEBlbmQKIAorI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFY
X0FMTE9XRUQgPCAxMjAwMDAKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFVJV0tIYW5kbGVQ
b3NpdGlvbikgeworICAgIFVJV0tIYW5kbGVUb3AgPSAwLAorICAgIFVJV0tIYW5kbGVSaWdodCA9
IDEsCisgICAgVUlXS0hhbmRsZUJvdHRvbSA9IDIsCisgICAgVUlXS0hhbmRsZUxlZnQgPSAzLAor
fTsKKyNlbmRpZgorCiBAcHJvdG9jb2wgVUlXS0ludGVyYWN0aW9uVmlld1Byb3RvY29sCiAtICh2
b2lkKWNoYW5nZVNlbGVjdGlvbldpdGhHZXN0dXJlQXQ6KENHUG9pbnQpcG9pbnQgd2l0aEdlc3R1
cmU6KFVJV0tHZXN0dXJlVHlwZSlnZXN0dXJlVHlwZSB3aXRoU3RhdGU6KFVJR2VzdHVyZVJlY29n
bml6ZXJTdGF0ZSlzdGF0ZTsKIC0gKHZvaWQpY2hhbmdlU2VsZWN0aW9uV2l0aFRvdWNoQXQ6KENH
UG9pbnQpcG9pbnQgd2l0aFNlbGVjdGlvblRvdWNoOihVSVdLU2VsZWN0aW9uVG91Y2gpdG91Y2gg
YmFzZUlzU3RhcnQ6KEJPT0wpYmFzZUlzU3RhcnQgd2l0aEZsYWdzOihVSVdLU2VsZWN0aW9uRmxh
Z3MpZmxhZ3M7CkBAIC02MTQsNiArNjIzLDkgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwg
VUlXS0dlc3R1cmVUeQogLSAodm9pZClfY2FuY2VsTG9uZ1ByZXNzR2VzdHVyZVJlY29nbml6ZXI7
CiAKIEBvcHRpb25hbAorI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPCAxMjAw
MDAKKy0gKHZvaWQpY2hhbmdlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2hBdDooQ0dQb2ludClwb2lu
dCB3aXRoU2VsZWN0aW9uVG91Y2g6KFVJV0tTZWxlY3Rpb25Ub3VjaCl0b3VjaCBmb3JIYW5kbGU6
KFVJV0tIYW5kbGVQb3NpdGlvbiloYW5kbGU7CisjZW5kaWYKIAogLSAodm9pZCljbGVhclNlbGVj
dGlvbjsKIC0gKHZvaWQpcmVwbGFjZURpY3RhdGVkVGV4dDooTlNTdHJpbmcgKilvbGRUZXh0IHdp
dGhUZXh0OihOU1N0cmluZyAqKW5ld1RleHQ7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9QYWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUGFn
ZUNsaWVudC5oCShyZXZpc2lvbiAyMjcwNzcpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Q
YWdlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5Niw2ICsyOTYsOSBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBib29sIGludGVycHJldEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJk
RXZlbnQmLCBib29sIGlzQ2hhckV2ZW50KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHBvc2l0aW9u
SW5mb3JtYXRpb25EaWRDaGFuZ2UoY29uc3QgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRp
b24mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNhdmVJbWFnZVRvTGlicmFyeShSZWY8V2ViQ29y
ZTo6U2hhcmVkQnVmZmVyPiYmKSA9IDA7CisjaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxM
T1dFRCA8IDEyMDAwMAorICAgIHZpcnR1YWwgdm9pZCBkaWRVcGRhdGVCbG9ja1NlbGVjdGlvbldp
dGhUb3VjaCh1aW50MzJfdCB0b3VjaCwgdWludDMyX3QgZmxhZ3MsIGZsb2F0IGdyb3dUaHJlc2hv
bGQsIGZsb2F0IHNocmlua1RocmVzaG9sZCkgPSAwOworI2VuZGlmCiAgICAgdmlydHVhbCB2b2lk
IHNob3dQbGF5YmFja1RhcmdldFBpY2tlcihib29sIGhhc1ZpZGVvLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBlbGVtZW50UmVjdCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlRG91Ymxl
VGFwR2VzdHVyZXNEdXJpbmdUYXBJZk5lY2Vzc2FyeSh1aW50NjRfdCByZXF1ZXN0SUQpID0gMDsK
ICAgICB2aXJ0dWFsIGRvdWJsZSBtaW5pbXVtWm9vbVNjYWxlKCkgY29uc3QgPSAwOwpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDIyNzA3NykKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MzgsNiArNTM4LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2VsZWN0V2l0aEdlc3R1cmUoY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQsIFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSwgdWludDMyX3Qg
Z2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgYm9vbCBpc0ludGVyYWN0aW5nV2l0
aEFzc2lzdGVkTm9kZSwgV1RGOjpGdW5jdGlvbjx2b2lkIChjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCYsIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDMyX3QsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYm
KTsKICAgICB2b2lkIHVwZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVzKGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50LCB1aW50MzJfdCB0b3VjaGVzLCBib29sIGJhc2VJc1N0YXJ0LCBXVEY6OkZ1bmN0aW9u
PHZvaWQgKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMyX3QsIHVpbnQzMl90LCBDYWxs
YmFja0Jhc2U6OkVycm9yKT4mJik7CiAgICAgdm9pZCBzZWxlY3RXaXRoVHdvVG91Y2hlcyhjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCBmcm9tLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCB0bywgdWlu
dDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgV1RGOjpGdW5jdGlvbjx2
b2lkIChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDMy
X3QsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKKyNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01B
WF9BTExPV0VEIDwgMTIwMDAwCisgICAgdm9pZCB1cGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3Vj
aChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCwgdWludDMyX3QgdG91Y2gsIHVpbnQzMl90IGhhbmRs
ZVBvc2l0aW9uKTsKKyNlbmRpZgogICAgIHZvaWQgZXh0ZW5kU2VsZWN0aW9uKFdlYkNvcmU6OlRl
eHRHcmFudWxhcml0eSk7CiAgICAgdm9pZCBzZWxlY3RXb3JkQmFja3dhcmQoKTsKICAgICB2b2lk
IG1vdmVTZWxlY3Rpb25CeU9mZnNldChpbnQzMl90IG9mZnNldCwgV1RGOjpGdW5jdGlvbjx2b2lk
IChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CkBAIC01NjIsNiArNTY1LDkgQEAgcHVibGljOgog
ICAgIHZvaWQgc3RvcEludGVyYWN0aW9uKCk7CiAgICAgdm9pZCBwZXJmb3JtQWN0aW9uT25FbGVt
ZW50KHVpbnQzMl90IGFjdGlvbik7CiAgICAgdm9pZCBzYXZlSW1hZ2VUb0xpYnJhcnkoY29uc3Qg
U2hhcmVkTWVtb3J5OjpIYW5kbGUmIGltYWdlSGFuZGxlLCB1aW50NjRfdCBpbWFnZVNpemUpOwor
I2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPCAxMjAwMDAKKyAgICB2b2lkIGRp
ZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoKHVpbnQzMl90IHRvdWNoLCB1aW50MzJfdCBm
bGFncywgZmxvYXQgZ3Jvd1RocmVzaG9sZCwgZmxvYXQgc2hyaW5rVGhyZXNob2xkKTsKKyNlbmRp
ZgogICAgIHZvaWQgZm9jdXNOZXh0QXNzaXN0ZWROb2RlKGJvb2wgaXNGb3J3YXJkLCBXVEY6OkZ1
bmN0aW9uPHZvaWQgKENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKICAgICB2b2lkIHNldEFzc2lz
dGVkTm9kZVZhbHVlKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0QXNzaXN0ZWROb2RlVmFs
dWVBc051bWJlcihkb3VibGUpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjI3MDc3KQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBA
IC0xODIsNiArMTgyLDkgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAgICBTZWxlY3Rp
b25Db250ZXh0Q2FsbGJhY2soU3RyaW5nIHNlbGVjdGVkVGV4dCwgU3RyaW5nIGJlZm9yZVRleHQs
IFN0cmluZyBhZnRlclRleHQsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQogICAgIElu
dGVycHJldEtleUV2ZW50KHN0cnVjdCBXZWJLaXQ6OkVkaXRvclN0YXRlIHN0YXRlLCBib29sIGlz
Q2hhckV2ZW50KSAtPiAoYm9vbCBoYW5kbGVkKQogICAgIERpZFJlY2VpdmVQb3NpdGlvbkluZm9y
bWF0aW9uKHN0cnVjdCBXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uIGlu
Zm9ybWF0aW9uKQorI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPCAxMjAwMDAK
KyAgICBEaWRVcGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaCh1aW50MzJfdCB0b3VjaCwgdWlu
dDMyX3QgZmxhZ3MsIGZsb2F0IGdyb3dUaHJlc2hvbGQsIGZsb2F0IHNocmlua1RocmVzaG9sZCkK
KyNlbmRpZgogICAgIFNhdmVJbWFnZVRvTGlicmFyeShXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFu
ZGxlIGhhbmRsZSwgdWludDY0X3Qgc2l6ZSkKICAgICBTaG93UGxheWJhY2tUYXJnZXRQaWNrZXIo
Ym9vbCBoYXNWaWRlbywgV2ViQ29yZTo6SW50UmVjdCBlbGVtZW50UmVjdCkKICAgICBDb21taXRQ
b3RlbnRpYWxUYXBGYWlsZWQoKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1Bh
Z2VDbGllbnRJbXBsSU9TLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgJKHJldmlzaW9uIDIyNzA3NykKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzIsNiArMTMyLDkgQEAgcHJpdmF0ZToKICAgICBib29sIGludGVycHJldEtleUV2ZW50KGNvbnN0
IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBib29sIGlzQ2hhckV2ZW50KSBvdmVycmlkZTsKICAg
ICB2b2lkIHBvc2l0aW9uSW5mb3JtYXRpb25EaWRDaGFuZ2UoY29uc3QgSW50ZXJhY3Rpb25JbmZv
cm1hdGlvbkF0UG9zaXRpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHNhdmVJbWFnZVRvTGlicmFy
eShSZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmKSBvdmVycmlkZTsKKyNpZiBfX0lQSE9ORV9P
U19WRVJTSU9OX01BWF9BTExPV0VEIDwgMTIwMDAwCisgICAgdm9pZCBkaWRVcGRhdGVCbG9ja1Nl
bGVjdGlvbldpdGhUb3VjaCh1aW50MzJfdCB0b3VjaCwgdWludDMyX3QgZmxhZ3MsIGZsb2F0IGdy
b3dUaHJlc2hvbGQsIGZsb2F0IHNocmlua1RocmVzaG9sZCkgb3ZlcnJpZGU7CisjZW5kaWYKICAg
ICB2b2lkIHNob3dQbGF5YmFja1RhcmdldFBpY2tlcihib29sIGhhc1ZpZGVvLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiBlbGVtZW50UmVjdCkgb3ZlcnJpZGU7CiAKICAgICBib29sIGhhbmRsZVJ1
bk9wZW5QYW5lbChXZWJQYWdlUHJveHkqLCBXZWJGcmFtZVByb3h5KiwgQVBJOjpPcGVuUGFuZWxQ
YXJhbWV0ZXJzKiwgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eSopIG92ZXJyaWRlOwpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElP
Uy5tbQkocmV2aXNpb24gMjI3MDc3KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1Bh
Z2VDbGllbnRJbXBsSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NjEsNiArNTYxLDE0IEBAIHZv
aWQgUGFnZUNsaWVudEltcGw6OnN0b3BBc3Npc3RpbmdOb2RlKCkKIHsKICAgICBbbV9jb250ZW50
VmlldyBfc3RvcEFzc2lzdGluZ05vZGVdOwogfQorICAgIAorI2lmIF9fSVBIT05FX09TX1ZFUlNJ
T05fTUFYX0FMTE9XRUQgPCAxMjAwMDAKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRpZFVwZGF0ZUJs
b2NrU2VsZWN0aW9uV2l0aFRvdWNoKHVpbnQzMl90IHRvdWNoLCB1aW50MzJfdCBmbGFncywgZmxv
YXQgZ3Jvd1RocmVzaG9sZCwgZmxvYXQgc2hyaW5rVGhyZXNob2xkKQoreworICAgIFttX2NvbnRl
bnRWaWV3IF9kaWRVcGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaDooU2VsZWN0aW9uVG91Y2gp
dG91Y2ggd2l0aEZsYWdzOihTZWxlY3Rpb25GbGFncylmbGFncyBncm93VGhyZXNob2xkOmdyb3dU
aHJlc2hvbGQgc2hyaW5rVGhyZXNob2xkOnNocmlua1RocmVzaG9sZF07Cit9CisjZW5kaWYKKyAg
ICAKIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKGJvb2wg
aGFzVmlkZW8sIGNvbnN0IEludFJlY3QmIGVsZW1lbnRSZWN0KQogewpJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24u
aAkocmV2aXNpb24gMjI3MDc3KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29u
dGVudFZpZXdJbnRlcmFjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTUsNiArMjk1LDkgQEAg
Rk9SX0VBQ0hfV0tDT05URU5UVklFV19BQ1RJT04oREVDTEFSRV9XSwogLSAodm9pZClfZGlkRW5k
U2Nyb2xsaW5nT3Jab29taW5nOwogLSAodm9pZClfb3ZlcmZsb3dTY3JvbGxpbmdXaWxsQmVnaW47
CiAtICh2b2lkKV9vdmVyZmxvd1Njcm9sbGluZ0RpZEVuZDsKKyNpZiBfX0lQSE9ORV9PU19WRVJT
SU9OX01BWF9BTExPV0VEIDwgMTIwMDAwCistICh2b2lkKV9kaWRVcGRhdGVCbG9ja1NlbGVjdGlv
bldpdGhUb3VjaDooV2ViS2l0OjpTZWxlY3Rpb25Ub3VjaCl0b3VjaCB3aXRoRmxhZ3M6KFdlYktp
dDo6U2VsZWN0aW9uRmxhZ3MpZmxhZ3MgZ3Jvd1RocmVzaG9sZDooQ0dGbG9hdClncm93VGhyZXNo
b2xkIHNocmlua1RocmVzaG9sZDooQ0dGbG9hdClzaHJpbmtUaHJlc2hvbGQ7CisjZW5kaWYKIC0g
KHZvaWQpX3Nob3dQbGF5YmFja1RhcmdldFBpY2tlcjooQk9PTCloYXNWaWRlbyBmcm9tUmVjdDoo
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYpZWxlbWVudFJlY3Q7CiAtICh2b2lkKV9zaG93UnVuT3Bl
blBhbmVsOihBUEk6Ok9wZW5QYW5lbFBhcmFtZXRlcnMqKXBhcmFtZXRlcnMgcmVzdWx0TGlzdGVu
ZXI6KFdlYktpdDo6V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eSopbGlzdGVuZXI7CiAt
ICh2b2lkKWFjY2Vzc29yeURvbmU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
V0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0JKHJldmlzaW9uIDIyNzI0
NykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rp
b24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTI1MDIsNiArMjUwMiwyMiBAQCBzdGF0aWMgaW5saW5l
IFVJV0tTZWxlY3Rpb25GbGFncyB0b1VJV0tTCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFVJV0tT
ZWxlY3Rpb25GbGFncz4odWlGbGFncyk7CiB9CiAKKyNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01B
WF9BTExPV0VEIDwgMTIwMDAwCitzdGF0aWMgaW5saW5lIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9u
IHRvU2VsZWN0aW9uSGFuZGxlUG9zaXRpb24oVUlXS0hhbmRsZVBvc2l0aW9uIHBvc2l0aW9uKQor
eworICAgIHN3aXRjaCAocG9zaXRpb24pIHsKKyAgICBjYXNlIFVJV0tIYW5kbGVUb3A6CisgICAg
ICAgIHJldHVybiBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6VG9wOworICAgIGNhc2UgVUlXS0hh
bmRsZVJpZ2h0OgorICAgICAgICByZXR1cm4gU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OlJpZ2h0
OworICAgIGNhc2UgVUlXS0hhbmRsZUJvdHRvbToKKyAgICAgICAgcmV0dXJuIFNlbGVjdGlvbkhh
bmRsZVBvc2l0aW9uOjpCb3R0b207CisgICAgY2FzZSBVSVdLSGFuZGxlTGVmdDoKKyAgICAgICAg
cmV0dXJuIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpMZWZ0OworICAgIH0KK30KKyNlbmRpZgor
CiBzdGF0aWMgaW5saW5lIFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSB0b1dLVGV4dEdyYW51bGFy
aXR5KFVJVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQogewogICAgIHN3aXRjaCAoZ3JhbnVs
YXJpdHkpIHsKQEAgLTI1NjAsNiArMjU3NiwxNSBAQCBzdGF0aWMgdm9pZCBzZWxlY3Rpb25DaGFu
Z2VkV2l0aFRvdWNoKFdLCiAgICAgICAgIFsoVUlXS1RleHRJbnRlcmFjdGlvbkFzc2lzdGFudCAq
KVt2aWV3IGludGVyYWN0aW9uQXNzaXN0YW50XSBzZWxlY3Rpb25DaGFuZ2VkV2l0aFRvdWNoQXQ6
KENHUG9pbnQpcG9pbnQgd2l0aFNlbGVjdGlvblRvdWNoOnRvVUlXS1NlbGVjdGlvblRvdWNoKChT
ZWxlY3Rpb25Ub3VjaCl0b3VjaCkgd2l0aEZsYWdzOnN0YXRpY19jYXN0PFVJV0tTZWxlY3Rpb25G
bGFncz4oZmxhZ3MpXTsKIH0KIAorI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQg
PCAxMjAwMDAKKy0gKHZvaWQpX2RpZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoOihTZWxl
Y3Rpb25Ub3VjaCl0b3VjaCB3aXRoRmxhZ3M6KFNlbGVjdGlvbkZsYWdzKWZsYWdzIGdyb3dUaHJl
c2hvbGQ6KENHRmxvYXQpZ3Jvd1RocmVzaG9sZCBzaHJpbmtUaHJlc2hvbGQ6KENHRmxvYXQpc2hy
aW5rVGhyZXNob2xkCit7CisgICAgW193ZWJTZWxlY3Rpb25Bc3Npc3RhbnQgYmxvY2tTZWxlY3Rp
b25DaGFuZ2VkV2l0aFRvdWNoOnRvVUlXS1NlbGVjdGlvblRvdWNoKHRvdWNoKSB3aXRoRmxhZ3M6
dG9VSVdLU2VsZWN0aW9uRmxhZ3MoZmxhZ3MpIGdyb3dUaHJlc2hvbGQ6Z3Jvd1RocmVzaG9sZCBz
aHJpbmtUaHJlc2hvbGQ6c2hyaW5rVGhyZXNob2xkXTsKKyAgICBpZiAodG91Y2ggIT0gU2VsZWN0
aW9uVG91Y2g6OlN0YXJ0ZWQgJiYgdG91Y2ggIT0gU2VsZWN0aW9uVG91Y2g6Ok1vdmVkKQorICAg
ICAgICBfdXNpbmdHZXN0dXJlRm9yU2VsZWN0aW9uID0gTk87Cit9CisjZW5kaWYKKwogLSAoQk9P
TClfaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUKIHsKICAgICByZXR1cm4gX3RleHRTZWxl
Y3Rpb25Bc3Npc3RhbnQgIT0gbmlsOwpAQCAtMjYwNyw2ICsyNjMyLDE5IEBAIC0gKHZvaWQpY2hh
bmdlU2VsZWN0aW9uV2l0aFRvdWNoZXNGcm9tOigKICAgICB9KTsKIH0KIAorI2lmIF9fSVBIT05F
X09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPCAxMjAwMDAKKy0gKHZvaWQpY2hhbmdlQmxvY2tTZWxl
Y3Rpb25XaXRoVG91Y2hBdDooQ0dQb2ludClwb2ludCB3aXRoU2VsZWN0aW9uVG91Y2g6KFVJV0tT
ZWxlY3Rpb25Ub3VjaCl0b3VjaCBmb3JIYW5kbGU6KFVJV0tIYW5kbGVQb3NpdGlvbiloYW5kbGUK
K3sKKyAgICAvLyBUaGlzIHdhcyBvbmx5IHJlYWRkZWQgdG8gYXZvaWQgYSBjcmFzaCBkdWUgdG8g
aW5jb21iYXRhYmxpbHRpZXNlIHdpdGggY2VydGFpbiB2ZXJzaW9uIG9mIFVJS2l0LgorICAgIC8v
IFRoaXMgc2hvdWxkIGJlIHJlbW92ZWQgQVNBUC4KKyAgICAvLyBUaGUgc2VsZWN0aW9uIHdpbGwg
YmUgcHJvcGVybHkgdXBkYXRlZCB3aXRoIHRoZSBuZXh0IHVwZGF0ZSwgc2VsZWN0aW9uIHN0aWxs
IGZ1bmN0aW9ucworICAgIC8vIHdpdGhvdXQgdGhpcyBmdW5jdGlvbiBkb2luZyBhbnl0aGluZy4K
KyAgICAKKyAgICBfdXNpbmdHZXN0dXJlRm9yU2VsZWN0aW9uID0gWUVTOworICAgIF9wYWdlLT51
cGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaChXZWJDb3JlOjpJbnRQb2ludChwb2ludCksIHN0
YXRpY19jYXN0PHVpbnQzMl90Pih0b1NlbGVjdGlvblRvdWNoKHRvdWNoKSksIHN0YXRpY19jYXN0
PHVpbnQzMl90Pih0b1NlbGVjdGlvbkhhbmRsZVBvc2l0aW9uKGhhbmRsZSkpKTsKK30KKyNlbmRp
ZgorCiAtICh2b2lkKW1vdmVCeU9mZnNldDooTlNJbnRlZ2VyKW9mZnNldAogewogICAgIGlmICgh
b2Zmc2V0KQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlP
Uy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVBy
b3h5SU9TLm1tCShyZXZpc2lvbiAyMjcwNzcpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvV2ViUGFnZVByb3h5SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02NTEsNiArNjUxLDE4IEBA
IHZvaWQgV2ViUGFnZVByb3h5OjpzYXZlSW1hZ2VUb0xpYnJhcnkoY28KICAgICBhdXRvIGJ1ZmZl
ciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihzaGFy
ZWRNZW1vcnlCdWZmZXItPmRhdGEoKSksIGltYWdlU2l6ZSk7CiAgICAgbV9wYWdlQ2xpZW50LnNh
dmVJbWFnZVRvTGlicmFyeShXVEZNb3ZlKGJ1ZmZlcikpOwogfQorICAgIAorI2lmIF9fSVBIT05F
X09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPCAxMjAwMDAKK3ZvaWQgV2ViUGFnZVByb3h5Ojp1cGRh
dGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCBwb2ludCwg
dWludDMyX3QgdG91Y2gsIHVpbnQzMl90IGhhbmRsZVBvc2l0aW9uKQoreworICAgIG1fcHJvY2Vz
cy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6VXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2go
cG9pbnQsIHRvdWNoLCBoYW5kbGVQb3NpdGlvbiksIG1fcGFnZUlEKTsKK30KKyAgICAKK3ZvaWQg
V2ViUGFnZVByb3h5OjpkaWRVcGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaCh1aW50MzJfdCB0
b3VjaCwgdWludDMyX3QgZmxhZ3MsIGZsb2F0IGdyb3dUaHJlc2hvbGQsIGZsb2F0IHNocmlua1Ro
cmVzaG9sZCkKK3sKKyAgICBtX3BhZ2VDbGllbnQuZGlkVXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRo
VG91Y2godG91Y2gsIGZsYWdzLCBncm93VGhyZXNob2xkLCBzaHJpbmtUaHJlc2hvbGQpOworfQor
I2VuZGlmCiAKIHZvaWQgV2ViUGFnZVByb3h5OjphcHBsaWNhdGlvbkRpZEVudGVyQmFja2dyb3Vu
ZCgpCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
CShyZXZpc2lvbiAyMjcwNzcpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2OSw2ICs1NjksOSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBibHVyQXNzaXN0ZWROb2RlKCk7CiAgICAgdm9pZCBzZWxlY3RXaXRoR2VzdHVyZShjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQzMl90IGdyYW51bGFyaXR5LCB1aW50MzJfdCBnZXN0
dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCBib29sIGlzSW50ZXJhY3RpbmdXaXRoQXNz
aXN0ZWROb2RlLCBDYWxsYmFja0lEKTsKICAgICB2b2lkIHVwZGF0ZVNlbGVjdGlvbldpdGhUb3Vj
aGVzKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMyX3QgdG91Y2hlcywgYm9vbCBiYXNl
SXNTdGFydCwgQ2FsbGJhY2tJRCk7CisjaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dF
RCA8IDEyMDAwMAorICAgIHZvaWQgdXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2goY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmLCB1aW50MzJfdCB0b3VjaCwgdWludDMyX3QgaGFuZGxlUG9zaXRp
b24pOworI2VuZGlmCiAgICAgdm9pZCBzZWxlY3RXaXRoVHdvVG91Y2hlcyhjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgZnJvbSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHRvLCB1aW50MzJfdCBn
ZXN0dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCBDYWxsYmFja0lEKTsKICAgICB2b2lk
IGV4dGVuZFNlbGVjdGlvbih1aW50MzJfdCBncmFudWxhcml0eSk7CiAgICAgdm9pZCBzZWxlY3RX
b3JkQmFja3dhcmQoKTsKQEAgLTEwODUsNiArMTA4OCwxMiBAQCBwcml2YXRlOgogCiAgICAgc3Rh
dGljIHZvaWQgY29udmVydFNlbGVjdGlvblJlY3RzVG9Sb290VmlldyhXZWJDb3JlOjpGcmFtZVZp
ZXcqLCBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4mKTsKICAgICBSZWZQdHI8V2ViQ29y
ZTo6UmFuZ2U+IHJhbmdlRm9yV2ViU2VsZWN0aW9uQXRQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpJ
bnRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiYsIFNlbGVjdGlvbkZsYWdz
Jik7CisjaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA8IDEyMDAwMAorICAgIFJl
ZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2VGb3JCbG9ja0F0UG9pbnQoY29uc3QgV2ViQ29yZTo6
SW50UG9pbnQmKTsKKyAgICB2b2lkIGNvbXB1dGVFeHBhbmRBbmRTaHJpbmtUaHJlc2hvbGRzRm9y
SGFuZGxlKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb24s
IGZsb2F0JiBncm93VGhyZXNob2xkLCBmbG9hdCYgc2hyaW5rVGhyZXNob2xkKTsKKyAgICBSZWY8
V2ViQ29yZTo6UmFuZ2U+IGV4cGFuZGVkUmFuZ2VGcm9tSGFuZGxlKFdlYkNvcmU6OlJhbmdlJiwg
U2VsZWN0aW9uSGFuZGxlUG9zaXRpb24pOworICAgIFJlZjxXZWJDb3JlOjpSYW5nZT4gY29udHJh
Y3RlZFJhbmdlRnJvbUhhbmRsZShXZWJDb3JlOjpSYW5nZSYgY3VycmVudFJhbmdlLCBTZWxlY3Rp
b25IYW5kbGVQb3NpdGlvbiwgU2VsZWN0aW9uRmxhZ3MmKTsKKyNlbmRpZgogICAgIHZvaWQgZ2V0
QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24oQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mKTsKICAgICB2
b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHkoKTsKICAgICB2b2lkIGhhbmRsZVN5
bnRoZXRpY0NsaWNrKFdlYkNvcmU6Ok5vZGUqIG5vZGVSZXNwb25kaW5nVG9DbGljaywgY29uc3Qg
V2ViQ29yZTo6RmxvYXRQb2ludCYgbG9jYXRpb24pOwpAQCAtMTA5Myw2ICsxMTAyLDkgQEAgcHJp
dmF0ZToKICAgICB2b2lkIHJlc2V0VGV4dEF1dG9zaXppbmcoKTsKICAgICBXZWJDb3JlOjpWaXNp
YmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uSW5Gb2N1c2VkTm9kZUZvclBvaW50KGNvbnN0IFdl
YkNvcmU6OkZyYW1lJiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBib29sIGlzSW50ZXJhY3Rp
bmdXaXRoQXNzaXN0ZWROb2RlKTsKICAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlRm9y
R3JhbnVsYXJpdHlBdFBvaW50KFdlYkNvcmU6OkZyYW1lJiwgY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmLCB1aW50MzJfdCBncmFudWxhcml0eSwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVk
Tm9kZSk7CisjaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA8IDEyMDAwMAorICAg
IFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gY2hhbmdlQmxvY2tTZWxlY3Rpb24oY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmLCBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbiwgZmxvYXQmIGdyb3dUaHJlc2hv
bGQsIGZsb2F0JiBzaHJpbmtUaHJlc2hvbGQsIFNlbGVjdGlvbkZsYWdzJik7CisjZW5kaWYKICNl
bmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKSAmJiBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5t
ZXNzYWdlcy5pbgkocmV2aXNpb24gMjI3MDc3KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcs
OSBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIExlZ2FjeVJlY2VpdmVyIHsKICAgICBCbHVyQXNzaXN0
ZWROb2RlKCkKICAgICBTZWxlY3RXaXRoR2VzdHVyZShXZWJDb3JlOjpJbnRQb2ludCBwb2ludCwg
dWludDMyX3QgZ3JhbnVsYXJpdHksIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50MzJfdCBnZXN0
dXJlU3RhdGUsIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUsIFdlYktpdDo6Q2Fs
bGJhY2tJRCBjYWxsYmFja0lEKQogICAgIFVwZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVzKFdlYkNv
cmU6OkludFBvaW50IHBvaW50LCB1aW50MzJfdCB0b3VjaGVzLCBib29sIGJhc2VJc1N0YXJ0LCBX
ZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKKyNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01B
WF9BTExPV0VEIDwgMTIwMDAwCisgICAgVXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2goV2Vi
Q29yZTo6SW50UG9pbnQgcG9pbnQsIHVpbnQzMl90IHRvdWNoLCB1aW50MzJfdCBoYW5kbGVQb3Np
dGlvbikKKyNlbmRpZgogICAgIFNlbGVjdFdpdGhUd29Ub3VjaGVzKFdlYkNvcmU6OkludFBvaW50
IGZyb20sIFdlYkNvcmU6OkludFBvaW50IHRvLCB1aW50MzJfdCBnZXN0dXJlVHlwZSwgdWludDMy
X3QgZ2VzdHVyZVN0YXRlLCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICBFeHRl
bmRTZWxlY3Rpb24odWludDMyX3QgZ3JhbnVsYXJpdHkpCiAgICAgU2VsZWN0V29yZEJhY2t3YXJk
KCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9T
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9X
ZWJQYWdlSU9TLm1tCShyZXZpc2lvbiAyMjcwNzcpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTA1NSw2ICsx
MDU1LDM2NCBAQCBSZWZQdHI8UmFuZ2U+IFdlYlBhZ2U6OnJhbmdlRm9yV2ViU2VsZWN0CiAgICAg
cmV0dXJuIHJhbmdlLT5jb2xsYXBzZWQoKSA/IG51bGxwdHIgOiByYW5nZTsKIH0KIAorI2lmIF9f
SVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPCAxMjAwMDAKK3N0YXRpYyBib29sIGNhblNo
cmlua1RvVGV4dFNlbGVjdGlvbihSYW5nZSYgcmFuZ2UpCit7CisgICAgaWYgKHJhbmdlLnN0YXJ0
Q29udGFpbmVyKCkuaXNUZXh0Tm9kZSgpICYmIHJhbmdlLmVuZENvbnRhaW5lcigpLmlzVGV4dE5v
ZGUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGNhblNocmlua1RvVGV4dFNl
bGVjdGlvbihyYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpKTsKK30KK3N0YXRpYyBjb25z
dCBpbnQgbWF4SGl0VGVzdHMgPSAxMDsKKworc3RhdGljIGlubGluZSBmbG9hdCBkaXN0YW5jZUJl
dHdlZW5SZWN0c0ZvclBvc2l0aW9uKEludFJlY3QmIGZpcnN0LCBJbnRSZWN0JiBzZWNvbmQsIFNl
bGVjdGlvbkhhbmRsZVBvc2l0aW9uIGhhbmRsZVBvc2l0aW9uKQoreworICAgIHN3aXRjaCAoaGFu
ZGxlUG9zaXRpb24pIHsKKyAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpUb3A6Cisg
ICAgICAgIHJldHVybiBhYnMoZmlyc3QueSgpIC0gc2Vjb25kLnkoKSk7CisgICAgY2FzZSBTZWxl
Y3Rpb25IYW5kbGVQb3NpdGlvbjo6UmlnaHQ6CisgICAgICAgIHJldHVybiBhYnMoZmlyc3QubWF4
WCgpIC0gc2Vjb25kLm1heFgoKSk7CisgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6
Qm90dG9tOgorICAgICAgICByZXR1cm4gYWJzKGZpcnN0Lm1heFkoKSAtIHNlY29uZC5tYXhZKCkp
OworICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OkxlZnQ6CisgICAgICAgIHJldHVy
biBhYnMoZmlyc3QueCgpIC0gc2Vjb25kLngoKSk7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5l
IGJvb2wgcmVjdHNFc3NlbnRpYWxseVRoZVNhbWUoSW50UmVjdCYgZmlyc3QsIEludFJlY3QmIHNl
Y29uZCwgZmxvYXQgYWxsb3dhYmxlUGVyY2VudERpZmZlcmVuY2UpCit7CisgICAgY29uc3QgZmxv
YXQgbWluTWFnbml0dWRlUmF0aW8gPSAxLjAgLSBhbGxvd2FibGVQZXJjZW50RGlmZmVyZW5jZTsK
KyAgICBjb25zdCBmbG9hdCBtYXhEaXNwbGFjZW1lbnRSYXRpbyA9IGFsbG93YWJsZVBlcmNlbnRE
aWZmZXJlbmNlOworICAgIAorICAgIGZsb2F0IHhPcmlnaW5TaGlmdFJhdGlvID0gYWJzKGZpcnN0
LngoKSAtIHNlY29uZC54KCkpIC8gc3RkOjptaW4oZmlyc3Qud2lkdGgoKSwgc2Vjb25kLndpZHRo
KCkpOworICAgIGZsb2F0IHlPcmlnaW5TaGlmdFJhdGlvID0gYWJzKGZpcnN0LnkoKSAtIHNlY29u
ZC55KCkpIC8gc3RkOjptaW4oZmlyc3QuaGVpZ2h0KCksIHNlY29uZC5oZWlnaHQoKSk7CisgICAg
CisgICAgZmxvYXQgd2lkdGhSYXRpbyA9IHN0ZDo6bWluKGZpcnN0LndpZHRoKCkgLyBzZWNvbmQu
d2lkdGgoKSwgc2Vjb25kLndpZHRoKCkgLyBmaXJzdC53aWR0aCgpKTsKKyAgICBmbG9hdCBoZWln
aHRSYXRpbyA9IHN0ZDo6bWluKGZpcnN0LmhlaWdodCgpIC8gc2Vjb25kLmhlaWdodCgpLCBzZWNv
bmQuaGVpZ2h0KCkgLyBmaXJzdC5oZWlnaHQoKSk7CisgICAgcmV0dXJuICgod2lkdGhSYXRpbyA+
IG1pbk1hZ25pdHVkZVJhdGlvICYmIHhPcmlnaW5TaGlmdFJhdGlvIDwgbWF4RGlzcGxhY2VtZW50
UmF0aW8pICYmIChoZWlnaHRSYXRpbyA+IG1pbk1hZ25pdHVkZVJhdGlvICYmIHlPcmlnaW5TaGlm
dFJhdGlvIDwgbWF4RGlzcGxhY2VtZW50UmF0aW8pKTsKK30KKworc3RhdGljIGlubGluZSBSZWZQ
dHI8UmFuZ2U+IHVuaW9uRE9NUmFuZ2VzKFJhbmdlKiByYW5nZUEsIFJhbmdlKiByYW5nZUIpCit7
CisgICAgaWYgKCFyYW5nZUIpCisgICAgICAgIHJldHVybiByYW5nZUE7CisgICAgaWYgKCFyYW5n
ZUEpCisgICAgICAgIHJldHVybiByYW5nZUI7CisgICAgCisgICAgYXV0byBzdGFydFRvU3RhcnRD
b21wYXJpc29uID0gcmFuZ2VBLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6OlNUQVJUX1RP
X1NUQVJULCAqcmFuZ2VCKTsKKyAgICBpZiAoc3RhcnRUb1N0YXJ0Q29tcGFyaXNvbi5oYXNFeGNl
cHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgYXV0byBlbmRUb0Vu
ZENvbXBhcmlzb24gPSByYW5nZUEtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5nZTo6RU5EX1RP
X0VORCwgKnJhbmdlQik7CisgICAgaWYgKGVuZFRvRW5kQ29tcGFyaXNvbi5oYXNFeGNlcHRpb24o
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgYXV0byogc3RhcnQgPSBzdGFy
dFRvU3RhcnRDb21wYXJpc29uLnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDw9IDAgPyByYW5nZUEgOiBy
YW5nZUI7CisgICAgYXV0byogZW5kID0gZW5kVG9FbmRDb21wYXJpc29uLnJlbGVhc2VSZXR1cm5W
YWx1ZSgpIDw9IDAgPyByYW5nZUIgOiByYW5nZUE7CisgICAgCisgICAgcmV0dXJuIFJhbmdlOjpj
cmVhdGUocmFuZ2VBLT5vd25lckRvY3VtZW50KCksICZzdGFydC0+c3RhcnRDb250YWluZXIoKSwg
c3RhcnQtPnN0YXJ0T2Zmc2V0KCksICZlbmQtPmVuZENvbnRhaW5lcigpLCBlbmQtPmVuZE9mZnNl
dCgpKTsKK30KKworc3RhdGljIGlubGluZSBJbnRQb2ludCBjb21wdXRlRWRnZUNlbnRlcihjb25z
dCBJbnRSZWN0JiBib3gsIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uIGhhbmRsZVBvc2l0aW9uKQor
eworICAgIHN3aXRjaCAoaGFuZGxlUG9zaXRpb24pIHsKKyAgICBjYXNlIFNlbGVjdGlvbkhhbmRs
ZVBvc2l0aW9uOjpUb3A6CisgICAgICAgIHJldHVybiBJbnRQb2ludChib3gueCgpICsgYm94Lndp
ZHRoKCkgLyAyLCBib3gueSgpKTsKKyAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpS
aWdodDoKKyAgICAgICAgcmV0dXJuIEludFBvaW50KGJveC5tYXhYKCksIGJveC55KCkgKyBib3gu
aGVpZ2h0KCkgLyAyKTsKKyAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpCb3R0b206
CisgICAgICAgIHJldHVybiBJbnRQb2ludChib3gueCgpICsgYm94LndpZHRoKCkgLyAyLCBib3gu
bWF4WSgpKTsKKyAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpMZWZ0OgorICAgICAg
ICByZXR1cm4gSW50UG9pbnQoYm94LngoKSwgYm94LnkoKSArIGJveC5oZWlnaHQoKSAvIDIpOwor
ICAgIH0KK30KKworUmVmPFJhbmdlPiBXZWJQYWdlOjpleHBhbmRlZFJhbmdlRnJvbUhhbmRsZShS
YW5nZSYgY3VycmVudFJhbmdlLCBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbiBoYW5kbGVQb3NpdGlv
bikKK3sKKyAgICBJbnRSZWN0IGN1cnJlbnRCb3ggPSBzZWxlY3Rpb25Cb3hGb3JSYW5nZSgmY3Vy
cmVudFJhbmdlKTsKKyAgICBJbnRQb2ludCBlZGdlQ2VudGVyID0gY29tcHV0ZUVkZ2VDZW50ZXIo
Y3VycmVudEJveCwgaGFuZGxlUG9zaXRpb24pOworICAgIHN0YXRpYyBjb25zdCBmbG9hdCBtYXhE
aXN0YW5jZSA9IDEwMDA7CisgICAgY29uc3QgZmxvYXQgbXVsdGlwbGUgPSBwb3dmKG1heERpc3Rh
bmNlLCAxLjAgLyAobWF4SGl0VGVzdHMgLSAxKSk7CisgICAgZmxvYXQgZGlzdGFuY2UgPSAxOwor
ICAgIAorICAgIFJlZlB0cjxSYW5nZT4gYmVzdFJhbmdlOworICAgIEludFJlY3QgYmVzdFJlY3Q7
CisgICAgCisgICAgd2hpbGUgKGRpc3RhbmNlIDwgbWF4RGlzdGFuY2UpIHsKKyAgICAgICAgaWYg
KGJlc3RSYW5nZSkgeworICAgICAgICAgICAgaWYgKGRpc3RhbmNlQmV0d2VlblJlY3RzRm9yUG9z
aXRpb24oYmVzdFJlY3QsIGN1cnJlbnRCb3gsIGhhbmRsZVBvc2l0aW9uKSA8IGRpc3RhbmNlKSB7
CisgICAgICAgICAgICAgICAgLy8gQnJlYWsgZWFybHksIHdlJ3JlIHVubGlrZWx5IHRvIGRvIGFu
eSBiZXR0ZXIuCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIEludFBvaW50IHRlc3RQb2ludCA9IGVkZ2VDZW50ZXI7Cisg
ICAgICAgIHN3aXRjaCAoaGFuZGxlUG9zaXRpb24pIHsKKyAgICAgICAgY2FzZSBTZWxlY3Rpb25I
YW5kbGVQb3NpdGlvbjo6VG9wOgorICAgICAgICAgICAgdGVzdFBvaW50Lm1vdmUoMCwgLWRpc3Rh
bmNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBv
c2l0aW9uOjpSaWdodDoKKyAgICAgICAgICAgIHRlc3RQb2ludC5tb3ZlKGRpc3RhbmNlLCAwKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9u
OjpCb3R0b206CisgICAgICAgICAgICB0ZXN0UG9pbnQubW92ZSgwLCBkaXN0YW5jZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6TGVm
dDoKKyAgICAgICAgICAgIHRlc3RQb2ludC5tb3ZlKC1kaXN0YW5jZSwgMCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZGlzdGFuY2UgPSBjZWlsZihk
aXN0YW5jZSAqIG11bHRpcGxlKTsKKyAgICAgICAgCisgICAgICAgIFJlZlB0cjxSYW5nZT4gbmV3
UmFuZ2U7CisgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VBdFBvc2l0aW9uID0gcmFuZ2VGb3JC
bG9ja0F0UG9pbnQodGVzdFBvaW50KTsKKyAgICAgICAgaWYgKCFyYW5nZUF0UG9zaXRpb24gfHwg
JmN1cnJlbnRSYW5nZS5vd25lckRvY3VtZW50KCkgIT0gJnJhbmdlQXRQb3NpdGlvbi0+b3duZXJE
b2N1bWVudCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBpZiAo
cmFuZ2VBdFBvc2l0aW9uLT5jb250YWlucyhjdXJyZW50UmFuZ2UpKQorICAgICAgICAgICAgbmV3
UmFuZ2UgPSByYW5nZUF0UG9zaXRpb247CisgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRSYW5nZS5j
b250YWlucygqcmFuZ2VBdFBvc2l0aW9uLmdldCgpKSkKKyAgICAgICAgICAgIG5ld1JhbmdlID0g
JmN1cnJlbnRSYW5nZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmV3UmFuZ2UgPSB1bmlv
bkRPTVJhbmdlcygmY3VycmVudFJhbmdlLCByYW5nZUF0UG9zaXRpb24uZ2V0KCkpOworICAgICAg
ICAKKyAgICAgICAgSW50UmVjdCBjb3B5UmVjdCA9IHNlbGVjdGlvbkJveEZvclJhbmdlKG5ld1Jh
bmdlLmdldCgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIElzIGl0IGRpZmZlcmVudCBhbmQgYmln
Z2VyIHRoYW4gdGhlIGN1cnJlbnQ/CisgICAgICAgIGJvb2wgaXNCZXR0ZXJDaG9pY2UgPSAhKHJl
Y3RzRXNzZW50aWFsbHlUaGVTYW1lKGNvcHlSZWN0LCBjdXJyZW50Qm94LCAuMDUpKTsKKyAgICAg
ICAgaWYgKGlzQmV0dGVyQ2hvaWNlKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGhhbmRsZVBvc2l0
aW9uKSB7CisgICAgICAgICAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpUb3A6Cisg
ICAgICAgICAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpCb3R0b206CisgICAgICAg
ICAgICAgICAgaXNCZXR0ZXJDaG9pY2UgPSAoY29weVJlY3QuaGVpZ2h0KCkgPiBjdXJyZW50Qm94
LmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU2Vs
ZWN0aW9uSGFuZGxlUG9zaXRpb246OlJpZ2h0OgorICAgICAgICAgICAgY2FzZSBTZWxlY3Rpb25I
YW5kbGVQb3NpdGlvbjo6TGVmdDoKKyAgICAgICAgICAgICAgICBpc0JldHRlckNob2ljZSA9IChj
b3B5UmVjdC53aWR0aCgpID4gY3VycmVudEJveC53aWR0aCgpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBpZiAoYmVzdFJhbmdlICYmIGlzQmV0dGVyQ2hvaWNlKSB7CisgICAgICAgICAgICAv
LyBGdXJ0aGVyb3JlLCBpcyBpdCBzbWFsbGVyIHRoYW4gdGhlIGJlc3Qgd2UndmUgZm91bmQgc28g
ZmFyPworICAgICAgICAgICAgc3dpdGNoIChoYW5kbGVQb3NpdGlvbikgeworICAgICAgICAgICAg
Y2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6VG9wOgorICAgICAgICAgICAgY2FzZSBTZWxl
Y3Rpb25IYW5kbGVQb3NpdGlvbjo6Qm90dG9tOgorICAgICAgICAgICAgICAgIGlzQmV0dGVyQ2hv
aWNlID0gKGNvcHlSZWN0LmhlaWdodCgpIDwgYmVzdFJlY3QuaGVpZ2h0KCkpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6
UmlnaHQ6CisgICAgICAgICAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpMZWZ0Ogor
ICAgICAgICAgICAgICAgIGlzQmV0dGVyQ2hvaWNlID0gKGNvcHlSZWN0LndpZHRoKCkgPCBiZXN0
UmVjdC53aWR0aCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGlzQmV0dGVyQ2hvaWNlKSB7CisgICAgICAg
ICAgICBiZXN0UmFuZ2UgPSBuZXdSYW5nZTsKKyAgICAgICAgICAgIGJlc3RSZWN0ID0gY29weVJl
Y3Q7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKGJlc3RSYW5nZSkKKyAgICAgICAg
cmV0dXJuIGJlc3RSYW5nZS5yZWxlYXNlTm9uTnVsbCgpOworICAgIAorICAgIHJldHVybiBjdXJy
ZW50UmFuZ2U7Cit9CisKK1JlZjxSYW5nZT4gV2ViUGFnZTo6Y29udHJhY3RlZFJhbmdlRnJvbUhh
bmRsZShSYW5nZSYgY3VycmVudFJhbmdlLCBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbiBoYW5kbGVQ
b3NpdGlvbiwgU2VsZWN0aW9uRmxhZ3MmIGZsYWdzKQoreworICAgIC8vIFNocmlua2luZyB3aXRo
IGEgYmFzZSBhbmQgZXh0ZW50IHdpbGwgYWx3YXlzIGdpdmUgYmV0dGVyIHJlc3VsdHMuIElmIHdl
IG9ubHkgaGF2ZSBhIHNpbmdsZSBlbGVtZW50LAorICAgIC8vIHNlZSBpZiB3ZSBjYW4gYnJlYWsg
dGhhdCBkb3duIHRvIGEgYmFzZSBhbmQgZXh0ZW50LiBTaHJpbmtpbmcgYmFzZSBhbmQgZXh0ZW50
IGlzIGNvbXBhcmF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkLgorICAgIC8vIFNocmlua2luZyBkb3du
IHRvIGFub3RoZXIgZWxlbWVudCBpcyB1bmxpa2VseSB0byBtb3ZlIGp1c3Qgb25lIGVkZ2UsIGJ1
dCB3ZSBjYW4gdHJ5IHRoYXQgYXMgYSBmYWxsYmFjay4KKyAgICAKKyAgICBJbnRSZWN0IGN1cnJl
bnRCb3ggPSBzZWxlY3Rpb25Cb3hGb3JSYW5nZSgmY3VycmVudFJhbmdlKTsKKyAgICBJbnRQb2lu
dCBlZGdlQ2VudGVyID0gY29tcHV0ZUVkZ2VDZW50ZXIoY3VycmVudEJveCwgaGFuZGxlUG9zaXRp
b24pOworICAgIAorICAgIGZsb2F0IG1heERpc3RhbmNlOworICAgIAorICAgIHN3aXRjaCAoaGFu
ZGxlUG9zaXRpb24pIHsKKyAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpUb3A6Cisg
ICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6Qm90dG9tOgorICAgICAgICBtYXhEaXN0
YW5jZSA9IGN1cnJlbnRCb3guaGVpZ2h0KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2Vs
ZWN0aW9uSGFuZGxlUG9zaXRpb246OlJpZ2h0OgorICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9z
aXRpb246OkxlZnQ6CisgICAgICAgIG1heERpc3RhbmNlID0gY3VycmVudEJveC53aWR0aCgpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgY29uc3QgZmxvYXQgbXVsdGlwbGUgPSBw
b3dmKG1heERpc3RhbmNlIC0gMSwgMS4wIC8gKG1heEhpdFRlc3RzIC0gMSkpOworICAgIGZsb2F0
IGRpc3RhbmNlID0gMTsKKyAgICBSZWZQdHI8UmFuZ2U+IGJlc3RSYW5nZTsKKyAgICBJbnRSZWN0
IGJlc3RSZWN0OworICAgIAorICAgIHdoaWxlIChkaXN0YW5jZSA8IG1heERpc3RhbmNlKSB7Cisg
ICAgICAgIGlmIChiZXN0UmFuZ2UpIHsKKyAgICAgICAgICAgIGZsb2F0IHNocmFua0Rpc3RhbmNl
OworICAgICAgICAgICAgc3dpdGNoIChoYW5kbGVQb3NpdGlvbikgeworICAgICAgICAgICAgY2Fz
ZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6VG9wOgorICAgICAgICAgICAgY2FzZSBTZWxlY3Rp
b25IYW5kbGVQb3NpdGlvbjo6Qm90dG9tOgorICAgICAgICAgICAgICAgIHNocmFua0Rpc3RhbmNl
ID0gYWJzKGN1cnJlbnRCb3guaGVpZ2h0KCkgLSBiZXN0UmVjdC5oZWlnaHQoKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9u
OjpSaWdodDoKKyAgICAgICAgICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OkxlZnQ6
CisgICAgICAgICAgICAgICAgc2hyYW5rRGlzdGFuY2UgPSBhYnMoY3VycmVudEJveC53aWR0aCgp
IC0gYmVzdFJlY3Qud2lkdGgoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoc2hyYW5rRGlzdGFuY2UgPiBkaXN0YW5jZSkgeworICAgICAg
ICAgICAgICAgIC8vIENlcnRhaW5seSBub3QgZ29pbmcgdG8gZG8gYW55IGJldHRlciB0aGFuIHRo
YXQuCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIEludFBvaW50IHRlc3RQb2ludCA9IGVkZ2VDZW50ZXI7CisgICAgICAg
IHN3aXRjaCAoaGFuZGxlUG9zaXRpb24pIHsKKyAgICAgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQ
b3NpdGlvbjo6VG9wOgorICAgICAgICAgICAgdGVzdFBvaW50Lm1vdmUoMCwgZGlzdGFuY2UpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246
OlJpZ2h0OgorICAgICAgICAgICAgdGVzdFBvaW50Lm1vdmUoLWRpc3RhbmNlLCAwKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpCb3R0
b206CisgICAgICAgICAgICB0ZXN0UG9pbnQubW92ZSgwLCAtZGlzdGFuY2UpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OkxlZnQ6Cisg
ICAgICAgICAgICB0ZXN0UG9pbnQubW92ZShkaXN0YW5jZSwgMCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZGlzdGFuY2UgKj0gbXVsdGlwbGU7Cisg
ICAgICAgIAorICAgICAgICBSZWZQdHI8UmFuZ2U+IG5ld1JhbmdlID0gcmFuZ2VGb3JCbG9ja0F0
UG9pbnQodGVzdFBvaW50KTsKKyAgICAgICAgaWYgKCFuZXdSYW5nZSB8fCAmbmV3UmFuZ2UtPm93
bmVyRG9jdW1lbnQoKSAhPSAmY3VycmVudFJhbmdlLm93bmVyRG9jdW1lbnQoKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgaWYgKGhhbmRsZVBvc2l0aW9uID09IFNl
bGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpUb3AgfHwgaGFuZGxlUG9zaXRpb24gPT0gU2VsZWN0aW9u
SGFuZGxlUG9zaXRpb246OkxlZnQpCisgICAgICAgICAgICBuZXdSYW5nZSA9IFJhbmdlOjpjcmVh
dGUobmV3UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKSwgbmV3UmFuZ2UtPmVuZFBv
c2l0aW9uKCksIGN1cnJlbnRSYW5nZS5lbmRQb3NpdGlvbigpKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbmV3UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG5ld1JhbmdlLT5zdGFydENvbnRhaW5l
cigpLmRvY3VtZW50KCksIGN1cnJlbnRSYW5nZS5zdGFydFBvc2l0aW9uKCksIG5ld1JhbmdlLT5z
dGFydFBvc2l0aW9uKCkpOworICAgICAgICAKKyAgICAgICAgSW50UmVjdCBjb3B5UmVjdCA9IHNl
bGVjdGlvbkJveEZvclJhbmdlKG5ld1JhbmdlLmdldCgpKTsKKyAgICAgICAgaWYgKGNvcHlSZWN0
LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgLy8gSWYgdGhlIG5ldyByYW5nZSBpcyBhbiBlbXB0
eSByZWN0YW5nbGUsIHdlIHRyeSB0aGUgYmxvY2sgYXQgdGhlIGN1cnJlbnQgcG9pbnQKKyAgICAg
ICAgICAgIC8vIGFuZCBzZWUgaWYgdGhhdCBoYXMgYSByZWN0YW5nbGUgdGhhdCBpcyBhIGJldHRl
ciBjaG9pY2UuCisgICAgICAgICAgICBuZXdSYW5nZSA9IHJhbmdlRm9yQmxvY2tBdFBvaW50KHRl
c3RQb2ludCk7CisgICAgICAgICAgICBjb3B5UmVjdCA9IHNlbGVjdGlvbkJveEZvclJhbmdlKG5l
d1JhbmdlLmdldCgpKTsKKyAgICAgICAgfQorICAgICAgICBib29sIGlzQmV0dGVyQ2hvaWNlOwor
ICAgICAgICBzd2l0Y2ggKGhhbmRsZVBvc2l0aW9uKSB7CisgICAgICAgIGNhc2UgU2VsZWN0aW9u
SGFuZGxlUG9zaXRpb246OlRvcDoKKyAgICAgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlv
bjo6Qm90dG9tOgorICAgICAgICAgICAgaXNCZXR0ZXJDaG9pY2UgPSAoY29weVJlY3QuaGVpZ2h0
KCkgPCBjdXJyZW50Qm94LmhlaWdodCgpKTsKKyAgICAgICAgICAgIGlmIChjb3B5UmVjdC5oZWln
aHQoKSA9PSBjdXJyZW50Qm94LmhlaWdodCgpKQorICAgICAgICAgICAgICAgIGlzQmV0dGVyQ2hv
aWNlID0gY2FuU2hyaW5rVG9UZXh0U2VsZWN0aW9uKCpuZXdSYW5nZS5nZXQoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6TGVmdDoK
KyAgICAgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6UmlnaHQ6CisgICAgICAgICAg
ICBpc0JldHRlckNob2ljZSA9IChjb3B5UmVjdC53aWR0aCgpID4gYmVzdFJlY3Qud2lkdGgoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaXNCZXR0
ZXJDaG9pY2UgPSBpc0JldHRlckNob2ljZSAmJiAhYXJlUmFuZ2VzRXF1YWwobmV3UmFuZ2UuZ2V0
KCksICZjdXJyZW50UmFuZ2UpOworICAgICAgICBpZiAoYmVzdFJhbmdlICYmIGlzQmV0dGVyQ2hv
aWNlKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGhhbmRsZVBvc2l0aW9uKSB7CisgICAgICAgICAg
ICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpUb3A6CisgICAgICAgICAgICBjYXNlIFNl
bGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpCb3R0b206CisgICAgICAgICAgICAgICAgaXNCZXR0ZXJD
aG9pY2UgPSAoY29weVJlY3QuaGVpZ2h0KCkgPiBiZXN0UmVjdC5oZWlnaHQoKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9u
OjpMZWZ0OgorICAgICAgICAgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6UmlnaHQ6
CisgICAgICAgICAgICAgICAgaXNCZXR0ZXJDaG9pY2UgPSAoY29weVJlY3Qud2lkdGgoKSA+IGJl
c3RSZWN0LndpZHRoKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGlmIChpc0JldHRlckNob2ljZSkgeworICAgICAgICAgICAgYmVz
dFJhbmdlID0gbmV3UmFuZ2U7CisgICAgICAgICAgICBiZXN0UmVjdCA9IGNvcHlSZWN0OworICAg
ICAgICB9CisgICAgICAgIAorICAgIH0KKyAgICAKKyAgICBpZiAoIWJlc3RSYW5nZSkKKyAgICAg
ICAgYmVzdFJhbmdlID0gJmN1cnJlbnRSYW5nZTsKKyAgICAKKyAgICAvLyBJZiB3ZSBjYW4gc2hy
aW5rIGRvd24gdG8gdGV4dCBvbmx5LCB0aGUgb25seSByZWFzb24gd2Ugd291bGRuJ3QgaXMgdGhh
dAorICAgIC8vIHRoZXJlIGFyZSBtdWx0aXBsZSBzdWItZWxlbWVudCBibG9ja3MgYmVuZWF0aCB1
cy4gSWYgd2UgZGlkbid0IGZpbmQKKyAgICAvLyBtdWx0aXBsZSBzdWItZWxlbWVudCBibG9ja3Ms
IGRvbid0IHNocmluayB0byBhIHN1Yi1lbGVtZW50IGJsb2NrLgorICAgIAorICAgIGlmIChjYW5T
aHJpbmtUb1RleHRTZWxlY3Rpb24oKmJlc3RSYW5nZS5nZXQoKSkpCisgICAgICAgIGZsYWdzID0g
Tm9uZTsKKyAgICAKKyAgICByZXR1cm4gYmVzdFJhbmdlLnJlbGVhc2VOb25OdWxsKCk7Cit9CisK
K3ZvaWQgV2ViUGFnZTo6Y29tcHV0ZUV4cGFuZEFuZFNocmlua1RocmVzaG9sZHNGb3JIYW5kbGUo
Y29uc3QgSW50UG9pbnQmIHBvaW50LCBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbiBoYW5kbGVQb3Np
dGlvbiwgZmxvYXQmIGdyb3dUaHJlc2hvbGQsIGZsb2F0JiBzaHJpbmtUaHJlc2hvbGQpCit7Cisg
ICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWlu
RnJhbWUoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IGN1cnJlbnRSYW5nZSA9IG1fY3VycmVudEJsb2Nr
U2VsZWN0aW9uID8gbV9jdXJyZW50QmxvY2tTZWxlY3Rpb24uZ2V0KCkgOiBmcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIAorICAgIGlmICghY3Vy
cmVudFJhbmdlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUmVmPFJhbmdlPiBleHBhbmRl
ZFJhbmdlID0gZXhwYW5kZWRSYW5nZUZyb21IYW5kbGUoKmN1cnJlbnRSYW5nZSwgaGFuZGxlUG9z
aXRpb24pOworICAgIFNlbGVjdGlvbkZsYWdzIGZsYWdzOworICAgIFJlZlB0cjxSYW5nZT4gY29u
dHJhY3RlZFJhbmdlID0gY29udHJhY3RlZFJhbmdlRnJvbUhhbmRsZSgqY3VycmVudFJhbmdlLCBo
YW5kbGVQb3NpdGlvbiwgZmxhZ3MpOworICAgIAorICAgIEludFJlY3QgY3VycmVudEJvdW5kcyA9
IHNlbGVjdGlvbkJveEZvclJhbmdlKGN1cnJlbnRSYW5nZS5nZXQoKSk7CisgICAgSW50UmVjdCBl
eHBhbmRlZEJvdW5kcyA9IHNlbGVjdGlvbkJveEZvclJhbmdlKGV4cGFuZGVkUmFuZ2UucHRyKCkp
OworICAgIEludFJlY3QgY29udHJhY3RlZEJvdW5kcyA9IHNlbGVjdGlvbkJveEZvclJhbmdlKGNv
bnRyYWN0ZWRSYW5nZS5nZXQoKSk7CisgICAgCisgICAgZmxvYXQgY3VycmVudDsKKyAgICBmbG9h
dCBleHBhbmRlZDsKKyAgICBmbG9hdCBjb250cmFjdGVkOworICAgIGZsb2F0IG1heFRocmVzaG9s
ZDsKKyAgICBmbG9hdCBtaW5UaHJlc2hvbGQ7CisgICAgCisgICAgc3dpdGNoIChoYW5kbGVQb3Np
dGlvbikgeworICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OlRvcDogeworICAgICAg
ICBjdXJyZW50ID0gY3VycmVudEJvdW5kcy55KCk7CisgICAgICAgIGV4cGFuZGVkID0gZXhwYW5k
ZWRCb3VuZHMueSgpOworICAgICAgICBjb250cmFjdGVkID0gY29udHJhY3RlZEJvdW5kcy55KCk7
CisgICAgICAgIG1heFRocmVzaG9sZCA9IEZMVF9NSU47CisgICAgICAgIG1pblRocmVzaG9sZCA9
IEZMVF9NQVg7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFNlbGVjdGlvbkhhbmRs
ZVBvc2l0aW9uOjpSaWdodDogeworICAgICAgICBjdXJyZW50ID0gY3VycmVudEJvdW5kcy5tYXhY
KCk7CisgICAgICAgIGV4cGFuZGVkID0gZXhwYW5kZWRCb3VuZHMubWF4WCgpOworICAgICAgICBj
b250cmFjdGVkID0gY29udHJhY3RlZEJvdW5kcy5tYXhYKCk7CisgICAgICAgIG1heFRocmVzaG9s
ZCA9IEZMVF9NQVg7CisgICAgICAgIG1pblRocmVzaG9sZCA9IEZMVF9NSU47CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpCb3R0b206IHsK
KyAgICAgICAgY3VycmVudCA9IGN1cnJlbnRCb3VuZHMubWF4WSgpOworICAgICAgICBleHBhbmRl
ZCA9IGV4cGFuZGVkQm91bmRzLm1heFkoKTsKKyAgICAgICAgY29udHJhY3RlZCA9IGNvbnRyYWN0
ZWRCb3VuZHMubWF4WSgpOworICAgICAgICBtYXhUaHJlc2hvbGQgPSBGTFRfTUFYOworICAgICAg
ICBtaW5UaHJlc2hvbGQgPSBGTFRfTUlOOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fz
ZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6TGVmdDogeworICAgICAgICBjdXJyZW50ID0gY3Vy
cmVudEJvdW5kcy54KCk7CisgICAgICAgIGV4cGFuZGVkID0gZXhwYW5kZWRCb3VuZHMueCgpOwor
ICAgICAgICBjb250cmFjdGVkID0gY29udHJhY3RlZEJvdW5kcy54KCk7CisgICAgICAgIG1heFRo
cmVzaG9sZCA9IEZMVF9NSU47CisgICAgICAgIG1pblRocmVzaG9sZCA9IEZMVF9NQVg7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICB9CisgICAgCisgICAgc3RhdGljIGNvbnN0IGZsb2F0IGZy
YWN0aW9uVG9Hcm93ID0gMC4zOworICAgIAorICAgIGdyb3dUaHJlc2hvbGQgPSBjdXJyZW50ICsg
KGV4cGFuZGVkIC0gY3VycmVudCkgKiBmcmFjdGlvblRvR3JvdzsKKyAgICBzaHJpbmtUaHJlc2hv
bGQgPSBjdXJyZW50ICsgKGNvbnRyYWN0ZWQgLSBjdXJyZW50KSAqICgxIC0gZnJhY3Rpb25Ub0dy
b3cpOworICAgIGlmIChhcmVSYW5nZXNFcXVhbChleHBhbmRlZFJhbmdlLnB0cigpLCBjdXJyZW50
UmFuZ2UuZ2V0KCkpKQorICAgICAgICBncm93VGhyZXNob2xkID0gbWF4VGhyZXNob2xkOworICAg
IAorfQorI2VuZGlmCisKIHZvaWQgV2ViUGFnZTo6c2VsZWN0V2l0aEdlc3R1cmUoY29uc3QgSW50
UG9pbnQmIHBvaW50LCB1aW50MzJfdCBncmFudWxhcml0eSwgdWludDMyX3QgZ2VzdHVyZVR5cGUs
IHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEFzc2lzdGVkTm9k
ZSwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogewogICAgIGF1dG8mIGZyYW1lID0gbV9wYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKQEAgLTEyNjksNiArMTYyNyw4
OSBAQCBzdGF0aWMgUmVmUHRyPFJhbmdlPiByYW5nZUF0V29yZEJvdW5kYXJ5CiAKICAgICByZXR1
cm4gKGJhc2UgPCBleHRlbnQpID8gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUtPmRvY3VtZW50KCksIGJh
c2UsIGV4dGVudCkgOiBSYW5nZTo6Y3JlYXRlKCpmcmFtZS0+ZG9jdW1lbnQoKSwgZXh0ZW50LCBi
YXNlKTsKIH0KKyAgICAKKyNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01BWF9BTExPV0VEIDwgMTIw
MDAwCisKK1JlZlB0cjxSYW5nZT4gV2ViUGFnZTo6cmFuZ2VGb3JCbG9ja0F0UG9pbnQoY29uc3Qg
SW50UG9pbnQmIHBvaW50KQoreworICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gbV9wYWdlLT5t
YWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludCgocG9pbnQpLCBI
aXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZlIHwgSGl0VGVz
dFJlcXVlc3Q6OkRpc2FsbG93VXNlckFnZW50U2hhZG93Q29udGVudCB8IEhpdFRlc3RSZXF1ZXN0
OjpJZ25vcmVDbGlwcGluZyk7CisKKyAgICBOb2RlKiBjdXJyZW50Tm9kZSA9IHJlc3VsdC5pbm5l
ck5vZGUoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOworCisgICAgaWYgKGN1cnJlbnROb2Rl
LT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAgcmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3Jh
bnVsYXJpdHkobV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS52
aXNpYmxlUG9zaXRpb25Gb3JQb2ludChwb2ludCksIFBhcmFncmFwaEdyYW51bGFyaXR5LCBEaXJl
Y3Rpb25Gb3J3YXJkKTsKKyAgICAgICAgaWYgKHJhbmdlICYmICFyYW5nZS0+Y29sbGFwc2VkKCkp
CisgICAgICAgICAgICByZXR1cm4gcmFuZ2U7CisgICAgfQorCisgICAgaWYgKCFjdXJyZW50Tm9k
ZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLT5w
YXJlbnRFbGVtZW50KCk7CisKKyAgICBpZiAoIWN1cnJlbnROb2RlKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShjdXJyZW50Tm9kZS0+ZG9jdW1l
bnQoKSk7CisgICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cygqY3VycmVudE5vZGUpOworICAg
IHJldHVybiByYW5nZTsKK30KKyAgICAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRFeHBhbmQo
U2VsZWN0aW9uSGFuZGxlUG9zaXRpb24gaGFuZGxlUG9zaXRpb24sIGNvbnN0IEludFJlY3QmIHJl
Y3QsIGNvbnN0IEludFBvaW50JiBwb2ludCkKK3sKKyAgICBzd2l0Y2ggKGhhbmRsZVBvc2l0aW9u
KSB7CisgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6VG9wOgorICAgICAgICByZXR1
cm4gKHBvaW50LnkoKSA8IHJlY3QueSgpKTsKKyAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0
aW9uOjpMZWZ0OgorICAgICAgICByZXR1cm4gKHBvaW50LngoKSA8IHJlY3QueCgpKTsKKyAgICBj
YXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpSaWdodDoKKyAgICAgICAgcmV0dXJuIChwb2lu
dC54KCkgPiByZWN0Lm1heFgoKSk7CisgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6
Qm90dG9tOgorICAgICAgICByZXR1cm4gKHBvaW50LnkoKSA+IHJlY3QubWF4WSgpKTsKKyAgICB9
Cit9CisKK1JlZlB0cjxXZWJDb3JlOjpSYW5nZT4gV2ViUGFnZTo6Y2hhbmdlQmxvY2tTZWxlY3Rp
b24oY29uc3QgSW50UG9pbnQmIHBvaW50LCBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbiBoYW5kbGVQ
b3NpdGlvbiwgZmxvYXQmIGdyb3dUaHJlc2hvbGQsIGZsb2F0JiBzaHJpbmtUaHJlc2hvbGQsIFNl
bGVjdGlvbkZsYWdzJiBmbGFncykKK3sKKyAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3Vz
Q29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIFJlZlB0cjxSYW5nZT4gY3Vy
cmVudFJhbmdlID0gbV9jdXJyZW50QmxvY2tTZWxlY3Rpb24gPyBtX2N1cnJlbnRCbG9ja1NlbGVj
dGlvbi5nZXQoKSA6IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJh
bmdlKCk7CisgICAgaWYgKCFjdXJyZW50UmFuZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIFJlZlB0cjxSYW5nZT4gbmV3UmFuZ2UgPSBzaG91bGRFeHBhbmQoaGFuZGxlUG9zaXRpb24s
IHNlbGVjdGlvbkJveEZvclJhbmdlKGN1cnJlbnRSYW5nZS5nZXQoKSksIHBvaW50KSA/IGV4cGFu
ZGVkUmFuZ2VGcm9tSGFuZGxlKCpjdXJyZW50UmFuZ2UsIGhhbmRsZVBvc2l0aW9uKSA6IGNvbnRy
YWN0ZWRSYW5nZUZyb21IYW5kbGUoKmN1cnJlbnRSYW5nZSwgaGFuZGxlUG9zaXRpb24sIGZsYWdz
KTsKKyAgICAKKyAgICBpZiAobmV3UmFuZ2UpIHsKKyAgICAgICAgbV9jdXJyZW50QmxvY2tTZWxl
Y3Rpb24gPSBuZXdSYW5nZTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0ZWRS
YW5nZShuZXdSYW5nZS5nZXQoKSwgVlBfREVGQVVMVF9BRkZJTklUWSwgdHJ1ZSwgVXNlclRyaWdn
ZXJlZCk7CisgICAgfQorICAgIAorICAgIGNvbXB1dGVFeHBhbmRBbmRTaHJpbmtUaHJlc2hvbGRz
Rm9ySGFuZGxlKHBvaW50LCBoYW5kbGVQb3NpdGlvbiwgZ3Jvd1RocmVzaG9sZCwgc2hyaW5rVGhy
ZXNob2xkKTsKKyAgICByZXR1cm4gbmV3UmFuZ2U7Cit9CisKK3ZvaWQgV2ViUGFnZTo6dXBkYXRl
QmxvY2tTZWxlY3Rpb25XaXRoVG91Y2goY29uc3QgSW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCB0
b3VjaCwgdWludDMyX3QgaGFuZGxlUG9zaXRpb24pCit7CisgICAgRnJhbWUmIGZyYW1lID0gbV9w
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAgICBJbnRQb2lu
dCBhZGp1c3RlZFBvaW50ID0gZnJhbWUudmlldygpLT5yb290Vmlld1RvQ29udGVudHMocG9pbnQp
OworICAgIAorICAgIGZsb2F0IGdyb3dUaHJlc2hvbGQgPSAwOworICAgIGZsb2F0IHNocmlua1Ro
cmVzaG9sZCA9IDA7CisgICAgU2VsZWN0aW9uRmxhZ3MgZmxhZ3MgPSBOb25lOworICAgIAorICAg
IHN3aXRjaCAoc3RhdGljX2Nhc3Q8U2VsZWN0aW9uVG91Y2g+KHRvdWNoKSkgeworICAgIGNhc2Ug
U2VsZWN0aW9uVG91Y2g6OlN0YXJ0ZWQ6CisgICAgICAgIGNvbXB1dGVFeHBhbmRBbmRTaHJpbmtU
aHJlc2hvbGRzRm9ySGFuZGxlKGFkanVzdGVkUG9pbnQsIHN0YXRpY19jYXN0PFNlbGVjdGlvbkhh
bmRsZVBvc2l0aW9uPihoYW5kbGVQb3NpdGlvbiksIGdyb3dUaHJlc2hvbGQsIHNocmlua1RocmVz
aG9sZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2VsZWN0aW9uVG91Y2g6OkVuZGVkOgor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFNlbGVjdGlvblRvdWNoOjpNb3ZlZDoKKyAgICAgICAg
Y2hhbmdlQmxvY2tTZWxlY3Rpb24oYWRqdXN0ZWRQb2ludCwgc3RhdGljX2Nhc3Q8U2VsZWN0aW9u
SGFuZGxlUG9zaXRpb24+KGhhbmRsZVBvc2l0aW9uKSwgZ3Jvd1RocmVzaG9sZCwgc2hyaW5rVGhy
ZXNob2xkLCBmbGFncyk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRV
cGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaCh0b3VjaCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KGZsYWdzKSwgZ3Jvd1RocmVzaG9sZCwgc2hyaW5rVGhyZXNob2xkKSk7Cit9CisjZW5kaWYKIAog
dm9pZCBXZWJQYWdlOjpjbGVhclNlbGVjdGlvbigpCiB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>331951</attachid>
            <date>2018-01-22 12:55:20 -0800</date>
            <delta_ts>2018-01-22 13:48:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-181895-20180122125519.patch</filename>
            <type>text/plain</type>
            <size>35383</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjcyNTcpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE4LTAxLTE5ICBNZWdhbiBHYXJk
bmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgVGVtcG9yYXJpbHkgcmVz
dG9yZSBibG9jayBzZWxlY3Rpb24gY29kZSBjb25kaXRpb25hbGx5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODE4OTUKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzM2NTY3MzI1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFdlIG5lZWQgdG8gcmVzdG9yZSB0aGlzIGNvZGUgdGVtcG9yYXJpbHkgdG8gYXZv
aWQgYSBjcmFzaC4KKworICAgICAgICAqIFBsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAg
ICAgKC1bV0tDb250ZW50VmlldyBjaGFuZ2VCbG9ja1NlbGVjdGlvbldpdGhUb3VjaEF0OndpdGhT
ZWxlY3Rpb25Ub3VjaDpmb3JIYW5kbGU6XSk6CisKIDIwMTgtMDEtMTkgIE1lZ2FuIEdhcmRuZXIg
IDxtZWdhbl9nYXJkbmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBQcmVzZW50IFdLRmlsZVVwbG9h
ZFBhbmVsIG9uIGNvcnJlY3QgVmlld0NvbnRyb2xsZXIKSW5kZXg6IFNvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCShyZXZpc2lvbiAyMjcwNzcpCisrKyBTb3VyY2UvV2Vi
S2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaAkod29ya2luZyBjb3B5KQpAQCAtNTQyLDYg
KzU0Miw5IEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFVJV0tHZXN0dXJlVHkKIEBlbmQK
IAogQGludGVyZmFjZSBVSVdLU2VsZWN0aW9uQXNzaXN0YW50ICgpCisjaWYgX19JUEhPTkVfT1Nf
VkVSU0lPTl9NQVhfQUxMT1dFRCA8IDEyMDAwMAorLSAodm9pZClibG9ja1NlbGVjdGlvbkNoYW5n
ZWRXaXRoVG91Y2g6KFVJV0tTZWxlY3Rpb25Ub3VjaCl0b3VjaCB3aXRoRmxhZ3M6KFVJV0tTZWxl
Y3Rpb25GbGFncylmbGFncyBncm93VGhyZXNob2xkOihDR0Zsb2F0KWdyb3cgc2hyaW5rVGhyZXNo
b2xkOihDR0Zsb2F0KXNocmluazsKKyNlbmRpZgogLSAoQk9PTClzaG91bGRIYW5kbGVTaW5nbGVU
YXBBdFBvaW50OihDR1BvaW50KXBvaW50OwogLSAodm9pZClzZWxlY3Rpb25DaGFuZ2VkV2l0aEdl
c3R1cmVBdDooQ0dQb2ludClwb2ludCB3aXRoR2VzdHVyZTooVUlXS0dlc3R1cmVUeXBlKWdlc3R1
cmVUeXBlIHdpdGhTdGF0ZTooVUlHZXN0dXJlUmVjb2duaXplclN0YXRlKWdlc3R1cmVTdGF0ZSB3
aXRoRmxhZ3M6KFVJV0tTZWxlY3Rpb25GbGFncylmbGFnczsKIC0gKHZvaWQpc2VsZWN0aW9uQ2hh
bmdlZFdpdGhUb3VjaEF0OihDR1BvaW50KXBvaW50IHdpdGhTZWxlY3Rpb25Ub3VjaDooVUlXS1Nl
bGVjdGlvblRvdWNoKXRvdWNoIHdpdGhGbGFnczooVUlXS1NlbGVjdGlvbkZsYWdzKWZsYWdzOwpA
QCAtNTkwLDYgKzU5MywxNSBAQCB0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBVSVdLR2VzdHVy
ZVR5CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHksIGFzc2lnbikgVUlUYXBHZXN0dXJl
UmVjb2duaXplciAqc2luZ2xlVGFwR2VzdHVyZTsKIEBlbmQKIAorI2lmIF9fSVBIT05FX09TX1ZF
UlNJT05fTUFYX0FMTE9XRUQgPCAxMjAwMDAKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFVJ
V0tIYW5kbGVQb3NpdGlvbikgeworICAgIFVJV0tIYW5kbGVUb3AgPSAwLAorICAgIFVJV0tIYW5k
bGVSaWdodCA9IDEsCisgICAgVUlXS0hhbmRsZUJvdHRvbSA9IDIsCisgICAgVUlXS0hhbmRsZUxl
ZnQgPSAzLAorfTsKKyNlbmRpZgorCiBAcHJvdG9jb2wgVUlXS0ludGVyYWN0aW9uVmlld1Byb3Rv
Y29sCiAtICh2b2lkKWNoYW5nZVNlbGVjdGlvbldpdGhHZXN0dXJlQXQ6KENHUG9pbnQpcG9pbnQg
d2l0aEdlc3R1cmU6KFVJV0tHZXN0dXJlVHlwZSlnZXN0dXJlVHlwZSB3aXRoU3RhdGU6KFVJR2Vz
dHVyZVJlY29nbml6ZXJTdGF0ZSlzdGF0ZTsKIC0gKHZvaWQpY2hhbmdlU2VsZWN0aW9uV2l0aFRv
dWNoQXQ6KENHUG9pbnQpcG9pbnQgd2l0aFNlbGVjdGlvblRvdWNoOihVSVdLU2VsZWN0aW9uVG91
Y2gpdG91Y2ggYmFzZUlzU3RhcnQ6KEJPT0wpYmFzZUlzU3RhcnQgd2l0aEZsYWdzOihVSVdLU2Vs
ZWN0aW9uRmxhZ3MpZmxhZ3M7CkBAIC02MTQsNiArNjI2LDkgQEAgdHlwZWRlZiBOU19FTlVNKE5T
SW50ZWdlciwgVUlXS0dlc3R1cmVUeQogLSAodm9pZClfY2FuY2VsTG9uZ1ByZXNzR2VzdHVyZVJl
Y29nbml6ZXI7CiAKIEBvcHRpb25hbAorI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9X
RUQgPCAxMjAwMDAKKy0gKHZvaWQpY2hhbmdlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2hBdDooQ0dQ
b2ludClwb2ludCB3aXRoU2VsZWN0aW9uVG91Y2g6KFVJV0tTZWxlY3Rpb25Ub3VjaCl0b3VjaCBm
b3JIYW5kbGU6KFVJV0tIYW5kbGVQb3NpdGlvbiloYW5kbGU7CisjZW5kaWYKIAogLSAodm9pZClj
bGVhclNlbGVjdGlvbjsKIC0gKHZvaWQpcmVwbGFjZURpY3RhdGVkVGV4dDooTlNTdHJpbmcgKilv
bGRUZXh0IHdpdGhUZXh0OihOU1N0cmluZyAqKW5ld1RleHQ7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvUGFnZUNsaWVudC5oCShyZXZpc2lvbiAyMjcwNzcpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9QYWdlQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5Niw2ICsyOTYsOSBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBib29sIGludGVycHJldEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdl
YktleWJvYXJkRXZlbnQmLCBib29sIGlzQ2hhckV2ZW50KSA9IDA7CiAgICAgdmlydHVhbCB2b2lk
IHBvc2l0aW9uSW5mb3JtYXRpb25EaWRDaGFuZ2UoY29uc3QgSW50ZXJhY3Rpb25JbmZvcm1hdGlv
bkF0UG9zaXRpb24mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNhdmVJbWFnZVRvTGlicmFyeShS
ZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmKSA9IDA7CisjaWYgX19JUEhPTkVfT1NfVkVSU0lP
Tl9NQVhfQUxMT1dFRCA8IDEyMDAwMAorICAgIHZpcnR1YWwgdm9pZCBkaWRVcGRhdGVCbG9ja1Nl
bGVjdGlvbldpdGhUb3VjaCh1aW50MzJfdCB0b3VjaCwgdWludDMyX3QgZmxhZ3MsIGZsb2F0IGdy
b3dUaHJlc2hvbGQsIGZsb2F0IHNocmlua1RocmVzaG9sZCkgPSAwOworI2VuZGlmCiAgICAgdmly
dHVhbCB2b2lkIHNob3dQbGF5YmFja1RhcmdldFBpY2tlcihib29sIGhhc1ZpZGVvLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiBlbGVtZW50UmVjdCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaXNh
YmxlRG91YmxlVGFwR2VzdHVyZXNEdXJpbmdUYXBJZk5lY2Vzc2FyeSh1aW50NjRfdCByZXF1ZXN0
SUQpID0gMDsKICAgICB2aXJ0dWFsIGRvdWJsZSBtaW5pbXVtWm9vbVNjYWxlKCkgY29uc3QgPSAw
OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDIy
NzA3NykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MzgsNiArNTM4LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2VsZWN0V2l0aEdl
c3R1cmUoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQsIFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSwg
dWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgYm9vbCBpc0ludGVy
YWN0aW5nV2l0aEFzc2lzdGVkTm9kZSwgV1RGOjpGdW5jdGlvbjx2b2lkIChjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYsIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDMyX3QsIENhbGxiYWNrQmFzZTo6
RXJyb3IpPiYmKTsKICAgICB2b2lkIHVwZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVzKGNvbnN0IFdl
YkNvcmU6OkludFBvaW50LCB1aW50MzJfdCB0b3VjaGVzLCBib29sIGJhc2VJc1N0YXJ0LCBXVEY6
OkZ1bmN0aW9uPHZvaWQgKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMyX3QsIHVpbnQz
Ml90LCBDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CiAgICAgdm9pZCBzZWxlY3RXaXRoVHdvVG91
Y2hlcyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCBmcm9tLCBjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCB0bywgdWludDMyX3QgZ2VzdHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgV1RGOjpG
dW5jdGlvbjx2b2lkIChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQzMl90LCB1aW50MzJf
dCwgdWludDMyX3QsIENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKKyNpZiBfX0lQSE9ORV9PU19W
RVJTSU9OX01BWF9BTExPV0VEIDwgMTIwMDAwCisgICAgdm9pZCB1cGRhdGVCbG9ja1NlbGVjdGlv
bldpdGhUb3VjaChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCwgdWludDMyX3QgdG91Y2gsIHVpbnQz
Ml90IGhhbmRsZVBvc2l0aW9uKTsKKyNlbmRpZgogICAgIHZvaWQgZXh0ZW5kU2VsZWN0aW9uKFdl
YkNvcmU6OlRleHRHcmFudWxhcml0eSk7CiAgICAgdm9pZCBzZWxlY3RXb3JkQmFja3dhcmQoKTsK
ICAgICB2b2lkIG1vdmVTZWxlY3Rpb25CeU9mZnNldChpbnQzMl90IG9mZnNldCwgV1RGOjpGdW5j
dGlvbjx2b2lkIChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CkBAIC01NjIsNiArNTY1LDkgQEAg
cHVibGljOgogICAgIHZvaWQgc3RvcEludGVyYWN0aW9uKCk7CiAgICAgdm9pZCBwZXJmb3JtQWN0
aW9uT25FbGVtZW50KHVpbnQzMl90IGFjdGlvbik7CiAgICAgdm9pZCBzYXZlSW1hZ2VUb0xpYnJh
cnkoY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUmIGltYWdlSGFuZGxlLCB1aW50NjRfdCBpbWFn
ZVNpemUpOworI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPCAxMjAwMDAKKyAg
ICB2b2lkIGRpZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoKHVpbnQzMl90IHRvdWNoLCB1
aW50MzJfdCBmbGFncywgZmxvYXQgZ3Jvd1RocmVzaG9sZCwgZmxvYXQgc2hyaW5rVGhyZXNob2xk
KTsKKyNlbmRpZgogICAgIHZvaWQgZm9jdXNOZXh0QXNzaXN0ZWROb2RlKGJvb2wgaXNGb3J3YXJk
LCBXVEY6OkZ1bmN0aW9uPHZvaWQgKENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKICAgICB2b2lk
IHNldEFzc2lzdGVkTm9kZVZhbHVlKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0QXNzaXN0
ZWROb2RlVmFsdWVBc051bWJlcihkb3VibGUpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjI3MDc3KQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5n
IGNvcHkpCkBAIC0xODIsNiArMTgyLDkgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICAg
ICBTZWxlY3Rpb25Db250ZXh0Q2FsbGJhY2soU3RyaW5nIHNlbGVjdGVkVGV4dCwgU3RyaW5nIGJl
Zm9yZVRleHQsIFN0cmluZyBhZnRlclRleHQsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lE
KQogICAgIEludGVycHJldEtleUV2ZW50KHN0cnVjdCBXZWJLaXQ6OkVkaXRvclN0YXRlIHN0YXRl
LCBib29sIGlzQ2hhckV2ZW50KSAtPiAoYm9vbCBoYW5kbGVkKQogICAgIERpZFJlY2VpdmVQb3Np
dGlvbkluZm9ybWF0aW9uKHN0cnVjdCBXZWJLaXQ6OkludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBv
c2l0aW9uIGluZm9ybWF0aW9uKQorI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQg
PCAxMjAwMDAKKyAgICBEaWRVcGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaCh1aW50MzJfdCB0
b3VjaCwgdWludDMyX3QgZmxhZ3MsIGZsb2F0IGdyb3dUaHJlc2hvbGQsIGZsb2F0IHNocmlua1Ro
cmVzaG9sZCkKKyNlbmRpZgogICAgIFNhdmVJbWFnZVRvTGlicmFyeShXZWJLaXQ6OlNoYXJlZE1l
bW9yeTo6SGFuZGxlIGhhbmRsZSwgdWludDY0X3Qgc2l6ZSkKICAgICBTaG93UGxheWJhY2tUYXJn
ZXRQaWNrZXIoYm9vbCBoYXNWaWRlbywgV2ViQ29yZTo6SW50UmVjdCBlbGVtZW50UmVjdCkKICAg
ICBDb21taXRQb3RlbnRpYWxUYXBGYWlsZWQoKQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgJKHJldmlzaW9uIDIyNzA3NykKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzIsNiArMTMyLDkgQEAgcHJpdmF0ZToKICAgICBib29sIGludGVycHJldEtleUV2
ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBib29sIGlzQ2hhckV2ZW50KSBvdmVy
cmlkZTsKICAgICB2b2lkIHBvc2l0aW9uSW5mb3JtYXRpb25EaWRDaGFuZ2UoY29uc3QgSW50ZXJh
Y3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHNhdmVJbWFn
ZVRvTGlicmFyeShSZWY8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiYmKSBvdmVycmlkZTsKKyNpZiBf
X0lQSE9ORV9PU19WRVJTSU9OX01BWF9BTExPV0VEIDwgMTIwMDAwCisgICAgdm9pZCBkaWRVcGRh
dGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaCh1aW50MzJfdCB0b3VjaCwgdWludDMyX3QgZmxhZ3Ms
IGZsb2F0IGdyb3dUaHJlc2hvbGQsIGZsb2F0IHNocmlua1RocmVzaG9sZCkgb3ZlcnJpZGU7Cisj
ZW5kaWYKICAgICB2b2lkIHNob3dQbGF5YmFja1RhcmdldFBpY2tlcihib29sIGhhc1ZpZGVvLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBlbGVtZW50UmVjdCkgb3ZlcnJpZGU7CiAKICAgICBib29s
IGhhbmRsZVJ1bk9wZW5QYW5lbChXZWJQYWdlUHJveHkqLCBXZWJGcmFtZVByb3h5KiwgQVBJOjpP
cGVuUGFuZWxQYXJhbWV0ZXJzKiwgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eSopIG92
ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBs
SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xp
ZW50SW1wbElPUy5tbQkocmV2aXNpb24gMjI3MDc3KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NjEsNiArNTYx
LDE0IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OnN0b3BBc3Npc3RpbmdOb2RlKCkKIHsKICAgICBb
bV9jb250ZW50VmlldyBfc3RvcEFzc2lzdGluZ05vZGVdOwogfQorICAgIAorI2lmIF9fSVBIT05F
X09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPCAxMjAwMDAKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmRp
ZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRvdWNoKHVpbnQzMl90IHRvdWNoLCB1aW50MzJfdCBm
bGFncywgZmxvYXQgZ3Jvd1RocmVzaG9sZCwgZmxvYXQgc2hyaW5rVGhyZXNob2xkKQoreworICAg
IFttX2NvbnRlbnRWaWV3IF9kaWRVcGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaDooU2VsZWN0
aW9uVG91Y2gpdG91Y2ggd2l0aEZsYWdzOihTZWxlY3Rpb25GbGFncylmbGFncyBncm93VGhyZXNo
b2xkOmdyb3dUaHJlc2hvbGQgc2hyaW5rVGhyZXNob2xkOnNocmlua1RocmVzaG9sZF07Cit9Cisj
ZW5kaWYKKyAgICAKIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2hvd1BsYXliYWNrVGFyZ2V0UGlj
a2VyKGJvb2wgaGFzVmlkZW8sIGNvbnN0IEludFJlY3QmIGVsZW1lbnRSZWN0KQogewpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50
ZXJhY3Rpb24uaAkocmV2aXNpb24gMjI3MDc3KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
aW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTUsNiAr
Mjk1LDkgQEAgRk9SX0VBQ0hfV0tDT05URU5UVklFV19BQ1RJT04oREVDTEFSRV9XSwogLSAodm9p
ZClfZGlkRW5kU2Nyb2xsaW5nT3Jab29taW5nOwogLSAodm9pZClfb3ZlcmZsb3dTY3JvbGxpbmdX
aWxsQmVnaW47CiAtICh2b2lkKV9vdmVyZmxvd1Njcm9sbGluZ0RpZEVuZDsKKyNpZiBfX0lQSE9O
RV9PU19WRVJTSU9OX01BWF9BTExPV0VEIDwgMTIwMDAwCistICh2b2lkKV9kaWRVcGRhdGVCbG9j
a1NlbGVjdGlvbldpdGhUb3VjaDooV2ViS2l0OjpTZWxlY3Rpb25Ub3VjaCl0b3VjaCB3aXRoRmxh
Z3M6KFdlYktpdDo6U2VsZWN0aW9uRmxhZ3MpZmxhZ3MgZ3Jvd1RocmVzaG9sZDooQ0dGbG9hdCln
cm93VGhyZXNob2xkIHNocmlua1RocmVzaG9sZDooQ0dGbG9hdClzaHJpbmtUaHJlc2hvbGQ7Cisj
ZW5kaWYKIC0gKHZvaWQpX3Nob3dQbGF5YmFja1RhcmdldFBpY2tlcjooQk9PTCloYXNWaWRlbyBm
cm9tUmVjdDooY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpZWxlbWVudFJlY3Q7CiAtICh2b2lkKV9z
aG93UnVuT3BlblBhbmVsOihBUEk6Ok9wZW5QYW5lbFBhcmFtZXRlcnMqKXBhcmFtZXRlcnMgcmVz
dWx0TGlzdGVuZXI6KFdlYktpdDo6V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXJQcm94eSopbGlz
dGVuZXI7CiAtICh2b2lkKWFjY2Vzc29yeURvbmU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0JKHJldmlz
aW9uIDIyNzI0NykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3
SW50ZXJhY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTI1MDIsNiArMjUwMiwyMiBAQCBzdGF0
aWMgaW5saW5lIFVJV0tTZWxlY3Rpb25GbGFncyB0b1VJV0tTCiAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFVJV0tTZWxlY3Rpb25GbGFncz4odWlGbGFncyk7CiB9CiAKKyNpZiBfX0lQSE9ORV9PU19W
RVJTSU9OX01BWF9BTExPV0VEIDwgMTIwMDAwCitzdGF0aWMgaW5saW5lIFNlbGVjdGlvbkhhbmRs
ZVBvc2l0aW9uIHRvU2VsZWN0aW9uSGFuZGxlUG9zaXRpb24oVUlXS0hhbmRsZVBvc2l0aW9uIHBv
c2l0aW9uKQoreworICAgIHN3aXRjaCAocG9zaXRpb24pIHsKKyAgICBjYXNlIFVJV0tIYW5kbGVU
b3A6CisgICAgICAgIHJldHVybiBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6VG9wOworICAgIGNh
c2UgVUlXS0hhbmRsZVJpZ2h0OgorICAgICAgICByZXR1cm4gU2VsZWN0aW9uSGFuZGxlUG9zaXRp
b246OlJpZ2h0OworICAgIGNhc2UgVUlXS0hhbmRsZUJvdHRvbToKKyAgICAgICAgcmV0dXJuIFNl
bGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpCb3R0b207CisgICAgY2FzZSBVSVdLSGFuZGxlTGVmdDoK
KyAgICAgICAgcmV0dXJuIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpMZWZ0OworICAgIH0KK30K
KyNlbmRpZgorCiBzdGF0aWMgaW5saW5lIFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSB0b1dLVGV4
dEdyYW51bGFyaXR5KFVJVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQogewogICAgIHN3aXRj
aCAoZ3JhbnVsYXJpdHkpIHsKQEAgLTI1NjAsNiArMjU3NiwxNSBAQCBzdGF0aWMgdm9pZCBzZWxl
Y3Rpb25DaGFuZ2VkV2l0aFRvdWNoKFdLCiAgICAgICAgIFsoVUlXS1RleHRJbnRlcmFjdGlvbkFz
c2lzdGFudCAqKVt2aWV3IGludGVyYWN0aW9uQXNzaXN0YW50XSBzZWxlY3Rpb25DaGFuZ2VkV2l0
aFRvdWNoQXQ6KENHUG9pbnQpcG9pbnQgd2l0aFNlbGVjdGlvblRvdWNoOnRvVUlXS1NlbGVjdGlv
blRvdWNoKChTZWxlY3Rpb25Ub3VjaCl0b3VjaCkgd2l0aEZsYWdzOnN0YXRpY19jYXN0PFVJV0tT
ZWxlY3Rpb25GbGFncz4oZmxhZ3MpXTsKIH0KIAorI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFY
X0FMTE9XRUQgPCAxMjAwMDAKKy0gKHZvaWQpX2RpZFVwZGF0ZUJsb2NrU2VsZWN0aW9uV2l0aFRv
dWNoOihTZWxlY3Rpb25Ub3VjaCl0b3VjaCB3aXRoRmxhZ3M6KFNlbGVjdGlvbkZsYWdzKWZsYWdz
IGdyb3dUaHJlc2hvbGQ6KENHRmxvYXQpZ3Jvd1RocmVzaG9sZCBzaHJpbmtUaHJlc2hvbGQ6KENH
RmxvYXQpc2hyaW5rVGhyZXNob2xkCit7CisgICAgW193ZWJTZWxlY3Rpb25Bc3Npc3RhbnQgYmxv
Y2tTZWxlY3Rpb25DaGFuZ2VkV2l0aFRvdWNoOnRvVUlXS1NlbGVjdGlvblRvdWNoKHRvdWNoKSB3
aXRoRmxhZ3M6dG9VSVdLU2VsZWN0aW9uRmxhZ3MoZmxhZ3MpIGdyb3dUaHJlc2hvbGQ6Z3Jvd1Ro
cmVzaG9sZCBzaHJpbmtUaHJlc2hvbGQ6c2hyaW5rVGhyZXNob2xkXTsKKyAgICBpZiAodG91Y2gg
IT0gU2VsZWN0aW9uVG91Y2g6OlN0YXJ0ZWQgJiYgdG91Y2ggIT0gU2VsZWN0aW9uVG91Y2g6Ok1v
dmVkKQorICAgICAgICBfdXNpbmdHZXN0dXJlRm9yU2VsZWN0aW9uID0gTk87Cit9CisjZW5kaWYK
KwogLSAoQk9PTClfaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUKIHsKICAgICByZXR1cm4g
X3RleHRTZWxlY3Rpb25Bc3Npc3RhbnQgIT0gbmlsOwpAQCAtMjYwNyw2ICsyNjMyLDE5IEBAIC0g
KHZvaWQpY2hhbmdlU2VsZWN0aW9uV2l0aFRvdWNoZXNGcm9tOigKICAgICB9KTsKIH0KIAorI2lm
IF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPCAxMjAwMDAKKy0gKHZvaWQpY2hhbmdl
QmxvY2tTZWxlY3Rpb25XaXRoVG91Y2hBdDooQ0dQb2ludClwb2ludCB3aXRoU2VsZWN0aW9uVG91
Y2g6KFVJV0tTZWxlY3Rpb25Ub3VjaCl0b3VjaCBmb3JIYW5kbGU6KFVJV0tIYW5kbGVQb3NpdGlv
biloYW5kbGUKK3sKKyAgICAvLyBUaGlzIHdhcyBvbmx5IHJlYWRkZWQgdG8gYXZvaWQgYSBjcmFz
aCBkdWUgdG8gaW5jb21iYXRhYmxpbHRpZXNlIHdpdGggY2VydGFpbiB2ZXJzaW9uIG9mIFVJS2l0
LgorICAgIC8vIFRoaXMgc2hvdWxkIGJlIHJlbW92ZWQgQVNBUC4KKyAgICAvLyBUaGUgc2VsZWN0
aW9uIHdpbGwgYmUgcHJvcGVybHkgdXBkYXRlZCB3aXRoIHRoZSBuZXh0IHVwZGF0ZSwgc2VsZWN0
aW9uIHN0aWxsIGZ1bmN0aW9ucworICAgIC8vIHdpdGhvdXQgdGhpcyBmdW5jdGlvbiBkb2luZyBh
bnl0aGluZy4KKyAgICAKKyAgICBfdXNpbmdHZXN0dXJlRm9yU2VsZWN0aW9uID0gWUVTOworICAg
IF9wYWdlLT51cGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaChXZWJDb3JlOjpJbnRQb2ludChw
b2ludCksIHN0YXRpY19jYXN0PHVpbnQzMl90Pih0b1NlbGVjdGlvblRvdWNoKHRvdWNoKSksIHN0
YXRpY19jYXN0PHVpbnQzMl90Pih0b1NlbGVjdGlvbkhhbmRsZVBvc2l0aW9uKGhhbmRsZSkpKTsK
K30KKyNlbmRpZgorCiAtICh2b2lkKW1vdmVCeU9mZnNldDooTlNJbnRlZ2VyKW9mZnNldAogewog
ICAgIGlmICghb2Zmc2V0KQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dlYlBh
Z2VQcm94eUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
V2ViUGFnZVByb3h5SU9TLm1tCShyZXZpc2lvbiAyMjcwNzcpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02NTEsNiAr
NjUxLDE4IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpzYXZlSW1hZ2VUb0xpYnJhcnkoY28KICAgICBh
dXRvIGJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXIqPihzaGFyZWRNZW1vcnlCdWZmZXItPmRhdGEoKSksIGltYWdlU2l6ZSk7CiAgICAgbV9wYWdl
Q2xpZW50LnNhdmVJbWFnZVRvTGlicmFyeShXVEZNb3ZlKGJ1ZmZlcikpOwogfQorICAgIAorI2lm
IF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPCAxMjAwMDAKK3ZvaWQgV2ViUGFnZVBy
b3h5Ojp1cGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaChjb25zdCBXZWJDb3JlOjpJbnRQb2lu
dCBwb2ludCwgdWludDMyX3QgdG91Y2gsIHVpbnQzMl90IGhhbmRsZVBvc2l0aW9uKQoreworICAg
IG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6VXBkYXRlQmxvY2tTZWxlY3Rpb25X
aXRoVG91Y2gocG9pbnQsIHRvdWNoLCBoYW5kbGVQb3NpdGlvbiksIG1fcGFnZUlEKTsKK30KKyAg
ICAKK3ZvaWQgV2ViUGFnZVByb3h5OjpkaWRVcGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaCh1
aW50MzJfdCB0b3VjaCwgdWludDMyX3QgZmxhZ3MsIGZsb2F0IGdyb3dUaHJlc2hvbGQsIGZsb2F0
IHNocmlua1RocmVzaG9sZCkKK3sKKyAgICBtX3BhZ2VDbGllbnQuZGlkVXBkYXRlQmxvY2tTZWxl
Y3Rpb25XaXRoVG91Y2godG91Y2gsIGZsYWdzLCBncm93VGhyZXNob2xkLCBzaHJpbmtUaHJlc2hv
bGQpOworfQorI2VuZGlmCiAKIHZvaWQgV2ViUGFnZVByb3h5OjphcHBsaWNhdGlvbkRpZEVudGVy
QmFja2dyb3VuZCgpCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5oCShyZXZpc2lvbiAyMjcwNzcpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2OSw2ICs1NjksOSBAQCBwdWJs
aWM6CiAgICAgdm9pZCBibHVyQXNzaXN0ZWROb2RlKCk7CiAgICAgdm9pZCBzZWxlY3RXaXRoR2Vz
dHVyZShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHVpbnQzMl90IGdyYW51bGFyaXR5LCB1aW50
MzJfdCBnZXN0dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCBib29sIGlzSW50ZXJhY3Rp
bmdXaXRoQXNzaXN0ZWROb2RlLCBDYWxsYmFja0lEKTsKICAgICB2b2lkIHVwZGF0ZVNlbGVjdGlv
bldpdGhUb3VjaGVzKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgdWludDMyX3QgdG91Y2hlcywg
Ym9vbCBiYXNlSXNTdGFydCwgQ2FsbGJhY2tJRCk7CisjaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9N
QVhfQUxMT1dFRCA8IDEyMDAwMAorICAgIHZvaWQgdXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91
Y2goY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCB1aW50MzJfdCB0b3VjaCwgdWludDMyX3QgaGFu
ZGxlUG9zaXRpb24pOworI2VuZGlmCiAgICAgdm9pZCBzZWxlY3RXaXRoVHdvVG91Y2hlcyhjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYgZnJvbSwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHRvLCB1
aW50MzJfdCBnZXN0dXJlVHlwZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCBDYWxsYmFja0lEKTsK
ICAgICB2b2lkIGV4dGVuZFNlbGVjdGlvbih1aW50MzJfdCBncmFudWxhcml0eSk7CiAgICAgdm9p
ZCBzZWxlY3RXb3JkQmFja3dhcmQoKTsKQEAgLTEwODUsNiArMTA4OCwxMiBAQCBwcml2YXRlOgog
CiAgICAgc3RhdGljIHZvaWQgY29udmVydFNlbGVjdGlvblJlY3RzVG9Sb290VmlldyhXZWJDb3Jl
OjpGcmFtZVZpZXcqLCBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4mKTsKICAgICBSZWZQ
dHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlRm9yV2ViU2VsZWN0aW9uQXRQb3NpdGlvbihjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiYsIFNlbGVj
dGlvbkZsYWdzJik7CisjaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA8IDEyMDAw
MAorICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2VGb3JCbG9ja0F0UG9pbnQoY29uc3Qg
V2ViQ29yZTo6SW50UG9pbnQmKTsKKyAgICB2b2lkIGNvbXB1dGVFeHBhbmRBbmRTaHJpbmtUaHJl
c2hvbGRzRm9ySGFuZGxlKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgU2VsZWN0aW9uSGFuZGxl
UG9zaXRpb24sIGZsb2F0JiBncm93VGhyZXNob2xkLCBmbG9hdCYgc2hyaW5rVGhyZXNob2xkKTsK
KyAgICBSZWY8V2ViQ29yZTo6UmFuZ2U+IGV4cGFuZGVkUmFuZ2VGcm9tSGFuZGxlKFdlYkNvcmU6
OlJhbmdlJiwgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb24pOworICAgIFJlZjxXZWJDb3JlOjpSYW5n
ZT4gY29udHJhY3RlZFJhbmdlRnJvbUhhbmRsZShXZWJDb3JlOjpSYW5nZSYgY3VycmVudFJhbmdl
LCBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbiwgU2VsZWN0aW9uRmxhZ3MmKTsKKyNlbmRpZgogICAg
IHZvaWQgZ2V0QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24oQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24m
KTsKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZUFjY2Vzc2liaWxpdHkoKTsKICAgICB2b2lk
IGhhbmRsZVN5bnRoZXRpY0NsaWNrKFdlYkNvcmU6Ok5vZGUqIG5vZGVSZXNwb25kaW5nVG9DbGlj
aywgY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgbG9jYXRpb24pOwpAQCAtMTA5Myw2ICsxMTAy
LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlc2V0VGV4dEF1dG9zaXppbmcoKTsKICAgICBXZWJD
b3JlOjpWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBvc2l0aW9uSW5Gb2N1c2VkTm9kZUZvclBvaW50
KGNvbnN0IFdlYkNvcmU6OkZyYW1lJiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBib29sIGlz
SW50ZXJhY3RpbmdXaXRoQXNzaXN0ZWROb2RlKTsKICAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+
IHJhbmdlRm9yR3JhbnVsYXJpdHlBdFBvaW50KFdlYkNvcmU6OkZyYW1lJiwgY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQmLCB1aW50MzJfdCBncmFudWxhcml0eSwgYm9vbCBpc0ludGVyYWN0aW5nV2l0
aEFzc2lzdGVkTm9kZSk7CisjaWYgX19JUEhPTkVfT1NfVkVSU0lPTl9NQVhfQUxMT1dFRCA8IDEy
MDAwMAorICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gY2hhbmdlQmxvY2tTZWxlY3Rpb24oY29u
c3QgV2ViQ29yZTo6SW50UG9pbnQmLCBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbiwgZmxvYXQmIGdy
b3dUaHJlc2hvbGQsIGZsb2F0JiBzaHJpbmtUaHJlc2hvbGQsIFNlbGVjdGlvbkZsYWdzJik7Cisj
ZW5kaWYKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKSAmJiBFTkFCTEUoREFUQV9JTlRFUkFD
VElPTikKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVz
c2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5tZXNzYWdlcy5pbgkocmV2aXNpb24gMjI3MDc3KQorKysgU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAt
NTcsNiArNTcsOSBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIExlZ2FjeVJlY2VpdmVyIHsKICAgICBC
bHVyQXNzaXN0ZWROb2RlKCkKICAgICBTZWxlY3RXaXRoR2VzdHVyZShXZWJDb3JlOjpJbnRQb2lu
dCBwb2ludCwgdWludDMyX3QgZ3JhbnVsYXJpdHksIHVpbnQzMl90IGdlc3R1cmVUeXBlLCB1aW50
MzJfdCBnZXN0dXJlU3RhdGUsIGJvb2wgaXNJbnRlcmFjdGluZ1dpdGhBc3Npc3RlZE5vZGUsIFdl
YktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQogICAgIFVwZGF0ZVNlbGVjdGlvbldpdGhUb3Vj
aGVzKFdlYkNvcmU6OkludFBvaW50IHBvaW50LCB1aW50MzJfdCB0b3VjaGVzLCBib29sIGJhc2VJ
c1N0YXJ0LCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKKyNpZiBfX0lQSE9ORV9PU19W
RVJTSU9OX01BWF9BTExPV0VEIDwgMTIwMDAwCisgICAgVXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRo
VG91Y2goV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQsIHVpbnQzMl90IHRvdWNoLCB1aW50MzJfdCBo
YW5kbGVQb3NpdGlvbikKKyNlbmRpZgogICAgIFNlbGVjdFdpdGhUd29Ub3VjaGVzKFdlYkNvcmU6
OkludFBvaW50IGZyb20sIFdlYkNvcmU6OkludFBvaW50IHRvLCB1aW50MzJfdCBnZXN0dXJlVHlw
ZSwgdWludDMyX3QgZ2VzdHVyZVN0YXRlLCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkK
ICAgICBFeHRlbmRTZWxlY3Rpb24odWludDMyX3QgZ3JhbnVsYXJpdHkpCiAgICAgU2VsZWN0V29y
ZEJhY2t3YXJkKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9X
ZWJQYWdlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2lvcy9XZWJQYWdlSU9TLm1tCShyZXZpc2lvbiAyMjcwNzcpCisrKyBTb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MTA1NSw2ICsxMDU1LDM2NCBAQCBSZWZQdHI8UmFuZ2U+IFdlYlBhZ2U6OnJhbmdlRm9yV2ViU2Vs
ZWN0CiAgICAgcmV0dXJuIHJhbmdlLT5jb2xsYXBzZWQoKSA/IG51bGxwdHIgOiByYW5nZTsKIH0K
IAorI2lmIF9fSVBIT05FX09TX1ZFUlNJT05fTUFYX0FMTE9XRUQgPCAxMjAwMDAKK3N0YXRpYyBi
b29sIGNhblNocmlua1RvVGV4dFNlbGVjdGlvbihSYW5nZSYgcmFuZ2UpCit7CisgICAgaWYgKHJh
bmdlLnN0YXJ0Q29udGFpbmVyKCkuaXNUZXh0Tm9kZSgpICYmIHJhbmdlLmVuZENvbnRhaW5lcigp
LmlzVGV4dE5vZGUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGNhblNocmlu
a1RvVGV4dFNlbGVjdGlvbihyYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcigpKTsKK30KK3N0
YXRpYyBjb25zdCBpbnQgbWF4SGl0VGVzdHMgPSAxMDsKKworc3RhdGljIGlubGluZSBmbG9hdCBk
aXN0YW5jZUJldHdlZW5SZWN0c0ZvclBvc2l0aW9uKEludFJlY3QmIGZpcnN0LCBJbnRSZWN0JiBz
ZWNvbmQsIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uIGhhbmRsZVBvc2l0aW9uKQoreworICAgIHN3
aXRjaCAoaGFuZGxlUG9zaXRpb24pIHsKKyAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9u
OjpUb3A6CisgICAgICAgIHJldHVybiBhYnMoZmlyc3QueSgpIC0gc2Vjb25kLnkoKSk7CisgICAg
Y2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6UmlnaHQ6CisgICAgICAgIHJldHVybiBhYnMo
Zmlyc3QubWF4WCgpIC0gc2Vjb25kLm1heFgoKSk7CisgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQ
b3NpdGlvbjo6Qm90dG9tOgorICAgICAgICByZXR1cm4gYWJzKGZpcnN0Lm1heFkoKSAtIHNlY29u
ZC5tYXhZKCkpOworICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OkxlZnQ6CisgICAg
ICAgIHJldHVybiBhYnMoZmlyc3QueCgpIC0gc2Vjb25kLngoKSk7CisgICAgfQorfQorCitzdGF0
aWMgaW5saW5lIGJvb2wgcmVjdHNFc3NlbnRpYWxseVRoZVNhbWUoSW50UmVjdCYgZmlyc3QsIElu
dFJlY3QmIHNlY29uZCwgZmxvYXQgYWxsb3dhYmxlUGVyY2VudERpZmZlcmVuY2UpCit7CisgICAg
Y29uc3QgZmxvYXQgbWluTWFnbml0dWRlUmF0aW8gPSAxLjAgLSBhbGxvd2FibGVQZXJjZW50RGlm
ZmVyZW5jZTsKKyAgICBjb25zdCBmbG9hdCBtYXhEaXNwbGFjZW1lbnRSYXRpbyA9IGFsbG93YWJs
ZVBlcmNlbnREaWZmZXJlbmNlOworICAgIAorICAgIGZsb2F0IHhPcmlnaW5TaGlmdFJhdGlvID0g
YWJzKGZpcnN0LngoKSAtIHNlY29uZC54KCkpIC8gc3RkOjptaW4oZmlyc3Qud2lkdGgoKSwgc2Vj
b25kLndpZHRoKCkpOworICAgIGZsb2F0IHlPcmlnaW5TaGlmdFJhdGlvID0gYWJzKGZpcnN0Lnko
KSAtIHNlY29uZC55KCkpIC8gc3RkOjptaW4oZmlyc3QuaGVpZ2h0KCksIHNlY29uZC5oZWlnaHQo
KSk7CisgICAgCisgICAgZmxvYXQgd2lkdGhSYXRpbyA9IHN0ZDo6bWluKGZpcnN0LndpZHRoKCkg
LyBzZWNvbmQud2lkdGgoKSwgc2Vjb25kLndpZHRoKCkgLyBmaXJzdC53aWR0aCgpKTsKKyAgICBm
bG9hdCBoZWlnaHRSYXRpbyA9IHN0ZDo6bWluKGZpcnN0LmhlaWdodCgpIC8gc2Vjb25kLmhlaWdo
dCgpLCBzZWNvbmQuaGVpZ2h0KCkgLyBmaXJzdC5oZWlnaHQoKSk7CisgICAgcmV0dXJuICgod2lk
dGhSYXRpbyA+IG1pbk1hZ25pdHVkZVJhdGlvICYmIHhPcmlnaW5TaGlmdFJhdGlvIDwgbWF4RGlz
cGxhY2VtZW50UmF0aW8pICYmIChoZWlnaHRSYXRpbyA+IG1pbk1hZ25pdHVkZVJhdGlvICYmIHlP
cmlnaW5TaGlmdFJhdGlvIDwgbWF4RGlzcGxhY2VtZW50UmF0aW8pKTsKK30KKworc3RhdGljIGlu
bGluZSBSZWZQdHI8UmFuZ2U+IHVuaW9uRE9NUmFuZ2VzKFJhbmdlKiByYW5nZUEsIFJhbmdlKiBy
YW5nZUIpCit7CisgICAgaWYgKCFyYW5nZUIpCisgICAgICAgIHJldHVybiByYW5nZUE7CisgICAg
aWYgKCFyYW5nZUEpCisgICAgICAgIHJldHVybiByYW5nZUI7CisgICAgCisgICAgYXV0byBzdGFy
dFRvU3RhcnRDb21wYXJpc29uID0gcmFuZ2VBLT5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6
OlNUQVJUX1RPX1NUQVJULCAqcmFuZ2VCKTsKKyAgICBpZiAoc3RhcnRUb1N0YXJ0Q29tcGFyaXNv
bi5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgYXV0
byBlbmRUb0VuZENvbXBhcmlzb24gPSByYW5nZUEtPmNvbXBhcmVCb3VuZGFyeVBvaW50cyhSYW5n
ZTo6RU5EX1RPX0VORCwgKnJhbmdlQik7CisgICAgaWYgKGVuZFRvRW5kQ29tcGFyaXNvbi5oYXNF
eGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgYXV0byogc3Rh
cnQgPSBzdGFydFRvU3RhcnRDb21wYXJpc29uLnJlbGVhc2VSZXR1cm5WYWx1ZSgpIDw9IDAgPyBy
YW5nZUEgOiByYW5nZUI7CisgICAgYXV0byogZW5kID0gZW5kVG9FbmRDb21wYXJpc29uLnJlbGVh
c2VSZXR1cm5WYWx1ZSgpIDw9IDAgPyByYW5nZUIgOiByYW5nZUE7CisgICAgCisgICAgcmV0dXJu
IFJhbmdlOjpjcmVhdGUocmFuZ2VBLT5vd25lckRvY3VtZW50KCksICZzdGFydC0+c3RhcnRDb250
YWluZXIoKSwgc3RhcnQtPnN0YXJ0T2Zmc2V0KCksICZlbmQtPmVuZENvbnRhaW5lcigpLCBlbmQt
PmVuZE9mZnNldCgpKTsKK30KKworc3RhdGljIGlubGluZSBJbnRQb2ludCBjb21wdXRlRWRnZUNl
bnRlcihjb25zdCBJbnRSZWN0JiBib3gsIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uIGhhbmRsZVBv
c2l0aW9uKQoreworICAgIHN3aXRjaCAoaGFuZGxlUG9zaXRpb24pIHsKKyAgICBjYXNlIFNlbGVj
dGlvbkhhbmRsZVBvc2l0aW9uOjpUb3A6CisgICAgICAgIHJldHVybiBJbnRQb2ludChib3gueCgp
ICsgYm94LndpZHRoKCkgLyAyLCBib3gueSgpKTsKKyAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBv
c2l0aW9uOjpSaWdodDoKKyAgICAgICAgcmV0dXJuIEludFBvaW50KGJveC5tYXhYKCksIGJveC55
KCkgKyBib3guaGVpZ2h0KCkgLyAyKTsKKyAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9u
OjpCb3R0b206CisgICAgICAgIHJldHVybiBJbnRQb2ludChib3gueCgpICsgYm94LndpZHRoKCkg
LyAyLCBib3gubWF4WSgpKTsKKyAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpMZWZ0
OgorICAgICAgICByZXR1cm4gSW50UG9pbnQoYm94LngoKSwgYm94LnkoKSArIGJveC5oZWlnaHQo
KSAvIDIpOworICAgIH0KK30KKworUmVmPFJhbmdlPiBXZWJQYWdlOjpleHBhbmRlZFJhbmdlRnJv
bUhhbmRsZShSYW5nZSYgY3VycmVudFJhbmdlLCBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbiBoYW5k
bGVQb3NpdGlvbikKK3sKKyAgICBJbnRSZWN0IGN1cnJlbnRCb3ggPSBzZWxlY3Rpb25Cb3hGb3JS
YW5nZSgmY3VycmVudFJhbmdlKTsKKyAgICBJbnRQb2ludCBlZGdlQ2VudGVyID0gY29tcHV0ZUVk
Z2VDZW50ZXIoY3VycmVudEJveCwgaGFuZGxlUG9zaXRpb24pOworICAgIHN0YXRpYyBjb25zdCBm
bG9hdCBtYXhEaXN0YW5jZSA9IDEwMDA7CisgICAgY29uc3QgZmxvYXQgbXVsdGlwbGUgPSBwb3dm
KG1heERpc3RhbmNlLCAxLjAgLyAobWF4SGl0VGVzdHMgLSAxKSk7CisgICAgZmxvYXQgZGlzdGFu
Y2UgPSAxOworICAgIAorICAgIFJlZlB0cjxSYW5nZT4gYmVzdFJhbmdlOworICAgIEludFJlY3Qg
YmVzdFJlY3Q7CisgICAgCisgICAgd2hpbGUgKGRpc3RhbmNlIDwgbWF4RGlzdGFuY2UpIHsKKyAg
ICAgICAgaWYgKGJlc3RSYW5nZSkgeworICAgICAgICAgICAgaWYgKGRpc3RhbmNlQmV0d2VlblJl
Y3RzRm9yUG9zaXRpb24oYmVzdFJlY3QsIGN1cnJlbnRCb3gsIGhhbmRsZVBvc2l0aW9uKSA8IGRp
c3RhbmNlKSB7CisgICAgICAgICAgICAgICAgLy8gQnJlYWsgZWFybHksIHdlJ3JlIHVubGlrZWx5
IHRvIGRvIGFueSBiZXR0ZXIuCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEludFBvaW50IHRlc3RQb2ludCA9IGVkZ2VD
ZW50ZXI7CisgICAgICAgIHN3aXRjaCAoaGFuZGxlUG9zaXRpb24pIHsKKyAgICAgICAgY2FzZSBT
ZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6VG9wOgorICAgICAgICAgICAgdGVzdFBvaW50Lm1vdmUo
MCwgLWRpc3RhbmNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNlbGVjdGlv
bkhhbmRsZVBvc2l0aW9uOjpSaWdodDoKKyAgICAgICAgICAgIHRlc3RQb2ludC5tb3ZlKGRpc3Rh
bmNlLCAwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNlbGVjdGlvbkhhbmRs
ZVBvc2l0aW9uOjpCb3R0b206CisgICAgICAgICAgICB0ZXN0UG9pbnQubW92ZSgwLCBkaXN0YW5j
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3Np
dGlvbjo6TGVmdDoKKyAgICAgICAgICAgIHRlc3RQb2ludC5tb3ZlKC1kaXN0YW5jZSwgMCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZGlzdGFuY2Ug
PSBjZWlsZihkaXN0YW5jZSAqIG11bHRpcGxlKTsKKyAgICAgICAgCisgICAgICAgIFJlZlB0cjxS
YW5nZT4gbmV3UmFuZ2U7CisgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2VBdFBvc2l0aW9uID0g
cmFuZ2VGb3JCbG9ja0F0UG9pbnQodGVzdFBvaW50KTsKKyAgICAgICAgaWYgKCFyYW5nZUF0UG9z
aXRpb24gfHwgJmN1cnJlbnRSYW5nZS5vd25lckRvY3VtZW50KCkgIT0gJnJhbmdlQXRQb3NpdGlv
bi0+b3duZXJEb2N1bWVudCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAg
ICAgICBpZiAocmFuZ2VBdFBvc2l0aW9uLT5jb250YWlucyhjdXJyZW50UmFuZ2UpKQorICAgICAg
ICAgICAgbmV3UmFuZ2UgPSByYW5nZUF0UG9zaXRpb247CisgICAgICAgIGVsc2UgaWYgKGN1cnJl
bnRSYW5nZS5jb250YWlucygqcmFuZ2VBdFBvc2l0aW9uLmdldCgpKSkKKyAgICAgICAgICAgIG5l
d1JhbmdlID0gJmN1cnJlbnRSYW5nZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmV3UmFu
Z2UgPSB1bmlvbkRPTVJhbmdlcygmY3VycmVudFJhbmdlLCByYW5nZUF0UG9zaXRpb24uZ2V0KCkp
OworICAgICAgICAKKyAgICAgICAgSW50UmVjdCBjb3B5UmVjdCA9IHNlbGVjdGlvbkJveEZvclJh
bmdlKG5ld1JhbmdlLmdldCgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIElzIGl0IGRpZmZlcmVu
dCBhbmQgYmlnZ2VyIHRoYW4gdGhlIGN1cnJlbnQ/CisgICAgICAgIGJvb2wgaXNCZXR0ZXJDaG9p
Y2UgPSAhKHJlY3RzRXNzZW50aWFsbHlUaGVTYW1lKGNvcHlSZWN0LCBjdXJyZW50Qm94LCAuMDUp
KTsKKyAgICAgICAgaWYgKGlzQmV0dGVyQ2hvaWNlKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGhh
bmRsZVBvc2l0aW9uKSB7CisgICAgICAgICAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9u
OjpUb3A6CisgICAgICAgICAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpCb3R0b206
CisgICAgICAgICAgICAgICAgaXNCZXR0ZXJDaG9pY2UgPSAoY29weVJlY3QuaGVpZ2h0KCkgPiBj
dXJyZW50Qm94LmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OlJpZ2h0OgorICAgICAgICAgICAgY2FzZSBT
ZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6TGVmdDoKKyAgICAgICAgICAgICAgICBpc0JldHRlckNo
b2ljZSA9IChjb3B5UmVjdC53aWR0aCgpID4gY3VycmVudEJveC53aWR0aCgpKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBpZiAoYmVzdFJhbmdlICYmIGlzQmV0dGVyQ2hvaWNlKSB7CisgICAg
ICAgICAgICAvLyBGdXJ0aGVyb3JlLCBpcyBpdCBzbWFsbGVyIHRoYW4gdGhlIGJlc3Qgd2UndmUg
Zm91bmQgc28gZmFyPworICAgICAgICAgICAgc3dpdGNoIChoYW5kbGVQb3NpdGlvbikgeworICAg
ICAgICAgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6VG9wOgorICAgICAgICAgICAg
Y2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6Qm90dG9tOgorICAgICAgICAgICAgICAgIGlz
QmV0dGVyQ2hvaWNlID0gKGNvcHlSZWN0LmhlaWdodCgpIDwgYmVzdFJlY3QuaGVpZ2h0KCkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQ
b3NpdGlvbjo6UmlnaHQ6CisgICAgICAgICAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9u
OjpMZWZ0OgorICAgICAgICAgICAgICAgIGlzQmV0dGVyQ2hvaWNlID0gKGNvcHlSZWN0LndpZHRo
KCkgPCBiZXN0UmVjdC53aWR0aCgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGlzQmV0dGVyQ2hvaWNlKSB7
CisgICAgICAgICAgICBiZXN0UmFuZ2UgPSBuZXdSYW5nZTsKKyAgICAgICAgICAgIGJlc3RSZWN0
ID0gY29weVJlY3Q7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKGJlc3RSYW5nZSkK
KyAgICAgICAgcmV0dXJuIGJlc3RSYW5nZS5yZWxlYXNlTm9uTnVsbCgpOworICAgIAorICAgIHJl
dHVybiBjdXJyZW50UmFuZ2U7Cit9CisKK1JlZjxSYW5nZT4gV2ViUGFnZTo6Y29udHJhY3RlZFJh
bmdlRnJvbUhhbmRsZShSYW5nZSYgY3VycmVudFJhbmdlLCBTZWxlY3Rpb25IYW5kbGVQb3NpdGlv
biBoYW5kbGVQb3NpdGlvbiwgU2VsZWN0aW9uRmxhZ3MmIGZsYWdzKQoreworICAgIC8vIFNocmlu
a2luZyB3aXRoIGEgYmFzZSBhbmQgZXh0ZW50IHdpbGwgYWx3YXlzIGdpdmUgYmV0dGVyIHJlc3Vs
dHMuIElmIHdlIG9ubHkgaGF2ZSBhIHNpbmdsZSBlbGVtZW50LAorICAgIC8vIHNlZSBpZiB3ZSBj
YW4gYnJlYWsgdGhhdCBkb3duIHRvIGEgYmFzZSBhbmQgZXh0ZW50LiBTaHJpbmtpbmcgYmFzZSBh
bmQgZXh0ZW50IGlzIGNvbXBhcmF0aXZlbHkgc3RyYWlnaHRmb3J3YXJkLgorICAgIC8vIFNocmlu
a2luZyBkb3duIHRvIGFub3RoZXIgZWxlbWVudCBpcyB1bmxpa2VseSB0byBtb3ZlIGp1c3Qgb25l
IGVkZ2UsIGJ1dCB3ZSBjYW4gdHJ5IHRoYXQgYXMgYSBmYWxsYmFjay4KKyAgICAKKyAgICBJbnRS
ZWN0IGN1cnJlbnRCb3ggPSBzZWxlY3Rpb25Cb3hGb3JSYW5nZSgmY3VycmVudFJhbmdlKTsKKyAg
ICBJbnRQb2ludCBlZGdlQ2VudGVyID0gY29tcHV0ZUVkZ2VDZW50ZXIoY3VycmVudEJveCwgaGFu
ZGxlUG9zaXRpb24pOworICAgIAorICAgIGZsb2F0IG1heERpc3RhbmNlOworICAgIAorICAgIHN3
aXRjaCAoaGFuZGxlUG9zaXRpb24pIHsKKyAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9u
OjpUb3A6CisgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6Qm90dG9tOgorICAgICAg
ICBtYXhEaXN0YW5jZSA9IGN1cnJlbnRCb3guaGVpZ2h0KCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OlJpZ2h0OgorICAgIGNhc2UgU2VsZWN0aW9u
SGFuZGxlUG9zaXRpb246OkxlZnQ6CisgICAgICAgIG1heERpc3RhbmNlID0gY3VycmVudEJveC53
aWR0aCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgY29uc3QgZmxvYXQgbXVs
dGlwbGUgPSBwb3dmKG1heERpc3RhbmNlIC0gMSwgMS4wIC8gKG1heEhpdFRlc3RzIC0gMSkpOwor
ICAgIGZsb2F0IGRpc3RhbmNlID0gMTsKKyAgICBSZWZQdHI8UmFuZ2U+IGJlc3RSYW5nZTsKKyAg
ICBJbnRSZWN0IGJlc3RSZWN0OworICAgIAorICAgIHdoaWxlIChkaXN0YW5jZSA8IG1heERpc3Rh
bmNlKSB7CisgICAgICAgIGlmIChiZXN0UmFuZ2UpIHsKKyAgICAgICAgICAgIGZsb2F0IHNocmFu
a0Rpc3RhbmNlOworICAgICAgICAgICAgc3dpdGNoIChoYW5kbGVQb3NpdGlvbikgeworICAgICAg
ICAgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6VG9wOgorICAgICAgICAgICAgY2Fz
ZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6Qm90dG9tOgorICAgICAgICAgICAgICAgIHNocmFu
a0Rpc3RhbmNlID0gYWJzKGN1cnJlbnRCb3guaGVpZ2h0KCkgLSBiZXN0UmVjdC5oZWlnaHQoKSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNlbGVjdGlvbkhhbmRs
ZVBvc2l0aW9uOjpSaWdodDoKKyAgICAgICAgICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRp
b246OkxlZnQ6CisgICAgICAgICAgICAgICAgc2hyYW5rRGlzdGFuY2UgPSBhYnMoY3VycmVudEJv
eC53aWR0aCgpIC0gYmVzdFJlY3Qud2lkdGgoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc2hyYW5rRGlzdGFuY2UgPiBkaXN0YW5jZSkg
eworICAgICAgICAgICAgICAgIC8vIENlcnRhaW5seSBub3QgZ29pbmcgdG8gZG8gYW55IGJldHRl
ciB0aGFuIHRoYXQuCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIEludFBvaW50IHRlc3RQb2ludCA9IGVkZ2VDZW50ZXI7
CisgICAgICAgIHN3aXRjaCAoaGFuZGxlUG9zaXRpb24pIHsKKyAgICAgICAgY2FzZSBTZWxlY3Rp
b25IYW5kbGVQb3NpdGlvbjo6VG9wOgorICAgICAgICAgICAgdGVzdFBvaW50Lm1vdmUoMCwgZGlz
dGFuY2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxl
UG9zaXRpb246OlJpZ2h0OgorICAgICAgICAgICAgdGVzdFBvaW50Lm1vdmUoLWRpc3RhbmNlLCAw
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0
aW9uOjpCb3R0b206CisgICAgICAgICAgICB0ZXN0UG9pbnQubW92ZSgwLCAtZGlzdGFuY2UpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246
OkxlZnQ6CisgICAgICAgICAgICB0ZXN0UG9pbnQubW92ZShkaXN0YW5jZSwgMCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZGlzdGFuY2UgKj0gbXVs
dGlwbGU7CisgICAgICAgIAorICAgICAgICBSZWZQdHI8UmFuZ2U+IG5ld1JhbmdlID0gcmFuZ2VG
b3JCbG9ja0F0UG9pbnQodGVzdFBvaW50KTsKKyAgICAgICAgaWYgKCFuZXdSYW5nZSB8fCAmbmV3
UmFuZ2UtPm93bmVyRG9jdW1lbnQoKSAhPSAmY3VycmVudFJhbmdlLm93bmVyRG9jdW1lbnQoKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgaWYgKGhhbmRsZVBvc2l0
aW9uID09IFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpUb3AgfHwgaGFuZGxlUG9zaXRpb24gPT0g
U2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OkxlZnQpCisgICAgICAgICAgICBuZXdSYW5nZSA9IFJh
bmdlOjpjcmVhdGUobmV3UmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKSwgbmV3UmFu
Z2UtPmVuZFBvc2l0aW9uKCksIGN1cnJlbnRSYW5nZS5lbmRQb3NpdGlvbigpKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgbmV3UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG5ld1JhbmdlLT5zdGFy
dENvbnRhaW5lcigpLmRvY3VtZW50KCksIGN1cnJlbnRSYW5nZS5zdGFydFBvc2l0aW9uKCksIG5l
d1JhbmdlLT5zdGFydFBvc2l0aW9uKCkpOworICAgICAgICAKKyAgICAgICAgSW50UmVjdCBjb3B5
UmVjdCA9IHNlbGVjdGlvbkJveEZvclJhbmdlKG5ld1JhbmdlLmdldCgpKTsKKyAgICAgICAgaWYg
KGNvcHlSZWN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgLy8gSWYgdGhlIG5ldyByYW5nZSBp
cyBhbiBlbXB0eSByZWN0YW5nbGUsIHdlIHRyeSB0aGUgYmxvY2sgYXQgdGhlIGN1cnJlbnQgcG9p
bnQKKyAgICAgICAgICAgIC8vIGFuZCBzZWUgaWYgdGhhdCBoYXMgYSByZWN0YW5nbGUgdGhhdCBp
cyBhIGJldHRlciBjaG9pY2UuCisgICAgICAgICAgICBuZXdSYW5nZSA9IHJhbmdlRm9yQmxvY2tB
dFBvaW50KHRlc3RQb2ludCk7CisgICAgICAgICAgICBjb3B5UmVjdCA9IHNlbGVjdGlvbkJveEZv
clJhbmdlKG5ld1JhbmdlLmdldCgpKTsKKyAgICAgICAgfQorICAgICAgICBib29sIGlzQmV0dGVy
Q2hvaWNlOworICAgICAgICBzd2l0Y2ggKGhhbmRsZVBvc2l0aW9uKSB7CisgICAgICAgIGNhc2Ug
U2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OlRvcDoKKyAgICAgICAgY2FzZSBTZWxlY3Rpb25IYW5k
bGVQb3NpdGlvbjo6Qm90dG9tOgorICAgICAgICAgICAgaXNCZXR0ZXJDaG9pY2UgPSAoY29weVJl
Y3QuaGVpZ2h0KCkgPCBjdXJyZW50Qm94LmhlaWdodCgpKTsKKyAgICAgICAgICAgIGlmIChjb3B5
UmVjdC5oZWlnaHQoKSA9PSBjdXJyZW50Qm94LmhlaWdodCgpKQorICAgICAgICAgICAgICAgIGlz
QmV0dGVyQ2hvaWNlID0gY2FuU2hyaW5rVG9UZXh0U2VsZWN0aW9uKCpuZXdSYW5nZS5nZXQoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlv
bjo6TGVmdDoKKyAgICAgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6UmlnaHQ6Cisg
ICAgICAgICAgICBpc0JldHRlckNob2ljZSA9IChjb3B5UmVjdC53aWR0aCgpID4gYmVzdFJlY3Qu
d2lkdGgoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaXNCZXR0ZXJDaG9pY2UgPSBpc0JldHRlckNob2ljZSAmJiAhYXJlUmFuZ2VzRXF1YWwobmV3
UmFuZ2UuZ2V0KCksICZjdXJyZW50UmFuZ2UpOworICAgICAgICBpZiAoYmVzdFJhbmdlICYmIGlz
QmV0dGVyQ2hvaWNlKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGhhbmRsZVBvc2l0aW9uKSB7Cisg
ICAgICAgICAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpUb3A6CisgICAgICAgICAg
ICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpCb3R0b206CisgICAgICAgICAgICAgICAg
aXNCZXR0ZXJDaG9pY2UgPSAoY29weVJlY3QuaGVpZ2h0KCkgPiBiZXN0UmVjdC5oZWlnaHQoKSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNlbGVjdGlvbkhhbmRs
ZVBvc2l0aW9uOjpMZWZ0OgorICAgICAgICAgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlv
bjo6UmlnaHQ6CisgICAgICAgICAgICAgICAgaXNCZXR0ZXJDaG9pY2UgPSAoY29weVJlY3Qud2lk
dGgoKSA+IGJlc3RSZWN0LndpZHRoKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChpc0JldHRlckNob2ljZSkgeworICAgICAg
ICAgICAgYmVzdFJhbmdlID0gbmV3UmFuZ2U7CisgICAgICAgICAgICBiZXN0UmVjdCA9IGNvcHlS
ZWN0OworICAgICAgICB9CisgICAgICAgIAorICAgIH0KKyAgICAKKyAgICBpZiAoIWJlc3RSYW5n
ZSkKKyAgICAgICAgYmVzdFJhbmdlID0gJmN1cnJlbnRSYW5nZTsKKyAgICAKKyAgICAvLyBJZiB3
ZSBjYW4gc2hyaW5rIGRvd24gdG8gdGV4dCBvbmx5LCB0aGUgb25seSByZWFzb24gd2Ugd291bGRu
J3QgaXMgdGhhdAorICAgIC8vIHRoZXJlIGFyZSBtdWx0aXBsZSBzdWItZWxlbWVudCBibG9ja3Mg
YmVuZWF0aCB1cy4gSWYgd2UgZGlkbid0IGZpbmQKKyAgICAvLyBtdWx0aXBsZSBzdWItZWxlbWVu
dCBibG9ja3MsIGRvbid0IHNocmluayB0byBhIHN1Yi1lbGVtZW50IGJsb2NrLgorICAgIAorICAg
IGlmIChjYW5TaHJpbmtUb1RleHRTZWxlY3Rpb24oKmJlc3RSYW5nZS5nZXQoKSkpCisgICAgICAg
IGZsYWdzID0gTm9uZTsKKyAgICAKKyAgICByZXR1cm4gYmVzdFJhbmdlLnJlbGVhc2VOb25OdWxs
KCk7Cit9CisKK3ZvaWQgV2ViUGFnZTo6Y29tcHV0ZUV4cGFuZEFuZFNocmlua1RocmVzaG9sZHNG
b3JIYW5kbGUoY29uc3QgSW50UG9pbnQmIHBvaW50LCBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbiBo
YW5kbGVQb3NpdGlvbiwgZmxvYXQmIGdyb3dUaHJlc2hvbGQsIGZsb2F0JiBzaHJpbmtUaHJlc2hv
bGQpCit7CisgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1
c2VkT3JNYWluRnJhbWUoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IGN1cnJlbnRSYW5nZSA9IG1fY3Vy
cmVudEJsb2NrU2VsZWN0aW9uID8gbV9jdXJyZW50QmxvY2tTZWxlY3Rpb24uZ2V0KCkgOiBmcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIAorICAg
IGlmICghY3VycmVudFJhbmdlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUmVmPFJhbmdl
PiBleHBhbmRlZFJhbmdlID0gZXhwYW5kZWRSYW5nZUZyb21IYW5kbGUoKmN1cnJlbnRSYW5nZSwg
aGFuZGxlUG9zaXRpb24pOworICAgIFNlbGVjdGlvbkZsYWdzIGZsYWdzOworICAgIFJlZlB0cjxS
YW5nZT4gY29udHJhY3RlZFJhbmdlID0gY29udHJhY3RlZFJhbmdlRnJvbUhhbmRsZSgqY3VycmVu
dFJhbmdlLCBoYW5kbGVQb3NpdGlvbiwgZmxhZ3MpOworICAgIAorICAgIEludFJlY3QgY3VycmVu
dEJvdW5kcyA9IHNlbGVjdGlvbkJveEZvclJhbmdlKGN1cnJlbnRSYW5nZS5nZXQoKSk7CisgICAg
SW50UmVjdCBleHBhbmRlZEJvdW5kcyA9IHNlbGVjdGlvbkJveEZvclJhbmdlKGV4cGFuZGVkUmFu
Z2UucHRyKCkpOworICAgIEludFJlY3QgY29udHJhY3RlZEJvdW5kcyA9IHNlbGVjdGlvbkJveEZv
clJhbmdlKGNvbnRyYWN0ZWRSYW5nZS5nZXQoKSk7CisgICAgCisgICAgZmxvYXQgY3VycmVudDsK
KyAgICBmbG9hdCBleHBhbmRlZDsKKyAgICBmbG9hdCBjb250cmFjdGVkOworICAgIGZsb2F0IG1h
eFRocmVzaG9sZDsKKyAgICBmbG9hdCBtaW5UaHJlc2hvbGQ7CisgICAgCisgICAgc3dpdGNoICho
YW5kbGVQb3NpdGlvbikgeworICAgIGNhc2UgU2VsZWN0aW9uSGFuZGxlUG9zaXRpb246OlRvcDog
eworICAgICAgICBjdXJyZW50ID0gY3VycmVudEJvdW5kcy55KCk7CisgICAgICAgIGV4cGFuZGVk
ID0gZXhwYW5kZWRCb3VuZHMueSgpOworICAgICAgICBjb250cmFjdGVkID0gY29udHJhY3RlZEJv
dW5kcy55KCk7CisgICAgICAgIG1heFRocmVzaG9sZCA9IEZMVF9NSU47CisgICAgICAgIG1pblRo
cmVzaG9sZCA9IEZMVF9NQVg7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFNlbGVj
dGlvbkhhbmRsZVBvc2l0aW9uOjpSaWdodDogeworICAgICAgICBjdXJyZW50ID0gY3VycmVudEJv
dW5kcy5tYXhYKCk7CisgICAgICAgIGV4cGFuZGVkID0gZXhwYW5kZWRCb3VuZHMubWF4WCgpOwor
ICAgICAgICBjb250cmFjdGVkID0gY29udHJhY3RlZEJvdW5kcy5tYXhYKCk7CisgICAgICAgIG1h
eFRocmVzaG9sZCA9IEZMVF9NQVg7CisgICAgICAgIG1pblRocmVzaG9sZCA9IEZMVF9NSU47Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpC
b3R0b206IHsKKyAgICAgICAgY3VycmVudCA9IGN1cnJlbnRCb3VuZHMubWF4WSgpOworICAgICAg
ICBleHBhbmRlZCA9IGV4cGFuZGVkQm91bmRzLm1heFkoKTsKKyAgICAgICAgY29udHJhY3RlZCA9
IGNvbnRyYWN0ZWRCb3VuZHMubWF4WSgpOworICAgICAgICBtYXhUaHJlc2hvbGQgPSBGTFRfTUFY
OworICAgICAgICBtaW5UaHJlc2hvbGQgPSBGTFRfTUlOOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6TGVmdDogeworICAgICAgICBjdXJy
ZW50ID0gY3VycmVudEJvdW5kcy54KCk7CisgICAgICAgIGV4cGFuZGVkID0gZXhwYW5kZWRCb3Vu
ZHMueCgpOworICAgICAgICBjb250cmFjdGVkID0gY29udHJhY3RlZEJvdW5kcy54KCk7CisgICAg
ICAgIG1heFRocmVzaG9sZCA9IEZMVF9NSU47CisgICAgICAgIG1pblRocmVzaG9sZCA9IEZMVF9N
QVg7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisgICAgCisgICAgc3RhdGljIGNvbnN0
IGZsb2F0IGZyYWN0aW9uVG9Hcm93ID0gMC4zOworICAgIAorICAgIGdyb3dUaHJlc2hvbGQgPSBj
dXJyZW50ICsgKGV4cGFuZGVkIC0gY3VycmVudCkgKiBmcmFjdGlvblRvR3JvdzsKKyAgICBzaHJp
bmtUaHJlc2hvbGQgPSBjdXJyZW50ICsgKGNvbnRyYWN0ZWQgLSBjdXJyZW50KSAqICgxIC0gZnJh
Y3Rpb25Ub0dyb3cpOworICAgIGlmIChhcmVSYW5nZXNFcXVhbChleHBhbmRlZFJhbmdlLnB0cigp
LCBjdXJyZW50UmFuZ2UuZ2V0KCkpKQorICAgICAgICBncm93VGhyZXNob2xkID0gbWF4VGhyZXNo
b2xkOworICAgIAorfQorI2VuZGlmCisKIHZvaWQgV2ViUGFnZTo6c2VsZWN0V2l0aEdlc3R1cmUo
Y29uc3QgSW50UG9pbnQmIHBvaW50LCB1aW50MzJfdCBncmFudWxhcml0eSwgdWludDMyX3QgZ2Vz
dHVyZVR5cGUsIHVpbnQzMl90IGdlc3R1cmVTdGF0ZSwgYm9vbCBpc0ludGVyYWN0aW5nV2l0aEFz
c2lzdGVkTm9kZSwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogewogICAgIGF1dG8mIGZyYW1lID0g
bV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKQEAgLTEyNjks
NiArMTYyNyw4OSBAQCBzdGF0aWMgUmVmUHRyPFJhbmdlPiByYW5nZUF0V29yZEJvdW5kYXJ5CiAK
ICAgICByZXR1cm4gKGJhc2UgPCBleHRlbnQpID8gUmFuZ2U6OmNyZWF0ZSgqZnJhbWUtPmRvY3Vt
ZW50KCksIGJhc2UsIGV4dGVudCkgOiBSYW5nZTo6Y3JlYXRlKCpmcmFtZS0+ZG9jdW1lbnQoKSwg
ZXh0ZW50LCBiYXNlKTsKIH0KKyAgICAKKyNpZiBfX0lQSE9ORV9PU19WRVJTSU9OX01BWF9BTExP
V0VEIDwgMTIwMDAwCisKK1JlZlB0cjxSYW5nZT4gV2ViUGFnZTo6cmFuZ2VGb3JCbG9ja0F0UG9p
bnQoY29uc3QgSW50UG9pbnQmIHBvaW50KQoreworICAgIEhpdFRlc3RSZXN1bHQgcmVzdWx0ID0g
bV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludCgo
cG9pbnQpLCBIaXRUZXN0UmVxdWVzdDo6UmVhZE9ubHkgfCBIaXRUZXN0UmVxdWVzdDo6QWN0aXZl
IHwgSGl0VGVzdFJlcXVlc3Q6OkRpc2FsbG93VXNlckFnZW50U2hhZG93Q29udGVudCB8IEhpdFRl
c3RSZXF1ZXN0OjpJZ25vcmVDbGlwcGluZyk7CisKKyAgICBOb2RlKiBjdXJyZW50Tm9kZSA9IHJl
c3VsdC5pbm5lck5vZGUoKTsKKyAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOworCisgICAgaWYgKGN1
cnJlbnROb2RlLT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAgcmFuZ2UgPSBlbmNsb3NpbmdUZXh0
VW5pdE9mR3JhbnVsYXJpdHkobV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWlu
RnJhbWUoKS52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChwb2ludCksIFBhcmFncmFwaEdyYW51bGFy
aXR5LCBEaXJlY3Rpb25Gb3J3YXJkKTsKKyAgICAgICAgaWYgKHJhbmdlICYmICFyYW5nZS0+Y29s
bGFwc2VkKCkpCisgICAgICAgICAgICByZXR1cm4gcmFuZ2U7CisgICAgfQorCisgICAgaWYgKCFj
dXJyZW50Tm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJl
bnROb2RlLT5wYXJlbnRFbGVtZW50KCk7CisKKyAgICBpZiAoIWN1cnJlbnROb2RlKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShjdXJyZW50Tm9k
ZS0+ZG9jdW1lbnQoKSk7CisgICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cygqY3VycmVudE5v
ZGUpOworICAgIHJldHVybiByYW5nZTsKK30KKyAgICAKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91
bGRFeHBhbmQoU2VsZWN0aW9uSGFuZGxlUG9zaXRpb24gaGFuZGxlUG9zaXRpb24sIGNvbnN0IElu
dFJlY3QmIHJlY3QsIGNvbnN0IEludFBvaW50JiBwb2ludCkKK3sKKyAgICBzd2l0Y2ggKGhhbmRs
ZVBvc2l0aW9uKSB7CisgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQb3NpdGlvbjo6VG9wOgorICAg
ICAgICByZXR1cm4gKHBvaW50LnkoKSA8IHJlY3QueSgpKTsKKyAgICBjYXNlIFNlbGVjdGlvbkhh
bmRsZVBvc2l0aW9uOjpMZWZ0OgorICAgICAgICByZXR1cm4gKHBvaW50LngoKSA8IHJlY3QueCgp
KTsKKyAgICBjYXNlIFNlbGVjdGlvbkhhbmRsZVBvc2l0aW9uOjpSaWdodDoKKyAgICAgICAgcmV0
dXJuIChwb2ludC54KCkgPiByZWN0Lm1heFgoKSk7CisgICAgY2FzZSBTZWxlY3Rpb25IYW5kbGVQ
b3NpdGlvbjo6Qm90dG9tOgorICAgICAgICByZXR1cm4gKHBvaW50LnkoKSA+IHJlY3QubWF4WSgp
KTsKKyAgICB9Cit9CisKK1JlZlB0cjxXZWJDb3JlOjpSYW5nZT4gV2ViUGFnZTo6Y2hhbmdlQmxv
Y2tTZWxlY3Rpb24oY29uc3QgSW50UG9pbnQmIHBvaW50LCBTZWxlY3Rpb25IYW5kbGVQb3NpdGlv
biBoYW5kbGVQb3NpdGlvbiwgZmxvYXQmIGdyb3dUaHJlc2hvbGQsIGZsb2F0JiBzaHJpbmtUaHJl
c2hvbGQsIFNlbGVjdGlvbkZsYWdzJiBmbGFncykKK3sKKyAgICBGcmFtZSYgZnJhbWUgPSBtX3Bh
Z2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOworICAgIFJlZlB0cjxS
YW5nZT4gY3VycmVudFJhbmdlID0gbV9jdXJyZW50QmxvY2tTZWxlY3Rpb24gPyBtX2N1cnJlbnRC
bG9ja1NlbGVjdGlvbi5nZXQoKSA6IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCk7CisgICAgaWYgKCFjdXJyZW50UmFuZ2UpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIFJlZlB0cjxSYW5nZT4gbmV3UmFuZ2UgPSBzaG91bGRFeHBhbmQoaGFuZGxl
UG9zaXRpb24sIHNlbGVjdGlvbkJveEZvclJhbmdlKGN1cnJlbnRSYW5nZS5nZXQoKSksIHBvaW50
KSA/IGV4cGFuZGVkUmFuZ2VGcm9tSGFuZGxlKCpjdXJyZW50UmFuZ2UsIGhhbmRsZVBvc2l0aW9u
KSA6IGNvbnRyYWN0ZWRSYW5nZUZyb21IYW5kbGUoKmN1cnJlbnRSYW5nZSwgaGFuZGxlUG9zaXRp
b24sIGZsYWdzKTsKKyAgICAKKyAgICBpZiAobmV3UmFuZ2UpIHsKKyAgICAgICAgbV9jdXJyZW50
QmxvY2tTZWxlY3Rpb24gPSBuZXdSYW5nZTsKKyAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZShuZXdSYW5nZS5nZXQoKSwgVlBfREVGQVVMVF9BRkZJTklUWSwgdHJ1ZSwg
VXNlclRyaWdnZXJlZCk7CisgICAgfQorICAgIAorICAgIGNvbXB1dGVFeHBhbmRBbmRTaHJpbmtU
aHJlc2hvbGRzRm9ySGFuZGxlKHBvaW50LCBoYW5kbGVQb3NpdGlvbiwgZ3Jvd1RocmVzaG9sZCwg
c2hyaW5rVGhyZXNob2xkKTsKKyAgICByZXR1cm4gbmV3UmFuZ2U7Cit9CisKK3ZvaWQgV2ViUGFn
ZTo6dXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2goY29uc3QgSW50UG9pbnQmIHBvaW50LCB1
aW50MzJfdCB0b3VjaCwgdWludDMyX3QgaGFuZGxlUG9zaXRpb24pCit7CisgICAgRnJhbWUmIGZy
YW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKKyAg
ICBJbnRQb2ludCBhZGp1c3RlZFBvaW50ID0gZnJhbWUudmlldygpLT5yb290Vmlld1RvQ29udGVu
dHMocG9pbnQpOworICAgIAorICAgIGZsb2F0IGdyb3dUaHJlc2hvbGQgPSAwOworICAgIGZsb2F0
IHNocmlua1RocmVzaG9sZCA9IDA7CisgICAgU2VsZWN0aW9uRmxhZ3MgZmxhZ3MgPSBOb25lOwor
ICAgIAorICAgIHN3aXRjaCAoc3RhdGljX2Nhc3Q8U2VsZWN0aW9uVG91Y2g+KHRvdWNoKSkgewor
ICAgIGNhc2UgU2VsZWN0aW9uVG91Y2g6OlN0YXJ0ZWQ6CisgICAgICAgIGNvbXB1dGVFeHBhbmRB
bmRTaHJpbmtUaHJlc2hvbGRzRm9ySGFuZGxlKGFkanVzdGVkUG9pbnQsIHN0YXRpY19jYXN0PFNl
bGVjdGlvbkhhbmRsZVBvc2l0aW9uPihoYW5kbGVQb3NpdGlvbiksIGdyb3dUaHJlc2hvbGQsIHNo
cmlua1RocmVzaG9sZCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2VsZWN0aW9uVG91Y2g6
OkVuZGVkOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFNlbGVjdGlvblRvdWNoOjpNb3ZlZDoK
KyAgICAgICAgY2hhbmdlQmxvY2tTZWxlY3Rpb24oYWRqdXN0ZWRQb2ludCwgc3RhdGljX2Nhc3Q8
U2VsZWN0aW9uSGFuZGxlUG9zaXRpb24+KGhhbmRsZVBvc2l0aW9uKSwgZ3Jvd1RocmVzaG9sZCwg
c2hyaW5rVGhyZXNob2xkLCBmbGFncyk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpEaWRVcGRhdGVCbG9ja1NlbGVjdGlvbldpdGhUb3VjaCh0b3VjaCwgc3RhdGljX2Nhc3Q8
dWludDMyX3Q+KGZsYWdzKSwgZ3Jvd1RocmVzaG9sZCwgc2hyaW5rVGhyZXNob2xkKSk7Cit9Cisj
ZW5kaWYKIAogdm9pZCBXZWJQYWdlOjpjbGVhclNlbGVjdGlvbigpCiB7Cg==
</data>
<flag name="review"
          id="350931"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>