<?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>154997</bug_id>
          
          <creation_ts>2016-03-03 17:18:17 -0800</creation_ts>
          <short_desc>[JSC] Add support for MADD, MSUB and MNEG to Air</short_desc>
          <delta_ts>2016-03-03 20:40:12 -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>New Bugs</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1170418</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-03-03 17:18:17 -0800</bug_when>
    <thetext>[JSC] Add support for MADD, MSUB and MNEG to Air</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170421</commentid>
    <comment_count>1</comment_count>
      <attachid>272805</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-03-03 17:24:19 -0800</bug_when>
    <thetext>Created attachment 272805
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170446</commentid>
    <comment_count>2</comment_count>
      <attachid>272814</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-03-03 18:36:30 -0800</bug_when>
    <thetext>Created attachment 272814
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170448</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-03 18:37:48 -0800</bug_when>
    <thetext>Attachment 272814 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/testb3.cpp:884:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:908:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:935:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:962:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:986:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:1010:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:1037:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:1064:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:1087:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:1111:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 10 in 5 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>1170453</commentid>
    <comment_count>4</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-03-03 18:55:19 -0800</bug_when>
    <thetext>Not super reliable numbers due to the current state of the builds.

This improves ASM and Octane. A tiny bit Kraken too but nothing crazy.

SunSpider:
   3d-cube                                   10.4408+-0.0946           10.4405+-0.0949        
   3d-morph                                   8.3481+-0.0461            8.3068+-0.0546        
   3d-raytrace                                9.4128+-0.2644     ?      9.6564+-0.3088        ? might be 1.0259x slower
   access-binary-trees                        4.2118+-0.1346     ?      4.3175+-0.0511        ? might be 1.0251x slower
   access-fannkuch                           11.3340+-0.5558           11.3126+-0.4163        
   access-nbody                               4.7576+-0.0200            4.7323+-0.0133        
   access-nsieve                              3.3850+-0.0479     ?      3.3925+-0.0565        ?
   bitops-3bit-bits-in-byte                   1.7078+-0.0510     ?      1.7245+-0.0479        ?
   bitops-bits-in-byte                        4.1624+-0.0280            4.1605+-0.0153        
   bitops-bitwise-and                         3.2124+-0.0311     ?      3.2224+-0.0154        ?
   bitops-nsieve-bits                         5.9200+-0.0642            5.9000+-0.0222        
   controlflow-recursive                      3.6354+-0.1994            3.6121+-0.1798        
   crypto-aes                                 6.4368+-0.0379     ?      6.4512+-0.0385        ?
   crypto-md5                                 4.1322+-0.1312     ?      4.1443+-0.1267        ?
   crypto-sha1                                3.7396+-0.0262     ?      3.7901+-0.0701        ? might be 1.0135x slower
   date-format-tofte                         11.2921+-0.0848           11.2268+-0.0731        
   date-format-xparb                          7.3162+-0.0413     ^      7.2285+-0.0207        ^ definitely 1.0121x faster
   math-cordic                                5.3747+-0.0472     ?      5.4332+-0.0771        ? might be 1.0109x slower
   math-partial-sums                         11.7586+-0.1534           11.6844+-0.0496        
   math-spectral-norm                         3.3130+-0.2035            3.2706+-0.1688          might be 1.0130x faster
   regexp-dna                                 9.6994+-0.0305            9.6943+-0.0306        
   string-base64                              6.5375+-0.0662            6.5275+-0.0373        
   string-fasta                               9.7480+-0.1079            9.6107+-0.2192          might be 1.0143x faster
   string-tagcloud                           10.8157+-0.0287     ?     10.8560+-0.0339        ?
   string-unpack-code                        23.4357+-0.0547     ?     23.4746+-0.1199        ?
   string-validate-input                      6.4891+-0.1197     ?      6.5610+-0.1032        ? might be 1.0111x slower

   &lt;arithmetic&gt;                               7.3314+-0.0298     ?      7.3358+-0.0266        ? might be 1.0006x slower

                                                  Conf#1                    Conf#2                                      
Octane:
   encrypt                                   0.19641+-0.00069    ^     0.19254+-0.00067       ^ definitely 1.0201x faster
   decrypt                                   3.71076+-0.00462    ^     3.66854+-0.01057       ^ definitely 1.0115x faster
   deltablue                        x2       0.17559+-0.00532    ?     0.17764+-0.00509       ? might be 1.0117x slower
   earley                                    0.50439+-0.04828          0.44576+-0.01730         might be 1.1315x faster
   boyer                                     7.95720+-0.48300    ?     8.32487+-0.47189       ? might be 1.0462x slower
   navier-stokes                    x2       7.16412+-0.00381    ?     7.17401+-0.00893       ?
   raytrace                         x2       1.27977+-0.00521    ?     1.29354+-0.01551       ? might be 1.0108x slower
   richards                         x2       0.11517+-0.00041          0.11413+-0.00130       
   splay                            x2       0.75938+-0.02023          0.74177+-0.01966         might be 1.0237x faster
   regexp                           x2      34.84198+-0.61834    ?    34.93315+-0.38528       ?
   pdfjs                            x2      57.51264+-0.59815    ?    57.83148+-0.63925       ?
   mandreel                         x2      69.63957+-0.51244    ?    69.93655+-0.65592       ?
   gbemu                            x2      49.46766+-4.72174         45.33480+-2.40918         might be 1.0912x faster
   closure                                   0.64175+-0.00156    ?     0.64588+-0.00291       ?
   jquery                                    9.54791+-0.05901    ?     9.54962+-0.01808       ?
   box2d                            x2      15.92587+-0.06765         15.85957+-0.06363       
   zlib                             x2     664.98595+-31.67819   ?   684.82749+-18.07520      ? might be 1.0298x slower
   typescript                       x2    1159.21570+-15.50378      1146.40352+-10.46264        might be 1.0112x faster

   &lt;geometric&gt;                               8.17497+-0.04696          8.12081+-0.03764         might be 1.0067x faster

                                                  Conf#1                    Conf#2                                      
Kraken:
   ai-astar                                  155.686+-1.458            154.430+-1.007         
   audio-beat-detection                       76.497+-4.232             74.985+-4.459           might be 1.0202x faster
   audio-dft                                 136.728+-2.857      ?     137.644+-3.065         ?
   audio-fft                                  41.716+-0.025      ?      41.815+-0.143         ?
   audio-oscillator                           54.017+-0.111      ^      52.422+-0.486         ^ definitely 1.0304x faster
   imaging-darkroom                           69.001+-0.045      ?      69.005+-0.035         ?
   imaging-desaturate                         77.963+-0.236      ?      78.093+-0.414         ?
   imaging-gaussian-blur                      97.881+-0.896      ?      97.981+-1.507         ?
   json-parse-financial                       47.426+-0.294      ^      47.051+-0.050         ^ definitely 1.0080x faster
   json-stringify-tinderbox                   27.198+-0.095             26.989+-0.119         
   stanford-crypto-aes                        58.740+-0.295      ?      58.876+-0.243         ?
   stanford-crypto-ccm                        46.608+-0.680      ?      46.750+-0.807         ?
   stanford-crypto-pbkdf2                    140.569+-0.342      !     141.566+-0.562         ! definitely 1.0071x slower
   stanford-crypto-sha256-iterative           51.079+-0.098      ?      51.235+-0.075         ?

   &lt;arithmetic&gt;                               77.222+-0.334             77.060+-0.474           might be 1.0021x faster

                                                  Conf#1                    Conf#2                                      
AsmBench:
   bigfib.cpp                               706.2462+-26.0387    ?    715.0826+-21.9142       ? might be 1.0125x slower
   cray.c                                   556.7903+-2.3568     ?    558.9798+-3.5637        ?
   dry.c                                    472.0462+-1.6893          471.3899+-2.2699        
   FloatMM.c                                798.1385+-5.4036          797.6154+-5.2207        
   gcc-loops.cpp                           4652.0685+-2.7353     ?   4652.9970+-3.1680        ?
   n-body.c                                1757.7715+-1.2894     ?   1758.2687+-3.8823        ?
   Quicksort.c                              558.4019+-1.7840          557.6919+-2.7885        
   stepanov_container.cpp                  5574.7046+-11.6736    ?   5592.5347+-11.9302       ?
   Towers.c                                 276.7117+-0.5157     ?    277.0325+-0.7472        ?

   &lt;geometric&gt;                             1004.4341+-4.7129     ?   1006.5074+-3.8598        ? might be 1.0021x slower

                                                  Conf#1                    Conf#2                                      
Geomean of preferred means:
   &lt;scaled-result&gt;                           46.4322+-0.1183           46.3615+-0.0945          might be 1.0015x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170457</commentid>
    <comment_count>5</comment_count>
      <attachid>272814</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-03-03 19:04:15 -0800</bug_when>
    <thetext>Comment on attachment 272814
Patch

Do the mul-add operations correctly round the intermediate result?

We cannot land optimizations that result in a change in behavior when you tier up into the FTL. We cannot do this even if we mistakenly had such behavior in llvm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170458</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-03-03 19:05:50 -0800</bug_when>
    <thetext>Oh never mind, these are int operations.  I&apos;m fine with this since I don&apos;t think the rounding issue arises for ints.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170485</commentid>
    <comment_count>7</comment_count>
      <attachid>272814</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-03 20:40:08 -0800</bug_when>
    <thetext>Comment on attachment 272814
Patch

Clearing flags on attachment: 272814

Committed r197546: &lt;http://trac.webkit.org/changeset/197546&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170486</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-03 20:40:12 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272805</attachid>
            <date>2016-03-03 17:24:19 -0800</date>
            <delta_ts>2016-03-03 18:36:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154997-20160303172404.patch</filename>
            <type>text/plain</type>
            <size>26172</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk3MzgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
