<?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>98098</bug_id>
          
          <creation_ts>2012-10-01 17:09:47 -0700</creation_ts>
          <short_desc>Parse GIF images without full decoding</short_desc>
          <delta_ts>2013-03-19 12:52:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>109007</dependson>
    
    <dependson>109662</dependson>
    
    <dependson>110776</dependson>
    
    <dependson>111137</dependson>
    
    <dependson>111144</dependson>
          <blocked>98285</blocked>
    
    <blocked>99784</blocked>
    
    <blocked>111395</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hin-Chung Lam">hclam</reporter>
          <assigned_to name="Hin-Chung Lam">hclam</assigned_to>
          <cc>ap</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>dongseong.hwang</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>koivisto</cc>
    
    <cc>nduca</cc>
    
    <cc>nick</cc>
    
    <cc>pkasting</cc>
    
    <cc>psolanki</cc>
    
    <cc>qinmin</cc>
    
    <cc>senorblanco</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>skyul</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>732138</commentid>
    <comment_count>0</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-01 17:09:47 -0700</bug_when>
    <thetext>This is a mild blocker for deferred image decoding. There are several things that should be improved with GIF image decoder:

1. GIFImageDecoder::frameCount() shouldn&apos;t be a O(n^2) operation

frameCount() constructs a GIFImageReader every time there is new bytes coming this is a very inefficient implementation.

This is related to deferred image decoding because frameCount() is progressive and we don&apos;t know precisely the frame count from just the header. This means we will erroneously try to defer a GIF image and later find out it is animated.

2. GIFImageDecoder should allow random access to frame header

GIFImageDecoder decodes the image serially and doesn&apos;t allow peaking into next frame&apos;s header. This prohibits checking if the next frame is complete and query its duration. This is the reason why we don&apos;t defer image decoding on an animated GIF.

If we solve these two problems we can support deferred image decoding for *ALL* GIF images or not at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739605</commentid>
    <comment_count>1</comment_count>
      <attachid>168141</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-10 21:53:00 -0700</bug_when>
    <thetext>Created attachment 168141
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739612</commentid>
    <comment_count>2</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-10 22:05:50 -0700</bug_when>
    <thetext>I&apos;ve upload a patch to demonstrate how to solve the problem for GIFs to enable deferred image decoding.

The patch is almost code complete but there are several things remaining:
1. Haven&apos;t tested the change in BitmapImage on CG.
2. More tolerant of bad images. Because parsing goes very far, an error in a future frame means entire image cannot be displayed.
3. Unit tests. I plan to do this in Chromium&apos;s webkit_unittests.
4. Testing on a large archive of images, this is done locally to make sure results are bit exact, doesn&apos;t cause more crashes, etc.

Here is how the algorithm works.

The state machine for GIF parsing remains the same. During a FrameCountQuery that doesn&apos;t need full image decoding we do the following things:
1. When a complete LZW block is encountered, save the information about the block, i.e. block position, block size.
2. When end of frame is reached, save the decode context for this frame and proceed parsing next frame.

When doing a FullQuery (i.e. image decoding) for a particular frame, earlier frame contexts are processed to generate all previous frames and LZW blocks before continuing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740241</commentid>
    <comment_count>3</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-11 13:51:51 -0700</bug_when>
    <thetext>I probably overdid it, shouldn&apos;t have changed the style in the file. Don&apos;t bother with the style changes I&apos;ll upload a slimmed down patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745843</commentid>
    <comment_count>4</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2012-10-18 18:19:50 -0700</bug_when>
    <thetext>This is also blocking 99874 because deferred image decoding cannot handle caching and decoding of animated GIFs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824156</commentid>
    <comment_count>5</comment_count>
      <attachid>186326</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-04 01:59:05 -0800</bug_when>
    <thetext>Created attachment 186326
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824157</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-04 02:01:05 -0800</bug_when>
    <thetext>Attachment 186326 did not pass style-queue:

Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:43:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:90:  block_position is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:91:  block_size is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:97:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:100:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:101:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:101:  rows_remaining is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:102:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:103:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:106:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:106:  x_offset is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:106:  y_offset is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:108:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:109:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:109:  disposal_method is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:110:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:110:  local_colormap_position is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:111:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:111:  local_colormap_size is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:112:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:112:  frame_index is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:114:  is_local_colormap_defined is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:115:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:115:  progressive_display is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:116:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:117:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:117:  is_transparent is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:118:  is_decode_started is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:120:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:120:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:120:  delay_time is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:122:  previous_blocks is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:185:  The parameter name &quot;query&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:197:  The parameter name &quot;query&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:213:  The parameter name &quot;query&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:221:  bytes_to_consume is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:222:  bytes_read is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:229:  global_colormap_size is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:230:  global_colormap_position is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:231:  images_data_complete is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:235:  image_complete is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:238:  raw_data is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:241:  current_frame is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:244:  previous_frames is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:246:  lzw_context is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:105:  output_row is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:156:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:156:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:157:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:162:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:163:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:218:  do_lzw is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:218:  bytes_to_decode is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:231:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:232:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:233:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:234:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:235:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:236:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:237:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:237:  clear_code is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:238:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:239:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:241:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:242:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:243:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:244:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:245:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:246:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:249:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:327:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:352:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:359:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:360:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:361:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:362:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:363:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:364:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:365:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:366:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:376:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:439:  data_position is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:441:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:442:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:445:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:447:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:448:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:454:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:455:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:456:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:457:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:458:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:459:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:460:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:462:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:471:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:471:  block_position is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:472:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:474:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:472:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:475:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:477:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:477:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:484:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:485:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:528:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:576:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:636:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:639:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:642:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:646:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:647:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:648:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:648:  disposal_method is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:649:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:650:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:651:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:652:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:654:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:735:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:735:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:735:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:755:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:758:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:766:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:767:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:769:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:772:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:773:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:774:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:775:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:780:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:783:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:784:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:786:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:789:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:792:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:795:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:797:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:797:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:799:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:799:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:810:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:811:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:812:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:817:  num_colors is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:826:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:834:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:849:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:850:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:855:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:868:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:869:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:871:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:874:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:875:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:876:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:877:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:880:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:881:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:890:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:892:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:893:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:896:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:905:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:918:  clear_code is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:945:  block_position is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:945:  bytes_to_decode is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:952:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:953:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:954:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCoreFailed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/platform/graphics/BitmapImage.cpp&apos;, u&apos;Source/WebCore/platform/graphics/ImageSource.cpp&apos;, u&apos;Source/WebCore/platform/graphics/ImageSource.h&apos;, u&apos;Source/WebCore/platform/graphics/chromium/DeferredImageDecoder.cpp&apos;, u&apos;Source/WebCore/platform/graphics/chromium/DeferredImageDecoder.h&apos;, u&apos;Source/WebCore/platform/image-decoders/ImageDecoder.cpp&apos;, u&apos;Source/WebCore/platform/image-decoders/ImageDecoder.h&apos;, u&apos;Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp&apos;, u&apos;Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.h&apos;, u&apos;Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp&apos;, u&apos;Source/WebCore/platform/image-decoders/gif/GIFImageReader.h&apos;, u&apos;Source/WebKit/chromium/ChangeLog&apos;, u&apos;Source/WebKit/chromium/WebKit.gyp&apos;, u&apos;Source/WebKit/chromium/WebKit.gypi&apos;, u&apos;Source/WebKit/chromium/tests/GIFImageDecoderTest.cpp&apos;, u&apos;Source/WebKit/chromium/tests/data/broken.gif&apos;]&quot; exit_code: 1
/platform/image-decoders/gif/GIFImageReader.cpp:955:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:966:  block_position is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:967:  block_size is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:977:  block_position is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:977:  bytes_to_decode is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:982:  bytes_left is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.h:63:  The parameter name &quot;disposalMethod&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.h:80:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 179 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825161</commentid>
    <comment_count>7</comment_count>
      <attachid>186553</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-04 23:06:49 -0800</bug_when>
    <thetext>Created attachment 186553
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825163</commentid>
    <comment_count>8</comment_count>
      <attachid>186553</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-04 23:10:17 -0800</bug_when>
    <thetext>Comment on attachment 186553
Patch

Phew the code is ready for review now, after sitting in dust for a few months.

Please ignore obvious style problems. GIFImageReader was written in hacker style and didn&apos;t follow WebKit style. Fixing style would make it much harder for review. I&apos;ll submit a patch for style fix after this patch hopefully lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825165</commentid>
    <comment_count>9</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-04 23:12:37 -0800</bug_when>
    <thetext>pkasting: You had experience with this GIF decoder code, can you review this? WebKit reviewer is still needed but we can do it afterwards.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825167</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-04 23:14:01 -0800</bug_when>
    <thetext>Attachment 186553 did not pass style-queue:

Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:90:  block_position is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:91:  block_size is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:97:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:100:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:101:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:101:  rows_remaining is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:102:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:103:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:106:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:106:  x_offset is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:106:  y_offset is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:108:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:109:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:109:  disposal_method is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:110:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:110:  local_colormap_position is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:111:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:111:  local_colormap_size is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:112:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:112:  frame_index is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:114:  is_local_colormap_defined is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:115:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:115:  progressive_display is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:116:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:117:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:117:  is_transparent is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:118:  is_decode_started is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:120:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:120:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:120:  delay_time is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:122:  previous_blocks is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:221:  bytes_to_consume is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:222:  bytes_read is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:229:  global_colormap_size is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:230:  global_colormap_position is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:231:  images_data_complete is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:235:  image_complete is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:238:  raw_data is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:241:  current_frame is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:244:  previous_frames is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:246:  lzw_context is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:156:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:156:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:157:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:162:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:163:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:218:  bytes_to_decode is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:231:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:232:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:233:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:234:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:235:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:236:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:237:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:237:  clear_code is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:238:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:239:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:241:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:242:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:243:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:244:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:245:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:246:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:249:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:327:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:352:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:359:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:360:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:361:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:362:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:363:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:364:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:365:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:366:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:439:  data_position is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:441:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:442:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:445:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:447:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:448:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:454:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:455:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:456:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:457:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:458:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:459:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:460:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:462:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:471:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:471:  block_position is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:472:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:474:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:472:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:475:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:477:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:477:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:484:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:485:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:528:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:576:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:636:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:639:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:642:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:646:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:647:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:648:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:648:  disposal_method is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:649:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:650:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:651:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:652:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:654:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:735:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:735:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:735:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:755:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:758:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:766:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:767:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:769:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:772:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:773:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:774:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:775:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:780:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:783:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:784:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:786:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:789:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:792:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:795:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:797:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:797:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:799:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:799:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:810:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:811:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:812:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:817:  num_colors is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:826:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:834:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:849:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:850:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:855:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:868:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:869:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:871:  Weird number of spaces aFailed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/platform/graphics/BitmapImage.cpp&apos;, u&apos;Source/WebCore/platform/graphics/ImageSource.cpp&apos;, u&apos;Source/WebCore/platform/graphics/ImageSource.h&apos;, u&apos;Source/WebCore/platform/graphics/chromium/DeferredImageDecoder.cpp&apos;, u&apos;Source/WebCore/platform/graphics/chromium/DeferredImageDecoder.h&apos;, u&apos;Source/WebCore/platform/image-decoders/ImageDecoder.cpp&apos;, u&apos;Source/WebCore/platform/image-decoders/ImageDecoder.h&apos;, u&apos;Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp&apos;, u&apos;Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.h&apos;, u&apos;Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp&apos;, u&apos;Source/WebCore/platform/image-decoders/gif/GIFImageReader.h&apos;, u&apos;Source/WebKit/chromium/ChangeLog&apos;, u&apos;Source/WebKit/chromium/WebKit.gyp&apos;, u&apos;Source/WebKit/chromium/WebKit.gypi&apos;, u&apos;Source/WebKit/chromium/tests/GIFImageDecoderTest.cpp&apos;, u&apos;Source/WebKit/chromium/tests/data/broken.gif&apos;]&quot; exit_code: 1
t line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:874:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:875:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:876:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:877:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:880:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:881:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:890:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:892:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:893:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:896:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:905:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:918:  clear_code is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:945:  block_position is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:945:  bytes_to_decode is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:952:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:953:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:954:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:955:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:966:  block_position is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:967:  block_size is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:977:  block_position is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:977:  bytes_to_decode is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:982:  bytes_left is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 170 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825922</commentid>
    <comment_count>11</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2013-02-05 16:18:43 -0800</bug_when>
    <thetext>This is a really large patch.  Is there no way to break it into a series of smaller patches to implement individual pieces?  It looks like you&apos;re implementing multiple new behaviors, adding a couple of different structures, making no-functional-change cleanups to the GIF decoder along with the functional ones, etc.  It&apos;d be easier if each bit was its own small piece.

This is especially important in the GIF decoder because it is so hairy and has been the source of so many subtle bugs in the past.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825927</commentid>
    <comment_count>12</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-05 16:28:29 -0800</bug_when>
    <thetext>Sorry I did this a while ago and it accumulated into a giant patch. I&apos;ll try to break it down into some logic changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825938</commentid>
    <comment_count>13</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-05 16:47:42 -0800</bug_when>
    <thetext>I&apos;ll try to break it down into these patches:

1. Abide to WebKit style.

This eliminates a lot of noise in later reviews.

2. Get rid of the &apos;hold&apos; pattern in the code + unit tests.

3. Use vectors instead of raw pointers.

4. Define new data structures.

5. Implement new logic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826068</commentid>
    <comment_count>14</comment_count>
      <attachid>186754</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-05 21:47:51 -0800</bug_when>
    <thetext>Created attachment 186754
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826069</commentid>
    <comment_count>15</comment_count>
      <attachid>186755</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-05 21:49:59 -0800</bug_when>
    <thetext>Created attachment 186755
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826073</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-05 21:52:55 -0800</bug_when>
    <thetext>Attachment 186755 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp&apos;, u&apos;Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp&apos;, u&apos;Source/WebCore/platform/image-decoders/gif/GIFImageReader.h&apos;]&quot; exit_code: 1
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:62:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 1 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837611</commentid>
    <comment_count>17</comment_count>
      <attachid>189349</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-20 11:45:27 -0800</bug_when>
    <thetext>Created attachment 189349
hacked gif decoder for local testing

For a number of subsequent changes to GIFImageDecoder/GIFImageReader it is necessary to run it over a large corpus to verify that new code produces the same results. I hacked up a command line tool to decode all frames in a GIF file and produces SHA1 hashes for this purpose. This patch is not review and in case anyone is interested in how I do testing locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858642</commentid>
    <comment_count>18</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-03-19 12:52:14 -0700</bug_when>
    <thetext>This is landed woohoo!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168141</attachid>
            <date>2012-10-10 21:53:00 -0700</date>
            <delta_ts>2013-02-04 01:59:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98098-20121010215159.patch</filename>
            <type>text/plain</type>
            <size>81468</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNTQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODA3YWM1NzM5NWRmNmVk
NzgxNGFmYTkzMWQ3YjIyOGY0YTgyNjRjZS4uZTJhYTc2YWYzYjhlZTY0ODBiOWY3MGVlZmI3MTc1
ODVjN2FkNzU2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg2IEBACisyMDEyLTEwLTEwICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUGFyc2UgR0lGIHdpdGhvdXQg
ZnVsbCBkZWNvZGluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTgwOTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIHBhdGNoIGltcHJvdmUgc2V2ZXJhbCB0aGluZ3Mgd2l0aCBHSUYgaW1hZ2UgZGVj
b2Rpbmc6CisgICAgICAgIDEuIEluY3JlbWVudGFsIGZpbGUgcGFyc2luZy4KKyAgICAgICAgICAg
R0lGIGRlY29kZXIgdXNlZCB0byByZS1wYXJzZSBlbnRpcmUgZmlsZSB3aGVuZXZlciBtb3JlIGRh
dGEgYXJyaXZlcy4KKyAgICAgICAgICAgVGhpcyBiZWhhdmlvciBpcyB3YXN0ZWZ1bCBhbmQgc2xv
d3MgZG93biBpbml0aWFsIHBhZ2UgbG9hZC4KKworICAgICAgICAyLiBGcmFtZSBoZWFkZXIgcGFy
c2luZyB3aXRob3V0IGZ1bGwgZGVjb2RpbmcuCisgICAgICAgICAgIEFuaW1hdGlvbiBjb250cm9s
IGRvZXNuJ3QgcmVxdWlyZSBmdWxsIGRlY29kaW5nIGFueW1vcmUuIFRoaXMKKyAgICAgICAgICAg
ZW5hYmxlcyBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZyBldmVuIGZvciBhbmltYXRlZCBHSUZzLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLiBJJ20gZ29ubmEgd3JpdGUgc29tZSB0ZXN0
cyBiZWZvcmUgc3VibWl0LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1h
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0
SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lRHVyYXRpb25BdElu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppbnRlcm5hbEFkdmFuY2VBbmlt
YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUR1cmF0aW9uQXRJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lhLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZURlY29kZXI6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6CisgICAg
ICAgIChJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFt
ZUR1cmF0aW9uQXRJbmRleCk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lm
L0dJRkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6
OkdJRkltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OnNl
dERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6c2V0RmFpbGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleCk6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVEdXJh
dGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVj
b2RlZFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxl
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpmcmFtZURhdGFDb21wbGV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmdpZkNvbXBsZXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdJRkltYWdlRGVjb2Rlcjo6ZXhwYW5kRnJhbWVCdWZmZXJDYWNoZSk6CisgICAgICAgICogcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChHSUZJbWFnZURlY29kZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6Om91dHB1dF9yb3cpOgorICAgICAgICAoV2ViQ29yZTo6ZG9fbHp3
KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlUmVhZGVyOjpHSUZJbWFnZVJlYWRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdJRkltYWdlUmVhZGVyOjpnbG9iYWxDb2xvck1hcCk6CisgICAgICAgIChXZWJDb3JlOjpH
SUZJbWFnZVJlYWRlcjo6bG9jYWxDb2xvck1hcCk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFn
ZVJlYWRlcjo6cHJlcGFyZUxaV0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VS
ZWFkZXI6OmRlY29kZUxaV0Jsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlUmVhZGVy
OjpkZWNvZGVQcmV2aW91c0xaV0Jsb2Nrcyk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZVJl
YWRlcjo6ZGVmZXJMWldCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZVJlYWRlcjo6
c2V0UmVtYWluaW5nQnl0ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dp
Zi9HSUZJbWFnZVJlYWRlci5oOgorICAgICAgICAoR0lGTFpXQmxvY2spOgorICAgICAgICAoV2Vi
Q29yZTo6R0lGTFpXQmxvY2s6OkdJRkxaV0Jsb2NrKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoR0lGRnJhbWVDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkZyYW1lQ29udGV4
dDo6R0lGRnJhbWVDb250ZXh0KToKKyAgICAgICAgKEdJRkxaV0NvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6R0lGTFpXQ29udGV4dDo6R0lGTFpXQ29udGV4dCk6CisgICAgICAgIChHSUZJbWFn
ZVJlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZVJlYWRlcjo6c2V0RGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZVJlYWRlcjo6Z2xvYmFsQ29sb3JNYXBTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdJRkltYWdlUmVhZGVyOjppbWFnZXNDb3VudCk6CisgICAgICAgIChX
ZWJDb3JlOjpHSUZJbWFnZVJlYWRlcjo6bG9vcENvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdJ
RkltYWdlUmVhZGVyOjpkYXRhKToKKwogMjAxMi0xMC0wNSAgVGFiIEF0a2lucyAgPGphY2thbG1h
Z2VAZ21haWwuY29tPgogCiAgICAgICAgIDxtYXJxdWVlPiBlbGVtZW50IGZvcmNlcyBpdHNlbGYg
dG8gYmUgYXQgbGVhc3QgMWVtIGhpZ2gsIHJlZ2FyZGxlc3Mgb2YgJ2hlaWdodCcgZGVjbGFyYXRp
b24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcElt
YWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNw
cAppbmRleCBkZWYwNzJlZTBkN2JmMmVmYTY2YjY4OGJjZjZhYjFhZTk4MzBkZWI3Li5mODI2MjBj
NmMyOGRkNjZiMGE0YzkzZjcyNzM4YzE1YTY1YjU5ZDQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCkBAIC0zMDcsMTYgKzMwNywxNiBA
QCBOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6ZnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCkK
IAogYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgp
CiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4KSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9pc0NvbXBsZXRlOworICAgIGlm
IChpbmRleCA8IG1fZnJhbWVzLnNpemUoKSAmJiBtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0YWRh
dGEgJiYgbV9mcmFtZXNbaW5kZXhdLm1faXNDb21wbGV0ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIG1fc291cmNlLmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoaW5kZXgpOwogfQog
CiBmbG9hdCBCaXRtYXBJbWFnZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQog
ewotICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCkpCi0gICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9kdXJhdGlvbjsKKyAgICBpZiAoaW5kZXgg
PCBtX2ZyYW1lcy5zaXplKCkgJiYgbV9mcmFtZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRhKQorICAg
ICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1fZHVyYXRpb247CisgICAgcmV0dXJuIG1fc291
cmNlLmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4KTsKIH0KIAogTmF0aXZlSW1hZ2VQdHIgQml0
bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKQEAgLTU1MCw4ICs1NTAsOSBA
QCBib29sIEJpdG1hcEltYWdlOjppbnRlcm5hbEFkdmFuY2VBbmltYXRpb24oYm9vbCBza2lwcGlu
Z0ZyYW1lcykKIAogICAgIC8vIFdlIG5lZWQgdG8gZHJhdyB0aGlzIGZyYW1lIGlmIHdlIGFkdmFu
Y2VkIHRvIGl0IHdoaWxlIG5vdCBza2lwcGluZywgb3IgaWYKICAgICAvLyB3aGlsZSB0cnlpbmcg
dG8gc2tpcCBmcmFtZXMgd2UgaGl0IHRoZSBsYXN0IGZyYW1lIGFuZCB0aHVzIGhhZCB0byBzdG9w
LgotICAgIGlmIChza2lwcGluZ0ZyYW1lcyAhPSBhZHZhbmNlZEFuaW1hdGlvbikKKyAgICBpZiAo
c2tpcHBpbmdGcmFtZXMgIT0gYWR2YW5jZWRBbmltYXRpb24pIHsKICAgICAgICAgaW1hZ2VPYnNl
cnZlcigpLT5hbmltYXRpb25BZHZhbmNlZCh0aGlzKTsKKyAgICB9CiAgICAgcmV0dXJuIGFkdmFu
Y2VkQW5pbWF0aW9uOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZVNvdXJjZS5jcHAKaW5kZXggOTgxNmU2MzQxZmViMjA3NTBlMzE2MTI3ZjYwZGU1Zjgx
ZjliNjk5Ni4uZGUyMWFlNDI5ZTRjOGVlZjUxNGI1ZmRmODBhNTEzOGY0NmYyZTEwNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcApAQCAt
MTYxLDE1ICsxNjEsMTEgQEAgZmxvYXQgSW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4
KHNpemVfdCBpbmRleCkKICAgICBpZiAoIW1fZGVjb2RlcikKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICBJbWFnZUZyYW1lKiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChp
bmRleCk7Ci0gICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1l
OjpGcmFtZUVtcHR5KQotICAgICAgICByZXR1cm4gMDsKLQogICAgIC8vIE1hbnkgYW5ub3lpbmcg
YWRzIHNwZWNpZnkgYSAwIGR1cmF0aW9uIHRvIG1ha2UgYW4gaW1hZ2UgZmxhc2ggYXMgcXVpY2ts
eSBhcyBwb3NzaWJsZS4KICAgICAvLyBXZSBmb2xsb3cgRmlyZWZveCdzIGJlaGF2aW9yIGFuZCB1
c2UgYSBkdXJhdGlvbiBvZiAxMDAgbXMgZm9yIGFueSBmcmFtZXMgdGhhdCBzcGVjaWZ5CiAgICAg
Ly8gYSBkdXJhdGlvbiBvZiA8PSAxMCBtcy4gU2VlIDxyZGFyOi8vcHJvYmxlbS83Njg5MzAwPiBh
bmQgPGh0dHA6Ly93ZWJraXQub3JnL2IvMzYwODI+CiAgICAgLy8gZm9yIG1vcmUgaW5mb3JtYXRp
b24uCi0gICAgY29uc3QgZmxvYXQgZHVyYXRpb24gPSBidWZmZXItPmR1cmF0aW9uKCkgLyAxMDAw
LjBmOworICAgIGNvbnN0IGZsb2F0IGR1cmF0aW9uID0gbV9kZWNvZGVyLT5mcmFtZUR1cmF0aW9u
QXRJbmRleChpbmRleCkgLyAxMDAwLjBmOwogICAgIGlmIChkdXJhdGlvbiA8IDAuMDExZikKICAg
ICAgICAgcmV0dXJuIDAuMTAwZjsKICAgICByZXR1cm4gZHVyYXRpb247CkBAIC0xOTMsOSArMTg5
LDcgQEAgYm9vbCBJbWFnZVNvdXJjZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5k
ZXgpCiB7CiAgICAgaWYgKCFtX2RlY29kZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IEltYWdlRnJhbWUqIGJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4
KTsKLSAgICByZXR1cm4gYnVmZmVyICYmIGJ1ZmZlci0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6
RnJhbWVDb21wbGV0ZTsKKyAgICByZXR1cm4gbV9kZWNvZGVyLT5mcmFtZUlzQ29tcGxldGVBdElu
ZGV4KGluZGV4KTsKIH0KIAogdW5zaWduZWQgSW1hZ2VTb3VyY2U6OmZyYW1lQnl0ZXNBdEluZGV4
KHNpemVfdCBpbmRleCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZVNvdXJjZS5oCmluZGV4IDY4NzllZGEwNTVhYjg3ZDI1NTYwMjFmM2U3ZjkwMmRlNTY2
OWExNWIuLmYwNTY2ZmFiZDQ1MmE5NDI4Nzk2NTZhZGUxODdhNGNkNTQ1NDIwZGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaApAQCAtMTQzLDcg
KzE0MywxMCBAQCBwdWJsaWM6CiAKICAgICBmbG9hdCBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXpl
X3QpOwogICAgIGJvb2wgZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90KTsgLy8gV2hldGhlciBv
ciBub3QgdGhlIGZyYW1lIGFjdHVhbGx5IHVzZWQgYW55IGFscGhhLgotICAgIGJvb2wgZnJhbWVJ
c0NvbXBsZXRlQXRJbmRleChzaXplX3QpOyAvLyBXaGV0aGVyIG9yIG5vdCB0aGUgZnJhbWUgaXMg
Y29tcGxldGVseSBkZWNvZGVkLgorCisgICAgLy8gUmV0dXJuIHRydWUgaWYgZnJhbWUgaXMgY29t
cGxldGVseSBkZWNvZGVkIG9yIHRoZXJlIGlzIGVub3VnaCBkYXRhIHRvCisgICAgLy8gY29tcGxl
dGVseSBkZWNvZGUgdGhlIGZyYW1lLgorICAgIGJvb2wgZnJhbWVJc0NvbXBsZXRlQXRJbmRleChz
aXplX3QpOwogICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb25BdEluZGV4KHNpemVfdCkg
Y29uc3Q7IC8vIEVYSUYgaW1hZ2Ugb3JpZW50YXRpb24KIAogICAgIC8vIFJldHVybiB0aGUgbnVt
YmVyIG9mIGJ5dGVzIGluIHRoZSBkZWNvZGVkIGZyYW1lLiBJZiB0aGUgZnJhbWUgaXMgbm90IHll
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0M0RDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcAppbmRleCA3MDMzZmE2ZGE2NzYxMDEz
NmI0NDNiZjY5MWQzMWM2ZjM2ZDQ2MGY1Li5mMzlhNzBiZjQ3YWE2OWQzYWJmZjNmOWFkOGY4MGYy
MWVkZTQ4ZDAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcApAQCAtMTc0LDcg
KzE3NCw3IEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1h
Z2UsIHVuc2lnbmVkIGludCBmb3JtYXQsIHVuc2lnbmVkCiAgICAgUmVmUHRyPGNhaXJvX3N1cmZh
Y2VfdD4gaW1hZ2VTdXJmYWNlOwogICAgIGlmIChpbWFnZS0+ZGF0YSgpKSB7CiAgICAgICAgIGRl
Y29kZXIuc2V0RGF0YShpbWFnZS0+ZGF0YSgpLCB0cnVlKTsKLSAgICAgICAgaWYgKCFkZWNvZGVy
LmZyYW1lQ291bnQoKSB8fCAhZGVjb2Rlci5mcmFtZUlzQ29tcGxldGVBdEluZGV4KDApKQorICAg
ICAgICBpZiAoIWRlY29kZXIuZnJhbWVDb3VudCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBPd25QdHI8TmF0aXZlSW1hZ2VDYWlybz4gbmF0aXZlSW1hZ2UgPSBhZG9wdFB0
cihkZWNvZGVyLmNyZWF0ZUZyYW1lQXRJbmRleCgwKSk7CiAgICAgICAgIGltYWdlU3VyZmFjZSA9
IG5hdGl2ZUltYWdlLT5zdXJmYWNlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dDNEU2tpYS5jcHAKaW5k
ZXggMTdhZDgzZDhmODM3NWZlMGM5MzE1OGM2NDViMGY1MjBlMTUxNzJlOC4uMTRkNWMzYTlmZTQx
M2U0Mzc0NTM5NWJlYjY1ZDQ1N2EyNTAzNjdlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHQzRFNraWEuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0M0RTa2lh
LmNwcApAQCAtNjAsNyArNjAsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURh
dGEoSW1hZ2UqIGltYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUdhbW1h
QW5kQ29sb3JQcm9maWxlID8gSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlSWdub3Jl
ZCA6IEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpOwogICAgICAgICAv
LyBBdHRlbXB0IHRvIGdldCByYXcgdW5wcmVtdWx0aXBsaWVkIGltYWdlIGRhdGEgCiAgICAgICAg
IGRlY29kZXIuc2V0RGF0YShpbWFnZS0+ZGF0YSgpLCB0cnVlKTsKLSAgICAgICAgaWYgKCFkZWNv
ZGVyLmZyYW1lQ291bnQoKSB8fCAhZGVjb2Rlci5mcmFtZUlzQ29tcGxldGVBdEluZGV4KDApKQor
ICAgICAgICBpZiAoIWRlY29kZXIuZnJhbWVDb3VudCgpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBoYXNBbHBoYSA9IGRlY29kZXIuZnJhbWVIYXNBbHBoYUF0SW5kZXgoMCk7
CiAgICAgICAgIHBpeGVscyA9IGFkb3B0UHRyKGRlY29kZXIuY3JlYXRlRnJhbWVBdEluZGV4KDAp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0lt
YWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9J
bWFnZURlY29kZXIuY3BwCmluZGV4IDFlZTAzZWZjNmMxYTU2ZGIyNDg2YzE2ZDMwODdjNmExOTdl
ZmNhMDQuLmQ3ZDkxYzUxZmIwNjM3NmY4MmQ4NDhmNWU5M2UxOWQzMjM3ZmUyYTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNv
ZGVyLmNwcApAQCAtMjk0LDYgKzI5NCwxMyBAQCB1bnNpZ25lZCBJbWFnZURlY29kZXI6OmZyYW1l
Qnl0ZXNBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKICAgICByZXR1cm4gbV9zaXplLmFyZWEo
KSAqIHNpemVvZihJbWFnZUZyYW1lOjpQaXhlbERhdGEpOwogfQogCitib29sIEltYWdlRGVjb2Rl
cjo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAgaWYgKG1fZnJh
bWVCdWZmZXJDYWNoZS5zaXplKCkgPD0gaW5kZXgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gbV9mcmFtZUJ1ZmZlckNhY2hlW2luZGV4XS5zdGF0dXMoKSA9PSBJbWFnZUZyYW1l
OjpGcmFtZUNvbXBsZXRlOworfQorCiB2b2lkIEltYWdlRGVjb2Rlcjo6cHJlcGFyZVNjYWxlRGF0
YUlmTmVjZXNzYXJ5KCkKIHsKICAgICBtX3NjYWxlZCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAppbmRleCAz
MDNkNzU5OWE5YWFmNDFlNjI4NGNlMDM3ZmVjM2JmMmZkZTFkYjU2Li5hMTcwNDljODczMDBlNDEy
ZjA4NGYwNjgzZWE0OGYzMGM1Yjk1NDYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaApAQCAtMjgyLDYgKzI4MiwxMiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIE51bWJlciBvZiBieXRlcyBpbiB0aGUg
ZGVjb2RlZCBmcmFtZSByZXF1ZXN0ZWQuIFJldHVybiAwIGlmIG5vdCB5ZXQgZGVjb2RlZC4KICAg
ICAgICAgdmlydHVhbCB1bnNpZ25lZCBmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QpIGNvbnN0Owog
CisgICAgICAgIC8vIFJldHVybiB0cnVlIGlmIGZyYW1lIGlzIGNvbXBsZXRlbHkgZGVjb2RlZCBv
ciB0aGVyZSBpcyBlbm91Z2ggZGF0YSB0bworICAgICAgICAvLyBjb21wbGV0ZWx5IGRlY29kZSB0
aGUgZnJhbWUuCisgICAgICAgIHZpcnR1YWwgYm9vbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNp
emVfdCBpbmRleCk7CisKKyAgICAgICAgdmlydHVhbCBmbG9hdCBmcmFtZUR1cmF0aW9uQXRJbmRl
eChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIDA7IH0KKwogICAgICAgICB2b2lkIHNldElnbm9yZUdh
bW1hQW5kQ29sb3JQcm9maWxlKGJvb2wgZmxhZykgeyBtX2lnbm9yZUdhbW1hQW5kQ29sb3JQcm9m
aWxlID0gZmxhZzsgfQogICAgICAgICBib29sIGlnbm9yZXNHYW1tYUFuZENvbG9yUHJvZmlsZSgp
IGNvbnN0IHsgcmV0dXJuIG1faWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGU7IH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdl
RGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYv
R0lGSW1hZ2VEZWNvZGVyLmNwcAppbmRleCA0MGUxMzFlN2NhOTQ4NGY1Mjc4OGU3NTEwM2E1YjAx
YmI5YzU2NzRjLi5kNDk2YzJiNDA5YzU2MGMwMjNiZjlhZWQ3ZTBlNGFjNThlM2RlYmM0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1h
Z2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcApAQCAtMzUsOSArMzUsMTAgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogR0lGSW1hZ2VEZWNvZGVyOjpHSUZJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFs
cGhhT3B0aW9uIGFscGhhT3B0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
SW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uIGdhbW1hQW5kQ29sb3JQcm9m
aWxlT3B0aW9uKQogICAgIDogSW1hZ2VEZWNvZGVyKGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9y
UHJvZmlsZU9wdGlvbikKLSAgICAsIG1fYWxyZWFkeVNjYW5uZWRUaGlzRGF0YUZvckZyYW1lQ291
bnQodHJ1ZSkKICAgICAsIG1fcmVwZXRpdGlvbkNvdW50KGNBbmltYXRpb25Mb29wT25jZSkKLSAg
ICAsIG1fcmVhZE9mZnNldCgwKQorICAgICwgbV9pc0ZyYW1lQ291bnRGaW5hbChmYWxzZSkKKyAg
ICAsIG1fZnJhbWVDb3VudCgwKQorICAgICwgbV9sYXN0RGF0YUNvbXBsZXRlRnJhbWUoMCkKIHsK
IH0KIApAQCAtNTAsMTAgKzUxLDEwIEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpzZXREYXRhKFNo
YXJlZEJ1ZmZlciogZGF0YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpCiAgICAgaWYgKGZhaWxlZCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBJbWFnZURlY29kZXI6OnNldERhdGEoZGF0YSwgYWxs
RGF0YVJlY2VpdmVkKTsKKyAgICBpZiAobV9yZWFkZXIpCisgICAgICAgIG1fcmVhZGVyLT5zZXRE
YXRhKGRhdGEpOwogCi0gICAgLy8gV2UgbmVlZCB0byByZXNjYW4gdGhlIGZyYW1lIGNvdW50LCBh
cyB0aGUgbmV3IGRhdGEgbWF5IGhhdmUgY2hhbmdlZCBpdC4KLSAgICBtX2FscmVhZHlTY2FubmVk
VGhpc0RhdGFGb3JGcmFtZUNvdW50ID0gZmFsc2U7CisgICAgSW1hZ2VEZWNvZGVyOjpzZXREYXRh
KGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CiB9CiAKIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppc1Np
emVBdmFpbGFibGUoKQpAQCAtNzgsMjEgKzc5LDE1IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpz
ZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCiAKIHNpemVfdCBHSUZJbWFn
ZURlY29kZXI6OmZyYW1lQ291bnQoKQogewotICAgIGlmICghbV9hbHJlYWR5U2Nhbm5lZFRoaXNE
YXRhRm9yRnJhbWVDb3VudCkgewotICAgICAgICAvLyBGSVhNRTogU2Nhbm5pbmcgYWxsIHRoZSBk
YXRhIGhhcyBPKG5eMikgYmVoYXZpb3IgaWYgdGhlIGRhdGEgd2VyZSB0bwotICAgICAgICAvLyBj
b21lIGluIHJlYWxseSBzbG93bHkuICBNaWdodCBiZSBpbnRlcmVzdGluZyB0byB0cnkgdG8gY2xv
bmUgb3VyCi0gICAgICAgIC8vIGV4aXN0aW5nIHJlYWQgc2Vzc2lvbiB0byBwcmVzZXJ2ZSBzdGF0
ZSwgYnV0IGZvciBub3cgd2UganVzdCBjcmF3bAotICAgICAgICAvLyBhbGwgdGhlIGRhdGEuICBO
b3RlIHRoYXQgdGhpcyBpcyBubyB3b3JzZSB0aGFuIHdoYXQgSW1hZ2VJTyBkb2VzIG9uCi0gICAg
ICAgIC8vIE1hYyByaWdodCBub3cgKGl0IGFsc28gY3Jhd2xzIGFsbCB0aGUgZGF0YSBhZ2Fpbiku
Ci0gICAgICAgIEdJRkltYWdlUmVhZGVyIHJlYWRlcigwKTsKLSAgICAgICAgcmVhZGVyLnJlYWQo
KGNvbnN0IHVuc2lnbmVkIGNoYXIqKW1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSwgR0lG
RnJhbWVDb3VudFF1ZXJ5LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLTEpKTsKLSAgICAgICAgbV9h
bHJlYWR5U2Nhbm5lZFRoaXNEYXRhRm9yRnJhbWVDb3VudCA9IHRydWU7Ci0gICAgICAgIG1fZnJh
bWVCdWZmZXJDYWNoZS5yZXNpemUocmVhZGVyLmltYWdlc19jb3VudCk7Ci0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgcmVhZGVyLmltYWdlc19jb3VudDsgKytpKQotICAgICAgICAgICAgbV9m
cmFtZUJ1ZmZlckNhY2hlW2ldLnNldFByZW11bHRpcGx5QWxwaGEobV9wcmVtdWx0aXBseUFscGhh
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKTsKKyAgICBp
ZiAobV9pc0ZyYW1lQ291bnRGaW5hbCkKKyAgICAgICAgcmV0dXJuIG1fZnJhbWVDb3VudDsKKwor
ICAgIC8vIFRyeSB0byBiZSB0b2xlcmFudCBhbmQgZG9uJ3QgcmVwb3J0IGFuIGVycm9yLgorICAg
IC8vIEZJWE1FOiBUaGlzIGNhbGwgY2FuIGNhdXNlIHNldEZhaWxlZCgpIGJlIGNhbGxlZCBldmVu
IHRob3VnaCB3ZSBjYW4gZGlzcGxheQorICAgIC8vIGEgZmV3IGZyYW1lcyB1bnRpbCBlcnJvci4K
KyAgICBkZWNvZGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC0xKSwgR0lGRnJhbWVDb3VudFF1ZXJ5
KTsKKyAgICBleHBhbmRGcmFtZUJ1ZmZlckNhY2hlKG1fcmVhZGVyLT5pbWFnZXNDb3VudCgpKTsK
KyAgICByZXR1cm4gbV9yZWFkZXItPmltYWdlc0NvdW50KCk7CiB9CiAKIGludCBHSUZJbWFnZURl
Y29kZXI6OnJlcGV0aXRpb25Db3VudCgpIGNvbnN0CkBAIC0xMTYsOCArMTExLDggQEAgaW50IEdJ
RkltYWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50KCkgY29uc3QKICAgICAvLyBzaG91bGQgY29u
dGludWUgdG8gdHJlYXQgaXQgYXMgYSAibG9vcCBvbmNlIiBhbmltYXRpb24uICBXZSBkb24ndCBu
ZWVkCiAgICAgLy8gc3BlY2lhbCBjb2RlIGhlcmUgZWl0aGVyLCBiZWNhdXNlIGluIHRoaXMgY2Fz
ZSB3ZSdsbCBuZXZlciBjaGFuZ2UKICAgICAvLyB8bV9yZXBldGl0aW9uQ291bnR8IGZyb20gaXRz
IGRlZmF1bHQgdmFsdWUuCi0gICAgaWYgKG1fcmVhZGVyICYmIChtX3JlYWRlci0+bG9vcF9jb3Vu
dCAhPSBjTG9vcENvdW50Tm90U2VlbikpCi0gICAgICAgIG1fcmVwZXRpdGlvbkNvdW50ID0gbV9y
ZWFkZXItPmxvb3BfY291bnQ7CisgICAgaWYgKG1fcmVhZGVyICYmIChtX3JlYWRlci0+bG9vcENv
dW50KCkgIT0gY0xvb3BDb3VudE5vdFNlZW4pKQorICAgICAgICBtX3JlcGV0aXRpb25Db3VudCA9
IG1fcmVhZGVyLT5sb29wQ291bnQoKTsKICAgICByZXR1cm4gbV9yZXBldGl0aW9uQ291bnQ7CiB9
CiAKQEAgLTEzNyw2ICsxMzIsNyBAQCBJbWFnZUZyYW1lKiBHSUZJbWFnZURlY29kZXI6OmZyYW1l
QnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCiAKIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpzZXRG
YWlsZWQoKQogeworICAgIEFTU0VSVChmYWxzZSk7CiAgICAgbV9yZWFkZXIuY2xlYXIoKTsKICAg
ICByZXR1cm4gSW1hZ2VEZWNvZGVyOjpzZXRGYWlsZWQoKTsKIH0KQEAgLTE5MSw0OSArMTg3LDYw
IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGNs
ZWFyQmVmb3JlRnJhbWUpCiAgICAgfQogfQogCi12b2lkIEdJRkltYWdlRGVjb2Rlcjo6ZGVjb2Rp
bmdIYWx0ZWQodW5zaWduZWQgYnl0ZXNMZWZ0KQorYm9vbCBHSUZJbWFnZURlY29kZXI6OmZyYW1l
SXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQoreworICAgIGlmIChmcmFtZUNvdW50KCkg
PD0gaW5kZXgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9mcmFtZUJ1ZmZlckNh
Y2hlW2luZGV4XS5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gaW5kZXggPD0gbV9sYXN0RGF0YUNvbXBsZXRlRnJh
bWU7Cit9CisKK2Zsb2F0IEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6
ZV90IGluZGV4KQogewotICAgIG1fcmVhZE9mZnNldCA9IG1fZGF0YS0+c2l6ZSgpIC0gYnl0ZXNM
ZWZ0OworICAgIGlmICghZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCkpCisgICAgICAgIHJl
dHVybiAwOworICAgIHJldHVybiBtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhdLmR1cmF0aW9uKCk7
CiB9CiAKLWJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFt
ZUluZGV4LCB1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIsIHVuc2lnbmVkIGNoYXIqIHJvd0VuZCwg
dW5zaWduZWQgcm93TnVtYmVyLCB1bnNpZ25lZCByZXBlYXRDb3VudCwgYm9vbCB3cml0ZVRyYW5z
cGFyZW50UGl4ZWxzKQorYm9vbCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KGNvbnN0
IEdJRkZyYW1lQ29udGV4dCogZnJhbWUsIHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGNo
YXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIHJvd051bWJlciwgdW5zaWdu
ZWQgcmVwZWF0Q291bnQsIGJvb2wgd3JpdGVUcmFuc3BhcmVudFBpeGVscykKIHsKLSAgICBjb25z
dCBHSUZGcmFtZVJlYWRlciogZnJhbWVSZWFkZXIgPSBtX3JlYWRlci0+ZnJhbWVfcmVhZGVyOwog
ICAgIC8vIFRoZSBwaXhlbCBkYXRhIGFuZCBjb29yZGluYXRlcyBzdXBwbGllZCB0byB1cyBhcmUg
cmVsYXRpdmUgdG8gdGhlIGZyYW1lJ3MKICAgICAvLyBvcmlnaW4gd2l0aGluIHRoZSBlbnRpcmUg
aW1hZ2Ugc2l6ZSwgaS5lLgotICAgIC8vIChmcmFtZVJlYWRlci0+eF9vZmZzZXQsIGZyYW1lUmVh
ZGVyLT55X29mZnNldCkuICBUaGVyZSBpcyBubyBndWFyYW50ZWUKLSAgICAvLyB0aGF0IChyb3dF
bmQgLSByb3dCdWZmZXIpID09IChzaXplKCkud2lkdGgoKSAtIGZyYW1lUmVhZGVyLT54X29mZnNl
dCksIHNvCisgICAgLy8gKGZyYW1lLT54T2Zmc2V0LCBmcmFtZS0+eU9mZnNldCkuICBUaGVyZSBp
cyBubyBndWFyYW50ZWUKKyAgICAvLyB0aGF0IHdpZHRoID09IChzaXplKCkud2lkdGgoKSAtIGZy
YW1lLT54T2Zmc2V0KSwgc28KICAgICAvLyB3ZSBtdXN0IGVuc3VyZSB3ZSBkb24ndCBydW4gb2Zm
IHRoZSBlbmQgb2YgZWl0aGVyIHRoZSBzb3VyY2UgZGF0YSBvciB0aGUKICAgICAvLyByb3cncyBY
LWNvb3JkaW5hdGVzLgotICAgIGludCB4QmVnaW4gPSB1cHBlckJvdW5kU2NhbGVkWChmcmFtZVJl
YWRlci0+eF9vZmZzZXQpOwotICAgIGludCB5QmVnaW4gPSB1cHBlckJvdW5kU2NhbGVkWShmcmFt
ZVJlYWRlci0+eV9vZmZzZXQgKyByb3dOdW1iZXIpOwotICAgIGludCB4RW5kID0gbG93ZXJCb3Vu
ZFNjYWxlZFgoc3RkOjptaW4oc3RhdGljX2Nhc3Q8aW50PihmcmFtZVJlYWRlci0+eF9vZmZzZXQg
KyAocm93RW5kIC0gcm93QnVmZmVyKSksIHNpemUoKS53aWR0aCgpKSAtIDEsIHhCZWdpbiArIDEp
ICsgMTsKLSAgICBpbnQgeUVuZCA9IGxvd2VyQm91bmRTY2FsZWRZKHN0ZDo6bWluKHN0YXRpY19j
YXN0PGludD4oZnJhbWVSZWFkZXItPnlfb2Zmc2V0ICsgcm93TnVtYmVyICsgcmVwZWF0Q291bnQp
LCBzaXplKCkuaGVpZ2h0KCkpIC0gMSwgeUJlZ2luICsgMSkgKyAxOworICAgIGludCB4QmVnaW4g
PSB1cHBlckJvdW5kU2NhbGVkWChmcmFtZS0+eE9mZnNldCk7CisgICAgaW50IHlCZWdpbiA9IHVw
cGVyQm91bmRTY2FsZWRZKGZyYW1lLT55T2Zmc2V0ICsgcm93TnVtYmVyKTsKKyAgICBpbnQgeEVu
ZCA9IGxvd2VyQm91bmRTY2FsZWRYKHN0ZDo6bWluKHN0YXRpY19jYXN0PGludD4oZnJhbWUtPnhP
ZmZzZXQgKyB3aWR0aCksIHNpemUoKS53aWR0aCgpKSAtIDEsIHhCZWdpbiArIDEpICsgMTsKKyAg
ICBpbnQgeUVuZCA9IGxvd2VyQm91bmRTY2FsZWRZKHN0ZDo6bWluKHN0YXRpY19jYXN0PGludD4o
ZnJhbWUtPnlPZmZzZXQgKyByb3dOdW1iZXIgKyByZXBlYXRDb3VudCksIHNpemUoKS5oZWlnaHQo
KSkgLSAxLCB5QmVnaW4gKyAxKSArIDE7CiAgICAgaWYgKCFyb3dCdWZmZXIgfHwgKHhCZWdpbiA8
IDApIHx8ICh5QmVnaW4gPCAwKSB8fCAoeEVuZCA8PSB4QmVnaW4pIHx8ICh5RW5kIDw9IHlCZWdp
bikpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gR2V0IHRoZSBjb2xvcm1hcC4KICAg
ICBjb25zdCB1bnNpZ25lZCBjaGFyKiBjb2xvck1hcDsKICAgICB1bnNpZ25lZCBjb2xvck1hcFNp
emU7Ci0gICAgaWYgKGZyYW1lUmVhZGVyLT5pc19sb2NhbF9jb2xvcm1hcF9kZWZpbmVkKSB7Ci0g
ICAgICAgIGNvbG9yTWFwID0gZnJhbWVSZWFkZXItPmxvY2FsX2NvbG9ybWFwOwotICAgICAgICBj
b2xvck1hcFNpemUgPSAodW5zaWduZWQpZnJhbWVSZWFkZXItPmxvY2FsX2NvbG9ybWFwX3NpemU7
CisgICAgaWYgKGZyYW1lLT5pc0xvY2FsQ29sb3JNYXBEZWZpbmVkKSB7CisgICAgICAgIGNvbG9y
TWFwID0gbV9yZWFkZXItPmxvY2FsQ29sb3JNYXAoZnJhbWUpOworICAgICAgICBjb2xvck1hcFNp
emUgPSBmcmFtZS0+bG9jYWxDb2xvck1hcFNpemU7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29s
b3JNYXAgPSBtX3JlYWRlci0+Z2xvYmFsX2NvbG9ybWFwOwotICAgICAgICBjb2xvck1hcFNpemUg
PSBtX3JlYWRlci0+Z2xvYmFsX2NvbG9ybWFwX3NpemU7CisgICAgICAgIGNvbG9yTWFwID0gbV9y
ZWFkZXItPmdsb2JhbENvbG9yTWFwKCk7CisgICAgICAgIGNvbG9yTWFwU2l6ZSA9IG1fcmVhZGVy
LT5nbG9iYWxDb2xvck1hcFNpemUoKTsKICAgICB9Ci0gICAgaWYgKCFjb2xvck1hcCkKKyAgICBp
ZiAoIWNvbG9yTWFwKSB7CiAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAogICAgIC8vIElu
aXRpYWxpemUgdGhlIGZyYW1lIGlmIG5lY2Vzc2FyeS4KICAgICBJbWFnZUZyYW1lJiBidWZmZXIg
PSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07Ci0gICAgaWYgKChidWZmZXIuc3RhdHVz
KCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgJiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFtZUlu
ZGV4KSkKKyAgICBpZiAoKGJ1ZmZlci5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5
KSAmJiAhaW5pdEZyYW1lQnVmZmVyKGZyYW1lLCBmcmFtZUluZGV4KSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgLy8gV3JpdGUgb25lIHJvdydzIHdvcnRoIG9mIGRhdGEgaW50byB0aGUg
ZnJhbWUuICAKICAgICBmb3IgKGludCB4ID0geEJlZ2luOyB4IDwgeEVuZDsgKyt4KSB7Ci0gICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgc291cmNlVmFsdWUgPSAqKHJvd0J1ZmZlciArIChtX3Nj
YWxlZCA/IG1fc2NhbGVkQ29sdW1uc1t4XSA6IHgpIC0gZnJhbWVSZWFkZXItPnhfb2Zmc2V0KTsK
LSAgICAgICAgaWYgKCghZnJhbWVSZWFkZXItPmlzX3RyYW5zcGFyZW50IHx8IChzb3VyY2VWYWx1
ZSAhPSBmcmFtZVJlYWRlci0+dHBpeGVsKSkgJiYgKHNvdXJjZVZhbHVlIDwgY29sb3JNYXBTaXpl
KSkgeworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHNvdXJjZVZhbHVlID0gKihyb3dCdWZm
ZXIgKyAobV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4KSAtIGZyYW1lLT54T2Zmc2V0
KTsKKyAgICAgICAgaWYgKCghZnJhbWUtPmlzVHJhbnNwYXJlbnQgfHwgKHNvdXJjZVZhbHVlICE9
IGZyYW1lLT50cGl4ZWwpKSAmJiAoc291cmNlVmFsdWUgPCBjb2xvck1hcFNpemUpKSB7CiAgICAg
ICAgICAgICBjb25zdCBzaXplX3QgY29sb3JJbmRleCA9IHN0YXRpY19jYXN0PHNpemVfdD4oc291
cmNlVmFsdWUpICogMzsKICAgICAgICAgICAgIGJ1ZmZlci5zZXRSR0JBKHgsIHlCZWdpbiwgY29s
b3JNYXBbY29sb3JJbmRleF0sIGNvbG9yTWFwW2NvbG9ySW5kZXggKyAxXSwgY29sb3JNYXBbY29s
b3JJbmRleCArIDJdLCAyNTUpOwogICAgICAgICB9IGVsc2UgewpAQCAtMjU3LDEyICsyNjQsMTIg
QEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5k
ZXgsIHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBH
SUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUodW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWdu
ZWQgZnJhbWVEdXJhdGlvbiwgSW1hZ2VGcmFtZTo6RnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3Nh
bE1ldGhvZCkKK2Jvb2wgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKGNvbnN0IEdJRkZy
YW1lQ29udGV4dCogZnJhbWUsIHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGZyYW1lRHVy
YXRpb24sIEltYWdlRnJhbWU6OkZyYW1lRGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2QpCiB7
CiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgaWYgbmVjZXNzYXJ5LiAgU29tZSBHSUZzIGlu
c2VydCBkby1ub3RoaW5nIGZyYW1lcywKICAgICAvLyBpbiB3aGljaCBjYXNlIHdlIG5ldmVyIHJl
YWNoIGhhdmVEZWNvZGVkUm93KCkgYmVmb3JlIGdldHRpbmcgaGVyZS4KICAgICBJbWFnZUZyYW1l
JiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07Ci0gICAgaWYgKChidWZm
ZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgJiYgIWluaXRGcmFtZUJ1ZmZl
cihmcmFtZUluZGV4KSkKKyAgICBpZiAoKGJ1ZmZlci5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpG
cmFtZUVtcHR5KSAmJiAhaW5pdEZyYW1lQnVmZmVyKGZyYW1lLCBmcmFtZUluZGV4KSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBpbml0RnJhbWVCdWZmZXIoKSBoYXMgYWxyZWFkeSBjYWxsZWQg
c2V0RmFpbGVkKCkuCiAKICAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lQ29t
cGxldGUpOwpAQCAtMzAzLDEzICszMTAsMjQgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmZyYW1l
Q29tcGxldGUodW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAordm9pZCBHSUZJbWFnZURlY29kZXI6OmZyYW1lRGF0YUNvbXBs
ZXRlKHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGZyYW1lRHVyYXRpb24pCit7CisgICAg
ZXhwYW5kRnJhbWVCdWZmZXJDYWNoZShmcmFtZUluZGV4ICsgMSk7CisgICAgbV9mcmFtZUJ1ZmZl
ckNhY2hlW2ZyYW1lSW5kZXhdLnNldER1cmF0aW9uKGZyYW1lRHVyYXRpb24pOworICAgIGlmIChm
cmFtZUluZGV4ID4gbV9sYXN0RGF0YUNvbXBsZXRlRnJhbWUpCisgICAgICAgIG1fbGFzdERhdGFD
b21wbGV0ZUZyYW1lID0gZnJhbWVJbmRleDsKK30KKwogdm9pZCBHSUZJbWFnZURlY29kZXI6Omdp
ZkNvbXBsZXRlKCkKIHsKLSAgICAvLyBDYWNoZSB0aGUgcmVwZXRpdGlvbiBjb3VudCwgd2hpY2gg
aXMgbm93IGFzIGF1dGhvcml0YXRpdmUgYXMgaXQncyBldmVyCisgICAgLy8gQ2FjaGUgcmVwZXRp
dGlvbiBjb3VudCBhbmQgZnJhbWUgY291bnQsIHdoaWNoIGFyZSBub3cgYXMgYXV0aG9yaXRhdGl2
ZSBhcyB0aGV5J3JlIGV2ZXIKICAgICAvLyBnb2luZyB0byBiZS4KICAgICByZXBldGl0aW9uQ291
bnQoKTsKIAorICAgIC8vIERvbid0IGNhbGwgZnJhbWVDb3VudCgpIGJlY2F1c2UgaXQgZGVjb2Rl
cyBhbmQgY2F1c2VzIGFuIGluZmluaXRlIGxvb3AuCisgICAgbV9mcmFtZUNvdW50ID0gbV9yZWFk
ZXItPmltYWdlc0NvdW50KCk7CiAgICAgbV9yZWFkZXIuY2xlYXIoKTsKKyAgICBtX2lzRnJhbWVD
b3VudEZpbmFsID0gdHJ1ZTsKIH0KIAogdm9pZCBHSUZJbWFnZURlY29kZXI6OmRlY29kZSh1bnNp
Z25lZCBoYWx0QXRGcmFtZSwgR0lGUXVlcnkgcXVlcnkpCkBAIC0zMTcsMjYgKzMzNSwyNyBAQCB2
b2lkIEdJRkltYWdlRGVjb2Rlcjo6ZGVjb2RlKHVuc2lnbmVkIGhhbHRBdEZyYW1lLCBHSUZRdWVy
eSBxdWVyeSkKICAgICBpZiAoZmFpbGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICgh
bV9yZWFkZXIpCisgICAgaWYgKCFtX3JlYWRlcikgewogICAgICAgICBtX3JlYWRlciA9IGFkb3B0
UHRyKG5ldyBHSUZJbWFnZVJlYWRlcih0aGlzKSk7CisgICAgICAgIG1fcmVhZGVyLT5zZXREYXRh
KG1fZGF0YSk7CisgICAgfQogCiAgICAgLy8gSWYgd2UgY291bGRuJ3QgZGVjb2RlIHRoZSBpbWFn
ZSBidXQgd2UndmUgcmVjZWl2ZWQgYWxsIHRoZSBkYXRhLCBkZWNvZGluZwogICAgIC8vIGhhcyBm
YWlsZWQuCi0gICAgaWYgKCFtX3JlYWRlci0+cmVhZCgoY29uc3QgdW5zaWduZWQgY2hhciopbV9k
YXRhLT5kYXRhKCkgKyBtX3JlYWRPZmZzZXQsIG1fZGF0YS0+c2l6ZSgpIC0gbV9yZWFkT2Zmc2V0
LCBxdWVyeSwgaGFsdEF0RnJhbWUpICYmIGlzQWxsRGF0YVJlY2VpdmVkKCkpCisgICAgaWYgKCFt
X3JlYWRlci0+ZGVjb2RlKHF1ZXJ5LCBoYWx0QXRGcmFtZSkgJiYgaXNBbGxEYXRhUmVjZWl2ZWQo
KSkKICAgICAgICAgc2V0RmFpbGVkKCk7CiB9CiAKLWJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppbml0
RnJhbWVCdWZmZXIodW5zaWduZWQgZnJhbWVJbmRleCkKK2Jvb2wgR0lGSW1hZ2VEZWNvZGVyOjpp
bml0RnJhbWVCdWZmZXIoY29uc3QgR0lGRnJhbWVDb250ZXh0KiBmcmFtZSwgdW5zaWduZWQgZnJh
bWVJbmRleCkKIHsKICAgICAvLyBJbml0aWFsaXplIHRoZSBmcmFtZSByZWN0IGluIG91ciBidWZm
ZXIuCi0gICAgY29uc3QgR0lGRnJhbWVSZWFkZXIqIGZyYW1lUmVhZGVyID0gbV9yZWFkZXItPmZy
YW1lX3JlYWRlcjsKLSAgICBJbnRSZWN0IGZyYW1lUmVjdChmcmFtZVJlYWRlci0+eF9vZmZzZXQs
IGZyYW1lUmVhZGVyLT55X29mZnNldCwgZnJhbWVSZWFkZXItPndpZHRoLCBmcmFtZVJlYWRlci0+
aGVpZ2h0KTsKKyAgICBJbnRSZWN0IGZyYW1lUmVjdChmcmFtZS0+eE9mZnNldCwgZnJhbWUtPnlP
ZmZzZXQsIGZyYW1lLT53aWR0aCwgZnJhbWUtPmhlaWdodCk7CiAKICAgICAvLyBNYWtlIHN1cmUg
dGhlIGZyYW1lUmVjdCBkb2Vzbid0IGV4dGVuZCBvdXRzaWRlIHRoZSBidWZmZXIuCiAgICAgaWYg
KGZyYW1lUmVjdC5tYXhYKCkgPiBzaXplKCkud2lkdGgoKSkKLSAgICAgICAgZnJhbWVSZWN0LnNl
dFdpZHRoKHNpemUoKS53aWR0aCgpIC0gZnJhbWVSZWFkZXItPnhfb2Zmc2V0KTsKKyAgICAgICAg
ZnJhbWVSZWN0LnNldFdpZHRoKHNpemUoKS53aWR0aCgpIC0gZnJhbWUtPnhPZmZzZXQpOwogICAg
IGlmIChmcmFtZVJlY3QubWF4WSgpID4gc2l6ZSgpLmhlaWdodCgpKQotICAgICAgICBmcmFtZVJl
Y3Quc2V0SGVpZ2h0KHNpemUoKS5oZWlnaHQoKSAtIGZyYW1lUmVhZGVyLT55X29mZnNldCk7Cisg
ICAgICAgIGZyYW1lUmVjdC5zZXRIZWlnaHQoc2l6ZSgpLmhlaWdodCgpIC0gZnJhbWUtPnlPZmZz
ZXQpOwogCiAgICAgSW1hZ2VGcmFtZSogY29uc3QgYnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNo
ZVtmcmFtZUluZGV4XTsKICAgICBpbnQgbGVmdCA9IHVwcGVyQm91bmRTY2FsZWRYKGZyYW1lUmVj
dC54KCkpOwpAQCAtNDAyLDQgKzQyMSwxNCBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZy
YW1lQnVmZmVyKHVuc2lnbmVkIGZyYW1lSW5kZXgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3Zv
aWQgR0lGSW1hZ2VEZWNvZGVyOjpleHBhbmRGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCBzaXplKQor
eworICAgIHNpemVfdCBwcmV2aW91c1NpemUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpOwor
ICAgIGlmIChzaXplIDwgcHJldmlvdXNTaXplKQorICAgICAgICByZXR1cm47CisgICAgbV9mcmFt
ZUJ1ZmZlckNhY2hlLnJlc2l6ZShzaXplKTsKKyAgICBmb3IgKHNpemVfdCBpID0gcHJldmlvdXNT
aXplOyBpIDwgbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKTsgKytpKQorICAgICAgICBtX2ZyYW1l
QnVmZmVyQ2FjaGVbaV0uc2V0UHJlbXVsdGlwbHlBbHBoYShtX3ByZW11bHRpcGx5QWxwaGEpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgKaW5kZXgg
MTViZDk5ZjY4NjIzNGFkYzM5YWZlYWZiNmUxMDVjMTc5YjMyOTA3MS4uMjk3ZDdlOGI3M2VlYmQ0
ZDMzZDMxNDA3YzJhMGM5OGE5MWI3OTIyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaApAQCAt
MjksMTAgKzI5LDExIEBACiAjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCiAjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgogCi1zdHJ1Y3QgR0lGSW1hZ2VSZWFkZXI7Ci0KIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorc3RydWN0IEdJRkltYWdlUmVhZGVyOworc3RydWN0IEdJRkZyYW1lQ29udGV4dDsKKwog
ICAgIC8vIFRoaXMgY2xhc3MgZGVjb2RlcyB0aGUgR0lGIGltYWdlIGZvcm1hdC4KICAgICBjbGFz
cyBHSUZJbWFnZURlY29kZXIgOiBwdWJsaWMgSW1hZ2VEZWNvZGVyIHsKICAgICBwdWJsaWM6CkBA
IC01NCwxMSArNTUsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBHSUZJbWFn
ZVJlYWRlciEKICAgICAgICAgdmlydHVhbCBib29sIHNldEZhaWxlZCgpOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCBjbGVhckJlZm9yZUZyYW1lKTsK
KyAgICAgICAgdmlydHVhbCBib29sIGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4
KTsKKyAgICAgICAgdmlydHVhbCBmbG9hdCBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5k
ZXgpOwogCiAgICAgICAgIC8vIENhbGxiYWNrcyBmcm9tIHRoZSBHSUYgcmVhZGVyLgotICAgICAg
ICB2b2lkIGRlY29kaW5nSGFsdGVkKHVuc2lnbmVkIGJ5dGVzTGVmdCk7Ci0gICAgICAgIGJvb2wg
aGF2ZURlY29kZWRSb3codW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgY2hhciogcm93QnVm
ZmVyLCB1bnNpZ25lZCBjaGFyKiByb3dFbmQsIHVuc2lnbmVkIHJvd051bWJlciwgdW5zaWduZWQg
cmVwZWF0Q291bnQsIGJvb2wgd3JpdGVUcmFuc3BhcmVudFBpeGVscyk7Ci0gICAgICAgIGJvb2wg
ZnJhbWVDb21wbGV0ZSh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBmcmFtZUR1cmF0aW9u
LCBJbWFnZUZyYW1lOjpGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKTsKKyAgICAg
ICAgYm9vbCBoYXZlRGVjb2RlZFJvdyhjb25zdCBHSUZGcmFtZUNvbnRleHQqLCB1bnNpZ25lZCBm
cmFtZUluZGV4LCB1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIsIHVuc2lnbmVkIHdpZHRoLCB1bnNp
Z25lZCByb3dOdW1iZXIsIHVuc2lnbmVkIHJlcGVhdENvdW50LCBib29sIHdyaXRlVHJhbnNwYXJl
bnRQaXhlbHMpOworICAgICAgICBib29sIGZyYW1lQ29tcGxldGUoY29uc3QgR0lGRnJhbWVDb250
ZXh0KiwgdW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgSW1hZ2VG
cmFtZTo6RnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCk7CisgICAgICAgIHZvaWQg
ZnJhbWVEYXRhQ29tcGxldGUodW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJh
dGlvbik7CiAgICAgICAgIHZvaWQgZ2lmQ29tcGxldGUoKTsKIAogICAgIHByaXZhdGU6CkBAIC03
MSwxMyArNzQsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBDYWxsZWQgdG8g
aW5pdGlhbGl6ZSB0aGUgZnJhbWUgYnVmZmVyIHdpdGggdGhlIGdpdmVuIGluZGV4LCBiYXNlZCBv
bgogICAgICAgICAvLyB0aGUgcHJldmlvdXMgZnJhbWUncyBkaXNwb3NhbCBtZXRob2QuIFJldHVy
bnMgdHJ1ZSBvbiBzdWNjZXNzLiBPbgogICAgICAgICAvLyBmYWlsdXJlLCB0aGlzIHdpbGwgbWFy
ayB0aGUgaW1hZ2UgYXMgZmFpbGVkLgotICAgICAgICBib29sIGluaXRGcmFtZUJ1ZmZlcih1bnNp
Z25lZCBmcmFtZUluZGV4KTsKKyAgICAgICAgYm9vbCBpbml0RnJhbWVCdWZmZXIoY29uc3QgR0lG
RnJhbWVDb250ZXh0KiwgdW5zaWduZWQgZnJhbWVJbmRleCk7CisKKyAgICAgICAgdm9pZCBleHBh
bmRGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCBzaXplKTsKIAotICAgICAgICBib29sIG1fYWxyZWFk
eVNjYW5uZWRUaGlzRGF0YUZvckZyYW1lQ291bnQ7CiAgICAgICAgIGJvb2wgbV9jdXJyZW50QnVm
ZmVyU2F3QWxwaGE7CiAgICAgICAgIG11dGFibGUgaW50IG1fcmVwZXRpdGlvbkNvdW50OwogICAg
ICAgICBPd25QdHI8R0lGSW1hZ2VSZWFkZXI+IG1fcmVhZGVyOwotICAgICAgICB1bnNpZ25lZCBt
X3JlYWRPZmZzZXQ7CisgICAgICAgIGJvb2wgbV9pc0ZyYW1lQ291bnRGaW5hbDsKKyAgICAgICAg
c2l6ZV90IG1fZnJhbWVDb3VudDsKKyAgICAgICAgc2l6ZV90IG1fbGFzdERhdGFDb21wbGV0ZUZy
YW1lOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFk
ZXIuY3BwCmluZGV4IDc0MTRlOTgxODU5MDdjMGY2ODdiMzdjOTM1MDUzMTkyN2ZmYjg4M2IuLmZm
MWIzNGMwM2RhMjhlMzg4YjY2Y2NjNDM4MzhmMDliOTNmNTExYjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdl
UmVhZGVyLmNwcApAQCAtNzksNiArNzksOCBAQCBtYWlsaW5nIGFkZHJlc3MuCiAjaW5jbHVkZSAi
R0lGSW1hZ2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKIAorI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CisKIHVzaW5nIFdlYkNvcmU6OkdJRkltYWdlRGVjb2RlcjsKIAog
Ly8gRGVmaW5lIHRoZSBNb3ppbGxhIG1hY3JvIHNldHVwIHNvIHRoYXQgd2UgY2FuIGxlYXZlIHRo
ZSBtYWNyb3MgYWxvbmUuCkBAIC04NywzMSArODksMjUgQEAgdXNpbmcgV2ViQ29yZTo6R0lGSW1h
Z2VEZWNvZGVyOwogCiAvKgogICogR0VUTihuLCBzKSByZXF1ZXN0cyBhdCBsZWFzdCAnbicgYnl0
ZXMgYXZhaWxhYmxlIGZyb20gJ3EnLCBhdCBzdGFydCBvZiBzdGF0ZSAncycKLSAqCi0gKiBOb3Rl
LCB0aGUgaG9sZCB3aWxsIG5ldmVyIG5lZWQgdG8gYmUgYmlnZ2VyIHRoYW4gMjU2IGJ5dGVzIHRv
IGdhdGhlciB1cCBpbiB0aGUgaG9sZCwKLSAqIGFzIGVhY2ggR0lGIGJsb2NrIChleGNlcHQgY29s
b3JtYXBzKSBjYW4gbmV2ZXIgYmUgYmlnZ2VyIHRoYW4gMjU2IGJ5dGVzLgotICogQ29sb3JtYXBz
IGFyZSBkaXJlY3RseSBjb3BpZWQgaW4gdGhlIHJlc3AuIGdsb2JhbF9jb2xvcm1hcCBvciBkeW5h
bWljYWxseSBhbGxvY2F0ZWQgbG9jYWxfY29sb3JtYXAuCi0gKiBTbyBhIGZpeGVkIGJ1ZmZlciBp
biBHSUZJbWFnZVJlYWRlciBpcyBnb29kIGVub3VnaC4KLSAqIFRoaXMgYnVmZmVyIGlzIG9ubHkg
bmVlZGVkIHRvIGNvcHkgbGVmdC1vdmVyIGRhdGEgZnJvbSBvbmUgR2lmV3JpdGUgY2FsbCB0byB0
aGUgbmV4dAogICovCiAjZGVmaW5lIEdFVE4obixzKSAgICAgICAgICAgICAgICAgICAgXAogICBQ
Ul9CRUdJTl9NQUNSTyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBieXRlc190b19jb25zdW1l
ID0gKG4pOyAgICAgIFwKLSAgICBzdGF0ZSA9IChzKTsgICAgICAgICAgICAgICAgIFwKKyAgICBt
X2J5dGVzRm9yTmV4dEJsb2NrID0gKG4pOyAgICAgIFwKKyAgICBtX3N0YXRlID0gKHMpOyAgICAg
ICAgICAgICAgICAgXAogICBQUl9FTkRfTUFDUk8KIAogLyogR2V0IGEgMTYtYml0IHZhbHVlIHN0
b3JlZCBpbiBsaXR0bGUtZW5kaWFuIGZvcm1hdCAqLwogI2RlZmluZSBHRVRJTlQxNihwKSAgICgo
cClbMV08PDh8KHApWzBdKQogCituYW1lc3BhY2UgV2ViQ29yZSB7CisKIC8vKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqCiAvLyBTZW5kIHRoZSBkYXRhIHRvIHRoZSBkaXNwbGF5IGZyb250LWVuZC4KLWJv
b2wgR0lGSW1hZ2VSZWFkZXI6Om91dHB1dF9yb3coKQorc3RhdGljIGJvb2wgb3V0cHV0X3JvdyhH
SUZGcmFtZUNvbnRleHQqIGZyYW1lLCB1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIsIHVuc2lnbmVk
IHdpZHRoLCBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXIqIGNsaWVudCkKIHsKLSAgR0lGRnJhbWVS
ZWFkZXIqIGdzID0gZnJhbWVfcmVhZGVyOwotCiAgIGludCBkcm93X3N0YXJ0LCBkcm93X2VuZDsK
IAotICBkcm93X3N0YXJ0ID0gZHJvd19lbmQgPSBncy0+aXJvdzsKKyAgZHJvd19zdGFydCA9IGRy
b3dfZW5kID0gZnJhbWUtPmlyb3c7CiAKICAgLyoKICAgICogSGFlYmVybGktaW5zcGlyZWQgaGFj
ayBmb3IgaW50ZXJsYWNlZCBHSUZzOiBSZXBsaWNhdGUgbGluZXMgd2hpbGUKQEAgLTExOSwxMCAr
MTE1LDEwIEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6Om91dHB1dF9yb3coKQogICAgKiBsb2FkZWQu
IEFkanVzdCBwaXhlbCB2ZXJ0aWNhbCBwb3NpdGlvbnMgdG8gYXZvaWQgdGhlIGFwcGVhcmFuY2Ug
b2YgdGhlCiAgICAqIGltYWdlIGNyYXdsaW5nIHVwIHRoZSBzY3JlZW4gYXMgc3VjY2Vzc2l2ZSBw
YXNzZXMgYXJlIGRyYXduLgogICAgKi8KLSAgaWYgKGdzLT5wcm9ncmVzc2l2ZV9kaXNwbGF5ICYm
IGdzLT5pbnRlcmxhY2VkICYmIGdzLT5pcGFzcyA8IDQpIHsKKyAgaWYgKGZyYW1lLT5wcm9ncmVz
c2l2ZURpc3BsYXkgJiYgZnJhbWUtPmludGVybGFjZWQgJiYgZnJhbWUtPmlwYXNzIDwgNCkgewog
ICAgIHVuc2lnbmVkIHJvd19kdXAgPSAwLCByb3dfc2hpZnQgPSAwOwogCi0gICAgc3dpdGNoIChn
cy0+aXBhc3MpIHsKKyAgICBzd2l0Y2ggKGZyYW1lLT5pcGFzcykgewogICAgIGNhc2UgMToKICAg
ICAgIHJvd19kdXAgPSA3OwogICAgICAgcm93X3NoaWZ0ID0gMzsKQEAgLTE0Myw3MSArMTM5LDcy
IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6Om91dHB1dF9yb3coKQogICAgIGRyb3dfZW5kID0gZHJv
d19zdGFydCArIHJvd19kdXA7CiAKICAgICAvKiBFeHRlbmQgaWYgYm90dG9tIGVkZ2UgaXNuJ3Qg
Y292ZXJlZCBiZWNhdXNlIG9mIHRoZSBzaGlmdCB1cHdhcmQuICovCi0gICAgaWYgKCgoZ3MtPmhl
aWdodCAtIDEpIC0gZHJvd19lbmQpIDw9IHJvd19zaGlmdCkKLSAgICAgIGRyb3dfZW5kID0gZ3Mt
PmhlaWdodCAtIDE7CisgICAgaWYgKCgoZnJhbWUtPmhlaWdodCAtIDEpIC0gZHJvd19lbmQpIDw9
IHJvd19zaGlmdCkKKyAgICAgIGRyb3dfZW5kID0gZnJhbWUtPmhlaWdodCAtIDE7CiAKICAgICAv
KiBDbGFtcCBmaXJzdCBhbmQgbGFzdCByb3dzIHRvIHVwcGVyIGFuZCBsb3dlciBlZGdlIG9mIGlt
YWdlLiAqLwogICAgIGlmIChkcm93X3N0YXJ0IDwgMCkKICAgICAgIGRyb3dfc3RhcnQgPSAwOwot
ICAgIGlmICgodW5zaWduZWQpZHJvd19lbmQgPj0gZ3MtPmhlaWdodCkKLSAgICAgIGRyb3dfZW5k
ID0gZ3MtPmhlaWdodCAtIDE7CisgICAgaWYgKCh1bnNpZ25lZClkcm93X2VuZCA+PSBmcmFtZS0+
aGVpZ2h0KQorICAgICAgZHJvd19lbmQgPSBmcmFtZS0+aGVpZ2h0IC0gMTsKICAgfQogCiAgIC8q
IFByb3RlY3QgYWdhaW5zdCB0b28gbXVjaCBpbWFnZSBkYXRhICovCi0gIGlmICgodW5zaWduZWQp
ZHJvd19zdGFydCA+PSBncy0+aGVpZ2h0KQorICBpZiAoKHVuc2lnbmVkKWRyb3dfc3RhcnQgPj0g
ZnJhbWUtPmhlaWdodCkKICAgICByZXR1cm4gdHJ1ZTsKIAogICAvLyBDQUxMQkFDSzogTGV0IHRo
ZSBjbGllbnQga25vdyB3ZSBoYXZlIGRlY29kZWQgYSByb3cuCi0gIGlmIChjbGllbnRwdHIgJiYg
ZnJhbWVfcmVhZGVyICYmCi0gICAgICAhY2xpZW50cHRyLT5oYXZlRGVjb2RlZFJvdyhpbWFnZXNf
Y291bnQgLSAxLCBmcmFtZV9yZWFkZXItPnJvd2J1ZiwgZnJhbWVfcmVhZGVyLT5yb3dlbmQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcm93X3N0YXJ0LCBkcm93X2VuZCAtIGRy
b3dfc3RhcnQgKyAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3MtPnByb2dy
ZXNzaXZlX2Rpc3BsYXkgJiYgZ3MtPmludGVybGFjZWQgJiYgZ3MtPmlwYXNzID4gMSkpCisgIGlm
IChjbGllbnQgJiYgZnJhbWUgJiYKKyAgICAgICFjbGllbnQtPmhhdmVEZWNvZGVkUm93KGZyYW1l
LCBmcmFtZS0+ZnJhbWVJbmRleCwgcm93QnVmZmVyLCB3aWR0aCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRyb3dfc3RhcnQsIGRyb3dfZW5kIC0gZHJvd19zdGFydCArIDEsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS0+cHJvZ3Jlc3NpdmVEaXNwbGF5ICYmIGZy
YW1lLT5pbnRlcmxhY2VkICYmIGZyYW1lLT5pcGFzcyA+IDEpKQogICAgIHJldHVybiBmYWxzZTsK
IAotICBncy0+cm93cCA9IGdzLT5yb3didWY7CisgIC8vIE1vdmUgdG8gYmVnaW5uaW5nIG9mIHRo
ZSB0ZW1wb3JhcnkgYnVmZmVyLgorICBmcmFtZS0+cm93cCA9IDA7CiAKLSAgaWYgKCFncy0+aW50
ZXJsYWNlZCkKLSAgICBncy0+aXJvdysrOworICBpZiAoIWZyYW1lLT5pbnRlcmxhY2VkKQorICAg
IGZyYW1lLT5pcm93Kys7CiAgIGVsc2UgewogICAgIGRvIHsKLSAgICAgIHN3aXRjaCAoZ3MtPmlw
YXNzKQorICAgICAgc3dpdGNoIChmcmFtZS0+aXBhc3MpCiAgICAgICB7CiAgICAgICAgIGNhc2Ug
MToKLSAgICAgICAgICBncy0+aXJvdyArPSA4OwotICAgICAgICAgIGlmIChncy0+aXJvdyA+PSBn
cy0+aGVpZ2h0KSB7Ci0gICAgICAgICAgICBncy0+aXBhc3MrKzsKLSAgICAgICAgICAgIGdzLT5p
cm93ID0gNDsKKyAgICAgICAgICBmcmFtZS0+aXJvdyArPSA4OworICAgICAgICAgIGlmIChmcmFt
ZS0+aXJvdyA+PSBmcmFtZS0+aGVpZ2h0KSB7CisgICAgICAgICAgICBmcmFtZS0+aXBhc3MrKzsK
KyAgICAgICAgICAgIGZyYW1lLT5pcm93ID0gNDsKICAgICAgICAgICB9CiAgICAgICAgICAgYnJl
YWs7CiAKICAgICAgICAgY2FzZSAyOgotICAgICAgICAgIGdzLT5pcm93ICs9IDg7Ci0gICAgICAg
ICAgaWYgKGdzLT5pcm93ID49IGdzLT5oZWlnaHQpIHsKLSAgICAgICAgICAgIGdzLT5pcGFzcysr
OwotICAgICAgICAgICAgZ3MtPmlyb3cgPSAyOworICAgICAgICAgIGZyYW1lLT5pcm93ICs9IDg7
CisgICAgICAgICAgaWYgKGZyYW1lLT5pcm93ID49IGZyYW1lLT5oZWlnaHQpIHsKKyAgICAgICAg
ICAgIGZyYW1lLT5pcGFzcysrOworICAgICAgICAgICAgZnJhbWUtPmlyb3cgPSAyOwogICAgICAg
ICAgIH0KICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgZ3Mt
Pmlyb3cgKz0gNDsKLSAgICAgICAgICBpZiAoZ3MtPmlyb3cgPj0gZ3MtPmhlaWdodCkgewotICAg
ICAgICAgICAgZ3MtPmlwYXNzKys7Ci0gICAgICAgICAgICBncy0+aXJvdyA9IDE7CisgICAgICAg
ICAgZnJhbWUtPmlyb3cgKz0gNDsKKyAgICAgICAgICBpZiAoZnJhbWUtPmlyb3cgPj0gZnJhbWUt
PmhlaWdodCkgeworICAgICAgICAgICAgZnJhbWUtPmlwYXNzKys7CisgICAgICAgICAgICBmcmFt
ZS0+aXJvdyA9IDE7CiAgICAgICAgICAgfQogICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNh
c2UgNDoKLSAgICAgICAgICBncy0+aXJvdyArPSAyOwotICAgICAgICAgIGlmIChncy0+aXJvdyA+
PSBncy0+aGVpZ2h0KXsKLSAgICAgICAgICAgIGdzLT5pcGFzcysrOwotICAgICAgICAgICAgZ3Mt
Pmlyb3cgPSAwOworICAgICAgICAgIGZyYW1lLT5pcm93ICs9IDI7CisgICAgICAgICAgaWYgKGZy
YW1lLT5pcm93ID49IGZyYW1lLT5oZWlnaHQpeworICAgICAgICAgICAgZnJhbWUtPmlwYXNzKys7
CisgICAgICAgICAgICBmcmFtZS0+aXJvdyA9IDA7CiAgICAgICAgICAgfQogICAgICAgICAgIGJy
ZWFrOwogCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgYnJlYWs7CiAgICAgICB9Ci0gICAg
fSB3aGlsZSAoZ3MtPmlyb3cgPiAoZ3MtPmhlaWdodCAtIDEpKTsKKyAgICB9IHdoaWxlIChmcmFt
ZS0+aXJvdyA+IChmcmFtZS0+aGVpZ2h0IC0gMSkpOwogICB9CiAKICAgcmV0dXJuIHRydWU7CkBA
IC0yMTUsMTAgKzIxMiw5IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6Om91dHB1dF9yb3coKQogCiAv
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKgogLyogUGVyZm9ybSBMZW1wZWwtWml2LVdlbGNoIGRlY29k
aW5nICovCi1ib29sIEdJRkltYWdlUmVhZGVyOjpkb19sencoY29uc3QgdW5zaWduZWQgY2hhciAq
cSkKK3N0YXRpYyBib29sIGRvX2x6dyhjb25zdCB1bnNpZ25lZCBjaGFyICpxLCB1bnNpZ25lZCBi
eXRlc1RvRGVjb2RlLCBHSUZMWldDb250ZXh0KiBsencsIEdJRkZyYW1lQ29udGV4dCogZnJhbWUs
IHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyKiBjbGll
bnQpCiB7Ci0gIEdJRkZyYW1lUmVhZGVyKiBncyA9IGZyYW1lX3JlYWRlcjsKLSAgaWYgKCFncykK
KyAgaWYgKCFmcmFtZSkKICAgICByZXR1cm4gdHJ1ZTsKIAogICBpbnQgY29kZTsKQEAgLTIyOSw0
MCArMjI1LDM1IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRvX2x6dyhjb25zdCB1bnNpZ25lZCBj
aGFyICpxKQogICAgKiB3b24ndCB3b3JyeSBhYm91dCB0aGVtIGJlaW5nIGFsaWFzZWQuICBUaGUg
bG9jYWxzIHdpbGwgYmUgaG9tZWQKICAgICogYmFjayBpbnRvIHRoZSBHSUYgZGVjb2RlciBzdHJ1
Y3R1cmUgd2hlbiB3ZSBleGl0LgogICAgKi8KLSAgaW50IGF2YWlsICAgICAgID0gZ3MtPmF2YWls
OwotICBpbnQgYml0cyAgICAgICAgPSBncy0+Yml0czsKLSAgaW50IGNudCAgICAgICAgID0gY291
bnQ7Ci0gIGludCBjb2Rlc2l6ZSAgICA9IGdzLT5jb2Rlc2l6ZTsKLSAgaW50IGNvZGVtYXNrICAg
ID0gZ3MtPmNvZGVtYXNrOwotICBpbnQgb2xkY29kZSAgICAgPSBncy0+b2xkY29kZTsKLSAgaW50
IGNsZWFyX2NvZGUgID0gZ3MtPmNsZWFyX2NvZGU7Ci0gIHVuc2lnbmVkIGNoYXIgZmlyc3RjaGFy
ID0gZ3MtPmZpcnN0Y2hhcjsKLSAgaW50IGRhdHVtICAgICA9IGdzLT5kYXR1bTsKLQotICBpZiAo
IWdzLT5wcmVmaXgpIHsKLSAgICBncy0+cHJlZml4ID0gbmV3IHVuc2lnbmVkIHNob3J0W01BWF9C
SVRTXTsKLSAgICBtZW1zZXQoZ3MtPnByZWZpeCwgMCwgTUFYX0JJVFMgKiBzaXplb2Yoc2hvcnQp
KTsKLSAgfQotCi0gIHVuc2lnbmVkIHNob3J0ICpwcmVmaXggID0gZ3MtPnByZWZpeDsKLSAgdW5z
aWduZWQgY2hhciAqc3RhY2twICAgPSBncy0+c3RhY2twOwotICB1bnNpZ25lZCBjaGFyICpzdWZm
aXggICA9IGdzLT5zdWZmaXg7Ci0gIHVuc2lnbmVkIGNoYXIgKnN0YWNrICAgID0gZ3MtPnN0YWNr
OwotICB1bnNpZ25lZCBjaGFyICpyb3dwICAgICA9IGdzLT5yb3dwOwotICB1bnNpZ25lZCBjaGFy
ICpyb3dlbmQgICA9IGdzLT5yb3dlbmQ7Ci0gIHVuc2lnbmVkIHJvd3NfcmVtYWluaW5nID0gZ3Mt
PnJvd3NfcmVtYWluaW5nOwotCi0gIGlmIChyb3dwID09IHJvd2VuZCkKKyAgaW50IGF2YWlsICAg
ICAgID0gbHp3LT5hdmFpbDsKKyAgaW50IGJpdHMgICAgICAgID0gbHp3LT5iaXRzOworICBpbnQg
Y250ICAgICAgICAgPSBieXRlc1RvRGVjb2RlOworICBpbnQgY29kZVNpemUgICAgPSBsenctPmNv
ZGVTaXplOworICBpbnQgY29kZU1hc2sgICAgPSBsenctPmNvZGVNYXNrOworICBpbnQgb2xkQ29k
ZSAgICAgPSBsenctPm9sZENvZGU7CisgIGludCBjbGVhckNvZGUgICA9IGx6dy0+Y2xlYXJDb2Rl
OworICB1bnNpZ25lZCBjaGFyIGZpcnN0Q2hhciA9IGx6dy0+Zmlyc3RDaGFyOworICBpbnQgZGF0
dW0gICAgICAgPSBsenctPmRhdHVtOworCisgIFZlY3Rvcjx1bnNpZ25lZCBzaG9ydD4mIHByZWZp
eCA9IGx6dy0+cHJlZml4OworICBWZWN0b3I8dW5zaWduZWQgY2hhcj4mIHN1ZmZpeCAgPSBsenct
PnN1ZmZpeDsKKyAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiBzdGFjayAgID0gbHp3LT5zdGFjazsK
KyAgdW5zaWduZWQgc3RhY2twICAgICAgICAgPSBsenctPnN0YWNrcDsKKyAgdW5zaWduZWQgd2lk
dGggICAgICAgICAgPSBmcmFtZS0+d2lkdGg7CisgIHVuc2lnbmVkIHJvd3AgICAgICAgICAgID0g
ZnJhbWUtPnJvd3A7CisgIHVuc2lnbmVkIHJvd3NSZW1haW5pbmcgID0gZnJhbWUtPnJvd3NSZW1h
aW5pbmc7CisKKyAgaWYgKHJvd3AgPT0gd2lkdGgpCiAgICAgcmV0dXJuIHRydWU7CiAKLSNkZWZp
bmUgT1VUUFVUX1JPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICBQUl9CRUdJTl9NQUNSTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICghb3V0cHV0X3JvdygpKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgcmV0
dXJuIGZhbHNlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIHJvd3NfcmVtYWluaW5nLS07ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHJvd3AgPSBmcmFtZV9yZWFkZXItPnJv
d3A7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICBpZiAoIXJvd3NfcmVtYWluaW5nKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgIGdvdG8gRU5EOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgT1VUUFVUX1JPVyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgUFJfQkVHSU5fTUFDUk8gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoIW91dHB1dF9yb3co
ZnJhbWUsIHJvd0J1ZmZlciwgd2lkdGgsIGNsaWVudCkpIFwKKyAgICAgIHJldHVybiBmYWxzZTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByb3dzUmVtYWluaW5nLS07
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByb3dwID0gZnJhbWUtPnJv
d3A7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoIXJvd3NSZW1haW5p
bmcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGdvdG8gRU5EOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgUFJfRU5EX01BQ1JPCiAKICAg
Zm9yIChjaCA9IHE7IGNudC0tID4gMDsgY2grKykKQEAgLTI3MiwyMTkgKzI2MywyMjEgQEAgYm9v
bCBHSUZJbWFnZVJlYWRlcjo6ZG9fbHp3KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnEpCiAgICAgYml0
cyArPSA4OwogCiAgICAgLyogQ2hlY2sgZm9yIHVuZGVyZmxvdyBvZiBkZWNvZGVyJ3MgMzItYml0
IGlucHV0IGJ1ZmZlci4gKi8KLSAgICB3aGlsZSAoYml0cyA+PSBjb2Rlc2l6ZSkKKyAgICB3aGls
ZSAoYml0cyA+PSBjb2RlU2l6ZSkKICAgICB7CiAgICAgICAvKiBHZXQgdGhlIGxlYWRpbmcgdmFy
aWFibGUtbGVuZ3RoIHN5bWJvbCBmcm9tIHRoZSBkYXRhIHN0cmVhbSAqLwotICAgICAgY29kZSA9
IGRhdHVtICYgY29kZW1hc2s7Ci0gICAgICBkYXR1bSA+Pj0gY29kZXNpemU7Ci0gICAgICBiaXRz
IC09IGNvZGVzaXplOworICAgICAgY29kZSA9IGRhdHVtICYgY29kZU1hc2s7CisgICAgICBkYXR1
bSA+Pj0gY29kZVNpemU7CisgICAgICBiaXRzIC09IGNvZGVTaXplOwogCiAgICAgICAvKiBSZXNl
dCB0aGUgZGljdGlvbmFyeSB0byBpdHMgb3JpZ2luYWwgc3RhdGUsIGlmIHJlcXVlc3RlZCAqLwot
ICAgICAgaWYgKGNvZGUgPT0gY2xlYXJfY29kZSkgewotICAgICAgICBjb2Rlc2l6ZSA9IGdzLT5k
YXRhc2l6ZSArIDE7Ci0gICAgICAgIGNvZGVtYXNrID0gKDEgPDwgY29kZXNpemUpIC0gMTsKLSAg
ICAgICAgYXZhaWwgPSBjbGVhcl9jb2RlICsgMjsKLSAgICAgICAgb2xkY29kZSA9IC0xOworICAg
ICAgaWYgKGNvZGUgPT0gY2xlYXJDb2RlKSB7CisgICAgICAgIGNvZGVTaXplID0gZnJhbWUtPmRh
dGFTaXplICsgMTsKKyAgICAgICAgY29kZU1hc2sgPSAoMSA8PCBjb2RlU2l6ZSkgLSAxOworICAg
ICAgICBhdmFpbCA9IGNsZWFyQ29kZSArIDI7CisgICAgICAgIG9sZENvZGUgPSAtMTsKICAgICAg
ICAgY29udGludWU7CiAgICAgICB9CiAKICAgICAgIC8qIENoZWNrIGZvciBleHBsaWNpdCBlbmQt
b2Ytc3RyZWFtIGNvZGUgKi8KLSAgICAgIGlmIChjb2RlID09IChjbGVhcl9jb2RlICsgMSkpIHsK
KyAgICAgIGlmIChjb2RlID09IChjbGVhckNvZGUgKyAxKSkgewogICAgICAgICAvKiBlbmQtb2Yt
c3RyZWFtIHNob3VsZCBvbmx5IGFwcGVhciBhZnRlciBhbGwgaW1hZ2UgZGF0YSAqLwotICAgICAg
ICBpZiAoIXJvd3NfcmVtYWluaW5nKQorICAgICAgICBpZiAoIXJvd3NSZW1haW5pbmcpCiAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRwdHIt
PnNldEZhaWxlZCgpIDogZmFsc2U7CisgICAgICAgIHJldHVybiBjbGllbnQtPnNldEZhaWxlZCgp
OwogICAgICAgfQogCi0gICAgICBpZiAob2xkY29kZSA9PSAtMSkgewotICAgICAgICAqcm93cCsr
ID0gc3VmZml4W2NvZGVdOwotICAgICAgICBpZiAocm93cCA9PSByb3dlbmQpCisgICAgICBpZiAo
b2xkQ29kZSA9PSAtMSkgeworICAgICAgICByb3dCdWZmZXJbcm93cCsrXSA9IHN1ZmZpeFtjb2Rl
XTsKKyAgICAgICAgaWYgKHJvd3AgPT0gd2lkdGgpCiAgICAgICAgICAgT1VUUFVUX1JPVzsKIAot
ICAgICAgICBmaXJzdGNoYXIgPSBvbGRjb2RlID0gY29kZTsKKyAgICAgICAgZmlyc3RDaGFyID0g
b2xkQ29kZSA9IGNvZGU7CiAgICAgICAgIGNvbnRpbnVlOwogICAgICAgfQogCiAgICAgICBpbmNv
ZGUgPSBjb2RlOwogICAgICAgaWYgKGNvZGUgPj0gYXZhaWwpIHsKLSAgICAgICAgKnN0YWNrcCsr
ID0gZmlyc3RjaGFyOwotICAgICAgICBjb2RlID0gb2xkY29kZTsKKyAgICAgICAgc3RhY2tbc3Rh
Y2twKytdID0gZmlyc3RDaGFyOworICAgICAgICBjb2RlID0gb2xkQ29kZTsKIAotICAgICAgICBp
ZiAoc3RhY2twID09IHN0YWNrICsgTUFYX0JJVFMpCi0gICAgICAgICAgcmV0dXJuIGNsaWVudHB0
ciA/IGNsaWVudHB0ci0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAgICAgaWYgKHN0YWNrcCA9
PSBNQVhfQklUUykKKyAgICAgICAgICByZXR1cm4gY2xpZW50LT5zZXRGYWlsZWQoKTsKICAgICAg
IH0KIAotICAgICAgd2hpbGUgKGNvZGUgPj0gY2xlYXJfY29kZSkKKyAgICAgIHdoaWxlIChjb2Rl
ID49IGNsZWFyQ29kZSkKICAgICAgIHsKICAgICAgICAgaWYgKGNvZGUgPj0gTUFYX0JJVFMgfHwg
Y29kZSA9PSBwcmVmaXhbY29kZV0pCi0gICAgICAgICAgcmV0dXJuIGNsaWVudHB0ciA/IGNsaWVu
dHB0ci0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAgICAgICByZXR1cm4gY2xpZW50LT5zZXRG
YWlsZWQoKTsKIAogICAgICAgICAvLyBFdmVuIHRob3VnaCBzdWZmaXhbXSBvbmx5IGhvbGRzIGNo
YXJhY3RlcnMgdGhyb3VnaCBzdWZmaXhbYXZhaWwgLSAxXSwKICAgICAgICAgLy8gYWxsb3dpbmcg
Y29kZSA+PSBhdmFpbCBoZXJlIGxldHMgdXMgYmUgbW9yZSB0b2xlcmFudCBvZiBtYWxmb3JtZWQK
ICAgICAgICAgLy8gZGF0YS4gQXMgbG9uZyBhcyBjb2RlIDwgTUFYX0JJVFMsIHRoZSBvbmx5IHJp
c2sgaXMgYSBnYXJibGVkIGltYWdlLAogICAgICAgICAvLyB3aGljaCBpcyBubyB3b3JzZSB0aGFu
IHJlZnVzaW5nIHRvIGRpc3BsYXkgaXQuCi0gICAgICAgICpzdGFja3ArKyA9IHN1ZmZpeFtjb2Rl
XTsKKyAgICAgICAgc3RhY2tbc3RhY2twKytdID0gc3VmZml4W2NvZGVdOwogICAgICAgICBjb2Rl
ID0gcHJlZml4W2NvZGVdOwogCi0gICAgICAgIGlmIChzdGFja3AgPT0gc3RhY2sgKyBNQVhfQklU
UykKLSAgICAgICAgICByZXR1cm4gY2xpZW50cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQoKSA6
IGZhbHNlOworICAgICAgICBpZiAoc3RhY2twID09IE1BWF9CSVRTKQorICAgICAgICAgIHJldHVy
biBjbGllbnQtPnNldEZhaWxlZCgpOwogICAgICAgfQogCi0gICAgICAqc3RhY2twKysgPSBmaXJz
dGNoYXIgPSBzdWZmaXhbY29kZV07CisgICAgICBzdGFja1tzdGFja3ArK10gPSBmaXJzdENoYXIg
PSBzdWZmaXhbY29kZV07CiAKICAgICAgIC8qIERlZmluZSBhIG5ldyBjb2Rld29yZCBpbiB0aGUg
ZGljdGlvbmFyeS4gKi8KICAgICAgIGlmIChhdmFpbCA8IDQwOTYpIHsKLSAgICAgICAgcHJlZml4
W2F2YWlsXSA9IG9sZGNvZGU7Ci0gICAgICAgIHN1ZmZpeFthdmFpbF0gPSBmaXJzdGNoYXI7Cisg
ICAgICAgIHByZWZpeFthdmFpbF0gPSBvbGRDb2RlOworICAgICAgICBzdWZmaXhbYXZhaWxdID0g
Zmlyc3RDaGFyOwogICAgICAgICBhdmFpbCsrOwogCiAgICAgICAgIC8qIElmIHdlJ3ZlIHVzZWQg
dXAgYWxsIHRoZSBjb2Rld29yZHMgb2YgYSBnaXZlbiBsZW5ndGgKICAgICAgICAgICogaW5jcmVh
c2UgdGhlIGxlbmd0aCBvZiBjb2Rld29yZHMgYnkgb25lIGJpdCwgYnV0IGRvbid0CiAgICAgICAg
ICAqIGV4Y2VlZCB0aGUgc3BlY2lmaWVkIG1heGltdW0gY29kZXdvcmQgc2l6ZSBvZiAxMiBiaXRz
LgogICAgICAgICAgKi8KLSAgICAgICAgaWYgKCgoYXZhaWwgJiBjb2RlbWFzaykgPT0gMCkgJiYg
KGF2YWlsIDwgNDA5NikpIHsKLSAgICAgICAgICBjb2Rlc2l6ZSsrOwotICAgICAgICAgIGNvZGVt
YXNrICs9IGF2YWlsOworICAgICAgICBpZiAoKChhdmFpbCAmIGNvZGVNYXNrKSA9PSAwKSAmJiAo
YXZhaWwgPCA0MDk2KSkgeworICAgICAgICAgIGNvZGVTaXplKys7CisgICAgICAgICAgY29kZU1h
c2sgKz0gYXZhaWw7CiAgICAgICAgIH0KICAgICAgIH0KLSAgICAgIG9sZGNvZGUgPSBpbmNvZGU7
CisgICAgICBvbGRDb2RlID0gaW5jb2RlOwogCi0gICAgICAgIC8qIENvcHkgdGhlIGRlY29kZWQg
ZGF0YSBvdXQgdG8gdGhlIHNjYW5saW5lIGJ1ZmZlci4gKi8KKyAgICAgIC8qIENvcHkgdGhlIGRl
Y29kZWQgZGF0YSBvdXQgdG8gdGhlIHNjYW5saW5lIGJ1ZmZlci4gKi8KICAgICAgIGRvIHsKLSAg
ICAgICAgKnJvd3ArKyA9ICotLXN0YWNrcDsKLSAgICAgICAgaWYgKHJvd3AgPT0gcm93ZW5kKSB7
CisgICAgICAgIHJvd0J1ZmZlcltyb3dwKytdID0gc3RhY2tbLS1zdGFja3BdOworICAgICAgICBp
ZiAocm93cCA9PSB3aWR0aCkgewogICAgICAgICAgIE9VVFBVVF9ST1c7CiAgICAgICAgIH0KLSAg
ICAgIH0gd2hpbGUgKHN0YWNrcCA+IHN0YWNrKTsKKyAgICAgIH0gd2hpbGUgKHN0YWNrcCA+IDAp
OwogICAgIH0KICAgfQogCiAgIEVORDoKIAogICAvKiBIb21lIHRoZSBsb2NhbCBjb3BpZXMgb2Yg
dGhlIEdJRiBkZWNvZGVyIHN0YXRlIHZhcmlhYmxlcyAqLwotICBncy0+YXZhaWwgPSBhdmFpbDsK
LSAgZ3MtPmJpdHMgPSBiaXRzOwotICBncy0+Y29kZXNpemUgPSBjb2Rlc2l6ZTsKLSAgZ3MtPmNv
ZGVtYXNrID0gY29kZW1hc2s7Ci0gIGNvdW50ID0gY250OwotICBncy0+b2xkY29kZSA9IG9sZGNv
ZGU7Ci0gIGdzLT5maXJzdGNoYXIgPSBmaXJzdGNoYXI7Ci0gIGdzLT5kYXR1bSA9IGRhdHVtOwot
ICBncy0+c3RhY2twID0gc3RhY2twOwotICBncy0+cm93cCA9IHJvd3A7Ci0gIGdzLT5yb3dzX3Jl
bWFpbmluZyA9IHJvd3NfcmVtYWluaW5nOworICBsenctPmF2YWlsID0gYXZhaWw7CisgIGx6dy0+
Yml0cyA9IGJpdHM7CisgIGx6dy0+Y29kZVNpemUgPSBjb2RlU2l6ZTsKKyAgbHp3LT5jb2RlTWFz
ayA9IGNvZGVNYXNrOworICBsenctPm9sZENvZGUgPSBvbGRDb2RlOworICBsenctPmZpcnN0Q2hh
ciA9IGZpcnN0Q2hhcjsKKyAgbHp3LT5kYXR1bSA9IGRhdHVtOworICBsenctPnN0YWNrcCA9IHN0
YWNrcDsKKyAgZnJhbWUtPnJvd3AgPSByb3dwOworICBmcmFtZS0+cm93c1JlbWFpbmluZyA9IHJv
d3NSZW1haW5pbmc7CiAKICAgcmV0dXJuIHRydWU7CiB9CiAKK0dJRkltYWdlUmVhZGVyOjpHSUZJ
bWFnZVJlYWRlcihHSUZJbWFnZURlY29kZXIqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVu
dCkKKyAgICAsIG1fc3RhdGUoZ2lmX3R5cGUpCisgICAgLCBtX2J5dGVzRm9yTmV4dEJsb2NrKDYp
ICAvLyBCeXRlcyB0byByZWFkIHRoZSBpbWFnZSBpZGVudGlmaWVyIGFuZCB2ZXJzaW9uLgorICAg
ICwgbV9ieXRlc1JlYWQoMCkKKyAgICAsIG1fc2NyZWVuQmdDb2xvcigwKQorICAgICwgbV92ZXJz
aW9uKDApCisgICAgLCBtX3NjcmVlbldpZHRoKDApCisgICAgLCBtX3NjcmVlbkhlaWdodCgwKQor
ICAgICwgbV9nbG9iYWxDb2xvck1hcFNpemUoMCkKKyAgICAsIG1fZ2xvYmFsQ29sb3JNYXBQb3Np
dGlvbigwKQorICAgICwgbV9pbWFnZXNEYXRhQ29tcGxldGUoMCkKKyAgICAsIG1faW1hZ2VzQ291
bnQoMCkKKyAgICAsIG1fbG9vcENvdW50KGNMb29wQ291bnROb3RTZWVuKQorICAgICwgbV9pbWFn
ZUNvbXBsZXRlKGZhbHNlKQoreworfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAq
IHByb2Nlc3MgZGF0YSBhcnJpdmluZyBmcm9tIHRoZSBzdHJlYW0gZm9yIHRoZSBnaWYgZGVjb2Rl
cgotICovCitib29sIEdJRkltYWdlUmVhZGVyOjpkZWNvZGUoR0lGSW1hZ2VEZWNvZGVyOjpHSUZR
dWVyeSBxdWVyeSwgaW50IGhhbHRBdEZyYW1lKQoreworICAgIGlmIChtX2J5dGVzUmVhZCA+IG1f
ZGF0YS0+c2l6ZSgpKQorICAgICAgICByZXR1cm4gbV9jbGllbnQtPnNldEZhaWxlZCgpOworCisg
ICAgaWYgKHF1ZXJ5ID09IEdJRkltYWdlRGVjb2Rlcjo6R0lGRnVsbFF1ZXJ5KSB7CisgICAgICAg
IHdoaWxlICghbV9wcmV2aW91c0ZyYW1lcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIEdJRkZy
YW1lQ29udGV4dCogZnJhbWUgPSBtX3ByZXZpb3VzRnJhbWVzLmZpcnN0KCkuZ2V0KCk7CisgICAg
ICAgICAgICBpZiAoZnJhbWUtPmZyYW1lSW5kZXggPj0gaGFsdEF0RnJhbWUpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFRoZXNlIGNh
bGxzIGFscmVhZHkgZG9lcyBtX2NsaWVudC0+c2V0RmFpbGVkKCkgaWYgZmFpbHMuCisgICAgICAg
ICAgICBpZiAoIWRlY29kZVByZXZpb3VzTFpXQmxvY2tzKGZyYW1lKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIW1fY2xpZW50LT5mcmFtZUNvbXBsZXRl
KGZyYW1lLCBmcmFtZS0+ZnJhbWVJbmRleCwgZnJhbWUtPmRlbGF5VGltZSwgZnJhbWUtPmRpc3Bv
c2FsTWV0aG9kKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBt
X3ByZXZpb3VzRnJhbWVzLnJlbW92ZUZpcnN0KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
bV9jdXJyZW50RnJhbWUgJiYgbV9jdXJyZW50RnJhbWUtPmZyYW1lSW5kZXggPCBoYWx0QXRGcmFt
ZSAmJiAhZGVjb2RlUHJldmlvdXNMWldCbG9ja3MobV9jdXJyZW50RnJhbWUuZ2V0KCkpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChtX2ltYWdlQ29tcGxldGUgJiYg
bV9wcmV2aW91c0ZyYW1lcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fY2xpZW50LT5naWZD
b21wbGV0ZSgpOyAvLyBXaGVuIHRoZSBHSUYgaXMgZG9uZSwgd2UgY2FuIHN0b3AuCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBkZWNvZGUo
bV9ieXRlc1JlYWQsIG1fZGF0YS0+c2l6ZSgpIC0gbV9ieXRlc1JlYWQsIHF1ZXJ5LCBoYWx0QXRG
cmFtZSk7Cit9CisKK2NvbnN0IHVuc2lnbmVkIGNoYXIqIEdJRkltYWdlUmVhZGVyOjpnbG9iYWxD
b2xvck1hcCgpIGNvbnN0Cit7CisgICAgaWYgKG1fZ2xvYmFsQ29sb3JNYXBQb3NpdGlvbiArIG1f
Z2xvYmFsQ29sb3JNYXBTaXplICogMyA+IG1fZGF0YS0+c2l6ZSgpKQorICAgICAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gZGF0YSgpICsgbV9nbG9iYWxDb2xvck1hcFBvc2l0aW9uOworfQorCitj
b25zdCB1bnNpZ25lZCBjaGFyKiBHSUZJbWFnZVJlYWRlcjo6bG9jYWxDb2xvck1hcChjb25zdCBH
SUZGcmFtZUNvbnRleHQqIGZyYW1lKSBjb25zdAoreworICAgIGlmIChmcmFtZS0+bG9jYWxDb2xv
ck1hcFBvc2l0aW9uICsgZnJhbWUtPmxvY2FsQ29sb3JNYXBTaXplICogMyA+IG1fZGF0YS0+c2l6
ZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZGF0YSgpICsgZnJhbWUtPmxvY2Fs
Q29sb3JNYXBQb3NpdGlvbjsKK30KIAotYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1
bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwgCi0gICAgICAgICAgICAgICAgICAgICBH
SUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5IHF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSkKKy8v
IFByb2Nlc3MgZGF0YSBhcnJpdmluZyBmcm9tIHRoZSBzdHJlYW0gZm9yIHRoZSBnaWYgZGVjb2Rl
ci4KK2Jvb2wgR0lGSW1hZ2VSZWFkZXI6OmRlY29kZSh1bnNpZ25lZCBkYXRhUG9zaXRpb24sIHVu
c2lnbmVkIGJ5dGVzVG9EZWNvZGUsIEdJRkltYWdlRGVjb2Rlcjo6R0lGUXVlcnkgcXVlcnksIGlu
dCBoYWx0QXRGcmFtZSkKIHsKLSAgaWYgKCFsZW4pIHsKLSAgICAvLyBObyBuZXcgZGF0YSBoYXMg
Y29tZSBpbiBzaW5jZSB0aGUgbGFzdCBjYWxsLCBqdXN0IGlnbm9yZSB0aGlzIGNhbGwuCisgIC8v
IE5vIG5ldyBkYXRhIGhhcyBjb21lIGluIHNpbmNlIHRoZSBsYXN0IGNhbGwsIGp1c3QgaWdub3Jl
IHRoaXMgY2FsbC4KKyAgaWYgKCFieXRlc1RvRGVjb2RlKQogICAgIHJldHVybiB0cnVlOwotICB9
CiAKLSAgY29uc3QgdW5zaWduZWQgY2hhciAqcSA9IGJ1ZjsKLQotICAvLyBBZGQgd2hhdCB3ZSBo
YXZlIHNvIGZhciB0byB0aGUgYmxvY2sKLSAgLy8gSWYgcHJldmlvdXMgY2FsbCB0byBtZSBsZWZ0
IHNvbWV0aGluZyBpbiB0aGUgaG9sZCBmaXJzdCBjb21wbGV0ZSBjdXJyZW50IGJsb2NrCi0gIC8v
IE9yIGlmIHdlIGFyZSBmaWxsaW5nIHRoZSBjb2xvcm1hcHMsIGZpcnN0IGNvbXBsZXRlIHRoZSBj
b2xvcm1hcAotICB1bnNpZ25lZCBjaGFyKiBwID0gMDsKLSAgaWYgKHN0YXRlID09IGdpZl9nbG9i
YWxfY29sb3JtYXApCi0gICAgcCA9IGdsb2JhbF9jb2xvcm1hcDsKLSAgZWxzZSBpZiAoc3RhdGUg
PT0gZ2lmX2ltYWdlX2NvbG9ybWFwKQotICAgIHAgPSBmcmFtZV9yZWFkZXIgPyBmcmFtZV9yZWFk
ZXItPmxvY2FsX2NvbG9ybWFwIDogMDsKLSAgZWxzZSBpZiAoYnl0ZXNfaW5faG9sZCkKLSAgICBw
ID0gaG9sZDsKLSAgZWxzZQotICAgIHAgPSAwOwotCi0gIGlmIChwIHx8IChzdGF0ZSA9PSBnaWZf
Z2xvYmFsX2NvbG9ybWFwKSB8fCAoc3RhdGUgPT0gZ2lmX2ltYWdlX2NvbG9ybWFwKSkgewotICAg
IC8vIEFkZCB3aGF0IHdlIGhhdmUgc29mYXIgdG8gdGhlIGJsb2NrCi0gICAgdW5zaWduZWQgbCA9
IGxlbiA8IGJ5dGVzX3RvX2NvbnN1bWUgPyBsZW4gOiBieXRlc190b19jb25zdW1lOwotICAgIGlm
IChwKQotICAgICAgICBtZW1jcHkocCArIGJ5dGVzX2luX2hvbGQsIGJ1ZiwgbCk7Ci0KLSAgICBp
ZiAobCA8IGJ5dGVzX3RvX2NvbnN1bWUpIHsKLSAgICAgIC8vIE5vdCBlbm91Z2ggaW4gJ2J1Zicg
dG8gY29tcGxldGUgY3VycmVudCBibG9jaywgZ2V0IG1vcmUKLSAgICAgIGJ5dGVzX2luX2hvbGQg
Kz0gbDsKLSAgICAgIGJ5dGVzX3RvX2NvbnN1bWUgLT0gbDsKLSAgICAgIGlmIChjbGllbnRwdHIp
Ci0gICAgICAgIGNsaWVudHB0ci0+ZGVjb2RpbmdIYWx0ZWQoMCk7Ci0gICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIC8vIFJlc2V0IGhvbGQgYnVmZmVyIGNvdW50Ci0gICAgYnl0ZXNfaW5f
aG9sZCA9IDA7Ci0gICAgLy8gUG9pbnQgJ3EnIHRvIGNvbXBsZXRlIGJsb2NrIGluIGhvbGQgKG9y
IGluIGNvbG9ybWFwKQotICAgIHEgPSBwOworICBjb25zdCB1bnNpZ25lZCBjaGFyICpxID0gZGF0
YSgpICsgZGF0YVBvc2l0aW9uOworCisgIC8vIElmIHRoZXJlJ3Mgbm90IGVub3VnaCBieXRlcyBm
b3IgdGhpcyBibG9jayB0aGVuIHJldHVybi4KKyAgaWYgKGJ5dGVzVG9EZWNvZGUgPCBtX2J5dGVz
Rm9yTmV4dEJsb2NrKSB7CisgICAgc2V0UmVtYWluaW5nQnl0ZXMoYnl0ZXNUb0RlY29kZSk7Cisg
ICAgcmV0dXJuIGZhbHNlOwogICB9CiAKICAgLy8gSW52YXJpYW50OgotICAvLyAgICAncScgaXMg
c3RhcnQgb2YgY3VycmVudCB0byBiZSBwcm9jZXNzZWQgYmxvY2sgKGhvbGQsIGNvbG9ybWFwIG9y
IGJ1ZikKLSAgLy8gICAgJ2J5dGVzX3RvX2NvbnN1bWUnIGlzIG51bWJlciBvZiBieXRlcyB0byBj
b25zdW1lIGZyb20gJ2J1ZicKLSAgLy8gICAgJ2J1ZicgcG9pbnRzIHRvIHRoZSBieXRlcyB0byBi
ZSBjb25zdW1lZCBmcm9tIHRoZSBpbnB1dCBidWZmZXIKLSAgLy8gICAgJ2xlbicgaXMgbnVtYmVy
IG9mIGJ5dGVzIGxlZnQgaW4gaW5wdXQgYnVmZmVyIGZyb20gcG9zaXRpb24gJ2J1ZicuCi0gIC8v
ICAgIEF0IGVudHJhbmNlIG9mIHRoZSBmb3IgbG9vcCB3aWxsICdidWYnIHdpbGwgYmUgbW92ZWQg
J2J5dGVzX3RvX2NvbnN1bWUnCi0gIC8vICAgIHRvIHBvaW50IHRvIG5leHQgYnVmZmVyLCAnbGVu
JyBpcyBhZGp1c3RlZCBhY2NvcmRpbmdseS4KLSAgLy8gICAgU28gdGhhdCBuZXh0IHJvdW5kIGlu
IGZvciBsb29wLCBxIGdldHMgcG9pbnRlZCB0byB0aGUgbmV4dCBidWZmZXIuCi0KLSAgZm9yICg7
bGVuID49IGJ5dGVzX3RvX2NvbnN1bWU7IHE9YnVmKSB7CisgIC8vICAgICdxJyBpcyBzdGFydCBv
ZiBjdXJyZW50IHRvIGJlIHByb2Nlc3NlZCBibG9jay4KKyAgLy8gICAgJ21fYnl0ZXNGb3JOZXh0
QmxvY2snIGlzIG51bWJlciBvZiBieXRlcyB0byBjb25zdW1lIGZyb20gJ2RhdGEnCisgIC8vICAg
ICdkYXRhUG9zaXRpb24nIHBvaW50cyB0byB0aGUgZmlyc3QgYnl0ZSB0byBiZSBjb25zdW1lZCBm
cm9tICdkYXRhJworICAvLyAgICAnYnl0ZXNUb0RlY29kZScgaXMgbnVtYmVyIG9mIGJ5dGVzIGxl
ZnQgaW4gaW5wdXQgYnVmZmVyIGZyb20gcG9zaXRpb24gJ2RhdGFQb3NpdGlvbicuCisgIC8vICAg
IEF0IGVudHJhbmNlIG9mIHRoZSBmb3IgbG9vcCAnZGF0YVBvc2l0aW9uJyB3aWxsIGJlIGluY3Jl
bWVudGVkICdtX2J5dGVzRm9yTmV4dEJsb2NrJworICAvLyAgICB0byBwb2ludCB0byBuZXh0IGJs
b2NrLCAnYnl0ZXNUb0RlY29kZScgaXMgYWRqdXN0ZWQgYWNjb3JkaW5nbHkuCisgIC8vICAgIFNv
IHRoYXQgbmV4dCByb3VuZCBpbiBmb3IgbG9vcCwgcSBnZXRzIHBvaW50ZWQgdG8gdGhlIG5leHQg
YmxvY2suCisKKyAgZm9yICg7Ynl0ZXNUb0RlY29kZSA+PSBtX2J5dGVzRm9yTmV4dEJsb2NrOyBx
ID0gZGF0YSgpICsgZGF0YVBvc2l0aW9uKSB7CiAgICAgLy8gRWF0IHRoZSBjdXJyZW50IGJsb2Nr
IGZyb20gdGhlIGJ1ZmZlciwgcSBrZWVwcyBwb2ludGVkIGF0IGN1cnJlbnQgYmxvY2sKLSAgICBi
dWYgKz0gYnl0ZXNfdG9fY29uc3VtZTsKLSAgICBsZW4gLT0gYnl0ZXNfdG9fY29uc3VtZTsKKyAg
ICBkYXRhUG9zaXRpb24gKz0gbV9ieXRlc0Zvck5leHRCbG9jazsKKyAgICBieXRlc1RvRGVjb2Rl
IC09IG1fYnl0ZXNGb3JOZXh0QmxvY2s7CiAKLSAgICBzd2l0Y2ggKHN0YXRlKQorICAgIHN3aXRj
aCAobV9zdGF0ZSkKICAgICB7CiAgICAgY2FzZSBnaWZfbHp3OgotICAgICAgaWYgKCFkb19senco
cSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gSWYgZG9fbHp3KCkgZW5jb3VudGVyZWQgYW4g
ZXJyb3IsIGl0IGhhcyBhbHJlYWR5IGNhbGxlZAotICAgICAgICAgICAgICAgICAgICAgIC8vIGNs
aWVudHB0ci0+c2V0RmFpbGVkKCkuCisgICAgeworICAgICAgdW5zaWduZWQgYmxvY2tQb3NpdGlv
biA9IGRhdGFQb3NpdGlvbiAtIG1fYnl0ZXNGb3JOZXh0QmxvY2s7CisgICAgICBpZiAocXVlcnkg
PT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZGdWxsUXVlcnkpIHsKKyAgICAgICAgaWYgKCFkZWNvZGVM
WldCbG9jayhibG9ja1Bvc2l0aW9uLCBtX2J5dGVzRm9yTmV4dEJsb2NrLCBtX2N1cnJlbnRGcmFt
ZS5nZXQoKSkpCisgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgZGVmZXJMWldCbG9jayhibG9ja1Bvc2l0aW9uLCBtX2J5dGVzRm9yTmV4dEJsb2NrLCBtX2N1
cnJlbnRGcmFtZS5nZXQoKSk7CisgICAgICB9CiAgICAgICBHRVROKDEsIGdpZl9zdWJfYmxvY2sp
OwogICAgICAgYnJlYWs7CisgICAgfQogCiAgICAgY2FzZSBnaWZfbHp3X3N0YXJ0OgogICAgIHsK
LSAgICAgIC8qIEluaXRpYWxpemUgTFpXIHBhcnNlci9kZWNvZGVyICovCi0gICAgICBpbnQgZGF0
YXNpemUgPSAqcTsKLSAgICAgIC8vIFNpbmNlIHdlIHVzZSBhIGNvZGVzaXplIG9mIDEgbW9yZSB0
aGFuIHRoZSBkYXRhc2l6ZSwgd2UgbmVlZCB0byBlbnN1cmUKLSAgICAgIC8vIHRoYXQgb3VyIGRh
dGFzaXplIGlzIHN0cmljdGx5IGxlc3MgdGhhbiB0aGUgTUFYX0xaV19CSVRTIHZhbHVlICgxMiku
Ci0gICAgICAvLyBUaGlzIHNldHMgdGhlIGxhcmdlc3QgcG9zc2libGUgY29kZW1hc2sgY29ycmVj
dGx5IGF0IDQwOTUuCi0gICAgICBpZiAoZGF0YXNpemUgPj0gTUFYX0xaV19CSVRTKQotICAgICAg
ICByZXR1cm4gY2xpZW50cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQoKSA6IGZhbHNlOwotICAg
ICAgaW50IGNsZWFyX2NvZGUgPSAxIDw8IGRhdGFzaXplOwotICAgICAgaWYgKGNsZWFyX2NvZGUg
Pj0gTUFYX0JJVFMpCi0gICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRwdHItPnNldEZh
aWxlZCgpIDogZmFsc2U7Ci0KLSAgICAgIGlmIChmcmFtZV9yZWFkZXIpIHsKLSAgICAgICAgZnJh
bWVfcmVhZGVyLT5kYXRhc2l6ZSA9IGRhdGFzaXplOwotICAgICAgICBmcmFtZV9yZWFkZXItPmNs
ZWFyX2NvZGUgPSBjbGVhcl9jb2RlOwotICAgICAgICBmcmFtZV9yZWFkZXItPmF2YWlsID0gZnJh
bWVfcmVhZGVyLT5jbGVhcl9jb2RlICsgMjsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT5vbGRjb2Rl
ID0gLTE7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+Y29kZXNpemUgPSBmcmFtZV9yZWFkZXItPmRh
dGFzaXplICsgMTsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT5jb2RlbWFzayA9ICgxIDw8IGZyYW1l
X3JlYWRlci0+Y29kZXNpemUpIC0gMTsKLQotICAgICAgICBmcmFtZV9yZWFkZXItPmRhdHVtID0g
ZnJhbWVfcmVhZGVyLT5iaXRzID0gMDsKLQotICAgICAgICAvKiBpbml0IHRoZSB0YWJsZXMgKi8K
LSAgICAgICAgaWYgKCFmcmFtZV9yZWFkZXItPnN1ZmZpeCkKLSAgICAgICAgICBmcmFtZV9yZWFk
ZXItPnN1ZmZpeCA9IG5ldyB1bnNpZ25lZCBjaGFyW01BWF9CSVRTXTsKLSAgICAgICAgLy8gQ2xl
YXJpbmcgdGhlIHdob2xlIHN1ZmZpeCB0YWJsZSBsZXRzIHVzIGJlIG1vcmUgdG9sZXJhbnQgb2Yg
YmFkIGRhdGEuCi0gICAgICAgIG1lbXNldChmcmFtZV9yZWFkZXItPnN1ZmZpeCwgMCwgTUFYX0JJ
VFMpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYW1lX3JlYWRlci0+Y2xlYXJfY29k
ZTsgaSsrKQotICAgICAgICAgIGZyYW1lX3JlYWRlci0+c3VmZml4W2ldID0gaTsKLQotICAgICAg
ICBpZiAoIWZyYW1lX3JlYWRlci0+c3RhY2spCi0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5zdGFj
ayA9IG5ldyB1bnNpZ25lZCBjaGFyW01BWF9CSVRTXTsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT5z
dGFja3AgPSBmcmFtZV9yZWFkZXItPnN0YWNrOwotICAgICAgfQotCisgICAgICAvLyBPbmx5IHNh
dmUgdGhlIGRhdGFTaXplLCBMWlcgY29udGV4dCBpcyBpbml0aWFsaXplZCB3aGVuIGRlY29kZSBz
dGFydHMuCisgICAgICBtX2N1cnJlbnRGcmFtZS0+ZGF0YVNpemUgPSAqcTsKICAgICAgIEdFVE4o
MSwgZ2lmX3N1Yl9ibG9jayk7CiAgICAgfQogICAgIGJyZWFrOwpAQCAtNDkzLDExICs0ODYsMTEg
QEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVu
c2lnbmVkIGxlbiwKICAgICBjYXNlIGdpZl90eXBlOgogICAgIHsKICAgICAgIGlmICghc3RybmNt
cCgoY2hhciopcSwgIkdJRjg5YSIsIDYpKQotICAgICAgICB2ZXJzaW9uID0gODk7CisgICAgICAg
IG1fdmVyc2lvbiA9IDg5OwogICAgICAgZWxzZSBpZiAoIXN0cm5jbXAoKGNoYXIqKXEsICJHSUY4
N2EiLCA2KSkKLSAgICAgICAgdmVyc2lvbiA9IDg3OworICAgICAgICBtX3ZlcnNpb24gPSA4NzsK
ICAgICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGNsaWVudHB0ciA/IGNsaWVudHB0ci0+c2V0RmFp
bGVkKCkgOiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG1fY2xpZW50LT5zZXRGYWlsZWQoKTsKICAg
ICAgIEdFVE4oNywgZ2lmX2dsb2JhbF9oZWFkZXIpOwogICAgIH0KICAgICBicmVhazsKQEAgLTUx
MSwzNSArNTA0LDI5IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQg
Y2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sCiAgICAgICAgKiB3aXRoaW4gdGhlIHNjcmVlbi4KICAg
ICAgICAqLwogCi0gICAgICBzY3JlZW5fd2lkdGggPSBHRVRJTlQxNihxKTsKLSAgICAgIHNjcmVl
bl9oZWlnaHQgPSBHRVRJTlQxNihxICsgMik7CisgICAgICBtX3NjcmVlbldpZHRoID0gR0VUSU5U
MTYocSk7CisgICAgICBtX3NjcmVlbkhlaWdodCA9IEdFVElOVDE2KHEgKyAyKTsKIAogICAgICAg
Ly8gQ0FMTEJBQ0s6IEluZm9ybSB0aGUgZGVjb2RlcnBsdWdpbiBvZiBvdXIgc2l6ZS4KLSAgICAg
IGlmIChjbGllbnRwdHIgJiYgIWNsaWVudHB0ci0+c2V0U2l6ZShzY3JlZW5fd2lkdGgsIHNjcmVl
bl9oZWlnaHQpKQorICAgICAgaWYgKCFtX2NsaWVudC0+c2V0U2l6ZShtX3NjcmVlbldpZHRoLCBt
X3NjcmVlbkhlaWdodCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIAotICAgICAgc2Ny
ZWVuX2JnY29sb3IgPSBxWzVdOwotICAgICAgZ2xvYmFsX2NvbG9ybWFwX3NpemUgPSAyPDwocVs0
XSYweDA3KTsKLQotICAgICAgaWYgKChxWzRdICYgMHg4MCkgJiYgZ2xvYmFsX2NvbG9ybWFwX3Np
emUgPiAwKSB7IC8qIGdsb2JhbCBtYXAgKi8KLSAgICAgICAgLy8gR2V0IHRoZSBnbG9iYWwgY29s
b3JtYXAKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2l6ZSA9IDMqZ2xvYmFsX2NvbG9ybWFwX3Np
emU7Ci0gICAgICAgIAotICAgICAgICAvLyBNYWxsb2MgdGhlIGNvbG9yIG1hcCwgYnV0IG9ubHkg
aWYgd2UncmUgbm90IGp1c3QgY291bnRpbmcgZnJhbWVzLgotICAgICAgICBpZiAocXVlcnkgIT0g
R0lGSW1hZ2VEZWNvZGVyOjpHSUZGcmFtZUNvdW50UXVlcnkpCi0gICAgICAgICAgZ2xvYmFsX2Nv
bG9ybWFwID0gbmV3IHVuc2lnbmVkIGNoYXJbc2l6ZV07Ci0KLSAgICAgICAgaWYgKGxlbiA8IHNp
emUpIHsKLSAgICAgICAgICAvLyBVc2UgJ2hvbGQnIHBhdHRlcm4gdG8gZ2V0IHRoZSBnbG9iYWwg
Y29sb3JtYXAKKyAgICAgIG1fc2NyZWVuQmdDb2xvciA9IHFbNV07CisgICAgICBtX2dsb2JhbENv
bG9yTWFwU2l6ZSA9IDI8PChxWzRdJjB4MDcpOworCisgICAgICBpZiAoKHFbNF0gJiAweDgwKSAm
JiBtX2dsb2JhbENvbG9yTWFwU2l6ZSA+IDApIHsgLyogZ2xvYmFsIG1hcCAqLworICAgICAgICBt
X2dsb2JhbENvbG9yTWFwUG9zaXRpb24gPSBkYXRhUG9zaXRpb247CisKKyAgICAgICAvLyBHZXQg
dGhlIGdsb2JhbCBjb2xvcm1hcC4KKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2l6ZSA9IDMqbV9n
bG9iYWxDb2xvck1hcFNpemU7CisgICAgICAgIGlmIChieXRlc1RvRGVjb2RlIDwgc2l6ZSkgewor
ICAgICAgICAgIC8vIE5vdCBlbm91Z2ggYnl0ZXMgdG8gcmVhZCB0aGUgZW50aXJlIGdsb2JhbCBj
b2xvcm1hcC4KICAgICAgICAgICBHRVROKHNpemUsIGdpZl9nbG9iYWxfY29sb3JtYXApOwogICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBDb3B5IGV2ZXJ5
dGhpbmcgYW5kIGdvIGRpcmVjdGx5IHRvIGdpZl9pbWFnZV9zdGFydC4KLSAgICAgICAgaWYgKGds
b2JhbF9jb2xvcm1hcCkKLSAgICAgICAgICAgIG1lbWNweShnbG9iYWxfY29sb3JtYXAsIGJ1Ziwg
c2l6ZSk7Ci0gICAgICAgIGJ1ZiArPSBzaXplOwotICAgICAgICBsZW4gLT0gc2l6ZTsKKworICAg
ICAgICBkYXRhUG9zaXRpb24gKz0gc2l6ZTsKKyAgICAgICAgYnl0ZXNUb0RlY29kZSAtPSBzaXpl
OwogICAgICAgfQogCiAgICAgICBHRVROKDEsIGdpZl9pbWFnZV9zdGFydCk7CkBAIC01NzMsNyAr
NTYwLDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZCBjaGFyICpi
dWYsIHVuc2lnbmVkIGxlbiwKICAgICAgICAqIHVudGlsIHdlIGZpbmQgYW4gaW1hZ2Ugc2VwYXJh
dG9yLCBidXQgR0lGODlhIHNheXMgc3VjaAogICAgICAgICogYSBmaWxlIGlzIGNvcnJ1cHQuIFdl
IGZvbGxvdyBHSUY4OWEgYW5kIGJhaWwgb3V0LiAqLwogICAgICAgaWYgKCpxICE9ICcsJykKLSAg
ICAgICAgcmV0dXJuIGNsaWVudHB0ciA/IGNsaWVudHB0ci0+c2V0RmFpbGVkKCkgOiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIG1fY2xpZW50LT5zZXRGYWlsZWQoKTsKIAogICAgICAgR0VUTig5LCBn
aWZfaW1hZ2VfaGVhZGVyKTsKICAgICB9CkBAIC01ODEsNyArNTY4LDcgQEAgYm9vbCBHSUZJbWFn
ZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwKIAog
ICAgIGNhc2UgZ2lmX2V4dGVuc2lvbjoKICAgICB7Ci0gICAgICBjb3VudCA9IHFbMV07CisgICAg
ICB1bnNpZ25lZCBieXRlc0luQmxvY2sgPSBxWzFdOwogICAgICAgZ3N0YXRlIGVzID0gZ2lmX3Nr
aXBfYmxvY2s7CiAKICAgICAgIC8vIFRoZSBHSUYgc3BlYyBtYW5kYXRlcyBsZW5ndGhzIGZvciB0
aHJlZSBvZiB0aGUgZXh0ZW5zaW9ucyBiZWxvdy4KQEAgLTYwMywxNyArNTkwLDE3IEBAIGJvb2wg
R0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBs
ZW4sCiAgICAgICB7CiAgICAgICBjYXNlIDB4Zjk6CiAgICAgICAgIGVzID0gZ2lmX2NvbnRyb2xf
ZXh0ZW5zaW9uOwotICAgICAgICBjb3VudCA9IHN0ZDo6bWF4KGNvdW50LCA0KTsKKyAgICAgICAg
Ynl0ZXNJbkJsb2NrID0gc3RkOjptYXgoYnl0ZXNJbkJsb2NrLCA0dSk7CiAgICAgICAgIGJyZWFr
OwogCiAgICAgICBjYXNlIDB4MDE6CiAgICAgICAgIC8vIGlnbm9yaW5nIHBsYWluIHRleHQgZXh0
ZW5zaW9uCi0gICAgICAgIGNvdW50ID0gc3RkOjptYXgoY291bnQsIDEyKTsKKyAgICAgICAgYnl0
ZXNJbkJsb2NrID0gc3RkOjptYXgoYnl0ZXNJbkJsb2NrLCAxMnUpOwogICAgICAgICBicmVhazsK
IAogICAgICAgY2FzZSAweGZmOgogICAgICAgICBlcyA9IGdpZl9hcHBsaWNhdGlvbl9leHRlbnNp
b247Ci0gICAgICAgIGNvdW50ID0gc3RkOjptYXgoY291bnQsIDExKTsKKyAgICAgICAgYnl0ZXNJ
bkJsb2NrID0gc3RkOjptYXgoYnl0ZXNJbkJsb2NrLCAxMXUpOwogICAgICAgICBicmVhazsKIAog
ICAgICAgY2FzZSAweGZlOgpAQCAtNjIxLDggKzYwOCw4IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6
OnJlYWQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sCiAgICAgICAgIGJy
ZWFrOwogICAgICAgfQogCi0gICAgICBpZiAoY291bnQpCi0gICAgICAgIEdFVE4oY291bnQsIGVz
KTsKKyAgICAgIGlmIChieXRlc0luQmxvY2spCisgICAgICAgIEdFVE4oYnl0ZXNJbkJsb2NrLCBl
cyk7CiAgICAgICBlbHNlCiAgICAgICAgIEdFVE4oMSwgZ2lmX2ltYWdlX3N0YXJ0KTsKICAgICB9
CkBAIC02NDEsMjkgKzYyOCwyNSBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVu
c2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLAogCiAgICAgY2FzZSBnaWZfY29udHJvbF9l
eHRlbnNpb246CiAgICAgewotICAgICAgaWYgKHF1ZXJ5ICE9IEdJRkltYWdlRGVjb2Rlcjo6R0lG
RnJhbWVDb3VudFF1ZXJ5KSB7Ci0gICAgICAgICAgaWYgKCFmcmFtZV9yZWFkZXIpCi0gICAgICAg
ICAgICBmcmFtZV9yZWFkZXIgPSBuZXcgR0lGRnJhbWVSZWFkZXIoKTsKLSAgICAgIH0KKyAgICAg
IGlmICghbV9jdXJyZW50RnJhbWUpCisgICAgICAgIG1fY3VycmVudEZyYW1lID0gYWRvcHRQdHIo
bmV3IEdJRkZyYW1lQ29udGV4dChtX2ltYWdlc0RhdGFDb21wbGV0ZSkpOwogCi0gICAgICBpZiAo
ZnJhbWVfcmVhZGVyKSB7Ci0gICAgICAgIGlmICgqcSAmIDB4MSkgewotICAgICAgICAgIGZyYW1l
X3JlYWRlci0+dHBpeGVsID0gcVszXTsKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPmlzX3RyYW5z
cGFyZW50ID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBmcmFtZV9yZWFkZXIt
PmlzX3RyYW5zcGFyZW50ID0gZmFsc2U7Ci0gICAgICAgICAgLy8gaWdub3JpbmcgZ2Z4IGNvbnRy
b2wgZXh0ZW5zaW9uCi0gICAgICAgIH0KLSAgICAgICAgLy8gTk9URTogVGhpcyByZWxpZXMgb24g
dGhlIHZhbHVlcyBpbiB0aGUgRnJhbWVEaXNwb3NhbE1ldGhvZCBlbnVtCi0gICAgICAgIC8vIG1h
dGNoaW5nIHRob3NlIGluIHRoZSBHSUYgc3BlYyEKLSAgICAgICAgaW50IGRpc3Bvc2FsX21ldGhv
ZCA9ICgoKnEpID4+IDIpICYgMHg3OwotICAgICAgICBmcmFtZV9yZWFkZXItPmRpc3Bvc2FsX21l
dGhvZCA9IChXZWJDb3JlOjpJbWFnZUZyYW1lOjpGcmFtZURpc3Bvc2FsTWV0aG9kKWRpc3Bvc2Fs
X21ldGhvZDsKLSAgICAgICAgLy8gU29tZSBzcGVjcyBzYXkgM3JkIGJpdCAodmFsdWUgNCksIG90
aGVyIHNwZWNzIHNheSB2YWx1ZSAzCi0gICAgICAgIC8vIExldCdzIGNob29zZSAzICh0aGUgbW9y
ZSBwb3B1bGFyKQotICAgICAgICBpZiAoZGlzcG9zYWxfbWV0aG9kID09IDQpCi0gICAgICAgICAg
ZnJhbWVfcmVhZGVyLT5kaXNwb3NhbF9tZXRob2QgPSBXZWJDb3JlOjpJbWFnZUZyYW1lOjpEaXNw
b3NlT3ZlcndyaXRlUHJldmlvdXM7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+ZGVsYXlfdGltZSA9
IEdFVElOVDE2KHEgKyAxKSAqIDEwOworICAgICAgaWYgKCpxICYgMHgxKSB7CisgICAgICAgIG1f
Y3VycmVudEZyYW1lLT50cGl4ZWwgPSBxWzNdOworICAgICAgICBtX2N1cnJlbnRGcmFtZS0+aXNU
cmFuc3BhcmVudCA9IHRydWU7CisgICAgICB9IGVsc2UgeworICAgICAgICBtX2N1cnJlbnRGcmFt
ZS0+aXNUcmFuc3BhcmVudCA9IGZhbHNlOworICAgICAgICAvLyBpZ25vcmluZyBnZnggY29udHJv
bCBleHRlbnNpb24KICAgICAgIH0KKyAgICAgIC8vIE5PVEU6IFRoaXMgcmVsaWVzIG9uIHRoZSB2
YWx1ZXMgaW4gdGhlIEZyYW1lRGlzcG9zYWxNZXRob2QgZW51bQorICAgICAgLy8gbWF0Y2hpbmcg
dGhvc2UgaW4gdGhlIEdJRiBzcGVjIQorICAgICAgaW50IGRpc3Bvc2FsTWV0aG9kID0gKCgqcSkg
Pj4gMikgJiAweDc7CisgICAgICBtX2N1cnJlbnRGcmFtZS0+ZGlzcG9zYWxNZXRob2QgPSAoSW1h
Z2VGcmFtZTo6RnJhbWVEaXNwb3NhbE1ldGhvZClkaXNwb3NhbE1ldGhvZDsKKyAgICAgIC8vIFNv
bWUgc3BlY3Mgc2F5IDNyZCBiaXQgKHZhbHVlIDQpLCBvdGhlciBzcGVjcyBzYXkgdmFsdWUgMwor
ICAgICAgLy8gTGV0J3MgY2hvb3NlIDMgKHRoZSBtb3JlIHBvcHVsYXIpCisgICAgICBpZiAoZGlz
cG9zYWxNZXRob2QgPT0gNCkKKyAgICAgICAgbV9jdXJyZW50RnJhbWUtPmRpc3Bvc2FsTWV0aG9k
ID0gSW1hZ2VGcmFtZTo6RGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzOworICAgICAgbV9jdXJyZW50
RnJhbWUtPmRlbGF5VGltZSA9IEdFVElOVDE2KHEgKyAxKSAqIDEwOwogICAgICAgR0VUTigxLCBn
aWZfY29uc3VtZV9ibG9jayk7CiAgICAgfQogICAgIGJyZWFrOwpAQCAtNzA2LDExICs2ODksMTEg
QEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVu
c2lnbmVkIGxlbiwKICAgICAgIC8qIExvb3AgZW50aXJlIGFuaW1hdGlvbiBzcGVjaWZpZWQgIyBv
ZiB0aW1lcy4gIE9ubHkgcmVhZCB0aGUKICAgICAgICAgIGxvb3AgY291bnQgZHVyaW5nIHRoZSBm
aXJzdCBpdGVyYXRpb24uICovCiAgICAgICBpZiAobmV0c2NhcGVfZXh0ZW5zaW9uID09IDEpIHsK
LSAgICAgICAgbG9vcF9jb3VudCA9IEdFVElOVDE2KHEgKyAxKTsKKyAgICAgICAgbV9sb29wQ291
bnQgPSBHRVRJTlQxNihxICsgMSk7CiAKICAgICAgICAgLyogWmVybyBsb29wIGNvdW50IGlzIGlu
ZmluaXRlIGFuaW1hdGlvbiBsb29wIHJlcXVlc3QgKi8KLSAgICAgICAgaWYgKGxvb3BfY291bnQg
PT0gMCkKLSAgICAgICAgICBsb29wX2NvdW50ID0gV2ViQ29yZTo6Y0FuaW1hdGlvbkxvb3BJbmZp
bml0ZTsKKyAgICAgICAgaWYgKG1fbG9vcENvdW50ID09IDApCisgICAgICAgICAgbV9sb29wQ291
bnQgPSBjQW5pbWF0aW9uTG9vcEluZmluaXRlOwogCiAgICAgICAgIEdFVE4oMSwgZ2lmX25ldHNj
YXBlX2V4dGVuc2lvbl9ibG9jayk7CiAgICAgICB9CkBAIC03MjIsNyArNzA1LDcgQEAgYm9vbCBH
SUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxl
biwKICAgICAgICAgR0VUTigxLCBnaWZfbmV0c2NhcGVfZXh0ZW5zaW9uX2Jsb2NrKTsKICAgICAg
IH0gZWxzZSB7CiAgICAgICAgIC8vIDAsMy03IGFyZSB5ZXQgdG8gYmUgZGVmaW5lZCBuZXRzY2Fw
ZSBleHRlbnNpb24gY29kZXMKLSAgICAgICAgcmV0dXJuIGNsaWVudHB0ciA/IGNsaWVudHB0ci0+
c2V0RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG1fY2xpZW50LT5zZXRGYWlsZWQo
KTsKICAgICAgIH0KIAogICAgICAgYnJlYWs7CkBAIC03MzAsMTEgKzcxMywxMSBAQCBib29sIEdJ
RkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVu
LAogCiAgICAgY2FzZSBnaWZfaW1hZ2VfaGVhZGVyOgogICAgIHsKLSAgICAgIHVuc2lnbmVkIGhl
aWdodCwgd2lkdGgsIHhfb2Zmc2V0LCB5X29mZnNldDsKKyAgICAgIHVuc2lnbmVkIGhlaWdodCwg
d2lkdGgsIHhPZmZzZXQsIHlPZmZzZXQ7CiAgICAgICAKICAgICAgIC8qIEdldCBpbWFnZSBvZmZz
ZXRzLCB3aXRoIHJlc3BlY3QgdG8gdGhlIHNjcmVlbiBvcmlnaW4gKi8KLSAgICAgIHhfb2Zmc2V0
ID0gR0VUSU5UMTYocSk7Ci0gICAgICB5X29mZnNldCA9IEdFVElOVDE2KHEgKyAyKTsKKyAgICAg
IHhPZmZzZXQgPSBHRVRJTlQxNihxKTsKKyAgICAgIHlPZmZzZXQgPSBHRVRJTlQxNihxICsgMik7
CiAKICAgICAgIC8qIEdldCBpbWFnZSB3aWR0aCBhbmQgaGVpZ2h0LiAqLwogICAgICAgd2lkdGgg
ID0gR0VUSU5UMTYocSArIDQpOwpAQCAtNzQ0LDEyOCArNzI3LDEwOCBAQCBib29sIEdJRkltYWdl
UmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLAogICAg
ICAgICogc2l6ZSBoYXMgd2VpcmQgd2lkdGggb3IgaGVpZ2h0LiAgV2UgYXNzdW1lIHRoYXQgR0lG
ODdhCiAgICAgICAgKiBmaWxlcyBkb24ndCBjb250YWluIGFuaW1hdGlvbnMuCiAgICAgICAgKi8K
LSAgICAgIGlmICgoaW1hZ2VzX2RlY29kZWQgPT0gMCkgJiYKLSAgICAgICAgICAoKHNjcmVlbl9o
ZWlnaHQgPCBoZWlnaHQpIHx8IChzY3JlZW5fd2lkdGggPCB3aWR0aCkgfHwKLSAgICAgICAgICAg
KHZlcnNpb24gPT0gODcpKSkKKyAgICAgIGlmICgobV9pbWFnZXNEYXRhQ29tcGxldGUgPT0gMCkg
JiYKKyAgICAgICAgICAoKG1fc2NyZWVuSGVpZ2h0IDwgaGVpZ2h0KSB8fCAobV9zY3JlZW5XaWR0
aCA8IHdpZHRoKSB8fAorICAgICAgICAgICAobV92ZXJzaW9uID09IDg3KSkpCiAgICAgICB7Ci0g
ICAgICAgIHNjcmVlbl9oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIHNjcmVlbl93aWR0aCA9IHdp
ZHRoOwotICAgICAgICB4X29mZnNldCA9IDA7Ci0gICAgICAgIHlfb2Zmc2V0ID0gMDsKKyAgICAg
ICAgbV9zY3JlZW5IZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgIG1fc2NyZWVuV2lkdGggPSB3aWR0
aDsKKyAgICAgICAgeE9mZnNldCA9IDA7CisgICAgICAgIHlPZmZzZXQgPSAwOwogCiAgICAgICAg
IC8vIENBTExCQUNLOiBJbmZvcm0gdGhlIGRlY29kZXJwbHVnaW4gb2Ygb3VyIHNpemUuCi0gICAg
ICAgIGlmIChjbGllbnRwdHIgJiYgIWNsaWVudHB0ci0+c2V0U2l6ZShzY3JlZW5fd2lkdGgsIHNj
cmVlbl9oZWlnaHQpKQorICAgICAgICBpZiAoIW1fY2xpZW50LT5zZXRTaXplKG1fc2NyZWVuV2lk
dGgsIG1fc2NyZWVuSGVpZ2h0KSkKICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICB9CiAK
ICAgICAgIC8qIFdvcmsgYXJvdW5kIG1vcmUgYnJva2VuIEdJRiBmaWxlcyB0aGF0IGhhdmUgemVy
byBpbWFnZQogICAgICAgICAgd2lkdGggb3IgaGVpZ2h0ICovCiAgICAgICBpZiAoIWhlaWdodCB8
fCAhd2lkdGgpIHsKLSAgICAgICAgaGVpZ2h0ID0gc2NyZWVuX2hlaWdodDsKLSAgICAgICAgd2lk
dGggPSBzY3JlZW5fd2lkdGg7CisgICAgICAgIGhlaWdodCA9IG1fc2NyZWVuSGVpZ2h0OworICAg
ICAgICB3aWR0aCA9IG1fc2NyZWVuV2lkdGg7CiAgICAgICAgIGlmICghaGVpZ2h0IHx8ICF3aWR0
aCkKLSAgICAgICAgICByZXR1cm4gY2xpZW50cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQoKSA6
IGZhbHNlOworICAgICAgICAgIHJldHVybiBtX2NsaWVudC0+c2V0RmFpbGVkKCk7CiAgICAgICB9
CiAKLSAgICAgIGlmIChxdWVyeSA9PSBHSUZJbWFnZURlY29kZXI6OkdJRlNpemVRdWVyeSB8fCBo
YWx0QXRGcmFtZSA9PSBpbWFnZXNfZGVjb2RlZCkgeworICAgICAgaWYgKHF1ZXJ5ID09IEdJRklt
YWdlRGVjb2Rlcjo6R0lGU2l6ZVF1ZXJ5IHx8IGhhbHRBdEZyYW1lID09IG1faW1hZ2VzRGF0YUNv
bXBsZXRlKSB7CiAgICAgICAgIC8vIFRoZSBkZWNvZGVyIG5lZWRzIHRvIHN0b3AuICBIYW5kIGJh
Y2sgdGhlIG51bWJlciBvZiBieXRlcyB3ZSBjb25zdW1lZCBmcm9tCiAgICAgICAgIC8vIGJ1ZmZl
ciBtaW51cyA5ICh0aGUgYW1vdW50IHdlIGNvbnN1bWVkIHRvIHJlYWQgdGhlIGhlYWRlcikuCi0g
ICAgICAgIGlmIChjbGllbnRwdHIpCi0gICAgICAgICAgICBjbGllbnRwdHItPmRlY29kaW5nSGFs
dGVkKGxlbiArIDkpOworICAgICAgICBzZXRSZW1haW5pbmdCeXRlcyhieXRlc1RvRGVjb2RlICsg
OSk7CiAgICAgICAgIEdFVE4oOSwgZ2lmX2ltYWdlX2hlYWRlcik7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgfQotICAgICAgCi0gICAgICBpbWFnZXNfY291bnQgPSBpbWFnZXNfZGVjb2Rl
ZCArIDE7Ci0KLSAgICAgIGlmIChxdWVyeSA9PSBHSUZJbWFnZURlY29kZXI6OkdJRkZ1bGxRdWVy
eSAmJiAhZnJhbWVfcmVhZGVyKQotICAgICAgICBmcmFtZV9yZWFkZXIgPSBuZXcgR0lGRnJhbWVS
ZWFkZXIoKTsKLQotICAgICAgaWYgKGZyYW1lX3JlYWRlcikgewotICAgICAgICBmcmFtZV9yZWFk
ZXItPnhfb2Zmc2V0ID0geF9vZmZzZXQ7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+eV9vZmZzZXQg
PSB5X29mZnNldDsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAg
ICAgIGZyYW1lX3JlYWRlci0+d2lkdGggPSB3aWR0aDsKLQotICAgICAgICAvKiBUaGlzIGNhc2Ug
d2lsbCBuZXZlciBiZSB0YWtlbiBpZiB0aGlzIGlzIHRoZSBmaXJzdCBpbWFnZSAqLwotICAgICAg
ICAvKiBiZWluZyBkZWNvZGVkLiBJZiBhbnkgb2YgdGhlIGxhdGVyIGltYWdlcyBhcmUgbGFyZ2Vy
ICAgICAqLwotICAgICAgICAvKiB0aGFuIHRoZSBzY3JlZW4gc2l6ZSwgd2UgbmVlZCB0byByZWFs
bG9jYXRlIGJ1ZmZlcnMuICAgICAqLwotICAgICAgICBpZiAoc2NyZWVuX3dpZHRoIDwgd2lkdGgp
IHsKLSAgICAgICAgICAvKiBYWFggRGV2aWFudCEgKi8KLQotICAgICAgICAgIGRlbGV0ZSBbXWZy
YW1lX3JlYWRlci0+cm93YnVmOwotICAgICAgICAgIHNjcmVlbl93aWR0aCA9IHdpZHRoOwotICAg
ICAgICAgIGZyYW1lX3JlYWRlci0+cm93YnVmID0gbmV3IHVuc2lnbmVkIGNoYXJbc2NyZWVuX3dp
ZHRoXTsKLSAgICAgICAgfSBlbHNlIGlmICghZnJhbWVfcmVhZGVyLT5yb3didWYpIHsKLSAgICAg
ICAgICBmcmFtZV9yZWFkZXItPnJvd2J1ZiA9IG5ldyB1bnNpZ25lZCBjaGFyW3NjcmVlbl93aWR0
aF07Ci0gICAgICAgIH0KIAotICAgICAgICBpZiAoIWZyYW1lX3JlYWRlci0+cm93YnVmKQotICAg
ICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7
Ci0gICAgICAgIGlmIChzY3JlZW5faGVpZ2h0IDwgaGVpZ2h0KQotICAgICAgICAgIHNjcmVlbl9o
ZWlnaHQgPSBoZWlnaHQ7CisgICAgICAvLyBGb3VuZCBhIG5ldyBmcmFtZSBoZWFkZXIgc28gaW5j
cmVtZW50IGltYWdlcyBjb3VudC4KKyAgICAgIG1faW1hZ2VzQ291bnQgPSBtX2ltYWdlc0RhdGFD
b21wbGV0ZSArIDE7CiAKLSAgICAgICAgaWYgKHFbOF0gJiAweDQwKSB7Ci0gICAgICAgICAgZnJh
bWVfcmVhZGVyLT5pbnRlcmxhY2VkID0gdHJ1ZTsKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPmlw
YXNzID0gMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPmludGVy
bGFjZWQgPSBmYWxzZTsKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPmlwYXNzID0gMDsKLSAgICAg
ICAgfQorICAgICAgaWYgKCFtX2N1cnJlbnRGcmFtZSkKKyAgICAgICAgbV9jdXJyZW50RnJhbWUg
PSBhZG9wdFB0cihuZXcgR0lGRnJhbWVDb250ZXh0KG1faW1hZ2VzRGF0YUNvbXBsZXRlKSk7CiAK
LSAgICAgICAgaWYgKGltYWdlc19kZWNvZGVkID09IDApIHsKLSAgICAgICAgICBmcmFtZV9yZWFk
ZXItPnByb2dyZXNzaXZlX2Rpc3BsYXkgPSB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgIC8qIE92ZXJsYXlpbmcgaW50ZXJsYWNlZCwgdHJhbnNwYXJlbnQgR0lGcyBvdmVyCi0gICAg
ICAgICAgICAgZXhpc3RpbmcgaW1hZ2UgZGF0YSB1c2luZyB0aGUgSGFlYmVybGkgZGlzcGxheSBo
YWNrCi0gICAgICAgICAgICAgcmVxdWlyZXMgc2F2aW5nIHRoZSB1bmRlcmx5aW5nIGltYWdlIGlu
IG9yZGVyIHRvCi0gICAgICAgICAgICAgYXZvaWQgamFnZ2llcyBhdCB0aGUgdHJhbnNwYXJlbmN5
IGVkZ2VzLiAgV2UgYXJlCi0gICAgICAgICAgICAgdW5wcmVwYXJlZCB0byBkZWFsIHdpdGggdGhh
dCwgc28gZG9uJ3QgZGlzcGxheSBzdWNoCi0gICAgICAgICAgICAgaW1hZ2VzIHByb2dyZXNzaXZl
bHkgKi8KLSAgICAgICAgICBmcmFtZV9yZWFkZXItPnByb2dyZXNzaXZlX2Rpc3BsYXkgPSBmYWxz
ZTsKLSAgICAgICAgfQorICAgICAgbV9jdXJyZW50RnJhbWUtPnhPZmZzZXQgPSB4T2Zmc2V0Owor
ICAgICAgbV9jdXJyZW50RnJhbWUtPnlPZmZzZXQgPSB5T2Zmc2V0OworICAgICAgbV9jdXJyZW50
RnJhbWUtPmhlaWdodCA9IGhlaWdodDsKKyAgICAgIG1fY3VycmVudEZyYW1lLT53aWR0aCA9IHdp
ZHRoOworCisgICAgICAvKiBUaGlzIGNhc2Ugd2lsbCBuZXZlciBiZSB0YWtlbiBpZiB0aGlzIGlz
IHRoZSBmaXJzdCBpbWFnZSAqLworICAgICAgLyogYmVpbmcgZGVjb2RlZC4gSWYgYW55IG9mIHRo
ZSBsYXRlciBpbWFnZXMgYXJlIGxhcmdlciAgICAgKi8KKyAgICAgIC8qIHRoYW4gdGhlIHNjcmVl
biBzaXplLCB3ZSBuZWVkIHRvIHJlYWxsb2NhdGUgYnVmZmVycy4gICAgICovCisgICAgICBpZiAo
bV9zY3JlZW5XaWR0aCA8IHdpZHRoKSB7CisgICAgICAgIC8qIFhYWCBEZXZpYW50ISAqLworICAg
ICAgICBtX3NjcmVlbldpZHRoID0gd2lkdGg7CisgICAgICB9CisgICAgICBtX3Jvd0J1ZmZlci5y
ZXNpemUobV9zY3JlZW5XaWR0aCk7CiAKLSAgICAgICAgLyogQ2xlYXIgc3RhdGUgZnJvbSBsYXN0
IGltYWdlICovCi0gICAgICAgIGZyYW1lX3JlYWRlci0+aXJvdyA9IDA7Ci0gICAgICAgIGZyYW1l
X3JlYWRlci0+cm93c19yZW1haW5pbmcgPSBmcmFtZV9yZWFkZXItPmhlaWdodDsKLSAgICAgICAg
ZnJhbWVfcmVhZGVyLT5yb3dlbmQgPSBmcmFtZV9yZWFkZXItPnJvd2J1ZiArIGZyYW1lX3JlYWRl
ci0+d2lkdGg7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+cm93cCA9IGZyYW1lX3JlYWRlci0+cm93
YnVmOworICAgICAgaWYgKG1fc2NyZWVuSGVpZ2h0IDwgaGVpZ2h0KQorICAgICAgICBtX3NjcmVl
bkhlaWdodCA9IGhlaWdodDsKIAotICAgICAgICAvKiBiaXRzIHBlciBwaXhlbCBpcyBxWzhdJjB4
MDcgKi8KKyAgICAgIGlmIChxWzhdICYgMHg0MCkgeworICAgICAgICBtX2N1cnJlbnRGcmFtZS0+
aW50ZXJsYWNlZCA9IHRydWU7CisgICAgICAgIG1fY3VycmVudEZyYW1lLT5pcGFzcyA9IDE7Cisg
ICAgICB9IGVsc2UgeworICAgICAgICBtX2N1cnJlbnRGcmFtZS0+aW50ZXJsYWNlZCA9IGZhbHNl
OworICAgICAgICBtX2N1cnJlbnRGcmFtZS0+aXBhc3MgPSAwOwogICAgICAgfQotICAgICAgCisK
KyAgICAgIGlmIChtX2ltYWdlc0RhdGFDb21wbGV0ZSA9PSAwKSB7CisgICAgICAgIG1fY3VycmVu
dEZyYW1lLT5wcm9ncmVzc2l2ZURpc3BsYXkgPSB0cnVlOworICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgLyogT3ZlcmxheWluZyBpbnRlcmxhY2VkLCB0cmFuc3BhcmVudCBHSUZzIG92ZXIKKyAgICAg
ICAgICAgZXhpc3RpbmcgaW1hZ2UgZGF0YSB1c2luZyB0aGUgSGFlYmVybGkgZGlzcGxheSBoYWNr
CisgICAgICAgICAgIHJlcXVpcmVzIHNhdmluZyB0aGUgdW5kZXJseWluZyBpbWFnZSBpbiBvcmRl
ciB0bworICAgICAgICAgICBhdm9pZCBqYWdnaWVzIGF0IHRoZSB0cmFuc3BhcmVuY3kgZWRnZXMu
ICBXZSBhcmUKKyAgICAgICAgICAgdW5wcmVwYXJlZCB0byBkZWFsIHdpdGggdGhhdCwgc28gZG9u
J3QgZGlzcGxheSBzdWNoCisgICAgICAgICAgIGltYWdlcyBwcm9ncmVzc2l2ZWx5ICovCisgICAg
ICAgIG1fY3VycmVudEZyYW1lLT5wcm9ncmVzc2l2ZURpc3BsYXkgPSBmYWxzZTsKKyAgICAgIH0K
KworICAgICAgLyogQ2xlYXIgc3RhdGUgZnJvbSBsYXN0IGltYWdlICovCisgICAgICBtX2N1cnJl
bnRGcmFtZS0+aXJvdyA9IDA7CisgICAgICBtX2N1cnJlbnRGcmFtZS0+cm93c1JlbWFpbmluZyA9
IG1fY3VycmVudEZyYW1lLT5oZWlnaHQ7CisgICAgICBtX2N1cnJlbnRGcmFtZS0+cm93cCA9IDA7
CisKKyAgICAgIC8qIGJpdHMgcGVyIHBpeGVsIGlzIHFbOF0mMHgwNyAqLwogICAgICAgaWYgKHFb
OF0gJiAweDgwKSAvKiBoYXMgYSBsb2NhbCBjb2xvcm1hcD8gKi8KICAgICAgIHsKLSAgICAgICAg
aW50IG51bV9jb2xvcnMgPSAyIDw8IChxWzhdICYgMHg3KTsKKyAgICAgICAgdW5zaWduZWQgbnVt
X2NvbG9ycyA9IDIgPDwgKHFbOF0gJiAweDcpOwogICAgICAgICBjb25zdCB1bnNpZ25lZCBzaXpl
ID0gMypudW1fY29sb3JzOwotICAgICAgICB1bnNpZ25lZCBjaGFyICptYXAgPSBmcmFtZV9yZWFk
ZXIgPyBmcmFtZV9yZWFkZXItPmxvY2FsX2NvbG9ybWFwIDogMDsKLSAgICAgICAgaWYgKGZyYW1l
X3JlYWRlciAmJiAoIW1hcCB8fCAobnVtX2NvbG9ycyA+IGZyYW1lX3JlYWRlci0+bG9jYWxfY29s
b3JtYXBfc2l6ZSkpKSB7Ci0gICAgICAgICAgZGVsZXRlIFtdbWFwOwotICAgICAgICAgIG1hcCA9
IG5ldyB1bnNpZ25lZCBjaGFyW3NpemVdOwotICAgICAgICAgIGlmICghbWFwKQotICAgICAgICAg
ICAgcmV0dXJuIGNsaWVudHB0ciA/IGNsaWVudHB0ci0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKLSAg
ICAgICAgfQogCiAgICAgICAgIC8qIFN3aXRjaCB0byB0aGUgbmV3IGxvY2FsIHBhbGV0dGUgYWZ0
ZXIgaXQgbG9hZHMgKi8KLSAgICAgICAgaWYgKGZyYW1lX3JlYWRlcikgewotICAgICAgICAgIGZy
YW1lX3JlYWRlci0+bG9jYWxfY29sb3JtYXAgPSBtYXA7Ci0gICAgICAgICAgZnJhbWVfcmVhZGVy
LT5sb2NhbF9jb2xvcm1hcF9zaXplID0gbnVtX2NvbG9yczsKLSAgICAgICAgICBmcmFtZV9yZWFk
ZXItPmlzX2xvY2FsX2NvbG9ybWFwX2RlZmluZWQgPSB0cnVlOwotICAgICAgICB9CisgICAgICAg
IG1fY3VycmVudEZyYW1lLT5sb2NhbENvbG9yTWFwUG9zaXRpb24gPSBkYXRhUG9zaXRpb247Cisg
ICAgICAgIG1fY3VycmVudEZyYW1lLT5sb2NhbENvbG9yTWFwU2l6ZSA9IG51bV9jb2xvcnM7Cisg
ICAgICAgIG1fY3VycmVudEZyYW1lLT5pc0xvY2FsQ29sb3JNYXBEZWZpbmVkID0gdHJ1ZTsKIAot
ICAgICAgICBpZiAobGVuIDwgc2l6ZSkgewotICAgICAgICAgIC8vIFVzZSAnaG9sZCcgcGF0dGVy
biB0byBnZXQgdGhlIGltYWdlIGNvbG9ybWFwCisgICAgICAgIGlmIChieXRlc1RvRGVjb2RlIDwg
c2l6ZSkgeworICAgICAgICAgIC8vIERvbid0IGhhdmUgZW5vdWdoIGRhdGEgZm9yIGltYWdlIGNv
bG9ybWFwLgogICAgICAgICAgIEdFVE4oc2l6ZSwgZ2lmX2ltYWdlX2NvbG9ybWFwKTsKICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAvLyBDb3B5IGV2ZXJ5dGhpbmcgYW5kIGRp
cmVjdGx5IGdvIHRvIGdpZl9sendfc3RhcnQKLSAgICAgICAgaWYgKGZyYW1lX3JlYWRlcikKLSAg
ICAgICAgICBtZW1jcHkoZnJhbWVfcmVhZGVyLT5sb2NhbF9jb2xvcm1hcCwgYnVmLCBzaXplKTsK
LSAgICAgICAgYnVmICs9IHNpemU7Ci0gICAgICAgIGxlbiAtPSBzaXplOwotICAgICAgfSBlbHNl
IGlmIChmcmFtZV9yZWFkZXIpIHsKKworICAgICAgICAvLyBEaXJlY3RseSBnbyB0byBnaWZfbHp3
X3N0YXJ0CisgICAgICAgIGRhdGFQb3NpdGlvbiArPSBzaXplOworICAgICAgICBieXRlc1RvRGVj
b2RlIC09IHNpemU7CisgICAgICB9IGVsc2UgewogICAgICAgICAvKiBTd2l0Y2ggYmFjayB0byB0
aGUgZ2xvYmFsIHBhbGV0dGUgKi8KLSAgICAgICAgZnJhbWVfcmVhZGVyLT5pc19sb2NhbF9jb2xv
cm1hcF9kZWZpbmVkID0gZmFsc2U7CisgICAgICAgIG1fY3VycmVudEZyYW1lLT5pc0xvY2FsQ29s
b3JNYXBEZWZpbmVkID0gZmFsc2U7CiAgICAgICB9CiAgICAgICBHRVROKDEsIGdpZl9sendfc3Rh
cnQpOwogICAgIH0KQEAgLTg3OCwzMSArODQxLDM4IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJl
YWQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sCiAKICAgICBjYXNlIGdp
Zl9zdWJfYmxvY2s6CiAgICAgewotICAgICAgaWYgKChjb3VudCA9ICpxKSAhPSAwKQorICAgICAg
dW5zaWduZWQgYnl0ZXNJbkJsb2NrID0gKnE7CisgICAgICBpZiAoYnl0ZXNJbkJsb2NrKQogICAg
ICAgLyogU3RpbGwgd29ya2luZyBvbiB0aGUgc2FtZSBpbWFnZTogUHJvY2VzcyBuZXh0IExaVyBk
YXRhIGJsb2NrICovCiAgICAgICB7CiAgICAgICAgIC8qIE1ha2Ugc3VyZSB0aGVyZSBhcmUgc3Rp
bGwgcm93cyBsZWZ0LiBJZiB0aGUgR0lGIGRhdGEgKi8KICAgICAgICAgLyogaXMgY29ycnVwdCwg
d2UgbWF5IG5vdCBnZXQgYW4gZXhwbGljaXQgdGVybWluYXRvci4gICAqLwotICAgICAgICBpZiAo
ZnJhbWVfcmVhZGVyICYmIGZyYW1lX3JlYWRlci0+cm93c19yZW1haW5pbmcgPT0gMCkgeworICAg
ICAgICBpZiAobV9jdXJyZW50RnJhbWUtPnJvd3NSZW1haW5pbmcgPT0gMCkgewogICAgICAgICAg
IC8qIFRoaXMgaXMgYW4gaWxsZWdhbCBHSUYsIGJ1dCB3ZSByZW1haW4gdG9sZXJhbnQuICovCisg
ICAgICAgICAgLy8gRklYTUU6IFRoaXMgbGluZSBkb2Vzbid0IG1ha2Ugc2Vuc2UuCiAgICAgICAg
ICAgR0VUTigxLCBnaWZfc3ViX2Jsb2NrKTsKICAgICAgICAgfQotICAgICAgICBHRVROKGNvdW50
LCBnaWZfbHp3KTsKKyAgICAgICAgR0VUTihieXRlc0luQmxvY2ssIGdpZl9sencpOwogICAgICAg
fQogICAgICAgZWxzZQogICAgICAgLyogU2VlIGlmIHRoZXJlIGFyZSBhbnkgbW9yZSBpbWFnZXMg
aW4gdGhpcyBzZXF1ZW5jZS4gKi8KICAgICAgIHsKLSAgICAgICAgaW1hZ2VzX2RlY29kZWQrKzsK
LQotICAgICAgICAvLyBDQUxMQkFDSzogVGhlIGZyYW1lIGlzIG5vdyBjb21wbGV0ZS4KLSAgICAg
ICAgaWYgKGNsaWVudHB0ciAmJiBmcmFtZV9yZWFkZXIgJiYgIWNsaWVudHB0ci0+ZnJhbWVDb21w
bGV0ZShpbWFnZXNfZGVjb2RlZCAtIDEsIGZyYW1lX3JlYWRlci0+ZGVsYXlfdGltZSwgZnJhbWVf
cmVhZGVyLT5kaXNwb3NhbF9tZXRob2QpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gZnJh
bWVDb21wbGV0ZSgpIGhhcyBhbHJlYWR5IGNhbGxlZAotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gY2xpZW50cHRyLT5zZXRGYWlsZWQoKS4KLQotICAgICAgICAvKiBDbGVhciBzdGF0ZSBmcm9t
IHRoaXMgaW1hZ2UgKi8KLSAgICAgICAgaWYgKGZyYW1lX3JlYWRlcikgewotICAgICAgICAgICAg
ZnJhbWVfcmVhZGVyLT5pc19sb2NhbF9jb2xvcm1hcF9kZWZpbmVkID0gZmFsc2U7Ci0gICAgICAg
ICAgICBmcmFtZV9yZWFkZXItPmlzX3RyYW5zcGFyZW50ID0gZmFsc2U7CisgICAgICAgIG1faW1h
Z2VzRGF0YUNvbXBsZXRlKys7CisgICAgICAgIG1fY2xpZW50LT5mcmFtZURhdGFDb21wbGV0ZSht
X2N1cnJlbnRGcmFtZS0+ZnJhbWVJbmRleCwgbV9jdXJyZW50RnJhbWUtPmRlbGF5VGltZSk7CisK
KyAgICAgICAgaWYgKHF1ZXJ5ID09IEdJRkltYWdlRGVjb2Rlcjo6R0lGRnVsbFF1ZXJ5KSB7Cisg
ICAgICAgICAgLy8gQ0FMTEJBQ0s6IFRoZSBmcmFtZSBpcyBub3cgY29tcGxldGUuCisgICAgICAg
ICAgaWYgKCFtX2NsaWVudC0+ZnJhbWVDb21wbGV0ZShtX2N1cnJlbnRGcmFtZS5nZXQoKSwgbV9j
dXJyZW50RnJhbWUtPmZyYW1lSW5kZXgsIG1fY3VycmVudEZyYW1lLT5kZWxheVRpbWUsIG1fY3Vy
cmVudEZyYW1lLT5kaXNwb3NhbE1ldGhvZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IGZyYW1lQ29tcGxldGUoKSBoYXMgYWxyZWFkeSBjYWxsZWQKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gbV9jbGllbnQtPnNldEZhaWxlZCgpLgorCisgICAgICAgICAgLyogQ2xlYXIgc3Rh
dGUgZnJvbSB0aGlzIGltYWdlICovCisgICAgICAgICAgbV9jdXJyZW50RnJhbWUtPmlzTG9jYWxD
b2xvck1hcERlZmluZWQgPSBmYWxzZTsKKyAgICAgICAgICBtX2N1cnJlbnRGcmFtZS0+aXNUcmFu
c3BhcmVudCA9IGZhbHNlOworICAgICAgICAgIG1fY3VycmVudEZyYW1lLT5pc0RlY29kZVN0YXJ0
ZWQgPSBmYWxzZTsKKyAgICAgICAgICBtX2N1cnJlbnRGcmFtZS0+ZnJhbWVJbmRleCA9IG1faW1h
Z2VzRGF0YUNvbXBsZXRlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIG1fcHJldmlvdXNG
cmFtZXMuYXBwZW5kKG1fY3VycmVudEZyYW1lLnJlbGVhc2UoKSk7CiAgICAgICAgIH0KIAogICAg
ICAgICBHRVROKDEsIGdpZl9pbWFnZV9zdGFydCk7CkBAIC05MTEsOSArODgxLDEyIEBAIGJvb2wg
R0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBs
ZW4sCiAgICAgYnJlYWs7CiAKICAgICBjYXNlIGdpZl9kb25lOgotICAgICAgLy8gV2hlbiB0aGUg
R0lGIGlzIGRvbmUsIHdlIGNhbiBzdG9wLgotICAgICAgaWYgKGNsaWVudHB0cikKLSAgICAgICAg
Y2xpZW50cHRyLT5naWZDb21wbGV0ZSgpOworICAgICAgbV9pbWFnZUNvbXBsZXRlID0gdHJ1ZTsK
KworICAgICAgaWYgKHF1ZXJ5ID09IEdJRkltYWdlRGVjb2Rlcjo6R0lGRnVsbFF1ZXJ5KQorICAg
ICAgICBtX2NsaWVudC0+Z2lmQ29tcGxldGUoKTsgLy8gV2hlbiB0aGUgR0lGIGlzIGRvbmUsIHdl
IGNhbiBzdG9wLgorCisgICAgICAvLyBUaGUgYWJvdmUgY2FsbCBjYW4gY2F1c2UgdGhpcyBvYmpl
Y3QgYmUgZGVsZXRlZCwgcmV0dXJuIGltbWVkaWF0ZWx5LgogICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICAvLyBXZSBzaG91bGRuJ3QgZXZlciBnZXQgaGVyZS4KQEAgLTkyMiwyMyArODk1LDg5IEBA
IGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNp
Z25lZCBsZW4sCiAgICAgfQogICB9CiAKLSAgLy8gQ29weSB0aGUgbGVmdG92ZXIgaW50byBncy0+
aG9sZAotICBieXRlc19pbl9ob2xkID0gbGVuOwotICBpZiAobGVuKSB7Ci0gICAgLy8gQWRkIHdo
YXQgd2UgaGF2ZSBzb2ZhciB0byB0aGUgYmxvY2sKLSAgICB1bnNpZ25lZCBjaGFyKiBwOwotICAg
IGlmIChzdGF0ZSA9PSBnaWZfZ2xvYmFsX2NvbG9ybWFwKQotICAgICAgcCA9IGdsb2JhbF9jb2xv
cm1hcDsKLSAgICBlbHNlIGlmIChzdGF0ZSA9PSBnaWZfaW1hZ2VfY29sb3JtYXApCi0gICAgICBw
ID0gZnJhbWVfcmVhZGVyID8gZnJhbWVfcmVhZGVyLT5sb2NhbF9jb2xvcm1hcCA6IDA7Ci0gICAg
ZWxzZQotICAgICAgcCA9IGhvbGQ7Ci0gICAgaWYgKHApCi0gICAgICBtZW1jcHkocCwgYnVmLCBs
ZW4pOwotICAgIGJ5dGVzX3RvX2NvbnN1bWUgLT0gbGVuOwotICB9Ci0KLSAgaWYgKGNsaWVudHB0
cikKLSAgICBjbGllbnRwdHItPmRlY29kaW5nSGFsdGVkKDApOworICBzZXRSZW1haW5pbmdCeXRl
cyhieXRlc1RvRGVjb2RlKTsKICAgcmV0dXJuIGZhbHNlOwogfQorCitib29sIEdJRkltYWdlUmVh
ZGVyOjpwcmVwYXJlTFpXQ29udGV4dChpbnQgZGF0YVNpemUpCit7CisgICAgLy8gSW5pdGlhbGl6
ZSBMWlcgcGFyc2VyL2RlY29kZXIuCisKKyAgICAvLyBTaW5jZSB3ZSB1c2UgYSBjb2RlU2l6ZSBv
ZiAxIG1vcmUgdGhhbiB0aGUgZGF0YVNpemUsIHdlIG5lZWQgdG8gZW5zdXJlCisgICAgLy8gdGhh
dCBvdXIgZGF0YVNpemUgaXMgc3RyaWN0bHkgbGVzcyB0aGFuIHRoZSBNQVhfTFpXX0JJVFMgdmFs
dWUgKDEyKS4KKyAgICAvLyBUaGlzIHNldHMgdGhlIGxhcmdlc3QgcG9zc2libGUgY29kZU1hc2sg
Y29ycmVjdGx5IGF0IDQwOTUuCisgICAgaWYgKGRhdGFTaXplID49IE1BWF9MWldfQklUUykKKyAg
ICAgICAgcmV0dXJuIG1fY2xpZW50LT5zZXRGYWlsZWQoKTsKKyAgICBpbnQgY2xlYXJDb2RlID0g
MSA8PCBkYXRhU2l6ZTsKKyAgICBpZiAoY2xlYXJDb2RlID49IE1BWF9CSVRTKQorICAgICAgICBy
ZXR1cm4gbV9jbGllbnQtPnNldEZhaWxlZCgpOworCisgICAgbV9sendDb250ZXh0LmNsZWFyQ29k
ZSA9IGNsZWFyQ29kZTsKKyAgICBtX2x6d0NvbnRleHQuYXZhaWwgPSBjbGVhckNvZGUgKyAyOwor
ICAgIG1fbHp3Q29udGV4dC5vbGRDb2RlID0gLTE7CisgICAgbV9sendDb250ZXh0LmNvZGVTaXpl
ID0gZGF0YVNpemUgKyAxOworICAgIG1fbHp3Q29udGV4dC5jb2RlTWFzayA9ICgxIDw8IG1fbHp3
Q29udGV4dC5jb2RlU2l6ZSkgLSAxOworICAgIG1fbHp3Q29udGV4dC5kYXR1bSA9IG1fbHp3Q29u
dGV4dC5iaXRzID0gMDsKKworICAgIC8vIEluaXRpYWxpemUgdGhlIHRhYmxlcy4KKyAgICBpZiAo
bV9sendDb250ZXh0LnN1ZmZpeC5pc0VtcHR5KCkpCisgICAgICAgIG1fbHp3Q29udGV4dC5zdWZm
aXgucmVzaXplKE1BWF9CSVRTKTsKKyAgICBpZiAobV9sendDb250ZXh0LnN0YWNrLmlzRW1wdHko
KSkKKyAgICAgICAgbV9sendDb250ZXh0LnN0YWNrLnJlc2l6ZShNQVhfQklUUyk7CisgICAgaWYg
KG1fbHp3Q29udGV4dC5wcmVmaXguaXNFbXB0eSgpKSB7CisgICAgICAgIG1fbHp3Q29udGV4dC5w
cmVmaXgucmVzaXplKE1BWF9CSVRTKTsKKyAgICAgICAgbV9sendDb250ZXh0LnByZWZpeC5maWxs
KDApOworICAgIH0KKworICAgIC8vIENsZWFyaW5nIHRoZSB3aG9sZSBzdWZmaXggdGFibGUgbGV0
cyB1cyBiZSBtb3JlIHRvbGVyYW50IG9mIGJhZCBkYXRhLgorICAgIG1fbHp3Q29udGV4dC5zdWZm
aXguZmlsbCgwKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fbHp3Q29udGV4dC5jbGVhckNv
ZGU7IGkrKykKKyAgICAgICAgbV9sendDb250ZXh0LnN1ZmZpeFtpXSA9IGk7CisgICAgbV9sendD
b250ZXh0LnN0YWNrcCA9IDA7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgR0lGSW1hZ2VS
ZWFkZXI6OmRlY29kZUxaV0Jsb2NrKHVuc2lnbmVkIGJsb2NrUG9zaXRpb24sIHVuc2lnbmVkIGJ5
dGVzVG9EZWNvZGUsIEdJRkZyYW1lQ29udGV4dCogZnJhbWUpCit7CisgICAgaWYgKGJsb2NrUG9z
aXRpb24gKyBieXRlc1RvRGVjb2RlID4gbV9kYXRhLT5zaXplKCkpCisgICAgICAgIHJldHVybiBt
X2NsaWVudC0+c2V0RmFpbGVkKCk7CisKKyAgICAvLyBQcmVwYXJlIExaVyBkZWNvZGluZyBjb250
ZXh0IGlmIG5vdCBkb25lLgorICAgIGlmICghZnJhbWUtPmlzRGVjb2RlU3RhcnRlZCkgeworICAg
ICAgLy8gVGhpcyBjYWxsIGFscmVhZHkgZG9lcyBtX2NsaWVudC0+c2V0RmFpbGVkKCkgaWYgZmFp
bHMuCisgICAgICBpZiAoIXByZXBhcmVMWldDb250ZXh0KGZyYW1lLT5kYXRhU2l6ZSkpCisgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgZnJhbWUtPmlzRGVjb2RlU3RhcnRlZCA9IHRydWU7
CisgICAgfQorCisgICAgaWYgKCFkb19sencoZGF0YSgpICsgYmxvY2tQb3NpdGlvbiwgYnl0ZXNU
b0RlY29kZSwgJm1fbHp3Q29udGV4dCwgZnJhbWUsIG1fcm93QnVmZmVyLmRhdGEoKSwgbV9jbGll
bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIElmIGRvX2x6dygpIGVuY291bnRlcmVkIGFu
IGVycm9yLCBpdCBoYXMgYWxyZWFkeSBjYWxsZWQgbV9jbGllbnQtPnNldEZhaWxlZCgpLgorICAg
IHJldHVybiB0cnVlOworfQorCitib29sIEdJRkltYWdlUmVhZGVyOjpkZWNvZGVQcmV2aW91c0xa
V0Jsb2NrcyhHSUZGcmFtZUNvbnRleHQqIGZyYW1lKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZnJhbWUtPm1fcHJldmlvdXNCbG9ja3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgdW5z
aWduZWQgcHJldmlvdXNCbG9ja1Bvc2l0aW9uID0gZnJhbWUtPm1fcHJldmlvdXNCbG9ja3NbaV0u
YmxvY2tQb3NpdGlvbjsKKyAgICAgICAgdW5zaWduZWQgcHJldmlvdXNCbG9ja1NpemUgPSBmcmFt
ZS0+bV9wcmV2aW91c0Jsb2Nrc1tpXS5ibG9ja1NpemU7CisKKyAgICAgICAgLy8gVGhpcyBjYWxs
IGFscmVhZHkgZG9lcyBtX2NsaWVudC0+c2V0RmFpbGVkKCkgaWYgZmFpbHMuCisgICAgICAgIGlm
ICghZGVjb2RlTFpXQmxvY2socHJldmlvdXNCbG9ja1Bvc2l0aW9uLCBwcmV2aW91c0Jsb2NrU2l6
ZSwgZnJhbWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBmcmFtZS0+
bV9wcmV2aW91c0Jsb2Nrcy5jbGVhcigpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdJ
RkltYWdlUmVhZGVyOjpkZWZlckxaV0Jsb2NrKHVuc2lnbmVkIGJsb2NrUG9zaXRpb24sIHVuc2ln
bmVkIGJ5dGVzVG9EZWNvZGUsIEdJRkZyYW1lQ29udGV4dCogZnJhbWUpCit7CisgICAgZnJhbWUt
Pm1fcHJldmlvdXNCbG9ja3MuYXBwZW5kKEdJRkxaV0Jsb2NrKGJsb2NrUG9zaXRpb24sIGJ5dGVz
VG9EZWNvZGUpKTsKK30KKwordm9pZCBHSUZJbWFnZVJlYWRlcjo6c2V0UmVtYWluaW5nQnl0ZXMo
dW5zaWduZWQgYnl0ZXNMZWZ0KQoreworICAgIEFTU0VSVChieXRlc0xlZnQgPD0gbV9kYXRhLT5z
aXplKCkpOworICAgIG1fYnl0ZXNSZWFkID0gbV9kYXRhLT5zaXplKCkgLSBieXRlc0xlZnQ7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmgKaW5kZXggMDUy
NTMyYzY0NTM2MzE0Nzc0OGY5YmE2NGVhNzhhMTUxZmVlM2FkZS4uNWNjOGJiZDI5ZmVjMzY5NzMx
OWI0NmYyYzE5ZGI2NWUyOWUzY2ViNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmgKQEAgLTM4LDE0
ICszOCwxNyBAQAogI2lmbmRlZiBHSUZJbWFnZVJlYWRlcl9oCiAjZGVmaW5lIEdJRkltYWdlUmVh
ZGVyX2gKIAotLy8gRGVmaW5lIG91cnNlbHZlcyBhcyB0aGUgY2xpZW50UHRyLiAgTW96aWxsYSBq
dXN0IGhhY2tlZCB0aGVpciBDKysgY2FsbGJhY2sgY2xhc3MgaW50byB0aGlzIG9sZCBDIGRlY29k
ZXIsCi0vLyBzbyB3ZSB3aWxsIHRvby4KICNpbmNsdWRlICJHSUZJbWFnZURlY29kZXIuaCIKIAor
I2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKICNkZWZpbmUgTUFYX0xaV19CSVRTICAgICAgICAgIDEyCiAjZGVm
aW5lIE1BWF9CSVRTICAgICAgICAgICAgNDA5NyAvKiAyXk1BWF9MWldfQklUUysxICovCiAjZGVm
aW5lIE1BWF9DT0xPUlMgICAgICAgICAgIDI1NgotI2RlZmluZSBNQVhfSE9MRF9TSVpFICAgICAg
ICAyNTYKKworbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjb25zdCBpbnQgY0xvb3BDb3VudE5vdFNl
ZW4gPSAtMjsKIApAQCAtNzYsMTM4ICs3OSwxNzAgQEAgdHlwZWRlZiBlbnVtIHsKICAgICBnaWZf
Y29uc3VtZV9jb21tZW50CiB9IGdzdGF0ZTsKIAotc3RydWN0IEdJRkZyYW1lUmVhZGVyIHsKK3N0
cnVjdCBHSUZMWldCbG9jayB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgR0lGTFpXQmxvY2sodW5zaWduZWQgcG9zaXRpb24sIHVuc2lnbmVkIHNpemUpCisgICAg
ICAgIDogYmxvY2tQb3NpdGlvbihwb3NpdGlvbikKKyAgICAgICAgLCBibG9ja1NpemUoc2l6ZSkK
KyAgICB7IH0KKworICAgIHVuc2lnbmVkIGJsb2NrUG9zaXRpb247CisgICAgdW5zaWduZWQgYmxv
Y2tTaXplOworfTsKKworc3RydWN0IEdJRkZyYW1lQ29udGV4dCB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgLyogTFpXIGRlY29kZXIgc3RhdGUgbWFjaGluZSAq
LwotICAgIHVuc2lnbmVkIGNoYXIgKnN0YWNrcDsgICAgICAgICAgICAgIC8qIEN1cnJlbnQgc3Rh
Y2sgcG9pbnRlciAqLwotICAgIGludCBkYXRhc2l6ZTsKLSAgICBpbnQgY29kZXNpemU7Ci0gICAg
aW50IGNvZGVtYXNrOwotICAgIGludCBjbGVhcl9jb2RlOyAgICAgICAgICAgICAvKiBDb2Rld29y
ZCB1c2VkIHRvIHRyaWdnZXIgZGljdGlvbmFyeSByZXNldCAqLwotICAgIGludCBhdmFpbDsgICAg
ICAgICAgICAgICAgICAvKiBJbmRleCBvZiBuZXh0IGF2YWlsYWJsZSBzbG90IGluIGRpY3Rpb25h
cnkgKi8KLSAgICBpbnQgb2xkY29kZTsKLSAgICB1bnNpZ25lZCBjaGFyIGZpcnN0Y2hhcjsKLSAg
ICBpbnQgYml0czsgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIHVucmVhZCBiaXRzIGlu
ICJkYXR1bSIgKi8KLSAgICBpbnQgZGF0dW07ICAgICAgICAgICAgICAgIC8qIDMyLWJpdCBpbnB1
dCBidWZmZXIgKi8KLQotICAgIC8qIE91dHB1dCBzdGF0ZSBtYWNoaW5lICovCi0gICAgaW50IGlw
YXNzOyAgICAgICAgICAgICAgICAgIC8qIEludGVybGFjZSBwYXNzOyBSYW5nZXMgMS00IGlmIGlu
dGVybGFjZWQuICovCi0gICAgdW5zaWduZWQgaW50IHJvd3NfcmVtYWluaW5nOyAgICAgICAgLyog
Um93cyByZW1haW5pbmcgdG8gYmUgb3V0cHV0ICovCi0gICAgdW5zaWduZWQgaW50IGlyb3c7ICAg
ICAgICAgICAgICAgICAgLyogQ3VycmVudCBvdXRwdXQgcm93LCBzdGFydGluZyBhdCB6ZXJvICov
Ci0gICAgdW5zaWduZWQgY2hhciAqcm93YnVmOyAgICAgICAgICAgICAgLyogU2luZ2xlIHNjYW5s
aW5lIHRlbXBvcmFyeSBidWZmZXIgKi8KLSAgICB1bnNpZ25lZCBjaGFyICpyb3dlbmQ7ICAgICAg
ICAgICAgICAvKiBQb2ludGVyIHRvIGVuZCBvZiByb3didWYgKi8KLSAgICB1bnNpZ25lZCBjaGFy
ICpyb3dwOyAgICAgICAgICAgICAgICAvKiBDdXJyZW50IG91dHB1dCBwb2ludGVyICovCi0KLSAg
ICAvKiBQYXJhbWV0ZXJzIGZvciBpbWFnZSBmcmFtZSBjdXJyZW50bHkgYmVpbmcgZGVjb2RlZCAq
LwotICAgIHVuc2lnbmVkIGludCB4X29mZnNldCwgeV9vZmZzZXQ7ICAgIC8qIFdpdGggcmVzcGVj
dCB0byAic2NyZWVuIiBvcmlnaW4gKi8KLSAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0LCB3aWR0aDsK
LSAgICBpbnQgdHBpeGVsOyAgICAgICAgICAgICAgICAgLyogSW5kZXggb2YgdHJhbnNwYXJlbnQg
cGl4ZWwgKi8KLSAgICBXZWJDb3JlOjpJbWFnZUZyYW1lOjpGcmFtZURpc3Bvc2FsTWV0aG9kIGRp
c3Bvc2FsX21ldGhvZDsgICAvKiBSZXN0b3JlIHRvIGJhY2tncm91bmQsIGxlYXZlIGluIHBsYWNl
LCBldGMuKi8KLSAgICB1bnNpZ25lZCBjaGFyICpsb2NhbF9jb2xvcm1hcDsgICAgLyogUGVyLWlt
YWdlIGNvbG9ybWFwICovCi0gICAgaW50IGxvY2FsX2NvbG9ybWFwX3NpemU7ICAgIC8qIFNpemUg
b2YgbG9jYWwgY29sb3JtYXAgYXJyYXkuICovCisgICAgaW50IGRhdGFTaXplOyAgLy8gVmFsdWUg
dG8gaW5pdGlhbGl6ZSBMWlcgZGVjb2RpbmcuIFRoZXJlIGFyZSAyXihkYXRhc2l6ZSArIDEpIHN5
bWJvbHMuCisKKyAgICAvLyBPdXRwdXQgc3RhdGUgbWFjaGluZS4KKyAgICBpbnQgaXBhc3M7ICAg
ICAgICAgICAgICAgICAgLy8gSW50ZXJsYWNlIHBhc3M7IFJhbmdlcyAxLTQgaWYgaW50ZXJsYWNl
ZC4KKyAgICB1bnNpZ25lZCByb3dzUmVtYWluaW5nOyAgICAgLy8gUm93cyByZW1haW5pbmcgdG8g
YmUgb3V0cHV0LgorICAgIHVuc2lnbmVkIGlyb3c7ICAgICAgICAgICAgICAvLyBDdXJyZW50IG91
dHB1dCByb3csIHN0YXJ0aW5nIGF0IHplcm8uCisgICAgdW5zaWduZWQgcm93cDsgICAgICAgICAg
ICAgIC8vIEN1cnJlbnQgb3V0cHV0IHBvc2l0aW9uLgorCisgICAgLy8gUGFyYW1ldGVycyBmb3Ig
aW1hZ2UgZnJhbWUgY3VycmVudGx5IGJlaW5nIGRlY29kZWQuCisgICAgdW5zaWduZWQgeE9mZnNl
dCwgeU9mZnNldDsgIC8vIFdpdGggcmVzcGVjdCB0byAic2NyZWVuIiBvcmlnaW4uCisgICAgdW5z
aWduZWQgaGVpZ2h0LCB3aWR0aDsKKyAgICBpbnQgdHBpeGVsOyAgICAgICAgICAgICAgICAgLy8g
SW5kZXggb2YgdHJhbnNwYXJlbnQgcGl4ZWwuCisgICAgSW1hZ2VGcmFtZTo6RnJhbWVEaXNwb3Nh
bE1ldGhvZCBkaXNwb3NhbE1ldGhvZDsgICAvLyBSZXN0b3JlIHRvIGJhY2tncm91bmQsIGxlYXZl
IGluIHBsYWNlLCBldGMuCisgICAgdW5zaWduZWQgbG9jYWxDb2xvck1hcFBvc2l0aW9uOyAgICAv
LyBQb3NpdGlvbiBvZiB0aGUgZmlyc3QgYnl0ZSBmb3IgbG9jYWwgY29sb3JtYXAgaW4gdGhlIHN0
cmVhbS4KKyAgICB1bnNpZ25lZCBsb2NhbENvbG9yTWFwU2l6ZTsgICAgICAgIC8vIFNpemUgb2Yg
bG9jYWwgY29sb3JtYXAgYXJyYXkuCisgICAgaW50IGZyYW1lSW5kZXg7ICAgICAgICAgICAgICAg
ICAgICAvLyBDdXJyZW50IGZyYW1lIGluZGV4LgogICAgIAotICAgIGJvb2wgaXNfbG9jYWxfY29s
b3JtYXBfZGVmaW5lZCA6IDE7Ci0gICAgYm9vbCBwcm9ncmVzc2l2ZV9kaXNwbGF5IDogMTsgICAg
LyogSWYgVFJVRSwgZG8gSGFlYmVybGkgaW50ZXJsYWNlIGhhY2sgKi8KLSAgICBib29sIGludGVy
bGFjZWQgOiAxOyAgICAgICAgICAgICAvKiBUUlVFLCBpZiBzY2FubGluZXMgYXJyaXZlIGludGVy
bGFjZWQgb3JkZXIgKi8KLSAgICBib29sIGlzX3RyYW5zcGFyZW50IDogMTsgICAgICAgICAvKiBU
UlVFLCBpZiB0cGl4ZWwgaXMgdmFsaWQgKi8KKyAgICBib29sIGlzTG9jYWxDb2xvck1hcERlZmlu
ZWQgOiAxOworICAgIGJvb2wgcHJvZ3Jlc3NpdmVEaXNwbGF5IDogMTsgICAgICAgLy8gSWYgVFJV
RSwgZG8gSGFlYmVybGkgaW50ZXJsYWNlIGhhY2suCisgICAgYm9vbCBpbnRlcmxhY2VkIDogMTsg
ICAgICAgICAgICAgICAvLyBUUlVFLCBpZiBzY2FubGluZXMgYXJyaXZlIGludGVybGFjZWQgb3Jk
ZXIuCisgICAgYm9vbCBpc1RyYW5zcGFyZW50IDogMTsgICAgICAgICAgICAvLyBUUlVFLCBpZiB0
cGl4ZWwgaXMgdmFsaWQuCisgICAgYm9vbCBpc0RlY29kZVN0YXJ0ZWQgOiAxOworCisgICAgdW5z
aWduZWQgZGVsYXlUaW1lOyAgICAgICAgIC8vRGlzcGxheSB0aW1lLCBpbiBtaWxsaXNlY29uZHMs
IGZvciB0aGlzIGltYWdlIGluIGEgbXVsdGktaW1hZ2UgR0lGLgorCisgICAgVmVjdG9yPEdJRkxa
V0Jsb2NrPiBtX3ByZXZpb3VzQmxvY2tzOworCisgICAgR0lGRnJhbWVDb250ZXh0KGludCBpbmRl
eCkKKyAgICAgICAgOiBkYXRhU2l6ZSgwKQorICAgICAgICAsIGlwYXNzKDApCisgICAgICAgICwg
cm93c1JlbWFpbmluZygwKQorICAgICAgICAsIGlyb3coMCkKKyAgICAgICAgLCByb3dwKDApCisg
ICAgICAgICwgeE9mZnNldCgwKQorICAgICAgICAsIHlPZmZzZXQoMCkKKyAgICAgICAgLCBoZWln
aHQoMCkKKyAgICAgICAgLCB3aWR0aCgwKQorICAgICAgICAsIHRwaXhlbCgwKQorICAgICAgICAs
IGRpc3Bvc2FsTWV0aG9kKEltYWdlRnJhbWU6OkRpc3Bvc2VOb3RTcGVjaWZpZWQpCisgICAgICAg
ICwgbG9jYWxDb2xvck1hcFBvc2l0aW9uKDApCisgICAgICAgICwgbG9jYWxDb2xvck1hcFNpemUo
MCkKKyAgICAgICAgLCBmcmFtZUluZGV4KGluZGV4KQorICAgICAgICAsIGlzTG9jYWxDb2xvck1h
cERlZmluZWQoZmFsc2UpCisgICAgICAgICwgcHJvZ3Jlc3NpdmVEaXNwbGF5KGZhbHNlKQorICAg
ICAgICAsIGludGVybGFjZWQoZmFsc2UpCisgICAgICAgICwgaXNUcmFuc3BhcmVudChmYWxzZSkK
KyAgICAgICAgLCBpc0RlY29kZVN0YXJ0ZWQoZmFsc2UpCisgICAgICAgICwgZGVsYXlUaW1lKDAp
CisgICAgeyB9IAorfTsKKworc3RydWN0IEdJRkxaV0NvbnRleHQgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIC8vIExaVyBkZWNvZGVyIHN0YXRlIG1hY2hpbmUu
CisgICAgdW5zaWduZWQgc3RhY2twOyAgICAgICAgICAgLy8gQ3VycmVudCBzdGFjayBwb3NpdGlv
bi4KKyAgICBpbnQgY29kZVNpemU7CisgICAgaW50IGNvZGVNYXNrOworICAgIGludCBjbGVhckNv
ZGU7ICAgICAgICAgICAgIC8vIENvZGV3b3JkIHVzZWQgdG8gdHJpZ2dlciBkaWN0aW9uYXJ5IHJl
c2V0LgorICAgIGludCBhdmFpbDsgICAgICAgICAgICAgICAgIC8vIEluZGV4IG9mIG5leHQgYXZh
aWxhYmxlIHNsb3QgaW4gZGljdGlvbmFyeS4KKyAgICBpbnQgb2xkQ29kZTsKKyAgICB1bnNpZ25l
ZCBjaGFyIGZpcnN0Q2hhcjsKKyAgICBpbnQgYml0czsgICAgICAgICAgICAgICAgICAvLyBOdW1i
ZXIgb2YgdW5yZWFkIGJpdHMgaW4gImRhdHVtIi4KKyAgICBpbnQgZGF0dW07ICAgICAgICAgICAg
ICAgICAvLyAzMi1iaXQgaW5wdXQgYnVmZmVyLgorCisgICAgVmVjdG9yPHVuc2lnbmVkIHNob3J0
PiBwcmVmaXg7ICAgICAgICAvLyBMWlcgZGVjb2RpbmcgdGFibGVzLgorICAgIFZlY3Rvcjx1bnNp
Z25lZCBjaGFyPiBzdWZmaXg7ICAgICAgICAgLy8gTFpXIGRlY29kaW5nIHRhYmxlcy4KKyAgICBW
ZWN0b3I8dW5zaWduZWQgY2hhcj4gc3RhY2s7ICAgICAgICAgIC8vIEJhc2Ugb2YgTFpXIGRlY29k
ZXIgc3RhY2suCisKKyAgICBHSUZMWldDb250ZXh0KCkKKyAgICAgICAgOiBzdGFja3AoMCkKKyAg
ICAgICAgLCBjb2RlU2l6ZSgwKQorICAgICAgICAsIGNvZGVNYXNrKDApCisgICAgICAgICwgY2xl
YXJDb2RlKDApCisgICAgICAgICwgYXZhaWwoMCkKKyAgICAgICAgLCBvbGRDb2RlKDApCisgICAg
ICAgICwgZmlyc3RDaGFyKDApCisgICAgICAgICwgYml0cygwKQorICAgICAgICAsIGRhdHVtKDAp
CisgICAgeyB9Cit9OworCitjbGFzcyBHSUZJbWFnZVJlYWRlciB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgR0lGSW1hZ2VSZWFkZXIoR0lGSW1hZ2VEZWNvZGVy
KiBjbGllbnQpOwogCi0gICAgdW5zaWduZWQgZGVsYXlfdGltZTsgICAgICAgIC8qIERpc3BsYXkg
dGltZSwgaW4gbWlsbGlzZWNvbmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgdGhpcyBpbWFnZSBpbiBhIG11bHRpLWltYWdlIEdJRiAqLworICAgIHZvaWQgc2V0RGF0
YShQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSkgeyBtX2RhdGEgPSBkYXRhOyB9CisgICAg
Ym9vbCBkZWNvZGUoR0lGSW1hZ2VEZWNvZGVyOjpHSUZRdWVyeSBxdWVyeSwgaW50IGhhbHRBdEZy
YW1lKTsKIAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGdsb2JhbENvbG9yTWFwKCkgY29uc3Q7
CisgICAgdW5zaWduZWQgZ2xvYmFsQ29sb3JNYXBTaXplKCkgY29uc3QgeyByZXR1cm4gbV9nbG9i
YWxDb2xvck1hcFNpemU7IH0KIAotICAgIHVuc2lnbmVkIHNob3J0KiAgcHJlZml4OyAgICAgICAg
ICAvKiBMWlcgZGVjb2RpbmcgdGFibGVzICovCi0gICAgdW5zaWduZWQgY2hhciogICBzdWZmaXg7
ICAgICAgICAgIC8qIExaVyBkZWNvZGluZyB0YWJsZXMgKi8KLSAgICB1bnNpZ25lZCBjaGFyKiAg
IHN0YWNrOyAgICAgICAgICAgLyogQmFzZSBvZiBMWlcgZGVjb2RlciBzdGFjayAqLworICAgIGNv
bnN0IHVuc2lnbmVkIGNoYXIqIGxvY2FsQ29sb3JNYXAoY29uc3QgR0lGRnJhbWVDb250ZXh0Kikg
Y29uc3Q7CiAKKyAgICBpbnQgaW1hZ2VzQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlc0Nv
dW50OyB9CisgICAgaW50IGxvb3BDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9vcENvdW50OyB9
CiAKLSAgICBHSUZGcmFtZVJlYWRlcigpIHsKLSAgICAgICAgc3RhY2twID0gMDsKLSAgICAgICAg
ZGF0YXNpemUgPSBjb2Rlc2l6ZSA9IGNvZGVtYXNrID0gY2xlYXJfY29kZSA9IGF2YWlsID0gb2xk
Y29kZSA9IDA7Ci0gICAgICAgIGZpcnN0Y2hhciA9IDA7Ci0gICAgICAgIGJpdHMgPSBkYXR1bSA9
IDA7Ci0gICAgICAgIGlwYXNzID0gMDsKLSAgICAgICAgcm93c19yZW1haW5pbmcgPSBpcm93ID0g
MDsKLSAgICAgICAgcm93YnVmID0gcm93ZW5kID0gcm93cCA9IDA7Citwcml2YXRlOgorICAgIGJv
b2wgZGVjb2RlKHVuc2lnbmVkIGRhdGFQb3NpdGlvbiwgdW5zaWduZWQgYnl0ZXNUb0RlY29kZSwg
R0lGSW1hZ2VEZWNvZGVyOjpHSUZRdWVyeSBxdWVyeSwgaW50IGhhbHRBdEZyYW1lKTsKIAotICAg
ICAgICB4X29mZnNldCA9IHlfb2Zmc2V0ID0gd2lkdGggPSBoZWlnaHQgPSAwOwotICAgICAgICB0
cGl4ZWwgPSAwOwotICAgICAgICBkaXNwb3NhbF9tZXRob2QgPSBXZWJDb3JlOjpJbWFnZUZyYW1l
OjpEaXNwb3NlTm90U3BlY2lmaWVkOworICAgIC8vIEluaXRpYWxpemUgTFpXIGRlY29kaW5nIGNv
bnRleHQuCisgICAgYm9vbCBwcmVwYXJlTFpXQ29udGV4dChpbnQgZGF0YVNpemUpOwogCi0gICAg
ICAgIGxvY2FsX2NvbG9ybWFwID0gMDsKLSAgICAgICAgbG9jYWxfY29sb3JtYXBfc2l6ZSA9IDA7
Ci0gICAgICAgIGlzX2xvY2FsX2NvbG9ybWFwX2RlZmluZWQgPSBwcm9ncmVzc2l2ZV9kaXNwbGF5
ID0gaXNfdHJhbnNwYXJlbnQgPSBpbnRlcmxhY2VkID0gZmFsc2U7CisgICAgLy8gRGVjb2RlIG9u
ZSBMWlcgYmxvY2sgd2l0aCB0aGUgZnJhbWUuCisgICAgYm9vbCBkZWNvZGVMWldCbG9jayh1bnNp
Z25lZCBibG9ja1Bvc2l0aW9uLCB1bnNpZ25lZCBieXRlc1RvRGVjb2RlLCBHSUZGcmFtZUNvbnRl
eHQqKTsKIAotICAgICAgICBkZWxheV90aW1lID0gMDsKKyAgICAvLyBEZWNvZGUgZGVmZXJyZWQg
TFpXIGJsb2NrcyBpbiB0aGUgZnJhbWUuCisgICAgYm9vbCBkZWNvZGVQcmV2aW91c0xaV0Jsb2Nr
cyhHSUZGcmFtZUNvbnRleHQqKTsKIAotICAgICAgICBwcmVmaXggPSAwOwotICAgICAgICBzdWZm
aXggPSBzdGFjayA9IDA7Ci0gICAgfQotICAgIAotICAgIH5HSUZGcmFtZVJlYWRlcigpIHsKLSAg
ICAgICAgZGVsZXRlIFtdcm93YnVmOwotICAgICAgICBkZWxldGUgW11sb2NhbF9jb2xvcm1hcDsK
LSAgICAgICAgZGVsZXRlIFtdcHJlZml4OwotICAgICAgICBkZWxldGUgW11zdWZmaXg7Ci0gICAg
ICAgIGRlbGV0ZSBbXXN0YWNrOwotICAgIH0KLX07CisgICAgLy8gU2F2ZSBpbmZvcm1hdGlvbiBm
b3IgZGVjb2Rpbmcgb25lIExaVyBibG9jayBpbnRvIHRoZSBmcmFtZSBjb250ZXh0LiBUaGUgYmxv
Y2sgd2lsbCBiZSBkZWNvZGVkIGxhdGVyLgorICAgIHZvaWQgZGVmZXJMWldCbG9jayh1bnNpZ25l
ZCBibG9ja1Bvc2l0aW9uLCB1bnNpZ25lZCBieXRlc1RvRGVjb2RlLCBHSUZGcmFtZUNvbnRleHQq
KTsKIAotc3RydWN0IEdJRkltYWdlUmVhZGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXIqIGNsaWVudHB0cjsKLSAg
ICAvKiBQYXJzaW5nIHN0YXRlIG1hY2hpbmUgKi8KLSAgICBnc3RhdGUgc3RhdGU7ICAgICAgICAg
ICAgICAgICAgICAgIC8qIEN1cnJlbnQgZGVjb2RlciBtYXN0ZXIgc3RhdGUgKi8KLSAgICB1bnNp
Z25lZCBieXRlc190b19jb25zdW1lOyAgICAgICAgIC8qIE51bWJlciBvZiBieXRlcyB0byBhY2N1
bXVsYXRlICovCi0gICAgdW5zaWduZWQgYnl0ZXNfaW5faG9sZDsgICAgICAgICAgICAvKiBieXRl
cyBhY2N1bXVsYXRlZCBzbyBmYXIqLwotICAgIHVuc2lnbmVkIGNoYXIgaG9sZFtNQVhfSE9MRF9T
SVpFXTsgLyogQWNjdW11bGF0aW9uIGJ1ZmZlciAqLwotICAgIHVuc2lnbmVkIGNoYXIqIGdsb2Jh
bF9jb2xvcm1hcDsgICAgLyogKDMqIE1BWF9DT0xPUlMgaW4gc2l6ZSkgRGVmYXVsdCBjb2xvcm1h
cCBpZiBsb2NhbCBub3Qgc3VwcGxpZWQsIDMgYnl0ZXMgZm9yIGVhY2ggY29sb3IgICovCi0gICAg
Ci0gICAgIC8qIEdsb2JhbCAobXVsdGktaW1hZ2UpIHN0YXRlICovCi0gICAgaW50IHNjcmVlbl9i
Z2NvbG9yOyAgICAgICAgIC8qIExvZ2ljYWwgc2NyZWVuIGJhY2tncm91bmQgY29sb3IgKi8KLSAg
ICBpbnQgdmVyc2lvbjsgICAgICAgICAgICAgICAgLyogRWl0aGVyIDg5IGZvciBHSUY4OSBvciA4
NyBmb3IgR0lGODcgKi8KLSAgICB1bnNpZ25lZCBzY3JlZW5fd2lkdGg7ICAgICAgIC8qIExvZ2lj
YWwgc2NyZWVuIHdpZHRoICYgaGVpZ2h0ICovCi0gICAgdW5zaWduZWQgc2NyZWVuX2hlaWdodDsK
LSAgICBpbnQgZ2xvYmFsX2NvbG9ybWFwX3NpemU7ICAgLyogU2l6ZSBvZiBnbG9iYWwgY29sb3Jt
YXAgYXJyYXkuICovCi0gICAgdW5zaWduZWQgaW1hZ2VzX2RlY29kZWQ7ICAgIC8qIENvdW50cyBj
b21wbGV0ZWQgZnJhbWVzIGZvciBhbmltYXRlZCBHSUZzICovCi0gICAgaW50IGltYWdlc19jb3Vu
dDsgICAgICAgICAgIC8qIENvdW50ZWQgYWxsIGZyYW1lcyBzZWVuIHNvIGZhciAoaW5jbHVkaW5n
IGluY29tcGxldGUgZnJhbWVzKSAqLwotICAgIGludCBsb29wX2NvdW50OyAgICAgICAgICAgICAv
KiBOZXRzY2FwZSBzcGVjaWZpYyBleHRlbnNpb24gYmxvY2sgdG8gY29udHJvbAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGFuaW1hdGlvbiBsb29wcyBh
IEdJRiByZW5kZXJzLiAqLworICAgIHZvaWQgc2V0UmVtYWluaW5nQnl0ZXModW5zaWduZWQgYnl0
ZXNMZWZ0KTsKKworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVy
biByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihtX2RhdGEtPmRhdGEoKSk7
IH0KKworICAgIEdJRkltYWdlRGVjb2RlciogbV9jbGllbnQ7CisKKyAgICAvLyBQYXJzaW5nIHN0
YXRlIG1hY2hpbmUuCisgICAgZ3N0YXRlIG1fc3RhdGU7ICAgICAgICAgICAgICAgLy8gQ3VycmVu
dCBkZWNvZGVyIG1hc3RlciBzdGF0ZS4KKyAgICB1bnNpZ25lZCBtX2J5dGVzRm9yTmV4dEJsb2Nr
OyAvLyBOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCBmcm9tIG5leHQgYmxvY2suCisgICAgdW5zaWdu
ZWQgbV9ieXRlc1JlYWQ7ICAgICAgICAgLy8gTnVtYmVyIG9mIGJ5dGVzIHJlYWQgZnJvbSB8ZGF0
YXwuCiAgICAgCi0gICAgLy8gTm90IHJlYWxseSBnbG9iYWwsIGJ1dCBjb252ZW5pZW50IHRvIGxv
Y2F0ZSBoZXJlLgotICAgIGludCBjb3VudDsgICAgICAgICAgICAgICAgICAvKiBSZW1haW5pbmcg
IyBieXRlcyBpbiBzdWItYmxvY2sgKi8KKyAgICAvLyBHbG9iYWwgKG11bHRpLWltYWdlKSBzdGF0
ZS4KKyAgICBpbnQgbV9zY3JlZW5CZ0NvbG9yOyAgICAgICAgICAvLyBMb2dpY2FsIHNjcmVlbiBi
YWNrZ3JvdW5kIGNvbG9yLgorICAgIGludCBtX3ZlcnNpb247ICAgICAgICAgICAgICAgIC8vIEVp
dGhlciA4OSBmb3IgR0lGODkgb3IgODcgZm9yIEdJRjg3LgorICAgIHVuc2lnbmVkIG1fc2NyZWVu
V2lkdGg7ICAgICAgIC8vIExvZ2ljYWwgc2NyZWVuIHdpZHRoICYgaGVpZ2h0LgorICAgIHVuc2ln
bmVkIG1fc2NyZWVuSGVpZ2h0OworICAgIHVuc2lnbmVkIG1fZ2xvYmFsQ29sb3JNYXBTaXplOyAg
ICAgICAvLyBTaXplIG9mIGdsb2JhbCBjb2xvcm1hcCBhcnJheS4KKyAgICB1bnNpZ25lZCBtX2ds
b2JhbENvbG9yTWFwUG9zaXRpb247ICAgLy8gUG9zaXRpb24gb2YgdGhlIGZpcnN0IGJ5dGUgZm9y
IGdsb2JhbCBjb2xvcm1hcCBpbiBkYXRhIHN0cmVhbS4KKyAgICBpbnQgbV9pbWFnZXNEYXRhQ29t
cGxldGU7ICAgICAvLyBDb3VudHMgY29tcGxldGVkIGZyYW1lcyBmb3IgYW5pbWF0ZWQgR0lGcy4K
KyAgICBpbnQgbV9pbWFnZXNDb3VudDsgICAgICAgICAgICAvLyBDb3VudGVkIGFsbCBmcmFtZXMg
c2VlbiBzbyBmYXIgKGluY2x1ZGluZyBpbmNvbXBsZXRlIGZyYW1lcykuCisgICAgaW50IG1fbG9v
cENvdW50OyAgICAgICAgICAgICAgLy8gTmV0c2NhcGUgc3BlY2lmaWMgZXh0ZW5zaW9uIGJsb2Nr
IHRvIGNvbnRyb2wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbnVt
YmVyIG9mIGFuaW1hdGlvbiBsb29wcyBhIEdJRiByZW5kZXJzLgorICAgIGJvb2wgbV9pbWFnZUNv
bXBsZXRlOyAgICAgICAgIC8vIFRydWUgaWYgZW50aXJlIGltYWdlIGlzIHBhcnNlZCBhbmQgdGhl
IGVuZCBpcyByZWFjaGVkLgogICAgIAotICAgIEdJRkZyYW1lUmVhZGVyKiBmcmFtZV9yZWFkZXI7
Ci0KLSAgICBHSUZJbWFnZVJlYWRlcihXZWJDb3JlOjpHSUZJbWFnZURlY29kZXIqIGNsaWVudCA9
IDApIHsKLSAgICAgICAgY2xpZW50cHRyID0gY2xpZW50OwotICAgICAgICBzdGF0ZSA9IGdpZl90
eXBlOwotICAgICAgICBieXRlc190b19jb25zdW1lID0gNjsKLSAgICAgICAgYnl0ZXNfaW5faG9s
ZCA9IDA7Ci0gICAgICAgIGZyYW1lX3JlYWRlciA9IDA7Ci0gICAgICAgIGdsb2JhbF9jb2xvcm1h
cCA9IDA7Ci0KLSAgICAgICAgc2NyZWVuX2JnY29sb3IgPSB2ZXJzaW9uID0gMDsKLSAgICAgICAg
c2NyZWVuX3dpZHRoID0gc2NyZWVuX2hlaWdodCA9IDA7Ci0gICAgICAgIGdsb2JhbF9jb2xvcm1h
cF9zaXplID0gaW1hZ2VzX2RlY29kZWQgPSBpbWFnZXNfY291bnQgPSAwOwotICAgICAgICBsb29w
X2NvdW50ID0gY0xvb3BDb3VudE5vdFNlZW47Ci0gICAgICAgIGNvdW50ID0gMDsKLSAgICB9Ci0K
LSAgICB+R0lGSW1hZ2VSZWFkZXIoKSB7Ci0gICAgICAgIGRlbGV0ZSBbXWdsb2JhbF9jb2xvcm1h
cDsKLSAgICAgICAgZ2xvYmFsX2NvbG9ybWFwID0gMDsKLSAgICAgICAgZGVsZXRlIGZyYW1lX3Jl
YWRlcjsKLSAgICAgICAgZnJhbWVfcmVhZGVyID0gMDsKLSAgICB9Ci0KLSAgICBib29sIHJlYWQo
Y29uc3QgdW5zaWduZWQgY2hhciAqIGJ1ZiwgdW5zaWduZWQgaW50IG51bWJ5dGVzLCAKLSAgICAg
ICAgICAgICAgV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpHSUZRdWVyeSBxdWVyeSA9IFdlYkNv
cmU6OkdJRkltYWdlRGVjb2Rlcjo6R0lGRnVsbFF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSA9
IC0xKTsKKyAgICAvLyBHSUYgaW1hZ2UgY29udGVudCB0byBkZWNvZGUuCisgICAgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gbV9kYXRhOwogCi1wcml2YXRlOgotICAgIGJvb2wgb3V0cHV0X3JvdygpOwot
ICAgIGJvb2wgZG9fbHp3KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnEpOworICAgIE93blB0cjxHSUZG
cmFtZUNvbnRleHQ+IG1fY3VycmVudEZyYW1lOworICAgIERlcXVlPE93blB0cjxHSUZGcmFtZUNv
bnRleHQ+ID4gbV9wcmV2aW91c0ZyYW1lczsKKworICAgIEdJRkxaV0NvbnRleHQgbV9sendDb250
ZXh0OworCisgICAgLy8gU2luZ2xlIHNjYW5saW5lIHRlbXBvcmFyeSBidWZmZXIuCisgICAgVmVj
dG9yPHVuc2lnbmVkIGNoYXI+IG1fcm93QnVmZmVyOwogfTsKIAorfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186326</attachid>
            <date>2013-02-04 01:59:05 -0800</date>
            <delta_ts>2013-02-04 23:06:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98098-20130204015544.patch</filename>
            <type>text/plain</type>
            <size>81807</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxNzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGZkYTM0ODc2YjI1ZTcw
MmFlYWY1ZGQxMmI2MDA2NWEzYmZjYWE1YS4uZmRkMTVmNDc1MmQ5MTFjNTFjYTRlMTEwOWU3ZGRm
Yjk2Y2Q1MmM1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg5IEBACisyMDEzLTAyLTA0ICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUGFyc2UgR0lGIGltYWdlcyB3
aXRob3V0IGZ1bGwgZGVjb2RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTk4MDk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXByb3ZlIHNldmVyYWwgdGhpbmdzIHdpdGggR0lGIGlt
YWdlIGRlY29kaW5nOgorICAgICAgICAxLiBJbmNyZW1lbnRhbCBmaWxlIHBhcnNpbmcuCisgICAg
ICAgICAgIEdJRiBkZWNvZGVyIHVzZWQgdG8gcmUtcGFyc2UgZW50aXJlIGZpbGUgd2hlbmV2ZXIg
bW9yZSBkYXRhIGFycml2ZXMuCisgICAgICAgICAgIFRoaXMgYmVoYXZpb3IgaXMgd2FzdGVmdWwg
YW5kIHNsb3dzIGRvd24gaW5pdGlhbCBwYWdlIGxvYWQuCisKKyAgICAgICAgMi4gRnJhbWUgaGVh
ZGVyIHBhcnNpbmcgd2l0aG91dCBmdWxsIGRlY29kaW5nLgorICAgICAgICAgICBBbmltYXRpb24g
Y29udHJvbCBkb2Vzbid0IHJlcXVpcmUgZnVsbCBkZWNvZGluZyBhbnltb3JlLiBUaGlzCisgICAg
ICAgICAgIGVuYWJsZXMgZGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcgZXZlbiBmb3IgYW5pbWF0ZWQg
R0lGcy4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4gSSdtIGdvbm5hIHdyaXRlIHNv
bWUgdGVzdHMgYmVmb3JlIHN1Ym1pdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Jp
dG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFtZUlzQ29t
cGxldGVBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFtZUR1cmF0
aW9uQXRJbmRleCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUR1cmF0aW9uQXRJbmRleCk6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNv
ZGVyOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5oOgorICAgICAgICAoRGVmZXJyZWRJbWFn
ZURlY29kZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lSXNDb21wbGV0ZUF0
SW5kZXgpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChJbWFnZURlY29kZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpmcmFtZUR1cmF0aW9uQXRJbmRleCk6CisgICAgICAgICog
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OkdJRkltYWdlRGVjb2Rlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R0lG
SW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVj
b2Rlcjo6cmVwZXRpdGlvbkNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rl
cjo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgpOgorICAgICAg
ICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R0lGSW1hZ2VEZWNvZGVyOjpmcmFtZURhdGFDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHSUZJbWFnZURlY29kZXI6OmdpZlBhcnNlQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6
R0lGSW1hZ2VEZWNvZGVyOjpnaWZEZWNvZGVDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
SUZJbWFnZURlY29kZXI6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29k
ZXI6OmluaXRGcmFtZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6
OmV4cGFuZEZyYW1lQnVmZmVyQ2FjaGUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
R0lGSW1hZ2VEZWNvZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYv
R0lGSW1hZ2VSZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpvdXRwdXRfcm93KToKKyAgICAgICAgKFdlYkNvcmU6OmRvX2x6dyk6CisgICAgICAgIChXZWJD
b3JlOjpHSUZJbWFnZVJlYWRlcjo6R0lGSW1hZ2VSZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R0lGSW1hZ2VSZWFkZXI6OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZVJlYWRl
cjo6Z2xvYmFsQ29sb3JNYXApOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VSZWFkZXI6Omxv
Y2FsQ29sb3JNYXApOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VSZWFkZXI6OnByZXBhcmVM
WldDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlUmVhZGVyOjpkZWNvZGVMWldC
bG9jayk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlUHJldmlvdXNM
WldCbG9ja3MpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VSZWFkZXI6OmRlZmVyTFpXQmxv
Y2spOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VSZWFkZXI6OnNldFJlbWFpbmluZ0J5dGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlUmVhZGVyOjpyZXBvcnRQYXJzZUVycm9yKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaDoK
KyAgICAgICAgKEdJRkxaV0Jsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkxaV0Jsb2NrOjpH
SUZMWldCbG9jayk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEdJRkZyYW1lQ29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpHSUZGcmFtZUNvbnRleHQ6OkdJRkZyYW1lQ29udGV4dCk6
CisgICAgICAgIChHSUZMWldDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkxaV0NvbnRl
eHQ6OkdJRkxaV0NvbnRleHQpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R0lGSW1hZ2VSZWFkZXI6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R0lG
SW1hZ2VSZWFkZXI6Omdsb2JhbENvbG9yTWFwU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJ
bWFnZVJlYWRlcjo6bG9jYWxDb2xvck1hcFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1h
Z2VSZWFkZXI6OmltYWdlc0NvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlUmVhZGVy
Ojpsb29wQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VSZWFkZXI6OmRhdGEpOgor
CiAyMDEzLTAyLTAyICBKdW4gSmlhbmcgIDxqdW4uYS5qaWFuZ0BpbnRlbC5jb20+CiAKICAgICAg
ICAgT3B0aW1pemUgc29tZSBvcGVyYXRpb25zIGZvciBmbG9hdCB0eXBlIGluIHRleHR1cmUgZm9y
bWF0IGNvbnZlcnNpb25zIG9mIFdlYkdMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDMw
ZGMwMzc5OTY1NGQxNmU4OGYwMWIwMDBlMzhjZWUxMzBkOTIxZjUuLjMxZTUxYTljZWMyY2Y4MGFl
YjM4Mjc5NWQ5YzI4NWQ0MmIzODQ3MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTggQEAKKzIwMTMtMDItMDQgIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4K
KworICAgICAgICBQYXJzZSBHSUYgaW1hZ2VzIHdpdGhvdXQgZnVsbCBkZWNvZGluZworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTgwOTgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXA6Cisg
ICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMvR0lGSW1hZ2VEZWNvZGVyVGVz
dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6cmVhZEZp
bGUpOgorICAgICAgICAoV2ViS2l0OjpURVNUKToKKyAgICAgICAgKiB0ZXN0cy9kYXRhL2Jyb2tl
bi5naWY6IEFkZGVkLgorCiAyMDEzLTAyLTAxICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcu
Ym90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiAgUm9sbGVkIENocm9taXVtIERF
UFMgdG8gcjE4MDIyMS4gIFJlcXVlc3RlZCBieQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCmluZGV4IGMyODE5N2Q1YjgxZTRlZTJlOTdhMTJj
NmQzZGE3MGFiYjA4MTE2ZTYuLjE1YWNhNDA1NGRhNzIwYzJhMWRmZWM5ZWI2NzNhYjNlMTRkNGUz
ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcElt
YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5jcHAKQEAgLTMwOCwxNiArMzA4LDE2IEBAIE5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpm
cmFtZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogCiBib29sIEJpdG1hcEltYWdlOjpmcmFtZUlzQ29t
cGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKLSAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNo
ZWQoaW5kZXgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1fZnJhbWVzW2lu
ZGV4XS5tX2lzQ29tcGxldGU7CisgICAgaWYgKGluZGV4IDwgbV9mcmFtZXMuc2l6ZSgpICYmIG1f
ZnJhbWVzW2luZGV4XS5tX2hhdmVNZXRhZGF0YSAmJiBtX2ZyYW1lc1tpbmRleF0ubV9pc0NvbXBs
ZXRlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gbV9zb3VyY2UuZnJhbWVJc0Nv
bXBsZXRlQXRJbmRleChpbmRleCk7CiB9CiAKIGZsb2F0IEJpdG1hcEltYWdlOjpmcmFtZUR1cmF0
aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVk
KGluZGV4KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5t
X2R1cmF0aW9uOworICAgIGlmIChpbmRleCA8IG1fZnJhbWVzLnNpemUoKSAmJiBtX2ZyYW1lc1tp
bmRleF0ubV9oYXZlTWV0YWRhdGEpCisgICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9k
dXJhdGlvbjsKKyAgICByZXR1cm4gbV9zb3VyY2UuZnJhbWVEdXJhdGlvbkF0SW5kZXgoaW5kZXgp
OwogfQogCiBOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3Vy
Y2UuY3BwCmluZGV4IDkxNzQwMGVjNmRjZjNiOTY5MjYwMDYxODA4OWI1Y2Q3NDA1ZWMyNzAuLjJh
YWMzNTVlNjMyMDRlNGI0OTgwMGI3ZGMxZjQzOTZiZDI5OGEwMzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKQEAgLTE2NSwxNSArMTY1
LDExIEBAIGZsb2F0IEltYWdlU291cmNlOjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5k
ZXgpCiAgICAgaWYgKCFtX2RlY29kZXIpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgSW1hZ2VG
cmFtZSogYnVmZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOwotICAg
IGlmICghYnVmZmVyIHx8IGJ1ZmZlci0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0
eSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KICAgICAvLyBNYW55IGFubm95aW5nIGFkcyBzcGVjaWZ5
IGEgMCBkdXJhdGlvbiB0byBtYWtlIGFuIGltYWdlIGZsYXNoIGFzIHF1aWNrbHkgYXMgcG9zc2li
bGUuCiAgICAgLy8gV2UgZm9sbG93IEZpcmVmb3gncyBiZWhhdmlvciBhbmQgdXNlIGEgZHVyYXRp
b24gb2YgMTAwIG1zIGZvciBhbnkgZnJhbWVzIHRoYXQgc3BlY2lmeQogICAgIC8vIGEgZHVyYXRp
b24gb2YgPD0gMTAgbXMuIFNlZSA8cmRhcjovL3Byb2JsZW0vNzY4OTMwMD4gYW5kIDxodHRwOi8v
d2Via2l0Lm9yZy9iLzM2MDgyPgogICAgIC8vIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICAgIGNv
bnN0IGZsb2F0IGR1cmF0aW9uID0gYnVmZmVyLT5kdXJhdGlvbigpIC8gMTAwMC4wZjsKKyAgICBj
b25zdCBmbG9hdCBkdXJhdGlvbiA9IG1fZGVjb2Rlci0+ZnJhbWVEdXJhdGlvbkF0SW5kZXgoaW5k
ZXgpIC8gMTAwMC4wZjsKICAgICBpZiAoZHVyYXRpb24gPCAwLjAxMWYpCiAgICAgICAgIHJldHVy
biAwLjEwMGY7CiAgICAgcmV0dXJuIGR1cmF0aW9uOwpAQCAtMTk1LDkgKzE5MSw3IEBAIGJvb2wg
SW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogewogICAg
IGlmICghbV9kZWNvZGVyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBJbWFnZUZyYW1l
KiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7Ci0gICAgcmV0
dXJuIGJ1ZmZlciAmJiBidWZmZXItPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxl
dGU7CisgICAgcmV0dXJuIG1fZGVjb2Rlci0+ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCk7
CiB9CiAKIHVuc2lnbmVkIEltYWdlU291cmNlOjpmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QgaW5k
ZXgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3Vy
Y2UuaAppbmRleCA2NmE4YTBhNTFjMzlmYjkyNjhiMjIxYTQ3YjY4NzUwMTU5M2JjNGEzLi44Njkz
Y2M5MjU4YTVjZGExZTM4ZmM1NTljNDBhNDdhM2I3OTRjN2U1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKQEAgLTE1Myw3ICsxNTMsMTAgQEAg
cHVibGljOgogCiAgICAgZmxvYXQgZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90KTsKICAgICBi
b29sIGZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCk7IC8vIFdoZXRoZXIgb3Igbm90IHRoZSBm
cmFtZSBhY3R1YWxseSB1c2VkIGFueSBhbHBoYS4KLSAgICBib29sIGZyYW1lSXNDb21wbGV0ZUF0
SW5kZXgoc2l6ZV90KTsgLy8gV2hldGhlciBvciBub3QgdGhlIGZyYW1lIGlzIGNvbXBsZXRlbHkg
ZGVjb2RlZC4KKworICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGVub3VnaCBkYXRhIHRv
IGNvbXBsZXRlbHkgZGVjb2RlIHRoZSBmcmFtZSBvcgorICAgIC8vIHRoZSBmcmFtZSBpcyBhbHJl
YWR5IGRlY29kZWQgY29tcGxldGVseS4KKyAgICBib29sIGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgo
c2l6ZV90KTsKICAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uQXRJbmRleChzaXplX3Qp
IGNvbnN0OyAvLyBFWElGIGltYWdlIG9yaWVudGF0aW9uCiAKICAgICAvLyBSZXR1cm4gdGhlIG51
bWJlciBvZiBieXRlcyBpbiB0aGUgZGVjb2RlZCBmcmFtZS4gSWYgdGhlIGZyYW1lIGlzIG5vdCB5
ZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0RlZmVycmVkSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmNwcAppbmRleCAwNTBmNDM5ZTU5NmNi
OTU1M2JhMWVkNzE1ZDg5ZjdiOTM4M2I5MmU5Li4wZDQxYTEwZWY3ZDVkYjU2NDI0YWUzYmVhZmE0
NDhmMjM5Y2M1Yzc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuY3BwCkBAIC0x
NzksNiArMTc5LDEyIEBAIHZvaWQgRGVmZXJyZWRJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZm
ZXJDYWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSkKICAgICAgICAgbV9hY3R1YWxEZWNvZGVy
LT5jbGVhckZyYW1lQnVmZmVyQ2FjaGUoY2xlYXJCZWZvcmVGcmFtZSk7CiB9CiAKK2Zsb2F0IERl
ZmVycmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCit7
CisgICAgLy8gRklYTUU6IEhhbmRsZSBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4KKyAgICByZXR1
cm4gbV9hY3R1YWxEZWNvZGVyLT5mcmFtZUR1cmF0aW9uQXRJbmRleChpbmRleCk7Cit9CisKIGJv
b2wgRGVmZXJyZWRJbWFnZURlY29kZXI6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRl
eCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogU3luY2hyb25pemUgdGhpcyBzdGF0ZSB3aXRoIElt
YWdlRGVjb2RpbmdTdG9yZSB3aGVuIGltYWdlIGlzCkBAIC0xODcsNiArMTkzLDEyIEBAIGJvb2wg
RGVmZXJyZWRJbWFnZURlY29kZXI6OmZyYW1lSGFzQWxwaGFBdEluZGV4KHNpemVfdCBpbmRleCkg
Y29uc3QKICAgICByZXR1cm4gbV9hY3R1YWxEZWNvZGVyID8gbV9hY3R1YWxEZWNvZGVyLT5mcmFt
ZUhhc0FscGhhQXRJbmRleChpbmRleCkgOiB0cnVlOwogfQogCitib29sIERlZmVycmVkSW1hZ2VE
ZWNvZGVyOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkKK3sKKyAgICAvLyBG
SVhNRTogSGFuZGxlIGRlZmVycmVkIGltYWdlIGRlY29kaW5nLgorICAgIHJldHVybiBtX2FjdHVh
bERlY29kZXItPmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoaW5kZXgpOworfQorCiB1bnNpZ25lZCBE
ZWZlcnJlZEltYWdlRGVjb2Rlcjo6ZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25z
dAogewogICAgIC8vIElmIGZyYW1lIGRlY29kaW5nIGlzIGRlZmVycmVkIHRoZW4gaXQgaXMgbm90
IG1hbmFnZWQgYnkgTWVtb3J5Q2FjaGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5oCmlu
ZGV4IDVkZjkyMzU0YmRkZDA5YzhkYjNjMTE2ZjZhNTdiYjk5Njc0YjEwMzcuLmE5MTg0YjNlNTUx
YTY1MjYwMWY5ODBlNzBkMGNiMWRhYTFmMWRhYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURl
Y29kZXIuaApAQCAtNjEsNyArNjEsOSBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IGZyYW1lQ291bnQo
KTsKICAgICBpbnQgcmVwZXRpdGlvbkNvdW50KCkgY29uc3Q7CiAgICAgdm9pZCBjbGVhckZyYW1l
QnVmZmVyQ2FjaGUoc2l6ZV90KTsKKyAgICBmbG9hdCBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXpl
X3QpOwogICAgIGJvb2wgZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdDsK
KyAgICBib29sIGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90KTsKICAgICB1bnNpZ25lZCBm
cmFtZUJ5dGVzQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0OwogICAgIEltYWdlT3JpZW50YXRp
b24gb3JpZW50YXRpb24oKSBjb25zdDsKICAgICBib29sIGhvdFNwb3QoSW50UG9pbnQmKSBjb25z
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0lt
YWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9J
bWFnZURlY29kZXIuY3BwCmluZGV4IDA2N2M1ZGUzNmFlNGQ1MDk5ODU2OGQ4YWNlZWM3Y2FhOGU0
MTUwYTQuLjlhZDEzNTg0MWU3NzEzMTgyNWVkYjAzZDI2MGE4ZDg5ZmIzZGFjNzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNv
ZGVyLmNwcApAQCAtMjk0LDYgKzI5NCwxMyBAQCB1bnNpZ25lZCBJbWFnZURlY29kZXI6OmZyYW1l
Qnl0ZXNBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKICAgICByZXR1cm4gbV9zaXplLmFyZWEo
KSAqIHNpemVvZihJbWFnZUZyYW1lOjpQaXhlbERhdGEpOwogfQogCitib29sIEltYWdlRGVjb2Rl
cjo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCit7CisgICAgaWYgKG1fZnJh
bWVCdWZmZXJDYWNoZS5zaXplKCkgPD0gaW5kZXgpCisgICAgICAgIHJldHVybiBpc0FsbERhdGFS
ZWNlaXZlZCgpOworICAgIHJldHVybiBtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhdLnN0YXR1cygp
ID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGU7Cit9CisKIHZvaWQgSW1hZ2VEZWNvZGVyOjpw
cmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKQogewogICAgIG1fc2NhbGVkID0gZmFsc2U7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURl
Y29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVj
b2Rlci5oCmluZGV4IDJlMGI1N2YxZDIzMTM1OTJjM2Q4NjQ3MzllM2I0YTJjYjVkNDk5OTMuLmEw
OGUyYzA3YWY0NDBhNDFhOGQwYTAzZWMzZjBmY2UwZjkzZTMyM2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCkBAIC0z
MjksNiArMzI5LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gTnVtYmVyIG9m
IGJ5dGVzIGluIHRoZSBkZWNvZGVkIGZyYW1lIHJlcXVlc3RlZC4gUmV0dXJuIDAgaWYgbm90IHll
dCBkZWNvZGVkLgogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGZyYW1lQnl0ZXNBdEluZGV4KHNp
emVfdCkgY29uc3Q7CiAKKyAgICAgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgZW5vdWdo
IGRhdGEgdG8gY29tcGxldGVseSBkZWNvZGUgdGhlIGZyYW1lIG9yIHRoZQorICAgICAgICAvLyBm
cmFtZSBoYXMgYWxyZWFkeSBiZWVuIGRlY29kZWQuCisgICAgICAgIHZpcnR1YWwgYm9vbCBmcmFt
ZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRleCk7CisKKyAgICAgICAgdmlydHVhbCBmbG9h
dCBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIDA7IH0KKwogICAg
ICAgICB2b2lkIHNldElnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKGJvb2wgZmxhZykgeyBtX2ln
bm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlID0gZmxhZzsgfQogICAgICAgICBib29sIGlnbm9yZXNH
YW1tYUFuZENvbG9yUHJvZmlsZSgpIGNvbnN0IHsgcmV0dXJuIG1faWdub3JlR2FtbWFBbmRDb2xv
clByb2ZpbGU7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAppbmRleCA4ZmM0YTlhNTMw
OWZmODE5ZDFmODk4YjMzODFhOTFmNzc5MTJiMWU1Li5hNjBmYTkyNTljZDVkY2VkMTI3ZmNjMjBl
YTQ1YjhjNGMyNmFlZjAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcApAQCAtMzUsOSAr
MzUsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogR0lGSW1hZ2VEZWNvZGVyOjpHSUZJbWFnZURl
Y29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uIGFscGhhT3B0aW9uLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlT3B0
aW9uIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQogICAgIDogSW1hZ2VEZWNvZGVyKGFscGhh
T3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKLSAgICAsIG1fYWxyZWFkeVNjYW5u
ZWRUaGlzRGF0YUZvckZyYW1lQ291bnQodHJ1ZSkKICAgICAsIG1fcmVwZXRpdGlvbkNvdW50KGNB
bmltYXRpb25Mb29wT25jZSkKLSAgICAsIG1fcmVhZE9mZnNldCgwKQorICAgICwgbV9pc0ZyYW1l
Q291bnRGaW5hbChmYWxzZSkKKyAgICAsIG1fZnJhbWVDb3VudCgwKQorICAgICwgbV9sYXN0RGF0
YUNvbXBsZXRlRnJhbWVJbmRleCgwKQogewogfQogCkBAIC01MCwxMCArNTEsMTAgQEAgdm9pZCBH
SUZJbWFnZURlY29kZXI6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29sIGFsbERhdGFS
ZWNlaXZlZCkKICAgICBpZiAoZmFpbGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEltYWdl
RGVjb2Rlcjo6c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworICAgIGlmIChtX3JlYWRl
cikKKyAgICAgICAgbV9yZWFkZXItPnNldERhdGEoZGF0YSk7CiAKLSAgICAvLyBXZSBuZWVkIHRv
IHJlc2NhbiB0aGUgZnJhbWUgY291bnQsIGFzIHRoZSBuZXcgZGF0YSBtYXkgaGF2ZSBjaGFuZ2Vk
IGl0LgotICAgIG1fYWxyZWFkeVNjYW5uZWRUaGlzRGF0YUZvckZyYW1lQ291bnQgPSBmYWxzZTsK
KyAgICBJbWFnZURlY29kZXI6OnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKIH0KIAog
Ym9vbCBHSUZJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpCkBAIC03OCwyMSArNzksMTcg
QEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OnNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVk
IGhlaWdodCkKIAogc2l6ZV90IEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCgpCiB7Ci0gICAg
aWYgKCFtX2FscmVhZHlTY2FubmVkVGhpc0RhdGFGb3JGcmFtZUNvdW50KSB7Ci0gICAgICAgIC8v
IEZJWE1FOiBTY2FubmluZyBhbGwgdGhlIGRhdGEgaGFzIE8obl4yKSBiZWhhdmlvciBpZiB0aGUg
ZGF0YSB3ZXJlIHRvCi0gICAgICAgIC8vIGNvbWUgaW4gcmVhbGx5IHNsb3dseS4gIE1pZ2h0IGJl
IGludGVyZXN0aW5nIHRvIHRyeSB0byBjbG9uZSBvdXIKLSAgICAgICAgLy8gZXhpc3RpbmcgcmVh
ZCBzZXNzaW9uIHRvIHByZXNlcnZlIHN0YXRlLCBidXQgZm9yIG5vdyB3ZSBqdXN0IGNyYXdsCi0g
ICAgICAgIC8vIGFsbCB0aGUgZGF0YS4gIE5vdGUgdGhhdCB0aGlzIGlzIG5vIHdvcnNlIHRoYW4g
d2hhdCBJbWFnZUlPIGRvZXMgb24KLSAgICAgICAgLy8gTWFjIHJpZ2h0IG5vdyAoaXQgYWxzbyBj
cmF3bHMgYWxsIHRoZSBkYXRhIGFnYWluKS4KLSAgICAgICAgR0lGSW1hZ2VSZWFkZXIgcmVhZGVy
KDApOwotICAgICAgICByZWFkZXIucmVhZCgoY29uc3QgdW5zaWduZWQgY2hhciopbV9kYXRhLT5k
YXRhKCksIG1fZGF0YS0+c2l6ZSgpLCBHSUZGcmFtZUNvdW50UXVlcnksIHN0YXRpY19jYXN0PHVu
c2lnbmVkPigtMSkpOwotICAgICAgICBtX2FscmVhZHlTY2FubmVkVGhpc0RhdGFGb3JGcmFtZUNv
dW50ID0gdHJ1ZTsKLSAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZShyZWFkZXIuaW1h
Z2VzX2NvdW50KTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWFkZXIuaW1hZ2VzX2Nv
dW50OyArK2kpCi0gICAgICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGVbaV0uc2V0UHJlbXVsdGlw
bHlBbHBoYShtX3ByZW11bHRpcGx5QWxwaGEpOwotICAgIH0KKyAgICBpZiAobV9pc0ZyYW1lQ291
bnRGaW5hbCkKKyAgICAgICAgcmV0dXJuIG1fZnJhbWVDb3VudDsKIAotICAgIHJldHVybiBtX2Zy
YW1lQnVmZmVyQ2FjaGUuc2l6ZSgpOworICAgIGRlY29kZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
LTEpLCBHSUZGcmFtZUNvdW50UXVlcnkpOworCisgICAgLy8gR0lGSW1hZ2VSZWFkZXIgY2FuIGJl
IGRlbGV0ZWQgaWYgdGhlcmUgd2FzIGEgZmF0YWwgZXJyb3IuCisgICAgaWYgKG1fcmVhZGVyKSB7
CisgICAgICAgIGV4cGFuZEZyYW1lQnVmZmVyQ2FjaGUobV9yZWFkZXItPmltYWdlc0NvdW50KCkp
OworICAgICAgICByZXR1cm4gbV9yZWFkZXItPmltYWdlc0NvdW50KCk7CisgICAgfQorICAgIHJl
dHVybiAwOwogfQogCiBpbnQgR0lGSW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQoKSBjb25z
dApAQCAtMTE2LDggKzExMyw4IEBAIGludCBHSUZJbWFnZURlY29kZXI6OnJlcGV0aXRpb25Db3Vu
dCgpIGNvbnN0CiAgICAgLy8gc2hvdWxkIGNvbnRpbnVlIHRvIHRyZWF0IGl0IGFzIGEgImxvb3Ag
b25jZSIgYW5pbWF0aW9uLiAgV2UgZG9uJ3QgbmVlZAogICAgIC8vIHNwZWNpYWwgY29kZSBoZXJl
IGVpdGhlciwgYmVjYXVzZSBpbiB0aGlzIGNhc2Ugd2UnbGwgbmV2ZXIgY2hhbmdlCiAgICAgLy8g
fG1fcmVwZXRpdGlvbkNvdW50fCBmcm9tIGl0cyBkZWZhdWx0IHZhbHVlLgotICAgIGlmIChtX3Jl
YWRlciAmJiAobV9yZWFkZXItPmxvb3BfY291bnQgIT0gY0xvb3BDb3VudE5vdFNlZW4pKQotICAg
ICAgICBtX3JlcGV0aXRpb25Db3VudCA9IG1fcmVhZGVyLT5sb29wX2NvdW50OworICAgIGlmICht
X3JlYWRlciAmJiAobV9yZWFkZXItPmxvb3BDb3VudCgpICE9IGNMb29wQ291bnROb3RTZWVuKSkK
KyAgICAgICAgbV9yZXBldGl0aW9uQ291bnQgPSBtX3JlYWRlci0+bG9vcENvdW50KCk7CiAgICAg
cmV0dXJuIG1fcmVwZXRpdGlvbkNvdW50OwogfQogCkBAIC0xOTEsNDkgKzE4OCw1OSBAQCB2b2lk
IEdJRkltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCBjbGVhckJlZm9y
ZUZyYW1lKQogICAgIH0KIH0KIAotdm9pZCBHSUZJbWFnZURlY29kZXI6OmRlY29kaW5nSGFsdGVk
KHVuc2lnbmVkIGJ5dGVzTGVmdCkKK2Jvb2wgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUlzQ29tcGxl
dGVBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKLSAgICBtX3JlYWRPZmZzZXQgPSBtX2RhdGEtPnNp
emUoKSAtIGJ5dGVzTGVmdDsKKyAgICBpZiAoZnJhbWVDb3VudCgpIDw9IGluZGV4KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZVtpbmRleF0uc3RhdHVz
KCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgcmV0dXJuIGluZGV4IDw9IG1fbGFzdERhdGFDb21wbGV0ZUZyYW1lSW5kZXg7Cit9CisKK2Zs
b2F0IEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQor
eworICAgIGlmICghZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCkpCisgICAgICAgIHJldHVy
biAwOworICAgIHJldHVybiBtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhdLmR1cmF0aW9uKCk7CiB9
CiAKLWJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFtZUlu
ZGV4LCB1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIsIHVuc2lnbmVkIGNoYXIqIHJvd0VuZCwgdW5z
aWduZWQgcm93TnVtYmVyLCB1bnNpZ25lZCByZXBlYXRDb3VudCwgYm9vbCB3cml0ZVRyYW5zcGFy
ZW50UGl4ZWxzKQorYm9vbCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KGNvbnN0IEdJ
RkZyYW1lQ29udGV4dCogZnJhbWVSZWFkZXIsIHVuc2lnbmVkIGZyYW1lSW5kZXgsIGNvbnN0IFZl
Y3Rvcjx1bnNpZ25lZCBjaGFyPiYgcm93QnVmZmVyLCB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQg
cm93TnVtYmVyLCB1bnNpZ25lZCByZXBlYXRDb3VudCwgYm9vbCB3cml0ZVRyYW5zcGFyZW50UGl4
ZWxzKQogewotICAgIGNvbnN0IEdJRkZyYW1lUmVhZGVyKiBmcmFtZVJlYWRlciA9IG1fcmVhZGVy
LT5mcmFtZV9yZWFkZXI7CiAgICAgLy8gVGhlIHBpeGVsIGRhdGEgYW5kIGNvb3JkaW5hdGVzIHN1
cHBsaWVkIHRvIHVzIGFyZSByZWxhdGl2ZSB0byB0aGUgZnJhbWUncwogICAgIC8vIG9yaWdpbiB3
aXRoaW4gdGhlIGVudGlyZSBpbWFnZSBzaXplLCBpLmUuCiAgICAgLy8gKGZyYW1lUmVhZGVyLT54
X29mZnNldCwgZnJhbWVSZWFkZXItPnlfb2Zmc2V0KS4gIFRoZXJlIGlzIG5vIGd1YXJhbnRlZQot
ICAgIC8vIHRoYXQgKHJvd0VuZCAtIHJvd0J1ZmZlcikgPT0gKHNpemUoKS53aWR0aCgpIC0gZnJh
bWVSZWFkZXItPnhfb2Zmc2V0KSwgc28KKyAgICAvLyB0aGF0IHdpZHRoID09IChzaXplKCkud2lk
dGgoKSAtIGZyYW1lUmVhZGVyLT54X29mZnNldCksIHNvCiAgICAgLy8gd2UgbXVzdCBlbnN1cmUg
d2UgZG9uJ3QgcnVuIG9mZiB0aGUgZW5kIG9mIGVpdGhlciB0aGUgc291cmNlIGRhdGEgb3IgdGhl
CiAgICAgLy8gcm93J3MgWC1jb29yZGluYXRlcy4KICAgICBpbnQgeEJlZ2luID0gdXBwZXJCb3Vu
ZFNjYWxlZFgoZnJhbWVSZWFkZXItPnhfb2Zmc2V0KTsKICAgICBpbnQgeUJlZ2luID0gdXBwZXJC
b3VuZFNjYWxlZFkoZnJhbWVSZWFkZXItPnlfb2Zmc2V0ICsgcm93TnVtYmVyKTsKLSAgICBpbnQg
eEVuZCA9IGxvd2VyQm91bmRTY2FsZWRYKHN0ZDo6bWluKHN0YXRpY19jYXN0PGludD4oZnJhbWVS
ZWFkZXItPnhfb2Zmc2V0ICsgKHJvd0VuZCAtIHJvd0J1ZmZlcikpLCBzaXplKCkud2lkdGgoKSkg
LSAxLCB4QmVnaW4gKyAxKSArIDE7CisgICAgaW50IHhFbmQgPSBsb3dlckJvdW5kU2NhbGVkWChz
dGQ6Om1pbihzdGF0aWNfY2FzdDxpbnQ+KGZyYW1lUmVhZGVyLT54X29mZnNldCArIHdpZHRoKSwg
c2l6ZSgpLndpZHRoKCkpIC0gMSwgeEJlZ2luICsgMSkgKyAxOwogICAgIGludCB5RW5kID0gbG93
ZXJCb3VuZFNjYWxlZFkoc3RkOjptaW4oc3RhdGljX2Nhc3Q8aW50PihmcmFtZVJlYWRlci0+eV9v
ZmZzZXQgKyByb3dOdW1iZXIgKyByZXBlYXRDb3VudCksIHNpemUoKS5oZWlnaHQoKSkgLSAxLCB5
QmVnaW4gKyAxKSArIDE7Ci0gICAgaWYgKCFyb3dCdWZmZXIgfHwgKHhCZWdpbiA8IDApIHx8ICh5
QmVnaW4gPCAwKSB8fCAoeEVuZCA8PSB4QmVnaW4pIHx8ICh5RW5kIDw9IHlCZWdpbikpCisgICAg
aWYgKCh4QmVnaW4gPCAwKSB8fCAoeUJlZ2luIDwgMCkgfHwgKHhFbmQgPD0geEJlZ2luKSB8fCAo
eUVuZCA8PSB5QmVnaW4pKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIEdldCB0aGUg
Y29sb3JtYXAuCiAgICAgY29uc3QgdW5zaWduZWQgY2hhciogY29sb3JNYXA7CiAgICAgdW5zaWdu
ZWQgY29sb3JNYXBTaXplOwogICAgIGlmIChmcmFtZVJlYWRlci0+aXNfbG9jYWxfY29sb3JtYXBf
ZGVmaW5lZCkgewotICAgICAgICBjb2xvck1hcCA9IGZyYW1lUmVhZGVyLT5sb2NhbF9jb2xvcm1h
cDsKLSAgICAgICAgY29sb3JNYXBTaXplID0gKHVuc2lnbmVkKWZyYW1lUmVhZGVyLT5sb2NhbF9j
b2xvcm1hcF9zaXplOworICAgICAgICBjb2xvck1hcCA9IG1fcmVhZGVyLT5sb2NhbENvbG9yTWFw
KGZyYW1lUmVhZGVyKTsKKyAgICAgICAgY29sb3JNYXBTaXplID0gbV9yZWFkZXItPmxvY2FsQ29s
b3JNYXBTaXplKGZyYW1lUmVhZGVyKTsKICAgICB9IGVsc2UgewotICAgICAgICBjb2xvck1hcCA9
IG1fcmVhZGVyLT5nbG9iYWxfY29sb3JtYXA7Ci0gICAgICAgIGNvbG9yTWFwU2l6ZSA9IG1fcmVh
ZGVyLT5nbG9iYWxfY29sb3JtYXBfc2l6ZTsKKyAgICAgICAgY29sb3JNYXAgPSBtX3JlYWRlci0+
Z2xvYmFsQ29sb3JNYXAoKTsKKyAgICAgICAgY29sb3JNYXBTaXplID0gbV9yZWFkZXItPmdsb2Jh
bENvbG9yTWFwU2l6ZSgpOwogICAgIH0KICAgICBpZiAoIWNvbG9yTWFwKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lIGlmIG5lY2Vzc2FyeS4KICAg
ICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07Ci0g
ICAgaWYgKChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgJiYgIWlu
aXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkKKyAgICBpZiAoKGJ1ZmZlci5zdGF0dXMoKSA9PSBJ
bWFnZUZyYW1lOjpGcmFtZUVtcHR5KSAmJiAhaW5pdEZyYW1lQnVmZmVyKGZyYW1lUmVhZGVyLCBm
cmFtZUluZGV4KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSW1hZ2VGcmFtZTo6UGl4
ZWxEYXRhKiBjdXJyZW50QWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHhCZWdpbiwgeUJlZ2luKTsK
ICAgICAvLyBXcml0ZSBvbmUgcm93J3Mgd29ydGggb2YgZGF0YSBpbnRvIHRoZSBmcmFtZS4gIAog
ICAgIGZvciAoaW50IHggPSB4QmVnaW47IHggPCB4RW5kOyArK3gpIHsKLSAgICAgICAgY29uc3Qg
dW5zaWduZWQgY2hhciBzb3VyY2VWYWx1ZSA9ICoocm93QnVmZmVyICsgKG1fc2NhbGVkID8gbV9z
Y2FsZWRDb2x1bW5zW3hdIDogeCkgLSBmcmFtZVJlYWRlci0+eF9vZmZzZXQpOworICAgICAgICBj
b25zdCB1bnNpZ25lZCBjaGFyIHNvdXJjZVZhbHVlID0gcm93QnVmZmVyWyhtX3NjYWxlZCA/IG1f
c2NhbGVkQ29sdW1uc1t4XSA6IHgpIC0gZnJhbWVSZWFkZXItPnhfb2Zmc2V0XTsKICAgICAgICAg
aWYgKCghZnJhbWVSZWFkZXItPmlzX3RyYW5zcGFyZW50IHx8IChzb3VyY2VWYWx1ZSAhPSBmcmFt
ZVJlYWRlci0+dHBpeGVsKSkgJiYgKHNvdXJjZVZhbHVlIDwgY29sb3JNYXBTaXplKSkgewogICAg
ICAgICAgICAgY29uc3Qgc2l6ZV90IGNvbG9ySW5kZXggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHNv
dXJjZVZhbHVlKSAqIDM7CiAgICAgICAgICAgICBidWZmZXIuc2V0UkdCQShjdXJyZW50QWRkcmVz
cywgY29sb3JNYXBbY29sb3JJbmRleF0sIGNvbG9yTWFwW2NvbG9ySW5kZXggKyAxXSwgY29sb3JN
YXBbY29sb3JJbmRleCArIDJdLCAyNTUpOwpAQCAtMjU5LDEyICsyNjYsMTIgQEAgYm9vbCBHSUZJ
bWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVk
IGNoYXIqIHJvd0J1ZmYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBHSUZJbWFnZURlY29k
ZXI6OmZyYW1lQ29tcGxldGUodW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJh
dGlvbiwgSW1hZ2VGcmFtZTo6RnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCkKK2Jv
b2wgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKGNvbnN0IEdJRkZyYW1lQ29udGV4dCog
ZnJhbWVSZWFkZXIsIHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGZyYW1lRHVyYXRpb24s
IEltYWdlRnJhbWU6OkZyYW1lRGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2QpCiB7CiAgICAg
Ly8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgaWYgbmVjZXNzYXJ5LiAgU29tZSBHSUZzIGluc2VydCBk
by1ub3RoaW5nIGZyYW1lcywKICAgICAvLyBpbiB3aGljaCBjYXNlIHdlIG5ldmVyIHJlYWNoIGhh
dmVEZWNvZGVkUm93KCkgYmVmb3JlIGdldHRpbmcgaGVyZS4KICAgICBJbWFnZUZyYW1lJiBidWZm
ZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07Ci0gICAgaWYgKChidWZmZXIuc3Rh
dHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgJiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFt
ZUluZGV4KSkKKyAgICBpZiAoKGJ1ZmZlci5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVt
cHR5KSAmJiAhaW5pdEZyYW1lQnVmZmVyKGZyYW1lUmVhZGVyLCBmcmFtZUluZGV4KSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBpbml0RnJhbWVCdWZmZXIoKSBoYXMgYWxyZWFkeSBjYWxsZWQg
c2V0RmFpbGVkKCkuCiAKICAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lQ29t
cGxldGUpOwpAQCAtMzA1LDEyICszMTIsMjcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmZyYW1l
Q29tcGxldGUodW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHSUZJbWFnZURlY29kZXI6OmdpZkNvbXBsZXRlKCkK
K3ZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZURhdGFDb21wbGV0ZSh1bnNpZ25lZCBmcmFtZUlu
ZGV4LCB1bnNpZ25lZCBmcmFtZUR1cmF0aW9uKQogewotICAgIC8vIENhY2hlIHRoZSByZXBldGl0
aW9uIGNvdW50LCB3aGljaCBpcyBub3cgYXMgYXV0aG9yaXRhdGl2ZSBhcyBpdCdzIGV2ZXIKKyAg
ICBleHBhbmRGcmFtZUJ1ZmZlckNhY2hlKGZyYW1lSW5kZXggKyAxKTsKKyAgICBtX2ZyYW1lQnVm
ZmVyQ2FjaGVbZnJhbWVJbmRleF0uc2V0RHVyYXRpb24oZnJhbWVEdXJhdGlvbik7CisgICAgaWYg
KGZyYW1lSW5kZXggPiBtX2xhc3REYXRhQ29tcGxldGVGcmFtZUluZGV4KQorICAgICAgICBtX2xh
c3REYXRhQ29tcGxldGVGcmFtZUluZGV4ID0gZnJhbWVJbmRleDsKK30KKwordm9pZCBHSUZJbWFn
ZURlY29kZXI6OmdpZlBhcnNlQ29tcGxldGUoKQoreworICAgIC8vIENhY2hlIHJlcGV0aXRpb24g
Y291bnQgYW5kIGZyYW1lIGNvdW50LCB3aGljaCBhcmUgbm93IGFzIGF1dGhvcml0YXRpdmUgYXMg
dGhleSdyZSBldmVyCiAgICAgLy8gZ29pbmcgdG8gYmUuCiAgICAgcmVwZXRpdGlvbkNvdW50KCk7
CiAKKyAgICAvLyBEb24ndCBjYWxsIGZyYW1lQ291bnQoKSBiZWNhdXNlIGl0IGRlY29kZXMgYW5k
IGNhdXNlcyBhbiBpbmZpbml0ZSBsb29wLgorICAgIG1fZnJhbWVDb3VudCA9IG1fcmVhZGVyLT5p
bWFnZXNDb3VudCgpOworICAgIG1faXNGcmFtZUNvdW50RmluYWwgPSB0cnVlOworfQorCit2b2lk
IEdJRkltYWdlRGVjb2Rlcjo6Z2lmRGVjb2RlQ29tcGxldGUoKQorewogICAgIG1fcmVhZGVyLmNs
ZWFyKCk7CiB9CiAKQEAgLTMxOSwxOSArMzQxLDE5IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpk
ZWNvZGUodW5zaWduZWQgaGFsdEF0RnJhbWUsIEdJRlF1ZXJ5IHF1ZXJ5KQogICAgIGlmIChmYWls
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX3JlYWRlcikKKyAgICBpZiAoIW1f
cmVhZGVyKSB7CiAgICAgICAgIG1fcmVhZGVyID0gYWRvcHRQdHIobmV3IEdJRkltYWdlUmVhZGVy
KHRoaXMpKTsKKyAgICAgICAgbV9yZWFkZXItPnNldERhdGEobV9kYXRhKTsKKyAgICB9CiAKLSAg
ICAvLyBJZiB3ZSBjb3VsZG4ndCBkZWNvZGUgdGhlIGltYWdlIGJ1dCB3ZSd2ZSByZWNlaXZlZCBh
bGwgdGhlIGRhdGEsIGRlY29kaW5nCi0gICAgLy8gaGFzIGZhaWxlZC4KLSAgICBpZiAoIW1fcmVh
ZGVyLT5yZWFkKChjb25zdCB1bnNpZ25lZCBjaGFyKiltX2RhdGEtPmRhdGEoKSArIG1fcmVhZE9m
ZnNldCwgbV9kYXRhLT5zaXplKCkgLSBtX3JlYWRPZmZzZXQsIHF1ZXJ5LCBoYWx0QXRGcmFtZSkg
JiYgaXNBbGxEYXRhUmVjZWl2ZWQoKSkKKyAgICAvLyBJZiB3ZSBjb3VsZG4ndCBkZWNvZGUgdGhl
IGltYWdlIGJ1dCB3ZSd2ZSByZWNlaXZlZCBhbGwgdGhlIGRhdGEsIGRlY29kaW5nIGhhcyBmYWls
ZWQuCisgICAgaWYgKCFtX3JlYWRlci0+ZGVjb2RlKHF1ZXJ5LCBoYWx0QXRGcmFtZSkgJiYgaXNB
bGxEYXRhUmVjZWl2ZWQoKSAmJiBxdWVyeSA9PSBHSUZGdWxsUXVlcnkpCiAgICAgICAgIHNldEZh
aWxlZCgpOwogfQogCi1ib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuc2ln
bmVkIGZyYW1lSW5kZXgpCitib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKGNv
bnN0IEdJRkZyYW1lQ29udGV4dCogZnJhbWVSZWFkZXIsIHVuc2lnbmVkIGZyYW1lSW5kZXgpCiB7
CiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgcmVjdCBpbiBvdXIgYnVmZmVyLgotICAgIGNv
bnN0IEdJRkZyYW1lUmVhZGVyKiBmcmFtZVJlYWRlciA9IG1fcmVhZGVyLT5mcmFtZV9yZWFkZXI7
CiAgICAgSW50UmVjdCBmcmFtZVJlY3QoZnJhbWVSZWFkZXItPnhfb2Zmc2V0LCBmcmFtZVJlYWRl
ci0+eV9vZmZzZXQsIGZyYW1lUmVhZGVyLT53aWR0aCwgZnJhbWVSZWFkZXItPmhlaWdodCk7CiAK
ICAgICAvLyBNYWtlIHN1cmUgdGhlIGZyYW1lUmVjdCBkb2Vzbid0IGV4dGVuZCBvdXRzaWRlIHRo
ZSBidWZmZXIuCkBAIC00MDQsNCArNDI2LDE0IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppbml0
RnJhbWVCdWZmZXIodW5zaWduZWQgZnJhbWVJbmRleCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAor
dm9pZCBHSUZJbWFnZURlY29kZXI6OmV4cGFuZEZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IHNpemUp
Cit7CisgICAgc2l6ZV90IHByZXZpb3VzU2l6ZSA9IG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCk7
CisgICAgaWYgKHNpemUgPCBwcmV2aW91c1NpemUpCisgICAgICAgIHJldHVybjsKKyAgICBtX2Zy
YW1lQnVmZmVyQ2FjaGUucmVzaXplKHNpemUpOworICAgIGZvciAoc2l6ZV90IGkgPSBwcmV2aW91
c1NpemU7IGkgPCBtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpOyArK2kpCisgICAgICAgIG1fZnJh
bWVCdWZmZXJDYWNoZVtpXS5zZXRQcmVtdWx0aXBseUFscGhhKG1fcHJlbXVsdGlwbHlBbHBoYSk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAppbmRl
eCAxNWJkOTlmNjg2MjM0YWRjMzlhZmVhZmI2ZTEwNWMxNzliMzI5MDcxLi4xYzU2NmIyMDM5NWEz
YzdkNjdkYTViNDU0NDU4ZDY4MzJjYTlmMzkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCkBA
IC0yOSwxMCArMjksMTEgQEAKICNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKICNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CiAKLXN0cnVjdCBHSUZJbWFnZVJlYWRlcjsKLQogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitzdHJ1Y3QgR0lGSW1hZ2VSZWFkZXI7CitzdHJ1Y3QgR0lGRnJhbWVDb250ZXh0Owor
CiAgICAgLy8gVGhpcyBjbGFzcyBkZWNvZGVzIHRoZSBHSUYgaW1hZ2UgZm9ybWF0LgogICAgIGNs
YXNzIEdJRkltYWdlRGVjb2RlciA6IHB1YmxpYyBJbWFnZURlY29kZXIgewogICAgIHB1YmxpYzoK
QEAgLTU0LDEyICs1NSwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIEdJRklt
YWdlUmVhZGVyIQogICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0RmFpbGVkKCk7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUp
OworICAgICAgICB2aXJ0dWFsIGJvb2wgZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5k
ZXgpOworICAgICAgICB2aXJ0dWFsIGZsb2F0IGZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBp
bmRleCk7CiAKICAgICAgICAgLy8gQ2FsbGJhY2tzIGZyb20gdGhlIEdJRiByZWFkZXIuCi0gICAg
ICAgIHZvaWQgZGVjb2RpbmdIYWx0ZWQodW5zaWduZWQgYnl0ZXNMZWZ0KTsKLSAgICAgICAgYm9v
bCBoYXZlRGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBjaGFyKiByb3dC
dWZmZXIsIHVuc2lnbmVkIGNoYXIqIHJvd0VuZCwgdW5zaWduZWQgcm93TnVtYmVyLCB1bnNpZ25l
ZCByZXBlYXRDb3VudCwgYm9vbCB3cml0ZVRyYW5zcGFyZW50UGl4ZWxzKTsKLSAgICAgICAgYm9v
bCBmcmFtZUNvbXBsZXRlKHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGZyYW1lRHVyYXRp
b24sIEltYWdlRnJhbWU6OkZyYW1lRGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2QpOwotICAg
ICAgICB2b2lkIGdpZkNvbXBsZXRlKCk7CisgICAgICAgIGJvb2wgaGF2ZURlY29kZWRSb3coY29u
c3QgR0lGRnJhbWVDb250ZXh0KiwgdW5zaWduZWQgZnJhbWVJbmRleCwgY29uc3QgVmVjdG9yPHVu
c2lnbmVkIGNoYXI+JiByb3dCdWZmZXIsIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCByb3dOdW1i
ZXIsIHVuc2lnbmVkIHJlcGVhdENvdW50LCBib29sIHdyaXRlVHJhbnNwYXJlbnRQaXhlbHMpOwor
ICAgICAgICBib29sIGZyYW1lQ29tcGxldGUoY29uc3QgR0lGRnJhbWVDb250ZXh0KiwgdW5zaWdu
ZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgSW1hZ2VGcmFtZTo6RnJhbWVE
aXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCk7CisgICAgICAgIHZvaWQgZnJhbWVEYXRhQ29t
cGxldGUodW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbik7CisgICAg
ICAgIHZvaWQgZ2lmUGFyc2VDb21wbGV0ZSgpOworICAgICAgICB2b2lkIGdpZkRlY29kZUNvbXBs
ZXRlKCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICAvLyBJZiB0aGUgcXVlcnkgaXMgR0lGRnVs
bFF1ZXJ5LCBkZWNvZGVzIHRoZSBpbWFnZSB1cCB0byAoYnV0IG5vdApAQCAtNzEsMTMgKzc1LDE2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gQ2FsbGVkIHRvIGluaXRpYWxpemUg
dGhlIGZyYW1lIGJ1ZmZlciB3aXRoIHRoZSBnaXZlbiBpbmRleCwgYmFzZWQgb24KICAgICAgICAg
Ly8gdGhlIHByZXZpb3VzIGZyYW1lJ3MgZGlzcG9zYWwgbWV0aG9kLiBSZXR1cm5zIHRydWUgb24g
c3VjY2Vzcy4gT24KICAgICAgICAgLy8gZmFpbHVyZSwgdGhpcyB3aWxsIG1hcmsgdGhlIGltYWdl
IGFzIGZhaWxlZC4KLSAgICAgICAgYm9vbCBpbml0RnJhbWVCdWZmZXIodW5zaWduZWQgZnJhbWVJ
bmRleCk7CisgICAgICAgIGJvb2wgaW5pdEZyYW1lQnVmZmVyKGNvbnN0IEdJRkZyYW1lQ29udGV4
dCosIHVuc2lnbmVkIGZyYW1lSW5kZXgpOworCisgICAgICAgIHZvaWQgZXhwYW5kRnJhbWVCdWZm
ZXJDYWNoZShzaXplX3Qgc2l6ZSk7CiAKLSAgICAgICAgYm9vbCBtX2FscmVhZHlTY2FubmVkVGhp
c0RhdGFGb3JGcmFtZUNvdW50OwogICAgICAgICBib29sIG1fY3VycmVudEJ1ZmZlclNhd0FscGhh
OwogICAgICAgICBtdXRhYmxlIGludCBtX3JlcGV0aXRpb25Db3VudDsKICAgICAgICAgT3duUHRy
PEdJRkltYWdlUmVhZGVyPiBtX3JlYWRlcjsKLSAgICAgICAgdW5zaWduZWQgbV9yZWFkT2Zmc2V0
OworICAgICAgICBib29sIG1faXNGcmFtZUNvdW50RmluYWw7CisgICAgICAgIHNpemVfdCBtX2Zy
YW1lQ291bnQ7CisgICAgICAgIHNpemVfdCBtX2xhc3REYXRhQ29tcGxldGVGcmFtZUluZGV4Owog
ICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3Bw
CmluZGV4IDc0MTRlOTgxODU5MDdjMGY2ODdiMzdjOTM1MDUzMTkyN2ZmYjg4M2IuLmM1NzhiYzdk
YTI5NDIwODdmYmFiNTdlMDIwZjFkNjA4NDA2MGUwOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVy
LmNwcApAQCAtNzksNiArNzksOCBAQCBtYWlsaW5nIGFkZHJlc3MuCiAjaW5jbHVkZSAiR0lGSW1h
Z2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKIAorI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CisKIHVzaW5nIFdlYkNvcmU6OkdJRkltYWdlRGVjb2RlcjsKIAogLy8gRGVm
aW5lIHRoZSBNb3ppbGxhIG1hY3JvIHNldHVwIHNvIHRoYXQgd2UgY2FuIGxlYXZlIHRoZSBtYWNy
b3MgYWxvbmUuCkBAIC04NywxMiArODksNiBAQCB1c2luZyBXZWJDb3JlOjpHSUZJbWFnZURlY29k
ZXI7CiAKIC8qCiAgKiBHRVROKG4sIHMpIHJlcXVlc3RzIGF0IGxlYXN0ICduJyBieXRlcyBhdmFp
bGFibGUgZnJvbSAncScsIGF0IHN0YXJ0IG9mIHN0YXRlICdzJwotICoKLSAqIE5vdGUsIHRoZSBo
b2xkIHdpbGwgbmV2ZXIgbmVlZCB0byBiZSBiaWdnZXIgdGhhbiAyNTYgYnl0ZXMgdG8gZ2F0aGVy
IHVwIGluIHRoZSBob2xkLAotICogYXMgZWFjaCBHSUYgYmxvY2sgKGV4Y2VwdCBjb2xvcm1hcHMp
IGNhbiBuZXZlciBiZSBiaWdnZXIgdGhhbiAyNTYgYnl0ZXMuCi0gKiBDb2xvcm1hcHMgYXJlIGRp
cmVjdGx5IGNvcGllZCBpbiB0aGUgcmVzcC4gZ2xvYmFsX2NvbG9ybWFwIG9yIGR5bmFtaWNhbGx5
IGFsbG9jYXRlZCBsb2NhbF9jb2xvcm1hcC4KLSAqIFNvIGEgZml4ZWQgYnVmZmVyIGluIEdJRklt
YWdlUmVhZGVyIGlzIGdvb2QgZW5vdWdoLgotICogVGhpcyBidWZmZXIgaXMgb25seSBuZWVkZWQg
dG8gY29weSBsZWZ0LW92ZXIgZGF0YSBmcm9tIG9uZSBHaWZXcml0ZSBjYWxsIHRvIHRoZSBuZXh0
CiAgKi8KICNkZWZpbmUgR0VUTihuLHMpICAgICAgICAgICAgICAgICAgICBcCiAgIFBSX0JFR0lO
X01BQ1JPICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTAzLDEyICs5OSwxMSBAQCB1c2luZyBX
ZWJDb3JlOjpHSUZJbWFnZURlY29kZXI7CiAvKiBHZXQgYSAxNi1iaXQgdmFsdWUgc3RvcmVkIGlu
IGxpdHRsZS1lbmRpYW4gZm9ybWF0ICovCiAjZGVmaW5lIEdFVElOVDE2KHApICAgKChwKVsxXTw8
OHwocClbMF0pCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0vLyBTZW5kIHRoZSBkYXRhIHRv
IHRoZSBkaXNwbGF5IGZyb250LWVuZC4KLWJvb2wgR0lGSW1hZ2VSZWFkZXI6Om91dHB1dF9yb3co
KQotewotICBHSUZGcmFtZVJlYWRlciogZ3MgPSBmcmFtZV9yZWFkZXI7CituYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKKy8vIFN1Ym1pdCByb3didWYgdG8gdGhlIGNsaWVudCByZWZlcmVuY2VkIGJ5IGNs
aWVudHB0ci4KK3N0YXRpYyBib29sIG91dHB1dF9yb3coR0lGRnJhbWVDb250ZXh0KiBncywgVmVj
dG9yPHVuc2lnbmVkIGNoYXI+JiByb3didWYsIHVuc2lnbmVkIHdpZHRoLCBXZWJDb3JlOjpHSUZJ
bWFnZURlY29kZXIqIGNsaWVudHB0cikKK3sKICAgaW50IGRyb3dfc3RhcnQsIGRyb3dfZW5kOwog
CiAgIGRyb3dfc3RhcnQgPSBkcm93X2VuZCA9IGdzLT5pcm93OwpAQCAtMTU4LDEzICsxNTMsMTQg
QEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6b3V0cHV0X3JvdygpCiAgICAgcmV0dXJuIHRydWU7CiAK
ICAgLy8gQ0FMTEJBQ0s6IExldCB0aGUgY2xpZW50IGtub3cgd2UgaGF2ZSBkZWNvZGVkIGEgcm93
LgotICBpZiAoY2xpZW50cHRyICYmIGZyYW1lX3JlYWRlciAmJgotICAgICAgIWNsaWVudHB0ci0+
aGF2ZURlY29kZWRSb3coaW1hZ2VzX2NvdW50IC0gMSwgZnJhbWVfcmVhZGVyLT5yb3didWYsIGZy
YW1lX3JlYWRlci0+cm93ZW5kLAorICBpZiAoY2xpZW50cHRyICYmIGdzICYmCisgICAgICAhY2xp
ZW50cHRyLT5oYXZlRGVjb2RlZFJvdyhncywgZ3MtPmZyYW1lX2luZGV4LCByb3didWYsIHdpZHRo
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJvd19zdGFydCwgZHJvd19lbmQg
LSBkcm93X3N0YXJ0ICsgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzLT5w
cm9ncmVzc2l2ZV9kaXNwbGF5ICYmIGdzLT5pbnRlcmxhY2VkICYmIGdzLT5pcGFzcyA+IDEpKQog
ICAgIHJldHVybiBmYWxzZTsKIAotICBncy0+cm93cCA9IGdzLT5yb3didWY7CisgIC8vIE1vdmUg
dG8gdGhlIGJlZ2lubmluZyBvZiB0ZW1wb3JhcnkgYnVmZmVyLgorICBncy0+cm93cCA9IDA7CiAK
ICAgaWYgKCFncy0+aW50ZXJsYWNlZCkKICAgICBncy0+aXJvdysrOwpAQCAtMjEzLDExICsyMDks
MTQgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6b3V0cHV0X3JvdygpCiAgIHJldHVybiB0cnVlOwog
fQogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKgotLyogUGVyZm9ybSBMZW1wZWwtWml2LVdlbGNo
IGRlY29kaW5nICovCi1ib29sIEdJRkltYWdlUmVhZGVyOjpkb19sencoY29uc3QgdW5zaWduZWQg
Y2hhciAqcSkKKy8vIFBlcmZvcm0gTGVtcGVsLVppdi1XZWxjaCBkZWNvZGluZy4KKy8vIHEgaXMg
dGhlIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGJ5dGUgdG8gcGVyZm9ybSBMWlcgZGVjb2RpbmcuCisv
LyBieXRlc190b19kZWNvZGUgaXMgdGhlIG51bWJlciBvZiBieXRlcyB0byBkZWNvZGUuCisvLyBs
encgaXMgdGhlIGN1cnJlbnQgTFpXIGRlY29kaW5nIGNvbnRleHQuCisvLyBncyBpcyB0aGUgY3Vy
cmVudCBmcmFtZSBkZWNvZGluZyBjb250ZXh0LgorLy8gcm93YnVmIGlzIHRoZSBjdXJyZW50IGRl
Y29kaW5nIHJvdy4KK3N0YXRpYyBib29sIGRvX2x6dyhjb25zdCB1bnNpZ25lZCBjaGFyKiBxLCB1
bnNpZ25lZCBieXRlc190b19kZWNvZGUsIEdJRkxaV0NvbnRleHQqIGx6dywgR0lGRnJhbWVDb250
ZXh0KiBncywgVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiByb3didWYsIFdlYkNvcmU6OkdJRkltYWdl
RGVjb2RlciogY2xpZW50cHRyKQogewotICBHSUZGcmFtZVJlYWRlciogZ3MgPSBmcmFtZV9yZWFk
ZXI7CiAgIGlmICghZ3MpCiAgICAgcmV0dXJuIHRydWU7CiAKQEAgLTIyOSwzOCArMjI4LDMzIEBA
IGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRvX2x6dyhjb25zdCB1bnNpZ25lZCBjaGFyICpxKQogICAg
KiB3b24ndCB3b3JyeSBhYm91dCB0aGVtIGJlaW5nIGFsaWFzZWQuICBUaGUgbG9jYWxzIHdpbGwg
YmUgaG9tZWQKICAgICogYmFjayBpbnRvIHRoZSBHSUYgZGVjb2RlciBzdHJ1Y3R1cmUgd2hlbiB3
ZSBleGl0LgogICAgKi8KLSAgaW50IGF2YWlsICAgICAgID0gZ3MtPmF2YWlsOwotICBpbnQgYml0
cyAgICAgICAgPSBncy0+Yml0czsKLSAgaW50IGNudCAgICAgICAgID0gY291bnQ7Ci0gIGludCBj
b2Rlc2l6ZSAgICA9IGdzLT5jb2Rlc2l6ZTsKLSAgaW50IGNvZGVtYXNrICAgID0gZ3MtPmNvZGVt
YXNrOwotICBpbnQgb2xkY29kZSAgICAgPSBncy0+b2xkY29kZTsKLSAgaW50IGNsZWFyX2NvZGUg
ID0gZ3MtPmNsZWFyX2NvZGU7Ci0gIHVuc2lnbmVkIGNoYXIgZmlyc3RjaGFyID0gZ3MtPmZpcnN0
Y2hhcjsKLSAgaW50IGRhdHVtICAgICA9IGdzLT5kYXR1bTsKLQotICBpZiAoIWdzLT5wcmVmaXgp
IHsKLSAgICBncy0+cHJlZml4ID0gbmV3IHVuc2lnbmVkIHNob3J0W01BWF9CSVRTXTsKLSAgICBt
ZW1zZXQoZ3MtPnByZWZpeCwgMCwgTUFYX0JJVFMgKiBzaXplb2Yoc2hvcnQpKTsKLSAgfQotCi0g
IHVuc2lnbmVkIHNob3J0ICpwcmVmaXggID0gZ3MtPnByZWZpeDsKLSAgdW5zaWduZWQgY2hhciAq
c3RhY2twICAgPSBncy0+c3RhY2twOwotICB1bnNpZ25lZCBjaGFyICpzdWZmaXggICA9IGdzLT5z
dWZmaXg7Ci0gIHVuc2lnbmVkIGNoYXIgKnN0YWNrICAgID0gZ3MtPnN0YWNrOwotICB1bnNpZ25l
ZCBjaGFyICpyb3dwICAgICA9IGdzLT5yb3dwOwotICB1bnNpZ25lZCBjaGFyICpyb3dlbmQgICA9
IGdzLT5yb3dlbmQ7CisgIGludCBhdmFpbCAgICAgICA9IGx6dy0+YXZhaWw7CisgIGludCBiaXRz
ICAgICAgICA9IGx6dy0+Yml0czsKKyAgaW50IGNudCAgICAgICAgID0gYnl0ZXNfdG9fZGVjb2Rl
OworICBpbnQgY29kZXNpemUgICAgPSBsenctPmNvZGVzaXplOworICBpbnQgY29kZW1hc2sgICAg
PSBsenctPmNvZGVtYXNrOworICBpbnQgb2xkY29kZSAgICAgPSBsenctPm9sZGNvZGU7CisgIGlu
dCBjbGVhcl9jb2RlICA9IGx6dy0+Y2xlYXJfY29kZTsKKyAgdW5zaWduZWQgY2hhciBmaXJzdGNo
YXIgPSBsenctPmZpcnN0Y2hhcjsKKyAgaW50IGRhdHVtICAgICAgID0gbHp3LT5kYXR1bTsKKwor
ICBWZWN0b3I8dW5zaWduZWQgc2hvcnQ+JiBwcmVmaXggPSBsenctPnByZWZpeDsKKyAgVmVjdG9y
PHVuc2lnbmVkIGNoYXI+JiBzdWZmaXggID0gbHp3LT5zdWZmaXg7CisgIFZlY3Rvcjx1bnNpZ25l
ZCBjaGFyPiYgc3RhY2sgICA9IGx6dy0+c3RhY2s7CisgIHVuc2lnbmVkIHN0YWNrcCAgICAgICAg
ID0gbHp3LT5zdGFja3A7CisgIHVuc2lnbmVkIHdpZHRoICAgICAgICAgID0gZ3MtPndpZHRoOwor
ICB1bnNpZ25lZCByb3dwICAgICAgICAgICA9IGdzLT5yb3dwOwogICB1bnNpZ25lZCByb3dzX3Jl
bWFpbmluZyA9IGdzLT5yb3dzX3JlbWFpbmluZzsKIAotICBpZiAocm93cCA9PSByb3dlbmQpCisg
IGlmIChyb3dwID09IHdpZHRoKQogICAgIHJldHVybiB0cnVlOwogCiAjZGVmaW5lIE9VVFBVVF9S
T1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
UFJfQkVHSU5fTUFDUk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBpZiAoIW91dHB1dF9yb3coKSkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoIW91dHB1dF9yb3co
Z3MsIHJvd2J1Ziwgd2lkdGgsIGNsaWVudHB0cikpICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKICAgICByb3dzX3JlbWFpbmluZy0tOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICByb3dwID0gZnJhbWVfcmVh
ZGVyLT5yb3dwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgcm93cCA9IGdzLT5yb3dwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgaWYgKCFyb3dzX3JlbWFpbmluZykgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICBnb3RvIEVO
RDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgIFBSX0VORF9NQUNSTwpAQCAtMjk3LDggKzI5MSw4IEBAIGJvb2wgR0lGSW1hZ2VSZWFk
ZXI6OmRvX2x6dyhjb25zdCB1bnNpZ25lZCBjaGFyICpxKQogICAgICAgfQogCiAgICAgICBpZiAo
b2xkY29kZSA9PSAtMSkgewotICAgICAgICAqcm93cCsrID0gc3VmZml4W2NvZGVdOwotICAgICAg
ICBpZiAocm93cCA9PSByb3dlbmQpCisgICAgICAgIHJvd2J1Zltyb3dwKytdID0gc3VmZml4W2Nv
ZGVdOworICAgICAgICBpZiAocm93cCA9PSB3aWR0aCkKICAgICAgICAgICBPVVRQVVRfUk9XOwog
CiAgICAgICAgIGZpcnN0Y2hhciA9IG9sZGNvZGUgPSBjb2RlOwpAQCAtMzA3LDEwICszMDEsMTAg
QEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZG9fbHp3KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnEpCiAK
ICAgICAgIGluY29kZSA9IGNvZGU7CiAgICAgICBpZiAoY29kZSA+PSBhdmFpbCkgewotICAgICAg
ICAqc3RhY2twKysgPSBmaXJzdGNoYXI7CisgICAgICAgIHN0YWNrW3N0YWNrcCsrXSA9IGZpcnN0
Y2hhcjsKICAgICAgICAgY29kZSA9IG9sZGNvZGU7CiAKLSAgICAgICAgaWYgKHN0YWNrcCA9PSBz
dGFjayArIE1BWF9CSVRTKQorICAgICAgICBpZiAoc3RhY2twID09IE1BWF9CSVRTKQogICAgICAg
ICAgIHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7CiAg
ICAgICB9CiAKQEAgLTMyMywxNCArMzE3LDE0IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRvX2x6
dyhjb25zdCB1bnNpZ25lZCBjaGFyICpxKQogICAgICAgICAvLyBhbGxvd2luZyBjb2RlID49IGF2
YWlsIGhlcmUgbGV0cyB1cyBiZSBtb3JlIHRvbGVyYW50IG9mIG1hbGZvcm1lZAogICAgICAgICAv
LyBkYXRhLiBBcyBsb25nIGFzIGNvZGUgPCBNQVhfQklUUywgdGhlIG9ubHkgcmlzayBpcyBhIGdh
cmJsZWQgaW1hZ2UsCiAgICAgICAgIC8vIHdoaWNoIGlzIG5vIHdvcnNlIHRoYW4gcmVmdXNpbmcg
dG8gZGlzcGxheSBpdC4KLSAgICAgICAgKnN0YWNrcCsrID0gc3VmZml4W2NvZGVdOworICAgICAg
ICBzdGFja1tzdGFja3ArK10gPSBzdWZmaXhbY29kZV07CiAgICAgICAgIGNvZGUgPSBwcmVmaXhb
Y29kZV07CiAKLSAgICAgICAgaWYgKHN0YWNrcCA9PSBzdGFjayArIE1BWF9CSVRTKQorICAgICAg
ICBpZiAoc3RhY2twID09IE1BWF9CSVRTKQogICAgICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBj
bGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7CiAgICAgICB9CiAKLSAgICAgICpzdGFja3Ar
KyA9IGZpcnN0Y2hhciA9IHN1ZmZpeFtjb2RlXTsKKyAgICAgIHN0YWNrW3N0YWNrcCsrXSA9IGZp
cnN0Y2hhciA9IHN1ZmZpeFtjb2RlXTsKIAogICAgICAgLyogRGVmaW5lIGEgbmV3IGNvZGV3b3Jk
IGluIHRoZSBkaWN0aW9uYXJ5LiAqLwogICAgICAgaWYgKGF2YWlsIDwgNDA5NikgewpAQCAtMzUx
LDE0MCArMzQ1LDE0NCBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkb19sencoY29uc3QgdW5zaWdu
ZWQgY2hhciAqcSkKIAogICAgICAgICAvKiBDb3B5IHRoZSBkZWNvZGVkIGRhdGEgb3V0IHRvIHRo
ZSBzY2FubGluZSBidWZmZXIuICovCiAgICAgICBkbyB7Ci0gICAgICAgICpyb3dwKysgPSAqLS1z
dGFja3A7Ci0gICAgICAgIGlmIChyb3dwID09IHJvd2VuZCkgeworICAgICAgICByb3didWZbcm93
cCsrXSA9IHN0YWNrWy0tc3RhY2twXTsKKyAgICAgICAgaWYgKHJvd3AgPT0gd2lkdGgpIHsKICAg
ICAgICAgICBPVVRQVVRfUk9XOwogICAgICAgICB9Ci0gICAgICB9IHdoaWxlIChzdGFja3AgPiBz
dGFjayk7CisgICAgICB9IHdoaWxlIChzdGFja3AgPiAwKTsKICAgICB9CiAgIH0KIAogICBFTkQ6
CiAKICAgLyogSG9tZSB0aGUgbG9jYWwgY29waWVzIG9mIHRoZSBHSUYgZGVjb2RlciBzdGF0ZSB2
YXJpYWJsZXMgKi8KLSAgZ3MtPmF2YWlsID0gYXZhaWw7Ci0gIGdzLT5iaXRzID0gYml0czsKLSAg
Z3MtPmNvZGVzaXplID0gY29kZXNpemU7Ci0gIGdzLT5jb2RlbWFzayA9IGNvZGVtYXNrOwotICBj
b3VudCA9IGNudDsKLSAgZ3MtPm9sZGNvZGUgPSBvbGRjb2RlOwotICBncy0+Zmlyc3RjaGFyID0g
Zmlyc3RjaGFyOwotICBncy0+ZGF0dW0gPSBkYXR1bTsKLSAgZ3MtPnN0YWNrcCA9IHN0YWNrcDsK
KyAgbHp3LT5hdmFpbCA9IGF2YWlsOworICBsenctPmJpdHMgPSBiaXRzOworICBsenctPmNvZGVz
aXplID0gY29kZXNpemU7CisgIGx6dy0+Y29kZW1hc2sgPSBjb2RlbWFzazsKKyAgbHp3LT5vbGRj
b2RlID0gb2xkY29kZTsKKyAgbHp3LT5maXJzdGNoYXIgPSBmaXJzdGNoYXI7CisgIGx6dy0+ZGF0
dW0gPSBkYXR1bTsKKyAgbHp3LT5zdGFja3AgPSBzdGFja3A7CiAgIGdzLT5yb3dwID0gcm93cDsK
ICAgZ3MtPnJvd3NfcmVtYWluaW5nID0gcm93c19yZW1haW5pbmc7CiAKICAgcmV0dXJuIHRydWU7
CiB9CiAKK0dJRkltYWdlUmVhZGVyOjpHSUZJbWFnZVJlYWRlcihHSUZJbWFnZURlY29kZXIqIGNs
aWVudCkKKyAgICA6IGNsaWVudHB0cihjbGllbnQpCisgICAgLCBzdGF0ZShnaWZfdHlwZSkKKyAg
ICAsIGJ5dGVzX3RvX2NvbnN1bWUoNikgIC8vIEJ5dGVzIHRvIHJlYWQgdGhlIGltYWdlIGlkZW50
aWZpZXIgYW5kIHZlcnNpb24uCisgICAgLCBieXRlc19yZWFkKDApCisgICAgLCBzY3JlZW5fYmdj
b2xvcigwKQorICAgICwgdmVyc2lvbigwKQorICAgICwgc2NyZWVuX3dpZHRoKDApCisgICAgLCBz
Y3JlZW5faGVpZ2h0KDApCisgICAgLCBnbG9iYWxfY29sb3JtYXBfc2l6ZSgwKQorICAgICwgZ2xv
YmFsX2NvbG9ybWFwX3Bvc2l0aW9uKDApCisgICAgLCBpbWFnZXNfZGF0YV9jb21wbGV0ZSgwKQor
ICAgICwgaW1hZ2VzX2NvdW50KDApCisgICAgLCBsb29wX2NvdW50KGNMb29wQ291bnROb3RTZWVu
KQorICAgICwgaW1hZ2VfY29tcGxldGUoZmFsc2UpCit7Cit9CisKK2Jvb2wgR0lGSW1hZ2VSZWFk
ZXI6OmRlY29kZShHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5IHF1ZXJ5LCBpbnQgaGFsdEF0RnJh
bWUpCit7CisgICAgaWYgKGJ5dGVzX3JlYWQgPiByYXdfZGF0YS0+c2l6ZSgpKQorICAgICAgICBy
ZXR1cm4gY2xpZW50cHRyLT5zZXRGYWlsZWQoKTsKKworICAgIGlmIChxdWVyeSA9PSBHSUZJbWFn
ZURlY29kZXI6OkdJRkZ1bGxRdWVyeSkgeworICAgICAgICAvLyBEZWNvZGUgcGFyc2VkIGZyYW1l
cy4KKyAgICAgICAgd2hpbGUgKCFwcmV2aW91c19mcmFtZXMuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBHSUZGcmFtZUNvbnRleHQqIGZyYW1lID0gcHJldmlvdXNfZnJhbWVzLmZpcnN0KCkuZ2V0
KCk7CisgICAgICAgICAgICBpZiAoZnJhbWUtPmZyYW1lX2luZGV4ID49IGhhbHRBdEZyYW1lKQor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICAvLyBUaGVzZSBjYWxs
cyBhbHJlYWR5IGRvZXMgY2xpZW50cHRyLT5zZXRGYWlsZWQoKSBpZiBmYWlscy4KKyAgICAgICAg
ICAgIGlmICghZGVjb2RlUHJldmlvdXNMWldCbG9ja3MoZnJhbWUpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghY2xpZW50cHRyLT5mcmFtZUNvbXBsZXRl
KGZyYW1lLCBmcmFtZS0+ZnJhbWVfaW5kZXgsIGZyYW1lLT5kZWxheV90aW1lLCBmcmFtZS0+ZGlz
cG9zYWxfbWV0aG9kKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBwcmV2aW91c19mcmFtZXMucmVtb3ZlRmlyc3QoKTsKKyAgICAgICAgfQogCi0vKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLwotLyoKLSAqIHByb2Nlc3MgZGF0YSBhcnJpdmluZyBmcm9tIHRoZSBzdHJl
YW0gZm9yIHRoZSBnaWYgZGVjb2RlcgotICovCisgICAgICAgIC8vIERlY29kZSBwYXJzZWQgYmxv
Y2tzLgorICAgICAgICBpZiAoY3VycmVudF9mcmFtZSAmJiBjdXJyZW50X2ZyYW1lLT5mcmFtZV9p
bmRleCA8IGhhbHRBdEZyYW1lICYmICFkZWNvZGVQcmV2aW91c0xaV0Jsb2NrcyhjdXJyZW50X2Zy
YW1lLmdldCgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotYm9vbCBHSUZJbWFnZVJl
YWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwgCi0gICAg
ICAgICAgICAgICAgICAgICBHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5IHF1ZXJ5LCB1bnNpZ25l
ZCBoYWx0QXRGcmFtZSkKKyAgICAgICAgaWYgKGltYWdlX2NvbXBsZXRlICYmIHByZXZpb3VzX2Zy
YW1lcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGNsaWVudHB0ci0+Z2lmRGVjb2RlQ29tcGxl
dGUoKTsgLy8gV2hlbiB0aGUgR0lGIGlzIGRvbmUsIHdlIGNhbiBzdG9wLgorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZGVjb2RlKGJ5dGVz
X3JlYWQsIHJhd19kYXRhLT5zaXplKCkgLSBieXRlc19yZWFkLCBxdWVyeSwgaGFsdEF0RnJhbWUp
OworfQorCitjb25zdCB1bnNpZ25lZCBjaGFyKiBHSUZJbWFnZVJlYWRlcjo6Z2xvYmFsQ29sb3JN
YXAoKSBjb25zdAoreworICAgIGlmIChnbG9iYWxfY29sb3JtYXBfcG9zaXRpb24gKyBnbG9iYWxf
Y29sb3JtYXBfc2l6ZSAqIDMgPiByYXdfZGF0YS0+c2l6ZSgpKQorICAgICAgICByZXR1cm4gMDsK
KyAgICByZXR1cm4gZGF0YSgpICsgZ2xvYmFsX2NvbG9ybWFwX3Bvc2l0aW9uOworfQorCitjb25z
dCB1bnNpZ25lZCBjaGFyKiBHSUZJbWFnZVJlYWRlcjo6bG9jYWxDb2xvck1hcChjb25zdCBHSUZG
cmFtZUNvbnRleHQqIGZyYW1lKSBjb25zdAogewotICBpZiAoIWxlbikgewotICAgIC8vIE5vIG5l
dyBkYXRhIGhhcyBjb21lIGluIHNpbmNlIHRoZSBsYXN0IGNhbGwsIGp1c3QgaWdub3JlIHRoaXMg
Y2FsbC4KKyAgICBpZiAoZnJhbWUtPmxvY2FsX2NvbG9ybWFwX3Bvc2l0aW9uICsgZnJhbWUtPmxv
Y2FsX2NvbG9ybWFwX3NpemUgKiAzID4gcmF3X2RhdGEtPnNpemUoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIGRhdGEoKSArIGZyYW1lLT5sb2NhbF9jb2xvcm1hcF9wb3NpdGlvbjsK
K30KKworLy8gUHJvY2VzcyBkYXRhIGFycml2aW5nIGZyb20gdGhlIHN0cmVhbSBmb3IgdGhlIGdp
ZiBkZWNvZGVyLgorYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlKHVuc2lnbmVkIGRhdGFfcG9z
aXRpb24sIHVuc2lnbmVkIGxlbiwgR0lGSW1hZ2VEZWNvZGVyOjpHSUZRdWVyeSBxdWVyeSwgaW50
IGhhbHRBdEZyYW1lKQoreworICAvLyBObyBuZXcgZGF0YSBoYXMgY29tZSBpbiBzaW5jZSB0aGUg
bGFzdCBjYWxsLCBqdXN0IGlnbm9yZSB0aGlzIGNhbGwuCisgIGlmICghbGVuKQogICAgIHJldHVy
biB0cnVlOwotICB9CiAKLSAgY29uc3QgdW5zaWduZWQgY2hhciAqcSA9IGJ1ZjsKLQotICAvLyBB
ZGQgd2hhdCB3ZSBoYXZlIHNvIGZhciB0byB0aGUgYmxvY2sKLSAgLy8gSWYgcHJldmlvdXMgY2Fs
bCB0byBtZSBsZWZ0IHNvbWV0aGluZyBpbiB0aGUgaG9sZCBmaXJzdCBjb21wbGV0ZSBjdXJyZW50
IGJsb2NrCi0gIC8vIE9yIGlmIHdlIGFyZSBmaWxsaW5nIHRoZSBjb2xvcm1hcHMsIGZpcnN0IGNv
bXBsZXRlIHRoZSBjb2xvcm1hcAotICB1bnNpZ25lZCBjaGFyKiBwID0gMDsKLSAgaWYgKHN0YXRl
ID09IGdpZl9nbG9iYWxfY29sb3JtYXApCi0gICAgcCA9IGdsb2JhbF9jb2xvcm1hcDsKLSAgZWxz
ZSBpZiAoc3RhdGUgPT0gZ2lmX2ltYWdlX2NvbG9ybWFwKQotICAgIHAgPSBmcmFtZV9yZWFkZXIg
PyBmcmFtZV9yZWFkZXItPmxvY2FsX2NvbG9ybWFwIDogMDsKLSAgZWxzZSBpZiAoYnl0ZXNfaW5f
aG9sZCkKLSAgICBwID0gaG9sZDsKLSAgZWxzZQotICAgIHAgPSAwOwotCi0gIGlmIChwIHx8IChz
dGF0ZSA9PSBnaWZfZ2xvYmFsX2NvbG9ybWFwKSB8fCAoc3RhdGUgPT0gZ2lmX2ltYWdlX2NvbG9y
bWFwKSkgewotICAgIC8vIEFkZCB3aGF0IHdlIGhhdmUgc29mYXIgdG8gdGhlIGJsb2NrCi0gICAg
dW5zaWduZWQgbCA9IGxlbiA8IGJ5dGVzX3RvX2NvbnN1bWUgPyBsZW4gOiBieXRlc190b19jb25z
dW1lOwotICAgIGlmIChwKQotICAgICAgICBtZW1jcHkocCArIGJ5dGVzX2luX2hvbGQsIGJ1Ziwg
bCk7Ci0KLSAgICBpZiAobCA8IGJ5dGVzX3RvX2NvbnN1bWUpIHsKLSAgICAgIC8vIE5vdCBlbm91
Z2ggaW4gJ2J1ZicgdG8gY29tcGxldGUgY3VycmVudCBibG9jaywgZ2V0IG1vcmUKLSAgICAgIGJ5
dGVzX2luX2hvbGQgKz0gbDsKLSAgICAgIGJ5dGVzX3RvX2NvbnN1bWUgLT0gbDsKLSAgICAgIGlm
IChjbGllbnRwdHIpCi0gICAgICAgIGNsaWVudHB0ci0+ZGVjb2RpbmdIYWx0ZWQoMCk7Ci0gICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIFJlc2V0IGhvbGQgYnVmZmVyIGNvdW50Ci0g
ICAgYnl0ZXNfaW5faG9sZCA9IDA7Ci0gICAgLy8gUG9pbnQgJ3EnIHRvIGNvbXBsZXRlIGJsb2Nr
IGluIGhvbGQgKG9yIGluIGNvbG9ybWFwKQotICAgIHEgPSBwOworICBjb25zdCB1bnNpZ25lZCBj
aGFyICpxID0gZGF0YSgpICsgZGF0YV9wb3NpdGlvbjsKKworICAvLyBJZiB0aGVyZSdzIG5vdCBl
bm91Z2ggYnl0ZXMgZm9yIHRoaXMgYmxvY2sgdGhlbiByZXR1cm4uCisgIGlmIChsZW4gPCBieXRl
c190b19jb25zdW1lKSB7CisgICAgc2V0UmVtYWluaW5nQnl0ZXMobGVuKTsKKyAgICByZXR1cm4g
ZmFsc2U7CiAgIH0KIAogICAvLyBJbnZhcmlhbnQ6Ci0gIC8vICAgICdxJyBpcyBzdGFydCBvZiBj
dXJyZW50IHRvIGJlIHByb2Nlc3NlZCBibG9jayAoaG9sZCwgY29sb3JtYXAgb3IgYnVmKQotICAv
LyAgICAnYnl0ZXNfdG9fY29uc3VtZScgaXMgbnVtYmVyIG9mIGJ5dGVzIHRvIGNvbnN1bWUgZnJv
bSAnYnVmJwotICAvLyAgICAnYnVmJyBwb2ludHMgdG8gdGhlIGJ5dGVzIHRvIGJlIGNvbnN1bWVk
IGZyb20gdGhlIGlucHV0IGJ1ZmZlcgotICAvLyAgICAnbGVuJyBpcyBudW1iZXIgb2YgYnl0ZXMg
bGVmdCBpbiBpbnB1dCBidWZmZXIgZnJvbSBwb3NpdGlvbiAnYnVmJy4KLSAgLy8gICAgQXQgZW50
cmFuY2Ugb2YgdGhlIGZvciBsb29wIHdpbGwgJ2J1Zicgd2lsbCBiZSBtb3ZlZCAnYnl0ZXNfdG9f
Y29uc3VtZScKLSAgLy8gICAgdG8gcG9pbnQgdG8gbmV4dCBidWZmZXIsICdsZW4nIGlzIGFkanVz
dGVkIGFjY29yZGluZ2x5LgotICAvLyAgICBTbyB0aGF0IG5leHQgcm91bmQgaW4gZm9yIGxvb3As
IHEgZ2V0cyBwb2ludGVkIHRvIHRoZSBuZXh0IGJ1ZmZlci4KLQotICBmb3IgKDtsZW4gPj0gYnl0
ZXNfdG9fY29uc3VtZTsgcT1idWYpIHsKKyAgLy8gICAgJ3EnIGlzIHN0YXJ0IG9mIGN1cnJlbnQg
dG8gYmUgcHJvY2Vzc2VkIGJsb2NrLgorICAvLyAgICAnYnl0ZXNfdG9fY29uc3VtZScgaXMgbnVt
YmVyIG9mIGJ5dGVzIHRvIGNvbnN1bWUgZnJvbSAnZGF0YScKKyAgLy8gICAgJ2RhdGFfcG9zaXRp
b24nIHBvaW50cyB0byB0aGUgZmlyc3QgYnl0ZSB0byBiZSBjb25zdW1lZCBmcm9tICdkYXRhJwor
ICAvLyAgICAnbGVuJyBpcyBudW1iZXIgb2YgYnl0ZXMgbGVmdCBpbiBpbnB1dCBidWZmZXIgZnJv
bSBwb3NpdGlvbiAnZGF0YV9wb3NpdGlvbicuCisgIC8vICAgIEF0IGVudHJhbmNlIG9mIHRoZSBm
b3IgbG9vcCAnZGF0YV9wb3NpdGlvbicgd2lsbCBiZSBpbmNyZW1lbnRlZCAnYnl0ZXNfdG9fY29u
c3VtZScKKyAgLy8gICAgdG8gcG9pbnQgdG8gbmV4dCBibG9jaywgJ2xlbicgaXMgYWRqdXN0ZWQg
YWNjb3JkaW5nbHkuCisgIC8vICAgIFNvIHRoYXQgbmV4dCByb3VuZCBpbiBmb3IgbG9vcCwgcSBn
ZXRzIHBvaW50ZWQgdG8gdGhlIG5leHQgYmxvY2suCisKKyAgZm9yICg7bGVuID49IGJ5dGVzX3Rv
X2NvbnN1bWU7IHEgPSBkYXRhKCkgKyBkYXRhX3Bvc2l0aW9uKSB7CiAgICAgLy8gRWF0IHRoZSBj
dXJyZW50IGJsb2NrIGZyb20gdGhlIGJ1ZmZlciwgcSBrZWVwcyBwb2ludGVkIGF0IGN1cnJlbnQg
YmxvY2sKLSAgICBidWYgKz0gYnl0ZXNfdG9fY29uc3VtZTsKKyAgICBkYXRhX3Bvc2l0aW9uICs9
IGJ5dGVzX3RvX2NvbnN1bWU7CiAgICAgbGVuIC09IGJ5dGVzX3RvX2NvbnN1bWU7CiAKICAgICBz
d2l0Y2ggKHN0YXRlKQogICAgIHsKICAgICBjYXNlIGdpZl9senc6Ci0gICAgICBpZiAoIWRvX2x6
dyhxKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBJZiBkb19sencoKSBlbmNvdW50ZXJlZCBh
biBlcnJvciwgaXQgaGFzIGFscmVhZHkgY2FsbGVkCi0gICAgICAgICAgICAgICAgICAgICAgLy8g
Y2xpZW50cHRyLT5zZXRGYWlsZWQoKS4KKyAgICB7CisgICAgICB1bnNpZ25lZCBibG9ja19wb3Np
dGlvbiA9IGRhdGFfcG9zaXRpb24gLSBieXRlc190b19jb25zdW1lOworICAgICAgaWYgKHF1ZXJ5
ID09IEdJRkltYWdlRGVjb2Rlcjo6R0lGRnVsbFF1ZXJ5KSB7CisgICAgICAgIGlmICghZGVjb2Rl
TFpXQmxvY2soYmxvY2tfcG9zaXRpb24sIGJ5dGVzX3RvX2NvbnN1bWUsIGN1cnJlbnRfZnJhbWUu
Z2V0KCkpKQorICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAg
IGRlZmVyTFpXQmxvY2soYmxvY2tfcG9zaXRpb24sIGJ5dGVzX3RvX2NvbnN1bWUsIGN1cnJlbnRf
ZnJhbWUuZ2V0KCkpOworICAgICAgfQogICAgICAgR0VUTigxLCBnaWZfc3ViX2Jsb2NrKTsKICAg
ICAgIGJyZWFrOworICAgIH0KIAogICAgIGNhc2UgZ2lmX2x6d19zdGFydDoKICAgICB7Ci0gICAg
ICAvKiBJbml0aWFsaXplIExaVyBwYXJzZXIvZGVjb2RlciAqLwotICAgICAgaW50IGRhdGFzaXpl
ID0gKnE7Ci0gICAgICAvLyBTaW5jZSB3ZSB1c2UgYSBjb2Rlc2l6ZSBvZiAxIG1vcmUgdGhhbiB0
aGUgZGF0YXNpemUsIHdlIG5lZWQgdG8gZW5zdXJlCi0gICAgICAvLyB0aGF0IG91ciBkYXRhc2l6
ZSBpcyBzdHJpY3RseSBsZXNzIHRoYW4gdGhlIE1BWF9MWldfQklUUyB2YWx1ZSAoMTIpLgotICAg
ICAgLy8gVGhpcyBzZXRzIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGNvZGVtYXNrIGNvcnJlY3RseSBh
dCA0MDk1LgotICAgICAgaWYgKGRhdGFzaXplID49IE1BWF9MWldfQklUUykKLSAgICAgICAgcmV0
dXJuIGNsaWVudHB0ciA/IGNsaWVudHB0ci0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKLSAgICAgIGlu
dCBjbGVhcl9jb2RlID0gMSA8PCBkYXRhc2l6ZTsKLSAgICAgIGlmIChjbGVhcl9jb2RlID49IE1B
WF9CSVRTKQotICAgICAgICByZXR1cm4gY2xpZW50cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQo
KSA6IGZhbHNlOwotCi0gICAgICBpZiAoZnJhbWVfcmVhZGVyKSB7Ci0gICAgICAgIGZyYW1lX3Jl
YWRlci0+ZGF0YXNpemUgPSBkYXRhc2l6ZTsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT5jbGVhcl9j
b2RlID0gY2xlYXJfY29kZTsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT5hdmFpbCA9IGZyYW1lX3Jl
YWRlci0+Y2xlYXJfY29kZSArIDI7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+b2xkY29kZSA9IC0x
OwotICAgICAgICBmcmFtZV9yZWFkZXItPmNvZGVzaXplID0gZnJhbWVfcmVhZGVyLT5kYXRhc2l6
ZSArIDE7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+Y29kZW1hc2sgPSAoMSA8PCBmcmFtZV9yZWFk
ZXItPmNvZGVzaXplKSAtIDE7Ci0KLSAgICAgICAgZnJhbWVfcmVhZGVyLT5kYXR1bSA9IGZyYW1l
X3JlYWRlci0+Yml0cyA9IDA7Ci0KLSAgICAgICAgLyogaW5pdCB0aGUgdGFibGVzICovCi0gICAg
ICAgIGlmICghZnJhbWVfcmVhZGVyLT5zdWZmaXgpCi0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5z
dWZmaXggPSBuZXcgdW5zaWduZWQgY2hhcltNQVhfQklUU107Ci0gICAgICAgIC8vIENsZWFyaW5n
IHRoZSB3aG9sZSBzdWZmaXggdGFibGUgbGV0cyB1cyBiZSBtb3JlIHRvbGVyYW50IG9mIGJhZCBk
YXRhLgotICAgICAgICBtZW1zZXQoZnJhbWVfcmVhZGVyLT5zdWZmaXgsIDAsIE1BWF9CSVRTKTsK
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFtZV9yZWFkZXItPmNsZWFyX2NvZGU7IGkr
KykKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPnN1ZmZpeFtpXSA9IGk7Ci0KLSAgICAgICAgaWYg
KCFmcmFtZV9yZWFkZXItPnN0YWNrKQotICAgICAgICAgIGZyYW1lX3JlYWRlci0+c3RhY2sgPSBu
ZXcgdW5zaWduZWQgY2hhcltNQVhfQklUU107Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+c3RhY2tw
ID0gZnJhbWVfcmVhZGVyLT5zdGFjazsKLSAgICAgIH0KLQorICAgICAgLy8gT25seSBzYXZlIHRo
ZSBkYXRhc2l6ZSwgTFpXIGNvbnRleHQgaXMgaW5pdGlhbGl6ZWQgd2hlbiBkZWNvZGUgc3RhcnRz
LgorICAgICAgY3VycmVudF9mcmFtZS0+ZGF0YXNpemUgPSAqcTsKICAgICAgIEdFVE4oMSwgZ2lm
X3N1Yl9ibG9jayk7CiAgICAgfQogICAgIGJyZWFrOwpAQCAtNDk3LDcgKzQ5NSw3IEBAIGJvb2wg
R0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBs
ZW4sCiAgICAgICBlbHNlIGlmICghc3RybmNtcCgoY2hhciopcSwgIkdJRjg3YSIsIDYpKQogICAg
ICAgICB2ZXJzaW9uID0gODc7CiAgICAgICBlbHNlCi0gICAgICAgIHJldHVybiBjbGllbnRwdHIg
PyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7CisgICAgICAgIHJldHVybiByZXBvcnRQ
YXJzZUVycm9yKHF1ZXJ5KTsKICAgICAgIEdFVE4oNywgZ2lmX2dsb2JhbF9oZWFkZXIpOwogICAg
IH0KICAgICBicmVhazsKQEAgLTUyMiwyMyArNTIwLDE3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6
OnJlYWQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sCiAgICAgICBnbG9i
YWxfY29sb3JtYXBfc2l6ZSA9IDI8PChxWzRdJjB4MDcpOwogCiAgICAgICBpZiAoKHFbNF0gJiAw
eDgwKSAmJiBnbG9iYWxfY29sb3JtYXBfc2l6ZSA+IDApIHsgLyogZ2xvYmFsIG1hcCAqLworICAg
ICAgICBnbG9iYWxfY29sb3JtYXBfcG9zaXRpb24gPSBkYXRhX3Bvc2l0aW9uOworCiAgICAgICAg
IC8vIEdldCB0aGUgZ2xvYmFsIGNvbG9ybWFwCiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNpemUg
PSAzKmdsb2JhbF9jb2xvcm1hcF9zaXplOwotICAgICAgICAKLSAgICAgICAgLy8gTWFsbG9jIHRo
ZSBjb2xvciBtYXAsIGJ1dCBvbmx5IGlmIHdlJ3JlIG5vdCBqdXN0IGNvdW50aW5nIGZyYW1lcy4K
LSAgICAgICAgaWYgKHF1ZXJ5ICE9IEdJRkltYWdlRGVjb2Rlcjo6R0lGRnJhbWVDb3VudFF1ZXJ5
KQotICAgICAgICAgIGdsb2JhbF9jb2xvcm1hcCA9IG5ldyB1bnNpZ25lZCBjaGFyW3NpemVdOwot
CiAgICAgICAgIGlmIChsZW4gPCBzaXplKSB7Ci0gICAgICAgICAgLy8gVXNlICdob2xkJyBwYXR0
ZXJuIHRvIGdldCB0aGUgZ2xvYmFsIGNvbG9ybWFwCisgICAgICAgICAgLy8gTm90IGVub3VnaCBi
eXRlcyB0byByZWFkIHRoZSBlbnRpcmUgZ2xvYmFsIGNvbG9ybWFwLgogICAgICAgICAgIEdFVE4o
c2l6ZSwgZ2lmX2dsb2JhbF9jb2xvcm1hcCk7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIC8vIENvcHkgZXZlcnl0aGluZyBhbmQgZ28gZGlyZWN0bHkgdG8g
Z2lmX2ltYWdlX3N0YXJ0LgotICAgICAgICBpZiAoZ2xvYmFsX2NvbG9ybWFwKQotICAgICAgICAg
ICAgbWVtY3B5KGdsb2JhbF9jb2xvcm1hcCwgYnVmLCBzaXplKTsKLSAgICAgICAgYnVmICs9IHNp
emU7CisKKyAgICAgICAgZGF0YV9wb3NpdGlvbiArPSBzaXplOwogICAgICAgICBsZW4gLT0gc2l6
ZTsKICAgICAgIH0KIApAQCAtNTczLDcgKzU2NSw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJl
YWQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sCiAgICAgICAgKiB1bnRp
bCB3ZSBmaW5kIGFuIGltYWdlIHNlcGFyYXRvciwgYnV0IEdJRjg5YSBzYXlzIHN1Y2gKICAgICAg
ICAqIGEgZmlsZSBpcyBjb3JydXB0LiBXZSBmb2xsb3cgR0lGODlhIGFuZCBiYWlsIG91dC4gKi8K
ICAgICAgIGlmICgqcSAhPSAnLCcpCi0gICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRw
dHItPnNldEZhaWxlZCgpIDogZmFsc2U7CisgICAgICAgIHJldHVybiByZXBvcnRQYXJzZUVycm9y
KHF1ZXJ5KTsKIAogICAgICAgR0VUTig5LCBnaWZfaW1hZ2VfaGVhZGVyKTsKICAgICB9CkBAIC01
ODEsNyArNTczLDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZCBj
aGFyICpidWYsIHVuc2lnbmVkIGxlbiwKIAogICAgIGNhc2UgZ2lmX2V4dGVuc2lvbjoKICAgICB7
Ci0gICAgICBjb3VudCA9IHFbMV07CisgICAgICB1bnNpZ25lZCBjb3VudCA9IHFbMV07CiAgICAg
ICBnc3RhdGUgZXMgPSBnaWZfc2tpcF9ibG9jazsKIAogICAgICAgLy8gVGhlIEdJRiBzcGVjIG1h
bmRhdGVzIGxlbmd0aHMgZm9yIHRocmVlIG9mIHRoZSBleHRlbnNpb25zIGJlbG93LgpAQCAtNjAz
LDE3ICs1OTUsMTcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZCBj
aGFyICpidWYsIHVuc2lnbmVkIGxlbiwKICAgICAgIHsKICAgICAgIGNhc2UgMHhmOToKICAgICAg
ICAgZXMgPSBnaWZfY29udHJvbF9leHRlbnNpb247Ci0gICAgICAgIGNvdW50ID0gc3RkOjptYXgo
Y291bnQsIDQpOworICAgICAgICBjb3VudCA9IHN0ZDo6bWF4KGNvdW50LCA0dSk7CiAgICAgICAg
IGJyZWFrOwogCiAgICAgICBjYXNlIDB4MDE6CiAgICAgICAgIC8vIGlnbm9yaW5nIHBsYWluIHRl
eHQgZXh0ZW5zaW9uCi0gICAgICAgIGNvdW50ID0gc3RkOjptYXgoY291bnQsIDEyKTsKKyAgICAg
ICAgY291bnQgPSBzdGQ6Om1heChjb3VudCwgMTJ1KTsKICAgICAgICAgYnJlYWs7CiAKICAgICAg
IGNhc2UgMHhmZjoKICAgICAgICAgZXMgPSBnaWZfYXBwbGljYXRpb25fZXh0ZW5zaW9uOwotICAg
ICAgICBjb3VudCA9IHN0ZDo6bWF4KGNvdW50LCAxMSk7CisgICAgICAgIGNvdW50ID0gc3RkOjpt
YXgoY291bnQsIDExdSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIDB4ZmU6CkBAIC02
NDEsMjkgKzYzMywyNSBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVk
IGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLAogCiAgICAgY2FzZSBnaWZfY29udHJvbF9leHRlbnNp
b246CiAgICAgewotICAgICAgaWYgKHF1ZXJ5ICE9IEdJRkltYWdlRGVjb2Rlcjo6R0lGRnJhbWVD
b3VudFF1ZXJ5KSB7Ci0gICAgICAgICAgaWYgKCFmcmFtZV9yZWFkZXIpCi0gICAgICAgICAgICBm
cmFtZV9yZWFkZXIgPSBuZXcgR0lGRnJhbWVSZWFkZXIoKTsKLSAgICAgIH0KKyAgICAgIGlmICgh
Y3VycmVudF9mcmFtZSkKKyAgICAgICAgY3VycmVudF9mcmFtZSA9IGFkb3B0UHRyKG5ldyBHSUZG
cmFtZUNvbnRleHQoaW1hZ2VzX2RhdGFfY29tcGxldGUpKTsKIAotICAgICAgaWYgKGZyYW1lX3Jl
YWRlcikgewotICAgICAgICBpZiAoKnEgJiAweDEpIHsKLSAgICAgICAgICBmcmFtZV9yZWFkZXIt
PnRwaXhlbCA9IHFbM107Ci0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5pc190cmFuc3BhcmVudCA9
IHRydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5pc190cmFu
c3BhcmVudCA9IGZhbHNlOwotICAgICAgICAgIC8vIGlnbm9yaW5nIGdmeCBjb250cm9sIGV4dGVu
c2lvbgotICAgICAgICB9Ci0gICAgICAgIC8vIE5PVEU6IFRoaXMgcmVsaWVzIG9uIHRoZSB2YWx1
ZXMgaW4gdGhlIEZyYW1lRGlzcG9zYWxNZXRob2QgZW51bQotICAgICAgICAvLyBtYXRjaGluZyB0
aG9zZSBpbiB0aGUgR0lGIHNwZWMhCi0gICAgICAgIGludCBkaXNwb3NhbF9tZXRob2QgPSAoKCpx
KSA+PiAyKSAmIDB4NzsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT5kaXNwb3NhbF9tZXRob2QgPSAo
V2ViQ29yZTo6SW1hZ2VGcmFtZTo6RnJhbWVEaXNwb3NhbE1ldGhvZClkaXNwb3NhbF9tZXRob2Q7
Ci0gICAgICAgIC8vIFNvbWUgc3BlY3Mgc2F5IDNyZCBiaXQgKHZhbHVlIDQpLCBvdGhlciBzcGVj
cyBzYXkgdmFsdWUgMwotICAgICAgICAvLyBMZXQncyBjaG9vc2UgMyAodGhlIG1vcmUgcG9wdWxh
cikKLSAgICAgICAgaWYgKGRpc3Bvc2FsX21ldGhvZCA9PSA0KQotICAgICAgICAgIGZyYW1lX3Jl
YWRlci0+ZGlzcG9zYWxfbWV0aG9kID0gV2ViQ29yZTo6SW1hZ2VGcmFtZTo6RGlzcG9zZU92ZXJ3
cml0ZVByZXZpb3VzOwotICAgICAgICBmcmFtZV9yZWFkZXItPmRlbGF5X3RpbWUgPSBHRVRJTlQx
NihxICsgMSkgKiAxMDsKKyAgICAgIGlmICgqcSAmIDB4MSkgeworICAgICAgICBjdXJyZW50X2Zy
YW1lLT50cGl4ZWwgPSBxWzNdOworICAgICAgICBjdXJyZW50X2ZyYW1lLT5pc190cmFuc3BhcmVu
dCA9IHRydWU7CisgICAgICB9IGVsc2UgeworICAgICAgICBjdXJyZW50X2ZyYW1lLT5pc190cmFu
c3BhcmVudCA9IGZhbHNlOworICAgICAgICAvLyBpZ25vcmluZyBnZnggY29udHJvbCBleHRlbnNp
b24KICAgICAgIH0KKyAgICAgIC8vIE5PVEU6IFRoaXMgcmVsaWVzIG9uIHRoZSB2YWx1ZXMgaW4g
dGhlIEZyYW1lRGlzcG9zYWxNZXRob2QgZW51bQorICAgICAgLy8gbWF0Y2hpbmcgdGhvc2UgaW4g
dGhlIEdJRiBzcGVjIQorICAgICAgaW50IGRpc3Bvc2FsX21ldGhvZCA9ICgoKnEpID4+IDIpICYg
MHg3OworICAgICAgY3VycmVudF9mcmFtZS0+ZGlzcG9zYWxfbWV0aG9kID0gKEltYWdlRnJhbWU6
OkZyYW1lRGlzcG9zYWxNZXRob2QpZGlzcG9zYWxfbWV0aG9kOworICAgICAgLy8gU29tZSBzcGVj
cyBzYXkgM3JkIGJpdCAodmFsdWUgNCksIG90aGVyIHNwZWNzIHNheSB2YWx1ZSAzCisgICAgICAv
LyBMZXQncyBjaG9vc2UgMyAodGhlIG1vcmUgcG9wdWxhcikKKyAgICAgIGlmIChkaXNwb3NhbF9t
ZXRob2QgPT0gNCkKKyAgICAgICAgY3VycmVudF9mcmFtZS0+ZGlzcG9zYWxfbWV0aG9kID0gSW1h
Z2VGcmFtZTo6RGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzOworICAgICAgY3VycmVudF9mcmFtZS0+
ZGVsYXlfdGltZSA9IEdFVElOVDE2KHEgKyAxKSAqIDEwOwogICAgICAgR0VUTigxLCBnaWZfY29u
c3VtZV9ibG9jayk7CiAgICAgfQogICAgIGJyZWFrOwpAQCAtNzIyLDcgKzcxMCw3IEBAIGJvb2wg
R0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBs
ZW4sCiAgICAgICAgIEdFVE4oMSwgZ2lmX25ldHNjYXBlX2V4dGVuc2lvbl9ibG9jayk7CiAgICAg
ICB9IGVsc2UgewogICAgICAgICAvLyAwLDMtNyBhcmUgeWV0IHRvIGJlIGRlZmluZWQgbmV0c2Nh
cGUgZXh0ZW5zaW9uIGNvZGVzCi0gICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRwdHIt
PnNldEZhaWxlZCgpIDogZmFsc2U7CisgICAgICAgIHJldHVybiByZXBvcnRQYXJzZUVycm9yKHF1
ZXJ5KTsKICAgICAgIH0KIAogICAgICAgYnJlYWs7CkBAIC03NDQsNyArNzMyLDcgQEAgYm9vbCBH
SUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxl
biwKICAgICAgICAqIHNpemUgaGFzIHdlaXJkIHdpZHRoIG9yIGhlaWdodC4gIFdlIGFzc3VtZSB0
aGF0IEdJRjg3YQogICAgICAgICogZmlsZXMgZG9uJ3QgY29udGFpbiBhbmltYXRpb25zLgogICAg
ICAgICovCi0gICAgICBpZiAoKGltYWdlc19kZWNvZGVkID09IDApICYmCisgICAgICBpZiAoKGlt
YWdlc19kYXRhX2NvbXBsZXRlID09IDApICYmCiAgICAgICAgICAgKChzY3JlZW5faGVpZ2h0IDwg
aGVpZ2h0KSB8fCAoc2NyZWVuX3dpZHRoIDwgd2lkdGgpIHx8CiAgICAgICAgICAgICh2ZXJzaW9u
ID09IDg3KSkpCiAgICAgICB7CkBAIC03NjQsMTA4ICs3NTIsODggQEAgYm9vbCBHSUZJbWFnZVJl
YWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwKICAgICAg
ICAgaGVpZ2h0ID0gc2NyZWVuX2hlaWdodDsKICAgICAgICAgd2lkdGggPSBzY3JlZW5fd2lkdGg7
CiAgICAgICAgIGlmICghaGVpZ2h0IHx8ICF3aWR0aCkKLSAgICAgICAgICByZXR1cm4gY2xpZW50
cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAgICAgIHJldHVybiBy
ZXBvcnRQYXJzZUVycm9yKHF1ZXJ5KTsKICAgICAgIH0KIAotICAgICAgaWYgKHF1ZXJ5ID09IEdJ
RkltYWdlRGVjb2Rlcjo6R0lGU2l6ZVF1ZXJ5IHx8IGhhbHRBdEZyYW1lID09IGltYWdlc19kZWNv
ZGVkKSB7CisgICAgICBpZiAocXVlcnkgPT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZTaXplUXVlcnkg
fHwgaGFsdEF0RnJhbWUgPT0gaW1hZ2VzX2RhdGFfY29tcGxldGUpIHsKICAgICAgICAgLy8gVGhl
IGRlY29kZXIgbmVlZHMgdG8gc3RvcC4gIEhhbmQgYmFjayB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdl
IGNvbnN1bWVkIGZyb20KICAgICAgICAgLy8gYnVmZmVyIG1pbnVzIDkgKHRoZSBhbW91bnQgd2Ug
Y29uc3VtZWQgdG8gcmVhZCB0aGUgaGVhZGVyKS4KLSAgICAgICAgaWYgKGNsaWVudHB0cikKLSAg
ICAgICAgICAgIGNsaWVudHB0ci0+ZGVjb2RpbmdIYWx0ZWQobGVuICsgOSk7CisgICAgICAgIHNl
dFJlbWFpbmluZ0J5dGVzKGxlbiArIDkpOwogICAgICAgICBHRVROKDksIGdpZl9pbWFnZV9oZWFk
ZXIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgIH0KLSAgICAgIAotICAgICAgaW1hZ2Vz
X2NvdW50ID0gaW1hZ2VzX2RlY29kZWQgKyAxOwotCi0gICAgICBpZiAocXVlcnkgPT0gR0lGSW1h
Z2VEZWNvZGVyOjpHSUZGdWxsUXVlcnkgJiYgIWZyYW1lX3JlYWRlcikKLSAgICAgICAgZnJhbWVf
cmVhZGVyID0gbmV3IEdJRkZyYW1lUmVhZGVyKCk7Ci0KLSAgICAgIGlmIChmcmFtZV9yZWFkZXIp
IHsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT54X29mZnNldCA9IHhfb2Zmc2V0OwotICAgICAgICBm
cmFtZV9yZWFkZXItPnlfb2Zmc2V0ID0geV9vZmZzZXQ7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+
aGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBmcmFtZV9yZWFkZXItPndpZHRoID0gd2lkdGg7Ci0K
LSAgICAgICAgLyogVGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgdGFrZW4gaWYgdGhpcyBpcyB0aGUg
Zmlyc3QgaW1hZ2UgKi8KLSAgICAgICAgLyogYmVpbmcgZGVjb2RlZC4gSWYgYW55IG9mIHRoZSBs
YXRlciBpbWFnZXMgYXJlIGxhcmdlciAgICAgKi8KLSAgICAgICAgLyogdGhhbiB0aGUgc2NyZWVu
IHNpemUsIHdlIG5lZWQgdG8gcmVhbGxvY2F0ZSBidWZmZXJzLiAgICAgKi8KLSAgICAgICAgaWYg
KHNjcmVlbl93aWR0aCA8IHdpZHRoKSB7Ci0gICAgICAgICAgLyogWFhYIERldmlhbnQhICovCi0K
LSAgICAgICAgICBkZWxldGUgW11mcmFtZV9yZWFkZXItPnJvd2J1ZjsKLSAgICAgICAgICBzY3Jl
ZW5fd2lkdGggPSB3aWR0aDsKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPnJvd2J1ZiA9IG5ldyB1
bnNpZ25lZCBjaGFyW3NjcmVlbl93aWR0aF07Ci0gICAgICAgIH0gZWxzZSBpZiAoIWZyYW1lX3Jl
YWRlci0+cm93YnVmKSB7Ci0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5yb3didWYgPSBuZXcgdW5z
aWduZWQgY2hhcltzY3JlZW5fd2lkdGhdOwotICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFmcmFt
ZV9yZWFkZXItPnJvd2J1ZikKLSAgICAgICAgICByZXR1cm4gY2xpZW50cHRyID8gY2xpZW50cHRy
LT5zZXRGYWlsZWQoKSA6IGZhbHNlOwotICAgICAgICBpZiAoc2NyZWVuX2hlaWdodCA8IGhlaWdo
dCkKLSAgICAgICAgICBzY3JlZW5faGVpZ2h0ID0gaGVpZ2h0OworICAgICAgLy8gRm91bmQgYSBu
ZXcgZnJhbWUgaGVhZGVyIHNvIGluY3JlbWVudCBpbWFnZXMgY291bnQuCisgICAgICBpbWFnZXNf
Y291bnQgPSBpbWFnZXNfZGF0YV9jb21wbGV0ZSArIDE7CiAKLSAgICAgICAgaWYgKHFbOF0gJiAw
eDQwKSB7Ci0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5pbnRlcmxhY2VkID0gdHJ1ZTsKLSAgICAg
ICAgICBmcmFtZV9yZWFkZXItPmlwYXNzID0gMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICBmcmFtZV9yZWFkZXItPmludGVybGFjZWQgPSBmYWxzZTsKLSAgICAgICAgICBmcmFtZV9yZWFk
ZXItPmlwYXNzID0gMDsKLSAgICAgICAgfQorICAgICAgaWYgKCFjdXJyZW50X2ZyYW1lKQorICAg
ICAgICBjdXJyZW50X2ZyYW1lID0gYWRvcHRQdHIobmV3IEdJRkZyYW1lQ29udGV4dChpbWFnZXNf
ZGF0YV9jb21wbGV0ZSkpOwogCi0gICAgICAgIGlmIChpbWFnZXNfZGVjb2RlZCA9PSAwKSB7Ci0g
ICAgICAgICAgZnJhbWVfcmVhZGVyLT5wcm9ncmVzc2l2ZV9kaXNwbGF5ID0gdHJ1ZTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAvKiBPdmVybGF5aW5nIGludGVybGFjZWQsIHRyYW5zcGFy
ZW50IEdJRnMgb3ZlcgotICAgICAgICAgICAgIGV4aXN0aW5nIGltYWdlIGRhdGEgdXNpbmcgdGhl
IEhhZWJlcmxpIGRpc3BsYXkgaGFjawotICAgICAgICAgICAgIHJlcXVpcmVzIHNhdmluZyB0aGUg
dW5kZXJseWluZyBpbWFnZSBpbiBvcmRlciB0bwotICAgICAgICAgICAgIGF2b2lkIGphZ2dpZXMg
YXQgdGhlIHRyYW5zcGFyZW5jeSBlZGdlcy4gIFdlIGFyZQotICAgICAgICAgICAgIHVucHJlcGFy
ZWQgdG8gZGVhbCB3aXRoIHRoYXQsIHNvIGRvbid0IGRpc3BsYXkgc3VjaAotICAgICAgICAgICAg
IGltYWdlcyBwcm9ncmVzc2l2ZWx5ICovCi0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5wcm9ncmVz
c2l2ZV9kaXNwbGF5ID0gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgIGN1cnJlbnRfZnJhbWUtPnhf
b2Zmc2V0ID0geF9vZmZzZXQ7CisgICAgICBjdXJyZW50X2ZyYW1lLT55X29mZnNldCA9IHlfb2Zm
c2V0OworICAgICAgY3VycmVudF9mcmFtZS0+aGVpZ2h0ID0gaGVpZ2h0OworICAgICAgY3VycmVu
dF9mcmFtZS0+d2lkdGggPSB3aWR0aDsKKworICAgICAgLyogVGhpcyBjYXNlIHdpbGwgbmV2ZXIg
YmUgdGFrZW4gaWYgdGhpcyBpcyB0aGUgZmlyc3QgaW1hZ2UgKi8KKyAgICAgIC8qIGJlaW5nIGRl
Y29kZWQuIElmIGFueSBvZiB0aGUgbGF0ZXIgaW1hZ2VzIGFyZSBsYXJnZXIgICAgICovCisgICAg
ICAvKiB0aGFuIHRoZSBzY3JlZW4gc2l6ZSwgd2UgbmVlZCB0byByZWFsbG9jYXRlIGJ1ZmZlcnMu
ICAgICAqLworICAgICAgaWYgKHNjcmVlbl93aWR0aCA8IHdpZHRoKSB7CisgICAgICAgIC8qIFhY
WCBEZXZpYW50ISAqLworICAgICAgICBzY3JlZW5fd2lkdGggPSB3aWR0aDsKKyAgICAgIH0KKyAg
ICAgIHJvd2J1Zi5yZXNpemUoc2NyZWVuX3dpZHRoKTsKKworICAgICAgaWYgKHNjcmVlbl9oZWln
aHQgPCBoZWlnaHQpCisgICAgICAgIHNjcmVlbl9oZWlnaHQgPSBoZWlnaHQ7CiAKLSAgICAgICAg
LyogQ2xlYXIgc3RhdGUgZnJvbSBsYXN0IGltYWdlICovCi0gICAgICAgIGZyYW1lX3JlYWRlci0+
aXJvdyA9IDA7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+cm93c19yZW1haW5pbmcgPSBmcmFtZV9y
ZWFkZXItPmhlaWdodDsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT5yb3dlbmQgPSBmcmFtZV9yZWFk
ZXItPnJvd2J1ZiArIGZyYW1lX3JlYWRlci0+d2lkdGg7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+
cm93cCA9IGZyYW1lX3JlYWRlci0+cm93YnVmOworICAgICAgaWYgKHFbOF0gJiAweDQwKSB7Cisg
ICAgICAgIGN1cnJlbnRfZnJhbWUtPmludGVybGFjZWQgPSB0cnVlOworICAgICAgICBjdXJyZW50
X2ZyYW1lLT5pcGFzcyA9IDE7CisgICAgICB9IGVsc2UgeworICAgICAgICBjdXJyZW50X2ZyYW1l
LT5pbnRlcmxhY2VkID0gZmFsc2U7CisgICAgICAgIGN1cnJlbnRfZnJhbWUtPmlwYXNzID0gMDsK
KyAgICAgIH0KIAotICAgICAgICAvKiBiaXRzIHBlciBwaXhlbCBpcyBxWzhdJjB4MDcgKi8KKyAg
ICAgIGlmIChpbWFnZXNfZGF0YV9jb21wbGV0ZSA9PSAwKSB7CisgICAgICAgIGN1cnJlbnRfZnJh
bWUtPnByb2dyZXNzaXZlX2Rpc3BsYXkgPSB0cnVlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAg
LyogT3ZlcmxheWluZyBpbnRlcmxhY2VkLCB0cmFuc3BhcmVudCBHSUZzIG92ZXIKKyAgICAgICAg
ICAgZXhpc3RpbmcgaW1hZ2UgZGF0YSB1c2luZyB0aGUgSGFlYmVybGkgZGlzcGxheSBoYWNrCisg
ICAgICAgICAgIHJlcXVpcmVzIHNhdmluZyB0aGUgdW5kZXJseWluZyBpbWFnZSBpbiBvcmRlciB0
bworICAgICAgICAgICBhdm9pZCBqYWdnaWVzIGF0IHRoZSB0cmFuc3BhcmVuY3kgZWRnZXMuICBX
ZSBhcmUKKyAgICAgICAgICAgdW5wcmVwYXJlZCB0byBkZWFsIHdpdGggdGhhdCwgc28gZG9uJ3Qg
ZGlzcGxheSBzdWNoCisgICAgICAgICAgIGltYWdlcyBwcm9ncmVzc2l2ZWx5ICovCisgICAgICAg
IGN1cnJlbnRfZnJhbWUtPnByb2dyZXNzaXZlX2Rpc3BsYXkgPSBmYWxzZTsKICAgICAgIH0KLSAg
ICAgIAorCisgICAgICAvKiBDbGVhciBzdGF0ZSBmcm9tIGxhc3QgaW1hZ2UgKi8KKyAgICAgIGN1
cnJlbnRfZnJhbWUtPmlyb3cgPSAwOworICAgICAgY3VycmVudF9mcmFtZS0+cm93c19yZW1haW5p
bmcgPSBjdXJyZW50X2ZyYW1lLT5oZWlnaHQ7CisgICAgICBjdXJyZW50X2ZyYW1lLT5yb3dwID0g
MDsKKworICAgICAgLyogYml0cyBwZXIgcGl4ZWwgaXMgcVs4XSYweDA3ICovCiAgICAgICBpZiAo
cVs4XSAmIDB4ODApIC8qIGhhcyBhIGxvY2FsIGNvbG9ybWFwPyAqLwogICAgICAgewotICAgICAg
ICBpbnQgbnVtX2NvbG9ycyA9IDIgPDwgKHFbOF0gJiAweDcpOworICAgICAgICB1bnNpZ25lZCBu
dW1fY29sb3JzID0gMiA8PCAocVs4XSAmIDB4Nyk7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNp
emUgPSAzKm51bV9jb2xvcnM7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgKm1hcCA9IGZyYW1lX3Jl
YWRlciA/IGZyYW1lX3JlYWRlci0+bG9jYWxfY29sb3JtYXAgOiAwOwotICAgICAgICBpZiAoZnJh
bWVfcmVhZGVyICYmICghbWFwIHx8IChudW1fY29sb3JzID4gZnJhbWVfcmVhZGVyLT5sb2NhbF9j
b2xvcm1hcF9zaXplKSkpIHsKLSAgICAgICAgICBkZWxldGUgW11tYXA7Ci0gICAgICAgICAgbWFw
ID0gbmV3IHVuc2lnbmVkIGNoYXJbc2l6ZV07Ci0gICAgICAgICAgaWYgKCFtYXApCi0gICAgICAg
ICAgICByZXR1cm4gY2xpZW50cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQoKSA6IGZhbHNlOwot
ICAgICAgICB9CiAKICAgICAgICAgLyogU3dpdGNoIHRvIHRoZSBuZXcgbG9jYWwgcGFsZXR0ZSBh
ZnRlciBpdCBsb2FkcyAqLwotICAgICAgICBpZiAoZnJhbWVfcmVhZGVyKSB7Ci0gICAgICAgICAg
ZnJhbWVfcmVhZGVyLT5sb2NhbF9jb2xvcm1hcCA9IG1hcDsKLSAgICAgICAgICBmcmFtZV9yZWFk
ZXItPmxvY2FsX2NvbG9ybWFwX3NpemUgPSBudW1fY29sb3JzOwotICAgICAgICAgIGZyYW1lX3Jl
YWRlci0+aXNfbG9jYWxfY29sb3JtYXBfZGVmaW5lZCA9IHRydWU7Ci0gICAgICAgIH0KKyAgICAg
ICAgY3VycmVudF9mcmFtZS0+bG9jYWxfY29sb3JtYXBfcG9zaXRpb24gPSBkYXRhX3Bvc2l0aW9u
OworICAgICAgICBjdXJyZW50X2ZyYW1lLT5sb2NhbF9jb2xvcm1hcF9zaXplID0gbnVtX2NvbG9y
czsKKyAgICAgICAgY3VycmVudF9mcmFtZS0+aXNfbG9jYWxfY29sb3JtYXBfZGVmaW5lZCA9IHRy
dWU7CiAKICAgICAgICAgaWYgKGxlbiA8IHNpemUpIHsKLSAgICAgICAgICAvLyBVc2UgJ2hvbGQn
IHBhdHRlcm4gdG8gZ2V0IHRoZSBpbWFnZSBjb2xvcm1hcAorICAgICAgICAgIC8vIERvbid0IGhh
dmUgZW5vdWdoIGRhdGEgZm9yIGltYWdlIGNvbG9ybWFwLgogICAgICAgICAgIEdFVE4oc2l6ZSwg
Z2lmX2ltYWdlX2NvbG9ybWFwKTsKICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAg
ICAvLyBDb3B5IGV2ZXJ5dGhpbmcgYW5kIGRpcmVjdGx5IGdvIHRvIGdpZl9sendfc3RhcnQKLSAg
ICAgICAgaWYgKGZyYW1lX3JlYWRlcikKLSAgICAgICAgICBtZW1jcHkoZnJhbWVfcmVhZGVyLT5s
b2NhbF9jb2xvcm1hcCwgYnVmLCBzaXplKTsKLSAgICAgICAgYnVmICs9IHNpemU7CisKKyAgICAg
ICAgLy8gRGlyZWN0bHkgZ28gdG8gZ2lmX2x6d19zdGFydAorICAgICAgICBkYXRhX3Bvc2l0aW9u
ICs9IHNpemU7CiAgICAgICAgIGxlbiAtPSBzaXplOwotICAgICAgfSBlbHNlIGlmIChmcmFtZV9y
ZWFkZXIpIHsKKyAgICAgIH0gZWxzZSB7CiAgICAgICAgIC8qIFN3aXRjaCBiYWNrIHRvIHRoZSBn
bG9iYWwgcGFsZXR0ZSAqLwotICAgICAgICBmcmFtZV9yZWFkZXItPmlzX2xvY2FsX2NvbG9ybWFw
X2RlZmluZWQgPSBmYWxzZTsKKyAgICAgICAgY3VycmVudF9mcmFtZS0+aXNfbG9jYWxfY29sb3Jt
YXBfZGVmaW5lZCA9IGZhbHNlOwogICAgICAgfQogICAgICAgR0VUTigxLCBnaWZfbHp3X3N0YXJ0
KTsKICAgICB9CkBAIC04NzgsMTIgKzg0NiwxMyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpyZWFk
KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLAogCiAgICAgY2FzZSBnaWZf
c3ViX2Jsb2NrOgogICAgIHsKLSAgICAgIGlmICgoY291bnQgPSAqcSkgIT0gMCkKKyAgICAgIHVu
c2lnbmVkIGNvdW50ID0gKnE7CisgICAgICBpZiAoY291bnQpCiAgICAgICAvKiBTdGlsbCB3b3Jr
aW5nIG9uIHRoZSBzYW1lIGltYWdlOiBQcm9jZXNzIG5leHQgTFpXIGRhdGEgYmxvY2sgKi8KICAg
ICAgIHsKICAgICAgICAgLyogTWFrZSBzdXJlIHRoZXJlIGFyZSBzdGlsbCByb3dzIGxlZnQuIElm
IHRoZSBHSUYgZGF0YSAqLwogICAgICAgICAvKiBpcyBjb3JydXB0LCB3ZSBtYXkgbm90IGdldCBh
biBleHBsaWNpdCB0ZXJtaW5hdG9yLiAgICovCi0gICAgICAgIGlmIChmcmFtZV9yZWFkZXIgJiYg
ZnJhbWVfcmVhZGVyLT5yb3dzX3JlbWFpbmluZyA9PSAwKSB7CisgICAgICAgIGlmIChjdXJyZW50
X2ZyYW1lLT5yb3dzX3JlbWFpbmluZyA9PSAwKSB7CiAgICAgICAgICAgLyogVGhpcyBpcyBhbiBp
bGxlZ2FsIEdJRiwgYnV0IHdlIHJlbWFpbiB0b2xlcmFudC4gKi8KICAgICAgICAgICBHRVROKDEs
IGdpZl9zdWJfYmxvY2spOwogICAgICAgICB9CkBAIC04OTIsMTcgKzg2MSwyNCBAQCBib29sIEdJ
RkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVu
LAogICAgICAgZWxzZQogICAgICAgLyogU2VlIGlmIHRoZXJlIGFyZSBhbnkgbW9yZSBpbWFnZXMg
aW4gdGhpcyBzZXF1ZW5jZS4gKi8KICAgICAgIHsKLSAgICAgICAgaW1hZ2VzX2RlY29kZWQrKzsK
LQotICAgICAgICAvLyBDQUxMQkFDSzogVGhlIGZyYW1lIGlzIG5vdyBjb21wbGV0ZS4KLSAgICAg
ICAgaWYgKGNsaWVudHB0ciAmJiBmcmFtZV9yZWFkZXIgJiYgIWNsaWVudHB0ci0+ZnJhbWVDb21w
bGV0ZShpbWFnZXNfZGVjb2RlZCAtIDEsIGZyYW1lX3JlYWRlci0+ZGVsYXlfdGltZSwgZnJhbWVf
cmVhZGVyLT5kaXNwb3NhbF9tZXRob2QpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gZnJh
bWVDb21wbGV0ZSgpIGhhcyBhbHJlYWR5IGNhbGxlZAotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gY2xpZW50cHRyLT5zZXRGYWlsZWQoKS4KKyAgICAgICAgaW1hZ2VzX2RhdGFfY29tcGxldGUr
KzsKKyAgICAgICAgY2xpZW50cHRyLT5mcmFtZURhdGFDb21wbGV0ZShjdXJyZW50X2ZyYW1lLT5m
cmFtZV9pbmRleCwgY3VycmVudF9mcmFtZS0+ZGVsYXlfdGltZSk7CisKKyAgICAgICAgaWYgKHF1
ZXJ5ID09IEdJRkltYWdlRGVjb2Rlcjo6R0lGRnVsbFF1ZXJ5KSB7CisgICAgICAgICAgLy8gQ0FM
TEJBQ0s6IFRoZSBmcmFtZSBpcyBub3cgY29tcGxldGUuCisgICAgICAgICAgaWYgKGNsaWVudHB0
ciAmJiAhY2xpZW50cHRyLT5mcmFtZUNvbXBsZXRlKGN1cnJlbnRfZnJhbWUuZ2V0KCksIGN1cnJl
bnRfZnJhbWUtPmZyYW1lX2luZGV4LCBjdXJyZW50X2ZyYW1lLT5kZWxheV90aW1lLCBjdXJyZW50
X2ZyYW1lLT5kaXNwb3NhbF9tZXRob2QpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBm
cmFtZUNvbXBsZXRlKCkgaGFzIGFscmVhZHkgY2FsbGVkCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGNsaWVudHB0ci0+c2V0RmFpbGVkKCkuCisKKyAgICAgICAgICAvKiBDbGVhciBzdGF0
ZSBmcm9tIHRoaXMgaW1hZ2UgKi8KKyAgICAgICAgICBjdXJyZW50X2ZyYW1lLT5pc19sb2NhbF9j
b2xvcm1hcF9kZWZpbmVkID0gZmFsc2U7CisgICAgICAgICAgY3VycmVudF9mcmFtZS0+aXNfdHJh
bnNwYXJlbnQgPSBmYWxzZTsKKyAgICAgICAgICBjdXJyZW50X2ZyYW1lLT5pc19kZWNvZGVfc3Rh
cnRlZCA9IGZhbHNlOworICAgICAgICAgIGN1cnJlbnRfZnJhbWUtPmZyYW1lX2luZGV4ID0gaW1h
Z2VzX2RhdGFfY29tcGxldGU7CisgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgLyogQ2xlYXIg
c3RhdGUgZnJvbSB0aGlzIGltYWdlICovCi0gICAgICAgIGlmIChmcmFtZV9yZWFkZXIpIHsKLSAg
ICAgICAgICAgIGZyYW1lX3JlYWRlci0+aXNfbG9jYWxfY29sb3JtYXBfZGVmaW5lZCA9IGZhbHNl
OwotICAgICAgICAgICAgZnJhbWVfcmVhZGVyLT5pc190cmFuc3BhcmVudCA9IGZhbHNlOworICAg
ICAgICAgIC8vIFRoZSBsYXN0IExaVyBibG9jayBvZiB0aGlzIGZyYW1lIGhhcyBiZWVuIHBhcnNl
ZCBzbyBzYXZlIGl0IGFzIGEgZnVsbHkgcGFyc2VkIGZyYW1lLgorICAgICAgICAgIHByZXZpb3Vz
X2ZyYW1lcy5hcHBlbmQoY3VycmVudF9mcmFtZS5yZWxlYXNlKCkpOwogICAgICAgICB9CiAKICAg
ICAgICAgR0VUTigxLCBnaWZfaW1hZ2Vfc3RhcnQpOwpAQCAtOTExLDkgKzg4NywxMyBAQCBib29s
IEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQg
bGVuLAogICAgIGJyZWFrOwogCiAgICAgY2FzZSBnaWZfZG9uZToKLSAgICAgIC8vIFdoZW4gdGhl
IEdJRiBpcyBkb25lLCB3ZSBjYW4gc3RvcC4KLSAgICAgIGlmIChjbGllbnRwdHIpCi0gICAgICAg
IGNsaWVudHB0ci0+Z2lmQ29tcGxldGUoKTsKKyAgICAgIGltYWdlX2NvbXBsZXRlID0gdHJ1ZTsK
KworICAgICAgY2xpZW50cHRyLT5naWZQYXJzZUNvbXBsZXRlKCk7CisgICAgICBpZiAocXVlcnkg
PT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZGdWxsUXVlcnkpCisgICAgICAgIGNsaWVudHB0ci0+Z2lm
RGVjb2RlQ29tcGxldGUoKTsgLy8gV2hlbiB0aGUgR0lGIGlzIGRvbmUsIHdlIGNhbiBzdG9wLgor
CisgICAgICAvLyBUaGUgYWJvdmUgY2FsbCBjYW4gY2F1c2UgdGhpcyBvYmplY3QgYmUgZGVsZXRl
ZCwgcmV0dXJuIGltbWVkaWF0ZWx5LgogICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBXZSBz
aG91bGRuJ3QgZXZlciBnZXQgaGVyZS4KQEAgLTkyMiwyMyArOTAyLDk1IEBAIGJvb2wgR0lGSW1h
Z2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sCiAg
ICAgfQogICB9CiAKLSAgLy8gQ29weSB0aGUgbGVmdG92ZXIgaW50byBncy0+aG9sZAotICBieXRl
c19pbl9ob2xkID0gbGVuOwotICBpZiAobGVuKSB7Ci0gICAgLy8gQWRkIHdoYXQgd2UgaGF2ZSBz
b2ZhciB0byB0aGUgYmxvY2sKLSAgICB1bnNpZ25lZCBjaGFyKiBwOwotICAgIGlmIChzdGF0ZSA9
PSBnaWZfZ2xvYmFsX2NvbG9ybWFwKQotICAgICAgcCA9IGdsb2JhbF9jb2xvcm1hcDsKLSAgICBl
bHNlIGlmIChzdGF0ZSA9PSBnaWZfaW1hZ2VfY29sb3JtYXApCi0gICAgICBwID0gZnJhbWVfcmVh
ZGVyID8gZnJhbWVfcmVhZGVyLT5sb2NhbF9jb2xvcm1hcCA6IDA7Ci0gICAgZWxzZQotICAgICAg
cCA9IGhvbGQ7Ci0gICAgaWYgKHApCi0gICAgICBtZW1jcHkocCwgYnVmLCBsZW4pOwotICAgIGJ5
dGVzX3RvX2NvbnN1bWUgLT0gbGVuOwotICB9Ci0KLSAgaWYgKGNsaWVudHB0cikKLSAgICBjbGll
bnRwdHItPmRlY29kaW5nSGFsdGVkKDApOworICBzZXRSZW1haW5pbmdCeXRlcyhsZW4pOwogICBy
ZXR1cm4gZmFsc2U7CiB9CisKK2Jvb2wgR0lGSW1hZ2VSZWFkZXI6OnByZXBhcmVMWldDb250ZXh0
KGludCBkYXRhc2l6ZSkKK3sKKyAgICAvLyBJbml0aWFsaXplIExaVyBwYXJzZXIvZGVjb2Rlci4K
KworICAgIC8vIFNpbmNlIHdlIHVzZSBhIGNvZGVzaXplIG9mIDEgbW9yZSB0aGFuIHRoZSBkYXRh
c2l6ZSwgd2UgbmVlZCB0byBlbnN1cmUKKyAgICAvLyB0aGF0IG91ciBkYXRhc2l6ZSBpcyBzdHJp
Y3RseSBsZXNzIHRoYW4gdGhlIE1BWF9MWldfQklUUyB2YWx1ZSAoMTIpLgorICAgIC8vIFRoaXMg
c2V0cyB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBjb2RlbWFzayBjb3JyZWN0bHkgYXQgNDA5NS4KKyAg
ICBpZiAoZGF0YXNpemUgPj0gTUFYX0xaV19CSVRTKQorICAgICAgICByZXR1cm4gY2xpZW50cHRy
LT5zZXRGYWlsZWQoKTsKKyAgICBpbnQgY2xlYXJfY29kZSA9IDEgPDwgZGF0YXNpemU7CisgICAg
aWYgKGNsZWFyX2NvZGUgPj0gTUFYX0JJVFMpCisgICAgICAgIHJldHVybiBjbGllbnRwdHItPnNl
dEZhaWxlZCgpOworCisgICAgbHp3X2NvbnRleHQuY2xlYXJfY29kZSA9IGNsZWFyX2NvZGU7Cisg
ICAgbHp3X2NvbnRleHQuYXZhaWwgPSBjbGVhcl9jb2RlICsgMjsKKyAgICBsendfY29udGV4dC5v
bGRjb2RlID0gLTE7CisgICAgbHp3X2NvbnRleHQuY29kZXNpemUgPSBkYXRhc2l6ZSArIDE7Cisg
ICAgbHp3X2NvbnRleHQuY29kZW1hc2sgPSAoMSA8PCBsendfY29udGV4dC5jb2Rlc2l6ZSkgLSAx
OworICAgIGx6d19jb250ZXh0LmRhdHVtID0gbHp3X2NvbnRleHQuYml0cyA9IDA7CisKKyAgICAv
LyBJbml0aWFsaXplIHRoZSB0YWJsZXMuCisgICAgaWYgKGx6d19jb250ZXh0LnN1ZmZpeC5pc0Vt
cHR5KCkpCisgICAgICAgIGx6d19jb250ZXh0LnN1ZmZpeC5yZXNpemUoTUFYX0JJVFMpOworICAg
IGlmIChsendfY29udGV4dC5zdGFjay5pc0VtcHR5KCkpCisgICAgICAgIGx6d19jb250ZXh0LnN0
YWNrLnJlc2l6ZShNQVhfQklUUyk7CisgICAgaWYgKGx6d19jb250ZXh0LnByZWZpeC5pc0VtcHR5
KCkpCisgICAgICAgIGx6d19jb250ZXh0LnByZWZpeC5yZXNpemUoTUFYX0JJVFMpOworCisgICAg
Ly8gQ2xlYXJpbmcgdGhlIHdob2xlIHN1ZmZpeCB0YWJsZSBsZXRzIHVzIGJlIG1vcmUgdG9sZXJh
bnQgb2YgYmFkIGRhdGEuCisgICAgbHp3X2NvbnRleHQuc3VmZml4LmZpbGwoMCk7CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBsendfY29udGV4dC5jbGVhcl9jb2RlOyBpKyspCisgICAgICAgIGx6
d19jb250ZXh0LnN1ZmZpeFtpXSA9IGk7CisgICAgbHp3X2NvbnRleHQuc3RhY2twID0gMDsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlTFpXQmxvY2so
dW5zaWduZWQgYmxvY2tfcG9zaXRpb24sIHVuc2lnbmVkIGJ5dGVzX3RvX2RlY29kZSwgR0lGRnJh
bWVDb250ZXh0KiBmcmFtZSkKK3sKKyAgICBpZiAoYmxvY2tfcG9zaXRpb24gKyBieXRlc190b19k
ZWNvZGUgPiByYXdfZGF0YS0+c2l6ZSgpKQorICAgICAgICByZXR1cm4gY2xpZW50cHRyLT5zZXRG
YWlsZWQoKTsKKworICAgIC8vIFByZXBhcmUgTFpXIGRlY29kaW5nIGNvbnRleHQgaWYgbm90IGRv
bmUuCisgICAgaWYgKCFmcmFtZS0+aXNfZGVjb2RlX3N0YXJ0ZWQpIHsKKyAgICAgIC8vIFRoaXMg
Y2FsbCBhbHJlYWR5IGRvZXMgY2xpZW50cHRyLT5zZXRGYWlsZWQoKSBpZiBmYWlscy4KKyAgICAg
IGlmICghcHJlcGFyZUxaV0NvbnRleHQoZnJhbWUtPmRhdGFzaXplKSkKKyAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICBmcmFtZS0+aXNfZGVjb2RlX3N0YXJ0ZWQgPSB0cnVlOworICAgIH0K
KworICAgIGlmICghZG9fbHp3KGRhdGEoKSArIGJsb2NrX3Bvc2l0aW9uLCBieXRlc190b19kZWNv
ZGUsICZsendfY29udGV4dCwgZnJhbWUsIHJvd2J1ZiwgY2xpZW50cHRyKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBJZiBkb19sencoKSBlbmNvdW50ZXJlZCBhbiBlcnJvciwgaXQgaGFzIGFs
cmVhZHkgY2FsbGVkIGNsaWVudHB0ci0+c2V0RmFpbGVkKCkuCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgR0lGSW1hZ2VSZWFkZXI6OmRlY29kZVByZXZpb3VzTFpXQmxvY2tzKEdJRkZyYW1l
Q29udGV4dCogZnJhbWUpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmcmFtZS0+cHJl
dmlvdXNfYmxvY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGJsb2Nr
X3Bvc2l0aW9uID0gZnJhbWUtPnByZXZpb3VzX2Jsb2Nrc1tpXS5ibG9ja19wb3NpdGlvbjsKKyAg
ICAgICAgY29uc3QgdW5zaWduZWQgYmxvY2tfc2l6ZSA9IGZyYW1lLT5wcmV2aW91c19ibG9ja3Nb
aV0uYmxvY2tfc2l6ZTsKKworICAgICAgICAvLyBUaGlzIGNhbGwgYWxyZWFkeSBkb2VzIGNsaWVu
dHB0ci0+c2V0RmFpbGVkKCkgaWYgZmFpbHMuCisgICAgICAgIGlmICghZGVjb2RlTFpXQmxvY2so
YmxvY2tfcG9zaXRpb24sIGJsb2NrX3NpemUsIGZyYW1lKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgZnJhbWUtPnByZXZpb3VzX2Jsb2Nrcy5jbGVhcigpOworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIEdJRkltYWdlUmVhZGVyOjpkZWZlckxaV0Jsb2NrKHVuc2ln
bmVkIGJsb2NrX3Bvc2l0aW9uLCB1bnNpZ25lZCBieXRlc190b19kZWNvZGUsIEdJRkZyYW1lQ29u
dGV4dCogZnJhbWUpCit7CisgICAgZnJhbWUtPnByZXZpb3VzX2Jsb2Nrcy5hcHBlbmQoR0lGTFpX
QmxvY2soYmxvY2tfcG9zaXRpb24sIGJ5dGVzX3RvX2RlY29kZSkpOworfQorCit2b2lkIEdJRklt
YWdlUmVhZGVyOjpzZXRSZW1haW5pbmdCeXRlcyh1bnNpZ25lZCBieXRlc19sZWZ0KQoreworICAg
IEFTU0VSVChieXRlc19sZWZ0IDw9IHJhd19kYXRhLT5zaXplKCkpOworICAgIGJ5dGVzX3JlYWQg
PSByYXdfZGF0YS0+c2l6ZSgpIC0gYnl0ZXNfbGVmdDsKK30KKworYm9vbCBHSUZJbWFnZVJlYWRl
cjo6cmVwb3J0UGFyc2VFcnJvcihHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5IHF1ZXJ5KQorewor
ICAgIC8vIElmIHRoaXMgaXMgYW4gZXJyb3IgZHVyaW5nIHBhcnNpbmcgYW5kIHdlJ3JlIGp1c3Qg
Y291bnRpbmcgZnJhbWVzLCB0aGVuIGJlIHRvbGVyYW50IGFuZCBkb24ndCByZXBvcnQgdGhlIGVy
cm9yLgorICAgIGlmIChxdWVyeSA9PSBHSUZJbWFnZURlY29kZXI6OkdJRkZyYW1lQ291bnRRdWVy
eSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBjbGllbnRwdHItPnNldEZhaWxl
ZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCmlu
ZGV4IDA1MjUzMmM2NDUzNjMxNDc3NDhmOWJhNjRlYTc4YTE1MWZlZTNhZGUuLjc2MDM4ZmU2N2Zj
ZDNiYTU3MTE1MWFmYTUzYmVkMjYxZThmODQyMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCkBA
IC0zOCwxNCArMzgsMTcgQEAKICNpZm5kZWYgR0lGSW1hZ2VSZWFkZXJfaAogI2RlZmluZSBHSUZJ
bWFnZVJlYWRlcl9oCiAKLS8vIERlZmluZSBvdXJzZWx2ZXMgYXMgdGhlIGNsaWVudFB0ci4gIE1v
emlsbGEganVzdCBoYWNrZWQgdGhlaXIgQysrIGNhbGxiYWNrIGNsYXNzIGludG8gdGhpcyBvbGQg
QyBkZWNvZGVyLAotLy8gc28gd2Ugd2lsbCB0b28uCiAjaW5jbHVkZSAiR0lGSW1hZ2VEZWNvZGVy
LmgiCiAKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCiAjZGVmaW5lIE1BWF9MWldfQklUUyAgICAgICAgICAx
MgogI2RlZmluZSBNQVhfQklUUyAgICAgICAgICAgIDQwOTcgLyogMl5NQVhfTFpXX0JJVFMrMSAq
LwogI2RlZmluZSBNQVhfQ09MT1JTICAgICAgICAgICAyNTYKLSNkZWZpbmUgTUFYX0hPTERfU0la
RSAgICAgICAgMjU2CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAogY29uc3QgaW50IGNMb29wQ291
bnROb3RTZWVuID0gLTI7CiAKQEAgLTc2LDEyICs3OSw3NyBAQCB0eXBlZGVmIGVudW0gewogICAg
IGdpZl9jb25zdW1lX2NvbW1lbnQKIH0gZ3N0YXRlOwogCi1zdHJ1Y3QgR0lGRnJhbWVSZWFkZXIg
eworc3RydWN0IEdJRkxaV0Jsb2NrIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBHSUZMWldCbG9jayh1bnNpZ25lZCBwb3NpdGlvbiwgdW5zaWduZWQgc2l6ZSkK
KyAgICAgICAgOiBibG9ja19wb3NpdGlvbihwb3NpdGlvbikKKyAgICAgICAgLCBibG9ja19zaXpl
KHNpemUpCisgICAgeyB9CisKKyAgICB1bnNpZ25lZCBibG9ja19wb3NpdGlvbjsKKyAgICB1bnNp
Z25lZCBibG9ja19zaXplOworfTsKKworc3RydWN0IEdJRkZyYW1lQ29udGV4dCB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgaW50IGRhdGFzaXplOyAgLy8gVmFs
dWUgdG8gaW5pdGlhbGl6ZSBMWlcgZGVjb2RpbmcuIFRoZXJlIGFyZSAyXihkYXRhc2l6ZSArIDEp
IHN5bWJvbHMuCisKKyAgICAvLyBPdXRwdXQgc3RhdGUgbWFjaGluZS4KKyAgICBpbnQgaXBhc3M7
ICAgICAgICAgICAgICAgICAgLy8gSW50ZXJsYWNlIHBhc3M7IFJhbmdlcyAxLTQgaWYgaW50ZXJs
YWNlZC4KKyAgICB1bnNpZ25lZCByb3dzX3JlbWFpbmluZzsgICAgLy8gUm93cyByZW1haW5pbmcg
dG8gYmUgb3V0cHV0LgorICAgIHVuc2lnbmVkIGlyb3c7ICAgICAgICAgICAgICAvLyBDdXJyZW50
IG91dHB1dCByb3csIHN0YXJ0aW5nIGF0IHplcm8uCisgICAgdW5zaWduZWQgcm93cDsgICAgICAg
ICAgICAgIC8vIEN1cnJlbnQgb3V0cHV0IHBvc2l0aW9uLgorCisgICAgLy8gUGFyYW1ldGVycyBm
b3IgaW1hZ2UgZnJhbWUgY3VycmVudGx5IGJlaW5nIGRlY29kZWQuCisgICAgdW5zaWduZWQgeF9v
ZmZzZXQsIHlfb2Zmc2V0OyAgLy8gV2l0aCByZXNwZWN0IHRvICJzY3JlZW4iIG9yaWdpbi4KKyAg
ICB1bnNpZ25lZCBoZWlnaHQsIHdpZHRoOworICAgIGludCB0cGl4ZWw7ICAgICAgICAgICAgICAg
ICAgIC8vIEluZGV4IG9mIHRyYW5zcGFyZW50IHBpeGVsLgorICAgIEltYWdlRnJhbWU6OkZyYW1l
RGlzcG9zYWxNZXRob2QgZGlzcG9zYWxfbWV0aG9kOyAgIC8vIFJlc3RvcmUgdG8gYmFja2dyb3Vu
ZCwgbGVhdmUgaW4gcGxhY2UsIGV0Yy4KKyAgICB1bnNpZ25lZCBsb2NhbF9jb2xvcm1hcF9wb3Np
dGlvbjsgICAgLy8gUG9zaXRpb24gb2YgdGhlIGZpcnN0IGJ5dGUgb2YgbG9jYWwgY29sb3JtYXAg
aW4gdGhlIHN0cmVhbS4KKyAgICB1bnNpZ25lZCBsb2NhbF9jb2xvcm1hcF9zaXplOyAgICAgICAg
Ly8gU2l6ZSBvZiBsb2NhbCBjb2xvcm1hcCBhcnJheS4KKyAgICBpbnQgZnJhbWVfaW5kZXg7ICAg
ICAgICAgICAgICAgICAgICAgLy8gQ3VycmVudCBmcmFtZSBpbmRleC4KKworICAgIGJvb2wgaXNf
bG9jYWxfY29sb3JtYXBfZGVmaW5lZCA6IDE7CisgICAgYm9vbCBwcm9ncmVzc2l2ZV9kaXNwbGF5
IDogMTsgICAgICAgLy8gSWYgVFJVRSwgZG8gSGFlYmVybGkgaW50ZXJsYWNlIGhhY2suCisgICAg
Ym9vbCBpbnRlcmxhY2VkIDogMTsgICAgICAgICAgICAgICAgLy8gVFJVRSwgaWYgc2NhbmxpbmVz
IGFycml2ZSBpbnRlcmxhY2VkIG9yZGVyLgorICAgIGJvb2wgaXNfdHJhbnNwYXJlbnQgOiAxOyAg
ICAgICAgICAgIC8vIFRSVUUsIGlmIHRwaXhlbCBpcyB2YWxpZC4KKyAgICBib29sIGlzX2RlY29k
ZV9zdGFydGVkIDogMTsKKworICAgIHVuc2lnbmVkIGRlbGF5X3RpbWU7ICAgICAgICAgLy9EaXNw
bGF5IHRpbWUsIGluIG1pbGxpc2Vjb25kcywgZm9yIHRoaXMgaW1hZ2UgaW4gYSBtdWx0aS1pbWFn
ZSBHSUYuCisKKyAgICBWZWN0b3I8R0lGTFpXQmxvY2s+IHByZXZpb3VzX2Jsb2NrczsKKworICAg
IEdJRkZyYW1lQ29udGV4dChpbnQgaW5kZXgpCisgICAgICAgIDogZGF0YXNpemUoMCkKKyAgICAg
ICAgLCBpcGFzcygwKQorICAgICAgICAsIHJvd3NfcmVtYWluaW5nKDApCisgICAgICAgICwgaXJv
dygwKQorICAgICAgICAsIHJvd3AoMCkKKyAgICAgICAgLCB4X29mZnNldCgwKQorICAgICAgICAs
IHlfb2Zmc2V0KDApCisgICAgICAgICwgaGVpZ2h0KDApCisgICAgICAgICwgd2lkdGgoMCkKKyAg
ICAgICAgLCB0cGl4ZWwoMCkKKyAgICAgICAgLCBkaXNwb3NhbF9tZXRob2QoSW1hZ2VGcmFtZTo6
RGlzcG9zZU5vdFNwZWNpZmllZCkKKyAgICAgICAgLCBsb2NhbF9jb2xvcm1hcF9wb3NpdGlvbigw
KQorICAgICAgICAsIGxvY2FsX2NvbG9ybWFwX3NpemUoMCkKKyAgICAgICAgLCBmcmFtZV9pbmRl
eChpbmRleCkKKyAgICAgICAgLCBpc19sb2NhbF9jb2xvcm1hcF9kZWZpbmVkKGZhbHNlKQorICAg
ICAgICAsIHByb2dyZXNzaXZlX2Rpc3BsYXkoZmFsc2UpCisgICAgICAgICwgaW50ZXJsYWNlZChm
YWxzZSkKKyAgICAgICAgLCBpc190cmFuc3BhcmVudChmYWxzZSkKKyAgICAgICAgLCBpc19kZWNv
ZGVfc3RhcnRlZChmYWxzZSkKKyAgICAgICAgLCBkZWxheV90aW1lKDApCisgICAgeyB9Cit9Owor
CitzdHJ1Y3QgR0lGTFpXQ29udGV4dCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CiAgICAgLyogTFpXIGRlY29kZXIgc3RhdGUgbWFjaGluZSAqLwotICAgIHVuc2lnbmVk
IGNoYXIgKnN0YWNrcDsgICAgICAgICAgICAgIC8qIEN1cnJlbnQgc3RhY2sgcG9pbnRlciAqLwot
ICAgIGludCBkYXRhc2l6ZTsKKyAgICB1bnNpZ25lZCBzdGFja3A7ICAgICAgICAgICAgICAgICAg
ICAvKiBDdXJyZW50IHN0YWNrIHBvc2l0aW9uICovCiAgICAgaW50IGNvZGVzaXplOwogICAgIGlu
dCBjb2RlbWFzazsKICAgICBpbnQgY2xlYXJfY29kZTsgICAgICAgICAgICAgLyogQ29kZXdvcmQg
dXNlZCB0byB0cmlnZ2VyIGRpY3Rpb25hcnkgcmVzZXQgKi8KQEAgLTkxLDEyMyArMTU5LDk2IEBA
IHB1YmxpYzoKICAgICBpbnQgYml0czsgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIHVu
cmVhZCBiaXRzIGluICJkYXR1bSIgKi8KICAgICBpbnQgZGF0dW07ICAgICAgICAgICAgICAgIC8q
IDMyLWJpdCBpbnB1dCBidWZmZXIgKi8KIAotICAgIC8qIE91dHB1dCBzdGF0ZSBtYWNoaW5lICov
Ci0gICAgaW50IGlwYXNzOyAgICAgICAgICAgICAgICAgIC8qIEludGVybGFjZSBwYXNzOyBSYW5n
ZXMgMS00IGlmIGludGVybGFjZWQuICovCi0gICAgdW5zaWduZWQgaW50IHJvd3NfcmVtYWluaW5n
OyAgICAgICAgLyogUm93cyByZW1haW5pbmcgdG8gYmUgb3V0cHV0ICovCi0gICAgdW5zaWduZWQg
aW50IGlyb3c7ICAgICAgICAgICAgICAgICAgLyogQ3VycmVudCBvdXRwdXQgcm93LCBzdGFydGlu
ZyBhdCB6ZXJvICovCi0gICAgdW5zaWduZWQgY2hhciAqcm93YnVmOyAgICAgICAgICAgICAgLyog
U2luZ2xlIHNjYW5saW5lIHRlbXBvcmFyeSBidWZmZXIgKi8KLSAgICB1bnNpZ25lZCBjaGFyICpy
b3dlbmQ7ICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIGVuZCBvZiByb3didWYgKi8KLSAgICB1
bnNpZ25lZCBjaGFyICpyb3dwOyAgICAgICAgICAgICAgICAvKiBDdXJyZW50IG91dHB1dCBwb2lu
dGVyICovCi0KLSAgICAvKiBQYXJhbWV0ZXJzIGZvciBpbWFnZSBmcmFtZSBjdXJyZW50bHkgYmVp
bmcgZGVjb2RlZCAqLwotICAgIHVuc2lnbmVkIGludCB4X29mZnNldCwgeV9vZmZzZXQ7ICAgIC8q
IFdpdGggcmVzcGVjdCB0byAic2NyZWVuIiBvcmlnaW4gKi8KLSAgICB1bnNpZ25lZCBpbnQgaGVp
Z2h0LCB3aWR0aDsKLSAgICBpbnQgdHBpeGVsOyAgICAgICAgICAgICAgICAgLyogSW5kZXggb2Yg
dHJhbnNwYXJlbnQgcGl4ZWwgKi8KLSAgICBXZWJDb3JlOjpJbWFnZUZyYW1lOjpGcmFtZURpc3Bv
c2FsTWV0aG9kIGRpc3Bvc2FsX21ldGhvZDsgICAvKiBSZXN0b3JlIHRvIGJhY2tncm91bmQsIGxl
YXZlIGluIHBsYWNlLCBldGMuKi8KLSAgICB1bnNpZ25lZCBjaGFyICpsb2NhbF9jb2xvcm1hcDsg
ICAgLyogUGVyLWltYWdlIGNvbG9ybWFwICovCi0gICAgaW50IGxvY2FsX2NvbG9ybWFwX3NpemU7
ICAgIC8qIFNpemUgb2YgbG9jYWwgY29sb3JtYXAgYXJyYXkuICovCi0gICAgCi0gICAgYm9vbCBp
c19sb2NhbF9jb2xvcm1hcF9kZWZpbmVkIDogMTsKLSAgICBib29sIHByb2dyZXNzaXZlX2Rpc3Bs
YXkgOiAxOyAgICAvKiBJZiBUUlVFLCBkbyBIYWViZXJsaSBpbnRlcmxhY2UgaGFjayAqLwotICAg
IGJvb2wgaW50ZXJsYWNlZCA6IDE7ICAgICAgICAgICAgIC8qIFRSVUUsIGlmIHNjYW5saW5lcyBh
cnJpdmUgaW50ZXJsYWNlZCBvcmRlciAqLwotICAgIGJvb2wgaXNfdHJhbnNwYXJlbnQgOiAxOyAg
ICAgICAgIC8qIFRSVUUsIGlmIHRwaXhlbCBpcyB2YWxpZCAqLworICAgIFZlY3Rvcjx1bnNpZ25l
ZCBzaG9ydD4gcHJlZml4OyAgICAgLyogTFpXIGRlY29kaW5nIHRhYmxlcyAqLworICAgIFZlY3Rv
cjx1bnNpZ25lZCBjaGFyPiBzdWZmaXg7ICAgICAgLyogTFpXIGRlY29kaW5nIHRhYmxlcyAqLwor
ICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBzdGFjazsgICAgICAgLyogQmFzZSBvZiBMWlcgZGVj
b2RlciBzdGFjayAqLworCisgICAgR0lGTFpXQ29udGV4dCgpCisgICAgICAgIDogc3RhY2twKDAp
CisgICAgICAgICwgY29kZXNpemUoMCkKKyAgICAgICAgLCBjb2RlbWFzaygwKQorICAgICAgICAs
IGNsZWFyX2NvZGUoMCkKKyAgICAgICAgLCBhdmFpbCgwKQorICAgICAgICAsIG9sZGNvZGUoMCkK
KyAgICAgICAgLCBmaXJzdGNoYXIoMCkKKyAgICAgICAgLCBiaXRzKDApCisgICAgICAgICwgZGF0
dW0oMCkKKyAgICB7IH0KK307CisKK2NsYXNzIEdJRkltYWdlUmVhZGVyIHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBHSUZJbWFnZVJlYWRlcihHSUZJbWFnZURl
Y29kZXIqIGNsaWVudCk7CiAKLSAgICB1bnNpZ25lZCBkZWxheV90aW1lOyAgICAgICAgLyogRGlz
cGxheSB0aW1lLCBpbiBtaWxsaXNlY29uZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciB0aGlzIGltYWdlIGluIGEgbXVsdGktaW1hZ2UgR0lGICovCisgICAgdm9pZCBz
ZXREYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhKSB7IHJhd19kYXRhID0gZGF0YTsg
fQorICAgIGJvb2wgZGVjb2RlKEdJRkltYWdlRGVjb2Rlcjo6R0lGUXVlcnkgcXVlcnksIGludCBo
YWx0QXRGcmFtZSk7CiAKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBnbG9iYWxDb2xvck1hcCgp
IGNvbnN0OworICAgIHVuc2lnbmVkIGdsb2JhbENvbG9yTWFwU2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IGdsb2JhbF9jb2xvcm1hcF9zaXplOyB9CiAKLSAgICB1bnNpZ25lZCBzaG9ydCogIHByZWZpeDsg
ICAgICAgICAgLyogTFpXIGRlY29kaW5nIHRhYmxlcyAqLwotICAgIHVuc2lnbmVkIGNoYXIqICAg
c3VmZml4OyAgICAgICAgICAvKiBMWlcgZGVjb2RpbmcgdGFibGVzICovCi0gICAgdW5zaWduZWQg
Y2hhciogICBzdGFjazsgICAgICAgICAgIC8qIEJhc2Ugb2YgTFpXIGRlY29kZXIgc3RhY2sgKi8K
KyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBsb2NhbENvbG9yTWFwKGNvbnN0IEdJRkZyYW1lQ29u
dGV4dCopIGNvbnN0OworICAgIHVuc2lnbmVkIGxvY2FsQ29sb3JNYXBTaXplKGNvbnN0IEdJRkZy
YW1lQ29udGV4dCogZnJhbWUpIGNvbnN0IHsgcmV0dXJuIGZyYW1lLT5sb2NhbF9jb2xvcm1hcF9z
aXplOyB9CiAKKyAgICBpbnQgaW1hZ2VzQ291bnQoKSBjb25zdCB7IHJldHVybiBpbWFnZXNfY291
bnQ7IH0KKyAgICBpbnQgbG9vcENvdW50KCkgY29uc3QgeyByZXR1cm4gbG9vcF9jb3VudDsgfQog
Ci0gICAgR0lGRnJhbWVSZWFkZXIoKSB7Ci0gICAgICAgIHN0YWNrcCA9IDA7Ci0gICAgICAgIGRh
dGFzaXplID0gY29kZXNpemUgPSBjb2RlbWFzayA9IGNsZWFyX2NvZGUgPSBhdmFpbCA9IG9sZGNv
ZGUgPSAwOwotICAgICAgICBmaXJzdGNoYXIgPSAwOwotICAgICAgICBiaXRzID0gZGF0dW0gPSAw
OwotICAgICAgICBpcGFzcyA9IDA7Ci0gICAgICAgIHJvd3NfcmVtYWluaW5nID0gaXJvdyA9IDA7
Ci0gICAgICAgIHJvd2J1ZiA9IHJvd2VuZCA9IHJvd3AgPSAwOworcHJpdmF0ZToKKyAgICBib29s
IGRlY29kZSh1bnNpZ25lZCBkYXRhUG9zaXRpb24sIHVuc2lnbmVkIGJ5dGVzVG9EZWNvZGUsIEdJ
RkltYWdlRGVjb2Rlcjo6R0lGUXVlcnkgcXVlcnksIGludCBoYWx0QXRGcmFtZSk7CiAKLSAgICAg
ICAgeF9vZmZzZXQgPSB5X29mZnNldCA9IHdpZHRoID0gaGVpZ2h0ID0gMDsKLSAgICAgICAgdHBp
eGVsID0gMDsKLSAgICAgICAgZGlzcG9zYWxfbWV0aG9kID0gV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
RGlzcG9zZU5vdFNwZWNpZmllZDsKKyAgICAvLyBJbml0aWFsaXplIExaVyBkZWNvZGluZyBjb250
ZXh0LgorICAgIGJvb2wgcHJlcGFyZUxaV0NvbnRleHQoaW50IGRhdGFTaXplKTsKIAotICAgICAg
ICBsb2NhbF9jb2xvcm1hcCA9IDA7Ci0gICAgICAgIGxvY2FsX2NvbG9ybWFwX3NpemUgPSAwOwot
ICAgICAgICBpc19sb2NhbF9jb2xvcm1hcF9kZWZpbmVkID0gcHJvZ3Jlc3NpdmVfZGlzcGxheSA9
IGlzX3RyYW5zcGFyZW50ID0gaW50ZXJsYWNlZCA9IGZhbHNlOworICAgIC8vIERlY29kZSBvbmUg
TFpXIGJsb2NrIHdpdGggdGhlIGZyYW1lLgorICAgIGJvb2wgZGVjb2RlTFpXQmxvY2sodW5zaWdu
ZWQgYmxvY2tQb3NpdGlvbiwgdW5zaWduZWQgYnl0ZXNUb0RlY29kZSwgR0lGRnJhbWVDb250ZXh0
Kik7CiAKLSAgICAgICAgZGVsYXlfdGltZSA9IDA7CisgICAgLy8gRGVjb2RlIGRlZmVycmVkIExa
VyBibG9ja3MgaW4gdGhlIGZyYW1lLgorICAgIGJvb2wgZGVjb2RlUHJldmlvdXNMWldCbG9ja3Mo
R0lGRnJhbWVDb250ZXh0Kik7CiAKLSAgICAgICAgcHJlZml4ID0gMDsKLSAgICAgICAgc3VmZml4
ID0gc3RhY2sgPSAwOwotICAgIH0KLSAgICAKLSAgICB+R0lGRnJhbWVSZWFkZXIoKSB7Ci0gICAg
ICAgIGRlbGV0ZSBbXXJvd2J1ZjsKLSAgICAgICAgZGVsZXRlIFtdbG9jYWxfY29sb3JtYXA7Ci0g
ICAgICAgIGRlbGV0ZSBbXXByZWZpeDsKLSAgICAgICAgZGVsZXRlIFtdc3VmZml4OwotICAgICAg
ICBkZWxldGUgW11zdGFjazsKLSAgICB9Ci19OworICAgIC8vIFNhdmUgaW5mb3JtYXRpb24gZm9y
IGRlY29kaW5nIG9uZSBMWlcgYmxvY2sgaW50byB0aGUgZnJhbWUgY29udGV4dC4gVGhlIGJsb2Nr
IHdpbGwgYmUgZGVjb2RlZCBsYXRlci4KKyAgICB2b2lkIGRlZmVyTFpXQmxvY2sodW5zaWduZWQg
YmxvY2tQb3NpdGlvbiwgdW5zaWduZWQgYnl0ZXNUb0RlY29kZSwgR0lGRnJhbWVDb250ZXh0Kik7
CisKKyAgICB2b2lkIHNldFJlbWFpbmluZ0J5dGVzKHVuc2lnbmVkIGJ5dGVzTGVmdCk7CisKKyAg
ICBib29sIHJlcG9ydFBhcnNlRXJyb3IoR0lGSW1hZ2VEZWNvZGVyOjpHSUZRdWVyeSBxdWVyeSk7
CisKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4ocmF3X2RhdGEtPmRhdGEoKSk7IH0KKwor
ICAgIEdJRkltYWdlRGVjb2RlciogY2xpZW50cHRyOwogCi1zdHJ1Y3QgR0lGSW1hZ2VSZWFkZXIg
ewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFdlYkNvcmU6OkdJ
RkltYWdlRGVjb2RlciogY2xpZW50cHRyOwogICAgIC8qIFBhcnNpbmcgc3RhdGUgbWFjaGluZSAq
LwogICAgIGdzdGF0ZSBzdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgLyogQ3VycmVudCBkZWNv
ZGVyIG1hc3RlciBzdGF0ZSAqLwotICAgIHVuc2lnbmVkIGJ5dGVzX3RvX2NvbnN1bWU7ICAgICAg
ICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGFjY3VtdWxhdGUgKi8KLSAgICB1bnNpZ25lZCBieXRl
c19pbl9ob2xkOyAgICAgICAgICAgIC8qIGJ5dGVzIGFjY3VtdWxhdGVkIHNvIGZhciovCi0gICAg
dW5zaWduZWQgY2hhciBob2xkW01BWF9IT0xEX1NJWkVdOyAvKiBBY2N1bXVsYXRpb24gYnVmZmVy
ICovCi0gICAgdW5zaWduZWQgY2hhciogZ2xvYmFsX2NvbG9ybWFwOyAgICAvKiAoMyogTUFYX0NP
TE9SUyBpbiBzaXplKSBEZWZhdWx0IGNvbG9ybWFwIGlmIGxvY2FsIG5vdCBzdXBwbGllZCwgMyBi
eXRlcyBmb3IgZWFjaCBjb2xvciAgKi8KKyAgICB1bnNpZ25lZCBieXRlc190b19jb25zdW1lOyAg
ICAgICAgIC8qIE51bWJlciBvZiBieXRlcyB0byByZWFkIGZyb20gbmV4dCBibG9jayAqLworICAg
IHVuc2lnbmVkIGJ5dGVzX3JlYWQ7ICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIGJ5dGVzIHJl
YWQgZnJvbSB8ZGF0YXwgKi8KICAgICAKICAgICAgLyogR2xvYmFsIChtdWx0aS1pbWFnZSkgc3Rh
dGUgKi8KICAgICBpbnQgc2NyZWVuX2JnY29sb3I7ICAgICAgICAgLyogTG9naWNhbCBzY3JlZW4g
YmFja2dyb3VuZCBjb2xvciAqLwogICAgIGludCB2ZXJzaW9uOyAgICAgICAgICAgICAgICAvKiBF
aXRoZXIgODkgZm9yIEdJRjg5IG9yIDg3IGZvciBHSUY4NyAqLwogICAgIHVuc2lnbmVkIHNjcmVl
bl93aWR0aDsgICAgICAgLyogTG9naWNhbCBzY3JlZW4gd2lkdGggJiBoZWlnaHQgKi8KICAgICB1
bnNpZ25lZCBzY3JlZW5faGVpZ2h0OwotICAgIGludCBnbG9iYWxfY29sb3JtYXBfc2l6ZTsgICAv
KiBTaXplIG9mIGdsb2JhbCBjb2xvcm1hcCBhcnJheS4gKi8KLSAgICB1bnNpZ25lZCBpbWFnZXNf
ZGVjb2RlZDsgICAgLyogQ291bnRzIGNvbXBsZXRlZCBmcmFtZXMgZm9yIGFuaW1hdGVkIEdJRnMg
Ki8KKyAgICB1bnNpZ25lZCBnbG9iYWxfY29sb3JtYXBfc2l6ZTsgICAgICAgLyogU2l6ZSBvZiBn
bG9iYWwgY29sb3JtYXAgYXJyYXkgKi8KKyAgICB1bnNpZ25lZCBnbG9iYWxfY29sb3JtYXBfcG9z
aXRpb247ICAgLyogUG9zaXRpb24gb2YgdGhlIGZpcnN0IGJ5dGUgb2YgZ2xvYmFsIGNvbG9ybWFw
IGluIGRhdGEgc3RyZWFtICovCisgICAgaW50IGltYWdlc19kYXRhX2NvbXBsZXRlOyAgIC8qIENv
dW50cyBjb21wbGV0ZWQgZnJhbWVzIGZvciBhbmltYXRlZCBHSUZzICovCiAgICAgaW50IGltYWdl
c19jb3VudDsgICAgICAgICAgIC8qIENvdW50ZWQgYWxsIGZyYW1lcyBzZWVuIHNvIGZhciAoaW5j
bHVkaW5nIGluY29tcGxldGUgZnJhbWVzKSAqLwogICAgIGludCBsb29wX2NvdW50OyAgICAgICAg
ICAgICAvKiBOZXRzY2FwZSBzcGVjaWZpYyBleHRlbnNpb24gYmxvY2sgdG8gY29udHJvbAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGFuaW1hdGlvbiBs
b29wcyBhIEdJRiByZW5kZXJzLiAqLworICAgIGJvb2wgaW1hZ2VfY29tcGxldGU7ICAgICAgICAv
KiBUcnVlIGlmIGVudGlyZSBpbWFnZSBpcyBwYXJzZWQgYW5kIHRoZSBlbmQgaXMgcmVhY2hlZCAq
LwogICAgIAotICAgIC8vIE5vdCByZWFsbHkgZ2xvYmFsLCBidXQgY29udmVuaWVudCB0byBsb2Nh
dGUgaGVyZS4KLSAgICBpbnQgY291bnQ7ICAgICAgICAgICAgICAgICAgLyogUmVtYWluaW5nICMg
Ynl0ZXMgaW4gc3ViLWJsb2NrICovCi0gICAgCi0gICAgR0lGRnJhbWVSZWFkZXIqIGZyYW1lX3Jl
YWRlcjsKLQotICAgIEdJRkltYWdlUmVhZGVyKFdlYkNvcmU6OkdJRkltYWdlRGVjb2RlciogY2xp
ZW50ID0gMCkgewotICAgICAgICBjbGllbnRwdHIgPSBjbGllbnQ7Ci0gICAgICAgIHN0YXRlID0g
Z2lmX3R5cGU7Ci0gICAgICAgIGJ5dGVzX3RvX2NvbnN1bWUgPSA2OwotICAgICAgICBieXRlc19p
bl9ob2xkID0gMDsKLSAgICAgICAgZnJhbWVfcmVhZGVyID0gMDsKLSAgICAgICAgZ2xvYmFsX2Nv
bG9ybWFwID0gMDsKLQotICAgICAgICBzY3JlZW5fYmdjb2xvciA9IHZlcnNpb24gPSAwOwotICAg
ICAgICBzY3JlZW5fd2lkdGggPSBzY3JlZW5faGVpZ2h0ID0gMDsKLSAgICAgICAgZ2xvYmFsX2Nv
bG9ybWFwX3NpemUgPSBpbWFnZXNfZGVjb2RlZCA9IGltYWdlc19jb3VudCA9IDA7Ci0gICAgICAg
IGxvb3BfY291bnQgPSBjTG9vcENvdW50Tm90U2VlbjsKLSAgICAgICAgY291bnQgPSAwOwotICAg
IH0KLQotICAgIH5HSUZJbWFnZVJlYWRlcigpIHsKLSAgICAgICAgZGVsZXRlIFtdZ2xvYmFsX2Nv
bG9ybWFwOwotICAgICAgICBnbG9iYWxfY29sb3JtYXAgPSAwOwotICAgICAgICBkZWxldGUgZnJh
bWVfcmVhZGVyOwotICAgICAgICBmcmFtZV9yZWFkZXIgPSAwOwotICAgIH0KLQotICAgIGJvb2wg
cmVhZChjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmLCB1bnNpZ25lZCBpbnQgbnVtYnl0ZXMsIAot
ICAgICAgICAgICAgICBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5IHF1ZXJ5ID0g
V2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpHSUZGdWxsUXVlcnksIHVuc2lnbmVkIGhhbHRBdEZy
YW1lID0gLTEpOworICAgIC8vIEdJRiBpbWFnZSBjb250ZW50IHRvIGRlY29kZS4KKyAgICBSZWZQ
dHI8U2hhcmVkQnVmZmVyPiByYXdfZGF0YTsKIAotcHJpdmF0ZToKLSAgICBib29sIG91dHB1dF9y
b3coKTsKLSAgICBib29sIGRvX2x6dyhjb25zdCB1bnNpZ25lZCBjaGFyICpxKTsKKyAgICAvLyBU
aGUgZGVjb2RlIGNvbnRleHQgZm9yIHRoZSBjdXJyZW50IGZyYW1lIGJlaW5nIHBhcnNlZC4KKyAg
ICBPd25QdHI8R0lGRnJhbWVDb250ZXh0PiBjdXJyZW50X2ZyYW1lOworCisgICAgLy8gQ29udGFp
bnMgZGVjb2RlIGNvbnRleHQgZm9yIGZ1bGx5IHBhcnNlZCBmcmFtZXMuCisgICAgRGVxdWU8T3du
UHRyPEdJRkZyYW1lQ29udGV4dD4gPiBwcmV2aW91c19mcmFtZXM7CisKKyAgICBHSUZMWldDb250
ZXh0IGx6d19jb250ZXh0OworCisgICAgLy8gU2luZ2xlIHNjYW5saW5lIHRlbXBvcmFyeSBidWZm
ZXIuCisgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHJvd2J1ZjsKIH07CiAKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggNmI3
ZWNjOTZiMjVkYWY1NTdlOWViMTZmNjJlZGVjMTRkNjQ1Mjc2OS4uNzBkY2JmNWEzMmYzMTZlNDJi
OTZjYjg2ZDY0ZGQ2ZTc1MzE5NDc4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAt
NjYwLDYgKzY2MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9F
dmVudExpc3RlbmVyVGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
dGVzdHMvRmFrZVdlYlBsdWdpbi5jcHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAndGVzdHMvRnJhbWVUZXN0SGVscGVycy5jcHAnLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAndGVzdHMvR0lGSW1hZ2VEZWNvZGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAndGVzdHMvSURCQmluZGluZ1V0aWxpdGllc1Rlc3QuY3BwJywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL0lEQlJlcXVlc3RUZXN0LmNwcCcs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9MZXZlbERCVGVzdC5jcHAn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggZDU4MTEyODhjZmU0Y2YzMzdhZTQ3
NmEzZDU3Mjg3YTFhMTMzMWMyOS4uM2IwYTdhNTNlNTgyM2M3MWNiZTY4MmI1NzA3NGRmNTZmMTQx
MGMxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC03Miw2ICs3Miw3IEBACiAg
ICAgICAgICAgICAndGVzdHMvRnJhbWVMb2FkZXJDbGllbnRJbXBsVGVzdC5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0ZyYW1lVGVzdEhlbHBlcnMuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9G
cmFtZVRlc3RIZWxwZXJzLmgnLAorICAgICAgICAgICAgJ3Rlc3RzL0dJRkltYWdlRGVjb2RlclRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9HcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LmNw
cCcsCiAgICAgICAgICAgICAndGVzdHMvSURCQWJvcnRPbkNvcnJ1cHRUZXN0LmNwcCcsCiAgICAg
ICAgICAgICAndGVzdHMvSURCQmluZGluZ1V0aWxpdGllc1Rlc3QuY3BwJywKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvR0lGSW1hZ2VEZWNvZGVyVGVzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0dJRkltYWdlRGVjb2RlclRlc3QuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjcxZmViOTRmYTJmMmMwMWZlNTM5N2Q2MGNiOTBhMmRkNTYxNzM3YjQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0dJRkltYWdlRGVjb2RlclRl
c3QuY3BwCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAi
R0lGSW1hZ2VEZWNvZGVyLmgiCisKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAi
U2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDxwdWJs
aWMvV2ViRGF0YS5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJTaXplLmg+CisjaW5jbHVkZSA8d2Vi
a2l0L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1
c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1lc3BhY2UgeworCitzdGF0aWMgUGFzc1JlZlB0
cjxTaGFyZWRCdWZmZXI+IHJlYWRGaWxlKGNvbnN0IGNoYXIqIGZpbGVOYW1lKQoreworICAgIFN0
cmluZyBmaWxlUGF0aCA9IHdlYmtpdF9zdXBwb3J0OjpHZXRXZWJLaXRSb290RGlyKCk7CisgICAg
ZmlsZVBhdGguYXBwZW5kKGZpbGVOYW1lKTsKKworICAgIGxvbmcgbG9uZyBmaWxlU2l6ZTsKKyAg
ICBpZiAoIWdldEZpbGVTaXplKGZpbGVQYXRoLCBmaWxlU2l6ZSkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSA9IG9wZW5GaWxlKGZpbGVQYXRoLCBP
cGVuRm9yUmVhZCk7CisgICAgaW50IGZpbGVMZW5ndGggPSBzdGF0aWNfY2FzdDxpbnQ+KGZpbGVT
aXplKTsKKyAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyKGZpbGVMZW5ndGgpOworICAgIHJlYWRGcm9t
RmlsZShoYW5kbGUsIGJ1ZmZlci5kYXRhKCksIGZpbGVMZW5ndGgpOworICAgIGNsb3NlRmlsZSho
YW5kbGUpOworICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmFkb3B0VmVjdG9yKGJ1ZmZlcik7Cit9
CisKK1RFU1QoR0lGSW1hZ2VEZWNvZGVyVGVzdCwgRGVjb2RlVHdvRnJhbWVzKQoreworICAgIE93
blB0cjxHSUZJbWFnZURlY29kZXI+IGRlY29kZXIoYWRvcHRQdHIobmV3IEdJRkltYWdlRGVjb2Rl
cihJbWFnZVNvdXJjZTo6QWxwaGFOb3RQcmVtdWx0aXBsaWVkLCBJbWFnZVNvdXJjZTo6R2FtbWFB
bmRDb2xvclByb2ZpbGVBcHBsaWVkKSkpOworCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0
YSA9IHJlYWRGaWxlKCIvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvcmVzb3VyY2VzL2FuaW1hdGVk
LmdpZiIpOworICAgIEFTU0VSVF9UUlVFKGRhdGEuZ2V0KCkpOworICAgIGRlY29kZXItPnNldERh
dGEoZGF0YS5nZXQoKSwgdHJ1ZSk7CisgICAgRVhQRUNUX0VRKGNBbmltYXRpb25Mb29wT25jZSwg
ZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkpOworCisgICAgSW1hZ2VGcmFtZSogZnJhbWUgPSBk
ZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMCk7CisgICAgRVhQRUNUX0VRKEltYWdlRnJhbWU6
OkZyYW1lQ29tcGxldGUsIGZyYW1lLT5zdGF0dXMoKSk7CisgICAgRVhQRUNUX0VRKDE2LCBmcmFt
ZS0+Z2V0U2tCaXRtYXAoKS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMTYsIGZyYW1lLT5nZXRT
a0JpdG1hcCgpLmhlaWdodCgpKTsKKworICAgIGZyYW1lID0gZGVjb2Rlci0+ZnJhbWVCdWZmZXJB
dEluZGV4KDEpOworICAgIEVYUEVDVF9FUShJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlLCBmcmFt
ZS0+c3RhdHVzKCkpOworICAgIEVYUEVDVF9FUSgxNiwgZnJhbWUtPmdldFNrQml0bWFwKCkud2lk
dGgoKSk7CisgICAgRVhQRUNUX0VRKDE2LCBmcmFtZS0+Z2V0U2tCaXRtYXAoKS5oZWlnaHQoKSk7
CisKKyAgICBFWFBFQ1RfRVEoMnUsIGRlY29kZXItPmZyYW1lQ291bnQoKSk7CisgICAgRVhQRUNU
X0VRKGNBbmltYXRpb25Mb29wSW5maW5pdGUsIGRlY29kZXItPnJlcGV0aXRpb25Db3VudCgpKTsK
K30KKworVEVTVChHSUZJbWFnZURlY29kZXJUZXN0LCBQYXJzZUFuZERlY29kZSkKK3sKKyAgICBP
d25QdHI8R0lGSW1hZ2VEZWNvZGVyPiBkZWNvZGVyKGFkb3B0UHRyKG5ldyBHSUZJbWFnZURlY29k
ZXIoSW1hZ2VTb3VyY2U6OkFscGhhTm90UHJlbXVsdGlwbGllZCwgSW1hZ2VTb3VyY2U6OkdhbW1h
QW5kQ29sb3JQcm9maWxlQXBwbGllZCkpKTsKKworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRh
dGEgPSByZWFkRmlsZSgiL0xheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL3Jlc291cmNlcy9hbmltYXRl
ZC5naWYiKTsKKyAgICBBU1NFUlRfVFJVRShkYXRhLmdldCgpKTsKKyAgICBkZWNvZGVyLT5zZXRE
YXRhKGRhdGEuZ2V0KCksIHRydWUpOworICAgIEVYUEVDVF9FUShjQW5pbWF0aW9uTG9vcE9uY2Us
IGRlY29kZXItPnJlcGV0aXRpb25Db3VudCgpKTsKKworICAgIC8vIFRoaXMgY2FsbCB3aWxsIHBh
cnNlIHRoZSBlbnRpcmUgZmlsZS4KKyAgICBFWFBFQ1RfRVEoMnUsIGRlY29kZXItPmZyYW1lQ291
bnQoKSk7CisgICAgRVhQRUNUX0VRKGNBbmltYXRpb25Mb29wSW5maW5pdGUsIGRlY29kZXItPnJl
cGV0aXRpb25Db3VudCgpKTsKKworICAgIEltYWdlRnJhbWUqIGZyYW1lID0gZGVjb2Rlci0+ZnJh
bWVCdWZmZXJBdEluZGV4KDApOworICAgIEVYUEVDVF9FUShJbWFnZUZyYW1lOjpGcmFtZUNvbXBs
ZXRlLCBmcmFtZS0+c3RhdHVzKCkpOworICAgIEVYUEVDVF9FUSgxNiwgZnJhbWUtPmdldFNrQml0
bWFwKCkud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDE2LCBmcmFtZS0+Z2V0U2tCaXRtYXAoKS5o
ZWlnaHQoKSk7CisKKyAgICBmcmFtZSA9IGRlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleCgxKTsK
KyAgICBFWFBFQ1RfRVEoSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSwgZnJhbWUtPnN0YXR1cygp
KTsKKyAgICBFWFBFQ1RfRVEoMTYsIGZyYW1lLT5nZXRTa0JpdG1hcCgpLndpZHRoKCkpOworICAg
IEVYUEVDVF9FUSgxNiwgZnJhbWUtPmdldFNrQml0bWFwKCkuaGVpZ2h0KCkpOworfQorCitURVNU
KEdJRkltYWdlRGVjb2RlclRlc3QsIFBhcnNlQnl0ZUJ5Qnl0ZSkKK3sKKyAgICBPd25QdHI8R0lG
SW1hZ2VEZWNvZGVyPiBkZWNvZGVyKGFkb3B0UHRyKG5ldyBHSUZJbWFnZURlY29kZXIoSW1hZ2VT
b3VyY2U6OkFscGhhTm90UHJlbXVsdGlwbGllZCwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQ
cm9maWxlQXBwbGllZCkpKTsKKworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSByZWFk
RmlsZSgiL0xheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL3Jlc291cmNlcy9hbmltYXRlZC5naWYiKTsK
KyAgICBBU1NFUlRfVFJVRShkYXRhLmdldCgpKTsKKworICAgIHNpemVfdCBmcmFtZUNvdW50ID0g
MDsKKworICAgIC8vIFBhc3MgZGF0YSB0byBkZWNvZGVyIGJ5dGUgYnkgYnl0ZS4KKyAgICBmb3Ig
KHVuc2lnbmVkIGxlbmd0aCA9IDE7IGxlbmd0aCA8PSBkYXRhLT5zaXplKCk7ICsrbGVuZ3RoKSB7
CisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHRlbXBEYXRhID0gU2hhcmVkQnVmZmVyOjpj
cmVhdGUoZGF0YS0+ZGF0YSgpLCBsZW5ndGgpOworICAgICAgICBkZWNvZGVyLT5zZXREYXRhKHRl
bXBEYXRhLmdldCgpLCBsZW5ndGggPT0gZGF0YS0+c2l6ZSgpKTsKKworICAgICAgICBFWFBFQ1Rf
TEUoZnJhbWVDb3VudCwgZGVjb2Rlci0+ZnJhbWVDb3VudCgpKTsKKyAgICAgICAgZnJhbWVDb3Vu
dCA9IGRlY29kZXItPmZyYW1lQ291bnQoKTsKKyAgICB9CisKKyAgICBFWFBFQ1RfRVEoMnUsIGRl
Y29kZXItPmZyYW1lQ291bnQoKSk7CisgICAgRVhQRUNUX0VRKGNBbmltYXRpb25Mb29wSW5maW5p
dGUsIGRlY29kZXItPnJlcGV0aXRpb25Db3VudCgpKTsKK30KKworVEVTVChHSUZJbWFnZURlY29k
ZXJUZXN0LCBQYXJzZUFuZERlY29kZUJ5dGVCeUJ5dGUpCit7CisgICAgT3duUHRyPEdJRkltYWdl
RGVjb2Rlcj4gZGVjb2RlcihhZG9wdFB0cihuZXcgR0lGSW1hZ2VEZWNvZGVyKEltYWdlU291cmNl
OjpBbHBoYU5vdFByZW11bHRpcGxpZWQsIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmls
ZUFwcGxpZWQpKSk7CisKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhID0gcmVhZEZpbGUo
Ii9MYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9yZXNvdXJjZXMvYW5pbWF0ZWQtZ2lmLXdpdGgtb2Zm
c2V0cy5naWYiKTsKKyAgICBBU1NFUlRfVFJVRShkYXRhLmdldCgpKTsKKworICAgIHNpemVfdCBm
cmFtZUNvdW50ID0gMDsKKyAgICBzaXplX3QgZnJhbWVzRGVjb2RlZCA9IDA7CisKKyAgICAvLyBQ
YXNzIGRhdGEgdG8gZGVjb2RlciBieXRlIGJ5IGJ5dGUuCisgICAgZm9yICh1bnNpZ25lZCBsZW5n
dGggPSAxOyBsZW5ndGggPD0gZGF0YS0+c2l6ZSgpOyArK2xlbmd0aCkgeworICAgICAgICBSZWZQ
dHI8U2hhcmVkQnVmZmVyPiB0ZW1wRGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEtPmRh
dGEoKSwgbGVuZ3RoKTsKKyAgICAgICAgZGVjb2Rlci0+c2V0RGF0YSh0ZW1wRGF0YS5nZXQoKSwg
bGVuZ3RoID09IGRhdGEtPnNpemUoKSk7CisKKyAgICAgICAgRVhQRUNUX0xFKGZyYW1lQ291bnQs
IGRlY29kZXItPmZyYW1lQ291bnQoKSk7CisgICAgICAgIGZyYW1lQ291bnQgPSBkZWNvZGVyLT5m
cmFtZUNvdW50KCk7CisKKyAgICAgICAgSW1hZ2VGcmFtZSogZnJhbWUgPSBkZWNvZGVyLT5mcmFt
ZUJ1ZmZlckF0SW5kZXgoZnJhbWVDb3VudCAtIDEpOworICAgICAgICBpZiAoZnJhbWUgJiYgZnJh
bWUtPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUgJiYgZnJhbWVzRGVjb2Rl
ZCA8IGZyYW1lQ291bnQpCisgICAgICAgICAgICArK2ZyYW1lc0RlY29kZWQ7CisgICAgfQorCisg
ICAgRVhQRUNUX0VRKDV1LCBkZWNvZGVyLT5mcmFtZUNvdW50KCkpOworICAgIEVYUEVDVF9FUSg1
dSwgZnJhbWVzRGVjb2RlZCk7CisgICAgRVhQRUNUX0VRKGNBbmltYXRpb25Mb29wSW5maW5pdGUs
IGRlY29kZXItPnJlcGV0aXRpb25Db3VudCgpKTsKK30KKworLy8gU2Vjb25kIGZyYW1lIGluIHRo
ZSBmaWxlIGlzIGJyb2tlbiBidXQgdGVzdCB0aGF0IGZpcnN0IGZyYW1lIGNhbiBiZSBkZWNvZGVk
LgorVEVTVChHSUZJbWFnZURlY29kZXJUZXN0LCBCcm9rZW5TZWNvbmRGcmFtZSkKK3sKKyAgICBP
d25QdHI8R0lGSW1hZ2VEZWNvZGVyPiBkZWNvZGVyKGFkb3B0UHRyKG5ldyBHSUZJbWFnZURlY29k
ZXIoSW1hZ2VTb3VyY2U6OkFscGhhTm90UHJlbXVsdGlwbGllZCwgSW1hZ2VTb3VyY2U6OkdhbW1h
QW5kQ29sb3JQcm9maWxlQXBwbGllZCkpKTsKKworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRh
dGEgPSByZWFkRmlsZSgiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9icm9rZW4u
Z2lmIik7CisgICAgQVNTRVJUX1RSVUUoZGF0YS5nZXQoKSk7CisgICAgZGVjb2Rlci0+c2V0RGF0
YShkYXRhLmdldCgpLCB0cnVlKTsKKworICAgIEVYUEVDVF9FUSgxdSwgZGVjb2Rlci0+ZnJhbWVD
b3VudCgpKTsKKyAgICBFWFBFQ1RfRVEoY0FuaW1hdGlvbkxvb3BJbmZpbml0ZSwgZGVjb2Rlci0+
cmVwZXRpdGlvbkNvdW50KCkpOworCisgICAgSW1hZ2VGcmFtZSogZnJhbWUgPSBkZWNvZGVyLT5m
cmFtZUJ1ZmZlckF0SW5kZXgoMCk7CisgICAgRVhQRUNUX0VRKEltYWdlRnJhbWU6OkZyYW1lQ29t
cGxldGUsIGZyYW1lLT5zdGF0dXMoKSk7CisgICAgRVhQRUNUX0VRKDE2LCBmcmFtZS0+Z2V0U2tC
aXRtYXAoKS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMTYsIGZyYW1lLT5nZXRTa0JpdG1hcCgp
LmhlaWdodCgpKTsKKworICAgIGZyYW1lID0gZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KDEp
OworICAgIEVYUEVDVF9GQUxTRShmcmFtZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvYnJva2VuLmdpZiBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9icm9rZW4uZ2lmCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUzYTdj
NGViZTdkOWJlYTk4Mzk3NWY4MjlhMmVkYzhlNTVkMWY3NmQKR0lUIGJpbmFyeSBwYXRjaApsaXRl
cmFsIDkwNgp6Y21aP3diaEVIYjZrcmZ3X3xDdzxrZH02YVZKNDZzMSowSl8weipMWUtld04yTlUq
YkdmVUErNzBXJXtvMm8hJl4KenV6KjVCMlNrOWYyP0t7TDEyY3o9JEEkJDVuPm1FRlZvcSNXYyhg
M2EqPXZyKyN6alhQODV1ITM/JXc0R1lQIURgCktPJmNSVlpQb3lQKEl2ZUEKCmxpdGVyYWwgMApI
Y21WP2QwMDAwMQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186553</attachid>
            <date>2013-02-04 23:06:49 -0800</date>
            <delta_ts>2013-02-05 21:47:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98098-20130204230328.patch</filename>
            <type>text/plain</type>
            <size>89356</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxNzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGZkYTM0ODc2YjI1ZTcw
MmFlYWY1ZGQxMmI2MDA2NWEzYmZjYWE1YS4uNDNjZTkzNjQzNGNhM2RkMzJiYjVmNmEzZTJjMWQx
MDM1NGYzMTNkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2MCBAQAorMjAxMy0wMi0wNCAgQWxw
aGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFBhcnNlIEdJRiBpbWFnZXMg
d2l0aG91dCBmdWxsIGRlY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05ODA5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE9CSkVDVElWRQorCisgICAgICAgIFRoZSBvYmplY3RpdmUgb2YgdGhpcyBw
YXRjaCBpcyB0byBpbXByb3ZlIEdJRiBpbWFnZSBkZWNvZGluZyBpbiBnZW5lcmFsLgorICAgICAg
ICBUaGUgQ2hyb21pdW0gc3BlY2lmaWMgZW5oYW5jZW1lbnQgaXMgdG8gZW5hYmxlIGRlZmVycmVk
IGltYWdlIGRlY29kaW5nCisgICAgICAgIGZvciBhbmltYXRlZCBHSUYgaW1hZ2VzLiBNb3JlIGRl
dGFpbHMgb24gdGhpcyB3aWxsIGZvbGxvdy4KKworICAgICAgICBGRUFUVVJFUworCisgICAgICAg
IFRoaXMgcGF0Y2ggaW1wbGVtZW50cyB0aGUgZm9sbG93aW5nIGZlYXR1cmVzIGZvciBHSUZJbWFn
ZURlY29kZXIuCisKKyAgICAgICAgMS4gSW5jcmVtZW50YWwgZmlsZSBwYXJzaW5nLgorICAgICAg
ICAgICBHSUYgZGVjb2RlciB1c2VkIHRvIHJlLXBhcnNlIHRoZSBlbnRpcmUgZmlsZSB3aGVuZXZl
ciB0aGVyZSBpcyBtb3JlCisgICAgICAgICAgIGRhdGEgdG8gb2J0YWluIHRoZSBsYXRlc3QgZnJh
bWUgY291bnQuIFRoaXMgd2FzIGEgdmVyeSBzbG93IG9wZXJhdGlvbgorICAgICAgICAgICBhbmQg
aGFkIE8obl4yKSBiZWhhdmlvciAobiBpcyBpbiB0aGUgb3JkZXIgb2YgYnl0ZXMpLiBUaGUgcG9v
cgorICAgICAgICAgICBwZXJmb3JtYW5jZSB3YXMgYXBwYXJlbnQgd2hlbiBsb2FkaW5nIGEgbGFy
Z2UgYW5pbWF0ZWQgR0lGIGltYWdlLgorCisgICAgICAgICAgIFRoaXMgY29kZSBpbXBsZW1lbnRz
IGluY3JlbWVudGFsIHBhcnNpbmcgc3VjaCB0aGF0IEdJRiBpbWFnZSBpcyBvbmx5CisgICAgICAg
ICAgIHBhcnNlZCBvbmNlLiBmcmFtZUNvdW50KCkgb3BlcmF0aW9uIHdpbGwgcmVzdW1lIGZyb20g
dGhlIHByZXZpb3VzCisgICAgICAgICAgIGJ5dGUgb2Zmc2V0IGFuZCBjb250aW51ZSBwYXJzaW5n
LgorCisgICAgICAgICAgIFRoaXMgaW1wcm92ZW1lbnQgaXMgZXh0ZW5kZWQgdG8gZGVjb2Rpbmcg
YXMgd2VsbC4gQ2xpZW50IG9mCisgICAgICAgICAgIEdJRkltYWdlRGVjb2RlciBjYW4gcGFyc2Ug
dGhlIGZpbGUgYnkgY2FsbGluZyBmcmFtZUNvdW50KCkgYW5kCisgICAgICAgICAgIHJlc3VtZSBk
ZWNvZGluZyBmcm9tIHRoZSBsYXN0IHBhcnNlZCBieXRlIG9mZnNldC4KKworICAgICAgICAgICBU
aGlzIGFsbG93cyBsaW5lYXIgcGFyc2luZyBvZiB0aGUgZmlsZSByZWdhcmRsZXNzIG9mIHByb2dy
ZXNzaXZlCisgICAgICAgICAgIGRvd25sb2FkaW5nIG9mIHRoZSBmaWxlLgorCisgICAgICAgIDIu
IEZyYW1lIGhlYWRlciBwYXJzaW5nIHdpdGhvdXQgZnVsbCBkZWNvZGluZy4KKyAgICAgICAgICAg
VGhpcyBwYXRjaCBlbmFibGVzIHBhcnNpbmcgdGhlIGVudGlyZSBmaWxlIGJ5IGNhbGxpbmcgZnJh
bWVDb3VudCgpCisgICAgICAgICAgIHdpdGhvdXQgYWN0dWFsbHkgZGVjb2RpbmcgYW55dGhpbmcu
CisKKyAgICAgICAgICAgVGhpcyBhdm9pZHMgaGVhdnkgZGVjb2Rpbmcgd2hlbiBCaXRtcGFJbWFn
ZSBydW5zIHRoZSBhbmltYXRpb24uCisgICAgICAgICAgIEFjdHVhbCBkZWNvZGluZyBpcyBkb25l
IHdoZW4gZnJhbWVCdWZmZXJBdEluZGV4KCkgaXMgY2FsbGVkLgorCisgICAgICAgICAgIFRoaXMg
Y2hhbmdlIGhhcyB0aGUgYWRkZWQgYmVuZWZpdHMgdGhhdCB0aGUgcGFyc2Ugb3BlcmF0aW9uIHNh
dmVzCisgICAgICAgICAgIGluZm9ybWF0aW9uIHRoYXQgaGVscHMgdG8gc3BlZWQgdXAgZGVjb2Rp
bmcuIElmIHRoZSBmaWxlIGlzIHBhcnNlZAorICAgICAgICAgICBvbmNlLCB0aGVuIGRlY29kaW5n
IHdpbGwgcGljayB1cCBhIGRlY29kaW5nIGNvbnRleHQgYW5kIHdpbGwKKyAgICAgICAgICAgZXhl
Y3V0ZSB3aXRob3V0IHBhcnNpbmcgdGhlIGZpbGUgYWdhaW4uCisKKyAgICAgICAgQUxHT1JJVEhN
CisKKyAgICAgICAgVGhlIG1ham9yaXR5IG9mIHRoaXMgY2hhbmdlIGFmZmVjdHMgR0lGSW1hZ2VS
ZWFkZXI6OmRlY29kZSgpIHdoaWNoIGlzCisgICAgICAgIHRoZSBlbnRyeSBwb2ludCBmb3IgZGVj
b2RpbmcgYSBHSUYgZmlsZS4gVGhpcyBtZXRob2QgYWNjZXB0cyBhIHF1ZXJ5CisgICAgICAgIHBh
cmFtZXRlciB3aGljaCBkZXRlcm1pbmVzIHdoaWNoIG9wZXJhdGlvbiB0byBwZXJmb3JtLgorCisg
ICAgICAgIEdJRkZyYW1lQ291bnRRdWVyeQorCisgICAgICAgIFdoZW4gdGhpcyBxdWVyeSBpcyBy
ZXF1ZXN0ZWQgdGhlIGRlY29kZXIgb3BlcmF0ZXMgaW4gcGFyc2luZyBtb2RlLiBJdAorICAgICAg
ICB0cmllcyB0byBwYXJzZSBhbGwgYXZhaWxhYmxlIGJ5dGVzIGFuZCBzYXZlcyBkZWNvZGluZyBj
b250ZXh0IGFsb25nCisgICAgICAgIHRoZSB3YXkuCisKKyAgICAgICAgSGVyZSdzIHRoZSBwc2V1
ZG8gY29kZToKKworICAgICAgICB3aGlsZSAoYnl0ZXNBdmFpbGFibGVUb0RlY29kZSgpKSB7Cisg
ICAgICAgICAgICAvLyBQcmVwYXJlIGEgbmV3IGZyYW1lIGRlY29kaW5nIGNvbnRleHQuCisgICAg
ICAgICAgICBpZiAoZnJhbWVTdGFydHMoKSkgeworICAgICAgICAgICAgICAgIGN1cnJlbnRGcmFt
ZSA9IHN0YXJ0TmV3RnJhbWVDb250ZXh0KCk7IGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBTYXZlIHRoZSBjb21wbGV0ZSBmcmFtZSBjb250ZXh0IHRvIGEgbGlzdCBv
ZiBwcmV2aW91cyBmcmFtZXMuCisgICAgICAgICAgICBpZiAoZnJhbWVDb21wbGV0ZSgpKSB7Cisg
ICAgICAgICAgICAgICAgcHJldmlvdXNGcmFtZXMuYWRkKGN1cnJlbnRGcmFtZSk7IGNvbnRpbnVl
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBQcmVwYXJlIGEgbmV3IExaVyBibG9j
ayBkZWNvZGluZyBjb250ZXh0LgorICAgICAgICAgICAgaWYgKGx6d0Jsb2NrU3RhcnRzKCkpIHsK
KyAgICAgICAgICAgICAgICBjdXJyZW50THp3QmxvY2sgPSBzdGFydE5ld0x6d0Jsb2NrKCk7IGNv
bnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTYXZlIHRoZSBjb21wbGV0
ZSBMWlcgYmxvY2sgY29udGV4dCB0byBhIGxpc3Qgb2YgcHJldmlvdXMgYmxvY2tzLgorICAgICAg
ICAgICAgaWYgKGx6d0Jsb2NrQ29tcGxldGUoKSkgeworICAgICAgICAgICAgICAgIGN1cnJlbnRG
cmFtZS5wcmV2aW91c0Jsb2NrcygpLmFkZChjdXJyZW50THp3QmxvY2spOyBjb250aW51ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEVhY2ggYSBmcmFtZSBjb250ZXh0IGFu
ZCBMWlcgZGVjb2RpbmcgY29udGV4dCBjb250YWlucyBwYXJzZWQKKyAgICAgICAgaW5mb3JtYXRp
b24gYW5kIGJ5dGUgb2Zmc2V0cyBmb3IgZnV0dXJlIGRlY29kaW5nIG9wZXJhdGlvbnMuCisKKyAg
ICAgICAgR0lGRlVsbFF1ZXJ5CisKKyAgICAgICAgR2l2ZW4gdGhhdCBhIGZpbGUgd2FzIHByZXZp
b3VzbHkgcGFyc2VkLCBhbGwgcHJldmlvdXMgZnJhbWVzIG5lZWQgdG8KKyAgICAgICAgYmUgZGVj
b2RlZCBmaXJzdC4gVGhlIGFsZ29yaXRobSB0aGVuIGxvb2tzIGxpa2U6CisKKyAgICAgICAgd2hp
bGUgKGhhc1ByZXZpb3VzRnJhbWVzKCkpCisgICAgICAgICAgICBkZWNvZGVQcmV2aW91c0ZyYW1l
cygpOworCisgICAgICAgIHdoaWxlIChoYXNQcmV2aW91c0xaV0Jsb2Nrc0luQ3VycmVudEZyYW1l
KCkpCisgICAgICAgICAgICBkZWNvZGVQcmV2aW91c0xaRUJsb2Nrc0luQ3VycmVudEZyYW1lKCk7
CisKKyAgICAgICAgZGVjb2RlKEdJRkZ1bGxRdWVyeSk7CisKKyAgICAgICAgREFUQSBTVFJVQ1RV
UkVTCisKKyAgICAgICAgVGhlcmUgYXJlIHR3byBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFkZGVkIHRv
IEdJRkltYWdlUmVhZGVyOgorCisgICAgICAgIEdJRkxaV0Jsb2NrCisKKyAgICAgICAgVGhpcyBz
dHJ1Y3R1cmUgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgYSBMWlcgYmxvY2ssIHdoaWNoCisg
ICAgICAgIGluY2x1ZGVzIHRoZSBmaXJzdCBieXRlIHBvc2l0aW9uIGluIHRoZSBmaWxlIGFuZCBi
bG9jayBzaXplIGluCisgICAgICAgIGJ5dGVzLgorCisgICAgICAgIEdJRkZyYW1lQ29udGV4dAor
CisgICAgICAgIFRoaXMgc3RydWN0dXJlIGNvbnRyYWlucyBhIHBhcnNlZCBHSUYgZnJhbWUuCisK
KyAgICAgICAgSXQgY29udGFpbnMgYSBsaXN0IG9mIEdJRkxaV0Jsb2NrIGZvciBMWlcgZGVjb2Rp
bmcuCisKKyAgICAgICAgSXQgYWxzbyBjb250YWlucyBiYXNpYyBpbmZvcm1hdGlvbiBsaWtlIGZy
YW1lIGRpbWVuc2lvbnMsIHBvc2l0aW9uLAorICAgICAgICBkdXJhdGlvbnMsIGxvY2FsIGNvbG9y
bWFwLCBldGMuCisKKyAgICAgICAgR0lGSW1hZ2VSZWFkZXIgdGhlbiBjb250YWlucyBhIGxpc3Qg
b2YgZnVsbHkgcGFyc2VkIEdJRkZyYW1lQ29udGV4dAorICAgICAgICBhbmQgdGhlIGN1cnJlbnQg
b25lIGJlaW5nIHBhcnNlZC4KKworICAgICAgICBDSEFOR0VTCisKKyAgICAgICAgVGhpcyBjaGFu
Z2UgY2FuIGJlIHJldmlld2VkIGFzIHR3byBtYWpvciBjaGFuZ2VzOgorCisgICAgICAgIEJpdG1h
cEltYWdlIC8gSW1hZ2VTb3VyY2UKKworICAgICAgICBBbGxvdyBmcmFtZUlzQ29tcGxldGVBdElu
ZGV4KCkgYW5kIGZyYW1lRHVyYXRpb25BdEluZGV4KCkgdG8gcmV0dXJuCisgICAgICAgIGZyYW1l
IGluZm9ybWF0aW9uIHdpdGhvdXQgYWN0dWFsbHkgZGVjb2RpbmcgYSBmcmFtZS4KKworICAgICAg
ICBHSUZJbWFnZURlY29kZXIgLyBHSUZJbWFnZVJlYWRlcgorCisgICAgICAgIFRoZSBtYWpvcml0
eSBvZiBjaGFuZ2VzIGhhcHBlbnMgaW4gR0lGSW1hZ2VSZWFkZXIgdG8gaW1wbGVtZW50IHRoZQor
ICAgICAgICBhbGdvcml0aG0gZGVzY3JpYmVkIGFib3ZlLgorCisgICAgICAgIFRFU1RTCisKKyAg
ICAgICAgVGhpcyBwYXRjaCBpcyB0ZXN0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIG1lYW5zOgorCisg
ICAgICAgIExheW91dCB0ZXN0aW5nCisKKyAgICAgICAgVGVzdGVkIHRoaXMgb24gQ2hyb21pdW0g
YXMgd2VsbCBhcyBNYWMuCisKKyAgICAgICAgVW5pdCB0ZXN0aW5nCisKKyAgICAgICAgQWRkZWQg
R0lGSW1hZ2VEZWNvZGVyVGVzdCBmb3IgQ2hyb21pdW0gdG8gY292ZXIgYmFzaWMgdXNlIGNhc2Vz
LgorCisgICAgICAgIExvY2FsIHRlc3RpbmcKKworICAgICAgICBJIGRvd25sb2FkZWQgYSByYW5k
b20gc2V0IG9mIDUwSyBHSUYgaW1hZ2VzIGluY2x1ZGluZyBib3RoIHNpbmdsZQorICAgICAgICBm
cmFtZSBhbmQgYW5pbWF0ZWQgR0lGcy4gSSB0ZXN0ZWQgdGhhdCB0aGVyZSBpcyBubyBjcmFzaGlu
ZyBpbiB0aGUKKyAgICAgICAgY29kZSBhbmQgYWxsIGRlY29kZWQgZnJhbWVzIGFyZSBiaXQtZXhh
Y3QgYXMgdGhlIGV4aXN0aW5nIEdJRiBpbWFnZQorICAgICAgICBkZWNvZGVyLgorCisgICAgICAg
IEZZSSAtIENIUk9NSVVNIFNQRUNJRklDUworCisgICAgICAgIFRoaXMgY2hhbmdlIGlzIG5lY2Vz
c2FyeSBmb3IgZGVmZXJyZWQgaW1hZ2UgZGVjb2RpbmcgZm9yIENocm9taXVtLgorICAgICAgICBH
SUYgaW1hZ2VzIGFyZSBhbmltYXRlZCBvbiB0aGUgbWFpbiB0aHJlYWQsIGhvd2V2ZXIgcXVlcnkg
Zm9yCisgICAgICAgIGZyYW1lIGNvdW50IGFuZCBkdXJhdGlvbiByZXF1aXJlcyBkZWNvZGluZyB0
aGUgZW50aXJlIGZpbGUuIFRoaXMKKyAgICAgICAgZ29lcyBhZ2FpbnN0IHRoZSBnb2FsIG9mIGRl
ZmVycmVkIGltYWdlIGRlY29kaW5nLiBCeSBkb2luZyBhIGNoZWFwCisgICAgICAgIHBhcnNlIG9w
ZXJhdGlvbiBvbiB0aGUgbWFpbiB0aHJlYWQgYW5kIGFuaW1hdGUgR0lGcyB0aGVyZSwgYWN0dWFs
CisgICAgICAgIGRlY29kaW5nIGNhbiBoYXBwZW4gbGF0ZXIgb24gYSBkaWZmZXJlbnQgdGhyZWFk
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToKKyAgICAgICAg
Q2hhbmdlZCB0aGVzZSBvcGVyYXRpb25zIHRvIG5vdCBwZXJmb3JtIGEgZnVsbCBkZWNvZGUuIFRo
ZXNlIHR3bworICAgICAgICBvcGVyYXRpb25zIGFyZSB1c2VkIGZvciBhbmltYXRlZCBHSUZzIG9u
bHkgc28gb3RoZXIgZm9ybWF0cyBhcmUKKyAgICAgICAgYWZmZWN0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VT
b3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291
cmNlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KToKKyAgICAgICAgUGx1bWJpbmcgZm9yIHF1ZXJp
ZXMgaW50byB0aGUgZGVjb2RlciB3aXRob3V0IGFjdHVhbCBkZWNvZGluZy4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRlZmVycmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUR1cmF0aW9uQXRJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlZmVycmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUlz
Q29tcGxldGVBdEluZGV4KToKKyAgICAgICAgVE9ETyBmb3IgdGhlc2Ugb3BlcmF0aW9ucyBub3cg
YmVjYXVzZSBkZWZlci1kZWNvZGluZyBmb3IgYW5pbWF0ZWQKKyAgICAgICAgR0lGcyBhcmUgbm90
IGltcGxlbWVudGVkIHlldC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9E
ZWZlcnJlZEltYWdlRGVjb2Rlci5oOgorICAgICAgICAoRGVmZXJyZWRJbWFnZURlY29kZXIpOgor
ICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VE
ZWNvZGVyLmg6CisgICAgICAgIChJbWFnZURlY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VEZWNvZGVyOjpmcmFtZUR1cmF0aW9uQXRJbmRleCk6CisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
SUZJbWFnZURlY29kZXI6OkdJRkltYWdlRGVjb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpHSUZJ
bWFnZURlY29kZXI6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVy
OjpmcmFtZUNvdW50KToKKyAgICAgICAgVXNlcyB0aGUgY3VycmVudCBHSUZJbWFnZVJlYWRlciB0
byBwYXJzZSB0aGUgZmlsZSBhbmQgcmV0dXJuIHRoZQorICAgICAgICBmcmFtZSBjb3VudC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleCk6Cisg
ICAgICAgIElmIHRoZSBmcmFtZSBoYXMgYmVlbiBmdWxseSBwYXJzZWQgYW5kIGRhdGEgY29tcGxl
dGUgdGhlbiByZXR1cm4KKyAgICAgICAgdHJ1ZS4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUR1cmF0aW9uQXRJbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KToKKyAgICAgICAg
KFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpHSUZJbWFnZURlY29kZXI6OmZyYW1lRGF0YUNvbXBsZXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdJRkltYWdlRGVjb2Rlcjo6Z2lmUGFyc2VDb21wbGV0ZSk6CisgICAgICAgIEdJRiBmaWxl
IGlzIGZ1bGx5IHBhcnNlZCwgaW5mb3JtYXRpb24gYWJvdXQgcmVwZXRpdGlvbiBjb3VudAorICAg
ICAgICBhbmQgZnJhbWUgY291bnQgaXMgZmluYWwuCisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFn
ZURlY29kZXI6OmdpZkRlY29kZUNvbXBsZXRlKToKKyAgICAgICAgR0lGIGRlY29kaW5nIGlzIGNv
bXBsZXRlLCBHSUZJbWFnZVJlYWRlciBjYW4gYmUgZGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdJRkltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVj
b2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rl
cjo6ZXhwYW5kRnJhbWVCdWZmZXJDYWNoZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChHSUZJbWFnZURlY29kZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dp
Zi9HSUZJbWFnZVJlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6Om91dHB1dFJvdyk6CisgICAgICAgIENoYW5nZSBpbiB0aGlzIG1ldGhvZCBpcyBqdXN0IHRv
IHVzZSBHSUZGcmFtZUNvbnRleHQuCisgICAgICAgIFRoZXJlIGlzIG5vdCBjaGFuZ2UgaW4gcHJv
Z3Jlc3NpdmUgR0lGIGFsZ29yaXRobS4KKyAgICAgICAgKFdlYkNvcmU6OmRvTHp3KToKKyAgICAg
ICAgQ2hhbmdlcyBpbiB0aGlzIG1ldGhvZCBpcyBqdXN0IHRvIGNoYW5nZSBpdCB0byB1c2UKKyAg
ICAgICAgR0lGTFpXQmxvY2sgYW5kIEdJRkZyYW1lQ29udGV4dC4gVGhlcmUgaXMgbm8gY2hhbmdl
IGluCisgICAgICAgIExaVyBkZWNvZGluZyBhbGdvcml0aG0uCisgICAgICAgIChXZWJDb3JlOjpH
SUZJbWFnZVJlYWRlcjo6R0lGSW1hZ2VSZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1h
Z2VSZWFkZXI6OmRlY29kZSk6CisgICAgICAgIFRoaXMgbWV0aG9kIGhhcyBncmVhdGx5IGNoYW5n
ZWQgdG8gaW1wbGVtZW50IGFsZ29yaXRobQorICAgICAgICBtZW50aW9uZWQgYWJvdmUuCisgICAg
ICAgIChXZWJDb3JlOjpHSUZJbWFnZVJlYWRlcjo6Z2xvYmFsQ29sb3JNYXApOgorICAgICAgICAo
V2ViQ29yZTo6R0lGSW1hZ2VSZWFkZXI6OmxvY2FsQ29sb3JNYXApOgorICAgICAgICAoV2ViQ29y
ZTo6R0lGSW1hZ2VSZWFkZXI6OnByZXBhcmVMWldDb250ZXh0KToKKyAgICAgICAgU3RhcnRzIGEg
bmV3IExaVyBkZWNvZGluZyBjb250ZXh0LgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VSZWFk
ZXI6OmRlY29kZUxaV0Jsb2NrKToKKyAgICAgICAgUGVyZm9ybSBMWlcgZGVjb2Rpbmcgb24gYSBi
bG9jay4KKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlUmVhZGVyOjpkZWNvZGVQcmV2aW91c0xa
V0Jsb2Nrcyk6CisgICAgICAgIFBlcmZvcm0gTFpXIGRlY29kaW5nIG9uIGFsbCBwcmV2aW91cyBw
YXJzZWQgYmxvY2tzLgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VSZWFkZXI6OmRlZmVyTFpX
QmxvY2spOgorICAgICAgICBTYXZlIHRoZSBjdXJyZW50bHkgcGFyc2VkIExaVyBibG9jayB0byB0
aGUgY3VycmVudAorICAgICAgICBHSUZGcmFtZUNvbnRleHQuCisgICAgICAgIChXZWJDb3JlOjpH
SUZJbWFnZVJlYWRlcjo6c2V0UmVtYWluaW5nQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6R0lG
SW1hZ2VSZWFkZXI6OnJlcG9ydFBhcnNlRXJyb3IpOgorICAgICAgICBSZXBvcnQgZGVjb2Rpbmcg
ZXJyb3Igb25seSBxdWVyeSBpcyBHSUZGdWxsUXVlcnkuIFRoaXMgYWxsb3dzCisgICAgICAgIGRl
Y29kaW5nIHRvIGJlIHRvbGVyYW50IHdoZW4gZnJhbWVDb3VudCgpIGlzIGNhbGxlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaDoKKyAgICAg
ICAgKEdJRkxaV0Jsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkxaV0Jsb2NrOjpHSUZMWldC
bG9jayk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEdJRkZyYW1lQ29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHSUZGcmFtZUNvbnRleHQ6OkdJRkZyYW1lQ29udGV4dCk6CisgICAg
ICAgIChHSUZMWldDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkxaV0NvbnRleHQ6OkdJ
RkxaV0NvbnRleHQpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R0lGSW1hZ2VSZWFkZXI6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VS
ZWFkZXI6Omdsb2JhbENvbG9yTWFwU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZVJl
YWRlcjo6bG9jYWxDb2xvck1hcFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VSZWFk
ZXI6OmltYWdlc0NvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlUmVhZGVyOjpsb29w
Q291bnQpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VSZWFkZXI6OmRhdGEpOgorCiAyMDEz
LTAyLTAyICBKdW4gSmlhbmcgIDxqdW4uYS5qaWFuZ0BpbnRlbC5jb20+CiAKICAgICAgICAgT3B0
aW1pemUgc29tZSBvcGVyYXRpb25zIGZvciBmbG9hdCB0eXBlIGluIHRleHR1cmUgZm9ybWF0IGNv
bnZlcnNpb25zIG9mIFdlYkdMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDMwZGMwMzc5
OTY1NGQxNmU4OGYwMWIwMDBlMzhjZWUxMzBkOTIxZjUuLjUzYzYxM2Y5MzNhMTAyYTU4ZGI0Yjgw
N2I4ZmRhNTM4N2Y1YzdkYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MzYgQEAKKzIwMTMtMDItMDQgIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBQYXJzZSBHSUYgaW1hZ2VzIHdpdGhvdXQgZnVsbCBkZWNvZGluZworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTgwOTgKKworICAgICAgICBBZGRl
ZCB0aGUgZm9sbG93aW5nIHVuaXQgdGVzdHMgdG8gdGVzdCBuZXcgbG9naWMgaW4gR0lGSW1hZ2VE
ZWNvZGVyOgorCisgICAgICAgIEdJRkltYWdlRGVjb2RlclRlc3QuZGVjb2RlVHdvRnJhbWVzCisg
ICAgICAgIFRlc3QgdGhhdCBpdCBjYW4gZGVjb2RlIGEgbXVsdGktZnJhbWUgR0lGIGltYWdlIGNv
cnJlY3RseS4KKworICAgICAgICBHSUZJbWFnZURlY29kZXJUZXN0LnBhcnNlQW5kRGVjb2RlCisg
ICAgICAgIEZpcnN0IHBlcmZvcm0gYSBwYXJzZSBvcGVyYXRpb24gYW5kIHRoZW4gYSBkZWNvZGUg
b3BlcmF0aW9uLiBFeHBlY3QKKyAgICAgICAgdGhhdCBwYXJzZSBhbmQgZGVjb2RlIG9wZXJhdGVz
IGNvcnJlY3RseS4KKworICAgICAgICBHSUZJbWFnZURlY29kZXJUZXN0LnBhcnNlQnl0ZUJ5Qnl0
ZQorICAgICAgICBUZXN0IHRoYXQgbXVsdGktZnJhbWUgR0lGIGltYWdlIGNhbiBiZSBwYXJzZWQg
Y29ycmVjdGx5IGJ5dGUgYnkgYnl0ZS4KKworICAgICAgICBHSUZJbWFnZURlY29kZXJUZXN0LnBh
cnNlQW5kRGVjb2RlQnl0ZUJ5Qnl0ZQorICAgICAgICBSdW4gYSBsb29wIHRvIGZlZWQgZGVjb2Rl
ciBieXRlIGJ5IGJ5dGUsIHBlcmZvcm0gYSBwYXJzZSBhbmQgdGhlbgorICAgICAgICBkZWNvZGUg
b3BlcmF0aW9uIGFuZCBtYWtlIHN1cmUgZnJhbWVzIGFyZSBkZWNvZGVkIGNvcnJlY3RseS4KKwor
ICAgICAgICBHSUZJbWFnZURlY29kZXJUZXN0LmJyb2tlblNlY29uZEZyYW1lCisgICAgICAgIERl
Y29kZSBhIEdJRiBpbWFnZSB3aXRoIHNlY29uZCBmcmFtZSBicm9rZW4uIEV4cGVjdCB0aGF0IHRo
ZSBmaXJzdAorICAgICAgICBmcmFtZSBjYW4gYmUgZGVjb2RlZCBjb3JyZWN0bHkuCisKKyAgICAg
ICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3Rz
L0dJRkltYWdlRGVjb2RlclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAg
ICAgIChXZWJLaXQ6OnJlYWRGaWxlKToKKyAgICAgICAgKFdlYktpdDo6VEVTVCk6CisgICAgICAg
ICogdGVzdHMvZGF0YS9icm9rZW4uZ2lmOiBBZGRlZC4KKwogMjAxMy0wMi0wMSAgU2hlcmlmZiBC
b3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4g
IFJvbGxlZCBDaHJvbWl1bSBERVBTIHRvIHIxODAyMjEuICBSZXF1ZXN0ZWQgYnkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAppbmRleCBjMjgx
OTdkNWI4MWU0ZWUyZTk3YTEyYzZkM2RhNzBhYmIwODExNmU2Li4xNWFjYTQwNTRkYTcyMGMyYTFk
ZmVjOWViNjczYWIzZTE0ZDRlMzg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCkBAIC0zMDgsMTYgKzMwOCwxNiBAQCBOYXRpdmVJbWFn
ZVB0ciBCaXRtYXBJbWFnZTo6ZnJhbWVBdEluZGV4KHNpemVfdCBpbmRleCkKIAogYm9vbCBCaXRt
YXBJbWFnZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYg
KCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9pc0NvbXBsZXRlOworICAgIGlmIChpbmRleCA8IG1f
ZnJhbWVzLnNpemUoKSAmJiBtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEgJiYgbV9mcmFt
ZXNbaW5kZXhdLm1faXNDb21wbGV0ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJu
IG1fc291cmNlLmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoaW5kZXgpOwogfQogCiBmbG9hdCBCaXRt
YXBJbWFnZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlmICgh
ZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBtX2ZyYW1lc1tpbmRleF0ubV9kdXJhdGlvbjsKKyAgICBpZiAoaW5kZXggPCBtX2ZyYW1lcy5z
aXplKCkgJiYgbV9mcmFtZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRhKQorICAgICAgICByZXR1cm4g
bV9mcmFtZXNbaW5kZXhdLm1fZHVyYXRpb247CisgICAgcmV0dXJuIG1fc291cmNlLmZyYW1lRHVy
YXRpb25BdEluZGV4KGluZGV4KTsKIH0KIAogTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAppbmRleCA5MTc0MDBlYzZkY2YzYjk2OTI2MDA2MTgw
ODliNWNkNzQwNWVjMjcwLi4yYWFjMzU1ZTYzMjA0ZTRiNDk4MDBiN2RjMWY0Mzk2YmQyOThhMDMz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJj
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
Y3BwCkBAIC0xNjUsMTUgKzE2NSwxMSBAQCBmbG9hdCBJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlv
bkF0SW5kZXgoc2l6ZV90IGluZGV4KQogICAgIGlmICghbV9kZWNvZGVyKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIEltYWdlRnJhbWUqIGJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJB
dEluZGV4KGluZGV4KTsKLSAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0YXR1cygpID09IElt
YWdlRnJhbWU6OkZyYW1lRW1wdHkpCi0gICAgICAgIHJldHVybiAwOwotCiAgICAgLy8gTWFueSBh
bm5veWluZyBhZHMgc3BlY2lmeSBhIDAgZHVyYXRpb24gdG8gbWFrZSBhbiBpbWFnZSBmbGFzaCBh
cyBxdWlja2x5IGFzIHBvc3NpYmxlLgogICAgIC8vIFdlIGZvbGxvdyBGaXJlZm94J3MgYmVoYXZp
b3IgYW5kIHVzZSBhIGR1cmF0aW9uIG9mIDEwMCBtcyBmb3IgYW55IGZyYW1lcyB0aGF0IHNwZWNp
ZnkKICAgICAvLyBhIGR1cmF0aW9uIG9mIDw9IDEwIG1zLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzc2
ODkzMDA+IGFuZCA8aHR0cDovL3dlYmtpdC5vcmcvYi8zNjA4Mj4KICAgICAvLyBmb3IgbW9yZSBp
bmZvcm1hdGlvbi4KLSAgICBjb25zdCBmbG9hdCBkdXJhdGlvbiA9IGJ1ZmZlci0+ZHVyYXRpb24o
KSAvIDEwMDAuMGY7CisgICAgY29uc3QgZmxvYXQgZHVyYXRpb24gPSBtX2RlY29kZXItPmZyYW1l
RHVyYXRpb25BdEluZGV4KGluZGV4KSAvIDEwMDAuMGY7CiAgICAgaWYgKGR1cmF0aW9uIDwgMC4w
MTFmKQogICAgICAgICByZXR1cm4gMC4xMDBmOwogICAgIHJldHVybiBkdXJhdGlvbjsKQEAgLTE5
NSw5ICsxOTEsNyBAQCBib29sIEltYWdlU291cmNlOjpmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNp
emVfdCBpbmRleCkKIHsKICAgICBpZiAoIW1fZGVjb2RlcikKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgSW1hZ2VGcmFtZSogYnVmZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5k
ZXgoaW5kZXgpOwotICAgIHJldHVybiBidWZmZXIgJiYgYnVmZmVyLT5zdGF0dXMoKSA9PSBJbWFn
ZUZyYW1lOjpGcmFtZUNvbXBsZXRlOworICAgIHJldHVybiBtX2RlY29kZXItPmZyYW1lSXNDb21w
bGV0ZUF0SW5kZXgoaW5kZXgpOwogfQogCiB1bnNpZ25lZCBJbWFnZVNvdXJjZTo6ZnJhbWVCeXRl
c0F0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlU291cmNlLmgKaW5kZXggNjZhOGEwYTUxYzM5ZmI5MjY4YjIyMWE0N2I2
ODc1MDE1OTNiYzRhMy4uODY5M2NjOTI1OGE1Y2RhMWUzOGZjNTU5YzQwYTQ3YTNiNzk0YzdlNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCkBA
IC0xNTMsNyArMTUzLDEwIEBAIHB1YmxpYzoKIAogICAgIGZsb2F0IGZyYW1lRHVyYXRpb25BdElu
ZGV4KHNpemVfdCk7CiAgICAgYm9vbCBmcmFtZUhhc0FscGhhQXRJbmRleChzaXplX3QpOyAvLyBX
aGV0aGVyIG9yIG5vdCB0aGUgZnJhbWUgYWN0dWFsbHkgdXNlZCBhbnkgYWxwaGEuCi0gICAgYm9v
bCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCk7IC8vIFdoZXRoZXIgb3Igbm90IHRoZSBm
cmFtZSBpcyBjb21wbGV0ZWx5IGRlY29kZWQuCisKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGVy
ZSBpcyBlbm91Z2ggZGF0YSB0byBjb21wbGV0ZWx5IGRlY29kZSB0aGUgZnJhbWUgb3IKKyAgICAv
LyB0aGUgZnJhbWUgaXMgYWxyZWFkeSBkZWNvZGVkIGNvbXBsZXRlbHkuCisgICAgYm9vbCBmcmFt
ZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCk7CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRh
dGlvbkF0SW5kZXgoc2l6ZV90KSBjb25zdDsgLy8gRVhJRiBpbWFnZSBvcmllbnRhdGlvbgogCiAg
ICAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGRlY29kZWQgZnJhbWUuIElm
IHRoZSBmcmFtZSBpcyBub3QgeWV0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdlRGVjb2Rlci5jcHAK
aW5kZXggMDUwZjQzOWU1OTZjYjk1NTNiYTFlZDcxNWQ4OWY3YjkzODNiOTJlOS4uNTQ2MTA1ZmYw
NGNmZThjNWU2NDk3NmQ5MGY3NTdkNjE1N2VjMjFhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVmZXJyZWRJbWFnZURlY29kZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1h
Z2VEZWNvZGVyLmNwcApAQCAtMTc5LDYgKzE3OSwxMiBAQCB2b2lkIERlZmVycmVkSW1hZ2VEZWNv
ZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpCiAgICAg
ICAgIG1fYWN0dWFsRGVjb2Rlci0+Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKGNsZWFyQmVmb3JlRnJh
bWUpOwogfQogCitmbG9hdCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6ZnJhbWVEdXJhdGlvbkF0SW5k
ZXgoc2l6ZV90IGluZGV4KQoreworICAgIC8vIEZJWE1FOiBIYW5kbGUgZGVmZXJyZWQgaW1hZ2Ug
ZGVjb2RpbmcuCisgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2Rlci0+ZnJhbWVEdXJhdGlvbkF0SW5k
ZXgoaW5kZXgpOworfQorCiBib29sIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUhhc0FscGhh
QXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFN5bmNocm9uaXpl
IHRoaXMgc3RhdGUgd2l0aCBJbWFnZURlY29kaW5nU3RvcmUgd2hlbiBpbWFnZSBpcwpAQCAtMTg3
LDYgKzE5MywxMyBAQCBib29sIERlZmVycmVkSW1hZ2VEZWNvZGVyOjpmcmFtZUhhc0FscGhhQXRJ
bmRleChzaXplX3QgaW5kZXgpIGNvbnN0CiAgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2RlciA/IG1f
YWN0dWFsRGVjb2Rlci0+ZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5kZXgpIDogdHJ1ZTsKIH0KIAor
Ym9vbCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3Qg
aW5kZXgpCit7CisgICAgLy8gRklYTUU6IEhhbmRsZSBkZWZlcnJlZCBpbWFnZSBkZWNvZGluZy4g
UmV0dXJuIHRydWUgaGVyZSBpcyBmaW5lIGJlY2F1c2UKKyAgICAvLyBhbmltYXRlZCBHSUZzIGFy
ZSBub3QgZGVmZXItZGVjb2RlZCB5ZXQuCisgICAgcmV0dXJuIG1fYWN0dWFsRGVjb2RlciA/IG1f
YWN0dWFsRGVjb2Rlci0+ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCkgOiB0cnVlOworfQor
CiB1bnNpZ25lZCBEZWZlcnJlZEltYWdlRGVjb2Rlcjo6ZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90
IGluZGV4KSBjb25zdAogewogICAgIC8vIElmIGZyYW1lIGRlY29kaW5nIGlzIGRlZmVycmVkIHRo
ZW4gaXQgaXMgbm90IG1hbmFnZWQgYnkgTWVtb3J5Q2FjaGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNvZGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EZWZlcnJlZEltYWdl
RGVjb2Rlci5oCmluZGV4IDVkZjkyMzU0YmRkZDA5YzhkYjNjMTE2ZjZhNTdiYjk5Njc0YjEwMzcu
LmE5MTg0YjNlNTUxYTY1MjYwMWY5ODBlNzBkMGNiMWRhYTFmMWRhYWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RlZmVycmVkSW1hZ2VEZWNv
ZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRGVm
ZXJyZWRJbWFnZURlY29kZXIuaApAQCAtNjEsNyArNjEsOSBAQCBwdWJsaWM6CiAgICAgc2l6ZV90
IGZyYW1lQ291bnQoKTsKICAgICBpbnQgcmVwZXRpdGlvbkNvdW50KCkgY29uc3Q7CiAgICAgdm9p
ZCBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90KTsKKyAgICBmbG9hdCBmcmFtZUR1cmF0aW9u
QXRJbmRleChzaXplX3QpOwogICAgIGJvb2wgZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGlu
ZGV4KSBjb25zdDsKKyAgICBib29sIGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90KTsKICAg
ICB1bnNpZ25lZCBmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0OwogICAgIElt
YWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24oKSBjb25zdDsKICAgICBib29sIGhvdFNwb3QoSW50
UG9pbnQmKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCmluZGV4IDA2N2M1ZGUzNmFlNGQ1MDk5ODU2OGQ4
YWNlZWM3Y2FhOGU0MTUwYTQuLjlhZDEzNTg0MWU3NzEzMTgyNWVkYjAzZDI2MGE4ZDg5ZmIzZGFj
NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0lt
YWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvSW1hZ2VEZWNvZGVyLmNwcApAQCAtMjk0LDYgKzI5NCwxMyBAQCB1bnNpZ25lZCBJbWFnZURl
Y29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKICAgICByZXR1cm4g
bV9zaXplLmFyZWEoKSAqIHNpemVvZihJbWFnZUZyYW1lOjpQaXhlbERhdGEpOwogfQogCitib29s
IEltYWdlRGVjb2Rlcjo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCit7Cisg
ICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkgPD0gaW5kZXgpCisgICAgICAgIHJldHVy
biBpc0FsbERhdGFSZWNlaXZlZCgpOworICAgIHJldHVybiBtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5k
ZXhdLnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGU7Cit9CisKIHZvaWQgSW1h
Z2VEZWNvZGVyOjpwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKQogewogICAgIG1fc2NhbGVk
ID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9JbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL0ltYWdlRGVjb2Rlci5oCmluZGV4IDJlMGI1N2YxZDIzMTM1OTJjM2Q4NjQ3MzllM2I0YTJj
YjVkNDk5OTMuLmEwOGUyYzA3YWY0NDBhNDFhOGQwYTAzZWMzZjBmY2UwZjkzZTMyM2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVj
b2Rlci5oCkBAIC0zMjksNiArMzI5LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
Ly8gTnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBkZWNvZGVkIGZyYW1lIHJlcXVlc3RlZC4gUmV0dXJu
IDAgaWYgbm90IHlldCBkZWNvZGVkLgogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGZyYW1lQnl0
ZXNBdEluZGV4KHNpemVfdCkgY29uc3Q7CiAKKyAgICAgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhl
cmUgaXMgZW5vdWdoIGRhdGEgdG8gY29tcGxldGVseSBkZWNvZGUgdGhlIGZyYW1lIG9yIHRoZQor
ICAgICAgICAvLyBmcmFtZSBoYXMgYWxyZWFkeSBiZWVuIGRlY29kZWQuCisgICAgICAgIHZpcnR1
YWwgYm9vbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRleCk7CisKKyAgICAgICAg
dmlydHVhbCBmbG9hdCBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpIHsgcmV0dXJu
IDA7IH0KKwogICAgICAgICB2b2lkIHNldElnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlKGJvb2wg
ZmxhZykgeyBtX2lnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlID0gZmxhZzsgfQogICAgICAgICBi
b29sIGlnbm9yZXNHYW1tYUFuZENvbG9yUHJvZmlsZSgpIGNvbnN0IHsgcmV0dXJuIG1faWdub3Jl
R2FtbWFBbmRDb2xvclByb2ZpbGU7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAppbmRl
eCA4ZmM0YTlhNTMwOWZmODE5ZDFmODk4YjMzODFhOTFmNzc5MTJiMWU1Li5hNjBmYTkyNTljZDVk
Y2VkMTI3ZmNjMjBlYTQ1YjhjNGMyNmFlZjAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNw
cApAQCAtMzUsOSArMzUsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogR0lGSW1hZ2VEZWNvZGVy
OjpHSUZJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhT3B0aW9uIGFscGhhT3B0aW9uLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29s
b3JQcm9maWxlT3B0aW9uIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQogICAgIDogSW1hZ2VE
ZWNvZGVyKGFscGhhT3B0aW9uLCBnYW1tYUFuZENvbG9yUHJvZmlsZU9wdGlvbikKLSAgICAsIG1f
YWxyZWFkeVNjYW5uZWRUaGlzRGF0YUZvckZyYW1lQ291bnQodHJ1ZSkKICAgICAsIG1fcmVwZXRp
dGlvbkNvdW50KGNBbmltYXRpb25Mb29wT25jZSkKLSAgICAsIG1fcmVhZE9mZnNldCgwKQorICAg
ICwgbV9pc0ZyYW1lQ291bnRGaW5hbChmYWxzZSkKKyAgICAsIG1fZnJhbWVDb3VudCgwKQorICAg
ICwgbV9sYXN0RGF0YUNvbXBsZXRlRnJhbWVJbmRleCgwKQogewogfQogCkBAIC01MCwxMCArNTEs
MTAgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBi
b29sIGFsbERhdGFSZWNlaXZlZCkKICAgICBpZiAoZmFpbGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIEltYWdlRGVjb2Rlcjo6c2V0RGF0YShkYXRhLCBhbGxEYXRhUmVjZWl2ZWQpOworICAg
IGlmIChtX3JlYWRlcikKKyAgICAgICAgbV9yZWFkZXItPnNldERhdGEoZGF0YSk7CiAKLSAgICAv
LyBXZSBuZWVkIHRvIHJlc2NhbiB0aGUgZnJhbWUgY291bnQsIGFzIHRoZSBuZXcgZGF0YSBtYXkg
aGF2ZSBjaGFuZ2VkIGl0LgotICAgIG1fYWxyZWFkeVNjYW5uZWRUaGlzRGF0YUZvckZyYW1lQ291
bnQgPSBmYWxzZTsKKyAgICBJbWFnZURlY29kZXI6OnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2Vp
dmVkKTsKIH0KIAogYm9vbCBHSUZJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpCkBAIC03
OCwyMSArNzksMTcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OnNldFNpemUodW5zaWduZWQgd2lk
dGgsIHVuc2lnbmVkIGhlaWdodCkKIAogc2l6ZV90IEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb3Vu
dCgpCiB7Ci0gICAgaWYgKCFtX2FscmVhZHlTY2FubmVkVGhpc0RhdGFGb3JGcmFtZUNvdW50KSB7
Ci0gICAgICAgIC8vIEZJWE1FOiBTY2FubmluZyBhbGwgdGhlIGRhdGEgaGFzIE8obl4yKSBiZWhh
dmlvciBpZiB0aGUgZGF0YSB3ZXJlIHRvCi0gICAgICAgIC8vIGNvbWUgaW4gcmVhbGx5IHNsb3ds
eS4gIE1pZ2h0IGJlIGludGVyZXN0aW5nIHRvIHRyeSB0byBjbG9uZSBvdXIKLSAgICAgICAgLy8g
ZXhpc3RpbmcgcmVhZCBzZXNzaW9uIHRvIHByZXNlcnZlIHN0YXRlLCBidXQgZm9yIG5vdyB3ZSBq
dXN0IGNyYXdsCi0gICAgICAgIC8vIGFsbCB0aGUgZGF0YS4gIE5vdGUgdGhhdCB0aGlzIGlzIG5v
IHdvcnNlIHRoYW4gd2hhdCBJbWFnZUlPIGRvZXMgb24KLSAgICAgICAgLy8gTWFjIHJpZ2h0IG5v
dyAoaXQgYWxzbyBjcmF3bHMgYWxsIHRoZSBkYXRhIGFnYWluKS4KLSAgICAgICAgR0lGSW1hZ2VS
ZWFkZXIgcmVhZGVyKDApOwotICAgICAgICByZWFkZXIucmVhZCgoY29uc3QgdW5zaWduZWQgY2hh
ciopbV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+c2l6ZSgpLCBHSUZGcmFtZUNvdW50UXVlcnksIHN0
YXRpY19jYXN0PHVuc2lnbmVkPigtMSkpOwotICAgICAgICBtX2FscmVhZHlTY2FubmVkVGhpc0Rh
dGFGb3JGcmFtZUNvdW50ID0gdHJ1ZTsKLSAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6
ZShyZWFkZXIuaW1hZ2VzX2NvdW50KTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWFk
ZXIuaW1hZ2VzX2NvdW50OyArK2kpCi0gICAgICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGVbaV0u
c2V0UHJlbXVsdGlwbHlBbHBoYShtX3ByZW11bHRpcGx5QWxwaGEpOwotICAgIH0KKyAgICBpZiAo
bV9pc0ZyYW1lQ291bnRGaW5hbCkKKyAgICAgICAgcmV0dXJuIG1fZnJhbWVDb3VudDsKIAotICAg
IHJldHVybiBtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpOworICAgIGRlY29kZShzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oLTEpLCBHSUZGcmFtZUNvdW50UXVlcnkpOworCisgICAgLy8gR0lGSW1hZ2VS
ZWFkZXIgY2FuIGJlIGRlbGV0ZWQgaWYgdGhlcmUgd2FzIGEgZmF0YWwgZXJyb3IuCisgICAgaWYg
KG1fcmVhZGVyKSB7CisgICAgICAgIGV4cGFuZEZyYW1lQnVmZmVyQ2FjaGUobV9yZWFkZXItPmlt
YWdlc0NvdW50KCkpOworICAgICAgICByZXR1cm4gbV9yZWFkZXItPmltYWdlc0NvdW50KCk7Cisg
ICAgfQorICAgIHJldHVybiAwOwogfQogCiBpbnQgR0lGSW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9u
Q291bnQoKSBjb25zdApAQCAtMTE2LDggKzExMyw4IEBAIGludCBHSUZJbWFnZURlY29kZXI6OnJl
cGV0aXRpb25Db3VudCgpIGNvbnN0CiAgICAgLy8gc2hvdWxkIGNvbnRpbnVlIHRvIHRyZWF0IGl0
IGFzIGEgImxvb3Agb25jZSIgYW5pbWF0aW9uLiAgV2UgZG9uJ3QgbmVlZAogICAgIC8vIHNwZWNp
YWwgY29kZSBoZXJlIGVpdGhlciwgYmVjYXVzZSBpbiB0aGlzIGNhc2Ugd2UnbGwgbmV2ZXIgY2hh
bmdlCiAgICAgLy8gfG1fcmVwZXRpdGlvbkNvdW50fCBmcm9tIGl0cyBkZWZhdWx0IHZhbHVlLgot
ICAgIGlmIChtX3JlYWRlciAmJiAobV9yZWFkZXItPmxvb3BfY291bnQgIT0gY0xvb3BDb3VudE5v
dFNlZW4pKQotICAgICAgICBtX3JlcGV0aXRpb25Db3VudCA9IG1fcmVhZGVyLT5sb29wX2NvdW50
OworICAgIGlmIChtX3JlYWRlciAmJiAobV9yZWFkZXItPmxvb3BDb3VudCgpICE9IGNMb29wQ291
bnROb3RTZWVuKSkKKyAgICAgICAgbV9yZXBldGl0aW9uQ291bnQgPSBtX3JlYWRlci0+bG9vcENv
dW50KCk7CiAgICAgcmV0dXJuIG1fcmVwZXRpdGlvbkNvdW50OwogfQogCkBAIC0xOTEsNDkgKzE4
OCw1OSBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVf
dCBjbGVhckJlZm9yZUZyYW1lKQogICAgIH0KIH0KIAotdm9pZCBHSUZJbWFnZURlY29kZXI6OmRl
Y29kaW5nSGFsdGVkKHVuc2lnbmVkIGJ5dGVzTGVmdCkKK2Jvb2wgR0lGSW1hZ2VEZWNvZGVyOjpm
cmFtZUlzQ29tcGxldGVBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKLSAgICBtX3JlYWRPZmZzZXQg
PSBtX2RhdGEtPnNpemUoKSAtIGJ5dGVzTGVmdDsKKyAgICBpZiAoZnJhbWVDb3VudCgpIDw9IGlu
ZGV4KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZVtp
bmRleF0uc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIGluZGV4IDw9IG1fbGFzdERhdGFDb21wbGV0ZUZyYW1lSW5k
ZXg7Cit9CisKK2Zsb2F0IEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6
ZV90IGluZGV4KQoreworICAgIGlmICghZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCkpCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhdLmR1
cmF0aW9uKCk7CiB9CiAKLWJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnNp
Z25lZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIsIHVuc2lnbmVkIGNoYXIq
IHJvd0VuZCwgdW5zaWduZWQgcm93TnVtYmVyLCB1bnNpZ25lZCByZXBlYXRDb3VudCwgYm9vbCB3
cml0ZVRyYW5zcGFyZW50UGl4ZWxzKQorYm9vbCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVk
Um93KGNvbnN0IEdJRkZyYW1lQ29udGV4dCogZnJhbWVSZWFkZXIsIHVuc2lnbmVkIGZyYW1lSW5k
ZXgsIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYgcm93QnVmZmVyLCB1bnNpZ25lZCB3aWR0
aCwgdW5zaWduZWQgcm93TnVtYmVyLCB1bnNpZ25lZCByZXBlYXRDb3VudCwgYm9vbCB3cml0ZVRy
YW5zcGFyZW50UGl4ZWxzKQogewotICAgIGNvbnN0IEdJRkZyYW1lUmVhZGVyKiBmcmFtZVJlYWRl
ciA9IG1fcmVhZGVyLT5mcmFtZV9yZWFkZXI7CiAgICAgLy8gVGhlIHBpeGVsIGRhdGEgYW5kIGNv
b3JkaW5hdGVzIHN1cHBsaWVkIHRvIHVzIGFyZSByZWxhdGl2ZSB0byB0aGUgZnJhbWUncwogICAg
IC8vIG9yaWdpbiB3aXRoaW4gdGhlIGVudGlyZSBpbWFnZSBzaXplLCBpLmUuCiAgICAgLy8gKGZy
YW1lUmVhZGVyLT54X29mZnNldCwgZnJhbWVSZWFkZXItPnlfb2Zmc2V0KS4gIFRoZXJlIGlzIG5v
IGd1YXJhbnRlZQotICAgIC8vIHRoYXQgKHJvd0VuZCAtIHJvd0J1ZmZlcikgPT0gKHNpemUoKS53
aWR0aCgpIC0gZnJhbWVSZWFkZXItPnhfb2Zmc2V0KSwgc28KKyAgICAvLyB0aGF0IHdpZHRoID09
IChzaXplKCkud2lkdGgoKSAtIGZyYW1lUmVhZGVyLT54X29mZnNldCksIHNvCiAgICAgLy8gd2Ug
bXVzdCBlbnN1cmUgd2UgZG9uJ3QgcnVuIG9mZiB0aGUgZW5kIG9mIGVpdGhlciB0aGUgc291cmNl
IGRhdGEgb3IgdGhlCiAgICAgLy8gcm93J3MgWC1jb29yZGluYXRlcy4KICAgICBpbnQgeEJlZ2lu
ID0gdXBwZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWFkZXItPnhfb2Zmc2V0KTsKICAgICBpbnQgeUJl
Z2luID0gdXBwZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWFkZXItPnlfb2Zmc2V0ICsgcm93TnVtYmVy
KTsKLSAgICBpbnQgeEVuZCA9IGxvd2VyQm91bmRTY2FsZWRYKHN0ZDo6bWluKHN0YXRpY19jYXN0
PGludD4oZnJhbWVSZWFkZXItPnhfb2Zmc2V0ICsgKHJvd0VuZCAtIHJvd0J1ZmZlcikpLCBzaXpl
KCkud2lkdGgoKSkgLSAxLCB4QmVnaW4gKyAxKSArIDE7CisgICAgaW50IHhFbmQgPSBsb3dlckJv
dW5kU2NhbGVkWChzdGQ6Om1pbihzdGF0aWNfY2FzdDxpbnQ+KGZyYW1lUmVhZGVyLT54X29mZnNl
dCArIHdpZHRoKSwgc2l6ZSgpLndpZHRoKCkpIC0gMSwgeEJlZ2luICsgMSkgKyAxOwogICAgIGlu
dCB5RW5kID0gbG93ZXJCb3VuZFNjYWxlZFkoc3RkOjptaW4oc3RhdGljX2Nhc3Q8aW50PihmcmFt
ZVJlYWRlci0+eV9vZmZzZXQgKyByb3dOdW1iZXIgKyByZXBlYXRDb3VudCksIHNpemUoKS5oZWln
aHQoKSkgLSAxLCB5QmVnaW4gKyAxKSArIDE7Ci0gICAgaWYgKCFyb3dCdWZmZXIgfHwgKHhCZWdp
biA8IDApIHx8ICh5QmVnaW4gPCAwKSB8fCAoeEVuZCA8PSB4QmVnaW4pIHx8ICh5RW5kIDw9IHlC
ZWdpbikpCisgICAgaWYgKCh4QmVnaW4gPCAwKSB8fCAoeUJlZ2luIDwgMCkgfHwgKHhFbmQgPD0g
eEJlZ2luKSB8fCAoeUVuZCA8PSB5QmVnaW4pKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAg
IC8vIEdldCB0aGUgY29sb3JtYXAuCiAgICAgY29uc3QgdW5zaWduZWQgY2hhciogY29sb3JNYXA7
CiAgICAgdW5zaWduZWQgY29sb3JNYXBTaXplOwogICAgIGlmIChmcmFtZVJlYWRlci0+aXNfbG9j
YWxfY29sb3JtYXBfZGVmaW5lZCkgewotICAgICAgICBjb2xvck1hcCA9IGZyYW1lUmVhZGVyLT5s
b2NhbF9jb2xvcm1hcDsKLSAgICAgICAgY29sb3JNYXBTaXplID0gKHVuc2lnbmVkKWZyYW1lUmVh
ZGVyLT5sb2NhbF9jb2xvcm1hcF9zaXplOworICAgICAgICBjb2xvck1hcCA9IG1fcmVhZGVyLT5s
b2NhbENvbG9yTWFwKGZyYW1lUmVhZGVyKTsKKyAgICAgICAgY29sb3JNYXBTaXplID0gbV9yZWFk
ZXItPmxvY2FsQ29sb3JNYXBTaXplKGZyYW1lUmVhZGVyKTsKICAgICB9IGVsc2UgewotICAgICAg
ICBjb2xvck1hcCA9IG1fcmVhZGVyLT5nbG9iYWxfY29sb3JtYXA7Ci0gICAgICAgIGNvbG9yTWFw
U2l6ZSA9IG1fcmVhZGVyLT5nbG9iYWxfY29sb3JtYXBfc2l6ZTsKKyAgICAgICAgY29sb3JNYXAg
PSBtX3JlYWRlci0+Z2xvYmFsQ29sb3JNYXAoKTsKKyAgICAgICAgY29sb3JNYXBTaXplID0gbV9y
ZWFkZXItPmdsb2JhbENvbG9yTWFwU2l6ZSgpOwogICAgIH0KICAgICBpZiAoIWNvbG9yTWFwKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lIGlmIG5l
Y2Vzc2FyeS4KICAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJh
bWVJbmRleF07Ci0gICAgaWYgKChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVF
bXB0eSkgJiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkKKyAgICBpZiAoKGJ1ZmZlci5z
dGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KSAmJiAhaW5pdEZyYW1lQnVmZmVyKGZy
YW1lUmVhZGVyLCBmcmFtZUluZGV4KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSW1h
Z2VGcmFtZTo6UGl4ZWxEYXRhKiBjdXJyZW50QWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHhCZWdp
biwgeUJlZ2luKTsKICAgICAvLyBXcml0ZSBvbmUgcm93J3Mgd29ydGggb2YgZGF0YSBpbnRvIHRo
ZSBmcmFtZS4gIAogICAgIGZvciAoaW50IHggPSB4QmVnaW47IHggPCB4RW5kOyArK3gpIHsKLSAg
ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBzb3VyY2VWYWx1ZSA9ICoocm93QnVmZmVyICsgKG1f
c2NhbGVkID8gbV9zY2FsZWRDb2x1bW5zW3hdIDogeCkgLSBmcmFtZVJlYWRlci0+eF9vZmZzZXQp
OworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHNvdXJjZVZhbHVlID0gcm93QnVmZmVyWyht
X3NjYWxlZCA/IG1fc2NhbGVkQ29sdW1uc1t4XSA6IHgpIC0gZnJhbWVSZWFkZXItPnhfb2Zmc2V0
XTsKICAgICAgICAgaWYgKCghZnJhbWVSZWFkZXItPmlzX3RyYW5zcGFyZW50IHx8IChzb3VyY2VW
YWx1ZSAhPSBmcmFtZVJlYWRlci0+dHBpeGVsKSkgJiYgKHNvdXJjZVZhbHVlIDwgY29sb3JNYXBT
aXplKSkgewogICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGNvbG9ySW5kZXggPSBzdGF0aWNfY2Fz
dDxzaXplX3Q+KHNvdXJjZVZhbHVlKSAqIDM7CiAgICAgICAgICAgICBidWZmZXIuc2V0UkdCQShj
dXJyZW50QWRkcmVzcywgY29sb3JNYXBbY29sb3JJbmRleF0sIGNvbG9yTWFwW2NvbG9ySW5kZXgg
KyAxXSwgY29sb3JNYXBbY29sb3JJbmRleCArIDJdLCAyNTUpOwpAQCAtMjU5LDEyICsyNjYsMTIg
QEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5k
ZXgsIHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBH
SUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUodW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWdu
ZWQgZnJhbWVEdXJhdGlvbiwgSW1hZ2VGcmFtZTo6RnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3Nh
bE1ldGhvZCkKK2Jvb2wgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKGNvbnN0IEdJRkZy
YW1lQ29udGV4dCogZnJhbWVSZWFkZXIsIHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGZy
YW1lRHVyYXRpb24sIEltYWdlRnJhbWU6OkZyYW1lRGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRo
b2QpCiB7CiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgaWYgbmVjZXNzYXJ5LiAgU29tZSBH
SUZzIGluc2VydCBkby1ub3RoaW5nIGZyYW1lcywKICAgICAvLyBpbiB3aGljaCBjYXNlIHdlIG5l
dmVyIHJlYWNoIGhhdmVEZWNvZGVkUm93KCkgYmVmb3JlIGdldHRpbmcgaGVyZS4KICAgICBJbWFn
ZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07Ci0gICAgaWYg
KChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgJiYgIWluaXRGcmFt
ZUJ1ZmZlcihmcmFtZUluZGV4KSkKKyAgICBpZiAoKGJ1ZmZlci5zdGF0dXMoKSA9PSBJbWFnZUZy
YW1lOjpGcmFtZUVtcHR5KSAmJiAhaW5pdEZyYW1lQnVmZmVyKGZyYW1lUmVhZGVyLCBmcmFtZUlu
ZGV4KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBpbml0RnJhbWVCdWZmZXIoKSBoYXMgYWxy
ZWFkeSBjYWxsZWQgc2V0RmFpbGVkKCkuCiAKICAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdlRnJh
bWU6OkZyYW1lQ29tcGxldGUpOwpAQCAtMzA1LDEyICszMTIsMjcgQEAgYm9vbCBHSUZJbWFnZURl
Y29kZXI6OmZyYW1lQ29tcGxldGUodW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVE
dXJhdGlvbiwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBHSUZJbWFnZURlY29kZXI6Omdp
ZkNvbXBsZXRlKCkKK3ZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZURhdGFDb21wbGV0ZSh1bnNp
Z25lZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBmcmFtZUR1cmF0aW9uKQogewotICAgIC8vIENhY2hl
IHRoZSByZXBldGl0aW9uIGNvdW50LCB3aGljaCBpcyBub3cgYXMgYXV0aG9yaXRhdGl2ZSBhcyBp
dCdzIGV2ZXIKKyAgICBleHBhbmRGcmFtZUJ1ZmZlckNhY2hlKGZyYW1lSW5kZXggKyAxKTsKKyAg
ICBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF0uc2V0RHVyYXRpb24oZnJhbWVEdXJhdGlv
bik7CisgICAgaWYgKGZyYW1lSW5kZXggPiBtX2xhc3REYXRhQ29tcGxldGVGcmFtZUluZGV4KQor
ICAgICAgICBtX2xhc3REYXRhQ29tcGxldGVGcmFtZUluZGV4ID0gZnJhbWVJbmRleDsKK30KKwor
dm9pZCBHSUZJbWFnZURlY29kZXI6OmdpZlBhcnNlQ29tcGxldGUoKQoreworICAgIC8vIENhY2hl
IHJlcGV0aXRpb24gY291bnQgYW5kIGZyYW1lIGNvdW50LCB3aGljaCBhcmUgbm93IGFzIGF1dGhv
cml0YXRpdmUgYXMgdGhleSdyZSBldmVyCiAgICAgLy8gZ29pbmcgdG8gYmUuCiAgICAgcmVwZXRp
dGlvbkNvdW50KCk7CiAKKyAgICAvLyBEb24ndCBjYWxsIGZyYW1lQ291bnQoKSBiZWNhdXNlIGl0
IGRlY29kZXMgYW5kIGNhdXNlcyBhbiBpbmZpbml0ZSBsb29wLgorICAgIG1fZnJhbWVDb3VudCA9
IG1fcmVhZGVyLT5pbWFnZXNDb3VudCgpOworICAgIG1faXNGcmFtZUNvdW50RmluYWwgPSB0cnVl
OworfQorCit2b2lkIEdJRkltYWdlRGVjb2Rlcjo6Z2lmRGVjb2RlQ29tcGxldGUoKQorewogICAg
IG1fcmVhZGVyLmNsZWFyKCk7CiB9CiAKQEAgLTMxOSwxOSArMzQxLDE5IEBAIHZvaWQgR0lGSW1h
Z2VEZWNvZGVyOjpkZWNvZGUodW5zaWduZWQgaGFsdEF0RnJhbWUsIEdJRlF1ZXJ5IHF1ZXJ5KQog
ICAgIGlmIChmYWlsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX3JlYWRlcikK
KyAgICBpZiAoIW1fcmVhZGVyKSB7CiAgICAgICAgIG1fcmVhZGVyID0gYWRvcHRQdHIobmV3IEdJ
RkltYWdlUmVhZGVyKHRoaXMpKTsKKyAgICAgICAgbV9yZWFkZXItPnNldERhdGEobV9kYXRhKTsK
KyAgICB9CiAKLSAgICAvLyBJZiB3ZSBjb3VsZG4ndCBkZWNvZGUgdGhlIGltYWdlIGJ1dCB3ZSd2
ZSByZWNlaXZlZCBhbGwgdGhlIGRhdGEsIGRlY29kaW5nCi0gICAgLy8gaGFzIGZhaWxlZC4KLSAg
ICBpZiAoIW1fcmVhZGVyLT5yZWFkKChjb25zdCB1bnNpZ25lZCBjaGFyKiltX2RhdGEtPmRhdGEo
KSArIG1fcmVhZE9mZnNldCwgbV9kYXRhLT5zaXplKCkgLSBtX3JlYWRPZmZzZXQsIHF1ZXJ5LCBo
YWx0QXRGcmFtZSkgJiYgaXNBbGxEYXRhUmVjZWl2ZWQoKSkKKyAgICAvLyBJZiB3ZSBjb3VsZG4n
dCBkZWNvZGUgdGhlIGltYWdlIGJ1dCB3ZSd2ZSByZWNlaXZlZCBhbGwgdGhlIGRhdGEsIGRlY29k
aW5nIGhhcyBmYWlsZWQuCisgICAgaWYgKCFtX3JlYWRlci0+ZGVjb2RlKHF1ZXJ5LCBoYWx0QXRG
cmFtZSkgJiYgaXNBbGxEYXRhUmVjZWl2ZWQoKSAmJiBxdWVyeSA9PSBHSUZGdWxsUXVlcnkpCiAg
ICAgICAgIHNldEZhaWxlZCgpOwogfQogCi1ib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1l
QnVmZmVyKHVuc2lnbmVkIGZyYW1lSW5kZXgpCitib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZy
YW1lQnVmZmVyKGNvbnN0IEdJRkZyYW1lQ29udGV4dCogZnJhbWVSZWFkZXIsIHVuc2lnbmVkIGZy
YW1lSW5kZXgpCiB7CiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgcmVjdCBpbiBvdXIgYnVm
ZmVyLgotICAgIGNvbnN0IEdJRkZyYW1lUmVhZGVyKiBmcmFtZVJlYWRlciA9IG1fcmVhZGVyLT5m
cmFtZV9yZWFkZXI7CiAgICAgSW50UmVjdCBmcmFtZVJlY3QoZnJhbWVSZWFkZXItPnhfb2Zmc2V0
LCBmcmFtZVJlYWRlci0+eV9vZmZzZXQsIGZyYW1lUmVhZGVyLT53aWR0aCwgZnJhbWVSZWFkZXIt
PmhlaWdodCk7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhlIGZyYW1lUmVjdCBkb2Vzbid0IGV4dGVu
ZCBvdXRzaWRlIHRoZSBidWZmZXIuCkBAIC00MDQsNCArNDI2LDE0IEBAIGJvb2wgR0lGSW1hZ2VE
ZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW5zaWduZWQgZnJhbWVJbmRleCkKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAordm9pZCBHSUZJbWFnZURlY29kZXI6OmV4cGFuZEZyYW1lQnVmZmVyQ2FjaGUo
c2l6ZV90IHNpemUpCit7CisgICAgc2l6ZV90IHByZXZpb3VzU2l6ZSA9IG1fZnJhbWVCdWZmZXJD
YWNoZS5zaXplKCk7CisgICAgaWYgKHNpemUgPCBwcmV2aW91c1NpemUpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKHNpemUpOworICAgIGZvciAoc2l6ZV90
IGkgPSBwcmV2aW91c1NpemU7IGkgPCBtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpOyArK2kpCisg
ICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZVtpXS5zZXRQcmVtdWx0aXBseUFscGhhKG1fcHJlbXVs
dGlwbHlBbHBoYSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURl
Y29kZXIuaAppbmRleCAxNWJkOTlmNjg2MjM0YWRjMzlhZmVhZmI2ZTEwNWMxNzliMzI5MDcxLi5i
NjMyNjhhOGVmYWExMmE0Y2Q4MGI3YmNlODExNDYzMWRkZTAxZTY4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdl
RGVjb2Rlci5oCkBAIC0yOSwxMCArMjksMTEgQEAKICNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIK
ICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKLXN0cnVjdCBHSUZJbWFnZVJlYWRlcjsKLQogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitzdHJ1Y3QgR0lGSW1hZ2VSZWFkZXI7CitzdHJ1Y3QgR0lGRnJh
bWVDb250ZXh0OworCiAgICAgLy8gVGhpcyBjbGFzcyBkZWNvZGVzIHRoZSBHSUYgaW1hZ2UgZm9y
bWF0LgogICAgIGNsYXNzIEdJRkltYWdlRGVjb2RlciA6IHB1YmxpYyBJbWFnZURlY29kZXIgewog
ICAgIHB1YmxpYzoKQEAgLTU0LDEyICs1NSwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIC8vIEdJRkltYWdlUmVhZGVyIQogICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0RmFpbGVkKCk7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90IGNsZWFy
QmVmb3JlRnJhbWUpOworICAgICAgICB2aXJ0dWFsIGJvb2wgZnJhbWVJc0NvbXBsZXRlQXRJbmRl
eChzaXplX3QgaW5kZXgpOworICAgICAgICB2aXJ0dWFsIGZsb2F0IGZyYW1lRHVyYXRpb25BdElu
ZGV4KHNpemVfdCBpbmRleCk7CiAKICAgICAgICAgLy8gQ2FsbGJhY2tzIGZyb20gdGhlIEdJRiBy
ZWFkZXIuCi0gICAgICAgIHZvaWQgZGVjb2RpbmdIYWx0ZWQodW5zaWduZWQgYnl0ZXNMZWZ0KTsK
LSAgICAgICAgYm9vbCBoYXZlRGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNpZ25l
ZCBjaGFyKiByb3dCdWZmZXIsIHVuc2lnbmVkIGNoYXIqIHJvd0VuZCwgdW5zaWduZWQgcm93TnVt
YmVyLCB1bnNpZ25lZCByZXBlYXRDb3VudCwgYm9vbCB3cml0ZVRyYW5zcGFyZW50UGl4ZWxzKTsK
LSAgICAgICAgYm9vbCBmcmFtZUNvbXBsZXRlKHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVk
IGZyYW1lRHVyYXRpb24sIEltYWdlRnJhbWU6OkZyYW1lRGlzcG9zYWxNZXRob2QgZGlzcG9zYWxN
ZXRob2QpOwotICAgICAgICB2b2lkIGdpZkNvbXBsZXRlKCk7CisgICAgICAgIGJvb2wgaGF2ZURl
Y29kZWRSb3coY29uc3QgR0lGRnJhbWVDb250ZXh0KiwgdW5zaWduZWQgZnJhbWVJbmRleCwgY29u
c3QgVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiByb3dCdWZmZXIsIHVuc2lnbmVkIHdpZHRoLCB1bnNp
Z25lZCByb3dOdW1iZXIsIHVuc2lnbmVkIHJlcGVhdENvdW50LCBib29sIHdyaXRlVHJhbnNwYXJl
bnRQaXhlbHMpOworICAgICAgICBib29sIGZyYW1lQ29tcGxldGUoY29uc3QgR0lGRnJhbWVDb250
ZXh0KiwgdW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgSW1hZ2VG
cmFtZTo6RnJhbWVEaXNwb3NhbE1ldGhvZCk7CisgICAgICAgIHZvaWQgZnJhbWVEYXRhQ29tcGxl
dGUodW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbik7CisgICAgICAg
IHZvaWQgZ2lmUGFyc2VDb21wbGV0ZSgpOworICAgICAgICB2b2lkIGdpZkRlY29kZUNvbXBsZXRl
KCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICAvLyBJZiB0aGUgcXVlcnkgaXMgR0lGRnVsbFF1
ZXJ5LCBkZWNvZGVzIHRoZSBpbWFnZSB1cCB0byAoYnV0IG5vdApAQCAtNzEsMTMgKzc1LDE2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gQ2FsbGVkIHRvIGluaXRpYWxpemUgdGhl
IGZyYW1lIGJ1ZmZlciB3aXRoIHRoZSBnaXZlbiBpbmRleCwgYmFzZWQgb24KICAgICAgICAgLy8g
dGhlIHByZXZpb3VzIGZyYW1lJ3MgZGlzcG9zYWwgbWV0aG9kLiBSZXR1cm5zIHRydWUgb24gc3Vj
Y2Vzcy4gT24KICAgICAgICAgLy8gZmFpbHVyZSwgdGhpcyB3aWxsIG1hcmsgdGhlIGltYWdlIGFz
IGZhaWxlZC4KLSAgICAgICAgYm9vbCBpbml0RnJhbWVCdWZmZXIodW5zaWduZWQgZnJhbWVJbmRl
eCk7CisgICAgICAgIGJvb2wgaW5pdEZyYW1lQnVmZmVyKGNvbnN0IEdJRkZyYW1lQ29udGV4dCos
IHVuc2lnbmVkIGZyYW1lSW5kZXgpOworCisgICAgICAgIHZvaWQgZXhwYW5kRnJhbWVCdWZmZXJD
YWNoZShzaXplX3QpOwogCi0gICAgICAgIGJvb2wgbV9hbHJlYWR5U2Nhbm5lZFRoaXNEYXRhRm9y
RnJhbWVDb3VudDsKICAgICAgICAgYm9vbCBtX2N1cnJlbnRCdWZmZXJTYXdBbHBoYTsKICAgICAg
ICAgbXV0YWJsZSBpbnQgbV9yZXBldGl0aW9uQ291bnQ7CiAgICAgICAgIE93blB0cjxHSUZJbWFn
ZVJlYWRlcj4gbV9yZWFkZXI7Ci0gICAgICAgIHVuc2lnbmVkIG1fcmVhZE9mZnNldDsKKyAgICAg
ICAgYm9vbCBtX2lzRnJhbWVDb3VudEZpbmFsOworICAgICAgICBzaXplX3QgbV9mcmFtZUNvdW50
OworICAgICAgICBzaXplX3QgbV9sYXN0RGF0YUNvbXBsZXRlRnJhbWVJbmRleDsKICAgICB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAppbmRleCA3
NDE0ZTk4MTg1OTA3YzBmNjg3YjM3YzkzNTA1MzE5MjdmZmI4ODNiLi45ODg5Mzc5ZTNjMTZmYzkx
OTk3YzhkZDk2ZGZmYzgzNjZhNTY3ZjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAKQEAg
LTc5LDYgKzc5LDggQEAgbWFpbGluZyBhZGRyZXNzLgogI2luY2x1ZGUgIkdJRkltYWdlRGVjb2Rl
ci5oIgogI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCiAKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgorCiB1c2luZyBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI7CiAKIC8vIERlZmluZSB0aGUg
TW96aWxsYSBtYWNybyBzZXR1cCBzbyB0aGF0IHdlIGNhbiBsZWF2ZSB0aGUgbWFjcm9zIGFsb25l
LgpAQCAtODcsMTIgKzg5LDYgQEAgdXNpbmcgV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOwogCiAv
KgogICogR0VUTihuLCBzKSByZXF1ZXN0cyBhdCBsZWFzdCAnbicgYnl0ZXMgYXZhaWxhYmxlIGZy
b20gJ3EnLCBhdCBzdGFydCBvZiBzdGF0ZSAncycKLSAqCi0gKiBOb3RlLCB0aGUgaG9sZCB3aWxs
IG5ldmVyIG5lZWQgdG8gYmUgYmlnZ2VyIHRoYW4gMjU2IGJ5dGVzIHRvIGdhdGhlciB1cCBpbiB0
aGUgaG9sZCwKLSAqIGFzIGVhY2ggR0lGIGJsb2NrIChleGNlcHQgY29sb3JtYXBzKSBjYW4gbmV2
ZXIgYmUgYmlnZ2VyIHRoYW4gMjU2IGJ5dGVzLgotICogQ29sb3JtYXBzIGFyZSBkaXJlY3RseSBj
b3BpZWQgaW4gdGhlIHJlc3AuIGdsb2JhbF9jb2xvcm1hcCBvciBkeW5hbWljYWxseSBhbGxvY2F0
ZWQgbG9jYWxfY29sb3JtYXAuCi0gKiBTbyBhIGZpeGVkIGJ1ZmZlciBpbiBHSUZJbWFnZVJlYWRl
ciBpcyBnb29kIGVub3VnaC4KLSAqIFRoaXMgYnVmZmVyIGlzIG9ubHkgbmVlZGVkIHRvIGNvcHkg
bGVmdC1vdmVyIGRhdGEgZnJvbSBvbmUgR2lmV3JpdGUgY2FsbCB0byB0aGUgbmV4dAogICovCiAj
ZGVmaW5lIEdFVE4obixzKSAgICAgICAgICAgICAgICAgICAgXAogICBQUl9CRUdJTl9NQUNSTyAg
ICAgICAgICAgICAgICAgICAgIFwKQEAgLTEwMywxMiArOTksMTEgQEAgdXNpbmcgV2ViQ29yZTo6
R0lGSW1hZ2VEZWNvZGVyOwogLyogR2V0IGEgMTYtYml0IHZhbHVlIHN0b3JlZCBpbiBsaXR0bGUt
ZW5kaWFuIGZvcm1hdCAqLwogI2RlZmluZSBHRVRJTlQxNihwKSAgICgocClbMV08PDh8KHApWzBd
KQogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKgotLy8gU2VuZCB0aGUgZGF0YSB0byB0aGUgZGlz
cGxheSBmcm9udC1lbmQuCi1ib29sIEdJRkltYWdlUmVhZGVyOjpvdXRwdXRfcm93KCkKLXsKLSAg
R0lGRnJhbWVSZWFkZXIqIGdzID0gZnJhbWVfcmVhZGVyOworbmFtZXNwYWNlIFdlYkNvcmUgewog
CisvLyBTdWJtaXQgcm93YnVmIHRvIHRoZSBjbGllbnQgcmVmZXJlbmNlZCBieSBjbGllbnRwdHIu
CitzdGF0aWMgYm9vbCBvdXRwdXRSb3coR0lGRnJhbWVDb250ZXh0KiBncywgVmVjdG9yPHVuc2ln
bmVkIGNoYXI+JiByb3didWYsIHVuc2lnbmVkIHdpZHRoLCBXZWJDb3JlOjpHSUZJbWFnZURlY29k
ZXIqIGNsaWVudHB0cikKK3sKICAgaW50IGRyb3dfc3RhcnQsIGRyb3dfZW5kOwogCiAgIGRyb3df
c3RhcnQgPSBkcm93X2VuZCA9IGdzLT5pcm93OwpAQCAtMTU4LDEzICsxNTMsMTQgQEAgYm9vbCBH
SUZJbWFnZVJlYWRlcjo6b3V0cHV0X3JvdygpCiAgICAgcmV0dXJuIHRydWU7CiAKICAgLy8gQ0FM
TEJBQ0s6IExldCB0aGUgY2xpZW50IGtub3cgd2UgaGF2ZSBkZWNvZGVkIGEgcm93LgotICBpZiAo
Y2xpZW50cHRyICYmIGZyYW1lX3JlYWRlciAmJgotICAgICAgIWNsaWVudHB0ci0+aGF2ZURlY29k
ZWRSb3coaW1hZ2VzX2NvdW50IC0gMSwgZnJhbWVfcmVhZGVyLT5yb3didWYsIGZyYW1lX3JlYWRl
ci0+cm93ZW5kLAorICBpZiAoY2xpZW50cHRyICYmIGdzICYmCisgICAgICAhY2xpZW50cHRyLT5o
YXZlRGVjb2RlZFJvdyhncywgZ3MtPmZyYW1lX2luZGV4LCByb3didWYsIHdpZHRoLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJvd19zdGFydCwgZHJvd19lbmQgLSBkcm93X3N0
YXJ0ICsgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzLT5wcm9ncmVzc2l2
ZV9kaXNwbGF5ICYmIGdzLT5pbnRlcmxhY2VkICYmIGdzLT5pcGFzcyA+IDEpKQogICAgIHJldHVy
biBmYWxzZTsKIAotICBncy0+cm93cCA9IGdzLT5yb3didWY7CisgIC8vIE1vdmUgdG8gdGhlIGJl
Z2lubmluZyBvZiB0ZW1wb3JhcnkgYnVmZmVyLgorICBncy0+cm93cCA9IDA7CiAKICAgaWYgKCFn
cy0+aW50ZXJsYWNlZCkKICAgICBncy0+aXJvdysrOwpAQCAtMjEzLDExICsyMDksMTQgQEAgYm9v
bCBHSUZJbWFnZVJlYWRlcjo6b3V0cHV0X3JvdygpCiAgIHJldHVybiB0cnVlOwogfQogCi0vLyoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKgotLyogUGVyZm9ybSBMZW1wZWwtWml2LVdlbGNoIGRlY29kaW5n
ICovCi1ib29sIEdJRkltYWdlUmVhZGVyOjpkb19sencoY29uc3QgdW5zaWduZWQgY2hhciAqcSkK
Ky8vIFBlcmZvcm0gTGVtcGVsLVppdi1XZWxjaCBkZWNvZGluZy4KKy8vIHEgaXMgdGhlIHBvaW50
ZXIgdG8gdGhlIGZpcnN0IGJ5dGUgdG8gcGVyZm9ybSBMWlcgZGVjb2RpbmcuCisvLyBieXRlc190
b19kZWNvZGUgaXMgdGhlIG51bWJlciBvZiBieXRlcyB0byBkZWNvZGUuCisvLyBsencgaXMgdGhl
IGN1cnJlbnQgTFpXIGRlY29kaW5nIGNvbnRleHQuCisvLyBncyBpcyB0aGUgY3VycmVudCBmcmFt
ZSBkZWNvZGluZyBjb250ZXh0LgorLy8gcm93YnVmIGlzIHRoZSBjdXJyZW50IGRlY29kaW5nIHJv
dy4KK3N0YXRpYyBib29sIGRvTHp3KGNvbnN0IHVuc2lnbmVkIGNoYXIqIHEsIHVuc2lnbmVkIGJ5
dGVzX3RvX2RlY29kZSwgR0lGTFpXQ29udGV4dCogbHp3LCBHSUZGcmFtZUNvbnRleHQqIGdzLCBW
ZWN0b3I8dW5zaWduZWQgY2hhcj4mIHJvd2J1ZiwgV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyKiBj
bGllbnRwdHIpCiB7Ci0gIEdJRkZyYW1lUmVhZGVyKiBncyA9IGZyYW1lX3JlYWRlcjsKICAgaWYg
KCFncykKICAgICByZXR1cm4gdHJ1ZTsKIApAQCAtMjI5LDM4ICsyMjgsMzMgQEAgYm9vbCBHSUZJ
bWFnZVJlYWRlcjo6ZG9fbHp3KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnEpCiAgICAqIHdvbid0IHdv
cnJ5IGFib3V0IHRoZW0gYmVpbmcgYWxpYXNlZC4gIFRoZSBsb2NhbHMgd2lsbCBiZSBob21lZAog
ICAgKiBiYWNrIGludG8gdGhlIEdJRiBkZWNvZGVyIHN0cnVjdHVyZSB3aGVuIHdlIGV4aXQuCiAg
ICAqLwotICBpbnQgYXZhaWwgICAgICAgPSBncy0+YXZhaWw7Ci0gIGludCBiaXRzICAgICAgICA9
IGdzLT5iaXRzOwotICBpbnQgY250ICAgICAgICAgPSBjb3VudDsKLSAgaW50IGNvZGVzaXplICAg
ID0gZ3MtPmNvZGVzaXplOwotICBpbnQgY29kZW1hc2sgICAgPSBncy0+Y29kZW1hc2s7Ci0gIGlu
dCBvbGRjb2RlICAgICA9IGdzLT5vbGRjb2RlOwotICBpbnQgY2xlYXJfY29kZSAgPSBncy0+Y2xl
YXJfY29kZTsKLSAgdW5zaWduZWQgY2hhciBmaXJzdGNoYXIgPSBncy0+Zmlyc3RjaGFyOwotICBp
bnQgZGF0dW0gICAgID0gZ3MtPmRhdHVtOwotCi0gIGlmICghZ3MtPnByZWZpeCkgewotICAgIGdz
LT5wcmVmaXggPSBuZXcgdW5zaWduZWQgc2hvcnRbTUFYX0JJVFNdOwotICAgIG1lbXNldChncy0+
cHJlZml4LCAwLCBNQVhfQklUUyAqIHNpemVvZihzaG9ydCkpOwotICB9Ci0KLSAgdW5zaWduZWQg
c2hvcnQgKnByZWZpeCAgPSBncy0+cHJlZml4OwotICB1bnNpZ25lZCBjaGFyICpzdGFja3AgICA9
IGdzLT5zdGFja3A7Ci0gIHVuc2lnbmVkIGNoYXIgKnN1ZmZpeCAgID0gZ3MtPnN1ZmZpeDsKLSAg
dW5zaWduZWQgY2hhciAqc3RhY2sgICAgPSBncy0+c3RhY2s7Ci0gIHVuc2lnbmVkIGNoYXIgKnJv
d3AgICAgID0gZ3MtPnJvd3A7Ci0gIHVuc2lnbmVkIGNoYXIgKnJvd2VuZCAgID0gZ3MtPnJvd2Vu
ZDsKKyAgaW50IGF2YWlsICAgICAgID0gbHp3LT5hdmFpbDsKKyAgaW50IGJpdHMgICAgICAgID0g
bHp3LT5iaXRzOworICBpbnQgY250ICAgICAgICAgPSBieXRlc190b19kZWNvZGU7CisgIGludCBj
b2Rlc2l6ZSAgICA9IGx6dy0+Y29kZXNpemU7CisgIGludCBjb2RlbWFzayAgICA9IGx6dy0+Y29k
ZW1hc2s7CisgIGludCBvbGRjb2RlICAgICA9IGx6dy0+b2xkY29kZTsKKyAgaW50IGNsZWFyX2Nv
ZGUgID0gbHp3LT5jbGVhcl9jb2RlOworICB1bnNpZ25lZCBjaGFyIGZpcnN0Y2hhciA9IGx6dy0+
Zmlyc3RjaGFyOworICBpbnQgZGF0dW0gICAgICAgPSBsenctPmRhdHVtOworCisgIFZlY3Rvcjx1
bnNpZ25lZCBzaG9ydD4mIHByZWZpeCA9IGx6dy0+cHJlZml4OworICBWZWN0b3I8dW5zaWduZWQg
Y2hhcj4mIHN1ZmZpeCAgPSBsenctPnN1ZmZpeDsKKyAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+JiBz
dGFjayAgID0gbHp3LT5zdGFjazsKKyAgdW5zaWduZWQgc3RhY2twICAgICAgICAgPSBsenctPnN0
YWNrcDsKKyAgdW5zaWduZWQgd2lkdGggICAgICAgICAgPSBncy0+d2lkdGg7CisgIHVuc2lnbmVk
IHJvd3AgICAgICAgICAgID0gZ3MtPnJvd3A7CiAgIHVuc2lnbmVkIHJvd3NfcmVtYWluaW5nID0g
Z3MtPnJvd3NfcmVtYWluaW5nOwogCi0gIGlmIChyb3dwID09IHJvd2VuZCkKKyAgaWYgKHJvd3Ag
PT0gd2lkdGgpCiAgICAgcmV0dXJuIHRydWU7CiAKICNkZWZpbmUgT1VUUFVUX1JPVyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICBQUl9CRUdJTl9N
QUNSTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgIGlmICghb3V0cHV0X3JvdygpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICghb3V0cHV0Um93KGdzLCByb3didWYs
IHdpZHRoLCBjbGllbnRwdHIpKSAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICByZXR1cm4g
ZmFsc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCiAgICAgcm93c19yZW1haW5pbmctLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcm93cCA9IGZyYW1lX3JlYWRlci0+cm93cDsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IHJvd3AgPSBncy0+cm93cDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAogICAgIGlmICghcm93c19yZW1haW5pbmcpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgZ290byBFTkQ7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICBQUl9F
TkRfTUFDUk8KQEAgLTI5Nyw4ICsyOTEsOCBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkb19senco
Y29uc3QgdW5zaWduZWQgY2hhciAqcSkKICAgICAgIH0KIAogICAgICAgaWYgKG9sZGNvZGUgPT0g
LTEpIHsKLSAgICAgICAgKnJvd3ArKyA9IHN1ZmZpeFtjb2RlXTsKLSAgICAgICAgaWYgKHJvd3Ag
PT0gcm93ZW5kKQorICAgICAgICByb3didWZbcm93cCsrXSA9IHN1ZmZpeFtjb2RlXTsKKyAgICAg
ICAgaWYgKHJvd3AgPT0gd2lkdGgpCiAgICAgICAgICAgT1VUUFVUX1JPVzsKIAogICAgICAgICBm
aXJzdGNoYXIgPSBvbGRjb2RlID0gY29kZTsKQEAgLTMwNywxMCArMzAxLDEwIEBAIGJvb2wgR0lG
SW1hZ2VSZWFkZXI6OmRvX2x6dyhjb25zdCB1bnNpZ25lZCBjaGFyICpxKQogCiAgICAgICBpbmNv
ZGUgPSBjb2RlOwogICAgICAgaWYgKGNvZGUgPj0gYXZhaWwpIHsKLSAgICAgICAgKnN0YWNrcCsr
ID0gZmlyc3RjaGFyOworICAgICAgICBzdGFja1tzdGFja3ArK10gPSBmaXJzdGNoYXI7CiAgICAg
ICAgIGNvZGUgPSBvbGRjb2RlOwogCi0gICAgICAgIGlmIChzdGFja3AgPT0gc3RhY2sgKyBNQVhf
QklUUykKKyAgICAgICAgaWYgKHN0YWNrcCA9PSBNQVhfQklUUykKICAgICAgICAgICByZXR1cm4g
Y2xpZW50cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQoKSA6IGZhbHNlOwogICAgICAgfQogCkBA
IC0zMjMsMTQgKzMxNywxNCBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkb19sencoY29uc3QgdW5z
aWduZWQgY2hhciAqcSkKICAgICAgICAgLy8gYWxsb3dpbmcgY29kZSA+PSBhdmFpbCBoZXJlIGxl
dHMgdXMgYmUgbW9yZSB0b2xlcmFudCBvZiBtYWxmb3JtZWQKICAgICAgICAgLy8gZGF0YS4gQXMg
bG9uZyBhcyBjb2RlIDwgTUFYX0JJVFMsIHRoZSBvbmx5IHJpc2sgaXMgYSBnYXJibGVkIGltYWdl
LAogICAgICAgICAvLyB3aGljaCBpcyBubyB3b3JzZSB0aGFuIHJlZnVzaW5nIHRvIGRpc3BsYXkg
aXQuCi0gICAgICAgICpzdGFja3ArKyA9IHN1ZmZpeFtjb2RlXTsKKyAgICAgICAgc3RhY2tbc3Rh
Y2twKytdID0gc3VmZml4W2NvZGVdOwogICAgICAgICBjb2RlID0gcHJlZml4W2NvZGVdOwogCi0g
ICAgICAgIGlmIChzdGFja3AgPT0gc3RhY2sgKyBNQVhfQklUUykKKyAgICAgICAgaWYgKHN0YWNr
cCA9PSBNQVhfQklUUykKICAgICAgICAgICByZXR1cm4gY2xpZW50cHRyID8gY2xpZW50cHRyLT5z
ZXRGYWlsZWQoKSA6IGZhbHNlOwogICAgICAgfQogCi0gICAgICAqc3RhY2twKysgPSBmaXJzdGNo
YXIgPSBzdWZmaXhbY29kZV07CisgICAgICBzdGFja1tzdGFja3ArK10gPSBmaXJzdGNoYXIgPSBz
dWZmaXhbY29kZV07CiAKICAgICAgIC8qIERlZmluZSBhIG5ldyBjb2Rld29yZCBpbiB0aGUgZGlj
dGlvbmFyeS4gKi8KICAgICAgIGlmIChhdmFpbCA8IDQwOTYpIHsKQEAgLTM1MSwxNDAgKzM0NSwx
NDQgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZG9fbHp3KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnEp
CiAKICAgICAgICAgLyogQ29weSB0aGUgZGVjb2RlZCBkYXRhIG91dCB0byB0aGUgc2NhbmxpbmUg
YnVmZmVyLiAqLwogICAgICAgZG8gewotICAgICAgICAqcm93cCsrID0gKi0tc3RhY2twOwotICAg
ICAgICBpZiAocm93cCA9PSByb3dlbmQpIHsKKyAgICAgICAgcm93YnVmW3Jvd3ArK10gPSBzdGFj
a1stLXN0YWNrcF07CisgICAgICAgIGlmIChyb3dwID09IHdpZHRoKSB7CiAgICAgICAgICAgT1VU
UFVUX1JPVzsKICAgICAgICAgfQotICAgICAgfSB3aGlsZSAoc3RhY2twID4gc3RhY2spOworICAg
ICAgfSB3aGlsZSAoc3RhY2twID4gMCk7CiAgICAgfQogICB9CiAKICAgRU5EOgogCiAgIC8qIEhv
bWUgdGhlIGxvY2FsIGNvcGllcyBvZiB0aGUgR0lGIGRlY29kZXIgc3RhdGUgdmFyaWFibGVzICov
Ci0gIGdzLT5hdmFpbCA9IGF2YWlsOwotICBncy0+Yml0cyA9IGJpdHM7Ci0gIGdzLT5jb2Rlc2l6
ZSA9IGNvZGVzaXplOwotICBncy0+Y29kZW1hc2sgPSBjb2RlbWFzazsKLSAgY291bnQgPSBjbnQ7
Ci0gIGdzLT5vbGRjb2RlID0gb2xkY29kZTsKLSAgZ3MtPmZpcnN0Y2hhciA9IGZpcnN0Y2hhcjsK
LSAgZ3MtPmRhdHVtID0gZGF0dW07Ci0gIGdzLT5zdGFja3AgPSBzdGFja3A7CisgIGx6dy0+YXZh
aWwgPSBhdmFpbDsKKyAgbHp3LT5iaXRzID0gYml0czsKKyAgbHp3LT5jb2Rlc2l6ZSA9IGNvZGVz
aXplOworICBsenctPmNvZGVtYXNrID0gY29kZW1hc2s7CisgIGx6dy0+b2xkY29kZSA9IG9sZGNv
ZGU7CisgIGx6dy0+Zmlyc3RjaGFyID0gZmlyc3RjaGFyOworICBsenctPmRhdHVtID0gZGF0dW07
CisgIGx6dy0+c3RhY2twID0gc3RhY2twOwogICBncy0+cm93cCA9IHJvd3A7CiAgIGdzLT5yb3dz
X3JlbWFpbmluZyA9IHJvd3NfcmVtYWluaW5nOwogCiAgIHJldHVybiB0cnVlOwogfQogCitHSUZJ
bWFnZVJlYWRlcjo6R0lGSW1hZ2VSZWFkZXIoR0lGSW1hZ2VEZWNvZGVyKiBjbGllbnQpCisgICAg
OiBjbGllbnRwdHIoY2xpZW50KQorICAgICwgc3RhdGUoZ2lmX3R5cGUpCisgICAgLCBieXRlc190
b19jb25zdW1lKDYpIC8vIEJ5dGVzIHRvIHJlYWQgdGhlIGltYWdlIGlkZW50aWZpZXIgYW5kIHZl
cnNpb24uCisgICAgLCBieXRlc19yZWFkKDApCisgICAgLCBzY3JlZW5fYmdjb2xvcigwKQorICAg
ICwgdmVyc2lvbigwKQorICAgICwgc2NyZWVuX3dpZHRoKDApCisgICAgLCBzY3JlZW5faGVpZ2h0
KDApCisgICAgLCBnbG9iYWxfY29sb3JtYXBfc2l6ZSgwKQorICAgICwgZ2xvYmFsX2NvbG9ybWFw
X3Bvc2l0aW9uKDApCisgICAgLCBpbWFnZXNfZGF0YV9jb21wbGV0ZSgwKQorICAgICwgaW1hZ2Vz
X2NvdW50KDApCisgICAgLCBsb29wX2NvdW50KGNMb29wQ291bnROb3RTZWVuKQorICAgICwgaW1h
Z2VfY29tcGxldGUoZmFsc2UpCit7Cit9CisKK2Jvb2wgR0lGSW1hZ2VSZWFkZXI6OmRlY29kZShH
SUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5IHF1ZXJ5LCBpbnQgaGFsdEF0RnJhbWUpCit7CisgICAg
aWYgKGJ5dGVzX3JlYWQgPiByYXdfZGF0YS0+c2l6ZSgpKQorICAgICAgICByZXR1cm4gY2xpZW50
cHRyLT5zZXRGYWlsZWQoKTsKKworICAgIGlmIChxdWVyeSA9PSBHSUZJbWFnZURlY29kZXI6OkdJ
RkZ1bGxRdWVyeSkgeworICAgICAgICAvLyBEZWNvZGUgcGFyc2VkIGZyYW1lcy4KKyAgICAgICAg
d2hpbGUgKCFwcmV2aW91c19mcmFtZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBHSUZGcmFt
ZUNvbnRleHQqIGZyYW1lID0gcHJldmlvdXNfZnJhbWVzLmZpcnN0KCkuZ2V0KCk7CisgICAgICAg
ICAgICBpZiAoZnJhbWUtPmZyYW1lX2luZGV4ID49IGhhbHRBdEZyYW1lKQorICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICAvLyBUaGVzZSBjYWxscyBhbHJlYWR5IGRv
ZXMgY2xpZW50cHRyLT5zZXRGYWlsZWQoKSBpZiBmYWlscy4KKyAgICAgICAgICAgIGlmICghZGVj
b2RlUHJldmlvdXNMWldCbG9ja3MoZnJhbWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIGlmICghY2xpZW50cHRyLT5mcmFtZUNvbXBsZXRlKGZyYW1lLCBmcmFt
ZS0+ZnJhbWVfaW5kZXgsIGZyYW1lLT5kZWxheV90aW1lLCBmcmFtZS0+ZGlzcG9zYWxfbWV0aG9k
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBwcmV2aW91c19m
cmFtZXMucmVtb3ZlRmlyc3QoKTsKKyAgICAgICAgfQogCi0vKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
LwotLyoKLSAqIHByb2Nlc3MgZGF0YSBhcnJpdmluZyBmcm9tIHRoZSBzdHJlYW0gZm9yIHRoZSBn
aWYgZGVjb2RlcgotICovCisgICAgICAgIC8vIERlY29kZSBwYXJzZWQgYmxvY2tzLgorICAgICAg
ICBpZiAoY3VycmVudF9mcmFtZSAmJiBjdXJyZW50X2ZyYW1lLT5mcmFtZV9pbmRleCA8IGhhbHRB
dEZyYW1lICYmICFkZWNvZGVQcmV2aW91c0xaV0Jsb2NrcyhjdXJyZW50X2ZyYW1lLmdldCgpKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChj
b25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwgCi0gICAgICAgICAgICAgICAg
ICAgICBHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5IHF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFt
ZSkKKyAgICAgICAgaWYgKGltYWdlX2NvbXBsZXRlICYmIHByZXZpb3VzX2ZyYW1lcy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgIGNsaWVudHB0ci0+Z2lmRGVjb2RlQ29tcGxldGUoKTsgLy8gV2hl
biB0aGUgR0lGIGlzIGRvbmUsIHdlIGNhbiBzdG9wLgorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZGVjb2RlKGJ5dGVzX3JlYWQsIHJhd19k
YXRhLT5zaXplKCkgLSBieXRlc19yZWFkLCBxdWVyeSwgaGFsdEF0RnJhbWUpOworfQorCitjb25z
dCB1bnNpZ25lZCBjaGFyKiBHSUZJbWFnZVJlYWRlcjo6Z2xvYmFsQ29sb3JNYXAoKSBjb25zdAor
eworICAgIGlmIChnbG9iYWxfY29sb3JtYXBfcG9zaXRpb24gKyBnbG9iYWxfY29sb3JtYXBfc2l6
ZSAqIDMgPiByYXdfZGF0YS0+c2l6ZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4g
ZGF0YSgpICsgZ2xvYmFsX2NvbG9ybWFwX3Bvc2l0aW9uOworfQorCitjb25zdCB1bnNpZ25lZCBj
aGFyKiBHSUZJbWFnZVJlYWRlcjo6bG9jYWxDb2xvck1hcChjb25zdCBHSUZGcmFtZUNvbnRleHQq
IGZyYW1lKSBjb25zdAogewotICBpZiAoIWxlbikgewotICAgIC8vIE5vIG5ldyBkYXRhIGhhcyBj
b21lIGluIHNpbmNlIHRoZSBsYXN0IGNhbGwsIGp1c3QgaWdub3JlIHRoaXMgY2FsbC4KKyAgICBp
ZiAoZnJhbWUtPmxvY2FsX2NvbG9ybWFwX3Bvc2l0aW9uICsgZnJhbWUtPmxvY2FsX2NvbG9ybWFw
X3NpemUgKiAzID4gcmF3X2RhdGEtPnNpemUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIGRhdGEoKSArIGZyYW1lLT5sb2NhbF9jb2xvcm1hcF9wb3NpdGlvbjsKK30KKworLy8gUHJv
Y2VzcyBkYXRhIGFycml2aW5nIGZyb20gdGhlIHN0cmVhbSBmb3IgdGhlIGdpZiBkZWNvZGVyLgor
Ym9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlKHVuc2lnbmVkIGRhdGFfcG9zaXRpb24sIHVuc2ln
bmVkIGxlbiwgR0lGSW1hZ2VEZWNvZGVyOjpHSUZRdWVyeSBxdWVyeSwgaW50IGhhbHRBdEZyYW1l
KQoreworICAvLyBObyBuZXcgZGF0YSBoYXMgY29tZSBpbiBzaW5jZSB0aGUgbGFzdCBjYWxsLCBq
dXN0IGlnbm9yZSB0aGlzIGNhbGwuCisgIGlmICghbGVuKQogICAgIHJldHVybiB0cnVlOwotICB9
CiAKLSAgY29uc3QgdW5zaWduZWQgY2hhciAqcSA9IGJ1ZjsKLQotICAvLyBBZGQgd2hhdCB3ZSBo
YXZlIHNvIGZhciB0byB0aGUgYmxvY2sKLSAgLy8gSWYgcHJldmlvdXMgY2FsbCB0byBtZSBsZWZ0
IHNvbWV0aGluZyBpbiB0aGUgaG9sZCBmaXJzdCBjb21wbGV0ZSBjdXJyZW50IGJsb2NrCi0gIC8v
IE9yIGlmIHdlIGFyZSBmaWxsaW5nIHRoZSBjb2xvcm1hcHMsIGZpcnN0IGNvbXBsZXRlIHRoZSBj
b2xvcm1hcAotICB1bnNpZ25lZCBjaGFyKiBwID0gMDsKLSAgaWYgKHN0YXRlID09IGdpZl9nbG9i
YWxfY29sb3JtYXApCi0gICAgcCA9IGdsb2JhbF9jb2xvcm1hcDsKLSAgZWxzZSBpZiAoc3RhdGUg
PT0gZ2lmX2ltYWdlX2NvbG9ybWFwKQotICAgIHAgPSBmcmFtZV9yZWFkZXIgPyBmcmFtZV9yZWFk
ZXItPmxvY2FsX2NvbG9ybWFwIDogMDsKLSAgZWxzZSBpZiAoYnl0ZXNfaW5faG9sZCkKLSAgICBw
ID0gaG9sZDsKLSAgZWxzZQotICAgIHAgPSAwOwotCi0gIGlmIChwIHx8IChzdGF0ZSA9PSBnaWZf
Z2xvYmFsX2NvbG9ybWFwKSB8fCAoc3RhdGUgPT0gZ2lmX2ltYWdlX2NvbG9ybWFwKSkgewotICAg
IC8vIEFkZCB3aGF0IHdlIGhhdmUgc29mYXIgdG8gdGhlIGJsb2NrCi0gICAgdW5zaWduZWQgbCA9
IGxlbiA8IGJ5dGVzX3RvX2NvbnN1bWUgPyBsZW4gOiBieXRlc190b19jb25zdW1lOwotICAgIGlm
IChwKQotICAgICAgICBtZW1jcHkocCArIGJ5dGVzX2luX2hvbGQsIGJ1ZiwgbCk7Ci0KLSAgICBp
ZiAobCA8IGJ5dGVzX3RvX2NvbnN1bWUpIHsKLSAgICAgIC8vIE5vdCBlbm91Z2ggaW4gJ2J1Zicg
dG8gY29tcGxldGUgY3VycmVudCBibG9jaywgZ2V0IG1vcmUKLSAgICAgIGJ5dGVzX2luX2hvbGQg
Kz0gbDsKLSAgICAgIGJ5dGVzX3RvX2NvbnN1bWUgLT0gbDsKLSAgICAgIGlmIChjbGllbnRwdHIp
Ci0gICAgICAgIGNsaWVudHB0ci0+ZGVjb2RpbmdIYWx0ZWQoMCk7Ci0gICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIC8vIFJlc2V0IGhvbGQgYnVmZmVyIGNvdW50Ci0gICAgYnl0ZXNfaW5f
aG9sZCA9IDA7Ci0gICAgLy8gUG9pbnQgJ3EnIHRvIGNvbXBsZXRlIGJsb2NrIGluIGhvbGQgKG9y
IGluIGNvbG9ybWFwKQotICAgIHEgPSBwOworICBjb25zdCB1bnNpZ25lZCBjaGFyICpxID0gZGF0
YSgpICsgZGF0YV9wb3NpdGlvbjsKKworICAvLyBJZiB0aGVyZSdzIG5vdCBlbm91Z2ggYnl0ZXMg
Zm9yIHRoaXMgYmxvY2sgdGhlbiByZXR1cm4uCisgIGlmIChsZW4gPCBieXRlc190b19jb25zdW1l
KSB7CisgICAgc2V0UmVtYWluaW5nQnl0ZXMobGVuKTsKKyAgICByZXR1cm4gZmFsc2U7CiAgIH0K
IAogICAvLyBJbnZhcmlhbnQ6Ci0gIC8vICAgICdxJyBpcyBzdGFydCBvZiBjdXJyZW50IHRvIGJl
IHByb2Nlc3NlZCBibG9jayAoaG9sZCwgY29sb3JtYXAgb3IgYnVmKQotICAvLyAgICAnYnl0ZXNf
dG9fY29uc3VtZScgaXMgbnVtYmVyIG9mIGJ5dGVzIHRvIGNvbnN1bWUgZnJvbSAnYnVmJwotICAv
LyAgICAnYnVmJyBwb2ludHMgdG8gdGhlIGJ5dGVzIHRvIGJlIGNvbnN1bWVkIGZyb20gdGhlIGlu
cHV0IGJ1ZmZlcgotICAvLyAgICAnbGVuJyBpcyBudW1iZXIgb2YgYnl0ZXMgbGVmdCBpbiBpbnB1
dCBidWZmZXIgZnJvbSBwb3NpdGlvbiAnYnVmJy4KLSAgLy8gICAgQXQgZW50cmFuY2Ugb2YgdGhl
IGZvciBsb29wIHdpbGwgJ2J1Zicgd2lsbCBiZSBtb3ZlZCAnYnl0ZXNfdG9fY29uc3VtZScKLSAg
Ly8gICAgdG8gcG9pbnQgdG8gbmV4dCBidWZmZXIsICdsZW4nIGlzIGFkanVzdGVkIGFjY29yZGlu
Z2x5LgotICAvLyAgICBTbyB0aGF0IG5leHQgcm91bmQgaW4gZm9yIGxvb3AsIHEgZ2V0cyBwb2lu
dGVkIHRvIHRoZSBuZXh0IGJ1ZmZlci4KLQotICBmb3IgKDtsZW4gPj0gYnl0ZXNfdG9fY29uc3Vt
ZTsgcT1idWYpIHsKKyAgLy8gICAgJ3EnIGlzIHN0YXJ0IG9mIGN1cnJlbnQgdG8gYmUgcHJvY2Vz
c2VkIGJsb2NrLgorICAvLyAgICAnYnl0ZXNfdG9fY29uc3VtZScgaXMgbnVtYmVyIG9mIGJ5dGVz
IHRvIGNvbnN1bWUgZnJvbSAnZGF0YScKKyAgLy8gICAgJ2RhdGFfcG9zaXRpb24nIHBvaW50cyB0
byB0aGUgZmlyc3QgYnl0ZSB0byBiZSBjb25zdW1lZCBmcm9tICdkYXRhJworICAvLyAgICAnbGVu
JyBpcyBudW1iZXIgb2YgYnl0ZXMgbGVmdCBpbiBpbnB1dCBidWZmZXIgZnJvbSBwb3NpdGlvbiAn
ZGF0YV9wb3NpdGlvbicuCisgIC8vICAgIEF0IGVudHJhbmNlIG9mIHRoZSBmb3IgbG9vcCAnZGF0
YV9wb3NpdGlvbicgd2lsbCBiZSBpbmNyZW1lbnRlZCAnYnl0ZXNfdG9fY29uc3VtZScKKyAgLy8g
ICAgdG8gcG9pbnQgdG8gbmV4dCBibG9jaywgJ2xlbicgaXMgYWRqdXN0ZWQgYWNjb3JkaW5nbHku
CisgIC8vICAgIFNvIHRoYXQgbmV4dCByb3VuZCBpbiBmb3IgbG9vcCwgcSBnZXRzIHBvaW50ZWQg
dG8gdGhlIG5leHQgYmxvY2suCisKKyAgZm9yICg7bGVuID49IGJ5dGVzX3RvX2NvbnN1bWU7IHEg
PSBkYXRhKCkgKyBkYXRhX3Bvc2l0aW9uKSB7CiAgICAgLy8gRWF0IHRoZSBjdXJyZW50IGJsb2Nr
IGZyb20gdGhlIGJ1ZmZlciwgcSBrZWVwcyBwb2ludGVkIGF0IGN1cnJlbnQgYmxvY2sKLSAgICBi
dWYgKz0gYnl0ZXNfdG9fY29uc3VtZTsKKyAgICBkYXRhX3Bvc2l0aW9uICs9IGJ5dGVzX3RvX2Nv
bnN1bWU7CiAgICAgbGVuIC09IGJ5dGVzX3RvX2NvbnN1bWU7CiAKICAgICBzd2l0Y2ggKHN0YXRl
KQogICAgIHsKICAgICBjYXNlIGdpZl9senc6Ci0gICAgICBpZiAoIWRvX2x6dyhxKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBJZiBkb19sencoKSBlbmNvdW50ZXJlZCBhbiBlcnJvciwgaXQg
aGFzIGFscmVhZHkgY2FsbGVkCi0gICAgICAgICAgICAgICAgICAgICAgLy8gY2xpZW50cHRyLT5z
ZXRGYWlsZWQoKS4KKyAgICB7CisgICAgICB1bnNpZ25lZCBibG9ja19wb3NpdGlvbiA9IGRhdGFf
cG9zaXRpb24gLSBieXRlc190b19jb25zdW1lOworICAgICAgaWYgKHF1ZXJ5ID09IEdJRkltYWdl
RGVjb2Rlcjo6R0lGRnVsbFF1ZXJ5KSB7CisgICAgICAgIGlmICghZGVjb2RlTFpXQmxvY2soYmxv
Y2tfcG9zaXRpb24sIGJ5dGVzX3RvX2NvbnN1bWUsIGN1cnJlbnRfZnJhbWUuZ2V0KCkpKQorICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGRlZmVyTFpXQmxv
Y2soYmxvY2tfcG9zaXRpb24sIGJ5dGVzX3RvX2NvbnN1bWUsIGN1cnJlbnRfZnJhbWUuZ2V0KCkp
OworICAgICAgfQogICAgICAgR0VUTigxLCBnaWZfc3ViX2Jsb2NrKTsKICAgICAgIGJyZWFrOwor
ICAgIH0KIAogICAgIGNhc2UgZ2lmX2x6d19zdGFydDoKICAgICB7Ci0gICAgICAvKiBJbml0aWFs
aXplIExaVyBwYXJzZXIvZGVjb2RlciAqLwotICAgICAgaW50IGRhdGFzaXplID0gKnE7Ci0gICAg
ICAvLyBTaW5jZSB3ZSB1c2UgYSBjb2Rlc2l6ZSBvZiAxIG1vcmUgdGhhbiB0aGUgZGF0YXNpemUs
IHdlIG5lZWQgdG8gZW5zdXJlCi0gICAgICAvLyB0aGF0IG91ciBkYXRhc2l6ZSBpcyBzdHJpY3Rs
eSBsZXNzIHRoYW4gdGhlIE1BWF9MWldfQklUUyB2YWx1ZSAoMTIpLgotICAgICAgLy8gVGhpcyBz
ZXRzIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGNvZGVtYXNrIGNvcnJlY3RseSBhdCA0MDk1LgotICAg
ICAgaWYgKGRhdGFzaXplID49IE1BWF9MWldfQklUUykKLSAgICAgICAgcmV0dXJuIGNsaWVudHB0
ciA/IGNsaWVudHB0ci0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKLSAgICAgIGludCBjbGVhcl9jb2Rl
ID0gMSA8PCBkYXRhc2l6ZTsKLSAgICAgIGlmIChjbGVhcl9jb2RlID49IE1BWF9CSVRTKQotICAg
ICAgICByZXR1cm4gY2xpZW50cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQoKSA6IGZhbHNlOwot
Ci0gICAgICBpZiAoZnJhbWVfcmVhZGVyKSB7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+ZGF0YXNp
emUgPSBkYXRhc2l6ZTsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT5jbGVhcl9jb2RlID0gY2xlYXJf
Y29kZTsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT5hdmFpbCA9IGZyYW1lX3JlYWRlci0+Y2xlYXJf
Y29kZSArIDI7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+b2xkY29kZSA9IC0xOwotICAgICAgICBm
cmFtZV9yZWFkZXItPmNvZGVzaXplID0gZnJhbWVfcmVhZGVyLT5kYXRhc2l6ZSArIDE7Ci0gICAg
ICAgIGZyYW1lX3JlYWRlci0+Y29kZW1hc2sgPSAoMSA8PCBmcmFtZV9yZWFkZXItPmNvZGVzaXpl
KSAtIDE7Ci0KLSAgICAgICAgZnJhbWVfcmVhZGVyLT5kYXR1bSA9IGZyYW1lX3JlYWRlci0+Yml0
cyA9IDA7Ci0KLSAgICAgICAgLyogaW5pdCB0aGUgdGFibGVzICovCi0gICAgICAgIGlmICghZnJh
bWVfcmVhZGVyLT5zdWZmaXgpCi0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5zdWZmaXggPSBuZXcg
dW5zaWduZWQgY2hhcltNQVhfQklUU107Ci0gICAgICAgIC8vIENsZWFyaW5nIHRoZSB3aG9sZSBz
dWZmaXggdGFibGUgbGV0cyB1cyBiZSBtb3JlIHRvbGVyYW50IG9mIGJhZCBkYXRhLgotICAgICAg
ICBtZW1zZXQoZnJhbWVfcmVhZGVyLT5zdWZmaXgsIDAsIE1BWF9CSVRTKTsKLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBmcmFtZV9yZWFkZXItPmNsZWFyX2NvZGU7IGkrKykKLSAgICAgICAg
ICBmcmFtZV9yZWFkZXItPnN1ZmZpeFtpXSA9IGk7Ci0KLSAgICAgICAgaWYgKCFmcmFtZV9yZWFk
ZXItPnN0YWNrKQotICAgICAgICAgIGZyYW1lX3JlYWRlci0+c3RhY2sgPSBuZXcgdW5zaWduZWQg
Y2hhcltNQVhfQklUU107Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+c3RhY2twID0gZnJhbWVfcmVh
ZGVyLT5zdGFjazsKLSAgICAgIH0KLQorICAgICAgLy8gT25seSBzYXZlIHRoZSBkYXRhc2l6ZSwg
TFpXIGNvbnRleHQgaXMgaW5pdGlhbGl6ZWQgd2hlbiBkZWNvZGUgc3RhcnRzLgorICAgICAgY3Vy
cmVudF9mcmFtZS0+ZGF0YXNpemUgPSAqcTsKICAgICAgIEdFVE4oMSwgZ2lmX3N1Yl9ibG9jayk7
CiAgICAgfQogICAgIGJyZWFrOwpAQCAtNDk3LDcgKzQ5NSw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFk
ZXI6OnJlYWQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sCiAgICAgICBl
bHNlIGlmICghc3RybmNtcCgoY2hhciopcSwgIkdJRjg3YSIsIDYpKQogICAgICAgICB2ZXJzaW9u
ID0gODc7CiAgICAgICBlbHNlCi0gICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRwdHIt
PnNldEZhaWxlZCgpIDogZmFsc2U7CisgICAgICAgIHJldHVybiByZXBvcnRQYXJzZUVycm9yKHF1
ZXJ5KTsKICAgICAgIEdFVE4oNywgZ2lmX2dsb2JhbF9oZWFkZXIpOwogICAgIH0KICAgICBicmVh
azsKQEAgLTUyMiwyMyArNTIwLDE3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3Qg
dW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sCiAgICAgICBnbG9iYWxfY29sb3JtYXBf
c2l6ZSA9IDI8PChxWzRdJjB4MDcpOwogCiAgICAgICBpZiAoKHFbNF0gJiAweDgwKSAmJiBnbG9i
YWxfY29sb3JtYXBfc2l6ZSA+IDApIHsgLyogZ2xvYmFsIG1hcCAqLworICAgICAgICBnbG9iYWxf
Y29sb3JtYXBfcG9zaXRpb24gPSBkYXRhX3Bvc2l0aW9uOworCiAgICAgICAgIC8vIEdldCB0aGUg
Z2xvYmFsIGNvbG9ybWFwCiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNpemUgPSAzKmdsb2JhbF9j
b2xvcm1hcF9zaXplOwotICAgICAgICAKLSAgICAgICAgLy8gTWFsbG9jIHRoZSBjb2xvciBtYXAs
IGJ1dCBvbmx5IGlmIHdlJ3JlIG5vdCBqdXN0IGNvdW50aW5nIGZyYW1lcy4KLSAgICAgICAgaWYg
KHF1ZXJ5ICE9IEdJRkltYWdlRGVjb2Rlcjo6R0lGRnJhbWVDb3VudFF1ZXJ5KQotICAgICAgICAg
IGdsb2JhbF9jb2xvcm1hcCA9IG5ldyB1bnNpZ25lZCBjaGFyW3NpemVdOwotCiAgICAgICAgIGlm
IChsZW4gPCBzaXplKSB7Ci0gICAgICAgICAgLy8gVXNlICdob2xkJyBwYXR0ZXJuIHRvIGdldCB0
aGUgZ2xvYmFsIGNvbG9ybWFwCisgICAgICAgICAgLy8gTm90IGVub3VnaCBieXRlcyB0byByZWFk
IHRoZSBlbnRpcmUgZ2xvYmFsIGNvbG9ybWFwLgogICAgICAgICAgIEdFVE4oc2l6ZSwgZ2lmX2ds
b2JhbF9jb2xvcm1hcCk7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIC8vIENvcHkgZXZlcnl0aGluZyBhbmQgZ28gZGlyZWN0bHkgdG8gZ2lmX2ltYWdlX3N0
YXJ0LgotICAgICAgICBpZiAoZ2xvYmFsX2NvbG9ybWFwKQotICAgICAgICAgICAgbWVtY3B5KGds
b2JhbF9jb2xvcm1hcCwgYnVmLCBzaXplKTsKLSAgICAgICAgYnVmICs9IHNpemU7CisKKyAgICAg
ICAgZGF0YV9wb3NpdGlvbiArPSBzaXplOwogICAgICAgICBsZW4gLT0gc2l6ZTsKICAgICAgIH0K
IApAQCAtNTczLDcgKzU2NSw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5z
aWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sCiAgICAgICAgKiB1bnRpbCB3ZSBmaW5kIGFu
IGltYWdlIHNlcGFyYXRvciwgYnV0IEdJRjg5YSBzYXlzIHN1Y2gKICAgICAgICAqIGEgZmlsZSBp
cyBjb3JydXB0LiBXZSBmb2xsb3cgR0lGODlhIGFuZCBiYWlsIG91dC4gKi8KICAgICAgIGlmICgq
cSAhPSAnLCcpCi0gICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRwdHItPnNldEZhaWxl
ZCgpIDogZmFsc2U7CisgICAgICAgIHJldHVybiByZXBvcnRQYXJzZUVycm9yKHF1ZXJ5KTsKIAog
ICAgICAgR0VUTig5LCBnaWZfaW1hZ2VfaGVhZGVyKTsKICAgICB9CkBAIC01ODEsNyArNTczLDcg
QEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVu
c2lnbmVkIGxlbiwKIAogICAgIGNhc2UgZ2lmX2V4dGVuc2lvbjoKICAgICB7Ci0gICAgICBjb3Vu
dCA9IHFbMV07CisgICAgICB1bnNpZ25lZCBjb3VudCA9IHFbMV07CiAgICAgICBnc3RhdGUgZXMg
PSBnaWZfc2tpcF9ibG9jazsKIAogICAgICAgLy8gVGhlIEdJRiBzcGVjIG1hbmRhdGVzIGxlbmd0
aHMgZm9yIHRocmVlIG9mIHRoZSBleHRlbnNpb25zIGJlbG93LgpAQCAtNjAzLDE3ICs1OTUsMTcg
QEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVu
c2lnbmVkIGxlbiwKICAgICAgIHsKICAgICAgIGNhc2UgMHhmOToKICAgICAgICAgZXMgPSBnaWZf
Y29udHJvbF9leHRlbnNpb247Ci0gICAgICAgIGNvdW50ID0gc3RkOjptYXgoY291bnQsIDQpOwor
ICAgICAgICBjb3VudCA9IHN0ZDo6bWF4KGNvdW50LCA0dSk7CiAgICAgICAgIGJyZWFrOwogCiAg
ICAgICBjYXNlIDB4MDE6CiAgICAgICAgIC8vIGlnbm9yaW5nIHBsYWluIHRleHQgZXh0ZW5zaW9u
Ci0gICAgICAgIGNvdW50ID0gc3RkOjptYXgoY291bnQsIDEyKTsKKyAgICAgICAgY291bnQgPSBz
dGQ6Om1heChjb3VudCwgMTJ1KTsKICAgICAgICAgYnJlYWs7CiAKICAgICAgIGNhc2UgMHhmZjoK
ICAgICAgICAgZXMgPSBnaWZfYXBwbGljYXRpb25fZXh0ZW5zaW9uOwotICAgICAgICBjb3VudCA9
IHN0ZDo6bWF4KGNvdW50LCAxMSk7CisgICAgICAgIGNvdW50ID0gc3RkOjptYXgoY291bnQsIDEx
dSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgICBjYXNlIDB4ZmU6CkBAIC02NDEsMjkgKzYzMywy
NSBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwg
dW5zaWduZWQgbGVuLAogCiAgICAgY2FzZSBnaWZfY29udHJvbF9leHRlbnNpb246CiAgICAgewot
ICAgICAgaWYgKHF1ZXJ5ICE9IEdJRkltYWdlRGVjb2Rlcjo6R0lGRnJhbWVDb3VudFF1ZXJ5KSB7
Ci0gICAgICAgICAgaWYgKCFmcmFtZV9yZWFkZXIpCi0gICAgICAgICAgICBmcmFtZV9yZWFkZXIg
PSBuZXcgR0lGRnJhbWVSZWFkZXIoKTsKLSAgICAgIH0KKyAgICAgIGlmICghY3VycmVudF9mcmFt
ZSkKKyAgICAgICAgY3VycmVudF9mcmFtZSA9IGFkb3B0UHRyKG5ldyBHSUZGcmFtZUNvbnRleHQo
aW1hZ2VzX2RhdGFfY29tcGxldGUpKTsKIAotICAgICAgaWYgKGZyYW1lX3JlYWRlcikgewotICAg
ICAgICBpZiAoKnEgJiAweDEpIHsKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPnRwaXhlbCA9IHFb
M107Ci0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5pc190cmFuc3BhcmVudCA9IHRydWU7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5pc190cmFuc3BhcmVudCA9IGZh
bHNlOwotICAgICAgICAgIC8vIGlnbm9yaW5nIGdmeCBjb250cm9sIGV4dGVuc2lvbgotICAgICAg
ICB9Ci0gICAgICAgIC8vIE5PVEU6IFRoaXMgcmVsaWVzIG9uIHRoZSB2YWx1ZXMgaW4gdGhlIEZy
YW1lRGlzcG9zYWxNZXRob2QgZW51bQotICAgICAgICAvLyBtYXRjaGluZyB0aG9zZSBpbiB0aGUg
R0lGIHNwZWMhCi0gICAgICAgIGludCBkaXNwb3NhbF9tZXRob2QgPSAoKCpxKSA+PiAyKSAmIDB4
NzsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT5kaXNwb3NhbF9tZXRob2QgPSAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6RnJhbWVEaXNwb3NhbE1ldGhvZClkaXNwb3NhbF9tZXRob2Q7Ci0gICAgICAgIC8v
IFNvbWUgc3BlY3Mgc2F5IDNyZCBiaXQgKHZhbHVlIDQpLCBvdGhlciBzcGVjcyBzYXkgdmFsdWUg
MwotICAgICAgICAvLyBMZXQncyBjaG9vc2UgMyAodGhlIG1vcmUgcG9wdWxhcikKLSAgICAgICAg
aWYgKGRpc3Bvc2FsX21ldGhvZCA9PSA0KQotICAgICAgICAgIGZyYW1lX3JlYWRlci0+ZGlzcG9z
YWxfbWV0aG9kID0gV2ViQ29yZTo6SW1hZ2VGcmFtZTo6RGlzcG9zZU92ZXJ3cml0ZVByZXZpb3Vz
OwotICAgICAgICBmcmFtZV9yZWFkZXItPmRlbGF5X3RpbWUgPSBHRVRJTlQxNihxICsgMSkgKiAx
MDsKKyAgICAgIGlmICgqcSAmIDB4MSkgeworICAgICAgICBjdXJyZW50X2ZyYW1lLT50cGl4ZWwg
PSBxWzNdOworICAgICAgICBjdXJyZW50X2ZyYW1lLT5pc190cmFuc3BhcmVudCA9IHRydWU7Cisg
ICAgICB9IGVsc2UgeworICAgICAgICBjdXJyZW50X2ZyYW1lLT5pc190cmFuc3BhcmVudCA9IGZh
bHNlOworICAgICAgICAvLyBpZ25vcmluZyBnZnggY29udHJvbCBleHRlbnNpb24KICAgICAgIH0K
KyAgICAgIC8vIE5PVEU6IFRoaXMgcmVsaWVzIG9uIHRoZSB2YWx1ZXMgaW4gdGhlIEZyYW1lRGlz
cG9zYWxNZXRob2QgZW51bQorICAgICAgLy8gbWF0Y2hpbmcgdGhvc2UgaW4gdGhlIEdJRiBzcGVj
IQorICAgICAgaW50IGRpc3Bvc2FsX21ldGhvZCA9ICgoKnEpID4+IDIpICYgMHg3OworICAgICAg
Y3VycmVudF9mcmFtZS0+ZGlzcG9zYWxfbWV0aG9kID0gKEltYWdlRnJhbWU6OkZyYW1lRGlzcG9z
YWxNZXRob2QpZGlzcG9zYWxfbWV0aG9kOworICAgICAgLy8gU29tZSBzcGVjcyBzYXkgM3JkIGJp
dCAodmFsdWUgNCksIG90aGVyIHNwZWNzIHNheSB2YWx1ZSAzCisgICAgICAvLyBMZXQncyBjaG9v
c2UgMyAodGhlIG1vcmUgcG9wdWxhcikKKyAgICAgIGlmIChkaXNwb3NhbF9tZXRob2QgPT0gNCkK
KyAgICAgICAgY3VycmVudF9mcmFtZS0+ZGlzcG9zYWxfbWV0aG9kID0gSW1hZ2VGcmFtZTo6RGlz
cG9zZU92ZXJ3cml0ZVByZXZpb3VzOworICAgICAgY3VycmVudF9mcmFtZS0+ZGVsYXlfdGltZSA9
IEdFVElOVDE2KHEgKyAxKSAqIDEwOwogICAgICAgR0VUTigxLCBnaWZfY29uc3VtZV9ibG9jayk7
CiAgICAgfQogICAgIGJyZWFrOwpAQCAtNzIyLDcgKzcxMCw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFk
ZXI6OnJlYWQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sCiAgICAgICAg
IEdFVE4oMSwgZ2lmX25ldHNjYXBlX2V4dGVuc2lvbl9ibG9jayk7CiAgICAgICB9IGVsc2Ugewog
ICAgICAgICAvLyAwLDMtNyBhcmUgeWV0IHRvIGJlIGRlZmluZWQgbmV0c2NhcGUgZXh0ZW5zaW9u
IGNvZGVzCi0gICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgp
IDogZmFsc2U7CisgICAgICAgIHJldHVybiByZXBvcnRQYXJzZUVycm9yKHF1ZXJ5KTsKICAgICAg
IH0KIAogICAgICAgYnJlYWs7CkBAIC03NDQsNyArNzMyLDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRl
cjo6cmVhZChjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwKICAgICAgICAq
IHNpemUgaGFzIHdlaXJkIHdpZHRoIG9yIGhlaWdodC4gIFdlIGFzc3VtZSB0aGF0IEdJRjg3YQog
ICAgICAgICogZmlsZXMgZG9uJ3QgY29udGFpbiBhbmltYXRpb25zLgogICAgICAgICovCi0gICAg
ICBpZiAoKGltYWdlc19kZWNvZGVkID09IDApICYmCisgICAgICBpZiAoKGltYWdlc19kYXRhX2Nv
bXBsZXRlID09IDApICYmCiAgICAgICAgICAgKChzY3JlZW5faGVpZ2h0IDwgaGVpZ2h0KSB8fCAo
c2NyZWVuX3dpZHRoIDwgd2lkdGgpIHx8CiAgICAgICAgICAgICh2ZXJzaW9uID09IDg3KSkpCiAg
ICAgICB7CkBAIC03NjQsMTA4ICs3NTIsODggQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChj
b25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwKICAgICAgICAgaGVpZ2h0ID0g
c2NyZWVuX2hlaWdodDsKICAgICAgICAgd2lkdGggPSBzY3JlZW5fd2lkdGg7CiAgICAgICAgIGlm
ICghaGVpZ2h0IHx8ICF3aWR0aCkKLSAgICAgICAgICByZXR1cm4gY2xpZW50cHRyID8gY2xpZW50
cHRyLT5zZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAgICAgIHJldHVybiByZXBvcnRQYXJzZUVy
cm9yKHF1ZXJ5KTsKICAgICAgIH0KIAotICAgICAgaWYgKHF1ZXJ5ID09IEdJRkltYWdlRGVjb2Rl
cjo6R0lGU2l6ZVF1ZXJ5IHx8IGhhbHRBdEZyYW1lID09IGltYWdlc19kZWNvZGVkKSB7CisgICAg
ICBpZiAocXVlcnkgPT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZTaXplUXVlcnkgfHwgaGFsdEF0RnJh
bWUgPT0gaW1hZ2VzX2RhdGFfY29tcGxldGUpIHsKICAgICAgICAgLy8gVGhlIGRlY29kZXIgbmVl
ZHMgdG8gc3RvcC4gIEhhbmQgYmFjayB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlIGNvbnN1bWVkIGZy
b20KICAgICAgICAgLy8gYnVmZmVyIG1pbnVzIDkgKHRoZSBhbW91bnQgd2UgY29uc3VtZWQgdG8g
cmVhZCB0aGUgaGVhZGVyKS4KLSAgICAgICAgaWYgKGNsaWVudHB0cikKLSAgICAgICAgICAgIGNs
aWVudHB0ci0+ZGVjb2RpbmdIYWx0ZWQobGVuICsgOSk7CisgICAgICAgIHNldFJlbWFpbmluZ0J5
dGVzKGxlbiArIDkpOwogICAgICAgICBHRVROKDksIGdpZl9pbWFnZV9oZWFkZXIpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgIH0KLSAgICAgIAotICAgICAgaW1hZ2VzX2NvdW50ID0gaW1h
Z2VzX2RlY29kZWQgKyAxOwotCi0gICAgICBpZiAocXVlcnkgPT0gR0lGSW1hZ2VEZWNvZGVyOjpH
SUZGdWxsUXVlcnkgJiYgIWZyYW1lX3JlYWRlcikKLSAgICAgICAgZnJhbWVfcmVhZGVyID0gbmV3
IEdJRkZyYW1lUmVhZGVyKCk7Ci0KLSAgICAgIGlmIChmcmFtZV9yZWFkZXIpIHsKLSAgICAgICAg
ZnJhbWVfcmVhZGVyLT54X29mZnNldCA9IHhfb2Zmc2V0OwotICAgICAgICBmcmFtZV9yZWFkZXIt
Pnlfb2Zmc2V0ID0geV9vZmZzZXQ7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+aGVpZ2h0ID0gaGVp
Z2h0OwotICAgICAgICBmcmFtZV9yZWFkZXItPndpZHRoID0gd2lkdGg7Ci0KLSAgICAgICAgLyog
VGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgdGFrZW4gaWYgdGhpcyBpcyB0aGUgZmlyc3QgaW1hZ2Ug
Ki8KLSAgICAgICAgLyogYmVpbmcgZGVjb2RlZC4gSWYgYW55IG9mIHRoZSBsYXRlciBpbWFnZXMg
YXJlIGxhcmdlciAgICAgKi8KLSAgICAgICAgLyogdGhhbiB0aGUgc2NyZWVuIHNpemUsIHdlIG5l
ZWQgdG8gcmVhbGxvY2F0ZSBidWZmZXJzLiAgICAgKi8KLSAgICAgICAgaWYgKHNjcmVlbl93aWR0
aCA8IHdpZHRoKSB7Ci0gICAgICAgICAgLyogWFhYIERldmlhbnQhICovCi0KLSAgICAgICAgICBk
ZWxldGUgW11mcmFtZV9yZWFkZXItPnJvd2J1ZjsKLSAgICAgICAgICBzY3JlZW5fd2lkdGggPSB3
aWR0aDsKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPnJvd2J1ZiA9IG5ldyB1bnNpZ25lZCBjaGFy
W3NjcmVlbl93aWR0aF07Ci0gICAgICAgIH0gZWxzZSBpZiAoIWZyYW1lX3JlYWRlci0+cm93YnVm
KSB7Ci0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5yb3didWYgPSBuZXcgdW5zaWduZWQgY2hhcltz
Y3JlZW5fd2lkdGhdOwotICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFmcmFtZV9yZWFkZXItPnJv
d2J1ZikKLSAgICAgICAgICByZXR1cm4gY2xpZW50cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQo
KSA6IGZhbHNlOwotICAgICAgICBpZiAoc2NyZWVuX2hlaWdodCA8IGhlaWdodCkKLSAgICAgICAg
ICBzY3JlZW5faGVpZ2h0ID0gaGVpZ2h0OworICAgICAgLy8gRm91bmQgYSBuZXcgZnJhbWUgaGVh
ZGVyIHNvIGluY3JlbWVudCBpbWFnZXMgY291bnQuCisgICAgICBpbWFnZXNfY291bnQgPSBpbWFn
ZXNfZGF0YV9jb21wbGV0ZSArIDE7CiAKLSAgICAgICAgaWYgKHFbOF0gJiAweDQwKSB7Ci0gICAg
ICAgICAgZnJhbWVfcmVhZGVyLT5pbnRlcmxhY2VkID0gdHJ1ZTsKLSAgICAgICAgICBmcmFtZV9y
ZWFkZXItPmlwYXNzID0gMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBmcmFtZV9yZWFk
ZXItPmludGVybGFjZWQgPSBmYWxzZTsKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPmlwYXNzID0g
MDsKLSAgICAgICAgfQorICAgICAgaWYgKCFjdXJyZW50X2ZyYW1lKQorICAgICAgICBjdXJyZW50
X2ZyYW1lID0gYWRvcHRQdHIobmV3IEdJRkZyYW1lQ29udGV4dChpbWFnZXNfZGF0YV9jb21wbGV0
ZSkpOwogCi0gICAgICAgIGlmIChpbWFnZXNfZGVjb2RlZCA9PSAwKSB7Ci0gICAgICAgICAgZnJh
bWVfcmVhZGVyLT5wcm9ncmVzc2l2ZV9kaXNwbGF5ID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAvKiBPdmVybGF5aW5nIGludGVybGFjZWQsIHRyYW5zcGFyZW50IEdJRnMgb3Zl
cgotICAgICAgICAgICAgIGV4aXN0aW5nIGltYWdlIGRhdGEgdXNpbmcgdGhlIEhhZWJlcmxpIGRp
c3BsYXkgaGFjawotICAgICAgICAgICAgIHJlcXVpcmVzIHNhdmluZyB0aGUgdW5kZXJseWluZyBp
bWFnZSBpbiBvcmRlciB0bwotICAgICAgICAgICAgIGF2b2lkIGphZ2dpZXMgYXQgdGhlIHRyYW5z
cGFyZW5jeSBlZGdlcy4gIFdlIGFyZQotICAgICAgICAgICAgIHVucHJlcGFyZWQgdG8gZGVhbCB3
aXRoIHRoYXQsIHNvIGRvbid0IGRpc3BsYXkgc3VjaAotICAgICAgICAgICAgIGltYWdlcyBwcm9n
cmVzc2l2ZWx5ICovCi0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5wcm9ncmVzc2l2ZV9kaXNwbGF5
ID0gZmFsc2U7Ci0gICAgICAgIH0KKyAgICAgIGN1cnJlbnRfZnJhbWUtPnhfb2Zmc2V0ID0geF9v
ZmZzZXQ7CisgICAgICBjdXJyZW50X2ZyYW1lLT55X29mZnNldCA9IHlfb2Zmc2V0OworICAgICAg
Y3VycmVudF9mcmFtZS0+aGVpZ2h0ID0gaGVpZ2h0OworICAgICAgY3VycmVudF9mcmFtZS0+d2lk
dGggPSB3aWR0aDsKKworICAgICAgLyogVGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgdGFrZW4gaWYg
dGhpcyBpcyB0aGUgZmlyc3QgaW1hZ2UgKi8KKyAgICAgIC8qIGJlaW5nIGRlY29kZWQuIElmIGFu
eSBvZiB0aGUgbGF0ZXIgaW1hZ2VzIGFyZSBsYXJnZXIgICAgICovCisgICAgICAvKiB0aGFuIHRo
ZSBzY3JlZW4gc2l6ZSwgd2UgbmVlZCB0byByZWFsbG9jYXRlIGJ1ZmZlcnMuICAgICAqLworICAg
ICAgaWYgKHNjcmVlbl93aWR0aCA8IHdpZHRoKSB7CisgICAgICAgIC8qIFhYWCBEZXZpYW50ISAq
LworICAgICAgICBzY3JlZW5fd2lkdGggPSB3aWR0aDsKKyAgICAgIH0KKyAgICAgIHJvd2J1Zi5y
ZXNpemUoc2NyZWVuX3dpZHRoKTsKKworICAgICAgaWYgKHNjcmVlbl9oZWlnaHQgPCBoZWlnaHQp
CisgICAgICAgIHNjcmVlbl9oZWlnaHQgPSBoZWlnaHQ7CiAKLSAgICAgICAgLyogQ2xlYXIgc3Rh
dGUgZnJvbSBsYXN0IGltYWdlICovCi0gICAgICAgIGZyYW1lX3JlYWRlci0+aXJvdyA9IDA7Ci0g
ICAgICAgIGZyYW1lX3JlYWRlci0+cm93c19yZW1haW5pbmcgPSBmcmFtZV9yZWFkZXItPmhlaWdo
dDsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT5yb3dlbmQgPSBmcmFtZV9yZWFkZXItPnJvd2J1ZiAr
IGZyYW1lX3JlYWRlci0+d2lkdGg7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+cm93cCA9IGZyYW1l
X3JlYWRlci0+cm93YnVmOworICAgICAgaWYgKHFbOF0gJiAweDQwKSB7CisgICAgICAgIGN1cnJl
bnRfZnJhbWUtPmludGVybGFjZWQgPSB0cnVlOworICAgICAgICBjdXJyZW50X2ZyYW1lLT5pcGFz
cyA9IDE7CisgICAgICB9IGVsc2UgeworICAgICAgICBjdXJyZW50X2ZyYW1lLT5pbnRlcmxhY2Vk
ID0gZmFsc2U7CisgICAgICAgIGN1cnJlbnRfZnJhbWUtPmlwYXNzID0gMDsKKyAgICAgIH0KIAot
ICAgICAgICAvKiBiaXRzIHBlciBwaXhlbCBpcyBxWzhdJjB4MDcgKi8KKyAgICAgIGlmIChpbWFn
ZXNfZGF0YV9jb21wbGV0ZSA9PSAwKSB7CisgICAgICAgIGN1cnJlbnRfZnJhbWUtPnByb2dyZXNz
aXZlX2Rpc3BsYXkgPSB0cnVlOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgLyogT3ZlcmxheWlu
ZyBpbnRlcmxhY2VkLCB0cmFuc3BhcmVudCBHSUZzIG92ZXIKKyAgICAgICAgICAgZXhpc3Rpbmcg
aW1hZ2UgZGF0YSB1c2luZyB0aGUgSGFlYmVybGkgZGlzcGxheSBoYWNrCisgICAgICAgICAgIHJl
cXVpcmVzIHNhdmluZyB0aGUgdW5kZXJseWluZyBpbWFnZSBpbiBvcmRlciB0bworICAgICAgICAg
ICBhdm9pZCBqYWdnaWVzIGF0IHRoZSB0cmFuc3BhcmVuY3kgZWRnZXMuICBXZSBhcmUKKyAgICAg
ICAgICAgdW5wcmVwYXJlZCB0byBkZWFsIHdpdGggdGhhdCwgc28gZG9uJ3QgZGlzcGxheSBzdWNo
CisgICAgICAgICAgIGltYWdlcyBwcm9ncmVzc2l2ZWx5ICovCisgICAgICAgIGN1cnJlbnRfZnJh
bWUtPnByb2dyZXNzaXZlX2Rpc3BsYXkgPSBmYWxzZTsKICAgICAgIH0KLSAgICAgIAorCisgICAg
ICAvKiBDbGVhciBzdGF0ZSBmcm9tIGxhc3QgaW1hZ2UgKi8KKyAgICAgIGN1cnJlbnRfZnJhbWUt
Pmlyb3cgPSAwOworICAgICAgY3VycmVudF9mcmFtZS0+cm93c19yZW1haW5pbmcgPSBjdXJyZW50
X2ZyYW1lLT5oZWlnaHQ7CisgICAgICBjdXJyZW50X2ZyYW1lLT5yb3dwID0gMDsKKworICAgICAg
LyogYml0cyBwZXIgcGl4ZWwgaXMgcVs4XSYweDA3ICovCiAgICAgICBpZiAocVs4XSAmIDB4ODAp
IC8qIGhhcyBhIGxvY2FsIGNvbG9ybWFwPyAqLwogICAgICAgewotICAgICAgICBpbnQgbnVtX2Nv
bG9ycyA9IDIgPDwgKHFbOF0gJiAweDcpOworICAgICAgICB1bnNpZ25lZCBudW1fY29sb3JzID0g
MiA8PCAocVs4XSAmIDB4Nyk7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNpemUgPSAzKm51bV9j
b2xvcnM7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgKm1hcCA9IGZyYW1lX3JlYWRlciA/IGZyYW1l
X3JlYWRlci0+bG9jYWxfY29sb3JtYXAgOiAwOwotICAgICAgICBpZiAoZnJhbWVfcmVhZGVyICYm
ICghbWFwIHx8IChudW1fY29sb3JzID4gZnJhbWVfcmVhZGVyLT5sb2NhbF9jb2xvcm1hcF9zaXpl
KSkpIHsKLSAgICAgICAgICBkZWxldGUgW11tYXA7Ci0gICAgICAgICAgbWFwID0gbmV3IHVuc2ln
bmVkIGNoYXJbc2l6ZV07Ci0gICAgICAgICAgaWYgKCFtYXApCi0gICAgICAgICAgICByZXR1cm4g
Y2xpZW50cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQoKSA6IGZhbHNlOwotICAgICAgICB9CiAK
ICAgICAgICAgLyogU3dpdGNoIHRvIHRoZSBuZXcgbG9jYWwgcGFsZXR0ZSBhZnRlciBpdCBsb2Fk
cyAqLwotICAgICAgICBpZiAoZnJhbWVfcmVhZGVyKSB7Ci0gICAgICAgICAgZnJhbWVfcmVhZGVy
LT5sb2NhbF9jb2xvcm1hcCA9IG1hcDsKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPmxvY2FsX2Nv
bG9ybWFwX3NpemUgPSBudW1fY29sb3JzOwotICAgICAgICAgIGZyYW1lX3JlYWRlci0+aXNfbG9j
YWxfY29sb3JtYXBfZGVmaW5lZCA9IHRydWU7Ci0gICAgICAgIH0KKyAgICAgICAgY3VycmVudF9m
cmFtZS0+bG9jYWxfY29sb3JtYXBfcG9zaXRpb24gPSBkYXRhX3Bvc2l0aW9uOworICAgICAgICBj
dXJyZW50X2ZyYW1lLT5sb2NhbF9jb2xvcm1hcF9zaXplID0gbnVtX2NvbG9yczsKKyAgICAgICAg
Y3VycmVudF9mcmFtZS0+aXNfbG9jYWxfY29sb3JtYXBfZGVmaW5lZCA9IHRydWU7CiAKICAgICAg
ICAgaWYgKGxlbiA8IHNpemUpIHsKLSAgICAgICAgICAvLyBVc2UgJ2hvbGQnIHBhdHRlcm4gdG8g
Z2V0IHRoZSBpbWFnZSBjb2xvcm1hcAorICAgICAgICAgIC8vIERvbid0IGhhdmUgZW5vdWdoIGRh
dGEgZm9yIGltYWdlIGNvbG9ybWFwLgogICAgICAgICAgIEdFVE4oc2l6ZSwgZ2lmX2ltYWdlX2Nv
bG9ybWFwKTsKICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAvLyBDb3B5IGV2
ZXJ5dGhpbmcgYW5kIGRpcmVjdGx5IGdvIHRvIGdpZl9sendfc3RhcnQKLSAgICAgICAgaWYgKGZy
YW1lX3JlYWRlcikKLSAgICAgICAgICBtZW1jcHkoZnJhbWVfcmVhZGVyLT5sb2NhbF9jb2xvcm1h
cCwgYnVmLCBzaXplKTsKLSAgICAgICAgYnVmICs9IHNpemU7CisKKyAgICAgICAgLy8gRGlyZWN0
bHkgZ28gdG8gZ2lmX2x6d19zdGFydAorICAgICAgICBkYXRhX3Bvc2l0aW9uICs9IHNpemU7CiAg
ICAgICAgIGxlbiAtPSBzaXplOwotICAgICAgfSBlbHNlIGlmIChmcmFtZV9yZWFkZXIpIHsKKyAg
ICAgIH0gZWxzZSB7CiAgICAgICAgIC8qIFN3aXRjaCBiYWNrIHRvIHRoZSBnbG9iYWwgcGFsZXR0
ZSAqLwotICAgICAgICBmcmFtZV9yZWFkZXItPmlzX2xvY2FsX2NvbG9ybWFwX2RlZmluZWQgPSBm
YWxzZTsKKyAgICAgICAgY3VycmVudF9mcmFtZS0+aXNfbG9jYWxfY29sb3JtYXBfZGVmaW5lZCA9
IGZhbHNlOwogICAgICAgfQogICAgICAgR0VUTigxLCBnaWZfbHp3X3N0YXJ0KTsKICAgICB9CkBA
IC04NzgsMTIgKzg0NiwxMyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2ln
bmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLAogCiAgICAgY2FzZSBnaWZfc3ViX2Jsb2NrOgog
ICAgIHsKLSAgICAgIGlmICgoY291bnQgPSAqcSkgIT0gMCkKKyAgICAgIHVuc2lnbmVkIGNvdW50
ID0gKnE7CisgICAgICBpZiAoY291bnQpCiAgICAgICAvKiBTdGlsbCB3b3JraW5nIG9uIHRoZSBz
YW1lIGltYWdlOiBQcm9jZXNzIG5leHQgTFpXIGRhdGEgYmxvY2sgKi8KICAgICAgIHsKICAgICAg
ICAgLyogTWFrZSBzdXJlIHRoZXJlIGFyZSBzdGlsbCByb3dzIGxlZnQuIElmIHRoZSBHSUYgZGF0
YSAqLwogICAgICAgICAvKiBpcyBjb3JydXB0LCB3ZSBtYXkgbm90IGdldCBhbiBleHBsaWNpdCB0
ZXJtaW5hdG9yLiAgICovCi0gICAgICAgIGlmIChmcmFtZV9yZWFkZXIgJiYgZnJhbWVfcmVhZGVy
LT5yb3dzX3JlbWFpbmluZyA9PSAwKSB7CisgICAgICAgIGlmIChjdXJyZW50X2ZyYW1lLT5yb3dz
X3JlbWFpbmluZyA9PSAwKSB7CiAgICAgICAgICAgLyogVGhpcyBpcyBhbiBpbGxlZ2FsIEdJRiwg
YnV0IHdlIHJlbWFpbiB0b2xlcmFudC4gKi8KICAgICAgICAgICBHRVROKDEsIGdpZl9zdWJfYmxv
Y2spOwogICAgICAgICB9CkBAIC04OTIsMTcgKzg2MSwyNCBAQCBib29sIEdJRkltYWdlUmVhZGVy
OjpyZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLAogICAgICAgZWxz
ZQogICAgICAgLyogU2VlIGlmIHRoZXJlIGFyZSBhbnkgbW9yZSBpbWFnZXMgaW4gdGhpcyBzZXF1
ZW5jZS4gKi8KICAgICAgIHsKLSAgICAgICAgaW1hZ2VzX2RlY29kZWQrKzsKLQotICAgICAgICAv
LyBDQUxMQkFDSzogVGhlIGZyYW1lIGlzIG5vdyBjb21wbGV0ZS4KLSAgICAgICAgaWYgKGNsaWVu
dHB0ciAmJiBmcmFtZV9yZWFkZXIgJiYgIWNsaWVudHB0ci0+ZnJhbWVDb21wbGV0ZShpbWFnZXNf
ZGVjb2RlZCAtIDEsIGZyYW1lX3JlYWRlci0+ZGVsYXlfdGltZSwgZnJhbWVfcmVhZGVyLT5kaXNw
b3NhbF9tZXRob2QpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gZnJhbWVDb21wbGV0ZSgp
IGhhcyBhbHJlYWR5IGNhbGxlZAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xpZW50cHRy
LT5zZXRGYWlsZWQoKS4KKyAgICAgICAgaW1hZ2VzX2RhdGFfY29tcGxldGUrKzsKKyAgICAgICAg
Y2xpZW50cHRyLT5mcmFtZURhdGFDb21wbGV0ZShjdXJyZW50X2ZyYW1lLT5mcmFtZV9pbmRleCwg
Y3VycmVudF9mcmFtZS0+ZGVsYXlfdGltZSk7CisKKyAgICAgICAgaWYgKHF1ZXJ5ID09IEdJRklt
YWdlRGVjb2Rlcjo6R0lGRnVsbFF1ZXJ5KSB7CisgICAgICAgICAgLy8gQ0FMTEJBQ0s6IFRoZSBm
cmFtZSBpcyBub3cgY29tcGxldGUuCisgICAgICAgICAgaWYgKGNsaWVudHB0ciAmJiAhY2xpZW50
cHRyLT5mcmFtZUNvbXBsZXRlKGN1cnJlbnRfZnJhbWUuZ2V0KCksIGN1cnJlbnRfZnJhbWUtPmZy
YW1lX2luZGV4LCBjdXJyZW50X2ZyYW1lLT5kZWxheV90aW1lLCBjdXJyZW50X2ZyYW1lLT5kaXNw
b3NhbF9tZXRob2QpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBmcmFtZUNvbXBsZXRl
KCkgaGFzIGFscmVhZHkgY2FsbGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsaWVu
dHB0ci0+c2V0RmFpbGVkKCkuCisKKyAgICAgICAgICAvKiBDbGVhciBzdGF0ZSBmcm9tIHRoaXMg
aW1hZ2UgKi8KKyAgICAgICAgICBjdXJyZW50X2ZyYW1lLT5pc19sb2NhbF9jb2xvcm1hcF9kZWZp
bmVkID0gZmFsc2U7CisgICAgICAgICAgY3VycmVudF9mcmFtZS0+aXNfdHJhbnNwYXJlbnQgPSBm
YWxzZTsKKyAgICAgICAgICBjdXJyZW50X2ZyYW1lLT5pc19kZWNvZGVfc3RhcnRlZCA9IGZhbHNl
OworICAgICAgICAgIGN1cnJlbnRfZnJhbWUtPmZyYW1lX2luZGV4ID0gaW1hZ2VzX2RhdGFfY29t
cGxldGU7CisgICAgICAgIH0gZWxzZSB7CiAKLSAgICAgICAgLyogQ2xlYXIgc3RhdGUgZnJvbSB0
aGlzIGltYWdlICovCi0gICAgICAgIGlmIChmcmFtZV9yZWFkZXIpIHsKLSAgICAgICAgICAgIGZy
YW1lX3JlYWRlci0+aXNfbG9jYWxfY29sb3JtYXBfZGVmaW5lZCA9IGZhbHNlOwotICAgICAgICAg
ICAgZnJhbWVfcmVhZGVyLT5pc190cmFuc3BhcmVudCA9IGZhbHNlOworICAgICAgICAgIC8vIFRo
ZSBsYXN0IExaVyBibG9jayBvZiB0aGlzIGZyYW1lIGhhcyBiZWVuIHBhcnNlZCBzbyBzYXZlIGl0
IGFzIGEgZnVsbHkgcGFyc2VkIGZyYW1lLgorICAgICAgICAgIHByZXZpb3VzX2ZyYW1lcy5hcHBl
bmQoY3VycmVudF9mcmFtZS5yZWxlYXNlKCkpOwogICAgICAgICB9CiAKICAgICAgICAgR0VUTigx
LCBnaWZfaW1hZ2Vfc3RhcnQpOwpAQCAtOTExLDkgKzg4NywxMyBAQCBib29sIEdJRkltYWdlUmVh
ZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLAogICAgIGJy
ZWFrOwogCiAgICAgY2FzZSBnaWZfZG9uZToKLSAgICAgIC8vIFdoZW4gdGhlIEdJRiBpcyBkb25l
LCB3ZSBjYW4gc3RvcC4KLSAgICAgIGlmIChjbGllbnRwdHIpCi0gICAgICAgIGNsaWVudHB0ci0+
Z2lmQ29tcGxldGUoKTsKKyAgICAgIGltYWdlX2NvbXBsZXRlID0gdHJ1ZTsKKworICAgICAgY2xp
ZW50cHRyLT5naWZQYXJzZUNvbXBsZXRlKCk7CisgICAgICBpZiAocXVlcnkgPT0gR0lGSW1hZ2VE
ZWNvZGVyOjpHSUZGdWxsUXVlcnkpCisgICAgICAgIGNsaWVudHB0ci0+Z2lmRGVjb2RlQ29tcGxl
dGUoKTsgLy8gV2hlbiB0aGUgR0lGIGlzIGRvbmUsIHdlIGNhbiBzdG9wLgorCisgICAgICAvLyBU
aGUgYWJvdmUgY2FsbCBjYW4gY2F1c2UgdGhpcyBvYmplY3QgYmUgZGVsZXRlZCwgcmV0dXJuIGlt
bWVkaWF0ZWx5LgogICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAvLyBXZSBzaG91bGRuJ3QgZXZl
ciBnZXQgaGVyZS4KQEAgLTkyMiwyMyArOTAyLDk1IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJl
YWQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sCiAgICAgfQogICB9CiAK
LSAgLy8gQ29weSB0aGUgbGVmdG92ZXIgaW50byBncy0+aG9sZAotICBieXRlc19pbl9ob2xkID0g
bGVuOwotICBpZiAobGVuKSB7Ci0gICAgLy8gQWRkIHdoYXQgd2UgaGF2ZSBzb2ZhciB0byB0aGUg
YmxvY2sKLSAgICB1bnNpZ25lZCBjaGFyKiBwOwotICAgIGlmIChzdGF0ZSA9PSBnaWZfZ2xvYmFs
X2NvbG9ybWFwKQotICAgICAgcCA9IGdsb2JhbF9jb2xvcm1hcDsKLSAgICBlbHNlIGlmIChzdGF0
ZSA9PSBnaWZfaW1hZ2VfY29sb3JtYXApCi0gICAgICBwID0gZnJhbWVfcmVhZGVyID8gZnJhbWVf
cmVhZGVyLT5sb2NhbF9jb2xvcm1hcCA6IDA7Ci0gICAgZWxzZQotICAgICAgcCA9IGhvbGQ7Ci0g
ICAgaWYgKHApCi0gICAgICBtZW1jcHkocCwgYnVmLCBsZW4pOwotICAgIGJ5dGVzX3RvX2NvbnN1
bWUgLT0gbGVuOwotICB9Ci0KLSAgaWYgKGNsaWVudHB0cikKLSAgICBjbGllbnRwdHItPmRlY29k
aW5nSGFsdGVkKDApOworICBzZXRSZW1haW5pbmdCeXRlcyhsZW4pOwogICByZXR1cm4gZmFsc2U7
CiB9CisKK2Jvb2wgR0lGSW1hZ2VSZWFkZXI6OnByZXBhcmVMWldDb250ZXh0KGludCBkYXRhc2l6
ZSkKK3sKKyAgICAvLyBJbml0aWFsaXplIExaVyBwYXJzZXIvZGVjb2Rlci4KKworICAgIC8vIFNp
bmNlIHdlIHVzZSBhIGNvZGVzaXplIG9mIDEgbW9yZSB0aGFuIHRoZSBkYXRhc2l6ZSwgd2UgbmVl
ZCB0byBlbnN1cmUKKyAgICAvLyB0aGF0IG91ciBkYXRhc2l6ZSBpcyBzdHJpY3RseSBsZXNzIHRo
YW4gdGhlIE1BWF9MWldfQklUUyB2YWx1ZSAoMTIpLgorICAgIC8vIFRoaXMgc2V0cyB0aGUgbGFy
Z2VzdCBwb3NzaWJsZSBjb2RlbWFzayBjb3JyZWN0bHkgYXQgNDA5NS4KKyAgICBpZiAoZGF0YXNp
emUgPj0gTUFYX0xaV19CSVRTKQorICAgICAgICByZXR1cm4gY2xpZW50cHRyLT5zZXRGYWlsZWQo
KTsKKyAgICBpbnQgY2xlYXJfY29kZSA9IDEgPDwgZGF0YXNpemU7CisgICAgaWYgKGNsZWFyX2Nv
ZGUgPj0gTUFYX0JJVFMpCisgICAgICAgIHJldHVybiBjbGllbnRwdHItPnNldEZhaWxlZCgpOwor
CisgICAgbHp3X2NvbnRleHQuY2xlYXJfY29kZSA9IGNsZWFyX2NvZGU7CisgICAgbHp3X2NvbnRl
eHQuYXZhaWwgPSBjbGVhcl9jb2RlICsgMjsKKyAgICBsendfY29udGV4dC5vbGRjb2RlID0gLTE7
CisgICAgbHp3X2NvbnRleHQuY29kZXNpemUgPSBkYXRhc2l6ZSArIDE7CisgICAgbHp3X2NvbnRl
eHQuY29kZW1hc2sgPSAoMSA8PCBsendfY29udGV4dC5jb2Rlc2l6ZSkgLSAxOworICAgIGx6d19j
b250ZXh0LmRhdHVtID0gbHp3X2NvbnRleHQuYml0cyA9IDA7CisKKyAgICAvLyBJbml0aWFsaXpl
IHRoZSB0YWJsZXMuCisgICAgaWYgKGx6d19jb250ZXh0LnN1ZmZpeC5pc0VtcHR5KCkpCisgICAg
ICAgIGx6d19jb250ZXh0LnN1ZmZpeC5yZXNpemUoTUFYX0JJVFMpOworICAgIGlmIChsendfY29u
dGV4dC5zdGFjay5pc0VtcHR5KCkpCisgICAgICAgIGx6d19jb250ZXh0LnN0YWNrLnJlc2l6ZShN
QVhfQklUUyk7CisgICAgaWYgKGx6d19jb250ZXh0LnByZWZpeC5pc0VtcHR5KCkpCisgICAgICAg
IGx6d19jb250ZXh0LnByZWZpeC5yZXNpemUoTUFYX0JJVFMpOworCisgICAgLy8gQ2xlYXJpbmcg
dGhlIHdob2xlIHN1ZmZpeCB0YWJsZSBsZXRzIHVzIGJlIG1vcmUgdG9sZXJhbnQgb2YgYmFkIGRh
dGEuCisgICAgbHp3X2NvbnRleHQuc3VmZml4LmZpbGwoMCk7CisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBsendfY29udGV4dC5jbGVhcl9jb2RlOyBpKyspCisgICAgICAgIGx6d19jb250ZXh0LnN1
ZmZpeFtpXSA9IGk7CisgICAgbHp3X2NvbnRleHQuc3RhY2twID0gMDsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlTFpXQmxvY2sodW5zaWduZWQgYmxv
Y2tfcG9zaXRpb24sIHVuc2lnbmVkIGJ5dGVzX3RvX2RlY29kZSwgR0lGRnJhbWVDb250ZXh0KiBm
cmFtZSkKK3sKKyAgICBpZiAoYmxvY2tfcG9zaXRpb24gKyBieXRlc190b19kZWNvZGUgPiByYXdf
ZGF0YS0+c2l6ZSgpKQorICAgICAgICByZXR1cm4gY2xpZW50cHRyLT5zZXRGYWlsZWQoKTsKKwor
ICAgIC8vIFByZXBhcmUgTFpXIGRlY29kaW5nIGNvbnRleHQgaWYgbm90IGRvbmUuCisgICAgaWYg
KCFmcmFtZS0+aXNfZGVjb2RlX3N0YXJ0ZWQpIHsKKyAgICAgIC8vIFRoaXMgY2FsbCBhbHJlYWR5
IGRvZXMgY2xpZW50cHRyLT5zZXRGYWlsZWQoKSBpZiBmYWlscy4KKyAgICAgIGlmICghcHJlcGFy
ZUxaV0NvbnRleHQoZnJhbWUtPmRhdGFzaXplKSkKKyAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICBmcmFtZS0+aXNfZGVjb2RlX3N0YXJ0ZWQgPSB0cnVlOworICAgIH0KKworICAgIGlmICgh
ZG9MencoZGF0YSgpICsgYmxvY2tfcG9zaXRpb24sIGJ5dGVzX3RvX2RlY29kZSwgJmx6d19jb250
ZXh0LCBmcmFtZSwgcm93YnVmLCBjbGllbnRwdHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IElmIGRvTHp3KCkgZW5jb3VudGVyZWQgYW4gZXJyb3IsIGl0IGhhcyBhbHJlYWR5IGNhbGxlZCBj
bGllbnRwdHItPnNldEZhaWxlZCgpLgorICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdJRklt
YWdlUmVhZGVyOjpkZWNvZGVQcmV2aW91c0xaV0Jsb2NrcyhHSUZGcmFtZUNvbnRleHQqIGZyYW1l
KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhbWUtPnByZXZpb3VzX2Jsb2Nrcy5z
aXplKCk7ICsraSkgeworICAgICAgICBjb25zdCB1bnNpZ25lZCBibG9ja19wb3NpdGlvbiA9IGZy
YW1lLT5wcmV2aW91c19ibG9ja3NbaV0uYmxvY2tfcG9zaXRpb247CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGJsb2NrX3NpemUgPSBmcmFtZS0+cHJldmlvdXNfYmxvY2tzW2ldLmJsb2NrX3NpemU7
CisKKyAgICAgICAgLy8gVGhpcyBjYWxsIGFscmVhZHkgZG9lcyBjbGllbnRwdHItPnNldEZhaWxl
ZCgpIGlmIGZhaWxzLgorICAgICAgICBpZiAoIWRlY29kZUxaV0Jsb2NrKGJsb2NrX3Bvc2l0aW9u
LCBibG9ja19zaXplLCBmcmFtZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIGZyYW1lLT5wcmV2aW91c19ibG9ja3MuY2xlYXIoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBHSUZJbWFnZVJlYWRlcjo6ZGVmZXJMWldCbG9jayh1bnNpZ25lZCBibG9ja19wb3Np
dGlvbiwgdW5zaWduZWQgYnl0ZXNfdG9fZGVjb2RlLCBHSUZGcmFtZUNvbnRleHQqIGZyYW1lKQor
eworICAgIGZyYW1lLT5wcmV2aW91c19ibG9ja3MuYXBwZW5kKEdJRkxaV0Jsb2NrKGJsb2NrX3Bv
c2l0aW9uLCBieXRlc190b19kZWNvZGUpKTsKK30KKwordm9pZCBHSUZJbWFnZVJlYWRlcjo6c2V0
UmVtYWluaW5nQnl0ZXModW5zaWduZWQgYnl0ZXNfbGVmdCkKK3sKKyAgICBBU1NFUlQoYnl0ZXNf
bGVmdCA8PSByYXdfZGF0YS0+c2l6ZSgpKTsKKyAgICBieXRlc19yZWFkID0gcmF3X2RhdGEtPnNp
emUoKSAtIGJ5dGVzX2xlZnQ7Cit9CisKK2Jvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlcG9ydFBhcnNl
RXJyb3IoR0lGSW1hZ2VEZWNvZGVyOjpHSUZRdWVyeSBxdWVyeSkKK3sKKyAgICAvLyBJZiB0aGlz
IGlzIGFuIGVycm9yIGR1cmluZyBwYXJzaW5nIGFuZCB3ZSdyZSBqdXN0IGNvdW50aW5nIGZyYW1l
cywgdGhlbiBiZSB0b2xlcmFudCBhbmQgZG9uJ3QgcmVwb3J0IHRoZSBlcnJvci4KKyAgICBpZiAo
cXVlcnkgPT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZGcmFtZUNvdW50UXVlcnkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gY2xpZW50cHRyLT5zZXRGYWlsZWQoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaAppbmRleCAwNTI1MzJjNjQ1
MzYzMTQ3NzQ4ZjliYTY0ZWE3OGExNTFmZWUzYWRlLi4yNjBhODA2NGZkOTRiZTgzNjRlOGQwNDBl
NzQ5YTdiODI1MWI4ZmNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaApAQCAtMzgsMTQgKzM4LDE3
IEBACiAjaWZuZGVmIEdJRkltYWdlUmVhZGVyX2gKICNkZWZpbmUgR0lGSW1hZ2VSZWFkZXJfaAog
Ci0vLyBEZWZpbmUgb3Vyc2VsdmVzIGFzIHRoZSBjbGllbnRQdHIuICBNb3ppbGxhIGp1c3QgaGFj
a2VkIHRoZWlyIEMrKyBjYWxsYmFjayBjbGFzcyBpbnRvIHRoaXMgb2xkIEMgZGVjb2RlciwKLS8v
IHNvIHdlIHdpbGwgdG9vLgogI2luY2x1ZGUgIkdJRkltYWdlRGVjb2Rlci5oIgogCisjaW5jbHVk
ZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKwogI2RlZmluZSBNQVhfTFpXX0JJVFMgICAgICAgICAgMTIKICNkZWZpbmUgTUFY
X0JJVFMgICAgICAgICAgICA0MDk3IC8qIDJeTUFYX0xaV19CSVRTKzEgKi8KICNkZWZpbmUgTUFY
X0NPTE9SUyAgICAgICAgICAgMjU2Ci0jZGVmaW5lIE1BWF9IT0xEX1NJWkUgICAgICAgIDI1Ngor
CituYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNvbnN0IGludCBjTG9vcENvdW50Tm90U2VlbiA9IC0y
OwogCkBAIC03NiwxMiArNzksNzcgQEAgdHlwZWRlZiBlbnVtIHsKICAgICBnaWZfY29uc3VtZV9j
b21tZW50CiB9IGdzdGF0ZTsKIAotc3RydWN0IEdJRkZyYW1lUmVhZGVyIHsKK3N0cnVjdCBHSUZM
WldCbG9jayB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgR0lG
TFpXQmxvY2sodW5zaWduZWQgcG9zaXRpb24sIHVuc2lnbmVkIHNpemUpCisgICAgICAgIDogYmxv
Y2tfcG9zaXRpb24ocG9zaXRpb24pCisgICAgICAgICwgYmxvY2tfc2l6ZShzaXplKQorICAgIHsg
fQorCisgICAgdW5zaWduZWQgYmxvY2tfcG9zaXRpb247CisgICAgdW5zaWduZWQgYmxvY2tfc2l6
ZTsKK307CisKK3N0cnVjdCBHSUZGcmFtZUNvbnRleHQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIGludCBkYXRhc2l6ZTsgIC8vIFZhbHVlIHRvIGluaXRpYWxp
emUgTFpXIGRlY29kaW5nLiBUaGVyZSBhcmUgMl4oZGF0YXNpemUgKyAxKSBzeW1ib2xzLgorCisg
ICAgLy8gT3V0cHV0IHN0YXRlIG1hY2hpbmUuCisgICAgaW50IGlwYXNzOyAgICAgICAgICAgICAg
ICAgIC8vIEludGVybGFjZSBwYXNzOyBSYW5nZXMgMS00IGlmIGludGVybGFjZWQuCisgICAgdW5z
aWduZWQgcm93c19yZW1haW5pbmc7ICAgIC8vIFJvd3MgcmVtYWluaW5nIHRvIGJlIG91dHB1dC4K
KyAgICB1bnNpZ25lZCBpcm93OyAgICAgICAgICAgICAgLy8gQ3VycmVudCBvdXRwdXQgcm93LCBz
dGFydGluZyBhdCB6ZXJvLgorICAgIHVuc2lnbmVkIHJvd3A7ICAgICAgICAgICAgICAvLyBDdXJy
ZW50IG91dHB1dCBwb3NpdGlvbi4KKworICAgIC8vIFBhcmFtZXRlcnMgZm9yIGltYWdlIGZyYW1l
IGN1cnJlbnRseSBiZWluZyBkZWNvZGVkLgorICAgIHVuc2lnbmVkIHhfb2Zmc2V0LCB5X29mZnNl
dDsgIC8vIFdpdGggcmVzcGVjdCB0byAic2NyZWVuIiBvcmlnaW4uCisgICAgdW5zaWduZWQgaGVp
Z2h0LCB3aWR0aDsKKyAgICBpbnQgdHBpeGVsOyAgICAgICAgICAgICAgICAgICAvLyBJbmRleCBv
ZiB0cmFuc3BhcmVudCBwaXhlbC4KKyAgICBJbWFnZUZyYW1lOjpGcmFtZURpc3Bvc2FsTWV0aG9k
IGRpc3Bvc2FsX21ldGhvZDsgICAvLyBSZXN0b3JlIHRvIGJhY2tncm91bmQsIGxlYXZlIGluIHBs
YWNlLCBldGMuCisgICAgdW5zaWduZWQgbG9jYWxfY29sb3JtYXBfcG9zaXRpb247ICAgIC8vIFBv
c2l0aW9uIG9mIHRoZSBmaXJzdCBieXRlIG9mIGxvY2FsIGNvbG9ybWFwIGluIHRoZSBzdHJlYW0u
CisgICAgdW5zaWduZWQgbG9jYWxfY29sb3JtYXBfc2l6ZTsgICAgICAgIC8vIFNpemUgb2YgbG9j
YWwgY29sb3JtYXAgYXJyYXkuCisgICAgaW50IGZyYW1lX2luZGV4OyAgICAgICAgICAgICAgICAg
ICAgIC8vIEN1cnJlbnQgZnJhbWUgaW5kZXguCisKKyAgICBib29sIGlzX2xvY2FsX2NvbG9ybWFw
X2RlZmluZWQgOiAxOworICAgIGJvb2wgcHJvZ3Jlc3NpdmVfZGlzcGxheSA6IDE7ICAgICAgIC8v
IElmIFRSVUUsIGRvIEhhZWJlcmxpIGludGVybGFjZSBoYWNrLgorICAgIGJvb2wgaW50ZXJsYWNl
ZCA6IDE7ICAgICAgICAgICAgICAgIC8vIFRSVUUsIGlmIHNjYW5saW5lcyBhcnJpdmUgaW50ZXJs
YWNlZCBvcmRlci4KKyAgICBib29sIGlzX3RyYW5zcGFyZW50IDogMTsgICAgICAgICAgICAvLyBU
UlVFLCBpZiB0cGl4ZWwgaXMgdmFsaWQuCisgICAgYm9vbCBpc19kZWNvZGVfc3RhcnRlZCA6IDE7
CisKKyAgICB1bnNpZ25lZCBkZWxheV90aW1lOyAgICAgICAgIC8vRGlzcGxheSB0aW1lLCBpbiBt
aWxsaXNlY29uZHMsIGZvciB0aGlzIGltYWdlIGluIGEgbXVsdGktaW1hZ2UgR0lGLgorCisgICAg
VmVjdG9yPEdJRkxaV0Jsb2NrPiBwcmV2aW91c19ibG9ja3M7CisKKyAgICBHSUZGcmFtZUNvbnRl
eHQoaW50IGluZGV4KQorICAgICAgICA6IGRhdGFzaXplKDApCisgICAgICAgICwgaXBhc3MoMCkK
KyAgICAgICAgLCByb3dzX3JlbWFpbmluZygwKQorICAgICAgICAsIGlyb3coMCkKKyAgICAgICAg
LCByb3dwKDApCisgICAgICAgICwgeF9vZmZzZXQoMCkKKyAgICAgICAgLCB5X29mZnNldCgwKQor
ICAgICAgICAsIGhlaWdodCgwKQorICAgICAgICAsIHdpZHRoKDApCisgICAgICAgICwgdHBpeGVs
KDApCisgICAgICAgICwgZGlzcG9zYWxfbWV0aG9kKEltYWdlRnJhbWU6OkRpc3Bvc2VOb3RTcGVj
aWZpZWQpCisgICAgICAgICwgbG9jYWxfY29sb3JtYXBfcG9zaXRpb24oMCkKKyAgICAgICAgLCBs
b2NhbF9jb2xvcm1hcF9zaXplKDApCisgICAgICAgICwgZnJhbWVfaW5kZXgoaW5kZXgpCisgICAg
ICAgICwgaXNfbG9jYWxfY29sb3JtYXBfZGVmaW5lZChmYWxzZSkKKyAgICAgICAgLCBwcm9ncmVz
c2l2ZV9kaXNwbGF5KGZhbHNlKQorICAgICAgICAsIGludGVybGFjZWQoZmFsc2UpCisgICAgICAg
ICwgaXNfdHJhbnNwYXJlbnQoZmFsc2UpCisgICAgICAgICwgaXNfZGVjb2RlX3N0YXJ0ZWQoZmFs
c2UpCisgICAgICAgICwgZGVsYXlfdGltZSgwKQorICAgIHsgfQorfTsKKworc3RydWN0IEdJRkxa
V0NvbnRleHQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIC8q
IExaVyBkZWNvZGVyIHN0YXRlIG1hY2hpbmUgKi8KLSAgICB1bnNpZ25lZCBjaGFyICpzdGFja3A7
ICAgICAgICAgICAgICAvKiBDdXJyZW50IHN0YWNrIHBvaW50ZXIgKi8KLSAgICBpbnQgZGF0YXNp
emU7CisgICAgdW5zaWduZWQgc3RhY2twOyAgICAgICAgICAgICAgICAgICAgLyogQ3VycmVudCBz
dGFjayBwb3NpdGlvbiAqLwogICAgIGludCBjb2Rlc2l6ZTsKICAgICBpbnQgY29kZW1hc2s7CiAg
ICAgaW50IGNsZWFyX2NvZGU7ICAgICAgICAgICAgIC8qIENvZGV3b3JkIHVzZWQgdG8gdHJpZ2dl
ciBkaWN0aW9uYXJ5IHJlc2V0ICovCkBAIC05MSwxMjMgKzE1OSw5NiBAQCBwdWJsaWM6CiAgICAg
aW50IGJpdHM7ICAgICAgICAgICAgICAgICAgIC8qIE51bWJlciBvZiB1bnJlYWQgYml0cyBpbiAi
ZGF0dW0iICovCiAgICAgaW50IGRhdHVtOyAgICAgICAgICAgICAgICAvKiAzMi1iaXQgaW5wdXQg
YnVmZmVyICovCiAKLSAgICAvKiBPdXRwdXQgc3RhdGUgbWFjaGluZSAqLwotICAgIGludCBpcGFz
czsgICAgICAgICAgICAgICAgICAvKiBJbnRlcmxhY2UgcGFzczsgUmFuZ2VzIDEtNCBpZiBpbnRl
cmxhY2VkLiAqLwotICAgIHVuc2lnbmVkIGludCByb3dzX3JlbWFpbmluZzsgICAgICAgIC8qIFJv
d3MgcmVtYWluaW5nIHRvIGJlIG91dHB1dCAqLwotICAgIHVuc2lnbmVkIGludCBpcm93OyAgICAg
ICAgICAgICAgICAgIC8qIEN1cnJlbnQgb3V0cHV0IHJvdywgc3RhcnRpbmcgYXQgemVybyAqLwot
ICAgIHVuc2lnbmVkIGNoYXIgKnJvd2J1ZjsgICAgICAgICAgICAgIC8qIFNpbmdsZSBzY2FubGlu
ZSB0ZW1wb3JhcnkgYnVmZmVyICovCi0gICAgdW5zaWduZWQgY2hhciAqcm93ZW5kOyAgICAgICAg
ICAgICAgLyogUG9pbnRlciB0byBlbmQgb2Ygcm93YnVmICovCi0gICAgdW5zaWduZWQgY2hhciAq
cm93cDsgICAgICAgICAgICAgICAgLyogQ3VycmVudCBvdXRwdXQgcG9pbnRlciAqLwotCi0gICAg
LyogUGFyYW1ldGVycyBmb3IgaW1hZ2UgZnJhbWUgY3VycmVudGx5IGJlaW5nIGRlY29kZWQgKi8K
LSAgICB1bnNpZ25lZCBpbnQgeF9vZmZzZXQsIHlfb2Zmc2V0OyAgICAvKiBXaXRoIHJlc3BlY3Qg
dG8gInNjcmVlbiIgb3JpZ2luICovCi0gICAgdW5zaWduZWQgaW50IGhlaWdodCwgd2lkdGg7Ci0g
ICAgaW50IHRwaXhlbDsgICAgICAgICAgICAgICAgIC8qIEluZGV4IG9mIHRyYW5zcGFyZW50IHBp
eGVsICovCi0gICAgV2ViQ29yZTo6SW1hZ2VGcmFtZTo6RnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNw
b3NhbF9tZXRob2Q7ICAgLyogUmVzdG9yZSB0byBiYWNrZ3JvdW5kLCBsZWF2ZSBpbiBwbGFjZSwg
ZXRjLiovCi0gICAgdW5zaWduZWQgY2hhciAqbG9jYWxfY29sb3JtYXA7ICAgIC8qIFBlci1pbWFn
ZSBjb2xvcm1hcCAqLwotICAgIGludCBsb2NhbF9jb2xvcm1hcF9zaXplOyAgICAvKiBTaXplIG9m
IGxvY2FsIGNvbG9ybWFwIGFycmF5LiAqLwotICAgIAotICAgIGJvb2wgaXNfbG9jYWxfY29sb3Jt
YXBfZGVmaW5lZCA6IDE7Ci0gICAgYm9vbCBwcm9ncmVzc2l2ZV9kaXNwbGF5IDogMTsgICAgLyog
SWYgVFJVRSwgZG8gSGFlYmVybGkgaW50ZXJsYWNlIGhhY2sgKi8KLSAgICBib29sIGludGVybGFj
ZWQgOiAxOyAgICAgICAgICAgICAvKiBUUlVFLCBpZiBzY2FubGluZXMgYXJyaXZlIGludGVybGFj
ZWQgb3JkZXIgKi8KLSAgICBib29sIGlzX3RyYW5zcGFyZW50IDogMTsgICAgICAgICAvKiBUUlVF
LCBpZiB0cGl4ZWwgaXMgdmFsaWQgKi8KKyAgICBWZWN0b3I8dW5zaWduZWQgc2hvcnQ+IHByZWZp
eDsgICAgIC8qIExaVyBkZWNvZGluZyB0YWJsZXMgKi8KKyAgICBWZWN0b3I8dW5zaWduZWQgY2hh
cj4gc3VmZml4OyAgICAgIC8qIExaVyBkZWNvZGluZyB0YWJsZXMgKi8KKyAgICBWZWN0b3I8dW5z
aWduZWQgY2hhcj4gc3RhY2s7ICAgICAgIC8qIEJhc2Ugb2YgTFpXIGRlY29kZXIgc3RhY2sgKi8K
KworICAgIEdJRkxaV0NvbnRleHQoKQorICAgICAgICA6IHN0YWNrcCgwKQorICAgICAgICAsIGNv
ZGVzaXplKDApCisgICAgICAgICwgY29kZW1hc2soMCkKKyAgICAgICAgLCBjbGVhcl9jb2RlKDAp
CisgICAgICAgICwgYXZhaWwoMCkKKyAgICAgICAgLCBvbGRjb2RlKDApCisgICAgICAgICwgZmly
c3RjaGFyKDApCisgICAgICAgICwgYml0cygwKQorICAgICAgICAsIGRhdHVtKDApCisgICAgeyB9
Cit9OworCitjbGFzcyBHSUZJbWFnZVJlYWRlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgR0lGSW1hZ2VSZWFkZXIoR0lGSW1hZ2VEZWNvZGVyKiBjbGllbnQp
OwogCi0gICAgdW5zaWduZWQgZGVsYXlfdGltZTsgICAgICAgIC8qIERpc3BsYXkgdGltZSwgaW4g
bWlsbGlzZWNvbmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhp
cyBpbWFnZSBpbiBhIG11bHRpLWltYWdlIEdJRiAqLworICAgIHZvaWQgc2V0RGF0YShQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSkgeyByYXdfZGF0YSA9IGRhdGE7IH0KKyAgICBib29sIGRl
Y29kZShHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5LCBpbnQgaGFsdEF0RnJhbWUpOwogCisgICAg
Y29uc3QgdW5zaWduZWQgY2hhciogZ2xvYmFsQ29sb3JNYXAoKSBjb25zdDsKKyAgICB1bnNpZ25l
ZCBnbG9iYWxDb2xvck1hcFNpemUoKSBjb25zdCB7IHJldHVybiBnbG9iYWxfY29sb3JtYXBfc2l6
ZTsgfQogCi0gICAgdW5zaWduZWQgc2hvcnQqICBwcmVmaXg7ICAgICAgICAgIC8qIExaVyBkZWNv
ZGluZyB0YWJsZXMgKi8KLSAgICB1bnNpZ25lZCBjaGFyKiAgIHN1ZmZpeDsgICAgICAgICAgLyog
TFpXIGRlY29kaW5nIHRhYmxlcyAqLwotICAgIHVuc2lnbmVkIGNoYXIqICAgc3RhY2s7ICAgICAg
ICAgICAvKiBCYXNlIG9mIExaVyBkZWNvZGVyIHN0YWNrICovCisgICAgY29uc3QgdW5zaWduZWQg
Y2hhciogbG9jYWxDb2xvck1hcChjb25zdCBHSUZGcmFtZUNvbnRleHQqKSBjb25zdDsKKyAgICB1
bnNpZ25lZCBsb2NhbENvbG9yTWFwU2l6ZShjb25zdCBHSUZGcmFtZUNvbnRleHQqIGZyYW1lKSBj
b25zdCB7IHJldHVybiBmcmFtZS0+bG9jYWxfY29sb3JtYXBfc2l6ZTsgfQogCisgICAgaW50IGlt
YWdlc0NvdW50KCkgY29uc3QgeyByZXR1cm4gaW1hZ2VzX2NvdW50OyB9CisgICAgaW50IGxvb3BD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIGxvb3BfY291bnQ7IH0KIAotICAgIEdJRkZyYW1lUmVhZGVy
KCkgewotICAgICAgICBzdGFja3AgPSAwOwotICAgICAgICBkYXRhc2l6ZSA9IGNvZGVzaXplID0g
Y29kZW1hc2sgPSBjbGVhcl9jb2RlID0gYXZhaWwgPSBvbGRjb2RlID0gMDsKLSAgICAgICAgZmly
c3RjaGFyID0gMDsKLSAgICAgICAgYml0cyA9IGRhdHVtID0gMDsKLSAgICAgICAgaXBhc3MgPSAw
OwotICAgICAgICByb3dzX3JlbWFpbmluZyA9IGlyb3cgPSAwOwotICAgICAgICByb3didWYgPSBy
b3dlbmQgPSByb3dwID0gMDsKK3ByaXZhdGU6CisgICAgYm9vbCBkZWNvZGUodW5zaWduZWQgZGF0
YVBvc2l0aW9uLCB1bnNpZ25lZCBieXRlc1RvRGVjb2RlLCBHSUZJbWFnZURlY29kZXI6OkdJRlF1
ZXJ5LCBpbnQgaGFsdEF0RnJhbWUpOwogCi0gICAgICAgIHhfb2Zmc2V0ID0geV9vZmZzZXQgPSB3
aWR0aCA9IGhlaWdodCA9IDA7Ci0gICAgICAgIHRwaXhlbCA9IDA7Ci0gICAgICAgIGRpc3Bvc2Fs
X21ldGhvZCA9IFdlYkNvcmU6OkltYWdlRnJhbWU6OkRpc3Bvc2VOb3RTcGVjaWZpZWQ7CisgICAg
Ly8gSW5pdGlhbGl6ZSBMWlcgZGVjb2RpbmcgY29udGV4dC4KKyAgICBib29sIHByZXBhcmVMWldD
b250ZXh0KGludCBkYXRhU2l6ZSk7CiAKLSAgICAgICAgbG9jYWxfY29sb3JtYXAgPSAwOwotICAg
ICAgICBsb2NhbF9jb2xvcm1hcF9zaXplID0gMDsKLSAgICAgICAgaXNfbG9jYWxfY29sb3JtYXBf
ZGVmaW5lZCA9IHByb2dyZXNzaXZlX2Rpc3BsYXkgPSBpc190cmFuc3BhcmVudCA9IGludGVybGFj
ZWQgPSBmYWxzZTsKKyAgICAvLyBEZWNvZGUgb25lIExaVyBibG9jayB3aXRoIHRoZSBmcmFtZS4K
KyAgICBib29sIGRlY29kZUxaV0Jsb2NrKHVuc2lnbmVkIGJsb2NrUG9zaXRpb24sIHVuc2lnbmVk
IGJ5dGVzVG9EZWNvZGUsIEdJRkZyYW1lQ29udGV4dCopOwogCi0gICAgICAgIGRlbGF5X3RpbWUg
PSAwOworICAgIC8vIERlY29kZSBkZWZlcnJlZCBMWlcgYmxvY2tzIGluIHRoZSBmcmFtZS4KKyAg
ICBib29sIGRlY29kZVByZXZpb3VzTFpXQmxvY2tzKEdJRkZyYW1lQ29udGV4dCopOwogCi0gICAg
ICAgIHByZWZpeCA9IDA7Ci0gICAgICAgIHN1ZmZpeCA9IHN0YWNrID0gMDsKLSAgICB9Ci0gICAg
Ci0gICAgfkdJRkZyYW1lUmVhZGVyKCkgewotICAgICAgICBkZWxldGUgW11yb3didWY7Ci0gICAg
ICAgIGRlbGV0ZSBbXWxvY2FsX2NvbG9ybWFwOwotICAgICAgICBkZWxldGUgW11wcmVmaXg7Ci0g
ICAgICAgIGRlbGV0ZSBbXXN1ZmZpeDsKLSAgICAgICAgZGVsZXRlIFtdc3RhY2s7Ci0gICAgfQot
fTsKKyAgICAvLyBTYXZlIGluZm9ybWF0aW9uIGZvciBkZWNvZGluZyBvbmUgTFpXIGJsb2NrIGlu
dG8gdGhlIGZyYW1lIGNvbnRleHQuIFRoZSBibG9jayB3aWxsIGJlIGRlY29kZWQgbGF0ZXIuCisg
ICAgdm9pZCBkZWZlckxaV0Jsb2NrKHVuc2lnbmVkIGJsb2NrUG9zaXRpb24sIHVuc2lnbmVkIGJ5
dGVzVG9EZWNvZGUsIEdJRkZyYW1lQ29udGV4dCopOworCisgICAgdm9pZCBzZXRSZW1haW5pbmdC
eXRlcyh1bnNpZ25lZCBieXRlc0xlZnQpOworCisgICAgYm9vbCByZXBvcnRQYXJzZUVycm9yKEdJ
RkltYWdlRGVjb2Rlcjo6R0lGUXVlcnkpOworCisgICAgY29uc3QgdW5zaWduZWQgY2hhciogZGF0
YSgpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+
KHJhd19kYXRhLT5kYXRhKCkpOyB9CisKKyAgICBHSUZJbWFnZURlY29kZXIqIGNsaWVudHB0cjsK
IAotc3RydWN0IEdJRkltYWdlUmVhZGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXIqIGNsaWVudHB0cjsKICAgICAv
KiBQYXJzaW5nIHN0YXRlIG1hY2hpbmUgKi8KICAgICBnc3RhdGUgc3RhdGU7ICAgICAgICAgICAg
ICAgICAgICAgIC8qIEN1cnJlbnQgZGVjb2RlciBtYXN0ZXIgc3RhdGUgKi8KLSAgICB1bnNpZ25l
ZCBieXRlc190b19jb25zdW1lOyAgICAgICAgIC8qIE51bWJlciBvZiBieXRlcyB0byBhY2N1bXVs
YXRlICovCi0gICAgdW5zaWduZWQgYnl0ZXNfaW5faG9sZDsgICAgICAgICAgICAvKiBieXRlcyBh
Y2N1bXVsYXRlZCBzbyBmYXIqLwotICAgIHVuc2lnbmVkIGNoYXIgaG9sZFtNQVhfSE9MRF9TSVpF
XTsgLyogQWNjdW11bGF0aW9uIGJ1ZmZlciAqLwotICAgIHVuc2lnbmVkIGNoYXIqIGdsb2JhbF9j
b2xvcm1hcDsgICAgLyogKDMqIE1BWF9DT0xPUlMgaW4gc2l6ZSkgRGVmYXVsdCBjb2xvcm1hcCBp
ZiBsb2NhbCBub3Qgc3VwcGxpZWQsIDMgYnl0ZXMgZm9yIGVhY2ggY29sb3IgICovCisgICAgdW5z
aWduZWQgYnl0ZXNfdG9fY29uc3VtZTsgICAgICAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gcmVh
ZCBmcm9tIG5leHQgYmxvY2sgKi8KKyAgICB1bnNpZ25lZCBieXRlc19yZWFkOyAgICAgICAgICAg
ICAgIC8qIE51bWJlciBvZiBieXRlcyByZWFkIGZyb20gfGRhdGF8ICovCiAgICAgCiAgICAgIC8q
IEdsb2JhbCAobXVsdGktaW1hZ2UpIHN0YXRlICovCiAgICAgaW50IHNjcmVlbl9iZ2NvbG9yOyAg
ICAgICAgIC8qIExvZ2ljYWwgc2NyZWVuIGJhY2tncm91bmQgY29sb3IgKi8KICAgICBpbnQgdmVy
c2lvbjsgICAgICAgICAgICAgICAgLyogRWl0aGVyIDg5IGZvciBHSUY4OSBvciA4NyBmb3IgR0lG
ODcgKi8KICAgICB1bnNpZ25lZCBzY3JlZW5fd2lkdGg7ICAgICAgIC8qIExvZ2ljYWwgc2NyZWVu
IHdpZHRoICYgaGVpZ2h0ICovCiAgICAgdW5zaWduZWQgc2NyZWVuX2hlaWdodDsKLSAgICBpbnQg
Z2xvYmFsX2NvbG9ybWFwX3NpemU7ICAgLyogU2l6ZSBvZiBnbG9iYWwgY29sb3JtYXAgYXJyYXku
ICovCi0gICAgdW5zaWduZWQgaW1hZ2VzX2RlY29kZWQ7ICAgIC8qIENvdW50cyBjb21wbGV0ZWQg
ZnJhbWVzIGZvciBhbmltYXRlZCBHSUZzICovCisgICAgdW5zaWduZWQgZ2xvYmFsX2NvbG9ybWFw
X3NpemU7ICAgICAgIC8qIFNpemUgb2YgZ2xvYmFsIGNvbG9ybWFwIGFycmF5ICovCisgICAgdW5z
aWduZWQgZ2xvYmFsX2NvbG9ybWFwX3Bvc2l0aW9uOyAgIC8qIFBvc2l0aW9uIG9mIHRoZSBmaXJz
dCBieXRlIG9mIGdsb2JhbCBjb2xvcm1hcCBpbiBkYXRhIHN0cmVhbSAqLworICAgIGludCBpbWFn
ZXNfZGF0YV9jb21wbGV0ZTsgICAvKiBDb3VudHMgY29tcGxldGVkIGZyYW1lcyBmb3IgYW5pbWF0
ZWQgR0lGcyAqLwogICAgIGludCBpbWFnZXNfY291bnQ7ICAgICAgICAgICAvKiBDb3VudGVkIGFs
bCBmcmFtZXMgc2VlbiBzbyBmYXIgKGluY2x1ZGluZyBpbmNvbXBsZXRlIGZyYW1lcykgKi8KICAg
ICBpbnQgbG9vcF9jb3VudDsgICAgICAgICAgICAgLyogTmV0c2NhcGUgc3BlY2lmaWMgZXh0ZW5z
aW9uIGJsb2NrIHRvIGNvbnRyb2wKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhlIG51bWJlciBvZiBhbmltYXRpb24gbG9vcHMgYSBHSUYgcmVuZGVycy4gKi8KKyAgICBib29s
IGltYWdlX2NvbXBsZXRlOyAgICAgICAgLyogVHJ1ZSBpZiBlbnRpcmUgaW1hZ2UgaXMgcGFyc2Vk
IGFuZCB0aGUgZW5kIGlzIHJlYWNoZWQgKi8KICAgICAKLSAgICAvLyBOb3QgcmVhbGx5IGdsb2Jh
bCwgYnV0IGNvbnZlbmllbnQgdG8gbG9jYXRlIGhlcmUuCi0gICAgaW50IGNvdW50OyAgICAgICAg
ICAgICAgICAgIC8qIFJlbWFpbmluZyAjIGJ5dGVzIGluIHN1Yi1ibG9jayAqLwotICAgIAotICAg
IEdJRkZyYW1lUmVhZGVyKiBmcmFtZV9yZWFkZXI7Ci0KLSAgICBHSUZJbWFnZVJlYWRlcihXZWJD
b3JlOjpHSUZJbWFnZURlY29kZXIqIGNsaWVudCA9IDApIHsKLSAgICAgICAgY2xpZW50cHRyID0g
Y2xpZW50OwotICAgICAgICBzdGF0ZSA9IGdpZl90eXBlOwotICAgICAgICBieXRlc190b19jb25z
dW1lID0gNjsKLSAgICAgICAgYnl0ZXNfaW5faG9sZCA9IDA7Ci0gICAgICAgIGZyYW1lX3JlYWRl
ciA9IDA7Ci0gICAgICAgIGdsb2JhbF9jb2xvcm1hcCA9IDA7Ci0KLSAgICAgICAgc2NyZWVuX2Jn
Y29sb3IgPSB2ZXJzaW9uID0gMDsKLSAgICAgICAgc2NyZWVuX3dpZHRoID0gc2NyZWVuX2hlaWdo
dCA9IDA7Ci0gICAgICAgIGdsb2JhbF9jb2xvcm1hcF9zaXplID0gaW1hZ2VzX2RlY29kZWQgPSBp
bWFnZXNfY291bnQgPSAwOwotICAgICAgICBsb29wX2NvdW50ID0gY0xvb3BDb3VudE5vdFNlZW47
Ci0gICAgICAgIGNvdW50ID0gMDsKLSAgICB9Ci0KLSAgICB+R0lGSW1hZ2VSZWFkZXIoKSB7Ci0g
ICAgICAgIGRlbGV0ZSBbXWdsb2JhbF9jb2xvcm1hcDsKLSAgICAgICAgZ2xvYmFsX2NvbG9ybWFw
ID0gMDsKLSAgICAgICAgZGVsZXRlIGZyYW1lX3JlYWRlcjsKLSAgICAgICAgZnJhbWVfcmVhZGVy
ID0gMDsKLSAgICB9Ci0KLSAgICBib29sIHJlYWQoY29uc3QgdW5zaWduZWQgY2hhciAqIGJ1Ziwg
dW5zaWduZWQgaW50IG51bWJ5dGVzLCAKLSAgICAgICAgICAgICAgV2ViQ29yZTo6R0lGSW1hZ2VE
ZWNvZGVyOjpHSUZRdWVyeSBxdWVyeSA9IFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6R0lGRnVs
bFF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSA9IC0xKTsKKyAgICAvLyBHSUYgaW1hZ2UgY29u
dGVudCB0byBkZWNvZGUuCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcmF3X2RhdGE7CiAKLXBy
aXZhdGU6Ci0gICAgYm9vbCBvdXRwdXRfcm93KCk7Ci0gICAgYm9vbCBkb19sencoY29uc3QgdW5z
aWduZWQgY2hhciAqcSk7CisgICAgLy8gVGhlIGRlY29kZSBjb250ZXh0IGZvciB0aGUgY3VycmVu
dCBmcmFtZSBiZWluZyBwYXJzZWQuCisgICAgT3duUHRyPEdJRkZyYW1lQ29udGV4dD4gY3VycmVu
dF9mcmFtZTsKKworICAgIC8vIENvbnRhaW5zIGRlY29kZSBjb250ZXh0IGZvciBmdWxseSBwYXJz
ZWQgZnJhbWVzLgorICAgIERlcXVlPE93blB0cjxHSUZGcmFtZUNvbnRleHQ+ID4gcHJldmlvdXNf
ZnJhbWVzOworCisgICAgR0lGTFpXQ29udGV4dCBsendfY29udGV4dDsKKworICAgIC8vIFNpbmds
ZSBzY2FubGluZSB0ZW1wb3JhcnkgYnVmZmVyLgorICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBy
b3didWY7CiB9OwogCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwCmluZGV4IDZiN2VjYzk2YjI1ZGFmNTU3ZTllYjE2ZjYyZWRlYzE0ZDY0
NTI3NjkuLjcwZGNiZjVhMzJmMzE2ZTQyYjk2Y2I4NmQ2NGRkNmU3NTMxOTQ3OGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTY2MCw2ICs2NjAsNyBAQAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAndGVzdHMvRXZlbnRMaXN0ZW5lclRlc3QuY3BwJywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL0Zha2VXZWJQbHVnaW4uY3BwJywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL0ZyYW1lVGVzdEhlbHBlcnMuY3BwJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL0dJRkltYWdlRGVjb2RlclRl
c3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL0lEQkJpbmRp
bmdVdGlsaXRpZXNUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0
ZXN0cy9JREJSZXF1ZXN0VGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAndGVzdHMvTGV2ZWxEQlRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmlu
ZGV4IGQ1ODExMjg4Y2ZlNGNmMzM3YWU0NzZhM2Q1NzI4N2ExYTEzMzFjMjkuLjNiMGE3YTUzZTU4
MjNjNzFjYmU2ODJiNTcwNzRkZjU2ZjE0MTBjMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwaQpAQCAtNzIsNiArNzIsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0ZyYW1lTG9hZGVyQ2xp
ZW50SW1wbFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9GcmFtZVRlc3RIZWxwZXJzLmNw
cCcsCiAgICAgICAgICAgICAndGVzdHMvRnJhbWVUZXN0SGVscGVycy5oJywKKyAgICAgICAgICAg
ICd0ZXN0cy9HSUZJbWFnZURlY29kZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvR3Jh
cGhpY3NMYXllckNocm9taXVtVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0lEQkFib3J0
T25Db3JydXB0VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0lEQkJpbmRpbmdVdGlsaXRp
ZXNUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0dJ
RkltYWdlRGVjb2RlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9HSUZJ
bWFnZURlY29kZXJUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZGMzMGU0NmE2ODIwNDllMjZhYmE0MDQ4
MzMyODg3ZTIwZTc5Njg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9HSUZJbWFnZURlY29kZXJUZXN0LmNwcApAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgIkdJRkltYWdlRGVjb2Rlci5oIgorCisjaW5jbHVkZSAi
RmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPGd0ZXN0
L2d0ZXN0Lmg+CisjaW5jbHVkZSA8cHVibGljL1dlYkRhdGEuaD4KKyNpbmNsdWRlIDxwdWJsaWMv
V2ViU2l6ZS5oPgorI2luY2x1ZGUgPHdlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0Lmg+Cisj
aW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworbmFtZXNw
YWNlIHsKKworc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiByZWFkRmlsZShjb25zdCBj
aGFyKiBmaWxlTmFtZSkKK3sKKyAgICBTdHJpbmcgZmlsZVBhdGggPSB3ZWJraXRfc3VwcG9ydDo6
R2V0V2ViS2l0Um9vdERpcigpOworICAgIGZpbGVQYXRoLmFwcGVuZChmaWxlTmFtZSk7CisKKyAg
ICBsb25nIGxvbmcgZmlsZVNpemU7CisgICAgaWYgKCFnZXRGaWxlU2l6ZShmaWxlUGF0aCwgZmls
ZVNpemUpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5k
bGUgPSBvcGVuRmlsZShmaWxlUGF0aCwgT3BlbkZvclJlYWQpOworICAgIGludCBmaWxlTGVuZ3Ro
ID0gc3RhdGljX2Nhc3Q8aW50PihmaWxlU2l6ZSk7CisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcihm
aWxlTGVuZ3RoKTsKKyAgICByZWFkRnJvbUZpbGUoaGFuZGxlLCBidWZmZXIuZGF0YSgpLCBmaWxl
TGVuZ3RoKTsKKyAgICBjbG9zZUZpbGUoaGFuZGxlKTsKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVy
OjphZG9wdFZlY3RvcihidWZmZXIpOworfQorCitURVNUKEdJRkltYWdlRGVjb2RlclRlc3QsIGRl
Y29kZVR3b0ZyYW1lcykKK3sKKyAgICBPd25QdHI8R0lGSW1hZ2VEZWNvZGVyPiBkZWNvZGVyKGFk
b3B0UHRyKG5ldyBHSUZJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhTm90UHJlbXVsdGlw
bGllZCwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCkpKTsKKworICAg
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSByZWFkRmlsZSgiL0xheW91dFRlc3RzL2Zhc3Qv
aW1hZ2VzL3Jlc291cmNlcy9hbmltYXRlZC5naWYiKTsKKyAgICBBU1NFUlRfVFJVRShkYXRhLmdl
dCgpKTsKKyAgICBkZWNvZGVyLT5zZXREYXRhKGRhdGEuZ2V0KCksIHRydWUpOworICAgIEVYUEVD
VF9FUShjQW5pbWF0aW9uTG9vcE9uY2UsIGRlY29kZXItPnJlcGV0aXRpb25Db3VudCgpKTsKKwor
ICAgIEltYWdlRnJhbWUqIGZyYW1lID0gZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KDApOwor
ICAgIEVYUEVDVF9FUShJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlLCBmcmFtZS0+c3RhdHVzKCkp
OworICAgIEVYUEVDVF9FUSgxNiwgZnJhbWUtPmdldFNrQml0bWFwKCkud2lkdGgoKSk7CisgICAg
RVhQRUNUX0VRKDE2LCBmcmFtZS0+Z2V0U2tCaXRtYXAoKS5oZWlnaHQoKSk7CisKKyAgICBmcmFt
ZSA9IGRlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleCgxKTsKKyAgICBFWFBFQ1RfRVEoSW1hZ2VG
cmFtZTo6RnJhbWVDb21wbGV0ZSwgZnJhbWUtPnN0YXR1cygpKTsKKyAgICBFWFBFQ1RfRVEoMTYs
IGZyYW1lLT5nZXRTa0JpdG1hcCgpLndpZHRoKCkpOworICAgIEVYUEVDVF9FUSgxNiwgZnJhbWUt
PmdldFNrQml0bWFwKCkuaGVpZ2h0KCkpOworCisgICAgRVhQRUNUX0VRKDJ1LCBkZWNvZGVyLT5m
cmFtZUNvdW50KCkpOworICAgIEVYUEVDVF9FUShjQW5pbWF0aW9uTG9vcEluZmluaXRlLCBkZWNv
ZGVyLT5yZXBldGl0aW9uQ291bnQoKSk7Cit9CisKK1RFU1QoR0lGSW1hZ2VEZWNvZGVyVGVzdCwg
cGFyc2VBbmREZWNvZGUpCit7CisgICAgT3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gZGVjb2Rlcihh
ZG9wdFB0cihuZXcgR0lGSW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRp
cGxpZWQsIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpKSk7CisKKyAg
ICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhID0gcmVhZEZpbGUoIi9MYXlvdXRUZXN0cy9mYXN0
L2ltYWdlcy9yZXNvdXJjZXMvYW5pbWF0ZWQuZ2lmIik7CisgICAgQVNTRVJUX1RSVUUoZGF0YS5n
ZXQoKSk7CisgICAgZGVjb2Rlci0+c2V0RGF0YShkYXRhLmdldCgpLCB0cnVlKTsKKyAgICBFWFBF
Q1RfRVEoY0FuaW1hdGlvbkxvb3BPbmNlLCBkZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKSk7CisK
KyAgICAvLyBUaGlzIGNhbGwgd2lsbCBwYXJzZSB0aGUgZW50aXJlIGZpbGUuCisgICAgRVhQRUNU
X0VRKDJ1LCBkZWNvZGVyLT5mcmFtZUNvdW50KCkpOworICAgIEVYUEVDVF9FUShjQW5pbWF0aW9u
TG9vcEluZmluaXRlLCBkZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKSk7CisKKyAgICBJbWFnZUZy
YW1lKiBmcmFtZSA9IGRlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleCgwKTsKKyAgICBFWFBFQ1Rf
RVEoSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSwgZnJhbWUtPnN0YXR1cygpKTsKKyAgICBFWFBF
Q1RfRVEoMTYsIGZyYW1lLT5nZXRTa0JpdG1hcCgpLndpZHRoKCkpOworICAgIEVYUEVDVF9FUSgx
NiwgZnJhbWUtPmdldFNrQml0bWFwKCkuaGVpZ2h0KCkpOworCisgICAgZnJhbWUgPSBkZWNvZGVy
LT5mcmFtZUJ1ZmZlckF0SW5kZXgoMSk7CisgICAgRVhQRUNUX0VRKEltYWdlRnJhbWU6OkZyYW1l
Q29tcGxldGUsIGZyYW1lLT5zdGF0dXMoKSk7CisgICAgRVhQRUNUX0VRKDE2LCBmcmFtZS0+Z2V0
U2tCaXRtYXAoKS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMTYsIGZyYW1lLT5nZXRTa0JpdG1h
cCgpLmhlaWdodCgpKTsKK30KKworVEVTVChHSUZJbWFnZURlY29kZXJUZXN0LCBwYXJzZUJ5dGVC
eUJ5dGUpCit7CisgICAgT3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gZGVjb2RlcihhZG9wdFB0cihu
ZXcgR0lGSW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxpZWQsIElt
YWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpKSk7CisKKyAgICBSZWZQdHI8
U2hhcmVkQnVmZmVyPiBkYXRhID0gcmVhZEZpbGUoIi9MYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9y
ZXNvdXJjZXMvYW5pbWF0ZWQuZ2lmIik7CisgICAgQVNTRVJUX1RSVUUoZGF0YS5nZXQoKSk7CisK
KyAgICBzaXplX3QgZnJhbWVDb3VudCA9IDA7CisKKyAgICAvLyBQYXNzIGRhdGEgdG8gZGVjb2Rl
ciBieXRlIGJ5IGJ5dGUuCisgICAgZm9yICh1bnNpZ25lZCBsZW5ndGggPSAxOyBsZW5ndGggPD0g
ZGF0YS0+c2l6ZSgpOyArK2xlbmd0aCkgeworICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiB0
ZW1wRGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEtPmRhdGEoKSwgbGVuZ3RoKTsKKyAg
ICAgICAgZGVjb2Rlci0+c2V0RGF0YSh0ZW1wRGF0YS5nZXQoKSwgbGVuZ3RoID09IGRhdGEtPnNp
emUoKSk7CisKKyAgICAgICAgRVhQRUNUX0xFKGZyYW1lQ291bnQsIGRlY29kZXItPmZyYW1lQ291
bnQoKSk7CisgICAgICAgIGZyYW1lQ291bnQgPSBkZWNvZGVyLT5mcmFtZUNvdW50KCk7CisgICAg
fQorCisgICAgRVhQRUNUX0VRKDJ1LCBkZWNvZGVyLT5mcmFtZUNvdW50KCkpOworICAgIEVYUEVD
VF9FUShjQW5pbWF0aW9uTG9vcEluZmluaXRlLCBkZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKSk7
Cit9CisKK1RFU1QoR0lGSW1hZ2VEZWNvZGVyVGVzdCwgcGFyc2VBbmREZWNvZGVCeXRlQnlCeXRl
KQoreworICAgIE93blB0cjxHSUZJbWFnZURlY29kZXI+IGRlY29kZXIoYWRvcHRQdHIobmV3IEdJ
RkltYWdlRGVjb2RlcihJbWFnZVNvdXJjZTo6QWxwaGFOb3RQcmVtdWx0aXBsaWVkLCBJbWFnZVNv
dXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVBcHBsaWVkKSkpOworCisgICAgUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gZGF0YSA9IHJlYWRGaWxlKCIvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvcmVzb3Vy
Y2VzL2FuaW1hdGVkLWdpZi13aXRoLW9mZnNldHMuZ2lmIik7CisgICAgQVNTRVJUX1RSVUUoZGF0
YS5nZXQoKSk7CisKKyAgICBzaXplX3QgZnJhbWVDb3VudCA9IDA7CisgICAgc2l6ZV90IGZyYW1l
c0RlY29kZWQgPSAwOworCisgICAgLy8gUGFzcyBkYXRhIHRvIGRlY29kZXIgYnl0ZSBieSBieXRl
LgorICAgIGZvciAodW5zaWduZWQgbGVuZ3RoID0gMTsgbGVuZ3RoIDw9IGRhdGEtPnNpemUoKTsg
KytsZW5ndGgpIHsKKyAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdGVtcERhdGEgPSBTaGFy
ZWRCdWZmZXI6OmNyZWF0ZShkYXRhLT5kYXRhKCksIGxlbmd0aCk7CisgICAgICAgIGRlY29kZXIt
PnNldERhdGEodGVtcERhdGEuZ2V0KCksIGxlbmd0aCA9PSBkYXRhLT5zaXplKCkpOworCisgICAg
ICAgIEVYUEVDVF9MRShmcmFtZUNvdW50LCBkZWNvZGVyLT5mcmFtZUNvdW50KCkpOworICAgICAg
ICBmcmFtZUNvdW50ID0gZGVjb2Rlci0+ZnJhbWVDb3VudCgpOworCisgICAgICAgIEltYWdlRnJh
bWUqIGZyYW1lID0gZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGZyYW1lQ291bnQgLSAxKTsK
KyAgICAgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFt
ZUNvbXBsZXRlICYmIGZyYW1lc0RlY29kZWQgPCBmcmFtZUNvdW50KQorICAgICAgICAgICAgKytm
cmFtZXNEZWNvZGVkOworICAgIH0KKworICAgIEVYUEVDVF9FUSg1dSwgZGVjb2Rlci0+ZnJhbWVD
b3VudCgpKTsKKyAgICBFWFBFQ1RfRVEoNXUsIGZyYW1lc0RlY29kZWQpOworICAgIEVYUEVDVF9F
UShjQW5pbWF0aW9uTG9vcEluZmluaXRlLCBkZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKSk7Cit9
CisKKy8vIFNlY29uZCBmcmFtZSBpbiB0aGUgZmlsZSBpcyBicm9rZW4gYnV0IHRlc3QgdGhhdCBm
aXJzdCBmcmFtZSBjYW4gYmUgZGVjb2RlZC4KK1RFU1QoR0lGSW1hZ2VEZWNvZGVyVGVzdCwgYnJv
a2VuU2Vjb25kRnJhbWUpCit7CisgICAgT3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gZGVjb2Rlcihh
ZG9wdFB0cihuZXcgR0lGSW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRp
cGxpZWQsIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpKSk7CisKKyAg
ICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhID0gcmVhZEZpbGUoIi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL2RhdGEvYnJva2VuLmdpZiIpOworICAgIEFTU0VSVF9UUlVFKGRhdGEuZ2V0
KCkpOworICAgIGRlY29kZXItPnNldERhdGEoZGF0YS5nZXQoKSwgdHJ1ZSk7CisKKyAgICBFWFBF
Q1RfRVEoMXUsIGRlY29kZXItPmZyYW1lQ291bnQoKSk7CisgICAgRVhQRUNUX0VRKGNBbmltYXRp
b25Mb29wSW5maW5pdGUsIGRlY29kZXItPnJlcGV0aXRpb25Db3VudCgpKTsKKworICAgIEltYWdl
RnJhbWUqIGZyYW1lID0gZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KDApOworICAgIEVYUEVD
VF9FUShJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlLCBmcmFtZS0+c3RhdHVzKCkpOworICAgIEVY
UEVDVF9FUSgxNiwgZnJhbWUtPmdldFNrQml0bWFwKCkud2lkdGgoKSk7CisgICAgRVhQRUNUX0VR
KDE2LCBmcmFtZS0+Z2V0U2tCaXRtYXAoKS5oZWlnaHQoKSk7CisKKyAgICBmcmFtZSA9IGRlY29k
ZXItPmZyYW1lQnVmZmVyQXRJbmRleCgxKTsKKyAgICBFWFBFQ1RfRkFMU0UoZnJhbWUpOworfQor
Cit9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9kYXRhL2Jyb2tlbi5naWYgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvYnJv
a2VuLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5lM2E3YzRlYmU3ZDliZWE5ODM5NzVmODI5YTJlZGM4ZTU1ZDFm
NzZkCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCA5MDYKemNtWj93YmhFSGI2a3Jmd198Q3c8a2R9
NmFWSjQ2czEqMEpfMHoqTFlLZXdOMk5VKmJHZlVBKzcwVyV7bzJvISZeCnp1eio1QjJTazlmMj9L
e0wxMmN6PSRBJCQ1bj5tRUZWb3EjV2MoYDNhKj12cisjempYUDg1dSEzPyV3NEdZUCFEYApLTyZj
UlZaUG95UChJdmVBCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186754</attachid>
            <date>2013-02-05 21:47:51 -0800</date>
            <delta_ts>2013-02-05 21:49:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98098-20130205214428.patch</filename>
            <type>text/plain</type>
            <size>78974</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxOTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzQ4NmY5NzQxOTJmYTRm
NjZlNGYxYTdlOWI2NjIwMmY2YjQzNWY3ZS4uZjRhYWRkMjNjMjYyOWMxM2E5MDljYWUwOGRhYjhl
MmViNWM4ZjBmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEzLTAyLTA1ICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUGFyc2UgR0lGIGltYWdlcyB3
aXRob3V0IGZ1bGwgZGVjb2RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTk4MDk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBpcyB0aGUgZmlyc3QgY2hhbmdlIHRvIGltcGxlbWVudCBuZXcgR0lG
IHBhcnNpbmcgbG9naWMgaW4gR0lGSW1hZ2VSZWFkZXIuCisgICAgICAgIFRoaXMgY2hhbmdlIGlz
IG1lYW50IHRvIGZpeCBzdHlsZSB2aW9sYXRpb25zIGluIHRoZSBmaWxlIHN1Y2ggdGhhdCBsYXRl
cgorICAgICAgICBwYXRjaGVzIHdpbGwgYmUgZWFzaWVyIHRvIHJldmlldy4KKworICAgICAgICBU
aGVyZSBpcyBubyBjaGFuZ2UgaW4gbG9naWMgYXQgYWxsLiBKdXN0IHN0eWxlIGZpeGVzLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2dpZi9HSUZJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNv
ZGVyOjpmcmFtZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6cmVw
ZXRpdGlvbkNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6aGF2ZURl
Y29kZWRSb3cpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVC
dWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJl
YWRlci5jcHA6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6b3V0cHV0Um93KToKKyAgICAgICAg
KEdJRkltYWdlUmVhZGVyOjpkb0xaVyk6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6cmVhZCk6
CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmg6
CisgICAgICAgIChHSUZGcmFtZUNvbnRleHQpOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0OjpH
SUZGcmFtZUNvbnRleHQpOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0Ojp+R0lGRnJhbWVDb250
ZXh0KToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpHSUZJbWFnZVJlYWRlcik6CisgICAgICAg
IChHSUZJbWFnZVJlYWRlcjo6fkdJRkltYWdlUmVhZGVyKToKKyAgICAgICAgKEdJRkltYWdlUmVh
ZGVyKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjppbWFnZXNDb3VudCk6CisgICAgICAgIChH
SUZJbWFnZVJlYWRlcjo6bG9vcENvdW50KToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpnbG9i
YWxDb2xvcm1hcCk6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6Z2xvYmFsQ29sb3JtYXBTaXpl
KToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpmcmFtZUNvbnRleHQpOgorCiAyMDEzLTAyLTA1
ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbVjhdIFJl
bW92ZSBkZXByZWNhdGVkVjhTdHJpbmcoKSBhbmQgZGVwcmVjYXRlZFY4SW50ZWdlcigpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1h
Z2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dp
Zi9HSUZJbWFnZURlY29kZXIuY3BwCmluZGV4IDhmYzRhOWE1MzA5ZmY4MTlkMWY4OThiMzM4MWE5
MWY3NzkxMmIxZTUuLjBjYjIyODg1Y2ViM2Q2YjE2YjIzNWY4MTliOThhMjViOTNiYWZkOGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJ
bWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCkBAIC04Nyw4ICs4Nyw4IEBAIHNpemVfdCBHSUZJ
bWFnZURlY29kZXI6OmZyYW1lQ291bnQoKQogICAgICAgICBHSUZJbWFnZVJlYWRlciByZWFkZXIo
MCk7CiAgICAgICAgIHJlYWRlci5yZWFkKChjb25zdCB1bnNpZ25lZCBjaGFyKiltX2RhdGEtPmRh
dGEoKSwgbV9kYXRhLT5zaXplKCksIEdJRkZyYW1lQ291bnRRdWVyeSwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KC0xKSk7CiAgICAgICAgIG1fYWxyZWFkeVNjYW5uZWRUaGlzRGF0YUZvckZyYW1lQ291
bnQgPSB0cnVlOwotICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKHJlYWRlci5pbWFn
ZXNfY291bnQpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlYWRlci5pbWFnZXNfY291
bnQ7ICsraSkKKyAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZShyZWFkZXIuaW1hZ2Vz
Q291bnQoKSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVhZGVyLmltYWdlc0NvdW50
KCk7ICsraSkKICAgICAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZVtpXS5zZXRQcmVtdWx0aXBs
eUFscGhhKG1fcHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgfQogCkBAIC0xMTYsOCArMTE2LDggQEAg
aW50IEdJRkltYWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50KCkgY29uc3QKICAgICAvLyBzaG91
bGQgY29udGludWUgdG8gdHJlYXQgaXQgYXMgYSAibG9vcCBvbmNlIiBhbmltYXRpb24uICBXZSBk
b24ndCBuZWVkCiAgICAgLy8gc3BlY2lhbCBjb2RlIGhlcmUgZWl0aGVyLCBiZWNhdXNlIGluIHRo
aXMgY2FzZSB3ZSdsbCBuZXZlciBjaGFuZ2UKICAgICAvLyB8bV9yZXBldGl0aW9uQ291bnR8IGZy
b20gaXRzIGRlZmF1bHQgdmFsdWUuCi0gICAgaWYgKG1fcmVhZGVyICYmIChtX3JlYWRlci0+bG9v
cF9jb3VudCAhPSBjTG9vcENvdW50Tm90U2VlbikpCi0gICAgICAgIG1fcmVwZXRpdGlvbkNvdW50
ID0gbV9yZWFkZXItPmxvb3BfY291bnQ7CisgICAgaWYgKG1fcmVhZGVyICYmIChtX3JlYWRlci0+
bG9vcENvdW50KCkgIT0gY0xvb3BDb3VudE5vdFNlZW4pKQorICAgICAgICBtX3JlcGV0aXRpb25D
b3VudCA9IG1fcmVhZGVyLT5sb29wQ291bnQoKTsKICAgICByZXR1cm4gbV9yZXBldGl0aW9uQ291
bnQ7CiB9CiAKQEAgLTE5OCwyOSArMTk4LDI5IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpkZWNv
ZGluZ0hhbHRlZCh1bnNpZ25lZCBieXRlc0xlZnQpCiAKIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpo
YXZlRGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBjaGFyKiByb3dCdWZm
ZXIsIHVuc2lnbmVkIGNoYXIqIHJvd0VuZCwgdW5zaWduZWQgcm93TnVtYmVyLCB1bnNpZ25lZCBy
ZXBlYXRDb3VudCwgYm9vbCB3cml0ZVRyYW5zcGFyZW50UGl4ZWxzKQogewotICAgIGNvbnN0IEdJ
RkZyYW1lUmVhZGVyKiBmcmFtZVJlYWRlciA9IG1fcmVhZGVyLT5mcmFtZV9yZWFkZXI7CisgICAg
Y29uc3QgR0lGRnJhbWVDb250ZXh0KiBmcmFtZUNvbnRleHQgPSBtX3JlYWRlci0+ZnJhbWVDb250
ZXh0KCk7CiAgICAgLy8gVGhlIHBpeGVsIGRhdGEgYW5kIGNvb3JkaW5hdGVzIHN1cHBsaWVkIHRv
IHVzIGFyZSByZWxhdGl2ZSB0byB0aGUgZnJhbWUncwogICAgIC8vIG9yaWdpbiB3aXRoaW4gdGhl
IGVudGlyZSBpbWFnZSBzaXplLCBpLmUuCi0gICAgLy8gKGZyYW1lUmVhZGVyLT54X29mZnNldCwg
ZnJhbWVSZWFkZXItPnlfb2Zmc2V0KS4gIFRoZXJlIGlzIG5vIGd1YXJhbnRlZQotICAgIC8vIHRo
YXQgKHJvd0VuZCAtIHJvd0J1ZmZlcikgPT0gKHNpemUoKS53aWR0aCgpIC0gZnJhbWVSZWFkZXIt
Pnhfb2Zmc2V0KSwgc28KKyAgICAvLyAoZnJhbWVDb250ZXh0LT54T2Zmc2V0LCBmcmFtZUNvbnRl
eHQtPnlPZmZzZXQpLiBUaGVyZSBpcyBubyBndWFyYW50ZWUKKyAgICAvLyB0aGF0IChyb3dFbmQg
LSByb3dCdWZmZXIpID09IChzaXplKCkud2lkdGgoKSAtIGZyYW1lQ29udGV4dC0+eE9mZnNldCks
IHNvCiAgICAgLy8gd2UgbXVzdCBlbnN1cmUgd2UgZG9uJ3QgcnVuIG9mZiB0aGUgZW5kIG9mIGVp
dGhlciB0aGUgc291cmNlIGRhdGEgb3IgdGhlCiAgICAgLy8gcm93J3MgWC1jb29yZGluYXRlcy4K
LSAgICBpbnQgeEJlZ2luID0gdXBwZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWFkZXItPnhfb2Zmc2V0
KTsKLSAgICBpbnQgeUJlZ2luID0gdXBwZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWFkZXItPnlfb2Zm
c2V0ICsgcm93TnVtYmVyKTsKLSAgICBpbnQgeEVuZCA9IGxvd2VyQm91bmRTY2FsZWRYKHN0ZDo6
bWluKHN0YXRpY19jYXN0PGludD4oZnJhbWVSZWFkZXItPnhfb2Zmc2V0ICsgKHJvd0VuZCAtIHJv
d0J1ZmZlcikpLCBzaXplKCkud2lkdGgoKSkgLSAxLCB4QmVnaW4gKyAxKSArIDE7Ci0gICAgaW50
IHlFbmQgPSBsb3dlckJvdW5kU2NhbGVkWShzdGQ6Om1pbihzdGF0aWNfY2FzdDxpbnQ+KGZyYW1l
UmVhZGVyLT55X29mZnNldCArIHJvd051bWJlciArIHJlcGVhdENvdW50KSwgc2l6ZSgpLmhlaWdo
dCgpKSAtIDEsIHlCZWdpbiArIDEpICsgMTsKKyAgICBpbnQgeEJlZ2luID0gdXBwZXJCb3VuZFNj
YWxlZFgoZnJhbWVDb250ZXh0LT54T2Zmc2V0KTsKKyAgICBpbnQgeUJlZ2luID0gdXBwZXJCb3Vu
ZFNjYWxlZFkoZnJhbWVDb250ZXh0LT55T2Zmc2V0ICsgcm93TnVtYmVyKTsKKyAgICBpbnQgeEVu
ZCA9IGxvd2VyQm91bmRTY2FsZWRYKHN0ZDo6bWluKHN0YXRpY19jYXN0PGludD4oZnJhbWVDb250
ZXh0LT54T2Zmc2V0ICsgKHJvd0VuZCAtIHJvd0J1ZmZlcikpLCBzaXplKCkud2lkdGgoKSkgLSAx
LCB4QmVnaW4gKyAxKSArIDE7CisgICAgaW50IHlFbmQgPSBsb3dlckJvdW5kU2NhbGVkWShzdGQ6
Om1pbihzdGF0aWNfY2FzdDxpbnQ+KGZyYW1lQ29udGV4dC0+eU9mZnNldCArIHJvd051bWJlciAr
IHJlcGVhdENvdW50KSwgc2l6ZSgpLmhlaWdodCgpKSAtIDEsIHlCZWdpbiArIDEpICsgMTsKICAg
ICBpZiAoIXJvd0J1ZmZlciB8fCAoeEJlZ2luIDwgMCkgfHwgKHlCZWdpbiA8IDApIHx8ICh4RW5k
IDw9IHhCZWdpbikgfHwgKHlFbmQgPD0geUJlZ2luKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICAvLyBHZXQgdGhlIGNvbG9ybWFwLgogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNvbG9y
TWFwOwogICAgIHVuc2lnbmVkIGNvbG9yTWFwU2l6ZTsKLSAgICBpZiAoZnJhbWVSZWFkZXItPmlz
X2xvY2FsX2NvbG9ybWFwX2RlZmluZWQpIHsKLSAgICAgICAgY29sb3JNYXAgPSBmcmFtZVJlYWRl
ci0+bG9jYWxfY29sb3JtYXA7Ci0gICAgICAgIGNvbG9yTWFwU2l6ZSA9ICh1bnNpZ25lZClmcmFt
ZVJlYWRlci0+bG9jYWxfY29sb3JtYXBfc2l6ZTsKKyAgICBpZiAoZnJhbWVDb250ZXh0LT5pc0xv
Y2FsQ29sb3JtYXBEZWZpbmVkKSB7CisgICAgICAgIGNvbG9yTWFwID0gZnJhbWVDb250ZXh0LT5s
b2NhbENvbG9ybWFwOworICAgICAgICBjb2xvck1hcFNpemUgPSAodW5zaWduZWQpZnJhbWVDb250
ZXh0LT5sb2NhbENvbG9ybWFwU2l6ZTsKICAgICB9IGVsc2UgewotICAgICAgICBjb2xvck1hcCA9
IG1fcmVhZGVyLT5nbG9iYWxfY29sb3JtYXA7Ci0gICAgICAgIGNvbG9yTWFwU2l6ZSA9IG1fcmVh
ZGVyLT5nbG9iYWxfY29sb3JtYXBfc2l6ZTsKKyAgICAgICAgY29sb3JNYXAgPSBtX3JlYWRlci0+
Z2xvYmFsQ29sb3JtYXAoKTsKKyAgICAgICAgY29sb3JNYXBTaXplID0gbV9yZWFkZXItPmdsb2Jh
bENvbG9ybWFwU2l6ZSgpOwogICAgIH0KICAgICBpZiAoIWNvbG9yTWFwKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTIzMyw4ICsyMzMsOCBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aGF2ZURl
Y29kZWRSb3codW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgY2hhciogcm93QnVmZgogICAg
IEltYWdlRnJhbWU6OlBpeGVsRGF0YSogY3VycmVudEFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcih4
QmVnaW4sIHlCZWdpbik7CiAgICAgLy8gV3JpdGUgb25lIHJvdydzIHdvcnRoIG9mIGRhdGEgaW50
byB0aGUgZnJhbWUuICAKICAgICBmb3IgKGludCB4ID0geEJlZ2luOyB4IDwgeEVuZDsgKyt4KSB7
Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgc291cmNlVmFsdWUgPSAqKHJvd0J1ZmZlciAr
IChtX3NjYWxlZCA/IG1fc2NhbGVkQ29sdW1uc1t4XSA6IHgpIC0gZnJhbWVSZWFkZXItPnhfb2Zm
c2V0KTsKLSAgICAgICAgaWYgKCghZnJhbWVSZWFkZXItPmlzX3RyYW5zcGFyZW50IHx8IChzb3Vy
Y2VWYWx1ZSAhPSBmcmFtZVJlYWRlci0+dHBpeGVsKSkgJiYgKHNvdXJjZVZhbHVlIDwgY29sb3JN
YXBTaXplKSkgeworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHNvdXJjZVZhbHVlID0gKihy
b3dCdWZmZXIgKyAobV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4KSAtIGZyYW1lQ29u
dGV4dC0+eE9mZnNldCk7CisgICAgICAgIGlmICgoIWZyYW1lQ29udGV4dC0+aXNUcmFuc3BhcmVu
dCB8fCAoc291cmNlVmFsdWUgIT0gZnJhbWVDb250ZXh0LT50cGl4ZWwpKSAmJiAoc291cmNlVmFs
dWUgPCBjb2xvck1hcFNpemUpKSB7CiAgICAgICAgICAgICBjb25zdCBzaXplX3QgY29sb3JJbmRl
eCA9IHN0YXRpY19jYXN0PHNpemVfdD4oc291cmNlVmFsdWUpICogMzsKICAgICAgICAgICAgIGJ1
ZmZlci5zZXRSR0JBKGN1cnJlbnRBZGRyZXNzLCBjb2xvck1hcFtjb2xvckluZGV4XSwgY29sb3JN
YXBbY29sb3JJbmRleCArIDFdLCBjb2xvck1hcFtjb2xvckluZGV4ICsgMl0sIDI1NSk7CiAgICAg
ICAgIH0gZWxzZSB7CkBAIC0zMzEsMTQgKzMzMSwxNCBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6
ZGVjb2RlKHVuc2lnbmVkIGhhbHRBdEZyYW1lLCBHSUZRdWVyeSBxdWVyeSkKIGJvb2wgR0lGSW1h
Z2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW5zaWduZWQgZnJhbWVJbmRleCkKIHsKICAgICAv
LyBJbml0aWFsaXplIHRoZSBmcmFtZSByZWN0IGluIG91ciBidWZmZXIuCi0gICAgY29uc3QgR0lG
RnJhbWVSZWFkZXIqIGZyYW1lUmVhZGVyID0gbV9yZWFkZXItPmZyYW1lX3JlYWRlcjsKLSAgICBJ
bnRSZWN0IGZyYW1lUmVjdChmcmFtZVJlYWRlci0+eF9vZmZzZXQsIGZyYW1lUmVhZGVyLT55X29m
ZnNldCwgZnJhbWVSZWFkZXItPndpZHRoLCBmcmFtZVJlYWRlci0+aGVpZ2h0KTsKKyAgICBjb25z
dCBHSUZGcmFtZUNvbnRleHQqIGZyYW1lQ29udGV4dCA9IG1fcmVhZGVyLT5mcmFtZUNvbnRleHQo
KTsKKyAgICBJbnRSZWN0IGZyYW1lUmVjdChmcmFtZUNvbnRleHQtPnhPZmZzZXQsIGZyYW1lQ29u
dGV4dC0+eU9mZnNldCwgZnJhbWVDb250ZXh0LT53aWR0aCwgZnJhbWVDb250ZXh0LT5oZWlnaHQp
OwogCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBmcmFtZVJlY3QgZG9lc24ndCBleHRlbmQgb3V0c2lk
ZSB0aGUgYnVmZmVyLgogICAgIGlmIChmcmFtZVJlY3QubWF4WCgpID4gc2l6ZSgpLndpZHRoKCkp
Ci0gICAgICAgIGZyYW1lUmVjdC5zZXRXaWR0aChzaXplKCkud2lkdGgoKSAtIGZyYW1lUmVhZGVy
LT54X29mZnNldCk7CisgICAgICAgIGZyYW1lUmVjdC5zZXRXaWR0aChzaXplKCkud2lkdGgoKSAt
IGZyYW1lQ29udGV4dC0+eE9mZnNldCk7CiAgICAgaWYgKGZyYW1lUmVjdC5tYXhZKCkgPiBzaXpl
KCkuaGVpZ2h0KCkpCi0gICAgICAgIGZyYW1lUmVjdC5zZXRIZWlnaHQoc2l6ZSgpLmhlaWdodCgp
IC0gZnJhbWVSZWFkZXItPnlfb2Zmc2V0KTsKKyAgICAgICAgZnJhbWVSZWN0LnNldEhlaWdodChz
aXplKCkuaGVpZ2h0KCkgLSBmcmFtZUNvbnRleHQtPnlPZmZzZXQpOwogCiAgICAgSW1hZ2VGcmFt
ZSogY29uc3QgYnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKICAgICBp
bnQgbGVmdCA9IHVwcGVyQm91bmRTY2FsZWRYKGZyYW1lUmVjdC54KCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFn
ZVJlYWRlci5jcHAKaW5kZXggNzQxNGU5ODE4NTkwN2MwZjY4N2IzN2M5MzUwNTMxOTI3ZmZiODgz
Yi4uNWVkY2ZlZTIyNzY1MmFiZDlhNTQ2Y2RjYTQ3N2Q0M2E4OGE5NmE1MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lG
SW1hZ2VSZWFkZXIuY3BwCkBAIC04MSw4NjQgKzgxLDgyMCBAQCBtYWlsaW5nIGFkZHJlc3MuCiAK
IHVzaW5nIFdlYkNvcmU6OkdJRkltYWdlRGVjb2RlcjsKIAotLy8gRGVmaW5lIHRoZSBNb3ppbGxh
IG1hY3JvIHNldHVwIHNvIHRoYXQgd2UgY2FuIGxlYXZlIHRoZSBtYWNyb3MgYWxvbmUuCi0jZGVm
aW5lIFBSX0JFR0lOX01BQ1JPICBkbyB7Ci0jZGVmaW5lIFBSX0VORF9NQUNSTyAgICB9IHdoaWxl
ICgwKQotCi0vKgotICogR0VUTihuLCBzKSByZXF1ZXN0cyBhdCBsZWFzdCAnbicgYnl0ZXMgYXZh
aWxhYmxlIGZyb20gJ3EnLCBhdCBzdGFydCBvZiBzdGF0ZSAncycKLSAqCi0gKiBOb3RlLCB0aGUg
aG9sZCB3aWxsIG5ldmVyIG5lZWQgdG8gYmUgYmlnZ2VyIHRoYW4gMjU2IGJ5dGVzIHRvIGdhdGhl
ciB1cCBpbiB0aGUgaG9sZCwKLSAqIGFzIGVhY2ggR0lGIGJsb2NrIChleGNlcHQgY29sb3JtYXBz
KSBjYW4gbmV2ZXIgYmUgYmlnZ2VyIHRoYW4gMjU2IGJ5dGVzLgotICogQ29sb3JtYXBzIGFyZSBk
aXJlY3RseSBjb3BpZWQgaW4gdGhlIHJlc3AuIGdsb2JhbF9jb2xvcm1hcCBvciBkeW5hbWljYWxs
eSBhbGxvY2F0ZWQgbG9jYWxfY29sb3JtYXAuCi0gKiBTbyBhIGZpeGVkIGJ1ZmZlciBpbiBHSUZJ
bWFnZVJlYWRlciBpcyBnb29kIGVub3VnaC4KLSAqIFRoaXMgYnVmZmVyIGlzIG9ubHkgbmVlZGVk
IHRvIGNvcHkgbGVmdC1vdmVyIGRhdGEgZnJvbSBvbmUgR2lmV3JpdGUgY2FsbCB0byB0aGUgbmV4
dAotICovCi0jZGVmaW5lIEdFVE4obixzKSAgICAgICAgICAgICAgICAgICAgXAotICBQUl9CRUdJ
Tl9NQUNSTyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBieXRlc190b19jb25zdW1lID0gKG4p
OyAgICAgIFwKLSAgICBzdGF0ZSA9IChzKTsgICAgICAgICAgICAgICAgIFwKLSAgUFJfRU5EX01B
Q1JPCi0KLS8qIEdldCBhIDE2LWJpdCB2YWx1ZSBzdG9yZWQgaW4gbGl0dGxlLWVuZGlhbiBmb3Jt
YXQgKi8KKy8vIEdFVE4obiwgcykgcmVxdWVzdHMgYXQgbGVhc3QgJ24nIGJ5dGVzIGF2YWlsYWJs
ZSBmcm9tICdxJywgYXQgc3RhcnQgb2Ygc3RhdGUgJ3MnLgorLy8KKy8vIE5vdGUsIHRoZSBob2xk
IHdpbGwgbmV2ZXIgbmVlZCB0byBiZSBiaWdnZXIgdGhhbiAyNTYgYnl0ZXMgdG8gZ2F0aGVyIHVw
IGluIHRoZSBob2xkLAorLy8gYXMgZWFjaCBHSUYgYmxvY2sgKGV4Y2VwdCBjb2xvcm1hcHMpIGNh
biBuZXZlciBiZSBiaWdnZXIgdGhhbiAyNTYgYnl0ZXMuCisvLyBDb2xvcm1hcHMgYXJlIGRpcmVj
dGx5IGNvcGllZCBpbiB0aGUgcmVzcC4gZ2xvYmFsX2NvbG9ybWFwIG9yIGR5bmFtaWNhbGx5IGFs
bG9jYXRlZCBsb2NhbF9jb2xvcm1hcC4KKy8vIFNvIGEgZml4ZWQgYnVmZmVyIGluIEdJRkltYWdl
UmVhZGVyIGlzIGdvb2QgZW5vdWdoLgorLy8gVGhpcyBidWZmZXIgaXMgb25seSBuZWVkZWQgdG8g
Y29weSBsZWZ0LW92ZXIgZGF0YSBmcm9tIG9uZSBHaWZXcml0ZSBjYWxsIHRvIHRoZSBuZXh0Cisj
ZGVmaW5lIEdFVE4obiwgcykgXAorICAgIGRvIHsgXAorICAgICAgICBtX2J5dGVzVG9Db25zdW1l
ID0gKG4pOyBcCisgICAgICAgIG1fc3RhdGUgPSAocyk7IFwKKyAgICB9IFwKKyAgICB3aGlsZSAo
MCkKKworLy8gR2V0IGEgMTYtYml0IHZhbHVlIHN0b3JlZCBpbiBsaXR0bGUtZW5kaWFuIGZvcm1h
dC4KICNkZWZpbmUgR0VUSU5UMTYocCkgICAoKHApWzFdPDw4fChwKVswXSkKIAotLy8qKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioKIC8vIFNlbmQgdGhlIGRhdGEgdG8gdGhlIGRpc3BsYXkgZnJvbnQtZW5k
LgotYm9vbCBHSUZJbWFnZVJlYWRlcjo6b3V0cHV0X3JvdygpCitib29sIEdJRkltYWdlUmVhZGVy
OjpvdXRwdXRSb3coKQogewotICBHSUZGcmFtZVJlYWRlciogZ3MgPSBmcmFtZV9yZWFkZXI7Ci0K
LSAgaW50IGRyb3dfc3RhcnQsIGRyb3dfZW5kOwotCi0gIGRyb3dfc3RhcnQgPSBkcm93X2VuZCA9
IGdzLT5pcm93OwotCi0gIC8qCi0gICAqIEhhZWJlcmxpLWluc3BpcmVkIGhhY2sgZm9yIGludGVy
bGFjZWQgR0lGczogUmVwbGljYXRlIGxpbmVzIHdoaWxlCi0gICAqIGRpc3BsYXlpbmcgdG8gZGlt
aW5pc2ggdGhlICJ2ZW5ldGlhbi1ibGluZCIgZWZmZWN0IGFzIHRoZSBpbWFnZSBpcwotICAgKiBs
b2FkZWQuIEFkanVzdCBwaXhlbCB2ZXJ0aWNhbCBwb3NpdGlvbnMgdG8gYXZvaWQgdGhlIGFwcGVh
cmFuY2Ugb2YgdGhlCi0gICAqIGltYWdlIGNyYXdsaW5nIHVwIHRoZSBzY3JlZW4gYXMgc3VjY2Vz
c2l2ZSBwYXNzZXMgYXJlIGRyYXduLgotICAgKi8KLSAgaWYgKGdzLT5wcm9ncmVzc2l2ZV9kaXNw
bGF5ICYmIGdzLT5pbnRlcmxhY2VkICYmIGdzLT5pcGFzcyA8IDQpIHsKLSAgICB1bnNpZ25lZCBy
b3dfZHVwID0gMCwgcm93X3NoaWZ0ID0gMDsKLQotICAgIHN3aXRjaCAoZ3MtPmlwYXNzKSB7Ci0g
ICAgY2FzZSAxOgotICAgICAgcm93X2R1cCA9IDc7Ci0gICAgICByb3dfc2hpZnQgPSAzOwotICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgcm93X2R1cCA9IDM7Ci0gICAgICByb3dfc2hp
ZnQgPSAxOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAzOgotICAgICAgcm93X2R1cCA9IDE7Ci0g
ICAgICByb3dfc2hpZnQgPSAwOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJy
ZWFrOwotICAgIH0KKyAgICBpbnQgZHJvd1N0YXJ0ID0gbV9mcmFtZUNvbnRleHQtPmlyb3c7Cisg
ICAgaW50IGRyb3dFbmQgPSBtX2ZyYW1lQ29udGV4dC0+aXJvdzsKKworICAgIC8vIEhhZWJlcmxp
LWluc3BpcmVkIGhhY2sgZm9yIGludGVybGFjZWQgR0lGczogUmVwbGljYXRlIGxpbmVzIHdoaWxl
CisgICAgLy8gZGlzcGxheWluZyB0byBkaW1pbmlzaCB0aGUgInZlbmV0aWFuLWJsaW5kIiBlZmZl
Y3QgYXMgdGhlIGltYWdlIGlzCisgICAgLy8gbG9hZGVkLiBBZGp1c3QgcGl4ZWwgdmVydGljYWwg
cG9zaXRpb25zIHRvIGF2b2lkIHRoZSBhcHBlYXJhbmNlIG9mIHRoZQorICAgIC8vIGltYWdlIGNy
YXdsaW5nIHVwIHRoZSBzY3JlZW4gYXMgc3VjY2Vzc2l2ZSBwYXNzZXMgYXJlIGRyYXduLgorICAg
IGlmIChtX2ZyYW1lQ29udGV4dC0+cHJvZ3Jlc3NpdmVEaXNwbGF5ICYmIG1fZnJhbWVDb250ZXh0
LT5pbnRlcmxhY2VkICYmIG1fZnJhbWVDb250ZXh0LT5pcGFzcyA8IDQpIHsKKyAgICAgICAgdW5z
aWduZWQgcm93RHVwID0gMDsKKyAgICAgICAgdW5zaWduZWQgcm93U2hpZnQgPSAwOworCisgICAg
ICAgIHN3aXRjaCAobV9mcmFtZUNvbnRleHQtPmlwYXNzKSB7CisgICAgICAgIGNhc2UgMToKKyAg
ICAgICAgICAgIHJvd0R1cCA9IDc7CisgICAgICAgICAgICByb3dTaGlmdCA9IDM7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgcm93RHVwID0gMzsKKyAg
ICAgICAgICAgIHJvd1NoaWZ0ID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IDM6CisgICAgICAgICAgICByb3dEdXAgPSAxOworICAgICAgICAgICAgcm93U2hpZnQgPSAwOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQogCi0gICAgZHJvd19zdGFydCAtPSByb3dfc2hpZnQ7Ci0gICAgZHJvd19lbmQg
PSBkcm93X3N0YXJ0ICsgcm93X2R1cDsKKyAgICAgICAgZHJvd1N0YXJ0IC09IHJvd1NoaWZ0Owor
ICAgICAgICBkcm93RW5kID0gZHJvd1N0YXJ0ICsgcm93RHVwOwogCi0gICAgLyogRXh0ZW5kIGlm
IGJvdHRvbSBlZGdlIGlzbid0IGNvdmVyZWQgYmVjYXVzZSBvZiB0aGUgc2hpZnQgdXB3YXJkLiAq
LwotICAgIGlmICgoKGdzLT5oZWlnaHQgLSAxKSAtIGRyb3dfZW5kKSA8PSByb3dfc2hpZnQpCi0g
ICAgICBkcm93X2VuZCA9IGdzLT5oZWlnaHQgLSAxOworICAgICAgICAvLyBFeHRlbmQgaWYgYm90
dG9tIGVkZ2UgaXNuJ3QgY292ZXJlZCBiZWNhdXNlIG9mIHRoZSBzaGlmdCB1cHdhcmQuCisgICAg
ICAgIGlmICgoKG1fZnJhbWVDb250ZXh0LT5oZWlnaHQgLSAxKSAtIGRyb3dFbmQpIDw9IHJvd1No
aWZ0KQorICAgICAgICAgICAgZHJvd0VuZCA9IG1fZnJhbWVDb250ZXh0LT5oZWlnaHQgLSAxOwog
Ci0gICAgLyogQ2xhbXAgZmlyc3QgYW5kIGxhc3Qgcm93cyB0byB1cHBlciBhbmQgbG93ZXIgZWRn
ZSBvZiBpbWFnZS4gKi8KLSAgICBpZiAoZHJvd19zdGFydCA8IDApCi0gICAgICBkcm93X3N0YXJ0
ID0gMDsKLSAgICBpZiAoKHVuc2lnbmVkKWRyb3dfZW5kID49IGdzLT5oZWlnaHQpCi0gICAgICBk
cm93X2VuZCA9IGdzLT5oZWlnaHQgLSAxOwotICB9CisgICAgICAgIC8vIENsYW1wIGZpcnN0IGFu
ZCBsYXN0IHJvd3MgdG8gdXBwZXIgYW5kIGxvd2VyIGVkZ2Ugb2YgaW1hZ2UuCisgICAgICAgIGlm
IChkcm93U3RhcnQgPCAwKQorICAgICAgICAgICAgZHJvd1N0YXJ0ID0gMDsKIAotICAvKiBQcm90
ZWN0IGFnYWluc3QgdG9vIG11Y2ggaW1hZ2UgZGF0YSAqLwotICBpZiAoKHVuc2lnbmVkKWRyb3df
c3RhcnQgPj0gZ3MtPmhlaWdodCkKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCh1bnNp
Z25lZClkcm93RW5kID49IG1fZnJhbWVDb250ZXh0LT5oZWlnaHQpCisgICAgICAgICAgICBkcm93
RW5kID0gbV9mcmFtZUNvbnRleHQtPmhlaWdodCAtIDE7CisgICAgfQogCi0gIC8vIENBTExCQUNL
OiBMZXQgdGhlIGNsaWVudCBrbm93IHdlIGhhdmUgZGVjb2RlZCBhIHJvdy4KLSAgaWYgKGNsaWVu
dHB0ciAmJiBmcmFtZV9yZWFkZXIgJiYKLSAgICAgICFjbGllbnRwdHItPmhhdmVEZWNvZGVkUm93
KGltYWdlc19jb3VudCAtIDEsIGZyYW1lX3JlYWRlci0+cm93YnVmLCBmcmFtZV9yZWFkZXItPnJv
d2VuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3dfc3RhcnQsIGRyb3df
ZW5kIC0gZHJvd19zdGFydCArIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
cy0+cHJvZ3Jlc3NpdmVfZGlzcGxheSAmJiBncy0+aW50ZXJsYWNlZCAmJiBncy0+aXBhc3MgPiAx
KSkKLSAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IHRvbyBtdWNoIGlt
YWdlIGRhdGEuCisgICAgaWYgKCh1bnNpZ25lZClkcm93U3RhcnQgPj0gbV9mcmFtZUNvbnRleHQt
PmhlaWdodCkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgZ3MtPnJvd3AgPSBncy0+cm93YnVm
OworICAgIC8vIENBTExCQUNLOiBMZXQgdGhlIGNsaWVudCBrbm93IHdlIGhhdmUgZGVjb2RlZCBh
IHJvdy4KKyAgICBpZiAobV9jbGllbnQgJiYgbV9mcmFtZUNvbnRleHQKKyAgICAgICAgJiYgIW1f
Y2xpZW50LT5oYXZlRGVjb2RlZFJvdyhtX2ltYWdlc0NvdW50IC0gMSwgbV9mcmFtZUNvbnRleHQt
PnJvd2J1ZiwgbV9mcmFtZUNvbnRleHQtPnJvd2VuZCwKKyAgICAgICAgICAgIGRyb3dTdGFydCwg
ZHJvd0VuZCAtIGRyb3dTdGFydCArIDEsIG1fZnJhbWVDb250ZXh0LT5wcm9ncmVzc2l2ZURpc3Bs
YXkgJiYgbV9mcmFtZUNvbnRleHQtPmludGVybGFjZWQgJiYgbV9mcmFtZUNvbnRleHQtPmlwYXNz
ID4gMSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICBpZiAoIWdzLT5pbnRlcmxhY2VkKQot
ICAgIGdzLT5pcm93Kys7Ci0gIGVsc2UgewotICAgIGRvIHsKLSAgICAgIHN3aXRjaCAoZ3MtPmlw
YXNzKQotICAgICAgewotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgZ3MtPmlyb3cgKz0gODsK
LSAgICAgICAgICBpZiAoZ3MtPmlyb3cgPj0gZ3MtPmhlaWdodCkgewotICAgICAgICAgICAgZ3Mt
PmlwYXNzKys7Ci0gICAgICAgICAgICBncy0+aXJvdyA9IDQ7Ci0gICAgICAgICAgfQotICAgICAg
ICAgIGJyZWFrOworICAgIG1fZnJhbWVDb250ZXh0LT5yb3dwID0gbV9mcmFtZUNvbnRleHQtPnJv
d2J1ZjsKKworICAgIGlmICghbV9mcmFtZUNvbnRleHQtPmludGVybGFjZWQpCisgICAgICAgIG1f
ZnJhbWVDb250ZXh0LT5pcm93Kys7CisgICAgZWxzZSB7CisgICAgICAgIGRvIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAobV9mcmFtZUNvbnRleHQtPmlwYXNzKSB7CisgICAgICAgICAgICBjYXNlIDE6
CisgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlyb3cgKz0gODsKKyAgICAgICAgICAg
ICAgICBpZiAobV9mcmFtZUNvbnRleHQtPmlyb3cgPj0gbV9mcmFtZUNvbnRleHQtPmhlaWdodCkg
eworICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXBhc3MrKzsKKyAgICAgICAg
ICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlyb3cgPSA0OworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAg
ICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcm93ICs9IDg7CisgICAgICAgICAgICAgICAgaWYgKG1f
ZnJhbWVDb250ZXh0LT5pcm93ID49IG1fZnJhbWVDb250ZXh0LT5oZWlnaHQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlwYXNzKys7CisgICAgICAgICAgICAgICAgICAg
IG1fZnJhbWVDb250ZXh0LT5pcm93ID0gMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICBtX2Zy
YW1lQ29udGV4dC0+aXJvdyArPSA0OworICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4
dC0+aXJvdyA+PSBtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAg
IG1fZnJhbWVDb250ZXh0LT5pcGFzcysrOworICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29u
dGV4dC0+aXJvdyA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQt
Pmlyb3cgKz0gMjsKKyAgICAgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQtPmlyb3cgPj0g
bV9mcmFtZUNvbnRleHQtPmhlaWdodCkgeworICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29u
dGV4dC0+aXBhc3MrKzsKKyAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlyb3cg
PSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSB3aGlsZSAobV9mcmFtZUNvbnRleHQtPmlyb3cgPiAobV9mcmFtZUNvbnRleHQtPmhl
aWdodCAtIDEpKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CiAKLSAgICAgICAgY2FzZSAy
OgotICAgICAgICAgIGdzLT5pcm93ICs9IDg7Ci0gICAgICAgICAgaWYgKGdzLT5pcm93ID49IGdz
LT5oZWlnaHQpIHsKLSAgICAgICAgICAgIGdzLT5pcGFzcysrOwotICAgICAgICAgICAgZ3MtPmly
b3cgPSAyOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKKy8vIFBlcmZvcm0gTGVtcGVs
LVppdi1XZWxjaCBkZWNvZGluZy4KK2Jvb2wgR0lGSW1hZ2VSZWFkZXI6OmRvTFpXKGNvbnN0IHVu
c2lnbmVkIGNoYXIgKnEpCit7CisgICAgaWYgKCFtX2ZyYW1lQ29udGV4dCkKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAKLSAgICAgICAgY2FzZSAzOgotICAgICAgICAgIGdzLT5pcm93ICs9IDQ7Ci0g
ICAgICAgICAgaWYgKGdzLT5pcm93ID49IGdzLT5oZWlnaHQpIHsKLSAgICAgICAgICAgIGdzLT5p
cGFzcysrOwotICAgICAgICAgICAgZ3MtPmlyb3cgPSAxOwotICAgICAgICAgIH0KLSAgICAgICAg
ICBicmVhazsKLQotICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgZ3MtPmlyb3cgKz0gMjsKLSAg
ICAgICAgICBpZiAoZ3MtPmlyb3cgPj0gZ3MtPmhlaWdodCl7Ci0gICAgICAgICAgICBncy0+aXBh
c3MrKzsKLSAgICAgICAgICAgIGdzLT5pcm93ID0gMDsKLSAgICAgICAgICB9Ci0gICAgICAgICAg
YnJlYWs7CisgICAgaW50IGNvZGU7CisgICAgaW50IGluY29kZTsKKyAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyICpjaDsKKworICAgIC8vIENvcHkgYWxsIHRoZSBkZWNvZGVyIHN0YXRlIHZhcmlhYmxl
cyBpbnRvIGxvY2FscyBzbyB0aGUgY29tcGlsZXIKKyAgICAvLyB3b24ndCB3b3JyeSBhYm91dCB0
aGVtIGJlaW5nIGFsaWFzZWQuIFRoZSBsb2NhbHMgd2lsbCBiZSBob21lZAorICAgIC8vIGJhY2sg
aW50byB0aGUgR0lGIGRlY29kZXIgc3RydWN0dXJlIHdoZW4gd2UgZXhpdC4KKyAgICBpbnQgYXZh
aWwgPSBtX2ZyYW1lQ29udGV4dC0+YXZhaWw7CisgICAgaW50IGJpdHMgPSBtX2ZyYW1lQ29udGV4
dC0+Yml0czsKKyAgICBpbnQgY250ID0gbV9jb3VudDsKKyAgICBpbnQgY29kZXNpemUgPSBtX2Zy
YW1lQ29udGV4dC0+Y29kZXNpemU7CisgICAgaW50IGNvZGVtYXNrID0gbV9mcmFtZUNvbnRleHQt
PmNvZGVtYXNrOworICAgIGludCBvbGRjb2RlID0gbV9mcmFtZUNvbnRleHQtPm9sZGNvZGU7Cisg
ICAgaW50IGNsZWFyQ29kZSA9IG1fZnJhbWVDb250ZXh0LT5jbGVhckNvZGU7CisgICAgdW5zaWdu
ZWQgY2hhciBmaXJzdGNoYXIgPSBtX2ZyYW1lQ29udGV4dC0+Zmlyc3RjaGFyOworICAgIGludCBk
YXR1bSA9IG1fZnJhbWVDb250ZXh0LT5kYXR1bTsKKworICAgIGlmICghbV9mcmFtZUNvbnRleHQt
PnByZWZpeCkgeworICAgICAgICBtX2ZyYW1lQ29udGV4dC0+cHJlZml4ID0gbmV3IHVuc2lnbmVk
IHNob3J0W01BWF9CSVRTXTsKKyAgICAgICAgbWVtc2V0KG1fZnJhbWVDb250ZXh0LT5wcmVmaXgs
IDAsIE1BWF9CSVRTICogc2l6ZW9mKHNob3J0KSk7CisgICAgfQogCi0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfSB3aGlsZSAoZ3MtPmlyb3cgPiAoZ3Mt
PmhlaWdodCAtIDEpKTsKLSAgfQorICAgIHVuc2lnbmVkIHNob3J0ICpwcmVmaXggPSBtX2ZyYW1l
Q29udGV4dC0+cHJlZml4OworICAgIHVuc2lnbmVkIGNoYXIgKnN0YWNrcCA9IG1fZnJhbWVDb250
ZXh0LT5zdGFja3A7CisgICAgdW5zaWduZWQgY2hhciAqc3VmZml4ID0gbV9mcmFtZUNvbnRleHQt
PnN1ZmZpeDsKKyAgICB1bnNpZ25lZCBjaGFyICpzdGFjayA9IG1fZnJhbWVDb250ZXh0LT5zdGFj
azsKKyAgICB1bnNpZ25lZCBjaGFyICpyb3dwID0gbV9mcmFtZUNvbnRleHQtPnJvd3A7CisgICAg
dW5zaWduZWQgY2hhciAqcm93ZW5kID0gbV9mcmFtZUNvbnRleHQtPnJvd2VuZDsKKyAgICB1bnNp
Z25lZCByb3dzUmVtYWluaW5nID0gbV9mcmFtZUNvbnRleHQtPnJvd3NSZW1haW5pbmc7CisKKyAg
ICBpZiAocm93cCA9PSByb3dlbmQpCisgICAgICAgIHJldHVybiB0cnVlOwogCi0gIHJldHVybiB0
cnVlOworI2RlZmluZSBPVVRQVVRfUk9XIFwKKyAgICBkbyB7IFwKKyAgICAgICAgaWYgKCFvdXRw
dXRSb3coKSkgXAorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyBcCisgICAgICAgIHJvd3NSZW1h
aW5pbmctLTsgXAorICAgICAgICByb3dwID0gbV9mcmFtZUNvbnRleHQtPnJvd3A7IFwKKyAgICAg
ICAgaWYgKCFyb3dzUmVtYWluaW5nKSBcCisgICAgICAgICAgICBnb3RvIEVORDsgXAorICAgIH0g
d2hpbGUgKDApOworCisgICAgZm9yIChjaCA9IHE7IGNudC0tID4gMDsgY2grKykgeworICAgICAg
ICAvLyBGZWVkIHRoZSBuZXh0IGJ5dGUgaW50byB0aGUgZGVjb2RlcidzIDMyLWJpdCBpbnB1dCBi
dWZmZXIuCisgICAgICAgIGRhdHVtICs9ICgoaW50KSAqY2gpIDw8IGJpdHM7CisgICAgICAgIGJp
dHMgKz0gODsKKworICAgICAgICAvLyBDaGVjayBmb3IgdW5kZXJmbG93IG9mIGRlY29kZXIncyAz
Mi1iaXQgaW5wdXQgYnVmZmVyLgorICAgICAgICB3aGlsZSAoYml0cyA+PSBjb2Rlc2l6ZSkgewor
ICAgICAgICAgICAgLy8gR2V0IHRoZSBsZWFkaW5nIHZhcmlhYmxlLWxlbmd0aCBzeW1ib2wgZnJv
bSB0aGUgZGF0YSBzdHJlYW0uCisgICAgICAgICAgICBjb2RlID0gZGF0dW0gJiBjb2RlbWFzazsK
KyAgICAgICAgICAgIGRhdHVtID4+PSBjb2Rlc2l6ZTsKKyAgICAgICAgICAgIGJpdHMgLT0gY29k
ZXNpemU7CisKKyAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBkaWN0aW9uYXJ5IHRvIGl0cyBvcmln
aW5hbCBzdGF0ZSwgaWYgcmVxdWVzdGVkLgorICAgICAgICAgICAgaWYgKGNvZGUgPT0gY2xlYXJD
b2RlKSB7CisgICAgICAgICAgICAgICAgY29kZXNpemUgPSBtX2ZyYW1lQ29udGV4dC0+ZGF0YXNp
emUgKyAxOworICAgICAgICAgICAgICAgIGNvZGVtYXNrID0gKDEgPDwgY29kZXNpemUpIC0gMTsK
KyAgICAgICAgICAgICAgICBhdmFpbCA9IGNsZWFyQ29kZSArIDI7CisgICAgICAgICAgICAgICAg
b2xkY29kZSA9IC0xOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBDaGVjayBmb3IgZXhwbGljaXQgZW5kLW9mLXN0cmVhbSBjb2RlLgor
ICAgICAgICAgICAgaWYgKGNvZGUgPT0gKGNsZWFyQ29kZSArIDEpKSB7CisgICAgICAgICAgICAg
ICAgLy8gZW5kLW9mLXN0cmVhbSBzaG91bGQgb25seSBhcHBlYXIgYWZ0ZXIgYWxsIGltYWdlIGRh
dGEuCisgICAgICAgICAgICAgICAgaWYgKCFyb3dzUmVtYWluaW5nKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2Ns
aWVudC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKG9sZGNvZGUgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAqcm93cCsrID0gc3VmZml4W2Nv
ZGVdOworICAgICAgICAgICAgICAgIGlmIChyb3dwID09IHJvd2VuZCkKKyAgICAgICAgICAgICAg
ICAgICAgT1VUUFVUX1JPVzsKKworICAgICAgICAgICAgICAgIGZpcnN0Y2hhciA9IG9sZGNvZGUg
PSBjb2RlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpbmNvZGUgPSBjb2RlOworICAgICAgICAgICAgaWYgKGNvZGUgPj0gYXZhaWwpIHsK
KyAgICAgICAgICAgICAgICAqc3RhY2twKysgPSBmaXJzdGNoYXI7CisgICAgICAgICAgICAgICAg
Y29kZSA9IG9sZGNvZGU7CisKKyAgICAgICAgICAgICAgICBpZiAoc3RhY2twID09IHN0YWNrICsg
TUFYX0JJVFMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVudCA/IG1fY2xpZW50
LT5zZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3aGls
ZSAoY29kZSA+PSBjbGVhckNvZGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29kZSA+PSBNQVhf
QklUUyB8fCBjb2RlID09IHByZWZpeFtjb2RlXSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG1fY2xpZW50ID8gbV9jbGllbnQtPnNldEZhaWxlZCgpIDogZmFsc2U7CisKKyAgICAgICAgICAg
ICAgICAvLyBFdmVuIHRob3VnaCBzdWZmaXhbXSBvbmx5IGhvbGRzIGNoYXJhY3RlcnMgdGhyb3Vn
aCBzdWZmaXhbYXZhaWwgLSAxXSwKKyAgICAgICAgICAgICAgICAvLyBhbGxvd2luZyBjb2RlID49
IGF2YWlsIGhlcmUgbGV0cyB1cyBiZSBtb3JlIHRvbGVyYW50IG9mIG1hbGZvcm1lZAorICAgICAg
ICAgICAgICAgIC8vIGRhdGEuIEFzIGxvbmcgYXMgY29kZSA8IE1BWF9CSVRTLCB0aGUgb25seSBy
aXNrIGlzIGEgZ2FyYmxlZCBpbWFnZSwKKyAgICAgICAgICAgICAgICAvLyB3aGljaCBpcyBubyB3
b3JzZSB0aGFuIHJlZnVzaW5nIHRvIGRpc3BsYXkgaXQuCisgICAgICAgICAgICAgICAgKnN0YWNr
cCsrID0gc3VmZml4W2NvZGVdOworICAgICAgICAgICAgICAgIGNvZGUgPSBwcmVmaXhbY29kZV07
CisKKyAgICAgICAgICAgICAgICBpZiAoc3RhY2twID09IHN0YWNrICsgTUFYX0JJVFMpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5zZXRGYWlsZWQoKSA6
IGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAqc3RhY2twKysgPSBmaXJzdGNo
YXIgPSBzdWZmaXhbY29kZV07CisKKyAgICAgICAgICAgIC8vIERlZmluZSBhIG5ldyBjb2Rld29y
ZCBpbiB0aGUgZGljdGlvbmFyeS4KKyAgICAgICAgICAgIGlmIChhdmFpbCA8IDQwOTYpIHsKKyAg
ICAgICAgICAgICAgICBwcmVmaXhbYXZhaWxdID0gb2xkY29kZTsKKyAgICAgICAgICAgICAgICBz
dWZmaXhbYXZhaWxdID0gZmlyc3RjaGFyOworICAgICAgICAgICAgICAgIGF2YWlsKys7CisKKyAg
ICAgICAgICAgICAgICAvLyBJZiB3ZSd2ZSB1c2VkIHVwIGFsbCB0aGUgY29kZXdvcmRzIG9mIGEg
Z2l2ZW4gbGVuZ3RoCisgICAgICAgICAgICAgICAgLy8gaW5jcmVhc2UgdGhlIGxlbmd0aCBvZiBj
b2Rld29yZHMgYnkgb25lIGJpdCwgYnV0IGRvbid0CisgICAgICAgICAgICAgICAgLy8gZXhjZWVk
IHRoZSBzcGVjaWZpZWQgbWF4aW11bSBjb2Rld29yZCBzaXplIG9mIDEyIGJpdHMuCisgICAgICAg
ICAgICAgICAgaWYgKCghKGF2YWlsICYgY29kZW1hc2spKSAmJiAoYXZhaWwgPCA0MDk2KSkgewor
ICAgICAgICAgICAgICAgICAgICBjb2Rlc2l6ZSsrOworICAgICAgICAgICAgICAgICAgICBjb2Rl
bWFzayArPSBhdmFpbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBvbGRjb2RlID0gaW5jb2RlOworCisgICAgICAgICAgICAvLyBDb3B5IHRoZSBkZWNvZGVk
IGRhdGEgb3V0IHRvIHRoZSBzY2FubGluZSBidWZmZXIuCisgICAgICAgICAgICBkbyB7CisgICAg
ICAgICAgICAgICAgKnJvd3ArKyA9ICotLXN0YWNrcDsKKyAgICAgICAgICAgICAgICBpZiAocm93
cCA9PSByb3dlbmQpCisgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9ST1c7CisgICAgICAgICAg
ICB9IHdoaWxlIChzdGFja3AgPiBzdGFjayk7CisgICAgICAgIH0KKyAgICB9CisKK0VORDoKKyAg
ICAvLyBIb21lIHRoZSBsb2NhbCBjb3BpZXMgb2YgdGhlIEdJRiBkZWNvZGVyIHN0YXRlIHZhcmlh
Ymxlcy4KKyAgICBtX2ZyYW1lQ29udGV4dC0+YXZhaWwgPSBhdmFpbDsKKyAgICBtX2ZyYW1lQ29u
dGV4dC0+Yml0cyA9IGJpdHM7CisgICAgbV9mcmFtZUNvbnRleHQtPmNvZGVzaXplID0gY29kZXNp
emU7CisgICAgbV9mcmFtZUNvbnRleHQtPmNvZGVtYXNrID0gY29kZW1hc2s7CisgICAgbV9jb3Vu
dCA9IGNudDsKKyAgICBtX2ZyYW1lQ29udGV4dC0+b2xkY29kZSA9IG9sZGNvZGU7CisgICAgbV9m
cmFtZUNvbnRleHQtPmZpcnN0Y2hhciA9IGZpcnN0Y2hhcjsKKyAgICBtX2ZyYW1lQ29udGV4dC0+
ZGF0dW0gPSBkYXR1bTsKKyAgICBtX2ZyYW1lQ29udGV4dC0+c3RhY2twID0gc3RhY2twOworICAg
IG1fZnJhbWVDb250ZXh0LT5yb3dwID0gcm93cDsKKyAgICBtX2ZyYW1lQ29udGV4dC0+cm93c1Jl
bWFpbmluZyA9IHJvd3NSZW1haW5pbmc7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqCi0vKiBQZXJmb3JtIExlbXBlbC1aaXYtV2VsY2ggZGVjb2RpbmcgKi8K
LWJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRvX2x6dyhjb25zdCB1bnNpZ25lZCBjaGFyICpxKQorCisv
LyBQcm9jZXNzIGRhdGEgYXJyaXZpbmcgZnJvbSB0aGUgc3RyZWFtIGZvciB0aGUgZ2lmIGRlY29k
ZXIuCitib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwg
dW5zaWduZWQgbGVuLCBHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5IHF1ZXJ5LCB1bnNpZ25lZCBo
YWx0QXRGcmFtZSkKIHsKLSAgR0lGRnJhbWVSZWFkZXIqIGdzID0gZnJhbWVfcmVhZGVyOwotICBp
ZiAoIWdzKQotICAgIHJldHVybiB0cnVlOworICAgIGlmICghbGVuKSB7CisgICAgICAgIC8vIE5v
IG5ldyBkYXRhIGhhcyBjb21lIGluIHNpbmNlIHRoZSBsYXN0IGNhbGwsIGp1c3QgaWdub3JlIHRo
aXMgY2FsbC4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCi0gIGludCBjb2RlOwotICBp
bnQgaW5jb2RlOwotICBjb25zdCB1bnNpZ25lZCBjaGFyICpjaDsKLSAgCi0gIC8qIENvcHkgYWxs
IHRoZSBkZWNvZGVyIHN0YXRlIHZhcmlhYmxlcyBpbnRvIGxvY2FscyBzbyB0aGUgY29tcGlsZXIK
LSAgICogd29uJ3Qgd29ycnkgYWJvdXQgdGhlbSBiZWluZyBhbGlhc2VkLiAgVGhlIGxvY2FscyB3
aWxsIGJlIGhvbWVkCi0gICAqIGJhY2sgaW50byB0aGUgR0lGIGRlY29kZXIgc3RydWN0dXJlIHdo
ZW4gd2UgZXhpdC4KLSAgICovCi0gIGludCBhdmFpbCAgICAgICA9IGdzLT5hdmFpbDsKLSAgaW50
IGJpdHMgICAgICAgID0gZ3MtPmJpdHM7Ci0gIGludCBjbnQgICAgICAgICA9IGNvdW50OwotICBp
bnQgY29kZXNpemUgICAgPSBncy0+Y29kZXNpemU7Ci0gIGludCBjb2RlbWFzayAgICA9IGdzLT5j
b2RlbWFzazsKLSAgaW50IG9sZGNvZGUgICAgID0gZ3MtPm9sZGNvZGU7Ci0gIGludCBjbGVhcl9j
b2RlICA9IGdzLT5jbGVhcl9jb2RlOwotICB1bnNpZ25lZCBjaGFyIGZpcnN0Y2hhciA9IGdzLT5m
aXJzdGNoYXI7Ci0gIGludCBkYXR1bSAgICAgPSBncy0+ZGF0dW07Ci0KLSAgaWYgKCFncy0+cHJl
Zml4KSB7Ci0gICAgZ3MtPnByZWZpeCA9IG5ldyB1bnNpZ25lZCBzaG9ydFtNQVhfQklUU107Ci0g
ICAgbWVtc2V0KGdzLT5wcmVmaXgsIDAsIE1BWF9CSVRTICogc2l6ZW9mKHNob3J0KSk7Ci0gIH0K
LQotICB1bnNpZ25lZCBzaG9ydCAqcHJlZml4ICA9IGdzLT5wcmVmaXg7Ci0gIHVuc2lnbmVkIGNo
YXIgKnN0YWNrcCAgID0gZ3MtPnN0YWNrcDsKLSAgdW5zaWduZWQgY2hhciAqc3VmZml4ICAgPSBn
cy0+c3VmZml4OwotICB1bnNpZ25lZCBjaGFyICpzdGFjayAgICA9IGdzLT5zdGFjazsKLSAgdW5z
aWduZWQgY2hhciAqcm93cCAgICAgPSBncy0+cm93cDsKLSAgdW5zaWduZWQgY2hhciAqcm93ZW5k
ICAgPSBncy0+cm93ZW5kOwotICB1bnNpZ25lZCByb3dzX3JlbWFpbmluZyA9IGdzLT5yb3dzX3Jl
bWFpbmluZzsKLQotICBpZiAocm93cCA9PSByb3dlbmQpCi0gICAgcmV0dXJuIHRydWU7CisgICAg
Y29uc3QgdW5zaWduZWQgY2hhciAqcSA9IGJ1ZjsKKworICAgIC8vIEFkZCB3aGF0IHdlIGhhdmUg
c28gZmFyIHRvIHRoZSBibG9jay4KKyAgICAvLyBJZiBwcmV2aW91cyBjYWxsIHRvIG1lIGxlZnQg
c29tZXRoaW5nIGluIHRoZSBob2xkIGZpcnN0IGNvbXBsZXRlIGN1cnJlbnQgYmxvY2sKKyAgICAv
LyBvciBpZiB3ZSBhcmUgZmlsbGluZyB0aGUgY29sb3JtYXBzLCBmaXJzdCBjb21wbGV0ZSB0aGUg
Y29sb3JtYXAuCisgICAgdW5zaWduZWQgY2hhciogcCA9IDA7CisgICAgaWYgKG1fc3RhdGUgPT0g
R0lGR2xvYmFsQ29sb3JtYXApCisgICAgICAgIHAgPSBtX2dsb2JhbENvbG9ybWFwOworICAgIGVs
c2UgaWYgKG1fc3RhdGUgPT0gR0lGSW1hZ2VDb2xvcm1hcCkKKyAgICAgICAgcCA9IG1fZnJhbWVD
b250ZXh0ID8gbV9mcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXAgOiAwOworICAgIGVsc2UgaWYg
KG1fYnl0ZXNJbkhvbGQpCisgICAgICAgIHAgPSBtX2hvbGQ7CisgICAgZWxzZQorICAgICAgICBw
ID0gMDsKKworICAgIGlmIChwIHx8IChtX3N0YXRlID09IEdJRkdsb2JhbENvbG9ybWFwKSB8fCAo
bV9zdGF0ZSA9PSBHSUZJbWFnZUNvbG9ybWFwKSkgeworICAgICAgICAvLyBBZGQgd2hhdCB3ZSBo
YXZlIHNvZmFyIHRvIHRoZSBibG9jaworICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBsZW4gPCBt
X2J5dGVzVG9Db25zdW1lID8gbGVuIDogbV9ieXRlc1RvQ29uc3VtZTsKKyAgICAgICAgaWYgKHAp
CisgICAgICAgICAgICBtZW1jcHkocCArIG1fYnl0ZXNJbkhvbGQsIGJ1ZiwgbGVuZ3RoKTsKKwor
ICAgICAgICBpZiAobGVuZ3RoIDwgbV9ieXRlc1RvQ29uc3VtZSkgeworICAgICAgICAgICAgLy8g
Tm90IGVub3VnaCBpbiAnYnVmJyB0byBjb21wbGV0ZSBjdXJyZW50IGJsb2NrLCBnZXQgbW9yZQor
ICAgICAgICAgICAgbV9ieXRlc0luSG9sZCArPSBsZW5ndGg7CisgICAgICAgICAgICBtX2J5dGVz
VG9Db25zdW1lIC09IGxlbmd0aDsKKyAgICAgICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAg
ICAgICAgICBtX2NsaWVudC0+ZGVjb2RpbmdIYWx0ZWQoMCk7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KIAotI2RlZmluZSBPVVRQVVRfUk9XICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFBSX0JFR0lOX01BQ1JPICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
aWYgKCFvdXRwdXRfcm93KCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcm93c19yZW1haW5pbmct
LTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
ICAgcm93cCA9IGZyYW1lX3JlYWRlci0+cm93cDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICghcm93c19yZW1haW5pbmcpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgZ290byBF
TkQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICBQUl9FTkRfTUFDUk8KLQotICBmb3IgKGNoID0gcTsgY250LS0gPiAwOyBjaCsrKQot
ICB7Ci0gICAgLyogRmVlZCB0aGUgbmV4dCBieXRlIGludG8gdGhlIGRlY29kZXIncyAzMi1iaXQg
aW5wdXQgYnVmZmVyLiAqLwotICAgIGRhdHVtICs9ICgoaW50KSAqY2gpIDw8IGJpdHM7Ci0gICAg
Yml0cyArPSA4OwotCi0gICAgLyogQ2hlY2sgZm9yIHVuZGVyZmxvdyBvZiBkZWNvZGVyJ3MgMzIt
Yml0IGlucHV0IGJ1ZmZlci4gKi8KLSAgICB3aGlsZSAoYml0cyA+PSBjb2Rlc2l6ZSkKLSAgICB7
Ci0gICAgICAvKiBHZXQgdGhlIGxlYWRpbmcgdmFyaWFibGUtbGVuZ3RoIHN5bWJvbCBmcm9tIHRo
ZSBkYXRhIHN0cmVhbSAqLwotICAgICAgY29kZSA9IGRhdHVtICYgY29kZW1hc2s7Ci0gICAgICBk
YXR1bSA+Pj0gY29kZXNpemU7Ci0gICAgICBiaXRzIC09IGNvZGVzaXplOwotCi0gICAgICAvKiBS
ZXNldCB0aGUgZGljdGlvbmFyeSB0byBpdHMgb3JpZ2luYWwgc3RhdGUsIGlmIHJlcXVlc3RlZCAq
LwotICAgICAgaWYgKGNvZGUgPT0gY2xlYXJfY29kZSkgewotICAgICAgICBjb2Rlc2l6ZSA9IGdz
LT5kYXRhc2l6ZSArIDE7Ci0gICAgICAgIGNvZGVtYXNrID0gKDEgPDwgY29kZXNpemUpIC0gMTsK
LSAgICAgICAgYXZhaWwgPSBjbGVhcl9jb2RlICsgMjsKLSAgICAgICAgb2xkY29kZSA9IC0xOwot
ICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgLyogQ2hlY2sgZm9yIGV4cGxpY2l0
IGVuZC1vZi1zdHJlYW0gY29kZSAqLwotICAgICAgaWYgKGNvZGUgPT0gKGNsZWFyX2NvZGUgKyAx
KSkgewotICAgICAgICAvKiBlbmQtb2Ytc3RyZWFtIHNob3VsZCBvbmx5IGFwcGVhciBhZnRlciBh
bGwgaW1hZ2UgZGF0YSAqLwotICAgICAgICBpZiAoIXJvd3NfcmVtYWluaW5nKQotICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gY2xpZW50cHRyID8gY2xpZW50cHRyLT5zZXRG
YWlsZWQoKSA6IGZhbHNlOwotICAgICAgfQotCi0gICAgICBpZiAob2xkY29kZSA9PSAtMSkgewot
ICAgICAgICAqcm93cCsrID0gc3VmZml4W2NvZGVdOwotICAgICAgICBpZiAocm93cCA9PSByb3dl
bmQpCi0gICAgICAgICAgT1VUUFVUX1JPVzsKLQotICAgICAgICBmaXJzdGNoYXIgPSBvbGRjb2Rl
ID0gY29kZTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAgICAgIGluY29kZSA9IGNv
ZGU7Ci0gICAgICBpZiAoY29kZSA+PSBhdmFpbCkgewotICAgICAgICAqc3RhY2twKysgPSBmaXJz
dGNoYXI7Ci0gICAgICAgIGNvZGUgPSBvbGRjb2RlOwotCi0gICAgICAgIGlmIChzdGFja3AgPT0g
c3RhY2sgKyBNQVhfQklUUykKLSAgICAgICAgICByZXR1cm4gY2xpZW50cHRyID8gY2xpZW50cHRy
LT5zZXRGYWlsZWQoKSA6IGZhbHNlOwotICAgICAgfQotCi0gICAgICB3aGlsZSAoY29kZSA+PSBj
bGVhcl9jb2RlKQotICAgICAgewotICAgICAgICBpZiAoY29kZSA+PSBNQVhfQklUUyB8fCBjb2Rl
ID09IHByZWZpeFtjb2RlXSkKLSAgICAgICAgICByZXR1cm4gY2xpZW50cHRyID8gY2xpZW50cHRy
LT5zZXRGYWlsZWQoKSA6IGZhbHNlOwotCi0gICAgICAgIC8vIEV2ZW4gdGhvdWdoIHN1ZmZpeFtd
IG9ubHkgaG9sZHMgY2hhcmFjdGVycyB0aHJvdWdoIHN1ZmZpeFthdmFpbCAtIDFdLAotICAgICAg
ICAvLyBhbGxvd2luZyBjb2RlID49IGF2YWlsIGhlcmUgbGV0cyB1cyBiZSBtb3JlIHRvbGVyYW50
IG9mIG1hbGZvcm1lZAotICAgICAgICAvLyBkYXRhLiBBcyBsb25nIGFzIGNvZGUgPCBNQVhfQklU
UywgdGhlIG9ubHkgcmlzayBpcyBhIGdhcmJsZWQgaW1hZ2UsCi0gICAgICAgIC8vIHdoaWNoIGlz
IG5vIHdvcnNlIHRoYW4gcmVmdXNpbmcgdG8gZGlzcGxheSBpdC4KLSAgICAgICAgKnN0YWNrcCsr
ID0gc3VmZml4W2NvZGVdOwotICAgICAgICBjb2RlID0gcHJlZml4W2NvZGVdOwotCi0gICAgICAg
IGlmIChzdGFja3AgPT0gc3RhY2sgKyBNQVhfQklUUykKLSAgICAgICAgICByZXR1cm4gY2xpZW50
cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQoKSA6IGZhbHNlOwotICAgICAgfQotCi0gICAgICAq
c3RhY2twKysgPSBmaXJzdGNoYXIgPSBzdWZmaXhbY29kZV07Ci0KLSAgICAgIC8qIERlZmluZSBh
IG5ldyBjb2Rld29yZCBpbiB0aGUgZGljdGlvbmFyeS4gKi8KLSAgICAgIGlmIChhdmFpbCA8IDQw
OTYpIHsKLSAgICAgICAgcHJlZml4W2F2YWlsXSA9IG9sZGNvZGU7Ci0gICAgICAgIHN1ZmZpeFth
dmFpbF0gPSBmaXJzdGNoYXI7Ci0gICAgICAgIGF2YWlsKys7Ci0KLSAgICAgICAgLyogSWYgd2Un
dmUgdXNlZCB1cCBhbGwgdGhlIGNvZGV3b3JkcyBvZiBhIGdpdmVuIGxlbmd0aAotICAgICAgICAg
KiBpbmNyZWFzZSB0aGUgbGVuZ3RoIG9mIGNvZGV3b3JkcyBieSBvbmUgYml0LCBidXQgZG9uJ3QK
LSAgICAgICAgICogZXhjZWVkIHRoZSBzcGVjaWZpZWQgbWF4aW11bSBjb2Rld29yZCBzaXplIG9m
IDEyIGJpdHMuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoKChhdmFpbCAmIGNvZGVtYXNrKSA9
PSAwKSAmJiAoYXZhaWwgPCA0MDk2KSkgewotICAgICAgICAgIGNvZGVzaXplKys7Ci0gICAgICAg
ICAgY29kZW1hc2sgKz0gYXZhaWw7CisgICAgICAgIC8vIFJlc2V0IGhvbGQgYnVmZmVyIGNvdW50
CisgICAgICAgIG1fYnl0ZXNJbkhvbGQgPSAwOworCisgICAgICAgIC8vIFBvaW50ICdxJyB0byBj
b21wbGV0ZSBibG9jayBpbiBob2xkIChvciBpbiBjb2xvcm1hcCkKKyAgICAgICAgcSA9IHA7Cisg
ICAgfQorCisgICAgLy8gSW52YXJpYW50OgorICAgIC8vICAgICdxJyBpcyBzdGFydCBvZiBjdXJy
ZW50IHRvIGJlIHByb2Nlc3NlZCBibG9jayAoaG9sZCwgY29sb3JtYXAgb3IgYnVmKQorICAgIC8v
ICAgICdtX2J5dGVzVG9Db25zdW1lJyBpcyBudW1iZXIgb2YgYnl0ZXMgdG8gY29uc3VtZSBmcm9t
ICdidWYnCisgICAgLy8gICAgJ2J1ZicgcG9pbnRzIHRvIHRoZSBieXRlcyB0byBiZSBjb25zdW1l
ZCBmcm9tIHRoZSBpbnB1dCBidWZmZXIKKyAgICAvLyAgICAnbGVuJyBpcyBudW1iZXIgb2YgYnl0
ZXMgbGVmdCBpbiBpbnB1dCBidWZmZXIgZnJvbSBwb3NpdGlvbiAnYnVmJy4KKyAgICAvLyAgICBB
dCBlbnRyYW5jZSBvZiB0aGUgZm9yIGxvb3Agd2lsbCAnYnVmJyB3aWxsIGJlIG1vdmVkICdtX2J5
dGVzVG9Db25zdW1lJworICAgIC8vICAgIHRvIHBvaW50IHRvIG5leHQgYnVmZmVyLCAnbGVuJyBp
cyBhZGp1c3RlZCBhY2NvcmRpbmdseS4KKyAgICAvLyAgICBTbyB0aGF0IG5leHQgcm91bmQgaW4g
Zm9yIGxvb3AsIHEgZ2V0cyBwb2ludGVkIHRvIHRoZSBuZXh0IGJ1ZmZlci4KKyAgICBmb3IgKDts
ZW4gPj0gbV9ieXRlc1RvQ29uc3VtZTsgcSA9IGJ1ZikgeworICAgICAgICAvLyBFYXQgdGhlIGN1
cnJlbnQgYmxvY2sgZnJvbSB0aGUgYnVmZmVyLCBxIGtlZXBzIHBvaW50ZWQgYXQgY3VycmVudCBi
bG9jay4KKyAgICAgICAgYnVmICs9IG1fYnl0ZXNUb0NvbnN1bWU7CisgICAgICAgIGxlbiAtPSBt
X2J5dGVzVG9Db25zdW1lOworCisgICAgICAgIHN3aXRjaCAobV9zdGF0ZSkgeworICAgICAgICBj
YXNlIEdJRkxaVzoKKyAgICAgICAgICAgIGlmICghZG9MWlcocSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOyAvLyBJZiBkb0xaVygpIGVuY291bnRlcmVkIGFuIGVycm9yLCBpdCBoYXMg
YWxyZWFkeSBjYWxsZWQgbV9jbGllbnQtPnNldEZhaWxlZCgpLgorICAgICAgICAgICAgR0VUTigx
LCBHSUZTdWJCbG9jayk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEdJRkxa
V1N0YXJ0OiB7CisgICAgICAgICAgICAvLyBJbml0aWFsaXplIExaVyBwYXJzZXIvZGVjb2Rlci4K
KyAgICAgICAgICAgIGludCBkYXRhc2l6ZSA9ICpxOworCisgICAgICAgICAgICAvLyBTaW5jZSB3
ZSB1c2UgYSBjb2Rlc2l6ZSBvZiAxIG1vcmUgdGhhbiB0aGUgZGF0YXNpemUsIHdlIG5lZWQgdG8g
ZW5zdXJlCisgICAgICAgICAgICAvLyB0aGF0IG91ciBkYXRhc2l6ZSBpcyBzdHJpY3RseSBsZXNz
IHRoYW4gdGhlIE1BWF9MWldfQklUUyB2YWx1ZSAoMTIpLgorICAgICAgICAgICAgLy8gVGhpcyBz
ZXRzIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGNvZGVtYXNrIGNvcnJlY3RseSBhdCA0MDk1LgorICAg
ICAgICAgICAgaWYgKGRhdGFzaXplID49IE1BWF9MWldfQklUUykKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAgICAg
ICAgIGludCBjbGVhckNvZGUgPSAxIDw8IGRhdGFzaXplOworICAgICAgICAgICAgaWYgKGNsZWFy
Q29kZSA+PSBNQVhfQklUUykKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2Ns
aWVudC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKKworICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250
ZXh0KSB7CisgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmRhdGFzaXplID0gZGF0YXNp
emU7CisgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmNsZWFyQ29kZSA9IGNsZWFyQ29k
ZTsKKyAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+YXZhaWwgPSBtX2ZyYW1lQ29udGV4
dC0+Y2xlYXJDb2RlICsgMjsKKyAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+b2xkY29k
ZSA9IC0xOworICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5jb2Rlc2l6ZSA9IG1fZnJh
bWVDb250ZXh0LT5kYXRhc2l6ZSArIDE7CisgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQt
PmNvZGVtYXNrID0gKDEgPDwgbV9mcmFtZUNvbnRleHQtPmNvZGVzaXplKSAtIDE7CisgICAgICAg
ICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmRhdHVtID0gbV9mcmFtZUNvbnRleHQtPmJpdHMgPSAw
OworCisgICAgICAgICAgICAgICAgLy8gSW5pdCB0aGUgdGFibGVzLgorICAgICAgICAgICAgICAg
IGlmICghbV9mcmFtZUNvbnRleHQtPnN1ZmZpeCkKKyAgICAgICAgICAgICAgICAgICAgbV9mcmFt
ZUNvbnRleHQtPnN1ZmZpeCA9IG5ldyB1bnNpZ25lZCBjaGFyW01BWF9CSVRTXTsKKworICAgICAg
ICAgICAgICAgIC8vIENsZWFyaW5nIHRoZSB3aG9sZSBzdWZmaXggdGFibGUgbGV0cyB1cyBiZSBt
b3JlIHRvbGVyYW50IG9mIGJhZCBkYXRhLgorICAgICAgICAgICAgICAgIG1lbXNldChtX2ZyYW1l
Q29udGV4dC0+c3VmZml4LCAwLCBNQVhfQklUUyk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBtX2ZyYW1lQ29udGV4dC0+Y2xlYXJDb2RlOyBpKyspCisgICAgICAgICAgICAg
ICAgICAgIG1fZnJhbWVDb250ZXh0LT5zdWZmaXhbaV0gPSBpOworCisgICAgICAgICAgICAgICAg
aWYgKCFtX2ZyYW1lQ29udGV4dC0+c3RhY2spCisgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVD
b250ZXh0LT5zdGFjayA9IG5ldyB1bnNpZ25lZCBjaGFyW01BWF9CSVRTXTsKKyAgICAgICAgICAg
ICAgICBtX2ZyYW1lQ29udGV4dC0+c3RhY2twID0gbV9mcmFtZUNvbnRleHQtPnN0YWNrOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBHRVROKDEsIEdJRlN1YkJsb2NrKTsKKyAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBvbGRjb2RlID0gaW5jb2RlOwot
Ci0gICAgICAgIC8qIENvcHkgdGhlIGRlY29kZWQgZGF0YSBvdXQgdG8gdGhlIHNjYW5saW5lIGJ1
ZmZlci4gKi8KLSAgICAgIGRvIHsKLSAgICAgICAgKnJvd3ArKyA9ICotLXN0YWNrcDsKLSAgICAg
ICAgaWYgKHJvd3AgPT0gcm93ZW5kKSB7Ci0gICAgICAgICAgT1VUUFVUX1JPVzsKKworICAgICAg
ICBjYXNlIEdJRlR5cGU6IHsKKyAgICAgICAgICAgIC8vIEFsbCBHSUYgZmlsZXMgYmVnaW4gd2l0
aCAiR0lGODdhIiBvciAiR0lGODlhIi4KKyAgICAgICAgICAgIGlmICghc3RybmNtcCgoY2hhciop
cSwgIkdJRjg5YSIsIDYpKQorICAgICAgICAgICAgICAgIG1fdmVyc2lvbiA9IDg5OworICAgICAg
ICAgICAgZWxzZSBpZiAoIXN0cm5jbXAoKGNoYXIqKXEsICJHSUY4N2EiLCA2KSkKKyAgICAgICAg
ICAgICAgICBtX3ZlcnNpb24gPSA4NzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAg
ICAgICAgIEdFVE4oNywgR0lGR2xvYmFsSGVhZGVyKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9Ci0gICAgICB9IHdoaWxlIChzdGFja3AgPiBzdGFjayk7Ci0gICAgfQotICB9Ci0KLSAg
RU5EOgotCi0gIC8qIEhvbWUgdGhlIGxvY2FsIGNvcGllcyBvZiB0aGUgR0lGIGRlY29kZXIgc3Rh
dGUgdmFyaWFibGVzICovCi0gIGdzLT5hdmFpbCA9IGF2YWlsOwotICBncy0+Yml0cyA9IGJpdHM7
Ci0gIGdzLT5jb2Rlc2l6ZSA9IGNvZGVzaXplOwotICBncy0+Y29kZW1hc2sgPSBjb2RlbWFzazsK
LSAgY291bnQgPSBjbnQ7Ci0gIGdzLT5vbGRjb2RlID0gb2xkY29kZTsKLSAgZ3MtPmZpcnN0Y2hh
ciA9IGZpcnN0Y2hhcjsKLSAgZ3MtPmRhdHVtID0gZGF0dW07Ci0gIGdzLT5zdGFja3AgPSBzdGFj
a3A7Ci0gIGdzLT5yb3dwID0gcm93cDsKLSAgZ3MtPnJvd3NfcmVtYWluaW5nID0gcm93c19yZW1h
aW5pbmc7Ci0KLSAgcmV0dXJuIHRydWU7Ci19CiAKKyAgICAgICAgY2FzZSBHSUZHbG9iYWxIZWFk
ZXI6IHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGhlaWdodCBhbmQgd2lkdGggb2YgdGhl
ICJzY3JlZW4iIG9yIGZyYW1lIGludG8gd2hpY2ggaW1hZ2VzIGFyZSByZW5kZXJlZC4gVGhlCisg
ICAgICAgICAgICAvLyBpbmRpdmlkdWFsIGltYWdlcyBjYW4gYmUgc21hbGxlciB0aGFuIHRoZSBz
Y3JlZW4gc2l6ZSBhbmQgbG9jYXRlZCB3aXRoIGFuIG9yaWdpbiBhbnl3aGVyZQorICAgICAgICAg
ICAgLy8gd2l0aGluIHRoZSBzY3JlZW4uCisgICAgICAgICAgICBtX3NjcmVlbldpZHRoID0gR0VU
SU5UMTYocSk7CisgICAgICAgICAgICBtX3NjcmVlbkhlaWdodCA9IEdFVElOVDE2KHEgKyAyKTsK
KworICAgICAgICAgICAgLy8gQ0FMTEJBQ0s6IEluZm9ybSB0aGUgZGVjb2RlcnBsdWdpbiBvZiBv
dXIgc2l6ZS4KKyAgICAgICAgICAgIGlmIChtX2NsaWVudCAmJiAhbV9jbGllbnQtPnNldFNpemUo
bV9zY3JlZW5XaWR0aCwgbV9zY3JlZW5IZWlnaHQpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICAgICAgbV9zY3JlZW5CZ2NvbG9yID0gcVs1XTsKKyAgICAgICAgICAg
IG1fZ2xvYmFsQ29sb3JtYXBTaXplID0gMiA8PCAocVs0XSAmIDB4MDcpOworCisgICAgICAgICAg
ICBpZiAoKHFbNF0gJiAweDgwKSAmJiBtX2dsb2JhbENvbG9ybWFwU2l6ZSA+IDApIHsgLyogZ2xv
YmFsIG1hcCAqLworICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgZ2xvYmFsIGNvbG9ybWFwCisg
ICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgc2l6ZSA9IDMqbV9nbG9iYWxDb2xvcm1hcFNp
emU7CisKKyAgICAgICAgICAgICAgICAvLyBNYWxsb2MgdGhlIGNvbG9yIG1hcCwgYnV0IG9ubHkg
aWYgd2UncmUgbm90IGp1c3QgY291bnRpbmcgZnJhbWVzLgorICAgICAgICAgICAgICAgIGlmIChx
dWVyeSAhPSBHSUZJbWFnZURlY29kZXI6OkdJRkZyYW1lQ291bnRRdWVyeSkKKyAgICAgICAgICAg
ICAgICAgICAgbV9nbG9iYWxDb2xvcm1hcCA9IG5ldyB1bnNpZ25lZCBjaGFyW3NpemVdOworCisg
ICAgICAgICAgICAgICAgaWYgKGxlbiA8IHNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
VXNlICdob2xkJyBwYXR0ZXJuIHRvIGdldCB0aGUgZ2xvYmFsIGNvbG9ybWFwCisgICAgICAgICAg
ICAgICAgICAgIEdFVE4oc2l6ZSwgR0lGR2xvYmFsQ29sb3JtYXApOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBDb3B5
IGV2ZXJ5dGhpbmcgYW5kIGdvIGRpcmVjdGx5IHRvIEdJRkltYWdlX3N0YXJ0LgorICAgICAgICAg
ICAgICAgIGlmIChtX2dsb2JhbENvbG9ybWFwKQorICAgICAgICAgICAgICAgICAgICBtZW1jcHko
bV9nbG9iYWxDb2xvcm1hcCwgYnVmLCBzaXplKTsKKyAgICAgICAgICAgICAgICBidWYgKz0gc2l6
ZTsKKyAgICAgICAgICAgICAgICBsZW4gLT0gc2l6ZTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgR0VUTigxLCBHSUZJbWFnZVN0YXJ0KTsKKworICAgICAgICAgICAgLy8gcVs2XSA9IFBp
eGVsIEFzcGVjdCBSYXRpbworICAgICAgICAgICAgLy8gICBOb3QgdXNlZAorICAgICAgICAgICAg
Ly8gICBmbG9hdCBhc3BlY3QgPSAoZmxvYXQpKChxWzZdICsgMTUpIC8gNjQuMCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoKLSAq
IHByb2Nlc3MgZGF0YSBhcnJpdmluZyBmcm9tIHRoZSBzdHJlYW0gZm9yIHRoZSBnaWYgZGVjb2Rl
cgotICovCisgICAgICAgIGNhc2UgR0lGR2xvYmFsQ29sb3JtYXA6IHsKKyAgICAgICAgICAgIC8v
IEV2ZXJ5dGhpbmcgaXMgYWxyZWFkeSBjb3BpZWQgaW50byBtX2dsb2JhbENvbG9ybWFwCisgICAg
ICAgICAgICBHRVROKDEsIEdJRkltYWdlU3RhcnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KIAotYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZCBjaGFyICpi
dWYsIHVuc2lnbmVkIGxlbiwgCi0gICAgICAgICAgICAgICAgICAgICBHSUZJbWFnZURlY29kZXI6
OkdJRlF1ZXJ5IHF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSkKLXsKLSAgaWYgKCFsZW4pIHsK
LSAgICAvLyBObyBuZXcgZGF0YSBoYXMgY29tZSBpbiBzaW5jZSB0aGUgbGFzdCBjYWxsLCBqdXN0
IGlnbm9yZSB0aGlzIGNhbGwuCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBjb25zdCB1bnNp
Z25lZCBjaGFyICpxID0gYnVmOwotCi0gIC8vIEFkZCB3aGF0IHdlIGhhdmUgc28gZmFyIHRvIHRo
ZSBibG9jawotICAvLyBJZiBwcmV2aW91cyBjYWxsIHRvIG1lIGxlZnQgc29tZXRoaW5nIGluIHRo
ZSBob2xkIGZpcnN0IGNvbXBsZXRlIGN1cnJlbnQgYmxvY2sKLSAgLy8gT3IgaWYgd2UgYXJlIGZp
bGxpbmcgdGhlIGNvbG9ybWFwcywgZmlyc3QgY29tcGxldGUgdGhlIGNvbG9ybWFwCi0gIHVuc2ln
bmVkIGNoYXIqIHAgPSAwOwotICBpZiAoc3RhdGUgPT0gZ2lmX2dsb2JhbF9jb2xvcm1hcCkKLSAg
ICBwID0gZ2xvYmFsX2NvbG9ybWFwOwotICBlbHNlIGlmIChzdGF0ZSA9PSBnaWZfaW1hZ2VfY29s
b3JtYXApCi0gICAgcCA9IGZyYW1lX3JlYWRlciA/IGZyYW1lX3JlYWRlci0+bG9jYWxfY29sb3Jt
YXAgOiAwOwotICBlbHNlIGlmIChieXRlc19pbl9ob2xkKQotICAgIHAgPSBob2xkOwotICBlbHNl
Ci0gICAgcCA9IDA7Ci0KLSAgaWYgKHAgfHwgKHN0YXRlID09IGdpZl9nbG9iYWxfY29sb3JtYXAp
IHx8IChzdGF0ZSA9PSBnaWZfaW1hZ2VfY29sb3JtYXApKSB7Ci0gICAgLy8gQWRkIHdoYXQgd2Ug
aGF2ZSBzb2ZhciB0byB0aGUgYmxvY2sKLSAgICB1bnNpZ25lZCBsID0gbGVuIDwgYnl0ZXNfdG9f
Y29uc3VtZSA/IGxlbiA6IGJ5dGVzX3RvX2NvbnN1bWU7Ci0gICAgaWYgKHApCi0gICAgICAgIG1l
bWNweShwICsgYnl0ZXNfaW5faG9sZCwgYnVmLCBsKTsKLQotICAgIGlmIChsIDwgYnl0ZXNfdG9f
Y29uc3VtZSkgewotICAgICAgLy8gTm90IGVub3VnaCBpbiAnYnVmJyB0byBjb21wbGV0ZSBjdXJy
ZW50IGJsb2NrLCBnZXQgbW9yZQotICAgICAgYnl0ZXNfaW5faG9sZCArPSBsOwotICAgICAgYnl0
ZXNfdG9fY29uc3VtZSAtPSBsOwotICAgICAgaWYgKGNsaWVudHB0cikKLSAgICAgICAgY2xpZW50
cHRyLT5kZWNvZGluZ0hhbHRlZCgwKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
Ly8gUmVzZXQgaG9sZCBidWZmZXIgY291bnQKLSAgICBieXRlc19pbl9ob2xkID0gMDsKLSAgICAv
LyBQb2ludCAncScgdG8gY29tcGxldGUgYmxvY2sgaW4gaG9sZCAob3IgaW4gY29sb3JtYXApCi0g
ICAgcSA9IHA7Ci0gIH0KLQotICAvLyBJbnZhcmlhbnQ6Ci0gIC8vICAgICdxJyBpcyBzdGFydCBv
ZiBjdXJyZW50IHRvIGJlIHByb2Nlc3NlZCBibG9jayAoaG9sZCwgY29sb3JtYXAgb3IgYnVmKQot
ICAvLyAgICAnYnl0ZXNfdG9fY29uc3VtZScgaXMgbnVtYmVyIG9mIGJ5dGVzIHRvIGNvbnN1bWUg
ZnJvbSAnYnVmJwotICAvLyAgICAnYnVmJyBwb2ludHMgdG8gdGhlIGJ5dGVzIHRvIGJlIGNvbnN1
bWVkIGZyb20gdGhlIGlucHV0IGJ1ZmZlcgotICAvLyAgICAnbGVuJyBpcyBudW1iZXIgb2YgYnl0
ZXMgbGVmdCBpbiBpbnB1dCBidWZmZXIgZnJvbSBwb3NpdGlvbiAnYnVmJy4KLSAgLy8gICAgQXQg
ZW50cmFuY2Ugb2YgdGhlIGZvciBsb29wIHdpbGwgJ2J1Zicgd2lsbCBiZSBtb3ZlZCAnYnl0ZXNf
dG9fY29uc3VtZScKLSAgLy8gICAgdG8gcG9pbnQgdG8gbmV4dCBidWZmZXIsICdsZW4nIGlzIGFk
anVzdGVkIGFjY29yZGluZ2x5LgotICAvLyAgICBTbyB0aGF0IG5leHQgcm91bmQgaW4gZm9yIGxv
b3AsIHEgZ2V0cyBwb2ludGVkIHRvIHRoZSBuZXh0IGJ1ZmZlci4KLQotICBmb3IgKDtsZW4gPj0g
Ynl0ZXNfdG9fY29uc3VtZTsgcT1idWYpIHsKLSAgICAvLyBFYXQgdGhlIGN1cnJlbnQgYmxvY2sg
ZnJvbSB0aGUgYnVmZmVyLCBxIGtlZXBzIHBvaW50ZWQgYXQgY3VycmVudCBibG9jawotICAgIGJ1
ZiArPSBieXRlc190b19jb25zdW1lOwotICAgIGxlbiAtPSBieXRlc190b19jb25zdW1lOwotCi0g
ICAgc3dpdGNoIChzdGF0ZSkKLSAgICB7Ci0gICAgY2FzZSBnaWZfbHp3OgotICAgICAgaWYgKCFk
b19sencocSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gSWYgZG9fbHp3KCkgZW5jb3VudGVy
ZWQgYW4gZXJyb3IsIGl0IGhhcyBhbHJlYWR5IGNhbGxlZAotICAgICAgICAgICAgICAgICAgICAg
IC8vIGNsaWVudHB0ci0+c2V0RmFpbGVkKCkuCi0gICAgICBHRVROKDEsIGdpZl9zdWJfYmxvY2sp
OwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIGdpZl9sendfc3RhcnQ6Ci0gICAgewotICAgICAg
LyogSW5pdGlhbGl6ZSBMWlcgcGFyc2VyL2RlY29kZXIgKi8KLSAgICAgIGludCBkYXRhc2l6ZSA9
ICpxOwotICAgICAgLy8gU2luY2Ugd2UgdXNlIGEgY29kZXNpemUgb2YgMSBtb3JlIHRoYW4gdGhl
IGRhdGFzaXplLCB3ZSBuZWVkIHRvIGVuc3VyZQotICAgICAgLy8gdGhhdCBvdXIgZGF0YXNpemUg
aXMgc3RyaWN0bHkgbGVzcyB0aGFuIHRoZSBNQVhfTFpXX0JJVFMgdmFsdWUgKDEyKS4KLSAgICAg
IC8vIFRoaXMgc2V0cyB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBjb2RlbWFzayBjb3JyZWN0bHkgYXQg
NDA5NS4KLSAgICAgIGlmIChkYXRhc2l6ZSA+PSBNQVhfTFpXX0JJVFMpCi0gICAgICAgIHJldHVy
biBjbGllbnRwdHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7Ci0gICAgICBpbnQg
Y2xlYXJfY29kZSA9IDEgPDwgZGF0YXNpemU7Ci0gICAgICBpZiAoY2xlYXJfY29kZSA+PSBNQVhf
QklUUykKLSAgICAgICAgcmV0dXJuIGNsaWVudHB0ciA/IGNsaWVudHB0ci0+c2V0RmFpbGVkKCkg
OiBmYWxzZTsKLQotICAgICAgaWYgKGZyYW1lX3JlYWRlcikgewotICAgICAgICBmcmFtZV9yZWFk
ZXItPmRhdGFzaXplID0gZGF0YXNpemU7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+Y2xlYXJfY29k
ZSA9IGNsZWFyX2NvZGU7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+YXZhaWwgPSBmcmFtZV9yZWFk
ZXItPmNsZWFyX2NvZGUgKyAyOwotICAgICAgICBmcmFtZV9yZWFkZXItPm9sZGNvZGUgPSAtMTsK
LSAgICAgICAgZnJhbWVfcmVhZGVyLT5jb2Rlc2l6ZSA9IGZyYW1lX3JlYWRlci0+ZGF0YXNpemUg
KyAxOwotICAgICAgICBmcmFtZV9yZWFkZXItPmNvZGVtYXNrID0gKDEgPDwgZnJhbWVfcmVhZGVy
LT5jb2Rlc2l6ZSkgLSAxOwotCi0gICAgICAgIGZyYW1lX3JlYWRlci0+ZGF0dW0gPSBmcmFtZV9y
ZWFkZXItPmJpdHMgPSAwOwotCi0gICAgICAgIC8qIGluaXQgdGhlIHRhYmxlcyAqLwotICAgICAg
ICBpZiAoIWZyYW1lX3JlYWRlci0+c3VmZml4KQotICAgICAgICAgIGZyYW1lX3JlYWRlci0+c3Vm
Zml4ID0gbmV3IHVuc2lnbmVkIGNoYXJbTUFYX0JJVFNdOwotICAgICAgICAvLyBDbGVhcmluZyB0
aGUgd2hvbGUgc3VmZml4IHRhYmxlIGxldHMgdXMgYmUgbW9yZSB0b2xlcmFudCBvZiBiYWQgZGF0
YS4KLSAgICAgICAgbWVtc2V0KGZyYW1lX3JlYWRlci0+c3VmZml4LCAwLCBNQVhfQklUUyk7Ci0g
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhbWVfcmVhZGVyLT5jbGVhcl9jb2RlOyBpKysp
Ci0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5zdWZmaXhbaV0gPSBpOwotCi0gICAgICAgIGlmICgh
ZnJhbWVfcmVhZGVyLT5zdGFjaykKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPnN0YWNrID0gbmV3
IHVuc2lnbmVkIGNoYXJbTUFYX0JJVFNdOwotICAgICAgICBmcmFtZV9yZWFkZXItPnN0YWNrcCA9
IGZyYW1lX3JlYWRlci0+c3RhY2s7Ci0gICAgICB9Ci0KLSAgICAgIEdFVE4oMSwgZ2lmX3N1Yl9i
bG9jayk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gICAgLyogQWxsIEdJRiBmaWxlcyBiZWdpbiB3
aXRoICJHSUY4N2EiIG9yICJHSUY4OWEiICovCi0gICAgY2FzZSBnaWZfdHlwZToKLSAgICB7Ci0g
ICAgICBpZiAoIXN0cm5jbXAoKGNoYXIqKXEsICJHSUY4OWEiLCA2KSkKLSAgICAgICAgdmVyc2lv
biA9IDg5OwotICAgICAgZWxzZSBpZiAoIXN0cm5jbXAoKGNoYXIqKXEsICJHSUY4N2EiLCA2KSkK
LSAgICAgICAgdmVyc2lvbiA9IDg3OwotICAgICAgZWxzZQotICAgICAgICByZXR1cm4gY2xpZW50
cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQoKSA6IGZhbHNlOwotICAgICAgR0VUTig3LCBnaWZf
Z2xvYmFsX2hlYWRlcik7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gICAgY2FzZSBnaWZfZ2xvYmFs
X2hlYWRlcjoKLSAgICB7Ci0gICAgICAvKiBUaGlzIGlzIHRoZSBoZWlnaHQgYW5kIHdpZHRoIG9m
IHRoZSAic2NyZWVuIiBvcgotICAgICAgICogZnJhbWUgaW50byB3aGljaCBpbWFnZXMgYXJlIHJl
bmRlcmVkLiAgVGhlCi0gICAgICAgKiBpbmRpdmlkdWFsIGltYWdlcyBjYW4gYmUgc21hbGxlciB0
aGFuIHRoZQotICAgICAgICogc2NyZWVuIHNpemUgYW5kIGxvY2F0ZWQgd2l0aCBhbiBvcmlnaW4g
YW55d2hlcmUKLSAgICAgICAqIHdpdGhpbiB0aGUgc2NyZWVuLgotICAgICAgICovCi0KLSAgICAg
IHNjcmVlbl93aWR0aCA9IEdFVElOVDE2KHEpOwotICAgICAgc2NyZWVuX2hlaWdodCA9IEdFVElO
VDE2KHEgKyAyKTsKLQotICAgICAgLy8gQ0FMTEJBQ0s6IEluZm9ybSB0aGUgZGVjb2RlcnBsdWdp
biBvZiBvdXIgc2l6ZS4KLSAgICAgIGlmIChjbGllbnRwdHIgJiYgIWNsaWVudHB0ci0+c2V0U2l6
ZShzY3JlZW5fd2lkdGgsIHNjcmVlbl9oZWlnaHQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAKLSAgICAgIHNjcmVlbl9iZ2NvbG9yID0gcVs1XTsKLSAgICAgIGdsb2JhbF9jb2xvcm1h
cF9zaXplID0gMjw8KHFbNF0mMHgwNyk7Ci0KLSAgICAgIGlmICgocVs0XSAmIDB4ODApICYmIGds
b2JhbF9jb2xvcm1hcF9zaXplID4gMCkgeyAvKiBnbG9iYWwgbWFwICovCi0gICAgICAgIC8vIEdl
dCB0aGUgZ2xvYmFsIGNvbG9ybWFwCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNpemUgPSAzKmds
b2JhbF9jb2xvcm1hcF9zaXplOwotICAgICAgICAKLSAgICAgICAgLy8gTWFsbG9jIHRoZSBjb2xv
ciBtYXAsIGJ1dCBvbmx5IGlmIHdlJ3JlIG5vdCBqdXN0IGNvdW50aW5nIGZyYW1lcy4KLSAgICAg
ICAgaWYgKHF1ZXJ5ICE9IEdJRkltYWdlRGVjb2Rlcjo6R0lGRnJhbWVDb3VudFF1ZXJ5KQotICAg
ICAgICAgIGdsb2JhbF9jb2xvcm1hcCA9IG5ldyB1bnNpZ25lZCBjaGFyW3NpemVdOwotCi0gICAg
ICAgIGlmIChsZW4gPCBzaXplKSB7Ci0gICAgICAgICAgLy8gVXNlICdob2xkJyBwYXR0ZXJuIHRv
IGdldCB0aGUgZ2xvYmFsIGNvbG9ybWFwCi0gICAgICAgICAgR0VUTihzaXplLCBnaWZfZ2xvYmFs
X2NvbG9ybWFwKTsKLSAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHSUZJbWFnZVN0YXJ0
OiB7CisgICAgICAgICAgICBpZiAoKnEgPT0gJzsnKSB7IC8vIHRlcm1pbmF0b3IuCisgICAgICAg
ICAgICAgICAgR0VUTigwLCBHSUZEb25lKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCpxID09ICchJykgeyAvLyBleHRlbnNpb24uCisg
ICAgICAgICAgICAgICAgR0VUTigyLCBHSUZFeHRlbnNpb24pOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJZiB3ZSBnZXQgYW55dGhpbmcg
b3RoZXIgdGhhbiAnLCcgKGltYWdlIHNlcGFyYXRvciksICchJworICAgICAgICAgICAgLy8gKGV4
dGVuc2lvbiksIG9yICc7JyAodHJhaWxlciksIHRoZXJlIGlzIGV4dHJhbmVvdXMgZGF0YQorICAg
ICAgICAgICAgLy8gYmV0d2VlbiBibG9ja3MuIFRoZSBHSUY4N2Egc3BlYyB0ZWxscyB1cyB0byBr
ZWVwIHJlYWRpbmcKKyAgICAgICAgICAgIC8vIHVudGlsIHdlIGZpbmQgYW4gaW1hZ2Ugc2VwYXJh
dG9yLCBidXQgR0lGODlhIHNheXMgc3VjaAorICAgICAgICAgICAgLy8gYSBmaWxlIGlzIGNvcnJ1
cHQuIFdlIGZvbGxvdyBHSUY4OWEgYW5kIGJhaWwgb3V0LgorICAgICAgICAgICAgaWYgKCpxICE9
ICcsJykKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+c2V0RmFp
bGVkKCkgOiBmYWxzZTsKKworICAgICAgICAgICAgR0VUTig5LCBHSUZJbWFnZUhlYWRlcik7Cisg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gQ29weSBl
dmVyeXRoaW5nIGFuZCBnbyBkaXJlY3RseSB0byBnaWZfaW1hZ2Vfc3RhcnQuCi0gICAgICAgIGlm
IChnbG9iYWxfY29sb3JtYXApCi0gICAgICAgICAgICBtZW1jcHkoZ2xvYmFsX2NvbG9ybWFwLCBi
dWYsIHNpemUpOwotICAgICAgICBidWYgKz0gc2l6ZTsKLSAgICAgICAgbGVuIC09IHNpemU7Ci0g
ICAgICB9Ci0KLSAgICAgIEdFVE4oMSwgZ2lmX2ltYWdlX3N0YXJ0KTsKLQotICAgICAgLy8gcVs2
XSA9IFBpeGVsIEFzcGVjdCBSYXRpbwotICAgICAgLy8gICBOb3QgdXNlZAotICAgICAgLy8gICBm
bG9hdCBhc3BlY3QgPSAoZmxvYXQpKChxWzZdICsgMTUpIC8gNjQuMCk7Ci0gICAgfQotICAgIGJy
ZWFrOwotCi0gICAgY2FzZSBnaWZfZ2xvYmFsX2NvbG9ybWFwOgotICAgICAgLy8gRXZlcnl0aGlu
ZyBpcyBhbHJlYWR5IGNvcGllZCBpbnRvIGdsb2JhbF9jb2xvcm1hcAotICAgICAgR0VUTigxLCBn
aWZfaW1hZ2Vfc3RhcnQpOwotICAgIGJyZWFrOwotCi0gICAgY2FzZSBnaWZfaW1hZ2Vfc3RhcnQ6
Ci0gICAgewotICAgICAgaWYgKCpxID09ICc7JykgeyAvKiB0ZXJtaW5hdG9yICovCi0gICAgICAg
IEdFVE4oMCwgZ2lmX2RvbmUpOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgaWYg
KCpxID09ICchJykgeyAvKiBleHRlbnNpb24gKi8KLSAgICAgICAgR0VUTigyLCBnaWZfZXh0ZW5z
aW9uKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8qIElmIHdlIGdldCBhbnl0
aGluZyBvdGhlciB0aGFuICcsJyAoaW1hZ2Ugc2VwYXJhdG9yKSwgJyEnCi0gICAgICAgKiAoZXh0
ZW5zaW9uKSwgb3IgJzsnICh0cmFpbGVyKSwgdGhlcmUgaXMgZXh0cmFuZW91cyBkYXRhCi0gICAg
ICAgKiBiZXR3ZWVuIGJsb2Nrcy4gVGhlIEdJRjg3YSBzcGVjIHRlbGxzIHVzIHRvIGtlZXAgcmVh
ZGluZwotICAgICAgICogdW50aWwgd2UgZmluZCBhbiBpbWFnZSBzZXBhcmF0b3IsIGJ1dCBHSUY4
OWEgc2F5cyBzdWNoCi0gICAgICAgKiBhIGZpbGUgaXMgY29ycnVwdC4gV2UgZm9sbG93IEdJRjg5
YSBhbmQgYmFpbCBvdXQuICovCi0gICAgICBpZiAoKnEgIT0gJywnKQotICAgICAgICByZXR1cm4g
Y2xpZW50cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQoKSA6IGZhbHNlOwotCi0gICAgICBHRVRO
KDksIGdpZl9pbWFnZV9oZWFkZXIpOwotICAgIH0KLSAgICBicmVhazsKLQotICAgIGNhc2UgZ2lm
X2V4dGVuc2lvbjoKLSAgICB7Ci0gICAgICBjb3VudCA9IHFbMV07Ci0gICAgICBnc3RhdGUgZXMg
PSBnaWZfc2tpcF9ibG9jazsKLQotICAgICAgLy8gVGhlIEdJRiBzcGVjIG1hbmRhdGVzIGxlbmd0
aHMgZm9yIHRocmVlIG9mIHRoZSBleHRlbnNpb25zIGJlbG93LgotICAgICAgLy8gSG93ZXZlciwg
aXQncyBwb3NzaWJsZSBmb3IgR0lGcyBpbiB0aGUgd2lsZCB0byBkZXZpYXRlLiBGb3IgZXhhbXBs
ZSwKLSAgICAgIC8vIHNvbWUgR0lGcyB0aGF0IGVtYmVkIElDQyBjb2xvciBwcm9maWxlcyB1c2lu
ZyBnaWZfYXBwbGljYXRpb25fZXh0ZW5zaW9uCi0gICAgICAvLyB2aW9sYXRlIHRoZSBzcGVjIGFu
ZCB0cmVhdCB0aGlzIGV4dGVuc2lvbiBibG9jayBsaWtlIGEgc29ydCBvZgotICAgICAgLy8gImV4
dGVuc2lvbiArIGRhdGEiIGJsb2NrLCBnaXZpbmcgYSBzaXplIGdyZWF0ZXIgdGhhbiAxMSBhbmQg
ZmlsbGluZyB0aGUKLSAgICAgIC8vIHJlbWFpbmluZyBieXRlcyB3aXRoIGRhdGEgKHRoZW4gZm9s
bG93aW5nIHdpdGggbW9yZSBkYXRhIGJsb2NrcyBhcwotICAgICAgLy8gbmVlZGVkKSwgaW5zdGVh
ZCBvZiBwbGFjaW5nIGEgdHJ1ZSBkYXRhIGJsb2NrIGp1c3QgYWZ0ZXIgdGhlIDExIGJ5dGUKLSAg
ICAgIC8vIGV4dGVuc2lvbiBibG9jay4KLSAgICAgIC8vCi0gICAgICAvLyBBY2NvcmRpbmdseSwg
aWYgdGhlIHNwZWNpZmllZCBsZW5ndGggaXMgbGFyZ2VyIHRoYW4gdGhlIHJlcXVpcmVkIHZhbHVl
LAotICAgICAgLy8gd2UgdXNlIGl0LiBJZiBpdCdzIHNtYWxsZXIsIHRoZW4gd2UgZW5mb3JjZSB0
aGUgc3BlYyB2YWx1ZSwgYmVjYXVzZSB0aGUKLSAgICAgIC8vIHBhcnNlcnMgZm9yIHRoZXNlIGV4
dGVuc2lvbnMgZXhwZWN0IHRvIGhhdmUgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YKLSAgICAgIC8v
IGJ5dGVzIGF2YWlsYWJsZSwgYW5kIGlmIHdlIGRvbid0IGVuc3VyZSB0aGF0LCB0aGV5IGNvdWxk
IHJlYWQgb2ZmIHRoZQotICAgICAgLy8gZW5kIG9mIHRoZSBoZWFwIGJ1ZmZlci4gKEluIHRoaXMg
Y2FzZSwgaXQncyBsaWtlbHkgdGhlIEdJRiBpcyBjb3JydXB0Ci0gICAgICAvLyBhbmQgd2UnbGwg
c29vbiBmYWlsIHRvIGRlY29kZSBhbnl3YXkuKQotICAgICAgc3dpdGNoICgqcSkKLSAgICAgIHsK
LSAgICAgIGNhc2UgMHhmOToKLSAgICAgICAgZXMgPSBnaWZfY29udHJvbF9leHRlbnNpb247Ci0g
ICAgICAgIGNvdW50ID0gc3RkOjptYXgoY291bnQsIDQpOwotICAgICAgICBicmVhazsKLQotICAg
ICAgY2FzZSAweDAxOgotICAgICAgICAvLyBpZ25vcmluZyBwbGFpbiB0ZXh0IGV4dGVuc2lvbgot
ICAgICAgICBjb3VudCA9IHN0ZDo6bWF4KGNvdW50LCAxMik7Ci0gICAgICAgIGJyZWFrOwotCi0g
ICAgICBjYXNlIDB4ZmY6Ci0gICAgICAgIGVzID0gZ2lmX2FwcGxpY2F0aW9uX2V4dGVuc2lvbjsK
LSAgICAgICAgY291bnQgPSBzdGQ6Om1heChjb3VudCwgMTEpOwotICAgICAgICBicmVhazsKLQot
ICAgICAgY2FzZSAweGZlOgotICAgICAgICBlcyA9IGdpZl9jb25zdW1lX2NvbW1lbnQ7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBpZiAoY291bnQpCi0gICAgICAgIEdFVE4oY291
bnQsIGVzKTsKLSAgICAgIGVsc2UKLSAgICAgICAgR0VUTigxLCBnaWZfaW1hZ2Vfc3RhcnQpOwot
ICAgIH0KLSAgICBicmVhazsKLQotICAgIGNhc2UgZ2lmX2NvbnN1bWVfYmxvY2s6Ci0gICAgICBp
ZiAoISpxKQotICAgICAgICBHRVROKDEsIGdpZl9pbWFnZV9zdGFydCk7Ci0gICAgICBlbHNlCi0g
ICAgICAgIEdFVE4oKnEsIGdpZl9za2lwX2Jsb2NrKTsKLSAgICBicmVhazsKLQotICAgIGNhc2Ug
Z2lmX3NraXBfYmxvY2s6Ci0gICAgICBHRVROKDEsIGdpZl9jb25zdW1lX2Jsb2NrKTsKLSAgICAg
IGJyZWFrOwotCi0gICAgY2FzZSBnaWZfY29udHJvbF9leHRlbnNpb246Ci0gICAgewotICAgICAg
aWYgKHF1ZXJ5ICE9IEdJRkltYWdlRGVjb2Rlcjo6R0lGRnJhbWVDb3VudFF1ZXJ5KSB7Ci0gICAg
ICAgICAgaWYgKCFmcmFtZV9yZWFkZXIpCi0gICAgICAgICAgICBmcmFtZV9yZWFkZXIgPSBuZXcg
R0lGRnJhbWVSZWFkZXIoKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGZyYW1lX3JlYWRlcikgewot
ICAgICAgICBpZiAoKnEgJiAweDEpIHsKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPnRwaXhlbCA9
IHFbM107Ci0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5pc190cmFuc3BhcmVudCA9IHRydWU7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5pc190cmFuc3BhcmVudCA9
IGZhbHNlOwotICAgICAgICAgIC8vIGlnbm9yaW5nIGdmeCBjb250cm9sIGV4dGVuc2lvbgorCisg
ICAgICAgIGNhc2UgR0lGRXh0ZW5zaW9uOiB7CisgICAgICAgICAgICBtX2NvdW50ID0gcVsxXTsK
KyAgICAgICAgICAgIEdJRlN0YXRlIGVzID0gR0lGU2tpcEJsb2NrOworCisgICAgICAgICAgICAv
LyBUaGUgR0lGIHNwZWMgbWFuZGF0ZXMgbGVuZ3RocyBmb3IgdGhyZWUgb2YgdGhlIGV4dGVuc2lv
bnMgYmVsb3cuCisgICAgICAgICAgICAvLyBIb3dldmVyLCBpdCdzIHBvc3NpYmxlIGZvciBHSUZz
IGluIHRoZSB3aWxkIHRvIGRldmlhdGUuIEZvciBleGFtcGxlLAorICAgICAgICAgICAgLy8gc29t
ZSBHSUZzIHRoYXQgZW1iZWQgSUNDIGNvbG9yIHByb2ZpbGVzIHVzaW5nIEdJRkFwcGxpY2F0aW9u
RXh0ZW5zaW9uCisgICAgICAgICAgICAvLyB2aW9sYXRlIHRoZSBzcGVjIGFuZCB0cmVhdCB0aGlz
IGV4dGVuc2lvbiBibG9jayBsaWtlIGEgc29ydCBvZgorICAgICAgICAgICAgLy8gImV4dGVuc2lv
biArIGRhdGEiIGJsb2NrLCBnaXZpbmcgYSBzaXplIGdyZWF0ZXIgdGhhbiAxMSBhbmQgZmlsbGlu
ZyB0aGUKKyAgICAgICAgICAgIC8vIHJlbWFpbmluZyBieXRlcyB3aXRoIGRhdGEgKHRoZW4gZm9s
bG93aW5nIHdpdGggbW9yZSBkYXRhIGJsb2NrcyBhcworICAgICAgICAgICAgLy8gbmVlZGVkKSwg
aW5zdGVhZCBvZiBwbGFjaW5nIGEgdHJ1ZSBkYXRhIGJsb2NrIGp1c3QgYWZ0ZXIgdGhlIDExIGJ5
dGUKKyAgICAgICAgICAgIC8vIGV4dGVuc2lvbiBibG9jay4KKyAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAvLyBBY2NvcmRpbmdseSwgaWYgdGhlIHNwZWNpZmllZCBsZW5ndGggaXMgbGFyZ2Vy
IHRoYW4gdGhlIHJlcXVpcmVkIHZhbHVlLAorICAgICAgICAgICAgLy8gd2UgdXNlIGl0LiBJZiBp
dCdzIHNtYWxsZXIsIHRoZW4gd2UgZW5mb3JjZSB0aGUgc3BlYyB2YWx1ZSwgYmVjYXVzZSB0aGUK
KyAgICAgICAgICAgIC8vIHBhcnNlcnMgZm9yIHRoZXNlIGV4dGVuc2lvbnMgZXhwZWN0IHRvIGhh
dmUgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YKKyAgICAgICAgICAgIC8vIGJ5dGVzIGF2YWlsYWJs
ZSwgYW5kIGlmIHdlIGRvbid0IGVuc3VyZSB0aGF0LCB0aGV5IGNvdWxkIHJlYWQgb2ZmIHRoZQor
ICAgICAgICAgICAgLy8gZW5kIG9mIHRoZSBoZWFwIGJ1ZmZlci4gKEluIHRoaXMgY2FzZSwgaXQn
cyBsaWtlbHkgdGhlIEdJRiBpcyBjb3JydXB0CisgICAgICAgICAgICAvLyBhbmQgd2UnbGwgc29v
biBmYWlsIHRvIGRlY29kZSBhbnl3YXkuKQorICAgICAgICAgICAgc3dpdGNoICgqcSkgeworICAg
ICAgICAgICAgY2FzZSAweGY5OgorICAgICAgICAgICAgICAgIGVzID0gR0lGQ29udHJvbEV4dGVu
c2lvbjsKKyAgICAgICAgICAgICAgICBtX2NvdW50ID0gc3RkOjptYXgobV9jb3VudCwgNCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgMHgwMToKKyAgICAgICAg
ICAgICAgICAvLyBpZ25vcmluZyBwbGFpbiB0ZXh0IGV4dGVuc2lvbgorICAgICAgICAgICAgICAg
IG1fY291bnQgPSBzdGQ6Om1heChtX2NvdW50LCAxMik7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgICAgIGNhc2UgMHhmZjoKKyAgICAgICAgICAgICAgICBlcyA9IEdJRkFwcGxp
Y2F0aW9uRXh0ZW5zaW9uOworICAgICAgICAgICAgICAgIG1fY291bnQgPSBzdGQ6Om1heChtX2Nv
dW50LCAxMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgMHhm
ZToKKyAgICAgICAgICAgICAgICBlcyA9IEdJRkNvbnN1bWVDb21tZW50OworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobV9jb3VudCkKKyAg
ICAgICAgICAgICAgICBHRVROKG1fY291bnQsIGVzKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBHRVROKDEsIEdJRkltYWdlU3RhcnQpOworICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KLSAgICAgICAgLy8gTk9URTogVGhpcyByZWxpZXMgb24gdGhlIHZhbHVlcyBpbiB0
aGUgRnJhbWVEaXNwb3NhbE1ldGhvZCBlbnVtCi0gICAgICAgIC8vIG1hdGNoaW5nIHRob3NlIGlu
IHRoZSBHSUYgc3BlYyEKLSAgICAgICAgaW50IGRpc3Bvc2FsX21ldGhvZCA9ICgoKnEpID4+IDIp
ICYgMHg3OwotICAgICAgICBmcmFtZV9yZWFkZXItPmRpc3Bvc2FsX21ldGhvZCA9IChXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpGcmFtZURpc3Bvc2FsTWV0aG9kKWRpc3Bvc2FsX21ldGhvZDsKLSAgICAg
ICAgLy8gU29tZSBzcGVjcyBzYXkgM3JkIGJpdCAodmFsdWUgNCksIG90aGVyIHNwZWNzIHNheSB2
YWx1ZSAzCi0gICAgICAgIC8vIExldCdzIGNob29zZSAzICh0aGUgbW9yZSBwb3B1bGFyKQotICAg
ICAgICBpZiAoZGlzcG9zYWxfbWV0aG9kID09IDQpCi0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5k
aXNwb3NhbF9tZXRob2QgPSBXZWJDb3JlOjpJbWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRlUHJl
dmlvdXM7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+ZGVsYXlfdGltZSA9IEdFVElOVDE2KHEgKyAx
KSAqIDEwOwotICAgICAgfQotICAgICAgR0VUTigxLCBnaWZfY29uc3VtZV9ibG9jayk7Ci0gICAg
fQotICAgIGJyZWFrOwotCi0gICAgY2FzZSBnaWZfY29tbWVudF9leHRlbnNpb246Ci0gICAgewot
ICAgICAgaWYgKCpxKQotICAgICAgICBHRVROKCpxLCBnaWZfY29uc3VtZV9jb21tZW50KTsKLSAg
ICAgIGVsc2UKLSAgICAgICAgR0VUTigxLCBnaWZfaW1hZ2Vfc3RhcnQpOwotICAgIH0KLSAgICBi
cmVhazsKLQotICAgIGNhc2UgZ2lmX2NvbnN1bWVfY29tbWVudDoKLSAgICAgIEdFVE4oMSwgZ2lm
X2NvbW1lbnRfZXh0ZW5zaW9uKTsKLSAgICBicmVhazsKLQotICAgIGNhc2UgZ2lmX2FwcGxpY2F0
aW9uX2V4dGVuc2lvbjoKLSAgICAgIC8qIENoZWNrIGZvciBuZXRzY2FwZSBhcHBsaWNhdGlvbiBl
eHRlbnNpb24gKi8KLSAgICAgIGlmICghc3RybmNtcCgoY2hhciopcSwgIk5FVFNDQVBFMi4wIiwg
MTEpIHx8Ci0gICAgICAgICFzdHJuY21wKChjaGFyKilxLCAiQU5JTUVYVFMxLjAiLCAxMSkpCi0g
ICAgICAgIEdFVE4oMSwgZ2lmX25ldHNjYXBlX2V4dGVuc2lvbl9ibG9jayk7Ci0gICAgICBlbHNl
Ci0gICAgICAgIEdFVE4oMSwgZ2lmX2NvbnN1bWVfYmxvY2spOwotICAgIGJyZWFrOwotCi0gICAg
LyogTmV0c2NhcGUtc3BlY2lmaWMgR0lGIGV4dGVuc2lvbjogYW5pbWF0aW9uIGxvb3BpbmcgKi8K
LSAgICBjYXNlIGdpZl9uZXRzY2FwZV9leHRlbnNpb25fYmxvY2s6Ci0gICAgICBpZiAoKnEpCi0g
ICAgICAgIEdFVE4oKnEsIGdpZl9jb25zdW1lX25ldHNjYXBlX2V4dGVuc2lvbik7Ci0gICAgICBl
bHNlCi0gICAgICAgIEdFVE4oMSwgZ2lmX2ltYWdlX3N0YXJ0KTsKLSAgICBicmVhazsKLQotICAg
IC8qIFBhcnNlIG5ldHNjYXBlLXNwZWNpZmljIGFwcGxpY2F0aW9uIGV4dGVuc2lvbnMgKi8KLSAg
ICBjYXNlIGdpZl9jb25zdW1lX25ldHNjYXBlX2V4dGVuc2lvbjoKLSAgICB7Ci0gICAgICBpbnQg
bmV0c2NhcGVfZXh0ZW5zaW9uID0gcVswXSAmIDc7Ci0KLSAgICAgIC8qIExvb3AgZW50aXJlIGFu
aW1hdGlvbiBzcGVjaWZpZWQgIyBvZiB0aW1lcy4gIE9ubHkgcmVhZCB0aGUKLSAgICAgICAgIGxv
b3AgY291bnQgZHVyaW5nIHRoZSBmaXJzdCBpdGVyYXRpb24uICovCi0gICAgICBpZiAobmV0c2Nh
cGVfZXh0ZW5zaW9uID09IDEpIHsKLSAgICAgICAgbG9vcF9jb3VudCA9IEdFVElOVDE2KHEgKyAx
KTsKLQotICAgICAgICAvKiBaZXJvIGxvb3AgY291bnQgaXMgaW5maW5pdGUgYW5pbWF0aW9uIGxv
b3AgcmVxdWVzdCAqLwotICAgICAgICBpZiAobG9vcF9jb3VudCA9PSAwKQotICAgICAgICAgIGxv
b3BfY291bnQgPSBXZWJDb3JlOjpjQW5pbWF0aW9uTG9vcEluZmluaXRlOwotCi0gICAgICAgIEdF
VE4oMSwgZ2lmX25ldHNjYXBlX2V4dGVuc2lvbl9ibG9jayk7Ci0gICAgICB9Ci0gICAgICAvKiBX
YWl0IGZvciBzcGVjaWZpZWQgIyBvZiBieXRlcyB0byBlbnRlciBidWZmZXIgKi8KLSAgICAgIGVs
c2UgaWYgKG5ldHNjYXBlX2V4dGVuc2lvbiA9PSAyKSB7Ci0gICAgICAgIC8vIERvbid0IGRvIHRo
aXMsIHRoaXMgZXh0ZW5zaW9uIGRvZXNuJ3QgZXhpc3QgKGlzbid0IHVzZWQgYXQgYWxsKSAKLSAg
ICAgICAgLy8gYW5kIGRvZXNuJ3QgZG8gYW55dGhpbmcsIGFzIG91ciBzdHJlYW1pbmcvYnVmZmVy
aW5nIHRha2VzIGNhcmUgb2YgaXQgYWxsLi4uCi0gICAgICAgIC8vIFNlZTogaHR0cDovL3NlbW1p
eC5wbC9jb2xvci9leGdyYWYvZWVnMjQuaHRtCi0gICAgICAgIEdFVE4oMSwgZ2lmX25ldHNjYXBl
X2V4dGVuc2lvbl9ibG9jayk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyAwLDMtNyBhcmUg
eWV0IHRvIGJlIGRlZmluZWQgbmV0c2NhcGUgZXh0ZW5zaW9uIGNvZGVzCi0gICAgICAgIHJldHVy
biBjbGllbnRwdHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7Ci0gICAgICB9Ci0K
LSAgICAgIGJyZWFrOwotICAgIH0KIAotICAgIGNhc2UgZ2lmX2ltYWdlX2hlYWRlcjoKLSAgICB7
Ci0gICAgICB1bnNpZ25lZCBoZWlnaHQsIHdpZHRoLCB4X29mZnNldCwgeV9vZmZzZXQ7Ci0gICAg
ICAKLSAgICAgIC8qIEdldCBpbWFnZSBvZmZzZXRzLCB3aXRoIHJlc3BlY3QgdG8gdGhlIHNjcmVl
biBvcmlnaW4gKi8KLSAgICAgIHhfb2Zmc2V0ID0gR0VUSU5UMTYocSk7Ci0gICAgICB5X29mZnNl
dCA9IEdFVElOVDE2KHEgKyAyKTsKLQotICAgICAgLyogR2V0IGltYWdlIHdpZHRoIGFuZCBoZWln
aHQuICovCi0gICAgICB3aWR0aCAgPSBHRVRJTlQxNihxICsgNCk7Ci0gICAgICBoZWlnaHQgPSBH
RVRJTlQxNihxICsgNik7Ci0KLSAgICAgIC8qIFdvcmsgYXJvdW5kIGJyb2tlbiBHSUYgZmlsZXMg
d2hlcmUgdGhlIGxvZ2ljYWwgc2NyZWVuCi0gICAgICAgKiBzaXplIGhhcyB3ZWlyZCB3aWR0aCBv
ciBoZWlnaHQuICBXZSBhc3N1bWUgdGhhdCBHSUY4N2EKLSAgICAgICAqIGZpbGVzIGRvbid0IGNv
bnRhaW4gYW5pbWF0aW9ucy4KLSAgICAgICAqLwotICAgICAgaWYgKChpbWFnZXNfZGVjb2RlZCA9
PSAwKSAmJgotICAgICAgICAgICgoc2NyZWVuX2hlaWdodCA8IGhlaWdodCkgfHwgKHNjcmVlbl93
aWR0aCA8IHdpZHRoKSB8fAotICAgICAgICAgICAodmVyc2lvbiA9PSA4NykpKQotICAgICAgewot
ICAgICAgICBzY3JlZW5faGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBzY3JlZW5fd2lkdGggPSB3
aWR0aDsKLSAgICAgICAgeF9vZmZzZXQgPSAwOwotICAgICAgICB5X29mZnNldCA9IDA7Ci0KLSAg
ICAgICAgLy8gQ0FMTEJBQ0s6IEluZm9ybSB0aGUgZGVjb2RlcnBsdWdpbiBvZiBvdXIgc2l6ZS4K
LSAgICAgICAgaWYgKGNsaWVudHB0ciAmJiAhY2xpZW50cHRyLT5zZXRTaXplKHNjcmVlbl93aWR0
aCwgc2NyZWVuX2hlaWdodCkpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotCi0g
ICAgICAvKiBXb3JrIGFyb3VuZCBtb3JlIGJyb2tlbiBHSUYgZmlsZXMgdGhhdCBoYXZlIHplcm8g
aW1hZ2UKLSAgICAgICAgIHdpZHRoIG9yIGhlaWdodCAqLwotICAgICAgaWYgKCFoZWlnaHQgfHwg
IXdpZHRoKSB7Ci0gICAgICAgIGhlaWdodCA9IHNjcmVlbl9oZWlnaHQ7Ci0gICAgICAgIHdpZHRo
ID0gc2NyZWVuX3dpZHRoOwotICAgICAgICBpZiAoIWhlaWdodCB8fCAhd2lkdGgpCi0gICAgICAg
ICAgcmV0dXJuIGNsaWVudHB0ciA/IGNsaWVudHB0ci0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKLSAg
ICAgIH0KLQotICAgICAgaWYgKHF1ZXJ5ID09IEdJRkltYWdlRGVjb2Rlcjo6R0lGU2l6ZVF1ZXJ5
IHx8IGhhbHRBdEZyYW1lID09IGltYWdlc19kZWNvZGVkKSB7Ci0gICAgICAgIC8vIFRoZSBkZWNv
ZGVyIG5lZWRzIHRvIHN0b3AuICBIYW5kIGJhY2sgdGhlIG51bWJlciBvZiBieXRlcyB3ZSBjb25z
dW1lZCBmcm9tCi0gICAgICAgIC8vIGJ1ZmZlciBtaW51cyA5ICh0aGUgYW1vdW50IHdlIGNvbnN1
bWVkIHRvIHJlYWQgdGhlIGhlYWRlcikuCi0gICAgICAgIGlmIChjbGllbnRwdHIpCi0gICAgICAg
ICAgICBjbGllbnRwdHItPmRlY29kaW5nSGFsdGVkKGxlbiArIDkpOwotICAgICAgICBHRVROKDks
IGdpZl9pbWFnZV9oZWFkZXIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAg
IAotICAgICAgaW1hZ2VzX2NvdW50ID0gaW1hZ2VzX2RlY29kZWQgKyAxOwotCi0gICAgICBpZiAo
cXVlcnkgPT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZGdWxsUXVlcnkgJiYgIWZyYW1lX3JlYWRlcikK
LSAgICAgICAgZnJhbWVfcmVhZGVyID0gbmV3IEdJRkZyYW1lUmVhZGVyKCk7Ci0KLSAgICAgIGlm
IChmcmFtZV9yZWFkZXIpIHsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT54X29mZnNldCA9IHhfb2Zm
c2V0OwotICAgICAgICBmcmFtZV9yZWFkZXItPnlfb2Zmc2V0ID0geV9vZmZzZXQ7Ci0gICAgICAg
IGZyYW1lX3JlYWRlci0+aGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBmcmFtZV9yZWFkZXItPndp
ZHRoID0gd2lkdGg7Ci0KLSAgICAgICAgLyogVGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgdGFrZW4g
aWYgdGhpcyBpcyB0aGUgZmlyc3QgaW1hZ2UgKi8KLSAgICAgICAgLyogYmVpbmcgZGVjb2RlZC4g
SWYgYW55IG9mIHRoZSBsYXRlciBpbWFnZXMgYXJlIGxhcmdlciAgICAgKi8KLSAgICAgICAgLyog
dGhhbiB0aGUgc2NyZWVuIHNpemUsIHdlIG5lZWQgdG8gcmVhbGxvY2F0ZSBidWZmZXJzLiAgICAg
Ki8KLSAgICAgICAgaWYgKHNjcmVlbl93aWR0aCA8IHdpZHRoKSB7Ci0gICAgICAgICAgLyogWFhY
IERldmlhbnQhICovCi0KLSAgICAgICAgICBkZWxldGUgW11mcmFtZV9yZWFkZXItPnJvd2J1ZjsK
LSAgICAgICAgICBzY3JlZW5fd2lkdGggPSB3aWR0aDsKLSAgICAgICAgICBmcmFtZV9yZWFkZXIt
PnJvd2J1ZiA9IG5ldyB1bnNpZ25lZCBjaGFyW3NjcmVlbl93aWR0aF07Ci0gICAgICAgIH0gZWxz
ZSBpZiAoIWZyYW1lX3JlYWRlci0+cm93YnVmKSB7Ci0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5y
b3didWYgPSBuZXcgdW5zaWduZWQgY2hhcltzY3JlZW5fd2lkdGhdOworICAgICAgICBjYXNlIEdJ
RkNvbnN1bWVCbG9jazogeworICAgICAgICAgICAgaWYgKCEqcSkKKyAgICAgICAgICAgICAgICBH
RVROKDEsIEdJRkltYWdlU3RhcnQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IEdFVE4oKnEsIEdJRlNraXBCbG9jayk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
Ci0gICAgICAgIGlmICghZnJhbWVfcmVhZGVyLT5yb3didWYpCi0gICAgICAgICAgcmV0dXJuIGNs
aWVudHB0ciA/IGNsaWVudHB0ci0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKLSAgICAgICAgaWYgKHNj
cmVlbl9oZWlnaHQgPCBoZWlnaHQpCi0gICAgICAgICAgc2NyZWVuX2hlaWdodCA9IGhlaWdodDsK
LQotICAgICAgICBpZiAocVs4XSAmIDB4NDApIHsKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPmlu
dGVybGFjZWQgPSB0cnVlOwotICAgICAgICAgIGZyYW1lX3JlYWRlci0+aXBhc3MgPSAxOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgIGZyYW1lX3JlYWRlci0+aW50ZXJsYWNlZCA9IGZhbHNl
OwotICAgICAgICAgIGZyYW1lX3JlYWRlci0+aXBhc3MgPSAwOworICAgICAgICBjYXNlIEdJRlNr
aXBCbG9jazogeworICAgICAgICAgICAgR0VUTigxLCBHSUZDb25zdW1lQmxvY2spOworICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoaW1hZ2VzX2RlY29kZWQgPT0g
MCkgewotICAgICAgICAgIGZyYW1lX3JlYWRlci0+cHJvZ3Jlc3NpdmVfZGlzcGxheSA9IHRydWU7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgLyogT3ZlcmxheWluZyBpbnRlcmxhY2VkLCB0
cmFuc3BhcmVudCBHSUZzIG92ZXIKLSAgICAgICAgICAgICBleGlzdGluZyBpbWFnZSBkYXRhIHVz
aW5nIHRoZSBIYWViZXJsaSBkaXNwbGF5IGhhY2sKLSAgICAgICAgICAgICByZXF1aXJlcyBzYXZp
bmcgdGhlIHVuZGVybHlpbmcgaW1hZ2UgaW4gb3JkZXIgdG8KLSAgICAgICAgICAgICBhdm9pZCBq
YWdnaWVzIGF0IHRoZSB0cmFuc3BhcmVuY3kgZWRnZXMuICBXZSBhcmUKLSAgICAgICAgICAgICB1
bnByZXBhcmVkIHRvIGRlYWwgd2l0aCB0aGF0LCBzbyBkb24ndCBkaXNwbGF5IHN1Y2gKLSAgICAg
ICAgICAgICBpbWFnZXMgcHJvZ3Jlc3NpdmVseSAqLwotICAgICAgICAgIGZyYW1lX3JlYWRlci0+
cHJvZ3Jlc3NpdmVfZGlzcGxheSA9IGZhbHNlOworICAgICAgICBjYXNlIEdJRkNvbnRyb2xFeHRl
bnNpb246IHsKKyAgICAgICAgICAgIGlmIChxdWVyeSAhPSBHSUZJbWFnZURlY29kZXI6OkdJRkZy
YW1lQ291bnRRdWVyeSkgeworICAgICAgICAgICAgICAgIGlmICghbV9mcmFtZUNvbnRleHQpCisg
ICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0ID0gbmV3IEdJRkZyYW1lQ29udGV4dCgp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoKnEgJiAweDEpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9mcmFt
ZUNvbnRleHQtPnRwaXhlbCA9IHFbM107CisgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250
ZXh0LT5pc1RyYW5zcGFyZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXNUcmFuc3BhcmVudCA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmluZyBnZnggY29udHJvbCBleHRlbnNpb24KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gTk9URTogVGhpcyByZWxpZXMgb24g
dGhlIHZhbHVlcyBpbiB0aGUgRnJhbWVEaXNwb3NhbE1ldGhvZCBlbnVtCisgICAgICAgICAgICAg
ICAgLy8gbWF0Y2hpbmcgdGhvc2UgaW4gdGhlIEdJRiBzcGVjIQorICAgICAgICAgICAgICAgIGlu
dCBkaXNwb3NhbE1ldGhvZCA9ICgoKnEpID4+IDIpICYgMHg3OworICAgICAgICAgICAgICAgIG1f
ZnJhbWVDb250ZXh0LT5kaXNwb3NhbE1ldGhvZCA9IChXZWJDb3JlOjpJbWFnZUZyYW1lOjpGcmFt
ZURpc3Bvc2FsTWV0aG9kKWRpc3Bvc2FsTWV0aG9kOworCisgICAgICAgICAgICAgICAgLy8gU29t
ZSBzcGVjcyBzYXkgM3JkIGJpdCAodmFsdWUgNCksIG90aGVyIHNwZWNzIHNheSB2YWx1ZSAzCisg
ICAgICAgICAgICAgICAgLy8gTGV0J3MgY2hvb3NlIDMgKHRoZSBtb3JlIHBvcHVsYXIpCisgICAg
ICAgICAgICAgICAgaWYgKGRpc3Bvc2FsTWV0aG9kID09IDQpCisgICAgICAgICAgICAgICAgICAg
IG1fZnJhbWVDb250ZXh0LT5kaXNwb3NhbE1ldGhvZCA9IFdlYkNvcmU6OkltYWdlRnJhbWU6OkRp
c3Bvc2VPdmVyd3JpdGVQcmV2aW91czsKKyAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+
ZGVsYXlUaW1lID0gR0VUSU5UMTYocSArIDEpICogMTA7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBHRVROKDEsIEdJRkNvbnN1bWVCbG9jayk7CisgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogCi0gICAgICAgIC8qIENsZWFyIHN0YXRlIGZyb20gbGFzdCBpbWFnZSAqLwotICAgICAg
ICBmcmFtZV9yZWFkZXItPmlyb3cgPSAwOwotICAgICAgICBmcmFtZV9yZWFkZXItPnJvd3NfcmVt
YWluaW5nID0gZnJhbWVfcmVhZGVyLT5oZWlnaHQ7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+cm93
ZW5kID0gZnJhbWVfcmVhZGVyLT5yb3didWYgKyBmcmFtZV9yZWFkZXItPndpZHRoOwotICAgICAg
ICBmcmFtZV9yZWFkZXItPnJvd3AgPSBmcmFtZV9yZWFkZXItPnJvd2J1ZjsKLQotICAgICAgICAv
KiBiaXRzIHBlciBwaXhlbCBpcyBxWzhdJjB4MDcgKi8KLSAgICAgIH0KLSAgICAgIAotICAgICAg
aWYgKHFbOF0gJiAweDgwKSAvKiBoYXMgYSBsb2NhbCBjb2xvcm1hcD8gKi8KLSAgICAgIHsKLSAg
ICAgICAgaW50IG51bV9jb2xvcnMgPSAyIDw8IChxWzhdICYgMHg3KTsKLSAgICAgICAgY29uc3Qg
dW5zaWduZWQgc2l6ZSA9IDMqbnVtX2NvbG9yczsKLSAgICAgICAgdW5zaWduZWQgY2hhciAqbWFw
ID0gZnJhbWVfcmVhZGVyID8gZnJhbWVfcmVhZGVyLT5sb2NhbF9jb2xvcm1hcCA6IDA7Ci0gICAg
ICAgIGlmIChmcmFtZV9yZWFkZXIgJiYgKCFtYXAgfHwgKG51bV9jb2xvcnMgPiBmcmFtZV9yZWFk
ZXItPmxvY2FsX2NvbG9ybWFwX3NpemUpKSkgewotICAgICAgICAgIGRlbGV0ZSBbXW1hcDsKLSAg
ICAgICAgICBtYXAgPSBuZXcgdW5zaWduZWQgY2hhcltzaXplXTsKLSAgICAgICAgICBpZiAoIW1h
cCkKLSAgICAgICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgp
IDogZmFsc2U7CisgICAgICAgIGNhc2UgR0lGQ29tbWVudEV4dGVuc2lvbjogeworICAgICAgICAg
ICAgaWYgKCpxKQorICAgICAgICAgICAgICAgIEdFVE4oKnEsIEdJRkNvbnN1bWVDb21tZW50KTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBHRVROKDEsIEdJRkltYWdlU3RhcnQp
OworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICAvKiBTd2l0Y2ggdG8g
dGhlIG5ldyBsb2NhbCBwYWxldHRlIGFmdGVyIGl0IGxvYWRzICovCi0gICAgICAgIGlmIChmcmFt
ZV9yZWFkZXIpIHsKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPmxvY2FsX2NvbG9ybWFwID0gbWFw
OwotICAgICAgICAgIGZyYW1lX3JlYWRlci0+bG9jYWxfY29sb3JtYXBfc2l6ZSA9IG51bV9jb2xv
cnM7Ci0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5pc19sb2NhbF9jb2xvcm1hcF9kZWZpbmVkID0g
dHJ1ZTsKKyAgICAgICAgY2FzZSBHSUZDb25zdW1lQ29tbWVudDogeworICAgICAgICAgICAgR0VU
TigxLCBHSUZDb21tZW50RXh0ZW5zaW9uKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKGxlbiA8IHNpemUpIHsKLSAgICAgICAgICAvLyBVc2UgJ2hvbGQnIHBh
dHRlcm4gdG8gZ2V0IHRoZSBpbWFnZSBjb2xvcm1hcAotICAgICAgICAgIEdFVE4oc2l6ZSwgZ2lm
X2ltYWdlX2NvbG9ybWFwKTsKLSAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHSUZBcHBs
aWNhdGlvbkV4dGVuc2lvbjogeworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIG5ldHNjYXBlIGFw
cGxpY2F0aW9uIGV4dGVuc2lvbi4KKyAgICAgICAgICAgIGlmICghc3RybmNtcCgoY2hhciopcSwg
Ik5FVFNDQVBFMi4wIiwgMTEpIHx8ICFzdHJuY21wKChjaGFyKilxLCAiQU5JTUVYVFMxLjAiLCAx
MSkpCisgICAgICAgICAgICAgICAgR0VUTigxLCBHSUZOZXRzY2FwZUV4dGVuc2lvbkJsb2NrKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBHRVROKDEsIEdJRkNvbnN1bWVCbG9j
ayk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAvLyBDb3B5IGV2ZXJ5
dGhpbmcgYW5kIGRpcmVjdGx5IGdvIHRvIGdpZl9sendfc3RhcnQKLSAgICAgICAgaWYgKGZyYW1l
X3JlYWRlcikKLSAgICAgICAgICBtZW1jcHkoZnJhbWVfcmVhZGVyLT5sb2NhbF9jb2xvcm1hcCwg
YnVmLCBzaXplKTsKLSAgICAgICAgYnVmICs9IHNpemU7Ci0gICAgICAgIGxlbiAtPSBzaXplOwot
ICAgICAgfSBlbHNlIGlmIChmcmFtZV9yZWFkZXIpIHsKLSAgICAgICAgLyogU3dpdGNoIGJhY2sg
dG8gdGhlIGdsb2JhbCBwYWxldHRlICovCi0gICAgICAgIGZyYW1lX3JlYWRlci0+aXNfbG9jYWxf
Y29sb3JtYXBfZGVmaW5lZCA9IGZhbHNlOwotICAgICAgfQotICAgICAgR0VUTigxLCBnaWZfbHp3
X3N0YXJ0KTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgICBjYXNlIGdpZl9pbWFnZV9jb2xvcm1h
cDoKLSAgICAgIC8vIEV2ZXJ5dGhpbmcgaXMgYWxyZWFkeSBjb3BpZWQgaW50byBsb2NhbF9jb2xv
cm1hcAotICAgICAgR0VUTigxLCBnaWZfbHp3X3N0YXJ0KTsKLSAgICBicmVhazsKLQotICAgIGNh
c2UgZ2lmX3N1Yl9ibG9jazoKLSAgICB7Ci0gICAgICBpZiAoKGNvdW50ID0gKnEpICE9IDApCi0g
ICAgICAvKiBTdGlsbCB3b3JraW5nIG9uIHRoZSBzYW1lIGltYWdlOiBQcm9jZXNzIG5leHQgTFpX
IGRhdGEgYmxvY2sgKi8KLSAgICAgIHsKLSAgICAgICAgLyogTWFrZSBzdXJlIHRoZXJlIGFyZSBz
dGlsbCByb3dzIGxlZnQuIElmIHRoZSBHSUYgZGF0YSAqLwotICAgICAgICAvKiBpcyBjb3JydXB0
LCB3ZSBtYXkgbm90IGdldCBhbiBleHBsaWNpdCB0ZXJtaW5hdG9yLiAgICovCi0gICAgICAgIGlm
IChmcmFtZV9yZWFkZXIgJiYgZnJhbWVfcmVhZGVyLT5yb3dzX3JlbWFpbmluZyA9PSAwKSB7Ci0g
ICAgICAgICAgLyogVGhpcyBpcyBhbiBpbGxlZ2FsIEdJRiwgYnV0IHdlIHJlbWFpbiB0b2xlcmFu
dC4gKi8KLSAgICAgICAgICBHRVROKDEsIGdpZl9zdWJfYmxvY2spOworCisgICAgICAgIC8vIE5l
dHNjYXBlLXNwZWNpZmljIEdJRiBleHRlbnNpb246IGFuaW1hdGlvbiBsb29waW5nLgorICAgICAg
ICBjYXNlIEdJRk5ldHNjYXBlRXh0ZW5zaW9uQmxvY2s6IHsKKyAgICAgICAgICAgIGlmICgqcSkK
KyAgICAgICAgICAgICAgICBHRVROKCpxLCBHSUZDb25zdW1lTmV0c2NhcGVFeHRlbnNpb24pOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIEdFVE4oMSwgR0lGSW1hZ2VTdGFydCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFBhcnNlIG5ldHNj
YXBlLXNwZWNpZmljIGFwcGxpY2F0aW9uIGV4dGVuc2lvbnMKKyAgICAgICAgY2FzZSBHSUZDb25z
dW1lTmV0c2NhcGVFeHRlbnNpb246IHsKKyAgICAgICAgICAgIGludCBuZXRzY2FwZUV4dGVuc2lv
biA9IHFbMF0gJiA3OworCisgICAgICAgICAgICAvLyBMb29wIGVudGlyZSBhbmltYXRpb24gc3Bl
Y2lmaWVkICMgb2YgdGltZXMuIE9ubHkgcmVhZCB0aGUgbG9vcCBjb3VudCBkdXJpbmcgdGhlIGZp
cnN0IGl0ZXJhdGlvbi4KKyAgICAgICAgICAgIGlmIChuZXRzY2FwZUV4dGVuc2lvbiA9PSAxKSB7
CisgICAgICAgICAgICAgICAgbV9sb29wQ291bnQgPSBHRVRJTlQxNihxICsgMSk7CisKKyAgICAg
ICAgICAgICAgICAvLyBaZXJvIGxvb3AgY291bnQgaXMgaW5maW5pdGUgYW5pbWF0aW9uIGxvb3Ag
cmVxdWVzdC4KKyAgICAgICAgICAgICAgICBpZiAoIW1fbG9vcENvdW50KQorICAgICAgICAgICAg
ICAgICAgICBtX2xvb3BDb3VudCA9IFdlYkNvcmU6OmNBbmltYXRpb25Mb29wSW5maW5pdGU7CisK
KyAgICAgICAgICAgICAgICBHRVROKDEsIEdJRk5ldHNjYXBlRXh0ZW5zaW9uQmxvY2spOworICAg
ICAgICAgICAgfSBlbHNlIGlmIChuZXRzY2FwZUV4dGVuc2lvbiA9PSAyKSB7CisgICAgICAgICAg
ICAgICAgLy8gV2FpdCBmb3Igc3BlY2lmaWVkICMgb2YgYnl0ZXMgdG8gZW50ZXIgYnVmZmVyLgor
CisgICAgICAgICAgICAgICAgLy8gRG9uJ3QgZG8gdGhpcywgdGhpcyBleHRlbnNpb24gZG9lc24n
dCBleGlzdCAoaXNuJ3QgdXNlZCBhdCBhbGwpCisgICAgICAgICAgICAgICAgLy8gYW5kIGRvZXNu
J3QgZG8gYW55dGhpbmcsIGFzIG91ciBzdHJlYW1pbmcvYnVmZmVyaW5nIHRha2VzIGNhcmUgb2Yg
aXQgYWxsLi4uCisgICAgICAgICAgICAgICAgLy8gU2VlOiBodHRwOi8vc2VtbWl4LnBsL2NvbG9y
L2V4Z3JhZi9lZWcyNC5odG0KKyAgICAgICAgICAgICAgICBHRVROKDEsIEdJRk5ldHNjYXBlRXh0
ZW5zaW9uQmxvY2spOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyAw
LDMtNyBhcmUgeWV0IHRvIGJlIGRlZmluZWQgbmV0c2NhcGUgZXh0ZW5zaW9uIGNvZGVzCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQtPnNldEZhaWxlZCgpIDogZmFs
c2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAg
ICBHRVROKGNvdW50LCBnaWZfbHp3KTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIC8qIFNl
ZSBpZiB0aGVyZSBhcmUgYW55IG1vcmUgaW1hZ2VzIGluIHRoaXMgc2VxdWVuY2UuICovCi0gICAg
ICB7Ci0gICAgICAgIGltYWdlc19kZWNvZGVkKys7Ci0KLSAgICAgICAgLy8gQ0FMTEJBQ0s6IFRo
ZSBmcmFtZSBpcyBub3cgY29tcGxldGUuCi0gICAgICAgIGlmIChjbGllbnRwdHIgJiYgZnJhbWVf
cmVhZGVyICYmICFjbGllbnRwdHItPmZyYW1lQ29tcGxldGUoaW1hZ2VzX2RlY29kZWQgLSAxLCBm
cmFtZV9yZWFkZXItPmRlbGF5X3RpbWUsIGZyYW1lX3JlYWRlci0+ZGlzcG9zYWxfbWV0aG9kKSkK
LSAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGZyYW1lQ29tcGxldGUoKSBoYXMgYWxyZWFkeSBj
YWxsZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsaWVudHB0ci0+c2V0RmFpbGVkKCku
Ci0KLSAgICAgICAgLyogQ2xlYXIgc3RhdGUgZnJvbSB0aGlzIGltYWdlICovCi0gICAgICAgIGlm
IChmcmFtZV9yZWFkZXIpIHsKLSAgICAgICAgICAgIGZyYW1lX3JlYWRlci0+aXNfbG9jYWxfY29s
b3JtYXBfZGVmaW5lZCA9IGZhbHNlOwotICAgICAgICAgICAgZnJhbWVfcmVhZGVyLT5pc190cmFu
c3BhcmVudCA9IGZhbHNlOworCisgICAgICAgIGNhc2UgR0lGSW1hZ2VIZWFkZXI6IHsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGhlaWdodCwgd2lkdGgsIHhPZmZzZXQsIHlPZmZzZXQ7CisKKyAgICAg
ICAgICAgIC8qIEdldCBpbWFnZSBvZmZzZXRzLCB3aXRoIHJlc3BlY3QgdG8gdGhlIHNjcmVlbiBv
cmlnaW4gKi8KKyAgICAgICAgICAgIHhPZmZzZXQgPSBHRVRJTlQxNihxKTsKKyAgICAgICAgICAg
IHlPZmZzZXQgPSBHRVRJTlQxNihxICsgMik7CisKKyAgICAgICAgICAgIC8qIEdldCBpbWFnZSB3
aWR0aCBhbmQgaGVpZ2h0LiAqLworICAgICAgICAgICAgd2lkdGggID0gR0VUSU5UMTYocSArIDQp
OworICAgICAgICAgICAgaGVpZ2h0ID0gR0VUSU5UMTYocSArIDYpOworCisgICAgICAgICAgICAv
KiBXb3JrIGFyb3VuZCBicm9rZW4gR0lGIGZpbGVzIHdoZXJlIHRoZSBsb2dpY2FsIHNjcmVlbgor
ICAgICAgICAgICAgICogc2l6ZSBoYXMgd2VpcmQgd2lkdGggb3IgaGVpZ2h0LiAgV2UgYXNzdW1l
IHRoYXQgR0lGODdhCisgICAgICAgICAgICAgKiBmaWxlcyBkb24ndCBjb250YWluIGFuaW1hdGlv
bnMuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICghbV9pbWFnZXNEZWNvZGVkCisg
ICAgICAgICAgICAgICAgJiYgKChtX3NjcmVlbkhlaWdodCA8IGhlaWdodCkgfHwgKG1fc2NyZWVu
V2lkdGggPCB3aWR0aCkgfHwgKG1fdmVyc2lvbiA9PSA4NykpKSB7CisgICAgICAgICAgICAgICAg
bV9zY3JlZW5IZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgICAgICAgICAgbV9zY3JlZW5XaWR0aCA9
IHdpZHRoOworICAgICAgICAgICAgICAgIHhPZmZzZXQgPSAwOworICAgICAgICAgICAgICAgIHlP
ZmZzZXQgPSAwOworCisgICAgICAgICAgICAgICAgLy8gQ0FMTEJBQ0s6IEluZm9ybSB0aGUgZGVj
b2RlcnBsdWdpbiBvZiBvdXIgc2l6ZS4KKyAgICAgICAgICAgICAgICBpZiAobV9jbGllbnQgJiYg
IW1fY2xpZW50LT5zZXRTaXplKG1fc2NyZWVuV2lkdGgsIG1fc2NyZWVuSGVpZ2h0KSkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBXb3JrIGFyb3VuZCBtb3JlIGJyb2tlbiBHSUYgZmlsZXMgdGhhdCBoYXZlIHplcm8gaW1h
Z2Ugd2lkdGggb3IgaGVpZ2h0CisgICAgICAgICAgICBpZiAoIWhlaWdodCB8fCAhd2lkdGgpIHsK
KyAgICAgICAgICAgICAgICBoZWlnaHQgPSBtX3NjcmVlbkhlaWdodDsKKyAgICAgICAgICAgICAg
ICB3aWR0aCA9IG1fc2NyZWVuV2lkdGg7CisgICAgICAgICAgICAgICAgaWYgKCFoZWlnaHQgfHwg
IXdpZHRoKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+
c2V0RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHF1
ZXJ5ID09IEdJRkltYWdlRGVjb2Rlcjo6R0lGU2l6ZVF1ZXJ5IHx8IGhhbHRBdEZyYW1lID09IG1f
aW1hZ2VzRGVjb2RlZCkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBkZWNvZGVyIG5lZWRzIHRv
IHN0b3AuIEhhbmQgYmFjayB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlIGNvbnN1bWVkIGZyb20KKyAg
ICAgICAgICAgICAgICAvLyBidWZmZXIgbWludXMgOSAodGhlIGFtb3VudCB3ZSBjb25zdW1lZCB0
byByZWFkIHRoZSBoZWFkZXIpLgorICAgICAgICAgICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAg
ICAgICAgICAgICAgICAgbV9jbGllbnQtPmRlY29kaW5nSGFsdGVkKGxlbiArIDkpOworICAgICAg
ICAgICAgICAgIEdFVE4oOSwgR0lGSW1hZ2VIZWFkZXIpOworICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX2ltYWdlc0NvdW50ID0gbV9p
bWFnZXNEZWNvZGVkICsgMTsKKworICAgICAgICAgICAgaWYgKHF1ZXJ5ID09IEdJRkltYWdlRGVj
b2Rlcjo6R0lGRnVsbFF1ZXJ5ICYmICFtX2ZyYW1lQ29udGV4dCkKKyAgICAgICAgICAgICAgICBt
X2ZyYW1lQ29udGV4dCA9IG5ldyBHSUZGcmFtZUNvbnRleHQoKTsKKworICAgICAgICAgICAgaWYg
KG1fZnJhbWVDb250ZXh0KSB7CisgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPnhPZmZz
ZXQgPSB4T2Zmc2V0OworICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT55T2Zmc2V0ID0g
eU9mZnNldDsKKyAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0ID0gaGVpZ2h0
OworICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT53aWR0aCA9IHdpZHRoOworCisgICAg
ICAgICAgICAgICAgLyogVGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgdGFrZW4gaWYgdGhpcyBpcyB0
aGUgZmlyc3QgaW1hZ2UgKi8KKyAgICAgICAgICAgICAgICAvKiBiZWluZyBkZWNvZGVkLiBJZiBh
bnkgb2YgdGhlIGxhdGVyIGltYWdlcyBhcmUgbGFyZ2VyICAgICAqLworICAgICAgICAgICAgICAg
IC8qIHRoYW4gdGhlIHNjcmVlbiBzaXplLCB3ZSBuZWVkIHRvIHJlYWxsb2NhdGUgYnVmZmVycy4g
ICAgICovCisgICAgICAgICAgICAgICAgaWYgKG1fc2NyZWVuV2lkdGggPCB3aWR0aCkgeworICAg
ICAgICAgICAgICAgICAgICAvKiBYWFggRGV2aWFudCEgKi8KKyAgICAgICAgICAgICAgICAgICAg
ZGVsZXRlIFtdbV9mcmFtZUNvbnRleHQtPnJvd2J1ZjsKKyAgICAgICAgICAgICAgICAgICAgbV9z
Y3JlZW5XaWR0aCA9IHdpZHRoOworICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+
cm93YnVmID0gbmV3IHVuc2lnbmVkIGNoYXJbbV9zY3JlZW5XaWR0aF07CisgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICghbV9mcmFtZUNvbnRleHQtPnJvd2J1ZikKKyAgICAgICAgICAgICAgICAg
ICAgbV9mcmFtZUNvbnRleHQtPnJvd2J1ZiA9IG5ldyB1bnNpZ25lZCBjaGFyW21fc2NyZWVuV2lk
dGhdOworCisgICAgICAgICAgICAgICAgaWYgKCFtX2ZyYW1lQ29udGV4dC0+cm93YnVmKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+c2V0RmFpbGVkKCkg
OiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAobV9zY3JlZW5IZWlnaHQgPCBoZWlnaHQpCisg
ICAgICAgICAgICAgICAgICAgIG1fc2NyZWVuSGVpZ2h0ID0gaGVpZ2h0OworCisgICAgICAgICAg
ICAgICAgaWYgKHFbOF0gJiAweDQwKSB7CisgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250
ZXh0LT5pbnRlcmxhY2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRl
eHQtPmlwYXNzID0gMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICBtX2ZyYW1lQ29udGV4dC0+aW50ZXJsYWNlZCA9IGZhbHNlOworICAgICAgICAgICAgICAg
ICAgICBtX2ZyYW1lQ29udGV4dC0+aXBhc3MgPSAwOworICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgIGlmICghbV9pbWFnZXNEZWNvZGVkKQorICAgICAgICAgICAgICAgICAgICBt
X2ZyYW1lQ29udGV4dC0+cHJvZ3Jlc3NpdmVEaXNwbGF5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gT3ZlcmxheWluZyBpbnRlcmxhY2VkLCB0
cmFuc3BhcmVudCBHSUZzIG92ZXIKKyAgICAgICAgICAgICAgICAgICAgLy8gZXhpc3RpbmcgaW1h
Z2UgZGF0YSB1c2luZyB0aGUgSGFlYmVybGkgZGlzcGxheSBoYWNrCisgICAgICAgICAgICAgICAg
ICAgIC8vIHJlcXVpcmVzIHNhdmluZyB0aGUgdW5kZXJseWluZyBpbWFnZSBpbiBvcmRlciB0bwor
ICAgICAgICAgICAgICAgICAgICAvLyBhdm9pZCBqYWdnaWVzIGF0IHRoZSB0cmFuc3BhcmVuY3kg
ZWRnZXMuIFdlIGFyZQorICAgICAgICAgICAgICAgICAgICAvLyB1bnByZXBhcmVkIHRvIGRlYWwg
d2l0aCB0aGF0LCBzbyBkb24ndCBkaXNwbGF5IHN1Y2gKKyAgICAgICAgICAgICAgICAgICAgLy8g
aW1hZ2VzIHByb2dyZXNzaXZlbHkKKyAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQt
PnByb2dyZXNzaXZlRGlzcGxheSA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIC8vIENsZWFyIHN0YXRlIGZyb20gbGFzdCBpbWFnZS4KKyAgICAgICAgICAgICAg
ICBtX2ZyYW1lQ29udGV4dC0+aXJvdyA9IDA7CisgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRl
eHQtPnJvd3NSZW1haW5pbmcgPSBtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0OworICAgICAgICAgICAg
ICAgIG1fZnJhbWVDb250ZXh0LT5yb3dlbmQgPSBtX2ZyYW1lQ29udGV4dC0+cm93YnVmICsgbV9m
cmFtZUNvbnRleHQtPndpZHRoOworICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5yb3dw
ID0gbV9mcmFtZUNvbnRleHQtPnJvd2J1ZjsKKworICAgICAgICAgICAgICAgIC8vIGJpdHMgcGVy
IHBpeGVsIGlzIHFbOF0mMHgwNworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBoYXMg
YSBsb2NhbCBjb2xvcm1hcD8KKyAgICAgICAgICAgIGlmIChxWzhdICYgMHg4MCkgeworICAgICAg
ICAgICAgICAgIGludCBudW1Db2xvcnMgPSAyIDw8IChxWzhdICYgMHg3KTsKKyAgICAgICAgICAg
ICAgICBjb25zdCB1bnNpZ25lZCBzaXplID0gMyAqIG51bUNvbG9yczsKKyAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBjaGFyICptYXAgPSBtX2ZyYW1lQ29udGV4dCA/IG1fZnJhbWVDb250ZXh0LT5s
b2NhbENvbG9ybWFwIDogMDsKKyAgICAgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQgJiYg
KCFtYXAgfHwgKG51bUNvbG9ycyA+IG1fZnJhbWVDb250ZXh0LT5sb2NhbENvbG9ybWFwU2l6ZSkp
KSB7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXW1hcDsKKyAgICAgICAgICAgICAgICAg
ICAgbWFwID0gbmV3IHVuc2lnbmVkIGNoYXJbc2l6ZV07CisgICAgICAgICAgICAgICAgICAgIGlm
ICghbWFwKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGll
bnQtPnNldEZhaWxlZCgpIDogZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgLy8gU3dpdGNoIHRvIHRoZSBuZXcgbG9jYWwgcGFsZXR0ZSBhZnRlciBpdCBsb2Fkcwor
ICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCkgeworICAgICAgICAgICAgICAgICAg
ICBtX2ZyYW1lQ29udGV4dC0+bG9jYWxDb2xvcm1hcCA9IG1hcDsKKyAgICAgICAgICAgICAgICAg
ICAgbV9mcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXBTaXplID0gbnVtQ29sb3JzOworICAgICAg
ICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXNMb2NhbENvbG9ybWFwRGVmaW5lZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGxlbiA8IHNpemUp
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVXNlICdob2xkJyBwYXR0ZXJuIHRvIGdldCB0aGUg
aW1hZ2UgY29sb3JtYXAKKyAgICAgICAgICAgICAgICAgICAgR0VUTihzaXplLCBHSUZJbWFnZUNv
bG9ybWFwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgLy8gQ29weSBldmVyeXRoaW5nIGFuZCBkaXJlY3RseSBnbyB0byBH
SUZMWldTdGFydAorICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCkKKyAgICAgICAg
ICAgICAgICAgICAgbWVtY3B5KG1fZnJhbWVDb250ZXh0LT5sb2NhbENvbG9ybWFwLCBidWYsIHNp
emUpOworICAgICAgICAgICAgICAgIGJ1ZiArPSBzaXplOworICAgICAgICAgICAgICAgIGxlbiAt
PSBzaXplOworICAgICAgICAgICAgfSBlbHNlIGlmIChtX2ZyYW1lQ29udGV4dCkgeworICAgICAg
ICAgICAgICAgIC8vIFN3aXRjaCBiYWNrIHRvIHRoZSBnbG9iYWwgcGFsZXR0ZQorICAgICAgICAg
ICAgICAgIG1fZnJhbWVDb250ZXh0LT5pc0xvY2FsQ29sb3JtYXBEZWZpbmVkID0gZmFsc2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBHRVROKDEsIEdJRkxaV1N0YXJ0KTsKKyAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgR0VUTigxLCBnaWZfaW1hZ2Vfc3RhcnQp
OwotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKKyAgICAgICAgY2FzZSBHSUZJbWFnZUNvbG9y
bWFwOiB7CisgICAgICAgICAgICAvLyBFdmVyeXRoaW5nIGlzIGFscmVhZHkgY29waWVkIGludG8g
bG9jYWxDb2xvcm1hcAorICAgICAgICAgICAgR0VUTigxLCBHSUZMWldTdGFydCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQogCi0gICAgY2FzZSBnaWZfZG9uZToKLSAgICAgIC8vIFdo
ZW4gdGhlIEdJRiBpcyBkb25lLCB3ZSBjYW4gc3RvcC4KLSAgICAgIGlmIChjbGllbnRwdHIpCi0g
ICAgICAgIGNsaWVudHB0ci0+Z2lmQ29tcGxldGUoKTsKLSAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBjYXNlIEdJRlN1YkJsb2NrOiB7CisgICAgICAgICAgICAvLyBTdGlsbCB3b3JraW5nIG9u
IHRoZSBzYW1lIGltYWdlOiBQcm9jZXNzIG5leHQgTFpXIGRhdGEgYmxvY2suCisgICAgICAgICAg
ICBpZiAoKG1fY291bnQgPSAqcSkpIHsKKyAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhl
cmUgYXJlIHN0aWxsIHJvd3MgbGVmdC4gSWYgdGhlIEdJRiBkYXRhCisgICAgICAgICAgICAgICAg
Ly8gaXMgY29ycnVwdCwgd2UgbWF5IG5vdCBnZXQgYW4gZXhwbGljaXQgdGVybWluYXRvci4KKyAg
ICAgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQgJiYgIW1fZnJhbWVDb250ZXh0LT5yb3dz
UmVtYWluaW5nKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYW4gaWxsZWdhbCBH
SUYsIGJ1dCB3ZSByZW1haW4gdG9sZXJhbnQuCisgICAgICAgICAgICAgICAgICAgIEdFVE4oMSwg
R0lGU3ViQmxvY2spOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBHRVROKG1f
Y291bnQsIEdJRkxaVyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8v
IFNlZSBpZiB0aGVyZSBhcmUgYW55IG1vcmUgaW1hZ2VzIGluIHRoaXMgc2VxdWVuY2UuCisgICAg
ICAgICAgICAgICAgbV9pbWFnZXNEZWNvZGVkKys7CisKKyAgICAgICAgICAgICAgICAvLyBDQUxM
QkFDSzogVGhlIGZyYW1lIGlzIG5vdyBjb21wbGV0ZS4KKyAgICAgICAgICAgICAgICBpZiAobV9j
bGllbnQgJiYgbV9mcmFtZUNvbnRleHQgJiYgIW1fY2xpZW50LT5mcmFtZUNvbXBsZXRlKG1faW1h
Z2VzRGVjb2RlZCAtIDEsIG1fZnJhbWVDb250ZXh0LT5kZWxheVRpbWUsIG1fZnJhbWVDb250ZXh0
LT5kaXNwb3NhbE1ldGhvZCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8g
ZnJhbWVDb21wbGV0ZSgpIGhhcyBhbHJlYWR5IGNhbGxlZCBtX2NsaWVudC0+c2V0RmFpbGVkKCku
CisKKyAgICAgICAgICAgICAgICAvLyBDbGVhciBzdGF0ZSBmcm9tIHRoaXMgaW1hZ2UKKyAgICAg
ICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9m
cmFtZUNvbnRleHQtPmlzTG9jYWxDb2xvcm1hcERlZmluZWQgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlzVHJhbnNwYXJlbnQgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBHRVROKDEsIEdJRkltYWdlU3RhcnQpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KIAotICAgIC8vIFdlIHNo
b3VsZG4ndCBldmVyIGdldCBoZXJlLgotICAgIGRlZmF1bHQ6Ci0gICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBHSUZEb25lOiB7CisgICAgICAgICAgICAvLyBXaGVuIHRoZSBHSUYgaXMgZG9uZSwg
d2UgY2FuIHN0b3AuCisgICAgICAgICAgICBpZiAobV9jbGllbnQpCisgICAgICAgICAgICAgICAg
bV9jbGllbnQtPmdpZkNvbXBsZXRlKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBXZSBzaG91bGRuJ3QgZXZl
ciBnZXQgaGVyZS4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQotICB9Ci0K
LSAgLy8gQ29weSB0aGUgbGVmdG92ZXIgaW50byBncy0+aG9sZAotICBieXRlc19pbl9ob2xkID0g
bGVuOwotICBpZiAobGVuKSB7Ci0gICAgLy8gQWRkIHdoYXQgd2UgaGF2ZSBzb2ZhciB0byB0aGUg
YmxvY2sKLSAgICB1bnNpZ25lZCBjaGFyKiBwOwotICAgIGlmIChzdGF0ZSA9PSBnaWZfZ2xvYmFs
X2NvbG9ybWFwKQotICAgICAgcCA9IGdsb2JhbF9jb2xvcm1hcDsKLSAgICBlbHNlIGlmIChzdGF0
ZSA9PSBnaWZfaW1hZ2VfY29sb3JtYXApCi0gICAgICBwID0gZnJhbWVfcmVhZGVyID8gZnJhbWVf
cmVhZGVyLT5sb2NhbF9jb2xvcm1hcCA6IDA7Ci0gICAgZWxzZQotICAgICAgcCA9IGhvbGQ7Ci0g
ICAgaWYgKHApCi0gICAgICBtZW1jcHkocCwgYnVmLCBsZW4pOwotICAgIGJ5dGVzX3RvX2NvbnN1
bWUgLT0gbGVuOwotICB9Ci0KLSAgaWYgKGNsaWVudHB0cikKLSAgICBjbGllbnRwdHItPmRlY29k
aW5nSGFsdGVkKDApOwotICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBDb3B5IHRoZSBsZWZ0b3Zl
ciBpbnRvIG1fZnJhbWVDb250ZXh0LT5tX2hvbGQKKyAgICBtX2J5dGVzSW5Ib2xkID0gbGVuOwor
ICAgIGlmIChsZW4pIHsKKyAgICAgICAgLy8gQWRkIHdoYXQgd2UgaGF2ZSBzb2ZhciB0byB0aGUg
YmxvY2sKKyAgICAgICAgdW5zaWduZWQgY2hhciogcDsKKyAgICAgICAgaWYgKG1fc3RhdGUgPT0g
R0lGR2xvYmFsQ29sb3JtYXApCisgICAgICAgICAgICBwID0gbV9nbG9iYWxDb2xvcm1hcDsKKyAg
ICAgICAgZWxzZSBpZiAobV9zdGF0ZSA9PSBHSUZJbWFnZUNvbG9ybWFwKQorICAgICAgICAgICAg
cCA9IG1fZnJhbWVDb250ZXh0ID8gbV9mcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXAgOiAwOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBwID0gbV9ob2xkOworICAgICAgICBpZiAocCkKKyAg
ICAgICAgICAgIG1lbWNweShwLCBidWYsIGxlbik7CisgICAgICAgIG1fYnl0ZXNUb0NvbnN1bWUg
LT0gbGVuOworICAgIH0KKworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRl
Y29kaW5nSGFsdGVkKDApOworICAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVy
LmgKaW5kZXggMDUyNTMyYzY0NTM2MzE0Nzc0OGY5YmE2NGVhNzhhMTUxZmVlM2FkZS4uYzA4Mjkx
OGM0MzE2NmIzODAyOWViZGY0ZjI0Y2YzNGRlNjlkNzQ5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVy
LmgKQEAgLTQ5LDE2NSArNDksMTg2IEBACiAKIGNvbnN0IGludCBjTG9vcENvdW50Tm90U2VlbiA9
IC0yOwogCi0vKiBnaWYyLmggIAotICAgVGhlIGludGVyZmFjZSBmb3IgdGhlIEdJRjg3Lzg5YSBk
ZWNvZGVyLiAKLSovCi0vLyBMaXN0IG9mIHBvc3NpYmxlIHBhcnNpbmcgc3RhdGVzCi10eXBlZGVm
IGVudW0gewotICAgIGdpZl90eXBlLAotICAgIGdpZl9nbG9iYWxfaGVhZGVyLAotICAgIGdpZl9n
bG9iYWxfY29sb3JtYXAsCi0gICAgZ2lmX2ltYWdlX3N0YXJ0LCAgICAgICAgICAgIAotICAgIGdp
Zl9pbWFnZV9oZWFkZXIsCi0gICAgZ2lmX2ltYWdlX2NvbG9ybWFwLAotICAgIGdpZl9pbWFnZV9i
b2R5LAotICAgIGdpZl9sendfc3RhcnQsCi0gICAgZ2lmX2x6dywKLSAgICBnaWZfc3ViX2Jsb2Nr
LAotICAgIGdpZl9leHRlbnNpb24sCi0gICAgZ2lmX2NvbnRyb2xfZXh0ZW5zaW9uLAotICAgIGdp
Zl9jb25zdW1lX2Jsb2NrLAotICAgIGdpZl9za2lwX2Jsb2NrLAotICAgIGdpZl9kb25lLAotICAg
IGdpZl9jb21tZW50X2V4dGVuc2lvbiwKLSAgICBnaWZfYXBwbGljYXRpb25fZXh0ZW5zaW9uLAot
ICAgIGdpZl9uZXRzY2FwZV9leHRlbnNpb25fYmxvY2ssCi0gICAgZ2lmX2NvbnN1bWVfbmV0c2Nh
cGVfZXh0ZW5zaW9uLAotICAgIGdpZl9jb25zdW1lX2NvbW1lbnQKLX0gZ3N0YXRlOwotCi1zdHJ1
Y3QgR0lGRnJhbWVSZWFkZXIgeworLy8gTGlzdCBvZiBwb3NzaWJsZSBwYXJzaW5nIHN0YXRlcy4K
K2VudW0gR0lGU3RhdGUgeworICAgIEdJRlR5cGUsCisgICAgR0lGR2xvYmFsSGVhZGVyLAorICAg
IEdJRkdsb2JhbENvbG9ybWFwLAorICAgIEdJRkltYWdlU3RhcnQsICAgICAgICAgICAgCisgICAg
R0lGSW1hZ2VIZWFkZXIsCisgICAgR0lGSW1hZ2VDb2xvcm1hcCwKKyAgICBHSUZJbWFnZUJvZHks
CisgICAgR0lGTFpXU3RhcnQsCisgICAgR0lGTFpXLAorICAgIEdJRlN1YkJsb2NrLAorICAgIEdJ
RkV4dGVuc2lvbiwKKyAgICBHSUZDb250cm9sRXh0ZW5zaW9uLAorICAgIEdJRkNvbnN1bWVCbG9j
aywKKyAgICBHSUZTa2lwQmxvY2ssCisgICAgR0lGRG9uZSwKKyAgICBHSUZDb21tZW50RXh0ZW5z
aW9uLAorICAgIEdJRkFwcGxpY2F0aW9uRXh0ZW5zaW9uLAorICAgIEdJRk5ldHNjYXBlRXh0ZW5z
aW9uQmxvY2ssCisgICAgR0lGQ29uc3VtZU5ldHNjYXBlRXh0ZW5zaW9uLAorICAgIEdJRkNvbnN1
bWVDb21tZW50Cit9OworCitzdHJ1Y3QgR0lGRnJhbWVDb250ZXh0IHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICAvKiBMWlcgZGVjb2RlciBzdGF0ZSBtYWNoaW5l
ICovCi0gICAgdW5zaWduZWQgY2hhciAqc3RhY2twOyAgICAgICAgICAgICAgLyogQ3VycmVudCBz
dGFjayBwb2ludGVyICovCisgICAgLy8gTFpXIGRlY29kZXIgc3RhdGUgbWFjaGluZS4KKyAgICB1
bnNpZ25lZCBjaGFyICpzdGFja3A7IC8vIEN1cnJlbnQgc3RhY2sgcG9pbnRlci4KICAgICBpbnQg
ZGF0YXNpemU7CiAgICAgaW50IGNvZGVzaXplOwogICAgIGludCBjb2RlbWFzazsKLSAgICBpbnQg
Y2xlYXJfY29kZTsgICAgICAgICAgICAgLyogQ29kZXdvcmQgdXNlZCB0byB0cmlnZ2VyIGRpY3Rp
b25hcnkgcmVzZXQgKi8KLSAgICBpbnQgYXZhaWw7ICAgICAgICAgICAgICAgICAgLyogSW5kZXgg
b2YgbmV4dCBhdmFpbGFibGUgc2xvdCBpbiBkaWN0aW9uYXJ5ICovCisgICAgaW50IGNsZWFyQ29k
ZTsgLy8gQ29kZXdvcmQgdXNlZCB0byB0cmlnZ2VyIGRpY3Rpb25hcnkgcmVzZXQuCisgICAgaW50
IGF2YWlsOyAvLyBJbmRleCBvZiBuZXh0IGF2YWlsYWJsZSBzbG90IGluIGRpY3Rpb25hcnkuCiAg
ICAgaW50IG9sZGNvZGU7CiAgICAgdW5zaWduZWQgY2hhciBmaXJzdGNoYXI7Ci0gICAgaW50IGJp
dHM7ICAgICAgICAgICAgICAgICAgIC8qIE51bWJlciBvZiB1bnJlYWQgYml0cyBpbiAiZGF0dW0i
ICovCi0gICAgaW50IGRhdHVtOyAgICAgICAgICAgICAgICAvKiAzMi1iaXQgaW5wdXQgYnVmZmVy
ICovCi0KLSAgICAvKiBPdXRwdXQgc3RhdGUgbWFjaGluZSAqLwotICAgIGludCBpcGFzczsgICAg
ICAgICAgICAgICAgICAvKiBJbnRlcmxhY2UgcGFzczsgUmFuZ2VzIDEtNCBpZiBpbnRlcmxhY2Vk
LiAqLwotICAgIHVuc2lnbmVkIGludCByb3dzX3JlbWFpbmluZzsgICAgICAgIC8qIFJvd3MgcmVt
YWluaW5nIHRvIGJlIG91dHB1dCAqLwotICAgIHVuc2lnbmVkIGludCBpcm93OyAgICAgICAgICAg
ICAgICAgIC8qIEN1cnJlbnQgb3V0cHV0IHJvdywgc3RhcnRpbmcgYXQgemVybyAqLwotICAgIHVu
c2lnbmVkIGNoYXIgKnJvd2J1ZjsgICAgICAgICAgICAgIC8qIFNpbmdsZSBzY2FubGluZSB0ZW1w
b3JhcnkgYnVmZmVyICovCi0gICAgdW5zaWduZWQgY2hhciAqcm93ZW5kOyAgICAgICAgICAgICAg
LyogUG9pbnRlciB0byBlbmQgb2Ygcm93YnVmICovCi0gICAgdW5zaWduZWQgY2hhciAqcm93cDsg
ICAgICAgICAgICAgICAgLyogQ3VycmVudCBvdXRwdXQgcG9pbnRlciAqLwotCi0gICAgLyogUGFy
YW1ldGVycyBmb3IgaW1hZ2UgZnJhbWUgY3VycmVudGx5IGJlaW5nIGRlY29kZWQgKi8KLSAgICB1
bnNpZ25lZCBpbnQgeF9vZmZzZXQsIHlfb2Zmc2V0OyAgICAvKiBXaXRoIHJlc3BlY3QgdG8gInNj
cmVlbiIgb3JpZ2luICovCi0gICAgdW5zaWduZWQgaW50IGhlaWdodCwgd2lkdGg7Ci0gICAgaW50
IHRwaXhlbDsgICAgICAgICAgICAgICAgIC8qIEluZGV4IG9mIHRyYW5zcGFyZW50IHBpeGVsICov
Ci0gICAgV2ViQ29yZTo6SW1hZ2VGcmFtZTo6RnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbF9t
ZXRob2Q7ICAgLyogUmVzdG9yZSB0byBiYWNrZ3JvdW5kLCBsZWF2ZSBpbiBwbGFjZSwgZXRjLiov
Ci0gICAgdW5zaWduZWQgY2hhciAqbG9jYWxfY29sb3JtYXA7ICAgIC8qIFBlci1pbWFnZSBjb2xv
cm1hcCAqLwotICAgIGludCBsb2NhbF9jb2xvcm1hcF9zaXplOyAgICAvKiBTaXplIG9mIGxvY2Fs
IGNvbG9ybWFwIGFycmF5LiAqLworICAgIGludCBiaXRzOyAvLyBOdW1iZXIgb2YgdW5yZWFkIGJp
dHMgaW4gImRhdHVtIi4KKyAgICBpbnQgZGF0dW07IC8vIDMyLWJpdCBpbnB1dCBidWZmZXIuCisK
KyAgICAvLyBPdXRwdXQgc3RhdGUgbWFjaGluZS4KKyAgICBpbnQgaXBhc3M7IC8vIEludGVybGFj
ZSBwYXNzOyBSYW5nZXMgMS00IGlmIGludGVybGFjZWQuCisgICAgdW5zaWduZWQgcm93c1JlbWFp
bmluZzsgLy8gUm93cyByZW1haW5pbmcgdG8gYmUgb3V0cHV0LgorICAgIHVuc2lnbmVkIGlyb3c7
IC8vIEN1cnJlbnQgb3V0cHV0IHJvdywgc3RhcnRpbmcgYXQgemVyby4KKyAgICB1bnNpZ25lZCBj
aGFyICpyb3didWY7IC8vIFNpbmdsZSBzY2FubGluZSB0ZW1wb3JhcnkgYnVmZmVyLgorICAgIHVu
c2lnbmVkIGNoYXIgKnJvd2VuZDsgLy8gUG9pbnRlciB0byBlbmQgb2Ygcm93YnVmLgorICAgIHVu
c2lnbmVkIGNoYXIgKnJvd3A7IC8vIEN1cnJlbnQgb3V0cHV0IHBvaW50ZXIuCisKKyAgICAvLyBQ
YXJhbWV0ZXJzIGZvciBpbWFnZSBmcmFtZSBjdXJyZW50bHkgYmVpbmcgZGVjb2RlZC4KKyAgICB1
bnNpZ25lZCB4T2Zmc2V0OworICAgIHVuc2lnbmVkIHlPZmZzZXQ7IC8vIFdpdGggcmVzcGVjdCB0
byAic2NyZWVuIiBvcmlnaW4uCisgICAgdW5zaWduZWQgd2lkdGg7CisgICAgdW5zaWduZWQgaGVp
Z2h0OworICAgIGludCB0cGl4ZWw7IC8vIEluZGV4IG9mIHRyYW5zcGFyZW50IHBpeGVsLgorICAg
IFdlYkNvcmU6OkltYWdlRnJhbWU6OkZyYW1lRGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2Q7
IC8vIFJlc3RvcmUgdG8gYmFja2dyb3VuZCwgbGVhdmUgaW4gcGxhY2UsIGV0Yy4KKyAgICB1bnNp
Z25lZCBjaGFyICpsb2NhbENvbG9ybWFwOyAvLyBQZXItaW1hZ2UgY29sb3JtYXAuCisgICAgaW50
IGxvY2FsQ29sb3JtYXBTaXplOyAvLyBTaXplIG9mIGxvY2FsIGNvbG9ybWFwIGFycmF5LgogICAg
IAotICAgIGJvb2wgaXNfbG9jYWxfY29sb3JtYXBfZGVmaW5lZCA6IDE7Ci0gICAgYm9vbCBwcm9n
cmVzc2l2ZV9kaXNwbGF5IDogMTsgICAgLyogSWYgVFJVRSwgZG8gSGFlYmVybGkgaW50ZXJsYWNl
IGhhY2sgKi8KLSAgICBib29sIGludGVybGFjZWQgOiAxOyAgICAgICAgICAgICAvKiBUUlVFLCBp
ZiBzY2FubGluZXMgYXJyaXZlIGludGVybGFjZWQgb3JkZXIgKi8KLSAgICBib29sIGlzX3RyYW5z
cGFyZW50IDogMTsgICAgICAgICAvKiBUUlVFLCBpZiB0cGl4ZWwgaXMgdmFsaWQgKi8KLQotICAg
IHVuc2lnbmVkIGRlbGF5X3RpbWU7ICAgICAgICAvKiBEaXNwbGF5IHRpbWUsIGluIG1pbGxpc2Vj
b25kcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoaXMgaW1hZ2Ug
aW4gYSBtdWx0aS1pbWFnZSBHSUYgKi8KLQotCi0gICAgdW5zaWduZWQgc2hvcnQqICBwcmVmaXg7
ICAgICAgICAgIC8qIExaVyBkZWNvZGluZyB0YWJsZXMgKi8KLSAgICB1bnNpZ25lZCBjaGFyKiAg
IHN1ZmZpeDsgICAgICAgICAgLyogTFpXIGRlY29kaW5nIHRhYmxlcyAqLwotICAgIHVuc2lnbmVk
IGNoYXIqICAgc3RhY2s7ICAgICAgICAgICAvKiBCYXNlIG9mIExaVyBkZWNvZGVyIHN0YWNrICov
Ci0KLQotICAgIEdJRkZyYW1lUmVhZGVyKCkgewotICAgICAgICBzdGFja3AgPSAwOwotICAgICAg
ICBkYXRhc2l6ZSA9IGNvZGVzaXplID0gY29kZW1hc2sgPSBjbGVhcl9jb2RlID0gYXZhaWwgPSBv
bGRjb2RlID0gMDsKLSAgICAgICAgZmlyc3RjaGFyID0gMDsKLSAgICAgICAgYml0cyA9IGRhdHVt
ID0gMDsKLSAgICAgICAgaXBhc3MgPSAwOwotICAgICAgICByb3dzX3JlbWFpbmluZyA9IGlyb3cg
PSAwOwotICAgICAgICByb3didWYgPSByb3dlbmQgPSByb3dwID0gMDsKLQotICAgICAgICB4X29m
ZnNldCA9IHlfb2Zmc2V0ID0gd2lkdGggPSBoZWlnaHQgPSAwOwotICAgICAgICB0cGl4ZWwgPSAw
OwotICAgICAgICBkaXNwb3NhbF9tZXRob2QgPSBXZWJDb3JlOjpJbWFnZUZyYW1lOjpEaXNwb3Nl
Tm90U3BlY2lmaWVkOwotCi0gICAgICAgIGxvY2FsX2NvbG9ybWFwID0gMDsKLSAgICAgICAgbG9j
YWxfY29sb3JtYXBfc2l6ZSA9IDA7Ci0gICAgICAgIGlzX2xvY2FsX2NvbG9ybWFwX2RlZmluZWQg
PSBwcm9ncmVzc2l2ZV9kaXNwbGF5ID0gaXNfdHJhbnNwYXJlbnQgPSBpbnRlcmxhY2VkID0gZmFs
c2U7Ci0KLSAgICAgICAgZGVsYXlfdGltZSA9IDA7Ci0KLSAgICAgICAgcHJlZml4ID0gMDsKLSAg
ICAgICAgc3VmZml4ID0gc3RhY2sgPSAwOworICAgIGJvb2wgaXNMb2NhbENvbG9ybWFwRGVmaW5l
ZCA6IDE7CisgICAgYm9vbCBwcm9ncmVzc2l2ZURpc3BsYXkgOiAxOyAvLyBJZiB0cnVlLCBkbyBI
YWViZXJsaSBpbnRlcmxhY2UgaGFjay4KKyAgICBib29sIGludGVybGFjZWQgOiAxOyAvLyBUcnVl
LCBpZiBzY2FubGluZXMgYXJyaXZlIGludGVybGFjZWQgb3JkZXIuCisgICAgYm9vbCBpc1RyYW5z
cGFyZW50IDogMTsgLy8gVFJVRSwgaWYgdHBpeGVsIGlzIHZhbGlkLgorCisgICAgdW5zaWduZWQg
ZGVsYXlUaW1lOyAvLyBEaXNwbGF5IHRpbWUsIGluIG1pbGxpc2Vjb25kcywgZm9yIHRoaXMgaW1h
Z2UgaW4gYSBtdWx0aS1pbWFnZSBHSUYuCisKKyAgICB1bnNpZ25lZCBzaG9ydCogcHJlZml4OyAv
LyBMWlcgZGVjb2RpbmcgdGFibGVzLgorICAgIHVuc2lnbmVkIGNoYXIqIHN1ZmZpeDsgLy8gTFpX
IGRlY29kaW5nIHRhYmxlcy4KKyAgICB1bnNpZ25lZCBjaGFyKiBzdGFjazsgLy8gQmFzZSBvZiBM
WlcgZGVjb2RlciBzdGFjay4KKworICAgIEdJRkZyYW1lQ29udGV4dCgpCisgICAgICAgIDogc3Rh
Y2twKDApCisgICAgICAgICwgZGF0YXNpemUoMCkKKyAgICAgICAgLCBjb2Rlc2l6ZSgwKQorICAg
ICAgICAsIGNvZGVtYXNrKDApCisgICAgICAgICwgY2xlYXJDb2RlKDApCisgICAgICAgICwgYXZh
aWwoMCkKKyAgICAgICAgLCBvbGRjb2RlKDApCisgICAgICAgICwgZmlyc3RjaGFyKDApCisgICAg
ICAgICwgYml0cygwKQorICAgICAgICAsIGRhdHVtKDApCisgICAgICAgICwgaXBhc3MoMCkKKyAg
ICAgICAgLCByb3dzUmVtYWluaW5nKDApCisgICAgICAgICwgaXJvdygwKQorICAgICAgICAsIHJv
d2J1ZigwKQorICAgICAgICAsIHJvd2VuZCgwKQorICAgICAgICAsIHJvd3AoMCkKKyAgICAgICAg
LCB4T2Zmc2V0KDApCisgICAgICAgICwgeU9mZnNldCgwKQorICAgICAgICAsIHdpZHRoKDApCisg
ICAgICAgICwgaGVpZ2h0KDApCisgICAgICAgICwgdHBpeGVsKDApCisgICAgICAgICwgZGlzcG9z
YWxNZXRob2QoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6RGlzcG9zZU5vdFNwZWNpZmllZCkKKyAgICAg
ICAgLCBsb2NhbENvbG9ybWFwKDApCisgICAgICAgICwgbG9jYWxDb2xvcm1hcFNpemUoMCkKKyAg
ICAgICAgLCBpc0xvY2FsQ29sb3JtYXBEZWZpbmVkKGZhbHNlKQorICAgICAgICAsIHByb2dyZXNz
aXZlRGlzcGxheShmYWxzZSkKKyAgICAgICAgLCBpbnRlcmxhY2VkKGZhbHNlKQorICAgICAgICAs
IGlzVHJhbnNwYXJlbnQoZmFsc2UpCisgICAgICAgICwgZGVsYXlUaW1lKDApCisgICAgICAgICwg
cHJlZml4KDApCisgICAgICAgICwgc3VmZml4KDApCisgICAgICAgICwgc3RhY2soMCkKKyAgICB7
CiAgICAgfQogICAgIAotICAgIH5HSUZGcmFtZVJlYWRlcigpIHsKLSAgICAgICAgZGVsZXRlIFtd
cm93YnVmOwotICAgICAgICBkZWxldGUgW11sb2NhbF9jb2xvcm1hcDsKLSAgICAgICAgZGVsZXRl
IFtdcHJlZml4OwotICAgICAgICBkZWxldGUgW11zdWZmaXg7Ci0gICAgICAgIGRlbGV0ZSBbXXN0
YWNrOworICAgIH5HSUZGcmFtZUNvbnRleHQoKQorICAgIHsKKyAgICAgICAgZGVsZXRlIFtdIHJv
d2J1ZjsKKyAgICAgICAgZGVsZXRlIFtdIGxvY2FsQ29sb3JtYXA7CisgICAgICAgIGRlbGV0ZSBb
XSBwcmVmaXg7CisgICAgICAgIGRlbGV0ZSBbXSBzdWZmaXg7CisgICAgICAgIGRlbGV0ZSBbXSBz
dGFjazsKICAgICB9CiB9OwogCi1zdHJ1Y3QgR0lGSW1hZ2VSZWFkZXIgeworY2xhc3MgR0lGSW1h
Z2VSZWFkZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFdl
YkNvcmU6OkdJRkltYWdlRGVjb2RlciogY2xpZW50cHRyOwotICAgIC8qIFBhcnNpbmcgc3RhdGUg
bWFjaGluZSAqLwotICAgIGdzdGF0ZSBzdGF0ZTsgICAgICAgICAgICAgICAgICAgICAgLyogQ3Vy
cmVudCBkZWNvZGVyIG1hc3RlciBzdGF0ZSAqLwotICAgIHVuc2lnbmVkIGJ5dGVzX3RvX2NvbnN1
bWU7ICAgICAgICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGFjY3VtdWxhdGUgKi8KLSAgICB1bnNp
Z25lZCBieXRlc19pbl9ob2xkOyAgICAgICAgICAgIC8qIGJ5dGVzIGFjY3VtdWxhdGVkIHNvIGZh
ciovCi0gICAgdW5zaWduZWQgY2hhciBob2xkW01BWF9IT0xEX1NJWkVdOyAvKiBBY2N1bXVsYXRp
b24gYnVmZmVyICovCi0gICAgdW5zaWduZWQgY2hhciogZ2xvYmFsX2NvbG9ybWFwOyAgICAvKiAo
MyogTUFYX0NPTE9SUyBpbiBzaXplKSBEZWZhdWx0IGNvbG9ybWFwIGlmIGxvY2FsIG5vdCBzdXBw
bGllZCwgMyBieXRlcyBmb3IgZWFjaCBjb2xvciAgKi8KLSAgICAKLSAgICAgLyogR2xvYmFsICht
dWx0aS1pbWFnZSkgc3RhdGUgKi8KLSAgICBpbnQgc2NyZWVuX2JnY29sb3I7ICAgICAgICAgLyog
TG9naWNhbCBzY3JlZW4gYmFja2dyb3VuZCBjb2xvciAqLwotICAgIGludCB2ZXJzaW9uOyAgICAg
ICAgICAgICAgICAvKiBFaXRoZXIgODkgZm9yIEdJRjg5IG9yIDg3IGZvciBHSUY4NyAqLwotICAg
IHVuc2lnbmVkIHNjcmVlbl93aWR0aDsgICAgICAgLyogTG9naWNhbCBzY3JlZW4gd2lkdGggJiBo
ZWlnaHQgKi8KLSAgICB1bnNpZ25lZCBzY3JlZW5faGVpZ2h0OwotICAgIGludCBnbG9iYWxfY29s
b3JtYXBfc2l6ZTsgICAvKiBTaXplIG9mIGdsb2JhbCBjb2xvcm1hcCBhcnJheS4gKi8KLSAgICB1
bnNpZ25lZCBpbWFnZXNfZGVjb2RlZDsgICAgLyogQ291bnRzIGNvbXBsZXRlZCBmcmFtZXMgZm9y
IGFuaW1hdGVkIEdJRnMgKi8KLSAgICBpbnQgaW1hZ2VzX2NvdW50OyAgICAgICAgICAgLyogQ291
bnRlZCBhbGwgZnJhbWVzIHNlZW4gc28gZmFyIChpbmNsdWRpbmcgaW5jb21wbGV0ZSBmcmFtZXMp
ICovCi0gICAgaW50IGxvb3BfY291bnQ7ICAgICAgICAgICAgIC8qIE5ldHNjYXBlIHNwZWNpZmlj
IGV4dGVuc2lvbiBibG9jayB0byBjb250cm9sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRoZSBudW1iZXIgb2YgYW5pbWF0aW9uIGxvb3BzIGEgR0lGIHJlbmRlcnMuICovCi0g
ICAgCi0gICAgLy8gTm90IHJlYWxseSBnbG9iYWwsIGJ1dCBjb252ZW5pZW50IHRvIGxvY2F0ZSBo
ZXJlLgotICAgIGludCBjb3VudDsgICAgICAgICAgICAgICAgICAvKiBSZW1haW5pbmcgIyBieXRl
cyBpbiBzdWItYmxvY2sgKi8KLSAgICAKLSAgICBHSUZGcmFtZVJlYWRlciogZnJhbWVfcmVhZGVy
OwotCi0gICAgR0lGSW1hZ2VSZWFkZXIoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyKiBjbGllbnQg
PSAwKSB7Ci0gICAgICAgIGNsaWVudHB0ciA9IGNsaWVudDsKLSAgICAgICAgc3RhdGUgPSBnaWZf
dHlwZTsKLSAgICAgICAgYnl0ZXNfdG9fY29uc3VtZSA9IDY7Ci0gICAgICAgIGJ5dGVzX2luX2hv
bGQgPSAwOwotICAgICAgICBmcmFtZV9yZWFkZXIgPSAwOwotICAgICAgICBnbG9iYWxfY29sb3Jt
YXAgPSAwOwotCi0gICAgICAgIHNjcmVlbl9iZ2NvbG9yID0gdmVyc2lvbiA9IDA7Ci0gICAgICAg
IHNjcmVlbl93aWR0aCA9IHNjcmVlbl9oZWlnaHQgPSAwOwotICAgICAgICBnbG9iYWxfY29sb3Jt
YXBfc2l6ZSA9IGltYWdlc19kZWNvZGVkID0gaW1hZ2VzX2NvdW50ID0gMDsKLSAgICAgICAgbG9v
cF9jb3VudCA9IGNMb29wQ291bnROb3RTZWVuOwotICAgICAgICBjb3VudCA9IDA7CisgICAgR0lG
SW1hZ2VSZWFkZXIoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyKiBjbGllbnQgPSAwKQorICAgICAg
ICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAgICAgLCBtX3N0YXRlKEdJRlR5cGUpCisgICAgICAg
ICwgbV9ieXRlc1RvQ29uc3VtZSg2KQorICAgICAgICAsIG1fYnl0ZXNJbkhvbGQoMCkKKyAgICAg
ICAgLCBtX2dsb2JhbENvbG9ybWFwKDApCisgICAgICAgICwgbV9zY3JlZW5CZ2NvbG9yKDApCisg
ICAgICAgICwgbV92ZXJzaW9uKDApCisgICAgICAgICwgbV9zY3JlZW5XaWR0aCgwKQorICAgICAg
ICAsIG1fc2NyZWVuSGVpZ2h0KDApCisgICAgICAgICwgbV9nbG9iYWxDb2xvcm1hcFNpemUoMCkK
KyAgICAgICAgLCBtX2ltYWdlc0RlY29kZWQoMCkKKyAgICAgICAgLCBtX2ltYWdlc0NvdW50KDAp
CisgICAgICAgICwgbV9sb29wQ291bnQoY0xvb3BDb3VudE5vdFNlZW4pCisgICAgICAgICwgbV9j
b3VudCgwKQorICAgICAgICAsIG1fZnJhbWVDb250ZXh0KDApCisgICAgewogICAgIH0KIAotICAg
IH5HSUZJbWFnZVJlYWRlcigpIHsKLSAgICAgICAgZGVsZXRlIFtdZ2xvYmFsX2NvbG9ybWFwOwot
ICAgICAgICBnbG9iYWxfY29sb3JtYXAgPSAwOwotICAgICAgICBkZWxldGUgZnJhbWVfcmVhZGVy
OwotICAgICAgICBmcmFtZV9yZWFkZXIgPSAwOworICAgIH5HSUZJbWFnZVJlYWRlcigpCisgICAg
eworICAgICAgICBkZWxldGUgW10gbV9nbG9iYWxDb2xvcm1hcDsKKyAgICAgICAgbV9nbG9iYWxD
b2xvcm1hcCA9IDA7CisKKyAgICAgICAgZGVsZXRlIG1fZnJhbWVDb250ZXh0OworICAgICAgICBt
X2ZyYW1lQ29udGV4dCA9IDA7CiAgICAgfQogCi0gICAgYm9vbCByZWFkKGNvbnN0IHVuc2lnbmVk
IGNoYXIgKiBidWYsIHVuc2lnbmVkIGludCBudW1ieXRlcywgCi0gICAgICAgICAgICAgIFdlYkNv
cmU6OkdJRkltYWdlRGVjb2Rlcjo6R0lGUXVlcnkgcXVlcnkgPSBXZWJDb3JlOjpHSUZJbWFnZURl
Y29kZXI6OkdJRkZ1bGxRdWVyeSwgdW5zaWduZWQgaGFsdEF0RnJhbWUgPSAtMSk7CisgICAgYm9v
bCByZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJ1ZiwgdW5zaWduZWQgbnVtYnl0ZXMsIFdlYkNv
cmU6OkdJRkltYWdlRGVjb2Rlcjo6R0lGUXVlcnkgPSBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6
OkdJRkZ1bGxRdWVyeSwgdW5zaWduZWQgaGFsdEF0RnJhbWUgPSAtMSk7CisKKyAgICBpbnQgaW1h
Z2VzQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlc0NvdW50OyB9CisgICAgaW50IGxvb3BD
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9vcENvdW50OyB9CisgICAgdW5zaWduZWQgY2hhciog
Z2xvYmFsQ29sb3JtYXAoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbENvbG9ybWFwOyB9CisgICAg
aW50IGdsb2JhbENvbG9ybWFwU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsQ29sb3JtYXBT
aXplOyB9CisgICAgY29uc3QgR0lGRnJhbWVDb250ZXh0KiBmcmFtZUNvbnRleHQoKSBjb25zdCB7
IHJldHVybiBtX2ZyYW1lQ29udGV4dDsgfQogCiBwcml2YXRlOgotICAgIGJvb2wgb3V0cHV0X3Jv
dygpOwotICAgIGJvb2wgZG9fbHp3KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnEpOworICAgIGJvb2wg
b3V0cHV0Um93KCk7CisgICAgYm9vbCBkb0xaVyhjb25zdCB1bnNpZ25lZCBjaGFyICpxKTsKKwor
ICAgIFdlYkNvcmU6OkdJRkltYWdlRGVjb2RlciogbV9jbGllbnQ7CisKKyAgICAvLyBQYXJzaW5n
IHN0YXRlIG1hY2hpbmUuCisgICAgR0lGU3RhdGUgbV9zdGF0ZTsgLy8gQ3VycmVudCBkZWNvZGVy
IG1hc3RlciBzdGF0ZS4KKyAgICB1bnNpZ25lZCBtX2J5dGVzVG9Db25zdW1lOyAvLyBOdW1iZXIg
b2YgYnl0ZXMgdG8gYWNjdW11bGF0ZS4KKyAgICB1bnNpZ25lZCBtX2J5dGVzSW5Ib2xkOyAvLyBi
eXRlcyBhY2N1bXVsYXRlZCBzbyBmYXIuCisgICAgdW5zaWduZWQgY2hhciBtX2hvbGRbTUFYX0hP
TERfU0laRV07IC8vIEFjY3VtdWxhdGlvbiBidWZmZXIuCisgICAgdW5zaWduZWQgY2hhciogbV9n
bG9iYWxDb2xvcm1hcDsgLy8gKDMqIE1BWF9DT0xPUlMgaW4gc2l6ZSkgRGVmYXVsdCBjb2xvcm1h
cCBpZiBsb2NhbCBub3Qgc3VwcGxpZWQsIDMgYnl0ZXMgZm9yIGVhY2ggY29sb3IuCisgICAgCisg
ICAgLy8gR2xvYmFsIChtdWx0aS1pbWFnZSkgc3RhdGUuCisgICAgaW50IG1fc2NyZWVuQmdjb2xv
cjsgLy8gTG9naWNhbCBzY3JlZW4gYmFja2dyb3VuZCBjb2xvci4KKyAgICBpbnQgbV92ZXJzaW9u
OyAvLyBFaXRoZXIgODkgZm9yIEdJRjg5IG9yIDg3IGZvciBHSUY4Ny4KKyAgICB1bnNpZ25lZCBt
X3NjcmVlbldpZHRoOyAvLyBMb2dpY2FsIHNjcmVlbiB3aWR0aCAmIGhlaWdodC4KKyAgICB1bnNp
Z25lZCBtX3NjcmVlbkhlaWdodDsKKyAgICBpbnQgbV9nbG9iYWxDb2xvcm1hcFNpemU7IC8vIFNp
emUgb2YgZ2xvYmFsIGNvbG9ybWFwIGFycmF5LgorICAgIHVuc2lnbmVkIG1faW1hZ2VzRGVjb2Rl
ZDsgLy8gQ291bnRzIGNvbXBsZXRlZCBmcmFtZXMgZm9yIGFuaW1hdGVkIEdJRnMuCisgICAgaW50
IG1faW1hZ2VzQ291bnQ7IC8vIENvdW50ZWQgYWxsIGZyYW1lcyBzZWVuIHNvIGZhciAoaW5jbHVk
aW5nIGluY29tcGxldGUgZnJhbWVzKS4KKyAgICBpbnQgbV9sb29wQ291bnQ7IC8vIE5ldHNjYXBl
IHNwZWNpZmljIGV4dGVuc2lvbiBibG9jayB0byBjb250cm9sIHRoZSBudW1iZXIgb2YgYW5pbWF0
aW9uIGxvb3BzIGEgR0lGIHJlbmRlcnMuCisgICAgCisgICAgLy8gTm90IHJlYWxseSBnbG9iYWws
IGJ1dCBjb252ZW5pZW50IHRvIGxvY2F0ZSBoZXJlLgorICAgIGludCBtX2NvdW50OyAvLyBSZW1h
aW5pbmcgIyBieXRlcyBpbiBzdWItYmxvY2suCisgICAgCisgICAgR0lGRnJhbWVDb250ZXh0KiBt
X2ZyYW1lQ29udGV4dDsKIH07CiAKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186755</attachid>
            <date>2013-02-05 21:49:59 -0800</date>
            <delta_ts>2013-02-20 11:45:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98098-20130205214636.patch</filename>
            <type>text/plain</type>
            <size>78973</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxOTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzQ4NmY5NzQxOTJmYTRm
NjZlNGYxYTdlOWI2NjIwMmY2YjQzNWY3ZS4uZjRhYWRkMjNjMjYyOWMxM2E5MDljYWUwOGRhYjhl
MmViNWM4ZjBmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEzLTAyLTA1ICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUGFyc2UgR0lGIGltYWdlcyB3
aXRob3V0IGZ1bGwgZGVjb2RpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTk4MDk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBpcyB0aGUgZmlyc3QgY2hhbmdlIHRvIGltcGxlbWVudCBuZXcgR0lG
IHBhcnNpbmcgbG9naWMgaW4gR0lGSW1hZ2VSZWFkZXIuCisgICAgICAgIFRoaXMgY2hhbmdlIGlz
IG1lYW50IHRvIGZpeCBzdHlsZSB2aW9sYXRpb25zIGluIHRoZSBmaWxlIHN1Y2ggdGhhdCBsYXRl
cgorICAgICAgICBwYXRjaGVzIHdpbGwgYmUgZWFzaWVyIHRvIHJldmlldy4KKworICAgICAgICBU
aGVyZSBpcyBubyBjaGFuZ2UgaW4gbG9naWMgYXQgYWxsLiBKdXN0IHN0eWxlIGZpeGVzLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2dpZi9HSUZJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNv
ZGVyOjpmcmFtZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6cmVw
ZXRpdGlvbkNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6aGF2ZURl
Y29kZWRSb3cpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVC
dWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJl
YWRlci5jcHA6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6b3V0cHV0Um93KToKKyAgICAgICAg
KEdJRkltYWdlUmVhZGVyOjpkb0xaVyk6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6cmVhZCk6
CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmg6
CisgICAgICAgIChHSUZGcmFtZUNvbnRleHQpOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0OjpH
SUZGcmFtZUNvbnRleHQpOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0Ojp+R0lGRnJhbWVDb250
ZXh0KToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpHSUZJbWFnZVJlYWRlcik6CisgICAgICAg
IChHSUZJbWFnZVJlYWRlcjo6fkdJRkltYWdlUmVhZGVyKToKKyAgICAgICAgKEdJRkltYWdlUmVh
ZGVyKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjppbWFnZXNDb3VudCk6CisgICAgICAgIChH
SUZJbWFnZVJlYWRlcjo6bG9vcENvdW50KToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpnbG9i
YWxDb2xvcm1hcCk6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6Z2xvYmFsQ29sb3JtYXBTaXpl
KToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpmcmFtZUNvbnRleHQpOgorCiAyMDEzLTAyLTA1
ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbVjhdIFJl
bW92ZSBkZXByZWNhdGVkVjhTdHJpbmcoKSBhbmQgZGVwcmVjYXRlZFY4SW50ZWdlcigpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1h
Z2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dp
Zi9HSUZJbWFnZURlY29kZXIuY3BwCmluZGV4IDhmYzRhOWE1MzA5ZmY4MTlkMWY4OThiMzM4MWE5
MWY3NzkxMmIxZTUuLjBjYjIyODg1Y2ViM2Q2YjE2YjIzNWY4MTliOThhMjViOTNiYWZkOGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJ
bWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCkBAIC04Nyw4ICs4Nyw4IEBAIHNpemVfdCBHSUZJ
bWFnZURlY29kZXI6OmZyYW1lQ291bnQoKQogICAgICAgICBHSUZJbWFnZVJlYWRlciByZWFkZXIo
MCk7CiAgICAgICAgIHJlYWRlci5yZWFkKChjb25zdCB1bnNpZ25lZCBjaGFyKiltX2RhdGEtPmRh
dGEoKSwgbV9kYXRhLT5zaXplKCksIEdJRkZyYW1lQ291bnRRdWVyeSwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KC0xKSk7CiAgICAgICAgIG1fYWxyZWFkeVNjYW5uZWRUaGlzRGF0YUZvckZyYW1lQ291
bnQgPSB0cnVlOwotICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUucmVzaXplKHJlYWRlci5pbWFn
ZXNfY291bnQpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlYWRlci5pbWFnZXNfY291
bnQ7ICsraSkKKyAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZShyZWFkZXIuaW1hZ2Vz
Q291bnQoKSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVhZGVyLmltYWdlc0NvdW50
KCk7ICsraSkKICAgICAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZVtpXS5zZXRQcmVtdWx0aXBs
eUFscGhhKG1fcHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgfQogCkBAIC0xMTYsOCArMTE2LDggQEAg
aW50IEdJRkltYWdlRGVjb2Rlcjo6cmVwZXRpdGlvbkNvdW50KCkgY29uc3QKICAgICAvLyBzaG91
bGQgY29udGludWUgdG8gdHJlYXQgaXQgYXMgYSAibG9vcCBvbmNlIiBhbmltYXRpb24uICBXZSBk
b24ndCBuZWVkCiAgICAgLy8gc3BlY2lhbCBjb2RlIGhlcmUgZWl0aGVyLCBiZWNhdXNlIGluIHRo
aXMgY2FzZSB3ZSdsbCBuZXZlciBjaGFuZ2UKICAgICAvLyB8bV9yZXBldGl0aW9uQ291bnR8IGZy
b20gaXRzIGRlZmF1bHQgdmFsdWUuCi0gICAgaWYgKG1fcmVhZGVyICYmIChtX3JlYWRlci0+bG9v
cF9jb3VudCAhPSBjTG9vcENvdW50Tm90U2VlbikpCi0gICAgICAgIG1fcmVwZXRpdGlvbkNvdW50
ID0gbV9yZWFkZXItPmxvb3BfY291bnQ7CisgICAgaWYgKG1fcmVhZGVyICYmIChtX3JlYWRlci0+
bG9vcENvdW50KCkgIT0gY0xvb3BDb3VudE5vdFNlZW4pKQorICAgICAgICBtX3JlcGV0aXRpb25D
b3VudCA9IG1fcmVhZGVyLT5sb29wQ291bnQoKTsKICAgICByZXR1cm4gbV9yZXBldGl0aW9uQ291
bnQ7CiB9CiAKQEAgLTE5OCwyOSArMTk4LDI5IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpkZWNv
ZGluZ0hhbHRlZCh1bnNpZ25lZCBieXRlc0xlZnQpCiAKIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpo
YXZlRGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBjaGFyKiByb3dCdWZm
ZXIsIHVuc2lnbmVkIGNoYXIqIHJvd0VuZCwgdW5zaWduZWQgcm93TnVtYmVyLCB1bnNpZ25lZCBy
ZXBlYXRDb3VudCwgYm9vbCB3cml0ZVRyYW5zcGFyZW50UGl4ZWxzKQogewotICAgIGNvbnN0IEdJ
RkZyYW1lUmVhZGVyKiBmcmFtZVJlYWRlciA9IG1fcmVhZGVyLT5mcmFtZV9yZWFkZXI7CisgICAg
Y29uc3QgR0lGRnJhbWVDb250ZXh0KiBmcmFtZUNvbnRleHQgPSBtX3JlYWRlci0+ZnJhbWVDb250
ZXh0KCk7CiAgICAgLy8gVGhlIHBpeGVsIGRhdGEgYW5kIGNvb3JkaW5hdGVzIHN1cHBsaWVkIHRv
IHVzIGFyZSByZWxhdGl2ZSB0byB0aGUgZnJhbWUncwogICAgIC8vIG9yaWdpbiB3aXRoaW4gdGhl
IGVudGlyZSBpbWFnZSBzaXplLCBpLmUuCi0gICAgLy8gKGZyYW1lUmVhZGVyLT54X29mZnNldCwg
ZnJhbWVSZWFkZXItPnlfb2Zmc2V0KS4gIFRoZXJlIGlzIG5vIGd1YXJhbnRlZQotICAgIC8vIHRo
YXQgKHJvd0VuZCAtIHJvd0J1ZmZlcikgPT0gKHNpemUoKS53aWR0aCgpIC0gZnJhbWVSZWFkZXIt
Pnhfb2Zmc2V0KSwgc28KKyAgICAvLyAoZnJhbWVDb250ZXh0LT54T2Zmc2V0LCBmcmFtZUNvbnRl
eHQtPnlPZmZzZXQpLiBUaGVyZSBpcyBubyBndWFyYW50ZWUKKyAgICAvLyB0aGF0IChyb3dFbmQg
LSByb3dCdWZmZXIpID09IChzaXplKCkud2lkdGgoKSAtIGZyYW1lQ29udGV4dC0+eE9mZnNldCks
IHNvCiAgICAgLy8gd2UgbXVzdCBlbnN1cmUgd2UgZG9uJ3QgcnVuIG9mZiB0aGUgZW5kIG9mIGVp
dGhlciB0aGUgc291cmNlIGRhdGEgb3IgdGhlCiAgICAgLy8gcm93J3MgWC1jb29yZGluYXRlcy4K
LSAgICBpbnQgeEJlZ2luID0gdXBwZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWFkZXItPnhfb2Zmc2V0
KTsKLSAgICBpbnQgeUJlZ2luID0gdXBwZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWFkZXItPnlfb2Zm
c2V0ICsgcm93TnVtYmVyKTsKLSAgICBpbnQgeEVuZCA9IGxvd2VyQm91bmRTY2FsZWRYKHN0ZDo6
bWluKHN0YXRpY19jYXN0PGludD4oZnJhbWVSZWFkZXItPnhfb2Zmc2V0ICsgKHJvd0VuZCAtIHJv
d0J1ZmZlcikpLCBzaXplKCkud2lkdGgoKSkgLSAxLCB4QmVnaW4gKyAxKSArIDE7Ci0gICAgaW50
IHlFbmQgPSBsb3dlckJvdW5kU2NhbGVkWShzdGQ6Om1pbihzdGF0aWNfY2FzdDxpbnQ+KGZyYW1l
UmVhZGVyLT55X29mZnNldCArIHJvd051bWJlciArIHJlcGVhdENvdW50KSwgc2l6ZSgpLmhlaWdo
dCgpKSAtIDEsIHlCZWdpbiArIDEpICsgMTsKKyAgICBpbnQgeEJlZ2luID0gdXBwZXJCb3VuZFNj
YWxlZFgoZnJhbWVDb250ZXh0LT54T2Zmc2V0KTsKKyAgICBpbnQgeUJlZ2luID0gdXBwZXJCb3Vu
ZFNjYWxlZFkoZnJhbWVDb250ZXh0LT55T2Zmc2V0ICsgcm93TnVtYmVyKTsKKyAgICBpbnQgeEVu
ZCA9IGxvd2VyQm91bmRTY2FsZWRYKHN0ZDo6bWluKHN0YXRpY19jYXN0PGludD4oZnJhbWVDb250
ZXh0LT54T2Zmc2V0ICsgKHJvd0VuZCAtIHJvd0J1ZmZlcikpLCBzaXplKCkud2lkdGgoKSkgLSAx
LCB4QmVnaW4gKyAxKSArIDE7CisgICAgaW50IHlFbmQgPSBsb3dlckJvdW5kU2NhbGVkWShzdGQ6
Om1pbihzdGF0aWNfY2FzdDxpbnQ+KGZyYW1lQ29udGV4dC0+eU9mZnNldCArIHJvd051bWJlciAr
IHJlcGVhdENvdW50KSwgc2l6ZSgpLmhlaWdodCgpKSAtIDEsIHlCZWdpbiArIDEpICsgMTsKICAg
ICBpZiAoIXJvd0J1ZmZlciB8fCAoeEJlZ2luIDwgMCkgfHwgKHlCZWdpbiA8IDApIHx8ICh4RW5k
IDw9IHhCZWdpbikgfHwgKHlFbmQgPD0geUJlZ2luKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
ICAgICAvLyBHZXQgdGhlIGNvbG9ybWFwLgogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNvbG9y
TWFwOwogICAgIHVuc2lnbmVkIGNvbG9yTWFwU2l6ZTsKLSAgICBpZiAoZnJhbWVSZWFkZXItPmlz
X2xvY2FsX2NvbG9ybWFwX2RlZmluZWQpIHsKLSAgICAgICAgY29sb3JNYXAgPSBmcmFtZVJlYWRl
ci0+bG9jYWxfY29sb3JtYXA7Ci0gICAgICAgIGNvbG9yTWFwU2l6ZSA9ICh1bnNpZ25lZClmcmFt
ZVJlYWRlci0+bG9jYWxfY29sb3JtYXBfc2l6ZTsKKyAgICBpZiAoZnJhbWVDb250ZXh0LT5pc0xv
Y2FsQ29sb3JtYXBEZWZpbmVkKSB7CisgICAgICAgIGNvbG9yTWFwID0gZnJhbWVDb250ZXh0LT5s
b2NhbENvbG9ybWFwOworICAgICAgICBjb2xvck1hcFNpemUgPSAodW5zaWduZWQpZnJhbWVDb250
ZXh0LT5sb2NhbENvbG9ybWFwU2l6ZTsKICAgICB9IGVsc2UgewotICAgICAgICBjb2xvck1hcCA9
IG1fcmVhZGVyLT5nbG9iYWxfY29sb3JtYXA7Ci0gICAgICAgIGNvbG9yTWFwU2l6ZSA9IG1fcmVh
ZGVyLT5nbG9iYWxfY29sb3JtYXBfc2l6ZTsKKyAgICAgICAgY29sb3JNYXAgPSBtX3JlYWRlci0+
Z2xvYmFsQ29sb3JtYXAoKTsKKyAgICAgICAgY29sb3JNYXBTaXplID0gbV9yZWFkZXItPmdsb2Jh
bENvbG9ybWFwU2l6ZSgpOwogICAgIH0KICAgICBpZiAoIWNvbG9yTWFwKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTIzMyw4ICsyMzMsOCBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aGF2ZURl
Y29kZWRSb3codW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgY2hhciogcm93QnVmZgogICAg
IEltYWdlRnJhbWU6OlBpeGVsRGF0YSogY3VycmVudEFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcih4
QmVnaW4sIHlCZWdpbik7CiAgICAgLy8gV3JpdGUgb25lIHJvdydzIHdvcnRoIG9mIGRhdGEgaW50
byB0aGUgZnJhbWUuICAKICAgICBmb3IgKGludCB4ID0geEJlZ2luOyB4IDwgeEVuZDsgKyt4KSB7
Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgc291cmNlVmFsdWUgPSAqKHJvd0J1ZmZlciAr
IChtX3NjYWxlZCA/IG1fc2NhbGVkQ29sdW1uc1t4XSA6IHgpIC0gZnJhbWVSZWFkZXItPnhfb2Zm
c2V0KTsKLSAgICAgICAgaWYgKCghZnJhbWVSZWFkZXItPmlzX3RyYW5zcGFyZW50IHx8IChzb3Vy
Y2VWYWx1ZSAhPSBmcmFtZVJlYWRlci0+dHBpeGVsKSkgJiYgKHNvdXJjZVZhbHVlIDwgY29sb3JN
YXBTaXplKSkgeworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHNvdXJjZVZhbHVlID0gKihy
b3dCdWZmZXIgKyAobV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4KSAtIGZyYW1lQ29u
dGV4dC0+eE9mZnNldCk7CisgICAgICAgIGlmICgoIWZyYW1lQ29udGV4dC0+aXNUcmFuc3BhcmVu
dCB8fCAoc291cmNlVmFsdWUgIT0gZnJhbWVDb250ZXh0LT50cGl4ZWwpKSAmJiAoc291cmNlVmFs
dWUgPCBjb2xvck1hcFNpemUpKSB7CiAgICAgICAgICAgICBjb25zdCBzaXplX3QgY29sb3JJbmRl
eCA9IHN0YXRpY19jYXN0PHNpemVfdD4oc291cmNlVmFsdWUpICogMzsKICAgICAgICAgICAgIGJ1
ZmZlci5zZXRSR0JBKGN1cnJlbnRBZGRyZXNzLCBjb2xvck1hcFtjb2xvckluZGV4XSwgY29sb3JN
YXBbY29sb3JJbmRleCArIDFdLCBjb2xvck1hcFtjb2xvckluZGV4ICsgMl0sIDI1NSk7CiAgICAg
ICAgIH0gZWxzZSB7CkBAIC0zMzEsMTQgKzMzMSwxNCBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6
ZGVjb2RlKHVuc2lnbmVkIGhhbHRBdEZyYW1lLCBHSUZRdWVyeSBxdWVyeSkKIGJvb2wgR0lGSW1h
Z2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW5zaWduZWQgZnJhbWVJbmRleCkKIHsKICAgICAv
LyBJbml0aWFsaXplIHRoZSBmcmFtZSByZWN0IGluIG91ciBidWZmZXIuCi0gICAgY29uc3QgR0lG
RnJhbWVSZWFkZXIqIGZyYW1lUmVhZGVyID0gbV9yZWFkZXItPmZyYW1lX3JlYWRlcjsKLSAgICBJ
bnRSZWN0IGZyYW1lUmVjdChmcmFtZVJlYWRlci0+eF9vZmZzZXQsIGZyYW1lUmVhZGVyLT55X29m
ZnNldCwgZnJhbWVSZWFkZXItPndpZHRoLCBmcmFtZVJlYWRlci0+aGVpZ2h0KTsKKyAgICBjb25z
dCBHSUZGcmFtZUNvbnRleHQqIGZyYW1lQ29udGV4dCA9IG1fcmVhZGVyLT5mcmFtZUNvbnRleHQo
KTsKKyAgICBJbnRSZWN0IGZyYW1lUmVjdChmcmFtZUNvbnRleHQtPnhPZmZzZXQsIGZyYW1lQ29u
dGV4dC0+eU9mZnNldCwgZnJhbWVDb250ZXh0LT53aWR0aCwgZnJhbWVDb250ZXh0LT5oZWlnaHQp
OwogCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBmcmFtZVJlY3QgZG9lc24ndCBleHRlbmQgb3V0c2lk
ZSB0aGUgYnVmZmVyLgogICAgIGlmIChmcmFtZVJlY3QubWF4WCgpID4gc2l6ZSgpLndpZHRoKCkp
Ci0gICAgICAgIGZyYW1lUmVjdC5zZXRXaWR0aChzaXplKCkud2lkdGgoKSAtIGZyYW1lUmVhZGVy
LT54X29mZnNldCk7CisgICAgICAgIGZyYW1lUmVjdC5zZXRXaWR0aChzaXplKCkud2lkdGgoKSAt
IGZyYW1lQ29udGV4dC0+eE9mZnNldCk7CiAgICAgaWYgKGZyYW1lUmVjdC5tYXhZKCkgPiBzaXpl
KCkuaGVpZ2h0KCkpCi0gICAgICAgIGZyYW1lUmVjdC5zZXRIZWlnaHQoc2l6ZSgpLmhlaWdodCgp
IC0gZnJhbWVSZWFkZXItPnlfb2Zmc2V0KTsKKyAgICAgICAgZnJhbWVSZWN0LnNldEhlaWdodChz
aXplKCkuaGVpZ2h0KCkgLSBmcmFtZUNvbnRleHQtPnlPZmZzZXQpOwogCiAgICAgSW1hZ2VGcmFt
ZSogY29uc3QgYnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKICAgICBp
bnQgbGVmdCA9IHVwcGVyQm91bmRTY2FsZWRYKGZyYW1lUmVjdC54KCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFn
ZVJlYWRlci5jcHAKaW5kZXggNzQxNGU5ODE4NTkwN2MwZjY4N2IzN2M5MzUwNTMxOTI3ZmZiODgz
Yi4uMzJhYTM4OTFhZDcwZTgxNTM4Y2Q4ZGVmMDM1NDliN2Y2YWM0YmJjNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lG
SW1hZ2VSZWFkZXIuY3BwCkBAIC04MSw4NjQgKzgxLDgyMCBAQCBtYWlsaW5nIGFkZHJlc3MuCiAK
IHVzaW5nIFdlYkNvcmU6OkdJRkltYWdlRGVjb2RlcjsKIAotLy8gRGVmaW5lIHRoZSBNb3ppbGxh
IG1hY3JvIHNldHVwIHNvIHRoYXQgd2UgY2FuIGxlYXZlIHRoZSBtYWNyb3MgYWxvbmUuCi0jZGVm
aW5lIFBSX0JFR0lOX01BQ1JPICBkbyB7Ci0jZGVmaW5lIFBSX0VORF9NQUNSTyAgICB9IHdoaWxl
ICgwKQotCi0vKgotICogR0VUTihuLCBzKSByZXF1ZXN0cyBhdCBsZWFzdCAnbicgYnl0ZXMgYXZh
aWxhYmxlIGZyb20gJ3EnLCBhdCBzdGFydCBvZiBzdGF0ZSAncycKLSAqCi0gKiBOb3RlLCB0aGUg
aG9sZCB3aWxsIG5ldmVyIG5lZWQgdG8gYmUgYmlnZ2VyIHRoYW4gMjU2IGJ5dGVzIHRvIGdhdGhl
ciB1cCBpbiB0aGUgaG9sZCwKLSAqIGFzIGVhY2ggR0lGIGJsb2NrIChleGNlcHQgY29sb3JtYXBz
KSBjYW4gbmV2ZXIgYmUgYmlnZ2VyIHRoYW4gMjU2IGJ5dGVzLgotICogQ29sb3JtYXBzIGFyZSBk
aXJlY3RseSBjb3BpZWQgaW4gdGhlIHJlc3AuIGdsb2JhbF9jb2xvcm1hcCBvciBkeW5hbWljYWxs
eSBhbGxvY2F0ZWQgbG9jYWxfY29sb3JtYXAuCi0gKiBTbyBhIGZpeGVkIGJ1ZmZlciBpbiBHSUZJ
bWFnZVJlYWRlciBpcyBnb29kIGVub3VnaC4KLSAqIFRoaXMgYnVmZmVyIGlzIG9ubHkgbmVlZGVk
IHRvIGNvcHkgbGVmdC1vdmVyIGRhdGEgZnJvbSBvbmUgR2lmV3JpdGUgY2FsbCB0byB0aGUgbmV4
dAotICovCi0jZGVmaW5lIEdFVE4obixzKSAgICAgICAgICAgICAgICAgICAgXAotICBQUl9CRUdJ
Tl9NQUNSTyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBieXRlc190b19jb25zdW1lID0gKG4p
OyAgICAgIFwKLSAgICBzdGF0ZSA9IChzKTsgICAgICAgICAgICAgICAgIFwKLSAgUFJfRU5EX01B
Q1JPCi0KLS8qIEdldCBhIDE2LWJpdCB2YWx1ZSBzdG9yZWQgaW4gbGl0dGxlLWVuZGlhbiBmb3Jt
YXQgKi8KKy8vIEdFVE4obiwgcykgcmVxdWVzdHMgYXQgbGVhc3QgJ24nIGJ5dGVzIGF2YWlsYWJs
ZSBmcm9tICdxJywgYXQgc3RhcnQgb2Ygc3RhdGUgJ3MnLgorLy8KKy8vIE5vdGUsIHRoZSBob2xk
IHdpbGwgbmV2ZXIgbmVlZCB0byBiZSBiaWdnZXIgdGhhbiAyNTYgYnl0ZXMgdG8gZ2F0aGVyIHVw
IGluIHRoZSBob2xkLAorLy8gYXMgZWFjaCBHSUYgYmxvY2sgKGV4Y2VwdCBjb2xvcm1hcHMpIGNh
biBuZXZlciBiZSBiaWdnZXIgdGhhbiAyNTYgYnl0ZXMuCisvLyBDb2xvcm1hcHMgYXJlIGRpcmVj
dGx5IGNvcGllZCBpbiB0aGUgcmVzcC4gZ2xvYmFsX2NvbG9ybWFwIG9yIGR5bmFtaWNhbGx5IGFs
bG9jYXRlZCBsb2NhbF9jb2xvcm1hcC4KKy8vIFNvIGEgZml4ZWQgYnVmZmVyIGluIEdJRkltYWdl
UmVhZGVyIGlzIGdvb2QgZW5vdWdoLgorLy8gVGhpcyBidWZmZXIgaXMgb25seSBuZWVkZWQgdG8g
Y29weSBsZWZ0LW92ZXIgZGF0YSBmcm9tIG9uZSBHaWZXcml0ZSBjYWxsIHRvIHRoZSBuZXh0Cisj
ZGVmaW5lIEdFVE4obiwgcykgXAorICAgIGRvIHsgXAorICAgICAgICBtX2J5dGVzVG9Db25zdW1l
ID0gKG4pOyBcCisgICAgICAgIG1fc3RhdGUgPSAocyk7IFwKKyAgICB9IFwKKyAgICB3aGlsZSAo
MCkKKworLy8gR2V0IGEgMTYtYml0IHZhbHVlIHN0b3JlZCBpbiBsaXR0bGUtZW5kaWFuIGZvcm1h
dC4KICNkZWZpbmUgR0VUSU5UMTYocCkgICAoKHApWzFdPDw4fChwKVswXSkKIAotLy8qKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioKIC8vIFNlbmQgdGhlIGRhdGEgdG8gdGhlIGRpc3BsYXkgZnJvbnQtZW5k
LgotYm9vbCBHSUZJbWFnZVJlYWRlcjo6b3V0cHV0X3JvdygpCitib29sIEdJRkltYWdlUmVhZGVy
OjpvdXRwdXRSb3coKQogewotICBHSUZGcmFtZVJlYWRlciogZ3MgPSBmcmFtZV9yZWFkZXI7Ci0K
LSAgaW50IGRyb3dfc3RhcnQsIGRyb3dfZW5kOwotCi0gIGRyb3dfc3RhcnQgPSBkcm93X2VuZCA9
IGdzLT5pcm93OwotCi0gIC8qCi0gICAqIEhhZWJlcmxpLWluc3BpcmVkIGhhY2sgZm9yIGludGVy
bGFjZWQgR0lGczogUmVwbGljYXRlIGxpbmVzIHdoaWxlCi0gICAqIGRpc3BsYXlpbmcgdG8gZGlt
aW5pc2ggdGhlICJ2ZW5ldGlhbi1ibGluZCIgZWZmZWN0IGFzIHRoZSBpbWFnZSBpcwotICAgKiBs
b2FkZWQuIEFkanVzdCBwaXhlbCB2ZXJ0aWNhbCBwb3NpdGlvbnMgdG8gYXZvaWQgdGhlIGFwcGVh
cmFuY2Ugb2YgdGhlCi0gICAqIGltYWdlIGNyYXdsaW5nIHVwIHRoZSBzY3JlZW4gYXMgc3VjY2Vz
c2l2ZSBwYXNzZXMgYXJlIGRyYXduLgotICAgKi8KLSAgaWYgKGdzLT5wcm9ncmVzc2l2ZV9kaXNw
bGF5ICYmIGdzLT5pbnRlcmxhY2VkICYmIGdzLT5pcGFzcyA8IDQpIHsKLSAgICB1bnNpZ25lZCBy
b3dfZHVwID0gMCwgcm93X3NoaWZ0ID0gMDsKLQotICAgIHN3aXRjaCAoZ3MtPmlwYXNzKSB7Ci0g
ICAgY2FzZSAxOgotICAgICAgcm93X2R1cCA9IDc7Ci0gICAgICByb3dfc2hpZnQgPSAzOwotICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgcm93X2R1cCA9IDM7Ci0gICAgICByb3dfc2hp
ZnQgPSAxOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAzOgotICAgICAgcm93X2R1cCA9IDE7Ci0g
ICAgICByb3dfc2hpZnQgPSAwOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIGJy
ZWFrOwotICAgIH0KKyAgICBpbnQgZHJvd1N0YXJ0ID0gbV9mcmFtZUNvbnRleHQtPmlyb3c7Cisg
ICAgaW50IGRyb3dFbmQgPSBtX2ZyYW1lQ29udGV4dC0+aXJvdzsKKworICAgIC8vIEhhZWJlcmxp
LWluc3BpcmVkIGhhY2sgZm9yIGludGVybGFjZWQgR0lGczogUmVwbGljYXRlIGxpbmVzIHdoaWxl
CisgICAgLy8gZGlzcGxheWluZyB0byBkaW1pbmlzaCB0aGUgInZlbmV0aWFuLWJsaW5kIiBlZmZl
Y3QgYXMgdGhlIGltYWdlIGlzCisgICAgLy8gbG9hZGVkLiBBZGp1c3QgcGl4ZWwgdmVydGljYWwg
cG9zaXRpb25zIHRvIGF2b2lkIHRoZSBhcHBlYXJhbmNlIG9mIHRoZQorICAgIC8vIGltYWdlIGNy
YXdsaW5nIHVwIHRoZSBzY3JlZW4gYXMgc3VjY2Vzc2l2ZSBwYXNzZXMgYXJlIGRyYXduLgorICAg
IGlmIChtX2ZyYW1lQ29udGV4dC0+cHJvZ3Jlc3NpdmVEaXNwbGF5ICYmIG1fZnJhbWVDb250ZXh0
LT5pbnRlcmxhY2VkICYmIG1fZnJhbWVDb250ZXh0LT5pcGFzcyA8IDQpIHsKKyAgICAgICAgdW5z
aWduZWQgcm93RHVwID0gMDsKKyAgICAgICAgdW5zaWduZWQgcm93U2hpZnQgPSAwOworCisgICAg
ICAgIHN3aXRjaCAobV9mcmFtZUNvbnRleHQtPmlwYXNzKSB7CisgICAgICAgIGNhc2UgMToKKyAg
ICAgICAgICAgIHJvd0R1cCA9IDc7CisgICAgICAgICAgICByb3dTaGlmdCA9IDM7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgcm93RHVwID0gMzsKKyAg
ICAgICAgICAgIHJvd1NoaWZ0ID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IDM6CisgICAgICAgICAgICByb3dEdXAgPSAxOworICAgICAgICAgICAgcm93U2hpZnQgPSAwOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQogCi0gICAgZHJvd19zdGFydCAtPSByb3dfc2hpZnQ7Ci0gICAgZHJvd19lbmQg
PSBkcm93X3N0YXJ0ICsgcm93X2R1cDsKKyAgICAgICAgZHJvd1N0YXJ0IC09IHJvd1NoaWZ0Owor
ICAgICAgICBkcm93RW5kID0gZHJvd1N0YXJ0ICsgcm93RHVwOwogCi0gICAgLyogRXh0ZW5kIGlm
IGJvdHRvbSBlZGdlIGlzbid0IGNvdmVyZWQgYmVjYXVzZSBvZiB0aGUgc2hpZnQgdXB3YXJkLiAq
LwotICAgIGlmICgoKGdzLT5oZWlnaHQgLSAxKSAtIGRyb3dfZW5kKSA8PSByb3dfc2hpZnQpCi0g
ICAgICBkcm93X2VuZCA9IGdzLT5oZWlnaHQgLSAxOworICAgICAgICAvLyBFeHRlbmQgaWYgYm90
dG9tIGVkZ2UgaXNuJ3QgY292ZXJlZCBiZWNhdXNlIG9mIHRoZSBzaGlmdCB1cHdhcmQuCisgICAg
ICAgIGlmICgoKG1fZnJhbWVDb250ZXh0LT5oZWlnaHQgLSAxKSAtIGRyb3dFbmQpIDw9IHJvd1No
aWZ0KQorICAgICAgICAgICAgZHJvd0VuZCA9IG1fZnJhbWVDb250ZXh0LT5oZWlnaHQgLSAxOwog
Ci0gICAgLyogQ2xhbXAgZmlyc3QgYW5kIGxhc3Qgcm93cyB0byB1cHBlciBhbmQgbG93ZXIgZWRn
ZSBvZiBpbWFnZS4gKi8KLSAgICBpZiAoZHJvd19zdGFydCA8IDApCi0gICAgICBkcm93X3N0YXJ0
ID0gMDsKLSAgICBpZiAoKHVuc2lnbmVkKWRyb3dfZW5kID49IGdzLT5oZWlnaHQpCi0gICAgICBk
cm93X2VuZCA9IGdzLT5oZWlnaHQgLSAxOwotICB9CisgICAgICAgIC8vIENsYW1wIGZpcnN0IGFu
ZCBsYXN0IHJvd3MgdG8gdXBwZXIgYW5kIGxvd2VyIGVkZ2Ugb2YgaW1hZ2UuCisgICAgICAgIGlm
IChkcm93U3RhcnQgPCAwKQorICAgICAgICAgICAgZHJvd1N0YXJ0ID0gMDsKIAotICAvKiBQcm90
ZWN0IGFnYWluc3QgdG9vIG11Y2ggaW1hZ2UgZGF0YSAqLwotICBpZiAoKHVuc2lnbmVkKWRyb3df
c3RhcnQgPj0gZ3MtPmhlaWdodCkKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCh1bnNp
Z25lZClkcm93RW5kID49IG1fZnJhbWVDb250ZXh0LT5oZWlnaHQpCisgICAgICAgICAgICBkcm93
RW5kID0gbV9mcmFtZUNvbnRleHQtPmhlaWdodCAtIDE7CisgICAgfQogCi0gIC8vIENBTExCQUNL
OiBMZXQgdGhlIGNsaWVudCBrbm93IHdlIGhhdmUgZGVjb2RlZCBhIHJvdy4KLSAgaWYgKGNsaWVu
dHB0ciAmJiBmcmFtZV9yZWFkZXIgJiYKLSAgICAgICFjbGllbnRwdHItPmhhdmVEZWNvZGVkUm93
KGltYWdlc19jb3VudCAtIDEsIGZyYW1lX3JlYWRlci0+cm93YnVmLCBmcmFtZV9yZWFkZXItPnJv
d2VuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyb3dfc3RhcnQsIGRyb3df
ZW5kIC0gZHJvd19zdGFydCArIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
cy0+cHJvZ3Jlc3NpdmVfZGlzcGxheSAmJiBncy0+aW50ZXJsYWNlZCAmJiBncy0+aXBhc3MgPiAx
KSkKLSAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gUHJvdGVjdCBhZ2FpbnN0IHRvbyBtdWNoIGlt
YWdlIGRhdGEuCisgICAgaWYgKCh1bnNpZ25lZClkcm93U3RhcnQgPj0gbV9mcmFtZUNvbnRleHQt
PmhlaWdodCkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgZ3MtPnJvd3AgPSBncy0+cm93YnVm
OworICAgIC8vIENBTExCQUNLOiBMZXQgdGhlIGNsaWVudCBrbm93IHdlIGhhdmUgZGVjb2RlZCBh
IHJvdy4KKyAgICBpZiAobV9jbGllbnQgJiYgbV9mcmFtZUNvbnRleHQKKyAgICAgICAgJiYgIW1f
Y2xpZW50LT5oYXZlRGVjb2RlZFJvdyhtX2ltYWdlc0NvdW50IC0gMSwgbV9mcmFtZUNvbnRleHQt
PnJvd2J1ZiwgbV9mcmFtZUNvbnRleHQtPnJvd2VuZCwKKyAgICAgICAgICAgIGRyb3dTdGFydCwg
ZHJvd0VuZCAtIGRyb3dTdGFydCArIDEsIG1fZnJhbWVDb250ZXh0LT5wcm9ncmVzc2l2ZURpc3Bs
YXkgJiYgbV9mcmFtZUNvbnRleHQtPmludGVybGFjZWQgJiYgbV9mcmFtZUNvbnRleHQtPmlwYXNz
ID4gMSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICBpZiAoIWdzLT5pbnRlcmxhY2VkKQot
ICAgIGdzLT5pcm93Kys7Ci0gIGVsc2UgewotICAgIGRvIHsKLSAgICAgIHN3aXRjaCAoZ3MtPmlw
YXNzKQotICAgICAgewotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgZ3MtPmlyb3cgKz0gODsK
LSAgICAgICAgICBpZiAoZ3MtPmlyb3cgPj0gZ3MtPmhlaWdodCkgewotICAgICAgICAgICAgZ3Mt
PmlwYXNzKys7Ci0gICAgICAgICAgICBncy0+aXJvdyA9IDQ7Ci0gICAgICAgICAgfQotICAgICAg
ICAgIGJyZWFrOworICAgIG1fZnJhbWVDb250ZXh0LT5yb3dwID0gbV9mcmFtZUNvbnRleHQtPnJv
d2J1ZjsKKworICAgIGlmICghbV9mcmFtZUNvbnRleHQtPmludGVybGFjZWQpCisgICAgICAgIG1f
ZnJhbWVDb250ZXh0LT5pcm93Kys7CisgICAgZWxzZSB7CisgICAgICAgIGRvIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAobV9mcmFtZUNvbnRleHQtPmlwYXNzKSB7CisgICAgICAgICAgICBjYXNlIDE6
CisgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlyb3cgKz0gODsKKyAgICAgICAgICAg
ICAgICBpZiAobV9mcmFtZUNvbnRleHQtPmlyb3cgPj0gbV9mcmFtZUNvbnRleHQtPmhlaWdodCkg
eworICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXBhc3MrKzsKKyAgICAgICAg
ICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlyb3cgPSA0OworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAg
ICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcm93ICs9IDg7CisgICAgICAgICAgICAgICAgaWYgKG1f
ZnJhbWVDb250ZXh0LT5pcm93ID49IG1fZnJhbWVDb250ZXh0LT5oZWlnaHQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlwYXNzKys7CisgICAgICAgICAgICAgICAgICAg
IG1fZnJhbWVDb250ZXh0LT5pcm93ID0gMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgICAgICBtX2Zy
YW1lQ29udGV4dC0+aXJvdyArPSA0OworICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4
dC0+aXJvdyA+PSBtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAg
IG1fZnJhbWVDb250ZXh0LT5pcGFzcysrOworICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29u
dGV4dC0+aXJvdyA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQt
Pmlyb3cgKz0gMjsKKyAgICAgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQtPmlyb3cgPj0g
bV9mcmFtZUNvbnRleHQtPmhlaWdodCkgeworICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29u
dGV4dC0+aXBhc3MrKzsKKyAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlyb3cg
PSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSB3aGlsZSAobV9mcmFtZUNvbnRleHQtPmlyb3cgPiAobV9mcmFtZUNvbnRleHQtPmhl
aWdodCAtIDEpKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CiAKLSAgICAgICAgY2FzZSAy
OgotICAgICAgICAgIGdzLT5pcm93ICs9IDg7Ci0gICAgICAgICAgaWYgKGdzLT5pcm93ID49IGdz
LT5oZWlnaHQpIHsKLSAgICAgICAgICAgIGdzLT5pcGFzcysrOwotICAgICAgICAgICAgZ3MtPmly
b3cgPSAyOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKKy8vIFBlcmZvcm0gTGVtcGVs
LVppdi1XZWxjaCBkZWNvZGluZy4KK2Jvb2wgR0lGSW1hZ2VSZWFkZXI6OmRvTFpXKGNvbnN0IHVu
c2lnbmVkIGNoYXIgKnEpCit7CisgICAgaWYgKCFtX2ZyYW1lQ29udGV4dCkKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAKLSAgICAgICAgY2FzZSAzOgotICAgICAgICAgIGdzLT5pcm93ICs9IDQ7Ci0g
ICAgICAgICAgaWYgKGdzLT5pcm93ID49IGdzLT5oZWlnaHQpIHsKLSAgICAgICAgICAgIGdzLT5p
cGFzcysrOwotICAgICAgICAgICAgZ3MtPmlyb3cgPSAxOwotICAgICAgICAgIH0KLSAgICAgICAg
ICBicmVhazsKLQotICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgZ3MtPmlyb3cgKz0gMjsKLSAg
ICAgICAgICBpZiAoZ3MtPmlyb3cgPj0gZ3MtPmhlaWdodCl7Ci0gICAgICAgICAgICBncy0+aXBh
c3MrKzsKLSAgICAgICAgICAgIGdzLT5pcm93ID0gMDsKLSAgICAgICAgICB9Ci0gICAgICAgICAg
YnJlYWs7CisgICAgaW50IGNvZGU7CisgICAgaW50IGluY29kZTsKKyAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyICpjaDsKKworICAgIC8vIENvcHkgYWxsIHRoZSBkZWNvZGVyIHN0YXRlIHZhcmlhYmxl
cyBpbnRvIGxvY2FscyBzbyB0aGUgY29tcGlsZXIKKyAgICAvLyB3b24ndCB3b3JyeSBhYm91dCB0
aGVtIGJlaW5nIGFsaWFzZWQuIFRoZSBsb2NhbHMgd2lsbCBiZSBob21lZAorICAgIC8vIGJhY2sg
aW50byB0aGUgR0lGIGRlY29kZXIgc3RydWN0dXJlIHdoZW4gd2UgZXhpdC4KKyAgICBpbnQgYXZh
aWwgPSBtX2ZyYW1lQ29udGV4dC0+YXZhaWw7CisgICAgaW50IGJpdHMgPSBtX2ZyYW1lQ29udGV4
dC0+Yml0czsKKyAgICBpbnQgY250ID0gbV9jb3VudDsKKyAgICBpbnQgY29kZXNpemUgPSBtX2Zy
YW1lQ29udGV4dC0+Y29kZXNpemU7CisgICAgaW50IGNvZGVtYXNrID0gbV9mcmFtZUNvbnRleHQt
PmNvZGVtYXNrOworICAgIGludCBvbGRjb2RlID0gbV9mcmFtZUNvbnRleHQtPm9sZGNvZGU7Cisg
ICAgaW50IGNsZWFyQ29kZSA9IG1fZnJhbWVDb250ZXh0LT5jbGVhckNvZGU7CisgICAgdW5zaWdu
ZWQgY2hhciBmaXJzdGNoYXIgPSBtX2ZyYW1lQ29udGV4dC0+Zmlyc3RjaGFyOworICAgIGludCBk
YXR1bSA9IG1fZnJhbWVDb250ZXh0LT5kYXR1bTsKKworICAgIGlmICghbV9mcmFtZUNvbnRleHQt
PnByZWZpeCkgeworICAgICAgICBtX2ZyYW1lQ29udGV4dC0+cHJlZml4ID0gbmV3IHVuc2lnbmVk
IHNob3J0W01BWF9CSVRTXTsKKyAgICAgICAgbWVtc2V0KG1fZnJhbWVDb250ZXh0LT5wcmVmaXgs
IDAsIE1BWF9CSVRTICogc2l6ZW9mKHNob3J0KSk7CisgICAgfQogCi0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfSB3aGlsZSAoZ3MtPmlyb3cgPiAoZ3Mt
PmhlaWdodCAtIDEpKTsKLSAgfQorICAgIHVuc2lnbmVkIHNob3J0ICpwcmVmaXggPSBtX2ZyYW1l
Q29udGV4dC0+cHJlZml4OworICAgIHVuc2lnbmVkIGNoYXIgKnN0YWNrcCA9IG1fZnJhbWVDb250
ZXh0LT5zdGFja3A7CisgICAgdW5zaWduZWQgY2hhciAqc3VmZml4ID0gbV9mcmFtZUNvbnRleHQt
PnN1ZmZpeDsKKyAgICB1bnNpZ25lZCBjaGFyICpzdGFjayA9IG1fZnJhbWVDb250ZXh0LT5zdGFj
azsKKyAgICB1bnNpZ25lZCBjaGFyICpyb3dwID0gbV9mcmFtZUNvbnRleHQtPnJvd3A7CisgICAg
dW5zaWduZWQgY2hhciAqcm93ZW5kID0gbV9mcmFtZUNvbnRleHQtPnJvd2VuZDsKKyAgICB1bnNp
Z25lZCByb3dzUmVtYWluaW5nID0gbV9mcmFtZUNvbnRleHQtPnJvd3NSZW1haW5pbmc7CisKKyAg
ICBpZiAocm93cCA9PSByb3dlbmQpCisgICAgICAgIHJldHVybiB0cnVlOwogCi0gIHJldHVybiB0
cnVlOworI2RlZmluZSBPVVRQVVRfUk9XIFwKKyAgICBkbyB7IFwKKyAgICAgICAgaWYgKCFvdXRw
dXRSb3coKSkgXAorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyBcCisgICAgICAgIHJvd3NSZW1h
aW5pbmctLTsgXAorICAgICAgICByb3dwID0gbV9mcmFtZUNvbnRleHQtPnJvd3A7IFwKKyAgICAg
ICAgaWYgKCFyb3dzUmVtYWluaW5nKSBcCisgICAgICAgICAgICBnb3RvIEVORDsgXAorICAgIH0g
d2hpbGUgKDApCisKKyAgICBmb3IgKGNoID0gcTsgY250LS0gPiAwOyBjaCsrKSB7CisgICAgICAg
IC8vIEZlZWQgdGhlIG5leHQgYnl0ZSBpbnRvIHRoZSBkZWNvZGVyJ3MgMzItYml0IGlucHV0IGJ1
ZmZlci4KKyAgICAgICAgZGF0dW0gKz0gKChpbnQpICpjaCkgPDwgYml0czsKKyAgICAgICAgYml0
cyArPSA4OworCisgICAgICAgIC8vIENoZWNrIGZvciB1bmRlcmZsb3cgb2YgZGVjb2RlcidzIDMy
LWJpdCBpbnB1dCBidWZmZXIuCisgICAgICAgIHdoaWxlIChiaXRzID49IGNvZGVzaXplKSB7Cisg
ICAgICAgICAgICAvLyBHZXQgdGhlIGxlYWRpbmcgdmFyaWFibGUtbGVuZ3RoIHN5bWJvbCBmcm9t
IHRoZSBkYXRhIHN0cmVhbS4KKyAgICAgICAgICAgIGNvZGUgPSBkYXR1bSAmIGNvZGVtYXNrOwor
ICAgICAgICAgICAgZGF0dW0gPj49IGNvZGVzaXplOworICAgICAgICAgICAgYml0cyAtPSBjb2Rl
c2l6ZTsKKworICAgICAgICAgICAgLy8gUmVzZXQgdGhlIGRpY3Rpb25hcnkgdG8gaXRzIG9yaWdp
bmFsIHN0YXRlLCBpZiByZXF1ZXN0ZWQuCisgICAgICAgICAgICBpZiAoY29kZSA9PSBjbGVhckNv
ZGUpIHsKKyAgICAgICAgICAgICAgICBjb2Rlc2l6ZSA9IG1fZnJhbWVDb250ZXh0LT5kYXRhc2l6
ZSArIDE7CisgICAgICAgICAgICAgICAgY29kZW1hc2sgPSAoMSA8PCBjb2Rlc2l6ZSkgLSAxOwor
ICAgICAgICAgICAgICAgIGF2YWlsID0gY2xlYXJDb2RlICsgMjsKKyAgICAgICAgICAgICAgICBv
bGRjb2RlID0gLTE7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIENoZWNrIGZvciBleHBsaWNpdCBlbmQtb2Ytc3RyZWFtIGNvZGUuCisg
ICAgICAgICAgICBpZiAoY29kZSA9PSAoY2xlYXJDb2RlICsgMSkpIHsKKyAgICAgICAgICAgICAg
ICAvLyBlbmQtb2Ytc3RyZWFtIHNob3VsZCBvbmx5IGFwcGVhciBhZnRlciBhbGwgaW1hZ2UgZGF0
YS4KKyAgICAgICAgICAgICAgICBpZiAoIXJvd3NSZW1haW5pbmcpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVudCA/IG1fY2xp
ZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAob2xkY29kZSA9PSAtMSkgeworICAgICAgICAgICAgICAgICpyb3dwKysgPSBzdWZmaXhbY29k
ZV07CisgICAgICAgICAgICAgICAgaWYgKHJvd3AgPT0gcm93ZW5kKQorICAgICAgICAgICAgICAg
ICAgICBPVVRQVVRfUk9XOworCisgICAgICAgICAgICAgICAgZmlyc3RjaGFyID0gb2xkY29kZSA9
IGNvZGU7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGluY29kZSA9IGNvZGU7CisgICAgICAgICAgICBpZiAoY29kZSA+PSBhdmFpbCkgewor
ICAgICAgICAgICAgICAgICpzdGFja3ArKyA9IGZpcnN0Y2hhcjsKKyAgICAgICAgICAgICAgICBj
b2RlID0gb2xkY29kZTsKKworICAgICAgICAgICAgICAgIGlmIChzdGFja3AgPT0gc3RhY2sgKyBN
QVhfQklUUykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQt
PnNldEZhaWxlZCgpIDogZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdoaWxl
IChjb2RlID49IGNsZWFyQ29kZSkgeworICAgICAgICAgICAgICAgIGlmIChjb2RlID49IE1BWF9C
SVRTIHx8IGNvZGUgPT0gcHJlZml4W2NvZGVdKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bV9jbGllbnQgPyBtX2NsaWVudC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKKworICAgICAgICAgICAg
ICAgIC8vIEV2ZW4gdGhvdWdoIHN1ZmZpeFtdIG9ubHkgaG9sZHMgY2hhcmFjdGVycyB0aHJvdWdo
IHN1ZmZpeFthdmFpbCAtIDFdLAorICAgICAgICAgICAgICAgIC8vIGFsbG93aW5nIGNvZGUgPj0g
YXZhaWwgaGVyZSBsZXRzIHVzIGJlIG1vcmUgdG9sZXJhbnQgb2YgbWFsZm9ybWVkCisgICAgICAg
ICAgICAgICAgLy8gZGF0YS4gQXMgbG9uZyBhcyBjb2RlIDwgTUFYX0JJVFMsIHRoZSBvbmx5IHJp
c2sgaXMgYSBnYXJibGVkIGltYWdlLAorICAgICAgICAgICAgICAgIC8vIHdoaWNoIGlzIG5vIHdv
cnNlIHRoYW4gcmVmdXNpbmcgdG8gZGlzcGxheSBpdC4KKyAgICAgICAgICAgICAgICAqc3RhY2tw
KysgPSBzdWZmaXhbY29kZV07CisgICAgICAgICAgICAgICAgY29kZSA9IHByZWZpeFtjb2RlXTsK
KworICAgICAgICAgICAgICAgIGlmIChzdGFja3AgPT0gc3RhY2sgKyBNQVhfQklUUykKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQtPnNldEZhaWxlZCgpIDog
ZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpzdGFja3ArKyA9IGZpcnN0Y2hh
ciA9IHN1ZmZpeFtjb2RlXTsKKworICAgICAgICAgICAgLy8gRGVmaW5lIGEgbmV3IGNvZGV3b3Jk
IGluIHRoZSBkaWN0aW9uYXJ5LgorICAgICAgICAgICAgaWYgKGF2YWlsIDwgNDA5NikgeworICAg
ICAgICAgICAgICAgIHByZWZpeFthdmFpbF0gPSBvbGRjb2RlOworICAgICAgICAgICAgICAgIHN1
ZmZpeFthdmFpbF0gPSBmaXJzdGNoYXI7CisgICAgICAgICAgICAgICAgYXZhaWwrKzsKKworICAg
ICAgICAgICAgICAgIC8vIElmIHdlJ3ZlIHVzZWQgdXAgYWxsIHRoZSBjb2Rld29yZHMgb2YgYSBn
aXZlbiBsZW5ndGgKKyAgICAgICAgICAgICAgICAvLyBpbmNyZWFzZSB0aGUgbGVuZ3RoIG9mIGNv
ZGV3b3JkcyBieSBvbmUgYml0LCBidXQgZG9uJ3QKKyAgICAgICAgICAgICAgICAvLyBleGNlZWQg
dGhlIHNwZWNpZmllZCBtYXhpbXVtIGNvZGV3b3JkIHNpemUgb2YgMTIgYml0cy4KKyAgICAgICAg
ICAgICAgICBpZiAoKCEoYXZhaWwgJiBjb2RlbWFzaykpICYmIChhdmFpbCA8IDQwOTYpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvZGVzaXplKys7CisgICAgICAgICAgICAgICAgICAgIGNvZGVt
YXNrICs9IGF2YWlsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIG9sZGNvZGUgPSBpbmNvZGU7CisKKyAgICAgICAgICAgIC8vIENvcHkgdGhlIGRlY29kZWQg
ZGF0YSBvdXQgdG8gdGhlIHNjYW5saW5lIGJ1ZmZlci4KKyAgICAgICAgICAgIGRvIHsKKyAgICAg
ICAgICAgICAgICAqcm93cCsrID0gKi0tc3RhY2twOworICAgICAgICAgICAgICAgIGlmIChyb3dw
ID09IHJvd2VuZCkKKyAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1JPVzsKKyAgICAgICAgICAg
IH0gd2hpbGUgKHN0YWNrcCA+IHN0YWNrKTsKKyAgICAgICAgfQorICAgIH0KKworRU5EOgorICAg
IC8vIEhvbWUgdGhlIGxvY2FsIGNvcGllcyBvZiB0aGUgR0lGIGRlY29kZXIgc3RhdGUgdmFyaWFi
bGVzLgorICAgIG1fZnJhbWVDb250ZXh0LT5hdmFpbCA9IGF2YWlsOworICAgIG1fZnJhbWVDb250
ZXh0LT5iaXRzID0gYml0czsKKyAgICBtX2ZyYW1lQ29udGV4dC0+Y29kZXNpemUgPSBjb2Rlc2l6
ZTsKKyAgICBtX2ZyYW1lQ29udGV4dC0+Y29kZW1hc2sgPSBjb2RlbWFzazsKKyAgICBtX2NvdW50
ID0gY250OworICAgIG1fZnJhbWVDb250ZXh0LT5vbGRjb2RlID0gb2xkY29kZTsKKyAgICBtX2Zy
YW1lQ29udGV4dC0+Zmlyc3RjaGFyID0gZmlyc3RjaGFyOworICAgIG1fZnJhbWVDb250ZXh0LT5k
YXR1bSA9IGRhdHVtOworICAgIG1fZnJhbWVDb250ZXh0LT5zdGFja3AgPSBzdGFja3A7CisgICAg
bV9mcmFtZUNvbnRleHQtPnJvd3AgPSByb3dwOworICAgIG1fZnJhbWVDb250ZXh0LT5yb3dzUmVt
YWluaW5nID0gcm93c1JlbWFpbmluZzsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotLy8qKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioKLS8qIFBlcmZvcm0gTGVtcGVsLVppdi1XZWxjaCBkZWNvZGluZyAqLwot
Ym9vbCBHSUZJbWFnZVJlYWRlcjo6ZG9fbHp3KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnEpCisKKy8v
IFByb2Nlc3MgZGF0YSBhcnJpdmluZyBmcm9tIHRoZSBzdHJlYW0gZm9yIHRoZSBnaWYgZGVjb2Rl
ci4KK2Jvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1
bnNpZ25lZCBsZW4sIEdJRkltYWdlRGVjb2Rlcjo6R0lGUXVlcnkgcXVlcnksIHVuc2lnbmVkIGhh
bHRBdEZyYW1lKQogewotICBHSUZGcmFtZVJlYWRlciogZ3MgPSBmcmFtZV9yZWFkZXI7Ci0gIGlm
ICghZ3MpCi0gICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFsZW4pIHsKKyAgICAgICAgLy8gTm8g
bmV3IGRhdGEgaGFzIGNvbWUgaW4gc2luY2UgdGhlIGxhc3QgY2FsbCwganVzdCBpZ25vcmUgdGhp
cyBjYWxsLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAKLSAgaW50IGNvZGU7Ci0gIGlu
dCBpbmNvZGU7Ci0gIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNoOwotICAKLSAgLyogQ29weSBhbGwg
dGhlIGRlY29kZXIgc3RhdGUgdmFyaWFibGVzIGludG8gbG9jYWxzIHNvIHRoZSBjb21waWxlcgot
ICAgKiB3b24ndCB3b3JyeSBhYm91dCB0aGVtIGJlaW5nIGFsaWFzZWQuICBUaGUgbG9jYWxzIHdp
bGwgYmUgaG9tZWQKLSAgICogYmFjayBpbnRvIHRoZSBHSUYgZGVjb2RlciBzdHJ1Y3R1cmUgd2hl
biB3ZSBleGl0LgotICAgKi8KLSAgaW50IGF2YWlsICAgICAgID0gZ3MtPmF2YWlsOwotICBpbnQg
Yml0cyAgICAgICAgPSBncy0+Yml0czsKLSAgaW50IGNudCAgICAgICAgID0gY291bnQ7Ci0gIGlu
dCBjb2Rlc2l6ZSAgICA9IGdzLT5jb2Rlc2l6ZTsKLSAgaW50IGNvZGVtYXNrICAgID0gZ3MtPmNv
ZGVtYXNrOwotICBpbnQgb2xkY29kZSAgICAgPSBncy0+b2xkY29kZTsKLSAgaW50IGNsZWFyX2Nv
ZGUgID0gZ3MtPmNsZWFyX2NvZGU7Ci0gIHVuc2lnbmVkIGNoYXIgZmlyc3RjaGFyID0gZ3MtPmZp
cnN0Y2hhcjsKLSAgaW50IGRhdHVtICAgICA9IGdzLT5kYXR1bTsKLQotICBpZiAoIWdzLT5wcmVm
aXgpIHsKLSAgICBncy0+cHJlZml4ID0gbmV3IHVuc2lnbmVkIHNob3J0W01BWF9CSVRTXTsKLSAg
ICBtZW1zZXQoZ3MtPnByZWZpeCwgMCwgTUFYX0JJVFMgKiBzaXplb2Yoc2hvcnQpKTsKLSAgfQot
Ci0gIHVuc2lnbmVkIHNob3J0ICpwcmVmaXggID0gZ3MtPnByZWZpeDsKLSAgdW5zaWduZWQgY2hh
ciAqc3RhY2twICAgPSBncy0+c3RhY2twOwotICB1bnNpZ25lZCBjaGFyICpzdWZmaXggICA9IGdz
LT5zdWZmaXg7Ci0gIHVuc2lnbmVkIGNoYXIgKnN0YWNrICAgID0gZ3MtPnN0YWNrOwotICB1bnNp
Z25lZCBjaGFyICpyb3dwICAgICA9IGdzLT5yb3dwOwotICB1bnNpZ25lZCBjaGFyICpyb3dlbmQg
ICA9IGdzLT5yb3dlbmQ7Ci0gIHVuc2lnbmVkIHJvd3NfcmVtYWluaW5nID0gZ3MtPnJvd3NfcmVt
YWluaW5nOwotCi0gIGlmIChyb3dwID09IHJvd2VuZCkKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBj
b25zdCB1bnNpZ25lZCBjaGFyICpxID0gYnVmOworCisgICAgLy8gQWRkIHdoYXQgd2UgaGF2ZSBz
byBmYXIgdG8gdGhlIGJsb2NrLgorICAgIC8vIElmIHByZXZpb3VzIGNhbGwgdG8gbWUgbGVmdCBz
b21ldGhpbmcgaW4gdGhlIGhvbGQgZmlyc3QgY29tcGxldGUgY3VycmVudCBibG9jaworICAgIC8v
IG9yIGlmIHdlIGFyZSBmaWxsaW5nIHRoZSBjb2xvcm1hcHMsIGZpcnN0IGNvbXBsZXRlIHRoZSBj
b2xvcm1hcC4KKyAgICB1bnNpZ25lZCBjaGFyKiBwID0gMDsKKyAgICBpZiAobV9zdGF0ZSA9PSBH
SUZHbG9iYWxDb2xvcm1hcCkKKyAgICAgICAgcCA9IG1fZ2xvYmFsQ29sb3JtYXA7CisgICAgZWxz
ZSBpZiAobV9zdGF0ZSA9PSBHSUZJbWFnZUNvbG9ybWFwKQorICAgICAgICBwID0gbV9mcmFtZUNv
bnRleHQgPyBtX2ZyYW1lQ29udGV4dC0+bG9jYWxDb2xvcm1hcCA6IDA7CisgICAgZWxzZSBpZiAo
bV9ieXRlc0luSG9sZCkKKyAgICAgICAgcCA9IG1faG9sZDsKKyAgICBlbHNlCisgICAgICAgIHAg
PSAwOworCisgICAgaWYgKHAgfHwgKG1fc3RhdGUgPT0gR0lGR2xvYmFsQ29sb3JtYXApIHx8ICht
X3N0YXRlID09IEdJRkltYWdlQ29sb3JtYXApKSB7CisgICAgICAgIC8vIEFkZCB3aGF0IHdlIGhh
dmUgc29mYXIgdG8gdGhlIGJsb2NrCisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IGxlbiA8IG1f
Ynl0ZXNUb0NvbnN1bWUgPyBsZW4gOiBtX2J5dGVzVG9Db25zdW1lOworICAgICAgICBpZiAocCkK
KyAgICAgICAgICAgIG1lbWNweShwICsgbV9ieXRlc0luSG9sZCwgYnVmLCBsZW5ndGgpOworCisg
ICAgICAgIGlmIChsZW5ndGggPCBtX2J5dGVzVG9Db25zdW1lKSB7CisgICAgICAgICAgICAvLyBO
b3QgZW5vdWdoIGluICdidWYnIHRvIGNvbXBsZXRlIGN1cnJlbnQgYmxvY2ssIGdldCBtb3JlCisg
ICAgICAgICAgICBtX2J5dGVzSW5Ib2xkICs9IGxlbmd0aDsKKyAgICAgICAgICAgIG1fYnl0ZXNU
b0NvbnN1bWUgLT0gbGVuZ3RoOworICAgICAgICAgICAgaWYgKG1fY2xpZW50KQorICAgICAgICAg
ICAgICAgIG1fY2xpZW50LT5kZWNvZGluZ0hhbHRlZCgwKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQogCi0jZGVmaW5lIE9VVFBVVF9ST1cgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgUFJfQkVHSU5fTUFDUk8gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBp
ZiAoIW91dHB1dF9yb3coKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgIHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICByb3dzX3JlbWFpbmluZy0t
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICByb3dwID0gZnJhbWVfcmVhZGVyLT5yb3dwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKCFyb3dzX3JlbWFpbmluZykgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBnb3RvIEVO
RDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIFBSX0VORF9NQUNSTwotCi0gIGZvciAoY2ggPSBxOyBjbnQtLSA+IDA7IGNoKyspCi0g
IHsKLSAgICAvKiBGZWVkIHRoZSBuZXh0IGJ5dGUgaW50byB0aGUgZGVjb2RlcidzIDMyLWJpdCBp
bnB1dCBidWZmZXIuICovCi0gICAgZGF0dW0gKz0gKChpbnQpICpjaCkgPDwgYml0czsKLSAgICBi
aXRzICs9IDg7Ci0KLSAgICAvKiBDaGVjayBmb3IgdW5kZXJmbG93IG9mIGRlY29kZXIncyAzMi1i
aXQgaW5wdXQgYnVmZmVyLiAqLwotICAgIHdoaWxlIChiaXRzID49IGNvZGVzaXplKQotICAgIHsK
LSAgICAgIC8qIEdldCB0aGUgbGVhZGluZyB2YXJpYWJsZS1sZW5ndGggc3ltYm9sIGZyb20gdGhl
IGRhdGEgc3RyZWFtICovCi0gICAgICBjb2RlID0gZGF0dW0gJiBjb2RlbWFzazsKLSAgICAgIGRh
dHVtID4+PSBjb2Rlc2l6ZTsKLSAgICAgIGJpdHMgLT0gY29kZXNpemU7Ci0KLSAgICAgIC8qIFJl
c2V0IHRoZSBkaWN0aW9uYXJ5IHRvIGl0cyBvcmlnaW5hbCBzdGF0ZSwgaWYgcmVxdWVzdGVkICov
Ci0gICAgICBpZiAoY29kZSA9PSBjbGVhcl9jb2RlKSB7Ci0gICAgICAgIGNvZGVzaXplID0gZ3Mt
PmRhdGFzaXplICsgMTsKLSAgICAgICAgY29kZW1hc2sgPSAoMSA8PCBjb2Rlc2l6ZSkgLSAxOwot
ICAgICAgICBhdmFpbCA9IGNsZWFyX2NvZGUgKyAyOwotICAgICAgICBvbGRjb2RlID0gLTE7Ci0g
ICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotCi0gICAgICAvKiBDaGVjayBmb3IgZXhwbGljaXQg
ZW5kLW9mLXN0cmVhbSBjb2RlICovCi0gICAgICBpZiAoY29kZSA9PSAoY2xlYXJfY29kZSArIDEp
KSB7Ci0gICAgICAgIC8qIGVuZC1vZi1zdHJlYW0gc2hvdWxkIG9ubHkgYXBwZWFyIGFmdGVyIGFs
bCBpbWFnZSBkYXRhICovCi0gICAgICAgIGlmICghcm93c19yZW1haW5pbmcpCi0gICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRwdHItPnNldEZh
aWxlZCgpIDogZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChvbGRjb2RlID09IC0xKSB7Ci0g
ICAgICAgICpyb3dwKysgPSBzdWZmaXhbY29kZV07Ci0gICAgICAgIGlmIChyb3dwID09IHJvd2Vu
ZCkKLSAgICAgICAgICBPVVRQVVRfUk9XOwotCi0gICAgICAgIGZpcnN0Y2hhciA9IG9sZGNvZGUg
PSBjb2RlOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgaW5jb2RlID0gY29k
ZTsKLSAgICAgIGlmIChjb2RlID49IGF2YWlsKSB7Ci0gICAgICAgICpzdGFja3ArKyA9IGZpcnN0
Y2hhcjsKLSAgICAgICAgY29kZSA9IG9sZGNvZGU7Ci0KLSAgICAgICAgaWYgKHN0YWNrcCA9PSBz
dGFjayArIE1BWF9CSVRTKQotICAgICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRwdHIt
PnNldEZhaWxlZCgpIDogZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIHdoaWxlIChjb2RlID49IGNs
ZWFyX2NvZGUpCi0gICAgICB7Ci0gICAgICAgIGlmIChjb2RlID49IE1BWF9CSVRTIHx8IGNvZGUg
PT0gcHJlZml4W2NvZGVdKQotICAgICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRwdHIt
PnNldEZhaWxlZCgpIDogZmFsc2U7Ci0KLSAgICAgICAgLy8gRXZlbiB0aG91Z2ggc3VmZml4W10g
b25seSBob2xkcyBjaGFyYWN0ZXJzIHRocm91Z2ggc3VmZml4W2F2YWlsIC0gMV0sCi0gICAgICAg
IC8vIGFsbG93aW5nIGNvZGUgPj0gYXZhaWwgaGVyZSBsZXRzIHVzIGJlIG1vcmUgdG9sZXJhbnQg
b2YgbWFsZm9ybWVkCi0gICAgICAgIC8vIGRhdGEuIEFzIGxvbmcgYXMgY29kZSA8IE1BWF9CSVRT
LCB0aGUgb25seSByaXNrIGlzIGEgZ2FyYmxlZCBpbWFnZSwKLSAgICAgICAgLy8gd2hpY2ggaXMg
bm8gd29yc2UgdGhhbiByZWZ1c2luZyB0byBkaXNwbGF5IGl0LgotICAgICAgICAqc3RhY2twKysg
PSBzdWZmaXhbY29kZV07Ci0gICAgICAgIGNvZGUgPSBwcmVmaXhbY29kZV07Ci0KLSAgICAgICAg
aWYgKHN0YWNrcCA9PSBzdGFjayArIE1BWF9CSVRTKQotICAgICAgICAgIHJldHVybiBjbGllbnRw
dHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgICpz
dGFja3ArKyA9IGZpcnN0Y2hhciA9IHN1ZmZpeFtjb2RlXTsKLQotICAgICAgLyogRGVmaW5lIGEg
bmV3IGNvZGV3b3JkIGluIHRoZSBkaWN0aW9uYXJ5LiAqLwotICAgICAgaWYgKGF2YWlsIDwgNDA5
NikgewotICAgICAgICBwcmVmaXhbYXZhaWxdID0gb2xkY29kZTsKLSAgICAgICAgc3VmZml4W2F2
YWlsXSA9IGZpcnN0Y2hhcjsKLSAgICAgICAgYXZhaWwrKzsKLQotICAgICAgICAvKiBJZiB3ZSd2
ZSB1c2VkIHVwIGFsbCB0aGUgY29kZXdvcmRzIG9mIGEgZ2l2ZW4gbGVuZ3RoCi0gICAgICAgICAq
IGluY3JlYXNlIHRoZSBsZW5ndGggb2YgY29kZXdvcmRzIGJ5IG9uZSBiaXQsIGJ1dCBkb24ndAot
ICAgICAgICAgKiBleGNlZWQgdGhlIHNwZWNpZmllZCBtYXhpbXVtIGNvZGV3b3JkIHNpemUgb2Yg
MTIgYml0cy4KLSAgICAgICAgICovCi0gICAgICAgIGlmICgoKGF2YWlsICYgY29kZW1hc2spID09
IDApICYmIChhdmFpbCA8IDQwOTYpKSB7Ci0gICAgICAgICAgY29kZXNpemUrKzsKLSAgICAgICAg
ICBjb2RlbWFzayArPSBhdmFpbDsKKyAgICAgICAgLy8gUmVzZXQgaG9sZCBidWZmZXIgY291bnQK
KyAgICAgICAgbV9ieXRlc0luSG9sZCA9IDA7CisKKyAgICAgICAgLy8gUG9pbnQgJ3EnIHRvIGNv
bXBsZXRlIGJsb2NrIGluIGhvbGQgKG9yIGluIGNvbG9ybWFwKQorICAgICAgICBxID0gcDsKKyAg
ICB9CisKKyAgICAvLyBJbnZhcmlhbnQ6CisgICAgLy8gICAgJ3EnIGlzIHN0YXJ0IG9mIGN1cnJl
bnQgdG8gYmUgcHJvY2Vzc2VkIGJsb2NrIChob2xkLCBjb2xvcm1hcCBvciBidWYpCisgICAgLy8g
ICAgJ21fYnl0ZXNUb0NvbnN1bWUnIGlzIG51bWJlciBvZiBieXRlcyB0byBjb25zdW1lIGZyb20g
J2J1ZicKKyAgICAvLyAgICAnYnVmJyBwb2ludHMgdG8gdGhlIGJ5dGVzIHRvIGJlIGNvbnN1bWVk
IGZyb20gdGhlIGlucHV0IGJ1ZmZlcgorICAgIC8vICAgICdsZW4nIGlzIG51bWJlciBvZiBieXRl
cyBsZWZ0IGluIGlucHV0IGJ1ZmZlciBmcm9tIHBvc2l0aW9uICdidWYnLgorICAgIC8vICAgIEF0
IGVudHJhbmNlIG9mIHRoZSBmb3IgbG9vcCB3aWxsICdidWYnIHdpbGwgYmUgbW92ZWQgJ21fYnl0
ZXNUb0NvbnN1bWUnCisgICAgLy8gICAgdG8gcG9pbnQgdG8gbmV4dCBidWZmZXIsICdsZW4nIGlz
IGFkanVzdGVkIGFjY29yZGluZ2x5LgorICAgIC8vICAgIFNvIHRoYXQgbmV4dCByb3VuZCBpbiBm
b3IgbG9vcCwgcSBnZXRzIHBvaW50ZWQgdG8gdGhlIG5leHQgYnVmZmVyLgorICAgIGZvciAoO2xl
biA+PSBtX2J5dGVzVG9Db25zdW1lOyBxID0gYnVmKSB7CisgICAgICAgIC8vIEVhdCB0aGUgY3Vy
cmVudCBibG9jayBmcm9tIHRoZSBidWZmZXIsIHEga2VlcHMgcG9pbnRlZCBhdCBjdXJyZW50IGJs
b2NrLgorICAgICAgICBidWYgKz0gbV9ieXRlc1RvQ29uc3VtZTsKKyAgICAgICAgbGVuIC09IG1f
Ynl0ZXNUb0NvbnN1bWU7CisKKyAgICAgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgICAgIGNh
c2UgR0lGTFpXOgorICAgICAgICAgICAgaWYgKCFkb0xaVyhxKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7IC8vIElmIGRvTFpXKCkgZW5jb3VudGVyZWQgYW4gZXJyb3IsIGl0IGhhcyBh
bHJlYWR5IGNhbGxlZCBtX2NsaWVudC0+c2V0RmFpbGVkKCkuCisgICAgICAgICAgICBHRVROKDEs
IEdJRlN1YkJsb2NrKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgR0lGTFpX
U3RhcnQ6IHsKKyAgICAgICAgICAgIC8vIEluaXRpYWxpemUgTFpXIHBhcnNlci9kZWNvZGVyLgor
ICAgICAgICAgICAgaW50IGRhdGFzaXplID0gKnE7CisKKyAgICAgICAgICAgIC8vIFNpbmNlIHdl
IHVzZSBhIGNvZGVzaXplIG9mIDEgbW9yZSB0aGFuIHRoZSBkYXRhc2l6ZSwgd2UgbmVlZCB0byBl
bnN1cmUKKyAgICAgICAgICAgIC8vIHRoYXQgb3VyIGRhdGFzaXplIGlzIHN0cmljdGx5IGxlc3Mg
dGhhbiB0aGUgTUFYX0xaV19CSVRTIHZhbHVlICgxMikuCisgICAgICAgICAgICAvLyBUaGlzIHNl
dHMgdGhlIGxhcmdlc3QgcG9zc2libGUgY29kZW1hc2sgY29ycmVjdGx5IGF0IDQwOTUuCisgICAg
ICAgICAgICBpZiAoZGF0YXNpemUgPj0gTUFYX0xaV19CSVRTKQorICAgICAgICAgICAgICAgIHJl
dHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAgICAg
ICAgaW50IGNsZWFyQ29kZSA9IDEgPDwgZGF0YXNpemU7CisgICAgICAgICAgICBpZiAoY2xlYXJD
b2RlID49IE1BWF9CSVRTKQorICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVudCA/IG1fY2xp
ZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOworCisgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRl
eHQpIHsKKyAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+ZGF0YXNpemUgPSBkYXRhc2l6
ZTsKKyAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+Y2xlYXJDb2RlID0gY2xlYXJDb2Rl
OworICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5hdmFpbCA9IG1fZnJhbWVDb250ZXh0
LT5jbGVhckNvZGUgKyAyOworICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5vbGRjb2Rl
ID0gLTE7CisgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmNvZGVzaXplID0gbV9mcmFt
ZUNvbnRleHQtPmRhdGFzaXplICsgMTsKKyAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+
Y29kZW1hc2sgPSAoMSA8PCBtX2ZyYW1lQ29udGV4dC0+Y29kZXNpemUpIC0gMTsKKyAgICAgICAg
ICAgICAgICBtX2ZyYW1lQ29udGV4dC0+ZGF0dW0gPSBtX2ZyYW1lQ29udGV4dC0+Yml0cyA9IDA7
CisKKyAgICAgICAgICAgICAgICAvLyBJbml0IHRoZSB0YWJsZXMuCisgICAgICAgICAgICAgICAg
aWYgKCFtX2ZyYW1lQ29udGV4dC0+c3VmZml4KQorICAgICAgICAgICAgICAgICAgICBtX2ZyYW1l
Q29udGV4dC0+c3VmZml4ID0gbmV3IHVuc2lnbmVkIGNoYXJbTUFYX0JJVFNdOworCisgICAgICAg
ICAgICAgICAgLy8gQ2xlYXJpbmcgdGhlIHdob2xlIHN1ZmZpeCB0YWJsZSBsZXRzIHVzIGJlIG1v
cmUgdG9sZXJhbnQgb2YgYmFkIGRhdGEuCisgICAgICAgICAgICAgICAgbWVtc2V0KG1fZnJhbWVD
b250ZXh0LT5zdWZmaXgsIDAsIE1BWF9CSVRTKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG1fZnJhbWVDb250ZXh0LT5jbGVhckNvZGU7IGkrKykKKyAgICAgICAgICAgICAg
ICAgICAgbV9mcmFtZUNvbnRleHQtPnN1ZmZpeFtpXSA9IGk7CisKKyAgICAgICAgICAgICAgICBp
ZiAoIW1fZnJhbWVDb250ZXh0LT5zdGFjaykKKyAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNv
bnRleHQtPnN0YWNrID0gbmV3IHVuc2lnbmVkIGNoYXJbTUFYX0JJVFNdOworICAgICAgICAgICAg
ICAgIG1fZnJhbWVDb250ZXh0LT5zdGFja3AgPSBtX2ZyYW1lQ29udGV4dC0+c3RhY2s7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIEdFVE4oMSwgR0lGU3ViQmxvY2spOworICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgIH0KLSAgICAgIG9sZGNvZGUgPSBpbmNvZGU7Ci0K
LSAgICAgICAgLyogQ29weSB0aGUgZGVjb2RlZCBkYXRhIG91dCB0byB0aGUgc2NhbmxpbmUgYnVm
ZmVyLiAqLwotICAgICAgZG8gewotICAgICAgICAqcm93cCsrID0gKi0tc3RhY2twOwotICAgICAg
ICBpZiAocm93cCA9PSByb3dlbmQpIHsKLSAgICAgICAgICBPVVRQVVRfUk9XOworCisgICAgICAg
IGNhc2UgR0lGVHlwZTogeworICAgICAgICAgICAgLy8gQWxsIEdJRiBmaWxlcyBiZWdpbiB3aXRo
ICJHSUY4N2EiIG9yICJHSUY4OWEiLgorICAgICAgICAgICAgaWYgKCFzdHJuY21wKChjaGFyKilx
LCAiR0lGODlhIiwgNikpCisgICAgICAgICAgICAgICAgbV92ZXJzaW9uID0gODk7CisgICAgICAg
ICAgICBlbHNlIGlmICghc3RybmNtcCgoY2hhciopcSwgIkdJRjg3YSIsIDYpKQorICAgICAgICAg
ICAgICAgIG1fdmVyc2lvbiA9IDg3OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHJldHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAg
ICAgICAgR0VUTig3LCBHSUZHbG9iYWxIZWFkZXIpOworICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KLSAgICAgIH0gd2hpbGUgKHN0YWNrcCA+IHN0YWNrKTsKLSAgICB9Ci0gIH0KLQotICBF
TkQ6Ci0KLSAgLyogSG9tZSB0aGUgbG9jYWwgY29waWVzIG9mIHRoZSBHSUYgZGVjb2RlciBzdGF0
ZSB2YXJpYWJsZXMgKi8KLSAgZ3MtPmF2YWlsID0gYXZhaWw7Ci0gIGdzLT5iaXRzID0gYml0czsK
LSAgZ3MtPmNvZGVzaXplID0gY29kZXNpemU7Ci0gIGdzLT5jb2RlbWFzayA9IGNvZGVtYXNrOwot
ICBjb3VudCA9IGNudDsKLSAgZ3MtPm9sZGNvZGUgPSBvbGRjb2RlOwotICBncy0+Zmlyc3RjaGFy
ID0gZmlyc3RjaGFyOwotICBncy0+ZGF0dW0gPSBkYXR1bTsKLSAgZ3MtPnN0YWNrcCA9IHN0YWNr
cDsKLSAgZ3MtPnJvd3AgPSByb3dwOwotICBncy0+cm93c19yZW1haW5pbmcgPSByb3dzX3JlbWFp
bmluZzsKLQotICByZXR1cm4gdHJ1ZTsKLX0KIAorICAgICAgICBjYXNlIEdJRkdsb2JhbEhlYWRl
cjogeworICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgaGVpZ2h0IGFuZCB3aWR0aCBvZiB0aGUg
InNjcmVlbiIgb3IgZnJhbWUgaW50byB3aGljaCBpbWFnZXMgYXJlIHJlbmRlcmVkLiBUaGUKKyAg
ICAgICAgICAgIC8vIGluZGl2aWR1YWwgaW1hZ2VzIGNhbiBiZSBzbWFsbGVyIHRoYW4gdGhlIHNj
cmVlbiBzaXplIGFuZCBsb2NhdGVkIHdpdGggYW4gb3JpZ2luIGFueXdoZXJlCisgICAgICAgICAg
ICAvLyB3aXRoaW4gdGhlIHNjcmVlbi4KKyAgICAgICAgICAgIG1fc2NyZWVuV2lkdGggPSBHRVRJ
TlQxNihxKTsKKyAgICAgICAgICAgIG1fc2NyZWVuSGVpZ2h0ID0gR0VUSU5UMTYocSArIDIpOwor
CisgICAgICAgICAgICAvLyBDQUxMQkFDSzogSW5mb3JtIHRoZSBkZWNvZGVycGx1Z2luIG9mIG91
ciBzaXplLgorICAgICAgICAgICAgaWYgKG1fY2xpZW50ICYmICFtX2NsaWVudC0+c2V0U2l6ZSht
X3NjcmVlbldpZHRoLCBtX3NjcmVlbkhlaWdodCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgICAgICBtX3NjcmVlbkJnY29sb3IgPSBxWzVdOworICAgICAgICAgICAg
bV9nbG9iYWxDb2xvcm1hcFNpemUgPSAyIDw8IChxWzRdICYgMHgwNyk7CisKKyAgICAgICAgICAg
IGlmICgocVs0XSAmIDB4ODApICYmIG1fZ2xvYmFsQ29sb3JtYXBTaXplID4gMCkgeyAvKiBnbG9i
YWwgbWFwICovCisgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBnbG9iYWwgY29sb3JtYXAKKyAg
ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBzaXplID0gMyptX2dsb2JhbENvbG9ybWFwU2l6
ZTsKKworICAgICAgICAgICAgICAgIC8vIE1hbGxvYyB0aGUgY29sb3IgbWFwLCBidXQgb25seSBp
ZiB3ZSdyZSBub3QganVzdCBjb3VudGluZyBmcmFtZXMuCisgICAgICAgICAgICAgICAgaWYgKHF1
ZXJ5ICE9IEdJRkltYWdlRGVjb2Rlcjo6R0lGRnJhbWVDb3VudFF1ZXJ5KQorICAgICAgICAgICAg
ICAgICAgICBtX2dsb2JhbENvbG9ybWFwID0gbmV3IHVuc2lnbmVkIGNoYXJbc2l6ZV07CisKKyAg
ICAgICAgICAgICAgICBpZiAobGVuIDwgc2l6ZSkgeworICAgICAgICAgICAgICAgICAgICAvLyBV
c2UgJ2hvbGQnIHBhdHRlcm4gdG8gZ2V0IHRoZSBnbG9iYWwgY29sb3JtYXAKKyAgICAgICAgICAg
ICAgICAgICAgR0VUTihzaXplLCBHSUZHbG9iYWxDb2xvcm1hcCk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIENvcHkg
ZXZlcnl0aGluZyBhbmQgZ28gZGlyZWN0bHkgdG8gR0lGSW1hZ2Vfc3RhcnQuCisgICAgICAgICAg
ICAgICAgaWYgKG1fZ2xvYmFsQ29sb3JtYXApCisgICAgICAgICAgICAgICAgICAgIG1lbWNweSht
X2dsb2JhbENvbG9ybWFwLCBidWYsIHNpemUpOworICAgICAgICAgICAgICAgIGJ1ZiArPSBzaXpl
OworICAgICAgICAgICAgICAgIGxlbiAtPSBzaXplOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBHRVROKDEsIEdJRkltYWdlU3RhcnQpOworCisgICAgICAgICAgICAvLyBxWzZdID0gUGl4
ZWwgQXNwZWN0IFJhdGlvCisgICAgICAgICAgICAvLyAgIE5vdCB1c2VkCisgICAgICAgICAgICAv
LyAgIGZsb2F0IGFzcGVjdCA9IChmbG9hdCkoKHFbNl0gKyAxNSkgLyA2NC4wKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKgotICog
cHJvY2VzcyBkYXRhIGFycml2aW5nIGZyb20gdGhlIHN0cmVhbSBmb3IgdGhlIGdpZiBkZWNvZGVy
Ci0gKi8KKyAgICAgICAgY2FzZSBHSUZHbG9iYWxDb2xvcm1hcDogeworICAgICAgICAgICAgLy8g
RXZlcnl0aGluZyBpcyBhbHJlYWR5IGNvcGllZCBpbnRvIG1fZ2xvYmFsQ29sb3JtYXAKKyAgICAg
ICAgICAgIEdFVE4oMSwgR0lGSW1hZ2VTdGFydCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQogCi1ib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1
ZiwgdW5zaWduZWQgbGVuLCAKLSAgICAgICAgICAgICAgICAgICAgIEdJRkltYWdlRGVjb2Rlcjo6
R0lGUXVlcnkgcXVlcnksIHVuc2lnbmVkIGhhbHRBdEZyYW1lKQotewotICBpZiAoIWxlbikgewot
ICAgIC8vIE5vIG5ldyBkYXRhIGhhcyBjb21lIGluIHNpbmNlIHRoZSBsYXN0IGNhbGwsIGp1c3Qg
aWdub3JlIHRoaXMgY2FsbC4KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIGNvbnN0IHVuc2ln
bmVkIGNoYXIgKnEgPSBidWY7Ci0KLSAgLy8gQWRkIHdoYXQgd2UgaGF2ZSBzbyBmYXIgdG8gdGhl
IGJsb2NrCi0gIC8vIElmIHByZXZpb3VzIGNhbGwgdG8gbWUgbGVmdCBzb21ldGhpbmcgaW4gdGhl
IGhvbGQgZmlyc3QgY29tcGxldGUgY3VycmVudCBibG9jawotICAvLyBPciBpZiB3ZSBhcmUgZmls
bGluZyB0aGUgY29sb3JtYXBzLCBmaXJzdCBjb21wbGV0ZSB0aGUgY29sb3JtYXAKLSAgdW5zaWdu
ZWQgY2hhciogcCA9IDA7Ci0gIGlmIChzdGF0ZSA9PSBnaWZfZ2xvYmFsX2NvbG9ybWFwKQotICAg
IHAgPSBnbG9iYWxfY29sb3JtYXA7Ci0gIGVsc2UgaWYgKHN0YXRlID09IGdpZl9pbWFnZV9jb2xv
cm1hcCkKLSAgICBwID0gZnJhbWVfcmVhZGVyID8gZnJhbWVfcmVhZGVyLT5sb2NhbF9jb2xvcm1h
cCA6IDA7Ci0gIGVsc2UgaWYgKGJ5dGVzX2luX2hvbGQpCi0gICAgcCA9IGhvbGQ7Ci0gIGVsc2UK
LSAgICBwID0gMDsKLQotICBpZiAocCB8fCAoc3RhdGUgPT0gZ2lmX2dsb2JhbF9jb2xvcm1hcCkg
fHwgKHN0YXRlID09IGdpZl9pbWFnZV9jb2xvcm1hcCkpIHsKLSAgICAvLyBBZGQgd2hhdCB3ZSBo
YXZlIHNvZmFyIHRvIHRoZSBibG9jawotICAgIHVuc2lnbmVkIGwgPSBsZW4gPCBieXRlc190b19j
b25zdW1lID8gbGVuIDogYnl0ZXNfdG9fY29uc3VtZTsKLSAgICBpZiAocCkKLSAgICAgICAgbWVt
Y3B5KHAgKyBieXRlc19pbl9ob2xkLCBidWYsIGwpOwotCi0gICAgaWYgKGwgPCBieXRlc190b19j
b25zdW1lKSB7Ci0gICAgICAvLyBOb3QgZW5vdWdoIGluICdidWYnIHRvIGNvbXBsZXRlIGN1cnJl
bnQgYmxvY2ssIGdldCBtb3JlCi0gICAgICBieXRlc19pbl9ob2xkICs9IGw7Ci0gICAgICBieXRl
c190b19jb25zdW1lIC09IGw7Ci0gICAgICBpZiAoY2xpZW50cHRyKQotICAgICAgICBjbGllbnRw
dHItPmRlY29kaW5nSGFsdGVkKDApOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAv
LyBSZXNldCBob2xkIGJ1ZmZlciBjb3VudAotICAgIGJ5dGVzX2luX2hvbGQgPSAwOwotICAgIC8v
IFBvaW50ICdxJyB0byBjb21wbGV0ZSBibG9jayBpbiBob2xkIChvciBpbiBjb2xvcm1hcCkKLSAg
ICBxID0gcDsKLSAgfQotCi0gIC8vIEludmFyaWFudDoKLSAgLy8gICAgJ3EnIGlzIHN0YXJ0IG9m
IGN1cnJlbnQgdG8gYmUgcHJvY2Vzc2VkIGJsb2NrIChob2xkLCBjb2xvcm1hcCBvciBidWYpCi0g
IC8vICAgICdieXRlc190b19jb25zdW1lJyBpcyBudW1iZXIgb2YgYnl0ZXMgdG8gY29uc3VtZSBm
cm9tICdidWYnCi0gIC8vICAgICdidWYnIHBvaW50cyB0byB0aGUgYnl0ZXMgdG8gYmUgY29uc3Vt
ZWQgZnJvbSB0aGUgaW5wdXQgYnVmZmVyCi0gIC8vICAgICdsZW4nIGlzIG51bWJlciBvZiBieXRl
cyBsZWZ0IGluIGlucHV0IGJ1ZmZlciBmcm9tIHBvc2l0aW9uICdidWYnLgotICAvLyAgICBBdCBl
bnRyYW5jZSBvZiB0aGUgZm9yIGxvb3Agd2lsbCAnYnVmJyB3aWxsIGJlIG1vdmVkICdieXRlc190
b19jb25zdW1lJwotICAvLyAgICB0byBwb2ludCB0byBuZXh0IGJ1ZmZlciwgJ2xlbicgaXMgYWRq
dXN0ZWQgYWNjb3JkaW5nbHkuCi0gIC8vICAgIFNvIHRoYXQgbmV4dCByb3VuZCBpbiBmb3IgbG9v
cCwgcSBnZXRzIHBvaW50ZWQgdG8gdGhlIG5leHQgYnVmZmVyLgotCi0gIGZvciAoO2xlbiA+PSBi
eXRlc190b19jb25zdW1lOyBxPWJ1ZikgewotICAgIC8vIEVhdCB0aGUgY3VycmVudCBibG9jayBm
cm9tIHRoZSBidWZmZXIsIHEga2VlcHMgcG9pbnRlZCBhdCBjdXJyZW50IGJsb2NrCi0gICAgYnVm
ICs9IGJ5dGVzX3RvX2NvbnN1bWU7Ci0gICAgbGVuIC09IGJ5dGVzX3RvX2NvbnN1bWU7Ci0KLSAg
ICBzd2l0Y2ggKHN0YXRlKQotICAgIHsKLSAgICBjYXNlIGdpZl9senc6Ci0gICAgICBpZiAoIWRv
X2x6dyhxKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBJZiBkb19sencoKSBlbmNvdW50ZXJl
ZCBhbiBlcnJvciwgaXQgaGFzIGFscmVhZHkgY2FsbGVkCi0gICAgICAgICAgICAgICAgICAgICAg
Ly8gY2xpZW50cHRyLT5zZXRGYWlsZWQoKS4KLSAgICAgIEdFVE4oMSwgZ2lmX3N1Yl9ibG9jayk7
Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgZ2lmX2x6d19zdGFydDoKLSAgICB7Ci0gICAgICAv
KiBJbml0aWFsaXplIExaVyBwYXJzZXIvZGVjb2RlciAqLwotICAgICAgaW50IGRhdGFzaXplID0g
KnE7Ci0gICAgICAvLyBTaW5jZSB3ZSB1c2UgYSBjb2Rlc2l6ZSBvZiAxIG1vcmUgdGhhbiB0aGUg
ZGF0YXNpemUsIHdlIG5lZWQgdG8gZW5zdXJlCi0gICAgICAvLyB0aGF0IG91ciBkYXRhc2l6ZSBp
cyBzdHJpY3RseSBsZXNzIHRoYW4gdGhlIE1BWF9MWldfQklUUyB2YWx1ZSAoMTIpLgotICAgICAg
Ly8gVGhpcyBzZXRzIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGNvZGVtYXNrIGNvcnJlY3RseSBhdCA0
MDk1LgotICAgICAgaWYgKGRhdGFzaXplID49IE1BWF9MWldfQklUUykKLSAgICAgICAgcmV0dXJu
IGNsaWVudHB0ciA/IGNsaWVudHB0ci0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKLSAgICAgIGludCBj
bGVhcl9jb2RlID0gMSA8PCBkYXRhc2l6ZTsKLSAgICAgIGlmIChjbGVhcl9jb2RlID49IE1BWF9C
SVRTKQotICAgICAgICByZXR1cm4gY2xpZW50cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQoKSA6
IGZhbHNlOwotCi0gICAgICBpZiAoZnJhbWVfcmVhZGVyKSB7Ci0gICAgICAgIGZyYW1lX3JlYWRl
ci0+ZGF0YXNpemUgPSBkYXRhc2l6ZTsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT5jbGVhcl9jb2Rl
ID0gY2xlYXJfY29kZTsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT5hdmFpbCA9IGZyYW1lX3JlYWRl
ci0+Y2xlYXJfY29kZSArIDI7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+b2xkY29kZSA9IC0xOwot
ICAgICAgICBmcmFtZV9yZWFkZXItPmNvZGVzaXplID0gZnJhbWVfcmVhZGVyLT5kYXRhc2l6ZSAr
IDE7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+Y29kZW1hc2sgPSAoMSA8PCBmcmFtZV9yZWFkZXIt
PmNvZGVzaXplKSAtIDE7Ci0KLSAgICAgICAgZnJhbWVfcmVhZGVyLT5kYXR1bSA9IGZyYW1lX3Jl
YWRlci0+Yml0cyA9IDA7Ci0KLSAgICAgICAgLyogaW5pdCB0aGUgdGFibGVzICovCi0gICAgICAg
IGlmICghZnJhbWVfcmVhZGVyLT5zdWZmaXgpCi0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5zdWZm
aXggPSBuZXcgdW5zaWduZWQgY2hhcltNQVhfQklUU107Ci0gICAgICAgIC8vIENsZWFyaW5nIHRo
ZSB3aG9sZSBzdWZmaXggdGFibGUgbGV0cyB1cyBiZSBtb3JlIHRvbGVyYW50IG9mIGJhZCBkYXRh
LgotICAgICAgICBtZW1zZXQoZnJhbWVfcmVhZGVyLT5zdWZmaXgsIDAsIE1BWF9CSVRTKTsKLSAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFtZV9yZWFkZXItPmNsZWFyX2NvZGU7IGkrKykK
LSAgICAgICAgICBmcmFtZV9yZWFkZXItPnN1ZmZpeFtpXSA9IGk7Ci0KLSAgICAgICAgaWYgKCFm
cmFtZV9yZWFkZXItPnN0YWNrKQotICAgICAgICAgIGZyYW1lX3JlYWRlci0+c3RhY2sgPSBuZXcg
dW5zaWduZWQgY2hhcltNQVhfQklUU107Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+c3RhY2twID0g
ZnJhbWVfcmVhZGVyLT5zdGFjazsKLSAgICAgIH0KLQotICAgICAgR0VUTigxLCBnaWZfc3ViX2Js
b2NrKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgICAvKiBBbGwgR0lGIGZpbGVzIGJlZ2luIHdp
dGggIkdJRjg3YSIgb3IgIkdJRjg5YSIgKi8KLSAgICBjYXNlIGdpZl90eXBlOgotICAgIHsKLSAg
ICAgIGlmICghc3RybmNtcCgoY2hhciopcSwgIkdJRjg5YSIsIDYpKQotICAgICAgICB2ZXJzaW9u
ID0gODk7Ci0gICAgICBlbHNlIGlmICghc3RybmNtcCgoY2hhciopcSwgIkdJRjg3YSIsIDYpKQot
ICAgICAgICB2ZXJzaW9uID0gODc7Ci0gICAgICBlbHNlCi0gICAgICAgIHJldHVybiBjbGllbnRw
dHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7Ci0gICAgICBHRVROKDcsIGdpZl9n
bG9iYWxfaGVhZGVyKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgICBjYXNlIGdpZl9nbG9iYWxf
aGVhZGVyOgotICAgIHsKLSAgICAgIC8qIFRoaXMgaXMgdGhlIGhlaWdodCBhbmQgd2lkdGggb2Yg
dGhlICJzY3JlZW4iIG9yCi0gICAgICAgKiBmcmFtZSBpbnRvIHdoaWNoIGltYWdlcyBhcmUgcmVu
ZGVyZWQuICBUaGUKLSAgICAgICAqIGluZGl2aWR1YWwgaW1hZ2VzIGNhbiBiZSBzbWFsbGVyIHRo
YW4gdGhlCi0gICAgICAgKiBzY3JlZW4gc2l6ZSBhbmQgbG9jYXRlZCB3aXRoIGFuIG9yaWdpbiBh
bnl3aGVyZQotICAgICAgICogd2l0aGluIHRoZSBzY3JlZW4uCi0gICAgICAgKi8KLQotICAgICAg
c2NyZWVuX3dpZHRoID0gR0VUSU5UMTYocSk7Ci0gICAgICBzY3JlZW5faGVpZ2h0ID0gR0VUSU5U
MTYocSArIDIpOwotCi0gICAgICAvLyBDQUxMQkFDSzogSW5mb3JtIHRoZSBkZWNvZGVycGx1Z2lu
IG9mIG91ciBzaXplLgotICAgICAgaWYgKGNsaWVudHB0ciAmJiAhY2xpZW50cHRyLT5zZXRTaXpl
KHNjcmVlbl93aWR0aCwgc2NyZWVuX2hlaWdodCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgIAotICAgICAgc2NyZWVuX2JnY29sb3IgPSBxWzVdOwotICAgICAgZ2xvYmFsX2NvbG9ybWFw
X3NpemUgPSAyPDwocVs0XSYweDA3KTsKLQotICAgICAgaWYgKChxWzRdICYgMHg4MCkgJiYgZ2xv
YmFsX2NvbG9ybWFwX3NpemUgPiAwKSB7IC8qIGdsb2JhbCBtYXAgKi8KLSAgICAgICAgLy8gR2V0
IHRoZSBnbG9iYWwgY29sb3JtYXAKLSAgICAgICAgY29uc3QgdW5zaWduZWQgc2l6ZSA9IDMqZ2xv
YmFsX2NvbG9ybWFwX3NpemU7Ci0gICAgICAgIAotICAgICAgICAvLyBNYWxsb2MgdGhlIGNvbG9y
IG1hcCwgYnV0IG9ubHkgaWYgd2UncmUgbm90IGp1c3QgY291bnRpbmcgZnJhbWVzLgotICAgICAg
ICBpZiAocXVlcnkgIT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZGcmFtZUNvdW50UXVlcnkpCi0gICAg
ICAgICAgZ2xvYmFsX2NvbG9ybWFwID0gbmV3IHVuc2lnbmVkIGNoYXJbc2l6ZV07Ci0KLSAgICAg
ICAgaWYgKGxlbiA8IHNpemUpIHsKLSAgICAgICAgICAvLyBVc2UgJ2hvbGQnIHBhdHRlcm4gdG8g
Z2V0IHRoZSBnbG9iYWwgY29sb3JtYXAKLSAgICAgICAgICBHRVROKHNpemUsIGdpZl9nbG9iYWxf
Y29sb3JtYXApOwotICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdJRkltYWdlU3RhcnQ6
IHsKKyAgICAgICAgICAgIGlmICgqcSA9PSAnOycpIHsgLy8gdGVybWluYXRvci4KKyAgICAgICAg
ICAgICAgICBHRVROKDAsIEdJRkRvbmUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpZiAoKnEgPT0gJyEnKSB7IC8vIGV4dGVuc2lvbi4KKyAg
ICAgICAgICAgICAgICBHRVROKDIsIEdJRkV4dGVuc2lvbik7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIElmIHdlIGdldCBhbnl0aGluZyBv
dGhlciB0aGFuICcsJyAoaW1hZ2Ugc2VwYXJhdG9yKSwgJyEnCisgICAgICAgICAgICAvLyAoZXh0
ZW5zaW9uKSwgb3IgJzsnICh0cmFpbGVyKSwgdGhlcmUgaXMgZXh0cmFuZW91cyBkYXRhCisgICAg
ICAgICAgICAvLyBiZXR3ZWVuIGJsb2Nrcy4gVGhlIEdJRjg3YSBzcGVjIHRlbGxzIHVzIHRvIGtl
ZXAgcmVhZGluZworICAgICAgICAgICAgLy8gdW50aWwgd2UgZmluZCBhbiBpbWFnZSBzZXBhcmF0
b3IsIGJ1dCBHSUY4OWEgc2F5cyBzdWNoCisgICAgICAgICAgICAvLyBhIGZpbGUgaXMgY29ycnVw
dC4gV2UgZm9sbG93IEdJRjg5YSBhbmQgYmFpbCBvdXQuCisgICAgICAgICAgICBpZiAoKnEgIT0g
JywnKQorICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5zZXRGYWls
ZWQoKSA6IGZhbHNlOworCisgICAgICAgICAgICBHRVROKDksIEdJRkltYWdlSGVhZGVyKTsKKyAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBDb3B5IGV2
ZXJ5dGhpbmcgYW5kIGdvIGRpcmVjdGx5IHRvIGdpZl9pbWFnZV9zdGFydC4KLSAgICAgICAgaWYg
KGdsb2JhbF9jb2xvcm1hcCkKLSAgICAgICAgICAgIG1lbWNweShnbG9iYWxfY29sb3JtYXAsIGJ1
Ziwgc2l6ZSk7Ci0gICAgICAgIGJ1ZiArPSBzaXplOwotICAgICAgICBsZW4gLT0gc2l6ZTsKLSAg
ICAgIH0KLQotICAgICAgR0VUTigxLCBnaWZfaW1hZ2Vfc3RhcnQpOwotCi0gICAgICAvLyBxWzZd
ID0gUGl4ZWwgQXNwZWN0IFJhdGlvCi0gICAgICAvLyAgIE5vdCB1c2VkCi0gICAgICAvLyAgIGZs
b2F0IGFzcGVjdCA9IChmbG9hdCkoKHFbNl0gKyAxNSkgLyA2NC4wKTsKLSAgICB9Ci0gICAgYnJl
YWs7Ci0KLSAgICBjYXNlIGdpZl9nbG9iYWxfY29sb3JtYXA6Ci0gICAgICAvLyBFdmVyeXRoaW5n
IGlzIGFscmVhZHkgY29waWVkIGludG8gZ2xvYmFsX2NvbG9ybWFwCi0gICAgICBHRVROKDEsIGdp
Zl9pbWFnZV9zdGFydCk7Ci0gICAgYnJlYWs7Ci0KLSAgICBjYXNlIGdpZl9pbWFnZV9zdGFydDoK
LSAgICB7Ci0gICAgICBpZiAoKnEgPT0gJzsnKSB7IC8qIHRlcm1pbmF0b3IgKi8KLSAgICAgICAg
R0VUTigwLCBnaWZfZG9uZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBpZiAo
KnEgPT0gJyEnKSB7IC8qIGV4dGVuc2lvbiAqLwotICAgICAgICBHRVROKDIsIGdpZl9leHRlbnNp
b24pOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLyogSWYgd2UgZ2V0IGFueXRo
aW5nIG90aGVyIHRoYW4gJywnIChpbWFnZSBzZXBhcmF0b3IpLCAnIScKLSAgICAgICAqIChleHRl
bnNpb24pLCBvciAnOycgKHRyYWlsZXIpLCB0aGVyZSBpcyBleHRyYW5lb3VzIGRhdGEKLSAgICAg
ICAqIGJldHdlZW4gYmxvY2tzLiBUaGUgR0lGODdhIHNwZWMgdGVsbHMgdXMgdG8ga2VlcCByZWFk
aW5nCi0gICAgICAgKiB1bnRpbCB3ZSBmaW5kIGFuIGltYWdlIHNlcGFyYXRvciwgYnV0IEdJRjg5
YSBzYXlzIHN1Y2gKLSAgICAgICAqIGEgZmlsZSBpcyBjb3JydXB0LiBXZSBmb2xsb3cgR0lGODlh
IGFuZCBiYWlsIG91dC4gKi8KLSAgICAgIGlmICgqcSAhPSAnLCcpCi0gICAgICAgIHJldHVybiBj
bGllbnRwdHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7Ci0KLSAgICAgIEdFVE4o
OSwgZ2lmX2ltYWdlX2hlYWRlcik7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gICAgY2FzZSBnaWZf
ZXh0ZW5zaW9uOgotICAgIHsKLSAgICAgIGNvdW50ID0gcVsxXTsKLSAgICAgIGdzdGF0ZSBlcyA9
IGdpZl9za2lwX2Jsb2NrOwotCi0gICAgICAvLyBUaGUgR0lGIHNwZWMgbWFuZGF0ZXMgbGVuZ3Ro
cyBmb3IgdGhyZWUgb2YgdGhlIGV4dGVuc2lvbnMgYmVsb3cuCi0gICAgICAvLyBIb3dldmVyLCBp
dCdzIHBvc3NpYmxlIGZvciBHSUZzIGluIHRoZSB3aWxkIHRvIGRldmlhdGUuIEZvciBleGFtcGxl
LAotICAgICAgLy8gc29tZSBHSUZzIHRoYXQgZW1iZWQgSUNDIGNvbG9yIHByb2ZpbGVzIHVzaW5n
IGdpZl9hcHBsaWNhdGlvbl9leHRlbnNpb24KLSAgICAgIC8vIHZpb2xhdGUgdGhlIHNwZWMgYW5k
IHRyZWF0IHRoaXMgZXh0ZW5zaW9uIGJsb2NrIGxpa2UgYSBzb3J0IG9mCi0gICAgICAvLyAiZXh0
ZW5zaW9uICsgZGF0YSIgYmxvY2ssIGdpdmluZyBhIHNpemUgZ3JlYXRlciB0aGFuIDExIGFuZCBm
aWxsaW5nIHRoZQotICAgICAgLy8gcmVtYWluaW5nIGJ5dGVzIHdpdGggZGF0YSAodGhlbiBmb2xs
b3dpbmcgd2l0aCBtb3JlIGRhdGEgYmxvY2tzIGFzCi0gICAgICAvLyBuZWVkZWQpLCBpbnN0ZWFk
IG9mIHBsYWNpbmcgYSB0cnVlIGRhdGEgYmxvY2sganVzdCBhZnRlciB0aGUgMTEgYnl0ZQotICAg
ICAgLy8gZXh0ZW5zaW9uIGJsb2NrLgotICAgICAgLy8KLSAgICAgIC8vIEFjY29yZGluZ2x5LCBp
ZiB0aGUgc3BlY2lmaWVkIGxlbmd0aCBpcyBsYXJnZXIgdGhhbiB0aGUgcmVxdWlyZWQgdmFsdWUs
Ci0gICAgICAvLyB3ZSB1c2UgaXQuIElmIGl0J3Mgc21hbGxlciwgdGhlbiB3ZSBlbmZvcmNlIHRo
ZSBzcGVjIHZhbHVlLCBiZWNhdXNlIHRoZQotICAgICAgLy8gcGFyc2VycyBmb3IgdGhlc2UgZXh0
ZW5zaW9ucyBleHBlY3QgdG8gaGF2ZSB0aGUgc3BlY2lmaWVkIG51bWJlciBvZgotICAgICAgLy8g
Ynl0ZXMgYXZhaWxhYmxlLCBhbmQgaWYgd2UgZG9uJ3QgZW5zdXJlIHRoYXQsIHRoZXkgY291bGQg
cmVhZCBvZmYgdGhlCi0gICAgICAvLyBlbmQgb2YgdGhlIGhlYXAgYnVmZmVyLiAoSW4gdGhpcyBj
YXNlLCBpdCdzIGxpa2VseSB0aGUgR0lGIGlzIGNvcnJ1cHQKLSAgICAgIC8vIGFuZCB3ZSdsbCBz
b29uIGZhaWwgdG8gZGVjb2RlIGFueXdheS4pCi0gICAgICBzd2l0Y2ggKCpxKQotICAgICAgewot
ICAgICAgY2FzZSAweGY5OgotICAgICAgICBlcyA9IGdpZl9jb250cm9sX2V4dGVuc2lvbjsKLSAg
ICAgICAgY291bnQgPSBzdGQ6Om1heChjb3VudCwgNCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAg
ICBjYXNlIDB4MDE6Ci0gICAgICAgIC8vIGlnbm9yaW5nIHBsYWluIHRleHQgZXh0ZW5zaW9uCi0g
ICAgICAgIGNvdW50ID0gc3RkOjptYXgoY291bnQsIDEyKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgIGNhc2UgMHhmZjoKLSAgICAgICAgZXMgPSBnaWZfYXBwbGljYXRpb25fZXh0ZW5zaW9uOwot
ICAgICAgICBjb3VudCA9IHN0ZDo6bWF4KGNvdW50LCAxMSk7Ci0gICAgICAgIGJyZWFrOwotCi0g
ICAgICBjYXNlIDB4ZmU6Ci0gICAgICAgIGVzID0gZ2lmX2NvbnN1bWVfY29tbWVudDsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChjb3VudCkKLSAgICAgICAgR0VUTihjb3Vu
dCwgZXMpOwotICAgICAgZWxzZQotICAgICAgICBHRVROKDEsIGdpZl9pbWFnZV9zdGFydCk7Ci0g
ICAgfQotICAgIGJyZWFrOwotCi0gICAgY2FzZSBnaWZfY29uc3VtZV9ibG9jazoKLSAgICAgIGlm
ICghKnEpCi0gICAgICAgIEdFVE4oMSwgZ2lmX2ltYWdlX3N0YXJ0KTsKLSAgICAgIGVsc2UKLSAg
ICAgICAgR0VUTigqcSwgZ2lmX3NraXBfYmxvY2spOwotICAgIGJyZWFrOwotCi0gICAgY2FzZSBn
aWZfc2tpcF9ibG9jazoKLSAgICAgIEdFVE4oMSwgZ2lmX2NvbnN1bWVfYmxvY2spOwotICAgICAg
YnJlYWs7Ci0KLSAgICBjYXNlIGdpZl9jb250cm9sX2V4dGVuc2lvbjoKLSAgICB7Ci0gICAgICBp
ZiAocXVlcnkgIT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZGcmFtZUNvdW50UXVlcnkpIHsKLSAgICAg
ICAgICBpZiAoIWZyYW1lX3JlYWRlcikKLSAgICAgICAgICAgIGZyYW1lX3JlYWRlciA9IG5ldyBH
SUZGcmFtZVJlYWRlcigpOwotICAgICAgfQotCi0gICAgICBpZiAoZnJhbWVfcmVhZGVyKSB7Ci0g
ICAgICAgIGlmICgqcSAmIDB4MSkgewotICAgICAgICAgIGZyYW1lX3JlYWRlci0+dHBpeGVsID0g
cVszXTsKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPmlzX3RyYW5zcGFyZW50ID0gdHJ1ZTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPmlzX3RyYW5zcGFyZW50ID0g
ZmFsc2U7Ci0gICAgICAgICAgLy8gaWdub3JpbmcgZ2Z4IGNvbnRyb2wgZXh0ZW5zaW9uCisKKyAg
ICAgICAgY2FzZSBHSUZFeHRlbnNpb246IHsKKyAgICAgICAgICAgIG1fY291bnQgPSBxWzFdOwor
ICAgICAgICAgICAgR0lGU3RhdGUgZXMgPSBHSUZTa2lwQmxvY2s7CisKKyAgICAgICAgICAgIC8v
IFRoZSBHSUYgc3BlYyBtYW5kYXRlcyBsZW5ndGhzIGZvciB0aHJlZSBvZiB0aGUgZXh0ZW5zaW9u
cyBiZWxvdy4KKyAgICAgICAgICAgIC8vIEhvd2V2ZXIsIGl0J3MgcG9zc2libGUgZm9yIEdJRnMg
aW4gdGhlIHdpbGQgdG8gZGV2aWF0ZS4gRm9yIGV4YW1wbGUsCisgICAgICAgICAgICAvLyBzb21l
IEdJRnMgdGhhdCBlbWJlZCBJQ0MgY29sb3IgcHJvZmlsZXMgdXNpbmcgR0lGQXBwbGljYXRpb25F
eHRlbnNpb24KKyAgICAgICAgICAgIC8vIHZpb2xhdGUgdGhlIHNwZWMgYW5kIHRyZWF0IHRoaXMg
ZXh0ZW5zaW9uIGJsb2NrIGxpa2UgYSBzb3J0IG9mCisgICAgICAgICAgICAvLyAiZXh0ZW5zaW9u
ICsgZGF0YSIgYmxvY2ssIGdpdmluZyBhIHNpemUgZ3JlYXRlciB0aGFuIDExIGFuZCBmaWxsaW5n
IHRoZQorICAgICAgICAgICAgLy8gcmVtYWluaW5nIGJ5dGVzIHdpdGggZGF0YSAodGhlbiBmb2xs
b3dpbmcgd2l0aCBtb3JlIGRhdGEgYmxvY2tzIGFzCisgICAgICAgICAgICAvLyBuZWVkZWQpLCBp
bnN0ZWFkIG9mIHBsYWNpbmcgYSB0cnVlIGRhdGEgYmxvY2sganVzdCBhZnRlciB0aGUgMTEgYnl0
ZQorICAgICAgICAgICAgLy8gZXh0ZW5zaW9uIGJsb2NrLgorICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgIC8vIEFjY29yZGluZ2x5LCBpZiB0aGUgc3BlY2lmaWVkIGxlbmd0aCBpcyBsYXJnZXIg
dGhhbiB0aGUgcmVxdWlyZWQgdmFsdWUsCisgICAgICAgICAgICAvLyB3ZSB1c2UgaXQuIElmIGl0
J3Mgc21hbGxlciwgdGhlbiB3ZSBlbmZvcmNlIHRoZSBzcGVjIHZhbHVlLCBiZWNhdXNlIHRoZQor
ICAgICAgICAgICAgLy8gcGFyc2VycyBmb3IgdGhlc2UgZXh0ZW5zaW9ucyBleHBlY3QgdG8gaGF2
ZSB0aGUgc3BlY2lmaWVkIG51bWJlciBvZgorICAgICAgICAgICAgLy8gYnl0ZXMgYXZhaWxhYmxl
LCBhbmQgaWYgd2UgZG9uJ3QgZW5zdXJlIHRoYXQsIHRoZXkgY291bGQgcmVhZCBvZmYgdGhlCisg
ICAgICAgICAgICAvLyBlbmQgb2YgdGhlIGhlYXAgYnVmZmVyLiAoSW4gdGhpcyBjYXNlLCBpdCdz
IGxpa2VseSB0aGUgR0lGIGlzIGNvcnJ1cHQKKyAgICAgICAgICAgIC8vIGFuZCB3ZSdsbCBzb29u
IGZhaWwgdG8gZGVjb2RlIGFueXdheS4pCisgICAgICAgICAgICBzd2l0Y2ggKCpxKSB7CisgICAg
ICAgICAgICBjYXNlIDB4Zjk6CisgICAgICAgICAgICAgICAgZXMgPSBHSUZDb250cm9sRXh0ZW5z
aW9uOworICAgICAgICAgICAgICAgIG1fY291bnQgPSBzdGQ6Om1heChtX2NvdW50LCA0KTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAweDAxOgorICAgICAgICAg
ICAgICAgIC8vIGlnbm9yaW5nIHBsYWluIHRleHQgZXh0ZW5zaW9uCisgICAgICAgICAgICAgICAg
bV9jb3VudCA9IHN0ZDo6bWF4KG1fY291bnQsIDEyKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgY2FzZSAweGZmOgorICAgICAgICAgICAgICAgIGVzID0gR0lGQXBwbGlj
YXRpb25FeHRlbnNpb247CisgICAgICAgICAgICAgICAgbV9jb3VudCA9IHN0ZDo6bWF4KG1fY291
bnQsIDExKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAweGZl
OgorICAgICAgICAgICAgICAgIGVzID0gR0lGQ29uc3VtZUNvbW1lbnQ7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtX2NvdW50KQorICAg
ICAgICAgICAgICAgIEdFVE4obV9jb3VudCwgZXMpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIEdFVE4oMSwgR0lGSW1hZ2VTdGFydCk7CisgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQotICAgICAgICAvLyBOT1RFOiBUaGlzIHJlbGllcyBvbiB0aGUgdmFsdWVzIGluIHRo
ZSBGcmFtZURpc3Bvc2FsTWV0aG9kIGVudW0KLSAgICAgICAgLy8gbWF0Y2hpbmcgdGhvc2UgaW4g
dGhlIEdJRiBzcGVjIQotICAgICAgICBpbnQgZGlzcG9zYWxfbWV0aG9kID0gKCgqcSkgPj4gMikg
JiAweDc7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+ZGlzcG9zYWxfbWV0aG9kID0gKFdlYkNvcmU6
OkltYWdlRnJhbWU6OkZyYW1lRGlzcG9zYWxNZXRob2QpZGlzcG9zYWxfbWV0aG9kOwotICAgICAg
ICAvLyBTb21lIHNwZWNzIHNheSAzcmQgYml0ICh2YWx1ZSA0KSwgb3RoZXIgc3BlY3Mgc2F5IHZh
bHVlIDMKLSAgICAgICAgLy8gTGV0J3MgY2hvb3NlIDMgKHRoZSBtb3JlIHBvcHVsYXIpCi0gICAg
ICAgIGlmIChkaXNwb3NhbF9tZXRob2QgPT0gNCkKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPmRp
c3Bvc2FsX21ldGhvZCA9IFdlYkNvcmU6OkltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVQcmV2
aW91czsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT5kZWxheV90aW1lID0gR0VUSU5UMTYocSArIDEp
ICogMTA7Ci0gICAgICB9Ci0gICAgICBHRVROKDEsIGdpZl9jb25zdW1lX2Jsb2NrKTsKLSAgICB9
Ci0gICAgYnJlYWs7Ci0KLSAgICBjYXNlIGdpZl9jb21tZW50X2V4dGVuc2lvbjoKLSAgICB7Ci0g
ICAgICBpZiAoKnEpCi0gICAgICAgIEdFVE4oKnEsIGdpZl9jb25zdW1lX2NvbW1lbnQpOwotICAg
ICAgZWxzZQotICAgICAgICBHRVROKDEsIGdpZl9pbWFnZV9zdGFydCk7Ci0gICAgfQotICAgIGJy
ZWFrOwotCi0gICAgY2FzZSBnaWZfY29uc3VtZV9jb21tZW50OgotICAgICAgR0VUTigxLCBnaWZf
Y29tbWVudF9leHRlbnNpb24pOwotICAgIGJyZWFrOwotCi0gICAgY2FzZSBnaWZfYXBwbGljYXRp
b25fZXh0ZW5zaW9uOgotICAgICAgLyogQ2hlY2sgZm9yIG5ldHNjYXBlIGFwcGxpY2F0aW9uIGV4
dGVuc2lvbiAqLwotICAgICAgaWYgKCFzdHJuY21wKChjaGFyKilxLCAiTkVUU0NBUEUyLjAiLCAx
MSkgfHwKLSAgICAgICAgIXN0cm5jbXAoKGNoYXIqKXEsICJBTklNRVhUUzEuMCIsIDExKSkKLSAg
ICAgICAgR0VUTigxLCBnaWZfbmV0c2NhcGVfZXh0ZW5zaW9uX2Jsb2NrKTsKLSAgICAgIGVsc2UK
LSAgICAgICAgR0VUTigxLCBnaWZfY29uc3VtZV9ibG9jayk7Ci0gICAgYnJlYWs7Ci0KLSAgICAv
KiBOZXRzY2FwZS1zcGVjaWZpYyBHSUYgZXh0ZW5zaW9uOiBhbmltYXRpb24gbG9vcGluZyAqLwot
ICAgIGNhc2UgZ2lmX25ldHNjYXBlX2V4dGVuc2lvbl9ibG9jazoKLSAgICAgIGlmICgqcSkKLSAg
ICAgICAgR0VUTigqcSwgZ2lmX2NvbnN1bWVfbmV0c2NhcGVfZXh0ZW5zaW9uKTsKLSAgICAgIGVs
c2UKLSAgICAgICAgR0VUTigxLCBnaWZfaW1hZ2Vfc3RhcnQpOwotICAgIGJyZWFrOwotCi0gICAg
LyogUGFyc2UgbmV0c2NhcGUtc3BlY2lmaWMgYXBwbGljYXRpb24gZXh0ZW5zaW9ucyAqLwotICAg
IGNhc2UgZ2lmX2NvbnN1bWVfbmV0c2NhcGVfZXh0ZW5zaW9uOgotICAgIHsKLSAgICAgIGludCBu
ZXRzY2FwZV9leHRlbnNpb24gPSBxWzBdICYgNzsKLQotICAgICAgLyogTG9vcCBlbnRpcmUgYW5p
bWF0aW9uIHNwZWNpZmllZCAjIG9mIHRpbWVzLiAgT25seSByZWFkIHRoZQotICAgICAgICAgbG9v
cCBjb3VudCBkdXJpbmcgdGhlIGZpcnN0IGl0ZXJhdGlvbi4gKi8KLSAgICAgIGlmIChuZXRzY2Fw
ZV9leHRlbnNpb24gPT0gMSkgewotICAgICAgICBsb29wX2NvdW50ID0gR0VUSU5UMTYocSArIDEp
OwotCi0gICAgICAgIC8qIFplcm8gbG9vcCBjb3VudCBpcyBpbmZpbml0ZSBhbmltYXRpb24gbG9v
cCByZXF1ZXN0ICovCi0gICAgICAgIGlmIChsb29wX2NvdW50ID09IDApCi0gICAgICAgICAgbG9v
cF9jb3VudCA9IFdlYkNvcmU6OmNBbmltYXRpb25Mb29wSW5maW5pdGU7Ci0KLSAgICAgICAgR0VU
TigxLCBnaWZfbmV0c2NhcGVfZXh0ZW5zaW9uX2Jsb2NrKTsKLSAgICAgIH0KLSAgICAgIC8qIFdh
aXQgZm9yIHNwZWNpZmllZCAjIG9mIGJ5dGVzIHRvIGVudGVyIGJ1ZmZlciAqLwotICAgICAgZWxz
ZSBpZiAobmV0c2NhcGVfZXh0ZW5zaW9uID09IDIpIHsKLSAgICAgICAgLy8gRG9uJ3QgZG8gdGhp
cywgdGhpcyBleHRlbnNpb24gZG9lc24ndCBleGlzdCAoaXNuJ3QgdXNlZCBhdCBhbGwpIAotICAg
ICAgICAvLyBhbmQgZG9lc24ndCBkbyBhbnl0aGluZywgYXMgb3VyIHN0cmVhbWluZy9idWZmZXJp
bmcgdGFrZXMgY2FyZSBvZiBpdCBhbGwuLi4KLSAgICAgICAgLy8gU2VlOiBodHRwOi8vc2VtbWl4
LnBsL2NvbG9yL2V4Z3JhZi9lZWcyNC5odG0KLSAgICAgICAgR0VUTigxLCBnaWZfbmV0c2NhcGVf
ZXh0ZW5zaW9uX2Jsb2NrKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIDAsMy03IGFyZSB5
ZXQgdG8gYmUgZGVmaW5lZCBuZXRzY2FwZSBleHRlbnNpb24gY29kZXMKLSAgICAgICAgcmV0dXJu
IGNsaWVudHB0ciA/IGNsaWVudHB0ci0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKLSAgICAgIH0KLQot
ICAgICAgYnJlYWs7Ci0gICAgfQogCi0gICAgY2FzZSBnaWZfaW1hZ2VfaGVhZGVyOgotICAgIHsK
LSAgICAgIHVuc2lnbmVkIGhlaWdodCwgd2lkdGgsIHhfb2Zmc2V0LCB5X29mZnNldDsKLSAgICAg
IAotICAgICAgLyogR2V0IGltYWdlIG9mZnNldHMsIHdpdGggcmVzcGVjdCB0byB0aGUgc2NyZWVu
IG9yaWdpbiAqLwotICAgICAgeF9vZmZzZXQgPSBHRVRJTlQxNihxKTsKLSAgICAgIHlfb2Zmc2V0
ID0gR0VUSU5UMTYocSArIDIpOwotCi0gICAgICAvKiBHZXQgaW1hZ2Ugd2lkdGggYW5kIGhlaWdo
dC4gKi8KLSAgICAgIHdpZHRoICA9IEdFVElOVDE2KHEgKyA0KTsKLSAgICAgIGhlaWdodCA9IEdF
VElOVDE2KHEgKyA2KTsKLQotICAgICAgLyogV29yayBhcm91bmQgYnJva2VuIEdJRiBmaWxlcyB3
aGVyZSB0aGUgbG9naWNhbCBzY3JlZW4KLSAgICAgICAqIHNpemUgaGFzIHdlaXJkIHdpZHRoIG9y
IGhlaWdodC4gIFdlIGFzc3VtZSB0aGF0IEdJRjg3YQotICAgICAgICogZmlsZXMgZG9uJ3QgY29u
dGFpbiBhbmltYXRpb25zLgotICAgICAgICovCi0gICAgICBpZiAoKGltYWdlc19kZWNvZGVkID09
IDApICYmCi0gICAgICAgICAgKChzY3JlZW5faGVpZ2h0IDwgaGVpZ2h0KSB8fCAoc2NyZWVuX3dp
ZHRoIDwgd2lkdGgpIHx8Ci0gICAgICAgICAgICh2ZXJzaW9uID09IDg3KSkpCi0gICAgICB7Ci0g
ICAgICAgIHNjcmVlbl9oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIHNjcmVlbl93aWR0aCA9IHdp
ZHRoOwotICAgICAgICB4X29mZnNldCA9IDA7Ci0gICAgICAgIHlfb2Zmc2V0ID0gMDsKLQotICAg
ICAgICAvLyBDQUxMQkFDSzogSW5mb3JtIHRoZSBkZWNvZGVycGx1Z2luIG9mIG91ciBzaXplLgot
ICAgICAgICBpZiAoY2xpZW50cHRyICYmICFjbGllbnRwdHItPnNldFNpemUoc2NyZWVuX3dpZHRo
LCBzY3JlZW5faGVpZ2h0KSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAg
ICAgIC8qIFdvcmsgYXJvdW5kIG1vcmUgYnJva2VuIEdJRiBmaWxlcyB0aGF0IGhhdmUgemVybyBp
bWFnZQotICAgICAgICAgd2lkdGggb3IgaGVpZ2h0ICovCi0gICAgICBpZiAoIWhlaWdodCB8fCAh
d2lkdGgpIHsKLSAgICAgICAgaGVpZ2h0ID0gc2NyZWVuX2hlaWdodDsKLSAgICAgICAgd2lkdGgg
PSBzY3JlZW5fd2lkdGg7Ci0gICAgICAgIGlmICghaGVpZ2h0IHx8ICF3aWR0aCkKLSAgICAgICAg
ICByZXR1cm4gY2xpZW50cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQoKSA6IGZhbHNlOwotICAg
ICAgfQotCi0gICAgICBpZiAocXVlcnkgPT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZTaXplUXVlcnkg
fHwgaGFsdEF0RnJhbWUgPT0gaW1hZ2VzX2RlY29kZWQpIHsKLSAgICAgICAgLy8gVGhlIGRlY29k
ZXIgbmVlZHMgdG8gc3RvcC4gIEhhbmQgYmFjayB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlIGNvbnN1
bWVkIGZyb20KLSAgICAgICAgLy8gYnVmZmVyIG1pbnVzIDkgKHRoZSBhbW91bnQgd2UgY29uc3Vt
ZWQgdG8gcmVhZCB0aGUgaGVhZGVyKS4KLSAgICAgICAgaWYgKGNsaWVudHB0cikKLSAgICAgICAg
ICAgIGNsaWVudHB0ci0+ZGVjb2RpbmdIYWx0ZWQobGVuICsgOSk7Ci0gICAgICAgIEdFVE4oOSwg
Z2lmX2ltYWdlX2hlYWRlcik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAg
Ci0gICAgICBpbWFnZXNfY291bnQgPSBpbWFnZXNfZGVjb2RlZCArIDE7Ci0KLSAgICAgIGlmIChx
dWVyeSA9PSBHSUZJbWFnZURlY29kZXI6OkdJRkZ1bGxRdWVyeSAmJiAhZnJhbWVfcmVhZGVyKQot
ICAgICAgICBmcmFtZV9yZWFkZXIgPSBuZXcgR0lGRnJhbWVSZWFkZXIoKTsKLQotICAgICAgaWYg
KGZyYW1lX3JlYWRlcikgewotICAgICAgICBmcmFtZV9yZWFkZXItPnhfb2Zmc2V0ID0geF9vZmZz
ZXQ7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+eV9vZmZzZXQgPSB5X29mZnNldDsKLSAgICAgICAg
ZnJhbWVfcmVhZGVyLT5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+d2lk
dGggPSB3aWR0aDsKLQotICAgICAgICAvKiBUaGlzIGNhc2Ugd2lsbCBuZXZlciBiZSB0YWtlbiBp
ZiB0aGlzIGlzIHRoZSBmaXJzdCBpbWFnZSAqLwotICAgICAgICAvKiBiZWluZyBkZWNvZGVkLiBJ
ZiBhbnkgb2YgdGhlIGxhdGVyIGltYWdlcyBhcmUgbGFyZ2VyICAgICAqLwotICAgICAgICAvKiB0
aGFuIHRoZSBzY3JlZW4gc2l6ZSwgd2UgbmVlZCB0byByZWFsbG9jYXRlIGJ1ZmZlcnMuICAgICAq
LwotICAgICAgICBpZiAoc2NyZWVuX3dpZHRoIDwgd2lkdGgpIHsKLSAgICAgICAgICAvKiBYWFgg
RGV2aWFudCEgKi8KLQotICAgICAgICAgIGRlbGV0ZSBbXWZyYW1lX3JlYWRlci0+cm93YnVmOwot
ICAgICAgICAgIHNjcmVlbl93aWR0aCA9IHdpZHRoOwotICAgICAgICAgIGZyYW1lX3JlYWRlci0+
cm93YnVmID0gbmV3IHVuc2lnbmVkIGNoYXJbc2NyZWVuX3dpZHRoXTsKLSAgICAgICAgfSBlbHNl
IGlmICghZnJhbWVfcmVhZGVyLT5yb3didWYpIHsKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPnJv
d2J1ZiA9IG5ldyB1bnNpZ25lZCBjaGFyW3NjcmVlbl93aWR0aF07CisgICAgICAgIGNhc2UgR0lG
Q29uc3VtZUJsb2NrOiB7CisgICAgICAgICAgICBpZiAoISpxKQorICAgICAgICAgICAgICAgIEdF
VE4oMSwgR0lGSW1hZ2VTdGFydCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
R0VUTigqcSwgR0lGU2tpcEJsb2NrKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
LSAgICAgICAgaWYgKCFmcmFtZV9yZWFkZXItPnJvd2J1ZikKLSAgICAgICAgICByZXR1cm4gY2xp
ZW50cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQoKSA6IGZhbHNlOwotICAgICAgICBpZiAoc2Ny
ZWVuX2hlaWdodCA8IGhlaWdodCkKLSAgICAgICAgICBzY3JlZW5faGVpZ2h0ID0gaGVpZ2h0Owot
Ci0gICAgICAgIGlmIChxWzhdICYgMHg0MCkgewotICAgICAgICAgIGZyYW1lX3JlYWRlci0+aW50
ZXJsYWNlZCA9IHRydWU7Ci0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5pcGFzcyA9IDE7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5pbnRlcmxhY2VkID0gZmFsc2U7
Ci0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5pcGFzcyA9IDA7CisgICAgICAgIGNhc2UgR0lGU2tp
cEJsb2NrOiB7CisgICAgICAgICAgICBHRVROKDEsIEdJRkNvbnN1bWVCbG9jayk7CisgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChpbWFnZXNfZGVjb2RlZCA9PSAw
KSB7Ci0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5wcm9ncmVzc2l2ZV9kaXNwbGF5ID0gdHJ1ZTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvKiBPdmVybGF5aW5nIGludGVybGFjZWQsIHRy
YW5zcGFyZW50IEdJRnMgb3ZlcgotICAgICAgICAgICAgIGV4aXN0aW5nIGltYWdlIGRhdGEgdXNp
bmcgdGhlIEhhZWJlcmxpIGRpc3BsYXkgaGFjawotICAgICAgICAgICAgIHJlcXVpcmVzIHNhdmlu
ZyB0aGUgdW5kZXJseWluZyBpbWFnZSBpbiBvcmRlciB0bwotICAgICAgICAgICAgIGF2b2lkIGph
Z2dpZXMgYXQgdGhlIHRyYW5zcGFyZW5jeSBlZGdlcy4gIFdlIGFyZQotICAgICAgICAgICAgIHVu
cHJlcGFyZWQgdG8gZGVhbCB3aXRoIHRoYXQsIHNvIGRvbid0IGRpc3BsYXkgc3VjaAotICAgICAg
ICAgICAgIGltYWdlcyBwcm9ncmVzc2l2ZWx5ICovCi0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5w
cm9ncmVzc2l2ZV9kaXNwbGF5ID0gZmFsc2U7CisgICAgICAgIGNhc2UgR0lGQ29udHJvbEV4dGVu
c2lvbjogeworICAgICAgICAgICAgaWYgKHF1ZXJ5ICE9IEdJRkltYWdlRGVjb2Rlcjo6R0lGRnJh
bWVDb3VudFF1ZXJ5KSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX2ZyYW1lQ29udGV4dCkKKyAg
ICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQgPSBuZXcgR0lGRnJhbWVDb250ZXh0KCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCkgeworICAg
ICAgICAgICAgICAgIGlmICgqcSAmIDB4MSkgeworICAgICAgICAgICAgICAgICAgICBtX2ZyYW1l
Q29udGV4dC0+dHBpeGVsID0gcVszXTsKKyAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRl
eHQtPmlzVHJhbnNwYXJlbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pc1RyYW5zcGFyZW50ID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yaW5nIGdmeCBjb250cm9sIGV4dGVuc2lvbgorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBOT1RFOiBUaGlzIHJlbGllcyBvbiB0
aGUgdmFsdWVzIGluIHRoZSBGcmFtZURpc3Bvc2FsTWV0aG9kIGVudW0KKyAgICAgICAgICAgICAg
ICAvLyBtYXRjaGluZyB0aG9zZSBpbiB0aGUgR0lGIHNwZWMhCisgICAgICAgICAgICAgICAgaW50
IGRpc3Bvc2FsTWV0aG9kID0gKCgqcSkgPj4gMikgJiAweDc7CisgICAgICAgICAgICAgICAgbV9m
cmFtZUNvbnRleHQtPmRpc3Bvc2FsTWV0aG9kID0gKFdlYkNvcmU6OkltYWdlRnJhbWU6OkZyYW1l
RGlzcG9zYWxNZXRob2QpZGlzcG9zYWxNZXRob2Q7CisKKyAgICAgICAgICAgICAgICAvLyBTb21l
IHNwZWNzIHNheSAzcmQgYml0ICh2YWx1ZSA0KSwgb3RoZXIgc3BlY3Mgc2F5IHZhbHVlIDMKKyAg
ICAgICAgICAgICAgICAvLyBMZXQncyBjaG9vc2UgMyAodGhlIG1vcmUgcG9wdWxhcikKKyAgICAg
ICAgICAgICAgICBpZiAoZGlzcG9zYWxNZXRob2QgPT0gNCkKKyAgICAgICAgICAgICAgICAgICAg
bV9mcmFtZUNvbnRleHQtPmRpc3Bvc2FsTWV0aG9kID0gV2ViQ29yZTo6SW1hZ2VGcmFtZTo6RGlz
cG9zZU92ZXJ3cml0ZVByZXZpb3VzOworICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5k
ZWxheVRpbWUgPSBHRVRJTlQxNihxICsgMSkgKiAxMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIEdFVE4oMSwgR0lGQ29uc3VtZUJsb2NrKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAKLSAgICAgICAgLyogQ2xlYXIgc3RhdGUgZnJvbSBsYXN0IGltYWdlICovCi0gICAgICAg
IGZyYW1lX3JlYWRlci0+aXJvdyA9IDA7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+cm93c19yZW1h
aW5pbmcgPSBmcmFtZV9yZWFkZXItPmhlaWdodDsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT5yb3dl
bmQgPSBmcmFtZV9yZWFkZXItPnJvd2J1ZiArIGZyYW1lX3JlYWRlci0+d2lkdGg7Ci0gICAgICAg
IGZyYW1lX3JlYWRlci0+cm93cCA9IGZyYW1lX3JlYWRlci0+cm93YnVmOwotCi0gICAgICAgIC8q
IGJpdHMgcGVyIHBpeGVsIGlzIHFbOF0mMHgwNyAqLwotICAgICAgfQotICAgICAgCi0gICAgICBp
ZiAocVs4XSAmIDB4ODApIC8qIGhhcyBhIGxvY2FsIGNvbG9ybWFwPyAqLwotICAgICAgewotICAg
ICAgICBpbnQgbnVtX2NvbG9ycyA9IDIgPDwgKHFbOF0gJiAweDcpOwotICAgICAgICBjb25zdCB1
bnNpZ25lZCBzaXplID0gMypudW1fY29sb3JzOwotICAgICAgICB1bnNpZ25lZCBjaGFyICptYXAg
PSBmcmFtZV9yZWFkZXIgPyBmcmFtZV9yZWFkZXItPmxvY2FsX2NvbG9ybWFwIDogMDsKLSAgICAg
ICAgaWYgKGZyYW1lX3JlYWRlciAmJiAoIW1hcCB8fCAobnVtX2NvbG9ycyA+IGZyYW1lX3JlYWRl
ci0+bG9jYWxfY29sb3JtYXBfc2l6ZSkpKSB7Ci0gICAgICAgICAgZGVsZXRlIFtdbWFwOwotICAg
ICAgICAgIG1hcCA9IG5ldyB1bnNpZ25lZCBjaGFyW3NpemVdOwotICAgICAgICAgIGlmICghbWFw
KQotICAgICAgICAgICAgcmV0dXJuIGNsaWVudHB0ciA/IGNsaWVudHB0ci0+c2V0RmFpbGVkKCkg
OiBmYWxzZTsKKyAgICAgICAgY2FzZSBHSUZDb21tZW50RXh0ZW5zaW9uOiB7CisgICAgICAgICAg
ICBpZiAoKnEpCisgICAgICAgICAgICAgICAgR0VUTigqcSwgR0lGQ29uc3VtZUNvbW1lbnQpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIEdFVE4oMSwgR0lGSW1hZ2VTdGFydCk7
CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIC8qIFN3aXRjaCB0byB0
aGUgbmV3IGxvY2FsIHBhbGV0dGUgYWZ0ZXIgaXQgbG9hZHMgKi8KLSAgICAgICAgaWYgKGZyYW1l
X3JlYWRlcikgewotICAgICAgICAgIGZyYW1lX3JlYWRlci0+bG9jYWxfY29sb3JtYXAgPSBtYXA7
Ci0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5sb2NhbF9jb2xvcm1hcF9zaXplID0gbnVtX2NvbG9y
czsKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPmlzX2xvY2FsX2NvbG9ybWFwX2RlZmluZWQgPSB0
cnVlOworICAgICAgICBjYXNlIEdJRkNvbnN1bWVDb21tZW50OiB7CisgICAgICAgICAgICBHRVRO
KDEsIEdJRkNvbW1lbnRFeHRlbnNpb24pOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
IAotICAgICAgICBpZiAobGVuIDwgc2l6ZSkgewotICAgICAgICAgIC8vIFVzZSAnaG9sZCcgcGF0
dGVybiB0byBnZXQgdGhlIGltYWdlIGNvbG9ybWFwCi0gICAgICAgICAgR0VUTihzaXplLCBnaWZf
aW1hZ2VfY29sb3JtYXApOwotICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdJRkFwcGxp
Y2F0aW9uRXh0ZW5zaW9uOiB7CisgICAgICAgICAgICAvLyBDaGVjayBmb3IgbmV0c2NhcGUgYXBw
bGljYXRpb24gZXh0ZW5zaW9uLgorICAgICAgICAgICAgaWYgKCFzdHJuY21wKChjaGFyKilxLCAi
TkVUU0NBUEUyLjAiLCAxMSkgfHwgIXN0cm5jbXAoKGNoYXIqKXEsICJBTklNRVhUUzEuMCIsIDEx
KSkKKyAgICAgICAgICAgICAgICBHRVROKDEsIEdJRk5ldHNjYXBlRXh0ZW5zaW9uQmxvY2spOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIEdFVE4oMSwgR0lGQ29uc3VtZUJsb2Nr
KTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIC8vIENvcHkgZXZlcnl0
aGluZyBhbmQgZGlyZWN0bHkgZ28gdG8gZ2lmX2x6d19zdGFydAotICAgICAgICBpZiAoZnJhbWVf
cmVhZGVyKQotICAgICAgICAgIG1lbWNweShmcmFtZV9yZWFkZXItPmxvY2FsX2NvbG9ybWFwLCBi
dWYsIHNpemUpOwotICAgICAgICBidWYgKz0gc2l6ZTsKLSAgICAgICAgbGVuIC09IHNpemU7Ci0g
ICAgICB9IGVsc2UgaWYgKGZyYW1lX3JlYWRlcikgewotICAgICAgICAvKiBTd2l0Y2ggYmFjayB0
byB0aGUgZ2xvYmFsIHBhbGV0dGUgKi8KLSAgICAgICAgZnJhbWVfcmVhZGVyLT5pc19sb2NhbF9j
b2xvcm1hcF9kZWZpbmVkID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBHRVROKDEsIGdpZl9sendf
c3RhcnQpOwotICAgIH0KLSAgICBicmVhazsKLQotICAgIGNhc2UgZ2lmX2ltYWdlX2NvbG9ybWFw
OgotICAgICAgLy8gRXZlcnl0aGluZyBpcyBhbHJlYWR5IGNvcGllZCBpbnRvIGxvY2FsX2NvbG9y
bWFwCi0gICAgICBHRVROKDEsIGdpZl9sendfc3RhcnQpOwotICAgIGJyZWFrOwotCi0gICAgY2Fz
ZSBnaWZfc3ViX2Jsb2NrOgotICAgIHsKLSAgICAgIGlmICgoY291bnQgPSAqcSkgIT0gMCkKLSAg
ICAgIC8qIFN0aWxsIHdvcmtpbmcgb24gdGhlIHNhbWUgaW1hZ2U6IFByb2Nlc3MgbmV4dCBMWlcg
ZGF0YSBibG9jayAqLwotICAgICAgewotICAgICAgICAvKiBNYWtlIHN1cmUgdGhlcmUgYXJlIHN0
aWxsIHJvd3MgbGVmdC4gSWYgdGhlIEdJRiBkYXRhICovCi0gICAgICAgIC8qIGlzIGNvcnJ1cHQs
IHdlIG1heSBub3QgZ2V0IGFuIGV4cGxpY2l0IHRlcm1pbmF0b3IuICAgKi8KLSAgICAgICAgaWYg
KGZyYW1lX3JlYWRlciAmJiBmcmFtZV9yZWFkZXItPnJvd3NfcmVtYWluaW5nID09IDApIHsKLSAg
ICAgICAgICAvKiBUaGlzIGlzIGFuIGlsbGVnYWwgR0lGLCBidXQgd2UgcmVtYWluIHRvbGVyYW50
LiAqLwotICAgICAgICAgIEdFVE4oMSwgZ2lmX3N1Yl9ibG9jayk7CisKKyAgICAgICAgLy8gTmV0
c2NhcGUtc3BlY2lmaWMgR0lGIGV4dGVuc2lvbjogYW5pbWF0aW9uIGxvb3BpbmcuCisgICAgICAg
IGNhc2UgR0lGTmV0c2NhcGVFeHRlbnNpb25CbG9jazogeworICAgICAgICAgICAgaWYgKCpxKQor
ICAgICAgICAgICAgICAgIEdFVE4oKnEsIEdJRkNvbnN1bWVOZXRzY2FwZUV4dGVuc2lvbik7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgR0VUTigxLCBHSUZJbWFnZVN0YXJ0KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8gUGFyc2UgbmV0c2Nh
cGUtc3BlY2lmaWMgYXBwbGljYXRpb24gZXh0ZW5zaW9ucworICAgICAgICBjYXNlIEdJRkNvbnN1
bWVOZXRzY2FwZUV4dGVuc2lvbjogeworICAgICAgICAgICAgaW50IG5ldHNjYXBlRXh0ZW5zaW9u
ID0gcVswXSAmIDc7CisKKyAgICAgICAgICAgIC8vIExvb3AgZW50aXJlIGFuaW1hdGlvbiBzcGVj
aWZpZWQgIyBvZiB0aW1lcy4gT25seSByZWFkIHRoZSBsb29wIGNvdW50IGR1cmluZyB0aGUgZmly
c3QgaXRlcmF0aW9uLgorICAgICAgICAgICAgaWYgKG5ldHNjYXBlRXh0ZW5zaW9uID09IDEpIHsK
KyAgICAgICAgICAgICAgICBtX2xvb3BDb3VudCA9IEdFVElOVDE2KHEgKyAxKTsKKworICAgICAg
ICAgICAgICAgIC8vIFplcm8gbG9vcCBjb3VudCBpcyBpbmZpbml0ZSBhbmltYXRpb24gbG9vcCBy
ZXF1ZXN0LgorICAgICAgICAgICAgICAgIGlmICghbV9sb29wQ291bnQpCisgICAgICAgICAgICAg
ICAgICAgIG1fbG9vcENvdW50ID0gV2ViQ29yZTo6Y0FuaW1hdGlvbkxvb3BJbmZpbml0ZTsKKwor
ICAgICAgICAgICAgICAgIEdFVE4oMSwgR0lGTmV0c2NhcGVFeHRlbnNpb25CbG9jayk7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKG5ldHNjYXBlRXh0ZW5zaW9uID09IDIpIHsKKyAgICAgICAgICAg
ICAgICAvLyBXYWl0IGZvciBzcGVjaWZpZWQgIyBvZiBieXRlcyB0byBlbnRlciBidWZmZXIuCisK
KyAgICAgICAgICAgICAgICAvLyBEb24ndCBkbyB0aGlzLCB0aGlzIGV4dGVuc2lvbiBkb2Vzbid0
IGV4aXN0IChpc24ndCB1c2VkIGF0IGFsbCkKKyAgICAgICAgICAgICAgICAvLyBhbmQgZG9lc24n
dCBkbyBhbnl0aGluZywgYXMgb3VyIHN0cmVhbWluZy9idWZmZXJpbmcgdGFrZXMgY2FyZSBvZiBp
dCBhbGwuLi4KKyAgICAgICAgICAgICAgICAvLyBTZWU6IGh0dHA6Ly9zZW1taXgucGwvY29sb3Iv
ZXhncmFmL2VlZzI0Lmh0bQorICAgICAgICAgICAgICAgIEdFVE4oMSwgR0lGTmV0c2NhcGVFeHRl
bnNpb25CbG9jayk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIDAs
My03IGFyZSB5ZXQgdG8gYmUgZGVmaW5lZCBuZXRzY2FwZSBleHRlbnNpb24gY29kZXMKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+c2V0RmFpbGVkKCkgOiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IEdFVE4oY291bnQsIGdpZl9sencpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgLyogU2Vl
IGlmIHRoZXJlIGFyZSBhbnkgbW9yZSBpbWFnZXMgaW4gdGhpcyBzZXF1ZW5jZS4gKi8KLSAgICAg
IHsKLSAgICAgICAgaW1hZ2VzX2RlY29kZWQrKzsKLQotICAgICAgICAvLyBDQUxMQkFDSzogVGhl
IGZyYW1lIGlzIG5vdyBjb21wbGV0ZS4KLSAgICAgICAgaWYgKGNsaWVudHB0ciAmJiBmcmFtZV9y
ZWFkZXIgJiYgIWNsaWVudHB0ci0+ZnJhbWVDb21wbGV0ZShpbWFnZXNfZGVjb2RlZCAtIDEsIGZy
YW1lX3JlYWRlci0+ZGVsYXlfdGltZSwgZnJhbWVfcmVhZGVyLT5kaXNwb3NhbF9tZXRob2QpKQot
ICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gZnJhbWVDb21wbGV0ZSgpIGhhcyBhbHJlYWR5IGNh
bGxlZAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xpZW50cHRyLT5zZXRGYWlsZWQoKS4K
LQotICAgICAgICAvKiBDbGVhciBzdGF0ZSBmcm9tIHRoaXMgaW1hZ2UgKi8KLSAgICAgICAgaWYg
KGZyYW1lX3JlYWRlcikgewotICAgICAgICAgICAgZnJhbWVfcmVhZGVyLT5pc19sb2NhbF9jb2xv
cm1hcF9kZWZpbmVkID0gZmFsc2U7Ci0gICAgICAgICAgICBmcmFtZV9yZWFkZXItPmlzX3RyYW5z
cGFyZW50ID0gZmFsc2U7CisKKyAgICAgICAgY2FzZSBHSUZJbWFnZUhlYWRlcjogeworICAgICAg
ICAgICAgdW5zaWduZWQgaGVpZ2h0LCB3aWR0aCwgeE9mZnNldCwgeU9mZnNldDsKKworICAgICAg
ICAgICAgLyogR2V0IGltYWdlIG9mZnNldHMsIHdpdGggcmVzcGVjdCB0byB0aGUgc2NyZWVuIG9y
aWdpbiAqLworICAgICAgICAgICAgeE9mZnNldCA9IEdFVElOVDE2KHEpOworICAgICAgICAgICAg
eU9mZnNldCA9IEdFVElOVDE2KHEgKyAyKTsKKworICAgICAgICAgICAgLyogR2V0IGltYWdlIHdp
ZHRoIGFuZCBoZWlnaHQuICovCisgICAgICAgICAgICB3aWR0aCAgPSBHRVRJTlQxNihxICsgNCk7
CisgICAgICAgICAgICBoZWlnaHQgPSBHRVRJTlQxNihxICsgNik7CisKKyAgICAgICAgICAgIC8q
IFdvcmsgYXJvdW5kIGJyb2tlbiBHSUYgZmlsZXMgd2hlcmUgdGhlIGxvZ2ljYWwgc2NyZWVuCisg
ICAgICAgICAgICAgKiBzaXplIGhhcyB3ZWlyZCB3aWR0aCBvciBoZWlnaHQuICBXZSBhc3N1bWUg
dGhhdCBHSUY4N2EKKyAgICAgICAgICAgICAqIGZpbGVzIGRvbid0IGNvbnRhaW4gYW5pbWF0aW9u
cy4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKCFtX2ltYWdlc0RlY29kZWQKKyAg
ICAgICAgICAgICAgICAmJiAoKG1fc2NyZWVuSGVpZ2h0IDwgaGVpZ2h0KSB8fCAobV9zY3JlZW5X
aWR0aCA8IHdpZHRoKSB8fCAobV92ZXJzaW9uID09IDg3KSkpIHsKKyAgICAgICAgICAgICAgICBt
X3NjcmVlbkhlaWdodCA9IGhlaWdodDsKKyAgICAgICAgICAgICAgICBtX3NjcmVlbldpZHRoID0g
d2lkdGg7CisgICAgICAgICAgICAgICAgeE9mZnNldCA9IDA7CisgICAgICAgICAgICAgICAgeU9m
ZnNldCA9IDA7CisKKyAgICAgICAgICAgICAgICAvLyBDQUxMQkFDSzogSW5mb3JtIHRoZSBkZWNv
ZGVycGx1Z2luIG9mIG91ciBzaXplLgorICAgICAgICAgICAgICAgIGlmIChtX2NsaWVudCAmJiAh
bV9jbGllbnQtPnNldFNpemUobV9zY3JlZW5XaWR0aCwgbV9zY3JlZW5IZWlnaHQpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIFdvcmsgYXJvdW5kIG1vcmUgYnJva2VuIEdJRiBmaWxlcyB0aGF0IGhhdmUgemVybyBpbWFn
ZSB3aWR0aCBvciBoZWlnaHQKKyAgICAgICAgICAgIGlmICghaGVpZ2h0IHx8ICF3aWR0aCkgewor
ICAgICAgICAgICAgICAgIGhlaWdodCA9IG1fc2NyZWVuSGVpZ2h0OworICAgICAgICAgICAgICAg
IHdpZHRoID0gbV9zY3JlZW5XaWR0aDsKKyAgICAgICAgICAgICAgICBpZiAoIWhlaWdodCB8fCAh
d2lkdGgpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5z
ZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocXVl
cnkgPT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZTaXplUXVlcnkgfHwgaGFsdEF0RnJhbWUgPT0gbV9p
bWFnZXNEZWNvZGVkKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGRlY29kZXIgbmVlZHMgdG8g
c3RvcC4gSGFuZCBiYWNrIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2UgY29uc3VtZWQgZnJvbQorICAg
ICAgICAgICAgICAgIC8vIGJ1ZmZlciBtaW51cyA5ICh0aGUgYW1vdW50IHdlIGNvbnN1bWVkIHRv
IHJlYWQgdGhlIGhlYWRlcikuCisgICAgICAgICAgICAgICAgaWYgKG1fY2xpZW50KQorICAgICAg
ICAgICAgICAgICAgICBtX2NsaWVudC0+ZGVjb2RpbmdIYWx0ZWQobGVuICsgOSk7CisgICAgICAg
ICAgICAgICAgR0VUTig5LCBHSUZJbWFnZUhlYWRlcik7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1faW1hZ2VzQ291bnQgPSBtX2lt
YWdlc0RlY29kZWQgKyAxOworCisgICAgICAgICAgICBpZiAocXVlcnkgPT0gR0lGSW1hZ2VEZWNv
ZGVyOjpHSUZGdWxsUXVlcnkgJiYgIW1fZnJhbWVDb250ZXh0KQorICAgICAgICAgICAgICAgIG1f
ZnJhbWVDb250ZXh0ID0gbmV3IEdJRkZyYW1lQ29udGV4dCgpOworCisgICAgICAgICAgICBpZiAo
bV9mcmFtZUNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+eE9mZnNl
dCA9IHhPZmZzZXQ7CisgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPnlPZmZzZXQgPSB5
T2Zmc2V0OworICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5oZWlnaHQgPSBoZWlnaHQ7
CisgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPndpZHRoID0gd2lkdGg7CisKKyAgICAg
ICAgICAgICAgICAvKiBUaGlzIGNhc2Ugd2lsbCBuZXZlciBiZSB0YWtlbiBpZiB0aGlzIGlzIHRo
ZSBmaXJzdCBpbWFnZSAqLworICAgICAgICAgICAgICAgIC8qIGJlaW5nIGRlY29kZWQuIElmIGFu
eSBvZiB0aGUgbGF0ZXIgaW1hZ2VzIGFyZSBsYXJnZXIgICAgICovCisgICAgICAgICAgICAgICAg
LyogdGhhbiB0aGUgc2NyZWVuIHNpemUsIHdlIG5lZWQgdG8gcmVhbGxvY2F0ZSBidWZmZXJzLiAg
ICAgKi8KKyAgICAgICAgICAgICAgICBpZiAobV9zY3JlZW5XaWR0aCA8IHdpZHRoKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8qIFhYWCBEZXZpYW50ISAqLworICAgICAgICAgICAgICAgICAgICBk
ZWxldGUgW11tX2ZyYW1lQ29udGV4dC0+cm93YnVmOworICAgICAgICAgICAgICAgICAgICBtX3Nj
cmVlbldpZHRoID0gd2lkdGg7CisgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5y
b3didWYgPSBuZXcgdW5zaWduZWQgY2hhclttX3NjcmVlbldpZHRoXTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKCFtX2ZyYW1lQ29udGV4dC0+cm93YnVmKQorICAgICAgICAgICAgICAgICAg
ICBtX2ZyYW1lQ29udGV4dC0+cm93YnVmID0gbmV3IHVuc2lnbmVkIGNoYXJbbV9zY3JlZW5XaWR0
aF07CisKKyAgICAgICAgICAgICAgICBpZiAoIW1fZnJhbWVDb250ZXh0LT5yb3didWYpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5zZXRGYWlsZWQoKSA6
IGZhbHNlOworICAgICAgICAgICAgICAgIGlmIChtX3NjcmVlbkhlaWdodCA8IGhlaWdodCkKKyAg
ICAgICAgICAgICAgICAgICAgbV9zY3JlZW5IZWlnaHQgPSBoZWlnaHQ7CisKKyAgICAgICAgICAg
ICAgICBpZiAocVs4XSAmIDB4NDApIHsKKyAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRl
eHQtPmludGVybGFjZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4
dC0+aXBhc3MgPSAxOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIG1fZnJhbWVDb250ZXh0LT5pbnRlcmxhY2VkID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgIG1fZnJhbWVDb250ZXh0LT5pcGFzcyA9IDA7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgaWYgKCFtX2ltYWdlc0RlY29kZWQpCisgICAgICAgICAgICAgICAgICAgIG1f
ZnJhbWVDb250ZXh0LT5wcm9ncmVzc2l2ZURpc3BsYXkgPSB0cnVlOworICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBPdmVybGF5aW5nIGludGVybGFjZWQsIHRy
YW5zcGFyZW50IEdJRnMgb3ZlcgorICAgICAgICAgICAgICAgICAgICAvLyBleGlzdGluZyBpbWFn
ZSBkYXRhIHVzaW5nIHRoZSBIYWViZXJsaSBkaXNwbGF5IGhhY2sKKyAgICAgICAgICAgICAgICAg
ICAgLy8gcmVxdWlyZXMgc2F2aW5nIHRoZSB1bmRlcmx5aW5nIGltYWdlIGluIG9yZGVyIHRvCisg
ICAgICAgICAgICAgICAgICAgIC8vIGF2b2lkIGphZ2dpZXMgYXQgdGhlIHRyYW5zcGFyZW5jeSBl
ZGdlcy4gV2UgYXJlCisgICAgICAgICAgICAgICAgICAgIC8vIHVucHJlcGFyZWQgdG8gZGVhbCB3
aXRoIHRoYXQsIHNvIGRvbid0IGRpc3BsYXkgc3VjaAorICAgICAgICAgICAgICAgICAgICAvLyBp
bWFnZXMgcHJvZ3Jlc3NpdmVseQorICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+
cHJvZ3Jlc3NpdmVEaXNwbGF5ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgLy8gQ2xlYXIgc3RhdGUgZnJvbSBsYXN0IGltYWdlLgorICAgICAgICAgICAgICAg
IG1fZnJhbWVDb250ZXh0LT5pcm93ID0gMDsKKyAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4
dC0+cm93c1JlbWFpbmluZyA9IG1fZnJhbWVDb250ZXh0LT5oZWlnaHQ7CisgICAgICAgICAgICAg
ICAgbV9mcmFtZUNvbnRleHQtPnJvd2VuZCA9IG1fZnJhbWVDb250ZXh0LT5yb3didWYgKyBtX2Zy
YW1lQ29udGV4dC0+d2lkdGg7CisgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPnJvd3Ag
PSBtX2ZyYW1lQ29udGV4dC0+cm93YnVmOworCisgICAgICAgICAgICAgICAgLy8gYml0cyBwZXIg
cGl4ZWwgaXMgcVs4XSYweDA3CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGhhcyBh
IGxvY2FsIGNvbG9ybWFwPworICAgICAgICAgICAgaWYgKHFbOF0gJiAweDgwKSB7CisgICAgICAg
ICAgICAgICAgaW50IG51bUNvbG9ycyA9IDIgPDwgKHFbOF0gJiAweDcpOworICAgICAgICAgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIHNpemUgPSAzICogbnVtQ29sb3JzOworICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGNoYXIgKm1hcCA9IG1fZnJhbWVDb250ZXh0ID8gbV9mcmFtZUNvbnRleHQtPmxv
Y2FsQ29sb3JtYXAgOiAwOworICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCAmJiAo
IW1hcCB8fCAobnVtQ29sb3JzID4gbV9mcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXBTaXplKSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFtdbWFwOworICAgICAgICAgICAgICAgICAg
ICBtYXAgPSBuZXcgdW5zaWduZWQgY2hhcltzaXplXTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFtYXApCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVu
dC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAvLyBTd2l0Y2ggdG8gdGhlIG5ldyBsb2NhbCBwYWxldHRlIGFmdGVyIGl0IGxvYWRzCisg
ICAgICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAg
IG1fZnJhbWVDb250ZXh0LT5sb2NhbENvbG9ybWFwID0gbWFwOworICAgICAgICAgICAgICAgICAg
ICBtX2ZyYW1lQ29udGV4dC0+bG9jYWxDb2xvcm1hcFNpemUgPSBudW1Db2xvcnM7CisgICAgICAg
ICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pc0xvY2FsQ29sb3JtYXBEZWZpbmVkID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAobGVuIDwgc2l6ZSkg
eworICAgICAgICAgICAgICAgICAgICAvLyBVc2UgJ2hvbGQnIHBhdHRlcm4gdG8gZ2V0IHRoZSBp
bWFnZSBjb2xvcm1hcAorICAgICAgICAgICAgICAgICAgICBHRVROKHNpemUsIEdJRkltYWdlQ29s
b3JtYXApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAvLyBDb3B5IGV2ZXJ5dGhpbmcgYW5kIGRpcmVjdGx5IGdvIHRvIEdJ
RkxaV1N0YXJ0CisgICAgICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250ZXh0KQorICAgICAgICAg
ICAgICAgICAgICBtZW1jcHkobV9mcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXAsIGJ1Ziwgc2l6
ZSk7CisgICAgICAgICAgICAgICAgYnVmICs9IHNpemU7CisgICAgICAgICAgICAgICAgbGVuIC09
IHNpemU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fZnJhbWVDb250ZXh0KSB7CisgICAgICAg
ICAgICAgICAgLy8gU3dpdGNoIGJhY2sgdG8gdGhlIGdsb2JhbCBwYWxldHRlCisgICAgICAgICAg
ICAgICAgbV9mcmFtZUNvbnRleHQtPmlzTG9jYWxDb2xvcm1hcERlZmluZWQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIEdFVE4oMSwgR0lGTFpXU3RhcnQpOworICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBHRVROKDEsIGdpZl9pbWFnZV9zdGFydCk7
Ci0gICAgICB9Ci0gICAgfQotICAgIGJyZWFrOworICAgICAgICBjYXNlIEdJRkltYWdlQ29sb3Jt
YXA6IHsKKyAgICAgICAgICAgIC8vIEV2ZXJ5dGhpbmcgaXMgYWxyZWFkeSBjb3BpZWQgaW50byBs
b2NhbENvbG9ybWFwCisgICAgICAgICAgICBHRVROKDEsIEdJRkxaV1N0YXJ0KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CiAKLSAgICBjYXNlIGdpZl9kb25lOgotICAgICAgLy8gV2hl
biB0aGUgR0lGIGlzIGRvbmUsIHdlIGNhbiBzdG9wLgotICAgICAgaWYgKGNsaWVudHB0cikKLSAg
ICAgICAgY2xpZW50cHRyLT5naWZDb21wbGV0ZSgpOwotICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGNhc2UgR0lGU3ViQmxvY2s6IHsKKyAgICAgICAgICAgIC8vIFN0aWxsIHdvcmtpbmcgb24g
dGhlIHNhbWUgaW1hZ2U6IFByb2Nlc3MgbmV4dCBMWlcgZGF0YSBibG9jay4KKyAgICAgICAgICAg
IGlmICgobV9jb3VudCA9ICpxKSkgeworICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGVy
ZSBhcmUgc3RpbGwgcm93cyBsZWZ0LiBJZiB0aGUgR0lGIGRhdGEKKyAgICAgICAgICAgICAgICAv
LyBpcyBjb3JydXB0LCB3ZSBtYXkgbm90IGdldCBhbiBleHBsaWNpdCB0ZXJtaW5hdG9yLgorICAg
ICAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCAmJiAhbV9mcmFtZUNvbnRleHQtPnJvd3NS
ZW1haW5pbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBpbGxlZ2FsIEdJ
RiwgYnV0IHdlIHJlbWFpbiB0b2xlcmFudC4KKyAgICAgICAgICAgICAgICAgICAgR0VUTigxLCBH
SUZTdWJCbG9jayk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEdFVE4obV9j
b3VudCwgR0lGTFpXKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8g
U2VlIGlmIHRoZXJlIGFyZSBhbnkgbW9yZSBpbWFnZXMgaW4gdGhpcyBzZXF1ZW5jZS4KKyAgICAg
ICAgICAgICAgICBtX2ltYWdlc0RlY29kZWQrKzsKKworICAgICAgICAgICAgICAgIC8vIENBTExC
QUNLOiBUaGUgZnJhbWUgaXMgbm93IGNvbXBsZXRlLgorICAgICAgICAgICAgICAgIGlmIChtX2Ns
aWVudCAmJiBtX2ZyYW1lQ29udGV4dCAmJiAhbV9jbGllbnQtPmZyYW1lQ29tcGxldGUobV9pbWFn
ZXNEZWNvZGVkIC0gMSwgbV9mcmFtZUNvbnRleHQtPmRlbGF5VGltZSwgbV9mcmFtZUNvbnRleHQt
PmRpc3Bvc2FsTWV0aG9kKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBm
cmFtZUNvbXBsZXRlKCkgaGFzIGFscmVhZHkgY2FsbGVkIG1fY2xpZW50LT5zZXRGYWlsZWQoKS4K
KworICAgICAgICAgICAgICAgIC8vIENsZWFyIHN0YXRlIGZyb20gdGhpcyBpbWFnZQorICAgICAg
ICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCkgeworICAgICAgICAgICAgICAgICAgICBtX2Zy
YW1lQ29udGV4dC0+aXNMb2NhbENvbG9ybWFwRGVmaW5lZCA9IGZhbHNlOworICAgICAgICAgICAg
ICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXNUcmFuc3BhcmVudCA9IGZhbHNlOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIEdFVE4oMSwgR0lGSW1hZ2VTdGFydCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogCi0gICAgLy8gV2Ugc2hv
dWxkbid0IGV2ZXIgZ2V0IGhlcmUuCi0gICAgZGVmYXVsdDoKLSAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEdJRkRvbmU6IHsKKyAgICAgICAgICAgIC8vIFdoZW4gdGhlIEdJRiBpcyBkb25lLCB3
ZSBjYW4gc3RvcC4KKyAgICAgICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgICAgICAgICBt
X2NsaWVudC0+Z2lmQ29tcGxldGUoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8vIFdlIHNob3VsZG4ndCBldmVy
IGdldCBoZXJlLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICB9Ci0gIH0KLQot
ICAvLyBDb3B5IHRoZSBsZWZ0b3ZlciBpbnRvIGdzLT5ob2xkCi0gIGJ5dGVzX2luX2hvbGQgPSBs
ZW47Ci0gIGlmIChsZW4pIHsKLSAgICAvLyBBZGQgd2hhdCB3ZSBoYXZlIHNvZmFyIHRvIHRoZSBi
bG9jawotICAgIHVuc2lnbmVkIGNoYXIqIHA7Ci0gICAgaWYgKHN0YXRlID09IGdpZl9nbG9iYWxf
Y29sb3JtYXApCi0gICAgICBwID0gZ2xvYmFsX2NvbG9ybWFwOwotICAgIGVsc2UgaWYgKHN0YXRl
ID09IGdpZl9pbWFnZV9jb2xvcm1hcCkKLSAgICAgIHAgPSBmcmFtZV9yZWFkZXIgPyBmcmFtZV9y
ZWFkZXItPmxvY2FsX2NvbG9ybWFwIDogMDsKLSAgICBlbHNlCi0gICAgICBwID0gaG9sZDsKLSAg
ICBpZiAocCkKLSAgICAgIG1lbWNweShwLCBidWYsIGxlbik7Ci0gICAgYnl0ZXNfdG9fY29uc3Vt
ZSAtPSBsZW47Ci0gIH0KLQotICBpZiAoY2xpZW50cHRyKQotICAgIGNsaWVudHB0ci0+ZGVjb2Rp
bmdIYWx0ZWQoMCk7Ci0gIHJldHVybiBmYWxzZTsKKworICAgIC8vIENvcHkgdGhlIGxlZnRvdmVy
IGludG8gbV9mcmFtZUNvbnRleHQtPm1faG9sZAorICAgIG1fYnl0ZXNJbkhvbGQgPSBsZW47Cisg
ICAgaWYgKGxlbikgeworICAgICAgICAvLyBBZGQgd2hhdCB3ZSBoYXZlIHNvZmFyIHRvIHRoZSBi
bG9jaworICAgICAgICB1bnNpZ25lZCBjaGFyKiBwOworICAgICAgICBpZiAobV9zdGF0ZSA9PSBH
SUZHbG9iYWxDb2xvcm1hcCkKKyAgICAgICAgICAgIHAgPSBtX2dsb2JhbENvbG9ybWFwOworICAg
ICAgICBlbHNlIGlmIChtX3N0YXRlID09IEdJRkltYWdlQ29sb3JtYXApCisgICAgICAgICAgICBw
ID0gbV9mcmFtZUNvbnRleHQgPyBtX2ZyYW1lQ29udGV4dC0+bG9jYWxDb2xvcm1hcCA6IDA7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHAgPSBtX2hvbGQ7CisgICAgICAgIGlmIChwKQorICAg
ICAgICAgICAgbWVtY3B5KHAsIGJ1ZiwgbGVuKTsKKyAgICAgICAgbV9ieXRlc1RvQ29uc3VtZSAt
PSBsZW47CisgICAgfQorCisgICAgaWYgKG1fY2xpZW50KQorICAgICAgICBtX2NsaWVudC0+ZGVj
b2RpbmdIYWx0ZWQoMCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIu
aAppbmRleCAwNTI1MzJjNjQ1MzYzMTQ3NzQ4ZjliYTY0ZWE3OGExNTFmZWUzYWRlLi5jMDgyOTE4
YzQzMTY2YjM4MDI5ZWJkZjRmMjRjZjM0ZGU2OWQ3NDliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIu
aApAQCAtNDksMTY1ICs0OSwxODYgQEAKIAogY29uc3QgaW50IGNMb29wQ291bnROb3RTZWVuID0g
LTI7CiAKLS8qIGdpZjIuaCAgCi0gICBUaGUgaW50ZXJmYWNlIGZvciB0aGUgR0lGODcvODlhIGRl
Y29kZXIuIAotKi8KLS8vIExpc3Qgb2YgcG9zc2libGUgcGFyc2luZyBzdGF0ZXMKLXR5cGVkZWYg
ZW51bSB7Ci0gICAgZ2lmX3R5cGUsCi0gICAgZ2lmX2dsb2JhbF9oZWFkZXIsCi0gICAgZ2lmX2ds
b2JhbF9jb2xvcm1hcCwKLSAgICBnaWZfaW1hZ2Vfc3RhcnQsICAgICAgICAgICAgCi0gICAgZ2lm
X2ltYWdlX2hlYWRlciwKLSAgICBnaWZfaW1hZ2VfY29sb3JtYXAsCi0gICAgZ2lmX2ltYWdlX2Jv
ZHksCi0gICAgZ2lmX2x6d19zdGFydCwKLSAgICBnaWZfbHp3LAotICAgIGdpZl9zdWJfYmxvY2ss
Ci0gICAgZ2lmX2V4dGVuc2lvbiwKLSAgICBnaWZfY29udHJvbF9leHRlbnNpb24sCi0gICAgZ2lm
X2NvbnN1bWVfYmxvY2ssCi0gICAgZ2lmX3NraXBfYmxvY2ssCi0gICAgZ2lmX2RvbmUsCi0gICAg
Z2lmX2NvbW1lbnRfZXh0ZW5zaW9uLAotICAgIGdpZl9hcHBsaWNhdGlvbl9leHRlbnNpb24sCi0g
ICAgZ2lmX25ldHNjYXBlX2V4dGVuc2lvbl9ibG9jaywKLSAgICBnaWZfY29uc3VtZV9uZXRzY2Fw
ZV9leHRlbnNpb24sCi0gICAgZ2lmX2NvbnN1bWVfY29tbWVudAotfSBnc3RhdGU7Ci0KLXN0cnVj
dCBHSUZGcmFtZVJlYWRlciB7CisvLyBMaXN0IG9mIHBvc3NpYmxlIHBhcnNpbmcgc3RhdGVzLgor
ZW51bSBHSUZTdGF0ZSB7CisgICAgR0lGVHlwZSwKKyAgICBHSUZHbG9iYWxIZWFkZXIsCisgICAg
R0lGR2xvYmFsQ29sb3JtYXAsCisgICAgR0lGSW1hZ2VTdGFydCwgICAgICAgICAgICAKKyAgICBH
SUZJbWFnZUhlYWRlciwKKyAgICBHSUZJbWFnZUNvbG9ybWFwLAorICAgIEdJRkltYWdlQm9keSwK
KyAgICBHSUZMWldTdGFydCwKKyAgICBHSUZMWlcsCisgICAgR0lGU3ViQmxvY2ssCisgICAgR0lG
RXh0ZW5zaW9uLAorICAgIEdJRkNvbnRyb2xFeHRlbnNpb24sCisgICAgR0lGQ29uc3VtZUJsb2Nr
LAorICAgIEdJRlNraXBCbG9jaywKKyAgICBHSUZEb25lLAorICAgIEdJRkNvbW1lbnRFeHRlbnNp
b24sCisgICAgR0lGQXBwbGljYXRpb25FeHRlbnNpb24sCisgICAgR0lGTmV0c2NhcGVFeHRlbnNp
b25CbG9jaywKKyAgICBHSUZDb25zdW1lTmV0c2NhcGVFeHRlbnNpb24sCisgICAgR0lGQ29uc3Vt
ZUNvbW1lbnQKK307CisKK3N0cnVjdCBHSUZGcmFtZUNvbnRleHQgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIC8qIExaVyBkZWNvZGVyIHN0YXRlIG1hY2hpbmUg
Ki8KLSAgICB1bnNpZ25lZCBjaGFyICpzdGFja3A7ICAgICAgICAgICAgICAvKiBDdXJyZW50IHN0
YWNrIHBvaW50ZXIgKi8KKyAgICAvLyBMWlcgZGVjb2RlciBzdGF0ZSBtYWNoaW5lLgorICAgIHVu
c2lnbmVkIGNoYXIgKnN0YWNrcDsgLy8gQ3VycmVudCBzdGFjayBwb2ludGVyLgogICAgIGludCBk
YXRhc2l6ZTsKICAgICBpbnQgY29kZXNpemU7CiAgICAgaW50IGNvZGVtYXNrOwotICAgIGludCBj
bGVhcl9jb2RlOyAgICAgICAgICAgICAvKiBDb2Rld29yZCB1c2VkIHRvIHRyaWdnZXIgZGljdGlv
bmFyeSByZXNldCAqLwotICAgIGludCBhdmFpbDsgICAgICAgICAgICAgICAgICAvKiBJbmRleCBv
ZiBuZXh0IGF2YWlsYWJsZSBzbG90IGluIGRpY3Rpb25hcnkgKi8KKyAgICBpbnQgY2xlYXJDb2Rl
OyAvLyBDb2Rld29yZCB1c2VkIHRvIHRyaWdnZXIgZGljdGlvbmFyeSByZXNldC4KKyAgICBpbnQg
YXZhaWw7IC8vIEluZGV4IG9mIG5leHQgYXZhaWxhYmxlIHNsb3QgaW4gZGljdGlvbmFyeS4KICAg
ICBpbnQgb2xkY29kZTsKICAgICB1bnNpZ25lZCBjaGFyIGZpcnN0Y2hhcjsKLSAgICBpbnQgYml0
czsgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIHVucmVhZCBiaXRzIGluICJkYXR1bSIg
Ki8KLSAgICBpbnQgZGF0dW07ICAgICAgICAgICAgICAgIC8qIDMyLWJpdCBpbnB1dCBidWZmZXIg
Ki8KLQotICAgIC8qIE91dHB1dCBzdGF0ZSBtYWNoaW5lICovCi0gICAgaW50IGlwYXNzOyAgICAg
ICAgICAgICAgICAgIC8qIEludGVybGFjZSBwYXNzOyBSYW5nZXMgMS00IGlmIGludGVybGFjZWQu
ICovCi0gICAgdW5zaWduZWQgaW50IHJvd3NfcmVtYWluaW5nOyAgICAgICAgLyogUm93cyByZW1h
aW5pbmcgdG8gYmUgb3V0cHV0ICovCi0gICAgdW5zaWduZWQgaW50IGlyb3c7ICAgICAgICAgICAg
ICAgICAgLyogQ3VycmVudCBvdXRwdXQgcm93LCBzdGFydGluZyBhdCB6ZXJvICovCi0gICAgdW5z
aWduZWQgY2hhciAqcm93YnVmOyAgICAgICAgICAgICAgLyogU2luZ2xlIHNjYW5saW5lIHRlbXBv
cmFyeSBidWZmZXIgKi8KLSAgICB1bnNpZ25lZCBjaGFyICpyb3dlbmQ7ICAgICAgICAgICAgICAv
KiBQb2ludGVyIHRvIGVuZCBvZiByb3didWYgKi8KLSAgICB1bnNpZ25lZCBjaGFyICpyb3dwOyAg
ICAgICAgICAgICAgICAvKiBDdXJyZW50IG91dHB1dCBwb2ludGVyICovCi0KLSAgICAvKiBQYXJh
bWV0ZXJzIGZvciBpbWFnZSBmcmFtZSBjdXJyZW50bHkgYmVpbmcgZGVjb2RlZCAqLwotICAgIHVu
c2lnbmVkIGludCB4X29mZnNldCwgeV9vZmZzZXQ7ICAgIC8qIFdpdGggcmVzcGVjdCB0byAic2Ny
ZWVuIiBvcmlnaW4gKi8KLSAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0LCB3aWR0aDsKLSAgICBpbnQg
dHBpeGVsOyAgICAgICAgICAgICAgICAgLyogSW5kZXggb2YgdHJhbnNwYXJlbnQgcGl4ZWwgKi8K
LSAgICBXZWJDb3JlOjpJbWFnZUZyYW1lOjpGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsX21l
dGhvZDsgICAvKiBSZXN0b3JlIHRvIGJhY2tncm91bmQsIGxlYXZlIGluIHBsYWNlLCBldGMuKi8K
LSAgICB1bnNpZ25lZCBjaGFyICpsb2NhbF9jb2xvcm1hcDsgICAgLyogUGVyLWltYWdlIGNvbG9y
bWFwICovCi0gICAgaW50IGxvY2FsX2NvbG9ybWFwX3NpemU7ICAgIC8qIFNpemUgb2YgbG9jYWwg
Y29sb3JtYXAgYXJyYXkuICovCisgICAgaW50IGJpdHM7IC8vIE51bWJlciBvZiB1bnJlYWQgYml0
cyBpbiAiZGF0dW0iLgorICAgIGludCBkYXR1bTsgLy8gMzItYml0IGlucHV0IGJ1ZmZlci4KKwor
ICAgIC8vIE91dHB1dCBzdGF0ZSBtYWNoaW5lLgorICAgIGludCBpcGFzczsgLy8gSW50ZXJsYWNl
IHBhc3M7IFJhbmdlcyAxLTQgaWYgaW50ZXJsYWNlZC4KKyAgICB1bnNpZ25lZCByb3dzUmVtYWlu
aW5nOyAvLyBSb3dzIHJlbWFpbmluZyB0byBiZSBvdXRwdXQuCisgICAgdW5zaWduZWQgaXJvdzsg
Ly8gQ3VycmVudCBvdXRwdXQgcm93LCBzdGFydGluZyBhdCB6ZXJvLgorICAgIHVuc2lnbmVkIGNo
YXIgKnJvd2J1ZjsgLy8gU2luZ2xlIHNjYW5saW5lIHRlbXBvcmFyeSBidWZmZXIuCisgICAgdW5z
aWduZWQgY2hhciAqcm93ZW5kOyAvLyBQb2ludGVyIHRvIGVuZCBvZiByb3didWYuCisgICAgdW5z
aWduZWQgY2hhciAqcm93cDsgLy8gQ3VycmVudCBvdXRwdXQgcG9pbnRlci4KKworICAgIC8vIFBh
cmFtZXRlcnMgZm9yIGltYWdlIGZyYW1lIGN1cnJlbnRseSBiZWluZyBkZWNvZGVkLgorICAgIHVu
c2lnbmVkIHhPZmZzZXQ7CisgICAgdW5zaWduZWQgeU9mZnNldDsgLy8gV2l0aCByZXNwZWN0IHRv
ICJzY3JlZW4iIG9yaWdpbi4KKyAgICB1bnNpZ25lZCB3aWR0aDsKKyAgICB1bnNpZ25lZCBoZWln
aHQ7CisgICAgaW50IHRwaXhlbDsgLy8gSW5kZXggb2YgdHJhbnNwYXJlbnQgcGl4ZWwuCisgICAg
V2ViQ29yZTo6SW1hZ2VGcmFtZTo6RnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZDsg
Ly8gUmVzdG9yZSB0byBiYWNrZ3JvdW5kLCBsZWF2ZSBpbiBwbGFjZSwgZXRjLgorICAgIHVuc2ln
bmVkIGNoYXIgKmxvY2FsQ29sb3JtYXA7IC8vIFBlci1pbWFnZSBjb2xvcm1hcC4KKyAgICBpbnQg
bG9jYWxDb2xvcm1hcFNpemU7IC8vIFNpemUgb2YgbG9jYWwgY29sb3JtYXAgYXJyYXkuCiAgICAg
Ci0gICAgYm9vbCBpc19sb2NhbF9jb2xvcm1hcF9kZWZpbmVkIDogMTsKLSAgICBib29sIHByb2dy
ZXNzaXZlX2Rpc3BsYXkgOiAxOyAgICAvKiBJZiBUUlVFLCBkbyBIYWViZXJsaSBpbnRlcmxhY2Ug
aGFjayAqLwotICAgIGJvb2wgaW50ZXJsYWNlZCA6IDE7ICAgICAgICAgICAgIC8qIFRSVUUsIGlm
IHNjYW5saW5lcyBhcnJpdmUgaW50ZXJsYWNlZCBvcmRlciAqLwotICAgIGJvb2wgaXNfdHJhbnNw
YXJlbnQgOiAxOyAgICAgICAgIC8qIFRSVUUsIGlmIHRwaXhlbCBpcyB2YWxpZCAqLwotCi0gICAg
dW5zaWduZWQgZGVsYXlfdGltZTsgICAgICAgIC8qIERpc3BsYXkgdGltZSwgaW4gbWlsbGlzZWNv
bmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhpcyBpbWFnZSBp
biBhIG11bHRpLWltYWdlIEdJRiAqLwotCi0KLSAgICB1bnNpZ25lZCBzaG9ydCogIHByZWZpeDsg
ICAgICAgICAgLyogTFpXIGRlY29kaW5nIHRhYmxlcyAqLwotICAgIHVuc2lnbmVkIGNoYXIqICAg
c3VmZml4OyAgICAgICAgICAvKiBMWlcgZGVjb2RpbmcgdGFibGVzICovCi0gICAgdW5zaWduZWQg
Y2hhciogICBzdGFjazsgICAgICAgICAgIC8qIEJhc2Ugb2YgTFpXIGRlY29kZXIgc3RhY2sgKi8K
LQotCi0gICAgR0lGRnJhbWVSZWFkZXIoKSB7Ci0gICAgICAgIHN0YWNrcCA9IDA7Ci0gICAgICAg
IGRhdGFzaXplID0gY29kZXNpemUgPSBjb2RlbWFzayA9IGNsZWFyX2NvZGUgPSBhdmFpbCA9IG9s
ZGNvZGUgPSAwOwotICAgICAgICBmaXJzdGNoYXIgPSAwOwotICAgICAgICBiaXRzID0gZGF0dW0g
PSAwOwotICAgICAgICBpcGFzcyA9IDA7Ci0gICAgICAgIHJvd3NfcmVtYWluaW5nID0gaXJvdyA9
IDA7Ci0gICAgICAgIHJvd2J1ZiA9IHJvd2VuZCA9IHJvd3AgPSAwOwotCi0gICAgICAgIHhfb2Zm
c2V0ID0geV9vZmZzZXQgPSB3aWR0aCA9IGhlaWdodCA9IDA7Ci0gICAgICAgIHRwaXhlbCA9IDA7
Ci0gICAgICAgIGRpc3Bvc2FsX21ldGhvZCA9IFdlYkNvcmU6OkltYWdlRnJhbWU6OkRpc3Bvc2VO
b3RTcGVjaWZpZWQ7Ci0KLSAgICAgICAgbG9jYWxfY29sb3JtYXAgPSAwOwotICAgICAgICBsb2Nh
bF9jb2xvcm1hcF9zaXplID0gMDsKLSAgICAgICAgaXNfbG9jYWxfY29sb3JtYXBfZGVmaW5lZCA9
IHByb2dyZXNzaXZlX2Rpc3BsYXkgPSBpc190cmFuc3BhcmVudCA9IGludGVybGFjZWQgPSBmYWxz
ZTsKLQotICAgICAgICBkZWxheV90aW1lID0gMDsKLQotICAgICAgICBwcmVmaXggPSAwOwotICAg
ICAgICBzdWZmaXggPSBzdGFjayA9IDA7CisgICAgYm9vbCBpc0xvY2FsQ29sb3JtYXBEZWZpbmVk
IDogMTsKKyAgICBib29sIHByb2dyZXNzaXZlRGlzcGxheSA6IDE7IC8vIElmIHRydWUsIGRvIEhh
ZWJlcmxpIGludGVybGFjZSBoYWNrLgorICAgIGJvb2wgaW50ZXJsYWNlZCA6IDE7IC8vIFRydWUs
IGlmIHNjYW5saW5lcyBhcnJpdmUgaW50ZXJsYWNlZCBvcmRlci4KKyAgICBib29sIGlzVHJhbnNw
YXJlbnQgOiAxOyAvLyBUUlVFLCBpZiB0cGl4ZWwgaXMgdmFsaWQuCisKKyAgICB1bnNpZ25lZCBk
ZWxheVRpbWU7IC8vIERpc3BsYXkgdGltZSwgaW4gbWlsbGlzZWNvbmRzLCBmb3IgdGhpcyBpbWFn
ZSBpbiBhIG11bHRpLWltYWdlIEdJRi4KKworICAgIHVuc2lnbmVkIHNob3J0KiBwcmVmaXg7IC8v
IExaVyBkZWNvZGluZyB0YWJsZXMuCisgICAgdW5zaWduZWQgY2hhciogc3VmZml4OyAvLyBMWlcg
ZGVjb2RpbmcgdGFibGVzLgorICAgIHVuc2lnbmVkIGNoYXIqIHN0YWNrOyAvLyBCYXNlIG9mIExa
VyBkZWNvZGVyIHN0YWNrLgorCisgICAgR0lGRnJhbWVDb250ZXh0KCkKKyAgICAgICAgOiBzdGFj
a3AoMCkKKyAgICAgICAgLCBkYXRhc2l6ZSgwKQorICAgICAgICAsIGNvZGVzaXplKDApCisgICAg
ICAgICwgY29kZW1hc2soMCkKKyAgICAgICAgLCBjbGVhckNvZGUoMCkKKyAgICAgICAgLCBhdmFp
bCgwKQorICAgICAgICAsIG9sZGNvZGUoMCkKKyAgICAgICAgLCBmaXJzdGNoYXIoMCkKKyAgICAg
ICAgLCBiaXRzKDApCisgICAgICAgICwgZGF0dW0oMCkKKyAgICAgICAgLCBpcGFzcygwKQorICAg
ICAgICAsIHJvd3NSZW1haW5pbmcoMCkKKyAgICAgICAgLCBpcm93KDApCisgICAgICAgICwgcm93
YnVmKDApCisgICAgICAgICwgcm93ZW5kKDApCisgICAgICAgICwgcm93cCgwKQorICAgICAgICAs
IHhPZmZzZXQoMCkKKyAgICAgICAgLCB5T2Zmc2V0KDApCisgICAgICAgICwgd2lkdGgoMCkKKyAg
ICAgICAgLCBoZWlnaHQoMCkKKyAgICAgICAgLCB0cGl4ZWwoMCkKKyAgICAgICAgLCBkaXNwb3Nh
bE1ldGhvZChXZWJDb3JlOjpJbWFnZUZyYW1lOjpEaXNwb3NlTm90U3BlY2lmaWVkKQorICAgICAg
ICAsIGxvY2FsQ29sb3JtYXAoMCkKKyAgICAgICAgLCBsb2NhbENvbG9ybWFwU2l6ZSgwKQorICAg
ICAgICAsIGlzTG9jYWxDb2xvcm1hcERlZmluZWQoZmFsc2UpCisgICAgICAgICwgcHJvZ3Jlc3Np
dmVEaXNwbGF5KGZhbHNlKQorICAgICAgICAsIGludGVybGFjZWQoZmFsc2UpCisgICAgICAgICwg
aXNUcmFuc3BhcmVudChmYWxzZSkKKyAgICAgICAgLCBkZWxheVRpbWUoMCkKKyAgICAgICAgLCBw
cmVmaXgoMCkKKyAgICAgICAgLCBzdWZmaXgoMCkKKyAgICAgICAgLCBzdGFjaygwKQorICAgIHsK
ICAgICB9CiAgICAgCi0gICAgfkdJRkZyYW1lUmVhZGVyKCkgewotICAgICAgICBkZWxldGUgW11y
b3didWY7Ci0gICAgICAgIGRlbGV0ZSBbXWxvY2FsX2NvbG9ybWFwOwotICAgICAgICBkZWxldGUg
W11wcmVmaXg7Ci0gICAgICAgIGRlbGV0ZSBbXXN1ZmZpeDsKLSAgICAgICAgZGVsZXRlIFtdc3Rh
Y2s7CisgICAgfkdJRkZyYW1lQ29udGV4dCgpCisgICAgeworICAgICAgICBkZWxldGUgW10gcm93
YnVmOworICAgICAgICBkZWxldGUgW10gbG9jYWxDb2xvcm1hcDsKKyAgICAgICAgZGVsZXRlIFtd
IHByZWZpeDsKKyAgICAgICAgZGVsZXRlIFtdIHN1ZmZpeDsKKyAgICAgICAgZGVsZXRlIFtdIHN0
YWNrOwogICAgIH0KIH07CiAKLXN0cnVjdCBHSUZJbWFnZVJlYWRlciB7CitjbGFzcyBHSUZJbWFn
ZVJlYWRlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgV2Vi
Q29yZTo6R0lGSW1hZ2VEZWNvZGVyKiBjbGllbnRwdHI7Ci0gICAgLyogUGFyc2luZyBzdGF0ZSBt
YWNoaW5lICovCi0gICAgZ3N0YXRlIHN0YXRlOyAgICAgICAgICAgICAgICAgICAgICAvKiBDdXJy
ZW50IGRlY29kZXIgbWFzdGVyIHN0YXRlICovCi0gICAgdW5zaWduZWQgYnl0ZXNfdG9fY29uc3Vt
ZTsgICAgICAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYWNjdW11bGF0ZSAqLwotICAgIHVuc2ln
bmVkIGJ5dGVzX2luX2hvbGQ7ICAgICAgICAgICAgLyogYnl0ZXMgYWNjdW11bGF0ZWQgc28gZmFy
Ki8KLSAgICB1bnNpZ25lZCBjaGFyIGhvbGRbTUFYX0hPTERfU0laRV07IC8qIEFjY3VtdWxhdGlv
biBidWZmZXIgKi8KLSAgICB1bnNpZ25lZCBjaGFyKiBnbG9iYWxfY29sb3JtYXA7ICAgIC8qICgz
KiBNQVhfQ09MT1JTIGluIHNpemUpIERlZmF1bHQgY29sb3JtYXAgaWYgbG9jYWwgbm90IHN1cHBs
aWVkLCAzIGJ5dGVzIGZvciBlYWNoIGNvbG9yICAqLwotICAgIAotICAgICAvKiBHbG9iYWwgKG11
bHRpLWltYWdlKSBzdGF0ZSAqLwotICAgIGludCBzY3JlZW5fYmdjb2xvcjsgICAgICAgICAvKiBM
b2dpY2FsIHNjcmVlbiBiYWNrZ3JvdW5kIGNvbG9yICovCi0gICAgaW50IHZlcnNpb247ICAgICAg
ICAgICAgICAgIC8qIEVpdGhlciA4OSBmb3IgR0lGODkgb3IgODcgZm9yIEdJRjg3ICovCi0gICAg
dW5zaWduZWQgc2NyZWVuX3dpZHRoOyAgICAgICAvKiBMb2dpY2FsIHNjcmVlbiB3aWR0aCAmIGhl
aWdodCAqLwotICAgIHVuc2lnbmVkIHNjcmVlbl9oZWlnaHQ7Ci0gICAgaW50IGdsb2JhbF9jb2xv
cm1hcF9zaXplOyAgIC8qIFNpemUgb2YgZ2xvYmFsIGNvbG9ybWFwIGFycmF5LiAqLwotICAgIHVu
c2lnbmVkIGltYWdlc19kZWNvZGVkOyAgICAvKiBDb3VudHMgY29tcGxldGVkIGZyYW1lcyBmb3Ig
YW5pbWF0ZWQgR0lGcyAqLwotICAgIGludCBpbWFnZXNfY291bnQ7ICAgICAgICAgICAvKiBDb3Vu
dGVkIGFsbCBmcmFtZXMgc2VlbiBzbyBmYXIgKGluY2x1ZGluZyBpbmNvbXBsZXRlIGZyYW1lcykg
Ki8KLSAgICBpbnQgbG9vcF9jb3VudDsgICAgICAgICAgICAgLyogTmV0c2NhcGUgc3BlY2lmaWMg
ZXh0ZW5zaW9uIGJsb2NrIHRvIGNvbnRyb2wKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhlIG51bWJlciBvZiBhbmltYXRpb24gbG9vcHMgYSBHSUYgcmVuZGVycy4gKi8KLSAg
ICAKLSAgICAvLyBOb3QgcmVhbGx5IGdsb2JhbCwgYnV0IGNvbnZlbmllbnQgdG8gbG9jYXRlIGhl
cmUuCi0gICAgaW50IGNvdW50OyAgICAgICAgICAgICAgICAgIC8qIFJlbWFpbmluZyAjIGJ5dGVz
IGluIHN1Yi1ibG9jayAqLwotICAgIAotICAgIEdJRkZyYW1lUmVhZGVyKiBmcmFtZV9yZWFkZXI7
Ci0KLSAgICBHSUZJbWFnZVJlYWRlcihXZWJDb3JlOjpHSUZJbWFnZURlY29kZXIqIGNsaWVudCA9
IDApIHsKLSAgICAgICAgY2xpZW50cHRyID0gY2xpZW50OwotICAgICAgICBzdGF0ZSA9IGdpZl90
eXBlOwotICAgICAgICBieXRlc190b19jb25zdW1lID0gNjsKLSAgICAgICAgYnl0ZXNfaW5faG9s
ZCA9IDA7Ci0gICAgICAgIGZyYW1lX3JlYWRlciA9IDA7Ci0gICAgICAgIGdsb2JhbF9jb2xvcm1h
cCA9IDA7Ci0KLSAgICAgICAgc2NyZWVuX2JnY29sb3IgPSB2ZXJzaW9uID0gMDsKLSAgICAgICAg
c2NyZWVuX3dpZHRoID0gc2NyZWVuX2hlaWdodCA9IDA7Ci0gICAgICAgIGdsb2JhbF9jb2xvcm1h
cF9zaXplID0gaW1hZ2VzX2RlY29kZWQgPSBpbWFnZXNfY291bnQgPSAwOwotICAgICAgICBsb29w
X2NvdW50ID0gY0xvb3BDb3VudE5vdFNlZW47Ci0gICAgICAgIGNvdW50ID0gMDsKKyAgICBHSUZJ
bWFnZVJlYWRlcihXZWJDb3JlOjpHSUZJbWFnZURlY29kZXIqIGNsaWVudCA9IDApCisgICAgICAg
IDogbV9jbGllbnQoY2xpZW50KQorICAgICAgICAsIG1fc3RhdGUoR0lGVHlwZSkKKyAgICAgICAg
LCBtX2J5dGVzVG9Db25zdW1lKDYpCisgICAgICAgICwgbV9ieXRlc0luSG9sZCgwKQorICAgICAg
ICAsIG1fZ2xvYmFsQ29sb3JtYXAoMCkKKyAgICAgICAgLCBtX3NjcmVlbkJnY29sb3IoMCkKKyAg
ICAgICAgLCBtX3ZlcnNpb24oMCkKKyAgICAgICAgLCBtX3NjcmVlbldpZHRoKDApCisgICAgICAg
ICwgbV9zY3JlZW5IZWlnaHQoMCkKKyAgICAgICAgLCBtX2dsb2JhbENvbG9ybWFwU2l6ZSgwKQor
ICAgICAgICAsIG1faW1hZ2VzRGVjb2RlZCgwKQorICAgICAgICAsIG1faW1hZ2VzQ291bnQoMCkK
KyAgICAgICAgLCBtX2xvb3BDb3VudChjTG9vcENvdW50Tm90U2VlbikKKyAgICAgICAgLCBtX2Nv
dW50KDApCisgICAgICAgICwgbV9mcmFtZUNvbnRleHQoMCkKKyAgICB7CiAgICAgfQogCi0gICAg
fkdJRkltYWdlUmVhZGVyKCkgewotICAgICAgICBkZWxldGUgW11nbG9iYWxfY29sb3JtYXA7Ci0g
ICAgICAgIGdsb2JhbF9jb2xvcm1hcCA9IDA7Ci0gICAgICAgIGRlbGV0ZSBmcmFtZV9yZWFkZXI7
Ci0gICAgICAgIGZyYW1lX3JlYWRlciA9IDA7CisgICAgfkdJRkltYWdlUmVhZGVyKCkKKyAgICB7
CisgICAgICAgIGRlbGV0ZSBbXSBtX2dsb2JhbENvbG9ybWFwOworICAgICAgICBtX2dsb2JhbENv
bG9ybWFwID0gMDsKKworICAgICAgICBkZWxldGUgbV9mcmFtZUNvbnRleHQ7CisgICAgICAgIG1f
ZnJhbWVDb250ZXh0ID0gMDsKICAgICB9CiAKLSAgICBib29sIHJlYWQoY29uc3QgdW5zaWduZWQg
Y2hhciAqIGJ1ZiwgdW5zaWduZWQgaW50IG51bWJ5dGVzLCAKLSAgICAgICAgICAgICAgV2ViQ29y
ZTo6R0lGSW1hZ2VEZWNvZGVyOjpHSUZRdWVyeSBxdWVyeSA9IFdlYkNvcmU6OkdJRkltYWdlRGVj
b2Rlcjo6R0lGRnVsbFF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSA9IC0xKTsKKyAgICBib29s
IHJlYWQoY29uc3QgdW5zaWduZWQgY2hhciogYnVmLCB1bnNpZ25lZCBudW1ieXRlcywgV2ViQ29y
ZTo6R0lGSW1hZ2VEZWNvZGVyOjpHSUZRdWVyeSA9IFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6
R0lGRnVsbFF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSA9IC0xKTsKKworICAgIGludCBpbWFn
ZXNDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VzQ291bnQ7IH0KKyAgICBpbnQgbG9vcENv
dW50KCkgY29uc3QgeyByZXR1cm4gbV9sb29wQ291bnQ7IH0KKyAgICB1bnNpZ25lZCBjaGFyKiBn
bG9iYWxDb2xvcm1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsQ29sb3JtYXA7IH0KKyAgICBp
bnQgZ2xvYmFsQ29sb3JtYXBTaXplKCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxDb2xvcm1hcFNp
emU7IH0KKyAgICBjb25zdCBHSUZGcmFtZUNvbnRleHQqIGZyYW1lQ29udGV4dCgpIGNvbnN0IHsg
cmV0dXJuIG1fZnJhbWVDb250ZXh0OyB9CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBvdXRwdXRfcm93
KCk7Ci0gICAgYm9vbCBkb19sencoY29uc3QgdW5zaWduZWQgY2hhciAqcSk7CisgICAgYm9vbCBv
dXRwdXRSb3coKTsKKyAgICBib29sIGRvTFpXKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnEpOworCisg
ICAgV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyKiBtX2NsaWVudDsKKworICAgIC8vIFBhcnNpbmcg
c3RhdGUgbWFjaGluZS4KKyAgICBHSUZTdGF0ZSBtX3N0YXRlOyAvLyBDdXJyZW50IGRlY29kZXIg
bWFzdGVyIHN0YXRlLgorICAgIHVuc2lnbmVkIG1fYnl0ZXNUb0NvbnN1bWU7IC8vIE51bWJlciBv
ZiBieXRlcyB0byBhY2N1bXVsYXRlLgorICAgIHVuc2lnbmVkIG1fYnl0ZXNJbkhvbGQ7IC8vIGJ5
dGVzIGFjY3VtdWxhdGVkIHNvIGZhci4KKyAgICB1bnNpZ25lZCBjaGFyIG1faG9sZFtNQVhfSE9M
RF9TSVpFXTsgLy8gQWNjdW11bGF0aW9uIGJ1ZmZlci4KKyAgICB1bnNpZ25lZCBjaGFyKiBtX2ds
b2JhbENvbG9ybWFwOyAvLyAoMyogTUFYX0NPTE9SUyBpbiBzaXplKSBEZWZhdWx0IGNvbG9ybWFw
IGlmIGxvY2FsIG5vdCBzdXBwbGllZCwgMyBieXRlcyBmb3IgZWFjaCBjb2xvci4KKyAgICAKKyAg
ICAvLyBHbG9iYWwgKG11bHRpLWltYWdlKSBzdGF0ZS4KKyAgICBpbnQgbV9zY3JlZW5CZ2NvbG9y
OyAvLyBMb2dpY2FsIHNjcmVlbiBiYWNrZ3JvdW5kIGNvbG9yLgorICAgIGludCBtX3ZlcnNpb247
IC8vIEVpdGhlciA4OSBmb3IgR0lGODkgb3IgODcgZm9yIEdJRjg3LgorICAgIHVuc2lnbmVkIG1f
c2NyZWVuV2lkdGg7IC8vIExvZ2ljYWwgc2NyZWVuIHdpZHRoICYgaGVpZ2h0LgorICAgIHVuc2ln
bmVkIG1fc2NyZWVuSGVpZ2h0OworICAgIGludCBtX2dsb2JhbENvbG9ybWFwU2l6ZTsgLy8gU2l6
ZSBvZiBnbG9iYWwgY29sb3JtYXAgYXJyYXkuCisgICAgdW5zaWduZWQgbV9pbWFnZXNEZWNvZGVk
OyAvLyBDb3VudHMgY29tcGxldGVkIGZyYW1lcyBmb3IgYW5pbWF0ZWQgR0lGcy4KKyAgICBpbnQg
bV9pbWFnZXNDb3VudDsgLy8gQ291bnRlZCBhbGwgZnJhbWVzIHNlZW4gc28gZmFyIChpbmNsdWRp
bmcgaW5jb21wbGV0ZSBmcmFtZXMpLgorICAgIGludCBtX2xvb3BDb3VudDsgLy8gTmV0c2NhcGUg
c3BlY2lmaWMgZXh0ZW5zaW9uIGJsb2NrIHRvIGNvbnRyb2wgdGhlIG51bWJlciBvZiBhbmltYXRp
b24gbG9vcHMgYSBHSUYgcmVuZGVycy4KKyAgICAKKyAgICAvLyBOb3QgcmVhbGx5IGdsb2JhbCwg
YnV0IGNvbnZlbmllbnQgdG8gbG9jYXRlIGhlcmUuCisgICAgaW50IG1fY291bnQ7IC8vIFJlbWFp
bmluZyAjIGJ5dGVzIGluIHN1Yi1ibG9jay4KKyAgICAKKyAgICBHSUZGcmFtZUNvbnRleHQqIG1f
ZnJhbWVDb250ZXh0OwogfTsKIAogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189349</attachid>
            <date>2013-02-20 11:45:27 -0800</date>
            <delta_ts>2013-02-20 11:46:21 -0800</delta_ts>
            <desc>hacked gif decoder for local testing</desc>
            <filename>WebKit-gif-decoder.patch</filename>
            <type>text/plain</type>
            <size>9717</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtSW5zdHJ1bWVudGF0
aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUluc3RydW1lbnRhdGlvbi5o
CmluZGV4IDFmOTU1NzcuLmZmYmVlOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1BsYXRmb3JtSW5zdHJ1bWVudGF0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vUGxhdGZvcm1JbnN0cnVtZW50YXRpb24uaApAQCAtNjcsNyArNjcsNyBAQCBwcml2YXRlOgog
CiBpbmxpbmUgdm9pZCBQbGF0Zm9ybUluc3RydW1lbnRhdGlvbjo6d2lsbERlY29kZUltYWdlKGNv
bnN0IFN0cmluZyYgaW1hZ2VUeXBlKQogewotI2lmIFBMQVRGT1JNKENIUk9NSVVNKQorI2lmIDAg
JiYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgVFJBQ0VfRVZFTlRfQkVHSU4xKCJ3ZWJraXQiLCAi
SW1hZ2UgRGVjb2RlIiwgImltYWdlVHlwZSIsIFRSQUNFX1NUUl9DT1BZKGltYWdlVHlwZS5hc2Np
aSgpLmRhdGEoKSkpOwogI2VuZGlmCiAgICAgRkFTVF9SRVRVUk5fSUZfTk9fQ0xJRU5UKCk7CkBA
IC03Niw3ICs3Niw3IEBAIGlubGluZSB2b2lkIFBsYXRmb3JtSW5zdHJ1bWVudGF0aW9uOjp3aWxs
RGVjb2RlSW1hZ2UoY29uc3QgU3RyaW5nJiBpbWFnZVR5cGUpCiAKIGlubGluZSB2b2lkIFBsYXRm
b3JtSW5zdHJ1bWVudGF0aW9uOjpkaWREZWNvZGVJbWFnZSgpCiB7Ci0jaWYgUExBVEZPUk0oQ0hS
T01JVU0pCisjaWYgMCAmJiBQTEFURk9STShDSFJPTUlVTSkKICAgICBUUkFDRV9FVkVOVF9FTkQw
KCJ3ZWJraXQiLCAiSW1hZ2UgRGVjb2RlIik7CiAjZW5kaWYKICAgICBGQVNUX1JFVFVSTl9JRl9O
T19DTElFTlQoKTsKQEAgLTg1LDcgKzg1LDcgQEAgaW5saW5lIHZvaWQgUGxhdGZvcm1JbnN0cnVt
ZW50YXRpb246OmRpZERlY29kZUltYWdlKCkKIAogaW5saW5lIHZvaWQgUGxhdGZvcm1JbnN0cnVt
ZW50YXRpb246OndpbGxSZXNpemVJbWFnZShib29sIHNob3VsZENhY2hlKQogewotI2lmIFBMQVRG
T1JNKENIUk9NSVVNKQorI2lmIDAgJiYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgVFJBQ0VfRVZF
TlRfQkVHSU4xKCJ3ZWJraXQiLCAiSW1hZ2UgUmVzaXplIiwgImNhY2hlZCIsIHNob3VsZENhY2hl
KTsKICNlbmRpZgogICAgIEZBU1RfUkVUVVJOX0lGX05PX0NMSUVOVCgpOwpAQCAtOTQsNyArOTQs
NyBAQCBpbmxpbmUgdm9pZCBQbGF0Zm9ybUluc3RydW1lbnRhdGlvbjo6d2lsbFJlc2l6ZUltYWdl
KGJvb2wgc2hvdWxkQ2FjaGUpCiAKIGlubGluZSB2b2lkIFBsYXRmb3JtSW5zdHJ1bWVudGF0aW9u
OjpkaWRSZXNpemVJbWFnZSgpCiB7Ci0jaWYgUExBVEZPUk0oQ0hST01JVU0pCisjaWYgMCAmJiBQ
TEFURk9STShDSFJPTUlVTSkKICAgICBUUkFDRV9FVkVOVF9FTkQwKCJ3ZWJraXQiLCAiSW1hZ2Ug
UmVzaXplIik7CiAjZW5kaWYKICAgICBGQVNUX1JFVFVSTl9JRl9OT19DTElFTlQoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCBmMDRlYmFkLi5hNDc4NDgxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwCkBAIC03OTksNiArNzk5LDIyIEBACiAgICAgICAgICAgICBdLAogICAg
ICAgICB9LAogICAgICAgICB7CisgICAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnZ2lmX2RlY29k
ZXInLAorICAgICAgICAgICAgJ3R5cGUnOiAnZXhlY3V0YWJsZScsCisgICAgICAgICAgICAnZGVw
ZW5kZW5jaWVzJzogWworICAgICAgICAgICAgICAgICcuLi8uLi9XVEYvV1RGLmd5cC9XVEYuZ3lw
Ond0ZicsCisgICAgICAgICAgICAgICAgJy4uLy4uL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29y
ZS5neXA6d2ViY29yZScsCisgICAgICAgICAgICAgICAgJ3dlYmtpdF90ZXN0X3N1cHBvcnQnLAor
ICAgICAgICAgICAgICAgICd3ZWJraXQnLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICdk
ZWZpbmVzJzogWworICAgICAgICAgICAgICAgICdXRUJLSVRfSU1QTEVNRU5UQVRJT049MScsCisg
ICAgICAgICAgICBdLAorICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCisgICAgICAgICAgICAgICAg
J3NyYy9naWZfZGVjb2Rlci5jYycsCisgICAgICAgICAgICBdLAorICAgICAgICB9LAorICAgICAg
ICB7CiAgICAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnd2Via2l0X3Rlc3Rfc3VwcG9ydCcsCiAg
ICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKICAgICAgICAgICAgICAgICBbJ2luc2lkZV9jaHJv
bWl1bV9idWlsZD09MSBhbmQgY29tcG9uZW50PT0ic2hhcmVkX2xpYnJhcnkiJywgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvZ2lmX2RlY29kZXIuY2MgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9naWZfZGVjb2Rlci5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi43YjdlM2I0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvZ2lmX2RlY29kZXIuY2MKQEAgLTAsMCArMSwyNDkgQEAKKyNpbmNsdWRlIDxp
b3N0cmVhbT4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJHSUZJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5j
bHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8cHVibGljL3BsYXRmb3JtL1dlYktpdFBs
YXRmb3JtU3VwcG9ydC5oPgorI2luY2x1ZGUgPHB1YmxpYy9QbGF0Zm9ybS5oPgorI2luY2x1ZGUg
PHB1YmxpYy9XZWJLaXQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0
Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0
Zi9VbnVzZWRQYXJhbS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorCit1
c2luZyBuYW1lc3BhY2Ugc3RkOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0YXRpYyBQ
YXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcmVhZEZpbGUoY29uc3QgY2hhciogZmlsZU5hbWUpCit7
CisgICAgRklMRSAqIGZpbGU7CisKKyAgICBmaWxlID0gZm9wZW4gKGZpbGVOYW1lLCAicmIiKTsK
KyAgICBpZiAoIWZpbGUpCisgICAgICAgIGV4aXQoMSk7CisKKyAgICAvLyBvYnRhaW4gZmlsZSBz
aXplOgorICAgIGZzZWVrKGZpbGUsIDAsIFNFRUtfRU5EKTsKKyAgICBzaXplX3Qgc2l6ZSA9IGZ0
ZWxsKGZpbGUpOworICAgIHJld2luZChmaWxlKTsKKworICAgIC8vIGFsbG9jYXRlIG1lbW9yeSB0
byBjb250YWluIHRoZSB3aG9sZSBmaWxlOgorICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciA9IG5l
dyB1bnNpZ25lZCBjaGFyW3NpemVdOworICAgIGZyZWFkKGJ1ZmZlciwgMSwgc2l6ZSwgZmlsZSk7
CisKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjpjcmVhdGUoYnVmZmVyLCBzaXplKTsKK30KKwor
I2RlZmluZSBTQ0hFRFVMRShpKSAgXAorICAgIHRlbXAgPSBzY2hlZHVsZVsoaS0zKSYweEZdIF4g
c2NoZWR1bGVbKGktOCkmMHhGXSBeIHNjaGVkdWxlWyhpLTE0KSYweEZdIF4gc2NoZWR1bGVbKGkt
MTYpJjB4Rl07ICBcCisgICAgc2NoZWR1bGVbaSAmIDB4Rl0gPSB0ZW1wIDw8IDEgfCB0ZW1wID4+
IDMxOworCisjZGVmaW5lIFJPVU5EMGEoYSxiLGMsZCxlLGkpICBcCisgICAgc2NoZWR1bGVbaV0g
PSAoYmxvY2tbaV0gPDwgMjQpIHwgKChibG9ja1tpXSAmIDB4RkYwMCkgPDwgOCkgfCAoKGJsb2Nr
W2ldID4+IDgpICYgMHhGRjAwKSB8IChibG9ja1tpXSA+PiAyNCk7ICBcCisgICAgUk9VTkRUQUlM
KGEsIGIsIGUsICgoYiAmIGMpIHwgKH5iICYgZCkpLCBpLCAweDVBODI3OTk5KQorCisjZGVmaW5l
IFJPVU5EMGIoYSxiLGMsZCxlLGkpICBcCisgICAgU0NIRURVTEUoaSkgIFwKKyAgICBST1VORFRB
SUwoYSwgYiwgZSwgKChiICYgYykgfCAofmIgJiBkKSksIGksIDB4NUE4Mjc5OTkpCisKKyNkZWZp
bmUgUk9VTkQxKGEsYixjLGQsZSxpKSAgXAorICAgIFNDSEVEVUxFKGkpICBcCisgICAgUk9VTkRU
QUlMKGEsIGIsIGUsIChiIF4gYyBeIGQpLCBpLCAweDZFRDlFQkExKQorCisjZGVmaW5lIFJPVU5E
MihhLGIsYyxkLGUsaSkgIFwKKyAgICBTQ0hFRFVMRShpKSAgXAorICAgIFJPVU5EVEFJTChhLCBi
LCBlLCAoKGIgJiBjKSBeIChiICYgZCkgXiAoYyAmIGQpKSwgaSwgMHg4RjFCQkNEQykKKworI2Rl
ZmluZSBST1VORDMoYSxiLGMsZCxlLGkpICBcCisgICAgU0NIRURVTEUoaSkgIFwKKyAgICBST1VO
RFRBSUwoYSwgYiwgZSwgKGIgXiBjIF4gZCksIGksIDB4Q0E2MkMxRDYpCisKKyNkZWZpbmUgUk9V
TkRUQUlMKGEsYixlLGYsaSxrKSAgXAorICAgIGUgKz0gKGEgPDwgNSB8IGEgPj4gMjcpICsgZiAr
IGsgKyBzY2hlZHVsZVtpICYgMHhGXTsgIFwKKyAgICBiID0gYiA8PCAzMCB8IGIgPj4gMjsKKwor
dm9pZCBzaGExX2NvbXByZXNzKHVpbnQzMl90ICpzdGF0ZSwgdWludDMyX3QgKmJsb2NrKSB7Cisg
ICAgdWludDMyX3QgYSA9IHN0YXRlWzBdOworICAgIHVpbnQzMl90IGIgPSBzdGF0ZVsxXTsKKyAg
ICB1aW50MzJfdCBjID0gc3RhdGVbMl07CisgICAgdWludDMyX3QgZCA9IHN0YXRlWzNdOworICAg
IHVpbnQzMl90IGUgPSBzdGF0ZVs0XTsKKworICAgIHVpbnQzMl90IHNjaGVkdWxlWzE2XTsKKyAg
ICB1aW50MzJfdCB0ZW1wOworICAgIFJPVU5EMGEoYSwgYiwgYywgZCwgZSwgIDApCisgICAgUk9V
TkQwYShlLCBhLCBiLCBjLCBkLCAgMSkKKyAgICBST1VORDBhKGQsIGUsIGEsIGIsIGMsICAyKQor
ICAgIFJPVU5EMGEoYywgZCwgZSwgYSwgYiwgIDMpCisgICAgUk9VTkQwYShiLCBjLCBkLCBlLCBh
LCAgNCkKKyAgICBST1VORDBhKGEsIGIsIGMsIGQsIGUsICA1KQorICAgIFJPVU5EMGEoZSwgYSwg
YiwgYywgZCwgIDYpCisgICAgUk9VTkQwYShkLCBlLCBhLCBiLCBjLCAgNykKKyAgICBST1VORDBh
KGMsIGQsIGUsIGEsIGIsICA4KQorICAgIFJPVU5EMGEoYiwgYywgZCwgZSwgYSwgIDkpCisgICAg
Uk9VTkQwYShhLCBiLCBjLCBkLCBlLCAxMCkKKyAgICBST1VORDBhKGUsIGEsIGIsIGMsIGQsIDEx
KQorICAgIFJPVU5EMGEoZCwgZSwgYSwgYiwgYywgMTIpCisgICAgUk9VTkQwYShjLCBkLCBlLCBh
LCBiLCAxMykKKyAgICBST1VORDBhKGIsIGMsIGQsIGUsIGEsIDE0KQorICAgIFJPVU5EMGEoYSwg
YiwgYywgZCwgZSwgMTUpCisgICAgUk9VTkQwYihlLCBhLCBiLCBjLCBkLCAxNikKKyAgICBST1VO
RDBiKGQsIGUsIGEsIGIsIGMsIDE3KQorICAgIFJPVU5EMGIoYywgZCwgZSwgYSwgYiwgMTgpCisg
ICAgUk9VTkQwYihiLCBjLCBkLCBlLCBhLCAxOSkKKyAgICBST1VORDEoYSwgYiwgYywgZCwgZSwg
MjApCisgICAgUk9VTkQxKGUsIGEsIGIsIGMsIGQsIDIxKQorICAgIFJPVU5EMShkLCBlLCBhLCBi
LCBjLCAyMikKKyAgICBST1VORDEoYywgZCwgZSwgYSwgYiwgMjMpCisgICAgUk9VTkQxKGIsIGMs
IGQsIGUsIGEsIDI0KQorICAgIFJPVU5EMShhLCBiLCBjLCBkLCBlLCAyNSkKKyAgICBST1VORDEo
ZSwgYSwgYiwgYywgZCwgMjYpCisgICAgUk9VTkQxKGQsIGUsIGEsIGIsIGMsIDI3KQorICAgIFJP
VU5EMShjLCBkLCBlLCBhLCBiLCAyOCkKKyAgICBST1VORDEoYiwgYywgZCwgZSwgYSwgMjkpCisg
ICAgUk9VTkQxKGEsIGIsIGMsIGQsIGUsIDMwKQorICAgIFJPVU5EMShlLCBhLCBiLCBjLCBkLCAz
MSkKKyAgICBST1VORDEoZCwgZSwgYSwgYiwgYywgMzIpCisgICAgUk9VTkQxKGMsIGQsIGUsIGEs
IGIsIDMzKQorICAgIFJPVU5EMShiLCBjLCBkLCBlLCBhLCAzNCkKKyAgICBST1VORDEoYSwgYiwg
YywgZCwgZSwgMzUpCisgICAgUk9VTkQxKGUsIGEsIGIsIGMsIGQsIDM2KQorICAgIFJPVU5EMShk
LCBlLCBhLCBiLCBjLCAzNykKKyAgICBST1VORDEoYywgZCwgZSwgYSwgYiwgMzgpCisgICAgUk9V
TkQxKGIsIGMsIGQsIGUsIGEsIDM5KQorICAgIFJPVU5EMihhLCBiLCBjLCBkLCBlLCA0MCkKKyAg
ICBST1VORDIoZSwgYSwgYiwgYywgZCwgNDEpCisgICAgUk9VTkQyKGQsIGUsIGEsIGIsIGMsIDQy
KQorICAgIFJPVU5EMihjLCBkLCBlLCBhLCBiLCA0MykKKyAgICBST1VORDIoYiwgYywgZCwgZSwg
YSwgNDQpCisgICAgUk9VTkQyKGEsIGIsIGMsIGQsIGUsIDQ1KQorICAgIFJPVU5EMihlLCBhLCBi
LCBjLCBkLCA0NikKKyAgICBST1VORDIoZCwgZSwgYSwgYiwgYywgNDcpCisgICAgUk9VTkQyKGMs
IGQsIGUsIGEsIGIsIDQ4KQorICAgIFJPVU5EMihiLCBjLCBkLCBlLCBhLCA0OSkKKyAgICBST1VO
RDIoYSwgYiwgYywgZCwgZSwgNTApCisgICAgUk9VTkQyKGUsIGEsIGIsIGMsIGQsIDUxKQorICAg
IFJPVU5EMihkLCBlLCBhLCBiLCBjLCA1MikKKyAgICBST1VORDIoYywgZCwgZSwgYSwgYiwgNTMp
CisgICAgUk9VTkQyKGIsIGMsIGQsIGUsIGEsIDU0KQorICAgIFJPVU5EMihhLCBiLCBjLCBkLCBl
LCA1NSkKKyAgICBST1VORDIoZSwgYSwgYiwgYywgZCwgNTYpCisgICAgUk9VTkQyKGQsIGUsIGEs
IGIsIGMsIDU3KQorICAgIFJPVU5EMihjLCBkLCBlLCBhLCBiLCA1OCkKKyAgICBST1VORDIoYiwg
YywgZCwgZSwgYSwgNTkpCisgICAgUk9VTkQzKGEsIGIsIGMsIGQsIGUsIDYwKQorICAgIFJPVU5E
MyhlLCBhLCBiLCBjLCBkLCA2MSkKKyAgICBST1VORDMoZCwgZSwgYSwgYiwgYywgNjIpCisgICAg
Uk9VTkQzKGMsIGQsIGUsIGEsIGIsIDYzKQorICAgIFJPVU5EMyhiLCBjLCBkLCBlLCBhLCA2NCkK
KyAgICBST1VORDMoYSwgYiwgYywgZCwgZSwgNjUpCisgICAgUk9VTkQzKGUsIGEsIGIsIGMsIGQs
IDY2KQorICAgIFJPVU5EMyhkLCBlLCBhLCBiLCBjLCA2NykKKyAgICBST1VORDMoYywgZCwgZSwg
YSwgYiwgNjgpCisgICAgUk9VTkQzKGIsIGMsIGQsIGUsIGEsIDY5KQorICAgIFJPVU5EMyhhLCBi
LCBjLCBkLCBlLCA3MCkKKyAgICBST1VORDMoZSwgYSwgYiwgYywgZCwgNzEpCisgICAgUk9VTkQz
KGQsIGUsIGEsIGIsIGMsIDcyKQorICAgIFJPVU5EMyhjLCBkLCBlLCBhLCBiLCA3MykKKyAgICBS
T1VORDMoYiwgYywgZCwgZSwgYSwgNzQpCisgICAgUk9VTkQzKGEsIGIsIGMsIGQsIGUsIDc1KQor
ICAgIFJPVU5EMyhlLCBhLCBiLCBjLCBkLCA3NikKKyAgICBST1VORDMoZCwgZSwgYSwgYiwgYywg
NzcpCisgICAgUk9VTkQzKGMsIGQsIGUsIGEsIGIsIDc4KQorICAgIFJPVU5EMyhiLCBjLCBkLCBl
LCBhLCA3OSkKKworICAgIHN0YXRlWzBdICs9IGE7CisgICAgc3RhdGVbMV0gKz0gYjsKKyAgICBz
dGF0ZVsyXSArPSBjOworICAgIHN0YXRlWzNdICs9IGQ7CisgICAgc3RhdGVbNF0gKz0gZTsKK30K
Kwordm9pZCBzaGExX2hhc2godWludDhfdCAqbWVzc2FnZSwgdWludDMyX3QgbGVuLCB1aW50MzJf
dCAqaGFzaCkgeworICAgIGhhc2hbMF0gPSAweDY3NDUyMzAxOworICAgIGhhc2hbMV0gPSAweEVG
Q0RBQjg5OworICAgIGhhc2hbMl0gPSAweDk4QkFEQ0ZFOworICAgIGhhc2hbM10gPSAweDEwMzI1
NDc2OworICAgIGhhc2hbNF0gPSAweEMzRDJFMUYwOworCisgICAgaW50IGk7CisgICAgZm9yIChp
ID0gMDsgaSArIDY0IDw9IGxlbjsgaSArPSA2NCkKKyAgICAgICAgc2hhMV9jb21wcmVzcyhoYXNo
LCAodWludDMyX3QqKShtZXNzYWdlICsgaSkpOworCisgICAgdWludDMyX3QgYmxvY2tbMTZdOwor
ICAgIHVpbnQ4X3QgKmJ5dGVCbG9jayA9ICh1aW50OF90KilibG9jazsKKworICAgIGludCByZW0g
PSBsZW4gLSBpOworICAgIG1lbWNweShieXRlQmxvY2ssIG1lc3NhZ2UgKyBpLCByZW0pOworCisg
ICAgYnl0ZUJsb2NrW3JlbV0gPSAweDgwOworICAgIHJlbSsrOworICAgIGlmICg2NCAtIHJlbSA+
PSA4KQorICAgICAgICBtZW1zZXQoYnl0ZUJsb2NrICsgcmVtLCAwLCA1NiAtIHJlbSk7CisgICAg
ZWxzZSB7CisgICAgICAgIG1lbXNldChieXRlQmxvY2sgKyByZW0sIDAsIDY0IC0gcmVtKTsKKyAg
ICAgICAgc2hhMV9jb21wcmVzcyhoYXNoLCBibG9jayk7CisgICAgICAgIG1lbXNldChibG9jaywg
MCwgNTYpOworICAgIH0KKworICAgIHVpbnQ2NF90IGxvbmdMZW4gPSAoKHVpbnQ2NF90KWxlbikg
PDwgMzsKKyAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorICAgICAgICBieXRlQmxvY2tbNjQg
LSAxIC0gaV0gPSAodWludDhfdCkobG9uZ0xlbiA+PiAoaSAqIDgpKTsKKyAgICBzaGExX2NvbXBy
ZXNzKGhhc2gsIGJsb2NrKTsKK30KKworY2xhc3MgRHVtbXlXZWJLaXRQbGF0Zm9ybVN1cHBvcnQg
OiBwdWJsaWMgV2ViS2l0OjpXZWJLaXRQbGF0Zm9ybVN1cHBvcnQgeworICBwdWJsaWM6CisgICAg
fkR1bW15V2ViS2l0UGxhdGZvcm1TdXBwb3J0KCkge30KKworICAgIHZpcnR1YWwgdm9pZCBjcnlw
dG9ncmFwaGljYWxseVJhbmRvbVZhbHVlcyh1bnNpZ25lZCBjaGFyKiBidWZmZXIsIHNpemVfdCBs
ZW5ndGgpIHt9CisKKyAgICBEdW1teVdlYktpdFBsYXRmb3JtU3VwcG9ydCgpIHt9Cit9OworCitp
bnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpIHsKKyAgICBpZiAoYXJnYyA9PSAxKSB7Cisg
ICAgICAgIGNvdXQgPDwgImdpZl9kZWNvZGVyIFtmaWxlXSIgPDwgZW5kbDsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorCisgICAgV2ViS2l0Ojppbml0aWFsaXplV2l0aG91dFY4KG5ldyBEdW1t
eVdlYktpdFBsYXRmb3JtU3VwcG9ydCgpKTsKKworICAgIE93blB0cjxHSUZJbWFnZURlY29kZXI+
IGRlY29kZXIoYWRvcHRQdHIobmV3IEdJRkltYWdlRGVjb2RlcihJbWFnZVNvdXJjZTo6QWxwaGFO
b3RQcmVtdWx0aXBsaWVkLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVBcHBsaWVk
KSkpOworCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSA9IHJlYWRGaWxlKGFyZ3ZbMV0p
OworICAgIGRlY29kZXItPnNldERhdGEoZGF0YS5nZXQoKSwgdHJ1ZSk7CisKKyAgICBjb3V0IDw8
IGRlY29kZXItPmZyYW1lQ291bnQoKSA8PCBlbmRsOworCisgICAgaW50IGZyYW1lcyA9IGRlY29k
ZXItPmZyYW1lQ291bnQoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYW1lczsgKytpKSB7
CisgICAgICAgIEltYWdlRnJhbWUqIGZyYW1lID0gZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4
KGkpOworCisgICAgICAgIGlmICghZnJhbWUpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICB1aW50MzJfdCBoYXNoWzVdOworICAgICAgICBzaGExX2hhc2goKHVpbnQ4X3QqKWZyYW1l
LT5nZXRTa0JpdG1hcCgpLmdldFBpeGVscygpLAorICAgICAgICAgICAgICAgICAgZnJhbWUtPmdl
dFNrQml0bWFwKCkuZ2V0U2l6ZSgpLAorICAgICAgICAgICAgICAgICAgaGFzaCk7CisKKyAgICAg
ICAgY291dCA8PCBpIDw8ICIgIgorICAgICAgICAgICAgIDw8IGZyYW1lLT5zdGF0dXMoKSA8PCAi
ICIKKyAgICAgICAgICAgICA8PCBoYXNoWzBdIDw8ICIgIgorICAgICAgICAgICAgIDw8IGhhc2hb
MV0gPDwgIiAiCisgICAgICAgICAgICAgPDwgaGFzaFsyXSA8PCAiICIKKyAgICAgICAgICAgICA8
PCBoYXNoWzNdIDw8ICIgIgorICAgICAgICAgICAgIDw8IGhhc2hbNF0KKyAgICAgICAgICAgICA8
PCBlbmRsOworICAgIH0KKyAgICBjb3V0IDw8IGRlY29kZXItPnJlcGV0aXRpb25Db3VudCgpIDw8
IGVuZGw7CisKKyAgICByZXR1cm4gMDsKK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>