<?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>47398</bug_id>
          
          <creation_ts>2010-10-07 23:23:16 -0700</creation_ts>
          <short_desc>[GTK] Port GTK+ theming code to GTK+ 3.x APIs</short_desc>
          <delta_ts>2010-10-08 17:01:46 -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>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Xan Lopez">xan.lopez</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>mrobinson</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>291465</commentid>
    <comment_count>0</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-10-07 23:23:16 -0700</bug_when>
    <thetext>SSIA.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291469</commentid>
    <comment_count>1</comment_count>
      <attachid>70206</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-10-07 23:28:59 -0700</bug_when>
    <thetext>Created attachment 70206
gtk3drawing.diff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291470</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-07 23:33:32 -0700</bug_when>
    <thetext>Attachment 70206 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
Last 3072 characters of output:
amed. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/gtk/gtk3drawing.c:1186:  focus_width is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/gtk/gtk3drawing.c:1186:  focus_pad is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/gtk/gtk3drawing.c:1186:  separator_width is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/gtk/gtk3drawing.c:1187:  arrow_req is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/gtk/gtk3drawing.c:1188:  Declaration has space between * and variable name in GtkStyle* style  [whitespace/declaration] [3]
WebCore/platform/gtk/gtk3drawing.c:1205:  More than one command on the same line  [whitespace/newline] [4]
WebCore/platform/gtk/gtk3drawing.c:1268:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/platform/gtk/gtk3drawing.c:1268:  Declaration has space between * and variable name in GtkWidget* widget  [whitespace/declaration] [3]
WebCore/platform/gtk/gtk3drawing.c:1270:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/platform/gtk/gtk3drawing.c:1271:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/platform/gtk/gtk3drawing.c:1273:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/platform/gtk/gtk3drawing.c:1273:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/platform/gtk/gtk3drawing.c:1278:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebCore/platform/gtk/gtk3drawing.c:1286:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/platform/gtk/gtk3drawing.c:1303:  Declaration has space between * and variable name in GdkRectangle* rect  [whitespace/declaration] [3]
WebCore/platform/gtk/gtk3drawing.c:1377:  Declaration has space between * and variable name in GtkWidget* moz_gtk_get_scrollbar_widget  [whitespace/declaration] [3]
WebCore/platform/gtk/gtk3drawing.c:1377:  moz_gtk_get_scrollbar_widget is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/gtk/gtk3drawing.c:1397:  moz_gtk_destroy_theme_parts_widgets is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/gtk/gtk3drawing.c:1408:  Declaration has space between * and variable name in GtkWidget* moz_gtk_get_progress_widget  [whitespace/declaration] [3]
WebCore/platform/gtk/gtk3drawing.c:1408:  moz_gtk_get_progress_widget is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WARNING: File exempt from style guide. Skipping: &quot;WebCore/platform/gtk/gtk2drawing.c&quot;
Total errors found: 181 in 6 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>291481</commentid>
    <comment_count>3</comment_count>
      <attachid>70206</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-10-08 00:30:27 -0700</bug_when>
    <thetext>Comment on attachment 70206
gtk3drawing.diff

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291488</commentid>
    <comment_count>4</comment_count>
      <attachid>70206</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-08 00:53:46 -0700</bug_when>
    <thetext>Comment on attachment 70206
gtk3drawing.diff

Clearing flags on attachment: 70206

Committed r69381: &lt;http://trac.webkit.org/changeset/69381&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291489</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-08 00:53:50 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291967</commentid>
    <comment_count>6</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-08 17:01:46 -0700</bug_when>
    <thetext>We should also add gtk3drawing.c to the list of files exempt from check-webkit-style&apos;s clutches.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70206</attachid>
            <date>2010-10-07 23:28:59 -0700</date>
            <delta_ts>2010-10-08 00:53:45 -0700</delta_ts>
            <desc>gtk3drawing.diff</desc>
            <filename>gtk3drawing.diff</filename>
            <type>text/plain</type>
            <size>64559</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSA1NjJkMDg4OTY2MDE5YmI3ODRhODRkMzlhYTMyMTI2NjljZGEwNWNmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhsb3BlekBpZ2FsaWEuY29tPgpEYXRlOiBG