YzEzOTJjYTRmMmYyNjcwNjg3OWJjMjg1OTI3NzQxYjkyODAzNGQyLi43ZGNiZjQ4M2I2Nzg1MTdk
YWZiYWM2NmM2MDQ1N2RjODA2NTBiOWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0OCBAQAorMjAxNi0wMy0wMyAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBBZGQgc3VwcG9ydCBmb3IgTUFERCwgTVNVQiBhbmQgTU5F
RyB0byBBaXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1NDk5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFSTTY0IGNhbiBkbyBhbiBBZGQvU3ViIGluIHRoZSBNdWx0aXBseSB1bml0cy4KKyAgICAgICAg
TExWTSB3YXMgZG9pbmcgc28gYnV0IHdlIGxvc3QgdGhhdCB3aGVuIHN3aXRjaGluZyB0byBCMy4K
KworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgdGhvc2UgaW5zdHJ1Y3Rpb25zIGluIEFpci4KKwor
ICAgICAgICBUaGVyZSBhcmUgbW9yZSBBTFVzIHRoYW4gbXVsdGlwbHkgdW5pdHMsIHRodXMgd2Ug
YXJlIG1vcmUKKyAgICAgICAgbGlrZWx5IHRvIHN1Y2Nlc3NmdWxseSBzY2hlZHVsZSBhIE11bHRp
cGx5K0FkZCB0aGFuIDIgTXVsdGlwbHkuCisgICAgICAgIEkgYW0gY29uc2VydmF0aXZlIGFuZCBv
bmx5IGVtaXQgYSBtdWx0aXBseS1hZGQgaWYgdGhlIHZhbHVlCisgICAgICAgIGNhbiBiZSBpbnRl
cm5lZC4gQXMgZmFyIGFzIEkgY2FuIHRlbGwgZnJvbSB3aGF0IGlzIGdlbmVyYXRlZAorICAgICAg
ICBieSBMTFZNLCB0aGF0IGJhY2tlbmQgaGFkIHRoZSBzYW1lIHJ1bGUuCisKKyAgICAgICAgKiBh
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
YmxlckFSTTY0OjptdWx0aXBseUFkZDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk02NDo6bXVsdGlwbHlTdWIzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6
Om11bHRpcGx5TmVnMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjptdWx0
aXBseUFkZDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6bXVsdGlwbHlT
dWI2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om11bHRpcGx5TmVnNjQp
OgorICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okxvd2VyVG9BaXI6Omxvd2VyKToKKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM6
CisgICAgICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnBvcHVsYXRlV2l0
aEludGVyZXN0aW5nVmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OmZsb2F0aW5nUG9pbnRPcGVy
YW5kcyk6CisgICAgICAgIChKU0M6OkIzOjppbnQ2NE9wZXJhbmRzKToKKyAgICAgICAgKEpTQzo6
QjM6OmludDMyT3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdE11bEFkZEFyZ3NMZWZ0
KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RNdWxBZGRBcmdzUmlnaHQpOgorICAgICAgICAoSlND
OjpCMzo6dGVzdE11bEFkZEFyZ3NMZWZ0MzIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdE11bEFk
ZEFyZ3NSaWdodDMyKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RNdWxTdWJBcmdzTGVmdCk6Cisg
ICAgICAgIChKU0M6OkIzOjp0ZXN0TXVsU3ViQXJnc1JpZ2h0KToKKyAgICAgICAgKEpTQzo6QjM6
OnRlc3RNdWxTdWJBcmdzTGVmdDMyKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RNdWxTdWJBcmdz
UmlnaHQzMik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TXVsTmVnQXJncyk6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0TXVsTmVnQXJnczMyKToKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisKIDIw
MTYtMDItMjkgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAg
ICAgW0RGR11bRlRMXVtCM10gU3VwcG9ydCBmbG9vciBhbmQgY2VpbApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAppbmRleCA1
OTc3NjEzNTMyMzcyMjhhMWFhYTg5ZjI3YThhZTg5NWI2NTE1M2U2Li5jN2UwODIzODlmMzQyM2Rh
MmQ2YjlkNTk2NThkZjNlYTEyNmE2NTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaApAQCAtNDg3LDYgKzQ4NywzNiBA
QCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm11bDw2ND4oZGVzdCwgbGVmdCwgcmlnaHQp
OwogICAgIH0KIAorICAgIHZvaWQgbXVsdGlwbHlBZGQzMihSZWdpc3RlcklEIG11bExlZnQsIFJl
Z2lzdGVySUQgbXVsUmlnaHQsIFJlZ2lzdGVySUQgc3VtbWFuZCwgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubWFkZDwzMj4oZGVzdCwgbXVsTGVmdCwgbXVsUmln
aHQsIHN1bW1hbmQpOworICAgIH0KKworICAgIHZvaWQgbXVsdGlwbHlTdWIzMihSZWdpc3RlcklE
IG11bExlZnQsIFJlZ2lzdGVySUQgbXVsUmlnaHQsIFJlZ2lzdGVySUQgbWludWVuZCwgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubXN1YjwzMj4oZGVzdCwgbXVs
TGVmdCwgbXVsUmlnaHQsIG1pbnVlbmQpOworICAgIH0KKworICAgIHZvaWQgbXVsdGlwbHlOZWcz
MihSZWdpc3RlcklEIG11bExlZnQsIFJlZ2lzdGVySUQgbXVsUmlnaHQsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm1zdWI8MzI+KGRlc3QsIG11bExlZnQsIG11
bFJpZ2h0LCBBUk02NFJlZ2lzdGVyczo6enIpOworICAgIH0KKworICAgIHZvaWQgbXVsdGlwbHlB
ZGQ2NChSZWdpc3RlcklEIG11bExlZnQsIFJlZ2lzdGVySUQgbXVsUmlnaHQsIFJlZ2lzdGVySUQg
c3VtbWFuZCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubWFk
ZDw2ND4oZGVzdCwgbXVsTGVmdCwgbXVsUmlnaHQsIHN1bW1hbmQpOworICAgIH0KKworICAgIHZv
aWQgbXVsdGlwbHlTdWI2NChSZWdpc3RlcklEIG11bExlZnQsIFJlZ2lzdGVySUQgbXVsUmlnaHQs
IFJlZ2lzdGVySUQgbWludWVuZCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIubXN1Yjw2ND4oZGVzdCwgbXVsTGVmdCwgbXVsUmlnaHQsIG1pbnVlbmQpOworICAg
IH0KKworICAgIHZvaWQgbXVsdGlwbHlOZWc2NChSZWdpc3RlcklEIG11bExlZnQsIFJlZ2lzdGVy
SUQgbXVsUmlnaHQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
Lm1zdWI8NjQ+KGRlc3QsIG11bExlZnQsIG11bFJpZ2h0LCBBUk02NFJlZ2lzdGVyczo6enIpOwor
ICAgIH0KKwogICAgIHZvaWQgZGl2MzIoUmVnaXN0ZXJJRCBkaXZpZGVuZCwgUmVnaXN0ZXJJRCBk
aXZpc29yLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5zZGl2
PDMyPihkZXN0LCBkaXZpZGVuZCwgZGl2aXNvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0xvd2VyVG9BaXIuY3BwCmluZGV4IDFjZDU1N2I3ZDAwOTM5MGI5MmU1ZjU0ODQyMGQyYzU3ZjA0
YTM5OGEuLjgzZGQ3NDM1YzczYTg2NDQwNjhmZWRmOGE2Y2QwZmJhNzdhZTE5MjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCkBAIC0xNzA0LDE3ICsxNzA0LDg2
IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEFkZDogeworICAgICAgICAg
ICAgQWlyOjpPcGNvZGUgbXVsdGlwbHlBZGRPcGNvZGUgPSB0cnlPcGNvZGVGb3JUeXBlKE11bHRp
cGx5QWRkMzIsIE11bHRpcGx5QWRkNjQsIG1fdmFsdWUtPnR5cGUoKSk7CisgICAgICAgICAgICBp
ZiAobXVsdGlwbHlBZGRPcGNvZGUgIT0gQWlyOjpPb3BzCisgICAgICAgICAgICAgICAgJiYgaXNW
YWxpZEZvcm0obXVsdGlwbHlBZGRPcGNvZGUsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXAs
IEFyZzo6VG1wKSkgeworICAgICAgICAgICAgICAgIFZhbHVlKiBsZWZ0ID0gbV92YWx1ZS0+Y2hp
bGQoMCk7CisgICAgICAgICAgICAgICAgVmFsdWUqIHJpZ2h0ID0gbV92YWx1ZS0+Y2hpbGQoMSk7
CisgICAgICAgICAgICAgICAgaWYgKCFpbW0ocmlnaHQpIHx8IG1fdmFsdWVUb1RtcFtyaWdodF0p
IHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byB0cnlBcHBlbmRNdWx0aXBseUFkZCA9IFsmXSAo
VmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobGVmdC0+b3Bjb2RlKCkgIT0gTXVsIHx8ICFjYW5CZUludGVybmFsKGxlZnQpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgVmFsdWUqIG11bHRpcGx5TGVmdCA9IGxlZnQtPmNoaWxkKDApOworICAgICAg
ICAgICAgICAgICAgICAgICAgVmFsdWUqIG11bHRpcGx5UmlnaHQgPSBsZWZ0LT5jaGlsZCgxKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2xvY2tlZC5jb250YWlucyhtdWx0aXBseUxl
ZnQpIHx8IG1fbG9ja2VkLmNvbnRhaW5zKG11bHRpcGx5UmlnaHQpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kKG11bHRpcGx5QWRkT3Bjb2RlLCB0bXAobXVsdGlwbHlMZWZ0KSwgdG1wKG11bHRpcGx5Umln
aHQpLCB0bXAocmlnaHQpLCB0bXAobV92YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAg
Y29tbWl0SW50ZXJuYWwobGVmdCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgIGlmICh0
cnlBcHBlbmRNdWx0aXBseUFkZChsZWZ0LCByaWdodCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGlmICh0cnlBcHBlbmRNdWx0aXBseUFkZChy
aWdodCwgbGVmdCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBhcHBlbmRCaW5PcDxBZGQzMiwg
QWRkNjQsIEFkZERvdWJsZSwgQWRkRmxvYXQsIENvbW11dGF0aXZlPigKICAgICAgICAgICAgICAg
ICBtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBTdWI6IHsKKyAgICAgICAgICAgIEFpcjo6
T3Bjb2RlIG11bHRpcGx5U3ViT3Bjb2RlID0gdHJ5T3Bjb2RlRm9yVHlwZShNdWx0aXBseVN1YjMy
LCBNdWx0aXBseVN1YjY0LCBtX3ZhbHVlLT50eXBlKCkpOworICAgICAgICAgICAgaWYgKG11bHRp
cGx5U3ViT3Bjb2RlICE9IEFpcjo6T29wcworICAgICAgICAgICAgICAgICYmIGlzVmFsaWRGb3Jt
KG11bHRpcGx5U3ViT3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRt
cCkpIHsKKyAgICAgICAgICAgICAgICBWYWx1ZSogbGVmdCA9IG1fdmFsdWUtPmNoaWxkKDApOwor
ICAgICAgICAgICAgICAgIFZhbHVlKiByaWdodCA9IG1fdmFsdWUtPmNoaWxkKDEpOworICAgICAg
ICAgICAgICAgIGlmICghaW1tKHJpZ2h0KSB8fCBtX3ZhbHVlVG9UbXBbcmlnaHRdKSB7CisgICAg
ICAgICAgICAgICAgICAgIGF1dG8gdHJ5QXBwZW5kTXVsdGlwbHlTdWIgPSBbJl0gKCkgLT4gYm9v
bCB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHQtPm9wY29kZSgpICE9IE11bCB8
fCAhY2FuQmVJbnRlcm5hbChyaWdodCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbXVsdGlwbHlMZWZ0
ID0gcmlnaHQtPmNoaWxkKDApOworICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUqIG11bHRp
cGx5UmlnaHQgPSByaWdodC0+Y2hpbGQoMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bV9sb2NrZWQuY29udGFpbnMobXVsdGlwbHlMZWZ0KSB8fCBtX2xvY2tlZC5jb250YWlucyhtdWx0
aXBseVJpZ2h0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZChtdWx0aXBseVN1Yk9wY29kZSwgdG1wKG11
bHRpcGx5TGVmdCksIHRtcChtdWx0aXBseVJpZ2h0KSwgdG1wKGxlZnQpLCB0bXAobV92YWx1ZSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0SW50ZXJuYWwocmlnaHQpOworCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfTsK
KworICAgICAgICAgICAgICAgICAgICBpZiAodHJ5QXBwZW5kTXVsdGlwbHlTdWIoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKICAgICAgICAgICAgIGFwcGVuZEJpbk9wPFN1YjMyLCBTdWI2NCwgU3ViRG91YmxlLCBT
dWJGbG9hdD4obV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgTmVnOiB7CisgICAgICAgICAg
ICBBaXI6Ok9wY29kZSBtdWx0aXBseU5lZ09wY29kZSA9IHRyeU9wY29kZUZvclR5cGUoTXVsdGlw
bHlOZWczMiwgTXVsdGlwbHlOZWc2NCwgbV92YWx1ZS0+dHlwZSgpKTsKKyAgICAgICAgICAgIGlm
IChtdWx0aXBseU5lZ09wY29kZSAhPSBBaXI6Ok9vcHMKKyAgICAgICAgICAgICAgICAmJiBpc1Zh
bGlkRm9ybShtdWx0aXBseU5lZ09wY29kZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkK
KyAgICAgICAgICAgICAgICAmJiBtX3ZhbHVlLT5jaGlsZCgwKS0+b3Bjb2RlKCkgPT0gTXVsCisg
ICAgICAgICAgICAgICAgJiYgY2FuQmVJbnRlcm5hbChtX3ZhbHVlLT5jaGlsZCgwKSkpIHsKKyAg
ICAgICAgICAgICAgICBWYWx1ZSogbXVsdGlwbHlPcGVyYXRpb24gPSBtX3ZhbHVlLT5jaGlsZCgw
KTsKKyAgICAgICAgICAgICAgICBWYWx1ZSogbXVsdGlwbHlMZWZ0ID0gbXVsdGlwbHlPcGVyYXRp
b24tPmNoaWxkKDApOworICAgICAgICAgICAgICAgIFZhbHVlKiBtdWx0aXBseVJpZ2h0ID0gbXVs
dGlwbHlPcGVyYXRpb24tPmNoaWxkKDEpOworICAgICAgICAgICAgICAgIGlmICghbV9sb2NrZWQu
Y29udGFpbnMobXVsdGlwbHlMZWZ0KSAmJiAhbV9sb2NrZWQuY29udGFpbnMobXVsdGlwbHlSaWdo
dCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKG11bHRpcGx5TmVnT3Bjb2RlLCB0bXAo
bXVsdGlwbHlMZWZ0KSwgdG1wKG11bHRpcGx5UmlnaHQpLCB0bXAobV92YWx1ZSkpOworICAgICAg
ICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChtdWx0aXBseU9wZXJhdGlvbik7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
ICAgICAgICAgICAgIGFwcGVuZFVuT3A8TmVnMzIsIE5lZzY0LCBOZWdhdGVEb3VibGUsIEFpcjo6
T29wcz4obV92YWx1ZS0+Y2hpbGQoMCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNv
ZGVzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwppbmRl
eCAxY2Y5MWMyYzRiZGFjOWE0NTI5OWM5NTgzOGIzZDJiODliYzBkMTRjLi43MDM4NGQ5MzUyMWQ3
MWFhMDEyNzBiZGU2YzU2OGZlM2Q5NGRmYzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKQEAgLTIxNSw2ICsyMTUsMjQgQEAgTXVsMzIgVTpH
OjMyLCBVOkc6MzIsIFpEOkc6MzIKIE11bDY0IFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKICAgICBU
bXAsIFRtcCwgVG1wCiAKK2FybTY0OiBNdWx0aXBseUFkZDMyIFU6RzozMiwgVTpHOjMyLCBVOkc6
MzIsIFpEOkc6MzIKKyAgICBUbXAsIFRtcCwgVG1wLCBUbXAKKworYXJtNjQ6IE11bHRpcGx5QWRk
NjQgVTpHOjY0LCBVOkc6NjQsIFU6Rzo2NCwgRDpHOjY0CisgICAgVG1wLCBUbXAsIFRtcCwgVG1w
CisKK2FybTY0OiBNdWx0aXBseVN1YjMyIFU6RzozMiwgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIK
KyAgICBUbXAsIFRtcCwgVG1wLCBUbXAKKworYXJtNjQ6IE11bHRpcGx5U3ViNjQgVTpHOjY0LCBV
Okc6NjQsIFU6Rzo2NCwgRDpHOjY0CisgICAgVG1wLCBUbXAsIFRtcCwgVG1wCisKK2FybTY0OiBN
dWx0aXBseU5lZzMyIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCisgICAgVG1wLCBUbXAsIFRtcAor
Cithcm02NDogTXVsdGlwbHlOZWc2NCBVOkc6NjQsIFU6Rzo2NCwgWkQ6Rzo2NAorICAgIFRtcCwg
VG1wLCBUbXAKKwogYXJtNjQ6IERpdjMyIFU6RzozMiwgVTpHOjMyLCBaRDpHOjMyCiAgICAgVG1w
LCBUbXAsIFRtcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCmluZGV4IDA3NGQ5MWNm
NGRkN2Y4ODE0MjRjYWZhZGUzMjJkYzllYWVhMGZiNzMuLjdmOTllOGYxYjU5OGIzMzdjMTI1OWM4
MmQ5ZmEzYmMyOTRmMzk5ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90
ZXN0YjMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCkBAIC0x
MTQsNiArMTE0LDc4IEBAIHZvaWQgYWRkMzIoQ0NhbGxIZWxwZXJzJiBqaXQsIEdQUlJlZyBzcmMx
LCBHUFJSZWcgc3JjMiwgR1BSUmVnIGRlc3QpCiAgICAgfQogfQogCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUeXBlPgorc3RydWN0IE9wZXJhbmQgeworICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAgVHlw
ZSB2YWx1ZTsKK307CisKK3R5cGVkZWYgT3BlcmFuZDxpbnQ2NF90PiBJbnQ2NE9wZXJhbmQ7Cit0
eXBlZGVmIE9wZXJhbmQ8aW50MzJfdD4gSW50MzJPcGVyYW5kOworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBGbG9hdFR5cGU+Cit2b2lkIHBvcHVsYXRlV2l0aEludGVyZXN0aW5nVmFsdWVzKFZlY3RvcjxP
cGVyYW5kPEZsb2F0VHlwZT4+JiBvcGVyYW5kcykKK3sKKyAgICBvcGVyYW5kcy5hcHBlbmQoeyAi
MC4iLCBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KDAuKSB9KTsKKyAgICBvcGVyYW5kcy5hcHBlbmQo
eyAiLTAuIiwgc3RhdGljX2Nhc3Q8RmxvYXRUeXBlPigtMC4pIH0pOworICAgIG9wZXJhbmRzLmFw
cGVuZCh7ICIwLjQiLCBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KDAuNSkgfSk7CisgICAgb3BlcmFu
ZHMuYXBwZW5kKHsgIi0wLjQiLCBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KC0wLjUpIH0pOworICAg
IG9wZXJhbmRzLmFwcGVuZCh7ICIwLjUiLCBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KDAuNSkgfSk7
CisgICAgb3BlcmFuZHMuYXBwZW5kKHsgIi0wLjUiLCBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KC0w
LjUpIH0pOworICAgIG9wZXJhbmRzLmFwcGVuZCh7ICIwLjYiLCBzdGF0aWNfY2FzdDxGbG9hdFR5
cGU+KDAuNSkgfSk7CisgICAgb3BlcmFuZHMuYXBwZW5kKHsgIi0wLjYiLCBzdGF0aWNfY2FzdDxG
bG9hdFR5cGU+KC0wLjUpIH0pOworICAgIG9wZXJhbmRzLmFwcGVuZCh7ICIxLiIsIHN0YXRpY19j
YXN0PEZsb2F0VHlwZT4oMS4pIH0pOworICAgIG9wZXJhbmRzLmFwcGVuZCh7ICItMS4iLCBzdGF0
aWNfY2FzdDxGbG9hdFR5cGU+KC0xLikgfSk7CisgICAgb3BlcmFuZHMuYXBwZW5kKHsgIjIuIiwg
c3RhdGljX2Nhc3Q8RmxvYXRUeXBlPigyLikgfSk7CisgICAgb3BlcmFuZHMuYXBwZW5kKHsgIi0y
LiIsIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oLTIuKSB9KTsKKyAgICBvcGVyYW5kcy5hcHBlbmQo
eyAiTV9QSSIsIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oTV9QSSkgfSk7CisgICAgb3BlcmFuZHMu
YXBwZW5kKHsgIi1NX1BJIiwgc3RhdGljX2Nhc3Q8RmxvYXRUeXBlPigtTV9QSSkgfSk7CisgICAg
b3BlcmFuZHMuYXBwZW5kKHsgIm1pbiIsIHN0ZDo6bnVtZXJpY19saW1pdHM8RmxvYXRUeXBlPjo6
bWluKCkgfSk7CisgICAgb3BlcmFuZHMuYXBwZW5kKHsgIm1heCIsIHN0ZDo6bnVtZXJpY19saW1p
dHM8RmxvYXRUeXBlPjo6bWF4KCkgfSk7CisgICAgb3BlcmFuZHMuYXBwZW5kKHsgImxvd2VzdCIs
IHN0ZDo6bnVtZXJpY19saW1pdHM8RmxvYXRUeXBlPjo6bG93ZXN0KCkgfSk7CisgICAgb3BlcmFu
ZHMuYXBwZW5kKHsgImVwc2lsb24iLCBzdGQ6Om51bWVyaWNfbGltaXRzPEZsb2F0VHlwZT46OmVw
c2lsb24oKSB9KTsKKyAgICBvcGVyYW5kcy5hcHBlbmQoeyAiaW5maW5pdGkiLCBzdGQ6Om51bWVy
aWNfbGltaXRzPEZsb2F0VHlwZT46OmluZmluaXR5KCkgfSk7CisgICAgb3BlcmFuZHMuYXBwZW5k
KHsgIi1pbmZpbml0aSIsIC0gc3RkOjpudW1lcmljX2xpbWl0czxGbG9hdFR5cGU+OjppbmZpbml0
eSgpIH0pOworICAgIG9wZXJhbmRzLmFwcGVuZCh7ICJQTmFOIiwgc3RhdGljX2Nhc3Q8RmxvYXRU
eXBlPihQTmFOKSB9KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRmxvYXRUeXBlPgorVmVjdG9y
PE9wZXJhbmQ8RmxvYXRUeXBlPj4gZmxvYXRpbmdQb2ludE9wZXJhbmRzKCkKK3sKKyAgICBWZWN0
b3I8T3BlcmFuZDxGbG9hdFR5cGU+PiBvcGVyYW5kczsKKyAgICBwb3B1bGF0ZVdpdGhJbnRlcmVz
dGluZ1ZhbHVlcyhvcGVyYW5kcyk7CisgICAgcmV0dXJuIG9wZXJhbmRzOworfTsKKworc3RhdGlj
IFZlY3RvcjxJbnQ2NE9wZXJhbmQ+IGludDY0T3BlcmFuZHMoKQoreworICAgIFZlY3RvcjxJbnQ2
NE9wZXJhbmQ+IG9wZXJhbmRzOworICAgIGZvciAoY29uc3QgYXV0byYgZG91YmxlT3BlcmFuZCA6
IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxkb3VibGU+KCkpCisgICAgICAgIG9wZXJhbmRzLmFwcGVu
ZCh7IGRvdWJsZU9wZXJhbmQubmFtZSwgYml0d2lzZV9jYXN0PGludDY0X3Q+KGRvdWJsZU9wZXJh
bmQudmFsdWUpIH0pOworICAgIG9wZXJhbmRzLmFwcGVuZCh7ICIxIiwgMSB9KTsKKyAgICBvcGVy
YW5kcy5hcHBlbmQoeyAiLTEiLCAtMSB9KTsKKyAgICBvcGVyYW5kcy5hcHBlbmQoeyAiaW50NjQt
bWF4Iiwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkgfSk7CisgICAgb3BlcmFu
ZHMuYXBwZW5kKHsgImludDY0LW1pbiIsIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1p
bigpIH0pOworICAgIG9wZXJhbmRzLmFwcGVuZCh7ICJpbnQzMi1tYXgiLCBzdGQ6Om51bWVyaWNf
bGltaXRzPGludDMyX3Q+OjptYXgoKSB9KTsKKyAgICBvcGVyYW5kcy5hcHBlbmQoeyAiaW50MzIt
bWluIiwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkgfSk7CisKKyAgICByZXR1
cm4gb3BlcmFuZHM7Cit9CisKK3N0YXRpYyBWZWN0b3I8SW50MzJPcGVyYW5kPiBpbnQzMk9wZXJh
bmRzKCkKK3sKKyAgICBWZWN0b3I8SW50MzJPcGVyYW5kPiBvcGVyYW5kcyh7CisgICAgICAgIHsg
IjAiLCAwIH0sCisgICAgICAgIHsgIjEiLCAxIH0sCisgICAgICAgIHsgIi0xIiwgLTEgfSwKKyAg
ICAgICAgeyAiNDIiLCA0MiB9LAorICAgICAgICB7ICItNDIiLCAtNDIgfSwKKyAgICAgICAgeyAi
aW50MzItbWF4Iiwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkgfSwKKyAgICAg
ICAgeyAiaW50MzItbWluIiwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkgfQor
ICAgIH0pOworICAgIHJldHVybiBvcGVyYW5kczsKK30KKwogdm9pZCB0ZXN0NDIoKQogewogICAg
IFByb2NlZHVyZSBwcm9jOwpAQCAtNzkwLDYgKzg2MiwyNTYgQEAgdm9pZCB0ZXN0TXVsTG9hZFR3
aWNlKCkKICAgICB0ZXN0KDEpOwogfQogCit2b2lkIHRlc3RNdWxBZGRBcmdzTGVmdCgpCit7Cisg
ICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2so
KTsKKworICAgIFZhbHVlKiBhcmcwID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+
KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIFZhbHVlKiBhcmcx
ID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEpOworICAgIFZhbHVlKiBhcmcyID0gcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOwor
ICAgIFZhbHVlKiBtdWx0aXBsaWVkID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBNdWws
IE9yaWdpbigpLCBhcmcwLCBhcmcxKTsKKyAgICBWYWx1ZSogYWRkZWQgPSByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIG11bHRpcGxpZWQsIGFyZzIpOworICAgIHJv
b3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIGFkZGVk
KTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisKKyAgICBhdXRvIHRlc3RWYWx1
ZXMgPSBpbnQ2NE9wZXJhbmRzKCk7CisgICAgZm9yIChhdXRvIGEgOiB0ZXN0VmFsdWVzKSB7Cisg
ICAgICAgIGZvciAoYXV0byBiIDogdGVzdFZhbHVlcykgeworICAgICAgICAgICAgZm9yIChhdXRv
IGMgOiB0ZXN0VmFsdWVzKSB7CisgICAgICAgICAgICAgICAgQ0hFQ0soaW52b2tlPGludDY0X3Q+
KCpjb2RlLCBhLnZhbHVlLCBiLnZhbHVlLCBjLnZhbHVlKSA9PSBhLnZhbHVlICogYi52YWx1ZSAr
IGMudmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRl
c3RNdWxBZGRBcmdzUmlnaHQoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYWx1ZSogYXJnMCA9IHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKKyAgICBWYWx1ZSogYXJnMSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1Zh
bHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBWYWx1ZSog
YXJnMiA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBWYWx1ZSogbXVsdGlwbGllZCA9IHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgTXVsLCBPcmlnaW4oKSwgYXJnMSwgYXJnMik7CisgICAgVmFs
dWUqIGFkZGVkID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBh
cmcwLCBtdWx0aXBsaWVkKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9j
LCBSZXR1cm4sIE9yaWdpbigpLCBhZGRlZCk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHBy
b2MpOworCisgICAgYXV0byB0ZXN0VmFsdWVzID0gaW50NjRPcGVyYW5kcygpOworICAgIGZvciAo
YXV0byBhIDogdGVzdFZhbHVlcykgeworICAgICAgICBmb3IgKGF1dG8gYiA6IHRlc3RWYWx1ZXMp
IHsKKyAgICAgICAgICAgIGZvciAoYXV0byBjIDogdGVzdFZhbHVlcykgeworICAgICAgICAgICAg
ICAgIENIRUNLKGludm9rZTxpbnQ2NF90PigqY29kZSwgYS52YWx1ZSwgYi52YWx1ZSwgYy52YWx1
ZSkgPT0gYS52YWx1ZSArIGIudmFsdWUgKiBjLnZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0TXVsQWRkQXJnc0xlZnQzMigpCit7CisgICAgUHJv
Y2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKwor
ICAgIFZhbHVlKiBhcmcwID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3Jp
Z2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgVmFsdWUqIGFyZzEgPSByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjEpKTsKKyAgICBWYWx1ZSogYXJnMiA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMikpOworICAgIFZhbHVl
KiBtdWx0aXBsaWVkID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBNdWwsIE9yaWdpbigp
LCBhcmcwLCBhcmcxKTsKKyAgICBWYWx1ZSogYWRkZWQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIEFkZCwgT3JpZ2luKCksIG11bHRpcGxpZWQsIGFyZzIpOworICAgIHJvb3QtPmFwcGVu
ZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIGFkZGVkKTsKKworICAg
IGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisKKyAgICBhdXRvIHRlc3RWYWx1ZXMgPSBpbnQz
Mk9wZXJhbmRzKCk7CisgICAgZm9yIChhdXRvIGEgOiB0ZXN0VmFsdWVzKSB7CisgICAgICAgIGZv
ciAoYXV0byBiIDogdGVzdFZhbHVlcykgeworICAgICAgICAgICAgZm9yIChhdXRvIGMgOiB0ZXN0
VmFsdWVzKSB7CisgICAgICAgICAgICAgICAgQ0hFQ0soaW52b2tlPGludDMyX3Q+KCpjb2RlLCBh
LnZhbHVlLCBiLnZhbHVlLCBjLnZhbHVlKSA9PSBhLnZhbHVlICogYi52YWx1ZSArIGMudmFsdWUp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RNdWxBZGRB
cmdzUmlnaHQzMigpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9v
dCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIFZhbHVlKiBhcmcwID0gcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7
CisgICAgVmFsdWUqIGFyZzEgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRydW5jLCBP
cmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAgICBWYWx1ZSogYXJnMiA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICByb290
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMikpOworICAgIFZhbHVlKiBtdWx0aXBsaWVkID0gcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBNdWwsIE9yaWdpbigpLCBhcmcxLCBhcmcyKTsKKyAgICBWYWx1ZSogYWRkZWQg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEFkZCwgT3JpZ2luKCksIGFyZzAsIG11bHRp
cGxpZWQpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwg
T3JpZ2luKCksIGFkZGVkKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisKKyAg
ICBhdXRvIHRlc3RWYWx1ZXMgPSBpbnQzMk9wZXJhbmRzKCk7CisgICAgZm9yIChhdXRvIGEgOiB0
ZXN0VmFsdWVzKSB7CisgICAgICAgIGZvciAoYXV0byBiIDogdGVzdFZhbHVlcykgeworICAgICAg
ICAgICAgZm9yIChhdXRvIGMgOiB0ZXN0VmFsdWVzKSB7CisgICAgICAgICAgICAgICAgQ0hFQ0so
aW52b2tlPGludDMyX3Q+KCpjb2RlLCBhLnZhbHVlLCBiLnZhbHVlLCBjLnZhbHVlKSA9PSBhLnZh
bHVlICsgYi52YWx1ZSAqIGMudmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIHRlc3RNdWxTdWJBcmdzTGVmdCgpCit7CisgICAgUHJvY2VkdXJlIHByb2M7
CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIFZhbHVlKiBh
cmcwID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBH
UFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIFZhbHVlKiBhcmcxID0gcm9vdC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEp
OworICAgIFZhbHVlKiBhcmcyID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgIFZhbHVlKiBtdWx0aXBs
aWVkID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBNdWwsIE9yaWdpbigpLCBhcmcwLCBh
cmcxKTsKKyAgICBWYWx1ZSogYWRkZWQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFN1
YiwgT3JpZ2luKCksIG11bHRpcGxpZWQsIGFyZzIpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250
cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIGFkZGVkKTsKKworICAgIGF1dG8gY29k
ZSA9IGNvbXBpbGUocHJvYyk7CisKKyAgICBhdXRvIHRlc3RWYWx1ZXMgPSBpbnQ2NE9wZXJhbmRz
KCk7CisgICAgZm9yIChhdXRvIGEgOiB0ZXN0VmFsdWVzKSB7CisgICAgICAgIGZvciAoYXV0byBi
IDogdGVzdFZhbHVlcykgeworICAgICAgICAgICAgZm9yIChhdXRvIGMgOiB0ZXN0VmFsdWVzKSB7
CisgICAgICAgICAgICAgICAgQ0hFQ0soaW52b2tlPGludDY0X3Q+KCpjb2RlLCBhLnZhbHVlLCBi
LnZhbHVlLCBjLnZhbHVlKSA9PSBhLnZhbHVlICogYi52YWx1ZSAtIGMudmFsdWUpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RNdWxTdWJBcmdzUmlnaHQo
KQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFk
ZEJsb2NrKCk7CisKKyAgICBWYWx1ZSogYXJnMCA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1
ZSogYXJnMSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBWYWx1ZSogYXJnMiA9IHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIyKTsKKyAgICBWYWx1ZSogbXVsdGlwbGllZCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJv
YywgTXVsLCBPcmlnaW4oKSwgYXJnMSwgYXJnMik7CisgICAgVmFsdWUqIGFkZGVkID0gcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTdWIsIE9yaWdpbigpLCBhcmcwLCBtdWx0aXBsaWVkKTsK
KyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LCBhZGRlZCk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworCisgICAgYXV0byB0
ZXN0VmFsdWVzID0gaW50NjRPcGVyYW5kcygpOworICAgIGZvciAoYXV0byBhIDogdGVzdFZhbHVl
cykgeworICAgICAgICBmb3IgKGF1dG8gYiA6IHRlc3RWYWx1ZXMpIHsKKyAgICAgICAgICAgIGZv
ciAoYXV0byBjIDogdGVzdFZhbHVlcykgeworICAgICAgICAgICAgICAgIENIRUNLKGludm9rZTxp
bnQ2NF90PigqY29kZSwgYS52YWx1ZSwgYi52YWx1ZSwgYy52YWx1ZSkgPT0gYS52YWx1ZSAtIGIu
dmFsdWUgKiBjLnZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCB0ZXN0TXVsU3ViQXJnc0xlZnQzMigpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAg
QmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKworICAgIFZhbHVlKiBhcmcwID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKSk7CisgICAgVmFsdWUqIGFyZzEgPSByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKTsKKyAgICBW
YWx1ZSogYXJnMiA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgVHJ1bmMsIE9yaWdpbigp
LAorICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIEdQUkluZm86OmFyZ3VtZW50R1BSMikpOworICAgIFZhbHVlKiBtdWx0aXBsaWVkID0gcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBNdWwsIE9yaWdpbigpLCBhcmcwLCBhcmcxKTsKKyAg
ICBWYWx1ZSogYWRkZWQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFN1YiwgT3JpZ2lu
KCksIG11bHRpcGxpZWQsIGFyZzIpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+
KHByb2MsIFJldHVybiwgT3JpZ2luKCksIGFkZGVkKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBp
bGUocHJvYyk7CisKKyAgICBhdXRvIHRlc3RWYWx1ZXMgPSBpbnQzMk9wZXJhbmRzKCk7CisgICAg
Zm9yIChhdXRvIGEgOiB0ZXN0VmFsdWVzKSB7CisgICAgICAgIGZvciAoYXV0byBiIDogdGVzdFZh
bHVlcykgeworICAgICAgICAgICAgZm9yIChhdXRvIGMgOiB0ZXN0VmFsdWVzKSB7CisgICAgICAg
ICAgICAgICAgQ0hFQ0soaW52b2tlPGludDMyX3Q+KCpjb2RlLCBhLnZhbHVlLCBiLnZhbHVlLCBj
LnZhbHVlKSA9PSBhLnZhbHVlICogYi52YWx1ZSAtIGMudmFsdWUpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RNdWxTdWJBcmdzUmlnaHQzMigpCit7Cisg
ICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2so
KTsKKworICAgIFZhbHVlKiBhcmcwID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVu
YywgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgVmFsdWUqIGFyZzEg
PSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjEpKTsKKyAgICBWYWx1ZSogYXJnMiA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1l
bnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMikpOworICAg
IFZhbHVlKiBtdWx0aXBsaWVkID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBNdWwsIE9y
aWdpbigpLCBhcmcxLCBhcmcyKTsKKyAgICBWYWx1ZSogYWRkZWQgPSByb290LT5hcHBlbmROZXc8
VmFsdWU+KHByb2MsIFN1YiwgT3JpZ2luKCksIGFyZzAsIG11bHRpcGxpZWQpOworICAgIHJvb3Qt
PmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIGFkZGVkKTsK
KworICAgIGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisKKyAgICBhdXRvIHRlc3RWYWx1ZXMg
PSBpbnQzMk9wZXJhbmRzKCk7CisgICAgZm9yIChhdXRvIGEgOiB0ZXN0VmFsdWVzKSB7CisgICAg
ICAgIGZvciAoYXV0byBiIDogdGVzdFZhbHVlcykgeworICAgICAgICAgICAgZm9yIChhdXRvIGMg
OiB0ZXN0VmFsdWVzKSB7CisgICAgICAgICAgICAgICAgQ0hFQ0soaW52b2tlPGludDMyX3Q+KCpj
b2RlLCBhLnZhbHVlLCBiLnZhbHVlLCBjLnZhbHVlKSA9PSBhLnZhbHVlIC0gYi52YWx1ZSAqIGMu
dmFsdWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHRlc3RN
dWxOZWdBcmdzKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290
ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFsdWUqIGFyZzAgPSByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7
CisgICAgVmFsdWUqIGFyZzEgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgVmFsdWUqIG11bHRpcGxp
ZWQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIE11bCwgT3JpZ2luKCksIGFyZzAsIGFy
ZzEpOworICAgIFZhbHVlKiB6ZXJvID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0NjRWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIDApOworICAgIFZhbHVlKiBhZGRlZCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgU3ViLCBPcmlnaW4oKSwgemVybywgbXVsdGlwbGllZCk7CisgICAgcm9vdC0+YXBw
ZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgYWRkZWQpOworCisg
ICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKworICAgIGF1dG8gdGVzdFZhbHVlcyA9IGlu
dDY0T3BlcmFuZHMoKTsKKyAgICBmb3IgKGF1dG8gYSA6IHRlc3RWYWx1ZXMpIHsKKyAgICAgICAg
Zm9yIChhdXRvIGIgOiB0ZXN0VmFsdWVzKSB7CisgICAgICAgICAgICBDSEVDSyhpbnZva2U8aW50
NjRfdD4oKmNvZGUsIGEudmFsdWUsIGIudmFsdWUpID09IC0oYS52YWx1ZSAqIGIudmFsdWUpKTsK
KyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0TXVsTmVnQXJnczMyKCkKK3sKKyAgICBQ
cm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwor
CisgICAgVmFsdWUqIGFyZzAgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRydW5jLCBP
cmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKyAgICBWYWx1ZSogYXJnMSA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICByb290
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMSkpOworICAgIFZhbHVlKiBtdWx0aXBsaWVkID0gcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBNdWwsIE9yaWdpbigpLCBhcmcwLCBhcmcxKTsKKyAgICBWYWx1ZSogemVybyA9
IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKTsKKyAgICBW
YWx1ZSogYWRkZWQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFN1YiwgT3JpZ2luKCks
IHplcm8sIG11bHRpcGxpZWQpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHBy
b2MsIFJldHVybiwgT3JpZ2luKCksIGFkZGVkKTsKKworICAgIGF1dG8gY29kZSA9IGNvbXBpbGUo
cHJvYyk7CisKKyAgICBhdXRvIHRlc3RWYWx1ZXMgPSBpbnQzMk9wZXJhbmRzKCk7CisgICAgZm9y
IChhdXRvIGEgOiB0ZXN0VmFsdWVzKSB7CisgICAgICAgIGZvciAoYXV0byBiIDogdGVzdFZhbHVl
cykgeworICAgICAgICAgICAgQ0hFQ0soaW52b2tlPGludDMyX3Q+KCpjb2RlLCBhLnZhbHVlLCBi
LnZhbHVlKSA9PSAtKGEudmFsdWUgKiBiLnZhbHVlKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisK
IHZvaWQgdGVzdE11bEFyZ0RvdWJsZShkb3VibGUgYSkKIHsKICAgICBQcm9jZWR1cmUgcHJvYzsK
QEAgLTEwNzAxLDc4ICsxMTAyMyw2IEBAIGRvdWJsZSBuZWdhdGl2ZVplcm8oKQogICAgIHJldHVy
biAtemVybygpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgotc3RydWN0IE9wZXJhbmQg
ewotICAgIGNvbnN0IGNoYXIqIG5hbWU7Ci0gICAgVHlwZSB2YWx1ZTsKLX07Ci0KLXR5cGVkZWYg
T3BlcmFuZDxpbnQ2NF90PiBJbnQ2NE9wZXJhbmQ7Ci10eXBlZGVmIE9wZXJhbmQ8aW50MzJfdD4g
SW50MzJPcGVyYW5kOwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBGbG9hdFR5cGU+Ci12b2lkIHBvcHVs
YXRlV2l0aEludGVyZXN0aW5nVmFsdWVzKFZlY3RvcjxPcGVyYW5kPEZsb2F0VHlwZT4+JiBvcGVy
YW5kcykKLXsKLSAgICBvcGVyYW5kcy5hcHBlbmQoeyAiMC4iLCBzdGF0aWNfY2FzdDxGbG9hdFR5
cGU+KDAuKSB9KTsKLSAgICBvcGVyYW5kcy5hcHBlbmQoeyAiLTAuIiwgc3RhdGljX2Nhc3Q8Rmxv
YXRUeXBlPigtMC4pIH0pOwotICAgIG9wZXJhbmRzLmFwcGVuZCh7ICIwLjQiLCBzdGF0aWNfY2Fz
dDxGbG9hdFR5cGU+KDAuNSkgfSk7Ci0gICAgb3BlcmFuZHMuYXBwZW5kKHsgIi0wLjQiLCBzdGF0
aWNfY2FzdDxGbG9hdFR5cGU+KC0wLjUpIH0pOwotICAgIG9wZXJhbmRzLmFwcGVuZCh7ICIwLjUi
LCBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KDAuNSkgfSk7Ci0gICAgb3BlcmFuZHMuYXBwZW5kKHsg
Ii0wLjUiLCBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KC0wLjUpIH0pOwotICAgIG9wZXJhbmRzLmFw
cGVuZCh7ICIwLjYiLCBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KDAuNSkgfSk7Ci0gICAgb3BlcmFu
ZHMuYXBwZW5kKHsgIi0wLjYiLCBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KC0wLjUpIH0pOwotICAg
IG9wZXJhbmRzLmFwcGVuZCh7ICIxLiIsIHN0YXRpY19jYXN0PEZsb2F0VHlwZT4oMS4pIH0pOwot
ICAgIG9wZXJhbmRzLmFwcGVuZCh7ICItMS4iLCBzdGF0aWNfY2FzdDxGbG9hdFR5cGU+KC0xLikg
fSk7Ci0gICAgb3BlcmFuZHMuYXBwZW5kKHsgIjIuIiwgc3RhdGljX2Nhc3Q8RmxvYXRUeXBlPigy
LikgfSk7Ci0gICAgb3BlcmFuZHMuYXBwZW5kKHsgIi0yLiIsIHN0YXRpY19jYXN0PEZsb2F0VHlw
ZT4oLTIuKSB9KTsKLSAgICBvcGVyYW5kcy5hcHBlbmQoeyAiTV9QSSIsIHN0YXRpY19jYXN0PEZs
b2F0VHlwZT4oTV9QSSkgfSk7Ci0gICAgb3BlcmFuZHMuYXBwZW5kKHsgIi1NX1BJIiwgc3RhdGlj
X2Nhc3Q8RmxvYXRUeXBlPigtTV9QSSkgfSk7Ci0gICAgb3BlcmFuZHMuYXBwZW5kKHsgIm1pbiIs
IHN0ZDo6bnVtZXJpY19saW1pdHM8RmxvYXRUeXBlPjo6bWluKCkgfSk7Ci0gICAgb3BlcmFuZHMu
YXBwZW5kKHsgIm1heCIsIHN0ZDo6bnVtZXJpY19saW1pdHM8RmxvYXRUeXBlPjo6bWF4KCkgfSk7
Ci0gICAgb3BlcmFuZHMuYXBwZW5kKHsgImxvd2VzdCIsIHN0ZDo6bnVtZXJpY19saW1pdHM8Rmxv
YXRUeXBlPjo6bG93ZXN0KCkgfSk7Ci0gICAgb3BlcmFuZHMuYXBwZW5kKHsgImVwc2lsb24iLCBz
dGQ6Om51bWVyaWNfbGltaXRzPEZsb2F0VHlwZT46OmVwc2lsb24oKSB9KTsKLSAgICBvcGVyYW5k
cy5hcHBlbmQoeyAiaW5maW5pdGkiLCBzdGQ6Om51bWVyaWNfbGltaXRzPEZsb2F0VHlwZT46Omlu
ZmluaXR5KCkgfSk7Ci0gICAgb3BlcmFuZHMuYXBwZW5kKHsgIi1pbmZpbml0aSIsIC0gc3RkOjpu
dW1lcmljX2xpbWl0czxGbG9hdFR5cGU+OjppbmZpbml0eSgpIH0pOwotICAgIG9wZXJhbmRzLmFw
cGVuZCh7ICJQTmFOIiwgc3RhdGljX2Nhc3Q8RmxvYXRUeXBlPihQTmFOKSB9KTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgRmxvYXRUeXBlPgotVmVjdG9yPE9wZXJhbmQ8RmxvYXRUeXBlPj4gZmxv
YXRpbmdQb2ludE9wZXJhbmRzKCkKLXsKLSAgICBWZWN0b3I8T3BlcmFuZDxGbG9hdFR5cGU+PiBv
cGVyYW5kczsKLSAgICBwb3B1bGF0ZVdpdGhJbnRlcmVzdGluZ1ZhbHVlcyhvcGVyYW5kcyk7Ci0g
ICAgcmV0dXJuIG9wZXJhbmRzOwotfTsKLQotc3RhdGljIFZlY3RvcjxJbnQ2NE9wZXJhbmQ+IGlu
dDY0T3BlcmFuZHMoKQotewotICAgIFZlY3RvcjxJbnQ2NE9wZXJhbmQ+IG9wZXJhbmRzOwotICAg
IGZvciAoY29uc3QgYXV0byYgZG91YmxlT3BlcmFuZCA6IGZsb2F0aW5nUG9pbnRPcGVyYW5kczxk
b3VibGU+KCkpCi0gICAgICAgIG9wZXJhbmRzLmFwcGVuZCh7IGRvdWJsZU9wZXJhbmQubmFtZSwg
Yml0d2lzZV9jYXN0PGludDY0X3Q+KGRvdWJsZU9wZXJhbmQudmFsdWUpIH0pOwotICAgIG9wZXJh
bmRzLmFwcGVuZCh7ICIxIiwgMSB9KTsKLSAgICBvcGVyYW5kcy5hcHBlbmQoeyAiLTEiLCAtMSB9
KTsKLSAgICBvcGVyYW5kcy5hcHBlbmQoeyAiaW50NjQtbWF4Iiwgc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ2NF90Pjo6bWF4KCkgfSk7Ci0gICAgb3BlcmFuZHMuYXBwZW5kKHsgImludDY0LW1pbiIs
IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1pbigpIH0pOwotICAgIG9wZXJhbmRzLmFw
cGVuZCh7ICJpbnQzMi1tYXgiLCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSB9
KTsKLSAgICBvcGVyYW5kcy5hcHBlbmQoeyAiaW50MzItbWluIiwgc3RkOjpudW1lcmljX2xpbWl0
czxpbnQzMl90Pjo6bWluKCkgfSk7Ci0KLSAgICByZXR1cm4gb3BlcmFuZHM7Ci19Ci0KLXN0YXRp
YyBWZWN0b3I8SW50MzJPcGVyYW5kPiBpbnQzMk9wZXJhbmRzKCkKLXsKLSAgICBWZWN0b3I8SW50
MzJPcGVyYW5kPiBvcGVyYW5kcyh7Ci0gICAgICAgIHsgIjAiLCAwIH0sCi0gICAgICAgIHsgIjEi
LCAxIH0sCi0gICAgICAgIHsgIi0xIiwgLTEgfSwKLSAgICAgICAgeyAiNDIiLCA0MiB9LAotICAg
ICAgICB7ICItNDIiLCAtNDIgfSwKLSAgICAgICAgeyAiaW50MzItbWF4Iiwgc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQzMl90Pjo6bWF4KCkgfSwKLSAgICAgICAgeyAiaW50MzItbWluIiwgc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkgfQotICAgIH0pOwotICAgIHJldHVybiBvcGVy
YW5kczsKLX0KLQogI2RlZmluZSBSVU4odGVzdCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgICAgICBpZiAoIXNob3VsZFJ1bigjdGVzdCkpICAgICAgICAgICAgICAgICAgXAog
ICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTA5
MjksNiArMTExNzksMTYgQEAgdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogICAgIFJVTih0
ZXN0TXVsQXJnczMyKDEsIDEpKTsKICAgICBSVU4odGVzdE11bEFyZ3MzMigxLCAyKSk7CiAgICAg
UlVOKHRlc3RNdWxMb2FkVHdpY2UoKSk7CisgICAgUlVOKHRlc3RNdWxBZGRBcmdzTGVmdCgpKTsK
KyAgICBSVU4odGVzdE11bEFkZEFyZ3NSaWdodCgpKTsKKyAgICBSVU4odGVzdE11bEFkZEFyZ3NM
ZWZ0MzIoKSk7CisgICAgUlVOKHRlc3RNdWxBZGRBcmdzUmlnaHQzMigpKTsKKyAgICBSVU4odGVz
dE11bFN1YkFyZ3NMZWZ0KCkpOworICAgIFJVTih0ZXN0TXVsU3ViQXJnc1JpZ2h0KCkpOworICAg
IFJVTih0ZXN0TXVsU3ViQXJnc0xlZnQzMigpKTsKKyAgICBSVU4odGVzdE11bFN1YkFyZ3NSaWdo
dDMyKCkpOworICAgIFJVTih0ZXN0TXVsTmVnQXJncygpKTsKKyAgICBSVU4odGVzdE11bE5lZ0Fy
Z3MzMigpKTsKIAogICAgIFJVTl9VTkFSWSh0ZXN0TXVsQXJnRG91YmxlLCBmbG9hdGluZ1BvaW50
T3BlcmFuZHM8ZG91YmxlPigpKTsKICAgICBSVU5fQklOQVJZKHRlc3RNdWxBcmdzRG91YmxlLCBm
bG9hdGluZ1BvaW50T3BlcmFuZHM8ZG91YmxlPigpLCBmbG9hdGluZ1BvaW50T3BlcmFuZHM8ZG91
YmxlPigpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272814</attachid>
            <date>2016-03-03 18:36:30 -0800</date>
            <delta_ts>2016-03-03 20:40:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154997-20160303183615.patch</filename>
            <type>text/plain</type>
            <size>20021</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk3NTM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAw
MGMwYTFlOTM3MzgzMTM3Njg3OWI3M2I4OGQxYzllY2RhNmM5MTk1Li40ZjQyOTVhOWJjYjhhOWVi
NDc2MTE2MzM3NTNkNzllMDA3YTI1NDgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0OCBAQAorMjAxNi0wMy0wMyAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBBZGQgc3VwcG9ydCBmb3IgTUFERCwgTVNVQiBhbmQgTU5F
RyB0byBBaXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1NDk5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFSTTY0IGNhbiBkbyBhbiBBZGQvU3ViIGluIHRoZSBNdWx0aXBseSB1bml0cy4KKyAgICAgICAg
TExWTSB3YXMgZG9pbmcgc28gYnV0IHdlIGxvc3QgdGhhdCB3aGVuIHN3aXRjaGluZyB0byBCMy4K
KworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgdGhvc2UgaW5zdHJ1Y3Rpb25zIGluIEFpci4KKwor
ICAgICAgICBUaGVyZSBhcmUgbW9yZSBBTFVzIHRoYW4gbXVsdGlwbHkgdW5pdHMsIHRodXMgd2Ug
YXJlIG1vcmUKKyAgICAgICAgbGlrZWx5IHRvIHN1Y2Nlc3NmdWxseSBzY2hlZHVsZSBhIE11bHRp
cGx5K0FkZCB0aGFuIDIgTXVsdGlwbHkuCisgICAgICAgIEkgYW0gY29uc2VydmF0aXZlIGFuZCBv
bmx5IGVtaXQgYSBtdWx0aXBseS1hZGQgaWYgdGhlIHZhbHVlCisgICAgICAgIGNhbiBiZSBpbnRl
cm5lZC4gQXMgZmFyIGFzIEkgY2FuIHRlbGwgZnJvbSB3aGF0IGlzIGdlbmVyYXRlZAorICAgICAg
ICBieSBMTFZNLCB0aGF0IGJhY2tlbmQgaGFkIHRoZSBzYW1lIHJ1bGUuCisKKyAgICAgICAgKiBh
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
YmxlckFSTTY0OjptdWx0aXBseUFkZDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk02NDo6bXVsdGlwbHlTdWIzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6
Om11bHRpcGx5TmVnMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjptdWx0
aXBseUFkZDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6bXVsdGlwbHlT
dWI2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om11bHRpcGx5TmVnNjQp
OgorICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okxvd2VyVG9BaXI6Omxvd2VyKToKKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM6
CisgICAgICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnBvcHVsYXRlV2l0
aEludGVyZXN0aW5nVmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OmZsb2F0aW5nUG9pbnRPcGVy
YW5kcyk6CisgICAgICAgIChKU0M6OkIzOjppbnQ2NE9wZXJhbmRzKToKKyAgICAgICAgKEpTQzo6
QjM6OmludDMyT3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdE11bEFkZEFyZ3NMZWZ0
KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RNdWxBZGRBcmdzUmlnaHQpOgorICAgICAgICAoSlND
OjpCMzo6dGVzdE11bEFkZEFyZ3NMZWZ0MzIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdE11bEFk
ZEFyZ3NSaWdodDMyKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RNdWxTdWJBcmdzTGVmdCk6Cisg
ICAgICAgIChKU0M6OkIzOjp0ZXN0TXVsU3ViQXJnc1JpZ2h0KToKKyAgICAgICAgKEpTQzo6QjM6
OnRlc3RNdWxTdWJBcmdzTGVmdDMyKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RNdWxTdWJBcmdz
UmlnaHQzMik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TXVsTmVnQXJncyk6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0TXVsTmVnQXJnczMyKToKKyAgICAgICAgKEpTQzo6QjM6OnJ1bik6CisKIDIw
MTYtMDMtMDMgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAg
ICAgQXJyYXkgcHJvdG90eXBlIEpTIGJ1aWx0aW5zIHNob3VsZCBzdXBwb3J0IFN5bWJvbC5zcGVj
aWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQVJNNjQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJBUk02NC5oCmluZGV4IDNiOGVmYWE0ZGY2MzA1ZTYzMzdmNDBjNzFjZTViMzE2ZjI0ZWJm
M2QuLmY0YWE1YzUzZDQyNjgzZjA5MmEwNTViMmRjODM0MzdhOTRiZjZiZjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5o
CkBAIC00ODcsNiArNDg3LDM2IEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIubXVsPDY0
PihkZXN0LCBsZWZ0LCByaWdodCk7CiAgICAgfQogCisgICAgdm9pZCBtdWx0aXBseUFkZDMyKFJl
Z2lzdGVySUQgbXVsTGVmdCwgUmVnaXN0ZXJJRCBtdWxSaWdodCwgUmVnaXN0ZXJJRCBzdW1tYW5k
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tYWRkPDMyPihk
ZXN0LCBtdWxMZWZ0LCBtdWxSaWdodCwgc3VtbWFuZCk7CisgICAgfQorCisgICAgdm9pZCBtdWx0
aXBseVN1YjMyKFJlZ2lzdGVySUQgbXVsTGVmdCwgUmVnaXN0ZXJJRCBtdWxSaWdodCwgUmVnaXN0
ZXJJRCBtaW51ZW5kLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5tc3ViPDMyPihkZXN0LCBtdWxMZWZ0LCBtdWxSaWdodCwgbWludWVuZCk7CisgICAgfQorCisg
ICAgdm9pZCBtdWx0aXBseU5lZzMyKFJlZ2lzdGVySUQgbXVsTGVmdCwgUmVnaXN0ZXJJRCBtdWxS
aWdodCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubXN1Yjwz
Mj4oZGVzdCwgbXVsTGVmdCwgbXVsUmlnaHQsIEFSTTY0UmVnaXN0ZXJzOjp6cik7CisgICAgfQor
CisgICAgdm9pZCBtdWx0aXBseUFkZDY0KFJlZ2lzdGVySUQgbXVsTGVmdCwgUmVnaXN0ZXJJRCBt
dWxSaWdodCwgUmVnaXN0ZXJJRCBzdW1tYW5kLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5tYWRkPDY0PihkZXN0LCBtdWxMZWZ0LCBtdWxSaWdodCwgc3VtbWFu
ZCk7CisgICAgfQorCisgICAgdm9pZCBtdWx0aXBseVN1YjY0KFJlZ2lzdGVySUQgbXVsTGVmdCwg
UmVnaXN0ZXJJRCBtdWxSaWdodCwgUmVnaXN0ZXJJRCBtaW51ZW5kLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tc3ViPDY0PihkZXN0LCBtdWxMZWZ0LCBtdWxS
aWdodCwgbWludWVuZCk7CisgICAgfQorCisgICAgdm9pZCBtdWx0aXBseU5lZzY0KFJlZ2lzdGVy
SUQgbXVsTGVmdCwgUmVnaXN0ZXJJRCBtdWxSaWdodCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIubXN1Yjw2ND4oZGVzdCwgbXVsTGVmdCwgbXVsUmlnaHQsIEFS
TTY0UmVnaXN0ZXJzOjp6cik7CisgICAgfQorCiAgICAgdm9pZCBkaXYzMihSZWdpc3RlcklEIGRp
dmlkZW5kLCBSZWdpc3RlcklEIGRpdmlzb3IsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAg
ICAgIG1fYXNzZW1ibGVyLnNkaXY8MzI+KGRlc3QsIGRpdmlkZW5kLCBkaXZpc29yKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKaW5kZXggMWNkNTU3YjdkMDA5Mzkw
YjkyZTVmNTQ4NDIwZDJjNTdmMDRhMzk4YS4uODNkZDc0MzVjNzNhODY0NDA2OGZlZGY4YTZjZDBm
YmE3N2FlMTkyOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJU
b0Fpci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAK
QEAgLTE3MDQsMTcgKzE3MDQsODYgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGNh
c2UgQWRkOiB7CisgICAgICAgICAgICBBaXI6Ok9wY29kZSBtdWx0aXBseUFkZE9wY29kZSA9IHRy
eU9wY29kZUZvclR5cGUoTXVsdGlwbHlBZGQzMiwgTXVsdGlwbHlBZGQ2NCwgbV92YWx1ZS0+dHlw
ZSgpKTsKKyAgICAgICAgICAgIGlmIChtdWx0aXBseUFkZE9wY29kZSAhPSBBaXI6Ok9vcHMKKyAg
ICAgICAgICAgICAgICAmJiBpc1ZhbGlkRm9ybShtdWx0aXBseUFkZE9wY29kZSwgQXJnOjpUbXAs
IEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICAgICAgVmFsdWUq
IGxlZnQgPSBtX3ZhbHVlLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICBWYWx1ZSogcmlnaHQg
PSBtX3ZhbHVlLT5jaGlsZCgxKTsKKyAgICAgICAgICAgICAgICBpZiAoIWltbShyaWdodCkgfHwg
bV92YWx1ZVRvVG1wW3JpZ2h0XSkgeworICAgICAgICAgICAgICAgICAgICBhdXRvIHRyeUFwcGVu
ZE11bHRpcGx5QWRkID0gWyZdIChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KSAtPiBib29sIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0LT5vcGNvZGUoKSAhPSBNdWwgfHwgIWNh
bkJlSW50ZXJuYWwobGVmdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbXVsdGlwbHlMZWZ0ID0gbGVm
dC0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSogbXVsdGlwbHlSaWdo
dCA9IGxlZnQtPmNoaWxkKDEpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fbG9ja2Vk
LmNvbnRhaW5zKG11bHRpcGx5TGVmdCkgfHwgbV9sb2NrZWQuY29udGFpbnMobXVsdGlwbHlSaWdo
dCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
ICAgICAgICAgICAgICAgICBhcHBlbmQobXVsdGlwbHlBZGRPcGNvZGUsIHRtcChtdWx0aXBseUxl
ZnQpLCB0bXAobXVsdGlwbHlSaWdodCksIHRtcChyaWdodCksIHRtcChtX3ZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRlcm5hbChsZWZ0KTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHRyeUFwcGVuZE11bHRpcGx5QWRkKGxlZnQsIHJpZ2h0KSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRy
eUFwcGVuZE11bHRpcGx5QWRkKHJpZ2h0LCBsZWZ0KSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKICAgICAgICAgICAg
IGFwcGVuZEJpbk9wPEFkZDMyLCBBZGQ2NCwgQWRkRG91YmxlLCBBZGRGbG9hdCwgQ29tbXV0YXRp
dmU+KAogICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgx
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIFN1Yjog
eworICAgICAgICAgICAgQWlyOjpPcGNvZGUgbXVsdGlwbHlTdWJPcGNvZGUgPSB0cnlPcGNvZGVG
b3JUeXBlKE11bHRpcGx5U3ViMzIsIE11bHRpcGx5U3ViNjQsIG1fdmFsdWUtPnR5cGUoKSk7Cisg
ICAgICAgICAgICBpZiAobXVsdGlwbHlTdWJPcGNvZGUgIT0gQWlyOjpPb3BzCisgICAgICAgICAg
ICAgICAgJiYgaXNWYWxpZEZvcm0obXVsdGlwbHlTdWJPcGNvZGUsIEFyZzo6VG1wLCBBcmc6OlRt
cCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICAgICAgICAgIFZhbHVlKiBsZWZ0ID0g
bV92YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgVmFsdWUqIHJpZ2h0ID0gbV92YWx1
ZS0+Y2hpbGQoMSk7CisgICAgICAgICAgICAgICAgaWYgKCFpbW0ocmlnaHQpIHx8IG1fdmFsdWVU
b1RtcFtyaWdodF0pIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byB0cnlBcHBlbmRNdWx0aXBs
eVN1YiA9IFsmXSAoKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyaWdo
dC0+b3Bjb2RlKCkgIT0gTXVsIHx8ICFjYW5CZUludGVybmFsKHJpZ2h0KSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IFZhbHVlKiBtdWx0aXBseUxlZnQgPSByaWdodC0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBWYWx1ZSogbXVsdGlwbHlSaWdodCA9IHJpZ2h0LT5jaGlsZCgxKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChtX2xvY2tlZC5jb250YWlucyhtdWx0aXBseUxlZnQpIHx8IG1f
bG9ja2VkLmNvbnRhaW5zKG11bHRpcGx5UmlnaHQpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKG11bHRp
cGx5U3ViT3Bjb2RlLCB0bXAobXVsdGlwbHlMZWZ0KSwgdG1wKG11bHRpcGx5UmlnaHQpLCB0bXAo
bGVmdCksIHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21taXRJbnRl
cm5hbChyaWdodCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgIGlmICh0cnlBcHBlbmRN
dWx0aXBseVN1YigpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgYXBwZW5kQmluT3A8U3ViMzIs
IFN1YjY0LCBTdWJEb3VibGUsIFN1YkZsb2F0PihtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+
Y2hpbGQoMSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBOZWc6IHsKKyAgICAgICAgICAgIEFpcjo6T3Bjb2RlIG11bHRpcGx5TmVnT3Bjb2RlID0gdHJ5
T3Bjb2RlRm9yVHlwZShNdWx0aXBseU5lZzMyLCBNdWx0aXBseU5lZzY0LCBtX3ZhbHVlLT50eXBl
KCkpOworICAgICAgICAgICAgaWYgKG11bHRpcGx5TmVnT3Bjb2RlICE9IEFpcjo6T29wcworICAg
ICAgICAgICAgICAgICYmIGlzVmFsaWRGb3JtKG11bHRpcGx5TmVnT3Bjb2RlLCBBcmc6OlRtcCwg
QXJnOjpUbXAsIEFyZzo6VG1wKQorICAgICAgICAgICAgICAgICYmIG1fdmFsdWUtPmNoaWxkKDAp
LT5vcGNvZGUoKSA9PSBNdWwKKyAgICAgICAgICAgICAgICAmJiBjYW5CZUludGVybmFsKG1fdmFs
dWUtPmNoaWxkKDApKSkgeworICAgICAgICAgICAgICAgIFZhbHVlKiBtdWx0aXBseU9wZXJhdGlv
biA9IG1fdmFsdWUtPmNoaWxkKDApOworICAgICAgICAgICAgICAgIFZhbHVlKiBtdWx0aXBseUxl
ZnQgPSBtdWx0aXBseU9wZXJhdGlvbi0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgVmFsdWUq
IG11bHRpcGx5UmlnaHQgPSBtdWx0aXBseU9wZXJhdGlvbi0+Y2hpbGQoMSk7CisgICAgICAgICAg
ICAgICAgaWYgKCFtX2xvY2tlZC5jb250YWlucyhtdWx0aXBseUxlZnQpICYmICFtX2xvY2tlZC5j
b250YWlucyhtdWx0aXBseVJpZ2h0KSkgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmQobXVs
dGlwbHlOZWdPcGNvZGUsIHRtcChtdWx0aXBseUxlZnQpLCB0bXAobXVsdGlwbHlSaWdodCksIHRt
cChtX3ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbW1pdEludGVybmFsKG11bHRpcGx5
T3BlcmF0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgYXBwZW5kVW5PcDxOZWczMiwgTmVnNjQs
IE5lZ2F0ZURvdWJsZSwgQWlyOjpPb3BzPihtX3ZhbHVlLT5jaGlsZCgwKSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyT3Bjb2RlLm9wY29kZXMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ck9wY29kZS5vcGNvZGVzCmluZGV4IGVmMjM1Y2MyN2Q1YTdlMDNmNzliMWNkYjU0YTIyY2ExZDE5
MjBkZjEuLmI2ZTE2YmU5MzJmN2E3ODE2MjQ5N2UxYjViMTY4ZWQ2NjdhMWIwZWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwpAQCAtMjE1LDYg
KzIxNSwyNCBAQCBNdWwzMiBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgogTXVsNjQgVTpHOjY0LCBV
Okc6NjQsIEQ6Rzo2NAogICAgIFRtcCwgVG1wLCBUbXAKIAorYXJtNjQ6IE11bHRpcGx5QWRkMzIg
VTpHOjMyLCBVOkc6MzIsIFU6RzozMiwgWkQ6RzozMgorICAgIFRtcCwgVG1wLCBUbXAsIFRtcAor
Cithcm02NDogTXVsdGlwbHlBZGQ2NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKKyAg
ICBUbXAsIFRtcCwgVG1wLCBUbXAKKworYXJtNjQ6IE11bHRpcGx5U3ViMzIgVTpHOjMyLCBVOkc6
MzIsIFU6RzozMiwgWkQ6RzozMgorICAgIFRtcCwgVG1wLCBUbXAsIFRtcAorCithcm02NDogTXVs
dGlwbHlTdWI2NCBVOkc6NjQsIFU6Rzo2NCwgVTpHOjY0LCBEOkc6NjQKKyAgICBUbXAsIFRtcCwg
VG1wLCBUbXAKKworYXJtNjQ6IE11bHRpcGx5TmVnMzIgVTpHOjMyLCBVOkc6MzIsIFpEOkc6MzIK
KyAgICBUbXAsIFRtcCwgVG1wCisKK2FybTY0OiBNdWx0aXBseU5lZzY0IFU6Rzo2NCwgVTpHOjY0
LCBaRDpHOjY0CisgICAgVG1wLCBUbXAsIFRtcAorCiBhcm02NDogRGl2MzIgVTpHOjMyLCBVOkc6
MzIsIFpEOkc6MzIKICAgICBUbXAsIFRtcCwgVG1wCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3Ri
My5jcHAKaW5kZXggOWMxMDBkMDU5NjJmMWZjZjgxZTdlYmQwMjNjZDQyMWI4OGE2NzdhMy4uZDIy
MTZjODIyYThmMDg2YTA1MGIyMjA2N2E5ODQ2ZGEyOTVmMTg3OCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL3Rlc3RiMy5jcHAKQEAgLTg2Miw2ICs4NjIsMjU2IEBAIHZvaWQgdGVzdE11bExvYWRUd2lj
ZSgpCiAgICAgdGVzdCgxKTsKIH0KIAordm9pZCB0ZXN0TXVsQWRkQXJnc0xlZnQoKQoreworICAg
IFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7
CisKKyAgICBWYWx1ZSogYXJnMCA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1ZSogYXJnMSA9
IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIxKTsKKyAgICBWYWx1ZSogYXJnMiA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAg
ICBWYWx1ZSogbXVsdGlwbGllZCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgTXVsLCBP
cmlnaW4oKSwgYXJnMCwgYXJnMSk7CisgICAgVmFsdWUqIGFkZGVkID0gcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBtdWx0aXBsaWVkLCBhcmcyKTsKKyAgICByb290
LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBhZGRlZCk7
CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworCisgICAgYXV0byB0ZXN0VmFsdWVz
ID0gaW50NjRPcGVyYW5kcygpOworICAgIGZvciAoYXV0byBhIDogdGVzdFZhbHVlcykgeworICAg
ICAgICBmb3IgKGF1dG8gYiA6IHRlc3RWYWx1ZXMpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBj
IDogdGVzdFZhbHVlcykgeworICAgICAgICAgICAgICAgIENIRUNLKGludm9rZTxpbnQ2NF90Pigq
Y29kZSwgYS52YWx1ZSwgYi52YWx1ZSwgYy52YWx1ZSkgPT0gYS52YWx1ZSAqIGIudmFsdWUgKyBj
LnZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0
TXVsQWRkQXJnc1JpZ2h0KCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2Nr
KiByb290ID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgVmFsdWUqIGFyZzAgPSByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMCk7CisgICAgVmFsdWUqIGFyZzEgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgVmFsdWUqIGFy
ZzIgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgVmFsdWUqIG11bHRpcGxpZWQgPSByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIE11bCwgT3JpZ2luKCksIGFyZzEsIGFyZzIpOworICAgIFZhbHVl
KiBhZGRlZCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgQWRkLCBPcmlnaW4oKSwgYXJn
MCwgbXVsdGlwbGllZCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywg
UmV0dXJuLCBPcmlnaW4oKSwgYWRkZWQpOworCisgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9j
KTsKKworICAgIGF1dG8gdGVzdFZhbHVlcyA9IGludDY0T3BlcmFuZHMoKTsKKyAgICBmb3IgKGF1
dG8gYSA6IHRlc3RWYWx1ZXMpIHsKKyAgICAgICAgZm9yIChhdXRvIGIgOiB0ZXN0VmFsdWVzKSB7
CisgICAgICAgICAgICBmb3IgKGF1dG8gYyA6IHRlc3RWYWx1ZXMpIHsKKyAgICAgICAgICAgICAg
ICBDSEVDSyhpbnZva2U8aW50NjRfdD4oKmNvZGUsIGEudmFsdWUsIGIudmFsdWUsIGMudmFsdWUp
ID09IGEudmFsdWUgKyBiLnZhbHVlICogYy52YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdE11bEFkZEFyZ3NMZWZ0MzIoKQoreworICAgIFByb2Nl
ZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAg
ICBWYWx1ZSogYXJnMCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgVHJ1bmMsIE9yaWdp
bigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgIFZhbHVlKiBhcmcxID0gcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxKSk7CisgICAgVmFsdWUqIGFyZzIgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpKTsKKyAgICBWYWx1ZSog
bXVsdGlwbGllZCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgTXVsLCBPcmlnaW4oKSwg
YXJnMCwgYXJnMSk7CisgICAgVmFsdWUqIGFkZGVkID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBBZGQsIE9yaWdpbigpLCBtdWx0aXBsaWVkLCBhcmcyKTsKKyAgICByb290LT5hcHBlbmRO
ZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBhZGRlZCk7CisKKyAgICBh
dXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworCisgICAgYXV0byB0ZXN0VmFsdWVzID0gaW50MzJP
cGVyYW5kcygpOworICAgIGZvciAoYXV0byBhIDogdGVzdFZhbHVlcykgeworICAgICAgICBmb3Ig
KGF1dG8gYiA6IHRlc3RWYWx1ZXMpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBjIDogdGVzdFZh
bHVlcykgeworICAgICAgICAgICAgICAgIENIRUNLKGludm9rZTxpbnQzMl90PigqY29kZSwgYS52
YWx1ZSwgYi52YWx1ZSwgYy52YWx1ZSkgPT0gYS52YWx1ZSAqIGIudmFsdWUgKyBjLnZhbHVlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0TXVsQWRkQXJn
c1JpZ2h0MzIoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3Qg
PSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYWx1ZSogYXJnMCA9IHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8QXJn
dW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOwor
ICAgIFZhbHVlKiBhcmcxID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3Jp
Z2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgVmFsdWUqIGFyZzIgPSByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjIpKTsKKyAgICBWYWx1ZSogbXVsdGlwbGllZCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgTXVsLCBPcmlnaW4oKSwgYXJnMSwgYXJnMik7CisgICAgVmFsdWUqIGFkZGVkID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBBZGQsIE9yaWdpbigpLCBhcmcwLCBtdWx0aXBs
aWVkKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLCBhZGRlZCk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworCisgICAg
YXV0byB0ZXN0VmFsdWVzID0gaW50MzJPcGVyYW5kcygpOworICAgIGZvciAoYXV0byBhIDogdGVz
dFZhbHVlcykgeworICAgICAgICBmb3IgKGF1dG8gYiA6IHRlc3RWYWx1ZXMpIHsKKyAgICAgICAg
ICAgIGZvciAoYXV0byBjIDogdGVzdFZhbHVlcykgeworICAgICAgICAgICAgICAgIENIRUNLKGlu
dm9rZTxpbnQzMl90PigqY29kZSwgYS52YWx1ZSwgYi52YWx1ZSwgYy52YWx1ZSkgPT0gYS52YWx1
ZSArIGIudmFsdWUgKiBjLnZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCB0ZXN0TXVsU3ViQXJnc0xlZnQoKQoreworICAgIFByb2NlZHVyZSBwcm9jOwor
ICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYWx1ZSogYXJn
MCA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICBWYWx1ZSogYXJnMSA9IHJvb3QtPmFwcGVuZE5ldzxB
cmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsK
KyAgICBWYWx1ZSogYXJnMiA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICBWYWx1ZSogbXVsdGlwbGll
ZCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgTXVsLCBPcmlnaW4oKSwgYXJnMCwgYXJn
MSk7CisgICAgVmFsdWUqIGFkZGVkID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTdWIs
IE9yaWdpbigpLCBtdWx0aXBsaWVkLCBhcmcyKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJv
bFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBhZGRlZCk7CisKKyAgICBhdXRvIGNvZGUg
PSBjb21waWxlKHByb2MpOworCisgICAgYXV0byB0ZXN0VmFsdWVzID0gaW50NjRPcGVyYW5kcygp
OworICAgIGZvciAoYXV0byBhIDogdGVzdFZhbHVlcykgeworICAgICAgICBmb3IgKGF1dG8gYiA6
IHRlc3RWYWx1ZXMpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBjIDogdGVzdFZhbHVlcykgewor
ICAgICAgICAgICAgICAgIENIRUNLKGludm9rZTxpbnQ2NF90PigqY29kZSwgYS52YWx1ZSwgYi52
YWx1ZSwgYy52YWx1ZSkgPT0gYS52YWx1ZSAqIGIudmFsdWUgLSBjLnZhbHVlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0TXVsU3ViQXJnc1JpZ2h0KCkK
K3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRC
bG9jaygpOworCisgICAgVmFsdWUqIGFyZzAgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgVmFsdWUq
IGFyZzEgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgVmFsdWUqIGFyZzIgPSByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
Mik7CisgICAgVmFsdWUqIG11bHRpcGxpZWQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IE11bCwgT3JpZ2luKCksIGFyZzEsIGFyZzIpOworICAgIFZhbHVlKiBhZGRlZCA9IHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4ocHJvYywgU3ViLCBPcmlnaW4oKSwgYXJnMCwgbXVsdGlwbGllZCk7Cisg
ICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwg
YWRkZWQpOworCisgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKworICAgIGF1dG8gdGVz
dFZhbHVlcyA9IGludDY0T3BlcmFuZHMoKTsKKyAgICBmb3IgKGF1dG8gYSA6IHRlc3RWYWx1ZXMp
IHsKKyAgICAgICAgZm9yIChhdXRvIGIgOiB0ZXN0VmFsdWVzKSB7CisgICAgICAgICAgICBmb3Ig
KGF1dG8gYyA6IHRlc3RWYWx1ZXMpIHsKKyAgICAgICAgICAgICAgICBDSEVDSyhpbnZva2U8aW50
NjRfdD4oKmNvZGUsIGEudmFsdWUsIGIudmFsdWUsIGMudmFsdWUpID09IGEudmFsdWUgLSBiLnZh
bHVlICogYy52YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3Zv
aWQgdGVzdE11bFN1YkFyZ3NMZWZ0MzIoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisKKyAgICBWYWx1ZSogYXJnMCA9IHJv
b3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICByb290
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMCkpOworICAgIFZhbHVlKiBhcmcxID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihw
cm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSk7CisgICAgVmFs
dWUqIGFyZzIgPSByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRydW5jLCBPcmlnaW4oKSwK
KyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjIpKTsKKyAgICBWYWx1ZSogbXVsdGlwbGllZCA9IHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgTXVsLCBPcmlnaW4oKSwgYXJnMCwgYXJnMSk7CisgICAg
VmFsdWUqIGFkZGVkID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTdWIsIE9yaWdpbigp
LCBtdWx0aXBsaWVkLCBhcmcyKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihw
cm9jLCBSZXR1cm4sIE9yaWdpbigpLCBhZGRlZCk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxl
KHByb2MpOworCisgICAgYXV0byB0ZXN0VmFsdWVzID0gaW50MzJPcGVyYW5kcygpOworICAgIGZv
ciAoYXV0byBhIDogdGVzdFZhbHVlcykgeworICAgICAgICBmb3IgKGF1dG8gYiA6IHRlc3RWYWx1
ZXMpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBjIDogdGVzdFZhbHVlcykgeworICAgICAgICAg
ICAgICAgIENIRUNLKGludm9rZTxpbnQzMl90PigqY29kZSwgYS52YWx1ZSwgYi52YWx1ZSwgYy52
YWx1ZSkgPT0gYS52YWx1ZSAqIGIudmFsdWUgLSBjLnZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0TXVsU3ViQXJnc1JpZ2h0MzIoKQoreworICAg
IFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7
CisKKyAgICBWYWx1ZSogYXJnMCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgVHJ1bmMs
IE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworICAgIFZhbHVlKiBhcmcxID0g
cm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIxKSk7CisgICAgVmFsdWUqIGFyZzIgPSByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpKTsKKyAgICBW
YWx1ZSogbXVsdGlwbGllZCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgTXVsLCBPcmln
aW4oKSwgYXJnMSwgYXJnMik7CisgICAgVmFsdWUqIGFkZGVkID0gcm9vdC0+YXBwZW5kTmV3PFZh
bHVlPihwcm9jLCBTdWIsIE9yaWdpbigpLCBhcmcwLCBtdWx0aXBsaWVkKTsKKyAgICByb290LT5h
cHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBhZGRlZCk7CisK
KyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHByb2MpOworCisgICAgYXV0byB0ZXN0VmFsdWVzID0g
aW50MzJPcGVyYW5kcygpOworICAgIGZvciAoYXV0byBhIDogdGVzdFZhbHVlcykgeworICAgICAg
ICBmb3IgKGF1dG8gYiA6IHRlc3RWYWx1ZXMpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byBjIDog
dGVzdFZhbHVlcykgeworICAgICAgICAgICAgICAgIENIRUNLKGludm9rZTxpbnQzMl90PigqY29k
ZSwgYS52YWx1ZSwgYi52YWx1ZSwgYy52YWx1ZSkgPT0gYS52YWx1ZSAtIGIudmFsdWUgKiBjLnZh
bHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCB0ZXN0TXVs
TmVnQXJncygpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9
IHByb2MuYWRkQmxvY2soKTsKKworICAgIFZhbHVlKiBhcmcwID0gcm9vdC0+YXBwZW5kTmV3PEFy
Z3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwor
ICAgIFZhbHVlKiBhcmcxID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIFZhbHVlKiBtdWx0aXBsaWVk
ID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBNdWwsIE9yaWdpbigpLCBhcmcwLCBhcmcx
KTsKKyAgICBWYWx1ZSogemVybyA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDY0VmFsdWU+KHByb2Ms
IE9yaWdpbigpLCAwKTsKKyAgICBWYWx1ZSogYWRkZWQgPSByb290LT5hcHBlbmROZXc8VmFsdWU+
KHByb2MsIFN1YiwgT3JpZ2luKCksIHplcm8sIG11bHRpcGxpZWQpOworICAgIHJvb3QtPmFwcGVu
ZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIGFkZGVkKTsKKworICAg
IGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisKKyAgICBhdXRvIHRlc3RWYWx1ZXMgPSBpbnQ2
NE9wZXJhbmRzKCk7CisgICAgZm9yIChhdXRvIGEgOiB0ZXN0VmFsdWVzKSB7CisgICAgICAgIGZv
ciAoYXV0byBiIDogdGVzdFZhbHVlcykgeworICAgICAgICAgICAgQ0hFQ0soaW52b2tlPGludDY0
X3Q+KCpjb2RlLCBhLnZhbHVlLCBiLnZhbHVlKSA9PSAtKGEudmFsdWUgKiBiLnZhbHVlKSk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgdGVzdE11bE5lZ0FyZ3MzMigpCit7CisgICAgUHJv
Y2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKwor
ICAgIFZhbHVlKiBhcmcwID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBUcnVuYywgT3Jp
Z2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSk7CisgICAgVmFsdWUqIGFyZzEgPSByb290
LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjEpKTsKKyAgICBWYWx1ZSogbXVsdGlwbGllZCA9IHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4ocHJvYywgTXVsLCBPcmlnaW4oKSwgYXJnMCwgYXJnMSk7CisgICAgVmFsdWUqIHplcm8gPSBy
b290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCk7CisgICAgVmFs
dWUqIGFkZGVkID0gcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTdWIsIE9yaWdpbigpLCB6
ZXJvLCBtdWx0aXBsaWVkKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9j
LCBSZXR1cm4sIE9yaWdpbigpLCBhZGRlZCk7CisKKyAgICBhdXRvIGNvZGUgPSBjb21waWxlKHBy
b2MpOworCisgICAgYXV0byB0ZXN0VmFsdWVzID0gaW50MzJPcGVyYW5kcygpOworICAgIGZvciAo
YXV0byBhIDogdGVzdFZhbHVlcykgeworICAgICAgICBmb3IgKGF1dG8gYiA6IHRlc3RWYWx1ZXMp
IHsKKyAgICAgICAgICAgIENIRUNLKGludm9rZTxpbnQzMl90PigqY29kZSwgYS52YWx1ZSwgYi52
YWx1ZSkgPT0gLShhLnZhbHVlICogYi52YWx1ZSkpOworICAgICAgICB9CisgICAgfQorfQorCiB2
b2lkIHRlc3RNdWxBcmdEb3VibGUoZG91YmxlIGEpCiB7CiAgICAgUHJvY2VkdXJlIHByb2M7CkBA
IC0xMTMzMyw2ICsxMTU4MywxNiBAQCB2b2lkIHJ1bihjb25zdCBjaGFyKiBmaWx0ZXIpCiAgICAg
UlVOKHRlc3RNdWxBcmdzMzIoMSwgMSkpOwogICAgIFJVTih0ZXN0TXVsQXJnczMyKDEsIDIpKTsK
ICAgICBSVU4odGVzdE11bExvYWRUd2ljZSgpKTsKKyAgICBSVU4odGVzdE11bEFkZEFyZ3NMZWZ0
KCkpOworICAgIFJVTih0ZXN0TXVsQWRkQXJnc1JpZ2h0KCkpOworICAgIFJVTih0ZXN0TXVsQWRk
QXJnc0xlZnQzMigpKTsKKyAgICBSVU4odGVzdE11bEFkZEFyZ3NSaWdodDMyKCkpOworICAgIFJV
Tih0ZXN0TXVsU3ViQXJnc0xlZnQoKSk7CisgICAgUlVOKHRlc3RNdWxTdWJBcmdzUmlnaHQoKSk7
CisgICAgUlVOKHRlc3RNdWxTdWJBcmdzTGVmdDMyKCkpOworICAgIFJVTih0ZXN0TXVsU3ViQXJn
c1JpZ2h0MzIoKSk7CisgICAgUlVOKHRlc3RNdWxOZWdBcmdzKCkpOworICAgIFJVTih0ZXN0TXVs
TmVnQXJnczMyKCkpOwogCiAgICAgUlVOX1VOQVJZKHRlc3RNdWxBcmdEb3VibGUsIGZsb2F0aW5n
UG9pbnRPcGVyYW5kczxkb3VibGU+KCkpOwogICAgIFJVTl9CSU5BUlkodGVzdE11bEFyZ3NEb3Vi
bGUsIGZsb2F0aW5nUG9pbnRPcGVyYW5kczxkb3VibGU+KCksIGZsb2F0aW5nUG9pbnRPcGVyYW5k
czxkb3VibGU+KCkpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>