<?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>142993</bug_id>
          
          <creation_ts>2015-03-23 17:05:25 -0700</creation_ts>
          <short_desc>Use JITCompilationCanFail in more places, and make the fail path of JITCompilationMustSucceed a crash instead of attempting GC</short_desc>
          <delta_ts>2015-03-25 18:29:10 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>kling</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1079511</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-03-23 17:05:25 -0700</bug_when>
    <thetext>Because VM::releaseExecutableMemory() invokes the GC, we can sometimes get a failed RELEASE_ASSERT which is expecting to GC to be deferred.  Here&apos;s an example of such a crash stack trace:

Thread 0 Crashed:
0   JavaScriptCore                	0x000000018362958c WTFCrash + 72 (Assertions.cpp:329)
1   JavaScriptCore                	0x0000000183629580 WTFCrash + 60 (Assertions.cpp:267)
2   JavaScriptCore                	0x00000001834b498c JSC::Heap::collect(JSC::HeapOperation) + 820 (Heap.cpp:987)
3   JavaScriptCore                	0x000000018320f4d0 JSC::Heap::collectAllGarbage() + 44 (Heap.cpp:958)
4   JavaScriptCore                	0x0000000183619144 JSC::VM::releaseExecutableMemory() + 864 (VM.cpp:599)
5   JavaScriptCore                	0x000000018321bb74 JSC::ExecutableAllocator::allocate(JSC::VM&amp;, unsigned long, void*, JSC::JITCompilationEffort) + 88 (ExecutableAllocatorFixedVMPool.cpp:170)
6   JavaScriptCore                	0x000000018357746c JSC::LinkBuffer::allocate(unsigned long, void*, JSC::JITCompilationEffort) + 92 (LinkBuffer.cpp:200)
7   JavaScriptCore                	0x0000000183577530 void JSC::LinkBuffer::copyCompactAndLinkCode&lt;unsigned int&gt;(JSC::MacroAssembler&amp;, void*, JSC::JITCompilationEffort) + 48 (LinkBuffer.cpp:93)
8   JavaScriptCore                	0x00000001835f9700 JSC::generateByIdStub(JSC::ExecState*, JSC::ByIdStubKind, JSC::Identifier const&amp;, JSC::FunctionPtr, JSC::StructureStubInfo&amp;, JSC::StructureChain*, unsigned long, int, JSC::Structure*, bool, JSC::WatchpointSet*, JSC::CodeLocationLabel, JSC::CodeLocationLabel, WTF::RefPtr&lt;JSC::JITStubRoutine&gt;&amp;) + 4076 (LinkBuffer.h:95)
9   JavaScriptCore                	0x00000001835f32c4 JSC::buildGetByIDList(JSC::ExecState*, JSC::JSValue, JSC::Identifier const&amp;, JSC::PropertySlot const&amp;, JSC::StructureStubInfo&amp;) + 960 (Repatch.cpp:832)
10  JavaScriptCore                	0x00000001832ca1f4 operationGetByIdBuildList + 1244 (JITOperations.cpp:147)
11  ???                           	0x00000001416b323c 0 + 5392511548
12  JavaScriptCore                	0x0000000183582974 llint_entry + 24564
13  ???                           	0x0000000141720450 0 + 5392958544
14  ???                           	0x0000000141ab3010 0 + 5396705296</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079512</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-03-23 17:06:33 -0700</bug_when>
    <thetext>&lt;rdar://problem/20246846&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079522</commentid>
    <comment_count>2</comment_count>
      <attachid>249303</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-03-23 17:34:03 -0700</bug_when>
    <thetext>Created attachment 249303
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079532</commentid>
    <comment_count>3</comment_count>
      <attachid>249303</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-23 18:11:18 -0700</bug_when>
    <thetext>Comment on attachment 249303
the patch.

I&apos;m strongly opposed to this solution.  releaseExecutableMemory() should not be the mechanism by which we handle out-of-memory situations in the concurrent compilation thread.  Please don&apos;t do this, and please solve the fundamental problem instead: the FTL should abort when it runs out of memory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079533</commentid>
    <comment_count>4</comment_count>
      <attachid>249303</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-23 18:36:43 -0700</bug_when>
    <thetext>Comment on attachment 249303
the patch.

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

&gt; Source/JavaScriptCore/runtime/VM.cpp:-535
&gt; -    heap.collectAllGarbage();

The way memory management for JITCode/CodeBlock works is that you need to GC to actually free memory.  So, I suspect that you&apos;ve just completely broken this functionality.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079996</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-25 11:37:16 -0700</bug_when>
    <thetext>*** Bug 113620 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079999</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-25 11:42:49 -0700</bug_when>
    <thetext>By my audit, we had four kinds of callers into executable memory:

1) Those that already use JITCompilationCanFail.  Hooray for those.  I believe there were only two: baseline JIT and DFG JIT.

2) Those that use JITCompilationMustSucceed, cannot easily use JITCompilationCanFail (for example, host call thunk), and can tolerate a GC.

3) Those that use JITCompilationMustSucceed, cannot use JITCompilationCanFail at all (for example, OSR exit generation), and cannot tolerate a GC (GCing during OSR exit is super dangerous).

4) Those that uses JITCompilationMustSucceed, but could trivially have used JITCompilationCanFail, and wouldn&apos;t have been able to tolerate GC anyway (for example, repatching).

(2) is the only case where it makes sense to use releaseExecutableMemory() as a fall-back for JIT allocation failing.  I believe that (2) is almost the null set.  It seems like host call thunk generation can almost generate GC, but for that, clearly the better solution is to do something else other than generating a thunk - the fact that we generate thunks for each native function is an optimization.  I think that the only case of (2) is host call generation; all of the others get called from gnarly places where a GC would be a disaster.  Also, (2) happens mostly at start-up so having a fallback path makes relatively little sense.

So, the right solution is:

- Make all of the cases in (2) and (3) simply crash on memory allocation failure.

- Make all of the cases in (4) use JITCompilationCanFail.

I will implement this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080000</commentid>
    <comment_count>7</comment_count>
      <attachid>249418</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-25 11:46:13 -0700</bug_when>
    <thetext>Created attachment 249418
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080002</commentid>
    <comment_count>8</comment_count>
      <attachid>249418</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-03-25 11:55:28 -0700</bug_when>
    <thetext>Comment on attachment 249418
the patch

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

r=me

&gt; Source/JavaScriptCore/ftl/FTLCompile.cpp:68
&gt; +        // Fake an allocation, since LLVM cannot handle hailures in the memory manager.

failures</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080005</commentid>
    <comment_count>9</comment_count>
      <attachid>249418</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-03-25 12:00:48 -0700</bug_when>
    <thetext>Comment on attachment 249418
the patch

Currently LinkBuffer&apos;s constructor specifies a default value for the effort arg to be JITCompilationMustSucceed.  I recommend removing this default value especially since that is not the effort value we want used in most cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080007</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-25 12:04:42 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Comment on attachment 249418 [details]
&gt; the patch
&gt; 
&gt; Currently LinkBuffer&apos;s constructor specifies a default value for the effort
&gt; arg to be JITCompilationMustSucceed.  I recommend removing this default
&gt; value especially since that is not the effort value we want used in most
&gt; cases.

It depends on the definition of &quot;most&quot;.  The most frequent callers to LinkBuffer should use JITCompilationCanFail.  But most of the callsites in our code base do use MustSucceed, and that&apos;s fine - because most of the callsites account for a tiny fraction of run-time calls.  For example, we have tons of thunk generators, and each one will execute at most once during a VM&apos;s lifetime.

