<?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>128517</bug_id>
          
          <creation_ts>2014-02-09 22:33:51 -0800</creation_ts>
          <short_desc>Stop using String::deprecatedCharacters to call WTF::Collator</short_desc>
          <delta_ts>2014-02-10 12:07:18 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>enrica</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>978735</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-02-09 22:33:51 -0800</bug_when>
    <thetext>Stop using String::deprecatedCharacters to call WTF::Collator</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978740</commentid>
    <comment_count>1</comment_count>
      <attachid>223676</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-02-09 22:51:01 -0800</bug_when>
    <thetext>Created attachment 223676
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978744</commentid>
    <comment_count>2</comment_count>
      <attachid>223677</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-02-09 22:58:59 -0800</bug_when>
    <thetext>Created attachment 223677
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978754</commentid>
    <comment_count>3</comment_count>
      <attachid>223679</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-02-09 23:25:55 -0800</bug_when>
    <thetext>Created attachment 223679
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978883</commentid>
    <comment_count>4</comment_count>
      <attachid>223713</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-02-10 07:59:01 -0800</bug_when>
    <thetext>Created attachment 223713
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978896</commentid>
    <comment_count>5</comment_count>
      <attachid>223713</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-02-10 08:32:56 -0800</bug_when>
    <thetext>Comment on attachment 223713
Patch

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

r=me

This patch doesn&apos;t apply any more, so it would be useful to let EWS work on an updated version.

&gt; Source/WTF/wtf/unicode/icu/CollatorICU.cpp:71
&gt; +static inline char* copyASCIIString(CFStringRef string)

Maybe a name like copyShortASCIIString or copyLocaleNameToASCIIString would make it more obvious why the implementation is not general purpose.

&gt; Source/WTF/wtf/unicode/icu/CollatorICU.cpp:95
&gt; +    static char* defaultLocale = copyDefaultLocale();

I like to ASSERT(isMainThread()) everywhere a static variables are used like this.

Or maybe this could be made thread safe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978907</commentid>
    <comment_count>6</comment_count>
      <attachid>223713</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-02-10 09:18:47 -0800</bug_when>
    <thetext>Comment on attachment 223713
Patch

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

&gt;&gt; Source/WTF/wtf/unicode/icu/CollatorICU.cpp:71
&gt;&gt; +static inline char* copyASCIIString(CFStringRef string)
&gt; 
&gt; Maybe a name like copyShortASCIIString or copyLocaleNameToASCIIString would make it more obvious why the implementation is not general purpose.

Great idea. Done.

&gt;&gt; Source/WTF/wtf/unicode/icu/CollatorICU.cpp:95
&gt;&gt; +    static char* defaultLocale = copyDefaultLocale();
&gt; 
&gt; I like to ASSERT(isMainThread()) everywhere a static variables are used like this.
&gt; 
&gt; Or maybe this could be made thread safe.

Great suggestion. I used std::call_once to make this thread safe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978910</commentid>
    <comment_count>7</comment_count>
      <attachid>223719</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-02-10 09:20:14 -0800</bug_when>
    <thetext>Created attachment 223719
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978913</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-10 09:22:37 -0800</bug_when>
    <thetext>Attachment 223719 did not pass style-queue:


