<?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>68320</bug_id>
          
          <creation_ts>2011-09-17 22:56:31 -0700</creation_ts>
          <short_desc>DFG JIT does not speculate aggressively enough on GetById</short_desc>
          <delta_ts>2011-09-20 07:08:47 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aroben</cc>
    
    <cc>fpizlo</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>469140</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-17 22:56:31 -0700</bug_when>
    <thetext>The DFG JIT uses the same optimization strategy as the old JIT for GetById: it assumes nothing a priori and lets the code get repatched.  But this results in a large amount of slow-path code, which takes up space and increases i-cache misses.  It also means that repeated GetById&apos;s on the same base do repeated structure checks, and repeated loads of the storage pointer.  But the DFG JIT has complete information available to it about how the old JIT patched its get_by_id&apos;s, and whether or not that patching was the right thing to do (if the slow path is ever taken then the get_by_id turns into a polymorphic list access).  It should take advantage of this to reduce the amount of slow path code that it emits, and eliminate redundant structure checks and redundant storage loads.

This will also allow the DFG to treat these optimized GetById&apos;s as being pure.  This will enable load elimination on GetById, and make it so that CSE no longer has to assume that GetById clobbers the world.

That being said, the current GetById strategy should still be used as a fall-back if the old JIT&apos;s profiling tells us that it would be unwise to speculate on the structure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469141</commentid>
    <comment_count>1</comment_count>
      <attachid>107783</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-17 22:59:25 -0700</bug_when>
    <thetext>Created attachment 107783
work in progress

This is still incomplete.  Putting this up here as back-up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469152</commentid>
    <comment_count>2</comment_count>
      <attachid>107786</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-18 00:34:25 -0700</bug_when>
    <thetext>Created attachment 107786
work in progress

Added DataFormatStorage, StorageOperand, and implemented CheckStructure and GetByOffset.  Still totally untested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469178</commentid>
    <comment_count>3</comment_count>
      <attachid>107791</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-18 12:54:54 -0700</bug_when>
    <thetext>Created attachment 107791
work in progress

Still testing this, but it&apos;s looking pretty good - 76% speed-up on property accesses.  Consider this simple program:

function foo(o, n) {
    var result = 0;
    while(n--&gt;0) {
        result += o.a + o.b + o.c;
    }
    return result;
}

var object = {a:1, b:2, c:3};
var before = preciseTime();
var result = foo(object, 10000000);
var after = preciseTime();
print(&quot;Result: &quot;+result+&quot;  Time: &quot;+((after-before)*1000));

Here&apos;s the before/after:

BEFORE: 
Result: 60000000  Time: 57.630062103271484

AFTER:
Result: 60000000  Time: 32.59611129760742

I still need to test this on real programs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469180</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-18 13:04:01 -0700</bug_when>
    <thetext>It&apos;s a 4% speed-up on V8.



Benchmark report for V8.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;GetByOffset&quot; at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. 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              GetByOffset                                   

crypto            83.8914+-1.1391         82.4519+-1.3381         might be 1.0175x faster
deltablue        243.3592+-1.9683    ^   228.2100+-2.6421       ^ definitely 1.0664x faster
earley-boyer      96.1566+-0.2312    ^    92.6819+-0.4199       ^ definitely 1.0375x faster
raytrace          69.7617+-0.6717    ^    63.8253+-0.8824       ^ definitely 1.0930x faster
regexp           106.6008+-0.6734        105.8089+-0.3464       
richards         217.7843+-0.6560    ^   203.0919+-1.3343       ^ definitely 1.0723x faster
splay             98.1221+-0.4274    ?    99.5908+-1.1138       ? might be 1.0150x slower

&lt;arithmetic&gt;     130.8109+-0.2346    ^   125.0944+-0.5873       ^ definitely 1.0457x faster
&lt;geometric&gt;      117.6414+-0.1960    ^   113.1895+-0.5083       ^ definitely 1.0393x faster
&lt;harmonic&gt;       107.7976+-0.2612    ^   103.8596+-0.5277       ^ definitely 1.0379x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469181</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-18 13:08:31 -0700</bug_when>
    <thetext>This looks like it&apos;s doing some badness for Kraken.  Will investigate.



Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;GetByOffset&quot; at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. 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              GetByOffset                                   
SunSpider:
   3d-cube                                7.5804+-0.1025    ?     7.6657+-0.1333       ? might be 1.0113x slower
   3d-morph                               7.4365+-0.1415          7.3918+-0.1206       
   3d-raytrace                            7.6661+-0.1294    ?     7.7235+-0.0875       ?
   access-binary-trees                    2.2694+-0.0512          2.2500+-0.0551       
   access-fannkuch                       11.5251+-0.2310         11.4352+-0.1252       
   access-nbody                           4.2127+-0.0956    ^     3.7493+-0.0932       ^ definitely 1.1236x faster
   access-nsieve                          2.5927+-0.0339          2.5845+-0.0651       
   bitops-3bit-bits-in-byte               1.6769+-0.0350    ?     1.6862+-0.0559       ?
   bitops-bits-in-byte                    2.7056+-0.0484          2.6958+-0.0434       
   bitops-bitwise-and                     3.6031+-0.1254    ?     3.6406+-0.1198       ? might be 1.0104x slower
   bitops-nsieve-bits                     5.2817+-0.1050    ?     5.3470+-0.0798       ? might be 1.0124x slower
   controlflow-recursive                  1.9900+-0.0507    ?     2.0723+-0.0604       ? might be 1.0414x slower
   crypto-aes                             7.0620+-0.2252          6.9372+-0.2120         might be 1.0180x faster
   crypto-md5                             2.7704+-0.0604          2.7578+-0.0877       
   crypto-sha1                            2.1668+-0.0376    ?     2.1892+-0.0495       ? might be 1.0104x slower
   date-format-tofte                      9.9513+-0.1459    ?    10.0977+-0.1961       ? might be 1.0147x slower
   date-format-xparb                      8.8571+-0.1317          8.7075+-0.1660         might be 1.0172x faster
   math-cordic                            6.1409+-0.1022    ?     6.2348+-0.2257       ? might be 1.0153x slower
   math-partial-sums                      7.4173+-0.1544          7.3043+-0.1211         might be 1.0155x faster
   math-spectral-norm                     2.5619+-0.0318    ?     2.5942+-0.0542       ? might be 1.0126x slower
   regexp-dna                            10.8761+-0.2557         10.7495+-0.1449         might be 1.0118x faster
   string-base64                          5.7409+-0.1239          5.6667+-0.1387         might be 1.0131x faster
   string-fasta                           7.0083+-0.1162    ?     7.0727+-0.1328       ?
   string-tagcloud                       11.8651+-0.1467         11.7426+-0.2059         might be 1.0104x faster
   string-unpack-code                    18.8426+-0.3420         18.6557+-0.2536         might be 1.0100x faster
   string-validate-input                  6.6370+-0.2098          6.4269+-0.1164         might be 1.0327x faster

   &lt;arithmetic&gt;                           6.4015+-0.0389          6.3607+-0.0311       
   &lt;geometric&gt;                            5.2729+-0.0289          5.2464+-0.0233       
   &lt;harmonic&gt;                             4.2973+-0.0306          4.2888+-0.0286       

                                            TipOfTree              GetByOffset                                   
V8:
   crypto                                83.5475+-0.8616    ?    85.2520+-1.0487       ? might be 1.0204x slower
   deltablue                            242.3931+-2.8106    ^   226.9906+-1.2293       ^ definitely 1.0679x faster
   earley-boyer                          96.2478+-0.4171    ^    93.4152+-0.6641       ^ definitely 1.0303x faster
   raytrace                              69.6915+-0.4099    ^    64.1450+-0.3871       ^ definitely 1.0865x faster
   regexp                               107.7330+-1.6024        106.3051+-0.5100         might be 1.0134x faster
   richards                             217.4246+-1.6886    ^   201.0345+-1.6029       ^ definitely 1.0815x faster
   splay                                100.1975+-2.4578         98.5484+-0.4887         might be 1.0167x faster

   &lt;arithmetic&gt;                         131.0336+-0.9944    ^   125.0987+-0.2380       ^ definitely 1.0474x faster
   &lt;geometric&gt;                          117.9991+-0.8652    ^   113.5980+-0.2332       ^ definitely 1.0387x faster
   &lt;harmonic&gt;                           108.1704+-0.7331    ^   104.5304+-0.2575       ^ definitely 1.0348x faster

                                            TipOfTree              GetByOffset                                   
Kraken:
   ai-astar                             639.2052+-9.5529    ^   617.7010+-5.2686       ^ definitely 1.0348x faster
   audio-beat-detection                 469.1687+-4.6644    ?   475.5938+-5.4870       ? might be 1.0137x slower
   audio-dft                            427.3820+-6.7772        419.8933+-4.6365         might be 1.0178x faster
   audio-fft                            364.7972+-1.1347    !   371.4988+-2.9430       ! definitely 1.0184x slower
   audio-oscillator                     313.8251+-0.8023    !   388.3917+-2.8457       ! definitely 1.2376x slower
   imaging-darkroom                     411.9896+-0.7587    ?   420.0720+-8.4754       ? might be 1.0196x slower
   imaging-desaturate                   218.3297+-0.3545        217.8529+-0.5346       
   imaging-gaussian-blur                587.5906+-2.2849    ?   590.5179+-1.0733       ?
   json-parse-financial                  49.8097+-0.4280    ^    48.8371+-0.2607       ^ definitely 1.0199x faster
   json-stringify-tinderbox              68.3106+-0.4785    ?    68.9709+-0.6994       ?
   stanford-crypto-aes                  144.6621+-1.6741        143.5692+-1.5384       
   stanford-crypto-ccm                  111.8888+-0.6187    ?   112.4789+-1.2441       ?
   stanford-crypto-pbkdf2               388.5531+-2.2593    !   396.6219+-2.2329       ! definitely 1.0208x slower
   stanford-crypto-sha256-iterative     147.8469+-0.6880    ?   149.7923+-2.0456       ? might be 1.0132x slower

   &lt;arithmetic&gt;                         310.2399+-0.5340    !   315.8423+-1.0812       ! definitely 1.0181x slower
   &lt;geometric&gt;                          242.6350+-0.3027    !   246.7610+-0.7284       ! definitely 1.0170x slower
   &lt;harmonic&gt;                           173.7287+-0.4609    !   174.8320+-0.4895       ! definitely 1.0064x slower

                                            TipOfTree              GetByOffset                                   
All benchmarks:
   &lt;arithmetic&gt;                         115.4688+-0.1885    !   116.2311+-0.3077       ! definitely 1.0066x slower
   &lt;geometric&gt;                           26.2069+-0.0884         26.1173+-0.0668       
   &lt;harmonic&gt;                             7.5860+-0.0528          7.5692+-0.0494</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469189</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-18 14:18:55 -0700</bug_when>
    <thetext>It looks like the reason for the slow-down in Kraken is just because of a lack of recompilation.  On the first ~5000 executions of this function, the get_by_id self cache is successful.  It then falls apart, and the get_by_id&apos;s go polymorphic.  But by then the DFG has already done its compilation.

Recommendation: since the speed-up on V8 is bigger than the slow-down on Kraken, I suggest landing this, but adding this to the list of reasons why we need recompilation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469190</commentid>
    <comment_count>7</comment_count>
      <attachid>107796</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-18 14:28:49 -0700</bug_when>
    <thetext>Created attachment 107796
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469191</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-18 14:31:22 -0700</bug_when>
    <thetext>Attachment 107796 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1

Source/JavaScriptCore/dfg/DFGJITCodeGenerator.h:66:  One space before end of line comments  [whitespace/comments] [5]
Source/JavaScriptCore/dfg/DFGNode.h:234:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/dfg/DFGNode.h:236:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/dfg/DFGNode.h:237:  Missing space inside { }.  [whitespace/braces] [5]
Source/JavaScriptCore/bytecode/PredictedType.h:155:  The parameter name &quot;classInfo&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 5 in 12 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>469194</commentid>
    <comment_count>9</comment_count>
      <attachid>107797</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-18 14:37:18 -0700</bug_when>
    <thetext>Created attachment 107797
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469690</commentid>
    <comment_count>10</comment_count>
      <attachid>107797</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-09-19 14:33:55 -0700</bug_when>
    <thetext>Comment on attachment 107797
the patch

safeCast isn&apos;t actually safe -- you should use Checked&lt;T&gt; if you want overflow safe arithmetic, or at least make safeCast use isInBounds from CheckedArithmetic.h so that your overflow detection is correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469740</commentid>
    <comment_count>11</comment_count>
      <attachid>107797</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-09-19 15:28:20 -0700</bug_when>
    <thetext>Comment on attachment 107797
the patch

r+ with my suggested change to safeCast</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469967</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-20 02:30:16 -0700</bug_when>
    <thetext>Looks like this isn&apos;t ready yet.  It breaks bing.com maps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469968</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-20 02:38:20 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Looks like this isn&apos;t ready yet.  It breaks bing.com maps.

Never mind.  It&apos;s not a regression, and the fix is here: https://bugs.webkit.org/show_bug.cgi?id=68430</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469970</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-20 02:41:31 -0700</bug_when>
    <thetext>Landed in r95523.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470045</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-09-20 07:08:47 -0700</bug_when>
    <thetext>This broke the Windows build &lt;http://build.webkit.org/builders/Windows%20Release%20%28Build%29/builds/21118/steps/compile-webkit/logs/stdio&gt;. I&apos;m not sure why it passed the EWS bot; maybe some changes were made before landing?

In any case, I landed http://trac.webkit.org/changeset/95540 to try to fix it.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107783</attachid>
            <date>2011-09-17 22:59:25 -0700</date>
            <delta_ts>2011-09-18 12:54:54 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>getbyoffset_patch_1.diff</filename>
            <type>text/plain</type>
            <size>15773</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTUzODkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAK
KzIwMTEtMDktMTcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIGRvZXMgbm90IHNwZWN1bGF0ZSBhZ2dyZXNzaXZlbHkgZW5vdWdoIG9uIEdldEJ5SWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MzIwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBX
T1JLIElOIFBST0dSRVNTLiAgU3RpbGwgbmVlZCB0byBpbXBsZW1lbnQgRGF0YUZvcm1hdFN0b3Jh
Z2UsIGFuZCB3cml0ZSB0aGUKKyAgICAgICAgY29kZSBnZW5lcmF0aW9uIGZvciBDaGVja1N0cnVj
dHVyZSBhbmQgR2V0QnlPZmZzZXQuCisKKyAgICAgICAgKiBieXRlY29kZS9QcmVkaWN0ZWRUeXBl
LmNwcDoKKyAgICAgICAgKEpTQzo6cHJlZGljdGlvbkZyb21DbGFzc0luZm8pOgorICAgICAgICAo
SlNDOjpwcmVkaWN0aW9uRnJvbVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OnByZWRpY3Rpb25G
cm9tQ2VsbCk6CisgICAgICAgICogYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5oOgorICAgICAgICAq
IGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAq
IGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgor
ICAgICAgICAoSlNDOjpERkc6Ok9wSW5mbzo6T3BJbmZvKToKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlOjpOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdHJ1Y3R1cmUpOgorICAg
ICAgICAoSlNDOjpERkc6Ok5vZGU6OnN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6aGFzU3RvcmFnZUFjY2Vzc0RhdGEpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN0b3Jh
Z2VPZmZzZXREYXRhSW5kZXgpOgorICAgICAgICAqIGRmZy9ERkdQcm9wYWdhdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwcm9wYWdhdGVOb2RlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpQcm9wYWdhdG9yOjpnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAo
SlNDOjpERkc6OlByb3BhZ2F0b3I6OmdldE1ldGhvZExvYWRFbGltaW5hdGlvbik6CisgICAgICAg
IChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Y2hlY2tTdHJ1Y3R1cmVMb2FkRWxpbWluYXRpb24pOgor
ICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9u
KToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwZXJmb3JtTm9kZUNTRSk6CisgICAg
ICAgICogd3RmL1N0ZExpYkV4dHJhcy5oOgorICAgICAgICAoV1RGOjpzYWZlQ2FzdCk6CisKIDIw
MTEtMDktMTcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcg
SklUIGRvZXMgbm90IGhhdmUgZnVsbCBibG9jay1sb2NhbCBDU0UKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5jcHAJKHJldmlzaW9uIDk1
Mzg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MiwxMCArODIsOCBAQCBjb25zdCBjaGFyKiBwcmVkaWN0aW9u
VG9TdHJpbmcoUHJlZGljdGVkCiB9CiAjZW5kaWYKIAotUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9u
RnJvbUNlbGwoSlNDZWxsKiBjZWxsKQorUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uRnJvbUNsYXNz
SW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykKIHsKLSAgICBjb25zdCBDbGFzc0luZm8q
IGNsYXNzSW5mbyA9IGNlbGwtPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKTsKLSAgICAKICAgICBp
ZiAoY2xhc3NJbmZvID09ICZKU0ZpbmFsT2JqZWN0OjpzX2luZm8pCiAgICAgICAgIHJldHVybiBQ
cmVkaWN0RmluYWxPYmplY3Q7CiAgICAgCkBAIC0xMDEsNiArOTksMTYgQEAgUHJlZGljdGVkVHlw
ZSBwcmVkaWN0aW9uRnJvbUNlbGwoSlNDZWxsKgogICAgIHJldHVybiBQcmVkaWN0Q2VsbE90aGVy
OwogfQogCitQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb25Gcm9tU3RydWN0dXJlKFN0cnVjdHVyZSog
c3RydWN0dXJlKQoreworICAgIHJldHVybiBwcmVkaWN0aW9uRnJvbUNsYXNzSW5mbyhzdHJ1Y3R1
cmUtPmNsYXNzSW5mbygpKTsKK30KKworUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uRnJvbUNlbGwo
SlNDZWxsKiBjZWxsKQoreworICAgIHJldHVybiBwcmVkaWN0aW9uRnJvbVN0cnVjdHVyZShjZWxs
LT5zdHJ1Y3R1cmUoKSk7Cit9CisKIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbkZyb21WYWx1ZShK
U1ZhbHVlIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmgJKHJldmlzaW9uIDk1
Mzg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTUwLDYgKzE1MCw4IEBAIGlubGluZSBQcmVkaWN0ZWRUeXBlIG1h
a2VQcmVkaWN0aW9uKFByZWQKICAgICByZXR1cm4gdHlwZSB8IChzb3VyY2UgPT0gU3Ryb25nUHJl
ZGljdGlvbiA/IFN0cm9uZ1ByZWRpY3Rpb25UYWcgOiAwKTsKIH0KIAorUHJlZGljdGVkVHlwZSBw
cmVkaWN0aW9uRnJvbUNsYXNzSW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyk7CitQcmVk
aWN0ZWRUeXBlIHByZWRpY3Rpb25Gcm9tU3RydWN0dXJlKFN0cnVjdHVyZSopOwogUHJlZGljdGVk
VHlwZSBwcmVkaWN0aW9uRnJvbUNlbGwoSlNDZWxsKik7CiBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rp
b25Gcm9tVmFsdWUoSlNWYWx1ZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiA5NTM4OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDAzLDkgKzEwMDMsMjYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogCiAgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOiB7CiAgICAgICAgICAgICBOb2RlSW5k
ZXggYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIGlkZW50aWZpZXIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
OworICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbyA9IG1fcHJvZmlsZWRCbG9jay0+Z2V0U3R1YkluZm8obV9jdXJyZW50
SW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBOb2RlSW5kZXggZ2V0QnlJZDsKKyAg
ICAgICAgICAgIGlmIChzdHViSW5mby5zZWVuICYmIHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNj
ZXNzX2dldF9ieV9pZF9zZWxmKSB7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7Cisg
ICAgICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gbV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoaWRlbnRpZmllck51bWJlcik7CisgICAgICAgICAgICAgICAgc2l6ZV90IG9mZnNldCA9
IHN0cnVjdHVyZS0+Z2V0KCptX2dsb2JhbERhdGEsIGlkZW50aWZpZXIpOworICAgICAgICAgICAg
ICAgIEFTU0VSVChvZmZzZXQgIT0gbm90Rm91bmQpOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGdldEJ5SWQgPSBhZGRUb0dyYXBoKEdldEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFw
aC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSksIE9wSW5mbyhQcmVkaWN0Tm9uZSksIGFkZFRv
R3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhzdHJ1Y3R1cmUpLCBiYXNlKSk7CisKKyAgICAg
ICAgICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBzdG9yYWdlQWNjZXNzRGF0YTsKKyAgICAgICAg
ICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgICAgICAg
ICAgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllciA9IGlkZW50aWZpZXI7CisgICAgICAgICAg
ICAgICAgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLmFwcGVuZChzdG9yYWdlQWNjZXNzRGF0
YSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBnZXRCeUlkID0gYWRkVG9H
cmFwaChHZXRCeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIE9wSW5mbyhQcmVkaWN0Tm9u
ZSksIGJhc2UpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlSW5kZXggZ2V0QnlJZCA9
IGFkZFRvR3JhcGgoR2V0QnlJZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8oUHJlZGljdE5v
bmUpLCBiYXNlKTsKICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kLCBnZXRCeUlkKTsKICAgICAgICAgICAgIHN0cm9uZ2x5UHJlZGljdChnZXRCeUlkKTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gOTUzODkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAg
LTg0LDYgKzg0LDE5IEBAIHN0cnVjdCBNZXRob2RDaGVja0RhdGEgewogICAgIH0KIH07CiAKK3N0
cnVjdCBTdG9yYWdlQWNjZXNzRGF0YSB7CisgICAgc2l6ZV90IG9mZnNldDsKKyAgICB1bnNpZ25l
ZCBpZGVudGlmaWVyTnVtYmVyOworICAgIAorICAgIC8vIE5PVEU6IHRoZSBvZmZzZXQgYW5kIGlk
ZW50aWZpZXJOdW1iZXIgZG8gbm90IGJ5IHRoZW1zZWx2ZXMKKyAgICAvLyB1bmlxdWVseSBpZGVu
dGlmeSBhIHByb3BlcnR5LiBUaGUgaWRlbnRpZmllck51bWJlciBhbmQgYQorICAgIC8vIFN0cnVj
dHVyZSogZG8uIElmIHRob3NlIHR3byBtYXRjaCwgdGhlbiB0aGUgb2Zmc2V0IHNob3VsZAorICAg
IC8vIGJlIHRoZSBzYW1lLCBhcyB3ZWxsLiBGb3IgYW55IE5vZGUgdGhhdCBoYXMgYSBTdG9yYWdl
QWNjZXNzRGF0YSwKKyAgICAvLyBpdCBpcyBwb3NzaWJsZSB0byByZXRyaWV2ZSB0aGUgU3RydWN0
dXJlKiBieSBsb29raW5nIGF0IHRoZQorICAgIC8vIGZpcnN0IGNoaWxkLiBJdCBzaG91bGQgYmUg
YSBDaGVja1N0cnVjdHVyZSwgd2hpY2ggaGFzIHRoZQorICAgIC8vIFN0cnVjdHVyZSouCit9Owor
CiB0eXBlZGVmIFZlY3RvciA8QmxvY2tJbmRleCwgMj4gUHJlZGVjZXNzb3JMaXN0OwogCiBzdHJ1
Y3QgQmFzaWNCbG9jayB7CkBAIC0yOTksNiArMzEyLDcgQEAgcHVibGljOgogICAgIFZlY3Rvcjwg
T3duUHRyPEJhc2ljQmxvY2s+ICwgOD4gbV9ibG9ja3M7CiAgICAgVmVjdG9yPE5vZGVJbmRleCwg
MTY+IG1fdmFyQXJnQ2hpbGRyZW47CiAgICAgVmVjdG9yPE1ldGhvZENoZWNrRGF0YT4gbV9tZXRo
b2RDaGVja0RhdGE7CisgICAgVmVjdG9yPFN0b3JhZ2VBY2Nlc3NEYXRhPiBtX3N0b3JhZ2VBY2Nl
c3NEYXRhOwogICAgIHVuc2lnbmVkIG1fcHJlc2VydmVkVmFyczsKICAgICB1bnNpZ25lZCBtX3Bh
cmFtZXRlclNsb3RzOwogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gOTUzODgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDc4LDE0ICsxMDc4LDYgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVj
dWxhdGl2ZUlucwogICAgIGpzVmFsdWVSZXN1bHQoc2NyYXRjaFJlZywgbV9jb21waWxlSW5kZXgs
IFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFRv
LCB0eXBlbmFtZSBGcm9tPgotaW5saW5lIFRvIHNhZmVDYXN0KEZyb20gdmFsdWUpCi17Ci0gICAg
VG8gcmVzdWx0ID0gc3RhdGljX2Nhc3Q8VG8+KHZhbHVlKTsKLSAgICBBU1NFUlQocmVzdWx0ID09
IHZhbHVlKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBKSVRDb21waWxlcjo6Q2FsbCBKSVRD
b2RlR2VuZXJhdG9yOjpjYWNoZWRHZXRCeUlkKEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgcmVzdWx0
R1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgSklUQ29t
cGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQsIE5vZGVUeXBlIG5vZGVUeXBlKQogewogICAgIEpJ
VENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDk1Mzg5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOSwxMCArMTE5LDEx
IEBAIHByaXZhdGU6CiAjZGVmaW5lIE5vZGVNaWdodENsb2JiZXIgIDB4ODAwMDAwCiAKIC8vIFRo
ZXNlIHZhbHVlcyByZWNvcmQgdGhlIHJlc3VsdCB0eXBlIG9mIHRoZSBub2RlIChhcyBjaGVja2Vk
IGJ5IE5vZGVSZXN1bHRNYXNrLCBhYm92ZSksIDAgZm9yIG5vIHJlc3VsdC4KLSNkZWZpbmUgTm9k
ZVJlc3VsdEpTICAgICAgMHgxMDAwCi0jZGVmaW5lIE5vZGVSZXN1bHROdW1iZXIgIDB4MjAwMAot
I2RlZmluZSBOb2RlUmVzdWx0SW50MzIgICAweDMwMDAKLSNkZWZpbmUgTm9kZVJlc3VsdEJvb2xl
YW4gMHg0MDAwCisjZGVmaW5lIE5vZGVSZXN1bHRKUyAgICAgICAgMHgxMDAwCisjZGVmaW5lIE5v
ZGVSZXN1bHROdW1iZXIgICAgMHgyMDAwCisjZGVmaW5lIE5vZGVSZXN1bHRJbnQzMiAgICAgMHgz
MDAwCisjZGVmaW5lIE5vZGVSZXN1bHRCb29sZWFuICAgMHg0MDAwCisjZGVmaW5lIE5vZGVSZXN1
bHRTdG9yYWdlICAgMHg1MDAwCiAKIC8vIFRoaXMgbWFjcm8gZGVmaW5lcyBhIHNldCBvZiBpbmZv
cm1hdGlvbiBhYm91dCBhbGwga25vd24gbm9kZSB0eXBlcywgdXNlZCB0byBwb3B1bGF0ZSBOb2Rl
SWQsIE5vZGVUeXBlIGJlbG93LgogI2RlZmluZSBGT1JfRUFDSF9ERkdfT1AobWFjcm8pIFwKQEAg
LTE3NCw2ICsxNzUsOCBAQCBwcml2YXRlOgogICAgIG1hY3JvKEdldEJ5SWQsIE5vZGVSZXN1bHRK
UyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIG1hY3JvKFB1
dEJ5SWQsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIG1hY3Jv
KFB1dEJ5SWREaXJlY3QsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAor
ICAgIG1hY3JvKENoZWNrU3RydWN0dXJlLCBOb2RlUmVzdWx0U3RvcmFnZSB8IE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKKyAgICBtYWNybyhHZXRCeU9mZnNldCwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFj
cm8oR2V0TWV0aG9kLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFj
cm8oQ2hlY2tNZXRob2QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBt
YWNybyhHZXRHbG9iYWxWYXIsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKQEAg
LTIyOCw4ICsyMzEsOSBAQCBlbnVtIE5vZGVUeXBlIHsKIC8vIGRpc3Rpbmd1aXNoZXMgYW4gaW1t
ZWRpYXRlIHZhbHVlICh0eXBpY2FsbHkgYW4gaW5kZXggaW50byBhIENvZGVCbG9jayBkYXRhIHN0
cnVjdHVyZSAtIAogLy8gYSBjb25zdGFudCBpbmRleCwgYXJndW1lbnQsIG9yIGlkZW50aWZpZXIp
IGZyb20gYSBOb2RlSW5kZXguCiBzdHJ1Y3QgT3BJbmZvIHsKLSAgICBleHBsaWNpdCBPcEluZm8o
dW5zaWduZWQgdmFsdWUpIDogbV92YWx1ZSh2YWx1ZSkge30KLSAgICB1bnNpZ25lZCBtX3ZhbHVl
OworICAgIGV4cGxpY2l0IE9wSW5mbyh1aW50cHRyX3QgdmFsdWUpIDogbV92YWx1ZSh2YWx1ZSkg
e30KKyAgICBleHBsaWNpdCBPcEluZm8odm9pZCogdmFsdWUpIDogbV92YWx1ZShyZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4odmFsdWUpKSB7fQorICAgIHVpbnRwdHJfdCBtX3ZhbHVlOwogfTsK
IAogLy8gPT09IE5vZGUgPT09CkBAIC0yNzIsNyArMjc2LDcgQEAgc3RydWN0IE5vZGUgewogICAg
ICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAg
ICwgbV9yZWZDb3VudCgwKQogICAgICAgICAsIG1fb3BJbmZvKGltbTEubV92YWx1ZSkKLSAgICAg
ICAgLCBtX29wSW5mbzIoaW1tMi5tX3ZhbHVlKQorICAgICAgICAsIG1fb3BJbmZvMihzYWZlQ2Fz
dDx1bnNpZ25lZD4oaW1tMi5tX3ZhbHVlKSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghKG9wICYg
Tm9kZUhhc1ZhckFyZ3MpKTsKICAgICAgICAgY2hpbGRyZW4uZml4ZWQuY2hpbGQxID0gY2hpbGQx
OwpAQCAtMjg3LDcgKzI5MSw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgLCBtX3ZpcnR1YWxS
ZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQogICAgICAgICAsIG1fcmVmQ291bnQoMCkK
ICAgICAgICAgLCBtX29wSW5mbyhpbW0xLm1fdmFsdWUpCi0gICAgICAgICwgbV9vcEluZm8yKGlt
bTIubV92YWx1ZSkKKyAgICAgICAgLCBtX29wSW5mbzIoc2FmZUNhc3Q8dW5zaWduZWQ+KGltbTIu
bV92YWx1ZSkpCiAgICAgewogICAgICAgICBBU1NFUlQob3AgJiBOb2RlSGFzVmFyQXJncyk7CiAg
ICAgICAgIGNoaWxkcmVuLnZhcmlhYmxlLmZpcnN0Q2hpbGQgPSBmaXJzdENoaWxkOwpAQCAtNDg4
LDYgKzQ5MiwyNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBtX29wSW5mbzI7CiAg
ICAgfQogICAgIAorICAgIGJvb2wgaGFzU3RydWN0dXJlKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBvcCA9PSBDaGVja1N0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U3RydWN0dXJl
Kj4obV9vcEluZm8pOworICAgIH0KKyAgICAKKyAgICBib29sIGhhc1N0b3JhZ2VBY2Nlc3NEYXRh
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBvcCA9PSBHZXRCeU9mZnNldDsKKyAgICB9CisgICAg
CisgICAgdW5zaWduZWQgc3RvcmFnZU9mZnNldERhdGFJbmRleCgpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9vcEluZm87CisgICAgfQorICAgIAogICAgIGJvb2wgaGFzVmlydHVhbFJlZ2lzdGVy
KCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX3ZpcnR1YWxSZWdpc3RlciAhPSBJbnZhbGlkVmly
dHVhbFJlZ2lzdGVyOwpAQCAtNTk5LDggKzYyMywxMCBAQCBwcml2YXRlOgogICAgIFZpcnR1YWxS
ZWdpc3RlciBtX3ZpcnR1YWxSZWdpc3RlcjsKICAgICAvLyBUaGUgbnVtYmVyIG9mIHVzZXMgb2Yg
dGhlIHJlc3VsdCBvZiB0aGlzIG9wZXJhdGlvbiAoKzEgZm9yICdtdXN0IGdlbmVyYXRlJyBub2Rl
cywgd2hpY2ggaGF2ZSBzaWRlLWVmZmVjdHMpLgogICAgIHVuc2lnbmVkIG1fcmVmQ291bnQ7Ci0g
ICAgLy8gSW1tZWRpYXRlIHZhbHVlcywgYWNjZXNzZXMgdHlwZS1jaGVja2VkIHZpYSBhY2Nlc3Nv
cnMgYWJvdmUuCi0gICAgdW5zaWduZWQgbV9vcEluZm8sIG1fb3BJbmZvMjsKKyAgICAvLyBJbW1l
ZGlhdGUgdmFsdWVzLCBhY2Nlc3NlcyB0eXBlLWNoZWNrZWQgdmlhIGFjY2Vzc29ycyBhYm92ZS4g
VGhlIGZpcnN0IG9uZSBpcworICAgIC8vIGJpZyBlbm91Z2ggdG8gc3RvcmUgYSBwb2ludGVyLgor
ICAgIHVpbnRwdHJfdCBtX29wSW5mbzsKKyAgICB1bnNpZ25lZCBtX29wSW5mbzI7CiB9OwogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1Byb3BhZ2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJvcGFnYXRvci5jcHAJKHJldmlzaW9uIDk1Mzg5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcyLDYgKzI3
MiwyNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAorICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOiB7CisgICAgICAgICAgICAvLyBXZSBi
YWNrd2FyZCBwcm9wYWdhdGUgd2hhdCB0aGlzIENoZWNrU3RydWN0dXJlIHRlbGxzIHVzLiBNYXli
ZSB0aGF0J3MgdGhlIHJpZ2h0IHdheQorICAgICAgICAgICAgLy8gdG8gZ287IG1heWJlIGl0IGlz
bid0LiBJJ20gbm90IHN1cmUuIFdoYXQgd2UnZCByZWFsbHkgd2FudCBpcyBmbG93LXNlbnNpdGl2
ZQorICAgICAgICAgICAgLy8gZm9yd2FyZCBwcm9wYWdhdGlvbiBvZiB3aGF0IHdlIGxlYXJuIGZy
b20gaGF2aW5nIGV4ZWN1dGVkIENoZWNrU3RydWN0dXJlLiBCdXQgZm9yCisgICAgICAgICAgICAv
LyBub3cgd2UgcHJlc2VydmUgdGhlIGZsb3ctaW5zZW5zaXRpdmUgbmF0dXJlIG9mIHRoaXMgYW5h
bHlzaXMsIGJlY2F1c2UgaXQncyBjaGVhcCB0bworICAgICAgICAgICAgLy8gcnVuIGFuZCBzZWVt
cyB0byB3b3JrIHdlbGwgZW5vdWdoLgorICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVVzZShu
b2RlLmNoaWxkMSgpLCBwcmVkaWN0aW9uRnJvbVN0cnVjdHVyZShub2RlLnN0cnVjdHVyZSgpKSB8
IFN0cm9uZ1ByZWRpY3Rpb25UYWcpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0
aW9uKFByZWRpY3RPdGhlciB8IFN0cm9uZ1ByZWRpY3Rpb25UYWcpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OiB7
CisgICAgICAgICAgICBjaGFuZ2VkIHw9IG5vZGUucHJlZGljdChtX3VzZXNbbV9jb21waWxlSW5k
ZXhdICYgflByZWRpY3Rpb25UYWdNYXNrLCBTdHJvbmdQcmVkaWN0aW9uKTsKKyAgICAgICAgICAg
IGlmIChpc1N0cm9uZ1ByZWRpY3Rpb24obm9kZS5nZXRQcmVkaWN0aW9uKCkpKQorICAgICAgICAg
ICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihub2RlLmdldFByZWRpY3Rpb24oKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
Q2hlY2tNZXRob2Q6IHsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VVc2Uobm9kZS5jaGls
ZDEoKSwgUHJlZGljdE9iamVjdFVua25vd24gfCBTdHJvbmdQcmVkaWN0aW9uVGFnKTsKICAgICAg
ICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihtX2dyYXBoLmdldE1ldGhvZENoZWNrUHJl
ZGljdGlvbihub2RlKSk7CkBAIC01OTUsNyArNjEzLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBO
b2RlSW5kZXggZ2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9uKHVuc2lnbmVkIHZhck51bWJlcikKICAg
ICB7Ci0gICAgICAgIE5vZGVJbmRleCBzdGFydCA9IHN0YXJ0SW5kZXgoKTsKKyAgICAgICAgTm9k
ZUluZGV4IHN0YXJ0ID0gc3RhcnRJbmRleEZvckNoaWxkcmVuKCk7CiAgICAgICAgIGZvciAoTm9k
ZUluZGV4IGluZGV4ID0gbV9jb21waWxlSW5kZXg7IGluZGV4LS0gPiBzdGFydDspIHsKICAgICAg
ICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKICAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS5vcCkgewpAQCAtNjQxLDcgKzY1OSw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgTm9kZUlu
ZGV4IGdldE1ldGhvZExvYWRFbGltaW5hdGlvbihjb25zdCBNZXRob2RDaGVja0RhdGEmIG1ldGhv
ZENoZWNrRGF0YSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgTm9kZUluZGV4IGNoaWxkMSkK
ICAgICB7Ci0gICAgICAgIE5vZGVJbmRleCBzdGFydCA9IHN0YXJ0SW5kZXgoKTsKKyAgICAgICAg
Tm9kZUluZGV4IHN0YXJ0ID0gc3RhcnRJbmRleEZvckNoaWxkcmVuKGNoaWxkMSk7CiAgICAgICAg
IGZvciAoTm9kZUluZGV4IGluZGV4ID0gbV9jb21waWxlSW5kZXg7IGluZGV4LS0gPiBzdGFydDsp
IHsKICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKICAgICAgICAgICAg
IGlmIChub2RlLm9wID09IENoZWNrTWV0aG9kCkBAIC02NTUsNiArNjczLDM2IEBAIHByaXZhdGU6
CiAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgfQogICAgIAorICAgIE5vZGVJbmRleCBjaGVj
a1N0cnVjdHVyZUxvYWRFbGltaW5hdGlvbihTdHJ1Y3R1cmUqLCBOb2RlSW5kZXggY2hpbGQxKQor
ICAgIHsKKyAgICAgICAgTm9kZUluZGV4IHN0YXJ0ID0gc3RhcnRJbmRleEZvckNoaWxkcmVuKGNo
aWxkMSk7CisgICAgICAgIGZvciAoTm9kZUluZGV4IGluZGV4ID0gbV9jb21waWxlSW5kZXg7IGlu
ZGV4LS0gPiBzdGFydDspIHsKKyAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4
XTsKKyAgICAgICAgICAgIGlmIChub2RlLm9wID09IENoZWNrU3RydWN0dXJlCisgICAgICAgICAg
ICAgICAgJiYgbm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEKKyAgICAgICAgICAgICAgICAmJiBub2Rl
LnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7
CisgICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICB9CisgICAgCisg
ICAgTm9kZUluZGV4IGdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIsIE5vZGVJbmRleCBjaGlsZDEpCisgICAgeworICAgICAgICBOb2RlSW5kZXggc3Rh
cnQgPSBzdGFydEluZGV4Rm9yQ2hpbGRyZW4oY2hpbGQxKTsKKyAgICAgICAgZm9yIChOb2RlSW5k
ZXggaW5kZXggPSBtX2NvbXBpbGVJbmRleDsgaW5kZXgtLSA+IHN0YXJ0OykgeworICAgICAgICAg
ICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOworICAgICAgICAgICAgaWYgKG5vZGUub3Ag
PT0gR2V0QnlPZmZzZXQKKyAgICAgICAgICAgICAgICAmJiBub2RlLmNoaWxkMSgpID09IGNoaWxk
MQorICAgICAgICAgICAgICAgICYmIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0
b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVt
YmVyKQorICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIGlmIChjbG9i
YmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gTm9Ob2RlOworICAgIH0KKyAgICAKICAgICB2b2lkIHBlcmZvcm1TdWJzdGl0
dXRpb24oTm9kZUluZGV4JiBjaGlsZCkKICAgICB7CiAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMg
b3BlcmFuZCBpcyBhY3R1YWxseSB1bnVzZWQuCkBAIC03NzcsNiArODI1LDE0IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRNZXRob2RMb2FkRWxpbWluYXRpb24obV9n
cmFwaC5tX21ldGhvZENoZWNrRGF0YVtub2RlLm1ldGhvZENoZWNrRGF0YUluZGV4KCldLCBub2Rl
LmlkZW50aWZpZXJOdW1iZXIoKSwgbm9kZS5jaGlsZDEoKSkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICAgICAgICAg
IHNldFJlcGxhY2VtZW50KGNoZWNrU3RydWN0dXJlTG9hZEVsaW1pbmF0aW9uKG5vZGUuc3RydWN0
dXJlKCksIG5vZGUuY2hpbGQxKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChn
ZXRCeU9mZnNldExvYWRFbGltaW5hdGlvbihtX2dyYXBoW25vZGUuc3RvcmFnZUFjY2Vzc0RhdGFJ
bmRleCgpXS5pZGVudGlmaWVyTnVtYmVyLCBub2RlLmNoaWxkMSgpKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgLy8gZG8g
bm90aGluZy4KICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9TdGRMaWJFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL1N0ZExpYkV4dHJhcy5oCShyZXZpc2lvbiA5NTM4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvU3RkTGliRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw2ICsxMDIsMTQg
QEAgaW5saW5lIFRPIGJpdHdpc2VfY2FzdChGUk9NIGZyb20pCiAgICAgcmV0dXJuIHUudG87CiB9
CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFRvLCB0eXBlbmFtZSBGcm9tPgoraW5saW5lIFRvIHNhZmVD
YXN0KEZyb20gdmFsdWUpCit7CisgICAgVG8gcmVzdWx0ID0gc3RhdGljX2Nhc3Q8VG8+KHZhbHVl
KTsKKyAgICBBU1NFUlQocmVzdWx0ID09IHZhbHVlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CiAvLyBSZXR1cm5zIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiBiaXRzIHNldCBpbiAnYml0cycu
CiBpbmxpbmUgc2l6ZV90IGJpdENvdW50KHVuc2lnbmVkIGJpdHMpCiB7CkBAIC0yMDksNSArMjE3
LDYgQEAgaW5saW5lIEFycmF5RWxlbWVudFR5cGUqIGdlbmVyaWNCaW5hcnlTZQogCiB1c2luZyBX
VEY6OmJpbmFyeVNlYXJjaDsKIHVzaW5nIFdURjo6Yml0d2lzZV9jYXN0OwordXNpbmcgV1RGOjpz
YWZlQ2FzdDsKIAogI2VuZGlmIC8vIFdURl9TdGRMaWJFeHRyYXNfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107786</attachid>
            <date>2011-09-18 00:34:25 -0700</date>
            <delta_ts>2011-09-18 12:54:54 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>getbyoffset_patch_2.diff</filename>
            <type>text/plain</type>
            <size>28143</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTUzODkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTcgQEAK
KzIwMTEtMDktMTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIGRvZXMgbm90IHNwZWN1bGF0ZSBhZ2dyZXNzaXZlbHkgZW5vdWdoIG9uIEdldEJ5SWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MzIwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBX
T1JLIElOIFBST0dSRVNTLiAgQWxsIG9mIHRoZSBjb2RlIGlzIHdyaXR0ZW4gYnV0IGl0J3MgdG90
YWxseSB1bnRlc3RlZC4KKworICAgICAgICAqIGJ5dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3BwOgor
ICAgICAgICAoSlNDOjpwcmVkaWN0aW9uRnJvbUNsYXNzSW5mbyk6CisgICAgICAgIChKU0M6OnBy
ZWRpY3Rpb25Gcm9tU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6cHJlZGljdGlvbkZyb21DZWxs
KToKKyAgICAgICAgKiBieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmg6CisgICAgICAgICogZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0dlbmVyYXRpb25JbmZvLmg6CisgICAgICAg
IChKU0M6OkRGRzo6ZGF0YUZvcm1hdFRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpuZWVk
RGF0YUZvcm1hdENvbnZlcnNpb24pOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZv
Ojppbml0U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OnNwaWxs
KToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6ZmlsbFN0b3JhZ2UpOgorICAg
ICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAqIGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9y
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpmaWxsU3RvcmFnZSk6
CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb2RlR2VuZXJhdG9yOjpzaWxlbnRTcGlsbEdQUik6CisgICAgICAgIChKU0M6OkRGRzo6
SklUQ29kZUdlbmVyYXRvcjo6c2lsZW50RmlsbEdQUik6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29kZUdlbmVyYXRvcjo6c3BpbGwpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0
b3I6OnN0b3JhZ2VSZXN1bHQpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5kOjpT
dG9yYWdlT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6On5TdG9y
YWdlT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6OmluZGV4KToK
KyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6Z3ByKToKKyAgICAgICAgKEpTQzo6
REZHOjpTdG9yYWdlT3BlcmFuZDo6dXNlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAg
ICAgICAoSlNDOjpERkc6Ok9wSW5mbzo6T3BJbmZvKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
OjpOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdHJ1Y3R1cmUpOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6OnN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
aGFzU3RvcmFnZUFjY2Vzc0RhdGEpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN0b3JhZ2VP
ZmZzZXREYXRhSW5kZXgpOgorICAgICAgICAqIGRmZy9ERkdQcm9wYWdhdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwcm9wYWdhdGVOb2RlKToKKyAgICAgICAgKEpTQzo6
REZHOjpQcm9wYWdhdG9yOjpnbG9iYWxWYXJMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlND
OjpERkc6OlByb3BhZ2F0b3I6OmdldE1ldGhvZExvYWRFbGltaW5hdGlvbik6CisgICAgICAgIChK
U0M6OkRGRzo6UHJvcGFnYXRvcjo6Y2hlY2tTdHJ1Y3R1cmVMb2FkRWxpbWluYXRpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKToK
KyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwZXJmb3JtTm9kZUNTRSk6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogd3RmL1N0ZExpYkV4dHJhcy5oOgorICAgICAg
ICAoV1RGOjpzYWZlQ2FzdCk6CisKIDIwMTEtMDktMTcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFw
cGxlLmNvbT4KIAogICAgICAgICBERkcgSklUIGRvZXMgbm90IGhhdmUgZnVsbCBibG9jay1sb2Nh
bCBDU0UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGlj
dGVkVHlwZS5jcHAJKHJldmlzaW9uIDk1Mzg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MiwxMCArODIsOCBA
QCBjb25zdCBjaGFyKiBwcmVkaWN0aW9uVG9TdHJpbmcoUHJlZGljdGVkCiB9CiAjZW5kaWYKIAot
UHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uRnJvbUNlbGwoSlNDZWxsKiBjZWxsKQorUHJlZGljdGVk
VHlwZSBwcmVkaWN0aW9uRnJvbUNsYXNzSW5mbyhjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykK
IHsKLSAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9IGNlbGwtPnN0cnVjdHVyZSgpLT5j
bGFzc0luZm8oKTsKLSAgICAKICAgICBpZiAoY2xhc3NJbmZvID09ICZKU0ZpbmFsT2JqZWN0Ojpz
X2luZm8pCiAgICAgICAgIHJldHVybiBQcmVkaWN0RmluYWxPYmplY3Q7CiAgICAgCkBAIC0xMDEs
NiArOTksMTYgQEAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uRnJvbUNlbGwoSlNDZWxsKgogICAg
IHJldHVybiBQcmVkaWN0Q2VsbE90aGVyOwogfQogCitQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb25G
cm9tU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIHJldHVybiBwcmVkaWN0
aW9uRnJvbUNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKK30KKworUHJlZGljdGVk
VHlwZSBwcmVkaWN0aW9uRnJvbUNlbGwoSlNDZWxsKiBjZWxsKQoreworICAgIHJldHVybiBwcmVk
aWN0aW9uRnJvbVN0cnVjdHVyZShjZWxsLT5zdHJ1Y3R1cmUoKSk7Cit9CisKIFByZWRpY3RlZFR5
cGUgcHJlZGljdGlvbkZyb21WYWx1ZShKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS5p
c0ludDMyKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVk
VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVk
aWN0ZWRUeXBlLmgJKHJldmlzaW9uIDk1Mzg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ByZWRpY3RlZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDYgKzE1MCw4IEBA
IGlubGluZSBQcmVkaWN0ZWRUeXBlIG1ha2VQcmVkaWN0aW9uKFByZWQKICAgICByZXR1cm4gdHlw
ZSB8IChzb3VyY2UgPT0gU3Ryb25nUHJlZGljdGlvbiA/IFN0cm9uZ1ByZWRpY3Rpb25UYWcgOiAw
KTsKIH0KIAorUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uRnJvbUNsYXNzSW5mbyhjb25zdCBDbGFz
c0luZm8qIGNsYXNzSW5mbyk7CitQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb25Gcm9tU3RydWN0dXJl
KFN0cnVjdHVyZSopOwogUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uRnJvbUNlbGwoSlNDZWxsKik7
CiBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb25Gcm9tVmFsdWUoSlNWYWx1ZSk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZp
c2lvbiA5NTM4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAzLDkgKzEwMDMsMjYgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogCiAgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lk
OiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXIgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlciA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IG1fcHJvZmlsZWRCbG9j
ay0+Z2V0U3R1YkluZm8obV9jdXJyZW50SW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBOb2RlSW5kZXggZ2V0QnlJZDsKKyAgICAgICAgICAgIGlmIChzdHViSW5mby5zZWVuICYmIHN0
dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmKSB7CisgICAgICAgICAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VP
YmplY3RTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgICAgICAgICAgSWRlbnRpZmllciBpZGVudGlm
aWVyID0gbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcik7CisgICAgICAg
ICAgICAgICAgc2l6ZV90IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KCptX2dsb2JhbERhdGEsIGlk
ZW50aWZpZXIpOworICAgICAgICAgICAgICAgIEFTU0VSVChvZmZzZXQgIT0gbm90Rm91bmQpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGdldEJ5SWQgPSBhZGRUb0dyYXBoKEdl
dEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSksIE9w
SW5mbyhQcmVkaWN0Tm9uZSksIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhzdHJ1
Y3R1cmUpLCBiYXNlKSk7CisKKyAgICAgICAgICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBzdG9y
YWdlQWNjZXNzRGF0YTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZzZXQg
PSBvZmZzZXQ7CisgICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmllciA9
IGlkZW50aWZpZXI7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRh
LmFwcGVuZChzdG9yYWdlQWNjZXNzRGF0YSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICBnZXRCeUlkID0gYWRkVG9HcmFwaChHZXRCeUlkLCBPcEluZm8oaWRlbnRpZmllck51
bWJlciksIE9wSW5mbyhQcmVkaWN0Tm9uZSksIGJhc2UpOwogICAgICAgICAgICAgCi0gICAgICAg
ICAgICBOb2RlSW5kZXggZ2V0QnlJZCA9IGFkZFRvR3JhcGgoR2V0QnlJZCwgT3BJbmZvKGlkZW50
aWZpZXIpLCBPcEluZm8oUHJlZGljdE5vbmUpLCBiYXNlKTsKICAgICAgICAgICAgIHNldChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBnZXRCeUlkKTsKICAgICAgICAgICAgIHN0cm9u
Z2x5UHJlZGljdChnZXRCeUlkKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHZW5lcmF0aW9uSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR2VuZXJhdGlvbkluZm8uaAkocmV2aXNpb24gOTUzODgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYg
KzQ0LDcgQEAgZW51bSBEYXRhRm9ybWF0IHsKICAgICBEYXRhRm9ybWF0RG91YmxlID0gMiwKICAg
ICBEYXRhRm9ybWF0Qm9vbGVhbiA9IDMsCiAgICAgRGF0YUZvcm1hdENlbGwgPSA0LAorICAgIERh
dGFGb3JtYXRTdG9yYWdlID0gNSwKICAgICBEYXRhRm9ybWF0SlMgPSA4LAogICAgIERhdGFGb3Jt
YXRKU0ludGVnZXIgPSBEYXRhRm9ybWF0SlMgfCBEYXRhRm9ybWF0SW50ZWdlciwKICAgICBEYXRh
Rm9ybWF0SlNEb3VibGUgPSBEYXRhRm9ybWF0SlMgfCBEYXRhRm9ybWF0RG91YmxlLApAQCAtNjUs
NiArNjYsOCBAQCBpbmxpbmUgY29uc3QgY2hhciogZGF0YUZvcm1hdFRvU3RyaW5nKERhCiAgICAg
ICAgIHJldHVybiAiQ2VsbCI7CiAgICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjoKICAgICAgICAg
cmV0dXJuICJCb29sZWFuIjsKKyAgICBjYXNlIERhdGFGb3JtYXRTdG9yYWdlOgorICAgICAgICBy
ZXR1cm4gIlN0b3JhZ2UiOwogICAgIGNhc2UgRGF0YUZvcm1hdEpTOgogICAgICAgICByZXR1cm4g
IkpTIjsKICAgICBjYXNlIERhdGFGb3JtYXRKU0ludGVnZXI6CkBAIC0xMTAsNiArMTEzLDkgQEAg
aW5saW5lIGJvb2wgbmVlZERhdGFGb3JtYXRDb252ZXJzaW9uKERhdAogICAgICAgICAgICAgLy8g
VGhpcyBjYXB0dXJlcyBEYXRhRm9ybWF0Qm9vbGVhbiwgd2hpY2ggaXMgY3VycmVudGx5IHVudXNl
ZC4KICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CisgICAgY2Fz
ZSBEYXRhRm9ybWF0U3RvcmFnZToKKyAgICAgICAgQVNTRVJUKHRvID09IERhdGFGb3JtYXRTdG9y
YWdlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIC8vIFRo
aXMgY2FwdHVyZXMgRGF0YUZvcm1hdEJvb2xlYW4sIHdoaWNoIGlzIGN1cnJlbnRseSB1bnVzZWQu
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjA5LDYgKzIxNSwxNSBAQCBwdWJs
aWM6CiAgICAgICAgIG1fY2FuRmlsbCA9IGZhbHNlOwogICAgICAgICB1LmZwciA9IGZwcjsKICAg
ICB9CisgICAgdm9pZCBpbml0U3RvcmFnZShOb2RlSW5kZXggbm9kZUluZGV4LCB1aW50MzJfdCB1
c2VDb3VudCwgR1BSUmVnIGdwcikKKyAgICB7CisgICAgICAgIG1fbm9kZUluZGV4ID0gbm9kZUlu
ZGV4OworICAgICAgICBtX3VzZUNvdW50ID0gdXNlQ291bnQ7CisgICAgICAgIG1fcmVnaXN0ZXJG
b3JtYXQgPSBEYXRhRm9ybWF0U3RvcmFnZTsKKyAgICAgICAgbV9zcGlsbEZvcm1hdCA9IERhdGFG
b3JtYXROb25lOworICAgICAgICBtX2NhbkZpbGwgPSBmYWxzZTsKKyAgICAgICAgdS5ncHIgPSBn
cHI7CisgICAgfQogCiAgICAgLy8gR2V0IHRoZSBpbmRleCBvZiB0aGUgbm9kZSB0aGF0IHByb2R1
Y2VkIHRoaXMgdmFsdWUuCiAgICAgTm9kZUluZGV4IG5vZGVJbmRleCgpIHsgcmV0dXJuIG1fbm9k
ZUluZGV4OyB9CkBAIC0yODgsOSArMzAzLDEyIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKG1f
c3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdE5vbmUpOwogICAgICAgICAvLyBXZSBzaG91bGQgb25s
eSBiZSBzcGlsbGluZyB2YWx1ZXMgdGhhdCBhcmUgY3VycmVudGx5IGluIG1hY2hpbmUgcmVnaXN0
ZXJzLgogICAgICAgICBBU1NFUlQobV9yZWdpc3RlckZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSk7
Ci0gICAgICAgIC8vIFdlIG9ubHkgc3BpbGwgdmFsdWVzIHRoYXQgaGF2ZSBiZWVuIGJveGVkIGFz
IGEgSlNWYWx1ZTsgb3RoZXJ3aXNlIHRoZSBHQwotICAgICAgICAvLyB3b3VsZCBuZWVkIGEgd2F5
IHRvIGRpc3Rpbmd1aXNoIGNlbGwgcG9pbnRlcnMgZnJvbSBudW1lcmljIHByaW1pdGl2ZXMuCi0g
ICAgICAgIEFTU0VSVChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAgICAgIC8vIFdl
IG9ubHkgc3BpbGwgdmFsdWVzIHRoYXQgaGF2ZSBiZWVuIGJveGVkIGFzIGEgSlNWYWx1ZSBiZWNh
dXNlIGhpc3RvcmljYWxseQorICAgICAgICAvLyB3ZSBhc3N1bWVkIHRoYXQgdGhlIEdDIHdvdWxk
IHdhbnQgdG8gYmUgYWJsZSB0byBwcmVjaXNlbHkgaWRlbnRpZnkgaGVhcAorICAgICAgICAvLyBw
b2ludGVycy4gVGhpcyBpcyBub3QgdHJ1ZSBhbnltb3JlLCBidXQgd2Ugc3RpbGwgYXNzdW1lLCBp
biB0aGUgZmlsbCBjb2RlLAorICAgICAgICAvLyB0aGF0IGFueSBzcGlsbCBzbG90IGZvciBhIEpT
IHZhbHVlIGlzIGJveGVkLiBGb3Igc3RvcmFnZSBwb2ludGVycywgdGhlcmUgaXMKKyAgICAgICAg
Ly8gbm90aGluZyB3ZSBjYW4gZG8gdG8gYm94IHRoZW0sIHNvIHdlIGFsbG93IHRoYXQgdG8gYmUg
YW4gZXhjZXB0aW9uLgorICAgICAgICBBU1NFUlQoKHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpT
KSB8fCBzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0U3RvcmFnZSk7CiAKICAgICAgICAgbV9yZWdp
c3RlckZvcm1hdCA9IERhdGFGb3JtYXROb25lOwogICAgICAgICBtX3NwaWxsRm9ybWF0ID0gc3Bp
bGxGb3JtYXQ7CkBAIC0zMzAsNiArMzQ4LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9yZWdpc3Rl
ckZvcm1hdCA9IERhdGFGb3JtYXREb3VibGU7CiAgICAgICAgIHUuZnByID0gZnByOwogICAgIH0K
KyAgICB2b2lkIGZpbGxTdG9yYWdlKEdQUlJlZyBncHIpCisgICAgeworICAgICAgICBtX3JlZ2lz
dGVyRm9ybWF0ID0gRGF0YUZvcm1hdFN0b3JhZ2U7CisgICAgICAgIHUuZ3ByID0gZ3ByOworICAg
IH0KIAogICAgIGJvb2wgYWxpdmUoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgJKHJldmlzaW9uIDk1Mzg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCwxOSBAQCBzdHJ1Y3QgTWV0
aG9kQ2hlY2tEYXRhIHsKICAgICB9CiB9OwogCitzdHJ1Y3QgU3RvcmFnZUFjY2Vzc0RhdGEgewor
ICAgIHNpemVfdCBvZmZzZXQ7CisgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlcjsKKyAgICAK
KyAgICAvLyBOT1RFOiB0aGUgb2Zmc2V0IGFuZCBpZGVudGlmaWVyTnVtYmVyIGRvIG5vdCBieSB0
aGVtc2VsdmVzCisgICAgLy8gdW5pcXVlbHkgaWRlbnRpZnkgYSBwcm9wZXJ0eS4gVGhlIGlkZW50
aWZpZXJOdW1iZXIgYW5kIGEKKyAgICAvLyBTdHJ1Y3R1cmUqIGRvLiBJZiB0aG9zZSB0d28gbWF0
Y2gsIHRoZW4gdGhlIG9mZnNldCBzaG91bGQKKyAgICAvLyBiZSB0aGUgc2FtZSwgYXMgd2VsbC4g
Rm9yIGFueSBOb2RlIHRoYXQgaGFzIGEgU3RvcmFnZUFjY2Vzc0RhdGEsCisgICAgLy8gaXQgaXMg
cG9zc2libGUgdG8gcmV0cmlldmUgdGhlIFN0cnVjdHVyZSogYnkgbG9va2luZyBhdCB0aGUKKyAg
ICAvLyBmaXJzdCBjaGlsZC4gSXQgc2hvdWxkIGJlIGEgQ2hlY2tTdHJ1Y3R1cmUsIHdoaWNoIGhh
cyB0aGUKKyAgICAvLyBTdHJ1Y3R1cmUqLgorfTsKKwogdHlwZWRlZiBWZWN0b3IgPEJsb2NrSW5k
ZXgsIDI+IFByZWRlY2Vzc29yTGlzdDsKIAogc3RydWN0IEJhc2ljQmxvY2sgewpAQCAtMjk5LDYg
KzMxMiw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8IE93blB0cjxCYXNpY0Jsb2NrPiAsIDg+IG1f
YmxvY2tzOwogICAgIFZlY3RvcjxOb2RlSW5kZXgsIDE2PiBtX3ZhckFyZ0NoaWxkcmVuOwogICAg
IFZlY3RvcjxNZXRob2RDaGVja0RhdGE+IG1fbWV0aG9kQ2hlY2tEYXRhOworICAgIFZlY3RvcjxT
dG9yYWdlQWNjZXNzRGF0YT4gbV9zdG9yYWdlQWNjZXNzRGF0YTsKICAgICB1bnNpZ25lZCBtX3By
ZXNlcnZlZFZhcnM7CiAgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJTbG90czsKIHByaXZhdGU6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRv
ci5jcHAJKHJldmlzaW9uIDk1Mzg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI0LDYgKzMyNCwzNSBAQCBH
UFJSZWcgSklUQ29kZUdlbmVyYXRvcjo6ZmlsbEpTVmFsdWUoTm9kCiAgICAgcmV0dXJuIEludmFs
aWRHUFJSZWc7CiB9CiAKK0dQUlJlZyBKSVRDb2RlR2VuZXJhdG9yOjpmaWxsU3RvcmFnZShOb2Rl
SW5kZXggbm9kZUluZGV4KQoreworICAgIE5vZGUmIG5vZGUgPSBtX2ppdC5ncmFwaCgpW25vZGVJ
bmRleF07CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IG5vZGUudmlydHVh
bFJlZ2lzdGVyKCk7CisgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBtX2dlbmVyYXRpb25JbmZv
W3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgCisgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0
KCkpIHsKKyAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7CisgICAgICAgIEdQUlJlZyBncHIgPSBh
bGxvY2F0ZSgpOworICAgICAgICBBU1NFUlQoaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3Jt
YXRTdG9yYWdlKTsKKyAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3Rlciwg
U3BpbGxPcmRlclNwaWxsZWQpOworICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CisgICAgICAgIGluZm8uZmlsbFN0b3Jh
Z2UoZ3ByKTsKKyAgICAgICAgcmV0dXJuIGdwcjsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2Ug
RGF0YUZvcm1hdFN0b3JhZ2U6IHsKKyAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7Cisg
ICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7CisgICAgICAgIHJldHVybiBncHI7CisgICAgfQorICAg
ICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7Cit9CisKIHZvaWQgSklUQ29kZUdlbmVy
YXRvcjo6dXNlQ2hpbGRyZW4oTm9kZSYgbm9kZSkKIHsKICAgICBpZiAobm9kZS5vcCAmIE5vZGVI
YXNWYXJBcmdzKSB7CkBAIC0xMDc4LDE0ICsxMTA3LDYgQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9y
Ojpub25TcGVjdWxhdGl2ZUlucwogICAgIGpzVmFsdWVSZXN1bHQoc2NyYXRjaFJlZywgbV9jb21w
aWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiB9CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFRvLCB0eXBlbmFtZSBGcm9tPgotaW5saW5lIFRvIHNhZmVDYXN0KEZyb20gdmFsdWUp
Ci17Ci0gICAgVG8gcmVzdWx0ID0gc3RhdGljX2Nhc3Q8VG8+KHZhbHVlKTsKLSAgICBBU1NFUlQo
cmVzdWx0ID09IHZhbHVlKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiBKSVRDb21waWxlcjo6
Q2FsbCBKSVRDb2RlR2VuZXJhdG9yOjpjYWNoZWRHZXRCeUlkKEdQUlJlZyBiYXNlR1BSLCBHUFJS
ZWcgcmVzdWx0R1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJl
ciwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQsIE5vZGVUeXBlIG5vZGVUeXBlKQog
ewogICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgc3RydWN0dXJlVG9Db21wYXJlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgJ
KHJldmlzaW9uIDk1Mzg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2Rl
R2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDcgQEAgcHJvdGVjdGVkOgog
ICAgICAgICBTcGlsbE9yZGVyU3BpbGxlZCA9IDIsICAvLyBubyBzcGlsbAogICAgICAgICBTcGls
bE9yZGVySlMgPSA0LCAgICAgICAvLyBuZWVkcyBzcGlsbAogICAgICAgICBTcGlsbE9yZGVyQ2Vs
bCA9IDQsICAgICAvLyBuZWVkcyBzcGlsbAorICAgICAgICBTcGlsbE9yZGVyU3RvcmFnZSA9IDQs
ICAvLyBuZWVkcyBzcGlsbAogICAgICAgICBTcGlsbE9yZGVySW50ZWdlciA9IDUsICAvLyBuZWVk
cyBzcGlsbCBhbmQgYm94CiAgICAgICAgIFNwaWxsT3JkZXJEb3VibGUgPSA2LCAgIC8vIG5lZWRz
IHNwaWxsIGFuZCBjb252ZXJ0CiAgICAgfTsKQEAgLTc0LDYgKzc1LDcgQEAgcHVibGljOgogICAg
IEdQUlJlZyBmaWxsSW50ZWdlcihOb2RlSW5kZXgsIERhdGFGb3JtYXQmIHJldHVybkZvcm1hdCk7
CiAgICAgRlBSUmVnIGZpbGxEb3VibGUoTm9kZUluZGV4KTsKICAgICBHUFJSZWcgZmlsbEpTVmFs
dWUoTm9kZUluZGV4KTsKKyAgICBHUFJSZWcgZmlsbFN0b3JhZ2UoTm9kZUluZGV4KTsKIAogICAg
IC8vIGxvY2sgYW5kIHVubG9jayBHUFIgJiBGUFIgcmVnaXN0ZXJzLgogICAgIHZvaWQgbG9jayhH
UFJSZWcgcmVnKQpAQCAtMjIyLDEwICsyMjQsMTAgQEAgcHJvdGVjdGVkOgogCiAgICAgICAgIERh
dGFGb3JtYXQgcmVnaXN0ZXJGb3JtYXQgPSBpbmZvLnJlZ2lzdGVyRm9ybWF0KCk7CiAKLSAgICAg
ICAgaWYgKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKSB7CisgICAgICAgIGlm
IChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikKICAgICAgICAgICAgIG1faml0
LnN0b3JlMzIoaW5mby5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ICYgRGF0
YUZvcm1hdEpTIHx8IHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRDZWxsKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMg
fHwgcmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwgfHwgcmVnaXN0ZXJGb3JtYXQgPT0g
RGF0YUZvcm1hdFN0b3JhZ2UpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoaW5mby5ncHIo
KSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOwogICAgICAgICB9CiAgICAgfQpA
QCAtMjczLDcgKzI3NSw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgaWYgKG5vZGUuaGFzQ29uc3Rh
bnQoKSkKICAgICAgICAgICAgIG1faml0Lm1vdmUodmFsdWVPZkpTQ29uc3RhbnRBc0ltbVB0cihu
b2RlSW5kZXgpLCBpbmZvLmdwcigpKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NF
UlQocmVnaXN0ZXJGb3JtYXQgJiBEYXRhRm9ybWF0SlMgfHwgcmVnaXN0ZXJGb3JtYXQgPT0gRGF0
YUZvcm1hdENlbGwpOworICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ICYgRGF0YUZv
cm1hdEpTIHx8IHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRDZWxsIHx8IHJlZ2lzdGVyRm9y
bWF0ID09IERhdGFGb3JtYXRTdG9yYWdlKTsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklU
Q29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSksIGluZm8uZ3ByKCkpOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMzg1LDcgKzM4Nyw4IEBAIHByb3RlY3RlZDoKICAgICAgICAgfQogCiAgICAgICAg
IERhdGFGb3JtYXQgc3BpbGxGb3JtYXQgPSBpbmZvLnJlZ2lzdGVyRm9ybWF0KCk7Ci0gICAgICAg
IGlmIChzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0RG91YmxlKSB7CisgICAgICAgIHN3aXRjaCAo
c3BpbGxGb3JtYXQpIHsKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOiB7CiAgICAgICAg
ICAgICAvLyBBbGwgdmFsdWVzIGFyZSBzcGlsbGVkIGFzIEpTVmFsdWVzLCBzbyBib3ggdGhlIGRv
dWJsZSB2aWEgYSB0ZW1wb3JhcnkgZ3ByLgogICAgICAgICAgICAgR1BSUmVnIGdwciA9IGJveERv
dWJsZShpbmZvLmZwcigpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGdwciwgSklUQ29t
cGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOwpAQCAtMzkzLDE5ICszOTYsMzAgQEAgcHJvdGVj
dGVkOgogICAgICAgICAgICAgaW5mby5zcGlsbChEYXRhRm9ybWF0SlNEb3VibGUpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBEYXRh
Rm9ybWF0U3RvcmFnZTogeworICAgICAgICAgICAgLy8gVGhpcyBpcyBzcGVjaWFsLCBzaW5jZSBp
dCdzIG5vdCBhIEpTIHZhbHVlIC0gYXMgaW4gaXQncyBub3QgdmlzaWJsZSB0byBKUworICAgICAg
ICAgICAgLy8gY29kZS4KKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGluZm8uZ3ByKCksIEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKKyAgICAgICAgICAgIGluZm8uc3BpbGwo
RGF0YUZvcm1hdFN0b3JhZ2UpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAg
ICAgICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGhhbmRsZXMgSlNWYWx1ZXMsIGludDMycywgYW5k
IGNlbGxzLgotICAgICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIg
fHwgc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwgfHwgc3BpbGxGb3JtYXQgJiBEYXRhRm9y
bWF0SlMpOwotCi0gICAgICAgIEdQUlJlZyByZWcgPSBpbmZvLmdwcigpOwotICAgICAgICAvLyBX
ZSBuZWVkIHRvIGJveCBpbnQzMiBhbmQgY2VsbCB2YWx1ZXMgLi4uCi0gICAgICAgIC8vIGJ1dCBv
biBKU1ZBTFVFNjQgYm94aW5nIGEgY2VsbCBpcyBhIG5vLW9wIQotICAgICAgICBpZiAoc3BpbGxG
b3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpCi0gICAgICAgICAgICBtX2ppdC5vclB0cihHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZyk7Ci0KLSAgICAgICAgLy8gU3BpbGwgdGhl
IHZhbHVlLCBhbmQgcmVjb3JkIGl0IGFzIHNwaWxsZWQgaW4gaXRzIGJveGVkIGZvcm0uCi0gICAg
ICAgIG1faml0LnN0b3JlUHRyKHJlZywgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkp
OwotICAgICAgICBpbmZvLnNwaWxsKChEYXRhRm9ybWF0KShzcGlsbEZvcm1hdCB8IERhdGFGb3Jt
YXRKUykpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBj
b2RlIGhhbmRsZXMgSlNWYWx1ZXMsIGludDMycywgYW5kIGNlbGxzLgorICAgICAgICAgICAgQVNT
RVJUKHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyIHx8IHNwaWxsRm9ybWF0ID09IERh
dGFGb3JtYXRDZWxsIHx8IHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgR1BSUmVnIHJlZyA9IGluZm8uZ3ByKCk7CisgICAgICAgICAgICAvLyBX
ZSBuZWVkIHRvIGJveCBpbnQzMiBhbmQgY2VsbCB2YWx1ZXMgLi4uCisgICAgICAgICAgICAvLyBi
dXQgb24gSlNWQUxVRTY0IGJveGluZyBhIGNlbGwgaXMgYSBuby1vcCEKKyAgICAgICAgICAgIGlm
IChzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikKKyAgICAgICAgICAgICAgICBtX2pp
dC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZyk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIFNwaWxsIHRoZSB2YWx1ZSwgYW5kIHJlY29yZCBpdCBhcyBzcGls
bGVkIGluIGl0cyBib3hlZCBmb3JtLgorICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIocmVnLCBK
SVRDb21waWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSk7CisgICAgICAgICAgICBpbmZvLnNwaWxs
KChEYXRhRm9ybWF0KShzcGlsbEZvcm1hdCB8IERhdGFGb3JtYXRKUykpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNTdHJpY3RJbnQzMihO
b2RlSW5kZXgpOwpAQCAtNjk5LDYgKzcxMywxNyBAQCBwcm90ZWN0ZWQ6CiAgICAgewogICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlZywgbm9kZUluZGV4LCBEYXRhRm9ybWF0SlMsIG1vZGUpOwogICAg
IH0KKyAgICB2b2lkIHN0b3JhZ2VSZXN1bHQoR1BSUmVnIHJlZywgTm9kZUluZGV4IG5vZGVJbmRl
eCwgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCisgICAgeworICAgICAg
ICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOworICAgICAgICBpZiAobW9k
ZSA9PSBDYWxsVXNlQ2hpbGRyZW4pCisgICAgICAgICAgICB1c2VDaGlsZHJlbihub2RlKTsKKyAg
ICAgICAgCisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZp
cnR1YWxSZWdpc3RlcigpOworICAgICAgICBtX2dwcnMucmV0YWluKHJlZywgdmlydHVhbFJlZ2lz
dGVyLCBTcGlsbE9yZGVyU3RvcmFnZSk7CisgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0g
bV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOworICAgICAgICBpbmZvLmluaXRTdG9y
YWdlKG5vZGVJbmRleCwgbm9kZS5yZWZDb3VudCgpLCByZWcpOworICAgIH0KICAgICB2b2lkIGRv
dWJsZVJlc3VsdChGUFJSZWcgcmVnLCBOb2RlSW5kZXggbm9kZUluZGV4LCBVc2VDaGlsZHJlbk1v
ZGUgbW9kZSA9IENhbGxVc2VDaGlsZHJlbikKICAgICB7CiAgICAgICAgIE5vZGUmIG5vZGUgPSBt
X2ppdC5ncmFwaCgpW25vZGVJbmRleF07CkBAIC0xMTU5LDYgKzExODQsNDcgQEAgcHJpdmF0ZToK
ICAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7CiB9OwogCitjbGFzcyBTdG9yYWdlT3BlcmFuZCB7
CitwdWJsaWM6CisgICAgZXhwbGljaXQgU3RvcmFnZU9wZXJhbmQoSklUQ29kZUdlbmVyYWdvciog
aml0LCBOb2RlSW5kZXggaW5kZXgpCisgICAgICAgIDogbV9qaXQoaml0KQorICAgICAgICAsIG1f
aW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQUlJlZykKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX2ppdCk7CisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKGlu
ZGV4KSkKKyAgICAgICAgICAgIGdwcigpOworICAgIH0KKyAgICAKKyAgICB+U3RvcmFnZU9wZXJh
bmQoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZ3ByT3JJbnZhbGlkICE9IEludmFsaWRHUFJS
ZWcpOworICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKKyAgICB9CisgICAg
CisgICAgTm9kZUluZGV4IGluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2lu
ZGV4OworICAgIH0KKyAgICAKKyAgICBHUFJSZWcgZ3ByKCkKKyAgICB7CisgICAgICAgIGlmICht
X2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgbV9ncHJPckludmFs
aWQgPSBtX2ppdC0+ZmlsbFN0b3JhZ2UoaW5kZXgoKSk7CisgICAgICAgIHJldHVybiBtX2dwck9y
SW52YWxpZDsKKyAgICB9CisgICAgCisgICAgdm9pZCB1c2UoKQorICAgIHsKKyAgICAgICAgbV9q
aXQtPnVzZShtX2luZGV4KTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEpJVENvZGVHZW5l
cmF0b3IqIG1faml0OworICAgIE5vZGVJbmRleCBtX2luZGV4OworICAgIEdQUlJlZyBtX2dwck9y
SW52YWxpZDsKK307CisKIAogLy8gPT09IFRlbXBvcmFyaWVzID09PQogLy8KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiA5NTM4OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksMTAgKzExOSwx
MSBAQCBwcml2YXRlOgogI2RlZmluZSBOb2RlTWlnaHRDbG9iYmVyICAweDgwMDAwMAogCiAvLyBU
aGVzZSB2YWx1ZXMgcmVjb3JkIHRoZSByZXN1bHQgdHlwZSBvZiB0aGUgbm9kZSAoYXMgY2hlY2tl
ZCBieSBOb2RlUmVzdWx0TWFzaywgYWJvdmUpLCAwIGZvciBubyByZXN1bHQuCi0jZGVmaW5lIE5v
ZGVSZXN1bHRKUyAgICAgIDB4MTAwMAotI2RlZmluZSBOb2RlUmVzdWx0TnVtYmVyICAweDIwMDAK
LSNkZWZpbmUgTm9kZVJlc3VsdEludDMyICAgMHgzMDAwCi0jZGVmaW5lIE5vZGVSZXN1bHRCb29s
ZWFuIDB4NDAwMAorI2RlZmluZSBOb2RlUmVzdWx0SlMgICAgICAgIDB4MTAwMAorI2RlZmluZSBO
b2RlUmVzdWx0TnVtYmVyICAgIDB4MjAwMAorI2RlZmluZSBOb2RlUmVzdWx0SW50MzIgICAgIDB4
MzAwMAorI2RlZmluZSBOb2RlUmVzdWx0Qm9vbGVhbiAgIDB4NDAwMAorI2RlZmluZSBOb2RlUmVz
dWx0U3RvcmFnZSAgIDB4NTAwMAogCiAvLyBUaGlzIG1hY3JvIGRlZmluZXMgYSBzZXQgb2YgaW5m
b3JtYXRpb24gYWJvdXQgYWxsIGtub3duIG5vZGUgdHlwZXMsIHVzZWQgdG8gcG9wdWxhdGUgTm9k
ZUlkLCBOb2RlVHlwZSBiZWxvdy4KICNkZWZpbmUgRk9SX0VBQ0hfREZHX09QKG1hY3JvKSBcCkBA
IC0xNzQsNiArMTc1LDggQEAgcHJpdmF0ZToKICAgICBtYWNybyhHZXRCeUlkLCBOb2RlUmVzdWx0
SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBtYWNybyhQ
dXRCeUlkLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBtYWNy
byhQdXRCeUlkRGlyZWN0LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwK
KyAgICBtYWNybyhDaGVja1N0cnVjdHVyZSwgTm9kZVJlc3VsdFN0b3JhZ2UgfCBOb2RlTXVzdEdl
bmVyYXRlKSBcCisgICAgbWFjcm8oR2V0QnlPZmZzZXQsIE5vZGVSZXN1bHRKUykgXAogICAgIG1h
Y3JvKEdldE1ldGhvZCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1h
Y3JvKENoZWNrTWV0aG9kLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAg
bWFjcm8oR2V0R2xvYmFsVmFyLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCkBA
IC0yMjgsOCArMjMxLDkgQEAgZW51bSBOb2RlVHlwZSB7CiAvLyBkaXN0aW5ndWlzaGVzIGFuIGlt
bWVkaWF0ZSB2YWx1ZSAodHlwaWNhbGx5IGFuIGluZGV4IGludG8gYSBDb2RlQmxvY2sgZGF0YSBz
dHJ1Y3R1cmUgLSAKIC8vIGEgY29uc3RhbnQgaW5kZXgsIGFyZ3VtZW50LCBvciBpZGVudGlmaWVy
KSBmcm9tIGEgTm9kZUluZGV4Lgogc3RydWN0IE9wSW5mbyB7Ci0gICAgZXhwbGljaXQgT3BJbmZv
KHVuc2lnbmVkIHZhbHVlKSA6IG1fdmFsdWUodmFsdWUpIHt9Ci0gICAgdW5zaWduZWQgbV92YWx1
ZTsKKyAgICBleHBsaWNpdCBPcEluZm8odWludHB0cl90IHZhbHVlKSA6IG1fdmFsdWUodmFsdWUp
IHt9CisgICAgZXhwbGljaXQgT3BJbmZvKHZvaWQqIHZhbHVlKSA6IG1fdmFsdWUocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKSkge30KKyAgICB1aW50cHRyX3QgbV92YWx1ZTsKIH07
CiAKIC8vID09PSBOb2RlID09PQpAQCAtMjcyLDcgKzI3Niw3IEBAIHN0cnVjdCBOb2RlIHsKICAg
ICAgICAgLCBtX3ZpcnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQogICAgICAg
ICAsIG1fcmVmQ291bnQoMCkKICAgICAgICAgLCBtX29wSW5mbyhpbW0xLm1fdmFsdWUpCi0gICAg
ICAgICwgbV9vcEluZm8yKGltbTIubV92YWx1ZSkKKyAgICAgICAgLCBtX29wSW5mbzIoc2FmZUNh
c3Q8dW5zaWduZWQ+KGltbTIubV92YWx1ZSkpCiAgICAgewogICAgICAgICBBU1NFUlQoIShvcCAm
IE5vZGVIYXNWYXJBcmdzKSk7CiAgICAgICAgIGNoaWxkcmVuLmZpeGVkLmNoaWxkMSA9IGNoaWxk
MTsKQEAgLTI4Nyw3ICsyOTEsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgICwgbV92aXJ0dWFs
UmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAgLCBtX3JlZkNvdW50KDAp
CiAgICAgICAgICwgbV9vcEluZm8oaW1tMS5tX3ZhbHVlKQotICAgICAgICAsIG1fb3BJbmZvMihp
bW0yLm1fdmFsdWUpCisgICAgICAgICwgbV9vcEluZm8yKHNhZmVDYXN0PHVuc2lnbmVkPihpbW0y
Lm1fdmFsdWUpKQogICAgIHsKICAgICAgICAgQVNTRVJUKG9wICYgTm9kZUhhc1ZhckFyZ3MpOwog
ICAgICAgICBjaGlsZHJlbi52YXJpYWJsZS5maXJzdENoaWxkID0gZmlyc3RDaGlsZDsKQEAgLTQ4
OCw2ICs0OTIsMjYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gbV9vcEluZm8yOwog
ICAgIH0KICAgICAKKyAgICBib29sIGhhc1N0cnVjdHVyZSgpCisgICAgeworICAgICAgICByZXR1
cm4gb3AgPT0gQ2hlY2tTdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFN0cnVjdHVy
ZSo+KG1fb3BJbmZvKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBoYXNTdG9yYWdlQWNjZXNzRGF0
YSgpCisgICAgeworICAgICAgICByZXR1cm4gb3AgPT0gR2V0QnlPZmZzZXQ7CisgICAgfQorICAg
IAorICAgIHVuc2lnbmVkIHN0b3JhZ2VPZmZzZXREYXRhSW5kZXgoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fb3BJbmZvOworICAgIH0KKyAgICAKICAgICBib29sIGhhc1ZpcnR1YWxSZWdpc3Rl
cigpCiAgICAgewogICAgICAgICByZXR1cm4gbV92aXJ0dWFsUmVnaXN0ZXIgIT0gSW52YWxpZFZp
cnR1YWxSZWdpc3RlcjsKQEAgLTU5OSw4ICs2MjMsMTAgQEAgcHJpdmF0ZToKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgbV92aXJ0dWFsUmVnaXN0ZXI7CiAgICAgLy8gVGhlIG51bWJlciBvZiB1c2VzIG9m
IHRoZSByZXN1bHQgb2YgdGhpcyBvcGVyYXRpb24gKCsxIGZvciAnbXVzdCBnZW5lcmF0ZScgbm9k
ZXMsIHdoaWNoIGhhdmUgc2lkZS1lZmZlY3RzKS4KICAgICB1bnNpZ25lZCBtX3JlZkNvdW50Owot
ICAgIC8vIEltbWVkaWF0ZSB2YWx1ZXMsIGFjY2Vzc2VzIHR5cGUtY2hlY2tlZCB2aWEgYWNjZXNz
b3JzIGFib3ZlLgotICAgIHVuc2lnbmVkIG1fb3BJbmZvLCBtX29wSW5mbzI7CisgICAgLy8gSW1t
ZWRpYXRlIHZhbHVlcywgYWNjZXNzZXMgdHlwZS1jaGVja2VkIHZpYSBhY2Nlc3NvcnMgYWJvdmUu
IFRoZSBmaXJzdCBvbmUgaXMKKyAgICAvLyBiaWcgZW5vdWdoIHRvIHN0b3JlIGEgcG9pbnRlci4K
KyAgICB1aW50cHRyX3QgbV9vcEluZm87CisgICAgdW5zaWduZWQgbV9vcEluZm8yOwogfTsKIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcm9wYWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCShyZXZpc2lvbiA5NTM4OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3Miw2ICsy
NzIsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTogeworICAgICAgICAgICAgLy8gV2Ug
YmFja3dhcmQgcHJvcGFnYXRlIHdoYXQgdGhpcyBDaGVja1N0cnVjdHVyZSB0ZWxscyB1cy4gTWF5
YmUgdGhhdCdzIHRoZSByaWdodCB3YXkKKyAgICAgICAgICAgIC8vIHRvIGdvOyBtYXliZSBpdCBp
c24ndC4gSSdtIG5vdCBzdXJlLiBXaGF0IHdlJ2QgcmVhbGx5IHdhbnQgaXMgZmxvdy1zZW5zaXRp
dmUKKyAgICAgICAgICAgIC8vIGZvcndhcmQgcHJvcGFnYXRpb24gb2Ygd2hhdCB3ZSBsZWFybiBm
cm9tIGhhdmluZyBleGVjdXRlZCBDaGVja1N0cnVjdHVyZS4gQnV0IGZvcgorICAgICAgICAgICAg
Ly8gbm93IHdlIHByZXNlcnZlIHRoZSBmbG93LWluc2Vuc2l0aXZlIG5hdHVyZSBvZiB0aGlzIGFu
YWx5c2lzLCBiZWNhdXNlIGl0J3MgY2hlYXAgdG8KKyAgICAgICAgICAgIC8vIHJ1biBhbmQgc2Vl
bXMgdG8gd29yayB3ZWxsIGVub3VnaC4KKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VVc2Uo
bm9kZS5jaGlsZDEoKSwgcHJlZGljdGlvbkZyb21TdHJ1Y3R1cmUobm9kZS5zdHJ1Y3R1cmUoKSkg
fCBTdHJvbmdQcmVkaWN0aW9uVGFnKTsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGlj
dGlvbihQcmVkaWN0T3RoZXIgfCBTdHJvbmdQcmVkaWN0aW9uVGFnKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRCeU9mZnNldDog
eworICAgICAgICAgICAgY2hhbmdlZCB8PSBub2RlLnByZWRpY3QobV91c2VzW21fY29tcGlsZUlu
ZGV4XSAmIH5QcmVkaWN0aW9uVGFnTWFzaywgU3Ryb25nUHJlZGljdGlvbik7CisgICAgICAgICAg
ICBpZiAoaXNTdHJvbmdQcmVkaWN0aW9uKG5vZGUuZ2V0UHJlZGljdGlvbigpKSkKKyAgICAgICAg
ICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24obm9kZS5nZXRQcmVkaWN0aW9uKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNl
IENoZWNrTWV0aG9kOiB7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlVXNlKG5vZGUuY2hp
bGQxKCksIFByZWRpY3RPYmplY3RVbmtub3duIHwgU3Ryb25nUHJlZGljdGlvblRhZyk7CiAgICAg
ICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24obV9ncmFwaC5nZXRNZXRob2RDaGVja1By
ZWRpY3Rpb24obm9kZSkpOwpAQCAtNTk1LDcgKzYxMyw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAg
Tm9kZUluZGV4IGdsb2JhbFZhckxvYWRFbGltaW5hdGlvbih1bnNpZ25lZCB2YXJOdW1iZXIpCiAg
ICAgewotICAgICAgICBOb2RlSW5kZXggc3RhcnQgPSBzdGFydEluZGV4KCk7CisgICAgICAgIE5v
ZGVJbmRleCBzdGFydCA9IHN0YXJ0SW5kZXhGb3JDaGlsZHJlbigpOwogICAgICAgICBmb3IgKE5v
ZGVJbmRleCBpbmRleCA9IG1fY29tcGlsZUluZGV4OyBpbmRleC0tID4gc3RhcnQ7KSB7CiAgICAg
ICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07CiAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUub3ApIHsKQEAgLTY0MSw3ICs2NTksNyBAQCBwcml2YXRlOgogICAgIAogICAgIE5vZGVJ
bmRleCBnZXRNZXRob2RMb2FkRWxpbWluYXRpb24oY29uc3QgTWV0aG9kQ2hlY2tEYXRhJiBtZXRo
b2RDaGVja0RhdGEsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGVJbmRleCBjaGlsZDEp
CiAgICAgewotICAgICAgICBOb2RlSW5kZXggc3RhcnQgPSBzdGFydEluZGV4KCk7CisgICAgICAg
IE5vZGVJbmRleCBzdGFydCA9IHN0YXJ0SW5kZXhGb3JDaGlsZHJlbihjaGlsZDEpOwogICAgICAg
ICBmb3IgKE5vZGVJbmRleCBpbmRleCA9IG1fY29tcGlsZUluZGV4OyBpbmRleC0tID4gc3RhcnQ7
KSB7CiAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07CiAgICAgICAgICAg
ICBpZiAobm9kZS5vcCA9PSBDaGVja01ldGhvZApAQCAtNjU1LDYgKzY3MywzNiBAQCBwcml2YXRl
OgogICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgIH0KICAgICAKKyAgICBOb2RlSW5kZXggY2hl
Y2tTdHJ1Y3R1cmVMb2FkRWxpbWluYXRpb24oU3RydWN0dXJlKiwgTm9kZUluZGV4IGNoaWxkMSkK
KyAgICB7CisgICAgICAgIE5vZGVJbmRleCBzdGFydCA9IHN0YXJ0SW5kZXhGb3JDaGlsZHJlbihj
aGlsZDEpOworICAgICAgICBmb3IgKE5vZGVJbmRleCBpbmRleCA9IG1fY29tcGlsZUluZGV4OyBp
bmRleC0tID4gc3RhcnQ7KSB7CisgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRl
eF07CisgICAgICAgICAgICBpZiAobm9kZS5vcCA9PSBDaGVja1N0cnVjdHVyZQorICAgICAgICAg
ICAgICAgICYmIG5vZGUuY2hpbGQxKCkgPT0gY2hpbGQxCisgICAgICAgICAgICAgICAgJiYgbm9k
ZS5zdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4
OworICAgICAgICAgICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgfQorICAgIAor
ICAgIE5vZGVJbmRleCBnZXRCeU9mZnNldExvYWRFbGltaW5hdGlvbih1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyLCBOb2RlSW5kZXggY2hpbGQxKQorICAgIHsKKyAgICAgICAgTm9kZUluZGV4IHN0
YXJ0ID0gc3RhcnRJbmRleEZvckNoaWxkcmVuKGNoaWxkMSk7CisgICAgICAgIGZvciAoTm9kZUlu
ZGV4IGluZGV4ID0gbV9jb21waWxlSW5kZXg7IGluZGV4LS0gPiBzdGFydDspIHsKKyAgICAgICAg
ICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKKyAgICAgICAgICAgIGlmIChub2RlLm9w
ID09IEdldEJ5T2Zmc2V0CisgICAgICAgICAgICAgICAgJiYgbm9kZS5jaGlsZDEoKSA9PSBjaGls
ZDEKKyAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5z
dG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmllck51
bWJlcikKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICBpZiAoY2xv
YmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBwZXJmb3JtU3Vic3Rp
dHV0aW9uKE5vZGVJbmRleCYgY2hpbGQpCiAgICAgewogICAgICAgICAvLyBDaGVjayBpZiB0aGlz
IG9wZXJhbmQgaXMgYWN0dWFsbHkgdW51c2VkLgpAQCAtNzc3LDYgKzgyNSwxNCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0TWV0aG9kTG9hZEVsaW1pbmF0aW9uKG1f
Z3JhcGgubV9tZXRob2RDaGVja0RhdGFbbm9kZS5tZXRob2RDaGVja0RhdGFJbmRleCgpXSwgbm9k
ZS5pZGVudGlmaWVyTnVtYmVyKCksIG5vZGUuY2hpbGQxKCkpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgICAg
ICBzZXRSZXBsYWNlbWVudChjaGVja1N0cnVjdHVyZUxvYWRFbGltaW5hdGlvbihub2RlLnN0cnVj
dHVyZSgpLCBub2RlLmNoaWxkMSgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgorICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQo
Z2V0QnlPZmZzZXRMb2FkRWxpbWluYXRpb24obV9ncmFwaFtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRh
SW5kZXgoKV0uaWRlbnRpZmllck51bWJlciwgbm9kZS5jaGlsZDEoKSkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIC8vIGRv
IG5vdGhpbmcuCiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5NTM4OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzkyLDYgKzEzOTIsMzYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5k
ZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
KworICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzLCBiYXNlKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpO
b3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVP
ZmZzZXQoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG5vZGUuc3RydWN0dXJlKCkpKSk7
CisgICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgCisgICAgICAgIHN0b3JhZ2VSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRl
eCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBHZXRCeU9mZnNl
dDogeworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIGJhc2UpOworICAgICAgICAKKyAg
ICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAKKyAgICAgICAgU3RvcmFnZUFjY2Vz
c0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0gbV9qaXQuZ3JhcGgoKS5tX3N0b3JhZ2VBY2Nlc3NE
YXRhW25vZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXTsKKyAgICAgICAgCisgICAgICAgIG1f
aml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgc3RvcmFnZUFjY2Vz
c0RhdGEub2Zmc2V0KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIH0KICAg
ICAgICAgCiAgICAgY2FzZSBHZXRNZXRob2Q6IHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvU3RkTGliRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9TdGRMaWJFeHRyYXMuaAkocmV2aXNpb24gOTUzODgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL1N0ZExpYkV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNiArMTAyLDE0
IEBAIGlubGluZSBUTyBiaXR3aXNlX2Nhc3QoRlJPTSBmcm9tKQogICAgIHJldHVybiB1LnRvOwog
fQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUbywgdHlwZW5hbWUgRnJvbT4KK2lubGluZSBUbyBzYWZl
Q2FzdChGcm9tIHZhbHVlKQoreworICAgIFRvIHJlc3VsdCA9IHN0YXRpY19jYXN0PFRvPih2YWx1
ZSk7CisgICAgQVNTRVJUKHJlc3VsdCA9PSB2YWx1ZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KwogLy8gUmV0dXJucyBhIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgYml0cyBzZXQgaW4gJ2JpdHMn
LgogaW5saW5lIHNpemVfdCBiaXRDb3VudCh1bnNpZ25lZCBiaXRzKQogewpAQCAtMjA5LDUgKzIx
Nyw2IEBAIGlubGluZSBBcnJheUVsZW1lbnRUeXBlKiBnZW5lcmljQmluYXJ5U2UKIAogdXNpbmcg
V1RGOjpiaW5hcnlTZWFyY2g7CiB1c2luZyBXVEY6OmJpdHdpc2VfY2FzdDsKK3VzaW5nIFdURjo6
c2FmZUNhc3Q7CiAKICNlbmRpZiAvLyBXVEZfU3RkTGliRXh0cmFzX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107791</attachid>
            <date>2011-09-18 12:54:54 -0700</date>
            <delta_ts>2011-09-18 14:28:49 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>getbyoffset_patch_3.diff</filename>
            <type>text/plain</type>
            <size>32404</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTUzOTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjggQEAK
KzIwMTEtMDktMTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIGRvZXMgbm90IHNwZWN1bGF0ZSBhZ2dyZXNzaXZlbHkgZW5vdWdoIG9uIEdldEJ5SWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MzIwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBX
T1JLIElOIFBST0dSRVNTLiAgQWxsIG9mIHRoZSBjb2RlIGlzIHdyaXR0ZW4gYnV0IGl0J3MgdG90
YWxseSB1bnRlc3RlZC4KKworICAgICAgICAqIGJ5dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3BwOgor
ICAgICAgICAoSlNDOjpwcmVkaWN0aW9uRnJvbUNsYXNzSW5mbyk6CisgICAgICAgIChKU0M6OnBy
ZWRpY3Rpb25Gcm9tU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6cHJlZGljdGlvbkZyb21DZWxs
KToKKyAgICAgICAgKiBieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmg6CisgICAgICAgICogZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0dlbmVyYXRpb25JbmZvLmg6CisgICAgICAg
IChKU0M6OkRGRzo6ZGF0YUZvcm1hdFRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpuZWVk
RGF0YUZvcm1hdENvbnZlcnNpb24pOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyYXRpb25JbmZv
Ojppbml0U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlvbkluZm86OnNwaWxs
KToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6ZmlsbFN0b3JhZ2UpOgorICAg
ICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpwcmVkaWN0
KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6Z2V0UHJlZGljdGlvbik6CisgICAgICAgICog
ZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVH
ZW5lcmF0b3I6OmZpbGxJbnRlZ2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJh
dG9yOjpmaWxsRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpm
aWxsSlNWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6ZmlsbFN0
b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkdQUlRlbXBvcmFyeTo6R1BSVGVtcG9yYXJ5KToK
KyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpERkc6
OkpJVENvZGVHZW5lcmF0b3I6OnNpbGVudFNwaWxsR1BSKToKKyAgICAgICAgKEpTQzo6REZHOjpK
SVRDb2RlR2VuZXJhdG9yOjpzaWxlbnRGaWxsR1BSKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRD
b2RlR2VuZXJhdG9yOjpzcGlsbCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRv
cjo6c3RvcmFnZVJlc3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6OlN0
b3JhZ2VPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6flN0b3Jh
Z2VPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6aW5kZXgpOgor
ICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpE
Rkc6OlN0b3JhZ2VPcGVyYW5kOjp1c2UpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6T3BJbmZvOjpPcEluZm8pOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
Ok5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1ByZWRpY3Rpb24pOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6Omhhc1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6c3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdG9yYWdlQWNjZXNz
RGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCk6
CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBy
b3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6
Omdsb2JhbFZhckxvYWRFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRv
cjo6Z2V0TWV0aG9kTG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdh
dG9yOjpjaGVja1N0cnVjdHVyZUxvYWRFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
UHJvcGFnYXRvcjo6Z2V0QnlPZmZzZXRMb2FkRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpE
Rkc6OlByb3BhZ2F0b3I6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3Bl
Y3VsYXRlSW50SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZUNlbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlQm9vbGVhbik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUpOgorICAgICAgICAqIHd0Zi9TdGRMaWJFeHRyYXMuaDoKKyAgICAgICAgKFdURjo6
c2FmZUNhc3QpOgorCiAyMDExLTA5LTE3ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+
CiAKICAgICAgICAgUmVtb3ZlIHNwZWNpYWwgY2FzZSBoYW5kbGluZyBvZiBpbmxpbmUgc3RvcmFn
ZSBmcm9tIHRoZSBKSVQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVk
aWN0ZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHJlZGljdGVkVHlwZS5jcHAJKHJldmlzaW9uIDk1Mzk3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Miwx
MCArODIsOCBAQCBjb25zdCBjaGFyKiBwcmVkaWN0aW9uVG9TdHJpbmcoUHJlZGljdGVkCiB9CiAj
ZW5kaWYKIAotUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uRnJvbUNlbGwoSlNDZWxsKiBjZWxsKQor
UHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uRnJvbUNsYXNzSW5mbyhjb25zdCBDbGFzc0luZm8qIGNs
YXNzSW5mbykKIHsKLSAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9IGNlbGwtPnN0cnVj
dHVyZSgpLT5jbGFzc0luZm8oKTsKLSAgICAKICAgICBpZiAoY2xhc3NJbmZvID09ICZKU0ZpbmFs
T2JqZWN0OjpzX2luZm8pCiAgICAgICAgIHJldHVybiBQcmVkaWN0RmluYWxPYmplY3Q7CiAgICAg
CkBAIC0xMDEsNiArOTksMTYgQEAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uRnJvbUNlbGwoSlND
ZWxsKgogICAgIHJldHVybiBQcmVkaWN0Q2VsbE90aGVyOwogfQogCitQcmVkaWN0ZWRUeXBlIHBy
ZWRpY3Rpb25Gcm9tU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIHJldHVy
biBwcmVkaWN0aW9uRnJvbUNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKTsKK30KKwor
UHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uRnJvbUNlbGwoSlNDZWxsKiBjZWxsKQoreworICAgIHJl
dHVybiBwcmVkaWN0aW9uRnJvbVN0cnVjdHVyZShjZWxsLT5zdHJ1Y3R1cmUoKSk7Cit9CisKIFBy
ZWRpY3RlZFR5cGUgcHJlZGljdGlvbkZyb21WYWx1ZShKU1ZhbHVlIHZhbHVlKQogewogICAgIGlm
ICh2YWx1ZS5pc0ludDMyKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHJlZGljdGVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QcmVkaWN0ZWRUeXBlLmgJKHJldmlzaW9uIDk1Mzk3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiAr
MzMsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgU3RydWN0dXJlOworCiB0eXBlZGVm
IHVpbnQxNl90IFByZWRpY3RlZFR5cGU7CiBzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVk
aWN0Tm9uZSAgICAgICAgICA9IDB4MDAwMDsgLy8gV2UgZG9uJ3Qga25vdyBhbnl0aGluZyB5ZXQu
CiBzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0RmluYWxPYmplY3QgICA9IDB4MDAw
MTsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNGaW5hbE9iamVjdC4KQEAgLTE1MCw2ICsxNTIsOCBA
QCBpbmxpbmUgUHJlZGljdGVkVHlwZSBtYWtlUHJlZGljdGlvbihQcmVkCiAgICAgcmV0dXJuIHR5
cGUgfCAoc291cmNlID09IFN0cm9uZ1ByZWRpY3Rpb24gPyBTdHJvbmdQcmVkaWN0aW9uVGFnIDog
MCk7CiB9CiAKK1ByZWRpY3RlZFR5cGUgcHJlZGljdGlvbkZyb21DbGFzc0luZm8oY29uc3QgQ2xh
c3NJbmZvKiBjbGFzc0luZm8pOworUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uRnJvbVN0cnVjdHVy
ZShTdHJ1Y3R1cmUqKTsKIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbkZyb21DZWxsKEpTQ2VsbCop
OwogUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uRnJvbVZhbHVlKEpTVmFsdWUpOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2
aXNpb24gOTUzOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwMyw5ICsxMDAzLDI2IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBjYXNlIG9wX2dldF9ieV9p
ZDogewogICAgICAgICAgICAgTm9kZUluZGV4IGJhc2UgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyID0gY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZp
ZXJOdW1iZXIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgICAgICAgICAg
CisgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBtX3Byb2ZpbGVkQmxv
Y2stPmdldFN0dWJJbmZvKG1fY3VycmVudEluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgTm9kZUluZGV4IGdldEJ5SWQ7CisgICAgICAgICAgICBpZiAoc3R1YkluZm8uc2VlbiAmJiBz
dHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZikgeworICAgICAgICAg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNl
T2JqZWN0U3RydWN0dXJlLmdldCgpOworICAgICAgICAgICAgICAgIElkZW50aWZpZXIgaWRlbnRp
ZmllciA9IG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGlkZW50aWZpZXJOdW1iZXIpOworICAgICAg
ICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCgqbV9nbG9iYWxEYXRhLCBp
ZGVudGlmaWVyKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQob2Zmc2V0ICE9IG5vdEZvdW5kKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBnZXRCeUlkID0gYWRkVG9HcmFwaChH
ZXRCeU9mZnNldCwgT3BJbmZvKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5zaXplKCkpLCBP
cEluZm8oUHJlZGljdE5vbmUpLCBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8oc3Ry
dWN0dXJlKSwgYmFzZSkpOworCisgICAgICAgICAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgc3Rv
cmFnZUFjY2Vzc0RhdGE7CisgICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0
ID0gb2Zmc2V0OworICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRhLmlkZW50aWZpZXJO
dW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOworICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9zdG9y
YWdlQWNjZXNzRGF0YS5hcHBlbmQoc3RvcmFnZUFjY2Vzc0RhdGEpOworICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgZ2V0QnlJZCA9IGFkZFRvR3JhcGgoR2V0QnlJZCwgT3BJbmZv
KGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8oUHJlZGljdE5vbmUpLCBiYXNlKTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgTm9kZUluZGV4IGdldEJ5SWQgPSBhZGRUb0dyYXBoKEdldEJ5SWQs
IE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKFByZWRpY3ROb25lKSwgYmFzZSk7CiAgICAgICAg
ICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0QnlJZCk7CiAgICAg
ICAgICAgICBzdHJvbmdseVByZWRpY3QoZ2V0QnlJZCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHJldmlzaW9uIDk1Mzk3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NCw2ICs0NCw3IEBAIGVudW0gRGF0YUZvcm1hdCB7CiAgICAgRGF0YUZvcm1hdERv
dWJsZSA9IDIsCiAgICAgRGF0YUZvcm1hdEJvb2xlYW4gPSAzLAogICAgIERhdGFGb3JtYXRDZWxs
ID0gNCwKKyAgICBEYXRhRm9ybWF0U3RvcmFnZSA9IDUsCiAgICAgRGF0YUZvcm1hdEpTID0gOCwK
ICAgICBEYXRhRm9ybWF0SlNJbnRlZ2VyID0gRGF0YUZvcm1hdEpTIHwgRGF0YUZvcm1hdEludGVn
ZXIsCiAgICAgRGF0YUZvcm1hdEpTRG91YmxlID0gRGF0YUZvcm1hdEpTIHwgRGF0YUZvcm1hdERv
dWJsZSwKQEAgLTY1LDYgKzY2LDggQEAgaW5saW5lIGNvbnN0IGNoYXIqIGRhdGFGb3JtYXRUb1N0
cmluZyhEYQogICAgICAgICByZXR1cm4gIkNlbGwiOwogICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xl
YW46CiAgICAgICAgIHJldHVybiAiQm9vbGVhbiI7CisgICAgY2FzZSBEYXRhRm9ybWF0U3RvcmFn
ZToKKyAgICAgICAgcmV0dXJuICJTdG9yYWdlIjsKICAgICBjYXNlIERhdGFGb3JtYXRKUzoKICAg
ICAgICAgcmV0dXJuICJKUyI7CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNJbnRlZ2VyOgpAQCAtMTEw
LDYgKzExMyw5IEBAIGlubGluZSBib29sIG5lZWREYXRhRm9ybWF0Q29udmVyc2lvbihEYXQKICAg
ICAgICAgICAgIC8vIFRoaXMgY2FwdHVyZXMgRGF0YUZvcm1hdEJvb2xlYW4sIHdoaWNoIGlzIGN1
cnJlbnRseSB1bnVzZWQuCiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgfQorICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6CisgICAgICAgIEFTU0VSVCh0byA9PSBE
YXRhRm9ybWF0U3RvcmFnZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBkZWZhdWx0Ogog
ICAgICAgICAvLyBUaGlzIGNhcHR1cmVzIERhdGFGb3JtYXRCb29sZWFuLCB3aGljaCBpcyBjdXJy
ZW50bHkgdW51c2VkLgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIwOSw2ICsy
MTUsMTUgQEAgcHVibGljOgogICAgICAgICBtX2NhbkZpbGwgPSBmYWxzZTsKICAgICAgICAgdS5m
cHIgPSBmcHI7CiAgICAgfQorICAgIHZvaWQgaW5pdFN0b3JhZ2UoTm9kZUluZGV4IG5vZGVJbmRl
eCwgdWludDMyX3QgdXNlQ291bnQsIEdQUlJlZyBncHIpCisgICAgeworICAgICAgICBtX25vZGVJ
bmRleCA9IG5vZGVJbmRleDsKKyAgICAgICAgbV91c2VDb3VudCA9IHVzZUNvdW50OworICAgICAg
ICBtX3JlZ2lzdGVyRm9ybWF0ID0gRGF0YUZvcm1hdFN0b3JhZ2U7CisgICAgICAgIG1fc3BpbGxG
b3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKKyAgICAgICAgbV9jYW5GaWxsID0gZmFsc2U7CisgICAg
ICAgIHUuZ3ByID0gZ3ByOworICAgIH0KIAogICAgIC8vIEdldCB0aGUgaW5kZXggb2YgdGhlIG5v
ZGUgdGhhdCBwcm9kdWNlZCB0aGlzIHZhbHVlLgogICAgIE5vZGVJbmRleCBub2RlSW5kZXgoKSB7
IHJldHVybiBtX25vZGVJbmRleDsgfQpAQCAtMjg4LDkgKzMwMywxMiBAQCBwdWJsaWM6CiAgICAg
ICAgIEFTU0VSVChtX3NwaWxsRm9ybWF0ID09IERhdGFGb3JtYXROb25lKTsKICAgICAgICAgLy8g
V2Ugc2hvdWxkIG9ubHkgYmUgc3BpbGxpbmcgdmFsdWVzIHRoYXQgYXJlIGN1cnJlbnRseSBpbiBt
YWNoaW5lIHJlZ2lzdGVycy4KICAgICAgICAgQVNTRVJUKG1fcmVnaXN0ZXJGb3JtYXQgIT0gRGF0
YUZvcm1hdE5vbmUpOwotICAgICAgICAvLyBXZSBvbmx5IHNwaWxsIHZhbHVlcyB0aGF0IGhhdmUg
YmVlbiBib3hlZCBhcyBhIEpTVmFsdWU7IG90aGVyd2lzZSB0aGUgR0MKLSAgICAgICAgLy8gd291
bGQgbmVlZCBhIHdheSB0byBkaXN0aW5ndWlzaCBjZWxsIHBvaW50ZXJzIGZyb20gbnVtZXJpYyBw
cmltaXRpdmVzLgotICAgICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOwor
ICAgICAgICAvLyBXZSBvbmx5IHNwaWxsIHZhbHVlcyB0aGF0IGhhdmUgYmVlbiBib3hlZCBhcyBh
IEpTVmFsdWUgYmVjYXVzZSBoaXN0b3JpY2FsbHkKKyAgICAgICAgLy8gd2UgYXNzdW1lZCB0aGF0
IHRoZSBHQyB3b3VsZCB3YW50IHRvIGJlIGFibGUgdG8gcHJlY2lzZWx5IGlkZW50aWZ5IGhlYXAK
KyAgICAgICAgLy8gcG9pbnRlcnMuIFRoaXMgaXMgbm90IHRydWUgYW55bW9yZSwgYnV0IHdlIHN0
aWxsIGFzc3VtZSwgaW4gdGhlIGZpbGwgY29kZSwKKyAgICAgICAgLy8gdGhhdCBhbnkgc3BpbGwg
c2xvdCBmb3IgYSBKUyB2YWx1ZSBpcyBib3hlZC4gRm9yIHN0b3JhZ2UgcG9pbnRlcnMsIHRoZXJl
IGlzCisgICAgICAgIC8vIG5vdGhpbmcgd2UgY2FuIGRvIHRvIGJveCB0aGVtLCBzbyB3ZSBhbGxv
dyB0aGF0IHRvIGJlIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgQVNTRVJUKChzcGlsbEZvcm1hdCAm
IERhdGFGb3JtYXRKUykgfHwgc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdFN0b3JhZ2UpOwogCiAg
ICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAgICAgICAgbV9zcGls
bEZvcm1hdCA9IHNwaWxsRm9ybWF0OwpAQCAtMzMwLDYgKzM0OCwxMSBAQCBwdWJsaWM6CiAgICAg
ICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0RG91YmxlOwogICAgICAgICB1LmZwciA9
IGZwcjsKICAgICB9CisgICAgdm9pZCBmaWxsU3RvcmFnZShHUFJSZWcgZ3ByKQorICAgIHsKKyAg
ICAgICAgbV9yZWdpc3RlckZvcm1hdCA9IERhdGFGb3JtYXRTdG9yYWdlOworICAgICAgICB1Lmdw
ciA9IGdwcjsKKyAgICB9CiAKICAgICBib29sIGFsaXZlKCkKICAgICB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiA5NTM5NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsMTkg
QEAgc3RydWN0IE1ldGhvZENoZWNrRGF0YSB7CiAgICAgfQogfTsKIAorc3RydWN0IFN0b3JhZ2VB
Y2Nlc3NEYXRhIHsKKyAgICBzaXplX3Qgb2Zmc2V0OworICAgIHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXI7CisgICAgCisgICAgLy8gTk9URTogdGhlIG9mZnNldCBhbmQgaWRlbnRpZmllck51bWJl
ciBkbyBub3QgYnkgdGhlbXNlbHZlcworICAgIC8vIHVuaXF1ZWx5IGlkZW50aWZ5IGEgcHJvcGVy
dHkuIFRoZSBpZGVudGlmaWVyTnVtYmVyIGFuZCBhCisgICAgLy8gU3RydWN0dXJlKiBkby4gSWYg
dGhvc2UgdHdvIG1hdGNoLCB0aGVuIHRoZSBvZmZzZXQgc2hvdWxkCisgICAgLy8gYmUgdGhlIHNh
bWUsIGFzIHdlbGwuIEZvciBhbnkgTm9kZSB0aGF0IGhhcyBhIFN0b3JhZ2VBY2Nlc3NEYXRhLAor
ICAgIC8vIGl0IGlzIHBvc3NpYmxlIHRvIHJldHJpZXZlIHRoZSBTdHJ1Y3R1cmUqIGJ5IGxvb2tp
bmcgYXQgdGhlCisgICAgLy8gZmlyc3QgY2hpbGQuIEl0IHNob3VsZCBiZSBhIENoZWNrU3RydWN0
dXJlLCB3aGljaCBoYXMgdGhlCisgICAgLy8gU3RydWN0dXJlKi4KK307CisKIHR5cGVkZWYgVmVj
dG9yIDxCbG9ja0luZGV4LCAyPiBQcmVkZWNlc3Nvckxpc3Q7CiAKIHN0cnVjdCBCYXNpY0Jsb2Nr
IHsKQEAgLTE4Miw2ICsxOTUsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CiAg
ICAgICAgIGNhc2UgQ2FsbDoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgICAgIGNhc2Ug
R2V0QnlPZmZzZXQ6CiAgICAgICAgICAgICByZXR1cm4gbm9kZS5wcmVkaWN0KHByZWRpY3Rpb24s
IHNvdXJjZSk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0yMjMsNiArMjM3LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAg
ICBjYXNlIENhbGw6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OgorICAgICAgICBjYXNlIEdldEJ5
T2Zmc2V0OgogICAgICAgICAgICAgcmV0dXJuIG5vZGVQdHItPmdldFByZWRpY3Rpb24oKTsKICAg
ICAgICAgY2FzZSBDaGVja01ldGhvZDoKICAgICAgICAgICAgIHJldHVybiBnZXRNZXRob2RDaGVj
a1ByZWRpY3Rpb24oKm5vZGVQdHIpOwpAQCAtMjk5LDYgKzMxNCw3IEBAIHB1YmxpYzoKICAgICBW
ZWN0b3I8IE93blB0cjxCYXNpY0Jsb2NrPiAsIDg+IG1fYmxvY2tzOwogICAgIFZlY3RvcjxOb2Rl
SW5kZXgsIDE2PiBtX3ZhckFyZ0NoaWxkcmVuOwogICAgIFZlY3RvcjxNZXRob2RDaGVja0RhdGE+
IG1fbWV0aG9kQ2hlY2tEYXRhOworICAgIFZlY3RvcjxTdG9yYWdlQWNjZXNzRGF0YT4gbV9zdG9y
YWdlQWNjZXNzRGF0YTsKICAgICB1bnNpZ25lZCBtX3ByZXNlcnZlZFZhcnM7CiAgICAgdW5zaWdu
ZWQgbV9wYXJhbWV0ZXJTbG90czsKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDk1Mzk3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTEsNiArOTEsNyBAQCBHUFJSZWcgSklUQ29kZUdlbmVyYXRvcjo6Zmls
bEludGVnZXIoTm9kCiAgICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgogICAgIGNhc2UgRGF0YUZv
cm1hdEJvb2xlYW46CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOgorICAgIGNhc2UgRGF0
YUZvcm1hdFN0b3JhZ2U6CiAgICAgICAgIC8vIFNob3VsZCBvbmx5IGJlIGNhbGxpbmcgdGhpcyBm
dW5jdGlvbiBpZiB3ZSBrbm93IHRoaXMgb3BlcmFuZCB0byBiZSBpbnRlZ2VyLgogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIApAQCAtMTY2LDYgKzE2Nyw3IEBAIEZQUlJlZyBKSVRDb2Rl
R2VuZXJhdG9yOjpmaWxsRG91YmxlKE5vZGUKICAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6CiAg
ICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjoKICAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46
CisgICAgY2FzZSBEYXRhRm9ybWF0U3RvcmFnZToKICAgICAgICAgLy8gU2hvdWxkIG9ubHkgYmUg
Y2FsbGluZyB0aGlzIGZ1bmN0aW9uIGlmIHdlIGtub3cgdGhpcyBvcGVyYW5kIHRvIGJlIG51bWVy
aWMuCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCkBAIC0zMTYsNiArMzE4LDcgQEAg
R1BSUmVnIEpJVENvZGVHZW5lcmF0b3I6OmZpbGxKU1ZhbHVlKE5vZAogICAgIH0KICAgICAgICAg
CiAgICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjoKKyAgICBjYXNlIERhdGFGb3JtYXRTdG9yYWdl
OgogICAgICAgICAvLyB0aGlzIHR5cGUgY3VycmVudGx5IG5ldmVyIG9jY3VycwogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0zMjQsNiArMzI3LDM1IEBAIEdQUlJlZyBK
SVRDb2RlR2VuZXJhdG9yOjpmaWxsSlNWYWx1ZShOb2QKICAgICByZXR1cm4gSW52YWxpZEdQUlJl
ZzsKIH0KIAorR1BSUmVnIEpJVENvZGVHZW5lcmF0b3I6OmZpbGxTdG9yYWdlKE5vZGVJbmRleCBu
b2RlSW5kZXgpCit7CisgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVnaXN0
ZXIoKTsKKyAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVh
bFJlZ2lzdGVyXTsKKyAgICAKKyAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewor
ICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6IHsKKyAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRl
KCk7CisgICAgICAgIEFTU0VSVChpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdFN0b3Jh
Z2UpOworICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9y
ZGVyU3BpbGxlZCk7CisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKKyAgICAgICAgaW5mby5maWxsU3RvcmFnZShncHIp
OworICAgICAgICByZXR1cm4gZ3ByOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBEYXRhRm9y
bWF0U3RvcmFnZTogeworICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKKyAgICAgICAg
bV9ncHJzLmxvY2soZ3ByKTsKKyAgICAgICAgcmV0dXJuIGdwcjsKKyAgICB9CisgICAgICAgIAor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAK
KyAgICByZXR1cm4gSW52YWxpZEdQUlJlZzsKK30KKwogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjp1
c2VDaGlsZHJlbihOb2RlJiBub2RlKQogewogICAgIGlmIChub2RlLm9wICYgTm9kZUhhc1ZhckFy
Z3MpIHsKQEAgLTEwNzgsMTQgKzExMTAsNiBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNw
ZWN1bGF0aXZlSW5zCiAgICAganNWYWx1ZVJlc3VsdChzY3JhdGNoUmVnLCBtX2NvbXBpbGVJbmRl
eCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUg
VG8sIHR5cGVuYW1lIEZyb20+Ci1pbmxpbmUgVG8gc2FmZUNhc3QoRnJvbSB2YWx1ZSkKLXsKLSAg
ICBUbyByZXN1bHQgPSBzdGF0aWNfY2FzdDxUbz4odmFsdWUpOwotICAgIEFTU0VSVChyZXN1bHQg
PT0gdmFsdWUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIEpJVENvbXBpbGVyOjpDYWxsIEpJ
VENvZGVHZW5lcmF0b3I6OmNhY2hlZEdldEJ5SWQoR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyByZXN1
bHRHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBKSVRD
b21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCwgTm9kZVR5cGUgbm9kZVR5cGUpCiB7CiAgICAg
SklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7CkBAIC0yMDQxLDYg
KzIwNjUsMTYgQEAgR1BSVGVtcG9yYXJ5OjpHUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYQogICAg
ICAgICBtX2dwciA9IG1faml0LT5hbGxvY2F0ZSgpOwogfQogCitHUFJUZW1wb3Jhcnk6OkdQUlRl
bXBvcmFyeShKSVRDb2RlR2VuZXJhdG9yKiBqaXQsIFN0b3JhZ2VPcGVyYW5kJiBvcDEpCisgICAg
OiBtX2ppdChqaXQpCisgICAgLCBtX2dwcihJbnZhbGlkR1BSUmVnKQoreworICAgIGlmIChtX2pp
dC0+Y2FuUmV1c2Uob3AxLmluZGV4KCkpKQorICAgICAgICBtX2dwciA9IG1faml0LT5yZXVzZShv
cDEuZ3ByKCkpOworICAgIGVsc2UKKyAgICAgICAgbV9ncHIgPSBtX2ppdC0+YWxsb2NhdGUoKTsK
K30KKwogRlBSVGVtcG9yYXJ5OjpGUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvciogaml0KQog
ICAgIDogbV9qaXQoaml0KQogICAgICwgbV9mcHIoSW52YWxpZEZQUlJlZykKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCShyZXZpc2lv
biA5NTM5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2Myw3IEBAIHByb3RlY3RlZDoKICAgICAgICAg
U3BpbGxPcmRlclNwaWxsZWQgPSAyLCAgLy8gbm8gc3BpbGwKICAgICAgICAgU3BpbGxPcmRlckpT
ID0gNCwgICAgICAgLy8gbmVlZHMgc3BpbGwKICAgICAgICAgU3BpbGxPcmRlckNlbGwgPSA0LCAg
ICAgLy8gbmVlZHMgc3BpbGwKKyAgICAgICAgU3BpbGxPcmRlclN0b3JhZ2UgPSA0LCAgLy8gbmVl
ZHMgc3BpbGwKICAgICAgICAgU3BpbGxPcmRlckludGVnZXIgPSA1LCAgLy8gbmVlZHMgc3BpbGwg
YW5kIGJveAogICAgICAgICBTcGlsbE9yZGVyRG91YmxlID0gNiwgICAvLyBuZWVkcyBzcGlsbCBh
bmQgY29udmVydAogICAgIH07CkBAIC03NCw2ICs3NSw3IEBAIHB1YmxpYzoKICAgICBHUFJSZWcg
ZmlsbEludGVnZXIoTm9kZUluZGV4LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpOwogICAgIEZQ
UlJlZyBmaWxsRG91YmxlKE5vZGVJbmRleCk7CiAgICAgR1BSUmVnIGZpbGxKU1ZhbHVlKE5vZGVJ
bmRleCk7CisgICAgR1BSUmVnIGZpbGxTdG9yYWdlKE5vZGVJbmRleCk7CiAKICAgICAvLyBsb2Nr
IGFuZCB1bmxvY2sgR1BSICYgRlBSIHJlZ2lzdGVycy4KICAgICB2b2lkIGxvY2soR1BSUmVnIHJl
ZykKQEAgLTIyMiwxMCArMjI0LDEwIEBAIHByb3RlY3RlZDoKIAogICAgICAgICBEYXRhRm9ybWF0
IHJlZ2lzdGVyRm9ybWF0ID0gaW5mby5yZWdpc3RlckZvcm1hdCgpOwogCi0gICAgICAgIGlmIChy
ZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikgeworICAgICAgICBpZiAocmVnaXN0
ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpCiAgICAgICAgICAgICBtX2ppdC5zdG9yZTMy
KGluZm8uZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCAmIERhdGFGb3JtYXRK
UyB8fCByZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0Q2VsbCk7CisgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ICYgRGF0YUZvcm1hdEpTIHx8IHJlZ2lz
dGVyRm9ybWF0ID09IERhdGFGb3JtYXRDZWxsIHx8IHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3Jt
YXRTdG9yYWdlKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGluZm8uZ3ByKCksIEpJVENv
bXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI3Myw3
ICsyNzUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkpCiAg
ICAgICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlT2ZKU0NvbnN0YW50QXNJbW1QdHIobm9kZUluZGV4
KSwgaW5mby5ncHIoKSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKHJlZ2lz
dGVyRm9ybWF0ICYgRGF0YUZvcm1hdEpTIHx8IHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRD
ZWxsKTsKKyAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCAmIERhdGFGb3JtYXRKUyB8
fCByZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0Q2VsbCB8fCByZWdpc3RlckZvcm1hdCA9PSBE
YXRhRm9ybWF0U3RvcmFnZSk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVy
OjphZGRyZXNzRm9yKHNwaWxsTWUpLCBpbmZvLmdwcigpKTsKICAgICAgICAgfQogICAgIH0KQEAg
LTM4NSw3ICszODcsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIH0KIAogICAgICAgICBEYXRhRm9y
bWF0IHNwaWxsRm9ybWF0ID0gaW5mby5yZWdpc3RlckZvcm1hdCgpOwotICAgICAgICBpZiAoc3Bp
bGxGb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJsZSkgeworICAgICAgICBzd2l0Y2ggKHNwaWxsRm9y
bWF0KSB7CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZTogewogICAgICAgICAgICAgLy8g
QWxsIHZhbHVlcyBhcmUgc3BpbGxlZCBhcyBKU1ZhbHVlcywgc28gYm94IHRoZSBkb3VibGUgdmlh
IGEgdGVtcG9yYXJ5IGdwci4KICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBib3hEb3VibGUoaW5m
by5mcHIoKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihncHIsIEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKHNwaWxsTWUpKTsKQEAgLTM5MywxOSArMzk2LDMwIEBAIHByb3RlY3RlZDoKICAg
ICAgICAgICAgIGluZm8uc3BpbGwoRGF0YUZvcm1hdEpTRG91YmxlKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRGF0YUZvcm1hdFN0
b3JhZ2U6IHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgc3BlY2lhbCwgc2luY2UgaXQncyBub3Qg
YSBKUyB2YWx1ZSAtIGFzIGluIGl0J3Mgbm90IHZpc2libGUgdG8gSlMKKyAgICAgICAgICAgIC8v
IGNvZGUuCisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihpbmZvLmdwcigpLCBKSVRDb21waWxl
cjo6YWRkcmVzc0ZvcihzcGlsbE1lKSk7CisgICAgICAgICAgICBpbmZvLnNwaWxsKERhdGFGb3Jt
YXRTdG9yYWdlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgICAgIC8v
IFRoZSBmb2xsb3dpbmcgY29kZSBoYW5kbGVzIEpTVmFsdWVzLCBpbnQzMnMsIGFuZCBjZWxscy4K
LSAgICAgICAgQVNTRVJUKHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyIHx8IHNwaWxs
Rm9ybWF0ID09IERhdGFGb3JtYXRDZWxsIHx8IHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsK
LQotICAgICAgICBHUFJSZWcgcmVnID0gaW5mby5ncHIoKTsKLSAgICAgICAgLy8gV2UgbmVlZCB0
byBib3ggaW50MzIgYW5kIGNlbGwgdmFsdWVzIC4uLgotICAgICAgICAvLyBidXQgb24gSlNWQUxV
RTY0IGJveGluZyBhIGNlbGwgaXMgYSBuby1vcCEKLSAgICAgICAgaWYgKHNwaWxsRm9ybWF0ID09
IERhdGFGb3JtYXRJbnRlZ2VyKQotICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyLCByZWcpOwotCi0gICAgICAgIC8vIFNwaWxsIHRoZSB2YWx1ZSwg
YW5kIHJlY29yZCBpdCBhcyBzcGlsbGVkIGluIGl0cyBib3hlZCBmb3JtLgotICAgICAgICBtX2pp
dC5zdG9yZVB0cihyZWcsIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKLSAgICAg
ICAgaW5mby5zcGlsbCgoRGF0YUZvcm1hdCkoc3BpbGxGb3JtYXQgfCBEYXRhRm9ybWF0SlMpKTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgY29kZSBoYW5k
bGVzIEpTVmFsdWVzLCBpbnQzMnMsIGFuZCBjZWxscy4KKyAgICAgICAgICAgIEFTU0VSVChzcGls
bEZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlciB8fCBzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0
Q2VsbCB8fCBzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIEdQUlJlZyByZWcgPSBpbmZvLmdwcigpOworICAgICAgICAgICAgLy8gV2UgbmVlZCB0
byBib3ggaW50MzIgYW5kIGNlbGwgdmFsdWVzIC4uLgorICAgICAgICAgICAgLy8gYnV0IG9uIEpT
VkFMVUU2NCBib3hpbmcgYSBjZWxsIGlzIGEgbm8tb3AhCisgICAgICAgICAgICBpZiAoc3BpbGxG
b3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpCisgICAgICAgICAgICAgICAgbV9qaXQub3JQdHIo
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWcpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBTcGlsbCB0aGUgdmFsdWUsIGFuZCByZWNvcmQgaXQgYXMgc3BpbGxlZCBpbiBp
dHMgYm94ZWQgZm9ybS4KKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHJlZywgSklUQ29tcGls
ZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOworICAgICAgICAgICAgaW5mby5zcGlsbCgoRGF0YUZv
cm1hdCkoc3BpbGxGb3JtYXQgfCBEYXRhRm9ybWF0SlMpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQogICAgIH0KICAgICAKICAgICBib29sIGlzU3RyaWN0SW50MzIoTm9kZUluZGV4
KTsKQEAgLTY5OSw2ICs3MTMsMTcgQEAgcHJvdGVjdGVkOgogICAgIHsKICAgICAgICAganNWYWx1
ZVJlc3VsdChyZWcsIG5vZGVJbmRleCwgRGF0YUZvcm1hdEpTLCBtb2RlKTsKICAgICB9CisgICAg
dm9pZCBzdG9yYWdlUmVzdWx0KEdQUlJlZyByZWcsIE5vZGVJbmRleCBub2RlSW5kZXgsIFVzZUNo
aWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVzZUNoaWxkcmVuKQorICAgIHsKKyAgICAgICAgTm9kZSYg
bm9kZSA9IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKKyAgICAgICAgaWYgKG1vZGUgPT0gQ2Fs
bFVzZUNoaWxkcmVuKQorICAgICAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7CisgICAgICAgIAor
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFsUmVn
aXN0ZXIoKTsKKyAgICAgICAgbV9ncHJzLnJldGFpbihyZWcsIHZpcnR1YWxSZWdpc3RlciwgU3Bp
bGxPcmRlclN0b3JhZ2UpOworICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJh
dGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKKyAgICAgICAgaW5mby5pbml0U3RvcmFnZShub2Rl
SW5kZXgsIG5vZGUucmVmQ291bnQoKSwgcmVnKTsKKyAgICB9CiAgICAgdm9pZCBkb3VibGVSZXN1
bHQoRlBSUmVnIHJlZywgTm9kZUluZGV4IG5vZGVJbmRleCwgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUg
PSBDYWxsVXNlQ2hpbGRyZW4pCiAgICAgewogICAgICAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3Jh
cGgoKVtub2RlSW5kZXhdOwpAQCAtMTE1OSw2ICsxMTg0LDQ3IEBAIHByaXZhdGU6CiAgICAgR1BS
UmVnIG1fZ3ByT3JJbnZhbGlkOwogfTsKIAorY2xhc3MgU3RvcmFnZU9wZXJhbmQgeworcHVibGlj
OgorICAgIGV4cGxpY2l0IFN0b3JhZ2VPcGVyYW5kKEpJVENvZGVHZW5lcmF0b3IqIGppdCwgTm9k
ZUluZGV4IGluZGV4KQorICAgICAgICA6IG1faml0KGppdCkKKyAgICAgICAgLCBtX2luZGV4KGlu
ZGV4KQorICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCisgICAgeworICAg
ICAgICBBU1NFUlQobV9qaXQpOworICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChpbmRleCkpCisg
ICAgICAgICAgICBncHIoKTsKKyAgICB9CisgICAgCisgICAgflN0b3JhZ2VPcGVyYW5kKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX2dwck9ySW52YWxpZCAhPSBJbnZhbGlkR1BSUmVnKTsKKyAg
ICAgICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CisgICAgfQorICAgIAorICAgIE5v
ZGVJbmRleCBpbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pbmRleDsKKyAg
ICB9CisgICAgCisgICAgR1BSUmVnIGdwcigpCisgICAgeworICAgICAgICBpZiAobV9ncHJPcklu
dmFsaWQgPT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9q
aXQtPmZpbGxTdG9yYWdlKGluZGV4KCkpOworICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7
CisgICAgfQorICAgIAorICAgIHZvaWQgdXNlKCkKKyAgICB7CisgICAgICAgIG1faml0LT51c2Uo
bV9pbmRleCk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBKSVRDb2RlR2VuZXJhdG9yKiBt
X2ppdDsKKyAgICBOb2RlSW5kZXggbV9pbmRleDsKKyAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7
Cit9OworCiAKIC8vID09PSBUZW1wb3JhcmllcyA9PT0KIC8vCkBAIC0xMTc4LDYgKzEyNDQsNyBA
QCBwdWJsaWM6CiAgICAgR1BSVGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3IqLCBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCYpOwogICAgIEdQUlRlbXBvcmFyeShKSVRDb2RlR2VuZXJhdG9yKiwgU3BlY3Vs
YXRlQm9vbGVhbk9wZXJhbmQmKTsKICAgICBHUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRvcios
IEpTVmFsdWVPcGVyYW5kJik7CisgICAgR1BSVGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3IqLCBT
dG9yYWdlT3BlcmFuZCYpOwogCiAgICAgfkdQUlRlbXBvcmFyeSgpCiAgICAgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDk1Mzk3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOSwxMCArMTE5
LDExIEBAIHByaXZhdGU6CiAjZGVmaW5lIE5vZGVNaWdodENsb2JiZXIgIDB4ODAwMDAwCiAKIC8v
IFRoZXNlIHZhbHVlcyByZWNvcmQgdGhlIHJlc3VsdCB0eXBlIG9mIHRoZSBub2RlIChhcyBjaGVj
a2VkIGJ5IE5vZGVSZXN1bHRNYXNrLCBhYm92ZSksIDAgZm9yIG5vIHJlc3VsdC4KLSNkZWZpbmUg
Tm9kZVJlc3VsdEpTICAgICAgMHgxMDAwCi0jZGVmaW5lIE5vZGVSZXN1bHROdW1iZXIgIDB4MjAw
MAotI2RlZmluZSBOb2RlUmVzdWx0SW50MzIgICAweDMwMDAKLSNkZWZpbmUgTm9kZVJlc3VsdEJv
b2xlYW4gMHg0MDAwCisjZGVmaW5lIE5vZGVSZXN1bHRKUyAgICAgICAgMHgxMDAwCisjZGVmaW5l
IE5vZGVSZXN1bHROdW1iZXIgICAgMHgyMDAwCisjZGVmaW5lIE5vZGVSZXN1bHRJbnQzMiAgICAg
MHgzMDAwCisjZGVmaW5lIE5vZGVSZXN1bHRCb29sZWFuICAgMHg0MDAwCisjZGVmaW5lIE5vZGVS
ZXN1bHRTdG9yYWdlICAgMHg1MDAwCiAKIC8vIFRoaXMgbWFjcm8gZGVmaW5lcyBhIHNldCBvZiBp
bmZvcm1hdGlvbiBhYm91dCBhbGwga25vd24gbm9kZSB0eXBlcywgdXNlZCB0byBwb3B1bGF0ZSBO
b2RlSWQsIE5vZGVUeXBlIGJlbG93LgogI2RlZmluZSBGT1JfRUFDSF9ERkdfT1AobWFjcm8pIFwK
QEAgLTE3NCw2ICsxNzUsOCBAQCBwcml2YXRlOgogICAgIG1hY3JvKEdldEJ5SWQsIE5vZGVSZXN1
bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIG1hY3Jv
KFB1dEJ5SWQsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIG1h
Y3JvKFB1dEJ5SWREaXJlY3QsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkg
XAorICAgIG1hY3JvKENoZWNrU3RydWN0dXJlLCBOb2RlUmVzdWx0U3RvcmFnZSB8IE5vZGVNdXN0
R2VuZXJhdGUpIFwKKyAgICBtYWNybyhHZXRCeU9mZnNldCwgTm9kZVJlc3VsdEpTKSBcCiAgICAg
bWFjcm8oR2V0TWV0aG9kLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAg
bWFjcm8oQ2hlY2tNZXRob2QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAg
ICBtYWNybyhHZXRHbG9iYWxWYXIsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwK
QEAgLTIyOCw4ICsyMzEsMTEgQEAgZW51bSBOb2RlVHlwZSB7CiAvLyBkaXN0aW5ndWlzaGVzIGFu
IGltbWVkaWF0ZSB2YWx1ZSAodHlwaWNhbGx5IGFuIGluZGV4IGludG8gYSBDb2RlQmxvY2sgZGF0
YSBzdHJ1Y3R1cmUgLSAKIC8vIGEgY29uc3RhbnQgaW5kZXgsIGFyZ3VtZW50LCBvciBpZGVudGlm
aWVyKSBmcm9tIGEgTm9kZUluZGV4Lgogc3RydWN0IE9wSW5mbyB7CisgICAgZXhwbGljaXQgT3BJ
bmZvKGludCB2YWx1ZSkgOiBtX3ZhbHVlKHZhbHVlKSB7fQogICAgIGV4cGxpY2l0IE9wSW5mbyh1
bnNpZ25lZCB2YWx1ZSkgOiBtX3ZhbHVlKHZhbHVlKSB7fQotICAgIHVuc2lnbmVkIG1fdmFsdWU7
CisgICAgZXhwbGljaXQgT3BJbmZvKHVpbnRwdHJfdCB2YWx1ZSkgOiBtX3ZhbHVlKHZhbHVlKSB7
fQorICAgIGV4cGxpY2l0IE9wSW5mbyh2b2lkKiB2YWx1ZSkgOiBtX3ZhbHVlKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90Pih2YWx1ZSkpIHt9CisgICAgdWludHB0cl90IG1fdmFsdWU7CiB9Owog
CiAvLyA9PT0gTm9kZSA9PT0KQEAgLTI3Miw3ICsyNzgsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAg
ICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKICAgICAgICAg
LCBtX3JlZkNvdW50KDApCiAgICAgICAgICwgbV9vcEluZm8oaW1tMS5tX3ZhbHVlKQotICAgICAg
ICAsIG1fb3BJbmZvMihpbW0yLm1fdmFsdWUpCisgICAgICAgICwgbV9vcEluZm8yKHNhZmVDYXN0
PHVuc2lnbmVkPihpbW0yLm1fdmFsdWUpKQogICAgIHsKICAgICAgICAgQVNTRVJUKCEob3AgJiBO
b2RlSGFzVmFyQXJncykpOwogICAgICAgICBjaGlsZHJlbi5maXhlZC5jaGlsZDEgPSBjaGlsZDE7
CkBAIC0yODcsNyArMjkzLDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICAsIG1fdmlydHVhbFJl
Z2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICwgbV9yZWZDb3VudCgwKQog
ICAgICAgICAsIG1fb3BJbmZvKGltbTEubV92YWx1ZSkKLSAgICAgICAgLCBtX29wSW5mbzIoaW1t
Mi5tX3ZhbHVlKQorICAgICAgICAsIG1fb3BJbmZvMihzYWZlQ2FzdDx1bnNpZ25lZD4oaW1tMi5t
X3ZhbHVlKSkKICAgICB7CiAgICAgICAgIEFTU0VSVChvcCAmIE5vZGVIYXNWYXJBcmdzKTsKICAg
ICAgICAgY2hpbGRyZW4udmFyaWFibGUuZmlyc3RDaGlsZCA9IGZpcnN0Q2hpbGQ7CkBAIC00NDcs
NiArNDUzLDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAg
ICBjYXNlIENhbGw6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OgorICAgICAgICBjYXNlIEdldEJ5
T2Zmc2V0OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00ODgsNiArNDk1LDI2IEBAIHN0cnVjdCBOb2RlIHsK
ICAgICAgICAgcmV0dXJuIG1fb3BJbmZvMjsKICAgICB9CiAgICAgCisgICAgYm9vbCBoYXNTdHJ1
Y3R1cmUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9wID09IENoZWNrU3RydWN0dXJlOworICAg
IH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpCisgICAgeworICAgICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxTdHJ1Y3R1cmUqPihtX29wSW5mbyk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgaGFzU3RvcmFnZUFjY2Vzc0RhdGEoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9w
ID09IEdldEJ5T2Zmc2V0OworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBzdG9yYWdlQWNjZXNz
RGF0YUluZGV4KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX29wSW5mbzsKKyAgICB9CisgICAg
CiAgICAgYm9vbCBoYXNWaXJ0dWFsUmVnaXN0ZXIoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1f
dmlydHVhbFJlZ2lzdGVyICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXI7CkBAIC01OTksOCArNjI2
LDEwIEBAIHByaXZhdGU6CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1fdmlydHVhbFJlZ2lzdGVyOwog
ICAgIC8vIFRoZSBudW1iZXIgb2YgdXNlcyBvZiB0aGUgcmVzdWx0IG9mIHRoaXMgb3BlcmF0aW9u
ICgrMSBmb3IgJ211c3QgZ2VuZXJhdGUnIG5vZGVzLCB3aGljaCBoYXZlIHNpZGUtZWZmZWN0cyku
CiAgICAgdW5zaWduZWQgbV9yZWZDb3VudDsKLSAgICAvLyBJbW1lZGlhdGUgdmFsdWVzLCBhY2Nl
c3NlcyB0eXBlLWNoZWNrZWQgdmlhIGFjY2Vzc29ycyBhYm92ZS4KLSAgICB1bnNpZ25lZCBtX29w
SW5mbywgbV9vcEluZm8yOworICAgIC8vIEltbWVkaWF0ZSB2YWx1ZXMsIGFjY2Vzc2VzIHR5cGUt
Y2hlY2tlZCB2aWEgYWNjZXNzb3JzIGFib3ZlLiBUaGUgZmlyc3Qgb25lIGlzCisgICAgLy8gYmln
IGVub3VnaCB0byBzdG9yZSBhIHBvaW50ZXIuCisgICAgdWludHB0cl90IG1fb3BJbmZvOworICAg
IHVuc2lnbmVkIG1fb3BJbmZvMjsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkocmV2aXNp
b24gOTUzOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNzIsNiArMjcyLDI0IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ2hlY2tTdHJ1
Y3R1cmU6IHsKKyAgICAgICAgICAgIC8vIFdlIGJhY2t3YXJkIHByb3BhZ2F0ZSB3aGF0IHRoaXMg
Q2hlY2tTdHJ1Y3R1cmUgdGVsbHMgdXMuIE1heWJlIHRoYXQncyB0aGUgcmlnaHQgd2F5CisgICAg
ICAgICAgICAvLyB0byBnbzsgbWF5YmUgaXQgaXNuJ3QuIEknbSBub3Qgc3VyZS4gV2hhdCB3ZSdk
IHJlYWxseSB3YW50IGlzIGZsb3ctc2Vuc2l0aXZlCisgICAgICAgICAgICAvLyBmb3J3YXJkIHBy
b3BhZ2F0aW9uIG9mIHdoYXQgd2UgbGVhcm4gZnJvbSBoYXZpbmcgZXhlY3V0ZWQgQ2hlY2tTdHJ1
Y3R1cmUuIEJ1dCBmb3IKKyAgICAgICAgICAgIC8vIG5vdyB3ZSBwcmVzZXJ2ZSB0aGUgZmxvdy1p
bnNlbnNpdGl2ZSBuYXR1cmUgb2YgdGhpcyBhbmFseXNpcywgYmVjYXVzZSBpdCdzIGNoZWFwIHRv
CisgICAgICAgICAgICAvLyBydW4gYW5kIHNlZW1zIHRvIHdvcmsgd2VsbCBlbm91Z2guCisgICAg
ICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlVXNlKG5vZGUuY2hpbGQxKCksIHByZWRpY3Rpb25Gcm9t
U3RydWN0dXJlKG5vZGUuc3RydWN0dXJlKCkpIHwgU3Ryb25nUHJlZGljdGlvblRhZyk7CisgICAg
ICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oUHJlZGljdE90aGVyIHwgU3Ryb25nUHJl
ZGljdGlvblRhZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbm9k
ZS5wcmVkaWN0KG1fdXNlc1ttX2NvbXBpbGVJbmRleF0gJiB+UHJlZGljdGlvblRhZ01hc2ssIFN0
cm9uZ1ByZWRpY3Rpb24pOworICAgICAgICAgICAgaWYgKGlzU3Ryb25nUHJlZGljdGlvbihub2Rl
LmdldFByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0
aW9uKG5vZGUuZ2V0UHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBDaGVja01ldGhvZDogewogICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtZXJnZVVzZShub2RlLmNoaWxkMSgpLCBQcmVkaWN0T2JqZWN0VW5rbm93biB8
IFN0cm9uZ1ByZWRpY3Rpb25UYWcpOwogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0
aW9uKG1fZ3JhcGguZ2V0TWV0aG9kQ2hlY2tQcmVkaWN0aW9uKG5vZGUpKTsKQEAgLTU5NSw3ICs2
MTMsNyBAQCBwcml2YXRlOgogICAgIAogICAgIE5vZGVJbmRleCBnbG9iYWxWYXJMb2FkRWxpbWlu
YXRpb24odW5zaWduZWQgdmFyTnVtYmVyKQogICAgIHsKLSAgICAgICAgTm9kZUluZGV4IHN0YXJ0
ID0gc3RhcnRJbmRleCgpOworICAgICAgICBOb2RlSW5kZXggc3RhcnQgPSBzdGFydEluZGV4Rm9y
Q2hpbGRyZW4oKTsKICAgICAgICAgZm9yIChOb2RlSW5kZXggaW5kZXggPSBtX2NvbXBpbGVJbmRl
eDsgaW5kZXgtLSA+IHN0YXJ0OykgewogICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhb
aW5kZXhdOwogICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CkBAIC02NDEsNyArNjU5LDcg
QEAgcHJpdmF0ZToKICAgICAKICAgICBOb2RlSW5kZXggZ2V0TWV0aG9kTG9hZEVsaW1pbmF0aW9u
KGNvbnN0IE1ldGhvZENoZWNrRGF0YSYgbWV0aG9kQ2hlY2tEYXRhLCB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyLCBOb2RlSW5kZXggY2hpbGQxKQogICAgIHsKLSAgICAgICAgTm9kZUluZGV4IHN0
YXJ0ID0gc3RhcnRJbmRleCgpOworICAgICAgICBOb2RlSW5kZXggc3RhcnQgPSBzdGFydEluZGV4
Rm9yQ2hpbGRyZW4oY2hpbGQxKTsKICAgICAgICAgZm9yIChOb2RlSW5kZXggaW5kZXggPSBtX2Nv
bXBpbGVJbmRleDsgaW5kZXgtLSA+IHN0YXJ0OykgewogICAgICAgICAgICAgTm9kZSYgbm9kZSA9
IG1fZ3JhcGhbaW5kZXhdOwogICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gQ2hlY2tNZXRob2QK
QEAgLTY1NSw2ICs2NzMsMzYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIE5vTm9kZTsKICAg
ICB9CiAgICAgCisgICAgTm9kZUluZGV4IGNoZWNrU3RydWN0dXJlTG9hZEVsaW1pbmF0aW9uKFN0
cnVjdHVyZSogc3RydWN0dXJlLCBOb2RlSW5kZXggY2hpbGQxKQorICAgIHsKKyAgICAgICAgTm9k
ZUluZGV4IHN0YXJ0ID0gc3RhcnRJbmRleEZvckNoaWxkcmVuKGNoaWxkMSk7CisgICAgICAgIGZv
ciAoTm9kZUluZGV4IGluZGV4ID0gbV9jb21waWxlSW5kZXg7IGluZGV4LS0gPiBzdGFydDspIHsK
KyAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKKyAgICAgICAgICAgIGlm
IChub2RlLm9wID09IENoZWNrU3RydWN0dXJlCisgICAgICAgICAgICAgICAgJiYgbm9kZS5jaGls
ZDEoKSA9PSBjaGlsZDEKKyAgICAgICAgICAgICAgICAmJiBub2RlLnN0cnVjdHVyZSgpID09IHN0
cnVjdHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICBpZiAo
Y2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICB9CisgICAgCisgICAgTm9kZUluZGV4IGdldEJ5
T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGVJbmRl
eCBjaGlsZDEpCisgICAgeworICAgICAgICBOb2RlSW5kZXggc3RhcnQgPSBzdGFydEluZGV4Rm9y
Q2hpbGRyZW4oY2hpbGQxKTsKKyAgICAgICAgZm9yIChOb2RlSW5kZXggaW5kZXggPSBtX2NvbXBp
bGVJbmRleDsgaW5kZXgtLSA+IHN0YXJ0OykgeworICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1f
Z3JhcGhbaW5kZXhdOworICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gR2V0QnlPZmZzZXQKKyAg
ICAgICAgICAgICAgICAmJiBub2RlLmNoaWxkMSgpID09IGNoaWxkMQorICAgICAgICAgICAgICAg
ICYmIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5k
ZXgoKV0uaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKQorICAgICAgICAgICAg
ICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIGlmIChjbG9iYmVyc1dvcmxkKGluZGV4KSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTm9Ob2Rl
OworICAgIH0KKyAgICAKICAgICB2b2lkIHBlcmZvcm1TdWJzdGl0dXRpb24oTm9kZUluZGV4JiBj
aGlsZCkKICAgICB7CiAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgb3BlcmFuZCBpcyBhY3R1YWxs
eSB1bnVzZWQuCkBAIC03NzcsNiArODI1LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBzZXRS
ZXBsYWNlbWVudChnZXRNZXRob2RMb2FkRWxpbWluYXRpb24obV9ncmFwaC5tX21ldGhvZENoZWNr
RGF0YVtub2RlLm1ldGhvZENoZWNrRGF0YUluZGV4KCldLCBub2RlLmlkZW50aWZpZXJOdW1iZXIo
KSwgbm9kZS5jaGlsZDEoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGNo
ZWNrU3RydWN0dXJlTG9hZEVsaW1pbmF0aW9uKG5vZGUuc3RydWN0dXJlKCksIG5vZGUuY2hpbGQx
KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0
QnlPZmZzZXQ6CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRCeU9mZnNldExvYWRFbGlt
aW5hdGlvbihtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNzRGF0
YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIsIG5vZGUuY2hpbGQxKCkpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAvLyBk
byBub3RoaW5nLgogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gOTUzOTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQxLDYgKzE0MSw5IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUludEkKICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAgICAg
ICAgIHJldHVybiBhbGxvY2F0ZSgpOwogICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBEYXRhRm9y
bWF0U3RvcmFnZToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCiAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yNzIsNiArMjc1LDcgQEAgRlBSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1h
dCgpKSB7CiAgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogLy8gU2hvdWxkIGhhdmUgZmlsbGVkLCBh
Ym92ZS4KICAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOiAvLyBUaGlzIHR5cGUgbmV2ZXIgb2Nj
dXJzLgorICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAKICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgpAQCAtNDA2LDYgKzQx
MCw5IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAg
dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oKTsKICAgICAgICAgcmV0dXJuIGFsbG9jYXRl
KCk7CiAgICAgfQorICAgICAgICAKKyAgICBjYXNlIERhdGFGb3JtYXRTdG9yYWdlOgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKQEAgLTQ3Niw2ICs0ODMsOSBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxh
dGVCb29sCiAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKCk7CiAgICAgICAg
IHJldHVybiBhbGxvY2F0ZSgpOwogICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBEYXRhRm9ybWF0
U3RvcmFnZToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMzkyLDYgKzE0MDIsMzYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQ
UiwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KKworICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKKyAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBiYXNlKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJlZyBi
YXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRy
KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG5vZGUu
c3RydWN0dXJlKCkpKSk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBp
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZlByb3BlcnR5U3RvcmFnZSgp
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIHN0b3JhZ2VSZXN1bHQocmVzdWx0R1BS
LCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBHZXRCeU9mZnNldDogeworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHN0b3Jh
Z2UpOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigp
OworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAKKyAg
ICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0gbV9qaXQuZ3JhcGgo
KS5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXTsKKyAg
ICAgICAgCisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFkZHJlc3Moc3RvcmFn
ZUdQUiwgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSks
IHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwg
bV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgIAogICAgIGNh
c2UgR2V0TWV0aG9kOiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS5jaGlsZDEoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1N0ZExpYkV4
dHJhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvU3RkTGliRXh0
cmFzLmgJKHJldmlzaW9uIDk1Mzk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9TdGRM
aWJFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiwxNCBAQCBpbmxpbmUgVE8g
Yml0d2lzZV9jYXN0KEZST00gZnJvbSkKICAgICByZXR1cm4gdS50bzsKIH0KIAordGVtcGxhdGU8
dHlwZW5hbWUgVG8sIHR5cGVuYW1lIEZyb20+CitpbmxpbmUgVG8gc2FmZUNhc3QoRnJvbSB2YWx1
ZSkKK3sKKyAgICBUbyByZXN1bHQgPSBzdGF0aWNfY2FzdDxUbz4odmFsdWUpOworICAgIEFTU0VS
VChyZXN1bHQgPT0gdmFsdWUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIC8vIFJldHVybnMg
YSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGJpdHMgc2V0IGluICdiaXRzJy4KIGlubGluZSBzaXpl
X3QgYml0Q291bnQodW5zaWduZWQgYml0cykKIHsKQEAgLTIwOSw1ICsyMTcsNiBAQCBpbmxpbmUg
QXJyYXlFbGVtZW50VHlwZSogZ2VuZXJpY0JpbmFyeVNlCiAKIHVzaW5nIFdURjo6YmluYXJ5U2Vh
cmNoOwogdXNpbmcgV1RGOjpiaXR3aXNlX2Nhc3Q7Cit1c2luZyBXVEY6OnNhZmVDYXN0OwogCiAj
ZW5kaWYgLy8gV1RGX1N0ZExpYkV4dHJhc19oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107796</attachid>
            <date>2011-09-18 14:28:49 -0700</date>
            <delta_ts>2011-09-18 14:37:18 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>getbyoffset_patch_4.diff</filename>
            <type>text/plain</type>
            <size>33100</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTUzOTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODAgQEAK
KzIwMTEtMDktMTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIGRvZXMgbm90IHNwZWN1bGF0ZSBhZ2dyZXNzaXZlbHkgZW5vdWdoIG9uIEdldEJ5SWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MzIwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBU
aGlzIGFkZHMgdGhlIGFiaWxpdHkgdG8gYWNjZXNzIHByb3BlcnRpZXMgZGlyZWN0bHksIGJ5IG9m
ZnNldC4KKyAgICAgICAgVGhpcyBvcHRpbWl6YXRpb24ga2lja3MgaW4gd2hlbiBhdCB0aGUgdGlt
ZSBvZiBERkcgY29tcGlsYXRpb24sCisgICAgICAgIGl0IGFwcGVhcnMgdGhhdCB0aGUgZ2l2ZW4g
Z2V0X2J5X2lkIGlzIHNlbGYtY2FjaGVkIGJ5IHRoZSBvbGQgSklULgorICAgICAgICBUd28gbmV3
IG9wY29kZXMgZ2V0IGludHJvZHVjZWQ6IENoZWNrU3RydWN0dXJlIGFuZCBHZXRCeU9mZnNldC4K
KyAgICAgICAgQ2hlY2tTdHJ1Y3R1cmUgcGVyZm9ybXMgYSBzcGVjdWxhdGlvbiBjaGVjayBvbiB0
aGUgb2JqZWN0J3MKKyAgICAgICAgc3RydWN0dXJlLCBhbmQgcmV0dXJucyB0aGUgc3RvcmFnZSBw
b2ludGVyLiBHZXRCeU9mZnNldCBwZXJmb3JtcworICAgICAgICBhIGRpcmVjdCByZWFkIG9mIHRo
ZSBmaWVsZCBmcm9tIHRoZSBzdG9yYWdlIHBvaW50ZXIuIEJvdGgKKyAgICAgICAgQ2hlY2tTdHJ1
Y3R1cmUgYW5kIEdldEJ5T2Zmc2V0IGNhbiBiZSBDU0UnZCwgc28gdGhhdCB3ZSBjYW4KKyAgICAg
ICAgZWxpbWluYXRlIHJlZHVuZGFudCBzdHJ1Y3R1cmUgY2hlY2tzLCBhbmQgcmVkdW5kYW50IHJl
YWRzIG9mIHRoZQorICAgICAgICBzYW1lIGZpZWxkLgorICAgICAgICAKKyAgICAgICAgVGhpcyBp
cyBhIDQlIHNwZWVkLXVwIG9uIFY4LCBhIDIlIHNsb3ctZG93biBvbiBLcmFrZW4sIGFuZAorICAg
ICAgICBuZXV0cmFsIG9uIFN1blNwaWRlci4KKworICAgICAgICAqIGJ5dGVjb2RlL1ByZWRpY3Rl
ZFR5cGUuY3BwOgorICAgICAgICAoSlNDOjpwcmVkaWN0aW9uRnJvbUNsYXNzSW5mbyk6CisgICAg
ICAgIChKU0M6OnByZWRpY3Rpb25Gcm9tU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6cHJlZGlj
dGlvbkZyb21DZWxsKToKKyAgICAgICAgKiBieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmg6CisgICAg
ICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0dlbmVyYXRpb25JbmZv
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6ZGF0YUZvcm1hdFRvU3RyaW5nKToKKyAgICAgICAgKEpT
Qzo6REZHOjpuZWVkRGF0YUZvcm1hdENvbnZlcnNpb24pOgorICAgICAgICAoSlNDOjpERkc6Okdl
bmVyYXRpb25JbmZvOjppbml0U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlv
bkluZm86OnNwaWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6ZmlsbFN0
b3JhZ2UpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6Okdy
YXBoOjpwcmVkaWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6Z2V0UHJlZGljdGlvbik6
CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvZGVHZW5lcmF0b3I6OmZpbGxJbnRlZ2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpK
SVRDb2RlR2VuZXJhdG9yOjpmaWxsRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2Rl
R2VuZXJhdG9yOjpmaWxsSlNWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVy
YXRvcjo6ZmlsbFN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkdQUlRlbXBvcmFyeTo6R1BS
VGVtcG9yYXJ5KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5oOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OnNpbGVudFNwaWxsR1BSKToKKyAgICAgICAg
KEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpzaWxlbnRGaWxsR1BSKToKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpzcGlsbCk6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29kZUdlbmVyYXRvcjo6c3RvcmFnZVJlc3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFn
ZU9wZXJhbmQ6OlN0b3JhZ2VPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3Bl
cmFuZDo6flN0b3JhZ2VPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFu
ZDo6aW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5kOjpncHIpOgorICAg
ICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5kOjp1c2UpOgorICAgICAgICAqIGRmZy9ERkdO
b2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6T3BJbmZvOjpPcEluZm8pOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1ByZWRpY3Rp
b24pOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1N0cnVjdHVyZSk6CisgICAgICAgIChK
U0M6OkRGRzo6Tm9kZTo6c3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNT
dG9yYWdlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3RvcmFnZUFjY2Vz
c0RhdGFJbmRleCk6CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGUpOgorICAgICAgICAoSlNDOjpERkc6
OlByb3BhZ2F0b3I6Omdsb2JhbFZhckxvYWRFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvcGFnYXRvcjo6Z2V0TWV0aG9kTG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6
REZHOjpQcm9wYWdhdG9yOjpjaGVja1N0cnVjdHVyZUxvYWRFbGltaW5hdGlvbik6CisgICAgICAg
IChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Z2V0QnlPZmZzZXRMb2FkRWxpbWluYXRpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbGVhbik6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIHd0Zi9TdGRMaWJFeHRyYXMuaDoKKyAg
ICAgICAgKFdURjo6c2FmZUNhc3QpOgorCiAyMDExLTA5LTE3ICBPbGl2ZXIgSHVudCAgPG9saXZl
ckBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHNwZWNpYWwgY2FzZSBoYW5kbGluZyBvZiBp
bmxpbmUgc3RvcmFnZSBmcm9tIHRoZSBKSVQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QcmVkaWN0ZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5jcHAJKHJldmlzaW9uIDk1Mzk3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04MiwxMCArODIsOCBAQCBjb25zdCBjaGFyKiBwcmVkaWN0aW9uVG9TdHJpbmcoUHJl
ZGljdGVkCiB9CiAjZW5kaWYKIAotUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uRnJvbUNlbGwoSlND
ZWxsKiBjZWxsKQorUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uRnJvbUNsYXNzSW5mbyhjb25zdCBD
bGFzc0luZm8qIGNsYXNzSW5mbykKIHsKLSAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9
IGNlbGwtPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKTsKLSAgICAKICAgICBpZiAoY2xhc3NJbmZv
ID09ICZKU0ZpbmFsT2JqZWN0OjpzX2luZm8pCiAgICAgICAgIHJldHVybiBQcmVkaWN0RmluYWxP
YmplY3Q7CiAgICAgCkBAIC0xMDEsNiArOTksMTYgQEAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9u
RnJvbUNlbGwoSlNDZWxsKgogICAgIHJldHVybiBQcmVkaWN0Q2VsbE90aGVyOwogfQogCitQcmVk
aWN0ZWRUeXBlIHByZWRpY3Rpb25Gcm9tU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQor
eworICAgIHJldHVybiBwcmVkaWN0aW9uRnJvbUNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5m
bygpKTsKK30KKworUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uRnJvbUNlbGwoSlNDZWxsKiBjZWxs
KQoreworICAgIHJldHVybiBwcmVkaWN0aW9uRnJvbVN0cnVjdHVyZShjZWxsLT5zdHJ1Y3R1cmUo
KSk7Cit9CisKIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbkZyb21WYWx1ZShKU1ZhbHVlIHZhbHVl
KQogewogICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmgJKHJldmlzaW9uIDk1Mzk3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzMsNiArMzMsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgU3RydWN0dXJl
OworCiB0eXBlZGVmIHVpbnQxNl90IFByZWRpY3RlZFR5cGU7CiBzdGF0aWMgY29uc3QgUHJlZGlj
dGVkVHlwZSBQcmVkaWN0Tm9uZSAgICAgICAgICA9IDB4MDAwMDsgLy8gV2UgZG9uJ3Qga25vdyBh
bnl0aGluZyB5ZXQuCiBzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0RmluYWxPYmpl
Y3QgICA9IDB4MDAwMTsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNGaW5hbE9iamVjdC4KQEAgLTE1
MCw2ICsxNTIsOCBAQCBpbmxpbmUgUHJlZGljdGVkVHlwZSBtYWtlUHJlZGljdGlvbihQcmVkCiAg
ICAgcmV0dXJuIHR5cGUgfCAoc291cmNlID09IFN0cm9uZ1ByZWRpY3Rpb24gPyBTdHJvbmdQcmVk
aWN0aW9uVGFnIDogMCk7CiB9CiAKK1ByZWRpY3RlZFR5cGUgcHJlZGljdGlvbkZyb21DbGFzc0lu
Zm8oY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8pOworUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9u
RnJvbVN0cnVjdHVyZShTdHJ1Y3R1cmUqKTsKIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbkZyb21D
ZWxsKEpTQ2VsbCopOwogUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uRnJvbVZhbHVlKEpTVmFsdWUp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAkocmV2aXNpb24gOTUzOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwMyw5ICsxMDAzLDI2IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBjYXNl
IG9wX2dldF9ieV9pZDogewogICAgICAgICAgICAgTm9kZUluZGV4IGJhc2UgPSBnZXQoY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlm
aWVyID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBt
X3Byb2ZpbGVkQmxvY2stPmdldFN0dWJJbmZvKG1fY3VycmVudEluZGV4KTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgTm9kZUluZGV4IGdldEJ5SWQ7CisgICAgICAgICAgICBpZiAoc3R1Yklu
Zm8uc2VlbiAmJiBzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZikg
eworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8udS5nZXRC
eUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOworICAgICAgICAgICAgICAgIElkZW50
aWZpZXIgaWRlbnRpZmllciA9IG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGlkZW50aWZpZXJOdW1i
ZXIpOworICAgICAgICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCgqbV9n
bG9iYWxEYXRhLCBpZGVudGlmaWVyKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQob2Zmc2V0ICE9
IG5vdEZvdW5kKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBnZXRCeUlkID0g
YWRkVG9HcmFwaChHZXRCeU9mZnNldCwgT3BJbmZvKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0
YS5zaXplKCkpLCBPcEluZm8oUHJlZGljdE5vbmUpLCBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJl
LCBPcEluZm8oc3RydWN0dXJlKSwgYmFzZSkpOworCisgICAgICAgICAgICAgICAgU3RvcmFnZUFj
Y2Vzc0RhdGEgc3RvcmFnZUFjY2Vzc0RhdGE7CisgICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vz
c0RhdGEub2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICAgICAgICAgIHN0b3JhZ2VBY2Nlc3NEYXRh
LmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOworICAgICAgICAgICAgICAgIG1f
Z3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YS5hcHBlbmQoc3RvcmFnZUFjY2Vzc0RhdGEpOworICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgZ2V0QnlJZCA9IGFkZFRvR3JhcGgoR2V0
QnlJZCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBPcEluZm8oUHJlZGljdE5vbmUpLCBiYXNl
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZUluZGV4IGdldEJ5SWQgPSBhZGRUb0dy
YXBoKEdldEJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyKSwgT3BJbmZvKFByZWRpY3ROb25lKSwgYmFz
ZSk7CiAgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgZ2V0
QnlJZCk7CiAgICAgICAgICAgICBzdHJvbmdseVByZWRpY3QoZ2V0QnlJZCk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHJldmlzaW9u
IDk1Mzk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw3IEBAIGVudW0gRGF0YUZvcm1hdCB7CiAgICAg
RGF0YUZvcm1hdERvdWJsZSA9IDIsCiAgICAgRGF0YUZvcm1hdEJvb2xlYW4gPSAzLAogICAgIERh
dGFGb3JtYXRDZWxsID0gNCwKKyAgICBEYXRhRm9ybWF0U3RvcmFnZSA9IDUsCiAgICAgRGF0YUZv
cm1hdEpTID0gOCwKICAgICBEYXRhRm9ybWF0SlNJbnRlZ2VyID0gRGF0YUZvcm1hdEpTIHwgRGF0
YUZvcm1hdEludGVnZXIsCiAgICAgRGF0YUZvcm1hdEpTRG91YmxlID0gRGF0YUZvcm1hdEpTIHwg
RGF0YUZvcm1hdERvdWJsZSwKQEAgLTY1LDYgKzY2LDggQEAgaW5saW5lIGNvbnN0IGNoYXIqIGRh
dGFGb3JtYXRUb1N0cmluZyhEYQogICAgICAgICByZXR1cm4gIkNlbGwiOwogICAgIGNhc2UgRGF0
YUZvcm1hdEJvb2xlYW46CiAgICAgICAgIHJldHVybiAiQm9vbGVhbiI7CisgICAgY2FzZSBEYXRh
Rm9ybWF0U3RvcmFnZToKKyAgICAgICAgcmV0dXJuICJTdG9yYWdlIjsKICAgICBjYXNlIERhdGFG
b3JtYXRKUzoKICAgICAgICAgcmV0dXJuICJKUyI7CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNJbnRl
Z2VyOgpAQCAtMTEwLDYgKzExMyw5IEBAIGlubGluZSBib29sIG5lZWREYXRhRm9ybWF0Q29udmVy
c2lvbihEYXQKICAgICAgICAgICAgIC8vIFRoaXMgY2FwdHVyZXMgRGF0YUZvcm1hdEJvb2xlYW4s
IHdoaWNoIGlzIGN1cnJlbnRseSB1bnVzZWQuCiAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICAgICAgfQorICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6CisgICAgICAgIEFT
U0VSVCh0byA9PSBEYXRhRm9ybWF0U3RvcmFnZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBkZWZhdWx0OgogICAgICAgICAvLyBUaGlzIGNhcHR1cmVzIERhdGFGb3JtYXRCb29sZWFuLCB3
aGljaCBpcyBjdXJyZW50bHkgdW51c2VkLgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
QEAgLTIwOSw2ICsyMTUsMTUgQEAgcHVibGljOgogICAgICAgICBtX2NhbkZpbGwgPSBmYWxzZTsK
ICAgICAgICAgdS5mcHIgPSBmcHI7CiAgICAgfQorICAgIHZvaWQgaW5pdFN0b3JhZ2UoTm9kZUlu
ZGV4IG5vZGVJbmRleCwgdWludDMyX3QgdXNlQ291bnQsIEdQUlJlZyBncHIpCisgICAgeworICAg
ICAgICBtX25vZGVJbmRleCA9IG5vZGVJbmRleDsKKyAgICAgICAgbV91c2VDb3VudCA9IHVzZUNv
dW50OworICAgICAgICBtX3JlZ2lzdGVyRm9ybWF0ID0gRGF0YUZvcm1hdFN0b3JhZ2U7CisgICAg
ICAgIG1fc3BpbGxGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKKyAgICAgICAgbV9jYW5GaWxsID0g
ZmFsc2U7CisgICAgICAgIHUuZ3ByID0gZ3ByOworICAgIH0KIAogICAgIC8vIEdldCB0aGUgaW5k
ZXggb2YgdGhlIG5vZGUgdGhhdCBwcm9kdWNlZCB0aGlzIHZhbHVlLgogICAgIE5vZGVJbmRleCBu
b2RlSW5kZXgoKSB7IHJldHVybiBtX25vZGVJbmRleDsgfQpAQCAtMjg4LDkgKzMwMywxMiBAQCBw
dWJsaWM6CiAgICAgICAgIEFTU0VSVChtX3NwaWxsRm9ybWF0ID09IERhdGFGb3JtYXROb25lKTsK
ICAgICAgICAgLy8gV2Ugc2hvdWxkIG9ubHkgYmUgc3BpbGxpbmcgdmFsdWVzIHRoYXQgYXJlIGN1
cnJlbnRseSBpbiBtYWNoaW5lIHJlZ2lzdGVycy4KICAgICAgICAgQVNTRVJUKG1fcmVnaXN0ZXJG
b3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUpOwotICAgICAgICAvLyBXZSBvbmx5IHNwaWxsIHZhbHVl
cyB0aGF0IGhhdmUgYmVlbiBib3hlZCBhcyBhIEpTVmFsdWU7IG90aGVyd2lzZSB0aGUgR0MKLSAg
ICAgICAgLy8gd291bGQgbmVlZCBhIHdheSB0byBkaXN0aW5ndWlzaCBjZWxsIHBvaW50ZXJzIGZy
b20gbnVtZXJpYyBwcmltaXRpdmVzLgotICAgICAgICBBU1NFUlQoc3BpbGxGb3JtYXQgJiBEYXRh
Rm9ybWF0SlMpOworICAgICAgICAvLyBXZSBvbmx5IHNwaWxsIHZhbHVlcyB0aGF0IGhhdmUgYmVl
biBib3hlZCBhcyBhIEpTVmFsdWUgYmVjYXVzZSBoaXN0b3JpY2FsbHkKKyAgICAgICAgLy8gd2Ug
YXNzdW1lZCB0aGF0IHRoZSBHQyB3b3VsZCB3YW50IHRvIGJlIGFibGUgdG8gcHJlY2lzZWx5IGlk
ZW50aWZ5IGhlYXAKKyAgICAgICAgLy8gcG9pbnRlcnMuIFRoaXMgaXMgbm90IHRydWUgYW55bW9y
ZSwgYnV0IHdlIHN0aWxsIGFzc3VtZSwgaW4gdGhlIGZpbGwgY29kZSwKKyAgICAgICAgLy8gdGhh
dCBhbnkgc3BpbGwgc2xvdCBmb3IgYSBKUyB2YWx1ZSBpcyBib3hlZC4gRm9yIHN0b3JhZ2UgcG9p
bnRlcnMsIHRoZXJlIGlzCisgICAgICAgIC8vIG5vdGhpbmcgd2UgY2FuIGRvIHRvIGJveCB0aGVt
LCBzbyB3ZSBhbGxvdyB0aGF0IHRvIGJlIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgQVNTRVJUKChz
cGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUykgfHwgc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdFN0
b3JhZ2UpOwogCiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0Tm9uZTsKICAg
ICAgICAgbV9zcGlsbEZvcm1hdCA9IHNwaWxsRm9ybWF0OwpAQCAtMzMwLDYgKzM0OCwxMSBAQCBw
dWJsaWM6CiAgICAgICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0RG91YmxlOwogICAg
ICAgICB1LmZwciA9IGZwcjsKICAgICB9CisgICAgdm9pZCBmaWxsU3RvcmFnZShHUFJSZWcgZ3By
KQorICAgIHsKKyAgICAgICAgbV9yZWdpc3RlckZvcm1hdCA9IERhdGFGb3JtYXRTdG9yYWdlOwor
ICAgICAgICB1LmdwciA9IGdwcjsKKyAgICB9CiAKICAgICBib29sIGFsaXZlKCkKICAgICB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiA5NTM5NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAt
ODQsNiArODQsMTkgQEAgc3RydWN0IE1ldGhvZENoZWNrRGF0YSB7CiAgICAgfQogfTsKIAorc3Ry
dWN0IFN0b3JhZ2VBY2Nlc3NEYXRhIHsKKyAgICBzaXplX3Qgb2Zmc2V0OworICAgIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXI7CisgICAgCisgICAgLy8gTk9URTogdGhlIG9mZnNldCBhbmQgaWRl
bnRpZmllck51bWJlciBkbyBub3QgYnkgdGhlbXNlbHZlcworICAgIC8vIHVuaXF1ZWx5IGlkZW50
aWZ5IGEgcHJvcGVydHkuIFRoZSBpZGVudGlmaWVyTnVtYmVyIGFuZCBhCisgICAgLy8gU3RydWN0
dXJlKiBkby4gSWYgdGhvc2UgdHdvIG1hdGNoLCB0aGVuIHRoZSBvZmZzZXQgc2hvdWxkCisgICAg
Ly8gYmUgdGhlIHNhbWUsIGFzIHdlbGwuIEZvciBhbnkgTm9kZSB0aGF0IGhhcyBhIFN0b3JhZ2VB
Y2Nlc3NEYXRhLAorICAgIC8vIGl0IGlzIHBvc3NpYmxlIHRvIHJldHJpZXZlIHRoZSBTdHJ1Y3R1
cmUqIGJ5IGxvb2tpbmcgYXQgdGhlCisgICAgLy8gZmlyc3QgY2hpbGQuIEl0IHNob3VsZCBiZSBh
IENoZWNrU3RydWN0dXJlLCB3aGljaCBoYXMgdGhlCisgICAgLy8gU3RydWN0dXJlKi4KK307CisK
IHR5cGVkZWYgVmVjdG9yIDxCbG9ja0luZGV4LCAyPiBQcmVkZWNlc3Nvckxpc3Q7CiAKIHN0cnVj
dCBCYXNpY0Jsb2NrIHsKQEAgLTE4Miw2ICsxOTUsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2Ug
R2V0QnlWYWw6CiAgICAgICAgIGNhc2UgQ2FsbDoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6Cisg
ICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6CiAgICAgICAgICAgICByZXR1cm4gbm9kZS5wcmVkaWN0
KHByZWRpY3Rpb24sIHNvdXJjZSk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC0yMjMsNiArMjM3LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIEdldEJ5
VmFsOgogICAgICAgICBjYXNlIENhbGw6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OgorICAgICAg
ICBjYXNlIEdldEJ5T2Zmc2V0OgogICAgICAgICAgICAgcmV0dXJuIG5vZGVQdHItPmdldFByZWRp
Y3Rpb24oKTsKICAgICAgICAgY2FzZSBDaGVja01ldGhvZDoKICAgICAgICAgICAgIHJldHVybiBn
ZXRNZXRob2RDaGVja1ByZWRpY3Rpb24oKm5vZGVQdHIpOwpAQCAtMjk5LDYgKzMxNCw3IEBAIHB1
YmxpYzoKICAgICBWZWN0b3I8IE93blB0cjxCYXNpY0Jsb2NrPiAsIDg+IG1fYmxvY2tzOwogICAg
IFZlY3RvcjxOb2RlSW5kZXgsIDE2PiBtX3ZhckFyZ0NoaWxkcmVuOwogICAgIFZlY3RvcjxNZXRo
b2RDaGVja0RhdGE+IG1fbWV0aG9kQ2hlY2tEYXRhOworICAgIFZlY3RvcjxTdG9yYWdlQWNjZXNz
RGF0YT4gbV9zdG9yYWdlQWNjZXNzRGF0YTsKICAgICB1bnNpZ25lZCBtX3ByZXNlcnZlZFZhcnM7
CiAgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJTbG90czsKIHByaXZhdGU6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAJKHJldmlz
aW9uIDk1Mzk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEsNyBAQCBHUFJSZWcgSklUQ29kZUdl
bmVyYXRvcjo6ZmlsbEludGVnZXIoTm9kCiAgICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgogICAg
IGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOgor
ICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6CiAgICAgICAgIC8vIFNob3VsZCBvbmx5IGJlIGNh
bGxpbmcgdGhpcyBmdW5jdGlvbiBpZiB3ZSBrbm93IHRoaXMgb3BlcmFuZCB0byBiZSBpbnRlZ2Vy
LgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIApAQCAtMTY2LDYgKzE2Nyw3IEBAIEZQ
UlJlZyBKSVRDb2RlR2VuZXJhdG9yOjpmaWxsRG91YmxlKE5vZGUKICAgICBjYXNlIERhdGFGb3Jt
YXRKU0NlbGw6CiAgICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjoKICAgICBjYXNlIERhdGFGb3Jt
YXRKU0Jvb2xlYW46CisgICAgY2FzZSBEYXRhRm9ybWF0U3RvcmFnZToKICAgICAgICAgLy8gU2hv
dWxkIG9ubHkgYmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGlmIHdlIGtub3cgdGhpcyBvcGVyYW5k
IHRvIGJlIG51bWVyaWMuCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCkBAIC0zMTYs
NiArMzE4LDcgQEAgR1BSUmVnIEpJVENvZGVHZW5lcmF0b3I6OmZpbGxKU1ZhbHVlKE5vZAogICAg
IH0KICAgICAgICAgCiAgICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjoKKyAgICBjYXNlIERhdGFG
b3JtYXRTdG9yYWdlOgogICAgICAgICAvLyB0aGlzIHR5cGUgY3VycmVudGx5IG5ldmVyIG9jY3Vy
cwogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CkBAIC0zMjQsNiArMzI3LDM1
IEBAIEdQUlJlZyBKSVRDb2RlR2VuZXJhdG9yOjpmaWxsSlNWYWx1ZShOb2QKICAgICByZXR1cm4g
SW52YWxpZEdQUlJlZzsKIH0KIAorR1BSUmVnIEpJVENvZGVHZW5lcmF0b3I6OmZpbGxTdG9yYWdl
KE5vZGVJbmRleCBub2RlSW5kZXgpCit7CisgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClb
bm9kZUluZGV4XTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52
aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2VuZXJhdGlv
bkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKKyAgICAKKyAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJG
b3JtYXQoKSkgeworICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6IHsKKyAgICAgICAgR1BSUmVnIGdw
ciA9IGFsbG9jYXRlKCk7CisgICAgICAgIEFTU0VSVChpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0
YUZvcm1hdFN0b3JhZ2UpOworICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lz
dGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7CisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKKyAgICAgICAgaW5mby5maWxs
U3RvcmFnZShncHIpOworICAgICAgICByZXR1cm4gZ3ByOworICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBEYXRhRm9ybWF0U3RvcmFnZTogeworICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIo
KTsKKyAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKKyAgICAgICAgcmV0dXJuIGdwcjsKKyAgICB9
CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gSW52YWxpZEdQUlJlZzsKK30KKwogdm9pZCBKSVRDb2Rl
R2VuZXJhdG9yOjp1c2VDaGlsZHJlbihOb2RlJiBub2RlKQogewogICAgIGlmIChub2RlLm9wICYg
Tm9kZUhhc1ZhckFyZ3MpIHsKQEAgLTEwNzgsMTQgKzExMTAsNiBAQCB2b2lkIEpJVENvZGVHZW5l
cmF0b3I6Om5vblNwZWN1bGF0aXZlSW5zCiAgICAganNWYWx1ZVJlc3VsdChzY3JhdGNoUmVnLCBt
X2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKIH0KIAotdGVtcGxh
dGU8dHlwZW5hbWUgVG8sIHR5cGVuYW1lIEZyb20+Ci1pbmxpbmUgVG8gc2FmZUNhc3QoRnJvbSB2
YWx1ZSkKLXsKLSAgICBUbyByZXN1bHQgPSBzdGF0aWNfY2FzdDxUbz4odmFsdWUpOwotICAgIEFT
U0VSVChyZXN1bHQgPT0gdmFsdWUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIEpJVENvbXBp
bGVyOjpDYWxsIEpJVENvZGVHZW5lcmF0b3I6OmNhY2hlZEdldEJ5SWQoR1BSUmVnIGJhc2VHUFIs
IEdQUlJlZyByZXN1bHRHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCwgTm9kZVR5cGUgbm9kZVR5
cGUpCiB7CiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVUb0NvbXBhcmU7
CkBAIC0yMDQxLDYgKzIwNjUsMTYgQEAgR1BSVGVtcG9yYXJ5OjpHUFJUZW1wb3JhcnkoSklUQ29k
ZUdlbmVyYQogICAgICAgICBtX2dwciA9IG1faml0LT5hbGxvY2F0ZSgpOwogfQogCitHUFJUZW1w
b3Jhcnk6OkdQUlRlbXBvcmFyeShKSVRDb2RlR2VuZXJhdG9yKiBqaXQsIFN0b3JhZ2VPcGVyYW5k
JiBvcDEpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX2dwcihJbnZhbGlkR1BSUmVnKQorewor
ICAgIGlmIChtX2ppdC0+Y2FuUmV1c2Uob3AxLmluZGV4KCkpKQorICAgICAgICBtX2dwciA9IG1f
aml0LT5yZXVzZShvcDEuZ3ByKCkpOworICAgIGVsc2UKKyAgICAgICAgbV9ncHIgPSBtX2ppdC0+
YWxsb2NhdGUoKTsKK30KKwogRlBSVGVtcG9yYXJ5OjpGUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVy
YXRvciogaml0KQogICAgIDogbV9qaXQoaml0KQogICAgICwgbV9mcHIoSW52YWxpZEZQUlJlZykK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRv
ci5oCShyZXZpc2lvbiA5NTM5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2Myw3IEBAIHByb3RlY3Rl
ZDoKICAgICAgICAgU3BpbGxPcmRlclNwaWxsZWQgPSAyLCAgLy8gbm8gc3BpbGwKICAgICAgICAg
U3BpbGxPcmRlckpTID0gNCwgICAgICAgLy8gbmVlZHMgc3BpbGwKICAgICAgICAgU3BpbGxPcmRl
ckNlbGwgPSA0LCAgICAgLy8gbmVlZHMgc3BpbGwKKyAgICAgICAgU3BpbGxPcmRlclN0b3JhZ2Ug
PSA0LCAgLy8gbmVlZHMgc3BpbGwKICAgICAgICAgU3BpbGxPcmRlckludGVnZXIgPSA1LCAgLy8g
bmVlZHMgc3BpbGwgYW5kIGJveAogICAgICAgICBTcGlsbE9yZGVyRG91YmxlID0gNiwgICAvLyBu
ZWVkcyBzcGlsbCBhbmQgY29udmVydAogICAgIH07CkBAIC03NCw2ICs3NSw3IEBAIHB1YmxpYzoK
ICAgICBHUFJSZWcgZmlsbEludGVnZXIoTm9kZUluZGV4LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3Jt
YXQpOwogICAgIEZQUlJlZyBmaWxsRG91YmxlKE5vZGVJbmRleCk7CiAgICAgR1BSUmVnIGZpbGxK
U1ZhbHVlKE5vZGVJbmRleCk7CisgICAgR1BSUmVnIGZpbGxTdG9yYWdlKE5vZGVJbmRleCk7CiAK
ICAgICAvLyBsb2NrIGFuZCB1bmxvY2sgR1BSICYgRlBSIHJlZ2lzdGVycy4KICAgICB2b2lkIGxv
Y2soR1BSUmVnIHJlZykKQEAgLTIyMiwxMCArMjI0LDEwIEBAIHByb3RlY3RlZDoKIAogICAgICAg
ICBEYXRhRm9ybWF0IHJlZ2lzdGVyRm9ybWF0ID0gaW5mby5yZWdpc3RlckZvcm1hdCgpOwogCi0g
ICAgICAgIGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikgeworICAgICAg
ICBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpCiAgICAgICAgICAgICBt
X2ppdC5zdG9yZTMyKGluZm8uZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUp
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCAm
IERhdGFGb3JtYXRKUyB8fCByZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0Q2VsbCk7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ICYgRGF0YUZvcm1h
dEpTIHx8IHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRDZWxsIHx8IHJlZ2lzdGVyRm9ybWF0
ID09IERhdGFGb3JtYXRTdG9yYWdlKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGluZm8u
Z3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKICAgICAgICAgfQogICAg
IH0KQEAgLTI3Myw3ICsyNzUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGlmIChub2RlLmhhc0Nv
bnN0YW50KCkpCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlT2ZKU0NvbnN0YW50QXNJbW1Q
dHIobm9kZUluZGV4KSwgaW5mby5ncHIoKSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
QVNTRVJUKHJlZ2lzdGVyRm9ybWF0ICYgRGF0YUZvcm1hdEpTIHx8IHJlZ2lzdGVyRm9ybWF0ID09
IERhdGFGb3JtYXRDZWxsKTsKKyAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCAmIERh
dGFGb3JtYXRKUyB8fCByZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0Q2VsbCB8fCByZWdpc3Rl
ckZvcm1hdCA9PSBEYXRhRm9ybWF0U3RvcmFnZSk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRy
KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpLCBpbmZvLmdwcigpKTsKICAgICAgICAg
fQogICAgIH0KQEAgLTM4NSw3ICszODcsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIH0KIAogICAg
ICAgICBEYXRhRm9ybWF0IHNwaWxsRm9ybWF0ID0gaW5mby5yZWdpc3RlckZvcm1hdCgpOwotICAg
ICAgICBpZiAoc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJsZSkgeworICAgICAgICBzd2l0
Y2ggKHNwaWxsRm9ybWF0KSB7CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZTogewogICAg
ICAgICAgICAgLy8gQWxsIHZhbHVlcyBhcmUgc3BpbGxlZCBhcyBKU1ZhbHVlcywgc28gYm94IHRo
ZSBkb3VibGUgdmlhIGEgdGVtcG9yYXJ5IGdwci4KICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBi
b3hEb3VibGUoaW5mby5mcHIoKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihncHIsIEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKQEAgLTM5MywxOSArMzk2LDMwIEBAIHBy
b3RlY3RlZDoKICAgICAgICAgICAgIGluZm8uc3BpbGwoRGF0YUZvcm1hdEpTRG91YmxlKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
RGF0YUZvcm1hdFN0b3JhZ2U6IHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgc3BlY2lhbCwgc2lu
Y2UgaXQncyBub3QgYSBKUyB2YWx1ZSAtIGFzIGluIGl0J3Mgbm90IHZpc2libGUgdG8gSlMKKyAg
ICAgICAgICAgIC8vIGNvZGUuCisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihpbmZvLmdwcigp
LCBKSVRDb21waWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSk7CisgICAgICAgICAgICBpbmZvLnNw
aWxsKERhdGFGb3JtYXRTdG9yYWdlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQog
Ci0gICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgY29kZSBoYW5kbGVzIEpTVmFsdWVzLCBpbnQzMnMs
IGFuZCBjZWxscy4KLSAgICAgICAgQVNTRVJUKHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRJbnRl
Z2VyIHx8IHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRDZWxsIHx8IHNwaWxsRm9ybWF0ICYgRGF0
YUZvcm1hdEpTKTsKLQotICAgICAgICBHUFJSZWcgcmVnID0gaW5mby5ncHIoKTsKLSAgICAgICAg
Ly8gV2UgbmVlZCB0byBib3ggaW50MzIgYW5kIGNlbGwgdmFsdWVzIC4uLgotICAgICAgICAvLyBi
dXQgb24gSlNWQUxVRTY0IGJveGluZyBhIGNlbGwgaXMgYSBuby1vcCEKLSAgICAgICAgaWYgKHNw
aWxsRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyKQotICAgICAgICAgICAgbV9qaXQub3JQdHIo
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWcpOwotCi0gICAgICAgIC8vIFNwaWxs
IHRoZSB2YWx1ZSwgYW5kIHJlY29yZCBpdCBhcyBzcGlsbGVkIGluIGl0cyBib3hlZCBmb3JtLgot
ICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWcsIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxs
TWUpKTsKLSAgICAgICAgaW5mby5zcGlsbCgoRGF0YUZvcm1hdCkoc3BpbGxGb3JtYXQgfCBEYXRh
Rm9ybWF0SlMpKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dp
bmcgY29kZSBoYW5kbGVzIEpTVmFsdWVzLCBpbnQzMnMsIGFuZCBjZWxscy4KKyAgICAgICAgICAg
IEFTU0VSVChzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlciB8fCBzcGlsbEZvcm1hdCA9
PSBEYXRhRm9ybWF0Q2VsbCB8fCBzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIEdQUlJlZyByZWcgPSBpbmZvLmdwcigpOworICAgICAgICAgICAg
Ly8gV2UgbmVlZCB0byBib3ggaW50MzIgYW5kIGNlbGwgdmFsdWVzIC4uLgorICAgICAgICAgICAg
Ly8gYnV0IG9uIEpTVkFMVUU2NCBib3hpbmcgYSBjZWxsIGlzIGEgbm8tb3AhCisgICAgICAgICAg
ICBpZiAoc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpCisgICAgICAgICAgICAgICAg
bV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWcpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICAvLyBTcGlsbCB0aGUgdmFsdWUsIGFuZCByZWNvcmQgaXQgYXMg
c3BpbGxlZCBpbiBpdHMgYm94ZWQgZm9ybS4KKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHJl
ZywgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOworICAgICAgICAgICAgaW5mby5z
cGlsbCgoRGF0YUZvcm1hdCkoc3BpbGxGb3JtYXQgfCBEYXRhRm9ybWF0SlMpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICBib29sIGlzU3RyaWN0SW50
MzIoTm9kZUluZGV4KTsKQEAgLTY5OSw2ICs3MTMsMTcgQEAgcHJvdGVjdGVkOgogICAgIHsKICAg
ICAgICAganNWYWx1ZVJlc3VsdChyZWcsIG5vZGVJbmRleCwgRGF0YUZvcm1hdEpTLCBtb2RlKTsK
ICAgICB9CisgICAgdm9pZCBzdG9yYWdlUmVzdWx0KEdQUlJlZyByZWcsIE5vZGVJbmRleCBub2Rl
SW5kZXgsIFVzZUNoaWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVzZUNoaWxkcmVuKQorICAgIHsKKyAg
ICAgICAgTm9kZSYgbm9kZSA9IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKKyAgICAgICAgaWYg
KG1vZGUgPT0gQ2FsbFVzZUNoaWxkcmVuKQorICAgICAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7
CisgICAgICAgIAorICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9k
ZS52aXJ0dWFsUmVnaXN0ZXIoKTsKKyAgICAgICAgbV9ncHJzLnJldGFpbihyZWcsIHZpcnR1YWxS
ZWdpc3RlciwgU3BpbGxPcmRlclN0b3JhZ2UpOworICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5m
byA9IG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKKyAgICAgICAgaW5mby5pbml0
U3RvcmFnZShub2RlSW5kZXgsIG5vZGUucmVmQ291bnQoKSwgcmVnKTsKKyAgICB9CiAgICAgdm9p
ZCBkb3VibGVSZXN1bHQoRlBSUmVnIHJlZywgTm9kZUluZGV4IG5vZGVJbmRleCwgVXNlQ2hpbGRy
ZW5Nb2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCiAgICAgewogICAgICAgICBOb2RlJiBub2Rl
ID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhdOwpAQCAtMTE1OSw2ICsxMTg0LDQ3IEBAIHByaXZh
dGU6CiAgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwogfTsKIAorY2xhc3MgU3RvcmFnZU9wZXJh
bmQgeworcHVibGljOgorICAgIGV4cGxpY2l0IFN0b3JhZ2VPcGVyYW5kKEpJVENvZGVHZW5lcmF0
b3IqIGppdCwgTm9kZUluZGV4IGluZGV4KQorICAgICAgICA6IG1faml0KGppdCkKKyAgICAgICAg
LCBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcp
CisgICAgeworICAgICAgICBBU1NFUlQobV9qaXQpOworICAgICAgICBpZiAoaml0LT5pc0ZpbGxl
ZChpbmRleCkpCisgICAgICAgICAgICBncHIoKTsKKyAgICB9CisgICAgCisgICAgflN0b3JhZ2VP
cGVyYW5kKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2dwck9ySW52YWxpZCAhPSBJbnZhbGlk
R1BSUmVnKTsKKyAgICAgICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CisgICAgfQor
ICAgIAorICAgIE5vZGVJbmRleCBpbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9pbmRleDsKKyAgICB9CisgICAgCisgICAgR1BSUmVnIGdwcigpCisgICAgeworICAgICAgICBp
ZiAobV9ncHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIG1fZ3ByT3JJ
bnZhbGlkID0gbV9qaXQtPmZpbGxTdG9yYWdlKGluZGV4KCkpOworICAgICAgICByZXR1cm4gbV9n
cHJPckludmFsaWQ7CisgICAgfQorICAgIAorICAgIHZvaWQgdXNlKCkKKyAgICB7CisgICAgICAg
IG1faml0LT51c2UobV9pbmRleCk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBKSVRDb2Rl
R2VuZXJhdG9yKiBtX2ppdDsKKyAgICBOb2RlSW5kZXggbV9pbmRleDsKKyAgICBHUFJSZWcgbV9n
cHJPckludmFsaWQ7Cit9OworCiAKIC8vID09PSBUZW1wb3JhcmllcyA9PT0KIC8vCkBAIC0xMTc4
LDYgKzEyNDQsNyBAQCBwdWJsaWM6CiAgICAgR1BSVGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3Iq
LCBTcGVjdWxhdGVDZWxsT3BlcmFuZCYpOwogICAgIEdQUlRlbXBvcmFyeShKSVRDb2RlR2VuZXJh
dG9yKiwgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQmKTsKICAgICBHUFJUZW1wb3JhcnkoSklUQ29k
ZUdlbmVyYXRvciosIEpTVmFsdWVPcGVyYW5kJik7CisgICAgR1BSVGVtcG9yYXJ5KEpJVENvZGVH
ZW5lcmF0b3IqLCBTdG9yYWdlT3BlcmFuZCYpOwogCiAgICAgfkdQUlRlbXBvcmFyeSgpCiAgICAg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDk1Mzk3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTExOSwxMCArMTE5LDExIEBAIHByaXZhdGU6CiAjZGVmaW5lIE5vZGVNaWdodENsb2JiZXIgIDB4
ODAwMDAwCiAKIC8vIFRoZXNlIHZhbHVlcyByZWNvcmQgdGhlIHJlc3VsdCB0eXBlIG9mIHRoZSBu
b2RlIChhcyBjaGVja2VkIGJ5IE5vZGVSZXN1bHRNYXNrLCBhYm92ZSksIDAgZm9yIG5vIHJlc3Vs
dC4KLSNkZWZpbmUgTm9kZVJlc3VsdEpTICAgICAgMHgxMDAwCi0jZGVmaW5lIE5vZGVSZXN1bHRO
dW1iZXIgIDB4MjAwMAotI2RlZmluZSBOb2RlUmVzdWx0SW50MzIgICAweDMwMDAKLSNkZWZpbmUg
Tm9kZVJlc3VsdEJvb2xlYW4gMHg0MDAwCisjZGVmaW5lIE5vZGVSZXN1bHRKUyAgICAgICAgMHgx
MDAwCisjZGVmaW5lIE5vZGVSZXN1bHROdW1iZXIgICAgMHgyMDAwCisjZGVmaW5lIE5vZGVSZXN1
bHRJbnQzMiAgICAgMHgzMDAwCisjZGVmaW5lIE5vZGVSZXN1bHRCb29sZWFuICAgMHg0MDAwCisj
ZGVmaW5lIE5vZGVSZXN1bHRTdG9yYWdlICAgMHg1MDAwCiAKIC8vIFRoaXMgbWFjcm8gZGVmaW5l
cyBhIHNldCBvZiBpbmZvcm1hdGlvbiBhYm91dCBhbGwga25vd24gbm9kZSB0eXBlcywgdXNlZCB0
byBwb3B1bGF0ZSBOb2RlSWQsIE5vZGVUeXBlIGJlbG93LgogI2RlZmluZSBGT1JfRUFDSF9ERkdf
T1AobWFjcm8pIFwKQEAgLTE3NCw2ICsxNzUsOCBAQCBwcml2YXRlOgogICAgIG1hY3JvKEdldEJ5
SWQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkg
XAogICAgIG1hY3JvKFB1dEJ5SWQsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3Js
ZCkgXAogICAgIG1hY3JvKFB1dEJ5SWREaXJlY3QsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xv
YmJlcnNXb3JsZCkgXAorICAgIG1hY3JvKENoZWNrU3RydWN0dXJlLCBOb2RlUmVzdWx0U3RvcmFn
ZSB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhHZXRCeU9mZnNldCwgTm9kZVJlc3Vs
dEpTKSBcCiAgICAgbWFjcm8oR2V0TWV0aG9kLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVy
YXRlKSBcCiAgICAgbWFjcm8oQ2hlY2tNZXRob2QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKICAgICBtYWNybyhHZXRHbG9iYWxWYXIsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0
R2VuZXJhdGUpIFwKQEAgLTIyOCw4ICsyMzEsMTEgQEAgZW51bSBOb2RlVHlwZSB7CiAvLyBkaXN0
aW5ndWlzaGVzIGFuIGltbWVkaWF0ZSB2YWx1ZSAodHlwaWNhbGx5IGFuIGluZGV4IGludG8gYSBD
b2RlQmxvY2sgZGF0YSBzdHJ1Y3R1cmUgLSAKIC8vIGEgY29uc3RhbnQgaW5kZXgsIGFyZ3VtZW50
LCBvciBpZGVudGlmaWVyKSBmcm9tIGEgTm9kZUluZGV4Lgogc3RydWN0IE9wSW5mbyB7CisgICAg
ZXhwbGljaXQgT3BJbmZvKGludCB2YWx1ZSkgOiBtX3ZhbHVlKHZhbHVlKSB7fQogICAgIGV4cGxp
Y2l0IE9wSW5mbyh1bnNpZ25lZCB2YWx1ZSkgOiBtX3ZhbHVlKHZhbHVlKSB7fQotICAgIHVuc2ln
bmVkIG1fdmFsdWU7CisgICAgZXhwbGljaXQgT3BJbmZvKHVpbnRwdHJfdCB2YWx1ZSkgOiBtX3Zh
bHVlKHZhbHVlKSB7fQorICAgIGV4cGxpY2l0IE9wSW5mbyh2b2lkKiB2YWx1ZSkgOiBtX3ZhbHVl
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih2YWx1ZSkpIHt9CisgICAgdWludHB0cl90IG1f
dmFsdWU7CiB9OwogCiAvLyA9PT0gTm9kZSA9PT0KQEAgLTI3Miw3ICsyNzgsNyBAQCBzdHJ1Y3Qg
Tm9kZSB7CiAgICAgICAgICwgbV92aXJ0dWFsUmVnaXN0ZXIoSW52YWxpZFZpcnR1YWxSZWdpc3Rl
cikKICAgICAgICAgLCBtX3JlZkNvdW50KDApCiAgICAgICAgICwgbV9vcEluZm8oaW1tMS5tX3Zh
bHVlKQotICAgICAgICAsIG1fb3BJbmZvMihpbW0yLm1fdmFsdWUpCisgICAgICAgICwgbV9vcElu
Zm8yKHNhZmVDYXN0PHVuc2lnbmVkPihpbW0yLm1fdmFsdWUpKQogICAgIHsKICAgICAgICAgQVNT
RVJUKCEob3AgJiBOb2RlSGFzVmFyQXJncykpOwogICAgICAgICBjaGlsZHJlbi5maXhlZC5jaGls
ZDEgPSBjaGlsZDE7CkBAIC0yODcsNyArMjkzLDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICAs
IG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAgICAgICAgICwgbV9y
ZWZDb3VudCgwKQogICAgICAgICAsIG1fb3BJbmZvKGltbTEubV92YWx1ZSkKLSAgICAgICAgLCBt
X29wSW5mbzIoaW1tMi5tX3ZhbHVlKQorICAgICAgICAsIG1fb3BJbmZvMihzYWZlQ2FzdDx1bnNp
Z25lZD4oaW1tMi5tX3ZhbHVlKSkKICAgICB7CiAgICAgICAgIEFTU0VSVChvcCAmIE5vZGVIYXNW
YXJBcmdzKTsKICAgICAgICAgY2hpbGRyZW4udmFyaWFibGUuZmlyc3RDaGlsZCA9IGZpcnN0Q2hp
bGQ7CkBAIC00NDcsNiArNDUzLDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBjYXNlIEdldEJ5
VmFsOgogICAgICAgICBjYXNlIENhbGw6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OgorICAgICAg
ICBjYXNlIEdldEJ5T2Zmc2V0OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC00ODgsNiArNDk1LDI2IEBAIHN0
cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvMjsKICAgICB9CiAgICAgCisgICAg
Ym9vbCBoYXNTdHJ1Y3R1cmUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9wID09IENoZWNrU3Ry
dWN0dXJlOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTdHJ1Y3R1cmUqPihtX29wSW5mbyk7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgaGFzU3RvcmFnZUFjY2Vzc0RhdGEoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG9wID09IEdldEJ5T2Zmc2V0OworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBz
dG9yYWdlQWNjZXNzRGF0YUluZGV4KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX29wSW5mbzsK
KyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNWaXJ0dWFsUmVnaXN0ZXIoKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1fdmlydHVhbFJlZ2lzdGVyICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXI7CkBA
IC01OTksOCArNjI2LDEwIEBAIHByaXZhdGU6CiAgICAgVmlydHVhbFJlZ2lzdGVyIG1fdmlydHVh
bFJlZ2lzdGVyOwogICAgIC8vIFRoZSBudW1iZXIgb2YgdXNlcyBvZiB0aGUgcmVzdWx0IG9mIHRo
aXMgb3BlcmF0aW9uICgrMSBmb3IgJ211c3QgZ2VuZXJhdGUnIG5vZGVzLCB3aGljaCBoYXZlIHNp
ZGUtZWZmZWN0cykuCiAgICAgdW5zaWduZWQgbV9yZWZDb3VudDsKLSAgICAvLyBJbW1lZGlhdGUg
dmFsdWVzLCBhY2Nlc3NlcyB0eXBlLWNoZWNrZWQgdmlhIGFjY2Vzc29ycyBhYm92ZS4KLSAgICB1
bnNpZ25lZCBtX29wSW5mbywgbV9vcEluZm8yOworICAgIC8vIEltbWVkaWF0ZSB2YWx1ZXMsIGFj
Y2Vzc2VzIHR5cGUtY2hlY2tlZCB2aWEgYWNjZXNzb3JzIGFib3ZlLiBUaGUgZmlyc3Qgb25lIGlz
CisgICAgLy8gYmlnIGVub3VnaCB0byBzdG9yZSBhIHBvaW50ZXIuCisgICAgdWludHB0cl90IG1f
b3BJbmZvOworICAgIHVuc2lnbmVkIG1fb3BJbmZvMjsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9y
LmNwcAkocmV2aXNpb24gOTUzOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
b3BhZ2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzIsNiArMjcyLDI0IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKKyAgICAgICAgICAgIC8vIFdlIGJhY2t3YXJkIHByb3BhZ2F0
ZSB3aGF0IHRoaXMgQ2hlY2tTdHJ1Y3R1cmUgdGVsbHMgdXMuIE1heWJlIHRoYXQncyB0aGUgcmln
aHQgd2F5CisgICAgICAgICAgICAvLyB0byBnbzsgbWF5YmUgaXQgaXNuJ3QuIEknbSBub3Qgc3Vy
ZS4gV2hhdCB3ZSdkIHJlYWxseSB3YW50IGlzIGZsb3ctc2Vuc2l0aXZlCisgICAgICAgICAgICAv
LyBmb3J3YXJkIHByb3BhZ2F0aW9uIG9mIHdoYXQgd2UgbGVhcm4gZnJvbSBoYXZpbmcgZXhlY3V0
ZWQgQ2hlY2tTdHJ1Y3R1cmUuIEJ1dCBmb3IKKyAgICAgICAgICAgIC8vIG5vdyB3ZSBwcmVzZXJ2
ZSB0aGUgZmxvdy1pbnNlbnNpdGl2ZSBuYXR1cmUgb2YgdGhpcyBhbmFseXNpcywgYmVjYXVzZSBp
dCdzIGNoZWFwIHRvCisgICAgICAgICAgICAvLyBydW4gYW5kIHNlZW1zIHRvIHdvcmsgd2VsbCBl
bm91Z2guCisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlVXNlKG5vZGUuY2hpbGQxKCksIHBy
ZWRpY3Rpb25Gcm9tU3RydWN0dXJlKG5vZGUuc3RydWN0dXJlKCkpIHwgU3Ryb25nUHJlZGljdGlv
blRhZyk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oUHJlZGljdE90aGVy
IHwgU3Ryb25nUHJlZGljdGlvblRhZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsKKyAgICAgICAgICAgIGNo
YW5nZWQgfD0gbm9kZS5wcmVkaWN0KG1fdXNlc1ttX2NvbXBpbGVJbmRleF0gJiB+UHJlZGljdGlv
blRhZ01hc2ssIFN0cm9uZ1ByZWRpY3Rpb24pOworICAgICAgICAgICAgaWYgKGlzU3Ryb25nUHJl
ZGljdGlvbihub2RlLmdldFByZWRpY3Rpb24oKSkpCisgICAgICAgICAgICAgICAgY2hhbmdlZCB8
PSBzZXRQcmVkaWN0aW9uKG5vZGUuZ2V0UHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgY2FzZSBDaGVja01ldGhvZDogewog
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVVzZShub2RlLmNoaWxkMSgpLCBQcmVkaWN0T2Jq
ZWN0VW5rbm93biB8IFN0cm9uZ1ByZWRpY3Rpb25UYWcpOwogICAgICAgICAgICAgY2hhbmdlZCB8
PSBzZXRQcmVkaWN0aW9uKG1fZ3JhcGguZ2V0TWV0aG9kQ2hlY2tQcmVkaWN0aW9uKG5vZGUpKTsK
QEAgLTU5NSw3ICs2MTMsNyBAQCBwcml2YXRlOgogICAgIAogICAgIE5vZGVJbmRleCBnbG9iYWxW
YXJMb2FkRWxpbWluYXRpb24odW5zaWduZWQgdmFyTnVtYmVyKQogICAgIHsKLSAgICAgICAgTm9k
ZUluZGV4IHN0YXJ0ID0gc3RhcnRJbmRleCgpOworICAgICAgICBOb2RlSW5kZXggc3RhcnQgPSBz
dGFydEluZGV4Rm9yQ2hpbGRyZW4oKTsKICAgICAgICAgZm9yIChOb2RlSW5kZXggaW5kZXggPSBt
X2NvbXBpbGVJbmRleDsgaW5kZXgtLSA+IHN0YXJ0OykgewogICAgICAgICAgICAgTm9kZSYgbm9k
ZSA9IG1fZ3JhcGhbaW5kZXhdOwogICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7CkBAIC02
NDEsNyArNjU5LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBOb2RlSW5kZXggZ2V0TWV0aG9kTG9h
ZEVsaW1pbmF0aW9uKGNvbnN0IE1ldGhvZENoZWNrRGF0YSYgbWV0aG9kQ2hlY2tEYXRhLCB1bnNp
Z25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlSW5kZXggY2hpbGQxKQogICAgIHsKLSAgICAgICAg
Tm9kZUluZGV4IHN0YXJ0ID0gc3RhcnRJbmRleCgpOworICAgICAgICBOb2RlSW5kZXggc3RhcnQg
PSBzdGFydEluZGV4Rm9yQ2hpbGRyZW4oY2hpbGQxKTsKICAgICAgICAgZm9yIChOb2RlSW5kZXgg
aW5kZXggPSBtX2NvbXBpbGVJbmRleDsgaW5kZXgtLSA+IHN0YXJ0OykgewogICAgICAgICAgICAg
Tm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOwogICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0g
Q2hlY2tNZXRob2QKQEAgLTY1NSw2ICs2NzMsMzYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJu
IE5vTm9kZTsKICAgICB9CiAgICAgCisgICAgTm9kZUluZGV4IGNoZWNrU3RydWN0dXJlTG9hZEVs
aW1pbmF0aW9uKFN0cnVjdHVyZSogc3RydWN0dXJlLCBOb2RlSW5kZXggY2hpbGQxKQorICAgIHsK
KyAgICAgICAgTm9kZUluZGV4IHN0YXJ0ID0gc3RhcnRJbmRleEZvckNoaWxkcmVuKGNoaWxkMSk7
CisgICAgICAgIGZvciAoTm9kZUluZGV4IGluZGV4ID0gbV9jb21waWxlSW5kZXg7IGluZGV4LS0g
PiBzdGFydDspIHsKKyAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKKyAg
ICAgICAgICAgIGlmIChub2RlLm9wID09IENoZWNrU3RydWN0dXJlCisgICAgICAgICAgICAgICAg
JiYgbm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEKKyAgICAgICAgICAgICAgICAmJiBub2RlLnN0cnVj
dHVyZSgpID09IHN0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAg
ICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChpbmRleCkpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICB9CisgICAgCisgICAgTm9k
ZUluZGV4IGdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIE5vZGVJbmRleCBjaGlsZDEpCisgICAgeworICAgICAgICBOb2RlSW5kZXggc3RhcnQgPSBz
dGFydEluZGV4Rm9yQ2hpbGRyZW4oY2hpbGQxKTsKKyAgICAgICAgZm9yIChOb2RlSW5kZXggaW5k
ZXggPSBtX2NvbXBpbGVJbmRleDsgaW5kZXgtLSA+IHN0YXJ0OykgeworICAgICAgICAgICAgTm9k
ZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOworICAgICAgICAgICAgaWYgKG5vZGUub3AgPT0gR2V0
QnlPZmZzZXQKKyAgICAgICAgICAgICAgICAmJiBub2RlLmNoaWxkMSgpID09IGNoaWxkMQorICAg
ICAgICAgICAgICAgICYmIG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VB
Y2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlmaWVyTnVtYmVyKQor
ICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgIGlmIChjbG9iYmVyc1dv
cmxkKGluZGV4KSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gTm9Ob2RlOworICAgIH0KKyAgICAKICAgICB2b2lkIHBlcmZvcm1TdWJzdGl0dXRpb24o
Tm9kZUluZGV4JiBjaGlsZCkKICAgICB7CiAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgb3BlcmFu
ZCBpcyBhY3R1YWxseSB1bnVzZWQuCkBAIC03NzcsNiArODI1LDE0IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRNZXRob2RMb2FkRWxpbWluYXRpb24obV9ncmFwaC5t
X21ldGhvZENoZWNrRGF0YVtub2RlLm1ldGhvZENoZWNrRGF0YUluZGV4KCldLCBub2RlLmlkZW50
aWZpZXJOdW1iZXIoKSwgbm9kZS5jaGlsZDEoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICAgICAgICAgIHNldFJl
cGxhY2VtZW50KGNoZWNrU3RydWN0dXJlTG9hZEVsaW1pbmF0aW9uKG5vZGUuc3RydWN0dXJlKCks
IG5vZGUuY2hpbGQxKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgR2V0QnlPZmZzZXQ6CisgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRCeU9m
ZnNldExvYWRFbGltaW5hdGlvbihtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9y
YWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIsIG5vZGUuY2hpbGQxKCkpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICAvLyBkbyBub3RoaW5nLgogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24g
OTUzOTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDYgKzE0MSw5IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdElu
dGVnZXI7CiAgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwogICAgIH0KKyAgICAgICAgCisgICAg
Y2FzZSBEYXRhRm9ybWF0U3RvcmFnZToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yNzIsNiArMjc1LDcgQEAgRlBS
UmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgIHN3aXRjaCAoaW5mby5y
ZWdpc3RlckZvcm1hdCgpKSB7CiAgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogLy8gU2hvdWxkIGhh
dmUgZmlsbGVkLCBhYm92ZS4KICAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOiAvLyBUaGlzIHR5
cGUgbmV2ZXIgb2NjdXJzLgorICAgIGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAKICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgpA
QCAtNDA2LDYgKzQxMCw5IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNl
bGwKICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oKTsKICAgICAgICAgcmV0
dXJuIGFsbG9jYXRlKCk7CiAgICAgfQorICAgICAgICAKKyAgICBjYXNlIERhdGFGb3JtYXRTdG9y
YWdlOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAKICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTQ3Niw2ICs0ODMsOSBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6
OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9u
KCk7CiAgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwogICAgIH0KKyAgICAgICAgCisgICAgY2Fz
ZSBEYXRhRm9ybWF0U3RvcmFnZToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
fQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMzkyLDYgKzE0MDIsMzYgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRs
eSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsK
KyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBiYXNlKTsKKyAgICAgICAgCisgICAg
ICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9q
aXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVk
SW1tUHRyKG5vZGUuc3RydWN0dXJlKCkpKSk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5sb2Fk
UHRyKEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpvZmZzZXRPZlByb3Bl
cnR5U3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIHN0b3JhZ2VSZXN1
bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAgICAgCisgICAgY2FzZSBHZXRCeU9mZnNldDogeworICAgICAgICBTdG9yYWdlT3BlcmFuZCBz
dG9yYWdlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMsIHN0b3JhZ2UpOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBz
dG9yYWdlLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
ICAgICAgICAKKyAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEmIHN0b3JhZ2VBY2Nlc3NEYXRhID0g
bV9qaXQuZ3JhcGgoKS5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUuc3RvcmFnZUFjY2Vzc0RhdGFJ
bmRleCgpXTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OkFk
ZHJlc3Moc3RvcmFnZUdQUiwgc3RvcmFnZUFjY2Vzc0RhdGEub2Zmc2V0ICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSksIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAg
ICAgIAogICAgIGNhc2UgR2V0TWV0aG9kOiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL1N0ZExpYkV4dHJhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvU3RkTGliRXh0cmFzLmgJKHJldmlzaW9uIDk1Mzk3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9TdGRMaWJFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiwxNCBA
QCBpbmxpbmUgVE8gYml0d2lzZV9jYXN0KEZST00gZnJvbSkKICAgICByZXR1cm4gdS50bzsKIH0K
IAordGVtcGxhdGU8dHlwZW5hbWUgVG8sIHR5cGVuYW1lIEZyb20+CitpbmxpbmUgVG8gc2FmZUNh
c3QoRnJvbSB2YWx1ZSkKK3sKKyAgICBUbyByZXN1bHQgPSBzdGF0aWNfY2FzdDxUbz4odmFsdWUp
OworICAgIEFTU0VSVChyZXN1bHQgPT0gdmFsdWUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
IC8vIFJldHVybnMgYSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGJpdHMgc2V0IGluICdiaXRzJy4K
IGlubGluZSBzaXplX3QgYml0Q291bnQodW5zaWduZWQgYml0cykKIHsKQEAgLTIwOSw1ICsyMTcs
NiBAQCBpbmxpbmUgQXJyYXlFbGVtZW50VHlwZSogZ2VuZXJpY0JpbmFyeVNlCiAKIHVzaW5nIFdU
Rjo6YmluYXJ5U2VhcmNoOwogdXNpbmcgV1RGOjpiaXR3aXNlX2Nhc3Q7Cit1c2luZyBXVEY6OnNh
ZmVDYXN0OwogCiAjZW5kaWYgLy8gV1RGX1N0ZExpYkV4dHJhc19oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107797</attachid>
            <date>2011-09-18 14:37:18 -0700</date>
            <delta_ts>2011-09-19 15:28:20 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>getbyoffset_patch_5.diff</filename>
            <type>text/plain</type>
            <size>33608</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTUzOTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODAgQEAK
KzIwMTEtMDktMTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBE
RkcgSklUIGRvZXMgbm90IHNwZWN1bGF0ZSBhZ2dyZXNzaXZlbHkgZW5vdWdoIG9uIEdldEJ5SWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY4MzIwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBU
aGlzIGFkZHMgdGhlIGFiaWxpdHkgdG8gYWNjZXNzIHByb3BlcnRpZXMgZGlyZWN0bHksIGJ5IG9m
ZnNldC4KKyAgICAgICAgVGhpcyBvcHRpbWl6YXRpb24ga2lja3MgaW4gd2hlbiBhdCB0aGUgdGlt
ZSBvZiBERkcgY29tcGlsYXRpb24sCisgICAgICAgIGl0IGFwcGVhcnMgdGhhdCB0aGUgZ2l2ZW4g
Z2V0X2J5X2lkIGlzIHNlbGYtY2FjaGVkIGJ5IHRoZSBvbGQgSklULgorICAgICAgICBUd28gbmV3
IG9wY29kZXMgZ2V0IGludHJvZHVjZWQ6IENoZWNrU3RydWN0dXJlIGFuZCBHZXRCeU9mZnNldC4K
KyAgICAgICAgQ2hlY2tTdHJ1Y3R1cmUgcGVyZm9ybXMgYSBzcGVjdWxhdGlvbiBjaGVjayBvbiB0
aGUgb2JqZWN0J3MKKyAgICAgICAgc3RydWN0dXJlLCBhbmQgcmV0dXJucyB0aGUgc3RvcmFnZSBw
b2ludGVyLiBHZXRCeU9mZnNldCBwZXJmb3JtcworICAgICAgICBhIGRpcmVjdCByZWFkIG9mIHRo
ZSBmaWVsZCBmcm9tIHRoZSBzdG9yYWdlIHBvaW50ZXIuIEJvdGgKKyAgICAgICAgQ2hlY2tTdHJ1
Y3R1cmUgYW5kIEdldEJ5T2Zmc2V0IGNhbiBiZSBDU0UnZCwgc28gdGhhdCB3ZSBjYW4KKyAgICAg
ICAgZWxpbWluYXRlIHJlZHVuZGFudCBzdHJ1Y3R1cmUgY2hlY2tzLCBhbmQgcmVkdW5kYW50IHJl
YWRzIG9mIHRoZQorICAgICAgICBzYW1lIGZpZWxkLgorICAgICAgICAKKyAgICAgICAgVGhpcyBp
cyBhIDQlIHNwZWVkLXVwIG9uIFY4LCBhIDIlIHNsb3ctZG93biBvbiBLcmFrZW4sIGFuZAorICAg
ICAgICBuZXV0cmFsIG9uIFN1blNwaWRlci4KKworICAgICAgICAqIGJ5dGVjb2RlL1ByZWRpY3Rl
ZFR5cGUuY3BwOgorICAgICAgICAoSlNDOjpwcmVkaWN0aW9uRnJvbUNsYXNzSW5mbyk6CisgICAg
ICAgIChKU0M6OnByZWRpY3Rpb25Gcm9tU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6cHJlZGlj
dGlvbkZyb21DZWxsKToKKyAgICAgICAgKiBieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmg6CisgICAg
ICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0dlbmVyYXRpb25JbmZv
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6ZGF0YUZvcm1hdFRvU3RyaW5nKToKKyAgICAgICAgKEpT
Qzo6REZHOjpuZWVkRGF0YUZvcm1hdENvbnZlcnNpb24pOgorICAgICAgICAoSlNDOjpERkc6Okdl
bmVyYXRpb25JbmZvOjppbml0U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJhdGlv
bkluZm86OnNwaWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmF0aW9uSW5mbzo6ZmlsbFN0
b3JhZ2UpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6Okdy
YXBoOjpwcmVkaWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6Z2V0UHJlZGljdGlvbik6
CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkpJVENvZGVHZW5lcmF0b3I6OmZpbGxJbnRlZ2VyKToKKyAgICAgICAgKEpTQzo6REZHOjpK
SVRDb2RlR2VuZXJhdG9yOjpmaWxsRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2Rl
R2VuZXJhdG9yOjpmaWxsSlNWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVy
YXRvcjo6ZmlsbFN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkdQUlRlbXBvcmFyeTo6R1BS
VGVtcG9yYXJ5KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5oOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6OnNpbGVudFNwaWxsR1BSKToKKyAgICAgICAg
KEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpzaWxlbnRGaWxsR1BSKToKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpzcGlsbCk6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29kZUdlbmVyYXRvcjo6c3RvcmFnZVJlc3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFn
ZU9wZXJhbmQ6OlN0b3JhZ2VPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3Bl
cmFuZDo6flN0b3JhZ2VPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFu
ZDo6aW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5kOjpncHIpOgorICAg
ICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5kOjp1c2UpOgorICAgICAgICAqIGRmZy9ERkdO
b2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6T3BJbmZvOjpPcEluZm8pOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1ByZWRpY3Rp
b24pOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1N0cnVjdHVyZSk6CisgICAgICAgIChK
U0M6OkRGRzo6Tm9kZTo6c3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNT
dG9yYWdlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3RvcmFnZUFjY2Vz
c0RhdGFJbmRleCk6CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGUpOgorICAgICAgICAoSlNDOjpERkc6
OlByb3BhZ2F0b3I6Omdsb2JhbFZhckxvYWRFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvcGFnYXRvcjo6Z2V0TWV0aG9kTG9hZEVsaW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6
REZHOjpQcm9wYWdhdG9yOjpjaGVja1N0cnVjdHVyZUxvYWRFbGltaW5hdGlvbik6CisgICAgICAg
IChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Z2V0QnlPZmZzZXRMb2FkRWxpbWluYXRpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbGVhbik6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIHd0Zi9TdGRMaWJFeHRyYXMuaDoKKyAg
ICAgICAgKFdURjo6c2FmZUNhc3QpOgorCiAyMDExLTA5LTE3ICBPbGl2ZXIgSHVudCAgPG9saXZl
ckBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHNwZWNpYWwgY2FzZSBoYW5kbGluZyBvZiBp
bmxpbmUgc3RvcmFnZSBmcm9tIHRoZSBKSVQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QcmVkaWN0ZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5jcHAJKHJldmlzaW9uIDk1Mzk3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04MiwxMCArODIsOCBAQCBjb25zdCBjaGFyKiBwcmVkaWN0aW9uVG9TdHJpbmcoUHJl
ZGljdGVkCiB9CiAjZW5kaWYKIAotUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uRnJvbUNlbGwoSlND
ZWxsKiBjZWxsKQorUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uRnJvbUNsYXNzSW5mbyhjb25zdCBD
bGFzc0luZm8qIGNsYXNzSW5mbykKIHsKLSAgICBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbyA9
IGNlbGwtPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKTsKLSAgICAKICAgICBpZiAoY2xhc3NJbmZv
ID09ICZKU0ZpbmFsT2JqZWN0OjpzX2luZm8pCiAgICAgICAgIHJldHVybiBQcmVkaWN0RmluYWxP
YmplY3Q7CiAgICAgCkBAIC0xMDEsNiArOTksMTYgQEAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9u
RnJvbUNlbGwoSlNDZWxsKgogICAgIHJldHVybiBQcmVkaWN0Q2VsbE90aGVyOwogfQogCitQcmVk
aWN0ZWRUeXBlIHByZWRpY3Rpb25Gcm9tU3RydWN0dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlKQor
eworICAgIHJldHVybiBwcmVkaWN0aW9uRnJvbUNsYXNzSW5mbyhzdHJ1Y3R1cmUtPmNsYXNzSW5m
bygpKTsKK30KKworUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uRnJvbUNlbGwoSlNDZWxsKiBjZWxs
KQoreworICAgIHJldHVybiBwcmVkaWN0aW9uRnJvbVN0cnVjdHVyZShjZWxsLT5zdHJ1Y3R1cmUo
KSk7Cit9CisKIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbkZyb21WYWx1ZShKU1ZhbHVlIHZhbHVl
KQogewogICAgIGlmICh2YWx1ZS5pc0ludDMyKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmgJKHJldmlzaW9uIDk1Mzk3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzMsNiArMzMsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgU3RydWN0dXJl
OworCiB0eXBlZGVmIHVpbnQxNl90IFByZWRpY3RlZFR5cGU7CiBzdGF0aWMgY29uc3QgUHJlZGlj
dGVkVHlwZSBQcmVkaWN0Tm9uZSAgICAgICAgICA9IDB4MDAwMDsgLy8gV2UgZG9uJ3Qga25vdyBh
bnl0aGluZyB5ZXQuCiBzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0RmluYWxPYmpl
Y3QgICA9IDB4MDAwMTsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNGaW5hbE9iamVjdC4KQEAgLTE1
MCw2ICsxNTIsOCBAQCBpbmxpbmUgUHJlZGljdGVkVHlwZSBtYWtlUHJlZGljdGlvbihQcmVkCiAg
ICAgcmV0dXJuIHR5cGUgfCAoc291cmNlID09IFN0cm9uZ1ByZWRpY3Rpb24gPyBTdHJvbmdQcmVk
aWN0aW9uVGFnIDogMCk7CiB9CiAKK1ByZWRpY3RlZFR5cGUgcHJlZGljdGlvbkZyb21DbGFzc0lu
Zm8oY29uc3QgQ2xhc3NJbmZvKik7CitQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb25Gcm9tU3RydWN0
dXJlKFN0cnVjdHVyZSopOwogUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uRnJvbUNlbGwoSlNDZWxs
Kik7CiBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb25Gcm9tVmFsdWUoSlNWYWx1ZSk7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShy
ZXZpc2lvbiA5NTM5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAzLDkgKzEwMDMsMjYgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogCiAgICAgICAgIGNhc2Ugb3BfZ2V0X2J5
X2lkOiB7CiAgICAgICAgICAgICBOb2RlSW5kZXggYmFzZSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXIgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IG1fcHJvZmlsZWRC
bG9jay0+Z2V0U3R1YkluZm8obV9jdXJyZW50SW5kZXgpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBOb2RlSW5kZXggZ2V0QnlJZDsKKyAgICAgICAgICAgIGlmIChzdHViSW5mby5zZWVuICYm
IHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmKSB7CisgICAgICAg
ICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby51LmdldEJ5SWRTZWxmLmJh
c2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgICAgICAgICAgSWRlbnRpZmllciBpZGVu
dGlmaWVyID0gbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoaWRlbnRpZmllck51bWJlcik7CisgICAg
ICAgICAgICAgICAgc2l6ZV90IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KCptX2dsb2JhbERhdGEs
IGlkZW50aWZpZXIpOworICAgICAgICAgICAgICAgIEFTU0VSVChvZmZzZXQgIT0gbm90Rm91bmQp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGdldEJ5SWQgPSBhZGRUb0dyYXBo
KEdldEJ5T2Zmc2V0LCBPcEluZm8obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhLnNpemUoKSks
IE9wSW5mbyhQcmVkaWN0Tm9uZSksIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhz
dHJ1Y3R1cmUpLCBiYXNlKSk7CisKKyAgICAgICAgICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBz
dG9yYWdlQWNjZXNzRGF0YTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlQWNjZXNzRGF0YS5vZmZz
ZXQgPSBvZmZzZXQ7CisgICAgICAgICAgICAgICAgc3RvcmFnZUFjY2Vzc0RhdGEuaWRlbnRpZmll
ck51bWJlciA9IGlkZW50aWZpZXJOdW1iZXI7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3N0
b3JhZ2VBY2Nlc3NEYXRhLmFwcGVuZChzdG9yYWdlQWNjZXNzRGF0YSk7CisgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICBnZXRCeUlkID0gYWRkVG9HcmFwaChHZXRCeUlkLCBPcElu
Zm8oaWRlbnRpZmllck51bWJlciksIE9wSW5mbyhQcmVkaWN0Tm9uZSksIGJhc2UpOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBOb2RlSW5kZXggZ2V0QnlJZCA9IGFkZFRvR3JhcGgoR2V0QnlJ
ZCwgT3BJbmZvKGlkZW50aWZpZXIpLCBPcEluZm8oUHJlZGljdE5vbmUpLCBiYXNlKTsKICAgICAg
ICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBnZXRCeUlkKTsKICAg
ICAgICAgICAgIHN0cm9uZ2x5UHJlZGljdChnZXRCeUlkKTsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAkocmV2aXNpb24gOTUzOTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAgZW51bSBEYXRhRm9ybWF0IHsKICAgICBEYXRhRm9ybWF0
RG91YmxlID0gMiwKICAgICBEYXRhRm9ybWF0Qm9vbGVhbiA9IDMsCiAgICAgRGF0YUZvcm1hdENl
bGwgPSA0LAorICAgIERhdGFGb3JtYXRTdG9yYWdlID0gNSwKICAgICBEYXRhRm9ybWF0SlMgPSA4
LAogICAgIERhdGFGb3JtYXRKU0ludGVnZXIgPSBEYXRhRm9ybWF0SlMgfCBEYXRhRm9ybWF0SW50
ZWdlciwKICAgICBEYXRhRm9ybWF0SlNEb3VibGUgPSBEYXRhRm9ybWF0SlMgfCBEYXRhRm9ybWF0
RG91YmxlLApAQCAtNjUsNiArNjYsOCBAQCBpbmxpbmUgY29uc3QgY2hhciogZGF0YUZvcm1hdFRv
U3RyaW5nKERhCiAgICAgICAgIHJldHVybiAiQ2VsbCI7CiAgICAgY2FzZSBEYXRhRm9ybWF0Qm9v
bGVhbjoKICAgICAgICAgcmV0dXJuICJCb29sZWFuIjsKKyAgICBjYXNlIERhdGFGb3JtYXRTdG9y
YWdlOgorICAgICAgICByZXR1cm4gIlN0b3JhZ2UiOwogICAgIGNhc2UgRGF0YUZvcm1hdEpTOgog
ICAgICAgICByZXR1cm4gIkpTIjsKICAgICBjYXNlIERhdGFGb3JtYXRKU0ludGVnZXI6CkBAIC0x
MTAsNiArMTEzLDkgQEAgaW5saW5lIGJvb2wgbmVlZERhdGFGb3JtYXRDb252ZXJzaW9uKERhdAog
ICAgICAgICAgICAgLy8gVGhpcyBjYXB0dXJlcyBEYXRhRm9ybWF0Qm9vbGVhbiwgd2hpY2ggaXMg
Y3VycmVudGx5IHVudXNlZC4KICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICB9CisgICAgY2FzZSBEYXRhRm9ybWF0U3RvcmFnZToKKyAgICAgICAgQVNTRVJUKHRvID09
IERhdGFGb3JtYXRTdG9yYWdlKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIC8vIFRoaXMgY2FwdHVyZXMgRGF0YUZvcm1hdEJvb2xlYW4sIHdoaWNoIGlzIGN1
cnJlbnRseSB1bnVzZWQuCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjA5LDYg
KzIxNSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIG1fY2FuRmlsbCA9IGZhbHNlOwogICAgICAgICB1
LmZwciA9IGZwcjsKICAgICB9CisgICAgdm9pZCBpbml0U3RvcmFnZShOb2RlSW5kZXggbm9kZUlu
ZGV4LCB1aW50MzJfdCB1c2VDb3VudCwgR1BSUmVnIGdwcikKKyAgICB7CisgICAgICAgIG1fbm9k
ZUluZGV4ID0gbm9kZUluZGV4OworICAgICAgICBtX3VzZUNvdW50ID0gdXNlQ291bnQ7CisgICAg
ICAgIG1fcmVnaXN0ZXJGb3JtYXQgPSBEYXRhRm9ybWF0U3RvcmFnZTsKKyAgICAgICAgbV9zcGls
bEZvcm1hdCA9IERhdGFGb3JtYXROb25lOworICAgICAgICBtX2NhbkZpbGwgPSBmYWxzZTsKKyAg
ICAgICAgdS5ncHIgPSBncHI7CisgICAgfQogCiAgICAgLy8gR2V0IHRoZSBpbmRleCBvZiB0aGUg
bm9kZSB0aGF0IHByb2R1Y2VkIHRoaXMgdmFsdWUuCiAgICAgTm9kZUluZGV4IG5vZGVJbmRleCgp
IHsgcmV0dXJuIG1fbm9kZUluZGV4OyB9CkBAIC0yODgsOSArMzAzLDEyIEBAIHB1YmxpYzoKICAg
ICAgICAgQVNTRVJUKG1fc3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdE5vbmUpOwogICAgICAgICAv
LyBXZSBzaG91bGQgb25seSBiZSBzcGlsbGluZyB2YWx1ZXMgdGhhdCBhcmUgY3VycmVudGx5IGlu
IG1hY2hpbmUgcmVnaXN0ZXJzLgogICAgICAgICBBU1NFUlQobV9yZWdpc3RlckZvcm1hdCAhPSBE
YXRhRm9ybWF0Tm9uZSk7Ci0gICAgICAgIC8vIFdlIG9ubHkgc3BpbGwgdmFsdWVzIHRoYXQgaGF2
ZSBiZWVuIGJveGVkIGFzIGEgSlNWYWx1ZTsgb3RoZXJ3aXNlIHRoZSBHQwotICAgICAgICAvLyB3
b3VsZCBuZWVkIGEgd2F5IHRvIGRpc3Rpbmd1aXNoIGNlbGwgcG9pbnRlcnMgZnJvbSBudW1lcmlj
IHByaW1pdGl2ZXMuCi0gICAgICAgIEFTU0VSVChzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7
CisgICAgICAgIC8vIFdlIG9ubHkgc3BpbGwgdmFsdWVzIHRoYXQgaGF2ZSBiZWVuIGJveGVkIGFz
IGEgSlNWYWx1ZSBiZWNhdXNlIGhpc3RvcmljYWxseQorICAgICAgICAvLyB3ZSBhc3N1bWVkIHRo
YXQgdGhlIEdDIHdvdWxkIHdhbnQgdG8gYmUgYWJsZSB0byBwcmVjaXNlbHkgaWRlbnRpZnkgaGVh
cAorICAgICAgICAvLyBwb2ludGVycy4gVGhpcyBpcyBub3QgdHJ1ZSBhbnltb3JlLCBidXQgd2Ug
c3RpbGwgYXNzdW1lLCBpbiB0aGUgZmlsbCBjb2RlLAorICAgICAgICAvLyB0aGF0IGFueSBzcGls
bCBzbG90IGZvciBhIEpTIHZhbHVlIGlzIGJveGVkLiBGb3Igc3RvcmFnZSBwb2ludGVycywgdGhl
cmUgaXMKKyAgICAgICAgLy8gbm90aGluZyB3ZSBjYW4gZG8gdG8gYm94IHRoZW0sIHNvIHdlIGFs
bG93IHRoYXQgdG8gYmUgYW4gZXhjZXB0aW9uLgorICAgICAgICBBU1NFUlQoKHNwaWxsRm9ybWF0
ICYgRGF0YUZvcm1hdEpTKSB8fCBzcGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0U3RvcmFnZSk7CiAK
ICAgICAgICAgbV9yZWdpc3RlckZvcm1hdCA9IERhdGFGb3JtYXROb25lOwogICAgICAgICBtX3Nw
aWxsRm9ybWF0ID0gc3BpbGxGb3JtYXQ7CkBAIC0zMzAsNiArMzQ4LDExIEBAIHB1YmxpYzoKICAg
ICAgICAgbV9yZWdpc3RlckZvcm1hdCA9IERhdGFGb3JtYXREb3VibGU7CiAgICAgICAgIHUuZnBy
ID0gZnByOwogICAgIH0KKyAgICB2b2lkIGZpbGxTdG9yYWdlKEdQUlJlZyBncHIpCisgICAgewor
ICAgICAgICBtX3JlZ2lzdGVyRm9ybWF0ID0gRGF0YUZvcm1hdFN0b3JhZ2U7CisgICAgICAgIHUu
Z3ByID0gZ3ByOworICAgIH0KIAogICAgIGJvb2wgYWxpdmUoKQogICAgIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDk1Mzk3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCwx
OSBAQCBzdHJ1Y3QgTWV0aG9kQ2hlY2tEYXRhIHsKICAgICB9CiB9OwogCitzdHJ1Y3QgU3RvcmFn
ZUFjY2Vzc0RhdGEgeworICAgIHNpemVfdCBvZmZzZXQ7CisgICAgdW5zaWduZWQgaWRlbnRpZmll
ck51bWJlcjsKKyAgICAKKyAgICAvLyBOT1RFOiB0aGUgb2Zmc2V0IGFuZCBpZGVudGlmaWVyTnVt
YmVyIGRvIG5vdCBieSB0aGVtc2VsdmVzCisgICAgLy8gdW5pcXVlbHkgaWRlbnRpZnkgYSBwcm9w
ZXJ0eS4gVGhlIGlkZW50aWZpZXJOdW1iZXIgYW5kIGEKKyAgICAvLyBTdHJ1Y3R1cmUqIGRvLiBJ
ZiB0aG9zZSB0d28gbWF0Y2gsIHRoZW4gdGhlIG9mZnNldCBzaG91bGQKKyAgICAvLyBiZSB0aGUg
c2FtZSwgYXMgd2VsbC4gRm9yIGFueSBOb2RlIHRoYXQgaGFzIGEgU3RvcmFnZUFjY2Vzc0RhdGEs
CisgICAgLy8gaXQgaXMgcG9zc2libGUgdG8gcmV0cmlldmUgdGhlIFN0cnVjdHVyZSogYnkgbG9v
a2luZyBhdCB0aGUKKyAgICAvLyBmaXJzdCBjaGlsZC4gSXQgc2hvdWxkIGJlIGEgQ2hlY2tTdHJ1
Y3R1cmUsIHdoaWNoIGhhcyB0aGUKKyAgICAvLyBTdHJ1Y3R1cmUqLgorfTsKKwogdHlwZWRlZiBW
ZWN0b3IgPEJsb2NrSW5kZXgsIDI+IFByZWRlY2Vzc29yTGlzdDsKIAogc3RydWN0IEJhc2ljQmxv
Y2sgewpAQCAtMTgyLDYgKzE5NSw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBHZXRCeVZhbDoK
ICAgICAgICAgY2FzZSBDYWxsOgogICAgICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAgICAgY2Fz
ZSBHZXRCeU9mZnNldDoKICAgICAgICAgICAgIHJldHVybiBub2RlLnByZWRpY3QocHJlZGljdGlv
biwgc291cmNlKTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTIyMyw2ICsyMzcsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAg
ICAgIGNhc2UgQ2FsbDoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgICAgIGNhc2UgR2V0
QnlPZmZzZXQ6CiAgICAgICAgICAgICByZXR1cm4gbm9kZVB0ci0+Z2V0UHJlZGljdGlvbigpOwog
ICAgICAgICBjYXNlIENoZWNrTWV0aG9kOgogICAgICAgICAgICAgcmV0dXJuIGdldE1ldGhvZENo
ZWNrUHJlZGljdGlvbigqbm9kZVB0cik7CkBAIC0yOTksNiArMzE0LDcgQEAgcHVibGljOgogICAg
IFZlY3RvcjwgT3duUHRyPEJhc2ljQmxvY2s+ICwgOD4gbV9ibG9ja3M7CiAgICAgVmVjdG9yPE5v
ZGVJbmRleCwgMTY+IG1fdmFyQXJnQ2hpbGRyZW47CiAgICAgVmVjdG9yPE1ldGhvZENoZWNrRGF0
YT4gbV9tZXRob2RDaGVja0RhdGE7CisgICAgVmVjdG9yPFN0b3JhZ2VBY2Nlc3NEYXRhPiBtX3N0
b3JhZ2VBY2Nlc3NEYXRhOwogICAgIHVuc2lnbmVkIG1fcHJlc2VydmVkVmFyczsKICAgICB1bnNp
Z25lZCBtX3BhcmFtZXRlclNsb3RzOwogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gOTUzOTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05MSw2ICs5MSw3IEBAIEdQUlJlZyBKSVRDb2RlR2VuZXJhdG9yOjpm
aWxsSW50ZWdlcihOb2QKICAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6CiAgICAgY2FzZSBEYXRh
Rm9ybWF0Qm9vbGVhbjoKICAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46CisgICAgY2FzZSBE
YXRhRm9ybWF0U3RvcmFnZToKICAgICAgICAgLy8gU2hvdWxkIG9ubHkgYmUgY2FsbGluZyB0aGlz
IGZ1bmN0aW9uIGlmIHdlIGtub3cgdGhpcyBvcGVyYW5kIHRvIGJlIGludGVnZXIuCiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCkBAIC0xNjYsNiArMTY3LDcgQEAgRlBSUmVnIEpJVENv
ZGVHZW5lcmF0b3I6OmZpbGxEb3VibGUoTm9kZQogICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoK
ICAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgogICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVh
bjoKKyAgICBjYXNlIERhdGFGb3JtYXRTdG9yYWdlOgogICAgICAgICAvLyBTaG91bGQgb25seSBi
ZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gaWYgd2Uga25vdyB0aGlzIG9wZXJhbmQgdG8gYmUgbnVt
ZXJpYy4KICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAKQEAgLTMxNiw2ICszMTgsNyBA
QCBHUFJSZWcgSklUQ29kZUdlbmVyYXRvcjo6ZmlsbEpTVmFsdWUoTm9kCiAgICAgfQogICAgICAg
ICAKICAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgorICAgIGNhc2UgRGF0YUZvcm1hdFN0b3Jh
Z2U6CiAgICAgICAgIC8vIHRoaXMgdHlwZSBjdXJyZW50bHkgbmV2ZXIgb2NjdXJzCiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KQEAgLTMyNCw2ICszMjcsMzUgQEAgR1BSUmVn
IEpJVENvZGVHZW5lcmF0b3I6OmZpbGxKU1ZhbHVlKE5vZAogICAgIHJldHVybiBJbnZhbGlkR1BS
UmVnOwogfQogCitHUFJSZWcgSklUQ29kZUdlbmVyYXRvcjo6ZmlsbFN0b3JhZ2UoTm9kZUluZGV4
IG5vZGVJbmRleCkKK3sKKyAgICBOb2RlJiBub2RlID0gbV9qaXQuZ3JhcGgoKVtub2RlSW5kZXhd
OworICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBub2RlLnZpcnR1YWxSZWdp
c3RlcigpOworICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0
dWFsUmVnaXN0ZXJdOworICAgIAorICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7
CisgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogeworICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2Nh
dGUoKTsKKyAgICAgICAgQVNTRVJUKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0U3Rv
cmFnZSk7CisgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxs
T3JkZXJTcGlsbGVkKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVz
c0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOworICAgICAgICBpbmZvLmZpbGxTdG9yYWdlKGdw
cik7CisgICAgICAgIHJldHVybiBncHI7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIERhdGFG
b3JtYXRTdG9yYWdlOiB7CisgICAgICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOworICAgICAg
ICBtX2dwcnMubG9jayhncHIpOworICAgICAgICByZXR1cm4gZ3ByOworICAgIH0KKyAgICAgICAg
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAg
IAorICAgIHJldHVybiBJbnZhbGlkR1BSUmVnOworfQorCiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6
OnVzZUNoaWxkcmVuKE5vZGUmIG5vZGUpCiB7CiAgICAgaWYgKG5vZGUub3AgJiBOb2RlSGFzVmFy
QXJncykgewpAQCAtMTA3OCwxNCArMTExMCw2IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9u
U3BlY3VsYXRpdmVJbnMKICAgICBqc1ZhbHVlUmVzdWx0KHNjcmF0Y2hSZWcsIG1fY29tcGlsZUlu
ZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUbywgdHlwZW5hbWUgRnJvbT4KLWlubGluZSBUbyBzYWZlQ2FzdChGcm9tIHZhbHVlKQotewot
ICAgIFRvIHJlc3VsdCA9IHN0YXRpY19jYXN0PFRvPih2YWx1ZSk7Ci0gICAgQVNTRVJUKHJlc3Vs
dCA9PSB2YWx1ZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogSklUQ29tcGlsZXI6OkNhbGwg
SklUQ29kZUdlbmVyYXRvcjo6Y2FjaGVkR2V0QnlJZChHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIHJl
c3VsdEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJ
VENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0LCBOb2RlVHlwZSBub2RlVHlwZSkKIHsKICAg
ICBKSVRDb21waWxlcjo6RGF0YUxhYmVsUHRyIHN0cnVjdHVyZVRvQ29tcGFyZTsKQEAgLTIwNDEs
NiArMjA2NSwxNiBAQCBHUFJUZW1wb3Jhcnk6OkdQUlRlbXBvcmFyeShKSVRDb2RlR2VuZXJhCiAg
ICAgICAgIG1fZ3ByID0gbV9qaXQtPmFsbG9jYXRlKCk7CiB9CiAKK0dQUlRlbXBvcmFyeTo6R1BS
VGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3IqIGppdCwgU3RvcmFnZU9wZXJhbmQmIG9wMSkKKyAg
ICA6IG1faml0KGppdCkKKyAgICAsIG1fZ3ByKEludmFsaWRHUFJSZWcpCit7CisgICAgaWYgKG1f
aml0LT5jYW5SZXVzZShvcDEuaW5kZXgoKSkpCisgICAgICAgIG1fZ3ByID0gbV9qaXQtPnJldXNl
KG9wMS5ncHIoKSk7CisgICAgZWxzZQorICAgICAgICBtX2dwciA9IG1faml0LT5hbGxvY2F0ZSgp
OworfQorCiBGUFJUZW1wb3Jhcnk6OkZQUlRlbXBvcmFyeShKSVRDb2RlR2VuZXJhdG9yKiBqaXQp
CiAgICAgOiBtX2ppdChqaXQpCiAgICAgLCBtX2ZwcihJbnZhbGlkRlBSUmVnKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgJKHJldmlz
aW9uIDk1Mzk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDExICs2MCwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAg
Ly8gdGhlIHJlZ2lzdGVyIGFsbG9jYXRvci4KICAgICBlbnVtIFNwaWxsT3JkZXIgewogICAgICAg
ICBTcGlsbE9yZGVyQ29uc3RhbnQgPSAxLCAvLyBubyBzcGlsbCwgYW5kIGNoZWFwIGZpbGwKLSAg
ICAgICAgU3BpbGxPcmRlclNwaWxsZWQgPSAyLCAgLy8gbm8gc3BpbGwKLSAgICAgICAgU3BpbGxP
cmRlckpTID0gNCwgICAgICAgLy8gbmVlZHMgc3BpbGwKLSAgICAgICAgU3BpbGxPcmRlckNlbGwg
PSA0LCAgICAgLy8gbmVlZHMgc3BpbGwKLSAgICAgICAgU3BpbGxPcmRlckludGVnZXIgPSA1LCAg
Ly8gbmVlZHMgc3BpbGwgYW5kIGJveAotICAgICAgICBTcGlsbE9yZGVyRG91YmxlID0gNiwgICAv
LyBuZWVkcyBzcGlsbCBhbmQgY29udmVydAorICAgICAgICBTcGlsbE9yZGVyU3BpbGxlZCAgPSAy
LCAvLyBubyBzcGlsbAorICAgICAgICBTcGlsbE9yZGVySlMgICAgICAgPSA0LCAvLyBuZWVkcyBz
cGlsbAorICAgICAgICBTcGlsbE9yZGVyQ2VsbCAgICAgPSA0LCAvLyBuZWVkcyBzcGlsbAorICAg
ICAgICBTcGlsbE9yZGVyU3RvcmFnZSAgPSA0LCAvLyBuZWVkcyBzcGlsbAorICAgICAgICBTcGls
bE9yZGVySW50ZWdlciAgPSA1LCAvLyBuZWVkcyBzcGlsbCBhbmQgYm94CisgICAgICAgIFNwaWxs
T3JkZXJEb3VibGUgICA9IDYsIC8vIG5lZWRzIHNwaWxsIGFuZCBjb252ZXJ0CiAgICAgfTsKICAg
ICAKICAgICBlbnVtIFVzZUNoaWxkcmVuTW9kZSB7IENhbGxVc2VDaGlsZHJlbiwgVXNlQ2hpbGRy
ZW5DYWxsZWRFeHBsaWNpdGx5IH07CkBAIC03NCw2ICs3NSw3IEBAIHB1YmxpYzoKICAgICBHUFJS
ZWcgZmlsbEludGVnZXIoTm9kZUluZGV4LCBEYXRhRm9ybWF0JiByZXR1cm5Gb3JtYXQpOwogICAg
IEZQUlJlZyBmaWxsRG91YmxlKE5vZGVJbmRleCk7CiAgICAgR1BSUmVnIGZpbGxKU1ZhbHVlKE5v
ZGVJbmRleCk7CisgICAgR1BSUmVnIGZpbGxTdG9yYWdlKE5vZGVJbmRleCk7CiAKICAgICAvLyBs
b2NrIGFuZCB1bmxvY2sgR1BSICYgRlBSIHJlZ2lzdGVycy4KICAgICB2b2lkIGxvY2soR1BSUmVn
IHJlZykKQEAgLTIyMiwxMCArMjI0LDEwIEBAIHByb3RlY3RlZDoKIAogICAgICAgICBEYXRhRm9y
bWF0IHJlZ2lzdGVyRm9ybWF0ID0gaW5mby5yZWdpc3RlckZvcm1hdCgpOwogCi0gICAgICAgIGlm
IChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcikgeworICAgICAgICBpZiAocmVn
aXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpCiAgICAgICAgICAgICBtX2ppdC5zdG9y
ZTMyKGluZm8uZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCAmIERhdGFGb3Jt
YXRKUyB8fCByZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0Q2VsbCk7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVyRm9ybWF0ICYgRGF0YUZvcm1hdEpTIHx8IHJl
Z2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRDZWxsIHx8IHJlZ2lzdGVyRm9ybWF0ID09IERhdGFG
b3JtYXRTdG9yYWdlKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGluZm8uZ3ByKCksIEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTI3
Myw3ICsyNzUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIGlmIChub2RlLmhhc0NvbnN0YW50KCkp
CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlT2ZKU0NvbnN0YW50QXNJbW1QdHIobm9kZUlu
ZGV4KSwgaW5mby5ncHIoKSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKHJl
Z2lzdGVyRm9ybWF0ICYgRGF0YUZvcm1hdEpTIHx8IHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3Jt
YXRDZWxsKTsKKyAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCAmIERhdGFGb3JtYXRK
UyB8fCByZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0Q2VsbCB8fCByZWdpc3RlckZvcm1hdCA9
PSBEYXRhRm9ybWF0U3RvcmFnZSk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBp
bGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpLCBpbmZvLmdwcigpKTsKICAgICAgICAgfQogICAgIH0K
QEAgLTM4NSw3ICszODcsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIH0KIAogICAgICAgICBEYXRh
Rm9ybWF0IHNwaWxsRm9ybWF0ID0gaW5mby5yZWdpc3RlckZvcm1hdCgpOwotICAgICAgICBpZiAo
c3BpbGxGb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJsZSkgeworICAgICAgICBzd2l0Y2ggKHNwaWxs
Rm9ybWF0KSB7CisgICAgICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZTogewogICAgICAgICAgICAg
Ly8gQWxsIHZhbHVlcyBhcmUgc3BpbGxlZCBhcyBKU1ZhbHVlcywgc28gYm94IHRoZSBkb3VibGUg
dmlhIGEgdGVtcG9yYXJ5IGdwci4KICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBib3hEb3VibGUo
aW5mby5mcHIoKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihncHIsIEpJVENvbXBpbGVy
OjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKQEAgLTM5MywxOSArMzk2LDMwIEBAIHByb3RlY3RlZDoK
ICAgICAgICAgICAgIGluZm8uc3BpbGwoRGF0YUZvcm1hdEpTRG91YmxlKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2UgRGF0YUZvcm1h
dFN0b3JhZ2U6IHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgc3BlY2lhbCwgc2luY2UgaXQncyBu
b3QgYSBKUyB2YWx1ZSAtIGFzIGluIGl0J3Mgbm90IHZpc2libGUgdG8gSlMKKyAgICAgICAgICAg
IC8vIGNvZGUuCisgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihpbmZvLmdwcigpLCBKSVRDb21w
aWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSk7CisgICAgICAgICAgICBpbmZvLnNwaWxsKERhdGFG
b3JtYXRTdG9yYWdlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgICAg
IC8vIFRoZSBmb2xsb3dpbmcgY29kZSBoYW5kbGVzIEpTVmFsdWVzLCBpbnQzMnMsIGFuZCBjZWxs
cy4KLSAgICAgICAgQVNTRVJUKHNwaWxsRm9ybWF0ID09IERhdGFGb3JtYXRJbnRlZ2VyIHx8IHNw
aWxsRm9ybWF0ID09IERhdGFGb3JtYXRDZWxsIHx8IHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpT
KTsKLQotICAgICAgICBHUFJSZWcgcmVnID0gaW5mby5ncHIoKTsKLSAgICAgICAgLy8gV2UgbmVl
ZCB0byBib3ggaW50MzIgYW5kIGNlbGwgdmFsdWVzIC4uLgotICAgICAgICAvLyBidXQgb24gSlNW
QUxVRTY0IGJveGluZyBhIGNlbGwgaXMgYSBuby1vcCEKLSAgICAgICAgaWYgKHNwaWxsRm9ybWF0
ID09IERhdGFGb3JtYXRJbnRlZ2VyKQotICAgICAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWcpOwotCi0gICAgICAgIC8vIFNwaWxsIHRoZSB2YWx1
ZSwgYW5kIHJlY29yZCBpdCBhcyBzcGlsbGVkIGluIGl0cyBib3hlZCBmb3JtLgotICAgICAgICBt
X2ppdC5zdG9yZVB0cihyZWcsIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKLSAg
ICAgICAgaW5mby5zcGlsbCgoRGF0YUZvcm1hdCkoc3BpbGxGb3JtYXQgfCBEYXRhRm9ybWF0SlMp
KTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgY29kZSBo
YW5kbGVzIEpTVmFsdWVzLCBpbnQzMnMsIGFuZCBjZWxscy4KKyAgICAgICAgICAgIEFTU0VSVChz
cGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlciB8fCBzcGlsbEZvcm1hdCA9PSBEYXRhRm9y
bWF0Q2VsbCB8fCBzcGlsbEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIEdQUlJlZyByZWcgPSBpbmZvLmdwcigpOworICAgICAgICAgICAgLy8gV2UgbmVl
ZCB0byBib3ggaW50MzIgYW5kIGNlbGwgdmFsdWVzIC4uLgorICAgICAgICAgICAgLy8gYnV0IG9u
IEpTVkFMVUU2NCBib3hpbmcgYSBjZWxsIGlzIGEgbm8tb3AhCisgICAgICAgICAgICBpZiAoc3Bp
bGxGb3JtYXQgPT0gRGF0YUZvcm1hdEludGVnZXIpCisgICAgICAgICAgICAgICAgbV9qaXQub3JQ
dHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWcpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICAvLyBTcGlsbCB0aGUgdmFsdWUsIGFuZCByZWNvcmQgaXQgYXMgc3BpbGxlZCBp
biBpdHMgYm94ZWQgZm9ybS4KKyAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHJlZywgSklUQ29t
cGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOworICAgICAgICAgICAgaW5mby5zcGlsbCgoRGF0
YUZvcm1hdCkoc3BpbGxGb3JtYXQgfCBEYXRhRm9ybWF0SlMpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICBib29sIGlzU3RyaWN0SW50MzIoTm9kZUlu
ZGV4KTsKQEAgLTY5OSw2ICs3MTMsMTcgQEAgcHJvdGVjdGVkOgogICAgIHsKICAgICAgICAganNW
YWx1ZVJlc3VsdChyZWcsIG5vZGVJbmRleCwgRGF0YUZvcm1hdEpTLCBtb2RlKTsKICAgICB9Cisg
ICAgdm9pZCBzdG9yYWdlUmVzdWx0KEdQUlJlZyByZWcsIE5vZGVJbmRleCBub2RlSW5kZXgsIFVz
ZUNoaWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVzZUNoaWxkcmVuKQorICAgIHsKKyAgICAgICAgTm9k
ZSYgbm9kZSA9IG1faml0LmdyYXBoKClbbm9kZUluZGV4XTsKKyAgICAgICAgaWYgKG1vZGUgPT0g
Q2FsbFVzZUNoaWxkcmVuKQorICAgICAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7CisgICAgICAg
IAorICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS52aXJ0dWFs
UmVnaXN0ZXIoKTsKKyAgICAgICAgbV9ncHJzLnJldGFpbihyZWcsIHZpcnR1YWxSZWdpc3Rlciwg
U3BpbGxPcmRlclN0b3JhZ2UpOworICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1fZ2Vu
ZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKKyAgICAgICAgaW5mby5pbml0U3RvcmFnZShu
b2RlSW5kZXgsIG5vZGUucmVmQ291bnQoKSwgcmVnKTsKKyAgICB9CiAgICAgdm9pZCBkb3VibGVS
ZXN1bHQoRlBSUmVnIHJlZywgTm9kZUluZGV4IG5vZGVJbmRleCwgVXNlQ2hpbGRyZW5Nb2RlIG1v
ZGUgPSBDYWxsVXNlQ2hpbGRyZW4pCiAgICAgewogICAgICAgICBOb2RlJiBub2RlID0gbV9qaXQu
Z3JhcGgoKVtub2RlSW5kZXhdOwpAQCAtMTE1OSw2ICsxMTg0LDQ3IEBAIHByaXZhdGU6CiAgICAg
R1BSUmVnIG1fZ3ByT3JJbnZhbGlkOwogfTsKIAorY2xhc3MgU3RvcmFnZU9wZXJhbmQgeworcHVi
bGljOgorICAgIGV4cGxpY2l0IFN0b3JhZ2VPcGVyYW5kKEpJVENvZGVHZW5lcmF0b3IqIGppdCwg
Tm9kZUluZGV4IGluZGV4KQorICAgICAgICA6IG1faml0KGppdCkKKyAgICAgICAgLCBtX2luZGV4
KGluZGV4KQorICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCisgICAgewor
ICAgICAgICBBU1NFUlQobV9qaXQpOworICAgICAgICBpZiAoaml0LT5pc0ZpbGxlZChpbmRleCkp
CisgICAgICAgICAgICBncHIoKTsKKyAgICB9CisgICAgCisgICAgflN0b3JhZ2VPcGVyYW5kKCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX2dwck9ySW52YWxpZCAhPSBJbnZhbGlkR1BSUmVnKTsK
KyAgICAgICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CisgICAgfQorICAgIAorICAg
IE5vZGVJbmRleCBpbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pbmRleDsK
KyAgICB9CisgICAgCisgICAgR1BSUmVnIGdwcigpCisgICAgeworICAgICAgICBpZiAobV9ncHJP
ckludmFsaWQgPT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0g
bV9qaXQtPmZpbGxTdG9yYWdlKGluZGV4KCkpOworICAgICAgICByZXR1cm4gbV9ncHJPckludmFs
aWQ7CisgICAgfQorICAgIAorICAgIHZvaWQgdXNlKCkKKyAgICB7CisgICAgICAgIG1faml0LT51
c2UobV9pbmRleCk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBKSVRDb2RlR2VuZXJhdG9y
KiBtX2ppdDsKKyAgICBOb2RlSW5kZXggbV9pbmRleDsKKyAgICBHUFJSZWcgbV9ncHJPckludmFs
aWQ7Cit9OworCiAKIC8vID09PSBUZW1wb3JhcmllcyA9PT0KIC8vCkBAIC0xMTc4LDYgKzEyNDQs
NyBAQCBwdWJsaWM6CiAgICAgR1BSVGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3IqLCBTcGVjdWxh
dGVDZWxsT3BlcmFuZCYpOwogICAgIEdQUlRlbXBvcmFyeShKSVRDb2RlR2VuZXJhdG9yKiwgU3Bl
Y3VsYXRlQm9vbGVhbk9wZXJhbmQmKTsKICAgICBHUFJUZW1wb3JhcnkoSklUQ29kZUdlbmVyYXRv
ciosIEpTVmFsdWVPcGVyYW5kJik7CisgICAgR1BSVGVtcG9yYXJ5KEpJVENvZGVHZW5lcmF0b3Iq
LCBTdG9yYWdlT3BlcmFuZCYpOwogCiAgICAgfkdQUlRlbXBvcmFyeSgpCiAgICAgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDk1Mzk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOSwxMCAr
MTE5LDExIEBAIHByaXZhdGU6CiAjZGVmaW5lIE5vZGVNaWdodENsb2JiZXIgIDB4ODAwMDAwCiAK
IC8vIFRoZXNlIHZhbHVlcyByZWNvcmQgdGhlIHJlc3VsdCB0eXBlIG9mIHRoZSBub2RlIChhcyBj
aGVja2VkIGJ5IE5vZGVSZXN1bHRNYXNrLCBhYm92ZSksIDAgZm9yIG5vIHJlc3VsdC4KLSNkZWZp
bmUgTm9kZVJlc3VsdEpTICAgICAgMHgxMDAwCi0jZGVmaW5lIE5vZGVSZXN1bHROdW1iZXIgIDB4
MjAwMAotI2RlZmluZSBOb2RlUmVzdWx0SW50MzIgICAweDMwMDAKLSNkZWZpbmUgTm9kZVJlc3Vs
dEJvb2xlYW4gMHg0MDAwCisjZGVmaW5lIE5vZGVSZXN1bHRKUyAgICAgICAgMHgxMDAwCisjZGVm
aW5lIE5vZGVSZXN1bHROdW1iZXIgICAgMHgyMDAwCisjZGVmaW5lIE5vZGVSZXN1bHRJbnQzMiAg
ICAgMHgzMDAwCisjZGVmaW5lIE5vZGVSZXN1bHRCb29sZWFuICAgMHg0MDAwCisjZGVmaW5lIE5v
ZGVSZXN1bHRTdG9yYWdlICAgMHg1MDAwCiAKIC8vIFRoaXMgbWFjcm8gZGVmaW5lcyBhIHNldCBv
ZiBpbmZvcm1hdGlvbiBhYm91dCBhbGwga25vd24gbm9kZSB0eXBlcywgdXNlZCB0byBwb3B1bGF0
ZSBOb2RlSWQsIE5vZGVUeXBlIGJlbG93LgogI2RlZmluZSBGT1JfRUFDSF9ERkdfT1AobWFjcm8p
IFwKQEAgLTE3NCw2ICsxNzUsOCBAQCBwcml2YXRlOgogICAgIG1hY3JvKEdldEJ5SWQsIE5vZGVS
ZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIG1h
Y3JvKFB1dEJ5SWQsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAg
IG1hY3JvKFB1dEJ5SWREaXJlY3QsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3Js
ZCkgXAorICAgIG1hY3JvKENoZWNrU3RydWN0dXJlLCBOb2RlUmVzdWx0U3RvcmFnZSB8IE5vZGVN
dXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhHZXRCeU9mZnNldCwgTm9kZVJlc3VsdEpTKSBcCiAg
ICAgbWFjcm8oR2V0TWV0aG9kLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAg
ICAgbWFjcm8oQ2hlY2tNZXRob2QsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwK
ICAgICBtYWNybyhHZXRHbG9iYWxWYXIsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUp
IFwKQEAgLTIyOCw4ICsyMzEsMTEgQEAgZW51bSBOb2RlVHlwZSB7CiAvLyBkaXN0aW5ndWlzaGVz
IGFuIGltbWVkaWF0ZSB2YWx1ZSAodHlwaWNhbGx5IGFuIGluZGV4IGludG8gYSBDb2RlQmxvY2sg
ZGF0YSBzdHJ1Y3R1cmUgLSAKIC8vIGEgY29uc3RhbnQgaW5kZXgsIGFyZ3VtZW50LCBvciBpZGVu
dGlmaWVyKSBmcm9tIGEgTm9kZUluZGV4Lgogc3RydWN0IE9wSW5mbyB7Ci0gICAgZXhwbGljaXQg
T3BJbmZvKHVuc2lnbmVkIHZhbHVlKSA6IG1fdmFsdWUodmFsdWUpIHt9Ci0gICAgdW5zaWduZWQg
bV92YWx1ZTsKKyAgICBleHBsaWNpdCBPcEluZm8oaW50IHZhbHVlKSA6IG1fdmFsdWUodmFsdWUp
IHsgfQorICAgIGV4cGxpY2l0IE9wSW5mbyh1bnNpZ25lZCB2YWx1ZSkgOiBtX3ZhbHVlKHZhbHVl
KSB7IH0KKyAgICBleHBsaWNpdCBPcEluZm8odWludHB0cl90IHZhbHVlKSA6IG1fdmFsdWUodmFs
dWUpIHsgfQorICAgIGV4cGxpY2l0IE9wSW5mbyh2b2lkKiB2YWx1ZSkgOiBtX3ZhbHVlKHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pih2YWx1ZSkpIHsgfQorICAgIHVpbnRwdHJfdCBtX3ZhbHVl
OwogfTsKIAogLy8gPT09IE5vZGUgPT09CkBAIC0yNzIsNyArMjc4LDcgQEAgc3RydWN0IE5vZGUg
ewogICAgICAgICAsIG1fdmlydHVhbFJlZ2lzdGVyKEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCiAg
ICAgICAgICwgbV9yZWZDb3VudCgwKQogICAgICAgICAsIG1fb3BJbmZvKGltbTEubV92YWx1ZSkK
LSAgICAgICAgLCBtX29wSW5mbzIoaW1tMi5tX3ZhbHVlKQorICAgICAgICAsIG1fb3BJbmZvMihz
YWZlQ2FzdDx1bnNpZ25lZD4oaW1tMi5tX3ZhbHVlKSkKICAgICB7CiAgICAgICAgIEFTU0VSVCgh
KG9wICYgTm9kZUhhc1ZhckFyZ3MpKTsKICAgICAgICAgY2hpbGRyZW4uZml4ZWQuY2hpbGQxID0g
Y2hpbGQxOwpAQCAtMjg3LDcgKzI5Myw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgLCBtX3Zp
cnR1YWxSZWdpc3RlcihJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKQogICAgICAgICAsIG1fcmVmQ291
bnQoMCkKICAgICAgICAgLCBtX29wSW5mbyhpbW0xLm1fdmFsdWUpCi0gICAgICAgICwgbV9vcElu
Zm8yKGltbTIubV92YWx1ZSkKKyAgICAgICAgLCBtX29wSW5mbzIoc2FmZUNhc3Q8dW5zaWduZWQ+
KGltbTIubV92YWx1ZSkpCiAgICAgewogICAgICAgICBBU1NFUlQob3AgJiBOb2RlSGFzVmFyQXJn
cyk7CiAgICAgICAgIGNoaWxkcmVuLnZhcmlhYmxlLmZpcnN0Q2hpbGQgPSBmaXJzdENoaWxkOwpA
QCAtNDQ3LDYgKzQ1Myw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgY2FzZSBHZXRCeVZhbDoK
ICAgICAgICAgY2FzZSBDYWxsOgogICAgICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAgICAgY2Fz
ZSBHZXRCeU9mZnNldDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDg4LDYgKzQ5NSwyNiBAQCBzdHJ1Y3Qg
Tm9kZSB7CiAgICAgICAgIHJldHVybiBtX29wSW5mbzI7CiAgICAgfQogICAgIAorICAgIGJvb2wg
aGFzU3RydWN0dXJlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBvcCA9PSBDaGVja1N0cnVjdHVy
ZTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlKj4obV9vcEluZm8pOworICAgIH0K
KyAgICAKKyAgICBib29sIGhhc1N0b3JhZ2VBY2Nlc3NEYXRhKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBvcCA9PSBHZXRCeU9mZnNldDsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgc3RvcmFn
ZUFjY2Vzc0RhdGFJbmRleCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9vcEluZm87CisgICAg
fQorICAgIAogICAgIGJvb2wgaGFzVmlydHVhbFJlZ2lzdGVyKCkKICAgICB7CiAgICAgICAgIHJl
dHVybiBtX3ZpcnR1YWxSZWdpc3RlciAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyOwpAQCAtNTk5
LDggKzYyNiwxMCBAQCBwcml2YXRlOgogICAgIFZpcnR1YWxSZWdpc3RlciBtX3ZpcnR1YWxSZWdp
c3RlcjsKICAgICAvLyBUaGUgbnVtYmVyIG9mIHVzZXMgb2YgdGhlIHJlc3VsdCBvZiB0aGlzIG9w
ZXJhdGlvbiAoKzEgZm9yICdtdXN0IGdlbmVyYXRlJyBub2Rlcywgd2hpY2ggaGF2ZSBzaWRlLWVm
ZmVjdHMpLgogICAgIHVuc2lnbmVkIG1fcmVmQ291bnQ7Ci0gICAgLy8gSW1tZWRpYXRlIHZhbHVl
cywgYWNjZXNzZXMgdHlwZS1jaGVja2VkIHZpYSBhY2Nlc3NvcnMgYWJvdmUuCi0gICAgdW5zaWdu
ZWQgbV9vcEluZm8sIG1fb3BJbmZvMjsKKyAgICAvLyBJbW1lZGlhdGUgdmFsdWVzLCBhY2Nlc3Nl
cyB0eXBlLWNoZWNrZWQgdmlhIGFjY2Vzc29ycyBhYm92ZS4gVGhlIGZpcnN0IG9uZSBpcworICAg
IC8vIGJpZyBlbm91Z2ggdG8gc3RvcmUgYSBwb2ludGVyLgorICAgIHVpbnRwdHJfdCBtX29wSW5m
bzsKKyAgICB1bnNpZ25lZCBtX29wSW5mbzI7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJ
KHJldmlzaW9uIDk1Mzk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcyLDYgKzI3MiwyNCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIENo
ZWNrU3RydWN0dXJlOiB7CisgICAgICAgICAgICAvLyBXZSBiYWNrd2FyZCBwcm9wYWdhdGUgd2hh
dCB0aGlzIENoZWNrU3RydWN0dXJlIHRlbGxzIHVzLiBNYXliZSB0aGF0J3MgdGhlIHJpZ2h0IHdh
eQorICAgICAgICAgICAgLy8gdG8gZ287IG1heWJlIGl0IGlzbid0LiBJJ20gbm90IHN1cmUuIFdo
YXQgd2UnZCByZWFsbHkgd2FudCBpcyBmbG93LXNlbnNpdGl2ZQorICAgICAgICAgICAgLy8gZm9y
d2FyZCBwcm9wYWdhdGlvbiBvZiB3aGF0IHdlIGxlYXJuIGZyb20gaGF2aW5nIGV4ZWN1dGVkIENo
ZWNrU3RydWN0dXJlLiBCdXQgZm9yCisgICAgICAgICAgICAvLyBub3cgd2UgcHJlc2VydmUgdGhl
IGZsb3ctaW5zZW5zaXRpdmUgbmF0dXJlIG9mIHRoaXMgYW5hbHlzaXMsIGJlY2F1c2UgaXQncyBj
aGVhcCB0bworICAgICAgICAgICAgLy8gcnVuIGFuZCBzZWVtcyB0byB3b3JrIHdlbGwgZW5vdWdo
LgorICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVVzZShub2RlLmNoaWxkMSgpLCBwcmVkaWN0
aW9uRnJvbVN0cnVjdHVyZShub2RlLnN0cnVjdHVyZSgpKSB8IFN0cm9uZ1ByZWRpY3Rpb25UYWcp
OworICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFByZWRpY3RPdGhlciB8IFN0
cm9uZ1ByZWRpY3Rpb25UYWcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OiB7CisgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG5vZGUucHJlZGljdChtX3VzZXNbbV9jb21waWxlSW5kZXhdICYgflByZWRpY3Rpb25UYWdN
YXNrLCBTdHJvbmdQcmVkaWN0aW9uKTsKKyAgICAgICAgICAgIGlmIChpc1N0cm9uZ1ByZWRpY3Rp
b24obm9kZS5nZXRQcmVkaWN0aW9uKCkpKQorICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0
UHJlZGljdGlvbihub2RlLmdldFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQ2hlY2tNZXRob2Q6IHsKICAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VVc2Uobm9kZS5jaGlsZDEoKSwgUHJlZGljdE9iamVjdFVu
a25vd24gfCBTdHJvbmdQcmVkaWN0aW9uVGFnKTsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0
UHJlZGljdGlvbihtX2dyYXBoLmdldE1ldGhvZENoZWNrUHJlZGljdGlvbihub2RlKSk7CkBAIC01
OTUsNyArNjEzLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBOb2RlSW5kZXggZ2xvYmFsVmFyTG9h
ZEVsaW1pbmF0aW9uKHVuc2lnbmVkIHZhck51bWJlcikKICAgICB7Ci0gICAgICAgIE5vZGVJbmRl
eCBzdGFydCA9IHN0YXJ0SW5kZXgoKTsKKyAgICAgICAgTm9kZUluZGV4IHN0YXJ0ID0gc3RhcnRJ
bmRleEZvckNoaWxkcmVuKCk7CiAgICAgICAgIGZvciAoTm9kZUluZGV4IGluZGV4ID0gbV9jb21w
aWxlSW5kZXg7IGluZGV4LS0gPiBzdGFydDspIHsKICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBt
X2dyYXBoW2luZGV4XTsKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCkgewpAQCAtNjQxLDcg
KzY1OSw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgTm9kZUluZGV4IGdldE1ldGhvZExvYWRFbGlt
aW5hdGlvbihjb25zdCBNZXRob2RDaGVja0RhdGEmIG1ldGhvZENoZWNrRGF0YSwgdW5zaWduZWQg
aWRlbnRpZmllck51bWJlciwgTm9kZUluZGV4IGNoaWxkMSkKICAgICB7Ci0gICAgICAgIE5vZGVJ
bmRleCBzdGFydCA9IHN0YXJ0SW5kZXgoKTsKKyAgICAgICAgTm9kZUluZGV4IHN0YXJ0ID0gc3Rh
cnRJbmRleEZvckNoaWxkcmVuKGNoaWxkMSk7CiAgICAgICAgIGZvciAoTm9kZUluZGV4IGluZGV4
ID0gbV9jb21waWxlSW5kZXg7IGluZGV4LS0gPiBzdGFydDspIHsKICAgICAgICAgICAgIE5vZGUm
IG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKICAgICAgICAgICAgIGlmIChub2RlLm9wID09IENoZWNr
TWV0aG9kCkBAIC02NTUsNiArNjczLDM2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBOb05v
ZGU7CiAgICAgfQogICAgIAorICAgIE5vZGVJbmRleCBjaGVja1N0cnVjdHVyZUxvYWRFbGltaW5h
dGlvbihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTm9kZUluZGV4IGNoaWxkMSkKKyAgICB7CisgICAg
ICAgIE5vZGVJbmRleCBzdGFydCA9IHN0YXJ0SW5kZXhGb3JDaGlsZHJlbihjaGlsZDEpOworICAg
ICAgICBmb3IgKE5vZGVJbmRleCBpbmRleCA9IG1fY29tcGlsZUluZGV4OyBpbmRleC0tID4gc3Rh
cnQ7KSB7CisgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07CisgICAgICAg
ICAgICBpZiAobm9kZS5vcCA9PSBDaGVja1N0cnVjdHVyZQorICAgICAgICAgICAgICAgICYmIG5v
ZGUuY2hpbGQxKCkgPT0gY2hpbGQxCisgICAgICAgICAgICAgICAgJiYgbm9kZS5zdHJ1Y3R1cmUo
KSA9PSBzdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAg
ICAgaWYgKGNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgfQorICAgIAorICAgIE5vZGVJbmRl
eCBnZXRCeU9mZnNldExvYWRFbGltaW5hdGlvbih1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBO
b2RlSW5kZXggY2hpbGQxKQorICAgIHsKKyAgICAgICAgTm9kZUluZGV4IHN0YXJ0ID0gc3RhcnRJ
bmRleEZvckNoaWxkcmVuKGNoaWxkMSk7CisgICAgICAgIGZvciAoTm9kZUluZGV4IGluZGV4ID0g
bV9jb21waWxlSW5kZXg7IGluZGV4LS0gPiBzdGFydDspIHsKKyAgICAgICAgICAgIE5vZGUmIG5v
ZGUgPSBtX2dyYXBoW2luZGV4XTsKKyAgICAgICAgICAgIGlmIChub2RlLm9wID09IEdldEJ5T2Zm
c2V0CisgICAgICAgICAgICAgICAgJiYgbm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEKKyAgICAgICAg
ICAgICAgICAmJiBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNz
RGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikKKyAgICAg
ICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgICAgICBpZiAoY2xvYmJlcnNXb3JsZChp
bmRleCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IE5vTm9kZTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBwZXJmb3JtU3Vic3RpdHV0aW9uKE5vZGVJ
bmRleCYgY2hpbGQpCiAgICAgewogICAgICAgICAvLyBDaGVjayBpZiB0aGlzIG9wZXJhbmQgaXMg
YWN0dWFsbHkgdW51c2VkLgpAQCAtNzc3LDYgKzgyNSwxNCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgc2V0UmVwbGFjZW1lbnQoZ2V0TWV0aG9kTG9hZEVsaW1pbmF0aW9uKG1fZ3JhcGgubV9tZXRo
b2RDaGVja0RhdGFbbm9kZS5tZXRob2RDaGVja0RhdGFJbmRleCgpXSwgbm9kZS5pZGVudGlmaWVy
TnVtYmVyKCksIG5vZGUuY2hpbGQxKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgICAgICBzZXRSZXBsYWNl
bWVudChjaGVja1N0cnVjdHVyZUxvYWRFbGltaW5hdGlvbihub2RlLnN0cnVjdHVyZSgpLCBub2Rl
LmNoaWxkMSgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIEdldEJ5T2Zmc2V0OgorICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0QnlPZmZzZXRM
b2FkRWxpbWluYXRpb24obV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUuc3RvcmFnZUFj
Y2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyLCBub2RlLmNoaWxkMSgpKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgLy8gZG8gbm90aGluZy4KICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDk1Mzk3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0MSw2ICsxNDEsOSBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxTcGVjdWxhdGVJbnRJCiAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2Vy
OwogICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKICAgICB9CisgICAgICAgIAorICAgIGNhc2Ug
RGF0YUZvcm1hdFN0b3JhZ2U6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0K
IAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjcyLDYgKzI3NSw3IEBAIEZQUlJlZyBT
cGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0
ZXJGb3JtYXQoKSkgewogICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6IC8vIFNob3VsZCBoYXZlIGZp
bGxlZCwgYWJvdmUuCiAgICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjogLy8gVGhpcyB0eXBlIG5l
dmVyIG9jY3Vycy4KKyAgICBjYXNlIERhdGFGb3JtYXRTdG9yYWdlOgogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgCiAgICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoKQEAgLTQw
Niw2ICs0MTAsOSBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAg
ICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKCk7CiAgICAgICAgIHJldHVybiBh
bGxvY2F0ZSgpOwogICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBEYXRhRm9ybWF0U3RvcmFnZToK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CkBAIC00NzYsNiArNDgzLDkgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxs
U3BlY3VsYXRlQm9vbAogICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbigpOwog
ICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKICAgICB9CisgICAgICAgIAorICAgIGNhc2UgRGF0
YUZvcm1hdFN0b3JhZ2U6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAog
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTM5Miw2ICsxNDAyLDM2IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwog
ICAgICAgICBicmVhazsKICAgICB9CisKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlOiB7CisgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgYmFzZSk7CisgICAgICAgIAorICAgICAgICBH
UFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisgICAgICAgIAorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJy
YW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0
cihub2RlLnN0cnVjdHVyZSgpKSkpOworICAgICAgICAKKyAgICAgICAgbV9qaXQubG9hZFB0cihK
SVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZQcm9wZXJ0eVN0
b3JhZ2UoKSksIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBzdG9yYWdlUmVzdWx0KHJl
c3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAg
IAorICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
LCBzdG9yYWdlKTsKKyAgICAgICAgCisgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFn
ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAg
ICAgCisgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhJiBzdG9yYWdlQWNjZXNzRGF0YSA9IG1faml0
LmdyYXBoKCkubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgo
KV07CisgICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjpBZGRyZXNz
KHN0b3JhZ2VHUFIsIHN0b3JhZ2VBY2Nlc3NEYXRhLm9mZnNldCAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpLCByZXN1bHRHUFIpOworICAgICAgICAKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgICAgICAK
ICAgICBjYXNlIEdldE1ldGhvZDogewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9T
dGRMaWJFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1N0
ZExpYkV4dHJhcy5oCShyZXZpc2lvbiA5NTM5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvU3RkTGliRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw2ICsxMDIsMTQgQEAgaW5s
aW5lIFRPIGJpdHdpc2VfY2FzdChGUk9NIGZyb20pCiAgICAgcmV0dXJuIHUudG87CiB9CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIFRvLCB0eXBlbmFtZSBGcm9tPgoraW5saW5lIFRvIHNhZmVDYXN0KEZy
b20gdmFsdWUpCit7CisgICAgVG8gcmVzdWx0ID0gc3RhdGljX2Nhc3Q8VG8+KHZhbHVlKTsKKyAg
ICBBU1NFUlQocmVzdWx0ID09IHZhbHVlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiAvLyBS
ZXR1cm5zIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiBiaXRzIHNldCBpbiAnYml0cycuCiBpbmxp
bmUgc2l6ZV90IGJpdENvdW50KHVuc2lnbmVkIGJpdHMpCiB7CkBAIC0yMDksNSArMjE3LDYgQEAg
aW5saW5lIEFycmF5RWxlbWVudFR5cGUqIGdlbmVyaWNCaW5hcnlTZQogCiB1c2luZyBXVEY6OmJp
bmFyeVNlYXJjaDsKIHVzaW5nIFdURjo6Yml0d2lzZV9jYXN0OwordXNpbmcgV1RGOjpzYWZlQ2Fz
dDsKIAogI2VuZGlmIC8vIFdURl9TdGRMaWJFeHRyYXNfaAo=
</data>
<flag name="review"
          id="104577"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>