<?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>75284</bug_id>
          
          <creation_ts>2011-12-27 17:59:12 -0800</creation_ts>
          <short_desc>Web Inspector: CodeGeneratorInspector.py: generate array types.</short_desc>
          <delta_ts>2012-01-16 05:44:37 -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 (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>76188</dependson>
          <blocked>72861</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Peter Rybin">peter.rybin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>ossy</cc>
    
    <cc>peter.rybin</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>527520</commentid>
    <comment_count>0</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2011-12-27 17:59:12 -0800</bug_when>
    <thetext>Generate array types in C++ TypeBuilder.
Each array will have its own type (i.e. not a template instantiation).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533915</commentid>
    <comment_count>1</comment_count>
      <attachid>122029</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2012-01-11 08:20:06 -0800</bug_when>
    <thetext>Created attachment 122029
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533916</commentid>
    <comment_count>2</comment_count>
      <attachid>122030</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2012-01-11 08:21:22 -0800</bug_when>
    <thetext>Created attachment 122030
InspectorFrontend.h base version</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533917</commentid>
    <comment_count>3</comment_count>
      <attachid>122031</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2012-01-11 08:24:26 -0800</bug_when>
    <thetext>Created attachment 122031
New InspectorFrontend.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533918</commentid>
    <comment_count>4</comment_count>
      <attachid>122032</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2012-01-11 08:25:22 -0800</bug_when>
    <thetext>Created attachment 122032
Generator output diff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534009</commentid>
    <comment_count>5</comment_count>
      <attachid>122029</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-01-11 10:29:05 -0800</bug_when>
    <thetext>Comment on attachment 122029
Patch

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

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:929
&gt; +                                                # fixed_type_name.output_comment(writer)

Remove commented code?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534024</commentid>
    <comment_count>6</comment_count>
      <attachid>122050</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2012-01-11 10:41:43 -0800</bug_when>
    <thetext>Created attachment 122050
Rebasing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534026</commentid>
    <comment_count>7</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2012-01-11 10:42:13 -0800</bug_when>
    <thetext>&gt; &gt; Source/WebCore/inspector/CodeGeneratorInspector.py:929
&gt; &gt; +                                                # fixed_type_name.output_comment(writer)
&gt; 
&gt; Remove commented code?

Done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534757</commentid>
    <comment_count>8</comment_count>
      <attachid>122219</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2012-01-12 05:20:07 -0800</bug_when>
    <thetext>Created attachment 122219
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534772</commentid>
    <comment_count>9</comment_count>
      <attachid>122224</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2012-01-12 06:08:01 -0800</bug_when>
    <thetext>Created attachment 122224
InspectorFrontend.h base version</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534773</commentid>
    <comment_count>10</comment_count>
      <attachid>122225</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2012-01-12 06:09:31 -0800</bug_when>
    <thetext>Created attachment 122225
New InspectorFrontend.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534775</commentid>
    <comment_count>11</comment_count>
      <attachid>122226</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2012-01-12 06:10:33 -0800</bug_when>
    <thetext>Created attachment 122226
Generator output diff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534792</commentid>
    <comment_count>12</comment_count>
      <attachid>122219</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2012-01-12 06:44:35 -0800</bug_when>
    <thetext>Comment on attachment 122219
Patch

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

&gt; Source/WebCore/inspector/CodeGeneratorInspector.py:916
&gt; +                            writer.newline(&quot;    %s() {}\n&quot; % fixed_type_name.class_name)

style nit: in generated code there should be a space between {}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534808</commentid>
    <comment_count>13</comment_count>
      <attachid>122234</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2012-01-12 07:02:29 -0800</bug_when>
    <thetext>Created attachment 122234
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534810</commentid>
    <comment_count>14</comment_count>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2012-01-12 07:03:15 -0800</bug_when>
    <thetext>&gt; style nit: in generated code there should be a space between {}

Done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534871</commentid>
    <comment_count>15</comment_count>
      <attachid>122234</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-12 08:40:23 -0800</bug_when>
    <thetext>Comment on attachment 122234
Patch

Clearing flags on attachment: 122234

Committed r104829: &lt;http://trac.webkit.org/changeset/104829&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534872</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-12 08:40:29 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534877</commentid>
    <comment_count>17</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-01-12 08:45:13 -0800</bug_when>
    <thetext>Reopen, because it broke the minimal build. Could you fix it?

http://build.webkit.org/builders/Qt%20Linux%20Release%20minimal/builds/40446/steps/compile-webkit/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536244</commentid>
    <comment_count>18</comment_count>
      <attachid>122561</attachid>
    <who name="Peter Rybin">peter.rybin</who>
    <bug_when>2012-01-14 20:25:31 -0800</bug_when>
    <thetext>Created attachment 122561
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536507</commentid>
    <comment_count>19</comment_count>
      <attachid>122561</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-16 05:44:31 -0800</bug_when>
    <thetext>Comment on attachment 122561
Patch

Clearing flags on attachment: 122561

Committed r105060: &lt;http://trac.webkit.org/changeset/105060&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>536508</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-16 05:44:37 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122029</attachid>
            <date>2012-01-11 08:20:06 -0800</date>
            <delta_ts>2012-01-11 10:41:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75284-20120111202004.patch</filename>
            <type>text/plain</type>
            <size>9896</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjlkOWQyM2I5MTQ0ZjEy
ZGY2ODhhMzZiZmM5Y2UxNTk0ZmM2YjgzYy4uNTNjN2I2YzFkMThhOGM3ZTNhZWYyYjQwZjNjNmVk
NWI0MjgyZjQ5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTAxLTExICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OiBnZW5lcmF0ZSBhcnJheSB0eXBlcy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1Mjg0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IGNsYXNzZXMgYXJl
IGdlbmVyYXRlZCBmb3IgZWNhaCBhcnJheSB0eXBlIGluc3RhbmNlLgorCisgICAgICAgICogaW5z
cGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHk6CisgICAgICAgIChBcnJheUJpbmRpbmcp
OgorICAgICAgICAoQXJyYXlCaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcik6CisgICAgICAgIChB
cnJheUJpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yLkNvZGVHZW5lcmF0b3IpOgorICAgICAgICAo
QXJyYXlCaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvci5Db2RlR2VuZXJhdG9yLmdlbmVyYXRlX3R5
cGVfYnVpbGRlcik6CisgICAgICAgIChBcnJheUJpbmRpbmcuQWRIb2NUeXBlQ29udGV4dCk6Cisg
ICAgICAgIChBcnJheUJpbmRpbmcuQWRIb2NUeXBlQ29udGV4dC5nZXRfdHlwZV9uYW1lX2ZpeCk6
CisgICAgICAgIChBcnJheUJpbmRpbmcuQWRIb2NUeXBlQ29udGV4dC5nZXRfdHlwZV9uYW1lX2Zp
eC5OYW1lRml4KToKKyAgICAgICAgKEFycmF5QmluZGluZy5vdXRwdXRfY29tbWVudCk6CisgICAg
ICAgIChBcnJheUJpbmRpbmcuY2FsbF9nZW5lcmF0ZV90eXBlX2J1aWxkZXIpOgorICAgICAgICAo
QXJyYXlCaW5kaW5nLmdlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb24pOgorICAgICAgICAoQXJy
YXlCaW5kaW5nLnJlZ2lzdGVyX3VzZSk6CisgICAgICAgIChnZXRfaW5fY190eXBlX3RleHQpOgor
ICAgICAgICAoZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4pOgorICAgICAgICAo
cmVkdWNlX3RvX3Jhd190eXBlKToKKyAgICAgICAgKFJhd1R5cGVCaW5kaW5nKToKKyAgICAgICAg
KFJhd1R5cGVCaW5kaW5nLl9faW5pdF9fKToKKyAgICAgICAgKFJhd1R5cGVCaW5kaW5nLmdldF9j
b2RlX2dlbmVyYXRvcik6CisgICAgICAgIChSYXdUeXBlQmluZGluZy5nZXRfaW5fY190eXBlX3Rl
eHQpOgorICAgICAgICAoUmF3VHlwZUJpbmRpbmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9u
X3BhdHRlcm4pOgorICAgICAgICAoUmF3VHlwZUJpbmRpbmcucmVkdWNlX3RvX3Jhd190eXBlKToK
KyAgICAgICAgKFR5cGVEYXRhLl9faW5pdF9fKToKKyAgICAgICAgKFR5cGVEYXRhLmdldF9iaW5k
aW5nKToKKwogMjAxMi0wMS0xMCAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGludHJvZHVjZSAic291cmNlIiBjb2x1bW4g
aW4gdGhlIENTUyBwcm9maWxlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0Nv
ZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXggODUwZDljMzNiNWEzMTFmMDNkYWM5NGY2ZmEy
YWI0M2M3YTg5NjliMC4uYmI0YWM5NjRhODY0MGFmNDQyNzRlNmQ5YmYzOWViMDdmYWZmN2JhZSAx
MDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0
b3IucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0
b3IucHkKQEAgLTg5OCw2MCArODk4LDExMCBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAKICAgICAg
ICAgICAgICAgICByZXR1cm4gUGxhaW5PYmplY3RCaW5kaW5nCiAgICAgICAgIGVsaWYganNvbl90
eXBhYmxlWyJ0eXBlIl0gPT0gImFycmF5IjoKLSAgICAgICAgICAgIGlmICJpdGVtcyIgaW4ganNv
bl90eXBhYmxlOgogCi0gICAgICAgICAgICAgICAgY2xhc3MgQ29kZUdlbmVyYXRvcjoKLSAgICAg
ICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYgZ2Vu
ZXJhdGVfdHlwZV9idWlsZGVyKHdyaXRlciwgZm9yd2FyZF9saXN0ZW5lcik6CisgICAgICAgICAg
ICBjbGFzcyBBcnJheUJpbmRpbmc6CisgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAg
ICAgICAgICAgICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3IoKToKIAotICAgICAgICAgICAgICAg
ICAgICAgICAgY2xhc3MgQWRIb2NUeXBlQ29udGV4dDoKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdldF90
eXBlX25hbWVfZml4KCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIE5h
bWVGaXg6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc19uYW1lID0g
Zml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUgKyAiSXRlbSIKKyAgICAgICAgICAgICAgICAgICAg
Y2xhc3MgQ29kZUdlbmVyYXRvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRo
b2QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIod3Jp
dGVyLCBmb3J3YXJkX2xpc3RlbmVyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxw
ZXIud3JpdGVfZG9jKHdyaXRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc19u
YW1lID0gZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmaXhlZF90eXBlX25hbWUub3V0cHV0X2NvbW1lbnQod3JpdGVyKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJjbGFzcyAiKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoY2xhc3NfbmFtZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkge1xuIikK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgicHVibGljOlxuIikK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZV93cml0ZXIgPSB3cml0ZXIu
aW5zZXJ0X3dyaXRlcigiICAgICIpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAi
aXRlbXMiIGluIGpzb25fdHlwYWJsZToKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjbGFzcyBBZEhvY1R5cGVDb250ZXh0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmIGdldF90eXBlX25hbWVfZml4KCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xhc3MgTmFtZUZpeDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIyBjbGFzc19uYW1lID0gZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUgKyAi
SXRlbSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Nf
bmFtZSA9ICJJdGVtIgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmIG91dHB1dF9jb21tZW50KHdyaXRlcik6CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZpeGVkX3R5cGVfbmFtZS5vdXRwdXRfY29tbWVu
dCh3cml0ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAjIHdyaXRlci5uZXdsaW5lKCIvLyBOYW1lZCBhcyBhbiBpdGVtIG9mIGFycmF5LlxuIikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOYW1lRml4CiAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBvdXRwdXRfY29tbWVudCh3cml0ZXIpOgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkX3R5cGVfbmFtZS5v
dXRwdXRfY29tbWVudCh3cml0ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd3JpdGVyLm5ld2xpbmUoIi8vIE5hbWVkIGFzIGFuIGl0ZW0gb2YgYXJyYXkuXG4iKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGNhbGxfZ2VuZXJhdGVfdHlw
ZV9idWlsZGVyKGNvZGVfZ2VuZXJhdG9yKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb2RlX2dlbmVyYXRvci5nZW5lcmF0ZV90eXBlX2J1aWxkZXIoYWRfaG9jX3R5
cGVfd3JpdGVyLCBmb3J3YXJkX2xpc3RlbmVyKQogCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBOYW1lRml4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0
ZW1fdHlwZV9iaW5kaW5nID0gcmVzb2x2ZV9wYXJhbV90eXBlKGpzb25fdHlwYWJsZVsiaXRlbXMi
XSwgY29udGV4dF9kb21haW5fbmFtZSwgQWRIb2NUeXBlQ29udGV4dCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVt
X3R5cGVfYmluZGluZyA9IFJhd1R5cGVCaW5kaW5nKFJhd1R5cGVzLkFueSkKIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWYgY2FsbF9nZW5lcmF0ZV90eXBlX2J1aWxkZXIoY29kZV9nZW5lcmF0b3IpOgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvci5nZW5lcmF0ZV90eXBl
X2J1aWxkZXIod3JpdGVyLCBmb3J3YXJkX2xpc3RlbmVyKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciBpdGVtX3R5cGVfb3B0IGluIE1ldGhvZEdlbmVyYXRlTW9kZXMuZ2V0X21vZGVz
KGl0ZW1fdHlwZV9iaW5kaW5nKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLm5ld2xpbmUoIiAgICB2b2lkIGFkZEl0ZW0iKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIuYXBwZW5kKCIoJXMgdmFsdWUpXG4iICUgaXRlbV90eXBlX29wdC5nZXRf
Y19wYXJhbV90eXBlX3RleHQoaXRlbV90eXBlX2JpbmRpbmcpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIHtcbiIpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgIHRoaXMtPnB1c2glcyglcyk7
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChpdGVtX3R5cGVfYmlu
ZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfc2V0dGVyX25hbWUoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fdHlwZV9vcHQuZ2V0X3NldHRlcl92YWx1
ZV9leHByZXNzaW9uKGl0ZW1fdHlwZV9iaW5kaW5nLCAidmFsdWUiKSkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgfVxuIikKIAotICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzb2x2ZV9wYXJhbV90eXBlKGpzb25fdHlwYWJsZVsiaXRlbXMiXSwg
Y29udGV4dF9kb21haW5fbmFtZSwgQWRIb2NUeXBlQ29udGV4dCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb2RlX2dlbmVyYXRvciA9IGl0ZW1fdHlwZV9iaW5kaW5nLmdldF9jb2RlX2dl
bmVyYXRvcigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29kZV9nZW5lcmF0b3I6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yLnJlZ2lzdGVy
X3VzZShmb3J3YXJkX2xpc3RlbmVyKQogCi0gICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRo
b2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIHJlZ2lzdGVyX3VzZShmb3J3YXJkX2xpc3RlbmVy
KToKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3cml0ZXIubmV3bGluZSgifTtcblxuIikKKworICAgICAgICAgICAgICAgICAgICAgICAg
QHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdlbmVyYXRlX2Zvcndh
cmRfZGVjbGFyYXRpb24od3JpdGVyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFz
c19uYW1lID0gZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIubmV3bGluZSgiY2xhc3MgIikKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3cml0ZXIuYXBwZW5kKGNsYXNzX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd3JpdGVyLmFwcGVuZCgiO1xuIikKIAotICAgICAgICAgICAgICAgIGRlZmF1bHRfYmluZGlu
Z19jb2RlX2dlbmVyYXRvciA9IENvZGVHZW5lcmF0b3IKKyAgICAgICAgICAgICAgICAgICAgICAg
IEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiByZWdpc3Rlcl91c2Uo
Zm9yd2FyZF9saXN0ZW5lcik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscGVyLmFk
ZF90b19mb3J3YXJkX2xpc3RlbmVyKGZvcndhcmRfbGlzdGVuZXIpCiAKLSAgICAgICAgZWxzZToK
LSAgICAgICAgICAgIGRlZmF1bHRfYmluZGluZ19jb2RlX2dlbmVyYXRvciA9IE5vbmUKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIENvZGVHZW5lcmF0b3IKKworICAgICAgICAgICAgICAgIEBj
bGFzc21ldGhvZAorICAgICAgICAgICAgICAgIGRlZiBnZXRfaW5fY190eXBlX3RleHQoY2xzLCBv
cHRpb25hbCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiUGFzc1JlZlB0cjwlcyVzPiIg
JSAoaGVscGVyLmZ1bGxfbmFtZV9wcmVmaXgsIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lKQor
CisgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgIGRlZiBnZXRf
c2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gTm9uZQorCisgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAg
ICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IFJhd1R5cGVzLkFycmF5CisKKyAgICAgICAgICAgIHJldHVybiBBcnJheUJpbmRpbmcKIAogICAg
ICAgICByYXdfdHlwZSA9IFJhd1R5cGVzLmdldChqc29uX3R5cGFibGVbInR5cGUiXSkKIAotICAg
ICAgICBjbGFzcyBSYXdUeXBlc0JpbmRpbmc6Ci0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0g
ICAgICAgICAgICBkZWYgZ2V0X2NvZGVfZ2VuZXJhdG9yKCk6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGRlZmF1bHRfYmluZGluZ19jb2RlX2dlbmVyYXRvcgorICAgICAgICByZXR1cm4gUmF3VHlw
ZUJpbmRpbmcocmF3X3R5cGUpCiAKLSAgICAgICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICAg
ICAgZGVmIGdldF9pbl9jX3R5cGVfdGV4dChjbHMsIG9wdGlvbmFsKToKLSAgICAgICAgICAgICAg
ICByZXR1cm4gY2xzLnJlZHVjZV90b19yYXdfdHlwZSgpLmdldF9jX3BhcmFtX3R5cGUoUGFyYW1U
eXBlLkVWRU5ULCBvcHRpb25hbCkuZ2V0X3RleHQoKQogCi0gICAgICAgICAgICBAc3RhdGljbWV0
aG9kCi0gICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4o
KToKLSAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorY2xhc3MgUmF3VHlwZUJpbmRpbmc6Cisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHJhd190eXBlKToKKyAgICAgICAgc2VsZi5yYXdfdHlwZV8g
PSByYXdfdHlwZQogCi0gICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICBkZWYg
cmVkdWNlX3RvX3Jhd190eXBlKCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJhd190eXBlCisg
ICAgZGVmIGdldF9jb2RlX2dlbmVyYXRvcihzZWxmKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKwor
ICAgIGRlZiBnZXRfaW5fY190eXBlX3RleHQoc2VsZiwgb3B0aW9uYWwpOgorICAgICAgICByZXR1
cm4gc2VsZi5yYXdfdHlwZV8uZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuRVZFTlQsIG9wdGlv
bmFsKS5nZXRfdGV4dCgpCiAKLSAgICAgICAgcmV0dXJuIFJhd1R5cGVzQmluZGluZworICAgIGRl
ZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybihzZWxmKToKKyAgICAgICAgcmV0
dXJuIE5vbmUKKworICAgIGRlZiByZWR1Y2VfdG9fcmF3X3R5cGUoc2VsZik6CisgICAgICAgIHJl
dHVybiBzZWxmLnJhd190eXBlXwogCiAKIGNsYXNzIFR5cGVEYXRhKG9iamVjdCk6CkBAIC05NjYs
MTIgKzEwMTYsMjMgQEAgY2xhc3MgVHlwZURhdGEob2JqZWN0KToKICAgICAgICAganNvbl90eXBl
X25hbWUgPSBqc29uX3R5cGVbInR5cGUiXQogICAgICAgICByYXdfdHlwZSA9IFJhd1R5cGVzLmdl
dChqc29uX3R5cGVfbmFtZSkKICAgICAgICAgc2VsZi5yYXdfdHlwZV8gPSByYXdfdHlwZQotICAg
ICAgICBzZWxmLmJpbmRpbmdfID0gVHlwZUJpbmRpbmdzLmNyZWF0ZV9uYW1lZF90eXBlX2RlY2xh
cmF0aW9uKGpzb25fdHlwZSwganNvbl9kb21haW5bImRvbWFpbiJdLCBzZWxmKQorICAgICAgICBz
ZWxmLmJpbmRpbmdfYmVpbmdfcmVzb2x2ZWRfID0gRmFsc2UKKyAgICAgICAgc2VsZi5iaW5kaW5n
XyA9IE5vbmUKIAogICAgIGRlZiBnZXRfcmF3X3R5cGUoc2VsZik6CiAgICAgICAgIHJldHVybiBz
ZWxmLnJhd190eXBlXwogCiAgICAgZGVmIGdldF9iaW5kaW5nKHNlbGYpOgorICAgICAgICBpZiBu
b3Qgc2VsZi5iaW5kaW5nXzoKKyAgICAgICAgICAgIGlmIHNlbGYuYmluZGluZ19iZWluZ19yZXNv
bHZlZF86CisgICAgICAgICAgICAgICAgcmFpc2UgRXJyb3IoIlR5cGUgJXMgaXMgYWxyZWFkeSBi
ZWluZyByZXNvbHZlZCIgJSBzZWxmLmpzb25fdHlwZV9bInR5cGUiXSkKKyAgICAgICAgICAgICMg
UmVzb2x2ZSBvbmx5IGxhemlseSwgYmVjYXVzZSByZXNvbHZpbmcgb25lIG5hbWVkIHR5cGUgbWF5
IHJlcXVpcmUgcmVzb2x2aW5nIHNvbWUgb3RoZXIgbmFtZWQgdHlwZS4KKyAgICAgICAgICAgIHNl
bGYuYmluZGluZ19iZWluZ19yZXNvbHZlZF8gPSBUcnVlCisgICAgICAgICAgICB0cnk6CisgICAg
ICAgICAgICAgICAgc2VsZi5iaW5kaW5nXyA9IFR5cGVCaW5kaW5ncy5jcmVhdGVfbmFtZWRfdHlw
ZV9kZWNsYXJhdGlvbihzZWxmLmpzb25fdHlwZV8sIHNlbGYuanNvbl9kb21haW5fWyJkb21haW4i
XSwgc2VsZikKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2VsZi5iaW5k
aW5nX2JlaW5nX3Jlc29sdmVkXyA9IEZhbHNlCisKICAgICAgICAgcmV0dXJuIHNlbGYuYmluZGlu
Z18KIAogICAgIGRlZiBnZXRfanNvbl90eXBlKHNlbGYpOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>122030</attachid>
            <date>2012-01-11 08:21:22 -0800</date>
            <delta_ts>2012-01-12 06:08:01 -0800</delta_ts>
            <desc>InspectorFrontend.h base version</desc>
            <filename>InspectorFrontend.base.h</filename>
            <type>text/plain</type>
            <size>146861</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgojaWZuZGVmIEluc3BlY3RvckZyb250ZW5kX2gKI2RlZmluZSBJbnNw
ZWN0b3JGcm9udGVuZF9oCgojaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiNpbmNsdWRlIDxQ
bGF0Zm9ybVN0cmluZy5oPgojaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KCm5hbWVzcGFjZSBX
ZWJDb3JlIHsKCmNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKCi8vIEJvdGggSW5zcGVj
dG9yT2JqZWN0IGFuZCBJbnNwZWN0b3JBcnJheSBtYXkgb3IgbWF5IG5vdCBiZSBkZWNsYXJlZCBh
dCB0aGlzIHBvaW50IGFzIGRlZmluZWQgYnkgRU5BQkxFRF9JTlNQRUNUT1IuCi8vIERvdWJsZS1j
aGVjayB3ZSBoYXZlIHRoZW0gYXQgbGVhc3QgYXMgZm9yd2FyZCBkZWNsYXJhdGlvbi4KY2xhc3Mg
SW5zcGVjdG9yQXJyYXk7CmNsYXNzIEluc3BlY3Rvck9iamVjdDsKCnR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwoKI2lmIEVOQUJMRShJTlNQRUNUT1IpCgpuYW1lc3BhY2UgVHlwZUJ1aWxkZXIg
ewovLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KbmFtZXNwYWNlIENTUyB7CmNsYXNzIFNvdXJjZVJh
bmdlOwpjbGFzcyBDU1NTdHlsZTsKfSAvLyBDU1MKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikKbmFtZXNwYWNlIERlYnVnZ2VyIHsKY2xhc3MgTG9jYXRpb247Cn0gLy8gRGVidWdnZXIK
CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLy8gRW5kIG9mIGZvcndhcmQg
ZGVjbGFyYXRpb25zLgoKClN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7Cgpu
YW1lc3BhY2UgTWVtb3J5IHsKLyogTnVtYmVyIG9mIG5vZGVzIHdpdGggZ2l2ZW4gbmFtZS4gKi8K
Y2xhc3MgTm9kZUNvdW50IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVu
dW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIE5PREVfTkFNRV9TRVQgPSAx
IDw8IDAsCiAgICAgICAgQ09VTlRfU0VUID0gMSA8PCAxLAogICAgICAgIEFMTF9GSUVMRFNfU0VU
ID0gKE5PREVfTkFNRV9TRVQgfCBDT1VOVF9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBT
VEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxOb2RlQ291bnQ+IHB0cikKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxk
ZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRy
OwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgTm9kZUNvdW50OwogICAgcHVibGljOgoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTk9ERV9OQU1FX1NFVD4mIHNldE5vZGVOYW1lKGNvbnN0
IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgTk9ERV9OQU1FX1NFVCksIHByb3BlcnR5X25vZGVOYW1lX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibm9kZU5hbWUiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8Tk9ERV9OQU1FX1NFVD4oKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBDT1VOVF9TRVQ+JiBzZXRDb3VudChpbnQgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ09VTlRfU0VUKSwgcHJvcGVy
dHlfY291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJj
b3VudCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDT1VOVF9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Tm9kZUNvdW50PiYgKCkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZlB0cjxOb2RlQ291bnQ+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJh
dG9yIFBhc3NSZWZQdHI8Tm9kZUNvdW50PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJu
IFJlZlB0cjxOb2RlQ291bnQ+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAg
KiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Tm9kZUNvdW50PiByZXN1bHQg
PSBOb2RlQ291bnQ6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldE5vZGVOYW1lKC4uLikKICAgICAq
ICAgICAuc2V0Q291bnQoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERT
X1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VU
PihhZG9wdFJlZihuZXcgTm9kZUNvdW50KCkpKTsKICAgIH0KfTsKCi8qIE51bWJlciBvZiBKUyBl
dmVudCBsaXN0ZW5lcnMgYnkgZXZlbnQgdHlwZS4gKi8KY2xhc3MgTGlzdGVuZXJDb3VudCA6IHB1
YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVM
RFNfU0VUID0gMCwKICAgICAgICBUWVBFX1NFVCA9IDEgPDwgMCwKICAgICAgICBDT1VOVF9TRVQg
PSAxIDw8IDEsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoVFlQRV9TRVQgfCBDT1VOVF9TRVQp
CiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAg
cHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAg
ICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkK
ICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0
cjxMaXN0ZW5lckNvdW50PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3Rh
dGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5k
IGNsYXNzIExpc3RlbmVyQ291bnQ7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBUWVBFX1NFVD4mIHNldFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUWVBFX1NFVCksIHByb3BlcnR5X3R5cGVf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRZUEVfU0VUPigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IENPVU5UX1NFVD4mIHNldENvdW50KGludCB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDT1VOVF9TRVQp
LCBwcm9wZXJ0eV9jb3VudF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRO
dW1iZXIoImNvdW50IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENPVU5U
X1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxMaXN0ZW5lckNvdW50
PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9G
SUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PFJlZlB0cjxMaXN0ZW5lckNvdW50Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAg
fQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPExpc3RlbmVyQ291bnQ+ICgpCiAgICAgICAg
ewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPExpc3RlbmVyQ291bnQ+KCp0aGlzKTsKICAgICAg
ICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBS
ZWZQdHI8TGlzdGVuZXJDb3VudD4gcmVzdWx0ID0gTGlzdGVuZXJDb3VudDo6Y3JlYXRlKCkKICAg
ICAqICAgICAuc2V0VHlwZSguLi4pCiAgICAgKiAgICAgLnNldENvdW50KC4uLik7CiAgICAgKi8K
ICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAg
cmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IExpc3RlbmVyQ291bnQo
KSkpOwogICAgfQp9OwoKY2xhc3MgRE9NR3JvdXAgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsK
cHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgU0la
RV9TRVQgPSAxIDw8IDAsCiAgICAgICAgVElUTEVfU0VUID0gMSA8PCAxLAogICAgICAgIE5PREVf
Q09VTlRfU0VUID0gMSA8PCAyLAogICAgICAgIExJU1RFTkVSX0NPVU5UX1NFVCA9IDEgPDwgMywK
ICAgICAgICBBTExfRklFTERTX1NFVCA9IChTSVpFX1NFVCB8IFRJVExFX1NFVCB8IE5PREVfQ09V
TlRfU0VUIHwgTElTVEVORVJfQ09VTlRfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RB
VEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8RE9NR3JvdXA+IHB0cikKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJf
Y3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwog
ICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgRE9NR3JvdXA7CiAgICBwdWJsaWM6CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBTSVpFX1NFVD4mIHNldFNpemUoaW50IHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNJWkVfU0VUKSwgcHJvcGVy
dHlfc2l6ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNp
emUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U0laRV9TRVQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVElUTEVfU0VUPiYgc2V0VGl0bGUoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBUSVRMRV9TRVQpLCBwcm9wZXJ0eV90aXRsZV9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInRpdGxlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFRJVExFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBOT0RFX0NPVU5UX1NFVD4mIHNldE5vZGVDb3VudChQYXNzUmVmUHRyPEluc3BlY3RvckFy
cmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBOT0RFX0NPVU5UX1NFVCksIHByb3BlcnR5X25vZGVDb3VudF9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgibm9kZUNvdW50IiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPE5PREVfQ09VTlRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IExJU1RFTkVSX0NPVU5UX1NFVD4mIHNldExpc3RlbmVyQ291bnQoUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgTElTVEVORVJfQ09VTlRfU0VUKSwgcHJvcGVydHlfbGlzdGVu
ZXJDb3VudF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgibGlz
dGVuZXJDb3VudCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxMSVNURU5F
Ul9DT1VOVF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8RE9NR3Jv
dXA+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxM
X0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPERPTUdyb3VwPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoK
ICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPERPTUdyb3VwPiAoKQogICAgICAgIHsKICAgICAg
ICAgICAgcmV0dXJuIFJlZlB0cjxET01Hcm91cD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07Cgog
ICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxET01Hcm91
cD4gcmVzdWx0ID0gRE9NR3JvdXA6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFNpemUoLi4uKQog
ICAgICogICAgIC5zZXRUaXRsZSguLi4pCiAgICAgKiAgICAgLnNldE5vZGVDb3VudCguLi4pCiAg
ICAgKiAgICAgLnNldExpc3RlbmVyQ291bnQoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxk
ZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxO
T19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgRE9NR3JvdXAoKSkpOwogICAgfQoKICAgIHZvaWQg
c2V0RG9jdW1lbnRVUkkoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXRTdHJpbmcoImRvY3VtZW50VVJJIiwgdmFsdWUpOwogICAgfQp9OwoKfSAvLyBNZW1vcnkKCm5h
bWVzcGFjZSBQYWdlIHsKLyogUmVzb3VyY2UgdHlwZSBhcyBpdCB3YXMgcGVyY2VpdmVkIGJ5IHRo
ZSByZW5kZXJpbmcgZW5naW5lLiAqLwpzdHJ1Y3QgUmVzb3VyY2VUeXBlIHsKICAgIGVudW0gRW51
bSB7CiAgICAgICAgRG9jdW1lbnQgPSAwLAogICAgICAgIFN0eWxlc2hlZXQgPSAxLAogICAgICAg
IEltYWdlID0gMiwKICAgICAgICBGb250ID0gMywKICAgICAgICBTY3JpcHQgPSA0LAogICAgICAg
IFhIUiA9IDUsCiAgICAgICAgV2ViU29ja2V0ID0gNiwKICAgICAgICBPdGhlciA9IDcsCiAgICB9
Owp9OyAvLyBzdHJ1Y3QgUmVzb3VyY2VUeXBlCgovKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgRnJh
bWUgb24gdGhlIHBhZ2UuICovCmNsYXNzIEZyYW1lIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7
CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIElE
X1NFVCA9IDEgPDwgMCwKICAgICAgICBMT0FERVJfSURfU0VUID0gMSA8PCAxLAogICAgICAgIFVS
TF9TRVQgPSAxIDw8IDIsCiAgICAgICAgTUlNRV9UWVBFX1NFVCA9IDEgPDwgMywKICAgICAgICBB
TExfRklFTERTX1NFVCA9IChJRF9TRVQgfCBMT0FERVJfSURfU0VUIHwgVVJMX1NFVCB8IE1JTUVf
VFlQRV9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxk
ZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3Vs
dDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxC
dWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIo
UGFzc1JlZlB0cjxGcmFtZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0
YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVu
ZCBjbGFzcyBGcmFtZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IElEX1NF
VD4mIHNldElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgSURfU0VUKSwgcHJvcGVydHlfaWRfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJpZCIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxJRF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgTE9BREVSX0lEX1NFVD4mIHNldExvYWRlcklkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTE9BREVSX0lEX1NF
VCksIHByb3BlcnR5X2xvYWRlcklkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZygibG9hZGVySWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8TE9BREVSX0lEX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBV
UkxfU0VUPiYgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVVJMX1NFVCksIHByb3BlcnR5X3VybF9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVUkxfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IE1JTUVfVFlQRV9TRVQ+JiBzZXRNaW1lVHlwZShjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1J
TUVfVFlQRV9TRVQpLCBwcm9wZXJ0eV9taW1lVHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1pbWVUeXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPE1JTUVfVFlQRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRv
ciBSZWZQdHI8RnJhbWU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEZyYW1lPio+KCZtX3Jlc3VsdCk7CiAg
ICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEZyYW1lPiAoKQogICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxGcmFtZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07
CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxGcmFt
ZT4gcmVzdWx0ID0gRnJhbWU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldElkKC4uLikKICAgICAq
ICAgICAuc2V0TG9hZGVySWQoLi4uKQogICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICogICAg
IC5zZXRNaW1lVHlwZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNf
U0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+
KGFkb3B0UmVmKG5ldyBGcmFtZSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRQYXJlbnRJZChjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygicGFyZW50SWQi
LCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJuYW1lIiwgdmFsdWUpOwogICAgfQp9OwoKLyog
SW5mb3JtYXRpb24gYWJvdXQgdGhlIEZyYW1lIGhpZXJhcmNoeSBhbG9uZyB3aXRoIHRoZWlyIGNh
Y2hlZCByZXNvdXJjZXMuICovCmNsYXNzIEZyYW1lUmVzb3VyY2VUcmVlIDogcHVibGljIEluc3Bl
Y3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3Jl
c291cmNlcycgd2hpbGUgZ2VuZXJhdGluZyBGcmFtZVJlc291cmNlVHJlZS4KICAgIC8vIE5hbWVk
IGFzIGFuIGl0ZW0gb2YgYXJyYXkuCiAgICBjbGFzcyBSZXNvdXJjZXNJdGVtIDogcHVibGljIElu
c3BlY3Rvck9iamVjdCB7CiAgICBwdWJsaWM6CiAgICAgICAgZW51bSB7CiAgICAgICAgICAgIE5P
X0ZJRUxEU19TRVQgPSAwLAogICAgICAgICAgICBVUkxfU0VUID0gMSA8PCAwLAogICAgICAgICAg
ICBUWVBFX1NFVCA9IDEgPDwgMSwKICAgICAgICAgICAgTUlNRV9UWVBFX1NFVCA9IDEgPDwgMiwK
ICAgICAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoVVJMX1NFVCB8IFRZUEVfU0VUIHwgTUlNRV9U
WVBFX1NFVCkKICAgICAgICB9OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICAgICAg
Y2xhc3MgQnVpbGRlciB7CiAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVp
bGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxSZXNvdXJj
ZXNJdGVtPiBwdHIpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0
ZSk7CiAgICAgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICAgICAgfQogICAgICAg
ICAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VzSXRlbTsKICAgICAgICBwdWJsaWM6CiAgICAKICAg
ICAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVSTF9TRVQ+JiBzZXRVcmwoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFVSTF9TRVQpLCBwcm9wZXJ0eV91cmxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygidXJsIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxVUkxfU0VUPigpOwogICAgICAgICAgICB9CiAgICAKICAgICAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFRZUEVfU0VUPiYgc2V0VHlwZShUeXBlQnVpbGRlcjo6UGFnZTo6UmVzb3Vy
Y2VUeXBlOjpFbnVtIHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCBnZXRFbnVtQ29uc3Rh
bnRWYWx1ZSh2YWx1ZSkpOwogICAgICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUWVBFX1NF
VD4oKTsKICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUWVBF
X1NFVD4mIHNldFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRZUEVfU0VUKSwgcHJvcGVydHlfdHlw
ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBl
IiwgdmFsdWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUWVBFX1NFVD4oKTsK
ICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNSU1FX1RZUEVf
U0VUPiYgc2V0TWltZVR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1JTUVfVFlQRV9TRVQpLCBwcm9w
ZXJ0eV9taW1lVHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJtaW1lVHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8TUlNRV9UWVBFX1NFVD4oKTsKICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgIG9wZXJh
dG9yIFJlZlB0cjxSZXNvdXJjZXNJdGVtPiYgKCkKICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOwogICAgICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxS
ZXNvdXJjZXNJdGVtPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG9w
ZXJhdG9yIFBhc3NSZWZQdHI8UmVzb3VyY2VzSXRlbT4gKCkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgcmV0dXJuIFJlZlB0cjxSZXNvdXJjZXNJdGVtPigqdGhpcyk7CiAgICAgICAgICAg
IH0KICAgICAgICB9OwoKICAgICAgICAvKgogICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKICAgICAgICAgKiBSZWZQdHI8UmVzb3VyY2VzSXRlbT4gcmVzdWx0ID0gUmVzb3VyY2VzSXRl
bTo6Y3JlYXRlKCkKICAgICAgICAgKiAgICAgLnNldFVybCguLi4pCiAgICAgICAgICogICAgIC5z
ZXRUeXBlKC4uLikKICAgICAgICAgKiAgICAgLnNldE1pbWVUeXBlKC4uLik7CiAgICAgICAgICov
CiAgICAgICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBS
ZXNvdXJjZXNJdGVtKCkpKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewogICAgICAgIE5P
X0ZJRUxEU19TRVQgPSAwLAogICAgICAgIEZSQU1FX1NFVCA9IDEgPDwgMCwKICAgICAgICBSRVNP
VVJDRVNfU0VUID0gMSA8PCAxLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKEZSQU1FX1NFVCB8
IFJFU09VUkNFU19TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNz
IEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBt
X3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
PiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXIoUGFzc1JlZlB0cjxGcmFtZVJlc291cmNlVHJlZT4gcHRyKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVh
dGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAg
ICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBGcmFtZVJlc291cmNlVHJlZTsKICAgIHB1YmxpYzoK
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEZSQU1FX1NFVD4mIHNldEZyYW1lKC8qUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6UGFnZTo6RnJhbWU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEZS
QU1FX1NFVCksIHByb3BlcnR5X2ZyYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldE9iamVjdCgiZnJhbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8RlJBTUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFJFU09V
UkNFU19TRVQ+JiBzZXRSZXNvdXJjZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUkVTT1VSQ0VT
X1NFVCksIHByb3BlcnR5X3Jlc291cmNlc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRBcnJheSgicmVzb3VyY2VzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFJFU09VUkNFU19TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQ
dHI8RnJhbWVSZXNvdXJjZVRyZWU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEZyYW1lUmVzb3VyY2VUcmVl
Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEZy
YW1lUmVzb3VyY2VUcmVlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxG
cmFtZVJlc291cmNlVHJlZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxGcmFtZVJlc291cmNlVHJlZT4g
cmVzdWx0ID0gRnJhbWVSZXNvdXJjZVRyZWU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldEZyYW1l
KC4uLikKICAgICAqICAgICAuc2V0UmVzb3VyY2VzKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBC
dWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxk
ZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IEZyYW1lUmVzb3VyY2VUcmVlKCkpKTsKICAg
IH0KCiAgICB2b2lkIHNldENoaWxkRnJhbWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZh
bHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJjaGlsZEZyYW1lcyIsIHZhbHVlKTsK
ICAgIH0KfTsKCi8qIFNlYXJjaCBtYXRjaCBmb3IgcmVzb3VyY2UuICovCmNsYXNzIFNlYXJjaE1h
dGNoIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAg
IE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIExJTkVfTlVNQkVSX1NFVCA9IDEgPDwgMCwKICAg
ICAgICBMSU5FX0NPTlRFTlRfU0VUID0gMSA8PCAxLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0g
KExJTkVfTlVNQkVSX1NFVCB8IExJTkVfQ09OVEVOVF9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRl
PGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+
IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxTZWFyY2hNYXRjaD4gcHRyKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NF
VCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1
bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBTZWFyY2hNYXRjaDsKICAg
IHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExJTkVfTlVNQkVSX1NFVD4mIHNldExp
bmVOdW1iZXIoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIExJTkVfTlVNQkVSX1NFVCksIHByb3BlcnR5X2xpbmVOdW1iZXJfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPExJTkVfTlVNQkVSX1NFVD4oKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBMSU5FX0NPTlRFTlRfU0VUPiYgc2V0TGlu
ZUNvbnRlbnQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBMSU5FX0NPTlRFTlRfU0VUKSwgcHJvcGVydHlfbGluZUNvbnRl
bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJsaW5lQ29u
dGVudCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxMSU5FX0NPTlRFTlRf
U0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFNlYXJjaE1hdGNoPiYg
KCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVM
RFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PFJlZlB0cjxTZWFyY2hNYXRjaD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAg
ICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxTZWFyY2hNYXRjaD4gKCkKICAgICAgICB7CiAgICAg
ICAgICAgIHJldHVybiBSZWZQdHI8U2VhcmNoTWF0Y2g+KCp0aGlzKTsKICAgICAgICB9CiAgICB9
OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8U2Vh
cmNoTWF0Y2g+IHJlc3VsdCA9IFNlYXJjaE1hdGNoOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRM
aW5lTnVtYmVyKC4uLikKICAgICAqICAgICAuc2V0TGluZUNvbnRlbnQoLi4uKTsKICAgICAqLwog
ICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICBy
ZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgU2VhcmNoTWF0Y2goKSkp
OwogICAgfQp9OwoKLyogU2VhcmNoIHJlc3VsdCBmb3IgcmVzb3VyY2UuICovCmNsYXNzIFNlYXJj
aFJlc3VsdCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAg
ICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBVUkxfU0VUID0gMSA8PCAwLAogICAgICAg
IEZSQU1FX0lEX1NFVCA9IDEgPDwgMSwKICAgICAgICBNQVRDSEVTX0NPVU5UX1NFVCA9IDEgPDwg
MiwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChVUkxfU0VUIHwgRlJBTUVfSURfU0VUIHwgTUFU
Q0hFU19DT1VOVF9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNz
IEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBt
X3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
PiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXIoUGFzc1JlZlB0cjxTZWFyY2hSZXN1bHQ+IHB0cikKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9p
bl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0K
ICAgICAgICBmcmllbmQgY2xhc3MgU2VhcmNoUmVzdWx0OwogICAgcHVibGljOgoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgVVJMX1NFVD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVSTF9TRVQpLCBwcm9w
ZXJ0eV91cmxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ1
cmwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VVJMX1NFVD4oKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBGUkFNRV9JRF9TRVQ+JiBzZXRGcmFtZUlk
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgRlJBTUVfSURfU0VUKSwgcHJvcGVydHlfZnJhbWVJZF9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImZyYW1lSWQiLCB2YWx1ZSk7CiAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8RlJBTUVfSURfU0VUPigpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IE1BVENIRVNfQ09VTlRfU0VUPiYgc2V0TWF0Y2hlc0NvdW50KGRv
dWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBNQVRDSEVTX0NPVU5UX1NFVCksIHByb3BlcnR5X21hdGNoZXNDb3VudF9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoIm1hdGNoZXNDb3VudCIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNQVRDSEVTX0NPVU5UX1NFVD4oKTsKICAgICAg
ICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxTZWFyY2hSZXN1bHQ+JiAoKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3Vs
dF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVm
UHRyPFNlYXJjaFJlc3VsdD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0
b3IgUGFzc1JlZlB0cjxTZWFyY2hSZXN1bHQ+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1
cm4gUmVmUHRyPFNlYXJjaFJlc3VsdD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoK
ICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxTZWFyY2hSZXN1bHQ+
IHJlc3VsdCA9IFNlYXJjaFJlc3VsdDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VXJsKC4uLikK
ICAgICAqICAgICAuc2V0RnJhbWVJZCguLi4pCiAgICAgKiAgICAgLnNldE1hdGNoZXNDb3VudCgu
Li4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQog
ICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBT
ZWFyY2hSZXN1bHQoKSkpOwogICAgfQp9OwoKLyogQ29va2llIG9iamVjdCAqLwpjbGFzcyBDb29r
aWUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAg
Tk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgTkFNRV9TRVQgPSAxIDw8IDAsCiAgICAgICAgVkFM
VUVfU0VUID0gMSA8PCAxLAogICAgICAgIERPTUFJTl9TRVQgPSAxIDw8IDIsCiAgICAgICAgUEFU
SF9TRVQgPSAxIDw8IDMsCiAgICAgICAgRVhQSVJFU19TRVQgPSAxIDw8IDQsCiAgICAgICAgU0la
RV9TRVQgPSAxIDw8IDUsCiAgICAgICAgSFRUUF9PTkxZX1NFVCA9IDEgPDwgNiwKICAgICAgICBT
RUNVUkVfU0VUID0gMSA8PCA3LAogICAgICAgIFNFU1NJT05fU0VUID0gMSA8PCA4LAogICAgICAg
IEFMTF9GSUVMRFNfU0VUID0gKE5BTUVfU0VUIHwgVkFMVUVfU0VUIHwgRE9NQUlOX1NFVCB8IFBB
VEhfU0VUIHwgRVhQSVJFU19TRVQgfCBTSVpFX1NFVCB8IEhUVFBfT05MWV9TRVQgfCBTRUNVUkVf
U0VUIHwgU0VTU0lPTl9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNs
YXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXIoUGFzc1JlZlB0cjxDb29raWU+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAg
ICAgICBmcmllbmQgY2xhc3MgQ29va2llOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgTkFNRV9TRVQ+JiBzZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTkFNRV9TRVQpLCBwcm9wZXJ0eV9u
YW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibmFtZSIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOQU1FX1NFVD4oKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWQUxVRV9TRVQ+JiBzZXRWYWx1ZShjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFZBTFVFX1NFVCksIHByb3BlcnR5X3ZhbHVlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygidmFsdWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8VkFMVUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IERPTUFJTl9TRVQ+JiBzZXREb21haW4oY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBET01BSU5fU0VUKSwgcHJvcGVydHlf
ZG9tYWluX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZG9t
YWluIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERPTUFJTl9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUEFUSF9TRVQ+JiBzZXRQYXRoKGNv
bnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgUEFUSF9TRVQpLCBwcm9wZXJ0eV9wYXRoX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygicGF0aCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxQQVRIX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBFWFBJUkVTX1NFVD4mIHNldEV4cGlyZXMoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVYUElSRVNfU0VUKSwgcHJvcGVydHlfZXhwaXJl
c19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImV4cGlyZXMi
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RVhQSVJFU19TRVQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU0laRV9TRVQ+JiBzZXRTaXplKGludCB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTSVpF
X1NFVCksIHByb3BlcnR5X3NpemVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0TnVtYmVyKCJzaXplIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNJ
WkVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEhUVFBfT05MWV9T
RVQ+JiBzZXRIdHRwT25seShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIEhUVFBfT05MWV9TRVQpLCBwcm9wZXJ0eV9odHRwT25seV9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJodHRwT25seSIsIHZh
bHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxIVFRQX09OTFlfU0VUPigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNFQ1VSRV9TRVQ+JiBzZXRTZWN1cmUoYm9v
bCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBT
RUNVUkVfU0VUKSwgcHJvcGVydHlfc2VjdXJlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldEJvb2xlYW4oInNlY3VyZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxTRUNVUkVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IFNFU1NJT05fU0VUPiYgc2V0U2Vzc2lvbihib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNFU1NJT05fU0VUKSwgcHJvcGVydHlfc2Vzc2lv
bl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJzZXNzaW9u
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNFU1NJT05fU0VUPigpOwog
ICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENvb2tpZT4mICgpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0
X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQ
dHI8Q29va2llPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNz
UmVmUHRyPENvb2tpZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q29v
a2llPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNv
bnN0cnVjdG9yOgogICAgICogUmVmUHRyPENvb2tpZT4gcmVzdWx0ID0gQ29va2llOjpjcmVhdGUo
KQogICAgICogICAgIC5zZXROYW1lKC4uLikKICAgICAqICAgICAuc2V0VmFsdWUoLi4uKQogICAg
ICogICAgIC5zZXREb21haW4oLi4uKQogICAgICogICAgIC5zZXRQYXRoKC4uLikKICAgICAqICAg
ICAuc2V0RXhwaXJlcyguLi4pCiAgICAgKiAgICAgLnNldFNpemUoLi4uKQogICAgICogICAgIC5z
ZXRIdHRwT25seSguLi4pCiAgICAgKiAgICAgLnNldFNlY3VyZSguLi4pCiAgICAgKiAgICAgLnNl
dFNlc3Npb24oLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4g
Y3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9w
dFJlZihuZXcgQ29va2llKCkpKTsKICAgIH0KfTsKCi8qIFVuaXF1ZSBzY3JpcHQgaWRlbnRpZmll
ci4gKi8KdHlwZWRlZiBTdHJpbmcgU2NyaXB0SWRlbnRpZmllcjsKCn0gLy8gUGFnZQoKbmFtZXNw
YWNlIFJ1bnRpbWUgewovKiBVbmlxdWUgb2JqZWN0IGlkZW50aWZpZXIuICovCnR5cGVkZWYgU3Ry
aW5nIFJlbW90ZU9iamVjdElkOwoKLyogTWlycm9yIG9iamVjdCByZWZlcmVuY2luZyBvcmlnaW5h
bCBKYXZhU2NyaXB0IG9iamVjdC4gKi8KY2xhc3MgUmVtb3RlT2JqZWN0IDogcHVibGljIEluc3Bl
Y3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3R5
cGUnIHdoaWxlIGdlbmVyYXRpbmcgUmVtb3RlT2JqZWN0LgogICAgc3RydWN0IFR5cGUgewogICAg
ICAgIGVudW0gRW51bSB7CiAgICAgICAgICAgIE9iamVjdCA9IDgsCiAgICAgICAgICAgIEZ1bmN0
aW9uID0gOSwKICAgICAgICAgICAgVW5kZWZpbmVkID0gMTAsCiAgICAgICAgICAgIFN0cmluZyA9
IDExLAogICAgICAgICAgICBOdW1iZXIgPSAxMiwKICAgICAgICAgICAgQm9vbGVhbiA9IDEzLAog
ICAgICAgIH07CiAgICB9OyAvLyBzdHJ1Y3QgVHlwZQoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3Bl
cnR5IG5hbWUgJ3N1YnR5cGUnIHdoaWxlIGdlbmVyYXRpbmcgUmVtb3RlT2JqZWN0LgogICAgc3Ry
dWN0IFN1YnR5cGUgewogICAgICAgIGVudW0gRW51bSB7CiAgICAgICAgICAgIEFycmF5ID0gMTQs
CiAgICAgICAgICAgIE51bGwgPSAxNSwKICAgICAgICAgICAgTm9kZSA9IDE2LAogICAgICAgICAg
ICBSZWdleHAgPSAxNywKICAgICAgICAgICAgRGF0ZSA9IDE4LAogICAgICAgIH07CiAgICB9OyAv
LyBzdHJ1Y3QgU3VidHlwZQoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAog
ICAgICAgIFRZUEVfU0VUID0gMSA8PCAwLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFRZUEVf
U0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsK
ICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7Cgog
ICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0
ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRl
cjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NS
ZWZQdHI8UmVtb3RlT2JqZWN0PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJp
ZW5kIGNsYXNzIFJlbW90ZU9iamVjdDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFRZUEVfU0VUPiYgc2V0VHlwZShUeXBlOjpFbnVtIHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRZUEVfU0VUKSwgcHJvcGVydHlfdHlwZV9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCBnZXRF
bnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRZ
UEVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRZUEVfU0VUPiYg
c2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIFRZUEVfU0VUKSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8VFlQRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVy
YXRvciBSZWZQdHI8UmVtb3RlT2JqZWN0PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxSZW1vdGVPYmplY3Q+
Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8UmVt
b3RlT2JqZWN0PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxSZW1vdGVP
YmplY3Q+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMg
Y29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8UmVtb3RlT2JqZWN0PiByZXN1bHQgPSBSZW1vdGVP
YmplY3Q6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFR5cGUoLi4uKTsKICAgICAqLwogICAgc3Rh
dGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4g
QnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgUmVtb3RlT2JqZWN0KCkpKTsKICAg
IH0KCiAgICB2b2lkIHNldFN1YnR5cGUoU3VidHlwZTo6RW51bSB2YWx1ZSkKICAgIHsKICAgICAg
ICB0aGlzLT5zZXRTdHJpbmcoInN1YnR5cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkp
OwogICAgfQoKICAgIHZvaWQgc2V0U3VidHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewog
ICAgICAgIHRoaXMtPnNldFN0cmluZygic3VidHlwZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lk
IHNldENsYXNzTmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNl
dFN0cmluZygiY2xhc3NOYW1lIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0VmFsdWUoUGFz
c1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0VmFs
dWUoInZhbHVlIiwgdmFsdWUpOwogICAgfQogICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0OjpzZXRW
YWx1ZTsKCgogICAgdm9pZCBzZXREZXNjcmlwdGlvbihjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ewogICAgICAgIHRoaXMtPnNldFN0cmluZygiZGVzY3JpcHRpb24iLCB2YWx1ZSk7CiAgICB9Cgog
ICAgdm9pZCBzZXRPYmplY3RJZChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRo
aXMtPnNldFN0cmluZygib2JqZWN0SWQiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBPYmplY3QgcHJv
cGVydHkgZGVzY3JpcHRvci4gKi8KY2xhc3MgUHJvcGVydHlEZXNjcmlwdG9yIDogcHVibGljIElu
c3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQg
PSAwLAogICAgICAgIE5BTUVfU0VUID0gMSA8PCAwLAogICAgICAgIFdSSVRBQkxFX1NFVCA9IDEg
PDwgMSwKICAgICAgICBDT05GSUdVUkFCTEVfU0VUID0gMSA8PCAyLAogICAgICAgIEVOVU1FUkFC
TEVfU0VUID0gMSA8PCAzLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKE5BTUVfU0VUIHwgV1JJ
VEFCTEVfU0VUIHwgQ09ORklHVVJBQkxFX1NFVCB8IEVOVU1FUkFCTEVfU0VUKQogICAgfTsKCiAg
ICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRl
PGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+
Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8UHJvcGVydHlE
ZXNjcmlwdG9yPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwog
ICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNz
IFByb3BlcnR5RGVzY3JpcHRvcjsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IE5BTUVfU0VUPiYgc2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5BTUVfU0VUKSwgcHJvcGVydHlfbmFtZV9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TkFNRV9TRVQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgV1JJVEFCTEVfU0VUPiYgc2V0V3JpdGFibGUoYm9vbCB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBXUklU
QUJMRV9TRVQpLCBwcm9wZXJ0eV93cml0YWJsZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRCb29sZWFuKCJ3cml0YWJsZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxXUklUQUJMRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgQ09ORklHVVJBQkxFX1NFVD4mIHNldENvbmZpZ3VyYWJsZShib29sIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENPTkZJR1VSQUJMRV9T
RVQpLCBwcm9wZXJ0eV9jb25maWd1cmFibGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0Qm9vbGVhbigiY29uZmlndXJhYmxlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPENPTkZJR1VSQUJMRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgRU5VTUVSQUJMRV9TRVQ+JiBzZXRFbnVtZXJhYmxlKGJvb2wgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRU5VTUVSQUJMRV9T
RVQpLCBwcm9wZXJ0eV9lbnVtZXJhYmxlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldEJvb2xlYW4oImVudW1lcmFibGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8RU5VTUVSQUJMRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBS
ZWZQdHI8UHJvcGVydHlEZXNjcmlwdG9yPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxQcm9wZXJ0eURlc2Ny
aXB0b3I+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQ
dHI8UHJvcGVydHlEZXNjcmlwdG9yPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJl
ZlB0cjxQcm9wZXJ0eURlc2NyaXB0b3I+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8q
CiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8UHJvcGVydHlEZXNj
cmlwdG9yPiByZXN1bHQgPSBQcm9wZXJ0eURlc2NyaXB0b3I6OmNyZWF0ZSgpCiAgICAgKiAgICAg
LnNldE5hbWUoLi4uKQogICAgICogICAgIC5zZXRXcml0YWJsZSguLi4pCiAgICAgKiAgICAgLnNl
dENvbmZpZ3VyYWJsZSguLi4pCiAgICAgKiAgICAgLnNldEVudW1lcmFibGUoLi4uKTsKICAgICAq
LwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAg
ICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgUHJvcGVydHlEZXNj
cmlwdG9yKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFZhbHVlKC8qUGFzc1JlZlB0cjxUeXBlQnVp
bGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoInZhbHVlIiwgdmFsdWUpOwog
ICAgfQogICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0OjpzZXRWYWx1ZTsKCgogICAgdm9pZCBzZXRH
ZXQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+Ki8gUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9i
amVjdCgiZ2V0IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U2V0KC8qUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoInNldCIsIHZhbHVl
KTsKICAgIH0KCiAgICB2b2lkIHNldFdhc1Rocm93bihib29sIHZhbHVlKQogICAgewogICAgICAg
IHRoaXMtPnNldEJvb2xlYW4oIndhc1Rocm93biIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIFJlcHJl
c2VudHMgZnVuY3Rpb24gY2FsbCBhcmd1bWVudC4gRWl0aGVyIHJlbW90ZSBvYmplY3QgaWQgPGNv
ZGU+b2JqZWN0SWQ8L2NvZGU+IG9yIHByaW1pdGl2ZSA8Y29kZT52YWx1ZTwvY29kZT4gb3IgbmVp
dGhlciBvZiAoZm9yIHVuZGVmaW5lZCkgdGhlbSBzaG91bGQgYmUgc3BlY2lmaWVkLiAqLwpjbGFz
cyBDYWxsQXJndW1lbnQgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51
bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAw
CiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAg
cHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAg
ICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkK
ICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0
cjxDYWxsQXJndW1lbnQ+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0
ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQg
Y2xhc3MgQ2FsbEFyZ3VtZW50OwogICAgcHVibGljOgoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8
Q2FsbEFyZ3VtZW50PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDYWxsQXJndW1lbnQ+Kj4oJm1fcmVzdWx0
KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q2FsbEFyZ3VtZW50PiAo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDYWxsQXJndW1lbnQ+KCp0aGlz
KTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6
CiAgICAgKiBSZWZQdHI8Q2FsbEFyZ3VtZW50PiByZXN1bHQgPSBDYWxsQXJndW1lbnQ6OmNyZWF0
ZSgpOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQog
ICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBD
YWxsQXJndW1lbnQoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0VmFsdWUoUGFzc1JlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0VmFsdWUoInZhbHVlIiwg
dmFsdWUpOwogICAgfQogICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0OjpzZXRWYWx1ZTsKCgogICAg
dm9pZCBzZXRPYmplY3RJZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90
ZU9iamVjdD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAg
ICAgdGhpcy0+c2V0T2JqZWN0KCJvYmplY3RJZCIsIHZhbHVlKTsKICAgIH0KfTsKCn0gLy8gUnVu
dGltZQoKbmFtZXNwYWNlIENvbnNvbGUgewovKiBDb25zb2xlIG1lc3NhZ2UuICovCmNsYXNzIENv
bnNvbGVNZXNzYWdlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5h
bWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3NvdXJjZScgd2hpbGUgZ2VuZXJhdGluZyBDb25zb2xl
TWVzc2FnZS4KICAgIHN0cnVjdCBTb3VyY2UgewogICAgICAgIGVudW0gRW51bSB7CiAgICAgICAg
ICAgIEh0bWwgPSAxOSwKICAgICAgICAgICAgV21sID0gMjAsCiAgICAgICAgICAgIFhtbCA9IDIx
LAogICAgICAgICAgICBKYXZhc2NyaXB0ID0gMjIsCiAgICAgICAgICAgIE5ldHdvcmsgPSAyMywK
ICAgICAgICAgICAgQ29uc29sZV9hcGkgPSAyNCwKICAgICAgICAgICAgT3RoZXIgPSAyNSwKICAg
ICAgICB9OwogICAgfTsgLy8gc3RydWN0IFNvdXJjZQoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3Bl
cnR5IG5hbWUgJ2xldmVsJyB3aGlsZSBnZW5lcmF0aW5nIENvbnNvbGVNZXNzYWdlLgogICAgc3Ry
dWN0IExldmVsIHsKICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBUaXAgPSAyNiwKICAg
ICAgICAgICAgTG9nID0gMjcsCiAgICAgICAgICAgIFdhcm5pbmcgPSAyOCwKICAgICAgICAgICAg
RXJyb3IgPSAyOSwKICAgICAgICAgICAgRGVidWcgPSAzMCwKICAgICAgICB9OwogICAgfTsgLy8g
c3RydWN0IExldmVsCgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAndHlwZScgd2hp
bGUgZ2VuZXJhdGluZyBDb25zb2xlTWVzc2FnZS4KICAgIHN0cnVjdCBUeXBlIHsKICAgICAgICBl
bnVtIEVudW0gewogICAgICAgICAgICBMb2cgPSAyNywKICAgICAgICAgICAgRGlyID0gMzEsCiAg
ICAgICAgICAgIERpcnhtbCA9IDMyLAogICAgICAgICAgICBUcmFjZSA9IDMzLAogICAgICAgICAg
ICBTdGFydEdyb3VwID0gMzQsCiAgICAgICAgICAgIFN0YXJ0R3JvdXBDb2xsYXBzZWQgPSAzNSwK
ICAgICAgICAgICAgRW5kR3JvdXAgPSAzNiwKICAgICAgICAgICAgQXNzZXJ0ID0gMzcsCiAgICAg
ICAgfTsKICAgIH07IC8vIHN0cnVjdCBUeXBlCgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERT
X1NFVCA9IDAsCiAgICAgICAgU09VUkNFX1NFVCA9IDEgPDwgMCwKICAgICAgICBMRVZFTF9TRVQg
PSAxIDw8IDEsCiAgICAgICAgVEVYVF9TRVQgPSAxIDw8IDIsCiAgICAgICAgQUxMX0ZJRUxEU19T
RVQgPSAoU09VUkNFX1NFVCB8IExFVkVMX1NFVCB8IFRFWFRfU0VUKQogICAgfTsKCiAgICB0ZW1w
bGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBT
VEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q29uc29sZU1lc3NhZ2U+
IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJ
RUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAg
IG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ29uc29sZU1l
c3NhZ2U7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTT1VSQ0VfU0VUPiYg
c2V0U291cmNlKFNvdXJjZTo6RW51bSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBTT1VSQ0VfU0VUKSwgcHJvcGVydHlfc291cmNlX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic291cmNlIiwgZ2V0RW51bUNv
bnN0YW50VmFsdWUodmFsdWUpKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTT1VSQ0Vf
U0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNPVVJDRV9TRVQ+JiBz
ZXRTb3VyY2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBTT1VSQ0VfU0VUKSwgcHJvcGVydHlfc291cmNlX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic291cmNlIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNPVVJDRV9TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgTEVWRUxfU0VUPiYgc2V0TGV2ZWwoTGV2ZWw6OkVudW0gdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTEVWRUxf
U0VUKSwgcHJvcGVydHlfbGV2ZWxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJsZXZlbCIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8TEVWRUxfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IExFVkVMX1NFVD4mIHNldExldmVsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTEVWRUxfU0VUKSwg
cHJvcGVydHlfbGV2ZWxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJsZXZlbCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxMRVZFTF9T
RVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVEVYVF9TRVQ+JiBzZXRU
ZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgVEVYVF9TRVQpLCBwcm9wZXJ0eV90ZXh0X2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidGV4dCIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxURVhUX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9y
IFJlZlB0cjxDb25zb2xlTWVzc2FnZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q29uc29sZU1lc3NhZ2U+
Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q29u
c29sZU1lc3NhZ2U+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENvbnNv
bGVNZXNzYWdlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhl
dGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENvbnNvbGVNZXNzYWdlPiByZXN1bHQgPSBD
b25zb2xlTWVzc2FnZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U291cmNlKC4uLikKICAgICAq
ICAgICAuc2V0TGV2ZWwoLi4uKQogICAgICogICAgIC5zZXRUZXh0KC4uLik7CiAgICAgKi8KICAg
IHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IENvbnNvbGVNZXNzYWdlKCkp
KTsKICAgIH0KCiAgICB2b2lkIHNldFR5cGUoVHlwZTo6RW51bSB2YWx1ZSkKICAgIHsKICAgICAg
ICB0aGlzLT5zZXRTdHJpbmcoInR5cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwog
ICAgfQoKICAgIHZvaWQgc2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAg
IHRoaXMtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFVybChj
b25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygidXJsIiwg
dmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0TGluZShpbnQgdmFsdWUpCiAgICB7CiAgICAgICAg
dGhpcy0+c2V0TnVtYmVyKCJsaW5lIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0UmVwZWF0
Q291bnQoaW50IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE51bWJlcigicmVwZWF0Q291
bnQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRQYXJhbWV0ZXJzKFBhc3NSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJwYXJhbWV0
ZXJzIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U3RhY2tUcmFjZShQYXNzUmVmUHRyPElu
c3BlY3RvckFycmF5PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRBcnJheSgic3RhY2tU
cmFjZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldE5ldHdvcmtSZXF1ZXN0SWQoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoIm5ldHdvcmtSZXF1
ZXN0SWQiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBTdGFjayBlbnRyeSBmb3IgY29uc29sZSBlcnJv
cnMgYW5kIGFzc2VydGlvbnMuICovCmNsYXNzIENhbGxGcmFtZSA6IHB1YmxpYyBJbnNwZWN0b3JP
YmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAg
ICAgICBGVU5DVElPTl9OQU1FX1NFVCA9IDEgPDwgMCwKICAgICAgICBVUkxfU0VUID0gMSA8PCAx
LAogICAgICAgIExJTkVfTlVNQkVSX1NFVCA9IDEgPDwgMiwKICAgICAgICBDT0xVTU5fTlVNQkVS
X1NFVCA9IDEgPDwgMywKICAgICAgICBBTExfRklFTERTX1NFVCA9IChGVU5DVElPTl9OQU1FX1NF
VCB8IFVSTF9TRVQgfCBMSU5FX05VTUJFUl9TRVQgfCBDT0xVTU5fTlVNQkVSX1NFVCkKICAgIH07
CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRl
OgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1w
bGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAg
IHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENhbGxG
cmFtZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
Tk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAg
ICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDYWxs
RnJhbWU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBGVU5DVElPTl9OQU1F
X1NFVD4mIHNldEZ1bmN0aW9uTmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEZVTkNUSU9OX05BTUVfU0VUKSwgcHJv
cGVydHlfZnVuY3Rpb25OYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygiZnVuY3Rpb25OYW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPEZVTkNUSU9OX05BTUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFVSTF9TRVQ+JiBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVUkxfU0VUKSwgcHJvcGVydHlfdXJsX2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidXJsIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVSTF9TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgTElORV9OVU1CRVJfU0VUPiYgc2V0TGluZU51bWJlcihpbnQg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTElO
RV9OVU1CRVJfU0VUKSwgcHJvcGVydHlfbGluZU51bWJlcl9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImxpbmVOdW1iZXIiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8TElORV9OVU1CRVJfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IENPTFVNTl9OVU1CRVJfU0VUPiYgc2V0Q29sdW1uTnVtYmVyKGludCB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDT0xV
TU5fTlVNQkVSX1NFVCksIHByb3BlcnR5X2NvbHVtbk51bWJlcl9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImNvbHVtbk51bWJlciIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDT0xVTU5fTlVNQkVSX1NFVD4oKTsKICAgICAgICB9Cgog
ICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDYWxsRnJhbWU+JiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENhbGxG
cmFtZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0
cjxDYWxsRnJhbWU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENhbGxG
cmFtZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBj
b25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDYWxsRnJhbWU+IHJlc3VsdCA9IENhbGxGcmFtZTo6
Y3JlYXRlKCkKICAgICAqICAgICAuc2V0RnVuY3Rpb25OYW1lKC4uLikKICAgICAqICAgICAuc2V0
VXJsKC4uLikKICAgICAqICAgICAuc2V0TGluZU51bWJlciguLi4pCiAgICAgKiAgICAgLnNldENv
bHVtbk51bWJlciguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VU
PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFk
b3B0UmVmKG5ldyBDYWxsRnJhbWUoKSkpOwogICAgfQp9OwoKfSAvLyBDb25zb2xlCgpuYW1lc3Bh
Y2UgTmV0d29yayB7Ci8qIFVuaXF1ZSBsb2FkZXIgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJp
bmcgTG9hZGVySWQ7CgovKiBVbmlxdWUgZnJhbWUgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJp
bmcgRnJhbWVJZDsKCi8qIFVuaXF1ZSByZXF1ZXN0IGlkZW50aWZpZXIuICovCnR5cGVkZWYgU3Ry
aW5nIFJlcXVlc3RJZDsKCi8qIFRpbWluZyBpbmZvcm1hdGlvbiBmb3IgdGhlIHJlcXVlc3QuICov
CmNsYXNzIFJlc291cmNlVGltaW5nIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoK
ICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFJFUVVFU1RfVElN
RV9TRVQgPSAxIDw8IDAsCiAgICAgICAgUFJPWFlfU1RBUlRfU0VUID0gMSA8PCAxLAogICAgICAg
IFBST1hZX0VORF9TRVQgPSAxIDw8IDIsCiAgICAgICAgRE5TX1NUQVJUX1NFVCA9IDEgPDwgMywK
ICAgICAgICBETlNfRU5EX1NFVCA9IDEgPDwgNCwKICAgICAgICBDT05ORUNUX1NUQVJUX1NFVCA9
IDEgPDwgNSwKICAgICAgICBDT05ORUNUX0VORF9TRVQgPSAxIDw8IDYsCiAgICAgICAgU1NMX1NU
QVJUX1NFVCA9IDEgPDwgNywKICAgICAgICBTU0xfRU5EX1NFVCA9IDEgPDwgOCwKICAgICAgICBT
RU5EX1NUQVJUX1NFVCA9IDEgPDwgOSwKICAgICAgICBTRU5EX0VORF9TRVQgPSAxIDw8IDEwLAog
ICAgICAgIFJFQ0VJVkVfSEVBREVSU19FTkRfU0VUID0gMSA8PCAxMSwKICAgICAgICBBTExfRklF
TERTX1NFVCA9IChSRVFVRVNUX1RJTUVfU0VUIHwgUFJPWFlfU1RBUlRfU0VUIHwgUFJPWFlfRU5E
X1NFVCB8IEROU19TVEFSVF9TRVQgfCBETlNfRU5EX1NFVCB8IENPTk5FQ1RfU1RBUlRfU0VUIHwg
Q09OTkVDVF9FTkRfU0VUIHwgU1NMX1NUQVJUX1NFVCB8IFNTTF9FTkRfU0VUIHwgU0VORF9TVEFS
VF9TRVQgfCBTRU5EX0VORF9TRVQgfCBSRUNFSVZFX0hFQURFUlNfRU5EX1NFVCkKICAgIH07Cgog
ICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgog
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0
ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
Pio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFJlc291cmNl
VGltaW5nPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAg
ICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFJl
c291cmNlVGltaW5nOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUkVRVUVT
VF9USU1FX1NFVD4mIHNldFJlcXVlc3RUaW1lKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBSRVFVRVNUX1RJTUVfU0VUKSwgcHJvcGVy
dHlfcmVxdWVzdFRpbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVt
YmVyKCJyZXF1ZXN0VGltZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxS
RVFVRVNUX1RJTUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBS
T1hZX1NUQVJUX1NFVD4mIHNldFByb3h5U3RhcnQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBST1hZX1NUQVJUX1NFVCksIHByb3Bl
cnR5X3Byb3h5U3RhcnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVt
YmVyKCJwcm94eVN0YXJ0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFBS
T1hZX1NUQVJUX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQUk9Y
WV9FTkRfU0VUPiYgc2V0UHJveHlFbmQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBST1hZX0VORF9TRVQpLCBwcm9wZXJ0eV9wcm94
eUVuZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInByb3h5
RW5kIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFBST1hZX0VORF9TRVQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRE5TX1NUQVJUX1NFVD4mIHNl
dERuc1N0YXJ0KGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBETlNfU1RBUlRfU0VUKSwgcHJvcGVydHlfZG5zU3RhcnRfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJkbnNTdGFydCIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxETlNfU1RBUlRfU0VUPigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEROU19FTkRfU0VUPiYgc2V0RG5zRW5kKGRvdWJsZSB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBETlNf
RU5EX1NFVCksIHByb3BlcnR5X2Ruc0VuZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXROdW1iZXIoImRuc0VuZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxETlNfRU5EX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBD
T05ORUNUX1NUQVJUX1NFVD4mIHNldENvbm5lY3RTdGFydChkb3VibGUgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ09OTkVDVF9TVEFSVF9TRVQp
LCBwcm9wZXJ0eV9jb25uZWN0U3RhcnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0TnVtYmVyKCJjb25uZWN0U3RhcnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8Q09OTkVDVF9TVEFSVF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgQ09OTkVDVF9FTkRfU0VUPiYgc2V0Q29ubmVjdEVuZChkb3VibGUgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ09OTkVDVF9FTkRf
U0VUKSwgcHJvcGVydHlfY29ubmVjdEVuZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXROdW1iZXIoImNvbm5lY3RFbmQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8Q09OTkVDVF9FTkRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFNTTF9TVEFSVF9TRVQ+JiBzZXRTc2xTdGFydChkb3VibGUgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1NMX1NUQVJUX1NFVCksIHBy
b3BlcnR5X3NzbFN0YXJ0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51
bWJlcigic3NsU3RhcnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U1NM
X1NUQVJUX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTU0xfRU5E
X1NFVD4mIHNldFNzbEVuZChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgU1NMX0VORF9TRVQpLCBwcm9wZXJ0eV9zc2xFbmRfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzc2xFbmQiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U1NMX0VORF9TRVQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU0VORF9TVEFSVF9TRVQ+JiBzZXRTZW5kU3RhcnQoZG91
YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFNFTkRfU1RBUlRfU0VUKSwgcHJvcGVydHlfc2VuZFN0YXJ0X2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic2VuZFN0YXJ0IiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFNFTkRfU1RBUlRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFNFTkRfRU5EX1NFVD4mIHNldFNlbmRFbmQoZG91YmxlIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNFTkRfRU5EX1NF
VCksIHByb3BlcnR5X3NlbmRFbmRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0TnVtYmVyKCJzZW5kRW5kIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFNFTkRfRU5EX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBSRUNF
SVZFX0hFQURFUlNfRU5EX1NFVD4mIHNldFJlY2VpdmVIZWFkZXJzRW5kKGRvdWJsZSB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBSRUNFSVZFX0hF
QURFUlNfRU5EX1NFVCksIHByb3BlcnR5X3JlY2VpdmVIZWFkZXJzRW5kX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigicmVjZWl2ZUhlYWRlcnNFbmQiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UkVDRUlWRV9IRUFERVJTX0VORF9TRVQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8UmVzb3VyY2VUaW1pbmc+JiAo
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxE
U19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVmUHRyPFJlc291cmNlVGltaW5nPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoK
ICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFJlc291cmNlVGltaW5nPiAoKQogICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxSZXNvdXJjZVRpbWluZz4oKnRoaXMpOwogICAgICAg
IH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJl
ZlB0cjxSZXNvdXJjZVRpbWluZz4gcmVzdWx0ID0gUmVzb3VyY2VUaW1pbmc6OmNyZWF0ZSgpCiAg
ICAgKiAgICAgLnNldFJlcXVlc3RUaW1lKC4uLikKICAgICAqICAgICAuc2V0UHJveHlTdGFydCgu
Li4pCiAgICAgKiAgICAgLnNldFByb3h5RW5kKC4uLikKICAgICAqICAgICAuc2V0RG5zU3RhcnQo
Li4uKQogICAgICogICAgIC5zZXREbnNFbmQoLi4uKQogICAgICogICAgIC5zZXRDb25uZWN0U3Rh
cnQoLi4uKQogICAgICogICAgIC5zZXRDb25uZWN0RW5kKC4uLikKICAgICAqICAgICAuc2V0U3Ns
U3RhcnQoLi4uKQogICAgICogICAgIC5zZXRTc2xFbmQoLi4uKQogICAgICogICAgIC5zZXRTZW5k
U3RhcnQoLi4uKQogICAgICogICAgIC5zZXRTZW5kRW5kKC4uLikKICAgICAqICAgICAuc2V0UmVj
ZWl2ZUhlYWRlcnNFbmQoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERT
X1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VU
PihhZG9wdFJlZihuZXcgUmVzb3VyY2VUaW1pbmcoKSkpOwogICAgfQp9OwoKLyogSFRUUCByZXF1
ZXN0IGRhdGEuICovCmNsYXNzIFJlcXVlc3QgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVi
bGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgVVJMX1NF
VCA9IDEgPDwgMCwKICAgICAgICBNRVRIT0RfU0VUID0gMSA8PCAxLAogICAgICAgIEhFQURFUlNf
U0VUID0gMSA8PCAyLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFVSTF9TRVQgfCBNRVRIT0Rf
U0VUIHwgSEVBREVSU19TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNs
YXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXIoUGFzc1JlZlB0cjxSZXF1ZXN0PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5f
bm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAg
ICAgICAgZnJpZW5kIGNsYXNzIFJlcXVlc3Q7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBVUkxfU0VUPiYgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVVJMX1NFVCksIHByb3BlcnR5X3Vy
bF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZh
bHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVUkxfU0VUPigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1FVEhPRF9TRVQ+JiBzZXRNZXRob2QoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBNRVRIT0RfU0VUKSwgcHJvcGVydHlfbWV0aG9kX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygibWV0aG9kIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPE1FVEhPRF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgSEVBREVSU19TRVQ+JiBzZXRIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBIRUFE
RVJTX1NFVCksIHByb3BlcnR5X2hlYWRlcnNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0T2JqZWN0KCJoZWFkZXJzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPEhFQURFUlNfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRy
PFJlcXVlc3Q+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFJlcXVlc3Q+Kj4oJm1fcmVzdWx0KTsKICAgICAg
ICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8UmVxdWVzdD4gKCkKICAgICAgICB7CiAg
ICAgICAgICAgIHJldHVybiBSZWZQdHI8UmVxdWVzdD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07
CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxSZXF1
ZXN0PiByZXN1bHQgPSBSZXF1ZXN0OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRVcmwoLi4uKQog
ICAgICogICAgIC5zZXRNZXRob2QoLi4uKQogICAgICogICAgIC5zZXRIZWFkZXJzKC4uLik7CiAg
ICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAg
ICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IFJlcXVlc3Qo
KSkpOwogICAgfQoKICAgIHZvaWQgc2V0UG9zdERhdGEoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAg
IHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInBvc3REYXRhIiwgdmFsdWUpOwogICAgfQp9OwoK
LyogSFRUUCByZXNwb25zZSBkYXRhLiAqLwpjbGFzcyBSZXNwb25zZSA6IHB1YmxpYyBJbnNwZWN0
b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwK
ICAgICAgICBVUkxfU0VUID0gMSA8PCAwLAogICAgICAgIFNUQVRVU19TRVQgPSAxIDw8IDEsCiAg
ICAgICAgU1RBVFVTX1RFWFRfU0VUID0gMSA8PCAyLAogICAgICAgIEhFQURFUlNfU0VUID0gMSA8
PCAzLAogICAgICAgIE1JTUVfVFlQRV9TRVQgPSAxIDw8IDQsCiAgICAgICAgQ09OTkVDVElPTl9S
RVVTRURfU0VUID0gMSA8PCA1LAogICAgICAgIENPTk5FQ1RJT05fSURfU0VUID0gMSA8PCA2LAog
ICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFVSTF9TRVQgfCBTVEFUVVNfU0VUIHwgU1RBVFVTX1RF
WFRfU0VUIHwgSEVBREVSU19TRVQgfCBNSU1FX1RZUEVfU0VUIHwgQ09OTkVDVElPTl9SRVVTRURf
U0VUIHwgQ09OTkVDVElPTl9JRF9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4K
ICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxSZXNwb25zZT4gcHRyKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVh
dGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAg
ICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBSZXNwb25zZTsKICAgIHB1YmxpYzoKCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFVSTF9TRVQ+JiBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVUkxfU0VUKSwgcHJv
cGVydHlfdXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
dXJsIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVSTF9TRVQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU1RBVFVTX1NFVD4mIHNldFN0YXR1cyhk
b3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgU1RBVFVTX1NFVCksIHByb3BlcnR5X3N0YXR1c19hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXROdW1iZXIoInN0YXR1cyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxTVEFUVVNfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFNUQVRVU19URVhUX1NFVD4mIHNldFN0YXR1c1RleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTVEFUVVNfVEVY
VF9TRVQpLCBwcm9wZXJ0eV9zdGF0dXNUZXh0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygic3RhdHVzVGV4dCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxTVEFUVVNfVEVYVF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgSEVBREVSU19TRVQ+JiBzZXRIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBIRUFERVJTX1NFVCksIHByb3BlcnR5X2hlYWRlcnNfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJoZWFkZXJzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPEhFQURFUlNfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IE1JTUVfVFlQRV9TRVQ+JiBzZXRNaW1lVHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1JTUVfVFlQRV9T
RVQpLCBwcm9wZXJ0eV9taW1lVHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoIm1pbWVUeXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPE1JTUVfVFlQRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
Q09OTkVDVElPTl9SRVVTRURfU0VUPiYgc2V0Q29ubmVjdGlvblJldXNlZChib29sIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENPTk5FQ1RJT05f
UkVVU0VEX1NFVCksIHByb3BlcnR5X2Nvbm5lY3Rpb25SZXVzZWRfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigiY29ubmVjdGlvblJldXNlZCIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDT05ORUNUSU9OX1JFVVNFRF9TRVQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ09OTkVDVElPTl9JRF9TRVQ+JiBzZXRD
b25uZWN0aW9uSWQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIENPTk5FQ1RJT05fSURfU0VUKSwgcHJvcGVydHlfY29ubmVjdGlvbklk
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiY29ubmVjdGlv
bklkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENPTk5FQ1RJT05fSURf
U0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFJlc3BvbnNlPiYgKCkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNf
U0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PFJlZlB0cjxSZXNwb25zZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUGFzc1JlZlB0cjxSZXNwb25zZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJl
dHVybiBSZWZQdHI8UmVzcG9uc2U+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAg
ICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8UmVzcG9uc2U+IHJlc3Vs
dCA9IFJlc3BvbnNlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICogICAg
IC5zZXRTdGF0dXMoLi4uKQogICAgICogICAgIC5zZXRTdGF0dXNUZXh0KC4uLikKICAgICAqICAg
ICAuc2V0SGVhZGVycyguLi4pCiAgICAgKiAgICAgLnNldE1pbWVUeXBlKC4uLikKICAgICAqICAg
ICAuc2V0Q29ubmVjdGlvblJldXNlZCguLi4pCiAgICAgKiAgICAgLnNldENvbm5lY3Rpb25JZCgu
Li4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQog
ICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBS
ZXNwb25zZSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRIZWFkZXJzVGV4dChjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygiaGVhZGVyc1RleHQiLCB2YWx1
ZSk7CiAgICB9CgogICAgdm9pZCBzZXRSZXF1ZXN0SGVhZGVycyhQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJyZXF1ZXN0SGVh
ZGVycyIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFJlcXVlc3RIZWFkZXJzVGV4dChjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygicmVxdWVzdEhl
YWRlcnNUZXh0IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0RnJvbURpc2tDYWNoZShib29s
IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEJvb2xlYW4oImZyb21EaXNrQ2FjaGUiLCB2
YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRUaW1pbmcoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjpOZXR3b3JrOjpSZXNvdXJjZVRpbWluZz4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
dmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJ0aW1pbmciLCB2YWx1ZSk7CiAg
ICB9Cn07CgovKiBXZWJTb2NrZXQgcmVxdWVzdCBkYXRhLiAqLwpjbGFzcyBXZWJTb2NrZXRSZXF1
ZXN0IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAg
IE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFJFUVVFU1RfS0VZM19TRVQgPSAxIDw8IDAsCiAg
ICAgICAgSEVBREVSU19TRVQgPSAxIDw8IDEsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoUkVR
VUVTVF9LRVkzX1NFVCB8IEhFQURFUlNfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RB
VEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8V2ViU29ja2V0UmVxdWVzdD4gcHRyKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQg
PSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBXZWJTb2NrZXRSZXF1ZXN0Owog
ICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUkVRVUVTVF9LRVkzX1NFVD4mIHNl
dFJlcXVlc3RLZXkzKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgUkVRVUVTVF9LRVkzX1NFVCksIHByb3BlcnR5X3JlcXVl
c3RLZXkzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygicmVx
dWVzdEtleTMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UkVRVUVTVF9L
RVkzX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBIRUFERVJTX1NF
VD4mIHNldEhlYWRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhFQURFUlNfU0VUKSwgcHJv
cGVydHlfaGVhZGVyc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmpl
Y3QoImhlYWRlcnMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SEVBREVS
U19TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8V2ViU29ja2V0UmVx
dWVzdD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBB
TExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8V2ViU29ja2V0UmVxdWVzdD4qPigmbV9yZXN1bHQpOwog
ICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxXZWJTb2NrZXRSZXF1ZXN0PiAo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxXZWJTb2NrZXRSZXF1ZXN0Pigq
dGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVj
dG9yOgogICAgICogUmVmUHRyPFdlYlNvY2tldFJlcXVlc3Q+IHJlc3VsdCA9IFdlYlNvY2tldFJl
cXVlc3Q6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFJlcXVlc3RLZXkzKC4uLikKICAgICAqICAg
ICAuc2V0SGVhZGVycyguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNf
U0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+
KGFkb3B0UmVmKG5ldyBXZWJTb2NrZXRSZXF1ZXN0KCkpKTsKICAgIH0KfTsKCi8qIFdlYlNvY2tl
dCByZXNwb25zZSBkYXRhLiAqLwpjbGFzcyBXZWJTb2NrZXRSZXNwb25zZSA6IHB1YmxpYyBJbnNw
ZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0g
MCwKICAgICAgICBTVEFUVVNfU0VUID0gMSA8PCAwLAogICAgICAgIFNUQVRVU19URVhUX1NFVCA9
IDEgPDwgMSwKICAgICAgICBIRUFERVJTX1NFVCA9IDEgPDwgMiwKICAgICAgICBDSEFMTEVOR0Vf
UkVTUE9OU0VfU0VUID0gMSA8PCAzLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFNUQVRVU19T
RVQgfCBTVEFUVVNfVEVYVF9TRVQgfCBIRUFERVJTX1NFVCB8IENIQUxMRU5HRV9SRVNQT05TRV9T
RVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewog
ICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAg
ICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRl
KCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVy
PFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1Jl
ZlB0cjxXZWJTb2NrZXRSZXNwb25zZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9p
bml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAg
IGZyaWVuZCBjbGFzcyBXZWJTb2NrZXRSZXNwb25zZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFNUQVRVU19TRVQ+JiBzZXRTdGF0dXMoZG91YmxlIHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNUQVRVU19TRVQpLCBwcm9w
ZXJ0eV9zdGF0dXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVy
KCJzdGF0dXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U1RBVFVTX1NF
VD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTVEFUVVNfVEVYVF9TRVQ+
JiBzZXRTdGF0dXNUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1RBVFVTX1RFWFRfU0VUKSwgcHJvcGVydHlfc3Rh
dHVzVGV4dF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0
YXR1c1RleHQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U1RBVFVTX1RF
WFRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEhFQURFUlNfU0VU
PiYgc2V0SGVhZGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSEVBREVSU19TRVQpLCBwcm9w
ZXJ0eV9oZWFkZXJzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVj
dCgiaGVhZGVycyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxIRUFERVJT
X1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDSEFMTEVOR0VfUkVT
UE9OU0VfU0VUPiYgc2V0Q2hhbGxlbmdlUmVzcG9uc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDSEFMTEVOR0VfUkVT
UE9OU0VfU0VUKSwgcHJvcGVydHlfY2hhbGxlbmdlUmVzcG9uc2VfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJjaGFsbGVuZ2VSZXNwb25zZSIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDSEFMTEVOR0VfUkVTUE9OU0VfU0VUPigpOwog
ICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFdlYlNvY2tldFJlc3BvbnNlPiYgKCkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNf
U0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PFJlZlB0cjxXZWJTb2NrZXRSZXNwb25zZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0K
CiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxXZWJTb2NrZXRSZXNwb25zZT4gKCkKICAgICAg
ICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8V2ViU29ja2V0UmVzcG9uc2U+KCp0aGlzKTsK
ICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAg
ICAgKiBSZWZQdHI8V2ViU29ja2V0UmVzcG9uc2U+IHJlc3VsdCA9IFdlYlNvY2tldFJlc3BvbnNl
OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRTdGF0dXMoLi4uKQogICAgICogICAgIC5zZXRTdGF0
dXNUZXh0KC4uLikKICAgICAqICAgICAuc2V0SGVhZGVycyguLi4pCiAgICAgKiAgICAgLnNldENo
YWxsZW5nZVJlc3BvbnNlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxE
U19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NF
VD4oYWRvcHRSZWYobmV3IFdlYlNvY2tldFJlc3BvbnNlKCkpKTsKICAgIH0KfTsKCi8qIEluZm9y
bWF0aW9uIGFib3V0IHRoZSBjYWNoZWQgcmVzb3VyY2UuICovCmNsYXNzIENhY2hlZFJlc291cmNl
IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5P
X0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFVSTF9TRVQgPSAxIDw8IDAsCiAgICAgICAgVFlQRV9T
RVQgPSAxIDw8IDEsCiAgICAgICAgUkVTUE9OU0VfU0VUID0gMSA8PCAyLAogICAgICAgIEJPRFlf
U0laRV9TRVQgPSAxIDw8IDMsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoVVJMX1NFVCB8IFRZ
UEVfU0VUIHwgUkVTUE9OU0VfU0VUIHwgQk9EWV9TSVpFX1NFVCkKICAgIH07CgogICAgdGVtcGxh
dGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENhY2hlZFJlc291cmNlPiBw
dHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVM
RFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBt
X3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENhY2hlZFJlc291
cmNlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVVJMX1NFVD4mIHNldFVy
bChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIFVSTF9TRVQpLCBwcm9wZXJ0eV91cmxfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8VVJMX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBUWVBFX1NFVD4mIHNldFR5cGUoVHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZTo6RW51
bSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBU
WVBFX1NFVCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJ0eXBlIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUWVBFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBUWVBFX1NFVD4mIHNldFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUWVBFX1NFVCksIHBy
b3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRZUEVfU0VUPigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFJFU1BPTlNFX1NFVD4mIHNldFJl
c3BvbnNlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVzcG9uc2U+Ki8gUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFJFU1BPTlNFX1NFVCksIHByb3BlcnR5X3Jlc3BvbnNlX2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgicmVzcG9uc2UiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UkVTUE9OU0VfU0VUPigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJPRFlfU0laRV9TRVQ+JiBzZXRCb2R5U2l6
ZShkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgQk9EWV9TSVpFX1NFVCksIHByb3BlcnR5X2JvZHlTaXplX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiYm9keVNpemUiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8Qk9EWV9TSVpFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAg
IG9wZXJhdG9yIFJlZlB0cjxDYWNoZWRSZXNvdXJjZT4mICgpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9y
ZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q2FjaGVk
UmVzb3VyY2U+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NS
ZWZQdHI8Q2FjaGVkUmVzb3VyY2U+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVm
UHRyPENhY2hlZFJlc291cmNlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAg
ICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENhY2hlZFJlc291cmNlPiBy
ZXN1bHQgPSBDYWNoZWRSZXNvdXJjZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VXJsKC4uLikK
ICAgICAqICAgICAuc2V0VHlwZSguLi4pCiAgICAgKiAgICAgLnNldFJlc3BvbnNlKC4uLikKICAg
ICAqICAgICAuc2V0Qm9keVNpemUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9f
RklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVM
RFNfU0VUPihhZG9wdFJlZihuZXcgQ2FjaGVkUmVzb3VyY2UoKSkpOwogICAgfQp9OwoKLyogSW5m
b3JtYXRpb24gYWJvdXQgdGhlIHJlcXVlc3QgaW5pdGlhdG9yLiAqLwpjbGFzcyBJbml0aWF0b3Ig
OiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJv
cGVydHkgbmFtZSAndHlwZScgd2hpbGUgZ2VuZXJhdGluZyBJbml0aWF0b3IuCiAgICBzdHJ1Y3Qg
VHlwZSB7CiAgICAgICAgZW51bSBFbnVtIHsKICAgICAgICAgICAgUGFyc2VyID0gMzgsCiAgICAg
ICAgICAgIFNjcmlwdCA9IDM5LAogICAgICAgICAgICBPdGhlciA9IDI1LAogICAgICAgIH07CiAg
ICB9OyAvLyBzdHJ1Y3QgVHlwZQoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAw
LAogICAgICAgIFRZUEVfU0VUID0gMSA8PCAwLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFRZ
UEVfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVy
IHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7
CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RT
dGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVp
bGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBh
c3NSZWZQdHI8SW5pdGlhdG9yPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJp
ZW5kIGNsYXNzIEluaXRpYXRvcjsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IFRZUEVfU0VUPiYgc2V0VHlwZShUeXBlOjpFbnVtIHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRZUEVfU0VUKSwgcHJvcGVydHlfdHlwZV9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCBnZXRFbnVt
Q29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRZUEVf
U0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRZUEVfU0VUPiYgc2V0
VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFRZUEVfU0VUKSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8VFlQRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRv
ciBSZWZQdHI8SW5pdGlhdG9yPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxJbml0aWF0b3I+Kj4oJm1fcmVz
dWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8SW5pdGlhdG9yPiAo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxJbml0aWF0b3I+KCp0aGlzKTsK
ICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAg
ICAgKiBSZWZQdHI8SW5pdGlhdG9yPiByZXN1bHQgPSBJbml0aWF0b3I6OmNyZWF0ZSgpCiAgICAg
KiAgICAgLnNldFR5cGUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERT
X1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VU
PihhZG9wdFJlZihuZXcgSW5pdGlhdG9yKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFN0YWNrVHJh
Y2UoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+
c2V0QXJyYXkoInN0YWNrVHJhY2UiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRVcmwoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInVybCIsIHZh
bHVlKTsKICAgIH0KCiAgICB2b2lkIHNldExpbmVOdW1iZXIoZG91YmxlIHZhbHVlKQogICAgewog
ICAgICAgIHRoaXMtPnNldE51bWJlcigibGluZU51bWJlciIsIHZhbHVlKTsKICAgIH0KfTsKCn0g
Ly8gTmV0d29yawoKI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCm5hbWVzcGFjZSBEYXRhYmFzZSB7
Ci8qIERhdGFiYXNlIG9iamVjdC4gKi8KY2xhc3MgRGF0YWJhc2UgOiBwdWJsaWMgSW5zcGVjdG9y
T2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAg
ICAgICAgSURfU0VUID0gMSA8PCAwLAogICAgICAgIERPTUFJTl9TRVQgPSAxIDw8IDEsCiAgICAg
ICAgTkFNRV9TRVQgPSAxIDw8IDIsCiAgICAgICAgVkVSU0lPTl9TRVQgPSAxIDw8IDMsCiAgICAg
ICAgQUxMX0ZJRUxEU19TRVQgPSAoSURfU0VUIHwgRE9NQUlOX1NFVCB8IE5BTUVfU0VUIHwgVkVS
U0lPTl9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxk
ZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3Vs
dDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxC
dWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIo
UGFzc1JlZlB0cjxEYXRhYmFzZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZy
aWVuZCBjbGFzcyBEYXRhYmFzZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IElEX1NFVD4mIHNldElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSURfU0VUKSwgcHJvcGVydHlfaWRfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJpZCIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJRF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgRE9NQUlOX1NFVD4mIHNldERvbWFpbihjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERPTUFJTl9TRVQp
LCBwcm9wZXJ0eV9kb21haW5fYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJkb21haW4iLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RE9N
QUlOX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOQU1FX1NFVD4m
IHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBOQU1FX1NFVCksIHByb3BlcnR5X25hbWVfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJuYW1lIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPE5BTUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFZFUlNJT05fU0VUPiYgc2V0VmVyc2lvbihjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZFUlNJT05f
U0VUKSwgcHJvcGVydHlfdmVyc2lvbl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoInZlcnNpb24iLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8VkVSU0lPTl9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8RGF0
YWJhc2U+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
QUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPERhdGFiYXNlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAg
fQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPERhdGFiYXNlPiAoKQogICAgICAgIHsKICAg
ICAgICAgICAgcmV0dXJuIFJlZlB0cjxEYXRhYmFzZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07
CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxEYXRh
YmFzZT4gcmVzdWx0ID0gRGF0YWJhc2U6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldElkKC4uLikK
ICAgICAqICAgICAuc2V0RG9tYWluKC4uLikKICAgICAqICAgICAuc2V0TmFtZSguLi4pCiAgICAg
KiAgICAgLnNldFZlcnNpb24oLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklF
TERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNf
U0VUPihhZG9wdFJlZihuZXcgRGF0YWJhc2UoKSkpOwogICAgfQp9OwoKfSAvLyBEYXRhYmFzZQoK
I2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCm5hbWVzcGFjZSBET01TdG9yYWdlIHsKLyog
RE9NIFN0b3JhZ2UgZW50cnkuICovCmNsYXNzIEVudHJ5IDogcHVibGljIEluc3BlY3Rvck9iamVj
dCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAg
IEhPU1RfU0VUID0gMSA8PCAwLAogICAgICAgIElTX0xPQ0FMX1NUT1JBR0VfU0VUID0gMSA8PCAx
LAogICAgICAgIElEX1NFVCA9IDEgPDwgMiwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChIT1NU
X1NFVCB8IElTX0xPQ0FMX1NUT1JBR0VfU0VUIHwgSURfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0
ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQ
PiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8RW50cnk+IHB0cikKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1
aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0g
cHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgRW50cnk7CiAgICBwdWJsaWM6Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBIT1NUX1NFVD4mIHNldEhvc3QoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBIT1NU
X1NFVCksIHByb3BlcnR5X2hvc3RfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJob3N0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEhP
U1RfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IElTX0xPQ0FMX1NU
T1JBR0VfU0VUPiYgc2V0SXNMb2NhbFN0b3JhZ2UoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJU19MT0NBTF9TVE9SQUdFX1NFVCksIHBy
b3BlcnR5X2lzTG9jYWxTdG9yYWdlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldEJvb2xlYW4oImlzTG9jYWxTdG9yYWdlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPElTX0xPQ0FMX1NUT1JBR0VfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IElEX1NFVD4mIHNldElkKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJRF9TRVQpLCBwcm9wZXJ0eV9pZF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImlkIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElEX1NFVD4oKTsKICAgICAgICB9CgogICAgICAg
IG9wZXJhdG9yIFJlZlB0cjxFbnRyeT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RW50cnk+Kj4oJm1fcmVz
dWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8RW50cnk+ICgpCiAg
ICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPEVudHJ5PigqdGhpcyk7CiAgICAgICAg
fQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVm
UHRyPEVudHJ5PiByZXN1bHQgPSBFbnRyeTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0SG9zdCgu
Li4pCiAgICAgKiAgICAgLnNldElzTG9jYWxTdG9yYWdlKC4uLikKICAgICAqICAgICAuc2V0SWQo
Li4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkK
ICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcg
RW50cnkoKSkpOwogICAgfQp9OwoKfSAvLyBET01TdG9yYWdlCgpuYW1lc3BhY2UgQXBwbGljYXRp
b25DYWNoZSB7Ci8qIERldGFpbGVkIGFwcGxpY2F0aW9uIGNhY2hlIHJlc291cmNlIGluZm9ybWF0
aW9uLiAqLwpjbGFzcyBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UgOiBwdWJsaWMgSW5zcGVjdG9y
T2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAg
ICAgICAgVVJMX1NFVCA9IDEgPDwgMCwKICAgICAgICBTSVpFX1NFVCA9IDEgPDwgMSwKICAgICAg
ICBUWVBFX1NFVCA9IDEgPDwgMiwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChVUkxfU0VUIHwg
U0laRV9TRVQgfCBUWVBFX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAg
Y2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8
IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcihQYXNzUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gcHRyKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQg
PSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2U7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBVUkxfU0VUPiYgc2V0
VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgVVJMX1NFVCksIHByb3BlcnR5X3VybF9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxVUkxfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFNJWkVfU0VUPiYgc2V0U2l6ZShpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgU0laRV9TRVQpLCBwcm9wZXJ0eV9zaXplX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic2l6ZSIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTSVpFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBUWVBFX1NFVD4mIHNldFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUWVBFX1NFVCks
IHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRZUEVfU0VU
PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPio+KCZt
X3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8
QXBwbGljYXRpb25DYWNoZVJlc291cmNlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAv
KgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZT4gcmVzdWx0ID0gQXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUo
KQogICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICogICAgIC5zZXRTaXplKC4uLikKICAgICAq
ICAgICAuc2V0VHlwZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNf
U0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+
KGFkb3B0UmVmKG5ldyBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UoKSkpOwogICAgfQp9OwoKLyog
RGV0YWlsZWQgYXBwbGljYXRpb24gY2FjaGUgaW5mb3JtYXRpb24uICovCmNsYXNzIEFwcGxpY2F0
aW9uQ2FjaGUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAg
ICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgTUFOSUZFU1RfVV9SX0xfU0VUID0gMSA8
PCAwLAogICAgICAgIFNJWkVfU0VUID0gMSA8PCAxLAogICAgICAgIENSRUFUSU9OX1RJTUVfU0VU
ID0gMSA8PCAyLAogICAgICAgIFVQREFURV9USU1FX1NFVCA9IDEgPDwgMywKICAgICAgICBSRVNP
VVJDRVNfU0VUID0gMSA8PCA0LAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKE1BTklGRVNUX1Vf
Ul9MX1NFVCB8IFNJWkVfU0VUIHwgQ1JFQVRJT05fVElNRV9TRVQgfCBVUERBVEVfVElNRV9TRVQg
fCBSRVNPVVJDRVNfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFz
cyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RF
UD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyKFBhc3NSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gcHRyKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVh
dGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAg
ICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlOwogICAgcHVibGljOgoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTUFOSUZFU1RfVV9SX0xfU0VUPiYgc2V0TWFuaWZlc3RV
UkwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBNQU5JRkVTVF9VX1JfTF9TRVQpLCBwcm9wZXJ0eV9tYW5pZmVzdFVSTF9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1hbmlmZXN0VVJM
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1BTklGRVNUX1VfUl9MX1NF
VD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTSVpFX1NFVD4mIHNldFNp
emUoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFNJWkVfU0VUKSwgcHJvcGVydHlfc2l6ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXROdW1iZXIoInNpemUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8U0laRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
Q1JFQVRJT05fVElNRV9TRVQ+JiBzZXRDcmVhdGlvblRpbWUoZG91YmxlIHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENSRUFUSU9OX1RJTUVfU0VU
KSwgcHJvcGVydHlfY3JlYXRpb25UaW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldE51bWJlcigiY3JlYXRpb25UaW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPENSRUFUSU9OX1RJTUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IFVQREFURV9USU1FX1NFVD4mIHNldFVwZGF0ZVRpbWUoZG91YmxlIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVQREFURV9USU1F
X1NFVCksIHByb3BlcnR5X3VwZGF0ZVRpbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0TnVtYmVyKCJ1cGRhdGVUaW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFVQREFURV9USU1FX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBSRVNPVVJDRVNfU0VUPiYgc2V0UmVzb3VyY2VzKFBhc3NSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFJFU09VUkNFU19TRVQpLCBwcm9wZXJ0eV9yZXNvdXJjZXNfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoInJlc291cmNlcyIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxSRVNPVVJDRVNfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+JiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEFwcGxp
Y2F0aW9uQ2FjaGU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBh
c3NSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVy
biBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAg
LyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxBcHBsaWNhdGlv
bkNhY2hlPiByZXN1bHQgPSBBcHBsaWNhdGlvbkNhY2hlOjpjcmVhdGUoKQogICAgICogICAgIC5z
ZXRNYW5pZmVzdFVSTCguLi4pCiAgICAgKiAgICAgLnNldFNpemUoLi4uKQogICAgICogICAgIC5z
ZXRDcmVhdGlvblRpbWUoLi4uKQogICAgICogICAgIC5zZXRVcGRhdGVUaW1lKC4uLikKICAgICAq
ICAgICAuc2V0UmVzb3VyY2VzKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJ
RUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERT
X1NFVD4oYWRvcHRSZWYobmV3IEFwcGxpY2F0aW9uQ2FjaGUoKSkpOwogICAgfQp9OwoKLyogRnJh
bWUgaWRlbnRpZmllciAtIG1hbmlmZXN0IFVSTCBwYWlyLiAqLwpjbGFzcyBGcmFtZVdpdGhNYW5p
ZmVzdCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAg
ICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBGUkFNRV9JRF9TRVQgPSAxIDw8IDAsCiAgICAg
ICAgTUFOSUZFU1RfVV9SX0xfU0VUID0gMSA8PCAxLAogICAgICAgIFNUQVRVU19TRVQgPSAxIDw8
IDIsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoRlJBTUVfSURfU0VUIHwgTUFOSUZFU1RfVV9S
X0xfU0VUIHwgU1RBVFVTX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAg
Y2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8
IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcihQYXNzUmVmUHRyPEZyYW1lV2l0aE1hbmlmZXN0PiBwdHIpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsK
ICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEZyYW1lV2l0aE1hbmlmZXN0OwogICAgcHVi
bGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRlJBTUVfSURfU0VUPiYgc2V0RnJhbWVJZChj
b25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIEZSQU1FX0lEX1NFVCksIHByb3BlcnR5X2ZyYW1lSWRfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJmcmFtZUlkIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPEZSQU1FX0lEX1NFVD4oKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBNQU5JRkVTVF9VX1JfTF9TRVQ+JiBzZXRNYW5pZmVzdFVSTChjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIE1BTklGRVNUX1VfUl9MX1NFVCksIHByb3BlcnR5X21hbmlmZXN0VVJMX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWFuaWZlc3RVUkwiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TUFOSUZFU1RfVV9SX0xfU0VUPigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNUQVRVU19TRVQ+JiBzZXRTdGF0dXMo
aW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFNUQVRVU19TRVQpLCBwcm9wZXJ0eV9zdGF0dXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0TnVtYmVyKCJzdGF0dXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8U1RBVFVTX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0
cjxGcmFtZVdpdGhNYW5pZmVzdD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RnJhbWVXaXRoTWFuaWZlc3Q+
Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8RnJh
bWVXaXRoTWFuaWZlc3Q+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPEZy
YW1lV2l0aE1hbmlmZXN0PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICog
U3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEZyYW1lV2l0aE1hbmlmZXN0PiBy
ZXN1bHQgPSBGcmFtZVdpdGhNYW5pZmVzdDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0RnJhbWVJ
ZCguLi4pCiAgICAgKiAgICAgLnNldE1hbmlmZXN0VVJMKC4uLikKICAgICAqICAgICAuc2V0U3Rh
dHVzKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0
ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYo
bmV3IEZyYW1lV2l0aE1hbmlmZXN0KCkpKTsKICAgIH0KfTsKCn0gLy8gQXBwbGljYXRpb25DYWNo
ZQoKbmFtZXNwYWNlIERPTSB7Ci8qIERPTSBpbnRlcmFjdGlvbiBpcyBpbXBsZW1lbnRlZCBpbiB0
ZXJtcyBvZiBtaXJyb3Igb2JqZWN0cyB0aGF0IHJlcHJlc2VudCB0aGUgYWN0dWFsIERPTSBub2Rl
cy4gRE9NTm9kZSBpcyBhIGJhc2Ugbm9kZSBtaXJyb3IgdHlwZS4gKi8KY2xhc3MgTm9kZSA6IHB1
YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVM
RFNfU0VUID0gMCwKICAgICAgICBOT0RFX0lEX1NFVCA9IDEgPDwgMCwKICAgICAgICBOT0RFX1RZ
UEVfU0VUID0gMSA8PCAxLAogICAgICAgIE5PREVfTkFNRV9TRVQgPSAxIDw8IDIsCiAgICAgICAg
TE9DQUxfTkFNRV9TRVQgPSAxIDw8IDMsCiAgICAgICAgTk9ERV9WQUxVRV9TRVQgPSAxIDw8IDQs
CiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoTk9ERV9JRF9TRVQgfCBOT0RFX1RZUEVfU0VUIHwg
Tk9ERV9OQU1FX1NFVCB8IExPQ0FMX05BTUVfU0VUIHwgTk9ERV9WQUxVRV9TRVQpCiAgICB9OwoK
ICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToK
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxh
dGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxOb2RlPiBw
dHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVM
RFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBt
X3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIE5vZGU7CiAgICBw
dWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOT0RFX0lEX1NFVD4mIHNldE5vZGVJZChp
bnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
Tk9ERV9JRF9TRVQpLCBwcm9wZXJ0eV9ub2RlSWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0TnVtYmVyKCJub2RlSWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8Tk9ERV9JRF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgTk9ERV9UWVBFX1NFVD4mIHNldE5vZGVUeXBlKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOT0RFX1RZUEVfU0VUKSwgcHJvcGVydHlf
bm9kZVR5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJu
b2RlVHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOT0RFX1RZUEVf
U0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5PREVfTkFNRV9TRVQ+
JiBzZXROb2RlTmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5PREVfTkFNRV9TRVQpLCBwcm9wZXJ0eV9ub2RlTmFt
ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5vZGVOYW1l
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5PREVfTkFNRV9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTE9DQUxfTkFNRV9TRVQ+JiBzZXRM
b2NhbE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBMT0NBTF9OQU1FX1NFVCksIHByb3BlcnR5X2xvY2FsTmFtZV9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImxvY2FsTmFtZSIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxMT0NBTF9OQU1FX1NFVD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOT0RFX1ZBTFVFX1NFVD4mIHNldE5v
ZGVWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIE5PREVfVkFMVUVfU0VUKSwgcHJvcGVydHlfbm9kZVZhbHVlX2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibm9kZVZhbHVlIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5PREVfVkFMVUVfU0VUPigpOwog
ICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPE5vZGU+JiAoKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9p
c19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRy
PE5vZGU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQ
dHI8Tm9kZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Tm9kZT4oKnRo
aXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKICAgICAqIFJlZlB0cjxOb2RlPiByZXN1bHQgPSBOb2RlOjpjcmVhdGUoKQogICAgICogICAg
IC5zZXROb2RlSWQoLi4uKQogICAgICogICAgIC5zZXROb2RlVHlwZSguLi4pCiAgICAgKiAgICAg
LnNldE5vZGVOYW1lKC4uLikKICAgICAqICAgICAuc2V0TG9jYWxOYW1lKC4uLikKICAgICAqICAg
ICAuc2V0Tm9kZVZhbHVlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxE
U19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NF
VD4oYWRvcHRSZWYobmV3IE5vZGUoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0Q2hpbGROb2RlQ291
bnQoaW50IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE51bWJlcigiY2hpbGROb2RlQ291
bnQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRDaGlsZHJlbihQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRBcnJheSgiY2hpbGRyZW4i
LCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRBdHRyaWJ1dGVzKFBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJhdHRyaWJ1dGVz
IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0RG9jdW1lbnRVUkwoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoImRvY3VtZW50VVJMIiwgdmFsdWUp
OwogICAgfQoKICAgIHZvaWQgc2V0UHVibGljSWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsK
ICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInB1YmxpY0lkIiwgdmFsdWUpOwogICAgfQoKICAgIHZv
aWQgc2V0U3lzdGVtSWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXRTdHJpbmcoInN5c3RlbUlkIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0SW50ZXJuYWxT
dWJzZXQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmco
ImludGVybmFsU3Vic2V0IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0WG1sVmVyc2lvbihj
b25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygieG1sVmVy
c2lvbiIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICB9Cgog
ICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMt
PnNldFN0cmluZygidmFsdWUiLCB2YWx1ZSk7CiAgICB9CiAgICB1c2luZyBJbnNwZWN0b3JPYmpl
Y3Q6OnNldFZhbHVlOwoKfTsKCi8qIERPTSBpbnRlcmFjdGlvbiBpcyBpbXBsZW1lbnRlZCBpbiB0
ZXJtcyBvZiBtaXJyb3Igb2JqZWN0cyB0aGF0IHJlcHJlc2VudCB0aGUgYWN0dWFsIERPTSBub2Rl
cy4gRE9NTm9kZSBpcyBhIGJhc2Ugbm9kZSBtaXJyb3IgdHlwZS4gKi8KY2xhc3MgRXZlbnRMaXN0
ZW5lciA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAg
ICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBUWVBFX1NFVCA9IDEgPDwgMCwKICAgICAgICBV
U0VfQ0FQVFVSRV9TRVQgPSAxIDw8IDEsCiAgICAgICAgSVNfQVRUUklCVVRFX1NFVCA9IDEgPDwg
MiwKICAgICAgICBOT0RFX0lEX1NFVCA9IDEgPDwgMywKICAgICAgICBIQU5ETEVSX0JPRFlfU0VU
ID0gMSA8PCA0LAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFRZUEVfU0VUIHwgVVNFX0NBUFRV
UkVfU0VUIHwgSVNfQVRUUklCVVRFX1NFVCB8IE5PREVfSURfU0VUIHwgSEFORExFUl9CT0RZX1NF
VCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAg
ICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVm
UHRyPEV2ZW50TGlzdGVuZXI+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9z
dGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmll
bmQgY2xhc3MgRXZlbnRMaXN0ZW5lcjsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFRZUEVfU0VUPiYgc2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRZUEVfU0VUKSwgcHJvcGVydHlfdHlw
ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VFlQRV9TRVQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVVNFX0NBUFRVUkVfU0VUPiYgc2V0VXNlQ2FwdHVy
ZShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFVTRV9DQVBUVVJFX1NFVCksIHByb3BlcnR5X3VzZUNhcHR1cmVfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigidXNlQ2FwdHVyZSIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVU0VfQ0FQVFVSRV9TRVQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSVNfQVRUUklCVVRFX1NFVD4mIHNldElzQXR0cmlidXRl
KGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgSVNfQVRUUklCVVRFX1NFVCksIHByb3BlcnR5X2lzQXR0cmlidXRlX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImlzQXR0cmlidXRlIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElTX0FUVFJJQlVURV9TRVQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTk9ERV9JRF9TRVQ+JiBzZXROb2RlSWQoaW50IHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5PREVf
SURfU0VUKSwgcHJvcGVydHlfbm9kZUlkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldE51bWJlcigibm9kZUlkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPE5PREVfSURfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEhB
TkRMRVJfQk9EWV9TRVQ+JiBzZXRIYW5kbGVyQm9keShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhBTkRMRVJfQk9EWV9T
RVQpLCBwcm9wZXJ0eV9oYW5kbGVyQm9keV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoImhhbmRsZXJCb2R5IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPEhBTkRMRVJfQk9EWV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRv
ciBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RXZlbnRMaXN0ZW5lcj4q
PigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxFdmVu
dExpc3RlbmVyPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxFdmVudExp
c3RlbmVyPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGlj
IGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEV2ZW50TGlzdGVuZXI+IHJlc3VsdCA9IEV2ZW50
TGlzdGVuZXI6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFR5cGUoLi4uKQogICAgICogICAgIC5z
ZXRVc2VDYXB0dXJlKC4uLikKICAgICAqICAgICAuc2V0SXNBdHRyaWJ1dGUoLi4uKQogICAgICog
ICAgIC5zZXROb2RlSWQoLi4uKQogICAgICogICAgIC5zZXRIYW5kbGVyQm9keSguLi4pOwogICAg
ICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAg
ICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBFdmVudExpc3Rl
bmVyKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldExvY2F0aW9uKC8qUGFzc1JlZlB0cjxUeXBlQnVp
bGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2
YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoImxvY2F0aW9uIiwgdmFsdWUpOwog
ICAgfQp9OwoKLyogQSBzdHJ1Y3R1cmUgaG9sZGluZyBhbiBSR0JBIGNvbG9yLiAqLwovLyBUeXBl
IG9yaWdpbmFsbHkgd2FzIG5hbWVkICdSR0JBJy4KY2xhc3MgUmdiYSA6IHB1YmxpYyBJbnNwZWN0
b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwK
ICAgICAgICBSX1NFVCA9IDEgPDwgMCwKICAgICAgICBHX1NFVCA9IDEgPDwgMSwKICAgICAgICBC
X1NFVCA9IDEgPDwgMiwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChSX1NFVCB8IEdfU0VUIHwg
Ql9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIg
ewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsK
CiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0
YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWls
ZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFz
c1JlZlB0cjxSZ2JhPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUp
OwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNs
YXNzIFJnYmE7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBSX1NFVD4mIHNl
dFIoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFJfU0VUKSwgcHJvcGVydHlfcl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXROdW1iZXIoInIiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Ul9T
RVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgR19TRVQ+JiBzZXRHKGlu
dCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBH
X1NFVCksIHByb3BlcnR5X2dfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
TnVtYmVyKCJnIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEdfU0VUPigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJfU0VUPiYgc2V0QihpbnQgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQl9TRVQp
LCBwcm9wZXJ0eV9iX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJl
cigiYiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxCX1NFVD4oKTsKICAg
ICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxSZ2JhPiYgKCkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNf
bm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxS
Z2JhPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRy
PFJnYmE+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFJnYmE+KCp0aGlz
KTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6
CiAgICAgKiBSZWZQdHI8UmdiYT4gcmVzdWx0ID0gUmdiYTo6Y3JlYXRlKCkKICAgICAqICAgICAu
c2V0UiguLi4pCiAgICAgKiAgICAgLnNldEcoLi4uKQogICAgICogICAgIC5zZXRCKC4uLik7CiAg
ICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAg
ICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IFJnYmEoKSkp
OwogICAgfQoKICAgIHZvaWQgc2V0QShkb3VibGUgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+
c2V0TnVtYmVyKCJhIiwgdmFsdWUpOwogICAgfQp9OwoKLyogQ29uZmlndXJhdGlvbiBkYXRhIGZv
ciB0aGUgaGlnaGxpZ2h0aW5nIG9mIHBhZ2UgZWxlbWVudHMuICovCmNsYXNzIEhpZ2hsaWdodENv
bmZpZyA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAg
ICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBBTExfRklFTERTX1NFVCA9IDAKICAgIH07Cgog
ICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgog
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0
ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
Pio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEhpZ2hsaWdo
dENvbmZpZz4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAg
ICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBI
aWdobGlnaHRDb25maWc7CiAgICBwdWJsaWM6CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxIaWdo
bGlnaHRDb25maWc+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEhpZ2hsaWdodENvbmZpZz4qPigmbV9yZXN1
bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxIaWdobGlnaHRDb25m
aWc+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPEhpZ2hsaWdodENvbmZp
Zz4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25z
dHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxIaWdobGlnaHRDb25maWc+IHJlc3VsdCA9IEhpZ2hsaWdo
dENvbmZpZzo6Y3JlYXRlKCk7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19T
RVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4o
YWRvcHRSZWYobmV3IEhpZ2hsaWdodENvbmZpZygpKSk7CiAgICB9CgogICAgdm9pZCBzZXRTaG93
SW5mbyhib29sIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEJvb2xlYW4oInNob3dJbmZv
IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0Q29udGVudENvbG9yKC8qUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6RE9NOjpSZ2JhPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1
ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoImNvbnRlbnRDb2xvciIsIHZhbHVlKTsK
ICAgIH0KCiAgICB2b2lkIHNldFBhZGRpbmdDb2xvcigvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6
OkRPTTo6UmdiYT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAg
ICAgICAgdGhpcy0+c2V0T2JqZWN0KCJwYWRkaW5nQ29sb3IiLCB2YWx1ZSk7CiAgICB9CgogICAg
dm9pZCBzZXRCb3JkZXJDb2xvcigvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6UmdiYT4q
LyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+
c2V0T2JqZWN0KCJib3JkZXJDb2xvciIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldE1hcmdp
bkNvbG9yKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpSZ2JhPiovIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoIm1h
cmdpbkNvbG9yIiwgdmFsdWUpOwogICAgfQp9OwoKfSAvLyBET00KCm5hbWVzcGFjZSBDU1Mgewov
KiBUaGlzIG9iamVjdCBpZGVudGlmaWVzIGEgQ1NTIHN0eWxlIGluIGEgdW5pcXVlIHdheS4gKi8K
Y2xhc3MgQ1NTU3R5bGVJZCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBl
bnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBTVFlMRV9TSEVFVF9JRF9T
RVQgPSAxIDw8IDAsCiAgICAgICAgT1JESU5BTF9TRVQgPSAxIDw8IDEsCiAgICAgICAgQUxMX0ZJ
RUxEU19TRVQgPSAoU1RZTEVfU0hFRVRfSURfU0VUIHwgT1JESU5BTF9TRVQpCiAgICB9OwoKICAg
IHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8
aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4q
Pih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NTdHlsZUlk
PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19G
SUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAg
ICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENTU1N0eWxl
SWQ7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTVFlMRV9TSEVFVF9JRF9T
RVQ+JiBzZXRTdHlsZVNoZWV0SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTVFlMRV9TSEVFVF9JRF9TRVQpLCBwcm9w
ZXJ0eV9zdHlsZVNoZWV0SWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJzdHlsZVNoZWV0SWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8U1RZTEVfU0hFRVRfSURfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IE9SRElOQUxfU0VUPiYgc2V0T3JkaW5hbChpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgT1JESU5BTF9TRVQpLCBwcm9wZXJ0eV9vcmRp
bmFsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigib3JkaW5h
bCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxPUkRJTkFMX1NFVD4oKTsK
ICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDU1NTdHlsZUlkPiYgKCkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCBy
ZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PFJlZlB0cjxDU1NTdHlsZUlkPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVy
YXRvciBQYXNzUmVmUHRyPENTU1N0eWxlSWQ+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1
cm4gUmVmUHRyPENTU1N0eWxlSWQ+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAg
ICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTU3R5bGVJZD4gcmVz
dWx0ID0gQ1NTU3R5bGVJZDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U3R5bGVTaGVldElkKC4u
LikKICAgICAqICAgICAuc2V0T3JkaW5hbCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRl
cjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5P
X0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBDU1NTdHlsZUlkKCkpKTsKICAgIH0KfTsKCi8qIFRo
aXMgb2JqZWN0IGlkZW50aWZpZXMgYSBDU1MgcnVsZSBpbiBhIHVuaXF1ZSB3YXkuICovCmNsYXNz
IENTU1J1bGVJZCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsK
ICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBTVFlMRV9TSEVFVF9JRF9TRVQgPSAx
IDw8IDAsCiAgICAgICAgT1JESU5BTF9TRVQgPSAxIDw8IDEsCiAgICAgICAgQUxMX0ZJRUxEU19T
RVQgPSAoU1RZTEVfU0hFRVRfSURfU0VUIHwgT1JESU5BTF9TRVQpCiAgICB9OwoKICAgIHRlbXBs
YXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNU
RVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlz
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NSdWxlSWQ+IHB0cikK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19T
RVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVz
dWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NTUnVsZUlkOwogICAg
cHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU1RZTEVfU0hFRVRfSURfU0VUPiYgc2V0
U3R5bGVTaGVldElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1RZTEVfU0hFRVRfSURfU0VUKSwgcHJvcGVydHlfc3R5
bGVTaGVldElkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
c3R5bGVTaGVldElkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNUWUxF
X1NIRUVUX0lEX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPUkRJ
TkFMX1NFVD4mIHNldE9yZGluYWwoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIE9SRElOQUxfU0VUKSwgcHJvcGVydHlfb3JkaW5hbF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoIm9yZGluYWwiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T1JESU5BTF9TRVQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTUnVsZUlkPiYgKCkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNf
bm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxD
U1NSdWxlSWQ+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NS
ZWZQdHI8Q1NTUnVsZUlkPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxD
U1NSdWxlSWQ+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTUnVsZUlkPiByZXN1bHQgPSBDU1NSdWxl
SWQ6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFN0eWxlU2hlZXRJZCguLi4pCiAgICAgKiAgICAg
LnNldE9yZGluYWwoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NF
VD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihh
ZG9wdFJlZihuZXcgQ1NTUnVsZUlkKCkpKTsKICAgIH0KfTsKCi8qIENTUyBydWxlIGNvbGxlY3Rp
b24gZm9yIGEgc2luZ2xlIHBzZXVkbyBzdHlsZS4gKi8KY2xhc3MgUHNldWRvSWRSdWxlcyA6IHB1
YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVM
RFNfU0VUID0gMCwKICAgICAgICBQU0VVRE9fSURfU0VUID0gMSA8PCAwLAogICAgICAgIFJVTEVT
X1NFVCA9IDEgPDwgMSwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChQU0VVRE9fSURfU0VUIHwg
UlVMRVNfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWls
ZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1
bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
KFBhc3NSZWZQdHI8UHNldWRvSWRSdWxlcz4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25v
bl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAg
ICAgIGZyaWVuZCBjbGFzcyBQc2V1ZG9JZFJ1bGVzOwogICAgcHVibGljOgoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgUFNFVURPX0lEX1NFVD4mIHNldFBzZXVkb0lkKGludCB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQU0VVRE9fSURfU0VUKSwg
cHJvcGVydHlfcHNldWRvSWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
TnVtYmVyKCJwc2V1ZG9JZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxQ
U0VVRE9fSURfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFJVTEVT
X1NFVD4mIHNldFJ1bGVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFJVTEVTX1NFVCksIHByb3Bl
cnR5X3J1bGVzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJy
dWxlcyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxSVUxFU19TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8UHNldWRvSWRSdWxlcz4mICgpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NF
VCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxSZWZQdHI8UHNldWRvSWRSdWxlcz4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAg
ICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxQc2V1ZG9JZFJ1bGVzPiAoKQogICAgICAgIHsKICAgICAg
ICAgICAgcmV0dXJuIFJlZlB0cjxQc2V1ZG9JZFJ1bGVzPigqdGhpcyk7CiAgICAgICAgfQogICAg
fTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFBz
ZXVkb0lkUnVsZXM+IHJlc3VsdCA9IFBzZXVkb0lkUnVsZXM6OmNyZWF0ZSgpCiAgICAgKiAgICAg
LnNldFBzZXVkb0lkKC4uLikKICAgICAqICAgICAuc2V0UnVsZXMoLi4uKTsKICAgICAqLwogICAg
c3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1
cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgUHNldWRvSWRSdWxlcygpKSk7
CiAgICB9Cn07CgovKiBDU1MgcnVsZSBjb2xsZWN0aW9uIGZvciBhIHNpbmdsZSBwc2V1ZG8gc3R5
bGUuICovCmNsYXNzIEluaGVyaXRlZFN0eWxlRW50cnkgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0
IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAg
TUFUQ0hFRF9DU1NfUlVMRVNfU0VUID0gMSA8PCAwLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0g
KE1BVENIRURfQ1NTX1JVTEVTX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgog
ICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFU
RSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEluaGVyaXRlZFN0eWxlRW50cnk+IHB0cikKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1
aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0g
cHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgSW5oZXJpdGVkU3R5bGVFbnRyeTsK
ICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1BVENIRURfQ1NTX1JVTEVTX1NF
VD4mIHNldE1hdGNoZWRDU1NSdWxlcyhQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNQVRDSEVEX0NT
U19SVUxFU19TRVQpLCBwcm9wZXJ0eV9tYXRjaGVkQ1NTUnVsZXNfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoIm1hdGNoZWRDU1NSdWxlcyIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNQVRDSEVEX0NTU19SVUxFU19TRVQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8SW5oZXJpdGVkU3R5bGVFbnRyeT4mICgpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NF
VCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxSZWZQdHI8SW5oZXJpdGVkU3R5bGVFbnRyeT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0K
CiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxJbmhlcml0ZWRTdHlsZUVudHJ5PiAoKQogICAg
ICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxJbmhlcml0ZWRTdHlsZUVudHJ5PigqdGhp
cyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgogICAgICogUmVmUHRyPEluaGVyaXRlZFN0eWxlRW50cnk+IHJlc3VsdCA9IEluaGVyaXRlZFN0
eWxlRW50cnk6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldE1hdGNoZWRDU1NSdWxlcyguLi4pOwog
ICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewog
ICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBJbmhlcml0
ZWRTdHlsZUVudHJ5KCkpKTsKICAgIH0KCiAgICB2b2lkIHNldElubGluZVN0eWxlKC8qUGFzc1Jl
ZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJpbmxpbmVTdHlsZSIs
IHZhbHVlKTsKICAgIH0KfTsKCi8qIENTUyBzdHlsZSBpbmZvcm1hdGlvbiBmb3IgYSBET00gc3R5
bGUgYXR0cmlidXRlLiAqLwpjbGFzcyBDU1NTdHlsZUF0dHJpYnV0ZSA6IHB1YmxpYyBJbnNwZWN0
b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwK
ICAgICAgICBOQU1FX1NFVCA9IDEgPDwgMCwKICAgICAgICBTVFlMRV9TRVQgPSAxIDw8IDEsCiAg
ICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoTkFNRV9TRVQgfCBTVFlMRV9TRVQpCiAgICB9OwoKICAg
IHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8
aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4q
Pih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NTdHlsZUF0
dHJpYnV0ZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAg
ICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBD
U1NTdHlsZUF0dHJpYnV0ZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5B
TUVfU0VUPiYgc2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5BTUVfU0VUKSwgcHJvcGVydHlfbmFtZV9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TkFNRV9TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgU1RZTEVfU0VUPiYgc2V0U3R5bGUoLypQYXNzUmVmUHRyPFR5
cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTVFlM
RV9TRVQpLCBwcm9wZXJ0eV9zdHlsZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRPYmplY3QoInN0eWxlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFNUWUxFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDU1NTdHls
ZUF0dHJpYnV0ZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NTU3R5bGVBdHRyaWJ1dGU+Kj4oJm1fcmVz
dWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q1NTU3R5bGVBdHRy
aWJ1dGU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENTU1N0eWxlQXR0
cmlidXRlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGlj
IGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU1N0eWxlQXR0cmlidXRlPiByZXN1bHQgPSBD
U1NTdHlsZUF0dHJpYnV0ZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0TmFtZSguLi4pCiAgICAg
KiAgICAgLnNldFN0eWxlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxE
U19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NF
VD4oYWRvcHRSZWYobmV3IENTU1N0eWxlQXR0cmlidXRlKCkpKTsKICAgIH0KfTsKCi8qIENTUyBz
dHlsZXNoZWV0IG1ldGFpbmZvcm1hdGlvbi4gKi8KY2xhc3MgQ1NTU3R5bGVTaGVldEhlYWRlciA6
IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19G
SUVMRFNfU0VUID0gMCwKICAgICAgICBTVFlMRV9TSEVFVF9JRF9TRVQgPSAxIDw8IDAsCiAgICAg
ICAgU09VUkNFX1VfUl9MX1NFVCA9IDEgPDwgMSwKICAgICAgICBUSVRMRV9TRVQgPSAxIDw8IDIs
CiAgICAgICAgRElTQUJMRURfU0VUID0gMSA8PCAzLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0g
KFNUWUxFX1NIRUVUX0lEX1NFVCB8IFNPVVJDRV9VX1JfTF9TRVQgfCBUSVRMRV9TRVQgfCBESVNB
QkxFRF9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxk
ZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3Vs
dDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxC
dWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIo
UGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0SGVhZGVyPiBwdHIpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRf
aW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9
CiAgICAgICAgZnJpZW5kIGNsYXNzIENTU1N0eWxlU2hlZXRIZWFkZXI7CiAgICBwdWJsaWM6Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTVFlMRV9TSEVFVF9JRF9TRVQ+JiBzZXRTdHlsZVNoZWV0
SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBTVFlMRV9TSEVFVF9JRF9TRVQpLCBwcm9wZXJ0eV9zdHlsZVNoZWV0SWRf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzdHlsZVNoZWV0
SWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U1RZTEVfU0hFRVRfSURf
U0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNPVVJDRV9VX1JfTF9T
RVQ+JiBzZXRTb3VyY2VVUkwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTT1VSQ0VfVV9SX0xfU0VUKSwgcHJvcGVydHlf
c291cmNlVVJMX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
c291cmNlVVJMIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNPVVJDRV9V
X1JfTF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVElUTEVfU0VU
PiYgc2V0VGl0bGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUSVRMRV9TRVQpLCBwcm9wZXJ0eV90aXRsZV9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInRpdGxlIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRJVExFX1NFVD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBESVNBQkxFRF9TRVQ+JiBzZXREaXNhYmxlZChib29sIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERJU0FCTEVE
X1NFVCksIHByb3BlcnR5X2Rpc2FibGVkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldEJvb2xlYW4oImRpc2FibGVkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPERJU0FCTEVEX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0
cjxDU1NTdHlsZVNoZWV0SGVhZGVyPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAg
ICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NTdHlsZVNoZWV0SGVh
ZGVyPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRy
PENTU1N0eWxlU2hlZXRIZWFkZXI+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVm
UHRyPENTU1N0eWxlU2hlZXRIZWFkZXI+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8q
CiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTU3R5bGVTaGVl
dEhlYWRlcj4gcmVzdWx0ID0gQ1NTU3R5bGVTaGVldEhlYWRlcjo6Y3JlYXRlKCkKICAgICAqICAg
ICAuc2V0U3R5bGVTaGVldElkKC4uLikKICAgICAqICAgICAuc2V0U291cmNlVVJMKC4uLikKICAg
ICAqICAgICAuc2V0VGl0bGUoLi4uKQogICAgICogICAgIC5zZXREaXNhYmxlZCguLi4pOwogICAg
ICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAg
ICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBDU1NTdHlsZVNo
ZWV0SGVhZGVyKCkpKTsKICAgIH0KfTsKCi8qIENTUyBzdHlsZXNoZWV0IGNvbnRlbnRzLiAqLwpj
bGFzcyBDU1NTdHlsZVNoZWV0Qm9keSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6
CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBTVFlMRV9TSEVF
VF9JRF9TRVQgPSAxIDw8IDAsCiAgICAgICAgUlVMRVNfU0VUID0gMSA8PCAxLAogICAgICAgIEFM
TF9GSUVMRFNfU0VUID0gKFNUWUxFX1NIRUVUX0lEX1NFVCB8IFJVTEVTX1NFVCkKICAgIH07Cgog
ICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgog
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0
ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
Pio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENTU1N0eWxl
U2hlZXRCb2R5PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwog
ICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNz
IENTU1N0eWxlU2hlZXRCb2R5OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
U1RZTEVfU0hFRVRfSURfU0VUPiYgc2V0U3R5bGVTaGVldElkKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1RZTEVfU0hF
RVRfSURfU0VUKSwgcHJvcGVydHlfc3R5bGVTaGVldElkX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygic3R5bGVTaGVldElkIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFNUWUxFX1NIRUVUX0lEX1NFVD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBSVUxFU19TRVQ+JiBzZXRSdWxlcyhQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBSVUxFU19TRVQpLCBwcm9wZXJ0eV9ydWxlc19hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRBcnJheSgicnVsZXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8UlVMRVNfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVm
UHRyPENTU1N0eWxlU2hlZXRCb2R5PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAg
ICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NTdHlsZVNoZWV0Qm9k
eT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxD
U1NTdHlsZVNoZWV0Qm9keT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8
Q1NTU3R5bGVTaGVldEJvZHk+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAg
KiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTU3R5bGVTaGVldEJvZHk+
IHJlc3VsdCA9IENTU1N0eWxlU2hlZXRCb2R5OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRTdHls
ZVNoZWV0SWQoLi4uKQogICAgICogICAgIC5zZXRSdWxlcyguLi4pOwogICAgICovCiAgICBzdGF0
aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBC
dWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBDU1NTdHlsZVNoZWV0Qm9keSgpKSk7
CiAgICB9CgogICAgdm9pZCBzZXRUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAg
ICAgdGhpcy0+c2V0U3RyaW5nKCJ0ZXh0IiwgdmFsdWUpOwogICAgfQp9OwoKLyogQ1NTIHJ1bGUg
cmVwcmVzZW50YXRpb24uICovCmNsYXNzIENTU1J1bGUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0
IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnb3JpZ2luJyB3aGls
ZSBnZW5lcmF0aW5nIENTU1J1bGUuCiAgICBzdHJ1Y3QgT3JpZ2luIHsKICAgICAgICBlbnVtIEVu
dW0gewogICAgICAgICAgICBVc2VyID0gNDAsCiAgICAgICAgICAgIFVzZXJfYWdlbnQgPSA0MSwK
ICAgICAgICAgICAgSW5zcGVjdG9yID0gNDIsCiAgICAgICAgICAgIFJlZ3VsYXIgPSA0MywKICAg
ICAgICB9OwogICAgfTsgLy8gc3RydWN0IE9yaWdpbgoKICAgIGVudW0gewogICAgICAgIE5PX0ZJ
RUxEU19TRVQgPSAwLAogICAgICAgIFNFTEVDVE9SX1RFWFRfU0VUID0gMSA8PCAwLAogICAgICAg
IFNPVVJDRV9MSU5FX1NFVCA9IDEgPDwgMSwKICAgICAgICBPUklHSU5fU0VUID0gMSA8PCAyLAog
ICAgICAgIFNUWUxFX1NFVCA9IDEgPDwgMywKICAgICAgICBBTExfRklFTERTX1NFVCA9IChTRUxF
Q1RPUl9URVhUX1NFVCB8IFNPVVJDRV9MSU5FX1NFVCB8IE9SSUdJTl9TRVQgfCBTVFlMRV9TRVQp
CiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAg
cHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAg
ICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkK
ICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0
cjxDU1NSdWxlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwog
ICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNz
IENTU1J1bGU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTRUxFQ1RPUl9U
RVhUX1NFVD4mIHNldFNlbGVjdG9yVGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNFTEVDVE9SX1RFWFRfU0VUKSwg
cHJvcGVydHlfc2VsZWN0b3JUZXh0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZygic2VsZWN0b3JUZXh0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFNFTEVDVE9SX1RFWFRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFNPVVJDRV9MSU5FX1NFVD4mIHNldFNvdXJjZUxpbmUoaW50IHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNPVVJDRV9MSU5FX1NFVCks
IHByb3BlcnR5X3NvdXJjZUxpbmVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0TnVtYmVyKCJzb3VyY2VMaW5lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPFNPVVJDRV9MSU5FX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBPUklHSU5fU0VUPiYgc2V0T3JpZ2luKE9yaWdpbjo6RW51bSB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPUklHSU5fU0VUKSwgcHJvcGVydHlf
b3JpZ2luX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygib3Jp
Z2luIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxPUklHSU5fU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IE9SSUdJTl9TRVQ+JiBzZXRPcmlnaW4oY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPUklHSU5fU0VUKSwgcHJvcGVydHlf
b3JpZ2luX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygib3Jp
Z2luIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9SSUdJTl9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU1RZTEVfU0VUPiYgc2V0U3R5bGUo
LypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiovIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBTVFlMRV9TRVQpLCBwcm9wZXJ0eV9zdHlsZV9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInN0eWxlIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFNUWUxFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9y
IFJlZlB0cjxDU1NSdWxlPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NSdWxlPio+KCZtX3Jlc3VsdCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENTU1J1bGU+ICgpCiAgICAg
ICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENTU1J1bGU+KCp0aGlzKTsKICAgICAgICB9
CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQ
dHI8Q1NTUnVsZT4gcmVzdWx0ID0gQ1NTUnVsZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U2Vs
ZWN0b3JUZXh0KC4uLikKICAgICAqICAgICAuc2V0U291cmNlTGluZSguLi4pCiAgICAgKiAgICAg
LnNldE9yaWdpbiguLi4pCiAgICAgKiAgICAgLnNldFN0eWxlKC4uLik7CiAgICAgKi8KICAgIHN0
YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJu
IEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IENTU1J1bGUoKSkpOwogICAgfQoK
ICAgIHZvaWQgc2V0UnVsZUlkKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxl
SWQ+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRo
aXMtPnNldE9iamVjdCgicnVsZUlkIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U291cmNl
VVJMKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJz
b3VyY2VVUkwiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRTZWxlY3RvclJhbmdlKC8qUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTb3VyY2VSYW5nZT4qLyBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJzZWxlY3Rv
clJhbmdlIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0TWVkaWEoUGFzc1JlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0QXJyYXkoIm1lZGlhIiwg
dmFsdWUpOwogICAgfQp9OwoKLyogVGV4dCByYW5nZSB3aXRoaW4gYSByZXNvdXJjZS4gKi8KY2xh
c3MgU291cmNlUmFuZ2UgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51
bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgU1RBUlRfU0VUID0gMSA8PCAw
LAogICAgICAgIEVORF9TRVQgPSAxIDw8IDEsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoU1RB
UlRfU0VUIHwgRU5EX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xh
c3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNU
RVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcihQYXNzUmVmUHRyPFNvdXJjZVJhbmdlPiBwdHIpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRf
aW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9
CiAgICAgICAgZnJpZW5kIGNsYXNzIFNvdXJjZVJhbmdlOwogICAgcHVibGljOgoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgU1RBUlRfU0VUPiYgc2V0U3RhcnQoaW50IHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNUQVJUX1NFVCksIHByb3BlcnR5
X3N0YXJ0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic3Rh
cnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U1RBUlRfU0VUPigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVORF9TRVQ+JiBzZXRFbmQoaW50IHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVORF9T
RVQpLCBwcm9wZXJ0eV9lbmRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
TnVtYmVyKCJlbmQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RU5EX1NF
VD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxTb3VyY2VSYW5nZT4mICgp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERT
X1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxSZWZQdHI8U291cmNlUmFuZ2U+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAg
ICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8U291cmNlUmFuZ2U+ICgpCiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm4gUmVmUHRyPFNvdXJjZVJhbmdlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsK
CiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFNvdXJj
ZVJhbmdlPiByZXN1bHQgPSBTb3VyY2VSYW5nZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U3Rh
cnQoLi4uKQogICAgICogICAgIC5zZXRFbmQoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxk
ZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxO
T19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgU291cmNlUmFuZ2UoKSkpOwogICAgfQp9OwoKY2xh
c3MgQ1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1
YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIE5BTUVf
U0VUID0gMSA8PCAwLAogICAgICAgIFZBTFVFX1NFVCA9IDEgPDwgMSwKICAgICAgICBBTExfRklF
TERTX1NFVCA9IChOQU1FX1NFVCB8IFZBTFVFX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50
IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVp
bGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0
eT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9f
RklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAg
ICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDU1NDb21w
dXRlZFN0eWxlUHJvcGVydHk7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBO
QU1FX1NFVD4mIHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOQU1FX1NFVCksIHByb3BlcnR5X25hbWVfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJuYW1lIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5BTUVfU0VUPigpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFZBTFVFX1NFVD4mIHNldFZhbHVlKGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVkFM
VUVfU0VUKSwgcHJvcGVydHlfdmFsdWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxWQUxVRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTQ29t
cHV0ZWRTdHlsZVByb3BlcnR5PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlUHJv
cGVydHk+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQ
dHI8Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+KCp0aGlzKTsKICAgICAgICB9CiAg
ICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8
Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5PiByZXN1bHQgPSBDU1NDb21wdXRlZFN0eWxlUHJvcGVy
dHk6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldE5hbWUoLi4uKQogICAgICogICAgIC5zZXRWYWx1
ZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUo
KQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5l
dyBDU1NDb21wdXRlZFN0eWxlUHJvcGVydHkoKSkpOwogICAgfQp9OwoKLyogQ1NTIHN0eWxlIHJl
cHJlc2VudGF0aW9uLiAqLwpjbGFzcyBDU1NTdHlsZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qg
ewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBD
U1NfUFJPUEVSVElFU19TRVQgPSAxIDw8IDAsCiAgICAgICAgU0hPUlRIQU5EX0VOVFJJRVNfU0VU
ID0gMSA8PCAxLAogICAgICAgIFdJRFRIX1NFVCA9IDEgPDwgMiwKICAgICAgICBIRUlHSFRfU0VU
ID0gMSA8PCAzLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKENTU19QUk9QRVJUSUVTX1NFVCB8
IFNIT1JUSEFORF9FTlRSSUVTX1NFVCB8IFdJRFRIX1NFVCB8IEhFSUdIVF9TRVQpCiAgICB9OwoK
ICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToK
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxh
dGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NTdHls
ZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9f
RklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAg
ICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDU1NTdHls
ZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IENTU19QUk9QRVJUSUVTX1NF
VD4mIHNldENzc1Byb3BlcnRpZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ1NTX1BST1BFUlRJ
RVNfU0VUKSwgcHJvcGVydHlfY3NzUHJvcGVydGllc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRBcnJheSgiY3NzUHJvcGVydGllcyIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxDU1NfUFJPUEVSVElFU19TRVQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgU0hPUlRIQU5EX0VOVFJJRVNfU0VUPiYgc2V0U2hvcnRoYW5kRW50
cmllcyhQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTSE9SVEhBTkRfRU5UUklFU19TRVQpLCBwcm9w
ZXJ0eV9zaG9ydGhhbmRFbnRyaWVzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldEFycmF5KCJzaG9ydGhhbmRFbnRyaWVzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFNIT1JUSEFORF9FTlRSSUVTX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBXSURUSF9TRVQ+JiBzZXRXaWR0aChjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFdJRFRIX1NFVCks
IHByb3BlcnR5X3dpZHRoX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygid2lkdGgiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8V0lEVEhf
U0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEhFSUdIVF9TRVQ+JiBz
ZXRIZWlnaHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBIRUlHSFRfU0VUKSwgcHJvcGVydHlfaGVpZ2h0X2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiaGVpZ2h0IiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEhFSUdIVF9TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTU3R5bGU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVh
ZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENTU1N0eWxl
Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENT
U1N0eWxlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDU1NTdHlsZT4o
KnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1
Y3RvcjoKICAgICAqIFJlZlB0cjxDU1NTdHlsZT4gcmVzdWx0ID0gQ1NTU3R5bGU6OmNyZWF0ZSgp
CiAgICAgKiAgICAgLnNldENzc1Byb3BlcnRpZXMoLi4uKQogICAgICogICAgIC5zZXRTaG9ydGhh
bmRFbnRyaWVzKC4uLikKICAgICAqICAgICAuc2V0V2lkdGgoLi4uKQogICAgICogICAgIC5zZXRI
ZWlnaHQoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3Jl
YXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJl
ZihuZXcgQ1NTU3R5bGUoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0U3R5bGVJZCgvKlBhc3NSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGVJZD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJzdHlsZUlkIiwgdmFs
dWUpOwogICAgfQoKICAgIHZvaWQgc2V0Q3NzVGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ewogICAgICAgIHRoaXMtPnNldFN0cmluZygiY3NzVGV4dCIsIHZhbHVlKTsKICAgIH0KCiAgICB2
b2lkIHNldFJhbmdlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTb3VyY2VSYW5nZT4q
LyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+
c2V0T2JqZWN0KCJyYW5nZSIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIENTUyBzdHlsZSBlZmZlY3Rp
dmUgdmlzdWFsIGRpbWVuc2lvbnMgYW5kIHNvdXJjZSBvZmZzZXRzLiAqLwpjbGFzcyBDU1NQcm9w
ZXJ0eSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRl
ciBwcm9wZXJ0eSBuYW1lICdzdGF0dXMnIHdoaWxlIGdlbmVyYXRpbmcgQ1NTUHJvcGVydHkuCiAg
ICBzdHJ1Y3QgU3RhdHVzIHsKICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBBY3RpdmUg
PSA0NCwKICAgICAgICAgICAgSW5hY3RpdmUgPSA0NSwKICAgICAgICAgICAgRGlzYWJsZWQgPSA0
NiwKICAgICAgICAgICAgU3R5bGUgPSA0NywKICAgICAgICB9OwogICAgfTsgLy8gc3RydWN0IFN0
YXR1cwoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIE5BTUVf
U0VUID0gMSA8PCAwLAogICAgICAgIFZBTFVFX1NFVCA9IDEgPDwgMSwKICAgICAgICBBTExfRklF
TERTX1NFVCA9IChOQU1FX1NFVCB8IFZBTFVFX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50
IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVp
bGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENTU1Byb3BlcnR5PiBwdHIpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9
IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENTU1Byb3BlcnR5OwogICAgcHVi
bGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTkFNRV9TRVQ+JiBzZXROYW1lKGNvbnN0IFN0
cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgTkFNRV9TRVQpLCBwcm9wZXJ0eV9uYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygibmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxOQU1FX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWQUxV
RV9TRVQ+JiBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZBTFVFX1NFVCksIHByb3BlcnR5X3ZhbHVlX2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidmFsdWUiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VkFMVUVfU0VUPigpOwogICAgICAgIH0K
CiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENTU1Byb3BlcnR5PiYgKCkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNf
bm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxD
U1NQcm9wZXJ0eT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFz
c1JlZlB0cjxDU1NQcm9wZXJ0eT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQ
dHI8Q1NTUHJvcGVydHk+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTUHJvcGVydHk+IHJlc3VsdCA9
IENTU1Byb3BlcnR5OjpjcmVhdGUoKQogICAgICogICAgIC5zZXROYW1lKC4uLikKICAgICAqICAg
ICAuc2V0VmFsdWUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NF
VD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihh
ZG9wdFJlZihuZXcgQ1NTUHJvcGVydHkoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0UHJpb3JpdHko
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInByaW9y
aXR5IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0SW1wbGljaXQoYm9vbCB2YWx1ZSkKICAg
IHsKICAgICAgICB0aGlzLT5zZXRCb29sZWFuKCJpbXBsaWNpdCIsIHZhbHVlKTsKICAgIH0KCiAg
ICB2b2lkIHNldFRleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXRTdHJpbmcoInRleHQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRQYXJzZWRPayhib29s
IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEJvb2xlYW4oInBhcnNlZE9rIiwgdmFsdWUp
OwogICAgfQoKICAgIHZvaWQgc2V0U3RhdHVzKFN0YXR1czo6RW51bSB2YWx1ZSkKICAgIHsKICAg
ICAgICB0aGlzLT5zZXRTdHJpbmcoInN0YXR1cyIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVl
KSk7CiAgICB9CgogICAgdm9pZCBzZXRTdGF0dXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsK
ICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInN0YXR1cyIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lk
IHNldFNob3J0aGFuZE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlz
LT5zZXRTdHJpbmcoInNob3J0aGFuZE5hbWUiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRS
YW5nZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U291cmNlUmFuZ2U+Ki8gUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVj
dCgicmFuZ2UiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBDU1MgbWVkaWEgcXVlcnkgZGVzY3JpcHRv
ci4gKi8KY2xhc3MgQ1NTTWVkaWEgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgog
ICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnc291cmNlJyB3aGlsZSBnZW5lcmF0aW5n
IENTU01lZGlhLgogICAgc3RydWN0IFNvdXJjZSB7CiAgICAgICAgZW51bSBFbnVtIHsKICAgICAg
ICAgICAgTWVkaWFSdWxlID0gNDgsCiAgICAgICAgICAgIEltcG9ydFJ1bGUgPSA0OSwKICAgICAg
ICAgICAgU3R5bGVzaGVldCA9IDUwLAogICAgICAgIH07CiAgICB9OyAvLyBzdHJ1Y3QgU291cmNl
CgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgVEVYVF9TRVQg
PSAxIDw8IDAsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoVEVYVF9TRVQpCiAgICB9OwoKICAg
IHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8
aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4q
Pih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NNZWRpYT4g
cHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklF
TERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAg
bV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDU1NNZWRpYTsK
ICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRFWFRfU0VUPiYgc2V0VGV4dChj
b25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIFRFWFRfU0VUKSwgcHJvcGVydHlfdGV4dF9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInRleHQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8VEVYVF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQ
dHI8Q1NTTWVkaWE+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENTU01lZGlhPio+KCZtX3Jlc3VsdCk7CiAg
ICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENTU01lZGlhPiAoKQogICAgICAg
IHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDU1NNZWRpYT4oKnRoaXMpOwogICAgICAgIH0K
ICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0
cjxDU1NNZWRpYT4gcmVzdWx0ID0gQ1NTTWVkaWE6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFRl
eHQoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRl
KCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihu
ZXcgQ1NTTWVkaWEoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0U291cmNlKFNvdXJjZTo6RW51bSB2
YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInNvdXJjZSIsIGdldEVudW1Db25z
dGFudFZhbHVlKHZhbHVlKSk7CiAgICB9CgogICAgdm9pZCBzZXRTb3VyY2UoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInNvdXJjZSIsIHZhbHVlKTsK
ICAgIH0KCiAgICB2b2lkIHNldFNvdXJjZVVSTChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewog
ICAgICAgIHRoaXMtPnNldFN0cmluZygic291cmNlVVJMIiwgdmFsdWUpOwogICAgfQoKICAgIHZv
aWQgc2V0U291cmNlTGluZShpbnQgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0TnVtYmVy
KCJzb3VyY2VMaW5lIiwgdmFsdWUpOwogICAgfQp9OwoKLyogQ1NTIHNlbGVjdG9yIHByb2ZpbGUg
ZW50cnkuICovCmNsYXNzIFNlbGVjdG9yUHJvZmlsZUVudHJ5IDogcHVibGljIEluc3BlY3Rvck9i
amVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAg
ICAgIFNFTEVDVE9SX1NFVCA9IDEgPDwgMCwKICAgICAgICBVUkxfU0VUID0gMSA8PCAxLAogICAg
ICAgIExJTkVfTlVNQkVSX1NFVCA9IDEgPDwgMiwKICAgICAgICBUSU1FX1NFVCA9IDEgPDwgMywK
ICAgICAgICBISVRfQ09VTlRfU0VUID0gMSA8PCA0LAogICAgICAgIE1BVENIX0NPVU5UX1NFVCA9
IDEgPDwgNSwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChTRUxFQ1RPUl9TRVQgfCBVUkxfU0VU
IHwgTElORV9OVU1CRVJfU0VUIHwgVElNRV9TRVQgfCBISVRfQ09VTlRfU0VUIHwgTUFUQ0hfQ09V
TlRfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVy
IHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7
CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RT
dGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVp
bGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBh
c3NSZWZQdHI8U2VsZWN0b3JQcm9maWxlRW50cnk+IHB0cikKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9p
bl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0K
ICAgICAgICBmcmllbmQgY2xhc3MgU2VsZWN0b3JQcm9maWxlRW50cnk7CiAgICBwdWJsaWM6Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTRUxFQ1RPUl9TRVQ+JiBzZXRTZWxlY3Rvcihjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFNFTEVDVE9SX1NFVCksIHByb3BlcnR5X3NlbGVjdG9yX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic2VsZWN0b3IiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8U0VMRUNUT1JfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFVSTF9TRVQ+JiBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVUkxfU0VUKSwgcHJvcGVy
dHlfdXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidXJs
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVSTF9TRVQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTElORV9OVU1CRVJfU0VUPiYgc2V0TGluZU51
bWJlcihpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgTElORV9OVU1CRVJfU0VUKSwgcHJvcGVydHlfbGluZU51bWJlcl9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImxpbmVOdW1iZXIiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TElORV9OVU1CRVJfU0VUPigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRJTUVfU0VUPiYgc2V0VGltZShkb3VibGUgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVElNRV9TRVQp
LCBwcm9wZXJ0eV90aW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51
bWJlcigidGltZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUSU1FX1NF
VD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBISVRfQ09VTlRfU0VUPiYg
c2V0SGl0Q291bnQoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIEhJVF9DT1VOVF9TRVQpLCBwcm9wZXJ0eV9oaXRDb3VudF9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImhpdENvdW50IiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEhJVF9DT1VOVF9TRVQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTUFUQ0hfQ09VTlRfU0VUPiYgc2V0TWF0Y2hDb3VudChp
bnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
TUFUQ0hfQ09VTlRfU0VUKSwgcHJvcGVydHlfbWF0Y2hDb3VudF9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoIm1hdGNoQ291bnQiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8TUFUQ0hfQ09VTlRfU0VUPigpOwogICAgICAgIH0KCiAgICAg
ICAgb3BlcmF0b3IgUmVmUHRyPFNlbGVjdG9yUHJvZmlsZUVudHJ5PiYgKCkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRf
aXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0
cjxTZWxlY3RvclByb2ZpbGVFbnRyeT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUGFzc1JlZlB0cjxTZWxlY3RvclByb2ZpbGVFbnRyeT4gKCkKICAgICAgICB7CiAg
ICAgICAgICAgIHJldHVybiBSZWZQdHI8U2VsZWN0b3JQcm9maWxlRW50cnk+KCp0aGlzKTsKICAg
ICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAg
KiBSZWZQdHI8U2VsZWN0b3JQcm9maWxlRW50cnk+IHJlc3VsdCA9IFNlbGVjdG9yUHJvZmlsZUVu
dHJ5OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRTZWxlY3RvciguLi4pCiAgICAgKiAgICAgLnNl
dFVybCguLi4pCiAgICAgKiAgICAgLnNldExpbmVOdW1iZXIoLi4uKQogICAgICogICAgIC5zZXRU
aW1lKC4uLikKICAgICAqICAgICAuc2V0SGl0Q291bnQoLi4uKQogICAgICogICAgIC5zZXRNYXRj
aENvdW50KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNy
ZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRS
ZWYobmV3IFNlbGVjdG9yUHJvZmlsZUVudHJ5KCkpKTsKICAgIH0KfTsKCmNsYXNzIFNlbGVjdG9y
UHJvZmlsZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAg
ICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBUT1RBTF9USU1FX1NFVCA9IDEgPDwgMCwK
ICAgICAgICBEQVRBX1NFVCA9IDEgPDwgMSwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChUT1RB
TF9USU1FX1NFVCB8IERBVEFfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAg
ICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRF
IHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8U2VsZWN0b3JQcm9maWxlPiBwdHIpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsK
ICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFNlbGVjdG9yUHJvZmlsZTsKICAgIHB1Ymxp
YzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRPVEFMX1RJTUVfU0VUPiYgc2V0VG90YWxUaW1l
KGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBUT1RBTF9USU1FX1NFVCksIHByb3BlcnR5X3RvdGFsVGltZV9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInRvdGFsVGltZSIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUT1RBTF9USU1FX1NFVD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBEQVRBX1NFVD4mIHNldERhdGEoUGFzc1JlZlB0cjxJbnNwZWN0
b3JBcnJheT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgREFUQV9TRVQpLCBwcm9wZXJ0eV9kYXRhX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldEFycmF5KCJkYXRhIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPERBVEFfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFNl
bGVjdG9yUHJvZmlsZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8U2VsZWN0b3JQcm9maWxlPio+KCZtX3Jl
c3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFNlbGVjdG9yUHJv
ZmlsZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8U2VsZWN0b3JQcm9m
aWxlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNv
bnN0cnVjdG9yOgogICAgICogUmVmUHRyPFNlbGVjdG9yUHJvZmlsZT4gcmVzdWx0ID0gU2VsZWN0
b3JQcm9maWxlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRUb3RhbFRpbWUoLi4uKQogICAgICog
ICAgIC5zZXREYXRhKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19T
RVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4o
YWRvcHRSZWYobmV3IFNlbGVjdG9yUHJvZmlsZSgpKSk7CiAgICB9Cn07Cgp9IC8vIENTUwoKbmFt
ZXNwYWNlIFRpbWVsaW5lIHsKLyogVGltZWxpbmUgcmVjb3JkIGNvbnRhaW5zIGluZm9ybWF0aW9u
IGFib3V0IHRoZSByZWNvcmRlZCBhY3Rpdml0eS4gKi8KY2xhc3MgVGltZWxpbmVFdmVudCA6IHB1
YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVM
RFNfU0VUID0gMCwKICAgICAgICBUWVBFX1NFVCA9IDEgPDwgMCwKICAgICAgICBEQVRBX1NFVCA9
IDEgPDwgMSwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChUWVBFX1NFVCB8IERBVEFfU0VUKQog
ICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHBy
aXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAg
IHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAg
ICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFU
RSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8
VGltZWxpbmVFdmVudD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRl
KTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBj
bGFzcyBUaW1lbGluZUV2ZW50OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
VFlQRV9TRVQ+JiBzZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90eXBlX2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUWVBFX1NFVD4oKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEQVRBX1NFVD4mIHNldERhdGEoUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIERBVEFfU0VUKSwgcHJvcGVydHlfZGF0YV9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImRhdGEiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8REFUQV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQ
dHI8VGltZWxpbmVFdmVudD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8VGltZWxpbmVFdmVudD4qPigmbV9y
ZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxUaW1lbGluZUV2
ZW50PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxUaW1lbGluZUV2ZW50
PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgogICAgICogUmVmUHRyPFRpbWVsaW5lRXZlbnQ+IHJlc3VsdCA9IFRpbWVsaW5lRXZl
bnQ6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFR5cGUoLi4uKQogICAgICogICAgIC5zZXREYXRh
KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgp
CiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3
IFRpbWVsaW5lRXZlbnQoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0Q2hpbGRyZW4oUGFzc1JlZlB0
cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0QXJyYXkoImNo
aWxkcmVuIiwgdmFsdWUpOwogICAgfQp9OwoKfSAvLyBUaW1lbGluZQoKI2lmIEVOQUJMRShKQVZB
U0NSSVBUX0RFQlVHR0VSKQpuYW1lc3BhY2UgRGVidWdnZXIgewovKiBCcmVha3BvaW50IGlkZW50
aWZpZXIuICovCnR5cGVkZWYgU3RyaW5nIEJyZWFrcG9pbnRJZDsKCi8qIFVuaXF1ZSBzY3JpcHQg
aWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJpbmcgU2NyaXB0SWQ7CgovKiBDYWxsIGZyYW1lIGlk
ZW50aWZpZXIuICovCnR5cGVkZWYgU3RyaW5nIENhbGxGcmFtZUlkOwoKLyogTG9jYXRpb24gaW4g
dGhlIHNvdXJjZSBjb2RlLiAqLwpjbGFzcyBMb2NhdGlvbiA6IHB1YmxpYyBJbnNwZWN0b3JPYmpl
Y3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAg
ICBTQ1JJUFRfSURfU0VUID0gMSA8PCAwLAogICAgICAgIExJTkVfTlVNQkVSX1NFVCA9IDEgPDwg
MSwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChTQ1JJUFRfSURfU0VUIHwgTElORV9OVU1CRVJf
U0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsK
ICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7Cgog
ICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0
ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRl
cjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NS
ZWZQdHI8TG9jYXRpb24+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0
ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQg
Y2xhc3MgTG9jYXRpb247CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTQ1JJ
UFRfSURfU0VUPiYgc2V0U2NyaXB0SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTQ1JJUFRfSURfU0VUKSwgcHJvcGVy
dHlfc2NyaXB0SWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJzY3JpcHRJZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTQ1JJUFRf
SURfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExJTkVfTlVNQkVS
X1NFVD4mIHNldExpbmVOdW1iZXIoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIExJTkVfTlVNQkVSX1NFVCksIHByb3BlcnR5X2xpbmVOdW1i
ZXJfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJsaW5lTnVt
YmVyIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPExJTkVfTlVNQkVSX1NF
VD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxMb2NhdGlvbj4mICgpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NF
VCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxSZWZQdHI8TG9jYXRpb24+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9w
ZXJhdG9yIFBhc3NSZWZQdHI8TG9jYXRpb24+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1
cm4gUmVmUHRyPExvY2F0aW9uPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAg
ICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPExvY2F0aW9uPiByZXN1bHQg
PSBMb2NhdGlvbjo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U2NyaXB0SWQoLi4uKQogICAgICog
ICAgIC5zZXRMaW5lTnVtYmVyKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJ
RUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERT
X1NFVD4oYWRvcHRSZWYobmV3IExvY2F0aW9uKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldENvbHVt
bk51bWJlcihpbnQgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0TnVtYmVyKCJjb2x1bW5O
dW1iZXIiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBKYXZhU2NyaXB0IGNhbGwgZnJhbWUuIEFycmF5
IG9mIGNhbGwgZnJhbWVzIGZvcm0gdGhlIGNhbGwgc3RhY2suICovCmNsYXNzIENhbGxGcmFtZSA6
IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19G
SUVMRFNfU0VUID0gMCwKICAgICAgICBDQUxMX0ZSQU1FX0lEX1NFVCA9IDEgPDwgMCwKICAgICAg
ICBGVU5DVElPTl9OQU1FX1NFVCA9IDEgPDwgMSwKICAgICAgICBMT0NBVElPTl9TRVQgPSAxIDw8
IDIsCiAgICAgICAgU0NPUEVfQ0hBSU5fU0VUID0gMSA8PCAzLAogICAgICAgIFRISVNfU0VUID0g
MSA8PCA0LAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKENBTExfRlJBTUVfSURfU0VUIHwgRlVO
Q1RJT05fTkFNRV9TRVQgfCBMT0NBVElPTl9TRVQgfCBTQ09QRV9DSEFJTl9TRVQgfCBUSElTX1NF
VCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAg
ICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVm
UHRyPENhbGxGcmFtZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRl
KTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBj
bGFzcyBDYWxsRnJhbWU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDQUxM
X0ZSQU1FX0lEX1NFVD4mIHNldENhbGxGcmFtZUlkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ0FMTF9GUkFNRV9JRF9T
RVQpLCBwcm9wZXJ0eV9jYWxsRnJhbWVJZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoImNhbGxGcmFtZUlkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPENBTExfRlJBTUVfSURfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IEZVTkNUSU9OX05BTUVfU0VUPiYgc2V0RnVuY3Rpb25OYW1lKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
RlVOQ1RJT05fTkFNRV9TRVQpLCBwcm9wZXJ0eV9mdW5jdGlvbk5hbWVfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJmdW5jdGlvbk5hbWUiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RlVOQ1RJT05fTkFNRV9TRVQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTE9DQVRJT05fU0VUPiYgc2V0TG9jYXRpb24oLypQ
YXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6TG9jYXRpb24+Ki8gUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIExPQ0FUSU9OX1NFVCksIHByb3BlcnR5X2xvY2F0aW9uX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgibG9jYXRpb24iLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TE9DQVRJT05fU0VUPigpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFNDT1BFX0NIQUlOX1NFVD4mIHNldFNjb3BlQ2hhaW4oUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgU0NPUEVfQ0hBSU5fU0VUKSwgcHJvcGVydHlfc2NvcGVDaGFp
bl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgic2NvcGVDaGFp
biIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTQ09QRV9DSEFJTl9TRVQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVEhJU19TRVQ+JiBzZXRUaGlz
KC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBUSElTX1NFVCksIHByb3BlcnR5X3RoaXNfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ0aGlzIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPFRISVNfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUmVmUHRyPENhbGxGcmFtZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q2FsbEZyYW1lPio+KCZt
X3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENhbGxGcmFt
ZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q2FsbEZyYW1lPigqdGhp
cyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgogICAgICogUmVmUHRyPENhbGxGcmFtZT4gcmVzdWx0ID0gQ2FsbEZyYW1lOjpjcmVhdGUoKQog
ICAgICogICAgIC5zZXRDYWxsRnJhbWVJZCguLi4pCiAgICAgKiAgICAgLnNldEZ1bmN0aW9uTmFt
ZSguLi4pCiAgICAgKiAgICAgLnNldExvY2F0aW9uKC4uLikKICAgICAqICAgICAuc2V0U2NvcGVD
aGFpbiguLi4pCiAgICAgKiAgICAgLnNldFRoaXMoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1
aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRl
cjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgQ2FsbEZyYW1lKCkpKTsKICAgIH0KfTsKCi8q
IFNjb3BlIGRlc2NyaXB0aW9uLiAqLwpjbGFzcyBTY29wZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmpl
Y3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICd0eXBlJyB3aGls
ZSBnZW5lcmF0aW5nIFNjb3BlLgogICAgc3RydWN0IFR5cGUgewogICAgICAgIGVudW0gRW51bSB7
CiAgICAgICAgICAgIEdsb2JhbCA9IDUxLAogICAgICAgICAgICBMb2NhbCA9IDUyLAogICAgICAg
ICAgICBXaXRoID0gNTMsCiAgICAgICAgICAgIENsb3N1cmUgPSA1NCwKICAgICAgICAgICAgQ2F0
Y2ggPSA1NSwKICAgICAgICB9OwogICAgfTsgLy8gc3RydWN0IFR5cGUKCiAgICBlbnVtIHsKICAg
ICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBUWVBFX1NFVCA9IDEgPDwgMCwKICAgICAg
ICBPQkpFQ1RfU0VUID0gMSA8PCAxLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFRZUEVfU0VU
IHwgT0JKRUNUX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3Mg
QnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1f
cmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+
JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcihQYXNzUmVmUHRyPFNjb3BlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2lu
aXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAg
ZnJpZW5kIGNsYXNzIFNjb3BlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
VFlQRV9TRVQ+JiBzZXRUeXBlKFR5cGU6OkVudW0gdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90eXBlX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIGdldEVudW1D
b25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VFlQRV9T
RVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVFlQRV9TRVQ+JiBzZXRU
eXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxUWVBFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBPQkpFQ1RfU0VUPiYgc2V0T2JqZWN0KC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPQkpFQ1Rf
U0VUKSwgcHJvcGVydHlfb2JqZWN0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE9iamVjdCgib2JqZWN0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PE9CSkVDVF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8U2NvcGU+
JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJ
RUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8UmVmUHRyPFNjb3BlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBQYXNzUmVmUHRyPFNjb3BlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuIFJlZlB0cjxTY29wZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxTY29wZT4gcmVzdWx0ID0gU2Nv
cGU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFR5cGUoLi4uKQogICAgICogICAgIC5zZXRPYmpl
Y3QoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRl
KCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihu
ZXcgU2NvcGUoKSkpOwogICAgfQp9OwoKfSAvLyBEZWJ1Z2dlcgoKI2VuZGlmIC8vIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCm5hbWVz
cGFjZSBET01EZWJ1Z2dlciB7Ci8qIERPTSBicmVha3BvaW50IHR5cGUuICovCnN0cnVjdCBET01C
cmVha3BvaW50VHlwZSB7CiAgICBlbnVtIEVudW0gewogICAgICAgIFN1YnRyZWVfbW9kaWZpZWQg
PSA1NiwKICAgICAgICBBdHRyaWJ1dGVfbW9kaWZpZWQgPSA1NywKICAgICAgICBOb2RlX3JlbW92
ZWQgPSA1OCwKICAgIH07Cn07IC8vIHN0cnVjdCBET01CcmVha3BvaW50VHlwZQoKfSAvLyBET01E
ZWJ1Z2dlcgoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxF
KEpBVkFTQ1JJUFRfREVCVUdHRVIpCm5hbWVzcGFjZSBQcm9maWxlciB7Cn0gLy8gUHJvZmlsZXIK
CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCn0gLy8gbmFtZXNwYWNlIFR5
cGVCdWlsZGVyCgojZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKCmNsYXNzIEluc3BlY3RvckZy
b250ZW5kIHsKcHVibGljOgogICAgSW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKik7CgoKICAgIGNsYXNzIEluc3BlY3RvciB7CiAgICBwdWJsaWM6CiAgICAgICAgSW5z
cGVjdG9yKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkg
eyB9CiAgICAgICAgdm9pZCBldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGludCB0ZXN0Q2FsbElk
LCBjb25zdCBTdHJpbmcmIHNjcmlwdCk7CiAgICAgICAgdm9pZCBpbnNwZWN0KC8qUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBvYmplY3QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoaW50cyk7CiAg
ICAgICAgdm9pZCBkaWRDcmVhdGVXb3JrZXIoaW50IGlkLCBjb25zdCBTdHJpbmcmIHVybCwgYm9v
bCBpc1NoYXJlZCk7CiAgICAgICAgdm9pZCBkaWREZXN0cm95V29ya2VyKGludCBpZCk7CiAgICAg
ICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIEluc3Bl
Y3RvciogaW5zcGVjdG9yKCkgeyByZXR1cm4gJm1faW5zcGVjdG9yOyB9CgogICAgY2xhc3MgTWVt
b3J5IHsKICAgIHB1YmxpYzoKICAgICAgICBNZW1vcnkoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIHNldEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0K
ICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgTWVtb3J5KiBtZW1vcnkoKSB7IHJldHVybiAm
bV9tZW1vcnk7IH0KCiAgICBjbGFzcyBQYWdlIHsKICAgIHB1YmxpYzoKICAgICAgICBQYWdlKElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAg
ICAgdm9pZCBkb21Db250ZW50RXZlbnRGaXJlZChkb3VibGUgdGltZXN0YW1wKTsKICAgICAgICB2
b2lkIGxvYWRFdmVudEZpcmVkKGRvdWJsZSB0aW1lc3RhbXApOwogICAgICAgIHZvaWQgZnJhbWVO
YXZpZ2F0ZWQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZT4qLyBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gZnJhbWUpOwogICAgICAgIHZvaWQgZnJhbWVEZXRhY2hlZChj
b25zdCBTdHJpbmcmIGZyYW1lSWQpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
OyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJp
dmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsOwogICAgfTsKCiAgICBQYWdlKiBwYWdlKCkgeyByZXR1cm4gJm1fcGFnZTsgfQoK
ICAgIGNsYXNzIFJ1bnRpbWUgewogICAgcHVibGljOgogICAgICAgIFJ1bnRpbWUoSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lk
IHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgUnVudGltZSogcnVu
dGltZSgpIHsgcmV0dXJuICZtX3J1bnRpbWU7IH0KCiAgICBjbGFzcyBDb25zb2xlIHsKICAgIHB1
YmxpYzoKICAgICAgICBDb25zb2xlKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBtZXNzYWdlQWRkZWQoLypQYXNzUmVmUHRy
PFR5cGVCdWlsZGVyOjpDb25zb2xlOjpDb25zb2xlTWVzc2FnZT4qLyBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbWVzc2FnZSk7CiAgICAgICAgdm9pZCBtZXNzYWdlUmVwZWF0Q291bnRVcGRh
dGVkKGludCBjb3VudCk7CiAgICAgICAgdm9pZCBtZXNzYWdlc0NsZWFyZWQoKTsKICAgICAgICB2
b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9
IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgQ29uc29sZSog
Y29uc29sZSgpIHsgcmV0dXJuICZtX2NvbnNvbGU7IH0KCiAgICBjbGFzcyBOZXR3b3JrIHsKICAg
IHB1YmxpYzoKICAgICAgICBOZXR3b3JrKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCByZXF1ZXN0V2lsbEJlU2VudChjb25z
dCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcm
IGxvYWRlcklkLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCAvKlBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
cXVlc3QsIGRvdWJsZSB0aW1lc3RhbXAsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29y
azo6SW5pdGlhdG9yPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbml0aWF0b3IsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHN0YWNrVHJhY2UsIC8qUGFzc1JlZlB0cjxUeXBlQnVp
bGRlcjo6TmV0d29yazo6UmVzcG9uc2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
ZGlyZWN0UmVzcG9uc2UpOwogICAgICAgIHZvaWQgcmVxdWVzdFNlcnZlZEZyb21DYWNoZShjb25z
dCBTdHJpbmcmIHJlcXVlc3RJZCk7CiAgICAgICAgdm9pZCByZXNwb25zZVJlY2VpdmVkKGNvbnN0
IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYg
bG9hZGVySWQsIGRvdWJsZSB0aW1lc3RhbXAsIC8qVHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNl
VHlwZTo6RW51bSovIGNvbnN0IFN0cmluZyYgdHlwZSwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjpOZXR3b3JrOjpSZXNwb25zZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9u
c2UpOwogICAgICAgIHZvaWQgZGF0YVJlY2VpdmVkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBk
b3VibGUgdGltZXN0YW1wLCBpbnQgZGF0YUxlbmd0aCwgaW50IGVuY29kZWREYXRhTGVuZ3RoKTsK
ICAgICAgICB2b2lkIGxvYWRpbmdGaW5pc2hlZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91
YmxlIHRpbWVzdGFtcCk7CiAgICAgICAgdm9pZCBsb2FkaW5nRmFpbGVkKGNvbnN0IFN0cmluZyYg
cmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wLCBjb25zdCBTdHJpbmcmIGVycm9yVGV4dCwgY29u
c3QgYm9vbCogY29uc3QgY2FuY2VsZWQpOwogICAgICAgIHZvaWQgcmVxdWVzdFNlcnZlZEZyb21N
ZW1vcnlDYWNoZShjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBmcmFtZUlk
LCBjb25zdCBTdHJpbmcmIGxvYWRlcklkLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBkb3Vi
bGUgdGltZXN0YW1wLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkluaXRpYXRv
cj4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5pdGlhdG9yLCAvKlBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OkNhY2hlZFJlc291cmNlPiovIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXNvdXJjZSk7CiAgICAgICAgdm9pZCB3ZWJTb2NrZXRXaWxsU2VuZEhhbmRz
aGFrZVJlcXVlc3QoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIC8q
UGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6V2ViU29ja2V0UmVxdWVzdD4qLyBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdCk7CiAgICAgICAgdm9pZCB3ZWJTb2NrZXRI
YW5kc2hha2VSZXNwb25zZVJlY2VpdmVkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUg
dGltZXN0YW1wLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OldlYlNvY2tldFJl
c3BvbnNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXNwb25zZSk7CiAgICAgICAg
dm9pZCB3ZWJTb2NrZXRDcmVhdGVkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIHVybCk7CiAgICAgICAgdm9pZCB3ZWJTb2NrZXRDbG9zZWQoY29uc3QgU3RyaW5nJiByZXF1
ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXApOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAg
cHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBOZXR3b3JrKiBuZXR3b3JrKCkgeyByZXR1cm4gJm1f
bmV0d29yazsgfQoKI2lmIEVOQUJMRShTUUxfREFUQUJBU0UpCiAgICBjbGFzcyBEYXRhYmFzZSB7
CiAgICBwdWJsaWM6CiAgICAgICAgRGF0YWJhc2UoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGFkZERhdGFiYXNlKC8qUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6RGF0YWJhc2U6OkRhdGFiYXNlPiovIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBkYXRhYmFzZSk7CiAgICAgICAgdm9pZCBzcWxUcmFuc2FjdGlvblN1Y2Nl
ZWRlZChpbnQgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gY29sdW1u
TmFtZXMsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlcyk7CiAgICAgICAgdm9pZCBz
cWxUcmFuc2FjdGlvbkZhaWxlZChpbnQgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHNxbEVycm9yKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkg
eyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsg
fQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZh
dGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbDsKICAgIH07CgogICAgRGF0YWJhc2UqIGRhdGFiYXNlKCkgeyByZXR1cm4gJm1fZGF0
YWJhc2U7IH0KCiNlbmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQogICAgY2xhc3MgRE9NU3Rv
cmFnZSB7CiAgICBwdWJsaWM6CiAgICAgICAgRE9NU3RvcmFnZShJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgYWRkRE9NU3Rv
cmFnZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTVN0b3JhZ2U6OkVudHJ5PiovIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzdG9yYWdlKTsKICAgICAgICB2b2lkIHVwZGF0ZURPTVN0
b3JhZ2UoaW50IHN0b3JhZ2VJZCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
IHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7
IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2
YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWw7CiAgICB9OwoKICAgIERPTVN0b3JhZ2UqIGRvbXN0b3JhZ2UoKSB7IHJldHVybiAm
bV9kb21zdG9yYWdlOyB9CgogICAgY2xhc3MgQXBwbGljYXRpb25DYWNoZSB7CiAgICBwdWJsaWM6
CiAgICAgICAgQXBwbGljYXRpb25DYWNoZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgYXBwbGljYXRpb25DYWNoZVN0YXR1
c1VwZGF0ZWQoY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIG1hbmlmZXN0VVJM
LCBpbnQgc3RhdHVzKTsKICAgICAgICB2b2lkIG5ldHdvcmtTdGF0ZVVwZGF0ZWQoYm9vbCBpc05v
d09ubGluZSk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsg
cmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAg
IEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAg
ICB9OwoKICAgIEFwcGxpY2F0aW9uQ2FjaGUqIGFwcGxpY2F0aW9uY2FjaGUoKSB7IHJldHVybiAm
bV9hcHBsaWNhdGlvbmNhY2hlOyB9CgojaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQogICAgY2xhc3Mg
RmlsZVN5c3RlbSB7CiAgICBwdWJsaWM6CiAgICAgICAgRmlsZVN5c3RlbShJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgc2V0
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBn
ZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBGaWxlU3lzdGVtKiBmaWxl
c3lzdGVtKCkgeyByZXR1cm4gJm1fZmlsZXN5c3RlbTsgfQoKI2VuZGlmIC8vIEVOQUJMRShGSUxF
X1NZU1RFTSkKICAgIGNsYXNzIERPTSB7CiAgICBwdWJsaWM6CiAgICAgICAgRE9NKEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9p
ZCBkb2N1bWVudFVwZGF0ZWQoKTsKICAgICAgICB2b2lkIHNldENoaWxkTm9kZXMoaW50IHBhcmVu
dElkLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBub2Rlcyk7CiAgICAgICAgdm9pZCBhdHRy
aWJ1dGVNb2RpZmllZChpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgdmFsdWUpOwogICAgICAgIHZvaWQgYXR0cmlidXRlUmVtb3ZlZChpbnQgbm9kZUlkLCBjb25z
dCBTdHJpbmcmIG5hbWUpOwogICAgICAgIHZvaWQgaW5saW5lU3R5bGVJbnZhbGlkYXRlZChQYXNz
UmVmUHRyPEluc3BlY3RvckFycmF5PiBub2RlSWRzKTsKICAgICAgICB2b2lkIGNoYXJhY3RlckRh
dGFNb2RpZmllZChpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIGNoYXJhY3RlckRhdGEpOwogICAg
ICAgIHZvaWQgY2hpbGROb2RlQ291bnRVcGRhdGVkKGludCBub2RlSWQsIGludCBjaGlsZE5vZGVD
b3VudCk7CiAgICAgICAgdm9pZCBjaGlsZE5vZGVJbnNlcnRlZChpbnQgcGFyZW50Tm9kZUlkLCBp
bnQgcHJldmlvdXNOb2RlSWQsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpOb2RlPiov
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBub2RlKTsKICAgICAgICB2b2lkIGNoaWxkTm9k
ZVJlbW92ZWQoaW50IHBhcmVudE5vZGVJZCwgaW50IG5vZGVJZCk7CiAgICAgICAgdm9pZCBzZXRJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdl
dEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIERPTSogZG9tKCkgeyByZXR1
cm4gJm1fZG9tOyB9CgogICAgY2xhc3MgQ1NTIHsKICAgIHB1YmxpYzoKICAgICAgICBDU1MoSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAg
ICB2b2lkIG1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkKCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
OyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIENTUyogY3NzKCkgeyByZXR1cm4gJm1f
Y3NzOyB9CgogICAgY2xhc3MgVGltZWxpbmUgewogICAgcHVibGljOgogICAgICAgIFRpbWVsaW5l
KEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAg
ICAgICAgdm9pZCBldmVudFJlY29yZGVkKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6VGltZWxp
bmU6OlRpbWVsaW5lRXZlbnQ+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlY29yZCk7
CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAg
IFRpbWVsaW5lKiB0aW1lbGluZSgpIHsgcmV0dXJuICZtX3RpbWVsaW5lOyB9CgojaWYgRU5BQkxF
KEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICBjbGFzcyBEZWJ1Z2dlciB7CiAgICBwdWJsaWM6CiAg
ICAgICAgRGVidWdnZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKSB7IH0KICAgICAgICB2b2lkIGdsb2JhbE9iamVjdENsZWFyZWQoKTsKICAgICAgICB2
b2lkIHNjcmlwdFBhcnNlZChjb25zdCBTdHJpbmcmIHNjcmlwdElkLCBjb25zdCBTdHJpbmcmIHVy
bCwgaW50IHN0YXJ0TGluZSwgaW50IHN0YXJ0Q29sdW1uLCBpbnQgZW5kTGluZSwgaW50IGVuZENv
bHVtbiwgY29uc3QgYm9vbCogY29uc3QgaXNDb250ZW50U2NyaXB0LCBjb25zdCBTdHJpbmcmIHNv
dXJjZU1hcFVSTCk7CiAgICAgICAgdm9pZCBzY3JpcHRGYWlsZWRUb1BhcnNlKGNvbnN0IFN0cmlu
ZyYgdXJsLCBjb25zdCBTdHJpbmcmIHNjcmlwdFNvdXJjZSwgaW50IHN0YXJ0TGluZSwgaW50IGVy
cm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwogICAgICAgIHZvaWQgYnJlYWtw
b2ludFJlc29sdmVkKGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkLCAvKlBhc3NSZWZQdHI8VHlw
ZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbG9jYXRpb24pOwogICAgICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciBuYW1lICdyZWFz
b24nIHdoaWxlIGdlbmVyYXRpbmcgZXZlbnQgcGF1c2VkLgogICAgICAgIHN0cnVjdCBSZWFzb24g
ewogICAgICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICAgICAgWEhSID0gNSwKICAgICAg
ICAgICAgICAgIERPTSA9IDU5LAogICAgICAgICAgICAgICAgRXZlbnRMaXN0ZW5lciA9IDYwLAog
ICAgICAgICAgICAgICAgRXhjZXB0aW9uID0gNjEsCiAgICAgICAgICAgICAgICBPdGhlciA9IDI1
LAogICAgICAgICAgICB9OwogICAgICAgIH07IC8vIHN0cnVjdCBSZWFzb24KCiAgICAgICAgdm9p
ZCBwYXVzZWQoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gY2FsbEZyYW1lcywgLypSZWFzb246
OkVudW0qLyBjb25zdCBTdHJpbmcmIHJlYXNvbiwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGRhdGEpOwogICAgICAgIHZvaWQgcmVzdW1lZCgpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsg
fQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBEZWJ1Z2dlciogZGVidWdnZXIoKSB7IHJl
dHVybiAmbV9kZWJ1Z2dlcjsgfQoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICBjbGFzcyBET01EZWJ1Z2dlciB7
CiAgICBwdWJsaWM6CiAgICAgICAgRE9NRGVidWdnZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIHNldEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0K
ICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgRE9NRGVidWdnZXIqIGRvbWRlYnVnZ2VyKCkg
eyByZXR1cm4gJm1fZG9tZGVidWdnZXI7IH0KCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgY2xhc3MgUHJvZmls
ZXIgewogICAgcHVibGljOgogICAgICAgIFByb2ZpbGVyKEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBhZGRQcm9maWxlSGVh
ZGVyKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoZWFkZXIpOwogICAgICAgIHZvaWQgYWRk
SGVhcFNuYXBzaG90Q2h1bmsoaW50IHVpZCwgY29uc3QgU3RyaW5nJiBjaHVuayk7CiAgICAgICAg
dm9pZCBmaW5pc2hIZWFwU25hcHNob3QoaW50IHVpZCk7CiAgICAgICAgdm9pZCBzZXRSZWNvcmRp
bmdQcm9maWxlKGJvb2wgaXNQcm9maWxpbmcpOwogICAgICAgIHZvaWQgcmVzZXRQcm9maWxlcygp
OwogICAgICAgIHZvaWQgcmVwb3J0SGVhcFNuYXBzaG90UHJvZ3Jlc3MoaW50IGRvbmUsIGludCB0
b3RhbCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0
dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9
OwoKICAgIFByb2ZpbGVyKiBwcm9maWxlcigpIHsgcmV0dXJuICZtX3Byb2ZpbGVyOyB9CgojZW5k
aWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiNpZiBFTkFCTEUoV09SS0VSUykKICAg
IGNsYXNzIFdvcmtlciB7CiAgICBwdWJsaWM6CiAgICAgICAgV29ya2VyKEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCB3b3Jr
ZXJDcmVhdGVkKGludCB3b3JrZXJJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgaW5zcGVjdG9y
Q29ubmVjdGVkKTsKICAgICAgICB2b2lkIHdvcmtlclRlcm1pbmF0ZWQoaW50IHdvcmtlcklkKTsK
ICAgICAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZUZyb21Xb3JrZXIoaW50IHdvcmtlcklkLCBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSk7CiAgICAgICAgdm9pZCBkaXNjb25uZWN0
ZWRGcm9tV29ya2VyKCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAg
ICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgog
ICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWw7CiAgICB9OwoKICAgIFdvcmtlciogd29ya2VyKCkgeyByZXR1cm4gJm1fd29ya2VyOyB9Cgoj
ZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCgpwcml2YXRlOgogICAgSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIEluc3BlY3RvciBtX2luc3Bl
Y3RvcjsKICAgIE1lbW9yeSBtX21lbW9yeTsKICAgIFBhZ2UgbV9wYWdlOwogICAgUnVudGltZSBt
X3J1bnRpbWU7CiAgICBDb25zb2xlIG1fY29uc29sZTsKICAgIE5ldHdvcmsgbV9uZXR3b3JrOwoj
aWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKICAgIERhdGFiYXNlIG1fZGF0YWJhc2U7CiNlbmRpZiAv
LyBFTkFCTEUoU1FMX0RBVEFCQVNFKQogICAgRE9NU3RvcmFnZSBtX2RvbXN0b3JhZ2U7CiAgICBB
cHBsaWNhdGlvbkNhY2hlIG1fYXBwbGljYXRpb25jYWNoZTsKI2lmIEVOQUJMRShGSUxFX1NZU1RF
TSkKICAgIEZpbGVTeXN0ZW0gbV9maWxlc3lzdGVtOwojZW5kaWYgLy8gRU5BQkxFKEZJTEVfU1lT
VEVNKQogICAgRE9NIG1fZG9tOwogICAgQ1NTIG1fY3NzOwogICAgVGltZWxpbmUgbV90aW1lbGlu
ZTsKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgRGVidWdnZXIgbV9kZWJ1Z2dl
cjsKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKEpBVkFT
Q1JJUFRfREVCVUdHRVIpCiAgICBET01EZWJ1Z2dlciBtX2RvbWRlYnVnZ2VyOwojZW5kaWYgLy8g
RU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKICAgIFByb2ZpbGVyIG1fcHJvZmlsZXI7CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKI2lmIEVOQUJMRShXT1JLRVJTKQogICAgV29ya2VyIG1fd29ya2VyOwojZW5kaWYg
Ly8gRU5BQkxFKFdPUktFUlMpCn07Cgp9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiNlbmRpZiAvLyAh
ZGVmaW5lZChJbnNwZWN0b3JGcm9udGVuZF9oKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>122031</attachid>
            <date>2012-01-11 08:24:26 -0800</date>
            <delta_ts>2012-01-12 06:09:31 -0800</delta_ts>
            <desc>New InspectorFrontend.h</desc>
            <filename>InspectorFrontend.h</filename>
            <type>text/plain</type>
            <size>154606</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgojaWZuZGVmIEluc3BlY3RvckZyb250ZW5kX2gKI2RlZmluZSBJbnNw
ZWN0b3JGcm9udGVuZF9oCgojaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiNpbmNsdWRlIDxQ
bGF0Zm9ybVN0cmluZy5oPgojaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KCm5hbWVzcGFjZSBX
ZWJDb3JlIHsKCmNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKCi8vIEJvdGggSW5zcGVj
dG9yT2JqZWN0IGFuZCBJbnNwZWN0b3JBcnJheSBtYXkgb3IgbWF5IG5vdCBiZSBkZWNsYXJlZCBh
dCB0aGlzIHBvaW50IGFzIGRlZmluZWQgYnkgRU5BQkxFRF9JTlNQRUNUT1IuCi8vIERvdWJsZS1j
aGVjayB3ZSBoYXZlIHRoZW0gYXQgbGVhc3QgYXMgZm9yd2FyZCBkZWNsYXJhdGlvbi4KY2xhc3Mg
SW5zcGVjdG9yQXJyYXk7CmNsYXNzIEluc3BlY3Rvck9iamVjdDsKCnR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwoKI2lmIEVOQUJMRShJTlNQRUNUT1IpCgpuYW1lc3BhY2UgVHlwZUJ1aWxkZXIg
ewovLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KbmFtZXNwYWNlIENvbnNvbGUgewpjbGFzcyBTdGFj
a1RyYWNlOwp9IC8vIENvbnNvbGUKCm5hbWVzcGFjZSBDU1MgewpjbGFzcyBDU1NSdWxlOwpjbGFz
cyBTb3VyY2VSYW5nZTsKY2xhc3MgQ1NTU3R5bGU7CmNsYXNzIENTU1Byb3BlcnR5OwpjbGFzcyBD
U1NNZWRpYTsKfSAvLyBDU1MKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKbmFtZXNw
YWNlIERlYnVnZ2VyIHsKY2xhc3MgTG9jYXRpb247CmNsYXNzIFNjb3BlOwp9IC8vIERlYnVnZ2Vy
CgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi8vIEVuZCBvZiBmb3J3YXJk
IGRlY2xhcmF0aW9ucy4KCgpTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOwoK
bmFtZXNwYWNlIE1lbW9yeSB7Ci8qIE51bWJlciBvZiBub2RlcyB3aXRoIGdpdmVuIG5hbWUuICov
CmNsYXNzIE5vZGVDb3VudCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBl
bnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBOT0RFX05BTUVfU0VUID0g
MSA8PCAwLAogICAgICAgIENPVU5UX1NFVCA9IDEgPDwgMSwKICAgICAgICBBTExfRklFTERTX1NF
VCA9IChOT0RFX05BTUVfU0VUIHwgQ09VTlRfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQg
U1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWls
ZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Tm9kZUNvdW50PiBwdHIpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWls
ZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0
cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIE5vZGVDb3VudDsKICAgIHB1YmxpYzoK
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5PREVfTkFNRV9TRVQ+JiBzZXROb2RlTmFtZShjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIE5PREVfTkFNRV9TRVQpLCBwcm9wZXJ0eV9ub2RlTmFtZV9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5vZGVOYW1lIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPE5PREVfTkFNRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQ09VTlRfU0VUPiYgc2V0Q291bnQoaW50IHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENPVU5UX1NFVCksIHByb3Bl
cnR5X2NvdW50X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigi
Y291bnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q09VTlRfU0VUPigp
OwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPE5vZGVDb3VudD4mICgpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwg
cmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxSZWZQdHI8Tm9kZUNvdW50Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVy
YXRvciBQYXNzUmVmUHRyPE5vZGVDb3VudD4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVy
biBSZWZQdHI8Tm9kZUNvdW50PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAg
ICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPE5vZGVDb3VudD4gcmVzdWx0
ID0gTm9kZUNvdW50OjpjcmVhdGUoKQogICAgICogICAgIC5zZXROb2RlTmFtZSguLi4pCiAgICAg
KiAgICAgLnNldENvdW50KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxE
U19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NF
VD4oYWRvcHRSZWYobmV3IE5vZGVDb3VudCgpKSk7CiAgICB9Cn07CgovKiBOdW1iZXIgb2YgSlMg
ZXZlbnQgbGlzdGVuZXJzIGJ5IGV2ZW50IHR5cGUuICovCmNsYXNzIExpc3RlbmVyQ291bnQgOiBw
dWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklF
TERTX1NFVCA9IDAsCiAgICAgICAgVFlQRV9TRVQgPSAxIDw8IDAsCiAgICAgICAgQ09VTlRfU0VU
ID0gMSA8PCAxLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFRZUEVfU0VUIHwgQ09VTlRfU0VU
KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAg
IHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAg
ICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgp
CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxT
VEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQ
dHI8TGlzdGVuZXJDb3VudD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0
YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVu
ZCBjbGFzcyBMaXN0ZW5lckNvdW50OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgVFlQRV9TRVQ+JiBzZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90eXBl
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIHZh
bHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUWVBFX1NFVD4oKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDT1VOVF9TRVQ+JiBzZXRDb3VudChpbnQgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ09VTlRfU0VU
KSwgcHJvcGVydHlfY291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
TnVtYmVyKCJjb3VudCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDT1VO
VF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8TGlzdGVuZXJDb3Vu
dD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExf
RklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxSZWZQdHI8TGlzdGVuZXJDb3VudD4qPigmbV9yZXN1bHQpOwogICAgICAg
IH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxMaXN0ZW5lckNvdW50PiAoKQogICAgICAg
IHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxMaXN0ZW5lckNvdW50PigqdGhpcyk7CiAgICAg
ICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICog
UmVmUHRyPExpc3RlbmVyQ291bnQ+IHJlc3VsdCA9IExpc3RlbmVyQ291bnQ6OmNyZWF0ZSgpCiAg
ICAgKiAgICAgLnNldFR5cGUoLi4uKQogICAgICogICAgIC5zZXRDb3VudCguLi4pOwogICAgICov
CiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAg
IHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBMaXN0ZW5lckNvdW50
KCkpKTsKICAgIH0KfTsKCmNsYXNzIERPTUdyb3VwIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7
CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ25vZGVDb3VudCcgd2hp
bGUgZ2VuZXJhdGluZyBET01Hcm91cC4KICAgIGNsYXNzIE5vZGVDb3VudCA6IHB1YmxpYyBJbnNw
ZWN0b3JBcnJheSB7CiAgICBwdWJsaWM6CiAgICAgICAgdm9pZCBhZGRJdGVtKC8qUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6TWVtb3J5OjpOb2RlQ291bnQ+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1
ZSk7CiAgICAgICAgfQogICAgfTsKCiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICds
aXN0ZW5lckNvdW50JyB3aGlsZSBnZW5lcmF0aW5nIERPTUdyb3VwLgogICAgY2xhc3MgTGlzdGVu
ZXJDb3VudCA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7CiAgICBwdWJsaWM6CiAgICAgICAgdm9p
ZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TWVtb3J5OjpMaXN0ZW5lckNvdW50
PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KICAgIH07CgogICAgZW51bSB7
CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgU0laRV9TRVQgPSAxIDw8IDAsCiAg
ICAgICAgVElUTEVfU0VUID0gMSA8PCAxLAogICAgICAgIE5PREVfQ09VTlRfU0VUID0gMSA8PCAy
LAogICAgICAgIExJU1RFTkVSX0NPVU5UX1NFVCA9IDEgPDwgMywKICAgICAgICBBTExfRklFTERT
X1NFVCA9IChTSVpFX1NFVCB8IFRJVExFX1NFVCB8IE5PREVfQ09VTlRfU0VUIHwgTElTVEVORVJf
Q09VTlRfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWls
ZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1
bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
KFBhc3NSZWZQdHI8RE9NR3JvdXA+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBm
cmllbmQgY2xhc3MgRE9NR3JvdXA7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBTSVpFX1NFVD4mIHNldFNpemUoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFNJWkVfU0VUKSwgcHJvcGVydHlfc2l6ZV9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNpemUiLCB2YWx1ZSk7CiAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8U0laRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgVElUTEVfU0VUPiYgc2V0VGl0bGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUSVRMRV9TRVQp
LCBwcm9wZXJ0eV90aXRsZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRT
dHJpbmcoInRpdGxlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRJVExF
X1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOT0RFX0NPVU5UX1NF
VD4mIHNldE5vZGVDb3VudCgvKlBhc3NSZWZQdHI8Tm9kZUNvdW50PiovIFBhc3NSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIE5PREVfQ09VTlRfU0VUKSwgcHJvcGVydHlfbm9kZUNvdW50X2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJub2RlQ291bnQiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tk9ERV9DT1VOVF9TRVQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTElTVEVORVJfQ09VTlRfU0VUPiYgc2V0TGlzdGVuZXJD
b3VudCgvKlBhc3NSZWZQdHI8TGlzdGVuZXJDb3VudD4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFy
cmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBMSVNURU5FUl9DT1VOVF9TRVQpLCBwcm9wZXJ0eV9saXN0ZW5lckNvdW50X2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJsaXN0ZW5lckNvdW50IiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPExJU1RFTkVSX0NPVU5UX1NFVD4oKTsKICAg
ICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxET01Hcm91cD4mICgpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0
X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQ
dHI8RE9NR3JvdXA+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBh
c3NSZWZQdHI8RE9NR3JvdXA+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRy
PERPTUdyb3VwPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhl
dGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPERPTUdyb3VwPiByZXN1bHQgPSBET01Hcm91
cDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U2l6ZSguLi4pCiAgICAgKiAgICAgLnNldFRpdGxl
KC4uLikKICAgICAqICAgICAuc2V0Tm9kZUNvdW50KC4uLikKICAgICAqICAgICAuc2V0TGlzdGVu
ZXJDb3VudCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBj
cmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0
UmVmKG5ldyBET01Hcm91cCgpKSk7CiAgICB9CgogICAgdm9pZCBzZXREb2N1bWVudFVSSShjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygiZG9jdW1lbnRV
UkkiLCB2YWx1ZSk7CiAgICB9Cn07Cgp9IC8vIE1lbW9yeQoKbmFtZXNwYWNlIFBhZ2UgewovKiBS
ZXNvdXJjZSB0eXBlIGFzIGl0IHdhcyBwZXJjZWl2ZWQgYnkgdGhlIHJlbmRlcmluZyBlbmdpbmUu
ICovCnN0cnVjdCBSZXNvdXJjZVR5cGUgewogICAgZW51bSBFbnVtIHsKICAgICAgICBEb2N1bWVu
dCA9IDAsCiAgICAgICAgU3R5bGVzaGVldCA9IDEsCiAgICAgICAgSW1hZ2UgPSAyLAogICAgICAg
IEZvbnQgPSAzLAogICAgICAgIFNjcmlwdCA9IDQsCiAgICAgICAgWEhSID0gNSwKICAgICAgICBX
ZWJTb2NrZXQgPSA2LAogICAgICAgIE90aGVyID0gNywKICAgIH07Cn07IC8vIHN0cnVjdCBSZXNv
dXJjZVR5cGUKCi8qIEluZm9ybWF0aW9uIGFib3V0IHRoZSBGcmFtZSBvbiB0aGUgcGFnZS4gKi8K
Y2xhc3MgRnJhbWUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7
CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgSURfU0VUID0gMSA8PCAwLAogICAg
ICAgIExPQURFUl9JRF9TRVQgPSAxIDw8IDEsCiAgICAgICAgVVJMX1NFVCA9IDEgPDwgMiwKICAg
ICAgICBNSU1FX1RZUEVfU0VUID0gMSA8PCAzLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKElE
X1NFVCB8IExPQURFUl9JRF9TRVQgfCBVUkxfU0VUIHwgTUlNRV9UWVBFX1NFVCkKICAgIH07Cgog
ICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgog
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0
ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
Pio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEZyYW1lPiBw
dHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVM
RFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBt
X3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEZyYW1lOwogICAg
cHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSURfU0VUPiYgc2V0SWQoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBJRF9TRVQpLCBwcm9wZXJ0eV9pZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoImlkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElE
X1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBMT0FERVJfSURfU0VU
PiYgc2V0TG9hZGVySWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBMT0FERVJfSURfU0VUKSwgcHJvcGVydHlfbG9hZGVy
SWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJsb2FkZXJJ
ZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxMT0FERVJfSURfU0VUPigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVSTF9TRVQ+JiBzZXRVcmwoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBVUkxfU0VUKSwgcHJvcGVydHlfdXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygidXJsIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFVSTF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTUlN
RV9UWVBFX1NFVD4mIHNldE1pbWVUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTUlNRV9UWVBFX1NFVCksIHByb3Bl
cnR5X21pbWVUeXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
ZygibWltZVR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TUlNRV9U
WVBFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxGcmFtZT4mICgp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERT
X1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxSZWZQdHI8RnJhbWU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9w
ZXJhdG9yIFBhc3NSZWZQdHI8RnJhbWU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
UmVmUHRyPEZyYW1lPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3lu
dGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEZyYW1lPiByZXN1bHQgPSBGcmFtZTo6
Y3JlYXRlKCkKICAgICAqICAgICAuc2V0SWQoLi4uKQogICAgICogICAgIC5zZXRMb2FkZXJJZCgu
Li4pCiAgICAgKiAgICAgLnNldFVybCguLi4pCiAgICAgKiAgICAgLnNldE1pbWVUeXBlKC4uLik7
CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7
CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IEZyYW1l
KCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFBhcmVudElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJwYXJlbnRJZCIsIHZhbHVlKTsKICAgIH0KCiAg
ICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBJbmZvcm1hdGlvbiBhYm91dCB0
aGUgRnJhbWUgaGllcmFyY2h5IGFsb25nIHdpdGggdGhlaXIgY2FjaGVkIHJlc291cmNlcy4gKi8K
Y2xhc3MgRnJhbWVSZXNvdXJjZVRyZWUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGlj
OgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAncmVzb3VyY2VzJyB3aGlsZSBnZW5l
cmF0aW5nIEZyYW1lUmVzb3VyY2VUcmVlLgogICAgY2xhc3MgUmVzb3VyY2VzIDogcHVibGljIElu
c3BlY3RvckFycmF5IHsKICAgIHB1YmxpYzoKICAgICAgICBjbGFzcyBJdGVtIDogcHVibGljIElu
c3BlY3Rvck9iamVjdCB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICBlbnVtIHsKICAgICAg
ICAgICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgICAgICAgICAgVVJMX1NFVCA9IDEg
PDwgMCwKICAgICAgICAgICAgICAgIFRZUEVfU0VUID0gMSA8PCAxLAogICAgICAgICAgICAgICAg
TUlNRV9UWVBFX1NFVCA9IDEgPDwgMiwKICAgICAgICAgICAgICAgIEFMTF9GSUVMRFNfU0VUID0g
KFVSTF9TRVQgfCBUWVBFX1NFVCB8IE1JTUVfVFlQRV9TRVQpCiAgICAgICAgICAgIH07CgogICAg
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICAgICAgICAgIGNsYXNzIEJ1aWxkZXIgewog
ICAgICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbV9yZXN1bHQ7CgogICAgICAgICAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4o
dGhpcyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgQnVpbGRlcihQYXNzUmVm
UHRyPEl0ZW0+IHB0cikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9u
X2luaXRfc3RhdGUpOwogICAgICAgICAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIEl0ZW07CiAgICAgICAgICAg
IHB1YmxpYzoKICAgICAgICAKICAgICAgICAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBVUkxfU0VU
PiYgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVSTF9TRVQpLCBwcm9wZXJ0eV91
cmxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
InVybCIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVSTF9T
RVQ+KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgCiAgICAgICAgICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgVFlQRV9TRVQ+JiBzZXRUeXBlKFR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5
cGU6OkVudW0gdmFsdWUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFRZUEVfU0VUKSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIGdldEVu
dW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxUWVBFX1NFVD4oKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAKICAgICAgICAgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBUWVBFX1NFVD4mIHNldFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VFlQRV9TRVQ+KCk7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgCiAgICAgICAgICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTUlNRV9UWVBFX1NFVD4m
IHNldE1pbWVUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1JTUVfVFlQRV9TRVQpLCBw
cm9wZXJ0eV9taW1lVHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygibWltZVR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxNSU1FX1RZUEVfU0VUPigpOwogICAgICAgICAgICAgICAgfQogICAgICAg
IAogICAgICAgICAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEl0ZW0+JiAoKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVM
RFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEl0ZW0+Kj4oJm1fcmVzdWx0KTsKICAgICAgICAgICAg
ICAgIH0KCiAgICAgICAgICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEl0ZW0+ICgpCiAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxJdGVtPigqdGhp
cyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CgogICAgICAgICAgICAvKgogICAg
ICAgICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgICAgICAgICAqIFJlZlB0cjxJ
dGVtPiByZXN1bHQgPSBJdGVtOjpjcmVhdGUoKQogICAgICAgICAgICAgKiAgICAgLnNldFVybCgu
Li4pCiAgICAgICAgICAgICAqICAgICAuc2V0VHlwZSguLi4pCiAgICAgICAgICAgICAqICAgICAu
c2V0TWltZVR5cGUoLi4uKTsKICAgICAgICAgICAgICovCiAgICAgICAgICAgIHN0YXRpYyBCdWls
ZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
IHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBJdGVtKCkpKTsKICAg
ICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8
SXRlbT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8v
IE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2NoaWxkRnJhbWVzJyB3aGlsZSBnZW5lcmF0aW5n
IEZyYW1lUmVzb3VyY2VUcmVlLgogICAgY2xhc3MgQ2hpbGRGcmFtZXMgOiBwdWJsaWMgSW5zcGVj
dG9yQXJyYXkgewogICAgcHVibGljOgogICAgICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPiovIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3Qo
dmFsdWUpOwogICAgICAgIH0KICAgIH07CgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NF
VCA9IDAsCiAgICAgICAgRlJBTUVfU0VUID0gMSA8PCAwLAogICAgICAgIFJFU09VUkNFU19TRVQg
PSAxIDw8IDEsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoRlJBTUVfU0VUIHwgUkVTT1VSQ0VT
X1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7
CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoK
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3Rh
dGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNz
UmVmUHRyPEZyYW1lUmVzb3VyY2VUcmVlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9u
X2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAg
ICAgZnJpZW5kIGNsYXNzIEZyYW1lUmVzb3VyY2VUcmVlOwogICAgcHVibGljOgoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgRlJBTUVfU0VUPiYgc2V0RnJhbWUoLypQYXNzUmVmUHRyPFR5cGVCdWls
ZGVyOjpQYWdlOjpGcmFtZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRlJBTUVfU0VUKSwg
cHJvcGVydHlfZnJhbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2Jq
ZWN0KCJmcmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxGUkFNRV9T
RVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUkVTT1VSQ0VTX1NFVD4m
IHNldFJlc291cmNlcygvKlBhc3NSZWZQdHI8UmVzb3VyY2VzPiovIFBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFJFU09VUkNFU19TRVQpLCBwcm9wZXJ0eV9yZXNvdXJjZXNfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoInJlc291cmNlcyIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxSRVNPVVJDRVNfU0VUPigpOwogICAgICAgIH0KCiAgICAg
ICAgb3BlcmF0b3IgUmVmUHRyPEZyYW1lUmVzb3VyY2VUcmVlPiYgKCkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNf
bm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxG
cmFtZVJlc291cmNlVHJlZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0
b3IgUGFzc1JlZlB0cjxGcmFtZVJlc291cmNlVHJlZT4gKCkKICAgICAgICB7CiAgICAgICAgICAg
IHJldHVybiBSZWZQdHI8RnJhbWVSZXNvdXJjZVRyZWU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9
OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8RnJh
bWVSZXNvdXJjZVRyZWU+IHJlc3VsdCA9IEZyYW1lUmVzb3VyY2VUcmVlOjpjcmVhdGUoKQogICAg
ICogICAgIC5zZXRGcmFtZSguLi4pCiAgICAgKiAgICAgLnNldFJlc291cmNlcyguLi4pOwogICAg
ICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAg
ICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBGcmFtZVJlc291
cmNlVHJlZSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRDaGlsZEZyYW1lcygvKlBhc3NSZWZQdHI8
Q2hpbGRGcmFtZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICB7CiAg
ICAgICAgdGhpcy0+c2V0QXJyYXkoImNoaWxkRnJhbWVzIiwgdmFsdWUpOwogICAgfQp9OwoKLyog
U2VhcmNoIG1hdGNoIGZvciByZXNvdXJjZS4gKi8KY2xhc3MgU2VhcmNoTWF0Y2ggOiBwdWJsaWMg
SW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NF
VCA9IDAsCiAgICAgICAgTElORV9OVU1CRVJfU0VUID0gMSA8PCAwLAogICAgICAgIExJTkVfQ09O
VEVOVF9TRVQgPSAxIDw8IDEsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoTElORV9OVU1CRVJf
U0VUIHwgTElORV9DT05URU5UX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgog
ICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFU
RSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFNlYXJjaE1hdGNoPiBwdHIpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2Ny
ZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAg
ICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFNlYXJjaE1hdGNoOwogICAgcHVibGljOgoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgTElORV9OVU1CRVJfU0VUPiYgc2V0TGluZU51bWJlcihkb3Vi
bGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
TElORV9OVU1CRVJfU0VUKSwgcHJvcGVydHlfbGluZU51bWJlcl9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImxpbmVOdW1iZXIiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8TElORV9OVU1CRVJfU0VUPigpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IExJTkVfQ09OVEVOVF9TRVQ+JiBzZXRMaW5lQ29udGVudChjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIExJTkVfQ09OVEVOVF9TRVQpLCBwcm9wZXJ0eV9saW5lQ29udGVudF9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImxpbmVDb250ZW50IiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPExJTkVfQ09OVEVOVF9TRVQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8U2VhcmNoTWF0Y2g+JiAoKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3Vs
dF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVm
UHRyPFNlYXJjaE1hdGNoPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRv
ciBQYXNzUmVmUHRyPFNlYXJjaE1hdGNoPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJu
IFJlZlB0cjxTZWFyY2hNYXRjaD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAg
ICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxTZWFyY2hNYXRjaD4gcmVz
dWx0ID0gU2VhcmNoTWF0Y2g6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldExpbmVOdW1iZXIoLi4u
KQogICAgICogICAgIC5zZXRMaW5lQ29udGVudCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVp
bGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVy
PE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBTZWFyY2hNYXRjaCgpKSk7CiAgICB9Cn07Cgov
KiBTZWFyY2ggcmVzdWx0IGZvciByZXNvdXJjZS4gKi8KY2xhc3MgU2VhcmNoUmVzdWx0IDogcHVi
bGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxE
U19TRVQgPSAwLAogICAgICAgIFVSTF9TRVQgPSAxIDw8IDAsCiAgICAgICAgRlJBTUVfSURfU0VU
ID0gMSA8PCAxLAogICAgICAgIE1BVENIRVNfQ09VTlRfU0VUID0gMSA8PCAyLAogICAgICAgIEFM
TF9GSUVMRFNfU0VUID0gKFVSTF9TRVQgfCBGUkFNRV9JRF9TRVQgfCBNQVRDSEVTX0NPVU5UX1NF
VCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAg
ICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVm
UHRyPFNlYXJjaFJlc3VsdD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0
YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVu
ZCBjbGFzcyBTZWFyY2hSZXN1bHQ7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBVUkxfU0VUPiYgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVVJMX1NFVCksIHByb3BlcnR5X3VybF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVUkxfU0VUPigpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IEZSQU1FX0lEX1NFVD4mIHNldEZyYW1lSWQoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBG
UkFNRV9JRF9TRVQpLCBwcm9wZXJ0eV9mcmFtZUlkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygiZnJhbWVJZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxGUkFNRV9JRF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgTUFUQ0hFU19DT1VOVF9TRVQ+JiBzZXRNYXRjaGVzQ291bnQoZG91YmxlIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1BVENIRVNfQ09V
TlRfU0VUKSwgcHJvcGVydHlfbWF0Y2hlc0NvdW50X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE51bWJlcigibWF0Y2hlc0NvdW50IiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPE1BVENIRVNfQ09VTlRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUmVmUHRyPFNlYXJjaFJlc3VsdD4mICgpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFk
eSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8U2VhcmNoUmVz
dWx0Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRy
PFNlYXJjaFJlc3VsdD4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8U2Vh
cmNoUmVzdWx0PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhl
dGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFNlYXJjaFJlc3VsdD4gcmVzdWx0ID0gU2Vh
cmNoUmVzdWx0OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICogICAgIC5z
ZXRGcmFtZUlkKC4uLikKICAgICAqICAgICAuc2V0TWF0Y2hlc0NvdW50KC4uLik7CiAgICAgKi8K
ICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAg
cmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IFNlYXJjaFJlc3VsdCgp
KSk7CiAgICB9Cn07CgovKiBDb29raWUgb2JqZWN0ICovCmNsYXNzIENvb2tpZSA6IHB1YmxpYyBJ
bnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VU
ID0gMCwKICAgICAgICBOQU1FX1NFVCA9IDEgPDwgMCwKICAgICAgICBWQUxVRV9TRVQgPSAxIDw8
IDEsCiAgICAgICAgRE9NQUlOX1NFVCA9IDEgPDwgMiwKICAgICAgICBQQVRIX1NFVCA9IDEgPDwg
MywKICAgICAgICBFWFBJUkVTX1NFVCA9IDEgPDwgNCwKICAgICAgICBTSVpFX1NFVCA9IDEgPDwg
NSwKICAgICAgICBIVFRQX09OTFlfU0VUID0gMSA8PCA2LAogICAgICAgIFNFQ1VSRV9TRVQgPSAx
IDw8IDcsCiAgICAgICAgU0VTU0lPTl9TRVQgPSAxIDw8IDgsCiAgICAgICAgQUxMX0ZJRUxEU19T
RVQgPSAoTkFNRV9TRVQgfCBWQUxVRV9TRVQgfCBET01BSU5fU0VUIHwgUEFUSF9TRVQgfCBFWFBJ
UkVTX1NFVCB8IFNJWkVfU0VUIHwgSFRUUF9PTkxZX1NFVCB8IFNFQ1VSRV9TRVQgfCBTRVNTSU9O
X1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7
CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoK
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3Rh
dGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNz
UmVmUHRyPENvb2tpZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRl
KTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBj
bGFzcyBDb29raWU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOQU1FX1NF
VD4mIHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOQU1FX1NFVCksIHByb3BlcnR5X25hbWVfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJuYW1lIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5BTUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFZBTFVFX1NFVD4mIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVkFMVUVfU0VU
KSwgcHJvcGVydHlfdmFsdWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJ2YWx1ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWQUxV
RV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRE9NQUlOX1NFVD4m
IHNldERvbWFpbihjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIERPTUFJTl9TRVQpLCBwcm9wZXJ0eV9kb21haW5fYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJkb21haW4iLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RE9NQUlOX1NFVD4oKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQQVRIX1NFVD4mIHNldFBhdGgoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQQVRI
X1NFVCksIHByb3BlcnR5X3BhdGhfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJwYXRoIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFBB
VEhfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVYUElSRVNfU0VU
PiYgc2V0RXhwaXJlcyhpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgRVhQSVJFU19TRVQpLCBwcm9wZXJ0eV9leHBpcmVzX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiZXhwaXJlcyIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFWFBJUkVTX1NFVD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBTSVpFX1NFVD4mIHNldFNpemUoaW50IHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNJWkVfU0VUKSwgcHJvcGVy
dHlfc2l6ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNp
emUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U0laRV9TRVQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSFRUUF9PTkxZX1NFVD4mIHNldEh0dHBP
bmx5KGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgSFRUUF9PTkxZX1NFVCksIHByb3BlcnR5X2h0dHBPbmx5X2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImh0dHBPbmx5IiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPEhUVFBfT05MWV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgU0VDVVJFX1NFVD4mIHNldFNlY3VyZShib29sIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNFQ1VSRV9TRVQpLCBw
cm9wZXJ0eV9zZWN1cmVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9v
bGVhbigic2VjdXJlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNFQ1VS
RV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU0VTU0lPTl9TRVQ+
JiBzZXRTZXNzaW9uKGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgU0VTU0lPTl9TRVQpLCBwcm9wZXJ0eV9zZXNzaW9uX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oInNlc3Npb24iLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U0VTU0lPTl9TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBSZWZQdHI8Q29va2llPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5
KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDb29raWU+Kj4o
Jm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q29va2ll
PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDb29raWU+KCp0aGlzKTsK
ICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAg
ICAgKiBSZWZQdHI8Q29va2llPiByZXN1bHQgPSBDb29raWU6OmNyZWF0ZSgpCiAgICAgKiAgICAg
LnNldE5hbWUoLi4uKQogICAgICogICAgIC5zZXRWYWx1ZSguLi4pCiAgICAgKiAgICAgLnNldERv
bWFpbiguLi4pCiAgICAgKiAgICAgLnNldFBhdGgoLi4uKQogICAgICogICAgIC5zZXRFeHBpcmVz
KC4uLikKICAgICAqICAgICAuc2V0U2l6ZSguLi4pCiAgICAgKiAgICAgLnNldEh0dHBPbmx5KC4u
LikKICAgICAqICAgICAuc2V0U2VjdXJlKC4uLikKICAgICAqICAgICAuc2V0U2Vzc2lvbiguLi4p
OwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAg
ewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBDb29r
aWUoKSkpOwogICAgfQp9OwoKLyogVW5pcXVlIHNjcmlwdCBpZGVudGlmaWVyLiAqLwp0eXBlZGVm
IFN0cmluZyBTY3JpcHRJZGVudGlmaWVyOwoKfSAvLyBQYWdlCgpuYW1lc3BhY2UgUnVudGltZSB7
Ci8qIFVuaXF1ZSBvYmplY3QgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJpbmcgUmVtb3RlT2Jq
ZWN0SWQ7CgovKiBNaXJyb3Igb2JqZWN0IHJlZmVyZW5jaW5nIG9yaWdpbmFsIEphdmFTY3JpcHQg
b2JqZWN0LiAqLwpjbGFzcyBSZW1vdGVPYmplY3QgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsK
cHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAndHlwZScgd2hpbGUgZ2Vu
ZXJhdGluZyBSZW1vdGVPYmplY3QuCiAgICBzdHJ1Y3QgVHlwZSB7CiAgICAgICAgZW51bSBFbnVt
IHsKICAgICAgICAgICAgT2JqZWN0ID0gOCwKICAgICAgICAgICAgRnVuY3Rpb24gPSA5LAogICAg
ICAgICAgICBVbmRlZmluZWQgPSAxMCwKICAgICAgICAgICAgU3RyaW5nID0gMTEsCiAgICAgICAg
ICAgIE51bWJlciA9IDEyLAogICAgICAgICAgICBCb29sZWFuID0gMTMsCiAgICAgICAgfTsKICAg
IH07IC8vIHN0cnVjdCBUeXBlCgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnc3Vi
dHlwZScgd2hpbGUgZ2VuZXJhdGluZyBSZW1vdGVPYmplY3QuCiAgICBzdHJ1Y3QgU3VidHlwZSB7
CiAgICAgICAgZW51bSBFbnVtIHsKICAgICAgICAgICAgQXJyYXkgPSAxNCwKICAgICAgICAgICAg
TnVsbCA9IDE1LAogICAgICAgICAgICBOb2RlID0gMTYsCiAgICAgICAgICAgIFJlZ2V4cCA9IDE3
LAogICAgICAgICAgICBEYXRlID0gMTgsCiAgICAgICAgfTsKICAgIH07IC8vIHN0cnVjdCBTdWJ0
eXBlCgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgVFlQRV9T
RVQgPSAxIDw8IDAsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoVFlQRV9TRVQpCiAgICB9OwoK
ICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToK
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxh
dGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxSZW1vdGVP
YmplY3Q+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAg
ICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgUmVt
b3RlT2JqZWN0OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVFlQRV9TRVQ+
JiBzZXRUeXBlKFR5cGU6OkVudW0gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIGdldEVudW1Db25zdGFudFZh
bHVlKHZhbHVlKSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VFlQRV9TRVQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVFlQRV9TRVQ+JiBzZXRUeXBlKGNvbnN0
IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxUWVBFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxS
ZW1vdGVPYmplY3Q+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFJlbW90ZU9iamVjdD4qPigmbV9yZXN1bHQp
OwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxSZW1vdGVPYmplY3Q+ICgp
CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFJlbW90ZU9iamVjdD4oKnRoaXMp
OwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
ICAgICAqIFJlZlB0cjxSZW1vdGVPYmplY3Q+IHJlc3VsdCA9IFJlbW90ZU9iamVjdDo6Y3JlYXRl
KCkKICAgICAqICAgICAuc2V0VHlwZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxO
T19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJ
RUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBSZW1vdGVPYmplY3QoKSkpOwogICAgfQoKICAgIHZvaWQg
c2V0U3VidHlwZShTdWJ0eXBlOjpFbnVtIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0
cmluZygic3VidHlwZSIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICB9CgogICAg
dm9pZCBzZXRTdWJ0eXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+
c2V0U3RyaW5nKCJzdWJ0eXBlIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0Q2xhc3NOYW1l
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJjbGFz
c05hbWUiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRWYWx1ZShQYXNzUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRWYWx1ZSgidmFsdWUiLCB2
YWx1ZSk7CiAgICB9CiAgICB1c2luZyBJbnNwZWN0b3JPYmplY3Q6OnNldFZhbHVlOwoKCiAgICB2
b2lkIHNldERlc2NyaXB0aW9uKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhp
cy0+c2V0U3RyaW5nKCJkZXNjcmlwdGlvbiIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldE9i
amVjdElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5n
KCJvYmplY3RJZCIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIE9iamVjdCBwcm9wZXJ0eSBkZXNjcmlw
dG9yLiAqLwpjbGFzcyBQcm9wZXJ0eURlc2NyaXB0b3IgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0
IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAg
TkFNRV9TRVQgPSAxIDw8IDAsCiAgICAgICAgV1JJVEFCTEVfU0VUID0gMSA8PCAxLAogICAgICAg
IENPTkZJR1VSQUJMRV9TRVQgPSAxIDw8IDIsCiAgICAgICAgRU5VTUVSQUJMRV9TRVQgPSAxIDw8
IDMsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoTkFNRV9TRVQgfCBXUklUQUJMRV9TRVQgfCBD
T05GSUdVUkFCTEVfU0VUIHwgRU5VTUVSQUJMRV9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGlu
dCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxQcm9wZXJ0eURlc2NyaXB0b3I+IHB0
cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxE
U19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1f
cmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgUHJvcGVydHlEZXNj
cmlwdG9yOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTkFNRV9TRVQ+JiBz
ZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgTkFNRV9TRVQpLCBwcm9wZXJ0eV9uYW1lX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibmFtZSIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxOQU1FX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBXUklUQUJMRV9TRVQ+JiBzZXRXcml0YWJsZShib29sIHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFdSSVRBQkxFX1NFVCksIHBy
b3BlcnR5X3dyaXRhYmxlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJv
b2xlYW4oIndyaXRhYmxlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFdS
SVRBQkxFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDT05GSUdV
UkFCTEVfU0VUPiYgc2V0Q29uZmlndXJhYmxlKGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ09ORklHVVJBQkxFX1NFVCksIHByb3BlcnR5
X2NvbmZpZ3VyYWJsZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29s
ZWFuKCJjb25maWd1cmFibGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
Q09ORklHVVJBQkxFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBF
TlVNRVJBQkxFX1NFVD4mIHNldEVudW1lcmFibGUoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBFTlVNRVJBQkxFX1NFVCksIHByb3BlcnR5
X2VudW1lcmFibGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVh
bigiZW51bWVyYWJsZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFTlVN
RVJBQkxFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxQcm9wZXJ0
eURlc2NyaXB0b3I+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFByb3BlcnR5RGVzY3JpcHRvcj4qPigmbV9y
ZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxQcm9wZXJ0eURl
c2NyaXB0b3I+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFByb3BlcnR5
RGVzY3JpcHRvcj4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRo
ZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxQcm9wZXJ0eURlc2NyaXB0b3I+IHJlc3Vs
dCA9IFByb3BlcnR5RGVzY3JpcHRvcjo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0TmFtZSguLi4p
CiAgICAgKiAgICAgLnNldFdyaXRhYmxlKC4uLikKICAgICAqICAgICAuc2V0Q29uZmlndXJhYmxl
KC4uLikKICAgICAqICAgICAuc2V0RW51bWVyYWJsZSguLi4pOwogICAgICovCiAgICBzdGF0aWMg
QnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWls
ZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBQcm9wZXJ0eURlc2NyaXB0b3IoKSkpOwog
ICAgfQoKICAgIHZvaWQgc2V0VmFsdWUoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAg
ewogICAgICAgIHRoaXMtPnNldE9iamVjdCgidmFsdWUiLCB2YWx1ZSk7CiAgICB9CiAgICB1c2lu
ZyBJbnNwZWN0b3JPYmplY3Q6OnNldFZhbHVlOwoKCiAgICB2b2lkIHNldEdldCgvKlBhc3NSZWZQ
dHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4qLyBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJnZXQiLCB2
YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRTZXQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVl
KQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgic2V0IiwgdmFsdWUpOwogICAgfQoKICAg
IHZvaWQgc2V0V2FzVGhyb3duKGJvb2wgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0Qm9v
bGVhbigid2FzVGhyb3duIiwgdmFsdWUpOwogICAgfQp9OwoKLyogUmVwcmVzZW50cyBmdW5jdGlv
biBjYWxsIGFyZ3VtZW50LiBFaXRoZXIgcmVtb3RlIG9iamVjdCBpZCA8Y29kZT5vYmplY3RJZDwv
Y29kZT4gb3IgcHJpbWl0aXZlIDxjb2RlPnZhbHVlPC9jb2RlPiBvciBuZWl0aGVyIG9mIChmb3Ig
dW5kZWZpbmVkKSB0aGVtIHNob3VsZCBiZSBzcGVjaWZpZWQuICovCmNsYXNzIENhbGxBcmd1bWVu
dCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBO
T19GSUVMRFNfU0VUID0gMCwKICAgICAgICBBTExfRklFTERTX1NFVCA9IDAKICAgIH07CgogICAg
dGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxp
bnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAg
ICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+
KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENhbGxBcmd1bWVu
dD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9f
RklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAg
ICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDYWxsQXJn
dW1lbnQ7CiAgICBwdWJsaWM6CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDYWxsQXJndW1lbnQ+
JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJ
RUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8UmVmUHRyPENhbGxBcmd1bWVudD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0K
CiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDYWxsQXJndW1lbnQ+ICgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gUmVmUHRyPENhbGxBcmd1bWVudD4oKnRoaXMpOwogICAgICAgIH0K
ICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0
cjxDYWxsQXJndW1lbnQ+IHJlc3VsdCA9IENhbGxBcmd1bWVudDo6Y3JlYXRlKCk7CiAgICAgKi8K
ICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAg
cmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IENhbGxBcmd1bWVudCgp
KSk7CiAgICB9CgogICAgdm9pZCBzZXRWYWx1ZShQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2
YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRWYWx1ZSgidmFsdWUiLCB2YWx1ZSk7CiAgICB9
CiAgICB1c2luZyBJbnNwZWN0b3JPYmplY3Q6OnNldFZhbHVlOwoKCiAgICB2b2lkIHNldE9iamVj
dElkKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRP
YmplY3QoIm9iamVjdElkIiwgdmFsdWUpOwogICAgfQp9OwoKfSAvLyBSdW50aW1lCgpuYW1lc3Bh
Y2UgQ29uc29sZSB7Ci8qIENvbnNvbGUgbWVzc2FnZS4gKi8KY2xhc3MgQ29uc29sZU1lc3NhZ2Ug
OiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJv
cGVydHkgbmFtZSAnc291cmNlJyB3aGlsZSBnZW5lcmF0aW5nIENvbnNvbGVNZXNzYWdlLgogICAg
c3RydWN0IFNvdXJjZSB7CiAgICAgICAgZW51bSBFbnVtIHsKICAgICAgICAgICAgSHRtbCA9IDE5
LAogICAgICAgICAgICBXbWwgPSAyMCwKICAgICAgICAgICAgWG1sID0gMjEsCiAgICAgICAgICAg
IEphdmFzY3JpcHQgPSAyMiwKICAgICAgICAgICAgTmV0d29yayA9IDIzLAogICAgICAgICAgICBD
b25zb2xlX2FwaSA9IDI0LAogICAgICAgICAgICBPdGhlciA9IDI1LAogICAgICAgIH07CiAgICB9
OyAvLyBzdHJ1Y3QgU291cmNlCgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnbGV2
ZWwnIHdoaWxlIGdlbmVyYXRpbmcgQ29uc29sZU1lc3NhZ2UuCiAgICBzdHJ1Y3QgTGV2ZWwgewog
ICAgICAgIGVudW0gRW51bSB7CiAgICAgICAgICAgIFRpcCA9IDI2LAogICAgICAgICAgICBMb2cg
PSAyNywKICAgICAgICAgICAgV2FybmluZyA9IDI4LAogICAgICAgICAgICBFcnJvciA9IDI5LAog
ICAgICAgICAgICBEZWJ1ZyA9IDMwLAogICAgICAgIH07CiAgICB9OyAvLyBzdHJ1Y3QgTGV2ZWwK
CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5n
IENvbnNvbGVNZXNzYWdlLgogICAgc3RydWN0IFR5cGUgewogICAgICAgIGVudW0gRW51bSB7CiAg
ICAgICAgICAgIExvZyA9IDI3LAogICAgICAgICAgICBEaXIgPSAzMSwKICAgICAgICAgICAgRGly
eG1sID0gMzIsCiAgICAgICAgICAgIFRyYWNlID0gMzMsCiAgICAgICAgICAgIFN0YXJ0R3JvdXAg
PSAzNCwKICAgICAgICAgICAgU3RhcnRHcm91cENvbGxhcHNlZCA9IDM1LAogICAgICAgICAgICBF
bmRHcm91cCA9IDM2LAogICAgICAgICAgICBBc3NlcnQgPSAzNywKICAgICAgICB9OwogICAgfTsg
Ly8gc3RydWN0IFR5cGUKCiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdwYXJhbWV0
ZXJzJyB3aGlsZSBnZW5lcmF0aW5nIENvbnNvbGVNZXNzYWdlLgogICAgY2xhc3MgUGFyYW1ldGVy
cyA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7CiAgICBwdWJsaWM6CiAgICAgICAgdm9pZCBhZGRJ
dGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRo
aXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KICAgIH07CgogICAgZW51bSB7CiAgICAg
ICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgU09VUkNFX1NFVCA9IDEgPDwgMCwKICAgICAg
ICBMRVZFTF9TRVQgPSAxIDw8IDEsCiAgICAgICAgVEVYVF9TRVQgPSAxIDw8IDIsCiAgICAgICAg
QUxMX0ZJRUxEU19TRVQgPSAoU09VUkNFX1NFVCB8IExFVkVMX1NFVCB8IFRFWFRfU0VUKQogICAg
fTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZh
dGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRl
bXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAg
ICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8
IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q29u
c29sZU1lc3NhZ2U+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7
CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xh
c3MgQ29uc29sZU1lc3NhZ2U7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBT
T1VSQ0VfU0VUPiYgc2V0U291cmNlKFNvdXJjZTo6RW51bSB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTT1VSQ0VfU0VUKSwgcHJvcGVydHlfc291
cmNlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic291cmNl
IiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxTT1VSQ0VfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNP
VVJDRV9TRVQ+JiBzZXRTb3VyY2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTT1VSQ0VfU0VUKSwgcHJvcGVydHlfc291
cmNlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic291cmNl
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNPVVJDRV9TRVQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTEVWRUxfU0VUPiYgc2V0TGV2ZWwoTGV2
ZWw6OkVudW0gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgTEVWRUxfU0VUKSwgcHJvcGVydHlfbGV2ZWxfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJsZXZlbCIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVl
KSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TEVWRUxfU0VUPigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExFVkVMX1NFVD4mIHNldExldmVsKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
TEVWRUxfU0VUKSwgcHJvcGVydHlfbGV2ZWxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKCJsZXZlbCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxMRVZFTF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVEVY
VF9TRVQ+JiBzZXRUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVEVYVF9TRVQpLCBwcm9wZXJ0eV90ZXh0X2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidGV4dCIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxURVhUX1NFVD4oKTsKICAgICAgICB9CgogICAg
ICAgIG9wZXJhdG9yIFJlZlB0cjxDb25zb2xlTWVzc2FnZT4mICgpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25v
dF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q29u
c29sZU1lc3NhZ2U+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBh
c3NSZWZQdHI8Q29uc29sZU1lc3NhZ2U+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
UmVmUHRyPENvbnNvbGVNZXNzYWdlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgog
ICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENvbnNvbGVNZXNzYWdl
PiByZXN1bHQgPSBDb25zb2xlTWVzc2FnZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U291cmNl
KC4uLikKICAgICAqICAgICAuc2V0TGV2ZWwoLi4uKQogICAgICogICAgIC5zZXRUZXh0KC4uLik7
CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7
CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IENvbnNv
bGVNZXNzYWdlKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFR5cGUoVHlwZTo6RW51bSB2YWx1ZSkK
ICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInR5cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1
ZSh2YWx1ZSkpOwogICAgfQoKICAgIHZvaWQgc2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2
b2lkIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0
cmluZygidXJsIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0TGluZShpbnQgdmFsdWUpCiAg
ICB7CiAgICAgICAgdGhpcy0+c2V0TnVtYmVyKCJsaW5lIiwgdmFsdWUpOwogICAgfQoKICAgIHZv
aWQgc2V0UmVwZWF0Q291bnQoaW50IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE51bWJl
cigicmVwZWF0Q291bnQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRQYXJhbWV0ZXJzKC8q
UGFzc1JlZlB0cjxQYXJhbWV0ZXJzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVl
KQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJwYXJhbWV0ZXJzIiwgdmFsdWUpOwogICAg
fQoKICAgIHZvaWQgc2V0U3RhY2tUcmFjZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNvbnNv
bGU6OlN0YWNrVHJhY2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0QXJyYXkoInN0YWNrVHJhY2UiLCB2YWx1ZSk7CiAgICB9CgogICAg
dm9pZCBzZXROZXR3b3JrUmVxdWVzdElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAg
ICAgdGhpcy0+c2V0U3RyaW5nKCJuZXR3b3JrUmVxdWVzdElkIiwgdmFsdWUpOwogICAgfQp9OwoK
LyogU3RhY2sgZW50cnkgZm9yIGNvbnNvbGUgZXJyb3JzIGFuZCBhc3NlcnRpb25zLiAqLwpjbGFz
cyBDYWxsRnJhbWUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7
CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgRlVOQ1RJT05fTkFNRV9TRVQgPSAx
IDw8IDAsCiAgICAgICAgVVJMX1NFVCA9IDEgPDwgMSwKICAgICAgICBMSU5FX05VTUJFUl9TRVQg
PSAxIDw8IDIsCiAgICAgICAgQ09MVU1OX05VTUJFUl9TRVQgPSAxIDw8IDMsCiAgICAgICAgQUxM
X0ZJRUxEU19TRVQgPSAoRlVOQ1RJT05fTkFNRV9TRVQgfCBVUkxfU0VUIHwgTElORV9OVU1CRVJf
U0VUIHwgQ09MVU1OX05VTUJFUl9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4K
ICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDYWxsRnJhbWU+IHB0cikKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3Jl
YXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAg
ICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ2FsbEZyYW1lOwogICAgcHVibGljOgoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgRlVOQ1RJT05fTkFNRV9TRVQ+JiBzZXRGdW5jdGlvbk5hbWUoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBGVU5DVElPTl9OQU1FX1NFVCksIHByb3BlcnR5X2Z1bmN0aW9uTmFtZV9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImZ1bmN0aW9uTmFtZSIsIHZh
bHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxGVU5DVElPTl9OQU1FX1NFVD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBVUkxfU0VUPiYgc2V0VXJsKGNvbnN0
IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgVVJMX1NFVCksIHByb3BlcnR5X3VybF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxVUkxfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExJTkVf
TlVNQkVSX1NFVD4mIHNldExpbmVOdW1iZXIoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExJTkVfTlVNQkVSX1NFVCksIHByb3BlcnR5X2xp
bmVOdW1iZXJfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJs
aW5lTnVtYmVyIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPExJTkVfTlVN
QkVSX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDT0xVTU5fTlVN
QkVSX1NFVD4mIHNldENvbHVtbk51bWJlcihpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ09MVU1OX05VTUJFUl9TRVQpLCBwcm9wZXJ0eV9j
b2x1bW5OdW1iZXJfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVy
KCJjb2x1bW5OdW1iZXIiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q09M
VU1OX05VTUJFUl9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q2Fs
bEZyYW1lPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDYWxsRnJhbWU+Kj4oJm1fcmVzdWx0KTsKICAgICAg
ICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q2FsbEZyYW1lPiAoKQogICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDYWxsRnJhbWU+KCp0aGlzKTsKICAgICAgICB9CiAg
ICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8
Q2FsbEZyYW1lPiByZXN1bHQgPSBDYWxsRnJhbWU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldEZ1
bmN0aW9uTmFtZSguLi4pCiAgICAgKiAgICAgLnNldFVybCguLi4pCiAgICAgKiAgICAgLnNldExp
bmVOdW1iZXIoLi4uKQogICAgICogICAgIC5zZXRDb2x1bW5OdW1iZXIoLi4uKTsKICAgICAqLwog
ICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICBy
ZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgQ2FsbEZyYW1lKCkpKTsK
ICAgIH0KfTsKCi8qIENhbGwgZnJhbWVzIGZvciBhc3NlcnRpb25zIG9yIGVycm9yIG1lc3NhZ2Vz
LiAqLwpjbGFzcyBTdGFja1RyYWNlIDogcHVibGljIEluc3BlY3RvckFycmF5IHsKcHVibGljOgog
ICAgdm9pZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q29uc29sZTo6Q2FsbEZy
YW1lPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0
aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgIH0KfTsKCn0gLy8gQ29uc29sZQoKbmFtZXNwYWNl
IE5ldHdvcmsgewovKiBVbmlxdWUgbG9hZGVyIGlkZW50aWZpZXIuICovCnR5cGVkZWYgU3RyaW5n
IExvYWRlcklkOwoKLyogVW5pcXVlIGZyYW1lIGlkZW50aWZpZXIuICovCnR5cGVkZWYgU3RyaW5n
IEZyYW1lSWQ7CgovKiBVbmlxdWUgcmVxdWVzdCBpZGVudGlmaWVyLiAqLwp0eXBlZGVmIFN0cmlu
ZyBSZXF1ZXN0SWQ7CgovKiBUaW1pbmcgaW5mb3JtYXRpb24gZm9yIHRoZSByZXF1ZXN0LiAqLwpj
bGFzcyBSZXNvdXJjZVRpbWluZyA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAg
ICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBSRVFVRVNUX1RJTUVf
U0VUID0gMSA8PCAwLAogICAgICAgIFBST1hZX1NUQVJUX1NFVCA9IDEgPDwgMSwKICAgICAgICBQ
Uk9YWV9FTkRfU0VUID0gMSA8PCAyLAogICAgICAgIEROU19TVEFSVF9TRVQgPSAxIDw8IDMsCiAg
ICAgICAgRE5TX0VORF9TRVQgPSAxIDw8IDQsCiAgICAgICAgQ09OTkVDVF9TVEFSVF9TRVQgPSAx
IDw8IDUsCiAgICAgICAgQ09OTkVDVF9FTkRfU0VUID0gMSA8PCA2LAogICAgICAgIFNTTF9TVEFS
VF9TRVQgPSAxIDw8IDcsCiAgICAgICAgU1NMX0VORF9TRVQgPSAxIDw8IDgsCiAgICAgICAgU0VO
RF9TVEFSVF9TRVQgPSAxIDw8IDksCiAgICAgICAgU0VORF9FTkRfU0VUID0gMSA8PCAxMCwKICAg
ICAgICBSRUNFSVZFX0hFQURFUlNfRU5EX1NFVCA9IDEgPDwgMTEsCiAgICAgICAgQUxMX0ZJRUxE
U19TRVQgPSAoUkVRVUVTVF9USU1FX1NFVCB8IFBST1hZX1NUQVJUX1NFVCB8IFBST1hZX0VORF9T
RVQgfCBETlNfU1RBUlRfU0VUIHwgRE5TX0VORF9TRVQgfCBDT05ORUNUX1NUQVJUX1NFVCB8IENP
Tk5FQ1RfRU5EX1NFVCB8IFNTTF9TVEFSVF9TRVQgfCBTU0xfRU5EX1NFVCB8IFNFTkRfU1RBUlRf
U0VUIHwgU0VORF9FTkRfU0VUIHwgUkVDRUlWRV9IRUFERVJTX0VORF9TRVQpCiAgICB9OwoKICAg
IHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8
aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4q
Pih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxSZXNvdXJjZVRp
bWluZz4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
Tk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAg
ICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBSZXNv
dXJjZVRpbWluZzsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFJFUVVFU1Rf
VElNRV9TRVQ+JiBzZXRSZXF1ZXN0VGltZShkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUkVRVUVTVF9USU1FX1NFVCksIHByb3BlcnR5
X3JlcXVlc3RUaW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJl
cigicmVxdWVzdFRpbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UkVR
VUVTVF9USU1FX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQUk9Y
WV9TVEFSVF9TRVQ+JiBzZXRQcm94eVN0YXJ0KGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQUk9YWV9TVEFSVF9TRVQpLCBwcm9wZXJ0
eV9wcm94eVN0YXJ0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJl
cigicHJveHlTdGFydCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxQUk9Y
WV9TVEFSVF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUFJPWFlf
RU5EX1NFVD4mIHNldFByb3h5RW5kKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQUk9YWV9FTkRfU0VUKSwgcHJvcGVydHlfcHJveHlF
bmRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJwcm94eUVu
ZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxQUk9YWV9FTkRfU0VUPigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEROU19TVEFSVF9TRVQ+JiBzZXRE
bnNTdGFydChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgRE5TX1NUQVJUX1NFVCksIHByb3BlcnR5X2Ruc1N0YXJ0X2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiZG5zU3RhcnQiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RE5TX1NUQVJUX1NFVD4oKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBETlNfRU5EX1NFVD4mIHNldERuc0VuZChkb3VibGUgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRE5TX0VO
RF9TRVQpLCBwcm9wZXJ0eV9kbnNFbmRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0TnVtYmVyKCJkbnNFbmQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8RE5TX0VORF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ09O
TkVDVF9TVEFSVF9TRVQ+JiBzZXRDb25uZWN0U3RhcnQoZG91YmxlIHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENPTk5FQ1RfU1RBUlRfU0VUKSwg
cHJvcGVydHlfY29ubmVjdFN0YXJ0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE51bWJlcigiY29ubmVjdFN0YXJ0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPENPTk5FQ1RfU1RBUlRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IENPTk5FQ1RfRU5EX1NFVD4mIHNldENvbm5lY3RFbmQoZG91YmxlIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENPTk5FQ1RfRU5EX1NF
VCksIHByb3BlcnR5X2Nvbm5lY3RFbmRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0TnVtYmVyKCJjb25uZWN0RW5kIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPENPTk5FQ1RfRU5EX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBTU0xfU1RBUlRfU0VUPiYgc2V0U3NsU3RhcnQoZG91YmxlIHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNTTF9TVEFSVF9TRVQpLCBwcm9w
ZXJ0eV9zc2xTdGFydF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1i
ZXIoInNzbFN0YXJ0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNTTF9T
VEFSVF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU1NMX0VORF9T
RVQ+JiBzZXRTc2xFbmQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIFNTTF9FTkRfU0VUKSwgcHJvcGVydHlfc3NsRW5kX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic3NsRW5kIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNTTF9FTkRfU0VUPigpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFNFTkRfU1RBUlRfU0VUPiYgc2V0U2VuZFN0YXJ0KGRvdWJs
ZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBT
RU5EX1NUQVJUX1NFVCksIHByb3BlcnR5X3NlbmRTdGFydF9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNlbmRTdGFydCIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxTRU5EX1NUQVJUX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBTRU5EX0VORF9TRVQ+JiBzZXRTZW5kRW5kKGRvdWJsZSB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTRU5EX0VORF9TRVQp
LCBwcm9wZXJ0eV9zZW5kRW5kX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dE51bWJlcigic2VuZEVuZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxT
RU5EX0VORF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUkVDRUlW
RV9IRUFERVJTX0VORF9TRVQ+JiBzZXRSZWNlaXZlSGVhZGVyc0VuZChkb3VibGUgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUkVDRUlWRV9IRUFE
RVJTX0VORF9TRVQpLCBwcm9wZXJ0eV9yZWNlaXZlSGVhZGVyc0VuZF9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInJlY2VpdmVIZWFkZXJzRW5kIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFJFQ0VJVkVfSEVBREVSU19FTkRfU0VUPigp
OwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFJlc291cmNlVGltaW5nPiYgKCkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNf
U0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PFJlZlB0cjxSZXNvdXJjZVRpbWluZz4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAg
ICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxSZXNvdXJjZVRpbWluZz4gKCkKICAgICAgICB7CiAg
ICAgICAgICAgIHJldHVybiBSZWZQdHI8UmVzb3VyY2VUaW1pbmc+KCp0aGlzKTsKICAgICAgICB9
CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQ
dHI8UmVzb3VyY2VUaW1pbmc+IHJlc3VsdCA9IFJlc291cmNlVGltaW5nOjpjcmVhdGUoKQogICAg
ICogICAgIC5zZXRSZXF1ZXN0VGltZSguLi4pCiAgICAgKiAgICAgLnNldFByb3h5U3RhcnQoLi4u
KQogICAgICogICAgIC5zZXRQcm94eUVuZCguLi4pCiAgICAgKiAgICAgLnNldERuc1N0YXJ0KC4u
LikKICAgICAqICAgICAuc2V0RG5zRW5kKC4uLikKICAgICAqICAgICAuc2V0Q29ubmVjdFN0YXJ0
KC4uLikKICAgICAqICAgICAuc2V0Q29ubmVjdEVuZCguLi4pCiAgICAgKiAgICAgLnNldFNzbFN0
YXJ0KC4uLikKICAgICAqICAgICAuc2V0U3NsRW5kKC4uLikKICAgICAqICAgICAuc2V0U2VuZFN0
YXJ0KC4uLikKICAgICAqICAgICAuc2V0U2VuZEVuZCguLi4pCiAgICAgKiAgICAgLnNldFJlY2Vp
dmVIZWFkZXJzRW5kKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19T
RVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4o
YWRvcHRSZWYobmV3IFJlc291cmNlVGltaW5nKCkpKTsKICAgIH0KfTsKCi8qIEhUVFAgcmVxdWVz
dCBkYXRhLiAqLwpjbGFzcyBSZXF1ZXN0IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1Ymxp
YzoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFVSTF9TRVQg
PSAxIDw8IDAsCiAgICAgICAgTUVUSE9EX1NFVCA9IDEgPDwgMSwKICAgICAgICBIRUFERVJTX1NF
VCA9IDEgPDwgMiwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChVUkxfU0VUIHwgTUVUSE9EX1NF
VCB8IEhFQURFUlNfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFz
cyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RF
UD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyKFBhc3NSZWZQdHI8UmVxdWVzdD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25v
bl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAg
ICAgIGZyaWVuZCBjbGFzcyBSZXF1ZXN0OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgVVJMX1NFVD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVSTF9TRVQpLCBwcm9wZXJ0eV91cmxf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ1cmwiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VVJMX1NFVD4oKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNRVRIT0RfU0VUPiYgc2V0TWV0aG9kKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
TUVUSE9EX1NFVCksIHByb3BlcnR5X21ldGhvZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoIm1ldGhvZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxNRVRIT0RfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IEhFQURFUlNfU0VUPiYgc2V0SGVhZGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSEVBREVS
U19TRVQpLCBwcm9wZXJ0eV9oZWFkZXJzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldE9iamVjdCgiaGVhZGVycyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxIRUFERVJTX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxS
ZXF1ZXN0PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxSZXF1ZXN0Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAg
fQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFJlcXVlc3Q+ICgpCiAgICAgICAgewogICAg
ICAgICAgICByZXR1cm4gUmVmUHRyPFJlcXVlc3Q+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoK
ICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8UmVxdWVz
dD4gcmVzdWx0ID0gUmVxdWVzdDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VXJsKC4uLikKICAg
ICAqICAgICAuc2V0TWV0aG9kKC4uLikKICAgICAqICAgICAuc2V0SGVhZGVycyguLi4pOwogICAg
ICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAg
ICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBSZXF1ZXN0KCkp
KTsKICAgIH0KCiAgICB2b2lkIHNldFBvc3REYXRhKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJwb3N0RGF0YSIsIHZhbHVlKTsKICAgIH0KfTsKCi8q
IEhUVFAgcmVzcG9uc2UgZGF0YS4gKi8KY2xhc3MgUmVzcG9uc2UgOiBwdWJsaWMgSW5zcGVjdG9y
T2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAg
ICAgICAgVVJMX1NFVCA9IDEgPDwgMCwKICAgICAgICBTVEFUVVNfU0VUID0gMSA8PCAxLAogICAg
ICAgIFNUQVRVU19URVhUX1NFVCA9IDEgPDwgMiwKICAgICAgICBIRUFERVJTX1NFVCA9IDEgPDwg
MywKICAgICAgICBNSU1FX1RZUEVfU0VUID0gMSA8PCA0LAogICAgICAgIENPTk5FQ1RJT05fUkVV
U0VEX1NFVCA9IDEgPDwgNSwKICAgICAgICBDT05ORUNUSU9OX0lEX1NFVCA9IDEgPDwgNiwKICAg
ICAgICBBTExfRklFTERTX1NFVCA9IChVUkxfU0VUIHwgU1RBVFVTX1NFVCB8IFNUQVRVU19URVhU
X1NFVCB8IEhFQURFUlNfU0VUIHwgTUlNRV9UWVBFX1NFVCB8IENPTk5FQ1RJT05fUkVVU0VEX1NF
VCB8IENPTk5FQ1RJT05fSURfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAg
ICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRF
IHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8UmVzcG9uc2U+IHB0cikKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRl
ZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAg
IH0KICAgICAgICBmcmllbmQgY2xhc3MgUmVzcG9uc2U7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBVUkxfU0VUPiYgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVVJMX1NFVCksIHByb3Bl
cnR5X3VybF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVy
bCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVUkxfU0VUPigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNUQVRVU19TRVQ+JiBzZXRTdGF0dXMoZG91
YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFNUQVRVU19TRVQpLCBwcm9wZXJ0eV9zdGF0dXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0TnVtYmVyKCJzdGF0dXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8U1RBVFVTX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBTVEFUVVNfVEVYVF9TRVQ+JiBzZXRTdGF0dXNUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1RBVFVTX1RFWFRf
U0VUKSwgcHJvcGVydHlfc3RhdHVzVGV4dF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoInN0YXR1c1RleHQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8U1RBVFVTX1RFWFRfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IEhFQURFUlNfU0VUPiYgc2V0SGVhZGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
SEVBREVSU19TRVQpLCBwcm9wZXJ0eV9oZWFkZXJzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE9iamVjdCgiaGVhZGVycyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxIRUFERVJTX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBNSU1FX1RZUEVfU0VUPiYgc2V0TWltZVR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNSU1FX1RZUEVfU0VU
KSwgcHJvcGVydHlfbWltZVR5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJtaW1lVHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxNSU1FX1RZUEVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IENP
Tk5FQ1RJT05fUkVVU0VEX1NFVD4mIHNldENvbm5lY3Rpb25SZXVzZWQoYm9vbCB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDT05ORUNUSU9OX1JF
VVNFRF9TRVQpLCBwcm9wZXJ0eV9jb25uZWN0aW9uUmV1c2VkX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImNvbm5lY3Rpb25SZXVzZWQiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q09OTkVDVElPTl9SRVVTRURfU0VUPigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IENPTk5FQ1RJT05fSURfU0VUPiYgc2V0Q29u
bmVjdGlvbklkKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBDT05ORUNUSU9OX0lEX1NFVCksIHByb3BlcnR5X2Nvbm5lY3Rpb25JZF9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImNvbm5lY3Rpb25J
ZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDT05ORUNUSU9OX0lEX1NF
VD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxSZXNwb25zZT4mICgpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NF
VCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxSZWZQdHI8UmVzcG9uc2U+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9w
ZXJhdG9yIFBhc3NSZWZQdHI8UmVzcG9uc2U+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1
cm4gUmVmUHRyPFJlc3BvbnNlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAg
ICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFJlc3BvbnNlPiByZXN1bHQg
PSBSZXNwb25zZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VXJsKC4uLikKICAgICAqICAgICAu
c2V0U3RhdHVzKC4uLikKICAgICAqICAgICAuc2V0U3RhdHVzVGV4dCguLi4pCiAgICAgKiAgICAg
LnNldEhlYWRlcnMoLi4uKQogICAgICogICAgIC5zZXRNaW1lVHlwZSguLi4pCiAgICAgKiAgICAg
LnNldENvbm5lY3Rpb25SZXVzZWQoLi4uKQogICAgICogICAgIC5zZXRDb25uZWN0aW9uSWQoLi4u
KTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAg
IHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgUmVz
cG9uc2UoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0SGVhZGVyc1RleHQoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoImhlYWRlcnNUZXh0IiwgdmFsdWUp
OwogICAgfQoKICAgIHZvaWQgc2V0UmVxdWVzdEhlYWRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgicmVxdWVzdEhlYWRl
cnMiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRSZXF1ZXN0SGVhZGVyc1RleHQoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInJlcXVlc3RIZWFk
ZXJzVGV4dCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldEZyb21EaXNrQ2FjaGUoYm9vbCB2
YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRCb29sZWFuKCJmcm9tRGlza0NhY2hlIiwgdmFs
dWUpOwogICAgfQoKICAgIHZvaWQgc2V0VGltaW5nKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
TmV0d29yazo6UmVzb3VyY2VUaW1pbmc+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZh
bHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgidGltaW5nIiwgdmFsdWUpOwogICAg
fQp9OwoKLyogV2ViU29ja2V0IHJlcXVlc3QgZGF0YS4gKi8KY2xhc3MgV2ViU29ja2V0UmVxdWVz
dCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBO
T19GSUVMRFNfU0VUID0gMCwKICAgICAgICBSRVFVRVNUX0tFWTNfU0VUID0gMSA8PCAwLAogICAg
ICAgIEhFQURFUlNfU0VUID0gMSA8PCAxLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFJFUVVF
U1RfS0VZM19TRVQgfCBIRUFERVJTX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRF
PgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxT
VEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFdlYlNvY2tldFJlcXVlc3Q+IHB0cikKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1
aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0g
cHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgV2ViU29ja2V0UmVxdWVzdDsKICAg
IHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFJFUVVFU1RfS0VZM19TRVQ+JiBzZXRS
ZXF1ZXN0S2V5Myhjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFJFUVVFU1RfS0VZM19TRVQpLCBwcm9wZXJ0eV9yZXF1ZXN0
S2V5M19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInJlcXVl
c3RLZXkzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFJFUVVFU1RfS0VZ
M19TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSEVBREVSU19TRVQ+
JiBzZXRIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBIRUFERVJTX1NFVCksIHByb3Bl
cnR5X2hlYWRlcnNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0
KCJoZWFkZXJzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEhFQURFUlNf
U0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFdlYlNvY2tldFJlcXVl
c3Q+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxM
X0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFdlYlNvY2tldFJlcXVlc3Q+Kj4oJm1fcmVzdWx0KTsKICAg
ICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8V2ViU29ja2V0UmVxdWVzdD4gKCkK
ICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8V2ViU29ja2V0UmVxdWVzdD4oKnRo
aXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKICAgICAqIFJlZlB0cjxXZWJTb2NrZXRSZXF1ZXN0PiByZXN1bHQgPSBXZWJTb2NrZXRSZXF1
ZXN0OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRSZXF1ZXN0S2V5MyguLi4pCiAgICAgKiAgICAg
LnNldEhlYWRlcnMoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NF
VD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihh
ZG9wdFJlZihuZXcgV2ViU29ja2V0UmVxdWVzdCgpKSk7CiAgICB9Cn07CgovKiBXZWJTb2NrZXQg
cmVzcG9uc2UgZGF0YS4gKi8KY2xhc3MgV2ViU29ja2V0UmVzcG9uc2UgOiBwdWJsaWMgSW5zcGVj
dG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAs
CiAgICAgICAgU1RBVFVTX1NFVCA9IDEgPDwgMCwKICAgICAgICBTVEFUVVNfVEVYVF9TRVQgPSAx
IDw8IDEsCiAgICAgICAgSEVBREVSU19TRVQgPSAxIDw8IDIsCiAgICAgICAgQ0hBTExFTkdFX1JF
U1BPTlNFX1NFVCA9IDEgPDwgMywKICAgICAgICBBTExfRklFTERTX1NFVCA9IChTVEFUVVNfU0VU
IHwgU1RBVFVTX1RFWFRfU0VUIHwgSEVBREVSU19TRVQgfCBDSEFMTEVOR0VfUkVTUE9OU0VfU0VU
KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAg
IHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAg
ICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgp
CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxT
VEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQ
dHI8V2ViU29ja2V0UmVzcG9uc2U+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBm
cmllbmQgY2xhc3MgV2ViU29ja2V0UmVzcG9uc2U7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBTVEFUVVNfU0VUPiYgc2V0U3RhdHVzKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTVEFUVVNfU0VUKSwgcHJvcGVy
dHlfc3RhdHVzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigi
c3RhdHVzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNUQVRVU19TRVQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU1RBVFVTX1RFWFRfU0VUPiYg
c2V0U3RhdHVzVGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNUQVRVU19URVhUX1NFVCksIHByb3BlcnR5X3N0YXR1
c1RleHRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzdGF0
dXNUZXh0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNUQVRVU19URVhU
X1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBIRUFERVJTX1NFVD4m
IHNldEhlYWRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhFQURFUlNfU0VUKSwgcHJvcGVy
dHlfaGVhZGVyc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3Qo
ImhlYWRlcnMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SEVBREVSU19T
RVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ0hBTExFTkdFX1JFU1BP
TlNFX1NFVD4mIHNldENoYWxsZW5nZVJlc3BvbnNlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ0hBTExFTkdFX1JFU1BP
TlNFX1NFVCksIHByb3BlcnR5X2NoYWxsZW5nZVJlc3BvbnNlX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiY2hhbGxlbmdlUmVzcG9uc2UiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q0hBTExFTkdFX1JFU1BPTlNFX1NFVD4oKTsKICAg
ICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxXZWJTb2NrZXRSZXNwb25zZT4mICgpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NF
VCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxSZWZQdHI8V2ViU29ja2V0UmVzcG9uc2U+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9Cgog
ICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8V2ViU29ja2V0UmVzcG9uc2U+ICgpCiAgICAgICAg
ewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFdlYlNvY2tldFJlc3BvbnNlPigqdGhpcyk7CiAg
ICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAg
ICogUmVmUHRyPFdlYlNvY2tldFJlc3BvbnNlPiByZXN1bHQgPSBXZWJTb2NrZXRSZXNwb25zZTo6
Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U3RhdHVzKC4uLikKICAgICAqICAgICAuc2V0U3RhdHVz
VGV4dCguLi4pCiAgICAgKiAgICAgLnNldEhlYWRlcnMoLi4uKQogICAgICogICAgIC5zZXRDaGFs
bGVuZ2VSZXNwb25zZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNf
U0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+
KGFkb3B0UmVmKG5ldyBXZWJTb2NrZXRSZXNwb25zZSgpKSk7CiAgICB9Cn07CgovKiBJbmZvcm1h
dGlvbiBhYm91dCB0aGUgY2FjaGVkIHJlc291cmNlLiAqLwpjbGFzcyBDYWNoZWRSZXNvdXJjZSA6
IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19G
SUVMRFNfU0VUID0gMCwKICAgICAgICBVUkxfU0VUID0gMSA8PCAwLAogICAgICAgIFRZUEVfU0VU
ID0gMSA8PCAxLAogICAgICAgIFJFU1BPTlNFX1NFVCA9IDEgPDwgMiwKICAgICAgICBCT0RZX1NJ
WkVfU0VUID0gMSA8PCAzLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFVSTF9TRVQgfCBUWVBF
X1NFVCB8IFJFU1BPTlNFX1NFVCB8IEJPRFlfU0laRV9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRl
PGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+
IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDYWNoZWRSZXNvdXJjZT4gcHRy
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERT
X1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9y
ZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDYWNoZWRSZXNvdXJj
ZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVSTF9TRVQ+JiBzZXRVcmwo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBVUkxfU0VUKSwgcHJvcGVydHlfdXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygidXJsIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFVSTF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
VFlQRV9TRVQ+JiBzZXRUeXBlKFR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkVudW0g
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVFlQ
RV9TRVQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZygidHlwZSIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8VFlQRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgVFlQRV9TRVQ+JiBzZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVFlQRV9TRVQpLCBwcm9w
ZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
dHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUWVBFX1NFVD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBSRVNQT05TRV9TRVQ+JiBzZXRSZXNw
b25zZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlc3BvbnNlPiovIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBSRVNQT05TRV9TRVQpLCBwcm9wZXJ0eV9yZXNwb25zZV9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInJlc3BvbnNlIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFJFU1BPTlNFX1NFVD4oKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBCT0RZX1NJWkVfU0VUPiYgc2V0Qm9keVNpemUo
ZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIEJPRFlfU0laRV9TRVQpLCBwcm9wZXJ0eV9ib2R5U2l6ZV9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImJvZHlTaXplIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPEJPRFlfU0laRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBv
cGVyYXRvciBSZWZQdHI8Q2FjaGVkUmVzb3VyY2U+JiAoKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVh
ZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENhY2hlZFJl
c291cmNlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVm
UHRyPENhY2hlZFJlc291cmNlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0
cjxDYWNoZWRSZXNvdXJjZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDYWNoZWRSZXNvdXJjZT4gcmVz
dWx0ID0gQ2FjaGVkUmVzb3VyY2U6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFVybCguLi4pCiAg
ICAgKiAgICAgLnNldFR5cGUoLi4uKQogICAgICogICAgIC5zZXRSZXNwb25zZSguLi4pCiAgICAg
KiAgICAgLnNldEJvZHlTaXplKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJ
RUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERT
X1NFVD4oYWRvcHRSZWYobmV3IENhY2hlZFJlc291cmNlKCkpKTsKICAgIH0KfTsKCi8qIEluZm9y
bWF0aW9uIGFib3V0IHRoZSByZXF1ZXN0IGluaXRpYXRvci4gKi8KY2xhc3MgSW5pdGlhdG9yIDog
cHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3Bl
cnR5IG5hbWUgJ3R5cGUnIHdoaWxlIGdlbmVyYXRpbmcgSW5pdGlhdG9yLgogICAgc3RydWN0IFR5
cGUgewogICAgICAgIGVudW0gRW51bSB7CiAgICAgICAgICAgIFBhcnNlciA9IDM4LAogICAgICAg
ICAgICBTY3JpcHQgPSAzOSwKICAgICAgICAgICAgT3RoZXIgPSAyNSwKICAgICAgICB9OwogICAg
fTsgLy8gc3RydWN0IFR5cGUKCiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwK
ICAgICAgICBUWVBFX1NFVCA9IDEgPDwgMCwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChUWVBF
X1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7
CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoK
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3Rh
dGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNz
UmVmUHRyPEluaXRpYXRvcj4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0
YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVu
ZCBjbGFzcyBJbml0aWF0b3I7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBU
WVBFX1NFVD4mIHNldFR5cGUoVHlwZTo6RW51bSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUWVBFX1NFVCksIHByb3BlcnR5X3R5cGVfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgZ2V0RW51bUNv
bnN0YW50VmFsdWUodmFsdWUpKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUWVBFX1NF
VD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUWVBFX1NFVD4mIHNldFR5
cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBUWVBFX1NFVCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFRZUEVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3Ig
UmVmUHRyPEluaXRpYXRvcj4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8SW5pdGlhdG9yPio+KCZtX3Jlc3Vs
dCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEluaXRpYXRvcj4gKCkK
ICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8SW5pdGlhdG9yPigqdGhpcyk7CiAg
ICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAg
ICogUmVmUHRyPEluaXRpYXRvcj4gcmVzdWx0ID0gSW5pdGlhdG9yOjpjcmVhdGUoKQogICAgICog
ICAgIC5zZXRUeXBlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19T
RVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4o
YWRvcHRSZWYobmV3IEluaXRpYXRvcigpKSk7CiAgICB9CgogICAgdm9pZCBzZXRTdGFja1RyYWNl
KC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q29uc29sZTo6U3RhY2tUcmFjZT4qLyBQYXNzUmVm
UHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRBcnJheSgi
c3RhY2tUcmFjZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFVybChjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygidXJsIiwgdmFsdWUpOwogICAg
fQoKICAgIHZvaWQgc2V0TGluZU51bWJlcihkb3VibGUgdmFsdWUpCiAgICB7CiAgICAgICAgdGhp
cy0+c2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwgdmFsdWUpOwogICAgfQp9OwoKfSAvLyBOZXR3b3Jr
CgojaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKbmFtZXNwYWNlIERhdGFiYXNlIHsKLyogRGF0YWJh
c2Ugb2JqZWN0LiAqLwpjbGFzcyBEYXRhYmFzZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qgewpw
dWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBJRF9T
RVQgPSAxIDw8IDAsCiAgICAgICAgRE9NQUlOX1NFVCA9IDEgPDwgMSwKICAgICAgICBOQU1FX1NF
VCA9IDEgPDwgMiwKICAgICAgICBWRVJTSU9OX1NFVCA9IDEgPDwgMywKICAgICAgICBBTExfRklF
TERTX1NFVCA9IChJRF9TRVQgfCBET01BSU5fU0VUIHwgTkFNRV9TRVQgfCBWRVJTSU9OX1NFVCkK
ICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBw
cml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAg
ICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQog
ICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRy
PERhdGFiYXNlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwog
ICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNz
IERhdGFiYXNlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSURfU0VUPiYg
c2V0SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBJRF9TRVQpLCBwcm9wZXJ0eV9pZF9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImlkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPElEX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBET01BSU5fU0VUPiYgc2V0RG9tYWluKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRE9NQUlOX1NFVCksIHByb3BlcnR5
X2RvbWFpbl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImRv
bWFpbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxET01BSU5fU0VUPigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5BTUVfU0VUPiYgc2V0TmFtZShj
b25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIE5BTUVfU0VUKSwgcHJvcGVydHlfbmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8TkFNRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgVkVSU0lPTl9TRVQ+JiBzZXRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVkVSU0lPTl9TRVQpLCBwcm9w
ZXJ0eV92ZXJzaW9uX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
ZygidmVyc2lvbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWRVJTSU9O
X1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxEYXRhYmFzZT4mICgp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERT
X1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxSZWZQdHI8RGF0YWJhc2U+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAg
IG9wZXJhdG9yIFBhc3NSZWZQdHI8RGF0YWJhc2U+ICgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gUmVmUHRyPERhdGFiYXNlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgog
ICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPERhdGFiYXNlPiByZXN1
bHQgPSBEYXRhYmFzZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0SWQoLi4uKQogICAgICogICAg
IC5zZXREb21haW4oLi4uKQogICAgICogICAgIC5zZXROYW1lKC4uLikKICAgICAqICAgICAuc2V0
VmVyc2lvbiguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBj
cmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0
UmVmKG5ldyBEYXRhYmFzZSgpKSk7CiAgICB9Cn07Cgp9IC8vIERhdGFiYXNlCgojZW5kaWYgLy8g
RU5BQkxFKFNRTF9EQVRBQkFTRSkKbmFtZXNwYWNlIERPTVN0b3JhZ2UgewovKiBET00gU3RvcmFn
ZSBlbnRyeS4gKi8KY2xhc3MgRW50cnkgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGlj
OgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgSE9TVF9TRVQg
PSAxIDw8IDAsCiAgICAgICAgSVNfTE9DQUxfU1RPUkFHRV9TRVQgPSAxIDw8IDEsCiAgICAgICAg
SURfU0VUID0gMSA8PCAyLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKEhPU1RfU0VUIHwgSVNf
TE9DQUxfU1RPUkFHRV9TRVQgfCBJRF9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFU
RT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxFbnRyeT4gcHRyKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVh
dGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAg
ICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBFbnRyeTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IEhPU1RfU0VUPiYgc2V0SG9zdChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhPU1RfU0VUKSwgcHJv
cGVydHlfaG9zdF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
Imhvc3QiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SE9TVF9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSVNfTE9DQUxfU1RPUkFHRV9TRVQ+
JiBzZXRJc0xvY2FsU3RvcmFnZShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIElTX0xPQ0FMX1NUT1JBR0VfU0VUKSwgcHJvcGVydHlfaXNM
b2NhbFN0b3JhZ2VfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVh
bigiaXNMb2NhbFN0b3JhZ2UiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
SVNfTE9DQUxfU1RPUkFHRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgSURfU0VUPiYgc2V0SWQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIElEX1NFVCksIHByb3BlcnR5X2lkX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiaWQiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8SURfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3Ig
UmVmUHRyPEVudHJ5PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxFbnRyeT4qPigmbV9yZXN1bHQpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxFbnRyeT4gKCkKICAgICAgICB7CiAg
ICAgICAgICAgIHJldHVybiBSZWZQdHI8RW50cnk+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoK
ICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8RW50cnk+
IHJlc3VsdCA9IEVudHJ5OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRIb3N0KC4uLikKICAgICAq
ICAgICAuc2V0SXNMb2NhbFN0b3JhZ2UoLi4uKQogICAgICogICAgIC5zZXRJZCguLi4pOwogICAg
ICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAg
ICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBFbnRyeSgpKSk7
CiAgICB9Cn07Cgp9IC8vIERPTVN0b3JhZ2UKCm5hbWVzcGFjZSBBcHBsaWNhdGlvbkNhY2hlIHsK
LyogRGV0YWlsZWQgYXBwbGljYXRpb24gY2FjaGUgcmVzb3VyY2UgaW5mb3JtYXRpb24uICovCmNs
YXNzIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qgewpw
dWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBVUkxf
U0VUID0gMSA8PCAwLAogICAgICAgIFNJWkVfU0VUID0gMSA8PCAxLAogICAgICAgIFRZUEVfU0VU
ID0gMSA8PCAyLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFVSTF9TRVQgfCBTSVpFX1NFVCB8
IFRZUEVfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWls
ZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1
bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
KFBhc3NSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiBwdHIpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2Ny
ZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAg
ICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTsKICAg
IHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVSTF9TRVQ+JiBzZXRVcmwoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBVUkxfU0VUKSwgcHJvcGVydHlfdXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygidXJsIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPFVSTF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU0laRV9T
RVQ+JiBzZXRTaXplKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBTSVpFX1NFVCksIHByb3BlcnR5X3NpemVfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzaXplIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFNJWkVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFRZUEVfU0VUPiYgc2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRZUEVfU0VUKSwgcHJvcGVydHlf
dHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUi
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VFlQRV9TRVQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiYg
KCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVM
RFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+Kj4oJm1fcmVzdWx0KTsK
ICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJl
c291cmNlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxBcHBsaWNhdGlv
bkNhY2hlUmVzb3VyY2U+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291
cmNlPiByZXN1bHQgPSBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZSgpCiAgICAgKiAg
ICAgLnNldFVybCguLi4pCiAgICAgKiAgICAgLnNldFNpemUoLi4uKQogICAgICogICAgIC5zZXRU
eXBlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0
ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYo
bmV3IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZSgpKSk7CiAgICB9Cn07CgovKiBEZXRhaWxlZCBh
cHBsaWNhdGlvbiBjYWNoZSBpbmZvcm1hdGlvbi4gKi8KY2xhc3MgQXBwbGljYXRpb25DYWNoZSA6
IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9w
ZXJ0eSBuYW1lICdyZXNvdXJjZXMnIHdoaWxlIGdlbmVyYXRpbmcgQXBwbGljYXRpb25DYWNoZS4K
ICAgIGNsYXNzIFJlc291cmNlcyA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7CiAgICBwdWJsaWM6
CiAgICAgICAgdm9pZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXBwbGljYXRp
b25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFs
dWUpOwogICAgICAgIH0KICAgIH07CgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9
IDAsCiAgICAgICAgTUFOSUZFU1RfVV9SX0xfU0VUID0gMSA8PCAwLAogICAgICAgIFNJWkVfU0VU
ID0gMSA8PCAxLAogICAgICAgIENSRUFUSU9OX1RJTUVfU0VUID0gMSA8PCAyLAogICAgICAgIFVQ
REFURV9USU1FX1NFVCA9IDEgPDwgMywKICAgICAgICBSRVNPVVJDRVNfU0VUID0gMSA8PCA0LAog
ICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKE1BTklGRVNUX1VfUl9MX1NFVCB8IFNJWkVfU0VUIHwg
Q1JFQVRJT05fVElNRV9TRVQgfCBVUERBVEVfVElNRV9TRVQgfCBSRVNPVVJDRVNfU0VUKQogICAg
fTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZh
dGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRl
bXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAg
ICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8
IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8QXBw
bGljYXRpb25DYWNoZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRl
KTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBj
bGFzcyBBcHBsaWNhdGlvbkNhY2hlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgTUFOSUZFU1RfVV9SX0xfU0VUPiYgc2V0TWFuaWZlc3RVUkwoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNQU5JRkVT
VF9VX1JfTF9TRVQpLCBwcm9wZXJ0eV9tYW5pZmVzdFVSTF9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1hbmlmZXN0VVJMIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPE1BTklGRVNUX1VfUl9MX1NFVD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBTSVpFX1NFVD4mIHNldFNpemUoZG91YmxlIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNJWkVfU0VUKSwgcHJv
cGVydHlfc2l6ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIo
InNpemUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U0laRV9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ1JFQVRJT05fVElNRV9TRVQ+JiBz
ZXRDcmVhdGlvblRpbWUoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIENSRUFUSU9OX1RJTUVfU0VUKSwgcHJvcGVydHlfY3JlYXRpb25U
aW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiY3JlYXRp
b25UaW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENSRUFUSU9OX1RJ
TUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVQREFURV9USU1F
X1NFVD4mIHNldFVwZGF0ZVRpbWUoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVQREFURV9USU1FX1NFVCksIHByb3BlcnR5X3VwZGF0
ZVRpbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJ1cGRh
dGVUaW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVQREFURV9USU1F
X1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBSRVNPVVJDRVNfU0VU
PiYgc2V0UmVzb3VyY2VzKC8qUGFzc1JlZlB0cjxSZXNvdXJjZXM+Ki8gUGFzc1JlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgUkVTT1VSQ0VTX1NFVCksIHByb3BlcnR5X3Jlc291cmNlc19hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgicmVzb3VyY2VzIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFJFU09VUkNFU19TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4mICgpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lz
X25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8
QXBwbGljYXRpb25DYWNoZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0
b3IgUGFzc1JlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiAoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsK
CiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEFwcGxp
Y2F0aW9uQ2FjaGU+IHJlc3VsdCA9IEFwcGxpY2F0aW9uQ2FjaGU6OmNyZWF0ZSgpCiAgICAgKiAg
ICAgLnNldE1hbmlmZXN0VVJMKC4uLikKICAgICAqICAgICAuc2V0U2l6ZSguLi4pCiAgICAgKiAg
ICAgLnNldENyZWF0aW9uVGltZSguLi4pCiAgICAgKiAgICAgLnNldFVwZGF0ZVRpbWUoLi4uKQog
ICAgICogICAgIC5zZXRSZXNvdXJjZXMoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8
Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19G
SUVMRFNfU0VUPihhZG9wdFJlZihuZXcgQXBwbGljYXRpb25DYWNoZSgpKSk7CiAgICB9Cn07Cgov
KiBGcmFtZSBpZGVudGlmaWVyIC0gbWFuaWZlc3QgVVJMIHBhaXIuICovCmNsYXNzIEZyYW1lV2l0
aE1hbmlmZXN0IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewog
ICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIEZSQU1FX0lEX1NFVCA9IDEgPDwgMCwK
ICAgICAgICBNQU5JRkVTVF9VX1JfTF9TRVQgPSAxIDw8IDEsCiAgICAgICAgU1RBVFVTX1NFVCA9
IDEgPDwgMiwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChGUkFNRV9JRF9TRVQgfCBNQU5JRkVT
VF9VX1JfTF9TRVQgfCBTVEFUVVNfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNU
QVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8RnJhbWVXaXRoTWFuaWZlc3Q+IHB0cikKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1
aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0g
cHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgRnJhbWVXaXRoTWFuaWZlc3Q7CiAg
ICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBGUkFNRV9JRF9TRVQ+JiBzZXRGcmFt
ZUlkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgRlJBTUVfSURfU0VUKSwgcHJvcGVydHlfZnJhbWVJZF9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImZyYW1lSWQiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RlJBTUVfSURfU0VUPigpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IE1BTklGRVNUX1VfUl9MX1NFVD4mIHNldE1hbmlmZXN0VVJM
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgTUFOSUZFU1RfVV9SX0xfU0VUKSwgcHJvcGVydHlfbWFuaWZlc3RVUkxfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtYW5pZmVzdFVSTCIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNQU5JRkVTVF9VX1JfTF9TRVQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU1RBVFVTX1NFVD4mIHNldFN0
YXR1cyhpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgU1RBVFVTX1NFVCksIHByb3BlcnR5X3N0YXR1c19hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInN0YXR1cyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxTVEFUVVNfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3Ig
UmVmUHRyPEZyYW1lV2l0aE1hbmlmZXN0PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxGcmFtZVdpdGhNYW5p
ZmVzdD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0
cjxGcmFtZVdpdGhNYW5pZmVzdD4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQ
dHI8RnJhbWVXaXRoTWFuaWZlc3Q+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAg
ICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8RnJhbWVXaXRoTWFuaWZl
c3Q+IHJlc3VsdCA9IEZyYW1lV2l0aE1hbmlmZXN0OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRG
cmFtZUlkKC4uLikKICAgICAqICAgICAuc2V0TWFuaWZlc3RVUkwoLi4uKQogICAgICogICAgIC5z
ZXRTdGF0dXMoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4g
Y3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9w
dFJlZihuZXcgRnJhbWVXaXRoTWFuaWZlc3QoKSkpOwogICAgfQp9OwoKfSAvLyBBcHBsaWNhdGlv
bkNhY2hlCgpuYW1lc3BhY2UgRE9NIHsKLyogRE9NIGludGVyYWN0aW9uIGlzIGltcGxlbWVudGVk
IGluIHRlcm1zIG9mIG1pcnJvciBvYmplY3RzIHRoYXQgcmVwcmVzZW50IHRoZSBhY3R1YWwgRE9N
IG5vZGVzLiBET01Ob2RlIGlzIGEgYmFzZSBub2RlIG1pcnJvciB0eXBlLiAqLwpjbGFzcyBOb2Rl
IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHBy
b3BlcnR5IG5hbWUgJ2NoaWxkcmVuJyB3aGlsZSBnZW5lcmF0aW5nIE5vZGUuCiAgICBjbGFzcyBD
aGlsZHJlbiA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7CiAgICBwdWJsaWM6CiAgICAgICAgdm9p
ZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpOb2RlPiovIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMtPnB1
c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KICAgIH07CgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJv
cGVydHkgbmFtZSAnYXR0cmlidXRlcycgd2hpbGUgZ2VuZXJhdGluZyBOb2RlLgogICAgY2xhc3Mg
QXR0cmlidXRlcyA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7CiAgICBwdWJsaWM6CiAgICAgICAg
dm9pZCBhZGRJdGVtKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0
aGlzLT5wdXNoU3RyaW5nKHZhbHVlKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewogICAg
ICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIE5PREVfSURfU0VUID0gMSA8PCAwLAogICAg
ICAgIE5PREVfVFlQRV9TRVQgPSAxIDw8IDEsCiAgICAgICAgTk9ERV9OQU1FX1NFVCA9IDEgPDwg
MiwKICAgICAgICBMT0NBTF9OQU1FX1NFVCA9IDEgPDwgMywKICAgICAgICBOT0RFX1ZBTFVFX1NF
VCA9IDEgPDwgNCwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChOT0RFX0lEX1NFVCB8IE5PREVf
VFlQRV9TRVQgfCBOT0RFX05BTUVfU0VUIHwgTE9DQUxfTkFNRV9TRVQgfCBOT0RFX1ZBTFVFX1NF
VCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAg
ICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVm
UHRyPE5vZGU+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAg
ICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3Mg
Tm9kZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5PREVfSURfU0VUPiYg
c2V0Tm9kZUlkKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBOT0RFX0lEX1NFVCksIHByb3BlcnR5X25vZGVJZF9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoIm5vZGVJZCIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxOT0RFX0lEX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBOT0RFX1RZUEVfU0VUPiYgc2V0Tm9kZVR5cGUoaW50IHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5PREVfVFlQRV9TRVQp
LCBwcm9wZXJ0eV9ub2RlVHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXROdW1iZXIoIm5vZGVUeXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PE5PREVfVFlQRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTk9E
RV9OQU1FX1NFVD4mIHNldE5vZGVOYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTk9ERV9OQU1FX1NFVCksIHByb3Bl
cnR5X25vZGVOYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
Zygibm9kZU5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tk9ERV9O
QU1FX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBMT0NBTF9OQU1F
X1NFVD4mIHNldExvY2FsTmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExPQ0FMX05BTUVfU0VUKSwgcHJvcGVydHlf
bG9jYWxOYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
bG9jYWxOYW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPExPQ0FMX05B
TUVfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5PREVfVkFMVUVf
U0VUPiYgc2V0Tm9kZVZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTk9ERV9WQUxVRV9TRVQpLCBwcm9wZXJ0eV9u
b2RlVmFsdWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJu
b2RlVmFsdWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tk9ERV9WQUxV
RV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Tm9kZT4mICgpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NF
VCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxSZWZQdHI8Tm9kZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0
b3IgUGFzc1JlZlB0cjxOb2RlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0
cjxOb2RlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGlj
IGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPE5vZGU+IHJlc3VsdCA9IE5vZGU6OmNyZWF0ZSgp
CiAgICAgKiAgICAgLnNldE5vZGVJZCguLi4pCiAgICAgKiAgICAgLnNldE5vZGVUeXBlKC4uLikK
ICAgICAqICAgICAuc2V0Tm9kZU5hbWUoLi4uKQogICAgICogICAgIC5zZXRMb2NhbE5hbWUoLi4u
KQogICAgICogICAgIC5zZXROb2RlVmFsdWUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxk
ZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxO
T19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgTm9kZSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRD
aGlsZE5vZGVDb3VudChpbnQgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0TnVtYmVyKCJj
aGlsZE5vZGVDb3VudCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldENoaWxkcmVuKC8qUGFz
c1JlZlB0cjxDaGlsZHJlbj4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAg
IHsKICAgICAgICB0aGlzLT5zZXRBcnJheSgiY2hpbGRyZW4iLCB2YWx1ZSk7CiAgICB9CgogICAg
dm9pZCBzZXRBdHRyaWJ1dGVzKC8qUGFzc1JlZlB0cjxBdHRyaWJ1dGVzPiovIFBhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJhdHRy
aWJ1dGVzIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0RG9jdW1lbnRVUkwoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoImRvY3VtZW50VVJMIiwg
dmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0UHVibGljSWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInB1YmxpY0lkIiwgdmFsdWUpOwogICAgfQoK
ICAgIHZvaWQgc2V0U3lzdGVtSWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0
aGlzLT5zZXRTdHJpbmcoInN5c3RlbUlkIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0SW50
ZXJuYWxTdWJzZXQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRT
dHJpbmcoImludGVybmFsU3Vic2V0IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0WG1sVmVy
c2lvbihjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygi
eG1sVmVyc2lvbiIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAg
ICB9CgogICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAg
IHRoaXMtPnNldFN0cmluZygidmFsdWUiLCB2YWx1ZSk7CiAgICB9CiAgICB1c2luZyBJbnNwZWN0
b3JPYmplY3Q6OnNldFZhbHVlOwoKfTsKCi8qIERPTSBpbnRlcmFjdGlvbiBpcyBpbXBsZW1lbnRl
ZCBpbiB0ZXJtcyBvZiBtaXJyb3Igb2JqZWN0cyB0aGF0IHJlcHJlc2VudCB0aGUgYWN0dWFsIERP
TSBub2Rlcy4gRE9NTm9kZSBpcyBhIGJhc2Ugbm9kZSBtaXJyb3IgdHlwZS4gKi8KY2xhc3MgRXZl
bnRMaXN0ZW5lciA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsK
ICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBUWVBFX1NFVCA9IDEgPDwgMCwKICAg
ICAgICBVU0VfQ0FQVFVSRV9TRVQgPSAxIDw8IDEsCiAgICAgICAgSVNfQVRUUklCVVRFX1NFVCA9
IDEgPDwgMiwKICAgICAgICBOT0RFX0lEX1NFVCA9IDEgPDwgMywKICAgICAgICBIQU5ETEVSX0JP
RFlfU0VUID0gMSA8PCA0LAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFRZUEVfU0VUIHwgVVNF
X0NBUFRVUkVfU0VUIHwgSVNfQVRUUklCVVRFX1NFVCB8IE5PREVfSURfU0VUIHwgSEFORExFUl9C
T0RZX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRl
ciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0
OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQ
YXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25f
aW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAg
ICBmcmllbmQgY2xhc3MgRXZlbnRMaXN0ZW5lcjsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IFRZUEVfU0VUPiYgc2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRZUEVfU0VUKSwgcHJvcGVy
dHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5
cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VFlQRV9TRVQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVVNFX0NBUFRVUkVfU0VUPiYgc2V0VXNl
Q2FwdHVyZShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIFVTRV9DQVBUVVJFX1NFVCksIHByb3BlcnR5X3VzZUNhcHR1cmVfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigidXNlQ2FwdHVyZSIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVU0VfQ0FQVFVSRV9TRVQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSVNfQVRUUklCVVRFX1NFVD4mIHNldElzQXR0
cmlidXRlKGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgSVNfQVRUUklCVVRFX1NFVCksIHByb3BlcnR5X2lzQXR0cmlidXRlX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImlzQXR0cmlidXRlIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElTX0FUVFJJQlVURV9TRVQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTk9ERV9JRF9TRVQ+JiBzZXROb2RlSWQo
aW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IE5PREVfSURfU0VUKSwgcHJvcGVydHlfbm9kZUlkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE51bWJlcigibm9kZUlkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPE5PREVfSURfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IEhBTkRMRVJfQk9EWV9TRVQ+JiBzZXRIYW5kbGVyQm9keShjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhBTkRMRVJf
Qk9EWV9TRVQpLCBwcm9wZXJ0eV9oYW5kbGVyQm9keV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRTdHJpbmcoImhhbmRsZXJCb2R5IiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPEhBTkRMRVJfQk9EWV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBv
cGVyYXRvciBSZWZQdHI8RXZlbnRMaXN0ZW5lcj4mICgpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFk
eSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0
cjxFdmVudExpc3RlbmVyPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxF
dmVudExpc3RlbmVyPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3lu
dGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEV2ZW50TGlzdGVuZXI+IHJlc3VsdCA9
IEV2ZW50TGlzdGVuZXI6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFR5cGUoLi4uKQogICAgICog
ICAgIC5zZXRVc2VDYXB0dXJlKC4uLikKICAgICAqICAgICAuc2V0SXNBdHRyaWJ1dGUoLi4uKQog
ICAgICogICAgIC5zZXROb2RlSWQoLi4uKQogICAgICogICAgIC5zZXRIYW5kbGVyQm9keSguLi4p
OwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAg
ewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBFdmVu
dExpc3RlbmVyKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldExvY2F0aW9uKC8qUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoImxvY2F0aW9uIiwgdmFs
dWUpOwogICAgfQp9OwoKLyogQSBzdHJ1Y3R1cmUgaG9sZGluZyBhbiBSR0JBIGNvbG9yLiAqLwov
LyBUeXBlIG9yaWdpbmFsbHkgd2FzIG5hbWVkICdSR0JBJy4KY2xhc3MgUmdiYSA6IHB1YmxpYyBJ
bnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VU
ID0gMCwKICAgICAgICBSX1NFVCA9IDEgPDwgMCwKICAgICAgICBHX1NFVCA9IDEgPDwgMSwKICAg
ICAgICBCX1NFVCA9IDEgPDwgMiwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChSX1NFVCB8IEdf
U0VUIHwgQl9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1
aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jl
c3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYg
Y2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXIoUGFzc1JlZlB0cjxSZ2JhPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJp
ZW5kIGNsYXNzIFJnYmE7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBSX1NF
VD4mIHNldFIoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIFJfU0VUKSwgcHJvcGVydHlfcl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXROdW1iZXIoInIiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8Ul9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgR19TRVQ+JiBz
ZXRHKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBHX1NFVCksIHByb3BlcnR5X2dfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0TnVtYmVyKCJnIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEdf
U0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJfU0VUPiYgc2V0Qihp
bnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
Ql9TRVQpLCBwcm9wZXJ0eV9iX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dE51bWJlcigiYiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxCX1NFVD4o
KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxSZ2JhPiYgKCkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1
bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJl
ZlB0cjxSZ2JhPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNz
UmVmUHRyPFJnYmE+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFJnYmE+
KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3Ry
dWN0b3I6CiAgICAgKiBSZWZQdHI8UmdiYT4gcmVzdWx0ID0gUmdiYTo6Y3JlYXRlKCkKICAgICAq
ICAgICAuc2V0UiguLi4pCiAgICAgKiAgICAgLnNldEcoLi4uKQogICAgICogICAgIC5zZXRCKC4u
Lik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAg
ICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IFJn
YmEoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0QShkb3VibGUgdmFsdWUpCiAgICB7CiAgICAgICAg
dGhpcy0+c2V0TnVtYmVyKCJhIiwgdmFsdWUpOwogICAgfQp9OwoKLyogQ29uZmlndXJhdGlvbiBk
YXRhIGZvciB0aGUgaGlnaGxpZ2h0aW5nIG9mIHBhZ2UgZWxlbWVudHMuICovCmNsYXNzIEhpZ2hs
aWdodENvbmZpZyA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsK
ICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBBTExfRklFTERTX1NFVCA9IDAKICAg
IH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2
YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0
ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAg
ICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEhp
Z2hsaWdodENvbmZpZz4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRl
KTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBj
bGFzcyBIaWdobGlnaHRDb25maWc7CiAgICBwdWJsaWM6CgogICAgICAgIG9wZXJhdG9yIFJlZlB0
cjxIaWdobGlnaHRDb25maWc+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEhpZ2hsaWdodENvbmZpZz4qPigm
bV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxIaWdobGln
aHRDb25maWc+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPEhpZ2hsaWdo
dENvbmZpZz4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRp
YyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxIaWdobGlnaHRDb25maWc+IHJlc3VsdCA9IEhp
Z2hsaWdodENvbmZpZzo6Y3JlYXRlKCk7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJ
RUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERT
X1NFVD4oYWRvcHRSZWYobmV3IEhpZ2hsaWdodENvbmZpZygpKSk7CiAgICB9CgogICAgdm9pZCBz
ZXRTaG93SW5mbyhib29sIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEJvb2xlYW4oInNo
b3dJbmZvIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0Q29udGVudENvbG9yKC8qUGFzc1Jl
ZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpSZ2JhPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoImNvbnRlbnRDb2xvciIsIHZh
bHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFBhZGRpbmdDb2xvcigvKlBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6OkRPTTo6UmdiYT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAg
ICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJwYWRkaW5nQ29sb3IiLCB2YWx1ZSk7CiAgICB9
CgogICAgdm9pZCBzZXRCb3JkZXJDb2xvcigvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6
UmdiYT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAg
dGhpcy0+c2V0T2JqZWN0KCJib3JkZXJDb2xvciIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNl
dE1hcmdpbkNvbG9yKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpSZ2JhPiovIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmpl
Y3QoIm1hcmdpbkNvbG9yIiwgdmFsdWUpOwogICAgfQp9OwoKfSAvLyBET00KCm5hbWVzcGFjZSBD
U1MgewovKiBUaGlzIG9iamVjdCBpZGVudGlmaWVzIGEgQ1NTIHN0eWxlIGluIGEgdW5pcXVlIHdh
eS4gKi8KY2xhc3MgQ1NTU3R5bGVJZCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6
CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBTVFlMRV9TSEVF
VF9JRF9TRVQgPSAxIDw8IDAsCiAgICAgICAgT1JESU5BTF9TRVQgPSAxIDw8IDEsCiAgICAgICAg
QUxMX0ZJRUxEU19TRVQgPSAoU1RZTEVfU0hFRVRfSURfU0VUIHwgT1JESU5BTF9TRVQpCiAgICB9
OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0
ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAg
ICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwg
U1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NT
dHlsZUlkPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAg
ICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENT
U1N0eWxlSWQ7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTVFlMRV9TSEVF
VF9JRF9TRVQ+JiBzZXRTdHlsZVNoZWV0SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTVFlMRV9TSEVFVF9JRF9TRVQp
LCBwcm9wZXJ0eV9zdHlsZVNoZWV0SWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8U1RZTEVfU0hFRVRfSURfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IE9SRElOQUxfU0VUPiYgc2V0T3JkaW5hbChpbnQgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgT1JESU5BTF9TRVQpLCBwcm9wZXJ0
eV9vcmRpbmFsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigi
b3JkaW5hbCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxPUkRJTkFMX1NF
VD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDU1NTdHlsZUlkPiYgKCkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNf
U0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PFJlZlB0cjxDU1NTdHlsZUlkPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBQYXNzUmVmUHRyPENTU1N0eWxlSWQ+ICgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gUmVmUHRyPENTU1N0eWxlSWQ+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAg
IC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTU3R5bGVJ
ZD4gcmVzdWx0ID0gQ1NTU3R5bGVJZDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U3R5bGVTaGVl
dElkKC4uLikKICAgICAqICAgICAuc2V0T3JkaW5hbCguLi4pOwogICAgICovCiAgICBzdGF0aWMg
QnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWls
ZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBDU1NTdHlsZUlkKCkpKTsKICAgIH0KfTsK
Ci8qIFRoaXMgb2JqZWN0IGlkZW50aWZpZXMgYSBDU1MgcnVsZSBpbiBhIHVuaXF1ZSB3YXkuICov
CmNsYXNzIENTU1J1bGVJZCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBl
bnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBTVFlMRV9TSEVFVF9JRF9T
RVQgPSAxIDw8IDAsCiAgICAgICAgT1JESU5BTF9TRVQgPSAxIDw8IDEsCiAgICAgICAgQUxMX0ZJ
RUxEU19TRVQgPSAoU1RZTEVfU0hFRVRfSURfU0VUIHwgT1JESU5BTF9TRVQpCiAgICB9OwoKICAg
IHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8
aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4q
Pih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NSdWxlSWQ+
IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJ
RUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAg
IG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NTUnVsZUlk
OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU1RZTEVfU0hFRVRfSURfU0VU
PiYgc2V0U3R5bGVTaGVldElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1RZTEVfU0hFRVRfSURfU0VUKSwgcHJvcGVy
dHlfc3R5bGVTaGVldElkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygic3R5bGVTaGVldElkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFNUWUxFX1NIRUVUX0lEX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBPUkRJTkFMX1NFVD4mIHNldE9yZGluYWwoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9SRElOQUxfU0VUKSwgcHJvcGVydHlfb3JkaW5h
bF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoIm9yZGluYWwi
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T1JESU5BTF9TRVQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTUnVsZUlkPiYgKCkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1
bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJl
ZlB0cjxDU1NSdWxlSWQ+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9y
IFBhc3NSZWZQdHI8Q1NTUnVsZUlkPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJl
ZlB0cjxDU1NSdWxlSWQ+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTUnVsZUlkPiByZXN1bHQgPSBD
U1NSdWxlSWQ6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFN0eWxlU2hlZXRJZCguLi4pCiAgICAg
KiAgICAgLnNldE9yZGluYWwoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklF
TERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNf
U0VUPihhZG9wdFJlZihuZXcgQ1NTUnVsZUlkKCkpKTsKICAgIH0KfTsKCi8qIENTUyBydWxlIGNv
bGxlY3Rpb24gZm9yIGEgc2luZ2xlIHBzZXVkbyBzdHlsZS4gKi8KY2xhc3MgUHNldWRvSWRSdWxl
cyA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBw
cm9wZXJ0eSBuYW1lICdydWxlcycgd2hpbGUgZ2VuZXJhdGluZyBQc2V1ZG9JZFJ1bGVzLgogICAg
Y2xhc3MgUnVsZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgcHVibGljOgogICAgICAg
IHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4qLyBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0
aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewogICAg
ICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFBTRVVET19JRF9TRVQgPSAxIDw8IDAsCiAg
ICAgICAgUlVMRVNfU0VUID0gMSA8PCAxLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFBTRVVE
T19JRF9TRVQgfCBSVUxFU19TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAg
IGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxQc2V1ZG9JZFJ1bGVzPiBwdHIpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2Ny
ZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAg
ICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFBzZXVkb0lkUnVsZXM7CiAgICBwdWJsaWM6Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQU0VVRE9fSURfU0VUPiYgc2V0UHNldWRvSWQoaW50IHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBTRVVE
T19JRF9TRVQpLCBwcm9wZXJ0eV9wc2V1ZG9JZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXROdW1iZXIoInBzZXVkb0lkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFBTRVVET19JRF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgUlVMRVNfU0VUPiYgc2V0UnVsZXMoLypQYXNzUmVmUHRyPFJ1bGVzPiovIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFJVTEVTX1NFVCksIHByb3BlcnR5X3J1bGVzX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJydWxlcyIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxSVUxFU19TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVy
YXRvciBSZWZQdHI8UHNldWRvSWRSdWxlcz4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UHNldWRvSWRSdWxl
cz4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxQ
c2V1ZG9JZFJ1bGVzPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxQc2V1
ZG9JZFJ1bGVzPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhl
dGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFBzZXVkb0lkUnVsZXM+IHJlc3VsdCA9IFBz
ZXVkb0lkUnVsZXM6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFBzZXVkb0lkKC4uLikKICAgICAq
ICAgICAuc2V0UnVsZXMoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERT
X1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VU
PihhZG9wdFJlZihuZXcgUHNldWRvSWRSdWxlcygpKSk7CiAgICB9Cn07CgovKiBDU1MgcnVsZSBj
b2xsZWN0aW9uIGZvciBhIHNpbmdsZSBwc2V1ZG8gc3R5bGUuICovCmNsYXNzIEluaGVyaXRlZFN0
eWxlRW50cnkgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQg
YWZ0ZXIgcHJvcGVydHkgbmFtZSAnbWF0Y2hlZENTU1J1bGVzJyB3aGlsZSBnZW5lcmF0aW5nIElu
aGVyaXRlZFN0eWxlRW50cnkuCiAgICBjbGFzcyBNYXRjaGVkQ1NTUnVsZXMgOiBwdWJsaWMgSW5z
cGVjdG9yQXJyYXkgewogICAgcHVibGljOgogICAgICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQ
dHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsK
ICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewogICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAog
ICAgICAgIE1BVENIRURfQ1NTX1JVTEVTX1NFVCA9IDEgPDwgMCwKICAgICAgICBBTExfRklFTERT
X1NFVCA9IChNQVRDSEVEX0NTU19SVUxFU19TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBT
VEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxJbmhlcml0ZWRTdHlsZUVudHJ5PiBwdHIp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNf
U0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jl
c3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEluaGVyaXRlZFN0eWxl
RW50cnk7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNQVRDSEVEX0NTU19S
VUxFU19TRVQ+JiBzZXRNYXRjaGVkQ1NTUnVsZXMoLypQYXNzUmVmUHRyPE1hdGNoZWRDU1NSdWxl
cz4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNQVRDSEVEX0NTU19SVUxFU19TRVQpLCBwcm9w
ZXJ0eV9tYXRjaGVkQ1NTUnVsZXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0QXJyYXkoIm1hdGNoZWRDU1NSdWxlcyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxNQVRDSEVEX0NTU19SVUxFU19TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVy
YXRvciBSZWZQdHI8SW5oZXJpdGVkU3R5bGVFbnRyeT4mICgpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9y
ZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8SW5oZXJp
dGVkU3R5bGVFbnRyeT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3Ig
UGFzc1JlZlB0cjxJbmhlcml0ZWRTdHlsZUVudHJ5PiAoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuIFJlZlB0cjxJbmhlcml0ZWRTdHlsZUVudHJ5PigqdGhpcyk7CiAgICAgICAgfQogICAg
fTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPElu
aGVyaXRlZFN0eWxlRW50cnk+IHJlc3VsdCA9IEluaGVyaXRlZFN0eWxlRW50cnk6OmNyZWF0ZSgp
CiAgICAgKiAgICAgLnNldE1hdGNoZWRDU1NSdWxlcyguLi4pOwogICAgICovCiAgICBzdGF0aWMg
QnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWls
ZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBJbmhlcml0ZWRTdHlsZUVudHJ5KCkpKTsK
ICAgIH0KCiAgICB2b2lkIHNldElubGluZVN0eWxlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
Q1NTOjpDU1NTdHlsZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJpbmxpbmVTdHlsZSIsIHZhbHVlKTsKICAgIH0KfTsK
Ci8qIENTUyBzdHlsZSBpbmZvcm1hdGlvbiBmb3IgYSBET00gc3R5bGUgYXR0cmlidXRlLiAqLwpj
bGFzcyBDU1NTdHlsZUF0dHJpYnV0ZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6
CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBOQU1FX1NFVCA9
IDEgPDwgMCwKICAgICAgICBTVFlMRV9TRVQgPSAxIDw8IDEsCiAgICAgICAgQUxMX0ZJRUxEU19T
RVQgPSAoTkFNRV9TRVQgfCBTVFlMRV9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFU
RT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NTdHlsZUF0dHJpYnV0ZT4gcHRyKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQg
PSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDU1NTdHlsZUF0dHJpYnV0ZTsK
ICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5BTUVfU0VUPiYgc2V0TmFtZShj
b25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIE5BTUVfU0VUKSwgcHJvcGVydHlfbmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8TkFNRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgU1RZTEVfU0VUPiYgc2V0U3R5bGUoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNT
U1N0eWxlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTVFlMRV9TRVQpLCBwcm9wZXJ0eV9z
dHlsZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInN0eWxl
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNUWUxFX1NFVD4oKTsKICAg
ICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDU1NTdHlsZUF0dHJpYnV0ZT4mICgpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NF
VCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxSZWZQdHI8Q1NTU3R5bGVBdHRyaWJ1dGU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9Cgog
ICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q1NTU3R5bGVBdHRyaWJ1dGU+ICgpCiAgICAgICAg
ewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENTU1N0eWxlQXR0cmlidXRlPigqdGhpcyk7CiAg
ICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAg
ICogUmVmUHRyPENTU1N0eWxlQXR0cmlidXRlPiByZXN1bHQgPSBDU1NTdHlsZUF0dHJpYnV0ZTo6
Y3JlYXRlKCkKICAgICAqICAgICAuc2V0TmFtZSguLi4pCiAgICAgKiAgICAgLnNldFN0eWxlKC4u
Lik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAg
ICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IENT
U1N0eWxlQXR0cmlidXRlKCkpKTsKICAgIH0KfTsKCi8qIENTUyBzdHlsZXNoZWV0IG1ldGFpbmZv
cm1hdGlvbi4gKi8KY2xhc3MgQ1NTU3R5bGVTaGVldEhlYWRlciA6IHB1YmxpYyBJbnNwZWN0b3JP
YmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAg
ICAgICBTVFlMRV9TSEVFVF9JRF9TRVQgPSAxIDw8IDAsCiAgICAgICAgU09VUkNFX1VfUl9MX1NF
VCA9IDEgPDwgMSwKICAgICAgICBUSVRMRV9TRVQgPSAxIDw8IDIsCiAgICAgICAgRElTQUJMRURf
U0VUID0gMSA8PCAzLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFNUWUxFX1NIRUVUX0lEX1NF
VCB8IFNPVVJDRV9VX1JfTF9TRVQgfCBUSVRMRV9TRVQgfCBESVNBQkxFRF9TRVQpCiAgICB9OwoK
ICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToK
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxh
dGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NTdHls
ZVNoZWV0SGVhZGVyPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUp
OwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNs
YXNzIENTU1N0eWxlU2hlZXRIZWFkZXI7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBTVFlMRV9TSEVFVF9JRF9TRVQ+JiBzZXRTdHlsZVNoZWV0SWQoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTVFlM
RV9TSEVFVF9JRF9TRVQpLCBwcm9wZXJ0eV9zdHlsZVNoZWV0SWRfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQiLCB2YWx1ZSk7CiAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8U1RZTEVfU0hFRVRfSURfU0VUPigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNPVVJDRV9VX1JfTF9TRVQ+JiBzZXRTb3VyY2VVUkwo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBTT1VSQ0VfVV9SX0xfU0VUKSwgcHJvcGVydHlfc291cmNlVVJMX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic291cmNlVVJMIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNPVVJDRV9VX1JfTF9TRVQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVElUTEVfU0VUPiYgc2V0VGl0bGUoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBUSVRMRV9TRVQpLCBwcm9wZXJ0eV90aXRsZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRTdHJpbmcoInRpdGxlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFRJVExFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBESVNBQkxFRF9TRVQ+JiBzZXREaXNhYmxlZChib29sIHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERJU0FCTEVEX1NFVCksIHByb3BlcnR5X2Rp
c2FibGVkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImRp
c2FibGVkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERJU0FCTEVEX1NF
VD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDU1NTdHlsZVNoZWV0SGVh
ZGVyPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFM
TF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NTdHlsZVNoZWV0SGVhZGVyPio+KCZtX3Jlc3VsdCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXRIZWFk
ZXI+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENTU1N0eWxlU2hlZXRI
ZWFkZXI+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMg
Y29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTU3R5bGVTaGVldEhlYWRlcj4gcmVzdWx0ID0g
Q1NTU3R5bGVTaGVldEhlYWRlcjo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U3R5bGVTaGVldElk
KC4uLikKICAgICAqICAgICAuc2V0U291cmNlVVJMKC4uLikKICAgICAqICAgICAuc2V0VGl0bGUo
Li4uKQogICAgICogICAgIC5zZXREaXNhYmxlZCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVp
bGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVy
PE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBDU1NTdHlsZVNoZWV0SGVhZGVyKCkpKTsKICAg
IH0KfTsKCi8qIENTUyBzdHlsZXNoZWV0IGNvbnRlbnRzLiAqLwpjbGFzcyBDU1NTdHlsZVNoZWV0
Qm9keSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRl
ciBwcm9wZXJ0eSBuYW1lICdydWxlcycgd2hpbGUgZ2VuZXJhdGluZyBDU1NTdHlsZVNoZWV0Qm9k
eS4KICAgIGNsYXNzIFJ1bGVzIDogcHVibGljIEluc3BlY3RvckFycmF5IHsKICAgIHB1YmxpYzoK
ICAgICAgICB2b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1
bGU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1ZSk7CiAgICAgICAgfQogICAgfTsKCiAgICBlbnVt
IHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBTVFlMRV9TSEVFVF9JRF9TRVQg
PSAxIDw8IDAsCiAgICAgICAgUlVMRVNfU0VUID0gMSA8PCAxLAogICAgICAgIEFMTF9GSUVMRFNf
U0VUID0gKFNUWUxFX1NIRUVUX0lEX1NFVCB8IFJVTEVTX1NFVCkKICAgIH07CgogICAgdGVtcGxh
dGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXRCb2R5
PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19G
SUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAg
ICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENTU1N0eWxl
U2hlZXRCb2R5OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU1RZTEVfU0hF
RVRfSURfU0VUPiYgc2V0U3R5bGVTaGVldElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1RZTEVfU0hFRVRfSURfU0VU
KSwgcHJvcGVydHlfc3R5bGVTaGVldElkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygic3R5bGVTaGVldElkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFNUWUxFX1NIRUVUX0lEX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBSVUxFU19TRVQ+JiBzZXRSdWxlcygvKlBhc3NSZWZQdHI8UnVsZXM+Ki8gUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgUlVMRVNfU0VUKSwgcHJvcGVydHlfcnVsZXNfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoInJ1bGVzIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFJVTEVTX1NFVD4oKTsKICAgICAgICB9CgogICAgICAg
IG9wZXJhdG9yIFJlZlB0cjxDU1NTdHlsZVNoZWV0Qm9keT4mICgpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25v
dF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NT
U3R5bGVTaGVldEJvZHk+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9y
IFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVldEJvZHk+ICgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gUmVmUHRyPENTU1N0eWxlU2hlZXRCb2R5PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsK
CiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU1N0
eWxlU2hlZXRCb2R5PiByZXN1bHQgPSBDU1NTdHlsZVNoZWV0Qm9keTo6Y3JlYXRlKCkKICAgICAq
ICAgICAuc2V0U3R5bGVTaGVldElkKC4uLikKICAgICAqICAgICAuc2V0UnVsZXMoLi4uKTsKICAg
ICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgQ1NTU3R5bGVT
aGVldEJvZHkoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygidGV4dCIsIHZhbHVlKTsKICAgIH0KfTsK
Ci8qIENTUyBydWxlIHJlcHJlc2VudGF0aW9uLiAqLwpjbGFzcyBDU1NSdWxlIDogcHVibGljIElu
c3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUg
J29yaWdpbicgd2hpbGUgZ2VuZXJhdGluZyBDU1NSdWxlLgogICAgc3RydWN0IE9yaWdpbiB7CiAg
ICAgICAgZW51bSBFbnVtIHsKICAgICAgICAgICAgVXNlciA9IDQwLAogICAgICAgICAgICBVc2Vy
X2FnZW50ID0gNDEsCiAgICAgICAgICAgIEluc3BlY3RvciA9IDQyLAogICAgICAgICAgICBSZWd1
bGFyID0gNDMsCiAgICAgICAgfTsKICAgIH07IC8vIHN0cnVjdCBPcmlnaW4KCiAgICAvLyBOYW1l
ZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdtZWRpYScgd2hpbGUgZ2VuZXJhdGluZyBDU1NSdWxlLgog
ICAgY2xhc3MgTWVkaWEgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgcHVibGljOgogICAg
ICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTTWVkaWE+
Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1ZSk7CiAgICAgICAgfQogICAgfTsKCiAgICBlbnVtIHsK
ICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBTRUxFQ1RPUl9URVhUX1NFVCA9IDEg
PDwgMCwKICAgICAgICBTT1VSQ0VfTElORV9TRVQgPSAxIDw8IDEsCiAgICAgICAgT1JJR0lOX1NF
VCA9IDEgPDwgMiwKICAgICAgICBTVFlMRV9TRVQgPSAxIDw8IDMsCiAgICAgICAgQUxMX0ZJRUxE
U19TRVQgPSAoU0VMRUNUT1JfVEVYVF9TRVQgfCBTT1VSQ0VfTElORV9TRVQgfCBPUklHSU5fU0VU
IHwgU1RZTEVfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBC
dWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9y
ZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4m
IGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyKFBhc3NSZWZQdHI8Q1NTUnVsZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9p
bml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAg
IGZyaWVuZCBjbGFzcyBDU1NSdWxlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgU0VMRUNUT1JfVEVYVF9TRVQ+JiBzZXRTZWxlY3RvclRleHQoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTRUxFQ1RP
Ul9URVhUX1NFVCksIHByb3BlcnR5X3NlbGVjdG9yVGV4dF9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInNlbGVjdG9yVGV4dCIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxTRUxFQ1RPUl9URVhUX1NFVD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBTT1VSQ0VfTElORV9TRVQ+JiBzZXRTb3VyY2VMaW5lKGludCB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTT1VS
Q0VfTElORV9TRVQpLCBwcm9wZXJ0eV9zb3VyY2VMaW5lX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldE51bWJlcigic291cmNlTGluZSIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxTT1VSQ0VfTElORV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgT1JJR0lOX1NFVD4mIHNldE9yaWdpbihPcmlnaW46OkVudW0gdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgT1JJR0lOX1NF
VCksIHByb3BlcnR5X29yaWdpbl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoIm9yaWdpbiIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8T1JJR0lOX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBPUklHSU5fU0VUPiYgc2V0T3JpZ2luKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgT1JJR0lOX1NF
VCksIHByb3BlcnR5X29yaWdpbl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoIm9yaWdpbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxP
UklHSU5fU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNUWUxFX1NF
VD4mIHNldFN0eWxlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4qLyBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgU1RZTEVfU0VUKSwgcHJvcGVydHlfc3R5bGVfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJzdHlsZSIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTVFlMRV9TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTUnVsZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFk
eSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NTUnVsZT4q
PigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NS
dWxlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDU1NSdWxlPigqdGhp
cyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgogICAgICogUmVmUHRyPENTU1J1bGU+IHJlc3VsdCA9IENTU1J1bGU6OmNyZWF0ZSgpCiAgICAg
KiAgICAgLnNldFNlbGVjdG9yVGV4dCguLi4pCiAgICAgKiAgICAgLnNldFNvdXJjZUxpbmUoLi4u
KQogICAgICogICAgIC5zZXRPcmlnaW4oLi4uKQogICAgICogICAgIC5zZXRTdHlsZSguLi4pOwog
ICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewog
ICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBDU1NSdWxl
KCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFJ1bGVJZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6
OkNTUzo6Q1NTUnVsZUlkPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAg
IHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoInJ1bGVJZCIsIHZhbHVlKTsKICAgIH0KCiAgICB2
b2lkIHNldFNvdXJjZVVSTChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMt
PnNldFN0cmluZygic291cmNlVVJMIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U2VsZWN0
b3JSYW5nZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U291cmNlUmFuZ2U+Ki8gUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9i
amVjdCgic2VsZWN0b3JSYW5nZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldE1lZGlhKC8q
UGFzc1JlZlB0cjxNZWRpYT4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAg
IHsKICAgICAgICB0aGlzLT5zZXRBcnJheSgibWVkaWEiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBU
ZXh0IHJhbmdlIHdpdGhpbiBhIHJlc291cmNlLiAqLwpjbGFzcyBTb3VyY2VSYW5nZSA6IHB1Ymxp
YyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNf
U0VUID0gMCwKICAgICAgICBTVEFSVF9TRVQgPSAxIDw8IDAsCiAgICAgICAgRU5EX1NFVCA9IDEg
PDwgMSwKICAgICAgICBBTExfRklFTERTX1NFVCA9IChTVEFSVF9TRVQgfCBFTkRfU0VUKQogICAg
fTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZh
dGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRl
bXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAg
ICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8
IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8U291
cmNlUmFuZ2U+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAg
ICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3Mg
U291cmNlUmFuZ2U7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTVEFSVF9T
RVQ+JiBzZXRTdGFydChpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgU1RBUlRfU0VUKSwgcHJvcGVydHlfc3RhcnRfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzdGFydCIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxTVEFSVF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgRU5EX1NFVD4mIHNldEVuZChpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRU5EX1NFVCksIHByb3BlcnR5X2VuZF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImVuZCIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFTkRfU0VUPigpOwogICAgICAgIH0KCiAgICAg
ICAgb3BlcmF0b3IgUmVmUHRyPFNvdXJjZVJhbmdlPiYgKCkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNfbm90X3Jl
YWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxTb3VyY2VS
YW5nZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0
cjxTb3VyY2VSYW5nZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8U291
cmNlUmFuZ2U+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8U291cmNlUmFuZ2U+IHJlc3VsdCA9IFNvdXJj
ZVJhbmdlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRTdGFydCguLi4pCiAgICAgKiAgICAgLnNl
dEVuZCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVh
dGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVm
KG5ldyBTb3VyY2VSYW5nZSgpKSk7CiAgICB9Cn07CgpjbGFzcyBDU1NDb21wdXRlZFN0eWxlUHJv
cGVydHkgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAg
ICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgTkFNRV9TRVQgPSAxIDw8IDAsCiAgICAgICAg
VkFMVUVfU0VUID0gMSA8PCAxLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKE5BTUVfU0VUIHwg
VkFMVUVfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWls
ZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1
bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
KFBhc3NSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5PiBwdHIpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2Ny
ZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAg
ICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eTsKICAg
IHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5BTUVfU0VUPiYgc2V0TmFtZShjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIE5BTUVfU0VUKSwgcHJvcGVydHlfbmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8TkFNRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
VkFMVUVfU0VUPiYgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWQUxVRV9TRVQpLCBwcm9wZXJ0eV92YWx1
ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInZhbHVlIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZBTFVFX1NFVD4oKTsKICAgICAg
ICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+JiAo
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxE
U19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVmUHRyPENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4qPigmbV9yZXN1bHQpOwog
ICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NDb21wdXRlZFN0eWxlUHJv
cGVydHk+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENTU0NvbXB1dGVk
U3R5bGVQcm9wZXJ0eT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5
bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlUHJvcGVy
dHk+IHJlc3VsdCA9IENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eTo6Y3JlYXRlKCkKICAgICAqICAg
ICAuc2V0TmFtZSguLi4pCiAgICAgKiAgICAgLnNldFZhbHVlKC4uLik7CiAgICAgKi8KICAgIHN0
YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJu
IEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IENTU0NvbXB1dGVkU3R5bGVQcm9w
ZXJ0eSgpKSk7CiAgICB9Cn07CgovKiBDU1Mgc3R5bGUgcmVwcmVzZW50YXRpb24uICovCmNsYXNz
IENTU1N0eWxlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVk
IGFmdGVyIHByb3BlcnR5IG5hbWUgJ2Nzc1Byb3BlcnRpZXMnIHdoaWxlIGdlbmVyYXRpbmcgQ1NT
U3R5bGUuCiAgICBjbGFzcyBDc3NQcm9wZXJ0aWVzIDogcHVibGljIEluc3BlY3RvckFycmF5IHsK
ICAgIHB1YmxpYzoKICAgICAgICB2b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjpDU1M6OkNTU1Byb3BlcnR5PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0K
ICAgIH07CgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnc2hvcnRoYW5kRW50cmll
cycgd2hpbGUgZ2VuZXJhdGluZyBDU1NTdHlsZS4KICAgIGNsYXNzIFNob3J0aGFuZEVudHJpZXMg
OiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgcHVibGljOgogICAgICAgIHZvaWQgYWRkSXRl
bShQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewog
ICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIENTU19QUk9QRVJUSUVTX1NFVCA9IDEg
PDwgMCwKICAgICAgICBTSE9SVEhBTkRfRU5UUklFU19TRVQgPSAxIDw8IDEsCiAgICAgICAgV0lE
VEhfU0VUID0gMSA8PCAyLAogICAgICAgIEhFSUdIVF9TRVQgPSAxIDw8IDMsCiAgICAgICAgQUxM
X0ZJRUxEU19TRVQgPSAoQ1NTX1BST1BFUlRJRVNfU0VUIHwgU0hPUlRIQU5EX0VOVFJJRVNfU0VU
IHwgV0lEVEhfU0VUIHwgSEVJR0hUX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRF
PgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxT
VEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENTU1N0eWxlPiBwdHIpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2Ny
ZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAg
ICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENTU1N0eWxlOwogICAgcHVibGljOgoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQ1NTX1BST1BFUlRJRVNfU0VUPiYgc2V0Q3NzUHJvcGVydGllcygv
KlBhc3NSZWZQdHI8Q3NzUHJvcGVydGllcz4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDU1Nf
UFJPUEVSVElFU19TRVQpLCBwcm9wZXJ0eV9jc3NQcm9wZXJ0aWVzX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJjc3NQcm9wZXJ0aWVzIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENTU19QUk9QRVJUSUVTX1NFVD4oKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTSE9SVEhBTkRfRU5UUklFU19TRVQ+JiBzZXRTaG9y
dGhhbmRFbnRyaWVzKC8qUGFzc1JlZlB0cjxTaG9ydGhhbmRFbnRyaWVzPiovIFBhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIFNIT1JUSEFORF9FTlRSSUVTX1NFVCksIHByb3BlcnR5X3Nob3J0aGFuZEVu
dHJpZXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoInNob3J0
aGFuZEVudHJpZXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U0hPUlRI
QU5EX0VOVFJJRVNfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFdJ
RFRIX1NFVD4mIHNldFdpZHRoKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgV0lEVEhfU0VUKSwgcHJvcGVydHlfd2lkdGhf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ3aWR0aCIsIHZh
bHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxXSURUSF9TRVQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSEVJR0hUX1NFVD4mIHNldEhlaWdodChjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIEhFSUdIVF9TRVQpLCBwcm9wZXJ0eV9oZWlnaHRfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJoZWlnaHQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8SEVJR0hUX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJl
ZlB0cjxDU1NTdHlsZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NTU3R5bGU+Kj4oJm1fcmVzdWx0KTsK
ICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q1NTU3R5bGU+ICgpCiAgICAg
ICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENTU1N0eWxlPigqdGhpcyk7CiAgICAgICAg
fQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVm
UHRyPENTU1N0eWxlPiByZXN1bHQgPSBDU1NTdHlsZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0
Q3NzUHJvcGVydGllcyguLi4pCiAgICAgKiAgICAgLnNldFNob3J0aGFuZEVudHJpZXMoLi4uKQog
ICAgICogICAgIC5zZXRXaWR0aCguLi4pCiAgICAgKiAgICAgLnNldEhlaWdodCguLi4pOwogICAg
ICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAg
ICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBDU1NTdHlsZSgp
KSk7CiAgICB9CgogICAgdm9pZCBzZXRTdHlsZUlkKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
Q1NTOjpDU1NTdHlsZUlkPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAg
IHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoInN0eWxlSWQiLCB2YWx1ZSk7CiAgICB9CgogICAg
dm9pZCBzZXRDc3NUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+
c2V0U3RyaW5nKCJjc3NUZXh0IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0UmFuZ2UoLypQ
YXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNvdXJjZVJhbmdlPiovIFBhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoInJhbmdl
IiwgdmFsdWUpOwogICAgfQp9OwoKLyogQ1NTIHN0eWxlIGVmZmVjdGl2ZSB2aXN1YWwgZGltZW5z
aW9ucyBhbmQgc291cmNlIG9mZnNldHMuICovCmNsYXNzIENTU1Byb3BlcnR5IDogcHVibGljIElu
c3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUg
J3N0YXR1cycgd2hpbGUgZ2VuZXJhdGluZyBDU1NQcm9wZXJ0eS4KICAgIHN0cnVjdCBTdGF0dXMg
ewogICAgICAgIGVudW0gRW51bSB7CiAgICAgICAgICAgIEFjdGl2ZSA9IDQ0LAogICAgICAgICAg
ICBJbmFjdGl2ZSA9IDQ1LAogICAgICAgICAgICBEaXNhYmxlZCA9IDQ2LAogICAgICAgICAgICBT
dHlsZSA9IDQ3LAogICAgICAgIH07CiAgICB9OyAvLyBzdHJ1Y3QgU3RhdHVzCgogICAgZW51bSB7
CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgTkFNRV9TRVQgPSAxIDw8IDAsCiAg
ICAgICAgVkFMVUVfU0VUID0gMSA8PCAxLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKE5BTUVf
U0VUIHwgVkFMVUVfU0VUKQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFz
cyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RF
UD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyKFBhc3NSZWZQdHI8Q1NTUHJvcGVydHk+IHB0cikKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9p
bl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0K
ICAgICAgICBmcmllbmQgY2xhc3MgQ1NTUHJvcGVydHk7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBOQU1FX1NFVD4mIHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOQU1FX1NFVCksIHBy
b3BlcnR5X25hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJuYW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5BTUVfU0VUPigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZBTFVFX1NFVD4mIHNldFZhbHVl
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgVkFMVUVfU0VUKSwgcHJvcGVydHlfdmFsdWVfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxWQUxVRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRv
ciBSZWZQdHI8Q1NTUHJvcGVydHk+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENTU1Byb3BlcnR5Pio+KCZt
X3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENTU1Byb3Bl
cnR5PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDU1NQcm9wZXJ0eT4o
KnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1
Y3RvcjoKICAgICAqIFJlZlB0cjxDU1NQcm9wZXJ0eT4gcmVzdWx0ID0gQ1NTUHJvcGVydHk6OmNy
ZWF0ZSgpCiAgICAgKiAgICAgLnNldE5hbWUoLi4uKQogICAgICogICAgIC5zZXRWYWx1ZSguLi4p
OwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAg
ewogICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBDU1NQ
cm9wZXJ0eSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRQcmlvcml0eShjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygicHJpb3JpdHkiLCB2YWx1ZSk7CiAg
ICB9CgogICAgdm9pZCBzZXRJbXBsaWNpdChib29sIHZhbHVlKQogICAgewogICAgICAgIHRoaXMt
PnNldEJvb2xlYW4oImltcGxpY2l0IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0VGV4dChj
b25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygidGV4dCIs
IHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFBhcnNlZE9rKGJvb2wgdmFsdWUpCiAgICB7CiAg
ICAgICAgdGhpcy0+c2V0Qm9vbGVhbigicGFyc2VkT2siLCB2YWx1ZSk7CiAgICB9CgogICAgdm9p
ZCBzZXRTdGF0dXMoU3RhdHVzOjpFbnVtIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0
cmluZygic3RhdHVzIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgIH0KCiAgICB2
b2lkIHNldFN0YXR1cyhjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNl
dFN0cmluZygic3RhdHVzIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U2hvcnRoYW5kTmFt
ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygic2hv
cnRoYW5kTmFtZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFJhbmdlKC8qUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6Q1NTOjpTb3VyY2VSYW5nZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJyYW5nZSIsIHZhbHVl
KTsKICAgIH0KfTsKCi8qIENTUyBtZWRpYSBxdWVyeSBkZXNjcmlwdG9yLiAqLwpjbGFzcyBDU1NN
ZWRpYSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRl
ciBwcm9wZXJ0eSBuYW1lICdzb3VyY2UnIHdoaWxlIGdlbmVyYXRpbmcgQ1NTTWVkaWEuCiAgICBz
dHJ1Y3QgU291cmNlIHsKICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBNZWRpYVJ1bGUg
PSA0OCwKICAgICAgICAgICAgSW1wb3J0UnVsZSA9IDQ5LAogICAgICAgICAgICBTdHlsZXNoZWV0
ID0gNTAsCiAgICAgICAgfTsKICAgIH07IC8vIHN0cnVjdCBTb3VyY2UKCiAgICBlbnVtIHsKICAg
ICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBURVhUX1NFVCA9IDEgPDwgMCwKICAgICAg
ICBBTExfRklFTERTX1NFVCA9IChURVhUX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNU
QVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRl
cjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENTU01lZGlhPiBwdHIpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsK
ICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENTU01lZGlhOwogICAgcHVibGljOgoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgVEVYVF9TRVQ+JiBzZXRUZXh0KGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVEVYVF9T
RVQpLCBwcm9wZXJ0eV90ZXh0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygidGV4dCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxURVhU
X1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDU1NNZWRpYT4mICgp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBTExfRklFTERT
X1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxSZWZQdHI8Q1NTTWVkaWE+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAg
IG9wZXJhdG9yIFBhc3NSZWZQdHI8Q1NTTWVkaWE+ICgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gUmVmUHRyPENTU01lZGlhPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgog
ICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU01lZGlhPiByZXN1
bHQgPSBDU1NNZWRpYTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VGV4dCguLi4pOwogICAgICov
CiAgICBzdGF0aWMgQnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAg
IHJldHVybiBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBDU1NNZWRpYSgpKSk7
CiAgICB9CgogICAgdm9pZCBzZXRTb3VyY2UoU291cmNlOjpFbnVtIHZhbHVlKQogICAgewogICAg
ICAgIHRoaXMtPnNldFN0cmluZygic291cmNlIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUp
KTsKICAgIH0KCiAgICB2b2lkIHNldFNvdXJjZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewog
ICAgICAgIHRoaXMtPnNldFN0cmluZygic291cmNlIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQg
c2V0U291cmNlVVJMKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0
U3RyaW5nKCJzb3VyY2VVUkwiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRTb3VyY2VMaW5l
KGludCB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXROdW1iZXIoInNvdXJjZUxpbmUiLCB2
YWx1ZSk7CiAgICB9Cn07CgovKiBDU1Mgc2VsZWN0b3IgcHJvZmlsZSBlbnRyeS4gKi8KY2xhc3Mg
U2VsZWN0b3JQcm9maWxlRW50cnkgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgog
ICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NFVCA9IDAsCiAgICAgICAgU0VMRUNUT1JfU0VU
ID0gMSA8PCAwLAogICAgICAgIFVSTF9TRVQgPSAxIDw8IDEsCiAgICAgICAgTElORV9OVU1CRVJf
U0VUID0gMSA8PCAyLAogICAgICAgIFRJTUVfU0VUID0gMSA8PCAzLAogICAgICAgIEhJVF9DT1VO
VF9TRVQgPSAxIDw8IDQsCiAgICAgICAgTUFUQ0hfQ09VTlRfU0VUID0gMSA8PCA1LAogICAgICAg
IEFMTF9GSUVMRFNfU0VUID0gKFNFTEVDVE9SX1NFVCB8IFVSTF9TRVQgfCBMSU5FX05VTUJFUl9T
RVQgfCBUSU1FX1NFVCB8IEhJVF9DT1VOVF9TRVQgfCBNQVRDSF9DT1VOVF9TRVQpCiAgICB9OwoK
ICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToK
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxh
dGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxTZWxlY3Rv
clByb2ZpbGVFbnRyeT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRl
KTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBj
bGFzcyBTZWxlY3RvclByb2ZpbGVFbnRyeTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFNFTEVDVE9SX1NFVD4mIHNldFNlbGVjdG9yKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU0VMRUNUT1JfU0VU
KSwgcHJvcGVydHlfc2VsZWN0b3JfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJzZWxlY3RvciIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxTRUxFQ1RPUl9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVVJM
X1NFVD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVSTF9TRVQpLCBwcm9wZXJ0eV91cmxfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8VVJMX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBMSU5FX05VTUJFUl9TRVQ+JiBzZXRMaW5lTnVtYmVyKGludCB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBMSU5FX05VTUJF
Ul9TRVQpLCBwcm9wZXJ0eV9saW5lTnVtYmVyX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldE51bWJlcigibGluZU51bWJlciIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxMSU5FX05VTUJFUl9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgVElNRV9TRVQ+JiBzZXRUaW1lKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUSU1FX1NFVCksIHByb3BlcnR5X3RpbWVf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJ0aW1lIiwgdmFs
dWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRJTUVfU0VUPigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEhJVF9DT1VOVF9TRVQ+JiBzZXRIaXRDb3VudChpbnQg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSElU
X0NPVU5UX1NFVCksIHByb3BlcnR5X2hpdENvdW50X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE51bWJlcigiaGl0Q291bnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8SElUX0NPVU5UX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBNQVRDSF9DT1VOVF9TRVQ+JiBzZXRNYXRjaENvdW50KGludCB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNQVRDSF9DT1VOVF9TRVQp
LCBwcm9wZXJ0eV9tYXRjaENvdW50X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE51bWJlcigibWF0Y2hDb3VudCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxNQVRDSF9DT1VOVF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQ
dHI8U2VsZWN0b3JQcm9maWxlRW50cnk+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFNlbGVjdG9yUHJvZmls
ZUVudHJ5Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVm
UHRyPFNlbGVjdG9yUHJvZmlsZUVudHJ5PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJu
IFJlZlB0cjxTZWxlY3RvclByb2ZpbGVFbnRyeT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07Cgog
ICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxTZWxlY3Rv
clByb2ZpbGVFbnRyeT4gcmVzdWx0ID0gU2VsZWN0b3JQcm9maWxlRW50cnk6OmNyZWF0ZSgpCiAg
ICAgKiAgICAgLnNldFNlbGVjdG9yKC4uLikKICAgICAqICAgICAuc2V0VXJsKC4uLikKICAgICAq
ICAgICAuc2V0TGluZU51bWJlciguLi4pCiAgICAgKiAgICAgLnNldFRpbWUoLi4uKQogICAgICog
ICAgIC5zZXRIaXRDb3VudCguLi4pCiAgICAgKiAgICAgLnNldE1hdGNoQ291bnQoLi4uKTsKICAg
ICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgU2VsZWN0b3JQ
cm9maWxlRW50cnkoKSkpOwogICAgfQp9OwoKY2xhc3MgU2VsZWN0b3JQcm9maWxlIDogcHVibGlj
IEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5h
bWUgJ2RhdGEnIHdoaWxlIGdlbmVyYXRpbmcgU2VsZWN0b3JQcm9maWxlLgogICAgY2xhc3MgRGF0
YSA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7CiAgICBwdWJsaWM6CiAgICAgICAgdm9pZCBhZGRJ
dGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTZWxlY3RvclByb2ZpbGVFbnRyeT4q
LyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewog
ICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAogICAgICAgIFRPVEFMX1RJTUVfU0VUID0gMSA8PCAw
LAogICAgICAgIERBVEFfU0VUID0gMSA8PCAxLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFRP
VEFMX1RJTUVfU0VUIHwgREFUQV9TRVQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4K
ICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxTZWxlY3RvclByb2ZpbGU+IHB0cikKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxk
ZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRy
OwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgU2VsZWN0b3JQcm9maWxlOwogICAgcHVi
bGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVE9UQUxfVElNRV9TRVQ+JiBzZXRUb3RhbFRp
bWUoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFRPVEFMX1RJTUVfU0VUKSwgcHJvcGVydHlfdG90YWxUaW1lX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigidG90YWxUaW1lIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRPVEFMX1RJTUVfU0VUPigpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IERBVEFfU0VUPiYgc2V0RGF0YSgvKlBhc3NSZWZQdHI8RGF0
YT4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBEQVRBX1NFVCksIHByb3BlcnR5X2RhdGFfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImRhdGEiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8REFUQV9TRVQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBSZWZQdHI8U2VsZWN0b3JQcm9maWxlPiYgKCkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFMTF9GSUVMRFNfU0VULCByZXN1bHRfaXNf
bm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxT
ZWxlY3RvclByb2ZpbGU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9y
IFBhc3NSZWZQdHI8U2VsZWN0b3JQcm9maWxlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuIFJlZlB0cjxTZWxlY3RvclByb2ZpbGU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAg
IC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8U2VsZWN0b3JQ
cm9maWxlPiByZXN1bHQgPSBTZWxlY3RvclByb2ZpbGU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNl
dFRvdGFsVGltZSguLi4pCiAgICAgKiAgICAgLnNldERhdGEoLi4uKTsKICAgICAqLwogICAgc3Rh
dGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4g
QnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgU2VsZWN0b3JQcm9maWxlKCkpKTsK
ICAgIH0KfTsKCn0gLy8gQ1NTCgpuYW1lc3BhY2UgVGltZWxpbmUgewovKiBUaW1lbGluZSByZWNv
cmQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlY29yZGVkIGFjdGl2aXR5LiAqLwpj
bGFzcyBUaW1lbGluZUV2ZW50IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAg
IC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2NoaWxkcmVuJyB3aGlsZSBnZW5lcmF0aW5n
IFRpbWVsaW5lRXZlbnQuCiAgICBjbGFzcyBDaGlsZHJlbiA6IHB1YmxpYyBJbnNwZWN0b3JBcnJh
eSB7CiAgICBwdWJsaWM6CiAgICAgICAgdm9pZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVp
bGRlcjo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1ZSk7
CiAgICAgICAgfQogICAgfTsKCiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwK
ICAgICAgICBUWVBFX1NFVCA9IDEgPDwgMCwKICAgICAgICBEQVRBX1NFVCA9IDEgPDwgMSwKICAg
ICAgICBBTExfRklFTERTX1NFVCA9IChUWVBFX1NFVCB8IERBVEFfU0VUKQogICAgfTsKCiAgICB0
ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGlu
dCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4o
dGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8VGltZWxpbmVFdmVu
dD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9f
RklFTERTX1NFVCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAg
ICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBUaW1lbGlu
ZUV2ZW50OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVFlQRV9TRVQ+JiBz
ZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxUWVBFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBEQVRBX1NFVD4mIHNldERhdGEoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERB
VEFfU0VUKSwgcHJvcGVydHlfZGF0YV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRPYmplY3QoImRhdGEiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
REFUQV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8VGltZWxpbmVF
dmVudD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBB
TExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8VGltZWxpbmVFdmVudD4qPigmbV9yZXN1bHQpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxUaW1lbGluZUV2ZW50PiAoKQogICAg
ICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxUaW1lbGluZUV2ZW50PigqdGhpcyk7CiAg
ICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAg
ICogUmVmUHRyPFRpbWVsaW5lRXZlbnQ+IHJlc3VsdCA9IFRpbWVsaW5lRXZlbnQ6OmNyZWF0ZSgp
CiAgICAgKiAgICAgLnNldFR5cGUoLi4uKQogICAgICogICAgIC5zZXREYXRhKC4uLik7CiAgICAg
Ki8KICAgIHN0YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCiAgICB7CiAgICAg
ICAgcmV0dXJuIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4oYWRvcHRSZWYobmV3IFRpbWVsaW5lRXZl
bnQoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0Q2hpbGRyZW4oLypQYXNzUmVmUHRyPENoaWxkcmVu
PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMt
PnNldEFycmF5KCJjaGlsZHJlbiIsIHZhbHVlKTsKICAgIH0KfTsKCn0gLy8gVGltZWxpbmUKCiNp
ZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKbmFtZXNwYWNlIERlYnVnZ2VyIHsKLyogQnJl
YWtwb2ludCBpZGVudGlmaWVyLiAqLwp0eXBlZGVmIFN0cmluZyBCcmVha3BvaW50SWQ7CgovKiBV
bmlxdWUgc2NyaXB0IGlkZW50aWZpZXIuICovCnR5cGVkZWYgU3RyaW5nIFNjcmlwdElkOwoKLyog
Q2FsbCBmcmFtZSBpZGVudGlmaWVyLiAqLwp0eXBlZGVmIFN0cmluZyBDYWxsRnJhbWVJZDsKCi8q
IExvY2F0aW9uIGluIHRoZSBzb3VyY2UgY29kZS4gKi8KY2xhc3MgTG9jYXRpb24gOiBwdWJsaWMg
SW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTk9fRklFTERTX1NF
VCA9IDAsCiAgICAgICAgU0NSSVBUX0lEX1NFVCA9IDEgPDwgMCwKICAgICAgICBMSU5FX05VTUJF
Ul9TRVQgPSAxIDw8IDEsCiAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoU0NSSVBUX0lEX1NFVCB8
IExJTkVfTlVNQkVSX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xh
c3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNU
RVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcihQYXNzUmVmUHRyPExvY2F0aW9uPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5f
bm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAg
ICAgICAgZnJpZW5kIGNsYXNzIExvY2F0aW9uOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgU0NSSVBUX0lEX1NFVD4mIHNldFNjcmlwdElkKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU0NSSVBUX0lE
X1NFVCksIHByb3BlcnR5X3NjcmlwdElkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygic2NyaXB0SWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8U0NSSVBUX0lEX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBMSU5FX05VTUJFUl9TRVQ+JiBzZXRMaW5lTnVtYmVyKGludCB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBMSU5FX05VTUJFUl9TRVQpLCBwcm9w
ZXJ0eV9saW5lTnVtYmVyX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51
bWJlcigibGluZU51bWJlciIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxM
SU5FX05VTUJFUl9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8TG9j
YXRpb24+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
QUxMX0ZJRUxEU19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPExvY2F0aW9uPio+KCZtX3Jlc3VsdCk7CiAgICAgICAg
fQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPExvY2F0aW9uPiAoKQogICAgICAgIHsKICAg
ICAgICAgICAgcmV0dXJuIFJlZlB0cjxMb2NhdGlvbj4oKnRoaXMpOwogICAgICAgIH0KICAgIH07
CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxMb2Nh
dGlvbj4gcmVzdWx0ID0gTG9jYXRpb246OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFNjcmlwdElk
KC4uLikKICAgICAqICAgICAuc2V0TGluZU51bWJlciguLi4pOwogICAgICovCiAgICBzdGF0aWMg
QnVpbGRlcjxOT19GSUVMRFNfU0VUPiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWls
ZGVyPE5PX0ZJRUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBMb2NhdGlvbigpKSk7CiAgICB9CgogICAg
dm9pZCBzZXRDb2x1bW5OdW1iZXIoaW50IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE51
bWJlcigiY29sdW1uTnVtYmVyIiwgdmFsdWUpOwogICAgfQp9OwoKLyogSmF2YVNjcmlwdCBjYWxs
IGZyYW1lLiBBcnJheSBvZiBjYWxsIGZyYW1lcyBmb3JtIHRoZSBjYWxsIHN0YWNrLiAqLwpjbGFz
cyBDYWxsRnJhbWUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFt
ZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnc2NvcGVDaGFpbicgd2hpbGUgZ2VuZXJhdGluZyBDYWxs
RnJhbWUuCiAgICBjbGFzcyBTY29wZUNoYWluIDogcHVibGljIEluc3BlY3RvckFycmF5IHsKICAg
IHB1YmxpYzoKICAgICAgICB2b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpE
ZWJ1Z2dlcjo6U2NvcGU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1ZSk7CiAgICAgICAgfQogICAg
fTsKCiAgICBlbnVtIHsKICAgICAgICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBDQUxMX0ZS
QU1FX0lEX1NFVCA9IDEgPDwgMCwKICAgICAgICBGVU5DVElPTl9OQU1FX1NFVCA9IDEgPDwgMSwK
ICAgICAgICBMT0NBVElPTl9TRVQgPSAxIDw8IDIsCiAgICAgICAgU0NPUEVfQ0hBSU5fU0VUID0g
MSA8PCAzLAogICAgICAgIFRISVNfU0VUID0gMSA8PCA0LAogICAgICAgIEFMTF9GSUVMRFNfU0VU
ID0gKENBTExfRlJBTUVfSURfU0VUIHwgRlVOQ1RJT05fTkFNRV9TRVQgfCBMT0NBVElPTl9TRVQg
fCBTQ09QRV9DSEFJTl9TRVQgfCBUSElTX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNU
QVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRl
cjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENhbGxGcmFtZT4gcHRyKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTk9fRklFTERTX1NFVCwgYnVpbGRl
cl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7
CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDYWxsRnJhbWU7CiAgICBwdWJsaWM6Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDQUxMX0ZSQU1FX0lEX1NFVD4mIHNldENhbGxGcmFtZUlk
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgQ0FMTF9GUkFNRV9JRF9TRVQpLCBwcm9wZXJ0eV9jYWxsRnJhbWVJZF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImNhbGxGcmFtZUlkIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENBTExfRlJBTUVfSURfU0VUPigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEZVTkNUSU9OX05BTUVfU0VUPiYg
c2V0RnVuY3Rpb25OYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRlVOQ1RJT05fTkFNRV9TRVQpLCBwcm9wZXJ0eV9m
dW5jdGlvbk5hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJmdW5jdGlvbk5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RlVO
Q1RJT05fTkFNRV9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTE9D
QVRJT05fU0VUPiYgc2V0TG9jYXRpb24oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dl
cjo6TG9jYXRpb24+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExPQ0FUSU9OX1NFVCksIHBy
b3BlcnR5X2xvY2F0aW9uX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9i
amVjdCgibG9jYXRpb24iLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TE9D
QVRJT05fU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNDT1BFX0NI
QUlOX1NFVD4mIHNldFNjb3BlQ2hhaW4oLypQYXNzUmVmUHRyPFNjb3BlQ2hhaW4+Ki8gUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgU0NPUEVfQ0hBSU5fU0VUKSwgcHJvcGVydHlfc2NvcGVDaGFpbl9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgic2NvcGVDaGFpbiIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTQ09QRV9DSEFJTl9TRVQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVEhJU19TRVQ+JiBzZXRUaGlzKC8q
UGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBUSElTX1NFVCksIHByb3BlcnR5X3RoaXNfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ0aGlzIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFRISVNfU0VUPigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0
b3IgUmVmUHRyPENhbGxGcmFtZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q2FsbEZyYW1lPio+KCZtX3Jl
c3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENhbGxGcmFtZT4g
KCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q2FsbEZyYW1lPigqdGhpcyk7
CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgog
ICAgICogUmVmUHRyPENhbGxGcmFtZT4gcmVzdWx0ID0gQ2FsbEZyYW1lOjpjcmVhdGUoKQogICAg
ICogICAgIC5zZXRDYWxsRnJhbWVJZCguLi4pCiAgICAgKiAgICAgLnNldEZ1bmN0aW9uTmFtZSgu
Li4pCiAgICAgKiAgICAgLnNldExvY2F0aW9uKC4uLikKICAgICAqICAgICAuc2V0U2NvcGVDaGFp
biguLi4pCiAgICAgKiAgICAgLnNldFRoaXMoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxk
ZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxO
T19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcgQ2FsbEZyYW1lKCkpKTsKICAgIH0KfTsKCi8qIFNj
b3BlIGRlc2NyaXB0aW9uLiAqLwpjbGFzcyBTY29wZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qg
ewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBn
ZW5lcmF0aW5nIFNjb3BlLgogICAgc3RydWN0IFR5cGUgewogICAgICAgIGVudW0gRW51bSB7CiAg
ICAgICAgICAgIEdsb2JhbCA9IDUxLAogICAgICAgICAgICBMb2NhbCA9IDUyLAogICAgICAgICAg
ICBXaXRoID0gNTMsCiAgICAgICAgICAgIENsb3N1cmUgPSA1NCwKICAgICAgICAgICAgQ2F0Y2gg
PSA1NSwKICAgICAgICB9OwogICAgfTsgLy8gc3RydWN0IFR5cGUKCiAgICBlbnVtIHsKICAgICAg
ICBOT19GSUVMRFNfU0VUID0gMCwKICAgICAgICBUWVBFX1NFVCA9IDEgPDwgMCwKICAgICAgICBP
QkpFQ1RfU0VUID0gMSA8PCAxLAogICAgICAgIEFMTF9GSUVMRFNfU0VUID0gKFRZUEVfU0VUIHwg
T0JKRUNUX1NFVCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVp
bGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVz
dWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBj
YXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cihQYXNzUmVmUHRyPFNjb3BlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOT19GSUVMRFNfU0VULCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJp
ZW5kIGNsYXNzIFNjb3BlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVFlQ
RV9TRVQ+JiBzZXRUeXBlKFR5cGU6OkVudW0gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIGdldEVudW1Db25z
dGFudFZhbHVlKHZhbHVlKSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VFlQRV9TRVQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVFlQRV9TRVQ+JiBzZXRUeXBl
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxUWVBFX1NFVD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBPQkpFQ1RfU0VUPiYgc2V0T2JqZWN0KC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPQkpFQ1RfU0VU
KSwgcHJvcGVydHlfb2JqZWN0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dE9iamVjdCgib2JqZWN0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9C
SkVDVF9TRVQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8U2NvcGU+JiAo
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxE
U19TRVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVmUHRyPFNjb3BlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBv
cGVyYXRvciBQYXNzUmVmUHRyPFNjb3BlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJu
IFJlZlB0cjxTY29wZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5
bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxTY29wZT4gcmVzdWx0ID0gU2NvcGU6
OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFR5cGUoLi4uKQogICAgICogICAgIC5zZXRPYmplY3Qo
Li4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4gY3JlYXRlKCkK
ICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNfU0VUPihhZG9wdFJlZihuZXcg
U2NvcGUoKSkpOwogICAgfQp9OwoKfSAvLyBEZWJ1Z2dlcgoKI2VuZGlmIC8vIEVOQUJMRShKQVZB
U0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCm5hbWVzcGFj
ZSBET01EZWJ1Z2dlciB7Ci8qIERPTSBicmVha3BvaW50IHR5cGUuICovCnN0cnVjdCBET01CcmVh
a3BvaW50VHlwZSB7CiAgICBlbnVtIEVudW0gewogICAgICAgIFN1YnRyZWVfbW9kaWZpZWQgPSA1
NiwKICAgICAgICBBdHRyaWJ1dGVfbW9kaWZpZWQgPSA1NywKICAgICAgICBOb2RlX3JlbW92ZWQg
PSA1OCwKICAgIH07Cn07IC8vIHN0cnVjdCBET01CcmVha3BvaW50VHlwZQoKfSAvLyBET01EZWJ1
Z2dlcgoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCm5hbWVzcGFjZSBQcm9maWxlciB7Cn0gLy8gUHJvZmlsZXIKCiNl
bmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCn0gLy8gbmFtZXNwYWNlIFR5cGVC
dWlsZGVyCgojZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKCmNsYXNzIEluc3BlY3RvckZyb250
ZW5kIHsKcHVibGljOgogICAgSW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKik7CgoKICAgIGNsYXNzIEluc3BlY3RvciB7CiAgICBwdWJsaWM6CiAgICAgICAgSW5zcGVj
dG9yKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9
CiAgICAgICAgdm9pZCBldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGludCB0ZXN0Q2FsbElkLCBj
b25zdCBTdHJpbmcmIHNjcmlwdCk7CiAgICAgICAgdm9pZCBpbnNwZWN0KC8qUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBvYmplY3QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBoaW50cyk7CiAgICAg
ICAgdm9pZCBkaWRDcmVhdGVXb3JrZXIoaW50IGlkLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBp
c1NoYXJlZCk7CiAgICAgICAgdm9pZCBkaWREZXN0cm95V29ya2VyKGludCBpZCk7CiAgICAgICAg
dm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwg
PSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIEluc3BlY3Rv
ciogaW5zcGVjdG9yKCkgeyByZXR1cm4gJm1faW5zcGVjdG9yOyB9CgogICAgY2xhc3MgTWVtb3J5
IHsKICAgIHB1YmxpYzoKICAgICAgICBNZW1vcnkoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAg
IHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgTWVtb3J5KiBtZW1vcnkoKSB7IHJldHVybiAmbV9t
ZW1vcnk7IH0KCiAgICBjbGFzcyBQYWdlIHsKICAgIHB1YmxpYzoKICAgICAgICBQYWdlKEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAg
dm9pZCBkb21Db250ZW50RXZlbnRGaXJlZChkb3VibGUgdGltZXN0YW1wKTsKICAgICAgICB2b2lk
IGxvYWRFdmVudEZpcmVkKGRvdWJsZSB0aW1lc3RhbXApOwogICAgICAgIHZvaWQgZnJhbWVOYXZp
Z2F0ZWQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZT4qLyBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gZnJhbWUpOwogICAgICAgIHZvaWQgZnJhbWVEZXRhY2hlZChjb25z
dCBTdHJpbmcmIGZyYW1lSWQpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9
CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0
ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsOwogICAgfTsKCiAgICBQYWdlKiBwYWdlKCkgeyByZXR1cm4gJm1fcGFnZTsgfQoKICAg
IGNsYXNzIFJ1bnRpbWUgewogICAgcHVibGljOgogICAgICAgIFJ1bnRpbWUoSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIHNl
dEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
Z2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgUnVudGltZSogcnVudGlt
ZSgpIHsgcmV0dXJuICZtX3J1bnRpbWU7IH0KCiAgICBjbGFzcyBDb25zb2xlIHsKICAgIHB1Ymxp
YzoKICAgICAgICBDb25zb2xlKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBtZXNzYWdlQWRkZWQoLypQYXNzUmVmUHRyPFR5
cGVCdWlsZGVyOjpDb25zb2xlOjpDb25zb2xlTWVzc2FnZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gbWVzc2FnZSk7CiAgICAgICAgdm9pZCBtZXNzYWdlUmVwZWF0Q291bnRVcGRhdGVk
KGludCBjb3VudCk7CiAgICAgICAgdm9pZCBtZXNzYWdlc0NsZWFyZWQoKTsKICAgICAgICB2b2lk
IHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgQ29uc29sZSogY29u
c29sZSgpIHsgcmV0dXJuICZtX2NvbnNvbGU7IH0KCiAgICBjbGFzcyBOZXR3b3JrIHsKICAgIHB1
YmxpYzoKICAgICAgICBOZXR3b3JrKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCByZXF1ZXN0V2lsbEJlU2VudChjb25zdCBT
dHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIGxv
YWRlcklkLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxk
ZXI6Ok5ldHdvcms6OlJlcXVlc3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVl
c3QsIGRvdWJsZSB0aW1lc3RhbXAsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6
SW5pdGlhdG9yPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbml0aWF0b3IsIC8qUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6Q29uc29sZTo6U3RhY2tUcmFjZT4qLyBQYXNzUmVmUHRyPElu
c3BlY3RvckFycmF5PiBzdGFja1RyYWNlLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdv
cms6OlJlc3BvbnNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZWRpcmVjdFJlc3Bv
bnNlKTsKICAgICAgICB2b2lkIHJlcXVlc3RTZXJ2ZWRGcm9tQ2FjaGUoY29uc3QgU3RyaW5nJiBy
ZXF1ZXN0SWQpOwogICAgICAgIHZvaWQgcmVzcG9uc2VSZWNlaXZlZChjb25zdCBTdHJpbmcmIHJl
cXVlc3RJZCwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIGxvYWRlcklkLCBk
b3VibGUgdGltZXN0YW1wLCAvKlR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkVudW0q
LyBjb25zdCBTdHJpbmcmIHR5cGUsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6
UmVzcG9uc2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3BvbnNlKTsKICAgICAg
ICB2b2lkIGRhdGFSZWNlaXZlZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVz
dGFtcCwgaW50IGRhdGFMZW5ndGgsIGludCBlbmNvZGVkRGF0YUxlbmd0aCk7CiAgICAgICAgdm9p
ZCBsb2FkaW5nRmluaXNoZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3Rh
bXApOwogICAgICAgIHZvaWQgbG9hZGluZ0ZhaWxlZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwg
ZG91YmxlIHRpbWVzdGFtcCwgY29uc3QgU3RyaW5nJiBlcnJvclRleHQsIGNvbnN0IGJvb2wqIGNv
bnN0IGNhbmNlbGVkKTsKICAgICAgICB2b2lkIHJlcXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGUo
Y29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3Ry
aW5nJiBsb2FkZXJJZCwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgZG91YmxlIHRpbWVzdGFt
cCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpJbml0aWF0b3I+Ki8gUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluaXRpYXRvciwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjpOZXR3b3JrOjpDYWNoZWRSZXNvdXJjZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzb3VyY2UpOwogICAgICAgIHZvaWQgd2ViU29ja2V0V2lsbFNlbmRIYW5kc2hha2VSZXF1ZXN0
KGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wLCAvKlBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OldlYlNvY2tldFJlcXVlc3Q+Ki8gUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlcXVlc3QpOwogICAgICAgIHZvaWQgd2ViU29ja2V0SGFuZHNoYWtlUmVz
cG9uc2VSZWNlaXZlZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCwg
LypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpXZWJTb2NrZXRSZXNwb25zZT4qLyBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2UpOwogICAgICAgIHZvaWQgd2ViU29j
a2V0Q3JlYXRlZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiB1cmwpOwog
ICAgICAgIHZvaWQgd2ViU29ja2V0Q2xvc2VkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3Vi
bGUgdGltZXN0YW1wKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAg
ICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAg
ICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bDsKICAgIH07CgogICAgTmV0d29yayogbmV0d29yaygpIHsgcmV0dXJuICZtX25ldHdvcms7IH0K
CiNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogICAgY2xhc3MgRGF0YWJhc2UgewogICAgcHVibGlj
OgogICAgICAgIERhdGFiYXNlKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBhZGREYXRhYmFzZSgvKlBhc3NSZWZQdHI8VHlw
ZUJ1aWxkZXI6OkRhdGFiYXNlOjpEYXRhYmFzZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gZGF0YWJhc2UpOwogICAgICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciBuYW1lICdjb2x1
bW5OYW1lcycgd2hpbGUgZ2VuZXJhdGluZyBldmVudCBzcWxUcmFuc2FjdGlvblN1Y2NlZWRlZC4K
ICAgICAgICBjbGFzcyBDb2x1bW5OYW1lcyA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7CiAgICAg
ICAgcHVibGljOgogICAgICAgICAgICB2b2lkIGFkZEl0ZW0oY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+cHVzaFN0cmluZyh2YWx1ZSk7CiAg
ICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIg
bmFtZSAndmFsdWVzJyB3aGlsZSBnZW5lcmF0aW5nIGV2ZW50IHNxbFRyYW5zYWN0aW9uU3VjY2Vl
ZGVkLgogICAgICAgIGNsYXNzIFZhbHVlcyA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7CiAgICAg
ICAgcHVibGljOgogICAgICAgICAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4gdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnB1c2hWYWx1
ZSh2YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICB2b2lkIHNxbFRyYW5z
YWN0aW9uU3VjY2VlZGVkKGludCB0cmFuc2FjdGlvbklkLCAvKlBhc3NSZWZQdHI8Q29sdW1uTmFt
ZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gY29sdW1uTmFtZXMsIC8qUGFzc1JlZlB0
cjxWYWx1ZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWVzKTsKICAgICAgICB2
b2lkIHNxbFRyYW5zYWN0aW9uRmFpbGVkKGludCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gc3FsRXJyb3IpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAg
cHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBEYXRhYmFzZSogZGF0YWJhc2UoKSB7IHJldHVybiAm
bV9kYXRhYmFzZTsgfQoKI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCiAgICBjbGFzcyBE
T01TdG9yYWdlIHsKICAgIHB1YmxpYzoKICAgICAgICBET01TdG9yYWdlKEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBhZGRE
T01TdG9yYWdlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NU3RvcmFnZTo6RW50cnk+Ki8g
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHN0b3JhZ2UpOwogICAgICAgIHZvaWQgdXBkYXRl
RE9NU3RvcmFnZShpbnQgc3RvcmFnZUlkKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAg
IHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgRE9NU3RvcmFnZSogZG9tc3RvcmFnZSgpIHsgcmV0
dXJuICZtX2RvbXN0b3JhZ2U7IH0KCiAgICBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlIHsKICAgIHB1
YmxpYzoKICAgICAgICBBcHBsaWNhdGlvbkNhY2hlKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBhcHBsaWNhdGlvbkNhY2hl
U3RhdHVzVXBkYXRlZChjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgbWFuaWZl
c3RVUkwsIGludCBzdGF0dXMpOwogICAgICAgIHZvaWQgbmV0d29ya1N0YXRlVXBkYXRlZChib29s
IGlzTm93T25saW5lKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAg
ICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAg
ICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bDsKICAgIH07CgogICAgQXBwbGljYXRpb25DYWNoZSogYXBwbGljYXRpb25jYWNoZSgpIHsgcmV0
dXJuICZtX2FwcGxpY2F0aW9uY2FjaGU7IH0KCiNpZiBFTkFCTEUoRklMRV9TWVNURU0pCiAgICBj
bGFzcyBGaWxlU3lzdGVtIHsKICAgIHB1YmxpYzoKICAgICAgICBGaWxlU3lzdGVtKEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9p
ZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIEZpbGVTeXN0ZW0q
IGZpbGVzeXN0ZW0oKSB7IHJldHVybiAmbV9maWxlc3lzdGVtOyB9CgojZW5kaWYgLy8gRU5BQkxF
KEZJTEVfU1lTVEVNKQogICAgY2xhc3MgRE9NIHsKICAgIHB1YmxpYzoKICAgICAgICBET00oSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAg
ICB2b2lkIGRvY3VtZW50VXBkYXRlZCgpOwogICAgICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRl
ciBuYW1lICdub2Rlcycgd2hpbGUgZ2VuZXJhdGluZyBldmVudCBzZXRDaGlsZE5vZGVzLgogICAg
ICAgIGNsYXNzIE5vZGVzIDogcHVibGljIEluc3BlY3RvckFycmF5IHsKICAgICAgICBwdWJsaWM6
CiAgICAgICAgICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6
Tm9kZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgICAgICB9CiAg
ICAgICAgfTsKCiAgICAgICAgdm9pZCBzZXRDaGlsZE5vZGVzKGludCBwYXJlbnRJZCwgLypQYXNz
UmVmUHRyPE5vZGVzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG5vZGVzKTsKICAgICAg
ICB2b2lkIGF0dHJpYnV0ZU1vZGlmaWVkKGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgICAgdm9pZCBhdHRyaWJ1dGVSZW1vdmVkKGludCBu
b2RlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1l
dGVyIG5hbWUgJ25vZGVJZHMnIHdoaWxlIGdlbmVyYXRpbmcgZXZlbnQgaW5saW5lU3R5bGVJbnZh
bGlkYXRlZC4KICAgICAgICBjbGFzcyBOb2RlSWRzIDogcHVibGljIEluc3BlY3RvckFycmF5IHsK
ICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIHZvaWQgYWRkSXRlbShpbnQgdmFsdWUpCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnB1c2hOdW1iZXIodmFsdWUpOwogICAgICAg
ICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgdm9pZCBpbmxpbmVTdHlsZUludmFsaWRhdGVkKC8q
UGFzc1JlZlB0cjxOb2RlSWRzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG5vZGVJZHMp
OwogICAgICAgIHZvaWQgY2hhcmFjdGVyRGF0YU1vZGlmaWVkKGludCBub2RlSWQsIGNvbnN0IFN0
cmluZyYgY2hhcmFjdGVyRGF0YSk7CiAgICAgICAgdm9pZCBjaGlsZE5vZGVDb3VudFVwZGF0ZWQo
aW50IG5vZGVJZCwgaW50IGNoaWxkTm9kZUNvdW50KTsKICAgICAgICB2b2lkIGNoaWxkTm9kZUlu
c2VydGVkKGludCBwYXJlbnROb2RlSWQsIGludCBwcmV2aW91c05vZGVJZCwgLypQYXNzUmVmUHRy
PFR5cGVCdWlsZGVyOjpET006Ok5vZGU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG5v
ZGUpOwogICAgICAgIHZvaWQgY2hpbGROb2RlUmVtb3ZlZChpbnQgcGFyZW50Tm9kZUlkLCBpbnQg
bm9kZUlkKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyBy
ZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAg
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAg
IH07CgogICAgRE9NKiBkb20oKSB7IHJldHVybiAmbV9kb207IH0KCiAgICBjbGFzcyBDU1Mgewog
ICAgcHVibGljOgogICAgICAgIENTUyhJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgbWVkaWFRdWVyeVJlc3VsdENoYW5nZWQo
KTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4g
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07Cgog
ICAgQ1NTKiBjc3MoKSB7IHJldHVybiAmbV9jc3M7IH0KCiAgICBjbGFzcyBUaW1lbGluZSB7CiAg
ICBwdWJsaWM6CiAgICAgICAgVGltZWxpbmUoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGV2ZW50UmVjb3JkZWQoLypQYXNz
UmVmUHRyPFR5cGVCdWlsZGVyOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudD4qLyBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcmVjb3JkKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAg
IHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgVGltZWxpbmUqIHRpbWVsaW5lKCkgeyByZXR1cm4g
Jm1fdGltZWxpbmU7IH0KCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgIGNsYXNz
IERlYnVnZ2VyIHsKICAgIHB1YmxpYzoKICAgICAgICBEZWJ1Z2dlcihJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgZ2xvYmFs
T2JqZWN0Q2xlYXJlZCgpOwogICAgICAgIHZvaWQgc2NyaXB0UGFyc2VkKGNvbnN0IFN0cmluZyYg
c2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgc3RhcnRMaW5lLCBpbnQgc3RhcnRDb2x1
bW4sIGludCBlbmRMaW5lLCBpbnQgZW5kQ29sdW1uLCBjb25zdCBib29sKiBjb25zdCBpc0NvbnRl
bnRTY3JpcHQsIGNvbnN0IFN0cmluZyYgc291cmNlTWFwVVJMKTsKICAgICAgICB2b2lkIHNjcmlw
dEZhaWxlZFRvUGFyc2UoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgc2NyaXB0U291
cmNlLCBpbnQgc3RhcnRMaW5lLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTWVz
c2FnZSk7CiAgICAgICAgdm9pZCBicmVha3BvaW50UmVzb2x2ZWQoY29uc3QgU3RyaW5nJiBicmVh
a3BvaW50SWQsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiov
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2NhdGlvbik7CiAgICAgICAgLy8gTmFtZWQg
YWZ0ZXIgcGFyYW1ldGVyIG5hbWUgJ2NhbGxGcmFtZXMnIHdoaWxlIGdlbmVyYXRpbmcgZXZlbnQg
cGF1c2VkLgogICAgICAgIGNsYXNzIENhbGxGcmFtZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkg
ewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgdm9pZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6RGVidWdnZXI6OkNhbGxGcmFtZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gdmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnB1c2hPYmpl
Y3QodmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgLy8gTmFtZWQgYWZ0
ZXIgcGFyYW1ldGVyIG5hbWUgJ3JlYXNvbicgd2hpbGUgZ2VuZXJhdGluZyBldmVudCBwYXVzZWQu
CiAgICAgICAgc3RydWN0IFJlYXNvbiB7CiAgICAgICAgICAgIGVudW0gRW51bSB7CiAgICAgICAg
ICAgICAgICBYSFIgPSA1LAogICAgICAgICAgICAgICAgRE9NID0gNTksCiAgICAgICAgICAgICAg
ICBFdmVudExpc3RlbmVyID0gNjAsCiAgICAgICAgICAgICAgICBFeGNlcHRpb24gPSA2MSwKICAg
ICAgICAgICAgICAgIE90aGVyID0gMjUsCiAgICAgICAgICAgIH07CiAgICAgICAgfTsgLy8gc3Ry
dWN0IFJlYXNvbgoKICAgICAgICB2b2lkIHBhdXNlZCgvKlBhc3NSZWZQdHI8Q2FsbEZyYW1lcz4q
LyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBjYWxsRnJhbWVzLCAvKlJlYXNvbjo6RW51bSov
IGNvbnN0IFN0cmluZyYgcmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSk7
CiAgICAgICAgdm9pZCByZXN1bWVkKCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBw
cml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWw7CiAgICB9OwoKICAgIERlYnVnZ2VyKiBkZWJ1Z2dlcigpIHsgcmV0dXJuICZt
X2RlYnVnZ2VyOyB9CgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiNpZiBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgIGNsYXNzIERPTURlYnVnZ2VyIHsKICAgIHB1
YmxpYzoKICAgICAgICBET01EZWJ1Z2dlcihJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
OyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJp
dmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsOwogICAgfTsKCiAgICBET01EZWJ1Z2dlciogZG9tZGVidWdnZXIoKSB7IHJldHVy
biAmbV9kb21kZWJ1Z2dlcjsgfQoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICBjbGFzcyBQcm9maWxlciB7CiAg
ICBwdWJsaWM6CiAgICAgICAgUHJvZmlsZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGFkZFByb2ZpbGVIZWFkZXIoUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGhlYWRlcik7CiAgICAgICAgdm9pZCBhZGRIZWFwU25h
cHNob3RDaHVuayhpbnQgdWlkLCBjb25zdCBTdHJpbmcmIGNodW5rKTsKICAgICAgICB2b2lkIGZp
bmlzaEhlYXBTbmFwc2hvdChpbnQgdWlkKTsKICAgICAgICB2b2lkIHNldFJlY29yZGluZ1Byb2Zp
bGUoYm9vbCBpc1Byb2ZpbGluZyk7CiAgICAgICAgdm9pZCByZXNldFByb2ZpbGVzKCk7CiAgICAg
ICAgdm9pZCByZXBvcnRIZWFwU25hcHNob3RQcm9ncmVzcyhpbnQgZG9uZSwgaW50IHRvdGFsKTsK
ICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAg
UHJvZmlsZXIqIHByb2ZpbGVyKCkgeyByZXR1cm4gJm1fcHJvZmlsZXI7IH0KCiNlbmRpZiAvLyBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKI2lmIEVOQUJMRShXT1JLRVJTKQogICAgY2xhc3Mg
V29ya2VyIHsKICAgIHB1YmxpYzoKICAgICAgICBXb3JrZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIHdvcmtlckNyZWF0
ZWQoaW50IHdvcmtlcklkLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpbnNwZWN0b3JDb25uZWN0
ZWQpOwogICAgICAgIHZvaWQgd29ya2VyVGVybWluYXRlZChpbnQgd29ya2VySWQpOwogICAgICAg
IHZvaWQgZGlzcGF0Y2hNZXNzYWdlRnJvbVdvcmtlcihpbnQgd29ya2VySWQsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKTsKICAgICAgICB2b2lkIGRpc2Nvbm5lY3RlZEZyb21X
b3JrZXIoKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyBy
ZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAg
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAg
IH07CgogICAgV29ya2VyKiB3b3JrZXIoKSB7IHJldHVybiAmbV93b3JrZXI7IH0KCiNlbmRpZiAv
LyBFTkFCTEUoV09SS0VSUykKCnByaXZhdGU6CiAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgSW5zcGVjdG9yIG1faW5zcGVjdG9yOwog
ICAgTWVtb3J5IG1fbWVtb3J5OwogICAgUGFnZSBtX3BhZ2U7CiAgICBSdW50aW1lIG1fcnVudGlt
ZTsKICAgIENvbnNvbGUgbV9jb25zb2xlOwogICAgTmV0d29yayBtX25ldHdvcms7CiNpZiBFTkFC
TEUoU1FMX0RBVEFCQVNFKQogICAgRGF0YWJhc2UgbV9kYXRhYmFzZTsKI2VuZGlmIC8vIEVOQUJM
RShTUUxfREFUQUJBU0UpCiAgICBET01TdG9yYWdlIG1fZG9tc3RvcmFnZTsKICAgIEFwcGxpY2F0
aW9uQ2FjaGUgbV9hcHBsaWNhdGlvbmNhY2hlOwojaWYgRU5BQkxFKEZJTEVfU1lTVEVNKQogICAg
RmlsZVN5c3RlbSBtX2ZpbGVzeXN0ZW07CiNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNURU0pCiAg
ICBET00gbV9kb207CiAgICBDU1MgbV9jc3M7CiAgICBUaW1lbGluZSBtX3RpbWVsaW5lOwojaWYg
RU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICBEZWJ1Z2dlciBtX2RlYnVnZ2VyOwojZW5k
aWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9E
RUJVR0dFUikKICAgIERPTURlYnVnZ2VyIG1fZG9tZGVidWdnZXI7CiNlbmRpZiAvLyBFTkFCTEUo
SkFWQVNDUklQVF9ERUJVR0dFUikKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAg
UHJvZmlsZXIgbV9wcm9maWxlcjsKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQojaWYgRU5BQkxFKFdPUktFUlMpCiAgICBXb3JrZXIgbV93b3JrZXI7CiNlbmRpZiAvLyBFTkFC
TEUoV09SS0VSUykKfTsKCn0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKI2VuZGlmIC8vICFkZWZpbmVk
KEluc3BlY3RvckZyb250ZW5kX2gpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>122032</attachid>
            <date>2012-01-11 08:25:22 -0800</date>
            <delta_ts>2012-01-12 06:10:33 -0800</delta_ts>
            <desc>Generator output diff</desc>
            <filename>diff</filename>
            <type>text/plain</type>
            <size>19207</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">MjdhMjgsMzEKPiBuYW1lc3BhY2UgQ29uc29sZSB7Cj4gY2xhc3MgU3RhY2tUcmFjZTsKPiB9IC8v
IENvbnNvbGUKPiAKMjhhMzMKPiBjbGFzcyBDU1NSdWxlOwozMGEzNiwzNwo+IGNsYXNzIENTU1By
b3BlcnR5Owo+IGNsYXNzIENTU01lZGlhOwozNWE0Mwo+IGNsYXNzIFNjb3BlOwoxNzhhMTg3LDIw
NAo+ICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdub2RlQ291bnQnIHdoaWxlIGdl
bmVyYXRpbmcgRE9NR3JvdXAuCj4gICAgIGNsYXNzIE5vZGVDb3VudCA6IHB1YmxpYyBJbnNwZWN0
b3JBcnJheSB7Cj4gICAgIHB1YmxpYzoKPiAgICAgICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQ
dHI8VHlwZUJ1aWxkZXI6Ok1lbW9yeTo6Tm9kZUNvdW50PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiB2YWx1ZSkKPiAgICAgICAgIHsKPiAgICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0
KHZhbHVlKTsKPiAgICAgICAgIH0KPiAgICAgfTsKPiAKPiAgICAgLy8gTmFtZWQgYWZ0ZXIgcHJv
cGVydHkgbmFtZSAnbGlzdGVuZXJDb3VudCcgd2hpbGUgZ2VuZXJhdGluZyBET01Hcm91cC4KPiAg
ICAgY2xhc3MgTGlzdGVuZXJDb3VudCA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7Cj4gICAgIHB1
YmxpYzoKPiAgICAgICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok1l
bW9yeTo6TGlzdGVuZXJDb3VudD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUp
Cj4gICAgICAgICB7Cj4gICAgICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1ZSk7Cj4gICAg
ICAgICB9Cj4gICAgIH07Cj4gCjIyMGMyNDYKPCAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOT0RF
X0NPVU5UX1NFVD4mIHNldE5vZGVDb3VudChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1
ZSkKLS0tCj4gICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTk9ERV9DT1VOVF9TRVQ+JiBzZXROb2Rl
Q291bnQoLypQYXNzUmVmUHRyPE5vZGVDb3VudD4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5
PiB2YWx1ZSkKMjI3YzI1Mwo8ICAgICAgICAgQnVpbGRlcjxTVEFURSB8IExJU1RFTkVSX0NPVU5U
X1NFVD4mIHNldExpc3RlbmVyQ291bnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUp
Ci0tLQo+ICAgICAgICAgQnVpbGRlcjxTVEFURSB8IExJU1RFTkVSX0NPVU5UX1NFVD4mIHNldExp
c3RlbmVyQ291bnQoLypQYXNzUmVmUHRyPExpc3RlbmVyQ291bnQ+Ki8gUGFzc1JlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gdmFsdWUpCjM4MCwzODFjNDA2CjwgICAgIC8vIE5hbWVkIGFzIGFuIGl0ZW0g
b2YgYXJyYXkuCjwgICAgIGNsYXNzIFJlc291cmNlc0l0ZW0gOiBwdWJsaWMgSW5zcGVjdG9yT2Jq
ZWN0IHsKLS0tCj4gICAgIGNsYXNzIFJlc291cmNlcyA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7
CjM4Myw0MDZjNDA4CjwgICAgICAgICBlbnVtIHsKPCAgICAgICAgICAgICBOT19GSUVMRFNfU0VU
ID0gMCwKPCAgICAgICAgICAgICBVUkxfU0VUID0gMSA8PCAwLAo8ICAgICAgICAgICAgIFRZUEVf
U0VUID0gMSA8PCAxLAo8ICAgICAgICAgICAgIE1JTUVfVFlQRV9TRVQgPSAxIDw8IDIsCjwgICAg
ICAgICAgICAgQUxMX0ZJRUxEU19TRVQgPSAoVVJMX1NFVCB8IFRZUEVfU0VUIHwgTUlNRV9UWVBF
X1NFVCkKPCAgICAgICAgIH07CjwgCjwgICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CjwgICAg
ICAgICBjbGFzcyBCdWlsZGVyIHsKPCAgICAgICAgIHByaXZhdGU6CjwgICAgICAgICAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CjwgCjwgICAgICAgICAgICAgdGVtcGxhdGU8
aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKPCAgICAgICAgICAg
ICB7CjwgICAgICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKPCAgICAgICAgICAgICB9CjwgCjwgICAgICAgICAgICAgQnVp
bGRlcihQYXNzUmVmUHRyPFJlc291cmNlc0l0ZW0+IHB0cikKPCAgICAgICAgICAgICB7CjwgICAg
ICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5PX0ZJRUxEU19TRVQsIGJ1aWxk
ZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CjwgICAgICAgICAgICAgICAgIG1fcmVzdWx0
ID0gcHRyOwo8ICAgICAgICAgICAgIH0KPCAgICAgICAgICAgICBmcmllbmQgY2xhc3MgUmVzb3Vy
Y2VzSXRlbTsKLS0tCj4gICAgICAgICBjbGFzcyBJdGVtIDogcHVibGljIEluc3BlY3Rvck9iamVj
dCB7CjQwOCw0NDFjNDEwLDQ3NAo8ICAgICAKPCAgICAgICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
VVJMX1NFVD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQo8ICAgICAgICAgICAgIHsKPCAg
ICAgICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVSTF9TRVQpLCBwcm9wZXJ0
eV91cmxfYWxyZWFkeV9zZXQpOwo8ICAgICAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJ1cmwiLCB2YWx1ZSk7CjwgICAgICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VVJMX1NF
VD4oKTsKPCAgICAgICAgICAgICB9CjwgICAgIAo8ICAgICAgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBUWVBFX1NFVD4mIHNldFR5cGUoVHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZTo6RW51
bSB2YWx1ZSkKPCAgICAgICAgICAgICB7CjwgICAgICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBUWVBFX1NFVCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwo8ICAgICAg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgZ2V0RW51bUNvbnN0YW50VmFs
dWUodmFsdWUpKTsKPCAgICAgICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUWVBFX1NFVD4o
KTsKPCAgICAgICAgICAgICB9CjwgICAgIAo8ICAgICAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBU
WVBFX1NFVD4mIHNldFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKPCAgICAgICAgICAgICB7Cjwg
ICAgICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUWVBFX1NFVCksIHByb3Bl
cnR5X3R5cGVfYWxyZWFkeV9zZXQpOwo8ICAgICAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJ0eXBlIiwgdmFsdWUpOwo8ICAgICAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRZ
UEVfU0VUPigpOwo8ICAgICAgICAgICAgIH0KPCAgICAgCjwgICAgICAgICAgICAgQnVpbGRlcjxT
VEFURSB8IE1JTUVfVFlQRV9TRVQ+JiBzZXRNaW1lVHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQo8
ICAgICAgICAgICAgIHsKPCAgICAgICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IE1JTUVfVFlQRV9TRVQpLCBwcm9wZXJ0eV9taW1lVHlwZV9hbHJlYWR5X3NldCk7CjwgICAgICAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1pbWVUeXBlIiwgdmFsdWUpOwo8ICAgICAg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1JTUVfVFlQRV9TRVQ+KCk7CjwgICAgICAgICAg
ICAgfQo8ICAgICAKPCAgICAgICAgICAgICBvcGVyYXRvciBSZWZQdHI8UmVzb3VyY2VzSXRlbT4m
ICgpCjwgICAgICAgICAgICAgewo8ICAgICAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBBTExfRklFTERTX1NFVCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CjwgICAgICAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UmVzb3VyY2VzSXRlbT4qPigmbV9y
ZXN1bHQpOwo8ICAgICAgICAgICAgIH0KLS0tCj4gICAgICAgICAgICAgZW51bSB7Cj4gICAgICAg
ICAgICAgICAgIE5PX0ZJRUxEU19TRVQgPSAwLAo+ICAgICAgICAgICAgICAgICBVUkxfU0VUID0g
MSA8PCAwLAo+ICAgICAgICAgICAgICAgICBUWVBFX1NFVCA9IDEgPDwgMSwKPiAgICAgICAgICAg
ICAgICAgTUlNRV9UWVBFX1NFVCA9IDEgPDwgMiwKPiAgICAgICAgICAgICAgICAgQUxMX0ZJRUxE
U19TRVQgPSAoVVJMX1NFVCB8IFRZUEVfU0VUIHwgTUlNRV9UWVBFX1NFVCkKPiAgICAgICAgICAg
ICB9Owo+IAo+ICAgICAgICAgICAgIHRlbXBsYXRlPGludCBTVEFURT4KPiAgICAgICAgICAgICBj
bGFzcyBCdWlsZGVyIHsKPiAgICAgICAgICAgICBwcml2YXRlOgo+ICAgICAgICAgICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKPiAKPiAgICAgICAgICAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKPiAgICAg
ICAgICAgICAgICAgewo+ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwo+ICAgICAgICAgICAgICAgICB9Cj4g
Cj4gICAgICAgICAgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxJdGVtPiBwdHIpCj4gICAgICAg
ICAgICAgICAgIHsKPiAgICAgICAgICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IE5PX0ZJRUxEU19TRVQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7Cj4gICAg
ICAgICAgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKPiAgICAgICAgICAgICAgICAgfQo+ICAg
ICAgICAgICAgICAgICBmcmllbmQgY2xhc3MgSXRlbTsKPiAgICAgICAgICAgICBwdWJsaWM6Cj4g
ICAgICAgICAKPiAgICAgICAgICAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVSTF9TRVQ+JiBzZXRV
cmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKPiAgICAgICAgICAgICAgICAgewo+ICAgICAgICAgICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVSTF9TRVQpLCBwcm9wZXJ0eV91cmxf
YWxyZWFkeV9zZXQpOwo+ICAgICAgICAgICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
dXJsIiwgdmFsdWUpOwo+ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVUkxf
U0VUPigpOwo+ICAgICAgICAgICAgICAgICB9Cj4gICAgICAgICAKPiAgICAgICAgICAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFRZUEVfU0VUPiYgc2V0VHlwZShUeXBlQnVpbGRlcjo6UGFnZTo6UmVz
b3VyY2VUeXBlOjpFbnVtIHZhbHVlKQo+ICAgICAgICAgICAgICAgICB7Cj4gICAgICAgICAgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVFlQRV9TRVQpLCBwcm9wZXJ0eV90eXBl
X2FscmVhZHlfc2V0KTsKPiAgICAgICAgICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
InR5cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwo+ICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxUWVBFX1NFVD4oKTsKPiAgICAgICAgICAgICAgICAgfQo+ICAg
ICAgICAgCj4gICAgICAgICAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUWVBFX1NFVD4mIHNldFR5
cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKPiAgICAgICAgICAgICAgICAgewo+ICAgICAgICAgICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRZUEVfU0VUKSwgcHJvcGVydHlfdHlw
ZV9hbHJlYWR5X3NldCk7Cj4gICAgICAgICAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJ0eXBlIiwgdmFsdWUpOwo+ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxU
WVBFX1NFVD4oKTsKPiAgICAgICAgICAgICAgICAgfQo+ICAgICAgICAgCj4gICAgICAgICAgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBNSU1FX1RZUEVfU0VUPiYgc2V0TWltZVR5cGUoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKPiAgICAgICAgICAgICAgICAgewo+ICAgICAgICAgICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIE1JTUVfVFlQRV9TRVQpLCBwcm9wZXJ0eV9taW1lVHlwZV9h
bHJlYWR5X3NldCk7Cj4gICAgICAgICAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJt
aW1lVHlwZSIsIHZhbHVlKTsKPiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
TUlNRV9UWVBFX1NFVD4oKTsKPiAgICAgICAgICAgICAgICAgfQo+ICAgICAgICAgCj4gICAgICAg
ICAgICAgICAgIG9wZXJhdG9yIFJlZlB0cjxJdGVtPiYgKCkKPiAgICAgICAgICAgICAgICAgewo+
ICAgICAgICAgICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQUxMX0ZJRUxEU19T
RVQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwo+ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PFJlZlB0cjxJdGVtPio+KCZtX3Jlc3VsdCk7Cj4gICAgICAgICAgICAg
ICAgIH0KPiAKPiAgICAgICAgICAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxJdGVtPiAoKQo+
ICAgICAgICAgICAgICAgICB7Cj4gICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVmUHRyPEl0
ZW0+KCp0aGlzKTsKPiAgICAgICAgICAgICAgICAgfQo+ICAgICAgICAgICAgIH07CjQ0M2M0NzYs
NDgzCjwgICAgICAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxSZXNvdXJjZXNJdGVtPiAoKQot
LS0KPiAgICAgICAgICAgICAvKgo+ICAgICAgICAgICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKPiAgICAgICAgICAgICAgKiBSZWZQdHI8SXRlbT4gcmVzdWx0ID0gSXRlbTo6Y3JlYXRlKCkK
PiAgICAgICAgICAgICAgKiAgICAgLnNldFVybCguLi4pCj4gICAgICAgICAgICAgICogICAgIC5z
ZXRUeXBlKC4uLikKPiAgICAgICAgICAgICAgKiAgICAgLnNldE1pbWVUeXBlKC4uLik7Cj4gICAg
ICAgICAgICAgICovCj4gICAgICAgICAgICAgc3RhdGljIEJ1aWxkZXI8Tk9fRklFTERTX1NFVD4g
Y3JlYXRlKCkKNDQ1YzQ4NQo8ICAgICAgICAgICAgICAgICByZXR1cm4gUmVmUHRyPFJlc291cmNl
c0l0ZW0+KCp0aGlzKTsKLS0tCj4gICAgICAgICAgICAgICAgIHJldHVybiBCdWlsZGVyPE5PX0ZJ
RUxEU19TRVQ+KGFkb3B0UmVmKG5ldyBJdGVtKCkpKTsKNDQ5LDQ1NmM0ODkKPCAgICAgICAgIC8q
CjwgICAgICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CjwgICAgICAgICAgKiBSZWZQdHI8
UmVzb3VyY2VzSXRlbT4gcmVzdWx0ID0gUmVzb3VyY2VzSXRlbTo6Y3JlYXRlKCkKPCAgICAgICAg
ICAqICAgICAuc2V0VXJsKC4uLikKPCAgICAgICAgICAqICAgICAuc2V0VHlwZSguLi4pCjwgICAg
ICAgICAgKiAgICAgLnNldE1pbWVUeXBlKC4uLik7CjwgICAgICAgICAgKi8KPCAgICAgICAgIHN0
YXRpYyBCdWlsZGVyPE5PX0ZJRUxEU19TRVQ+IGNyZWF0ZSgpCi0tLQo+ICAgICAgICAgdm9pZCBh
ZGRJdGVtKC8qUGFzc1JlZlB0cjxJdGVtPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2
YWx1ZSkKNDU4YzQ5MSw1MDAKPCAgICAgICAgICAgICByZXR1cm4gQnVpbGRlcjxOT19GSUVMRFNf
U0VUPihhZG9wdFJlZihuZXcgUmVzb3VyY2VzSXRlbSgpKSk7Ci0tLQo+ICAgICAgICAgICAgIHRo
aXMtPnB1c2hPYmplY3QodmFsdWUpOwo+ICAgICAgICAgfQo+ICAgICB9Owo+IAo+ICAgICAvLyBO
YW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdjaGlsZEZyYW1lcycgd2hpbGUgZ2VuZXJhdGluZyBG
cmFtZVJlc291cmNlVHJlZS4KPiAgICAgY2xhc3MgQ2hpbGRGcmFtZXMgOiBwdWJsaWMgSW5zcGVj
dG9yQXJyYXkgewo+ICAgICBwdWJsaWM6Cj4gICAgICAgICB2b2lkIGFkZEl0ZW0oLypQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4qLyBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gdmFsdWUpCj4gICAgICAgICB7Cj4gICAgICAgICAgICAgdGhpcy0+cHVz
aE9iamVjdCh2YWx1ZSk7CjQ5NGM1MzYKPCAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBSRVNPVVJD
RVNfU0VUPiYgc2V0UmVzb3VyY2VzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQot
LS0KPiAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBSRVNPVVJDRVNfU0VUPiYgc2V0UmVzb3VyY2Vz
KC8qUGFzc1JlZlB0cjxSZXNvdXJjZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFs
dWUpCjUyNGM1NjYKPCAgICAgdm9pZCBzZXRDaGlsZEZyYW1lcyhQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiB2YWx1ZSkKLS0tCj4gICAgIHZvaWQgc2V0Q2hpbGRGcmFtZXMoLypQYXNzUmVmUHRy
PENoaWxkRnJhbWVzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQoxMTM3YTEx
ODAsMTE4OAo+ICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdwYXJhbWV0ZXJzJyB3
aGlsZSBnZW5lcmF0aW5nIENvbnNvbGVNZXNzYWdlLgo+ICAgICBjbGFzcyBQYXJhbWV0ZXJzIDog
cHVibGljIEluc3BlY3RvckFycmF5IHsKPiAgICAgcHVibGljOgo+ICAgICAgICAgdm9pZCBhZGRJ
dGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKPiAgICAgICAgIHsKPiAgICAgICAgICAg
ICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKPiAgICAgICAgIH0KPiAgICAgfTsKPiAKMTI0OGMx
Mjk5CjwgICAgIHZvaWQgc2V0UGFyYW1ldGVycyhQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2
YWx1ZSkKLS0tCj4gICAgIHZvaWQgc2V0UGFyYW1ldGVycygvKlBhc3NSZWZQdHI8UGFyYW1ldGVy
cz4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKMTI1M2MxMzA0CjwgICAgIHZv
aWQgc2V0U3RhY2tUcmFjZShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKLS0tCj4g
ICAgIHZvaWQgc2V0U3RhY2tUcmFjZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNvbnNvbGU6
OlN0YWNrVHJhY2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCjEzNDdhMTM5
OSwxNDA3Cj4gLyogQ2FsbCBmcmFtZXMgZm9yIGFzc2VydGlvbnMgb3IgZXJyb3IgbWVzc2FnZXMu
ICovCj4gY2xhc3MgU3RhY2tUcmFjZSA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7Cj4gcHVibGlj
Ogo+ICAgICB2b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDb25zb2xlOjpD
YWxsRnJhbWU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQo+ICAgICB7Cj4g
ICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKPiAgICAgfQo+IH07Cj4gCjIwNDVjMjEw
NQo8ICAgICB2b2lkIHNldFN0YWNrVHJhY2UoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFs
dWUpCi0tLQo+ICAgICB2b2lkIHNldFN0YWNrVHJhY2UoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjpDb25zb2xlOjpTdGFja1RyYWNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVl
KQoyMzA4YTIzNjksMjM3Nwo+ICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdyZXNv
dXJjZXMnIHdoaWxlIGdlbmVyYXRpbmcgQXBwbGljYXRpb25DYWNoZS4KPiAgICAgY2xhc3MgUmVz
b3VyY2VzIDogcHVibGljIEluc3BlY3RvckFycmF5IHsKPiAgICAgcHVibGljOgo+ICAgICAgICAg
dm9pZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6QXBwbGljYXRpb25DYWNoZTo6
QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2
YWx1ZSkKPiAgICAgICAgIHsKPiAgICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsK
PiAgICAgICAgIH0KPiAgICAgfTsKPiAKMjM2NWMyNDM0CjwgICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgUkVTT1VSQ0VTX1NFVD4mIHNldFJlc291cmNlcyhQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5
PiB2YWx1ZSkKLS0tCj4gICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUkVTT1VSQ0VTX1NFVD4mIHNl
dFJlc291cmNlcygvKlBhc3NSZWZQdHI8UmVzb3VyY2VzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHZhbHVlKQoyNDc5YTI1NDksMjU2Ngo+ICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0
eSBuYW1lICdjaGlsZHJlbicgd2hpbGUgZ2VuZXJhdGluZyBOb2RlLgo+ICAgICBjbGFzcyBDaGls
ZHJlbiA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7Cj4gICAgIHB1YmxpYzoKPiAgICAgICAgIHZv
aWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6Tm9kZT4qLyBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCj4gICAgICAgICB7Cj4gICAgICAgICAgICAgdGhp
cy0+cHVzaE9iamVjdCh2YWx1ZSk7Cj4gICAgICAgICB9Cj4gICAgIH07Cj4gCj4gICAgIC8vIE5h
bWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2F0dHJpYnV0ZXMnIHdoaWxlIGdlbmVyYXRpbmcgTm9k
ZS4KPiAgICAgY2xhc3MgQXR0cmlidXRlcyA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7Cj4gICAg
IHB1YmxpYzoKPiAgICAgICAgIHZvaWQgYWRkSXRlbShjb25zdCBTdHJpbmcmIHZhbHVlKQo+ICAg
ICAgICAgewo+ICAgICAgICAgICAgIHRoaXMtPnB1c2hTdHJpbmcodmFsdWUpOwo+ICAgICAgICAg
fQo+ICAgICB9Owo+IAoyNTc0YzI2NjEKPCAgICAgdm9pZCBzZXRDaGlsZHJlbihQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiB2YWx1ZSkKLS0tCj4gICAgIHZvaWQgc2V0Q2hpbGRyZW4oLypQYXNz
UmVmUHRyPENoaWxkcmVuPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQoyNTc5
YzI2NjYKPCAgICAgdm9pZCBzZXRBdHRyaWJ1dGVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHZhbHVlKQotLS0KPiAgICAgdm9pZCBzZXRBdHRyaWJ1dGVzKC8qUGFzc1JlZlB0cjxBdHRyaWJ1
dGVzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQozMDExYTMwOTksMzEwNwo+
ICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdydWxlcycgd2hpbGUgZ2VuZXJhdGlu
ZyBQc2V1ZG9JZFJ1bGVzLgo+ICAgICBjbGFzcyBSdWxlcyA6IHB1YmxpYyBJbnNwZWN0b3JBcnJh
eSB7Cj4gICAgIHB1YmxpYzoKPiAgICAgICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlw
ZUJ1aWxkZXI6OkNTUzo6Q1NTUnVsZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFs
dWUpCj4gICAgICAgICB7Cj4gICAgICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1ZSk7Cj4g
ICAgICAgICB9Cj4gICAgIH07Cj4gCjMwNDRjMzE0MAo8ICAgICAgICAgQnVpbGRlcjxTVEFURSB8
IFJVTEVTX1NFVD4mIHNldFJ1bGVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQot
LS0KPiAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBSVUxFU19TRVQ+JiBzZXRSdWxlcygvKlBhc3NS
ZWZQdHI8UnVsZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCjMwNzdhMzE3
NCwzMTgyCj4gICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ21hdGNoZWRDU1NSdWxl
cycgd2hpbGUgZ2VuZXJhdGluZyBJbmhlcml0ZWRTdHlsZUVudHJ5Lgo+ICAgICBjbGFzcyBNYXRj
aGVkQ1NTUnVsZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewo+ICAgICBwdWJsaWM6Cj4gICAg
ICAgICB2b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGU+
Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQo+ICAgICAgICAgewo+ICAgICAg
ICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwo+ICAgICAgICAgfQo+ICAgICB9Owo+IAoz
MTAyYzMyMDcKPCAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNQVRDSEVEX0NTU19SVUxFU19TRVQ+
JiBzZXRNYXRjaGVkQ1NTUnVsZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCi0t
LQo+ICAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1BVENIRURfQ1NTX1JVTEVTX1NFVD4mIHNldE1h
dGNoZWRDU1NSdWxlcygvKlBhc3NSZWZQdHI8TWF0Y2hlZENTU1J1bGVzPiovIFBhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQozMjg5YTMzOTUsMzQwMwo+ICAgICAvLyBOYW1lZCBhZnRl
ciBwcm9wZXJ0eSBuYW1lICdydWxlcycgd2hpbGUgZ2VuZXJhdGluZyBDU1NTdHlsZVNoZWV0Qm9k
eS4KPiAgICAgY2xhc3MgUnVsZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewo+ICAgICBwdWJs
aWM6Cj4gICAgICAgICB2b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6
OkNTU1J1bGU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQo+ICAgICAgICAg
ewo+ICAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwo+ICAgICAgICAgfQo+ICAg
ICB9Owo+IAozMzIyYzM0MzYKPCAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBSVUxFU19TRVQ+JiBz
ZXRSdWxlcyhQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKLS0tCj4gICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgUlVMRVNfU0VUPiYgc2V0UnVsZXMoLypQYXNzUmVmUHRyPFJ1bGVzPiov
IFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQozMzcwYTM0ODUsMzQ5Mwo+ICAgICAv
LyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdtZWRpYScgd2hpbGUgZ2VuZXJhdGluZyBDU1NS
dWxlLgo+ICAgICBjbGFzcyBNZWRpYSA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7Cj4gICAgIHB1
YmxpYzoKPiAgICAgICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNT
Uzo6Q1NTTWVkaWE+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQo+ICAgICAg
ICAgewo+ICAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwo+ICAgICAgICAgfQo+
ICAgICB9Owo+IAozNDczYzM1OTYKPCAgICAgdm9pZCBzZXRNZWRpYShQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiB2YWx1ZSkKLS0tCj4gICAgIHZvaWQgc2V0TWVkaWEoLypQYXNzUmVmUHRyPE1l
ZGlhPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQozNjEyYTM3MzYsMzc1Mwo+
ICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdjc3NQcm9wZXJ0aWVzJyB3aGlsZSBn
ZW5lcmF0aW5nIENTU1N0eWxlLgo+ICAgICBjbGFzcyBDc3NQcm9wZXJ0aWVzIDogcHVibGljIElu
c3BlY3RvckFycmF5IHsKPiAgICAgcHVibGljOgo+ICAgICAgICAgdm9pZCBhZGRJdGVtKC8qUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eT4qLyBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gdmFsdWUpCj4gICAgICAgICB7Cj4gICAgICAgICAgICAgdGhpcy0+cHVzaE9i
amVjdCh2YWx1ZSk7Cj4gICAgICAgICB9Cj4gICAgIH07Cj4gCj4gICAgIC8vIE5hbWVkIGFmdGVy
IHByb3BlcnR5IG5hbWUgJ3Nob3J0aGFuZEVudHJpZXMnIHdoaWxlIGdlbmVyYXRpbmcgQ1NTU3R5
bGUuCj4gICAgIGNsYXNzIFNob3J0aGFuZEVudHJpZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkg
ewo+ICAgICBwdWJsaWM6Cj4gICAgICAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHZhbHVlKQo+ICAgICAgICAgewo+ICAgICAgICAgICAgIHRoaXMtPnB1c2hPYmpl
Y3QodmFsdWUpOwo+ICAgICAgICAgfQo+ICAgICB9Owo+IAozNjQwYzM3ODEKPCAgICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBDU1NfUFJPUEVSVElFU19TRVQ+JiBzZXRDc3NQcm9wZXJ0aWVzKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQotLS0KPiAgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBDU1NfUFJPUEVSVElFU19TRVQ+JiBzZXRDc3NQcm9wZXJ0aWVzKC8qUGFzc1JlZlB0cjxDc3NQ
cm9wZXJ0aWVzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQozNjQ3YzM3ODgK
PCAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTSE9SVEhBTkRfRU5UUklFU19TRVQ+JiBzZXRTaG9y
dGhhbmRFbnRyaWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQotLS0KPiAgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBTSE9SVEhBTkRfRU5UUklFU19TRVQ+JiBzZXRTaG9ydGhhbmRF
bnRyaWVzKC8qUGFzc1JlZlB0cjxTaG9ydGhhbmRFbnRyaWVzPiovIFBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHZhbHVlKQo0MDE0YTQxNTYsNDE2NAo+ICAgICAvLyBOYW1lZCBhZnRlciBwcm9w
ZXJ0eSBuYW1lICdkYXRhJyB3aGlsZSBnZW5lcmF0aW5nIFNlbGVjdG9yUHJvZmlsZS4KPiAgICAg
Y2xhc3MgRGF0YSA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7Cj4gICAgIHB1YmxpYzoKPiAgICAg
ICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6U2VsZWN0b3JQ
cm9maWxlRW50cnk+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQo+ICAgICAg
ICAgewo+ICAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwo+ICAgICAgICAgfQo+
ICAgICB9Owo+IAo0MDQ3YzQxOTcKPCAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEQVRBX1NFVD4m
IHNldERhdGEoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCi0tLQo+ICAgICAgICAg
QnVpbGRlcjxTVEFURSB8IERBVEFfU0VUPiYgc2V0RGF0YSgvKlBhc3NSZWZQdHI8RGF0YT4qLyBQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKNDA4M2E0MjM0LDQyNDIKPiAgICAgLy8g
TmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnY2hpbGRyZW4nIHdoaWxlIGdlbmVyYXRpbmcgVGlt
ZWxpbmVFdmVudC4KPiAgICAgY2xhc3MgQ2hpbGRyZW4gOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkg
ewo+ICAgICBwdWJsaWM6Cj4gICAgICAgICB2b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVC
dWlsZGVyOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gdmFsdWUpCj4gICAgICAgICB7Cj4gICAgICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2
YWx1ZSk7Cj4gICAgICAgICB9Cj4gICAgIH07Cj4gCjQxNDZjNDMwNQo8ICAgICB2b2lkIHNldENo
aWxkcmVuKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQotLS0KPiAgICAgdm9pZCBz
ZXRDaGlsZHJlbigvKlBhc3NSZWZQdHI8Q2hpbGRyZW4+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gdmFsdWUpCjQyMzhhNDM5OCw0NDA2Cj4gICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5
IG5hbWUgJ3Njb3BlQ2hhaW4nIHdoaWxlIGdlbmVyYXRpbmcgQ2FsbEZyYW1lLgo+ICAgICBjbGFz
cyBTY29wZUNoYWluIDogcHVibGljIEluc3BlY3RvckFycmF5IHsKPiAgICAgcHVibGljOgo+ICAg
ICAgICAgdm9pZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OlNj
b3BlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKPiAgICAgICAgIHsKPiAg
ICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKPiAgICAgICAgIH0KPiAgICAgfTsK
PiAKNDI4OGM0NDU2CjwgICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU0NPUEVfQ0hBSU5fU0VUPiYg
c2V0U2NvcGVDaGFpbihQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKLS0tCj4gICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgU0NPUEVfQ0hBSU5fU0VUPiYgc2V0U2NvcGVDaGFpbigvKlBh
c3NSZWZQdHI8U2NvcGVDaGFpbj4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkK
NDUxNGM0NjgyCjwgICAgICAgICB2b2lkIHJlcXVlc3RXaWxsQmVTZW50KGNvbnN0IFN0cmluZyYg
cmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgbG9hZGVySWQs
IGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0
d29yazo6UmVxdWVzdD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVxdWVzdCwgZG91
YmxlIHRpbWVzdGFtcCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpJbml0aWF0
b3I+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluaXRpYXRvciwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gc3RhY2tUcmFjZSwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3
b3JrOjpSZXNwb25zZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVkaXJlY3RSZXNw
b25zZSk7Ci0tLQo+ICAgICAgICAgdm9pZCByZXF1ZXN0V2lsbEJlU2VudChjb25zdCBTdHJpbmcm
IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIGxvYWRlcklk
LCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5l
dHdvcms6OlJlcXVlc3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3QsIGRv
dWJsZSB0aW1lc3RhbXAsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6SW5pdGlh
dG9yPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbml0aWF0b3IsIC8qUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6Q29uc29sZTo6U3RhY2tUcmFjZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBzdGFja1RyYWNlLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJl
c3BvbnNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZWRpcmVjdFJlc3BvbnNlKTsK
NDUzOGM0NzA2LDQ3MjQKPCAgICAgICAgIHZvaWQgc3FsVHJhbnNhY3Rpb25TdWNjZWVkZWQoaW50
IHRyYW5zYWN0aW9uSWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNvbHVtbk5hbWVzLCBQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZXMpOwotLS0KPiAgICAgICAgIC8vIE5hbWVk
IGFmdGVyIHBhcmFtZXRlciBuYW1lICdjb2x1bW5OYW1lcycgd2hpbGUgZ2VuZXJhdGluZyBldmVu
dCBzcWxUcmFuc2FjdGlvblN1Y2NlZWRlZC4KPiAgICAgICAgIGNsYXNzIENvbHVtbk5hbWVzIDog
cHVibGljIEluc3BlY3RvckFycmF5IHsKPiAgICAgICAgIHB1YmxpYzoKPiAgICAgICAgICAgICB2
b2lkIGFkZEl0ZW0oY29uc3QgU3RyaW5nJiB2YWx1ZSkKPiAgICAgICAgICAgICB7Cj4gICAgICAg
ICAgICAgICAgIHRoaXMtPnB1c2hTdHJpbmcodmFsdWUpOwo+ICAgICAgICAgICAgIH0KPiAgICAg
ICAgIH07Cj4gCj4gICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgbmFtZSAndmFsdWVz
JyB3aGlsZSBnZW5lcmF0aW5nIGV2ZW50IHNxbFRyYW5zYWN0aW9uU3VjY2VlZGVkLgo+ICAgICAg
ICAgY2xhc3MgVmFsdWVzIDogcHVibGljIEluc3BlY3RvckFycmF5IHsKPiAgICAgICAgIHB1Ymxp
YzoKPiAgICAgICAgICAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4g
dmFsdWUpCj4gICAgICAgICAgICAgewo+ICAgICAgICAgICAgICAgICB0aGlzLT5wdXNoVmFsdWUo
dmFsdWUpOwo+ICAgICAgICAgICAgIH0KPiAgICAgICAgIH07Cj4gCj4gICAgICAgICB2b2lkIHNx
bFRyYW5zYWN0aW9uU3VjY2VlZGVkKGludCB0cmFuc2FjdGlvbklkLCAvKlBhc3NSZWZQdHI8Q29s
dW1uTmFtZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gY29sdW1uTmFtZXMsIC8qUGFz
c1JlZlB0cjxWYWx1ZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWVzKTsKNDU5
MmM0Nzc4LDQ3ODcKPCAgICAgICAgIHZvaWQgc2V0Q2hpbGROb2RlcyhpbnQgcGFyZW50SWQsIFBh
c3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG5vZGVzKTsKLS0tCj4gICAgICAgICAvLyBOYW1lZCBh
ZnRlciBwYXJhbWV0ZXIgbmFtZSAnbm9kZXMnIHdoaWxlIGdlbmVyYXRpbmcgZXZlbnQgc2V0Q2hp
bGROb2Rlcy4KPiAgICAgICAgIGNsYXNzIE5vZGVzIDogcHVibGljIEluc3BlY3RvckFycmF5IHsK
PiAgICAgICAgIHB1YmxpYzoKPiAgICAgICAgICAgICB2b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRy
PFR5cGVCdWlsZGVyOjpET006Ok5vZGU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZh
bHVlKQo+ICAgICAgICAgICAgIHsKPiAgICAgICAgICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2
YWx1ZSk7Cj4gICAgICAgICAgICAgfQo+ICAgICAgICAgfTsKPiAKPiAgICAgICAgIHZvaWQgc2V0
Q2hpbGROb2RlcyhpbnQgcGFyZW50SWQsIC8qUGFzc1JlZlB0cjxOb2Rlcz4qLyBQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiBub2Rlcyk7CjQ1OTVjNDc5MCw0Nzk5CjwgICAgICAgICB2b2lkIGlu
bGluZVN0eWxlSW52YWxpZGF0ZWQoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gbm9kZUlkcyk7
Ci0tLQo+ICAgICAgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyIG5hbWUgJ25vZGVJZHMnIHdo
aWxlIGdlbmVyYXRpbmcgZXZlbnQgaW5saW5lU3R5bGVJbnZhbGlkYXRlZC4KPiAgICAgICAgIGNs
YXNzIE5vZGVJZHMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewo+ICAgICAgICAgcHVibGljOgo+
ICAgICAgICAgICAgIHZvaWQgYWRkSXRlbShpbnQgdmFsdWUpCj4gICAgICAgICAgICAgewo+ICAg
ICAgICAgICAgICAgICB0aGlzLT5wdXNoTnVtYmVyKHZhbHVlKTsKPiAgICAgICAgICAgICB9Cj4g
ICAgICAgICB9Owo+IAo+ICAgICAgICAgdm9pZCBpbmxpbmVTdHlsZUludmFsaWRhdGVkKC8qUGFz
c1JlZlB0cjxOb2RlSWRzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG5vZGVJZHMpOwo0
NjM5YTQ4NDQsNDg1Mgo+ICAgICAgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyIG5hbWUgJ2Nh
bGxGcmFtZXMnIHdoaWxlIGdlbmVyYXRpbmcgZXZlbnQgcGF1c2VkLgo+ICAgICAgICAgY2xhc3Mg
Q2FsbEZyYW1lcyA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7Cj4gICAgICAgICBwdWJsaWM6Cj4g
ICAgICAgICAgICAgdm9pZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdn
ZXI6OkNhbGxGcmFtZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCj4gICAg
ICAgICAgICAgewo+ICAgICAgICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKPiAg
ICAgICAgICAgICB9Cj4gICAgICAgICB9Owo+IAo0NjUxYzQ4NjQKPCAgICAgICAgIHZvaWQgcGF1
c2VkKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNhbGxGcmFtZXMsIC8qUmVhc29uOjpFbnVt
Ki8gY29uc3QgU3RyaW5nJiByZWFzb24sIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRh
KTsKLS0tCj4gICAgICAgICB2b2lkIHBhdXNlZCgvKlBhc3NSZWZQdHI8Q2FsbEZyYW1lcz4qLyBQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBjYWxsRnJhbWVzLCAvKlJlYXNvbjo6RW51bSovIGNv
bnN0IFN0cmluZyYgcmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZGF0YSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122050</attachid>
            <date>2012-01-11 10:41:43 -0800</date>
            <delta_ts>2012-01-12 05:19:50 -0800</delta_ts>
            <desc>Rebasing</desc>
            <filename>bug-75284-20120111224140.patch</filename>
            <type>text/plain</type>
            <size>9612</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NzIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmNlZTJkNzM1YzZmZDQy
ZWI1MzZkMzdlMzNhOWYwZDgwMWJlOWI0Zi4uNmFlMmUxZmI4NjA5MTljNTlmM2U0MzQ4MjNhZmMw
NjUzNjA5OGU2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTAxLTExICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OiBnZW5lcmF0ZSBhcnJheSB0eXBlcy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1Mjg0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IGNsYXNzZXMgYXJl
IGdlbmVyYXRlZCBmb3IgZWNhaCBhcnJheSB0eXBlIGluc3RhbmNlLgorCisgICAgICAgICogaW5z
cGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHk6CisgICAgICAgIChBcnJheUJpbmRpbmcp
OgorICAgICAgICAoQXJyYXlCaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcik6CisgICAgICAgIChB
cnJheUJpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yLkNvZGVHZW5lcmF0b3IpOgorICAgICAgICAo
QXJyYXlCaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvci5Db2RlR2VuZXJhdG9yLmdlbmVyYXRlX3R5
cGVfYnVpbGRlcik6CisgICAgICAgIChBcnJheUJpbmRpbmcuQWRIb2NUeXBlQ29udGV4dCk6Cisg
ICAgICAgIChBcnJheUJpbmRpbmcuQWRIb2NUeXBlQ29udGV4dC5nZXRfdHlwZV9uYW1lX2ZpeCk6
CisgICAgICAgIChBcnJheUJpbmRpbmcuQWRIb2NUeXBlQ29udGV4dC5nZXRfdHlwZV9uYW1lX2Zp
eC5OYW1lRml4KToKKyAgICAgICAgKEFycmF5QmluZGluZy5vdXRwdXRfY29tbWVudCk6CisgICAg
ICAgIChBcnJheUJpbmRpbmcuY2FsbF9nZW5lcmF0ZV90eXBlX2J1aWxkZXIpOgorICAgICAgICAo
QXJyYXlCaW5kaW5nLmdlbmVyYXRlX2ZvcndhcmRfZGVjbGFyYXRpb24pOgorICAgICAgICAoQXJy
YXlCaW5kaW5nLnJlZ2lzdGVyX3VzZSk6CisgICAgICAgIChnZXRfaW5fY190eXBlX3RleHQpOgor
ICAgICAgICAoZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4pOgorICAgICAgICAo
cmVkdWNlX3RvX3Jhd190eXBlKToKKyAgICAgICAgKFJhd1R5cGVCaW5kaW5nKToKKyAgICAgICAg
KFJhd1R5cGVCaW5kaW5nLl9faW5pdF9fKToKKyAgICAgICAgKFJhd1R5cGVCaW5kaW5nLmdldF9j
b2RlX2dlbmVyYXRvcik6CisgICAgICAgIChSYXdUeXBlQmluZGluZy5nZXRfaW5fY190eXBlX3Rl
eHQpOgorICAgICAgICAoUmF3VHlwZUJpbmRpbmcuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9u
X3BhdHRlcm4pOgorICAgICAgICAoUmF3VHlwZUJpbmRpbmcucmVkdWNlX3RvX3Jhd190eXBlKToK
KyAgICAgICAgKFR5cGVEYXRhLl9faW5pdF9fKToKKyAgICAgICAgKFR5cGVEYXRhLmdldF9iaW5k
aW5nKToKKwogMjAxMi0wMS0xMSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4gUHJlcGFyZWQgYnkgU2hlcmlmZiBC
b3QuIFJvbGxpbmcgb3V0IHI5NDkwMi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXggMWIyZGNmYzFmMzM0ODYxOTg1MjhjYTE3
ZTQ0NjI3N2Q4NDAyY2U0MC4uOTdhNzdmOGU2NTQ0NmIwZWQ5ZWU4YTA3ZjhiMzI2YjljOTQwOGVj
NCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNw
ZWN0b3IucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNw
ZWN0b3IucHkKQEAgLTg5OCw2MCArODk4LDEwNyBAQCBjbGFzcyBUeXBlQmluZGluZ3M6CiAKICAg
ICAgICAgICAgICAgICByZXR1cm4gUGxhaW5PYmplY3RCaW5kaW5nCiAgICAgICAgIGVsaWYganNv
bl90eXBhYmxlWyJ0eXBlIl0gPT0gImFycmF5IjoKLSAgICAgICAgICAgIGlmICJpdGVtcyIgaW4g
anNvbl90eXBhYmxlOgogCi0gICAgICAgICAgICAgICAgY2xhc3MgQ29kZUdlbmVyYXRvcjoKLSAg
ICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgICAgICAgICBkZWYg
Z2VuZXJhdGVfdHlwZV9idWlsZGVyKHdyaXRlciwgZm9yd2FyZF9saXN0ZW5lcik6CisgICAgICAg
ICAgICBjbGFzcyBBcnJheUJpbmRpbmc6CisgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAor
ICAgICAgICAgICAgICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3IoKToKIAotICAgICAgICAgICAg
ICAgICAgICAgICAgY2xhc3MgQWRIb2NUeXBlQ29udGV4dDoKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdl
dF90eXBlX25hbWVfZml4KCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNz
IE5hbWVGaXg6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc19uYW1l
ID0gZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUgKyAiSXRlbSIKKyAgICAgICAgICAgICAgICAg
ICAgY2xhc3MgQ29kZUdlbmVyYXRvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNt
ZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIo
d3JpdGVyLCBmb3J3YXJkX2xpc3RlbmVyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWxwZXIud3JpdGVfZG9jKHdyaXRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFz
c19uYW1lID0gZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmaXhlZF90eXBlX25hbWUub3V0cHV0X2NvbW1lbnQod3JpdGVyKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJjbGFzcyAiKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoY2xhc3NfbmFtZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkge1xu
IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgicHVibGljOlxu
IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZV93cml0ZXIgPSB3cml0
ZXIuaW5zZXJ0X3dyaXRlcigiICAgICIpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAiaXRlbXMiIGluIGpzb25fdHlwYWJsZToKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbGFzcyBBZEhvY1R5cGVDb250ZXh0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmIGdldF90eXBlX25hbWVfZml4KCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2xhc3MgTmFtZUZpeDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2xhc3NfbmFtZSA9ICJJdGVtIgorCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIG91dHB1dF9jb21tZW50KHdyaXRlcik6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTmFtZUZpeAogCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgb3V0cHV0X2NvbW1lbnQod3JpdGVyKToK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZF90eXBlX25hbWUu
b3V0cHV0X2NvbW1lbnQod3JpdGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlci5uZXdsaW5lKCIvLyBOYW1lZCBhcyBhbiBpdGVtIG9mIGFycmF5LlxuIikK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBjYWxsX2dlbmVyYXRlX3R5
cGVfYnVpbGRlcihjb2RlX2dlbmVyYXRvcik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9idWlsZGVyKGFkX2hvY190
eXBlX3dyaXRlciwgZm9yd2FyZF9saXN0ZW5lcikKIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gTmFtZUZpeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
dGVtX3R5cGVfYmluZGluZyA9IHJlc29sdmVfcGFyYW1fdHlwZShqc29uX3R5cGFibGVbIml0ZW1z
Il0sIGNvbnRleHRfZG9tYWluX25hbWUsIEFkSG9jVHlwZUNvbnRleHQpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRl
bV90eXBlX2JpbmRpbmcgPSBSYXdUeXBlQmluZGluZyhSYXdUeXBlcy5BbnkpCiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZGVmIGNhbGxfZ2VuZXJhdGVfdHlwZV9idWlsZGVyKGNvZGVfZ2VuZXJhdG9yKToKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IuZ2VuZXJhdGVfdHlw
ZV9idWlsZGVyKHdyaXRlciwgZm9yd2FyZF9saXN0ZW5lcikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgaXRlbV90eXBlX29wdCBpbiBNZXRob2RHZW5lcmF0ZU1vZGVzLmdldF9tb2Rl
cyhpdGVtX3R5cGVfYmluZGluZyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdy
aXRlci5uZXdsaW5lKCIgICAgdm9pZCBhZGRJdGVtIikKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd3JpdGVyLmFwcGVuZCgiKCVzIHZhbHVlKVxuIiAlIGl0ZW1fdHlwZV9vcHQuZ2V0
X2NfcGFyYW1fdHlwZV90ZXh0KGl0ZW1fdHlwZV9iaW5kaW5nKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB7XG4iKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICAgICB0aGlzLT5wdXNoJXMoJXMp
O1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoaXRlbV90eXBlX2Jp
bmRpbmcucmVkdWNlX3RvX3Jhd190eXBlKCkuZ2V0X3NldHRlcl9uYW1lKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX3R5cGVfb3B0LmdldF9zZXR0ZXJfdmFs
dWVfZXhwcmVzc2lvbihpdGVtX3R5cGVfYmluZGluZywgInZhbHVlIikpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIH1cbiIpCiAKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc29sdmVfcGFyYW1fdHlwZShqc29uX3R5cGFibGVbIml0ZW1zIl0s
IGNvbnRleHRfZG9tYWluX25hbWUsIEFkSG9jVHlwZUNvbnRleHQpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IgPSBpdGVtX3R5cGVfYmluZGluZy5nZXRfY29kZV9n
ZW5lcmF0b3IoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvZGVfZ2VuZXJhdG9y
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvci5yZWdpc3Rl
cl91c2UoZm9yd2FyZF9saXN0ZW5lcikKIAotICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0
aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZWdpc3Rlcl91c2UoZm9yd2FyZF9saXN0ZW5l
cik6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd3JpdGVyLm5ld2xpbmUoIn07XG5cbiIpCisKKyAgICAgICAgICAgICAgICAgICAgICAg
IEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBnZW5lcmF0ZV9mb3J3
YXJkX2RlY2xhcmF0aW9uKHdyaXRlcik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xh
c3NfbmFtZSA9IGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd3JpdGVyLm5ld2xpbmUoImNsYXNzICIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd3JpdGVyLmFwcGVuZChjbGFzc19uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdyaXRlci5hcHBlbmQoIjtcbiIpCiAKLSAgICAgICAgICAgICAgICBkZWZhdWx0X2JpbmRp
bmdfY29kZV9nZW5lcmF0b3IgPSBDb2RlR2VuZXJhdG9yCisgICAgICAgICAgICAgICAgICAgICAg
ICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVnaXN0ZXJfdXNl
KGZvcndhcmRfbGlzdGVuZXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci5h
ZGRfdG9fZm9yd2FyZF9saXN0ZW5lcihmb3J3YXJkX2xpc3RlbmVyKQogCi0gICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICBkZWZhdWx0X2JpbmRpbmdfY29kZV9nZW5lcmF0b3IgPSBOb25lCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBDb2RlR2VuZXJhdG9yCisKKyAgICAgICAgICAgICAgICBA
Y2xhc3NtZXRob2QKKyAgICAgICAgICAgICAgICBkZWYgZ2V0X2luX2NfdHlwZV90ZXh0KGNscywg
b3B0aW9uYWwpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBhc3NSZWZQdHI8JXMlcz4i
ICUgKGhlbHBlci5mdWxsX25hbWVfcHJlZml4LCBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSkK
KworICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICBkZWYgZ2V0
X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIE5vbmUKKworICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAg
ICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBSYXdUeXBlcy5BcnJheQorCisgICAgICAgICAgICByZXR1cm4gQXJyYXlCaW5kaW5nCiAKICAg
ICAgICAgcmF3X3R5cGUgPSBSYXdUeXBlcy5nZXQoanNvbl90eXBhYmxlWyJ0eXBlIl0pCiAKLSAg
ICAgICAgY2xhc3MgUmF3VHlwZXNCaW5kaW5nOgotICAgICAgICAgICAgQHN0YXRpY21ldGhvZAot
ICAgICAgICAgICAgZGVmIGdldF9jb2RlX2dlbmVyYXRvcigpOgotICAgICAgICAgICAgICAgIHJl
dHVybiBkZWZhdWx0X2JpbmRpbmdfY29kZV9nZW5lcmF0b3IKKyAgICAgICAgcmV0dXJuIFJhd1R5
cGVCaW5kaW5nKHJhd190eXBlKQogCi0gICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAg
ICAgIGRlZiBnZXRfaW5fY190eXBlX3RleHQoY2xzLCBvcHRpb25hbCk6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGNscy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfY19wYXJhbV90eXBlKFBhcmFt
VHlwZS5FVkVOVCwgb3B0aW9uYWwpLmdldF90ZXh0KCkKIAotICAgICAgICAgICAgQHN0YXRpY21l
dGhvZAotICAgICAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJu
KCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKK2NsYXNzIFJhd1R5cGVCaW5kaW5nOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCByYXdfdHlwZSk6CisgICAgICAgIHNlbGYucmF3X3R5cGVf
ID0gcmF3X3R5cGUKIAotICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgZGVm
IHJlZHVjZV90b19yYXdfdHlwZSgpOgotICAgICAgICAgICAgICAgIHJldHVybiByYXdfdHlwZQor
ICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIHJldHVybiBOb25lCisK
KyAgICBkZWYgZ2V0X2luX2NfdHlwZV90ZXh0KHNlbGYsIG9wdGlvbmFsKToKKyAgICAgICAgcmV0
dXJuIHNlbGYucmF3X3R5cGVfLmdldF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLkVWRU5ULCBvcHRp
b25hbCkuZ2V0X3RleHQoKQogCi0gICAgICAgIHJldHVybiBSYXdUeXBlc0JpbmRpbmcKKyAgICBk
ZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oc2VsZik6CisgICAgICAgIHJl
dHVybiBOb25lCisKKyAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKHNlbGYpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5yYXdfdHlwZV8KIAogCiBjbGFzcyBUeXBlRGF0YShvYmplY3QpOgpAQCAtOTY2
LDEyICsxMDEzLDIzIEBAIGNsYXNzIFR5cGVEYXRhKG9iamVjdCk6CiAgICAgICAgIGpzb25fdHlw
ZV9uYW1lID0ganNvbl90eXBlWyJ0eXBlIl0KICAgICAgICAgcmF3X3R5cGUgPSBSYXdUeXBlcy5n
ZXQoanNvbl90eXBlX25hbWUpCiAgICAgICAgIHNlbGYucmF3X3R5cGVfID0gcmF3X3R5cGUKLSAg
ICAgICAgc2VsZi5iaW5kaW5nXyA9IFR5cGVCaW5kaW5ncy5jcmVhdGVfbmFtZWRfdHlwZV9kZWNs
YXJhdGlvbihqc29uX3R5cGUsIGpzb25fZG9tYWluWyJkb21haW4iXSwgc2VsZikKKyAgICAgICAg
c2VsZi5iaW5kaW5nX2JlaW5nX3Jlc29sdmVkXyA9IEZhbHNlCisgICAgICAgIHNlbGYuYmluZGlu
Z18gPSBOb25lCiAKICAgICBkZWYgZ2V0X3Jhd190eXBlKHNlbGYpOgogICAgICAgICByZXR1cm4g
c2VsZi5yYXdfdHlwZV8KIAogICAgIGRlZiBnZXRfYmluZGluZyhzZWxmKToKKyAgICAgICAgaWYg
bm90IHNlbGYuYmluZGluZ186CisgICAgICAgICAgICBpZiBzZWxmLmJpbmRpbmdfYmVpbmdfcmVz
b2x2ZWRfOgorICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yKCJUeXBlICVzIGlzIGFscmVhZHkg
YmVpbmcgcmVzb2x2ZWQiICUgc2VsZi5qc29uX3R5cGVfWyJ0eXBlIl0pCisgICAgICAgICAgICAj
IFJlc29sdmUgb25seSBsYXppbHksIGJlY2F1c2UgcmVzb2x2aW5nIG9uZSBuYW1lZCB0eXBlIG1h
eSByZXF1aXJlIHJlc29sdmluZyBzb21lIG90aGVyIG5hbWVkIHR5cGUuCisgICAgICAgICAgICBz
ZWxmLmJpbmRpbmdfYmVpbmdfcmVzb2x2ZWRfID0gVHJ1ZQorICAgICAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgICAgIHNlbGYuYmluZGluZ18gPSBUeXBlQmluZGluZ3MuY3JlYXRlX25hbWVkX3R5
cGVfZGVjbGFyYXRpb24oc2VsZi5qc29uX3R5cGVfLCBzZWxmLmpzb25fZG9tYWluX1siZG9tYWlu
Il0sIHNlbGYpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNlbGYuYmlu
ZGluZ19iZWluZ19yZXNvbHZlZF8gPSBGYWxzZQorCiAgICAgICAgIHJldHVybiBzZWxmLmJpbmRp
bmdfCiAKICAgICBkZWYgZ2V0X2pzb25fdHlwZShzZWxmKToK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122219</attachid>
            <date>2012-01-12 05:20:07 -0800</date>
            <delta_ts>2012-01-12 07:02:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75284-20120112172005.patch</filename>
            <type>text/plain</type>
            <size>11175</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NzIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmNlZTJkNzM1YzZmZDQy
ZWI1MzZkMzdlMzNhOWYwZDgwMWJlOWI0Zi4uNzI3MmZlYTljZjJkMmI0NDI3MmRmNDVjZmU3NTIz
OTAzNzk4NzY0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTAxLTEyICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OiBnZW5lcmF0ZSBhcnJheSB0eXBlcy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1Mjg0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IGNsYXNzZXMgYXJl
IGdlbmVyYXRlZCBmb3IgZWNhaCBhcnJheSB0eXBlIGluc3RhbmNlLgorCisgICAgICAgICogaW5z
cGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHk6CisgICAgICAgIChBcnJheUJpbmRpbmcp
OgorICAgICAgICAoQXJyYXlCaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcik6CisgICAgICAgIChB
cnJheUJpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yLkNvZGVHZW5lcmF0b3IpOgorICAgICAgICAo
QXJyYXlCaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvci5Db2RlR2VuZXJhdG9yLmdlbmVyYXRlX3R5
cGVfYnVpbGRlcik6CisgICAgICAgIChBcnJheUJpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yLkNv
ZGVHZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9idWlsZGVyLkFkSG9jVHlwZUNvbnRleHQpOgorICAg
ICAgICAoQXJyYXlCaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvci5Db2RlR2VuZXJhdG9yLmdlbmVy
YXRlX3R5cGVfYnVpbGRlci5BZEhvY1R5cGVDb250ZXh0LmdldF90eXBlX25hbWVfZml4KToKKyAg
ICAgICAgKEFycmF5QmluZGluZy5nZXRfY29kZV9nZW5lcmF0b3IuQ29kZUdlbmVyYXRvci5nZW5l
cmF0ZV90eXBlX2J1aWxkZXIuQWRIb2NUeXBlQ29udGV4dC5nZXRfdHlwZV9uYW1lX2ZpeC5OYW1l
Rml4KToKKyAgICAgICAgKEFycmF5QmluZGluZy5nZXRfY29kZV9nZW5lcmF0b3IuQ29kZUdlbmVy
YXRvci5nZW5lcmF0ZV90eXBlX2J1aWxkZXIuQWRIb2NUeXBlQ29udGV4dC5nZXRfdHlwZV9uYW1l
X2ZpeC5OYW1lRml4Lm91dHB1dF9jb21tZW50KToKKyAgICAgICAgKEFycmF5QmluZGluZy5nZXRf
Y29kZV9nZW5lcmF0b3IuQ29kZUdlbmVyYXRvci5nZW5lcmF0ZV90eXBlX2J1aWxkZXIuQWRIb2NU
eXBlQ29udGV4dC5jYWxsX2dlbmVyYXRlX3R5cGVfYnVpbGRlcik6CisgICAgICAgIChBcnJheUJp
bmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yLkNvZGVHZW5lcmF0b3IuZ2VuZXJhdGVfZm9yd2FyZF9k
ZWNsYXJhdGlvbik6CisgICAgICAgIChBcnJheUJpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yLkNv
ZGVHZW5lcmF0b3IucmVnaXN0ZXJfdXNlKToKKyAgICAgICAgKEFycmF5QmluZGluZy5nZXRfaW5f
Y190eXBlX3RleHQpOgorICAgICAgICAoQXJyYXlCaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhw
cmVzc2lvbl9wYXR0ZXJuKToKKyAgICAgICAgKEFycmF5QmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5
cGUpOgorICAgICAgICAoUmF3VHlwZUJpbmRpbmcpOgorICAgICAgICAoUmF3VHlwZUJpbmRpbmcu
X19pbml0X18pOgorICAgICAgICAoUmF3VHlwZUJpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yKToK
KyAgICAgICAgKFJhd1R5cGVCaW5kaW5nLmdldF9pbl9jX3R5cGVfdGV4dCk6CisgICAgICAgIChS
YXdUeXBlQmluZGluZy5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybik6CisgICAg
ICAgIChSYXdUeXBlQmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUpOgorICAgICAgICAoVHlwZURh
dGEuX19pbml0X18pOgorICAgICAgICAoVHlwZURhdGEuZ2V0X2JpbmRpbmcpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaDoKKwogMjAxMi0wMS0xMSAgQWxleGV5IFByb3Nr
dXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ci4gUHJlcGFyZWQgYnkgU2hlcmlmZiBCb3QuIFJvbGxpbmcgb3V0IHI5NDkwMi4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXgg
MWIyZGNmYzFmMzM0ODYxOTg1MjhjYTE3ZTQ0NjI3N2Q4NDAyY2U0MC4uZmQ5MWI0ZjgxYjVlNDZh
YjBiMDU5YTFhMWI2NTJmMDI4OGI4ODczMyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKQEAgLTg5OCw2MCArODk4LDExNSBAQCBj
bGFzcyBUeXBlQmluZGluZ3M6CiAKICAgICAgICAgICAgICAgICByZXR1cm4gUGxhaW5PYmplY3RC
aW5kaW5nCiAgICAgICAgIGVsaWYganNvbl90eXBhYmxlWyJ0eXBlIl0gPT0gImFycmF5IjoKLSAg
ICAgICAgICAgIGlmICJpdGVtcyIgaW4ganNvbl90eXBhYmxlOgogCi0gICAgICAgICAgICAgICAg
Y2xhc3MgQ29kZUdlbmVyYXRvcjoKLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAot
ICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVyKHdyaXRlciwgZm9y
d2FyZF9saXN0ZW5lcik6CisgICAgICAgICAgICBjbGFzcyBBcnJheUJpbmRpbmc6CisgICAgICAg
ICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgIGRlZiBnZXRfY29kZV9nZW5l
cmF0b3IoKToKIAotICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgQWRIb2NUeXBlQ29udGV4
dDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmIGdldF90eXBlX25hbWVfZml4KCk6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNsYXNzIE5hbWVGaXg6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjbGFzc19uYW1lID0gZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUgKyAi
SXRlbSIKKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgQ29kZUdlbmVyYXRvcjoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIod3JpdGVyLCBmb3J3YXJkX2xpc3RlbmVyKToKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWxwZXIud3JpdGVfZG9jKHdyaXRlcikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjbGFzc19uYW1lID0gZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25h
bWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZF90eXBlX25hbWUub3V0cHV0X2Nv
bW1lbnQod3JpdGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5l
KCJjbGFzcyAiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoY2xh
c3NfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIgOiBw
dWJsaWMgSW5zcGVjdG9yQXJyYXkge1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
cml0ZXIubmV3bGluZSgicHJpdmF0ZTpcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d3JpdGVyLm5ld2xpbmUoIiAgICAlcygpIHt9XG4iICUgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25h
bWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLmFwcGVuZCgiXG4iKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJwdWJsaWM6XG4iKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFkX2hvY190eXBlX3dyaXRlciA9IHdyaXRlci5pbnNl
cnRfd3JpdGVyKCIgICAgIikKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICJpdGVt
cyIgaW4ganNvbl90eXBhYmxlOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNs
YXNzIEFkSG9jVHlwZUNvbnRleHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYg
Z2V0X3R5cGVfbmFtZV9maXgoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjbGFzcyBOYW1lRml4OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjbGFzc19uYW1lID0gIkl0ZW0iCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWYgb3V0cHV0X2NvbW1lbnQod3JpdGVyKToKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOYW1lRml4CiAKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZiBvdXRwdXRfY29tbWVudCh3cml0ZXIpOgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkX3R5cGVfbmFtZS5vdXRwdXRf
Y29tbWVudCh3cml0ZXIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d3JpdGVyLm5ld2xpbmUoIi8vIE5hbWVkIGFzIGFuIGl0ZW0gb2YgYXJyYXkuXG4iKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGNhbGxfZ2VuZXJhdGVfdHlwZV9idWls
ZGVyKGNvZGVfZ2VuZXJhdG9yKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb2RlX2dlbmVyYXRvci5nZW5lcmF0ZV90eXBlX2J1aWxkZXIoYWRfaG9jX3R5cGVfd3Jp
dGVyLCBmb3J3YXJkX2xpc3RlbmVyKQogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBOYW1lRml4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fdHlw
ZV9iaW5kaW5nID0gcmVzb2x2ZV9wYXJhbV90eXBlKGpzb25fdHlwYWJsZVsiaXRlbXMiXSwgY29u
dGV4dF9kb21haW5fbmFtZSwgQWRIb2NUeXBlQ29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX3R5cGVf
YmluZGluZyA9IFJhd1R5cGVCaW5kaW5nKFJhd1R5cGVzLkFueSkKIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWYgY2FsbF9nZW5lcmF0ZV90eXBlX2J1aWxkZXIoY29kZV9nZW5lcmF0b3IpOgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvci5nZW5lcmF0ZV90eXBlX2J1aWxk
ZXIod3JpdGVyLCBmb3J3YXJkX2xpc3RlbmVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciBpdGVtX3R5cGVfb3B0IGluIE1ldGhvZEdlbmVyYXRlTW9kZXMuZ2V0X21vZGVzKGl0ZW1f
dHlwZV9iaW5kaW5nKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5l
d2xpbmUoIiAgICB2b2lkIGFkZEl0ZW0iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3cml0ZXIuYXBwZW5kKCIoJXMgdmFsdWUpXG4iICUgaXRlbV90eXBlX29wdC5nZXRfY19wYXJh
bV90eXBlX3RleHQoaXRlbV90eXBlX2JpbmRpbmcpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIHtcbiIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgIHRoaXMtPnB1c2glcyglcyk7XG4iCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChpdGVtX3R5cGVfYmluZGluZy5y
ZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfc2V0dGVyX25hbWUoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fdHlwZV9vcHQuZ2V0X3NldHRlcl92YWx1ZV9leHBy
ZXNzaW9uKGl0ZW1fdHlwZV9iaW5kaW5nLCAidmFsdWUiKSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgfVxuIikKIAotICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzb2x2ZV9wYXJhbV90eXBlKGpzb25fdHlwYWJsZVsiaXRlbXMiXSwgY29udGV4
dF9kb21haW5fbmFtZSwgQWRIb2NUeXBlQ29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3cml0ZXIuYXBwZW5kKCJcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLm5ld2xpbmUoIiAgICBzdGF0aWMgUGFzc1JlZlB0cjwlcz4gY3JlYXRlKCkge1xuIiAlIGZp
eGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdy
aXRlci5uZXdsaW5lKCIgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgJXMoKSk7XG4iICUgZml4
ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3Jp
dGVyLm5ld2xpbmUoIiAgICB9XG4iKQogCi0gICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRo
b2QKLSAgICAgICAgICAgICAgICAgICAgZGVmIHJlZ2lzdGVyX3VzZShmb3J3YXJkX2xpc3RlbmVy
KToKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb2RlX2dlbmVyYXRvciA9IGl0ZW1fdHlwZV9iaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRv
cigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29kZV9nZW5lcmF0b3I6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfZ2VuZXJhdG9yLnJlZ2lzdGVyX3VzZShm
b3J3YXJkX2xpc3RlbmVyKQogCi0gICAgICAgICAgICAgICAgZGVmYXVsdF9iaW5kaW5nX2NvZGVf
Z2VuZXJhdG9yID0gQ29kZUdlbmVyYXRvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdy
aXRlci5uZXdsaW5lKCJ9O1xuXG4iKQogCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkZWZh
dWx0X2JpbmRpbmdfY29kZV9nZW5lcmF0b3IgPSBOb25lCisgICAgICAgICAgICAgICAgICAgICAg
ICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfZm9y
d2FyZF9kZWNsYXJhdGlvbih3cml0ZXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNs
YXNzX25hbWUgPSBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJjbGFzcyAiKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdyaXRlci5hcHBlbmQoY2xhc3NfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3cml0ZXIuYXBwZW5kKCI7XG4iKQorCisgICAgICAgICAgICAgICAgICAgICAgICBAc3Rh
dGljbWV0aG9kCisgICAgICAgICAgICAgICAgICAgICAgICBkZWYgcmVnaXN0ZXJfdXNlKGZvcndh
cmRfbGlzdGVuZXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci5hZGRfdG9f
Zm9yd2FyZF9saXN0ZW5lcihmb3J3YXJkX2xpc3RlbmVyKQorCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBDb2RlR2VuZXJhdG9yCisKKyAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAg
ICAgICAgICAgICAgICBkZWYgZ2V0X2luX2NfdHlwZV90ZXh0KGNscywgb3B0aW9uYWwpOgorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gIlBhc3NSZWZQdHI8JXMlcz4iICUgKGhlbHBlci5mdWxs
X25hbWVfcHJlZml4LCBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSkKKworICAgICAgICAgICAg
ICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9l
eHByZXNzaW9uX3BhdHRlcm4oKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKwor
ICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICBkZWYgcmVkdWNl
X3RvX3Jhd190eXBlKCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5BcnJh
eQorCisgICAgICAgICAgICByZXR1cm4gQXJyYXlCaW5kaW5nCiAKICAgICAgICAgcmF3X3R5cGUg
PSBSYXdUeXBlcy5nZXQoanNvbl90eXBhYmxlWyJ0eXBlIl0pCiAKLSAgICAgICAgY2xhc3MgUmF3
VHlwZXNCaW5kaW5nOgotICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgZGVm
IGdldF9jb2RlX2dlbmVyYXRvcigpOgotICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0X2Jp
bmRpbmdfY29kZV9nZW5lcmF0b3IKKyAgICAgICAgcmV0dXJuIFJhd1R5cGVCaW5kaW5nKHJhd190
eXBlKQogCi0gICAgICAgICAgICBAY2xhc3NtZXRob2QKLSAgICAgICAgICAgIGRlZiBnZXRfaW5f
Y190eXBlX3RleHQoY2xzLCBvcHRpb25hbCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNscy5y
ZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfY19wYXJhbV90eXBlKFBhcmFtVHlwZS5FVkVOVCwgb3B0
aW9uYWwpLmdldF90ZXh0KCkKIAotICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAg
ICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKCk6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIE5vbmUKK2NsYXNzIFJhd1R5cGVCaW5kaW5nOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCByYXdfdHlwZSk6CisgICAgICAgIHNlbGYucmF3X3R5cGVfID0gcmF3X3R5cGUKIAot
ICAgICAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgZGVmIHJlZHVjZV90b19yYXdf
dHlwZSgpOgotICAgICAgICAgICAgICAgIHJldHVybiByYXdfdHlwZQorICAgIGRlZiBnZXRfY29k
ZV9nZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgZ2V0X2lu
X2NfdHlwZV90ZXh0KHNlbGYsIG9wdGlvbmFsKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmF3X3R5
cGVfLmdldF9jX3BhcmFtX3R5cGUoUGFyYW1UeXBlLkVWRU5ULCBvcHRpb25hbCkuZ2V0X3RleHQo
KQogCi0gICAgICAgIHJldHVybiBSYXdUeXBlc0JpbmRpbmcKKyAgICBkZWYgZ2V0X3NldHRlcl92
YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oc2VsZik6CisgICAgICAgIHJldHVybiBOb25lCisKKyAg
ICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5yYXdf
dHlwZV8KIAogCiBjbGFzcyBUeXBlRGF0YShvYmplY3QpOgpAQCAtOTY2LDEyICsxMDIxLDIzIEBA
IGNsYXNzIFR5cGVEYXRhKG9iamVjdCk6CiAgICAgICAgIGpzb25fdHlwZV9uYW1lID0ganNvbl90
eXBlWyJ0eXBlIl0KICAgICAgICAgcmF3X3R5cGUgPSBSYXdUeXBlcy5nZXQoanNvbl90eXBlX25h
bWUpCiAgICAgICAgIHNlbGYucmF3X3R5cGVfID0gcmF3X3R5cGUKLSAgICAgICAgc2VsZi5iaW5k
aW5nXyA9IFR5cGVCaW5kaW5ncy5jcmVhdGVfbmFtZWRfdHlwZV9kZWNsYXJhdGlvbihqc29uX3R5
cGUsIGpzb25fZG9tYWluWyJkb21haW4iXSwgc2VsZikKKyAgICAgICAgc2VsZi5iaW5kaW5nX2Jl
aW5nX3Jlc29sdmVkXyA9IEZhbHNlCisgICAgICAgIHNlbGYuYmluZGluZ18gPSBOb25lCiAKICAg
ICBkZWYgZ2V0X3Jhd190eXBlKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5yYXdfdHlwZV8K
IAogICAgIGRlZiBnZXRfYmluZGluZyhzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuYmluZGlu
Z186CisgICAgICAgICAgICBpZiBzZWxmLmJpbmRpbmdfYmVpbmdfcmVzb2x2ZWRfOgorICAgICAg
ICAgICAgICAgIHJhaXNlIEVycm9yKCJUeXBlICVzIGlzIGFscmVhZHkgYmVpbmcgcmVzb2x2ZWQi
ICUgc2VsZi5qc29uX3R5cGVfWyJ0eXBlIl0pCisgICAgICAgICAgICAjIFJlc29sdmUgb25seSBs
YXppbHksIGJlY2F1c2UgcmVzb2x2aW5nIG9uZSBuYW1lZCB0eXBlIG1heSByZXF1aXJlIHJlc29s
dmluZyBzb21lIG90aGVyIG5hbWVkIHR5cGUuCisgICAgICAgICAgICBzZWxmLmJpbmRpbmdfYmVp
bmdfcmVzb2x2ZWRfID0gVHJ1ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNl
bGYuYmluZGluZ18gPSBUeXBlQmluZGluZ3MuY3JlYXRlX25hbWVkX3R5cGVfZGVjbGFyYXRpb24o
c2VsZi5qc29uX3R5cGVfLCBzZWxmLmpzb25fZG9tYWluX1siZG9tYWluIl0sIHNlbGYpCisgICAg
ICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNlbGYuYmluZGluZ19iZWluZ19yZXNv
bHZlZF8gPSBGYWxzZQorCiAgICAgICAgIHJldHVybiBzZWxmLmJpbmRpbmdfCiAKICAgICBkZWYg
Z2V0X2pzb25fdHlwZShzZWxmKToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaAppbmRleCA3ZTk1M2E0OGZkODU2NDMyOWM4NzE4ZDA1NWUxOGNjMDA4NzZkNjk4Li5l
MTAwYWRlYWQyMWQwMGU2MjFlMzJlNjA5ZTE5NTZiYWU5OWNjYmU3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCkBAIC0yNDQsOCArMjQ0LDEwIEBAIHB1Ymxp
YzoKICAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5iZWdp
bigpOyB9CiAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmVu
ZCgpOyB9CiAKLXByaXZhdGU6Citwcm90ZWN0ZWQ6CiAgICAgSW5zcGVjdG9yQXJyYXkoKTsKKwor
cHJpdmF0ZToKICAgICBWZWN0b3I8UmVmUHRyPEluc3BlY3RvclZhbHVlPiA+IG1fZGF0YTsKIH07
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>122224</attachid>
            <date>2012-01-12 06:08:01 -0800</date>
            <delta_ts>2012-01-12 06:08:01 -0800</delta_ts>
            <desc>InspectorFrontend.h base version</desc>
            <filename>InspectorFrontend.base.h</filename>
            <type>text/plain</type>
            <size>145054</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgojaWZuZGVmIEluc3BlY3RvckZyb250ZW5kX2gKI2RlZmluZSBJbnNw
ZWN0b3JGcm9udGVuZF9oCgojaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiNpbmNsdWRlIDxQ
bGF0Zm9ybVN0cmluZy5oPgojaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KCm5hbWVzcGFjZSBX
ZWJDb3JlIHsKCmNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKCi8vIEJvdGggSW5zcGVj
dG9yT2JqZWN0IGFuZCBJbnNwZWN0b3JBcnJheSBtYXkgb3IgbWF5IG5vdCBiZSBkZWNsYXJlZCBh
dCB0aGlzIHBvaW50IGFzIGRlZmluZWQgYnkgRU5BQkxFRF9JTlNQRUNUT1IuCi8vIERvdWJsZS1j
aGVjayB3ZSBoYXZlIHRoZW0gYXQgbGVhc3QgYXMgZm9yd2FyZCBkZWNsYXJhdGlvbi4KY2xhc3Mg
SW5zcGVjdG9yQXJyYXk7CmNsYXNzIEluc3BlY3Rvck9iamVjdDsKCnR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwoKI2lmIEVOQUJMRShJTlNQRUNUT1IpCgpuYW1lc3BhY2UgVHlwZUJ1aWxkZXIg
ewovLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KbmFtZXNwYWNlIENTUyB7CmNsYXNzIFNvdXJjZVJh
bmdlOwpjbGFzcyBDU1NTdHlsZTsKfSAvLyBDU1MKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJV
R0dFUikKbmFtZXNwYWNlIERlYnVnZ2VyIHsKY2xhc3MgTG9jYXRpb247Cn0gLy8gRGVidWdnZXIK
CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLy8gRW5kIG9mIGZvcndhcmQg
ZGVjbGFyYXRpb25zLgoKClN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7Cgpu
YW1lc3BhY2UgTWVtb3J5IHsKLyogTnVtYmVyIG9mIG5vZGVzIHdpdGggZ2l2ZW4gbmFtZS4gKi8K
Y2xhc3MgTm9kZUNvdW50IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVu
dW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBOb2RlTmFtZVNldCA9IDEgPDwg
MCwKICAgICAgICBDb3VudFNldCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTm9k
ZU5hbWVTZXQgfCBDb3VudFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAg
Y2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8
IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcihQYXNzUmVmUHRyPE5vZGVDb3VudD4gcHRyKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9p
bl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0K
ICAgICAgICBmcmllbmQgY2xhc3MgTm9kZUNvdW50OwogICAgcHVibGljOgoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgTm9kZU5hbWVTZXQ+JiBzZXROb2RlTmFtZShjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vZGVOYW1l
U2V0KSwgcHJvcGVydHlfbm9kZU5hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJub2RlTmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxOb2RlTmFtZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBD
b3VudFNldD4mIHNldENvdW50KGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBDb3VudFNldCksIHByb3BlcnR5X2NvdW50X2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiY291bnQiLCB2YWx1ZSk7CiAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q291bnRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBv
cGVyYXRvciBSZWZQdHI8Tm9kZUNvdW50PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Tm9kZUNvdW50Pio+KCZt
X3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPE5vZGVDb3Vu
dD4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Tm9kZUNvdW50PigqdGhp
cyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgogICAgICogUmVmUHRyPE5vZGVDb3VudD4gcmVzdWx0ID0gTm9kZUNvdW50OjpjcmVhdGUoKQog
ICAgICogICAgIC5zZXROb2RlTmFtZSguLi4pCiAgICAgKiAgICAgLnNldENvdW50KC4uLik7CiAg
ICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAg
ICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgTm9kZUNvdW50KCkp
KTsKICAgIH0KfTsKCi8qIE51bWJlciBvZiBKUyBldmVudCBsaXN0ZW5lcnMgYnkgZXZlbnQgdHlw
ZS4gKi8KY2xhc3MgTGlzdGVuZXJDb3VudCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJs
aWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgVHlwZVNldCA9
IDEgPDwgMCwKICAgICAgICBDb3VudFNldCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQg
PSAoVHlwZVNldCB8IENvdW50U2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAg
ICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRF
IHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8TGlzdGVuZXJDb3VudD4gcHRyKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3Jl
YXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAg
ICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgTGlzdGVuZXJDb3VudDsKICAgIHB1YmxpYzoKCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFR5cGVTZXQ+JiBzZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHlwZVNl
dCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVT
ZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ291bnRTZXQ+JiBzZXRD
b3VudChpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgQ291bnRTZXQpLCBwcm9wZXJ0eV9jb3VudF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXROdW1iZXIoImNvdW50IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPENvdW50U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRy
PExpc3RlbmVyQ291bnQ+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxMaXN0ZW5lckNvdW50Pio+KCZtX3Jlc3Vs
dCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPExpc3RlbmVyQ291bnQ+
ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPExpc3RlbmVyQ291bnQ+KCp0
aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0
b3I6CiAgICAgKiBSZWZQdHI8TGlzdGVuZXJDb3VudD4gcmVzdWx0ID0gTGlzdGVuZXJDb3VudDo6
Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VHlwZSguLi4pCiAgICAgKiAgICAgLnNldENvdW50KC4u
Lik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAg
ewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgTGlzdGVu
ZXJDb3VudCgpKSk7CiAgICB9Cn07CgpjbGFzcyBET01Hcm91cCA6IHB1YmxpYyBJbnNwZWN0b3JP
YmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAg
ICAgU2l6ZVNldCA9IDEgPDwgMCwKICAgICAgICBUaXRsZVNldCA9IDEgPDwgMSwKICAgICAgICBO
b2RlQ291bnRTZXQgPSAxIDw8IDIsCiAgICAgICAgTGlzdGVuZXJDb3VudFNldCA9IDEgPDwgMywK
ICAgICAgICBBbGxGaWVsZHNTZXQgPSAoU2l6ZVNldCB8IFRpdGxlU2V0IHwgTm9kZUNvdW50U2V0
IHwgTGlzdGVuZXJDb3VudFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAg
Y2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8
IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcihQYXNzUmVmUHRyPERPTUdyb3VwPiBwdHIpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2lu
X25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQog
ICAgICAgIGZyaWVuZCBjbGFzcyBET01Hcm91cDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IFNpemVTZXQ+JiBzZXRTaXplKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTaXplU2V0KSwgcHJvcGVydHlfc2l6ZV9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNpemUiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U2l6ZVNldD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBUaXRsZVNldD4mIHNldFRpdGxlKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVGl0bGVT
ZXQpLCBwcm9wZXJ0eV90aXRsZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoInRpdGxlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRp
dGxlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5vZGVDb3VudFNl
dD4mIHNldE5vZGVDb3VudChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOb2RlQ291bnRTZXQpLCBw
cm9wZXJ0eV9ub2RlQ291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
QXJyYXkoIm5vZGVDb3VudCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxO
b2RlQ291bnRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTGlzdGVu
ZXJDb3VudFNldD4mIHNldExpc3RlbmVyQ291bnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4g
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTGlz
dGVuZXJDb3VudFNldCksIHByb3BlcnR5X2xpc3RlbmVyQ291bnRfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImxpc3RlbmVyQ291bnQiLCB2YWx1ZSk7CiAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8TGlzdGVuZXJDb3VudFNldD4oKTsKICAgICAgICB9Cgog
ICAgICAgIG9wZXJhdG9yIFJlZlB0cjxET01Hcm91cD4mICgpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVh
ZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPERPTUdyb3Vw
Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPERP
TUdyb3VwPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxET01Hcm91cD4o
KnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1
Y3RvcjoKICAgICAqIFJlZlB0cjxET01Hcm91cD4gcmVzdWx0ID0gRE9NR3JvdXA6OmNyZWF0ZSgp
CiAgICAgKiAgICAgLnNldFNpemUoLi4uKQogICAgICogICAgIC5zZXRUaXRsZSguLi4pCiAgICAg
KiAgICAgLnNldE5vZGVDb3VudCguLi4pCiAgICAgKiAgICAgLnNldExpc3RlbmVyQ291bnQoLi4u
KTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7
CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBET01Hcm91
cCgpKSk7CiAgICB9CgogICAgdm9pZCBzZXREb2N1bWVudFVSSShjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygiZG9jdW1lbnRVUkkiLCB2YWx1ZSk7CiAg
ICB9Cn07Cgp9IC8vIE1lbW9yeQoKbmFtZXNwYWNlIFBhZ2UgewovKiBSZXNvdXJjZSB0eXBlIGFz
IGl0IHdhcyBwZXJjZWl2ZWQgYnkgdGhlIHJlbmRlcmluZyBlbmdpbmUuICovCnN0cnVjdCBSZXNv
dXJjZVR5cGUgewogICAgZW51bSBFbnVtIHsKICAgICAgICBEb2N1bWVudCA9IDAsCiAgICAgICAg
U3R5bGVzaGVldCA9IDEsCiAgICAgICAgSW1hZ2UgPSAyLAogICAgICAgIEZvbnQgPSAzLAogICAg
ICAgIFNjcmlwdCA9IDQsCiAgICAgICAgWEhSID0gNSwKICAgICAgICBXZWJTb2NrZXQgPSA2LAog
ICAgICAgIE90aGVyID0gNywKICAgIH07Cn07IC8vIHN0cnVjdCBSZXNvdXJjZVR5cGUKCi8qIElu
Zm9ybWF0aW9uIGFib3V0IHRoZSBGcmFtZSBvbiB0aGUgcGFnZS4gKi8KY2xhc3MgRnJhbWUgOiBw
dWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVs
ZHNTZXQgPSAwLAogICAgICAgIElkU2V0ID0gMSA8PCAwLAogICAgICAgIExvYWRlcklkU2V0ID0g
MSA8PCAxLAogICAgICAgIFVybFNldCA9IDEgPDwgMiwKICAgICAgICBNaW1lVHlwZVNldCA9IDEg
PDwgMywKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoSWRTZXQgfCBMb2FkZXJJZFNldCB8IFVybFNl
dCB8IE1pbWVUeXBlU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFz
cyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RF
UD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyKFBhc3NSZWZQdHI8RnJhbWU+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2lu
aXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAg
ZnJpZW5kIGNsYXNzIEZyYW1lOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
SWRTZXQ+JiBzZXRJZChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIElkU2V0KSwgcHJvcGVydHlfaWRfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJpZCIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxJZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBMb2FkZXJJZFNldD4mIHNldExvYWRlcklkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTG9hZGVySWRTZXQp
LCBwcm9wZXJ0eV9sb2FkZXJJZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoImxvYWRlcklkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PExvYWRlcklkU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVybFNl
dD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFVybFNldCksIHByb3BlcnR5X3VybF9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxVcmxTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgTWltZVR5cGVTZXQ+JiBzZXRNaW1lVHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1pbWVUeXBlU2V0
KSwgcHJvcGVydHlfbWltZVR5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJtaW1lVHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxNaW1lVHlwZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxGcmFt
ZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxG
aWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8UmVmUHRyPEZyYW1lPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBQYXNzUmVmUHRyPEZyYW1lPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuIFJlZlB0cjxGcmFtZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAq
IFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxGcmFtZT4gcmVzdWx0ID0gRnJh
bWU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldElkKC4uLikKICAgICAqICAgICAuc2V0TG9hZGVy
SWQoLi4uKQogICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICogICAgIC5zZXRNaW1lVHlwZSgu
Li4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAg
IHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IEZyYW1l
KCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFBhcmVudElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJwYXJlbnRJZCIsIHZhbHVlKTsKICAgIH0KCiAg
ICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBJbmZvcm1hdGlvbiBhYm91dCB0
aGUgRnJhbWUgaGllcmFyY2h5IGFsb25nIHdpdGggdGhlaXIgY2FjaGVkIHJlc291cmNlcy4gKi8K
Y2xhc3MgRnJhbWVSZXNvdXJjZVRyZWUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGlj
OgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAncmVzb3VyY2VzJyB3aGlsZSBnZW5l
cmF0aW5nIEZyYW1lUmVzb3VyY2VUcmVlLgogICAgLy8gTmFtZWQgYXMgYW4gaXRlbSBvZiBhcnJh
eS4KICAgIGNsYXNzIFJlc291cmNlc0l0ZW0gOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKICAg
IHB1YmxpYzoKICAgICAgICBlbnVtIHsKICAgICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAg
ICAgICAgICBVcmxTZXQgPSAxIDw8IDAsCiAgICAgICAgICAgIFR5cGVTZXQgPSAxIDw8IDEsCiAg
ICAgICAgICAgIE1pbWVUeXBlU2V0ID0gMSA8PCAyLAogICAgICAgICAgICBBbGxGaWVsZHNTZXQg
PSAoVXJsU2V0IHwgVHlwZVNldCB8IE1pbWVUeXBlU2V0KQogICAgICAgIH07CgogICAgICAgIHRl
bXBsYXRlPGludCBTVEFURT4KICAgICAgICBjbGFzcyBCdWlsZGVyIHsKICAgICAgICBwcml2YXRl
OgogICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAg
ICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxC
dWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAg
QnVpbGRlcihQYXNzUmVmUHRyPFJlc291cmNlc0l0ZW0+IHB0cikKICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJf
Y3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgICAgICBtX3Jlc3VsdCA9IHB0
cjsKICAgICAgICAgICAgfQogICAgICAgICAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VzSXRlbTsK
ICAgICAgICBwdWJsaWM6CiAgICAKICAgICAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVybFNldD4m
IHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVXJsU2V0KSwgcHJvcGVydHlfdXJsX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsK
ICAgICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VXJsU2V0PigpOwogICAgICAgICAgICB9
CiAgICAKICAgICAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR5cGVTZXQ+JiBzZXRUeXBlKFR5cGVC
dWlsZGVyOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkVudW0gdmFsdWUpCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlf
dHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0
eXBlIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgICAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8VHlwZVNldD4oKTsKICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHlwZVNl
dCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8VHlwZVNldD4oKTsKICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBNaW1lVHlwZVNldD4mIHNldE1pbWVUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNaW1lVHlw
ZVNldCksIHByb3BlcnR5X21pbWVUeXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoIm1pbWVUeXBlIiwgdmFsdWUpOwogICAgICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxNaW1lVHlwZVNldD4oKTsKICAgICAgICAgICAgfQogICAgCiAgICAgICAg
ICAgIG9wZXJhdG9yIFJlZlB0cjxSZXNvdXJjZXNJdGVtPiYgKCkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRf
aXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxS
ZWZQdHI8UmVzb3VyY2VzSXRlbT4qPigmbV9yZXN1bHQpOwogICAgICAgICAgICB9CgogICAgICAg
ICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFJlc291cmNlc0l0ZW0+ICgpCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgIHJldHVybiBSZWZQdHI8UmVzb3VyY2VzSXRlbT4oKnRoaXMpOwogICAg
ICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgLyoKICAgICAgICAgKiBTeW50aGV0aWMgY29u
c3RydWN0b3I6CiAgICAgICAgICogUmVmUHRyPFJlc291cmNlc0l0ZW0+IHJlc3VsdCA9IFJlc291
cmNlc0l0ZW06OmNyZWF0ZSgpCiAgICAgICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICAgICAq
ICAgICAuc2V0VHlwZSguLi4pCiAgICAgICAgICogICAgIC5zZXRNaW1lVHlwZSguLi4pOwogICAg
ICAgICAqLwogICAgICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAg
ICAgIHsKICAgICAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5l
dyBSZXNvdXJjZXNJdGVtKCkpKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewogICAgICAg
IE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBGcmFtZVNldCA9IDEgPDwgMCwKICAgICAgICBSZXNv
dXJjZXNTZXQgPSAxIDw8IDEsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKEZyYW1lU2V0IHwgUmVz
b3VyY2VzU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWls
ZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1
bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
KFBhc3NSZWZQdHI8RnJhbWVSZXNvdXJjZVRyZWU+IHB0cikKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5f
bm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAg
ICAgICAgZnJpZW5kIGNsYXNzIEZyYW1lUmVzb3VyY2VUcmVlOwogICAgcHVibGljOgoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgRnJhbWVTZXQ+JiBzZXRGcmFtZSgvKlBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6OlBhZ2U6OkZyYW1lPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBGcmFtZVNldCks
IHByb3BlcnR5X2ZyYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9i
amVjdCgiZnJhbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RnJhbWVT
ZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUmVzb3VyY2VzU2V0PiYg
c2V0UmVzb3VyY2VzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFJlc291cmNlc1NldCksIHByb3Bl
cnR5X3Jlc291cmNlc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJh
eSgicmVzb3VyY2VzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFJlc291
cmNlc1NldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxGcmFtZVJlc291
cmNlVHJlZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEZyYW1lUmVzb3VyY2VUcmVlPio+KCZtX3Jlc3VsdCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEZyYW1lUmVzb3VyY2VUcmVl
PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxGcmFtZVJlc291cmNlVHJl
ZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25z
dHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxGcmFtZVJlc291cmNlVHJlZT4gcmVzdWx0ID0gRnJhbWVS
ZXNvdXJjZVRyZWU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldEZyYW1lKC4uLikKICAgICAqICAg
ICAuc2V0UmVzb3VyY2VzKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRz
U2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0Pihh
ZG9wdFJlZihuZXcgRnJhbWVSZXNvdXJjZVRyZWUoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0Q2hp
bGRGcmFtZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICB7CiAgICAgICAg
dGhpcy0+c2V0QXJyYXkoImNoaWxkRnJhbWVzIiwgdmFsdWUpOwogICAgfQp9OwoKLyogU2VhcmNo
IG1hdGNoIGZvciByZXNvdXJjZS4gKi8KY2xhc3MgU2VhcmNoTWF0Y2ggOiBwdWJsaWMgSW5zcGVj
dG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAog
ICAgICAgIExpbmVOdW1iZXJTZXQgPSAxIDw8IDAsCiAgICAgICAgTGluZUNvbnRlbnRTZXQgPSAx
IDw8IDEsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKExpbmVOdW1iZXJTZXQgfCBMaW5lQ29udGVu
dFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7
CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoK
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3Rh
dGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNz
UmVmUHRyPFNlYXJjaE1hdGNoPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0
YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVu
ZCBjbGFzcyBTZWFyY2hNYXRjaDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IExpbmVOdW1iZXJTZXQ+JiBzZXRMaW5lTnVtYmVyKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBMaW5lTnVtYmVyU2V0KSwgcHJvcGVy
dHlfbGluZU51bWJlcl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1i
ZXIoImxpbmVOdW1iZXIiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TGlu
ZU51bWJlclNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBMaW5lQ29u
dGVudFNldD4mIHNldExpbmVDb250ZW50KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTGluZUNvbnRlbnRTZXQpLCBwcm9w
ZXJ0eV9saW5lQ29udGVudF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRT
dHJpbmcoImxpbmVDb250ZW50IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PExpbmVDb250ZW50U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFNl
YXJjaE1hdGNoPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8U2VhcmNoTWF0Y2g+Kj4oJm1fcmVzdWx0KTsKICAg
ICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8U2VhcmNoTWF0Y2g+ICgpCiAgICAg
ICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFNlYXJjaE1hdGNoPigqdGhpcyk7CiAgICAg
ICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICog
UmVmUHRyPFNlYXJjaE1hdGNoPiByZXN1bHQgPSBTZWFyY2hNYXRjaDo6Y3JlYXRlKCkKICAgICAq
ICAgICAuc2V0TGluZU51bWJlciguLi4pCiAgICAgKiAgICAgLnNldExpbmVDb250ZW50KC4uLik7
CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewog
ICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgU2VhcmNoTWF0
Y2goKSkpOwogICAgfQp9OwoKLyogU2VhcmNoIHJlc3VsdCBmb3IgcmVzb3VyY2UuICovCmNsYXNz
IFNlYXJjaFJlc3VsdCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVt
IHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgVXJsU2V0ID0gMSA8PCAwLAogICAg
ICAgIEZyYW1lSWRTZXQgPSAxIDw8IDEsCiAgICAgICAgTWF0Y2hlc0NvdW50U2V0ID0gMSA8PCAy
LAogICAgICAgIEFsbEZpZWxkc1NldCA9IChVcmxTZXQgfCBGcmFtZUlkU2V0IHwgTWF0Y2hlc0Nv
dW50U2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVy
IHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7
CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RT
dGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVp
bGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBh
c3NSZWZQdHI8U2VhcmNoUmVzdWx0PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZy
aWVuZCBjbGFzcyBTZWFyY2hSZXN1bHQ7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBVcmxTZXQ+JiBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVcmxTZXQpLCBwcm9wZXJ0eV91cmxfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VXJsU2V0PigpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IEZyYW1lSWRTZXQ+JiBzZXRGcmFtZUlkKGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRnJh
bWVJZFNldCksIHByb3BlcnR5X2ZyYW1lSWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKCJmcmFtZUlkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPEZyYW1lSWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
TWF0Y2hlc0NvdW50U2V0PiYgc2V0TWF0Y2hlc0NvdW50KGRvdWJsZSB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNYXRjaGVzQ291bnRTZXQpLCBw
cm9wZXJ0eV9tYXRjaGVzQ291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0TnVtYmVyKCJtYXRjaGVzQ291bnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8TWF0Y2hlc0NvdW50U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVm
UHRyPFNlYXJjaFJlc3VsdD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAg
ICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFNlYXJjaFJlc3VsdD4qPigmbV9yZXN1
bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxTZWFyY2hSZXN1bHQ+
ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFNlYXJjaFJlc3VsdD4oKnRo
aXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKICAgICAqIFJlZlB0cjxTZWFyY2hSZXN1bHQ+IHJlc3VsdCA9IFNlYXJjaFJlc3VsdDo6Y3Jl
YXRlKCkKICAgICAqICAgICAuc2V0VXJsKC4uLikKICAgICAqICAgICAuc2V0RnJhbWVJZCguLi4p
CiAgICAgKiAgICAgLnNldE1hdGNoZXNDb3VudCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVp
bGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxO
b0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFNlYXJjaFJlc3VsdCgpKSk7CiAgICB9Cn07CgovKiBD
b29raWUgb2JqZWN0ICovCmNsYXNzIENvb2tpZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qgewpw
dWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgTmFtZVNl
dCA9IDEgPDwgMCwKICAgICAgICBWYWx1ZVNldCA9IDEgPDwgMSwKICAgICAgICBEb21haW5TZXQg
PSAxIDw8IDIsCiAgICAgICAgUGF0aFNldCA9IDEgPDwgMywKICAgICAgICBFeHBpcmVzU2V0ID0g
MSA8PCA0LAogICAgICAgIFNpemVTZXQgPSAxIDw8IDUsCiAgICAgICAgSHR0cE9ubHlTZXQgPSAx
IDw8IDYsCiAgICAgICAgU2VjdXJlU2V0ID0gMSA8PCA3LAogICAgICAgIFNlc3Npb25TZXQgPSAx
IDw8IDgsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKE5hbWVTZXQgfCBWYWx1ZVNldCB8IERvbWFp
blNldCB8IFBhdGhTZXQgfCBFeHBpcmVzU2V0IHwgU2l6ZVNldCB8IEh0dHBPbmx5U2V0IHwgU2Vj
dXJlU2V0IHwgU2Vzc2lvblNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAg
Y2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8
IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcihQYXNzUmVmUHRyPENvb2tpZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAg
ICAgICBmcmllbmQgY2xhc3MgQ29va2llOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgTmFtZVNldD4mIHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOYW1lU2V0KSwgcHJvcGVydHlfbmFt
ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5hbWUiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TmFtZVNldD4oKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZVNldD4mIHNldFZhbHVlKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
VmFsdWVTZXQpLCBwcm9wZXJ0eV92YWx1ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoInZhbHVlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPFZhbHVlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IERvbWFp
blNldD4mIHNldERvbWFpbihjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERvbWFpblNldCksIHByb3BlcnR5X2RvbWFpbl9h
bHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImRvbWFpbiIsIHZh
bHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxEb21haW5TZXQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUGF0aFNldD4mIHNldFBhdGgoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQ
YXRoU2V0KSwgcHJvcGVydHlfcGF0aF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoInBhdGgiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
UGF0aFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFeHBpcmVzU2V0
PiYgc2V0RXhwaXJlcyhpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgRXhwaXJlc1NldCksIHByb3BlcnR5X2V4cGlyZXNfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJleHBpcmVzIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEV4cGlyZXNTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgU2l6ZVNldD4mIHNldFNpemUoaW50IHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNpemVTZXQpLCBwcm9wZXJ0eV9z
aXplX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic2l6ZSIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTaXplU2V0PigpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEh0dHBPbmx5U2V0PiYgc2V0SHR0cE9ubHkoYm9v
bCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBI
dHRwT25seVNldCksIHByb3BlcnR5X2h0dHBPbmx5X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldEJvb2xlYW4oImh0dHBPbmx5IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPEh0dHBPbmx5U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFNlY3VyZVNldD4mIHNldFNlY3VyZShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNlY3VyZVNldCksIHByb3BlcnR5X3NlY3Vy
ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJzZWN1cmUi
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U2VjdXJlU2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNlc3Npb25TZXQ+JiBzZXRTZXNzaW9uKGJv
b2wgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
U2Vzc2lvblNldCksIHByb3BlcnR5X3Nlc3Npb25fYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0Qm9vbGVhbigic2Vzc2lvbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxTZXNzaW9uU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVm
UHRyPENvb2tpZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENvb2tpZT4qPigmbV9yZXN1bHQpOwogICAgICAg
IH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDb29raWU+ICgpCiAgICAgICAgewogICAg
ICAgICAgICByZXR1cm4gUmVmUHRyPENvb2tpZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07Cgog
ICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDb29raWU+
IHJlc3VsdCA9IENvb2tpZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0TmFtZSguLi4pCiAgICAg
KiAgICAgLnNldFZhbHVlKC4uLikKICAgICAqICAgICAuc2V0RG9tYWluKC4uLikKICAgICAqICAg
ICAuc2V0UGF0aCguLi4pCiAgICAgKiAgICAgLnNldEV4cGlyZXMoLi4uKQogICAgICogICAgIC5z
ZXRTaXplKC4uLikKICAgICAqICAgICAuc2V0SHR0cE9ubHkoLi4uKQogICAgICogICAgIC5zZXRT
ZWN1cmUoLi4uKQogICAgICogICAgIC5zZXRTZXNzaW9uKC4uLik7CiAgICAgKi8KICAgIHN0YXRp
YyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWls
ZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgQ29va2llKCkpKTsKICAgIH0KfTsKCi8qIFVu
aXF1ZSBzY3JpcHQgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJpbmcgU2NyaXB0SWRlbnRpZmll
cjsKCn0gLy8gUGFnZQoKbmFtZXNwYWNlIFJ1bnRpbWUgewovKiBVbmlxdWUgb2JqZWN0IGlkZW50
aWZpZXIuICovCnR5cGVkZWYgU3RyaW5nIFJlbW90ZU9iamVjdElkOwoKLyogTWlycm9yIG9iamVj
dCByZWZlcmVuY2luZyBvcmlnaW5hbCBKYXZhU2NyaXB0IG9iamVjdC4gKi8KY2xhc3MgUmVtb3Rl
T2JqZWN0IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFm
dGVyIHByb3BlcnR5IG5hbWUgJ3R5cGUnIHdoaWxlIGdlbmVyYXRpbmcgUmVtb3RlT2JqZWN0Lgog
ICAgc3RydWN0IFR5cGUgewogICAgICAgIGVudW0gRW51bSB7CiAgICAgICAgICAgIE9iamVjdCA9
IDgsCiAgICAgICAgICAgIEZ1bmN0aW9uID0gOSwKICAgICAgICAgICAgVW5kZWZpbmVkID0gMTAs
CiAgICAgICAgICAgIFN0cmluZyA9IDExLAogICAgICAgICAgICBOdW1iZXIgPSAxMiwKICAgICAg
ICAgICAgQm9vbGVhbiA9IDEzLAogICAgICAgIH07CiAgICB9OyAvLyBzdHJ1Y3QgVHlwZQoKICAg
IC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3N1YnR5cGUnIHdoaWxlIGdlbmVyYXRpbmcg
UmVtb3RlT2JqZWN0LgogICAgc3RydWN0IFN1YnR5cGUgewogICAgICAgIGVudW0gRW51bSB7CiAg
ICAgICAgICAgIEFycmF5ID0gMTQsCiAgICAgICAgICAgIE51bGwgPSAxNSwKICAgICAgICAgICAg
Tm9kZSA9IDE2LAogICAgICAgICAgICBSZWdleHAgPSAxNywKICAgICAgICAgICAgRGF0ZSA9IDE4
LAogICAgICAgIH07CiAgICB9OyAvLyBzdHJ1Y3QgU3VidHlwZQoKICAgIGVudW0gewogICAgICAg
IE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBUeXBlU2V0ID0gMSA8PCAwLAogICAgICAgIEFsbEZp
ZWxkc1NldCA9IChUeXBlU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBj
bGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwg
U1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyKFBhc3NSZWZQdHI8UmVtb3RlT2JqZWN0PiBwdHIpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVk
X2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAg
fQogICAgICAgIGZyaWVuZCBjbGFzcyBSZW1vdGVPYmplY3Q7CiAgICBwdWJsaWM6CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShUeXBlOjpFbnVtIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR5cGVTZXQpLCBwcm9w
ZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
dHlwZSIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8VHlwZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBU
eXBlU2V0PiYgc2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR5cGVTZXQpLCBwcm9wZXJ0eV90eXBlX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBlU2V0PigpOwogICAgICAgIH0KCiAgICAg
ICAgb3BlcmF0b3IgUmVmUHRyPFJlbW90ZU9iamVjdD4mICgpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVh
ZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFJlbW90ZU9i
amVjdD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0
cjxSZW1vdGVPYmplY3Q+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFJl
bW90ZU9iamVjdD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRo
ZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxSZW1vdGVPYmplY3Q+IHJlc3VsdCA9IFJl
bW90ZU9iamVjdDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VHlwZSguLi4pOwogICAgICovCiAg
ICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1
cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFJlbW90ZU9iamVjdCgpKSk7CiAg
ICB9CgogICAgdm9pZCBzZXRTdWJ0eXBlKFN1YnR5cGU6OkVudW0gdmFsdWUpCiAgICB7CiAgICAg
ICAgdGhpcy0+c2V0U3RyaW5nKCJzdWJ0eXBlIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUp
KTsKICAgIH0KCiAgICB2b2lkIHNldFN1YnR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsK
ICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInN1YnR5cGUiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9p
ZCBzZXRDbGFzc05hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXRTdHJpbmcoImNsYXNzTmFtZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFZhbHVlKFBh
c3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFZh
bHVlKCJ2YWx1ZSIsIHZhbHVlKTsKICAgIH0KICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdDo6c2V0
VmFsdWU7CgoKICAgIHZvaWQgc2V0RGVzY3JpcHRpb24oY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAg
IHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoImRlc2NyaXB0aW9uIiwgdmFsdWUpOwogICAgfQoK
ICAgIHZvaWQgc2V0T2JqZWN0SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0
aGlzLT5zZXRTdHJpbmcoIm9iamVjdElkIiwgdmFsdWUpOwogICAgfQp9OwoKLyogT2JqZWN0IHBy
b3BlcnR5IGRlc2NyaXB0b3IuICovCmNsYXNzIFByb3BlcnR5RGVzY3JpcHRvciA6IHB1YmxpYyBJ
bnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9
IDAsCiAgICAgICAgTmFtZVNldCA9IDEgPDwgMCwKICAgICAgICBXcml0YWJsZVNldCA9IDEgPDwg
MSwKICAgICAgICBDb25maWd1cmFibGVTZXQgPSAxIDw8IDIsCiAgICAgICAgRW51bWVyYWJsZVNl
dCA9IDEgPDwgMywKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTmFtZVNldCB8IFdyaXRhYmxlU2V0
IHwgQ29uZmlndXJhYmxlU2V0IHwgRW51bWVyYWJsZVNldCkKICAgIH07CgogICAgdGVtcGxhdGU8
aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4g
QnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFByb3BlcnR5RGVzY3JpcHRvcj4g
cHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVs
ZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1f
cmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgUHJvcGVydHlEZXNj
cmlwdG9yOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTmFtZVNldD4mIHNl
dE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBOYW1lU2V0KSwgcHJvcGVydHlfbmFtZV9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8TmFtZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBXcml0YWJsZVNldD4mIHNldFdyaXRhYmxlKGJvb2wgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgV3JpdGFibGVTZXQpLCBwcm9wZXJ0
eV93cml0YWJsZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFu
KCJ3cml0YWJsZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxXcml0YWJs
ZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb25maWd1cmFibGVT
ZXQ+JiBzZXRDb25maWd1cmFibGUoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb25maWd1cmFibGVTZXQpLCBwcm9wZXJ0eV9jb25maWd1
cmFibGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigiY29u
ZmlndXJhYmxlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvbmZpZ3Vy
YWJsZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFbnVtZXJhYmxl
U2V0PiYgc2V0RW51bWVyYWJsZShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIEVudW1lcmFibGVTZXQpLCBwcm9wZXJ0eV9lbnVtZXJhYmxl
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImVudW1lcmFi
bGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RW51bWVyYWJsZVNldD4o
KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxQcm9wZXJ0eURlc2NyaXB0b3I+
JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmll
bGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PFJlZlB0cjxQcm9wZXJ0eURlc2NyaXB0b3I+Kj4oJm1fcmVzdWx0KTsKICAgICAg
ICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8UHJvcGVydHlEZXNjcmlwdG9yPiAoKQog
ICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxQcm9wZXJ0eURlc2NyaXB0b3I+KCp0
aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0
b3I6CiAgICAgKiBSZWZQdHI8UHJvcGVydHlEZXNjcmlwdG9yPiByZXN1bHQgPSBQcm9wZXJ0eURl
c2NyaXB0b3I6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldE5hbWUoLi4uKQogICAgICogICAgIC5z
ZXRXcml0YWJsZSguLi4pCiAgICAgKiAgICAgLnNldENvbmZpZ3VyYWJsZSguLi4pCiAgICAgKiAg
ICAgLnNldEVudW1lcmFibGUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
KGFkb3B0UmVmKG5ldyBQcm9wZXJ0eURlc2NyaXB0b3IoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0
VmFsdWUoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+Ki8g
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNl
dE9iamVjdCgidmFsdWUiLCB2YWx1ZSk7CiAgICB9CiAgICB1c2luZyBJbnNwZWN0b3JPYmplY3Q6
OnNldFZhbHVlOwoKCiAgICB2b2lkIHNldEdldCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUp
CiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJnZXQiLCB2YWx1ZSk7CiAgICB9CgogICAg
dm9pZCBzZXRTZXQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRo
aXMtPnNldE9iamVjdCgic2V0IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0V2FzVGhyb3du
KGJvb2wgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0Qm9vbGVhbigid2FzVGhyb3duIiwg
dmFsdWUpOwogICAgfQp9OwoKLyogUmVwcmVzZW50cyBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50LiBF
aXRoZXIgcmVtb3RlIG9iamVjdCBpZCA8Y29kZT5vYmplY3RJZDwvY29kZT4gb3IgcHJpbWl0aXZl
IDxjb2RlPnZhbHVlPC9jb2RlPiBvciBuZWl0aGVyIG9mIChmb3IgdW5kZWZpbmVkKSB0aGVtIHNo
b3VsZCBiZSBzcGVjaWZpZWQuICovCmNsYXNzIENhbGxBcmd1bWVudCA6IHB1YmxpYyBJbnNwZWN0
b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAg
ICAgICAgQWxsRmllbGRzU2V0ID0gMAogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAg
ICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRF
IHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q2FsbEFyZ3VtZW50PiBwdHIpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVh
dGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAg
ICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDYWxsQXJndW1lbnQ7CiAgICBwdWJsaWM6CgogICAg
ICAgIG9wZXJhdG9yIFJlZlB0cjxDYWxsQXJndW1lbnQ+JiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3Jl
YWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDYWxsQXJn
dW1lbnQ+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQ
dHI8Q2FsbEFyZ3VtZW50PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxD
YWxsQXJndW1lbnQ+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50
aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q2FsbEFyZ3VtZW50PiByZXN1bHQgPSBD
YWxsQXJndW1lbnQ6OmNyZWF0ZSgpOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxk
c1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4o
YWRvcHRSZWYobmV3IENhbGxBcmd1bWVudCgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRWYWx1ZShQ
YXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRW
YWx1ZSgidmFsdWUiLCB2YWx1ZSk7CiAgICB9CiAgICB1c2luZyBJbnNwZWN0b3JPYmplY3Q6OnNl
dFZhbHVlOwoKCiAgICB2b2lkIHNldE9iamVjdElkKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1
ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoIm9iamVjdElkIiwgdmFsdWUpOwogICAg
fQp9OwoKfSAvLyBSdW50aW1lCgpuYW1lc3BhY2UgQ29uc29sZSB7Ci8qIENvbnNvbGUgbWVzc2Fn
ZS4gKi8KY2xhc3MgQ29uc29sZU1lc3NhZ2UgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVi
bGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnc291cmNlJyB3aGlsZSBnZW5l
cmF0aW5nIENvbnNvbGVNZXNzYWdlLgogICAgc3RydWN0IFNvdXJjZSB7CiAgICAgICAgZW51bSBF
bnVtIHsKICAgICAgICAgICAgSHRtbCA9IDE5LAogICAgICAgICAgICBXbWwgPSAyMCwKICAgICAg
ICAgICAgWG1sID0gMjEsCiAgICAgICAgICAgIEphdmFzY3JpcHQgPSAyMiwKICAgICAgICAgICAg
TmV0d29yayA9IDIzLAogICAgICAgICAgICBDb25zb2xlX2FwaSA9IDI0LAogICAgICAgICAgICBP
dGhlciA9IDI1LAogICAgICAgIH07CiAgICB9OyAvLyBzdHJ1Y3QgU291cmNlCgogICAgLy8gTmFt
ZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnbGV2ZWwnIHdoaWxlIGdlbmVyYXRpbmcgQ29uc29sZU1l
c3NhZ2UuCiAgICBzdHJ1Y3QgTGV2ZWwgewogICAgICAgIGVudW0gRW51bSB7CiAgICAgICAgICAg
IFRpcCA9IDI2LAogICAgICAgICAgICBMb2cgPSAyNywKICAgICAgICAgICAgV2FybmluZyA9IDI4
LAogICAgICAgICAgICBFcnJvciA9IDI5LAogICAgICAgICAgICBEZWJ1ZyA9IDMwLAogICAgICAg
IH07CiAgICB9OyAvLyBzdHJ1Y3QgTGV2ZWwKCiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBu
YW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIENvbnNvbGVNZXNzYWdlLgogICAgc3RydWN0IFR5
cGUgewogICAgICAgIGVudW0gRW51bSB7CiAgICAgICAgICAgIExvZyA9IDI3LAogICAgICAgICAg
ICBEaXIgPSAzMSwKICAgICAgICAgICAgRGlyeG1sID0gMzIsCiAgICAgICAgICAgIFRyYWNlID0g
MzMsCiAgICAgICAgICAgIFN0YXJ0R3JvdXAgPSAzNCwKICAgICAgICAgICAgU3RhcnRHcm91cENv
bGxhcHNlZCA9IDM1LAogICAgICAgICAgICBFbmRHcm91cCA9IDM2LAogICAgICAgICAgICBBc3Nl
cnQgPSAzNywKICAgICAgICB9OwogICAgfTsgLy8gc3RydWN0IFR5cGUKCiAgICBlbnVtIHsKICAg
ICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgU291cmNlU2V0ID0gMSA8PCAwLAogICAgICAg
IExldmVsU2V0ID0gMSA8PCAxLAogICAgICAgIFRleHRTZXQgPSAxIDw8IDIsCiAgICAgICAgQWxs
RmllbGRzU2V0ID0gKFNvdXJjZVNldCB8IExldmVsU2V0IHwgVGV4dFNldCkKICAgIH07CgogICAg
dGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxp
bnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAg
ICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+
KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENvbnNvbGVNZXNz
YWdlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBO
b0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAg
ICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDb25zb2xl
TWVzc2FnZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNvdXJjZVNldD4m
IHNldFNvdXJjZShTb3VyY2U6OkVudW0gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgU291cmNlU2V0KSwgcHJvcGVydHlfc291cmNlX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic291cmNlIiwgZ2V0RW51bUNv
bnN0YW50VmFsdWUodmFsdWUpKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTb3VyY2VT
ZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU291cmNlU2V0PiYgc2V0
U291cmNlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgU291cmNlU2V0KSwgcHJvcGVydHlfc291cmNlX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic291cmNlIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNvdXJjZVNldD4oKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBMZXZlbFNldD4mIHNldExldmVsKExldmVsOjpFbnVtIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExldmVsU2V0KSwg
cHJvcGVydHlfbGV2ZWxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJsZXZlbCIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8TGV2ZWxTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgTGV2ZWxTZXQ+JiBzZXRMZXZlbChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExldmVsU2V0KSwgcHJvcGVydHlf
bGV2ZWxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJsZXZl
bCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxMZXZlbFNldD4oKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUZXh0U2V0PiYgc2V0VGV4dChjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFRleHRTZXQpLCBwcm9wZXJ0eV90ZXh0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygidGV4dCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxUZXh0U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENvbnNv
bGVNZXNzYWdlPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q29uc29sZU1lc3NhZ2U+Kj4oJm1fcmVzdWx0KTsK
ICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q29uc29sZU1lc3NhZ2U+ICgp
CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENvbnNvbGVNZXNzYWdlPigqdGhp
cyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9y
OgogICAgICogUmVmUHRyPENvbnNvbGVNZXNzYWdlPiByZXN1bHQgPSBDb25zb2xlTWVzc2FnZTo6
Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U291cmNlKC4uLikKICAgICAqICAgICAuc2V0TGV2ZWwo
Li4uKQogICAgICogICAgIC5zZXRUZXh0KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVy
PE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmll
bGRzU2V0PihhZG9wdFJlZihuZXcgQ29uc29sZU1lc3NhZ2UoKSkpOwogICAgfQoKICAgIHZvaWQg
c2V0VHlwZShUeXBlOjpFbnVtIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygi
dHlwZSIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICB9CgogICAgdm9pZCBzZXRU
eXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJ0
eXBlIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICB9CgogICAg
dm9pZCBzZXRMaW5lKGludCB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXROdW1iZXIoImxp
bmUiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRSZXBlYXRDb3VudChpbnQgdmFsdWUpCiAg
ICB7CiAgICAgICAgdGhpcy0+c2V0TnVtYmVyKCJyZXBlYXRDb3VudCIsIHZhbHVlKTsKICAgIH0K
CiAgICB2b2lkIHNldFBhcmFtZXRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUp
CiAgICB7CiAgICAgICAgdGhpcy0+c2V0QXJyYXkoInBhcmFtZXRlcnMiLCB2YWx1ZSk7CiAgICB9
CgogICAgdm9pZCBzZXRTdGFja1RyYWNlKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVl
KQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJzdGFja1RyYWNlIiwgdmFsdWUpOwogICAg
fQoKICAgIHZvaWQgc2V0TmV0d29ya1JlcXVlc3RJZChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ewogICAgICAgIHRoaXMtPnNldFN0cmluZygibmV0d29ya1JlcXVlc3RJZCIsIHZhbHVlKTsKICAg
IH0KfTsKCi8qIFN0YWNrIGVudHJ5IGZvciBjb25zb2xlIGVycm9ycyBhbmQgYXNzZXJ0aW9ucy4g
Ki8KY2xhc3MgQ2FsbEZyYW1lIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAg
IGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBGdW5jdGlvbk5hbWVTZXQg
PSAxIDw8IDAsCiAgICAgICAgVXJsU2V0ID0gMSA8PCAxLAogICAgICAgIExpbmVOdW1iZXJTZXQg
PSAxIDw8IDIsCiAgICAgICAgQ29sdW1uTnVtYmVyU2V0ID0gMSA8PCAzLAogICAgICAgIEFsbEZp
ZWxkc1NldCA9IChGdW5jdGlvbk5hbWVTZXQgfCBVcmxTZXQgfCBMaW5lTnVtYmVyU2V0IHwgQ29s
dW1uTnVtYmVyU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBC
dWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9y
ZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4m
IGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyKFBhc3NSZWZQdHI8Q2FsbEZyYW1lPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9p
bml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAg
IGZyaWVuZCBjbGFzcyBDYWxsRnJhbWU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBGdW5jdGlvbk5hbWVTZXQ+JiBzZXRGdW5jdGlvbk5hbWUoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBGdW5jdGlv
bk5hbWVTZXQpLCBwcm9wZXJ0eV9mdW5jdGlvbk5hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJmdW5jdGlvbk5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8RnVuY3Rpb25OYW1lU2V0PigpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFVybFNldD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVybFNldCksIHByb3Bl
cnR5X3VybF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVy
bCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVcmxTZXQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTGluZU51bWJlclNldD4mIHNldExpbmVOdW1i
ZXIoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIExpbmVOdW1iZXJTZXQpLCBwcm9wZXJ0eV9saW5lTnVtYmVyX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigibGluZU51bWJlciIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxMaW5lTnVtYmVyU2V0PigpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk51bWJlclNldD4mIHNldENvbHVtbk51bWJlcihpbnQg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29s
dW1uTnVtYmVyU2V0KSwgcHJvcGVydHlfY29sdW1uTnVtYmVyX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiY29sdW1uTnVtYmVyIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPENvbHVtbk51bWJlclNldD4oKTsKICAgICAgICB9CgogICAg
ICAgIG9wZXJhdG9yIFJlZlB0cjxDYWxsRnJhbWU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5
KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDYWxsRnJhbWU+
Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q2Fs
bEZyYW1lPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxDYWxsRnJhbWU+
KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3Ry
dWN0b3I6CiAgICAgKiBSZWZQdHI8Q2FsbEZyYW1lPiByZXN1bHQgPSBDYWxsRnJhbWU6OmNyZWF0
ZSgpCiAgICAgKiAgICAgLnNldEZ1bmN0aW9uTmFtZSguLi4pCiAgICAgKiAgICAgLnNldFVybCgu
Li4pCiAgICAgKiAgICAgLnNldExpbmVOdW1iZXIoLi4uKQogICAgICogICAgIC5zZXRDb2x1bW5O
dW1iZXIoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0
ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5l
dyBDYWxsRnJhbWUoKSkpOwogICAgfQp9OwoKfSAvLyBDb25zb2xlCgpuYW1lc3BhY2UgTmV0d29y
ayB7Ci8qIFVuaXF1ZSBsb2FkZXIgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJpbmcgTG9hZGVy
SWQ7CgovKiBVbmlxdWUgZnJhbWUgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJpbmcgRnJhbWVJ
ZDsKCi8qIFVuaXF1ZSByZXF1ZXN0IGlkZW50aWZpZXIuICovCnR5cGVkZWYgU3RyaW5nIFJlcXVl
c3RJZDsKCi8qIFRpbWluZyBpbmZvcm1hdGlvbiBmb3IgdGhlIHJlcXVlc3QuICovCmNsYXNzIFJl
c291cmNlVGltaW5nIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0g
ewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBSZXF1ZXN0VGltZVNldCA9IDEgPDwg
MCwKICAgICAgICBQcm94eVN0YXJ0U2V0ID0gMSA8PCAxLAogICAgICAgIFByb3h5RW5kU2V0ID0g
MSA8PCAyLAogICAgICAgIERuc1N0YXJ0U2V0ID0gMSA8PCAzLAogICAgICAgIERuc0VuZFNldCA9
IDEgPDwgNCwKICAgICAgICBDb25uZWN0U3RhcnRTZXQgPSAxIDw8IDUsCiAgICAgICAgQ29ubmVj
dEVuZFNldCA9IDEgPDwgNiwKICAgICAgICBTc2xTdGFydFNldCA9IDEgPDwgNywKICAgICAgICBT
c2xFbmRTZXQgPSAxIDw8IDgsCiAgICAgICAgU2VuZFN0YXJ0U2V0ID0gMSA8PCA5LAogICAgICAg
IFNlbmRFbmRTZXQgPSAxIDw8IDEwLAogICAgICAgIFJlY2VpdmVIZWFkZXJzRW5kU2V0ID0gMSA8
PCAxMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoUmVxdWVzdFRpbWVTZXQgfCBQcm94eVN0YXJ0
U2V0IHwgUHJveHlFbmRTZXQgfCBEbnNTdGFydFNldCB8IERuc0VuZFNldCB8IENvbm5lY3RTdGFy
dFNldCB8IENvbm5lY3RFbmRTZXQgfCBTc2xTdGFydFNldCB8IFNzbEVuZFNldCB8IFNlbmRTdGFy
dFNldCB8IFNlbmRFbmRTZXQgfCBSZWNlaXZlSGVhZGVyc0VuZFNldCkKICAgIH07CgogICAgdGVt
cGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQg
U1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRo
aXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFJlc291cmNlVGltaW5n
PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0Zp
ZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAg
bV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBSZXNvdXJjZVRp
bWluZzsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFJlcXVlc3RUaW1lU2V0
PiYgc2V0UmVxdWVzdFRpbWUoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFJlcXVlc3RUaW1lU2V0KSwgcHJvcGVydHlfcmVxdWVzdFRp
bWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJyZXF1ZXN0
VGltZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxSZXF1ZXN0VGltZVNl
dD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQcm94eVN0YXJ0U2V0PiYg
c2V0UHJveHlTdGFydChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgUHJveHlTdGFydFNldCksIHByb3BlcnR5X3Byb3h5U3RhcnRfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJwcm94eVN0YXJ0Iiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFByb3h5U3RhcnRTZXQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUHJveHlFbmRTZXQ+JiBzZXRQcm94eUVu
ZChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgUHJveHlFbmRTZXQpLCBwcm9wZXJ0eV9wcm94eUVuZF9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInByb3h5RW5kIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFByb3h5RW5kU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IERuc1N0YXJ0U2V0PiYgc2V0RG5zU3RhcnQoZG91YmxlIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERuc1N0YXJ0U2V0KSwg
cHJvcGVydHlfZG5zU3RhcnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
TnVtYmVyKCJkbnNTdGFydCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxE
bnNTdGFydFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEbnNFbmRT
ZXQ+JiBzZXREbnNFbmQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIERuc0VuZFNldCksIHByb3BlcnR5X2Ruc0VuZF9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImRuc0VuZCIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxEbnNFbmRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQ29ubmVjdFN0YXJ0U2V0PiYgc2V0Q29ubmVjdFN0YXJ0KGRvdWJs
ZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBD
b25uZWN0U3RhcnRTZXQpLCBwcm9wZXJ0eV9jb25uZWN0U3RhcnRfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJjb25uZWN0U3RhcnQiLCB2YWx1ZSk7CiAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29ubmVjdFN0YXJ0U2V0PigpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IENvbm5lY3RFbmRTZXQ+JiBzZXRDb25uZWN0RW5kKGRvdWJs
ZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBD
b25uZWN0RW5kU2V0KSwgcHJvcGVydHlfY29ubmVjdEVuZF9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImNvbm5lY3RFbmQiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8Q29ubmVjdEVuZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBTc2xTdGFydFNldD4mIHNldFNzbFN0YXJ0KGRvdWJsZSB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTc2xTdGFydFNldCks
IHByb3BlcnR5X3NzbFN0YXJ0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dE51bWJlcigic3NsU3RhcnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
U3NsU3RhcnRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3NsRW5k
U2V0PiYgc2V0U3NsRW5kKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBTc2xFbmRTZXQpLCBwcm9wZXJ0eV9zc2xFbmRfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzc2xFbmQiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3NsRW5kU2V0PigpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFNlbmRTdGFydFNldD4mIHNldFNlbmRTdGFydChkb3VibGUgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU2VuZFN0
YXJ0U2V0KSwgcHJvcGVydHlfc2VuZFN0YXJ0X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldE51bWJlcigic2VuZFN0YXJ0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFNlbmRTdGFydFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBTZW5kRW5kU2V0PiYgc2V0U2VuZEVuZChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU2VuZEVuZFNldCksIHByb3BlcnR5X3Nl
bmRFbmRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzZW5k
RW5kIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNlbmRFbmRTZXQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUmVjZWl2ZUhlYWRlcnNFbmRTZXQ+
JiBzZXRSZWNlaXZlSGVhZGVyc0VuZChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUmVjZWl2ZUhlYWRlcnNFbmRTZXQpLCBwcm9wZXJ0
eV9yZWNlaXZlSGVhZGVyc0VuZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXROdW1iZXIoInJlY2VpdmVIZWFkZXJzRW5kIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFJlY2VpdmVIZWFkZXJzRW5kU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUmVmUHRyPFJlc291cmNlVGltaW5nPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UmVzb3VyY2VUaW1p
bmc+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8
UmVzb3VyY2VUaW1pbmc+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFJl
c291cmNlVGltaW5nPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3lu
dGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFJlc291cmNlVGltaW5nPiByZXN1bHQg
PSBSZXNvdXJjZVRpbWluZzo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0UmVxdWVzdFRpbWUoLi4u
KQogICAgICogICAgIC5zZXRQcm94eVN0YXJ0KC4uLikKICAgICAqICAgICAuc2V0UHJveHlFbmQo
Li4uKQogICAgICogICAgIC5zZXREbnNTdGFydCguLi4pCiAgICAgKiAgICAgLnNldERuc0VuZCgu
Li4pCiAgICAgKiAgICAgLnNldENvbm5lY3RTdGFydCguLi4pCiAgICAgKiAgICAgLnNldENvbm5l
Y3RFbmQoLi4uKQogICAgICogICAgIC5zZXRTc2xTdGFydCguLi4pCiAgICAgKiAgICAgLnNldFNz
bEVuZCguLi4pCiAgICAgKiAgICAgLnNldFNlbmRTdGFydCguLi4pCiAgICAgKiAgICAgLnNldFNl
bmRFbmQoLi4uKQogICAgICogICAgIC5zZXRSZWNlaXZlSGVhZGVyc0VuZCguLi4pOwogICAgICov
CiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICBy
ZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFJlc291cmNlVGltaW5nKCkp
KTsKICAgIH0KfTsKCi8qIEhUVFAgcmVxdWVzdCBkYXRhLiAqLwpjbGFzcyBSZXF1ZXN0IDogcHVi
bGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRz
U2V0ID0gMCwKICAgICAgICBVcmxTZXQgPSAxIDw8IDAsCiAgICAgICAgTWV0aG9kU2V0ID0gMSA8
PCAxLAogICAgICAgIEhlYWRlcnNTZXQgPSAxIDw8IDIsCiAgICAgICAgQWxsRmllbGRzU2V0ID0g
KFVybFNldCB8IE1ldGhvZFNldCB8IEhlYWRlcnNTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGlu
dCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxSZXF1ZXN0PiBwdHIpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRl
cl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7
CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBSZXF1ZXN0OwogICAgcHVibGljOgoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgVXJsU2V0PiYgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVXJsU2V0KSwg
cHJvcGVydHlfdXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
ZygidXJsIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVybFNldD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXRob2RTZXQ+JiBzZXRNZXRob2Qo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBNZXRob2RTZXQpLCBwcm9wZXJ0eV9tZXRob2RfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXRob2QiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8TWV0aG9kU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IEhlYWRlcnNTZXQ+JiBzZXRIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBIZWFkZXJzU2V0KSwgcHJvcGVydHlfaGVhZGVyc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRPYmplY3QoImhlYWRlcnMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8SGVhZGVyc1NldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJl
ZlB0cjxSZXF1ZXN0PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UmVxdWVzdD4qPigmbV9yZXN1bHQpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxSZXF1ZXN0PiAoKQogICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxSZXF1ZXN0PigqdGhpcyk7CiAgICAgICAgfQogICAg
fTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFJl
cXVlc3Q+IHJlc3VsdCA9IFJlcXVlc3Q6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFVybCguLi4p
CiAgICAgKiAgICAgLnNldE1ldGhvZCguLi4pCiAgICAgKiAgICAgLnNldEhlYWRlcnMoLi4uKTsK
ICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAg
ICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBSZXF1ZXN0KCkp
KTsKICAgIH0KCiAgICB2b2lkIHNldFBvc3REYXRhKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJwb3N0RGF0YSIsIHZhbHVlKTsKICAgIH0KfTsKCi8q
IEhUVFAgcmVzcG9uc2UgZGF0YS4gKi8KY2xhc3MgUmVzcG9uc2UgOiBwdWJsaWMgSW5zcGVjdG9y
T2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAg
ICAgIFVybFNldCA9IDEgPDwgMCwKICAgICAgICBTdGF0dXNTZXQgPSAxIDw8IDEsCiAgICAgICAg
U3RhdHVzVGV4dFNldCA9IDEgPDwgMiwKICAgICAgICBIZWFkZXJzU2V0ID0gMSA8PCAzLAogICAg
ICAgIE1pbWVUeXBlU2V0ID0gMSA8PCA0LAogICAgICAgIENvbm5lY3Rpb25SZXVzZWRTZXQgPSAx
IDw8IDUsCiAgICAgICAgQ29ubmVjdGlvbklkU2V0ID0gMSA8PCA2LAogICAgICAgIEFsbEZpZWxk
c1NldCA9IChVcmxTZXQgfCBTdGF0dXNTZXQgfCBTdGF0dXNUZXh0U2V0IHwgSGVhZGVyc1NldCB8
IE1pbWVUeXBlU2V0IHwgQ29ubmVjdGlvblJldXNlZFNldCB8IENvbm5lY3Rpb25JZFNldCkKICAg
IH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2
YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0
ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAg
ICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFJl
c3BvbnNlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAg
ICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBSZXNw
b25zZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVybFNldD4mIHNldFVy
bChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIFVybFNldCksIHByb3BlcnR5X3VybF9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxVcmxTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
U3RhdHVzU2V0PiYgc2V0U3RhdHVzKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdGF0dXNTZXQpLCBwcm9wZXJ0eV9zdGF0dXNfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzdGF0dXMiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3RhdHVzU2V0PigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0YXR1c1RleHRTZXQ+JiBzZXRTdGF0dXNUZXh0KGNv
bnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgU3RhdHVzVGV4dFNldCksIHByb3BlcnR5X3N0YXR1c1RleHRfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzdGF0dXNUZXh0IiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0YXR1c1RleHRTZXQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSGVhZGVyc1NldD4mIHNldEhlYWRlcnMoUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIEhlYWRlcnNTZXQpLCBwcm9wZXJ0eV9oZWFkZXJzX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiaGVhZGVycyIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxIZWFkZXJzU2V0PigpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IE1pbWVUeXBlU2V0PiYgc2V0TWltZVR5cGUoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBN
aW1lVHlwZVNldCksIHByb3BlcnR5X21pbWVUeXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygibWltZVR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8TWltZVR5cGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgQ29ubmVjdGlvblJldXNlZFNldD4mIHNldENvbm5lY3Rpb25SZXVzZWQoYm9vbCB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb25uZWN0
aW9uUmV1c2VkU2V0KSwgcHJvcGVydHlfY29ubmVjdGlvblJldXNlZF9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJjb25uZWN0aW9uUmV1c2VkIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvbm5lY3Rpb25SZXVzZWRTZXQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29ubmVjdGlvbklkU2V0PiYgc2V0Q29u
bmVjdGlvbklkKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBDb25uZWN0aW9uSWRTZXQpLCBwcm9wZXJ0eV9jb25uZWN0aW9uSWRfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJjb25uZWN0aW9uSWQi
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29ubmVjdGlvbklkU2V0Pigp
OwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFJlc3BvbnNlPiYgKCkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVz
dWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxS
ZWZQdHI8UmVzcG9uc2U+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9y
IFBhc3NSZWZQdHI8UmVzcG9uc2U+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVm
UHRyPFJlc3BvbnNlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3lu
dGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFJlc3BvbnNlPiByZXN1bHQgPSBSZXNw
b25zZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VXJsKC4uLikKICAgICAqICAgICAuc2V0U3Rh
dHVzKC4uLikKICAgICAqICAgICAuc2V0U3RhdHVzVGV4dCguLi4pCiAgICAgKiAgICAgLnNldEhl
YWRlcnMoLi4uKQogICAgICogICAgIC5zZXRNaW1lVHlwZSguLi4pCiAgICAgKiAgICAgLnNldENv
bm5lY3Rpb25SZXVzZWQoLi4uKQogICAgICogICAgIC5zZXRDb25uZWN0aW9uSWQoLi4uKTsKICAg
ICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAg
ICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBSZXNwb25zZSgpKSk7
CiAgICB9CgogICAgdm9pZCBzZXRIZWFkZXJzVGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ewogICAgICAgIHRoaXMtPnNldFN0cmluZygiaGVhZGVyc1RleHQiLCB2YWx1ZSk7CiAgICB9Cgog
ICAgdm9pZCBzZXRSZXF1ZXN0SGVhZGVycyhQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJyZXF1ZXN0SGVhZGVycyIsIHZhbHVl
KTsKICAgIH0KCiAgICB2b2lkIHNldFJlcXVlc3RIZWFkZXJzVGV4dChjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygicmVxdWVzdEhlYWRlcnNUZXh0Iiwg
dmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0RnJvbURpc2tDYWNoZShib29sIHZhbHVlKQogICAg
ewogICAgICAgIHRoaXMtPnNldEJvb2xlYW4oImZyb21EaXNrQ2FjaGUiLCB2YWx1ZSk7CiAgICB9
CgogICAgdm9pZCBzZXRUaW1pbmcoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpS
ZXNvdXJjZVRpbWluZz4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJ0aW1pbmciLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBX
ZWJTb2NrZXQgcmVxdWVzdCBkYXRhLiAqLwpjbGFzcyBXZWJTb2NrZXRSZXF1ZXN0IDogcHVibGlj
IEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0
ID0gMCwKICAgICAgICBSZXF1ZXN0S2V5M1NldCA9IDEgPDwgMCwKICAgICAgICBIZWFkZXJzU2V0
ID0gMSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChSZXF1ZXN0S2V5M1NldCB8IEhlYWRl
cnNTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIg
ewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsK
CiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0
YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWls
ZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFz
c1JlZlB0cjxXZWJTb2NrZXRSZXF1ZXN0PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9p
bml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAg
IGZyaWVuZCBjbGFzcyBXZWJTb2NrZXRSZXF1ZXN0OwogICAgcHVibGljOgoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgUmVxdWVzdEtleTNTZXQ+JiBzZXRSZXF1ZXN0S2V5Myhjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFJl
cXVlc3RLZXkzU2V0KSwgcHJvcGVydHlfcmVxdWVzdEtleTNfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJyZXF1ZXN0S2V5MyIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxSZXF1ZXN0S2V5M1NldD4oKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBIZWFkZXJzU2V0PiYgc2V0SGVhZGVycyhQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgSGVhZGVyc1NldCksIHByb3BlcnR5X2hlYWRlcnNfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJoZWFkZXJzIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPEhlYWRlcnNTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVy
YXRvciBSZWZQdHI8V2ViU29ja2V0UmVxdWVzdD4mICgpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFdlYlNvY2tldFJl
cXVlc3Q+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQ
dHI8V2ViU29ja2V0UmVxdWVzdD4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQ
dHI8V2ViU29ja2V0UmVxdWVzdD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAg
ICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxXZWJTb2NrZXRSZXF1ZXN0
PiByZXN1bHQgPSBXZWJTb2NrZXRSZXF1ZXN0OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRSZXF1
ZXN0S2V5MyguLi4pCiAgICAgKiAgICAgLnNldEhlYWRlcnMoLi4uKTsKICAgICAqLwogICAgc3Rh
dGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBXZWJTb2NrZXRSZXF1ZXN0KCkpKTsKICAg
IH0KfTsKCi8qIFdlYlNvY2tldCByZXNwb25zZSBkYXRhLiAqLwpjbGFzcyBXZWJTb2NrZXRSZXNw
b25zZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAg
ICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgU3RhdHVzU2V0ID0gMSA8PCAwLAogICAgICAgIFN0
YXR1c1RleHRTZXQgPSAxIDw8IDEsCiAgICAgICAgSGVhZGVyc1NldCA9IDEgPDwgMiwKICAgICAg
ICBDaGFsbGVuZ2VSZXNwb25zZVNldCA9IDEgPDwgMywKICAgICAgICBBbGxGaWVsZHNTZXQgPSAo
U3RhdHVzU2V0IHwgU3RhdHVzVGV4dFNldCB8IEhlYWRlcnNTZXQgfCBDaGFsbGVuZ2VSZXNwb25z
ZVNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7
CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoK
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3Rh
dGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNz
UmVmUHRyPFdlYlNvY2tldFJlc3BvbnNlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9p
bml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAg
IGZyaWVuZCBjbGFzcyBXZWJTb2NrZXRSZXNwb25zZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFN0YXR1c1NldD4mIHNldFN0YXR1cyhkb3VibGUgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3RhdHVzU2V0KSwgcHJvcGVy
dHlfc3RhdHVzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigi
c3RhdHVzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0YXR1c1NldD4o
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdGF0dXNUZXh0U2V0PiYgc2V0
U3RhdHVzVGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFN0YXR1c1RleHRTZXQpLCBwcm9wZXJ0eV9zdGF0dXNUZXh0
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic3RhdHVzVGV4
dCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdGF0dXNUZXh0U2V0Pigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEhlYWRlcnNTZXQ+JiBzZXRIZWFk
ZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBIZWFkZXJzU2V0KSwgcHJvcGVydHlfaGVhZGVy
c19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImhlYWRlcnMi
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SGVhZGVyc1NldD4oKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDaGFsbGVuZ2VSZXNwb25zZVNldD4mIHNl
dENoYWxsZW5nZVJlc3BvbnNlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ2hhbGxlbmdlUmVzcG9uc2VTZXQpLCBwcm9w
ZXJ0eV9jaGFsbGVuZ2VSZXNwb25zZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoImNoYWxsZW5nZVJlc3BvbnNlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPENoYWxsZW5nZVJlc3BvbnNlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUmVmUHRyPFdlYlNvY2tldFJlc3BvbnNlPiYgKCkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9y
ZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8V2ViU29j
a2V0UmVzcG9uc2U+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBh
c3NSZWZQdHI8V2ViU29ja2V0UmVzcG9uc2U+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1
cm4gUmVmUHRyPFdlYlNvY2tldFJlc3BvbnNlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAg
ICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFdlYlNvY2tl
dFJlc3BvbnNlPiByZXN1bHQgPSBXZWJTb2NrZXRSZXNwb25zZTo6Y3JlYXRlKCkKICAgICAqICAg
ICAuc2V0U3RhdHVzKC4uLikKICAgICAqICAgICAuc2V0U3RhdHVzVGV4dCguLi4pCiAgICAgKiAg
ICAgLnNldEhlYWRlcnMoLi4uKQogICAgICogICAgIC5zZXRDaGFsbGVuZ2VSZXNwb25zZSguLi4p
OwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsK
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFdlYlNvY2tl
dFJlc3BvbnNlKCkpKTsKICAgIH0KfTsKCi8qIEluZm9ybWF0aW9uIGFib3V0IHRoZSBjYWNoZWQg
cmVzb3VyY2UuICovCmNsYXNzIENhY2hlZFJlc291cmNlIDogcHVibGljIEluc3BlY3Rvck9iamVj
dCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBV
cmxTZXQgPSAxIDw8IDAsCiAgICAgICAgVHlwZVNldCA9IDEgPDwgMSwKICAgICAgICBSZXNwb25z
ZVNldCA9IDEgPDwgMiwKICAgICAgICBCb2R5U2l6ZVNldCA9IDEgPDwgMywKICAgICAgICBBbGxG
aWVsZHNTZXQgPSAoVXJsU2V0IHwgVHlwZVNldCB8IFJlc3BvbnNlU2V0IHwgQm9keVNpemVTZXQp
CiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAg
cHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAg
ICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkK
ICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0
cjxDYWNoZWRSZXNvdXJjZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0
ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQg
Y2xhc3MgQ2FjaGVkUmVzb3VyY2U7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBVcmxTZXQ+JiBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVcmxTZXQpLCBwcm9wZXJ0eV91cmxfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VXJsU2V0PigpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFR5cGVTZXQ+JiBzZXRUeXBlKFR5cGVCdWlsZGVyOjpQYWdlOjpSZXNv
dXJjZVR5cGU6OkVudW0gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFs
dWUpKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBlU2V0PigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR5cGVTZXQ+JiBzZXRUeXBlKGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHlw
ZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5
cGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUmVzcG9uc2VTZXQ+
JiBzZXRSZXNwb25zZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlc3BvbnNl
PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBSZXNwb25zZVNldCksIHByb3BlcnR5X3Jlc3Bv
bnNlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgicmVzcG9u
c2UiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UmVzcG9uc2VTZXQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQm9keVNpemVTZXQ+JiBzZXRCb2R5
U2l6ZShkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgQm9keVNpemVTZXQpLCBwcm9wZXJ0eV9ib2R5U2l6ZV9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImJvZHlTaXplIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPEJvZHlTaXplU2V0PigpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUmVmUHRyPENhY2hlZFJlc291cmNlPiYgKCkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFk
eSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q2FjaGVkUmVz
b3VyY2U+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQ
dHI8Q2FjaGVkUmVzb3VyY2U+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRy
PENhY2hlZFJlc291cmNlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICog
U3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENhY2hlZFJlc291cmNlPiByZXN1
bHQgPSBDYWNoZWRSZXNvdXJjZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VXJsKC4uLikKICAg
ICAqICAgICAuc2V0VHlwZSguLi4pCiAgICAgKiAgICAgLnNldFJlc3BvbnNlKC4uLikKICAgICAq
ICAgICAuc2V0Qm9keVNpemUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
KGFkb3B0UmVmKG5ldyBDYWNoZWRSZXNvdXJjZSgpKSk7CiAgICB9Cn07CgovKiBJbmZvcm1hdGlv
biBhYm91dCB0aGUgcmVxdWVzdCBpbml0aWF0b3IuICovCmNsYXNzIEluaXRpYXRvciA6IHB1Ymxp
YyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBu
YW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIEluaXRpYXRvci4KICAgIHN0cnVjdCBUeXBlIHsK
ICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBQYXJzZXIgPSAzOCwKICAgICAgICAgICAg
U2NyaXB0ID0gMzksCiAgICAgICAgICAgIE90aGVyID0gMjUsCiAgICAgICAgfTsKICAgIH07IC8v
IHN0cnVjdCBUeXBlCgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAg
IFR5cGVTZXQgPSAxIDw8IDAsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFR5cGVTZXQpCiAgICB9
OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0
ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAg
ICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwg
U1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxJbml0
aWF0b3I+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAg
ICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEluaXRp
YXRvcjsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR5cGVTZXQ+JiBzZXRU
eXBlKFR5cGU6OkVudW0gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFs
dWUpKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBlU2V0PigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR5cGVTZXQ+JiBzZXRUeXBlKGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHlw
ZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5
cGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8SW5pdGlhdG9yPiYg
KCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxk
c1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxSZWZQdHI8SW5pdGlhdG9yPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBQYXNzUmVmUHRyPEluaXRpYXRvcj4gKCkKICAgICAgICB7CiAgICAgICAgICAg
IHJldHVybiBSZWZQdHI8SW5pdGlhdG9yPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAv
KgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEluaXRpYXRvcj4g
cmVzdWx0ID0gSW5pdGlhdG9yOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRUeXBlKC4uLik7CiAg
ICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAg
ICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgSW5pdGlhdG9yKCkp
KTsKICAgIH0KCiAgICB2b2lkIHNldFN0YWNrVHJhY2UoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0QXJyYXkoInN0YWNrVHJhY2UiLCB2YWx1
ZSk7CiAgICB9CgogICAgdm9pZCBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAg
ICAgICB0aGlzLT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldExp
bmVOdW1iZXIoZG91YmxlIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE51bWJlcigibGlu
ZU51bWJlciIsIHZhbHVlKTsKICAgIH0KfTsKCn0gLy8gTmV0d29yawoKI2lmIEVOQUJMRShTUUxf
REFUQUJBU0UpCm5hbWVzcGFjZSBEYXRhYmFzZSB7Ci8qIERhdGFiYXNlIG9iamVjdC4gKi8KY2xh
c3MgRGF0YWJhc2UgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7
CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIElkU2V0ID0gMSA8PCAwLAogICAgICAg
IERvbWFpblNldCA9IDEgPDwgMSwKICAgICAgICBOYW1lU2V0ID0gMSA8PCAyLAogICAgICAgIFZl
cnNpb25TZXQgPSAxIDw8IDMsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKElkU2V0IHwgRG9tYWlu
U2V0IHwgTmFtZVNldCB8IFZlcnNpb25TZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFU
RT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxEYXRhYmFzZT4gcHRyKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3Jl
YXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAg
ICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgRGF0YWJhc2U7CiAgICBwdWJsaWM6CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBJZFNldD4mIHNldElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSWRTZXQpLCBwcm9wZXJ0
eV9pZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImlkIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElkU2V0PigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IERvbWFpblNldD4mIHNldERvbWFpbihjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IERvbWFpblNldCksIHByb3BlcnR5X2RvbWFpbl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoImRvbWFpbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxEb21haW5TZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
TmFtZVNldD4mIHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOYW1lU2V0KSwgcHJvcGVydHlfbmFtZV9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TmFtZVNldD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBWZXJzaW9uU2V0PiYgc2V0VmVyc2lvbihjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZl
cnNpb25TZXQpLCBwcm9wZXJ0eV92ZXJzaW9uX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygidmVyc2lvbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxWZXJzaW9uU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRy
PERhdGFiYXNlPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RGF0YWJhc2U+Kj4oJm1fcmVzdWx0KTsKICAgICAg
ICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8RGF0YWJhc2U+ICgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gUmVmUHRyPERhdGFiYXNlPigqdGhpcyk7CiAgICAgICAgfQogICAg
fTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPERh
dGFiYXNlPiByZXN1bHQgPSBEYXRhYmFzZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0SWQoLi4u
KQogICAgICogICAgIC5zZXREb21haW4oLi4uKQogICAgICogICAgIC5zZXROYW1lKC4uLikKICAg
ICAqICAgICAuc2V0VmVyc2lvbiguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0Zp
ZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4oYWRvcHRSZWYobmV3IERhdGFiYXNlKCkpKTsKICAgIH0KfTsKCn0gLy8gRGF0YWJhc2UKCiNl
bmRpZiAvLyBFTkFCTEUoU1FMX0RBVEFCQVNFKQpuYW1lc3BhY2UgRE9NU3RvcmFnZSB7Ci8qIERP
TSBTdG9yYWdlIGVudHJ5LiAqLwpjbGFzcyBFbnRyeSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qg
ewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgSG9z
dFNldCA9IDEgPDwgMCwKICAgICAgICBJc0xvY2FsU3RvcmFnZVNldCA9IDEgPDwgMSwKICAgICAg
ICBJZFNldCA9IDEgPDwgMiwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoSG9zdFNldCB8IElzTG9j
YWxTdG9yYWdlU2V0IHwgSWRTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAg
IGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxFbnRyeT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAg
ICAgICBmcmllbmQgY2xhc3MgRW50cnk7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBIb3N0U2V0PiYgc2V0SG9zdChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhvc3RTZXQpLCBwcm9wZXJ0eV9ob3N0
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiaG9zdCIsIHZh
bHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxIb3N0U2V0PigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IElzTG9jYWxTdG9yYWdlU2V0PiYgc2V0SXNMb2NhbFN0
b3JhZ2UoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBJc0xvY2FsU3RvcmFnZVNldCksIHByb3BlcnR5X2lzTG9jYWxTdG9yYWdlX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImlzTG9jYWxTdG9yYWdl
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElzTG9jYWxTdG9yYWdlU2V0
PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IElkU2V0PiYgc2V0SWQoZG91
YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IElkU2V0KSwgcHJvcGVydHlfaWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0TnVtYmVyKCJpZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJZFNl
dD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxFbnRyeT4mICgpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJl
c3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
UmVmUHRyPEVudHJ5Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQ
YXNzUmVmUHRyPEVudHJ5PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxF
bnRyeT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBj
b25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxFbnRyeT4gcmVzdWx0ID0gRW50cnk6OmNyZWF0ZSgp
CiAgICAgKiAgICAgLnNldEhvc3QoLi4uKQogICAgICogICAgIC5zZXRJc0xvY2FsU3RvcmFnZSgu
Li4pCiAgICAgKiAgICAgLnNldElkKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5v
RmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRz
U2V0PihhZG9wdFJlZihuZXcgRW50cnkoKSkpOwogICAgfQp9OwoKfSAvLyBET01TdG9yYWdlCgpu
YW1lc3BhY2UgQXBwbGljYXRpb25DYWNoZSB7Ci8qIERldGFpbGVkIGFwcGxpY2F0aW9uIGNhY2hl
IHJlc291cmNlIGluZm9ybWF0aW9uLiAqLwpjbGFzcyBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2Ug
OiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9G
aWVsZHNTZXQgPSAwLAogICAgICAgIFVybFNldCA9IDEgPDwgMCwKICAgICAgICBTaXplU2V0ID0g
MSA8PCAxLAogICAgICAgIFR5cGVTZXQgPSAxIDw8IDIsCiAgICAgICAgQWxsRmllbGRzU2V0ID0g
KFVybFNldCB8IFNpemVTZXQgfCBUeXBlU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RB
VEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiBw
dHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxk
c1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9y
ZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBBcHBsaWNhdGlvbkNh
Y2hlUmVzb3VyY2U7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBVcmxTZXQ+
JiBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBVcmxTZXQpLCBwcm9wZXJ0eV91cmxfYWxyZWFkeV9zZXQpOwog
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8VXJsU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFNpemVTZXQ+JiBzZXRTaXplKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTaXplU2V0KSwgcHJvcGVydHlfc2l6ZV9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNpemUiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U2l6ZVNldD4oKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR5cGVTZXQpLCBw
cm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
ZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBlU2V0Pigp
OwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBB
bGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4qPigmbV9yZXN1
bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxBcHBsaWNhdGlvbkNh
Y2hlUmVzb3VyY2U+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPEFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAg
ICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hl
UmVzb3VyY2U+IHJlc3VsdCA9IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRlKCkKICAg
ICAqICAgICAuc2V0VXJsKC4uLikKICAgICAqICAgICAuc2V0U2l6ZSguLi4pCiAgICAgKiAgICAg
LnNldFR5cGUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNy
ZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVm
KG5ldyBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UoKSkpOwogICAgfQp9OwoKLyogRGV0YWlsZWQg
YXBwbGljYXRpb24gY2FjaGUgaW5mb3JtYXRpb24uICovCmNsYXNzIEFwcGxpY2F0aW9uQ2FjaGUg
OiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9G
aWVsZHNTZXQgPSAwLAogICAgICAgIE1hbmlmZXN0VVJMU2V0ID0gMSA8PCAwLAogICAgICAgIFNp
emVTZXQgPSAxIDw8IDEsCiAgICAgICAgQ3JlYXRpb25UaW1lU2V0ID0gMSA8PCAyLAogICAgICAg
IFVwZGF0ZVRpbWVTZXQgPSAxIDw8IDMsCiAgICAgICAgUmVzb3VyY2VzU2V0ID0gMSA8PCA0LAog
ICAgICAgIEFsbEZpZWxkc1NldCA9IChNYW5pZmVzdFVSTFNldCB8IFNpemVTZXQgfCBDcmVhdGlv
blRpbWVTZXQgfCBVcGRhdGVUaW1lU2V0IHwgUmVzb3VyY2VzU2V0KQogICAgfTsKCiAgICB0ZW1w
bGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBT
VEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8QXBwbGljYXRpb25DYWNo
ZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9G
aWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAg
IG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQXBwbGljYXRp
b25DYWNoZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1hbmlmZXN0VVJM
U2V0PiYgc2V0TWFuaWZlc3RVUkwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNYW5pZmVzdFVSTFNldCksIHByb3BlcnR5
X21hbmlmZXN0VVJMX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
ZygibWFuaWZlc3RVUkwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWFu
aWZlc3RVUkxTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU2l6ZVNl
dD4mIHNldFNpemUoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFNpemVTZXQpLCBwcm9wZXJ0eV9zaXplX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic2l6ZSIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxTaXplU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IENyZWF0aW9uVGltZVNldD4mIHNldENyZWF0aW9uVGltZShkb3VibGUgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ3JlYXRpb25UaW1l
U2V0KSwgcHJvcGVydHlfY3JlYXRpb25UaW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldE51bWJlcigiY3JlYXRpb25UaW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPENyZWF0aW9uVGltZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBVcGRhdGVUaW1lU2V0PiYgc2V0VXBkYXRlVGltZShkb3VibGUgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVXBkYXRlVGltZVNl
dCksIHByb3BlcnR5X3VwZGF0ZVRpbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0TnVtYmVyKCJ1cGRhdGVUaW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFVwZGF0ZVRpbWVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgUmVzb3VyY2VzU2V0PiYgc2V0UmVzb3VyY2VzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFJl
c291cmNlc1NldCksIHByb3BlcnR5X3Jlc291cmNlc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRBcnJheSgicmVzb3VyY2VzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFJlc291cmNlc1NldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9y
IFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8QXBwbGljYXRpb25DYWNo
ZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxB
cHBsaWNhdGlvbkNhY2hlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxB
cHBsaWNhdGlvbkNhY2hlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICog
U3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+IHJl
c3VsdCA9IEFwcGxpY2F0aW9uQ2FjaGU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldE1hbmlmZXN0
VVJMKC4uLikKICAgICAqICAgICAuc2V0U2l6ZSguLi4pCiAgICAgKiAgICAgLnNldENyZWF0aW9u
VGltZSguLi4pCiAgICAgKiAgICAgLnNldFVwZGF0ZVRpbWUoLi4uKQogICAgICogICAgIC5zZXRS
ZXNvdXJjZXMoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNy
ZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVm
KG5ldyBBcHBsaWNhdGlvbkNhY2hlKCkpKTsKICAgIH0KfTsKCi8qIEZyYW1lIGlkZW50aWZpZXIg
LSBtYW5pZmVzdCBVUkwgcGFpci4gKi8KY2xhc3MgRnJhbWVXaXRoTWFuaWZlc3QgOiBwdWJsaWMg
SW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQg
PSAwLAogICAgICAgIEZyYW1lSWRTZXQgPSAxIDw8IDAsCiAgICAgICAgTWFuaWZlc3RVUkxTZXQg
PSAxIDw8IDEsCiAgICAgICAgU3RhdHVzU2V0ID0gMSA8PCAyLAogICAgICAgIEFsbEZpZWxkc1Nl
dCA9IChGcmFtZUlkU2V0IHwgTWFuaWZlc3RVUkxTZXQgfCBTdGF0dXNTZXQpCiAgICB9OwoKICAg
IHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8
aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4q
Pih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxGcmFtZVdpdGhN
YW5pZmVzdD4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAg
ICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgRnJh
bWVXaXRoTWFuaWZlc3Q7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBGcmFt
ZUlkU2V0PiYgc2V0RnJhbWVJZChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEZyYW1lSWRTZXQpLCBwcm9wZXJ0eV9mcmFt
ZUlkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZnJhbWVJ
ZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxGcmFtZUlkU2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1hbmlmZXN0VVJMU2V0PiYgc2V0TWFu
aWZlc3RVUkwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBNYW5pZmVzdFVSTFNldCksIHByb3BlcnR5X21hbmlmZXN0VVJM
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWFuaWZlc3RV
UkwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWFuaWZlc3RVUkxTZXQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3RhdHVzU2V0PiYgc2V0U3Rh
dHVzKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBTdGF0dXNTZXQpLCBwcm9wZXJ0eV9zdGF0dXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzdGF0dXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8U3RhdHVzU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVm
UHRyPEZyYW1lV2l0aE1hbmlmZXN0PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8RnJhbWVXaXRoTWFuaWZlc3Q+
Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8RnJh
bWVXaXRoTWFuaWZlc3Q+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPEZy
YW1lV2l0aE1hbmlmZXN0PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICog
U3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEZyYW1lV2l0aE1hbmlmZXN0PiBy
ZXN1bHQgPSBGcmFtZVdpdGhNYW5pZmVzdDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0RnJhbWVJ
ZCguLi4pCiAgICAgKiAgICAgLnNldE1hbmlmZXN0VVJMKC4uLikKICAgICAqICAgICAuc2V0U3Rh
dHVzKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUo
KQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcg
RnJhbWVXaXRoTWFuaWZlc3QoKSkpOwogICAgfQp9OwoKfSAvLyBBcHBsaWNhdGlvbkNhY2hlCgpu
YW1lc3BhY2UgRE9NIHsKLyogRE9NIGludGVyYWN0aW9uIGlzIGltcGxlbWVudGVkIGluIHRlcm1z
IG9mIG1pcnJvciBvYmplY3RzIHRoYXQgcmVwcmVzZW50IHRoZSBhY3R1YWwgRE9NIG5vZGVzLiBE
T01Ob2RlIGlzIGEgYmFzZSBub2RlIG1pcnJvciB0eXBlLiAqLwpjbGFzcyBOb2RlIDogcHVibGlj
IEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0
ID0gMCwKICAgICAgICBOb2RlSWRTZXQgPSAxIDw8IDAsCiAgICAgICAgTm9kZVR5cGVTZXQgPSAx
IDw8IDEsCiAgICAgICAgTm9kZU5hbWVTZXQgPSAxIDw8IDIsCiAgICAgICAgTG9jYWxOYW1lU2V0
ID0gMSA8PCAzLAogICAgICAgIE5vZGVWYWx1ZVNldCA9IDEgPDwgNCwKICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAoTm9kZUlkU2V0IHwgTm9kZVR5cGVTZXQgfCBOb2RlTmFtZVNldCB8IExvY2FsTmFt
ZVNldCB8IE5vZGVWYWx1ZVNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAg
Y2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8
IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcihQYXNzUmVmUHRyPE5vZGU+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9u
X2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAg
ICAgZnJpZW5kIGNsYXNzIE5vZGU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBOb2RlSWRTZXQ+JiBzZXROb2RlSWQoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vZGVJZFNldCksIHByb3BlcnR5X25vZGVJZF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoIm5vZGVJZCIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOb2RlSWRTZXQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm9kZVR5cGVTZXQ+JiBzZXROb2RlVHlwZShpbnQgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTm9kZVR5
cGVTZXQpLCBwcm9wZXJ0eV9ub2RlVHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXROdW1iZXIoIm5vZGVUeXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPE5vZGVUeXBlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IE5vZGVOYW1lU2V0PiYgc2V0Tm9kZU5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOb2RlTmFtZVNldCksIHByb3Bl
cnR5X25vZGVOYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
Zygibm9kZU5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tm9kZU5h
bWVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTG9jYWxOYW1lU2V0
PiYgc2V0TG9jYWxOYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTG9jYWxOYW1lU2V0KSwgcHJvcGVydHlfbG9jYWxO
YW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibG9jYWxO
YW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPExvY2FsTmFtZVNldD4o
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb2RlVmFsdWVTZXQ+JiBzZXRO
b2RlVmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBOb2RlVmFsdWVTZXQpLCBwcm9wZXJ0eV9ub2RlVmFsdWVfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJub2RlVmFsdWUiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tm9kZVZhbHVlU2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPE5vZGU+JiAoKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxOb2Rl
Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPE5v
ZGU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPE5vZGU+KCp0aGlzKTsK
ICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAg
ICAgKiBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gTm9kZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0
Tm9kZUlkKC4uLikKICAgICAqICAgICAuc2V0Tm9kZVR5cGUoLi4uKQogICAgICogICAgIC5zZXRO
b2RlTmFtZSguLi4pCiAgICAgKiAgICAgLnNldExvY2FsTmFtZSguLi4pCiAgICAgKiAgICAgLnNl
dE5vZGVWYWx1ZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4g
Y3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRS
ZWYobmV3IE5vZGUoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0Q2hpbGROb2RlQ291bnQoaW50IHZh
bHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE51bWJlcigiY2hpbGROb2RlQ291bnQiLCB2YWx1
ZSk7CiAgICB9CgogICAgdm9pZCBzZXRDaGlsZHJlbihQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5
PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRBcnJheSgiY2hpbGRyZW4iLCB2YWx1ZSk7
CiAgICB9CgogICAgdm9pZCBzZXRBdHRyaWJ1dGVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJhdHRyaWJ1dGVzIiwgdmFsdWUp
OwogICAgfQoKICAgIHZvaWQgc2V0RG9jdW1lbnRVUkwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAg
IHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoImRvY3VtZW50VVJMIiwgdmFsdWUpOwogICAgfQoK
ICAgIHZvaWQgc2V0UHVibGljSWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0
aGlzLT5zZXRTdHJpbmcoInB1YmxpY0lkIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U3lz
dGVtSWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmco
InN5c3RlbUlkIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0SW50ZXJuYWxTdWJzZXQoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoImludGVybmFs
U3Vic2V0IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0WG1sVmVyc2lvbihjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygieG1sVmVyc2lvbiIsIHZh
bHVlKTsKICAgIH0KCiAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsK
ICAgICAgICB0aGlzLT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBz
ZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmlu
ZygidmFsdWUiLCB2YWx1ZSk7CiAgICB9CiAgICB1c2luZyBJbnNwZWN0b3JPYmplY3Q6OnNldFZh
bHVlOwoKfTsKCi8qIERPTSBpbnRlcmFjdGlvbiBpcyBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBt
aXJyb3Igb2JqZWN0cyB0aGF0IHJlcHJlc2VudCB0aGUgYWN0dWFsIERPTSBub2Rlcy4gRE9NTm9k
ZSBpcyBhIGJhc2Ugbm9kZSBtaXJyb3IgdHlwZS4gKi8KY2xhc3MgRXZlbnRMaXN0ZW5lciA6IHB1
YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxk
c1NldCA9IDAsCiAgICAgICAgVHlwZVNldCA9IDEgPDwgMCwKICAgICAgICBVc2VDYXB0dXJlU2V0
ID0gMSA8PCAxLAogICAgICAgIElzQXR0cmlidXRlU2V0ID0gMSA8PCAyLAogICAgICAgIE5vZGVJ
ZFNldCA9IDEgPDwgMywKICAgICAgICBIYW5kbGVyQm9keVNldCA9IDEgPDwgNCwKICAgICAgICBB
bGxGaWVsZHNTZXQgPSAoVHlwZVNldCB8IFVzZUNhcHR1cmVTZXQgfCBJc0F0dHJpYnV0ZVNldCB8
IE5vZGVJZFNldCB8IEhhbmRsZXJCb2R5U2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RB
VEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8RXZlbnRMaXN0ZW5lcj4gcHRyKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxk
ZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRy
OwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgRXZlbnRMaXN0ZW5lcjsKICAgIHB1Ymxp
YzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR5cGVTZXQ+JiBzZXRUeXBlKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
VHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFR5cGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVXNlQ2FwdHVy
ZVNldD4mIHNldFVzZUNhcHR1cmUoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVc2VDYXB0dXJlU2V0KSwgcHJvcGVydHlfdXNlQ2FwdHVy
ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJ1c2VDYXB0
dXJlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFVzZUNhcHR1cmVTZXQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSXNBdHRyaWJ1dGVTZXQ+JiBz
ZXRJc0F0dHJpYnV0ZShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIElzQXR0cmlidXRlU2V0KSwgcHJvcGVydHlfaXNBdHRyaWJ1dGVfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigiaXNBdHRyaWJ1dGUi
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SXNBdHRyaWJ1dGVTZXQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm9kZUlkU2V0PiYgc2V0Tm9kZUlk
KGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBOb2RlSWRTZXQpLCBwcm9wZXJ0eV9ub2RlSWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0TnVtYmVyKCJub2RlSWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8Tm9kZUlkU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IEhhbmRsZXJCb2R5U2V0PiYgc2V0SGFuZGxlckJvZHkoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBIYW5kbGVyQm9keVNl
dCksIHByb3BlcnR5X2hhbmRsZXJCb2R5X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygiaGFuZGxlckJvZHkiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8SGFuZGxlckJvZHlTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBS
ZWZQdHI8RXZlbnRMaXN0ZW5lcj4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEV2ZW50TGlzdGVuZXI+Kj4oJm1f
cmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8RXZlbnRMaXN0ZW5l
cj4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25z
dHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxFdmVudExpc3RlbmVyPiByZXN1bHQgPSBFdmVudExpc3Rl
bmVyOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRUeXBlKC4uLikKICAgICAqICAgICAuc2V0VXNl
Q2FwdHVyZSguLi4pCiAgICAgKiAgICAgLnNldElzQXR0cmlidXRlKC4uLikKICAgICAqICAgICAu
c2V0Tm9kZUlkKC4uLikKICAgICAqICAgICAuc2V0SGFuZGxlckJvZHkoLi4uKTsKICAgICAqLwog
ICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBFdmVudExpc3RlbmVyKCkpKTsK
ICAgIH0KCiAgICB2b2lkIHNldExvY2F0aW9uKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVi
dWdnZXI6OkxvY2F0aW9uPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAg
IHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoImxvY2F0aW9uIiwgdmFsdWUpOwogICAgfQp9OwoK
LyogQSBzdHJ1Y3R1cmUgaG9sZGluZyBhbiBSR0JBIGNvbG9yLiAqLwovLyBUeXBlIG9yaWdpbmFs
bHkgd2FzIG5hbWVkICdSR0JBJy4KY2xhc3MgUmdiYSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qg
ewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgUlNl
dCA9IDEgPDwgMCwKICAgICAgICBHU2V0ID0gMSA8PCAxLAogICAgICAgIEJTZXQgPSAxIDw8IDIs
CiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFJTZXQgfCBHU2V0IHwgQlNldCkKICAgIH07CgogICAg
dGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxp
bnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAg
ICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+
KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFJnYmE+IHB0cikK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0
LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3Vs
dCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFJnYmE7CiAgICBwdWJsaWM6
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBSU2V0PiYgc2V0UihpbnQgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUlNldCksIHByb3BlcnR5X3Jf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJyIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFJTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgR1NldD4mIHNldEcoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEdTZXQpLCBwcm9wZXJ0eV9nX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiZyIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxHU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IEJTZXQ+JiBzZXRCKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBCU2V0KSwgcHJvcGVydHlfYl9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImIiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8QlNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0
cjxSZ2JhPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UmdiYT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAg
ICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxSZ2JhPiAoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuIFJlZlB0cjxSZ2JhPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAg
ICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFJnYmE+IHJlc3VsdCA9IFJn
YmE6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFIoLi4uKQogICAgICogICAgIC5zZXRHKC4uLikK
ICAgICAqICAgICAuc2V0QiguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxk
c1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4o
YWRvcHRSZWYobmV3IFJnYmEoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0QShkb3VibGUgdmFsdWUp
CiAgICB7CiAgICAgICAgdGhpcy0+c2V0TnVtYmVyKCJhIiwgdmFsdWUpOwogICAgfQp9OwoKLyog
Q29uZmlndXJhdGlvbiBkYXRhIGZvciB0aGUgaGlnaGxpZ2h0aW5nIG9mIHBhZ2UgZWxlbWVudHMu
ICovCmNsYXNzIEhpZ2hsaWdodENvbmZpZyA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJs
aWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgQWxsRmllbGRz
U2V0ID0gMAogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVy
IHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7
CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RT
dGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVp
bGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBh
c3NSZWZQdHI8SGlnaGxpZ2h0Q29uZmlnPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9p
bml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAg
IGZyaWVuZCBjbGFzcyBIaWdobGlnaHRDb25maWc7CiAgICBwdWJsaWM6CgogICAgICAgIG9wZXJh
dG9yIFJlZlB0cjxIaWdobGlnaHRDb25maWc+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxIaWdobGlnaHRDb25m
aWc+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8
SGlnaGxpZ2h0Q29uZmlnPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxI
aWdobGlnaHRDb25maWc+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8SGlnaGxpZ2h0Q29uZmlnPiByZXN1
bHQgPSBIaWdobGlnaHRDb25maWc6OmNyZWF0ZSgpOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRl
cjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0Zp
ZWxkc1NldD4oYWRvcHRSZWYobmV3IEhpZ2hsaWdodENvbmZpZygpKSk7CiAgICB9CgogICAgdm9p
ZCBzZXRTaG93SW5mbyhib29sIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEJvb2xlYW4o
InNob3dJbmZvIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0Q29udGVudENvbG9yKC8qUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpSZ2JhPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoImNvbnRlbnRDb2xvciIs
IHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFBhZGRpbmdDb2xvcigvKlBhc3NSZWZQdHI8VHlw
ZUJ1aWxkZXI6OkRPTTo6UmdiYT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUp
CiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJwYWRkaW5nQ29sb3IiLCB2YWx1ZSk7CiAg
ICB9CgogICAgdm9pZCBzZXRCb3JkZXJDb2xvcigvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRP
TTo6UmdiYT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAg
ICAgdGhpcy0+c2V0T2JqZWN0KCJib3JkZXJDb2xvciIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lk
IHNldE1hcmdpbkNvbG9yKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpSZ2JhPiovIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRP
YmplY3QoIm1hcmdpbkNvbG9yIiwgdmFsdWUpOwogICAgfQp9OwoKfSAvLyBET00KCm5hbWVzcGFj
ZSBDU1MgewovKiBUaGlzIG9iamVjdCBpZGVudGlmaWVzIGEgQ1NTIHN0eWxlIGluIGEgdW5pcXVl
IHdheS4gKi8KY2xhc3MgQ1NTU3R5bGVJZCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJs
aWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgU3R5bGVTaGVl
dElkU2V0ID0gMSA8PCAwLAogICAgICAgIE9yZGluYWxTZXQgPSAxIDw8IDEsCiAgICAgICAgQWxs
RmllbGRzU2V0ID0gKFN0eWxlU2hlZXRJZFNldCB8IE9yZGluYWxTZXQpCiAgICB9OwoKICAgIHRl
bXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50
IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0
aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NTdHlsZUlkPiBw
dHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxk
c1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9y
ZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDU1NTdHlsZUlkOwog
ICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3R5bGVTaGVldElkU2V0PiYgc2V0
U3R5bGVTaGVldElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3R5bGVTaGVldElkU2V0KSwgcHJvcGVydHlfc3R5bGVT
aGVldElkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic3R5
bGVTaGVldElkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0eWxlU2hl
ZXRJZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPcmRpbmFsU2V0
PiYgc2V0T3JkaW5hbChpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgT3JkaW5hbFNldCksIHByb3BlcnR5X29yZGluYWxfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJvcmRpbmFsIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9yZGluYWxTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBSZWZQdHI8Q1NTU3R5bGVJZD4mICgpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkp
OwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENTU1N0eWxlSWQ+
Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q1NT
U3R5bGVJZD4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q1NTU3R5bGVJ
ZD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25z
dHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDU1NTdHlsZUlkPiByZXN1bHQgPSBDU1NTdHlsZUlkOjpj
cmVhdGUoKQogICAgICogICAgIC5zZXRTdHlsZVNoZWV0SWQoLi4uKQogICAgICogICAgIC5zZXRP
cmRpbmFsKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVh
dGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihu
ZXcgQ1NTU3R5bGVJZCgpKSk7CiAgICB9Cn07CgovKiBUaGlzIG9iamVjdCBpZGVudGlmaWVzIGEg
Q1NTIHJ1bGUgaW4gYSB1bmlxdWUgd2F5LiAqLwpjbGFzcyBDU1NSdWxlSWQgOiBwdWJsaWMgSW5z
cGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAw
LAogICAgICAgIFN0eWxlU2hlZXRJZFNldCA9IDEgPDwgMCwKICAgICAgICBPcmRpbmFsU2V0ID0g
MSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChTdHlsZVNoZWV0SWRTZXQgfCBPcmRpbmFs
U2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsK
ICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7Cgog
ICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0
ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRl
cjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NS
ZWZQdHI8Q1NTUnVsZUlkPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRl
KTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBj
bGFzcyBDU1NSdWxlSWQ7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdHls
ZVNoZWV0SWRTZXQ+JiBzZXRTdHlsZVNoZWV0SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdHlsZVNoZWV0SWRTZXQp
LCBwcm9wZXJ0eV9zdHlsZVNoZWV0SWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8U3R5bGVTaGVldElkU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IE9yZGluYWxTZXQ+JiBzZXRPcmRpbmFsKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPcmRpbmFsU2V0KSwgcHJvcGVydHlfb3Jk
aW5hbF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoIm9yZGlu
YWwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T3JkaW5hbFNldD4oKTsK
ICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDU1NSdWxlSWQ+JiAoKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1
bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJl
ZlB0cjxDU1NSdWxlSWQ+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9y
IFBhc3NSZWZQdHI8Q1NTUnVsZUlkPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJl
ZlB0cjxDU1NSdWxlSWQ+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTUnVsZUlkPiByZXN1bHQgPSBD
U1NSdWxlSWQ6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFN0eWxlU2hlZXRJZCguLi4pCiAgICAg
KiAgICAgLnNldE9yZGluYWwoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
KGFkb3B0UmVmKG5ldyBDU1NSdWxlSWQoKSkpOwogICAgfQp9OwoKLyogQ1NTIHJ1bGUgY29sbGVj
dGlvbiBmb3IgYSBzaW5nbGUgcHNldWRvIHN0eWxlLiAqLwpjbGFzcyBQc2V1ZG9JZFJ1bGVzIDog
cHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmll
bGRzU2V0ID0gMCwKICAgICAgICBQc2V1ZG9JZFNldCA9IDEgPDwgMCwKICAgICAgICBSdWxlc1Nl
dCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoUHNldWRvSWRTZXQgfCBSdWxlc1Nl
dCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAg
ICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVm
UHRyPFBzZXVkb0lkUnVsZXM+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3Rh
dGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5k
IGNsYXNzIFBzZXVkb0lkUnVsZXM7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBQc2V1ZG9JZFNldD4mIHNldFBzZXVkb0lkKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQc2V1ZG9JZFNldCksIHByb3BlcnR5X3BzZXVk
b0lkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigicHNldWRv
SWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UHNldWRvSWRTZXQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUnVsZXNTZXQ+JiBzZXRSdWxlcyhQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBSdWxlc1NldCksIHByb3BlcnR5X3J1bGVzX2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJydWxlcyIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxSdWxlc1NldD4oKTsKICAgICAgICB9CgogICAgICAg
IG9wZXJhdG9yIFJlZlB0cjxQc2V1ZG9JZFJ1bGVzPiYgKCkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFk
eSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8UHNldWRvSWRS
dWxlcz4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0
cjxQc2V1ZG9JZFJ1bGVzPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxQ
c2V1ZG9JZFJ1bGVzPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3lu
dGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFBzZXVkb0lkUnVsZXM+IHJlc3VsdCA9
IFBzZXVkb0lkUnVsZXM6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFBzZXVkb0lkKC4uLikKICAg
ICAqICAgICAuc2V0UnVsZXMoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
KGFkb3B0UmVmKG5ldyBQc2V1ZG9JZFJ1bGVzKCkpKTsKICAgIH0KfTsKCi8qIENTUyBydWxlIGNv
bGxlY3Rpb24gZm9yIGEgc2luZ2xlIHBzZXVkbyBzdHlsZS4gKi8KY2xhc3MgSW5oZXJpdGVkU3R5
bGVFbnRyeSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAg
ICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgTWF0Y2hlZENTU1J1bGVzU2V0ID0gMSA8PCAw
LAogICAgICAgIEFsbEZpZWxkc1NldCA9IChNYXRjaGVkQ1NTUnVsZXNTZXQpCiAgICB9OwoKICAg
IHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8
aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4q
Pih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxJbmhlcml0ZWRT
dHlsZUVudHJ5PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAg
ICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBJ
bmhlcml0ZWRTdHlsZUVudHJ5OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
TWF0Y2hlZENTU1J1bGVzU2V0PiYgc2V0TWF0Y2hlZENTU1J1bGVzKFBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIE1hdGNoZWRDU1NSdWxlc1NldCksIHByb3BlcnR5X21hdGNoZWRDU1NSdWxlc19hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgibWF0Y2hlZENTU1J1bGVz
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1hdGNoZWRDU1NSdWxlc1Nl
dD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxJbmhlcml0ZWRTdHlsZUVu
dHJ5PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFs
bEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxSZWZQdHI8SW5oZXJpdGVkU3R5bGVFbnRyeT4qPigmbV9yZXN1bHQpOwog
ICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxJbmhlcml0ZWRTdHlsZUVudHJ5
PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxJbmhlcml0ZWRTdHlsZUVu
dHJ5PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNv
bnN0cnVjdG9yOgogICAgICogUmVmUHRyPEluaGVyaXRlZFN0eWxlRW50cnk+IHJlc3VsdCA9IElu
aGVyaXRlZFN0eWxlRW50cnk6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldE1hdGNoZWRDU1NSdWxl
cyguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkK
ICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IElu
aGVyaXRlZFN0eWxlRW50cnkoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0SW5saW5lU3R5bGUoLypQ
YXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiovIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoImlubGluZVN0
eWxlIiwgdmFsdWUpOwogICAgfQp9OwoKLyogQ1NTIHN0eWxlIGluZm9ybWF0aW9uIGZvciBhIERP
TSBzdHlsZSBhdHRyaWJ1dGUuICovCmNsYXNzIENTU1N0eWxlQXR0cmlidXRlIDogcHVibGljIElu
c3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKICAgICAgICBOYW1lU2V0ID0gMSA8PCAwLAogICAgICAgIFN0eWxlU2V0ID0gMSA8PCAxLAog
ICAgICAgIEFsbEZpZWxkc1NldCA9IChOYW1lU2V0IHwgU3R5bGVTZXQpCiAgICB9OwoKICAgIHRl
bXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50
IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0
aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NTdHlsZUF0dHJp
YnV0ZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
Tm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAg
ICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NTU3R5
bGVBdHRyaWJ1dGU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOYW1lU2V0
PiYgc2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIE5hbWVTZXQpLCBwcm9wZXJ0eV9uYW1lX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibmFtZSIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOYW1lU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFN0eWxlU2V0PiYgc2V0U3R5bGUoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjpDU1M6OkNTU1N0eWxlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdHlsZVNldCksIHBy
b3BlcnR5X3N0eWxlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVj
dCgic3R5bGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3R5bGVTZXQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTU3R5bGVBdHRyaWJ1dGU+
JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmll
bGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PFJlZlB0cjxDU1NTdHlsZUF0dHJpYnV0ZT4qPigmbV9yZXN1bHQpOwogICAgICAg
IH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NTdHlsZUF0dHJpYnV0ZT4gKCkKICAg
ICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q1NTU3R5bGVBdHRyaWJ1dGU+KCp0aGlz
KTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6
CiAgICAgKiBSZWZQdHI8Q1NTU3R5bGVBdHRyaWJ1dGU+IHJlc3VsdCA9IENTU1N0eWxlQXR0cmli
dXRlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXROYW1lKC4uLikKICAgICAqICAgICAuc2V0U3R5
bGUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgp
CiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBD
U1NTdHlsZUF0dHJpYnV0ZSgpKSk7CiAgICB9Cn07CgovKiBDU1Mgc3R5bGVzaGVldCBtZXRhaW5m
b3JtYXRpb24uICovCmNsYXNzIENTU1N0eWxlU2hlZXRIZWFkZXIgOiBwdWJsaWMgSW5zcGVjdG9y
T2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAg
ICAgIFN0eWxlU2hlZXRJZFNldCA9IDEgPDwgMCwKICAgICAgICBTb3VyY2VVUkxTZXQgPSAxIDw8
IDEsCiAgICAgICAgVGl0bGVTZXQgPSAxIDw8IDIsCiAgICAgICAgRGlzYWJsZWRTZXQgPSAxIDw8
IDMsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFN0eWxlU2hlZXRJZFNldCB8IFNvdXJjZVVSTFNl
dCB8IFRpdGxlU2V0IHwgRGlzYWJsZWRTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFU
RT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAq
cmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0SGVhZGVyPiBwdHIpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQg
PSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDU1NTdHlsZVNoZWV0SGVhZGVy
OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3R5bGVTaGVldElkU2V0PiYg
c2V0U3R5bGVTaGVldElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3R5bGVTaGVldElkU2V0KSwgcHJvcGVydHlfc3R5
bGVTaGVldElkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
c3R5bGVTaGVldElkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0eWxl
U2hlZXRJZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTb3VyY2VV
UkxTZXQ+JiBzZXRTb3VyY2VVUkwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTb3VyY2VVUkxTZXQpLCBwcm9wZXJ0eV9z
b3VyY2VVUkxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJz
b3VyY2VVUkwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U291cmNlVVJM
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpdGxlU2V0PiYgc2V0
VGl0bGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBUaXRsZVNldCksIHByb3BlcnR5X3RpdGxlX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidGl0bGUiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8VGl0bGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgRGlzYWJsZWRTZXQ+JiBzZXREaXNhYmxlZChib29sIHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERpc2FibGVkU2V0KSwgcHJv
cGVydHlfZGlzYWJsZWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9v
bGVhbigiZGlzYWJsZWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RGlz
YWJsZWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTU3R5bGVT
aGVldEhlYWRlcj4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENTU1N0eWxlU2hlZXRIZWFkZXI+Kj4oJm1fcmVz
dWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q1NTU3R5bGVTaGVl
dEhlYWRlcj4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q1NTU3R5bGVT
aGVldEhlYWRlcj4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRo
ZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDU1NTdHlsZVNoZWV0SGVhZGVyPiByZXN1
bHQgPSBDU1NTdHlsZVNoZWV0SGVhZGVyOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRTdHlsZVNo
ZWV0SWQoLi4uKQogICAgICogICAgIC5zZXRTb3VyY2VVUkwoLi4uKQogICAgICogICAgIC5zZXRU
aXRsZSguLi4pCiAgICAgKiAgICAgLnNldERpc2FibGVkKC4uLik7CiAgICAgKi8KICAgIHN0YXRp
YyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWls
ZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgQ1NTU3R5bGVTaGVldEhlYWRlcigpKSk7CiAg
ICB9Cn07CgovKiBDU1Mgc3R5bGVzaGVldCBjb250ZW50cy4gKi8KY2xhc3MgQ1NTU3R5bGVTaGVl
dEJvZHkgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAg
ICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFN0eWxlU2hlZXRJZFNldCA9IDEgPDwgMCwKICAg
ICAgICBSdWxlc1NldCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoU3R5bGVTaGVl
dElkU2V0IHwgUnVsZXNTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNs
YXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0Qm9keT4gcHRyKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3Jl
YXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAg
ICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NTU3R5bGVTaGVldEJvZHk7CiAgICBwdWJsaWM6
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdHlsZVNoZWV0SWRTZXQ+JiBzZXRTdHlsZVNoZWV0
SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBTdHlsZVNoZWV0SWRTZXQpLCBwcm9wZXJ0eV9zdHlsZVNoZWV0SWRfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQi
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3R5bGVTaGVldElkU2V0Pigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFJ1bGVzU2V0PiYgc2V0UnVsZXMo
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgUnVsZXNTZXQpLCBwcm9wZXJ0eV9ydWxlc19hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgicnVsZXMiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UnVsZXNTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBSZWZQdHI8Q1NTU3R5bGVTaGVldEJvZHk+JiAoKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NT
dHlsZVNoZWV0Qm9keT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3Ig
UGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0Qm9keT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJl
dHVybiBSZWZQdHI8Q1NTU3R5bGVTaGVldEJvZHk+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoK
ICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTU3R5
bGVTaGVldEJvZHk+IHJlc3VsdCA9IENTU1N0eWxlU2hlZXRCb2R5OjpjcmVhdGUoKQogICAgICog
ICAgIC5zZXRTdHlsZVNoZWV0SWQoLi4uKQogICAgICogICAgIC5zZXRSdWxlcyguLi4pOwogICAg
ICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAg
ICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IENTU1N0eWxlU2hlZXRC
b2R5KCkpKTsKICAgIH0KCiAgICB2b2lkIHNldFRleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAg
IHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInRleHQiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBD
U1MgcnVsZSByZXByZXNlbnRhdGlvbi4gKi8KY2xhc3MgQ1NTUnVsZSA6IHB1YmxpYyBJbnNwZWN0
b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdvcmln
aW4nIHdoaWxlIGdlbmVyYXRpbmcgQ1NTUnVsZS4KICAgIHN0cnVjdCBPcmlnaW4gewogICAgICAg
IGVudW0gRW51bSB7CiAgICAgICAgICAgIFVzZXIgPSA0MCwKICAgICAgICAgICAgVXNlcl9hZ2Vu
dCA9IDQxLAogICAgICAgICAgICBJbnNwZWN0b3IgPSA0MiwKICAgICAgICAgICAgUmVndWxhciA9
IDQzLAogICAgICAgIH07CiAgICB9OyAvLyBzdHJ1Y3QgT3JpZ2luCgogICAgZW51bSB7CiAgICAg
ICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFNlbGVjdG9yVGV4dFNldCA9IDEgPDwgMCwKICAg
ICAgICBTb3VyY2VMaW5lU2V0ID0gMSA8PCAxLAogICAgICAgIE9yaWdpblNldCA9IDEgPDwgMiwK
ICAgICAgICBTdHlsZVNldCA9IDEgPDwgMywKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoU2VsZWN0
b3JUZXh0U2V0IHwgU291cmNlTGluZVNldCB8IE9yaWdpblNldCB8IFN0eWxlU2V0KQogICAgfTsK
CiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6
CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBs
YXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAg
ewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNU
RVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q1NTUnVs
ZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9G
aWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAg
IG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NTUnVsZTsK
ICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNlbGVjdG9yVGV4dFNldD4mIHNl
dFNlbGVjdG9yVGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNlbGVjdG9yVGV4dFNldCksIHByb3BlcnR5X3NlbGVj
dG9yVGV4dF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInNl
bGVjdG9yVGV4dCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTZWxlY3Rv
clRleHRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU291cmNlTGlu
ZVNldD4mIHNldFNvdXJjZUxpbmUoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFNvdXJjZUxpbmVTZXQpLCBwcm9wZXJ0eV9zb3VyY2VMaW5l
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic291cmNlTGlu
ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTb3VyY2VMaW5lU2V0Pigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE9yaWdpblNldD4mIHNldE9yaWdp
bihPcmlnaW46OkVudW0gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgT3JpZ2luU2V0KSwgcHJvcGVydHlfb3JpZ2luX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygib3JpZ2luIiwgZ2V0RW51bUNvbnN0YW50VmFs
dWUodmFsdWUpKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxPcmlnaW5TZXQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgT3JpZ2luU2V0PiYgc2V0T3JpZ2luKGNv
bnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgT3JpZ2luU2V0KSwgcHJvcGVydHlfb3JpZ2luX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygib3JpZ2luIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPE9yaWdpblNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBTdHlsZVNldD4mIHNldFN0eWxlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NT
OjpDU1NTdHlsZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3R5bGVTZXQpLCBwcm9wZXJ0
eV9zdHlsZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInN0
eWxlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0eWxlU2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENTU1J1bGU+JiAoKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRf
aXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0
cjxDU1NSdWxlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNz
UmVmUHRyPENTU1J1bGU+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENT
U1J1bGU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMg
Y29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTUnVsZT4gcmVzdWx0ID0gQ1NTUnVsZTo6Y3Jl
YXRlKCkKICAgICAqICAgICAuc2V0U2VsZWN0b3JUZXh0KC4uLikKICAgICAqICAgICAuc2V0U291
cmNlTGluZSguLi4pCiAgICAgKiAgICAgLnNldE9yaWdpbiguLi4pCiAgICAgKiAgICAgLnNldFN0
eWxlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUo
KQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcg
Q1NTUnVsZSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRSdWxlSWQoLypQYXNzUmVmUHRyPFR5cGVC
dWlsZGVyOjpDU1M6OkNTU1J1bGVJZD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJydWxlSWQiLCB2YWx1ZSk7CiAgICB9
CgogICAgdm9pZCBzZXRTb3VyY2VVUkwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAg
ICB0aGlzLT5zZXRTdHJpbmcoInNvdXJjZVVSTCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNl
dFNlbGVjdG9yUmFuZ2UoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNvdXJjZVJhbmdl
PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlz
LT5zZXRPYmplY3QoInNlbGVjdG9yUmFuZ2UiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRN
ZWRpYShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlz
LT5zZXRBcnJheSgibWVkaWEiLCB2YWx1ZSk7CiAgICB9Cn07CgovKiBUZXh0IHJhbmdlIHdpdGhp
biBhIHJlc291cmNlLiAqLwpjbGFzcyBTb3VyY2VSYW5nZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmpl
Y3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAg
U3RhcnRTZXQgPSAxIDw8IDAsCiAgICAgICAgRW5kU2V0ID0gMSA8PCAxLAogICAgICAgIEFsbEZp
ZWxkc1NldCA9IChTdGFydFNldCB8IEVuZFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNU
QVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRl
cjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFNvdXJjZVJhbmdlPiBwdHIpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRl
cl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7
CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBTb3VyY2VSYW5nZTsKICAgIHB1YmxpYzoK
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0YXJ0U2V0PiYgc2V0U3RhcnQoaW50IHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0YXJ0U2V0KSwg
cHJvcGVydHlfc3RhcnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVt
YmVyKCJzdGFydCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdGFydFNl
dD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFbmRTZXQ+JiBzZXRFbmQo
aW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IEVuZFNldCksIHByb3BlcnR5X2VuZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXROdW1iZXIoImVuZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxF
bmRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8U291cmNlUmFuZ2U+
JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmll
bGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVy
cHJldF9jYXN0PFJlZlB0cjxTb3VyY2VSYW5nZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAg
ICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxTb3VyY2VSYW5nZT4gKCkKICAgICAgICB7CiAgICAg
ICAgICAgIHJldHVybiBSZWZQdHI8U291cmNlUmFuZ2U+KCp0aGlzKTsKICAgICAgICB9CiAgICB9
OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8U291
cmNlUmFuZ2U+IHJlc3VsdCA9IFNvdXJjZVJhbmdlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRT
dGFydCguLi4pCiAgICAgKiAgICAgLnNldEVuZCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVp
bGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxO
b0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFNvdXJjZVJhbmdlKCkpKTsKICAgIH0KfTsKCmNsYXNz
IENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJs
aWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgTmFtZVNldCA9
IDEgPDwgMCwKICAgICAgICBWYWx1ZVNldCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQg
PSAoTmFtZVNldCB8IFZhbHVlU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAg
ICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRF
IHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5PiBwdHIpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwg
YnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQg
PSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDU1NDb21wdXRlZFN0eWxlUHJv
cGVydHk7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOYW1lU2V0PiYgc2V0
TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIE5hbWVTZXQpLCBwcm9wZXJ0eV9uYW1lX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxOYW1lU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFZhbHVlU2V0PiYgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZVNldCksIHByb3BlcnR5
X3ZhbHVlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidmFs
dWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVTZXQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5
PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZp
ZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pio+KCZtX3Jlc3VsdCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVQ
cm9wZXJ0eT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q1NTQ29tcHV0
ZWRTdHlsZVByb3BlcnR5PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICog
U3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVQcm9w
ZXJ0eT4gcmVzdWx0ID0gQ1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5OjpjcmVhdGUoKQogICAgICog
ICAgIC5zZXROYW1lKC4uLikKICAgICAqICAgICAuc2V0VmFsdWUoLi4uKTsKICAgICAqLwogICAg
c3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJu
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBDU1NDb21wdXRlZFN0eWxlUHJvcGVy
dHkoKSkpOwogICAgfQp9OwoKLyogQ1NTIHN0eWxlIHJlcHJlc2VudGF0aW9uLiAqLwpjbGFzcyBD
U1NTdHlsZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAg
ICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgQ3NzUHJvcGVydGllc1NldCA9IDEgPDwgMCwK
ICAgICAgICBTaG9ydGhhbmRFbnRyaWVzU2V0ID0gMSA8PCAxLAogICAgICAgIFdpZHRoU2V0ID0g
MSA8PCAyLAogICAgICAgIEhlaWdodFNldCA9IDEgPDwgMywKICAgICAgICBBbGxGaWVsZHNTZXQg
PSAoQ3NzUHJvcGVydGllc1NldCB8IFNob3J0aGFuZEVudHJpZXNTZXQgfCBXaWR0aFNldCB8IEhl
aWdodFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRl
ciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0
OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQ
YXNzUmVmUHRyPENTU1N0eWxlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0
YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVu
ZCBjbGFzcyBDU1NTdHlsZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IENz
c1Byb3BlcnRpZXNTZXQ+JiBzZXRDc3NQcm9wZXJ0aWVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IENzc1Byb3BlcnRpZXNTZXQpLCBwcm9wZXJ0eV9jc3NQcm9wZXJ0aWVzX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJjc3NQcm9wZXJ0aWVzIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENzc1Byb3BlcnRpZXNTZXQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU2hvcnRoYW5kRW50cmllc1NldD4mIHNldFNob3J0
aGFuZEVudHJpZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU2hvcnRoYW5kRW50cmllc1NldCks
IHByb3BlcnR5X3Nob3J0aGFuZEVudHJpZXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0QXJyYXkoInNob3J0aGFuZEVudHJpZXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8U2hvcnRoYW5kRW50cmllc1NldD4oKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBXaWR0aFNldD4mIHNldFdpZHRoKGNvbnN0IFN0cmluZyYgdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgV2lkdGhTZXQp
LCBwcm9wZXJ0eV93aWR0aF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRT
dHJpbmcoIndpZHRoIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFdpZHRo
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEhlaWdodFNldD4mIHNl
dEhlaWdodChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIEhlaWdodFNldCksIHByb3BlcnR5X2hlaWdodF9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImhlaWdodCIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxIZWlnaHRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBSZWZQdHI8Q1NTU3R5bGU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NTdHlsZT4qPigm
bV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NTdHls
ZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q1NTU3R5bGU+KCp0aGlz
KTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6
CiAgICAgKiBSZWZQdHI8Q1NTU3R5bGU+IHJlc3VsdCA9IENTU1N0eWxlOjpjcmVhdGUoKQogICAg
ICogICAgIC5zZXRDc3NQcm9wZXJ0aWVzKC4uLikKICAgICAqICAgICAuc2V0U2hvcnRoYW5kRW50
cmllcyguLi4pCiAgICAgKiAgICAgLnNldFdpZHRoKC4uLikKICAgICAqICAgICAuc2V0SGVpZ2h0
KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQog
ICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgQ1NT
U3R5bGUoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0U3R5bGVJZCgvKlBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6OkNTUzo6Q1NTU3R5bGVJZD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJzdHlsZUlkIiwgdmFsdWUpOwogICAg
fQoKICAgIHZvaWQgc2V0Q3NzVGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAg
IHRoaXMtPnNldFN0cmluZygiY3NzVGV4dCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFJh
bmdlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTb3VyY2VSYW5nZT4qLyBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0
KCJyYW5nZSIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIENTUyBzdHlsZSBlZmZlY3RpdmUgdmlzdWFs
IGRpbWVuc2lvbnMgYW5kIHNvdXJjZSBvZmZzZXRzLiAqLwpjbGFzcyBDU1NQcm9wZXJ0eSA6IHB1
YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0
eSBuYW1lICdzdGF0dXMnIHdoaWxlIGdlbmVyYXRpbmcgQ1NTUHJvcGVydHkuCiAgICBzdHJ1Y3Qg
U3RhdHVzIHsKICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBBY3RpdmUgPSA0NCwKICAg
ICAgICAgICAgSW5hY3RpdmUgPSA0NSwKICAgICAgICAgICAgRGlzYWJsZWQgPSA0NiwKICAgICAg
ICAgICAgU3R5bGUgPSA0NywKICAgICAgICB9OwogICAgfTsgLy8gc3RydWN0IFN0YXR1cwoKICAg
IGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBOYW1lU2V0ID0gMSA8PCAw
LAogICAgICAgIFZhbHVlU2V0ID0gMSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChOYW1l
U2V0IHwgVmFsdWVTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNz
IEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBt
X3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
PiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXIoUGFzc1JlZlB0cjxDU1NQcm9wZXJ0eT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAg
ICAgICBmcmllbmQgY2xhc3MgQ1NTUHJvcGVydHk7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBOYW1lU2V0PiYgc2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5hbWVTZXQpLCBwcm9wZXJ0
eV9uYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibmFt
ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOYW1lU2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlU2V0PiYgc2V0VmFsdWUoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBWYWx1ZVNldCksIHByb3BlcnR5X3ZhbHVlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygidmFsdWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8VmFsdWVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8
Q1NTUHJvcGVydHk+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NQcm9wZXJ0eT4qPigmbV9yZXN1bHQpOwog
ICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NQcm9wZXJ0eT4gKCkKICAg
ICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q1NTUHJvcGVydHk+KCp0aGlzKTsKICAg
ICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAg
KiBSZWZQdHI8Q1NTUHJvcGVydHk+IHJlc3VsdCA9IENTU1Byb3BlcnR5OjpjcmVhdGUoKQogICAg
ICogICAgIC5zZXROYW1lKC4uLikKICAgICAqICAgICAuc2V0VmFsdWUoLi4uKTsKICAgICAqLwog
ICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBDU1NQcm9wZXJ0eSgpKSk7CiAg
ICB9CgogICAgdm9pZCBzZXRQcmlvcml0eShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAg
ICAgIHRoaXMtPnNldFN0cmluZygicHJpb3JpdHkiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBz
ZXRJbXBsaWNpdChib29sIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEJvb2xlYW4oImlt
cGxpY2l0IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygidGV4dCIsIHZhbHVlKTsKICAgIH0K
CiAgICB2b2lkIHNldFBhcnNlZE9rKGJvb2wgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0
Qm9vbGVhbigicGFyc2VkT2siLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRTdGF0dXMoU3Rh
dHVzOjpFbnVtIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygic3RhdHVzIiwg
Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgIH0KCiAgICB2b2lkIHNldFN0YXR1cyhj
b25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygic3RhdHVz
IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U2hvcnRoYW5kTmFtZShjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygic2hvcnRoYW5kTmFtZSIsIHZh
bHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFJhbmdlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
Q1NTOjpTb3VyY2VSYW5nZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAg
ICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJyYW5nZSIsIHZhbHVlKTsKICAgIH0KfTsKCi8q
IENTUyBtZWRpYSBxdWVyeSBkZXNjcmlwdG9yLiAqLwpjbGFzcyBDU1NNZWRpYSA6IHB1YmxpYyBJ
bnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1l
ICdzb3VyY2UnIHdoaWxlIGdlbmVyYXRpbmcgQ1NTTWVkaWEuCiAgICBzdHJ1Y3QgU291cmNlIHsK
ICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBNZWRpYVJ1bGUgPSA0OCwKICAgICAgICAg
ICAgSW1wb3J0UnVsZSA9IDQ5LAogICAgICAgICAgICBTdHlsZXNoZWV0ID0gNTAsCiAgICAgICAg
fTsKICAgIH07IC8vIHN0cnVjdCBTb3VyY2UKCiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1Nl
dCA9IDAsCiAgICAgICAgVGV4dFNldCA9IDEgPDwgMCwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAo
VGV4dFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRl
ciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0
OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQ
YXNzUmVmUHRyPENTU01lZGlhPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0
YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVu
ZCBjbGFzcyBDU1NNZWRpYTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRl
eHRTZXQ+JiBzZXRUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVGV4dFNldCksIHByb3BlcnR5X3RleHRfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0ZXh0IiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRleHRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBSZWZQdHI8Q1NTTWVkaWE+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NNZWRpYT4qPigm
bV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NNZWRp
YT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q1NTTWVkaWE+KCp0aGlz
KTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6
CiAgICAgKiBSZWZQdHI8Q1NTTWVkaWE+IHJlc3VsdCA9IENTU01lZGlhOjpjcmVhdGUoKQogICAg
ICogICAgIC5zZXRUZXh0KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRz
U2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0Pihh
ZG9wdFJlZihuZXcgQ1NTTWVkaWEoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0U291cmNlKFNvdXJj
ZTo6RW51bSB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInNvdXJjZSIsIGdl
dEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICB9CgogICAgdm9pZCBzZXRTb3VyY2UoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInNvdXJjZSIs
IHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFNvdXJjZVVSTChjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygic291cmNlVVJMIiwgdmFsdWUpOwogICAg
fQoKICAgIHZvaWQgc2V0U291cmNlTGluZShpbnQgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+
c2V0TnVtYmVyKCJzb3VyY2VMaW5lIiwgdmFsdWUpOwogICAgfQp9OwoKLyogQ1NTIHNlbGVjdG9y
IHByb2ZpbGUgZW50cnkuICovCmNsYXNzIFNlbGVjdG9yUHJvZmlsZUVudHJ5IDogcHVibGljIElu
c3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKICAgICAgICBTZWxlY3RvclNldCA9IDEgPDwgMCwKICAgICAgICBVcmxTZXQgPSAxIDw8IDEs
CiAgICAgICAgTGluZU51bWJlclNldCA9IDEgPDwgMiwKICAgICAgICBUaW1lU2V0ID0gMSA8PCAz
LAogICAgICAgIEhpdENvdW50U2V0ID0gMSA8PCA0LAogICAgICAgIE1hdGNoQ291bnRTZXQgPSAx
IDw8IDUsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFNlbGVjdG9yU2V0IHwgVXJsU2V0IHwgTGlu
ZU51bWJlclNldCB8IFRpbWVTZXQgfCBIaXRDb3VudFNldCB8IE1hdGNoQ291bnRTZXQpCiAgICB9
OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0
ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAg
ICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwg
U1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxTZWxl
Y3RvclByb2ZpbGVFbnRyeT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0
ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQg
Y2xhc3MgU2VsZWN0b3JQcm9maWxlRW50cnk7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBTZWxlY3RvclNldD4mIHNldFNlbGVjdG9yKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAg
ICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU2VsZWN0b3JTZXQp
LCBwcm9wZXJ0eV9zZWxlY3Rvcl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoInNlbGVjdG9yIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFNlbGVjdG9yU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVybFNl
dD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFVybFNldCksIHByb3BlcnR5X3VybF9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxVcmxTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgTGluZU51bWJlclNldD4mIHNldExpbmVOdW1iZXIoaW50IHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExpbmVOdW1iZXJTZXQpLCBw
cm9wZXJ0eV9saW5lTnVtYmVyX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dE51bWJlcigibGluZU51bWJlciIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxMaW5lTnVtYmVyU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRp
bWVTZXQ+JiBzZXRUaW1lKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBUaW1lU2V0KSwgcHJvcGVydHlfdGltZV9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInRpbWUiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8VGltZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBIaXRDb3VudFNldD4mIHNldEhpdENvdW50KGludCB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBIaXRDb3VudFNldCksIHByb3Bl
cnR5X2hpdENvdW50X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJl
cigiaGl0Q291bnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SGl0Q291
bnRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWF0Y2hDb3VudFNl
dD4mIHNldE1hdGNoQ291bnQoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIE1hdGNoQ291bnRTZXQpLCBwcm9wZXJ0eV9tYXRjaENvdW50X2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigibWF0Y2hDb3VudCIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNYXRjaENvdW50U2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFNlbGVjdG9yUHJvZmlsZUVudHJ5PiYg
KCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxk
c1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxSZWZQdHI8U2VsZWN0b3JQcm9maWxlRW50cnk+Kj4oJm1fcmVzdWx0KTsKICAgICAg
ICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8U2VsZWN0b3JQcm9maWxlRW50cnk+ICgp
CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFNlbGVjdG9yUHJvZmlsZUVudHJ5
PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0
cnVjdG9yOgogICAgICogUmVmUHRyPFNlbGVjdG9yUHJvZmlsZUVudHJ5PiByZXN1bHQgPSBTZWxl
Y3RvclByb2ZpbGVFbnRyeTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U2VsZWN0b3IoLi4uKQog
ICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICogICAgIC5zZXRMaW5lTnVtYmVyKC4uLikKICAg
ICAqICAgICAuc2V0VGltZSguLi4pCiAgICAgKiAgICAgLnNldEhpdENvdW50KC4uLikKICAgICAq
ICAgICAuc2V0TWF0Y2hDb3VudCguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0Zp
ZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4oYWRvcHRSZWYobmV3IFNlbGVjdG9yUHJvZmlsZUVudHJ5KCkpKTsKICAgIH0KfTsKCmNsYXNz
IFNlbGVjdG9yUHJvZmlsZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBl
bnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgVG90YWxUaW1lU2V0ID0gMSA8
PCAwLAogICAgICAgIERhdGFTZXQgPSAxIDw8IDEsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFRv
dGFsVGltZVNldCB8IERhdGFTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAg
IGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxTZWxlY3RvclByb2ZpbGU+IHB0cikKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2Ny
ZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAg
ICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFNlbGVjdG9yUHJvZmlsZTsKICAgIHB1YmxpYzoK
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRvdGFsVGltZVNldD4mIHNldFRvdGFsVGltZShkb3Vi
bGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
VG90YWxUaW1lU2V0KSwgcHJvcGVydHlfdG90YWxUaW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldE51bWJlcigidG90YWxUaW1lIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFRvdGFsVGltZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBEYXRhU2V0PiYgc2V0RGF0YShQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBEYXRh
U2V0KSwgcHJvcGVydHlfZGF0YV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRBcnJheSgiZGF0YSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxEYXRh
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFNlbGVjdG9yUHJvZmls
ZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxG
aWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8UmVmUHRyPFNlbGVjdG9yUHJvZmlsZT4qPigmbV9yZXN1bHQpOwogICAgICAg
IH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxTZWxlY3RvclByb2ZpbGU+ICgpCiAgICAg
ICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFNlbGVjdG9yUHJvZmlsZT4oKnRoaXMpOwog
ICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAg
ICAqIFJlZlB0cjxTZWxlY3RvclByb2ZpbGU+IHJlc3VsdCA9IFNlbGVjdG9yUHJvZmlsZTo6Y3Jl
YXRlKCkKICAgICAqICAgICAuc2V0VG90YWxUaW1lKC4uLikKICAgICAqICAgICAuc2V0RGF0YSgu
Li4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAg
IHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFNlbGVj
dG9yUHJvZmlsZSgpKSk7CiAgICB9Cn07Cgp9IC8vIENTUwoKbmFtZXNwYWNlIFRpbWVsaW5lIHsK
LyogVGltZWxpbmUgcmVjb3JkIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZWNvcmRl
ZCBhY3Rpdml0eS4gKi8KY2xhc3MgVGltZWxpbmVFdmVudCA6IHB1YmxpYyBJbnNwZWN0b3JPYmpl
Y3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAg
VHlwZVNldCA9IDEgPDwgMCwKICAgICAgICBEYXRhU2V0ID0gMSA8PCAxLAogICAgICAgIEFsbEZp
ZWxkc1NldCA9IChUeXBlU2V0IHwgRGF0YVNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNU
QVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRl
cjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJu
ICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFRpbWVsaW5lRXZlbnQ+IHB0cikKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWls
ZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0
cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFRpbWVsaW5lRXZlbnQ7CiAgICBwdWJs
aWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFR5cGVTZXQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxUeXBlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IERhdGFTZXQ+
JiBzZXREYXRhKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBEYXRhU2V0KSwgcHJvcGVydHlfZGF0
YV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImRhdGEiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RGF0YVNldD4oKTsKICAgICAgICB9
CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxUaW1lbGluZUV2ZW50PiYgKCkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lz
X25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8
VGltZWxpbmVFdmVudD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3Ig
UGFzc1JlZlB0cjxUaW1lbGluZUV2ZW50PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJu
IFJlZlB0cjxUaW1lbGluZUV2ZW50PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgog
ICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFRpbWVsaW5lRXZlbnQ+
IHJlc3VsdCA9IFRpbWVsaW5lRXZlbnQ6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFR5cGUoLi4u
KQogICAgICogICAgIC5zZXREYXRhKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5v
RmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRz
U2V0PihhZG9wdFJlZihuZXcgVGltZWxpbmVFdmVudCgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRD
aGlsZHJlbihQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgIHsKICAgICAgICB0
aGlzLT5zZXRBcnJheSgiY2hpbGRyZW4iLCB2YWx1ZSk7CiAgICB9Cn07Cgp9IC8vIFRpbWVsaW5l
CgojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCm5hbWVzcGFjZSBEZWJ1Z2dlciB7Ci8q
IEJyZWFrcG9pbnQgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJpbmcgQnJlYWtwb2ludElkOwoK
LyogVW5pcXVlIHNjcmlwdCBpZGVudGlmaWVyLiAqLwp0eXBlZGVmIFN0cmluZyBTY3JpcHRJZDsK
Ci8qIENhbGwgZnJhbWUgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJpbmcgQ2FsbEZyYW1lSWQ7
CgovKiBMb2NhdGlvbiBpbiB0aGUgc291cmNlIGNvZGUuICovCmNsYXNzIExvY2F0aW9uIDogcHVi
bGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRz
U2V0ID0gMCwKICAgICAgICBTY3JpcHRJZFNldCA9IDEgPDwgMCwKICAgICAgICBMaW5lTnVtYmVy
U2V0ID0gMSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChTY3JpcHRJZFNldCB8IExpbmVO
dW1iZXJTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxk
ZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3Vs
dDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2Fz
dFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxC
dWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIo
UGFzc1JlZlB0cjxMb2NhdGlvbj4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9z
dGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmll
bmQgY2xhc3MgTG9jYXRpb247CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBT
Y3JpcHRJZFNldD4mIHNldFNjcmlwdElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU2NyaXB0SWRTZXQpLCBwcm9wZXJ0
eV9zY3JpcHRJZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
InNjcmlwdElkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNjcmlwdElk
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExpbmVOdW1iZXJTZXQ+
JiBzZXRMaW5lTnVtYmVyKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBMaW5lTnVtYmVyU2V0KSwgcHJvcGVydHlfbGluZU51bWJlcl9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImxpbmVOdW1iZXIiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TGluZU51bWJlclNldD4oKTsKICAg
ICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxMb2NhdGlvbj4mICgpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9p
c19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRy
PExvY2F0aW9uPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNz
UmVmUHRyPExvY2F0aW9uPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxM
b2NhdGlvbj4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRp
YyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxMb2NhdGlvbj4gcmVzdWx0ID0gTG9jYXRpb246
OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFNjcmlwdElkKC4uLikKICAgICAqICAgICAuc2V0TGlu
ZU51bWJlciguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3Jl
YXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYo
bmV3IExvY2F0aW9uKCkpKTsKICAgIH0KCiAgICB2b2lkIHNldENvbHVtbk51bWJlcihpbnQgdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0TnVtYmVyKCJjb2x1bW5OdW1iZXIiLCB2YWx1ZSk7
CiAgICB9Cn07CgovKiBKYXZhU2NyaXB0IGNhbGwgZnJhbWUuIEFycmF5IG9mIGNhbGwgZnJhbWVz
IGZvcm0gdGhlIGNhbGwgc3RhY2suICovCmNsYXNzIENhbGxGcmFtZSA6IHB1YmxpYyBJbnNwZWN0
b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAg
ICAgICAgQ2FsbEZyYW1lSWRTZXQgPSAxIDw8IDAsCiAgICAgICAgRnVuY3Rpb25OYW1lU2V0ID0g
MSA8PCAxLAogICAgICAgIExvY2F0aW9uU2V0ID0gMSA8PCAyLAogICAgICAgIFNjb3BlQ2hhaW5T
ZXQgPSAxIDw8IDMsCiAgICAgICAgVGhpc1NldCA9IDEgPDwgNCwKICAgICAgICBBbGxGaWVsZHNT
ZXQgPSAoQ2FsbEZyYW1lSWRTZXQgfCBGdW5jdGlvbk5hbWVTZXQgfCBMb2NhdGlvblNldCB8IFNj
b3BlQ2hhaW5TZXQgfCBUaGlzU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAg
ICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRF
IHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q2FsbEZyYW1lPiBwdHIpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVk
X2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAg
fQogICAgICAgIGZyaWVuZCBjbGFzcyBDYWxsRnJhbWU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBDYWxsRnJhbWVJZFNldD4mIHNldENhbGxGcmFtZUlkKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
Q2FsbEZyYW1lSWRTZXQpLCBwcm9wZXJ0eV9jYWxsRnJhbWVJZF9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImNhbGxGcmFtZUlkIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPENhbGxGcmFtZUlkU2V0PigpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IEZ1bmN0aW9uTmFtZVNldD4mIHNldEZ1bmN0aW9uTmFtZShjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIEZ1bmN0aW9uTmFtZVNldCksIHByb3BlcnR5X2Z1bmN0aW9uTmFtZV9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImZ1bmN0aW9uTmFtZSIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxGdW5jdGlvbk5hbWVTZXQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTG9jYXRpb25TZXQ+JiBzZXRMb2NhdGlvbigv
KlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4qLyBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgTG9jYXRpb25TZXQpLCBwcm9wZXJ0eV9sb2NhdGlvbl9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImxvY2F0aW9uIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPExvY2F0aW9uU2V0PigpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFNjb3BlQ2hhaW5TZXQ+JiBzZXRTY29wZUNoYWluKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIFNjb3BlQ2hhaW5TZXQpLCBwcm9wZXJ0eV9zY29wZUNoYWluX2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJzY29wZUNoYWluIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNjb3BlQ2hhaW5TZXQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVGhpc1NldD4mIHNldFRoaXMoLypQYXNz
UmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+Ki8gUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIFRoaXNTZXQpLCBwcm9wZXJ0eV90aGlzX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgidGhpcyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxUaGlzU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVm
UHRyPENhbGxGcmFtZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENhbGxGcmFtZT4qPigmbV9yZXN1bHQpOwog
ICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDYWxsRnJhbWU+ICgpCiAgICAg
ICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENhbGxGcmFtZT4oKnRoaXMpOwogICAgICAg
IH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJl
ZlB0cjxDYWxsRnJhbWU+IHJlc3VsdCA9IENhbGxGcmFtZTo6Y3JlYXRlKCkKICAgICAqICAgICAu
c2V0Q2FsbEZyYW1lSWQoLi4uKQogICAgICogICAgIC5zZXRGdW5jdGlvbk5hbWUoLi4uKQogICAg
ICogICAgIC5zZXRMb2NhdGlvbiguLi4pCiAgICAgKiAgICAgLnNldFNjb3BlQ2hhaW4oLi4uKQog
ICAgICogICAgIC5zZXRUaGlzKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmll
bGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0
PihhZG9wdFJlZihuZXcgQ2FsbEZyYW1lKCkpKTsKICAgIH0KfTsKCi8qIFNjb3BlIGRlc2NyaXB0
aW9uLiAqLwpjbGFzcyBTY29wZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAg
ICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIFNj
b3BlLgogICAgc3RydWN0IFR5cGUgewogICAgICAgIGVudW0gRW51bSB7CiAgICAgICAgICAgIEds
b2JhbCA9IDUxLAogICAgICAgICAgICBMb2NhbCA9IDUyLAogICAgICAgICAgICBXaXRoID0gNTMs
CiAgICAgICAgICAgIENsb3N1cmUgPSA1NCwKICAgICAgICAgICAgQ2F0Y2ggPSA1NSwKICAgICAg
ICB9OwogICAgfTsgLy8gc3RydWN0IFR5cGUKCiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1Nl
dCA9IDAsCiAgICAgICAgVHlwZVNldCA9IDEgPDwgMCwKICAgICAgICBPYmplY3RTZXQgPSAxIDw8
IDEsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFR5cGVTZXQgfCBPYmplY3RTZXQpCiAgICB9OwoK
ICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToK
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxh
dGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxTY29wZT4g
cHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVs
ZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1f
cmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgU2NvcGU7CiAgICBw
dWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShUeXBlOjpF
bnVtIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFR5cGVTZXQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygidHlwZSIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHlwZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR5cGVTZXQpLCBwcm9w
ZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
dHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBlU2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE9iamVjdFNldD4mIHNldE9iamVjdCgv
KlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4qLyBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgT2JqZWN0U2V0KSwgcHJvcGVydHlfb2JqZWN0X2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgib2JqZWN0IiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9iamVjdFNldD4oKTsKICAgICAgICB9CgogICAgICAg
IG9wZXJhdG9yIFJlZlB0cjxTY29wZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFNjb3BlPio+KCZtX3Jlc3Vs
dCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFNjb3BlPiAoKQogICAg
ICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxTY29wZT4oKnRoaXMpOwogICAgICAgIH0K
ICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0
cjxTY29wZT4gcmVzdWx0ID0gU2NvcGU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFR5cGUoLi4u
KQogICAgICogICAgIC5zZXRPYmplY3QoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8
Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+KGFkb3B0UmVmKG5ldyBTY29wZSgpKSk7CiAgICB9Cn07Cgp9IC8vIERlYnVnZ2VyCgoj
ZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiNpZiBFTkFCTEUoSkFWQVNDUklQ
VF9ERUJVR0dFUikKbmFtZXNwYWNlIERPTURlYnVnZ2VyIHsKLyogRE9NIGJyZWFrcG9pbnQgdHlw
ZS4gKi8Kc3RydWN0IERPTUJyZWFrcG9pbnRUeXBlIHsKICAgIGVudW0gRW51bSB7CiAgICAgICAg
U3VidHJlZV9tb2RpZmllZCA9IDU2LAogICAgICAgIEF0dHJpYnV0ZV9tb2RpZmllZCA9IDU3LAog
ICAgICAgIE5vZGVfcmVtb3ZlZCA9IDU4LAogICAgfTsKfTsgLy8gc3RydWN0IERPTUJyZWFrcG9p
bnRUeXBlCgp9IC8vIERPTURlYnVnZ2VyCgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKbmFtZXNwYWNlIFByb2ZpbGVy
IHsKfSAvLyBQcm9maWxlcgoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoK
fSAvLyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIKCiNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQoK
Y2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQgewpwdWJsaWM6CiAgICBJbnNwZWN0b3JGcm9udGVuZChJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqKTsKCgogICAgY2xhc3MgSW5zcGVjdG9yIHsKICAgIHB1
YmxpYzoKICAgICAgICBJbnNwZWN0b3IoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGV2YWx1YXRlRm9yVGVzdEluRnJvbnRl
bmQoaW50IHRlc3RDYWxsSWQsIGNvbnN0IFN0cmluZyYgc2NyaXB0KTsKICAgICAgICB2b2lkIGlu
c3BlY3QoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+Ki8g
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG9iamVjdCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IGhpbnRzKTsKICAgICAgICB2b2lkIGRpZENyZWF0ZVdvcmtlcihpbnQgaWQsIGNvbnN0
IFN0cmluZyYgdXJsLCBib29sIGlzU2hhcmVkKTsKICAgICAgICB2b2lkIGRpZERlc3Ryb3lXb3Jr
ZXIoaW50IGlkKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAg
IEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkg
eyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAg
ICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsK
ICAgIH07CgogICAgSW5zcGVjdG9yKiBpbnNwZWN0b3IoKSB7IHJldHVybiAmbV9pbnNwZWN0b3I7
IH0KCiAgICBjbGFzcyBNZW1vcnkgewogICAgcHVibGljOgogICAgICAgIE1lbW9yeShJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZv
aWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0g
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBNZW1vcnkqIG1l
bW9yeSgpIHsgcmV0dXJuICZtX21lbW9yeTsgfQoKICAgIGNsYXNzIFBhZ2UgewogICAgcHVibGlj
OgogICAgICAgIFBhZ2UoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKSB7IH0KICAgICAgICB2b2lkIGRvbUNvbnRlbnRFdmVudEZpcmVkKGRvdWJsZSB0aW1l
c3RhbXApOwogICAgICAgIHZvaWQgbG9hZEV2ZW50RmlyZWQoZG91YmxlIHRpbWVzdGFtcCk7CiAg
ICAgICAgdm9pZCBmcmFtZU5hdmlnYXRlZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlBhZ2U6
OkZyYW1lPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBmcmFtZSk7CiAgICAgICAgdm9p
ZCBmcmFtZURldGFjaGVkKGNvbnN0IFN0cmluZyYgZnJhbWVJZCk7CiAgICAgICAgdm9pZCBzZXRJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0
b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdl
dEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIFBhZ2UqIHBhZ2UoKSB7IHJl
dHVybiAmbV9wYWdlOyB9CgogICAgY2xhc3MgUnVudGltZSB7CiAgICBwdWJsaWM6CiAgICAgICAg
UnVudGltZShJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwp
IHsgfQogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVy
biBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsK
CiAgICBSdW50aW1lKiBydW50aW1lKCkgeyByZXR1cm4gJm1fcnVudGltZTsgfQoKICAgIGNsYXNz
IENvbnNvbGUgewogICAgcHVibGljOgogICAgICAgIENvbnNvbGUoSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIG1lc3NhZ2VB
ZGRlZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OkNvbnNvbGVNZXNzYWdlPiov
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKTsKICAgICAgICB2b2lkIG1lc3Nh
Z2VSZXBlYXRDb3VudFVwZGF0ZWQoaW50IGNvdW50KTsKICAgICAgICB2b2lkIG1lc3NhZ2VzQ2xl
YXJlZCgpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJl
dHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAg
fTsKCiAgICBDb25zb2xlKiBjb25zb2xlKCkgeyByZXR1cm4gJm1fY29uc29sZTsgfQoKICAgIGNs
YXNzIE5ldHdvcmsgewogICAgcHVibGljOgogICAgICAgIE5ldHdvcmsoSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIHJlcXVl
c3RXaWxsQmVTZW50KGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIGZyYW1l
SWQsIGNvbnN0IFN0cmluZyYgbG9hZGVySWQsIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIC8q
UGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdD4qLyBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVxdWVzdCwgZG91YmxlIHRpbWVzdGFtcCwgLypQYXNzUmVmUHRyPFR5
cGVCdWlsZGVyOjpOZXR3b3JrOjpJbml0aWF0b3I+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGluaXRpYXRvciwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gc3RhY2tUcmFjZSwgLypQ
YXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXNwb25zZT4qLyBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gcmVkaXJlY3RSZXNwb25zZSk7CiAgICAgICAgdm9pZCByZXF1ZXN0U2Vy
dmVkRnJvbUNhY2hlKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkKTsKICAgICAgICB2b2lkIHJlc3Bv
bnNlUmVjZWl2ZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgZnJhbWVJ
ZCwgY29uc3QgU3RyaW5nJiBsb2FkZXJJZCwgZG91YmxlIHRpbWVzdGFtcCwgLypUeXBlQnVpbGRl
cjo6UGFnZTo6UmVzb3VyY2VUeXBlOjpFbnVtKi8gY29uc3QgU3RyaW5nJiB0eXBlLCAvKlBhc3NS
ZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlc3BvbnNlPiovIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiByZXNwb25zZSk7CiAgICAgICAgdm9pZCBkYXRhUmVjZWl2ZWQoY29uc3QgU3Ry
aW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIGludCBkYXRhTGVuZ3RoLCBpbnQgZW5j
b2RlZERhdGFMZW5ndGgpOwogICAgICAgIHZvaWQgbG9hZGluZ0ZpbmlzaGVkKGNvbnN0IFN0cmlu
ZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wKTsKICAgICAgICB2b2lkIGxvYWRpbmdGYWls
ZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIGNvbnN0IFN0cmlu
ZyYgZXJyb3JUZXh0LCBjb25zdCBib29sKiBjb25zdCBjYW5jZWxlZCk7CiAgICAgICAgdm9pZCBy
ZXF1ZXN0U2VydmVkRnJvbU1lbW9yeUNhY2hlKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25z
dCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgbG9hZGVySWQsIGNvbnN0IFN0cmluZyYg
ZG9jdW1lbnRVUkwsIGRvdWJsZSB0aW1lc3RhbXAsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
TmV0d29yazo6SW5pdGlhdG9yPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbml0aWF0
b3IsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6Q2FjaGVkUmVzb3VyY2U+Ki8g
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc291cmNlKTsKICAgICAgICB2b2lkIHdlYlNv
Y2tldFdpbGxTZW5kSGFuZHNoYWtlUmVxdWVzdChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91
YmxlIHRpbWVzdGFtcCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpXZWJTb2Nr
ZXRSZXF1ZXN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXF1ZXN0KTsKICAgICAg
ICB2b2lkIHdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlUmVjZWl2ZWQoY29uc3QgU3RyaW5nJiBy
ZXF1ZXN0SWQsIGRvdWJsZSB0aW1lc3RhbXAsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0
d29yazo6V2ViU29ja2V0UmVzcG9uc2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3BvbnNlKTsKICAgICAgICB2b2lkIHdlYlNvY2tldENyZWF0ZWQoY29uc3QgU3RyaW5nJiByZXF1
ZXN0SWQsIGNvbnN0IFN0cmluZyYgdXJsKTsKICAgICAgICB2b2lkIHdlYlNvY2tldENsb3NlZChj
b25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCk7CiAgICAgICAgdm9pZCBz
ZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIE5ldHdvcmsqIG5ldHdv
cmsoKSB7IHJldHVybiAmbV9uZXR3b3JrOyB9CgojaWYgRU5BQkxFKFNRTF9EQVRBQkFTRSkKICAg
IGNsYXNzIERhdGFiYXNlIHsKICAgIHB1YmxpYzoKICAgICAgICBEYXRhYmFzZShJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQg
YWRkRGF0YWJhc2UoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEYXRhYmFzZTo6RGF0YWJhc2U+
Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGRhdGFiYXNlKTsKICAgICAgICB2b2lkIHNx
bFRyYW5zYWN0aW9uU3VjY2VlZGVkKGludCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBjb2x1bW5OYW1lcywgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWVz
KTsKICAgICAgICB2b2lkIHNxbFRyYW5zYWN0aW9uRmFpbGVkKGludCB0cmFuc2FjdGlvbklkLCBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc3FsRXJyb3IpOwogICAgICAgIHZvaWQgc2V0SW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBEYXRhYmFzZSogZGF0YWJhc2Uo
KSB7IHJldHVybiAmbV9kYXRhYmFzZTsgfQoKI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0Up
CiAgICBjbGFzcyBET01TdG9yYWdlIHsKICAgIHB1YmxpYzoKICAgICAgICBET01TdG9yYWdlKElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAg
ICAgdm9pZCBhZGRET01TdG9yYWdlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NU3RvcmFn
ZTo6RW50cnk+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHN0b3JhZ2UpOwogICAgICAg
IHZvaWQgdXBkYXRlRE9NU3RvcmFnZShpbnQgc3RvcmFnZUlkKTsKICAgICAgICB2b2lkIHNldElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgRE9NU3RvcmFnZSogZG9tc3Rv
cmFnZSgpIHsgcmV0dXJuICZtX2RvbXN0b3JhZ2U7IH0KCiAgICBjbGFzcyBBcHBsaWNhdGlvbkNh
Y2hlIHsKICAgIHB1YmxpYzoKICAgICAgICBBcHBsaWNhdGlvbkNhY2hlKEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBhcHBs
aWNhdGlvbkNhY2hlU3RhdHVzVXBkYXRlZChjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0
cmluZyYgbWFuaWZlc3RVUkwsIGludCBzdGF0dXMpOwogICAgICAgIHZvaWQgbmV0d29ya1N0YXRl
VXBkYXRlZChib29sIGlzTm93T25saW5lKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAg
IHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgQXBwbGljYXRpb25DYWNoZSogYXBwbGljYXRpb25j
YWNoZSgpIHsgcmV0dXJuICZtX2FwcGxpY2F0aW9uY2FjaGU7IH0KCiNpZiBFTkFCTEUoRklMRV9T
WVNURU0pCiAgICBjbGFzcyBGaWxlU3lzdGVtIHsKICAgIHB1YmxpYzoKICAgICAgICBGaWxlU3lz
dGVtKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9
CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAg
IEZpbGVTeXN0ZW0qIGZpbGVzeXN0ZW0oKSB7IHJldHVybiAmbV9maWxlc3lzdGVtOyB9CgojZW5k
aWYgLy8gRU5BQkxFKEZJTEVfU1lTVEVNKQogICAgY2xhc3MgRE9NIHsKICAgIHB1YmxpYzoKICAg
ICAgICBET00oSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSB7IH0KICAgICAgICB2b2lkIGRvY3VtZW50VXBkYXRlZCgpOwogICAgICAgIHZvaWQgc2V0Q2hp
bGROb2RlcyhpbnQgcGFyZW50SWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG5vZGVzKTsK
ICAgICAgICB2b2lkIGF0dHJpYnV0ZU1vZGlmaWVkKGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgICAgdm9pZCBhdHRyaWJ1dGVSZW1vdmVk
KGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgICAgdm9pZCBpbmxpbmVTdHls
ZUludmFsaWRhdGVkKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG5vZGVJZHMpOwogICAgICAg
IHZvaWQgY2hhcmFjdGVyRGF0YU1vZGlmaWVkKGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgY2hh
cmFjdGVyRGF0YSk7CiAgICAgICAgdm9pZCBjaGlsZE5vZGVDb3VudFVwZGF0ZWQoaW50IG5vZGVJ
ZCwgaW50IGNoaWxkTm9kZUNvdW50KTsKICAgICAgICB2b2lkIGNoaWxkTm9kZUluc2VydGVkKGlu
dCBwYXJlbnROb2RlSWQsIGludCBwcmV2aW91c05vZGVJZCwgLypQYXNzUmVmUHRyPFR5cGVCdWls
ZGVyOjpET006Ok5vZGU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG5vZGUpOwogICAg
ICAgIHZvaWQgY2hpbGROb2RlUmVtb3ZlZChpbnQgcGFyZW50Tm9kZUlkLCBpbnQgbm9kZUlkKTsK
ICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAg
RE9NKiBkb20oKSB7IHJldHVybiAmbV9kb207IH0KCiAgICBjbGFzcyBDU1MgewogICAgcHVibGlj
OgogICAgICAgIENTUyhJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwpIHsgfQogICAgICAgIHZvaWQgbWVkaWFRdWVyeVJlc3VsdENoYW5nZWQoKTsKICAgICAg
ICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgQ1NTKiBj
c3MoKSB7IHJldHVybiAmbV9jc3M7IH0KCiAgICBjbGFzcyBUaW1lbGluZSB7CiAgICBwdWJsaWM6
CiAgICAgICAgVGltZWxpbmUoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGV2ZW50UmVjb3JkZWQoLypQYXNzUmVmUHRyPFR5
cGVCdWlsZGVyOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVjb3JkKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQog
ICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6
CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbDsKICAgIH07CgogICAgVGltZWxpbmUqIHRpbWVsaW5lKCkgeyByZXR1cm4gJm1fdGltZWxp
bmU7IH0KCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgIGNsYXNzIERlYnVnZ2Vy
IHsKICAgIHB1YmxpYzoKICAgICAgICBEZWJ1Z2dlcihJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgZ2xvYmFsT2JqZWN0Q2xl
YXJlZCgpOwogICAgICAgIHZvaWQgc2NyaXB0UGFyc2VkKGNvbnN0IFN0cmluZyYgc2NyaXB0SWQs
IGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgc3RhcnRMaW5lLCBpbnQgc3RhcnRDb2x1bW4sIGludCBl
bmRMaW5lLCBpbnQgZW5kQ29sdW1uLCBjb25zdCBib29sKiBjb25zdCBpc0NvbnRlbnRTY3JpcHQs
IGNvbnN0IFN0cmluZyYgc291cmNlTWFwVVJMKTsKICAgICAgICB2b2lkIHNjcmlwdEZhaWxlZFRv
UGFyc2UoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgc2NyaXB0U291cmNlLCBpbnQg
c3RhcnRMaW5lLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiAg
ICAgICAgdm9pZCBicmVha3BvaW50UmVzb2x2ZWQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQs
IC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6OkxvY2F0aW9uPiovIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBsb2NhdGlvbik7CiAgICAgICAgLy8gTmFtZWQgYWZ0ZXIgcGFy
YW1ldGVyIG5hbWUgJ3JlYXNvbicgd2hpbGUgZ2VuZXJhdGluZyBldmVudCBwYXVzZWQuCiAgICAg
ICAgc3RydWN0IFJlYXNvbiB7CiAgICAgICAgICAgIGVudW0gRW51bSB7CiAgICAgICAgICAgICAg
ICBYSFIgPSA1LAogICAgICAgICAgICAgICAgRE9NID0gNTksCiAgICAgICAgICAgICAgICBFdmVu
dExpc3RlbmVyID0gNjAsCiAgICAgICAgICAgICAgICBFeGNlcHRpb24gPSA2MSwKICAgICAgICAg
ICAgICAgIE90aGVyID0gMjUsCiAgICAgICAgICAgIH07CiAgICAgICAgfTsgLy8gc3RydWN0IFJl
YXNvbgoKICAgICAgICB2b2lkIHBhdXNlZChQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBjYWxs
RnJhbWVzLCAvKlJlYXNvbjo6RW51bSovIGNvbnN0IFN0cmluZyYgcmVhc29uLCBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gZGF0YSk7CiAgICAgICAgdm9pZCByZXN1bWVkKCk7CiAgICAgICAg
dm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwg
PSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIERlYnVnZ2Vy
KiBkZWJ1Z2dlcigpIHsgcmV0dXJuICZtX2RlYnVnZ2VyOyB9CgojZW5kaWYgLy8gRU5BQkxFKEpB
VkFTQ1JJUFRfREVCVUdHRVIpCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgIGNs
YXNzIERPTURlYnVnZ2VyIHsKICAgIHB1YmxpYzoKICAgICAgICBET01EZWJ1Z2dlcihJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZv
aWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0g
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBET01EZWJ1Z2dl
ciogZG9tZGVidWdnZXIoKSB7IHJldHVybiAmbV9kb21kZWJ1Z2dlcjsgfQoKI2VuZGlmIC8vIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIp
CiAgICBjbGFzcyBQcm9maWxlciB7CiAgICBwdWJsaWM6CiAgICAgICAgUHJvZmlsZXIoSW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2
b2lkIGFkZFByb2ZpbGVIZWFkZXIoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGhlYWRlcik7
CiAgICAgICAgdm9pZCBhZGRIZWFwU25hcHNob3RDaHVuayhpbnQgdWlkLCBjb25zdCBTdHJpbmcm
IGNodW5rKTsKICAgICAgICB2b2lkIGZpbmlzaEhlYXBTbmFwc2hvdChpbnQgdWlkKTsKICAgICAg
ICB2b2lkIHNldFJlY29yZGluZ1Byb2ZpbGUoYm9vbCBpc1Byb2ZpbGluZyk7CiAgICAgICAgdm9p
ZCByZXNldFByb2ZpbGVzKCk7CiAgICAgICAgdm9pZCByZXBvcnRIZWFwU25hcHNob3RQcm9ncmVz
cyhpbnQgZG9uZSwgaW50IHRvdGFsKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHBy
aXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250
ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgUHJvZmlsZXIqIHByb2ZpbGVyKCkgeyByZXR1cm4gJm1f
cHJvZmlsZXI7IH0KCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKI2lmIEVO
QUJMRShXT1JLRVJTKQogICAgY2xhc3MgV29ya2VyIHsKICAgIHB1YmxpYzoKICAgICAgICBXb3Jr
ZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDog
bV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0K
ICAgICAgICB2b2lkIHdvcmtlckNyZWF0ZWQoaW50IHdvcmtlcklkLCBjb25zdCBTdHJpbmcmIHVy
bCwgYm9vbCBpbnNwZWN0b3JDb25uZWN0ZWQpOwogICAgICAgIHZvaWQgd29ya2VyVGVybWluYXRl
ZChpbnQgd29ya2VySWQpOwogICAgICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlRnJvbVdvcmtlcihp
bnQgd29ya2VySWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKTsKICAgICAg
ICB2b2lkIGRpc2Nvbm5lY3RlZEZyb21Xb3JrZXIoKTsKICAgICAgICB2b2lkIHNldEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7
IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgV29ya2VyKiB3b3JrZXIoKSB7IHJldHVy
biAmbV93b3JrZXI7IH0KCiNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKCnByaXZhdGU6CiAgICBJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAg
SW5zcGVjdG9yIG1faW5zcGVjdG9yOwogICAgTWVtb3J5IG1fbWVtb3J5OwogICAgUGFnZSBtX3Bh
Z2U7CiAgICBSdW50aW1lIG1fcnVudGltZTsKICAgIENvbnNvbGUgbV9jb25zb2xlOwogICAgTmV0
d29yayBtX25ldHdvcms7CiNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogICAgRGF0YWJhc2UgbV9k
YXRhYmFzZTsKI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCiAgICBET01TdG9yYWdlIG1f
ZG9tc3RvcmFnZTsKICAgIEFwcGxpY2F0aW9uQ2FjaGUgbV9hcHBsaWNhdGlvbmNhY2hlOwojaWYg
RU5BQkxFKEZJTEVfU1lTVEVNKQogICAgRmlsZVN5c3RlbSBtX2ZpbGVzeXN0ZW07CiNlbmRpZiAv
LyBFTkFCTEUoRklMRV9TWVNURU0pCiAgICBET00gbV9kb207CiAgICBDU1MgbV9jc3M7CiAgICBU
aW1lbGluZSBtX3RpbWVsaW5lOwojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICBE
ZWJ1Z2dlciBtX2RlYnVnZ2VyOwojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIp
CiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgIERPTURlYnVnZ2VyIG1fZG9tZGVi
dWdnZXI7CiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKI2lmIEVOQUJMRShK
QVZBU0NSSVBUX0RFQlVHR0VSKQogICAgUHJvZmlsZXIgbV9wcm9maWxlcjsKI2VuZGlmIC8vIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKFdPUktFUlMpCiAgICBXb3JrZXIg
bV93b3JrZXI7CiNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKfTsKCn0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckZyb250ZW5kX2gpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>122225</attachid>
            <date>2012-01-12 06:09:31 -0800</date>
            <delta_ts>2012-01-12 06:09:31 -0800</delta_ts>
            <desc>New InspectorFrontend.h</desc>
            <filename>InspectorFrontend.h</filename>
            <type>text/plain</type>
            <size>156151</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">Ly8gRmlsZSBpcyBnZW5lcmF0ZWQgYnkgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucHkKCi8vIENvcHlyaWdodCAoYykgMjAxMSBUaGUgQ2hyb21pdW0gQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgojaWZuZGVmIEluc3BlY3RvckZyb250ZW5kX2gKI2RlZmluZSBJbnNw
ZWN0b3JGcm9udGVuZF9oCgojaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiNpbmNsdWRlIDxQ
bGF0Zm9ybVN0cmluZy5oPgojaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KCm5hbWVzcGFjZSBX
ZWJDb3JlIHsKCmNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKCi8vIEJvdGggSW5zcGVj
dG9yT2JqZWN0IGFuZCBJbnNwZWN0b3JBcnJheSBtYXkgb3IgbWF5IG5vdCBiZSBkZWNsYXJlZCBh
dCB0aGlzIHBvaW50IGFzIGRlZmluZWQgYnkgRU5BQkxFRF9JTlNQRUNUT1IuCi8vIERvdWJsZS1j
aGVjayB3ZSBoYXZlIHRoZW0gYXQgbGVhc3QgYXMgZm9yd2FyZCBkZWNsYXJhdGlvbi4KY2xhc3Mg
SW5zcGVjdG9yQXJyYXk7CmNsYXNzIEluc3BlY3Rvck9iamVjdDsKCnR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwoKI2lmIEVOQUJMRShJTlNQRUNUT1IpCgpuYW1lc3BhY2UgVHlwZUJ1aWxkZXIg
ewovLyBGb3J3YXJkIGRlY2xhcmF0aW9ucy4KbmFtZXNwYWNlIENvbnNvbGUgewpjbGFzcyBTdGFj
a1RyYWNlOwp9IC8vIENvbnNvbGUKCm5hbWVzcGFjZSBDU1MgewpjbGFzcyBDU1NSdWxlOwpjbGFz
cyBTb3VyY2VSYW5nZTsKY2xhc3MgQ1NTU3R5bGU7CmNsYXNzIENTU1Byb3BlcnR5OwpjbGFzcyBD
U1NNZWRpYTsKfSAvLyBDU1MKCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKbmFtZXNw
YWNlIERlYnVnZ2VyIHsKY2xhc3MgTG9jYXRpb247CmNsYXNzIFNjb3BlOwp9IC8vIERlYnVnZ2Vy
CgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi8vIEVuZCBvZiBmb3J3YXJk
IGRlY2xhcmF0aW9ucy4KCgpTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpOwoK
bmFtZXNwYWNlIE1lbW9yeSB7Ci8qIE51bWJlciBvZiBub2RlcyB3aXRoIGdpdmVuIG5hbWUuICov
CmNsYXNzIE5vZGVDb3VudCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBl
bnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgTm9kZU5hbWVTZXQgPSAxIDw8
IDAsCiAgICAgICAgQ291bnRTZXQgPSAxIDw8IDEsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKE5v
ZGVOYW1lU2V0IHwgQ291bnRTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAg
IGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxOb2RlQ291bnQ+IHB0cikKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRf
aW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9
CiAgICAgICAgZnJpZW5kIGNsYXNzIE5vZGVDb3VudDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IE5vZGVOYW1lU2V0PiYgc2V0Tm9kZU5hbWUoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOb2RlTmFt
ZVNldCksIHByb3BlcnR5X25vZGVOYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygibm9kZU5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8Tm9kZU5hbWVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
Q291bnRTZXQ+JiBzZXRDb3VudChpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgQ291bnRTZXQpLCBwcm9wZXJ0eV9jb3VudF9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImNvdW50IiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvdW50U2V0PigpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUmVmUHRyPE5vZGVDb3VudD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPE5vZGVDb3VudD4qPigm
bV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxOb2RlQ291
bnQ+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPE5vZGVDb3VudD4oKnRo
aXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKICAgICAqIFJlZlB0cjxOb2RlQ291bnQ+IHJlc3VsdCA9IE5vZGVDb3VudDo6Y3JlYXRlKCkK
ICAgICAqICAgICAuc2V0Tm9kZU5hbWUoLi4uKQogICAgICogICAgIC5zZXRDb3VudCguLi4pOwog
ICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IE5vZGVDb3VudCgp
KSk7CiAgICB9Cn07CgovKiBOdW1iZXIgb2YgSlMgZXZlbnQgbGlzdGVuZXJzIGJ5IGV2ZW50IHR5
cGUuICovCmNsYXNzIExpc3RlbmVyQ291bnQgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVi
bGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFR5cGVTZXQg
PSAxIDw8IDAsCiAgICAgICAgQ291bnRTZXQgPSAxIDw8IDEsCiAgICAgICAgQWxsRmllbGRzU2V0
ID0gKFR5cGVTZXQgfCBDb3VudFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgog
ICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFU
RSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPExpc3RlbmVyQ291bnQ+IHB0cikKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2Ny
ZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAg
ICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIExpc3RlbmVyQ291bnQ7CiAgICBwdWJsaWM6Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShjb25zdCBTdHJpbmcmIHZh
bHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR5cGVT
ZXQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBl
U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvdW50U2V0PiYgc2V0
Q291bnQoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIENvdW50U2V0KSwgcHJvcGVydHlfY291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJjb3VudCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxDb3VudFNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0
cjxMaXN0ZW5lckNvdW50PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8TGlzdGVuZXJDb3VudD4qPigmbV9yZXN1
bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxMaXN0ZW5lckNvdW50
PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxMaXN0ZW5lckNvdW50Pigq
dGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVj
dG9yOgogICAgICogUmVmUHRyPExpc3RlbmVyQ291bnQ+IHJlc3VsdCA9IExpc3RlbmVyQ291bnQ6
OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFR5cGUoLi4uKQogICAgICogICAgIC5zZXRDb3VudCgu
Li4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAg
IHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IExpc3Rl
bmVyQ291bnQoKSkpOwogICAgfQp9OwoKY2xhc3MgRE9NR3JvdXAgOiBwdWJsaWMgSW5zcGVjdG9y
T2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnbm9kZUNv
dW50JyB3aGlsZSBnZW5lcmF0aW5nIERPTUdyb3VwLgogICAgY2xhc3MgTm9kZUNvdW50IDogcHVi
bGljIEluc3BlY3RvckFycmF5IHsKICAgIHByaXZhdGU6CiAgICAgICAgTm9kZUNvdW50KCkge30K
CiAgICBwdWJsaWM6CiAgICAgICAgdm9pZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRl
cjo6TWVtb3J5OjpOb2RlQ291bnQ+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1ZSk7CiAgICAgICAg
fQoKICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxOb2RlQ291bnQ+IGNyZWF0ZSgpIHsKICAgICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBOb2RlQ291bnQoKSk7CiAgICAgICAgfQogICAgfTsK
CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdsaXN0ZW5lckNvdW50JyB3aGlsZSBn
ZW5lcmF0aW5nIERPTUdyb3VwLgogICAgY2xhc3MgTGlzdGVuZXJDb3VudCA6IHB1YmxpYyBJbnNw
ZWN0b3JBcnJheSB7CiAgICBwcml2YXRlOgogICAgICAgIExpc3RlbmVyQ291bnQoKSB7fQoKICAg
IHB1YmxpYzoKICAgICAgICB2b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpN
ZW1vcnk6Okxpc3RlbmVyQ291bnQ+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1ZSk7CiAgICAgICAg
fQoKICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxMaXN0ZW5lckNvdW50PiBjcmVhdGUoKSB7CiAg
ICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGlzdGVuZXJDb3VudCgpKTsKICAgICAgICB9
CiAgICB9OwoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBTaXpl
U2V0ID0gMSA8PCAwLAogICAgICAgIFRpdGxlU2V0ID0gMSA8PCAxLAogICAgICAgIE5vZGVDb3Vu
dFNldCA9IDEgPDwgMiwKICAgICAgICBMaXN0ZW5lckNvdW50U2V0ID0gMSA8PCAzLAogICAgICAg
IEFsbEZpZWxkc1NldCA9IChTaXplU2V0IHwgVGl0bGVTZXQgfCBOb2RlQ291bnRTZXQgfCBMaXN0
ZW5lckNvdW50U2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBC
dWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9y
ZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4m
IGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyKFBhc3NSZWZQdHI8RE9NR3JvdXA+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2lu
aXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAg
ZnJpZW5kIGNsYXNzIERPTUdyb3VwOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgU2l6ZVNldD4mIHNldFNpemUoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFNpemVTZXQpLCBwcm9wZXJ0eV9zaXplX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic2l6ZSIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTaXplU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFRpdGxlU2V0PiYgc2V0VGl0bGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUaXRsZVNldCksIHBy
b3BlcnR5X3RpdGxlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
ZygidGl0bGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGl0bGVTZXQ+
KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm9kZUNvdW50U2V0PiYgc2V0
Tm9kZUNvdW50KC8qUGFzc1JlZlB0cjxOb2RlQ291bnQ+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgTm9kZUNvdW50U2V0KSwgcHJvcGVydHlfbm9kZUNvdW50X2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJub2RlQ291bnQiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8Tm9kZUNvdW50U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IExpc3RlbmVyQ291bnRTZXQ+JiBzZXRMaXN0ZW5lckNvdW50KC8qUGFzc1Jl
ZlB0cjxMaXN0ZW5lckNvdW50PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExpc3RlbmVyQ291
bnRTZXQpLCBwcm9wZXJ0eV9saXN0ZW5lckNvdW50X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldEFycmF5KCJsaXN0ZW5lckNvdW50IiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPExpc3RlbmVyQ291bnRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBv
cGVyYXRvciBSZWZQdHI8RE9NR3JvdXA+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAg
ICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxET01Hcm91cD4qPigmbV9y
ZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxET01Hcm91cD4g
KCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8RE9NR3JvdXA+KCp0aGlzKTsK
ICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAg
ICAgKiBSZWZQdHI8RE9NR3JvdXA+IHJlc3VsdCA9IERPTUdyb3VwOjpjcmVhdGUoKQogICAgICog
ICAgIC5zZXRTaXplKC4uLikKICAgICAqICAgICAuc2V0VGl0bGUoLi4uKQogICAgICogICAgIC5z
ZXROb2RlQ291bnQoLi4uKQogICAgICogICAgIC5zZXRMaXN0ZW5lckNvdW50KC4uLik7CiAgICAg
Ki8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAg
IHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgRE9NR3JvdXAoKSkpOwog
ICAgfQoKICAgIHZvaWQgc2V0RG9jdW1lbnRVUkkoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsK
ICAgICAgICB0aGlzLT5zZXRTdHJpbmcoImRvY3VtZW50VVJJIiwgdmFsdWUpOwogICAgfQp9OwoK
fSAvLyBNZW1vcnkKCm5hbWVzcGFjZSBQYWdlIHsKLyogUmVzb3VyY2UgdHlwZSBhcyBpdCB3YXMg
cGVyY2VpdmVkIGJ5IHRoZSByZW5kZXJpbmcgZW5naW5lLiAqLwpzdHJ1Y3QgUmVzb3VyY2VUeXBl
IHsKICAgIGVudW0gRW51bSB7CiAgICAgICAgRG9jdW1lbnQgPSAwLAogICAgICAgIFN0eWxlc2hl
ZXQgPSAxLAogICAgICAgIEltYWdlID0gMiwKICAgICAgICBGb250ID0gMywKICAgICAgICBTY3Jp
cHQgPSA0LAogICAgICAgIFhIUiA9IDUsCiAgICAgICAgV2ViU29ja2V0ID0gNiwKICAgICAgICBP
dGhlciA9IDcsCiAgICB9Owp9OyAvLyBzdHJ1Y3QgUmVzb3VyY2VUeXBlCgovKiBJbmZvcm1hdGlv
biBhYm91dCB0aGUgRnJhbWUgb24gdGhlIHBhZ2UuICovCmNsYXNzIEZyYW1lIDogcHVibGljIElu
c3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKICAgICAgICBJZFNldCA9IDEgPDwgMCwKICAgICAgICBMb2FkZXJJZFNldCA9IDEgPDwgMSwK
ICAgICAgICBVcmxTZXQgPSAxIDw8IDIsCiAgICAgICAgTWltZVR5cGVTZXQgPSAxIDw8IDMsCiAg
ICAgICAgQWxsRmllbGRzU2V0ID0gKElkU2V0IHwgTG9hZGVySWRTZXQgfCBVcmxTZXQgfCBNaW1l
VHlwZVNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRl
ciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0
OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQ
YXNzUmVmUHRyPEZyYW1lPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRl
KTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBj
bGFzcyBGcmFtZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IElkU2V0PiYg
c2V0SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBJZFNldCksIHByb3BlcnR5X2lkX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiaWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8SWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
TG9hZGVySWRTZXQ+JiBzZXRMb2FkZXJJZChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExvYWRlcklkU2V0KSwgcHJvcGVy
dHlfbG9hZGVySWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJsb2FkZXJJZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxMb2FkZXJJ
ZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBVcmxTZXQ+JiBzZXRV
cmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBVcmxTZXQpLCBwcm9wZXJ0eV91cmxfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8VXJsU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IE1pbWVUeXBlU2V0PiYgc2V0TWltZVR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNaW1lVHlwZVNldCksIHByb3Bl
cnR5X21pbWVUeXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
ZygibWltZVR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWltZVR5
cGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8RnJhbWU+JiAoKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0
LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PFJlZlB0cjxGcmFtZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0
b3IgUGFzc1JlZlB0cjxGcmFtZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQ
dHI8RnJhbWU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8RnJhbWU+IHJlc3VsdCA9IEZyYW1lOjpjcmVh
dGUoKQogICAgICogICAgIC5zZXRJZCguLi4pCiAgICAgKiAgICAgLnNldExvYWRlcklkKC4uLikK
ICAgICAqICAgICAuc2V0VXJsKC4uLikKICAgICAqICAgICAuc2V0TWltZVR5cGUoLi4uKTsKICAg
ICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAg
ICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBGcmFtZSgpKSk7CiAg
ICB9CgogICAgdm9pZCBzZXRQYXJlbnRJZChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAg
ICAgIHRoaXMtPnNldFN0cmluZygicGFyZW50SWQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBz
ZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5n
KCJuYW1lIiwgdmFsdWUpOwogICAgfQp9OwoKLyogSW5mb3JtYXRpb24gYWJvdXQgdGhlIEZyYW1l
IGhpZXJhcmNoeSBhbG9uZyB3aXRoIHRoZWlyIGNhY2hlZCByZXNvdXJjZXMuICovCmNsYXNzIEZy
YW1lUmVzb3VyY2VUcmVlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8v
IE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3Jlc291cmNlcycgd2hpbGUgZ2VuZXJhdGluZyBG
cmFtZVJlc291cmNlVHJlZS4KICAgIGNsYXNzIFJlc291cmNlcyA6IHB1YmxpYyBJbnNwZWN0b3JB
cnJheSB7CiAgICBwcml2YXRlOgogICAgICAgIFJlc291cmNlcygpIHt9CgogICAgcHVibGljOgog
ICAgICAgIGNsYXNzIEl0ZW0gOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKICAgICAgICBwdWJs
aWM6CiAgICAgICAgICAgIGVudW0gewogICAgICAgICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAog
ICAgICAgICAgICAgICAgVXJsU2V0ID0gMSA8PCAwLAogICAgICAgICAgICAgICAgVHlwZVNldCA9
IDEgPDwgMSwKICAgICAgICAgICAgICAgIE1pbWVUeXBlU2V0ID0gMSA8PCAyLAogICAgICAgICAg
ICAgICAgQWxsRmllbGRzU2V0ID0gKFVybFNldCB8IFR5cGVTZXQgfCBNaW1lVHlwZVNldCkKICAg
ICAgICAgICAgfTsKCiAgICAgICAgICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgICAgICAgICAg
Y2xhc3MgQnVpbGRlciB7CiAgICAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTxp
bnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVy
PFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICBCdWlsZGVyKFBhc3NSZWZQdHI8SXRlbT4gcHRyKQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICAgICAgICAgIG1fcmVzdWx0
ID0gcHRyOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZnJpZW5kIGNsYXNzIEl0
ZW07CiAgICAgICAgICAgIHB1YmxpYzoKICAgICAgICAKICAgICAgICAgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBVcmxTZXQ+JiBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVXJsU2V0
KSwgcHJvcGVydHlfdXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxVcmxTZXQ+KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgCiAgICAgICAgICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5cGUoVHlwZUJ1aWxkZXI6OlBhZ2U6
OlJlc291cmNlVHlwZTo6RW51bSB2YWx1ZSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5
cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8VHlwZVNldD4oKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAKICAg
ICAgICAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgCiAgICAgICAgICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWltZVR5cGVT
ZXQ+JiBzZXRNaW1lVHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNaW1lVHlwZVNldCks
IHByb3BlcnR5X21pbWVUeXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKCJtaW1lVHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPE1pbWVUeXBlU2V0PigpOwogICAgICAgICAgICAgICAgfQogICAgICAg
IAogICAgICAgICAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEl0ZW0+JiAoKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxk
c1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PFJlZlB0cjxJdGVtPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgICAgICAg
ICB9CgogICAgICAgICAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxJdGVtPiAoKQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWZQdHI8SXRlbT4oKnRoaXMp
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgLyoKICAgICAg
ICAgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAgKiBSZWZQdHI8SXRl
bT4gcmVzdWx0ID0gSXRlbTo6Y3JlYXRlKCkKICAgICAgICAgICAgICogICAgIC5zZXRVcmwoLi4u
KQogICAgICAgICAgICAgKiAgICAgLnNldFR5cGUoLi4uKQogICAgICAgICAgICAgKiAgICAgLnNl
dE1pbWVUeXBlKC4uLik7CiAgICAgICAgICAgICAqLwogICAgICAgICAgICBzdGF0aWMgQnVpbGRl
cjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBJdGVtKCkpKTsKICAgICAgICAg
ICAgfQogICAgICAgIH07CgogICAgICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8SXRlbT4q
LyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFJlc291cmNlcz4gY3JlYXRlKCkgewogICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFJlc291cmNlcygpKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8vIE5hbWVkIGFmdGVyIHBy
b3BlcnR5IG5hbWUgJ2NoaWxkRnJhbWVzJyB3aGlsZSBnZW5lcmF0aW5nIEZyYW1lUmVzb3VyY2VU
cmVlLgogICAgY2xhc3MgQ2hpbGRGcmFtZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAg
cHJpdmF0ZToKICAgICAgICBDaGlsZEZyYW1lcygpIHt9CgogICAgcHVibGljOgogICAgICAgIHZv
aWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3VyY2VU
cmVlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8Q2hpbGRGcmFtZXM+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBDaGlsZEZyYW1lcygpKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewog
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBGcmFtZVNldCA9IDEgPDwgMCwKICAgICAg
ICBSZXNvdXJjZXNTZXQgPSAxIDw8IDEsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKEZyYW1lU2V0
IHwgUmVzb3VyY2VzU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFz
cyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
bV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RF
UD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyKFBhc3NSZWZQdHI8RnJhbWVSZXNvdXJjZVRyZWU+IHB0cikKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0
ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAg
ICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEZyYW1lUmVzb3VyY2VUcmVlOwogICAgcHVibGljOgoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRnJhbWVTZXQ+JiBzZXRGcmFtZSgvKlBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBGcmFt
ZVNldCksIHByb3BlcnR5X2ZyYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE9iamVjdCgiZnJhbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
RnJhbWVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUmVzb3VyY2Vz
U2V0PiYgc2V0UmVzb3VyY2VzKC8qUGFzc1JlZlB0cjxSZXNvdXJjZXM+Ki8gUGFzc1JlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgUmVzb3VyY2VzU2V0KSwgcHJvcGVydHlfcmVzb3VyY2VzX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJyZXNvdXJjZXMiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UmVzb3VyY2VzU2V0PigpOwogICAgICAgIH0KCiAg
ICAgICAgb3BlcmF0b3IgUmVmUHRyPEZyYW1lUmVzb3VyY2VUcmVlPiYgKCkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lz
X25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8
RnJhbWVSZXNvdXJjZVRyZWU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJh
dG9yIFBhc3NSZWZQdHI8RnJhbWVSZXNvdXJjZVRyZWU+ICgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gUmVmUHRyPEZyYW1lUmVzb3VyY2VUcmVlPigqdGhpcyk7CiAgICAgICAgfQogICAg
fTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEZy
YW1lUmVzb3VyY2VUcmVlPiByZXN1bHQgPSBGcmFtZVJlc291cmNlVHJlZTo6Y3JlYXRlKCkKICAg
ICAqICAgICAuc2V0RnJhbWUoLi4uKQogICAgICogICAgIC5zZXRSZXNvdXJjZXMoLi4uKTsKICAg
ICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAg
ICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBGcmFtZVJlc291cmNl
VHJlZSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRDaGlsZEZyYW1lcygvKlBhc3NSZWZQdHI8Q2hp
bGRGcmFtZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICB7CiAgICAg
ICAgdGhpcy0+c2V0QXJyYXkoImNoaWxkRnJhbWVzIiwgdmFsdWUpOwogICAgfQp9OwoKLyogU2Vh
cmNoIG1hdGNoIGZvciByZXNvdXJjZS4gKi8KY2xhc3MgU2VhcmNoTWF0Y2ggOiBwdWJsaWMgSW5z
cGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAw
LAogICAgICAgIExpbmVOdW1iZXJTZXQgPSAxIDw8IDAsCiAgICAgICAgTGluZUNvbnRlbnRTZXQg
PSAxIDw8IDEsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKExpbmVOdW1iZXJTZXQgfCBMaW5lQ29u
dGVudFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRl
ciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0
OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQ
YXNzUmVmUHRyPFNlYXJjaE1hdGNoPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0
X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZy
aWVuZCBjbGFzcyBTZWFyY2hNYXRjaDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IExpbmVOdW1iZXJTZXQ+JiBzZXRMaW5lTnVtYmVyKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBMaW5lTnVtYmVyU2V0KSwgcHJv
cGVydHlfbGluZU51bWJlcl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRO
dW1iZXIoImxpbmVOdW1iZXIiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
TGluZU51bWJlclNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBMaW5l
Q29udGVudFNldD4mIHNldExpbmVDb250ZW50KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTGluZUNvbnRlbnRTZXQpLCBw
cm9wZXJ0eV9saW5lQ29udGVudF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoImxpbmVDb250ZW50IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPExpbmVDb250ZW50U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRy
PFNlYXJjaE1hdGNoPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNU
QVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJl
dHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8U2VhcmNoTWF0Y2g+Kj4oJm1fcmVzdWx0KTsK
ICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8U2VhcmNoTWF0Y2g+ICgpCiAg
ICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFNlYXJjaE1hdGNoPigqdGhpcyk7CiAg
ICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAg
ICogUmVmUHRyPFNlYXJjaE1hdGNoPiByZXN1bHQgPSBTZWFyY2hNYXRjaDo6Y3JlYXRlKCkKICAg
ICAqICAgICAuc2V0TGluZU51bWJlciguLi4pCiAgICAgKiAgICAgLnNldExpbmVDb250ZW50KC4u
Lik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAg
ewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgU2VhcmNo
TWF0Y2goKSkpOwogICAgfQp9OwoKLyogU2VhcmNoIHJlc3VsdCBmb3IgcmVzb3VyY2UuICovCmNs
YXNzIFNlYXJjaFJlc3VsdCA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBl
bnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgVXJsU2V0ID0gMSA8PCAwLAog
ICAgICAgIEZyYW1lSWRTZXQgPSAxIDw8IDEsCiAgICAgICAgTWF0Y2hlc0NvdW50U2V0ID0gMSA8
PCAyLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChVcmxTZXQgfCBGcmFtZUlkU2V0IHwgTWF0Y2hl
c0NvdW50U2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWls
ZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1
bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNh
c3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
KFBhc3NSZWZQdHI8U2VhcmNoUmVzdWx0PiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9p
bml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAg
IGZyaWVuZCBjbGFzcyBTZWFyY2hSZXN1bHQ7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBVcmxTZXQ+JiBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVcmxTZXQpLCBwcm9wZXJ0eV91cmxf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ1cmwiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VXJsU2V0PigpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IEZyYW1lSWRTZXQ+JiBzZXRGcmFtZUlkKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
RnJhbWVJZFNldCksIHByb3BlcnR5X2ZyYW1lSWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKCJmcmFtZUlkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPEZyYW1lSWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgTWF0Y2hlc0NvdW50U2V0PiYgc2V0TWF0Y2hlc0NvdW50KGRvdWJsZSB2YWx1ZSkKICAgICAg
ICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNYXRjaGVzQ291bnRTZXQp
LCBwcm9wZXJ0eV9tYXRjaGVzQ291bnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0TnVtYmVyKCJtYXRjaGVzQ291bnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8TWF0Y2hlc0NvdW50U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3Ig
UmVmUHRyPFNlYXJjaFJlc3VsdD4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFNlYXJjaFJlc3VsdD4qPigmbV9y
ZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxTZWFyY2hSZXN1
bHQ+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPFNlYXJjaFJlc3VsdD4o
KnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1
Y3RvcjoKICAgICAqIFJlZlB0cjxTZWFyY2hSZXN1bHQ+IHJlc3VsdCA9IFNlYXJjaFJlc3VsdDo6
Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VXJsKC4uLikKICAgICAqICAgICAuc2V0RnJhbWVJZCgu
Li4pCiAgICAgKiAgICAgLnNldE1hdGNoZXNDb3VudCguLi4pOwogICAgICovCiAgICBzdGF0aWMg
QnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRl
cjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFNlYXJjaFJlc3VsdCgpKSk7CiAgICB9Cn07Cgov
KiBDb29raWUgb2JqZWN0ICovCmNsYXNzIENvb2tpZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qg
ewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgTmFt
ZVNldCA9IDEgPDwgMCwKICAgICAgICBWYWx1ZVNldCA9IDEgPDwgMSwKICAgICAgICBEb21haW5T
ZXQgPSAxIDw8IDIsCiAgICAgICAgUGF0aFNldCA9IDEgPDwgMywKICAgICAgICBFeHBpcmVzU2V0
ID0gMSA8PCA0LAogICAgICAgIFNpemVTZXQgPSAxIDw8IDUsCiAgICAgICAgSHR0cE9ubHlTZXQg
PSAxIDw8IDYsCiAgICAgICAgU2VjdXJlU2V0ID0gMSA8PCA3LAogICAgICAgIFNlc3Npb25TZXQg
PSAxIDw8IDgsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKE5hbWVTZXQgfCBWYWx1ZVNldCB8IERv
bWFpblNldCB8IFBhdGhTZXQgfCBFeHBpcmVzU2V0IHwgU2l6ZVNldCB8IEh0dHBPbmx5U2V0IHwg
U2VjdXJlU2V0IHwgU2Vzc2lvblNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgog
ICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFU
RSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENvb2tpZT4gcHRyKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9p
bl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0K
ICAgICAgICBmcmllbmQgY2xhc3MgQ29va2llOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgTmFtZVNldD4mIHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOYW1lU2V0KSwgcHJvcGVydHlf
bmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5hbWUi
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TmFtZVNldD4oKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZVNldD4mIHNldFZhbHVlKGNvbnN0IFN0
cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgVmFsdWVTZXQpLCBwcm9wZXJ0eV92YWx1ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoInZhbHVlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFZhbHVlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IERv
bWFpblNldD4mIHNldERvbWFpbihjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERvbWFpblNldCksIHByb3BlcnR5X2RvbWFp
bl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImRvbWFpbiIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxEb21haW5TZXQ+KCk7CiAgICAg
ICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUGF0aFNldD4mIHNldFBhdGgoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBQYXRoU2V0KSwgcHJvcGVydHlfcGF0aF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoInBhdGgiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8UGF0aFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFeHBpcmVz
U2V0PiYgc2V0RXhwaXJlcyhpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgRXhwaXJlc1NldCksIHByb3BlcnR5X2V4cGlyZXNfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJleHBpcmVzIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEV4cGlyZXNTZXQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgU2l6ZVNldD4mIHNldFNpemUoaW50IHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNpemVTZXQpLCBwcm9wZXJ0
eV9zaXplX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic2l6
ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTaXplU2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEh0dHBPbmx5U2V0PiYgc2V0SHR0cE9ubHko
Ym9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBIdHRwT25seVNldCksIHByb3BlcnR5X2h0dHBPbmx5X2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImh0dHBPbmx5IiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPEh0dHBPbmx5U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IFNlY3VyZVNldD4mIHNldFNlY3VyZShib29sIHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNlY3VyZVNldCksIHByb3BlcnR5X3Nl
Y3VyZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29sZWFuKCJzZWN1
cmUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U2VjdXJlU2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNlc3Npb25TZXQ+JiBzZXRTZXNzaW9u
KGJvb2wgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgU2Vzc2lvblNldCksIHByb3BlcnR5X3Nlc3Npb25fYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigic2Vzc2lvbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxTZXNzaW9uU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3Ig
UmVmUHRyPENvb2tpZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENvb2tpZT4qPigmbV9yZXN1bHQpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDb29raWU+ICgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gUmVmUHRyPENvb2tpZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07
CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDb29r
aWU+IHJlc3VsdCA9IENvb2tpZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0TmFtZSguLi4pCiAg
ICAgKiAgICAgLnNldFZhbHVlKC4uLikKICAgICAqICAgICAuc2V0RG9tYWluKC4uLikKICAgICAq
ICAgICAuc2V0UGF0aCguLi4pCiAgICAgKiAgICAgLnNldEV4cGlyZXMoLi4uKQogICAgICogICAg
IC5zZXRTaXplKC4uLikKICAgICAqICAgICAuc2V0SHR0cE9ubHkoLi4uKQogICAgICogICAgIC5z
ZXRTZWN1cmUoLi4uKQogICAgICogICAgIC5zZXRTZXNzaW9uKC4uLik7CiAgICAgKi8KICAgIHN0
YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBC
dWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgQ29va2llKCkpKTsKICAgIH0KfTsKCi8q
IFVuaXF1ZSBzY3JpcHQgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJpbmcgU2NyaXB0SWRlbnRp
ZmllcjsKCn0gLy8gUGFnZQoKbmFtZXNwYWNlIFJ1bnRpbWUgewovKiBVbmlxdWUgb2JqZWN0IGlk
ZW50aWZpZXIuICovCnR5cGVkZWYgU3RyaW5nIFJlbW90ZU9iamVjdElkOwoKLyogTWlycm9yIG9i
amVjdCByZWZlcmVuY2luZyBvcmlnaW5hbCBKYXZhU2NyaXB0IG9iamVjdC4gKi8KY2xhc3MgUmVt
b3RlT2JqZWN0IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVk
IGFmdGVyIHByb3BlcnR5IG5hbWUgJ3R5cGUnIHdoaWxlIGdlbmVyYXRpbmcgUmVtb3RlT2JqZWN0
LgogICAgc3RydWN0IFR5cGUgewogICAgICAgIGVudW0gRW51bSB7CiAgICAgICAgICAgIE9iamVj
dCA9IDgsCiAgICAgICAgICAgIEZ1bmN0aW9uID0gOSwKICAgICAgICAgICAgVW5kZWZpbmVkID0g
MTAsCiAgICAgICAgICAgIFN0cmluZyA9IDExLAogICAgICAgICAgICBOdW1iZXIgPSAxMiwKICAg
ICAgICAgICAgQm9vbGVhbiA9IDEzLAogICAgICAgIH07CiAgICB9OyAvLyBzdHJ1Y3QgVHlwZQoK
ICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3N1YnR5cGUnIHdoaWxlIGdlbmVyYXRp
bmcgUmVtb3RlT2JqZWN0LgogICAgc3RydWN0IFN1YnR5cGUgewogICAgICAgIGVudW0gRW51bSB7
CiAgICAgICAgICAgIEFycmF5ID0gMTQsCiAgICAgICAgICAgIE51bGwgPSAxNSwKICAgICAgICAg
ICAgTm9kZSA9IDE2LAogICAgICAgICAgICBSZWdleHAgPSAxNywKICAgICAgICAgICAgRGF0ZSA9
IDE4LAogICAgICAgIH07CiAgICB9OyAvLyBzdHJ1Y3QgU3VidHlwZQoKICAgIGVudW0gewogICAg
ICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBUeXBlU2V0ID0gMSA8PCAwLAogICAgICAgIEFs
bEZpZWxkc1NldCA9IChUeXBlU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAg
ICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRF
IHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8UmVtb3RlT2JqZWN0PiBwdHIpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVh
dGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAg
ICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBSZW1vdGVPYmplY3Q7CiAgICBwdWJsaWM6CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShUeXBlOjpFbnVtIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR5cGVTZXQpLCBw
cm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
ZygidHlwZSIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8VHlwZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBUeXBlU2V0PiYgc2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR5cGVTZXQpLCBwcm9wZXJ0eV90eXBlX2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBlU2V0PigpOwogICAgICAgIH0KCiAg
ICAgICAgb3BlcmF0b3IgUmVmUHRyPFJlbW90ZU9iamVjdD4mICgpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3Rf
cmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFJlbW90
ZU9iamVjdD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1Jl
ZlB0cjxSZW1vdGVPYmplY3Q+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRy
PFJlbW90ZU9iamVjdD4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5
bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxSZW1vdGVPYmplY3Q+IHJlc3VsdCA9
IFJlbW90ZU9iamVjdDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VHlwZSguLi4pOwogICAgICov
CiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICBy
ZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFJlbW90ZU9iamVjdCgpKSk7
CiAgICB9CgogICAgdm9pZCBzZXRTdWJ0eXBlKFN1YnR5cGU6OkVudW0gdmFsdWUpCiAgICB7CiAg
ICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzdWJ0eXBlIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFs
dWUpKTsKICAgIH0KCiAgICB2b2lkIHNldFN1YnR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAg
IHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInN1YnR5cGUiLCB2YWx1ZSk7CiAgICB9CgogICAg
dm9pZCBzZXRDbGFzc05hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlz
LT5zZXRTdHJpbmcoImNsYXNzTmFtZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFZhbHVl
KFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNl
dFZhbHVlKCJ2YWx1ZSIsIHZhbHVlKTsKICAgIH0KICAgIHVzaW5nIEluc3BlY3Rvck9iamVjdDo6
c2V0VmFsdWU7CgoKICAgIHZvaWQgc2V0RGVzY3JpcHRpb24oY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoImRlc2NyaXB0aW9uIiwgdmFsdWUpOwogICAg
fQoKICAgIHZvaWQgc2V0T2JqZWN0SWQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAg
ICB0aGlzLT5zZXRTdHJpbmcoIm9iamVjdElkIiwgdmFsdWUpOwogICAgfQp9OwoKLyogT2JqZWN0
IHByb3BlcnR5IGRlc2NyaXB0b3IuICovCmNsYXNzIFByb3BlcnR5RGVzY3JpcHRvciA6IHB1Ymxp
YyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1Nl
dCA9IDAsCiAgICAgICAgTmFtZVNldCA9IDEgPDwgMCwKICAgICAgICBXcml0YWJsZVNldCA9IDEg
PDwgMSwKICAgICAgICBDb25maWd1cmFibGVTZXQgPSAxIDw8IDIsCiAgICAgICAgRW51bWVyYWJs
ZVNldCA9IDEgPDwgMywKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTmFtZVNldCB8IFdyaXRhYmxl
U2V0IHwgQ29uZmlndXJhYmxlU2V0IHwgRW51bWVyYWJsZVNldCkKICAgIH07CgogICAgdGVtcGxh
dGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFByb3BlcnR5RGVzY3JpcHRv
cj4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9G
aWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAg
IG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgUHJvcGVydHlE
ZXNjcmlwdG9yOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTmFtZVNldD4m
IHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBOYW1lU2V0KSwgcHJvcGVydHlfbmFtZV9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8TmFtZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBXcml0YWJsZVNldD4mIHNldFdyaXRhYmxlKGJvb2wgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgV3JpdGFibGVTZXQpLCBwcm9w
ZXJ0eV93cml0YWJsZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRCb29s
ZWFuKCJ3cml0YWJsZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxXcml0
YWJsZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb25maWd1cmFi
bGVTZXQ+JiBzZXRDb25maWd1cmFibGUoYm9vbCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb25maWd1cmFibGVTZXQpLCBwcm9wZXJ0eV9jb25m
aWd1cmFibGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigi
Y29uZmlndXJhYmxlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvbmZp
Z3VyYWJsZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFbnVtZXJh
YmxlU2V0PiYgc2V0RW51bWVyYWJsZShib29sIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVudW1lcmFibGVTZXQpLCBwcm9wZXJ0eV9lbnVtZXJh
YmxlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImVudW1l
cmFibGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RW51bWVyYWJsZVNl
dD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxQcm9wZXJ0eURlc2NyaXB0
b3I+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxs
RmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PFJlZlB0cjxQcm9wZXJ0eURlc2NyaXB0b3I+Kj4oJm1fcmVzdWx0KTsKICAg
ICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8UHJvcGVydHlEZXNjcmlwdG9yPiAo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxQcm9wZXJ0eURlc2NyaXB0b3I+
KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3Ry
dWN0b3I6CiAgICAgKiBSZWZQdHI8UHJvcGVydHlEZXNjcmlwdG9yPiByZXN1bHQgPSBQcm9wZXJ0
eURlc2NyaXB0b3I6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldE5hbWUoLi4uKQogICAgICogICAg
IC5zZXRXcml0YWJsZSguLi4pCiAgICAgKiAgICAgLnNldENvbmZpZ3VyYWJsZSguLi4pCiAgICAg
KiAgICAgLnNldEVudW1lcmFibGUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNT
ZXQ+KGFkb3B0UmVmKG5ldyBQcm9wZXJ0eURlc2NyaXB0b3IoKSkpOwogICAgfQoKICAgIHZvaWQg
c2V0VmFsdWUoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMt
PnNldE9iamVjdCgidmFsdWUiLCB2YWx1ZSk7CiAgICB9CiAgICB1c2luZyBJbnNwZWN0b3JPYmpl
Y3Q6OnNldFZhbHVlOwoKCiAgICB2b2lkIHNldEdldCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6
OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJnZXQiLCB2YWx1ZSk7CiAgICB9Cgog
ICAgdm9pZCBzZXRTZXQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAg
IHRoaXMtPnNldE9iamVjdCgic2V0IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0V2FzVGhy
b3duKGJvb2wgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0Qm9vbGVhbigid2FzVGhyb3du
IiwgdmFsdWUpOwogICAgfQp9OwoKLyogUmVwcmVzZW50cyBmdW5jdGlvbiBjYWxsIGFyZ3VtZW50
LiBFaXRoZXIgcmVtb3RlIG9iamVjdCBpZCA8Y29kZT5vYmplY3RJZDwvY29kZT4gb3IgcHJpbWl0
aXZlIDxjb2RlPnZhbHVlPC9jb2RlPiBvciBuZWl0aGVyIG9mIChmb3IgdW5kZWZpbmVkKSB0aGVt
IHNob3VsZCBiZSBzcGVjaWZpZWQuICovCmNsYXNzIENhbGxBcmd1bWVudCA6IHB1YmxpYyBJbnNw
ZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAs
CiAgICAgICAgQWxsRmllbGRzU2V0ID0gMAogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+
CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNU
QVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q2FsbEFyZ3VtZW50PiBwdHIpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9j
cmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAg
ICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDYWxsQXJndW1lbnQ7CiAgICBwdWJsaWM6Cgog
ICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDYWxsQXJndW1lbnQ+JiAoKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDYWxs
QXJndW1lbnQ+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NS
ZWZQdHI8Q2FsbEFyZ3VtZW50PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0
cjxDYWxsQXJndW1lbnQ+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q2FsbEFyZ3VtZW50PiByZXN1bHQg
PSBDYWxsQXJndW1lbnQ6OmNyZWF0ZSgpOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0Zp
ZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1Nl
dD4oYWRvcHRSZWYobmV3IENhbGxBcmd1bWVudCgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRWYWx1
ZShQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5z
ZXRWYWx1ZSgidmFsdWUiLCB2YWx1ZSk7CiAgICB9CiAgICB1c2luZyBJbnNwZWN0b3JPYmplY3Q6
OnNldFZhbHVlOwoKCiAgICB2b2lkIHNldE9iamVjdElkKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRl
cjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2
YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoIm9iamVjdElkIiwgdmFsdWUpOwog
ICAgfQp9OwoKfSAvLyBSdW50aW1lCgpuYW1lc3BhY2UgQ29uc29sZSB7Ci8qIENvbnNvbGUgbWVz
c2FnZS4gKi8KY2xhc3MgQ29uc29sZU1lc3NhZ2UgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsK
cHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnc291cmNlJyB3aGlsZSBn
ZW5lcmF0aW5nIENvbnNvbGVNZXNzYWdlLgogICAgc3RydWN0IFNvdXJjZSB7CiAgICAgICAgZW51
bSBFbnVtIHsKICAgICAgICAgICAgSHRtbCA9IDE5LAogICAgICAgICAgICBXbWwgPSAyMCwKICAg
ICAgICAgICAgWG1sID0gMjEsCiAgICAgICAgICAgIEphdmFzY3JpcHQgPSAyMiwKICAgICAgICAg
ICAgTmV0d29yayA9IDIzLAogICAgICAgICAgICBDb25zb2xlX2FwaSA9IDI0LAogICAgICAgICAg
ICBPdGhlciA9IDI1LAogICAgICAgIH07CiAgICB9OyAvLyBzdHJ1Y3QgU291cmNlCgogICAgLy8g
TmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnbGV2ZWwnIHdoaWxlIGdlbmVyYXRpbmcgQ29uc29s
ZU1lc3NhZ2UuCiAgICBzdHJ1Y3QgTGV2ZWwgewogICAgICAgIGVudW0gRW51bSB7CiAgICAgICAg
ICAgIFRpcCA9IDI2LAogICAgICAgICAgICBMb2cgPSAyNywKICAgICAgICAgICAgV2FybmluZyA9
IDI4LAogICAgICAgICAgICBFcnJvciA9IDI5LAogICAgICAgICAgICBEZWJ1ZyA9IDMwLAogICAg
ICAgIH07CiAgICB9OyAvLyBzdHJ1Y3QgTGV2ZWwKCiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0
eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIENvbnNvbGVNZXNzYWdlLgogICAgc3RydWN0
IFR5cGUgewogICAgICAgIGVudW0gRW51bSB7CiAgICAgICAgICAgIExvZyA9IDI3LAogICAgICAg
ICAgICBEaXIgPSAzMSwKICAgICAgICAgICAgRGlyeG1sID0gMzIsCiAgICAgICAgICAgIFRyYWNl
ID0gMzMsCiAgICAgICAgICAgIFN0YXJ0R3JvdXAgPSAzNCwKICAgICAgICAgICAgU3RhcnRHcm91
cENvbGxhcHNlZCA9IDM1LAogICAgICAgICAgICBFbmRHcm91cCA9IDM2LAogICAgICAgICAgICBB
c3NlcnQgPSAzNywKICAgICAgICB9OwogICAgfTsgLy8gc3RydWN0IFR5cGUKCiAgICAvLyBOYW1l
ZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdwYXJhbWV0ZXJzJyB3aGlsZSBnZW5lcmF0aW5nIENvbnNv
bGVNZXNzYWdlLgogICAgY2xhc3MgUGFyYW1ldGVycyA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7
CiAgICBwcml2YXRlOgogICAgICAgIFBhcmFtZXRlcnMoKSB7fQoKICAgIHB1YmxpYzoKICAgICAg
ICB2b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxQYXJhbWV0ZXJzPiBjcmVhdGUoKSB7CiAgICAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgUGFyYW1ldGVycygpKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewog
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBTb3VyY2VTZXQgPSAxIDw8IDAsCiAgICAg
ICAgTGV2ZWxTZXQgPSAxIDw8IDEsCiAgICAgICAgVGV4dFNldCA9IDEgPDwgMiwKICAgICAgICBB
bGxGaWVsZHNTZXQgPSAoU291cmNlU2V0IHwgTGV2ZWxTZXQgfCBUZXh0U2V0KQogICAgfTsKCiAg
ICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRl
PGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+
Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q29uc29sZU1l
c3NhZ2U+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAg
ICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIENvbnNv
bGVNZXNzYWdlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU291cmNlU2V0
PiYgc2V0U291cmNlKFNvdXJjZTo6RW51bSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTb3VyY2VTZXQpLCBwcm9wZXJ0eV9zb3VyY2VfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzb3VyY2UiLCBnZXRFbnVt
Q29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNvdXJj
ZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTb3VyY2VTZXQ+JiBz
ZXRTb3VyY2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBTb3VyY2VTZXQpLCBwcm9wZXJ0eV9zb3VyY2VfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzb3VyY2UiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U291cmNlU2V0PigpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IExldmVsU2V0PiYgc2V0TGV2ZWwoTGV2ZWw6OkVudW0gdmFsdWUp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTGV2ZWxTZXQp
LCBwcm9wZXJ0eV9sZXZlbF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRT
dHJpbmcoImxldmVsIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxMZXZlbFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBMZXZlbFNldD4mIHNldExldmVsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTGV2ZWxTZXQpLCBwcm9wZXJ0
eV9sZXZlbF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImxl
dmVsIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPExldmVsU2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRleHRTZXQ+JiBzZXRUZXh0KGNvbnN0
IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgVGV4dFNldCksIHByb3BlcnR5X3RleHRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKCJ0ZXh0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFRleHRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q29u
c29sZU1lc3NhZ2U+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDb25zb2xlTWVzc2FnZT4qPigmbV9yZXN1bHQp
OwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDb25zb2xlTWVzc2FnZT4g
KCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q29uc29sZU1lc3NhZ2U+KCp0
aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0
b3I6CiAgICAgKiBSZWZQdHI8Q29uc29sZU1lc3NhZ2U+IHJlc3VsdCA9IENvbnNvbGVNZXNzYWdl
OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRTb3VyY2UoLi4uKQogICAgICogICAgIC5zZXRMZXZl
bCguLi4pCiAgICAgKiAgICAgLnNldFRleHQoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBDb25zb2xlTWVzc2FnZSgpKSk7CiAgICB9CgogICAgdm9p
ZCBzZXRUeXBlKFR5cGU6OkVudW0gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5n
KCJ0eXBlIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgIH0KCiAgICB2b2lkIHNl
dFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmco
InR5cGUiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgIH0KCiAg
ICB2b2lkIHNldExpbmUoaW50IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE51bWJlcigi
bGluZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFJlcGVhdENvdW50KGludCB2YWx1ZSkK
ICAgIHsKICAgICAgICB0aGlzLT5zZXROdW1iZXIoInJlcGVhdENvdW50IiwgdmFsdWUpOwogICAg
fQoKICAgIHZvaWQgc2V0UGFyYW1ldGVycygvKlBhc3NSZWZQdHI8UGFyYW1ldGVycz4qLyBQYXNz
UmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRBcnJh
eSgicGFyYW1ldGVycyIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFN0YWNrVHJhY2UoLypQ
YXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDb25zb2xlOjpTdGFja1RyYWNlPiovIFBhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldEFycmF5KCJzdGFj
a1RyYWNlIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0TmV0d29ya1JlcXVlc3RJZChjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygibmV0d29ya1Jl
cXVlc3RJZCIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIFN0YWNrIGVudHJ5IGZvciBjb25zb2xlIGVy
cm9ycyBhbmQgYXNzZXJ0aW9ucy4gKi8KY2xhc3MgQ2FsbEZyYW1lIDogcHVibGljIEluc3BlY3Rv
ck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAg
ICAgICBGdW5jdGlvbk5hbWVTZXQgPSAxIDw8IDAsCiAgICAgICAgVXJsU2V0ID0gMSA8PCAxLAog
ICAgICAgIExpbmVOdW1iZXJTZXQgPSAxIDw8IDIsCiAgICAgICAgQ29sdW1uTnVtYmVyU2V0ID0g
MSA8PCAzLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChGdW5jdGlvbk5hbWVTZXQgfCBVcmxTZXQg
fCBMaW5lTnVtYmVyU2V0IHwgQ29sdW1uTnVtYmVyU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxp
bnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBC
dWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8Q2FsbEZyYW1lPiBwdHIpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVp
bGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBw
dHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDYWxsRnJhbWU7CiAgICBwdWJsaWM6
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBGdW5jdGlvbk5hbWVTZXQ+JiBzZXRGdW5jdGlvbk5h
bWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBGdW5jdGlvbk5hbWVTZXQpLCBwcm9wZXJ0eV9mdW5jdGlvbk5hbWVfYWxy
ZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJmdW5jdGlvbk5hbWUi
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RnVuY3Rpb25OYW1lU2V0Pigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVybFNldD4mIHNldFVybChjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFVybFNldCksIHByb3BlcnR5X3VybF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxVcmxTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTGluZU51
bWJlclNldD4mIHNldExpbmVOdW1iZXIoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIExpbmVOdW1iZXJTZXQpLCBwcm9wZXJ0eV9saW5lTnVt
YmVyX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigibGluZU51
bWJlciIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxMaW5lTnVtYmVyU2V0
PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk51bWJlclNldD4m
IHNldENvbHVtbk51bWJlcihpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgQ29sdW1uTnVtYmVyU2V0KSwgcHJvcGVydHlfY29sdW1uTnVtYmVy
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiY29sdW1uTnVt
YmVyIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvbHVtbk51bWJlclNl
dD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDYWxsRnJhbWU+JiAoKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0
LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PFJlZlB0cjxDYWxsRnJhbWU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9w
ZXJhdG9yIFBhc3NSZWZQdHI8Q2FsbEZyYW1lPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuIFJlZlB0cjxDYWxsRnJhbWU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAg
ICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q2FsbEZyYW1lPiByZXN1
bHQgPSBDYWxsRnJhbWU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldEZ1bmN0aW9uTmFtZSguLi4p
CiAgICAgKiAgICAgLnNldFVybCguLi4pCiAgICAgKiAgICAgLnNldExpbmVOdW1iZXIoLi4uKQog
ICAgICogICAgIC5zZXRDb2x1bW5OdW1iZXIoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxk
ZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9G
aWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBDYWxsRnJhbWUoKSkpOwogICAgfQp9OwoKLyogQ2FsbCBm
cmFtZXMgZm9yIGFzc2VydGlvbnMgb3IgZXJyb3IgbWVzc2FnZXMuICovCmNsYXNzIFN0YWNrVHJh
Y2UgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewpwcml2YXRlOgogICAgU3RhY2tUcmFjZSgpIHt9
CgpwdWJsaWM6CiAgICB2b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDb25z
b2xlOjpDYWxsRnJhbWU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAg
ewogICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgfQoKICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFN0YWNrVHJhY2U+IGNyZWF0ZSgpIHsKICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFN0YWNrVHJhY2UoKSk7CiAgICB9Cn07Cgp9IC8vIENvbnNvbGUKCm5hbWVzcGFjZSBOZXR3b3Jr
IHsKLyogVW5pcXVlIGxvYWRlciBpZGVudGlmaWVyLiAqLwp0eXBlZGVmIFN0cmluZyBMb2FkZXJJ
ZDsKCi8qIFVuaXF1ZSBmcmFtZSBpZGVudGlmaWVyLiAqLwp0eXBlZGVmIFN0cmluZyBGcmFtZUlk
OwoKLyogVW5pcXVlIHJlcXVlc3QgaWRlbnRpZmllci4gKi8KdHlwZWRlZiBTdHJpbmcgUmVxdWVz
dElkOwoKLyogVGltaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgcmVxdWVzdC4gKi8KY2xhc3MgUmVz
b3VyY2VUaW1pbmcgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7
CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFJlcXVlc3RUaW1lU2V0ID0gMSA8PCAw
LAogICAgICAgIFByb3h5U3RhcnRTZXQgPSAxIDw8IDEsCiAgICAgICAgUHJveHlFbmRTZXQgPSAx
IDw8IDIsCiAgICAgICAgRG5zU3RhcnRTZXQgPSAxIDw8IDMsCiAgICAgICAgRG5zRW5kU2V0ID0g
MSA8PCA0LAogICAgICAgIENvbm5lY3RTdGFydFNldCA9IDEgPDwgNSwKICAgICAgICBDb25uZWN0
RW5kU2V0ID0gMSA8PCA2LAogICAgICAgIFNzbFN0YXJ0U2V0ID0gMSA8PCA3LAogICAgICAgIFNz
bEVuZFNldCA9IDEgPDwgOCwKICAgICAgICBTZW5kU3RhcnRTZXQgPSAxIDw8IDksCiAgICAgICAg
U2VuZEVuZFNldCA9IDEgPDwgMTAsCiAgICAgICAgUmVjZWl2ZUhlYWRlcnNFbmRTZXQgPSAxIDw8
IDExLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChSZXF1ZXN0VGltZVNldCB8IFByb3h5U3RhcnRT
ZXQgfCBQcm94eUVuZFNldCB8IERuc1N0YXJ0U2V0IHwgRG5zRW5kU2V0IHwgQ29ubmVjdFN0YXJ0
U2V0IHwgQ29ubmVjdEVuZFNldCB8IFNzbFN0YXJ0U2V0IHwgU3NsRW5kU2V0IHwgU2VuZFN0YXJ0
U2V0IHwgU2VuZEVuZFNldCB8IFJlY2VpdmVIZWFkZXJzRW5kU2V0KQogICAgfTsKCiAgICB0ZW1w
bGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBT
VEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8UmVzb3VyY2VUaW1pbmc+
IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmll
bGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBt
X3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFJlc291cmNlVGlt
aW5nOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUmVxdWVzdFRpbWVTZXQ+
JiBzZXRSZXF1ZXN0VGltZShkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgUmVxdWVzdFRpbWVTZXQpLCBwcm9wZXJ0eV9yZXF1ZXN0VGlt
ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInJlcXVlc3RU
aW1lIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFJlcXVlc3RUaW1lU2V0
PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFByb3h5U3RhcnRTZXQ+JiBz
ZXRQcm94eVN0YXJ0KGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBQcm94eVN0YXJ0U2V0KSwgcHJvcGVydHlfcHJveHlTdGFydF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInByb3h5U3RhcnQiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UHJveHlTdGFydFNldD4oKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQcm94eUVuZFNldD4mIHNldFByb3h5RW5k
KGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBQcm94eUVuZFNldCksIHByb3BlcnR5X3Byb3h5RW5kX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigicHJveHlFbmQiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8UHJveHlFbmRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgRG5zU3RhcnRTZXQ+JiBzZXREbnNTdGFydChkb3VibGUgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRG5zU3RhcnRTZXQpLCBw
cm9wZXJ0eV9kbnNTdGFydF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRO
dW1iZXIoImRuc1N0YXJ0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERu
c1N0YXJ0U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IERuc0VuZFNl
dD4mIHNldERuc0VuZChkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgRG5zRW5kU2V0KSwgcHJvcGVydHlfZG5zRW5kX2FscmVhZHlfc2V0
KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiZG5zRW5kIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERuc0VuZFNldD4oKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBDb25uZWN0U3RhcnRTZXQ+JiBzZXRDb25uZWN0U3RhcnQoZG91Ymxl
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENv
bm5lY3RTdGFydFNldCksIHByb3BlcnR5X2Nvbm5lY3RTdGFydF9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImNvbm5lY3RTdGFydCIsIHZhbHVlKTsKICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb25uZWN0U3RhcnRTZXQ+KCk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgQ29ubmVjdEVuZFNldD4mIHNldENvbm5lY3RFbmQoZG91Ymxl
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENv
bm5lY3RFbmRTZXQpLCBwcm9wZXJ0eV9jb25uZWN0RW5kX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldE51bWJlcigiY29ubmVjdEVuZCIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxDb25uZWN0RW5kU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFNzbFN0YXJ0U2V0PiYgc2V0U3NsU3RhcnQoZG91YmxlIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNzbFN0YXJ0U2V0KSwg
cHJvcGVydHlfc3NsU3RhcnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
TnVtYmVyKCJzc2xTdGFydCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxT
c2xTdGFydFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTc2xFbmRT
ZXQ+JiBzZXRTc2xFbmQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIFNzbEVuZFNldCksIHByb3BlcnR5X3NzbEVuZF9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNzbEVuZCIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTc2xFbmRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgU2VuZFN0YXJ0U2V0PiYgc2V0U2VuZFN0YXJ0KGRvdWJsZSB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTZW5kU3Rh
cnRTZXQpLCBwcm9wZXJ0eV9zZW5kU3RhcnRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0TnVtYmVyKCJzZW5kU3RhcnQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8U2VuZFN0YXJ0U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFNlbmRFbmRTZXQ+JiBzZXRTZW5kRW5kKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTZW5kRW5kU2V0KSwgcHJvcGVydHlfc2Vu
ZEVuZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNlbmRF
bmQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U2VuZEVuZFNldD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBSZWNlaXZlSGVhZGVyc0VuZFNldD4m
IHNldFJlY2VpdmVIZWFkZXJzRW5kKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBSZWNlaXZlSGVhZGVyc0VuZFNldCksIHByb3BlcnR5
X3JlY2VpdmVIZWFkZXJzRW5kX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dE51bWJlcigicmVjZWl2ZUhlYWRlcnNFbmQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8UmVjZWl2ZUhlYWRlcnNFbmRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVy
YXRvciBSZWZQdHI8UmVzb3VyY2VUaW1pbmc+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsK
ICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxSZXNvdXJjZVRpbWlu
Zz4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxS
ZXNvdXJjZVRpbWluZz4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8UmVz
b3VyY2VUaW1pbmc+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50
aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8UmVzb3VyY2VUaW1pbmc+IHJlc3VsdCA9
IFJlc291cmNlVGltaW5nOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRSZXF1ZXN0VGltZSguLi4p
CiAgICAgKiAgICAgLnNldFByb3h5U3RhcnQoLi4uKQogICAgICogICAgIC5zZXRQcm94eUVuZCgu
Li4pCiAgICAgKiAgICAgLnNldERuc1N0YXJ0KC4uLikKICAgICAqICAgICAuc2V0RG5zRW5kKC4u
LikKICAgICAqICAgICAuc2V0Q29ubmVjdFN0YXJ0KC4uLikKICAgICAqICAgICAuc2V0Q29ubmVj
dEVuZCguLi4pCiAgICAgKiAgICAgLnNldFNzbFN0YXJ0KC4uLikKICAgICAqICAgICAuc2V0U3Ns
RW5kKC4uLikKICAgICAqICAgICAuc2V0U2VuZFN0YXJ0KC4uLikKICAgICAqICAgICAuc2V0U2Vu
ZEVuZCguLi4pCiAgICAgKiAgICAgLnNldFJlY2VpdmVIZWFkZXJzRW5kKC4uLik7CiAgICAgKi8K
ICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJl
dHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgUmVzb3VyY2VUaW1pbmcoKSkp
OwogICAgfQp9OwoKLyogSFRUUCByZXF1ZXN0IGRhdGEuICovCmNsYXNzIFJlcXVlc3QgOiBwdWJs
aWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNT
ZXQgPSAwLAogICAgICAgIFVybFNldCA9IDEgPDwgMCwKICAgICAgICBNZXRob2RTZXQgPSAxIDw8
IDEsCiAgICAgICAgSGVhZGVyc1NldCA9IDEgPDwgMiwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAo
VXJsU2V0IHwgTWV0aG9kU2V0IHwgSGVhZGVyc1NldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50
IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVp
bGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFJlcXVlc3Q+IHB0cikKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsK
ICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFJlcXVlc3Q7CiAgICBwdWJsaWM6CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBVcmxTZXQ+JiBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVcmxTZXQpLCBw
cm9wZXJ0eV91cmxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJ1cmwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VXJsU2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1ldGhvZFNldD4mIHNldE1ldGhvZChj
b25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIE1ldGhvZFNldCksIHByb3BlcnR5X21ldGhvZF9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1ldGhvZCIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxNZXRob2RTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgSGVhZGVyc1NldD4mIHNldEhlYWRlcnMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IEhlYWRlcnNTZXQpLCBwcm9wZXJ0eV9oZWFkZXJzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE9iamVjdCgiaGVhZGVycyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxIZWFkZXJzU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVm
UHRyPFJlcXVlc3Q+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RB
VEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxSZXF1ZXN0Pio+KCZtX3Jlc3VsdCk7CiAgICAg
ICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPFJlcXVlc3Q+ICgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gUmVmUHRyPFJlcXVlc3Q+KCp0aGlzKTsKICAgICAgICB9CiAgICB9
OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8UmVx
dWVzdD4gcmVzdWx0ID0gUmVxdWVzdDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0VXJsKC4uLikK
ICAgICAqICAgICAuc2V0TWV0aG9kKC4uLikKICAgICAqICAgICAuc2V0SGVhZGVycyguLi4pOwog
ICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFJlcXVlc3QoKSkp
OwogICAgfQoKICAgIHZvaWQgc2V0UG9zdERhdGEoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsK
ICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInBvc3REYXRhIiwgdmFsdWUpOwogICAgfQp9OwoKLyog
SFRUUCByZXNwb25zZSBkYXRhLiAqLwpjbGFzcyBSZXNwb25zZSA6IHB1YmxpYyBJbnNwZWN0b3JP
YmplY3QgewpwdWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAg
ICAgVXJsU2V0ID0gMSA8PCAwLAogICAgICAgIFN0YXR1c1NldCA9IDEgPDwgMSwKICAgICAgICBT
dGF0dXNUZXh0U2V0ID0gMSA8PCAyLAogICAgICAgIEhlYWRlcnNTZXQgPSAxIDw8IDMsCiAgICAg
ICAgTWltZVR5cGVTZXQgPSAxIDw8IDQsCiAgICAgICAgQ29ubmVjdGlvblJldXNlZFNldCA9IDEg
PDwgNSwKICAgICAgICBDb25uZWN0aW9uSWRTZXQgPSAxIDw8IDYsCiAgICAgICAgQWxsRmllbGRz
U2V0ID0gKFVybFNldCB8IFN0YXR1c1NldCB8IFN0YXR1c1RleHRTZXQgfCBIZWFkZXJzU2V0IHwg
TWltZVR5cGVTZXQgfCBDb25uZWN0aW9uUmV1c2VkU2V0IHwgQ29ubmVjdGlvbklkU2V0KQogICAg
fTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZh
dGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRl
bXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAg
ICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8
IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8UmVz
cG9uc2U+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAg
ICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFJlc3Bv
bnNlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVXJsU2V0PiYgc2V0VXJs
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgVXJsU2V0KSwgcHJvcGVydHlfdXJsX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygidXJsIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFVybFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBT
dGF0dXNTZXQ+JiBzZXRTdGF0dXMoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0YXR1c1NldCksIHByb3BlcnR5X3N0YXR1c19hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInN0YXR1cyIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdGF0dXNTZXQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3RhdHVzVGV4dFNldD4mIHNldFN0YXR1c1RleHQoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBTdGF0dXNUZXh0U2V0KSwgcHJvcGVydHlfc3RhdHVzVGV4dF9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0YXR1c1RleHQiLCB2YWx1ZSk7CiAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3RhdHVzVGV4dFNldD4oKTsKICAgICAgICB9Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBIZWFkZXJzU2V0PiYgc2V0SGVhZGVycyhQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgSGVhZGVyc1NldCksIHByb3BlcnR5X2hlYWRlcnNfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJoZWFkZXJzIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEhlYWRlcnNTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgTWltZVR5cGVTZXQ+JiBzZXRNaW1lVHlwZShjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1p
bWVUeXBlU2V0KSwgcHJvcGVydHlfbWltZVR5cGVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKCJtaW1lVHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxNaW1lVHlwZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBDb25uZWN0aW9uUmV1c2VkU2V0PiYgc2V0Q29ubmVjdGlvblJldXNlZChib29sIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvbm5lY3Rp
b25SZXVzZWRTZXQpLCBwcm9wZXJ0eV9jb25uZWN0aW9uUmV1c2VkX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImNvbm5lY3Rpb25SZXVzZWQiLCB2YWx1ZSk7
CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29ubmVjdGlvblJldXNlZFNldD4oKTsKICAg
ICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb25uZWN0aW9uSWRTZXQ+JiBzZXRDb25u
ZWN0aW9uSWQoZG91YmxlIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIENvbm5lY3Rpb25JZFNldCksIHByb3BlcnR5X2Nvbm5lY3Rpb25JZF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoImNvbm5lY3Rpb25JZCIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb25uZWN0aW9uSWRTZXQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8UmVzcG9uc2U+JiAoKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1
bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJl
ZlB0cjxSZXNwb25zZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3Ig
UGFzc1JlZlB0cjxSZXNwb25zZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQ
dHI8UmVzcG9uc2U+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50
aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8UmVzcG9uc2U+IHJlc3VsdCA9IFJlc3Bv
bnNlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICogICAgIC5zZXRTdGF0
dXMoLi4uKQogICAgICogICAgIC5zZXRTdGF0dXNUZXh0KC4uLikKICAgICAqICAgICAuc2V0SGVh
ZGVycyguLi4pCiAgICAgKiAgICAgLnNldE1pbWVUeXBlKC4uLikKICAgICAqICAgICAuc2V0Q29u
bmVjdGlvblJldXNlZCguLi4pCiAgICAgKiAgICAgLnNldENvbm5lY3Rpb25JZCguLi4pOwogICAg
ICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAg
ICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFJlc3BvbnNlKCkpKTsK
ICAgIH0KCiAgICB2b2lkIHNldEhlYWRlcnNUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJoZWFkZXJzVGV4dCIsIHZhbHVlKTsKICAgIH0KCiAg
ICB2b2lkIHNldFJlcXVlc3RIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1
ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoInJlcXVlc3RIZWFkZXJzIiwgdmFsdWUp
OwogICAgfQoKICAgIHZvaWQgc2V0UmVxdWVzdEhlYWRlcnNUZXh0KGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJyZXF1ZXN0SGVhZGVyc1RleHQiLCB2
YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRGcm9tRGlza0NhY2hlKGJvb2wgdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0Qm9vbGVhbigiZnJvbURpc2tDYWNoZSIsIHZhbHVlKTsKICAgIH0K
CiAgICB2b2lkIHNldFRpbWluZygvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJl
c291cmNlVGltaW5nPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsK
ICAgICAgICB0aGlzLT5zZXRPYmplY3QoInRpbWluZyIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIFdl
YlNvY2tldCByZXF1ZXN0IGRhdGEuICovCmNsYXNzIFdlYlNvY2tldFJlcXVlc3QgOiBwdWJsaWMg
SW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQg
PSAwLAogICAgICAgIFJlcXVlc3RLZXkzU2V0ID0gMSA8PCAwLAogICAgICAgIEhlYWRlcnNTZXQg
PSAxIDw8IDEsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFJlcXVlc3RLZXkzU2V0IHwgSGVhZGVy
c1NldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7
CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoK
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3Rh
dGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNz
UmVmUHRyPFdlYlNvY2tldFJlcXVlc3Q+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2lu
aXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAg
ZnJpZW5kIGNsYXNzIFdlYlNvY2tldFJlcXVlc3Q7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBSZXF1ZXN0S2V5M1NldD4mIHNldFJlcXVlc3RLZXkzKGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUmVx
dWVzdEtleTNTZXQpLCBwcm9wZXJ0eV9yZXF1ZXN0S2V5M19hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInJlcXVlc3RLZXkzIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFJlcXVlc3RLZXkzU2V0PigpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IEhlYWRlcnNTZXQ+JiBzZXRIZWFkZXJzKFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBIZWFkZXJzU2V0KSwgcHJvcGVydHlfaGVhZGVyc19hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImhlYWRlcnMiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8SGVhZGVyc1NldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJh
dG9yIFJlZlB0cjxXZWJTb2NrZXRSZXF1ZXN0PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8V2ViU29ja2V0UmVx
dWVzdD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0
cjxXZWJTb2NrZXRSZXF1ZXN0PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0
cjxXZWJTb2NrZXRSZXF1ZXN0PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAg
ICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFdlYlNvY2tldFJlcXVlc3Q+
IHJlc3VsdCA9IFdlYlNvY2tldFJlcXVlc3Q6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFJlcXVl
c3RLZXkzKC4uLikKICAgICAqICAgICAuc2V0SGVhZGVycyguLi4pOwogICAgICovCiAgICBzdGF0
aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVp
bGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFdlYlNvY2tldFJlcXVlc3QoKSkpOwogICAg
fQp9OwoKLyogV2ViU29ja2V0IHJlc3BvbnNlIGRhdGEuICovCmNsYXNzIFdlYlNvY2tldFJlc3Bv
bnNlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAg
IE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBTdGF0dXNTZXQgPSAxIDw8IDAsCiAgICAgICAgU3Rh
dHVzVGV4dFNldCA9IDEgPDwgMSwKICAgICAgICBIZWFkZXJzU2V0ID0gMSA8PCAyLAogICAgICAg
IENoYWxsZW5nZVJlc3BvbnNlU2V0ID0gMSA8PCAzLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChT
dGF0dXNTZXQgfCBTdGF0dXNUZXh0U2V0IHwgSGVhZGVyc1NldCB8IENoYWxsZW5nZVJlc3BvbnNl
U2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsK
ICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7Cgog
ICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0
ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRl
cjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NS
ZWZQdHI8V2ViU29ja2V0UmVzcG9uc2U+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2lu
aXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAg
ZnJpZW5kIGNsYXNzIFdlYlNvY2tldFJlc3BvbnNlOwogICAgcHVibGljOgoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgU3RhdHVzU2V0PiYgc2V0U3RhdHVzKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdGF0dXNTZXQpLCBwcm9wZXJ0
eV9zdGF0dXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJz
dGF0dXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3RhdHVzU2V0Pigp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0YXR1c1RleHRTZXQ+JiBzZXRT
dGF0dXNUZXh0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgU3RhdHVzVGV4dFNldCksIHByb3BlcnR5X3N0YXR1c1RleHRf
YWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzdGF0dXNUZXh0
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0YXR1c1RleHRTZXQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSGVhZGVyc1NldD4mIHNldEhlYWRl
cnMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhlYWRlcnNTZXQpLCBwcm9wZXJ0eV9oZWFkZXJz
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiaGVhZGVycyIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxIZWFkZXJzU2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IENoYWxsZW5nZVJlc3BvbnNlU2V0PiYgc2V0
Q2hhbGxlbmdlUmVzcG9uc2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDaGFsbGVuZ2VSZXNwb25zZVNldCksIHByb3Bl
cnR5X2NoYWxsZW5nZVJlc3BvbnNlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZygiY2hhbGxlbmdlUmVzcG9uc2UiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8Q2hhbGxlbmdlUmVzcG9uc2VTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBv
cGVyYXRvciBSZWZQdHI8V2ViU29ja2V0UmVzcG9uc2U+JiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3Jl
YWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxXZWJTb2Nr
ZXRSZXNwb25zZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFz
c1JlZlB0cjxXZWJTb2NrZXRSZXNwb25zZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVy
biBSZWZQdHI8V2ViU29ja2V0UmVzcG9uc2U+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAg
IC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8V2ViU29ja2V0
UmVzcG9uc2U+IHJlc3VsdCA9IFdlYlNvY2tldFJlc3BvbnNlOjpjcmVhdGUoKQogICAgICogICAg
IC5zZXRTdGF0dXMoLi4uKQogICAgICogICAgIC5zZXRTdGF0dXNUZXh0KC4uLikKICAgICAqICAg
ICAuc2V0SGVhZGVycyguLi4pCiAgICAgKiAgICAgLnNldENoYWxsZW5nZVJlc3BvbnNlKC4uLik7
CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewog
ICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgV2ViU29ja2V0
UmVzcG9uc2UoKSkpOwogICAgfQp9OwoKLyogSW5mb3JtYXRpb24gYWJvdXQgdGhlIGNhY2hlZCBy
ZXNvdXJjZS4gKi8KY2xhc3MgQ2FjaGVkUmVzb3VyY2UgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0
IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFVy
bFNldCA9IDEgPDwgMCwKICAgICAgICBUeXBlU2V0ID0gMSA8PCAxLAogICAgICAgIFJlc3BvbnNl
U2V0ID0gMSA8PCAyLAogICAgICAgIEJvZHlTaXplU2V0ID0gMSA8PCAzLAogICAgICAgIEFsbEZp
ZWxkc1NldCA9IChVcmxTZXQgfCBUeXBlU2V0IHwgUmVzcG9uc2VTZXQgfCBCb2R5U2l6ZVNldCkK
ICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBw
cml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAg
ICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQog
ICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RB
VEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRy
PENhY2hlZFJlc291cmNlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRl
KTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBj
bGFzcyBDYWNoZWRSZXNvdXJjZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IFVybFNldD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVybFNldCksIHByb3BlcnR5X3VybF9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVcmxTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5cGUoVHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291
cmNlVHlwZTo6RW51bSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1
ZSkpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5cGUoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBl
U2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoInR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHlw
ZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBSZXNwb25zZVNldD4m
IHNldFJlc3BvbnNlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVzcG9uc2U+
Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFJlc3BvbnNlU2V0KSwgcHJvcGVydHlfcmVzcG9u
c2VfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJyZXNwb25z
ZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxSZXNwb25zZVNldD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBCb2R5U2l6ZVNldD4mIHNldEJvZHlT
aXplKGRvdWJsZSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBCb2R5U2l6ZVNldCksIHByb3BlcnR5X2JvZHlTaXplX2FscmVhZHlfc2V0KTsKICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiYm9keVNpemUiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8Qm9keVNpemVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBv
cGVyYXRvciBSZWZQdHI8Q2FjaGVkUmVzb3VyY2U+JiAoKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5
KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDYWNoZWRSZXNv
dXJjZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0
cjxDYWNoZWRSZXNvdXJjZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8
Q2FjaGVkUmVzb3VyY2U+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBT
eW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q2FjaGVkUmVzb3VyY2U+IHJlc3Vs
dCA9IENhY2hlZFJlc291cmNlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRVcmwoLi4uKQogICAg
ICogICAgIC5zZXRUeXBlKC4uLikKICAgICAqICAgICAuc2V0UmVzcG9uc2UoLi4uKQogICAgICog
ICAgIC5zZXRCb2R5U2l6ZSguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxk
c1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4o
YWRvcHRSZWYobmV3IENhY2hlZFJlc291cmNlKCkpKTsKICAgIH0KfTsKCi8qIEluZm9ybWF0aW9u
IGFib3V0IHRoZSByZXF1ZXN0IGluaXRpYXRvci4gKi8KY2xhc3MgSW5pdGlhdG9yIDogcHVibGlj
IEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5h
bWUgJ3R5cGUnIHdoaWxlIGdlbmVyYXRpbmcgSW5pdGlhdG9yLgogICAgc3RydWN0IFR5cGUgewog
ICAgICAgIGVudW0gRW51bSB7CiAgICAgICAgICAgIFBhcnNlciA9IDM4LAogICAgICAgICAgICBT
Y3JpcHQgPSAzOSwKICAgICAgICAgICAgT3RoZXIgPSAyNSwKICAgICAgICB9OwogICAgfTsgLy8g
c3RydWN0IFR5cGUKCiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAg
VHlwZVNldCA9IDEgPDwgMCwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoVHlwZVNldCkKICAgIH07
CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRl
OgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1w
bGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAg
IHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEluaXRp
YXRvcj4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
Tm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAg
ICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgSW5pdGlh
dG9yOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5
cGUoVHlwZTo6RW51bSB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1
ZSkpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5cGUoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBl
U2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoInR5cGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHlw
ZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxJbml0aWF0b3I+JiAo
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRz
U2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PFJlZlB0cjxJbml0aWF0b3I+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAg
IG9wZXJhdG9yIFBhc3NSZWZQdHI8SW5pdGlhdG9yPiAoKQogICAgICAgIHsKICAgICAgICAgICAg
cmV0dXJuIFJlZlB0cjxJbml0aWF0b3I+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8q
CiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8SW5pdGlhdG9yPiBy
ZXN1bHQgPSBJbml0aWF0b3I6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFR5cGUoLi4uKTsKICAg
ICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAg
ICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBJbml0aWF0b3IoKSkp
OwogICAgfQoKICAgIHZvaWQgc2V0U3RhY2tUcmFjZSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6
OkNvbnNvbGU6OlN0YWNrVHJhY2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUp
CiAgICB7CiAgICAgICAgdGhpcy0+c2V0QXJyYXkoInN0YWNrVHJhY2UiLCB2YWx1ZSk7CiAgICB9
CgogICAgdm9pZCBzZXRVcmwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlz
LT5zZXRTdHJpbmcoInVybCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldExpbmVOdW1iZXIo
ZG91YmxlIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE51bWJlcigibGluZU51bWJlciIs
IHZhbHVlKTsKICAgIH0KfTsKCn0gLy8gTmV0d29yawoKI2lmIEVOQUJMRShTUUxfREFUQUJBU0Up
Cm5hbWVzcGFjZSBEYXRhYmFzZSB7Ci8qIERhdGFiYXNlIG9iamVjdC4gKi8KY2xhc3MgRGF0YWJh
c2UgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAg
Tm9GaWVsZHNTZXQgPSAwLAogICAgICAgIElkU2V0ID0gMSA8PCAwLAogICAgICAgIERvbWFpblNl
dCA9IDEgPDwgMSwKICAgICAgICBOYW1lU2V0ID0gMSA8PCAyLAogICAgICAgIFZlcnNpb25TZXQg
PSAxIDw8IDMsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKElkU2V0IHwgRG9tYWluU2V0IHwgTmFt
ZVNldCB8IFZlcnNpb25TZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNs
YXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXIoUGFzc1JlZlB0cjxEYXRhYmFzZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAg
ICAgICBmcmllbmQgY2xhc3MgRGF0YWJhc2U7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBJZFNldD4mIHNldElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSWRTZXQpLCBwcm9wZXJ0eV9pZF9hbHJl
YWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImlkIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElkU2V0PigpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IERvbWFpblNldD4mIHNldERvbWFpbihjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERvbWFpblNl
dCksIHByb3BlcnR5X2RvbWFpbl9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoImRvbWFpbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxE
b21haW5TZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTmFtZVNldD4m
IHNldE5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBOYW1lU2V0KSwgcHJvcGVydHlfbmFtZV9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8TmFtZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBWZXJzaW9uU2V0PiYgc2V0VmVyc2lvbihjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZlcnNpb25TZXQp
LCBwcm9wZXJ0eV92ZXJzaW9uX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygidmVyc2lvbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxW
ZXJzaW9uU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPERhdGFiYXNl
PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZp
ZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxSZWZQdHI8RGF0YWJhc2U+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAg
ICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8RGF0YWJhc2U+ICgpCiAgICAgICAgewogICAgICAgICAg
ICByZXR1cm4gUmVmUHRyPERhdGFiYXNlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAv
KgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPERhdGFiYXNlPiBy
ZXN1bHQgPSBEYXRhYmFzZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0SWQoLi4uKQogICAgICog
ICAgIC5zZXREb21haW4oLi4uKQogICAgICogICAgIC5zZXROYW1lKC4uLikKICAgICAqICAgICAu
c2V0VmVyc2lvbiguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4g
Y3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRS
ZWYobmV3IERhdGFiYXNlKCkpKTsKICAgIH0KfTsKCn0gLy8gRGF0YWJhc2UKCiNlbmRpZiAvLyBF
TkFCTEUoU1FMX0RBVEFCQVNFKQpuYW1lc3BhY2UgRE9NU3RvcmFnZSB7Ci8qIERPTSBTdG9yYWdl
IGVudHJ5LiAqLwpjbGFzcyBFbnRyeSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6
CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgSG9zdFNldCA9IDEg
PDwgMCwKICAgICAgICBJc0xvY2FsU3RvcmFnZVNldCA9IDEgPDwgMSwKICAgICAgICBJZFNldCA9
IDEgPDwgMiwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoSG9zdFNldCB8IElzTG9jYWxTdG9yYWdl
U2V0IHwgSWRTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1
aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jl
c3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYg
Y2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXIoUGFzc1JlZlB0cjxFbnRyeT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9z
dGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmll
bmQgY2xhc3MgRW50cnk7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBIb3N0
U2V0PiYgc2V0SG9zdChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhvc3RTZXQpLCBwcm9wZXJ0eV9ob3N0X2FscmVhZHlf
c2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiaG9zdCIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxIb3N0U2V0PigpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IElzTG9jYWxTdG9yYWdlU2V0PiYgc2V0SXNMb2NhbFN0b3JhZ2UoYm9v
bCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJ
c0xvY2FsU3RvcmFnZVNldCksIHByb3BlcnR5X2lzTG9jYWxTdG9yYWdlX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldEJvb2xlYW4oImlzTG9jYWxTdG9yYWdlIiwgdmFsdWUp
OwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElzTG9jYWxTdG9yYWdlU2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IElkU2V0PiYgc2V0SWQoZG91YmxlIHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIElkU2V0KSwg
cHJvcGVydHlfaWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVy
KCJpZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJZFNldD4oKTsKICAg
ICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxFbnRyeT4mICgpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19u
b3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEVu
dHJ5Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRy
PEVudHJ5PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxFbnRyeT4oKnRo
aXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKICAgICAqIFJlZlB0cjxFbnRyeT4gcmVzdWx0ID0gRW50cnk6OmNyZWF0ZSgpCiAgICAgKiAg
ICAgLnNldEhvc3QoLi4uKQogICAgICogICAgIC5zZXRJc0xvY2FsU3RvcmFnZSguLi4pCiAgICAg
KiAgICAgLnNldElkKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0
PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9w
dFJlZihuZXcgRW50cnkoKSkpOwogICAgfQp9OwoKfSAvLyBET01TdG9yYWdlCgpuYW1lc3BhY2Ug
QXBwbGljYXRpb25DYWNoZSB7Ci8qIERldGFpbGVkIGFwcGxpY2F0aW9uIGNhY2hlIHJlc291cmNl
IGluZm9ybWF0aW9uLiAqLwpjbGFzcyBBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UgOiBwdWJsaWMg
SW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQg
PSAwLAogICAgICAgIFVybFNldCA9IDEgPDwgMCwKICAgICAgICBTaXplU2V0ID0gMSA8PCAxLAog
ICAgICAgIFR5cGVTZXQgPSAxIDw8IDIsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFVybFNldCB8
IFNpemVTZXQgfCBUeXBlU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBj
bGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwg
U1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyKFBhc3NSZWZQdHI8QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiBwdHIpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVp
bGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBw
dHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlUmVzb3Vy
Y2U7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBVcmxTZXQ+JiBzZXRVcmwo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBVcmxTZXQpLCBwcm9wZXJ0eV91cmxfYWxyZWFkeV9zZXQpOwogICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ1cmwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8VXJsU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNp
emVTZXQ+JiBzZXRTaXplKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBTaXplU2V0KSwgcHJvcGVydHlfc2l6ZV9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInNpemUiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8U2l6ZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR5cGVTZXQpLCBwcm9wZXJ0eV90
eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBlU2V0PigpOwogICAgICAg
IH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4mICgp
CiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNT
ZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0
X2Nhc3Q8UmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4qPigmbV9yZXN1bHQpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3Vy
Y2U+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPEFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRo
ZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+
IHJlc3VsdCA9IEFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRlKCkKICAgICAqICAgICAu
c2V0VXJsKC4uLikKICAgICAqICAgICAuc2V0U2l6ZSguLi4pCiAgICAgKiAgICAgLnNldFR5cGUo
Li4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAg
ICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBBcHBs
aWNhdGlvbkNhY2hlUmVzb3VyY2UoKSkpOwogICAgfQp9OwoKLyogRGV0YWlsZWQgYXBwbGljYXRp
b24gY2FjaGUgaW5mb3JtYXRpb24uICovCmNsYXNzIEFwcGxpY2F0aW9uQ2FjaGUgOiBwdWJsaWMg
SW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFt
ZSAncmVzb3VyY2VzJyB3aGlsZSBnZW5lcmF0aW5nIEFwcGxpY2F0aW9uQ2FjaGUuCiAgICBjbGFz
cyBSZXNvdXJjZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgcHJpdmF0ZToKICAgICAg
ICBSZXNvdXJjZXMoKSB7fQoKICAgIHB1YmxpYzoKICAgICAgICB2b2lkIGFkZEl0ZW0oLypQYXNz
UmVmUHRyPFR5cGVCdWlsZGVyOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxSZXNvdXJjZXM+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBSZXNvdXJjZXMoKSk7CiAgICAgICAgfQogICAgfTsKCiAgICBlbnVtIHsKICAg
ICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgTWFuaWZlc3RVUkxTZXQgPSAxIDw8IDAsCiAg
ICAgICAgU2l6ZVNldCA9IDEgPDwgMSwKICAgICAgICBDcmVhdGlvblRpbWVTZXQgPSAxIDw8IDIs
CiAgICAgICAgVXBkYXRlVGltZVNldCA9IDEgPDwgMywKICAgICAgICBSZXNvdXJjZXNTZXQgPSAx
IDw8IDQsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKE1hbmlmZXN0VVJMU2V0IHwgU2l6ZVNldCB8
IENyZWF0aW9uVGltZVNldCB8IFVwZGF0ZVRpbWVTZXQgfCBSZXNvdXJjZXNTZXQpCiAgICB9OwoK
ICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToK
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxh
dGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7
CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RF
UD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxBcHBsaWNh
dGlvbkNhY2hlPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFU
RSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAg
ICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBB
cHBsaWNhdGlvbkNhY2hlOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWFu
aWZlc3RVUkxTZXQ+JiBzZXRNYW5pZmVzdFVSTChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAg
IHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1hbmlmZXN0VVJMU2V0KSwg
cHJvcGVydHlfbWFuaWZlc3RVUkxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJtYW5pZmVzdFVSTCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxNYW5pZmVzdFVSTFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBTaXplU2V0PiYgc2V0U2l6ZShkb3VibGUgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgU2l6ZVNldCksIHByb3BlcnR5X3NpemVfYWxyZWFkeV9z
ZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJzaXplIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNpemVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgQ3JlYXRpb25UaW1lU2V0PiYgc2V0Q3JlYXRpb25UaW1lKGRvdWJsZSB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDcmVh
dGlvblRpbWVTZXQpLCBwcm9wZXJ0eV9jcmVhdGlvblRpbWVfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJjcmVhdGlvblRpbWUiLCB2YWx1ZSk7CiAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8Q3JlYXRpb25UaW1lU2V0PigpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFVwZGF0ZVRpbWVTZXQ+JiBzZXRVcGRhdGVUaW1lKGRvdWJsZSB2
YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBVcGRh
dGVUaW1lU2V0KSwgcHJvcGVydHlfdXBkYXRlVGltZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXROdW1iZXIoInVwZGF0ZVRpbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8VXBkYXRlVGltZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBSZXNvdXJjZXNTZXQ+JiBzZXRSZXNvdXJjZXMoLypQYXNzUmVmUHRyPFJlc291
cmNlcz4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBSZXNvdXJjZXNTZXQpLCBwcm9wZXJ0eV9y
ZXNvdXJjZXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoInJl
c291cmNlcyIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxSZXNvdXJjZXNT
ZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8QXBwbGljYXRpb25DYWNo
ZT4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxG
aWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8UmVmUHRyPEFwcGxpY2F0aW9uQ2FjaGU+Kj4oJm1fcmVzdWx0KTsKICAgICAg
ICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4gKCkKICAg
ICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8QXBwbGljYXRpb25DYWNoZT4oKnRoaXMp
OwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
ICAgICAqIFJlZlB0cjxBcHBsaWNhdGlvbkNhY2hlPiByZXN1bHQgPSBBcHBsaWNhdGlvbkNhY2hl
OjpjcmVhdGUoKQogICAgICogICAgIC5zZXRNYW5pZmVzdFVSTCguLi4pCiAgICAgKiAgICAgLnNl
dFNpemUoLi4uKQogICAgICogICAgIC5zZXRDcmVhdGlvblRpbWUoLi4uKQogICAgICogICAgIC5z
ZXRVcGRhdGVUaW1lKC4uLikKICAgICAqICAgICAuc2V0UmVzb3VyY2VzKC4uLik7CiAgICAgKi8K
ICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJl
dHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgQXBwbGljYXRpb25DYWNoZSgp
KSk7CiAgICB9Cn07CgovKiBGcmFtZSBpZGVudGlmaWVyIC0gbWFuaWZlc3QgVVJMIHBhaXIuICov
CmNsYXNzIEZyYW1lV2l0aE1hbmlmZXN0IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1Ymxp
YzoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBGcmFtZUlkU2V0
ID0gMSA8PCAwLAogICAgICAgIE1hbmlmZXN0VVJMU2V0ID0gMSA8PCAxLAogICAgICAgIFN0YXR1
c1NldCA9IDEgPDwgMiwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoRnJhbWVJZFNldCB8IE1hbmlm
ZXN0VVJMU2V0IHwgU3RhdHVzU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAg
ICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRF
IHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAg
ICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8RnJhbWVXaXRoTWFuaWZlc3Q+IHB0cikKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsK
ICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIEZyYW1lV2l0aE1hbmlmZXN0OwogICAgcHVi
bGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRnJhbWVJZFNldD4mIHNldEZyYW1lSWQoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBGcmFtZUlkU2V0KSwgcHJvcGVydHlfZnJhbWVJZF9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImZyYW1lSWQiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8RnJhbWVJZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBNYW5pZmVzdFVSTFNldD4mIHNldE1hbmlmZXN0VVJMKGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWFu
aWZlc3RVUkxTZXQpLCBwcm9wZXJ0eV9tYW5pZmVzdFVSTF9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1hbmlmZXN0VVJMIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPE1hbmlmZXN0VVJMU2V0PigpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFN0YXR1c1NldD4mIHNldFN0YXR1cyhpbnQgdmFsdWUpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3RhdHVzU2V0KSwgcHJvcGVy
dHlfc3RhdHVzX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigi
c3RhdHVzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0YXR1c1NldD4o
KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxGcmFtZVdpdGhNYW5pZmVzdD4m
ICgpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVs
ZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8UmVmUHRyPEZyYW1lV2l0aE1hbmlmZXN0Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAg
fQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEZyYW1lV2l0aE1hbmlmZXN0PiAoKQogICAg
ICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxGcmFtZVdpdGhNYW5pZmVzdD4oKnRoaXMp
OwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoK
ICAgICAqIFJlZlB0cjxGcmFtZVdpdGhNYW5pZmVzdD4gcmVzdWx0ID0gRnJhbWVXaXRoTWFuaWZl
c3Q6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldEZyYW1lSWQoLi4uKQogICAgICogICAgIC5zZXRN
YW5pZmVzdFVSTCguLi4pCiAgICAgKiAgICAgLnNldFN0YXR1cyguLi4pOwogICAgICovCiAgICBz
dGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4g
QnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IEZyYW1lV2l0aE1hbmlmZXN0KCkpKTsK
ICAgIH0KfTsKCn0gLy8gQXBwbGljYXRpb25DYWNoZQoKbmFtZXNwYWNlIERPTSB7Ci8qIERPTSBp
bnRlcmFjdGlvbiBpcyBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBtaXJyb3Igb2JqZWN0cyB0aGF0
IHJlcHJlc2VudCB0aGUgYWN0dWFsIERPTSBub2Rlcy4gRE9NTm9kZSBpcyBhIGJhc2Ugbm9kZSBt
aXJyb3IgdHlwZS4gKi8KY2xhc3MgTm9kZSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJs
aWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdjaGlsZHJlbicgd2hpbGUgZ2Vu
ZXJhdGluZyBOb2RlLgogICAgY2xhc3MgQ2hpbGRyZW4gOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkg
ewogICAgcHJpdmF0ZToKICAgICAgICBDaGlsZHJlbigpIHt9CgogICAgcHVibGljOgogICAgICAg
IHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6Tm9kZT4qLyBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0aGlz
LT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENoaWxkcmVuPiBjcmVhdGUoKSB7CiAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2hp
bGRyZW4oKSk7CiAgICAgICAgfQogICAgfTsKCiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBu
YW1lICdhdHRyaWJ1dGVzJyB3aGlsZSBnZW5lcmF0aW5nIE5vZGUuCiAgICBjbGFzcyBBdHRyaWJ1
dGVzIDogcHVibGljIEluc3BlY3RvckFycmF5IHsKICAgIHByaXZhdGU6CiAgICAgICAgQXR0cmli
dXRlcygpIHt9CgogICAgcHVibGljOgogICAgICAgIHZvaWQgYWRkSXRlbShjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy0+cHVzaFN0cmluZyh2YWx1ZSk7CiAg
ICAgICAgfQoKICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxBdHRyaWJ1dGVzPiBjcmVhdGUoKSB7
CiAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXR0cmlidXRlcygpKTsKICAgICAgICB9
CiAgICB9OwoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBOb2Rl
SWRTZXQgPSAxIDw8IDAsCiAgICAgICAgTm9kZVR5cGVTZXQgPSAxIDw8IDEsCiAgICAgICAgTm9k
ZU5hbWVTZXQgPSAxIDw8IDIsCiAgICAgICAgTG9jYWxOYW1lU2V0ID0gMSA8PCAzLAogICAgICAg
IE5vZGVWYWx1ZVNldCA9IDEgPDwgNCwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoTm9kZUlkU2V0
IHwgTm9kZVR5cGVTZXQgfCBOb2RlTmFtZVNldCB8IExvY2FsTmFtZVNldCB8IE5vZGVWYWx1ZVNl
dCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAg
ICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAg
ICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUo
KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVm
UHRyPE5vZGU+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRF
ID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAg
ICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIE5v
ZGU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb2RlSWRTZXQ+JiBzZXRO
b2RlSWQoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIE5vZGVJZFNldCksIHByb3BlcnR5X25vZGVJZF9hbHJlYWR5X3NldCk7CiAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoIm5vZGVJZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxOb2RlSWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgTm9kZVR5cGVTZXQ+JiBzZXROb2RlVHlwZShpbnQgdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTm9kZVR5cGVTZXQpLCBwcm9wZXJ0eV9u
b2RlVHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoIm5v
ZGVUeXBlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vZGVUeXBlU2V0
PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5vZGVOYW1lU2V0PiYgc2V0
Tm9kZU5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBOb2RlTmFtZVNldCksIHByb3BlcnR5X25vZGVOYW1lX2FscmVh
ZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibm9kZU5hbWUiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tm9kZU5hbWVTZXQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTG9jYWxOYW1lU2V0PiYgc2V0TG9jYWxOYW1lKGNv
bnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgTG9jYWxOYW1lU2V0KSwgcHJvcGVydHlfbG9jYWxOYW1lX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibG9jYWxOYW1lIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPExvY2FsTmFtZVNldD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBOb2RlVmFsdWVTZXQ+JiBzZXROb2RlVmFsdWUoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBOb2RlVmFsdWVTZXQpLCBwcm9wZXJ0eV9ub2RlVmFsdWVfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJub2RlVmFsdWUiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8Tm9kZVZhbHVlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUmVmUHRyPE5vZGU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxOb2RlPio+KCZtX3Jlc3VsdCk7CiAg
ICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPE5vZGU+ICgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gUmVmUHRyPE5vZGU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoK
ICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Tm9kZT4g
cmVzdWx0ID0gTm9kZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0Tm9kZUlkKC4uLikKICAgICAq
ICAgICAuc2V0Tm9kZVR5cGUoLi4uKQogICAgICogICAgIC5zZXROb2RlTmFtZSguLi4pCiAgICAg
KiAgICAgLnNldExvY2FsTmFtZSguLi4pCiAgICAgKiAgICAgLnNldE5vZGVWYWx1ZSguLi4pOwog
ICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAg
ICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IE5vZGUoKSkpOwog
ICAgfQoKICAgIHZvaWQgc2V0Q2hpbGROb2RlQ291bnQoaW50IHZhbHVlKQogICAgewogICAgICAg
IHRoaXMtPnNldE51bWJlcigiY2hpbGROb2RlQ291bnQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9p
ZCBzZXRDaGlsZHJlbigvKlBhc3NSZWZQdHI8Q2hpbGRyZW4+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0
b3JBcnJheT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0QXJyYXkoImNoaWxkcmVuIiwg
dmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0QXR0cmlidXRlcygvKlBhc3NSZWZQdHI8QXR0cmli
dXRlcz4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgIHsKICAgICAgICB0
aGlzLT5zZXRBcnJheSgiYXR0cmlidXRlcyIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldERv
Y3VtZW50VVJMKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3Ry
aW5nKCJkb2N1bWVudFVSTCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFB1YmxpY0lkKGNv
bnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJwdWJsaWNJ
ZCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFN5c3RlbUlkKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJzeXN0ZW1JZCIsIHZhbHVlKTsKICAg
IH0KCiAgICB2b2lkIHNldEludGVybmFsU3Vic2V0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0U3RyaW5nKCJpbnRlcm5hbFN1YnNldCIsIHZhbHVlKTsKICAgIH0K
CiAgICB2b2lkIHNldFhtbFZlcnNpb24oY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAg
ICB0aGlzLT5zZXRTdHJpbmcoInhtbFZlcnNpb24iLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBz
ZXROYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0U3RyaW5n
KCJuYW1lIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2
YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInZhbHVlIiwgdmFsdWUpOwogICAg
fQogICAgdXNpbmcgSW5zcGVjdG9yT2JqZWN0OjpzZXRWYWx1ZTsKCn07CgovKiBET00gaW50ZXJh
Y3Rpb24gaXMgaW1wbGVtZW50ZWQgaW4gdGVybXMgb2YgbWlycm9yIG9iamVjdHMgdGhhdCByZXBy
ZXNlbnQgdGhlIGFjdHVhbCBET00gbm9kZXMuIERPTU5vZGUgaXMgYSBiYXNlIG5vZGUgbWlycm9y
IHR5cGUuICovCmNsYXNzIEV2ZW50TGlzdGVuZXIgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsK
cHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFR5cGVT
ZXQgPSAxIDw8IDAsCiAgICAgICAgVXNlQ2FwdHVyZVNldCA9IDEgPDwgMSwKICAgICAgICBJc0F0
dHJpYnV0ZVNldCA9IDEgPDwgMiwKICAgICAgICBOb2RlSWRTZXQgPSAxIDw8IDMsCiAgICAgICAg
SGFuZGxlckJvZHlTZXQgPSAxIDw8IDQsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFR5cGVTZXQg
fCBVc2VDYXB0dXJlU2V0IHwgSXNBdHRyaWJ1dGVTZXQgfCBOb2RlSWRTZXQgfCBIYW5kbGVyQm9k
eVNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7
CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoK
ICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3Rh
dGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxk
ZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNz
UmVmUHRyPEV2ZW50TGlzdGVuZXI+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJp
ZW5kIGNsYXNzIEV2ZW50TGlzdGVuZXI7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBUeXBlU2V0PiYgc2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR5cGVTZXQpLCBwcm9wZXJ0eV90eXBl
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIHZh
bHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBlU2V0PigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFVzZUNhcHR1cmVTZXQ+JiBzZXRVc2VDYXB0dXJlKGJv
b2wgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
VXNlQ2FwdHVyZVNldCksIHByb3BlcnR5X3VzZUNhcHR1cmVfYWxyZWFkeV9zZXQpOwogICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0Qm9vbGVhbigidXNlQ2FwdHVyZSIsIHZhbHVlKTsKICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxVc2VDYXB0dXJlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IElzQXR0cmlidXRlU2V0PiYgc2V0SXNBdHRyaWJ1dGUoYm9vbCB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJc0F0dHJp
YnV0ZVNldCksIHByb3BlcnR5X2lzQXR0cmlidXRlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldEJvb2xlYW4oImlzQXR0cmlidXRlIiwgdmFsdWUpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPElzQXR0cmlidXRlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IE5vZGVJZFNldD4mIHNldE5vZGVJZChpbnQgdmFsdWUpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTm9kZUlkU2V0KSwgcHJvcGVydHlf
bm9kZUlkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigibm9k
ZUlkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vZGVJZFNldD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBIYW5kbGVyQm9keVNldD4mIHNldEhh
bmRsZXJCb2R5KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgSGFuZGxlckJvZHlTZXQpLCBwcm9wZXJ0eV9oYW5kbGVyQm9k
eV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImhhbmRsZXJC
b2R5IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEhhbmRsZXJCb2R5U2V0
PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEV2ZW50TGlzdGVuZXI+JiAo
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRz
U2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PFJlZlB0cjxFdmVudExpc3RlbmVyPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAg
ICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEV2ZW50TGlzdGVuZXI+ICgpCiAgICAgICAgewogICAg
ICAgICAgICByZXR1cm4gUmVmUHRyPEV2ZW50TGlzdGVuZXI+KCp0aGlzKTsKICAgICAgICB9CiAg
ICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gcmVzdWx0ID0gRXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKCkKICAgICAqICAg
ICAuc2V0VHlwZSguLi4pCiAgICAgKiAgICAgLnNldFVzZUNhcHR1cmUoLi4uKQogICAgICogICAg
IC5zZXRJc0F0dHJpYnV0ZSguLi4pCiAgICAgKiAgICAgLnNldE5vZGVJZCguLi4pCiAgICAgKiAg
ICAgLnNldEhhbmRsZXJCb2R5KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmll
bGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0
PihhZG9wdFJlZihuZXcgRXZlbnRMaXN0ZW5lcigpKSk7CiAgICB9CgogICAgdm9pZCBzZXRMb2Nh
dGlvbigvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpMb2NhdGlvbj4qLyBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2Jq
ZWN0KCJsb2NhdGlvbiIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIEEgc3RydWN0dXJlIGhvbGRpbmcg
YW4gUkdCQSBjb2xvci4gKi8KLy8gVHlwZSBvcmlnaW5hbGx5IHdhcyBuYW1lZCAnUkdCQScuCmNs
YXNzIFJnYmEgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAg
ICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFJTZXQgPSAxIDw8IDAsCiAgICAgICAgR1Nl
dCA9IDEgPDwgMSwKICAgICAgICBCU2V0ID0gMSA8PCAyLAogICAgICAgIEFsbEZpZWxkc1NldCA9
IChSU2V0IHwgR1NldCB8IEJTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAg
IGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRl
cnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxSZ2JhPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25v
bl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAg
ICAgIGZyaWVuZCBjbGFzcyBSZ2JhOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgUlNldD4mIHNldFIoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFJTZXQpLCBwcm9wZXJ0eV9yX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldE51bWJlcigiciIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxSU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IEdTZXQ+
JiBzZXRHKGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBHU2V0KSwgcHJvcGVydHlfZ19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXROdW1iZXIoImciLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
R1NldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBCU2V0PiYgc2V0Qihp
bnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
QlNldCksIHByb3BlcnR5X2JfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
TnVtYmVyKCJiIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEJTZXQ+KCk7
CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8UmdiYT4mICgpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9p
c19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRy
PFJnYmE+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQ
dHI8UmdiYT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8UmdiYT4oKnRo
aXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKICAgICAqIFJlZlB0cjxSZ2JhPiByZXN1bHQgPSBSZ2JhOjpjcmVhdGUoKQogICAgICogICAg
IC5zZXRSKC4uLikKICAgICAqICAgICAuc2V0RyguLi4pCiAgICAgKiAgICAgLnNldEIoLi4uKTsK
ICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAg
ICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBSZ2JhKCkpKTsK
ICAgIH0KCiAgICB2b2lkIHNldEEoZG91YmxlIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNl
dE51bWJlcigiYSIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIENvbmZpZ3VyYXRpb24gZGF0YSBmb3Ig
dGhlIGhpZ2hsaWdodGluZyBvZiBwYWdlIGVsZW1lbnRzLiAqLwpjbGFzcyBIaWdobGlnaHRDb25m
aWcgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAg
Tm9GaWVsZHNTZXQgPSAwLAogICAgICAgIEFsbEZpZWxkc1NldCA9IDAKICAgIH07CgogICAgdGVt
cGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQg
U1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRo
aXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPEhpZ2hsaWdodENvbmZp
Zz4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9G
aWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAg
IG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgSGlnaGxpZ2h0
Q29uZmlnOwogICAgcHVibGljOgoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8SGlnaGxpZ2h0Q29u
ZmlnPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFs
bEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVp
bnRlcnByZXRfY2FzdDxSZWZQdHI8SGlnaGxpZ2h0Q29uZmlnPio+KCZtX3Jlc3VsdCk7CiAgICAg
ICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPEhpZ2hsaWdodENvbmZpZz4gKCkKICAg
ICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8SGlnaGxpZ2h0Q29uZmlnPigqdGhpcyk7
CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgog
ICAgICogUmVmUHRyPEhpZ2hsaWdodENvbmZpZz4gcmVzdWx0ID0gSGlnaGxpZ2h0Q29uZmlnOjpj
cmVhdGUoKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgp
CiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBI
aWdobGlnaHRDb25maWcoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0U2hvd0luZm8oYm9vbCB2YWx1
ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRCb29sZWFuKCJzaG93SW5mbyIsIHZhbHVlKTsKICAg
IH0KCiAgICB2b2lkIHNldENvbnRlbnRDb2xvcigvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRP
TTo6UmdiYT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAg
ICAgdGhpcy0+c2V0T2JqZWN0KCJjb250ZW50Q29sb3IiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9p
ZCBzZXRQYWRkaW5nQ29sb3IoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET006OlJnYmE+Ki8g
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNl
dE9iamVjdCgicGFkZGluZ0NvbG9yIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0Qm9yZGVy
Q29sb3IoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET006OlJnYmE+Ki8gUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldE9iamVjdCgiYm9y
ZGVyQ29sb3IiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRNYXJnaW5Db2xvcigvKlBhc3NS
ZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6UmdiYT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJtYXJnaW5Db2xvciIsIHZh
bHVlKTsKICAgIH0KfTsKCn0gLy8gRE9NCgpuYW1lc3BhY2UgQ1NTIHsKLyogVGhpcyBvYmplY3Qg
aWRlbnRpZmllcyBhIENTUyBzdHlsZSBpbiBhIHVuaXF1ZSB3YXkuICovCmNsYXNzIENTU1N0eWxl
SWQgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAg
Tm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFN0eWxlU2hlZXRJZFNldCA9IDEgPDwgMCwKICAgICAg
ICBPcmRpbmFsU2V0ID0gMSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChTdHlsZVNoZWV0
SWRTZXQgfCBPcmRpbmFsU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBj
bGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwg
U1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyKFBhc3NSZWZQdHI8Q1NTU3R5bGVJZD4gcHRyKQogICAgICAgIHsKICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9p
bl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0K
ICAgICAgICBmcmllbmQgY2xhc3MgQ1NTU3R5bGVJZDsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFN0eWxlU2hlZXRJZFNldD4mIHNldFN0eWxlU2hlZXRJZChjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFN0eWxlU2hlZXRJZFNldCksIHByb3BlcnR5X3N0eWxlU2hlZXRJZF9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0eWxlU2hlZXRJZCIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdHlsZVNoZWV0SWRTZXQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgT3JkaW5hbFNldD4mIHNldE9yZGluYWwoaW50IHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9yZGluYWxT
ZXQpLCBwcm9wZXJ0eV9vcmRpbmFsX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE51bWJlcigib3JkaW5hbCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxPcmRpbmFsU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENTU1N0
eWxlSWQ+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
QWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NTdHlsZUlkPio+KCZtX3Jlc3VsdCk7CiAgICAgICAg
fQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENTU1N0eWxlSWQ+ICgpCiAgICAgICAgewog
ICAgICAgICAgICByZXR1cm4gUmVmUHRyPENTU1N0eWxlSWQ+KCp0aGlzKTsKICAgICAgICB9CiAg
ICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8
Q1NTU3R5bGVJZD4gcmVzdWx0ID0gQ1NTU3R5bGVJZDo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0
U3R5bGVTaGVldElkKC4uLikKICAgICAqICAgICAuc2V0T3JkaW5hbCguLi4pOwogICAgICovCiAg
ICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1
cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IENTU1N0eWxlSWQoKSkpOwogICAg
fQp9OwoKLyogVGhpcyBvYmplY3QgaWRlbnRpZmllcyBhIENTUyBydWxlIGluIGEgdW5pcXVlIHdh
eS4gKi8KY2xhc3MgQ1NTUnVsZUlkIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoK
ICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBTdHlsZVNoZWV0SWRT
ZXQgPSAxIDw8IDAsCiAgICAgICAgT3JkaW5hbFNldCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAoU3R5bGVTaGVldElkU2V0IHwgT3JkaW5hbFNldCkKICAgIH07CgogICAgdGVtcGxh
dGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENTU1J1bGVJZD4gcHRyKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQs
IGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0
ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NTUnVsZUlkOwogICAgcHVi
bGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3R5bGVTaGVldElkU2V0PiYgc2V0U3R5bGVT
aGVldElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgU3R5bGVTaGVldElkU2V0KSwgcHJvcGVydHlfc3R5bGVTaGVldElk
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic3R5bGVTaGVl
dElkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFN0eWxlU2hlZXRJZFNl
dD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPcmRpbmFsU2V0PiYgc2V0
T3JkaW5hbChpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgT3JkaW5hbFNldCksIHByb3BlcnR5X29yZGluYWxfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJvcmRpbmFsIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPE9yZGluYWxTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVy
YXRvciBSZWZQdHI8Q1NTUnVsZUlkPiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8Q1NTUnVsZUlkPio+KCZtX3Jl
c3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENTU1J1bGVJZD4g
KCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q1NTUnVsZUlkPigqdGhpcyk7
CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgog
ICAgICogUmVmUHRyPENTU1J1bGVJZD4gcmVzdWx0ID0gQ1NTUnVsZUlkOjpjcmVhdGUoKQogICAg
ICogICAgIC5zZXRTdHlsZVNoZWV0SWQoLi4uKQogICAgICogICAgIC5zZXRPcmRpbmFsKC4uLik7
CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewog
ICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgQ1NTUnVsZUlk
KCkpKTsKICAgIH0KfTsKCi8qIENTUyBydWxlIGNvbGxlY3Rpb24gZm9yIGEgc2luZ2xlIHBzZXVk
byBzdHlsZS4gKi8KY2xhc3MgUHNldWRvSWRSdWxlcyA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qg
ewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdydWxlcycgd2hpbGUg
Z2VuZXJhdGluZyBQc2V1ZG9JZFJ1bGVzLgogICAgY2xhc3MgUnVsZXMgOiBwdWJsaWMgSW5zcGVj
dG9yQXJyYXkgewogICAgcHJpdmF0ZToKICAgICAgICBSdWxlcygpIHt9CgogICAgcHVibGljOgog
ICAgICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTUnVs
ZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFJ1bGVzPiBjcmVhdGUoKSB7CiAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgUnVsZXMoKSk7CiAgICAgICAgfQogICAgfTsKCiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxk
c1NldCA9IDAsCiAgICAgICAgUHNldWRvSWRTZXQgPSAxIDw8IDAsCiAgICAgICAgUnVsZXNTZXQg
PSAxIDw8IDEsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFBzZXVkb0lkU2V0IHwgUnVsZXNTZXQp
CiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAg
cHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAg
ICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkK
ICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0
cjxQc2V1ZG9JZFJ1bGVzPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRl
KTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBj
bGFzcyBQc2V1ZG9JZFJ1bGVzOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
UHNldWRvSWRTZXQ+JiBzZXRQc2V1ZG9JZChpbnQgdmFsdWUpCiAgICAgICAgewogICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgUHNldWRvSWRTZXQpLCBwcm9wZXJ0eV9wc2V1ZG9J
ZF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIoInBzZXVkb0lk
IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFBzZXVkb0lkU2V0PigpOwog
ICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFJ1bGVzU2V0PiYgc2V0UnVsZXMoLypQ
YXNzUmVmUHRyPFJ1bGVzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFJ1bGVzU2V0KSwgcHJv
cGVydHlfcnVsZXNfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXko
InJ1bGVzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFJ1bGVzU2V0Pigp
OwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFBzZXVkb0lkUnVsZXM+JiAoKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0
LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PFJlZlB0cjxQc2V1ZG9JZFJ1bGVzPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAg
ICBvcGVyYXRvciBQYXNzUmVmUHRyPFBzZXVkb0lkUnVsZXM+ICgpCiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm4gUmVmUHRyPFBzZXVkb0lkUnVsZXM+KCp0aGlzKTsKICAgICAgICB9CiAgICB9
OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8UHNl
dWRvSWRSdWxlcz4gcmVzdWx0ID0gUHNldWRvSWRSdWxlczo6Y3JlYXRlKCkKICAgICAqICAgICAu
c2V0UHNldWRvSWQoLi4uKQogICAgICogICAgIC5zZXRSdWxlcyguLi4pOwogICAgICovCiAgICBz
dGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4g
QnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFBzZXVkb0lkUnVsZXMoKSkpOwogICAg
fQp9OwoKLyogQ1NTIHJ1bGUgY29sbGVjdGlvbiBmb3IgYSBzaW5nbGUgcHNldWRvIHN0eWxlLiAq
LwpjbGFzcyBJbmhlcml0ZWRTdHlsZUVudHJ5IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1
YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ21hdGNoZWRDU1NSdWxlcycg
d2hpbGUgZ2VuZXJhdGluZyBJbmhlcml0ZWRTdHlsZUVudHJ5LgogICAgY2xhc3MgTWF0Y2hlZENT
U1J1bGVzIDogcHVibGljIEluc3BlY3RvckFycmF5IHsKICAgIHByaXZhdGU6CiAgICAgICAgTWF0
Y2hlZENTU1J1bGVzKCkge30KCiAgICBwdWJsaWM6CiAgICAgICAgdm9pZCBhZGRJdGVtKC8qUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFs
dWUpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8TWF0Y2hlZENTU1J1bGVz
PiBjcmVhdGUoKSB7CiAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWF0Y2hlZENTU1J1
bGVzKCkpOwogICAgICAgIH0KICAgIH07CgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQg
PSAwLAogICAgICAgIE1hdGNoZWRDU1NSdWxlc1NldCA9IDEgPDwgMCwKICAgICAgICBBbGxGaWVs
ZHNTZXQgPSAoTWF0Y2hlZENTU1J1bGVzU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RB
VEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVy
PFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
KnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8SW5oZXJpdGVkU3R5bGVFbnRyeT4gcHRyKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQs
IGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0
ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgSW5oZXJpdGVkU3R5bGVFbnRy
eTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1hdGNoZWRDU1NSdWxlc1Nl
dD4mIHNldE1hdGNoZWRDU1NSdWxlcygvKlBhc3NSZWZQdHI8TWF0Y2hlZENTU1J1bGVzPiovIFBh
c3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIE1hdGNoZWRDU1NSdWxlc1NldCksIHByb3BlcnR5X21hdGNo
ZWRDU1NSdWxlc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgi
bWF0Y2hlZENTU1J1bGVzIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1h
dGNoZWRDU1NSdWxlc1NldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxJ
bmhlcml0ZWRTdHlsZUVudHJ5PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8SW5oZXJpdGVkU3R5bGVFbnRyeT4q
PigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxJbmhl
cml0ZWRTdHlsZUVudHJ5PiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxJ
bmhlcml0ZWRTdHlsZUVudHJ5PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAg
ICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPEluaGVyaXRlZFN0eWxlRW50
cnk+IHJlc3VsdCA9IEluaGVyaXRlZFN0eWxlRW50cnk6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNl
dE1hdGNoZWRDU1NSdWxlcyguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxk
c1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4o
YWRvcHRSZWYobmV3IEluaGVyaXRlZFN0eWxlRW50cnkoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0
SW5saW5lU3R5bGUoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiovIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRP
YmplY3QoImlubGluZVN0eWxlIiwgdmFsdWUpOwogICAgfQp9OwoKLyogQ1NTIHN0eWxlIGluZm9y
bWF0aW9uIGZvciBhIERPTSBzdHlsZSBhdHRyaWJ1dGUuICovCmNsYXNzIENTU1N0eWxlQXR0cmli
dXRlIDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0gewogICAgICAg
IE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBOYW1lU2V0ID0gMSA8PCAwLAogICAgICAgIFN0eWxl
U2V0ID0gMSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChOYW1lU2V0IHwgU3R5bGVTZXQp
CiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAg
cHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAg
ICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkK
ICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNU
QVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0
cjxDU1NTdHlsZUF0dHJpYnV0ZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9z
dGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmll
bmQgY2xhc3MgQ1NTU3R5bGVBdHRyaWJ1dGU7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBOYW1lU2V0PiYgc2V0TmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5hbWVTZXQpLCBwcm9wZXJ0eV9u
YW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibmFtZSIs
IHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOYW1lU2V0PigpOwogICAgICAg
IH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0eWxlU2V0PiYgc2V0U3R5bGUoLypQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1N0eWxlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBTdHlsZVNldCksIHByb3BlcnR5X3N0eWxlX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldE9iamVjdCgic3R5bGUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8U3R5bGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NT
U3R5bGVBdHRyaWJ1dGU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NTdHlsZUF0dHJpYnV0ZT4qPigmbV9y
ZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NTdHlsZUF0
dHJpYnV0ZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8Q1NTU3R5bGVB
dHRyaWJ1dGU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTU3R5bGVBdHRyaWJ1dGU+IHJlc3VsdCA9
IENTU1N0eWxlQXR0cmlidXRlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXROYW1lKC4uLikKICAg
ICAqICAgICAuc2V0U3R5bGUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
KGFkb3B0UmVmKG5ldyBDU1NTdHlsZUF0dHJpYnV0ZSgpKSk7CiAgICB9Cn07CgovKiBDU1Mgc3R5
bGVzaGVldCBtZXRhaW5mb3JtYXRpb24uICovCmNsYXNzIENTU1N0eWxlU2hlZXRIZWFkZXIgOiBw
dWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7CiAgICAgICAgTm9GaWVs
ZHNTZXQgPSAwLAogICAgICAgIFN0eWxlU2hlZXRJZFNldCA9IDEgPDwgMCwKICAgICAgICBTb3Vy
Y2VVUkxTZXQgPSAxIDw8IDEsCiAgICAgICAgVGl0bGVTZXQgPSAxIDw8IDIsCiAgICAgICAgRGlz
YWJsZWRTZXQgPSAxIDw8IDMsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFN0eWxlU2hlZXRJZFNl
dCB8IFNvdXJjZVVSTFNldCB8IFRpdGxlU2V0IHwgRGlzYWJsZWRTZXQpCiAgICB9OwoKICAgIHRl
bXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50
IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0
aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0
SGVhZGVyPiBwdHIpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAg
ICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDU1NT
dHlsZVNoZWV0SGVhZGVyOwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3R5
bGVTaGVldElkU2V0PiYgc2V0U3R5bGVTaGVldElkKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAg
ICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3R5bGVTaGVldElkU2V0
KSwgcHJvcGVydHlfc3R5bGVTaGVldElkX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygic3R5bGVTaGVldElkIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFN0eWxlU2hlZXRJZFNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBTb3VyY2VVUkxTZXQ+JiBzZXRTb3VyY2VVUkwoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
ICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTb3VyY2VVUkxT
ZXQpLCBwcm9wZXJ0eV9zb3VyY2VVUkxfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJzb3VyY2VVUkwiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8U291cmNlVVJMU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IFRpdGxlU2V0PiYgc2V0VGl0bGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUaXRsZVNldCksIHByb3BlcnR5X3RpdGxl
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidGl0bGUiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGl0bGVTZXQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRGlzYWJsZWRTZXQ+JiBzZXREaXNhYmxlZChib29s
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERp
c2FibGVkU2V0KSwgcHJvcGVydHlfZGlzYWJsZWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0Qm9vbGVhbigiZGlzYWJsZWQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8RGlzYWJsZWRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBS
ZWZQdHI8Q1NTU3R5bGVTaGVldEhlYWRlcj4mICgpCiAgICAgICAgewogICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwog
ICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPENTU1N0eWxlU2hlZXRI
ZWFkZXI+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQ
dHI8Q1NTU3R5bGVTaGVldEhlYWRlcj4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBS
ZWZQdHI8Q1NTU3R5bGVTaGVldEhlYWRlcj4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAg
LyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDU1NTdHlsZVNo
ZWV0SGVhZGVyPiByZXN1bHQgPSBDU1NTdHlsZVNoZWV0SGVhZGVyOjpjcmVhdGUoKQogICAgICog
ICAgIC5zZXRTdHlsZVNoZWV0SWQoLi4uKQogICAgICogICAgIC5zZXRTb3VyY2VVUkwoLi4uKQog
ICAgICogICAgIC5zZXRUaXRsZSguLi4pCiAgICAgKiAgICAgLnNldERpc2FibGVkKC4uLik7CiAg
ICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAg
ICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgQ1NTU3R5bGVTaGVl
dEhlYWRlcigpKSk7CiAgICB9Cn07CgovKiBDU1Mgc3R5bGVzaGVldCBjb250ZW50cy4gKi8KY2xh
c3MgQ1NTU3R5bGVTaGVldEJvZHkgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgog
ICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAncnVsZXMnIHdoaWxlIGdlbmVyYXRpbmcg
Q1NTU3R5bGVTaGVldEJvZHkuCiAgICBjbGFzcyBSdWxlcyA6IHB1YmxpYyBJbnNwZWN0b3JBcnJh
eSB7CiAgICBwcml2YXRlOgogICAgICAgIFJ1bGVzKCkge30KCiAgICBwdWJsaWM6CiAgICAgICAg
dm9pZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPiovIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHRo
aXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8UnVsZXM+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSdWxl
cygpKTsKICAgICAgICB9CiAgICB9OwoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKICAgICAgICBTdHlsZVNoZWV0SWRTZXQgPSAxIDw8IDAsCiAgICAgICAgUnVsZXNTZXQgPSAx
IDw8IDEsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFN0eWxlU2hlZXRJZFNldCB8IFJ1bGVzU2V0
KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAg
IHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAg
ICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgp
CiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxT
VEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQ
dHI8Q1NTU3R5bGVTaGVldEJvZHk+IHB0cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRf
c3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJp
ZW5kIGNsYXNzIENTU1N0eWxlU2hlZXRCb2R5OwogICAgcHVibGljOgoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgU3R5bGVTaGVldElkU2V0PiYgc2V0U3R5bGVTaGVldElkKGNvbnN0IFN0cmluZyYg
dmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3R5
bGVTaGVldElkU2V0KSwgcHJvcGVydHlfc3R5bGVTaGVldElkX2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic3R5bGVTaGVldElkIiwgdmFsdWUpOwogICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPFN0eWxlU2hlZXRJZFNldD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBSdWxlc1NldD4mIHNldFJ1bGVzKC8qUGFzc1JlZlB0cjxSdWxl
cz4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBSdWxlc1NldCksIHByb3BlcnR5X3J1bGVzX2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJydWxlcyIsIHZhbHVl
KTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxSdWxlc1NldD4oKTsKICAgICAgICB9Cgog
ICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDU1NTdHlsZVNoZWV0Qm9keT4mICgpCiAgICAgICAgewog
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9p
c19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRy
PENTU1N0eWxlU2hlZXRCb2R5Pio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoKICAgICAgICBvcGVy
YXRvciBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXRCb2R5PiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuIFJlZlB0cjxDU1NTdHlsZVNoZWV0Qm9keT4oKnRoaXMpOwogICAgICAgIH0KICAg
IH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxD
U1NTdHlsZVNoZWV0Qm9keT4gcmVzdWx0ID0gQ1NTU3R5bGVTaGVldEJvZHk6OmNyZWF0ZSgpCiAg
ICAgKiAgICAgLnNldFN0eWxlU2hlZXRJZCguLi4pCiAgICAgKiAgICAgLnNldFJ1bGVzKC4uLik7
CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewog
ICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgQ1NTU3R5bGVT
aGVldEJvZHkoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygidGV4dCIsIHZhbHVlKTsKICAgIH0KfTsK
Ci8qIENTUyBydWxlIHJlcHJlc2VudGF0aW9uLiAqLwpjbGFzcyBDU1NSdWxlIDogcHVibGljIElu
c3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUg
J29yaWdpbicgd2hpbGUgZ2VuZXJhdGluZyBDU1NSdWxlLgogICAgc3RydWN0IE9yaWdpbiB7CiAg
ICAgICAgZW51bSBFbnVtIHsKICAgICAgICAgICAgVXNlciA9IDQwLAogICAgICAgICAgICBVc2Vy
X2FnZW50ID0gNDEsCiAgICAgICAgICAgIEluc3BlY3RvciA9IDQyLAogICAgICAgICAgICBSZWd1
bGFyID0gNDMsCiAgICAgICAgfTsKICAgIH07IC8vIHN0cnVjdCBPcmlnaW4KCiAgICAvLyBOYW1l
ZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdtZWRpYScgd2hpbGUgZ2VuZXJhdGluZyBDU1NSdWxlLgog
ICAgY2xhc3MgTWVkaWEgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgcHJpdmF0ZToKICAg
ICAgICBNZWRpYSgpIHt9CgogICAgcHVibGljOgogICAgICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NS
ZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTTWVkaWE+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1
ZSk7CiAgICAgICAgfQoKICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYT4gY3JlYXRlKCkg
ewogICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1lZGlhKCkpOwogICAgICAgIH0KICAg
IH07CgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFNlbGVjdG9y
VGV4dFNldCA9IDEgPDwgMCwKICAgICAgICBTb3VyY2VMaW5lU2V0ID0gMSA8PCAxLAogICAgICAg
IE9yaWdpblNldCA9IDEgPDwgMiwKICAgICAgICBTdHlsZVNldCA9IDEgPDwgMywKICAgICAgICBB
bGxGaWVsZHNTZXQgPSAoU2VsZWN0b3JUZXh0U2V0IHwgU291cmNlTGluZVNldCB8IE9yaWdpblNl
dCB8IFN0eWxlU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBC
dWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9y
ZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4m
IGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nh
c3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyKFBhc3NSZWZQdHI8Q1NTUnVsZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBm
cmllbmQgY2xhc3MgQ1NTUnVsZTsKICAgIHB1YmxpYzoKCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IFNlbGVjdG9yVGV4dFNldD4mIHNldFNlbGVjdG9yVGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNlbGVjdG9yVGV4
dFNldCksIHByb3BlcnR5X3NlbGVjdG9yVGV4dF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoInNlbGVjdG9yVGV4dCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxTZWxlY3RvclRleHRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgU291cmNlTGluZVNldD4mIHNldFNvdXJjZUxpbmUoaW50IHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFNvdXJjZUxpbmVTZXQp
LCBwcm9wZXJ0eV9zb3VyY2VMaW5lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE51bWJlcigic291cmNlTGluZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxTb3VyY2VMaW5lU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IE9yaWdpblNldD4mIHNldE9yaWdpbihPcmlnaW46OkVudW0gdmFsdWUpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgT3JpZ2luU2V0KSwgcHJvcGVydHlfb3Jp
Z2luX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygib3JpZ2lu
IiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxPcmlnaW5TZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgT3Jp
Z2luU2V0PiYgc2V0T3JpZ2luKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgT3JpZ2luU2V0KSwgcHJvcGVydHlfb3JpZ2lu
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygib3JpZ2luIiwg
dmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9yaWdpblNldD4oKTsKICAgICAg
ICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdHlsZVNldD4mIHNldFN0eWxlKC8qUGFzc1Jl
ZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NTdHlsZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgU3R5bGVTZXQpLCBwcm9wZXJ0eV9zdHlsZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRPYmplY3QoInN0eWxlIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPFN0eWxlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPENT
U1J1bGU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
QWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NSdWxlPio+KCZtX3Jlc3VsdCk7CiAgICAgICAgfQoK
ICAgICAgICBvcGVyYXRvciBQYXNzUmVmUHRyPENTU1J1bGU+ICgpCiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm4gUmVmUHRyPENTU1J1bGU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAg
IC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTUnVsZT4g
cmVzdWx0ID0gQ1NTUnVsZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U2VsZWN0b3JUZXh0KC4u
LikKICAgICAqICAgICAuc2V0U291cmNlTGluZSguLi4pCiAgICAgKiAgICAgLnNldE9yaWdpbigu
Li4pCiAgICAgKiAgICAgLnNldFN0eWxlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVy
PE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmll
bGRzU2V0PihhZG9wdFJlZihuZXcgQ1NTUnVsZSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRSdWxl
SWQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU1J1bGVJZD4qLyBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJy
dWxlSWQiLCB2YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRTb3VyY2VVUkwoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRTdHJpbmcoInNvdXJjZVVSTCIsIHZhbHVl
KTsKICAgIH0KCiAgICB2b2lkIHNldFNlbGVjdG9yUmFuZ2UoLypQYXNzUmVmUHRyPFR5cGVCdWls
ZGVyOjpDU1M6OlNvdXJjZVJhbmdlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1
ZSkKICAgIHsKICAgICAgICB0aGlzLT5zZXRPYmplY3QoInNlbGVjdG9yUmFuZ2UiLCB2YWx1ZSk7
CiAgICB9CgogICAgdm9pZCBzZXRNZWRpYSgvKlBhc3NSZWZQdHI8TWVkaWE+Ki8gUGFzc1JlZlB0
cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0QXJyYXkoIm1l
ZGlhIiwgdmFsdWUpOwogICAgfQp9OwoKLyogVGV4dCByYW5nZSB3aXRoaW4gYSByZXNvdXJjZS4g
Ki8KY2xhc3MgU291cmNlUmFuZ2UgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgog
ICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFN0YXJ0U2V0ID0gMSA8
PCAwLAogICAgICAgIEVuZFNldCA9IDEgPDwgMSwKICAgICAgICBBbGxGaWVsZHNTZXQgPSAoU3Rh
cnRTZXQgfCBFbmRTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNsYXNz
IEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBt
X3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQ
PiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAgIEJ1
aWxkZXIoUGFzc1JlZlB0cjxTb3VyY2VSYW5nZT4gcHRyKQogICAgICAgIHsKICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9u
b25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAg
ICAgICBmcmllbmQgY2xhc3MgU291cmNlUmFuZ2U7CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBTdGFydFNldD4mIHNldFN0YXJ0KGludCB2YWx1ZSkKICAgICAgICB7CiAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdGFydFNldCksIHByb3BlcnR5X3N0YXJ0
X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigic3RhcnQiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3RhcnRTZXQ+KCk7CiAgICAgICAg
fQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRW5kU2V0PiYgc2V0RW5kKGludCB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBFbmRTZXQpLCBwcm9w
ZXJ0eV9lbmRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0TnVtYmVyKCJl
bmQiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RW5kU2V0PigpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRyPFNvdXJjZVJhbmdlPiYgKCkKICAgICAgICB7
CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0
X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQ
dHI8U291cmNlUmFuZ2U+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9y
IFBhc3NSZWZQdHI8U291cmNlUmFuZ2U+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4g
UmVmUHRyPFNvdXJjZVJhbmdlPigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAvKgogICAg
ICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFNvdXJjZVJhbmdlPiByZXN1
bHQgPSBTb3VyY2VSYW5nZTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0U3RhcnQoLi4uKQogICAg
ICogICAgIC5zZXRFbmQoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNT
ZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFk
b3B0UmVmKG5ldyBTb3VyY2VSYW5nZSgpKSk7CiAgICB9Cn07CgpjbGFzcyBDU1NDb21wdXRlZFN0
eWxlUHJvcGVydHkgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgZW51bSB7
CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIE5hbWVTZXQgPSAxIDw8IDAsCiAgICAg
ICAgVmFsdWVTZXQgPSAxIDw8IDEsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKE5hbWVTZXQgfCBW
YWx1ZVNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRl
ciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0
OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0
U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQ
YXNzUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4gcHRyKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRl
ZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwogICAgICAg
IH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5OwogICAgcHVi
bGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTmFtZVNldD4mIHNldE5hbWUoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBOYW1lU2V0KSwgcHJvcGVydHlfbmFtZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoIm5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8TmFtZVNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZVNl
dD4mIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVTZXQpLCBwcm9wZXJ0eV92YWx1ZV9hbHJlYWR5
X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInZhbHVlIiwgdmFsdWUpOwog
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlU2V0PigpOwogICAgICAgIH0KCiAgICAg
ICAgb3BlcmF0b3IgUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4mICgpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3Vs
dF9pc19ub3RfcmVhZHkpOwogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVm
UHRyPENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAg
ICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+ICgpCiAg
ICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVmUHRyPENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0
eT4oKnRoaXMpOwogICAgICAgIH0KICAgIH07CgogICAgLyoKICAgICAqIFN5bnRoZXRpYyBjb25z
dHJ1Y3RvcjoKICAgICAqIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+IHJlc3VsdCA9
IENTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eTo6Y3JlYXRlKCkKICAgICAqICAgICAuc2V0TmFtZSgu
Li4pCiAgICAgKiAgICAgLnNldFZhbHVlKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVy
PE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmll
bGRzU2V0PihhZG9wdFJlZihuZXcgQ1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5KCkpKTsKICAgIH0K
fTsKCi8qIENTUyBzdHlsZSByZXByZXNlbnRhdGlvbi4gKi8KY2xhc3MgQ1NTU3R5bGUgOiBwdWJs
aWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkg
bmFtZSAnY3NzUHJvcGVydGllcycgd2hpbGUgZ2VuZXJhdGluZyBDU1NTdHlsZS4KICAgIGNsYXNz
IENzc1Byb3BlcnRpZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgcHJpdmF0ZToKICAg
ICAgICBDc3NQcm9wZXJ0aWVzKCkge30KCiAgICBwdWJsaWM6CiAgICAgICAgdm9pZCBhZGRJdGVt
KC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0eT4qLyBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLT5wdXNo
T2JqZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENzc1By
b3BlcnRpZXM+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDc3NQ
cm9wZXJ0aWVzKCkpOwogICAgICAgIH0KICAgIH07CgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVy
dHkgbmFtZSAnc2hvcnRoYW5kRW50cmllcycgd2hpbGUgZ2VuZXJhdGluZyBDU1NTdHlsZS4KICAg
IGNsYXNzIFNob3J0aGFuZEVudHJpZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewogICAgcHJp
dmF0ZToKICAgICAgICBTaG9ydGhhbmRFbnRyaWVzKCkge30KCiAgICBwdWJsaWM6CiAgICAgICAg
dm9pZCBhZGRJdGVtKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICB7
CiAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwogICAgICAgIH0KCiAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8U2hvcnRoYW5kRW50cmllcz4gY3JlYXRlKCkgewogICAgICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFNob3J0aGFuZEVudHJpZXMoKSk7CiAgICAgICAgfQogICAg
fTsKCiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgQ3NzUHJvcGVy
dGllc1NldCA9IDEgPDwgMCwKICAgICAgICBTaG9ydGhhbmRFbnRyaWVzU2V0ID0gMSA8PCAxLAog
ICAgICAgIFdpZHRoU2V0ID0gMSA8PCAyLAogICAgICAgIEhlaWdodFNldCA9IDEgPDwgMywKICAg
ICAgICBBbGxGaWVsZHNTZXQgPSAoQ3NzUHJvcGVydGllc1NldCB8IFNob3J0aGFuZEVudHJpZXNT
ZXQgfCBXaWR0aFNldCB8IEhlaWdodFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50IFNUQVRF
PgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxT
VEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENTU1N0eWxlPiBwdHIpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVh
dGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAg
ICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDU1NTdHlsZTsKICAgIHB1YmxpYzoKCiAgICAgICAg
QnVpbGRlcjxTVEFURSB8IENzc1Byb3BlcnRpZXNTZXQ+JiBzZXRDc3NQcm9wZXJ0aWVzKC8qUGFz
c1JlZlB0cjxDc3NQcm9wZXJ0aWVzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVl
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENzc1Byb3Bl
cnRpZXNTZXQpLCBwcm9wZXJ0eV9jc3NQcm9wZXJ0aWVzX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldEFycmF5KCJjc3NQcm9wZXJ0aWVzIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPENzc1Byb3BlcnRpZXNTZXQ+KCk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgU2hvcnRoYW5kRW50cmllc1NldD4mIHNldFNob3J0aGFuZEVudHJp
ZXMoLypQYXNzUmVmUHRyPFNob3J0aGFuZEVudHJpZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgU2hvcnRoYW5kRW50cmllc1NldCksIHByb3BlcnR5X3Nob3J0aGFuZEVudHJpZXNfYWxyZWFk
eV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoInNob3J0aGFuZEVudHJpZXMi
LCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U2hvcnRoYW5kRW50cmllc1Nl
dD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBXaWR0aFNldD4mIHNldFdp
ZHRoKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgV2lkdGhTZXQpLCBwcm9wZXJ0eV93aWR0aF9hbHJlYWR5X3NldCk7CiAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIndpZHRoIiwgdmFsdWUpOwogICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPFdpZHRoU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRl
cjxTVEFURSB8IEhlaWdodFNldD4mIHNldEhlaWdodChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEhlaWdodFNldCksIHBy
b3BlcnR5X2hlaWdodF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoImhlaWdodCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxIZWlnaHRT
ZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTU3R5bGU+JiAoKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0
LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PFJlZlB0cjxDU1NTdHlsZT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUGFzc1JlZlB0cjxDU1NTdHlsZT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVy
biBSZWZQdHI8Q1NTU3R5bGU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAg
KiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTU3R5bGU+IHJlc3VsdCA9
IENTU1N0eWxlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRDc3NQcm9wZXJ0aWVzKC4uLikKICAg
ICAqICAgICAuc2V0U2hvcnRoYW5kRW50cmllcyguLi4pCiAgICAgKiAgICAgLnNldFdpZHRoKC4u
LikKICAgICAqICAgICAuc2V0SGVpZ2h0KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVy
PE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmll
bGRzU2V0PihhZG9wdFJlZihuZXcgQ1NTU3R5bGUoKSkpOwogICAgfQoKICAgIHZvaWQgc2V0U3R5
bGVJZCgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkNTUzo6Q1NTU3R5bGVJZD4qLyBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0
KCJzdHlsZUlkIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0Q3NzVGV4dChjb25zdCBTdHJp
bmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygiY3NzVGV4dCIsIHZhbHVl
KTsKICAgIH0KCiAgICB2b2lkIHNldFJhbmdlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NT
OjpTb3VyY2VSYW5nZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7
CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJyYW5nZSIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIENT
UyBzdHlsZSBlZmZlY3RpdmUgdmlzdWFsIGRpbWVuc2lvbnMgYW5kIHNvdXJjZSBvZmZzZXRzLiAq
LwpjbGFzcyBDU1NQcm9wZXJ0eSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAg
ICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdzdGF0dXMnIHdoaWxlIGdlbmVyYXRpbmcg
Q1NTUHJvcGVydHkuCiAgICBzdHJ1Y3QgU3RhdHVzIHsKICAgICAgICBlbnVtIEVudW0gewogICAg
ICAgICAgICBBY3RpdmUgPSA0NCwKICAgICAgICAgICAgSW5hY3RpdmUgPSA0NSwKICAgICAgICAg
ICAgRGlzYWJsZWQgPSA0NiwKICAgICAgICAgICAgU3R5bGUgPSA0NywKICAgICAgICB9OwogICAg
fTsgLy8gc3RydWN0IFN0YXR1cwoKICAgIGVudW0gewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwK
ICAgICAgICBOYW1lU2V0ID0gMSA8PCAwLAogICAgICAgIFZhbHVlU2V0ID0gMSA8PCAxLAogICAg
ICAgIEFsbEZpZWxkc1NldCA9IChOYW1lU2V0IHwgVmFsdWVTZXQpCiAgICB9OwoKICAgIHRlbXBs
YXRlPGludCBTVEFURT4KICAgIGNsYXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNU
RVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlz
KTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxDU1NQcm9wZXJ0eT4gcHRy
KQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNT
ZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVz
dWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ1NTUHJvcGVydHk7CiAg
ICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOYW1lU2V0PiYgc2V0TmFtZShjb25z
dCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIE5hbWVTZXQpLCBwcm9wZXJ0eV9uYW1lX2FscmVhZHlfc2V0KTsKICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygibmFtZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxOYW1lU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZh
bHVlU2V0PiYgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZVNldCksIHByb3BlcnR5X3ZhbHVlX2Fs
cmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidmFsdWUiLCB2YWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVTZXQ+KCk7CiAgICAgICAgfQoK
ICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTUHJvcGVydHk+JiAoKQogICAgICAgIHsKICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90
X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxDU1NQ
cm9wZXJ0eT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1Jl
ZlB0cjxDU1NQcm9wZXJ0eT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8
Q1NTUHJvcGVydHk+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50
aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTUHJvcGVydHk+IHJlc3VsdCA9IENT
U1Byb3BlcnR5OjpjcmVhdGUoKQogICAgICogICAgIC5zZXROYW1lKC4uLikKICAgICAqICAgICAu
c2V0VmFsdWUoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNy
ZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVm
KG5ldyBDU1NQcm9wZXJ0eSgpKSk7CiAgICB9CgogICAgdm9pZCBzZXRQcmlvcml0eShjb25zdCBT
dHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygicHJpb3JpdHkiLCB2
YWx1ZSk7CiAgICB9CgogICAgdm9pZCBzZXRJbXBsaWNpdChib29sIHZhbHVlKQogICAgewogICAg
ICAgIHRoaXMtPnNldEJvb2xlYW4oImltcGxpY2l0IiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQg
c2V0VGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmlu
ZygidGV4dCIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFBhcnNlZE9rKGJvb2wgdmFsdWUp
CiAgICB7CiAgICAgICAgdGhpcy0+c2V0Qm9vbGVhbigicGFyc2VkT2siLCB2YWx1ZSk7CiAgICB9
CgogICAgdm9pZCBzZXRTdGF0dXMoU3RhdHVzOjpFbnVtIHZhbHVlKQogICAgewogICAgICAgIHRo
aXMtPnNldFN0cmluZygic3RhdHVzIiwgZ2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKICAg
IH0KCiAgICB2b2lkIHNldFN0YXR1cyhjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAg
IHRoaXMtPnNldFN0cmluZygic3RhdHVzIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U2hv
cnRoYW5kTmFtZShjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0
cmluZygic2hvcnRoYW5kTmFtZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFJhbmdlKC8q
UGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpTb3VyY2VSYW5nZT4qLyBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0T2JqZWN0KCJyYW5n
ZSIsIHZhbHVlKTsKICAgIH0KfTsKCi8qIENTUyBtZWRpYSBxdWVyeSBkZXNjcmlwdG9yLiAqLwpj
bGFzcyBDU1NNZWRpYSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBO
YW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdzb3VyY2UnIHdoaWxlIGdlbmVyYXRpbmcgQ1NTTWVk
aWEuCiAgICBzdHJ1Y3QgU291cmNlIHsKICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBN
ZWRpYVJ1bGUgPSA0OCwKICAgICAgICAgICAgSW1wb3J0UnVsZSA9IDQ5LAogICAgICAgICAgICBT
dHlsZXNoZWV0ID0gNTAsCiAgICAgICAgfTsKICAgIH07IC8vIHN0cnVjdCBTb3VyY2UKCiAgICBl
bnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgVGV4dFNldCA9IDEgPDwgMCwK
ICAgICAgICBBbGxGaWVsZHNTZXQgPSAoVGV4dFNldCkKICAgIH07CgogICAgdGVtcGxhdGU8aW50
IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVp
bGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0
dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwogICAg
ICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENTU01lZGlhPiBwdHIpCiAgICAgICAg
ewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRl
cl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7
CiAgICAgICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBDU1NNZWRpYTsKICAgIHB1YmxpYzoKCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFRleHRTZXQ+JiBzZXRUZXh0KGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVGV4dFNl
dCksIHByb3BlcnR5X3RleHRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJ0ZXh0IiwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRleHRT
ZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRvciBSZWZQdHI8Q1NTTWVkaWE+JiAoKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0
LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PFJlZlB0cjxDU1NNZWRpYT4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgb3Bl
cmF0b3IgUGFzc1JlZlB0cjxDU1NNZWRpYT4gKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVy
biBSZWZQdHI8Q1NTTWVkaWE+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAg
KiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q1NTTWVkaWE+IHJlc3VsdCA9
IENTU01lZGlhOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRUZXh0KC4uLik7CiAgICAgKi8KICAg
IHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVy
biBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgQ1NTTWVkaWEoKSkpOwogICAgfQoK
ICAgIHZvaWQgc2V0U291cmNlKFNvdXJjZTo6RW51bSB2YWx1ZSkKICAgIHsKICAgICAgICB0aGlz
LT5zZXRTdHJpbmcoInNvdXJjZSIsIGdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CiAgICB9
CgogICAgdm9pZCBzZXRTb3VyY2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgIHsKICAgICAgICB0
aGlzLT5zZXRTdHJpbmcoInNvdXJjZSIsIHZhbHVlKTsKICAgIH0KCiAgICB2b2lkIHNldFNvdXJj
ZVVSTChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgewogICAgICAgIHRoaXMtPnNldFN0cmluZygi
c291cmNlVVJMIiwgdmFsdWUpOwogICAgfQoKICAgIHZvaWQgc2V0U291cmNlTGluZShpbnQgdmFs
dWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0TnVtYmVyKCJzb3VyY2VMaW5lIiwgdmFsdWUpOwog
ICAgfQp9OwoKLyogQ1NTIHNlbGVjdG9yIHByb2ZpbGUgZW50cnkuICovCmNsYXNzIFNlbGVjdG9y
UHJvZmlsZUVudHJ5IDogcHVibGljIEluc3BlY3Rvck9iamVjdCB7CnB1YmxpYzoKICAgIGVudW0g
ewogICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICBTZWxlY3RvclNldCA9IDEgPDwgMCwK
ICAgICAgICBVcmxTZXQgPSAxIDw8IDEsCiAgICAgICAgTGluZU51bWJlclNldCA9IDEgPDwgMiwK
ICAgICAgICBUaW1lU2V0ID0gMSA8PCAzLAogICAgICAgIEhpdENvdW50U2V0ID0gMSA8PCA0LAog
ICAgICAgIE1hdGNoQ291bnRTZXQgPSAxIDw8IDUsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKFNl
bGVjdG9yU2V0IHwgVXJsU2V0IHwgTGluZU51bWJlclNldCB8IFRpbWVTZXQgfCBIaXRDb3VudFNl
dCB8IE1hdGNoQ291bnRTZXQpCiAgICB9OwoKICAgIHRlbXBsYXRlPGludCBTVEFURT4KICAgIGNs
YXNzIEJ1aWxkZXIgewogICAgcHJpdmF0ZToKICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBtX3Jlc3VsdDsKCiAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBT
VEVQPiYgY2FzdFN0YXRlKCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnBy
ZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKICAgICAgICB9CgogICAgICAg
IEJ1aWxkZXIoUGFzc1JlZlB0cjxTZWxlY3RvclByb2ZpbGVFbnRyeT4gcHRyKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJf
Y3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1fcmVzdWx0ID0gcHRyOwog
ICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgU2VsZWN0b3JQcm9maWxlRW50cnk7CiAgICBw
dWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTZWxlY3RvclNldD4mIHNldFNlbGVjdG9y
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgU2VsZWN0b3JTZXQpLCBwcm9wZXJ0eV9zZWxlY3Rvcl9hbHJlYWR5X3NldCk7
CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInNlbGVjdG9yIiwgdmFsdWUpOwogICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFNlbGVjdG9yU2V0PigpOwogICAgICAgIH0KCiAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFVybFNldD4mIHNldFVybChjb25zdCBTdHJpbmcmIHZhbHVlKQog
ICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFVybFNldCksIHBy
b3BlcnR5X3VybF9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
InVybCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVcmxTZXQ+KCk7CiAg
ICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTGluZU51bWJlclNldD4mIHNldExpbmVO
dW1iZXIoaW50IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIExpbmVOdW1iZXJTZXQpLCBwcm9wZXJ0eV9saW5lTnVtYmVyX2FscmVhZHlfc2V0KTsK
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigibGluZU51bWJlciIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxMaW5lTnVtYmVyU2V0PigpOwogICAgICAgIH0KCiAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVTZXQ+JiBzZXRUaW1lKGRvdWJsZSB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUaW1lU2V0KSwgcHJv
cGVydHlfdGltZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXROdW1iZXIo
InRpbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGltZVNldD4oKTsK
ICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBIaXRDb3VudFNldD4mIHNldEhpdENv
dW50KGludCB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBIaXRDb3VudFNldCksIHByb3BlcnR5X2hpdENvdW50X2FscmVhZHlfc2V0KTsKICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldE51bWJlcigiaGl0Q291bnQiLCB2YWx1ZSk7CiAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8SGl0Q291bnRTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgTWF0Y2hDb3VudFNldD4mIHNldE1hdGNoQ291bnQoaW50IHZhbHVlKQogICAg
ICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1hdGNoQ291bnRTZXQp
LCBwcm9wZXJ0eV9tYXRjaENvdW50X2FscmVhZHlfc2V0KTsKICAgICAgICAgICAgbV9yZXN1bHQt
PnNldE51bWJlcigibWF0Y2hDb3VudCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxNYXRjaENvdW50U2V0PigpOwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUmVmUHRy
PFNlbGVjdG9yUHJvZmlsZUVudHJ5PiYgKCkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAg
ICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxSZWZQdHI8U2VsZWN0b3JQcm9maWxlRW50
cnk+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8
U2VsZWN0b3JQcm9maWxlRW50cnk+ICgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gUmVm
UHRyPFNlbGVjdG9yUHJvZmlsZUVudHJ5PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsKCiAgICAv
KgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFNlbGVjdG9yUHJv
ZmlsZUVudHJ5PiByZXN1bHQgPSBTZWxlY3RvclByb2ZpbGVFbnRyeTo6Y3JlYXRlKCkKICAgICAq
ICAgICAuc2V0U2VsZWN0b3IoLi4uKQogICAgICogICAgIC5zZXRVcmwoLi4uKQogICAgICogICAg
IC5zZXRMaW5lTnVtYmVyKC4uLikKICAgICAqICAgICAuc2V0VGltZSguLi4pCiAgICAgKiAgICAg
LnNldEhpdENvdW50KC4uLikKICAgICAqICAgICAuc2V0TWF0Y2hDb3VudCguLi4pOwogICAgICov
CiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKICAgIHsKICAgICAgICBy
ZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFNlbGVjdG9yUHJvZmlsZUVu
dHJ5KCkpKTsKICAgIH0KfTsKCmNsYXNzIFNlbGVjdG9yUHJvZmlsZSA6IHB1YmxpYyBJbnNwZWN0
b3JPYmplY3QgewpwdWJsaWM6CiAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkYXRh
JyB3aGlsZSBnZW5lcmF0aW5nIFNlbGVjdG9yUHJvZmlsZS4KICAgIGNsYXNzIERhdGEgOiBwdWJs
aWMgSW5zcGVjdG9yQXJyYXkgewogICAgcHJpdmF0ZToKICAgICAgICBEYXRhKCkge30KCiAgICBw
dWJsaWM6CiAgICAgICAgdm9pZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NT
OjpTZWxlY3RvclByb2ZpbGVFbnRyeT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAg
ICB9CgogICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGE+IGNyZWF0ZSgpIHsKICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhKCkpOwogICAgICAgIH0KICAgIH07CgogICAgZW51
bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIFRvdGFsVGltZVNldCA9IDEgPDwg
MCwKICAgICAgICBEYXRhU2V0ID0gMSA8PCAxLAogICAgICAgIEFsbEZpZWxkc1NldCA9IChUb3Rh
bFRpbWVTZXQgfCBEYXRhU2V0KQogICAgfTsKCiAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBj
bGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwg
U1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CiAgICAgICAgfQoKICAgICAg
ICBCdWlsZGVyKFBhc3NSZWZQdHI8U2VsZWN0b3JQcm9maWxlPiBwdHIpCiAgICAgICAgewogICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVh
dGVkX2luX25vbl9pbml0X3N0YXRlKTsKICAgICAgICAgICAgbV9yZXN1bHQgPSBwdHI7CiAgICAg
ICAgfQogICAgICAgIGZyaWVuZCBjbGFzcyBTZWxlY3RvclByb2ZpbGU7CiAgICBwdWJsaWM6Cgog
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUb3RhbFRpbWVTZXQ+JiBzZXRUb3RhbFRpbWUoZG91Ymxl
IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRv
dGFsVGltZVNldCksIHByb3BlcnR5X3RvdGFsVGltZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXROdW1iZXIoInRvdGFsVGltZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxUb3RhbFRpbWVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgRGF0YVNldD4mIHNldERhdGEoLypQYXNzUmVmUHRyPERhdGE+Ki8gUGFzc1JlZlB0
cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgRGF0YVNldCksIHByb3BlcnR5X2RhdGFfYWxyZWFkeV9zZXQpOwogICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImRhdGEiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8RGF0YVNldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJl
ZlB0cjxTZWxlY3RvclByb2ZpbGU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAg
ICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxTZWxlY3RvclByb2ZpbGU+Kj4o
Jm1fcmVzdWx0KTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8U2VsZWN0
b3JQcm9maWxlPiAoKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFJlZlB0cjxTZWxlY3Rv
clByb2ZpbGU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0
aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8U2VsZWN0b3JQcm9maWxlPiByZXN1bHQgPSBT
ZWxlY3RvclByb2ZpbGU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldFRvdGFsVGltZSguLi4pCiAg
ICAgKiAgICAgLnNldERhdGEoLi4uKTsKICAgICAqLwogICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+
KGFkb3B0UmVmKG5ldyBTZWxlY3RvclByb2ZpbGUoKSkpOwogICAgfQp9OwoKfSAvLyBDU1MKCm5h
bWVzcGFjZSBUaW1lbGluZSB7Ci8qIFRpbWVsaW5lIHJlY29yZCBjb250YWlucyBpbmZvcm1hdGlv
biBhYm91dCB0aGUgcmVjb3JkZWQgYWN0aXZpdHkuICovCmNsYXNzIFRpbWVsaW5lRXZlbnQgOiBw
dWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVy
dHkgbmFtZSAnY2hpbGRyZW4nIHdoaWxlIGdlbmVyYXRpbmcgVGltZWxpbmVFdmVudC4KICAgIGNs
YXNzIENoaWxkcmVuIDogcHVibGljIEluc3BlY3RvckFycmF5IHsKICAgIHByaXZhdGU6CiAgICAg
ICAgQ2hpbGRyZW4oKSB7fQoKICAgIHB1YmxpYzoKICAgICAgICB2b2lkIGFkZEl0ZW0oLypQYXNz
UmVmUHRyPFR5cGVCdWlsZGVyOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudD4qLyBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICB0aGlzLT5wdXNo
T2JqZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENoaWxk
cmVuPiBjcmVhdGUoKSB7CiAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2hpbGRyZW4o
KSk7CiAgICAgICAgfQogICAgfTsKCiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAs
CiAgICAgICAgVHlwZVNldCA9IDEgPDwgMCwKICAgICAgICBEYXRhU2V0ID0gMSA8PCAxLAogICAg
ICAgIEFsbEZpZWxkc1NldCA9IChUeXBlU2V0IHwgRGF0YVNldCkKICAgIH07CgogICAgdGVtcGxh
dGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RF
UD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMp
OwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPFRpbWVsaW5lRXZlbnQ+IHB0
cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRz
U2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jl
c3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFRpbWVsaW5lRXZlbnQ7
CiAgICBwdWJsaWM6CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShj
b25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIFR5cGVTZXQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxUeXBlU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8
IERhdGFTZXQ+JiBzZXREYXRhKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBEYXRhU2V0KSwgcHJv
cGVydHlfZGF0YV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3Qo
ImRhdGEiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RGF0YVNldD4oKTsK
ICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxUaW1lbGluZUV2ZW50PiYgKCkKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwg
cmVzdWx0X2lzX25vdF9yZWFkeSk7CiAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxSZWZQdHI8VGltZWxpbmVFdmVudD4qPigmbV9yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAg
b3BlcmF0b3IgUGFzc1JlZlB0cjxUaW1lbGluZUV2ZW50PiAoKQogICAgICAgIHsKICAgICAgICAg
ICAgcmV0dXJuIFJlZlB0cjxUaW1lbGluZUV2ZW50PigqdGhpcyk7CiAgICAgICAgfQogICAgfTsK
CiAgICAvKgogICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgogICAgICogUmVmUHRyPFRpbWVs
aW5lRXZlbnQ+IHJlc3VsdCA9IFRpbWVsaW5lRXZlbnQ6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNl
dFR5cGUoLi4uKQogICAgICogICAgIC5zZXREYXRhKC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBC
dWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVy
PE5vRmllbGRzU2V0PihhZG9wdFJlZihuZXcgVGltZWxpbmVFdmVudCgpKSk7CiAgICB9CgogICAg
dm9pZCBzZXRDaGlsZHJlbigvKlBhc3NSZWZQdHI8Q2hpbGRyZW4+Ki8gUGFzc1JlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gdmFsdWUpCiAgICB7CiAgICAgICAgdGhpcy0+c2V0QXJyYXkoImNoaWxkcmVu
IiwgdmFsdWUpOwogICAgfQp9OwoKfSAvLyBUaW1lbGluZQoKI2lmIEVOQUJMRShKQVZBU0NSSVBU
X0RFQlVHR0VSKQpuYW1lc3BhY2UgRGVidWdnZXIgewovKiBCcmVha3BvaW50IGlkZW50aWZpZXIu
ICovCnR5cGVkZWYgU3RyaW5nIEJyZWFrcG9pbnRJZDsKCi8qIFVuaXF1ZSBzY3JpcHQgaWRlbnRp
Zmllci4gKi8KdHlwZWRlZiBTdHJpbmcgU2NyaXB0SWQ7CgovKiBDYWxsIGZyYW1lIGlkZW50aWZp
ZXIuICovCnR5cGVkZWYgU3RyaW5nIENhbGxGcmFtZUlkOwoKLyogTG9jYXRpb24gaW4gdGhlIHNv
dXJjZSBjb2RlLiAqLwpjbGFzcyBMb2NhdGlvbiA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3Qgewpw
dWJsaWM6CiAgICBlbnVtIHsKICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgU2NyaXB0
SWRTZXQgPSAxIDw8IDAsCiAgICAgICAgTGluZU51bWJlclNldCA9IDEgPDwgMSwKICAgICAgICBB
bGxGaWVsZHNTZXQgPSAoU2NyaXB0SWRTZXQgfCBMaW5lTnVtYmVyU2V0KQogICAgfTsKCiAgICB0
ZW1wbGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGlu
dCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4o
dGhpcyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8TG9jYXRpb24+IHB0
cikKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRz
U2V0LCBidWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jl
c3VsdCA9IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIExvY2F0aW9uOwogICAg
cHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU2NyaXB0SWRTZXQ+JiBzZXRTY3JpcHRJ
ZChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIFNjcmlwdElkU2V0KSwgcHJvcGVydHlfc2NyaXB0SWRfYWxyZWFkeV9zZXQp
OwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzY3JpcHRJZCIsIHZhbHVlKTsKICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTY3JpcHRJZFNldD4oKTsKICAgICAgICB9CgogICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBMaW5lTnVtYmVyU2V0PiYgc2V0TGluZU51bWJlcihpbnQgdmFs
dWUpCiAgICAgICAgewogICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTGluZU51
bWJlclNldCksIHByb3BlcnR5X2xpbmVOdW1iZXJfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwgdmFsdWUpOwogICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPExpbmVOdW1iZXJTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRv
ciBSZWZQdHI8TG9jYXRpb24+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoU1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxMb2NhdGlvbj4qPigmbV9yZXN1bHQp
OwogICAgICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxMb2NhdGlvbj4gKCkKICAg
ICAgICB7CiAgICAgICAgICAgIHJldHVybiBSZWZQdHI8TG9jYXRpb24+KCp0aGlzKTsKICAgICAg
ICB9CiAgICB9OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBS
ZWZQdHI8TG9jYXRpb24+IHJlc3VsdCA9IExvY2F0aW9uOjpjcmVhdGUoKQogICAgICogICAgIC5z
ZXRTY3JpcHRJZCguLi4pCiAgICAgKiAgICAgLnNldExpbmVOdW1iZXIoLi4uKTsKICAgICAqLwog
ICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCiAgICB7CiAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KGFkb3B0UmVmKG5ldyBMb2NhdGlvbigpKSk7CiAgICB9
CgogICAgdm9pZCBzZXRDb2x1bW5OdW1iZXIoaW50IHZhbHVlKQogICAgewogICAgICAgIHRoaXMt
PnNldE51bWJlcigiY29sdW1uTnVtYmVyIiwgdmFsdWUpOwogICAgfQp9OwoKLyogSmF2YVNjcmlw
dCBjYWxsIGZyYW1lLiBBcnJheSBvZiBjYWxsIGZyYW1lcyBmb3JtIHRoZSBjYWxsIHN0YWNrLiAq
LwpjbGFzcyBDYWxsRnJhbWUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAg
Ly8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnc2NvcGVDaGFpbicgd2hpbGUgZ2VuZXJhdGlu
ZyBDYWxsRnJhbWUuCiAgICBjbGFzcyBTY29wZUNoYWluIDogcHVibGljIEluc3BlY3RvckFycmF5
IHsKICAgIHByaXZhdGU6CiAgICAgICAgU2NvcGVDaGFpbigpIHt9CgogICAgcHVibGljOgogICAg
ICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpTY29w
ZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCiAgICAgICAgewogICAgICAg
ICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNjb3BlQ2hhaW4+IGNyZWF0ZSgpIHsKICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTY29wZUNoYWluKCkpOwogICAgICAgIH0KICAgIH07CgogICAgZW51bSB7CiAgICAg
ICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgIENhbGxGcmFtZUlkU2V0ID0gMSA8PCAwLAogICAg
ICAgIEZ1bmN0aW9uTmFtZVNldCA9IDEgPDwgMSwKICAgICAgICBMb2NhdGlvblNldCA9IDEgPDwg
MiwKICAgICAgICBTY29wZUNoYWluU2V0ID0gMSA8PCAzLAogICAgICAgIFRoaXNTZXQgPSAxIDw8
IDQsCiAgICAgICAgQWxsRmllbGRzU2V0ID0gKENhbGxGcmFtZUlkU2V0IHwgRnVuY3Rpb25OYW1l
U2V0IHwgTG9jYXRpb25TZXQgfCBTY29wZUNoYWluU2V0IHwgVGhpc1NldCkKICAgIH07CgogICAg
dGVtcGxhdGU8aW50IFNUQVRFPgogICAgY2xhc3MgQnVpbGRlciB7CiAgICBwcml2YXRlOgogICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwoKICAgICAgICB0ZW1wbGF0ZTxp
bnQgU1RFUD4gQnVpbGRlcjxTVEFURSB8IFNURVA+JiBjYXN0U3RhdGUoKQogICAgICAgIHsKICAg
ICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+
KHRoaXMpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcihQYXNzUmVmUHRyPENhbGxGcmFtZT4g
cHRyKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVs
ZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5pdF9zdGF0ZSk7CiAgICAgICAgICAgIG1f
cmVzdWx0ID0gcHRyOwogICAgICAgIH0KICAgICAgICBmcmllbmQgY2xhc3MgQ2FsbEZyYW1lOwog
ICAgcHVibGljOgoKICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ2FsbEZyYW1lSWRTZXQ+JiBzZXRD
YWxsRnJhbWVJZChjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIENhbGxGcmFtZUlkU2V0KSwgcHJvcGVydHlfY2FsbEZyYW1l
SWRfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJjYWxsRnJh
bWVJZCIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDYWxsRnJhbWVJZFNl
dD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBGdW5jdGlvbk5hbWVTZXQ+
JiBzZXRGdW5jdGlvbk5hbWUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBGdW5jdGlvbk5hbWVTZXQpLCBwcm9wZXJ0eV9m
dW5jdGlvbk5hbWVfYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJmdW5jdGlvbk5hbWUiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RnVu
Y3Rpb25OYW1lU2V0PigpOwogICAgICAgIH0KCiAgICAgICAgQnVpbGRlcjxTVEFURSB8IExvY2F0
aW9uU2V0PiYgc2V0TG9jYXRpb24oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpEZWJ1Z2dlcjo6
TG9jYXRpb24+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsK
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIExvY2F0aW9uU2V0KSwgcHJvcGVy
dHlfbG9jYXRpb25fYWxyZWFkeV9zZXQpOwogICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0
KCJsb2NhdGlvbiIsIHZhbHVlKTsKICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxMb2NhdGlv
blNldD4oKTsKICAgICAgICB9CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTY29wZUNoYWluU2V0
PiYgc2V0U2NvcGVDaGFpbigvKlBhc3NSZWZQdHI8U2NvcGVDaGFpbj4qLyBQYXNzUmVmUHRyPElu
c3BlY3RvckFycmF5PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBTY29wZUNoYWluU2V0KSwgcHJvcGVydHlfc2NvcGVDaGFpbl9hbHJlYWR5X3Nl
dCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgic2NvcGVDaGFpbiIsIHZhbHVlKTsK
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTY29wZUNoYWluU2V0PigpOwogICAgICAgIH0K
CiAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRoaXNTZXQ+JiBzZXRUaGlzKC8qUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiB2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBUaGlzU2V0KSwgcHJvcGVydHlfdGhpc19hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRPYmplY3QoInRoaXMiLCB2YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8VGhpc1NldD4oKTsKICAgICAgICB9CgogICAgICAgIG9wZXJhdG9yIFJlZlB0cjxDYWxs
RnJhbWU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUgPT0g
QWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PFJlZlB0cjxDYWxsRnJhbWU+Kj4oJm1fcmVzdWx0KTsKICAgICAgICB9
CgogICAgICAgIG9wZXJhdG9yIFBhc3NSZWZQdHI8Q2FsbEZyYW1lPiAoKQogICAgICAgIHsKICAg
ICAgICAgICAgcmV0dXJuIFJlZlB0cjxDYWxsRnJhbWU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9
OwoKICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8Q2Fs
bEZyYW1lPiByZXN1bHQgPSBDYWxsRnJhbWU6OmNyZWF0ZSgpCiAgICAgKiAgICAgLnNldENhbGxG
cmFtZUlkKC4uLikKICAgICAqICAgICAuc2V0RnVuY3Rpb25OYW1lKC4uLikKICAgICAqICAgICAu
c2V0TG9jYXRpb24oLi4uKQogICAgICogICAgIC5zZXRTY29wZUNoYWluKC4uLikKICAgICAqICAg
ICAuc2V0VGhpcyguLi4pOwogICAgICovCiAgICBzdGF0aWMgQnVpbGRlcjxOb0ZpZWxkc1NldD4g
Y3JlYXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRS
ZWYobmV3IENhbGxGcmFtZSgpKSk7CiAgICB9Cn07CgovKiBTY29wZSBkZXNjcmlwdGlvbi4gKi8K
Y2xhc3MgU2NvcGUgOiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKcHVibGljOgogICAgLy8gTmFt
ZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAndHlwZScgd2hpbGUgZ2VuZXJhdGluZyBTY29wZS4KICAg
IHN0cnVjdCBUeXBlIHsKICAgICAgICBlbnVtIEVudW0gewogICAgICAgICAgICBHbG9iYWwgPSA1
MSwKICAgICAgICAgICAgTG9jYWwgPSA1MiwKICAgICAgICAgICAgV2l0aCA9IDUzLAogICAgICAg
ICAgICBDbG9zdXJlID0gNTQsCiAgICAgICAgICAgIENhdGNoID0gNTUsCiAgICAgICAgfTsKICAg
IH07IC8vIHN0cnVjdCBUeXBlCgogICAgZW51bSB7CiAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAog
ICAgICAgIFR5cGVTZXQgPSAxIDw8IDAsCiAgICAgICAgT2JqZWN0U2V0ID0gMSA8PCAxLAogICAg
ICAgIEFsbEZpZWxkc1NldCA9IChUeXBlU2V0IHwgT2JqZWN0U2V0KQogICAgfTsKCiAgICB0ZW1w
bGF0ZTxpbnQgU1RBVEU+CiAgICBjbGFzcyBCdWlsZGVyIHsKICAgIHByaXZhdGU6CiAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9yZXN1bHQ7CgogICAgICAgIHRlbXBsYXRlPGludCBT
VEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCiAgICAgICAgewogICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhp
cyk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyKFBhc3NSZWZQdHI8U2NvcGU+IHB0cikKICAg
ICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBi
dWlsZGVyX2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOwogICAgICAgICAgICBtX3Jlc3VsdCA9
IHB0cjsKICAgICAgICB9CiAgICAgICAgZnJpZW5kIGNsYXNzIFNjb3BlOwogICAgcHVibGljOgoK
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5cGUoVHlwZTo6RW51bSB2YWx1
ZSkKICAgICAgICB7CiAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0
KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRT
dHJpbmcoInR5cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwogICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgVHlwZVNldD4mIHNldFR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICAgICB7CiAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBlU2V0KSwgcHJvcGVydHlfdHlw
ZV9hbHJlYWR5X3NldCk7CiAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCB2
YWx1ZSk7CiAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHlwZVNldD4oKTsKICAgICAgICB9
CgogICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPYmplY3RTZXQ+JiBzZXRPYmplY3QoLypQYXNzUmVm
UHRyPFR5cGVCdWlsZGVyOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+Ki8gUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIE9iamVjdFNldCksIHByb3BlcnR5X29iamVjdF9hbHJlYWR5X3NldCk7CiAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoIm9iamVjdCIsIHZhbHVlKTsKICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxPYmplY3RTZXQ+KCk7CiAgICAgICAgfQoKICAgICAgICBvcGVyYXRv
ciBSZWZQdHI8U2NvcGU+JiAoKQogICAgICAgIHsKICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
U1RBVEUgPT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxTY29wZT4qPigmbV9yZXN1bHQpOwogICAg
ICAgIH0KCiAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxTY29wZT4gKCkKICAgICAgICB7CiAg
ICAgICAgICAgIHJldHVybiBSZWZQdHI8U2NvcGU+KCp0aGlzKTsKICAgICAgICB9CiAgICB9OwoK
ICAgIC8qCiAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6CiAgICAgKiBSZWZQdHI8U2NvcGU+
IHJlc3VsdCA9IFNjb3BlOjpjcmVhdGUoKQogICAgICogICAgIC5zZXRUeXBlKC4uLikKICAgICAq
ICAgICAuc2V0T2JqZWN0KC4uLik7CiAgICAgKi8KICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRz
U2V0PiBjcmVhdGUoKQogICAgewogICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0Pihh
ZG9wdFJlZihuZXcgU2NvcGUoKSkpOwogICAgfQp9OwoKfSAvLyBEZWJ1Z2dlcgoKI2VuZGlmIC8v
IEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdH
RVIpCm5hbWVzcGFjZSBET01EZWJ1Z2dlciB7Ci8qIERPTSBicmVha3BvaW50IHR5cGUuICovCnN0
cnVjdCBET01CcmVha3BvaW50VHlwZSB7CiAgICBlbnVtIEVudW0gewogICAgICAgIFN1YnRyZWVf
bW9kaWZpZWQgPSA1NiwKICAgICAgICBBdHRyaWJ1dGVfbW9kaWZpZWQgPSA1NywKICAgICAgICBO
b2RlX3JlbW92ZWQgPSA1OCwKICAgIH07Cn07IC8vIHN0cnVjdCBET01CcmVha3BvaW50VHlwZQoK
fSAvLyBET01EZWJ1Z2dlcgoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQoj
aWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCm5hbWVzcGFjZSBQcm9maWxlciB7Cn0gLy8g
UHJvZmlsZXIKCiNlbmRpZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKCn0gLy8gbmFt
ZXNwYWNlIFR5cGVCdWlsZGVyCgojZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKCmNsYXNzIElu
c3BlY3RvckZyb250ZW5kIHsKcHVibGljOgogICAgSW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKik7CgoKICAgIGNsYXNzIEluc3BlY3RvciB7CiAgICBwdWJsaWM6CiAg
ICAgICAgSW5zcGVjdG9yKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGludCB0
ZXN0Q2FsbElkLCBjb25zdCBTdHJpbmcmIHNjcmlwdCk7CiAgICAgICAgdm9pZCBpbnNwZWN0KC8q
UGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiovIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBvYmplY3QsIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBo
aW50cyk7CiAgICAgICAgdm9pZCBkaWRDcmVhdGVXb3JrZXIoaW50IGlkLCBjb25zdCBTdHJpbmcm
IHVybCwgYm9vbCBpc1NoYXJlZCk7CiAgICAgICAgdm9pZCBkaWREZXN0cm95V29ya2VyKGludCBp
ZCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJu
IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoK
ICAgIEluc3BlY3RvciogaW5zcGVjdG9yKCkgeyByZXR1cm4gJm1faW5zcGVjdG9yOyB9CgogICAg
Y2xhc3MgTWVtb3J5IHsKICAgIHB1YmxpYzoKICAgICAgICBNZW1vcnkoSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIHNldElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgTWVtb3J5KiBtZW1vcnkoKSB7
IHJldHVybiAmbV9tZW1vcnk7IH0KCiAgICBjbGFzcyBQYWdlIHsKICAgIHB1YmxpYzoKICAgICAg
ICBQYWdlKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkg
eyB9CiAgICAgICAgdm9pZCBkb21Db250ZW50RXZlbnRGaXJlZChkb3VibGUgdGltZXN0YW1wKTsK
ICAgICAgICB2b2lkIGxvYWRFdmVudEZpcmVkKGRvdWJsZSB0aW1lc3RhbXApOwogICAgICAgIHZv
aWQgZnJhbWVOYXZpZ2F0ZWQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpQYWdlOjpGcmFtZT4q
LyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gZnJhbWUpOwogICAgICAgIHZvaWQgZnJhbWVE
ZXRhY2hlZChjb25zdCBTdHJpbmcmIGZyYW1lSWQpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0
b3JGcm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsg
fQogICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVj
dG9yRnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBQYWdlKiBwYWdlKCkgeyByZXR1cm4gJm1f
cGFnZTsgfQoKICAgIGNsYXNzIFJ1bnRpbWUgewogICAgcHVibGljOgogICAgICAgIFJ1bnRpbWUo
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAg
ICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgUnVu
dGltZSogcnVudGltZSgpIHsgcmV0dXJuICZtX3J1bnRpbWU7IH0KCiAgICBjbGFzcyBDb25zb2xl
IHsKICAgIHB1YmxpYzoKICAgICAgICBDb25zb2xlKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBtZXNzYWdlQWRkZWQoLypQ
YXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDb25zb2xlOjpDb25zb2xlTWVzc2FnZT4qLyBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbWVzc2FnZSk7CiAgICAgICAgdm9pZCBtZXNzYWdlUmVwZWF0
Q291bnRVcGRhdGVkKGludCBjb3VudCk7CiAgICAgICAgdm9pZCBtZXNzYWdlc0NsZWFyZWQoKTsK
ICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAg
Q29uc29sZSogY29uc29sZSgpIHsgcmV0dXJuICZtX2NvbnNvbGU7IH0KCiAgICBjbGFzcyBOZXR3
b3JrIHsKICAgIHB1YmxpYzoKICAgICAgICBOZXR3b3JrKEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCByZXF1ZXN0V2lsbEJl
U2VudChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25z
dCBTdHJpbmcmIGxvYWRlcklkLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCAvKlBhc3NSZWZQ
dHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlcXVlc3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHJlcXVlc3QsIGRvdWJsZSB0aW1lc3RhbXAsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRl
cjo6TmV0d29yazo6SW5pdGlhdG9yPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBpbml0
aWF0b3IsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q29uc29sZTo6U3RhY2tUcmFjZT4qLyBQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBzdGFja1RyYWNlLCAvKlBhc3NSZWZQdHI8VHlwZUJ1
aWxkZXI6Ok5ldHdvcms6OlJlc3BvbnNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZWRpcmVjdFJlc3BvbnNlKTsKICAgICAgICB2b2lkIHJlcXVlc3RTZXJ2ZWRGcm9tQ2FjaGUoY29u
c3QgU3RyaW5nJiByZXF1ZXN0SWQpOwogICAgICAgIHZvaWQgcmVzcG9uc2VSZWNlaXZlZChjb25z
dCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcm
IGxvYWRlcklkLCBkb3VibGUgdGltZXN0YW1wLCAvKlR5cGVCdWlsZGVyOjpQYWdlOjpSZXNvdXJj
ZVR5cGU6OkVudW0qLyBjb25zdCBTdHJpbmcmIHR5cGUsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRl
cjo6TmV0d29yazo6UmVzcG9uc2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3Bv
bnNlKTsKICAgICAgICB2b2lkIGRhdGFSZWNlaXZlZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwg
ZG91YmxlIHRpbWVzdGFtcCwgaW50IGRhdGFMZW5ndGgsIGludCBlbmNvZGVkRGF0YUxlbmd0aCk7
CiAgICAgICAgdm9pZCBsb2FkaW5nRmluaXNoZWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGRv
dWJsZSB0aW1lc3RhbXApOwogICAgICAgIHZvaWQgbG9hZGluZ0ZhaWxlZChjb25zdCBTdHJpbmcm
IHJlcXVlc3RJZCwgZG91YmxlIHRpbWVzdGFtcCwgY29uc3QgU3RyaW5nJiBlcnJvclRleHQsIGNv
bnN0IGJvb2wqIGNvbnN0IGNhbmNlbGVkKTsKICAgICAgICB2b2lkIHJlcXVlc3RTZXJ2ZWRGcm9t
TWVtb3J5Q2FjaGUoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgZnJhbWVJ
ZCwgY29uc3QgU3RyaW5nJiBsb2FkZXJJZCwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgZG91
YmxlIHRpbWVzdGFtcCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpJbml0aWF0
b3I+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluaXRpYXRvciwgLypQYXNzUmVmUHRy
PFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpDYWNoZWRSZXNvdXJjZT4qLyBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzb3VyY2UpOwogICAgICAgIHZvaWQgd2ViU29ja2V0V2lsbFNlbmRIYW5k
c2hha2VSZXF1ZXN0KGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBkb3VibGUgdGltZXN0YW1wLCAv
KlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OldlYlNvY2tldFJlcXVlc3Q+Ki8gUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlcXVlc3QpOwogICAgICAgIHZvaWQgd2ViU29ja2V0
SGFuZHNoYWtlUmVzcG9uc2VSZWNlaXZlZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgZG91Ymxl
IHRpbWVzdGFtcCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpXZWJTb2NrZXRS
ZXNwb25zZT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzcG9uc2UpOwogICAgICAg
IHZvaWQgd2ViU29ja2V0Q3JlYXRlZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3Ry
aW5nJiB1cmwpOwogICAgICAgIHZvaWQgd2ViU29ja2V0Q2xvc2VkKGNvbnN0IFN0cmluZyYgcmVx
dWVzdElkLCBkb3VibGUgdGltZXN0YW1wKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250
ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAg
IHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgTmV0d29yayogbmV0d29yaygpIHsgcmV0dXJuICZt
X25ldHdvcms7IH0KCiNpZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogICAgY2xhc3MgRGF0YWJhc2Ug
ewogICAgcHVibGljOgogICAgICAgIERhdGFiYXNlKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCog
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGlu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBhZGREYXRhYmFzZSgvKlBh
c3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRhdGFiYXNlOjpEYXRhYmFzZT4qLyBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gZGF0YWJhc2UpOwogICAgICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRl
ciBuYW1lICdjb2x1bW5OYW1lcycgd2hpbGUgZ2VuZXJhdGluZyBldmVudCBzcWxUcmFuc2FjdGlv
blN1Y2NlZWRlZC4KICAgICAgICBjbGFzcyBDb2x1bW5OYW1lcyA6IHB1YmxpYyBJbnNwZWN0b3JB
cnJheSB7CiAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgQ29sdW1uTmFtZXMoKSB7fQoKICAg
ICAgICBwdWJsaWM6CiAgICAgICAgICAgIHZvaWQgYWRkSXRlbShjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5wdXNoU3RyaW5nKHZhbHVlKTsK
ICAgICAgICAgICAgfQoKICAgICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29sdW1uTmFtZXM+
IGNyZWF0ZSgpIHsKICAgICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ29sdW1uTmFt
ZXMoKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICAvLyBOYW1lZCBhZnRlciBw
YXJhbWV0ZXIgbmFtZSAndmFsdWVzJyB3aGlsZSBnZW5lcmF0aW5nIGV2ZW50IHNxbFRyYW5zYWN0
aW9uU3VjY2VlZGVkLgogICAgICAgIGNsYXNzIFZhbHVlcyA6IHB1YmxpYyBJbnNwZWN0b3JBcnJh
eSB7CiAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgVmFsdWVzKCkge30KCiAgICAgICAgcHVi
bGljOgogICAgICAgICAgICB2b2lkIGFkZEl0ZW0oUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4g
dmFsdWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRoaXMtPnB1c2hWYWx1ZSh2YWx1
ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFZhbHVlcz4g
Y3JlYXRlKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBWYWx1ZXMoKSk7
CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICB2b2lkIHNxbFRyYW5zYWN0aW9uU3Vj
Y2VlZGVkKGludCB0cmFuc2FjdGlvbklkLCAvKlBhc3NSZWZQdHI8Q29sdW1uTmFtZXM+Ki8gUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gY29sdW1uTmFtZXMsIC8qUGFzc1JlZlB0cjxWYWx1ZXM+
Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWVzKTsKICAgICAgICB2b2lkIHNxbFRy
YW5zYWN0aW9uRmFpbGVkKGludCB0cmFuc2FjdGlvbklkLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gc3FsRXJyb3IpOwogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IG1f
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9CiAg
ICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgcHJpdmF0ZToK
ICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsOwogICAgfTsKCiAgICBEYXRhYmFzZSogZGF0YWJhc2UoKSB7IHJldHVybiAmbV9kYXRhYmFz
ZTsgfQoKI2VuZGlmIC8vIEVOQUJMRShTUUxfREFUQUJBU0UpCiAgICBjbGFzcyBET01TdG9yYWdl
IHsKICAgIHB1YmxpYzoKICAgICAgICBET01TdG9yYWdlKEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBhZGRET01TdG9yYWdl
KC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NU3RvcmFnZTo6RW50cnk+Ki8gUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHN0b3JhZ2UpOwogICAgICAgIHZvaWQgdXBkYXRlRE9NU3RvcmFn
ZShpbnQgc3RvcmFnZUlkKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5l
bChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQog
ICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6
CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hh
bm5lbDsKICAgIH07CgogICAgRE9NU3RvcmFnZSogZG9tc3RvcmFnZSgpIHsgcmV0dXJuICZtX2Rv
bXN0b3JhZ2U7IH0KCiAgICBjbGFzcyBBcHBsaWNhdGlvbkNhY2hlIHsKICAgIHB1YmxpYzoKICAg
ICAgICBBcHBsaWNhdGlvbkNhY2hlKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKGluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBhcHBsaWNhdGlvbkNhY2hlU3RhdHVzVXBk
YXRlZChjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgbWFuaWZlc3RVUkwsIGlu
dCBzdGF0dXMpOwogICAgICAgIHZvaWQgbmV0d29ya1N0YXRlVXBkYXRlZChib29sIGlzTm93T25s
aW5lKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1
cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07
CgogICAgQXBwbGljYXRpb25DYWNoZSogYXBwbGljYXRpb25jYWNoZSgpIHsgcmV0dXJuICZtX2Fw
cGxpY2F0aW9uY2FjaGU7IH0KCiNpZiBFTkFCTEUoRklMRV9TWVNURU0pCiAgICBjbGFzcyBGaWxl
U3lzdGVtIHsKICAgIHB1YmxpYzoKICAgICAgICBGaWxlU3lzdGVtKEluc3BlY3RvckZyb250ZW5k
Q2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSA6IG1faW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyB9CiAgICAgICAgdm9pZCBzZXRJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JG
cm9udGVuZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFu
bmVsOyB9CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIEZpbGVTeXN0ZW0qIGZpbGVzeXN0
ZW0oKSB7IHJldHVybiAmbV9maWxlc3lzdGVtOyB9CgojZW5kaWYgLy8gRU5BQkxFKEZJTEVfU1lT
VEVNKQogICAgY2xhc3MgRE9NIHsKICAgIHB1YmxpYzoKICAgICAgICBET00oSW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9u
dGVuZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGRv
Y3VtZW50VXBkYXRlZCgpOwogICAgICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciBuYW1lICdu
b2Rlcycgd2hpbGUgZ2VuZXJhdGluZyBldmVudCBzZXRDaGlsZE5vZGVzLgogICAgICAgIGNsYXNz
IE5vZGVzIDogcHVibGljIEluc3BlY3RvckFycmF5IHsKICAgICAgICBwcml2YXRlOgogICAgICAg
ICAgICBOb2RlcygpIHt9CgogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgdm9pZCBhZGRJdGVt
KC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RE9NOjpOb2RlPiovIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiB2YWx1ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhpcy0+cHVz
aE9iamVjdCh2YWx1ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPE5vZGVzPiBjcmVhdGUoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IE5vZGVzKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgdm9pZCBzZXRDaGls
ZE5vZGVzKGludCBwYXJlbnRJZCwgLypQYXNzUmVmUHRyPE5vZGVzPiovIFBhc3NSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IG5vZGVzKTsKICAgICAgICB2b2lkIGF0dHJpYnV0ZU1vZGlmaWVkKGludCBu
b2RlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CiAgICAgICAg
dm9pZCBhdHRyaWJ1dGVSZW1vdmVkKGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAg
ICAgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyIG5hbWUgJ25vZGVJZHMnIHdoaWxlIGdlbmVy
YXRpbmcgZXZlbnQgaW5saW5lU3R5bGVJbnZhbGlkYXRlZC4KICAgICAgICBjbGFzcyBOb2RlSWRz
IDogcHVibGljIEluc3BlY3RvckFycmF5IHsKICAgICAgICBwcml2YXRlOgogICAgICAgICAgICBO
b2RlSWRzKCkge30KCiAgICAgICAgcHVibGljOgogICAgICAgICAgICB2b2lkIGFkZEl0ZW0oaW50
IHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5wdXNoTnVtYmVyKHZh
bHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Tm9kZUlk
cz4gY3JlYXRlKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBOb2RlSWRz
KCkpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgdm9pZCBpbmxpbmVTdHlsZUlu
dmFsaWRhdGVkKC8qUGFzc1JlZlB0cjxOb2RlSWRzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IG5vZGVJZHMpOwogICAgICAgIHZvaWQgY2hhcmFjdGVyRGF0YU1vZGlmaWVkKGludCBub2Rl
SWQsIGNvbnN0IFN0cmluZyYgY2hhcmFjdGVyRGF0YSk7CiAgICAgICAgdm9pZCBjaGlsZE5vZGVD
b3VudFVwZGF0ZWQoaW50IG5vZGVJZCwgaW50IGNoaWxkTm9kZUNvdW50KTsKICAgICAgICB2b2lk
IGNoaWxkTm9kZUluc2VydGVkKGludCBwYXJlbnROb2RlSWQsIGludCBwcmV2aW91c05vZGVJZCwg
LypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpET006Ok5vZGU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IG5vZGUpOwogICAgICAgIHZvaWQgY2hpbGROb2RlUmVtb3ZlZChpbnQgcGFyZW50
Tm9kZUlkLCBpbnQgbm9kZUlkKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hh
bm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkg
eyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsg
fQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZh
dGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5k
Q2hhbm5lbDsKICAgIH07CgogICAgRE9NKiBkb20oKSB7IHJldHVybiAmbV9kb207IH0KCiAgICBj
bGFzcyBDU1MgewogICAgcHVibGljOgogICAgICAgIENTUyhJbnNwZWN0b3JGcm9udGVuZENoYW5u
ZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgbWVkaWFRdWVyeVJl
c3VsdENoYW5nZWQoKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAg
ICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAg
ICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bDsKICAgIH07CgogICAgQ1NTKiBjc3MoKSB7IHJldHVybiAmbV9jc3M7IH0KCiAgICBjbGFzcyBU
aW1lbGluZSB7CiAgICBwdWJsaWM6CiAgICAgICAgVGltZWxpbmUoSW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGV2ZW50UmVj
b3JkZWQoLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudD4q
LyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVjb3JkKTsKICAgICAgICB2b2lkIHNldElu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0
SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENo
YW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBt
X2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07CgogICAgVGltZWxpbmUqIHRpbWVsaW5l
KCkgeyByZXR1cm4gJm1fdGltZWxpbmU7IH0KCiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKICAgIGNsYXNzIERlYnVnZ2VyIHsKICAgIHB1YmxpYzoKICAgICAgICBEZWJ1Z2dlcihJbnNw
ZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbChpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAg
IHZvaWQgZ2xvYmFsT2JqZWN0Q2xlYXJlZCgpOwogICAgICAgIHZvaWQgc2NyaXB0UGFyc2VkKGNv
bnN0IFN0cmluZyYgc2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgc3RhcnRMaW5lLCBp
bnQgc3RhcnRDb2x1bW4sIGludCBlbmRMaW5lLCBpbnQgZW5kQ29sdW1uLCBjb25zdCBib29sKiBj
b25zdCBpc0NvbnRlbnRTY3JpcHQsIGNvbnN0IFN0cmluZyYgc291cmNlTWFwVVJMKTsKICAgICAg
ICB2b2lkIHNjcmlwdEZhaWxlZFRvUGFyc2UoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgc2NyaXB0U291cmNlLCBpbnQgc3RhcnRMaW5lLCBpbnQgZXJyb3JMaW5lLCBjb25zdCBTdHJp
bmcmIGVycm9yTWVzc2FnZSk7CiAgICAgICAgdm9pZCBicmVha3BvaW50UmVzb2x2ZWQoY29uc3Qg
U3RyaW5nJiBicmVha3BvaW50SWQsIC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6RGVidWdnZXI6
OkxvY2F0aW9uPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2NhdGlvbik7CiAgICAg
ICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyIG5hbWUgJ2NhbGxGcmFtZXMnIHdoaWxlIGdlbmVy
YXRpbmcgZXZlbnQgcGF1c2VkLgogICAgICAgIGNsYXNzIENhbGxGcmFtZXMgOiBwdWJsaWMgSW5z
cGVjdG9yQXJyYXkgewogICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgIENhbGxGcmFtZXMoKSB7
fQoKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIHZvaWQgYWRkSXRlbSgvKlBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHZhbHVlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aGlzLT5wdXNoT2Jq
ZWN0KHZhbHVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
Q2FsbEZyYW1lcz4gY3JlYXRlKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBDYWxsRnJhbWVzKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgLy8gTmFt
ZWQgYWZ0ZXIgcGFyYW1ldGVyIG5hbWUgJ3JlYXNvbicgd2hpbGUgZ2VuZXJhdGluZyBldmVudCBw
YXVzZWQuCiAgICAgICAgc3RydWN0IFJlYXNvbiB7CiAgICAgICAgICAgIGVudW0gRW51bSB7CiAg
ICAgICAgICAgICAgICBYSFIgPSA1LAogICAgICAgICAgICAgICAgRE9NID0gNTksCiAgICAgICAg
ICAgICAgICBFdmVudExpc3RlbmVyID0gNjAsCiAgICAgICAgICAgICAgICBFeGNlcHRpb24gPSA2
MSwKICAgICAgICAgICAgICAgIE90aGVyID0gMjUsCiAgICAgICAgICAgIH07CiAgICAgICAgfTsg
Ly8gc3RydWN0IFJlYXNvbgoKICAgICAgICB2b2lkIHBhdXNlZCgvKlBhc3NSZWZQdHI8Q2FsbEZy
YW1lcz4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBjYWxsRnJhbWVzLCAvKlJlYXNvbjo6
RW51bSovIGNvbnN0IFN0cmluZyYgcmVhc29uLCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
ZGF0YSk7CiAgICAgICAgdm9pZCByZXN1bWVkKCk7CiAgICAgICAgdm9pZCBzZXRJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwpIHsgbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwgPSBpbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWw7IH0KICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGdldEluc3BlY3Rv
ckZyb250ZW5kQ2hhbm5lbCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOyB9
CiAgICBwcml2YXRlOgogICAgICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9pbnNwZWN0
b3JGcm9udGVuZENoYW5uZWw7CiAgICB9OwoKICAgIERlYnVnZ2VyKiBkZWJ1Z2dlcigpIHsgcmV0
dXJuICZtX2RlYnVnZ2VyOyB9CgojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIp
CiNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgIGNsYXNzIERPTURlYnVnZ2VyIHsK
ICAgIHB1YmxpYzoKICAgICAgICBET01EZWJ1Z2dlcihJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwq
IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgOiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbChp
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIHsgfQogICAgICAgIHZvaWQgc2V0SW5zcGVjdG9yRnJv
bnRlbmRDaGFubmVsKEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogaW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsKSB7IG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsID0gaW5zcGVjdG9yRnJvbnRlbmRD
aGFubmVsOyB9CiAgICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBnZXRJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwoKSB7IHJldHVybiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQog
ICAgcHJpdmF0ZToKICAgICAgICBJbnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIG1faW5zcGVjdG9y
RnJvbnRlbmRDaGFubmVsOwogICAgfTsKCiAgICBET01EZWJ1Z2dlciogZG9tZGVidWdnZXIoKSB7
IHJldHVybiAmbV9kb21kZWJ1Z2dlcjsgfQoKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RF
QlVHR0VSKQojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICBjbGFzcyBQcm9maWxl
ciB7CiAgICBwdWJsaWM6CiAgICAgICAgUHJvZmlsZXIoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWwo
aW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIGFkZFByb2ZpbGVIZWFk
ZXIoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGhlYWRlcik7CiAgICAgICAgdm9pZCBhZGRI
ZWFwU25hcHNob3RDaHVuayhpbnQgdWlkLCBjb25zdCBTdHJpbmcmIGNodW5rKTsKICAgICAgICB2
b2lkIGZpbmlzaEhlYXBTbmFwc2hvdChpbnQgdWlkKTsKICAgICAgICB2b2lkIHNldFJlY29yZGlu
Z1Byb2ZpbGUoYm9vbCBpc1Byb2ZpbGluZyk7CiAgICAgICAgdm9pZCByZXNldFByb2ZpbGVzKCk7
CiAgICAgICAgdm9pZCByZXBvcnRIZWFwU25hcHNob3RQcm9ncmVzcyhpbnQgZG9uZSwgaW50IHRv
dGFsKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJbnNwZWN0b3JG
cm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2luc3BlY3RvckZy
b250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAgICAgIEluc3Bl
Y3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKCkgeyByZXR1
cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAgICAgICAgSW5z
cGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsKICAgIH07
CgogICAgUHJvZmlsZXIqIHByb2ZpbGVyKCkgeyByZXR1cm4gJm1fcHJvZmlsZXI7IH0KCiNlbmRp
ZiAvLyBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKI2lmIEVOQUJMRShXT1JLRVJTKQogICAg
Y2xhc3MgV29ya2VyIHsKICAgIHB1YmxpYzoKICAgICAgICBXb3JrZXIoSW5zcGVjdG9yRnJvbnRl
bmRDaGFubmVsKiBpbnNwZWN0b3JGcm9udGVuZENoYW5uZWwpIDogbV9pbnNwZWN0b3JGcm9udGVu
ZENoYW5uZWwoaW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKSB7IH0KICAgICAgICB2b2lkIHdvcmtl
ckNyZWF0ZWQoaW50IHdvcmtlcklkLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpbnNwZWN0b3JD
b25uZWN0ZWQpOwogICAgICAgIHZvaWQgd29ya2VyVGVybWluYXRlZChpbnQgd29ya2VySWQpOwog
ICAgICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlRnJvbVdvcmtlcihpbnQgd29ya2VySWQsIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBtZXNzYWdlKTsKICAgICAgICB2b2lkIGRpc2Nvbm5lY3Rl
ZEZyb21Xb3JrZXIoKTsKICAgICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbChJ
bnNwZWN0b3JGcm9udGVuZENoYW5uZWwqIGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCkgeyBtX2lu
c3BlY3RvckZyb250ZW5kQ2hhbm5lbCA9IGluc3BlY3RvckZyb250ZW5kQ2hhbm5lbDsgfQogICAg
ICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogZ2V0SW5zcGVjdG9yRnJvbnRlbmRDaGFubmVs
KCkgeyByZXR1cm4gbV9pbnNwZWN0b3JGcm9udGVuZENoYW5uZWw7IH0KICAgIHByaXZhdGU6CiAg
ICAgICAgSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKiBtX2luc3BlY3RvckZyb250ZW5kQ2hhbm5l
bDsKICAgIH07CgogICAgV29ya2VyKiB3b3JrZXIoKSB7IHJldHVybiAmbV93b3JrZXI7IH0KCiNl
bmRpZiAvLyBFTkFCTEUoV09SS0VSUykKCnByaXZhdGU6CiAgICBJbnNwZWN0b3JGcm9udGVuZENo
YW5uZWwqIG1faW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsOwogICAgSW5zcGVjdG9yIG1faW5zcGVj
dG9yOwogICAgTWVtb3J5IG1fbWVtb3J5OwogICAgUGFnZSBtX3BhZ2U7CiAgICBSdW50aW1lIG1f
cnVudGltZTsKICAgIENvbnNvbGUgbV9jb25zb2xlOwogICAgTmV0d29yayBtX25ldHdvcms7CiNp
ZiBFTkFCTEUoU1FMX0RBVEFCQVNFKQogICAgRGF0YWJhc2UgbV9kYXRhYmFzZTsKI2VuZGlmIC8v
IEVOQUJMRShTUUxfREFUQUJBU0UpCiAgICBET01TdG9yYWdlIG1fZG9tc3RvcmFnZTsKICAgIEFw
cGxpY2F0aW9uQ2FjaGUgbV9hcHBsaWNhdGlvbmNhY2hlOwojaWYgRU5BQkxFKEZJTEVfU1lTVEVN
KQogICAgRmlsZVN5c3RlbSBtX2ZpbGVzeXN0ZW07CiNlbmRpZiAvLyBFTkFCTEUoRklMRV9TWVNU
RU0pCiAgICBET00gbV9kb207CiAgICBDU1MgbV9jc3M7CiAgICBUaW1lbGluZSBtX3RpbWVsaW5l
OwojaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICBEZWJ1Z2dlciBtX2RlYnVnZ2Vy
OwojZW5kaWYgLy8gRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiNpZiBFTkFCTEUoSkFWQVND
UklQVF9ERUJVR0dFUikKICAgIERPTURlYnVnZ2VyIG1fZG9tZGVidWdnZXI7CiNlbmRpZiAvLyBF
TkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKI2lmIEVOQUJMRShKQVZBU0NSSVBUX0RFQlVHR0VS
KQogICAgUHJvZmlsZXIgbV9wcm9maWxlcjsKI2VuZGlmIC8vIEVOQUJMRShKQVZBU0NSSVBUX0RF
QlVHR0VSKQojaWYgRU5BQkxFKFdPUktFUlMpCiAgICBXb3JrZXIgbV93b3JrZXI7CiNlbmRpZiAv
LyBFTkFCTEUoV09SS0VSUykKfTsKCn0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKI2VuZGlmIC8vICFk
ZWZpbmVkKEluc3BlY3RvckZyb250ZW5kX2gpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>122226</attachid>
            <date>2012-01-12 06:10:33 -0800</date>
            <delta_ts>2012-01-12 06:10:33 -0800</delta_ts>
            <desc>Generator output diff</desc>
            <filename>diff</filename>
            <type>text/plain</type>
            <size>22879</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">MjdhMjgsMzEKPiBuYW1lc3BhY2UgQ29uc29sZSB7Cj4gY2xhc3MgU3RhY2tUcmFjZTsKPiB9IC8v
IENvbnNvbGUKPiAKMjhhMzMKPiBjbGFzcyBDU1NSdWxlOwozMGEzNiwzNwo+IGNsYXNzIENTU1By
b3BlcnR5Owo+IGNsYXNzIENTU01lZGlhOwozNWE0Mwo+IGNsYXNzIFNjb3BlOwoxNzhhMTg3LDIx
OAo+ICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdub2RlQ291bnQnIHdoaWxlIGdl
bmVyYXRpbmcgRE9NR3JvdXAuCj4gICAgIGNsYXNzIE5vZGVDb3VudCA6IHB1YmxpYyBJbnNwZWN0
b3JBcnJheSB7Cj4gICAgIHByaXZhdGU6Cj4gICAgICAgICBOb2RlQ291bnQoKSB7fQo+IAo+ICAg
ICBwdWJsaWM6Cj4gICAgICAgICB2b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjpNZW1vcnk6Ok5vZGVDb3VudD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUp
Cj4gICAgICAgICB7Cj4gICAgICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1ZSk7Cj4gICAg
ICAgICB9Cj4gCj4gICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxOb2RlQ291bnQ+IGNyZWF0ZSgp
IHsKPiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE5vZGVDb3VudCgpKTsKPiAgICAg
ICAgIH0KPiAgICAgfTsKPiAKPiAgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnbGlz
dGVuZXJDb3VudCcgd2hpbGUgZ2VuZXJhdGluZyBET01Hcm91cC4KPiAgICAgY2xhc3MgTGlzdGVu
ZXJDb3VudCA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7Cj4gICAgIHByaXZhdGU6Cj4gICAgICAg
ICBMaXN0ZW5lckNvdW50KCkge30KPiAKPiAgICAgcHVibGljOgo+ICAgICAgICAgdm9pZCBhZGRJ
dGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6TWVtb3J5OjpMaXN0ZW5lckNvdW50PiovIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKPiAgICAgICAgIHsKPiAgICAgICAgICAg
ICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKPiAgICAgICAgIH0KPiAKPiAgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPExpc3RlbmVyQ291bnQ+IGNyZWF0ZSgpIHsKPiAgICAgICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IExpc3RlbmVyQ291bnQoKSk7Cj4gICAgICAgICB9Cj4gICAgIH07Cj4g
CjIyMGMyNjAKPCAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb2RlQ291bnRTZXQ+JiBzZXROb2Rl
Q291bnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCi0tLQo+ICAgICAgICAgQnVp
bGRlcjxTVEFURSB8IE5vZGVDb3VudFNldD4mIHNldE5vZGVDb3VudCgvKlBhc3NSZWZQdHI8Tm9k
ZUNvdW50PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQoyMjdjMjY3CjwgICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgTGlzdGVuZXJDb3VudFNldD4mIHNldExpc3RlbmVyQ291bnQo
UGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCi0tLQo+ICAgICAgICAgQnVpbGRlcjxT
VEFURSB8IExpc3RlbmVyQ291bnRTZXQ+JiBzZXRMaXN0ZW5lckNvdW50KC8qUGFzc1JlZlB0cjxM
aXN0ZW5lckNvdW50PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQozODAsMzgx
YzQyMCw0MjMKPCAgICAgLy8gTmFtZWQgYXMgYW4gaXRlbSBvZiBhcnJheS4KPCAgICAgY2xhc3Mg
UmVzb3VyY2VzSXRlbSA6IHB1YmxpYyBJbnNwZWN0b3JPYmplY3QgewotLS0KPiAgICAgY2xhc3Mg
UmVzb3VyY2VzIDogcHVibGljIEluc3BlY3RvckFycmF5IHsKPiAgICAgcHJpdmF0ZToKPiAgICAg
ICAgIFJlc291cmNlcygpIHt9Cj4gCjM4MywzODljNDI1LDQzMwo8ICAgICAgICAgZW51bSB7Cjwg
ICAgICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAo8ICAgICAgICAgICAgIFVybFNldCA9IDEgPDwg
MCwKPCAgICAgICAgICAgICBUeXBlU2V0ID0gMSA8PCAxLAo8ICAgICAgICAgICAgIE1pbWVUeXBl
U2V0ID0gMSA8PCAyLAo8ICAgICAgICAgICAgIEFsbEZpZWxkc1NldCA9IChVcmxTZXQgfCBUeXBl
U2V0IHwgTWltZVR5cGVTZXQpCjwgICAgICAgICB9OwotLS0KPiAgICAgICAgIGNsYXNzIEl0ZW0g
OiBwdWJsaWMgSW5zcGVjdG9yT2JqZWN0IHsKPiAgICAgICAgIHB1YmxpYzoKPiAgICAgICAgICAg
ICBlbnVtIHsKPiAgICAgICAgICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAo+ICAgICAgICAgICAg
ICAgICBVcmxTZXQgPSAxIDw8IDAsCj4gICAgICAgICAgICAgICAgIFR5cGVTZXQgPSAxIDw8IDEs
Cj4gICAgICAgICAgICAgICAgIE1pbWVUeXBlU2V0ID0gMSA8PCAyLAo+ICAgICAgICAgICAgICAg
ICBBbGxGaWVsZHNTZXQgPSAoVXJsU2V0IHwgVHlwZVNldCB8IE1pbWVUeXBlU2V0KQo+ICAgICAg
ICAgICAgIH07CjM5MSwzOTRjNDM1LDQ5MQo8ICAgICAgICAgdGVtcGxhdGU8aW50IFNUQVRFPgo8
ICAgICAgICAgY2xhc3MgQnVpbGRlciB7CjwgICAgICAgICBwcml2YXRlOgo8ICAgICAgICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IG1fcmVzdWx0OwotLS0KPiAgICAgICAgICAgICB0ZW1w
bGF0ZTxpbnQgU1RBVEU+Cj4gICAgICAgICAgICAgY2xhc3MgQnVpbGRlciB7Cj4gICAgICAgICAg
ICAgcHJpdmF0ZToKPiAgICAgICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbV9y
ZXN1bHQ7Cj4gCj4gICAgICAgICAgICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNU
QVRFIHwgU1RFUD4mIGNhc3RTdGF0ZSgpCj4gICAgICAgICAgICAgICAgIHsKPiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4q
Pih0aGlzKTsKPiAgICAgICAgICAgICAgICAgfQo+IAo+ICAgICAgICAgICAgICAgICBCdWlsZGVy
KFBhc3NSZWZQdHI8SXRlbT4gcHRyKQo+ICAgICAgICAgICAgICAgICB7Cj4gICAgICAgICAgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVh
dGVkX2luX25vbl9pbml0X3N0YXRlKTsKPiAgICAgICAgICAgICAgICAgICAgIG1fcmVzdWx0ID0g
cHRyOwo+ICAgICAgICAgICAgICAgICB9Cj4gICAgICAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBJ
dGVtOwo+ICAgICAgICAgICAgIHB1YmxpYzoKPiAgICAgICAgIAo+ICAgICAgICAgICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgVXJsU2V0PiYgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUpCj4gICAg
ICAgICAgICAgICAgIHsKPiAgICAgICAgICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBVcmxTZXQpLCBwcm9wZXJ0eV91cmxfYWxyZWFkeV9zZXQpOwo+ICAgICAgICAgICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidXJsIiwgdmFsdWUpOwo+ICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxVcmxTZXQ+KCk7Cj4gICAgICAgICAgICAgICAgIH0KPiAg
ICAgICAgIAo+ICAgICAgICAgICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5
cGUoVHlwZUJ1aWxkZXI6OlBhZ2U6OlJlc291cmNlVHlwZTo6RW51bSB2YWx1ZSkKPiAgICAgICAg
ICAgICAgICAgewo+ICAgICAgICAgICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IFR5cGVTZXQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKPiAgICAgICAgICAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiLCBnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1
ZSkpOwo+ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBlU2V0PigpOwo+
ICAgICAgICAgICAgICAgICB9Cj4gICAgICAgICAKPiAgICAgICAgICAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFR5cGVTZXQ+JiBzZXRUeXBlKGNvbnN0IFN0cmluZyYgdmFsdWUpCj4gICAgICAgICAg
ICAgICAgIHsKPiAgICAgICAgICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBU
eXBlU2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7Cj4gICAgICAgICAgICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIiwgdmFsdWUpOwo+ICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBlU2V0PigpOwo+ICAgICAgICAgICAgICAgICB9Cj4gICAg
ICAgICAKPiAgICAgICAgICAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1pbWVUeXBlU2V0PiYgc2V0
TWltZVR5cGUoY29uc3QgU3RyaW5nJiB2YWx1ZSkKPiAgICAgICAgICAgICAgICAgewo+ICAgICAg
ICAgICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1pbWVUeXBlU2V0KSwgcHJv
cGVydHlfbWltZVR5cGVfYWxyZWFkeV9zZXQpOwo+ICAgICAgICAgICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygibWltZVR5cGUiLCB2YWx1ZSk7Cj4gICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPE1pbWVUeXBlU2V0PigpOwo+ICAgICAgICAgICAgICAgICB9Cj4gICAg
ICAgICAKPiAgICAgICAgICAgICAgICAgb3BlcmF0b3IgUmVmUHRyPEl0ZW0+JiAoKQo+ICAgICAg
ICAgICAgICAgICB7Cj4gICAgICAgICAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9
PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwo+ICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PFJlZlB0cjxJdGVtPio+KCZtX3Jlc3VsdCk7Cj4g
ICAgICAgICAgICAgICAgIH0KPiAKPiAgICAgICAgICAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0
cjxJdGVtPiAoKQo+ICAgICAgICAgICAgICAgICB7Cj4gICAgICAgICAgICAgICAgICAgICByZXR1
cm4gUmVmUHRyPEl0ZW0+KCp0aGlzKTsKPiAgICAgICAgICAgICAgICAgfQo+ICAgICAgICAgICAg
IH07CjM5NmM0OTMsNTAwCjwgICAgICAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8
U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKLS0tCj4gICAgICAgICAgICAgLyoKPiAgICAgICAg
ICAgICAgKiBTeW50aGV0aWMgY29uc3RydWN0b3I6Cj4gICAgICAgICAgICAgICogUmVmUHRyPEl0
ZW0+IHJlc3VsdCA9IEl0ZW06OmNyZWF0ZSgpCj4gICAgICAgICAgICAgICogICAgIC5zZXRVcmwo
Li4uKQo+ICAgICAgICAgICAgICAqICAgICAuc2V0VHlwZSguLi4pCj4gICAgICAgICAgICAgICog
ICAgIC5zZXRNaW1lVHlwZSguLi4pOwo+ICAgICAgICAgICAgICAqLwo+ICAgICAgICAgICAgIHN0
YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQozOThjNTAyCjwgICAgICAgICAgICAg
ICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWlsZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlz
KTsKLS0tCj4gICAgICAgICAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihhZG9w
dFJlZihuZXcgSXRlbSgpKSk7CjM5OWE1MDQKPiAgICAgICAgIH07CjQwMSw0NDFjNTA2LDUwOQo8
ICAgICAgICAgICAgIEJ1aWxkZXIoUGFzc1JlZlB0cjxSZXNvdXJjZXNJdGVtPiBwdHIpCjwgICAg
ICAgICAgICAgewo8ICAgICAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0Zp
ZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKPCAgICAgICAgICAg
ICAgICAgbV9yZXN1bHQgPSBwdHI7CjwgICAgICAgICAgICAgfQo8ICAgICAgICAgICAgIGZyaWVu
ZCBjbGFzcyBSZXNvdXJjZXNJdGVtOwo8ICAgICAgICAgcHVibGljOgo8ICAgICAKPCAgICAgICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgVXJsU2V0PiYgc2V0VXJsKGNvbnN0IFN0cmluZyYgdmFsdWUp
CjwgICAgICAgICAgICAgewo8ICAgICAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgVXJsU2V0KSwgcHJvcGVydHlfdXJsX2FscmVhZHlfc2V0KTsKPCAgICAgICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygidXJsIiwgdmFsdWUpOwo8ICAgICAgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFVybFNldD4oKTsKPCAgICAgICAgICAgICB9CjwgICAgIAo8ICAgICAgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShUeXBlQnVpbGRlcjo6UGFnZTo6
UmVzb3VyY2VUeXBlOjpFbnVtIHZhbHVlKQo8ICAgICAgICAgICAgIHsKPCAgICAgICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR5cGVTZXQpLCBwcm9wZXJ0eV90eXBlX2FscmVh
ZHlfc2V0KTsKPCAgICAgICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSIsIGdl
dEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CjwgICAgICAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8VHlwZVNldD4oKTsKPCAgICAgICAgICAgICB9CjwgICAgIAo8ICAgICAgICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKQo8ICAg
ICAgICAgICAgIHsKPCAgICAgICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR5
cGVTZXQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKPCAgICAgICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygidHlwZSIsIHZhbHVlKTsKPCAgICAgICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxUeXBlU2V0PigpOwo8ICAgICAgICAgICAgIH0KPCAgICAgCjwgICAgICAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IE1pbWVUeXBlU2V0PiYgc2V0TWltZVR5cGUoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKPCAgICAgICAgICAgICB7CjwgICAgICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBNaW1lVHlwZVNldCksIHByb3BlcnR5X21pbWVUeXBlX2FscmVhZHlfc2V0KTsK
PCAgICAgICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWltZVR5cGUiLCB2YWx1ZSk7
CjwgICAgICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWltZVR5cGVTZXQ+KCk7CjwgICAg
ICAgICAgICAgfQo8ICAgICAKPCAgICAgICAgICAgICBvcGVyYXRvciBSZWZQdHI8UmVzb3VyY2Vz
SXRlbT4mICgpCjwgICAgICAgICAgICAgewo8ICAgICAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJlc3VsdF9pc19ub3RfcmVhZHkpOwo8ICAgICAgICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPFJlc291cmNlc0l0ZW0+Kj4o
Jm1fcmVzdWx0KTsKPCAgICAgICAgICAgICB9Ci0tLQo+ICAgICAgICAgdm9pZCBhZGRJdGVtKC8q
UGFzc1JlZlB0cjxJdGVtPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKPiAg
ICAgICAgIHsKPiAgICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKPiAgICAgICAg
IH0KNDQzLDQ0N2M1MTEsNTE5CjwgICAgICAgICAgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxSZXNv
dXJjZXNJdGVtPiAoKQo8ICAgICAgICAgICAgIHsKPCAgICAgICAgICAgICAgICAgcmV0dXJuIFJl
ZlB0cjxSZXNvdXJjZXNJdGVtPigqdGhpcyk7CjwgICAgICAgICAgICAgfQo8ICAgICAgICAgfTsK
LS0tCj4gICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSZXNvdXJjZXM+IGNyZWF0ZSgpIHsKPiAg
ICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlc291cmNlcygpKTsKPiAgICAgICAgIH0K
PiAgICAgfTsKPiAKPiAgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnY2hpbGRGcmFt
ZXMnIHdoaWxlIGdlbmVyYXRpbmcgRnJhbWVSZXNvdXJjZVRyZWUuCj4gICAgIGNsYXNzIENoaWxk
RnJhbWVzIDogcHVibGljIEluc3BlY3RvckFycmF5IHsKPiAgICAgcHJpdmF0ZToKPiAgICAgICAg
IENoaWxkRnJhbWVzKCkge30KNDQ5LDQ1NmM1MjEsNTIyCjwgICAgICAgICAvKgo8ICAgICAgICAg
ICogU3ludGhldGljIGNvbnN0cnVjdG9yOgo8ICAgICAgICAgICogUmVmUHRyPFJlc291cmNlc0l0
ZW0+IHJlc3VsdCA9IFJlc291cmNlc0l0ZW06OmNyZWF0ZSgpCjwgICAgICAgICAgKiAgICAgLnNl
dFVybCguLi4pCjwgICAgICAgICAgKiAgICAgLnNldFR5cGUoLi4uKQo8ICAgICAgICAgICogICAg
IC5zZXRNaW1lVHlwZSguLi4pOwo8ICAgICAgICAgICovCjwgICAgICAgICBzdGF0aWMgQnVpbGRl
cjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKLS0tCj4gICAgIHB1YmxpYzoKPiAgICAgICAgIHZvaWQg
YWRkSXRlbSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVl
PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKNDU4YzUyNCw1MjgKPCAgICAg
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oYWRvcHRSZWYobmV3IFJlc291cmNl
c0l0ZW0oKSkpOwotLS0KPiAgICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKPiAg
ICAgICAgIH0KPiAKPiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENoaWxkRnJhbWVzPiBjcmVh
dGUoKSB7Cj4gICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaGlsZEZyYW1lcygpKTsK
NDk0YzU2NAo8ICAgICAgICAgQnVpbGRlcjxTVEFURSB8IFJlc291cmNlc1NldD4mIHNldFJlc291
cmNlcyhQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKLS0tCj4gICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgUmVzb3VyY2VzU2V0PiYgc2V0UmVzb3VyY2VzKC8qUGFzc1JlZlB0cjxSZXNv
dXJjZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCjUyNGM1OTQKPCAgICAg
dm9pZCBzZXRDaGlsZEZyYW1lcyhQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKLS0t
Cj4gICAgIHZvaWQgc2V0Q2hpbGRGcmFtZXMoLypQYXNzUmVmUHRyPENoaWxkRnJhbWVzPiovIFBh
c3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQoxMTM3YTEyMDgsMTIyMwo+ICAgICAvLyBO
YW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdwYXJhbWV0ZXJzJyB3aGlsZSBnZW5lcmF0aW5nIENv
bnNvbGVNZXNzYWdlLgo+ICAgICBjbGFzcyBQYXJhbWV0ZXJzIDogcHVibGljIEluc3BlY3RvckFy
cmF5IHsKPiAgICAgcHJpdmF0ZToKPiAgICAgICAgIFBhcmFtZXRlcnMoKSB7fQo+IAo+ICAgICBw
dWJsaWM6Cj4gICAgICAgICB2b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVl
KQo+ICAgICAgICAgewo+ICAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwo+ICAg
ICAgICAgfQo+IAo+ICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UGFyYW1ldGVycz4gY3JlYXRl
KCkgewo+ICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGFyYW1ldGVycygpKTsKPiAg
ICAgICAgIH0KPiAgICAgfTsKPiAKMTI0OGMxMzM0CjwgICAgIHZvaWQgc2V0UGFyYW1ldGVycyhQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKLS0tCj4gICAgIHZvaWQgc2V0UGFyYW1l
dGVycygvKlBhc3NSZWZQdHI8UGFyYW1ldGVycz4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5
PiB2YWx1ZSkKMTI1M2MxMzM5CjwgICAgIHZvaWQgc2V0U3RhY2tUcmFjZShQYXNzUmVmUHRyPElu
c3BlY3RvckFycmF5PiB2YWx1ZSkKLS0tCj4gICAgIHZvaWQgc2V0U3RhY2tUcmFjZSgvKlBhc3NS
ZWZQdHI8VHlwZUJ1aWxkZXI6OkNvbnNvbGU6OlN0YWNrVHJhY2U+Ki8gUGFzc1JlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gdmFsdWUpCjEzNDdhMTQzNCwxNDQ5Cj4gLyogQ2FsbCBmcmFtZXMgZm9yIGFz
c2VydGlvbnMgb3IgZXJyb3IgbWVzc2FnZXMuICovCj4gY2xhc3MgU3RhY2tUcmFjZSA6IHB1Ymxp
YyBJbnNwZWN0b3JBcnJheSB7Cj4gcHJpdmF0ZToKPiAgICAgU3RhY2tUcmFjZSgpIHt9Cj4gCj4g
cHVibGljOgo+ICAgICB2b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDb25z
b2xlOjpDYWxsRnJhbWU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQo+ICAg
ICB7Cj4gICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKPiAgICAgfQo+IAo+ICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTdGFja1RyYWNlPiBjcmVhdGUoKSB7Cj4gICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFN0YWNrVHJhY2UoKSk7Cj4gICAgIH0KPiB9Owo+IAoyMDQ1YzIxNDcKPCAg
ICAgdm9pZCBzZXRTdGFja1RyYWNlKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQot
LS0KPiAgICAgdm9pZCBzZXRTdGFja1RyYWNlKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q29u
c29sZTo6U3RhY2tUcmFjZT4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKMjMw
OGEyNDExLDI0MjYKPiAgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAncmVzb3VyY2Vz
JyB3aGlsZSBnZW5lcmF0aW5nIEFwcGxpY2F0aW9uQ2FjaGUuCj4gICAgIGNsYXNzIFJlc291cmNl
cyA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7Cj4gICAgIHByaXZhdGU6Cj4gICAgICAgICBSZXNv
dXJjZXMoKSB7fQo+IAo+ICAgICBwdWJsaWM6Cj4gICAgICAgICB2b2lkIGFkZEl0ZW0oLypQYXNz
UmVmUHRyPFR5cGVCdWlsZGVyOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQo+ICAgICAgICAgewo+
ICAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwo+ICAgICAgICAgfQo+IAo+ICAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmVzb3VyY2VzPiBjcmVhdGUoKSB7Cj4gICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZXNvdXJjZXMoKSk7Cj4gICAgICAgICB9Cj4gICAgIH07
Cj4gCjIzNjVjMjQ4Mwo8ICAgICAgICAgQnVpbGRlcjxTVEFURSB8IFJlc291cmNlc1NldD4mIHNl
dFJlc291cmNlcyhQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKLS0tCj4gICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgUmVzb3VyY2VzU2V0PiYgc2V0UmVzb3VyY2VzKC8qUGFzc1JlZlB0
cjxSZXNvdXJjZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCjI0NzlhMjU5
OCwyNjI5Cj4gICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2NoaWxkcmVuJyB3aGls
ZSBnZW5lcmF0aW5nIE5vZGUuCj4gICAgIGNsYXNzIENoaWxkcmVuIDogcHVibGljIEluc3BlY3Rv
ckFycmF5IHsKPiAgICAgcHJpdmF0ZToKPiAgICAgICAgIENoaWxkcmVuKCkge30KPiAKPiAgICAg
cHVibGljOgo+ICAgICAgICAgdm9pZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6
RE9NOjpOb2RlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKPiAgICAgICAg
IHsKPiAgICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKPiAgICAgICAgIH0KPiAK
PiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPENoaWxkcmVuPiBjcmVhdGUoKSB7Cj4gICAgICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDaGlsZHJlbigpKTsKPiAgICAgICAgIH0KPiAgICAg
fTsKPiAKPiAgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnYXR0cmlidXRlcycgd2hp
bGUgZ2VuZXJhdGluZyBOb2RlLgo+ICAgICBjbGFzcyBBdHRyaWJ1dGVzIDogcHVibGljIEluc3Bl
Y3RvckFycmF5IHsKPiAgICAgcHJpdmF0ZToKPiAgICAgICAgIEF0dHJpYnV0ZXMoKSB7fQo+IAo+
ICAgICBwdWJsaWM6Cj4gICAgICAgICB2b2lkIGFkZEl0ZW0oY29uc3QgU3RyaW5nJiB2YWx1ZSkK
PiAgICAgICAgIHsKPiAgICAgICAgICAgICB0aGlzLT5wdXNoU3RyaW5nKHZhbHVlKTsKPiAgICAg
ICAgIH0KPiAKPiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEF0dHJpYnV0ZXM+IGNyZWF0ZSgp
IHsKPiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEF0dHJpYnV0ZXMoKSk7Cj4gICAg
ICAgICB9Cj4gICAgIH07Cj4gCjI1NzRjMjcyNAo8ICAgICB2b2lkIHNldENoaWxkcmVuKFBhc3NS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQotLS0KPiAgICAgdm9pZCBzZXRDaGlsZHJlbigv
KlBhc3NSZWZQdHI8Q2hpbGRyZW4+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUp
CjI1NzljMjcyOQo8ICAgICB2b2lkIHNldEF0dHJpYnV0ZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gdmFsdWUpCi0tLQo+ICAgICB2b2lkIHNldEF0dHJpYnV0ZXMoLypQYXNzUmVmUHRyPEF0
dHJpYnV0ZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCjMwMTFhMzE2Miwz
MTc3Cj4gICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3J1bGVzJyB3aGlsZSBnZW5l
cmF0aW5nIFBzZXVkb0lkUnVsZXMuCj4gICAgIGNsYXNzIFJ1bGVzIDogcHVibGljIEluc3BlY3Rv
ckFycmF5IHsKPiAgICAgcHJpdmF0ZToKPiAgICAgICAgIFJ1bGVzKCkge30KPiAKPiAgICAgcHVi
bGljOgo+ICAgICAgICAgdm9pZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NT
OjpDU1NSdWxlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKPiAgICAgICAg
IHsKPiAgICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKPiAgICAgICAgIH0KPiAK
PiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJ1bGVzPiBjcmVhdGUoKSB7Cj4gICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSdWxlcygpKTsKPiAgICAgICAgIH0KPiAgICAgfTsKPiAK
MzA0NGMzMjEwCjwgICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUnVsZXNTZXQ+JiBzZXRSdWxlcyhQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKLS0tCj4gICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgUnVsZXNTZXQ+JiBzZXRSdWxlcygvKlBhc3NSZWZQdHI8UnVsZXM+Ki8gUGFzc1JlZlB0
cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCjMwNzdhMzI0NCwzMjU5Cj4gICAgIC8vIE5hbWVkIGFm
dGVyIHByb3BlcnR5IG5hbWUgJ21hdGNoZWRDU1NSdWxlcycgd2hpbGUgZ2VuZXJhdGluZyBJbmhl
cml0ZWRTdHlsZUVudHJ5Lgo+ICAgICBjbGFzcyBNYXRjaGVkQ1NTUnVsZXMgOiBwdWJsaWMgSW5z
cGVjdG9yQXJyYXkgewo+ICAgICBwcml2YXRlOgo+ICAgICAgICAgTWF0Y2hlZENTU1J1bGVzKCkg
e30KPiAKPiAgICAgcHVibGljOgo+ICAgICAgICAgdm9pZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxU
eXBlQnVpbGRlcjo6Q1NTOjpDU1NSdWxlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2
YWx1ZSkKPiAgICAgICAgIHsKPiAgICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsK
PiAgICAgICAgIH0KPiAKPiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1hdGNoZWRDU1NSdWxl
cz4gY3JlYXRlKCkgewo+ICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWF0Y2hlZENT
U1J1bGVzKCkpOwo+ICAgICAgICAgfQo+ICAgICB9Owo+IAozMTAyYzMyODQKPCAgICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBNYXRjaGVkQ1NTUnVsZXNTZXQ+JiBzZXRNYXRjaGVkQ1NTUnVsZXMoUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCi0tLQo+ICAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IE1hdGNoZWRDU1NSdWxlc1NldD4mIHNldE1hdGNoZWRDU1NSdWxlcygvKlBhc3NSZWZQdHI8
TWF0Y2hlZENTU1J1bGVzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQozMjg5
YTM0NzIsMzQ4Nwo+ICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdydWxlcycgd2hp
bGUgZ2VuZXJhdGluZyBDU1NTdHlsZVNoZWV0Qm9keS4KPiAgICAgY2xhc3MgUnVsZXMgOiBwdWJs
aWMgSW5zcGVjdG9yQXJyYXkgewo+ICAgICBwcml2YXRlOgo+ICAgICAgICAgUnVsZXMoKSB7fQo+
IAo+ICAgICBwdWJsaWM6Cj4gICAgICAgICB2b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVC
dWlsZGVyOjpDU1M6OkNTU1J1bGU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVl
KQo+ICAgICAgICAgewo+ICAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwo+ICAg
ICAgICAgfQo+IAo+ICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UnVsZXM+IGNyZWF0ZSgpIHsK
PiAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJ1bGVzKCkpOwo+ICAgICAgICAgfQo+
ICAgICB9Owo+IAozMzIyYzM1MjAKPCAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBSdWxlc1NldD4m
IHNldFJ1bGVzKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQotLS0KPiAgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBSdWxlc1NldD4mIHNldFJ1bGVzKC8qUGFzc1JlZlB0cjxSdWxlcz4q
LyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKMzM3MGEzNTY5LDM1ODQKPiAgICAg
Ly8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnbWVkaWEnIHdoaWxlIGdlbmVyYXRpbmcgQ1NT
UnVsZS4KPiAgICAgY2xhc3MgTWVkaWEgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewo+ICAgICBw
cml2YXRlOgo+ICAgICAgICAgTWVkaWEoKSB7fQo+IAo+ICAgICBwdWJsaWM6Cj4gICAgICAgICB2
b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OkNTU01lZGlhPiovIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkKPiAgICAgICAgIHsKPiAgICAgICAgICAg
ICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKPiAgICAgICAgIH0KPiAKPiAgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPE1lZGlhPiBjcmVhdGUoKSB7Cj4gICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBNZWRpYSgpKTsKPiAgICAgICAgIH0KPiAgICAgfTsKPiAKMzQ3M2MzNjg3CjwgICAg
IHZvaWQgc2V0TWVkaWEoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCi0tLQo+ICAg
ICB2b2lkIHNldE1lZGlhKC8qUGFzc1JlZlB0cjxNZWRpYT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiB2YWx1ZSkKMzYxMmEzODI3LDM4NTgKPiAgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVy
dHkgbmFtZSAnY3NzUHJvcGVydGllcycgd2hpbGUgZ2VuZXJhdGluZyBDU1NTdHlsZS4KPiAgICAg
Y2xhc3MgQ3NzUHJvcGVydGllcyA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7Cj4gICAgIHByaXZh
dGU6Cj4gICAgICAgICBDc3NQcm9wZXJ0aWVzKCkge30KPiAKPiAgICAgcHVibGljOgo+ICAgICAg
ICAgdm9pZCBhZGRJdGVtKC8qUGFzc1JlZlB0cjxUeXBlQnVpbGRlcjo6Q1NTOjpDU1NQcm9wZXJ0
eT4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCj4gICAgICAgICB7Cj4gICAg
ICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1ZSk7Cj4gICAgICAgICB9Cj4gCj4gICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDc3NQcm9wZXJ0aWVzPiBjcmVhdGUoKSB7Cj4gICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDc3NQcm9wZXJ0aWVzKCkpOwo+ICAgICAgICAgfQo+ICAg
ICB9Owo+IAo+ICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdzaG9ydGhhbmRFbnRy
aWVzJyB3aGlsZSBnZW5lcmF0aW5nIENTU1N0eWxlLgo+ICAgICBjbGFzcyBTaG9ydGhhbmRFbnRy
aWVzIDogcHVibGljIEluc3BlY3RvckFycmF5IHsKPiAgICAgcHJpdmF0ZToKPiAgICAgICAgIFNo
b3J0aGFuZEVudHJpZXMoKSB7fQo+IAo+ICAgICBwdWJsaWM6Cj4gICAgICAgICB2b2lkIGFkZEl0
ZW0oUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZhbHVlKQo+ICAgICAgICAgewo+ICAgICAg
ICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwo+ICAgICAgICAgfQo+IAo+ICAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8U2hvcnRoYW5kRW50cmllcz4gY3JlYXRlKCkgewo+ICAgICAgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2hvcnRoYW5kRW50cmllcygpKTsKPiAgICAgICAgIH0K
PiAgICAgfTsKPiAKMzY0MGMzODg2CjwgICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ3NzUHJvcGVy
dGllc1NldD4mIHNldENzc1Byb3BlcnRpZXMoUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFs
dWUpCi0tLQo+ICAgICAgICAgQnVpbGRlcjxTVEFURSB8IENzc1Byb3BlcnRpZXNTZXQ+JiBzZXRD
c3NQcm9wZXJ0aWVzKC8qUGFzc1JlZlB0cjxDc3NQcm9wZXJ0aWVzPiovIFBhc3NSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+IHZhbHVlKQozNjQ3YzM4OTMKPCAgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBT
aG9ydGhhbmRFbnRyaWVzU2V0PiYgc2V0U2hvcnRoYW5kRW50cmllcyhQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiB2YWx1ZSkKLS0tCj4gICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU2hvcnRoYW5k
RW50cmllc1NldD4mIHNldFNob3J0aGFuZEVudHJpZXMoLypQYXNzUmVmUHRyPFNob3J0aGFuZEVu
dHJpZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCjQwMTRhNDI2MSw0Mjc2
Cj4gICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RhdGEnIHdoaWxlIGdlbmVyYXRp
bmcgU2VsZWN0b3JQcm9maWxlLgo+ICAgICBjbGFzcyBEYXRhIDogcHVibGljIEluc3BlY3RvckFy
cmF5IHsKPiAgICAgcHJpdmF0ZToKPiAgICAgICAgIERhdGEoKSB7fQo+IAo+ICAgICBwdWJsaWM6
Cj4gICAgICAgICB2b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDU1M6OlNl
bGVjdG9yUHJvZmlsZUVudHJ5PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2YWx1ZSkK
PiAgICAgICAgIHsKPiAgICAgICAgICAgICB0aGlzLT5wdXNoT2JqZWN0KHZhbHVlKTsKPiAgICAg
ICAgIH0KPiAKPiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPERhdGE+IGNyZWF0ZSgpIHsKPiAg
ICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IERhdGEoKSk7Cj4gICAgICAgICB9Cj4gICAg
IH07Cj4gCjQwNDdjNDMwOQo8ICAgICAgICAgQnVpbGRlcjxTVEFURSB8IERhdGFTZXQ+JiBzZXRE
YXRhKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlKQotLS0KPiAgICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBEYXRhU2V0PiYgc2V0RGF0YSgvKlBhc3NSZWZQdHI8RGF0YT4qLyBQYXNzUmVm
UHRyPEluc3BlY3RvckFycmF5PiB2YWx1ZSkKNDA4M2E0MzQ2LDQzNjEKPiAgICAgLy8gTmFtZWQg
YWZ0ZXIgcHJvcGVydHkgbmFtZSAnY2hpbGRyZW4nIHdoaWxlIGdlbmVyYXRpbmcgVGltZWxpbmVF
dmVudC4KPiAgICAgY2xhc3MgQ2hpbGRyZW4gOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewo+ICAg
ICBwcml2YXRlOgo+ICAgICAgICAgQ2hpbGRyZW4oKSB7fQo+IAo+ICAgICBwdWJsaWM6Cj4gICAg
ICAgICB2b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpUaW1lbGluZTo6VGlt
ZWxpbmVFdmVudD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gdmFsdWUpCj4gICAgICAg
ICB7Cj4gICAgICAgICAgICAgdGhpcy0+cHVzaE9iamVjdCh2YWx1ZSk7Cj4gICAgICAgICB9Cj4g
Cj4gICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxDaGlsZHJlbj4gY3JlYXRlKCkgewo+ICAgICAg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2hpbGRyZW4oKSk7Cj4gICAgICAgICB9Cj4gICAg
IH07Cj4gCjQxNDZjNDQyNAo8ICAgICB2b2lkIHNldENoaWxkcmVuKFBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHZhbHVlKQotLS0KPiAgICAgdm9pZCBzZXRDaGlsZHJlbigvKlBhc3NSZWZQdHI8
Q2hpbGRyZW4+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdmFsdWUpCjQyMzhhNDUxNyw0
NTMyCj4gICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ3Njb3BlQ2hhaW4nIHdoaWxl
IGdlbmVyYXRpbmcgQ2FsbEZyYW1lLgo+ICAgICBjbGFzcyBTY29wZUNoYWluIDogcHVibGljIElu
c3BlY3RvckFycmF5IHsKPiAgICAgcHJpdmF0ZToKPiAgICAgICAgIFNjb3BlQ2hhaW4oKSB7fQo+
IAo+ICAgICBwdWJsaWM6Cj4gICAgICAgICB2b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVC
dWlsZGVyOjpEZWJ1Z2dlcjo6U2NvcGU+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHZh
bHVlKQo+ICAgICAgICAgewo+ICAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3QodmFsdWUpOwo+
ICAgICAgICAgfQo+IAo+ICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U2NvcGVDaGFpbj4gY3Jl
YXRlKCkgewo+ICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU2NvcGVDaGFpbigpKTsK
PiAgICAgICAgIH0KPiAgICAgfTsKPiAKNDI4OGM0NTgyCjwgICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgU2NvcGVDaGFpblNldD4mIHNldFNjb3BlQ2hhaW4oUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gdmFsdWUpCi0tLQo+ICAgICAgICAgQnVpbGRlcjxTVEFURSB8IFNjb3BlQ2hhaW5TZXQ+JiBz
ZXRTY29wZUNoYWluKC8qUGFzc1JlZlB0cjxTY29wZUNoYWluPiovIFBhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHZhbHVlKQo0NTE0YzQ4MDgKPCAgICAgICAgIHZvaWQgcmVxdWVzdFdpbGxCZVNl
bnQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3Qg
U3RyaW5nJiBsb2FkZXJJZCwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgLypQYXNzUmVmUHRy
PFR5cGVCdWlsZGVyOjpOZXR3b3JrOjpSZXF1ZXN0PiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZXF1ZXN0LCBkb3VibGUgdGltZXN0YW1wLCAvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6
Ok5ldHdvcms6OkluaXRpYXRvcj4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gaW5pdGlh
dG9yLCBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBzdGFja1RyYWNlLCAvKlBhc3NSZWZQdHI8
VHlwZUJ1aWxkZXI6Ok5ldHdvcms6OlJlc3BvbnNlPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiByZWRpcmVjdFJlc3BvbnNlKTsKLS0tCj4gICAgICAgICB2b2lkIHJlcXVlc3RXaWxsQmVT
ZW50KGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0
IFN0cmluZyYgbG9hZGVySWQsIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIC8qUGFzc1JlZlB0
cjxUeXBlQnVpbGRlcjo6TmV0d29yazo6UmVxdWVzdD4qLyBQYXNzUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcmVxdWVzdCwgZG91YmxlIHRpbWVzdGFtcCwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjpOZXR3b3JrOjpJbml0aWF0b3I+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGluaXRp
YXRvciwgLypQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpDb25zb2xlOjpTdGFja1RyYWNlPiovIFBh
c3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHN0YWNrVHJhY2UsIC8qUGFzc1JlZlB0cjxUeXBlQnVp
bGRlcjo6TmV0d29yazo6UmVzcG9uc2U+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
ZGlyZWN0UmVzcG9uc2UpOwo0NTM4YzQ4MzIsNDg2NAo8ICAgICAgICAgdm9pZCBzcWxUcmFuc2Fj
dGlvblN1Y2NlZWRlZChpbnQgdHJhbnNhY3Rpb25JZCwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJh
eT4gY29sdW1uTmFtZXMsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHZhbHVlcyk7Ci0tLQo+
ICAgICAgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyIG5hbWUgJ2NvbHVtbk5hbWVzJyB3aGls
ZSBnZW5lcmF0aW5nIGV2ZW50IHNxbFRyYW5zYWN0aW9uU3VjY2VlZGVkLgo+ICAgICAgICAgY2xh
c3MgQ29sdW1uTmFtZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewo+ICAgICAgICAgcHJpdmF0
ZToKPiAgICAgICAgICAgICBDb2x1bW5OYW1lcygpIHt9Cj4gCj4gICAgICAgICBwdWJsaWM6Cj4g
ICAgICAgICAgICAgdm9pZCBhZGRJdGVtKGNvbnN0IFN0cmluZyYgdmFsdWUpCj4gICAgICAgICAg
ICAgewo+ICAgICAgICAgICAgICAgICB0aGlzLT5wdXNoU3RyaW5nKHZhbHVlKTsKPiAgICAgICAg
ICAgICB9Cj4gCj4gICAgICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Q29sdW1uTmFtZXM+IGNy
ZWF0ZSgpIHsKPiAgICAgICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDb2x1bW5OYW1l
cygpKTsKPiAgICAgICAgICAgICB9Cj4gICAgICAgICB9Owo+IAo+ICAgICAgICAgLy8gTmFtZWQg
YWZ0ZXIgcGFyYW1ldGVyIG5hbWUgJ3ZhbHVlcycgd2hpbGUgZ2VuZXJhdGluZyBldmVudCBzcWxU
cmFuc2FjdGlvblN1Y2NlZWRlZC4KPiAgICAgICAgIGNsYXNzIFZhbHVlcyA6IHB1YmxpYyBJbnNw
ZWN0b3JBcnJheSB7Cj4gICAgICAgICBwcml2YXRlOgo+ICAgICAgICAgICAgIFZhbHVlcygpIHt9
Cj4gCj4gICAgICAgICBwdWJsaWM6Cj4gICAgICAgICAgICAgdm9pZCBhZGRJdGVtKFBhc3NSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlKQo+ICAgICAgICAgICAgIHsKPiAgICAgICAgICAgICAg
ICAgdGhpcy0+cHVzaFZhbHVlKHZhbHVlKTsKPiAgICAgICAgICAgICB9Cj4gCj4gICAgICAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8VmFsdWVzPiBjcmVhdGUoKSB7Cj4gICAgICAgICAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgVmFsdWVzKCkpOwo+ICAgICAgICAgICAgIH0KPiAgICAgICAg
IH07Cj4gCj4gICAgICAgICB2b2lkIHNxbFRyYW5zYWN0aW9uU3VjY2VlZGVkKGludCB0cmFuc2Fj
dGlvbklkLCAvKlBhc3NSZWZQdHI8Q29sdW1uTmFtZXM+Ki8gUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gY29sdW1uTmFtZXMsIC8qUGFzc1JlZlB0cjxWYWx1ZXM+Ki8gUGFzc1JlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gdmFsdWVzKTsKNDU5MmM0OTE4LDQ5MzQKPCAgICAgICAgIHZvaWQgc2V0Q2hp
bGROb2RlcyhpbnQgcGFyZW50SWQsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG5vZGVzKTsK
LS0tCj4gICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgbmFtZSAnbm9kZXMnIHdoaWxl
IGdlbmVyYXRpbmcgZXZlbnQgc2V0Q2hpbGROb2Rlcy4KPiAgICAgICAgIGNsYXNzIE5vZGVzIDog
cHVibGljIEluc3BlY3RvckFycmF5IHsKPiAgICAgICAgIHByaXZhdGU6Cj4gICAgICAgICAgICAg
Tm9kZXMoKSB7fQo+IAo+ICAgICAgICAgcHVibGljOgo+ICAgICAgICAgICAgIHZvaWQgYWRkSXRl
bSgvKlBhc3NSZWZQdHI8VHlwZUJ1aWxkZXI6OkRPTTo6Tm9kZT4qLyBQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gdmFsdWUpCj4gICAgICAgICAgICAgewo+ICAgICAgICAgICAgICAgICB0aGlz
LT5wdXNoT2JqZWN0KHZhbHVlKTsKPiAgICAgICAgICAgICB9Cj4gCj4gICAgICAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Tm9kZXM+IGNyZWF0ZSgpIHsKPiAgICAgICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBOb2RlcygpKTsKPiAgICAgICAgICAgICB9Cj4gICAgICAgICB9Owo+IAo+
ICAgICAgICAgdm9pZCBzZXRDaGlsZE5vZGVzKGludCBwYXJlbnRJZCwgLypQYXNzUmVmUHRyPE5v
ZGVzPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG5vZGVzKTsKNDU5NWM0OTM3LDQ5NTMK
PCAgICAgICAgIHZvaWQgaW5saW5lU3R5bGVJbnZhbGlkYXRlZChQYXNzUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBub2RlSWRzKTsKLS0tCj4gICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIg
bmFtZSAnbm9kZUlkcycgd2hpbGUgZ2VuZXJhdGluZyBldmVudCBpbmxpbmVTdHlsZUludmFsaWRh
dGVkLgo+ICAgICAgICAgY2xhc3MgTm9kZUlkcyA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7Cj4g
ICAgICAgICBwcml2YXRlOgo+ICAgICAgICAgICAgIE5vZGVJZHMoKSB7fQo+IAo+ICAgICAgICAg
cHVibGljOgo+ICAgICAgICAgICAgIHZvaWQgYWRkSXRlbShpbnQgdmFsdWUpCj4gICAgICAgICAg
ICAgewo+ICAgICAgICAgICAgICAgICB0aGlzLT5wdXNoTnVtYmVyKHZhbHVlKTsKPiAgICAgICAg
ICAgICB9Cj4gCj4gICAgICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Tm9kZUlkcz4gY3JlYXRl
KCkgewo+ICAgICAgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE5vZGVJZHMoKSk7Cj4g
ICAgICAgICAgICAgfQo+ICAgICAgICAgfTsKPiAKPiAgICAgICAgIHZvaWQgaW5saW5lU3R5bGVJ
bnZhbGlkYXRlZCgvKlBhc3NSZWZQdHI8Tm9kZUlkcz4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBub2RlSWRzKTsKNDYzOWE0OTk4LDUwMTMKPiAgICAgICAgIC8vIE5hbWVkIGFmdGVyIHBh
cmFtZXRlciBuYW1lICdjYWxsRnJhbWVzJyB3aGlsZSBnZW5lcmF0aW5nIGV2ZW50IHBhdXNlZC4K
PiAgICAgICAgIGNsYXNzIENhbGxGcmFtZXMgOiBwdWJsaWMgSW5zcGVjdG9yQXJyYXkgewo+ICAg
ICAgICAgcHJpdmF0ZToKPiAgICAgICAgICAgICBDYWxsRnJhbWVzKCkge30KPiAKPiAgICAgICAg
IHB1YmxpYzoKPiAgICAgICAgICAgICB2b2lkIGFkZEl0ZW0oLypQYXNzUmVmUHRyPFR5cGVCdWls
ZGVyOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPiovIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiB2
YWx1ZSkKPiAgICAgICAgICAgICB7Cj4gICAgICAgICAgICAgICAgIHRoaXMtPnB1c2hPYmplY3Qo
dmFsdWUpOwo+ICAgICAgICAgICAgIH0KPiAKPiAgICAgICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDYWxsRnJhbWVzPiBjcmVhdGUoKSB7Cj4gICAgICAgICAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ2FsbEZyYW1lcygpKTsKPiAgICAgICAgICAgICB9Cj4gICAgICAgICB9Owo+IAo0NjUx
YzUwMjUKPCAgICAgICAgIHZvaWQgcGF1c2VkKFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNh
bGxGcmFtZXMsIC8qUmVhc29uOjpFbnVtKi8gY29uc3QgU3RyaW5nJiByZWFzb24sIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBkYXRhKTsKLS0tCj4gICAgICAgICB2b2lkIHBhdXNlZCgvKlBh
c3NSZWZQdHI8Q2FsbEZyYW1lcz4qLyBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBjYWxsRnJh
bWVzLCAvKlJlYXNvbjo6RW51bSovIGNvbnN0IFN0cmluZyYgcmVhc29uLCBQYXNzUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gZGF0YSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122234</attachid>
            <date>2012-01-12 07:02:29 -0800</date>
            <delta_ts>2012-01-14 20:25:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75284-20120112190227.patch</filename>
            <type>text/plain</type>
            <size>11176</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NzIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmNlZTJkNzM1YzZmZDQy
ZWI1MzZkMzdlMzNhOWYwZDgwMWJlOWI0Zi4uNzI3MmZlYTljZjJkMmI0NDI3MmRmNDVjZmU3NTIz
OTAzNzk4NzY0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEyLTAxLTEyICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OiBnZW5lcmF0ZSBhcnJheSB0eXBlcy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1Mjg0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IGNsYXNzZXMgYXJl
IGdlbmVyYXRlZCBmb3IgZWNhaCBhcnJheSB0eXBlIGluc3RhbmNlLgorCisgICAgICAgICogaW5z
cGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHk6CisgICAgICAgIChBcnJheUJpbmRpbmcp
OgorICAgICAgICAoQXJyYXlCaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcik6CisgICAgICAgIChB
cnJheUJpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yLkNvZGVHZW5lcmF0b3IpOgorICAgICAgICAo
QXJyYXlCaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvci5Db2RlR2VuZXJhdG9yLmdlbmVyYXRlX3R5
cGVfYnVpbGRlcik6CisgICAgICAgIChBcnJheUJpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yLkNv
ZGVHZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9idWlsZGVyLkFkSG9jVHlwZUNvbnRleHQpOgorICAg
ICAgICAoQXJyYXlCaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvci5Db2RlR2VuZXJhdG9yLmdlbmVy
YXRlX3R5cGVfYnVpbGRlci5BZEhvY1R5cGVDb250ZXh0LmdldF90eXBlX25hbWVfZml4KToKKyAg
ICAgICAgKEFycmF5QmluZGluZy5nZXRfY29kZV9nZW5lcmF0b3IuQ29kZUdlbmVyYXRvci5nZW5l
cmF0ZV90eXBlX2J1aWxkZXIuQWRIb2NUeXBlQ29udGV4dC5nZXRfdHlwZV9uYW1lX2ZpeC5OYW1l
Rml4KToKKyAgICAgICAgKEFycmF5QmluZGluZy5nZXRfY29kZV9nZW5lcmF0b3IuQ29kZUdlbmVy
YXRvci5nZW5lcmF0ZV90eXBlX2J1aWxkZXIuQWRIb2NUeXBlQ29udGV4dC5nZXRfdHlwZV9uYW1l
X2ZpeC5OYW1lRml4Lm91dHB1dF9jb21tZW50KToKKyAgICAgICAgKEFycmF5QmluZGluZy5nZXRf
Y29kZV9nZW5lcmF0b3IuQ29kZUdlbmVyYXRvci5nZW5lcmF0ZV90eXBlX2J1aWxkZXIuQWRIb2NU
eXBlQ29udGV4dC5jYWxsX2dlbmVyYXRlX3R5cGVfYnVpbGRlcik6CisgICAgICAgIChBcnJheUJp
bmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yLkNvZGVHZW5lcmF0b3IuZ2VuZXJhdGVfZm9yd2FyZF9k
ZWNsYXJhdGlvbik6CisgICAgICAgIChBcnJheUJpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yLkNv
ZGVHZW5lcmF0b3IucmVnaXN0ZXJfdXNlKToKKyAgICAgICAgKEFycmF5QmluZGluZy5nZXRfaW5f
Y190eXBlX3RleHQpOgorICAgICAgICAoQXJyYXlCaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhw
cmVzc2lvbl9wYXR0ZXJuKToKKyAgICAgICAgKEFycmF5QmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5
cGUpOgorICAgICAgICAoUmF3VHlwZUJpbmRpbmcpOgorICAgICAgICAoUmF3VHlwZUJpbmRpbmcu
X19pbml0X18pOgorICAgICAgICAoUmF3VHlwZUJpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yKToK
KyAgICAgICAgKFJhd1R5cGVCaW5kaW5nLmdldF9pbl9jX3R5cGVfdGV4dCk6CisgICAgICAgIChS
YXdUeXBlQmluZGluZy5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybik6CisgICAg
ICAgIChSYXdUeXBlQmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUpOgorICAgICAgICAoVHlwZURh
dGEuX19pbml0X18pOgorICAgICAgICAoVHlwZURhdGEuZ2V0X2JpbmRpbmcpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaDoKKwogMjAxMi0wMS0xMSAgQWxleGV5IFByb3Nr
dXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ci4gUHJlcGFyZWQgYnkgU2hlcmlmZiBCb3QuIFJvbGxpbmcgb3V0IHI5NDkwMi4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5IGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKaW5kZXgg
MWIyZGNmYzFmMzM0ODYxOTg1MjhjYTE3ZTQ0NjI3N2Q4NDAyY2U0MC4uYmYzNzkwMzI0YTA3NWIz
OWMyODQwMzU3OTI4ZDg5NjBmZDNmZDg5NyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkKQEAgLTg5OCw2MCArODk4LDExNSBAQCBj
bGFzcyBUeXBlQmluZGluZ3M6CiAKICAgICAgICAgICAgICAgICByZXR1cm4gUGxhaW5PYmplY3RC
aW5kaW5nCiAgICAgICAgIGVsaWYganNvbl90eXBhYmxlWyJ0eXBlIl0gPT0gImFycmF5IjoKLSAg
ICAgICAgICAgIGlmICJpdGVtcyIgaW4ganNvbl90eXBhYmxlOgogCi0gICAgICAgICAgICAgICAg
Y2xhc3MgQ29kZUdlbmVyYXRvcjoKLSAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAot
ICAgICAgICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfdHlwZV9idWlsZGVyKHdyaXRlciwgZm9y
d2FyZF9saXN0ZW5lcik6CisgICAgICAgICAgICBjbGFzcyBBcnJheUJpbmRpbmc6CisgICAgICAg
ICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgIGRlZiBnZXRfY29kZV9nZW5l
cmF0b3IoKToKIAotICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgQWRIb2NUeXBlQ29udGV4
dDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVmIGdldF90eXBlX25hbWVfZml4KCk6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNsYXNzIE5hbWVGaXg6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjbGFzc19uYW1lID0gZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUgKyAi
SXRlbSIKKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgQ29kZUdlbmVyYXRvcjoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZiBnZW5lcmF0ZV90eXBlX2J1aWxkZXIod3JpdGVyLCBmb3J3YXJkX2xpc3RlbmVyKToKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoZWxwZXIud3JpdGVfZG9jKHdyaXRlcikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjbGFzc19uYW1lID0gZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25h
bWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZF90eXBlX25hbWUub3V0cHV0X2Nv
bW1lbnQod3JpdGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5l
KCJjbGFzcyAiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoY2xh
c3NfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIgOiBw
dWJsaWMgSW5zcGVjdG9yQXJyYXkge1xuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
cml0ZXIubmV3bGluZSgicHJpdmF0ZTpcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d3JpdGVyLm5ld2xpbmUoIiAgICAlcygpIHsgfVxuIiAlIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19u
YW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoIlxuIikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgicHVibGljOlxuIikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhZF9ob2NfdHlwZV93cml0ZXIgPSB3cml0ZXIuaW5z
ZXJ0X3dyaXRlcigiICAgICIpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAiaXRl
bXMiIGluIGpzb25fdHlwYWJsZToKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
bGFzcyBBZEhvY1R5cGVDb250ZXh0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm
IGdldF90eXBlX25hbWVfZml4KCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2xhc3MgTmFtZUZpeDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xhc3NfbmFtZSA9ICJJdGVtIgorCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmIG91dHB1dF9jb21tZW50KHdyaXRlcik6CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTmFtZUZpeAogCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZWYgb3V0cHV0X2NvbW1lbnQod3JpdGVyKToKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhlZF90eXBlX25hbWUub3V0cHV0
X2NvbW1lbnQod3JpdGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdyaXRlci5uZXdsaW5lKCIvLyBOYW1lZCBhcyBhbiBpdGVtIG9mIGFycmF5LlxuIikKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBjYWxsX2dlbmVyYXRlX3R5cGVfYnVp
bGRlcihjb2RlX2dlbmVyYXRvcik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29kZV9nZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9idWlsZGVyKGFkX2hvY190eXBlX3dy
aXRlciwgZm9yd2FyZF9saXN0ZW5lcikKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gTmFtZUZpeAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtX3R5
cGVfYmluZGluZyA9IHJlc29sdmVfcGFyYW1fdHlwZShqc29uX3R5cGFibGVbIml0ZW1zIl0sIGNv
bnRleHRfZG9tYWluX25hbWUsIEFkSG9jVHlwZUNvbnRleHQpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV90eXBl
X2JpbmRpbmcgPSBSYXdUeXBlQmluZGluZyhSYXdUeXBlcy5BbnkpCiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmIGNhbGxfZ2VuZXJhdGVfdHlwZV9idWlsZGVyKGNvZGVfZ2VuZXJhdG9yKToKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29kZV9nZW5lcmF0b3IuZ2VuZXJhdGVfdHlwZV9idWls
ZGVyKHdyaXRlciwgZm9yd2FyZF9saXN0ZW5lcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgaXRlbV90eXBlX29wdCBpbiBNZXRob2RHZW5lcmF0ZU1vZGVzLmdldF9tb2RlcyhpdGVt
X3R5cGVfYmluZGluZyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5u
ZXdsaW5lKCIgICAgdm9pZCBhZGRJdGVtIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd3JpdGVyLmFwcGVuZCgiKCVzIHZhbHVlKVxuIiAlIGl0ZW1fdHlwZV9vcHQuZ2V0X2NfcGFy
YW1fdHlwZV90ZXh0KGl0ZW1fdHlwZV9iaW5kaW5nKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB7XG4iKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICAgICB0aGlzLT5wdXNoJXMoJXMpO1xuIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoaXRlbV90eXBlX2JpbmRpbmcu
cmVkdWNlX3RvX3Jhd190eXBlKCkuZ2V0X3NldHRlcl9uYW1lKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpdGVtX3R5cGVfb3B0LmdldF9zZXR0ZXJfdmFsdWVfZXhw
cmVzc2lvbihpdGVtX3R5cGVfYmluZGluZywgInZhbHVlIikpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgIH1cbiIpCiAKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc29sdmVfcGFyYW1fdHlwZShqc29uX3R5cGFibGVbIml0ZW1zIl0sIGNvbnRl
eHRfZG9tYWluX25hbWUsIEFkSG9jVHlwZUNvbnRleHQpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd3JpdGVyLmFwcGVuZCgiXG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdy
aXRlci5uZXdsaW5lKCIgICAgc3RhdGljIFBhc3NSZWZQdHI8JXM+IGNyZWF0ZSgpIHtcbiIgJSBm
aXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
cml0ZXIubmV3bGluZSgiICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3ICVzKCkpO1xuIiAlIGZp
eGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdy
aXRlci5uZXdsaW5lKCIgICAgfVxuIikKIAotICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0
aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiByZWdpc3Rlcl91c2UoZm9yd2FyZF9saXN0ZW5l
cik6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29kZV9nZW5lcmF0b3IgPSBpdGVtX3R5cGVfYmluZGluZy5nZXRfY29kZV9nZW5lcmF0
b3IoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvZGVfZ2VuZXJhdG9yOgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvci5yZWdpc3Rlcl91c2Uo
Zm9yd2FyZF9saXN0ZW5lcikKIAotICAgICAgICAgICAgICAgIGRlZmF1bHRfYmluZGluZ19jb2Rl
X2dlbmVyYXRvciA9IENvZGVHZW5lcmF0b3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
cml0ZXIubmV3bGluZSgifTtcblxuIikKIAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZGVm
YXVsdF9iaW5kaW5nX2NvZGVfZ2VuZXJhdG9yID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAg
ICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdlbmVyYXRlX2Zv
cndhcmRfZGVjbGFyYXRpb24od3JpdGVyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
bGFzc19uYW1lID0gZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiY2xhc3MgIikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3cml0ZXIuYXBwZW5kKGNsYXNzX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd3JpdGVyLmFwcGVuZCgiO1xuIikKKworICAgICAgICAgICAgICAgICAgICAgICAgQHN0
YXRpY21ldGhvZAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmIHJlZ2lzdGVyX3VzZShmb3J3
YXJkX2xpc3RlbmVyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwZXIuYWRkX3Rv
X2ZvcndhcmRfbGlzdGVuZXIoZm9yd2FyZF9saXN0ZW5lcikKKworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gQ29kZUdlbmVyYXRvcgorCisgICAgICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisg
ICAgICAgICAgICAgICAgZGVmIGdldF9pbl9jX3R5cGVfdGV4dChjbHMsIG9wdGlvbmFsKToKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuICJQYXNzUmVmUHRyPCVzJXM+IiAlIChoZWxwZXIuZnVs
bF9uYW1lX3ByZWZpeCwgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUpCisKKyAgICAgICAgICAg
ICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVf
ZXhwcmVzc2lvbl9wYXR0ZXJuKCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisK
KyAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAgZGVmIHJlZHVj
ZV90b19yYXdfdHlwZSgpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmF3VHlwZXMuQXJy
YXkKKworICAgICAgICAgICAgcmV0dXJuIEFycmF5QmluZGluZwogCiAgICAgICAgIHJhd190eXBl
ID0gUmF3VHlwZXMuZ2V0KGpzb25fdHlwYWJsZVsidHlwZSJdKQogCi0gICAgICAgIGNsYXNzIFJh
d1R5cGVzQmluZGluZzoKLSAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgIGRl
ZiBnZXRfY29kZV9nZW5lcmF0b3IoKToKLSAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdF9i
aW5kaW5nX2NvZGVfZ2VuZXJhdG9yCisgICAgICAgIHJldHVybiBSYXdUeXBlQmluZGluZyhyYXdf
dHlwZSkKIAotICAgICAgICAgICAgQGNsYXNzbWV0aG9kCi0gICAgICAgICAgICBkZWYgZ2V0X2lu
X2NfdHlwZV90ZXh0KGNscywgb3B0aW9uYWwpOgotICAgICAgICAgICAgICAgIHJldHVybiBjbHMu
cmVkdWNlX3RvX3Jhd190eXBlKCkuZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuRVZFTlQsIG9w
dGlvbmFsKS5nZXRfdGV4dCgpCiAKLSAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAg
ICAgIGRlZiBnZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybigpOgotICAgICAgICAg
ICAgICAgIHJldHVybiBOb25lCitjbGFzcyBSYXdUeXBlQmluZGluZzoKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgcmF3X3R5cGUpOgorICAgICAgICBzZWxmLnJhd190eXBlXyA9IHJhd190eXBlCiAK
LSAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgIGRlZiByZWR1Y2VfdG9fcmF3
X3R5cGUoKToKLSAgICAgICAgICAgICAgICByZXR1cm4gcmF3X3R5cGUKKyAgICBkZWYgZ2V0X2Nv
ZGVfZ2VuZXJhdG9yKHNlbGYpOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGdldF9p
bl9jX3R5cGVfdGV4dChzZWxmLCBvcHRpb25hbCk6CisgICAgICAgIHJldHVybiBzZWxmLnJhd190
eXBlXy5nZXRfY19wYXJhbV90eXBlKFBhcmFtVHlwZS5FVkVOVCwgb3B0aW9uYWwpLmdldF90ZXh0
KCkKIAotICAgICAgICByZXR1cm4gUmF3VHlwZXNCaW5kaW5nCisgICAgZGVmIGdldF9zZXR0ZXJf
dmFsdWVfZXhwcmVzc2lvbl9wYXR0ZXJuKHNlbGYpOgorICAgICAgICByZXR1cm4gTm9uZQorCisg
ICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmF3
X3R5cGVfCiAKIAogY2xhc3MgVHlwZURhdGEob2JqZWN0KToKQEAgLTk2NiwxMiArMTAyMSwyMyBA
QCBjbGFzcyBUeXBlRGF0YShvYmplY3QpOgogICAgICAgICBqc29uX3R5cGVfbmFtZSA9IGpzb25f
dHlwZVsidHlwZSJdCiAgICAgICAgIHJhd190eXBlID0gUmF3VHlwZXMuZ2V0KGpzb25fdHlwZV9u
YW1lKQogICAgICAgICBzZWxmLnJhd190eXBlXyA9IHJhd190eXBlCi0gICAgICAgIHNlbGYuYmlu
ZGluZ18gPSBUeXBlQmluZGluZ3MuY3JlYXRlX25hbWVkX3R5cGVfZGVjbGFyYXRpb24oanNvbl90
eXBlLCBqc29uX2RvbWFpblsiZG9tYWluIl0sIHNlbGYpCisgICAgICAgIHNlbGYuYmluZGluZ19i
ZWluZ19yZXNvbHZlZF8gPSBGYWxzZQorICAgICAgICBzZWxmLmJpbmRpbmdfID0gTm9uZQogCiAg
ICAgZGVmIGdldF9yYXdfdHlwZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYucmF3X3R5cGVf
CiAKICAgICBkZWYgZ2V0X2JpbmRpbmcoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmJpbmRp
bmdfOgorICAgICAgICAgICAgaWYgc2VsZi5iaW5kaW5nX2JlaW5nX3Jlc29sdmVkXzoKKyAgICAg
ICAgICAgICAgICByYWlzZSBFcnJvcigiVHlwZSAlcyBpcyBhbHJlYWR5IGJlaW5nIHJlc29sdmVk
IiAlIHNlbGYuanNvbl90eXBlX1sidHlwZSJdKQorICAgICAgICAgICAgIyBSZXNvbHZlIG9ubHkg
bGF6aWx5LCBiZWNhdXNlIHJlc29sdmluZyBvbmUgbmFtZWQgdHlwZSBtYXkgcmVxdWlyZSByZXNv
bHZpbmcgc29tZSBvdGhlciBuYW1lZCB0eXBlLgorICAgICAgICAgICAgc2VsZi5iaW5kaW5nX2Jl
aW5nX3Jlc29sdmVkXyA9IFRydWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBz
ZWxmLmJpbmRpbmdfID0gVHlwZUJpbmRpbmdzLmNyZWF0ZV9uYW1lZF90eXBlX2RlY2xhcmF0aW9u
KHNlbGYuanNvbl90eXBlXywgc2VsZi5qc29uX2RvbWFpbl9bImRvbWFpbiJdLCBzZWxmKQorICAg
ICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzZWxmLmJpbmRpbmdfYmVpbmdfcmVz
b2x2ZWRfID0gRmFsc2UKKwogICAgICAgICByZXR1cm4gc2VsZi5iaW5kaW5nXwogCiAgICAgZGVm
IGdldF9qc29uX3R5cGUoc2VsZik6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yVmFsdWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
VmFsdWVzLmgKaW5kZXggN2U5NTNhNDhmZDg1NjQzMjljODcxOGQwNTVlMThjYzAwODc2ZDY5OC4u
ZTEwMGFkZWFkMjFkMDBlNjIxZTMyZTYwOWUxOTU2YmFlOTljY2JlNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaApAQCAtMjQ0LDggKzI0NCwxMCBAQCBwdWJs
aWM6CiAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2RhdGEuYmVn
aW4oKTsgfQogICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5l
bmQoKTsgfQogCi1wcml2YXRlOgorcHJvdGVjdGVkOgogICAgIEluc3BlY3RvckFycmF5KCk7CisK
K3ByaXZhdGU6CiAgICAgVmVjdG9yPFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gPiBtX2RhdGE7CiB9
OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>122561</attachid>
            <date>2012-01-14 20:25:31 -0800</date>
            <delta_ts>2012-01-16 05:44:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-75284-20120115082529.patch</filename>
            <type>text/plain</type>
            <size>12610</size>
            <attacher name="Peter Rybin">peter.rybin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA0NzIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmNlZTJkNzM1YzZmZDQy
ZWI1MzZkMzdlMzNhOWYwZDgwMWJlOWI0Zi4uOGNmODA1MTg1MWU0NDU3YjlmODg0YTgxMTM3ODc4
YzEzMzk2NzlkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEyLTAxLTE0ICBQZXRl
ciBSeWJpbiAgPHBldGVyLnJ5YmluQGdtYWlsLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9y
OiBDb2RlR2VuZXJhdG9ySW5zcGVjdG9yLnB5OiBnZW5lcmF0ZSBhcnJheSB0eXBlcy4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1Mjg0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IGNsYXNzZXMgYXJl
IGdlbmVyYXRlZCBmb3IgZWNhaCBhcnJheSB0eXBlIGluc3RhbmNlLiBTb21lIGluY2x1ZGVzCisg
ICAgICAgIGFuZCBpZmRlZnMgYXJlIGZpeGVkLgorCisgICAgICAgICogaW5zcGVjdG9yL0NvZGVH
ZW5lcmF0b3JJbnNwZWN0b3IucHk6CisgICAgICAgIChBcnJheUJpbmRpbmcpOgorICAgICAgICAo
QXJyYXlCaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcik6CisgICAgICAgIChBcnJheUJpbmRpbmcu
Z2V0X2NvZGVfZ2VuZXJhdG9yLkNvZGVHZW5lcmF0b3IpOgorICAgICAgICAoQXJyYXlCaW5kaW5n
LmdldF9jb2RlX2dlbmVyYXRvci5Db2RlR2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVfYnVpbGRlcik6
CisgICAgICAgIChBcnJheUJpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yLkNvZGVHZW5lcmF0b3Iu
Z2VuZXJhdGVfdHlwZV9idWlsZGVyLkFkSG9jVHlwZUNvbnRleHQpOgorICAgICAgICAoQXJyYXlC
aW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvci5Db2RlR2VuZXJhdG9yLmdlbmVyYXRlX3R5cGVfYnVp
bGRlci5BZEhvY1R5cGVDb250ZXh0LmdldF90eXBlX25hbWVfZml4KToKKyAgICAgICAgKEFycmF5
QmluZGluZy5nZXRfY29kZV9nZW5lcmF0b3IuQ29kZUdlbmVyYXRvci5nZW5lcmF0ZV90eXBlX2J1
aWxkZXIuQWRIb2NUeXBlQ29udGV4dC5nZXRfdHlwZV9uYW1lX2ZpeC5OYW1lRml4KToKKyAgICAg
ICAgKEFycmF5QmluZGluZy5nZXRfY29kZV9nZW5lcmF0b3IuQ29kZUdlbmVyYXRvci5nZW5lcmF0
ZV90eXBlX2J1aWxkZXIuQWRIb2NUeXBlQ29udGV4dC5nZXRfdHlwZV9uYW1lX2ZpeC5OYW1lRml4
Lm91dHB1dF9jb21tZW50KToKKyAgICAgICAgKEFycmF5QmluZGluZy5nZXRfY29kZV9nZW5lcmF0
b3IuQ29kZUdlbmVyYXRvci5nZW5lcmF0ZV90eXBlX2J1aWxkZXIuQWRIb2NUeXBlQ29udGV4dC5j
YWxsX2dlbmVyYXRlX3R5cGVfYnVpbGRlcik6CisgICAgICAgIChBcnJheUJpbmRpbmcuZ2V0X2Nv
ZGVfZ2VuZXJhdG9yLkNvZGVHZW5lcmF0b3IuZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbik6
CisgICAgICAgIChBcnJheUJpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yLkNvZGVHZW5lcmF0b3Iu
cmVnaXN0ZXJfdXNlKToKKyAgICAgICAgKEFycmF5QmluZGluZy5nZXRfaW5fY190eXBlX3RleHQp
OgorICAgICAgICAoQXJyYXlCaW5kaW5nLmdldF9zZXR0ZXJfdmFsdWVfZXhwcmVzc2lvbl9wYXR0
ZXJuKToKKyAgICAgICAgKEFycmF5QmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUpOgorICAgICAg
ICAoUmF3VHlwZUJpbmRpbmcpOgorICAgICAgICAoUmF3VHlwZUJpbmRpbmcuX19pbml0X18pOgor
ICAgICAgICAoUmF3VHlwZUJpbmRpbmcuZ2V0X2NvZGVfZ2VuZXJhdG9yKToKKyAgICAgICAgKFJh
d1R5cGVCaW5kaW5nLmdldF9pbl9jX3R5cGVfdGV4dCk6CisgICAgICAgIChSYXdUeXBlQmluZGlu
Zy5nZXRfc2V0dGVyX3ZhbHVlX2V4cHJlc3Npb25fcGF0dGVybik6CisgICAgICAgIChSYXdUeXBl
QmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUpOgorICAgICAgICAoVHlwZURhdGEuX19pbml0X18p
OgorICAgICAgICAoVHlwZURhdGEuZ2V0X2JpbmRpbmcpOgorICAgICAgICAqIGluc3BlY3Rvci9D
b25zb2xlTWVzc2FnZS5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5o
OgorCiAyMDEyLTAxLTExICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLiBQcmVwYXJlZCBieSBTaGVyaWZmIEJvdC4g
Um9sbGluZyBvdXQgcjk0OTAyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucHkgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29k
ZUdlbmVyYXRvckluc3BlY3Rvci5weQppbmRleCAxYjJkY2ZjMWYzMzQ4NjE5ODUyOGNhMTdlNDQ2
Mjc3ZDg0MDJjZTQwLi5iYjkyZWQ0MDI4MGE2MzE5NzBlYjYyNDQ0ODVjMjA4YTUzOWU4MjRiIDEw
MDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rv
ci5weQorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rv
ci5weQpAQCAtODk4LDYwICs4OTgsMTE1IEBAIGNsYXNzIFR5cGVCaW5kaW5nczoKIAogICAgICAg
ICAgICAgICAgIHJldHVybiBQbGFpbk9iamVjdEJpbmRpbmcKICAgICAgICAgZWxpZiBqc29uX3R5
cGFibGVbInR5cGUiXSA9PSAiYXJyYXkiOgotICAgICAgICAgICAgaWYgIml0ZW1zIiBpbiBqc29u
X3R5cGFibGU6CiAKLSAgICAgICAgICAgICAgICBjbGFzcyBDb2RlR2VuZXJhdG9yOgotICAgICAg
ICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCi0gICAgICAgICAgICAgICAgICAgIGRlZiBnZW5l
cmF0ZV90eXBlX2J1aWxkZXIod3JpdGVyLCBmb3J3YXJkX2xpc3RlbmVyKToKKyAgICAgICAgICAg
IGNsYXNzIEFycmF5QmluZGluZzoKKyAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAg
ICAgICAgICAgICAgZGVmIGdldF9jb2RlX2dlbmVyYXRvcigpOgogCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjbGFzcyBBZEhvY1R5cGVDb250ZXh0OgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3R5
cGVfbmFtZV9maXgoKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgTmFt
ZUZpeDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX25hbWUgPSBm
aXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZSArICJJdGVtIgorICAgICAgICAgICAgICAgICAgICBj
bGFzcyBDb2RlR2VuZXJhdG9yOgorICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhv
ZAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGdlbmVyYXRlX3R5cGVfYnVpbGRlcih3cml0
ZXIsIGZvcndhcmRfbGlzdGVuZXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBl
ci53cml0ZV9kb2Mod3JpdGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX25h
bWUgPSBmaXhlZF90eXBlX25hbWUuY2xhc3NfbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZpeGVkX3R5cGVfbmFtZS5vdXRwdXRfY29tbWVudCh3cml0ZXIpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoImNsYXNzICIpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd3JpdGVyLmFwcGVuZChjbGFzc19uYW1lKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXRlci5hcHBlbmQoIiA6IHB1YmxpYyBJbnNwZWN0b3JBcnJheSB7XG4iKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJwcml2YXRlOlxuIikK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAgICVzKCkgeyB9
XG4iICUgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd3JpdGVyLmFwcGVuZCgiXG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdy
aXRlci5uZXdsaW5lKCJwdWJsaWM6XG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFk
X2hvY190eXBlX3dyaXRlciA9IHdyaXRlci5pbnNlcnRfd3JpdGVyKCIgICAgIikKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICJpdGVtcyIgaW4ganNvbl90eXBhYmxlOgorCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIEFkSG9jVHlwZUNvbnRleHQ6CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgZ2V0X3R5cGVfbmFtZV9maXgoKToKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBOYW1lRml4OgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc19uYW1lID0gIkl0ZW0i
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN0YXRpY21l
dGhvZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgb3V0
cHV0X2NvbW1lbnQod3JpdGVyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBOYW1lRml4CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBv
dXRwdXRfY29tbWVudCh3cml0ZXIpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZpeGVkX3R5cGVfbmFtZS5vdXRwdXRfY29tbWVudCh3cml0ZXIpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIi8vIE5hbWVkIGFz
IGFuIGl0ZW0gb2YgYXJyYXkuXG4iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmIGNhbGxfZ2VuZXJhdGVfdHlwZV9idWlsZGVyKGNvZGVfZ2VuZXJhdG9yKToKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvci5nZW5lcmF0
ZV90eXBlX2J1aWxkZXIoYWRfaG9jX3R5cGVfd3JpdGVyLCBmb3J3YXJkX2xpc3RlbmVyKQogCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOYW1lRml4CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGl0ZW1fdHlwZV9iaW5kaW5nID0gcmVzb2x2ZV9wYXJhbV90
eXBlKGpzb25fdHlwYWJsZVsiaXRlbXMiXSwgY29udGV4dF9kb21haW5fbmFtZSwgQWRIb2NUeXBl
Q29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpdGVtX3R5cGVfYmluZGluZyA9IFJhd1R5cGVCaW5kaW5nKFJh
d1R5cGVzLkFueSkKIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWYgY2FsbF9nZW5lcmF0ZV90eXBlX2J1aWxk
ZXIoY29kZV9nZW5lcmF0b3IpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2Rl
X2dlbmVyYXRvci5nZW5lcmF0ZV90eXBlX2J1aWxkZXIod3JpdGVyLCBmb3J3YXJkX2xpc3RlbmVy
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpdGVtX3R5cGVfb3B0IGluIE1ldGhv
ZEdlbmVyYXRlTW9kZXMuZ2V0X21vZGVzKGl0ZW1fdHlwZV9iaW5kaW5nKToKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB2b2lkIGFkZEl0ZW0iKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCIoJXMgdmFsdWUp
XG4iICUgaXRlbV90eXBlX29wdC5nZXRfY19wYXJhbV90eXBlX3RleHQoaXRlbV90eXBlX2JpbmRp
bmcpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIubmV3bGluZSgiICAg
IHtcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIg
ICAgICAgIHRoaXMtPnB1c2glcyglcyk7XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAlIChpdGVtX3R5cGVfYmluZGluZy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfc2V0
dGVyX25hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1f
dHlwZV9vcHQuZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uKGl0ZW1fdHlwZV9iaW5kaW5nLCAi
dmFsdWUiKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5l
KCIgICAgfVxuIikKIAotICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZV9wYXJhbV90eXBl
KGpzb25fdHlwYWJsZVsiaXRlbXMiXSwgY29udGV4dF9kb21haW5fbmFtZSwgQWRIb2NUeXBlQ29u
dGV4dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCJcbiIpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICBzdGF0aWMgUGFz
c1JlZlB0cjwlcz4gY3JlYXRlKCkge1xuIiAlIGZpeGVkX3R5cGVfbmFtZS5jbGFzc19uYW1lKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCIgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgJXMoKSk7XG4iICUgZml4ZWRfdHlwZV9uYW1lLmNsYXNzX25hbWUpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLm5ld2xpbmUoIiAgICB9XG4iKQogCi0g
ICAgICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgZGVm
IHJlZ2lzdGVyX3VzZShmb3J3YXJkX2xpc3RlbmVyKToKLSAgICAgICAgICAgICAgICAgICAgICAg
IHBhc3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2dlbmVyYXRvciA9IGl0ZW1f
dHlwZV9iaW5kaW5nLmdldF9jb2RlX2dlbmVyYXRvcigpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgY29kZV9nZW5lcmF0b3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvZGVfZ2VuZXJhdG9yLnJlZ2lzdGVyX3VzZShmb3J3YXJkX2xpc3RlbmVyKQogCi0gICAgICAg
ICAgICAgICAgZGVmYXVsdF9iaW5kaW5nX2NvZGVfZ2VuZXJhdG9yID0gQ29kZUdlbmVyYXRvcgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJ9O1xuXG4iKQogCi0g
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBkZWZhdWx0X2JpbmRpbmdfY29kZV9nZW5lcmF0b3Ig
PSBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAg
ICAgICAgICAgICAgICBkZWYgZ2VuZXJhdGVfZm9yd2FyZF9kZWNsYXJhdGlvbih3cml0ZXIpOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzX25hbWUgPSBmaXhlZF90eXBlX25hbWUu
Y2xhc3NfbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5uZXdsaW5lKCJj
bGFzcyAiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5hcHBlbmQoY2xhc3Nf
bmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuYXBwZW5kKCI7XG4iKQor
CisgICAgICAgICAgICAgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICAgICAg
ICAgICAgICBkZWYgcmVnaXN0ZXJfdXNlKGZvcndhcmRfbGlzdGVuZXIpOgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhlbHBlci5hZGRfdG9fZm9yd2FyZF9saXN0ZW5lcihmb3J3YXJkX2xp
c3RlbmVyKQorCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb2RlR2VuZXJhdG9yCisKKyAg
ICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgICAgICBkZWYgZ2V0X2luX2Nf
dHlwZV90ZXh0KGNscywgb3B0aW9uYWwpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIlBh
c3NSZWZQdHI8JXMlcz4iICUgKGhlbHBlci5mdWxsX25hbWVfcHJlZml4LCBmaXhlZF90eXBlX25h
bWUuY2xhc3NfbmFtZSkKKworICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAg
ICAgICAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oKToKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAgICAgICAgIEBzdGF0aWNtZXRo
b2QKKyAgICAgICAgICAgICAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKCk6CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBSYXdUeXBlcy5BcnJheQorCisgICAgICAgICAgICByZXR1cm4gQXJy
YXlCaW5kaW5nCiAKICAgICAgICAgcmF3X3R5cGUgPSBSYXdUeXBlcy5nZXQoanNvbl90eXBhYmxl
WyJ0eXBlIl0pCiAKLSAgICAgICAgY2xhc3MgUmF3VHlwZXNCaW5kaW5nOgotICAgICAgICAgICAg
QHN0YXRpY21ldGhvZAotICAgICAgICAgICAgZGVmIGdldF9jb2RlX2dlbmVyYXRvcigpOgotICAg
ICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0X2JpbmRpbmdfY29kZV9nZW5lcmF0b3IKKyAgICAg
ICAgcmV0dXJuIFJhd1R5cGVCaW5kaW5nKHJhd190eXBlKQogCi0gICAgICAgICAgICBAY2xhc3Nt
ZXRob2QKLSAgICAgICAgICAgIGRlZiBnZXRfaW5fY190eXBlX3RleHQoY2xzLCBvcHRpb25hbCk6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNscy5yZWR1Y2VfdG9fcmF3X3R5cGUoKS5nZXRfY19w
YXJhbV90eXBlKFBhcmFtVHlwZS5FVkVOVCwgb3B0aW9uYWwpLmdldF90ZXh0KCkKIAotICAgICAg
ICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICAgICAgZGVmIGdldF9zZXR0ZXJfdmFsdWVfZXhw
cmVzc2lvbl9wYXR0ZXJuKCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKK2NsYXNzIFJh
d1R5cGVCaW5kaW5nOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCByYXdfdHlwZSk6CisgICAgICAg
IHNlbGYucmF3X3R5cGVfID0gcmF3X3R5cGUKIAotICAgICAgICAgICAgQHN0YXRpY21ldGhvZAot
ICAgICAgICAgICAgZGVmIHJlZHVjZV90b19yYXdfdHlwZSgpOgotICAgICAgICAgICAgICAgIHJl
dHVybiByYXdfdHlwZQorICAgIGRlZiBnZXRfY29kZV9nZW5lcmF0b3Ioc2VsZik6CisgICAgICAg
IHJldHVybiBOb25lCiAKLSAgICAgICAgcmV0dXJuIFJhd1R5cGVzQmluZGluZworICAgIGRlZiBn
ZXRfaW5fY190eXBlX3RleHQoc2VsZiwgb3B0aW9uYWwpOgorICAgICAgICByZXR1cm4gc2VsZi5y
YXdfdHlwZV8uZ2V0X2NfcGFyYW1fdHlwZShQYXJhbVR5cGUuRVZFTlQsIG9wdGlvbmFsKS5nZXRf
dGV4dCgpCisKKyAgICBkZWYgZ2V0X3NldHRlcl92YWx1ZV9leHByZXNzaW9uX3BhdHRlcm4oc2Vs
Zik6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgcmVkdWNlX3RvX3Jhd190eXBlKHNl
bGYpOgorICAgICAgICByZXR1cm4gc2VsZi5yYXdfdHlwZV8KIAogCiBjbGFzcyBUeXBlRGF0YShv
YmplY3QpOgpAQCAtOTY2LDEyICsxMDIxLDIzIEBAIGNsYXNzIFR5cGVEYXRhKG9iamVjdCk6CiAg
ICAgICAgIGpzb25fdHlwZV9uYW1lID0ganNvbl90eXBlWyJ0eXBlIl0KICAgICAgICAgcmF3X3R5
cGUgPSBSYXdUeXBlcy5nZXQoanNvbl90eXBlX25hbWUpCiAgICAgICAgIHNlbGYucmF3X3R5cGVf
ID0gcmF3X3R5cGUKLSAgICAgICAgc2VsZi5iaW5kaW5nXyA9IFR5cGVCaW5kaW5ncy5jcmVhdGVf
bmFtZWRfdHlwZV9kZWNsYXJhdGlvbihqc29uX3R5cGUsIGpzb25fZG9tYWluWyJkb21haW4iXSwg
c2VsZikKKyAgICAgICAgc2VsZi5iaW5kaW5nX2JlaW5nX3Jlc29sdmVkXyA9IEZhbHNlCisgICAg
ICAgIHNlbGYuYmluZGluZ18gPSBOb25lCiAKICAgICBkZWYgZ2V0X3Jhd190eXBlKHNlbGYpOgog
ICAgICAgICByZXR1cm4gc2VsZi5yYXdfdHlwZV8KIAogICAgIGRlZiBnZXRfYmluZGluZyhzZWxm
KToKKyAgICAgICAgaWYgbm90IHNlbGYuYmluZGluZ186CisgICAgICAgICAgICBpZiBzZWxmLmJp
bmRpbmdfYmVpbmdfcmVzb2x2ZWRfOgorICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yKCJUeXBl
ICVzIGlzIGFscmVhZHkgYmVpbmcgcmVzb2x2ZWQiICUgc2VsZi5qc29uX3R5cGVfWyJ0eXBlIl0p
CisgICAgICAgICAgICAjIFJlc29sdmUgb25seSBsYXppbHksIGJlY2F1c2UgcmVzb2x2aW5nIG9u
ZSBuYW1lZCB0eXBlIG1heSByZXF1aXJlIHJlc29sdmluZyBzb21lIG90aGVyIG5hbWVkIHR5cGUu
CisgICAgICAgICAgICBzZWxmLmJpbmRpbmdfYmVpbmdfcmVzb2x2ZWRfID0gVHJ1ZQorICAgICAg
ICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuYmluZGluZ18gPSBUeXBlQmluZGluZ3Mu
Y3JlYXRlX25hbWVkX3R5cGVfZGVjbGFyYXRpb24oc2VsZi5qc29uX3R5cGVfLCBzZWxmLmpzb25f
ZG9tYWluX1siZG9tYWluIl0sIHNlbGYpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAg
ICAgICAgIHNlbGYuYmluZGluZ19iZWluZ19yZXNvbHZlZF8gPSBGYWxzZQorCiAgICAgICAgIHJl
dHVybiBzZWxmLmJpbmRpbmdfCiAKICAgICBkZWYgZ2V0X2pzb25fdHlwZShzZWxmKToKQEAgLTEx
NTgsOCArMTIyNCw2IEBAIFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSk7CiAk
e3R5cGVCdWlsZGVyc30KIH0gLy8gbmFtZXNwYWNlIFR5cGVCdWlsZGVyCiAKLSNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SKQotCiBjbGFzcyBJbnNwZWN0b3JGcm9udGVuZCB7CiBwdWJsaWM6CiAg
ICAgSW5zcGVjdG9yRnJvbnRlbmQoSW5zcGVjdG9yRnJvbnRlbmRDaGFubmVsKik7CkBAIC0xMTcw
LDYgKzEyMzQsOCBAQCBwcml2YXRlOgogICAgIEluc3BlY3RvckZyb250ZW5kQ2hhbm5lbCogbV9p
bnNwZWN0b3JGcm9udGVuZENoYW5uZWw7CiAke2ZpZWxkRGVjbGFyYXRpb25zfX07CiAKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAjZW5kaWYg
Ly8gIWRlZmluZWQoSW5zcGVjdG9yRnJvbnRlbmRfaCkKICIiIikKQEAgLTE1NzgsMTIgKzE2NDQs
MTIgQEAgYm9vbCBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Q29tbWFuZE5hbWUoY29u
c3QgU3RyaW5nJiBtZXNzYWdlLCBTdHJpbmcqIHIKICIiIgogCiAjaW5jbHVkZSAiY29uZmlnLmgi
CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKwogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgi
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgogCi0jaWYgRU5BQkxFKElOU1BFQ1RPUikKLQogI2luY2x1ZGUgIkluc3BlY3RvckZy
b250ZW5kQ2hhbm5lbC5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0NvbnNvbGVNZXNzYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db25zb2xl
TWVzc2FnZS5jcHAKaW5kZXggOGQzNTNmNmYwNjY1Yjk1YTczM2IwMzNlNjFlMWMwZmYzZjg2Zjlk
MC4uMzdjMGQ0M2NjN2M1NWZmNTIzYTgzMmJiNGNmOWZkYmRmZTBhODE3NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCkBAIC0yOSwxMCArMjksMTEgQEAK
ICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29uc29sZU1lc3NhZ2UuaCIK
IAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKKyNpbmNsdWRlICJDb25zb2xlTWVzc2FnZS5oIgor
CiAjaW5jbHVkZSAiQ29uc29sZS5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0LmgiCiAjaW5j
bHVkZSAiSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmgKaW5kZXggN2U5NTNhNDhmZDg1NjQzMjljODcxOGQwNTVlMThjYzAw
ODc2ZDY5OC4uZTEwMGFkZWFkMjFkMDBlNjIxZTMyZTYwOWUxOTU2YmFlOTljY2JlNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaApAQCAtMjQ0LDggKzI0NCwx
MCBAQCBwdWJsaWM6CiAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBt
X2RhdGEuYmVnaW4oKTsgfQogICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YS5lbmQoKTsgfQogCi1wcml2YXRlOgorcHJvdGVjdGVkOgogICAgIEluc3BlY3RvckFy
cmF5KCk7CisKK3ByaXZhdGU6CiAgICAgVmVjdG9yPFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gPiBt
X2RhdGE7CiB9OwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>