<?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>149100</bug_id>
          
          <creation_ts>2015-09-12 21:48:21 -0700</creation_ts>
          <short_desc>Implement indirect calls in WebAssembly</short_desc>
          <delta_ts>2015-09-16 18:23:40 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>146064</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sukolsak Sakshuwong">sukolsak</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>saam</cc>
    
    <cc>sukolsak</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1125449</commentid>
    <comment_count>0</comment_count>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-09-12 21:48:21 -0700</bug_when>
    <thetext>Implement indirect calls in WebAssembly</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125450</commentid>
    <comment_count>1</comment_count>
      <attachid>261073</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-09-12 21:50:38 -0700</bug_when>
    <thetext>Created attachment 261073
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125458</commentid>
    <comment_count>2</comment_count>
      <attachid>261077</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-09-12 23:12:26 -0700</bug_when>
    <thetext>Created attachment 261077
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126411</commentid>
    <comment_count>3</comment_count>
      <attachid>261077</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-09-16 11:18:38 -0700</bug_when>
    <thetext>Comment on attachment 261077
Patch

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

r=me

&gt; Source/JavaScriptCore/wasm/WASMFunctionCompiler.h:610
&gt; +
&gt; +        const Vector&lt;JSFunction*&gt;&amp; functions = m_module-&gt;functionPointerTables()[functionPointerTableIndex].functions;
&gt; +        move(TrustedImmPtr(functions.data()), GPRInfo::regT0);
&gt; +        load32(temporaryAddress(m_tempStackTop - 1), GPRInfo::regT1);
&gt; +        m_tempStackTop--;

Can you guarantee that the vector will never resize (and thus never change its data pointer)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126466</commentid>
    <comment_count>4</comment_count>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-09-16 14:28:34 -0700</bug_when>
    <thetext>Thanks for the review.