So, I think that the default parameter actually sort of makes sense.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080016</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-25 12:51:08 -0700</bug_when>
    <thetext>This appears perf-neutral.


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on dethklok (MacBookPro9,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quartary/OpenSource/WebKitBuild/Release/jsc (r181966)
&quot;FixExecAlloc&quot; at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc (r181966)

Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc() between sample measurements.
Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level
timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                        TipOfTree                FixExecAlloc                                   
SunSpider:
   3d-cube                                            4.9319+-0.0734     ?      4.9397+-0.1048        ?
   3d-morph                                           5.6198+-0.0524     ?      5.7629+-0.2162        ? might be 1.0255x slower
   3d-raytrace                                        6.4594+-0.1480            6.4092+-0.1626        
   access-binary-trees                                2.2889+-0.0645            2.2853+-0.1327        
   access-fannkuch                                    6.3670+-0.3331            6.0253+-0.0914          might be 1.0567x faster
   access-nbody                                       2.8452+-0.0477     ?      2.8610+-0.0630        ?
   access-nsieve                                      3.5765+-0.1689            3.3333+-0.0793          might be 1.0729x faster
   bitops-3bit-bits-in-byte                           1.5643+-0.0264            1.5485+-0.0215          might be 1.0102x faster
   bitops-bits-in-byte                                3.5659+-0.1003     ?      3.5864+-0.0567        ?
   bitops-bitwise-and                                 2.1749+-0.0689            2.1216+-0.0104          might be 1.0251x faster
   bitops-nsieve-bits                                 3.6430+-0.1061            3.6253+-0.0993        
   controlflow-recursive                              2.1648+-0.0365            2.1261+-0.0215          might be 1.0182x faster
   crypto-aes                                         4.2881+-0.2280            4.1771+-0.0741          might be 1.0266x faster
   crypto-md5                                         2.4570+-0.0790     ?      2.4729+-0.1069        ?
   crypto-sha1                                        2.8170+-0.3020            2.5580+-0.1951          might be 1.1012x faster
   date-format-tofte                                  9.7291+-0.4471            9.6125+-0.0638          might be 1.0121x faster
   date-format-xparb                                  5.4394+-0.1680            5.3288+-0.1607          might be 1.0208x faster
   math-cordic                                        3.1342+-0.0284     ?      3.2190+-0.1028        ? might be 1.0270x slower
   math-partial-sums                                  5.1195+-0.1417     ?      5.1265+-0.1279        ?
   math-spectral-norm                                 1.9343+-0.0517            1.9150+-0.0618          might be 1.0101x faster
   regexp-dna                                         7.7383+-1.1836     ?      8.2639+-1.5164        ? might be 1.0679x slower
   string-base64                                      5.1104+-0.9128            4.6278+-0.3290          might be 1.1043x faster
   string-fasta                                       6.7598+-0.0792            6.7476+-0.1841        
   string-tagcloud                                    9.8566+-0.4897            9.5901+-0.2734          might be 1.0278x faster
   string-unpack-code                                19.6764+-0.3263           19.6491+-0.9980        
   string-validate-input                              5.0850+-0.1595            4.9677+-0.1143          might be 1.0236x faster

   &lt;arithmetic&gt;                                       5.1672+-0.0668            5.1108+-0.0656          might be 1.0110x faster

                                                        TipOfTree                FixExecAlloc                                   
LongSpider:
   3d-cube                                         1107.0985+-21.9014        1102.7646+-27.1482       
   3d-morph                                        1531.4844+-6.1071     ?   1534.5778+-11.1205       ?
   3d-raytrace                                      742.7244+-5.0604          736.4731+-13.9746       
   access-binary-trees                             1017.4917+-6.4769     ?   1018.3831+-9.6025        ?
   access-fannkuch                                  342.2212+-13.1969    ?    352.6549+-7.5815        ? might be 1.0305x slower
   access-nbody                                     612.5606+-2.0086     ?    616.7539+-2.9707        ?
   access-nsieve                                    854.5521+-9.4090     ?    869.9028+-10.7551       ? might be 1.0180x slower
   bitops-3bit-bits-in-byte                          44.9028+-1.5674     ?     44.9283+-1.4392        ?
   bitops-bits-in-byte                              105.3486+-1.7166     ?    105.4038+-2.8395        ?
   bitops-nsieve-bits                               686.6139+-2.9120     !    693.5190+-2.4885        ! definitely 1.0101x slower
   controlflow-recursive                            504.3485+-3.6632          503.0972+-1.7116        
   crypto-aes                                       722.2733+-9.5182          716.4621+-6.6964        
   crypto-md5                                       545.5156+-8.8915     ?    556.6328+-6.3281        ? might be 1.0204x slower
   crypto-sha1                                      602.9427+-4.6272          599.1253+-6.9707        
   date-format-tofte                                784.6681+-16.8930         783.8028+-26.7819       
   date-format-xparb                                737.7696+-29.2975    ?    744.3390+-21.7256       ?
   math-cordic                                      592.8127+-2.1429          590.9569+-0.8593        
   math-partial-sums                                508.7074+-9.6094          506.2525+-3.8504        
   math-spectral-norm                               567.7439+-4.9659     ?    576.1329+-22.2934       ? might be 1.0148x slower
   string-base64                                    363.5297+-4.7134     ?    367.6194+-4.4099        ? might be 1.0113x slower
   string-fasta                                     450.6478+-5.2655          450.0325+-4.7630        
   string-tagcloud                                  221.5258+-4.8599          215.8816+-1.9803          might be 1.0261x faster

   &lt;geometric&gt;                                      506.7659+-1.7870     ?    508.1018+-2.0467        ? might be 1.0026x slower

                                                        TipOfTree                FixExecAlloc                                   
V8Spider:
   crypto                                            54.7018+-2.0078     ?     55.2752+-1.5934        ? might be 1.0105x slower
   deltablue                                         96.5356+-4.4522           96.3319+-5.5536        
   earley-boyer                                      43.4984+-0.8368           43.2498+-2.3670        
   raytrace                                          37.7411+-2.5280     ?     38.8235+-1.0856        ? might be 1.0287x slower
   regexp                                            67.8561+-2.7434     ?     68.1401+-2.2491        ?
   richards                                          81.0260+-1.2110           79.2574+-1.6370          might be 1.0223x faster
   splay                                             38.7615+-1.5433     ?     38.8744+-1.3220        ?

   &lt;geometric&gt;                                       56.5089+-0.6930     ?     56.6465+-1.0952        ? might be 1.0024x slower

                                                        TipOfTree                FixExecAlloc                                   
Octane:
   encrypt                                           0.20350+-0.00283          0.20337+-0.00073       
   decrypt                                           3.61993+-0.08779          3.61757+-0.10049       
   deltablue                                x2       0.20969+-0.00283          0.20754+-0.00182         might be 1.0104x faster
   earley                                            0.70394+-0.01258          0.70003+-0.00590       
   boyer                                             6.42713+-0.04838          6.42248+-0.02234       
   navier-stokes                            x2       5.23184+-0.05032          5.19142+-0.01106       
   raytrace                                 x2       1.21642+-0.03220    ?     1.25095+-0.05580       ? might be 1.0284x slower
   richards                                 x2       0.12274+-0.00179          0.12232+-0.00193       
   splay                                    x2       0.38260+-0.00358    ?     0.38859+-0.00298       ? might be 1.0157x slower
   regexp                                   x2      33.26042+-0.25913         33.03948+-0.43746       
   pdfjs                                    x2      44.89037+-0.45654         44.71344+-0.61589       
   mandreel                                 x2      49.95608+-0.38229    ?    50.48386+-0.78708       ? might be 1.0106x slower
   gbemu                                    x2      39.85758+-0.41541         39.70704+-0.84669       
   closure                                           0.56890+-0.00842    ^     0.55247+-0.00302       ^ definitely 1.0297x faster
   jquery                                            7.34571+-0.07948    ^     7.12053+-0.07847       ^ definitely 1.0316x faster
   box2d                                    x2      12.80929+-0.19253         12.80710+-0.11518       
   zlib                                     x2     392.15609+-0.90749        391.44181+-14.81357      
   typescript                               x2     827.75684+-15.77111       816.50655+-18.98050        might be 1.0138x faster

   &lt;geometric&gt;                                       6.77185+-0.02649          6.75719+-0.04617         might be 1.0022x faster

                                                        TipOfTree                FixExecAlloc                                   
Kraken:
   ai-astar                                          265.440+-2.773      ?     267.207+-9.972         ?
   audio-beat-detection                              106.406+-0.879            105.393+-1.019         
   audio-dft                                         149.783+-3.003      ?     150.152+-2.564         ?
   audio-fft                                          80.333+-3.186      ?      84.381+-5.094         ? might be 1.0504x slower
   audio-oscillator                                  209.691+-2.762            208.801+-2.428         
   imaging-darkroom                                  105.416+-1.681            104.447+-1.212         
   imaging-desaturate                                 65.042+-3.280             62.452+-0.598           might be 1.0415x faster
   imaging-gaussian-blur                             113.789+-1.924      ?     113.969+-3.071         ?
   json-parse-financial                               46.366+-1.602             45.578+-1.157           might be 1.0173x faster
   json-stringify-tinderbox                           57.344+-1.766             57.185+-1.735         
   stanford-crypto-aes                                63.524+-0.979             62.677+-2.276           might be 1.0135x faster
   stanford-crypto-ccm                                50.745+-0.730      ?      51.688+-5.272         ? might be 1.0186x slower
   stanford-crypto-pbkdf2                            168.085+-5.177      ?     169.615+-3.104         ?
   stanford-crypto-sha256-iterative                   55.515+-1.464             54.626+-1.293           might be 1.0163x faster

   &lt;arithmetic&gt;                                      109.820+-0.704      ?     109.869+-0.617         ? might be 1.0005x slower

                                                        TipOfTree                FixExecAlloc                                   
JSRegress:
   abs-boolean                                        2.6001+-0.0109     ?      2.6163+-0.0242        ?
   adapt-to-double-divide                            16.8252+-0.3291           16.6864+-0.2971        
   aliased-arguments-getbyval                         0.8793+-0.0438            0.8448+-0.0306          might be 1.0408x faster
   allocate-big-object                                2.6615+-0.1660     ?      2.7046+-0.0963        ? might be 1.0162x slower
   arguments-out-of-bounds                           18.8714+-1.5317           17.7003+-1.5329          might be 1.0662x faster
   arity-mismatch-inlining                            0.8039+-0.0132     ?      0.8192+-0.0453        ? might be 1.0190x slower
   array-access-polymorphic-structure                 6.7362+-0.2675            6.7218+-0.3140        
   array-nonarray-polymorhpic-access                 35.2811+-0.5318           34.5487+-1.6480          might be 1.0212x faster
   array-prototype-every                             88.4610+-2.6864           87.9312+-1.7839        
   array-prototype-forEach                           84.9402+-1.7821     ?     86.3113+-1.2559        ? might be 1.0161x slower
   array-prototype-map                               96.1216+-2.5234           95.1988+-0.8620        
   array-prototype-some                              86.6326+-2.0999     ?     87.5293+-1.4305        ? might be 1.0104x slower
   array-splice-contiguous                           43.3032+-1.5979           42.2274+-1.8089          might be 1.0255x faster
   array-with-double-add                              4.0852+-0.0294     ?      4.1915+-0.2977        ? might be 1.0260x slower
   array-with-double-increment                        3.1829+-0.0720     ?      3.1855+-0.0525        ?
   array-with-double-mul-add                          4.9821+-0.0526     ?      5.0000+-0.0223        ?
   array-with-double-sum                              3.2347+-0.0298     ?      3.2764+-0.0530        ? might be 1.0129x slower
   array-with-int32-add-sub                           6.8422+-0.3269            6.7272+-0.0500          might be 1.0171x faster
   array-with-int32-or-double-sum                     3.3193+-0.0343            3.3141+-0.0406        
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     37.7008+-1.9845           34.4089+-2.0241          might be 1.0957x faster
   ArrayBuffer-DataView-alloc-long-lived             15.8513+-2.9254           15.1808+-1.7999          might be 1.0442x faster
   ArrayBuffer-Int32Array-byteOffset                  3.5073+-0.1269     ?      3.6113+-0.2099        ? might be 1.0296x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     35.0586+-1.4417           33.7565+-2.2925          might be 1.0386x faster
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     25.7500+-1.9579           25.2627+-2.2489          might be 1.0193x faster
   ArrayBuffer-Int8Array-alloc-long-lived            13.8516+-0.8823     ?     14.0624+-1.5517        ? might be 1.0152x slower
   ArrayBuffer-Int8Array-alloc                       12.7309+-1.8049           11.3566+-1.3511          might be 1.1210x faster
   asmjs_bool_bug                                     7.6406+-0.1827     ?      7.7068+-0.1871        ?
   assign-custom-setter-polymorphic                   3.2160+-0.1628     ?      3.4524+-0.4734        ? might be 1.0735x slower
   assign-custom-setter                               4.5000+-0.3114            4.3113+-0.0833          might be 1.0438x faster
   basic-set                                          8.4078+-0.3843     ?      8.6296+-0.5843        ? might be 1.0264x slower
   big-int-mul                                        3.9349+-0.0333     ?      3.9577+-0.0482        ?
   boolean-test                                       3.0147+-0.0169     ?      3.1200+-0.1467        ? might be 1.0349x slower
   branch-fold                                        3.7098+-0.1055            3.6709+-0.0476          might be 1.0106x faster
   by-val-generic                                     8.1844+-0.1699     ?      8.2073+-0.3252        ?
   call-spread-apply                                 16.7043+-0.4899           16.2773+-0.1556          might be 1.0262x faster
   call-spread-call                                   5.9163+-0.0585     ?      5.9746+-0.2188        ?
   captured-assignments                               0.4575+-0.0138            0.4538+-0.0118        
   cast-int-to-double                                 5.3701+-0.2090            5.3209+-0.1810        
   cell-argument                                      8.7662+-0.3440            8.6962+-0.6026        
   cfg-simplify                                       2.9015+-0.1057            2.8630+-0.1234          might be 1.0135x faster
   chain-getter-access                               10.2188+-0.3662           10.0915+-0.2299          might be 1.0126x faster
   cmpeq-obj-to-obj-other                            11.3450+-0.9296           11.3135+-1.0458        
   constant-test                                      4.9307+-0.0262            4.9301+-0.0370        
   DataView-custom-properties                        40.8457+-2.4803           38.5888+-1.9239          might be 1.0585x faster
   delay-tear-off-arguments-strictmode               22.6086+-2.4087     ?     24.8180+-2.3875        ? might be 1.0977x slower
   deltablue-varargs                                181.9028+-2.1807          179.0732+-1.0747          might be 1.0158x faster
   destructuring-arguments                            5.2249+-0.0787            5.1828+-0.0320        
   destructuring-swap                                 5.0962+-0.1805            5.0436+-0.0498          might be 1.0104x faster
   direct-arguments-getbyval                          0.9191+-0.0685            0.9077+-0.0527          might be 1.0126x faster
   div-boolean-double                                 5.1813+-0.0181            5.1773+-0.0134        
   div-boolean                                        7.7912+-0.0522            7.7848+-0.0858        
   double-get-by-val-out-of-bounds                    4.3716+-0.0374     ?      4.4109+-0.0908        ?
   double-pollution-getbyval                          8.9212+-0.2406            8.8200+-0.0334          might be 1.0115x faster
   double-pollution-putbyoffset                       4.0947+-0.0588            4.0822+-0.0881        
   double-to-int32-typed-array-no-inline              2.2194+-0.0599            2.2107+-0.0357        
   double-to-int32-typed-array                        1.9718+-0.0612            1.9576+-0.1037        
   double-to-uint32-typed-array-no-inline             2.3113+-0.0329            2.3084+-0.0722        
   double-to-uint32-typed-array                       2.0066+-0.0741            1.9816+-0.0337          might be 1.0126x faster
   elidable-new-object-dag                           43.5015+-1.2526     ?     44.3413+-1.2554        ? might be 1.0193x slower
   elidable-new-object-roflcopter                    45.9820+-0.6692     ?     46.6745+-0.9096        ? might be 1.0151x slower
   elidable-new-object-then-call                     41.3115+-2.5009     ?     41.4688+-1.8455        ?
   elidable-new-object-tree                          45.6320+-1.7253           45.4687+-0.5906        
   empty-string-plus-int                              5.6075+-0.0826     ^      5.3767+-0.1031        ^ definitely 1.0429x faster
   emscripten-cube2hash                              38.9145+-1.9471     ?     39.7382+-1.7880        ? might be 1.0212x slower
   exit-length-on-plain-object                       15.0810+-2.4819           14.7537+-1.6237          might be 1.0222x faster
   external-arguments-getbyval                        1.4170+-0.1605            1.3916+-0.0921          might be 1.0183x faster
   external-arguments-putbyval                        2.3378+-0.2055     ^      2.0307+-0.0262        ^ definitely 1.1512x faster
   fixed-typed-array-storage-var-index                1.2210+-0.0234     ?      1.2402+-0.0836        ? might be 1.0157x slower
   fixed-typed-array-storage                          0.9661+-0.1095            0.8684+-0.0163          might be 1.1125x faster
   Float32Array-matrix-mult                           4.4649+-0.1995            4.2876+-0.0401          might be 1.0414x faster
   Float32Array-to-Float64Array-set                  57.1182+-1.3049     ?     60.0044+-1.9564        ? might be 1.0505x slower
   Float64Array-alloc-long-lived                     73.9788+-1.7970           73.3596+-1.5214        
   Float64Array-to-Int16Array-set                    69.3556+-2.0624     !     73.0426+-1.2061        ! definitely 1.0532x slower
   fold-double-to-int                                16.1321+-1.3511           15.4978+-0.5525          might be 1.0409x faster
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.2229+-1.2114            9.9859+-1.3522          might be 1.0237x faster
   fold-get-by-id-to-multi-get-by-offset             10.2367+-0.8585     ?     10.6207+-1.5431        ? might be 1.0375x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                      9.1275+-1.0622     ?      9.3224+-1.4274        ? might be 1.0213x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      8.7192+-0.7820            8.5640+-0.2596          might be 1.0181x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      8.2083+-0.6042     ?      8.5467+-0.8461        ? might be 1.0412x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                      4.5204+-0.1330     ?      4.5365+-0.9892        ?
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      9.1915+-0.6396            9.1101+-0.3903        
   fold-put-by-id-to-multi-put-by-offset              9.9001+-0.8751            9.1758+-0.2511          might be 1.0789x faster
   fold-put-structure                                 4.5439+-0.7418     ?      5.1799+-1.2083        ? might be 1.1400x slower
   for-of-iterate-array-entries                       4.6376+-0.3262            4.5562+-0.1212          might be 1.0179x faster
   for-of-iterate-array-keys                          3.7269+-0.0596     ?      3.7598+-0.0745        ?
   for-of-iterate-array-values                        3.6637+-0.1188     ?      3.6764+-0.0669        ?
   fround                                            20.7821+-0.5774           20.1875+-0.5640          might be 1.0295x faster
   ftl-library-inlining-dataview                     78.5689+-2.0691     ?     80.0253+-2.1779        ? might be 1.0185x slower
   ftl-library-inlining                              74.7209+-20.5364          67.2917+-0.7424          might be 1.1104x faster
   function-dot-apply                                 1.5219+-0.0479            1.5073+-0.0572        
   function-test                                      3.3574+-0.1106            3.3470+-0.0463        
   function-with-eval                               133.9686+-5.8383          131.3882+-4.3393          might be 1.0196x faster
   gcse-poly-get-less-obvious                        18.0733+-0.1385     ?     20.2671+-2.1002        ? might be 1.1214x slower
   gcse-poly-get                                     21.7969+-1.4711     ?     23.1963+-1.6123        ? might be 1.0642x slower
   gcse                                               4.2985+-0.0292     ?      4.3485+-0.0800        ? might be 1.0116x slower
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.7321+-0.0332     ?      2.7941+-0.0769        ? might be 1.0227x slower
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.0373+-0.1054     ?      6.1720+-0.4026        ? might be 1.0223x slower
   get-by-id-chain-from-try-block                     8.3572+-0.8785            8.1165+-0.6143          might be 1.0297x faster
   get-by-id-check-structure-elimination              5.1890+-0.1695            5.0483+-0.0560          might be 1.0279x faster
   get-by-id-proto-or-self                           17.6200+-0.8053     ?     17.8766+-1.1641        ? might be 1.0146x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.9555+-0.1261            2.8808+-0.0229          might be 1.0259x faster
   get-by-id-self-or-proto                           17.9656+-1.2950     ?     18.5428+-0.9762        ? might be 1.0321x slower
   get-by-val-out-of-bounds                           4.4972+-0.4015            4.3145+-0.1034          might be 1.0423x faster
   get_callee_monomorphic                             3.5563+-0.0973     ?      3.5731+-0.0486        ?
   get_callee_polymorphic                             3.7740+-0.2129            3.7343+-0.1102          might be 1.0106x faster
   getter-no-activation                               4.4709+-0.5630     ?      4.8139+-0.7110        ? might be 1.0767x slower
   getter-richards                                  132.7810+-8.4755          132.7703+-3.5857        
   getter                                             5.1135+-0.0861            5.0576+-0.0575          might be 1.0111x faster
   global-var-const-infer-fire-from-opt               0.9028+-0.0874            0.8917+-0.0567          might be 1.0124x faster
   global-var-const-infer                             0.8785+-0.1330            0.8249+-0.1141          might be 1.0650x faster
   HashMap-put-get-iterate-keys                      26.8897+-0.9398           26.1495+-0.3754          might be 1.0283x faster
   HashMap-put-get-iterate                           26.4159+-0.7635           26.2792+-0.6873        
   HashMap-string-put-get-iterate                    28.1104+-1.3329           27.5844+-1.4143          might be 1.0191x faster
   hoist-make-rope                                   11.8280+-0.4368           11.8089+-1.1155        
   hoist-poly-check-structure-effectful-loop   
                                                      5.1324+-0.2116            4.9956+-0.1337          might be 1.0274x faster
   hoist-poly-check-structure                         3.6918+-0.0345     ?      3.6957+-0.0303        ?
   imul-double-only                                   8.3996+-0.1711     ?      8.4561+-0.5478        ?
   imul-int-only                                     10.0160+-0.6223     ?     10.0555+-0.6717        ?
   imul-mixed                                         8.2393+-0.4161     ?      8.2421+-0.3705        ?
   in-four-cases                                     18.7657+-0.1771     ?     19.4075+-1.5009        ? might be 1.0342x slower
   in-one-case-false                                  9.9202+-0.3847     ?      9.9235+-0.3589        ?
   in-one-case-true                                  10.2119+-0.8606            9.9176+-0.3505          might be 1.0297x faster
   in-two-cases                                      10.2616+-0.3705     ?     10.3212+-0.3963        ?
   indexed-properties-in-objects                      2.8962+-0.0155     !      2.9405+-0.0246        ! definitely 1.0153x slower
   infer-closure-const-then-mov-no-inline             3.6370+-0.0337     ?      3.6707+-0.0515        ?
   infer-closure-const-then-mov                      19.4253+-1.1613           19.2017+-1.2744          might be 1.0116x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     11.6715+-0.1486           11.5420+-0.1501          might be 1.0112x faster
   infer-closure-const-then-put-to-scope             22.5467+-1.0751     ?     23.4775+-1.5056        ? might be 1.0413x slower
   infer-closure-const-then-reenter-no-inline   
                                                     49.3102+-1.5741           48.6271+-0.6173          might be 1.0140x faster
   infer-closure-const-then-reenter                  23.3623+-1.7145           22.6539+-1.5383          might be 1.0313x faster
   infer-constant-global-property                    30.5823+-0.3716     ?     31.0291+-1.9735        ? might be 1.0146x slower
   infer-constant-property                            2.7088+-0.0205     ?      2.7260+-0.0365        ?
   infer-one-time-closure-ten-vars                   12.2631+-0.2836     ?     12.6808+-0.5068        ? might be 1.0341x slower
   infer-one-time-closure-two-vars                   11.9055+-0.1584     ?     12.2964+-1.1690        ? might be 1.0328x slower
   infer-one-time-closure                            11.9235+-0.4774           11.8003+-0.1876          might be 1.0104x faster
   infer-one-time-deep-closure                       22.1810+-1.5411           21.5754+-1.0005          might be 1.0281x faster
   inline-arguments-access                            1.3953+-0.0211            1.3904+-0.0165        
   inline-arguments-aliased-access                    1.7511+-0.0738            1.6600+-0.0370          might be 1.0549x faster
   inline-arguments-local-escape                     13.6817+-1.5288     ?     13.8828+-1.6980        ? might be 1.0147x slower
   inline-get-scoped-var                              4.6628+-0.0767            4.6016+-0.0992          might be 1.0133x faster
   inlined-put-by-id-transition                      10.4521+-0.1524     ?     11.1973+-0.7474        ? might be 1.0713x slower
   int-or-other-abs-then-get-by-val                   4.9512+-0.0269     ?      4.9840+-0.0931        ?
   int-or-other-abs-zero-then-get-by-val             17.5459+-1.3780           17.2491+-0.8220          might be 1.0172x faster
   int-or-other-add-then-get-by-val                   4.3648+-0.0819            4.3435+-0.0871        
   int-or-other-add                                   5.3878+-0.1310            5.2957+-0.0266          might be 1.0174x faster
   int-or-other-div-then-get-by-val                   4.2778+-0.0923            4.2425+-0.1096        
   int-or-other-max-then-get-by-val                   4.3817+-0.1458            4.3210+-0.0651          might be 1.0141x faster
   int-or-other-min-then-get-by-val                   4.4076+-0.0679     ?      4.4163+-0.0527        ?
   int-or-other-mod-then-get-by-val                   3.9370+-0.1089            3.8962+-0.0761          might be 1.0105x faster
   int-or-other-mul-then-get-by-val                   4.0042+-0.1325            3.9831+-0.0641        
   int-or-other-neg-then-get-by-val                   4.7056+-0.1378            4.6583+-0.0710          might be 1.0102x faster
   int-or-other-neg-zero-then-get-by-val             17.5655+-0.7890           17.5214+-1.2957        
   int-or-other-sub-then-get-by-val                   4.4184+-0.1390            4.3890+-0.0570        
   int-or-other-sub                                   3.5170+-0.0551            3.5068+-0.0516        
   int-overflow-local                                 4.2268+-0.0469     ?      4.2355+-0.0714        ?
   Int16Array-alloc-long-lived                       50.7617+-1.3554     ?     50.8176+-1.8869        ?
   Int16Array-bubble-sort-with-byteLength            21.6579+-1.0494     ?     21.6780+-0.7265        ?
   Int16Array-bubble-sort                            25.7211+-4.1805           22.4766+-1.7153          might be 1.1443x faster
   Int16Array-load-int-mul                            1.4578+-0.0127            1.4565+-0.0174        
   Int16Array-to-Int32Array-set                      58.5250+-1.9218     ?     61.0232+-1.8831        ? might be 1.0427x slower
   Int32Array-alloc-large                            24.9014+-1.3073           24.6901+-1.3612        
   Int32Array-alloc-long-lived                       57.5260+-1.5943           56.8445+-1.7209          might be 1.0120x faster
   Int32Array-alloc                                   3.4110+-0.2362     ?      3.4552+-0.4199        ? might be 1.0130x slower
   Int32Array-Int8Array-view-alloc                    8.0359+-1.3117     ?      8.3383+-1.2530        ? might be 1.0376x slower
   int52-spill                                        6.8350+-0.2268            6.5522+-0.0789          might be 1.0432x faster
   Int8Array-alloc-long-lived                        47.2504+-2.2087           46.4594+-1.0901          might be 1.0170x faster
   Int8Array-load-with-byteLength                     3.3118+-0.0620     ?      3.3700+-0.1327        ? might be 1.0176x slower
   Int8Array-load                                     3.3453+-0.0720            3.2944+-0.0605          might be 1.0154x faster
   integer-divide                                    11.2611+-0.2677     ?     11.3786+-0.4267        ? might be 1.0104x slower
   integer-modulo                                     2.0662+-0.1117     ?      2.0785+-0.1156        ?
   large-int-captured                                 7.0632+-0.9626     ?      7.9183+-1.2729        ? might be 1.1211x slower
   large-int-neg                                     16.5372+-0.6038           16.4826+-0.1298        
   large-int                                         15.5238+-0.6765     ?     15.5732+-1.6558        ?
   logical-not                                        4.4869+-0.0603     ?      4.4875+-0.0303        ?
   lots-of-fields                                    12.6720+-0.1917     ?     13.0357+-0.4853        ? might be 1.0287x slower
   make-indexed-storage                               3.0221+-0.0739     ?      3.0345+-0.2045        ?
   make-rope-cse                                      4.7828+-0.4370     ?      4.8902+-0.6919        ? might be 1.0225x slower
   marsaglia-larger-ints                             35.6429+-0.7238     ?     36.2355+-2.1198        ? might be 1.0166x slower
   marsaglia-osr-entry                               24.0787+-1.5933           23.0045+-0.4736          might be 1.0467x faster
   max-boolean                                        2.4683+-0.0493            2.4328+-0.0391          might be 1.0146x faster
   method-on-number                                  17.4268+-0.7808     ?     17.5625+-0.4277        ?
   min-boolean                                        2.4648+-0.0273     ?      2.5074+-0.1770        ? might be 1.0173x slower
   minus-boolean-double                               3.1860+-0.0797            3.1735+-0.0623        
   minus-boolean                                      2.3269+-0.0454            2.3044+-0.0202        
   misc-strict-eq                                    37.8010+-1.3550     ?     39.6995+-2.4889        ? might be 1.0502x slower
   mod-boolean-double                                10.9938+-0.1535     ?     11.4011+-0.6953        ? might be 1.0370x slower
   mod-boolean                                        7.8195+-0.0418     ?      7.8219+-0.1154        ?
   mul-boolean-double                                 3.7025+-0.0673     ?      3.7223+-0.0916        ?
   mul-boolean                                        2.9434+-0.0701     ?      2.9987+-0.3133        ? might be 1.0188x slower
   neg-boolean                                        3.2484+-0.1568            3.1690+-0.0252          might be 1.0251x faster
   negative-zero-divide                               0.3567+-0.0064            0.3517+-0.0096          might be 1.0142x faster
   negative-zero-modulo                               0.3681+-0.0268            0.3580+-0.0398          might be 1.0282x faster
   negative-zero-negate                               0.3302+-0.0179            0.3219+-0.0268          might be 1.0258x faster
   nested-function-parsing                           22.2548+-0.5590           22.1814+-0.7303        
   new-array-buffer-dead                              2.8212+-0.1239            2.7967+-0.0496        
   new-array-buffer-push                              6.9593+-0.8457     ?      6.9904+-0.7952        ?
   new-array-dead                                    12.2464+-0.2815     ?     12.6441+-0.3986        ? might be 1.0325x slower
   new-array-push                                     3.8676+-0.0780            3.8309+-0.0496        
   number-test                                        3.0397+-0.1014            2.9731+-0.0328          might be 1.0224x faster
   object-closure-call                                5.6075+-0.0415     ?      5.6958+-0.3183        ? might be 1.0157x slower
   object-test                                        3.1073+-0.0542            3.0774+-0.0299        
   obvious-sink-pathology-taken                     146.0761+-2.5228          145.5109+-2.1439        
   obvious-sink-pathology                           143.3328+-2.6902          141.8153+-1.0992          might be 1.0107x faster
   obviously-elidable-new-object                     36.0353+-1.3837           35.0599+-1.2489          might be 1.0278x faster
   plus-boolean-arith                                 2.5038+-0.0202     ?      2.5065+-0.0256        ?
   plus-boolean-double                                3.1668+-0.0407     ?      3.2060+-0.0650        ? might be 1.0124x slower
   plus-boolean                                       2.3670+-0.0129     ?      2.3713+-0.0218        ?
   poly-chain-access-different-prototypes-simple   
                                                      3.3048+-0.0511     ?      3.3450+-0.0970        ? might be 1.0122x slower
   poly-chain-access-different-prototypes             2.8513+-0.2010     ?      2.8949+-0.2051        ? might be 1.0153x slower
   poly-chain-access-simpler                          3.2921+-0.0524     ?      3.3417+-0.1025        ? might be 1.0151x slower
   poly-chain-access                                  2.8462+-0.0904     ?      2.8485+-0.1271        ?
   poly-stricteq                                     58.9006+-1.8908           58.1188+-1.2876          might be 1.0135x faster
   polymorphic-array-call                             1.2338+-0.0584            1.2162+-0.0358          might be 1.0145x faster
   polymorphic-get-by-id                              3.0741+-0.0458     ?      3.1753+-0.1415        ? might be 1.0329x slower
   polymorphic-put-by-id                             29.8521+-2.1486           29.4155+-1.3125          might be 1.0148x faster
   polymorphic-structure                             15.3306+-0.5829           15.2631+-0.9901        
   polyvariant-monomorphic-get-by-id                  8.6608+-0.2640            8.5903+-0.1957        
   proto-getter-access                               10.0338+-0.1832     ?     10.1449+-0.2221        ? might be 1.0111x slower
   put-by-id-replace-and-transition                   8.6461+-0.5449            8.6077+-0.2477        
   put-by-id-slightly-polymorphic                     2.8335+-0.0475     ?      2.8442+-0.0230        ?
   put-by-id                                         13.6107+-0.8556           13.4442+-0.3773          might be 1.0124x faster
   put-by-val-direct                                  0.5841+-0.0214            0.5671+-0.0158          might be 1.0301x faster
   put-by-val-large-index-blank-indexing-type   
                                                      6.3783+-0.8228            6.2695+-0.9228          might be 1.0174x faster
   put-by-val-machine-int                             2.5583+-0.0759            2.5556+-0.0381        
   rare-osr-exit-on-local                            15.1091+-0.3426     ?     15.2471+-0.4379        ?
   register-pressure-from-osr                        21.4666+-0.1750     ?     21.6069+-0.6271        ?
   setter                                             5.4515+-0.0261     ^      5.2524+-0.1291        ^ definitely 1.0379x faster
   simple-activation-demo                            31.9390+-1.1355     ^     26.2942+-1.8028        ^ definitely 1.2147x faster
   simple-getter-access                              12.6310+-0.2266     ?     12.6915+-0.2109        ?
   simple-poly-call-nested                            8.3163+-0.1396            8.2673+-0.3140        
   simple-poly-call                                   1.3190+-0.1185            1.3042+-0.1413          might be 1.0113x faster
   sin-boolean                                       23.9337+-1.8666           23.6639+-1.5978          might be 1.0114x faster
   sinkable-new-object-dag                           69.5548+-1.5453     ?     69.9312+-2.0722        ?
   sinkable-new-object-taken                         52.4511+-2.7461           52.3018+-3.5433        
   sinkable-new-object                               38.9757+-1.1063     ?     39.3671+-1.5142        ? might be 1.0100x slower
   slow-array-profile-convergence                     2.6693+-0.2096     ?      2.6825+-0.0583        ?
   slow-convergence                                   3.1857+-0.0504     ?      3.2217+-0.0333        ? might be 1.0113x slower
   sparse-conditional                                 1.1097+-0.0238            1.0762+-0.0306          might be 1.0311x faster
   splice-to-remove                                  17.9878+-1.7903           17.2052+-1.4703          might be 1.0455x faster
   string-char-code-at                               16.1121+-0.7657     ?     16.1286+-0.6505        ?
   string-concat-object                               2.4749+-0.1735     ?      2.4762+-0.2839        ?
   string-concat-pair-object                          2.3785+-0.0508            2.3304+-0.0961          might be 1.0207x faster
   string-concat-pair-simple                         11.4618+-0.5132     ?     12.0457+-0.9620        ? might be 1.0509x slower
   string-concat-simple                              11.7712+-0.4925     ?     12.6808+-1.1079        ? might be 1.0773x slower
   string-cons-repeat                                 8.0387+-0.8459            7.8221+-0.4473          might be 1.0277x faster
   string-cons-tower                                  8.3190+-0.5611            7.8791+-0.6728          might be 1.0558x faster
   string-equality                                   17.5171+-0.3956     ?     18.1165+-1.0030        ? might be 1.0342x slower
   string-get-by-val-big-char                         7.4461+-0.0615            7.2585+-0.4677          might be 1.0258x faster
   string-get-by-val-out-of-bounds-insane             3.8245+-0.1071     ?      3.9633+-0.3969        ? might be 1.0363x slower
   string-get-by-val-out-of-bounds                    5.2240+-0.0727            5.1852+-0.0573        
   string-get-by-val                                  3.2917+-0.0599     ?      3.2954+-0.0399        ?
   string-hash                                        1.9999+-0.0146     ?      2.0071+-0.0169        ?
   string-long-ident-equality                        14.3724+-0.2709     ?     14.5167+-0.2435        ? might be 1.0100x slower
   string-out-of-bounds                              14.9482+-0.2539     ?     15.4169+-1.2734        ? might be 1.0314x slower
   string-repeat-arith                               32.2099+-3.1970     ?     36.2543+-2.5830        ? might be 1.1256x slower
   string-sub                                        67.1983+-3.9848           66.6566+-2.7299        
   string-test                                        2.9294+-0.0247            2.9025+-0.0373        
   string-var-equality                               30.1188+-0.3935     ?     31.2776+-2.1455        ? might be 1.0385x slower
   structure-hoist-over-transitions                   2.5920+-0.1816            2.4882+-0.0407          might be 1.0417x faster
   substring-concat-weird                            38.8348+-1.0127     ?     39.4757+-1.8279        ? might be 1.0165x slower
   substring-concat                                  41.1488+-2.1344           41.0628+-0.7561        
   substring                                         45.7676+-1.9039           44.9646+-0.6260          might be 1.0179x faster
   switch-char-constant                               2.7369+-0.1143            2.7191+-0.0726        
   switch-char                                        6.7739+-0.7838     ?      7.3924+-1.0846        ? might be 1.0913x slower
   switch-constant                                    8.0296+-0.2236     ?      8.0930+-0.4248        ?
   switch-string-basic-big-var                       14.9238+-0.0918     ?     16.0129+-1.7182        ? might be 1.0730x slower
   switch-string-basic-big                           14.5870+-1.5317           14.2672+-0.3031          might be 1.0224x faster
   switch-string-basic-var                           14.8967+-1.2656     ?     16.2094+-2.0745        ? might be 1.0881x slower
   switch-string-basic                               14.5520+-1.7587           13.8256+-1.4738          might be 1.0525x faster
   switch-string-big-length-tower-var                21.0621+-1.7390           20.2810+-1.5739          might be 1.0385x faster
   switch-string-length-tower-var                    17.0393+-1.8582           16.3207+-1.8961          might be 1.0440x faster
   switch-string-length-tower                        14.0979+-1.6992           13.6581+-1.7448          might be 1.0322x faster
   switch-string-short                               14.0776+-1.7766           13.2806+-1.4159          might be 1.0600x faster
   switch                                            12.0075+-0.3335     ?     12.0476+-0.4075        ?
   tear-off-arguments-simple                          1.9328+-0.0545            1.9028+-0.0904          might be 1.0158x faster
   tear-off-arguments                                 2.7583+-0.0307     ?      2.7723+-0.0429        ?
   temporal-structure                                13.3942+-1.4017           13.2743+-0.4805        
   to-int32-boolean                                  13.8383+-0.2412           13.6946+-0.3953          might be 1.0105x faster
   undefined-property-access                        383.5835+-3.4652     ?    384.1574+-2.9239        ?
   undefined-test                                     3.0465+-0.0457            3.0152+-0.0432          might be 1.0104x faster
   unprofiled-licm                                   22.9290+-0.6555     ?     23.4746+-1.0830        ? might be 1.0238x slower
   weird-inlining-const-prop                          2.3440+-0.0812            2.3279+-0.0741        

   &lt;geometric&gt;                                        8.2763+-0.0095            8.2544+-0.0182          might be 1.0027x faster

                                                        TipOfTree                FixExecAlloc                                   
AsmBench:
   bigfib.cpp                                       496.5868+-6.3711          495.1169+-3.2285        
   cray.c                                           430.0208+-1.3642     ?    439.9113+-15.1149       ? might be 1.0230x slower
   dry.c                                            490.2217+-2.6931          487.6617+-5.7372        
   FloatMM.c                                        736.3917+-10.1804         730.6357+-5.7510        
   gcc-loops.cpp                                   4267.0334+-30.5568        4249.6080+-7.6123        
   n-body.c                                         985.9462+-3.1145     ?    987.1685+-1.8554        ?
   Quicksort.c                                      443.9646+-3.9226     ?    446.5733+-5.3090        ?
   stepanov_container.cpp                          3840.5032+-688.4201       3604.3124+-58.7508         might be 1.0655x faster
   Towers.c                                         266.2259+-2.3260     ?    269.2322+-4.1724        ? might be 1.0113x slower

   &lt;geometric&gt;                                      807.3714+-11.9610         804.3825+-3.3102          might be 1.0037x faster

                                                        TipOfTree                FixExecAlloc                                   
CompressionBench:
   huffman                                          355.7395+-2.6811     !    387.8106+-2.1727        ! definitely 1.0902x slower
   arithmetic-simple                                406.8492+-3.8275          405.7917+-4.2524        
   arithmetic-precise                               307.7015+-4.9003          303.7481+-3.6778          might be 1.0130x faster
   arithmetic-complex-precise                       304.0359+-5.5902          303.3922+-2.9695        
   arithmetic-precise-order-0                       434.3406+-6.6574          432.9622+-7.6714        
   arithmetic-precise-order-1                       343.8501+-4.2109     ?    344.6013+-7.3633        ?
   arithmetic-precise-order-2                       386.8418+-6.7782     ?    387.4291+-8.2662        ?
   arithmetic-simple-order-1                        437.0731+-8.3196          430.8148+-4.9948          might be 1.0145x faster
   arithmetic-simple-order-2                        481.9714+-3.9808     ?    483.0452+-6.3517        ?
   lz-string                                        334.5050+-21.6366         326.0211+-13.7832         might be 1.0260x faster

   &lt;geometric&gt;                                      375.0244+-4.3204     ?    376.2154+-1.8245        ? might be 1.0032x slower

                                                        TipOfTree                FixExecAlloc                                   

                                                        TipOfTree                FixExecAlloc                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                                   63.8343+-0.2158           63.7480+-0.1075          might be 1.0014x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080018</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-25 13:02:40 -0700</bug_when>
    <thetext>I&apos;m going to try to add some test cases for the failing case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080077</commentid>
    <comment_count>13</comment_count>
      <attachid>249435</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-25 15:59:32 -0700</bug_when>
    <thetext>Created attachment 249435
the patch

And now, with tests!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080080</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-25 16:02:14 -0700</bug_when>
    <thetext>Attachment 249435 did not pass style-queue:


ERROR: Source/JavaScriptCore/tests/executableAllocationFuzz/v8-raytrace.js:652:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/tests/executableAllocationFuzz/v8-raytrace.js:654:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/tests/executableAllocationFuzz/v8-raytrace.js:656:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/tests/executableAllocationFuzz/v8-raytrace.js:658:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 4 in 26 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>1080097</commentid>
    <comment_count>15</comment_count>
      <attachid>249435</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-03-25 16:40:18 -0700</bug_when>
    <thetext>Comment on attachment 249435
the patch

r=me on tests and supporting code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080147</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-25 18:27:56 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/181990</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1080148</commentid>
    <comment_count>17</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-25 18:29:10 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/181990</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249303</attachid>
            <date>2015-03-23 17:34:03 -0700</date>
            <delta_ts>2015-03-25 11:46:13 -0700</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-142993.patch</filename>
            <type>text/plain</type>
            <size>4534</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgxODgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBA
CisyMDE1LTAzLTIzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBW
TTo6cmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoKSBzaG91bGQgbm90IGludm9rZSB0aGUgR0MuCisg
ICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8xNDI5OTM+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2hpbGUgY29tcGlsaW5nIG5ldyBKSVQgY29k
ZSwgdGhlIG1haW4gVk0gdGhyZWFkIG1heSBlbmNvdW50ZXIgYSBzaG9ydGFnZSBvZgorICAgICAg
ICBleGVjdXRhYmxlIG1lbW9yeSBhbmQgY2FsbCBWTTo6cmVsZWFzZUV4ZWN1dGFibGVNZW1vcnko
KS4gIFVuZm9ydHVuYXRlbHksCisgICAgICAgIHRoaXMgbWF5IG9jY3VyIHdoaWxlIHRoZSBjYWxs
ZXJzIG9uIHRoZSBWTSB0aHJlYWQgbWF5IGhhdmUgZGVmZXJyZWQgR0MuICBJZgorICAgICAgICB0
aGlzIG9jY3Vycywgd2UnbGwgZ2V0IGEgUkVMRUFTRV9BU1NFUlQgZmFpbHVyZSBkdWUgdG8gR0Mg
YmVpbmcgY2FsbGVkCisgICAgICAgIHdoaWxlIHRoZSBWTSBpcyBleHBlY3RpbmcgaXQgdG8gYmUg
ZGVmZXJyZWQuCisKKyAgICAgICAgUHJldmlvdXNseSwgVk06OnJlbGVhc2VFeGVjdXRhYmxlTWVt
b3J5KCkgZG9lcyB0aGUgZm9sbG93aW5nOgorCisgICAgICAgIDEuIElmIHRoZSBWTSBpcyBwcmVz
ZW50bHkgZXhlY3V0aW5nIHNvbWUgSlMgY29kZSwgcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoKQor
ICAgICAgICAgICB3aWxsIHJlY2xhaW0gZXhlY3V0YWJsZSBtZW1vcnkgZnJvbSBFeGVjdXRhYmxl
cyB0aGF0IGFyZSByZWFjaGFibGUgYnkKKyAgICAgICAgICAgYSBwb3RlbnRpYWwgR0MgYnV0IGlz
IG5vdCBwcmVzZW50bHkgZXhlY3V0aW5nIG9uIHRoZSBzdGFjay4KKworICAgICAgICAgICBJZiB0
aGUgVk0gaXMgbm90IHByZXNlbnRseSBleGVjdXRpbmcgYW55IEpTIGNvZGUsIHJlbGVhc2VFeGVj
dXRhYmxlTWVtb3J5KCkKKyAgICAgICAgICAgd2lsbCBOT1QgcmVjbGFpbSBhbnkgZXhlY3V0YWJs
ZSBtZW1vcnkgZnJvbSBFeGVjdXRhYmxlcyB0aGF0IGFyZQorICAgICAgICAgICByZWFjaGFibGUg
YnkgYSBwb3RlbnRpYWwgR0MuICBUaGlzIGlzIGEgYnVnLgorCisgICAgICAgIDIuIHJlbGVhc2VF
eGVjdXRhYmxlTWVtb3J5KCkgd2lsbCByZWxlYXNlIGFsbCBleGVjdXRhYmxlIG1lbW9yeSBmcm9t
CisgICAgICAgICAgIHRoZSBSZWdFeHAgY2FjaGUuCisKKyAgICAgICAgMy4gcmVsZWFzZUV4ZWN1
dGFibGVNZW1vcnkoKSB3aWxsIHJlbGVhc2UgYWxsIGV4ZWN1dGFibGUgbWVtb3J5IGZyb20KKyAg
ICAgICAgICAgRXhlY3V0YWJsZXMgdGhhdCBhcmUgbm90IHJlYWNoYWJsZSBieSBhIHBvdGVudGlh
bCBHQy4KKworICAgICAgICAgICBJdCBhY2hpZXZlcyB0aGlzIGJ5IGludm9raW5nIHRoZSBHQyB0
byBzd2VlcCBhd2F5IGFsbCBkZWFkIEV4ZWN1dGFibGVzLgorICAgICAgICAgICBUaGlzIGlzIHRo
ZSBzb3VyY2Ugb2Ygb3VyIGNyYXNoLgorCisgICAgICAgIFRoaXMgcGF0Y2ggd2lsbCBmaXggdGhl
IGlzc3VlcyBieSBhcHBseWluZyB0aGUgZm9sbG93aW5nIGNoYW5nZXM6CisKKyAgICAgICAgMS4g
cmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoKSB3aWxsIHVuY29uZGl0aW9uYWxseSByZWNsYWltIGV4
ZWN1dGFibGUKKyAgICAgICAgICAgbWVtb3J5IGZyb20gRXhlY3V0YWJsZXMgdGhhdCBhcmUgcmVh
Y2hhYmxlIGJ5IGEgcG90ZW50aWFsIEdDIGJ1dCBpcworICAgICAgICAgICBub3QgZXhlY3V0aW5n
IG9uIHRoZSBzdGFjay4gIEl0IHdpbGwgZG8gdGhpcyBpbmRlcGVuZGVudCBvZiB3aGV0aGVyCisg
ICAgICAgICAgIHRoZSBWTSBpcyBwcmVzZW50bHkgZXhlY3V0aW5nIGFueSBKUyBjb2RlIG9yIG5v
dC4KKworICAgICAgICAyLiByZWxlYXNlRXhlY3V0YWJsZU1lbW9yeSgpIHdpbGwgbm8gbG9uZ2Vy
IHN5bmNocm9ub3VzbHkgaW52b2tlIHRoZSBHQy4KKworICAgICAgICAgICBJdCB3aWxsIGxlYXZl
IGV4ZWN1dGFibGUgbWVtb3J5IGluIEV4ZWN1dGFibGVzIHRoYXQgYXJlIG5vdCByZWFjaGFibGUK
KyAgICAgICAgICAgYnkgYSBwb3RlbnRpYWwgR0MgdG8gYmUgcmVjbGFpbWVkIGJ5IHN1YnNlcXVl
bnQgbmF0dXJhbGx5IHRyaWdnZXJlZAorICAgICAgICAgICBHQ3MuCisKKyAgICAgICAgSXQgaXMg
bm90IHByYWN0aWNhbCB0byB3cml0ZSBhIHRlc3QgZm9yIHRoaXMgZml4IHNpbmNlIGl0IHJlbGll
cyBvbgorICAgICAgICBhIHJhY2UgY29uZGl0aW9uLiAgSSB0ZXN0ZWQgdGhlIGZpeCBtYW51YWxs
eSBieSBpbnN0cnVtZW50aW5nCisgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRl
KCkgdG8gZmFpbCBldmVyeSB0aW1lIG9uIHRoZSBmaXJzdAorICAgICAgICBhbGxvY2F0aW9uIHRy
eSBpZjoKKyAgICAgICAgMS4gdGhlIGN1cnJlbnQgdGhyZWFkIGlzIHRoZSBWTSB0aHJlYWQuCisg
ICAgICAgIDIuIEdDIGlzIGRlZmVycmVkLgorICAgICAgICAzLiBpdHMgcmVxdWlyZWQgSklUIGNv
bXBpbGF0aW9uIGVmZm9ydCBwYXJhbWV0ZXIgaXMgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZC4K
KworICAgICAgICBXd2l0aG91dCB0aGUgZml4LCB0aGlzIGluc3RydW1lbnRhdGlvbiByZXN1bHRz
IGluIHRoZSBWTSBjcmFzaGluZyBldmVyeQorICAgICAgICB0aW1lIEkgcnVuIFNhZmFyaS4gIFdp
dGggdGhlIGZpeCwgdGhlIFZNIG5vIGxvbmdlciBjcmFzaGVzIGJ1dCBmYWlscyBkdWUKKyAgICAg
ICAgdG8gdGhlIGZvcmNlZCBmYWlsZWQgYWxsb2NhdGlvbiBhcyBleHBlY3RlZC4KKworICAgICAg
ICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6cmVsZWFzZUV4ZWN1dGFibGVN
ZW1vcnkpOgorCiAyMDE1LTAzLTIzICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAog
ICAgICAgICBFUzc6IEltcGxlbWVudCBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXMKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE4MTgyMykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTA1LDkg
KzUwNSw5IEBAIHZvaWQgVk06OnJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KCkKIHsKICAgICBwcmVw
YXJlVG9EaXNjYXJkQ29kZSgpOwogICAgIAorICAgIEhlYXBJdGVyYXRpb25TY29wZSBpdGVyYXRp
b25TY29wZShoZWFwKTsKKyAgICBTdGFja1ByZXNlcnZpbmdSZWNvbXBpbGVyIHJlY29tcGlsZXI7
CiAgICAgaWYgKGVudHJ5U2NvcGUpIHsKLSAgICAgICAgU3RhY2tQcmVzZXJ2aW5nUmVjb21waWxl
ciByZWNvbXBpbGVyOwotICAgICAgICBIZWFwSXRlcmF0aW9uU2NvcGUgaXRlcmF0aW9uU2NvcGUo
aGVhcCk7CiAgICAgICAgIEhhc2hTZXQ8SlNDZWxsKj4gcm9vdHM7CiAgICAgICAgIGhlYXAuZ2V0
Q29uc2VydmF0aXZlUmVnaXN0ZXJSb290cyhyb290cyk7CiAgICAgICAgIEhhc2hTZXQ8SlNDZWxs
Kj46Oml0ZXJhdG9yIGVuZCA9IHJvb3RzLmVuZCgpOwpAQCAtNTI3LDEyICs1MjcsMTAgQEAgdm9p
ZCBWTTo6cmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoKQogICAgICAgICAgICAgZXhlY3V0YWJsZS0+
dW5saW5rQ2FsbHMoKTsKICAgICAgICAgICAgIGlmIChleGVjdXRhYmxlLT5pbmhlcml0cyhGdW5j
dGlvbkV4ZWN1dGFibGU6OmluZm8oKSkpCiAgICAgICAgICAgICAgICAgcmVjb21waWxlci5jdXJy
ZW50bHlFeGVjdXRpbmdGdW5jdGlvbnMuYWRkKHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KGV4ZWN1dGFibGUpKTsKLSAgICAgICAgICAgICAgICAKICAgICAgICAgfQotICAgICAgICBo
ZWFwLm9iamVjdFNwYWNlKCkuZm9yRWFjaExpdmVDZWxsPFN0YWNrUHJlc2VydmluZ1JlY29tcGls
ZXI+KGl0ZXJhdGlvblNjb3BlLCByZWNvbXBpbGVyKTsKICAgICB9CisgICAgaGVhcC5vYmplY3RT
cGFjZSgpLmZvckVhY2hMaXZlQ2VsbDxTdGFja1ByZXNlcnZpbmdSZWNvbXBpbGVyPihpdGVyYXRp
b25TY29wZSwgcmVjb21waWxlcik7CiAgICAgbV9yZWdFeHBDYWNoZS0+aW52YWxpZGF0ZUNvZGUo
KTsKLSAgICBoZWFwLmNvbGxlY3RBbGxHYXJiYWdlKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFwcGVu
ZFNvdXJjZVRvRXJyb3IoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEVycm9ySW5zdGFuY2UqIGV4Y2Vw
dGlvbiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCg==
</data>
<flag name="review"
          id="274108"
          type_id="1"
          status="-"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249418</attachid>
            <date>2015-03-25 11:46:13 -0700</date>
            <delta_ts>2015-03-25 15:59:32 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>31326</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgxOTY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBA
CisyMDE1LTAzLTI1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VXNlIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCBpbiBtb3JlIHBsYWNlcywgYW5kIG1ha2UgdGhlIGZh
aWwgcGF0aCBvZiBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkIGEgY3Jhc2ggaW5zdGVhZCBvZiBh
dHRlbXB0aW5nIEdDCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDI5OTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgY2hhbmdlcyB0aGUgbW9zdCBjb21tb25seSBpbnZva2VkIHBhdGhz
IHRoYXQgcmVsaWVkIG9uIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQKKyAgICAgICAgaW50byB1
c2luZyBKSVRDb21waWxhdGlvbkNhbkZhaWwgYW5kIGhhdmluZyBhIGxlZ2l0IGZhbGxiYWNrIHBh
dGguIFRoaXMgbW9zdGx5IGludm9sdmVzCisgICAgICAgIGhhdmluZyB0aGUgRlRMIEpJVCBkbyB0
aGUgc2FtZSB0cmljayBhcyB0aGUgREZHIEpJVCBpbiBjYXNlIG9mIGFueSBtZW1vcnkgYWxsb2Nh
dGlvbgorICAgICAgICBmYWlsdXJlLCBidXQgYWxzbyBpbnZvbHZlcyBhZGRpbmcgdGhlIHNhbWUg
a2luZCBvZiB0aGluZyB0byB0aGUgc3R1YiBnZW5lcmF0b3JzIGluCisgICAgICAgIFJlcGF0Y2gu
CisgICAgICAgIAorICAgICAgICBCZWNhdXNlIG9mIHRoYXQgY2hhbmdlLCB0aGVyZSBhcmUgcmVs
YXRpdmVseSBmZXcgdXNlcyBvZiBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLiBNb3N0CisgICAg
ICAgIG9mIHRob3NlIHVzZXMgY2Fubm90IGhhbmRsZSBhIEdDLCBhbmQgc28gY2Fubm90IGRvIHJl
bGVhc2VFeGVjdXRhYmxlTWVtb3J5KCkuIE9ubHkgYSBmZXcsCisgICAgICAgIGxpa2UgaG9zdCBj
YWxsIHN0dWIgZ2VuZXJhdGlvbiwgY291bGQgaGFuZGxlIGEgR0MsIGJ1dCB0aG9zZSBnZXQgaW52
b2tlZCB2ZXJ5IHJhcmVseS4gU28sCisgICAgICAgIHRoaXMgcGF0Y2ggY2hhbmdlcyB0aGUgcmVs
ZWFzZUV4ZWN1dGFibGVNZW1vcnkoKSBjYWxsIGludG8gYSBjcmFzaCB3aXRoIHNvbWUgZGlhZ25v
c3RpYworICAgICAgICBwcmludG91dC4KKworICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGUpOgorICAgICAgICAo
SlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvbXBpbGVyOjpsaW5rKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b21waWxlcjo6bGlua0Z1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHSklUQ29t
cGlsZXIuaDoKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
UGxhbjo6Y29tcGlsZUluVGhyZWFkSW1wbCk6CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6Om1tQWxsb2NhdGVDb2RlU2VjdGlvbik6CisgICAgICAgIChK
U0M6OkZUTDo6bW1BbGxvY2F0ZURhdGFTZWN0aW9uKToKKyAgICAgICAgKiBmdGwvRlRMTGluay5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6bGluayk6CisgICAgICAgICogZnRsL0ZUTFN0YXRlLmg6
CisgICAgICAgICogaml0L0FyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLmNwcDoKKyAgICAgICAg
KEpTQzo6QXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3M6OnJldHVyblBDc0Zvcik6CisgICAgICAg
IChKU0M6OkFyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzOjpyZXR1cm5QQ0Zvcik6CisgICAgICAg
ICogaml0L0FyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLmg6CisgICAgICAgICogaml0L0V4ZWN1
dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVB
bGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjpwcml2YXRlQ29tcGlsZSk6CisgICAgICAgICogaml0L0pJVENvbXBpbGF0aW9uRWZm
b3J0Lmg6CisgICAgICAgICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmF0
ZUJ5SWRTdHViKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAgICAgICAgKEpT
Qzo6dHJ5QnVpbGRHZXRCeUlETGlzdCk6CisgICAgICAgIChKU0M6OmVtaXRQdXRSZXBsYWNlU3R1
Yik6CisgICAgICAgIChKU0M6OmVtaXRQdXRUcmFuc2l0aW9uU3R1YkFuZEdldE9sZFN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlUHV0QnlJRCk6CisgICAgICAgIChKU0M6OnRyeUJ1
aWxkUHV0QnlJZExpc3QpOgorICAgICAgICAoSlNDOjp0cnlSZXBhdGNoSW4pOgorICAgICAgICAo
SlNDOjpsaW5rUG9seW1vcnBoaWNDYWxsKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoK
KyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKwogMjAxNS0wMy0yNSAgWXVzdWtlIFN1enVraSAg
PHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBOZXcgbWFwIGFuZCBzZXQgbW9kaWZp
Y2F0aW9uIHRlc3RzIGluIHIxODE5MjIgZmFpbHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxODE5NjEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzI1LDEwICszMjUsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlKCkKICAgICAvLyBDcmVh
dGUgT1NSIGVudHJ5IHRyYW1wb2xpbmVzIGlmIG5lY2Vzc2FyeS4KICAgICBtX3NwZWN1bGF0aXZl
LT5jcmVhdGVPU1JFbnRyaWVzKCk7CiAgICAgc2V0RW5kT2ZDb2RlKCk7Ci19CiAKLXZvaWQgSklU
Q29tcGlsZXI6OmxpbmsoKQotewogICAgIGF1dG8gbGlua0J1ZmZlciA9IHN0ZDo6bWFrZV91bmlx
dWU8TGlua0J1ZmZlcj4oKm1fdm0sICp0aGlzLCBtX2NvZGVCbG9jaywgSklUQ29tcGlsYXRpb25D
YW5GYWlsKTsKICAgICBpZiAobGlua0J1ZmZlci0+ZGlkRmFpbFRvQWxsb2NhdGUoKSkgewogICAg
ICAgICBtX2dyYXBoLm1fcGxhbi5maW5hbGl6ZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPEZhaWxlZEZp
bmFsaXplcj4obV9ncmFwaC5tX3BsYW4pOwpAQCAtNDEyLDcgKzQwOSwxNCBAQCB2b2lkIEpJVENv
bXBpbGVyOjpjb21waWxlRnVuY3Rpb24oKQogI2Vsc2UKICAgICB0aHVua1JlZyA9IEdQUkluZm86
OnJlZ1Q1OwogI2VuZGlmCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fdm0tPmFyaXR5Q2hlY2tG
YWlsUmV0dXJuVGh1bmtzLT5yZXR1cm5QQ3NGb3IoKm1fdm0sIG1fY29kZUJsb2NrLT5udW1QYXJh
bWV0ZXJzKCkpKSwgdGh1bmtSZWcpOworICAgIENvZGVMb2NhdGlvbkxhYmVsKiBhcml0eVRodW5r
TGFiZWxzID0KKyAgICAgICAgbV92bS0+YXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MtPnJldHVy
blBDc0ZvcigqbV92bSwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7CisgICAgaWYgKCFh
cml0eVRodW5rTGFiZWxzKSB7CisgICAgICAgIG1fZ3JhcGgubV9wbGFuLmZpbmFsaXplciA9IHN0
ZDo6bWFrZV91bmlxdWU8RmFpbGVkRmluYWxpemVyPihtX2dyYXBoLm1fcGxhbik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFyaXR5VGh1bmtM
YWJlbHMpLCB0aHVua1JlZyk7CiAgICAgbG9hZFB0cihCYXNlSW5kZXgodGh1bmtSZWcsIEdQUklu
Zm86OnJlZ1QwLCB0aW1lc1B0cigpKSwgdGh1bmtSZWcpOwogICAgIG1fY2FsbEFyaXR5Rml4dXAg
PSBjYWxsKCk7CiAgICAganVtcChmcm9tQXJpdHlDaGVjayk7CkBAIC00MjYsMTAgKzQzMCw3IEBA
IHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbigpCiAgICAgLy8gQ3JlYXRlIE9TUiBl
bnRyeSB0cmFtcG9saW5lcyBpZiBuZWNlc3NhcnkuCiAgICAgbV9zcGVjdWxhdGl2ZS0+Y3JlYXRl
T1NSRW50cmllcygpOwogICAgIHNldEVuZE9mQ29kZSgpOwotfQogCi12b2lkIEpJVENvbXBpbGVy
OjpsaW5rRnVuY3Rpb24oKQotewogICAgIC8vID09PSBMaW5rID09PQogICAgIGF1dG8gbGlua0J1
ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8TGlua0J1ZmZlcj4oKm1fdm0sICp0aGlzLCBtX2NvZGVC
bG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICBpZiAobGlua0J1ZmZlci0+ZGlkRmFp
bFRvQWxsb2NhdGUoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuaAkocmV2aXNpb24gMTgxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsOSArMTExLDYgQEAgcHVi
bGljOgogICAgIHZvaWQgY29tcGlsZSgpOwogICAgIHZvaWQgY29tcGlsZUZ1bmN0aW9uKCk7CiAg
ICAgCi0gICAgdm9pZCBsaW5rKCk7Ci0gICAgdm9pZCBsaW5rRnVuY3Rpb24oKTsKLQogICAgIC8v
IEFjY2Vzc29ycyBmb3IgcHJvcGVydGllcy4KICAgICBHcmFwaCYgZ3JhcGgoKSB7IHJldHVybiBt
X2dyYXBoOyB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJ
KHJldmlzaW9uIDE4MTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5OSwxMyArMjk5LDEwIEBAIFBsYW46OkNvbXBpbGF0aW9u
UGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgZHVtcEFuZFZlcmlmeUdyYXBoKGRmZywg
IkdyYXBoIGFmdGVyIG9wdGltaXphdGlvbjoiKTsKICAgICAgICAgCiAgICAgICAgIEpJVENvbXBp
bGVyIGRhdGFGbG93SklUKGRmZyk7Ci0gICAgICAgIGlmIChjb2RlQmxvY2stPmNvZGVUeXBlKCkg
PT0gRnVuY3Rpb25Db2RlKSB7CisgICAgICAgIGlmIChjb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0g
RnVuY3Rpb25Db2RlKQogICAgICAgICAgICAgZGF0YUZsb3dKSVQuY29tcGlsZUZ1bmN0aW9uKCk7
Ci0gICAgICAgICAgICBkYXRhRmxvd0pJVC5saW5rRnVuY3Rpb24oKTsKLSAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgZGF0YUZsb3dKSVQuY29tcGlsZSgpOwotICAg
ICAgICAgICAgZGF0YUZsb3dKSVQubGluaygpOwotICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICByZXR1cm4gREZHUGF0aDsKICAgICB9CkBAIC00MDQsNiArNDAxLDExIEBAIFBsYW46OkNvbXBp
bGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgICAgIEZUTDo6ZmFpbChzdGF0
ZSk7CiAgICAgICAgICAgICByZXR1cm4gRlRMUGF0aDsKICAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgaWYgKHN0YXRlLmFsbG9jYXRpb25GYWlsZWQpIHsKKyAgICAgICAgICAgIEZUTDo6ZmFp
bChzdGF0ZSk7CisgICAgICAgICAgICByZXR1cm4gRlRMUGF0aDsKKyAgICAgICAgfQogCiAgICAg
ICAgIGlmIChzdGF0ZS5qaXRDb2RlLT5zdGFja21hcHMuc3RhY2tTaXplKCkgPiBPcHRpb25zOjps
bHZtTWF4U3RhY2tTaXplKCkpIHsKICAgICAgICAgICAgIEZUTDo6ZmFpbChzdGF0ZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE4MTk2
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU5LDcgKzU5LDE3IEBAIHN0YXRpYyB1aW50OF90KiBtbUFsbG9jYXRlQ29kZVNl
Y3Rpb24oCiAgICAgCiAgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9
CiAgICAgICAgIHN0YXRlLmdyYXBoLm1fdm0uZXhlY3V0YWJsZUFsbG9jYXRvci5hbGxvY2F0ZSgK
LSAgICAgICAgICAgIHN0YXRlLmdyYXBoLm1fdm0sIHNpemUsIHN0YXRlLmdyYXBoLm1fY29kZUJs
b2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKKyAgICAgICAgICAgIHN0YXRlLmdyYXBo
Lm1fdm0sIHNpemUsIHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZh
aWwpOworICAgIAorICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIC8vIFNpZ25hbCBmYWlsdXJl
LiBUaGlzIGNvbXBpbGF0aW9uIHdpbGwgZ2V0IHRvc3NlZC4KKyAgICAgICAgc3RhdGUuYWxsb2Nh
dGlvbkZhaWxlZCA9IHRydWU7CisgICAgICAgIAorICAgICAgICAvLyBGYWtlIGFuIGFsbG9jYXRp
b24sIHNpbmNlIExMVk0gY2Fubm90IGhhbmRsZSBoYWlsdXJlcyBpbiB0aGUgbWVtb3J5IG1hbmFn
ZXIuCisgICAgICAgIFJlZlB0cjxEYXRhU2VjdGlvbj4gZmFrZVNlY3Rpb24gPSBhZG9wdFJlZihu
ZXcgRGF0YVNlY3Rpb24oc2l6ZSwgaml0QWxsb2NhdGlvbkdyYW51bGUpKTsKKyAgICAgICAgc3Rh
dGUuaml0Q29kZS0+YWRkRGF0YVNlY3Rpb24oZmFrZVNlY3Rpb24pOworICAgICAgICByZXR1cm4g
Yml0d2lzZV9jYXN0PHVpbnQ4X3QqPihmYWtlU2VjdGlvbi0+YmFzZSgpKTsKKyAgICB9CiAgICAg
CiAgICAgLy8gTExWTSB1c2VkIHRvIHB1dCBfX2NvbXBhY3RfdW53aW5kIGluIGEgY29kZSBzZWN0
aW9uLiBXZSBrZWVwIHRoaXMgaGVyZSBkZWZlbnNpdmVseSwKICAgICAvLyBmb3IgY2xpZW50cyB0
aGF0IHVzZSBvbGRlciBMTFZNcy4KQEAgLTM0NCw3ICszNTQsMTEgQEAgc3RhdGljIHZvaWQgZml4
RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICBjaGVja0pJVC5qdW1wVG9FeGNlcHRp
b25IYW5kbGVyKCk7CiAKICAgICAgICAgYXV0byBsaW5rQnVmZmVyID0gc3RkOjptYWtlX3VuaXF1
ZTxMaW5rQnVmZmVyPigKLSAgICAgICAgICAgIHZtLCBjaGVja0pJVCwgY29kZUJsb2NrLCBKSVRD
b21waWxhdGlvbk11c3RTdWNjZWVkKTsKKyAgICAgICAgICAgIHZtLCBjaGVja0pJVCwgY29kZUJs
b2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgICAgICBpZiAobGlua0J1ZmZlci0+ZGlk
RmFpbFRvQWxsb2NhdGUoKSkgeworICAgICAgICAgICAgc3RhdGUuYWxsb2NhdGlvbkZhaWxlZCA9
IHRydWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgbGlua0J1ZmZl
ci0+bGluayhjYWxsTG9va3VwRXhjZXB0aW9uSGFuZGxlciwgRnVuY3Rpb25QdHIobG9va3VwRXhj
ZXB0aW9uSGFuZGxlcikpOwogICAgICAgICBsaW5rQnVmZmVyLT5saW5rKGNhbGxMb29rdXBFeGNl
cHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lLCBGdW5jdGlvblB0cihsb29rdXBFeGNlcHRpb25I
YW5kbGVyRnJvbUNhbGxlckZyYW1lKSk7CiAKQEAgLTM1OCw3ICszNzIsMTEgQEAgc3RhdGljIHZv
aWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICBSRUxFQVNFX0FTU0VSVChk
aWRTZWVVbndpbmRJbmZvKTsKICAgICAgICAgCiAgICAgICAgIGF1dG8gbGlua0J1ZmZlciA9IHN0
ZDo6bWFrZV91bmlxdWU8TGlua0J1ZmZlcj4oCi0gICAgICAgICAgICB2bSwgZXhpdFRodW5rR2Vu
ZXJhdG9yLCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOworICAgICAgICAg
ICAgdm0sIGV4aXRUaHVua0dlbmVyYXRvciwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZh
aWwpOworICAgICAgICBpZiAobGlua0J1ZmZlci0+ZGlkRmFpbFRvQWxsb2NhdGUoKSkgeworICAg
ICAgICAgICAgc3RhdGUuYWxsb2NhdGlvbkZhaWxlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlLmZp
bmFsaXplci0+b3NyRXhpdC5zaXplKCkgPT0gc3RhdGUuaml0Q29kZS0+b3NyRXhpdC5zaXplKCkp
OwogICAgICAgICAKQEAgLTUxNiw3ICs1MzQsMTEgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25C
YXNlZE9uU3RhY2tNYXBzKAogICAgICAgICBleGNlcHRpb25UYXJnZXQubGluaygmc2xvd1BhdGhK
SVQpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBleGNlcHRpb25KdW1wID0gc2xvd1Bh
dGhKSVQuanVtcCgpOwogICAgICAgICAKLSAgICAgICAgc3RhdGUuZmluYWxpemVyLT5zaWRlQ29k
ZUxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmtCdWZmZXI+KHZtLCBzbG93UGF0aEpJ
VCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKKyAgICAgICAgc3RhdGUu
ZmluYWxpemVyLT5zaWRlQ29kZUxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmtCdWZm
ZXI+KHZtLCBzbG93UGF0aEpJVCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOwor
ICAgICAgICBpZiAoc3RhdGUuZmluYWxpemVyLT5zaWRlQ29kZUxpbmtCdWZmZXItPmRpZEZhaWxU
b0FsbG9jYXRlKCkpIHsKKyAgICAgICAgICAgIHN0YXRlLmFsbG9jYXRpb25GYWlsZWQgPSB0cnVl
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIHN0YXRlLmZpbmFsaXpl
ci0+c2lkZUNvZGVMaW5rQnVmZmVyLT5saW5rKAogICAgICAgICAgICAgZXhjZXB0aW9uSnVtcCwg
c3RhdGUuZmluYWxpemVyLT5oYW5kbGVFeGNlcHRpb25zTGlua0J1ZmZlci0+ZW50cnlwb2ludCgp
KTsKICAgICAgICAgCkBAIC02NzUsMTMgKzY5NywxNyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0
YXRlLCBTYWZlcG9pbnQ6OlJlCiAgICAgICAgICAgICBkYXRhTG9nKCJGQVRBTDogQ291bGQgbm90
IGNyZWF0ZSBMTFZNIGV4ZWN1dGlvbiBlbmdpbmU6ICIsIGVycm9yLCAiXG4iKTsKICAgICAgICAg
ICAgIENSQVNIKCk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEF0IHRoaXMgcG9p
bnQgd2Ugbm8gbG9uZ2VyIG93biB0aGUgbW9kdWxlLgorICAgICAgICBMTW9kdWxlIG1vZHVsZSA9
IHN0YXRlLm1vZHVsZTsKKyAgICAgICAgc3RhdGUubW9kdWxlID0gbnVsbHB0cjsKIAogICAgICAg
ICAvLyBUaGUgZGF0YSBsYXlvdXQgYWxzbyBoYXMgdG8gYmUgc2V0IGluIHRoZSBtb2R1bGUuIEdl
dCB0aGUgZGF0YSBsYXlvdXQgZnJvbSB0aGUgTUNKSVQgYW5kIGFwcGx5CiAgICAgICAgIC8vIGl0
IHRvIHRoZSBtb2R1bGUuCiAgICAgICAgIExMVk1UYXJnZXRNYWNoaW5lUmVmIHRhcmdldE1hY2hp
bmUgPSBsbHZtLT5HZXRFeGVjdXRpb25FbmdpbmVUYXJnZXRNYWNoaW5lKGVuZ2luZSk7CiAgICAg
ICAgIExMVk1UYXJnZXREYXRhUmVmIHRhcmdldERhdGEgPSBsbHZtLT5HZXRFeGVjdXRpb25Fbmdp
bmVUYXJnZXREYXRhKGVuZ2luZSk7CiAgICAgICAgIGNoYXIqIHN0cmluZ1JlcE9mVGFyZ2V0RGF0
YSA9IGxsdm0tPkNvcHlTdHJpbmdSZXBPZlRhcmdldERhdGEodGFyZ2V0RGF0YSk7Ci0gICAgICAg
IGxsdm0tPlNldERhdGFMYXlvdXQoc3RhdGUubW9kdWxlLCBzdHJpbmdSZXBPZlRhcmdldERhdGEp
OworICAgICAgICBsbHZtLT5TZXREYXRhTGF5b3V0KG1vZHVsZSwgc3RyaW5nUmVwT2ZUYXJnZXRE
YXRhKTsKICAgICAgICAgZnJlZShzdHJpbmdSZXBPZlRhcmdldERhdGEpOwogCiAgICAgICAgIExM
Vk1QYXNzTWFuYWdlclJlZiBmdW5jdGlvblBhc3NlcyA9IDA7CkBAIC03MDcsMTQgKzczMywxNCBA
QCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAgICAgICAgICAgICBs
bHZtLT5BZGRDRkdTaW1wbGlmaWNhdGlvblBhc3MobW9kdWxlUGFzc2VzKTsKICAgICAgICAgICAg
IGxsdm0tPkFkZERlYWRTdG9yZUVsaW1pbmF0aW9uUGFzcyhtb2R1bGVQYXNzZXMpOwogCi0gICAg
ICAgICAgICBsbHZtLT5SdW5QYXNzTWFuYWdlcihtb2R1bGVQYXNzZXMsIHN0YXRlLm1vZHVsZSk7
CisgICAgICAgICAgICBsbHZtLT5SdW5QYXNzTWFuYWdlcihtb2R1bGVQYXNzZXMsIG1vZHVsZSk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBMTFZNUGFzc01hbmFnZXJCdWlsZGVyUmVm
IHBhc3NCdWlsZGVyID0gbGx2bS0+UGFzc01hbmFnZXJCdWlsZGVyQ3JlYXRlKCk7CiAgICAgICAg
ICAgICBsbHZtLT5QYXNzTWFuYWdlckJ1aWxkZXJTZXRPcHRMZXZlbChwYXNzQnVpbGRlciwgT3B0
aW9uczo6bGx2bU9wdGltaXphdGlvbkxldmVsKCkpOwogICAgICAgICAgICAgbGx2bS0+UGFzc01h
bmFnZXJCdWlsZGVyVXNlSW5saW5lcldpdGhUaHJlc2hvbGQocGFzc0J1aWxkZXIsIDI3NSk7CiAg
ICAgICAgICAgICBsbHZtLT5QYXNzTWFuYWdlckJ1aWxkZXJTZXRTaXplTGV2ZWwocGFzc0J1aWxk
ZXIsIE9wdGlvbnM6Omxsdm1TaXplTGV2ZWwoKSk7CiAgICAgICAgIAotICAgICAgICAgICAgZnVu
Y3Rpb25QYXNzZXMgPSBsbHZtLT5DcmVhdGVGdW5jdGlvblBhc3NNYW5hZ2VyRm9yTW9kdWxlKHN0
YXRlLm1vZHVsZSk7CisgICAgICAgICAgICBmdW5jdGlvblBhc3NlcyA9IGxsdm0tPkNyZWF0ZUZ1
bmN0aW9uUGFzc01hbmFnZXJGb3JNb2R1bGUobW9kdWxlKTsKICAgICAgICAgICAgIG1vZHVsZVBh
c3NlcyA9IGxsdm0tPkNyZWF0ZVBhc3NNYW5hZ2VyKCk7CiAgICAgICAgIAogICAgICAgICAgICAg
bGx2bS0+QWRkVGFyZ2V0RGF0YShsbHZtLT5HZXRFeGVjdXRpb25FbmdpbmVUYXJnZXREYXRhKGVu
Z2luZSksIG1vZHVsZVBhc3Nlcyk7CkBAIC03MjUsMTEgKzc1MSwxMSBAQCB2b2lkIGNvbXBpbGUo
U3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAgICAgICAgICAgICBsbHZtLT5QYXNzTWFuYWdl
ckJ1aWxkZXJEaXNwb3NlKHBhc3NCdWlsZGVyKTsKICAgICAgICAgCiAgICAgICAgICAgICBsbHZt
LT5Jbml0aWFsaXplRnVuY3Rpb25QYXNzTWFuYWdlcihmdW5jdGlvblBhc3Nlcyk7Ci0gICAgICAg
ICAgICBmb3IgKExWYWx1ZSBmdW5jdGlvbiA9IGxsdm0tPkdldEZpcnN0RnVuY3Rpb24oc3RhdGUu
bW9kdWxlKTsgZnVuY3Rpb247IGZ1bmN0aW9uID0gbGx2bS0+R2V0TmV4dEZ1bmN0aW9uKGZ1bmN0
aW9uKSkKKyAgICAgICAgICAgIGZvciAoTFZhbHVlIGZ1bmN0aW9uID0gbGx2bS0+R2V0Rmlyc3RG
dW5jdGlvbihtb2R1bGUpOyBmdW5jdGlvbjsgZnVuY3Rpb24gPSBsbHZtLT5HZXROZXh0RnVuY3Rp
b24oZnVuY3Rpb24pKQogICAgICAgICAgICAgICAgIGxsdm0tPlJ1bkZ1bmN0aW9uUGFzc01hbmFn
ZXIoZnVuY3Rpb25QYXNzZXMsIGZ1bmN0aW9uKTsKICAgICAgICAgICAgIGxsdm0tPkZpbmFsaXpl
RnVuY3Rpb25QYXNzTWFuYWdlcihmdW5jdGlvblBhc3Nlcyk7CiAgICAgICAgIAotICAgICAgICAg
ICAgbGx2bS0+UnVuUGFzc01hbmFnZXIobW9kdWxlUGFzc2VzLCBzdGF0ZS5tb2R1bGUpOworICAg
ICAgICAgICAgbGx2bS0+UnVuUGFzc01hbmFnZXIobW9kdWxlUGFzc2VzLCBtb2R1bGUpOwogICAg
ICAgICB9CiAKICAgICAgICAgaWYgKHNob3VsZFNob3dEaXNhc3NlbWJseSgpIHx8IHZlcmJvc2VD
b21waWxhdGlvbkVuYWJsZWQoKSkKQEAgLTc0MywxMCArNzY5LDE0IEBAIHZvaWQgY29tcGlsZShT
dGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKICAgICAgICAgbGx2bS0+RGlzcG9zZVBhc3NNYW5h
Z2VyKG1vZHVsZVBhc3Nlcyk7CiAgICAgICAgIGxsdm0tPkRpc3Bvc2VFeGVjdXRpb25FbmdpbmUo
ZW5naW5lKTsKICAgICB9CisKICAgICBpZiAoc2FmZXBvaW50UmVzdWx0LmRpZEdldENhbmNlbGxl
ZCgpKQogICAgICAgICByZXR1cm47CiAgICAgUkVMRUFTRV9BU1NFUlQoIXN0YXRlLmdyYXBoLm1f
dm0uaGVhcC5pc0NvbGxlY3RpbmcoKSk7CiAgICAgCisgICAgaWYgKHN0YXRlLmFsbG9jYXRpb25G
YWlsZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKICAgICBpZiAoc2hvdWxkU2hvd0Rpc2Fzc2Vt
Ymx5KCkpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRlLmppdENvZGUt
PmhhbmRsZXMoKS5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgRXhlY3V0YWJsZU1lbW9yeUhh
bmRsZSogaGFuZGxlID0gc3RhdGUuaml0Q29kZS0+aGFuZGxlcygpW2ldLmdldCgpOwpAQCAtODAy
LDYgKzgzMiw4IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKICAg
ICAgICAgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICAgICAgc3RhdGUsIHN0
YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBzdGF0ZS5qaXRDb2RlLmdldCgpLCBzdGF0ZS5nZW5lcmF0
ZWRGdW5jdGlvbiwKICAgICAgICAgICAgIHJlY29yZE1hcCwgZGlkU2VlVW53aW5kSW5mbyk7Cisg
ICAgICAgIGlmIChzdGF0ZS5hbGxvY2F0aW9uRmFpbGVkKQorICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKICAgICAgICAgaWYgKHNob3VsZFNob3dEaXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6
OmFzeW5jRGlzYXNzZW1ibHkoKSkgewogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHN0YXRlLmppdENvZGUtPmhhbmRsZXMoKS5zaXplKCk7ICsraSkgewpAQCAtODMwLDggKzg2
Miw2IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBzdGF0ZS5tb2R1bGUgPSAwOyAvLyBX
ZSBubyBsb25nZXIgb3duIHRoZSBtb2R1bGUuCiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkocmV2aXNpb24gMTgx
OTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTcxLDEzICsxNzEsMjMgQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkKICAgICAg
ICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgICAgIG1haW5QYXRoSnVtcHMuYXBw
ZW5kKGppdC5icmFuY2hUZXN0MzIoQ0NhbGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdUMCkp
OwogICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKLSAgICAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHZtLmFyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtz
LT5yZXR1cm5QQ3NGb3Iodm0sIGNvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKSksIEdQUkluZm86
OnJlZ1Q3KTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwqIGFyaXR5VGh1bmtMYWJlbHMgPQor
ICAgICAgICAgICAgdm0uYXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MtPnJldHVyblBDc0Zvcih2
bSwgY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOworICAgICAgICBpZiAoIWFyaXR5VGh1bmtM
YWJlbHMpIHsKKyAgICAgICAgICAgIHN0YXRlLmFsbG9jYXRpb25GYWlsZWQgPSB0cnVlOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihhcml0eVRodW5rTGFiZWxzKSwgR1BSSW5mbzo6cmVnVDcpOwogICAg
ICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkJhc2VJbmRleChHUFJJbmZvOjpyZWdUNywg
R1BSSW5mbzo6cmVnVDAsIENDYWxsSGVscGVyczo6dGltZXNQdHIoKSksIEdQUkluZm86OnJlZ1Q3
KTsKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpDYWxsIGNhbGxBcml0eUZpeHVwID0gaml0LmNhbGwo
KTsKICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgICAgIG1haW5QYXRo
SnVtcHMuYXBwZW5kKGppdC5qdW1wKCkpOwogCi0gICAgICAgIGxpbmtCdWZmZXIgPSBzdGQ6Om1h
a2VfdW5pcXVlPExpbmtCdWZmZXI+KHZtLCBqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25N
dXN0U3VjY2VlZCk7CisgICAgICAgIGxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmtC
dWZmZXI+KHZtLCBqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICAg
ICAgaWYgKGxpbmtCdWZmZXItPmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKKyAgICAgICAgICAgIHN0
YXRlLmFsbG9jYXRpb25GYWlsZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CiAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbEFyaXR5Q2hlY2ssIGNvZGVCbG9jay0+
bV9pc0NvbnN0cnVjdG9yID8gb3BlcmF0aW9uQ29uc3RydWN0QXJpdHlDaGVjayA6IG9wZXJhdGlv
bkNhbGxBcml0eUNoZWNrKTsKICAgICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsQXJpdHlGaXh1
cCwgRnVuY3Rpb25QdHIoKHZtLmdldENUSVN0dWIoYXJpdHlGaXh1cEdlbmVyYXRvcikpLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsobWFpblBh
dGhKdW1wcywgQ29kZUxvY2F0aW9uTGFiZWwoYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0ZS5nZW5l
cmF0ZWRGdW5jdGlvbikpKTsKQEAgLTE5NSw3ICsyMDUsMTEgQEAgdm9pZCBsaW5rKFN0YXRlJiBz
dGF0ZSkKICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgICAgIENDYWxs
SGVscGVyczo6SnVtcCBtYWluUGF0aEp1bXAgPSBqaXQuanVtcCgpOwogICAgICAgICAKLSAgICAg
ICAgbGlua0J1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8TGlua0J1ZmZlcj4odm0sIGppdCwgY29k
ZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKKyAgICAgICAgbGlua0J1ZmZlciA9
IHN0ZDo6bWFrZV91bmlxdWU8TGlua0J1ZmZlcj4odm0sIGppdCwgY29kZUJsb2NrLCBKSVRDb21w
aWxhdGlvbkNhbkZhaWwpOworICAgICAgICBpZiAobGlua0J1ZmZlci0+ZGlkRmFpbFRvQWxsb2Nh
dGUoKSkgeworICAgICAgICAgICAgc3RhdGUuYWxsb2NhdGlvbkZhaWxlZCA9IHRydWU7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAgbGlua0J1ZmZlci0+bGluayhtYWlu
UGF0aEp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGUuZ2Vu
ZXJhdGVkRnVuY3Rpb24pKSk7CiAKICAgICAgICAgc3RhdGUuaml0Q29kZS0+aW5pdGlhbGl6ZUFk
ZHJlc3NGb3JDYWxsKGxpbmtCdWZmZXItPmxvY2F0aW9uT2Yoc3RhcnQpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHJldmlzaW9uIDE4MTk2MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYs
NyBAQCBwdWJsaWM6CiAgICAgTENvbnRleHQgY29udGV4dDsKICAgICBMTW9kdWxlIG1vZHVsZTsK
ICAgICBMVmFsdWUgZnVuY3Rpb247CisgICAgYm9vbCBhbGxvY2F0aW9uRmFpbGVkIHsgZmFsc2Ug
fTsgLy8gVGhyb3cgb3V0IHRoZSBjb21waWxhdGlvbiBvbmNlIExMVk0gcmV0dXJucy4KICAgICBS
ZWZQdHI8SklUQ29kZT4gaml0Q29kZTsKICAgICBHZW5lcmF0ZWRGdW5jdGlvbiBnZW5lcmF0ZWRG
dW5jdGlvbjsKICAgICBKSVRGaW5hbGl6ZXIqIGZpbmFsaXplcjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3Mu
Y3BwCShyZXZpc2lvbiAxODE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0FyaXR5
Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTcsNyArOTcsOSBAQCBD
b2RlTG9jYXRpb25MYWJlbCogQXJpdHlDaGVja0ZhaWxSZXR1cm5UCiAgICAgICAgIGppdC5qdW1w
KEdQUkluZm86OnJlZ1QyKTsKICAgICB9CiAgICAgCi0gICAgTGlua0J1ZmZlciBsaW5rQnVmZmVy
KHZtLCBqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKHZt
LCBqaXQsIEdMT0JBTF9USFVOS19JRCwgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBpZiAo
bGlua0J1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAKICAgICB1bnNpZ25lZCByZXR1cm5QQ3NTaXplID0gbnVtRXhwZWN0ZWRBcmd1bWVudHNJ
bmNsdWRpbmdUaGlzIC8gc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSArIDE7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPENvZGVMb2NhdGlvbkxhYmVsW10+IHJldHVyblBDcyA9CkBAIC0xMjUsNyArMTI3
LDEwIEBAIENvZGVMb2NhdGlvbkxhYmVsKiBBcml0eUNoZWNrRmFpbFJldHVyblQKIAogQ29kZUxv
Y2F0aW9uTGFiZWwgQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3M6OnJldHVyblBDRm9yKFZNJiB2
bSwgdW5zaWduZWQgc2xvdHNUb0FkZCkKIHsKLSAgICByZXR1cm4gcmV0dXJuUENzRm9yKHZtLCBz
bG90c1RvQWRkKVtzbG90c1RvQWRkIC8gc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKV07CisgICAg
Q29kZUxvY2F0aW9uTGFiZWwqIGFycmF5ID0gcmV0dXJuUENzRm9yKHZtLCBzbG90c1RvQWRkKTsK
KyAgICBpZiAoIWFycmF5KQorICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWwoKTsKKyAg
ICByZXR1cm4gYXJyYXlbc2xvdHNUb0FkZCAvIHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCldOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0FyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLmgJKHJldmlzaW9uIDE4MTk2
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVu
a3MuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzksOSArMzksMTEgQEAgcHVibGljOgogICAgIEFyaXR5Q2hl
Y2tGYWlsUmV0dXJuVGh1bmtzKCk7CiAgICAgfkFyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzKCk7
CiAgICAgCi0gICAgLy8gUmV0dXJucyBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgcmV0dXJuIGxh
YmVscyBpbmRleGVkIGJ5IG1pc3NpbmdBcmdzLgorICAgIC8vIFJldHVybnMgYSBwb2ludGVyIHRv
IGFuIGFycmF5IG9mIHJldHVybiBsYWJlbHMgaW5kZXhlZCBieSBtaXNzaW5nQXJncy4gTWlnaHQg
cmV0dXJuIG51bGwKKyAgICAvLyBpZiBleGVjdXRhYmxlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxl
ZC4KICAgICBDb2RlTG9jYXRpb25MYWJlbCogcmV0dXJuUENzRm9yKFZNJiwgdW5zaWduZWQgbnVt
RXhwZWN0ZWRBcmd1bWVudHNJbmNsdWRpbmdUaGlzKTsKICAgICAKKyAgICAvLyBXYXJuaW5nOiB0
aGlzIGNhbiByZXR1cm4gYSBudWxsIGxhYmVsIGlmIGV4ZWN1dGFibGUgbWVtb3J5IGFsbG9jYXRp
b24gZmFpbGVkLgogICAgIENvZGVMb2NhdGlvbkxhYmVsIHJldHVyblBDRm9yKFZNJiwgdW5zaWdu
ZWQgc2xvdHNUb0FkZCk7CiAgICAgCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29s
LmNwcAkocmV2aXNpb24gMTgxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVj
dXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsMTUg
KzE1OCwyMCBAQCBkb3VibGUgRXhlY3V0YWJsZUFsbG9jYXRvcjo6bWVtb3J5UHJlc3N1CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBF
eGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZShWTSYgdm0sIHNpemVfdCBzaXplSW5CeXRlcywg
dm9pZCogb3duZXJVSUQsIEpJVENvbXBpbGF0aW9uRWZmb3J0IGVmZm9ydCkKK1Bhc3NSZWZQdHI8
RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUoVk0m
LCBzaXplX3Qgc2l6ZUluQnl0ZXMsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9y
dCBlZmZvcnQpCiB7CisgICAgaWYgKGVmZm9ydCAhPSBKSVRDb21waWxhdGlvbkNhbkZhaWwgJiYg
T3B0aW9uczo6cmVwb3J0TXVzdFN1Y2NlZWRFeGVjdXRhYmxlQWxsb2NhdGlvbnMoKSkgeworICAg
ICAgICBkYXRhTG9nKCJBbGxvY2F0aW5nICIsIHNpemVJbkJ5dGVzLCAiIGJ5dGVzIG9mIGV4ZWN1
dGFibGUgbWVtb3J5IHdpdGggSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZC5cbiIpOworICAgICAg
ICBXVEZSZXBvcnRCYWNrdHJhY2UoKTsKKyAgICB9CisgICAgCiAgICAgUmVmUHRyPEV4ZWN1dGFi
bGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMs
IG93bmVyVUlEKTsKICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICBpZiAoZWZmb3J0ID09IEpJ
VENvbXBpbGF0aW9uQ2FuRmFpbCkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAg
IHJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KHZtKTsKLSAgICAgICAgcmVzdWx0ID0gYWxsb2NhdG9y
LT5hbGxvY2F0ZShzaXplSW5CeXRlcywgb3duZXJVSUQpOwotICAgICAgICBSRUxFQVNFX0FTU0VS
VChyZXN1bHQpOworICAgICAgICBpZiAoZWZmb3J0ICE9IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCkg
eworICAgICAgICAgICAgZGF0YUxvZygiUmFuIG91dCBvZiBleGVjdXRhYmxlIG1lbW9yeSB3aGls
ZSBhbGxvY2F0aW5nICIsIHNpemVJbkJ5dGVzLCAiIGJ5dGVzLlxuIik7CisgICAgICAgICAgICBD
UkFTSCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICBy
ZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAJKHJldmlzaW9uIDE4MTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTg1LDcgKzU4NSwxMSBAQCBDb21waWxhdGlvblJlc3VsdCBK
SVQ6OnByaXZhdGVDb21waWxlKEpJCiAjZWxzZQogICAgICAgICB0aHVua1JlZyA9IEdQUkluZm86
OnJlZ1Q1OwogI2VuZGlmCi0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3ZtLT5hcml0eUNo
ZWNrRmFpbFJldHVyblRodW5rcy0+cmV0dXJuUENzRm9yKCptX3ZtLCBtX2NvZGVCbG9jay0+bnVt
UGFyYW1ldGVycygpKSksIHRodW5rUmVnKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwqIGZh
aWxUaHVua0xhYmVscyA9CisgICAgICAgICAgICBtX3ZtLT5hcml0eUNoZWNrRmFpbFJldHVyblRo
dW5rcy0+cmV0dXJuUENzRm9yKCptX3ZtLCBtX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsK
KyAgICAgICAgaWYgKCFmYWlsVGh1bmtMYWJlbHMpCisgICAgICAgICAgICByZXR1cm4gQ29tcGls
YXRpb25GYWlsZWQ7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihmYWlsVGh1bmtMYWJlbHMp
LCB0aHVua1JlZyk7CiAgICAgICAgIGxvYWRQdHIoQmFzZUluZGV4KHRodW5rUmVnLCByZWdUMCwg
dGltZXNQdHIoKSksIHRodW5rUmVnKTsKICAgICAgICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRD
VElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3IpLmNvZGUoKSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25FZmZvcnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uRWZmb3J0LmgJKHJldmlzaW9uIDE4
MTk2MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29tcGlsYXRpb25FZmZvcnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShy
ZXZpc2lvbiAxODE5NjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOTMsNyArMjkzLDcgQEAgc3RhdGljIEZ1bmN0aW9uUHRyIGN1
c3RvbUZvcihjb25zdCBQdXRQcgogICAgIHJldHVybiBGdW5jdGlvblB0cihzbG90LmN1c3RvbVNl
dHRlcigpKTsKIH0KIAotc3RhdGljIHZvaWQgZ2VuZXJhdGVCeUlkU3R1YigKK3N0YXRpYyBib29s
IGdlbmVyYXRlQnlJZFN0dWIoCiAgICAgRXhlY1N0YXRlKiBleGVjLCBCeUlkU3R1YktpbmQga2lu
ZCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLAogICAgIEZ1bmN0aW9uUHRyIGN1c3Rv
bSwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNp
emVfdCBjb3VudCwKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBib29sIGxvYWRUYXJnZXRGcm9tUHJveHksIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRT
ZXQsCkBAIC01NzQsNyArNTc0LDkgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVCeUlkU3R1YigKICAg
ICB9CiAgICAgZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNo
LCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwogICAgIAotICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSk7Cisg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygp
LCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9B
bGxvY2F0ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgbGlua1Jlc3RvcmVT
Y3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwg
ZmFpbHVyZUNhc2VzLCBzdWNjZXNzTGFiZWwsIHNsb3dDYXNlTGFiZWwpOwogICAgIGlmIChraW5k
ID09IENhbGxDdXN0b21HZXR0ZXIgfHwga2luZCA9PSBDYWxsQ3VzdG9tU2V0dGVyKSB7CkBAIC02
MDEsNiArNjAzLDggQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVCeUlkU3R1YigKICAgICAgICAgc3R1
YlJvdXRpbmUgPSBhZG9wdFJlZihuZXcgQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUoY29kZSwg
KnZtLCBXVEY6Om1vdmUoY2FsbExpbmtJbmZvKSkpOwogICAgIGVsc2UKICAgICAgICAgc3R1YlJv
dXRpbmUgPSBjcmVhdGVKSVRTdHViUm91dGluZShjb2RlLCAqdm0sIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIHRydWUpOworICAgIAorICAgIHJldHVybiB0cnVlOwogfQogCiBlbnVtIElu
bGluZUNhY2hlQWN0aW9uIHsKQEAgLTY4Nyw3ICs2OTEsOSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5Q2FjaGVHZXRCeUlECiAKICAgICAgICAgICAgIGVtaXRSZXN0b3JlU2NyYXRjaChz
dHViSml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwg
ZmFpbHVyZUNhc2VzKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGNvZGVCbG9jayk7CisgICAgICAgICAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCp2bSwgc3R1YkppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZh
aWwpOworICAgICAgICAgICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKICAgICAgICAgICAgIGxpbmtS
ZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN0dWJJbmZv
LCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwogCkBAIC03MTcsOCArNzIzLDEwIEBAIHN0
YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQKIAogICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CiAKLSAgICAgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGNvZGVCbG9jayk7Ci0KKyAgICAgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRp
b25DYW5GYWlsKTsKKyAgICAgICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkp
CisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgCiAgICAgICAgIHBh
dGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAgICAgIHBhdGNo
QnVmZmVyLmxpbmsoZmFpbHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogCkBAIC04NDQsMTEg
Kzg1MiwxMyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRHZXRCeUlECiAgICAg
fQogICAgIAogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7Ci0gICAgZ2Vu
ZXJhdGVCeUlkU3R1YigKKyAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJZFN0dWIoCiAgICAg
ICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZv
LCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwgCiAgICAgICAgIHN0cnVjdHVyZSwgbG9h
ZFRhcmdldEZyb21Qcm94eSwgc2xvdC53YXRjaHBvaW50U2V0KCksIAogICAgICAgICBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNh
bGxUb0RvbmUpLAogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50U2xvd1Bh
dGhUYXJnZXQoc3R1YkluZm8pKSwgc3R1YlJvdXRpbmUpOworICAgIGlmICghcmVzdWx0KQorICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICAKICAgICBHZXRCeUlkQWNjZXNzOjpBY2Nl
c3NUeXBlIGFjY2Vzc1R5cGU7CiAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpKQpAQCAt
OTAxLDcgKzkxMSw3IEBAIHN0YXRpYyBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIGFwcHJvcHJpYXQK
ICAgICByZXR1cm4gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdDsKIH0KIAotc3Rh
dGljIHZvaWQgZW1pdFB1dFJlcGxhY2VTdHViKAorc3RhdGljIGJvb2wgZW1pdFB1dFJlcGxhY2VT
dHViKAogICAgIEV4ZWNTdGF0ZSogZXhlYywKICAgICBjb25zdCBJZGVudGlmaWVyJiwKICAgICBj
b25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsCkBAIC05NjgsNyArOTc4LDEwIEBAIHN0YXRpYyB2
b2lkIGVtaXRQdXRSZXBsYWNlU3R1YigKICAgICAgICAgZmFpbHVyZSA9IGJhZFN0cnVjdHVyZTsK
ICAgICB9CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGV4
ZWMtPmNvZGVCbG9jaygpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1Ykpp
dCwgZXhlYy0+Y29kZUJsb2NrKCksIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgaWYgKHBh
dGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkpOwogICAg
IHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgZmFpbHVyZUxhYmVsKTsKICAgICAgICAgICAgIApA
QCAtOTc3LDYgKzk5MCw4IEBAIHN0YXRpYyB2b2lkIGVtaXRQdXRSZXBsYWNlU3R1YigKICAgICAg
ICAgKCJQdXRCeUlkIHJlcGxhY2Ugc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsCiAgICAg
ICAgICAgICB0b0NTdHJpbmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAogICAgICAgICAgICAgICAgIHN0dWJJbmZv
LnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIAorICAg
IHJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgU3RydWN0dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0
dWJBbmRHZXRPbGRTdHJ1Y3R1cmUoRXhlY1N0YXRlKiBleGVjLCBWTSogdm0sIFN0cnVjdHVyZSom
IHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIApAQCAtMTIxMyw3ICsxMjI4LDEw
IEBAIHN0YXRpYyBTdHJ1Y3R1cmUqIGVtaXRQdXRUcmFuc2l0aW9uU3R1YkEKICAgICAgICAgc3Vj
Y2Vzc0luU2xvd1BhdGggPSBzdHViSml0Lmp1bXAoKTsKICAgICB9CiAgICAgCi0gICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpKTsKKyAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCksIEpJ
VENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9j
YXRlKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAogICAgIHBhdGNoQnVmZmVyLmxp
bmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1
YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAgaWYgKGFsbG9jYXRvci5kaWRSZXVz
ZVJlZ2lzdGVycygpKQogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUsIGZhaWx1cmVM
YWJlbCk7CkBAIC0xMzA4LDEzICsxMzI2LDE1IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0
cnlDYWNoZVB1dEJ5SUQKICAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKICAg
ICAgICAgbGlzdCA9IFBvbHltb3JwaGljUHV0QnlJZExpc3Q6OmZyb20ocHV0S2luZCwgc3R1Yklu
Zm8pOwogCi0gICAgICAgIGdlbmVyYXRlQnlJZFN0dWIoCisgICAgICAgIGJvb2wgcmVzdWx0ID0g
Z2VuZXJhdGVCeUlkU3R1YigKICAgICAgICAgICAgIGV4ZWMsIGtpbmRGb3Ioc2xvdCksIGlkZW50
LCBjdXN0b21Gb3Ioc2xvdCksIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsCiAgICAg
ICAgICAgICBvZmZzZXQsIHN0cnVjdHVyZSwgZmFsc2UsIG51bGxwdHIsCiAgICAgICAgICAgICBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZWx0YUNhbGxUb0RvbmUpLAogICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSksCiAgICAg
ICAgICAgICBzdHViUm91dGluZSk7Ci0KKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAg
ICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgCiAgICAgICAgIGxpc3QtPmFkZEFjY2Vz
cyhQdXRCeUlkQWNjZXNzOjpzZXR0ZXIoCiAgICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksCiAgICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlU2V0dGVyKCkgPyBQ
dXRCeUlkQWNjZXNzOjpTZXR0ZXIgOiBQdXRCeUlkQWNjZXNzOjpDdXN0b21TZXR0ZXIsCkBAIC0x
MzgzLDEwICsxNDAzLDEyIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlCdWlsZFB1dEJ5
SWQKICAgICAgICAgICAgIHN0cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KCp2
bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFdl
J3JlIG5vdyBjb21taXR0ZWQgdG8gY3JlYXRpbmcgdGhlIHN0dWIuIE1vZ3JpZnkgdGhlIG1ldGEt
ZGF0YSBhY2NvcmRpbmdseS4KLSAgICAgICAgICAgIGVtaXRQdXRSZXBsYWNlU3R1YigKKyAgICAg
ICAgICAgIGJvb2wgcmVzdWx0ID0gZW1pdFB1dFJlcGxhY2VTdHViKAogICAgICAgICAgICAgICAg
IGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIAogICAgICAgICAgICAgICAgIHN0
cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3VycmVudFNsb3dQYXRoVGFyZ2V0KCkp
LCBzdHViUm91dGluZSk7Ci0KKyAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAgICAgCiAgICAgICAgICAgICBsaXN0
LT5hZGRBY2Nlc3MoCiAgICAgICAgICAgICAgICAgUHV0QnlJZEFjY2Vzczo6cmVwbGFjZSgKICAg
ICAgICAgICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLApAQCAt
MTQxNiwxMyArMTQzOCwxNSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRC
eUlkCiAgICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7CiAgICAgICAgIGxpc3Qg
PSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKHB1dEtpbmQsIHN0dWJJbmZvKTsKIAotICAg
ICAgICBnZW5lcmF0ZUJ5SWRTdHViKAorICAgICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJ
ZFN0dWIoCiAgICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBwcm9wZXJ0eU5hbWUsIGN1
c3RvbUZvcihzbG90KSwgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwKICAgICAgICAg
ICAgIG9mZnNldCwgc3RydWN0dXJlLCBmYWxzZSwgbnVsbHB0ciwKICAgICAgICAgICAgIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRh
Q2FsbFRvRG9uZSksCiAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChsaXN0LT5jdXJyZW50
U2xvd1BhdGhUYXJnZXQoKSksCiAgICAgICAgICAgICBzdHViUm91dGluZSk7Ci0KKyAgICAgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAg
CiAgICAgICAgIGxpc3QtPmFkZEFjY2VzcyhQdXRCeUlkQWNjZXNzOjpzZXR0ZXIoCiAgICAgICAg
ICAgICAqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCiAgICAgICAgICAgICBzbG90
LmlzQ2FjaGVhYmxlU2V0dGVyKCkgPyBQdXRCeUlkQWNjZXNzOjpTZXR0ZXIgOiBQdXRCeUlkQWNj
ZXNzOjpDdXN0b21TZXR0ZXIsCkBAIC0xNTQ4LDggKzE1NzIsMTAgQEAgc3RhdGljIElubGluZUNh
Y2hlQWN0aW9uIHRyeVJlcGF0Y2hJbigKICAgICAgICAgCiAgICAgICAgIGVtaXRSZXN0b3JlU2Ny
YXRjaChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2Vzcywg
ZmFpbCwgZmFpbHVyZUNhc2VzKTsKICAgICAgICAgCi0gICAgICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKnZtLCBzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSk7Ci0KKyAgICAgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBKSVRDb21w
aWxhdGlvbkNhbkZhaWwpOworICAgICAgICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2Nh
dGUoKSkKKyAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOworICAgICAgICAKICAgICAg
ICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwg
c3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdWNjZXNzTGFiZWwsIHNsb3dDYXNlTGFiZWwp
OwogICAgICAgICAKICAgICAgICAgc3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVC
KApAQCAtMTg1MSw3ICsxODc3LDExIEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgKICAgICBz
dHViSml0LnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEdQUkluZm86OnJlZ1Q0KTsK
ICAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXAgc2xvdyA9IHN0dWJKaXQuanVtcCgpOwogICAgICAg
ICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1YkppdCwgY2FsbGVyQ29kZUJs
b2NrKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgc3R1YkppdCwgY2FsbGVyQ29k
ZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRG
YWlsVG9BbGxvY2F0ZSgpKSB7CisgICAgICAgIGxpbmtWaXJ0dWFsRm9yKGV4ZWMsIGNhbGxMaW5r
SW5mbywgQ29kZUZvckNhbGwsIHJlZ2lzdGVycyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAg
ICAgCiAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbENhc2VzLnNpemUoKSA9PSBjYWxscy5zaXplKCkp
OwogICAgIGZvciAoQ2FsbFRvQ29kZVB0ciBjYWxsVG9Db2RlUHRyIDogY2FsbHMpIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE4MTk2MSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtOTcsNiArOTcsOCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAg
ICB2KGJvb2wsIHVzZURGR0pJVCwgdHJ1ZSkgXAogICAgIHYoYm9vbCwgdXNlUmVnRXhwSklULCB0
cnVlKSBcCiAgICAgXAorICAgIHYoYm9vbCwgcmVwb3J0TXVzdFN1Y2NlZWRFeGVjdXRhYmxlQWxs
b2NhdGlvbnMsIGZhbHNlKSBcCisgICAgXAogICAgIHYodW5zaWduZWQsIG1heFBlclRocmVhZFN0
YWNrVXNhZ2UsIDQgKiBNQikgXAogICAgIHYodW5zaWduZWQsIHJlc2VydmVkWm9uZVNpemUsIDEy
OCAqIEtCKSBcCiAgICAgdih1bnNpZ25lZCwgZXJyb3JNb2RlUmVzZXJ2ZWRab25lU2l6ZSwgNjQg
KiBLQikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24g
MTgxOTYxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMSwg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMTEsIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
</data>
<flag name="review"
          id="274228"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249435</attachid>
            <date>2015-03-25 15:59:32 -0700</date>
            <delta_ts>2015-03-25 16:40:18 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>84083</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgxOTc5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBA
CisyMDE1LTAzLTI1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VXNlIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCBpbiBtb3JlIHBsYWNlcywgYW5kIG1ha2UgdGhlIGZh
aWwgcGF0aCBvZiBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkIGEgY3Jhc2ggaW5zdGVhZCBvZiBh
dHRlbXB0aW5nIEdDCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDI5OTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgY2hhbmdlcyB0aGUgbW9zdCBjb21tb25seSBpbnZva2VkIHBhdGhz
IHRoYXQgcmVsaWVkIG9uIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQKKyAgICAgICAgaW50byB1
c2luZyBKSVRDb21waWxhdGlvbkNhbkZhaWwgYW5kIGhhdmluZyBhIGxlZ2l0IGZhbGxiYWNrIHBh
dGguIFRoaXMgbW9zdGx5IGludm9sdmVzCisgICAgICAgIGhhdmluZyB0aGUgRlRMIEpJVCBkbyB0
aGUgc2FtZSB0cmljayBhcyB0aGUgREZHIEpJVCBpbiBjYXNlIG9mIGFueSBtZW1vcnkgYWxsb2Nh
dGlvbgorICAgICAgICBmYWlsdXJlLCBidXQgYWxzbyBpbnZvbHZlcyBhZGRpbmcgdGhlIHNhbWUg
a2luZCBvZiB0aGluZyB0byB0aGUgc3R1YiBnZW5lcmF0b3JzIGluCisgICAgICAgIFJlcGF0Y2gu
CisgICAgICAgIAorICAgICAgICBCZWNhdXNlIG9mIHRoYXQgY2hhbmdlLCB0aGVyZSBhcmUgcmVs
YXRpdmVseSBmZXcgdXNlcyBvZiBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLiBNb3N0CisgICAg
ICAgIG9mIHRob3NlIHVzZXMgY2Fubm90IGhhbmRsZSBhIEdDLCBhbmQgc28gY2Fubm90IGRvIHJl
bGVhc2VFeGVjdXRhYmxlTWVtb3J5KCkuIE9ubHkgYSBmZXcsCisgICAgICAgIGxpa2UgaG9zdCBj
YWxsIHN0dWIgZ2VuZXJhdGlvbiwgY291bGQgaGFuZGxlIGEgR0MsIGJ1dCB0aG9zZSBnZXQgaW52
b2tlZCB2ZXJ5IHJhcmVseS4gU28sCisgICAgICAgIHRoaXMgcGF0Y2ggY2hhbmdlcyB0aGUgcmVs
ZWFzZUV4ZWN1dGFibGVNZW1vcnkoKSBjYWxsIGludG8gYSBjcmFzaCB3aXRoIHNvbWUgZGlhZ25v
c3RpYworICAgICAgICBwcmludG91dC4KKyAgICAgICAgCisgICAgICAgIEFsc28gYWRkIGEgd2F5
IG9mIGluZHVjaW5nIGV4ZWN1dGFibGUgYWxsb2NhdGlvbiBmYWlsdXJlLCBzbyB0aGF0IHdlIGNh
biB0ZXN0IHRoaXMuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkZmcvREZH
SklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxl
KToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKToKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmtGdW5jdGlvbik6IERlbGV0ZWQuCisgICAgICAgICog
ZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGZ0bC9G
VExDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjptbUFsbG9jYXRlQ29kZVNlY3Rpb24p
OgorICAgICAgICAoSlNDOjpGVEw6Om1tQWxsb2NhdGVEYXRhU2VjdGlvbik6CisgICAgICAgICog
ZnRsL0ZUTExpbmsuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmxpbmspOgorICAgICAgICAqIGZ0
bC9GVExTdGF0ZS5oOgorICAgICAgICAqIGppdC9Bcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5j
cHA6CisgICAgICAgIChKU0M6OkFyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzOjpyZXR1cm5QQ3NG
b3IpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6bnVtYmVyT2ZFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enpDaGVja3MpOgor
ICAgICAgICAoSlNDOjpkb0V4ZWN1dGFibGVBbGxvY2F0aW9uRnV6emluZyk6CisgICAgICAgICog
aml0L0V4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6ZG9F
eGVjdXRhYmxlQWxsb2NhdGlvbkZ1enppbmdJZkVuYWJsZWQpOgorICAgICAgICAqIGppdC9FeGVj
dXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxl
QWxsb2NhdG9yOjphbGxvY2F0ZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVRDb21waWxhdGlvbkVm
Zm9ydC5oOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6Z2VuZXJh
dGVCeUlkU3R1Yik6CisgICAgICAgIChKU0M6OnRyeUNhY2hlR2V0QnlJRCk6CisgICAgICAgIChK
U0M6OnRyeUJ1aWxkR2V0QnlJRExpc3QpOgorICAgICAgICAoSlNDOjplbWl0UHV0UmVwbGFjZVN0
dWIpOgorICAgICAgICAoSlNDOjplbWl0UHV0VHJhbnNpdGlvblN0dWJBbmRHZXRPbGRTdHJ1Y3R1
cmUpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQpOgorICAgICAgICAoSlNDOjp0cnlC
dWlsZFB1dEJ5SWRMaXN0KToKKyAgICAgICAgKEpTQzo6dHJ5UmVwYXRjaEluKToKKyAgICAgICAg
KEpTQzo6bGlua1BvbHltb3JwaGljQ2FsbCk6CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAg
KGpzY21haW4pOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAqIHJ1bnRp
bWUvVGVzdFJ1bm5lclV0aWxzLmg6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAg
ICogdGVzdHMvZXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6OiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0
cy9leGVjdXRhYmxlQWxsb2NhdGlvbkZ1enoueWFtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMv
ZXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6L3Y4LXJheXRyYWNlLmpzOiBBZGRlZC4KKwogMjAxNS0w
My0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIENoYW5nZSBB
dG9taWMgbWV0aG9kcyBmcm9tIHVzaW5nIHRoZV93cm9uZ19uYW1pbmdfY29udmVudGlvbnMgdG8g
dXNpbmcgdGhlUmlnaHROYW1pbmdDb252ZW50aW9ucy4gQWxzbyBtYWtlIHNlcV9jc3QgdGhlIGRl
ZmF1bHQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAx
ODE5NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTMyNiw2ICszMjYsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAg
IGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCiAgICAgaml0L0FyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1
bmtzLmNwcAogICAgIGppdC9CaW5hcnlTd2l0Y2guY3BwCisgICAgaml0L0V4ZWN1dGFibGVBbGxv
Y2F0aW9uRnV6ei5jcHAKICAgICBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKICAgICBqaXQv
RXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcAogICAgIGppdC9HQ0F3YXJlSklUU3R1
YlJvdXRpbmUuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24gMTgxOTc5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OTgs
NiArMTQ5OCwxMCBAQCBpbnQganNjbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAjaWYgRU5B
QkxFKEpJVCkKICAgICAgICAgaWYgKE9wdGlvbnM6OmVuYWJsZUV4Y2VwdGlvbkZ1enooKSkKICAg
ICAgICAgICAgIHByaW50ZigiSlNDIEVYQ0VQVElPTiBGVVpaOiBlbmNvdW50ZXJlZCAldSBjaGVj
a3MuXG4iLCBudW1iZXJPZkV4Y2VwdGlvbkZ1enpDaGVja3MoKSk7CisgICAgICAgIGJvb2wgZmly
ZUF0RW5hYmxlZCA9CisgICAgICAgICAgICBPcHRpb25zOjpmaXJlRXhlY3V0YWJsZUFsbG9jYXRp
b25GdXp6QXQoKSB8fCBPcHRpb25zOjpmaXJlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6QXRPckFm
dGVyKCk7CisgICAgICAgIGlmIChPcHRpb25zOjplbmFibGVFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1
enooKSAmJiAoIWZpcmVBdEVuYWJsZWQgfHwgT3B0aW9uczo6dmVyYm9zZUV4ZWN1dGFibGVBbGxv
Y2F0aW9uRnV6eigpKSkKKyAgICAgICAgICAgIHByaW50ZigiSlNDIEVYRUNVVEFCTEUgQUxMT0NB
VElPTiBGVVpaOiBlbmNvdW50ZXJlZCAldSBjaGVja3MuXG4iLCBudW1iZXJPZkV4ZWN1dGFibGVB
bGxvY2F0aW9uRnV6ekNoZWNrcygpKTsKICNlbmRpZgogICAgIH0KICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTgxOTc5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTk4LDYgKzU5OCw3IEBACiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxqaXRcQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEFzc2VtYmx5SGVscGVycy5jcHAiIC8+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcQmluYXJ5U3dpdGNoLmNwcCIgLz4KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGppdFxFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEV4ZWN1dGFibGVBbGxvY2F0b3IuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caml0XEV4ZWN1dGFibGVBbGxvY2F0b3JGaXhl
ZFZNUG9vbC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxqaXRcR0NBd2FyZUpJ
VFN0dWJSb3V0aW5lLmNwcCIgLz4KQEAgLTEzNDAsNiArMTM0MSw3IEBACiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxqaXRcQmluYXJ5U3dpdGNoLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxqaXRcQ0NhbGxIZWxwZXJzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxqaXRcQ29tcGFjdEpJVENvZGVNYXAuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGppdFxFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGppdFxFeGVjdXRhYmxlQWxsb2NhdG9yLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxqaXRcRlBSSW5mby5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caml0
XEdDQXdhcmVKSVRTdHViUm91dGluZS5oIiAvPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDE4MTk3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NDYs
NiArNjQ2LDggQEAKIAkJMEZFRTk4NDMxQTg5MjI3NTAwNzU0RTkzIC8qIFNldHVwVmFyYXJnc0Zy
YW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUU5ODQyMUE4OTIyNzUwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5jcHAgKi87IH07CiAJ
CTBGRUZDOUFBMTY4MUEzQjMwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUZDOUE3
MTY4MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNwcCAqLzsgfTsK
IAkJMEZFRkM5QUIxNjgxQTNCNjAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUZDOUE4
MTY4MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGMDU0RjkxQUMzNUI0
NDAwRTVCRTU3IC8qIEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkYwNTRGNzFBQzM1QjQ0MDBFNUJFNTcg
LyogRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmNwcCAqLzsgfTsKKwkJMEZGMDU0RkExQUMzNUI0
NDAwRTVCRTU3IC8qIEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGMDU0RjgxQUMzNUI0NDAwRTVCRTU3IC8q
IEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGRjBGMTk5MTZCNzI5RjYwMDVERjk1QiAvKiBERkdMb25n
TGl2ZWRTdGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkI0QjUxQzE2QjYyNzcyMDAzRjY5NkIgLyogREZHTG9uZ0xpdmVkU3RhdGUuY3BwICov
OyB9OwogCQkwRkYwRjE5QjE2QjcyOUZBMDA1REY5NUIgLyogREZHTG9uZ0xpdmVkU3RhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjRCNTFEMTZC
NjI3NzIwMDNGNjk2QiAvKiBERkdMb25nTGl2ZWRTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjBGMTlDMTZCNzJBMDMwMDVERjk1QiAv
KiBERkdOb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQjRCNTFFMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdOb2RlLmNwcCAqLzsgfTsKQEAgLTIz
NDksNiArMjM1MSw4IEBACiAJCTBGRUU5ODQyMUE4OTIyNzUwMDc1NEU5MyAvKiBTZXR1cFZhcmFy
Z3NGcmFtZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZXR1cFZh
cmFyZ3NGcmFtZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUZDOUE3MTY4
MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3Bw
OyBwYXRoID0gZGZnL0RGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkVGQzlBODE2ODFBM0IwMDA1NjdGNTMgLyogREZHT1NSRXhpdEp1
bXBQbGFjZWhvbGRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JF
eGl0SnVtcFBsYWNlaG9sZGVyLmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkYwNTRGNzFBQzM1QjQ0MDBFNUJF
NTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRjA1NEY4MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxl
QWxsb2NhdGlvbkZ1enouaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhlY3V0
YWJsZUFsbG9jYXRpb25GdXp6Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjQy
NzJGMTU4RUJENDQwMDRDQjlGRiAvKiBEaXNhc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gRGlzYXNzZW1ibGVyLmg7IHBhdGggPSBkaXNhc3NlbWJsZXIvRGlzYXNz
ZW1ibGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjQyNzMwMTU4RUJENDQw
MDRDQjlGRiAvKiBVRGlzODZEaXNhc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gVURpczg2RGlzYXNzZW1ibGVyLmNwcDsgcGF0aCA9IGRpc2Fzc2VtYmxl
ci9VRGlzODZEaXNhc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkY0MjczNDE1OEVCRDk0MDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5jICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmM7IG5hbWUgPSB1ZGlzODZfZGVjb2RlLmM7IHBhdGggPSBkaXNhc3NlbWJsZXIv
dWRpczg2L3VkaXM4Nl9kZWNvZGUuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM4
MDEsNiArMzgwNSw4IEBACiAJCTE0MjlEOTJDMEVEMjJENzAwMEI4OTYxOSAvKiBqaXQgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGRjA1NEY3MUFDMzVC
NDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouY3BwICovLAorCQkJCTBGRjA1
NEY4MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouaCAqLywKIAkJ
CQkwRjc1NzZEMDE4RTFGRUU5MDAyRUY0Q0QgLyogQWNjZXNzb3JDYWxsSklUU3R1YlJvdXRpbmUu
Y3BwICovLAogCQkJCTBGNzU3NkQxMThFMUZFRTkwMDJFRjRDRCAvKiBBY2Nlc3NvckNhbGxKSVRT
dHViUm91dGluZS5oICovLAogCQkJCTBGNkIxQ0M3MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNo
ZWNrRmFpbFJldHVyblRodW5rcy5jcHAgKi8sCkBAIC01NjE5LDYgKzU2MjUsNyBAQAogCQkJCUE3
MDREOTAzMTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzA0RDkwNDE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIwMTc3MTQzRkNEM0YwMDY4
Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkYwNTRGQTFB
QzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjY2RTE2QjE0REYzRjE2MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMTgxNkQwMkVCMjAwNTVBNURCIC8qIERGR0FsbG9jYXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczNzgxMEMxNzk5RUEyRTAwODE3NTMzIC8qIERGR0Fu
YWx5c2lzLmggaW4gSGVhZGVycyAqLywKQEAgLTcyMjksNiArNzIzNiw3IEBACiAJCQkJMEYyQjY2
RkExN0I2QjVBQjAwQTdBRTNGIC8qIEpTVHlwZWRBcnJheUNvbnN0cnVjdG9ycy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjJCNjZGQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5UHJv
dG90eXBlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCNjZGRTE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNUeXBlZEFycmF5cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkYwNTRGOTFBQzM1QjQ0
MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTg2RTNDNjFBMTY3QkFCRUUwMDZENzYwQSAvKiBKU1ZhbHVlLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTRCRDVBMzIwQTNFOTFGNjAwQkFGNTlDIC8qIEpTVmFsdWVSZWYuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ3RjM5RDcxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTRW52aXJvbm1lbnRSZWNv
cmQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTgxOTc5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNSwxMCAr
MzI1LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZSgpCiAgICAgLy8gQ3JlYXRlIE9TUiBl
bnRyeSB0cmFtcG9saW5lcyBpZiBuZWNlc3NhcnkuCiAgICAgbV9zcGVjdWxhdGl2ZS0+Y3JlYXRl
T1NSRW50cmllcygpOwogICAgIHNldEVuZE9mQ29kZSgpOwotfQogCi12b2lkIEpJVENvbXBpbGVy
OjpsaW5rKCkKLXsKICAgICBhdXRvIGxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmtC
dWZmZXI+KCptX3ZtLCAqdGhpcywgbV9jb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7
CiAgICAgaWYgKGxpbmtCdWZmZXItPmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKICAgICAgICAgbV9n
cmFwaC5tX3BsYW4uZmluYWxpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxGYWlsZWRGaW5hbGl6ZXI+
KG1fZ3JhcGgubV9wbGFuKTsKQEAgLTQxMiw3ICs0MDksOSBAQCB2b2lkIEpJVENvbXBpbGVyOjpj
b21waWxlRnVuY3Rpb24oKQogI2Vsc2UKICAgICB0aHVua1JlZyA9IEdQUkluZm86OnJlZ1Q1Owog
I2VuZGlmCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fdm0tPmFyaXR5Q2hlY2tGYWlsUmV0dXJu
VGh1bmtzLT5yZXR1cm5QQ3NGb3IoKm1fdm0sIG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkp
KSwgdGh1bmtSZWcpOworICAgIENvZGVMb2NhdGlvbkxhYmVsKiBhcml0eVRodW5rTGFiZWxzID0K
KyAgICAgICAgbV92bS0+YXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MtPnJldHVyblBDc0Zvcigq
bV92bSwgbV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7CisgICAgbW92ZShUcnVzdGVkSW1t
UHRyKGFyaXR5VGh1bmtMYWJlbHMpLCB0aHVua1JlZyk7CiAgICAgbG9hZFB0cihCYXNlSW5kZXgo
dGh1bmtSZWcsIEdQUkluZm86OnJlZ1QwLCB0aW1lc1B0cigpKSwgdGh1bmtSZWcpOwogICAgIG1f
Y2FsbEFyaXR5Rml4dXAgPSBjYWxsKCk7CiAgICAganVtcChmcm9tQXJpdHlDaGVjayk7CkBAIC00
MjYsMTAgKzQyNSw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbigpCiAgICAg
Ly8gQ3JlYXRlIE9TUiBlbnRyeSB0cmFtcG9saW5lcyBpZiBuZWNlc3NhcnkuCiAgICAgbV9zcGVj
dWxhdGl2ZS0+Y3JlYXRlT1NSRW50cmllcygpOwogICAgIHNldEVuZE9mQ29kZSgpOwotfQogCi12
b2lkIEpJVENvbXBpbGVyOjpsaW5rRnVuY3Rpb24oKQotewogICAgIC8vID09PSBMaW5rID09PQog
ICAgIGF1dG8gbGlua0J1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8TGlua0J1ZmZlcj4oKm1fdm0s
ICp0aGlzLCBtX2NvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKICAgICBpZiAobGlu
a0J1ZmZlci0+ZGlkRmFpbFRvQWxsb2NhdGUoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gMTgxOTc5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEs
OSArMTExLDYgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZSgpOwogICAgIHZvaWQgY29tcGls
ZUZ1bmN0aW9uKCk7CiAgICAgCi0gICAgdm9pZCBsaW5rKCk7Ci0gICAgdm9pZCBsaW5rRnVuY3Rp
b24oKTsKLQogICAgIC8vIEFjY2Vzc29ycyBmb3IgcHJvcGVydGllcy4KICAgICBHcmFwaCYgZ3Jh
cGgoKSB7IHJldHVybiBtX2dyYXBoOyB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE4MTk3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5OSwxMyArMjk5LDEwIEBAIFBs
YW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgZHVtcEFuZFZl
cmlmeUdyYXBoKGRmZywgIkdyYXBoIGFmdGVyIG9wdGltaXphdGlvbjoiKTsKICAgICAgICAgCiAg
ICAgICAgIEpJVENvbXBpbGVyIGRhdGFGbG93SklUKGRmZyk7Ci0gICAgICAgIGlmIChjb2RlQmxv
Y2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKSB7CisgICAgICAgIGlmIChjb2RlQmxvY2st
PmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQogICAgICAgICAgICAgZGF0YUZsb3dKSVQuY29t
cGlsZUZ1bmN0aW9uKCk7Ci0gICAgICAgICAgICBkYXRhRmxvd0pJVC5saW5rRnVuY3Rpb24oKTsK
LSAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgZGF0YUZsb3dKSVQu
Y29tcGlsZSgpOwotICAgICAgICAgICAgZGF0YUZsb3dKSVQubGluaygpOwotICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICByZXR1cm4gREZHUGF0aDsKICAgICB9CkBAIC00MDQsNiArNDAxLDEx
IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICAgICAgICAg
IEZUTDo6ZmFpbChzdGF0ZSk7CiAgICAgICAgICAgICByZXR1cm4gRlRMUGF0aDsKICAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgaWYgKHN0YXRlLmFsbG9jYXRpb25GYWlsZWQpIHsKKyAgICAg
ICAgICAgIEZUTDo6ZmFpbChzdGF0ZSk7CisgICAgICAgICAgICByZXR1cm4gRlRMUGF0aDsKKyAg
ICAgICAgfQogCiAgICAgICAgIGlmIChzdGF0ZS5qaXRDb2RlLT5zdGFja21hcHMuc3RhY2tTaXpl
KCkgPiBPcHRpb25zOjpsbHZtTWF4U3RhY2tTaXplKCkpIHsKICAgICAgICAgICAgIEZUTDo6ZmFp
bChzdGF0ZSk7CkBAIC00MTEsNiArNDEzLDEyIEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFu
Ojpjb21waWxlSW5UaHIKICAgICAgICAgfQogCiAgICAgICAgIEZUTDo6bGluayhzdGF0ZSk7Cisg
ICAgICAgIAorICAgICAgICBpZiAoc3RhdGUuYWxsb2NhdGlvbkZhaWxlZCkgeworICAgICAgICAg
ICAgRlRMOjpmYWlsKHN0YXRlKTsKKyAgICAgICAgICAgIHJldHVybiBGVExQYXRoOworICAgICAg
ICB9CisgICAgICAgIAogICAgICAgICByZXR1cm4gRlRMUGF0aDsKICNlbHNlCiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE4MTk3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDE3IEBA
IHN0YXRpYyB1aW50OF90KiBtbUFsbG9jYXRlQ29kZVNlY3Rpb24oCiAgICAgCiAgICAgUmVmUHRy
PEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9CiAgICAgICAgIHN0YXRlLmdyYXBoLm1f
dm0uZXhlY3V0YWJsZUFsbG9jYXRvci5hbGxvY2F0ZSgKLSAgICAgICAgICAgIHN0YXRlLmdyYXBo
Lm1fdm0sIHNpemUsIHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RT
dWNjZWVkKTsKKyAgICAgICAgICAgIHN0YXRlLmdyYXBoLm1fdm0sIHNpemUsIHN0YXRlLmdyYXBo
Lm1fY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIAorICAgIGlmICghcmVz
dWx0KSB7CisgICAgICAgIC8vIFNpZ25hbCBmYWlsdXJlLiBUaGlzIGNvbXBpbGF0aW9uIHdpbGwg
Z2V0IHRvc3NlZC4KKyAgICAgICAgc3RhdGUuYWxsb2NhdGlvbkZhaWxlZCA9IHRydWU7CisgICAg
ICAgIAorICAgICAgICAvLyBGYWtlIGFuIGFsbG9jYXRpb24sIHNpbmNlIExMVk0gY2Fubm90IGhh
bmRsZSBmYWlsdXJlcyBpbiB0aGUgbWVtb3J5IG1hbmFnZXIuCisgICAgICAgIFJlZlB0cjxEYXRh
U2VjdGlvbj4gZmFrZVNlY3Rpb24gPSBhZG9wdFJlZihuZXcgRGF0YVNlY3Rpb24oc2l6ZSwgaml0
QWxsb2NhdGlvbkdyYW51bGUpKTsKKyAgICAgICAgc3RhdGUuaml0Q29kZS0+YWRkRGF0YVNlY3Rp
b24oZmFrZVNlY3Rpb24pOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnQ4X3QqPihm
YWtlU2VjdGlvbi0+YmFzZSgpKTsKKyAgICB9CiAgICAgCiAgICAgLy8gTExWTSB1c2VkIHRvIHB1
dCBfX2NvbXBhY3RfdW53aW5kIGluIGEgY29kZSBzZWN0aW9uLiBXZSBrZWVwIHRoaXMgaGVyZSBk
ZWZlbnNpdmVseSwKICAgICAvLyBmb3IgY2xpZW50cyB0aGF0IHVzZSBvbGRlciBMTFZNcy4KQEAg
LTM0NCw3ICszNTQsMTEgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBz
KAogICAgICAgICBjaGVja0pJVC5qdW1wVG9FeGNlcHRpb25IYW5kbGVyKCk7CiAKICAgICAgICAg
YXV0byBsaW5rQnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTxMaW5rQnVmZmVyPigKLSAgICAgICAg
ICAgIHZtLCBjaGVja0pJVCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsK
KyAgICAgICAgICAgIHZtLCBjaGVja0pJVCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZh
aWwpOworICAgICAgICBpZiAobGlua0J1ZmZlci0+ZGlkRmFpbFRvQWxsb2NhdGUoKSkgeworICAg
ICAgICAgICAgc3RhdGUuYWxsb2NhdGlvbkZhaWxlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KICAgICAgICAgbGlua0J1ZmZlci0+bGluayhjYWxsTG9va3VwRXhjZXB0
aW9uSGFuZGxlciwgRnVuY3Rpb25QdHIobG9va3VwRXhjZXB0aW9uSGFuZGxlcikpOwogICAgICAg
ICBsaW5rQnVmZmVyLT5saW5rKGNhbGxMb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZy
YW1lLCBGdW5jdGlvblB0cihsb29rdXBFeGNlcHRpb25IYW5kbGVyRnJvbUNhbGxlckZyYW1lKSk7
CiAKQEAgLTM1OCw3ICszNzIsMTEgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3Rh
Y2tNYXBzKAogICAgICAgICBSRUxFQVNFX0FTU0VSVChkaWRTZWVVbndpbmRJbmZvKTsKICAgICAg
ICAgCiAgICAgICAgIGF1dG8gbGlua0J1ZmZlciA9IHN0ZDo6bWFrZV91bmlxdWU8TGlua0J1ZmZl
cj4oCi0gICAgICAgICAgICB2bSwgZXhpdFRodW5rR2VuZXJhdG9yLCBjb2RlQmxvY2ssIEpJVENv
bXBpbGF0aW9uTXVzdFN1Y2NlZWQpOworICAgICAgICAgICAgdm0sIGV4aXRUaHVua0dlbmVyYXRv
ciwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgICAgICBpZiAobGlua0J1
ZmZlci0+ZGlkRmFpbFRvQWxsb2NhdGUoKSkgeworICAgICAgICAgICAgc3RhdGUuYWxsb2NhdGlv
bkZhaWxlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRlLmZpbmFsaXplci0+b3NyRXhpdC5zaXplKCkg
PT0gc3RhdGUuaml0Q29kZS0+b3NyRXhpdC5zaXplKCkpOwogICAgICAgICAKQEAgLTUxNiw3ICs1
MzQsMTEgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAg
ICBleGNlcHRpb25UYXJnZXQubGluaygmc2xvd1BhdGhKSVQpOwogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBleGNlcHRpb25KdW1wID0gc2xvd1BhdGhKSVQuanVtcCgpOwogICAgICAgICAK
LSAgICAgICAgc3RhdGUuZmluYWxpemVyLT5zaWRlQ29kZUxpbmtCdWZmZXIgPSBzdGQ6Om1ha2Vf
dW5pcXVlPExpbmtCdWZmZXI+KHZtLCBzbG93UGF0aEpJVCwgY29kZUJsb2NrLCBKSVRDb21waWxh
dGlvbk11c3RTdWNjZWVkKTsKKyAgICAgICAgc3RhdGUuZmluYWxpemVyLT5zaWRlQ29kZUxpbmtC
dWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExpbmtCdWZmZXI+KHZtLCBzbG93UGF0aEpJVCwgY29k
ZUJsb2NrLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgICAgICBpZiAoc3RhdGUuZmluYWxp
emVyLT5zaWRlQ29kZUxpbmtCdWZmZXItPmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKKyAgICAgICAg
ICAgIHN0YXRlLmFsbG9jYXRpb25GYWlsZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CiAgICAgICAgIHN0YXRlLmZpbmFsaXplci0+c2lkZUNvZGVMaW5rQnVmZmVyLT5s
aW5rKAogICAgICAgICAgICAgZXhjZXB0aW9uSnVtcCwgc3RhdGUuZmluYWxpemVyLT5oYW5kbGVF
eGNlcHRpb25zTGlua0J1ZmZlci0+ZW50cnlwb2ludCgpKTsKICAgICAgICAgCkBAIC02NzUsMTMg
KzY5NywxNyBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6OlJlCiAgICAg
ICAgICAgICBkYXRhTG9nKCJGQVRBTDogQ291bGQgbm90IGNyZWF0ZSBMTFZNIGV4ZWN1dGlvbiBl
bmdpbmU6ICIsIGVycm9yLCAiXG4iKTsKICAgICAgICAgICAgIENSQVNIKCk7CiAgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Ugbm8gbG9uZ2VyIG93biB0aGUg
bW9kdWxlLgorICAgICAgICBMTW9kdWxlIG1vZHVsZSA9IHN0YXRlLm1vZHVsZTsKKyAgICAgICAg
c3RhdGUubW9kdWxlID0gbnVsbHB0cjsKIAogICAgICAgICAvLyBUaGUgZGF0YSBsYXlvdXQgYWxz
byBoYXMgdG8gYmUgc2V0IGluIHRoZSBtb2R1bGUuIEdldCB0aGUgZGF0YSBsYXlvdXQgZnJvbSB0
aGUgTUNKSVQgYW5kIGFwcGx5CiAgICAgICAgIC8vIGl0IHRvIHRoZSBtb2R1bGUuCiAgICAgICAg
IExMVk1UYXJnZXRNYWNoaW5lUmVmIHRhcmdldE1hY2hpbmUgPSBsbHZtLT5HZXRFeGVjdXRpb25F
bmdpbmVUYXJnZXRNYWNoaW5lKGVuZ2luZSk7CiAgICAgICAgIExMVk1UYXJnZXREYXRhUmVmIHRh
cmdldERhdGEgPSBsbHZtLT5HZXRFeGVjdXRpb25FbmdpbmVUYXJnZXREYXRhKGVuZ2luZSk7CiAg
ICAgICAgIGNoYXIqIHN0cmluZ1JlcE9mVGFyZ2V0RGF0YSA9IGxsdm0tPkNvcHlTdHJpbmdSZXBP
ZlRhcmdldERhdGEodGFyZ2V0RGF0YSk7Ci0gICAgICAgIGxsdm0tPlNldERhdGFMYXlvdXQoc3Rh
dGUubW9kdWxlLCBzdHJpbmdSZXBPZlRhcmdldERhdGEpOworICAgICAgICBsbHZtLT5TZXREYXRh
TGF5b3V0KG1vZHVsZSwgc3RyaW5nUmVwT2ZUYXJnZXREYXRhKTsKICAgICAgICAgZnJlZShzdHJp
bmdSZXBPZlRhcmdldERhdGEpOwogCiAgICAgICAgIExMVk1QYXNzTWFuYWdlclJlZiBmdW5jdGlv
blBhc3NlcyA9IDA7CkBAIC03MDcsMTQgKzczMywxNCBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0
YXRlLCBTYWZlcG9pbnQ6OlJlCiAgICAgICAgICAgICBsbHZtLT5BZGRDRkdTaW1wbGlmaWNhdGlv
blBhc3MobW9kdWxlUGFzc2VzKTsKICAgICAgICAgICAgIGxsdm0tPkFkZERlYWRTdG9yZUVsaW1p
bmF0aW9uUGFzcyhtb2R1bGVQYXNzZXMpOwogCi0gICAgICAgICAgICBsbHZtLT5SdW5QYXNzTWFu
YWdlcihtb2R1bGVQYXNzZXMsIHN0YXRlLm1vZHVsZSk7CisgICAgICAgICAgICBsbHZtLT5SdW5Q
YXNzTWFuYWdlcihtb2R1bGVQYXNzZXMsIG1vZHVsZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBMTFZNUGFzc01hbmFnZXJCdWlsZGVyUmVmIHBhc3NCdWlsZGVyID0gbGx2bS0+UGFz
c01hbmFnZXJCdWlsZGVyQ3JlYXRlKCk7CiAgICAgICAgICAgICBsbHZtLT5QYXNzTWFuYWdlckJ1
aWxkZXJTZXRPcHRMZXZlbChwYXNzQnVpbGRlciwgT3B0aW9uczo6bGx2bU9wdGltaXphdGlvbkxl
dmVsKCkpOwogICAgICAgICAgICAgbGx2bS0+UGFzc01hbmFnZXJCdWlsZGVyVXNlSW5saW5lcldp
dGhUaHJlc2hvbGQocGFzc0J1aWxkZXIsIDI3NSk7CiAgICAgICAgICAgICBsbHZtLT5QYXNzTWFu
YWdlckJ1aWxkZXJTZXRTaXplTGV2ZWwocGFzc0J1aWxkZXIsIE9wdGlvbnM6Omxsdm1TaXplTGV2
ZWwoKSk7CiAgICAgICAgIAotICAgICAgICAgICAgZnVuY3Rpb25QYXNzZXMgPSBsbHZtLT5DcmVh
dGVGdW5jdGlvblBhc3NNYW5hZ2VyRm9yTW9kdWxlKHN0YXRlLm1vZHVsZSk7CisgICAgICAgICAg
ICBmdW5jdGlvblBhc3NlcyA9IGxsdm0tPkNyZWF0ZUZ1bmN0aW9uUGFzc01hbmFnZXJGb3JNb2R1
bGUobW9kdWxlKTsKICAgICAgICAgICAgIG1vZHVsZVBhc3NlcyA9IGxsdm0tPkNyZWF0ZVBhc3NN
YW5hZ2VyKCk7CiAgICAgICAgIAogICAgICAgICAgICAgbGx2bS0+QWRkVGFyZ2V0RGF0YShsbHZt
LT5HZXRFeGVjdXRpb25FbmdpbmVUYXJnZXREYXRhKGVuZ2luZSksIG1vZHVsZVBhc3Nlcyk7CkBA
IC03MjUsMTEgKzc1MSwxMSBAQCB2b2lkIGNvbXBpbGUoU3RhdGUmIHN0YXRlLCBTYWZlcG9pbnQ6
OlJlCiAgICAgICAgICAgICBsbHZtLT5QYXNzTWFuYWdlckJ1aWxkZXJEaXNwb3NlKHBhc3NCdWls
ZGVyKTsKICAgICAgICAgCiAgICAgICAgICAgICBsbHZtLT5Jbml0aWFsaXplRnVuY3Rpb25QYXNz
TWFuYWdlcihmdW5jdGlvblBhc3Nlcyk7Ci0gICAgICAgICAgICBmb3IgKExWYWx1ZSBmdW5jdGlv
biA9IGxsdm0tPkdldEZpcnN0RnVuY3Rpb24oc3RhdGUubW9kdWxlKTsgZnVuY3Rpb247IGZ1bmN0
aW9uID0gbGx2bS0+R2V0TmV4dEZ1bmN0aW9uKGZ1bmN0aW9uKSkKKyAgICAgICAgICAgIGZvciAo
TFZhbHVlIGZ1bmN0aW9uID0gbGx2bS0+R2V0Rmlyc3RGdW5jdGlvbihtb2R1bGUpOyBmdW5jdGlv
bjsgZnVuY3Rpb24gPSBsbHZtLT5HZXROZXh0RnVuY3Rpb24oZnVuY3Rpb24pKQogICAgICAgICAg
ICAgICAgIGxsdm0tPlJ1bkZ1bmN0aW9uUGFzc01hbmFnZXIoZnVuY3Rpb25QYXNzZXMsIGZ1bmN0
aW9uKTsKICAgICAgICAgICAgIGxsdm0tPkZpbmFsaXplRnVuY3Rpb25QYXNzTWFuYWdlcihmdW5j
dGlvblBhc3Nlcyk7CiAgICAgICAgIAotICAgICAgICAgICAgbGx2bS0+UnVuUGFzc01hbmFnZXIo
bW9kdWxlUGFzc2VzLCBzdGF0ZS5tb2R1bGUpOworICAgICAgICAgICAgbGx2bS0+UnVuUGFzc01h
bmFnZXIobW9kdWxlUGFzc2VzLCBtb2R1bGUpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHNo
b3VsZFNob3dEaXNhc3NlbWJseSgpIHx8IHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKQEAg
LTc0MywxMCArNzY5LDE0IEBAIHZvaWQgY29tcGlsZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6
UmUKICAgICAgICAgbGx2bS0+RGlzcG9zZVBhc3NNYW5hZ2VyKG1vZHVsZVBhc3Nlcyk7CiAgICAg
ICAgIGxsdm0tPkRpc3Bvc2VFeGVjdXRpb25FbmdpbmUoZW5naW5lKTsKICAgICB9CisKICAgICBp
ZiAoc2FmZXBvaW50UmVzdWx0LmRpZEdldENhbmNlbGxlZCgpKQogICAgICAgICByZXR1cm47CiAg
ICAgUkVMRUFTRV9BU1NFUlQoIXN0YXRlLmdyYXBoLm1fdm0uaGVhcC5pc0NvbGxlY3RpbmcoKSk7
CiAgICAgCisgICAgaWYgKHN0YXRlLmFsbG9jYXRpb25GYWlsZWQpCisgICAgICAgIHJldHVybjsK
KyAgICAKICAgICBpZiAoc2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkpIHsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRlLmppdENvZGUtPmhhbmRsZXMoKS5zaXplKCk7ICsraSkg
ewogICAgICAgICAgICAgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogaGFuZGxlID0gc3RhdGUuaml0
Q29kZS0+aGFuZGxlcygpW2ldLmdldCgpOwpAQCAtODAyLDYgKzgzMiw4IEBAIHZvaWQgY29tcGls
ZShTdGF0ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKICAgICAgICAgZml4RnVuY3Rpb25CYXNlZE9u
U3RhY2tNYXBzKAogICAgICAgICAgICAgc3RhdGUsIHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLCBz
dGF0ZS5qaXRDb2RlLmdldCgpLCBzdGF0ZS5nZW5lcmF0ZWRGdW5jdGlvbiwKICAgICAgICAgICAg
IHJlY29yZE1hcCwgZGlkU2VlVW53aW5kSW5mbyk7CisgICAgICAgIGlmIChzdGF0ZS5hbGxvY2F0
aW9uRmFpbGVkKQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAgICAgaWYgKHNo
b3VsZFNob3dEaXNhc3NlbWJseSgpIHx8IE9wdGlvbnM6OmFzeW5jRGlzYXNzZW1ibHkoKSkgewog
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRlLmppdENvZGUtPmhhbmRs
ZXMoKS5zaXplKCk7ICsraSkgewpAQCAtODMwLDggKzg2Miw2IEBAIHZvaWQgY29tcGlsZShTdGF0
ZSYgc3RhdGUsIFNhZmVwb2ludDo6UmUKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
LSAgICAKLSAgICBzdGF0ZS5tb2R1bGUgPSAwOyAvLyBXZSBubyBsb25nZXIgb3duIHRoZSBtb2R1
bGUuCiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTGluay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMaW5rLmNwcAkocmV2aXNpb24gMTgxOTc5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMaW5rLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDEzICsxNzEsMTkg
QEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkKICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxv
Z3VlKCk7CiAgICAgICAgIG1haW5QYXRoSnVtcHMuYXBwZW5kKGppdC5icmFuY2hUZXN0MzIoQ0Nh
bGxIZWxwZXJzOjpaZXJvLCBHUFJJbmZvOjpyZWdUMCkpOwogICAgICAgICBqaXQuZW1pdEZ1bmN0
aW9uUHJvbG9ndWUoKTsKLSAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKHZtLmFyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLT5yZXR1cm5QQ3NGb3Iodm0sIGNvZGVC
bG9jay0+bnVtUGFyYW1ldGVycygpKSksIEdQUkluZm86OnJlZ1Q3KTsKKyAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwqIGFyaXR5VGh1bmtMYWJlbHMgPQorICAgICAgICAgICAgdm0uYXJpdHlDaGVj
a0ZhaWxSZXR1cm5UaHVua3MtPnJldHVyblBDc0Zvcih2bSwgY29kZUJsb2NrLT5udW1QYXJhbWV0
ZXJzKCkpOworICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYXJp
dHlUaHVua0xhYmVscyksIEdQUkluZm86OnJlZ1Q3KTsKICAgICAgICAgaml0LmxvYWRQdHIoQ0Nh
bGxIZWxwZXJzOjpCYXNlSW5kZXgoR1BSSW5mbzo6cmVnVDcsIEdQUkluZm86OnJlZ1QwLCBDQ2Fs
bEhlbHBlcnM6OnRpbWVzUHRyKCkpLCBHUFJJbmZvOjpyZWdUNyk7CiAgICAgICAgIENDYWxsSGVs
cGVyczo6Q2FsbCBjYWxsQXJpdHlGaXh1cCA9IGppdC5jYWxsKCk7CiAgICAgICAgIGppdC5lbWl0
RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgICAgICBtYWluUGF0aEp1bXBzLmFwcGVuZChqaXQuanVt
cCgpKTsKIAotICAgICAgICBsaW5rQnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTxMaW5rQnVmZmVy
Pih2bSwgaml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOworICAgICAg
ICBsaW5rQnVmZmVyID0gc3RkOjptYWtlX3VuaXF1ZTxMaW5rQnVmZmVyPih2bSwgaml0LCBjb2Rl
QmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7CisgICAgICAgIGlmIChsaW5rQnVmZmVyLT5k
aWRGYWlsVG9BbGxvY2F0ZSgpKSB7CisgICAgICAgICAgICBzdGF0ZS5hbGxvY2F0aW9uRmFpbGVk
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICBsaW5rQnVm
ZmVyLT5saW5rKGNhbGxBcml0eUNoZWNrLCBjb2RlQmxvY2stPm1faXNDb25zdHJ1Y3RvciA/IG9w
ZXJhdGlvbkNvbnN0cnVjdEFyaXR5Q2hlY2sgOiBvcGVyYXRpb25DYWxsQXJpdHlDaGVjayk7CiAg
ICAgICAgIGxpbmtCdWZmZXItPmxpbmsoY2FsbEFyaXR5Rml4dXAsIEZ1bmN0aW9uUHRyKCh2bS5n
ZXRDVElTdHViKGFyaXR5Rml4dXBHZW5lcmF0b3IpKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSkpOwogICAgICAgICBsaW5rQnVmZmVyLT5saW5rKG1haW5QYXRoSnVtcHMsIENvZGVMb2NhdGlv
bkxhYmVsKGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGUuZ2VuZXJhdGVkRnVuY3Rpb24pKSk7CkBA
IC0xOTUsNyArMjAxLDExIEBAIHZvaWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgICAgIGppdC5l
bWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgbWFpblBh
dGhKdW1wID0gaml0Lmp1bXAoKTsKICAgICAgICAgCi0gICAgICAgIGxpbmtCdWZmZXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPExpbmtCdWZmZXI+KHZtLCBqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRp
b25NdXN0U3VjY2VlZCk7CisgICAgICAgIGxpbmtCdWZmZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPExp
bmtCdWZmZXI+KHZtLCBqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAg
ICAgICAgaWYgKGxpbmtCdWZmZXItPmRpZEZhaWxUb0FsbG9jYXRlKCkpIHsKKyAgICAgICAgICAg
IHN0YXRlLmFsbG9jYXRpb25GYWlsZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CiAgICAgICAgIGxpbmtCdWZmZXItPmxpbmsobWFpblBhdGhKdW1wLCBDb2RlTG9jYXRp
b25MYWJlbChiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRlLmdlbmVyYXRlZEZ1bmN0aW9uKSkpOwog
CiAgICAgICAgIHN0YXRlLmppdENvZGUtPmluaXRpYWxpemVBZGRyZXNzRm9yQ2FsbChsaW5rQnVm
ZmVyLT5sb2NhdGlvbk9mKHN0YXJ0KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
dGF0ZS5oCShyZXZpc2lvbiAxODE5NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDcgQEAgcHVibGljOgogICAgIExD
b250ZXh0IGNvbnRleHQ7CiAgICAgTE1vZHVsZSBtb2R1bGU7CiAgICAgTFZhbHVlIGZ1bmN0aW9u
OworICAgIGJvb2wgYWxsb2NhdGlvbkZhaWxlZCB7IGZhbHNlIH07IC8vIFRocm93IG91dCB0aGUg
Y29tcGlsYXRpb24gb25jZSBMTFZNIHJldHVybnMuCiAgICAgUmVmUHRyPEpJVENvZGU+IGppdENv
ZGU7CiAgICAgR2VuZXJhdGVkRnVuY3Rpb24gZ2VuZXJhdGVkRnVuY3Rpb247CiAgICAgSklURmlu
YWxpemVyKiBmaW5hbGl6ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0FyaXR5
Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0FyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLmNwcAkocmV2aXNpb24gMTgxOTc5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bcml0eUNoZWNrRmFpbFJldHVyblRodW5r
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDggQEAgQ29kZUxvY2F0aW9uTGFiZWwq
IEFyaXR5Q2hlY2tGYWlsUmV0dXJuVAogICAgICAgICBqaXQuanVtcChHUFJJbmZvOjpyZWdUMik7
CiAgICAgfQogICAgIAotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcih2bSwgaml0LCBHTE9CQUxf
VEhVTktfSUQpOworICAgIC8vIFNhZGx5LCB3ZSBjYW5ub3QgZmFpbCBoZXJlIGJlY2F1c2UgdGhl
IExMSW50IG1heSBuZWVkIHVzLgorICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcih2bSwgaml0LCBH
TE9CQUxfVEhVTktfSUQsIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOwogICAgIAogICAgIHVu
c2lnbmVkIHJldHVyblBDc1NpemUgPSBudW1FeHBlY3RlZEFyZ3VtZW50c0luY2x1ZGluZ1RoaXMg
LyBzdGFja0FsaWdubWVudFJlZ2lzdGVycygpICsgMTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q29k
ZUxvY2F0aW9uTGFiZWxbXT4gcmV0dXJuUENzID0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0aW9uRnV6
ei5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6LmgiCisKKyNpbmNsdWRlICJUZXN0UnVubmVyVXRp
bHMuaCIKKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+
CisKK25hbWVzcGFjZSBKU0MgeworCitzdGF0aWMgQXRvbWljPHVuc2lnbmVkPiBzX251bWJlck9m
RXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6Q2hlY2tzOwordW5zaWduZWQgbnVtYmVyT2ZFeGVjdXRh
YmxlQWxsb2NhdGlvbkZ1enpDaGVja3MoKQoreworICAgIHJldHVybiBzX251bWJlck9mRXhlY3V0
YWJsZUFsbG9jYXRpb25GdXp6Q2hlY2tzLmxvYWQoKTsKK30KKworRXhlY3V0YWJsZUFsbG9jYXRp
b25GdXp6UmVzdWx0IGRvRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6aW5nKCkKK3sKKyAgICBBU1NF
UlQoT3B0aW9uczo6ZW5hYmxlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6KCkpOworICAgIAorICAg
IHVuc2lnbmVkIG9sZFZhbHVlOworICAgIHVuc2lnbmVkIG5ld1ZhbHVlOworICAgIGRvIHsKKyAg
ICAgICAgb2xkVmFsdWUgPSBzX251bWJlck9mRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6Q2hlY2tz
LmxvYWQoKTsKKyAgICAgICAgbmV3VmFsdWUgPSBvbGRWYWx1ZSArIDE7CisgICAgfSB3aGlsZSAo
IXNfbnVtYmVyT2ZFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enpDaGVja3MuY29tcGFyZUV4Y2hhbmdl
V2VhayhvbGRWYWx1ZSwgbmV3VmFsdWUpKTsKKyAgICAKKyAgICBpZiAobmV3VmFsdWUgPT0gT3B0
aW9uczo6ZmlyZUV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ekF0KCkpIHsKKyAgICAgICAgaWYgKE9w
dGlvbnM6OnZlcmJvc2VFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enooKSkgeworICAgICAgICAgICAg
ZGF0YUxvZygiV2lsbCBwcmV0ZW5kIHRvIGZhaWwgZXhlY3V0YWJsZSBhbGxvY2F0aW9uLlxuIik7
CisgICAgICAgICAgICBXVEZSZXBvcnRCYWNrdHJhY2UoKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gUHJldGVuZFRvRmFpbEV4ZWN1dGFibGVBbGxvY2F0aW9uOworICAgIH0KKyAgICAKKyAg
ICBpZiAoT3B0aW9uczo6ZmlyZUV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ekF0T3JBZnRlcigpCisg
ICAgICAgICYmIG5ld1ZhbHVlID49IE9wdGlvbnM6OmZpcmVFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1
enpBdE9yQWZ0ZXIoKSkgeworICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZUV4ZWN1dGFibGVB
bGxvY2F0aW9uRnV6eigpKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJXaWxsIHByZXRlbmQgdG8g
ZmFpbCBleGVjdXRhYmxlIGFsbG9jYXRpb24uXG4iKTsKKyAgICAgICAgICAgIFdURlJlcG9ydEJh
Y2t0cmFjZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBQcmV0ZW5kVG9GYWlsRXhlY3V0
YWJsZUFsbG9jYXRpb247CisgICAgfQorICAgIAorICAgIHJldHVybiBBbGxvd05vcm1hbEV4ZWN1
dGFibGVBbGxvY2F0aW9uOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxs
b2NhdGlvbkZ1enouaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRXhlY3V0YWJsZUFs
bG9jYXRpb25GdXp6X2gKKyNkZWZpbmUgRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6X2gKKworI2lu
Y2x1ZGUgIk9wdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gRXhlY3V0YWJsZUFs
bG9jYXRpb25GdXp6UmVzdWx0IHsKKyAgICBBbGxvd05vcm1hbEV4ZWN1dGFibGVBbGxvY2F0aW9u
LAorICAgIFByZXRlbmRUb0ZhaWxFeGVjdXRhYmxlQWxsb2NhdGlvbgorfTsKKworRXhlY3V0YWJs
ZUFsbG9jYXRpb25GdXp6UmVzdWx0IGRvRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6aW5nKCk7CisK
K2lubGluZSBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enpSZXN1bHQgZG9FeGVjdXRhYmxlQWxsb2Nh
dGlvbkZ1enppbmdJZkVuYWJsZWQoKQoreworICAgIGlmIChMSUtFTFkoIU9wdGlvbnM6OmVuYWJs
ZUV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6eigpKSkKKyAgICAgICAgcmV0dXJuIEFsbG93Tm9ybWFs
RXhlY3V0YWJsZUFsbG9jYXRpb247CisgICAgCisgICAgcmV0dXJuIGRvRXhlY3V0YWJsZUFsbG9j
YXRpb25GdXp6aW5nKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRXhl
Y3V0YWJsZUFsbG9jYXRpb25GdXp6X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcAko
cmV2aXNpb24gMTgxOTc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBA
CiAjaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0ZJWEVEKQogCiAjaW5jbHVkZSAiQ29k
ZVByb2ZpbGluZy5oIgorI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei5oIgogI2lu
Y2x1ZGUgPGVycm5vLmg+CiAjaWYgIVBMQVRGT1JNKFdJTikKICNpbmNsdWRlIDx1bmlzdGQuaD4K
QEAgLTE1OCwxNSArMTU5LDI0IEBAIGRvdWJsZSBFeGVjdXRhYmxlQWxsb2NhdG9yOjptZW1vcnlQ
cmVzc3UKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1QYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1v
cnlIYW5kbGU+IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKFZNJiB2bSwgc2l6ZV90IHNp
emVJbkJ5dGVzLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQor
UGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmxlQWxsb2NhdG9yOjph
bGxvY2F0ZShWTSYsIHNpemVfdCBzaXplSW5CeXRlcywgdm9pZCogb3duZXJVSUQsIEpJVENvbXBp
bGF0aW9uRWZmb3J0IGVmZm9ydCkKIHsKKyAgICBpZiAoZWZmb3J0ICE9IEpJVENvbXBpbGF0aW9u
Q2FuRmFpbCAmJiBPcHRpb25zOjpyZXBvcnRNdXN0U3VjY2VlZEV4ZWN1dGFibGVBbGxvY2F0aW9u
cygpKSB7CisgICAgICAgIGRhdGFMb2coIkFsbG9jYXRpbmcgIiwgc2l6ZUluQnl0ZXMsICIgYnl0
ZXMgb2YgZXhlY3V0YWJsZSBtZW1vcnkgd2l0aCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkLlxu
Iik7CisgICAgICAgIFdURlJlcG9ydEJhY2t0cmFjZSgpOworICAgIH0KKyAgICAKKyAgICBpZiAo
ZWZmb3J0ID09IEpJVENvbXBpbGF0aW9uQ2FuRmFpbAorICAgICAgICAmJiBkb0V4ZWN1dGFibGVB
bGxvY2F0aW9uRnV6emluZ0lmRW5hYmxlZCgpID09IFByZXRlbmRUb0ZhaWxFeGVjdXRhYmxlQWxs
b2NhdGlvbikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCiAgICAgUmVmUHRyPEV4ZWN1
dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0
ZXMsIG93bmVyVUlEKTsKICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICBpZiAoZWZmb3J0ID09
IEpJVENvbXBpbGF0aW9uQ2FuRmFpbCkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
ICAgIHJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KHZtKTsKLSAgICAgICAgcmVzdWx0ID0gYWxsb2Nh
dG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcywgb3duZXJVSUQpOwotICAgICAgICBSRUxFQVNFX0FT
U0VSVChyZXN1bHQpOworICAgICAgICBpZiAoZWZmb3J0ICE9IEpJVENvbXBpbGF0aW9uQ2FuRmFp
bCkgeworICAgICAgICAgICAgZGF0YUxvZygiUmFuIG91dCBvZiBleGVjdXRhYmxlIG1lbW9yeSB3
aGlsZSBhbGxvY2F0aW5nICIsIHNpemVJbkJ5dGVzLCAiIGJ5dGVzLlxuIik7CisgICAgICAgICAg
ICBDUkFTSCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAg
ICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAJKHJldmlzaW9uIDE4MTk3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTg1LDcgKzU4NSw5IEBAIENvbXBpbGF0aW9uUmVzdWx0
IEpJVDo6cHJpdmF0ZUNvbXBpbGUoSkkKICNlbHNlCiAgICAgICAgIHRodW5rUmVnID0gR1BSSW5m
bzo6cmVnVDU7CiAjZW5kaWYKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fdm0tPmFyaXR5
Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLT5yZXR1cm5QQ3NGb3IoKm1fdm0sIG1fY29kZUJsb2NrLT5u
dW1QYXJhbWV0ZXJzKCkpKSwgdGh1bmtSZWcpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCog
ZmFpbFRodW5rTGFiZWxzID0KKyAgICAgICAgICAgIG1fdm0tPmFyaXR5Q2hlY2tGYWlsUmV0dXJu
VGh1bmtzLT5yZXR1cm5QQ3NGb3IoKm1fdm0sIG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkp
OworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoZmFpbFRodW5rTGFiZWxzKSwgdGh1bmtSZWcp
OwogICAgICAgICBsb2FkUHRyKEJhc2VJbmRleCh0aHVua1JlZywgcmVnVDAsIHRpbWVzUHRyKCkp
LCB0aHVua1JlZyk7CiAgICAgICAgIGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1Yihhcml0
eUZpeHVwR2VuZXJhdG9yKS5jb2RlKCkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVENvbXBpbGF0aW9uRWZmb3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDb21waWxhdGlvbkVmZm9ydC5oCShyZXZpc2lvbiAxODE5NzkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvbXBpbGF0aW9uRWZmb3J0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTgx
OTc5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjkzLDcgKzI5Myw3IEBAIHN0YXRpYyBGdW5jdGlvblB0ciBjdXN0b21Gb3IoY29u
c3QgUHV0UHIKICAgICByZXR1cm4gRnVuY3Rpb25QdHIoc2xvdC5jdXN0b21TZXR0ZXIoKSk7CiB9
CiAKLXN0YXRpYyB2b2lkIGdlbmVyYXRlQnlJZFN0dWIoCitzdGF0aWMgYm9vbCBnZW5lcmF0ZUJ5
SWRTdHViKAogICAgIEV4ZWNTdGF0ZSogZXhlYywgQnlJZFN0dWJLaW5kIGtpbmQsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwKICAgICBGdW5jdGlvblB0ciBjdXN0b20sIFN0cnVjdHVy
ZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQs
CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgYm9vbCBs
b2FkVGFyZ2V0RnJvbVByb3h5LCBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0LApAQCAtNTc0
LDcgKzU3NCw5IEBAIHN0YXRpYyB2b2lkIGdlbmVyYXRlQnlJZFN0dWIoCiAgICAgfQogICAgIGVt
aXRSZXN0b3JlU2NyYXRjaChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQ
Uiwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCp2bSwgc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOworICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKnZtLCBzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSwgSklUQ29tcGls
YXRpb25DYW5GYWlsKTsKKyAgICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2NhdGUoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRj
aEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNl
cywgc3VjY2Vzc0xhYmVsLCBzbG93Q2FzZUxhYmVsKTsKICAgICBpZiAoa2luZCA9PSBDYWxsQ3Vz
dG9tR2V0dGVyIHx8IGtpbmQgPT0gQ2FsbEN1c3RvbVNldHRlcikgewpAQCAtNjAxLDYgKzYwMyw4
IEBAIHN0YXRpYyB2b2lkIGdlbmVyYXRlQnlJZFN0dWIoCiAgICAgICAgIHN0dWJSb3V0aW5lID0g
YWRvcHRSZWYobmV3IEFjY2Vzc29yQ2FsbEpJVFN0dWJSb3V0aW5lKGNvZGUsICp2bSwgV1RGOjpt
b3ZlKGNhbGxMaW5rSW5mbykpKTsKICAgICBlbHNlCiAgICAgICAgIHN0dWJSb3V0aW5lID0gY3Jl
YXRlSklUU3R1YlJvdXRpbmUoY29kZSwgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LCB0cnVlKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogZW51bSBJbmxpbmVDYWNoZUFj
dGlvbiB7CkBAIC02ODcsNyArNjkxLDkgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNh
Y2hlR2V0QnlJRAogCiAgICAgICAgICAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwgbmVl
ZFRvUmVzdG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNl
cyk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZt
LCBzdHViSml0LCBjb2RlQmxvY2spOworICAgICAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqdm0sIHN0dWJKaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICAg
ICAgICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogCiAgICAgICAgICAgICBsaW5rUmVzdG9yZVNjcmF0
Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdHViSW5mbywgc3VjY2Vzcywg
ZmFpbCwgZmFpbHVyZUNhc2VzKTsKIApAQCAtNzE3LDggKzcyMywxMCBAQCBzdGF0aWMgSW5saW5l
Q2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlECiAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwogCi0gICAgICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKnZtLCBzdHViSml0LCBjb2RlQmxvY2spOwotCisgICAgICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKnZtLCBzdHViSml0LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uQ2FuRmFpbCk7
CisgICAgICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIAogICAgICAgICBwYXRjaEJ1ZmZlci5s
aW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0
dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkpOwogICAgICAgICBwYXRjaEJ1ZmZlci5saW5r
KGZhaWx1cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKIApAQCAtODQ0LDExICs4NTIsMTMgQEAg
c3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkR2V0QnlJRAogICAgIH0KICAgICAKICAg
ICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5lOwotICAgIGdlbmVyYXRlQnlJZFN0
dWIoCisgICAgYm9vbCByZXN1bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAogICAgICAgICBleGVjLCBr
aW5kRm9yKHNsb3QpLCBpZGVudCwgY3VzdG9tRm9yKHNsb3QpLCBzdHViSW5mbywgcHJvdG90eXBl
Q2hhaW4sIGNvdW50LCBvZmZzZXQsIAogICAgICAgICBzdHJ1Y3R1cmUsIGxvYWRUYXJnZXRGcm9t
UHJveHksIHNsb3Qud2F0Y2hwb2ludFNldCgpLCAKICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9Eb25lKSwK
ICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3VycmVudFNsb3dQYXRoVGFyZ2V0KHN0
dWJJbmZvKSksIHN0dWJSb3V0aW5lKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJu
IEdpdmVVcE9uQ2FjaGU7CiAgICAgCiAgICAgR2V0QnlJZEFjY2Vzczo6QWNjZXNzVHlwZSBhY2Nl
c3NUeXBlOwogICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSkKQEAgLTkwMSw3ICs5MTEs
NyBAQCBzdGF0aWMgVl9KSVRPcGVyYXRpb25fRVNzaUpKSSBhcHByb3ByaWF0CiAgICAgcmV0dXJu
IG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3Q7CiB9CiAKLXN0YXRpYyB2b2lkIGVt
aXRQdXRSZXBsYWNlU3R1YigKK3N0YXRpYyBib29sIGVtaXRQdXRSZXBsYWNlU3R1YigKICAgICBF
eGVjU3RhdGUqIGV4ZWMsCiAgICAgY29uc3QgSWRlbnRpZmllciYsCiAgICAgY29uc3QgUHV0UHJv
cGVydHlTbG90JiBzbG90LApAQCAtOTY4LDcgKzk3OCwxMCBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0
UmVwbGFjZVN0dWIoCiAgICAgICAgIGZhaWx1cmUgPSBiYWRTdHJ1Y3R1cmU7CiAgICAgfQogICAg
IAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCBzdHViSml0LCBleGVjLT5jb2RlQmxv
Y2soKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNv
ZGVCbG9jaygpLCBKSVRDb21waWxhdGlvbkNhbkZhaWwpOworICAgIGlmIChwYXRjaEJ1ZmZlci5k
aWRGYWlsVG9BbGxvY2F0ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCiAgICAgcGF0
Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpKTsKICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGZhaWx1cmUsIGZhaWx1cmVMYWJlbCk7CiAgICAgICAgICAgICAKQEAgLTk3Nyw2ICs5
OTAsOCBAQCBzdGF0aWMgdm9pZCBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgICAgICgiUHV0QnlJ
ZCByZXBsYWNlIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLAogICAgICAgICAgICAgdG9D
U3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldCgKICAgICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZWx0
YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogc3RhdGljIFN0cnVjdHVyZSogZW1pdFB1dFRyYW5zaXRpb25TdHViQW5kR2V0T2xk
U3RydWN0dXJlKEV4ZWNTdGF0ZSogZXhlYywgVk0qIHZtLCBTdHJ1Y3R1cmUqJiBzdHJ1Y3R1cmUs
IGNvbnN0IElkZW50aWZpZXImIGlkZW50LCAKQEAgLTEyMTMsNyArMTIyOCwxMCBAQCBzdGF0aWMg
U3RydWN0dXJlKiBlbWl0UHV0VHJhbnNpdGlvblN0dWJBCiAgICAgICAgIHN1Y2Nlc3NJblNsb3dQ
YXRoID0gc3R1YkppdC5qdW1wKCk7CiAgICAgfQogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKnZtLCBzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSk7CisgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpLCBKSVRDb21waWxhdGlv
bkNhbkZhaWwpOworICAgIGlmIChwYXRjaEJ1ZmZlci5kaWRGYWlsVG9BbGxvY2F0ZSgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3Ms
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNo
LmRlbHRhQ2FsbFRvRG9uZSkpOwogICAgIGlmIChhbGxvY2F0b3IuZGlkUmV1c2VSZWdpc3RlcnMo
KSkKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlLCBmYWlsdXJlTGFiZWwpOwpAQCAt
MTMwOCwxMyArMTMyNiwxNSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRC
eUlECiAgICAgICAgIFBvbHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7CiAgICAgICAgIGxpc3Qg
PSBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0Ojpmcm9tKHB1dEtpbmQsIHN0dWJJbmZvKTsKIAotICAg
ICAgICBnZW5lcmF0ZUJ5SWRTdHViKAorICAgICAgICBib29sIHJlc3VsdCA9IGdlbmVyYXRlQnlJ
ZFN0dWIoCiAgICAgICAgICAgICBleGVjLCBraW5kRm9yKHNsb3QpLCBpZGVudCwgY3VzdG9tRm9y
KHNsb3QpLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LAogICAgICAgICAgICAgb2Zm
c2V0LCBzdHJ1Y3R1cmUsIGZhbHNlLCBudWxscHRyLAogICAgICAgICAgICAgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGVsdGFDYWxsVG9E
b25lKSwKICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zm
c2V0KHN0dWJJbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpLAogICAgICAgICAgICAgc3R1
YlJvdXRpbmUpOwotCisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CisgICAgICAgIAogICAgICAgICBsaXN0LT5hZGRBY2Nlc3MoUHV0QnlJZEFj
Y2Vzczo6c2V0dGVyKAogICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLAogICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJsZVNldHRlcigpID8gUHV0QnlJZEFjY2Vz
czo6U2V0dGVyIDogUHV0QnlJZEFjY2Vzczo6Q3VzdG9tU2V0dGVyLApAQCAtMTM4MywxMCArMTQw
MywxMiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5QnVpbGRQdXRCeUlkCiAgICAgICAg
ICAgICBzdHJ1Y3R1cmUtPmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCgqdm0sIHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBXZSdyZSBub3cgY29t
bWl0dGVkIHRvIGNyZWF0aW5nIHRoZSBzdHViLiBNb2dyaWZ5IHRoZSBtZXRhLWRhdGEgYWNjb3Jk
aW5nbHkuCi0gICAgICAgICAgICBlbWl0UHV0UmVwbGFjZVN0dWIoCisgICAgICAgICAgICBib29s
IHJlc3VsdCA9IGVtaXRQdXRSZXBsYWNlU3R1YigKICAgICAgICAgICAgICAgICBleGVjLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCAKICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIENv
ZGVMb2NhdGlvbkxhYmVsKGxpc3QtPmN1cnJlbnRTbG93UGF0aFRhcmdldCgpKSwgc3R1YlJvdXRp
bmUpOwotCisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgbGlzdC0+YWRkQWNjZXNz
KAogICAgICAgICAgICAgICAgIFB1dEJ5SWRBY2Nlc3M6OnJlcGxhY2UoCiAgICAgICAgICAgICAg
ICAgICAgICp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKQEAgLTE0MTYsMTMgKzE0
MzgsMTUgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUJ1aWxkUHV0QnlJZAogICAgICAg
ICBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0OwogICAgICAgICBsaXN0ID0gUG9seW1vcnBo
aWNQdXRCeUlkTGlzdDo6ZnJvbShwdXRLaW5kLCBzdHViSW5mbyk7CiAKLSAgICAgICAgZ2VuZXJh
dGVCeUlkU3R1YigKKyAgICAgICAgYm9vbCByZXN1bHQgPSBnZW5lcmF0ZUJ5SWRTdHViKAogICAg
ICAgICAgICAgZXhlYywga2luZEZvcihzbG90KSwgcHJvcGVydHlOYW1lLCBjdXN0b21Gb3Ioc2xv
dCksIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsCiAgICAgICAgICAgICBvZmZzZXQs
IHN0cnVjdHVyZSwgZmFsc2UsIG51bGxwdHIsCiAgICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZWx0YUNhbGxUb0RvbmUp
LAogICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobGlzdC0+Y3VycmVudFNsb3dQYXRoVGFy
Z2V0KCkpLAogICAgICAgICAgICAgc3R1YlJvdXRpbmUpOwotCisgICAgICAgIGlmICghcmVzdWx0
KQorICAgICAgICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CisgICAgICAgIAogICAgICAgICBs
aXN0LT5hZGRBY2Nlc3MoUHV0QnlJZEFjY2Vzczo6c2V0dGVyKAogICAgICAgICAgICAgKnZtLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAogICAgICAgICAgICAgc2xvdC5pc0NhY2hlYWJs
ZVNldHRlcigpID8gUHV0QnlJZEFjY2Vzczo6U2V0dGVyIDogUHV0QnlJZEFjY2Vzczo6Q3VzdG9t
U2V0dGVyLApAQCAtMTU0OCw4ICsxNTcyLDEwIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0
cnlSZXBhdGNoSW4oCiAgICAgICAgIAogICAgICAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1Ykpp
dCwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1
cmVDYXNlcyk7CiAgICAgICAgIAotICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwg
c3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOwotCisgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKnZtLCBzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKSwgSklUQ29tcGlsYXRpb25DYW5G
YWlsKTsKKyAgICAgICAgaWYgKHBhdGNoQnVmZmVyLmRpZEZhaWxUb0FsbG9jYXRlKCkpCisgICAg
ICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKKyAgICAgICAgCiAgICAgICAgIGxpbmtSZXN0
b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZh
aWwsIGZhaWx1cmVDYXNlcywgc3VjY2Vzc0xhYmVsLCBzbG93Q2FzZUxhYmVsKTsKICAgICAgICAg
CiAgICAgICAgIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKQEAgLTE4NTEs
NyArMTg3NywxMSBAQCB2b2lkIGxpbmtQb2x5bW9ycGhpY0NhbGwoCiAgICAgc3R1YkppdC5yZXN0
b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUNCk7CiAgICAgQXNzZW1i
bHlIZWxwZXJzOjpKdW1wIHNsb3cgPSBzdHViSml0Lmp1bXAoKTsKICAgICAgICAgCi0gICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGNhbGxlckNvZGVCbG9jayk7CisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIHN0dWJKaXQsIGNhbGxlckNvZGVCbG9jaywgSklU
Q29tcGlsYXRpb25DYW5GYWlsKTsKKyAgICBpZiAocGF0Y2hCdWZmZXIuZGlkRmFpbFRvQWxsb2Nh
dGUoKSkgeworICAgICAgICBsaW5rVmlydHVhbEZvcihleGVjLCBjYWxsTGlua0luZm8sIENvZGVG
b3JDYWxsLCByZWdpc3RlcnMpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIAogICAgIFJF
TEVBU0VfQVNTRVJUKGNhbGxDYXNlcy5zaXplKCkgPT0gY2FsbHMuc2l6ZSgpKTsKICAgICBmb3Ig
KENhbGxUb0NvZGVQdHIgY2FsbFRvQ29kZVB0ciA6IGNhbGxzKSB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxODE5NzkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYg
Kzk3LDggQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCB1
c2VERkdKSVQsIHRydWUpIFwKICAgICB2KGJvb2wsIHVzZVJlZ0V4cEpJVCwgdHJ1ZSkgXAogICAg
IFwKKyAgICB2KGJvb2wsIHJlcG9ydE11c3RTdWNjZWVkRXhlY3V0YWJsZUFsbG9jYXRpb25zLCBm
YWxzZSkgXAorICAgIFwKICAgICB2KHVuc2lnbmVkLCBtYXhQZXJUaHJlYWRTdGFja1VzYWdlLCA0
ICogTUIpIFwKICAgICB2KHVuc2lnbmVkLCByZXNlcnZlZFpvbmVTaXplLCAxMjggKiBLQikgXAog
ICAgIHYodW5zaWduZWQsIGVycm9yTW9kZVJlc2VydmVkWm9uZVNpemUsIDY0ICogS0IpIFwKQEAg
LTI5MSw3ICsyOTMsMTIgQEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAg
dih1bnNpZ25lZCwgbnVtYmVyT2ZHQ0N5Y2xlc1RvUmVjb3JkRm9yVmVyaWZpY2F0aW9uLCAzKSBc
CiAgICAgXAogICAgIHYoYm9vbCwgZW5hYmxlRXhjZXB0aW9uRnV6eiwgZmFsc2UpIFwKLSAgICB2
KHVuc2lnbmVkLCBmaXJlRXhjZXB0aW9uRnV6ekF0LCAwKQorICAgIHYodW5zaWduZWQsIGZpcmVF
eGNlcHRpb25GdXp6QXQsIDApIFwKKyAgICBcCisgICAgdihib29sLCBlbmFibGVFeGVjdXRhYmxl
QWxsb2NhdGlvbkZ1enosIGZhbHNlKSBcCisgICAgdih1bnNpZ25lZCwgZmlyZUV4ZWN1dGFibGVB
bGxvY2F0aW9uRnV6ekF0LCAwKSBcCisgICAgdih1bnNpZ25lZCwgZmlyZUV4ZWN1dGFibGVBbGxv
Y2F0aW9uRnV6ekF0T3JBZnRlciwgMCkgXAorICAgIHYoYm9vbCwgdmVyYm9zZUV4ZWN1dGFibGVB
bGxvY2F0aW9uRnV6eiwgZmFsc2UpCiAKIGNsYXNzIE9wdGlvbnMgewogcHVibGljOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVGVzdFJ1bm5lclV0aWxzLmgJKHJl
dmlzaW9uIDE4MTk3OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Rlc3RSdW5u
ZXJVdGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1LDYgKzQ1LDcgQEAgSlNfRVhQT1JUX1BS
SVZBVEUgSlNWYWx1ZSBzZXROZXZlcklubGluZQogSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBv
cHRpbWl6ZU5leHRJbnZvY2F0aW9uKEV4ZWNTdGF0ZSopOwogCiBKU19FWFBPUlRfUFJJVkFURSB1
bnNpZ25lZCBudW1iZXJPZkV4Y2VwdGlvbkZ1enpDaGVja3MoKTsKK0pTX0VYUE9SVF9QUklWQVRF
IHVuc2lnbmVkIG51bWJlck9mRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6Q2hlY2tzKCk7CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
CShyZXZpc2lvbiAxODE5NzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDExLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOCwgMjAxMSwgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL2V4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei55YW1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9leGVjdXRhYmxlQWxsb2NhdGlv
bkZ1enoueWFtbAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9l
eGVjdXRhYmxlQWxsb2NhdGlvbkZ1enoueWFtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMx
IEBACisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMKKyMgMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuIAorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uIAorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorIyBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyMgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLSBwYXRoOiBleGVjdXRhYmxl
QWxsb2NhdGlvbkZ1enoKKyAgY21kOiB8CisgICAgICBpZiAoJGhvc3RPUyA9PSAid2luZG93cyIp
CisgICAgICAgICAgc2tpcAorICAgICAgZWxzZQorICAgICAgICAgIHJ1bkV4ZWN1dGFibGVBbGxv
Y2F0aW9uRnV6eigiZGVmYXVsdCIpCisgICAgICAgICAgcnVuRXhlY3V0YWJsZUFsbG9jYXRpb25G
dXp6KCJuby1jaml0IiwgIi0tZW5hYmxlQ29uY3VycmVudEpJVD1mYWxzZSIpCisgICAgICBlbmQK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9leGVjdXRhYmxlQWxsb2NhdGlvbkZ1
enovdjgtcmF5dHJhY2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL2V4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ei92OC1yYXl0cmFjZS5qcwkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9leGVjdXRhYmxlQWxsb2NhdGlvbkZ1enov
djgtcmF5dHJhY2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MDIgQEAKKy8vIFRoZSBy
YXkgdHJhY2VyIGNvZGUgaW4gdGhpcyBmaWxlIGlzIHdyaXR0ZW4gYnkgQWRhbSBCdXJtaXN0ZXIu
IEl0CisvLyBpcyBhdmFpbGFibGUgaW4gaXRzIG9yaWdpbmFsIGZvcm0gZnJvbToKKy8vCisvLyAg
IGh0dHA6Ly9sYWJzLmZsb2cubnouY28vcmF5dHJhY2VyLworLy8KKy8vIEl0IGhhcyBiZWVuIG1v
ZGlmaWVkIHNsaWdodGx5IGJ5IEdvb2dsZSB0byB3b3JrIGFzIGEgc3RhbmRhbG9uZQorLy8gYmVu
Y2htYXJrLCBidXQgdGhlIGFsbCB0aGUgY29tcHV0YXRpb25hbCBjb2RlIHJlbWFpbnMKKy8vIHVu
dG91Y2hlZC4gVGhpcyBmaWxlIGFsc28gY29udGFpbnMgYSBjb3B5IG9mIHBhcnRzIG9mIHRoZSBQ
cm90b3R5cGUKKy8vIEphdmFTY3JpcHQgZnJhbWV3b3JrIHdoaWNoIGlzIHVzZWQgYnkgdGhlIHJh
eSB0cmFjZXIuCisKKy8vIFZhcmlhYmxlIHVzZWQgdG8gaG9sZCBhIG51bWJlciB0aGF0IGNhbiBi
ZSB1c2VkIHRvIHZlcmlmeSB0aGF0CisvLyB0aGUgc2NlbmUgd2FzIHJheSB0cmFjZWQgY29ycmVj
dGx5LgordmFyIGNoZWNrTnVtYmVyOworCisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKKy8vIFRoZSBmb2xsb3dpbmcgaXMgYSBjb3B5IG9mIHBhcnRzIG9mIHRoZSBQ
cm90b3R5cGUgSmF2YVNjcmlwdCBsaWJyYXJ5OgorCisvLyBQcm90b3R5cGUgSmF2YVNjcmlwdCBm
cmFtZXdvcmssIHZlcnNpb24gMS41LjAKKy8vIChjKSAyMDA1LTIwMDcgU2FtIFN0ZXBoZW5zb24K
Ky8vCisvLyBQcm90b3R5cGUgaXMgZnJlZWx5IGRpc3RyaWJ1dGFibGUgdW5kZXIgdGhlIHRlcm1z
IG9mIGFuIE1JVC1zdHlsZSBsaWNlbnNlLgorLy8gRm9yIGRldGFpbHMsIHNlZSB0aGUgUHJvdG90
eXBlIHdlYiBzaXRlOiBodHRwOi8vcHJvdG90eXBlLmNvbmlvLm5ldC8KKworCit2YXIgQ2xhc3Mg
PSB7CisgIGNyZWF0ZTogZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAg
ICAgdGhpcy5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgfQorICB9Cit9
OworCisKK09iamVjdC5leHRlbmQgPSBmdW5jdGlvbihkZXN0aW5hdGlvbiwgc291cmNlKSB7Cisg
IGZvciAodmFyIHByb3BlcnR5IGluIHNvdXJjZSkgeworICAgIGRlc3RpbmF0aW9uW3Byb3BlcnR5
XSA9IHNvdXJjZVtwcm9wZXJ0eV07CisgIH0KKyAgcmV0dXJuIGRlc3RpbmF0aW9uOworfTsKKwor
CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBUaGUgcmVzdCBv
ZiB0aGlzIGZpbGUgaXMgdGhlIGFjdHVhbCByYXkgdHJhY2VyIHdyaXR0ZW4gYnkgQWRhbQorLy8g
QnVybWlzdGVyLiBJdCdzIGEgY29uY2F0ZW5hdGlvbiBvZiB0aGUgZm9sbG93aW5nIGZpbGVzOgor
Ly8KKy8vICAgZmxvZy9jb2xvci5qcworLy8gICBmbG9nL2xpZ2h0LmpzCisvLyAgIGZsb2cvdmVj
dG9yLmpzCisvLyAgIGZsb2cvcmF5LmpzCisvLyAgIGZsb2cvc2NlbmUuanMKKy8vICAgZmxvZy9t
YXRlcmlhbC9iYXNlbWF0ZXJpYWwuanMKKy8vICAgZmxvZy9tYXRlcmlhbC9zb2xpZC5qcworLy8g
ICBmbG9nL21hdGVyaWFsL2NoZXNzYm9hcmQuanMKKy8vICAgZmxvZy9zaGFwZS9iYXNlc2hhcGUu
anMKKy8vICAgZmxvZy9zaGFwZS9zcGhlcmUuanMKKy8vICAgZmxvZy9zaGFwZS9wbGFuZS5qcwor
Ly8gICBmbG9nL2ludGVyc2VjdGlvbmluZm8uanMKKy8vICAgZmxvZy9jYW1lcmEuanMKKy8vICAg
ZmxvZy9iYWNrZ3JvdW5kLmpzCisvLyAgIGZsb2cvZW5naW5lLmpzCisKKworLyogRmFrZSBhIEZs
b2cuKiBuYW1lc3BhY2UgKi8KK2lmKHR5cGVvZihGbG9nKSA9PSAndW5kZWZpbmVkJykgdmFyIEZs
b2cgPSB7fTsKK2lmKHR5cGVvZihGbG9nLlJheVRyYWNlcikgPT0gJ3VuZGVmaW5lZCcpIEZsb2cu
UmF5VHJhY2VyID0ge307CisKK0Zsb2cuUmF5VHJhY2VyLkNvbG9yID0gQ2xhc3MuY3JlYXRlKCk7
CisKK0Zsb2cuUmF5VHJhY2VyLkNvbG9yLnByb3RvdHlwZSA9IHsKKyAgICByZWQgOiAwLjAsCisg
ICAgZ3JlZW4gOiAwLjAsCisgICAgYmx1ZSA6IDAuMCwKKworICAgIGluaXRpYWxpemUgOiBmdW5j
dGlvbihyLCBnLCBiKSB7CisgICAgICAgIGlmKCFyKSByID0gMC4wOworICAgICAgICBpZighZykg
ZyA9IDAuMDsKKyAgICAgICAgaWYoIWIpIGIgPSAwLjA7CisKKyAgICAgICAgdGhpcy5yZWQgPSBy
OworICAgICAgICB0aGlzLmdyZWVuID0gZzsKKyAgICAgICAgdGhpcy5ibHVlID0gYjsKKyAgICB9
LAorCisgICAgYWRkIDogZnVuY3Rpb24oYzEsIGMyKXsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG5l
dyBGbG9nLlJheVRyYWNlci5Db2xvcigwLDAsMCk7CisKKyAgICAgICAgcmVzdWx0LnJlZCA9IGMx
LnJlZCArIGMyLnJlZDsKKyAgICAgICAgcmVzdWx0LmdyZWVuID0gYzEuZ3JlZW4gKyBjMi5ncmVl
bjsKKyAgICAgICAgcmVzdWx0LmJsdWUgPSBjMS5ibHVlICsgYzIuYmx1ZTsKKworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0sCisKKyAgICBhZGRTY2FsYXI6IGZ1bmN0aW9uKGMxLCBzKXsK
KyAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBGbG9nLlJheVRyYWNlci5Db2xvcigwLDAsMCk7CisK
KyAgICAgICAgcmVzdWx0LnJlZCA9IGMxLnJlZCArIHM7CisgICAgICAgIHJlc3VsdC5ncmVlbiA9
IGMxLmdyZWVuICsgczsKKyAgICAgICAgcmVzdWx0LmJsdWUgPSBjMS5ibHVlICsgczsKKworICAg
ICAgICByZXN1bHQubGltaXQoKTsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0sCisK
KyAgICBzdWJ0cmFjdDogZnVuY3Rpb24oYzEsIGMyKXsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG5l
dyBGbG9nLlJheVRyYWNlci5Db2xvcigwLDAsMCk7CisKKyAgICAgICAgcmVzdWx0LnJlZCA9IGMx
LnJlZCAtIGMyLnJlZDsKKyAgICAgICAgcmVzdWx0LmdyZWVuID0gYzEuZ3JlZW4gLSBjMi5ncmVl
bjsKKyAgICAgICAgcmVzdWx0LmJsdWUgPSBjMS5ibHVlIC0gYzIuYmx1ZTsKKworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0sCisKKyAgICBtdWx0aXBseSA6IGZ1bmN0aW9uKGMxLCBjMikg
eworICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEZsb2cuUmF5VHJhY2VyLkNvbG9yKDAsMCwwKTsK
KworICAgICAgICByZXN1bHQucmVkID0gYzEucmVkICogYzIucmVkOworICAgICAgICByZXN1bHQu
Z3JlZW4gPSBjMS5ncmVlbiAqIGMyLmdyZWVuOworICAgICAgICByZXN1bHQuYmx1ZSA9IGMxLmJs
dWUgKiBjMi5ibHVlOworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfSwKKworICAgIG11
bHRpcGx5U2NhbGFyIDogZnVuY3Rpb24oYzEsIGYpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG5l
dyBGbG9nLlJheVRyYWNlci5Db2xvcigwLDAsMCk7CisKKyAgICAgICAgcmVzdWx0LnJlZCA9IGMx
LnJlZCAqIGY7CisgICAgICAgIHJlc3VsdC5ncmVlbiA9IGMxLmdyZWVuICogZjsKKyAgICAgICAg
cmVzdWx0LmJsdWUgPSBjMS5ibHVlICogZjsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0sCisKKyAgICBkaXZpZGVGYWN0b3IgOiBmdW5jdGlvbihjMSwgZikgeworICAgICAgICB2YXIg
cmVzdWx0ID0gbmV3IEZsb2cuUmF5VHJhY2VyLkNvbG9yKDAsMCwwKTsKKworICAgICAgICByZXN1
bHQucmVkID0gYzEucmVkIC8gZjsKKyAgICAgICAgcmVzdWx0LmdyZWVuID0gYzEuZ3JlZW4gLyBm
OworICAgICAgICByZXN1bHQuYmx1ZSA9IGMxLmJsdWUgLyBmOworCisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfSwKKworICAgIGxpbWl0OiBmdW5jdGlvbigpeworICAgICAgICB0aGlzLnJl
ZCA9ICh0aGlzLnJlZCA+IDAuMCkgPyAoICh0aGlzLnJlZCA+IDEuMCkgPyAxLjAgOiB0aGlzLnJl
ZCApIDogMC4wOworICAgICAgICB0aGlzLmdyZWVuID0gKHRoaXMuZ3JlZW4gPiAwLjApID8gKCAo
dGhpcy5ncmVlbiA+IDEuMCkgPyAxLjAgOiB0aGlzLmdyZWVuICkgOiAwLjA7CisgICAgICAgIHRo
aXMuYmx1ZSA9ICh0aGlzLmJsdWUgPiAwLjApID8gKCAodGhpcy5ibHVlID4gMS4wKSA/IDEuMCA6
IHRoaXMuYmx1ZSApIDogMC4wOworICAgIH0sCisKKyAgICBkaXN0YW5jZSA6IGZ1bmN0aW9uKGNv
bG9yKSB7CisgICAgICAgIHZhciBkID0gTWF0aC5hYnModGhpcy5yZWQgLSBjb2xvci5yZWQpICsg
TWF0aC5hYnModGhpcy5ncmVlbiAtIGNvbG9yLmdyZWVuKSArIE1hdGguYWJzKHRoaXMuYmx1ZSAt
IGNvbG9yLmJsdWUpOworICAgICAgICByZXR1cm4gZDsKKyAgICB9LAorCisgICAgYmxlbmQ6IGZ1
bmN0aW9uKGMxLCBjMiwgdyl7CisgICAgICAgIHZhciByZXN1bHQgPSBuZXcgRmxvZy5SYXlUcmFj
ZXIuQ29sb3IoMCwwLDApOworICAgICAgICByZXN1bHQgPSBGbG9nLlJheVRyYWNlci5Db2xvci5w
cm90b3R5cGUuYWRkKAorICAgICAgICAgICAgICAgICAgICBGbG9nLlJheVRyYWNlci5Db2xvci5w
cm90b3R5cGUubXVsdGlwbHlTY2FsYXIoYzEsIDEgLSB3KSwKKyAgICAgICAgICAgICAgICAgICAg
RmxvZy5SYXlUcmFjZXIuQ29sb3IucHJvdG90eXBlLm11bHRpcGx5U2NhbGFyKGMyLCB3KQorICAg
ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9LAorCisgICAg
YnJpZ2h0bmVzcyA6IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgciA9IE1hdGguZmxvb3IodGhp
cy5yZWQqMjU1KTsKKyAgICAgICAgdmFyIGcgPSBNYXRoLmZsb29yKHRoaXMuZ3JlZW4qMjU1KTsK
KyAgICAgICAgdmFyIGIgPSBNYXRoLmZsb29yKHRoaXMuYmx1ZSoyNTUpOworICAgICAgICByZXR1
cm4gKHIgKiA3NyArIGcgKiAxNTAgKyBiICogMjkpID4+IDg7CisgICAgfSwKKworICAgIHRvU3Ry
aW5nIDogZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgciA9IE1hdGguZmxvb3IodGhpcy5yZWQq
MjU1KTsKKyAgICAgICAgdmFyIGcgPSBNYXRoLmZsb29yKHRoaXMuZ3JlZW4qMjU1KTsKKyAgICAg
ICAgdmFyIGIgPSBNYXRoLmZsb29yKHRoaXMuYmx1ZSoyNTUpOworCisgICAgICAgIHJldHVybiAi
cmdiKCIrIHIgKyIsIisgZyArIiwiKyBiICsiKSI7CisgICAgfQorfQorLyogRmFrZSBhIEZsb2cu
KiBuYW1lc3BhY2UgKi8KK2lmKHR5cGVvZihGbG9nKSA9PSAndW5kZWZpbmVkJykgdmFyIEZsb2cg
PSB7fTsKK2lmKHR5cGVvZihGbG9nLlJheVRyYWNlcikgPT0gJ3VuZGVmaW5lZCcpIEZsb2cuUmF5
VHJhY2VyID0ge307CisKK0Zsb2cuUmF5VHJhY2VyLkxpZ2h0ID0gQ2xhc3MuY3JlYXRlKCk7CisK
K0Zsb2cuUmF5VHJhY2VyLkxpZ2h0LnByb3RvdHlwZSA9IHsKKyAgICBwb3NpdGlvbjogbnVsbCwK
KyAgICBjb2xvcjogbnVsbCwKKyAgICBpbnRlbnNpdHk6IDEwLjAsCisKKyAgICBpbml0aWFsaXpl
IDogZnVuY3Rpb24ocG9zLCBjb2xvciwgaW50ZW5zaXR5KSB7CisgICAgICAgIHRoaXMucG9zaXRp
b24gPSBwb3M7CisgICAgICAgIHRoaXMuY29sb3IgPSBjb2xvcjsKKyAgICAgICAgdGhpcy5pbnRl
bnNpdHkgPSAoaW50ZW5zaXR5ID8gaW50ZW5zaXR5IDogMTAuMCk7CisgICAgfSwKKworICAgIHRv
U3RyaW5nIDogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gJ0xpZ2h0IFsnICsgdGhpcy5w
b3NpdGlvbi54ICsgJywnICsgdGhpcy5wb3NpdGlvbi55ICsgJywnICsgdGhpcy5wb3NpdGlvbi56
ICsgJ10nOworICAgIH0KK30KKy8qIEZha2UgYSBGbG9nLiogbmFtZXNwYWNlICovCitpZih0eXBl
b2YoRmxvZykgPT0gJ3VuZGVmaW5lZCcpIHZhciBGbG9nID0ge307CitpZih0eXBlb2YoRmxvZy5S
YXlUcmFjZXIpID09ICd1bmRlZmluZWQnKSBGbG9nLlJheVRyYWNlciA9IHt9OworCitGbG9nLlJh
eVRyYWNlci5WZWN0b3IgPSBDbGFzcy5jcmVhdGUoKTsKKworRmxvZy5SYXlUcmFjZXIuVmVjdG9y
LnByb3RvdHlwZSA9IHsKKyAgICB4IDogMC4wLAorICAgIHkgOiAwLjAsCisgICAgeiA6IDAuMCwK
KworICAgIGluaXRpYWxpemUgOiBmdW5jdGlvbih4LCB5LCB6KSB7CisgICAgICAgIHRoaXMueCA9
ICh4ID8geCA6IDApOworICAgICAgICB0aGlzLnkgPSAoeSA/IHkgOiAwKTsKKyAgICAgICAgdGhp
cy56ID0gKHogPyB6IDogMCk7CisgICAgfSwKKworICAgIGNvcHk6IGZ1bmN0aW9uKHZlY3Rvcil7
CisgICAgICAgIHRoaXMueCA9IHZlY3Rvci54OworICAgICAgICB0aGlzLnkgPSB2ZWN0b3IueTsK
KyAgICAgICAgdGhpcy56ID0gdmVjdG9yLno7CisgICAgfSwKKworICAgIG5vcm1hbGl6ZSA6IGZ1
bmN0aW9uKCkgeworICAgICAgICB2YXIgbSA9IHRoaXMubWFnbml0dWRlKCk7CisgICAgICAgIHJl
dHVybiBuZXcgRmxvZy5SYXlUcmFjZXIuVmVjdG9yKHRoaXMueCAvIG0sIHRoaXMueSAvIG0sIHRo
aXMueiAvIG0pOworICAgIH0sCisKKyAgICBtYWduaXR1ZGUgOiBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuIE1hdGguc3FydCgodGhpcy54ICogdGhpcy54KSArICh0aGlzLnkgKiB0aGlzLnkp
ICsgKHRoaXMueiAqIHRoaXMueikpOworICAgIH0sCisKKyAgICBjcm9zcyA6IGZ1bmN0aW9uKHcp
IHsKKyAgICAgICAgcmV0dXJuIG5ldyBGbG9nLlJheVRyYWNlci5WZWN0b3IoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC10aGlzLnogKiB3LnkgKyB0aGlzLnkg
KiB3LnosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy56
ICogdy54IC0gdGhpcy54ICogdy56LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLXRoaXMueSAqIHcueCArIHRoaXMueCAqIHcueSk7CisgICAgfSwKKworICAgIGRv
dCA6IGZ1bmN0aW9uKHcpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMueCAqIHcueCArIHRoaXMueSAq
IHcueSArIHRoaXMueiAqIHcuejsKKyAgICB9LAorCisgICAgYWRkIDogZnVuY3Rpb24odiwgdykg
eworICAgICAgICByZXR1cm4gbmV3IEZsb2cuUmF5VHJhY2VyLlZlY3Rvcih3LnggKyB2LngsIHcu
eSArIHYueSwgdy56ICsgdi56KTsKKyAgICB9LAorCisgICAgc3VidHJhY3QgOiBmdW5jdGlvbih2
LCB3KSB7CisgICAgICAgIGlmKCF3IHx8ICF2KSB0aHJvdyAnVmVjdG9ycyBtdXN0IGJlIGRlZmlu
ZWQgWycgKyB2ICsgJywnICsgdyArICddJzsKKyAgICAgICAgcmV0dXJuIG5ldyBGbG9nLlJheVRy
YWNlci5WZWN0b3Iodi54IC0gdy54LCB2LnkgLSB3LnksIHYueiAtIHcueik7CisgICAgfSwKKwor
ICAgIG11bHRpcGx5VmVjdG9yIDogZnVuY3Rpb24odiwgdykgeworICAgICAgICByZXR1cm4gbmV3
IEZsb2cuUmF5VHJhY2VyLlZlY3Rvcih2LnggKiB3LngsIHYueSAqIHcueSwgdi56ICogdy56KTsK
KyAgICB9LAorCisgICAgbXVsdGlwbHlTY2FsYXIgOiBmdW5jdGlvbih2LCB3KSB7CisgICAgICAg
IHJldHVybiBuZXcgRmxvZy5SYXlUcmFjZXIuVmVjdG9yKHYueCAqIHcsIHYueSAqIHcsIHYueiAq
IHcpOworICAgIH0sCisKKyAgICB0b1N0cmluZyA6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0
dXJuICdWZWN0b3IgWycgKyB0aGlzLnggKyAnLCcgKyB0aGlzLnkgKyAnLCcgKyB0aGlzLnogKyAn
XSc7CisgICAgfQorfQorLyogRmFrZSBhIEZsb2cuKiBuYW1lc3BhY2UgKi8KK2lmKHR5cGVvZihG
bG9nKSA9PSAndW5kZWZpbmVkJykgdmFyIEZsb2cgPSB7fTsKK2lmKHR5cGVvZihGbG9nLlJheVRy
YWNlcikgPT0gJ3VuZGVmaW5lZCcpIEZsb2cuUmF5VHJhY2VyID0ge307CisKK0Zsb2cuUmF5VHJh
Y2VyLlJheSA9IENsYXNzLmNyZWF0ZSgpOworCitGbG9nLlJheVRyYWNlci5SYXkucHJvdG90eXBl
ID0geworICAgIHBvc2l0aW9uIDogbnVsbCwKKyAgICBkaXJlY3Rpb24gOiBudWxsLAorICAgIGlu
aXRpYWxpemUgOiBmdW5jdGlvbihwb3MsIGRpcikgeworICAgICAgICB0aGlzLnBvc2l0aW9uID0g
cG9zOworICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IGRpcjsKKyAgICB9LAorCisgICAgdG9TdHJp
bmcgOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAnUmF5IFsnICsgdGhpcy5wb3NpdGlv
biArICcsJyArIHRoaXMuZGlyZWN0aW9uICsgJ10nOworICAgIH0KK30KKy8qIEZha2UgYSBGbG9n
LiogbmFtZXNwYWNlICovCitpZih0eXBlb2YoRmxvZykgPT0gJ3VuZGVmaW5lZCcpIHZhciBGbG9n
ID0ge307CitpZih0eXBlb2YoRmxvZy5SYXlUcmFjZXIpID09ICd1bmRlZmluZWQnKSBGbG9nLlJh
eVRyYWNlciA9IHt9OworCitGbG9nLlJheVRyYWNlci5TY2VuZSA9IENsYXNzLmNyZWF0ZSgpOwor
CitGbG9nLlJheVRyYWNlci5TY2VuZS5wcm90b3R5cGUgPSB7CisgICAgY2FtZXJhIDogbnVsbCwK
KyAgICBzaGFwZXMgOiBbXSwKKyAgICBsaWdodHMgOiBbXSwKKyAgICBiYWNrZ3JvdW5kIDogbnVs
bCwKKworICAgIGluaXRpYWxpemUgOiBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5jYW1lcmEg
PSBuZXcgRmxvZy5SYXlUcmFjZXIuQ2FtZXJhKAorICAgICAgICAgICAgbmV3IEZsb2cuUmF5VHJh
Y2VyLlZlY3RvcigwLDAsLTUpLAorICAgICAgICAgICAgbmV3IEZsb2cuUmF5VHJhY2VyLlZlY3Rv
cigwLDAsMSksCisgICAgICAgICAgICBuZXcgRmxvZy5SYXlUcmFjZXIuVmVjdG9yKDAsMSwwKQor
ICAgICAgICApOworICAgICAgICB0aGlzLnNoYXBlcyA9IG5ldyBBcnJheSgpOworICAgICAgICB0
aGlzLmxpZ2h0cyA9IG5ldyBBcnJheSgpOworICAgICAgICB0aGlzLmJhY2tncm91bmQgPSBuZXcg
RmxvZy5SYXlUcmFjZXIuQmFja2dyb3VuZChuZXcgRmxvZy5SYXlUcmFjZXIuQ29sb3IoMCwwLDAu
NSksIDAuMik7CisgICAgfQorfQorLyogRmFrZSBhIEZsb2cuKiBuYW1lc3BhY2UgKi8KK2lmKHR5
cGVvZihGbG9nKSA9PSAndW5kZWZpbmVkJykgdmFyIEZsb2cgPSB7fTsKK2lmKHR5cGVvZihGbG9n
LlJheVRyYWNlcikgPT0gJ3VuZGVmaW5lZCcpIEZsb2cuUmF5VHJhY2VyID0ge307CitpZih0eXBl
b2YoRmxvZy5SYXlUcmFjZXIuTWF0ZXJpYWwpID09ICd1bmRlZmluZWQnKSBGbG9nLlJheVRyYWNl
ci5NYXRlcmlhbCA9IHt9OworCitGbG9nLlJheVRyYWNlci5NYXRlcmlhbC5CYXNlTWF0ZXJpYWwg
PSBDbGFzcy5jcmVhdGUoKTsKKworRmxvZy5SYXlUcmFjZXIuTWF0ZXJpYWwuQmFzZU1hdGVyaWFs
LnByb3RvdHlwZSA9IHsKKworICAgIGdsb3NzOiAyLjAsICAgICAgICAgICAgIC8vIFswLi4uaW5m
aW5pdHldIDAgPSBtYXR0CisgICAgdHJhbnNwYXJlbmN5OiAwLjAsICAgICAgLy8gMD1vcGFxdWUK
KyAgICByZWZsZWN0aW9uOiAwLjAsICAgICAgICAvLyBbMC4uLmluZmluaXR5XSAwID0gbm8gcmVm
bGVjdGlvbgorICAgIHJlZnJhY3Rpb246IDAuNTAsCisgICAgaGFzVGV4dHVyZTogZmFsc2UsCisK
KyAgICBpbml0aWFsaXplIDogZnVuY3Rpb24oKSB7CisKKyAgICB9LAorCisgICAgZ2V0Q29sb3I6
IGZ1bmN0aW9uKHUsIHYpeworCisgICAgfSwKKworICAgIHdyYXBVcDogZnVuY3Rpb24odCl7Cisg
ICAgICAgIHQgPSB0ICUgMi4wOworICAgICAgICBpZih0IDwgLTEpIHQgKz0gMi4wOworICAgICAg
ICBpZih0ID49IDEpIHQgLT0gMi4wOworICAgICAgICByZXR1cm4gdDsKKyAgICB9LAorCisgICAg
dG9TdHJpbmcgOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiAnTWF0ZXJpYWwgW2dsb3Nz
PScgKyB0aGlzLmdsb3NzICsgJywgdHJhbnNwYXJlbmN5PScgKyB0aGlzLnRyYW5zcGFyZW5jeSAr
ICcsIGhhc1RleHR1cmU9JyArIHRoaXMuaGFzVGV4dHVyZSArJ10nOworICAgIH0KK30KKy8qIEZh
a2UgYSBGbG9nLiogbmFtZXNwYWNlICovCitpZih0eXBlb2YoRmxvZykgPT0gJ3VuZGVmaW5lZCcp
IHZhciBGbG9nID0ge307CitpZih0eXBlb2YoRmxvZy5SYXlUcmFjZXIpID09ICd1bmRlZmluZWQn
KSBGbG9nLlJheVRyYWNlciA9IHt9OworCitGbG9nLlJheVRyYWNlci5NYXRlcmlhbC5Tb2xpZCA9
IENsYXNzLmNyZWF0ZSgpOworCitGbG9nLlJheVRyYWNlci5NYXRlcmlhbC5Tb2xpZC5wcm90b3R5
cGUgPSBPYmplY3QuZXh0ZW5kKAorICAgIG5ldyBGbG9nLlJheVRyYWNlci5NYXRlcmlhbC5CYXNl
TWF0ZXJpYWwoKSwgeworICAgICAgICBpbml0aWFsaXplIDogZnVuY3Rpb24oY29sb3IsIHJlZmxl
Y3Rpb24sIHJlZnJhY3Rpb24sIHRyYW5zcGFyZW5jeSwgZ2xvc3MpIHsKKyAgICAgICAgICAgIHRo
aXMuY29sb3IgPSBjb2xvcjsKKyAgICAgICAgICAgIHRoaXMucmVmbGVjdGlvbiA9IHJlZmxlY3Rp
b247CisgICAgICAgICAgICB0aGlzLnRyYW5zcGFyZW5jeSA9IHRyYW5zcGFyZW5jeTsKKyAgICAg
ICAgICAgIHRoaXMuZ2xvc3MgPSBnbG9zczsKKyAgICAgICAgICAgIHRoaXMuaGFzVGV4dHVyZSA9
IGZhbHNlOworICAgICAgICB9LAorCisgICAgICAgIGdldENvbG9yOiBmdW5jdGlvbih1LCB2KXsK
KyAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbG9yOworICAgICAgICB9LAorCisgICAgICAgIHRv
U3RyaW5nIDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuICdTb2xpZE1hdGVyaWFs
IFtnbG9zcz0nICsgdGhpcy5nbG9zcyArICcsIHRyYW5zcGFyZW5jeT0nICsgdGhpcy50cmFuc3Bh
cmVuY3kgKyAnLCBoYXNUZXh0dXJlPScgKyB0aGlzLmhhc1RleHR1cmUgKyddJzsKKyAgICAgICAg
fQorICAgIH0KKyk7CisvKiBGYWtlIGEgRmxvZy4qIG5hbWVzcGFjZSAqLworaWYodHlwZW9mKEZs
b2cpID09ICd1bmRlZmluZWQnKSB2YXIgRmxvZyA9IHt9OworaWYodHlwZW9mKEZsb2cuUmF5VHJh
Y2VyKSA9PSAndW5kZWZpbmVkJykgRmxvZy5SYXlUcmFjZXIgPSB7fTsKKworRmxvZy5SYXlUcmFj
ZXIuTWF0ZXJpYWwuQ2hlc3Nib2FyZCA9IENsYXNzLmNyZWF0ZSgpOworCitGbG9nLlJheVRyYWNl
ci5NYXRlcmlhbC5DaGVzc2JvYXJkLnByb3RvdHlwZSA9IE9iamVjdC5leHRlbmQoCisgICAgbmV3
IEZsb2cuUmF5VHJhY2VyLk1hdGVyaWFsLkJhc2VNYXRlcmlhbCgpLCB7CisgICAgICAgIGNvbG9y
RXZlbjogbnVsbCwKKyAgICAgICAgY29sb3JPZGQ6IG51bGwsCisgICAgICAgIGRlbnNpdHk6IDAu
NSwKKworICAgICAgICBpbml0aWFsaXplIDogZnVuY3Rpb24oY29sb3JFdmVuLCBjb2xvck9kZCwg
cmVmbGVjdGlvbiwgdHJhbnNwYXJlbmN5LCBnbG9zcywgZGVuc2l0eSkgeworICAgICAgICAgICAg
dGhpcy5jb2xvckV2ZW4gPSBjb2xvckV2ZW47CisgICAgICAgICAgICB0aGlzLmNvbG9yT2RkID0g
Y29sb3JPZGQ7CisgICAgICAgICAgICB0aGlzLnJlZmxlY3Rpb24gPSByZWZsZWN0aW9uOworICAg
ICAgICAgICAgdGhpcy50cmFuc3BhcmVuY3kgPSB0cmFuc3BhcmVuY3k7CisgICAgICAgICAgICB0
aGlzLmdsb3NzID0gZ2xvc3M7CisgICAgICAgICAgICB0aGlzLmRlbnNpdHkgPSBkZW5zaXR5Owor
ICAgICAgICAgICAgdGhpcy5oYXNUZXh0dXJlID0gdHJ1ZTsKKyAgICAgICAgfSwKKworICAgICAg
ICBnZXRDb2xvcjogZnVuY3Rpb24odSwgdil7CisgICAgICAgICAgICB2YXIgdCA9IHRoaXMud3Jh
cFVwKHUgKiB0aGlzLmRlbnNpdHkpICogdGhpcy53cmFwVXAodiAqIHRoaXMuZGVuc2l0eSk7CisK
KyAgICAgICAgICAgIGlmKHQgPCAwLjApCisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29s
b3JFdmVuOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNv
bG9yT2RkOworICAgICAgICB9LAorCisgICAgICAgIHRvU3RyaW5nIDogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuICdDaGVzc01hdGVyaWFsIFtnbG9zcz0nICsgdGhpcy5nbG9zcyAr
ICcsIHRyYW5zcGFyZW5jeT0nICsgdGhpcy50cmFuc3BhcmVuY3kgKyAnLCBoYXNUZXh0dXJlPScg
KyB0aGlzLmhhc1RleHR1cmUgKyddJzsKKyAgICAgICAgfQorICAgIH0KKyk7CisvKiBGYWtlIGEg
RmxvZy4qIG5hbWVzcGFjZSAqLworaWYodHlwZW9mKEZsb2cpID09ICd1bmRlZmluZWQnKSB2YXIg
RmxvZyA9IHt9OworaWYodHlwZW9mKEZsb2cuUmF5VHJhY2VyKSA9PSAndW5kZWZpbmVkJykgRmxv
Zy5SYXlUcmFjZXIgPSB7fTsKK2lmKHR5cGVvZihGbG9nLlJheVRyYWNlci5TaGFwZSkgPT0gJ3Vu
ZGVmaW5lZCcpIEZsb2cuUmF5VHJhY2VyLlNoYXBlID0ge307CisKK0Zsb2cuUmF5VHJhY2VyLlNo
YXBlLlNwaGVyZSA9IENsYXNzLmNyZWF0ZSgpOworCitGbG9nLlJheVRyYWNlci5TaGFwZS5TcGhl
cmUucHJvdG90eXBlID0geworICAgIGluaXRpYWxpemUgOiBmdW5jdGlvbihwb3MsIHJhZGl1cywg
bWF0ZXJpYWwpIHsKKyAgICAgICAgdGhpcy5yYWRpdXMgPSByYWRpdXM7CisgICAgICAgIHRoaXMu
cG9zaXRpb24gPSBwb3M7CisgICAgICAgIHRoaXMubWF0ZXJpYWwgPSBtYXRlcmlhbDsKKyAgICB9
LAorCisgICAgaW50ZXJzZWN0OiBmdW5jdGlvbihyYXkpeworICAgICAgICB2YXIgaW5mbyA9IG5l
dyBGbG9nLlJheVRyYWNlci5JbnRlcnNlY3Rpb25JbmZvKCk7CisgICAgICAgIGluZm8uc2hhcGUg
PSB0aGlzOworCisgICAgICAgIHZhciBkc3QgPSBGbG9nLlJheVRyYWNlci5WZWN0b3IucHJvdG90
eXBlLnN1YnRyYWN0KHJheS5wb3NpdGlvbiwgdGhpcy5wb3NpdGlvbik7CisKKyAgICAgICAgdmFy
IEIgPSBkc3QuZG90KHJheS5kaXJlY3Rpb24pOworICAgICAgICB2YXIgQyA9IGRzdC5kb3QoZHN0
KSAtICh0aGlzLnJhZGl1cyAqIHRoaXMucmFkaXVzKTsKKyAgICAgICAgdmFyIEQgPSAoQiAqIEIp
IC0gQzsKKworICAgICAgICBpZihEID4gMCl7IC8vIGludGVyc2VjdGlvbiEKKyAgICAgICAgICAg
IGluZm8uaXNIaXQgPSB0cnVlOworICAgICAgICAgICAgaW5mby5kaXN0YW5jZSA9ICgtQikgLSBN
YXRoLnNxcnQoRCk7CisgICAgICAgICAgICBpbmZvLnBvc2l0aW9uID0gRmxvZy5SYXlUcmFjZXIu
VmVjdG9yLnByb3RvdHlwZS5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByYXkucG9zaXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBGbG9nLlJheVRyYWNlci5WZWN0b3IucHJvdG90eXBlLm11bHRp
cGx5U2NhbGFyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJheS5kaXJlY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5mby5kaXN0YW5jZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICApOworICAgICAgICAgICAgaW5mby5ub3JtYWwgPSBGbG9nLlJheVRyYWNl
ci5WZWN0b3IucHJvdG90eXBlLnN1YnRyYWN0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmZvLnBvc2l0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKS5ub3JtYWxpemUoKTsKKworICAgICAgICAgICAgaW5mby5jb2xv
ciA9IHRoaXMubWF0ZXJpYWwuZ2V0Q29sb3IoMCwwKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGluZm8uaXNIaXQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gaW5m
bzsKKyAgICB9LAorCisgICAgdG9TdHJpbmcgOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVy
biAnU3BoZXJlIFtwb3NpdGlvbj0nICsgdGhpcy5wb3NpdGlvbiArICcsIHJhZGl1cz0nICsgdGhp
cy5yYWRpdXMgKyAnXSc7CisgICAgfQorfQorLyogRmFrZSBhIEZsb2cuKiBuYW1lc3BhY2UgKi8K
K2lmKHR5cGVvZihGbG9nKSA9PSAndW5kZWZpbmVkJykgdmFyIEZsb2cgPSB7fTsKK2lmKHR5cGVv
ZihGbG9nLlJheVRyYWNlcikgPT0gJ3VuZGVmaW5lZCcpIEZsb2cuUmF5VHJhY2VyID0ge307Citp
Zih0eXBlb2YoRmxvZy5SYXlUcmFjZXIuU2hhcGUpID09ICd1bmRlZmluZWQnKSBGbG9nLlJheVRy
YWNlci5TaGFwZSA9IHt9OworCitGbG9nLlJheVRyYWNlci5TaGFwZS5QbGFuZSA9IENsYXNzLmNy
ZWF0ZSgpOworCitGbG9nLlJheVRyYWNlci5TaGFwZS5QbGFuZS5wcm90b3R5cGUgPSB7CisgICAg
ZDogMC4wLAorCisgICAgaW5pdGlhbGl6ZSA6IGZ1bmN0aW9uKHBvcywgZCwgbWF0ZXJpYWwpIHsK
KyAgICAgICAgdGhpcy5wb3NpdGlvbiA9IHBvczsKKyAgICAgICAgdGhpcy5kID0gZDsKKyAgICAg
ICAgdGhpcy5tYXRlcmlhbCA9IG1hdGVyaWFsOworICAgIH0sCisKKyAgICBpbnRlcnNlY3Q6IGZ1
bmN0aW9uKHJheSl7CisgICAgICAgIHZhciBpbmZvID0gbmV3IEZsb2cuUmF5VHJhY2VyLkludGVy
c2VjdGlvbkluZm8oKTsKKworICAgICAgICB2YXIgVmQgPSB0aGlzLnBvc2l0aW9uLmRvdChyYXku
ZGlyZWN0aW9uKTsKKyAgICAgICAgaWYoVmQgPT0gMCkgcmV0dXJuIGluZm87IC8vIG5vIGludGVy
c2VjdGlvbgorCisgICAgICAgIHZhciB0ID0gLSh0aGlzLnBvc2l0aW9uLmRvdChyYXkucG9zaXRp
b24pICsgdGhpcy5kKSAvIFZkOworICAgICAgICBpZih0IDw9IDApIHJldHVybiBpbmZvOworCisg
ICAgICAgIGluZm8uc2hhcGUgPSB0aGlzOworICAgICAgICBpbmZvLmlzSGl0ID0gdHJ1ZTsKKyAg
ICAgICAgaW5mby5wb3NpdGlvbiA9IEZsb2cuUmF5VHJhY2VyLlZlY3Rvci5wcm90b3R5cGUuYWRk
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXkucG9zaXRp
b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2cuUmF5
VHJhY2VyLlZlY3Rvci5wcm90b3R5cGUubXVsdGlwbHlTY2FsYXIoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXkuZGlyZWN0aW9uLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgaW5mby5ub3JtYWwgPSB0aGlzLnBvc2l0aW9uOwor
ICAgICAgICBpbmZvLmRpc3RhbmNlID0gdDsKKworICAgICAgICBpZih0aGlzLm1hdGVyaWFsLmhh
c1RleHR1cmUpeworICAgICAgICAgICAgdmFyIHZVID0gbmV3IEZsb2cuUmF5VHJhY2VyLlZlY3Rv
cih0aGlzLnBvc2l0aW9uLnksIHRoaXMucG9zaXRpb24ueiwgLXRoaXMucG9zaXRpb24ueCk7Cisg
ICAgICAgICAgICB2YXIgdlYgPSB2VS5jcm9zcyh0aGlzLnBvc2l0aW9uKTsKKyAgICAgICAgICAg
IHZhciB1ID0gaW5mby5wb3NpdGlvbi5kb3QodlUpOworICAgICAgICAgICAgdmFyIHYgPSBpbmZv
LnBvc2l0aW9uLmRvdCh2Vik7CisgICAgICAgICAgICBpbmZvLmNvbG9yID0gdGhpcy5tYXRlcmlh
bC5nZXRDb2xvcih1LHYpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW5mby5jb2xv
ciA9IHRoaXMubWF0ZXJpYWwuZ2V0Q29sb3IoMCwwKTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBpbmZvOworICAgIH0sCisKKyAgICB0b1N0cmluZyA6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgcmV0dXJuICdQbGFuZSBbJyArIHRoaXMucG9zaXRpb24gKyAnLCBkPScgKyB0aGlzLmQgKyAn
XSc7CisgICAgfQorfQorLyogRmFrZSBhIEZsb2cuKiBuYW1lc3BhY2UgKi8KK2lmKHR5cGVvZihG
bG9nKSA9PSAndW5kZWZpbmVkJykgdmFyIEZsb2cgPSB7fTsKK2lmKHR5cGVvZihGbG9nLlJheVRy
YWNlcikgPT0gJ3VuZGVmaW5lZCcpIEZsb2cuUmF5VHJhY2VyID0ge307CisKK0Zsb2cuUmF5VHJh
Y2VyLkludGVyc2VjdGlvbkluZm8gPSBDbGFzcy5jcmVhdGUoKTsKKworRmxvZy5SYXlUcmFjZXIu
SW50ZXJzZWN0aW9uSW5mby5wcm90b3R5cGUgPSB7CisgICAgaXNIaXQ6IGZhbHNlLAorICAgIGhp
dENvdW50OiAwLAorICAgIHNoYXBlOiBudWxsLAorICAgIHBvc2l0aW9uOiBudWxsLAorICAgIG5v
cm1hbDogbnVsbCwKKyAgICBjb2xvcjogbnVsbCwKKyAgICBkaXN0YW5jZTogbnVsbCwKKworICAg
IGluaXRpYWxpemUgOiBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5jb2xvciA9IG5ldyBGbG9n
LlJheVRyYWNlci5Db2xvcigwLDAsMCk7CisgICAgfSwKKworICAgIHRvU3RyaW5nIDogZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gJ0ludGVyc2VjdGlvbiBbJyArIHRoaXMucG9zaXRpb24g
KyAnXSc7CisgICAgfQorfQorLyogRmFrZSBhIEZsb2cuKiBuYW1lc3BhY2UgKi8KK2lmKHR5cGVv
ZihGbG9nKSA9PSAndW5kZWZpbmVkJykgdmFyIEZsb2cgPSB7fTsKK2lmKHR5cGVvZihGbG9nLlJh
eVRyYWNlcikgPT0gJ3VuZGVmaW5lZCcpIEZsb2cuUmF5VHJhY2VyID0ge307CisKK0Zsb2cuUmF5
VHJhY2VyLkNhbWVyYSA9IENsYXNzLmNyZWF0ZSgpOworCitGbG9nLlJheVRyYWNlci5DYW1lcmEu
cHJvdG90eXBlID0geworICAgIHBvc2l0aW9uOiBudWxsLAorICAgIGxvb2tBdDogbnVsbCwKKyAg
ICBlcXVhdG9yOiBudWxsLAorICAgIHVwOiBudWxsLAorICAgIHNjcmVlbjogbnVsbCwKKworICAg
IGluaXRpYWxpemUgOiBmdW5jdGlvbihwb3MsIGxvb2tBdCwgdXApIHsKKyAgICAgICAgdGhpcy5w
b3NpdGlvbiA9IHBvczsKKyAgICAgICAgdGhpcy5sb29rQXQgPSBsb29rQXQ7CisgICAgICAgIHRo
aXMudXAgPSB1cDsKKyAgICAgICAgdGhpcy5lcXVhdG9yID0gbG9va0F0Lm5vcm1hbGl6ZSgpLmNy
b3NzKHRoaXMudXApOworICAgICAgICB0aGlzLnNjcmVlbiA9IEZsb2cuUmF5VHJhY2VyLlZlY3Rv
ci5wcm90b3R5cGUuYWRkKHRoaXMucG9zaXRpb24sIHRoaXMubG9va0F0KTsKKyAgICB9LAorCisg
ICAgZ2V0UmF5OiBmdW5jdGlvbih2eCwgdnkpeworICAgICAgICB2YXIgcG9zID0gRmxvZy5SYXlU
cmFjZXIuVmVjdG9yLnByb3RvdHlwZS5zdWJ0cmFjdCgKKyAgICAgICAgICAgIHRoaXMuc2NyZWVu
LAorICAgICAgICAgICAgRmxvZy5SYXlUcmFjZXIuVmVjdG9yLnByb3RvdHlwZS5zdWJ0cmFjdCgK
KyAgICAgICAgICAgICAgICBGbG9nLlJheVRyYWNlci5WZWN0b3IucHJvdG90eXBlLm11bHRpcGx5
U2NhbGFyKHRoaXMuZXF1YXRvciwgdngpLAorICAgICAgICAgICAgICAgIEZsb2cuUmF5VHJhY2Vy
LlZlY3Rvci5wcm90b3R5cGUubXVsdGlwbHlTY2FsYXIodGhpcy51cCwgdnkpCisgICAgICAgICAg
ICApCisgICAgICAgICk7CisgICAgICAgIHBvcy55ID0gcG9zLnkgKiAtMTsKKyAgICAgICAgdmFy
IGRpciA9IEZsb2cuUmF5VHJhY2VyLlZlY3Rvci5wcm90b3R5cGUuc3VidHJhY3QoCisgICAgICAg
ICAgICBwb3MsCisgICAgICAgICAgICB0aGlzLnBvc2l0aW9uCisgICAgICAgICk7CisKKyAgICAg
ICAgdmFyIHJheSA9IG5ldyBGbG9nLlJheVRyYWNlci5SYXkocG9zLCBkaXIubm9ybWFsaXplKCkp
OworCisgICAgICAgIHJldHVybiByYXk7CisgICAgfSwKKworICAgIHRvU3RyaW5nIDogZnVuY3Rp
b24gKCkgeworICAgICAgICByZXR1cm4gJ1JheSBbXSc7CisgICAgfQorfQorLyogRmFrZSBhIEZs
b2cuKiBuYW1lc3BhY2UgKi8KK2lmKHR5cGVvZihGbG9nKSA9PSAndW5kZWZpbmVkJykgdmFyIEZs
b2cgPSB7fTsKK2lmKHR5cGVvZihGbG9nLlJheVRyYWNlcikgPT0gJ3VuZGVmaW5lZCcpIEZsb2cu
UmF5VHJhY2VyID0ge307CisKK0Zsb2cuUmF5VHJhY2VyLkJhY2tncm91bmQgPSBDbGFzcy5jcmVh
dGUoKTsKKworRmxvZy5SYXlUcmFjZXIuQmFja2dyb3VuZC5wcm90b3R5cGUgPSB7CisgICAgY29s
b3IgOiBudWxsLAorICAgIGFtYmllbmNlIDogMC4wLAorCisgICAgaW5pdGlhbGl6ZSA6IGZ1bmN0
aW9uKGNvbG9yLCBhbWJpZW5jZSkgeworICAgICAgICB0aGlzLmNvbG9yID0gY29sb3I7CisgICAg
ICAgIHRoaXMuYW1iaWVuY2UgPSBhbWJpZW5jZTsKKyAgICB9Cit9CisvKiBGYWtlIGEgRmxvZy4q
IG5hbWVzcGFjZSAqLworaWYodHlwZW9mKEZsb2cpID09ICd1bmRlZmluZWQnKSB2YXIgRmxvZyA9
IHt9OworaWYodHlwZW9mKEZsb2cuUmF5VHJhY2VyKSA9PSAndW5kZWZpbmVkJykgRmxvZy5SYXlU
cmFjZXIgPSB7fTsKKworRmxvZy5SYXlUcmFjZXIuRW5naW5lID0gQ2xhc3MuY3JlYXRlKCk7CisK
K0Zsb2cuUmF5VHJhY2VyLkVuZ2luZS5wcm90b3R5cGUgPSB7CisgICAgY2FudmFzOiBudWxsLCAv
KiAyZCBjb250ZXh0IHdlIGNhbiByZW5kZXIgdG8gKi8KKworICAgIGluaXRpYWxpemU6IGZ1bmN0
aW9uKG9wdGlvbnMpeworICAgICAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuZXh0ZW5kKHsKKyAg
ICAgICAgICAgICAgICBjYW52YXNIZWlnaHQ6IDEwMCwKKyAgICAgICAgICAgICAgICBjYW52YXNX
aWR0aDogMTAwLAorICAgICAgICAgICAgICAgIHBpeGVsV2lkdGg6IDIsCisgICAgICAgICAgICAg
ICAgcGl4ZWxIZWlnaHQ6IDIsCisgICAgICAgICAgICAgICAgcmVuZGVyRGlmZnVzZTogZmFsc2Us
CisgICAgICAgICAgICAgICAgcmVuZGVyU2hhZG93czogZmFsc2UsCisgICAgICAgICAgICAgICAg
cmVuZGVySGlnaGxpZ2h0czogZmFsc2UsCisgICAgICAgICAgICAgICAgcmVuZGVyUmVmbGVjdGlv
bnM6IGZhbHNlLAorICAgICAgICAgICAgICAgIHJheURlcHRoOiAyCisgICAgICAgICAgICB9LCBv
cHRpb25zIHx8IHt9KTsKKworICAgICAgICB0aGlzLm9wdGlvbnMuY2FudmFzSGVpZ2h0IC89IHRo
aXMub3B0aW9ucy5waXhlbEhlaWdodDsKKyAgICAgICAgdGhpcy5vcHRpb25zLmNhbnZhc1dpZHRo
IC89IHRoaXMub3B0aW9ucy5waXhlbFdpZHRoOworCisgICAgICAgIC8qIFRPRE86IGR5bmFtaWNh
bGx5IGluY2x1ZGUgb3RoZXIgc2NyaXB0cyAqLworICAgIH0sCisKKyAgICBzZXRQaXhlbDogZnVu
Y3Rpb24oeCwgeSwgY29sb3IpeworICAgICAgICB2YXIgcHhXLCBweEg7CisgICAgICAgIHB4VyA9
IHRoaXMub3B0aW9ucy5waXhlbFdpZHRoOworICAgICAgICBweEggPSB0aGlzLm9wdGlvbnMucGl4
ZWxIZWlnaHQ7CisKKyAgICAgICAgaWYgKHRoaXMuY2FudmFzKSB7CisgICAgICAgICAgdGhpcy5j
YW52YXMuZmlsbFN0eWxlID0gY29sb3IudG9TdHJpbmcoKTsKKyAgICAgICAgICB0aGlzLmNhbnZh
cy5maWxsUmVjdCAoeCAqIHB4VywgeSAqIHB4SCwgcHhXLCBweEgpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgIGlmICh4ID09PSAgeSkgeworICAgICAgICAgICAgY2hlY2tOdW1iZXIgKz0g
Y29sb3IuYnJpZ2h0bmVzcygpOworICAgICAgICAgIH0KKyAgICAgICAgICAvLyBwcmludCh4ICog
cHhXLCB5ICogcHhILCBweFcsIHB4SCk7CisgICAgICAgIH0KKyAgICB9LAorCisgICAgcmVuZGVy
U2NlbmU6IGZ1bmN0aW9uKHNjZW5lLCBjYW52YXMpeworICAgICAgICBjaGVja051bWJlciA9IDA7
CisgICAgICAgIC8qIEdldCBjYW52YXMgKi8KKyAgICAgICAgaWYgKGNhbnZhcykgeworICAgICAg
ICAgIHRoaXMuY2FudmFzID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgdGhpcy5jYW52YXMgPSBudWxsOworICAgICAgICB9CisKKyAgICAgICAg
dmFyIGNhbnZhc0hlaWdodCA9IHRoaXMub3B0aW9ucy5jYW52YXNIZWlnaHQ7CisgICAgICAgIHZh
ciBjYW52YXNXaWR0aCA9IHRoaXMub3B0aW9ucy5jYW52YXNXaWR0aDsKKworICAgICAgICBmb3Io
dmFyIHk9MDsgeSA8IGNhbnZhc0hlaWdodDsgeSsrKXsKKyAgICAgICAgICAgIGZvcih2YXIgeD0w
OyB4IDwgY2FudmFzV2lkdGg7IHgrKyl7CisgICAgICAgICAgICAgICAgdmFyIHlwID0geSAqIDEu
MCAvIGNhbnZhc0hlaWdodCAqIDIgLSAxOworICAgICAgICAgIAkJdmFyIHhwID0geCAqIDEuMCAv
IGNhbnZhc1dpZHRoICogMiAtIDE7CisKKyAgICAgICAgICAJCXZhciByYXkgPSBzY2VuZS5jYW1l
cmEuZ2V0UmF5KHhwLCB5cCk7CisKKyAgICAgICAgICAJCXZhciBjb2xvciA9IHRoaXMuZ2V0UGl4
ZWxDb2xvcihyYXksIHNjZW5lKTsKKworICAgICAgICAgICAgCXRoaXMuc2V0UGl4ZWwoeCwgeSwg
Y29sb3IpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChjaGVja051bWJl
ciAhPT0gMjMyMSkgeworICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiU2NlbmUgcmVuZGVyZWQg
aW5jb3JyZWN0bHkiKTsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBnZXRQaXhlbENvbG9yOiBm
dW5jdGlvbihyYXksIHNjZW5lKXsKKyAgICAgICAgdmFyIGluZm8gPSB0aGlzLnRlc3RJbnRlcnNl
Y3Rpb24ocmF5LCBzY2VuZSwgbnVsbCk7CisgICAgICAgIGlmKGluZm8uaXNIaXQpeworICAgICAg
ICAgICAgdmFyIGNvbG9yID0gdGhpcy5yYXlUcmFjZShpbmZvLCByYXksIHNjZW5lLCAwKTsKKyAg
ICAgICAgICAgIHJldHVybiBjb2xvcjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc2NlbmUu
YmFja2dyb3VuZC5jb2xvcjsKKyAgICB9LAorCisgICAgdGVzdEludGVyc2VjdGlvbjogZnVuY3Rp
b24ocmF5LCBzY2VuZSwgZXhjbHVkZSl7CisgICAgICAgIHZhciBoaXRzID0gMDsKKyAgICAgICAg
dmFyIGJlc3QgPSBuZXcgRmxvZy5SYXlUcmFjZXIuSW50ZXJzZWN0aW9uSW5mbygpOworICAgICAg
ICBiZXN0LmRpc3RhbmNlID0gMjAwMDsKKworICAgICAgICBmb3IodmFyIGk9MDsgaTxzY2VuZS5z
aGFwZXMubGVuZ3RoOyBpKyspeworICAgICAgICAgICAgdmFyIHNoYXBlID0gc2NlbmUuc2hhcGVz
W2ldOworCisgICAgICAgICAgICBpZihzaGFwZSAhPSBleGNsdWRlKXsKKyAgICAgICAgICAgICAg
ICB2YXIgaW5mbyA9IHNoYXBlLmludGVyc2VjdChyYXkpOworICAgICAgICAgICAgICAgIGlmKGlu
Zm8uaXNIaXQgJiYgaW5mby5kaXN0YW5jZSA+PSAwICYmIGluZm8uZGlzdGFuY2UgPCBiZXN0LmRp
c3RhbmNlKXsKKyAgICAgICAgICAgICAgICAgICAgYmVzdCA9IGluZm87CisgICAgICAgICAgICAg
ICAgICAgIGhpdHMrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgYmVzdC5oaXRDb3VudCA9IGhpdHM7CisgICAgICAgIHJldHVybiBiZXN0Owor
ICAgIH0sCisKKyAgICBnZXRSZWZsZWN0aW9uUmF5OiBmdW5jdGlvbihQLE4sVil7CisgICAgICAg
IHZhciBjMSA9IC1OLmRvdChWKTsKKyAgICAgICAgdmFyIFIxID0gRmxvZy5SYXlUcmFjZXIuVmVj
dG9yLnByb3RvdHlwZS5hZGQoCisgICAgICAgICAgICBGbG9nLlJheVRyYWNlci5WZWN0b3IucHJv
dG90eXBlLm11bHRpcGx5U2NhbGFyKE4sIDIqYzEpLAorICAgICAgICAgICAgVgorICAgICAgICAp
OworICAgICAgICByZXR1cm4gbmV3IEZsb2cuUmF5VHJhY2VyLlJheShQLCBSMSk7CisgICAgfSwK
KworICAgIHJheVRyYWNlOiBmdW5jdGlvbihpbmZvLCByYXksIHNjZW5lLCBkZXB0aCl7CisgICAg
ICAgIC8vIENhbGMgYW1iaWVudAorICAgICAgICB2YXIgY29sb3IgPSBGbG9nLlJheVRyYWNlci5D
b2xvci5wcm90b3R5cGUubXVsdGlwbHlTY2FsYXIoaW5mby5jb2xvciwgc2NlbmUuYmFja2dyb3Vu
ZC5hbWJpZW5jZSk7CisgICAgICAgIHZhciBvbGRDb2xvciA9IGNvbG9yOworICAgICAgICB2YXIg
c2hpbmluZXNzID0gTWF0aC5wb3coMTAsIGluZm8uc2hhcGUubWF0ZXJpYWwuZ2xvc3MgKyAxKTsK
KworICAgICAgICBmb3IodmFyIGk9MDsgaTxzY2VuZS5saWdodHMubGVuZ3RoOyBpKyspeworICAg
ICAgICAgICAgdmFyIGxpZ2h0ID0gc2NlbmUubGlnaHRzW2ldOworCisgICAgICAgICAgICAvLyBD
YWxjIGRpZmZ1c2UgbGlnaHRpbmcKKyAgICAgICAgICAgIHZhciB2ID0gRmxvZy5SYXlUcmFjZXIu
VmVjdG9yLnByb3RvdHlwZS5zdWJ0cmFjdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGlnaHQucG9zaXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8u
cG9zaXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApLm5vcm1hbGl6ZSgpOworCisg
ICAgICAgICAgICBpZih0aGlzLm9wdGlvbnMucmVuZGVyRGlmZnVzZSl7CisgICAgICAgICAgICAg
ICAgdmFyIEwgPSB2LmRvdChpbmZvLm5vcm1hbCk7CisgICAgICAgICAgICAgICAgaWYoTCA+IDAu
MCl7CisgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gRmxvZy5SYXlUcmFjZXIuQ29sb3IucHJv
dG90eXBlLmFkZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xv
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9nLlJheVRyYWNl
ci5Db2xvci5wcm90b3R5cGUubXVsdGlwbHkoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluZm8uY29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEZsb2cuUmF5VHJhY2VyLkNvbG9yLnByb3RvdHlwZS5tdWx0aXBseVNj
YWxhcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxp
Z2h0LmNvbG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIFRoZSBncmVhdGVyIHRoZSBkZXB0aCB0aGUgbW9yZSBhY2N1cmF0ZSB0
aGUgY29sb3VycywgYnV0CisgICAgICAgICAgICAvLyB0aGlzIGlzIGV4cG9uZW50aWFsbHkgKCEp
IGV4cGVuc2l2ZQorICAgICAgICAgICAgaWYoZGVwdGggPD0gdGhpcy5vcHRpb25zLnJheURlcHRo
KXsKKyAgICAgICAgICAvLyBjYWxjdWxhdGUgcmVmbGVjdGlvbiByYXkKKyAgICAgICAgICBpZih0
aGlzLm9wdGlvbnMucmVuZGVyUmVmbGVjdGlvbnMgJiYgaW5mby5zaGFwZS5tYXRlcmlhbC5yZWZs
ZWN0aW9uID4gMCkKKyAgICAgICAgICB7CisgICAgICAgICAgICAgIHZhciByZWZsZWN0aW9uUmF5
ID0gdGhpcy5nZXRSZWZsZWN0aW9uUmF5KGluZm8ucG9zaXRpb24sIGluZm8ubm9ybWFsLCByYXku
ZGlyZWN0aW9uKTsKKyAgICAgICAgICAgICAgdmFyIHJlZmwgPSB0aGlzLnRlc3RJbnRlcnNlY3Rp
b24ocmVmbGVjdGlvblJheSwgc2NlbmUsIGluZm8uc2hhcGUpOworCisgICAgICAgICAgICAgIGlm
IChyZWZsLmlzSGl0ICYmIHJlZmwuZGlzdGFuY2UgPiAwKXsKKyAgICAgICAgICAgICAgICAgIHJl
ZmwuY29sb3IgPSB0aGlzLnJheVRyYWNlKHJlZmwsIHJlZmxlY3Rpb25SYXksIHNjZW5lLCBkZXB0
aCArIDEpOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgcmVmbC5j
b2xvciA9IHNjZW5lLmJhY2tncm91bmQuY29sb3I7CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgIGNvbG9yID0gRmxvZy5SYXlUcmFjZXIuQ29sb3IucHJvdG90
eXBlLmJsZW5kKAorICAgICAgICAgICAgICAgICAgICBjb2xvciwKKyAgICAgICAgICAgICAgICAg
ICAgcmVmbC5jb2xvciwKKyAgICAgICAgICAgICAgICAgICAgaW5mby5zaGFwZS5tYXRlcmlhbC5y
ZWZsZWN0aW9uCisgICAgICAgICAgICAgICAgICApOworICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIC8vIFJlZnJhY3Rpb24KKyAgICAgICAgICAgICAgICAvKiBUT0RPICovCisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8qIFJlbmRlciBzaGFkb3dzIGFuZCBoaWdobGlnaHRzICov
CisKKyAgICAgICAgICAgIHZhciBzaGFkb3dJbmZvID0gbmV3IEZsb2cuUmF5VHJhY2VyLkludGVy
c2VjdGlvbkluZm8oKTsKKworICAgICAgICAgICAgaWYodGhpcy5vcHRpb25zLnJlbmRlclNoYWRv
d3MpeworICAgICAgICAgICAgICAgIHZhciBzaGFkb3dSYXkgPSBuZXcgRmxvZy5SYXlUcmFjZXIu
UmF5KGluZm8ucG9zaXRpb24sIHYpOworCisgICAgICAgICAgICAgICAgc2hhZG93SW5mbyA9IHRo
aXMudGVzdEludGVyc2VjdGlvbihzaGFkb3dSYXksIHNjZW5lLCBpbmZvLnNoYXBlKTsKKyAgICAg
ICAgICAgICAgICBpZihzaGFkb3dJbmZvLmlzSGl0ICYmIHNoYWRvd0luZm8uc2hhcGUgIT0gaW5m
by5zaGFwZSAvKiYmIHNoYWRvd0luZm8uc2hhcGUudHlwZSAhPSAnUExBTkUnKi8peworICAgICAg
ICAgICAgICAgICAgICB2YXIgdkEgPSBGbG9nLlJheVRyYWNlci5Db2xvci5wcm90b3R5cGUubXVs
dGlwbHlTY2FsYXIoY29sb3IsIDAuNSk7CisgICAgICAgICAgICAgICAgICAgIHZhciBkQiA9ICgw
LjUgKiBNYXRoLnBvdyhzaGFkb3dJbmZvLnNoYXBlLm1hdGVyaWFsLnRyYW5zcGFyZW5jeSwgMC41
KSk7CisgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gRmxvZy5SYXlUcmFjZXIuQ29sb3IucHJv
dG90eXBlLmFkZFNjYWxhcih2QSxkQik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCisgICAgICAvLyBQaG9uZyBzcGVjdWxhciBoaWdobGlnaHRzCisgICAgICBpZih0aGlzLm9w
dGlvbnMucmVuZGVySGlnaGxpZ2h0cyAmJiAhc2hhZG93SW5mby5pc0hpdCAmJiBpbmZvLnNoYXBl
Lm1hdGVyaWFsLmdsb3NzID4gMCl7CisgICAgICAgIHZhciBMdiA9IEZsb2cuUmF5VHJhY2VyLlZl
Y3Rvci5wcm90b3R5cGUuc3VidHJhY3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5m
by5zaGFwZS5wb3NpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWdodC5wb3Np
dGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgKS5ub3JtYWxpemUoKTsKKworICAgICAgICB2
YXIgRSA9IEZsb2cuUmF5VHJhY2VyLlZlY3Rvci5wcm90b3R5cGUuc3VidHJhY3QoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2NlbmUuY2FtZXJhLnBvc2l0aW9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluZm8uc2hhcGUucG9zaXRpb24KKyAgICAgICAgICAgICAgICAgICAg
ICAgICkubm9ybWFsaXplKCk7CisKKyAgICAgICAgdmFyIEggPSBGbG9nLlJheVRyYWNlci5WZWN0
b3IucHJvdG90eXBlLnN1YnRyYWN0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTHYKKyAgICAgICAgICAgICAgICAgICAgICAgICku
bm9ybWFsaXplKCk7CisKKyAgICAgICAgdmFyIGdsb3NzV2VpZ2h0ID0gTWF0aC5wb3coTWF0aC5t
YXgoaW5mby5ub3JtYWwuZG90KEgpLCAwKSwgc2hpbmluZXNzKTsKKyAgICAgICAgY29sb3IgPSBG
bG9nLlJheVRyYWNlci5Db2xvci5wcm90b3R5cGUuYWRkKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEZsb2cuUmF5VHJhY2VyLkNvbG9yLnByb3RvdHlwZS5tdWx0aXBseVNjYWxhcihsaWdo
dC5jb2xvciwgZ2xvc3NXZWlnaHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9y
CisgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGNvbG9yLmxpbWl0KCk7CisgICAgICAgIHJldHVybiBjb2xvcjsKKyAgICB9Cit9OworCisKK2Z1
bmN0aW9uIHJlbmRlclNjZW5lKCl7CisgICAgdmFyIHNjZW5lID0gbmV3IEZsb2cuUmF5VHJhY2Vy
LlNjZW5lKCk7CisKKyAgICBzY2VuZS5jYW1lcmEgPSBuZXcgRmxvZy5SYXlUcmFjZXIuQ2FtZXJh
KAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZsb2cuUmF5VHJhY2VyLlZlY3RvcigwLCAw
LCAtMTUpLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZsb2cuUmF5VHJhY2VyLlZlY3Rv
cigtMC4yLCAwLCA1KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGbG9nLlJheVRyYWNl
ci5WZWN0b3IoMCwgMSwgMCkKKyAgICAgICAgICAgICAgICAgICAgKTsKKworICAgIHNjZW5lLmJh
Y2tncm91bmQgPSBuZXcgRmxvZy5SYXlUcmFjZXIuQmFja2dyb3VuZCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3IEZsb2cuUmF5VHJhY2VyLkNvbG9yKDAuNSwgMC41LCAwLjUp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjQKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICApOworCisgICAgdmFyIHNwaGVyZSA9IG5ldyBGbG9nLlJheVRyYWNlci5TaGFw
ZS5TcGhlcmUoCisgICAgICAgIG5ldyBGbG9nLlJheVRyYWNlci5WZWN0b3IoLTEuNSwgMS41LCAy
KSwKKyAgICAgICAgMS41LAorICAgICAgICBuZXcgRmxvZy5SYXlUcmFjZXIuTWF0ZXJpYWwuU29s
aWQoCisgICAgICAgICAgICBuZXcgRmxvZy5SYXlUcmFjZXIuQ29sb3IoMCwwLjUsMC41KSwKKyAg
ICAgICAgICAgIDAuMywKKyAgICAgICAgICAgIDAuMCwKKyAgICAgICAgICAgIDAuMCwKKyAgICAg
ICAgICAgIDIuMAorICAgICAgICApCisgICAgKTsKKworICAgIHZhciBzcGhlcmUxID0gbmV3IEZs
b2cuUmF5VHJhY2VyLlNoYXBlLlNwaGVyZSgKKyAgICAgICAgbmV3IEZsb2cuUmF5VHJhY2VyLlZl
Y3RvcigxLCAwLjI1LCAxKSwKKyAgICAgICAgMC41LAorICAgICAgICBuZXcgRmxvZy5SYXlUcmFj
ZXIuTWF0ZXJpYWwuU29saWQoCisgICAgICAgICAgICBuZXcgRmxvZy5SYXlUcmFjZXIuQ29sb3Io
MC45LDAuOSwwLjkpLAorICAgICAgICAgICAgMC4xLAorICAgICAgICAgICAgMC4wLAorICAgICAg
ICAgICAgMC4wLAorICAgICAgICAgICAgMS41CisgICAgICAgICkKKyAgICApOworCisgICAgdmFy
IHBsYW5lID0gbmV3IEZsb2cuUmF5VHJhY2VyLlNoYXBlLlBsYW5lKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBuZXcgRmxvZy5SYXlUcmFjZXIuVmVjdG9yKDAuMSwgMC45LCAtMC41
KS5ub3JtYWxpemUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4yLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRmxvZy5SYXlUcmFjZXIuTWF0ZXJpYWwu
Q2hlc3Nib2FyZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGbG9n
LlJheVRyYWNlci5Db2xvcigxLDEsMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBuZXcgRmxvZy5SYXlUcmFjZXIuQ29sb3IoMCwwLDApLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMC4yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMC4wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC43CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworCisgICAgc2NlbmUu
c2hhcGVzLnB1c2gocGxhbmUpOworICAgIHNjZW5lLnNoYXBlcy5wdXNoKHNwaGVyZSk7CisgICAg
c2NlbmUuc2hhcGVzLnB1c2goc3BoZXJlMSk7CisKKyAgICB2YXIgbGlnaHQgPSBuZXcgRmxvZy5S
YXlUcmFjZXIuTGlnaHQoCisgICAgICAgIG5ldyBGbG9nLlJheVRyYWNlci5WZWN0b3IoNSwgMTAs
IC0xKSwKKyAgICAgICAgbmV3IEZsb2cuUmF5VHJhY2VyLkNvbG9yKDAuOCwgMC44LCAwLjgpCisg
ICAgKTsKKworICAgIHZhciBsaWdodDEgPSBuZXcgRmxvZy5SYXlUcmFjZXIuTGlnaHQoCisgICAg
ICAgIG5ldyBGbG9nLlJheVRyYWNlci5WZWN0b3IoLTMsIDUsIC0xNSksCisgICAgICAgIG5ldyBG
bG9nLlJheVRyYWNlci5Db2xvcigwLjgsIDAuOCwgMC44KSwKKyAgICAgICAgMTAwCisgICAgKTsK
KworICAgIHNjZW5lLmxpZ2h0cy5wdXNoKGxpZ2h0KTsKKyAgICBzY2VuZS5saWdodHMucHVzaChs
aWdodDEpOworCisgICAgdmFyIGltYWdlV2lkdGggPSAxMDA7IC8vICRGKCdpbWFnZVdpZHRoJyk7
CisgICAgdmFyIGltYWdlSGVpZ2h0ID0gMTAwOyAvLyAkRignaW1hZ2VIZWlnaHQnKTsKKyAgICB2
YXIgcGl4ZWxTaXplID0gIjUsNSIuc3BsaXQoJywnKTsgLy8gICRGKCdwaXhlbFNpemUnKS5zcGxp
dCgnLCcpOworICAgIHZhciByZW5kZXJEaWZmdXNlID0gdHJ1ZTsgLy8gJEYoJ3JlbmRlckRpZmZ1
c2UnKTsKKyAgICB2YXIgcmVuZGVyU2hhZG93cyA9IHRydWU7IC8vICRGKCdyZW5kZXJTaGFkb3dz
Jyk7CisgICAgdmFyIHJlbmRlckhpZ2hsaWdodHMgPSB0cnVlOyAvLyAkRigncmVuZGVySGlnaGxp
Z2h0cycpOworICAgIHZhciByZW5kZXJSZWZsZWN0aW9ucyA9IHRydWU7IC8vICRGKCdyZW5kZXJS
ZWZsZWN0aW9ucycpOworICAgIHZhciByYXlEZXB0aCA9IDI7Ly8kRigncmF5RGVwdGgnKTsKKwor
ICAgIHZhciByYXl0cmFjZXIgPSBuZXcgRmxvZy5SYXlUcmFjZXIuRW5naW5lKAorICAgICAgICB7
CisgICAgICAgICAgICBjYW52YXNXaWR0aDogaW1hZ2VXaWR0aCwKKyAgICAgICAgICAgIGNhbnZh
c0hlaWdodDogaW1hZ2VIZWlnaHQsCisgICAgICAgICAgICBwaXhlbFdpZHRoOiBwaXhlbFNpemVb
MF0sCisgICAgICAgICAgICBwaXhlbEhlaWdodDogcGl4ZWxTaXplWzFdLAorICAgICAgICAgICAg
InJlbmRlckRpZmZ1c2UiOiByZW5kZXJEaWZmdXNlLAorICAgICAgICAgICAgInJlbmRlckhpZ2hs
aWdodHMiOiByZW5kZXJIaWdobGlnaHRzLAorICAgICAgICAgICAgInJlbmRlclNoYWRvd3MiOiBy
ZW5kZXJTaGFkb3dzLAorICAgICAgICAgICAgInJlbmRlclJlZmxlY3Rpb25zIjogcmVuZGVyUmVm
bGVjdGlvbnMsCisgICAgICAgICAgICAicmF5RGVwdGgiOiByYXlEZXB0aAorICAgICAgICB9Cisg
ICAgKTsKKworICAgIHJheXRyYWNlci5yZW5kZXJTY2VuZShzY2VuZSwgbnVsbCwgMCk7Cit9CisK
K2ZvciAodmFyIGkgPSAwOyBpIDwgNjsgKytpKQorICByZW5kZXJTY2VuZSgpOwpJbmRleDogVG9v
bHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTgx
OTc5KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAK
KzIwMTUtMDMtMjUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBV
c2UgSklUQ29tcGlsYXRpb25DYW5GYWlsIGluIG1vcmUgcGxhY2VzLCBhbmQgbWFrZSB0aGUgZmFp
bCBwYXRoIG9mIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQgYSBjcmFzaCBpbnN0ZWFkIG9mIGF0
dGVtcHRpbmcgR0MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0Mjk5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAg
ICAKKyAgICAgICAgQnVuY2ggb2Ygc3VwcG9ydCBmb3IgdGVzdGluZyBleGVjdXRhYmxlIGFsbG9j
YXRpb24gZmFpbHVyZS4KKworICAgICAgICAqIFNjcmlwdHMvanNjLXN0cmVzcy10ZXN0LWhlbHBl
cnMvanMtZXhlY3V0YWJsZS1hbGxvY2F0aW9uLWZ1eno6IEFkZGVkLgorICAgICAgICAoZmFpbCk6
CisgICAgICAgICogU2NyaXB0cy9ydW4tamF2YXNjcmlwdGNvcmUtdGVzdHM6CisgICAgICAgIChy
dW5KU0NTdHJlc3NUZXN0cyk6CisgICAgICAgICogU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0
czoKKwogMjAxNS0wMy0yNSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAg
IEFkZHJlc3MgYWRkaXRpb25hbCByZXZpZXcgZmVlZGJhY2sgZnJvbSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzMDU5LgpJbmRleDogVG9vbHMvU2NyaXB0cy9ydW4t
amF2YXNjcmlwdGNvcmUtdGVzdHMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9ydW4tamF2
YXNjcmlwdGNvcmUtdGVzdHMJKHJldmlzaW9uIDE4MTk3OSkKKysrIFRvb2xzL1NjcmlwdHMvcnVu
LWphdmFzY3JpcHRjb3JlLXRlc3RzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNiBAQAogIyEv
dXNyL2Jpbi9wZXJsIC13CiAKLSMgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDEzLTIwMTQgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDEzLTIw
MTUgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMgQ29weXJpZ2h0IChDKSAyMDA3
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjY5LDYg
KzI2OSw3IEBAIHN1YiBydW5KU0NTdHJlc3NUZXN0cwogICAgICAgICAiL3Vzci9iaW4vZW52Iiwg
InJ1YnkiLCAiVG9vbHMvU2NyaXB0cy9ydW4tanNjLXN0cmVzcy10ZXN0cyIsCiAgICAgICAgICIt
aiIsIGpzY1BhdGgoJHByb2R1Y3REaXIpLCAiLW8iLCAkanNjU3RyZXNzUmVzdWx0c0RpciwKICAg
ICAgICAgIlBlcmZvcm1hbmNlVGVzdHMvU3VuU3BpZGVyL3Rlc3RzL3N1bnNwaWRlci0xLjAiLAor
ICAgICAgICAiU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2V4ZWN1dGFibGVBbGxvY2F0aW9u
RnV6ei55YW1sIiwKICAgICAgICAgIlNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9leGNlcHRp
b25GdXp6LnlhbWwiLAogICAgICAgICAiUGVyZm9ybWFuY2VUZXN0cy9TdW5TcGlkZXIvbm8tYXJj
aGl0ZWN0dXJlLXNwZWNpZmljLW9wdGltaXphdGlvbnMueWFtbCIsCiAgICAgICAgICJQZXJmb3Jt
YW5jZVRlc3RzL1N1blNwaWRlci90ZXN0cy92OC12NiIsCkluZGV4OiBUb29scy9TY3JpcHRzL3J1
bi1qc2Mtc3RyZXNzLXRlc3RzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1z
dHJlc3MtdGVzdHMJKHJldmlzaW9uIDE4MTk3OSkKKysrIFRvb2xzL1NjcmlwdHMvcnVuLWpzYy1z
dHJlc3MtdGVzdHMJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAjIS91c3IvYmluL2Vu
diBydWJ5CiAKLSMgQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03ODEsNiArNzgx
LDExIEBAIGRlZiBydW5FeGNlcHRpb25GdXp6CiAgICAgYWRkUnVuQ29tbWFuZCgiZXhjZXB0aW9u
LWZ1enoiLCBbInBlcmwiLCAocGF0aFRvSGVscGVycyArICJqcy1leGNlcHRpb24tZnV6eiIpLnRv
X3MsIHN1YkNvbW1hbmRdLCBzaWxlbnRPdXRwdXRIYW5kbGVyLCBzaW1wbGVFcnJvckhhbmRsZXIp
CiBlbmQKIAorZGVmIHJ1bkV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6eihuYW1lLCAqb3B0aW9ucykK
KyAgICBzdWJDb21tYW5kID0gZXNjYXBlQWxsKFtwYXRoVG9WTS50b19zLCAkYmVuY2htYXJrLnRv
X3NdICsgb3B0aW9ucykKKyAgICBhZGRSdW5Db21tYW5kKCJleGVjdXRhYmxlLWFsbG9jYXRpb24t
ZnV6ei0iICsgbmFtZSwgWyJwZXJsIiwgKHBhdGhUb0hlbHBlcnMgKyAianMtZXhlY3V0YWJsZS1h
bGxvY2F0aW9uLWZ1enoiKS50b19zLCBzdWJDb21tYW5kXSwgc2lsZW50T3V0cHV0SGFuZGxlciwg
c2ltcGxlRXJyb3JIYW5kbGVyKQorZW5kCisKIGRlZiBydW5UeXBlUHJvZmlsZXIKICAgICBpZiAk
ZW5hYmxlRlRMCiAgICAgICAgIHJ1bigiZnRsLW5vLWNqaXQtdHlwZS1wcm9maWxlciIsICItLWVu
YWJsZVR5cGVQcm9maWxlcj10cnVlIiwgKihGVExfT1BUSU9OUyArIE5PX0NKSVRfT1BUSU9OUykp
CkluZGV4OiBUb29scy9TY3JpcHRzL2pzYy1zdHJlc3MtdGVzdC1oZWxwZXJzL2pzLWV4ZWN1dGFi
bGUtYWxsb2NhdGlvbi1mdXp6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvanNjLXN0cmVz
cy10ZXN0LWhlbHBlcnMvanMtZXhlY3V0YWJsZS1hbGxvY2F0aW9uLWZ1enoJKHJldmlzaW9uIDAp
CisrKyBUb29scy9TY3JpcHRzL2pzYy1zdHJlc3MtdGVzdC1oZWxwZXJzL2pzLWV4ZWN1dGFibGUt
YWxsb2NhdGlvbi1mdXp6CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI2IEBACisjIS91c3Iv
YmluL3BlcmwKKworIyBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6Cisj
CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyMgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyMg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisjIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK3VzZSBz
dHJpY3Q7Cit1c2UgRmluZEJpbjsKK3VzZSBHZXRvcHQ6OkxvbmcgcXcoOmNvbmZpZyBwYXNzX3Ro
cm91Z2gpOwordXNlIFBPU0lYOworCisjIFdlIGZpcnN0IHdhbnQgdG8gcnVuIHRoZSB0ZXN0IG9u
Y2UgdG8gZGV0ZXJtaW5lIHdoYXQgdGhlIG51bWJlciBvZiBlbmNvdW50ZXJlZAorIyBjaGVja3Mg
aXMuIFRoZW4gd2Ugd2FudCB0byBydW4gaXQgYWdhaW4gc29tZSBudW1iZXIgb2YgdGltZXMgd2l0
aCByYW5kb20gY2hlY2sKKyMgYW1vdW50cy4gVGhlIHRlc3QgaXMgc3VjY2Vzc2Z1bCBpZiBpdCBk
b2Vzbid0IGNyYXNoLgorCitteSAkcmVwZWF0ID0gMjA7CitteSAkc2VlZCA9IHRpbWUoKTsKK215
ICR2ZXJib3NlID0gMDsKKworIyBXZSBhbGxvdyBmbGFncyB0byBiZSBwYXNzZWQgdmlhIGVudmly
b25tZW50IHZhcmlhYmxlcywgd2hpY2ggaXMgcmF0aGVyIHVzZWZ1bCBmb3IKKyMgcnVubmluZyB3
aXRoIHRoZSBydW4tanNjLXN0cmVzcy10ZXN0cyBoYXJuZXNzLgoraWYgKGRlZmluZWQoJEVOVntK
U19FQUZVWlpfUkVQRUFUfSkpIHsKKyAgICAkcmVwZWF0ID0gJEVOVntKU19FQUZVWlpfUkVQRUFU
fTsKK30KK2lmIChkZWZpbmVkKCRFTlZ7SlNfRUFGVVpaX1NFRUR9KSkgeworICAgICRzZWVkID0g
JEVOVntKU19FQUZVWlpfU0VFRH07Cit9CitpZiAoZGVmaW5lZCgkRU5We0pTX0VBRlVaWl9WRVJC
T1NFfSkpIHsKKyAgICAkdmVyYm9zZSA9ICRFTlZ7SlNfRUFGVVpaX1ZFUkJPU0V9OworfQorCitH
ZXRPcHRpb25zKAorICAgICdyZXBlYXQ9cycgPT4gXCRyZXBlYXQsCisgICAgJ3NlZWQ9cycgPT4g
XCRzZWVkLAorICAgICd2ZXJib3NlJyA9PiBcJHZlcmJvc2UKKyk7CisKK215ICRjb21tYW5kU3Ry
aW5nID0gc2hpZnQgQEFSR1Y7CisKK215ICRjaGVja0NvdW50OworCitzdWIgZmFpbCB7CisgICAg
bXkgJGNvbnRleHQgPSBzaGlmdDsKKyAgICBzZWxlY3QoKHNlbGVjdChTVERPVVQpLCAkIHw9IDEp
WzBdKTsgIyBUaGlzIGlzIGEgcGVybGlzbSBmb3IgZmx1c2guIFdlIG5lZWQgdG8gZG8gaXQgdGhp
cyB3YXkgdG8gc3VwcG9ydCBvbGRlciBwZXJscy4KKyAgICBzZWxlY3QoKHNlbGVjdChTVERFUlIp
LCAkIHw9IDEpWzBdKTsKKyAgICBkaWUgIkZhaWx1cmUgZm9yIGNvbW1hbmQgJGNvbW1hbmRTdHJp
bmcgd2l0aCBzZWVkICRzZWVkLCByZXBlYXQgJHJlcGVhdDogJGNvbnRleHQiOworfQorCitpZiAo
c2hpZnQgQEFSR1YpIHsKKyAgICBkaWUgIklnbm9yaW5nIGdhcmJhZ2UgYXJndW1lbnRzOyBvbmx5
IHRoZSBmaXJzdCBub24tb3B0aW9uIGFyZ3VtZW50IGlzIHVzZWQgYXMgdGhlIGNvbW1hbmQgc3Ry
aW5nLiI7Cit9CisKK29wZW4gKG15ICR0ZXN0SW5wdXQsICIkY29tbWFuZFN0cmluZyAtLWVuYWJs
ZUV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ej10cnVlIHwiKSBvciBmYWlsKCJDYW5ub3QgZXhlY3V0
ZSBpbml0aWFsIGNvbW1hbmQgd2hlbiBnZXR0aW5nIGNoZWNrIGNvdW50Iik7Cit3aGlsZSAobXkg
JGlucHV0TGluZSA9IDwkdGVzdElucHV0PikgeworICAgIGNob21wKCRpbnB1dExpbmUpOworICAg
IG15ICRoYW5kbGVkID0gMDsKKyAgICBpZiAoJGlucHV0TGluZSA9fiAvSlNDIEVYRUNVVEFCTEUg
QUxMT0NBVElPTiBGVVpaOiBlbmNvdW50ZXJlZCAoWzAtOV0rKSBjaGVja3NcLi8pIHsKKyAgICAg
ICAgJGNoZWNrQ291bnQgPSAkMTsKKyAgICAgICAgJGhhbmRsZWQgPSAxOworICAgIH0KKyAgICBp
ZiAoISRoYW5kbGVkIHx8ICR2ZXJib3NlKSB7CisgICAgICAgIHByaW50ICJjaGVja0NvdW50OiAk
aW5wdXRMaW5lXG4iOworICAgIH0KK30KK2Nsb3NlKCR0ZXN0SW5wdXQpOworCitpZiAoJHZlcmJv
c2UpIHsKKyAgICBwcmludCAiQ2hlY2sgY291bnQ6ICRjaGVja0NvdW50XG4iOworICAgIHByaW50
ICJTZWVkOiAkc2VlZFxuIjsKK30KKworaWYgKCEkY2hlY2tDb3VudCkgeworICAgIHByaW50ICJF
eGVjdXRhYmxlIGFsbG9jYXRpb24gZnV6eiB0ZXN0aW5nIG5vdCBzdXBwb3J0ZWQgYnkganNjIGJp
bmFyeS5cbiI7CisgICAgZXhpdCAwOworfQorCisjIEZpcnN0IGRvIHNvbWUgdGVzdHMgd2hlcmUg
d2UgaGF2ZSBvbmUtb2ZmIGZhaWx1cmVzLgorc3JhbmQoJHNlZWQpOworCitmb3IgKG15ICRpdGVy
YXRpb24gPSAwOyAkaXRlcmF0aW9uIDwgJHJlcGVhdDsgKyskaXRlcmF0aW9uKSB7CisgICAgbXkg
JHRhcmdldCA9IGludChyYW5kKCkgKiAkY2hlY2tDb3VudCkgKyAxOworICAgIGlmICgkdmVyYm9z
ZSkgeworICAgICAgICBwcmludCAiaXRlcmF0aW9uKCRpdGVyYXRpb24pIHRhcmdldCgkdGFyZ2V0
KSBvbmUtc2hvdDogUnVubmluZy5cbiI7CisgICAgfQorICAgIG15ICRyZXN1bHQgPSBzeXN0ZW0o
IiRjb21tYW5kU3RyaW5nIC0tZW5hYmxlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6PXRydWUgLS1m
aXJlRXhlY3V0YWJsZUFsbG9jYXRpb25GdXp6QXQ9JHRhcmdldCIpOworICAgIGlmICgkcmVzdWx0
ICE9IDApIHsKKyAgICAgICAgZmFpbCgiQ2Fubm90IGV4ZWN1dGUgY29tbWFuZCBvbiBpdGVyYXRp
b24gJGl0ZXJhdGlvbiwgc3RhdHVzICQ/IGZvciB0YXJnZXQgJHRhcmdldCIpOworICAgIH0KK30K
KworIyBUaGVuIGRvIHNvbWUgdGVzdHMgd2hlcmUgd2Ugc3RhcnQgZmFpbGluZyBhdCBhIHBhcnRp
Y3VsYXIgcG9pbnQsIGFuZCB0aGVuIHBlcm1hZmFpbC4KK3NyYW5kKCRzZWVkKTsKKworZm9yICht
eSAkaXRlcmF0aW9uID0gMDsgJGl0ZXJhdGlvbiA8ICRyZXBlYXQ7ICsrJGl0ZXJhdGlvbikgewor
ICAgIG15ICR0YXJnZXQgPSBpbnQocmFuZCgpICogJGNoZWNrQ291bnQpICsgMTsKKyAgICBpZiAo
JHZlcmJvc2UpIHsKKyAgICAgICAgcHJpbnQgIml0ZXJhdGlvbigkaXRlcmF0aW9uKSB0YXJnZXQo
JHRhcmdldCkgYXQtb3ItYWZ0ZXI6IFJ1bm5pbmcuXG4iOworICAgIH0KKyAgICBteSAkcmVzdWx0
ID0gc3lzdGVtKCIkY29tbWFuZFN0cmluZyAtLWVuYWJsZUV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6
ej10cnVlIC0tZmlyZUV4ZWN1dGFibGVBbGxvY2F0aW9uRnV6ekF0T3JBZnRlcj0kdGFyZ2V0Iik7
CisgICAgaWYgKCRyZXN1bHQgIT0gMCkgeworICAgICAgICBmYWlsKCJDYW5ub3QgZXhlY3V0ZSBj
b21tYW5kIG9uIGl0ZXJhdGlvbiAkaXRlcmF0aW9uLCBzdGF0dXMgJD8gZm9yIHRhcmdldCAkdGFy
Z2V0Iik7CisgICAgfQorfQorCitpZiAoJHZlcmJvc2UpIHsKKyAgICBwcmludCAiU3VjY2VzcyFc
biI7Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBUb29scy9TY3JpcHRzL2pzYy1zdHJlc3MtdGVz
dC1oZWxwZXJzL2pzLWV4ZWN1dGFibGUtYWxsb2NhdGlvbi1mdXp6Cl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6
IHN2bjpleGVjdXRhYmxlCiMjIC0wLDAgKzEgIyMKKyoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBw
cm9wZXJ0eQo=
</data>
<flag name="review"
          id="274246"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>