<?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>126828</bug_id>
          
          <creation_ts>2014-01-11 18:40:42 -0800</creation_ts>
          <short_desc>Web Inspector: protocol generator should support integer-typed declarations</short_desc>
          <delta_ts>2014-01-13 12:06:14 -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>Web Inspector</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Blaze Burg">bburg</reporter>
          <assigned_to name="Blaze Burg">bburg</assigned_to>
          <cc>eflews.bot</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>joepeck</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>966868</commentid>
    <comment_count>0</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2014-01-11 18:40:42 -0800</bug_when>
    <thetext>If you edit Runtime.json, the inspector code generator does not re-run (or at least, the files that ScriptDebugServer/etc in WebCore sees are stale).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966870</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-01-11 18:40:59 -0800</bug_when>
    <thetext>&lt;rdar://problem/15800306&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966875</commentid>
    <comment_count>2</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2014-01-11 19:15:30 -0800</bug_when>
    <thetext>Disregard the previous comment; it seems the code generator was simply ignoring an added type, make it appear to be stale.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966894</commentid>
    <comment_count>3</comment_count>
      <attachid>220954</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2014-01-11 21:01:51 -0800</bug_when>
    <thetext>Created attachment 220954
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966943</commentid>
    <comment_count>4</comment_count>
      <attachid>220954</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2014-01-12 05:16:43 -0800</bug_when>
    <thetext>Comment on attachment 220954
patch

Attachment 220954 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/4554984884535296</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967027</commentid>
    <comment_count>5</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2014-01-12 14:08:50 -0800</bug_when>
    <thetext>The EFL failure is an unrelated ICE on Document.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967051</commentid>
    <comment_count>6</comment_count>
      <attachid>220986</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2014-01-12 15:19:22 -0800</bug_when>
    <thetext>Created attachment 220986
New generated type builder - includes typedef BreakpointActionIdentifier</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967406</commentid>
    <comment_count>7</comment_count>
      <attachid>220954</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-01-13 10:49:48 -0800</bug_when>
    <thetext>Comment on attachment 220954
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967439</commentid>
    <comment_count>8</comment_count>
      <attachid>220954</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2014-01-13 12:06:11 -0800</bug_when>
    <thetext>Comment on attachment 220954
patch

Clearing flags on attachment: 220954

Committed r161900: &lt;http://trac.webkit.org/changeset/161900&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>967440</commentid>
    <comment_count>9</comment_count>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2014-01-13 12:06:14 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220954</attachid>
            <date>2014-01-11 21:01:51 -0800</date>
            <delta_ts>2014-01-13 12:06:11 -0800</delta_ts>
            <desc>patch</desc>
            <filename>bug-126828-20140111210150.patch</filename>
            <type>text/plain</type>
            <size>7634</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYxNjQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
MDg5OTQ4Nzk0MDFhNDYzOWJmMmRiYzMyNWFlZDg4ZmZlYWI5N2I0Li44OTU0MTU2YjdjNmEzODZk
OWIxZGQ5NTJmZjA0OTc3Mjc3NjQyNGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MCBAQAorMjAxNC0wMS0xMSAgQnJpYW4gQnVyZyAgPGJidXJnQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBwcm90b2NvbCBnZW5lcmF0b3Igc2hvdWxkIHN1cHBvcnQg
aW50ZWdlci10eXBlZCBkZWNsYXJhdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyNjgyOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZCBuZXcgYmluZGluZyBjbGFzc2VzIGZvciBwYXJhbWV0ZXIv
YWQtaG9jIGFuZCBub3JtYWwgaW50ZWdlciB0eXBlIGRlY2xhcmF0aW9ucy4KKworICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHk6CisgICAgICAgIChU
eXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fKToKKyAgICAgICAgKFR5cGVCaW5k
aW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uUGxhaW5JbnRlZ2VyKToKKyAgICAgICAgKFR5
cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uUGxhaW5JbnRlZ2VyLnJlc29sdmVf
aW5uZXIpOgorICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5Q
bGFpbkludGVnZXIucmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdCk6CisgICAgICAgIChUeXBlQmlu
ZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLlBsYWluSW50ZWdlci5yZXF1ZXN0X2ludGVy
bmFsX3J1bnRpbWVfY2FzdCk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVj
bGFyYXRpb25fLlBsYWluSW50ZWdlci5nZXRfY29kZV9nZW5lcmF0b3IpOgorICAgICAgICAoVHlw
ZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5QbGFpbkludGVnZXIuZ2V0X3ZhbGlk
YXRvcl9jYWxsX3RleHQpOgorICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xh
cmF0aW9uXy5QbGFpbkludGVnZXIucmVkdWNlX3RvX3Jhd190eXBlKToKKyAgICAgICAgKFR5cGVC
aW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uUGxhaW5JbnRlZ2VyLmdldF90eXBlX21v
ZGVsKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uUGxh
aW5JbnRlZ2VyLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKToKKyAgICAgICAg
KFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uUGxhaW5JbnRlZ2VyLmdldF9h
cnJheV9pdGVtX2NfdHlwZV90ZXh0KToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlw
ZV9kZWNsYXJhdGlvbl8uVHlwZWRlZkludGVnZXIpOgorICAgICAgICAoVHlwZUJpbmRpbmdzLmNy
ZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5UeXBlZGVmSW50ZWdlci5yZXNvbHZlX2lubmVyKToKKyAg
ICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uVHlwZWRlZkludGVn
ZXIucmVxdWVzdF91c2VyX3J1bnRpbWVfY2FzdCk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3Jl
YXRlX3R5cGVfZGVjbGFyYXRpb25fLlR5cGVkZWZJbnRlZ2VyLnJlcXVlc3RfaW50ZXJuYWxfcnVu
dGltZV9jYXN0KToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlv
bl8uVHlwZWRlZkludGVnZXIuZ2V0X2NvZGVfZ2VuZXJhdG9yKToKKyAgICAgICAgKFR5cGVCaW5k
aW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uVHlwZWRlZkludGVnZXIuZ2V0X2NvZGVfZ2Vu
ZXJhdG9yLkNvZGVHZW5lcmF0b3IpOgorICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBl
X2RlY2xhcmF0aW9uXy5UeXBlZGVmSW50ZWdlci5nZXRfY29kZV9nZW5lcmF0b3IuQ29kZUdlbmVy
YXRvci5nZW5lcmF0ZV90eXBlX2J1aWxkZXIpOgorICAgICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0
ZV90eXBlX2RlY2xhcmF0aW9uXy5UeXBlZGVmSW50ZWdlci5nZXRfY29kZV9nZW5lcmF0b3IuQ29k
ZUdlbmVyYXRvci5nZW5lcmF0ZV90eXBlX2J1aWxkZXIuaW50KToKKyAgICAgICAgKFR5cGVCaW5k
aW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uVHlwZWRlZkludGVnZXIuZ2V0X2NvZGVfZ2Vu
ZXJhdG9yLkNvZGVHZW5lcmF0b3IucmVnaXN0ZXJfdXNlKToKKyAgICAgICAgKFR5cGVCaW5kaW5n
cy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8uVHlwZWRlZkludGVnZXIuZ2V0X2NvZGVfZ2VuZXJh
dG9yLkNvZGVHZW5lcmF0b3IuZ2V0X2dlbmVyYXRlX3Bhc3NfaWQpOgorICAgICAgICAoVHlwZUJp
bmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5UeXBlZGVmSW50ZWdlci5nZXRfdmFsaWRh
dG9yX2NhbGxfdGV4dCk6CisgICAgICAgIChUeXBlQmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFy
YXRpb25fLlR5cGVkZWZJbnRlZ2VyLnJlZHVjZV90b19yYXdfdHlwZSk6CisgICAgICAgIChUeXBl
QmluZGluZ3MuY3JlYXRlX3R5cGVfZGVjbGFyYXRpb25fLlR5cGVkZWZJbnRlZ2VyLmdldF90eXBl
X21vZGVsKToKKyAgICAgICAgKFR5cGVCaW5kaW5ncy5jcmVhdGVfdHlwZV9kZWNsYXJhdGlvbl8u
VHlwZWRlZkludGVnZXIuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4pOgorICAg
ICAgICAoVHlwZUJpbmRpbmdzLmNyZWF0ZV90eXBlX2RlY2xhcmF0aW9uXy5UeXBlZGVmSW50ZWdl
ci5nZXRfYXJyYXlfaXRlbV9jX3R5cGVfdGV4dCk6CisKIDIwMTQtMDEtMDcgIE1hcmsgSGFobmVu
YmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBNYXJraW5nIHNob3VsZCBi
ZSBnZW5lcmF0aW9uYWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXggOWE4
NzBjMDYyZjY3NjNjYmFmMjI0ODI2NjgwNzY4ZDAyNjkyY2YzNy4uMDdlNjc0MjM1YzVkZjFhNDhj
M2NkNzY3NzY1NGU2ZTIzZjg3M2NmYSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3Iu
cHkKQEAgLTExMTIsNiArMTExMiwxMDYgQEAgY2xhc3MgVHlwZUJpbmRpbmdzOgogCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBUeXBlZGVmU3RyaW5nCiAKKyAgICAgICAgZWxpZiBqc29uX3R5
cGFibGVbInR5cGUiXSA9PSAiaW50ZWdlciI6CisgICAgICAgICAgICAgICAgaWYgaGVscGVyLmlz
X2FkX2hvYzoKKworICAgICAgICAgICAgICAgICAgICBjbGFzcyBQbGFpbkludGVnZXI6CisgICAg
ICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAg
IGRlZiByZXNvbHZlX2lubmVyKGNscywgcmVzb2x2ZV9jb250ZXh0KToKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRo
b2QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X3VzZXJfcnVudGltZV9jYXN0
KHJlcXVlc3QpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigi
VW5zdXBwb3J0ZWQiKQorCisgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisg
ICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVxdWVzdF9pbnRlcm5hbF9ydW50aW1lX2Nhc3Qo
KToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZXRfY29k
ZV9nZW5lcmF0b3IoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQor
CisgICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZiBnZXRfdmFsaWRhdG9yX2NhbGxfdGV4dChjbHMpOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5JbnQuZ2V0X3Jhd192YWxpZGF0b3JfY2FsbF90
ZXh0KCkKKworICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5JbnQKKworICAgICAgICAgICAgICAgICAgICAg
ICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF90eXBlX21v
ZGVsKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFR5cGVNb2RlbC5JbnQK
KworICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAgICAgICAgICAg
ICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2FycmF5
X2l0ZW1fY190eXBlX3RleHQoY2xzKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gY2xzLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9hcnJheV9pdGVtX3Jhd19jX3R5cGVfdGV4
dCgpCisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBsYWluSW50ZWdlcgorCisgICAgICAg
ICAgICAgICAgZWxzZToKKworICAgICAgICAgICAgICAgICAgICBjbGFzcyBUeXBlZGVmSW50ZWdl
cjoKKyAgICAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmIHJlc29sdmVfaW5uZXIoY2xzLCByZXNvbHZlX2NvbnRleHQpOgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgICAgICAgICAgICAgQHN0
YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlcXVlc3RfdXNlcl9ydW50
aW1lX2Nhc3QocmVxdWVzdCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXhj
ZXB0aW9uKCJVbnN1cHBvcnRlZCIpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNt
ZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZXF1ZXN0X2ludGVybmFsX3J1bnRp
bWVfY2FzdCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJhd1R5cGVzLkludC5yZXF1
ZXN0X3Jhd19pbnRlcm5hbF9ydW50aW1lX2Nhc3QoKQorCisgICAgICAgICAgICAgICAgICAgICAg
ICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X2NvZGVfZ2Vu
ZXJhdG9yKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgQ29kZUdlbmVyYXRv
cjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVyKHdyaXRl
ciwgZ2VuZXJhdGVfY29udGV4dCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBoZWxwZXIud3JpdGVfZG9jKHdyaXRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZpeGVkX3R5cGVfbmFtZS5vdXRwdXRfY29tbWVudCh3cml0ZXIpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgidHlwZWRlZiBpbnQgIikK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoZml4ZWRf
dHlwZV9uYW1lLmNsYXNzX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIuYXBwZW5kKCI7XG5cbiIpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVn
aXN0ZXJfdXNlKGZvcndhcmRfbGlzdGVuZXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFzcworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNt
ZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF9nZW5lcmF0ZV9w
YXNzX2lkKCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlw
ZUJ1aWxkZXJQYXNzLlRZUEVERUYKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBDb2RlR2VuZXJhdG9yCisKKyAgICAgICAgICAgICAgICAgICAgICAgIEBjbGFzc21ldGhvZAor
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF92YWxpZGF0b3JfY2FsbF90ZXh0KGNscyk6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLkludC5nZXRfcmF3
X3ZhbGlkYXRvcl9jYWxsX3RleHQoKQorCisgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGlj
bWV0aG9kCisgICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhd1R5cGVzLkludAorCisgICAg
ICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAgICAgICAg
ICBkZWYgZ2V0X3R5cGVfbW9kZWwoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gVHlwZU1vZGVsLkludAorCisgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9k
CisgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9u
X3BhdHRlcm4oKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisg
ICAgICAgICAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZiBnZXRfYXJyYXlfaXRlbV9jX3R5cGVfdGV4dChjbHMpOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBoZWxwZXIuZnVsbF9uYW1lX3ByZWZpeF9mb3JfdXNlICsgZml4
ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlw
ZWRlZkludGVnZXIKKwogICAgICAgICBlbGlmIGpzb25fdHlwYWJsZVsidHlwZSJdID09ICJvYmpl
Y3QiOgogICAgICAgICAgICAgaWYgInByb3BlcnRpZXMiIGluIGpzb25fdHlwYWJsZToKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>220986</attachid>
            <date>2014-01-12 15:19:22 -0800</date>
            <delta_ts>2014-01-12 15:24:06 -0800</delta_ts>
            <desc>New generated type builder - includes typedef BreakpointActionIdentifier</desc>
            <filename>InspectorJSTypeBuilders.h</filename>
            <type>text/plain</type>
            <size>48575</size>
            <attacher name="Blaze Burg">bburg</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckluc3BlY3Rvci5weQoKLy8gQ29weXJpZ2h0IChjKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLy8gQ29weXJpZ2h0IChjKSAyMDExIFRoZSBDaHJvbWl1
bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgovLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi8vIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUuCgojaWZuZGVmIEluc3BlY3RvckpTVHlwZUJ1aWxkZXJzX2gK
I2RlZmluZSBJbnNwZWN0b3JKU1R5cGVCdWlsZGVyc19oCgojaWYgRU5BQkxFKElOU1BFQ1RPUikK
CiNpbmNsdWRlIDxpbnNwZWN0b3IvSW5zcGVjdG9yVHlwZUJ1aWxkZXIuaD4KCiNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgojaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KCm5hbWVzcGFjZSBJ
bnNwZWN0b3IgewoKbmFtZXNwYWNlIFR5cGVCdWlsZGVyIHsKCi8vIEZvcndhcmQgZGVjbGFyYXRp
b25zLgojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCm5hbWVzcGFjZSBEZWJ1Z2dlciB7
CmNsYXNzIFNjb3BlOwp9IC8vIERlYnVnZ2VyCgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRf
REVCVUdHRVIpCm5hbWVzcGFjZSBSdW50aW1lIHsKY2xhc3MgUmVtb3RlT2JqZWN0OwpjbGFzcyBP
YmplY3RQcmV2aWV3OwpjbGFzcyBQcm9wZXJ0eVByZXZpZXc7Cn0gLy8gUnVudGltZQoKLy8gRW5k
IG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgoKLy8gVHlwZWRlZnMuCiNpZiBFTkFCTEUoSkFWQVND
UklQVF9ERUJVR0dFUikKbmFtZXNwYWNlIERlYnVnZ2VyIHsKLyogQnJlYWtwb2ludCBpZGVudGlm
aWVyLiAqLwp0eXBlZGVmIFN0cmluZyBCcmVha3BvaW50SWQ7CgovKiBCcmVha3BvaW50IGFjdGlv
biBpZGVudGlmaWVyLiAqLwp0eXBlZGVmIGludCBCcmVha3BvaW50QWN0aW9uSWRlbnRpZmllcjsK
Ci8qIFVuaXF1ZSBzY3JpcHQgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJpbmcgU2NyaXB0SWQ7
CgovKiBDYWxsIGZyYW1lIGlkZW50aWZpZXIuICovCnR5cGVkZWYgU3RyaW5nIENhbGxGcmFtZUlk
OwoKfSAvLyBEZWJ1Z2dlcgoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQpu
YW1lc3BhY2UgUnVudGltZSB7Ci8qIFVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4gKi8KdHlwZWRl
ZiBTdHJpbmcgUmVtb3RlT2JqZWN0SWQ7CgovKiBJZCBvZiBhbiBleGVjdXRpb24gY29udGV4dC4g
Ki8KdHlwZWRlZiBpbnQgRXhlY3V0aW9uQ29udGV4dElkOwoKLyogVW5pcXVlIGZyYW1lIGlkZW50
aWZpZXIuIEZJWE1FOiBEdXBsaWNhdGUgb2YgTmV0d29yay5GcmFtZUlkIDxodHRwczovL3dlYmtp
dC5vcmcvYi8xMjU2NjQ+IFdlYiBJbnNwZWN0b3I6IEZJWCBUeXBlIERlcGVuZGVuY3kgSXNzdWVz
ICovCnR5cGVkZWYgU3RyaW5nIFJ1bnRpbWVGcmFtZUlkOwoKfSAvLyBSdW50aW1lCgovLyBFbmQg
b2YgdHlwZWRlZnMuCgoKCkpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBnZXRKU0VudW1Db25zdGFu
dFZhbHVlKGludCBjb2RlKTsKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKbmFtZXNw
YWNlIERlYnVnZ2VyIHsKLyogTG9jYXRpb24gaW4gdGhlIHNvdXJjZSBjb2RlLiAqLwpjbGFzcyBM
b2NhdGlvbiA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UgewpwdWJsaWM6
CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgU2NyaXB0SWRTZXQg
PSAxIDw8IDAsCiAgICAgICAgTGluZU51bWJlclNldCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAoU2NyaXB0SWRTZXQgfCBMaW5lTnVtYmVyU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0
ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxh
dGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKkxvY2F0
aW9uKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9p
bl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0K
ICAgICAgICBmcmllbmQgY2xhc3MgTG9jYXRpb247CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBTY3JpcHRJZFNldD4mIHNldFNjcmlwdElkKGNvbnN0IEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkRlYnVnZ2VyOjpTY3JpcHRJZCYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU2NyaXB0SWRTZXQpLCBwcm9wZXJ0eV9zY3JpcHRJ
ZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRl
cmFsKCJzY3JpcHRJZCIpLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U2Ny
aXB0SWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTGluZU51bWJl
clNldD4mIHNldExpbmVOdW1iZXIoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIExpbmVOdW1iZXJTZXQpLCBwcm9wZXJ0eV9saW5lTnVtYmVy
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcihBU0NJSUxpdGVy
YWwoImxpbmVOdW1iZXIiKSwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPExp
bmVOdW1iZXJTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8TG9jYXRp
b24+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxs
RmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoc2l6ZW9mKExvY2F0aW9uKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Qp
LCBjYW5ub3RfY2FzdCk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQ
dHI8TG9jYXRpb24+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIFBhc3NSZWZQdHI8
TG9jYXRpb24+IHJlbGVhc2UoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxM
b2NhdGlvbj4oKnRoaXMpLnJlbGVhc2UoKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAg
KiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8TG9jYXRpb24+IHJlc3VsdCA9
IExvY2F0aW9uOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRTY3JpcHRJZCguLi4pCiAgICAgKiAg
ICAgLnNldExpbmVOdW1iZXIoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICB9CiAgICB0eXBlZGVm
IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKCiAg
ICB2b2lkIHNldENvbHVtbk51bWJlcihpbnQgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0
TnVtYmVyKEFTQ0lJTGl0ZXJhbCgiY29sdW1uTnVtYmVyIiksIHZhbHVlKTsKICAgIH0KI2lmICFB
U1NFUlRfRElTQUJMRUQKICAgIHN0YXRpYyBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFzc2VydENv
cnJlY3RWYWx1ZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSk7CiNlbmRpZiAgLy8g
IUFTU0VSVF9ESVNBQkxFRAp9OwoKLyogQWN0aW9uIHRvIHBlcmZvcm0gd2hlbiBhIGJyZWFrcG9p
bnQgaXMgdHJpZ2dlcmVkLiAqLwpjbGFzcyBCcmVha3BvaW50QWN0aW9uIDogcHVibGljIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHBy
b3BlcnR5IG5hbWUgJ3R5cGUnIHdoaWxlIGdlbmVyYXRpbmcgQnJlYWtwb2ludEFjdGlvbi4KICAg
IHN0cnVjdCBUeXBlIHsKICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBMb2cgPSAwLAog
ICAgICAgICAgICBFdmFsdWF0ZSA9IDEsCiAgICAgICAgICAgIFNvdW5kID0gMiwKICAgICAgICAg
ICAgUHJvYmUgPSAzLAogICAgICAgIH07CiAgICB9OyAvLyBzdHJ1Y3QgVHlwZQogICAgZW51bSB7
CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFR5cGVTZXQgPSAxIDw8IDAsCiAgICAg
ICAgQWxsRmllbGRzU2V0ID0gKFR5cGVTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFU
RT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qQnJlYWtwb2ludEFjdGlv
biovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5f
bm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAg
ICAgICAgZnJpZW5kIGNsYXNzIEJyZWFrcG9pbnRBY3Rpb247CiAgICBwdWJsaWM6CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShUeXBlOjpFbnVtIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR5cGVTZXQpLCBwcm9w
ZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhB
U0NJSUxpdGVyYWwoInR5cGUiKSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0SlNFbnVtQ29u
c3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8QnJlYWtwb2ludEFjdGlvbj4m
ICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVs
ZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChz
aXplb2YoQnJlYWtwb2ludEFjdGlvbikgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0KSwgY2Fubm90X2Nhc3QpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmUHRyPEJyZWFrcG9pbnRBY3Rpb24+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAg
IFBhc3NSZWZQdHI8QnJlYWtwb2ludEFjdGlvbj4gcmVsZWFzZSgpCiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm4gUmVmUHRyPEJyZWFrcG9pbnRBY3Rpb24+KCp0aGlzKS5yZWxlYXNlKCk7CiAg
ICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAg
ICogUmVmUHRyPEJyZWFrcG9pbnRBY3Rpb24+IHJlc3VsdCA9IEJyZWFrcG9pbnRBY3Rpb246OmNy
ZWF0ZSgpCiAgICAgKiAgICAgLnNldFR5cGUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICB9CiAg
ICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRy
YWl0czsKCiAgICB2b2lkIHNldERhdGEoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAg
ICB0aGlzLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJkYXRhIiksIHZhbHVlKTsKICAgIH0KfTsK
Ci8qIEV4dHJhIG9wdGlvbnMgdGhhdCBtb2RpZnkgYnJlYWtwb2ludCBiZWhhdmlvci4gKi8KY2xh
c3MgQnJlYWtwb2ludE9wdGlvbnMgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RC
YXNlIHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAg
IEFsbEZpZWxkc1NldCA9IDAKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xh
c3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypCcmVha3BvaW50T3B0aW9ucyovSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJp
ZW5kIGNsYXNzIEJyZWFrcG9pbnRPcHRpb25zOwogICAgcHVibGljOgoKICAgICAgICBvcGVyYXRv
ciBSZWZQdHI8QnJlYWtwb2ludE9wdGlvbnM+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEJyZWFrcG9pbnRPcHRpb25zKSA9PSBz
aXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CiAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8QnJlYWtwb2ludE9wdGlvbnM+Kj4o
Jm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIFBhc3NSZWZQdHI8QnJlYWtwb2ludE9wdGlv
bnM+IHJlbGVhc2UoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxCcmVha3Bv
aW50T3B0aW9ucz4oKnRoaXMpLnJlbGVhc2UoKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAg
ICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8QnJlYWtwb2ludE9wdGlv
bnM+IHJlc3VsdCA9IEJyZWFrcG9pbnRPcHRpb25zOjpjcmVhdGUoKTsKICAgICAqLwogICAgc3Rh
dGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7
CiAgICB9CiAgICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFp
dHMgSXRlbVRyYWl0czsKCiAgICB2b2lkIHNldENvbmRpdGlvbihjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImNvbmRpdGlvbiIp
LCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRBY3Rpb25zKFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkJy
ZWFrcG9pbnRBY3Rpb24+ID4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0VmFsdWUoQVND
SUlMaXRlcmFsKCJhY3Rpb25zIiksIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldEF1dG9Db250
aW51ZShib29sIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEJvb2xlYW4oQVNDSUlMaXRl
cmFsKCJhdXRvQ29udGludWUiKSwgdmFsdWUpOwogICAgfQp9OwoKLyogSW5mb3JtYXRpb24gYWJv
dXQgdGhlIGZ1bmN0aW9uLiAqLwpjbGFzcyBGdW5jdGlvbkRldGFpbHMgOiBwdWJsaWMgSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9G
aWVsZHNTZXQgPSAwLAogICAgICAgIExvY2F0aW9uU2V0ID0gMSA8PCAwLAogICAgICAgIEFsbEZp
ZWxkc1NldCA9IChMb2NhdGlvblNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgog
ICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBC
dWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypGdW5jdGlvbkRldGFpbHMqL0lu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9p
bml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAg
IGZyaWVuZCBjbGFzcyBGdW5jdGlvbkRldGFpbHM7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBMb2NhdGlvblNldD4mIHNldExvY2F0aW9uKFBhc3NSZWZQdHI8SW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBMb2NhdGlvblNldCksIHByb3BlcnR5X2xv
Y2F0aW9uX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKEFTQ0lJ
TGl0ZXJhbCgibG9jYXRpb24iKSwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PExvY2F0aW9uU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEZ1bmN0
aW9uRGV0YWlscz4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChzaXplb2YoRnVuY3Rpb25EZXRhaWxzKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8RnVuY3Rpb25EZXRhaWxzPio+KCZtX3Jlc3VsdCk7CiAgICAgICAg
fQoKICAgICAgICBQYXNzUmVmUHRyPEZ1bmN0aW9uRGV0YWlscz4gcmVsZWFzZSgpCiAgICAgICAg
ewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPEZ1bmN0aW9uRGV0YWlscz4oKnRoaXMpLnJlbGVh
c2UoKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0
b3I6CiAgICAgKiBSZWZQdHI8RnVuY3Rpb25EZXRhaWxzPiByZXN1bHQgPSBGdW5jdGlvbkRldGFp
bHM6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldExvY2F0aW9uKC4uLik7CiAgICAgKi8KICAgIHN0
YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBC
dWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkp
OwogICAgfQogICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1Y3RJdGVtVHJh
aXRzIEl0ZW1UcmFpdHM7CgogICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgibmFtZSIpLCB2YWx1ZSk7
CiAgICB9CgogICAgdm9pZCBzZXREaXNwbGF5TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ewogICAgICAgIHRoaXMtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImRpc3BsYXlOYW1lIiksIHZh
bHVlKTsKICAgIH0KCiAgICB2b2lkIHNldEluZmVycmVkTmFtZShjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImluZmVycmVkTmFt
ZSIpLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRTY29wZUNoYWluKFBhc3NSZWZQdHI8SW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6RGVidWdn
ZXI6OlNjb3BlPiA+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFZhbHVlKEFTQ0lJTGl0
ZXJhbCgic2NvcGVDaGFpbiIpLCB2YWx1ZSk7CiAgICB9CiAgICBzdGF0aWMgUGFzc1JlZlB0cjxG
dW5jdGlvbkRldGFpbHM+IHJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0
b3JWYWx1ZT4gdmFsdWUpCiAgICB7CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0PiBvYmplY3Q7CiAgICAgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0KCZv
YmplY3QpOwogICAgICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7CiNpZiAhQVNT
RVJUX0RJU0FCTEVECiAgICAgICAgYXNzZXJ0Q29ycmVjdFZhbHVlKG9iamVjdC5nZXQoKSk7CiNl
bmRpZiAgLy8gIUFTU0VSVF9ESVNBQkxFRAogICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihG
dW5jdGlvbkRldGFpbHMpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2Up
LCB0eXBlX2Nhc3RfcHJvYmxlbSk7CiAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZ1bmN0aW9u
RGV0YWlscyo+KHN0YXRpY19jYXN0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSo+KG9i
amVjdC5nZXQoKSkpOwogICAgfQoKI2lmICFBU1NFUlRfRElTQUJMRUQKICAgIHN0YXRpYyBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3I6Okluc3BlY3Rv
clZhbHVlKiB2YWx1ZSk7CiNlbmRpZiAgLy8gIUFTU0VSVF9ESVNBQkxFRAp9OwoKLyogSmF2YVNj
cmlwdCBjYWxsIGZyYW1lLiBBcnJheSBvZiBjYWxsIGZyYW1lcyBmb3JtIHRoZSBjYWxsIHN0YWNr
LiAqLwpjbGFzcyBDYWxsRnJhbWUgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RC
YXNlIHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAg
IENhbGxGcmFtZUlkU2V0ID0gMSA8PCAwLAogICAgICAgIEZ1bmN0aW9uTmFtZVNldCA9IDEgPDwg
MSwKICAgICAgICBMb2NhdGlvblNldCA9IDEgPDwgMiwKICAgICAgICBTY29wZUNoYWluU2V0ID0g
MSA8PCAzLAogICAgICAgIFRoaXNTZXQgPSAxIDw8IDQsCiAgICAgICAgQWxsRmllbGRzU2V0ID0g
KENhbGxGcmFtZUlkU2V0IHwgRnVuY3Rpb25OYW1lU2V0IHwgTG9jYXRpb25TZXQgfCBTY29wZUNo
YWluU2V0IHwgVGhpc1NldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xh
c3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypDYWxsRnJhbWUqL0luc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsK
ICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFz
cyBDYWxsRnJhbWU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDYWxsRnJh
bWVJZFNldD4mIHNldENhbGxGcmFtZUlkKGNvbnN0IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkRl
YnVnZ2VyOjpDYWxsRnJhbWVJZCYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgQ2FsbEZyYW1lSWRTZXQpLCBwcm9wZXJ0eV9jYWxsRnJhbWVJZF9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJjYWxsRnJhbWVJZCIpLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q2Fs
bEZyYW1lSWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRnVuY3Rp
b25OYW1lU2V0PiYgc2V0RnVuY3Rpb25OYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRnVuY3Rpb25OYW1lU2V0KSwg
cHJvcGVydHlfZnVuY3Rpb25OYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImZ1bmN0aW9uTmFtZSIpLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8RnVuY3Rpb25OYW1lU2V0PigpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IExvY2F0aW9uU2V0PiYgc2V0TG9jYXRpb24oUGFzc1JlZlB0cjxJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExvY2F0aW9uU2V0KSwgcHJv
cGVydHlfbG9jYXRpb25fYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFs
dWUoQVNDSUlMaXRlcmFsKCJsb2NhdGlvbiIpLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8TG9jYXRpb25TZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgU2NvcGVDaGFpblNldD4mIHNldFNjb3BlQ2hhaW4oUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6U2NvcGU+
ID4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
U2NvcGVDaGFpblNldCksIHByb3BlcnR5X3Njb3BlQ2hhaW5fYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJzY29wZUNoYWluIiksIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTY29wZUNoYWluU2V0PigpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRoaXNTZXQ+JiBzZXRUaGlzKFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUaGlzU2V0KSwgcHJv
cGVydHlfdGhpc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRWYWx1ZShB
U0NJSUxpdGVyYWwoInRoaXMiKSwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFRoaXNTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q2FsbEZyYW1l
PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZp
ZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KHNpemVvZihDYWxsRnJhbWUpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCks
IGNhbm5vdF9jYXN0KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0
cjxDYWxsRnJhbWU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIFBhc3NSZWZQdHI8
Q2FsbEZyYW1lPiByZWxlYXNlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8
Q2FsbEZyYW1lPigqdGhpcykucmVsZWFzZSgpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAg
ICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDYWxsRnJhbWU+IHJlc3Vs
dCA9IENhbGxGcmFtZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0Q2FsbEZyYW1lSWQoLi4uKQog
ICAgICogICAgIC5zZXRGdW5jdGlvbk5hbWUoLi4uKQogICAgICogICAgIC5zZXRMb2NhdGlvbigu
Li4pCiAgICAgKiAgICAgLnNldFNjb3BlQ2hhaW4oLi4uKQogICAgICogICAgIC5zZXRUaGlzKC4u
Lik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAg
ewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCkpOwogICAgfQogICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7CiAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
YWxsRnJhbWU+IHJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1
ZT4gdmFsdWUpCiAgICB7CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiBvYmplY3Q7CiAgICAgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0KCZvYmplY3Qp
OwogICAgICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7CiNpZiAhQVNTRVJUX0RJ
U0FCTEVECiAgICAgICAgYXNzZXJ0Q29ycmVjdFZhbHVlKG9iamVjdC5nZXQoKSk7CiNlbmRpZiAg
Ly8gIUFTU0VSVF9ESVNBQkxFRAogICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihDYWxsRnJh
bWUpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UpLCB0eXBlX2Nhc3Rf
cHJvYmxlbSk7CiAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENhbGxGcmFtZSo+KHN0YXRpY19j
YXN0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSo+KG9iamVjdC5nZXQoKSkpOwogICAg
fQoKI2lmICFBU1NFUlRfRElTQUJMRUQKICAgIHN0YXRpYyBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSk7CiNl
bmRpZiAgLy8gIUFTU0VSVF9ESVNBQkxFRAp9OwoKLyogU2NvcGUgZGVzY3JpcHRpb24uICovCmNs
YXNzIFNjb3BlIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CnB1Ymxp
YzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3R5cGUnIHdoaWxlIGdlbmVyYXRp
bmcgU2NvcGUuCiAgICBzdHJ1Y3QgVHlwZSB7CiAgICAgICAgZW51bSBFbnVtIHsKICAgICAgICAg
ICAgR2xvYmFsID0gNCwKICAgICAgICAgICAgTG9jYWwgPSA1LAogICAgICAgICAgICBXaXRoID0g
NiwKICAgICAgICAgICAgQ2xvc3VyZSA9IDcsCiAgICAgICAgICAgIENhdGNoID0gOCwKICAgICAg
ICB9OwojaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJl
Y3RWYWx1ZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSk7CiNlbmRpZiAgLy8gIUFT
U0VSVF9ESVNBQkxFRAogICAgfTsgLy8gc3RydWN0IFR5cGUKICAgIGVudW0gewogICAgICAgIE5v
RmllbGRzU2V0ID0gMCwKICAgICAgICBUeXBlU2V0ID0gMSA8PCAwLAogICAgICAgIE9iamVjdFNl
dCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoVHlwZVNldCB8IE9iamVjdFNldCkK
ICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBw
cml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbV9yZXN1
bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
KFBhc3NSZWZQdHI8LypTY29wZSovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9
IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFNjb3BlOwogICAgcHVibGljOgoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5cGUoVHlwZTo6RW51bSB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0
KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRT
dHJpbmcoQVNDSUlMaXRlcmFsKCJ0eXBlIiksIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OmdldEpT
RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxU
eXBlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE9iamVjdFNldD4m
IHNldE9iamVjdChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgT2JqZWN0U2V0KSwgcHJvcGVydHlfb2JqZWN0X2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgib2JqZWN0IiksIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxPYmplY3RTZXQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBSZWZQdHI8U2NvcGU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFNjb3BlKSA9PSBzaXplb2YoSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8U2NvcGU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9Cgog
ICAgICAgIFBhc3NSZWZQdHI8U2NvcGU+IHJlbGVhc2UoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuIFJlZlB0cjxTY29wZT4oKnRoaXMpLnJlbGVhc2UoKTsKICAgICAgICB9CiAgICB9OwoK
ICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8U2NvcGU+
IHJlc3VsdCA9IFNjb3BlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRUeXBlKC4uLikKICAgICAq
ICAgICAuc2V0T2JqZWN0KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRz
U2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJ
bnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwogICAgfQogICAgdHlwZWRlZiBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7CiNpZiAh
QVNTRVJUX0RJU0FCTEVECiAgICBzdGF0aWMgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhc3NlcnRD
b3JyZWN0VmFsdWUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpOwojZW5kaWYgIC8v
ICFBU1NFUlRfRElTQUJMRUQKfTsKCmNsYXNzIFByb2JlU2FtcGxlIDogcHVibGljIEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmll
bGRzU2V0ID0gMCwKICAgICAgICBQcm9iZUlkU2V0ID0gMSA8PCAwLAogICAgICAgIFNhbXBsZUlk
U2V0ID0gMSA8PCAxLAogICAgICAgIEJhdGNoSWRTZXQgPSAxIDw8IDIsCiAgICAgICAgVGltZXN0
YW1wU2V0ID0gMSA8PCAzLAogICAgICAgIFBheWxvYWRTZXQgPSAxIDw8IDQsCiAgICAgICAgQWxs
RmllbGRzU2V0ID0gKFByb2JlSWRTZXQgfCBTYW1wbGVJZFNldCB8IEJhdGNoSWRTZXQgfCBUaW1l
c3RhbXBTZXQgfCBQYXlsb2FkU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAg
ICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKlByb2JlU2FtcGxlKi9JbnNwZWN0
b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9z
dGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmll
bmQgY2xhc3MgUHJvYmVTYW1wbGU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBQcm9iZUlkU2V0PiYgc2V0UHJvYmVJZChpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUHJvYmVJZFNldCksIHByb3BlcnR5X3Byb2JlSWRf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJh
bCgicHJvYmVJZCIpLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UHJvYmVJ
ZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTYW1wbGVJZFNldD4m
IHNldFNhbXBsZUlkKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBTYW1wbGVJZFNldCksIHByb3BlcnR5X3NhbXBsZUlkX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcihBU0NJSUxpdGVyYWwoInNhbXBsZUlk
IiksIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTYW1wbGVJZFNldD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBCYXRjaElkU2V0PiYgc2V0QmF0Y2hJ
ZChpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgQmF0Y2hJZFNldCksIHByb3BlcnR5X2JhdGNoSWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgiYmF0Y2hJZCIpLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QmF0Y2hJZFNldD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBUaW1lc3RhbXBTZXQ+JiBzZXRUaW1lc3RhbXAoZG91YmxlIHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRpbWVz
dGFtcFNldCksIHByb3BlcnR5X3RpbWVzdGFtcF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJ0aW1lc3RhbXAiKSwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRpbWVzdGFtcFNldD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYgc2V0UGF5bG9hZChQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUGF5bG9hZFNldCksIHBy
b3BlcnR5X3BheWxvYWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFs
dWUoQVNDSUlMaXRlcmFsKCJwYXlsb2FkIiksIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxQYXlsb2FkU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRy
PFByb2JlU2FtcGxlPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZihQcm9iZVNhbXBsZSkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVmUHRyPFByb2JlU2FtcGxlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAg
ICAgICBQYXNzUmVmUHRyPFByb2JlU2FtcGxlPiByZWxlYXNlKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiBSZWZQdHI8UHJvYmVTYW1wbGU+KCp0aGlzKS5yZWxlYXNlKCk7CiAgICAgICAg
fQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVm
UHRyPFByb2JlU2FtcGxlPiByZXN1bHQgPSBQcm9iZVNhbXBsZTo6Y3JlYXRlKCkKICAgICAqICAg
ICAuc2V0UHJvYmVJZCguLi4pCiAgICAgKiAgICAgLnNldFNhbXBsZUlkKC4uLikKICAgICAqICAg
ICAuc2V0QmF0Y2hJZCguLi4pCiAgICAgKiAgICAgLnNldFRpbWVzdGFtcCguLi4pCiAgICAgKiAg
ICAgLnNldFBheWxvYWQoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNT
ZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICB9CiAgICB0eXBlZGVmIElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKfTsKCn0g
Ly8gRGVidWdnZXIKCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKbmFtZXNw
YWNlIEdlbmVyaWNUeXBlcyB7Ci8qIFNlYXJjaCBtYXRjaCBpbiBhIHJlc291cmNlLiAqLwpjbGFz
cyBTZWFyY2hNYXRjaCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2Ugewpw
dWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgTGluZU51
bWJlclNldCA9IDEgPDwgMCwKICAgICAgICBMaW5lQ29udGVudFNldCA9IDEgPDwgMSwKICAgICAg
ICBBbGxGaWVsZHNTZXQgPSAoTGluZU51bWJlclNldCB8IExpbmVDb250ZW50U2V0KQogICAgfTsK
CiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6
CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAg
ICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRl
KCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVy
PFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1Jl
ZlB0cjwvKlNlYXJjaE1hdGNoKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1
aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0g
cHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgU2VhcmNoTWF0Y2g7CiAgICBwdWJs
aWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBMaW5lTnVtYmVyU2V0PiYgc2V0TGluZU51bWJl
cihkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgTGluZU51bWJlclNldCksIHByb3BlcnR5X2xpbmVOdW1iZXJfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgibGluZU51bWJlciIp
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TGluZU51bWJlclNldD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBMaW5lQ29udGVudFNldD4mIHNldExp
bmVDb250ZW50KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgTGluZUNvbnRlbnRTZXQpLCBwcm9wZXJ0eV9saW5lQ29udGVu
dF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRl
cmFsKCJsaW5lQ29udGVudCIpLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
TGluZUNvbnRlbnRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8U2Vh
cmNoTWF0Y2g+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKFNlYXJjaE1hdGNoKSA9PSBzaXplb2YoSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxSZWZQdHI8U2VhcmNoTWF0Y2g+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAg
IFBhc3NSZWZQdHI8U2VhcmNoTWF0Y2g+IHJlbGVhc2UoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuIFJlZlB0cjxTZWFyY2hNYXRjaD4oKnRoaXMpLnJlbGVhc2UoKTsKICAgICAgICB9CiAg
ICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8
U2VhcmNoTWF0Y2g+IHJlc3VsdCA9IFNlYXJjaE1hdGNoOjpjcmVhdGUoKQogICAgICogICAgIC5z
ZXRMaW5lTnVtYmVyKC4uLikKICAgICAqICAgICAuc2V0TGluZUNvbnRlbnQoLi4uKTsKICAgICAq
LwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAg
cmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKSk7CiAgICB9CiAgICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVj
dEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKfTsKCn0gLy8gR2VuZXJpY1R5cGVzCgpuYW1lc3BhY2Ug
UnVudGltZSB7Ci8qIE1pcnJvciBvYmplY3QgcmVmZXJlbmNpbmcgb3JpZ2luYWwgSmF2YVNjcmlw
dCBvYmplY3QuICovCmNsYXNzIFJlbW90ZU9iamVjdCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdEJhc2UgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1l
ICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIFJlbW90ZU9iamVjdC4KICAgIHN0cnVjdCBUeXBlIHsK
ICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBPYmplY3QgPSA5LAogICAgICAgICAgICBG
dW5jdGlvbiA9IDEwLAogICAgICAgICAgICBVbmRlZmluZWQgPSAxMSwKICAgICAgICAgICAgU3Ry
aW5nID0gMTIsCiAgICAgICAgICAgIE51bWJlciA9IDEzLAogICAgICAgICAgICBCb29sZWFuID0g
MTQsCiAgICAgICAgfTsKI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICBzdGF0aWMgdm9pZCBh
c3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpOwojZW5k
aWYgIC8vICFBU1NFUlRfRElTQUJMRUQKICAgIH07IC8vIHN0cnVjdCBUeXBlCiAgICAvLyBOYW1l
ZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdzdWJ0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIFJlbW90ZU9i
amVjdC4KICAgIHN0cnVjdCBTdWJ0eXBlIHsKICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAg
ICBBcnJheSA9IDE1LAogICAgICAgICAgICBOdWxsID0gMTYsCiAgICAgICAgICAgIE5vZGUgPSAx
NywKICAgICAgICAgICAgUmVnZXhwID0gMTgsCiAgICAgICAgICAgIERhdGUgPSAxOSwKICAgICAg
ICB9OwojaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgIHN0YXRpYyB2b2lkIGFzc2VydENvcnJl
Y3RWYWx1ZShJbnNwZWN0b3I6Okluc3BlY3RvclZhbHVlKiB2YWx1ZSk7CiNlbmRpZiAgLy8gIUFT
U0VSVF9ESVNBQkxFRAogICAgfTsgLy8gc3RydWN0IFN1YnR5cGUKICAgIGVudW0gewogICAgICAg
IE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBUeXBlU2V0ID0gMSA8PCAwLAogICAgICAgIEFsbEZp
ZWxkc1NldCA9IChUeXBlU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBj
bGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKlJlbW90ZU9iamVjdCovSW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3Rh
dGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5k
IGNsYXNzIFJlbW90ZU9iamVjdDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IFR5cGVTZXQ+JiBzZXRUeXBlKFR5cGU6OkVudW0gdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgidHlw
ZSIpLCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpnZXRKU0VudW1Db25zdGFudFZhbHVlKHZhbHVl
KSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHlwZVNldD4oKTsKICAgICAgICB9Cgog
ICAgICAgIG9wZXJhdG9yIFJlZlB0cjxSZW1vdGVPYmplY3Q+JiAoKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlbW90ZU9iamVjdCkg
PT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFJlbW90ZU9iamVjdD4qPigm
bV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgUGFzc1JlZlB0cjxSZW1vdGVPYmplY3Q+IHJl
bGVhc2UoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxSZW1vdGVPYmplY3Q+
KCp0aGlzKS5yZWxlYXNlKCk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhl
dGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFJlbW90ZU9iamVjdD4gcmVzdWx0ID0gUmVt
b3RlT2JqZWN0OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRUeXBlKC4uLik7CiAgICAgKi8KICAg
IHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVy
biBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCkpOwogICAgfQogICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpTdHJ1Y3RJdGVt
VHJhaXRzIEl0ZW1UcmFpdHM7CgogICAgdm9pZCBzZXRTdWJ0eXBlKFN1YnR5cGU6OkVudW0gdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic3VidHlwZSIp
LCBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpnZXRKU0VudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7
CiAgICB9CgogICAgdm9pZCBzZXRDbGFzc05hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsK
ICAgICAgICB0aGlzLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJjbGFzc05hbWUiKSwgdmFsdWUp
OwogICAgfQoKICAgIHZvaWQgc2V0VmFsdWUoUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rv
clZhbHVlPiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwo
InZhbHVlIiksIHZhbHVlKTsKICAgIH0KICAgIHVzaW5nIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0QmFzZTo6c2V0VmFsdWU7CgoKICAgIHZvaWQgc2V0RGVzY3JpcHRpb24oY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJkZXNj
cmlwdGlvbiIpLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRPYmplY3RJZChjb25zdCBJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYgdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgib2JqZWN0SWQiKSwgdmFsdWUp
OwogICAgfQoKICAgIHZvaWQgc2V0UHJldmlldyhQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMt
PnNldFZhbHVlKEFTQ0lJTGl0ZXJhbCgicHJldmlldyIpLCB2YWx1ZSk7CiAgICB9CiAgICBzdGF0
aWMgUGFzc1JlZlB0cjxSZW1vdGVPYmplY3Q+IHJ1bnRpbWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCiAgICB7CiAgICAgICAgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7CiAgICAgICAgYm9vbCBjYXN0UmVzID0gdmFsdWUt
PmFzT2JqZWN0KCZvYmplY3QpOwogICAgICAgIEFTU0VSVF9VTlVTRUQoY2FzdFJlcywgY2FzdFJl
cyk7CiNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgYXNzZXJ0Q29ycmVjdFZhbHVlKG9iamVj
dC5nZXQoKSk7CiNlbmRpZiAgLy8gIUFTU0VSVF9ESVNBQkxFRAogICAgICAgIENPTVBJTEVfQVNT
RVJUKHNpemVvZihSZW1vdGVPYmplY3QpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdEJhc2UpLCB0eXBlX2Nhc3RfcHJvYmxlbSk7CiAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFJlbW90ZU9iamVjdCo+KHN0YXRpY19jYXN0PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFz
ZSo+KG9iamVjdC5nZXQoKSkpOwogICAgfQoKI2lmICFBU1NFUlRfRElTQUJMRUQKICAgIHN0YXRp
YyBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFzc2VydENvcnJlY3RWYWx1ZShJbnNwZWN0b3I6Oklu
c3BlY3RvclZhbHVlKiB2YWx1ZSk7CiNlbmRpZiAgLy8gIUFTU0VSVF9ESVNBQkxFRAp9OwoKLyog
T2JqZWN0IGNvbnRhaW5pbmcgYWJicmV2aWF0ZWQgcmVtb3RlIG9iamVjdCB2YWx1ZS4gKi8KY2xh
c3MgT2JqZWN0UHJldmlldyA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2Ug
ewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgTG9z
c2xlc3NTZXQgPSAxIDw8IDAsCiAgICAgICAgT3ZlcmZsb3dTZXQgPSAxIDw8IDEsCiAgICAgICAg
UHJvcGVydGllc1NldCA9IDEgPDwgMiwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTG9zc2xlc3NT
ZXQgfCBPdmVyZmxvd1NldCB8IFByb3BlcnRpZXNTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGlu
dCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxp
bnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAg
ICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+
KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qT2JqZWN0UHJl
dmlldyovSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IHB0cikKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRf
aW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9
CiAgICAgICAgZnJpZW5kIGNsYXNzIE9iamVjdFByZXZpZXc7CiAgICBwdWJsaWM6CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBMb3NzbGVzc1NldD4mIHNldExvc3NsZXNzKGJvb2wgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTG9zc2xlc3NTZXQp
LCBwcm9wZXJ0eV9sb3NzbGVzc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRCb29sZWFuKEFTQ0lJTGl0ZXJhbCgibG9zc2xlc3MiKSwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPExvc3NsZXNzU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IE92ZXJmbG93U2V0PiYgc2V0T3ZlcmZsb3coYm9vbCB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPdmVyZmxvd1NldCksIHByb3Bl
cnR5X292ZXJmbG93X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xl
YW4oQVNDSUlMaXRlcmFsKCJvdmVyZmxvdyIpLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8T3ZlcmZsb3dTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgUHJvcGVydGllc1NldD4mIHNldFByb3BlcnRpZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpQcm9wZXJ0
eVByZXZpZXc+ID4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgUHJvcGVydGllc1NldCksIHByb3BlcnR5X3Byb3BlcnRpZXNfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJwcm9wZXJ0aWVz
IiksIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxQcm9wZXJ0aWVzU2V0Pigp
OwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPE9iamVjdFByZXZpZXc+JiAoKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0
LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9m
KE9iamVjdFByZXZpZXcpID09IHNpemVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNh
bm5vdF9jYXN0KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxP
YmplY3RQcmV2aWV3Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBQYXNzUmVmUHRy
PE9iamVjdFByZXZpZXc+IHJlbGVhc2UoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJl
ZlB0cjxPYmplY3RQcmV2aWV3PigqdGhpcykucmVsZWFzZSgpOwogICAgICAgIH0KICAgIH07Cgog
ICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxPYmplY3RQ
cmV2aWV3PiByZXN1bHQgPSBPYmplY3RQcmV2aWV3OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRM
b3NzbGVzcyguLi4pCiAgICAgKiAgICAgLnNldE92ZXJmbG93KC4uLikKICAgICAqICAgICAuc2V0
UHJvcGVydGllcyguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4g
Y3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKICAgIH0KICAgIHR5cGVkZWYgSW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6U3RydWN0SXRlbVRyYWl0cyBJdGVtVHJhaXRzOwojaWYgIUFTU0VS
VF9ESVNBQkxFRAogICAgc3RhdGljIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYXNzZXJ0Q29ycmVj
dFZhbHVlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKTsKI2VuZGlmICAvLyAhQVNT
RVJUX0RJU0FCTEVECn07CgpjbGFzcyBQcm9wZXJ0eVByZXZpZXcgOiBwdWJsaWMgSW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3RCYXNlIHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVy
dHkgbmFtZSAndHlwZScgd2hpbGUgZ2VuZXJhdGluZyBQcm9wZXJ0eVByZXZpZXcuCiAgICBzdHJ1
Y3QgVHlwZSB7CiAgICAgICAgZW51bSBFbnVtIHsKICAgICAgICAgICAgT2JqZWN0ID0gOSwKICAg
ICAgICAgICAgRnVuY3Rpb24gPSAxMCwKICAgICAgICAgICAgVW5kZWZpbmVkID0gMTEsCiAgICAg
ICAgICAgIFN0cmluZyA9IDEyLAogICAgICAgICAgICBOdW1iZXIgPSAxMywKICAgICAgICAgICAg
Qm9vbGVhbiA9IDE0LAogICAgICAgIH07CiNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgc3Rh
dGljIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZh
bHVlKTsKI2VuZGlmICAvLyAhQVNTRVJUX0RJU0FCTEVECiAgICB9OyAvLyBzdHJ1Y3QgVHlwZQog
ICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnc3VidHlwZScgd2hpbGUgZ2VuZXJhdGlu
ZyBQcm9wZXJ0eVByZXZpZXcuCiAgICBzdHJ1Y3QgU3VidHlwZSB7CiAgICAgICAgZW51bSBFbnVt
IHsKICAgICAgICAgICAgQXJyYXkgPSAxNSwKICAgICAgICAgICAgTnVsbCA9IDE2LAogICAgICAg
ICAgICBOb2RlID0gMTcsCiAgICAgICAgICAgIFJlZ2V4cCA9IDE4LAogICAgICAgICAgICBEYXRl
ID0gMTksCiAgICAgICAgfTsKI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICBzdGF0aWMgdm9p
ZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZSogdmFsdWUpOwoj
ZW5kaWYgIC8vICFBU1NFUlRfRElTQUJMRUQKICAgIH07IC8vIHN0cnVjdCBTdWJ0eXBlCiAgICBl
bnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgTmFtZVNldCA9IDEgPDwgMCwK
ICAgICAgICBUeXBlU2V0ID0gMSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChOYW1lU2V0
IHwgVHlwZVNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVp
bGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRF
IHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypQcm9wZXJ0eVByZXZpZXcqL0luc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsK
ICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFz
cyBQcm9wZXJ0eVByZXZpZXc7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBO
YW1lU2V0PiYgc2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5hbWVTZXQpLCBwcm9wZXJ0eV9uYW1lX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5h
bWUiKSwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5hbWVTZXQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5cGUoVHlwZTo6
RW51bSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJ0eXBlIiksIEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OmdldEpTRW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxUeXBlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFBy
b3BlcnR5UHJldmlldz4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoUHJvcGVydHlQcmV2aWV3KSA9PSBzaXplb2YoSW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxSZWZQdHI8UHJvcGVydHlQcmV2aWV3Pio+KCZtX3Jlc3VsdCk7CiAgICAg
ICAgfQoKICAgICAgICBQYXNzUmVmUHRyPFByb3BlcnR5UHJldmlldz4gcmVsZWFzZSgpCiAgICAg
ICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFByb3BlcnR5UHJldmlldz4oKnRoaXMpLnJl
bGVhc2UoKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3Ry
dWN0b3I6CiAgICAgKiBSZWZQdHI8UHJvcGVydHlQcmV2aWV3PiByZXN1bHQgPSBQcm9wZXJ0eVBy
ZXZpZXc6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldE5hbWUoLi4uKQogICAgICogICAgIC5zZXRU
eXBlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUo
KQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCkpOwogICAgfQogICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7CgogICAgdm9pZCBzZXRWYWx1
ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZyhBU0NJ
SUxpdGVyYWwoInZhbHVlIiksIHZhbHVlKTsKICAgIH0KICAgIHVzaW5nIEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0QmFzZTo6c2V0VmFsdWU7CgoKICAgIHZvaWQgc2V0VmFsdWVQcmV2aWV3KFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6T2JqZWN0UHJldmlldz4g
dmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJ2YWx1ZVBy
ZXZpZXciKSwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U3VidHlwZShTdWJ0eXBlOjpFbnVt
IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoInN1YnR5
cGUiKSwgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6Z2V0SlNFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1
ZSkpOwogICAgfQojaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgc3RhdGljIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVlKEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZh
bHVlKTsKI2VuZGlmICAvLyAhQVNTRVJUX0RJU0FCTEVECn07CgovKiBPYmplY3QgcHJvcGVydHkg
ZGVzY3JpcHRvci4gKi8KY2xhc3MgUHJvcGVydHlEZXNjcmlwdG9yIDogcHVibGljIEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmll
bGRzU2V0ID0gMCwKICAgICAgICBOYW1lU2V0ID0gMSA8PCAwLAogICAgICAgIENvbmZpZ3VyYWJs
ZVNldCA9IDEgPDwgMSwKICAgICAgICBFbnVtZXJhYmxlU2V0ID0gMSA8PCAyLAogICAgICAgIEFs
bEZpZWxkc1NldCA9IChOYW1lU2V0IHwgQ29uZmlndXJhYmxlU2V0IHwgRW51bWVyYWJsZVNldCkK
ICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBw
cml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gbV9yZXN1
bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
KFBhc3NSZWZQdHI8LypQcm9wZXJ0eURlc2NyaXB0b3IqL0luc3BlY3Rvcjo6SW5zcGVjdG9yT2Jq
ZWN0PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBO
b0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAg
ICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBQcm9wZXJ0
eURlc2NyaXB0b3I7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOYW1lU2V0
PiYgc2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIE5hbWVTZXQpLCBwcm9wZXJ0eV9uYW1lX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoIm5hbWUiKSwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5hbWVTZXQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29uZmlndXJhYmxlU2V0PiYgc2V0Q29uZmlndXJh
YmxlKGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgQ29uZmlndXJhYmxlU2V0KSwgcHJvcGVydHlfY29uZmlndXJhYmxlX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oQVNDSUlMaXRlcmFsKCJjb25maWd1
cmFibGUiKSwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvbmZpZ3VyYWJs
ZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFbnVtZXJhYmxlU2V0
PiYgc2V0RW51bWVyYWJsZShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIEVudW1lcmFibGVTZXQpLCBwcm9wZXJ0eV9lbnVtZXJhYmxlX2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oQVNDSUlMaXRlcmFs
KCJlbnVtZXJhYmxlIiksIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFbnVt
ZXJhYmxlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFByb3BlcnR5
RGVzY3JpcHRvcj4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChzaXplb2YoUHJvcGVydHlEZXNjcmlwdG9yKSA9PSBzaXplb2YoSW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3QpLCBjYW5ub3RfY2FzdCk7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxSZWZQdHI8UHJvcGVydHlEZXNjcmlwdG9yPio+KCZtX3Jlc3VsdCk7CiAg
ICAgICAgfQoKICAgICAgICBQYXNzUmVmUHRyPFByb3BlcnR5RGVzY3JpcHRvcj4gcmVsZWFzZSgp
CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFByb3BlcnR5RGVzY3JpcHRvcj4o
KnRoaXMpLnJlbGVhc2UoKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8UHJvcGVydHlEZXNjcmlwdG9yPiByZXN1bHQg
PSBQcm9wZXJ0eURlc2NyaXB0b3I6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldE5hbWUoLi4uKQog
ICAgICogICAgIC5zZXRDb25maWd1cmFibGUoLi4uKQogICAgICogICAgIC5zZXRFbnVtZXJhYmxl
KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQog
ICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCkpOwogICAgfQogICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7CgogICAgdm9pZCBzZXRWYWx1ZShQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4g
dmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0VmFsdWUoQVNDSUlMaXRlcmFsKCJ2YWx1ZSIp
LCB2YWx1ZSk7CiAgICB9CiAgICB1c2luZyBJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2U6
OnNldFZhbHVlOwoKCiAgICB2b2lkIHNldFdyaXRhYmxlKGJvb2wgdmFsdWUpCiAgICB7CiAgICAg
ICAgdGhpcy0+c2V0Qm9vbGVhbihBU0NJSUxpdGVyYWwoIndyaXRhYmxlIiksIHZhbHVlKTsKICAg
IH0KCiAgICB2b2lkIHNldEdldChQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0VmFsdWUo
QVNDSUlMaXRlcmFsKCJnZXQiKSwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U2V0KFBhc3NS
ZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiB2YWx1
ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInNldCIpLCB2YWx1
ZSk7CiAgICB9CgogICAgdm9pZCBzZXRXYXNUaHJvd24oYm9vbCB2YWx1ZSkKICAgIHsKICAgICAg
ICB0aGlzLT5zZXRCb29sZWFuKEFTQ0lJTGl0ZXJhbCgid2FzVGhyb3duIiksIHZhbHVlKTsKICAg
IH0KCiAgICB2b2lkIHNldElzT3duKGJvb2wgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0
Qm9vbGVhbihBU0NJSUxpdGVyYWwoImlzT3duIiksIHZhbHVlKTsKICAgIH0KICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFByb3BlcnR5RGVzY3JpcHRvcj4gcnVudGltZUNhc3QoUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6Okluc3BlY3RvclZhbHVlPiB2YWx1ZSkKICAgIHsKICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JPYmplY3Q+IG9iamVjdDsKICAgICAgICBib29sIGNhc3RSZXMgPSB2YWx1
ZS0+YXNPYmplY3QoJm9iamVjdCk7CiAgICAgICAgQVNTRVJUX1VOVVNFRChjYXN0UmVzLCBjYXN0
UmVzKTsKI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICBhc3NlcnRDb3JyZWN0VmFsdWUob2Jq
ZWN0LmdldCgpKTsKI2VuZGlmICAvLyAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKFByb3BlcnR5RGVzY3JpcHRvcikgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0QmFzZSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8UHJvcGVydHlEZXNjcmlwdG9yKj4oc3RhdGljX2Nhc3Q8SW5zcGVjdG9yOjpJbnNw
ZWN0b3JPYmplY3RCYXNlKj4ob2JqZWN0LmdldCgpKSk7CiAgICB9CgojaWYgIUFTU0VSVF9ESVNB
QkxFRAogICAgc3RhdGljIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYXNzZXJ0Q29ycmVjdFZhbHVl
KEluc3BlY3Rvcjo6SW5zcGVjdG9yVmFsdWUqIHZhbHVlKTsKI2VuZGlmICAvLyAhQVNTRVJUX0RJ
U0FCTEVECn07CgovKiBPYmplY3QgaW50ZXJuYWwgcHJvcGVydHkgZGVzY3JpcHRvci4gVGhpcyBw
cm9wZXJ0eSBpc24ndCBub3JtYWxseSB2aXNpYmxlIGluIEphdmFTY3JpcHQgY29kZS4gKi8KY2xh
c3MgSW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3IgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0
b3JPYmplY3RCYXNlIHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAw
LAogICAgICAgIE5hbWVTZXQgPSAxIDw8IDAsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKE5hbWVT
ZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewog
ICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IG1f
cmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+
JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcihQYXNzUmVmUHRyPC8qSW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3IqL0luc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRl
KTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBj
bGFzcyBJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcjsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IE5hbWVTZXQ+JiBzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTmFtZVNldCksIHByb3Bl
cnR5X25hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKEFT
Q0lJTGl0ZXJhbCgibmFtZSIpLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
TmFtZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxJbnRlcm5hbFBy
b3BlcnR5RGVzY3JpcHRvcj4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChzaXplb2YoSW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3IpID09IHNp
emVvZihJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxJbnRlcm5hbFByb3BlcnR5RGVzY3Jp
cHRvcj4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgUGFzc1JlZlB0cjxJbnRlcm5h
bFByb3BlcnR5RGVzY3JpcHRvcj4gcmVsZWFzZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1
cm4gUmVmUHRyPEludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPigqdGhpcykucmVsZWFzZSgpOwog
ICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAg
ICAqIFJlZlB0cjxJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4gcmVzdWx0ID0gSW50ZXJuYWxQ
cm9wZXJ0eURlc2NyaXB0b3I6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldE5hbWUoLi4uKTsKICAg
ICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAg
ICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKSk7CiAgICB9CiAgICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0
cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKCiAgICB2b2lkIHNldFZhbHVlKFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiB2YWx1ZSkKICAg
IHsKICAgICAgICB0aGlzLT5zZXRWYWx1ZShBU0NJSUxpdGVyYWwoInZhbHVlIiksIHZhbHVlKTsK
ICAgIH0KICAgIHVzaW5nIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZTo6c2V0VmFsdWU7
CgogICAgc3RhdGljIFBhc3NSZWZQdHI8SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+IHJ1bnRp
bWVDYXN0KFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCiAgICB7
CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBvYmplY3Q7CiAgICAg
ICAgYm9vbCBjYXN0UmVzID0gdmFsdWUtPmFzT2JqZWN0KCZvYmplY3QpOwogICAgICAgIEFTU0VS
VF9VTlVTRUQoY2FzdFJlcywgY2FzdFJlcyk7CiNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAg
YXNzZXJ0Q29ycmVjdFZhbHVlKG9iamVjdC5nZXQoKSk7CiNlbmRpZiAgLy8gIUFTU0VSVF9ESVNB
QkxFRAogICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihJbnRlcm5hbFByb3BlcnR5RGVzY3Jp
cHRvcikgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSksIHR5cGVfY2Fz
dF9wcm9ibGVtKTsKICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW50ZXJuYWxQcm9wZXJ0eURl
c2NyaXB0b3IqPihzdGF0aWNfY2FzdDxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdEJhc2UqPihv
YmplY3QuZ2V0KCkpKTsKICAgIH0KCiNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICBzdGF0aWMgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBhc3NlcnRDb3JyZWN0VmFsdWUoSW5zcGVjdG9yOjpJbnNwZWN0
b3JWYWx1ZSogdmFsdWUpOwojZW5kaWYgIC8vICFBU1NFUlRfRElTQUJMRUQKfTsKCi8qIFJlcHJl
c2VudHMgZnVuY3Rpb24gY2FsbCBhcmd1bWVudC4gRWl0aGVyIHJlbW90ZSBvYmplY3QgaWQgPGNv
ZGU+b2JqZWN0SWQ8L2NvZGU+IG9yIHByaW1pdGl2ZSA8Y29kZT52YWx1ZTwvY29kZT4gb3IgbmVp
dGhlciBvZiAoZm9yIHVuZGVmaW5lZCkgdGhlbSBzaG91bGQgYmUgc3BlY2lmaWVkLiAqLwpjbGFz
cyBDYWxsQXJndW1lbnQgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3RCYXNlIHsK
cHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIEFsbEZp
ZWxkc1NldCA9IDAKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVp
bGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRF
IHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8LypDYWxsQXJndW1lbnQqL0luc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAg
ICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBD
YWxsQXJndW1lbnQ7CiAgICBwdWJsaWM6CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDYWxsQXJn
dW1lbnQ+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
QWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKENhbGxBcmd1bWVudCkgPT0gc2l6ZW9mKEluc3BlY3Rvcjo6SW5zcGVjdG9y
T2JqZWN0KSwgY2Fubm90X2Nhc3QpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8UmVmUHRyPENhbGxBcmd1bWVudD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAg
UGFzc1JlZlB0cjxDYWxsQXJndW1lbnQ+IHJlbGVhc2UoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuIFJlZlB0cjxDYWxsQXJndW1lbnQ+KCp0aGlzKS5yZWxlYXNlKCk7CiAgICAgICAgfQog
ICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRy
PENhbGxBcmd1bWVudD4gcmVzdWx0ID0gQ2FsbEFyZ3VtZW50OjpjcmVhdGUoKTsKICAgICAqLwog
ICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKSk7CiAgICB9CiAgICB0eXBlZGVmIEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlN0cnVjdEl0
ZW1UcmFpdHMgSXRlbVRyYWl0czsKCiAgICB2b2lkIHNldFZhbHVlKFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0VmFsdWUo
QVNDSUlMaXRlcmFsKCJ2YWx1ZSIpLCB2YWx1ZSk7CiAgICB9CiAgICB1c2luZyBJbnNwZWN0b3I6
Okluc3BlY3Rvck9iamVjdEJhc2U6OnNldFZhbHVlOwoKCiAgICB2b2lkIHNldE9iamVjdElkKGNv
bnN0IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiB2YWx1
ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJvYmplY3RJZCIp
LCB2YWx1ZSk7CiAgICB9Cn07CgovKiBEZXNjcmlwdGlvbiBvZiBhbiBpc29sYXRlZCB3b3JsZC4g
Ki8KY2xhc3MgRXhlY3V0aW9uQ29udGV4dERlc2NyaXB0aW9uIDogcHVibGljIEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0QmFzZSB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRz
U2V0ID0gMCwKICAgICAgICBJZFNldCA9IDEgPDwgMCwKICAgICAgICBJc1BhZ2VDb250ZXh0U2V0
ID0gMSA8PCAxLAogICAgICAgIE5hbWVTZXQgPSAxIDw8IDIsCiAgICAgICAgRnJhbWVJZFNldCA9
IDEgPDwgMywKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoSWRTZXQgfCBJc1BhZ2VDb250ZXh0U2V0
IHwgTmFtZVNldCB8IEZyYW1lSWRTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4K
ICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4g
QnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPC8qRXhlY3V0aW9uQ29udGV4dERl
c2NyaXB0aW9uKi9JbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gcHRyKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3Jl
YXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAg
ICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgRXhlY3V0aW9uQ29udGV4dERlc2NyaXB0aW9uOwog
ICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSWRTZXQ+JiBzZXRJZChpbnQgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSWRTZXQp
LCBwcm9wZXJ0eV9pZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1i
ZXIoQVNDSUlMaXRlcmFsKCJpZCIpLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8SWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSXNQYWdlQ29u
dGV4dFNldD4mIHNldElzUGFnZUNvbnRleHQoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJc1BhZ2VDb250ZXh0U2V0KSwgcHJvcGVydHlf
aXNQYWdlQ29udGV4dF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29s
ZWFuKEFTQ0lJTGl0ZXJhbCgiaXNQYWdlQ29udGV4dCIpLCB2YWx1ZSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8SXNQYWdlQ29udGV4dFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBOYW1lU2V0PiYgc2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5hbWVTZXQpLCBwcm9w
ZXJ0eV9uYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhB
U0NJSUxpdGVyYWwoIm5hbWUiKSwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PE5hbWVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRnJhbWVJZFNl
dD4mIHNldEZyYW1lSWQoY29uc3QgSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6UnVu
dGltZUZyYW1lSWQmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIEZyYW1lSWRTZXQpLCBwcm9wZXJ0eV9mcmFtZUlkX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImZyYW1lSWQiKSwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEZyYW1lSWRTZXQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8RXhlY3V0aW9uQ29udGV4dERlc2NyaXB0aW9uPiYg
KCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxk
c1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNp
emVvZihFeGVjdXRpb25Db250ZXh0RGVzY3JpcHRpb24pID09IHNpemVvZihJbnNwZWN0b3I6Oklu
c3BlY3Rvck9iamVjdCksIGNhbm5vdF9jYXN0KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PFJlZlB0cjxFeGVjdXRpb25Db250ZXh0RGVzY3JpcHRpb24+Kj4oJm1fcmVzdWx0
KTsKICAgICAgICB9CgogICAgICAgIFBhc3NSZWZQdHI8RXhlY3V0aW9uQ29udGV4dERlc2NyaXB0
aW9uPiByZWxlYXNlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8RXhlY3V0
aW9uQ29udGV4dERlc2NyaXB0aW9uPigqdGhpcykucmVsZWFzZSgpOwogICAgICAgIH0KICAgIH07
CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxFeGVj
dXRpb25Db250ZXh0RGVzY3JpcHRpb24+IHJlc3VsdCA9IEV4ZWN1dGlvbkNvbnRleHREZXNjcmlw
dGlvbjo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0SWQoLi4uKQogICAgICogICAgIC5zZXRJc1Bh
Z2VDb250ZXh0KC4uLikKICAgICAqICAgICAuc2V0TmFtZSguLi4pCiAgICAgKiAgICAgLnNldEZy
YW1lSWQoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0
ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CiAgICB9CiAgICB0eXBlZGVmIEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OlN0cnVjdEl0ZW1UcmFpdHMgSXRlbVRyYWl0czsKfTsKCi8qIFN5bnRheCBl
cnJvciB0eXBlOiAibm9uZSIgZm9yIG5vIGVycm9yLCAiaXJyZWNvdmVyYWJsZSIgZm9yIHVucmVj
b3ZlcmFibGUgZXJyb3JzLCAidW50ZXJtaW5hdGVkLWxpdGVyYWwiIGZvciB3aGVuIHRoZXJlIGlz
IGFuIHVudGVybWluYXRlZCBsaXRlcmFsLCAicmVjb3ZlcmFibGUiIGZvciB3aGVuIHRoZSBleHBy
ZXNzaW9uIGlzIHVuZmluaXNoZWQgYnV0IHZhbGlkIHNvIGZhci4gKi8Kc3RydWN0IFN5bnRheEVy
cm9yVHlwZSB7CiAgICBlbnVtIEVudW0gewogICAgICAgIE5vbmUgPSAyMCwKICAgICAgICBJcnJl
Y292ZXJhYmxlID0gMjEsCiAgICAgICAgVW50ZXJtaW5hdGVkTGl0ZXJhbCA9IDIyLAogICAgICAg
IFJlY292ZXJhYmxlID0gMjMsCiAgICB9Owp9OyAvLyBzdHJ1Y3QgU3ludGF4RXJyb3JUeXBlCi8q
IFJhbmdlIG9mIGFuIGVycm9yIGluIHNvdXJjZSBjb2RlLiAqLwpjbGFzcyBFcnJvclJhbmdlIDog
cHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0QmFzZSB7CnB1YmxpYzoKICAgIGVudW0g
ewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBTdGFydE9mZnNldFNldCA9IDEgPDwg
MCwKICAgICAgICBFbmRPZmZzZXRTZXQgPSAxIDw8IDEsCiAgICAgICAgQWxsRmllbGRzU2V0ID0g
KFN0YXJ0T2Zmc2V0U2V0IHwgRW5kT2Zmc2V0U2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQg
U1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50
IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0
aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjwvKkVycm9yUmFuZ2Uq
L0luc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25v
bl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAg
ICAgIGZyaWVuZCBjbGFzcyBFcnJvclJhbmdlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgU3RhcnRPZmZzZXRTZXQ+JiBzZXRTdGFydE9mZnNldChpbnQgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3RhcnRPZmZzZXRTZXQp
LCBwcm9wZXJ0eV9zdGFydE9mZnNldF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXROdW1iZXIoQVNDSUlMaXRlcmFsKCJzdGFydE9mZnNldCIpLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8U3RhcnRPZmZzZXRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgRW5kT2Zmc2V0U2V0PiYgc2V0RW5kT2Zmc2V0KGludCB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBFbmRPZmZzZXRT
ZXQpLCBwcm9wZXJ0eV9lbmRPZmZzZXRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgiZW5kT2Zmc2V0IiksIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxFbmRPZmZzZXRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBv
cGVyYXRvciBSZWZQdHI8RXJyb3JSYW5nZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRXJyb3JSYW5nZSkgPT0gc2l6ZW9mKElu
c3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0KSwgY2Fubm90X2Nhc3QpOwogICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEVycm9yUmFuZ2U+Kj4oJm1fcmVzdWx0KTsKICAg
ICAgICB9CgogICAgICAgIFBhc3NSZWZQdHI8RXJyb3JSYW5nZT4gcmVsZWFzZSgpCiAgICAgICAg
ewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPEVycm9yUmFuZ2U+KCp0aGlzKS5yZWxlYXNlKCk7
CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgog
ICAgICogUmVmUHRyPEVycm9yUmFuZ2U+IHJlc3VsdCA9IEVycm9yUmFuZ2U6OmNyZWF0ZSgpCiAg
ICAgKiAgICAgLnNldFN0YXJ0T2Zmc2V0KC4uLikKICAgICAqICAgICAuc2V0RW5kT2Zmc2V0KC4u
Lik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAg
ewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCkpOwogICAgfQogICAgdHlwZWRlZiBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpTdHJ1Y3RJdGVtVHJhaXRzIEl0ZW1UcmFpdHM7Cn07Cgp9IC8vIFJ1bnRpbWUKCgp9IC8v
IG5hbWVzcGFjZSBUeXBlQnVpbGRlcgoKfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCgojZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUikKCiNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JKU1R5cGVC
dWlsZGVyc19oKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>