(In reply to comment #3)
&gt; Comment on attachment 261077 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=261077&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/wasm/WASMFunctionCompiler.h:610
&gt; &gt; +
&gt; &gt; +        const Vector&lt;JSFunction*&gt;&amp; functions = m_module-&gt;functionPointerTables()[functionPointerTableIndex].functions;
&gt; &gt; +        move(TrustedImmPtr(functions.data()), GPRInfo::regT0);
&gt; &gt; +        load32(temporaryAddress(m_tempStackTop - 1), GPRInfo::regT1);
&gt; &gt; +        m_tempStackTop--;
&gt; 
&gt; Can you guarantee that the vector will never resize (and thus never change
&gt; its data pointer)?

WASM source is parsed in two passes. The first pass is for syntax checking and initializing some data. The second pass is for code generation. The vector only resizes in the first pass. It will never resize after that.

The vector only resizes when we load the WASM module and parse the function pointer tables. It will never resize after that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126468</commentid>
    <comment_count>5</comment_count>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-09-16 14:30:57 -0700</bug_when>
    <thetext>Oops, please ignore the second paragraph. I rephrased it and forgot to remove it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126517</commentid>
    <comment_count>6</comment_count>
      <attachid>261337</attachid>
    <who name="Sukolsak Sakshuwong">sukolsak</who>
    <bug_when>2015-09-16 16:45:14 -0700</bug_when>
    <thetext>Created attachment 261337
Update to ToT and use Math.imul for multiplication</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126534</commentid>
    <comment_count>7</comment_count>
      <attachid>261337</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-09-16 17:35:05 -0700</bug_when>
    <thetext>Comment on attachment 261337
Update to ToT and use Math.imul for multiplication

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126552</commentid>
    <comment_count>8</comment_count>
      <attachid>261337</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-16 18:23:36 -0700</bug_when>
    <thetext>Comment on attachment 261337
Update to ToT and use Math.imul for multiplication

Clearing flags on attachment: 261337

Committed r189892: &lt;http://trac.webkit.org/changeset/189892&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1126553</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-16 18:23:40 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261073</attachid>
            <date>2015-09-12 21:50:38 -0700</date>
            <delta_ts>2015-09-12 23:12:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149100-20150913005040.patch</filename>
            <type>text/plain</type>
            <size>15109</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg5NjYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
NjJkYzg1M2EzNzY2OWQ3ZmQ5ZDNmYjMyY2QwOWNjNGZlMmM4NzZjLi5jYzdhZDExNjUzZGUwNDVl
MTJjYTNiZTNlMGRhZGZlYTE1ZDliNGFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOCBAQAorMjAxNS0wOS0xMiAgU3Vrb2xzYWsgU2Frc2h1d29uZyAgPHN1a29sc2FrQGdt
YWlsLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgaW5kaXJlY3QgY2FsbHMgaW4gV2ViQXNzZW1i
bHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTEw
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVz
dHMvc3RyZXNzL3dhc20tY2FsbHMuanM6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3dhc20vY2Fs
bHMud2FzbToKKyAgICAgICAgKiB3YXNtL1dBU01Gb3JtYXQuaDoKKyAgICAgICAgKiB3YXNtL1dB
U01GdW5jdGlvbkNvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OldBU01GdW5jdGlvbkNvbXBpbGVy
OjpidWlsZENhbGxJbmRpcmVjdCk6CisgICAgICAgICogd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIu
Y3BwOgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlRXhwcmVzc2lvbkkz
Mik6CisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VDYWxsSW5kaXJlY3RF
eHByZXNzaW9uSTMyKToKKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNh
bGxJbmRpcmVjdCk6CisgICAgICAgICogd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuaDoKKyAgICAg
ICAgKiB3YXNtL1dBU01GdW5jdGlvblN5bnRheENoZWNrZXIuaDoKKyAgICAgICAgKEpTQzo6V0FT
TUZ1bmN0aW9uU3ludGF4Q2hlY2tlcjo6YnVpbGRDYWxsSW50ZXJuYWwpOgorICAgICAgICAoSlND
OjpXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyOjpidWlsZENhbGxJbmRpcmVjdCk6CisgICAgICAg
IChKU0M6OldBU01GdW5jdGlvblN5bnRheENoZWNrZXI6OnVwZGF0ZVRlbXBTdGFja0hlaWdodEZv
ckNhbGwpOgorICAgICAgICAqIHdhc20vV0FTTU1vZHVsZVBhcnNlci5jcHA6CisgICAgICAgIChK
U0M6OldBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25Qb2ludGVyVGFibGVTZWN0aW9uKToK
KyAgICAgICAgKEpTQzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb25T
ZWN0aW9uKToKKwogMjAxNS0wOS0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgog
CiAgICAgICAgIFJFR1JFU1NJT04ocjE4OTU4NSk6IHJ1bi1wZXJmLXRlc3RzIFNwZWVkb21ldGVy
IGZhaWxzIHdpdGggYSBjb25zb2xlIGVycm9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL3dhc20tY2FsbHMuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL3dhc20tY2FsbHMuanMKaW5kZXggNDI4NjU1OTFlOThmMjQ3YTk3YjJiZTVi
NGRiZTA1YjBiYzM4NTgzZi4uMjg2NWU4YmE4MGI5ODY2MjQ4ODQ2NDEyYWMzNTY1ODFhZDk1Nzkw
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy93YXNtLWNh
bGxzLmpzCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvd2FzbS1jYWxs
cy5qcwpAQCAtMzIsMTAgKzMyLDQ0IEBAIGZ1bmN0aW9uIGFzbU1vZHVsZShnbG9iYWwsIGVudiwg
YnVmZmVyKSB7CiAgICAgICAgIHJldHVybiAoKCh4ICogeSkgfCAwKSAvIChnY2QoeCwgeSkgfCAw
KSkgfCAwOwogICAgIH0KIAorICAgIGZ1bmN0aW9uIGFkZFN1Yk11bERpdihpLCB4LCB5KSB7Cisg
ICAgICAgIGkgPSBpIHwgMDsKKyAgICAgICAgeCA9IHggfCAwOworICAgICAgICB5ID0geSB8IDA7
CisgICAgICAgIHJldHVybiBhZGRTdWJNdWxEaXZUYWJsZVtpICYgM10oeCwgeSkgfCAwOworICAg
IH0KKworICAgIGZ1bmN0aW9uIGFkZCh4LCB5KSB7CisgICAgICAgIHggPSB4IHwgMDsKKyAgICAg
ICAgeSA9IHkgfCAwOworICAgICAgICByZXR1cm4gKHggKyB5KSB8IDA7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gc3ViKHgsIHkpIHsKKyAgICAgICAgeCA9IHggfCAwOworICAgICAgICB5ID0geSB8
IDA7CisgICAgICAgIHJldHVybiAoeCAtIHkpIHwgMDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBt
dWwoeCwgeSkgeworICAgICAgICB4ID0geCB8IDA7CisgICAgICAgIHkgPSB5IHwgMDsKKyAgICAg
ICAgcmV0dXJuICh4ICogeSkgfCAwOworICAgIH0KKworICAgIGZ1bmN0aW9uIGRpdih4LCB5KSB7
CisgICAgICAgIHggPSB4IHwgMDsKKyAgICAgICAgeSA9IHkgfCAwOworICAgICAgICByZXR1cm4g
KCh4IHwgMCkgLyAoeSB8IDApKSB8IDA7CisgICAgfQorCisgICAgdmFyIGFkZFN1Yk11bERpdlRh
YmxlID0gW2FkZCwgc3ViLCBtdWwsIGRpdl07CisKICAgICByZXR1cm4gewogICAgICAgICBmaWJv
bmFjY2k6IGZpYm9uYWNjaSwKICAgICAgICAgZ2NkOiBnY2QsCiAgICAgICAgIGxjbTogbGNtLAor
ICAgICAgICBhZGRTdWJNdWxEaXY6IGFkZFN1Yk11bERpdiwKICAgICB9OwogfQogKi8KQEAgLTQ1
LDMgKzc5LDExIEBAIHZhciBtb2R1bGUgPSBsb2FkV2ViQXNzZW1ibHkoIndhc20vY2FsbHMud2Fz
bSIpOwogc2hvdWxkQmUobW9kdWxlLmZpYm9uYWNjaSgxMCksIDg5KTsKIHNob3VsZEJlKG1vZHVs
ZS5nY2QoMTUsIDI1KSwgNSk7CiBzaG91bGRCZShtb2R1bGUubGNtKDE1LCAyNSksIDc1KTsKKwor
c2hvdWxkQmUobW9kdWxlLmFkZFN1Yk11bERpdigwLCA2LCAyKSwgOCk7CitzaG91bGRCZShtb2R1
bGUuYWRkU3ViTXVsRGl2KDEsIDYsIDIpLCA0KTsKK3Nob3VsZEJlKG1vZHVsZS5hZGRTdWJNdWxE
aXYoMiwgNiwgMiksIDEyKTsKK3Nob3VsZEJlKG1vZHVsZS5hZGRTdWJNdWxEaXYoMywgNiwgMiks
IDMpOworc2hvdWxkQmUobW9kdWxlLmFkZFN1Yk11bERpdig0LCA2LCAyKSwgOCk7CitzaG91bGRC
ZShtb2R1bGUuYWRkU3ViTXVsRGl2KDEwLCA2LCAyKSwgMTIpOworc2hvdWxkQmUobW9kdWxlLmFk
ZFN1Yk11bERpdigtMSwgNiwgMiksIDMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy93YXNtL2NhbGxzLndhc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL3dhc20vY2FsbHMud2FzbQppbmRleCBkYjZmZDYwMGZmYWEyNDQ0MWY4M2M0
YTExNjdhOGY0N2M2YzgzOWZlLi5jMzNlYWNlOTUyOTUyYjg1ZmEyZGVjNmNhYmE2MzM5N2QxZWRh
NmRmIDEwMDY0NApHSVQgYmluYXJ5IHBhdGNoCmRlbHRhIDEwOAp6Y21ZZFkleEYtYVNlKG50JF5a
aCk0MiVwNk9rZjY+NDw8TW03I1chdSFHTUtAbTVxSShmfVQ8WEJmbUpxZnJFI0QKbndBX0olS3ZF
dHxEdTdBRjB8eXlkQ0kqUHxDOG5lVm1uUWpePUQxeypGKSN4RlNOO3syCgpkZWx0YSA0NQpvY21a
Mz9uNXN+b1NlJCFAbkU/Y3Q3I0trVzk1NkY1R0JRancmfF9qYHA0Y0Q/MEhXanQ8XlRXeQoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Gb3JtYXQuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Gb3JtYXQuaAppbmRleCAwNzdiZjNhMjk4ZDBjMWNh
NzY4NmYzMTc1MThjMWE5YjNmOTYzYzc2Li5iMzYzNDEwNTY3M2FiZDU4ODc1YjQ2MTJjOWUzZjZh
NmExNzJhOWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRm9y
bWF0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZvcm1hdC5oCkBAIC01
MCw2ICs1MCw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBKU0Z1bmN0aW9uOworCiBl
bnVtIGNsYXNzIFdBU01UeXBlIDogdWludDhfdCB7CiAgICAgSTMyLAogICAgIEYzMiwKQEAgLTg1
LDcgKzg3LDggQEAgc3RydWN0IFdBU01GdW5jdGlvbkRlY2xhcmF0aW9uIHsKIAogc3RydWN0IFdB
U01GdW5jdGlvblBvaW50ZXJUYWJsZSB7CiAgICAgdWludDMyX3Qgc2lnbmF0dXJlSW5kZXg7Ci0g
ICAgVmVjdG9yPHVpbnQzMl90PiBlbGVtZW50czsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGZ1bmN0
aW9uSW5kaWNlczsKKyAgICBWZWN0b3I8SlNGdW5jdGlvbio+IGZ1bmN0aW9uczsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V0FTTUZ1bmN0aW9uQ29tcGlsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01G
dW5jdGlvbkNvbXBpbGVyLmgKaW5kZXggZDhiZjY1Mjg0ODI0NmUzMWYzYjFiOGQ0YWM1NzMzY2Fl
ZDc3YzQ0Mi4uYjQ0NGEwMWM3ZWEzMjQ5OWNiZGE5MTJiZTkwZTQ1NzM0MzViNDNlNCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uQ29tcGlsZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25Db21waWxlci5oCkBA
IC02MDAsNiArNjAwLDIxIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFVOVVNFRDsKICAgICB9
CiAKKyAgICBpbnQgYnVpbGRDYWxsSW5kaXJlY3QodWludDMyX3QgZnVuY3Rpb25Qb2ludGVyVGFi
bGVJbmRleCwgaW50LCBpbnQsIGNvbnN0IFdBU01TaWduYXR1cmUmIHNpZ25hdHVyZSwgV0FTTUV4
cHJlc3Npb25UeXBlIHJldHVyblR5cGUpCisgICAgeworICAgICAgICBib3hBcmd1bWVudHNBbmRB
ZGp1c3RTdGFja1BvaW50ZXIoc2lnbmF0dXJlLmFyZ3VtZW50cyk7CisKKyAgICAgICAgY29uc3Qg
VmVjdG9yPEpTRnVuY3Rpb24qPiYgZnVuY3Rpb25zID0gbV9tb2R1bGUtPmZ1bmN0aW9uUG9pbnRl
clRhYmxlcygpW2Z1bmN0aW9uUG9pbnRlclRhYmxlSW5kZXhdLmZ1bmN0aW9uczsKKyAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGZ1bmN0aW9ucy5kYXRhKCkpLCBHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKG1fdGVtcFN0YWNrVG9wIC0gMSksIEdQUklu
Zm86OnJlZ1QxKTsKKyAgICAgICAgbV90ZW1wU3RhY2tUb3AtLTsKKyAgICAgICAgYW5kMzIoVHJ1
c3RlZEltbTMyKGZ1bmN0aW9ucy5zaXplKCkgLSAxKSwgR1BSSW5mbzo6cmVnVDEpOworICAgICAg
ICBsb2FkUHRyKEJhc2VJbmRleChHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEsIHRpbWVz
UHRyKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICAgICAgY2FsbEFuZFVuYm94UmVzdWx0KHJl
dHVyblR5cGUpOworICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0KKwogICAgIHZvaWQgYXBw
ZW5kRXhwcmVzc2lvbkxpc3QoaW50JiwgaW50KSB7IH0KIAogICAgIHZvaWQgbGlua1RhcmdldChK
dW1wVGFyZ2V0JiB0YXJnZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9XQVNNRnVuY3Rpb25QYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FT
TUZ1bmN0aW9uUGFyc2VyLmNwcAppbmRleCBjZTczMGQ2YTljNjk3MzBmOThhZDQwMGIwNWZjMjkz
ZmE5NGNkYzZlLi43YTNlY2VkOGFkMWU3MzUwY2YzZDFiZTQ4MTEwMGUzN2E5YTM2MmQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5jcHAK
QEAgLTUzMCw2ICs1MzAsOCBAQCBDb250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6
OnBhcnNlRXhwcmVzc2lvbkkzMihDb250ZXh0JiBjb250ZXh0KQogICAgICAgICAgICAgcmV0dXJu
IHBhcnNlR2V0R2xvYmFsRXhwcmVzc2lvbkkzMihjb250ZXh0KTsKICAgICAgICAgY2FzZSBXQVNN
T3BFeHByZXNzaW9uSTMyOjpDYWxsSW50ZXJuYWw6CiAgICAgICAgICAgICByZXR1cm4gcGFyc2VD
YWxsSW50ZXJuYWxFeHByZXNzaW9uSTMyKGNvbnRleHQpOworICAgICAgICBjYXNlIFdBU01PcEV4
cHJlc3Npb25JMzI6OkNhbGxJbmRpcmVjdDoKKyAgICAgICAgICAgIHJldHVybiBwYXJzZUNhbGxJ
bmRpcmVjdEV4cHJlc3Npb25JMzIoY29udGV4dCk7CiAgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVz
c2lvbkkzMjo6TmVnYXRlOgogICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OkJpdE5v
dDoKICAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpDb3VudExlYWRpbmdaZXJvczoK
QEAgLTU5Myw3ICs1OTUsNiBAQCBDb250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6
OnBhcnNlRXhwcmVzc2lvbkkzMihDb250ZXh0JiBjb250ZXh0KQogICAgICAgICBjYXNlIFdBU01P
cEV4cHJlc3Npb25JMzI6OlN0b3JlV2l0aE9mZnNldDE2OgogICAgICAgICBjYXNlIFdBU01PcEV4
cHJlc3Npb25JMzI6OlN0b3JlMzI6CiAgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6
U3RvcmVXaXRoT2Zmc2V0MzI6Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Q2Fs
bEluZGlyZWN0OgogICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OkNhbGxJbXBvcnQ6
CiAgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Q29uZGl0aW9uYWw6CiAgICAgICAg
IGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Q29tbWE6CkBAIC02ODUsNiArNjg2LDEyIEBAIENv
bnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VDYWxsSW50ZXJuYWxFeHBy
ZXNzaW9uSTMyKENvbnRleHQmIGNvCiB9CiAKIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgorQ29u
dGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNhbGxJbmRpcmVjdEV4cHJl
c3Npb25JMzIoQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICByZXR1cm4gcGFyc2VDYWxsSW5kaXJl
Y3QoY29udGV4dCwgV0FTTUV4cHJlc3Npb25UeXBlOjpJMzIpOworfQorCit0ZW1wbGF0ZSA8Y2xh
c3MgQ29udGV4dD4KIENvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VV
bmFyeUV4cHJlc3Npb25JMzIoQ29udGV4dCYgY29udGV4dCwgV0FTTU9wRXhwcmVzc2lvbkkzMiBv
cCkKIHsKICAgICBDb250ZXh0RXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9u
STMyKGNvbnRleHQpOwpAQCAtOTg2LDYgKzk5MywyNCBAQCBDb250ZXh0RXhwcmVzc2lvbiBXQVNN
RnVuY3Rpb25QYXJzZXI6OnBhcnNlQ2FsbEludGVybmFsKENvbnRleHQmIGNvbnRleHQsIFdBU01F
eAogICAgIHJldHVybiBjb250ZXh0LmJ1aWxkQ2FsbEludGVybmFsKGZ1bmN0aW9uSW5kZXgsIGFy
Z3VtZW50TGlzdCwgc2lnbmF0dXJlLCByZXR1cm5UeXBlKTsKIH0KIAordGVtcGxhdGUgPGNsYXNz
IENvbnRleHQ+CitDb250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlQ2Fs
bEluZGlyZWN0KENvbnRleHQmIGNvbnRleHQsIFdBU01FeHByZXNzaW9uVHlwZSByZXR1cm5UeXBl
KQoreworICAgIHVpbnQzMl90IGZ1bmN0aW9uUG9pbnRlclRhYmxlSW5kZXg7CisgICAgUkVBRF9D
T01QQUNUX1VJTlQzMl9PUl9GQUlMKGZ1bmN0aW9uUG9pbnRlclRhYmxlSW5kZXgsICJDYW5ub3Qg
cmVhZCB0aGUgZnVuY3Rpb24gcG9pbnRlciB0YWJsZSBpbmRleC4iKTsKKyAgICBGQUlMX0lGX0ZB
TFNFKGZ1bmN0aW9uUG9pbnRlclRhYmxlSW5kZXggPCBtX21vZHVsZS0+ZnVuY3Rpb25Qb2ludGVy
VGFibGVzKCkuc2l6ZSgpLCAiVGhlIGZ1bmN0aW9uIHBvaW50ZXIgdGFibGUgaW5kZXggaXMgaW5j
b3JyZWN0LiIpOworICAgIGNvbnN0IFdBU01GdW5jdGlvblBvaW50ZXJUYWJsZSYgZnVuY3Rpb25Q
b2ludGVyVGFibGUgPSBtX21vZHVsZS0+ZnVuY3Rpb25Qb2ludGVyVGFibGVzKClbZnVuY3Rpb25Q
b2ludGVyVGFibGVJbmRleF07CisgICAgY29uc3QgV0FTTVNpZ25hdHVyZSYgc2lnbmF0dXJlID0g
bV9tb2R1bGUtPnNpZ25hdHVyZXMoKVtmdW5jdGlvblBvaW50ZXJUYWJsZS5zaWduYXR1cmVJbmRl
eF07CisgICAgRkFJTF9JRl9GQUxTRShzaWduYXR1cmUucmV0dXJuVHlwZSA9PSByZXR1cm5UeXBl
LCAiV3JvbmcgcmV0dXJuIHR5cGUuIik7CisKKyAgICBDb250ZXh0RXhwcmVzc2lvbiBpbmRleCA9
IHBhcnNlRXhwcmVzc2lvbkkzMihjb250ZXh0KTsKKyAgICBQUk9QQUdBVEVfRVJST1IoKTsKKwor
ICAgIENvbnRleHRFeHByZXNzaW9uTGlzdCBhcmd1bWVudExpc3QgPSBwYXJzZUNhbGxBcmd1bWVu
dHMoY29udGV4dCwgc2lnbmF0dXJlLmFyZ3VtZW50cyk7CisgICAgUFJPUEFHQVRFX0VSUk9SKCk7
CisgICAgcmV0dXJuIGNvbnRleHQuYnVpbGRDYWxsSW5kaXJlY3QoZnVuY3Rpb25Qb2ludGVyVGFi
bGVJbmRleCwgaW5kZXgsIGFyZ3VtZW50TGlzdCwgc2lnbmF0dXJlLCByZXR1cm5UeXBlKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5oCmluZGV4
IGRiOTA1ZTI3MjI2Y2E0MTJkOTljMDcyNzExNGY4NzU1YmQxMWY2MTcuLmE4OTdkODNiM2Y4YzQ0
Y2M4ODIxZGZiMGU5NDAyZDNhZGViOTgxMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5oCkBAIC05MCw2ICs5MCw3IEBAIHByaXZhdGU6CiAg
ICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlR2V0TG9j
YWxFeHByZXNzaW9uSTMyKENvbnRleHQmKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4g
Q29udGV4dEV4cHJlc3Npb24gcGFyc2VHZXRHbG9iYWxFeHByZXNzaW9uSTMyKENvbnRleHQmKTsK
ICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VDYWxs
SW50ZXJuYWxFeHByZXNzaW9uSTMyKENvbnRleHQmKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29u
dGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VDYWxsSW5kaXJlY3RFeHByZXNzaW9uSTMyKENv
bnRleHQmKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24g
cGFyc2VVbmFyeUV4cHJlc3Npb25JMzIoQ29udGV4dCYsIFdBU01PcEV4cHJlc3Npb25JMzIpOwog
ICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUJpbmFy
eUV4cHJlc3Npb25JMzIoQ29udGV4dCYsIFdBU01PcEV4cHJlc3Npb25JMzIpOwogICAgIHRlbXBs
YXRlIDxjbGFzcyBDb250ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZVJlbGF0aW9uYWxJMzJF
eHByZXNzaW9uSTMyKENvbnRleHQmLCBXQVNNT3BFeHByZXNzaW9uSTMyKTsKQEAgLTExNCw2ICsx
MTUsNyBAQCBwcml2YXRlOgogCiAgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRF
eHByZXNzaW9uTGlzdCBwYXJzZUNhbGxBcmd1bWVudHMoQ29udGV4dCYsIGNvbnN0IFZlY3RvcjxX
QVNNVHlwZT4mIGFyZ3VtZW50cyk7CiAgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRl
eHRFeHByZXNzaW9uIHBhcnNlQ2FsbEludGVybmFsKENvbnRleHQmLCBXQVNNRXhwcmVzc2lvblR5
cGUgcmV0dXJuVHlwZSk7CisgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHBy
ZXNzaW9uIHBhcnNlQ2FsbEluZGlyZWN0KENvbnRleHQmLCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0
dXJuVHlwZSk7CiAKICAgICBKU1dBU01Nb2R1bGUqIG1fbW9kdWxlOwogICAgIFdBU01SZWFkZXIg
bV9yZWFkZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVu
Y3Rpb25TeW50YXhDaGVja2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVu
Y3Rpb25TeW50YXhDaGVja2VyLmgKaW5kZXggMmUzODJhYWI3OWNkNDIyY2U5NmVhMjRiZmIzY2Rl
OGJiN2ZiMjVmMC4uMWU1MmQxNzNiZWQzMmFjMmIwMDUwZWI3YWVjZjgyMjYzOTE1NzJkMSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uU3ludGF4Q2hl
Y2tlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblN5bnRh
eENoZWNrZXIuaApAQCAtMTMzLDEyICsxMzMsNyBAQCBwdWJsaWM6CiAgICAgaW50IGJ1aWxkQ2Fs
bEludGVybmFsKHVpbnQzMl90LCBpbnQsIGNvbnN0IFdBU01TaWduYXR1cmUmIHNpZ25hdHVyZSwg
V0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUpCiAgICAgewogICAgICAgICBzaXplX3QgYXJn
dW1lbnRDb3VudCA9IHNpZ25hdHVyZS5hcmd1bWVudHMuc2l6ZSgpOwotCi0gICAgICAgIC8vIEJv
eGVkIGFyZ3VtZW50cyArIHRoaXMgYXJndW1lbnQgKyBjYWxsIGZyYW1lIGhlYWRlciArIHBhZGRp
bmcuCi0gICAgICAgIG1fdGVtcFN0YWNrVG9wICs9IGFyZ3VtZW50Q291bnQgKyAxICsgSlNTdGFj
azo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIDE7Ci0gICAgICAgIHVwZGF0ZVRlbXBTdGFja0hlaWdo
dCgpOwotICAgICAgICBtX3RlbXBTdGFja1RvcCAtPSBhcmd1bWVudENvdW50ICsgMSArIEpTU3Rh
Y2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyAxOwotCisgICAgICAgIHVwZGF0ZVRlbXBTdGFja0hl
aWdodEZvckNhbGwoYXJndW1lbnRDb3VudCk7CiAgICAgICAgIG1fdGVtcFN0YWNrVG9wIC09IGFy
Z3VtZW50Q291bnQ7CiAgICAgICAgIGlmIChyZXR1cm5UeXBlICE9IFdBU01FeHByZXNzaW9uVHlw
ZTo6Vm9pZCkgewogICAgICAgICAgICAgbV90ZW1wU3RhY2tUb3ArKzsKQEAgLTE0Nyw2ICsxNDIs
MTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gVU5VU0VEOwogICAgIH0KIAorICAgIGludCBi
dWlsZENhbGxJbmRpcmVjdCh1aW50MzJfdCwgaW50LCBpbnQsIGNvbnN0IFdBU01TaWduYXR1cmUm
IHNpZ25hdHVyZSwgV0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUpCisgICAgeworICAgICAg
ICBzaXplX3QgYXJndW1lbnRDb3VudCA9IHNpZ25hdHVyZS5hcmd1bWVudHMuc2l6ZSgpOworICAg
ICAgICB1cGRhdGVUZW1wU3RhY2tIZWlnaHRGb3JDYWxsKGFyZ3VtZW50Q291bnQpOworICAgICAg
ICBtX3RlbXBTdGFja1RvcCAtPSBhcmd1bWVudENvdW50ICsgMTsKKyAgICAgICAgaWYgKHJldHVy
blR5cGUgIT0gV0FTTUV4cHJlc3Npb25UeXBlOjpWb2lkKQorICAgICAgICAgICAgbV90ZW1wU3Rh
Y2tUb3ArKzsKKyAgICAgICAgcmV0dXJuIFVOVVNFRDsKKyAgICB9CisKICAgICB2b2lkIGFwcGVu
ZEV4cHJlc3Npb25MaXN0KGludCYsIGludCkgeyB9CiAKICAgICB2b2lkIGxpbmtUYXJnZXQoY29u
c3QgaW50JikgeyB9CkBAIC0xODUsNiArMTkwLDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBt
X3RlbXBTdGFja0hlaWdodCA9IG1fdGVtcFN0YWNrVG9wOwogICAgIH0KIAorICAgIHZvaWQgdXBk
YXRlVGVtcFN0YWNrSGVpZ2h0Rm9yQ2FsbChzaXplX3QgYXJndW1lbnRDb3VudCkKKyAgICB7Cisg
ICAgICAgIC8vIEJveGVkIGFyZ3VtZW50cyArIHRoaXMgYXJndW1lbnQgKyBjYWxsIGZyYW1lIGhl
YWRlciArIG1heGltdW0gcGFkZGluZy4KKyAgICAgICAgbV90ZW1wU3RhY2tUb3AgKz0gYXJndW1l
bnRDb3VudCArIDEgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsgMTsKKyAgICAgICAg
dXBkYXRlVGVtcFN0YWNrSGVpZ2h0KCk7CisgICAgICAgIG1fdGVtcFN0YWNrVG9wIC09IGFyZ3Vt
ZW50Q291bnQgKyAxICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIDE7CisgICAgfQor
CiAgICAgdW5zaWduZWQgbV9udW1iZXJPZkxvY2FsczsKICAgICB1bnNpZ25lZCBtX3RlbXBTdGFj
a1RvcCB7IDAgfTsKICAgICB1bnNpZ25lZCBtX3RlbXBTdGFja0hlaWdodCB7IDAgfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5jcHAKaW5kZXggMTUx
OTA5NmVhOTJmZGE2NjY0ZjI5ZTczOGYwMjdjZjNjZDE0ZjRhZi4uMzU1ZWIyNTFlYzQ0MTE5YjI2
OGM0Yzk2Y2NhNDc1YThjODRmMzZmZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vV0FTTU1vZHVsZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV0FTTU1vZHVsZVBhcnNlci5jcHAKQEAgLTI1MCwxNCArMjUwLDE3IEBAIHZvaWQgV0FTTU1v
ZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvblBvaW50ZXJUYWJsZVNlY3Rpb24oKQogICAgICAgICBX
QVNNRnVuY3Rpb25Qb2ludGVyVGFibGUgZnVuY3Rpb25Qb2ludGVyVGFibGU7CiAgICAgICAgIFJF
QURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChmdW5jdGlvblBvaW50ZXJUYWJsZS5zaWduYXR1cmVJ
bmRleCwgIkNhbm5vdCByZWFkIHRoZSBzaWduYXR1cmUgaW5kZXguIik7CiAgICAgICAgIEZBSUxf
SUZfRkFMU0UoZnVuY3Rpb25Qb2ludGVyVGFibGUuc2lnbmF0dXJlSW5kZXggPCBtX21vZHVsZS0+
c2lnbmF0dXJlcygpLnNpemUoKSwgIlRoZSBzaWduYXR1cmUgaW5kZXggaXMgaW5jb3JyZWN0LiIp
OwotICAgICAgICB1aW50MzJfdCBudW1iZXJPZkVsZW1lbnRzOwotICAgICAgICBSRUFEX0NPTVBB
Q1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZFbGVtZW50cywgIkNhbm5vdCByZWFkIHRoZSBudW1i
ZXIgb2YgZWxlbWVudHMgb2YgYSBmdW5jdGlvbiBwb2ludGVyIHRhYmxlLiIpOwotICAgICAgICBG
QUlMX0lGX0ZBTFNFKGhhc09uZUJpdFNldChudW1iZXJPZkVsZW1lbnRzKSwgIlRoZSBudW1iZXIg
b2YgZWxlbWVudHMgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4iKTsKLSAgICAgICAgZnVuY3Rpb25Q
b2ludGVyVGFibGUuZWxlbWVudHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkVsZW1l
bnRzKTsKLSAgICAgICAgZm9yICh1aW50MzJfdCBqID0gMDsgaiA8IG51bWJlck9mRWxlbWVudHM7
ICsraikgewotICAgICAgICAgICAgdWludDMyX3QgZWxlbWVudDsKLSAgICAgICAgICAgIFJFQURf
Q09NUEFDVF9VSU5UMzJfT1JfRkFJTChlbGVtZW50LCAiQ2Fubm90IHJlYWQgYW4gZWxlbWVudCBv
ZiBhIGZ1bmN0aW9uIHBvaW50ZXIgdGFibGUuIik7Ci0gICAgICAgICAgICBmdW5jdGlvblBvaW50
ZXJUYWJsZS5lbGVtZW50cy51bmNoZWNrZWRBcHBlbmQoZWxlbWVudCk7CisgICAgICAgIHVpbnQz
Ml90IG51bWJlck9mRnVuY3Rpb25zOworICAgICAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZB
SUwobnVtYmVyT2ZGdW5jdGlvbnMsICJDYW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIGZ1bmN0aW9u
cyBvZiBhIGZ1bmN0aW9uIHBvaW50ZXIgdGFibGUuIik7CisgICAgICAgIEZBSUxfSUZfRkFMU0Uo
aGFzT25lQml0U2V0KG51bWJlck9mRnVuY3Rpb25zKSwgIlRoZSBudW1iZXIgb2YgZnVuY3Rpb25z
IG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7CisgICAgICAgIGZ1bmN0aW9uUG9pbnRlclRhYmxl
LmZ1bmN0aW9uSW5kaWNlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bWJlck9mRnVuY3Rpb25z
KTsKKyAgICAgICAgZnVuY3Rpb25Qb2ludGVyVGFibGUuZnVuY3Rpb25zLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkobnVtYmVyT2ZGdW5jdGlvbnMpOworICAgICAgICBmb3IgKHVpbnQzMl90IGogPSAw
OyBqIDwgbnVtYmVyT2ZGdW5jdGlvbnM7ICsraikgeworICAgICAgICAgICAgdWludDMyX3QgZnVu
Y3Rpb25JbmRleDsKKyAgICAgICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChmdW5j
dGlvbkluZGV4LCAiQ2Fubm90IHJlYWQgYSBmdW5jdGlvbiBpbmRleCBvZiBhIGZ1bmN0aW9uIHBv
aW50ZXIgdGFibGUuIik7CisgICAgICAgICAgICBGQUlMX0lGX0ZBTFNFKGZ1bmN0aW9uSW5kZXgg
PCBtX21vZHVsZS0+ZnVuY3Rpb25EZWNsYXJhdGlvbnMoKS5zaXplKCksICJUaGUgZnVuY3Rpb24g
aW5kZXggaXMgaW5jb3JyZWN0LiIpOworICAgICAgICAgICAgRkFJTF9JRl9GQUxTRShtX21vZHVs
ZS0+ZnVuY3Rpb25EZWNsYXJhdGlvbnMoKVtmdW5jdGlvbkluZGV4XS5zaWduYXR1cmVJbmRleCA9
PSBmdW5jdGlvblBvaW50ZXJUYWJsZS5zaWduYXR1cmVJbmRleCwgIlRoZSBzaWduYXR1cmUgb2Yg
dGhlIGZ1bmN0aW9uIGRvZXNuJ3QgbWF0Y2ggdGhhdCBvZiB0aGUgZnVuY3Rpb24gcG9pbnRlciB0
YWJsZS4iKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uUG9pbnRlclRhYmxlLmZ1bmN0aW9uSW5kaWNl
cy51bmNoZWNrZWRBcHBlbmQoZnVuY3Rpb25JbmRleCk7CiAgICAgICAgIH0KICAgICAgICAgbV9t
b2R1bGUtPmZ1bmN0aW9uUG9pbnRlclRhYmxlcygpLnVuY2hlY2tlZEFwcGVuZChmdW5jdGlvblBv
aW50ZXJUYWJsZSk7CiAgICAgfQpAQCAtMjY5LDYgKzI3MiwxMSBAQCB2b2lkIFdBU01Nb2R1bGVQ
YXJzZXI6OnBhcnNlRnVuY3Rpb25EZWZpbml0aW9uU2VjdGlvbigpCiAgICAgICAgIHBhcnNlRnVu
Y3Rpb25EZWZpbml0aW9uKGZ1bmN0aW9uSW5kZXgpOwogICAgICAgICBQUk9QQUdBVEVfRVJST1Io
KTsKICAgICB9CisKKyAgICBmb3IgKFdBU01GdW5jdGlvblBvaW50ZXJUYWJsZSYgZnVuY3Rpb25Q
b2ludGVyVGFibGUgOiBtX21vZHVsZS0+ZnVuY3Rpb25Qb2ludGVyVGFibGVzKCkpIHsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvblBvaW50ZXJUYWJsZS5mdW5jdGlvbklu
ZGljZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBmdW5jdGlvblBvaW50ZXJUYWJsZS5mdW5j
dGlvbnMudW5jaGVja2VkQXBwZW5kKG1fbW9kdWxlLT5mdW5jdGlvbnMoKVtmdW5jdGlvblBvaW50
ZXJUYWJsZS5mdW5jdGlvbkluZGljZXNbaV1dLmdldCgpKTsKKyAgICB9CiB9CiAKIHZvaWQgV0FT
TU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb24oc2l6ZV90IGZ1bmN0aW9uSW5k
ZXgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261077</attachid>
            <date>2015-09-12 23:12:26 -0700</date>
            <delta_ts>2015-09-16 16:39:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149100-20150913021230.patch</filename>
            <type>text/plain</type>
            <size>15769</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg5NjYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
NjJkYzg1M2EzNzY2OWQ3ZmQ5ZDNmYjMyY2QwOWNjNGZlMmM4NzZjLi41ZDJhOGFlMWExNWViYjY1
ZTUwOTI1OTM5NmViNjhhNTYwOTZjMTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzOSBAQAorMjAxNS0wOS0xMiAgU3Vrb2xzYWsgU2Frc2h1d29uZyAgPHN1a29sc2FrQGdt
YWlsLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgaW5kaXJlY3QgY2FsbHMgaW4gV2ViQXNzZW1i
bHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTEw
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggaW1wbGVtZW50IGluZGlyZWN0IGNhbGxzIGZvciBXZWJBc3NlbWJseSBmaWxlcyBnZW5l
cmF0ZWQgYnkKKyAgICAgICAgcGFjay1hc21qcyA8aHR0cHM6Ly9naXRodWIuY29tL1dlYkFzc2Vt
Ymx5L3BvbHlmaWxsLXByb3RvdHlwZS0xPi4KKyAgICAgICAgcGFjay1hc21qcyB1c2VzIHRoZSBz
YW1lIGluZGlyZWN0IGNhbGwgbW9kZWwgYXMgYXNtLmpzLiBJbiBhc20uanMsIGFuCisgICAgICAg
IGluZGlyZWN0IGNhbGwgbG9va3MgbGlrZSB0aGlzOgorICAgICAgICAgICAgdFtpICYgbl0oLi4u
KQorICAgICAgICB3aGVyZSB0IGlzIGEgdmFyaWFibGUgcmVmZXJyaW5nIHRvIGFuIGFycmF5IG9m
IGZ1bmN0aW9ucyB3aXRoIHRoZSBzYW1lCisgICAgICAgIHNpZ25hdHVyZSwgaSBpcyBhbiBpbnRl
Z2VyIGV4cHJlc3Npb24sIG4gaXMgYW4gaW50ZWdlciB0aGF0IGlzIGVxdWFsIHRvCisgICAgICAg
ICh0Lmxlbmd0aCAtIDEpLCBhbmQgdC5sZW5ndGggaXMgYSBwb3dlciBvZiB0d28uIHBhY2stYXNt
anMgZG9lcyBub3QKKyAgICAgICAgdXNlIHRoZSAnJicgb3BlcmF0b3Igbm9yIG4gaW4gdGhlIFdl
YkFzc2VtYmx5IG91dHB1dCwgYnV0IHRoZSBzZW1hbnRpY3MKKyAgICAgICAgaXMgc3RpbGwgdGhl
IHNhbWUgYXMgYXNtLmpzLgorCisgICAgICAgICogdGVzdHMvc3RyZXNzL3dhc20tY2FsbHMuanM6
CisgICAgICAgICogdGVzdHMvc3RyZXNzL3dhc20vY2FsbHMud2FzbToKKyAgICAgICAgKiB3YXNt
L1dBU01Gb3JtYXQuaDoKKyAgICAgICAgKiB3YXNtL1dBU01GdW5jdGlvbkNvbXBpbGVyLmg6Cisg
ICAgICAgIChKU0M6OldBU01GdW5jdGlvbkNvbXBpbGVyOjpidWlsZENhbGxJbmRpcmVjdCk6Cisg
ICAgICAgICogd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpXQVNN
RnVuY3Rpb25QYXJzZXI6OnBhcnNlRXhwcmVzc2lvbkkzMik6CisgICAgICAgIChKU0M6OldBU01G
dW5jdGlvblBhcnNlcjo6cGFyc2VDYWxsSW5kaXJlY3RFeHByZXNzaW9uSTMyKToKKyAgICAgICAg
KEpTQzo6V0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNhbGxJbmRpcmVjdCk6CisgICAgICAgICog
d2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuaDoKKyAgICAgICAgKiB3YXNtL1dBU01GdW5jdGlvblN5
bnRheENoZWNrZXIuaDoKKyAgICAgICAgKEpTQzo6V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlcjo6
YnVpbGRDYWxsSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25TeW50YXhDaGVj
a2VyOjpidWlsZENhbGxJbmRpcmVjdCk6CisgICAgICAgIChKU0M6OldBU01GdW5jdGlvblN5bnRh
eENoZWNrZXI6OnVwZGF0ZVRlbXBTdGFja0hlaWdodEZvckNhbGwpOgorICAgICAgICAqIHdhc20v
V0FTTU1vZHVsZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OldBU01Nb2R1bGVQYXJzZXI6OnBh
cnNlRnVuY3Rpb25Qb2ludGVyVGFibGVTZWN0aW9uKToKKyAgICAgICAgKEpTQzo6V0FTTU1vZHVs
ZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb25TZWN0aW9uKToKKwogMjAxNS0wOS0xMSAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjE4
OTU4NSk6IHJ1bi1wZXJmLXRlc3RzIFNwZWVkb21ldGVyIGZhaWxzIHdpdGggYSBjb25zb2xlIGVy
cm9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3dhc20t
Y2FsbHMuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3dhc20tY2FsbHMu
anMKaW5kZXggNDI4NjU1OTFlOThmMjQ3YTk3YjJiZTViNGRiZTA1YjBiYzM4NTgzZi4uMjg2NWU4
YmE4MGI5ODY2MjQ4ODQ2NDEyYWMzNTY1ODFhZDk1NzkwOCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy93YXNtLWNhbGxzLmpzCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvd2FzbS1jYWxscy5qcwpAQCAtMzIsMTAgKzMyLDQ0IEBA
IGZ1bmN0aW9uIGFzbU1vZHVsZShnbG9iYWwsIGVudiwgYnVmZmVyKSB7CiAgICAgICAgIHJldHVy
biAoKCh4ICogeSkgfCAwKSAvIChnY2QoeCwgeSkgfCAwKSkgfCAwOwogICAgIH0KIAorICAgIGZ1
bmN0aW9uIGFkZFN1Yk11bERpdihpLCB4LCB5KSB7CisgICAgICAgIGkgPSBpIHwgMDsKKyAgICAg
ICAgeCA9IHggfCAwOworICAgICAgICB5ID0geSB8IDA7CisgICAgICAgIHJldHVybiBhZGRTdWJN
dWxEaXZUYWJsZVtpICYgM10oeCwgeSkgfCAwOworICAgIH0KKworICAgIGZ1bmN0aW9uIGFkZCh4
LCB5KSB7CisgICAgICAgIHggPSB4IHwgMDsKKyAgICAgICAgeSA9IHkgfCAwOworICAgICAgICBy
ZXR1cm4gKHggKyB5KSB8IDA7CisgICAgfQorCisgICAgZnVuY3Rpb24gc3ViKHgsIHkpIHsKKyAg
ICAgICAgeCA9IHggfCAwOworICAgICAgICB5ID0geSB8IDA7CisgICAgICAgIHJldHVybiAoeCAt
IHkpIHwgMDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBtdWwoeCwgeSkgeworICAgICAgICB4ID0g
eCB8IDA7CisgICAgICAgIHkgPSB5IHwgMDsKKyAgICAgICAgcmV0dXJuICh4ICogeSkgfCAwOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIGRpdih4LCB5KSB7CisgICAgICAgIHggPSB4IHwgMDsKKyAg
ICAgICAgeSA9IHkgfCAwOworICAgICAgICByZXR1cm4gKCh4IHwgMCkgLyAoeSB8IDApKSB8IDA7
CisgICAgfQorCisgICAgdmFyIGFkZFN1Yk11bERpdlRhYmxlID0gW2FkZCwgc3ViLCBtdWwsIGRp
dl07CisKICAgICByZXR1cm4gewogICAgICAgICBmaWJvbmFjY2k6IGZpYm9uYWNjaSwKICAgICAg
ICAgZ2NkOiBnY2QsCiAgICAgICAgIGxjbTogbGNtLAorICAgICAgICBhZGRTdWJNdWxEaXY6IGFk
ZFN1Yk11bERpdiwKICAgICB9OwogfQogKi8KQEAgLTQ1LDMgKzc5LDExIEBAIHZhciBtb2R1bGUg
PSBsb2FkV2ViQXNzZW1ibHkoIndhc20vY2FsbHMud2FzbSIpOwogc2hvdWxkQmUobW9kdWxlLmZp
Ym9uYWNjaSgxMCksIDg5KTsKIHNob3VsZEJlKG1vZHVsZS5nY2QoMTUsIDI1KSwgNSk7CiBzaG91
bGRCZShtb2R1bGUubGNtKDE1LCAyNSksIDc1KTsKKworc2hvdWxkQmUobW9kdWxlLmFkZFN1Yk11
bERpdigwLCA2LCAyKSwgOCk7CitzaG91bGRCZShtb2R1bGUuYWRkU3ViTXVsRGl2KDEsIDYsIDIp
LCA0KTsKK3Nob3VsZEJlKG1vZHVsZS5hZGRTdWJNdWxEaXYoMiwgNiwgMiksIDEyKTsKK3Nob3Vs
ZEJlKG1vZHVsZS5hZGRTdWJNdWxEaXYoMywgNiwgMiksIDMpOworc2hvdWxkQmUobW9kdWxlLmFk
ZFN1Yk11bERpdig0LCA2LCAyKSwgOCk7CitzaG91bGRCZShtb2R1bGUuYWRkU3ViTXVsRGl2KDEw
LCA2LCAyKSwgMTIpOworc2hvdWxkQmUobW9kdWxlLmFkZFN1Yk11bERpdigtMSwgNiwgMiksIDMp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy93YXNtL2Nh
bGxzLndhc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3dhc20vY2FsbHMu
d2FzbQppbmRleCBkYjZmZDYwMGZmYWEyNDQ0MWY4M2M0YTExNjdhOGY0N2M2YzgzOWZlLi5jMzNl
YWNlOTUyOTUyYjg1ZmEyZGVjNmNhYmE2MzM5N2QxZWRhNmRmIDEwMDY0NApHSVQgYmluYXJ5IHBh
dGNoCmRlbHRhIDEwOAp6Y21ZZFkleEYtYVNlKG50JF5aaCk0MiVwNk9rZjY+NDw8TW03I1chdSFH
TUtAbTVxSShmfVQ8WEJmbUpxZnJFI0QKbndBX0olS3ZFdHxEdTdBRjB8eXlkQ0kqUHxDOG5lVm1u
UWpePUQxeypGKSN4RlNOO3syCgpkZWx0YSA0NQpvY21aMz9uNXN+b1NlJCFAbkU/Y3Q3I0trVzk1
NkY1R0JRancmfF9qYHA0Y0Q/MEhXanQ8XlRXeQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dBU01Gb3JtYXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dB
U01Gb3JtYXQuaAppbmRleCAwNzdiZjNhMjk4ZDBjMWNhNzY4NmYzMTc1MThjMWE5YjNmOTYzYzc2
Li5iMzYzNDEwNTY3M2FiZDU4ODc1YjQ2MTJjOWUzZjZhNmExNzJhOWNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRm9ybWF0LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV0FTTUZvcm1hdC5oCkBAIC01MCw2ICs1MCw4IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCitjbGFzcyBKU0Z1bmN0aW9uOworCiBlbnVtIGNsYXNzIFdBU01UeXBlIDogdWlu
dDhfdCB7CiAgICAgSTMyLAogICAgIEYzMiwKQEAgLTg1LDcgKzg3LDggQEAgc3RydWN0IFdBU01G
dW5jdGlvbkRlY2xhcmF0aW9uIHsKIAogc3RydWN0IFdBU01GdW5jdGlvblBvaW50ZXJUYWJsZSB7
CiAgICAgdWludDMyX3Qgc2lnbmF0dXJlSW5kZXg7Ci0gICAgVmVjdG9yPHVpbnQzMl90PiBlbGVt
ZW50czsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGZ1bmN0aW9uSW5kaWNlczsKKyAgICBWZWN0b3I8
SlNGdW5jdGlvbio+IGZ1bmN0aW9uczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uQ29tcGlsZXIuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvbkNvbXBpbGVyLmgKaW5kZXgg
ZDhiZjY1Mjg0ODI0NmUzMWYzYjFiOGQ0YWM1NzMzY2FlZDc3YzQ0Mi4uYjQ0NGEwMWM3ZWEzMjQ5
OWNiZGE5MTJiZTkwZTQ1NzM0MzViNDNlNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV0FTTUZ1bmN0aW9uQ29tcGlsZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XQVNNRnVuY3Rpb25Db21waWxlci5oCkBAIC02MDAsNiArNjAwLDIxIEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIFVOVVNFRDsKICAgICB9CiAKKyAgICBpbnQgYnVpbGRDYWxsSW5k
aXJlY3QodWludDMyX3QgZnVuY3Rpb25Qb2ludGVyVGFibGVJbmRleCwgaW50LCBpbnQsIGNvbnN0
IFdBU01TaWduYXR1cmUmIHNpZ25hdHVyZSwgV0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUp
CisgICAgeworICAgICAgICBib3hBcmd1bWVudHNBbmRBZGp1c3RTdGFja1BvaW50ZXIoc2lnbmF0
dXJlLmFyZ3VtZW50cyk7CisKKyAgICAgICAgY29uc3QgVmVjdG9yPEpTRnVuY3Rpb24qPiYgZnVu
Y3Rpb25zID0gbV9tb2R1bGUtPmZ1bmN0aW9uUG9pbnRlclRhYmxlcygpW2Z1bmN0aW9uUG9pbnRl
clRhYmxlSW5kZXhdLmZ1bmN0aW9uczsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGZ1bmN0
aW9ucy5kYXRhKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgIGxvYWQzMih0ZW1wb3JhcnlB
ZGRyZXNzKG1fdGVtcFN0YWNrVG9wIC0gMSksIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgbV90
ZW1wU3RhY2tUb3AtLTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKGZ1bmN0aW9ucy5zaXpl
KCkgLSAxKSwgR1BSSW5mbzo6cmVnVDEpOworICAgICAgICBsb2FkUHRyKEJhc2VJbmRleChHUFJJ
bmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEsIHRpbWVzUHRyKCkpLCBHUFJJbmZvOjpyZWdUMCk7
CisKKyAgICAgICAgY2FsbEFuZFVuYm94UmVzdWx0KHJldHVyblR5cGUpOworICAgICAgICByZXR1
cm4gVU5VU0VEOworICAgIH0KKwogICAgIHZvaWQgYXBwZW5kRXhwcmVzc2lvbkxpc3QoaW50Jiwg
aW50KSB7IH0KIAogICAgIHZvaWQgbGlua1RhcmdldChKdW1wVGFyZ2V0JiB0YXJnZXQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmNwcAppbmRl
eCBjZTczMGQ2YTljNjk3MzBmOThhZDQwMGIwNWZjMjkzZmE5NGNkYzZlLi43YTNlY2VkOGFkMWU3
MzUwY2YzZDFiZTQ4MTEwMGUzN2E5YTM2MmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5jcHAKQEAgLTUzMCw2ICs1MzAsOCBAQCBDb250
ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlRXhwcmVzc2lvbkkzMihDb250
ZXh0JiBjb250ZXh0KQogICAgICAgICAgICAgcmV0dXJuIHBhcnNlR2V0R2xvYmFsRXhwcmVzc2lv
bkkzMihjb250ZXh0KTsKICAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpDYWxsSW50
ZXJuYWw6CiAgICAgICAgICAgICByZXR1cm4gcGFyc2VDYWxsSW50ZXJuYWxFeHByZXNzaW9uSTMy
KGNvbnRleHQpOworICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OkNhbGxJbmRpcmVj
dDoKKyAgICAgICAgICAgIHJldHVybiBwYXJzZUNhbGxJbmRpcmVjdEV4cHJlc3Npb25JMzIoY29u
dGV4dCk7CiAgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6TmVnYXRlOgogICAgICAg
ICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OkJpdE5vdDoKICAgICAgICAgY2FzZSBXQVNNT3BF
eHByZXNzaW9uSTMyOjpDb3VudExlYWRpbmdaZXJvczoKQEAgLTU5Myw3ICs1OTUsNiBAQCBDb250
ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlRXhwcmVzc2lvbkkzMihDb250
ZXh0JiBjb250ZXh0KQogICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlN0b3JlV2l0
aE9mZnNldDE2OgogICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlN0b3JlMzI6CiAg
ICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6U3RvcmVXaXRoT2Zmc2V0MzI6Ci0gICAg
ICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkzMjo6Q2FsbEluZGlyZWN0OgogICAgICAgICBjYXNl
IFdBU01PcEV4cHJlc3Npb25JMzI6OkNhbGxJbXBvcnQ6CiAgICAgICAgIGNhc2UgV0FTTU9wRXhw
cmVzc2lvbkkzMjo6Q29uZGl0aW9uYWw6CiAgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkkz
Mjo6Q29tbWE6CkBAIC02ODUsNiArNjg2LDEyIEBAIENvbnRleHRFeHByZXNzaW9uIFdBU01GdW5j
dGlvblBhcnNlcjo6cGFyc2VDYWxsSW50ZXJuYWxFeHByZXNzaW9uSTMyKENvbnRleHQmIGNvCiB9
CiAKIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgorQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0
aW9uUGFyc2VyOjpwYXJzZUNhbGxJbmRpcmVjdEV4cHJlc3Npb25JMzIoQ29udGV4dCYgY29udGV4
dCkKK3sKKyAgICByZXR1cm4gcGFyc2VDYWxsSW5kaXJlY3QoY29udGV4dCwgV0FTTUV4cHJlc3Np
b25UeXBlOjpJMzIpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4KIENvbnRleHRFeHBy
ZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VVbmFyeUV4cHJlc3Npb25JMzIoQ29udGV4
dCYgY29udGV4dCwgV0FTTU9wRXhwcmVzc2lvbkkzMiBvcCkKIHsKICAgICBDb250ZXh0RXhwcmVz
c2lvbiBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uSTMyKGNvbnRleHQpOwpAQCAtOTg2LDYg
Kzk5MywyNCBAQCBDb250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlQ2Fs
bEludGVybmFsKENvbnRleHQmIGNvbnRleHQsIFdBU01FeAogICAgIHJldHVybiBjb250ZXh0LmJ1
aWxkQ2FsbEludGVybmFsKGZ1bmN0aW9uSW5kZXgsIGFyZ3VtZW50TGlzdCwgc2lnbmF0dXJlLCBy
ZXR1cm5UeXBlKTsKIH0KIAordGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+CitDb250ZXh0RXhwcmVz
c2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlQ2FsbEluZGlyZWN0KENvbnRleHQmIGNvbnRl
eHQsIFdBU01FeHByZXNzaW9uVHlwZSByZXR1cm5UeXBlKQoreworICAgIHVpbnQzMl90IGZ1bmN0
aW9uUG9pbnRlclRhYmxlSW5kZXg7CisgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKGZ1
bmN0aW9uUG9pbnRlclRhYmxlSW5kZXgsICJDYW5ub3QgcmVhZCB0aGUgZnVuY3Rpb24gcG9pbnRl
ciB0YWJsZSBpbmRleC4iKTsKKyAgICBGQUlMX0lGX0ZBTFNFKGZ1bmN0aW9uUG9pbnRlclRhYmxl
SW5kZXggPCBtX21vZHVsZS0+ZnVuY3Rpb25Qb2ludGVyVGFibGVzKCkuc2l6ZSgpLCAiVGhlIGZ1
bmN0aW9uIHBvaW50ZXIgdGFibGUgaW5kZXggaXMgaW5jb3JyZWN0LiIpOworICAgIGNvbnN0IFdB
U01GdW5jdGlvblBvaW50ZXJUYWJsZSYgZnVuY3Rpb25Qb2ludGVyVGFibGUgPSBtX21vZHVsZS0+
ZnVuY3Rpb25Qb2ludGVyVGFibGVzKClbZnVuY3Rpb25Qb2ludGVyVGFibGVJbmRleF07CisgICAg
Y29uc3QgV0FTTVNpZ25hdHVyZSYgc2lnbmF0dXJlID0gbV9tb2R1bGUtPnNpZ25hdHVyZXMoKVtm
dW5jdGlvblBvaW50ZXJUYWJsZS5zaWduYXR1cmVJbmRleF07CisgICAgRkFJTF9JRl9GQUxTRShz
aWduYXR1cmUucmV0dXJuVHlwZSA9PSByZXR1cm5UeXBlLCAiV3JvbmcgcmV0dXJuIHR5cGUuIik7
CisKKyAgICBDb250ZXh0RXhwcmVzc2lvbiBpbmRleCA9IHBhcnNlRXhwcmVzc2lvbkkzMihjb250
ZXh0KTsKKyAgICBQUk9QQUdBVEVfRVJST1IoKTsKKworICAgIENvbnRleHRFeHByZXNzaW9uTGlz
dCBhcmd1bWVudExpc3QgPSBwYXJzZUNhbGxBcmd1bWVudHMoY29udGV4dCwgc2lnbmF0dXJlLmFy
Z3VtZW50cyk7CisgICAgUFJPUEFHQVRFX0VSUk9SKCk7CisgICAgcmV0dXJuIGNvbnRleHQuYnVp
bGRDYWxsSW5kaXJlY3QoZnVuY3Rpb25Qb2ludGVyVGFibGVJbmRleCwgaW5kZXgsIGFyZ3VtZW50
TGlzdCwgc2lnbmF0dXJlLCByZXR1cm5UeXBlKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
ICNlbmRpZiAvLyBFTkFCTEUoV0VCQVNTRU1CTFkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL1dBU01GdW5jdGlvblBhcnNlci5oCmluZGV4IGRiOTA1ZTI3MjI2Y2E0MTJkOTljMDcy
NzExNGY4NzU1YmQxMWY2MTcuLmE4OTdkODNiM2Y4YzQ0Y2M4ODIxZGZiMGU5NDAyZDNhZGViOTgx
MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblBh
cnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblBhcnNl
ci5oCkBAIC05MCw2ICs5MCw3IEBAIHByaXZhdGU6CiAgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRl
eHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlR2V0TG9jYWxFeHByZXNzaW9uSTMyKENvbnRleHQm
KTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VH
ZXRHbG9iYWxFeHByZXNzaW9uSTMyKENvbnRleHQmKTsKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29u
dGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VDYWxsSW50ZXJuYWxFeHByZXNzaW9uSTMyKENv
bnRleHQmKTsKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24g
cGFyc2VDYWxsSW5kaXJlY3RFeHByZXNzaW9uSTMyKENvbnRleHQmKTsKICAgICB0ZW1wbGF0ZSA8
Y2xhc3MgQ29udGV4dD4gQ29udGV4dEV4cHJlc3Npb24gcGFyc2VVbmFyeUV4cHJlc3Npb25JMzIo
Q29udGV4dCYsIFdBU01PcEV4cHJlc3Npb25JMzIpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBDb250
ZXh0PiBDb250ZXh0RXhwcmVzc2lvbiBwYXJzZUJpbmFyeUV4cHJlc3Npb25JMzIoQ29udGV4dCYs
IFdBU01PcEV4cHJlc3Npb25JMzIpOwogICAgIHRlbXBsYXRlIDxjbGFzcyBDb250ZXh0PiBDb250
ZXh0RXhwcmVzc2lvbiBwYXJzZVJlbGF0aW9uYWxJMzJFeHByZXNzaW9uSTMyKENvbnRleHQmLCBX
QVNNT3BFeHByZXNzaW9uSTMyKTsKQEAgLTExNCw2ICsxMTUsNyBAQCBwcml2YXRlOgogCiAgICAg
dGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uTGlzdCBwYXJzZUNhbGxB
cmd1bWVudHMoQ29udGV4dCYsIGNvbnN0IFZlY3RvcjxXQVNNVHlwZT4mIGFyZ3VtZW50cyk7CiAg
ICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlQ2FsbElu
dGVybmFsKENvbnRleHQmLCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0dXJuVHlwZSk7CisgICAgdGVt
cGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNlQ2FsbEluZGlyZWN0
KENvbnRleHQmLCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0dXJuVHlwZSk7CiAKICAgICBKU1dBU01N
b2R1bGUqIG1fbW9kdWxlOwogICAgIFdBU01SZWFkZXIgbV9yZWFkZXI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyLmgKaW5k
ZXggMmUzODJhYWI3OWNkNDIyY2U5NmVhMjRiZmIzY2RlOGJiN2ZiMjVmMC4uMWU1MmQxNzNiZWQz
MmFjMmIwMDUwZWI3YWVjZjgyMjYzOTE1NzJkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlci5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL1dBU01GdW5jdGlvblN5bnRheENoZWNrZXIuaApAQCAtMTMzLDEyICsx
MzMsNyBAQCBwdWJsaWM6CiAgICAgaW50IGJ1aWxkQ2FsbEludGVybmFsKHVpbnQzMl90LCBpbnQs
IGNvbnN0IFdBU01TaWduYXR1cmUmIHNpZ25hdHVyZSwgV0FTTUV4cHJlc3Npb25UeXBlIHJldHVy
blR5cGUpCiAgICAgewogICAgICAgICBzaXplX3QgYXJndW1lbnRDb3VudCA9IHNpZ25hdHVyZS5h
cmd1bWVudHMuc2l6ZSgpOwotCi0gICAgICAgIC8vIEJveGVkIGFyZ3VtZW50cyArIHRoaXMgYXJn
dW1lbnQgKyBjYWxsIGZyYW1lIGhlYWRlciArIHBhZGRpbmcuCi0gICAgICAgIG1fdGVtcFN0YWNr
VG9wICs9IGFyZ3VtZW50Q291bnQgKyAxICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAr
IDE7Ci0gICAgICAgIHVwZGF0ZVRlbXBTdGFja0hlaWdodCgpOwotICAgICAgICBtX3RlbXBTdGFj
a1RvcCAtPSBhcmd1bWVudENvdW50ICsgMSArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUg
KyAxOwotCisgICAgICAgIHVwZGF0ZVRlbXBTdGFja0hlaWdodEZvckNhbGwoYXJndW1lbnRDb3Vu
dCk7CiAgICAgICAgIG1fdGVtcFN0YWNrVG9wIC09IGFyZ3VtZW50Q291bnQ7CiAgICAgICAgIGlm
IChyZXR1cm5UeXBlICE9IFdBU01FeHByZXNzaW9uVHlwZTo6Vm9pZCkgewogICAgICAgICAgICAg
bV90ZW1wU3RhY2tUb3ArKzsKQEAgLTE0Nyw2ICsxNDIsMTYgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gVU5VU0VEOwogICAgIH0KIAorICAgIGludCBidWlsZENhbGxJbmRpcmVjdCh1aW50MzJf
dCwgaW50LCBpbnQsIGNvbnN0IFdBU01TaWduYXR1cmUmIHNpZ25hdHVyZSwgV0FTTUV4cHJlc3Np
b25UeXBlIHJldHVyblR5cGUpCisgICAgeworICAgICAgICBzaXplX3QgYXJndW1lbnRDb3VudCA9
IHNpZ25hdHVyZS5hcmd1bWVudHMuc2l6ZSgpOworICAgICAgICB1cGRhdGVUZW1wU3RhY2tIZWln
aHRGb3JDYWxsKGFyZ3VtZW50Q291bnQpOworICAgICAgICBtX3RlbXBTdGFja1RvcCAtPSBhcmd1
bWVudENvdW50ICsgMTsKKyAgICAgICAgaWYgKHJldHVyblR5cGUgIT0gV0FTTUV4cHJlc3Npb25U
eXBlOjpWb2lkKQorICAgICAgICAgICAgbV90ZW1wU3RhY2tUb3ArKzsKKyAgICAgICAgcmV0dXJu
IFVOVVNFRDsKKyAgICB9CisKICAgICB2b2lkIGFwcGVuZEV4cHJlc3Npb25MaXN0KGludCYsIGlu
dCkgeyB9CiAKICAgICB2b2lkIGxpbmtUYXJnZXQoY29uc3QgaW50JikgeyB9CkBAIC0xODUsNiAr
MTkwLDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX3RlbXBTdGFja0hlaWdodCA9IG1fdGVt
cFN0YWNrVG9wOwogICAgIH0KIAorICAgIHZvaWQgdXBkYXRlVGVtcFN0YWNrSGVpZ2h0Rm9yQ2Fs
bChzaXplX3QgYXJndW1lbnRDb3VudCkKKyAgICB7CisgICAgICAgIC8vIEJveGVkIGFyZ3VtZW50
cyArIHRoaXMgYXJndW1lbnQgKyBjYWxsIGZyYW1lIGhlYWRlciArIG1heGltdW0gcGFkZGluZy4K
KyAgICAgICAgbV90ZW1wU3RhY2tUb3AgKz0gYXJndW1lbnRDb3VudCArIDEgKyBKU1N0YWNrOjpD
YWxsRnJhbWVIZWFkZXJTaXplICsgMTsKKyAgICAgICAgdXBkYXRlVGVtcFN0YWNrSGVpZ2h0KCk7
CisgICAgICAgIG1fdGVtcFN0YWNrVG9wIC09IGFyZ3VtZW50Q291bnQgKyAxICsgSlNTdGFjazo6
Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIDE7CisgICAgfQorCiAgICAgdW5zaWduZWQgbV9udW1iZXJP
ZkxvY2FsczsKICAgICB1bnNpZ25lZCBtX3RlbXBTdGFja1RvcCB7IDAgfTsKICAgICB1bnNpZ25l
ZCBtX3RlbXBTdGFja0hlaWdodCB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dBU01Nb2R1bGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV0FTTU1vZHVsZVBhcnNlci5jcHAKaW5kZXggMTUxOTA5NmVhOTJmZGE2NjY0ZjI5ZTczOGYw
MjdjZjNjZDE0ZjRhZi4uMzU1ZWIyNTFlYzQ0MTE5YjI2OGM0Yzk2Y2NhNDc1YThjODRmMzZmZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5jcHAK
QEAgLTI1MCwxNCArMjUwLDE3IEBAIHZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlv
blBvaW50ZXJUYWJsZVNlY3Rpb24oKQogICAgICAgICBXQVNNRnVuY3Rpb25Qb2ludGVyVGFibGUg
ZnVuY3Rpb25Qb2ludGVyVGFibGU7CiAgICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJ
TChmdW5jdGlvblBvaW50ZXJUYWJsZS5zaWduYXR1cmVJbmRleCwgIkNhbm5vdCByZWFkIHRoZSBz
aWduYXR1cmUgaW5kZXguIik7CiAgICAgICAgIEZBSUxfSUZfRkFMU0UoZnVuY3Rpb25Qb2ludGVy
VGFibGUuc2lnbmF0dXJlSW5kZXggPCBtX21vZHVsZS0+c2lnbmF0dXJlcygpLnNpemUoKSwgIlRo
ZSBzaWduYXR1cmUgaW5kZXggaXMgaW5jb3JyZWN0LiIpOwotICAgICAgICB1aW50MzJfdCBudW1i
ZXJPZkVsZW1lbnRzOwotICAgICAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVy
T2ZFbGVtZW50cywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgb2YgYSBmdW5j
dGlvbiBwb2ludGVyIHRhYmxlLiIpOwotICAgICAgICBGQUlMX0lGX0ZBTFNFKGhhc09uZUJpdFNl
dChudW1iZXJPZkVsZW1lbnRzKSwgIlRoZSBudW1iZXIgb2YgZWxlbWVudHMgbXVzdCBiZSBhIHBv
d2VyIG9mIHR3by4iKTsKLSAgICAgICAgZnVuY3Rpb25Qb2ludGVyVGFibGUuZWxlbWVudHMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1iZXJPZkVsZW1lbnRzKTsKLSAgICAgICAgZm9yICh1aW50
MzJfdCBqID0gMDsgaiA8IG51bWJlck9mRWxlbWVudHM7ICsraikgewotICAgICAgICAgICAgdWlu
dDMyX3QgZWxlbWVudDsKLSAgICAgICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChl
bGVtZW50LCAiQ2Fubm90IHJlYWQgYW4gZWxlbWVudCBvZiBhIGZ1bmN0aW9uIHBvaW50ZXIgdGFi
bGUuIik7Ci0gICAgICAgICAgICBmdW5jdGlvblBvaW50ZXJUYWJsZS5lbGVtZW50cy51bmNoZWNr
ZWRBcHBlbmQoZWxlbWVudCk7CisgICAgICAgIHVpbnQzMl90IG51bWJlck9mRnVuY3Rpb25zOwor
ICAgICAgICBSRUFEX0NPTVBBQ1RfVUlOVDMyX09SX0ZBSUwobnVtYmVyT2ZGdW5jdGlvbnMsICJD
YW5ub3QgcmVhZCB0aGUgbnVtYmVyIG9mIGZ1bmN0aW9ucyBvZiBhIGZ1bmN0aW9uIHBvaW50ZXIg
dGFibGUuIik7CisgICAgICAgIEZBSUxfSUZfRkFMU0UoaGFzT25lQml0U2V0KG51bWJlck9mRnVu
Y3Rpb25zKSwgIlRoZSBudW1iZXIgb2YgZnVuY3Rpb25zIG11c3QgYmUgYSBwb3dlciBvZiB0d28u
Iik7CisgICAgICAgIGZ1bmN0aW9uUG9pbnRlclRhYmxlLmZ1bmN0aW9uSW5kaWNlcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KG51bWJlck9mRnVuY3Rpb25zKTsKKyAgICAgICAgZnVuY3Rpb25Qb2lu
dGVyVGFibGUuZnVuY3Rpb25zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZGdW5jdGlv
bnMpOworICAgICAgICBmb3IgKHVpbnQzMl90IGogPSAwOyBqIDwgbnVtYmVyT2ZGdW5jdGlvbnM7
ICsraikgeworICAgICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleDsKKyAgICAgICAgICAg
IFJFQURfQ09NUEFDVF9VSU5UMzJfT1JfRkFJTChmdW5jdGlvbkluZGV4LCAiQ2Fubm90IHJlYWQg
YSBmdW5jdGlvbiBpbmRleCBvZiBhIGZ1bmN0aW9uIHBvaW50ZXIgdGFibGUuIik7CisgICAgICAg
ICAgICBGQUlMX0lGX0ZBTFNFKGZ1bmN0aW9uSW5kZXggPCBtX21vZHVsZS0+ZnVuY3Rpb25EZWNs
YXJhdGlvbnMoKS5zaXplKCksICJUaGUgZnVuY3Rpb24gaW5kZXggaXMgaW5jb3JyZWN0LiIpOwor
ICAgICAgICAgICAgRkFJTF9JRl9GQUxTRShtX21vZHVsZS0+ZnVuY3Rpb25EZWNsYXJhdGlvbnMo
KVtmdW5jdGlvbkluZGV4XS5zaWduYXR1cmVJbmRleCA9PSBmdW5jdGlvblBvaW50ZXJUYWJsZS5z
aWduYXR1cmVJbmRleCwgIlRoZSBzaWduYXR1cmUgb2YgdGhlIGZ1bmN0aW9uIGRvZXNuJ3QgbWF0
Y2ggdGhhdCBvZiB0aGUgZnVuY3Rpb24gcG9pbnRlciB0YWJsZS4iKTsKKyAgICAgICAgICAgIGZ1
bmN0aW9uUG9pbnRlclRhYmxlLmZ1bmN0aW9uSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQoZnVuY3Rp
b25JbmRleCk7CiAgICAgICAgIH0KICAgICAgICAgbV9tb2R1bGUtPmZ1bmN0aW9uUG9pbnRlclRh
YmxlcygpLnVuY2hlY2tlZEFwcGVuZChmdW5jdGlvblBvaW50ZXJUYWJsZSk7CiAgICAgfQpAQCAt
MjY5LDYgKzI3MiwxMSBAQCB2b2lkIFdBU01Nb2R1bGVQYXJzZXI6OnBhcnNlRnVuY3Rpb25EZWZp
bml0aW9uU2VjdGlvbigpCiAgICAgICAgIHBhcnNlRnVuY3Rpb25EZWZpbml0aW9uKGZ1bmN0aW9u
SW5kZXgpOwogICAgICAgICBQUk9QQUdBVEVfRVJST1IoKTsKICAgICB9CisKKyAgICBmb3IgKFdB
U01GdW5jdGlvblBvaW50ZXJUYWJsZSYgZnVuY3Rpb25Qb2ludGVyVGFibGUgOiBtX21vZHVsZS0+
ZnVuY3Rpb25Qb2ludGVyVGFibGVzKCkpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBmdW5jdGlvblBvaW50ZXJUYWJsZS5mdW5jdGlvbkluZGljZXMuc2l6ZSgpOyArK2kpCisgICAg
ICAgICAgICBmdW5jdGlvblBvaW50ZXJUYWJsZS5mdW5jdGlvbnMudW5jaGVja2VkQXBwZW5kKG1f
bW9kdWxlLT5mdW5jdGlvbnMoKVtmdW5jdGlvblBvaW50ZXJUYWJsZS5mdW5jdGlvbkluZGljZXNb
aV1dLmdldCgpKTsKKyAgICB9CiB9CiAKIHZvaWQgV0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5j
dGlvbkRlZmluaXRpb24oc2l6ZV90IGZ1bmN0aW9uSW5kZXgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261337</attachid>
            <date>2015-09-16 16:45:14 -0700</date>
            <delta_ts>2015-09-16 18:23:36 -0700</delta_ts>
            <desc>Update to ToT and use Math.imul for multiplication</desc>
            <filename>bug-149100-20150916164540.patch</filename>
            <type>text/plain</type>
            <size>15741</size>
            <attacher name="Sukolsak Sakshuwong">sukolsak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg5ODc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
Njg4MDg4ZjA1NTkyOTRjOTk3M2IyZDZiYjBhZGQyMDdkNTdlMjQzLi5hZTMzMjA2OTA1NDMyZmNj
YmU1MjViODQ5NDgxMjEwYjA3MjZiNmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzOCBAQAorMjAxNS0wOS0xNiAgU3Vrb2xzYWsgU2Frc2h1d29uZyAgPHN1a29sc2FrQGdt
YWlsLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgaW5kaXJlY3QgY2FsbHMgaW4gV2ViQXNzZW1i
bHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTEw
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
cGF0Y2ggaW1wbGVtZW50IGluZGlyZWN0IGNhbGxzIGZvciBXZWJBc3NlbWJseSBmaWxlcyBnZW5l
cmF0ZWQgYnkKKyAgICAgICAgcGFjay1hc21qcyA8aHR0cHM6Ly9naXRodWIuY29tL1dlYkFzc2Vt
Ymx5L3BvbHlmaWxsLXByb3RvdHlwZS0xPi4KKyAgICAgICAgcGFjay1hc21qcyB1c2VzIHRoZSBz
YW1lIGluZGlyZWN0IGNhbGwgbW9kZWwgYXMgYXNtLmpzLiBJbiBhc20uanMsIGFuCisgICAgICAg
IGluZGlyZWN0IGNhbGwgbG9va3MgbGlrZSB0aGlzOgorICAgICAgICAgICAgdFtpICYgbl0oLi4u
KQorICAgICAgICB3aGVyZSB0IGlzIGEgdmFyaWFibGUgcmVmZXJyaW5nIHRvIGFuIGFycmF5IG9m
IGZ1bmN0aW9ucyB3aXRoIHRoZSBzYW1lCisgICAgICAgIHNpZ25hdHVyZSwgaSBpcyBhbiBpbnRl
Z2VyIGV4cHJlc3Npb24sIG4gaXMgYW4gaW50ZWdlciB0aGF0IGlzIGVxdWFsIHRvCisgICAgICAg
ICh0Lmxlbmd0aCAtIDEpLCBhbmQgdC5sZW5ndGggaXMgYSBwb3dlciBvZiB0d28uIHBhY2stYXNt
anMgZG9lcyBub3QKKyAgICAgICAgdXNlIHRoZSAnJicgb3BlcmF0b3Igbm9yIG4gaW4gdGhlIFdl
YkFzc2VtYmx5IG91dHB1dCwgYnV0IHRoZSBzZW1hbnRpY3MKKyAgICAgICAgaXMgc3RpbGwgdGhl
IHNhbWUgYXMgYXNtLmpzLgorCisgICAgICAgICogdGVzdHMvc3RyZXNzL3dhc20tY2FsbHMuanM6
CisgICAgICAgICogdGVzdHMvc3RyZXNzL3dhc20vY2FsbHMud2FzbToKKyAgICAgICAgKiB3YXNt
L1dBU01Gb3JtYXQuaDoKKyAgICAgICAgKiB3YXNtL1dBU01GdW5jdGlvbkNvbXBpbGVyLmg6Cisg
ICAgICAgIChKU0M6OldBU01GdW5jdGlvbkNvbXBpbGVyOjpidWlsZENhbGxJbmRpcmVjdCk6Cisg
ICAgICAgICogd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpXQVNN
RnVuY3Rpb25QYXJzZXI6OnBhcnNlRXhwcmVzc2lvbkkzMik6CisgICAgICAgIChKU0M6OldBU01G
dW5jdGlvblBhcnNlcjo6cGFyc2VFeHByZXNzaW9uRjMyKToKKyAgICAgICAgKEpTQzo6V0FTTUZ1
bmN0aW9uUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25GNjQpOgorICAgICAgICAoSlNDOjpXQVNNRnVu
Y3Rpb25QYXJzZXI6OnBhcnNlQ2FsbEluZGlyZWN0KToKKyAgICAgICAgKiB3YXNtL1dBU01GdW5j
dGlvblBhcnNlci5oOgorICAgICAgICAqIHdhc20vV0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlci5o
OgorICAgICAgICAoSlNDOjpXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyOjpidWlsZENhbGxJbmRp
cmVjdCk6CisgICAgICAgICogd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6V0FTTU1vZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvblBvaW50ZXJUYWJsZVNlY3Rpb24pOgor
ICAgICAgICAoSlNDOjpXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvblNl
Y3Rpb24pOgorCiAyMDE1LTA5LTE1ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29t
PgogCiAgICAgICAgIFJvbGxvdXQgcjE4OTc3NCBhbmQgMTg5ODE4LgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy93YXNtLWNhbGxzLmpzIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy93YXNtLWNhbGxzLmpzCmluZGV4IDI3NjhiMmJmMTQ4
NjU0NjIzNWYwNGUwMTI2MWIxMmYxMjY3MzY4YjEuLmNmODZjMDY4MzUzNDVlNTI3OGUxOTA1MDJh
NjFjNjNhOWIxZWE1OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3Mvd2FzbS1jYWxscy5qcworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL3dhc20tY2FsbHMuanMKQEAgLTM2LDYgKzM2LDM3IEBAIGZ1bmN0aW9uIGFzbU1vZHVsZShn
bG9iYWwsIGltcG9ydHMsIGJ1ZmZlcikgewogICAgICAgICByZXR1cm4gKGltdWwoeCwgeSkgLyAo
Z2NkKHgsIHkpIHwgMCkpIHwgMDsKICAgICB9CiAKKyAgICBmdW5jdGlvbiBhZGRTdWJNdWxEaXYo
aSwgeCwgeSkgeworICAgICAgICBpID0gaSB8IDA7CisgICAgICAgIHggPSB4IHwgMDsKKyAgICAg
ICAgeSA9IHkgfCAwOworICAgICAgICByZXR1cm4gYWRkU3ViTXVsRGl2VGFibGVbaSAmIDNdKHgs
IHkpIHwgMDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBhZGQoeCwgeSkgeworICAgICAgICB4ID0g
eCB8IDA7CisgICAgICAgIHkgPSB5IHwgMDsKKyAgICAgICAgcmV0dXJuICh4ICsgeSkgfCAwOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIHN1Yih4LCB5KSB7CisgICAgICAgIHggPSB4IHwgMDsKKyAg
ICAgICAgeSA9IHkgfCAwOworICAgICAgICByZXR1cm4gKHggLSB5KSB8IDA7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gbXVsKHgsIHkpIHsKKyAgICAgICAgeCA9IHggfCAwOworICAgICAgICB5ID0g
eSB8IDA7CisgICAgICAgIHJldHVybiBpbXVsKHgsIHkpOworICAgIH0KKworICAgIGZ1bmN0aW9u
IGRpdih4LCB5KSB7CisgICAgICAgIHggPSB4IHwgMDsKKyAgICAgICAgeSA9IHkgfCAwOworICAg
ICAgICByZXR1cm4gKCh4IHwgMCkgLyAoeSB8IDApKSB8IDA7CisgICAgfQorCiAgICAgZnVuY3Rp
b24gY2FsbFN1bSh4LCB5KSB7CiAgICAgICAgIHggPSB4IHwgMDsKICAgICAgICAgeSA9IHkgfCAw
OwpAQCAtNDgsMTAgKzc5LDE1IEBAIGZ1bmN0aW9uIGFzbU1vZHVsZShnbG9iYWwsIGltcG9ydHMs
IGJ1ZmZlcikgewogICAgICAgICByZXR1cm4gbWF4KHggfCAwLCB5IHwgMCkgfCAwOwogICAgIH0K
IAorICAgIHZhciBhZGRTdWJNdWxEaXZUYWJsZSA9IFthZGQsIHN1YiwgbXVsLCBkaXZdOworCiAg
ICAgcmV0dXJuIHsKICAgICAgICAgZmlib25hY2NpOiBmaWJvbmFjY2ksCiAgICAgICAgIGdjZDog
Z2NkLAogICAgICAgICBsY206IGxjbSwKKworICAgICAgICBhZGRTdWJNdWxEaXY6IGFkZFN1Yk11
bERpdiwKKwogICAgICAgICBjYWxsU3VtOiBjYWxsU3VtLAogICAgICAgICBjYWxsTWF4OiBjYWxs
TWF4LAogICAgIH07CkBAIC02OCw1ICsxMDQsMTMgQEAgc2hvdWxkQmUobW9kdWxlLmZpYm9uYWNj
aSgxMCksIDg5KTsKIHNob3VsZEJlKG1vZHVsZS5nY2QoMTUsIDI1KSwgNSk7CiBzaG91bGRCZSht
b2R1bGUubGNtKDE1LCAyNSksIDc1KTsKIAorc2hvdWxkQmUobW9kdWxlLmFkZFN1Yk11bERpdigw
LCA2LCAyKSwgOCk7CitzaG91bGRCZShtb2R1bGUuYWRkU3ViTXVsRGl2KDEsIDYsIDIpLCA0KTsK
K3Nob3VsZEJlKG1vZHVsZS5hZGRTdWJNdWxEaXYoMiwgNiwgMiksIDEyKTsKK3Nob3VsZEJlKG1v
ZHVsZS5hZGRTdWJNdWxEaXYoMywgNiwgMiksIDMpOworc2hvdWxkQmUobW9kdWxlLmFkZFN1Yk11
bERpdig0LCA2LCAyKSwgOCk7CitzaG91bGRCZShtb2R1bGUuYWRkU3ViTXVsRGl2KDEwLCA2LCAy
KSwgMTIpOworc2hvdWxkQmUobW9kdWxlLmFkZFN1Yk11bERpdigtMSwgNiwgMiksIDMpOworCiBz
aG91bGRCZShtb2R1bGUuY2FsbFN1bSgxLCAyKSwgMyk7CiBzaG91bGRCZShtb2R1bGUuY2FsbE1h
eCgxLCAyKSwgMik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL3dhc20vY2FsbHMud2FzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
d2FzbS9jYWxscy53YXNtCmluZGV4IGZhNGE3YjNlNjY0NjY4N2YyYWZiMDdlNjcyNTA1ZGJiOGVm
ZDRkM2UuLjAwYzI4ZTJhMmNmMjljZTFlMWNhNzE3NGFhNTgyODBlNTAxMTJiNTYgMTAwNjQ0CkdJ
VCBiaW5hcnkgcGF0Y2gKZGVsdGEgMTUxCnpjbWJRdGMjJT04SmgzPTtHYjtsS0ZmJVlSRmZmNGA2
OXZWRHhFTDUybkhac2ZnQHUpa2VXSVJXa35xVkdnTkdVegp6YFE7OEExZHtTI1FVT2RWZj1MT1dK
V3hWe0B4VmJ3d3pTTm97Smd+RTxWKiZKXnlDeDwjKz45XzJCeVQ2bDtGfU4KYy1famhIJXJYWSU8
aXdudTtMPTxNNGlMalB2NFZqVTBJdnVwNGdkZkUKCmRlbHRhIDEwNwp6Y21jYn1JR0l0ZUpoMz5w
aUc9fEttPjN2QTFPcFJPYWNNM0NCViVyMjEmezx3RnxZenpLPXdwQ0xsWCZ4MHx5JXoKdmA2VTwr
OUFzb28lU183OE9INUFBV01EezdQR01sb056UD9wTj4wcWwyP2lSJDN9V35LTzxANTVKbjB1RQoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Gb3JtYXQuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01Gb3JtYXQuaAppbmRleCAwNzdiZjNhMjk4ZDBj
MWNhNzY4NmYzMTc1MThjMWE5YjNmOTYzYzc2Li5iMzYzNDEwNTY3M2FiZDU4ODc1YjQ2MTJjOWUz
ZjZhNmExNzJhOWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNN
Rm9ybWF0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZvcm1hdC5oCkBA
IC01MCw2ICs1MCw4IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBKU0Z1bmN0aW9uOwor
CiBlbnVtIGNsYXNzIFdBU01UeXBlIDogdWludDhfdCB7CiAgICAgSTMyLAogICAgIEYzMiwKQEAg
LTg1LDcgKzg3LDggQEAgc3RydWN0IFdBU01GdW5jdGlvbkRlY2xhcmF0aW9uIHsKIAogc3RydWN0
IFdBU01GdW5jdGlvblBvaW50ZXJUYWJsZSB7CiAgICAgdWludDMyX3Qgc2lnbmF0dXJlSW5kZXg7
Ci0gICAgVmVjdG9yPHVpbnQzMl90PiBlbGVtZW50czsKKyAgICBWZWN0b3I8dWludDMyX3Q+IGZ1
bmN0aW9uSW5kaWNlczsKKyAgICBWZWN0b3I8SlNGdW5jdGlvbio+IGZ1bmN0aW9uczsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV0FTTUZ1bmN0aW9uQ29tcGlsZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dB
U01GdW5jdGlvbkNvbXBpbGVyLmgKaW5kZXggZTYyYzc1ZjNlMGViMDgwNTM1ZWUyNWVmMTJlNzUy
MTI3ZmExY2ZjYi4uYjEwODQ2OWQ2NzRhYWIzMWUzYzJlYjk1NmUwNDhiYTI3YzhjMTQwMiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uQ29tcGlsZXIu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25Db21waWxlci5o
CkBAIC02NTQsNiArNjU0LDIxIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFVOVVNFRDsKICAg
ICB9CiAKKyAgICBpbnQgYnVpbGRDYWxsSW5kaXJlY3QodWludDMyX3QgZnVuY3Rpb25Qb2ludGVy
VGFibGVJbmRleCwgaW50LCBpbnQsIGNvbnN0IFdBU01TaWduYXR1cmUmIHNpZ25hdHVyZSwgV0FT
TUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUpCisgICAgeworICAgICAgICBib3hBcmd1bWVudHNB
bmRBZGp1c3RTdGFja1BvaW50ZXIoc2lnbmF0dXJlLmFyZ3VtZW50cyk7CisKKyAgICAgICAgY29u
c3QgVmVjdG9yPEpTRnVuY3Rpb24qPiYgZnVuY3Rpb25zID0gbV9tb2R1bGUtPmZ1bmN0aW9uUG9p
bnRlclRhYmxlcygpW2Z1bmN0aW9uUG9pbnRlclRhYmxlSW5kZXhdLmZ1bmN0aW9uczsKKyAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGZ1bmN0aW9ucy5kYXRhKCkpLCBHUFJJbmZvOjpyZWdUMCk7
CisgICAgICAgIGxvYWQzMih0ZW1wb3JhcnlBZGRyZXNzKG1fdGVtcFN0YWNrVG9wIC0gMSksIEdQ
UkluZm86OnJlZ1QxKTsKKyAgICAgICAgbV90ZW1wU3RhY2tUb3AtLTsKKyAgICAgICAgYW5kMzIo
VHJ1c3RlZEltbTMyKGZ1bmN0aW9ucy5zaXplKCkgLSAxKSwgR1BSSW5mbzo6cmVnVDEpOworICAg
ICAgICBsb2FkUHRyKEJhc2VJbmRleChHUFJJbmZvOjpyZWdUMCwgR1BSSW5mbzo6cmVnVDEsIHRp
bWVzUHRyKCkpLCBHUFJJbmZvOjpyZWdUMCk7CisKKyAgICAgICAgY2FsbEFuZFVuYm94UmVzdWx0
KHJldHVyblR5cGUpOworICAgICAgICByZXR1cm4gVU5VU0VEOworICAgIH0KKwogICAgIGludCBi
dWlsZENhbGxJbXBvcnQodWludDMyX3QgZnVuY3Rpb25JbXBvcnRJbmRleCwgaW50LCBjb25zdCBX
QVNNU2lnbmF0dXJlJiBzaWduYXR1cmUsIFdBU01FeHByZXNzaW9uVHlwZSByZXR1cm5UeXBlKQog
ICAgIHsKICAgICAgICAgYm94QXJndW1lbnRzQW5kQWRqdXN0U3RhY2tQb2ludGVyKHNpZ25hdHVy
ZS5hcmd1bWVudHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FT
TUZ1bmN0aW9uUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5j
dGlvblBhcnNlci5jcHAKaW5kZXggZjhiYTlkZjBiNTYyMzU5ZTYxNTM3Y2U5M2UzNzA4YzYxYzQ2
NTIxNS4uMWNlMTc0NmQxYzJhYTliYmU5MDI5NDRlNzUxNWM2MDFhYWI0ZjdiYyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNRnVuY3Rpb25QYXJzZXIuY3BwCkBAIC01
MzAsNiArNTMwLDggQEAgQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJz
ZUV4cHJlc3Npb25JMzIoQ29udGV4dCYgY29udGV4dCkKICAgICAgICAgICAgIHJldHVybiBwYXJz
ZUdldEdsb2JhbEV4cHJlc3Npb25JMzIoY29udGV4dCk7CiAgICAgICAgIGNhc2UgV0FTTU9wRXhw
cmVzc2lvbkkzMjo6Q2FsbEludGVybmFsOgogICAgICAgICAgICAgcmV0dXJuIHBhcnNlQ2FsbElu
dGVybmFsRXhwcmVzc2lvbkkzMihjb250ZXh0KTsKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNz
aW9uSTMyOjpDYWxsSW5kaXJlY3Q6CisgICAgICAgICAgICByZXR1cm4gcGFyc2VDYWxsSW5kaXJl
Y3QoY29udGV4dCwgV0FTTUV4cHJlc3Npb25UeXBlOjpJMzIpOwogICAgICAgICBjYXNlIFdBU01P
cEV4cHJlc3Npb25JMzI6OkNhbGxJbXBvcnQ6CiAgICAgICAgICAgICByZXR1cm4gcGFyc2VDYWxs
SW1wb3J0KGNvbnRleHQsIFdBU01FeHByZXNzaW9uVHlwZTo6STMyKTsKICAgICAgICAgY2FzZSBX
QVNNT3BFeHByZXNzaW9uSTMyOjpOZWdhdGU6CkBAIC01OTUsNyArNTk3LDYgQEAgQ29udGV4dEV4
cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25JMzIoQ29udGV4dCYg
Y29udGV4dCkKICAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpTdG9yZVdpdGhPZmZz
ZXQxNjoKICAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpTdG9yZTMyOgogICAgICAg
ICBjYXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OlN0b3JlV2l0aE9mZnNldDMyOgotICAgICAgICBj
YXNlIFdBU01PcEV4cHJlc3Npb25JMzI6OkNhbGxJbmRpcmVjdDoKICAgICAgICAgY2FzZSBXQVNN
T3BFeHByZXNzaW9uSTMyOjpDb25kaXRpb25hbDoKICAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNz
aW9uSTMyOjpDb21tYToKICAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uSTMyOjpGcm9tRjMy
OgpAQCAtNzUxLDYgKzc1Miw4IEBAIENvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNl
cjo6cGFyc2VFeHByZXNzaW9uRjMyKENvbnRleHQmIGNvbnRleHQpCiAgICAgICAgICAgICByZXR1
cm4gcGFyc2VHZXRMb2NhbEV4cHJlc3Npb25GMzIoY29udGV4dCk7CiAgICAgICAgIGNhc2UgV0FT
TU9wRXhwcmVzc2lvbkYzMjo6R2V0R2xvYmFsOgogICAgICAgICAgICAgcmV0dXJuIHBhcnNlR2V0
R2xvYmFsRXhwcmVzc2lvbkYzMihjb250ZXh0KTsKKyAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNz
aW9uRjMyOjpDYWxsSW5kaXJlY3Q6CisgICAgICAgICAgICByZXR1cm4gcGFyc2VDYWxsSW5kaXJl
Y3QoY29udGV4dCwgV0FTTUV4cHJlc3Npb25UeXBlOjpGMzIpOwogICAgICAgICBjYXNlIFdBU01P
cEV4cHJlc3Npb25GMzI6Ok5lZ2F0ZToKICAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjMy
OjpBYnM6CiAgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkYzMjo6Q2VpbDoKQEAgLTc2OSw3
ICs3NzIsNiBAQCBDb250ZXh0RXhwcmVzc2lvbiBXQVNNRnVuY3Rpb25QYXJzZXI6OnBhcnNlRXhw
cmVzc2lvbkYzMihDb250ZXh0JiBjb250ZXh0KQogICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Np
b25GMzI6OlN0b3JlOgogICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GMzI6OlN0b3JlV2l0
aE9mZnNldDoKICAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjMyOjpDYWxsSW50ZXJuYWw6
Ci0gICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkYzMjo6Q2FsbEluZGlyZWN0OgogICAgICAg
ICBjYXNlIFdBU01PcEV4cHJlc3Npb25GMzI6OkNvbmRpdGlvbmFsOgogICAgICAgICBjYXNlIFdB
U01PcEV4cHJlc3Npb25GMzI6OkNvbW1hOgogICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25G
MzI6OkZyb21TMzI6CkBAIC04ODAsNiArODgyLDggQEAgQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1
bmN0aW9uUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25GNjQoQ29udGV4dCYgY29udGV4dCkKICAgICAg
ICAgICAgIHJldHVybiBwYXJzZUdldEdsb2JhbEV4cHJlc3Npb25GNjQoY29udGV4dCk7CiAgICAg
ICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6Q2FsbEltcG9ydDoKICAgICAgICAgICAgIHJl
dHVybiBwYXJzZUNhbGxJbXBvcnQoY29udGV4dCwgV0FTTUV4cHJlc3Npb25UeXBlOjpGNjQpOwor
ICAgICAgICBjYXNlIFdBU01PcEV4cHJlc3Npb25GNjQ6OkNhbGxJbmRpcmVjdDoKKyAgICAgICAg
ICAgIHJldHVybiBwYXJzZUNhbGxJbmRpcmVjdChjb250ZXh0LCBXQVNNRXhwcmVzc2lvblR5cGU6
OkY2NCk7CiAgICAgICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6U2V0TG9jYWw6CiAgICAg
ICAgIGNhc2UgV0FTTU9wRXhwcmVzc2lvbkY2NDo6U2V0R2xvYmFsOgogICAgICAgICBjYXNlIFdB
U01PcEV4cHJlc3Npb25GNjQ6OkxvYWQ6CkBAIC04ODcsNyArODkxLDYgQEAgQ29udGV4dEV4cHJl
c3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUV4cHJlc3Npb25GNjQoQ29udGV4dCYgY29u
dGV4dCkKICAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpTdG9yZToKICAgICAgICAg
Y2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpTdG9yZVdpdGhPZmZzZXQ6CiAgICAgICAgIGNhc2Ug
V0FTTU9wRXhwcmVzc2lvbkY2NDo6Q2FsbEludGVybmFsOgotICAgICAgICBjYXNlIFdBU01PcEV4
cHJlc3Npb25GNjQ6OkNhbGxJbmRpcmVjdDoKICAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9u
RjY0OjpDb25kaXRpb25hbDoKICAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpDb21t
YToKICAgICAgICAgY2FzZSBXQVNNT3BFeHByZXNzaW9uRjY0OjpGcm9tUzMyOgpAQCAtMTAwOSw2
ICsxMDEyLDI0IEBAIENvbnRleHRFeHByZXNzaW9uIFdBU01GdW5jdGlvblBhcnNlcjo6cGFyc2VD
YWxsSW50ZXJuYWwoQ29udGV4dCYgY29udGV4dCwgV0FTTUV4CiB9CiAKIHRlbXBsYXRlIDxjbGFz
cyBDb250ZXh0PgorQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0aW9uUGFyc2VyOjpwYXJzZUNh
bGxJbmRpcmVjdChDb250ZXh0JiBjb250ZXh0LCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0dXJuVHlw
ZSkKK3sKKyAgICB1aW50MzJfdCBmdW5jdGlvblBvaW50ZXJUYWJsZUluZGV4OworICAgIFJFQURf
Q09NUEFDVF9VSU5UMzJfT1JfRkFJTChmdW5jdGlvblBvaW50ZXJUYWJsZUluZGV4LCAiQ2Fubm90
IHJlYWQgdGhlIGZ1bmN0aW9uIHBvaW50ZXIgdGFibGUgaW5kZXguIik7CisgICAgRkFJTF9JRl9G
QUxTRShmdW5jdGlvblBvaW50ZXJUYWJsZUluZGV4IDwgbV9tb2R1bGUtPmZ1bmN0aW9uUG9pbnRl
clRhYmxlcygpLnNpemUoKSwgIlRoZSBmdW5jdGlvbiBwb2ludGVyIHRhYmxlIGluZGV4IGlzIGlu
Y29ycmVjdC4iKTsKKyAgICBjb25zdCBXQVNNRnVuY3Rpb25Qb2ludGVyVGFibGUmIGZ1bmN0aW9u
UG9pbnRlclRhYmxlID0gbV9tb2R1bGUtPmZ1bmN0aW9uUG9pbnRlclRhYmxlcygpW2Z1bmN0aW9u
UG9pbnRlclRhYmxlSW5kZXhdOworICAgIGNvbnN0IFdBU01TaWduYXR1cmUmIHNpZ25hdHVyZSA9
IG1fbW9kdWxlLT5zaWduYXR1cmVzKClbZnVuY3Rpb25Qb2ludGVyVGFibGUuc2lnbmF0dXJlSW5k
ZXhdOworICAgIEZBSUxfSUZfRkFMU0Uoc2lnbmF0dXJlLnJldHVyblR5cGUgPT0gcmV0dXJuVHlw
ZSwgIldyb25nIHJldHVybiB0eXBlLiIpOworCisgICAgQ29udGV4dEV4cHJlc3Npb24gaW5kZXgg
PSBwYXJzZUV4cHJlc3Npb25JMzIoY29udGV4dCk7CisgICAgUFJPUEFHQVRFX0VSUk9SKCk7CisK
KyAgICBDb250ZXh0RXhwcmVzc2lvbkxpc3QgYXJndW1lbnRMaXN0ID0gcGFyc2VDYWxsQXJndW1l
bnRzKGNvbnRleHQsIHNpZ25hdHVyZS5hcmd1bWVudHMpOworICAgIFBST1BBR0FURV9FUlJPUigp
OworICAgIHJldHVybiBjb250ZXh0LmJ1aWxkQ2FsbEluZGlyZWN0KGZ1bmN0aW9uUG9pbnRlclRh
YmxlSW5kZXgsIGluZGV4LCBhcmd1bWVudExpc3QsIHNpZ25hdHVyZSwgcmV0dXJuVHlwZSk7Cit9
CisKK3RlbXBsYXRlIDxjbGFzcyBDb250ZXh0PgogQ29udGV4dEV4cHJlc3Npb24gV0FTTUZ1bmN0
aW9uUGFyc2VyOjpwYXJzZUNhbGxJbXBvcnQoQ29udGV4dCYgY29udGV4dCwgV0FTTUV4cHJlc3Np
b25UeXBlIHJldHVyblR5cGUpCiB7CiAgICAgdWludDMyX3QgZnVuY3Rpb25JbXBvcnRTaWduYXR1
cmVJbmRleDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dBU01GdW5j
dGlvblBhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFy
c2VyLmgKaW5kZXggOWI0Y2YzY2Q1ODc5YjE3M2E5MjdiY2VjYTI2NmUzMGRmYjFhOTY3MC4uYjQ0
MGI2NjFmODAyMDYwNjg3YzY4NjVjOTljODU5ZDEyNWJhMTlmNyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV0FTTUZ1bmN0aW9uUGFyc2VyLmgKQEAgLTExNiw2ICsxMTYsNyBA
QCBwcml2YXRlOgogCiAgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNz
aW9uTGlzdCBwYXJzZUNhbGxBcmd1bWVudHMoQ29udGV4dCYsIGNvbnN0IFZlY3RvcjxXQVNNVHlw
ZT4mIGFyZ3VtZW50cyk7CiAgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHBy
ZXNzaW9uIHBhcnNlQ2FsbEludGVybmFsKENvbnRleHQmLCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0
dXJuVHlwZSk7CisgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9u
IHBhcnNlQ2FsbEluZGlyZWN0KENvbnRleHQmLCBXQVNNRXhwcmVzc2lvblR5cGUgcmV0dXJuVHlw
ZSk7CiAgICAgdGVtcGxhdGUgPGNsYXNzIENvbnRleHQ+IENvbnRleHRFeHByZXNzaW9uIHBhcnNl
Q2FsbEltcG9ydChDb250ZXh0JiwgV0FTTUV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUpOwogCiAg
ICAgSlNXQVNNTW9kdWxlKiBtX21vZHVsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dBU01GdW5jdGlvblN5bnRheENoZWNrZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dBU01GdW5jdGlvblN5bnRheENoZWNrZXIuaAppbmRleCAyYTJmMWUzZDM2ODEz
NjI5NDE2ZjVhZmY1N2MzYWE1YmIwODQ3MjgzLi42Mjg2M2Q0ZTc1MDU1ZjQwNDg2ZWQ5ZDUzNmZm
ZWE5OTc4NmMyOWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNN
RnVuY3Rpb25TeW50YXhDaGVja2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V0FTTUZ1bmN0aW9uU3ludGF4Q2hlY2tlci5oCkBAIC0xNjUsNiArMTY1LDE2IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIFVOVVNFRDsKICAgICB9CiAKKyAgICBpbnQgYnVpbGRDYWxsSW5kaXJl
Y3QodWludDMyX3QsIGludCwgaW50LCBjb25zdCBXQVNNU2lnbmF0dXJlJiBzaWduYXR1cmUsIFdB
U01FeHByZXNzaW9uVHlwZSByZXR1cm5UeXBlKQorICAgIHsKKyAgICAgICAgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQgPSBzaWduYXR1cmUuYXJndW1lbnRzLnNpemUoKTsKKyAgICAgICAgdXBkYXRlVGVt
cFN0YWNrSGVpZ2h0Rm9yQ2FsbChhcmd1bWVudENvdW50KTsKKyAgICAgICAgbV90ZW1wU3RhY2tU
b3AgLT0gYXJndW1lbnRDb3VudCArIDE7CisgICAgICAgIGlmIChyZXR1cm5UeXBlICE9IFdBU01F
eHByZXNzaW9uVHlwZTo6Vm9pZCkKKyAgICAgICAgICAgIG1fdGVtcFN0YWNrVG9wKys7CisgICAg
ICAgIHJldHVybiBVTlVTRUQ7CisgICAgfQorCiAgICAgdm9pZCBhcHBlbmRFeHByZXNzaW9uTGlz
dChpbnQmLCBpbnQpIHsgfQogCiAgICAgdm9pZCBsaW5rVGFyZ2V0KGNvbnN0IGludCYpIHsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV0FTTU1vZHVsZVBhcnNlci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcAppbmRl
eCA4MGE3ZWI4YTVmNzg3NDgyOGNmYjMzN2ExZjg4ZDBhNWEwMjA4Njc4Li5jOTQ0MmExZjY1ZjI5
M2E5NzdjNjM0OTc1Zjg5MmI4MTFjODQ4YzU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XQVNNTW9kdWxlUGFyc2VyLmNwcApAQCAtMjcxLDE0ICsyNzEsMTcgQEAgdm9pZCBX
QVNNTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uUG9pbnRlclRhYmxlU2VjdGlvbigpCiAgICAg
ICAgIFdBU01GdW5jdGlvblBvaW50ZXJUYWJsZSBmdW5jdGlvblBvaW50ZXJUYWJsZTsKICAgICAg
ICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKGZ1bmN0aW9uUG9pbnRlclRhYmxlLnNpZ25h
dHVyZUluZGV4LCAiQ2Fubm90IHJlYWQgdGhlIHNpZ25hdHVyZSBpbmRleC4iKTsKICAgICAgICAg
RkFJTF9JRl9GQUxTRShmdW5jdGlvblBvaW50ZXJUYWJsZS5zaWduYXR1cmVJbmRleCA8IG1fbW9k
dWxlLT5zaWduYXR1cmVzKCkuc2l6ZSgpLCAiVGhlIHNpZ25hdHVyZSBpbmRleCBpcyBpbmNvcnJl
Y3QuIik7Ci0gICAgICAgIHVpbnQzMl90IG51bWJlck9mRWxlbWVudHM7Ci0gICAgICAgIFJFQURf
Q09NUEFDVF9VSU5UMzJfT1JfRkFJTChudW1iZXJPZkVsZW1lbnRzLCAiQ2Fubm90IHJlYWQgdGhl
IG51bWJlciBvZiBlbGVtZW50cyBvZiBhIGZ1bmN0aW9uIHBvaW50ZXIgdGFibGUuIik7Ci0gICAg
ICAgIEZBSUxfSUZfRkFMU0UoaGFzT25lQml0U2V0KG51bWJlck9mRWxlbWVudHMpLCAiVGhlIG51
bWJlciBvZiBlbGVtZW50cyBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiIpOwotICAgICAgICBmdW5j
dGlvblBvaW50ZXJUYWJsZS5lbGVtZW50cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bWJlck9m
RWxlbWVudHMpOwotICAgICAgICBmb3IgKHVpbnQzMl90IGogPSAwOyBqIDwgbnVtYmVyT2ZFbGVt
ZW50czsgKytqKSB7Ci0gICAgICAgICAgICB1aW50MzJfdCBlbGVtZW50OwotICAgICAgICAgICAg
UkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlMKGVsZW1lbnQsICJDYW5ub3QgcmVhZCBhbiBlbGVt
ZW50IG9mIGEgZnVuY3Rpb24gcG9pbnRlciB0YWJsZS4iKTsKLSAgICAgICAgICAgIGZ1bmN0aW9u
UG9pbnRlclRhYmxlLmVsZW1lbnRzLnVuY2hlY2tlZEFwcGVuZChlbGVtZW50KTsKKyAgICAgICAg
dWludDMyX3QgbnVtYmVyT2ZGdW5jdGlvbnM7CisgICAgICAgIFJFQURfQ09NUEFDVF9VSU5UMzJf
T1JfRkFJTChudW1iZXJPZkZ1bmN0aW9ucywgIkNhbm5vdCByZWFkIHRoZSBudW1iZXIgb2YgZnVu
Y3Rpb25zIG9mIGEgZnVuY3Rpb24gcG9pbnRlciB0YWJsZS4iKTsKKyAgICAgICAgRkFJTF9JRl9G
QUxTRShoYXNPbmVCaXRTZXQobnVtYmVyT2ZGdW5jdGlvbnMpLCAiVGhlIG51bWJlciBvZiBmdW5j
dGlvbnMgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4iKTsKKyAgICAgICAgZnVuY3Rpb25Qb2ludGVy
VGFibGUuZnVuY3Rpb25JbmRpY2VzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobnVtYmVyT2ZGdW5j
dGlvbnMpOworICAgICAgICBmdW5jdGlvblBvaW50ZXJUYWJsZS5mdW5jdGlvbnMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShudW1iZXJPZkZ1bmN0aW9ucyk7CisgICAgICAgIGZvciAodWludDMyX3Qg
aiA9IDA7IGogPCBudW1iZXJPZkZ1bmN0aW9uczsgKytqKSB7CisgICAgICAgICAgICB1aW50MzJf
dCBmdW5jdGlvbkluZGV4OworICAgICAgICAgICAgUkVBRF9DT01QQUNUX1VJTlQzMl9PUl9GQUlM
KGZ1bmN0aW9uSW5kZXgsICJDYW5ub3QgcmVhZCBhIGZ1bmN0aW9uIGluZGV4IG9mIGEgZnVuY3Rp
b24gcG9pbnRlciB0YWJsZS4iKTsKKyAgICAgICAgICAgIEZBSUxfSUZfRkFMU0UoZnVuY3Rpb25J
bmRleCA8IG1fbW9kdWxlLT5mdW5jdGlvbkRlY2xhcmF0aW9ucygpLnNpemUoKSwgIlRoZSBmdW5j
dGlvbiBpbmRleCBpcyBpbmNvcnJlY3QuIik7CisgICAgICAgICAgICBGQUlMX0lGX0ZBTFNFKG1f
bW9kdWxlLT5mdW5jdGlvbkRlY2xhcmF0aW9ucygpW2Z1bmN0aW9uSW5kZXhdLnNpZ25hdHVyZUlu
ZGV4ID09IGZ1bmN0aW9uUG9pbnRlclRhYmxlLnNpZ25hdHVyZUluZGV4LCAiVGhlIHNpZ25hdHVy
ZSBvZiB0aGUgZnVuY3Rpb24gZG9lc24ndCBtYXRjaCB0aGF0IG9mIHRoZSBmdW5jdGlvbiBwb2lu
dGVyIHRhYmxlLiIpOworICAgICAgICAgICAgZnVuY3Rpb25Qb2ludGVyVGFibGUuZnVuY3Rpb25J
bmRpY2VzLnVuY2hlY2tlZEFwcGVuZChmdW5jdGlvbkluZGV4KTsKICAgICAgICAgfQogICAgICAg
ICBtX21vZHVsZS0+ZnVuY3Rpb25Qb2ludGVyVGFibGVzKCkudW5jaGVja2VkQXBwZW5kKGZ1bmN0
aW9uUG9pbnRlclRhYmxlKTsKICAgICB9CkBAIC0yOTAsNiArMjkzLDExIEBAIHZvaWQgV0FTTU1v
ZHVsZVBhcnNlcjo6cGFyc2VGdW5jdGlvbkRlZmluaXRpb25TZWN0aW9uKCkKICAgICAgICAgcGFy
c2VGdW5jdGlvbkRlZmluaXRpb24oZnVuY3Rpb25JbmRleCk7CiAgICAgICAgIFBST1BBR0FURV9F
UlJPUigpOwogICAgIH0KKworICAgIGZvciAoV0FTTUZ1bmN0aW9uUG9pbnRlclRhYmxlJiBmdW5j
dGlvblBvaW50ZXJUYWJsZSA6IG1fbW9kdWxlLT5mdW5jdGlvblBvaW50ZXJUYWJsZXMoKSkgewor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uUG9pbnRlclRhYmxlLmZ1bmN0
aW9uSW5kaWNlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGZ1bmN0aW9uUG9pbnRlclRhYmxl
LmZ1bmN0aW9ucy51bmNoZWNrZWRBcHBlbmQobV9tb2R1bGUtPmZ1bmN0aW9ucygpW2Z1bmN0aW9u
UG9pbnRlclRhYmxlLmZ1bmN0aW9uSW5kaWNlc1tpXV0uZ2V0KCkpOworICAgIH0KIH0KIAogdm9p
ZCBXQVNNTW9kdWxlUGFyc2VyOjpwYXJzZUZ1bmN0aW9uRGVmaW5pdGlvbihzaXplX3QgZnVuY3Rp
b25JbmRleCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>