cmksIDggT2N0IDIwMTAgMTU6Mjc6MTAgKzA5MDAKU3ViamVjdDogW1BBVENIXSAyMDEwLTEwLTA3
ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KCiAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCgogICAgICAgIFtHVEtdIFBvcnQgR1RLKyB0aGVtaW5n
IGNvZGUgdG8gR1RLKyAzLnggQVBJcwogICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00NzM5OAoKICAgICAgICBDcmVhdGUgYSBuZXcgZ3RrM2RyYXdpbmcgZmls
ZSBmb3IgdGhlIHdpZGdldCBkcmF3aW5nIHByaW1pdGl2ZXMgaW4KICAgICAgICBXZWJLaXQsIHVz
aW5nIHRoZSBHVEsrIDMueCBBUElzLiBJdCdzIHZlcnkgc2ltaWxhciB0byB0aGUgR1RLKyAyLngK
ICAgICAgICBjb2RlIGF0IHRoZSBtb21lbnQsIGJ1dCB3ZSdsbCBldm9sdmUgaXQgaW5jcmVtZW50
YWxseSBmcm9tIGhlcmUuCgogICAgICAgICogR05VbWFrZWZpbGUuYW06CiAgICAgICAgKiBwbGF0
Zm9ybS9ndGsvUmVuZGVyVGhlbWVHdGsuY3BwOgogICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZUd0azo6cGFydHNGb3JEcmF3YWJsZSk6CiAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3Rr
OjpwYWludE1vemlsbGFHdGtXaWRnZXQpOgogICAgICAgICogcGxhdGZvcm0vZ3RrL2d0azJkcmF3
aW5nLmM6CiAgICAgICAgKFRTT2Zmc2V0U3R5bGVHQ0FycmF5KToKICAgICAgICAoVFNPZmZzZXRT
dHlsZUdDcyk6CiAgICAgICAgKG1vel9ndGtfYnV0dG9uX3BhaW50KToKICAgICAgICAobW96X2d0
a19zY3JvbGxiYXJfdGh1bWJfcGFpbnQpOgogICAgICAgIChtb3pfZ3RrX2VudHJ5X3BhaW50KToK
ICAgICAgICAobW96X2d0a19jb21ib19ib3hfcGFpbnQpOgogICAgICAgIChtb3pfZ3RrX2dldF93
aWRnZXRfYm9yZGVyKToKICAgICAgICAqIHBsYXRmb3JtL2d0ay9ndGszZHJhd2luZy5jOiBBZGRl
ZC4KICAgICAgICAqIHBsYXRmb3JtL2d0ay9ndGtkcmF3aW5nLmg6Ci0tLQogV2ViQ29yZS9DaGFu
Z2VMb2cgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNiArCiBXZWJDb3JlL0dOVW1ha2VmaWxl
LmFtICAgICAgICAgICAgICAgICAgfCAgICAxICsKIFdlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRl
clRoZW1lR3RrLmNwcCB8ICAgMTggKwogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvZ3RrMmRyYXdpbmcu
YyAgICAgIHwgICAzOSArLQogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvZ3RrM2RyYXdpbmcuYyAgICAg
IHwgMTQxNiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBXZWJDb3JlL3BsYXRmb3Jt
L2d0ay9ndGtkcmF3aW5nLmggICAgICAgfCAgIDEwICstCiA2IGZpbGVzIGNoYW5nZWQsIDE0NzQg
aW5zZXJ0aW9ucygrKSwgMzYgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvZ3RrM2RyYXdpbmcuYwoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdl
TG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2ExNDhhZC4uNDA2OTBhNCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
OSBAQAorMjAxMC0xMC0wNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5j
b20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dU
S10gUG9ydCBHVEsrIHRoZW1pbmcgY29kZSB0byBHVEsrIDMueCBBUElzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzM5OAorCisgICAgICAgIENyZWF0
ZSBhIG5ldyBndGszZHJhd2luZyBmaWxlIGZvciB0aGUgd2lkZ2V0IGRyYXdpbmcgcHJpbWl0aXZl
cyBpbgorICAgICAgICBXZWJLaXQsIHVzaW5nIHRoZSBHVEsrIDMueCBBUElzLiBJdCdzIHZlcnkg
c2ltaWxhciB0byB0aGUgR1RLKyAyLngKKyAgICAgICAgY29kZSBhdCB0aGUgbW9tZW50LCBidXQg
d2UnbGwgZXZvbHZlIGl0IGluY3JlbWVudGFsbHkgZnJvbSBoZXJlLgorCisgICAgICAgICogR05V
bWFrZWZpbGUuYW06CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYXJ0c0ZvckRyYXdhYmxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludE1vemlsbGFHdGtXaWRnZXQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2d0ay9ndGsyZHJhd2luZy5jOgorICAgICAgICAoVFNPZmZzZXRT
dHlsZUdDQXJyYXkpOgorICAgICAgICAoVFNPZmZzZXRTdHlsZUdDcyk6CisgICAgICAgIChtb3pf
Z3RrX2J1dHRvbl9wYWludCk6CisgICAgICAgIChtb3pfZ3RrX3Njcm9sbGJhcl90aHVtYl9wYWlu
dCk6CisgICAgICAgIChtb3pfZ3RrX2VudHJ5X3BhaW50KToKKyAgICAgICAgKG1vel9ndGtfY29t
Ym9fYm94X3BhaW50KToKKyAgICAgICAgKG1vel9ndGtfZ2V0X3dpZGdldF9ib3JkZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL2d0ay9ndGszZHJhd2luZy5jOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ndGsvZ3RrZHJhd2luZy5oOgorCiAyMDEwLTEwLTA3ICBSeW9zdWtlIE5pd2EgIDxybml3
YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hhbmcuCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRl
eCA3MmFiNjQ3Li40YTI1NDdiIDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisr
KyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTM1MTgsNiArMzUxOCw3IEBAIHdlYmNvcmVn
dGtfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR1JlZlB0ckd0ay5jcHAgXAog
CVdlYkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJHdGsuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvZ3RrMmRyYXdpbmcuYyBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvZ3RrM2RyYXdpbmcuYyBc
CiAJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvZ3RrZHJhd2luZy5oIFwKIAlXZWJDb3JlL3BsYXRmb3Jt
L2d0ay9HdGtQbHVnaW5XaWRnZXQuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQbHVn
aW5XaWRnZXQuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVt
ZUd0ay5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9SZW5kZXJUaGVtZUd0ay5jcHAKaW5kZXgg
OTMyOTE3OS4uODg3Y2JlYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUmVuZGVy
VGhlbWVHdGsuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1JlbmRlclRoZW1lR3RrLmNw
cApAQCAtMTkyLDYgKzE5Miw3IEBAIFJlbmRlclRoZW1lR3RrOjp+UmVuZGVyVGhlbWVHdGsoKQog
CiBHdGtUaGVtZVBhcnRzKiBSZW5kZXJUaGVtZUd0azo6cGFydHNGb3JEcmF3YWJsZShHZGtEcmF3
YWJsZSogZHJhd2FibGUpIGNvbnN0CiB7CisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKICAgICAv
LyBBIG51bGwgZHJhd2FibGUgcmVwcmVzZW50cyB0aGUgZGVmYXVsdCBzY3JlZW4gY29sb3JtYXAu
CiAgICAgR2RrQ29sb3JtYXAqIGNvbG9ybWFwID0gMDsKICAgICBpZiAoIWRyYXdhYmxlKQpAQCAt
MjA1LDYgKzIwNiwxMCBAQCBHdGtUaGVtZVBhcnRzKiBSZW5kZXJUaGVtZUd0azo6cGFydHNGb3JE
cmF3YWJsZShHZGtEcmF3YWJsZSogZHJhd2FibGUpIGNvbnN0CiAgICAgICAgIHBhcnRzLT5jb2xv
cm1hcCA9IGNvbG9ybWFwOwogICAgICAgICBnX2hhc2hfdGFibGVfaW5zZXJ0KG1fcGFydHNUYWJs
ZS5nZXQoKSwgY29sb3JtYXAsIHBhcnRzKTsKICAgICB9CisjZWxzZQorICAgIC8vIEZvciBHVEsr
IDMuMCB3ZSBubyBsb25nZXIgaGF2ZSB0byB3b3JyeSBhYm91dCBtYWludGFpbmluZyBhIHNldCBv
ZiB3aWRnZXRzIHBlci1jb2xvcm1hcC4KKyAgICBzdGF0aWMgR3RrVGhlbWVQYXJ0cyogcGFydHMg
PSBnX3NsaWNlX25ldzAoR3RrVGhlbWVQYXJ0cyk7CisjZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9O
XzIKIAogICAgIHJldHVybiBwYXJ0czsKIH0KQEAgLTI4NCw2ICsyODksNyBAQCBzdGF0aWMgdm9p
ZCBhZGp1c3RNb3ppbGxhU3R5bGUoY29uc3QgUmVuZGVyVGhlbWVHdGsqIHRoZW1lLCBSZW5kZXJT
dHlsZSogc3R5bGUsCiAgICAgc3R5bGUtPnNldFBhZGRpbmdCb3R0b20oTGVuZ3RoKHlwYWRkaW5n
ICsgYm90dG9tLCBGaXhlZCkpOwogfQogCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKIGJvb2wg
UmVuZGVyVGhlbWVHdGs6OnBhaW50TW96aWxsYUd0a1dpZGdldChHdGtUaGVtZVdpZGdldFR5cGUg
dHlwZSwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBHdGtX
aWRnZXRTdGF0ZSogd2lkZ2V0U3RhdGUsIGludCBmbGFncywgR3RrVGV4dERpcmVjdGlvbiB0ZXh0
RGlyZWN0aW9uKQogewogICAgIC8vIFBhaW50aW5nIGlzIGRpc2FibGVkIHNvIGp1c3QgY2xhaW0g
dG8gaGF2ZSBzdWNjZWVkZWQKQEAgLTMzMyw2ICszMzksMTggQEAgYm9vbCBSZW5kZXJUaGVtZUd0
azo6cGFpbnRNb3ppbGxhR3RrV2lkZ2V0KEd0a1RoZW1lV2lkZ2V0VHlwZSB0eXBlLCBHcmFwaGlj
c0NvbnQKIAogICAgIHJldHVybiAhc3VjY2VzczsKIH0KKyNlbHNlCitib29sIFJlbmRlclRoZW1l
R3RrOjpwYWludE1vemlsbGFHdGtXaWRnZXQoR3RrVGhlbWVXaWRnZXRUeXBlIHR5cGUsIEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrV2lkZ2V0U3RhdGUq
IHdpZGdldFN0YXRlLCBpbnQgZmxhZ3MsIEd0a1RleHREaXJlY3Rpb24gdGV4dERpcmVjdGlvbikK
K3sKKyAgICAvLyBQYWludGluZyBpcyBkaXNhYmxlZCBzbyBqdXN0IGNsYWltIHRvIGhhdmUgc3Vj
Y2VlZGVkCisgICAgaWYgKGNvbnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgLy8gZmFsc2UgPT0gc3VjY2VzcywgYmVjYXVzZSBvZiBhd2Vzb21l
LgorICAgIEdka1JlY3RhbmdsZSBwYWludFJlY3QgPSByZWN0OworICAgIHJldHVybiBtb3pfZ3Rr
X3dpZGdldF9wYWludCh0eXBlLCBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgJnBhaW50UmVj
dCwgd2lkZ2V0U3RhdGUsIGZsYWdzLCB0ZXh0RGlyZWN0aW9uKSAhPSBNT1pfR1RLX1NVQ0NFU1M7
Cit9CisjZW5kaWYKIAogYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRSZW5kZXJPYmplY3QoR3Rr
VGhlbWVXaWRnZXRUeXBlIHR5cGUsIFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGludCBmbGFncykKIHsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL2d0azJkcmF3aW5nLmMgYi9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9ndGsyZHJhd2luZy5jCmluZGV4IDI0NmVlYjUuLjk0MWJlNTggMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL2d0azJkcmF3aW5nLmMKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvZ3RrMmRyYXdpbmcuYwpAQCAtNDQsNiArNDQsOCBAQAogICogQWRhcHRlZCBmcm9t
IHRoZSBndGtkcmF3aW5nLmMsIGFuZCBndGsrMi4wIHNvdXJjZS4KICAqLwogCisjaWZkZWYgR1RL
X0FQSV9WRVJTSU9OXzIKKwogI2luY2x1ZGUgPGdkay9nZGtwcml2YXRlLmg+CiAjaW5jbHVkZSAi
Z3RrZHJhd2luZy5oIgogI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKQEAgLTM0MCw3ICszNDIs
NiBAQCBDb252ZXJ0R3RrU3RhdGUoR3RrV2lkZ2V0U3RhdGUqIHN0YXRlKQogICAgICAgICByZXR1
cm4gR1RLX1NUQVRFX05PUk1BTDsKIH0KIAotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCiBzdGF0
aWMgZ2ludAogVFNPZmZzZXRTdHlsZUdDQXJyYXkoR2RrR0MqKiBnY3MsIGdpbnQgeG9yaWdpbiwg
Z2ludCB5b3JpZ2luKQogewpAQCAtMzUwLDEyICszNTEsMTAgQEAgVFNPZmZzZXRTdHlsZUdDQXJy
YXkoR2RrR0MqKiBnY3MsIGdpbnQgeG9yaWdpbiwgZ2ludCB5b3JpZ2luKQogICAgICAgICBnZGtf
Z2Nfc2V0X3RzX29yaWdpbihnY3NbaV0sIHhvcmlnaW4sIHlvcmlnaW4pOwogICAgIHJldHVybiBN
T1pfR1RLX1NVQ0NFU1M7CiB9Ci0jZW5kaWYKIAogc3RhdGljIGdpbnQKIFRTT2Zmc2V0U3R5bGVH
Q3MoR3RrU3R5bGUqIHN0eWxlLCBnaW50IHhvcmlnaW4sIGdpbnQgeW9yaWdpbikKIHsKLSNpZmRl
ZiBHVEtfQVBJX1ZFUlNJT05fMgogICAgIFRTT2Zmc2V0U3R5bGVHQ0FycmF5KHN0eWxlLT5mZ19n
YywgeG9yaWdpbiwgeW9yaWdpbik7CiAgICAgVFNPZmZzZXRTdHlsZUdDQXJyYXkoc3R5bGUtPmJn
X2djLCB4b3JpZ2luLCB5b3JpZ2luKTsKICAgICBUU09mZnNldFN0eWxlR0NBcnJheShzdHlsZS0+
bGlnaHRfZ2MsIHhvcmlnaW4sIHlvcmlnaW4pOwpAQCAtMzY1LDcgKzM2NCw2IEBAIFRTT2Zmc2V0
U3R5bGVHQ3MoR3RrU3R5bGUqIHN0eWxlLCBnaW50IHhvcmlnaW4sIGdpbnQgeW9yaWdpbikKICAg
ICBUU09mZnNldFN0eWxlR0NBcnJheShzdHlsZS0+YmFzZV9nYywgeG9yaWdpbiwgeW9yaWdpbik7
CiAgICAgZ2RrX2djX3NldF90c19vcmlnaW4oc3R5bGUtPmJsYWNrX2djLCB4b3JpZ2luLCB5b3Jp
Z2luKTsKICAgICBnZGtfZ2Nfc2V0X3RzX29yaWdpbihzdHlsZS0+d2hpdGVfZ2MsIHhvcmlnaW4s
IHlvcmlnaW4pOwotI2VuZGlmCiAgICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKIH0KIApAQCAt
Mzk0LDE5ICszOTIsMTUgQEAgbW96X2d0a19idXR0b25fcGFpbnQoR2RrRHJhd2FibGUqIGRyYXdh
YmxlLCBHZGtSZWN0YW5nbGUqIHJlY3QsCiAgICAgZ3RrX3dpZGdldF9zZXRfc3RhdGUod2lkZ2V0
LCBidXR0b25fc3RhdGUpOwogICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbih3aWRnZXQsIGRp
cmVjdGlvbik7CiAKLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgogICAgIGlmIChzdGF0ZS0+aXNE
ZWZhdWx0KQogICAgICAgICBHVEtfV0lER0VUX1NFVF9GTEFHUyh3aWRnZXQsIEdUS19IQVNfREVG
QVVMVCk7Ci0jZW5kaWYKIAogICAgIGd0a19idXR0b25fc2V0X3JlbGllZihHVEtfQlVUVE9OKHdp
ZGdldCksIHJlbGllZik7CiAKICAgICAvKiBTb21lIHRoZW1lIGVuZ2luZXMgbG92ZSB0byBjYXVz
ZSB1cyBwYWluIGluIHRoYXQgZ3RrX3BhaW50X2ZvY3VzIGlzIGEKICAgICAgICBuby1vcCBvbiBi
dXR0b25zIGFuZCBidXR0b24tbGlrZSB3aWRnZXRzLiBUaGV5IG9ubHkgbGlzdGVuIHRvIHRoaXMg
ZmxhZy4gKi8KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgogICAgIGlmIChzdGF0ZS0+Zm9jdXNl
ZCAmJiAhc3RhdGUtPmRpc2FibGVkKQogICAgICAgICBHVEtfV0lER0VUX1NFVF9GTEFHUyh3aWRn
ZXQsIEdUS19IQVNfRk9DVVMpOwotI2VuZGlmCiAKICAgICBpZiAoIWludGVyaW9yX2ZvY3VzICYm
IHN0YXRlLT5mb2N1c2VkKSB7CiAgICAgICAgIHggKz0gZm9jdXNfd2lkdGggKyBmb2N1c19wYWQ7
CkBAIC00NTMsMTAgKzQ0Nyw4IEBAIG1vel9ndGtfYnV0dG9uX3BhaW50KEdka0RyYXdhYmxlKiBk
cmF3YWJsZSwgR2RrUmVjdGFuZ2xlKiByZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgd2lk
Z2V0LCAiYnV0dG9uIiwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAgICAgfQogCi0jaWZkZWYgR1RL
X0FQSV9WRVJTSU9OXzIKICAgICBHVEtfV0lER0VUX1VOU0VUX0ZMQUdTKHdpZGdldCwgR1RLX0hB
U19ERUZBVUxUKTsKICAgICBHVEtfV0lER0VUX1VOU0VUX0ZMQUdTKHdpZGdldCwgR1RLX0hBU19G
T0NVUyk7Ci0jZW5kaWYKICAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOwogfQogCkBAIC04NjEs
OSArODUzLDcgQEAgbW96X2d0a19zY3JvbGxiYXJfdGh1bWJfcGFpbnQoR3RrVGhlbWVXaWRnZXRU
eXBlIHdpZGdldCwKICAgICBHdGtTdHlsZSogc3R5bGU7CiAgICAgR3RrU2Nyb2xsYmFyICpzY3Jv
bGxiYXI7CiAgICAgR3RrQWRqdXN0bWVudCAqYWRqOwotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8y
CiAgICAgZ2Jvb2xlYW4gYWN0aXZhdGVfc2xpZGVyOwotI2VuZGlmCiAKICAgICBlbnN1cmVfc2Ny
b2xsYmFyX3dpZGdldCgpOwogCkBAIC05MTUsNyArOTA1LDYgQEAgbW96X2d0a19zY3JvbGxiYXJf
dGh1bWJfcGFpbnQoR3RrVGhlbWVXaWRnZXRUeXBlIHdpZGdldCwKIAogICAgIHN0eWxlID0gZ3Rr
X3dpZGdldF9nZXRfc3R5bGUoR1RLX1dJREdFVChzY3JvbGxiYXIpKTsKICAgICAKLSNpZmRlZiBH
VEtfQVBJX1ZFUlNJT05fMgogICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0KEdUS19XSURHRVQoc2Ny
b2xsYmFyKSwgImFjdGl2YXRlLXNsaWRlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJmFj
dGl2YXRlX3NsaWRlciwgTlVMTCk7CiAgICAgCkBAIC05MjMsNyArOTEyLDYgQEAgbW96X2d0a19z
Y3JvbGxiYXJfdGh1bWJfcGFpbnQoR3RrVGhlbWVXaWRnZXRUeXBlIHdpZGdldCwKICAgICAgICAg
c2hhZG93X3R5cGUgPSBHVEtfU0hBRE9XX0lOOwogICAgICAgICBzdGF0ZV90eXBlID0gR1RLX1NU
QVRFX0FDVElWRTsKICAgICB9Ci0jZW5kaWYKIAogICAgIFRTT2Zmc2V0U3R5bGVHQ3Moc3R5bGUs
IHJlY3QtPngsIHJlY3QtPnkpOwogCkBAIC0xMDU2LDE3ICsxMDQ0LDggQEAgbW96X2d0a19lbnRy
eV9wYWludChHZGtEcmF3YWJsZSogZHJhd2FibGUsIEdka1JlY3RhbmdsZSogcmVjdCwKICAgICBp
ZiAodGhlbWVfaG9ub3JzX3RyYW5zcGFyZW5jeSkgewogICAgICAgICBnX29iamVjdF9zZXRfZGF0
YShHX09CSkVDVCh3aWRnZXQpLCAidHJhbnNwYXJlbnQtYmctaGludCIsIEdJTlRfVE9fUE9JTlRF
UihUUlVFKSk7CiAgICAgfSBlbHNlIHsKLSNpZm5kZWYgR1RLX0FQSV9WRVJTSU9OXzIKLSAgICAg
ICAgY2Fpcm9fdCogY3IgPSBnZGtfY2Fpcm9fY3JlYXRlKGRyYXdhYmxlKTsKLSAgICAgICAgZ2Rr
X2NhaXJvX3NldF9zb3VyY2VfY29sb3IoY3IsIChjb25zdCBHZGtDb2xvciopJnN0eWxlLT5iYXNl
W2JnX3N0YXRlXSk7Ci0gICAgICAgIGNhaXJvX3BhdHRlcm5fc2V0X2V4dGVuZCAoY2Fpcm9fZ2V0
X3NvdXJjZShjciksIENBSVJPX0VYVEVORF9SRVBFQVQpOwotICAgICAgICBnZGtfY2Fpcm9fcmVj
dGFuZ2xlKGNyLCBjbGlwcmVjdCk7Ci0gICAgICAgIGNhaXJvX2ZpbGwoY3IpOwotICAgICAgICBj
YWlyb19kZXN0cm95KGNyKTsKLSNlbHNlCiAgICAgICAgIGdka19kcmF3X3JlY3RhbmdsZShkcmF3
YWJsZSwgc3R5bGUtPmJhc2VfZ2NbYmdfc3RhdGVdLCBUUlVFLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2xpcHJlY3QtPngsIGNsaXByZWN0LT55LCBjbGlwcmVjdC0+d2lkdGgsIGNsaXBy
ZWN0LT5oZWlnaHQpOwotI2VuZGlmCiAgICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNU
KHdpZGdldCksICJ0cmFuc3BhcmVudC1iZy1oaW50IiwgR0lOVF9UT19QT0lOVEVSKEZBTFNFKSk7
CiAgICAgfQogCkBAIC0xMDkzLDkgKzEwNzIsNyBAQCBtb3pfZ3RrX2VudHJ5X3BhaW50KEdka0Ry
YXdhYmxlKiBkcmF3YWJsZSwgR2RrUmVjdGFuZ2xlKiByZWN0LAogICAgIGlmIChzdGF0ZS0+Zm9j
dXNlZCAmJiAhc3RhdGUtPmRpc2FibGVkKSB7CiAgICAgICAgIC8qIFRoaXMgd2lsbCBnZXQgdXMg
dGhlIGxpdCBib3JkZXJzIHRoYXQgZm9jdXNlZCB0ZXh0Ym94ZXMgZW5qb3kgb24KICAgICAgICAg
ICogc29tZSB0aGVtZXMuICovCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKICAgICAgICAgR1RL
X1dJREdFVF9TRVRfRkxBR1Mod2lkZ2V0LCBHVEtfSEFTX0ZPQ1VTKTsKLSNlbmRpZgogCiAgICAg
ICAgIGlmICghaW50ZXJpb3JfZm9jdXMpIHsKICAgICAgICAgICAgIC8qIEluZGVudCB0aGUgYm9y
ZGVyIGEgbGl0dGxlIGJpdCBpZiB3ZSBoYXZlIGV4dGVyaW9yIGZvY3VzIApAQCAtMTExOSw5ICsx
MDk2LDcgQEAgbW96X2d0a19lbnRyeV9wYWludChHZGtEcmF3YWJsZSogZHJhd2FibGUsIEdka1Jl
Y3RhbmdsZSogcmVjdCwKIAogICAgICAgICAvKiBOb3cgdW5zZXQgdGhlIGZvY3VzIGZsYWcuIFdl
IGRvbid0IHdhbnQgb3RoZXIgZW50cmllcyB0byBsb29rCiAgICAgICAgICAqIGxpa2UgdGhleSdy
ZSBmb2N1c2VkIHRvbyEgKi8KLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgogICAgICAgICBHVEtf
V0lER0VUX1VOU0VUX0ZMQUdTKHdpZGdldCwgR1RLX0hBU19GT0NVUyk7Ci0jZW5kaWYKICAgICB9
CiAKICAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOwpAQCAtMTE1MSwxMSArMTEyNiw3IEBAIG1v
el9ndGtfY29tYm9fYm94X3BhaW50KEdka0RyYXdhYmxlKiBkcmF3YWJsZSwgR2RrUmVjdGFuZ2xl
KiByZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LCAmYXJyb3dfcmVj
dCwgZGlyZWN0aW9uLCBpc2h0bWwpOwogICAgIC8qIE5vdyBhcnJvd19yZWN0IGNvbnRhaW5zIHRo
ZSBpbm5lciByZWN0IDsgd2Ugd2FudCB0byBjb3JyZWN0IHRoZSB3aWR0aAogICAgICAqIHRvIHdo
YXQgdGhlIGFycm93IG5lZWRzIChzZWUgZ3RrX2NvbWJvX2JveF9zaXplX2FsbG9jYXRlKSAqLwot
I2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCiAgICAgZ3RrX3dpZGdldF9zaXplX3JlcXVlc3QoZ1Bh
cnRzLT5jb21ib0JveEFycm93V2lkZ2V0LCAmYXJyb3dfcmVxKTsKLSNlbHNlCi0gICAgZ3RrX3Np
emVfcmVxdWVzdF9nZXRfc2l6ZShHVEtfU0laRV9SRVFVRVNUKGdQYXJ0cy0+Y29tYm9Cb3hBcnJv
d1dpZGdldCksICZhcnJvd19yZXEsIE5VTEwpOwotI2VuZGlmCiAgICAgaWYgKGRpcmVjdGlvbiA9
PSBHVEtfVEVYVF9ESVJfTFRSKQogICAgICAgICBhcnJvd19yZWN0LnggKz0gYXJyb3dfcmVjdC53
aWR0aCAtIGFycm93X3JlcS53aWR0aDsKICAgICBhcnJvd19yZWN0LndpZHRoID0gYXJyb3dfcmVx
LndpZHRoOwpAQCAtMTMzMSwxMSArMTMwMiw3IEBAIG1vel9ndGtfZ2V0X3dpZGdldF9ib3JkZXIo
R3RrVGhlbWVXaWRnZXRUeXBlIHdpZGdldCwgZ2ludCogbGVmdCwgZ2ludCogdG9wLAogICAgICAg
ICAgICAgICAgICAgICAgICAgWFRISUNLTkVTUyhzdHlsZSk7CiAgICAgICAgICAgICB9CiAKLSNp
ZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgogICAgICAgICAgICAgZ3RrX3dpZGdldF9zaXplX3JlcXVl
c3QoZ1BhcnRzLT5jb21ib0JveEFycm93V2lkZ2V0LCAmYXJyb3dfcmVxKTsKLSNlbHNlCi0gICAg
ICAgICAgICBndGtfc2l6ZV9yZXF1ZXN0X2dldF9zaXplKEdUS19TSVpFX1JFUVVFU1QoZ1BhcnRz
LT5jb21ib0JveEFycm93V2lkZ2V0KSwgJmFycm93X3JlcSwgTlVMTCk7Ci0jZW5kaWYKICAgICAg
ICAgICAgIGlmIChkaXJlY3Rpb24gPT0gR1RLX1RFWFRfRElSX1JUTCkKICAgICAgICAgICAgICAg
ICAqbGVmdCArPSBzZXBhcmF0b3Jfd2lkdGggKyBhcnJvd19yZXEud2lkdGg7CiAgICAgICAgICAg
ICBlbHNlCkBAIC0xNTMyLDMgKzE0OTksNSBAQCBHdGtXaWRnZXQqIG1vel9ndGtfZ2V0X3Byb2dy
ZXNzX3dpZGdldCgpCiAgICAgZW5zdXJlX3Byb2dyZXNzX3dpZGdldCgpOwogICAgIHJldHVybiBn
UGFydHMtPnByb2dyZXNXaWRnZXQ7CiB9CisKKyNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvZ3RrM2RyYXdpbmcuYyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL2d0azNkcmF3aW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZGRhMTEwZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL2d0
azNkcmF3aW5nLmMKQEAgLTAsMCArMSwxNDE2IEBACisvKiAtKi0gTW9kZTogQysrOyB0YWItd2lk
dGg6IDQ7IGluZGVudC10YWJzLW1vZGU6IG5pbDsgYy1iYXNpYy1vZmZzZXQ6IDQgLSotICovCisv
KiAqKioqKiBCRUdJTiBMSUNFTlNFIEJMT0NLICoqKioqCisgKiBWZXJzaW9uOiBNUEwgMS4xL0dQ
TCAyLjAvTEdQTCAyLjEKKyAqCisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJq
ZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKyAqIDEuMSAodGhlICJM
aWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ug
d2l0aAorICogdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5z
ZSBhdAorICogaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisgKgorICogU29mdHdhcmUgZGlz
dHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBi
YXNpcywKKyAqIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9y
IGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICogZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBn
b3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUKKyAqIExpY2Vuc2UuCisg
KgorICogVGhlIE9yaWdpbmFsIENvZGUgaXMgbW96aWxsYS5vcmcgY29kZS4KKyAqCisgKiBUaGUg
SW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMKKyAqIE5ldHNjYXBlIENv
bW11bmljYXRpb25zIENvcnBvcmF0aW9uLgorICogUG9ydGlvbnMgY3JlYXRlZCBieSB0aGUgSW5p
dGlhbCBEZXZlbG9wZXIgYXJlIENvcHlyaWdodCAoQykgMjAwMgorICogdGhlIEluaXRpYWwgRGV2
ZWxvcGVyLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIENvbnRyaWJ1dG9yKHMpOgorICog
IEJyaWFuIFJ5bmVyIDxicnluZXJAYnJpYW5yeW5lci5jb20+ICAoT3JpZ2luYWwgQXV0aG9yKQor
ICogIFBpZXJyZSBDaGFuaWFsIDxwX2NoQHZlcml6b24ubmV0PgorICogIE1pY2hhZWwgVmVudG5v
ciA8bS52ZW50bm9yQGdtYWlsLmNvbT4KKyAqICBBbHAgVG9rZXIgPGFscEBudWFudGkuY29tPgor
ICoKKyAqIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVz
ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgKiBlaXRoZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIFZlcnNpb24gMiBvciBsYXRlciAodGhlICJHUEwiKSwgb3IKKyAqIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLjEgb3IgbGF0ZXIgKHRoZSAiTEdQ
TCIpLAorICogaW4gd2hpY2ggY2FzZSB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgR1BMIG9yIHRoZSBM
R1BMIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQKKyAqIG9mIHRob3NlIGFib3ZlLiBJZiB5b3Ugd2lz
aCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgKiB1bmRl
ciB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBHUEwgb3IgdGhlIExHUEwsIGFuZCBub3QgdG8gYWxs
b3cgb3RoZXJzIHRvCisgKiB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIE1QTCwgaW5kaWNhdGUgeW91cgorICogZGVjaXNpb24gYnkgZGVsZXRpbmcg
dGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UKKyAq
IGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBHUEwgb3IgdGhlIExHUEwuIElm
IHlvdSBkbyBub3QgZGVsZXRlCisgKiB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQg
bWF5IHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyCisgKiB0aGUgdGVybXMgb2Yg
YW55IG9uZSBvZiB0aGUgTVBMLCB0aGUgR1BMIG9yIHRoZSBMR1BMLgorICoKKyAqICoqKioqIEVO
RCBMSUNFTlNFIEJMT0NLICoqKioqICovCisKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgcGFp
bnRpbmcgZnVuY3Rpb25zIGZvciBlYWNoIG9mIHRoZSBndGsyIHdpZGdldHMuCisgKiBBZGFwdGVk
IGZyb20gdGhlIGd0a2RyYXdpbmcuYywgYW5kIGd0aysyLjAgc291cmNlLgorICovCisKKyNpZm5k
ZWYgR1RLX0FQSV9WRVJTSU9OXzIKKworI2luY2x1ZGUgPGdkay9nZGtwcml2YXRlLmg+CisjaW5j
bHVkZSAiZ3RrZHJhd2luZy5oIgorI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKKyNpbmNsdWRl
IDxtYXRoLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUgWFRISUNLTkVTUyhzdHls
ZSkgKHN0eWxlLT54dGhpY2tuZXNzKQorI2RlZmluZSBZVEhJQ0tORVNTKHN0eWxlKSAoc3R5bGUt
Pnl0aGlja25lc3MpCisKK3N0YXRpYyBHdGtUaGVtZVBhcnRzICpnUGFydHMgPSBOVUxMOworc3Rh
dGljIHN0eWxlX3Byb3BfdCBzdHlsZV9wcm9wX2Z1bmM7CitzdGF0aWMgZ2Jvb2xlYW4gaGF2ZV9h
cnJvd19zY2FsaW5nOworc3RhdGljIGdib29sZWFuIGlzX2luaXRpYWxpemVkOworCit2b2lkCitt
b3pfZ3RrX3VzZV90aGVtZV9wYXJ0cyhHdGtUaGVtZVBhcnRzKiBwYXJ0cykKK3sKKyAgICBnUGFy
dHMgPSBwYXJ0czsKK30KKworLyogQmVjYXVzZSB3ZSBoYXZlIHN1Y2ggYW4gdW5jb252ZW50aW9u
YWwgd2F5IG9mIGRyYXdpbmcgd2lkZ2V0cywgc2lnbmFsIHRvIHRoZSBHVEsgdGhlbWUgZW5naW5l
CisgICB0aGF0IHRoZXkgYXJlIGRyYXdpbmcgZm9yIE1vemlsbGEgaW5zdGVhZCBvZiBhIGNvbnZl
bnRpb25hbCBHVEsgYXBwIHNvIHRoZXkgY2FuIGRvIGFueSBzcGVjaWZpYworICAgdGhpbmdzIHRo
ZXkgbWF5IHdhbnQgdG8gZG8uICovCitzdGF0aWMgdm9pZAorbW96X2d0a19zZXRfd2lkZ2V0X25h
bWUoR3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgZ3RrX3dpZGdldF9zZXRfbmFtZSh3aWRnZXQs
ICJNb3ppbGxhR3RrV2lkZ2V0Iik7Cit9CisKK2dpbnQKK21vel9ndGtfZW5hYmxlX3N0eWxlX3By
b3BzKHN0eWxlX3Byb3BfdCBzdHlsZUdldFByb3ApCit7CisgICAgc3R5bGVfcHJvcF9mdW5jID0g
c3R5bGVHZXRQcm9wOworICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBn
aW50CitlbnN1cmVfd2luZG93X3dpZGdldCgpCit7CisgICAgaWYgKCFnUGFydHMtPnByb3RvV2lu
ZG93KSB7CisgICAgICAgIGdQYXJ0cy0+cHJvdG9XaW5kb3cgPSBndGtfd2luZG93X25ldyhHVEtf
V0lORE9XX1BPUFVQKTsKKyAgICAgICAgZ3RrX3dpZGdldF9yZWFsaXplKGdQYXJ0cy0+cHJvdG9X
aW5kb3cpOworICAgICAgICBtb3pfZ3RrX3NldF93aWRnZXRfbmFtZShnUGFydHMtPnByb3RvV2lu
ZG93KTsKKyAgICB9CisgICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKK30KKworc3RhdGljIGdp
bnQKK3NldHVwX3dpZGdldF9wcm90b3R5cGUoR3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgZW5z
dXJlX3dpbmRvd193aWRnZXQoKTsKKyAgICBpZiAoIWdQYXJ0cy0+cHJvdG9MYXlvdXQpIHsKKyAg
ICAgICAgZ1BhcnRzLT5wcm90b0xheW91dCA9IGd0a19maXhlZF9uZXcoKTsKKyAgICAgICAgZ3Rr
X2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihnUGFydHMtPnByb3RvV2luZG93KSwgZ1BhcnRz
LT5wcm90b0xheW91dCk7CisgICAgfQorCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRB
SU5FUihnUGFydHMtPnByb3RvTGF5b3V0KSwgd2lkZ2V0KTsKKyAgICBndGtfd2lkZ2V0X3JlYWxp
emUod2lkZ2V0KTsKKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVCh3aWRnZXQpLCAidHJh
bnNwYXJlbnQtYmctaGludCIsIEdJTlRfVE9fUE9JTlRFUihUUlVFKSk7CisgICAgcmV0dXJuIE1P
Wl9HVEtfU1VDQ0VTUzsKK30KKworc3RhdGljIGdpbnQKK2Vuc3VyZV9idXR0b25fd2lkZ2V0KCkK
K3sKKyAgICBpZiAoIWdQYXJ0cy0+YnV0dG9uV2lkZ2V0KSB7CisgICAgICAgIGdQYXJ0cy0+YnV0
dG9uV2lkZ2V0ID0gZ3RrX2J1dHRvbl9uZXdfd2l0aF9sYWJlbCgiTSIpOworICAgICAgICBzZXR1
cF93aWRnZXRfcHJvdG90eXBlKGdQYXJ0cy0+YnV0dG9uV2lkZ2V0KTsKKyAgICB9CisgICAgcmV0
dXJuIE1PWl9HVEtfU1VDQ0VTUzsKK30KKworc3RhdGljIGdpbnQKK2Vuc3VyZV90b2dnbGVfYnV0
dG9uX3dpZGdldCgpCit7CisgICAgaWYgKCFnUGFydHMtPnRvZ2dsZUJ1dHRvbldpZGdldCkgewor
ICAgICAgICBnUGFydHMtPnRvZ2dsZUJ1dHRvbldpZGdldCA9IGd0a190b2dnbGVfYnV0dG9uX25l
dygpOworICAgICAgICBzZXR1cF93aWRnZXRfcHJvdG90eXBlKGdQYXJ0cy0+dG9nZ2xlQnV0dG9u
V2lkZ2V0KTsKKyAgICAgICAgLyogdG9nZ2xlIGJ1dHRvbiBtdXN0IGJlIHNldCBhY3RpdmUgdG8g
Z2V0IHRoZSByaWdodCBzdHlsZSBvbiBob3Zlci4gKi8KKyAgICAgICAgZ3RrX3RvZ2dsZV9idXR0
b25fc2V0X2FjdGl2ZShHVEtfVE9HR0xFX0JVVFRPTihnUGFydHMtPnRvZ2dsZUJ1dHRvbldpZGdl
dCksIFRSVUUpOworICB9CisgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBn
aW50CitlbnN1cmVfYnV0dG9uX2Fycm93X3dpZGdldCgpCit7CisgICAgaWYgKCFnUGFydHMtPmJ1
dHRvbkFycm93V2lkZ2V0KSB7CisgICAgICAgIGVuc3VyZV90b2dnbGVfYnV0dG9uX3dpZGdldCgp
OworCisgICAgICAgIGdQYXJ0cy0+YnV0dG9uQXJyb3dXaWRnZXQgPSBndGtfYXJyb3dfbmV3KEdU
S19BUlJPV19ET1dOLCBHVEtfU0hBRE9XX09VVCk7CisgICAgICAgIGd0a19jb250YWluZXJfYWRk
KEdUS19DT05UQUlORVIoZ1BhcnRzLT50b2dnbGVCdXR0b25XaWRnZXQpLCBnUGFydHMtPmJ1dHRv
bkFycm93V2lkZ2V0KTsKKyAgICAgICAgZ3RrX3dpZGdldF9yZWFsaXplKGdQYXJ0cy0+YnV0dG9u
QXJyb3dXaWRnZXQpOworICAgIH0KKyAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOworfQorCitz
dGF0aWMgZ2ludAorZW5zdXJlX2NoZWNrYm94X3dpZGdldCgpCit7CisgICAgaWYgKCFnUGFydHMt
PmNoZWNrYm94V2lkZ2V0KSB7CisgICAgICAgIGdQYXJ0cy0+Y2hlY2tib3hXaWRnZXQgPSBndGtf
Y2hlY2tfYnV0dG9uX25ld193aXRoX2xhYmVsKCJNIik7CisgICAgICAgIHNldHVwX3dpZGdldF9w
cm90b3R5cGUoZ1BhcnRzLT5jaGVja2JveFdpZGdldCk7CisgICAgfQorICAgIHJldHVybiBNT1pf
R1RLX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBnaW50CitlbnN1cmVfcmFkaW9idXR0b25fd2lkZ2V0
KCkKK3sKKyAgICBpZiAoIWdQYXJ0cy0+cmFkaW9idXR0b25XaWRnZXQpIHsKKyAgICAgICAgZ1Bh
cnRzLT5yYWRpb2J1dHRvbldpZGdldCA9IGd0a19yYWRpb19idXR0b25fbmV3X3dpdGhfbGFiZWwo
TlVMTCwgIk0iKTsKKyAgICAgICAgc2V0dXBfd2lkZ2V0X3Byb3RvdHlwZShnUGFydHMtPnJhZGlv
YnV0dG9uV2lkZ2V0KTsKKyAgICB9CisgICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKK30KKwor
c3RhdGljIGdpbnQKK2Vuc3VyZV9zY3JvbGxiYXJfd2lkZ2V0KCkKK3sKKyAgICBpZiAoIWdQYXJ0
cy0+dmVydFNjcm9sbGJhcldpZGdldCkgeworICAgICAgICBnUGFydHMtPnZlcnRTY3JvbGxiYXJX
aWRnZXQgPSBndGtfdnNjcm9sbGJhcl9uZXcoTlVMTCk7CisgICAgICAgIHNldHVwX3dpZGdldF9w
cm90b3R5cGUoZ1BhcnRzLT52ZXJ0U2Nyb2xsYmFyV2lkZ2V0KTsKKyAgICB9CisgICAgaWYgKCFn
UGFydHMtPmhvcml6U2Nyb2xsYmFyV2lkZ2V0KSB7CisgICAgICAgIGdQYXJ0cy0+aG9yaXpTY3Jv
bGxiYXJXaWRnZXQgPSBndGtfaHNjcm9sbGJhcl9uZXcoTlVMTCk7CisgICAgICAgIHNldHVwX3dp
ZGdldF9wcm90b3R5cGUoZ1BhcnRzLT5ob3JpelNjcm9sbGJhcldpZGdldCk7CisgICAgfQorICAg
IHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBnaW50CitlbnN1cmVfc2NhbGVf
d2lkZ2V0KCkKK3sKKyAgaWYgKCFnUGFydHMtPmhTY2FsZVdpZGdldCkgeworICAgIGdQYXJ0cy0+
aFNjYWxlV2lkZ2V0ID0gZ3RrX2hzY2FsZV9uZXcoTlVMTCk7CisgICAgc2V0dXBfd2lkZ2V0X3By
b3RvdHlwZShnUGFydHMtPmhTY2FsZVdpZGdldCk7CisgIH0KKyAgaWYgKCFnUGFydHMtPnZTY2Fs
ZVdpZGdldCkgeworICAgIGdQYXJ0cy0+dlNjYWxlV2lkZ2V0ID0gZ3RrX3ZzY2FsZV9uZXcoTlVM
TCk7CisgICAgc2V0dXBfd2lkZ2V0X3Byb3RvdHlwZShnUGFydHMtPnZTY2FsZVdpZGdldCk7Cisg
IH0KKyAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKK30KKworc3RhdGljIGdpbnQKK2Vuc3VyZV9l
bnRyeV93aWRnZXQoKQoreworICAgIGlmICghZ1BhcnRzLT5lbnRyeVdpZGdldCkgeworICAgICAg
ICBnUGFydHMtPmVudHJ5V2lkZ2V0ID0gZ3RrX2VudHJ5X25ldygpOworICAgICAgICBzZXR1cF93
aWRnZXRfcHJvdG90eXBlKGdQYXJ0cy0+ZW50cnlXaWRnZXQpOworICAgIH0KKyAgICByZXR1cm4g
TU9aX0dUS19TVUNDRVNTOworfQorCisvKiBXZSBuZWVkIHRvIGhhdmUgcG9pbnRlcnMgdG8gdGhl
IGlubmVyIHdpZGdldHMgKGJ1dHRvbiwgc2VwYXJhdG9yLCBhcnJvdykKKyAqIG9mIHRoZSBDb21i
b0JveCB0byBnZXQgdGhlIGNvcnJlY3QgcmVuZGVyaW5nIGZyb20gdGhlbWUgZW5naW5lcyB3aGlj
aAorICogc3BlY2lhbCBjYXNlcyB0aGVpciBsb29rLiBTaW5jZSB0aGUgaW5uZXIgbGF5b3V0IGNh
biBjaGFuZ2UsIHdlIGFzayBHVEsKKyAqIHRvIE5VTEwgb3VyIHBvaW50ZXJzIHdoZW4gdGhleSBh
cmUgYWJvdXQgdG8gYmVjb21lIGludmFsaWQgYmVjYXVzZSB0aGUKKyAqIGNvcnJlc3BvbmRpbmcg
d2lkZ2V0cyBkb24ndCBleGlzdCBhbnltb3JlLiBJdCdzIHRoZSByb2xlIG9mCisgKiBnX29iamVj
dF9hZGRfd2Vha19wb2ludGVyKCkuCisgKiBOb3RlIHRoYXQgaWYgd2UgZG9uJ3QgZmluZCB0aGUg
aW5uZXIgd2lkZ2V0cyAod2hpY2ggc2hvdWxkbid0IGhhcHBlbiksIHdlCisgKiBmYWxsYmFjayB0
byB1c2UgZ2VuZXJpYyAibm9uLWlubmVyIiB3aWRnZXRzLCBhbmQgdGhleSBkb24ndCBuZWVkIHRo
YXQga2luZAorICogb2Ygd2VhayBwb2ludGVyIHNpbmNlIHRoZXkgYXJlIGV4cGxpY2l0IGNoaWxk
cmVuIG9mIGdQYXJ0cy0+cHJvdG9XaW5kb3cgYW5kIGFzCisgKiBzdWNoIEdUSyBob2xkcyBhIHN0
cm9uZyByZWZlcmVuY2UgdG8gdGhlbS4gKi8KK3N0YXRpYyB2b2lkCittb3pfZ3RrX2dldF9jb21i
b19ib3hfaW5uZXJfYnV0dG9uKEd0a1dpZGdldCAqd2lkZ2V0LCBncG9pbnRlciBjbGllbnRfZGF0
YSkKK3sKKyAgICBpZiAoR1RLX0lTX1RPR0dMRV9CVVRUT04od2lkZ2V0KSkgeworICAgICAgICBn
UGFydHMtPmNvbWJvQm94QnV0dG9uV2lkZ2V0ID0gd2lkZ2V0OworICAgICAgICBnX29iamVjdF9h
ZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKHdpZGdldCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGdwb2ludGVyKSAmZ1BhcnRzLT5jb21ib0JveEJ1dHRvbldpZGdldCk7Cisg
ICAgICAgIGd0a193aWRnZXRfcmVhbGl6ZSh3aWRnZXQpOworICAgICAgICBnX29iamVjdF9zZXRf
ZGF0YShHX09CSkVDVCh3aWRnZXQpLCAidHJhbnNwYXJlbnQtYmctaGludCIsIEdJTlRfVE9fUE9J
TlRFUihUUlVFKSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorbW96X2d0a19nZXRfY29tYm9f
Ym94X2J1dHRvbl9pbm5lcl93aWRnZXRzKEd0a1dpZGdldCAqd2lkZ2V0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGNsaWVudF9kYXRhKQorewor
ICAgIGlmIChHVEtfSVNfU0VQQVJBVE9SKHdpZGdldCkpIHsKKyAgICAgICAgZ1BhcnRzLT5jb21i
b0JveFNlcGFyYXRvcldpZGdldCA9IHdpZGdldDsKKyAgICAgICAgZ19vYmplY3RfYWRkX3dlYWtf
cG9pbnRlcihHX09CSkVDVCh3aWRnZXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChncG9pbnRlcikgJmdQYXJ0cy0+Y29tYm9Cb3hTZXBhcmF0b3JXaWRnZXQpOworICAgIH0g
ZWxzZSBpZiAoR1RLX0lTX0FSUk9XKHdpZGdldCkpIHsKKyAgICAgICAgZ1BhcnRzLT5jb21ib0Jv
eEFycm93V2lkZ2V0ID0gd2lkZ2V0OworICAgICAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVy
KEdfT0JKRUNUKHdpZGdldCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdw
b2ludGVyKSAmZ1BhcnRzLT5jb21ib0JveEFycm93V2lkZ2V0KTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgcmV0dXJuOworICAgIGd0a193aWRnZXRfcmVhbGl6ZSh3aWRnZXQpOworICAgIGdfb2JqZWN0
X3NldF9kYXRhKEdfT0JKRUNUKHdpZGdldCksICJ0cmFuc3BhcmVudC1iZy1oaW50IiwgR0lOVF9U
T19QT0lOVEVSKFRSVUUpKTsKK30KKworc3RhdGljIGdpbnQKK2Vuc3VyZV9jb21ib19ib3hfd2lk
Z2V0cygpCit7CisgICAgR3RrV2lkZ2V0KiBidXR0b25DaGlsZDsKKworICAgIGlmIChnUGFydHMt
PmNvbWJvQm94QnV0dG9uV2lkZ2V0ICYmIGdQYXJ0cy0+Y29tYm9Cb3hBcnJvd1dpZGdldCkKKyAg
ICAgICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKKworICAgIC8qIENyZWF0ZSBhIENvbWJvQm94
IGlmIG5lZWRlZCAqLworICAgIGlmICghZ1BhcnRzLT5jb21ib0JveFdpZGdldCkgeworICAgICAg
ICBnUGFydHMtPmNvbWJvQm94V2lkZ2V0ID0gZ3RrX2NvbWJvX2JveF9uZXcoKTsKKyAgICAgICAg
c2V0dXBfd2lkZ2V0X3Byb3RvdHlwZShnUGFydHMtPmNvbWJvQm94V2lkZ2V0KTsKKyAgICB9CisK
KyAgICAvKiBHZXQgaXRzIGlubmVyIEJ1dHRvbiAqLworICAgIGd0a19jb250YWluZXJfZm9yYWxs
KEdUS19DT05UQUlORVIoZ1BhcnRzLT5jb21ib0JveFdpZGdldCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgbW96X2d0a19nZXRfY29tYm9fYm94X2lubmVyX2J1dHRvbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBOVUxMKTsKKworICAgIGlmIChnUGFydHMtPmNvbWJvQm94QnV0dG9uV2lk
Z2V0KSB7CisgICAgICAgIC8qIEdldCB0aGUgd2lkZ2V0cyBpbnNpZGUgdGhlIEJ1dHRvbiAqLwor
ICAgICAgICBidXR0b25DaGlsZCA9IGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4oZ1BhcnRzLT5j
b21ib0JveEJ1dHRvbldpZGdldCkpOworICAgICAgICBpZiAoR1RLX0lTX0hCT1goYnV0dG9uQ2hp
bGQpKSB7CisgICAgICAgICAgICAvKiBhcHBlYXJzLWFzLWxpc3QgPSBGQUxTRSwgY2VsbC12aWV3
ID0gVFJVRTsgdGhlIGJ1dHRvbgorICAgICAgICAgICAgICogY29udGFpbnMgYW4gaGJveC4gVGhp
cyBoYm94IGlzIHRoZXJlIGJlY2F1c2UgdGhlIENvbWJvQm94CisgICAgICAgICAgICAgKiBuZWVk
cyB0byBwbGFjZSBhIGNlbGwgcmVuZGVyZXIsIGEgc2VwYXJhdG9yLCBhbmQgYW4gYXJyb3cgaW4K
KyAgICAgICAgICAgICAqIHRoZSBidXR0b24gd2hlbiBhcHBlYXJzLWFzLWxpc3QgaXMgRkFMU0Uu
ICovCisgICAgICAgICAgICBndGtfY29udGFpbmVyX2ZvcmFsbChHVEtfQ09OVEFJTkVSKGJ1dHRv
bkNoaWxkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vel9ndGtfZ2V0X2Nv
bWJvX2JveF9idXR0b25faW5uZXJfd2lkZ2V0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5VTEwpOworICAgICAgICB9IGVsc2UgaWYoR1RLX0lTX0FSUk9XKGJ1dHRvbkNoaWxk
KSkgeworICAgICAgICAgICAgLyogYXBwZWFycy1hcy1saXN0ID0gVFJVRSwgb3IgY2VsbC12aWV3
ID0gRkFMU0U7CisgICAgICAgICAgICAgKiB0aGUgYnV0dG9uIG9ubHkgY29udGFpbnMgYW4gYXJy
b3cgKi8KKyAgICAgICAgICAgIGdQYXJ0cy0+Y29tYm9Cb3hBcnJvd1dpZGdldCA9IGJ1dHRvbkNo
aWxkOworICAgICAgICAgICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVChidXR0
b25DaGlsZCksIChncG9pbnRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJmdQYXJ0cy0+Y29tYm9Cb3hBcnJvd1dpZGdldCk7CisgICAgICAgICAgICBndGtfd2lkZ2V0
X3JlYWxpemUoZ1BhcnRzLT5jb21ib0JveEFycm93V2lkZ2V0KTsKKyAgICAgICAgICAgIGdfb2Jq
ZWN0X3NldF9kYXRhKEdfT0JKRUNUKGdQYXJ0cy0+Y29tYm9Cb3hBcnJvd1dpZGdldCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAidHJhbnNwYXJlbnQtYmctaGludCIsIEdJTlRfVE9f
UE9JTlRFUihUUlVFKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvKiBTaG91
bGRuJ3QgYmUgcmVhY2hlZCB3aXRoIGN1cnJlbnQgaW50ZXJuYWwgZ3RrIGltcGxlbWVudGF0aW9u
OyB3ZQorICAgICAgICAgKiB1c2UgYSBnZW5lcmljIHRvZ2dsZSBidXR0b24gYXMgbGFzdCByZXNv
cnQgZmFsbGJhY2sgdG8gYXZvaWQKKyAgICAgICAgICogY3Jhc2hpbmcuICovCisgICAgICAgIGVu
c3VyZV90b2dnbGVfYnV0dG9uX3dpZGdldCgpOworICAgICAgICBnUGFydHMtPmNvbWJvQm94QnV0
dG9uV2lkZ2V0ID0gZ1BhcnRzLT50b2dnbGVCdXR0b25XaWRnZXQ7CisgICAgfQorCisgICAgaWYg
KCFnUGFydHMtPmNvbWJvQm94QXJyb3dXaWRnZXQpIHsKKyAgICAgICAgLyogU2hvdWxkbid0IGJl
IHJlYWNoZWQgd2l0aCBjdXJyZW50IGludGVybmFsIGd0ayBpbXBsZW1lbnRhdGlvbjsKKyAgICAg
ICAgICogd2UgZ1BhcnRzLT5idXR0b25BcnJvd1dpZGdldCBhcyBsYXN0IHJlc29ydCBmYWxsYmFj
ayB0byBhdm9pZAorICAgICAgICAgKiBjcmFzaGluZy4gKi8KKyAgICAgICAgZW5zdXJlX2J1dHRv
bl9hcnJvd193aWRnZXQoKTsKKyAgICAgICAgZ1BhcnRzLT5jb21ib0JveEFycm93V2lkZ2V0ID0g
Z1BhcnRzLT5idXR0b25BcnJvd1dpZGdldDsKKyAgICB9CisKKyAgICAvKiBXZSBkb24ndCB0ZXN0
IHRoZSB2YWxpZGl0eSBvZiBnUGFydHMtPmNvbWJvQm94U2VwYXJhdG9yV2lkZ2V0IHNpbmNlIHRo
ZXJlCisgICAgICogaXMgbm9uZSB3aGVuICJhcHBlYXJzLWFzLWxpc3QiID0gVFJVRSBvciAiY2Vs
bC12aWV3IiA9IEZBTFNFOyBpZiBpdAorICAgICAqIGlzIGludmFsaWQgd2UganVzdCB3b24ndCBw
YWludCBpdC4gKi8KKworICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBn
aW50CitlbnN1cmVfcHJvZ3Jlc3Nfd2lkZ2V0KCkKK3sKKyAgICBpZiAoIWdQYXJ0cy0+cHJvZ3Jl
c1dpZGdldCkgeworICAgICAgICBnUGFydHMtPnByb2dyZXNXaWRnZXQgPSBndGtfcHJvZ3Jlc3Nf
YmFyX25ldygpOworICAgICAgICBzZXR1cF93aWRnZXRfcHJvdG90eXBlKGdQYXJ0cy0+cHJvZ3Jl
c1dpZGdldCk7CisgICAgfQorICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Cit9CisKK3N0YXRp
YyBnaW50CitlbnN1cmVfc2Nyb2xsZWRfd2luZG93X3dpZGdldCgpCit7CisgICAgaWYgKCFnUGFy
dHMtPnNjcm9sbGVkV2luZG93V2lkZ2V0KSB7CisgICAgICAgIGdQYXJ0cy0+c2Nyb2xsZWRXaW5k
b3dXaWRnZXQgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldyhOVUxMLCBOVUxMKTsKKyAgICAgICAg
c2V0dXBfd2lkZ2V0X3Byb3RvdHlwZShnUGFydHMtPnNjcm9sbGVkV2luZG93V2lkZ2V0KTsKKyAg
ICB9CisgICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKK30KKworc3RhdGljIEd0a1N0YXRlVHlw
ZQorQ29udmVydEd0a1N0YXRlKEd0a1dpZGdldFN0YXRlKiBzdGF0ZSkKK3sKKyAgICBpZiAoc3Rh
dGUtPmRpc2FibGVkKQorICAgICAgICByZXR1cm4gR1RLX1NUQVRFX0lOU0VOU0lUSVZFOworICAg
IGVsc2UgaWYgKHN0YXRlLT5kZXByZXNzZWQpCisgICAgICAgIHJldHVybiAoc3RhdGUtPmluSG92
ZXIgPyBHVEtfU1RBVEVfUFJFTElHSFQgOiBHVEtfU1RBVEVfQUNUSVZFKTsKKyAgICBlbHNlIGlm
IChzdGF0ZS0+aW5Ib3ZlcikKKyAgICAgICAgcmV0dXJuIChzdGF0ZS0+YWN0aXZlID8gR1RLX1NU
QVRFX0FDVElWRSA6IEdUS19TVEFURV9QUkVMSUdIVCk7CisgICAgZWxzZQorICAgICAgICByZXR1
cm4gR1RLX1NUQVRFX05PUk1BTDsKK30KKworc3RhdGljIGdpbnQKK21vel9ndGtfYnV0dG9uX3Bh
aW50KGNhaXJvX3QqIGNyLCBHZGtSZWN0YW5nbGUqIHJlY3QsCisgICAgICAgICAgICAgICAgICAg
ICBHdGtXaWRnZXRTdGF0ZSogc3RhdGUsIEd0a1JlbGllZlN0eWxlIHJlbGllZiwKKyAgICAgICAg
ICAgICAgICAgICAgIEd0a1dpZGdldCogd2lkZ2V0LCBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlv
bikKK3sKKyAgICBHdGtTaGFkb3dUeXBlIHNoYWRvd190eXBlOworICAgIEd0a1N0eWxlKiBzdHls
ZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCk7CisgICAgR3RrU3RhdGVUeXBlIGJ1dHRv
bl9zdGF0ZSA9IENvbnZlcnRHdGtTdGF0ZShzdGF0ZSk7CisgICAgZ2ludCB4ID0gcmVjdC0+eCwg
eT1yZWN0LT55LCB3aWR0aD1yZWN0LT53aWR0aCwgaGVpZ2h0PXJlY3QtPmhlaWdodDsKKyAgICBH
ZGtXaW5kb3cqIHdpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRnZXQpOworCisgICAg
Z2Jvb2xlYW4gaW50ZXJpb3JfZm9jdXM7CisgICAgZ2ludCBmb2N1c193aWR0aCwgZm9jdXNfcGFk
OworCisgICAgbW96X2d0a193aWRnZXRfZ2V0X2ZvY3VzKHdpZGdldCwgJmludGVyaW9yX2ZvY3Vz
LCAmZm9jdXNfd2lkdGgsICZmb2N1c19wYWQpOworCisgICAgaWYgKHdpbmRvdyAmJiBnZGtfd2lu
ZG93X2lzX3Zpc2libGUod2luZG93KSkgeworICAgICAgICBnZGtfd2luZG93X3NldF9iYWNrZ3Jv
dW5kX3BhdHRlcm4od2luZG93LCBOVUxMKTsKKyAgICB9CisKKyAgICBndGtfd2lkZ2V0X3NldF9z
dGF0ZSh3aWRnZXQsIGJ1dHRvbl9zdGF0ZSk7CisgICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9u
KHdpZGdldCwgZGlyZWN0aW9uKTsKKyAgICBndGtfYnV0dG9uX3NldF9yZWxpZWYoR1RLX0JVVFRP
Tih3aWRnZXQpLCByZWxpZWYpOworCisgICAgaWYgKCFpbnRlcmlvcl9mb2N1cyAmJiBzdGF0ZS0+
Zm9jdXNlZCkgeworICAgICAgICB4ICs9IGZvY3VzX3dpZHRoICsgZm9jdXNfcGFkOworICAgICAg
ICB5ICs9IGZvY3VzX3dpZHRoICsgZm9jdXNfcGFkOworICAgICAgICB3aWR0aCAtPSAyICogKGZv
Y3VzX3dpZHRoICsgZm9jdXNfcGFkKTsKKyAgICAgICAgaGVpZ2h0IC09IDIgKiAoZm9jdXNfd2lk
dGggKyBmb2N1c19wYWQpOworICAgIH0KKworICAgIHNoYWRvd190eXBlID0gYnV0dG9uX3N0YXRl
ID09IEdUS19TVEFURV9BQ1RJVkUgfHwKKyAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+ZGVw
cmVzc2VkID8gR1RLX1NIQURPV19JTiA6IEdUS19TSEFET1dfT1VUOworCisgICAgaWYgKHN0YXRl
LT5pc0RlZmF1bHQgJiYgcmVsaWVmID09IEdUS19SRUxJRUZfTk9STUFMKSB7CisgICAgICAgIGd0
a19wYWludF9ib3goc3R5bGUsIGNyLCBidXR0b25fc3RhdGUsIHNoYWRvd190eXBlLAorICAgICAg
ICAgICAgICAgICAgICAgIHdpZGdldCwgImJ1dHRvbmRlZmF1bHQiLCB4LCB5LCB3aWR0aCwgaGVp
Z2h0KTsKKyAgICB9CisKKyAgICBpZiAocmVsaWVmICE9IEdUS19SRUxJRUZfTk9ORSB8fCBzdGF0
ZS0+ZGVwcmVzc2VkIHx8CisgICAgICAgICAgIChidXR0b25fc3RhdGUgIT0gR1RLX1NUQVRFX05P
Uk1BTCAmJgorICAgICAgICAgICAgYnV0dG9uX3N0YXRlICE9IEdUS19TVEFURV9JTlNFTlNJVElW
RSkpIHsKKyAgICAgICAgLyogdGhlIGZvbGxvd2luZyBsaW5lIGNhbiB0cmlnZ2VyIGFuIGFzc2Vy
dGlvbiAoQ3J1eCB0aGVtZSkKKyAgICAgICAgICAgZmlsZSAuLi8uLi9nZGsvZ2Rrd2luZG93LmM6
IGxpbmUgMTg0NiAoZ2RrX3dpbmRvd19jbGVhcl9hcmVhKToKKyAgICAgICAgICAgYXNzZXJ0aW9u
IGBHREtfSVNfV0lORE9XICh3aW5kb3cpJyBmYWlsZWQgKi8KKyAgICAgICAgZ3RrX3BhaW50X2Jv
eChzdHlsZSwgY3IsIGJ1dHRvbl9zdGF0ZSwgc2hhZG93X3R5cGUsCisgICAgICAgICAgICAgICAg
ICAgICAgd2lkZ2V0LCAiYnV0dG9uIiwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgfQorCisg
ICAgaWYgKHN0YXRlLT5mb2N1c2VkKSB7CisgICAgICAgIGlmIChpbnRlcmlvcl9mb2N1cykgewor
ICAgICAgICAgICAgR3RrU3R5bGUqIHN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0
KTsKKyAgICAgICAgICAgIHggKz0gc3R5bGUtPnh0aGlja25lc3MgKyBmb2N1c19wYWQ7CisgICAg
ICAgICAgICB5ICs9IHN0eWxlLT55dGhpY2tuZXNzICsgZm9jdXNfcGFkOworICAgICAgICAgICAg
d2lkdGggLT0gMiAqIChzdHlsZS0+eHRoaWNrbmVzcyArIGZvY3VzX3BhZCk7CisgICAgICAgICAg
ICBoZWlnaHQgLT0gMiAqIChzdHlsZS0+eXRoaWNrbmVzcyArIGZvY3VzX3BhZCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICB4IC09IGZvY3VzX3dpZHRoICsgZm9jdXNfcGFkOworICAg
ICAgICAgICAgeSAtPSBmb2N1c193aWR0aCArIGZvY3VzX3BhZDsKKyAgICAgICAgICAgIHdpZHRo
ICs9IDIgKiAoZm9jdXNfd2lkdGggKyBmb2N1c19wYWQpOworICAgICAgICAgICAgaGVpZ2h0ICs9
IDIgKiAoZm9jdXNfd2lkdGggKyBmb2N1c19wYWQpOworICAgICAgICB9CisKKyAgICAgICAgZ3Rr
X3BhaW50X2ZvY3VzKHN0eWxlLCBjciwgYnV0dG9uX3N0YXRlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgd2lkZ2V0LCAiYnV0dG9uIiwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgfQorCisg
ICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKK30KKworZ2ludAorbW96X2d0a19pbml0KCkKK3sK
KyAgICBHdGtXaWRnZXRDbGFzcyAqZW50cnlfY2xhc3M7CisKKyAgICBpc19pbml0aWFsaXplZCA9
IFRSVUU7CisgICAgaGF2ZV9hcnJvd19zY2FsaW5nID0gKGd0a19tYWpvcl92ZXJzaW9uID4gMiB8
fAorICAgICAgICAgICAgICAgICAgICAgICAgICAoZ3RrX21ham9yX3ZlcnNpb24gPT0gMiAmJiBn
dGtfbWlub3JfdmVyc2lvbiA+PSAxMikpOworCisgICAgLyogQWRkIHN0eWxlIHByb3BlcnR5IHRv
IEd0a0VudHJ5LgorICAgICAqIEFkZGluZyB0aGUgc3R5bGUgcHJvcGVydHkgdG8gdGhlIG5vcm1h
bCBHdGtFbnRyeSBjbGFzcyBtZWFucyB0aGF0IGl0CisgICAgICogd2lsbCB3b3JrIHdpdGhvdXQg
aXNzdWVzIGluc2lkZSBHdGtDb21ib0JveCBhbmQgZm9yIFNwaW5idXR0b25zLiAqLworICAgIGVu
dHJ5X2NsYXNzID0gZ190eXBlX2NsYXNzX3JlZihHVEtfVFlQRV9FTlRSWSk7CisgICAgZ3RrX3dp
ZGdldF9jbGFzc19pbnN0YWxsX3N0eWxlX3Byb3BlcnR5KGVudHJ5X2NsYXNzLAorICAgICAgICBn
X3BhcmFtX3NwZWNfYm9vbGVhbigiaG9ub3JzLXRyYW5zcGFyZW50LWJnLWhpbnQiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiVHJhbnNwYXJlbnQgQkcgZW5hYmxpbmcgZmxhZyIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJZiBUUlVFLCB0aGUgdGhlbWUgaXMgYWJsZSB0
byBkcmF3IHRoZSBHdGtFbnRyeSBvbiBub24tcHJlZmlsbGVkIGJhY2tncm91bmQuIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOwor
fQorCitnaW50Cittb3pfZ3RrX2NoZWNrYm94X2dldF9tZXRyaWNzKGdpbnQqIGluZGljYXRvcl9z
aXplLCBnaW50KiBpbmRpY2F0b3Jfc3BhY2luZykKK3sKKyAgICBlbnN1cmVfY2hlY2tib3hfd2lk
Z2V0KCk7CisKKyAgICBndGtfd2lkZ2V0X3N0eWxlX2dldCAoZ1BhcnRzLT5jaGVja2JveFdpZGdl
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImluZGljYXRvcl9zaXplIiwgaW5kaWNhdG9y
X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJpbmRpY2F0b3Jfc3BhY2luZyIsIGlu
ZGljYXRvcl9zcGFjaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAg
IHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Cit9CisKK2dpbnQKK21vel9ndGtfcmFkaW9fZ2V0X21l
dHJpY3MoZ2ludCogaW5kaWNhdG9yX3NpemUsIGdpbnQqIGluZGljYXRvcl9zcGFjaW5nKQorewor
ICAgIGVuc3VyZV9yYWRpb2J1dHRvbl93aWRnZXQoKTsKKworICAgIGd0a193aWRnZXRfc3R5bGVf
Z2V0IChnUGFydHMtPnJhZGlvYnV0dG9uV2lkZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAiaW5kaWNhdG9yX3NpemUiLCBpbmRpY2F0b3Jfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgImluZGljYXRvcl9zcGFjaW5nIiwgaW5kaWNhdG9yX3NwYWNpbmcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKK30K
KworZ2ludAorbW96X2d0a193aWRnZXRfZ2V0X2ZvY3VzKEd0a1dpZGdldCogd2lkZ2V0LCBnYm9v
bGVhbiogaW50ZXJpb3JfZm9jdXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCogZm9j
dXNfd2lkdGgsIGdpbnQqIGZvY3VzX3BhZCkKK3sKKyAgICBndGtfd2lkZ2V0X3N0eWxlX2dldCAo
d2lkZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJpb3ItZm9jdXMiLCBpbnRl
cmlvcl9mb2N1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLWxpbmUtd2lkdGgi
LCBmb2N1c193aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImZvY3VzLXBhZGRpbmci
LCBmb2N1c19wYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgcmV0
dXJuIE1PWl9HVEtfU1VDQ0VTUzsKK30KKworZ2ludAorbW96X2d0a19idXR0b25fZ2V0X2lubmVy
X2JvcmRlcihHdGtXaWRnZXQqIHdpZGdldCwgR3RrQm9yZGVyKiBpbm5lcl9ib3JkZXIpCit7Cisg
ICAgc3RhdGljIGNvbnN0IEd0a0JvcmRlciBkZWZhdWx0X2lubmVyX2JvcmRlciA9IHsgMSwgMSwg
MSwgMSB9OworICAgIEd0a0JvcmRlciAqdG1wX2JvcmRlcjsKKworICAgIGd0a193aWRnZXRfc3R5
bGVfZ2V0ICh3aWRnZXQsICJpbm5lci1ib3JkZXIiLCAmdG1wX2JvcmRlciwgTlVMTCk7CisKKyAg
ICBpZiAodG1wX2JvcmRlcikgeworICAgICAgICAqaW5uZXJfYm9yZGVyID0gKnRtcF9ib3JkZXI7
CisgICAgICAgIGd0a19ib3JkZXJfZnJlZSh0bXBfYm9yZGVyKTsKKyAgICB9CisgICAgZWxzZQor
ICAgICAgICAqaW5uZXJfYm9yZGVyID0gZGVmYXVsdF9pbm5lcl9ib3JkZXI7CisKKyAgICByZXR1
cm4gTU9aX0dUS19TVUNDRVNTOworfQorCitzdGF0aWMgZ2ludAorbW96X2d0a190b2dnbGVfcGFp
bnQoY2Fpcm9fdCogY3IsIEdka1JlY3RhbmdsZSogcmVjdCwKKyAgICAgICAgICAgICAgICAgICAg
IEd0a1dpZGdldFN0YXRlKiBzdGF0ZSwgZ2Jvb2xlYW4gc2VsZWN0ZWQsCisgICAgICAgICAgICAg
ICAgICAgICBnYm9vbGVhbiBpbmNvbnNpc3RlbnQsIGdib29sZWFuIGlzcmFkaW8sCisgICAgICAg
ICAgICAgICAgICAgICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBHdGtTdGF0
ZVR5cGUgc3RhdGVfdHlwZSA9IENvbnZlcnRHdGtTdGF0ZShzdGF0ZSk7CisgICAgR3RrU2hhZG93
VHlwZSBzaGFkb3dfdHlwZSA9IChzZWxlY3RlZCk/R1RLX1NIQURPV19JTjpHVEtfU0hBRE9XX09V
VDsKKyAgICBnaW50IGluZGljYXRvcl9zaXplLCBpbmRpY2F0b3Jfc3BhY2luZzsKKyAgICBnaW50
IHgsIHksIHdpZHRoLCBoZWlnaHQ7CisgICAgZ2ludCBmb2N1c194LCBmb2N1c195LCBmb2N1c193
aWR0aCwgZm9jdXNfaGVpZ2h0OworICAgIEd0a1dpZGdldCAqdzsKKyAgICBHdGtTdHlsZSAqc3R5
bGU7CisKKyAgICBpZiAoaXNyYWRpbykgeworICAgICAgICBtb3pfZ3RrX3JhZGlvX2dldF9tZXRy
aWNzKCZpbmRpY2F0b3Jfc2l6ZSwgJmluZGljYXRvcl9zcGFjaW5nKTsKKyAgICAgICAgdyA9IGdQ
YXJ0cy0+cmFkaW9idXR0b25XaWRnZXQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbW96X2d0a19j
aGVja2JveF9nZXRfbWV0cmljcygmaW5kaWNhdG9yX3NpemUsICZpbmRpY2F0b3Jfc3BhY2luZyk7
CisgICAgICAgIHcgPSBnUGFydHMtPmNoZWNrYm94V2lkZ2V0OworICAgIH0KKworICAgIC8vICJH
ZXRNaW5pbXVtV2lkZ2V0U2l6ZSB3YXMgaWdub3JlZCIKKyAgICAvLyBGSVhNRTogVGhpcyBhc3Nl
cnQgY2F1c2VzIGEgYnVpbGQgZmFpbHVyZSBpbiBXZWJLaXRHVEsrIGRlYnVnCisgICAgLy8gYnVp
bGRzLCBiZWNhdXNlIGl0IHVzZXMgJ2ZhbHNlJyBpbiBpdHMgZGVmaW5pdGlvbi4gV2UgbWF5IHdh
bnQKKyAgICAvLyB0byBmb3JjZSB0aGlzIGZpbGUgdG8gYmUgYnVpbHQgd2l0aCBnKyssIGJ5IHJl
bmFtaW5nIGl0LgorICAgIC8vIEFTU0VSVChyZWN0LT53aWR0aCA9PSBpbmRpY2F0b3Jfc2l6ZSk7
CisKKyAgICAvKgorICAgICAqIHZlcnRpY2FsbHkgY2VudGVyIGluIHRoZSBib3gsIHNpbmNlIFhV
TCBzb21ldGltZXMgaWdub3JlcyBvdXIKKyAgICAgKiBHZXRNaW5pbXVtV2lkZ2V0U2l6ZSBpbiB0
aGUgdmVydGljYWwgZGltZW5zaW9uCisgICAgICovCisgICAgeCA9IHJlY3QtPng7CisgICAgeSA9
IHJlY3QtPnkgKyAocmVjdC0+aGVpZ2h0IC0gaW5kaWNhdG9yX3NpemUpIC8gMjsKKyAgICB3aWR0
aCA9IGluZGljYXRvcl9zaXplOworICAgIGhlaWdodCA9IGluZGljYXRvcl9zaXplOworCisgICAg
Zm9jdXNfeCA9IHggLSBpbmRpY2F0b3Jfc3BhY2luZzsKKyAgICBmb2N1c195ID0geSAtIGluZGlj
YXRvcl9zcGFjaW5nOworICAgIGZvY3VzX3dpZHRoID0gd2lkdGggKyAyICogaW5kaWNhdG9yX3Nw
YWNpbmc7CisgICAgZm9jdXNfaGVpZ2h0ID0gaGVpZ2h0ICsgMiAqIGluZGljYXRvcl9zcGFjaW5n
OworCisgICAgc3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZSh3KTsKKworICAgIGd0a193aWRn
ZXRfc2V0X3NlbnNpdGl2ZSh3LCAhc3RhdGUtPmRpc2FibGVkKTsKKyAgICBndGtfd2lkZ2V0X3Nl
dF9kaXJlY3Rpb24odywgZGlyZWN0aW9uKTsKKyAgICBndGtfdG9nZ2xlX2J1dHRvbl9zZXRfYWN0
aXZlKEdUS19UT0dHTEVfQlVUVE9OKHcpLCBzZWxlY3RlZCk7CisKKyAgICBpZiAoaXNyYWRpbykg
eworICAgICAgICBndGtfcGFpbnRfb3B0aW9uKHN0eWxlLCBjciwgc3RhdGVfdHlwZSwgc2hhZG93
X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgZ1BhcnRzLT5yYWRpb2J1dHRvbldpZGdl
dCwgInJhZGlvYnV0dG9uIiwgeCwgeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwg
aGVpZ2h0KTsKKyAgICAgICAgaWYgKHN0YXRlLT5mb2N1c2VkKSB7CisgICAgICAgICAgICBndGtf
cGFpbnRfZm9jdXMoc3R5bGUsIGNyLCBHVEtfU1RBVEVfQUNUSVZFLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdQYXJ0cy0+cmFkaW9idXR0b25XaWRnZXQsICJyYWRpb2J1dHRvbiIsIGZv
Y3VzX3gsIGZvY3VzX3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNfd2lkdGgs
IGZvY3VzX2hlaWdodCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgLyoK
KyAgICAgICAgKiAnaW5kZXRlcm1pbmF0ZScgdHlwZSBvbiBjaGVja2JveGVzLiBJbiBHVEssIHRo
ZSBzaGFkb3cgdHlwZQorICAgICAgICAqIG11c3QgYWxzbyBiZSBjaGFuZ2VkIGZvciB0aGUgc3Rh
dGUgdG8gYmUgZHJhd24uCisgICAgICAgICovCisgICAgICAgIGlmIChpbmNvbnNpc3RlbnQpIHsK
KyAgICAgICAgICAgIGd0a190b2dnbGVfYnV0dG9uX3NldF9pbmNvbnNpc3RlbnQoR1RLX1RPR0dM
RV9CVVRUT04oZ1BhcnRzLT5jaGVja2JveFdpZGdldCksIFRSVUUpOworICAgICAgICAgICAgc2hh
ZG93X3R5cGUgPSBHVEtfU0hBRE9XX0VUQ0hFRF9JTjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGd0a190b2dnbGVfYnV0dG9uX3NldF9pbmNvbnNpc3RlbnQoR1RLX1RPR0dMRV9CVVRU
T04oZ1BhcnRzLT5jaGVja2JveFdpZGdldCksIEZBTFNFKTsKKyAgICAgICAgfQorCisgICAgICAg
IGd0a19wYWludF9jaGVjayhzdHlsZSwgY3IsIHN0YXRlX3R5cGUsIHNoYWRvd190eXBlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgZ1BhcnRzLT5jaGVja2JveFdpZGdldCwgImNoZWNrYnV0dG9u
IiwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIGlmIChzdGF0ZS0+Zm9jdXNlZCkgewor
ICAgICAgICAgICAgZ3RrX3BhaW50X2ZvY3VzKHN0eWxlLCBjciwgR1RLX1NUQVRFX0FDVElWRSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnUGFydHMtPmNoZWNrYm94V2lkZ2V0LCAiY2hl
Y2tidXR0b24iLCBmb2N1c194LCBmb2N1c195LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvY3VzX3dpZHRoLCBmb2N1c19oZWlnaHQpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIE1PWl9HVEtfU1VDQ0VTUzsKK30KKworc3RhdGljIGdpbnQKK2NhbGN1bGF0ZV9idXR0b25f
aW5uZXJfcmVjdChHdGtXaWRnZXQqIGJ1dHRvbiwgR2RrUmVjdGFuZ2xlKiByZWN0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdka1JlY3RhbmdsZSogaW5uZXJfcmVjdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiBpZ25vcmVfZm9jdXMpCit7CisgICAgR3RrQm9y
ZGVyIGlubmVyX2JvcmRlcjsKKyAgICBnYm9vbGVhbiBpbnRlcmlvcl9mb2N1czsKKyAgICBnaW50
IGZvY3VzX3dpZHRoLCBmb2N1c19wYWQ7CisgICAgR3RrU3R5bGUqIHN0eWxlOworCisgICAgc3R5
bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZShidXR0b24pOworCisgICAgLyogVGhpcyBtaXJyb3Jz
IGd0a2J1dHRvbidzIGNoaWxkIHBvc2l0aW9uaW5nICovCisgICAgbW96X2d0a19idXR0b25fZ2V0
X2lubmVyX2JvcmRlcihidXR0b24sICZpbm5lcl9ib3JkZXIpOworICAgIG1vel9ndGtfd2lkZ2V0
X2dldF9mb2N1cyhidXR0b24sICZpbnRlcmlvcl9mb2N1cywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJmZvY3VzX3dpZHRoLCAmZm9jdXNfcGFkKTsKKworICAgIGlmIChpZ25vcmVfZm9j
dXMpCisgICAgICAgIGZvY3VzX3dpZHRoID0gZm9jdXNfcGFkID0gMDsKKworICAgIGlubmVyX3Jl
Y3QtPnggPSByZWN0LT54ICsgWFRISUNLTkVTUyhzdHlsZSkgKyBmb2N1c193aWR0aCArIGZvY3Vz
X3BhZDsKKyAgICBpbm5lcl9yZWN0LT54ICs9IGRpcmVjdGlvbiA9PSBHVEtfVEVYVF9ESVJfTFRS
ID8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyX2JvcmRlci5sZWZ0IDogaW5uZXJfYm9y
ZGVyLnJpZ2h0OworICAgIGlubmVyX3JlY3QtPnkgPSByZWN0LT55ICsgaW5uZXJfYm9yZGVyLnRv
cCArIFlUSElDS05FU1Moc3R5bGUpICsKKyAgICAgICAgICAgICAgICAgICAgZm9jdXNfd2lkdGgg
KyBmb2N1c19wYWQ7CisgICAgaW5uZXJfcmVjdC0+d2lkdGggPSBNQVgoMSwgcmVjdC0+d2lkdGgg
LSBpbm5lcl9ib3JkZXIubGVmdCAtCisgICAgICAgaW5uZXJfYm9yZGVyLnJpZ2h0IC0gKFhUSElD
S05FU1Moc3R5bGUpICsgZm9jdXNfcGFkICsgZm9jdXNfd2lkdGgpICogMik7CisgICAgaW5uZXJf
cmVjdC0+aGVpZ2h0ID0gTUFYKDEsIHJlY3QtPmhlaWdodCAtIGlubmVyX2JvcmRlci50b3AgLQor
ICAgICAgIGlubmVyX2JvcmRlci5ib3R0b20gLSAoWVRISUNLTkVTUyhzdHlsZSkgKyBmb2N1c19w
YWQgKyBmb2N1c193aWR0aCkgKiAyKTsKKworICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Cit9
CisKKworc3RhdGljIGdpbnQKK2NhbGN1bGF0ZV9hcnJvd19yZWN0KEd0a1dpZGdldCogYXJyb3cs
IEdka1JlY3RhbmdsZSogcmVjdCwKKyAgICAgICAgICAgICAgICAgICAgIEdka1JlY3RhbmdsZSog
YXJyb3dfcmVjdCwgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgLyogZGVmaW5l
ZCBpbiBndGthcnJvdy5jICovCisgICAgZ2Zsb2F0IGFycm93X3NjYWxpbmcgPSAwLjc7CisgICAg
Z2Zsb2F0IHhhbGlnbiwgeHBhZDsKKyAgICBnaW50IGV4dGVudDsKKyAgICBHdGtNaXNjKiBtaXNj
ID0gR1RLX01JU0MoYXJyb3cpOworICAgIGdmbG9hdCBtaXNjX3hhbGlnbiwgbWlzY195YWxpZ247
CisgICAgZ2ludCBtaXNjX3hwYWQsIG1pc2NfeXBhZDsKKworICAgIGlmIChoYXZlX2Fycm93X3Nj
YWxpbmcpCisgICAgICAgIGd0a193aWRnZXRfc3R5bGVfZ2V0KGFycm93LCAiYXJyb3dfc2NhbGlu
ZyIsICZhcnJvd19zY2FsaW5nLCBOVUxMKTsKKworICAgIGd0a19taXNjX2dldF9wYWRkaW5nKG1p
c2MsICZtaXNjX3hwYWQsICZtaXNjX3lwYWQpOworICAgIGd0a19taXNjX2dldF9hbGlnbm1lbnQo
bWlzYywgJm1pc2NfeGFsaWduLCAmbWlzY195YWxpZ24pOworCisgICAgZXh0ZW50ID0gTUlOKChy
ZWN0LT53aWR0aCAtIG1pc2NfeHBhZCAqIDIpLAorICAgICAgICAgICAgICAgICAocmVjdC0+aGVp
Z2h0IC0gbWlzY195cGFkICogMikpICogYXJyb3dfc2NhbGluZzsKKworICAgIHhhbGlnbiA9IGRp
cmVjdGlvbiA9PSBHVEtfVEVYVF9ESVJfTFRSID8gbWlzY194YWxpZ24gOiAxLjAgLSBtaXNjX3hh
bGlnbjsKKyAgICB4cGFkID0gbWlzY194cGFkICsgKHJlY3QtPndpZHRoIC0gZXh0ZW50KSAqIHhh
bGlnbjsKKworICAgIGFycm93X3JlY3QtPnggPSBkaXJlY3Rpb24gPT0gR1RLX1RFWFRfRElSX0xU
UiA/CisgICAgICAgICAgICAgICAgICAgICAgICBmbG9vcihyZWN0LT54ICsgeHBhZCkgOiBjZWls
KHJlY3QtPnggKyB4cGFkKTsKKyAgICBhcnJvd19yZWN0LT55ID0gZmxvb3IocmVjdC0+eSArIG1p
c2NfeXBhZCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICgocmVjdC0+aGVpZ2h0IC0gZXh0
ZW50KSAqIG1pc2NfeWFsaWduKSk7CisKKyAgICBhcnJvd19yZWN0LT53aWR0aCA9IGFycm93X3Jl
Y3QtPmhlaWdodCA9IGV4dGVudDsKKworICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Cit9CisK
K3N0YXRpYyBnaW50Cittb3pfZ3RrX3Njcm9sbGVkX3dpbmRvd19wYWludChjYWlyb190KiBjciwg
R2RrUmVjdGFuZ2xlKiByZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3RrV2lk
Z2V0U3RhdGUqIHN0YXRlKQoreworICAgIEd0a1N0YXRlVHlwZSBzdGF0ZV90eXBlID0gQ29udmVy
dEd0a1N0YXRlKHN0YXRlKTsKKyAgICBHdGtTaGFkb3dUeXBlIHNoYWRvd190eXBlID0gKHN0YXRl
LT5hY3RpdmUpID8gIEdUS19TSEFET1dfSU4gOiBHVEtfU0hBRE9XX09VVDsKKyAgICBHdGtTdHls
ZSogc3R5bGU7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOworICAgIEd0a1dpZGdldCog
d2lkZ2V0OworCisgICAgZW5zdXJlX3Njcm9sbGVkX3dpbmRvd193aWRnZXQoKTsKKyAgICB3aWRn
ZXQgPSBnUGFydHMtPnNjcm9sbGVkV2luZG93V2lkZ2V0OworCisgICAgZ3RrX3dpZGdldF9nZXRf
YWxsb2NhdGlvbih3aWRnZXQsICZhbGxvY2F0aW9uKTsKKyAgICBhbGxvY2F0aW9uLnggPSByZWN0
LT54OworICAgIGFsbG9jYXRpb24ueSA9IHJlY3QtPnk7CisgICAgYWxsb2NhdGlvbi53aWR0aCA9
IHJlY3QtPndpZHRoOworICAgIGFsbG9jYXRpb24uaGVpZ2h0ID0gcmVjdC0+aGVpZ2h0OworICAg
IGd0a193aWRnZXRfc2V0X2FsbG9jYXRpb24od2lkZ2V0LCAmYWxsb2NhdGlvbik7CisKKyAgICBz
dHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKHdpZGdldCk7CisgICAgZ3RrX3BhaW50X2JveChz
dHlsZSwgY3IsIHN0YXRlX3R5cGUsIHNoYWRvd190eXBlLAorICAgICAgICAgICAgICAgICAgd2lk
Z2V0LCAic2Nyb2xsZWRfd2luZG93IiwgcmVjdC0+eCAtIDEsIHJlY3QtPnkgLSAxLAorICAgICAg
ICAgICAgICAgICAgcmVjdC0+d2lkdGggKyAyLCByZWN0LT5oZWlnaHQgKyAyKTsKKyAgICByZXR1
cm4gTU9aX0dUS19TVUNDRVNTOworfQorCitzdGF0aWMgZ2ludAorbW96X2d0a19zY3JvbGxiYXJf
YnV0dG9uX3BhaW50KGNhaXJvX3QqIGNyLCBHZGtSZWN0YW5nbGUqIHJlY3QsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR3RrV2lkZ2V0U3RhdGUqIHN0YXRlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEd0a1Njcm9sbGJhckJ1dHRvbkZsYWdzIGZsYWdzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9uKQorewor
ICAgIEd0a1N0YXRlVHlwZSBzdGF0ZV90eXBlID0gQ29udmVydEd0a1N0YXRlKHN0YXRlKTsKKyAg
ICBHdGtTaGFkb3dUeXBlIHNoYWRvd190eXBlID0gKHN0YXRlLT5hY3RpdmUpID8KKyAgICAgICAg
R1RLX1NIQURPV19JTiA6IEdUS19TSEFET1dfT1VUOworICAgIEdka1JlY3RhbmdsZSBhcnJvd19y
ZWN0OworICAgIEd0a1N0eWxlKiBzdHlsZTsKKyAgICBHdGtXaWRnZXQgKnNjcm9sbGJhcjsKKyAg
ICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247CisgICAgR3RrQXJyb3dUeXBlIGFycm93X3R5cGU7
CisgICAgZ2ludCBhcnJvd19kaXNwbGFjZW1lbnRfeCwgYXJyb3dfZGlzcGxhY2VtZW50X3k7Cisg
ICAgY29uc3QgY2hhciogZGV0YWlsID0gKGZsYWdzICYgTU9aX0dUS19TVEVQUEVSX1ZFUlRJQ0FM
KSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAidnNjcm9sbGJhciIgOiAiaHNjcm9sbGJh
ciI7CisKKyAgICBlbnN1cmVfc2Nyb2xsYmFyX3dpZGdldCgpOworCisgICAgaWYgKGZsYWdzICYg
TU9aX0dUS19TVEVQUEVSX1ZFUlRJQ0FMKQorICAgICAgICBzY3JvbGxiYXIgPSBnUGFydHMtPnZl
cnRTY3JvbGxiYXJXaWRnZXQ7CisgICAgZWxzZQorICAgICAgICBzY3JvbGxiYXIgPSBnUGFydHMt
Pmhvcml6U2Nyb2xsYmFyV2lkZ2V0OworCisgICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKHNj
cm9sbGJhciwgZGlyZWN0aW9uKTsKKworICAgIC8qIFNvbWUgdGhlbWUgZW5naW5lcyAoaS5lLiwg
Q2xlYXJMb29rcykgY2hlY2sgdGhlIHNjcm9sbGJhcidzIGFsbG9jYXRpb24KKyAgICAgICB0byBk
ZXRlcm1pbmUgd2hlcmUgaXQgc2hvdWxkIHBhaW50IHJvdW5kZWQgY29ybmVycyBvbiB0aGUgYnV0
dG9ucy4KKyAgICAgICBXZSBuZWVkIHRvIHRyaWNrIHRoZW0gaW50byBkcmF3aW5nIHRoZSBidXR0
b25zIHRoZSB3YXkgd2Ugd2FudCB0aGVtLiAqLworCisgICAgZ3RrX3dpZGdldF9nZXRfYWxsb2Nh
dGlvbihzY3JvbGxiYXIsICZhbGxvY2F0aW9uKTsKKyAgICBhbGxvY2F0aW9uLnggPSByZWN0LT54
OworICAgIGFsbG9jYXRpb24ueSA9IHJlY3QtPnk7CisgICAgYWxsb2NhdGlvbi53aWR0aCA9IHJl
Y3QtPndpZHRoOworICAgIGFsbG9jYXRpb24uaGVpZ2h0ID0gcmVjdC0+aGVpZ2h0OworCisgICAg
aWYgKGZsYWdzICYgTU9aX0dUS19TVEVQUEVSX1ZFUlRJQ0FMKSB7CisgICAgICAgIGFsbG9jYXRp
b24uaGVpZ2h0ICo9IDU7CisgICAgICAgIGlmIChmbGFncyAmIE1PWl9HVEtfU1RFUFBFUl9ET1dO
KSB7CisgICAgICAgICAgICBhcnJvd190eXBlID0gR1RLX0FSUk9XX0RPV047CisgICAgICAgICAg
ICBpZiAoZmxhZ3MgJiBNT1pfR1RLX1NURVBQRVJfQk9UVE9NKQorICAgICAgICAgICAgICAgIGFs
bG9jYXRpb24ueSAtPSA0ICogcmVjdC0+aGVpZ2h0OworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIGFsbG9jYXRpb24ueSAtPSByZWN0LT5oZWlnaHQ7CisKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGFycm93X3R5cGUgPSBHVEtfQVJST1dfVVA7CisgICAgICAgICAgICBp
ZiAoZmxhZ3MgJiBNT1pfR1RLX1NURVBQRVJfQk9UVE9NKQorICAgICAgICAgICAgICAgIGFsbG9j
YXRpb24ueSAtPSAzICogcmVjdC0+aGVpZ2h0OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgYWxsb2NhdGlvbi53aWR0aCAqPSA1OworICAgICAgICBpZiAoZmxhZ3MgJiBNT1pfR1RL
X1NURVBQRVJfRE9XTikgeworICAgICAgICAgICAgYXJyb3dfdHlwZSA9IEdUS19BUlJPV19SSUdI
VDsKKyAgICAgICAgICAgIGlmIChmbGFncyAmIE1PWl9HVEtfU1RFUFBFUl9CT1RUT00pCisgICAg
ICAgICAgICAgICAgYWxsb2NhdGlvbi54IC09IDQgKiByZWN0LT53aWR0aDsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBhbGxvY2F0aW9uLnggLT0gcmVjdC0+d2lkdGg7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhcnJvd190eXBlID0gR1RLX0FSUk9XX0xFRlQ7Cisg
ICAgICAgICAgICBpZiAoZmxhZ3MgJiBNT1pfR1RLX1NURVBQRVJfQk9UVE9NKQorICAgICAgICAg
ICAgICAgIGFsbG9jYXRpb24ueCAtPSAzICogcmVjdC0+d2lkdGg7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBndGtfd2lkZ2V0X3NldF9hbGxvY2F0aW9uKHNjcm9sbGJhciwgJmFsbG9jYXRpb24p
OworICAgIHN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoc2Nyb2xsYmFyKTsKKworICAgIGd0
a19wYWludF9ib3goc3R5bGUsIGNyLCBzdGF0ZV90eXBlLCBzaGFkb3dfdHlwZSwKKyAgICAgICAg
ICAgICAgICAgIHNjcm9sbGJhciwgZGV0YWlsLCByZWN0LT54LCByZWN0LT55LAorICAgICAgICAg
ICAgICAgICAgcmVjdC0+d2lkdGgsIHJlY3QtPmhlaWdodCk7CisKKyAgICBhcnJvd19yZWN0Lndp
ZHRoID0gcmVjdC0+d2lkdGggLyAyOworICAgIGFycm93X3JlY3QuaGVpZ2h0ID0gcmVjdC0+aGVp
Z2h0IC8gMjsKKyAgICBhcnJvd19yZWN0LnggPSByZWN0LT54ICsgKHJlY3QtPndpZHRoIC0gYXJy
b3dfcmVjdC53aWR0aCkgLyAyOworICAgIGFycm93X3JlY3QueSA9IHJlY3QtPnkgKyAocmVjdC0+
aGVpZ2h0IC0gYXJyb3dfcmVjdC5oZWlnaHQpIC8gMjsKKworICAgIGlmIChzdGF0ZV90eXBlID09
IEdUS19TVEFURV9BQ1RJVkUpIHsKKyAgICAgICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQoc2Nyb2xs
YmFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJyb3ctZGlzcGxhY2VtZW50LXgi
LCAmYXJyb3dfZGlzcGxhY2VtZW50X3gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJh
cnJvdy1kaXNwbGFjZW1lbnQteSIsICZhcnJvd19kaXNwbGFjZW1lbnRfeSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICAgICAgYXJyb3dfcmVjdC54ICs9IGFycm93
X2Rpc3BsYWNlbWVudF94OworICAgICAgICBhcnJvd19yZWN0LnkgKz0gYXJyb3dfZGlzcGxhY2Vt
ZW50X3k7CisgICAgfQorCisgICAgZ3RrX3BhaW50X2Fycm93KHN0eWxlLCBjciwgc3RhdGVfdHlw
ZSwgc2hhZG93X3R5cGUsCisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGJhciwgZGV0YWlsLCBh
cnJvd190eXBlLCBUUlVFLCBhcnJvd19yZWN0LngsCisgICAgICAgICAgICAgICAgICAgIGFycm93
X3JlY3QueSwgYXJyb3dfcmVjdC53aWR0aCwgYXJyb3dfcmVjdC5oZWlnaHQpOworCisgICAgcmV0
dXJuIE1PWl9HVEtfU1VDQ0VTUzsKK30KKworc3RhdGljIGdpbnQKK21vel9ndGtfc2Nyb2xsYmFy
X3Ryb3VnaF9wYWludChHdGtUaGVtZVdpZGdldFR5cGUgd2lkZ2V0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhaXJvX3QqIGNyLCBHZGtSZWN0YW5nbGUqIHJlY3QsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR3RrV2lkZ2V0U3RhdGUqIHN0YXRlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAg
IEd0a1N0eWxlKiBzdHlsZTsKKyAgICBHdGtTY3JvbGxiYXIgKnNjcm9sbGJhcjsKKworICAgIGVu
c3VyZV9zY3JvbGxiYXJfd2lkZ2V0KCk7CisKKyAgICBpZiAod2lkZ2V0ID09ICBNT1pfR1RLX1ND
Uk9MTEJBUl9UUkFDS19IT1JJWk9OVEFMKQorICAgICAgICBzY3JvbGxiYXIgPSBHVEtfU0NST0xM
QkFSKGdQYXJ0cy0+aG9yaXpTY3JvbGxiYXJXaWRnZXQpOworICAgIGVsc2UKKyAgICAgICAgc2Ny
b2xsYmFyID0gR1RLX1NDUk9MTEJBUihnUGFydHMtPnZlcnRTY3JvbGxiYXJXaWRnZXQpOworCisg
ICAgZ3RrX3dpZGdldF9zZXRfZGlyZWN0aW9uKEdUS19XSURHRVQoc2Nyb2xsYmFyKSwgZGlyZWN0
aW9uKTsKKworICAgIHN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoR1RLX1dJREdFVChzY3Jv
bGxiYXIpKTsKKworICAgIGd0a19wYWludF9ib3goc3R5bGUsIGNyLCBHVEtfU1RBVEVfQUNUSVZF
LCBHVEtfU0hBRE9XX0lOLAorICAgICAgICAgICAgICAgICAgR1RLX1dJREdFVChzY3JvbGxiYXIp
LCAidHJvdWdoIiwgcmVjdC0+eCwgcmVjdC0+eSwKKyAgICAgICAgICAgICAgICAgIHJlY3QtPndp
ZHRoLCByZWN0LT5oZWlnaHQpOworCisgICAgaWYgKHN0YXRlLT5mb2N1c2VkKSB7CisgICAgICAg
IGd0a19wYWludF9mb2N1cyhzdHlsZSwgY3IsIEdUS19TVEFURV9BQ1RJVkUsCisgICAgICAgICAg
ICAgICAgICAgICAgICBHVEtfV0lER0VUKHNjcm9sbGJhciksICJ0cm91Z2giLAorICAgICAgICAg
ICAgICAgICAgICAgICAgcmVjdC0+eCwgcmVjdC0+eSwgcmVjdC0+d2lkdGgsIHJlY3QtPmhlaWdo
dCk7CisgICAgfQorCisgICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKK30KKworc3RhdGljIGdp
bnQKK21vel9ndGtfc2Nyb2xsYmFyX3RodW1iX3BhaW50KEd0a1RoZW1lV2lkZ2V0VHlwZSB3aWRn
ZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWlyb190KiBjciwgR2RrUmVjdGFu
Z2xlKiByZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3RrV2lkZ2V0U3RhdGUq
IHN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3RrVGV4dERpcmVjdGlvbiBk
aXJlY3Rpb24pCit7CisgICAgR3RrU3RhdGVUeXBlIHN0YXRlX3R5cGUgPSAoc3RhdGUtPmluSG92
ZXIgfHwgc3RhdGUtPmFjdGl2ZSkgPworICAgICAgICBHVEtfU1RBVEVfUFJFTElHSFQgOiBHVEtf
U1RBVEVfTk9STUFMOworICAgIEd0a1NoYWRvd1R5cGUgc2hhZG93X3R5cGUgPSBHVEtfU0hBRE9X
X09VVDsKKyAgICBHdGtTdHlsZSogc3R5bGU7CisgICAgR3RrU2Nyb2xsYmFyICpzY3JvbGxiYXI7
CisgICAgR3RrQWRqdXN0bWVudCAqYWRqOworCisgICAgZW5zdXJlX3Njcm9sbGJhcl93aWRnZXQo
KTsKKworICAgIGlmICh3aWRnZXQgPT0gTU9aX0dUS19TQ1JPTExCQVJfVEhVTUJfSE9SSVpPTlRB
TCkKKyAgICAgICAgc2Nyb2xsYmFyID0gR1RLX1NDUk9MTEJBUihnUGFydHMtPmhvcml6U2Nyb2xs
YmFyV2lkZ2V0KTsKKyAgICBlbHNlCisgICAgICAgIHNjcm9sbGJhciA9IEdUS19TQ1JPTExCQVIo
Z1BhcnRzLT52ZXJ0U2Nyb2xsYmFyV2lkZ2V0KTsKKworICAgIGd0a193aWRnZXRfc2V0X2RpcmVj
dGlvbihHVEtfV0lER0VUKHNjcm9sbGJhciksIGRpcmVjdGlvbik7CisKKyAgICAvKiBNYWtlIHN1
cmUgdG8gc2V0IHRoZSBzY3JvbGxiYXIgcmFuZ2UgYmVmb3JlIHBhaW50aW5nIHNvIHRoYXQKKyAg
ICAgICBldmVyeXRoaW5nIGlzIGRyYXduIHByb3Blcmx5LiAgQXQgbGVhc3QgdGhlIGJsdWVjdXJ2
ZSAoYW5kCisgICAgICAgbWF5YmUgb3RoZXIpIHRoZW1lcyBkb24ndCBkcmF3IHRoZSB0b3Agb3Ig
Ym90dG9tIGJsYWNrIGxpbmUKKyAgICAgICBzdXJyb3VuZGluZyB0aGUgc2Nyb2xsYmFyIGlmIHRo
ZSB0aGVtZSB0aGlua3MgdGhhdCBpdCdzIGJ1dHRlZAorICAgICAgIHVwIGFnYWluc3QgdGhlIHNj
cm9sbGJhciBhcnJvd3MuICBOb3RlIHRoZSBpbmNyZWFzZXMgb2YgdGhlCisgICAgICAgY2xpcCBy
ZWN0IGJlbG93LiAqLworICAgIGFkaiA9IGd0a19yYW5nZV9nZXRfYWRqdXN0bWVudChHVEtfUkFO
R0Uoc2Nyb2xsYmFyKSk7CisKKyAgICBpZiAod2lkZ2V0ID09IE1PWl9HVEtfU0NST0xMQkFSX1RI
VU1CX0hPUklaT05UQUwpIHsKKyAgICAgICAgZ3RrX2FkanVzdG1lbnRfc2V0X3BhZ2Vfc2l6ZShh
ZGosIHJlY3QtPndpZHRoKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGd0a19hZGp1c3Rt
ZW50X3NldF9wYWdlX3NpemUoYWRqLCByZWN0LT5oZWlnaHQpOworICAgIH0KKworICAgIGd0a19h
ZGp1c3RtZW50X2NvbmZpZ3VyZShhZGosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRlLT5jdXJwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlLT5tYXhwb3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGd0a19hZGp1c3RtZW50X2dldF9zdGVwX2luY3JlbWVudChhZGopLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBndGtfYWRqdXN0bWVudF9nZXRfcGFnZV9pbmNyZW1lbnQoYWRq
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RrX2FkanVzdG1lbnRfZ2V0X3BhZ2Vf
c2l6ZShhZGopKTsKKworICAgIHN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoR1RLX1dJREdF
VChzY3JvbGxiYXIpKTsKKworICAgIGd0a19wYWludF9zbGlkZXIoc3R5bGUsIGNyLCBzdGF0ZV90
eXBlLCBzaGFkb3dfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgIEdUS19XSURHRVQoc2Nyb2xs
YmFyKSwgInNsaWRlciIsIHJlY3QtPngsIHJlY3QtPnksCisgICAgICAgICAgICAgICAgICAgICBy
ZWN0LT53aWR0aCwgIHJlY3QtPmhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICh3aWRnZXQg
PT0gTU9aX0dUS19TQ1JPTExCQVJfVEhVTUJfSE9SSVpPTlRBTCkgPworICAgICAgICAgICAgICAg
ICAgICAgR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwgOiBHVEtfT1JJRU5UQVRJT05fVkVSVElD
QUwpOworCisgICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKK30KKworc3RhdGljIGdpbnQKK21v
el9ndGtfc2NhbGVfcGFpbnQoY2Fpcm9fdCogY3IsIEdka1JlY3RhbmdsZSogcmVjdCwKKyAgICAg
ICAgICAgICAgICAgICAgR3RrV2lkZ2V0U3RhdGUqIHN0YXRlLCBHdGtPcmllbnRhdGlvbiBmbGFn
cywKKyAgICAgICAgICAgICAgICAgICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCit7Cisg
IGdpbnQgeCA9IDAsIHkgPSAwOworICBHdGtTdGF0ZVR5cGUgc3RhdGVfdHlwZSA9IENvbnZlcnRH
dGtTdGF0ZShzdGF0ZSk7CisgIEd0a1N0eWxlKiBzdHlsZTsKKyAgR3RrV2lkZ2V0KiB3aWRnZXQ7
CisKKyAgZW5zdXJlX3NjYWxlX3dpZGdldCgpOworICB3aWRnZXQgPSAoKGZsYWdzID09IEdUS19P
UklFTlRBVElPTl9IT1JJWk9OVEFMKSA/IGdQYXJ0cy0+aFNjYWxlV2lkZ2V0IDogZ1BhcnRzLT52
U2NhbGVXaWRnZXQpOworICBndGtfd2lkZ2V0X3NldF9kaXJlY3Rpb24od2lkZ2V0LCBkaXJlY3Rp
b24pOworCisgIHN0eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUod2lkZ2V0KTsKKworICBpZiAo
ZmxhZ3MgPT0gR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwpIHsKKyAgICB4ID0gWFRISUNLTkVT
UyhzdHlsZSk7CisgICAgeSsrOworICB9CisgIGVsc2UgeworICAgIHgrKzsKKyAgICB5ID0gWVRI
SUNLTkVTUyhzdHlsZSk7CisgIH0KKworICBndGtfc3R5bGVfYXBwbHlfZGVmYXVsdF9iYWNrZ3Jv
dW5kKHN0eWxlLCBjciwgZ3RrX3dpZGdldF9nZXRfd2luZG93ICh3aWRnZXQpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19TVEFURV9OT1JNQUwsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC0+eCwgcmVjdC0+eSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0KTsKKwor
ICBndGtfcGFpbnRfYm94KHN0eWxlLCBjciwgR1RLX1NUQVRFX0FDVElWRSwgR1RLX1NIQURPV19J
TiwKKyAgICAgICAgICAgICAgICB3aWRnZXQsICJ0cm91Z2giLCByZWN0LT54ICsgeCwgcmVjdC0+
eSArIHksCisgICAgICAgICAgICAgICAgcmVjdC0+d2lkdGggLSAyKngsIHJlY3QtPmhlaWdodCAt
IDIqeSk7CisKKyAgaWYgKHN0YXRlLT5mb2N1c2VkKQorICAgIGd0a19wYWludF9mb2N1cyhzdHls
ZSwgY3IsIHN0YXRlX3R5cGUsIHdpZGdldCwgInRyb3VnaCIsCisgICAgICAgICAgICAgICAgICAg
IHJlY3QtPngsIHJlY3QtPnksIHJlY3QtPndpZHRoLCByZWN0LT5oZWlnaHQpOworCisgIHJldHVy
biBNT1pfR1RLX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBnaW50Cittb3pfZ3RrX3NjYWxlX3RodW1i
X3BhaW50KGNhaXJvX3QqIGNyLCBHZGtSZWN0YW5nbGUqIHJlY3QsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIEd0a1dpZGdldFN0YXRlKiBzdGF0ZSwgR3RrT3JpZW50YXRpb24gZmxhZ3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9uKQorewor
ICBHdGtTdGF0ZVR5cGUgc3RhdGVfdHlwZSA9IENvbnZlcnRHdGtTdGF0ZShzdGF0ZSk7CisgIEd0
a1N0eWxlKiBzdHlsZTsKKyAgR3RrV2lkZ2V0KiB3aWRnZXQ7CisgIGdpbnQgdGh1bWJfd2lkdGgs
IHRodW1iX2hlaWdodCwgeCwgeTsKKworICBlbnN1cmVfc2NhbGVfd2lkZ2V0KCk7CisgIHdpZGdl
dCA9ICgoZmxhZ3MgPT0gR1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUwpID8gZ1BhcnRzLT5oU2Nh
bGVXaWRnZXQgOiBnUGFydHMtPnZTY2FsZVdpZGdldCk7CisgIGd0a193aWRnZXRfc2V0X2RpcmVj
dGlvbih3aWRnZXQsIGRpcmVjdGlvbik7CisKKyAgc3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHls
ZSh3aWRnZXQpOworCisgIC8qIGRldGVybWluZSB0aGUgdGh1bWIgc2l6ZSwgYW5kIHBvc2l0aW9u
IHRoZSB0aHVtYiBpbiB0aGUgY2VudGVyIGluIHRoZSBvcHBvc2l0ZSBheGlzICovCisgIGlmIChm
bGFncyA9PSBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCkgeworICAgIG1vel9ndGtfZ2V0X3Nj
YWxldGh1bWJfbWV0cmljcyhHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCwgJnRodW1iX3dpZHRo
LCAmdGh1bWJfaGVpZ2h0KTsKKyAgICB4ID0gcmVjdC0+eDsKKyAgICB5ID0gcmVjdC0+eSArIChy
ZWN0LT5oZWlnaHQgLSB0aHVtYl9oZWlnaHQpIC8gMjsKKyAgfQorICBlbHNlIHsKKyAgICBtb3pf
Z3RrX2dldF9zY2FsZXRodW1iX21ldHJpY3MoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMLCAmdGh1
bWJfaGVpZ2h0LCAmdGh1bWJfd2lkdGgpOworICAgIHggPSByZWN0LT54ICsgKHJlY3QtPndpZHRo
IC0gdGh1bWJfd2lkdGgpIC8gMjsKKyAgICB5ID0gcmVjdC0+eTsKKyAgfQorCisgIGd0a19wYWlu
dF9zbGlkZXIoc3R5bGUsIGNyLCBzdGF0ZV90eXBlLCBHVEtfU0hBRE9XX09VVCwKKyAgICAgICAg
ICAgICAgICAgICB3aWRnZXQsIChmbGFncyA9PSBHVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTCkg
PyAiaHNjYWxlIiA6ICJ2c2NhbGUiLAorICAgICAgICAgICAgICAgICAgIHgsIHksIHRodW1iX3dp
ZHRoLCB0aHVtYl9oZWlnaHQsIGZsYWdzKTsKKworICByZXR1cm4gTU9aX0dUS19TVUNDRVNTOwor
fQorCitzdGF0aWMgZ2ludAorbW96X2d0a19lbnRyeV9wYWludChjYWlyb190KiBjciwgR2RrUmVj
dGFuZ2xlKiByZWN0LAorICAgICAgICAgICAgICAgICAgICBHdGtXaWRnZXRTdGF0ZSogc3RhdGUs
IEd0a1dpZGdldCogd2lkZ2V0LAorICAgICAgICAgICAgICAgICAgICBHdGtUZXh0RGlyZWN0aW9u
IGRpcmVjdGlvbikKK3sKKyAgICBHdGtTdGF0ZVR5cGUgYmdfc3RhdGUgPSBzdGF0ZS0+ZGlzYWJs
ZWQgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU1RBVEVfSU5TRU5TSVRJ
VkUgOiBHVEtfU1RBVEVfTk9STUFMOworICAgIGdpbnQgeCwgeSwgd2lkdGggPSByZWN0LT53aWR0
aCwgaGVpZ2h0ID0gcmVjdC0+aGVpZ2h0OworICAgIEd0a1N0eWxlKiBzdHlsZTsKKyAgICBnYm9v
bGVhbiBpbnRlcmlvcl9mb2N1czsKKyAgICBnYm9vbGVhbiB0aGVtZV9ob25vcnNfdHJhbnNwYXJl
bmN5ID0gRkFMU0U7CisgICAgZ2ludCBmb2N1c193aWR0aDsKKworICAgIGd0a193aWRnZXRfc2V0
X2RpcmVjdGlvbih3aWRnZXQsIGRpcmVjdGlvbik7CisKKyAgICBzdHlsZSA9IGd0a193aWRnZXRf
Z2V0X3N0eWxlKHdpZGdldCk7CisKKyAgICBndGtfd2lkZ2V0X3N0eWxlX2dldCh3aWRnZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgImludGVyaW9yLWZvY3VzIiwgJmludGVyaW9yX2ZvY3Vz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICJmb2N1cy1saW5lLXdpZHRoIiwgJmZvY3VzX3dp
ZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICJob25vcnMtdHJhbnNwYXJlbnQtYmctaGlu
dCIsICZ0aGVtZV9ob25vcnNfdHJhbnNwYXJlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAg
IE5VTEwpOworCisgICAgLyogZ3RrZW50cnkuYyB1c2VzIHR3byB3aW5kb3dzLCBvbmUgZm9yIHRo
ZSBlbnRpcmUgd2lkZ2V0IGFuZCBvbmUgZm9yIHRoZQorICAgICAqIHRleHQgYXJlYSBpbnNpZGUg
aXQuIFRoZSBiYWNrZ3JvdW5kIG9mIGJvdGggd2luZG93cyBpcyBzZXQgdG8gdGhlICJiYXNlIgor
ICAgICAqIGNvbG9yIG9mIHRoZSBuZXcgc3RhdGUgaW4gZ3RrX2VudHJ5X3N0YXRlX2NoYW5nZWQs
IGJ1dCBvbmx5IHRoZSBpbm5lcgorICAgICAqIHRleHRhcmVhIHdpbmRvdyB1c2VzIGd0a19wYWlu
dF9mbGF0X2JveCB3aGVuIGV4cG9zZWQgKi8KKworICAgIC8qIFRoaXMgZ2V0cyB1cyBhIGxvdmVs
eSBncmV5aXNoIGRpc2FibGVkaXNoIGxvb2sgKi8KKyAgICBndGtfd2lkZ2V0X3NldF9zZW5zaXRp
dmUod2lkZ2V0LCAhc3RhdGUtPmRpc2FibGVkKTsKKworICAgIC8qIEdUSyBmaWxscyB0aGUgb3V0
ZXIgd2lkZ2V0IHdpbmRvdyB3aXRoIHRoZSBiYXNlIGNvbG9yIGJlZm9yZSBkcmF3aW5nIHRoZSB3
aWRnZXQuCisgICAgICogU29tZSBvbGRlciB0aGVtZXMgcmVseSBvbiB0aGlzIGJlaGF2aW9yLCBi
dXQgbWFueSB0aGVtZXMgbm93YWRheXMgdXNlIHJvdW5kZWQKKyAgICAgKiBjb3JuZXJzIG9uIHRo
ZWlyIHdpZGdldHMuIFdoaWxlIG1vc3QgR1RLIGFwcHMgYXJlIGJsaXNzZnVsbHkgdW5hd2FyZSBv
ZiB0aGlzCisgICAgICogcHJvYmxlbSBkdWUgdG8gdGhlaXIgdXNlIG9mIHRoZSBkZWZhdWx0IHdp
bmRvdyBiYWNrZ3JvdW5kLCB3ZSByZW5kZXIgd2lkZ2V0cyBvbgorICAgICAqIG1hbnkga2luZHMg
b2YgYmFja2dyb3VuZHMgb24gdGhlIHdlYi4KKyAgICAgKiBJZiB0aGUgdGhlbWUgaXMgYWJsZSB0
byBjb3BlIHdpdGggdHJhbnNwYXJlbmN5LCB0aGVuIHdlIGNhbiBza2lwIHByZS1maWxsaW5nCisg
ICAgICogYW5kIG5vdGlmeSB0aGUgdGhlbWUgaXQgd2lsbCBwYWludCBkaXJlY3RseSBvbiB0aGUg
Y2FudmFzLiAqLworICAgIGlmICh0aGVtZV9ob25vcnNfdHJhbnNwYXJlbmN5KSB7CisgICAgICAg
IGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHdpZGdldCksICJ0cmFuc3BhcmVudC1iZy1oaW50
IiwgR0lOVF9UT19QT0lOVEVSKFRSVUUpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjYWlyb19z
YXZlKGNyKTsKKyAgICAgICAgZ2RrX2NhaXJvX3NldF9zb3VyY2VfY29sb3IoY3IsIChjb25zdCBH
ZGtDb2xvciopJnN0eWxlLT5iYXNlW2JnX3N0YXRlXSk7CisgICAgICAgIGNhaXJvX3BhdHRlcm5f
c2V0X2V4dGVuZChjYWlyb19nZXRfc291cmNlKGNyKSwgQ0FJUk9fRVhURU5EX1JFUEVBVCk7Cisg
ICAgICAgIGNhaXJvX2ZpbGwoY3IpOworICAgICAgICBjYWlyb19yZXN0b3JlKGNyKTsKKyAgICAg
ICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1Qod2lkZ2V0KSwgInRyYW5zcGFyZW50LWJnLWhp
bnQiLCBHSU5UX1RPX1BPSU5URVIoRkFMU0UpKTsKKyAgICB9CisKKyAgICAvKiBHZXQgdGhlIHBv
c2l0aW9uIG9mIHRoZSBpbm5lciB3aW5kb3csIHNlZSBfZ3RrX2VudHJ5X2dldF9ib3JkZXJzICov
CisgICAgeCA9IFhUSElDS05FU1Moc3R5bGUpOworICAgIHkgPSBZVEhJQ0tORVNTKHN0eWxlKTsK
KworICAgIGlmICghaW50ZXJpb3JfZm9jdXMpIHsKKyAgICAgICAgeCArPSBmb2N1c193aWR0aDsK
KyAgICAgICAgeSArPSBmb2N1c193aWR0aDsKKyAgICB9CisKKyAgICAvKiBTaW11bGF0ZSBhbiBl
eHBvc2Ugb2YgdGhlIGlubmVyIHdpbmRvdyAqLworICAgIGd0a19wYWludF9mbGF0X2JveChzdHls
ZSwgY3IsIGJnX3N0YXRlLCBHVEtfU0hBRE9XX05PTkUsCisgICAgICAgICAgICAgICAgICAgICAg
IHdpZGdldCwgImVudHJ5X2JnIiwgIHJlY3QtPnggKyB4LAorICAgICAgICAgICAgICAgICAgICAg
ICByZWN0LT55ICsgeSwgcmVjdC0+d2lkdGggLSAyKngsIHJlY3QtPmhlaWdodCAtIDIqeSk7CisK
KyAgICAvKiBOb3cgcGFpbnQgdGhlIHNoYWRvdyBhbmQgZm9jdXMgYm9yZGVyLgorICAgICAqIFdl
IGRvIGxpa2UgaW4gZ3RrX2VudHJ5X2RyYXdfZnJhbWUsIHdlIGZpcnN0IGRyYXcgdGhlIHNoYWRv
dywgYSB0YWQKKyAgICAgKiBzbWFsbGVyIHdoZW4gZm9jdXNlZCBpZiB0aGUgZm9jdXMgaXMgbm90
IGludGVyaW9yLCB0aGVuIHRoZSBmb2N1cy4gKi8KKyAgICB4ID0gcmVjdC0+eDsKKyAgICB5ID0g
cmVjdC0+eTsKKworICAgIGlmIChzdGF0ZS0+Zm9jdXNlZCAmJiAhc3RhdGUtPmRpc2FibGVkKSB7
CisgICAgICAgIC8qIFRoaXMgd2lsbCBnZXQgdXMgdGhlIGxpdCBib3JkZXJzIHRoYXQgZm9jdXNl
ZCB0ZXh0Ym94ZXMgZW5qb3kgb24KKyAgICAgICAgICogc29tZSB0aGVtZXMuICovCisgICAgICAg
IGlmICghaW50ZXJpb3JfZm9jdXMpIHsKKyAgICAgICAgICAgIC8qIEluZGVudCB0aGUgYm9yZGVy
IGEgbGl0dGxlIGJpdCBpZiB3ZSBoYXZlIGV4dGVyaW9yIGZvY3VzCisgICAgICAgICAgICAgICAo
dGhpcyBpcyB3aGF0IEdUSyBkb2VzIHRvIGRyYXcgbmF0aXZlIGVudHJpZXMpICovCisgICAgICAg
ICAgICB4ICs9IGZvY3VzX3dpZHRoOworICAgICAgICAgICAgeSArPSBmb2N1c193aWR0aDsKKyAg
ICAgICAgICAgIHdpZHRoIC09IDIgKiBmb2N1c193aWR0aDsKKyAgICAgICAgICAgIGhlaWdodCAt
PSAyICogZm9jdXNfd2lkdGg7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBndGtfcGFpbnRfc2hh
ZG93KHN0eWxlLCBjciwgR1RLX1NUQVRFX05PUk1BTCwgR1RLX1NIQURPV19JTiwKKyAgICAgICAg
ICAgICAgICAgICAgIHdpZGdldCwgImVudHJ5IiwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisKKyAg
ICBpZiAoc3RhdGUtPmZvY3VzZWQgJiYgIXN0YXRlLT5kaXNhYmxlZCkgeworICAgICAgICBpZiAo
IWludGVyaW9yX2ZvY3VzKSB7CisgICAgICAgICAgICBndGtfcGFpbnRfZm9jdXMoc3R5bGUsIGNy
LCAgR1RLX1NUQVRFX05PUk1BTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWRnZXQs
ICJlbnRyeSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC0+eCwgcmVjdC0+eSwg
cmVjdC0+d2lkdGgsIHJlY3QtPmhlaWdodCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gTU9aX0dUS19TVUNDRVNTOworfQorCitzdGF0aWMgZ2ludAorbW96X2d0a19jb21ib19ib3hf
cGFpbnQoY2Fpcm9fdCogY3IsIEdka1JlY3RhbmdsZSogcmVjdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEd0a1dpZGdldFN0YXRlKiBzdGF0ZSwgZ2Jvb2xlYW4gaXNodG1sLAorICAgICAgICAg
ICAgICAgICAgICAgICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgR2RrUmVj
dGFuZ2xlIGFycm93X3JlY3QsIHJlYWxfYXJyb3dfcmVjdDsKKyAgICBnaW50IC8qIGFycm93X3Np
emUsICovIHNlcGFyYXRvcl93aWR0aDsKKyAgICBnYm9vbGVhbiB3aWRlX3NlcGFyYXRvcnM7Cisg
ICAgR3RrU3RhdGVUeXBlIHN0YXRlX3R5cGUgPSBDb252ZXJ0R3RrU3RhdGUoc3RhdGUpOworICAg
IEd0a1NoYWRvd1R5cGUgc2hhZG93X3R5cGUgPSBzdGF0ZS0+YWN0aXZlID8gR1RLX1NIQURPV19J
TiA6IEdUS19TSEFET1dfT1VUOworICAgIEd0a1N0eWxlKiBzdHlsZTsKKyAgICBHdGtSZXF1aXNp
dGlvbiBhcnJvd19yZXE7CisKKyAgICBlbnN1cmVfY29tYm9fYm94X3dpZGdldHMoKTsKKworICAg
IC8qIEFsc28gc2V0cyB0aGUgZGlyZWN0aW9uIG9uIGdQYXJ0cy0+Y29tYm9Cb3hCdXR0b25XaWRn
ZXQsIHdoaWNoIGlzIHRoZW4KKyAgICAgKiBpbmhlcml0ZWQgYnkgdGhlIHNlcGFyYXRvciBhbmQg
YXJyb3cgKi8KKyAgICBtb3pfZ3RrX2J1dHRvbl9wYWludChjciwgcmVjdCwgc3RhdGUsIEdUS19S
RUxJRUZfTk9STUFMLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdQYXJ0cy0+Y29tYm9Cb3hC
dXR0b25XaWRnZXQsIGRpcmVjdGlvbik7CisKKyAgICBjYWxjdWxhdGVfYnV0dG9uX2lubmVyX3Jl
Y3QoZ1BhcnRzLT5jb21ib0JveEJ1dHRvbldpZGdldCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVjdCwgJmFycm93X3JlY3QsIGRpcmVjdGlvbiwgaXNodG1sKTsKKyAgICAvKiBO
b3cgYXJyb3dfcmVjdCBjb250YWlucyB0aGUgaW5uZXIgcmVjdCA7IHdlIHdhbnQgdG8gY29ycmVj
dCB0aGUgd2lkdGgKKyAgICAgKiB0byB3aGF0IHRoZSBhcnJvdyBuZWVkcyAoc2VlIGd0a19jb21i
b19ib3hfc2l6ZV9hbGxvY2F0ZSkgKi8KKyAgICBndGtfd2lkZ2V0X2dldF9wcmVmZXJyZWRfc2l6
ZShnUGFydHMtPmNvbWJvQm94QXJyb3dXaWRnZXQsICZhcnJvd19yZXEsIE5VTEwpOworICAgIGlm
IChkaXJlY3Rpb24gPT0gR1RLX1RFWFRfRElSX0xUUikKKyAgICAgICAgYXJyb3dfcmVjdC54ICs9
IGFycm93X3JlY3Qud2lkdGggLSBhcnJvd19yZXEud2lkdGg7CisgICAgYXJyb3dfcmVjdC53aWR0
aCA9IGFycm93X3JlcS53aWR0aDsKKworICAgIGNhbGN1bGF0ZV9hcnJvd19yZWN0KGdQYXJ0cy0+
Y29tYm9Cb3hBcnJvd1dpZGdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAmYXJyb3dfcmVj
dCwgJnJlYWxfYXJyb3dfcmVjdCwgZGlyZWN0aW9uKTsKKworICAgIHN0eWxlID0gZ3RrX3dpZGdl
dF9nZXRfc3R5bGUoZ1BhcnRzLT5jb21ib0JveEFycm93V2lkZ2V0KTsKKworICAgIGd0a193aWRn
ZXRfc2l6ZV9hbGxvY2F0ZShnUGFydHMtPmNvbWJvQm94V2lkZ2V0LCByZWN0KTsKKworICAgIGd0
a19wYWludF9hcnJvdyhzdHlsZSwgY3IsIHN0YXRlX3R5cGUsIHNoYWRvd190eXBlLAorICAgICAg
ICAgICAgICAgICAgICBnUGFydHMtPmNvbWJvQm94QXJyb3dXaWRnZXQsICJhcnJvdyIsICBHVEtf
QVJST1dfRE9XTiwgVFJVRSwKKyAgICAgICAgICAgICAgICAgICAgcmVhbF9hcnJvd19yZWN0Lngs
IHJlYWxfYXJyb3dfcmVjdC55LAorICAgICAgICAgICAgICAgICAgICByZWFsX2Fycm93X3JlY3Qu
d2lkdGgsIHJlYWxfYXJyb3dfcmVjdC5oZWlnaHQpOworCisKKyAgICAvKiBJZiB0aGVyZSBpcyBu
byBzZXBhcmF0b3IgaW4gdGhlIHRoZW1lLCB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkby4gKi8K
KyAgICBpZiAoIWdQYXJ0cy0+Y29tYm9Cb3hTZXBhcmF0b3JXaWRnZXQpCisgICAgICAgIHJldHVy
biBNT1pfR1RLX1NVQ0NFU1M7CisKKyAgICBzdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKGdQ
YXJ0cy0+Y29tYm9Cb3hTZXBhcmF0b3JXaWRnZXQpOworCisgICAgZ3RrX3dpZGdldF9zdHlsZV9n
ZXQoZ1BhcnRzLT5jb21ib0JveFNlcGFyYXRvcldpZGdldCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAid2lkZS1zZXBhcmF0b3JzIiwgJndpZGVfc2VwYXJhdG9ycywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAic2VwYXJhdG9yLXdpZHRoIiwgJnNlcGFyYXRvcl93aWR0aCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgIGlmICh3aWRlX3NlcGFyYXRvcnMpIHsKKyAg
ICAgICAgaWYgKGRpcmVjdGlvbiA9PSBHVEtfVEVYVF9ESVJfTFRSKQorICAgICAgICAgICAgYXJy
b3dfcmVjdC54IC09IHNlcGFyYXRvcl93aWR0aDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
YXJyb3dfcmVjdC54ICs9IGFycm93X3JlY3Qud2lkdGg7CisKKyAgICAgICAgZ3RrX3BhaW50X2Jv
eChzdHlsZSwgY3IsCisgICAgICAgICAgICAgICAgICAgICAgR1RLX1NUQVRFX05PUk1BTCwgR1RL
X1NIQURPV19FVENIRURfT1VULAorICAgICAgICAgICAgICAgICAgICAgIGdQYXJ0cy0+Y29tYm9C
b3hTZXBhcmF0b3JXaWRnZXQsICJ2c2VwYXJhdG9yIiwKKyAgICAgICAgICAgICAgICAgICAgICBh
cnJvd19yZWN0LngsIGFycm93X3JlY3QueSwKKyAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0
b3Jfd2lkdGgsIGFycm93X3JlY3QuaGVpZ2h0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAo
ZGlyZWN0aW9uID09IEdUS19URVhUX0RJUl9MVFIpCisgICAgICAgICAgICBhcnJvd19yZWN0Lngg
LT0gWFRISUNLTkVTUyhzdHlsZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFycm93X3Jl
Y3QueCArPSBhcnJvd19yZWN0LndpZHRoOworCisgICAgICAgIGd0a19wYWludF92bGluZShzdHls
ZSwgY3IsIEdUS19TVEFURV9OT1JNQUwsCisgICAgICAgICAgICAgICAgICAgICAgICBnUGFydHMt
PmNvbWJvQm94U2VwYXJhdG9yV2lkZ2V0LCAidnNlcGFyYXRvciIsCisgICAgICAgICAgICAgICAg
ICAgICAgICBhcnJvd19yZWN0LnksIGFycm93X3JlY3QueSArIGFycm93X3JlY3QuaGVpZ2h0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgYXJyb3dfcmVjdC54KTsKKyAgICB9CisKKyAgICByZXR1
cm4gTU9aX0dUS19TVUNDRVNTOworfQorCitzdGF0aWMgZ2ludAorbW96X2d0a19wcm9ncmVzc2Jh
cl9wYWludChjYWlyb190KiBjciwgR2RrUmVjdGFuZ2xlKiByZWN0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBHdGtTdHlsZSog
c3R5bGU7CisKKyAgICBlbnN1cmVfcHJvZ3Jlc3Nfd2lkZ2V0KCk7CisgICAgZ3RrX3dpZGdldF9z
ZXRfZGlyZWN0aW9uKGdQYXJ0cy0+cHJvZ3Jlc1dpZGdldCwgZGlyZWN0aW9uKTsKKworICAgIHN0
eWxlID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUoZ1BhcnRzLT5wcm9ncmVzV2lkZ2V0KTsKKworICAg
IGd0a19wYWludF9ib3goc3R5bGUsIGNyLCBHVEtfU1RBVEVfTk9STUFMLCBHVEtfU0hBRE9XX0lO
LAorICAgICAgICAgICAgICAgICAgZ1BhcnRzLT5wcm9ncmVzV2lkZ2V0LCAidHJvdWdoIiwgcmVj
dC0+eCwgcmVjdC0+eSwKKyAgICAgICAgICAgICAgICAgIHJlY3QtPndpZHRoLCByZWN0LT5oZWln
aHQpOworCisgICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKK30KKworc3RhdGljIGdpbnQKK21v
el9ndGtfcHJvZ3Jlc3NfY2h1bmtfcGFpbnQoY2Fpcm9fdCogY3IsIEdka1JlY3RhbmdsZSogcmVj
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24pCit7CisgICAgR3RrU3R5bGUqIHN0eWxlOworCisgICAgZW5zdXJlX3Byb2dyZXNzX3dpZGdl
dCgpOworICAgIGd0a193aWRnZXRfc2V0X2RpcmVjdGlvbihnUGFydHMtPnByb2dyZXNXaWRnZXQs
IGRpcmVjdGlvbik7CisKKyAgICBzdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKGdQYXJ0cy0+
cHJvZ3Jlc1dpZGdldCk7CisKKyAgICBndGtfcGFpbnRfYm94KHN0eWxlLCBjciwgR1RLX1NUQVRF
X1BSRUxJR0hULCBHVEtfU0hBRE9XX09VVCwKKyAgICAgICAgICAgICAgICAgIGdQYXJ0cy0+cHJv
Z3Jlc1dpZGdldCwgImJhciIsIHJlY3QtPngsIHJlY3QtPnksCisgICAgICAgICAgICAgICAgICBy
ZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0KTsKKworICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7
Cit9CisKK2dpbnQKK21vel9ndGtfZ2V0X3dpZGdldF9ib3JkZXIoR3RrVGhlbWVXaWRnZXRUeXBl
IHdpZGdldCwgZ2ludCogbGVmdCwgZ2ludCogdG9wLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBnaW50KiByaWdodCwgZ2ludCogYm90dG9tLCBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gaW5odG1sKQoreworICAgIEd0a1dp
ZGdldCogdzsKKyAgICBHdGtTdHlsZSAqc3R5bGU7CisKKyAgICBzd2l0Y2ggKHdpZGdldCkgewor
ICAgIGNhc2UgTU9aX0dUS19CVVRUT046CisgICAgICAgIHsKKyAgICAgICAgICAgIEd0a0JvcmRl
ciBpbm5lcl9ib3JkZXI7CisgICAgICAgICAgICBnYm9vbGVhbiBpbnRlcmlvcl9mb2N1czsKKyAg
ICAgICAgICAgIGdpbnQgZm9jdXNfd2lkdGgsIGZvY3VzX3BhZDsKKyAgICAgICAgICAgIEd0a1N0
eWxlICpzdHlsZTsKKworICAgICAgICAgICAgZW5zdXJlX2J1dHRvbl93aWRnZXQoKTsKKyAgICAg
ICAgICAgICpsZWZ0ID0gKnRvcCA9ICpyaWdodCA9ICpib3R0b20gPSBndGtfY29udGFpbmVyX2dl
dF9ib3JkZXJfd2lkdGgoR1RLX0NPTlRBSU5FUihnUGFydHMtPmJ1dHRvbldpZGdldCkpOworCisg
ICAgICAgICAgICAvKiBEb24ndCBhZGQgdGhpcyBwYWRkaW5nIGluIEhUTUwsIG90aGVyd2lzZSB0
aGUgYnV0dG9ucyB3aWxsCisgICAgICAgICAgICAgICBiZWNvbWUgdG9vIGJpZyBhbmQgc3R1ZmYg
dGhlIGxheW91dC4gKi8KKyAgICAgICAgICAgIGlmICghaW5odG1sKSB7CisgICAgICAgICAgICAg
ICAgbW96X2d0a193aWRnZXRfZ2V0X2ZvY3VzKGdQYXJ0cy0+YnV0dG9uV2lkZ2V0LCAmaW50ZXJp
b3JfZm9jdXMsICZmb2N1c193aWR0aCwgJmZvY3VzX3BhZCk7CisgICAgICAgICAgICAgICAgbW96
X2d0a19idXR0b25fZ2V0X2lubmVyX2JvcmRlcihnUGFydHMtPmJ1dHRvbldpZGdldCwgJmlubmVy
X2JvcmRlcik7CisgICAgICAgICAgICAgICAgKmxlZnQgKz0gZm9jdXNfd2lkdGggKyBmb2N1c19w
YWQgKyBpbm5lcl9ib3JkZXIubGVmdDsKKyAgICAgICAgICAgICAgICAqcmlnaHQgKz0gZm9jdXNf
d2lkdGggKyBmb2N1c19wYWQgKyBpbm5lcl9ib3JkZXIucmlnaHQ7CisgICAgICAgICAgICAgICAg
KnRvcCArPSBmb2N1c193aWR0aCArIGZvY3VzX3BhZCArIGlubmVyX2JvcmRlci50b3A7CisgICAg
ICAgICAgICAgICAgKmJvdHRvbSArPSBmb2N1c193aWR0aCArIGZvY3VzX3BhZCArIGlubmVyX2Jv
cmRlci5ib3R0b207CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN0eWxlID0gZ3RrX3dp
ZGdldF9nZXRfc3R5bGUoZ1BhcnRzLT5idXR0b25XaWRnZXQpOworICAgICAgICAgICAgKmxlZnQg
Kz0gc3R5bGUtPnh0aGlja25lc3M7CisgICAgICAgICAgICAqcmlnaHQgKz0gc3R5bGUtPnh0aGlj
a25lc3M7CisgICAgICAgICAgICAqdG9wICs9IHN0eWxlLT55dGhpY2tuZXNzOworICAgICAgICAg
ICAgKmJvdHRvbSArPSBzdHlsZS0+eXRoaWNrbmVzczsKKyAgICAgICAgICAgIHJldHVybiBNT1pf
R1RLX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICBjYXNlIE1PWl9HVEtfRU5UUlk6CisgICAgICAg
IGVuc3VyZV9lbnRyeV93aWRnZXQoKTsKKyAgICAgICAgdyA9IGdQYXJ0cy0+ZW50cnlXaWRnZXQ7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTU9aX0dUS19EUk9QRE9XTjoKKyAgICAgICAgewor
ICAgICAgICAgICAgLyogV2UgbmVlZCB0byBhY2NvdW50IGZvciB0aGUgYXJyb3cgb24gdGhlIGRy
b3Bkb3duLCBzbyB0ZXh0CisgICAgICAgICAgICAgKiBkb2Vzbid0IGNvbWUgdG9vIGNsb3NlIHRv
IHRoZSBhcnJvdywgb3IgaW4gc29tZSBjYXNlcyBzcGlsbAorICAgICAgICAgICAgICogaW50byB0
aGUgYXJyb3cuICovCisgICAgICAgICAgICBnYm9vbGVhbiBpZ25vcmVkX2ludGVyaW9yX2ZvY3Vz
LCB3aWRlX3NlcGFyYXRvcnM7CisgICAgICAgICAgICBnaW50IGZvY3VzX3dpZHRoLCBmb2N1c19w
YWQsIHNlcGFyYXRvcl93aWR0aDsKKyAgICAgICAgICAgIEd0a1JlcXVpc2l0aW9uIGFycm93X3Jl
cTsKKyAgICAgICAgICAgIEd0a1N0eWxlKiBzdHlsZTsKKworICAgICAgICAgICAgZW5zdXJlX2Nv
bWJvX2JveF93aWRnZXRzKCk7CisKKyAgICAgICAgICAgICpsZWZ0ID0gZ3RrX2NvbnRhaW5lcl9n
ZXRfYm9yZGVyX3dpZHRoKEdUS19DT05UQUlORVIoZ1BhcnRzLT5jb21ib0JveEJ1dHRvbldpZGdl
dCkpOworCisgICAgICAgICAgICBpZiAoIWluaHRtbCkgeworICAgICAgICAgICAgICAgIG1vel9n
dGtfd2lkZ2V0X2dldF9mb2N1cyhnUGFydHMtPmNvbWJvQm94QnV0dG9uV2lkZ2V0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaWdub3JlZF9pbnRlcmlvcl9mb2N1
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvY3VzX3dpZHRo
LCAmZm9jdXNfcGFkKTsKKyAgICAgICAgICAgICAgICAqbGVmdCArPSBmb2N1c193aWR0aCArIGZv
Y3VzX3BhZDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3R5bGUgPSBndGtfd2lkZ2V0
X2dldF9zdHlsZShnUGFydHMtPmNvbWJvQm94QnV0dG9uV2lkZ2V0KTsKKyAgICAgICAgICAgICp0
b3AgPSAqbGVmdCArIHN0eWxlLT55dGhpY2tuZXNzOworICAgICAgICAgICAgKmxlZnQgKz0gc3R5
bGUtPnh0aGlja25lc3M7CisKKyAgICAgICAgICAgICpyaWdodCA9ICpsZWZ0OyAqYm90dG9tID0g
KnRvcDsKKworICAgICAgICAgICAgLyogSWYgdGhlcmUgaXMgbm8gc2VwYXJhdG9yLCBkb24ndCB0
cnkgdG8gY291bnQgaXRzIHdpZHRoLiAqLworICAgICAgICAgICAgc2VwYXJhdG9yX3dpZHRoID0g
MDsKKyAgICAgICAgICAgIGlmIChnUGFydHMtPmNvbWJvQm94U2VwYXJhdG9yV2lkZ2V0KSB7Cisg
ICAgICAgICAgICAgICAgZ3RrX3dpZGdldF9zdHlsZV9nZXQoZ1BhcnRzLT5jb21ib0JveFNlcGFy
YXRvcldpZGdldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2lkZS1z
ZXBhcmF0b3JzIiwgJndpZGVfc2VwYXJhdG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAic2VwYXJhdG9yLXdpZHRoIiwgJnNlcGFyYXRvcl93aWR0aCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgICAgICAgICAgICAgIGlm
ICghd2lkZV9zZXBhcmF0b3JzKQorICAgICAgICAgICAgICAgICAgICBzZXBhcmF0b3Jfd2lkdGgg
PQorICAgICAgICAgICAgICAgICAgICAgICAgWFRISUNLTkVTUyhzdHlsZSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGd0a193aWRnZXRfZ2V0X3ByZWZlcnJlZF9zaXplKGdQYXJ0cy0+
Y29tYm9Cb3hBcnJvd1dpZGdldCwgJmFycm93X3JlcSwgTlVMTCk7CisgICAgICAgICAgICBpZiAo
ZGlyZWN0aW9uID09IEdUS19URVhUX0RJUl9SVEwpCisgICAgICAgICAgICAgICAgKmxlZnQgKz0g
c2VwYXJhdG9yX3dpZHRoICsgYXJyb3dfcmVxLndpZHRoOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICpyaWdodCArPSBzZXBhcmF0b3Jfd2lkdGggKyBhcnJvd19yZXEud2lkdGg7
CisKKyAgICAgICAgICAgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICBj
YXNlIE1PWl9HVEtfUFJPR1JFU1NCQVI6CisgICAgICAgIGVuc3VyZV9wcm9ncmVzc193aWRnZXQo
KTsKKyAgICAgICAgdyA9IGdQYXJ0cy0+cHJvZ3Jlc1dpZGdldDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBNT1pfR1RLX1NDQUxFX0hPUklaT05UQUw6CisgICAgICAgIGVuc3VyZV9zY2FsZV93
aWRnZXQoKTsKKyAgICAgICAgdyA9IGdQYXJ0cy0+aFNjYWxlV2lkZ2V0OworICAgICAgICBicmVh
azsKKyAgICBjYXNlIE1PWl9HVEtfU0NBTEVfVkVSVElDQUw6CisgICAgICAgIGVuc3VyZV9zY2Fs
ZV93aWRnZXQoKTsKKyAgICAgICAgdyA9IGdQYXJ0cy0+dlNjYWxlV2lkZ2V0OworICAgICAgICBi
cmVhazsKKyAgICAvKiBUaGVzZSB3aWRnZXRzIGhhdmUgbm8gYm9yZGVycywgc2luY2UgdGhleSBh
cmUgbm90IGNvbnRhaW5lcnMuICovCisgICAgY2FzZSBNT1pfR1RLX0NIRUNLQlVUVE9OOgorICAg
IGNhc2UgTU9aX0dUS19SQURJT0JVVFRPTjoKKyAgICBjYXNlIE1PWl9HVEtfU0NST0xMQkFSX0JV
VFRPTjoKKyAgICBjYXNlIE1PWl9HVEtfU0NST0xMQkFSX1RSQUNLX0hPUklaT05UQUw6CisgICAg
Y2FzZSBNT1pfR1RLX1NDUk9MTEJBUl9UUkFDS19WRVJUSUNBTDoKKyAgICBjYXNlIE1PWl9HVEtf
U0NST0xMQkFSX1RIVU1CX0hPUklaT05UQUw6CisgICAgY2FzZSBNT1pfR1RLX1NDUk9MTEJBUl9U
SFVNQl9WRVJUSUNBTDoKKyAgICBjYXNlIE1PWl9HVEtfU0NBTEVfVEhVTUJfSE9SSVpPTlRBTDoK
KyAgICBjYXNlIE1PWl9HVEtfU0NBTEVfVEhVTUJfVkVSVElDQUw6CisgICAgY2FzZSBNT1pfR1RL
X1BST0dSRVNTX0NIVU5LOgorICAgICAgICAqbGVmdCA9ICp0b3AgPSAqcmlnaHQgPSAqYm90dG9t
ID0gMDsKKyAgICAgICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBnX3dhcm5pbmcoIlVuc3VwcG9ydGVkIHdpZGdldCB0eXBlOiAlZCIsIHdpZGdldCk7Cisg
ICAgICAgIHJldHVybiBNT1pfR1RLX1VOS05PV05fV0lER0VUOworICAgIH0KKworICAgIHN0eWxl
ID0gZ3RrX3dpZGdldF9nZXRfc3R5bGUodyk7CisgICAgKnJpZ2h0ID0gKmxlZnQgPSBYVEhJQ0tO
RVNTKHN0eWxlKTsKKyAgICAqYm90dG9tID0gKnRvcCA9IFlUSElDS05FU1Moc3R5bGUpOworCisg
ICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKK30KKworZ2ludAorbW96X2d0a19nZXRfc2NhbGV0
aHVtYl9tZXRyaWNzKEd0a09yaWVudGF0aW9uIG9yaWVudCwgZ2ludCogdGh1bWJfbGVuZ3RoLCBn
aW50KiB0aHVtYl9oZWlnaHQpCit7CisgIEd0a1dpZGdldCogd2lkZ2V0OworCisgIGVuc3VyZV9z
Y2FsZV93aWRnZXQoKTsKKyAgd2lkZ2V0ID0gKChvcmllbnQgPT0gR1RLX09SSUVOVEFUSU9OX0hP
UklaT05UQUwpID8gZ1BhcnRzLT5oU2NhbGVXaWRnZXQgOiBnUGFydHMtPnZTY2FsZVdpZGdldCk7
CisKKyAgZ3RrX3dpZGdldF9zdHlsZV9nZXQgKHdpZGdldCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICJzbGlkZXJfbGVuZ3RoIiwgdGh1bWJfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgInNsaWRlcl93aWR0aCIsIHRodW1iX2hlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAg
IE5VTEwpOworCisgIHJldHVybiBNT1pfR1RLX1NVQ0NFU1M7Cit9CisKK2dpbnQKK21vel9ndGtf
Z2V0X3Njcm9sbGJhcl9tZXRyaWNzKE1vekd0a1Njcm9sbGJhck1ldHJpY3MgKm1ldHJpY3MpCit7
CisgICAgZW5zdXJlX3Njcm9sbGJhcl93aWRnZXQoKTsKKworICAgIGd0a193aWRnZXRfc3R5bGVf
Z2V0IChnUGFydHMtPmhvcml6U2Nyb2xsYmFyV2lkZ2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAic2xpZGVyX3dpZHRoIiwgJm1ldHJpY3MtPnNsaWRlcl93aWR0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgInRyb3VnaF9ib3JkZXIiLCAmbWV0cmljcy0+dHJvdWdoX2JvcmRlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgInN0ZXBwZXJfc2l6ZSIsICZtZXRyaWNzLT5zdGVw
cGVyX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJzdGVwcGVyX3NwYWNpbmciLCAm
bWV0cmljcy0+c3RlcHBlcl9zcGFjaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAidHJv
dWdoX3VuZGVyX3N0ZXBwZXJzIiwgJm1ldHJpY3MtPnRyb3VnaF91bmRlcl9zdGVwcGVycywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgImhhc19zZWNvbmRhcnlfZm9yd2FyZF9zdGVwcGVyIiwg
Jm1ldHJpY3MtPmhhc19zZWNvbmRhcnlfZm9yd2FyZF9zdGVwcGVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAiaGFzX3NlY29uZGFyeV9iYWNrd2FyZF9zdGVwcGVyIiwgJm1ldHJpY3MtPmhh
c19zZWNvbmRhcnlfYmFja3dhcmRfc3RlcHBlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
TlVMTCk7CisKKyAgICBtZXRyaWNzLT5taW5fc2xpZGVyX3NpemUgPSBndGtfcmFuZ2VfZ2V0X21p
bl9zbGlkZXJfc2l6ZShHVEtfUkFOR0UoZ1BhcnRzLT5ob3JpelNjcm9sbGJhcldpZGdldCkpOwor
CisgICAgcmV0dXJuIE1PWl9HVEtfU1VDQ0VTUzsKK30KKworZ2ludAorbW96X2d0a193aWRnZXRf
cGFpbnQoR3RrVGhlbWVXaWRnZXRUeXBlIHdpZGdldCwgY2Fpcm9fdCogY3IsCisgICAgICAgICAg
ICAgICAgICAgICBHZGtSZWN0YW5nbGUqIHJlY3QsIEd0a1dpZGdldFN0YXRlKiBzdGF0ZSwKKyAg
ICAgICAgICAgICAgICAgICAgIGdpbnQgZmxhZ3MsIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9u
KQoreworICAgIHN3aXRjaCAod2lkZ2V0KSB7CisgICAgY2FzZSBNT1pfR1RLX0JVVFRPTjoKKyAg
ICAgICAgaWYgKHN0YXRlLT5kZXByZXNzZWQpIHsKKyAgICAgICAgICAgIGVuc3VyZV90b2dnbGVf
YnV0dG9uX3dpZGdldCgpOworICAgICAgICAgICAgcmV0dXJuIG1vel9ndGtfYnV0dG9uX3BhaW50
KGNyLCByZWN0LCBzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoR3RrUmVsaWVmU3R5bGUpIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdQYXJ0cy0+dG9nZ2xlQnV0dG9uV2lkZ2V0LCBkaXJlY3Rpb24pOworICAgICAg
ICB9CisgICAgICAgIGVuc3VyZV9idXR0b25fd2lkZ2V0KCk7CisgICAgICAgIHJldHVybiBtb3pf
Z3RrX2J1dHRvbl9wYWludChjciwgcmVjdCwgc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoR3RrUmVsaWVmU3R5bGUpIGZsYWdzLCBnUGFydHMtPmJ1dHRvbldpZGdl
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgTU9aX0dUS19DSEVDS0JVVFRPTjoKKyAgICBjYXNlIE1PWl9H
VEtfUkFESU9CVVRUT046CisgICAgICAgIHJldHVybiBtb3pfZ3RrX3RvZ2dsZV9wYWludChjciwg
cmVjdCwgc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIShmbGFn
cyAmIE1PWl9HVEtfV0lER0VUX0NIRUNLRUQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgISEoZmxhZ3MgJiBNT1pfR1RLX1dJREdFVF9JTkNPTlNJU1RFTlQpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHdpZGdldCA9PSBNT1pfR1RLX1JBRElPQlVU
VE9OKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgTU9aX0dUS19TQ1JPTExCQVJfQlVUVE9OOgorICAgICAg
ICByZXR1cm4gbW96X2d0a19zY3JvbGxiYXJfYnV0dG9uX3BhaW50KGNyLCByZWN0LCBzdGF0ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR3RrU2Nyb2xs
YmFyQnV0dG9uRmxhZ3MpIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRpcmVjdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTU9aX0dU
S19TQ1JPTExCQVJfVFJBQ0tfSE9SSVpPTlRBTDoKKyAgICBjYXNlIE1PWl9HVEtfU0NST0xMQkFS
X1RSQUNLX1ZFUlRJQ0FMOgorICAgICAgICByZXR1cm4gbW96X2d0a19zY3JvbGxiYXJfdHJvdWdo
X3BhaW50KHdpZGdldCwgY3IsIHJlY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGUsIGRpcmVjdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgTU9aX0dUS19TQ1JPTExCQVJfVEhVTUJfSE9SSVpPTlRBTDoKKyAgICBjYXNlIE1PWl9HVEtf
U0NST0xMQkFSX1RIVU1CX1ZFUlRJQ0FMOgorICAgICAgICByZXR1cm4gbW96X2d0a19zY3JvbGxi
YXJfdGh1bWJfcGFpbnQod2lkZ2V0LCBjciwgcmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLCBkaXJlY3Rpb24pOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIE1PWl9HVEtfU0NST0xMRURfV0lORE9XOgorICAgICAgICByZXR1cm4gbW96X2d0
a19zY3JvbGxlZF93aW5kb3dfcGFpbnQoY3IsIHJlY3QsIHN0YXRlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBNT1pfR1RLX1NDQUxFX0hPUklaT05UQUw6CisgICAgY2FzZSBNT1pfR1RLX1ND
QUxFX1ZFUlRJQ0FMOgorICAgICAgICByZXR1cm4gbW96X2d0a19zY2FsZV9wYWludChjciwgcmVj
dCwgc3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHdGtPcmllbnRh
dGlvbikgZmxhZ3MsIGRpcmVjdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTU9aX0dU
S19TQ0FMRV9USFVNQl9IT1JJWk9OVEFMOgorICAgIGNhc2UgTU9aX0dUS19TQ0FMRV9USFVNQl9W
RVJUSUNBTDoKKyAgICAgICAgcmV0dXJuIG1vel9ndGtfc2NhbGVfdGh1bWJfcGFpbnQoY3IsIHJl
Y3QsIHN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR3Rr
T3JpZW50YXRpb24pIGZsYWdzLCBkaXJlY3Rpb24pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IE1PWl9HVEtfRU5UUlk6CisgICAgICAgIGVuc3VyZV9lbnRyeV93aWRnZXQoKTsKKyAgICAgICAg
cmV0dXJuIG1vel9ndGtfZW50cnlfcGFpbnQoY3IsIHJlY3QsIHN0YXRlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnUGFydHMtPmVudHJ5V2lkZ2V0LCBkaXJlY3Rpb24pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIE1PWl9HVEtfRFJPUERPV046CisgICAgICAgIHJldHVy
biBtb3pfZ3RrX2NvbWJvX2JveF9wYWludChjciwgcmVjdCwgc3RhdGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2Jvb2xlYW4pIGZsYWdzLCBkaXJlY3Rpb24pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIE1PWl9HVEtfUFJPR1JFU1NCQVI6CisgICAgICAgIHJl
dHVybiBtb3pfZ3RrX3Byb2dyZXNzYmFyX3BhaW50KGNyLCByZWN0LCBkaXJlY3Rpb24pOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIE1PWl9HVEtfUFJPR1JFU1NfQ0hVTks6CisgICAgICAgIHJl
dHVybiBtb3pfZ3RrX3Byb2dyZXNzX2NodW5rX3BhaW50KGNyLCByZWN0LCBkaXJlY3Rpb24pOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBnX3dhcm5pbmcoIlVua25vd24g
d2lkZ2V0IHR5cGU6ICVkIiwgd2lkZ2V0KTsKKyAgICB9CisKKyAgICByZXR1cm4gTU9aX0dUS19V
TktOT1dOX1dJREdFVDsKK30KKworR3RrV2lkZ2V0KiBtb3pfZ3RrX2dldF9zY3JvbGxiYXJfd2lk
Z2V0KHZvaWQpCit7CisgICAgaWYgKCFpc19pbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuIE5V
TEw7CisgICAgZW5zdXJlX3Njcm9sbGJhcl93aWRnZXQoKTsKKyAgICByZXR1cm4gZ1BhcnRzLT5o
b3JpelNjcm9sbGJhcldpZGdldDsKK30KKworZ2ludAorbW96X2d0a19zaHV0ZG93bigpCit7Cisg
ICAgR3RrV2lkZ2V0Q2xhc3MgKmVudHJ5X2NsYXNzOworICAgIGVudHJ5X2NsYXNzID0gZ190eXBl
X2NsYXNzX3BlZWsoR1RLX1RZUEVfRU5UUlkpOworICAgIGdfdHlwZV9jbGFzc191bnJlZihlbnRy
eV9jbGFzcyk7CisKKyAgICBpc19pbml0aWFsaXplZCA9IEZBTFNFOworCisgICAgcmV0dXJuIE1P
Wl9HVEtfU1VDQ0VTUzsKK30KKwordm9pZCBtb3pfZ3RrX2Rlc3Ryb3lfdGhlbWVfcGFydHNfd2lk
Z2V0cyhHdGtUaGVtZVBhcnRzKiBwYXJ0cykKK3sKKyAgICBpZiAoIXBhcnRzKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAocGFydHMtPnByb3RvV2luZG93KSB7CisgICAgICAgIGd0a193aWRn
ZXRfZGVzdHJveShwYXJ0cy0+cHJvdG9XaW5kb3cpOworICAgICAgICBwYXJ0cy0+cHJvdG9XaW5k
b3cgPSBOVUxMOworICAgIH0KK30KKworR3RrV2lkZ2V0KiBtb3pfZ3RrX2dldF9wcm9ncmVzc193
aWRnZXQoKQoreworICAgIGlmICghaXNfaW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybiBOVUxM
OworICAgIGVuc3VyZV9wcm9ncmVzc193aWRnZXQoKTsKKyAgICByZXR1cm4gZ1BhcnRzLT5wcm9n
cmVzV2lkZ2V0OworfQorCisjZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL2d0a2RyYXdpbmcuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L2d0a2RyYXdpbmcuaAppbmRleCBmZDNlOGYzLi5hOTgxNTQzIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9ndGtkcmF3aW5nLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvZ3Rr
ZHJhd2luZy5oCkBAIC04MSw3ICs4MSw5IEBAIHR5cGVkZWYgc3RydWN0IHsKIH0gTW96R3RrU2Ny
b2xsYmFyTWV0cmljczsKIAogdHlwZWRlZiBzdHJ1Y3QgX0d0a1RoZW1lUGFydHMgeworI2lmZGVm
IEdUS19BUElfVkVSU0lPTl8yCiAgICAgR2RrQ29sb3JtYXAqIGNvbG9ybWFwOworI2VuZGlmIC8v
IEdUS19BUElfVkVSU0lPTl8yCiAgICAgR3RrV2lkZ2V0KiBwcm90b1dpbmRvdzsKICAgICBHdGtX
aWRnZXQqIHByb3RvTGF5b3V0OwogICAgIEd0a1dpZGdldCogYnV0dG9uV2lkZ2V0OwpAQCAtMjEx
LDEyICsyMTMsMTggQEAgdm9pZCBtb3pfZ3RrX2Rlc3Ryb3lfdGhlbWVfcGFydHNfd2lkZ2V0cyhH
dGtUaGVtZVBhcnRzKiBwYXJ0cyk7CiAgKiBmbGFnczogICAgIHdpZGdldC1kZXBlbmRhbnQgZmxh
Z3M7IHNlZSB0aGUgR3RrVGhlbWVXaWRnZXRUeXBlIGRlZmluaXRpb24uCiAgKiBkaXJlY3Rpb246
IHRoZSB0ZXh0IGRpcmVjdGlvbiwgdG8gZHJhdyB0aGUgd2lkZ2V0IGNvcnJlY3RseSBMVFIgYW5k
IFJUTC4KICAqLworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCiBnaW50CiBtb3pfZ3RrX3dpZGdl
dF9wYWludChHdGtUaGVtZVdpZGdldFR5cGUgd2lkZ2V0LCBHZGtEcmF3YWJsZSogZHJhd2FibGUs
CiAgICAgICAgICAgICAgICAgICAgICBHZGtSZWN0YW5nbGUqIHJlY3QsIEdka1JlY3RhbmdsZSog
Y2xpcHJlY3QsCiAgICAgICAgICAgICAgICAgICAgICBHdGtXaWRnZXRTdGF0ZSogc3RhdGUsIGdp
bnQgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlv
bik7Ci0KKyNlbHNlCitnaW50Cittb3pfZ3RrX3dpZGdldF9wYWludChHdGtUaGVtZVdpZGdldFR5
cGUgd2lkZ2V0LCBjYWlyb190KiBjciwKKyAgICAgICAgICAgICAgICAgICAgIEdka1JlY3Rhbmds
ZSogcmVjdCwgR3RrV2lkZ2V0U3RhdGUqIHN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgZ2lu
dCBmbGFncywgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24pOworI2VuZGlmCiAKIC8qKiogV2lk
Z2V0IG1ldHJpY3MgKioqLwogLyoqCi0tIAoxLjcuMi4zCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>