ERROR: Source/WTF/wtf/unicode/icu/CollatorICU.cpp:98:  Missing space before {  [whitespace/braces] [5]
Total errors found: 1 in 8 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>978926</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-02-10 09:41:31 -0800</bug_when>
    <thetext>Committed r163792: &lt;http://trac.webkit.org/changeset/163792&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978993</commentid>
    <comment_count>10</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-02-10 12:00:21 -0800</bug_when>
    <thetext>This causes a crash on iOS. I&apos;ll post a patch to fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>978997</commentid>
    <comment_count>11</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-02-10 12:07:18 -0800</bug_when>
    <thetext>Patch attached to https://bugs.webkit.org/show_bug.cgi?id=128548</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>223676</attachid>
            <date>2014-02-09 22:51:01 -0800</date>
            <delta_ts>2014-02-09 22:58:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-128517-20140209225117.patch</filename>
            <type>text/plain</type>
            <size>25100</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYzNzEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
MzEwNmU5ODU1YzM1YmViYjVmNTNiMmJhZWRmMTAzZjExYmU5YzUyLi43MDM3OTEzNjZmZTM1ZWRh
OGU4MzdjODhkZWMzYWJkZWFlOTBkODJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNSBAQAorMjAxNC0wMi0wOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgU3RvcCB1c2luZyBTdHJpbmc6OmRlcHJlY2F0ZWRDaGFyYWN0ZXJzIHRvIGNhbGwg
V1RGOjpDb2xsYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTI4NTE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OnN0cmlu
Z1Byb3RvRnVuY0xvY2FsZUNvbXBhcmUpOiBVc2UgdGhlIGRlZmF1bHQgY29uc3RydWN0b3IgZm9y
IENvbGxhdG9yLCB3aGljaCBub3cKKyAgICAgICAgZ2l2ZXMgdGhlIGRlZmF1bHQgbG9jYWxlIGNv
bGxhdGlvbiBydWxlcy4gVXNlIHRoZSBuZXcgYXJndW1lbnRzIGZvciBDb2xsYXRvcjo6Y29sbGF0
ZSwgd2hpY2gKKyAgICAgICAgYXJlIG5vdyBTdHJpbmdWaWV3LiBUaGVzZSB0d28gY2hhbmdlcyB0
b2dldGhlciBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIGEgc2VwYXJhdGUgaGVscGVyIGZ1bmN0aW9u
LgorCiAyMDE0LTAyLTA4ICBNYXJrIFJvd2UgIDxtcm93ZUBhcHBsZS5jb20+CiAKICAgICAgICAg
PGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEyODQ1Mj4gRG9uJ3QgZHVwbGljYXRlIHRoZSBsaXN0IG9m
IGlucHV0IGZpbGVzIGZvciBwb3N0cHJvY2Vzcy1oZWFkZXJzLnNoCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGQxYmM4MjQxOTY3
YWUzOTZhYmMyYjg4NTg3NGI1MjYxZTAyYjkyZjguLjRlOWI3MzJhNWY2NWFlOTY2YjE2ZTc0ZjM1
Zjg2NjNmOWZlYTMxYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTYgQEAKKzIwMTQtMDItMDkgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgdXNpbmcgU3RyaW5nOjpkZXBy
ZWNhdGVkQ2hhcmFjdGVycyB0byBjYWxsIFdURjo6Q29sbGF0b3IKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODUxNworCisgICAgICAgIFdURiBwYXNz
ZXMgSUNV4oCZcyBkZXByZWNhdGVkIFVMT0NfUkVRVUVTVEVEX0xPQ0FMRSB0byB1Y29sX2dldExv
Y2FsZUJ5VHlwZSgpCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzE1MTgzMzkwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBmaXhlcyBi
b3RoIGJ1Z3MgYWJvdmUgYnkgcmV3b3JraW5nIFdURjo6Q29sbGF0b3IuCisKKyAgICAgICAgKiB3
dGYvdW5pY29kZS9Db2xsYXRvci5oOiBGaXhlZCBmb3JtYXR0aW5nLiBHb3QgcmlkIG9mIHRoZSBD
b2xsYXRvcjo6UmVzdWx0IHR5cGUsCisgICAgICAgIHNpbmNlIHRoZSBjb2xsYXRvciB1c2VzIHRo
ZSBzYW1lIHJldHVybiB2YWx1ZSBzY2hlbWUgYXMgc3RyY21wIGFuZCBhcyBJQ1U7IGFuIGludAor
ICAgICAgICB3aWxsIGRvIGZvciB0aGUgcmV0dXJuIHR5cGUuIFNpbXBsaWZpZWQgdGhlIHN1cHBv
cnQgZm9yIFVDT05GSUdfTk9fQ09MTEFUSU9OIGJ5CisgICAgICAgIHVzaW5nIGEgc2VwYXJhdGUg
Y29weSBvZiB0aGUgY2xhc3MgZGVmaW5pdGlvbi4gKFdlIHNob3VsZCBjaGVjayBpZiBhbnlvbmUg
bmVlZHMKKyAgICAgICAgVUNPTkZJR19OT19DT0xMQVRJT04gc3VwcG9ydCwgYW5kIHJlbW92ZSBp
dCBpZiBub3QuKSBDaGFuZ2VkIHRoZSBsb3dlci1maXJzdCBmbGFnCisgICAgICAgIGZyb20gYSBz
ZXBhcmF0ZSBmdW5jdGlvbiB0byBhIGNvbnN0cnVjdG9yIGFyZ3VtZW50LiBDaGFuZ2VkIHRoZSBh
cmd1bWVudHMgdG8KKyAgICAgICAgdGhlIGNvbGxhdGUgZnVuY3Rpb24gdG8gU3RyaW5nVmlldy4g
QWRkZWQgYSBjb2xsYXRlIFVURjggZnVuY3Rpb24uIENoYW5nZWQgdGhlCisgICAgICAgIG1fY29s
bGF0ZSBkYXRhIG1lbWJlciB0byBubyBsb25nZXIgYmUgbXV0YWJsZSBzaW5jZSB3ZSBubyBsb25n
ZXIgYWxsb2NhdGUgaXQgbGF6aWx5LgorCisgICAgICAgICogd3RmL3VuaWNvZGUvQ29sbGF0b3JE
ZWZhdWx0LmNwcDoKKyAgICAgICAgKFdURjo6Q29sbGF0b3I6OmNvbGxhdGUpOiBSZXdyb3RlIHRv
IGJlIHNpbXBsZXIuCisgICAgICAgIChXVEY6OkNvbGxhdG9yOjpjb2xsYXRlVVRGOCk6IEFkZGVk
LiBDb252ZXJ0cyBmcm9tIFVURi04IHRvIGEgU3RyaW5nIGFuZCB0aGVuIGNhbGxzCisgICAgICAg
IHRoZSBjb2xsYXRlIGZ1bmN0aW9uIGFib3ZlLgorCisgICAgICAgICogd3RmL3VuaWNvZGUvaWN1
L0NvbGxhdG9ySUNVLmNwcDogQWRkZWQgYSBGSVhNRSBhYm91dCB0aGUgZmFjdCB0aGF0IHRoaXMg
ZmlsZQorICAgICAgICBoYXMgdGhlIHdyb25nIG5hbWUgYW5kIGxvY2F0aW9uLiBTaW5jZSB3ZSBh
bHdheXMgdXNlIElDVSwgdGhlcmUncyBubyBuZWVkIHRvIG1lbnRpb24KKyAgICAgICAgaXQgaW4g
dGhlIGZpbGUgbmFtZS4KKyAgICAgICAgKFdURjo6Y29weUFTQ0lJU3RyaW5nKTogQWRkZWQuCisg
ICAgICAgIChXVEY6OmNvcHlEZWZhdWx0TG9jYWxlKTogQWRkZWQuCisgICAgICAgIChXVEY6OnJl
c29sdmVEZWZhdWx0TG9jYWxlKTogQWRkZWQuIE1hcHMgbnVsbCBsb2NhbGUgdG8gYSBkZWZhdWx0
IG9uIE1hYyBhbmQgaU9TLAorICAgICAgICBzaW5jZSBvbiB0aG9zZSBwbGF0Zm9ybXMgSUNVIGRv
ZXMgbm90IHVzZSB0aGUgY29ycmVjdCBkZWZhdWx0IGxvY2FsZSB3aGVuIHBhc3NlZCBudWxsLgor
ICAgICAgICAoV1RGOjpsb2NhbGVzTWF0Y2gpOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q29sbGF0
b3I6OkNvbGxhdG9yKTogTW92ZWQgbW9zdCBvZiB0aGUgY29kZSBmcm9tIGNyZWF0ZUNvbGxhdG9y
IGhlcmUuCisgICAgICAgIFNpbXBsaWZpZWQgaXQgYnkgc3RvcmluZyB0aGUgY29sbGF0b3IgY29u
ZmlndXJhdGlvbiBhbG9uZyB3aXRoIHRoZSBjb2xsYXRvciBpbiBnbG9iYWxzLgorICAgICAgICAo
V1RGOjpDb2xsYXRvcjo6fkNvbGxhdG9yKTogTW92ZWQgbW9zdCBvZiB0aGUgY29kZSBmcm9tIHJl
bGVhc2VDb2xsYXRvciBoZXJlLgorICAgICAgICBVc2Ugc3RkOjptb3ZlIHRvIG1ha2UgdGhlIHRy
YW5zZmVycyBvZiBvd25lcnNoaXAgY2xlYXJlci4KKyAgICAgICAgKFdURjo6Z2V0SW5kZXhMYXRp
bjEpOiBBZGRlZC4KKyAgICAgICAgKFdURjo6bW92ZUxhdGluMSk6IEFkZGVkLgorICAgICAgICAo
V1RGOjpoYXNOZXh0TGF0aW4xKTogQWRkZWQuCisgICAgICAgIChXVEY6Omhhc1ByZXZpb3VzTGF0
aW4xKTogQWRkZWQuCisgICAgICAgIChXVEY6OmN1cnJlbnRMYXRpbjEpOiBBZGRlZC4KKyAgICAg
ICAgKFdURjo6bmV4dExhdGluMSk6IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmV2aW91c0xhdGlu
MSk6IEFkZGVkLgorICAgICAgICAoV1RGOjpjcmVhdGVMYXRpbjFJdGVyYXRvcik6IEFkZGVkLiBV
c2VzIHRoZSBmdW5jdGlvbnMgYWJvdmUgdG8gbWFrZSBhIFVDaGFySXRlcmF0b3IKKyAgICAgICAg
dGhhdCB3b3JrcyBmb3IgYSBXVEY6OlN0cmluZ1ZpZXctc3R5bGUgTGF0aW4tMSBzdHJpbmcuCisg
ICAgICAgIChXVEY6OmNyZWF0ZUl0ZXJhdG9yKTogQWRkZWQuIFVzZXMgZWl0aGVyIGNyZWF0ZUxh
dGluMUl0ZXJhdG9yIG9yIHVpdGVyX3NldFN0cmluZyB0bworICAgICAgICBtYWtlIGEgVUNoYXJJ
dGVyYXRvciB0aGF0IHdvcmtzIGZvciBhIFdURjo6U3RyaW5nVmlldy4KKyAgICAgICAgKFdURjo6
Q29sbGF0b3I6OmNvbGxhdGUpOiBDaGFuZ2VkIHRvIHVzZSB1Y29sX3N0cmNvbGxJdGVyLgorICAg
ICAgICAoV1RGOjpjcmVhdGVJdGVyYXRvclVURjgpOiBBZGRlZC4gVXNlcyB1aXRlcl9zZXRVVEY4
LgorICAgICAgICAoV1RGOjpDb2xsYXRvcjo6Y29sbGF0ZVVURjgpOiBBZGRlZC4gTGlrZSBjb2xs
YXRlLCBidXQgZm9yIG51bGwtdGVybWluYXRlZCBVVEYtOCBzdHJpbmdzLgorCiAyMDE0LTAyLTA4
ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBDaGFuZ2UgVGV4dEl0
ZXJhdG9yIHRvIHVzZSBTdHJpbmdWaWV3LCBwcmVwYXJpbmcgdG8gd2VhbiBpdCBmcm9tIGRlcHJl
Y2F0ZWRDaGFyYWN0ZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDI2NjU5NWVlOWM2ZmZlMDkyYmNkMThiNmNm
NmU1M2VjMmJjMjkzZS4uNzRlMzhiZjQxMDBjYmFjZjFhNjNlY2E3YzMyMzI0ZDQ1M2JkNTUyMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE0LTAyLTA5ICBEYXJpbiBBZGxlciAgPGRh
cmluQGFwcGxlLmNvbT4KKworICAgICAgICBTdG9wIHVzaW5nIFN0cmluZzo6ZGVwcmVjYXRlZENo
YXJhY3RlcnMgdG8gY2FsbCBXVEY6OkNvbGxhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjg1MTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHhtbC9YU0xUVW5pY29kZVNvcnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6eHNsdFVuaWNvZGVTb3J0RnVuY3Rpb24pOiBDcmVhdGUgdGhlIGNvbGxhdG9y
IGluIGEgc2luZ2xlIGxpbmUgdXNpbmcgdGhlCisgICAgICAgIG5ldyBjb25zdHJ1Y3RvciB0aGF0
IHRha2VzIGEgc2hvdWxkU29ydExvd2VyY2FzZUZpcnN0IGJvb2xlYW4uIFVzZSB0aGUgbmV3Cisg
ICAgICAgIGNvbGxhdGVVVEY4IGZ1bmN0aW9uIGluc3RlYWQgb2YgdXBjb252ZXJ0aW5nIFVURi04
IHN0cmluZ3MgdG8gVVRGLTE2IGFzIHRoZSBvbGQgY29kZSBkaWQuCisKIDIwMTQtMDItMDggIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIENoYW5nZSBUZXh0SXRlcmF0
b3IgdG8gdXNlIFN0cmluZ1ZpZXcsIHByZXBhcmluZyB0byB3ZWFuIGl0IGZyb20gZGVwcmVjYXRl
ZENoYXJhY3RlcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cmluZ1Byb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQ
cm90b3R5cGUuY3BwCmluZGV4IGVmY2M0MGQ2NjczODdkZjA5NTU4MzUyODJmYTczYzdjMTBjNmYz
YTIuLmU2M2FiOWIwZjZlNTljZmMwZWVjODhiOTE1ZDg3ZWU1OTQwZjQ4NjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcApAQCAtNDEs
NiArNDEsNyBAQAogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUgPHd0Zi9BU0NJ
SUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdWaWV3Lmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ29sbGF0b3IuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIFdURjsKQEAgLTIzNSwxMyArMjM2LDcgQEAgc3RhdGljIGlubGluZSBTdHJp
bmcgc3Vic3RpdHV0ZUJhY2tyZWZlcmVuY2VzKGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQsIGNv
bnN0IFMKICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGxv
Y2FsZUNvbXBhcmUoY29uc3QgU3RyaW5nJiBhLCBjb25zdCBTdHJpbmcmIGIpCi17Ci0gICAgcmV0
dXJuIENvbGxhdG9yOjp1c2VyRGVmYXVsdCgpLT5jb2xsYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgOjpVQ2hhcio+KGEuZGVwcmVjYXRlZENoYXJhY3RlcnMoKSksIGEubGVuZ3RoKCksIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgOjpVQ2hhcio+KGIuZGVwcmVjYXRlZENoYXJhY3RlcnMoKSksIGIu
bGVuZ3RoKCkpOwotfQotCiBzdHJ1Y3QgU3RyaW5nUmFuZ2UgewotcHVibGljOgogICAgIFN0cmlu
Z1JhbmdlKGludCBwb3MsIGludCBsZW4pCiAgICAgICAgIDogcG9zaXRpb24ocG9zKQogICAgICAg
ICAsIGxlbmd0aChsZW4pCkBAIC0xMjk5LDcgKzEyOTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0xvY2FsZUNvbXBhcmUoRXhlY1N0YXRlKiBleGVjKQog
ICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKIAog
ICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKGxvY2FsZUNvbXBhcmUocywgYTAudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoQ29sbGF0b3Io
KS5jb2xsYXRlKHMsIGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpKTsKIH0KIAogRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNCaWcoRXhlY1N0YXRlKiBl
eGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdW5pY29kZS9Db2xsYXRvci5oIGIvU291
cmNlL1dURi93dGYvdW5pY29kZS9Db2xsYXRvci5oCmluZGV4IDI3ZDJkMjdkYjIxZjU0ZTRkYmZh
M2U4YTQxNzdmYjc3MDU4YTczODguLjY1Mzk2OWQyNWExMjQ0OGM4ODEwY2ZmYTc5NjY4OTM2NDEx
NzQyZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvQ29sbGF0b3IuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL0NvbGxhdG9yLmgKQEAgLTMwLDM2ICszMCw0NSBAQAog
I2RlZmluZSBXVEZfQ29sbGF0b3JfaAogCiAjaW5jbHVkZSA8dW5pY29kZS91Y29uZmlnLmg+Ci0j
aW5jbHVkZSA8dW5pY29kZS91dHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
LSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIHN0cnVjdCBVQ29sbGF0b3I7CiAKIG5hbWVzcGFj
ZSBXVEYgewogCi0gICAgY2xhc3MgQ29sbGF0b3IgewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShDb2xsYXRvcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAg
ICAgICAgZW51bSBSZXN1bHQgeyBFcXVhbCA9IDAsIEdyZWF0ZXIgPSAxLCBMZXNzID0gLTEgfTsK
K2NsYXNzIFN0cmluZ1ZpZXc7CiAKLSAgICAgICAgV1RGX0VYUE9SVF9QUklWQVRFIENvbGxhdG9y
KGNvbnN0IGNoYXIqIGxvY2FsZSk7IC8vIFBhcnNpbmcgaXMgbGVuaWVudDsgZS5nLiBsYW5ndWFn
ZSBpZGVudGlmaWVycyAoc3VjaCBhcyAiZW4tVVMiKSBhcmUgYWNjZXB0ZWQsIHRvby4KLSAgICAg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIH5Db2xsYXRvcigpOwotICAgICAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBzZXRPcmRlckxvd2VyRmlyc3QoYm9vbCk7CisjaWYgVUNPTkZJR19OT19DT0xM
QVRJT04KIAotICAgICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxDb2xsYXRvcj4gdXNlckRlZmF1bHQoKTsKK2NsYXNzIENvbGxhdG9yIHsKK3B1YmxpYzoKKyAg
ICBleHBsaWNpdCBDb2xsYXRvcihjb25zdCBjaGFyKiA9IG51bGxwdHIsIGJvb2wgPSBmYWxzZSkg
eyB9CiAKLSAgICAgICAgV1RGX0VYUE9SVF9QUklWQVRFIFJlc3VsdCBjb2xsYXRlKGNvbnN0IDo6
VUNoYXIqLCBzaXplX3QsIGNvbnN0IDo6VUNoYXIqLCBzaXplX3QpIGNvbnN0OworICAgIFdURl9F
WFBPUlRfUFJJVkFURSBzdGF0aWMgaW50IGNvbGxhdGUoU3RyaW5nVmlldywgU3RyaW5nVmlldyk7
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBpbnQgY29sbGF0ZVVURjgoY29uc3QgY2hh
ciosIGNvbnN0IGNoYXIqKTsKK307CisKKyNlbHNlCisKK2NsYXNzIENvbGxhdG9yIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShDb2xsYXRvcik7CitwdWJsaWM6CisgICAgLy8gVGhlIHZhbHVl
IG51bGxwdHIgaXMgYSBzcGVjaWFsIG9uZSBtZWFuaW5nIHRoZSBzeXN0ZW0gZGVmYXVsdCBsb2Nh
bGUuCisgICAgLy8gTG9jYWxlIG5hbWUgcGFyc2luZyBpcyBsZW5pZW50OyBlLmcuIGxhbmd1YWdl
IGlkZW50aWZpZXJzIChzdWNoIGFzICJlbi1VUyIpIGFyZSBhY2NlcHRlZCwgdG9vLgorICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBleHBsaWNpdCBDb2xsYXRvcihjb25zdCBjaGFyKiBsb2NhbGUgPSBu
dWxscHRyLCBib29sIHNob3VsZFNvcnRMb3dlcmNhc2VGaXJzdCA9IGZhbHNlKTsKKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgfkNvbGxhdG9yKCk7CisKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgaW50
IGNvbGxhdGUoU3RyaW5nVmlldywgU3RyaW5nVmlldykgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIGludCBjb2xsYXRlVVRGOChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopIGNvbnN0Owor
Citwcml2YXRlOgorICAgIGNoYXIqIG1fbG9jYWxlOworICAgIGJvb2wgbV9zaG91bGRTb3J0TG93
ZXJjYXNlRmlyc3Q7CisgICAgVUNvbGxhdG9yKiBtX2NvbGxhdG9yOworfTsKIAotICAgIHByaXZh
dGU6Ci0jaWYgIVVDT05GSUdfTk9fQ09MTEFUSU9OCi0gICAgICAgIHZvaWQgY3JlYXRlQ29sbGF0
b3IoKSBjb25zdDsKLSAgICAgICAgdm9pZCByZWxlYXNlQ29sbGF0b3IoKTsKLSAgICAgICAgbXV0
YWJsZSBVQ29sbGF0b3IqIG1fY29sbGF0b3I7CiAjZW5kaWYKLSAgICAgICAgY2hhciogbV9sb2Nh
bGU7Ci0gICAgICAgIGJvb2wgbV9sb3dlckZpcnN0OwotICAgIH07CisKIH0KIAogdXNpbmcgV1RG
OjpDb2xsYXRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvQ29sbGF0b3JE
ZWZhdWx0LmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvQ29sbGF0b3JEZWZhdWx0LmNwcApp
bmRleCBkNTZiYjVhMzhhNDFmODRhYjMxNzU3ZjU3YTNmMWIzZmU5MmUwZGQyLi44MGZjNDYwODNm
Njg4OTU1MmQ1NTRjYzBkNjU0YzRiMDQyMzg0Y2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi91bmljb2RlL0NvbGxhdG9yRGVmYXVsdC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdW5pY29k
ZS9Db2xsYXRvckRlZmF1bHQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw0MSArMzMsMjcgQEAKIAogbmFtZXNwYWNlIFdURiB7
CiAKLUNvbGxhdG9yOjpDb2xsYXRvcihjb25zdCBjaGFyKikKK2ludCBDb2xsYXRvcjo6Y29sbGF0
ZShTdHJpbmdWaWV3IGEsIFN0cmluZ1ZpZXcgYikgY29uc3QKIHsKLX0KLQotQ29sbGF0b3I6On5D
b2xsYXRvcigpCi17Ci19CisgICAgdW5zaWduZWQgY29tbW9uTGVuZ3RoID0gc3RkOjptaW4oYS5s
ZW5ndGgoKSwgYi5sZW5ndGgoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbW1v
bkxlbmd0aDsgKytpKSB7CisgICAgICAgIGlmIChhW2ldIDwgYltpXSkKKyAgICAgICAgICAgIHJl
dHVybiAtMTsKKyAgICAgICAgaWYgKGFbaV0gPiBiW2ldKQorICAgICAgICAgICAgcmV0dXJuIDE7
CisgICAgfQogCi12b2lkIENvbGxhdG9yOjpzZXRPcmRlckxvd2VyRmlyc3QoYm9vbCkKLXsKLX0K
KyAgICBpZiAoYS5sZW5ndGgoKSA8IGIubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiAtMTsKKyAg
ICBpZiAoYS5sZW5ndGgoKSA+IGIubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiAxOwogCi1zdGQ6
OnVuaXF1ZV9wdHI8Q29sbGF0b3I+IENvbGxhdG9yOjp1c2VyRGVmYXVsdCgpCi17Ci0gICAgcmV0
dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q29sbGF0b3I+KG51bGxwdHIpOworICAgIHJldHVybiAwOwog
fQogCi0vLyBBIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZm9yIHBsYXRmb3JtcyB0aGF0IGxhY2sg
VW5pY29kZS1hd2FyZSBjb2xsYXRpb24uCi1Db2xsYXRvcjo6UmVzdWx0IENvbGxhdG9yOjpjb2xs
YXRlKGNvbnN0IFVDaGFyKiBsaHMsIHNpemVfdCBsaHNMZW5ndGgsIGNvbnN0IFVDaGFyKiByaHMs
IHNpemVfdCByaHNMZW5ndGgpIGNvbnN0CitpbnQgQ29sbGF0b3I6OmNvbGxhdGVVVEY4KGNvbnN0
IGNoYXIqIGEsIGNvbnN0IGNoYXIqIGIpIGNvbnN0CiB7Ci0gICAgaW50IGxtaW4gPSBsaHNMZW5n
dGggPCByaHNMZW5ndGggPyBsaHNMZW5ndGggOiByaHNMZW5ndGg7Ci0gICAgaW50IGwgPSAwOwot
ICAgIHdoaWxlIChsIDwgbG1pbiAmJiAqbGhzID09ICpyaHMpIHsKLSAgICAgICAgbGhzKys7Ci0g
ICAgICAgIHJocysrOwotICAgICAgICBsKys7Ci0gICAgfQotCi0gICAgaWYgKGwgPCBsbWluKQot
ICAgICAgICByZXR1cm4gKCpsaHMgPiAqcmhzKSA/IEdyZWF0ZXIgOiBMZXNzOwotCi0gICAgaWYg
KGxoc0xlbmd0aCA9PSByaHNMZW5ndGgpCi0gICAgICAgIHJldHVybiBFcXVhbDsKLQotICAgIHJl
dHVybiAobGhzTGVuZ3RoID4gcmhzTGVuZ3RoKSA/IEdyZWF0ZXIgOiBMZXNzOworICAgIHJldHVy
biBjb2xsYXRlKFN0cmluZzo6ZnJvbVVURjgoYSksIFN0cmluZzo6ZnJvbVVURjgoYikpOwogfQog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL2ljdS9Db2xsYXRvcklDVS5j
cHAgYi9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL2ljdS9Db2xsYXRvcklDVS5jcHAKaW5kZXggZTQw
NTliY2RjZmFhOWZjMDJlMTgzMmNkMjIyNzNmMzU2ZGM2ZmY1OS4uZWVlNjk0YmFlYjg5NTY0N2Fk
YzQ3ZTdiYWZlMTA2OGMyYjRhMzg5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdW5pY29k
ZS9pY3UvQ29sbGF0b3JJQ1UuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvaWN1L0Nv
bGxhdG9ySUNVLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjcsMjQgKzI3LDI3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NvbGxhdG9yLmg+CisjaW5jbHVkZSAiQ29sbGF0b3Iu
aCIKKworLy8gRklYTUU6IE1lcmdlIHRoaXMgd2l0aCBDb2xsYXRvckRlZmF1bHQuY3BwIGludG8g
YSBzaW5nbGUgQ29sbGF0b3IuY3BwIHNvdXJjZSBmaWxlLgogCiAjaWYgIVVDT05GSUdfTk9fQ09M
TEFUSU9OCiAKICNpbmNsdWRlIDxtdXRleD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgot
I2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx1bmljb2RlL3Vjb2wuaD4K
LSNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogCi0jaWYgT1MoREFSV0lOKQotI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KKyNpZiBPUyhEQVJXSU4pICYmIFVTRShDRikKICNpbmNsdWRlIDxD
b3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KICNlbmRpZgogCiBuYW1lc3BhY2UgV1RGIHsKIAogc3RhdGljIFVDb2xsYXRvciogY2FjaGVk
Q29sbGF0b3I7CitzdGF0aWMgY2hhciogY2FjaGVkQ29sbGF0b3JMb2NhbGU7CitzdGF0aWMgYm9v
bCBjYWNoZWRDb2xsYXRvclNob3VsZFNvcnRMb3dlcmNhc2VGaXJzdDsKIAogc3RhdGljIHN0ZDo6
bXV0ZXgmIGNhY2hlZENvbGxhdG9yTXV0ZXgoKQogewpAQCAtNTMsMTA1ICs1NiwyMTIgQEAgc3Rh
dGljIHN0ZDo6bXV0ZXgmIGNhY2hlZENvbGxhdG9yTXV0ZXgoKQogICAgIHN0ZDo6Y2FsbF9vbmNl
KG9uY2VGbGFnLCBbXXsKICAgICAgICAgbXV0ZXggPSBzdGQ6Om1ha2VfdW5pcXVlPHN0ZDo6bXV0
ZXg+KCkucmVsZWFzZSgpOwogICAgIH0pOwotCiAgICAgcmV0dXJuICptdXRleDsKIH0KIAotQ29s
bGF0b3I6OkNvbGxhdG9yKGNvbnN0IGNoYXIqIGxvY2FsZSkKLSAgICA6IG1fY29sbGF0b3IoMCkK
LSAgICAsIG1fbG9jYWxlKGxvY2FsZSA/IHN0cmR1cChsb2NhbGUpIDogMCkKLSAgICAsIG1fbG93
ZXJGaXJzdChmYWxzZSkKKyNpZiAhKE9TKERBUldJTikgJiYgVVNFKENGKSkKKworc3RhdGljIGlu
bGluZSBjb25zdCBjaGFyKiByZXNvbHZlRGVmYXVsdExvY2FsZShjb25zdCBjaGFyKiBsb2NhbGUp
CiB7CisgICAgcmV0dXJuIGxvY2FsZTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPENvbGxhdG9yPiBD
b2xsYXRvcjo6dXNlckRlZmF1bHQoKQotewotI2lmIE9TKERBUldJTikgJiYgVVNFKENGKQotICAg
IC8vIE1hYyBPUyBYIGRvZXNuJ3Qgc2V0IFVOSVggbG9jYWxlIHRvIG1hdGNoIHVzZXItc2VsZWN0
ZWQgb25lLCBzbyBJQ1UgZGVmYXVsdCBkb2Vzbid0IHdvcmsuCi0jaWYgIU9TKElPUykKLSAgICBS
ZXRhaW5QdHI8Q0ZMb2NhbGVSZWY+IGN1cnJlbnRMb2NhbGUgPSBhZG9wdENGKENGTG9jYWxlQ29w
eUN1cnJlbnQoKSk7Ci0gICAgQ0ZTdHJpbmdSZWYgY29sbGF0aW9uT3JkZXIgPSAoQ0ZTdHJpbmdS
ZWYpQ0ZMb2NhbGVHZXRWYWx1ZShjdXJyZW50TG9jYWxlLmdldCgpLCBrQ0ZMb2NhbGVDb2xsYXRv
cklkZW50aWZpZXIpOwotI2Vsc2UKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNvbGxhdGlv
bk9yZGVyUmV0YWluZXIgPSBhZG9wdENGKChDRlN0cmluZ1JlZilDRlByZWZlcmVuY2VzQ29weVZh
bHVlKENGU1RSKCJBcHBsZUNvbGxhdGlvbk9yZGVyIiksIGtDRlByZWZlcmVuY2VzQW55QXBwbGlj
YXRpb24sIGtDRlByZWZlcmVuY2VzQ3VycmVudFVzZXIsIGtDRlByZWZlcmVuY2VzQW55SG9zdCkp
OwotICAgIENGU3RyaW5nUmVmIGNvbGxhdGlvbk9yZGVyID0gY29sbGF0aW9uT3JkZXJSZXRhaW5l
ci5nZXQoKTsKLSNlbmRpZgotICAgIGNoYXIgYnVmWzI1Nl07Ci0gICAgaWYgKCFjb2xsYXRpb25P
cmRlcikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q29sbGF0b3I+KCIiKTsKLSAg
ICBDRlN0cmluZ0dldENTdHJpbmcoY29sbGF0aW9uT3JkZXIsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIGtD
RlN0cmluZ0VuY29kaW5nQVNDSUkpOwotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENvbGxh
dG9yPihidWYpOwogI2Vsc2UKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDb2xsYXRvcj4o
c3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KDApKTsKLSNlbmRpZgotfQogCi1Db2xsYXRvcjo6fkNv
bGxhdG9yKCkKK3N0YXRpYyBpbmxpbmUgY2hhciogY29weUFTQ0lJU3RyaW5nKENGU3RyaW5nUmVm
IHN0cmluZykKIHsKLSAgICByZWxlYXNlQ29sbGF0b3IoKTsKLSAgICBmcmVlKG1fbG9jYWxlKTsK
KyAgICBjaGFyIGJ1ZmZlclsyNTZdOworICAgIGlmICghQ0ZTdHJpbmdHZXRDU3RyaW5nKHN0cmlu
ZywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwga0NGU3RyaW5nRW5jb2RpbmdBU0NJSSkpCisgICAg
ICAgIHJldHVybiBzdHJkdXAoIiIpOworICAgIHJldHVybiBzdHJkdXAoYnVmZmVyKTsKIH0KIAot
dm9pZCBDb2xsYXRvcjo6c2V0T3JkZXJMb3dlckZpcnN0KGJvb2wgbG93ZXJGaXJzdCkKK3N0YXRp
YyBjaGFyKiBjb3B5RGVmYXVsdExvY2FsZSgpCiB7Ci0gICAgbV9sb3dlckZpcnN0ID0gbG93ZXJG
aXJzdDsKKyNpZiAhUExBVEZPUk0oSU9TKQorICAgIHJldHVybiBjb3B5QVNDSUlTdHJpbmcoc3Rh
dGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGTG9jYWxlR2V0VmFsdWUoYWRvcHRDRihDRkxvY2FsZUNv
cHlDdXJyZW50KCkpLmdldCgpLCBrQ0ZMb2NhbGVDb2xsYXRvcklkZW50aWZpZXIpKSk7CisjZWxz
ZQorICAgIC8vIEZJWE1FOiBEb2N1bWVudGF0aW9uIGNsYWltcyB0aGUgY29kZSBhYm92ZSB3b3Vs
ZCB3b3JrIG9uIGlPUyA0LjAgYW5kIGxhdGVyLiBBZnRlciB0ZXN0IHRoYXQgd29ya3MsIHdlIHNo
b3VsZCByZW1vdmUgdGhpcyBhbmQgdXNlIHRoYXQgaW5zdGVhZC4KKyAgICByZXR1cm4gY29weUFT
Q0lJU3RyaW5nKGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGUHJlZmVyZW5jZXND
b3B5VmFsdWUoQ0ZTVFIoIkFwcGxlQ29sbGF0aW9uT3JkZXIiKSwga0NGUHJlZmVyZW5jZXNBbnlB
cHBsaWNhdGlvbiwga0NGUHJlZmVyZW5jZXNDdXJyZW50VXNlciwga0NGUHJlZmVyZW5jZXNBbnlI
b3N0KSkpLmdldCgpKTsKKyNlbmRpZgogfQogCi1Db2xsYXRvcjo6UmVzdWx0IENvbGxhdG9yOjpj
b2xsYXRlKGNvbnN0IFVDaGFyKiBsaHMsIHNpemVfdCBsaHNMZW5ndGgsIGNvbnN0IFVDaGFyKiBy
aHMsIHNpemVfdCByaHNMZW5ndGgpIGNvbnN0CitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIHJl
c29sdmVEZWZhdWx0TG9jYWxlKGNvbnN0IGNoYXIqIGxvY2FsZSkKIHsKLSAgICBpZiAoIW1fY29s
bGF0b3IpCi0gICAgICAgIGNyZWF0ZUNvbGxhdG9yKCk7CisgICAgaWYgKGxvY2FsZSkKKyAgICAg
ICAgcmV0dXJuIGxvY2FsZTsKKyAgICAvLyBTaW5jZSBpT1MgYW5kIE9TIFggZG9uJ3Qgc2V0IFVO
SVggbG9jYWxlIHRvIG1hdGNoIHRoZSB1c2VyJ3Mgc2VsZWN0ZWQgbG9jYWxlLCB0aGUgSUNVIGRl
ZmF1bHQgbG9jYWxlIGlzIG5vdCB0aGUgcmlnaHQgb25lLgorICAgIC8vIFNvLCBpbnN0ZWFkIG9m
IHBhc3NpbmcgbnVsbCwgd2UgZmV0Y2ggdGhlIG5hbWUgb2YgdGhlIGRlZmF1bHQgbG9jYWxlLgor
ICAgIHN0YXRpYyBjaGFyKiBkZWZhdWx0TG9jYWxlID0gY29weURlZmF1bHRMb2NhbGUoKTsKKyAg
ICByZXR1cm4gZGVmYXVsdExvY2FsZTsKK30KIAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZXN1
bHQ+KHVjb2xfc3RyY29sbChtX2NvbGxhdG9yLCBsaHMsIGxoc0xlbmd0aCwgcmhzLCByaHNMZW5n
dGgpKTsKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIGJvb2wgbG9jYWxlc01hdGNoKGNvbnN0IGNo
YXIqIGEsIGNvbnN0IGNoYXIqIGIpCit7CisgICAgLy8gVHdvIG51bGwgbG9jYWxlcyBhcmUgZXF1
YWwsIG90aGVyIGxvY2FsZXMgYXJlIGNvbXBhcmVkIHdpdGggc3RyY21wLgorICAgIHJldHVybiBh
ID09IGIgfHwgKGEgJiYgYiAmJiAhc3RyY21wKGEsIGIpKTsKIH0KIAotdm9pZCBDb2xsYXRvcjo6
Y3JlYXRlQ29sbGF0b3IoKSBjb25zdAorQ29sbGF0b3I6OkNvbGxhdG9yKGNvbnN0IGNoYXIqIGxv
Y2FsZSwgYm9vbCBzaG91bGRTb3J0TG93ZXJjYXNlRmlyc3QpCiB7CiAgICAgQVNTRVJUKCFtX2Nv
bGxhdG9yKTsKICAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKIAogICAgIHsK
ICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2soY2FjaGVkQ29sbGF0b3JN
dXRleCgpKTsKLSAgICAgICAgaWYgKGNhY2hlZENvbGxhdG9yKSB7Ci0gICAgICAgICAgICBjb25z
dCBjaGFyKiBjYWNoZWRDb2xsYXRvckxvY2FsZSA9IHVjb2xfZ2V0TG9jYWxlQnlUeXBlKGNhY2hl
ZENvbGxhdG9yLCBVTE9DX1JFUVVFU1RFRF9MT0NBTEUsICZzdGF0dXMpOwotICAgICAgICAgICAg
QVNTRVJUKFVfU1VDQ0VTUyhzdGF0dXMpKTsKLSAgICAgICAgICAgIEFTU0VSVChjYWNoZWRDb2xs
YXRvckxvY2FsZSk7Ci0KLSAgICAgICAgICAgIFVDb2xBdHRyaWJ1dGVWYWx1ZSBjYWNoZWRDb2xs
YXRvckxvd2VyRmlyc3QgPSB1Y29sX2dldEF0dHJpYnV0ZShjYWNoZWRDb2xsYXRvciwgVUNPTF9D
QVNFX0ZJUlNULCAmc3RhdHVzKTsKLSAgICAgICAgICAgIEFTU0VSVChVX1NVQ0NFU1Moc3RhdHVz
KSk7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiBkZWZhdWx0IGxvY2FsZSBpcyBuZXZlciBtYXRj
aGVkLCBiZWNhdXNlIHVjb2xfZ2V0TG9jYWxlQnlUeXBlIHJldHVybnMgdGhlIGFjdHVhbCBvbmUg
dXNlZCwgbm90IDAuCi0gICAgICAgICAgICBpZiAobV9sb2NhbGUgJiYgMCA9PSBzdHJjbXAoY2Fj
aGVkQ29sbGF0b3JMb2NhbGUsIG1fbG9jYWxlKQotICAgICAgICAgICAgICAgICYmICgoVUNPTF9M
T1dFUl9GSVJTVCA9PSBjYWNoZWRDb2xsYXRvckxvd2VyRmlyc3QgJiYgbV9sb3dlckZpcnN0KSB8
fCAoVUNPTF9VUFBFUl9GSVJTVCA9PSBjYWNoZWRDb2xsYXRvckxvd2VyRmlyc3QgJiYgIW1fbG93
ZXJGaXJzdCkpKSB7Ci0gICAgICAgICAgICAgICAgbV9jb2xsYXRvciA9IGNhY2hlZENvbGxhdG9y
OwotICAgICAgICAgICAgICAgIGNhY2hlZENvbGxhdG9yID0gbnVsbHB0cjsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChjYWNoZWRDb2xsYXRvciAm
JiBsb2NhbGVzTWF0Y2goY2FjaGVkQ29sbGF0b3JMb2NhbGUsIGxvY2FsZSkgJiYgY2FjaGVkQ29s
bGF0b3JTaG91bGRTb3J0TG93ZXJjYXNlRmlyc3QgPT0gc2hvdWxkU29ydExvd2VyY2FzZUZpcnN0
KSB7CisgICAgICAgICAgICBtX2NvbGxhdG9yID0gc3RkOjptb3ZlKGNhY2hlZENvbGxhdG9yKTsK
KyAgICAgICAgICAgIG1fbG9jYWxlID0gc3RkOjptb3ZlKGNhY2hlZENvbGxhdG9yTG9jYWxlKTsK
KyAgICAgICAgICAgIG1fc2hvdWxkU29ydExvd2VyY2FzZUZpcnN0ID0gc2hvdWxkU29ydExvd2Vy
Y2FzZUZpcnN0OworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCi0gICAg
bV9jb2xsYXRvciA9IHVjb2xfb3BlbihtX2xvY2FsZSwgJnN0YXR1cyk7CisgICAgbV9jb2xsYXRv
ciA9IHVjb2xfb3BlbihyZXNvbHZlRGVmYXVsdExvY2FsZShtX2xvY2FsZSksICZzdGF0dXMpOwog
ICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVzKSkgewogICAgICAgICBzdGF0dXMgPSBVX1pFUk9fRVJS
T1I7Ci0gICAgICAgIG1fY29sbGF0b3IgPSB1Y29sX29wZW4oIiIsICZzdGF0dXMpOyAvLyBGYWxs
YmFjayB0byBVbmljb2RlIENvbGxhdGlvbiBBbGdvcml0aG0uCisgICAgICAgIG1fY29sbGF0b3Ig
PSB1Y29sX29wZW4oIiIsICZzdGF0dXMpOyAvLyBGYWxsIGJhY2sgdG8gVW5pY29kZSBDb2xsYXRp
b24gQWxnb3JpdGhtLgogICAgIH0KICAgICBBU1NFUlQoVV9TVUNDRVNTKHN0YXR1cykpOwogCi0g
ICAgdWNvbF9zZXRBdHRyaWJ1dGUobV9jb2xsYXRvciwgVUNPTF9DQVNFX0ZJUlNULCBtX2xvd2Vy
Rmlyc3QgPyBVQ09MX0xPV0VSX0ZJUlNUIDogVUNPTF9VUFBFUl9GSVJTVCwgJnN0YXR1cyk7Cisg
ICAgdWNvbF9zZXRBdHRyaWJ1dGUobV9jb2xsYXRvciwgVUNPTF9DQVNFX0ZJUlNULCBtX3Nob3Vs
ZFNvcnRMb3dlcmNhc2VGaXJzdCA/IFVDT0xfTE9XRVJfRklSU1QgOiBVQ09MX1VQUEVSX0ZJUlNU
LCAmc3RhdHVzKTsKICAgICBBU1NFUlQoVV9TVUNDRVNTKHN0YXR1cykpOwogCiAgICAgdWNvbF9z
ZXRBdHRyaWJ1dGUobV9jb2xsYXRvciwgVUNPTF9OT1JNQUxJWkFUSU9OX01PREUsIFVDT0xfT04s
ICZzdGF0dXMpOwogICAgIEFTU0VSVChVX1NVQ0NFU1Moc3RhdHVzKSk7CisKKyAgICBtX2xvY2Fs
ZSA9IGxvY2FsZSA/IHN0cmR1cChsb2NhbGUpIDogbnVsbHB0cjsKKyAgICBtX3Nob3VsZFNvcnRM
b3dlcmNhc2VGaXJzdCA9IHNob3VsZFNvcnRMb3dlcmNhc2VGaXJzdDsKIH0KIAotdm9pZCBDb2xs
YXRvcjo6cmVsZWFzZUNvbGxhdG9yKCkKK0NvbGxhdG9yOjp+Q29sbGF0b3IoKQogewogICAgIHsK
ICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2soY2FjaGVkQ29sbGF0b3JN
dXRleCgpKTsKICAgICAgICAgaWYgKGNhY2hlZENvbGxhdG9yKQogICAgICAgICAgICAgdWNvbF9j
bG9zZShjYWNoZWRDb2xsYXRvcik7Ci0gICAgICAgIGNhY2hlZENvbGxhdG9yID0gbV9jb2xsYXRv
cjsKLSAgICAgICAgbV9jb2xsYXRvciA9IG51bGxwdHI7CisgICAgICAgIGNhY2hlZENvbGxhdG9y
ID0gc3RkOjptb3ZlKG1fY29sbGF0b3IpOworICAgICAgICBjYWNoZWRDb2xsYXRvckxvY2FsZSA9
IHN0ZDo6bW92ZShtX2xvY2FsZSk7CisgICAgICAgIGNhY2hlZENvbGxhdG9yU2hvdWxkU29ydExv
d2VyY2FzZUZpcnN0ID0gbV9zaG91bGRTb3J0TG93ZXJjYXNlRmlyc3Q7CiAgICAgfQorCisgICAg
ZnJlZShtX2xvY2FsZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IGdldEluZGV4TGF0aW4xKFVDaGFy
SXRlcmF0b3IqIGl0ZXJhdG9yLCBVQ2hhckl0ZXJhdG9yT3JpZ2luIG9yaWdpbikKK3sKKyAgICBz
d2l0Y2ggKG9yaWdpbikgeworICAgIGNhc2UgVUlURVJfU1RBUlQ6CisgICAgICAgIHJldHVybiBp
dGVyYXRvci0+c3RhcnQ7CisgICAgY2FzZSBVSVRFUl9DVVJSRU5UOgorICAgICAgICByZXR1cm4g
aXRlcmF0b3ItPmluZGV4OworICAgIGNhc2UgVUlURVJfTElNSVQ6CisgICAgICAgIHJldHVybiBp
dGVyYXRvci0+bGltaXQ7CisgICAgY2FzZSBVSVRFUl9aRVJPOgorICAgICAgICByZXR1cm4gMDsK
KyAgICBjYXNlIFVJVEVSX0xFTkdUSDoKKyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT5sZW5ndGg7
CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBVX1NFTlRJTkVM
OworfQorCitzdGF0aWMgaW50MzJfdCBtb3ZlTGF0aW4xKFVDaGFySXRlcmF0b3IqIGl0ZXJhdG9y
LCBpbnQzMl90IGRlbHRhLCBVQ2hhckl0ZXJhdG9yT3JpZ2luIG9yaWdpbikKK3sKKyAgICByZXR1
cm4gaXRlcmF0b3ItPmluZGV4ID0gZ2V0SW5kZXhMYXRpbjEoaXRlcmF0b3IsIG9yaWdpbikgKyBk
ZWx0YTsKK30KKworc3RhdGljIFVCb29sIGhhc05leHRMYXRpbjEoVUNoYXJJdGVyYXRvciogaXRl
cmF0b3IpCit7CisgICAgcmV0dXJuIGl0ZXJhdG9yLT5pbmRleCA8IGl0ZXJhdG9yLT5saW1pdDsK
K30KKworc3RhdGljIFVCb29sIGhhc1ByZXZpb3VzTGF0aW4xKFVDaGFySXRlcmF0b3IqIGl0ZXJh
dG9yKQoreworICAgIHJldHVybiBpdGVyYXRvci0+aW5kZXggPiBpdGVyYXRvci0+c3RhcnQ7Cit9
CisKK3N0YXRpYyBVQ2hhcjMyIGN1cnJlbnRMYXRpbjEoVUNoYXJJdGVyYXRvciogaXRlcmF0b3Ip
Cit7CisgICAgQVNTRVJUKGl0ZXJhdG9yLT5pbmRleCA+PSBpdGVyYXRvci0+c3RhcnQpOworICAg
IGlmIChpdGVyYXRvci0+aW5kZXggPj0gaXRlcmF0b3ItPmxpbWl0KQorICAgICAgICByZXR1cm4g
VV9TRU5USU5FTDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgTENoYXIqPihpdGVyYXRv
ci0+Y29udGV4dClbaXRlcmF0b3ItPmluZGV4XTsKK30KKworc3RhdGljIFVDaGFyMzIgbmV4dExh
dGluMShVQ2hhckl0ZXJhdG9yKiBpdGVyYXRvcikKK3sKKyAgICBBU1NFUlQoaXRlcmF0b3ItPmlu
ZGV4ID49IGl0ZXJhdG9yLT5zdGFydCk7CisgICAgaWYgKGl0ZXJhdG9yLT5pbmRleCA+PSBpdGVy
YXRvci0+bGltaXQpCisgICAgICAgIHJldHVybiBVX1NFTlRJTkVMOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxjb25zdCBMQ2hhcio+KGl0ZXJhdG9yLT5jb250ZXh0KVtpdGVyYXRvci0+aW5kZXgr
K107Cit9CisKK3N0YXRpYyBVQ2hhcjMyIHByZXZpb3VzTGF0aW4xKFVDaGFySXRlcmF0b3IqIGl0
ZXJhdG9yKQoreworICAgIGlmIChpdGVyYXRvci0+aW5kZXggPD0gaXRlcmF0b3ItPnN0YXJ0KQor
ICAgICAgICByZXR1cm4gVV9TRU5USU5FTDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qg
TENoYXIqPihpdGVyYXRvci0+Y29udGV4dClbLS1pdGVyYXRvci0+aW5kZXhdOworfQorCitzdGF0
aWMgVUNoYXJJdGVyYXRvciBjcmVhdGVMYXRpbjFJdGVyYXRvcihjb25zdCBMQ2hhciogY2hhcmFj
dGVycywgaW50IGxlbmd0aCkKK3sKKyAgICBVQ2hhckl0ZXJhdG9yIGl0ZXJhdG9yOworICAgIGl0
ZXJhdG9yLmNvbnRleHQgPSBjaGFyYWN0ZXJzOworICAgIGl0ZXJhdG9yLmxlbmd0aCA9IGxlbmd0
aDsKKyAgICBpdGVyYXRvci5zdGFydCA9IDA7CisgICAgaXRlcmF0b3IuaW5kZXggPSAwOworICAg
IGl0ZXJhdG9yLmxpbWl0ID0gbGVuZ3RoOworICAgIGl0ZXJhdG9yLnJlc2VydmVkRmllbGQgPSAw
OworICAgIGl0ZXJhdG9yLmdldEluZGV4ID0gZ2V0SW5kZXhMYXRpbjE7CisgICAgaXRlcmF0b3Iu
bW92ZSA9IG1vdmVMYXRpbjE7CisgICAgaXRlcmF0b3IuaGFzTmV4dCA9IGhhc05leHRMYXRpbjE7
CisgICAgaXRlcmF0b3IuaGFzUHJldmlvdXMgPSBoYXNQcmV2aW91c0xhdGluMTsKKyAgICBpdGVy
YXRvci5jdXJyZW50ID0gY3VycmVudExhdGluMTsKKyAgICBpdGVyYXRvci5uZXh0ID0gbmV4dExh
dGluMTsKKyAgICBpdGVyYXRvci5wcmV2aW91cyA9IHByZXZpb3VzTGF0aW4xOworICAgIGl0ZXJh
dG9yLnJlc2VydmVkRm4gPSBudWxscHRyOworICAgIGl0ZXJhdG9yLmdldFN0YXRlID0gbnVsbHB0
cjsKKyAgICBpdGVyYXRvci5zZXRTdGF0ZSA9IG51bGxwdHI7CisgICAgcmV0dXJuIGl0ZXJhdG9y
OworfQorCitzdGF0aWMgVUNoYXJJdGVyYXRvciBjcmVhdGVJdGVyYXRvcihTdHJpbmdWaWV3IHN0
cmluZykKK3sKKyAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gY3JlYXRl
TGF0aW4xSXRlcmF0b3Ioc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgoKSk7Cisg
ICAgVUNoYXJJdGVyYXRvciBpdGVyYXRvcjsKKyAgICB1aXRlcl9zZXRTdHJpbmcoJml0ZXJhdG9y
LCBzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgoKSk7CisgICAgcmV0dXJuIGl0
ZXJhdG9yOworfQorCitpbnQgQ29sbGF0b3I6OmNvbGxhdGUoU3RyaW5nVmlldyBhLCBTdHJpbmdW
aWV3IGIpIGNvbnN0Cit7CisgICAgVUNoYXJJdGVyYXRvciBpdGVyYXRvckEgPSBjcmVhdGVJdGVy
YXRvcihhKTsKKyAgICBVQ2hhckl0ZXJhdG9yIGl0ZXJhdG9yQiA9IGNyZWF0ZUl0ZXJhdG9yKGIp
OworICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIGludCByZXN1bHQg
PSB1Y29sX3N0cmNvbGxJdGVyKG1fY29sbGF0b3IsICZpdGVyYXRvckEsICZpdGVyYXRvckIsICZz
dGF0dXMpOworICAgIEFTU0VSVChVX1NVQ0NFU1Moc3RhdHVzKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworc3RhdGljIFVDaGFySXRlcmF0b3IgY3JlYXRlSXRlcmF0b3JVVEY4KGNvbnN0IGNo
YXIqIHN0cmluZykKK3sKKyAgICBVQ2hhckl0ZXJhdG9yIGl0ZXJhdG9yOworICAgIHVpdGVyX3Nl
dFVURjgoJml0ZXJhdG9yLCBzdHJpbmcsIHN0cmxlbihzdHJpbmcpKTsKKyAgICByZXR1cm4gaXRl
cmF0b3I7Cit9CisKK2ludCBDb2xsYXRvcjo6Y29sbGF0ZVVURjgoY29uc3QgY2hhciogYSwgY29u
c3QgY2hhciogYikgY29uc3QKK3sKKyAgICBVQ2hhckl0ZXJhdG9yIGl0ZXJhdG9yQSA9IGNyZWF0
ZUl0ZXJhdG9yVVRGOChhKTsKKyAgICBVQ2hhckl0ZXJhdG9yIGl0ZXJhdG9yQiA9IGNyZWF0ZUl0
ZXJhdG9yVVRGOChiKTsKKyAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAg
ICBpbnQgcmVzdWx0ID0gdWNvbF9zdHJjb2xsSXRlcihtX2NvbGxhdG9yLCAmaXRlcmF0b3JBLCAm
aXRlcmF0b3JCLCAmc3RhdHVzKTsKKyAgICBBU1NFUlQoVV9TVUNDRVNTKHN0YXR1cykpOworICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUveG1sL1hTTFRVbmljb2RlU29ydC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwv
WFNMVFVuaWNvZGVTb3J0LmNwcAppbmRleCBhODUzNzM0MGEyOTVkNGZmOGEyNGEwYmNiYjI3YmQ0
Y2ZiMGUwNmMwLi4zNjdiODZiNjQ4YjllZDc2NDg3NzQyMWQyMGRkODEwZTAwMDNhODEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFVuaWNvZGVTb3J0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS94bWwvWFNMVFVuaWNvZGVTb3J0LmNwcApAQCAtMzMsNyArMzMsNiBAQAogCiAj
aW5jbHVkZSA8bGlieHNsdC90ZW1wbGF0ZXMuaD4KICNpbmNsdWRlIDxsaWJ4c2x0L3hzbHR1dGls
cy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi91bmlj
b2RlL0NvbGxhdG9yLmg+CiAKICNpZiBQTEFURk9STShNQUMpCkBAIC0xNjIsMTAgKzE2MSw5IEBA
IHZvaWQgeHNsdFVuaWNvZGVTb3J0RnVuY3Rpb24oeHNsdFRyYW5zZm9ybUNvbnRleHRQdHIgY3R4
dCwgeG1sTm9kZVB0ciAqc29ydHMsIGluCiAKICAgICAvLyBXZSBhcmUgcGFzc2luZyBhIGxhbmd1
YWdlIGlkZW50aWZpZXIgdG8gYSBmdW5jdGlvbiB0aGF0IGV4cGVjdHMgYSBsb2NhbGUgaWRlbnRp
Zmllci4KICAgICAvLyBUaGUgaW1wbGVtZW50YXRpb24gb2YgQ29sbGF0b3Igc2hvdWxkIGJlIGxl
bmllbnQsIGFuZCBhY2NlcHQgYm90aCAiZW4tVVMiIGFuZCAiZW5fVVMiLCBmb3IgZXhhbXBsZS4K
LSAgICAvLyBUaGlzIGxldHMgYW4gYXV0aG9yIHRvIHJlYWxseSBzcGVjaWZ5IHNvcnRpbmcgcnVs
ZXMsIGUuZy4gImRlX0RFQGNvbGxhdGlvbj1waG9uZWJvb2siLCB3aGljaCBpc24ndAorICAgIC8v
IFRoaXMgbGV0cyBhbiBhdXRob3Igc3BlY2lmeSBzb3J0aW5nIHJ1bGVzLCBlLmcuICJkZV9ERUBj
b2xsYXRpb249cGhvbmVib29rIiwgd2hpY2ggaXNuJ3QKICAgICAvLyBwb3NzaWJsZSB3aXRoIGxh
bmd1YWdlIGFsb25lLgotICAgIENvbGxhdG9yIGNvbGxhdG9yKGNvbXAtPmhhc19sYW5nID8gKGNv
bnN0IGNoYXIqKWNvbXAtPmxhbmcgOiAiZW4iKTsKLSAgICBjb2xsYXRvci5zZXRPcmRlckxvd2Vy
Rmlyc3QoY29tcC0+bG93ZXJfZmlyc3QpOworICAgIENvbGxhdG9yIGNvbGxhdG9yKGNvbXAtPmhh
c19sYW5nID8gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oY29tcC0+bGFuZykgOiAiZW4i
LCBjb21wLT5sb3dlcl9maXJzdCk7CiAKICAgICAvKiBTaGVsbCdzIHNvcnQgb2Ygbm9kZS1zZXQg
Ki8KICAgICBmb3IgKGluY3IgPSBsZW4gLyAyOyBpbmNyID4gMDsgaW5jciAvPSAyKSB7CkBAIC0x
OTUsMTEgKzE5Myw4IEBAIHZvaWQgeHNsdFVuaWNvZGVTb3J0RnVuY3Rpb24oeHNsdFRyYW5zZm9y
bUNvbnRleHRQdHIgY3R4dCwgeG1sTm9kZVB0ciAqc29ydHMsIGluCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdHNbaiArIGluY3JdLT5mbG9hdHZhbCkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0c3QgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB0
c3QgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIFN0cmluZyBzdHIxID0gU3RyaW5nOjpmcm9tVVRGOCgoY29uc3QgY2hhciopcmVzdWx0
c1tqXS0+c3RyaW5ndmFsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdHIyID0g
U3RyaW5nOjpmcm9tVVRGOCgoY29uc3QgY2hhciopcmVzdWx0c1tqICsgaW5jcl0tPnN0cmluZ3Zh
bCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0c3QgPSBjb2xsYXRvci5jb2xsYXRlKHN0cjEu
ZGVwcmVjYXRlZENoYXJhY3RlcnMoKSwgc3RyMS5sZW5ndGgoKSwgc3RyMi5kZXByZWNhdGVkQ2hh
cmFjdGVycygpLCBzdHIyLmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHRzdCA9IGNvbGxh
dG9yLmNvbGxhdGVVVEY4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHJlc3VsdHNbal0t
PnN0cmluZ3ZhbCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHJlc3VsdHNbaiArIGlu
Y3JdLT5zdHJpbmd2YWwpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGRlc2NlbmRpbmcpCiAg
ICAgICAgICAgICAgICAgICAgICAgICB0c3QgPSAtdHN0OwogICAgICAgICAgICAgICAgIH0KQEAg
LTI1MCwxMSArMjQ1LDggQEAgdm9pZCB4c2x0VW5pY29kZVNvcnRGdW5jdGlvbih4c2x0VHJhbnNm
b3JtQ29udGV4dFB0ciBjdHh0LCB4bWxOb2RlUHRyICpzb3J0cywgaW4KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXNbaiArIGluY3JdLT5mbG9hdHZhbCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdCA9IDE7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UgdHN0ID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHN0cjEg
PSBTdHJpbmc6OmZyb21VVEY4KChjb25zdCBjaGFyKilyZXNbal0tPnN0cmluZ3ZhbCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdHIyID0gU3RyaW5nOjpmcm9tVVRG
OCgoY29uc3QgY2hhciopcmVzW2ogKyBpbmNyXS0+c3RyaW5ndmFsKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHN0ID0gY29sbGF0b3IuY29sbGF0ZShzdHIxLmRlcHJlY2F0ZWRD
aGFyYWN0ZXJzKCksIHN0cjEubGVuZ3RoKCksIHN0cjIuZGVwcmVjYXRlZENoYXJhY3RlcnMoKSwg
c3RyMi5sZW5ndGgoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0c3QgPSBjb2xsYXRvci5jb2xsYXRlVVRGOChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIq
PihyZXNbal0tPnN0cmluZ3ZhbCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHJlc1tq
ICsgaW5jcl0tPnN0cmluZ3ZhbCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChk
ZXNjKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c3QgPSAtdHN0OwogICAgICAg
ICAgICAgICAgICAgICAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>223677</attachid>
            <date>2014-02-09 22:58:59 -0800</date>
            <delta_ts>2014-02-09 23:25:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-128517-20140209225909.patch</filename>
            <type>text/plain</type>
            <size>25096</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYzNzEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
MzEwNmU5ODU1YzM1YmViYjVmNTNiMmJhZWRmMTAzZjExYmU5YzUyLi43MDM3OTEzNjZmZTM1ZWRh
OGU4MzdjODhkZWMzYWJkZWFlOTBkODJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNSBAQAorMjAxNC0wMi0wOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgU3RvcCB1c2luZyBTdHJpbmc6OmRlcHJlY2F0ZWRDaGFyYWN0ZXJzIHRvIGNhbGwg
V1RGOjpDb2xsYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTI4NTE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OnN0cmlu
Z1Byb3RvRnVuY0xvY2FsZUNvbXBhcmUpOiBVc2UgdGhlIGRlZmF1bHQgY29uc3RydWN0b3IgZm9y
IENvbGxhdG9yLCB3aGljaCBub3cKKyAgICAgICAgZ2l2ZXMgdGhlIGRlZmF1bHQgbG9jYWxlIGNv
bGxhdGlvbiBydWxlcy4gVXNlIHRoZSBuZXcgYXJndW1lbnRzIGZvciBDb2xsYXRvcjo6Y29sbGF0
ZSwgd2hpY2gKKyAgICAgICAgYXJlIG5vdyBTdHJpbmdWaWV3LiBUaGVzZSB0d28gY2hhbmdlcyB0
b2dldGhlciBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIGEgc2VwYXJhdGUgaGVscGVyIGZ1bmN0aW9u
LgorCiAyMDE0LTAyLTA4ICBNYXJrIFJvd2UgIDxtcm93ZUBhcHBsZS5jb20+CiAKICAgICAgICAg
PGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEyODQ1Mj4gRG9uJ3QgZHVwbGljYXRlIHRoZSBsaXN0IG9m
IGlucHV0IGZpbGVzIGZvciBwb3N0cHJvY2Vzcy1oZWFkZXJzLnNoCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGQxYmM4MjQxOTY3
YWUzOTZhYmMyYjg4NTg3NGI1MjYxZTAyYjkyZjguLjRlOWI3MzJhNWY2NWFlOTY2YjE2ZTc0ZjM1
Zjg2NjNmOWZlYTMxYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTYgQEAKKzIwMTQtMDItMDkgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgdXNpbmcgU3RyaW5nOjpkZXBy
ZWNhdGVkQ2hhcmFjdGVycyB0byBjYWxsIFdURjo6Q29sbGF0b3IKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODUxNworCisgICAgICAgIFdURiBwYXNz
ZXMgSUNV4oCZcyBkZXByZWNhdGVkIFVMT0NfUkVRVUVTVEVEX0xPQ0FMRSB0byB1Y29sX2dldExv
Y2FsZUJ5VHlwZSgpCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzE1MTgzMzkwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBmaXhlcyBi
b3RoIGJ1Z3MgYWJvdmUgYnkgcmV3b3JraW5nIFdURjo6Q29sbGF0b3IuCisKKyAgICAgICAgKiB3
dGYvdW5pY29kZS9Db2xsYXRvci5oOiBGaXhlZCBmb3JtYXR0aW5nLiBHb3QgcmlkIG9mIHRoZSBD
b2xsYXRvcjo6UmVzdWx0IHR5cGUsCisgICAgICAgIHNpbmNlIHRoZSBjb2xsYXRvciB1c2VzIHRo
ZSBzYW1lIHJldHVybiB2YWx1ZSBzY2hlbWUgYXMgc3RyY21wIGFuZCBhcyBJQ1U7IGFuIGludAor
ICAgICAgICB3aWxsIGRvIGZvciB0aGUgcmV0dXJuIHR5cGUuIFNpbXBsaWZpZWQgdGhlIHN1cHBv
cnQgZm9yIFVDT05GSUdfTk9fQ09MTEFUSU9OIGJ5CisgICAgICAgIHVzaW5nIGEgc2VwYXJhdGUg
Y29weSBvZiB0aGUgY2xhc3MgZGVmaW5pdGlvbi4gKFdlIHNob3VsZCBjaGVjayBpZiBhbnlvbmUg
bmVlZHMKKyAgICAgICAgVUNPTkZJR19OT19DT0xMQVRJT04gc3VwcG9ydCwgYW5kIHJlbW92ZSBp
dCBpZiBub3QuKSBDaGFuZ2VkIHRoZSBsb3dlci1maXJzdCBmbGFnCisgICAgICAgIGZyb20gYSBz
ZXBhcmF0ZSBmdW5jdGlvbiB0byBhIGNvbnN0cnVjdG9yIGFyZ3VtZW50LiBDaGFuZ2VkIHRoZSBh
cmd1bWVudHMgdG8KKyAgICAgICAgdGhlIGNvbGxhdGUgZnVuY3Rpb24gdG8gU3RyaW5nVmlldy4g
QWRkZWQgYSBjb2xsYXRlIFVURjggZnVuY3Rpb24uIENoYW5nZWQgdGhlCisgICAgICAgIG1fY29s
bGF0ZSBkYXRhIG1lbWJlciB0byBubyBsb25nZXIgYmUgbXV0YWJsZSBzaW5jZSB3ZSBubyBsb25n
ZXIgYWxsb2NhdGUgaXQgbGF6aWx5LgorCisgICAgICAgICogd3RmL3VuaWNvZGUvQ29sbGF0b3JE
ZWZhdWx0LmNwcDoKKyAgICAgICAgKFdURjo6Q29sbGF0b3I6OmNvbGxhdGUpOiBSZXdyb3RlIHRv
IGJlIHNpbXBsZXIuCisgICAgICAgIChXVEY6OkNvbGxhdG9yOjpjb2xsYXRlVVRGOCk6IEFkZGVk
LiBDb252ZXJ0cyBmcm9tIFVURi04IHRvIGEgU3RyaW5nIGFuZCB0aGVuIGNhbGxzCisgICAgICAg
IHRoZSBjb2xsYXRlIGZ1bmN0aW9uIGFib3ZlLgorCisgICAgICAgICogd3RmL3VuaWNvZGUvaWN1
L0NvbGxhdG9ySUNVLmNwcDogQWRkZWQgYSBGSVhNRSBhYm91dCB0aGUgZmFjdCB0aGF0IHRoaXMg
ZmlsZQorICAgICAgICBoYXMgdGhlIHdyb25nIG5hbWUgYW5kIGxvY2F0aW9uLiBTaW5jZSB3ZSBh
bHdheXMgdXNlIElDVSwgdGhlcmUncyBubyBuZWVkIHRvIG1lbnRpb24KKyAgICAgICAgaXQgaW4g
dGhlIGZpbGUgbmFtZS4KKyAgICAgICAgKFdURjo6Y29weUFTQ0lJU3RyaW5nKTogQWRkZWQuCisg
ICAgICAgIChXVEY6OmNvcHlEZWZhdWx0TG9jYWxlKTogQWRkZWQuCisgICAgICAgIChXVEY6OnJl
c29sdmVEZWZhdWx0TG9jYWxlKTogQWRkZWQuIE1hcHMgbnVsbCBsb2NhbGUgdG8gYSBkZWZhdWx0
IG9uIE1hYyBhbmQgaU9TLAorICAgICAgICBzaW5jZSBvbiB0aG9zZSBwbGF0Zm9ybXMgSUNVIGRv
ZXMgbm90IHVzZSB0aGUgY29ycmVjdCBkZWZhdWx0IGxvY2FsZSB3aGVuIHBhc3NlZCBudWxsLgor
ICAgICAgICAoV1RGOjpsb2NhbGVzTWF0Y2gpOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q29sbGF0
b3I6OkNvbGxhdG9yKTogTW92ZWQgbW9zdCBvZiB0aGUgY29kZSBmcm9tIGNyZWF0ZUNvbGxhdG9y
IGhlcmUuCisgICAgICAgIFNpbXBsaWZpZWQgaXQgYnkgc3RvcmluZyB0aGUgY29sbGF0b3IgY29u
ZmlndXJhdGlvbiBhbG9uZyB3aXRoIHRoZSBjb2xsYXRvciBpbiBnbG9iYWxzLgorICAgICAgICAo
V1RGOjpDb2xsYXRvcjo6fkNvbGxhdG9yKTogTW92ZWQgbW9zdCBvZiB0aGUgY29kZSBmcm9tIHJl
bGVhc2VDb2xsYXRvciBoZXJlLgorICAgICAgICBVc2Ugc3RkOjptb3ZlIHRvIG1ha2UgdGhlIHRy
YW5zZmVycyBvZiBvd25lcnNoaXAgY2xlYXJlci4KKyAgICAgICAgKFdURjo6Z2V0SW5kZXhMYXRp
bjEpOiBBZGRlZC4KKyAgICAgICAgKFdURjo6bW92ZUxhdGluMSk6IEFkZGVkLgorICAgICAgICAo
V1RGOjpoYXNOZXh0TGF0aW4xKTogQWRkZWQuCisgICAgICAgIChXVEY6Omhhc1ByZXZpb3VzTGF0
aW4xKTogQWRkZWQuCisgICAgICAgIChXVEY6OmN1cnJlbnRMYXRpbjEpOiBBZGRlZC4KKyAgICAg
ICAgKFdURjo6bmV4dExhdGluMSk6IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmV2aW91c0xhdGlu
MSk6IEFkZGVkLgorICAgICAgICAoV1RGOjpjcmVhdGVMYXRpbjFJdGVyYXRvcik6IEFkZGVkLiBV
c2VzIHRoZSBmdW5jdGlvbnMgYWJvdmUgdG8gbWFrZSBhIFVDaGFySXRlcmF0b3IKKyAgICAgICAg
dGhhdCB3b3JrcyBmb3IgYSBXVEY6OlN0cmluZ1ZpZXctc3R5bGUgTGF0aW4tMSBzdHJpbmcuCisg
ICAgICAgIChXVEY6OmNyZWF0ZUl0ZXJhdG9yKTogQWRkZWQuIFVzZXMgZWl0aGVyIGNyZWF0ZUxh
dGluMUl0ZXJhdG9yIG9yIHVpdGVyX3NldFN0cmluZyB0bworICAgICAgICBtYWtlIGEgVUNoYXJJ
dGVyYXRvciB0aGF0IHdvcmtzIGZvciBhIFdURjo6U3RyaW5nVmlldy4KKyAgICAgICAgKFdURjo6
Q29sbGF0b3I6OmNvbGxhdGUpOiBDaGFuZ2VkIHRvIHVzZSB1Y29sX3N0cmNvbGxJdGVyLgorICAg
ICAgICAoV1RGOjpjcmVhdGVJdGVyYXRvclVURjgpOiBBZGRlZC4gVXNlcyB1aXRlcl9zZXRVVEY4
LgorICAgICAgICAoV1RGOjpDb2xsYXRvcjo6Y29sbGF0ZVVURjgpOiBBZGRlZC4gTGlrZSBjb2xs
YXRlLCBidXQgZm9yIG51bGwtdGVybWluYXRlZCBVVEYtOCBzdHJpbmdzLgorCiAyMDE0LTAyLTA4
ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBDaGFuZ2UgVGV4dEl0
ZXJhdG9yIHRvIHVzZSBTdHJpbmdWaWV3LCBwcmVwYXJpbmcgdG8gd2VhbiBpdCBmcm9tIGRlcHJl
Y2F0ZWRDaGFyYWN0ZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDI2NjU5NWVlOWM2ZmZlMDkyYmNkMThiNmNm
NmU1M2VjMmJjMjkzZS4uNzRlMzhiZjQxMDBjYmFjZjFhNjNlY2E3YzMyMzI0ZDQ1M2JkNTUyMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE0LTAyLTA5ICBEYXJpbiBBZGxlciAgPGRh
cmluQGFwcGxlLmNvbT4KKworICAgICAgICBTdG9wIHVzaW5nIFN0cmluZzo6ZGVwcmVjYXRlZENo
YXJhY3RlcnMgdG8gY2FsbCBXVEY6OkNvbGxhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjg1MTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIHhtbC9YU0xUVW5pY29kZVNvcnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6eHNsdFVuaWNvZGVTb3J0RnVuY3Rpb24pOiBDcmVhdGUgdGhlIGNvbGxhdG9y
IGluIGEgc2luZ2xlIGxpbmUgdXNpbmcgdGhlCisgICAgICAgIG5ldyBjb25zdHJ1Y3RvciB0aGF0
IHRha2VzIGEgc2hvdWxkU29ydExvd2VyY2FzZUZpcnN0IGJvb2xlYW4uIFVzZSB0aGUgbmV3Cisg
ICAgICAgIGNvbGxhdGVVVEY4IGZ1bmN0aW9uIGluc3RlYWQgb2YgdXBjb252ZXJ0aW5nIFVURi04
IHN0cmluZ3MgdG8gVVRGLTE2IGFzIHRoZSBvbGQgY29kZSBkaWQuCisKIDIwMTQtMDItMDggIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIENoYW5nZSBUZXh0SXRlcmF0
b3IgdG8gdXNlIFN0cmluZ1ZpZXcsIHByZXBhcmluZyB0byB3ZWFuIGl0IGZyb20gZGVwcmVjYXRl
ZENoYXJhY3RlcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cmluZ1Byb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQ
cm90b3R5cGUuY3BwCmluZGV4IGVmY2M0MGQ2NjczODdkZjA5NTU4MzUyODJmYTczYzdjMTBjNmYz
YTIuLmU2M2FiOWIwZjZlNTljZmMwZWVjODhiOTE1ZDg3ZWU1OTQwZjQ4NjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcApAQCAtNDEs
NiArNDEsNyBAQAogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUgPHd0Zi9BU0NJ
SUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdWaWV3Lmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ29sbGF0b3IuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIFdURjsKQEAgLTIzNSwxMyArMjM2LDcgQEAgc3RhdGljIGlubGluZSBTdHJp
bmcgc3Vic3RpdHV0ZUJhY2tyZWZlcmVuY2VzKGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQsIGNv
bnN0IFMKICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGxv
Y2FsZUNvbXBhcmUoY29uc3QgU3RyaW5nJiBhLCBjb25zdCBTdHJpbmcmIGIpCi17Ci0gICAgcmV0
dXJuIENvbGxhdG9yOjp1c2VyRGVmYXVsdCgpLT5jb2xsYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgOjpVQ2hhcio+KGEuZGVwcmVjYXRlZENoYXJhY3RlcnMoKSksIGEubGVuZ3RoKCksIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgOjpVQ2hhcio+KGIuZGVwcmVjYXRlZENoYXJhY3RlcnMoKSksIGIu
bGVuZ3RoKCkpOwotfQotCiBzdHJ1Y3QgU3RyaW5nUmFuZ2UgewotcHVibGljOgogICAgIFN0cmlu
Z1JhbmdlKGludCBwb3MsIGludCBsZW4pCiAgICAgICAgIDogcG9zaXRpb24ocG9zKQogICAgICAg
ICAsIGxlbmd0aChsZW4pCkBAIC0xMjk5LDcgKzEyOTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0xvY2FsZUNvbXBhcmUoRXhlY1N0YXRlKiBleGVjKQog
ICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKIAog
ICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKGxvY2FsZUNvbXBhcmUocywgYTAudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoQ29sbGF0b3Io
KS5jb2xsYXRlKHMsIGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpKTsKIH0KIAogRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNCaWcoRXhlY1N0YXRlKiBl
eGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdW5pY29kZS9Db2xsYXRvci5oIGIvU291
cmNlL1dURi93dGYvdW5pY29kZS9Db2xsYXRvci5oCmluZGV4IDI3ZDJkMjdkYjIxZjU0ZTRkYmZh
M2U4YTQxNzdmYjc3MDU4YTczODguLjY1Mzk2OWQyNWExMjQ0OGM4ODEwY2ZmYTc5NjY4OTM2NDEx
NzQyZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvQ29sbGF0b3IuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL0NvbGxhdG9yLmgKQEAgLTMwLDM2ICszMCw0NSBAQAog
I2RlZmluZSBXVEZfQ29sbGF0b3JfaAogCiAjaW5jbHVkZSA8dW5pY29kZS91Y29uZmlnLmg+Ci0j
aW5jbHVkZSA8dW5pY29kZS91dHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
LSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIHN0cnVjdCBVQ29sbGF0b3I7CiAKIG5hbWVzcGFj
ZSBXVEYgewogCi0gICAgY2xhc3MgQ29sbGF0b3IgewotICAgICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShDb2xsYXRvcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAg
ICAgICAgZW51bSBSZXN1bHQgeyBFcXVhbCA9IDAsIEdyZWF0ZXIgPSAxLCBMZXNzID0gLTEgfTsK
K2NsYXNzIFN0cmluZ1ZpZXc7CiAKLSAgICAgICAgV1RGX0VYUE9SVF9QUklWQVRFIENvbGxhdG9y
KGNvbnN0IGNoYXIqIGxvY2FsZSk7IC8vIFBhcnNpbmcgaXMgbGVuaWVudDsgZS5nLiBsYW5ndWFn
ZSBpZGVudGlmaWVycyAoc3VjaCBhcyAiZW4tVVMiKSBhcmUgYWNjZXB0ZWQsIHRvby4KLSAgICAg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIH5Db2xsYXRvcigpOwotICAgICAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBzZXRPcmRlckxvd2VyRmlyc3QoYm9vbCk7CisjaWYgVUNPTkZJR19OT19DT0xM
QVRJT04KIAotICAgICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxDb2xsYXRvcj4gdXNlckRlZmF1bHQoKTsKK2NsYXNzIENvbGxhdG9yIHsKK3B1YmxpYzoKKyAg
ICBleHBsaWNpdCBDb2xsYXRvcihjb25zdCBjaGFyKiA9IG51bGxwdHIsIGJvb2wgPSBmYWxzZSkg
eyB9CiAKLSAgICAgICAgV1RGX0VYUE9SVF9QUklWQVRFIFJlc3VsdCBjb2xsYXRlKGNvbnN0IDo6
VUNoYXIqLCBzaXplX3QsIGNvbnN0IDo6VUNoYXIqLCBzaXplX3QpIGNvbnN0OworICAgIFdURl9F
WFBPUlRfUFJJVkFURSBzdGF0aWMgaW50IGNvbGxhdGUoU3RyaW5nVmlldywgU3RyaW5nVmlldyk7
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBpbnQgY29sbGF0ZVVURjgoY29uc3QgY2hh
ciosIGNvbnN0IGNoYXIqKTsKK307CisKKyNlbHNlCisKK2NsYXNzIENvbGxhdG9yIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShDb2xsYXRvcik7CitwdWJsaWM6CisgICAgLy8gVGhlIHZhbHVl
IG51bGxwdHIgaXMgYSBzcGVjaWFsIG9uZSBtZWFuaW5nIHRoZSBzeXN0ZW0gZGVmYXVsdCBsb2Nh
bGUuCisgICAgLy8gTG9jYWxlIG5hbWUgcGFyc2luZyBpcyBsZW5pZW50OyBlLmcuIGxhbmd1YWdl
IGlkZW50aWZpZXJzIChzdWNoIGFzICJlbi1VUyIpIGFyZSBhY2NlcHRlZCwgdG9vLgorICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBleHBsaWNpdCBDb2xsYXRvcihjb25zdCBjaGFyKiBsb2NhbGUgPSBu
dWxscHRyLCBib29sIHNob3VsZFNvcnRMb3dlcmNhc2VGaXJzdCA9IGZhbHNlKTsKKyAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgfkNvbGxhdG9yKCk7CisKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgaW50
IGNvbGxhdGUoU3RyaW5nVmlldywgU3RyaW5nVmlldykgY29uc3Q7CisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIGludCBjb2xsYXRlVVRGOChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopIGNvbnN0Owor
Citwcml2YXRlOgorICAgIGNoYXIqIG1fbG9jYWxlOworICAgIGJvb2wgbV9zaG91bGRTb3J0TG93
ZXJjYXNlRmlyc3Q7CisgICAgVUNvbGxhdG9yKiBtX2NvbGxhdG9yOworfTsKIAotICAgIHByaXZh
dGU6Ci0jaWYgIVVDT05GSUdfTk9fQ09MTEFUSU9OCi0gICAgICAgIHZvaWQgY3JlYXRlQ29sbGF0
b3IoKSBjb25zdDsKLSAgICAgICAgdm9pZCByZWxlYXNlQ29sbGF0b3IoKTsKLSAgICAgICAgbXV0
YWJsZSBVQ29sbGF0b3IqIG1fY29sbGF0b3I7CiAjZW5kaWYKLSAgICAgICAgY2hhciogbV9sb2Nh
bGU7Ci0gICAgICAgIGJvb2wgbV9sb3dlckZpcnN0OwotICAgIH07CisKIH0KIAogdXNpbmcgV1RG
OjpDb2xsYXRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvQ29sbGF0b3JE
ZWZhdWx0LmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvQ29sbGF0b3JEZWZhdWx0LmNwcApp
bmRleCBkNTZiYjVhMzhhNDFmODRhYjMxNzU3ZjU3YTNmMWIzZmU5MmUwZGQyLi44MGZjNDYwODNm
Njg4OTU1MmQ1NTRjYzBkNjU0YzRiMDQyMzg0Y2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi91bmljb2RlL0NvbGxhdG9yRGVmYXVsdC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdW5pY29k
ZS9Db2xsYXRvckRlZmF1bHQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw0MSArMzMsMjcgQEAKIAogbmFtZXNwYWNlIFdURiB7
CiAKLUNvbGxhdG9yOjpDb2xsYXRvcihjb25zdCBjaGFyKikKK2ludCBDb2xsYXRvcjo6Y29sbGF0
ZShTdHJpbmdWaWV3IGEsIFN0cmluZ1ZpZXcgYikgY29uc3QKIHsKLX0KLQotQ29sbGF0b3I6On5D
b2xsYXRvcigpCi17Ci19CisgICAgdW5zaWduZWQgY29tbW9uTGVuZ3RoID0gc3RkOjptaW4oYS5s
ZW5ndGgoKSwgYi5sZW5ndGgoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvbW1v
bkxlbmd0aDsgKytpKSB7CisgICAgICAgIGlmIChhW2ldIDwgYltpXSkKKyAgICAgICAgICAgIHJl
dHVybiAtMTsKKyAgICAgICAgaWYgKGFbaV0gPiBiW2ldKQorICAgICAgICAgICAgcmV0dXJuIDE7
CisgICAgfQogCi12b2lkIENvbGxhdG9yOjpzZXRPcmRlckxvd2VyRmlyc3QoYm9vbCkKLXsKLX0K
KyAgICBpZiAoYS5sZW5ndGgoKSA8IGIubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiAtMTsKKyAg
ICBpZiAoYS5sZW5ndGgoKSA+IGIubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiAxOwogCi1zdGQ6
OnVuaXF1ZV9wdHI8Q29sbGF0b3I+IENvbGxhdG9yOjp1c2VyRGVmYXVsdCgpCi17Ci0gICAgcmV0
dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q29sbGF0b3I+KG51bGxwdHIpOworICAgIHJldHVybiAwOwog
fQogCi0vLyBBIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZm9yIHBsYXRmb3JtcyB0aGF0IGxhY2sg
VW5pY29kZS1hd2FyZSBjb2xsYXRpb24uCi1Db2xsYXRvcjo6UmVzdWx0IENvbGxhdG9yOjpjb2xs
YXRlKGNvbnN0IFVDaGFyKiBsaHMsIHNpemVfdCBsaHNMZW5ndGgsIGNvbnN0IFVDaGFyKiByaHMs
IHNpemVfdCByaHNMZW5ndGgpIGNvbnN0CitpbnQgQ29sbGF0b3I6OmNvbGxhdGVVVEY4KGNvbnN0
IGNoYXIqIGEsIGNvbnN0IGNoYXIqIGIpIGNvbnN0CiB7Ci0gICAgaW50IGxtaW4gPSBsaHNMZW5n
dGggPCByaHNMZW5ndGggPyBsaHNMZW5ndGggOiByaHNMZW5ndGg7Ci0gICAgaW50IGwgPSAwOwot
ICAgIHdoaWxlIChsIDwgbG1pbiAmJiAqbGhzID09ICpyaHMpIHsKLSAgICAgICAgbGhzKys7Ci0g
ICAgICAgIHJocysrOwotICAgICAgICBsKys7Ci0gICAgfQotCi0gICAgaWYgKGwgPCBsbWluKQot
ICAgICAgICByZXR1cm4gKCpsaHMgPiAqcmhzKSA/IEdyZWF0ZXIgOiBMZXNzOwotCi0gICAgaWYg
KGxoc0xlbmd0aCA9PSByaHNMZW5ndGgpCi0gICAgICAgIHJldHVybiBFcXVhbDsKLQotICAgIHJl
dHVybiAobGhzTGVuZ3RoID4gcmhzTGVuZ3RoKSA/IEdyZWF0ZXIgOiBMZXNzOworICAgIHJldHVy
biBjb2xsYXRlKFN0cmluZzo6ZnJvbVVURjgoYSksIFN0cmluZzo6ZnJvbVVURjgoYikpOwogfQog
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL2ljdS9Db2xsYXRvcklDVS5j
cHAgYi9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL2ljdS9Db2xsYXRvcklDVS5jcHAKaW5kZXggZTQw
NTliY2RjZmFhOWZjMDJlMTgzMmNkMjIyNzNmMzU2ZGM2ZmY1OS4uM2IyYmIxZjVhM2Y4NjVjMjll
ZWNjYzczOTcwZDBhZDU3NjBhMzgxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdW5pY29k
ZS9pY3UvQ29sbGF0b3JJQ1UuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvaWN1L0Nv
bGxhdG9ySUNVLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjcsMjQgKzI3LDI3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgPHd0Zi91bmljb2RlL0NvbGxhdG9yLmg+CisjaW5jbHVkZSAiQ29sbGF0b3Iu
aCIKKworLy8gRklYTUU6IE1lcmdlIHRoaXMgd2l0aCBDb2xsYXRvckRlZmF1bHQuY3BwIGludG8g
YSBzaW5nbGUgQ29sbGF0b3IuY3BwIHNvdXJjZSBmaWxlLgogCiAjaWYgIVVDT05GSUdfTk9fQ09M
TEFUSU9OCiAKICNpbmNsdWRlIDxtdXRleD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgot
I2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx1bmljb2RlL3Vjb2wuaD4K
LSNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5oPgogCi0jaWYgT1MoREFSV0lOKQotI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KKyNpZiBPUyhEQVJXSU4pICYmIFVTRShDRikKICNpbmNsdWRlIDxD
b3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KICNlbmRpZgogCiBuYW1lc3BhY2UgV1RGIHsKIAogc3RhdGljIFVDb2xsYXRvciogY2FjaGVk
Q29sbGF0b3I7CitzdGF0aWMgY2hhciogY2FjaGVkQ29sbGF0b3JMb2NhbGU7CitzdGF0aWMgYm9v
bCBjYWNoZWRDb2xsYXRvclNob3VsZFNvcnRMb3dlcmNhc2VGaXJzdDsKIAogc3RhdGljIHN0ZDo6
bXV0ZXgmIGNhY2hlZENvbGxhdG9yTXV0ZXgoKQogewpAQCAtNTMsMTA1ICs1NiwyMTEgQEAgc3Rh
dGljIHN0ZDo6bXV0ZXgmIGNhY2hlZENvbGxhdG9yTXV0ZXgoKQogICAgIHN0ZDo6Y2FsbF9vbmNl
KG9uY2VGbGFnLCBbXXsKICAgICAgICAgbXV0ZXggPSBzdGQ6Om1ha2VfdW5pcXVlPHN0ZDo6bXV0
ZXg+KCkucmVsZWFzZSgpOwogICAgIH0pOwotCiAgICAgcmV0dXJuICptdXRleDsKIH0KIAotQ29s
bGF0b3I6OkNvbGxhdG9yKGNvbnN0IGNoYXIqIGxvY2FsZSkKLSAgICA6IG1fY29sbGF0b3IoMCkK
LSAgICAsIG1fbG9jYWxlKGxvY2FsZSA/IHN0cmR1cChsb2NhbGUpIDogMCkKLSAgICAsIG1fbG93
ZXJGaXJzdChmYWxzZSkKKyNpZiAhKE9TKERBUldJTikgJiYgVVNFKENGKSkKKworc3RhdGljIGlu
bGluZSBjb25zdCBjaGFyKiByZXNvbHZlRGVmYXVsdExvY2FsZShjb25zdCBjaGFyKiBsb2NhbGUp
CiB7CisgICAgcmV0dXJuIGxvY2FsZTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPENvbGxhdG9yPiBD
b2xsYXRvcjo6dXNlckRlZmF1bHQoKQotewotI2lmIE9TKERBUldJTikgJiYgVVNFKENGKQotICAg
IC8vIE1hYyBPUyBYIGRvZXNuJ3Qgc2V0IFVOSVggbG9jYWxlIHRvIG1hdGNoIHVzZXItc2VsZWN0
ZWQgb25lLCBzbyBJQ1UgZGVmYXVsdCBkb2Vzbid0IHdvcmsuCi0jaWYgIU9TKElPUykKLSAgICBS
ZXRhaW5QdHI8Q0ZMb2NhbGVSZWY+IGN1cnJlbnRMb2NhbGUgPSBhZG9wdENGKENGTG9jYWxlQ29w
eUN1cnJlbnQoKSk7Ci0gICAgQ0ZTdHJpbmdSZWYgY29sbGF0aW9uT3JkZXIgPSAoQ0ZTdHJpbmdS
ZWYpQ0ZMb2NhbGVHZXRWYWx1ZShjdXJyZW50TG9jYWxlLmdldCgpLCBrQ0ZMb2NhbGVDb2xsYXRv
cklkZW50aWZpZXIpOwotI2Vsc2UKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNvbGxhdGlv
bk9yZGVyUmV0YWluZXIgPSBhZG9wdENGKChDRlN0cmluZ1JlZilDRlByZWZlcmVuY2VzQ29weVZh
bHVlKENGU1RSKCJBcHBsZUNvbGxhdGlvbk9yZGVyIiksIGtDRlByZWZlcmVuY2VzQW55QXBwbGlj
YXRpb24sIGtDRlByZWZlcmVuY2VzQ3VycmVudFVzZXIsIGtDRlByZWZlcmVuY2VzQW55SG9zdCkp
OwotICAgIENGU3RyaW5nUmVmIGNvbGxhdGlvbk9yZGVyID0gY29sbGF0aW9uT3JkZXJSZXRhaW5l
ci5nZXQoKTsKLSNlbmRpZgotICAgIGNoYXIgYnVmWzI1Nl07Ci0gICAgaWYgKCFjb2xsYXRpb25P
cmRlcikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q29sbGF0b3I+KCIiKTsKLSAg
ICBDRlN0cmluZ0dldENTdHJpbmcoY29sbGF0aW9uT3JkZXIsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIGtD
RlN0cmluZ0VuY29kaW5nQVNDSUkpOwotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENvbGxh
dG9yPihidWYpOwogI2Vsc2UKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDb2xsYXRvcj4o
c3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KDApKTsKLSNlbmRpZgotfQogCi1Db2xsYXRvcjo6fkNv
bGxhdG9yKCkKK3N0YXRpYyBpbmxpbmUgY2hhciogY29weUFTQ0lJU3RyaW5nKENGU3RyaW5nUmVm
IHN0cmluZykKIHsKLSAgICByZWxlYXNlQ29sbGF0b3IoKTsKLSAgICBmcmVlKG1fbG9jYWxlKTsK
KyAgICBjaGFyIGJ1ZmZlclsyNTZdOworICAgIGlmICghQ0ZTdHJpbmdHZXRDU3RyaW5nKHN0cmlu
ZywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwga0NGU3RyaW5nRW5jb2RpbmdBU0NJSSkpCisgICAg
ICAgIHJldHVybiBzdHJkdXAoIiIpOworICAgIHJldHVybiBzdHJkdXAoYnVmZmVyKTsKIH0KIAot
dm9pZCBDb2xsYXRvcjo6c2V0T3JkZXJMb3dlckZpcnN0KGJvb2wgbG93ZXJGaXJzdCkKK3N0YXRp
YyBjaGFyKiBjb3B5RGVmYXVsdExvY2FsZSgpCiB7Ci0gICAgbV9sb3dlckZpcnN0ID0gbG93ZXJG
aXJzdDsKKyNpZiAhUExBVEZPUk0oSU9TKQorICAgIHJldHVybiBjb3B5QVNDSUlTdHJpbmcoc3Rh
dGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGTG9jYWxlR2V0VmFsdWUoYWRvcHRDRihDRkxvY2FsZUNv
cHlDdXJyZW50KCkpLmdldCgpLCBrQ0ZMb2NhbGVDb2xsYXRvcklkZW50aWZpZXIpKSk7CisjZWxz
ZQorICAgIC8vIEZJWE1FOiBEb2N1bWVudGF0aW9uIGNsYWltcyB0aGUgY29kZSBhYm92ZSB3b3Vs
ZCB3b3JrIG9uIGlPUyA0LjAgYW5kIGxhdGVyLiBBZnRlciB0ZXN0IHRoYXQgd29ya3MsIHdlIHNo
b3VsZCByZW1vdmUgdGhpcyBhbmQgdXNlIHRoYXQgaW5zdGVhZC4KKyAgICByZXR1cm4gY29weUFT
Q0lJU3RyaW5nKGFkb3B0Q0Yoc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGUHJlZmVyZW5jZXND
b3B5VmFsdWUoQ0ZTVFIoIkFwcGxlQ29sbGF0aW9uT3JkZXIiKSwga0NGUHJlZmVyZW5jZXNBbnlB
cHBsaWNhdGlvbiwga0NGUHJlZmVyZW5jZXNDdXJyZW50VXNlciwga0NGUHJlZmVyZW5jZXNBbnlI
b3N0KSkpLmdldCgpKTsKKyNlbmRpZgogfQogCi1Db2xsYXRvcjo6UmVzdWx0IENvbGxhdG9yOjpj
b2xsYXRlKGNvbnN0IFVDaGFyKiBsaHMsIHNpemVfdCBsaHNMZW5ndGgsIGNvbnN0IFVDaGFyKiBy
aHMsIHNpemVfdCByaHNMZW5ndGgpIGNvbnN0CitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIHJl
c29sdmVEZWZhdWx0TG9jYWxlKGNvbnN0IGNoYXIqIGxvY2FsZSkKIHsKLSAgICBpZiAoIW1fY29s
bGF0b3IpCi0gICAgICAgIGNyZWF0ZUNvbGxhdG9yKCk7CisgICAgaWYgKGxvY2FsZSkKKyAgICAg
ICAgcmV0dXJuIGxvY2FsZTsKKyAgICAvLyBTaW5jZSBpT1MgYW5kIE9TIFggZG9uJ3Qgc2V0IFVO
SVggbG9jYWxlIHRvIG1hdGNoIHRoZSB1c2VyJ3Mgc2VsZWN0ZWQgbG9jYWxlLCB0aGUgSUNVIGRl
ZmF1bHQgbG9jYWxlIGlzIG5vdCB0aGUgcmlnaHQgb25lLgorICAgIC8vIFNvLCBpbnN0ZWFkIG9m
IHBhc3NpbmcgbnVsbCwgd2UgZmV0Y2ggdGhlIG5hbWUgb2YgdGhlIGRlZmF1bHQgbG9jYWxlLgor
ICAgIHN0YXRpYyBjaGFyKiBkZWZhdWx0TG9jYWxlID0gY29weURlZmF1bHRMb2NhbGUoKTsKKyAg
ICByZXR1cm4gZGVmYXVsdExvY2FsZTsKK30KIAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZXN1
bHQ+KHVjb2xfc3RyY29sbChtX2NvbGxhdG9yLCBsaHMsIGxoc0xlbmd0aCwgcmhzLCByaHNMZW5n
dGgpKTsKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIGJvb2wgbG9jYWxlc01hdGNoKGNvbnN0IGNo
YXIqIGEsIGNvbnN0IGNoYXIqIGIpCit7CisgICAgLy8gVHdvIG51bGwgbG9jYWxlcyBhcmUgZXF1
YWwsIG90aGVyIGxvY2FsZXMgYXJlIGNvbXBhcmVkIHdpdGggc3RyY21wLgorICAgIHJldHVybiBh
ID09IGIgfHwgKGEgJiYgYiAmJiAhc3RyY21wKGEsIGIpKTsKIH0KIAotdm9pZCBDb2xsYXRvcjo6
Y3JlYXRlQ29sbGF0b3IoKSBjb25zdAorQ29sbGF0b3I6OkNvbGxhdG9yKGNvbnN0IGNoYXIqIGxv
Y2FsZSwgYm9vbCBzaG91bGRTb3J0TG93ZXJjYXNlRmlyc3QpCiB7Ci0gICAgQVNTRVJUKCFtX2Nv
bGxhdG9yKTsKICAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKIAogICAgIHsK
ICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2soY2FjaGVkQ29sbGF0b3JN
dXRleCgpKTsKLSAgICAgICAgaWYgKGNhY2hlZENvbGxhdG9yKSB7Ci0gICAgICAgICAgICBjb25z
dCBjaGFyKiBjYWNoZWRDb2xsYXRvckxvY2FsZSA9IHVjb2xfZ2V0TG9jYWxlQnlUeXBlKGNhY2hl
ZENvbGxhdG9yLCBVTE9DX1JFUVVFU1RFRF9MT0NBTEUsICZzdGF0dXMpOwotICAgICAgICAgICAg
QVNTRVJUKFVfU1VDQ0VTUyhzdGF0dXMpKTsKLSAgICAgICAgICAgIEFTU0VSVChjYWNoZWRDb2xs
YXRvckxvY2FsZSk7Ci0KLSAgICAgICAgICAgIFVDb2xBdHRyaWJ1dGVWYWx1ZSBjYWNoZWRDb2xs
YXRvckxvd2VyRmlyc3QgPSB1Y29sX2dldEF0dHJpYnV0ZShjYWNoZWRDb2xsYXRvciwgVUNPTF9D
QVNFX0ZJUlNULCAmc3RhdHVzKTsKLSAgICAgICAgICAgIEFTU0VSVChVX1NVQ0NFU1Moc3RhdHVz
KSk7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiBkZWZhdWx0IGxvY2FsZSBpcyBuZXZlciBtYXRj
aGVkLCBiZWNhdXNlIHVjb2xfZ2V0TG9jYWxlQnlUeXBlIHJldHVybnMgdGhlIGFjdHVhbCBvbmUg
dXNlZCwgbm90IDAuCi0gICAgICAgICAgICBpZiAobV9sb2NhbGUgJiYgMCA9PSBzdHJjbXAoY2Fj
aGVkQ29sbGF0b3JMb2NhbGUsIG1fbG9jYWxlKQotICAgICAgICAgICAgICAgICYmICgoVUNPTF9M
T1dFUl9GSVJTVCA9PSBjYWNoZWRDb2xsYXRvckxvd2VyRmlyc3QgJiYgbV9sb3dlckZpcnN0KSB8
fCAoVUNPTF9VUFBFUl9GSVJTVCA9PSBjYWNoZWRDb2xsYXRvckxvd2VyRmlyc3QgJiYgIW1fbG93
ZXJGaXJzdCkpKSB7Ci0gICAgICAgICAgICAgICAgbV9jb2xsYXRvciA9IGNhY2hlZENvbGxhdG9y
OwotICAgICAgICAgICAgICAgIGNhY2hlZENvbGxhdG9yID0gbnVsbHB0cjsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChjYWNoZWRDb2xsYXRvciAm
JiBsb2NhbGVzTWF0Y2goY2FjaGVkQ29sbGF0b3JMb2NhbGUsIGxvY2FsZSkgJiYgY2FjaGVkQ29s
bGF0b3JTaG91bGRTb3J0TG93ZXJjYXNlRmlyc3QgPT0gc2hvdWxkU29ydExvd2VyY2FzZUZpcnN0
KSB7CisgICAgICAgICAgICBtX2NvbGxhdG9yID0gc3RkOjptb3ZlKGNhY2hlZENvbGxhdG9yKTsK
KyAgICAgICAgICAgIG1fbG9jYWxlID0gc3RkOjptb3ZlKGNhY2hlZENvbGxhdG9yTG9jYWxlKTsK
KyAgICAgICAgICAgIG1fc2hvdWxkU29ydExvd2VyY2FzZUZpcnN0ID0gc2hvdWxkU29ydExvd2Vy
Y2FzZUZpcnN0OworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCi0gICAg
bV9jb2xsYXRvciA9IHVjb2xfb3BlbihtX2xvY2FsZSwgJnN0YXR1cyk7CisgICAgbV9jb2xsYXRv
ciA9IHVjb2xfb3BlbihyZXNvbHZlRGVmYXVsdExvY2FsZShsb2NhbGUpLCAmc3RhdHVzKTsKICAg
ICBpZiAoVV9GQUlMVVJFKHN0YXR1cykpIHsKICAgICAgICAgc3RhdHVzID0gVV9aRVJPX0VSUk9S
OwotICAgICAgICBtX2NvbGxhdG9yID0gdWNvbF9vcGVuKCIiLCAmc3RhdHVzKTsgLy8gRmFsbGJh
Y2sgdG8gVW5pY29kZSBDb2xsYXRpb24gQWxnb3JpdGhtLgorICAgICAgICBtX2NvbGxhdG9yID0g
dWNvbF9vcGVuKCIiLCAmc3RhdHVzKTsgLy8gRmFsbCBiYWNrIHRvIFVuaWNvZGUgQ29sbGF0aW9u
IEFsZ29yaXRobS4KICAgICB9CiAgICAgQVNTRVJUKFVfU1VDQ0VTUyhzdGF0dXMpKTsKIAotICAg
IHVjb2xfc2V0QXR0cmlidXRlKG1fY29sbGF0b3IsIFVDT0xfQ0FTRV9GSVJTVCwgbV9sb3dlckZp
cnN0ID8gVUNPTF9MT1dFUl9GSVJTVCA6IFVDT0xfVVBQRVJfRklSU1QsICZzdGF0dXMpOworICAg
IHVjb2xfc2V0QXR0cmlidXRlKG1fY29sbGF0b3IsIFVDT0xfQ0FTRV9GSVJTVCwgc2hvdWxkU29y
dExvd2VyY2FzZUZpcnN0ID8gVUNPTF9MT1dFUl9GSVJTVCA6IFVDT0xfVVBQRVJfRklSU1QsICZz
dGF0dXMpOwogICAgIEFTU0VSVChVX1NVQ0NFU1Moc3RhdHVzKSk7CiAKICAgICB1Y29sX3NldEF0
dHJpYnV0ZShtX2NvbGxhdG9yLCBVQ09MX05PUk1BTElaQVRJT05fTU9ERSwgVUNPTF9PTiwgJnN0
YXR1cyk7CiAgICAgQVNTRVJUKFVfU1VDQ0VTUyhzdGF0dXMpKTsKKworICAgIG1fbG9jYWxlID0g
bG9jYWxlID8gc3RyZHVwKGxvY2FsZSkgOiBudWxscHRyOworICAgIG1fc2hvdWxkU29ydExvd2Vy
Y2FzZUZpcnN0ID0gc2hvdWxkU29ydExvd2VyY2FzZUZpcnN0OwogfQogCi12b2lkIENvbGxhdG9y
OjpyZWxlYXNlQ29sbGF0b3IoKQorQ29sbGF0b3I6On5Db2xsYXRvcigpCiB7CiAgICAgewogICAg
ICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhjYWNoZWRDb2xsYXRvck11dGV4
KCkpOwogICAgICAgICBpZiAoY2FjaGVkQ29sbGF0b3IpCiAgICAgICAgICAgICB1Y29sX2Nsb3Nl
KGNhY2hlZENvbGxhdG9yKTsKLSAgICAgICAgY2FjaGVkQ29sbGF0b3IgPSBtX2NvbGxhdG9yOwot
ICAgICAgICBtX2NvbGxhdG9yID0gbnVsbHB0cjsKKyAgICAgICAgY2FjaGVkQ29sbGF0b3IgPSBz
dGQ6Om1vdmUobV9jb2xsYXRvcik7CisgICAgICAgIGNhY2hlZENvbGxhdG9yTG9jYWxlID0gc3Rk
Ojptb3ZlKG1fbG9jYWxlKTsKKyAgICAgICAgY2FjaGVkQ29sbGF0b3JTaG91bGRTb3J0TG93ZXJj
YXNlRmlyc3QgPSBtX3Nob3VsZFNvcnRMb3dlcmNhc2VGaXJzdDsKICAgICB9CisKKyAgICBmcmVl
KG1fbG9jYWxlKTsKK30KKworc3RhdGljIGludDMyX3QgZ2V0SW5kZXhMYXRpbjEoVUNoYXJJdGVy
YXRvciogaXRlcmF0b3IsIFVDaGFySXRlcmF0b3JPcmlnaW4gb3JpZ2luKQoreworICAgIHN3aXRj
aCAob3JpZ2luKSB7CisgICAgY2FzZSBVSVRFUl9TVEFSVDoKKyAgICAgICAgcmV0dXJuIGl0ZXJh
dG9yLT5zdGFydDsKKyAgICBjYXNlIFVJVEVSX0NVUlJFTlQ6CisgICAgICAgIHJldHVybiBpdGVy
YXRvci0+aW5kZXg7CisgICAgY2FzZSBVSVRFUl9MSU1JVDoKKyAgICAgICAgcmV0dXJuIGl0ZXJh
dG9yLT5saW1pdDsKKyAgICBjYXNlIFVJVEVSX1pFUk86CisgICAgICAgIHJldHVybiAwOworICAg
IGNhc2UgVUlURVJfTEVOR1RIOgorICAgICAgICByZXR1cm4gaXRlcmF0b3ItPmxlbmd0aDsKKyAg
ICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFVfU0VOVElORUw7Cit9
CisKK3N0YXRpYyBpbnQzMl90IG1vdmVMYXRpbjEoVUNoYXJJdGVyYXRvciogaXRlcmF0b3IsIGlu
dDMyX3QgZGVsdGEsIFVDaGFySXRlcmF0b3JPcmlnaW4gb3JpZ2luKQoreworICAgIHJldHVybiBp
dGVyYXRvci0+aW5kZXggPSBnZXRJbmRleExhdGluMShpdGVyYXRvciwgb3JpZ2luKSArIGRlbHRh
OworfQorCitzdGF0aWMgVUJvb2wgaGFzTmV4dExhdGluMShVQ2hhckl0ZXJhdG9yKiBpdGVyYXRv
cikKK3sKKyAgICByZXR1cm4gaXRlcmF0b3ItPmluZGV4IDwgaXRlcmF0b3ItPmxpbWl0OworfQor
CitzdGF0aWMgVUJvb2wgaGFzUHJldmlvdXNMYXRpbjEoVUNoYXJJdGVyYXRvciogaXRlcmF0b3Ip
Cit7CisgICAgcmV0dXJuIGl0ZXJhdG9yLT5pbmRleCA+IGl0ZXJhdG9yLT5zdGFydDsKK30KKwor
c3RhdGljIFVDaGFyMzIgY3VycmVudExhdGluMShVQ2hhckl0ZXJhdG9yKiBpdGVyYXRvcikKK3sK
KyAgICBBU1NFUlQoaXRlcmF0b3ItPmluZGV4ID49IGl0ZXJhdG9yLT5zdGFydCk7CisgICAgaWYg
KGl0ZXJhdG9yLT5pbmRleCA+PSBpdGVyYXRvci0+bGltaXQpCisgICAgICAgIHJldHVybiBVX1NF
TlRJTkVMOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBMQ2hhcio+KGl0ZXJhdG9yLT5j
b250ZXh0KVtpdGVyYXRvci0+aW5kZXhdOworfQorCitzdGF0aWMgVUNoYXIzMiBuZXh0TGF0aW4x
KFVDaGFySXRlcmF0b3IqIGl0ZXJhdG9yKQoreworICAgIEFTU0VSVChpdGVyYXRvci0+aW5kZXgg
Pj0gaXRlcmF0b3ItPnN0YXJ0KTsKKyAgICBpZiAoaXRlcmF0b3ItPmluZGV4ID49IGl0ZXJhdG9y
LT5saW1pdCkKKyAgICAgICAgcmV0dXJuIFVfU0VOVElORUw7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0IExDaGFyKj4oaXRlcmF0b3ItPmNvbnRleHQpW2l0ZXJhdG9yLT5pbmRleCsrXTsK
K30KKworc3RhdGljIFVDaGFyMzIgcHJldmlvdXNMYXRpbjEoVUNoYXJJdGVyYXRvciogaXRlcmF0
b3IpCit7CisgICAgaWYgKGl0ZXJhdG9yLT5pbmRleCA8PSBpdGVyYXRvci0+c3RhcnQpCisgICAg
ICAgIHJldHVybiBVX1NFTlRJTkVMOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBMQ2hh
cio+KGl0ZXJhdG9yLT5jb250ZXh0KVstLWl0ZXJhdG9yLT5pbmRleF07Cit9CisKK3N0YXRpYyBV
Q2hhckl0ZXJhdG9yIGNyZWF0ZUxhdGluMUl0ZXJhdG9yKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJz
LCBpbnQgbGVuZ3RoKQoreworICAgIFVDaGFySXRlcmF0b3IgaXRlcmF0b3I7CisgICAgaXRlcmF0
b3IuY29udGV4dCA9IGNoYXJhY3RlcnM7CisgICAgaXRlcmF0b3IubGVuZ3RoID0gbGVuZ3RoOwor
ICAgIGl0ZXJhdG9yLnN0YXJ0ID0gMDsKKyAgICBpdGVyYXRvci5pbmRleCA9IDA7CisgICAgaXRl
cmF0b3IubGltaXQgPSBsZW5ndGg7CisgICAgaXRlcmF0b3IucmVzZXJ2ZWRGaWVsZCA9IDA7Cisg
ICAgaXRlcmF0b3IuZ2V0SW5kZXggPSBnZXRJbmRleExhdGluMTsKKyAgICBpdGVyYXRvci5tb3Zl
ID0gbW92ZUxhdGluMTsKKyAgICBpdGVyYXRvci5oYXNOZXh0ID0gaGFzTmV4dExhdGluMTsKKyAg
ICBpdGVyYXRvci5oYXNQcmV2aW91cyA9IGhhc1ByZXZpb3VzTGF0aW4xOworICAgIGl0ZXJhdG9y
LmN1cnJlbnQgPSBjdXJyZW50TGF0aW4xOworICAgIGl0ZXJhdG9yLm5leHQgPSBuZXh0TGF0aW4x
OworICAgIGl0ZXJhdG9yLnByZXZpb3VzID0gcHJldmlvdXNMYXRpbjE7CisgICAgaXRlcmF0b3Iu
cmVzZXJ2ZWRGbiA9IG51bGxwdHI7CisgICAgaXRlcmF0b3IuZ2V0U3RhdGUgPSBudWxscHRyOwor
ICAgIGl0ZXJhdG9yLnNldFN0YXRlID0gbnVsbHB0cjsKKyAgICByZXR1cm4gaXRlcmF0b3I7Cit9
CisKK3N0YXRpYyBVQ2hhckl0ZXJhdG9yIGNyZWF0ZUl0ZXJhdG9yKFN0cmluZ1ZpZXcgc3RyaW5n
KQoreworICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBjcmVhdGVMYXRp
bjFJdGVyYXRvcihzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsKKyAgICBV
Q2hhckl0ZXJhdG9yIGl0ZXJhdG9yOworICAgIHVpdGVyX3NldFN0cmluZygmaXRlcmF0b3IsIHN0
cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpKTsKKyAgICByZXR1cm4gaXRlcmF0
b3I7Cit9CisKK2ludCBDb2xsYXRvcjo6Y29sbGF0ZShTdHJpbmdWaWV3IGEsIFN0cmluZ1ZpZXcg
YikgY29uc3QKK3sKKyAgICBVQ2hhckl0ZXJhdG9yIGl0ZXJhdG9yQSA9IGNyZWF0ZUl0ZXJhdG9y
KGEpOworICAgIFVDaGFySXRlcmF0b3IgaXRlcmF0b3JCID0gY3JlYXRlSXRlcmF0b3IoYik7Cisg
ICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgaW50IHJlc3VsdCA9IHVj
b2xfc3RyY29sbEl0ZXIobV9jb2xsYXRvciwgJml0ZXJhdG9yQSwgJml0ZXJhdG9yQiwgJnN0YXR1
cyk7CisgICAgQVNTRVJUKFVfU1VDQ0VTUyhzdGF0dXMpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitzdGF0aWMgVUNoYXJJdGVyYXRvciBjcmVhdGVJdGVyYXRvclVURjgoY29uc3QgY2hhciog
c3RyaW5nKQoreworICAgIFVDaGFySXRlcmF0b3IgaXRlcmF0b3I7CisgICAgdWl0ZXJfc2V0VVRG
OCgmaXRlcmF0b3IsIHN0cmluZywgc3RybGVuKHN0cmluZykpOworICAgIHJldHVybiBpdGVyYXRv
cjsKK30KKworaW50IENvbGxhdG9yOjpjb2xsYXRlVVRGOChjb25zdCBjaGFyKiBhLCBjb25zdCBj
aGFyKiBiKSBjb25zdAoreworICAgIFVDaGFySXRlcmF0b3IgaXRlcmF0b3JBID0gY3JlYXRlSXRl
cmF0b3JVVEY4KGEpOworICAgIFVDaGFySXRlcmF0b3IgaXRlcmF0b3JCID0gY3JlYXRlSXRlcmF0
b3JVVEY4KGIpOworICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIGlu
dCByZXN1bHQgPSB1Y29sX3N0cmNvbGxJdGVyKG1fY29sbGF0b3IsICZpdGVyYXRvckEsICZpdGVy
YXRvckIsICZzdGF0dXMpOworICAgIEFTU0VSVChVX1NVQ0NFU1Moc3RhdHVzKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS94bWwvWFNMVFVuaWNvZGVTb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xU
VW5pY29kZVNvcnQuY3BwCmluZGV4IGE4NTM3MzQwYTI5NWQ0ZmY4YTI0YTBiY2JiMjdiZDRjZmIw
ZTA2YzAuLjM2N2I4NmI2NDhiOWVkNzY0ODc3NDIxZDIwZGQ4MTBlMDAwM2E4MTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUVW5pY29kZVNvcnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3htbC9YU0xUVW5pY29kZVNvcnQuY3BwCkBAIC0zMyw3ICszMyw2IEBACiAKICNpbmNs
dWRlIDxsaWJ4c2x0L3RlbXBsYXRlcy5oPgogI2luY2x1ZGUgPGxpYnhzbHQveHNsdHV0aWxzLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUv
Q29sbGF0b3IuaD4KIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTE2MiwxMCArMTYxLDkgQEAgdm9p
ZCB4c2x0VW5pY29kZVNvcnRGdW5jdGlvbih4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciBjdHh0LCB4
bWxOb2RlUHRyICpzb3J0cywgaW4KIAogICAgIC8vIFdlIGFyZSBwYXNzaW5nIGEgbGFuZ3VhZ2Ug
aWRlbnRpZmllciB0byBhIGZ1bmN0aW9uIHRoYXQgZXhwZWN0cyBhIGxvY2FsZSBpZGVudGlmaWVy
LgogICAgIC8vIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBDb2xsYXRvciBzaG91bGQgYmUgbGVuaWVu
dCwgYW5kIGFjY2VwdCBib3RoICJlbi1VUyIgYW5kICJlbl9VUyIsIGZvciBleGFtcGxlLgotICAg
IC8vIFRoaXMgbGV0cyBhbiBhdXRob3IgdG8gcmVhbGx5IHNwZWNpZnkgc29ydGluZyBydWxlcywg
ZS5nLiAiZGVfREVAY29sbGF0aW9uPXBob25lYm9vayIsIHdoaWNoIGlzbid0CisgICAgLy8gVGhp
cyBsZXRzIGFuIGF1dGhvciBzcGVjaWZ5IHNvcnRpbmcgcnVsZXMsIGUuZy4gImRlX0RFQGNvbGxh
dGlvbj1waG9uZWJvb2siLCB3aGljaCBpc24ndAogICAgIC8vIHBvc3NpYmxlIHdpdGggbGFuZ3Vh
Z2UgYWxvbmUuCi0gICAgQ29sbGF0b3IgY29sbGF0b3IoY29tcC0+aGFzX2xhbmcgPyAoY29uc3Qg
Y2hhciopY29tcC0+bGFuZyA6ICJlbiIpOwotICAgIGNvbGxhdG9yLnNldE9yZGVyTG93ZXJGaXJz
dChjb21wLT5sb3dlcl9maXJzdCk7CisgICAgQ29sbGF0b3IgY29sbGF0b3IoY29tcC0+aGFzX2xh
bmcgPyByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihjb21wLT5sYW5nKSA6ICJlbiIsIGNv
bXAtPmxvd2VyX2ZpcnN0KTsKIAogICAgIC8qIFNoZWxsJ3Mgc29ydCBvZiBub2RlLXNldCAqLwog
ICAgIGZvciAoaW5jciA9IGxlbiAvIDI7IGluY3IgPiAwOyBpbmNyIC89IDIpIHsKQEAgLTE5NSwx
MSArMTkzLDggQEAgdm9pZCB4c2x0VW5pY29kZVNvcnRGdW5jdGlvbih4c2x0VHJhbnNmb3JtQ29u
dGV4dFB0ciBjdHh0LCB4bWxOb2RlUHRyICpzb3J0cywgaW4KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0c1tqICsgaW5jcl0tPmZsb2F0dmFsKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRzdCA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHRzdCA9
IC0xOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgU3RyaW5nIHN0cjEgPSBTdHJpbmc6OmZyb21VVEY4KChjb25zdCBjaGFyKilyZXN1bHRzW2pd
LT5zdHJpbmd2YWwpOwotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHN0cjIgPSBTdHJp
bmc6OmZyb21VVEY4KChjb25zdCBjaGFyKilyZXN1bHRzW2ogKyBpbmNyXS0+c3RyaW5ndmFsKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHRzdCA9IGNvbGxhdG9yLmNvbGxhdGUoc3RyMS5kZXBy
ZWNhdGVkQ2hhcmFjdGVycygpLCBzdHIxLmxlbmd0aCgpLCBzdHIyLmRlcHJlY2F0ZWRDaGFyYWN0
ZXJzKCksIHN0cjIubGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgdHN0ID0gY29sbGF0b3Iu
Y29sbGF0ZVVURjgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4ocmVzdWx0c1tqXS0+c3Ry
aW5ndmFsKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4ocmVzdWx0c1tqICsgaW5jcl0t
PnN0cmluZ3ZhbCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZGVzY2VuZGluZykKICAgICAg
ICAgICAgICAgICAgICAgICAgIHRzdCA9IC10c3Q7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjUw
LDExICsyNDUsOCBAQCB2b2lkIHhzbHRVbmljb2RlU29ydEZ1bmN0aW9uKHhzbHRUcmFuc2Zvcm1D
b250ZXh0UHRyIGN0eHQsIHhtbE5vZGVQdHIgKnNvcnRzLCBpbgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc1tqICsgaW5jcl0tPmZsb2F0dmFsKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0ID0gMTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZSB0c3QgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc3RyMSA9IFN0
cmluZzo6ZnJvbVVURjgoKGNvbnN0IGNoYXIqKXJlc1tqXS0+c3RyaW5ndmFsKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHN0cjIgPSBTdHJpbmc6OmZyb21VVEY4KChj
b25zdCBjaGFyKilyZXNbaiArIGluY3JdLT5zdHJpbmd2YWwpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0c3QgPSBjb2xsYXRvci5jb2xsYXRlKHN0cjEuZGVwcmVjYXRlZENoYXJh
Y3RlcnMoKSwgc3RyMS5sZW5ndGgoKSwgc3RyMi5kZXByZWNhdGVkQ2hhcmFjdGVycygpLCBzdHIy
Lmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRz
dCA9IGNvbGxhdG9yLmNvbGxhdGVVVEY4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHJl
c1tqXS0+c3RyaW5ndmFsKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4ocmVzW2ogKyBp
bmNyXS0+c3RyaW5ndmFsKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlc2Mp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdCA9IC10c3Q7CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>223679</attachid>
            <date>2014-02-09 23:25:55 -0800</date>
            <delta_ts>2014-02-10 07:58:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-128517-20140209232611.patch</filename>
            <type>text/plain</type>
            <size>25372</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYzNzEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
MzEwNmU5ODU1YzM1YmViYjVmNTNiMmJhZWRmMTAzZjExYmU5YzUyLi43MDM3OTEzNjZmZTM1ZWRh
OGU4MzdjODhkZWMzYWJkZWFlOTBkODJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNSBAQAorMjAxNC0wMi0wOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgU3RvcCB1c2luZyBTdHJpbmc6OmRlcHJlY2F0ZWRDaGFyYWN0ZXJzIHRvIGNhbGwg
V1RGOjpDb2xsYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTI4NTE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OnN0cmlu
Z1Byb3RvRnVuY0xvY2FsZUNvbXBhcmUpOiBVc2UgdGhlIGRlZmF1bHQgY29uc3RydWN0b3IgZm9y
IENvbGxhdG9yLCB3aGljaCBub3cKKyAgICAgICAgZ2l2ZXMgdGhlIGRlZmF1bHQgbG9jYWxlIGNv
bGxhdGlvbiBydWxlcy4gVXNlIHRoZSBuZXcgYXJndW1lbnRzIGZvciBDb2xsYXRvcjo6Y29sbGF0
ZSwgd2hpY2gKKyAgICAgICAgYXJlIG5vdyBTdHJpbmdWaWV3LiBUaGVzZSB0d28gY2hhbmdlcyB0
b2dldGhlciBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIGEgc2VwYXJhdGUgaGVscGVyIGZ1bmN0aW9u
LgorCiAyMDE0LTAyLTA4ICBNYXJrIFJvd2UgIDxtcm93ZUBhcHBsZS5jb20+CiAKICAgICAgICAg
PGh0dHBzOi8vd2Via2l0Lm9yZy9iLzEyODQ1Mj4gRG9uJ3QgZHVwbGljYXRlIHRoZSBsaXN0IG9m
IGlucHV0IGZpbGVzIGZvciBwb3N0cHJvY2Vzcy1oZWFkZXJzLnNoCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGQxYmM4MjQxOTY3
YWUzOTZhYmMyYjg4NTg3NGI1MjYxZTAyYjkyZjguLjNmOWQyMWE4NTY3OTkwMGFkMTE0Nzk0MDky
NmY4MzIzMTcyMTQxMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTQtMDItMDkgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgdXNpbmcgU3RyaW5nOjpkZXBy
ZWNhdGVkQ2hhcmFjdGVycyB0byBjYWxsIFdURjo6Q29sbGF0b3IKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODUxNworCisgICAgICAgIFdURiBwYXNz
ZXMgSUNV4oCZcyBkZXByZWNhdGVkIFVMT0NfUkVRVUVTVEVEX0xPQ0FMRSB0byB1Y29sX2dldExv
Y2FsZUJ5VHlwZSgpCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzE1MTgzMzkwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBmaXhlcyBi
b3RoIGJ1Z3MgYWJvdmUgYnkgcmV3b3JraW5nIFdURjo6Q29sbGF0b3IuCisKKyAgICAgICAgKiB3
dGYvdW5pY29kZS9Db2xsYXRvci5oOiBGaXhlZCBmb3JtYXR0aW5nLiBHb3QgcmlkIG9mIHRoZSBD
b2xsYXRvcjo6UmVzdWx0IHR5cGUsCisgICAgICAgIHNpbmNlIHRoZSBjb2xsYXRvciB1c2VzIHRo
ZSBzYW1lIHJldHVybiB2YWx1ZSBzY2hlbWUgYXMgc3RyY21wIGFuZCBhcyBJQ1U7IGFuIGludAor
ICAgICAgICB3aWxsIGRvIGZvciB0aGUgcmV0dXJuIHR5cGUuIFNpbXBsaWZpZWQgdGhlIHN1cHBv
cnQgZm9yIFVDT05GSUdfTk9fQ09MTEFUSU9OIGJ5CisgICAgICAgIHVzaW5nIGEgc2VwYXJhdGUg
Y29weSBvZiB0aGUgY2xhc3MgZGVmaW5pdGlvbi4gKFdlIHNob3VsZCBjaGVjayBpZiBhbnlvbmUg
bmVlZHMKKyAgICAgICAgVUNPTkZJR19OT19DT0xMQVRJT04gc3VwcG9ydCwgYW5kIHJlbW92ZSBp
dCBpZiBub3QuKSBDaGFuZ2VkIHRoZSBsb3dlci1maXJzdCBmbGFnCisgICAgICAgIGZyb20gYSBz
ZXBhcmF0ZSBmdW5jdGlvbiB0byBhIGNvbnN0cnVjdG9yIGFyZ3VtZW50LiBDaGFuZ2VkIHRoZSBh
cmd1bWVudHMgdG8KKyAgICAgICAgdGhlIGNvbGxhdGUgZnVuY3Rpb24gdG8gU3RyaW5nVmlldy4g
QWRkZWQgYSBjb2xsYXRlIFVURjggZnVuY3Rpb24uIENoYW5nZWQgdGhlCisgICAgICAgIG1fY29s
bGF0ZSBkYXRhIG1lbWJlciB0byBubyBsb25nZXIgYmUgbXV0YWJsZSBzaW5jZSB3ZSBubyBsb25n
ZXIgYWxsb2NhdGUgaXQgbGF6aWx5LgorCisgICAgICAgICogd3RmL3VuaWNvZGUvQ29sbGF0b3JE
ZWZhdWx0LmNwcDoKKyAgICAgICAgKFdURjo6Q29sbGF0b3I6OmNvbGxhdGUpOiBSZXdyb3RlIHRv
IGJlIHNpbXBsZXIuCisgICAgICAgIChXVEY6OkNvbGxhdG9yOjpjb2xsYXRlVVRGOCk6IEFkZGVk
LiBDb252ZXJ0cyBmcm9tIFVURi04IHRvIGEgU3RyaW5nIGFuZCB0aGVuIGNhbGxzCisgICAgICAg
IHRoZSBjb2xsYXRlIGZ1bmN0aW9uIGFib3ZlLgorCisgICAgICAgICogd3RmL3VuaWNvZGUvaWN1
L0NvbGxhdG9ySUNVLmNwcDogQWRkZWQgYSBGSVhNRSBhYm91dCB0aGUgZmFjdCB0aGF0IHRoaXMg
ZmlsZQorICAgICAgICBoYXMgdGhlIHdyb25nIG5hbWUgYW5kIGxvY2F0aW9uLiBTaW5jZSB3ZSBh
bHdheXMgdXNlIElDVSwgdGhlcmUncyBubyBuZWVkIHRvIG1lbnRpb24KKyAgICAgICAgaXQgaW4g
dGhlIGZpbGUgbmFtZS4KKyAgICAgICAgKFdURjo6Y29weUFTQ0lJU3RyaW5nKTogQWRkZWQuCisg
ICAgICAgIChXVEY6OmNvcHlEZWZhdWx0TG9jYWxlKTogQWRkZWQuCisgICAgICAgIChXVEY6OnJl
c29sdmVEZWZhdWx0TG9jYWxlKTogQWRkZWQuIE1hcHMgbnVsbCBsb2NhbGUgdG8gYSBkZWZhdWx0
IG9uIE1hYyBhbmQgaU9TLAorICAgICAgICBzaW5jZSBvbiB0aG9zZSBwbGF0Zm9ybXMgSUNVIGRv
ZXMgbm90IHVzZSB0aGUgY29ycmVjdCBkZWZhdWx0IGxvY2FsZSB3aGVuIHBhc3NlZCBudWxsLgor
ICAgICAgICAoV1RGOjpsb2NhbGVzTWF0Y2gpOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q29sbGF0
b3I6OkNvbGxhdG9yKTogTW92ZWQgbW9zdCBvZiB0aGUgY29kZSBmcm9tIGNyZWF0ZUNvbGxhdG9y
IGhlcmUuCisgICAgICAgIFNpbXBsaWZpZWQgaXQgYnkgc3RvcmluZyB0aGUgY29sbGF0b3IgY29u
ZmlndXJhdGlvbiBhbG9uZyB3aXRoIHRoZSBjb2xsYXRvciBpbiBnbG9iYWxzLgorICAgICAgICAo
V1RGOjpDb2xsYXRvcjo6fkNvbGxhdG9yKTogTW92ZWQgbW9zdCBvZiB0aGUgY29kZSBmcm9tIHJl
bGVhc2VDb2xsYXRvciBoZXJlLgorICAgICAgICAoV1RGOjpnZXRJbmRleExhdGluMSk6IEFkZGVk
LgorICAgICAgICAoV1RGOjptb3ZlTGF0aW4xKTogQWRkZWQuCisgICAgICAgIChXVEY6Omhhc05l
eHRMYXRpbjEpOiBBZGRlZC4KKyAgICAgICAgKFdURjo6aGFzUHJldmlvdXNMYXRpbjEpOiBBZGRl
ZC4KKyAgICAgICAgKFdURjo6Y3VycmVudExhdGluMSk6IEFkZGVkLgorICAgICAgICAoV1RGOjpu
ZXh0TGF0aW4xKTogQWRkZWQuCisgICAgICAgIChXVEY6OnByZXZpb3VzTGF0aW4xKTogQWRkZWQu
CisgICAgICAgIChXVEY6OmdldFN0YXRlTGF0aW4xKTogQWRkZWQuCisgICAgICAgIChXVEY6OnNl
dFN0YXRlTGF0aW4xKTogQWRkZWQuCisgICAgICAgIChXVEY6OmNyZWF0ZUxhdGluMUl0ZXJhdG9y
KTogQWRkZWQuIFVzZXMgdGhlIGZ1bmN0aW9ucyBhYm92ZSB0byBtYWtlIGEgVUNoYXJJdGVyYXRv
cgorICAgICAgICB0aGF0IHdvcmtzIGZvciBhIFdURjo6U3RyaW5nVmlldy1zdHlsZSBMYXRpbi0x
IHN0cmluZy4KKyAgICAgICAgKFdURjo6Y3JlYXRlSXRlcmF0b3IpOiBBZGRlZC4gVXNlcyBlaXRo
ZXIgY3JlYXRlTGF0aW4xSXRlcmF0b3Igb3IgdWl0ZXJfc2V0U3RyaW5nIHRvCisgICAgICAgIG1h
a2UgYSBVQ2hhckl0ZXJhdG9yIHRoYXQgd29ya3MgZm9yIGEgV1RGOjpTdHJpbmdWaWV3LgorICAg
ICAgICAoV1RGOjpDb2xsYXRvcjo6Y29sbGF0ZSk6IENoYW5nZWQgdG8gdXNlIHVjb2xfc3RyY29s
bEl0ZXIuCisgICAgICAgIChXVEY6OmNyZWF0ZUl0ZXJhdG9yVVRGOCk6IEFkZGVkLiBVc2VzIHVp
dGVyX3NldFVURjguCisgICAgICAgIChXVEY6OkNvbGxhdG9yOjpjb2xsYXRlVVRGOCk6IEFkZGVk
LiBMaWtlIGNvbGxhdGUsIGJ1dCBmb3IgbnVsbC10ZXJtaW5hdGVkIFVURi04IHN0cmluZ3MuCisK
IDIwMTQtMDItMDggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIENo
YW5nZSBUZXh0SXRlcmF0b3IgdG8gdXNlIFN0cmluZ1ZpZXcsIHByZXBhcmluZyB0byB3ZWFuIGl0
IGZyb20gZGVwcmVjYXRlZENoYXJhY3RlcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkMjY2NTk1ZWU5YzZmZmUw
OTJiY2QxOGI2Y2Y2ZTUzZWMyYmMyOTNlLi43NGUzOGJmNDEwMGNiYWNmMWE2M2VjYTdjMzIzMjRk
NDUzYmQ1NTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTQtMDItMDkgIERhcmlu
IEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgdXNpbmcgU3RyaW5nOjpk
ZXByZWNhdGVkQ2hhcmFjdGVycyB0byBjYWxsIFdURjo6Q29sbGF0b3IKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODUxNworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogeG1sL1hTTFRVbmljb2RlU29ydC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjp4c2x0VW5pY29kZVNvcnRGdW5jdGlvbik6IENyZWF0ZSB0
aGUgY29sbGF0b3IgaW4gYSBzaW5nbGUgbGluZSB1c2luZyB0aGUKKyAgICAgICAgbmV3IGNvbnN0
cnVjdG9yIHRoYXQgdGFrZXMgYSBzaG91bGRTb3J0TG93ZXJjYXNlRmlyc3QgYm9vbGVhbi4gVXNl
IHRoZSBuZXcKKyAgICAgICAgY29sbGF0ZVVURjggZnVuY3Rpb24gaW5zdGVhZCBvZiB1cGNvbnZl
cnRpbmcgVVRGLTggc3RyaW5ncyB0byBVVEYtMTYgYXMgdGhlIG9sZCBjb2RlIGRpZC4KKwogMjAx
NC0wMi0wOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgQ2hhbmdl
IFRleHRJdGVyYXRvciB0byB1c2UgU3RyaW5nVmlldywgcHJlcGFyaW5nIHRvIHdlYW4gaXQgZnJv
bSBkZXByZWNhdGVkQ2hhcmFjdGVycwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKaW5kZXggZWZjYzQwZDY2NzM4N2RmMDk1NTgzNTI4MmZh
NzNjN2MxMGM2ZjNhMi4uZTYzYWI5YjBmNmU1OWNmYzBlZWM4OGI5MTVkODdlZTU5NDBmNDg2NyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUu
Y3BwCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCiAjaW5jbHVk
ZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Db2xsYXRv
ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwpAQCAtMjM1LDEzICsyMzYsNyBAQCBzdGF0aWMg
aW5saW5lIFN0cmluZyBzdWJzdGl0dXRlQmFja3JlZmVyZW5jZXMoY29uc3QgU3RyaW5nJiByZXBs
YWNlbWVudCwgY29uc3QgUwogICAgIHJldHVybiByZXBsYWNlbWVudDsKIH0KIAotc3RhdGljIGlu
bGluZSBpbnQgbG9jYWxlQ29tcGFyZShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IFN0cmluZyYgYikK
LXsKLSAgICByZXR1cm4gQ29sbGF0b3I6OnVzZXJEZWZhdWx0KCktPmNvbGxhdGUocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCA6OlVDaGFyKj4oYS5kZXByZWNhdGVkQ2hhcmFjdGVycygpKSwgYS5sZW5n
dGgoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCA6OlVDaGFyKj4oYi5kZXByZWNhdGVkQ2hhcmFj
dGVycygpKSwgYi5sZW5ndGgoKSk7Ci19Ci0KIHN0cnVjdCBTdHJpbmdSYW5nZSB7Ci1wdWJsaWM6
CiAgICAgU3RyaW5nUmFuZ2UoaW50IHBvcywgaW50IGxlbikKICAgICAgICAgOiBwb3NpdGlvbihw
b3MpCiAgICAgICAgICwgbGVuZ3RoKGxlbikKQEAgLTEyOTksNyArMTI5NCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTG9jYWxlQ29tcGFyZShFeGVjU3Rh
dGUqIGV4ZWMpCiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobG9jYWxlQ29tcGFyZShzLCBhMC50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYykpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cihDb2xsYXRvcigpLmNvbGxhdGUocywgYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSkp
OwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0JpZyhF
eGVjU3RhdGUqIGV4ZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL0NvbGxh
dG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL0NvbGxhdG9yLmgKaW5kZXggMjdkMmQyN2Ri
MjFmNTRlNGRiZmEzZThhNDE3N2ZiNzcwNThhNzM4OC4uNjUzOTY5ZDI1YTEyNDQ4Yzg4MTBjZmZh
Nzk2Njg5MzY0MTE3NDJkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdW5pY29kZS9Db2xs
YXRvci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvQ29sbGF0b3IuaApAQCAtMzAsMzYg
KzMwLDQ1IEBACiAjZGVmaW5lIFdURl9Db2xsYXRvcl9oCiAKICNpbmNsdWRlIDx1bmljb2RlL3Vj
b25maWcuaD4KLSNpbmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAogc3RydWN0IFVDb2xsYXRvcjsK
IAogbmFtZXNwYWNlIFdURiB7CiAKLSAgICBjbGFzcyBDb2xsYXRvciB7Ci0gICAgICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENvbGxhdG9yKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAg
cHVibGljOgotICAgICAgICBlbnVtIFJlc3VsdCB7IEVxdWFsID0gMCwgR3JlYXRlciA9IDEsIExl
c3MgPSAtMSB9OworY2xhc3MgU3RyaW5nVmlldzsKIAotICAgICAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgQ29sbGF0b3IoY29uc3QgY2hhciogbG9jYWxlKTsgLy8gUGFyc2luZyBpcyBsZW5pZW50OyBl
LmcuIGxhbmd1YWdlIGlkZW50aWZpZXJzIChzdWNoIGFzICJlbi1VUyIpIGFyZSBhY2NlcHRlZCwg
dG9vLgotICAgICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfkNvbGxhdG9yKCk7Ci0gICAgICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldE9yZGVyTG93ZXJGaXJzdChib29sKTsKKyNpZiBVQ09O
RklHX05PX0NPTExBVElPTgogCi0gICAgICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPENvbGxhdG9yPiB1c2VyRGVmYXVsdCgpOworY2xhc3MgQ29sbGF0b3Igewor
cHVibGljOgorICAgIGV4cGxpY2l0IENvbGxhdG9yKGNvbnN0IGNoYXIqID0gbnVsbHB0ciwgYm9v
bCA9IGZhbHNlKSB7IH0KIAotICAgICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgUmVzdWx0IGNvbGxh
dGUoY29uc3QgOjpVQ2hhciosIHNpemVfdCwgY29uc3QgOjpVQ2hhciosIHNpemVfdCkgY29uc3Q7
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBpbnQgY29sbGF0ZShTdHJpbmdWaWV3LCBT
dHJpbmdWaWV3KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGludCBjb2xsYXRlVVRG
OChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOworfTsKKworI2Vsc2UKKworY2xhc3MgQ29sbGF0
b3IgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbGxhdG9yKTsKK3B1YmxpYzoKKyAgICAv
LyBUaGUgdmFsdWUgbnVsbHB0ciBpcyBhIHNwZWNpYWwgb25lIG1lYW5pbmcgdGhlIHN5c3RlbSBk
ZWZhdWx0IGxvY2FsZS4KKyAgICAvLyBMb2NhbGUgbmFtZSBwYXJzaW5nIGlzIGxlbmllbnQ7IGUu
Zy4gbGFuZ3VhZ2UgaWRlbnRpZmllcnMgKHN1Y2ggYXMgImVuLVVTIikgYXJlIGFjY2VwdGVkLCB0
b28uCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGV4cGxpY2l0IENvbGxhdG9yKGNvbnN0IGNoYXIq
IGxvY2FsZSA9IG51bGxwdHIsIGJvb2wgc2hvdWxkU29ydExvd2VyY2FzZUZpcnN0ID0gZmFsc2Up
OworICAgIFdURl9FWFBPUlRfUFJJVkFURSB+Q29sbGF0b3IoKTsKKworICAgIFdURl9FWFBPUlRf
UFJJVkFURSBpbnQgY29sbGF0ZShTdHJpbmdWaWV3LCBTdHJpbmdWaWV3KSBjb25zdDsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgaW50IGNvbGxhdGVVVEY4KGNvbnN0IGNoYXIqLCBjb25zdCBjaGFy
KikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgY2hhciogbV9sb2NhbGU7CisgICAgYm9vbCBtX3No
b3VsZFNvcnRMb3dlcmNhc2VGaXJzdDsKKyAgICBVQ29sbGF0b3IqIG1fY29sbGF0b3I7Cit9Owog
Ci0gICAgcHJpdmF0ZToKLSNpZiAhVUNPTkZJR19OT19DT0xMQVRJT04KLSAgICAgICAgdm9pZCBj
cmVhdGVDb2xsYXRvcigpIGNvbnN0OwotICAgICAgICB2b2lkIHJlbGVhc2VDb2xsYXRvcigpOwot
ICAgICAgICBtdXRhYmxlIFVDb2xsYXRvciogbV9jb2xsYXRvcjsKICNlbmRpZgotICAgICAgICBj
aGFyKiBtX2xvY2FsZTsKLSAgICAgICAgYm9vbCBtX2xvd2VyRmlyc3Q7Ci0gICAgfTsKKwogfQog
CiB1c2luZyBXVEY6OkNvbGxhdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdW5pY29k
ZS9Db2xsYXRvckRlZmF1bHQuY3BwIGIvU291cmNlL1dURi93dGYvdW5pY29kZS9Db2xsYXRvckRl
ZmF1bHQuY3BwCmluZGV4IGQ1NmJiNWEzOGE0MWY4NGFiMzE3NTdmNTdhM2YxYjNmZTkyZTBkZDIu
LjgwZmM0NjA4M2Y2ODg5NTUyZDU1NGNjMGQ2NTRjNGIwNDIzODRjYWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL3VuaWNvZGUvQ29sbGF0b3JEZWZhdWx0LmNwcAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi91bmljb2RlL0NvbGxhdG9yRGVmYXVsdC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDQxICszMywyNyBAQAogCiBuYW1l
c3BhY2UgV1RGIHsKIAotQ29sbGF0b3I6OkNvbGxhdG9yKGNvbnN0IGNoYXIqKQoraW50IENvbGxh
dG9yOjpjb2xsYXRlKFN0cmluZ1ZpZXcgYSwgU3RyaW5nVmlldyBiKSBjb25zdAogewotfQotCi1D
b2xsYXRvcjo6fkNvbGxhdG9yKCkKLXsKLX0KKyAgICB1bnNpZ25lZCBjb21tb25MZW5ndGggPSBz
dGQ6Om1pbihhLmxlbmd0aCgpLCBiLmxlbmd0aCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgY29tbW9uTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKGFbaV0gPCBiW2ldKQorICAg
ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoYVtpXSA+IGJbaV0pCisgICAgICAgICAg
ICByZXR1cm4gMTsKKyAgICB9CiAKLXZvaWQgQ29sbGF0b3I6OnNldE9yZGVyTG93ZXJGaXJzdChi
b29sKQotewotfQorICAgIGlmIChhLmxlbmd0aCgpIDwgYi5sZW5ndGgoKSkKKyAgICAgICAgcmV0
dXJuIC0xOworICAgIGlmIChhLmxlbmd0aCgpID4gYi5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJu
IDE7CiAKLXN0ZDo6dW5pcXVlX3B0cjxDb2xsYXRvcj4gQ29sbGF0b3I6OnVzZXJEZWZhdWx0KCkK
LXsKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDb2xsYXRvcj4obnVsbHB0cik7CisgICAg
cmV0dXJuIDA7CiB9CiAKLS8vIEEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IgcGxhdGZvcm1z
IHRoYXQgbGFjayBVbmljb2RlLWF3YXJlIGNvbGxhdGlvbi4KLUNvbGxhdG9yOjpSZXN1bHQgQ29s
bGF0b3I6OmNvbGxhdGUoY29uc3QgVUNoYXIqIGxocywgc2l6ZV90IGxoc0xlbmd0aCwgY29uc3Qg
VUNoYXIqIHJocywgc2l6ZV90IHJoc0xlbmd0aCkgY29uc3QKK2ludCBDb2xsYXRvcjo6Y29sbGF0
ZVVURjgoY29uc3QgY2hhciogYSwgY29uc3QgY2hhciogYikgY29uc3QKIHsKLSAgICBpbnQgbG1p
biA9IGxoc0xlbmd0aCA8IHJoc0xlbmd0aCA/IGxoc0xlbmd0aCA6IHJoc0xlbmd0aDsKLSAgICBp
bnQgbCA9IDA7Ci0gICAgd2hpbGUgKGwgPCBsbWluICYmICpsaHMgPT0gKnJocykgewotICAgICAg
ICBsaHMrKzsKLSAgICAgICAgcmhzKys7Ci0gICAgICAgIGwrKzsKLSAgICB9Ci0KLSAgICBpZiAo
bCA8IGxtaW4pCi0gICAgICAgIHJldHVybiAoKmxocyA+ICpyaHMpID8gR3JlYXRlciA6IExlc3M7
Ci0KLSAgICBpZiAobGhzTGVuZ3RoID09IHJoc0xlbmd0aCkKLSAgICAgICAgcmV0dXJuIEVxdWFs
OwotCi0gICAgcmV0dXJuIChsaHNMZW5ndGggPiByaHNMZW5ndGgpID8gR3JlYXRlciA6IExlc3M7
CisgICAgcmV0dXJuIGNvbGxhdGUoU3RyaW5nOjpmcm9tVVRGOChhKSwgU3RyaW5nOjpmcm9tVVRG
OChiKSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvaWN1L0Nv
bGxhdG9ySUNVLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvaWN1L0NvbGxhdG9ySUNVLmNw
cAppbmRleCBlNDA1OWJjZGNmYWE5ZmMwMmUxODMyY2QyMjI3M2YzNTZkYzZmZjU5Li4wODAwOWM0
MTBjYzY2MDVjODY3YmQyYWUyOTYzZjMyNDU5MmRkOWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi91bmljb2RlL2ljdS9Db2xsYXRvcklDVS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdW5p
Y29kZS9pY3UvQ29sbGF0b3JJQ1UuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywyNCArMjcsMjcgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ29sbGF0b3IuaD4KKyNpbmNsdWRl
ICJDb2xsYXRvci5oIgorCisvLyBGSVhNRTogTWVyZ2UgdGhpcyB3aXRoIENvbGxhdG9yRGVmYXVs
dC5jcHAgaW50byBhIHNpbmdsZSBDb2xsYXRvci5jcHAgc291cmNlIGZpbGUuCiAKICNpZiAhVUNP
TkZJR19OT19DT0xMQVRJT04KIAogI2luY2x1ZGUgPG11dGV4PgotI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogI2luY2x1ZGUgPHVuaWNv
ZGUvdWNvbC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRy
YXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdWaWV3Lmg+CiAKLSNpZiBPUyhEQVJXSU4p
Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2lmIE9TKERBUldJTikgJiYgVVNFKENGKQog
I2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXVEYgewogCiBzdGF0aWMgVUNvbGxh
dG9yKiBjYWNoZWRDb2xsYXRvcjsKK3N0YXRpYyBjaGFyKiBjYWNoZWRDb2xsYXRvckxvY2FsZTsK
K3N0YXRpYyBib29sIGNhY2hlZENvbGxhdG9yU2hvdWxkU29ydExvd2VyY2FzZUZpcnN0OwogCiBz
dGF0aWMgc3RkOjptdXRleCYgY2FjaGVkQ29sbGF0b3JNdXRleCgpCiB7CkBAIC01MywxMDUgKzU2
LDIyNSBAQCBzdGF0aWMgc3RkOjptdXRleCYgY2FjaGVkQ29sbGF0b3JNdXRleCgpCiAgICAgc3Rk
OjpjYWxsX29uY2Uob25jZUZsYWcsIFtdewogICAgICAgICBtdXRleCA9IHN0ZDo6bWFrZV91bmlx
dWU8c3RkOjptdXRleD4oKS5yZWxlYXNlKCk7CiAgICAgfSk7Ci0KICAgICByZXR1cm4gKm11dGV4
OwogfQogCi1Db2xsYXRvcjo6Q29sbGF0b3IoY29uc3QgY2hhciogbG9jYWxlKQotICAgIDogbV9j
b2xsYXRvcigwKQotICAgICwgbV9sb2NhbGUobG9jYWxlID8gc3RyZHVwKGxvY2FsZSkgOiAwKQot
ICAgICwgbV9sb3dlckZpcnN0KGZhbHNlKQorI2lmICEoT1MoREFSV0lOKSAmJiBVU0UoQ0YpKQor
CitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIHJlc29sdmVEZWZhdWx0TG9jYWxlKGNvbnN0IGNo
YXIqIGxvY2FsZSkKIHsKKyAgICByZXR1cm4gbG9jYWxlOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8
Q29sbGF0b3I+IENvbGxhdG9yOjp1c2VyRGVmYXVsdCgpCi17Ci0jaWYgT1MoREFSV0lOKSAmJiBV
U0UoQ0YpCi0gICAgLy8gTWFjIE9TIFggZG9lc24ndCBzZXQgVU5JWCBsb2NhbGUgdG8gbWF0Y2gg
dXNlci1zZWxlY3RlZCBvbmUsIHNvIElDVSBkZWZhdWx0IGRvZXNuJ3Qgd29yay4KLSNpZiAhT1Mo
SU9TKQotICAgIFJldGFpblB0cjxDRkxvY2FsZVJlZj4gY3VycmVudExvY2FsZSA9IGFkb3B0Q0Yo
Q0ZMb2NhbGVDb3B5Q3VycmVudCgpKTsKLSAgICBDRlN0cmluZ1JlZiBjb2xsYXRpb25PcmRlciA9
IChDRlN0cmluZ1JlZilDRkxvY2FsZUdldFZhbHVlKGN1cnJlbnRMb2NhbGUuZ2V0KCksIGtDRkxv
Y2FsZUNvbGxhdG9ySWRlbnRpZmllcik7CiAjZWxzZQotICAgIFJldGFpblB0cjxDRlN0cmluZ1Jl
Zj4gY29sbGF0aW9uT3JkZXJSZXRhaW5lciA9IGFkb3B0Q0YoKENGU3RyaW5nUmVmKUNGUHJlZmVy
ZW5jZXNDb3B5VmFsdWUoQ0ZTVFIoIkFwcGxlQ29sbGF0aW9uT3JkZXIiKSwga0NGUHJlZmVyZW5j
ZXNBbnlBcHBsaWNhdGlvbiwga0NGUHJlZmVyZW5jZXNDdXJyZW50VXNlciwga0NGUHJlZmVyZW5j
ZXNBbnlIb3N0KSk7Ci0gICAgQ0ZTdHJpbmdSZWYgY29sbGF0aW9uT3JkZXIgPSBjb2xsYXRpb25P
cmRlclJldGFpbmVyLmdldCgpOwotI2VuZGlmCi0gICAgY2hhciBidWZbMjU2XTsKLSAgICBpZiAo
IWNvbGxhdGlvbk9yZGVyKQotICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDb2xsYXRv
cj4oIiIpOwotICAgIENGU3RyaW5nR2V0Q1N0cmluZyhjb2xsYXRpb25PcmRlciwgYnVmLCBzaXpl
b2YoYnVmKSwga0NGU3RyaW5nRW5jb2RpbmdBU0NJSSk7Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91
bmlxdWU8Q29sbGF0b3I+KGJ1Zik7Ci0jZWxzZQotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVl
PENvbGxhdG9yPihzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oMCkpOwotI2VuZGlmCi19CiAKLUNv
bGxhdG9yOjp+Q29sbGF0b3IoKQorc3RhdGljIGlubGluZSBjaGFyKiBjb3B5QVNDSUlTdHJpbmco
Q0ZTdHJpbmdSZWYgc3RyaW5nKQogewotICAgIHJlbGVhc2VDb2xsYXRvcigpOwotICAgIGZyZWUo
bV9sb2NhbGUpOworICAgIGNoYXIgYnVmZmVyWzI1Nl07CisgICAgaWYgKCFDRlN0cmluZ0dldENT
dHJpbmcoc3RyaW5nLCBidWZmZXIsIHNpemVvZihidWZmZXIpLCBrQ0ZTdHJpbmdFbmNvZGluZ0FT
Q0lJKSkKKyAgICAgICAgcmV0dXJuIHN0cmR1cCgiIik7CisgICAgcmV0dXJuIHN0cmR1cChidWZm
ZXIpOwogfQogCi12b2lkIENvbGxhdG9yOjpzZXRPcmRlckxvd2VyRmlyc3QoYm9vbCBsb3dlckZp
cnN0KQorc3RhdGljIGNoYXIqIGNvcHlEZWZhdWx0TG9jYWxlKCkKIHsKLSAgICBtX2xvd2VyRmly
c3QgPSBsb3dlckZpcnN0OworI2lmICFQTEFURk9STShJT1MpCisgICAgcmV0dXJuIGNvcHlBU0NJ
SVN0cmluZyhzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZMb2NhbGVHZXRWYWx1ZShhZG9wdENG
KENGTG9jYWxlQ29weUN1cnJlbnQoKSkuZ2V0KCksIGtDRkxvY2FsZUNvbGxhdG9ySWRlbnRpZmll
cikpKTsKKyNlbHNlCisgICAgLy8gRklYTUU6IERvY3VtZW50YXRpb24gY2xhaW1zIHRoZSBjb2Rl
IGFib3ZlIHdvdWxkIHdvcmsgb24gaU9TIDQuMCBhbmQgbGF0ZXIuIEFmdGVyIHRlc3QgdGhhdCB3
b3Jrcywgd2Ugc2hvdWxkIHJlbW92ZSB0aGlzIGFuZCB1c2UgdGhhdCBpbnN0ZWFkLgorICAgIHJl
dHVybiBjb3B5QVNDSUlTdHJpbmcoYWRvcHRDRihzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZQ
cmVmZXJlbmNlc0NvcHlWYWx1ZShDRlNUUigiQXBwbGVDb2xsYXRpb25PcmRlciIpLCBrQ0ZQcmVm
ZXJlbmNlc0FueUFwcGxpY2F0aW9uLCBrQ0ZQcmVmZXJlbmNlc0N1cnJlbnRVc2VyLCBrQ0ZQcmVm
ZXJlbmNlc0FueUhvc3QpKSkuZ2V0KCkpOworI2VuZGlmCiB9CiAKLUNvbGxhdG9yOjpSZXN1bHQg
Q29sbGF0b3I6OmNvbGxhdGUoY29uc3QgVUNoYXIqIGxocywgc2l6ZV90IGxoc0xlbmd0aCwgY29u
c3QgVUNoYXIqIHJocywgc2l6ZV90IHJoc0xlbmd0aCkgY29uc3QKK3N0YXRpYyBpbmxpbmUgY29u
c3QgY2hhciogcmVzb2x2ZURlZmF1bHRMb2NhbGUoY29uc3QgY2hhciogbG9jYWxlKQogewotICAg
IGlmICghbV9jb2xsYXRvcikKLSAgICAgICAgY3JlYXRlQ29sbGF0b3IoKTsKKyAgICBpZiAobG9j
YWxlKQorICAgICAgICByZXR1cm4gbG9jYWxlOworICAgIC8vIFNpbmNlIGlPUyBhbmQgT1MgWCBk
b24ndCBzZXQgVU5JWCBsb2NhbGUgdG8gbWF0Y2ggdGhlIHVzZXIncyBzZWxlY3RlZCBsb2NhbGUs
IHRoZSBJQ1UgZGVmYXVsdCBsb2NhbGUgaXMgbm90IHRoZSByaWdodCBvbmUuCisgICAgLy8gU28s
IGluc3RlYWQgb2YgcGFzc2luZyBudWxsLCB3ZSBmZXRjaCB0aGUgbmFtZSBvZiB0aGUgZGVmYXVs
dCBsb2NhbGUuCisgICAgc3RhdGljIGNoYXIqIGRlZmF1bHRMb2NhbGUgPSBjb3B5RGVmYXVsdExv
Y2FsZSgpOworICAgIHJldHVybiBkZWZhdWx0TG9jYWxlOworfQogCi0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFJlc3VsdD4odWNvbF9zdHJjb2xsKG1fY29sbGF0b3IsIGxocywgbGhzTGVuZ3RoLCBy
aHMsIHJoc0xlbmd0aCkpOworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgYm9vbCBsb2NhbGVzTWF0
Y2goY29uc3QgY2hhciogYSwgY29uc3QgY2hhciogYikKK3sKKyAgICAvLyBUd28gbnVsbCBsb2Nh
bGVzIGFyZSBlcXVhbCwgb3RoZXIgbG9jYWxlcyBhcmUgY29tcGFyZWQgd2l0aCBzdHJjbXAuCisg
ICAgcmV0dXJuIGEgPT0gYiB8fCAoYSAmJiBiICYmICFzdHJjbXAoYSwgYikpOwogfQogCi12b2lk
IENvbGxhdG9yOjpjcmVhdGVDb2xsYXRvcigpIGNvbnN0CitDb2xsYXRvcjo6Q29sbGF0b3IoY29u
c3QgY2hhciogbG9jYWxlLCBib29sIHNob3VsZFNvcnRMb3dlcmNhc2VGaXJzdCkKIHsKLSAgICBB
U1NFUlQoIW1fY29sbGF0b3IpOwogICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9S
OwogCiAgICAgewogICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9jayhjYWNo
ZWRDb2xsYXRvck11dGV4KCkpOwotICAgICAgICBpZiAoY2FjaGVkQ29sbGF0b3IpIHsKLSAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGNhY2hlZENvbGxhdG9yTG9jYWxlID0gdWNvbF9nZXRMb2NhbGVC
eVR5cGUoY2FjaGVkQ29sbGF0b3IsIFVMT0NfUkVRVUVTVEVEX0xPQ0FMRSwgJnN0YXR1cyk7Ci0g
ICAgICAgICAgICBBU1NFUlQoVV9TVUNDRVNTKHN0YXR1cykpOwotICAgICAgICAgICAgQVNTRVJU
KGNhY2hlZENvbGxhdG9yTG9jYWxlKTsKLQotICAgICAgICAgICAgVUNvbEF0dHJpYnV0ZVZhbHVl
IGNhY2hlZENvbGxhdG9yTG93ZXJGaXJzdCA9IHVjb2xfZ2V0QXR0cmlidXRlKGNhY2hlZENvbGxh
dG9yLCBVQ09MX0NBU0VfRklSU1QsICZzdGF0dXMpOwotICAgICAgICAgICAgQVNTRVJUKFVfU1VD
Q0VTUyhzdGF0dXMpKTsKLQotICAgICAgICAgICAgLy8gRklYTUU6IGRlZmF1bHQgbG9jYWxlIGlz
IG5ldmVyIG1hdGNoZWQsIGJlY2F1c2UgdWNvbF9nZXRMb2NhbGVCeVR5cGUgcmV0dXJucyB0aGUg
YWN0dWFsIG9uZSB1c2VkLCBub3QgMC4KLSAgICAgICAgICAgIGlmIChtX2xvY2FsZSAmJiAwID09
IHN0cmNtcChjYWNoZWRDb2xsYXRvckxvY2FsZSwgbV9sb2NhbGUpCi0gICAgICAgICAgICAgICAg
JiYgKChVQ09MX0xPV0VSX0ZJUlNUID09IGNhY2hlZENvbGxhdG9yTG93ZXJGaXJzdCAmJiBtX2xv
d2VyRmlyc3QpIHx8IChVQ09MX1VQUEVSX0ZJUlNUID09IGNhY2hlZENvbGxhdG9yTG93ZXJGaXJz
dCAmJiAhbV9sb3dlckZpcnN0KSkpIHsKLSAgICAgICAgICAgICAgICBtX2NvbGxhdG9yID0gY2Fj
aGVkQ29sbGF0b3I7Ci0gICAgICAgICAgICAgICAgY2FjaGVkQ29sbGF0b3IgPSBudWxscHRyOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKGNhY2hl
ZENvbGxhdG9yICYmIGxvY2FsZXNNYXRjaChjYWNoZWRDb2xsYXRvckxvY2FsZSwgbG9jYWxlKSAm
JiBjYWNoZWRDb2xsYXRvclNob3VsZFNvcnRMb3dlcmNhc2VGaXJzdCA9PSBzaG91bGRTb3J0TG93
ZXJjYXNlRmlyc3QpIHsKKyAgICAgICAgICAgIG1fY29sbGF0b3IgPSBjYWNoZWRDb2xsYXRvcjsK
KyAgICAgICAgICAgIG1fbG9jYWxlID0gY2FjaGVkQ29sbGF0b3JMb2NhbGU7CisgICAgICAgICAg
ICBtX3Nob3VsZFNvcnRMb3dlcmNhc2VGaXJzdCA9IHNob3VsZFNvcnRMb3dlcmNhc2VGaXJzdDsK
KyAgICAgICAgICAgIGNhY2hlZENvbGxhdG9yID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGNhY2hl
ZENvbGxhdG9yTG9jYWxlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgIH0KIAotICAgIG1fY29sbGF0b3IgPSB1Y29sX29wZW4obV9sb2NhbGUsICZzdGF0dXMp
OworICAgIG1fY29sbGF0b3IgPSB1Y29sX29wZW4ocmVzb2x2ZURlZmF1bHRMb2NhbGUobG9jYWxl
KSwgJnN0YXR1cyk7CiAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMpKSB7CiAgICAgICAgIHN0YXR1
cyA9IFVfWkVST19FUlJPUjsKLSAgICAgICAgbV9jb2xsYXRvciA9IHVjb2xfb3BlbigiIiwgJnN0
YXR1cyk7IC8vIEZhbGxiYWNrIHRvIFVuaWNvZGUgQ29sbGF0aW9uIEFsZ29yaXRobS4KKyAgICAg
ICAgbV9jb2xsYXRvciA9IHVjb2xfb3BlbigiIiwgJnN0YXR1cyk7IC8vIEZhbGwgYmFjayB0byBV
bmljb2RlIENvbGxhdGlvbiBBbGdvcml0aG0uCiAgICAgfQogICAgIEFTU0VSVChVX1NVQ0NFU1Mo
c3RhdHVzKSk7CiAKLSAgICB1Y29sX3NldEF0dHJpYnV0ZShtX2NvbGxhdG9yLCBVQ09MX0NBU0Vf
RklSU1QsIG1fbG93ZXJGaXJzdCA/IFVDT0xfTE9XRVJfRklSU1QgOiBVQ09MX1VQUEVSX0ZJUlNU
LCAmc3RhdHVzKTsKKyAgICB1Y29sX3NldEF0dHJpYnV0ZShtX2NvbGxhdG9yLCBVQ09MX0NBU0Vf
RklSU1QsIHNob3VsZFNvcnRMb3dlcmNhc2VGaXJzdCA/IFVDT0xfTE9XRVJfRklSU1QgOiBVQ09M
X1VQUEVSX0ZJUlNULCAmc3RhdHVzKTsKICAgICBBU1NFUlQoVV9TVUNDRVNTKHN0YXR1cykpOwog
CiAgICAgdWNvbF9zZXRBdHRyaWJ1dGUobV9jb2xsYXRvciwgVUNPTF9OT1JNQUxJWkFUSU9OX01P
REUsIFVDT0xfT04sICZzdGF0dXMpOwogICAgIEFTU0VSVChVX1NVQ0NFU1Moc3RhdHVzKSk7CisK
KyAgICBtX2xvY2FsZSA9IGxvY2FsZSA/IHN0cmR1cChsb2NhbGUpIDogbnVsbHB0cjsKKyAgICBt
X3Nob3VsZFNvcnRMb3dlcmNhc2VGaXJzdCA9IHNob3VsZFNvcnRMb3dlcmNhc2VGaXJzdDsKIH0K
IAotdm9pZCBDb2xsYXRvcjo6cmVsZWFzZUNvbGxhdG9yKCkKK0NvbGxhdG9yOjp+Q29sbGF0b3Io
KQogewogICAgIHsKICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0ZDo6bXV0ZXg+IGxvY2soY2Fj
aGVkQ29sbGF0b3JNdXRleCgpKTsKICAgICAgICAgaWYgKGNhY2hlZENvbGxhdG9yKQogICAgICAg
ICAgICAgdWNvbF9jbG9zZShjYWNoZWRDb2xsYXRvcik7CiAgICAgICAgIGNhY2hlZENvbGxhdG9y
ID0gbV9jb2xsYXRvcjsKKyAgICAgICAgY2FjaGVkQ29sbGF0b3JMb2NhbGUgPSBtX2xvY2FsZTsK
KyAgICAgICAgY2FjaGVkQ29sbGF0b3JTaG91bGRTb3J0TG93ZXJjYXNlRmlyc3QgPSBtX3Nob3Vs
ZFNvcnRMb3dlcmNhc2VGaXJzdDsKICAgICAgICAgbV9jb2xsYXRvciA9IG51bGxwdHI7CisgICAg
ICAgIG1fbG9jYWxlID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBmcmVlKG1fbG9jYWxlKTsKK30K
Kworc3RhdGljIGludDMyX3QgZ2V0SW5kZXhMYXRpbjEoVUNoYXJJdGVyYXRvciogaXRlcmF0b3Is
IFVDaGFySXRlcmF0b3JPcmlnaW4gb3JpZ2luKQoreworICAgIHN3aXRjaCAob3JpZ2luKSB7Cisg
ICAgY2FzZSBVSVRFUl9TVEFSVDoKKyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT5zdGFydDsKKyAg
ICBjYXNlIFVJVEVSX0NVUlJFTlQ6CisgICAgICAgIHJldHVybiBpdGVyYXRvci0+aW5kZXg7Cisg
ICAgY2FzZSBVSVRFUl9MSU1JVDoKKyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT5saW1pdDsKKyAg
ICBjYXNlIFVJVEVSX1pFUk86CisgICAgICAgIHJldHVybiAwOworICAgIGNhc2UgVUlURVJfTEVO
R1RIOgorICAgICAgICByZXR1cm4gaXRlcmF0b3ItPmxlbmd0aDsKICAgICB9CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFVfU0VOVElORUw7Cit9CisKK3N0YXRpYyBpbnQz
Ml90IG1vdmVMYXRpbjEoVUNoYXJJdGVyYXRvciogaXRlcmF0b3IsIGludDMyX3QgZGVsdGEsIFVD
aGFySXRlcmF0b3JPcmlnaW4gb3JpZ2luKQoreworICAgIHJldHVybiBpdGVyYXRvci0+aW5kZXgg
PSBnZXRJbmRleExhdGluMShpdGVyYXRvciwgb3JpZ2luKSArIGRlbHRhOworfQorCitzdGF0aWMg
VUJvb2wgaGFzTmV4dExhdGluMShVQ2hhckl0ZXJhdG9yKiBpdGVyYXRvcikKK3sKKyAgICByZXR1
cm4gaXRlcmF0b3ItPmluZGV4IDwgaXRlcmF0b3ItPmxpbWl0OworfQorCitzdGF0aWMgVUJvb2wg
aGFzUHJldmlvdXNMYXRpbjEoVUNoYXJJdGVyYXRvciogaXRlcmF0b3IpCit7CisgICAgcmV0dXJu
IGl0ZXJhdG9yLT5pbmRleCA+IGl0ZXJhdG9yLT5zdGFydDsKK30KKworc3RhdGljIFVDaGFyMzIg
Y3VycmVudExhdGluMShVQ2hhckl0ZXJhdG9yKiBpdGVyYXRvcikKK3sKKyAgICBBU1NFUlQoaXRl
cmF0b3ItPmluZGV4ID49IGl0ZXJhdG9yLT5zdGFydCk7CisgICAgaWYgKGl0ZXJhdG9yLT5pbmRl
eCA+PSBpdGVyYXRvci0+bGltaXQpCisgICAgICAgIHJldHVybiBVX1NFTlRJTkVMOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxjb25zdCBMQ2hhcio+KGl0ZXJhdG9yLT5jb250ZXh0KVtpdGVyYXRv
ci0+aW5kZXhdOworfQorCitzdGF0aWMgVUNoYXIzMiBuZXh0TGF0aW4xKFVDaGFySXRlcmF0b3Iq
IGl0ZXJhdG9yKQoreworICAgIEFTU0VSVChpdGVyYXRvci0+aW5kZXggPj0gaXRlcmF0b3ItPnN0
YXJ0KTsKKyAgICBpZiAoaXRlcmF0b3ItPmluZGV4ID49IGl0ZXJhdG9yLT5saW1pdCkKKyAgICAg
ICAgcmV0dXJuIFVfU0VOVElORUw7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IExDaGFy
Kj4oaXRlcmF0b3ItPmNvbnRleHQpW2l0ZXJhdG9yLT5pbmRleCsrXTsKK30KKworc3RhdGljIFVD
aGFyMzIgcHJldmlvdXNMYXRpbjEoVUNoYXJJdGVyYXRvciogaXRlcmF0b3IpCit7CisgICAgaWYg
KGl0ZXJhdG9yLT5pbmRleCA8PSBpdGVyYXRvci0+c3RhcnQpCisgICAgICAgIHJldHVybiBVX1NF
TlRJTkVMOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBMQ2hhcio+KGl0ZXJhdG9yLT5j
b250ZXh0KVstLWl0ZXJhdG9yLT5pbmRleF07Cit9CisKK3N0YXRpYyB1aW50MzJfdCBnZXRTdGF0
ZUxhdGluMShjb25zdCBVQ2hhckl0ZXJhdG9yKiBpdGVyYXRvcikKK3sKKyAgICByZXR1cm4gaXRl
cmF0b3ItPmluZGV4OworfQorCitzdGF0aWMgdm9pZCBzZXRTdGF0ZUxhdGluMShVQ2hhckl0ZXJh
dG9yKiBpdGVyYXRvciwgdWludDMyX3Qgc3RhdGUsIFVFcnJvckNvZGUqKQoreworICAgIGl0ZXJh
dG9yLT5pbmRleCA9IHN0YXRlOworfQorCitzdGF0aWMgVUNoYXJJdGVyYXRvciBjcmVhdGVMYXRp
bjFJdGVyYXRvcihjb25zdCBMQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkKK3sKKyAgICBV
Q2hhckl0ZXJhdG9yIGl0ZXJhdG9yOworICAgIGl0ZXJhdG9yLmNvbnRleHQgPSBjaGFyYWN0ZXJz
OworICAgIGl0ZXJhdG9yLmxlbmd0aCA9IGxlbmd0aDsKKyAgICBpdGVyYXRvci5zdGFydCA9IDA7
CisgICAgaXRlcmF0b3IuaW5kZXggPSAwOworICAgIGl0ZXJhdG9yLmxpbWl0ID0gbGVuZ3RoOwor
ICAgIGl0ZXJhdG9yLnJlc2VydmVkRmllbGQgPSAwOworICAgIGl0ZXJhdG9yLmdldEluZGV4ID0g
Z2V0SW5kZXhMYXRpbjE7CisgICAgaXRlcmF0b3IubW92ZSA9IG1vdmVMYXRpbjE7CisgICAgaXRl
cmF0b3IuaGFzTmV4dCA9IGhhc05leHRMYXRpbjE7CisgICAgaXRlcmF0b3IuaGFzUHJldmlvdXMg
PSBoYXNQcmV2aW91c0xhdGluMTsKKyAgICBpdGVyYXRvci5jdXJyZW50ID0gY3VycmVudExhdGlu
MTsKKyAgICBpdGVyYXRvci5uZXh0ID0gbmV4dExhdGluMTsKKyAgICBpdGVyYXRvci5wcmV2aW91
cyA9IHByZXZpb3VzTGF0aW4xOworICAgIGl0ZXJhdG9yLnJlc2VydmVkRm4gPSBudWxscHRyOwor
ICAgIGl0ZXJhdG9yLmdldFN0YXRlID0gZ2V0U3RhdGVMYXRpbjE7CisgICAgaXRlcmF0b3Iuc2V0
U3RhdGUgPSBzZXRTdGF0ZUxhdGluMTsKKyAgICByZXR1cm4gaXRlcmF0b3I7Cit9CisKK3N0YXRp
YyBVQ2hhckl0ZXJhdG9yIGNyZWF0ZUl0ZXJhdG9yKFN0cmluZ1ZpZXcgc3RyaW5nKQoreworICAg
IGlmIChzdHJpbmcuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBjcmVhdGVMYXRpbjFJdGVyYXRv
cihzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgpKTsKKyAgICBVQ2hhckl0ZXJh
dG9yIGl0ZXJhdG9yOworICAgIHVpdGVyX3NldFN0cmluZygmaXRlcmF0b3IsIHN0cmluZy5jaGFy
YWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpKTsKKyAgICByZXR1cm4gaXRlcmF0b3I7Cit9CisK
K2ludCBDb2xsYXRvcjo6Y29sbGF0ZShTdHJpbmdWaWV3IGEsIFN0cmluZ1ZpZXcgYikgY29uc3QK
K3sKKyAgICBVQ2hhckl0ZXJhdG9yIGl0ZXJhdG9yQSA9IGNyZWF0ZUl0ZXJhdG9yKGEpOworICAg
IFVDaGFySXRlcmF0b3IgaXRlcmF0b3JCID0gY3JlYXRlSXRlcmF0b3IoYik7CisgICAgVUVycm9y
Q29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgaW50IHJlc3VsdCA9IHVjb2xfc3RyY29s
bEl0ZXIobV9jb2xsYXRvciwgJml0ZXJhdG9yQSwgJml0ZXJhdG9yQiwgJnN0YXR1cyk7CisgICAg
QVNTRVJUKFVfU1VDQ0VTUyhzdGF0dXMpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0
aWMgVUNoYXJJdGVyYXRvciBjcmVhdGVJdGVyYXRvclVURjgoY29uc3QgY2hhciogc3RyaW5nKQor
eworICAgIFVDaGFySXRlcmF0b3IgaXRlcmF0b3I7CisgICAgdWl0ZXJfc2V0VVRGOCgmaXRlcmF0
b3IsIHN0cmluZywgc3RybGVuKHN0cmluZykpOworICAgIHJldHVybiBpdGVyYXRvcjsKK30KKwor
aW50IENvbGxhdG9yOjpjb2xsYXRlVVRGOChjb25zdCBjaGFyKiBhLCBjb25zdCBjaGFyKiBiKSBj
b25zdAoreworICAgIFVDaGFySXRlcmF0b3IgaXRlcmF0b3JBID0gY3JlYXRlSXRlcmF0b3JVVEY4
KGEpOworICAgIFVDaGFySXRlcmF0b3IgaXRlcmF0b3JCID0gY3JlYXRlSXRlcmF0b3JVVEY4KGIp
OworICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIGludCByZXN1bHQg
PSB1Y29sX3N0cmNvbGxJdGVyKG1fY29sbGF0b3IsICZpdGVyYXRvckEsICZpdGVyYXRvckIsICZz
dGF0dXMpOworICAgIEFTU0VSVChVX1NVQ0NFU1Moc3RhdHVzKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS94
bWwvWFNMVFVuaWNvZGVTb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUVW5pY29kZVNv
cnQuY3BwCmluZGV4IGE4NTM3MzQwYTI5NWQ0ZmY4YTI0YTBiY2JiMjdiZDRjZmIwZTA2YzAuLjM2
N2I4NmI2NDhiOWVkNzY0ODc3NDIxZDIwZGQ4MTBlMDAwM2E4MTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3htbC9YU0xUVW5pY29kZVNvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3ht
bC9YU0xUVW5pY29kZVNvcnQuY3BwCkBAIC0zMyw3ICszMyw2IEBACiAKICNpbmNsdWRlIDxsaWJ4
c2x0L3RlbXBsYXRlcy5oPgogI2luY2x1ZGUgPGxpYnhzbHQveHNsdHV0aWxzLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ29sbGF0b3Iu
aD4KIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTE2MiwxMCArMTYxLDkgQEAgdm9pZCB4c2x0VW5p
Y29kZVNvcnRGdW5jdGlvbih4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciBjdHh0LCB4bWxOb2RlUHRy
ICpzb3J0cywgaW4KIAogICAgIC8vIFdlIGFyZSBwYXNzaW5nIGEgbGFuZ3VhZ2UgaWRlbnRpZmll
ciB0byBhIGZ1bmN0aW9uIHRoYXQgZXhwZWN0cyBhIGxvY2FsZSBpZGVudGlmaWVyLgogICAgIC8v
IFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBDb2xsYXRvciBzaG91bGQgYmUgbGVuaWVudCwgYW5kIGFj
Y2VwdCBib3RoICJlbi1VUyIgYW5kICJlbl9VUyIsIGZvciBleGFtcGxlLgotICAgIC8vIFRoaXMg
bGV0cyBhbiBhdXRob3IgdG8gcmVhbGx5IHNwZWNpZnkgc29ydGluZyBydWxlcywgZS5nLiAiZGVf
REVAY29sbGF0aW9uPXBob25lYm9vayIsIHdoaWNoIGlzbid0CisgICAgLy8gVGhpcyBsZXRzIGFu
IGF1dGhvciBzcGVjaWZ5IHNvcnRpbmcgcnVsZXMsIGUuZy4gImRlX0RFQGNvbGxhdGlvbj1waG9u
ZWJvb2siLCB3aGljaCBpc24ndAogICAgIC8vIHBvc3NpYmxlIHdpdGggbGFuZ3VhZ2UgYWxvbmUu
Ci0gICAgQ29sbGF0b3IgY29sbGF0b3IoY29tcC0+aGFzX2xhbmcgPyAoY29uc3QgY2hhciopY29t
cC0+bGFuZyA6ICJlbiIpOwotICAgIGNvbGxhdG9yLnNldE9yZGVyTG93ZXJGaXJzdChjb21wLT5s
b3dlcl9maXJzdCk7CisgICAgQ29sbGF0b3IgY29sbGF0b3IoY29tcC0+aGFzX2xhbmcgPyByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihjb21wLT5sYW5nKSA6ICJlbiIsIGNvbXAtPmxvd2Vy
X2ZpcnN0KTsKIAogICAgIC8qIFNoZWxsJ3Mgc29ydCBvZiBub2RlLXNldCAqLwogICAgIGZvciAo
aW5jciA9IGxlbiAvIDI7IGluY3IgPiAwOyBpbmNyIC89IDIpIHsKQEAgLTE5NSwxMSArMTkzLDgg
QEAgdm9pZCB4c2x0VW5pY29kZVNvcnRGdW5jdGlvbih4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciBj
dHh0LCB4bWxOb2RlUHRyICpzb3J0cywgaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0c1tqICsgaW5jcl0tPmZsb2F0dmFsKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRzdCA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHRzdCA9IC0xOwotICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5n
IHN0cjEgPSBTdHJpbmc6OmZyb21VVEY4KChjb25zdCBjaGFyKilyZXN1bHRzW2pdLT5zdHJpbmd2
YWwpOwotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHN0cjIgPSBTdHJpbmc6OmZyb21V
VEY4KChjb25zdCBjaGFyKilyZXN1bHRzW2ogKyBpbmNyXS0+c3RyaW5ndmFsKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRzdCA9IGNvbGxhdG9yLmNvbGxhdGUoc3RyMS5kZXByZWNhdGVkQ2hh
cmFjdGVycygpLCBzdHIxLmxlbmd0aCgpLCBzdHIyLmRlcHJlY2F0ZWRDaGFyYWN0ZXJzKCksIHN0
cjIubGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgdHN0ID0gY29sbGF0b3IuY29sbGF0ZVVU
RjgocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4ocmVzdWx0c1tqXS0+c3RyaW5ndmFsKSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4ocmVzdWx0c1tqICsgaW5jcl0tPnN0cmluZ3Zh
bCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZGVzY2VuZGluZykKICAgICAgICAgICAgICAg
ICAgICAgICAgIHRzdCA9IC10c3Q7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjUwLDExICsyNDUs
OCBAQCB2b2lkIHhzbHRVbmljb2RlU29ydEZ1bmN0aW9uKHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRy
IGN0eHQsIHhtbE5vZGVQdHIgKnNvcnRzLCBpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc1tqICsgaW5jcl0tPmZsb2F0dmFsKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHN0ID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZSB0c3QgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc3RyMSA9IFN0cmluZzo6ZnJv
bVVURjgoKGNvbnN0IGNoYXIqKXJlc1tqXS0+c3RyaW5ndmFsKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU3RyaW5nIHN0cjIgPSBTdHJpbmc6OmZyb21VVEY4KChjb25zdCBjaGFy
KilyZXNbaiArIGluY3JdLT5zdHJpbmd2YWwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0c3QgPSBjb2xsYXRvci5jb2xsYXRlKHN0cjEuZGVwcmVjYXRlZENoYXJhY3RlcnMoKSwg
c3RyMS5sZW5ndGgoKSwgc3RyMi5kZXByZWNhdGVkQ2hhcmFjdGVycygpLCBzdHIyLmxlbmd0aCgp
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdCA9IGNvbGxh
dG9yLmNvbGxhdGVVVEY4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHJlc1tqXS0+c3Ry
aW5ndmFsKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4ocmVzW2ogKyBpbmNyXS0+c3Ry
aW5ndmFsKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlc2MpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRzdCA9IC10c3Q7CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>223713</attachid>
            <date>2014-02-10 07:59:01 -0800</date>
            <delta_ts>2014-02-10 09:18:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-128517-20140210075918.patch</filename>
            <type>text/plain</type>
            <size>25310</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYzNzg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
ZmY1MjUxZDkzZGFlYWE2MTQxNDkzZjQzMzQxZmU3Mjg1N2I3OTk0Li5hNTgyZmY4N2EwNjgyYjc4
ZTA4MmM4OGRmNzZhODJlMTg1ZDM3MzM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNSBAQAorMjAxNC0wMi0wOSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgU3RvcCB1c2luZyBTdHJpbmc6OmRlcHJlY2F0ZWRDaGFyYWN0ZXJzIHRvIGNhbGwg
V1RGOjpDb2xsYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTI4NTE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OnN0cmlu
Z1Byb3RvRnVuY0xvY2FsZUNvbXBhcmUpOiBVc2UgdGhlIGRlZmF1bHQgY29uc3RydWN0b3IgZm9y
IENvbGxhdG9yLCB3aGljaCBub3cKKyAgICAgICAgZ2l2ZXMgdGhlIGRlZmF1bHQgbG9jYWxlIGNv
bGxhdGlvbiBydWxlcy4gVXNlIHRoZSBuZXcgYXJndW1lbnRzIGZvciBDb2xsYXRvcjo6Y29sbGF0
ZSwgd2hpY2gKKyAgICAgICAgYXJlIG5vdyBTdHJpbmdWaWV3LiBUaGVzZSB0d28gY2hhbmdlcyB0
b2dldGhlciBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIGEgc2VwYXJhdGUgaGVscGVyIGZ1bmN0aW9u
LgorCiAyMDE0LTAyLTEwICBQZXRlciBNb2xuYXIgIDxwbW9sbmFyLnUtc3plZ2VkQHBhcnRuZXIu
c2Ftc3VuZy5jb20+CiAKICAgICAgICAgRml4IEVGTCBidWlsZCB3aXRoIElOU1BFQ1RPUiBkaXNh
YmxlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZwppbmRleCAzNGNkNWEwMjU4ZDNlNjJiMjE3YjA3ZmU0ZjVmMTI2ODM1MjM4YmJmLi4xMDMy
ZjMwZjNkYmUwZTdlNzVkY2QxZTM5NmZiMGNhMzNkMmM2ZjMwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBA
CisyMDE0LTAyLTA5ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBT
dG9wIHVzaW5nIFN0cmluZzo6ZGVwcmVjYXRlZENoYXJhY3RlcnMgdG8gY2FsbCBXVEY6OkNvbGxh
dG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjg1
MTcKKworICAgICAgICBXVEYgcGFzc2VzIElDVeKAmXMgZGVwcmVjYXRlZCBVTE9DX1JFUVVFU1RF
RF9MT0NBTEUgdG8gdWNvbF9nZXRMb2NhbGVCeVR5cGUoKQorICAgICAgICByZGFyOi8vcHJvYmxl
bS8xNTE4MzM5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggZml4ZXMgYm90aCBidWdzIGFib3ZlIGJ5IHJld29ya2luZyBXVEY6OkNv
bGxhdG9yLgorCisgICAgICAgICogd3RmL3VuaWNvZGUvQ29sbGF0b3IuaDogRml4ZWQgZm9ybWF0
dGluZy4gR290IHJpZCBvZiB0aGUgQ29sbGF0b3I6OlJlc3VsdCB0eXBlLAorICAgICAgICBzaW5j
ZSB0aGUgY29sbGF0b3IgdXNlcyB0aGUgc2FtZSByZXR1cm4gdmFsdWUgc2NoZW1lIGFzIHN0cmNt
cCBhbmQgYXMgSUNVOyBhbiBpbnQKKyAgICAgICAgd2lsbCBkbyBmb3IgdGhlIHJldHVybiB0eXBl
LiBTaW1wbGlmaWVkIHRoZSBzdXBwb3J0IGZvciBVQ09ORklHX05PX0NPTExBVElPTiBieQorICAg
ICAgICB1c2luZyBhIHNlcGFyYXRlIGNvcHkgb2YgdGhlIGNsYXNzIGRlZmluaXRpb24uIChXZSBz
aG91bGQgY2hlY2sgaWYgYW55b25lIG5lZWRzCisgICAgICAgIFVDT05GSUdfTk9fQ09MTEFUSU9O
IHN1cHBvcnQsIGFuZCByZW1vdmUgaXQgaWYgbm90LikgQ2hhbmdlZCB0aGUgbG93ZXItZmlyc3Qg
ZmxhZworICAgICAgICBmcm9tIGEgc2VwYXJhdGUgZnVuY3Rpb24gdG8gYSBjb25zdHJ1Y3RvciBh
cmd1bWVudC4gQ2hhbmdlZCB0aGUgYXJndW1lbnRzIHRvCisgICAgICAgIHRoZSBjb2xsYXRlIGZ1
bmN0aW9uIHRvIFN0cmluZ1ZpZXcuIEFkZGVkIGEgY29sbGF0ZSBVVEY4IGZ1bmN0aW9uLiBDaGFu
Z2VkIHRoZQorICAgICAgICBtX2NvbGxhdGUgZGF0YSBtZW1iZXIgdG8gbm8gbG9uZ2VyIGJlIG11
dGFibGUgc2luY2Ugd2Ugbm8gbG9uZ2VyIGFsbG9jYXRlIGl0IGxhemlseS4KKworICAgICAgICAq
IHd0Zi91bmljb2RlL0NvbGxhdG9yRGVmYXVsdC5jcHA6CisgICAgICAgIChXVEY6OkNvbGxhdG9y
Ojpjb2xsYXRlKTogUmV3cm90ZSB0byBiZSBzaW1wbGVyLgorICAgICAgICAoV1RGOjpDb2xsYXRv
cjo6Y29sbGF0ZVVURjgpOiBBZGRlZC4gQ29udmVydHMgZnJvbSBVVEYtOCB0byBhIFN0cmluZyBh
bmQgdGhlbiBjYWxscworICAgICAgICB0aGUgY29sbGF0ZSBmdW5jdGlvbiBhYm92ZS4KKworICAg
ICAgICAqIHd0Zi91bmljb2RlL2ljdS9Db2xsYXRvcklDVS5jcHA6IEFkZGVkIGEgRklYTUUgYWJv
dXQgdGhlIGZhY3QgdGhhdCB0aGlzIGZpbGUKKyAgICAgICAgaGFzIHRoZSB3cm9uZyBuYW1lIGFu
ZCBsb2NhdGlvbi4gU2luY2Ugd2UgYWx3YXlzIHVzZSBJQ1UsIHRoZXJlJ3Mgbm8gbmVlZCB0byBt
ZW50aW9uCisgICAgICAgIGl0IGluIHRoZSBmaWxlIG5hbWUuCisgICAgICAgIChXVEY6OmNvcHlB
U0NJSVN0cmluZyk6IEFkZGVkLgorICAgICAgICAoV1RGOjpjb3B5RGVmYXVsdExvY2FsZSk6IEFk
ZGVkLgorICAgICAgICAoV1RGOjpyZXNvbHZlRGVmYXVsdExvY2FsZSk6IEFkZGVkLiBNYXBzIG51
bGwgbG9jYWxlIHRvIGEgZGVmYXVsdCBvbiBNYWMgYW5kIGlPUywKKyAgICAgICAgc2luY2Ugb24g
dGhvc2UgcGxhdGZvcm1zIElDVSBkb2VzIG5vdCB1c2UgdGhlIGNvcnJlY3QgZGVmYXVsdCBsb2Nh
bGUgd2hlbiBwYXNzZWQgbnVsbC4KKyAgICAgICAgKFdURjo6bG9jYWxlc01hdGNoKTogQWRkZWQu
CisgICAgICAgIChXVEY6OkNvbGxhdG9yOjpDb2xsYXRvcik6IE1vdmVkIG1vc3Qgb2YgdGhlIGNv
ZGUgZnJvbSBjcmVhdGVDb2xsYXRvciBoZXJlLgorICAgICAgICBTaW1wbGlmaWVkIGl0IGJ5IHN0
b3JpbmcgdGhlIGNvbGxhdG9yIGNvbmZpZ3VyYXRpb24gYWxvbmcgd2l0aCB0aGUgY29sbGF0b3Ig
aW4gZ2xvYmFscy4KKyAgICAgICAgKFdURjo6Q29sbGF0b3I6On5Db2xsYXRvcik6IE1vdmVkIG1v
c3Qgb2YgdGhlIGNvZGUgZnJvbSByZWxlYXNlQ29sbGF0b3IgaGVyZS4KKyAgICAgICAgKFdURjo6
Z2V0SW5kZXhMYXRpbjEpOiBBZGRlZC4KKyAgICAgICAgKFdURjo6bW92ZUxhdGluMSk6IEFkZGVk
LgorICAgICAgICAoV1RGOjpoYXNOZXh0TGF0aW4xKTogQWRkZWQuCisgICAgICAgIChXVEY6Omhh
c1ByZXZpb3VzTGF0aW4xKTogQWRkZWQuCisgICAgICAgIChXVEY6OmN1cnJlbnRMYXRpbjEpOiBB
ZGRlZC4KKyAgICAgICAgKFdURjo6bmV4dExhdGluMSk6IEFkZGVkLgorICAgICAgICAoV1RGOjpw
cmV2aW91c0xhdGluMSk6IEFkZGVkLgorICAgICAgICAoV1RGOjpnZXRTdGF0ZUxhdGluMSk6IEFk
ZGVkLgorICAgICAgICAoV1RGOjpzZXRTdGF0ZUxhdGluMSk6IEFkZGVkLgorICAgICAgICAoV1RG
OjpjcmVhdGVMYXRpbjFJdGVyYXRvcik6IEFkZGVkLiBVc2VzIHRoZSBmdW5jdGlvbnMgYWJvdmUg
dG8gbWFrZSBhIFVDaGFySXRlcmF0b3IKKyAgICAgICAgdGhhdCB3b3JrcyBmb3IgYSBXVEY6OlN0
cmluZ1ZpZXctc3R5bGUgTGF0aW4tMSBzdHJpbmcuCisgICAgICAgIChXVEY6OmNyZWF0ZUl0ZXJh
dG9yKTogQWRkZWQuIFVzZXMgZWl0aGVyIGNyZWF0ZUxhdGluMUl0ZXJhdG9yIG9yIHVpdGVyX3Nl
dFN0cmluZyB0bworICAgICAgICBtYWtlIGEgVUNoYXJJdGVyYXRvciB0aGF0IHdvcmtzIGZvciBh
IFdURjo6U3RyaW5nVmlldy4KKyAgICAgICAgKFdURjo6Q29sbGF0b3I6OmNvbGxhdGUpOiBDaGFu
Z2VkIHRvIHVzZSB1Y29sX3N0cmNvbGxJdGVyLgorICAgICAgICAoV1RGOjpjcmVhdGVJdGVyYXRv
clVURjgpOiBBZGRlZC4gVXNlcyB1aXRlcl9zZXRVVEY4LgorICAgICAgICAoV1RGOjpDb2xsYXRv
cjo6Y29sbGF0ZVVURjgpOiBBZGRlZC4gTGlrZSBjb2xsYXRlLCBidXQgZm9yIG51bGwtdGVybWlu
YXRlZCBVVEYtOCBzdHJpbmdzLgorCiAyMDE0LTAyLTEwICBUYW1hcyBHZXJnZWx5ICA8dGdlcmdl
bHkudS1zemVnZWRAcGFydG5lci5zYW1zdW5nLmNvbT4KIAogICAgICAgICBDb2RlIGNsZWFudXA6
IFJlbW92ZSBCVUlMRElOR19PTiAvIFRBUkdFVElORyBkZWZpbml0aW9ucy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCAyYmNjOGViNWFlNWViZjNlMmY4YWRiYjgzN2JhN2ZjNDRkMDczNjAwLi5hZTJmNGI3Njg3OTFk
NjNlZGUzMWFlMGUwZmYyMzcyMTYzOTcwYWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTQtMDItMDkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFN0
b3AgdXNpbmcgU3RyaW5nOjpkZXByZWNhdGVkQ2hhcmFjdGVycyB0byBjYWxsIFdURjo6Q29sbGF0
b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODUx
NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogeG1s
L1hTTFRVbmljb2RlU29ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp4c2x0VW5pY29kZVNvcnRG
dW5jdGlvbik6IENyZWF0ZSB0aGUgY29sbGF0b3IgaW4gYSBzaW5nbGUgbGluZSB1c2luZyB0aGUK
KyAgICAgICAgbmV3IGNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgYSBzaG91bGRTb3J0TG93ZXJjYXNl
Rmlyc3QgYm9vbGVhbi4gVXNlIHRoZSBuZXcKKyAgICAgICAgY29sbGF0ZVVURjggZnVuY3Rpb24g
aW5zdGVhZCBvZiB1cGNvbnZlcnRpbmcgVVRGLTggc3RyaW5ncyB0byBVVEYtMTYgYXMgdGhlIG9s
ZCBjb2RlIGRpZC4KKwogMjAxNC0wMi0xMCAgUGV0ZXIgTW9sbmFyICA8cG1vbG5hci51LXN6ZWdl
ZEBwYXJ0bmVyLnNhbXN1bmcuY29tPgogCiAgICAgICAgIEZpeCBFRkwgYnVpbGQgd2l0aCBJTlNQ
RUNUT1IgZGlzYWJsZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cmluZ1Byb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJp
bmdQcm90b3R5cGUuY3BwCmluZGV4IGJmMGFkNzQ3YTk4OTA0MzlmNTVlMWMyMDQyOWRhNzE5ZGE5
NjU2NGEuLjdjZjZhNTM5Y2MyMzY4ODM3ODg1MWQ0MzgzMzI0NDFiYThkYzdiNzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcApAQCAt
NDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUgPHd0Zi9B
U0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdWaWV3Lmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ29sbGF0b3IuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIFdURjsKQEAgLTIzMSwxMyArMjMyLDcgQEAgc3RhdGljIGlubGluZSBT
dHJpbmcgc3Vic3RpdHV0ZUJhY2tyZWZlcmVuY2VzKGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQs
IFN0cmluZ1YKICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50
IGxvY2FsZUNvbXBhcmUoY29uc3QgU3RyaW5nJiBhLCBjb25zdCBTdHJpbmcmIGIpCi17Ci0gICAg
cmV0dXJuIENvbGxhdG9yOjp1c2VyRGVmYXVsdCgpLT5jb2xsYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgOjpVQ2hhcio+KGEuZGVwcmVjYXRlZENoYXJhY3RlcnMoKSksIGEubGVuZ3RoKCksIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgOjpVQ2hhcio+KGIuZGVwcmVjYXRlZENoYXJhY3RlcnMoKSks
IGIubGVuZ3RoKCkpOwotfQotCiBzdHJ1Y3QgU3RyaW5nUmFuZ2UgewotcHVibGljOgogICAgIFN0
cmluZ1JhbmdlKGludCBwb3MsIGludCBsZW4pCiAgICAgICAgIDogcG9zaXRpb24ocG9zKQogICAg
ICAgICAsIGxlbmd0aChsZW4pCkBAIC0xMjk1LDcgKzEyOTAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0xvY2FsZUNvbXBhcmUoRXhlY1N0YXRlKiBleGVj
KQogICAgIFN0cmluZyBzID0gdGhpc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsK
IAogICAgIEpTVmFsdWUgYTAgPSBleGVjLT5hcmd1bWVudCgwKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKGxvY2FsZUNvbXBhcmUocywgYTAudG9TdHJpbmcoZXhlYyktPnZh
bHVlKGV4ZWMpKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoQ29sbGF0
b3IoKS5jb2xsYXRlKHMsIGEwLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKSkpKTsKIH0KIAog
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNCaWcoRXhlY1N0YXRl
KiBleGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdW5pY29kZS9Db2xsYXRvci5oIGIv
U291cmNlL1dURi93dGYvdW5pY29kZS9Db2xsYXRvci5oCmluZGV4IDI3ZDJkMjdkYjIxZjU0ZTRk
YmZhM2U4YTQxNzdmYjc3MDU4YTczODguLjY1Mzk2OWQyNWExMjQ0OGM4ODEwY2ZmYTc5NjY4OTM2
NDExNzQyZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvQ29sbGF0b3IuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL0NvbGxhdG9yLmgKQEAgLTMwLDM2ICszMCw0NSBA
QAogI2RlZmluZSBXVEZfQ29sbGF0b3JfaAogCiAjaW5jbHVkZSA8dW5pY29kZS91Y29uZmlnLmg+
Ci0jaW5jbHVkZSA8dW5pY29kZS91dHlwZXMuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIHN0cnVjdCBVQ29sbGF0b3I7CiAKIG5hbWVz
cGFjZSBXVEYgewogCi0gICAgY2xhc3MgQ29sbGF0b3IgewotICAgICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShDb2xsYXRvcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoK
LSAgICAgICAgZW51bSBSZXN1bHQgeyBFcXVhbCA9IDAsIEdyZWF0ZXIgPSAxLCBMZXNzID0gLTEg
fTsKK2NsYXNzIFN0cmluZ1ZpZXc7CiAKLSAgICAgICAgV1RGX0VYUE9SVF9QUklWQVRFIENvbGxh
dG9yKGNvbnN0IGNoYXIqIGxvY2FsZSk7IC8vIFBhcnNpbmcgaXMgbGVuaWVudDsgZS5nLiBsYW5n
dWFnZSBpZGVudGlmaWVycyAoc3VjaCBhcyAiZW4tVVMiKSBhcmUgYWNjZXB0ZWQsIHRvby4KLSAg
ICAgICAgV1RGX0VYUE9SVF9QUklWQVRFIH5Db2xsYXRvcigpOwotICAgICAgICBXVEZfRVhQT1JU
X1BSSVZBVEUgdm9pZCBzZXRPcmRlckxvd2VyRmlyc3QoYm9vbCk7CisjaWYgVUNPTkZJR19OT19D
T0xMQVRJT04KIAotICAgICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxDb2xsYXRvcj4gdXNlckRlZmF1bHQoKTsKK2NsYXNzIENvbGxhdG9yIHsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBDb2xsYXRvcihjb25zdCBjaGFyKiA9IG51bGxwdHIsIGJvb2wgPSBmYWxz
ZSkgeyB9CiAKLSAgICAgICAgV1RGX0VYUE9SVF9QUklWQVRFIFJlc3VsdCBjb2xsYXRlKGNvbnN0
IDo6VUNoYXIqLCBzaXplX3QsIGNvbnN0IDo6VUNoYXIqLCBzaXplX3QpIGNvbnN0OworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgaW50IGNvbGxhdGUoU3RyaW5nVmlldywgU3RyaW5nVmll
dyk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBpbnQgY29sbGF0ZVVURjgoY29uc3Qg
Y2hhciosIGNvbnN0IGNoYXIqKTsKK307CisKKyNlbHNlCisKK2NsYXNzIENvbGxhdG9yIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb2xsYXRvcik7CitwdWJsaWM6CisgICAgLy8gVGhlIHZh
bHVlIG51bGxwdHIgaXMgYSBzcGVjaWFsIG9uZSBtZWFuaW5nIHRoZSBzeXN0ZW0gZGVmYXVsdCBs
b2NhbGUuCisgICAgLy8gTG9jYWxlIG5hbWUgcGFyc2luZyBpcyBsZW5pZW50OyBlLmcuIGxhbmd1
YWdlIGlkZW50aWZpZXJzIChzdWNoIGFzICJlbi1VUyIpIGFyZSBhY2NlcHRlZCwgdG9vLgorICAg
IFdURl9FWFBPUlRfUFJJVkFURSBleHBsaWNpdCBDb2xsYXRvcihjb25zdCBjaGFyKiBsb2NhbGUg
PSBudWxscHRyLCBib29sIHNob3VsZFNvcnRMb3dlcmNhc2VGaXJzdCA9IGZhbHNlKTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgfkNvbGxhdG9yKCk7CisKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
aW50IGNvbGxhdGUoU3RyaW5nVmlldywgU3RyaW5nVmlldykgY29uc3Q7CisgICAgV1RGX0VYUE9S
VF9QUklWQVRFIGludCBjb2xsYXRlVVRGOChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopIGNvbnN0
OworCitwcml2YXRlOgorICAgIGNoYXIqIG1fbG9jYWxlOworICAgIGJvb2wgbV9zaG91bGRTb3J0
TG93ZXJjYXNlRmlyc3Q7CisgICAgVUNvbGxhdG9yKiBtX2NvbGxhdG9yOworfTsKIAotICAgIHBy
aXZhdGU6Ci0jaWYgIVVDT05GSUdfTk9fQ09MTEFUSU9OCi0gICAgICAgIHZvaWQgY3JlYXRlQ29s
bGF0b3IoKSBjb25zdDsKLSAgICAgICAgdm9pZCByZWxlYXNlQ29sbGF0b3IoKTsKLSAgICAgICAg
bXV0YWJsZSBVQ29sbGF0b3IqIG1fY29sbGF0b3I7CiAjZW5kaWYKLSAgICAgICAgY2hhciogbV9s
b2NhbGU7Ci0gICAgICAgIGJvb2wgbV9sb3dlckZpcnN0OwotICAgIH07CisKIH0KIAogdXNpbmcg
V1RGOjpDb2xsYXRvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvQ29sbGF0
b3JEZWZhdWx0LmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvQ29sbGF0b3JEZWZhdWx0LmNw
cAppbmRleCBkNTZiYjVhMzhhNDFmODRhYjMxNzU3ZjU3YTNmMWIzZmU5MmUwZGQyLi44MGZjNDYw
ODNmNjg4OTU1MmQ1NTRjYzBkNjU0YzRiMDQyMzg0Y2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi91bmljb2RlL0NvbGxhdG9yRGVmYXVsdC5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdW5p
Y29kZS9Db2xsYXRvckRlZmF1bHQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw0MSArMzMsMjcgQEAKIAogbmFtZXNwYWNlIFdU
RiB7CiAKLUNvbGxhdG9yOjpDb2xsYXRvcihjb25zdCBjaGFyKikKK2ludCBDb2xsYXRvcjo6Y29s
bGF0ZShTdHJpbmdWaWV3IGEsIFN0cmluZ1ZpZXcgYikgY29uc3QKIHsKLX0KLQotQ29sbGF0b3I6
On5Db2xsYXRvcigpCi17Ci19CisgICAgdW5zaWduZWQgY29tbW9uTGVuZ3RoID0gc3RkOjptaW4o
YS5sZW5ndGgoKSwgYi5sZW5ndGgoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNv
bW1vbkxlbmd0aDsgKytpKSB7CisgICAgICAgIGlmIChhW2ldIDwgYltpXSkKKyAgICAgICAgICAg
IHJldHVybiAtMTsKKyAgICAgICAgaWYgKGFbaV0gPiBiW2ldKQorICAgICAgICAgICAgcmV0dXJu
IDE7CisgICAgfQogCi12b2lkIENvbGxhdG9yOjpzZXRPcmRlckxvd2VyRmlyc3QoYm9vbCkKLXsK
LX0KKyAgICBpZiAoYS5sZW5ndGgoKSA8IGIubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiAtMTsK
KyAgICBpZiAoYS5sZW5ndGgoKSA+IGIubGVuZ3RoKCkpCisgICAgICAgIHJldHVybiAxOwogCi1z
dGQ6OnVuaXF1ZV9wdHI8Q29sbGF0b3I+IENvbGxhdG9yOjp1c2VyRGVmYXVsdCgpCi17Ci0gICAg
cmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q29sbGF0b3I+KG51bGxwdHIpOworICAgIHJldHVybiAw
OwogfQogCi0vLyBBIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZm9yIHBsYXRmb3JtcyB0aGF0IGxh
Y2sgVW5pY29kZS1hd2FyZSBjb2xsYXRpb24uCi1Db2xsYXRvcjo6UmVzdWx0IENvbGxhdG9yOjpj
b2xsYXRlKGNvbnN0IFVDaGFyKiBsaHMsIHNpemVfdCBsaHNMZW5ndGgsIGNvbnN0IFVDaGFyKiBy
aHMsIHNpemVfdCByaHNMZW5ndGgpIGNvbnN0CitpbnQgQ29sbGF0b3I6OmNvbGxhdGVVVEY4KGNv
bnN0IGNoYXIqIGEsIGNvbnN0IGNoYXIqIGIpIGNvbnN0CiB7Ci0gICAgaW50IGxtaW4gPSBsaHNM
ZW5ndGggPCByaHNMZW5ndGggPyBsaHNMZW5ndGggOiByaHNMZW5ndGg7Ci0gICAgaW50IGwgPSAw
OwotICAgIHdoaWxlIChsIDwgbG1pbiAmJiAqbGhzID09ICpyaHMpIHsKLSAgICAgICAgbGhzKys7
Ci0gICAgICAgIHJocysrOwotICAgICAgICBsKys7Ci0gICAgfQotCi0gICAgaWYgKGwgPCBsbWlu
KQotICAgICAgICByZXR1cm4gKCpsaHMgPiAqcmhzKSA/IEdyZWF0ZXIgOiBMZXNzOwotCi0gICAg
aWYgKGxoc0xlbmd0aCA9PSByaHNMZW5ndGgpCi0gICAgICAgIHJldHVybiBFcXVhbDsKLQotICAg
IHJldHVybiAobGhzTGVuZ3RoID4gcmhzTGVuZ3RoKSA/IEdyZWF0ZXIgOiBMZXNzOworICAgIHJl
dHVybiBjb2xsYXRlKFN0cmluZzo6ZnJvbVVURjgoYSksIFN0cmluZzo6ZnJvbVVURjgoYikpOwog
fQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL2ljdS9Db2xsYXRvcklD
VS5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL2ljdS9Db2xsYXRvcklDVS5jcHAKaW5kZXgg
ZTQwNTliY2RjZmFhOWZjMDJlMTgzMmNkMjIyNzNmMzU2ZGM2ZmY1OS4uM2Q5ZjA2ZjdmY2VlNWRk
OWRlMjMzYmE0N2YyMDQ2ZWE5NjA5ZTA2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdW5p
Y29kZS9pY3UvQ29sbGF0b3JJQ1UuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvaWN1
L0NvbGxhdG9ySUNVLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjksMjIgKzI5LDI1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSA8d3RmL3VuaWNvZGUvQ29sbGF0b3IuaD4KIAorLy8gRklYTUU6IE1lcmdlIHRoaXMg
d2l0aCBDb2xsYXRvckRlZmF1bHQuY3BwIGludG8gYSBzaW5nbGUgQ29sbGF0b3IuY3BwIHNvdXJj
ZSBmaWxlLgorCiAjaWYgIVVDT05GSUdfTk9fQ09MTEFUSU9OCiAKICNpbmNsdWRlIDxtdXRleD4K
LSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMu
aD4KICNpbmNsdWRlIDx1bmljb2RlL3Vjb2wuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNs
dWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVmlldy5o
PgogCi0jaWYgT1MoREFSV0lOKQotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpZiBPUyhE
QVJXSU4pICYmIFVTRShDRikKICNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlv
bi5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNlbmRpZgogCiBuYW1lc3BhY2UgV1RG
IHsKIAogc3RhdGljIFVDb2xsYXRvciogY2FjaGVkQ29sbGF0b3I7CitzdGF0aWMgY2hhciogY2Fj
aGVkQ29sbGF0b3JMb2NhbGU7CitzdGF0aWMgYm9vbCBjYWNoZWRDb2xsYXRvclNob3VsZFNvcnRM
b3dlcmNhc2VGaXJzdDsKIAogc3RhdGljIHN0ZDo6bXV0ZXgmIGNhY2hlZENvbGxhdG9yTXV0ZXgo
KQogewpAQCAtNTMsMTA1ICs1NiwyMjUgQEAgc3RhdGljIHN0ZDo6bXV0ZXgmIGNhY2hlZENvbGxh
dG9yTXV0ZXgoKQogICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXXsKICAgICAgICAgbXV0
ZXggPSBzdGQ6Om1ha2VfdW5pcXVlPHN0ZDo6bXV0ZXg+KCkucmVsZWFzZSgpOwogICAgIH0pOwot
CiAgICAgcmV0dXJuICptdXRleDsKIH0KIAotQ29sbGF0b3I6OkNvbGxhdG9yKGNvbnN0IGNoYXIq
IGxvY2FsZSkKLSAgICA6IG1fY29sbGF0b3IoMCkKLSAgICAsIG1fbG9jYWxlKGxvY2FsZSA/IHN0
cmR1cChsb2NhbGUpIDogMCkKLSAgICAsIG1fbG93ZXJGaXJzdChmYWxzZSkKKyNpZiAhKE9TKERB
UldJTikgJiYgVVNFKENGKSkKKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyKiByZXNvbHZlRGVm
YXVsdExvY2FsZShjb25zdCBjaGFyKiBsb2NhbGUpCiB7CisgICAgcmV0dXJuIGxvY2FsZTsKIH0K
IAotc3RkOjp1bmlxdWVfcHRyPENvbGxhdG9yPiBDb2xsYXRvcjo6dXNlckRlZmF1bHQoKQotewot
I2lmIE9TKERBUldJTikgJiYgVVNFKENGKQotICAgIC8vIE1hYyBPUyBYIGRvZXNuJ3Qgc2V0IFVO
SVggbG9jYWxlIHRvIG1hdGNoIHVzZXItc2VsZWN0ZWQgb25lLCBzbyBJQ1UgZGVmYXVsdCBkb2Vz
bid0IHdvcmsuCi0jaWYgIU9TKElPUykKLSAgICBSZXRhaW5QdHI8Q0ZMb2NhbGVSZWY+IGN1cnJl
bnRMb2NhbGUgPSBhZG9wdENGKENGTG9jYWxlQ29weUN1cnJlbnQoKSk7Ci0gICAgQ0ZTdHJpbmdS
ZWYgY29sbGF0aW9uT3JkZXIgPSAoQ0ZTdHJpbmdSZWYpQ0ZMb2NhbGVHZXRWYWx1ZShjdXJyZW50
TG9jYWxlLmdldCgpLCBrQ0ZMb2NhbGVDb2xsYXRvcklkZW50aWZpZXIpOwogI2Vsc2UKLSAgICBS
ZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGNvbGxhdGlvbk9yZGVyUmV0YWluZXIgPSBhZG9wdENGKChD
RlN0cmluZ1JlZilDRlByZWZlcmVuY2VzQ29weVZhbHVlKENGU1RSKCJBcHBsZUNvbGxhdGlvbk9y
ZGVyIiksIGtDRlByZWZlcmVuY2VzQW55QXBwbGljYXRpb24sIGtDRlByZWZlcmVuY2VzQ3VycmVu
dFVzZXIsIGtDRlByZWZlcmVuY2VzQW55SG9zdCkpOwotICAgIENGU3RyaW5nUmVmIGNvbGxhdGlv
bk9yZGVyID0gY29sbGF0aW9uT3JkZXJSZXRhaW5lci5nZXQoKTsKLSNlbmRpZgotICAgIGNoYXIg
YnVmWzI1Nl07Ci0gICAgaWYgKCFjb2xsYXRpb25PcmRlcikKLSAgICAgICAgcmV0dXJuIHN0ZDo6
bWFrZV91bmlxdWU8Q29sbGF0b3I+KCIiKTsKLSAgICBDRlN0cmluZ0dldENTdHJpbmcoY29sbGF0
aW9uT3JkZXIsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIGtDRlN0cmluZ0VuY29kaW5nQVNDSUkpOwotICAg
IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENvbGxhdG9yPihidWYpOwotI2Vsc2UKLSAgICByZXR1
cm4gc3RkOjptYWtlX3VuaXF1ZTxDb2xsYXRvcj4oc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KDAp
KTsKLSNlbmRpZgotfQogCi1Db2xsYXRvcjo6fkNvbGxhdG9yKCkKK3N0YXRpYyBpbmxpbmUgY2hh
ciogY29weUFTQ0lJU3RyaW5nKENGU3RyaW5nUmVmIHN0cmluZykKIHsKLSAgICByZWxlYXNlQ29s
bGF0b3IoKTsKLSAgICBmcmVlKG1fbG9jYWxlKTsKKyAgICBjaGFyIGJ1ZmZlclsyNTZdOworICAg
IGlmICghQ0ZTdHJpbmdHZXRDU3RyaW5nKHN0cmluZywgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwg
a0NGU3RyaW5nRW5jb2RpbmdBU0NJSSkpCisgICAgICAgIHJldHVybiBzdHJkdXAoIiIpOworICAg
IHJldHVybiBzdHJkdXAoYnVmZmVyKTsKIH0KIAotdm9pZCBDb2xsYXRvcjo6c2V0T3JkZXJMb3dl
ckZpcnN0KGJvb2wgbG93ZXJGaXJzdCkKK3N0YXRpYyBjaGFyKiBjb3B5RGVmYXVsdExvY2FsZSgp
CiB7Ci0gICAgbV9sb3dlckZpcnN0ID0gbG93ZXJGaXJzdDsKKyNpZiAhUExBVEZPUk0oSU9TKQor
ICAgIHJldHVybiBjb3B5QVNDSUlTdHJpbmcoc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdSZWY+KENGTG9j
YWxlR2V0VmFsdWUoYWRvcHRDRihDRkxvY2FsZUNvcHlDdXJyZW50KCkpLmdldCgpLCBrQ0ZMb2Nh
bGVDb2xsYXRvcklkZW50aWZpZXIpKSk7CisjZWxzZQorICAgIC8vIEZJWE1FOiBEb2N1bWVudGF0
aW9uIGNsYWltcyB0aGUgY29kZSBhYm92ZSB3b3VsZCB3b3JrIG9uIGlPUyA0LjAgYW5kIGxhdGVy
LiBBZnRlciB0ZXN0IHRoYXQgd29ya3MsIHdlIHNob3VsZCByZW1vdmUgdGhpcyBhbmQgdXNlIHRo
YXQgaW5zdGVhZC4KKyAgICByZXR1cm4gY29weUFTQ0lJU3RyaW5nKGFkb3B0Q0Yoc3RhdGljX2Nh
c3Q8Q0ZTdHJpbmdSZWY+KENGUHJlZmVyZW5jZXNDb3B5VmFsdWUoQ0ZTVFIoIkFwcGxlQ29sbGF0
aW9uT3JkZXIiKSwga0NGUHJlZmVyZW5jZXNBbnlBcHBsaWNhdGlvbiwga0NGUHJlZmVyZW5jZXND
dXJyZW50VXNlciwga0NGUHJlZmVyZW5jZXNBbnlIb3N0KSkpLmdldCgpKTsKKyNlbmRpZgogfQog
Ci1Db2xsYXRvcjo6UmVzdWx0IENvbGxhdG9yOjpjb2xsYXRlKGNvbnN0IFVDaGFyKiBsaHMsIHNp
emVfdCBsaHNMZW5ndGgsIGNvbnN0IFVDaGFyKiByaHMsIHNpemVfdCByaHNMZW5ndGgpIGNvbnN0
CitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIHJlc29sdmVEZWZhdWx0TG9jYWxlKGNvbnN0IGNo
YXIqIGxvY2FsZSkKIHsKLSAgICBpZiAoIW1fY29sbGF0b3IpCi0gICAgICAgIGNyZWF0ZUNvbGxh
dG9yKCk7CisgICAgaWYgKGxvY2FsZSkKKyAgICAgICAgcmV0dXJuIGxvY2FsZTsKKyAgICAvLyBT
aW5jZSBpT1MgYW5kIE9TIFggZG9uJ3Qgc2V0IFVOSVggbG9jYWxlIHRvIG1hdGNoIHRoZSB1c2Vy
J3Mgc2VsZWN0ZWQgbG9jYWxlLCB0aGUgSUNVIGRlZmF1bHQgbG9jYWxlIGlzIG5vdCB0aGUgcmln
aHQgb25lLgorICAgIC8vIFNvLCBpbnN0ZWFkIG9mIHBhc3NpbmcgbnVsbCwgd2UgZmV0Y2ggdGhl
IG5hbWUgb2YgdGhlIGRlZmF1bHQgbG9jYWxlLgorICAgIHN0YXRpYyBjaGFyKiBkZWZhdWx0TG9j
YWxlID0gY29weURlZmF1bHRMb2NhbGUoKTsKKyAgICByZXR1cm4gZGVmYXVsdExvY2FsZTsKK30K
IAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZXN1bHQ+KHVjb2xfc3RyY29sbChtX2NvbGxhdG9y
LCBsaHMsIGxoc0xlbmd0aCwgcmhzLCByaHNMZW5ndGgpKTsKKyNlbmRpZgorCitzdGF0aWMgaW5s
aW5lIGJvb2wgbG9jYWxlc01hdGNoKGNvbnN0IGNoYXIqIGEsIGNvbnN0IGNoYXIqIGIpCit7Cisg
ICAgLy8gVHdvIG51bGwgbG9jYWxlcyBhcmUgZXF1YWwsIG90aGVyIGxvY2FsZXMgYXJlIGNvbXBh
cmVkIHdpdGggc3RyY21wLgorICAgIHJldHVybiBhID09IGIgfHwgKGEgJiYgYiAmJiAhc3RyY21w
KGEsIGIpKTsKIH0KIAotdm9pZCBDb2xsYXRvcjo6Y3JlYXRlQ29sbGF0b3IoKSBjb25zdAorQ29s
bGF0b3I6OkNvbGxhdG9yKGNvbnN0IGNoYXIqIGxvY2FsZSwgYm9vbCBzaG91bGRTb3J0TG93ZXJj
YXNlRmlyc3QpCiB7Ci0gICAgQVNTRVJUKCFtX2NvbGxhdG9yKTsKICAgICBVRXJyb3JDb2RlIHN0
YXR1cyA9IFVfWkVST19FUlJPUjsKIAogICAgIHsKICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0
ZDo6bXV0ZXg+IGxvY2soY2FjaGVkQ29sbGF0b3JNdXRleCgpKTsKLSAgICAgICAgaWYgKGNhY2hl
ZENvbGxhdG9yKSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBjYWNoZWRDb2xsYXRvckxvY2Fs
ZSA9IHVjb2xfZ2V0TG9jYWxlQnlUeXBlKGNhY2hlZENvbGxhdG9yLCBVTE9DX1JFUVVFU1RFRF9M
T0NBTEUsICZzdGF0dXMpOwotICAgICAgICAgICAgQVNTRVJUKFVfU1VDQ0VTUyhzdGF0dXMpKTsK
LSAgICAgICAgICAgIEFTU0VSVChjYWNoZWRDb2xsYXRvckxvY2FsZSk7Ci0KLSAgICAgICAgICAg
IFVDb2xBdHRyaWJ1dGVWYWx1ZSBjYWNoZWRDb2xsYXRvckxvd2VyRmlyc3QgPSB1Y29sX2dldEF0
dHJpYnV0ZShjYWNoZWRDb2xsYXRvciwgVUNPTF9DQVNFX0ZJUlNULCAmc3RhdHVzKTsKLSAgICAg
ICAgICAgIEFTU0VSVChVX1NVQ0NFU1Moc3RhdHVzKSk7Ci0KLSAgICAgICAgICAgIC8vIEZJWE1F
OiBkZWZhdWx0IGxvY2FsZSBpcyBuZXZlciBtYXRjaGVkLCBiZWNhdXNlIHVjb2xfZ2V0TG9jYWxl
QnlUeXBlIHJldHVybnMgdGhlIGFjdHVhbCBvbmUgdXNlZCwgbm90IDAuCi0gICAgICAgICAgICBp
ZiAobV9sb2NhbGUgJiYgMCA9PSBzdHJjbXAoY2FjaGVkQ29sbGF0b3JMb2NhbGUsIG1fbG9jYWxl
KQotICAgICAgICAgICAgICAgICYmICgoVUNPTF9MT1dFUl9GSVJTVCA9PSBjYWNoZWRDb2xsYXRv
ckxvd2VyRmlyc3QgJiYgbV9sb3dlckZpcnN0KSB8fCAoVUNPTF9VUFBFUl9GSVJTVCA9PSBjYWNo
ZWRDb2xsYXRvckxvd2VyRmlyc3QgJiYgIW1fbG93ZXJGaXJzdCkpKSB7Ci0gICAgICAgICAgICAg
ICAgbV9jb2xsYXRvciA9IGNhY2hlZENvbGxhdG9yOwotICAgICAgICAgICAgICAgIGNhY2hlZENv
bGxhdG9yID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9
CisgICAgICAgIGlmIChjYWNoZWRDb2xsYXRvciAmJiBsb2NhbGVzTWF0Y2goY2FjaGVkQ29sbGF0
b3JMb2NhbGUsIGxvY2FsZSkgJiYgY2FjaGVkQ29sbGF0b3JTaG91bGRTb3J0TG93ZXJjYXNlRmly
c3QgPT0gc2hvdWxkU29ydExvd2VyY2FzZUZpcnN0KSB7CisgICAgICAgICAgICBtX2NvbGxhdG9y
ID0gY2FjaGVkQ29sbGF0b3I7CisgICAgICAgICAgICBtX2xvY2FsZSA9IGNhY2hlZENvbGxhdG9y
TG9jYWxlOworICAgICAgICAgICAgbV9zaG91bGRTb3J0TG93ZXJjYXNlRmlyc3QgPSBzaG91bGRT
b3J0TG93ZXJjYXNlRmlyc3Q7CisgICAgICAgICAgICBjYWNoZWRDb2xsYXRvciA9IG51bGxwdHI7
CisgICAgICAgICAgICBjYWNoZWRDb2xsYXRvckxvY2FsZSA9IG51bGxwdHI7CisgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX2NvbGxhdG9yID0gdWNvbF9vcGVu
KG1fbG9jYWxlLCAmc3RhdHVzKTsKKyAgICBtX2NvbGxhdG9yID0gdWNvbF9vcGVuKHJlc29sdmVE
ZWZhdWx0TG9jYWxlKGxvY2FsZSksICZzdGF0dXMpOwogICAgIGlmIChVX0ZBSUxVUkUoc3RhdHVz
KSkgewogICAgICAgICBzdGF0dXMgPSBVX1pFUk9fRVJST1I7Ci0gICAgICAgIG1fY29sbGF0b3Ig
PSB1Y29sX29wZW4oIiIsICZzdGF0dXMpOyAvLyBGYWxsYmFjayB0byBVbmljb2RlIENvbGxhdGlv
biBBbGdvcml0aG0uCisgICAgICAgIG1fY29sbGF0b3IgPSB1Y29sX29wZW4oIiIsICZzdGF0dXMp
OyAvLyBGYWxsIGJhY2sgdG8gVW5pY29kZSBDb2xsYXRpb24gQWxnb3JpdGhtLgogICAgIH0KICAg
ICBBU1NFUlQoVV9TVUNDRVNTKHN0YXR1cykpOwogCi0gICAgdWNvbF9zZXRBdHRyaWJ1dGUobV9j
b2xsYXRvciwgVUNPTF9DQVNFX0ZJUlNULCBtX2xvd2VyRmlyc3QgPyBVQ09MX0xPV0VSX0ZJUlNU
IDogVUNPTF9VUFBFUl9GSVJTVCwgJnN0YXR1cyk7CisgICAgdWNvbF9zZXRBdHRyaWJ1dGUobV9j
b2xsYXRvciwgVUNPTF9DQVNFX0ZJUlNULCBzaG91bGRTb3J0TG93ZXJjYXNlRmlyc3QgPyBVQ09M
X0xPV0VSX0ZJUlNUIDogVUNPTF9VUFBFUl9GSVJTVCwgJnN0YXR1cyk7CiAgICAgQVNTRVJUKFVf
U1VDQ0VTUyhzdGF0dXMpKTsKIAogICAgIHVjb2xfc2V0QXR0cmlidXRlKG1fY29sbGF0b3IsIFVD
T0xfTk9STUFMSVpBVElPTl9NT0RFLCBVQ09MX09OLCAmc3RhdHVzKTsKICAgICBBU1NFUlQoVV9T
VUNDRVNTKHN0YXR1cykpOworCisgICAgbV9sb2NhbGUgPSBsb2NhbGUgPyBzdHJkdXAobG9jYWxl
KSA6IG51bGxwdHI7CisgICAgbV9zaG91bGRTb3J0TG93ZXJjYXNlRmlyc3QgPSBzaG91bGRTb3J0
TG93ZXJjYXNlRmlyc3Q7CiB9CiAKLXZvaWQgQ29sbGF0b3I6OnJlbGVhc2VDb2xsYXRvcigpCitD
b2xsYXRvcjo6fkNvbGxhdG9yKCkKIHsKICAgICB7CiAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxz
dGQ6Om11dGV4PiBsb2NrKGNhY2hlZENvbGxhdG9yTXV0ZXgoKSk7CiAgICAgICAgIGlmIChjYWNo
ZWRDb2xsYXRvcikKICAgICAgICAgICAgIHVjb2xfY2xvc2UoY2FjaGVkQ29sbGF0b3IpOwogICAg
ICAgICBjYWNoZWRDb2xsYXRvciA9IG1fY29sbGF0b3I7CisgICAgICAgIGNhY2hlZENvbGxhdG9y
TG9jYWxlID0gbV9sb2NhbGU7CisgICAgICAgIGNhY2hlZENvbGxhdG9yU2hvdWxkU29ydExvd2Vy
Y2FzZUZpcnN0ID0gbV9zaG91bGRTb3J0TG93ZXJjYXNlRmlyc3Q7CiAgICAgICAgIG1fY29sbGF0
b3IgPSBudWxscHRyOworICAgICAgICBtX2xvY2FsZSA9IG51bGxwdHI7CisgICAgfQorCisgICAg
ZnJlZShtX2xvY2FsZSk7Cit9CisKK3N0YXRpYyBpbnQzMl90IGdldEluZGV4TGF0aW4xKFVDaGFy
SXRlcmF0b3IqIGl0ZXJhdG9yLCBVQ2hhckl0ZXJhdG9yT3JpZ2luIG9yaWdpbikKK3sKKyAgICBz
d2l0Y2ggKG9yaWdpbikgeworICAgIGNhc2UgVUlURVJfU1RBUlQ6CisgICAgICAgIHJldHVybiBp
dGVyYXRvci0+c3RhcnQ7CisgICAgY2FzZSBVSVRFUl9DVVJSRU5UOgorICAgICAgICByZXR1cm4g
aXRlcmF0b3ItPmluZGV4OworICAgIGNhc2UgVUlURVJfTElNSVQ6CisgICAgICAgIHJldHVybiBp
dGVyYXRvci0+bGltaXQ7CisgICAgY2FzZSBVSVRFUl9aRVJPOgorICAgICAgICByZXR1cm4gMDsK
KyAgICBjYXNlIFVJVEVSX0xFTkdUSDoKKyAgICAgICAgcmV0dXJuIGl0ZXJhdG9yLT5sZW5ndGg7
CiAgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBVX1NFTlRJTkVM
OworfQorCitzdGF0aWMgaW50MzJfdCBtb3ZlTGF0aW4xKFVDaGFySXRlcmF0b3IqIGl0ZXJhdG9y
LCBpbnQzMl90IGRlbHRhLCBVQ2hhckl0ZXJhdG9yT3JpZ2luIG9yaWdpbikKK3sKKyAgICByZXR1
cm4gaXRlcmF0b3ItPmluZGV4ID0gZ2V0SW5kZXhMYXRpbjEoaXRlcmF0b3IsIG9yaWdpbikgKyBk
ZWx0YTsKK30KKworc3RhdGljIFVCb29sIGhhc05leHRMYXRpbjEoVUNoYXJJdGVyYXRvciogaXRl
cmF0b3IpCit7CisgICAgcmV0dXJuIGl0ZXJhdG9yLT5pbmRleCA8IGl0ZXJhdG9yLT5saW1pdDsK
K30KKworc3RhdGljIFVCb29sIGhhc1ByZXZpb3VzTGF0aW4xKFVDaGFySXRlcmF0b3IqIGl0ZXJh
dG9yKQoreworICAgIHJldHVybiBpdGVyYXRvci0+aW5kZXggPiBpdGVyYXRvci0+c3RhcnQ7Cit9
CisKK3N0YXRpYyBVQ2hhcjMyIGN1cnJlbnRMYXRpbjEoVUNoYXJJdGVyYXRvciogaXRlcmF0b3Ip
Cit7CisgICAgQVNTRVJUKGl0ZXJhdG9yLT5pbmRleCA+PSBpdGVyYXRvci0+c3RhcnQpOworICAg
IGlmIChpdGVyYXRvci0+aW5kZXggPj0gaXRlcmF0b3ItPmxpbWl0KQorICAgICAgICByZXR1cm4g
VV9TRU5USU5FTDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgTENoYXIqPihpdGVyYXRv
ci0+Y29udGV4dClbaXRlcmF0b3ItPmluZGV4XTsKK30KKworc3RhdGljIFVDaGFyMzIgbmV4dExh
dGluMShVQ2hhckl0ZXJhdG9yKiBpdGVyYXRvcikKK3sKKyAgICBBU1NFUlQoaXRlcmF0b3ItPmlu
ZGV4ID49IGl0ZXJhdG9yLT5zdGFydCk7CisgICAgaWYgKGl0ZXJhdG9yLT5pbmRleCA+PSBpdGVy
YXRvci0+bGltaXQpCisgICAgICAgIHJldHVybiBVX1NFTlRJTkVMOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxjb25zdCBMQ2hhcio+KGl0ZXJhdG9yLT5jb250ZXh0KVtpdGVyYXRvci0+aW5kZXgr
K107Cit9CisKK3N0YXRpYyBVQ2hhcjMyIHByZXZpb3VzTGF0aW4xKFVDaGFySXRlcmF0b3IqIGl0
ZXJhdG9yKQoreworICAgIGlmIChpdGVyYXRvci0+aW5kZXggPD0gaXRlcmF0b3ItPnN0YXJ0KQor
ICAgICAgICByZXR1cm4gVV9TRU5USU5FTDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qg
TENoYXIqPihpdGVyYXRvci0+Y29udGV4dClbLS1pdGVyYXRvci0+aW5kZXhdOworfQorCitzdGF0
aWMgdWludDMyX3QgZ2V0U3RhdGVMYXRpbjEoY29uc3QgVUNoYXJJdGVyYXRvciogaXRlcmF0b3Ip
Cit7CisgICAgcmV0dXJuIGl0ZXJhdG9yLT5pbmRleDsKK30KKworc3RhdGljIHZvaWQgc2V0U3Rh
dGVMYXRpbjEoVUNoYXJJdGVyYXRvciogaXRlcmF0b3IsIHVpbnQzMl90IHN0YXRlLCBVRXJyb3JD
b2RlKikKK3sKKyAgICBpdGVyYXRvci0+aW5kZXggPSBzdGF0ZTsKK30KKworc3RhdGljIFVDaGFy
SXRlcmF0b3IgY3JlYXRlTGF0aW4xSXRlcmF0b3IoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIGlu
dCBsZW5ndGgpCit7CisgICAgVUNoYXJJdGVyYXRvciBpdGVyYXRvcjsKKyAgICBpdGVyYXRvci5j
b250ZXh0ID0gY2hhcmFjdGVyczsKKyAgICBpdGVyYXRvci5sZW5ndGggPSBsZW5ndGg7CisgICAg
aXRlcmF0b3Iuc3RhcnQgPSAwOworICAgIGl0ZXJhdG9yLmluZGV4ID0gMDsKKyAgICBpdGVyYXRv
ci5saW1pdCA9IGxlbmd0aDsKKyAgICBpdGVyYXRvci5yZXNlcnZlZEZpZWxkID0gMDsKKyAgICBp
dGVyYXRvci5nZXRJbmRleCA9IGdldEluZGV4TGF0aW4xOworICAgIGl0ZXJhdG9yLm1vdmUgPSBt
b3ZlTGF0aW4xOworICAgIGl0ZXJhdG9yLmhhc05leHQgPSBoYXNOZXh0TGF0aW4xOworICAgIGl0
ZXJhdG9yLmhhc1ByZXZpb3VzID0gaGFzUHJldmlvdXNMYXRpbjE7CisgICAgaXRlcmF0b3IuY3Vy
cmVudCA9IGN1cnJlbnRMYXRpbjE7CisgICAgaXRlcmF0b3IubmV4dCA9IG5leHRMYXRpbjE7Cisg
ICAgaXRlcmF0b3IucHJldmlvdXMgPSBwcmV2aW91c0xhdGluMTsKKyAgICBpdGVyYXRvci5yZXNl
cnZlZEZuID0gbnVsbHB0cjsKKyAgICBpdGVyYXRvci5nZXRTdGF0ZSA9IGdldFN0YXRlTGF0aW4x
OworICAgIGl0ZXJhdG9yLnNldFN0YXRlID0gc2V0U3RhdGVMYXRpbjE7CisgICAgcmV0dXJuIGl0
ZXJhdG9yOworfQorCitzdGF0aWMgVUNoYXJJdGVyYXRvciBjcmVhdGVJdGVyYXRvcihTdHJpbmdW
aWV3IHN0cmluZykKK3sKKyAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKQorICAgICAgICByZXR1cm4g
Y3JlYXRlTGF0aW4xSXRlcmF0b3Ioc3RyaW5nLmNoYXJhY3RlcnM4KCksIHN0cmluZy5sZW5ndGgo
KSk7CisgICAgVUNoYXJJdGVyYXRvciBpdGVyYXRvcjsKKyAgICB1aXRlcl9zZXRTdHJpbmcoJml0
ZXJhdG9yLCBzdHJpbmcuY2hhcmFjdGVyczE2KCksIHN0cmluZy5sZW5ndGgoKSk7CisgICAgcmV0
dXJuIGl0ZXJhdG9yOworfQorCitpbnQgQ29sbGF0b3I6OmNvbGxhdGUoU3RyaW5nVmlldyBhLCBT
dHJpbmdWaWV3IGIpIGNvbnN0Cit7CisgICAgVUNoYXJJdGVyYXRvciBpdGVyYXRvckEgPSBjcmVh
dGVJdGVyYXRvcihhKTsKKyAgICBVQ2hhckl0ZXJhdG9yIGl0ZXJhdG9yQiA9IGNyZWF0ZUl0ZXJh
dG9yKGIpOworICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9SOworICAgIGludCBy
ZXN1bHQgPSB1Y29sX3N0cmNvbGxJdGVyKG1fY29sbGF0b3IsICZpdGVyYXRvckEsICZpdGVyYXRv
ckIsICZzdGF0dXMpOworICAgIEFTU0VSVChVX1NVQ0NFU1Moc3RhdHVzKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworc3RhdGljIFVDaGFySXRlcmF0b3IgY3JlYXRlSXRlcmF0b3JVVEY4KGNv
bnN0IGNoYXIqIHN0cmluZykKK3sKKyAgICBVQ2hhckl0ZXJhdG9yIGl0ZXJhdG9yOworICAgIHVp
dGVyX3NldFVURjgoJml0ZXJhdG9yLCBzdHJpbmcsIHN0cmxlbihzdHJpbmcpKTsKKyAgICByZXR1
cm4gaXRlcmF0b3I7Cit9CisKK2ludCBDb2xsYXRvcjo6Y29sbGF0ZVVURjgoY29uc3QgY2hhciog
YSwgY29uc3QgY2hhciogYikgY29uc3QKK3sKKyAgICBVQ2hhckl0ZXJhdG9yIGl0ZXJhdG9yQSA9
IGNyZWF0ZUl0ZXJhdG9yVVRGOChhKTsKKyAgICBVQ2hhckl0ZXJhdG9yIGl0ZXJhdG9yQiA9IGNy
ZWF0ZUl0ZXJhdG9yVVRGOChiKTsKKyAgICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJP
UjsKKyAgICBpbnQgcmVzdWx0ID0gdWNvbF9zdHJjb2xsSXRlcihtX2NvbGxhdG9yLCAmaXRlcmF0
b3JBLCAmaXRlcmF0b3JCLCAmc3RhdHVzKTsKKyAgICBBU1NFUlQoVV9TVUNDRVNTKHN0YXR1cykp
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUveG1sL1hTTFRVbmljb2RlU29ydC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS94bWwvWFNMVFVuaWNvZGVTb3J0LmNwcAppbmRleCA2MTAxZWU1ZWZmOTU0YjEzZWY2NjcxNWM4
OTJkNjJlNGYzMGI3OWNlLi5hYjQ5YTEzZGRhM2I3NzI1MWJmYWM2OWFhMzliMWViMGI2MzQwM2Fm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFVuaWNvZGVTb3J0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFVuaWNvZGVTb3J0LmNwcApAQCAtMzMsNyArMzMsNiBA
QAogCiAjaW5jbHVkZSA8bGlieHNsdC90ZW1wbGF0ZXMuaD4KICNpbmNsdWRlIDxsaWJ4c2x0L3hz
bHR1dGlscy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogI2luY2x1ZGUgPHd0
Zi91bmljb2RlL0NvbGxhdG9yLmg+CiAKICNpZiBPUyhEQVJXSU4pICYmICFQTEFURk9STShFRkwp
ICYmICFQTEFURk9STShHVEspCkBAIC0xNjIsMTAgKzE2MSw5IEBAIHZvaWQgeHNsdFVuaWNvZGVT
b3J0RnVuY3Rpb24oeHNsdFRyYW5zZm9ybUNvbnRleHRQdHIgY3R4dCwgeG1sTm9kZVB0ciAqc29y
dHMsIGluCiAKICAgICAvLyBXZSBhcmUgcGFzc2luZyBhIGxhbmd1YWdlIGlkZW50aWZpZXIgdG8g
YSBmdW5jdGlvbiB0aGF0IGV4cGVjdHMgYSBsb2NhbGUgaWRlbnRpZmllci4KICAgICAvLyBUaGUg
aW1wbGVtZW50YXRpb24gb2YgQ29sbGF0b3Igc2hvdWxkIGJlIGxlbmllbnQsIGFuZCBhY2NlcHQg
Ym90aCAiZW4tVVMiIGFuZCAiZW5fVVMiLCBmb3IgZXhhbXBsZS4KLSAgICAvLyBUaGlzIGxldHMg
YW4gYXV0aG9yIHRvIHJlYWxseSBzcGVjaWZ5IHNvcnRpbmcgcnVsZXMsIGUuZy4gImRlX0RFQGNv
bGxhdGlvbj1waG9uZWJvb2siLCB3aGljaCBpc24ndAorICAgIC8vIFRoaXMgbGV0cyBhbiBhdXRo
b3Igc3BlY2lmeSBzb3J0aW5nIHJ1bGVzLCBlLmcuICJkZV9ERUBjb2xsYXRpb249cGhvbmVib29r
Iiwgd2hpY2ggaXNuJ3QKICAgICAvLyBwb3NzaWJsZSB3aXRoIGxhbmd1YWdlIGFsb25lLgotICAg
IENvbGxhdG9yIGNvbGxhdG9yKGNvbXAtPmhhc19sYW5nID8gKGNvbnN0IGNoYXIqKWNvbXAtPmxh
bmcgOiAiZW4iKTsKLSAgICBjb2xsYXRvci5zZXRPcmRlckxvd2VyRmlyc3QoY29tcC0+bG93ZXJf
Zmlyc3QpOworICAgIENvbGxhdG9yIGNvbGxhdG9yKGNvbXAtPmhhc19sYW5nID8gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4oY29tcC0+bGFuZykgOiAiZW4iLCBjb21wLT5sb3dlcl9maXJz
dCk7CiAKICAgICAvKiBTaGVsbCdzIHNvcnQgb2Ygbm9kZS1zZXQgKi8KICAgICBmb3IgKGluY3Ig
PSBsZW4gLyAyOyBpbmNyID4gMDsgaW5jciAvPSAyKSB7CkBAIC0xOTUsMTEgKzE5Myw4IEBAIHZv
aWQgeHNsdFVuaWNvZGVTb3J0RnVuY3Rpb24oeHNsdFRyYW5zZm9ybUNvbnRleHRQdHIgY3R4dCwg
eG1sTm9kZVB0ciAqc29ydHMsIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdHNbaiArIGluY3JdLT5mbG9hdHZhbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
c3QgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB0c3QgPSAtMTsKLSAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdHIx
ID0gU3RyaW5nOjpmcm9tVVRGOCgoY29uc3QgY2hhciopcmVzdWx0c1tqXS0+c3RyaW5ndmFsKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdHIyID0gU3RyaW5nOjpmcm9tVVRGOCgo
Y29uc3QgY2hhciopcmVzdWx0c1tqICsgaW5jcl0tPnN0cmluZ3ZhbCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB0c3QgPSBjb2xsYXRvci5jb2xsYXRlKHN0cjEuZGVwcmVjYXRlZENoYXJhY3Rl
cnMoKSwgc3RyMS5sZW5ndGgoKSwgc3RyMi5kZXByZWNhdGVkQ2hhcmFjdGVycygpLCBzdHIyLmxl
bmd0aCgpKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHRzdCA9IGNvbGxhdG9yLmNvbGxhdGVVVEY4KHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHJlc3VsdHNbal0tPnN0cmluZ3ZhbCksIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHJlc3VsdHNbaiArIGluY3JdLT5zdHJpbmd2YWwpKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGRlc2NlbmRpbmcpCiAgICAgICAgICAgICAgICAgICAg
ICAgICB0c3QgPSAtdHN0OwogICAgICAgICAgICAgICAgIH0KQEAgLTI1MCwxMSArMjQ1LDggQEAg
dm9pZCB4c2x0VW5pY29kZVNvcnRGdW5jdGlvbih4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciBjdHh0
LCB4bWxOb2RlUHRyICpzb3J0cywgaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXNbaiArIGluY3JdLT5mbG9hdHZhbCkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRzdCA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UgdHN0ID0gLTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHN0cjEgPSBTdHJpbmc6OmZyb21VVEY4
KChjb25zdCBjaGFyKilyZXNbal0tPnN0cmluZ3ZhbCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFN0cmluZyBzdHIyID0gU3RyaW5nOjpmcm9tVVRGOCgoY29uc3QgY2hhciopcmVz
W2ogKyBpbmNyXS0+c3RyaW5ndmFsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHN0ID0gY29sbGF0b3IuY29sbGF0ZShzdHIxLmRlcHJlY2F0ZWRDaGFyYWN0ZXJzKCksIHN0cjEu
bGVuZ3RoKCksIHN0cjIuZGVwcmVjYXRlZENoYXJhY3RlcnMoKSwgc3RyMi5sZW5ndGgoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c3QgPSBjb2xsYXRvci5j
b2xsYXRlVVRGOChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihyZXNbal0tPnN0cmluZ3Zh
bCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHJlc1tqICsgaW5jcl0tPnN0cmluZ3Zh
bCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXNjKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0c3QgPSAtdHN0OwogICAgICAgICAgICAgICAgICAgICAgICAg
fQo=
</data>
<flag name="review"
          id="247776"
          type_id="1"
          status="+"
          setter="ap"
    />
    <flag name="commit-queue"
          id="247777"
          type_id="3"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>223719</attachid>
            <date>2014-02-10 09:20:14 -0800</date>
            <delta_ts>2014-02-10 09:20:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-128517-20140210092032.patch</filename>
            <type>text/plain</type>
            <size>25651</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTYzNzkwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
MmI3OTE5YmM4YTFmYzZkOTdjZTUwYjQ0NDhiMGFmNmNhMzM4YjRmLi4xOWY4Y2ZlMDhiNzIwOTI4
MjhiYThmMjFmMzRjOTRjNDU4MGY2YTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNSBAQAorMjAxNC0wMi0xMCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgU3RvcCB1c2luZyBTdHJpbmc6OmRlcHJlY2F0ZWRDaGFyYWN0ZXJzIHRvIGNhbGwg
V1RGOjpDb2xsYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTI4NTE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OnN0cmlu
Z1Byb3RvRnVuY0xvY2FsZUNvbXBhcmUpOiBVc2UgdGhlIGRlZmF1bHQgY29uc3RydWN0b3IgZm9y
IENvbGxhdG9yLCB3aGljaCBub3cKKyAgICAgICAgZ2l2ZXMgdGhlIGRlZmF1bHQgbG9jYWxlIGNv
bGxhdGlvbiBydWxlcy4gVXNlIHRoZSBuZXcgYXJndW1lbnRzIGZvciBDb2xsYXRvcjo6Y29sbGF0
ZSwgd2hpY2gKKyAgICAgICAgYXJlIG5vdyBTdHJpbmdWaWV3LiBUaGVzZSB0d28gY2hhbmdlcyB0
b2dldGhlciBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIGEgc2VwYXJhdGUgaGVscGVyIGZ1bmN0aW9u
LgorCiAyMDE0LTAyLTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgPDEvMTAwIHByb2JhYmlsaXR5IEZUTCBmYWlsdXJlOiB2OC12Ni92OC1kZWx0YWJsdWUuanMu
ZnRsLWVhZ2VyOiBFeGNlcHRpb246IFR5cGVFcnJvcjogdW5kZWZpbmVkIGlzIG5vdCBhbiBvYmpl
Y3QgKGV2YWx1YXRpbmcgJ2MuaXNJbnB1dCcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDM0Y2Q1YTAyNThkM2U2MmIyMTdiMDdm
ZTRmNWYxMjY4MzUyMzhiYmYuLjFlZGFlMmQzNDVkODRmNTUxYmUwNjJiNzIxOGUwZDdiNzJkMWU4
OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMTQtMDItMTAgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgdXNpbmcgU3RyaW5nOjpkZXByZWNhdGVkQ2hhcmFj
dGVycyB0byBjYWxsIFdURjo6Q29sbGF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyODUxNworCisgICAgICAgIFdURiBwYXNzZXMgSUNV4oCZcyBk
ZXByZWNhdGVkIFVMT0NfUkVRVUVTVEVEX0xPQ0FMRSB0byB1Y29sX2dldExvY2FsZUJ5VHlwZSgp
CisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzE1MTgzMzkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBmaXhlcyBib3RoIGJ1Z3MgYWJv
dmUgYnkgcmV3b3JraW5nIFdURjo6Q29sbGF0b3IuCisKKyAgICAgICAgKiB3dGYvdW5pY29kZS9D
b2xsYXRvci5oOiBGaXhlZCBmb3JtYXR0aW5nLiBHb3QgcmlkIG9mIHRoZSBDb2xsYXRvcjo6UmVz
dWx0IHR5cGUsCisgICAgICAgIHNpbmNlIHRoZSBjb2xsYXRvciB1c2VzIHRoZSBzYW1lIHJldHVy
biB2YWx1ZSBzY2hlbWUgYXMgc3RyY21wIGFuZCBhcyBJQ1U7IGFuIGludAorICAgICAgICB3aWxs
IGRvIGZvciB0aGUgcmV0dXJuIHR5cGUuIFNpbXBsaWZpZWQgdGhlIHN1cHBvcnQgZm9yIFVDT05G
SUdfTk9fQ09MTEFUSU9OIGJ5CisgICAgICAgIHVzaW5nIGEgc2VwYXJhdGUgY29weSBvZiB0aGUg
Y2xhc3MgZGVmaW5pdGlvbi4gKFdlIHNob3VsZCBjaGVjayBpZiBhbnlvbmUgbmVlZHMKKyAgICAg
ICAgVUNPTkZJR19OT19DT0xMQVRJT04gc3VwcG9ydCwgYW5kIHJlbW92ZSBpdCBpZiBub3QuKSBD
aGFuZ2VkIHRoZSBsb3dlci1maXJzdCBmbGFnCisgICAgICAgIGZyb20gYSBzZXBhcmF0ZSBmdW5j
dGlvbiB0byBhIGNvbnN0cnVjdG9yIGFyZ3VtZW50LiBDaGFuZ2VkIHRoZSBhcmd1bWVudHMgdG8K
KyAgICAgICAgdGhlIGNvbGxhdGUgZnVuY3Rpb24gdG8gU3RyaW5nVmlldy4gQWRkZWQgYSBjb2xs
YXRlIFVURjggZnVuY3Rpb24uIENoYW5nZWQgdGhlCisgICAgICAgIG1fY29sbGF0ZSBkYXRhIG1l
bWJlciB0byBubyBsb25nZXIgYmUgbXV0YWJsZSBzaW5jZSB3ZSBubyBsb25nZXIgYWxsb2NhdGUg
aXQgbGF6aWx5LgorCisgICAgICAgICogd3RmL3VuaWNvZGUvQ29sbGF0b3JEZWZhdWx0LmNwcDoK
KyAgICAgICAgKFdURjo6Q29sbGF0b3I6OmNvbGxhdGUpOiBSZXdyb3RlIHRvIGJlIHNpbXBsZXIu
CisgICAgICAgIChXVEY6OkNvbGxhdG9yOjpjb2xsYXRlVVRGOCk6IEFkZGVkLiBDb252ZXJ0cyBm
cm9tIFVURi04IHRvIGEgU3RyaW5nIGFuZCB0aGVuIGNhbGxzCisgICAgICAgIHRoZSBjb2xsYXRl
IGZ1bmN0aW9uIGFib3ZlLgorCisgICAgICAgICogd3RmL3VuaWNvZGUvaWN1L0NvbGxhdG9ySUNV
LmNwcDogQWRkZWQgYSBGSVhNRSBhYm91dCB0aGUgZmFjdCB0aGF0IHRoaXMgZmlsZQorICAgICAg
ICBoYXMgdGhlIHdyb25nIG5hbWUgYW5kIGxvY2F0aW9uLiBTaW5jZSB3ZSBhbHdheXMgdXNlIElD
VSwgdGhlcmUncyBubyBuZWVkIHRvIG1lbnRpb24KKyAgICAgICAgaXQgaW4gdGhlIGZpbGUgbmFt
ZS4KKyAgICAgICAgKFdURjo6Y29weUFTQ0lJU3RyaW5nKTogQWRkZWQuCisgICAgICAgIChXVEY6
OmNvcHlEZWZhdWx0TG9jYWxlKTogQWRkZWQuCisgICAgICAgIChXVEY6OnJlc29sdmVEZWZhdWx0
TG9jYWxlKTogQWRkZWQuIE1hcHMgbnVsbCBsb2NhbGUgdG8gYSBkZWZhdWx0IG9uIE1hYyBhbmQg
aU9TLAorICAgICAgICBzaW5jZSBvbiB0aG9zZSBwbGF0Zm9ybXMgSUNVIGRvZXMgbm90IHVzZSB0
aGUgY29ycmVjdCBkZWZhdWx0IGxvY2FsZSB3aGVuIHBhc3NlZCBudWxsLgorICAgICAgICAoV1RG
Ojpsb2NhbGVzTWF0Y2gpOiBBZGRlZC4KKyAgICAgICAgKFdURjo6Q29sbGF0b3I6OkNvbGxhdG9y
KTogTW92ZWQgbW9zdCBvZiB0aGUgY29kZSBmcm9tIGNyZWF0ZUNvbGxhdG9yIGhlcmUuCisgICAg
ICAgIFNpbXBsaWZpZWQgaXQgYnkgc3RvcmluZyB0aGUgY29sbGF0b3IgY29uZmlndXJhdGlvbiBh
bG9uZyB3aXRoIHRoZSBjb2xsYXRvciBpbiBnbG9iYWxzLgorICAgICAgICAoV1RGOjpDb2xsYXRv
cjo6fkNvbGxhdG9yKTogTW92ZWQgbW9zdCBvZiB0aGUgY29kZSBmcm9tIHJlbGVhc2VDb2xsYXRv
ciBoZXJlLgorICAgICAgICAoV1RGOjpnZXRJbmRleExhdGluMSk6IEFkZGVkLgorICAgICAgICAo
V1RGOjptb3ZlTGF0aW4xKTogQWRkZWQuCisgICAgICAgIChXVEY6Omhhc05leHRMYXRpbjEpOiBB
ZGRlZC4KKyAgICAgICAgKFdURjo6aGFzUHJldmlvdXNMYXRpbjEpOiBBZGRlZC4KKyAgICAgICAg
KFdURjo6Y3VycmVudExhdGluMSk6IEFkZGVkLgorICAgICAgICAoV1RGOjpuZXh0TGF0aW4xKTog
QWRkZWQuCisgICAgICAgIChXVEY6OnByZXZpb3VzTGF0aW4xKTogQWRkZWQuCisgICAgICAgIChX
VEY6OmdldFN0YXRlTGF0aW4xKTogQWRkZWQuCisgICAgICAgIChXVEY6OnNldFN0YXRlTGF0aW4x
KTogQWRkZWQuCisgICAgICAgIChXVEY6OmNyZWF0ZUxhdGluMUl0ZXJhdG9yKTogQWRkZWQuIFVz
ZXMgdGhlIGZ1bmN0aW9ucyBhYm92ZSB0byBtYWtlIGEgVUNoYXJJdGVyYXRvcgorICAgICAgICB0
aGF0IHdvcmtzIGZvciBhIFdURjo6U3RyaW5nVmlldy1zdHlsZSBMYXRpbi0xIHN0cmluZy4KKyAg
ICAgICAgKFdURjo6Y3JlYXRlSXRlcmF0b3IpOiBBZGRlZC4gVXNlcyBlaXRoZXIgY3JlYXRlTGF0
aW4xSXRlcmF0b3Igb3IgdWl0ZXJfc2V0U3RyaW5nIHRvCisgICAgICAgIG1ha2UgYSBVQ2hhckl0
ZXJhdG9yIHRoYXQgd29ya3MgZm9yIGEgV1RGOjpTdHJpbmdWaWV3LgorICAgICAgICAoV1RGOjpD
b2xsYXRvcjo6Y29sbGF0ZSk6IENoYW5nZWQgdG8gdXNlIHVjb2xfc3RyY29sbEl0ZXIuCisgICAg
ICAgIChXVEY6OmNyZWF0ZUl0ZXJhdG9yVVRGOCk6IEFkZGVkLiBVc2VzIHVpdGVyX3NldFVURjgu
CisgICAgICAgIChXVEY6OkNvbGxhdG9yOjpjb2xsYXRlVVRGOCk6IEFkZGVkLiBMaWtlIGNvbGxh
dGUsIGJ1dCBmb3IgbnVsbC10ZXJtaW5hdGVkIFVURi04IHN0cmluZ3MuCisKIDIwMTQtMDItMTAg
IFRhbWFzIEdlcmdlbHkgIDx0Z2VyZ2VseS51LXN6ZWdlZEBwYXJ0bmVyLnNhbXN1bmcuY29tPgog
CiAgICAgICAgIENvZGUgY2xlYW51cDogUmVtb3ZlIEJVSUxESU5HX09OIC8gVEFSR0VUSU5HIGRl
ZmluaXRpb25zLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDRlZjdjMjJkNjNhYjQzZDE4Zjg0NjIyOGJhMTkxOWE0
ZTAyYjg2YzkuLmRiMGVjMTI5MGE5NzFhYjIzYzU0ZmYxNjBhOTg3ODEzYTI4NGNiYWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxNC0wMi0xMCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBh
cHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2luZyBTdHJpbmc6OmRlcHJlY2F0ZWRDaGFyYWN0
ZXJzIHRvIGNhbGwgV1RGOjpDb2xsYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI4NTE3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiB4bWwvWFNMVFVuaWNvZGVTb3J0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnhzbHRVbmljb2RlU29ydEZ1bmN0aW9uKTogQ3JlYXRlIHRoZSBjb2xsYXRvciBpbiBh
IHNpbmdsZSBsaW5lIHVzaW5nIHRoZQorICAgICAgICBuZXcgY29uc3RydWN0b3IgdGhhdCB0YWtl
cyBhIHNob3VsZFNvcnRMb3dlcmNhc2VGaXJzdCBib29sZWFuLiBVc2UgdGhlIG5ldworICAgICAg
ICBjb2xsYXRlVVRGOCBmdW5jdGlvbiBpbnN0ZWFkIG9mIHVwY29udmVydGluZyBVVEYtOCBzdHJp
bmdzIHRvIFVURi0xNiBhcyB0aGUgb2xkIGNvZGUgZGlkLgorCiAyMDE0LTAyLTEwICBDaGFuZ2h1
biBLYW5nICA8dGVtb29jaGluQGNvbXBhbnkxMDAubmV0PgogCiAgICAgICAgIFJlbW92ZSB1bm5l
Y2Vzc2FyeSBjb21tZW50IGxpbmVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKaW5kZXggYmYwYWQ3NDdhOTg5MDQzOWY1NWUxYzIwNDI5
ZGE3MTlkYTk2NTY0YS4uN2NmNmE1MzljYzIzNjg4Mzc4ODUxZDQzODMzMjQ0MWJhOGRjN2I3MyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUu
Y3BwCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0LmgiCiAjaW5jbHVk
ZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Db2xsYXRv
ci5oPgogCiB1c2luZyBuYW1lc3BhY2UgV1RGOwpAQCAtMjMxLDEzICsyMzIsNyBAQCBzdGF0aWMg
aW5saW5lIFN0cmluZyBzdWJzdGl0dXRlQmFja3JlZmVyZW5jZXMoY29uc3QgU3RyaW5nJiByZXBs
YWNlbWVudCwgU3RyaW5nVgogICAgIHJldHVybiByZXBsYWNlbWVudDsKIH0KIAotc3RhdGljIGlu
bGluZSBpbnQgbG9jYWxlQ29tcGFyZShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IFN0cmluZyYgYikK
LXsKLSAgICByZXR1cm4gQ29sbGF0b3I6OnVzZXJEZWZhdWx0KCktPmNvbGxhdGUocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCA6OlVDaGFyKj4oYS5kZXByZWNhdGVkQ2hhcmFjdGVycygpKSwgYS5sZW5n
dGgoKSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCA6OlVDaGFyKj4oYi5kZXByZWNhdGVkQ2hhcmFj
dGVycygpKSwgYi5sZW5ndGgoKSk7Ci19Ci0KIHN0cnVjdCBTdHJpbmdSYW5nZSB7Ci1wdWJsaWM6
CiAgICAgU3RyaW5nUmFuZ2UoaW50IHBvcywgaW50IGxlbikKICAgICAgICAgOiBwb3NpdGlvbihw
b3MpCiAgICAgICAgICwgbGVuZ3RoKGxlbikKQEAgLTEyOTUsNyArMTI5MCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTG9jYWxlQ29tcGFyZShFeGVjU3Rh
dGUqIGV4ZWMpCiAgICAgU3RyaW5nIHMgPSB0aGlzVmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOwogCiAgICAgSlNWYWx1ZSBhMCA9IGV4ZWMtPmFyZ3VtZW50KDApOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobG9jYWxlQ29tcGFyZShzLCBhMC50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYykpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cihDb2xsYXRvcigpLmNvbGxhdGUocywgYTAudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpKSkp
OwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0JpZyhF
eGVjU3RhdGUqIGV4ZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL0NvbGxh
dG9yLmggYi9Tb3VyY2UvV1RGL3d0Zi91bmljb2RlL0NvbGxhdG9yLmgKaW5kZXggMjdkMmQyN2Ri
MjFmNTRlNGRiZmEzZThhNDE3N2ZiNzcwNThhNzM4OC4uNjUzOTY5ZDI1YTEyNDQ4Yzg4MTBjZmZh
Nzk2Njg5MzY0MTE3NDJkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdW5pY29kZS9Db2xs
YXRvci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvQ29sbGF0b3IuaApAQCAtMzAsMzYg
KzMwLDQ1IEBACiAjZGVmaW5lIFdURl9Db2xsYXRvcl9oCiAKICNpbmNsdWRlIDx1bmljb2RlL3Vj
b25maWcuaD4KLSNpbmNsdWRlIDx1bmljb2RlL3V0eXBlcy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAogc3RydWN0IFVDb2xsYXRvcjsK
IAogbmFtZXNwYWNlIFdURiB7CiAKLSAgICBjbGFzcyBDb2xsYXRvciB7Ci0gICAgICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENvbGxhdG9yKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAg
cHVibGljOgotICAgICAgICBlbnVtIFJlc3VsdCB7IEVxdWFsID0gMCwgR3JlYXRlciA9IDEsIExl
c3MgPSAtMSB9OworY2xhc3MgU3RyaW5nVmlldzsKIAotICAgICAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgQ29sbGF0b3IoY29uc3QgY2hhciogbG9jYWxlKTsgLy8gUGFyc2luZyBpcyBsZW5pZW50OyBl
LmcuIGxhbmd1YWdlIGlkZW50aWZpZXJzIChzdWNoIGFzICJlbi1VUyIpIGFyZSBhY2NlcHRlZCwg
dG9vLgotICAgICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgfkNvbGxhdG9yKCk7Ci0gICAgICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldE9yZGVyTG93ZXJGaXJzdChib29sKTsKKyNpZiBVQ09O
RklHX05PX0NPTExBVElPTgogCi0gICAgICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPENvbGxhdG9yPiB1c2VyRGVmYXVsdCgpOworY2xhc3MgQ29sbGF0b3Igewor
cHVibGljOgorICAgIGV4cGxpY2l0IENvbGxhdG9yKGNvbnN0IGNoYXIqID0gbnVsbHB0ciwgYm9v
bCA9IGZhbHNlKSB7IH0KIAotICAgICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgUmVzdWx0IGNvbGxh
dGUoY29uc3QgOjpVQ2hhciosIHNpemVfdCwgY29uc3QgOjpVQ2hhciosIHNpemVfdCkgY29uc3Q7
CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBpbnQgY29sbGF0ZShTdHJpbmdWaWV3LCBT
dHJpbmdWaWV3KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGludCBjb2xsYXRlVVRG
OChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOworfTsKKworI2Vsc2UKKworY2xhc3MgQ29sbGF0
b3IgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbGxhdG9yKTsKK3B1YmxpYzoKKyAgICAv
LyBUaGUgdmFsdWUgbnVsbHB0ciBpcyBhIHNwZWNpYWwgb25lIG1lYW5pbmcgdGhlIHN5c3RlbSBk
ZWZhdWx0IGxvY2FsZS4KKyAgICAvLyBMb2NhbGUgbmFtZSBwYXJzaW5nIGlzIGxlbmllbnQ7IGUu
Zy4gbGFuZ3VhZ2UgaWRlbnRpZmllcnMgKHN1Y2ggYXMgImVuLVVTIikgYXJlIGFjY2VwdGVkLCB0
b28uCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIGV4cGxpY2l0IENvbGxhdG9yKGNvbnN0IGNoYXIq
IGxvY2FsZSA9IG51bGxwdHIsIGJvb2wgc2hvdWxkU29ydExvd2VyY2FzZUZpcnN0ID0gZmFsc2Up
OworICAgIFdURl9FWFBPUlRfUFJJVkFURSB+Q29sbGF0b3IoKTsKKworICAgIFdURl9FWFBPUlRf
UFJJVkFURSBpbnQgY29sbGF0ZShTdHJpbmdWaWV3LCBTdHJpbmdWaWV3KSBjb25zdDsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgaW50IGNvbGxhdGVVVEY4KGNvbnN0IGNoYXIqLCBjb25zdCBjaGFy
KikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgY2hhciogbV9sb2NhbGU7CisgICAgYm9vbCBtX3No
b3VsZFNvcnRMb3dlcmNhc2VGaXJzdDsKKyAgICBVQ29sbGF0b3IqIG1fY29sbGF0b3I7Cit9Owog
Ci0gICAgcHJpdmF0ZToKLSNpZiAhVUNPTkZJR19OT19DT0xMQVRJT04KLSAgICAgICAgdm9pZCBj
cmVhdGVDb2xsYXRvcigpIGNvbnN0OwotICAgICAgICB2b2lkIHJlbGVhc2VDb2xsYXRvcigpOwot
ICAgICAgICBtdXRhYmxlIFVDb2xsYXRvciogbV9jb2xsYXRvcjsKICNlbmRpZgotICAgICAgICBj
aGFyKiBtX2xvY2FsZTsKLSAgICAgICAgYm9vbCBtX2xvd2VyRmlyc3Q7Ci0gICAgfTsKKwogfQog
CiB1c2luZyBXVEY6OkNvbGxhdG9yOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvdW5pY29k
ZS9Db2xsYXRvckRlZmF1bHQuY3BwIGIvU291cmNlL1dURi93dGYvdW5pY29kZS9Db2xsYXRvckRl
ZmF1bHQuY3BwCmluZGV4IGQ1NmJiNWEzOGE0MWY4NGFiMzE3NTdmNTdhM2YxYjNmZTkyZTBkZDIu
LjgwZmM0NjA4M2Y2ODg5NTUyZDU1NGNjMGQ2NTRjNGIwNDIzODRjYWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvd3RmL3VuaWNvZGUvQ29sbGF0b3JEZWZhdWx0LmNwcAorKysgYi9Tb3VyY2UvV1RG
L3d0Zi91bmljb2RlL0NvbGxhdG9yRGVmYXVsdC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDQxICszMywyNyBAQAogCiBuYW1l
c3BhY2UgV1RGIHsKIAotQ29sbGF0b3I6OkNvbGxhdG9yKGNvbnN0IGNoYXIqKQoraW50IENvbGxh
dG9yOjpjb2xsYXRlKFN0cmluZ1ZpZXcgYSwgU3RyaW5nVmlldyBiKSBjb25zdAogewotfQotCi1D
b2xsYXRvcjo6fkNvbGxhdG9yKCkKLXsKLX0KKyAgICB1bnNpZ25lZCBjb21tb25MZW5ndGggPSBz
dGQ6Om1pbihhLmxlbmd0aCgpLCBiLmxlbmd0aCgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgY29tbW9uTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKGFbaV0gPCBiW2ldKQorICAg
ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoYVtpXSA+IGJbaV0pCisgICAgICAgICAg
ICByZXR1cm4gMTsKKyAgICB9CiAKLXZvaWQgQ29sbGF0b3I6OnNldE9yZGVyTG93ZXJGaXJzdChi
b29sKQotewotfQorICAgIGlmIChhLmxlbmd0aCgpIDwgYi5sZW5ndGgoKSkKKyAgICAgICAgcmV0
dXJuIC0xOworICAgIGlmIChhLmxlbmd0aCgpID4gYi5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJu
IDE7CiAKLXN0ZDo6dW5pcXVlX3B0cjxDb2xsYXRvcj4gQ29sbGF0b3I6OnVzZXJEZWZhdWx0KCkK
LXsKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxDb2xsYXRvcj4obnVsbHB0cik7CisgICAg
cmV0dXJuIDA7CiB9CiAKLS8vIEEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IgcGxhdGZvcm1z
IHRoYXQgbGFjayBVbmljb2RlLWF3YXJlIGNvbGxhdGlvbi4KLUNvbGxhdG9yOjpSZXN1bHQgQ29s
bGF0b3I6OmNvbGxhdGUoY29uc3QgVUNoYXIqIGxocywgc2l6ZV90IGxoc0xlbmd0aCwgY29uc3Qg
VUNoYXIqIHJocywgc2l6ZV90IHJoc0xlbmd0aCkgY29uc3QKK2ludCBDb2xsYXRvcjo6Y29sbGF0
ZVVURjgoY29uc3QgY2hhciogYSwgY29uc3QgY2hhciogYikgY29uc3QKIHsKLSAgICBpbnQgbG1p
biA9IGxoc0xlbmd0aCA8IHJoc0xlbmd0aCA/IGxoc0xlbmd0aCA6IHJoc0xlbmd0aDsKLSAgICBp
bnQgbCA9IDA7Ci0gICAgd2hpbGUgKGwgPCBsbWluICYmICpsaHMgPT0gKnJocykgewotICAgICAg
ICBsaHMrKzsKLSAgICAgICAgcmhzKys7Ci0gICAgICAgIGwrKzsKLSAgICB9Ci0KLSAgICBpZiAo
bCA8IGxtaW4pCi0gICAgICAgIHJldHVybiAoKmxocyA+ICpyaHMpID8gR3JlYXRlciA6IExlc3M7
Ci0KLSAgICBpZiAobGhzTGVuZ3RoID09IHJoc0xlbmd0aCkKLSAgICAgICAgcmV0dXJuIEVxdWFs
OwotCi0gICAgcmV0dXJuIChsaHNMZW5ndGggPiByaHNMZW5ndGgpID8gR3JlYXRlciA6IExlc3M7
CisgICAgcmV0dXJuIGNvbGxhdGUoU3RyaW5nOjpmcm9tVVRGOChhKSwgU3RyaW5nOjpmcm9tVVRG
OChiKSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvaWN1L0Nv
bGxhdG9ySUNVLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3VuaWNvZGUvaWN1L0NvbGxhdG9ySUNVLmNw
cAppbmRleCBlNDA1OWJjZGNmYWE5ZmMwMmUxODMyY2QyMjI3M2YzNTZkYzZmZjU5Li5jZDk4ODg5
NTUwZjQwOWE2YWIxYzU5OTY2ZDZlYWZiZThjZmM5ZGRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RG
L3d0Zi91bmljb2RlL2ljdS9Db2xsYXRvcklDVS5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdW5p
Y29kZS9pY3UvQ29sbGF0b3JJQ1UuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwyMiArMjksMjUgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Db2xsYXRvci5oPgogCisvLyBGSVhNRTogTWVy
Z2UgdGhpcyB3aXRoIENvbGxhdG9yRGVmYXVsdC5jcHAgaW50byBhIHNpbmdsZSBDb2xsYXRvci5j
cHAgc291cmNlIGZpbGUuCisKICNpZiAhVUNPTkZJR19OT19DT0xMQVRJT04KIAogI2luY2x1ZGUg
PG11dGV4PgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmlu
Z0V4dHJhcy5oPgogI2luY2x1ZGUgPHVuaWNvZGUvdWNvbC5oPgotI2luY2x1ZGUgPHN0cmluZy5o
PgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdWaWV3Lmg+CiAKLSNpZiBPUyhEQVJXSU4pCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgor
I2lmIE9TKERBUldJTikgJiYgVVNFKENGKQogI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVG
b3VuZGF0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2VuZGlmCiAKIG5hbWVz
cGFjZSBXVEYgewogCiBzdGF0aWMgVUNvbGxhdG9yKiBjYWNoZWRDb2xsYXRvcjsKK3N0YXRpYyBj
aGFyKiBjYWNoZWRDb2xsYXRvckxvY2FsZTsKK3N0YXRpYyBib29sIGNhY2hlZENvbGxhdG9yU2hv
dWxkU29ydExvd2VyY2FzZUZpcnN0OwogCiBzdGF0aWMgc3RkOjptdXRleCYgY2FjaGVkQ29sbGF0
b3JNdXRleCgpCiB7CkBAIC01MywxMDUgKzU2LDIzMCBAQCBzdGF0aWMgc3RkOjptdXRleCYgY2Fj
aGVkQ29sbGF0b3JNdXRleCgpCiAgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdewogICAg
ICAgICBtdXRleCA9IHN0ZDo6bWFrZV91bmlxdWU8c3RkOjptdXRleD4oKS5yZWxlYXNlKCk7CiAg
ICAgfSk7Ci0KICAgICByZXR1cm4gKm11dGV4OwogfQogCi1Db2xsYXRvcjo6Q29sbGF0b3IoY29u
c3QgY2hhciogbG9jYWxlKQotICAgIDogbV9jb2xsYXRvcigwKQotICAgICwgbV9sb2NhbGUobG9j
YWxlID8gc3RyZHVwKGxvY2FsZSkgOiAwKQotICAgICwgbV9sb3dlckZpcnN0KGZhbHNlKQorI2lm
ICEoT1MoREFSV0lOKSAmJiBVU0UoQ0YpKQorCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIHJl
c29sdmVEZWZhdWx0TG9jYWxlKGNvbnN0IGNoYXIqIGxvY2FsZSkKIHsKKyAgICByZXR1cm4gbG9j
YWxlOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8Q29sbGF0b3I+IENvbGxhdG9yOjp1c2VyRGVmYXVs
dCgpCi17Ci0jaWYgT1MoREFSV0lOKSAmJiBVU0UoQ0YpCi0gICAgLy8gTWFjIE9TIFggZG9lc24n
dCBzZXQgVU5JWCBsb2NhbGUgdG8gbWF0Y2ggdXNlci1zZWxlY3RlZCBvbmUsIHNvIElDVSBkZWZh
dWx0IGRvZXNuJ3Qgd29yay4KLSNpZiAhT1MoSU9TKQotICAgIFJldGFpblB0cjxDRkxvY2FsZVJl
Zj4gY3VycmVudExvY2FsZSA9IGFkb3B0Q0YoQ0ZMb2NhbGVDb3B5Q3VycmVudCgpKTsKLSAgICBD
RlN0cmluZ1JlZiBjb2xsYXRpb25PcmRlciA9IChDRlN0cmluZ1JlZilDRkxvY2FsZUdldFZhbHVl
KGN1cnJlbnRMb2NhbGUuZ2V0KCksIGtDRkxvY2FsZUNvbGxhdG9ySWRlbnRpZmllcik7CiAjZWxz
ZQotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY29sbGF0aW9uT3JkZXJSZXRhaW5lciA9IGFk
b3B0Q0YoKENGU3RyaW5nUmVmKUNGUHJlZmVyZW5jZXNDb3B5VmFsdWUoQ0ZTVFIoIkFwcGxlQ29s
bGF0aW9uT3JkZXIiKSwga0NGUHJlZmVyZW5jZXNBbnlBcHBsaWNhdGlvbiwga0NGUHJlZmVyZW5j
ZXNDdXJyZW50VXNlciwga0NGUHJlZmVyZW5jZXNBbnlIb3N0KSk7Ci0gICAgQ0ZTdHJpbmdSZWYg
Y29sbGF0aW9uT3JkZXIgPSBjb2xsYXRpb25PcmRlclJldGFpbmVyLmdldCgpOwotI2VuZGlmCi0g
ICAgY2hhciBidWZbMjU2XTsKLSAgICBpZiAoIWNvbGxhdGlvbk9yZGVyKQotICAgICAgICByZXR1
cm4gc3RkOjptYWtlX3VuaXF1ZTxDb2xsYXRvcj4oIiIpOwotICAgIENGU3RyaW5nR2V0Q1N0cmlu
Zyhjb2xsYXRpb25PcmRlciwgYnVmLCBzaXplb2YoYnVmKSwga0NGU3RyaW5nRW5jb2RpbmdBU0NJ
SSk7Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Q29sbGF0b3I+KGJ1Zik7Ci0jZWxzZQot
ICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPENvbGxhdG9yPihzdGF0aWNfY2FzdDxjb25zdCBj
aGFyKj4oMCkpOwotI2VuZGlmCi19CiAKLUNvbGxhdG9yOjp+Q29sbGF0b3IoKQorc3RhdGljIGlu
bGluZSBjaGFyKiBjb3B5U2hvcnRBU0NJSVN0cmluZyhDRlN0cmluZ1JlZiBzdHJpbmcpCiB7Ci0g
ICAgcmVsZWFzZUNvbGxhdG9yKCk7Ci0gICAgZnJlZShtX2xvY2FsZSk7CisgICAgLy8gT0sgdG8g
aGF2ZSBhIGZpeGVkIHNpemUgYnVmZmVyIGFuZCB0byBvbmx5IGhhbmRsZSBBU0NJSSBzaW5jZSB3
ZSBvbmx5IHVzZSB0aGlzIGZvciBsb2NhbGUgbmFtZXMuCisgICAgY2hhciBidWZmZXJbMjU2XTsK
KyAgICBpZiAoIUNGU3RyaW5nR2V0Q1N0cmluZyhzdHJpbmcsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZl
ciksIGtDRlN0cmluZ0VuY29kaW5nQVNDSUkpKQorICAgICAgICByZXR1cm4gc3RyZHVwKCIiKTsK
KyAgICByZXR1cm4gc3RyZHVwKGJ1ZmZlcik7CiB9CiAKLXZvaWQgQ29sbGF0b3I6OnNldE9yZGVy
TG93ZXJGaXJzdChib29sIGxvd2VyRmlyc3QpCitzdGF0aWMgY2hhciogY29weURlZmF1bHRMb2Nh
bGUoKQogewotICAgIG1fbG93ZXJGaXJzdCA9IGxvd2VyRmlyc3Q7CisjaWYgIVBMQVRGT1JNKElP
UykKKyAgICByZXR1cm4gY29weVNob3J0QVNDSUlTdHJpbmcoc3RhdGljX2Nhc3Q8Q0ZTdHJpbmdS
ZWY+KENGTG9jYWxlR2V0VmFsdWUoYWRvcHRDRihDRkxvY2FsZUNvcHlDdXJyZW50KCkpLmdldCgp
LCBrQ0ZMb2NhbGVDb2xsYXRvcklkZW50aWZpZXIpKSk7CisjZWxzZQorICAgIC8vIEZJWE1FOiBE
b2N1bWVudGF0aW9uIGNsYWltcyB0aGUgY29kZSBhYm92ZSB3b3VsZCB3b3JrIG9uIGlPUyA0LjAg
YW5kIGxhdGVyLiBBZnRlciB0ZXN0IHRoYXQgd29ya3MsIHdlIHNob3VsZCByZW1vdmUgdGhpcyBh
bmQgdXNlIHRoYXQgaW5zdGVhZC4KKyAgICByZXR1cm4gY29weVNob3J0QVNDSUlTdHJpbmcoYWRv
cHRDRihzdGF0aWNfY2FzdDxDRlN0cmluZ1JlZj4oQ0ZQcmVmZXJlbmNlc0NvcHlWYWx1ZShDRlNU
UigiQXBwbGVDb2xsYXRpb25PcmRlciIpLCBrQ0ZQcmVmZXJlbmNlc0FueUFwcGxpY2F0aW9uLCBr
Q0ZQcmVmZXJlbmNlc0N1cnJlbnRVc2VyLCBrQ0ZQcmVmZXJlbmNlc0FueUhvc3QpKSkuZ2V0KCkp
OworI2VuZGlmCiB9CiAKLUNvbGxhdG9yOjpSZXN1bHQgQ29sbGF0b3I6OmNvbGxhdGUoY29uc3Qg
VUNoYXIqIGxocywgc2l6ZV90IGxoc0xlbmd0aCwgY29uc3QgVUNoYXIqIHJocywgc2l6ZV90IHJo
c0xlbmd0aCkgY29uc3QKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciogcmVzb2x2ZURlZmF1bHRM
b2NhbGUoY29uc3QgY2hhciogbG9jYWxlKQogewotICAgIGlmICghbV9jb2xsYXRvcikKLSAgICAg
ICAgY3JlYXRlQ29sbGF0b3IoKTsKKyAgICBpZiAobG9jYWxlKQorICAgICAgICByZXR1cm4gbG9j
YWxlOworICAgIC8vIFNpbmNlIGlPUyBhbmQgT1MgWCBkb24ndCBzZXQgVU5JWCBsb2NhbGUgdG8g
bWF0Y2ggdGhlIHVzZXIncyBzZWxlY3RlZCBsb2NhbGUsIHRoZSBJQ1UgZGVmYXVsdCBsb2NhbGUg
aXMgbm90IHRoZSByaWdodCBvbmUuCisgICAgLy8gU28sIGluc3RlYWQgb2YgcGFzc2luZyBudWxs
IHRvIElDVSwgd2UgcGFzcyB0aGUgbmFtZSBvZiB0aGUgdXNlcidzIHNlbGVjdGVkIGxvY2FsZS4K
KyAgICBzdGF0aWMgY2hhciogZGVmYXVsdExvY2FsZTsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgaW5pdGlhbGl6ZURlZmF1bHRMb2NhbGVPbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRp
YWxpemVEZWZhdWx0TG9jYWxlT25jZSwgW117CisgICAgICAgIGRlZmF1bHRMb2NhbGUgPSBjb3B5
RGVmYXVsdExvY2FsZSgpOworICAgIH0pOworICAgIHJldHVybiBkZWZhdWx0TG9jYWxlOworfQor
CisjZW5kaWYKIAotICAgIHJldHVybiBzdGF0aWNfY2FzdDxSZXN1bHQ+KHVjb2xfc3RyY29sbCht
X2NvbGxhdG9yLCBsaHMsIGxoc0xlbmd0aCwgcmhzLCByaHNMZW5ndGgpKTsKK3N0YXRpYyBpbmxp
bmUgYm9vbCBsb2NhbGVzTWF0Y2goY29uc3QgY2hhciogYSwgY29uc3QgY2hhciogYikKK3sKKyAg
ICAvLyBUd28gbnVsbCBsb2NhbGVzIGFyZSBlcXVhbCwgb3RoZXIgbG9jYWxlcyBhcmUgY29tcGFy
ZWQgd2l0aCBzdHJjbXAuCisgICAgcmV0dXJuIGEgPT0gYiB8fCAoYSAmJiBiICYmICFzdHJjbXAo
YSwgYikpOwogfQogCi12b2lkIENvbGxhdG9yOjpjcmVhdGVDb2xsYXRvcigpIGNvbnN0CitDb2xs
YXRvcjo6Q29sbGF0b3IoY29uc3QgY2hhciogbG9jYWxlLCBib29sIHNob3VsZFNvcnRMb3dlcmNh
c2VGaXJzdCkKIHsKLSAgICBBU1NFUlQoIW1fY29sbGF0b3IpOwogICAgIFVFcnJvckNvZGUgc3Rh
dHVzID0gVV9aRVJPX0VSUk9SOwogCiAgICAgewogICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3Rk
OjptdXRleD4gbG9jayhjYWNoZWRDb2xsYXRvck11dGV4KCkpOwotICAgICAgICBpZiAoY2FjaGVk
Q29sbGF0b3IpIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNhY2hlZENvbGxhdG9yTG9jYWxl
ID0gdWNvbF9nZXRMb2NhbGVCeVR5cGUoY2FjaGVkQ29sbGF0b3IsIFVMT0NfUkVRVUVTVEVEX0xP
Q0FMRSwgJnN0YXR1cyk7Ci0gICAgICAgICAgICBBU1NFUlQoVV9TVUNDRVNTKHN0YXR1cykpOwot
ICAgICAgICAgICAgQVNTRVJUKGNhY2hlZENvbGxhdG9yTG9jYWxlKTsKLQotICAgICAgICAgICAg
VUNvbEF0dHJpYnV0ZVZhbHVlIGNhY2hlZENvbGxhdG9yTG93ZXJGaXJzdCA9IHVjb2xfZ2V0QXR0
cmlidXRlKGNhY2hlZENvbGxhdG9yLCBVQ09MX0NBU0VfRklSU1QsICZzdGF0dXMpOwotICAgICAg
ICAgICAgQVNTRVJUKFVfU1VDQ0VTUyhzdGF0dXMpKTsKLQotICAgICAgICAgICAgLy8gRklYTUU6
IGRlZmF1bHQgbG9jYWxlIGlzIG5ldmVyIG1hdGNoZWQsIGJlY2F1c2UgdWNvbF9nZXRMb2NhbGVC
eVR5cGUgcmV0dXJucyB0aGUgYWN0dWFsIG9uZSB1c2VkLCBub3QgMC4KLSAgICAgICAgICAgIGlm
IChtX2xvY2FsZSAmJiAwID09IHN0cmNtcChjYWNoZWRDb2xsYXRvckxvY2FsZSwgbV9sb2NhbGUp
Ci0gICAgICAgICAgICAgICAgJiYgKChVQ09MX0xPV0VSX0ZJUlNUID09IGNhY2hlZENvbGxhdG9y
TG93ZXJGaXJzdCAmJiBtX2xvd2VyRmlyc3QpIHx8IChVQ09MX1VQUEVSX0ZJUlNUID09IGNhY2hl
ZENvbGxhdG9yTG93ZXJGaXJzdCAmJiAhbV9sb3dlckZpcnN0KSkpIHsKLSAgICAgICAgICAgICAg
ICBtX2NvbGxhdG9yID0gY2FjaGVkQ29sbGF0b3I7Ci0gICAgICAgICAgICAgICAgY2FjaGVkQ29s
bGF0b3IgPSBudWxscHRyOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgaWYgKGNhY2hlZENvbGxhdG9yICYmIGxvY2FsZXNNYXRjaChjYWNoZWRDb2xsYXRv
ckxvY2FsZSwgbG9jYWxlKSAmJiBjYWNoZWRDb2xsYXRvclNob3VsZFNvcnRMb3dlcmNhc2VGaXJz
dCA9PSBzaG91bGRTb3J0TG93ZXJjYXNlRmlyc3QpIHsKKyAgICAgICAgICAgIG1fY29sbGF0b3Ig
PSBjYWNoZWRDb2xsYXRvcjsKKyAgICAgICAgICAgIG1fbG9jYWxlID0gY2FjaGVkQ29sbGF0b3JM
b2NhbGU7CisgICAgICAgICAgICBtX3Nob3VsZFNvcnRMb3dlcmNhc2VGaXJzdCA9IHNob3VsZFNv
cnRMb3dlcmNhc2VGaXJzdDsKKyAgICAgICAgICAgIGNhY2hlZENvbGxhdG9yID0gbnVsbHB0cjsK
KyAgICAgICAgICAgIGNhY2hlZENvbGxhdG9yTG9jYWxlID0gbnVsbHB0cjsKKyAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fY29sbGF0b3IgPSB1Y29sX29wZW4o
bV9sb2NhbGUsICZzdGF0dXMpOworICAgIG1fY29sbGF0b3IgPSB1Y29sX29wZW4ocmVzb2x2ZURl
ZmF1bHRMb2NhbGUobG9jYWxlKSwgJnN0YXR1cyk7CiAgICAgaWYgKFVfRkFJTFVSRShzdGF0dXMp
KSB7CiAgICAgICAgIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKLSAgICAgICAgbV9jb2xsYXRvciA9
IHVjb2xfb3BlbigiIiwgJnN0YXR1cyk7IC8vIEZhbGxiYWNrIHRvIFVuaWNvZGUgQ29sbGF0aW9u
IEFsZ29yaXRobS4KKyAgICAgICAgbV9jb2xsYXRvciA9IHVjb2xfb3BlbigiIiwgJnN0YXR1cyk7
IC8vIEZhbGwgYmFjayB0byBVbmljb2RlIENvbGxhdGlvbiBBbGdvcml0aG0uCiAgICAgfQogICAg
IEFTU0VSVChVX1NVQ0NFU1Moc3RhdHVzKSk7CiAKLSAgICB1Y29sX3NldEF0dHJpYnV0ZShtX2Nv
bGxhdG9yLCBVQ09MX0NBU0VfRklSU1QsIG1fbG93ZXJGaXJzdCA/IFVDT0xfTE9XRVJfRklSU1Qg
OiBVQ09MX1VQUEVSX0ZJUlNULCAmc3RhdHVzKTsKKyAgICB1Y29sX3NldEF0dHJpYnV0ZShtX2Nv
bGxhdG9yLCBVQ09MX0NBU0VfRklSU1QsIHNob3VsZFNvcnRMb3dlcmNhc2VGaXJzdCA/IFVDT0xf
TE9XRVJfRklSU1QgOiBVQ09MX1VQUEVSX0ZJUlNULCAmc3RhdHVzKTsKICAgICBBU1NFUlQoVV9T
VUNDRVNTKHN0YXR1cykpOwogCiAgICAgdWNvbF9zZXRBdHRyaWJ1dGUobV9jb2xsYXRvciwgVUNP
TF9OT1JNQUxJWkFUSU9OX01PREUsIFVDT0xfT04sICZzdGF0dXMpOwogICAgIEFTU0VSVChVX1NV
Q0NFU1Moc3RhdHVzKSk7CisKKyAgICBtX2xvY2FsZSA9IGxvY2FsZSA/IHN0cmR1cChsb2NhbGUp
IDogbnVsbHB0cjsKKyAgICBtX3Nob3VsZFNvcnRMb3dlcmNhc2VGaXJzdCA9IHNob3VsZFNvcnRM
b3dlcmNhc2VGaXJzdDsKIH0KIAotdm9pZCBDb2xsYXRvcjo6cmVsZWFzZUNvbGxhdG9yKCkKK0Nv
bGxhdG9yOjp+Q29sbGF0b3IoKQogewogICAgIHsKICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPHN0
ZDo6bXV0ZXg+IGxvY2soY2FjaGVkQ29sbGF0b3JNdXRleCgpKTsKICAgICAgICAgaWYgKGNhY2hl
ZENvbGxhdG9yKQogICAgICAgICAgICAgdWNvbF9jbG9zZShjYWNoZWRDb2xsYXRvcik7CiAgICAg
ICAgIGNhY2hlZENvbGxhdG9yID0gbV9jb2xsYXRvcjsKKyAgICAgICAgY2FjaGVkQ29sbGF0b3JM
b2NhbGUgPSBtX2xvY2FsZTsKKyAgICAgICAgY2FjaGVkQ29sbGF0b3JTaG91bGRTb3J0TG93ZXJj
YXNlRmlyc3QgPSBtX3Nob3VsZFNvcnRMb3dlcmNhc2VGaXJzdDsKICAgICAgICAgbV9jb2xsYXRv
ciA9IG51bGxwdHI7CisgICAgICAgIG1fbG9jYWxlID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBm
cmVlKG1fbG9jYWxlKTsKK30KKworc3RhdGljIGludDMyX3QgZ2V0SW5kZXhMYXRpbjEoVUNoYXJJ
dGVyYXRvciogaXRlcmF0b3IsIFVDaGFySXRlcmF0b3JPcmlnaW4gb3JpZ2luKQoreworICAgIHN3
aXRjaCAob3JpZ2luKSB7CisgICAgY2FzZSBVSVRFUl9TVEFSVDoKKyAgICAgICAgcmV0dXJuIGl0
ZXJhdG9yLT5zdGFydDsKKyAgICBjYXNlIFVJVEVSX0NVUlJFTlQ6CisgICAgICAgIHJldHVybiBp
dGVyYXRvci0+aW5kZXg7CisgICAgY2FzZSBVSVRFUl9MSU1JVDoKKyAgICAgICAgcmV0dXJuIGl0
ZXJhdG9yLT5saW1pdDsKKyAgICBjYXNlIFVJVEVSX1pFUk86CisgICAgICAgIHJldHVybiAwOwor
ICAgIGNhc2UgVUlURVJfTEVOR1RIOgorICAgICAgICByZXR1cm4gaXRlcmF0b3ItPmxlbmd0aDsK
ICAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFVfU0VOVElORUw7
Cit9CisKK3N0YXRpYyBpbnQzMl90IG1vdmVMYXRpbjEoVUNoYXJJdGVyYXRvciogaXRlcmF0b3Is
IGludDMyX3QgZGVsdGEsIFVDaGFySXRlcmF0b3JPcmlnaW4gb3JpZ2luKQoreworICAgIHJldHVy
biBpdGVyYXRvci0+aW5kZXggPSBnZXRJbmRleExhdGluMShpdGVyYXRvciwgb3JpZ2luKSArIGRl
bHRhOworfQorCitzdGF0aWMgVUJvb2wgaGFzTmV4dExhdGluMShVQ2hhckl0ZXJhdG9yKiBpdGVy
YXRvcikKK3sKKyAgICByZXR1cm4gaXRlcmF0b3ItPmluZGV4IDwgaXRlcmF0b3ItPmxpbWl0Owor
fQorCitzdGF0aWMgVUJvb2wgaGFzUHJldmlvdXNMYXRpbjEoVUNoYXJJdGVyYXRvciogaXRlcmF0
b3IpCit7CisgICAgcmV0dXJuIGl0ZXJhdG9yLT5pbmRleCA+IGl0ZXJhdG9yLT5zdGFydDsKK30K
Kworc3RhdGljIFVDaGFyMzIgY3VycmVudExhdGluMShVQ2hhckl0ZXJhdG9yKiBpdGVyYXRvcikK
K3sKKyAgICBBU1NFUlQoaXRlcmF0b3ItPmluZGV4ID49IGl0ZXJhdG9yLT5zdGFydCk7CisgICAg
aWYgKGl0ZXJhdG9yLT5pbmRleCA+PSBpdGVyYXRvci0+bGltaXQpCisgICAgICAgIHJldHVybiBV
X1NFTlRJTkVMOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBMQ2hhcio+KGl0ZXJhdG9y
LT5jb250ZXh0KVtpdGVyYXRvci0+aW5kZXhdOworfQorCitzdGF0aWMgVUNoYXIzMiBuZXh0TGF0
aW4xKFVDaGFySXRlcmF0b3IqIGl0ZXJhdG9yKQoreworICAgIEFTU0VSVChpdGVyYXRvci0+aW5k
ZXggPj0gaXRlcmF0b3ItPnN0YXJ0KTsKKyAgICBpZiAoaXRlcmF0b3ItPmluZGV4ID49IGl0ZXJh
dG9yLT5saW1pdCkKKyAgICAgICAgcmV0dXJuIFVfU0VOVElORUw7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGNvbnN0IExDaGFyKj4oaXRlcmF0b3ItPmNvbnRleHQpW2l0ZXJhdG9yLT5pbmRleCsr
XTsKK30KKworc3RhdGljIFVDaGFyMzIgcHJldmlvdXNMYXRpbjEoVUNoYXJJdGVyYXRvciogaXRl
cmF0b3IpCit7CisgICAgaWYgKGl0ZXJhdG9yLT5pbmRleCA8PSBpdGVyYXRvci0+c3RhcnQpCisg
ICAgICAgIHJldHVybiBVX1NFTlRJTkVMOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBM
Q2hhcio+KGl0ZXJhdG9yLT5jb250ZXh0KVstLWl0ZXJhdG9yLT5pbmRleF07Cit9CisKK3N0YXRp
YyB1aW50MzJfdCBnZXRTdGF0ZUxhdGluMShjb25zdCBVQ2hhckl0ZXJhdG9yKiBpdGVyYXRvcikK
K3sKKyAgICByZXR1cm4gaXRlcmF0b3ItPmluZGV4OworfQorCitzdGF0aWMgdm9pZCBzZXRTdGF0
ZUxhdGluMShVQ2hhckl0ZXJhdG9yKiBpdGVyYXRvciwgdWludDMyX3Qgc3RhdGUsIFVFcnJvckNv
ZGUqKQoreworICAgIGl0ZXJhdG9yLT5pbmRleCA9IHN0YXRlOworfQorCitzdGF0aWMgVUNoYXJJ
dGVyYXRvciBjcmVhdGVMYXRpbjFJdGVyYXRvcihjb25zdCBMQ2hhciogY2hhcmFjdGVycywgaW50
IGxlbmd0aCkKK3sKKyAgICBVQ2hhckl0ZXJhdG9yIGl0ZXJhdG9yOworICAgIGl0ZXJhdG9yLmNv
bnRleHQgPSBjaGFyYWN0ZXJzOworICAgIGl0ZXJhdG9yLmxlbmd0aCA9IGxlbmd0aDsKKyAgICBp
dGVyYXRvci5zdGFydCA9IDA7CisgICAgaXRlcmF0b3IuaW5kZXggPSAwOworICAgIGl0ZXJhdG9y
LmxpbWl0ID0gbGVuZ3RoOworICAgIGl0ZXJhdG9yLnJlc2VydmVkRmllbGQgPSAwOworICAgIGl0
ZXJhdG9yLmdldEluZGV4ID0gZ2V0SW5kZXhMYXRpbjE7CisgICAgaXRlcmF0b3IubW92ZSA9IG1v
dmVMYXRpbjE7CisgICAgaXRlcmF0b3IuaGFzTmV4dCA9IGhhc05leHRMYXRpbjE7CisgICAgaXRl
cmF0b3IuaGFzUHJldmlvdXMgPSBoYXNQcmV2aW91c0xhdGluMTsKKyAgICBpdGVyYXRvci5jdXJy
ZW50ID0gY3VycmVudExhdGluMTsKKyAgICBpdGVyYXRvci5uZXh0ID0gbmV4dExhdGluMTsKKyAg
ICBpdGVyYXRvci5wcmV2aW91cyA9IHByZXZpb3VzTGF0aW4xOworICAgIGl0ZXJhdG9yLnJlc2Vy
dmVkRm4gPSBudWxscHRyOworICAgIGl0ZXJhdG9yLmdldFN0YXRlID0gZ2V0U3RhdGVMYXRpbjE7
CisgICAgaXRlcmF0b3Iuc2V0U3RhdGUgPSBzZXRTdGF0ZUxhdGluMTsKKyAgICByZXR1cm4gaXRl
cmF0b3I7Cit9CisKK3N0YXRpYyBVQ2hhckl0ZXJhdG9yIGNyZWF0ZUl0ZXJhdG9yKFN0cmluZ1Zp
ZXcgc3RyaW5nKQoreworICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBj
cmVhdGVMYXRpbjFJdGVyYXRvcihzdHJpbmcuY2hhcmFjdGVyczgoKSwgc3RyaW5nLmxlbmd0aCgp
KTsKKyAgICBVQ2hhckl0ZXJhdG9yIGl0ZXJhdG9yOworICAgIHVpdGVyX3NldFN0cmluZygmaXRl
cmF0b3IsIHN0cmluZy5jaGFyYWN0ZXJzMTYoKSwgc3RyaW5nLmxlbmd0aCgpKTsKKyAgICByZXR1
cm4gaXRlcmF0b3I7Cit9CisKK2ludCBDb2xsYXRvcjo6Y29sbGF0ZShTdHJpbmdWaWV3IGEsIFN0
cmluZ1ZpZXcgYikgY29uc3QKK3sKKyAgICBVQ2hhckl0ZXJhdG9yIGl0ZXJhdG9yQSA9IGNyZWF0
ZUl0ZXJhdG9yKGEpOworICAgIFVDaGFySXRlcmF0b3IgaXRlcmF0b3JCID0gY3JlYXRlSXRlcmF0
b3IoYik7CisgICAgVUVycm9yQ29kZSBzdGF0dXMgPSBVX1pFUk9fRVJST1I7CisgICAgaW50IHJl
c3VsdCA9IHVjb2xfc3RyY29sbEl0ZXIobV9jb2xsYXRvciwgJml0ZXJhdG9yQSwgJml0ZXJhdG9y
QiwgJnN0YXR1cyk7CisgICAgQVNTRVJUKFVfU1VDQ0VTUyhzdGF0dXMpKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitzdGF0aWMgVUNoYXJJdGVyYXRvciBjcmVhdGVJdGVyYXRvclVURjgoY29u
c3QgY2hhciogc3RyaW5nKQoreworICAgIFVDaGFySXRlcmF0b3IgaXRlcmF0b3I7CisgICAgdWl0
ZXJfc2V0VVRGOCgmaXRlcmF0b3IsIHN0cmluZywgc3RybGVuKHN0cmluZykpOworICAgIHJldHVy
biBpdGVyYXRvcjsKK30KKworaW50IENvbGxhdG9yOjpjb2xsYXRlVVRGOChjb25zdCBjaGFyKiBh
LCBjb25zdCBjaGFyKiBiKSBjb25zdAoreworICAgIFVDaGFySXRlcmF0b3IgaXRlcmF0b3JBID0g
Y3JlYXRlSXRlcmF0b3JVVEY4KGEpOworICAgIFVDaGFySXRlcmF0b3IgaXRlcmF0b3JCID0gY3Jl
YXRlSXRlcmF0b3JVVEY4KGIpOworICAgIFVFcnJvckNvZGUgc3RhdHVzID0gVV9aRVJPX0VSUk9S
OworICAgIGludCByZXN1bHQgPSB1Y29sX3N0cmNvbGxJdGVyKG1fY29sbGF0b3IsICZpdGVyYXRv
ckEsICZpdGVyYXRvckIsICZzdGF0dXMpOworICAgIEFTU0VSVChVX1NVQ0NFU1Moc3RhdHVzKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS94bWwvWFNMVFVuaWNvZGVTb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3htbC9YU0xUVW5pY29kZVNvcnQuY3BwCmluZGV4IDYxMDFlZTVlZmY5NTRiMTNlZjY2NzE1Yzg5
MmQ2MmU0ZjMwYjc5Y2UuLmFiNDlhMTNkZGEzYjc3MjUxYmZhYzY5YWEzOWIxZWIwYjYzNDAzYWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUVW5pY29kZVNvcnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3htbC9YU0xUVW5pY29kZVNvcnQuY3BwCkBAIC0zMyw3ICszMyw2IEBA
CiAKICNpbmNsdWRlIDxsaWJ4c2x0L3RlbXBsYXRlcy5oPgogI2luY2x1ZGUgPGxpYnhzbHQveHNs
dHV0aWxzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3Rm
L3VuaWNvZGUvQ29sbGF0b3IuaD4KIAogI2lmIE9TKERBUldJTikgJiYgIVBMQVRGT1JNKEVGTCkg
JiYgIVBMQVRGT1JNKEdUSykKQEAgLTE2MiwxMCArMTYxLDkgQEAgdm9pZCB4c2x0VW5pY29kZVNv
cnRGdW5jdGlvbih4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciBjdHh0LCB4bWxOb2RlUHRyICpzb3J0
cywgaW4KIAogICAgIC8vIFdlIGFyZSBwYXNzaW5nIGEgbGFuZ3VhZ2UgaWRlbnRpZmllciB0byBh
IGZ1bmN0aW9uIHRoYXQgZXhwZWN0cyBhIGxvY2FsZSBpZGVudGlmaWVyLgogICAgIC8vIFRoZSBp
bXBsZW1lbnRhdGlvbiBvZiBDb2xsYXRvciBzaG91bGQgYmUgbGVuaWVudCwgYW5kIGFjY2VwdCBi
b3RoICJlbi1VUyIgYW5kICJlbl9VUyIsIGZvciBleGFtcGxlLgotICAgIC8vIFRoaXMgbGV0cyBh
biBhdXRob3IgdG8gcmVhbGx5IHNwZWNpZnkgc29ydGluZyBydWxlcywgZS5nLiAiZGVfREVAY29s
bGF0aW9uPXBob25lYm9vayIsIHdoaWNoIGlzbid0CisgICAgLy8gVGhpcyBsZXRzIGFuIGF1dGhv
ciBzcGVjaWZ5IHNvcnRpbmcgcnVsZXMsIGUuZy4gImRlX0RFQGNvbGxhdGlvbj1waG9uZWJvb2si
LCB3aGljaCBpc24ndAogICAgIC8vIHBvc3NpYmxlIHdpdGggbGFuZ3VhZ2UgYWxvbmUuCi0gICAg
Q29sbGF0b3IgY29sbGF0b3IoY29tcC0+aGFzX2xhbmcgPyAoY29uc3QgY2hhciopY29tcC0+bGFu
ZyA6ICJlbiIpOwotICAgIGNvbGxhdG9yLnNldE9yZGVyTG93ZXJGaXJzdChjb21wLT5sb3dlcl9m
aXJzdCk7CisgICAgQ29sbGF0b3IgY29sbGF0b3IoY29tcC0+aGFzX2xhbmcgPyByZWludGVycHJl
dF9jYXN0PGNvbnN0IGNoYXIqPihjb21wLT5sYW5nKSA6ICJlbiIsIGNvbXAtPmxvd2VyX2ZpcnN0
KTsKIAogICAgIC8qIFNoZWxsJ3Mgc29ydCBvZiBub2RlLXNldCAqLwogICAgIGZvciAoaW5jciA9
IGxlbiAvIDI7IGluY3IgPiAwOyBpbmNyIC89IDIpIHsKQEAgLTE5NSwxMSArMTkzLDggQEAgdm9p
ZCB4c2x0VW5pY29kZVNvcnRGdW5jdGlvbih4c2x0VHJhbnNmb3JtQ29udGV4dFB0ciBjdHh0LCB4
bWxOb2RlUHRyICpzb3J0cywgaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0c1tqICsgaW5jcl0tPmZsb2F0dmFsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRz
dCA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHRzdCA9IC0xOwotICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHN0cjEg
PSBTdHJpbmc6OmZyb21VVEY4KChjb25zdCBjaGFyKilyZXN1bHRzW2pdLT5zdHJpbmd2YWwpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHN0cjIgPSBTdHJpbmc6OmZyb21VVEY4KChj
b25zdCBjaGFyKilyZXN1bHRzW2ogKyBpbmNyXS0+c3RyaW5ndmFsKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHRzdCA9IGNvbGxhdG9yLmNvbGxhdGUoc3RyMS5kZXByZWNhdGVkQ2hhcmFjdGVy
cygpLCBzdHIxLmxlbmd0aCgpLCBzdHIyLmRlcHJlY2F0ZWRDaGFyYWN0ZXJzKCksIHN0cjIubGVu
Z3RoKCkpOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgICAgICAgICAgdHN0ID0gY29sbGF0b3IuY29sbGF0ZVVURjgocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4ocmVzdWx0c1tqXS0+c3RyaW5ndmFsKSwgcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBjaGFyKj4ocmVzdWx0c1tqICsgaW5jcl0tPnN0cmluZ3ZhbCkpOwog
ICAgICAgICAgICAgICAgICAgICBpZiAoZGVzY2VuZGluZykKICAgICAgICAgICAgICAgICAgICAg
ICAgIHRzdCA9IC10c3Q7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjUwLDExICsyNDUsOCBAQCB2
b2lkIHhzbHRVbmljb2RlU29ydEZ1bmN0aW9uKHhzbHRUcmFuc2Zvcm1Db250ZXh0UHRyIGN0eHQs
IHhtbE5vZGVQdHIgKnNvcnRzLCBpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc1tqICsgaW5jcl0tPmZsb2F0dmFsKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHN0ID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZSB0c3QgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc3RyMSA9IFN0cmluZzo6ZnJvbVVURjgo
KGNvbnN0IGNoYXIqKXJlc1tqXS0+c3RyaW5ndmFsKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU3RyaW5nIHN0cjIgPSBTdHJpbmc6OmZyb21VVEY4KChjb25zdCBjaGFyKilyZXNb
aiArIGluY3JdLT5zdHJpbmd2YWwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
c3QgPSBjb2xsYXRvci5jb2xsYXRlKHN0cjEuZGVwcmVjYXRlZENoYXJhY3RlcnMoKSwgc3RyMS5s
ZW5ndGgoKSwgc3RyMi5kZXByZWNhdGVkQ2hhcmFjdGVycygpLCBzdHIyLmxlbmd0aCgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdCA9IGNvbGxhdG9yLmNv
bGxhdGVVVEY4KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KHJlc1tqXS0+c3RyaW5ndmFs
KSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4ocmVzW2ogKyBpbmNyXS0+c3RyaW5ndmFs
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlc2MpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRzdCA9IC10c3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>